OZE_Sensor.list 2.4 MB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841148421484314844148451484614847148481484914850148511485214853148541485514856148571485814859148601486114862148631486414865148661486714868148691487014871148721487314874148751487614877148781487914880148811488214883148841488514886148871488814889148901489114892148931489414895148961489714898148991490014901149021490314904149051490614907149081490914910149111491214913149141491514916149171491814919149201492114922149231492414925149261492714928149291493014931149321493314934149351493614937149381493914940149411494214943149441494514946149471494814949149501495114952149531495414955149561495714958149591496014961149621496314964149651496614967149681496914970149711497214973149741497514976149771497814979149801498114982149831498414985149861498714988149891499014991149921499314994149951499614997149981499915000150011500215003150041500515006150071500815009150101501115012150131501415015150161501715018150191502015021150221502315024150251502615027150281502915030150311503215033150341503515036150371503815039150401504115042150431504415045150461504715048150491505015051150521505315054150551505615057150581505915060150611506215063150641506515066150671506815069150701507115072150731507415075150761507715078150791508015081150821508315084150851508615087150881508915090150911509215093150941509515096150971509815099151001510115102151031510415105151061510715108151091511015111151121511315114151151511615117151181511915120151211512215123151241512515126151271512815129151301513115132151331513415135151361513715138151391514015141151421514315144151451514615147151481514915150151511515215153151541515515156151571515815159151601516115162151631516415165151661516715168151691517015171151721517315174151751517615177151781517915180151811518215183151841518515186151871518815189151901519115192151931519415195151961519715198151991520015201152021520315204152051520615207152081520915210152111521215213152141521515216152171521815219152201522115222152231522415225152261522715228152291523015231152321523315234152351523615237152381523915240152411524215243152441524515246152471524815249152501525115252152531525415255152561525715258152591526015261152621526315264152651526615267152681526915270152711527215273152741527515276152771527815279152801528115282152831528415285152861528715288152891529015291152921529315294152951529615297152981529915300153011530215303153041530515306153071530815309153101531115312153131531415315153161531715318153191532015321153221532315324153251532615327153281532915330153311533215333153341533515336153371533815339153401534115342153431534415345153461534715348153491535015351153521535315354153551535615357153581535915360153611536215363153641536515366153671536815369153701537115372153731537415375153761537715378153791538015381153821538315384153851538615387153881538915390153911539215393153941539515396153971539815399154001540115402154031540415405154061540715408154091541015411154121541315414154151541615417154181541915420154211542215423154241542515426154271542815429154301543115432154331543415435154361543715438154391544015441154421544315444154451544615447154481544915450154511545215453154541545515456154571545815459154601546115462154631546415465154661546715468154691547015471154721547315474154751547615477154781547915480154811548215483154841548515486154871548815489154901549115492154931549415495154961549715498154991550015501155021550315504155051550615507155081550915510155111551215513155141551515516155171551815519155201552115522155231552415525155261552715528155291553015531155321553315534155351553615537155381553915540155411554215543155441554515546155471554815549155501555115552155531555415555155561555715558155591556015561155621556315564155651556615567155681556915570155711557215573155741557515576155771557815579155801558115582155831558415585155861558715588155891559015591155921559315594155951559615597155981559915600156011560215603156041560515606156071560815609156101561115612156131561415615156161561715618156191562015621156221562315624156251562615627156281562915630156311563215633156341563515636156371563815639156401564115642156431564415645156461564715648156491565015651156521565315654156551565615657156581565915660156611566215663156641566515666156671566815669156701567115672156731567415675156761567715678156791568015681156821568315684156851568615687156881568915690156911569215693156941569515696156971569815699157001570115702157031570415705157061570715708157091571015711157121571315714157151571615717157181571915720157211572215723157241572515726157271572815729157301573115732157331573415735157361573715738157391574015741157421574315744157451574615747157481574915750157511575215753157541575515756157571575815759157601576115762157631576415765157661576715768157691577015771157721577315774157751577615777157781577915780157811578215783157841578515786157871578815789157901579115792157931579415795157961579715798157991580015801158021580315804158051580615807158081580915810158111581215813158141581515816158171581815819158201582115822158231582415825158261582715828158291583015831158321583315834158351583615837158381583915840158411584215843158441584515846158471584815849158501585115852158531585415855158561585715858158591586015861158621586315864158651586615867158681586915870158711587215873158741587515876158771587815879158801588115882158831588415885158861588715888158891589015891158921589315894158951589615897158981589915900159011590215903159041590515906159071590815909159101591115912159131591415915159161591715918159191592015921159221592315924159251592615927159281592915930159311593215933159341593515936159371593815939159401594115942159431594415945159461594715948159491595015951159521595315954159551595615957159581595915960159611596215963159641596515966159671596815969159701597115972159731597415975159761597715978159791598015981159821598315984159851598615987159881598915990159911599215993159941599515996159971599815999160001600116002160031600416005160061600716008160091601016011160121601316014160151601616017160181601916020160211602216023160241602516026160271602816029160301603116032160331603416035160361603716038160391604016041160421604316044160451604616047160481604916050160511605216053160541605516056160571605816059160601606116062160631606416065160661606716068160691607016071160721607316074160751607616077160781607916080160811608216083160841608516086160871608816089160901609116092160931609416095160961609716098160991610016101161021610316104161051610616107161081610916110161111611216113161141611516116161171611816119161201612116122161231612416125161261612716128161291613016131161321613316134161351613616137161381613916140161411614216143161441614516146161471614816149161501615116152161531615416155161561615716158161591616016161161621616316164161651616616167161681616916170161711617216173161741617516176161771617816179161801618116182161831618416185161861618716188161891619016191161921619316194161951619616197161981619916200162011620216203162041620516206162071620816209162101621116212162131621416215162161621716218162191622016221162221622316224162251622616227162281622916230162311623216233162341623516236162371623816239162401624116242162431624416245162461624716248162491625016251162521625316254162551625616257162581625916260162611626216263162641626516266162671626816269162701627116272162731627416275162761627716278162791628016281162821628316284162851628616287162881628916290162911629216293162941629516296162971629816299163001630116302163031630416305163061630716308163091631016311163121631316314163151631616317163181631916320163211632216323163241632516326163271632816329163301633116332163331633416335163361633716338163391634016341163421634316344163451634616347163481634916350163511635216353163541635516356163571635816359163601636116362163631636416365163661636716368163691637016371163721637316374163751637616377163781637916380163811638216383163841638516386163871638816389163901639116392163931639416395163961639716398163991640016401164021640316404164051640616407164081640916410164111641216413164141641516416164171641816419164201642116422164231642416425164261642716428164291643016431164321643316434164351643616437164381643916440164411644216443164441644516446164471644816449164501645116452164531645416455164561645716458164591646016461164621646316464164651646616467164681646916470164711647216473164741647516476164771647816479164801648116482164831648416485164861648716488164891649016491164921649316494164951649616497164981649916500165011650216503165041650516506165071650816509165101651116512165131651416515165161651716518165191652016521165221652316524165251652616527165281652916530165311653216533165341653516536165371653816539165401654116542165431654416545165461654716548165491655016551165521655316554165551655616557165581655916560165611656216563165641656516566165671656816569165701657116572165731657416575165761657716578165791658016581165821658316584165851658616587165881658916590165911659216593165941659516596165971659816599166001660116602166031660416605166061660716608166091661016611166121661316614166151661616617166181661916620166211662216623166241662516626166271662816629166301663116632166331663416635166361663716638166391664016641166421664316644166451664616647166481664916650166511665216653166541665516656166571665816659166601666116662166631666416665166661666716668166691667016671166721667316674166751667616677166781667916680166811668216683166841668516686166871668816689166901669116692166931669416695166961669716698166991670016701167021670316704167051670616707167081670916710167111671216713167141671516716167171671816719167201672116722167231672416725167261672716728167291673016731167321673316734167351673616737167381673916740167411674216743167441674516746167471674816749167501675116752167531675416755167561675716758167591676016761167621676316764167651676616767167681676916770167711677216773167741677516776167771677816779167801678116782167831678416785167861678716788167891679016791167921679316794167951679616797167981679916800168011680216803168041680516806168071680816809168101681116812168131681416815168161681716818168191682016821168221682316824168251682616827168281682916830168311683216833168341683516836168371683816839168401684116842168431684416845168461684716848168491685016851168521685316854168551685616857168581685916860168611686216863168641686516866168671686816869168701687116872168731687416875168761687716878168791688016881168821688316884168851688616887168881688916890168911689216893168941689516896168971689816899169001690116902169031690416905169061690716908169091691016911169121691316914169151691616917169181691916920169211692216923169241692516926169271692816929169301693116932169331693416935169361693716938169391694016941169421694316944169451694616947169481694916950169511695216953169541695516956169571695816959169601696116962169631696416965169661696716968169691697016971169721697316974169751697616977169781697916980169811698216983169841698516986169871698816989169901699116992169931699416995169961699716998169991700017001170021700317004170051700617007170081700917010170111701217013170141701517016170171701817019170201702117022170231702417025170261702717028170291703017031170321703317034170351703617037170381703917040170411704217043170441704517046170471704817049170501705117052170531705417055170561705717058170591706017061170621706317064170651706617067170681706917070170711707217073170741707517076170771707817079170801708117082170831708417085170861708717088170891709017091170921709317094170951709617097170981709917100171011710217103171041710517106171071710817109171101711117112171131711417115171161711717118171191712017121171221712317124171251712617127171281712917130171311713217133171341713517136171371713817139171401714117142171431714417145171461714717148171491715017151171521715317154171551715617157171581715917160171611716217163171641716517166171671716817169171701717117172171731717417175171761717717178171791718017181171821718317184171851718617187171881718917190171911719217193171941719517196171971719817199172001720117202172031720417205172061720717208172091721017211172121721317214172151721617217172181721917220172211722217223172241722517226172271722817229172301723117232172331723417235172361723717238172391724017241172421724317244172451724617247172481724917250172511725217253172541725517256172571725817259172601726117262172631726417265172661726717268172691727017271172721727317274172751727617277172781727917280172811728217283172841728517286172871728817289172901729117292172931729417295172961729717298172991730017301173021730317304173051730617307173081730917310173111731217313173141731517316173171731817319173201732117322173231732417325173261732717328173291733017331173321733317334173351733617337173381733917340173411734217343173441734517346173471734817349173501735117352173531735417355173561735717358173591736017361173621736317364173651736617367173681736917370173711737217373173741737517376173771737817379173801738117382173831738417385173861738717388173891739017391173921739317394173951739617397173981739917400174011740217403174041740517406174071740817409174101741117412174131741417415174161741717418174191742017421174221742317424174251742617427174281742917430174311743217433174341743517436174371743817439174401744117442174431744417445174461744717448174491745017451174521745317454174551745617457174581745917460174611746217463174641746517466174671746817469174701747117472174731747417475174761747717478174791748017481174821748317484174851748617487174881748917490174911749217493174941749517496174971749817499175001750117502175031750417505175061750717508175091751017511175121751317514175151751617517175181751917520175211752217523175241752517526175271752817529175301753117532175331753417535175361753717538175391754017541175421754317544175451754617547175481754917550175511755217553175541755517556175571755817559175601756117562175631756417565175661756717568175691757017571175721757317574175751757617577175781757917580175811758217583175841758517586175871758817589175901759117592175931759417595175961759717598175991760017601176021760317604176051760617607176081760917610176111761217613176141761517616176171761817619176201762117622176231762417625176261762717628176291763017631176321763317634176351763617637176381763917640176411764217643176441764517646176471764817649176501765117652176531765417655176561765717658176591766017661176621766317664176651766617667176681766917670176711767217673176741767517676176771767817679176801768117682176831768417685176861768717688176891769017691176921769317694176951769617697176981769917700177011770217703177041770517706177071770817709177101771117712177131771417715177161771717718177191772017721177221772317724177251772617727177281772917730177311773217733177341773517736177371773817739177401774117742177431774417745177461774717748177491775017751177521775317754177551775617757177581775917760177611776217763177641776517766177671776817769177701777117772177731777417775177761777717778177791778017781177821778317784177851778617787177881778917790177911779217793177941779517796177971779817799178001780117802178031780417805178061780717808178091781017811178121781317814178151781617817178181781917820178211782217823178241782517826178271782817829178301783117832178331783417835178361783717838178391784017841178421784317844178451784617847178481784917850178511785217853178541785517856178571785817859178601786117862178631786417865178661786717868178691787017871178721787317874178751787617877178781787917880178811788217883178841788517886178871788817889178901789117892178931789417895178961789717898178991790017901179021790317904179051790617907179081790917910179111791217913179141791517916179171791817919179201792117922179231792417925179261792717928179291793017931179321793317934179351793617937179381793917940179411794217943179441794517946179471794817949179501795117952179531795417955179561795717958179591796017961179621796317964179651796617967179681796917970179711797217973179741797517976179771797817979179801798117982179831798417985179861798717988179891799017991179921799317994179951799617997179981799918000180011800218003180041800518006180071800818009180101801118012180131801418015180161801718018180191802018021180221802318024180251802618027180281802918030180311803218033180341803518036180371803818039180401804118042180431804418045180461804718048180491805018051180521805318054180551805618057180581805918060180611806218063180641806518066180671806818069180701807118072180731807418075180761807718078180791808018081180821808318084180851808618087180881808918090180911809218093180941809518096180971809818099181001810118102181031810418105181061810718108181091811018111181121811318114181151811618117181181811918120181211812218123181241812518126181271812818129181301813118132181331813418135181361813718138181391814018141181421814318144181451814618147181481814918150181511815218153181541815518156181571815818159181601816118162181631816418165181661816718168181691817018171181721817318174181751817618177181781817918180181811818218183181841818518186181871818818189181901819118192181931819418195181961819718198181991820018201182021820318204182051820618207182081820918210182111821218213182141821518216182171821818219182201822118222182231822418225182261822718228182291823018231182321823318234182351823618237182381823918240182411824218243182441824518246182471824818249182501825118252182531825418255182561825718258182591826018261182621826318264182651826618267182681826918270182711827218273182741827518276182771827818279182801828118282182831828418285182861828718288182891829018291182921829318294182951829618297182981829918300183011830218303183041830518306183071830818309183101831118312183131831418315183161831718318183191832018321183221832318324183251832618327183281832918330183311833218333183341833518336183371833818339183401834118342183431834418345183461834718348183491835018351183521835318354183551835618357183581835918360183611836218363183641836518366183671836818369183701837118372183731837418375183761837718378183791838018381183821838318384183851838618387183881838918390183911839218393183941839518396183971839818399184001840118402184031840418405184061840718408184091841018411184121841318414184151841618417184181841918420184211842218423184241842518426184271842818429184301843118432184331843418435184361843718438184391844018441184421844318444184451844618447184481844918450184511845218453184541845518456184571845818459184601846118462184631846418465184661846718468184691847018471184721847318474184751847618477184781847918480184811848218483184841848518486184871848818489184901849118492184931849418495184961849718498184991850018501185021850318504185051850618507185081850918510185111851218513185141851518516185171851818519185201852118522185231852418525185261852718528185291853018531185321853318534185351853618537185381853918540185411854218543185441854518546185471854818549185501855118552185531855418555185561855718558185591856018561185621856318564185651856618567185681856918570185711857218573185741857518576185771857818579185801858118582185831858418585185861858718588185891859018591185921859318594185951859618597185981859918600186011860218603186041860518606186071860818609186101861118612186131861418615186161861718618186191862018621186221862318624186251862618627186281862918630186311863218633186341863518636186371863818639186401864118642186431864418645186461864718648186491865018651186521865318654186551865618657186581865918660186611866218663186641866518666186671866818669186701867118672186731867418675186761867718678186791868018681186821868318684186851868618687186881868918690186911869218693186941869518696186971869818699187001870118702187031870418705187061870718708187091871018711187121871318714187151871618717187181871918720187211872218723187241872518726187271872818729187301873118732187331873418735187361873718738187391874018741187421874318744187451874618747187481874918750187511875218753187541875518756187571875818759187601876118762187631876418765187661876718768187691877018771187721877318774187751877618777187781877918780187811878218783187841878518786187871878818789187901879118792187931879418795187961879718798187991880018801188021880318804188051880618807188081880918810188111881218813188141881518816188171881818819188201882118822188231882418825188261882718828188291883018831188321883318834188351883618837188381883918840188411884218843188441884518846188471884818849188501885118852188531885418855188561885718858188591886018861188621886318864188651886618867188681886918870188711887218873188741887518876188771887818879188801888118882188831888418885188861888718888188891889018891188921889318894188951889618897188981889918900189011890218903189041890518906189071890818909189101891118912189131891418915189161891718918189191892018921189221892318924189251892618927189281892918930189311893218933189341893518936189371893818939189401894118942189431894418945189461894718948189491895018951189521895318954189551895618957189581895918960189611896218963189641896518966189671896818969189701897118972189731897418975189761897718978189791898018981189821898318984189851898618987189881898918990189911899218993189941899518996189971899818999190001900119002190031900419005190061900719008190091901019011190121901319014190151901619017190181901919020190211902219023190241902519026190271902819029190301903119032190331903419035190361903719038190391904019041190421904319044190451904619047190481904919050190511905219053190541905519056190571905819059190601906119062190631906419065190661906719068190691907019071190721907319074190751907619077190781907919080190811908219083190841908519086190871908819089190901909119092190931909419095190961909719098190991910019101191021910319104191051910619107191081910919110191111911219113191141911519116191171911819119191201912119122191231912419125191261912719128191291913019131191321913319134191351913619137191381913919140191411914219143191441914519146191471914819149191501915119152191531915419155191561915719158191591916019161191621916319164191651916619167191681916919170191711917219173191741917519176191771917819179191801918119182191831918419185191861918719188191891919019191191921919319194191951919619197191981919919200192011920219203192041920519206192071920819209192101921119212192131921419215192161921719218192191922019221192221922319224192251922619227192281922919230192311923219233192341923519236192371923819239192401924119242192431924419245192461924719248192491925019251192521925319254192551925619257192581925919260192611926219263192641926519266192671926819269192701927119272192731927419275192761927719278192791928019281192821928319284192851928619287192881928919290192911929219293192941929519296192971929819299193001930119302193031930419305193061930719308193091931019311193121931319314193151931619317193181931919320193211932219323193241932519326193271932819329193301933119332193331933419335193361933719338193391934019341193421934319344193451934619347193481934919350193511935219353193541935519356193571935819359193601936119362193631936419365193661936719368193691937019371193721937319374193751937619377193781937919380193811938219383193841938519386193871938819389193901939119392193931939419395193961939719398193991940019401194021940319404194051940619407194081940919410194111941219413194141941519416194171941819419194201942119422194231942419425194261942719428194291943019431194321943319434194351943619437194381943919440194411944219443194441944519446194471944819449194501945119452194531945419455194561945719458194591946019461194621946319464194651946619467194681946919470194711947219473194741947519476194771947819479194801948119482194831948419485194861948719488194891949019491194921949319494194951949619497194981949919500195011950219503195041950519506195071950819509195101951119512195131951419515195161951719518195191952019521195221952319524195251952619527195281952919530195311953219533195341953519536195371953819539195401954119542195431954419545195461954719548195491955019551195521955319554195551955619557195581955919560195611956219563195641956519566195671956819569195701957119572195731957419575195761957719578195791958019581195821958319584195851958619587195881958919590195911959219593195941959519596195971959819599196001960119602196031960419605196061960719608196091961019611196121961319614196151961619617196181961919620196211962219623196241962519626196271962819629196301963119632196331963419635196361963719638196391964019641196421964319644196451964619647196481964919650196511965219653196541965519656196571965819659196601966119662196631966419665196661966719668196691967019671196721967319674196751967619677196781967919680196811968219683196841968519686196871968819689196901969119692196931969419695196961969719698196991970019701197021970319704197051970619707197081970919710197111971219713197141971519716197171971819719197201972119722197231972419725197261972719728197291973019731197321973319734197351973619737197381973919740197411974219743197441974519746197471974819749197501975119752197531975419755197561975719758197591976019761197621976319764197651976619767197681976919770197711977219773197741977519776197771977819779197801978119782197831978419785197861978719788197891979019791197921979319794197951979619797197981979919800198011980219803198041980519806198071980819809198101981119812198131981419815198161981719818198191982019821198221982319824198251982619827198281982919830198311983219833198341983519836198371983819839198401984119842198431984419845198461984719848198491985019851198521985319854198551985619857198581985919860198611986219863198641986519866198671986819869198701987119872198731987419875198761987719878198791988019881198821988319884198851988619887198881988919890198911989219893198941989519896198971989819899199001990119902199031990419905199061990719908199091991019911199121991319914199151991619917199181991919920199211992219923199241992519926199271992819929199301993119932199331993419935199361993719938199391994019941199421994319944199451994619947199481994919950199511995219953199541995519956199571995819959199601996119962199631996419965199661996719968199691997019971199721997319974199751997619977199781997919980199811998219983199841998519986199871998819989199901999119992199931999419995199961999719998199992000020001200022000320004200052000620007200082000920010200112001220013200142001520016200172001820019200202002120022200232002420025200262002720028200292003020031200322003320034200352003620037200382003920040200412004220043200442004520046200472004820049200502005120052200532005420055200562005720058200592006020061200622006320064200652006620067200682006920070200712007220073200742007520076200772007820079200802008120082200832008420085200862008720088200892009020091200922009320094200952009620097200982009920100201012010220103201042010520106201072010820109201102011120112201132011420115201162011720118201192012020121201222012320124201252012620127201282012920130201312013220133201342013520136201372013820139201402014120142201432014420145201462014720148201492015020151201522015320154201552015620157201582015920160201612016220163201642016520166201672016820169201702017120172201732017420175201762017720178201792018020181201822018320184201852018620187201882018920190201912019220193201942019520196201972019820199202002020120202202032020420205202062020720208202092021020211202122021320214202152021620217202182021920220202212022220223202242022520226202272022820229202302023120232202332023420235202362023720238202392024020241202422024320244202452024620247202482024920250202512025220253202542025520256202572025820259202602026120262202632026420265202662026720268202692027020271202722027320274202752027620277202782027920280202812028220283202842028520286202872028820289202902029120292202932029420295202962029720298202992030020301203022030320304203052030620307203082030920310203112031220313203142031520316203172031820319203202032120322203232032420325203262032720328203292033020331203322033320334203352033620337203382033920340203412034220343203442034520346203472034820349203502035120352203532035420355203562035720358203592036020361203622036320364203652036620367203682036920370203712037220373203742037520376203772037820379203802038120382203832038420385203862038720388203892039020391203922039320394203952039620397203982039920400204012040220403204042040520406204072040820409204102041120412204132041420415204162041720418204192042020421204222042320424204252042620427204282042920430204312043220433204342043520436204372043820439204402044120442204432044420445204462044720448204492045020451204522045320454204552045620457204582045920460204612046220463204642046520466204672046820469204702047120472204732047420475204762047720478204792048020481204822048320484204852048620487204882048920490204912049220493204942049520496204972049820499205002050120502205032050420505205062050720508205092051020511205122051320514205152051620517205182051920520205212052220523205242052520526205272052820529205302053120532205332053420535205362053720538205392054020541205422054320544205452054620547205482054920550205512055220553205542055520556205572055820559205602056120562205632056420565205662056720568205692057020571205722057320574205752057620577205782057920580205812058220583205842058520586205872058820589205902059120592205932059420595205962059720598205992060020601206022060320604206052060620607206082060920610206112061220613206142061520616206172061820619206202062120622206232062420625206262062720628206292063020631206322063320634206352063620637206382063920640206412064220643206442064520646206472064820649206502065120652206532065420655206562065720658206592066020661206622066320664206652066620667206682066920670206712067220673206742067520676206772067820679206802068120682206832068420685206862068720688206892069020691206922069320694206952069620697206982069920700207012070220703207042070520706207072070820709207102071120712207132071420715207162071720718207192072020721207222072320724207252072620727207282072920730207312073220733207342073520736207372073820739207402074120742207432074420745207462074720748207492075020751207522075320754207552075620757207582075920760207612076220763207642076520766207672076820769207702077120772207732077420775207762077720778207792078020781207822078320784207852078620787207882078920790207912079220793207942079520796207972079820799208002080120802208032080420805208062080720808208092081020811208122081320814208152081620817208182081920820208212082220823208242082520826208272082820829208302083120832208332083420835208362083720838208392084020841208422084320844208452084620847208482084920850208512085220853208542085520856208572085820859208602086120862208632086420865208662086720868208692087020871208722087320874208752087620877208782087920880208812088220883208842088520886208872088820889208902089120892208932089420895208962089720898208992090020901209022090320904209052090620907209082090920910209112091220913209142091520916209172091820919209202092120922209232092420925209262092720928209292093020931209322093320934209352093620937209382093920940209412094220943209442094520946209472094820949209502095120952209532095420955209562095720958209592096020961209622096320964209652096620967209682096920970209712097220973209742097520976209772097820979209802098120982209832098420985209862098720988209892099020991209922099320994209952099620997209982099921000210012100221003210042100521006210072100821009210102101121012210132101421015210162101721018210192102021021210222102321024210252102621027210282102921030210312103221033210342103521036210372103821039210402104121042210432104421045210462104721048210492105021051210522105321054210552105621057210582105921060210612106221063210642106521066210672106821069210702107121072210732107421075210762107721078210792108021081210822108321084210852108621087210882108921090210912109221093210942109521096210972109821099211002110121102211032110421105211062110721108211092111021111211122111321114211152111621117211182111921120211212112221123211242112521126211272112821129211302113121132211332113421135211362113721138211392114021141211422114321144211452114621147211482114921150211512115221153211542115521156211572115821159211602116121162211632116421165211662116721168211692117021171211722117321174211752117621177211782117921180211812118221183211842118521186211872118821189211902119121192211932119421195211962119721198211992120021201212022120321204212052120621207212082120921210212112121221213212142121521216212172121821219212202122121222212232122421225212262122721228212292123021231212322123321234212352123621237212382123921240212412124221243212442124521246212472124821249212502125121252212532125421255212562125721258212592126021261212622126321264212652126621267212682126921270212712127221273212742127521276212772127821279212802128121282212832128421285212862128721288212892129021291212922129321294212952129621297212982129921300213012130221303213042130521306213072130821309213102131121312213132131421315213162131721318213192132021321213222132321324213252132621327213282132921330213312133221333213342133521336213372133821339213402134121342213432134421345213462134721348213492135021351213522135321354213552135621357213582135921360213612136221363213642136521366213672136821369213702137121372213732137421375213762137721378213792138021381213822138321384213852138621387213882138921390213912139221393213942139521396213972139821399214002140121402214032140421405214062140721408214092141021411214122141321414214152141621417214182141921420214212142221423214242142521426214272142821429214302143121432214332143421435214362143721438214392144021441214422144321444214452144621447214482144921450214512145221453214542145521456214572145821459214602146121462214632146421465214662146721468214692147021471214722147321474214752147621477214782147921480214812148221483214842148521486214872148821489214902149121492214932149421495214962149721498214992150021501215022150321504215052150621507215082150921510215112151221513215142151521516215172151821519215202152121522215232152421525215262152721528215292153021531215322153321534215352153621537215382153921540215412154221543215442154521546215472154821549215502155121552215532155421555215562155721558215592156021561215622156321564215652156621567215682156921570215712157221573215742157521576215772157821579215802158121582215832158421585215862158721588215892159021591215922159321594215952159621597215982159921600216012160221603216042160521606216072160821609216102161121612216132161421615216162161721618216192162021621216222162321624216252162621627216282162921630216312163221633216342163521636216372163821639216402164121642216432164421645216462164721648216492165021651216522165321654216552165621657216582165921660216612166221663216642166521666216672166821669216702167121672216732167421675216762167721678216792168021681216822168321684216852168621687216882168921690216912169221693216942169521696216972169821699217002170121702217032170421705217062170721708217092171021711217122171321714217152171621717217182171921720217212172221723217242172521726217272172821729217302173121732217332173421735217362173721738217392174021741217422174321744217452174621747217482174921750217512175221753217542175521756217572175821759217602176121762217632176421765217662176721768217692177021771217722177321774217752177621777217782177921780217812178221783217842178521786217872178821789217902179121792217932179421795217962179721798217992180021801218022180321804218052180621807218082180921810218112181221813218142181521816218172181821819218202182121822218232182421825218262182721828218292183021831218322183321834218352183621837218382183921840218412184221843218442184521846218472184821849218502185121852218532185421855218562185721858218592186021861218622186321864218652186621867218682186921870218712187221873218742187521876218772187821879218802188121882218832188421885218862188721888218892189021891218922189321894218952189621897218982189921900219012190221903219042190521906219072190821909219102191121912219132191421915219162191721918219192192021921219222192321924219252192621927219282192921930219312193221933219342193521936219372193821939219402194121942219432194421945219462194721948219492195021951219522195321954219552195621957219582195921960219612196221963219642196521966219672196821969219702197121972219732197421975219762197721978219792198021981219822198321984219852198621987219882198921990219912199221993219942199521996219972199821999220002200122002220032200422005220062200722008220092201022011220122201322014220152201622017220182201922020220212202222023220242202522026220272202822029220302203122032220332203422035220362203722038220392204022041220422204322044220452204622047220482204922050220512205222053220542205522056220572205822059220602206122062220632206422065220662206722068220692207022071220722207322074220752207622077220782207922080220812208222083220842208522086220872208822089220902209122092220932209422095220962209722098220992210022101221022210322104221052210622107221082210922110221112211222113221142211522116221172211822119221202212122122221232212422125221262212722128221292213022131221322213322134221352213622137221382213922140221412214222143221442214522146221472214822149221502215122152221532215422155221562215722158221592216022161221622216322164221652216622167221682216922170221712217222173221742217522176221772217822179221802218122182221832218422185221862218722188221892219022191221922219322194221952219622197221982219922200222012220222203222042220522206222072220822209222102221122212222132221422215222162221722218222192222022221222222222322224222252222622227222282222922230222312223222233222342223522236222372223822239222402224122242222432224422245222462224722248222492225022251222522225322254222552225622257222582225922260222612226222263222642226522266222672226822269222702227122272222732227422275222762227722278222792228022281222822228322284222852228622287222882228922290222912229222293222942229522296222972229822299223002230122302223032230422305223062230722308223092231022311223122231322314223152231622317223182231922320223212232222323223242232522326223272232822329223302233122332223332233422335223362233722338223392234022341223422234322344223452234622347223482234922350223512235222353223542235522356223572235822359223602236122362223632236422365223662236722368223692237022371223722237322374223752237622377223782237922380223812238222383223842238522386223872238822389223902239122392223932239422395223962239722398223992240022401224022240322404224052240622407224082240922410224112241222413224142241522416224172241822419224202242122422224232242422425224262242722428224292243022431224322243322434224352243622437224382243922440224412244222443224442244522446224472244822449224502245122452224532245422455224562245722458224592246022461224622246322464224652246622467224682246922470224712247222473224742247522476224772247822479224802248122482224832248422485224862248722488224892249022491224922249322494224952249622497224982249922500225012250222503225042250522506225072250822509225102251122512225132251422515225162251722518225192252022521225222252322524225252252622527225282252922530225312253222533225342253522536225372253822539225402254122542225432254422545225462254722548225492255022551225522255322554225552255622557225582255922560225612256222563225642256522566225672256822569225702257122572225732257422575225762257722578225792258022581225822258322584225852258622587225882258922590225912259222593225942259522596225972259822599226002260122602226032260422605226062260722608226092261022611226122261322614226152261622617226182261922620226212262222623226242262522626226272262822629226302263122632226332263422635226362263722638226392264022641226422264322644226452264622647226482264922650226512265222653226542265522656226572265822659226602266122662226632266422665226662266722668226692267022671226722267322674226752267622677226782267922680226812268222683226842268522686226872268822689226902269122692226932269422695226962269722698226992270022701227022270322704227052270622707227082270922710227112271222713227142271522716227172271822719227202272122722227232272422725227262272722728227292273022731227322273322734227352273622737227382273922740227412274222743227442274522746227472274822749227502275122752227532275422755227562275722758227592276022761227622276322764227652276622767227682276922770227712277222773227742277522776227772277822779227802278122782227832278422785227862278722788227892279022791227922279322794227952279622797227982279922800228012280222803228042280522806228072280822809228102281122812228132281422815228162281722818228192282022821228222282322824228252282622827228282282922830228312283222833228342283522836228372283822839228402284122842228432284422845228462284722848228492285022851228522285322854228552285622857228582285922860228612286222863228642286522866228672286822869228702287122872228732287422875228762287722878228792288022881228822288322884228852288622887228882288922890228912289222893228942289522896228972289822899229002290122902229032290422905229062290722908229092291022911229122291322914229152291622917229182291922920229212292222923229242292522926229272292822929229302293122932229332293422935229362293722938229392294022941229422294322944229452294622947229482294922950229512295222953229542295522956229572295822959229602296122962229632296422965229662296722968229692297022971229722297322974229752297622977229782297922980229812298222983229842298522986229872298822989229902299122992229932299422995229962299722998229992300023001230022300323004230052300623007230082300923010230112301223013230142301523016230172301823019230202302123022230232302423025230262302723028230292303023031230322303323034230352303623037230382303923040230412304223043230442304523046230472304823049230502305123052230532305423055230562305723058230592306023061230622306323064230652306623067230682306923070230712307223073230742307523076230772307823079230802308123082230832308423085230862308723088230892309023091230922309323094230952309623097230982309923100231012310223103231042310523106231072310823109231102311123112231132311423115231162311723118231192312023121231222312323124231252312623127231282312923130231312313223133231342313523136231372313823139231402314123142231432314423145231462314723148231492315023151231522315323154231552315623157231582315923160231612316223163231642316523166231672316823169231702317123172231732317423175231762317723178231792318023181231822318323184231852318623187231882318923190231912319223193231942319523196231972319823199232002320123202232032320423205232062320723208232092321023211232122321323214232152321623217232182321923220232212322223223232242322523226232272322823229232302323123232232332323423235232362323723238232392324023241232422324323244232452324623247232482324923250232512325223253232542325523256232572325823259232602326123262232632326423265232662326723268232692327023271232722327323274232752327623277232782327923280232812328223283232842328523286232872328823289232902329123292232932329423295232962329723298232992330023301233022330323304233052330623307233082330923310233112331223313233142331523316233172331823319233202332123322233232332423325233262332723328233292333023331233322333323334233352333623337233382333923340233412334223343233442334523346233472334823349233502335123352233532335423355233562335723358233592336023361233622336323364233652336623367233682336923370233712337223373233742337523376233772337823379233802338123382233832338423385233862338723388233892339023391233922339323394233952339623397233982339923400234012340223403234042340523406234072340823409234102341123412234132341423415234162341723418234192342023421234222342323424234252342623427234282342923430234312343223433234342343523436234372343823439234402344123442234432344423445234462344723448234492345023451234522345323454234552345623457234582345923460234612346223463234642346523466234672346823469234702347123472234732347423475234762347723478234792348023481234822348323484234852348623487234882348923490234912349223493234942349523496234972349823499235002350123502235032350423505235062350723508235092351023511235122351323514235152351623517235182351923520235212352223523235242352523526235272352823529235302353123532235332353423535235362353723538235392354023541235422354323544235452354623547235482354923550235512355223553235542355523556235572355823559235602356123562235632356423565235662356723568235692357023571235722357323574235752357623577235782357923580235812358223583235842358523586235872358823589235902359123592235932359423595235962359723598235992360023601236022360323604236052360623607236082360923610236112361223613236142361523616236172361823619236202362123622236232362423625236262362723628236292363023631236322363323634236352363623637236382363923640236412364223643236442364523646236472364823649236502365123652236532365423655236562365723658236592366023661236622366323664236652366623667236682366923670236712367223673236742367523676236772367823679236802368123682236832368423685236862368723688236892369023691236922369323694236952369623697236982369923700237012370223703237042370523706237072370823709237102371123712237132371423715237162371723718237192372023721237222372323724237252372623727237282372923730237312373223733237342373523736237372373823739237402374123742237432374423745237462374723748237492375023751237522375323754237552375623757237582375923760237612376223763237642376523766237672376823769237702377123772237732377423775237762377723778237792378023781237822378323784237852378623787237882378923790237912379223793237942379523796237972379823799238002380123802238032380423805238062380723808238092381023811238122381323814238152381623817238182381923820238212382223823238242382523826238272382823829238302383123832238332383423835238362383723838238392384023841238422384323844238452384623847238482384923850238512385223853238542385523856238572385823859238602386123862238632386423865238662386723868238692387023871238722387323874238752387623877238782387923880238812388223883238842388523886238872388823889238902389123892238932389423895238962389723898238992390023901239022390323904239052390623907239082390923910239112391223913239142391523916239172391823919239202392123922239232392423925239262392723928239292393023931239322393323934239352393623937239382393923940239412394223943239442394523946239472394823949239502395123952239532395423955239562395723958239592396023961239622396323964239652396623967239682396923970239712397223973239742397523976239772397823979239802398123982239832398423985239862398723988239892399023991239922399323994239952399623997239982399924000240012400224003240042400524006240072400824009240102401124012240132401424015240162401724018240192402024021240222402324024240252402624027240282402924030240312403224033240342403524036240372403824039240402404124042240432404424045240462404724048240492405024051240522405324054240552405624057240582405924060240612406224063240642406524066240672406824069240702407124072240732407424075240762407724078240792408024081240822408324084240852408624087240882408924090240912409224093240942409524096240972409824099241002410124102241032410424105241062410724108241092411024111241122411324114241152411624117241182411924120241212412224123241242412524126241272412824129241302413124132241332413424135241362413724138241392414024141241422414324144241452414624147241482414924150241512415224153241542415524156241572415824159241602416124162241632416424165241662416724168241692417024171241722417324174241752417624177241782417924180241812418224183241842418524186241872418824189241902419124192241932419424195241962419724198241992420024201242022420324204242052420624207242082420924210242112421224213242142421524216242172421824219242202422124222242232422424225242262422724228242292423024231242322423324234242352423624237242382423924240242412424224243242442424524246242472424824249242502425124252242532425424255242562425724258242592426024261242622426324264242652426624267242682426924270242712427224273242742427524276242772427824279242802428124282242832428424285242862428724288242892429024291242922429324294242952429624297242982429924300243012430224303243042430524306243072430824309243102431124312243132431424315243162431724318243192432024321243222432324324243252432624327243282432924330243312433224333243342433524336243372433824339243402434124342243432434424345243462434724348243492435024351243522435324354243552435624357243582435924360243612436224363243642436524366243672436824369243702437124372243732437424375243762437724378243792438024381243822438324384243852438624387243882438924390243912439224393243942439524396243972439824399244002440124402244032440424405244062440724408244092441024411244122441324414244152441624417244182441924420244212442224423244242442524426244272442824429244302443124432244332443424435244362443724438244392444024441244422444324444244452444624447244482444924450244512445224453244542445524456244572445824459244602446124462244632446424465244662446724468244692447024471244722447324474244752447624477244782447924480244812448224483244842448524486244872448824489244902449124492244932449424495244962449724498244992450024501245022450324504245052450624507245082450924510245112451224513245142451524516245172451824519245202452124522245232452424525245262452724528245292453024531245322453324534245352453624537245382453924540245412454224543245442454524546245472454824549245502455124552245532455424555245562455724558245592456024561245622456324564245652456624567245682456924570245712457224573245742457524576245772457824579245802458124582245832458424585245862458724588245892459024591245922459324594245952459624597245982459924600246012460224603246042460524606246072460824609246102461124612246132461424615246162461724618246192462024621246222462324624246252462624627246282462924630246312463224633246342463524636246372463824639246402464124642246432464424645246462464724648246492465024651246522465324654246552465624657246582465924660246612466224663246642466524666246672466824669246702467124672246732467424675246762467724678246792468024681246822468324684246852468624687246882468924690246912469224693246942469524696246972469824699247002470124702247032470424705247062470724708247092471024711247122471324714247152471624717247182471924720247212472224723247242472524726247272472824729247302473124732247332473424735247362473724738247392474024741247422474324744247452474624747247482474924750247512475224753247542475524756247572475824759247602476124762247632476424765247662476724768247692477024771247722477324774247752477624777247782477924780247812478224783247842478524786247872478824789247902479124792247932479424795247962479724798247992480024801248022480324804248052480624807248082480924810248112481224813248142481524816248172481824819248202482124822248232482424825248262482724828248292483024831248322483324834248352483624837248382483924840248412484224843248442484524846248472484824849248502485124852248532485424855248562485724858248592486024861248622486324864248652486624867248682486924870248712487224873248742487524876248772487824879248802488124882248832488424885248862488724888248892489024891248922489324894248952489624897248982489924900249012490224903249042490524906249072490824909249102491124912249132491424915249162491724918249192492024921249222492324924249252492624927249282492924930249312493224933249342493524936249372493824939249402494124942249432494424945249462494724948249492495024951249522495324954249552495624957249582495924960249612496224963249642496524966249672496824969249702497124972249732497424975249762497724978249792498024981249822498324984249852498624987249882498924990249912499224993249942499524996249972499824999250002500125002250032500425005250062500725008250092501025011250122501325014250152501625017250182501925020250212502225023250242502525026250272502825029250302503125032250332503425035250362503725038250392504025041250422504325044250452504625047250482504925050250512505225053250542505525056250572505825059250602506125062250632506425065250662506725068250692507025071250722507325074250752507625077250782507925080250812508225083250842508525086250872508825089250902509125092250932509425095250962509725098250992510025101251022510325104251052510625107251082510925110251112511225113251142511525116251172511825119251202512125122251232512425125251262512725128251292513025131251322513325134251352513625137251382513925140251412514225143251442514525146251472514825149251502515125152251532515425155251562515725158251592516025161251622516325164251652516625167251682516925170251712517225173251742517525176251772517825179251802518125182251832518425185251862518725188251892519025191251922519325194251952519625197251982519925200252012520225203252042520525206252072520825209252102521125212252132521425215252162521725218252192522025221252222522325224252252522625227252282522925230252312523225233252342523525236252372523825239252402524125242252432524425245252462524725248252492525025251252522525325254252552525625257252582525925260252612526225263252642526525266252672526825269252702527125272252732527425275252762527725278252792528025281252822528325284252852528625287252882528925290252912529225293252942529525296252972529825299253002530125302253032530425305253062530725308253092531025311253122531325314253152531625317253182531925320253212532225323253242532525326253272532825329253302533125332253332533425335253362533725338253392534025341253422534325344253452534625347253482534925350253512535225353253542535525356253572535825359253602536125362253632536425365253662536725368253692537025371253722537325374253752537625377253782537925380253812538225383253842538525386253872538825389253902539125392253932539425395253962539725398253992540025401254022540325404254052540625407254082540925410254112541225413254142541525416254172541825419254202542125422254232542425425254262542725428254292543025431254322543325434254352543625437254382543925440254412544225443254442544525446254472544825449254502545125452254532545425455254562545725458254592546025461254622546325464254652546625467254682546925470254712547225473254742547525476254772547825479254802548125482254832548425485254862548725488254892549025491254922549325494254952549625497254982549925500255012550225503255042550525506255072550825509255102551125512255132551425515255162551725518255192552025521255222552325524255252552625527255282552925530255312553225533255342553525536255372553825539255402554125542255432554425545255462554725548255492555025551255522555325554255552555625557255582555925560255612556225563255642556525566255672556825569255702557125572255732557425575255762557725578255792558025581255822558325584255852558625587255882558925590255912559225593255942559525596255972559825599256002560125602256032560425605256062560725608256092561025611256122561325614256152561625617256182561925620256212562225623256242562525626256272562825629256302563125632256332563425635256362563725638256392564025641256422564325644256452564625647256482564925650256512565225653256542565525656256572565825659256602566125662256632566425665256662566725668256692567025671256722567325674256752567625677256782567925680256812568225683256842568525686256872568825689256902569125692256932569425695256962569725698256992570025701257022570325704257052570625707257082570925710257112571225713257142571525716257172571825719257202572125722257232572425725257262572725728257292573025731257322573325734257352573625737257382573925740257412574225743257442574525746257472574825749257502575125752257532575425755257562575725758257592576025761257622576325764257652576625767257682576925770257712577225773257742577525776257772577825779257802578125782257832578425785257862578725788257892579025791257922579325794257952579625797257982579925800258012580225803258042580525806258072580825809258102581125812258132581425815258162581725818258192582025821258222582325824258252582625827258282582925830258312583225833258342583525836258372583825839258402584125842258432584425845258462584725848258492585025851258522585325854258552585625857258582585925860258612586225863258642586525866258672586825869258702587125872258732587425875258762587725878258792588025881258822588325884258852588625887258882588925890258912589225893258942589525896258972589825899259002590125902259032590425905259062590725908259092591025911259122591325914259152591625917259182591925920259212592225923259242592525926259272592825929259302593125932259332593425935259362593725938259392594025941259422594325944259452594625947259482594925950259512595225953259542595525956259572595825959259602596125962259632596425965259662596725968259692597025971259722597325974259752597625977259782597925980259812598225983259842598525986259872598825989259902599125992259932599425995259962599725998259992600026001260022600326004260052600626007260082600926010260112601226013260142601526016260172601826019260202602126022260232602426025260262602726028260292603026031260322603326034260352603626037260382603926040260412604226043260442604526046260472604826049260502605126052260532605426055260562605726058260592606026061260622606326064260652606626067260682606926070260712607226073260742607526076260772607826079260802608126082260832608426085260862608726088260892609026091260922609326094260952609626097260982609926100261012610226103261042610526106261072610826109261102611126112261132611426115261162611726118261192612026121261222612326124261252612626127261282612926130261312613226133261342613526136261372613826139261402614126142261432614426145261462614726148261492615026151261522615326154261552615626157261582615926160261612616226163261642616526166261672616826169261702617126172261732617426175261762617726178261792618026181261822618326184261852618626187261882618926190261912619226193261942619526196261972619826199262002620126202262032620426205262062620726208262092621026211262122621326214262152621626217262182621926220262212622226223262242622526226262272622826229262302623126232262332623426235262362623726238262392624026241262422624326244262452624626247262482624926250262512625226253262542625526256262572625826259262602626126262262632626426265262662626726268262692627026271262722627326274262752627626277262782627926280262812628226283262842628526286262872628826289262902629126292262932629426295262962629726298262992630026301263022630326304263052630626307263082630926310263112631226313263142631526316263172631826319263202632126322263232632426325263262632726328263292633026331263322633326334263352633626337263382633926340263412634226343263442634526346263472634826349263502635126352263532635426355263562635726358263592636026361263622636326364263652636626367263682636926370263712637226373263742637526376263772637826379263802638126382263832638426385263862638726388263892639026391263922639326394263952639626397263982639926400264012640226403264042640526406264072640826409264102641126412264132641426415264162641726418264192642026421264222642326424264252642626427264282642926430264312643226433264342643526436264372643826439264402644126442264432644426445264462644726448264492645026451264522645326454264552645626457264582645926460264612646226463264642646526466264672646826469264702647126472264732647426475264762647726478264792648026481264822648326484264852648626487264882648926490264912649226493264942649526496264972649826499265002650126502265032650426505265062650726508265092651026511265122651326514265152651626517265182651926520265212652226523265242652526526265272652826529265302653126532265332653426535265362653726538265392654026541265422654326544265452654626547265482654926550265512655226553265542655526556265572655826559265602656126562265632656426565265662656726568265692657026571265722657326574265752657626577265782657926580265812658226583265842658526586265872658826589265902659126592265932659426595265962659726598265992660026601266022660326604266052660626607266082660926610266112661226613266142661526616266172661826619266202662126622266232662426625266262662726628266292663026631266322663326634266352663626637266382663926640266412664226643266442664526646266472664826649266502665126652266532665426655266562665726658266592666026661266622666326664266652666626667266682666926670266712667226673266742667526676266772667826679266802668126682266832668426685266862668726688266892669026691266922669326694266952669626697266982669926700267012670226703267042670526706267072670826709267102671126712267132671426715267162671726718267192672026721267222672326724267252672626727267282672926730267312673226733267342673526736267372673826739267402674126742267432674426745267462674726748267492675026751267522675326754267552675626757267582675926760267612676226763267642676526766267672676826769267702677126772267732677426775267762677726778267792678026781267822678326784267852678626787267882678926790267912679226793267942679526796267972679826799268002680126802268032680426805268062680726808268092681026811268122681326814268152681626817268182681926820268212682226823268242682526826268272682826829268302683126832268332683426835268362683726838268392684026841268422684326844268452684626847268482684926850268512685226853268542685526856268572685826859268602686126862268632686426865268662686726868268692687026871268722687326874268752687626877268782687926880268812688226883268842688526886268872688826889268902689126892268932689426895268962689726898268992690026901269022690326904269052690626907269082690926910269112691226913269142691526916269172691826919269202692126922269232692426925269262692726928269292693026931269322693326934269352693626937269382693926940269412694226943269442694526946269472694826949269502695126952269532695426955269562695726958269592696026961269622696326964269652696626967269682696926970269712697226973269742697526976269772697826979269802698126982269832698426985269862698726988269892699026991269922699326994269952699626997269982699927000270012700227003270042700527006270072700827009270102701127012270132701427015270162701727018270192702027021270222702327024270252702627027270282702927030270312703227033270342703527036270372703827039270402704127042270432704427045270462704727048270492705027051270522705327054270552705627057270582705927060270612706227063270642706527066270672706827069270702707127072270732707427075270762707727078270792708027081270822708327084270852708627087270882708927090270912709227093270942709527096270972709827099271002710127102271032710427105271062710727108271092711027111271122711327114271152711627117271182711927120271212712227123271242712527126271272712827129271302713127132271332713427135271362713727138271392714027141271422714327144271452714627147271482714927150271512715227153271542715527156271572715827159271602716127162271632716427165271662716727168271692717027171271722717327174271752717627177271782717927180271812718227183271842718527186271872718827189271902719127192271932719427195271962719727198271992720027201272022720327204272052720627207272082720927210272112721227213272142721527216272172721827219272202722127222272232722427225272262722727228272292723027231272322723327234272352723627237272382723927240272412724227243272442724527246272472724827249272502725127252272532725427255272562725727258272592726027261272622726327264272652726627267272682726927270272712727227273272742727527276272772727827279272802728127282272832728427285272862728727288272892729027291272922729327294272952729627297272982729927300273012730227303273042730527306273072730827309273102731127312273132731427315273162731727318273192732027321273222732327324273252732627327273282732927330273312733227333273342733527336273372733827339273402734127342273432734427345273462734727348273492735027351273522735327354273552735627357273582735927360273612736227363273642736527366273672736827369273702737127372273732737427375273762737727378273792738027381273822738327384273852738627387273882738927390273912739227393273942739527396273972739827399274002740127402274032740427405274062740727408274092741027411274122741327414274152741627417274182741927420274212742227423274242742527426274272742827429274302743127432274332743427435274362743727438274392744027441274422744327444274452744627447274482744927450274512745227453274542745527456274572745827459274602746127462274632746427465274662746727468274692747027471274722747327474274752747627477274782747927480274812748227483274842748527486274872748827489274902749127492274932749427495274962749727498274992750027501275022750327504275052750627507275082750927510275112751227513275142751527516275172751827519275202752127522275232752427525275262752727528275292753027531275322753327534275352753627537275382753927540275412754227543275442754527546275472754827549275502755127552275532755427555275562755727558275592756027561275622756327564275652756627567275682756927570275712757227573275742757527576275772757827579275802758127582275832758427585275862758727588275892759027591275922759327594275952759627597275982759927600276012760227603276042760527606276072760827609276102761127612276132761427615276162761727618276192762027621276222762327624276252762627627276282762927630276312763227633276342763527636276372763827639276402764127642276432764427645276462764727648276492765027651276522765327654276552765627657276582765927660276612766227663276642766527666276672766827669276702767127672276732767427675276762767727678276792768027681276822768327684276852768627687276882768927690276912769227693276942769527696276972769827699277002770127702277032770427705277062770727708277092771027711277122771327714277152771627717277182771927720277212772227723277242772527726277272772827729277302773127732277332773427735277362773727738277392774027741277422774327744277452774627747277482774927750277512775227753277542775527756277572775827759277602776127762277632776427765277662776727768277692777027771277722777327774277752777627777277782777927780277812778227783277842778527786277872778827789277902779127792277932779427795277962779727798277992780027801278022780327804278052780627807278082780927810278112781227813278142781527816278172781827819278202782127822278232782427825278262782727828278292783027831278322783327834278352783627837278382783927840278412784227843278442784527846278472784827849278502785127852278532785427855278562785727858278592786027861278622786327864278652786627867278682786927870278712787227873278742787527876278772787827879278802788127882278832788427885278862788727888278892789027891278922789327894278952789627897278982789927900279012790227903279042790527906279072790827909279102791127912279132791427915279162791727918279192792027921279222792327924279252792627927279282792927930279312793227933279342793527936279372793827939279402794127942279432794427945279462794727948279492795027951279522795327954279552795627957279582795927960279612796227963279642796527966279672796827969279702797127972279732797427975279762797727978279792798027981279822798327984279852798627987279882798927990279912799227993279942799527996279972799827999280002800128002280032800428005280062800728008280092801028011280122801328014280152801628017280182801928020280212802228023280242802528026280272802828029280302803128032280332803428035280362803728038280392804028041280422804328044280452804628047280482804928050280512805228053280542805528056280572805828059280602806128062280632806428065280662806728068280692807028071280722807328074280752807628077280782807928080280812808228083280842808528086280872808828089280902809128092280932809428095280962809728098280992810028101281022810328104281052810628107281082810928110281112811228113281142811528116281172811828119281202812128122281232812428125281262812728128281292813028131281322813328134281352813628137281382813928140281412814228143281442814528146281472814828149281502815128152281532815428155281562815728158281592816028161281622816328164281652816628167281682816928170281712817228173281742817528176281772817828179281802818128182281832818428185281862818728188281892819028191281922819328194281952819628197281982819928200282012820228203282042820528206282072820828209282102821128212282132821428215282162821728218282192822028221282222822328224282252822628227282282822928230282312823228233282342823528236282372823828239282402824128242282432824428245282462824728248282492825028251282522825328254282552825628257282582825928260282612826228263282642826528266282672826828269282702827128272282732827428275282762827728278282792828028281282822828328284282852828628287282882828928290282912829228293282942829528296282972829828299283002830128302283032830428305283062830728308283092831028311283122831328314283152831628317283182831928320283212832228323283242832528326283272832828329283302833128332283332833428335283362833728338283392834028341283422834328344283452834628347283482834928350283512835228353283542835528356283572835828359283602836128362283632836428365283662836728368283692837028371283722837328374283752837628377283782837928380283812838228383283842838528386283872838828389283902839128392283932839428395283962839728398283992840028401284022840328404284052840628407284082840928410284112841228413284142841528416284172841828419284202842128422284232842428425284262842728428284292843028431284322843328434284352843628437284382843928440284412844228443284442844528446284472844828449284502845128452284532845428455284562845728458284592846028461284622846328464284652846628467284682846928470284712847228473284742847528476284772847828479284802848128482284832848428485284862848728488284892849028491284922849328494284952849628497284982849928500285012850228503285042850528506285072850828509285102851128512285132851428515285162851728518285192852028521285222852328524285252852628527285282852928530285312853228533285342853528536285372853828539285402854128542285432854428545285462854728548285492855028551285522855328554285552855628557285582855928560285612856228563285642856528566285672856828569285702857128572285732857428575285762857728578285792858028581285822858328584285852858628587285882858928590285912859228593285942859528596285972859828599286002860128602286032860428605286062860728608286092861028611286122861328614286152861628617286182861928620286212862228623286242862528626286272862828629286302863128632286332863428635286362863728638286392864028641286422864328644286452864628647286482864928650286512865228653286542865528656286572865828659286602866128662286632866428665286662866728668286692867028671286722867328674286752867628677286782867928680286812868228683286842868528686286872868828689286902869128692286932869428695286962869728698286992870028701287022870328704287052870628707287082870928710287112871228713287142871528716287172871828719287202872128722287232872428725287262872728728287292873028731287322873328734287352873628737287382873928740287412874228743287442874528746287472874828749287502875128752287532875428755287562875728758287592876028761287622876328764287652876628767287682876928770287712877228773287742877528776287772877828779287802878128782287832878428785287862878728788287892879028791287922879328794287952879628797287982879928800288012880228803288042880528806288072880828809288102881128812288132881428815288162881728818288192882028821288222882328824288252882628827288282882928830288312883228833288342883528836288372883828839288402884128842288432884428845288462884728848288492885028851288522885328854288552885628857288582885928860288612886228863288642886528866288672886828869288702887128872288732887428875288762887728878288792888028881288822888328884288852888628887288882888928890288912889228893288942889528896288972889828899289002890128902289032890428905289062890728908289092891028911289122891328914289152891628917289182891928920289212892228923289242892528926289272892828929289302893128932289332893428935289362893728938289392894028941289422894328944289452894628947289482894928950289512895228953289542895528956289572895828959289602896128962289632896428965289662896728968289692897028971289722897328974289752897628977289782897928980289812898228983289842898528986289872898828989289902899128992289932899428995289962899728998289992900029001290022900329004290052900629007290082900929010290112901229013290142901529016290172901829019290202902129022290232902429025290262902729028290292903029031290322903329034290352903629037290382903929040290412904229043290442904529046290472904829049290502905129052290532905429055290562905729058290592906029061290622906329064290652906629067290682906929070290712907229073290742907529076290772907829079290802908129082290832908429085290862908729088290892909029091290922909329094290952909629097290982909929100291012910229103291042910529106291072910829109291102911129112291132911429115291162911729118291192912029121291222912329124291252912629127291282912929130291312913229133291342913529136291372913829139291402914129142291432914429145291462914729148291492915029151291522915329154291552915629157291582915929160291612916229163291642916529166291672916829169291702917129172291732917429175291762917729178291792918029181291822918329184291852918629187291882918929190291912919229193291942919529196291972919829199292002920129202292032920429205292062920729208292092921029211292122921329214292152921629217292182921929220292212922229223292242922529226292272922829229292302923129232292332923429235292362923729238292392924029241292422924329244292452924629247292482924929250292512925229253292542925529256292572925829259292602926129262292632926429265292662926729268292692927029271292722927329274292752927629277292782927929280292812928229283292842928529286292872928829289292902929129292292932929429295292962929729298292992930029301293022930329304293052930629307293082930929310293112931229313293142931529316293172931829319293202932129322293232932429325293262932729328293292933029331293322933329334293352933629337293382933929340293412934229343293442934529346293472934829349293502935129352293532935429355293562935729358293592936029361293622936329364293652936629367293682936929370293712937229373293742937529376293772937829379293802938129382293832938429385293862938729388293892939029391293922939329394293952939629397293982939929400294012940229403294042940529406294072940829409294102941129412294132941429415294162941729418294192942029421294222942329424294252942629427294282942929430294312943229433294342943529436294372943829439294402944129442294432944429445294462944729448294492945029451294522945329454294552945629457294582945929460294612946229463294642946529466294672946829469294702947129472294732947429475294762947729478294792948029481294822948329484294852948629487294882948929490294912949229493294942949529496294972949829499295002950129502295032950429505295062950729508295092951029511295122951329514295152951629517295182951929520295212952229523295242952529526295272952829529295302953129532295332953429535295362953729538295392954029541295422954329544295452954629547295482954929550295512955229553295542955529556295572955829559295602956129562295632956429565295662956729568295692957029571295722957329574295752957629577295782957929580295812958229583295842958529586295872958829589295902959129592295932959429595295962959729598295992960029601296022960329604296052960629607296082960929610296112961229613296142961529616296172961829619296202962129622296232962429625296262962729628296292963029631296322963329634296352963629637296382963929640296412964229643296442964529646296472964829649296502965129652296532965429655296562965729658296592966029661296622966329664296652966629667296682966929670296712967229673296742967529676296772967829679296802968129682296832968429685296862968729688296892969029691296922969329694296952969629697296982969929700297012970229703297042970529706297072970829709297102971129712297132971429715297162971729718297192972029721297222972329724297252972629727297282972929730297312973229733297342973529736297372973829739297402974129742297432974429745297462974729748297492975029751297522975329754297552975629757297582975929760297612976229763297642976529766297672976829769297702977129772297732977429775297762977729778297792978029781297822978329784297852978629787297882978929790297912979229793297942979529796297972979829799298002980129802298032980429805298062980729808298092981029811298122981329814298152981629817298182981929820298212982229823298242982529826298272982829829298302983129832298332983429835298362983729838298392984029841298422984329844298452984629847298482984929850298512985229853298542985529856298572985829859298602986129862298632986429865298662986729868298692987029871298722987329874298752987629877298782987929880298812988229883298842988529886298872988829889298902989129892298932989429895298962989729898298992990029901299022990329904299052990629907299082990929910299112991229913299142991529916299172991829919299202992129922299232992429925299262992729928299292993029931299322993329934299352993629937299382993929940299412994229943299442994529946299472994829949299502995129952299532995429955299562995729958299592996029961299622996329964299652996629967299682996929970299712997229973299742997529976299772997829979299802998129982299832998429985299862998729988299892999029991299922999329994299952999629997299982999930000300013000230003300043000530006300073000830009300103001130012300133001430015300163001730018300193002030021300223002330024300253002630027300283002930030300313003230033300343003530036300373003830039300403004130042300433004430045300463004730048300493005030051300523005330054300553005630057300583005930060300613006230063300643006530066300673006830069300703007130072300733007430075300763007730078300793008030081300823008330084300853008630087300883008930090300913009230093300943009530096300973009830099301003010130102301033010430105301063010730108301093011030111301123011330114301153011630117301183011930120301213012230123301243012530126301273012830129301303013130132301333013430135301363013730138301393014030141301423014330144301453014630147301483014930150301513015230153301543015530156301573015830159301603016130162301633016430165301663016730168301693017030171301723017330174301753017630177301783017930180301813018230183301843018530186301873018830189301903019130192301933019430195301963019730198301993020030201302023020330204302053020630207302083020930210302113021230213302143021530216302173021830219302203022130222302233022430225302263022730228302293023030231302323023330234302353023630237302383023930240302413024230243302443024530246302473024830249302503025130252302533025430255302563025730258302593026030261302623026330264302653026630267302683026930270302713027230273302743027530276302773027830279302803028130282302833028430285302863028730288302893029030291302923029330294302953029630297302983029930300303013030230303303043030530306303073030830309303103031130312303133031430315303163031730318303193032030321303223032330324303253032630327303283032930330303313033230333303343033530336303373033830339303403034130342303433034430345303463034730348303493035030351303523035330354303553035630357303583035930360303613036230363303643036530366303673036830369303703037130372303733037430375303763037730378303793038030381303823038330384303853038630387303883038930390303913039230393303943039530396303973039830399304003040130402304033040430405304063040730408304093041030411304123041330414304153041630417304183041930420304213042230423304243042530426304273042830429304303043130432304333043430435304363043730438304393044030441304423044330444304453044630447304483044930450304513045230453304543045530456304573045830459304603046130462304633046430465304663046730468304693047030471304723047330474304753047630477304783047930480304813048230483304843048530486304873048830489304903049130492304933049430495304963049730498304993050030501305023050330504305053050630507305083050930510305113051230513305143051530516305173051830519305203052130522305233052430525305263052730528305293053030531305323053330534305353053630537305383053930540305413054230543305443054530546305473054830549305503055130552305533055430555305563055730558305593056030561305623056330564305653056630567305683056930570305713057230573305743057530576305773057830579305803058130582305833058430585305863058730588305893059030591305923059330594305953059630597305983059930600306013060230603306043060530606306073060830609306103061130612306133061430615306163061730618306193062030621306223062330624306253062630627306283062930630306313063230633306343063530636306373063830639306403064130642306433064430645306463064730648306493065030651306523065330654306553065630657306583065930660306613066230663306643066530666306673066830669306703067130672306733067430675306763067730678306793068030681306823068330684306853068630687306883068930690306913069230693306943069530696306973069830699307003070130702307033070430705307063070730708307093071030711307123071330714307153071630717307183071930720307213072230723307243072530726307273072830729307303073130732307333073430735307363073730738307393074030741307423074330744307453074630747307483074930750307513075230753307543075530756307573075830759307603076130762307633076430765307663076730768307693077030771307723077330774307753077630777307783077930780307813078230783307843078530786307873078830789307903079130792307933079430795307963079730798307993080030801308023080330804308053080630807308083080930810308113081230813308143081530816308173081830819308203082130822308233082430825308263082730828308293083030831308323083330834308353083630837308383083930840308413084230843308443084530846308473084830849308503085130852308533085430855308563085730858308593086030861308623086330864308653086630867308683086930870308713087230873308743087530876308773087830879308803088130882308833088430885308863088730888308893089030891308923089330894308953089630897308983089930900309013090230903309043090530906309073090830909309103091130912309133091430915309163091730918309193092030921309223092330924309253092630927309283092930930309313093230933309343093530936309373093830939309403094130942309433094430945309463094730948309493095030951309523095330954309553095630957309583095930960309613096230963309643096530966309673096830969309703097130972309733097430975309763097730978309793098030981309823098330984309853098630987309883098930990309913099230993309943099530996309973099830999310003100131002310033100431005310063100731008310093101031011310123101331014310153101631017310183101931020310213102231023310243102531026310273102831029310303103131032310333103431035310363103731038310393104031041310423104331044310453104631047310483104931050310513105231053310543105531056310573105831059310603106131062310633106431065310663106731068310693107031071310723107331074310753107631077310783107931080310813108231083310843108531086310873108831089310903109131092310933109431095310963109731098310993110031101311023110331104311053110631107311083110931110311113111231113311143111531116311173111831119311203112131122311233112431125311263112731128311293113031131311323113331134311353113631137311383113931140311413114231143311443114531146311473114831149311503115131152311533115431155311563115731158311593116031161311623116331164311653116631167311683116931170311713117231173311743117531176311773117831179311803118131182311833118431185311863118731188311893119031191311923119331194311953119631197311983119931200312013120231203312043120531206312073120831209312103121131212312133121431215312163121731218312193122031221312223122331224312253122631227312283122931230312313123231233312343123531236312373123831239312403124131242312433124431245312463124731248312493125031251312523125331254312553125631257312583125931260312613126231263312643126531266312673126831269312703127131272312733127431275312763127731278312793128031281312823128331284312853128631287312883128931290312913129231293312943129531296312973129831299313003130131302313033130431305313063130731308313093131031311313123131331314313153131631317313183131931320313213132231323313243132531326313273132831329313303133131332313333133431335313363133731338313393134031341313423134331344313453134631347313483134931350313513135231353313543135531356313573135831359313603136131362313633136431365313663136731368313693137031371313723137331374313753137631377313783137931380313813138231383313843138531386313873138831389313903139131392313933139431395313963139731398313993140031401314023140331404314053140631407314083140931410314113141231413314143141531416314173141831419314203142131422314233142431425314263142731428314293143031431314323143331434314353143631437314383143931440314413144231443314443144531446314473144831449314503145131452314533145431455314563145731458314593146031461314623146331464314653146631467314683146931470314713147231473314743147531476314773147831479314803148131482314833148431485314863148731488314893149031491314923149331494314953149631497314983149931500315013150231503315043150531506315073150831509315103151131512315133151431515315163151731518315193152031521315223152331524315253152631527315283152931530315313153231533315343153531536315373153831539315403154131542315433154431545315463154731548315493155031551315523155331554315553155631557315583155931560315613156231563315643156531566315673156831569315703157131572315733157431575315763157731578315793158031581315823158331584315853158631587315883158931590315913159231593315943159531596315973159831599316003160131602316033160431605316063160731608316093161031611316123161331614316153161631617316183161931620316213162231623316243162531626316273162831629316303163131632316333163431635316363163731638316393164031641316423164331644316453164631647316483164931650316513165231653316543165531656316573165831659316603166131662316633166431665316663166731668316693167031671316723167331674316753167631677316783167931680316813168231683316843168531686316873168831689316903169131692316933169431695316963169731698316993170031701317023170331704317053170631707317083170931710317113171231713317143171531716317173171831719317203172131722317233172431725317263172731728317293173031731317323173331734317353173631737317383173931740317413174231743317443174531746317473174831749317503175131752317533175431755317563175731758317593176031761317623176331764317653176631767317683176931770317713177231773317743177531776317773177831779317803178131782317833178431785317863178731788317893179031791317923179331794317953179631797317983179931800318013180231803318043180531806318073180831809318103181131812318133181431815318163181731818318193182031821318223182331824318253182631827318283182931830318313183231833318343183531836318373183831839318403184131842318433184431845318463184731848318493185031851318523185331854318553185631857318583185931860318613186231863318643186531866318673186831869318703187131872318733187431875318763187731878318793188031881318823188331884318853188631887318883188931890318913189231893318943189531896318973189831899319003190131902319033190431905319063190731908319093191031911319123191331914319153191631917319183191931920319213192231923319243192531926319273192831929319303193131932319333193431935319363193731938319393194031941319423194331944319453194631947319483194931950319513195231953319543195531956319573195831959319603196131962319633196431965319663196731968319693197031971319723197331974319753197631977319783197931980319813198231983319843198531986319873198831989319903199131992319933199431995319963199731998319993200032001320023200332004320053200632007320083200932010320113201232013320143201532016320173201832019320203202132022320233202432025320263202732028320293203032031320323203332034320353203632037320383203932040320413204232043320443204532046320473204832049320503205132052320533205432055320563205732058320593206032061320623206332064320653206632067320683206932070320713207232073320743207532076320773207832079320803208132082320833208432085320863208732088320893209032091320923209332094320953209632097320983209932100321013210232103321043210532106321073210832109321103211132112321133211432115321163211732118321193212032121321223212332124321253212632127321283212932130321313213232133321343213532136321373213832139321403214132142321433214432145321463214732148321493215032151321523215332154321553215632157321583215932160321613216232163321643216532166321673216832169321703217132172321733217432175321763217732178321793218032181321823218332184321853218632187321883218932190321913219232193321943219532196321973219832199322003220132202322033220432205322063220732208322093221032211322123221332214322153221632217322183221932220322213222232223322243222532226322273222832229322303223132232322333223432235322363223732238322393224032241322423224332244322453224632247322483224932250322513225232253322543225532256322573225832259322603226132262322633226432265322663226732268322693227032271322723227332274322753227632277322783227932280322813228232283322843228532286322873228832289322903229132292322933229432295322963229732298322993230032301323023230332304323053230632307323083230932310323113231232313323143231532316323173231832319323203232132322323233232432325323263232732328323293233032331323323233332334323353233632337323383233932340323413234232343323443234532346323473234832349323503235132352323533235432355323563235732358323593236032361323623236332364323653236632367323683236932370323713237232373323743237532376323773237832379323803238132382323833238432385323863238732388323893239032391323923239332394323953239632397323983239932400324013240232403324043240532406324073240832409324103241132412324133241432415324163241732418324193242032421324223242332424324253242632427324283242932430324313243232433324343243532436324373243832439324403244132442324433244432445324463244732448324493245032451324523245332454324553245632457324583245932460324613246232463324643246532466324673246832469324703247132472324733247432475324763247732478324793248032481324823248332484324853248632487324883248932490324913249232493324943249532496324973249832499325003250132502325033250432505325063250732508325093251032511325123251332514325153251632517325183251932520325213252232523325243252532526325273252832529325303253132532325333253432535325363253732538325393254032541325423254332544325453254632547325483254932550325513255232553325543255532556325573255832559325603256132562325633256432565325663256732568325693257032571325723257332574325753257632577325783257932580325813258232583325843258532586325873258832589325903259132592325933259432595325963259732598325993260032601326023260332604326053260632607326083260932610326113261232613326143261532616326173261832619326203262132622326233262432625326263262732628326293263032631326323263332634326353263632637326383263932640326413264232643326443264532646326473264832649326503265132652326533265432655326563265732658326593266032661326623266332664326653266632667326683266932670326713267232673326743267532676326773267832679326803268132682326833268432685326863268732688326893269032691326923269332694326953269632697326983269932700327013270232703327043270532706327073270832709327103271132712327133271432715327163271732718327193272032721327223272332724327253272632727327283272932730327313273232733327343273532736327373273832739327403274132742327433274432745327463274732748327493275032751327523275332754327553275632757327583275932760327613276232763327643276532766327673276832769327703277132772327733277432775327763277732778327793278032781327823278332784327853278632787327883278932790327913279232793327943279532796327973279832799328003280132802328033280432805328063280732808328093281032811328123281332814328153281632817328183281932820328213282232823328243282532826328273282832829328303283132832328333283432835328363283732838328393284032841328423284332844328453284632847328483284932850328513285232853328543285532856328573285832859328603286132862328633286432865328663286732868328693287032871328723287332874328753287632877328783287932880328813288232883328843288532886328873288832889328903289132892328933289432895328963289732898328993290032901329023290332904329053290632907329083290932910329113291232913329143291532916329173291832919329203292132922329233292432925329263292732928329293293032931329323293332934329353293632937329383293932940329413294232943329443294532946329473294832949329503295132952329533295432955329563295732958329593296032961329623296332964329653296632967329683296932970329713297232973329743297532976329773297832979329803298132982329833298432985329863298732988329893299032991329923299332994329953299632997329983299933000330013300233003330043300533006330073300833009330103301133012330133301433015330163301733018330193302033021330223302333024330253302633027330283302933030330313303233033330343303533036330373303833039330403304133042330433304433045330463304733048330493305033051330523305333054330553305633057330583305933060330613306233063330643306533066330673306833069330703307133072330733307433075330763307733078330793308033081330823308333084330853308633087330883308933090330913309233093330943309533096330973309833099331003310133102331033310433105331063310733108331093311033111331123311333114331153311633117331183311933120331213312233123331243312533126331273312833129331303313133132331333313433135331363313733138331393314033141331423314333144331453314633147331483314933150331513315233153331543315533156331573315833159331603316133162331633316433165331663316733168331693317033171331723317333174331753317633177331783317933180331813318233183331843318533186331873318833189331903319133192331933319433195331963319733198331993320033201332023320333204332053320633207332083320933210332113321233213332143321533216332173321833219332203322133222332233322433225332263322733228332293323033231332323323333234332353323633237332383323933240332413324233243332443324533246332473324833249332503325133252332533325433255332563325733258332593326033261332623326333264332653326633267332683326933270332713327233273332743327533276332773327833279332803328133282332833328433285332863328733288332893329033291332923329333294332953329633297332983329933300333013330233303333043330533306333073330833309333103331133312333133331433315333163331733318333193332033321333223332333324333253332633327333283332933330333313333233333333343333533336333373333833339333403334133342333433334433345333463334733348333493335033351333523335333354333553335633357333583335933360333613336233363333643336533366333673336833369333703337133372333733337433375333763337733378333793338033381333823338333384333853338633387333883338933390333913339233393333943339533396333973339833399334003340133402334033340433405334063340733408334093341033411334123341333414334153341633417334183341933420334213342233423334243342533426334273342833429334303343133432334333343433435334363343733438334393344033441334423344333444334453344633447334483344933450334513345233453334543345533456334573345833459334603346133462334633346433465334663346733468334693347033471334723347333474334753347633477334783347933480334813348233483334843348533486334873348833489334903349133492334933349433495334963349733498334993350033501335023350333504335053350633507335083350933510335113351233513335143351533516335173351833519335203352133522335233352433525335263352733528335293353033531335323353333534335353353633537335383353933540335413354233543335443354533546335473354833549335503355133552335533355433555335563355733558335593356033561335623356333564335653356633567335683356933570335713357233573335743357533576335773357833579335803358133582335833358433585335863358733588335893359033591335923359333594335953359633597335983359933600336013360233603336043360533606336073360833609336103361133612336133361433615336163361733618336193362033621336223362333624336253362633627336283362933630336313363233633336343363533636336373363833639336403364133642336433364433645336463364733648336493365033651336523365333654336553365633657336583365933660336613366233663336643366533666336673366833669336703367133672336733367433675336763367733678336793368033681336823368333684336853368633687336883368933690336913369233693336943369533696336973369833699337003370133702337033370433705337063370733708337093371033711337123371333714337153371633717337183371933720337213372233723337243372533726337273372833729337303373133732337333373433735337363373733738337393374033741337423374333744337453374633747337483374933750337513375233753337543375533756337573375833759337603376133762337633376433765337663376733768337693377033771337723377333774337753377633777337783377933780337813378233783337843378533786337873378833789337903379133792337933379433795337963379733798337993380033801338023380333804338053380633807338083380933810338113381233813338143381533816338173381833819338203382133822338233382433825338263382733828338293383033831338323383333834338353383633837338383383933840338413384233843338443384533846338473384833849338503385133852338533385433855338563385733858338593386033861338623386333864338653386633867338683386933870338713387233873338743387533876338773387833879338803388133882338833388433885338863388733888338893389033891338923389333894338953389633897338983389933900339013390233903339043390533906339073390833909339103391133912339133391433915339163391733918339193392033921339223392333924339253392633927339283392933930339313393233933339343393533936339373393833939339403394133942339433394433945339463394733948339493395033951339523395333954339553395633957339583395933960339613396233963339643396533966339673396833969339703397133972339733397433975339763397733978339793398033981339823398333984339853398633987339883398933990339913399233993339943399533996339973399833999340003400134002340033400434005340063400734008340093401034011340123401334014340153401634017340183401934020340213402234023340243402534026340273402834029340303403134032340333403434035340363403734038340393404034041340423404334044340453404634047340483404934050340513405234053340543405534056340573405834059340603406134062340633406434065340663406734068340693407034071340723407334074340753407634077340783407934080340813408234083340843408534086340873408834089340903409134092340933409434095340963409734098340993410034101341023410334104341053410634107341083410934110341113411234113341143411534116341173411834119341203412134122341233412434125341263412734128341293413034131341323413334134341353413634137341383413934140341413414234143341443414534146341473414834149341503415134152341533415434155341563415734158341593416034161341623416334164341653416634167341683416934170341713417234173341743417534176341773417834179341803418134182341833418434185341863418734188341893419034191341923419334194341953419634197341983419934200342013420234203342043420534206342073420834209342103421134212342133421434215342163421734218342193422034221342223422334224342253422634227342283422934230342313423234233342343423534236342373423834239342403424134242342433424434245342463424734248342493425034251342523425334254342553425634257342583425934260342613426234263342643426534266342673426834269342703427134272342733427434275342763427734278342793428034281342823428334284342853428634287342883428934290342913429234293342943429534296342973429834299343003430134302343033430434305343063430734308343093431034311343123431334314343153431634317343183431934320343213432234323343243432534326343273432834329343303433134332343333433434335343363433734338343393434034341343423434334344343453434634347343483434934350343513435234353343543435534356343573435834359343603436134362343633436434365343663436734368343693437034371343723437334374343753437634377343783437934380343813438234383343843438534386343873438834389343903439134392343933439434395343963439734398343993440034401344023440334404344053440634407344083440934410344113441234413344143441534416344173441834419344203442134422344233442434425344263442734428344293443034431344323443334434344353443634437344383443934440344413444234443344443444534446344473444834449344503445134452344533445434455344563445734458344593446034461344623446334464344653446634467344683446934470344713447234473344743447534476344773447834479344803448134482344833448434485344863448734488344893449034491344923449334494344953449634497344983449934500345013450234503345043450534506345073450834509345103451134512345133451434515345163451734518345193452034521345223452334524345253452634527345283452934530345313453234533345343453534536345373453834539345403454134542345433454434545345463454734548345493455034551345523455334554345553455634557345583455934560345613456234563345643456534566345673456834569345703457134572345733457434575345763457734578345793458034581345823458334584345853458634587345883458934590345913459234593345943459534596345973459834599346003460134602346033460434605346063460734608346093461034611346123461334614346153461634617346183461934620346213462234623346243462534626346273462834629346303463134632346333463434635346363463734638346393464034641346423464334644346453464634647346483464934650346513465234653346543465534656346573465834659346603466134662346633466434665346663466734668346693467034671346723467334674346753467634677346783467934680346813468234683346843468534686346873468834689346903469134692346933469434695346963469734698346993470034701347023470334704347053470634707347083470934710347113471234713347143471534716347173471834719347203472134722347233472434725347263472734728347293473034731347323473334734347353473634737347383473934740347413474234743347443474534746347473474834749347503475134752347533475434755347563475734758347593476034761347623476334764347653476634767347683476934770347713477234773347743477534776347773477834779347803478134782347833478434785347863478734788347893479034791347923479334794347953479634797347983479934800348013480234803348043480534806348073480834809348103481134812348133481434815348163481734818348193482034821348223482334824348253482634827348283482934830348313483234833348343483534836348373483834839348403484134842348433484434845348463484734848348493485034851348523485334854348553485634857348583485934860348613486234863348643486534866348673486834869348703487134872348733487434875348763487734878348793488034881348823488334884348853488634887348883488934890348913489234893348943489534896348973489834899349003490134902349033490434905349063490734908349093491034911349123491334914349153491634917349183491934920349213492234923349243492534926349273492834929349303493134932349333493434935349363493734938349393494034941349423494334944349453494634947349483494934950349513495234953349543495534956349573495834959349603496134962349633496434965349663496734968349693497034971349723497334974349753497634977349783497934980349813498234983349843498534986349873498834989349903499134992349933499434995349963499734998349993500035001350023500335004350053500635007350083500935010350113501235013350143501535016350173501835019350203502135022350233502435025350263502735028350293503035031350323503335034350353503635037350383503935040350413504235043350443504535046350473504835049350503505135052350533505435055350563505735058350593506035061350623506335064350653506635067350683506935070350713507235073350743507535076350773507835079350803508135082350833508435085350863508735088350893509035091350923509335094350953509635097350983509935100351013510235103351043510535106351073510835109351103511135112351133511435115351163511735118351193512035121351223512335124351253512635127351283512935130351313513235133351343513535136351373513835139351403514135142351433514435145351463514735148351493515035151351523515335154351553515635157351583515935160351613516235163351643516535166351673516835169351703517135172351733517435175351763517735178351793518035181351823518335184351853518635187351883518935190351913519235193351943519535196351973519835199352003520135202352033520435205352063520735208352093521035211352123521335214352153521635217352183521935220352213522235223352243522535226352273522835229352303523135232352333523435235352363523735238352393524035241352423524335244352453524635247352483524935250352513525235253352543525535256352573525835259352603526135262352633526435265352663526735268352693527035271352723527335274352753527635277352783527935280352813528235283352843528535286352873528835289352903529135292352933529435295352963529735298352993530035301353023530335304353053530635307353083530935310353113531235313353143531535316353173531835319353203532135322353233532435325353263532735328353293533035331353323533335334353353533635337353383533935340353413534235343353443534535346353473534835349353503535135352353533535435355353563535735358353593536035361353623536335364353653536635367353683536935370353713537235373353743537535376353773537835379353803538135382353833538435385353863538735388353893539035391353923539335394353953539635397353983539935400354013540235403354043540535406354073540835409354103541135412354133541435415354163541735418354193542035421354223542335424354253542635427354283542935430354313543235433354343543535436354373543835439354403544135442354433544435445354463544735448354493545035451354523545335454354553545635457354583545935460354613546235463354643546535466354673546835469354703547135472354733547435475354763547735478354793548035481354823548335484354853548635487354883548935490354913549235493354943549535496354973549835499355003550135502355033550435505355063550735508355093551035511355123551335514355153551635517355183551935520355213552235523355243552535526355273552835529355303553135532355333553435535355363553735538355393554035541355423554335544355453554635547355483554935550355513555235553355543555535556355573555835559355603556135562355633556435565355663556735568355693557035571355723557335574355753557635577355783557935580355813558235583355843558535586355873558835589355903559135592355933559435595355963559735598355993560035601356023560335604356053560635607356083560935610356113561235613356143561535616356173561835619356203562135622356233562435625356263562735628356293563035631356323563335634356353563635637356383563935640356413564235643356443564535646356473564835649356503565135652356533565435655356563565735658356593566035661356623566335664356653566635667356683566935670356713567235673356743567535676356773567835679356803568135682356833568435685356863568735688356893569035691356923569335694356953569635697356983569935700357013570235703357043570535706357073570835709357103571135712357133571435715357163571735718357193572035721357223572335724357253572635727357283572935730357313573235733357343573535736357373573835739357403574135742357433574435745357463574735748357493575035751357523575335754357553575635757357583575935760357613576235763357643576535766357673576835769357703577135772357733577435775357763577735778357793578035781357823578335784357853578635787357883578935790357913579235793357943579535796357973579835799358003580135802358033580435805358063580735808358093581035811358123581335814358153581635817358183581935820358213582235823358243582535826358273582835829358303583135832358333583435835358363583735838358393584035841358423584335844358453584635847358483584935850358513585235853358543585535856358573585835859358603586135862358633586435865358663586735868358693587035871358723587335874358753587635877358783587935880358813588235883358843588535886358873588835889358903589135892358933589435895358963589735898358993590035901359023590335904359053590635907359083590935910359113591235913359143591535916359173591835919359203592135922359233592435925359263592735928359293593035931359323593335934359353593635937359383593935940359413594235943359443594535946359473594835949359503595135952359533595435955359563595735958359593596035961359623596335964359653596635967359683596935970359713597235973359743597535976359773597835979359803598135982359833598435985359863598735988359893599035991359923599335994359953599635997359983599936000360013600236003360043600536006360073600836009360103601136012360133601436015360163601736018360193602036021360223602336024360253602636027360283602936030360313603236033360343603536036360373603836039360403604136042360433604436045360463604736048360493605036051360523605336054360553605636057360583605936060360613606236063360643606536066360673606836069360703607136072360733607436075360763607736078360793608036081360823608336084360853608636087360883608936090360913609236093360943609536096360973609836099361003610136102361033610436105361063610736108361093611036111361123611336114361153611636117361183611936120361213612236123361243612536126361273612836129361303613136132361333613436135361363613736138361393614036141361423614336144361453614636147361483614936150361513615236153361543615536156361573615836159361603616136162361633616436165361663616736168361693617036171361723617336174361753617636177361783617936180361813618236183361843618536186361873618836189361903619136192361933619436195361963619736198361993620036201362023620336204362053620636207362083620936210362113621236213362143621536216362173621836219362203622136222362233622436225362263622736228362293623036231362323623336234362353623636237362383623936240362413624236243362443624536246362473624836249362503625136252362533625436255362563625736258362593626036261362623626336264362653626636267362683626936270362713627236273362743627536276362773627836279362803628136282362833628436285362863628736288362893629036291362923629336294362953629636297362983629936300363013630236303363043630536306363073630836309363103631136312363133631436315363163631736318363193632036321363223632336324363253632636327363283632936330363313633236333363343633536336363373633836339363403634136342363433634436345363463634736348363493635036351363523635336354363553635636357363583635936360363613636236363363643636536366363673636836369363703637136372363733637436375363763637736378363793638036381363823638336384363853638636387363883638936390363913639236393363943639536396363973639836399364003640136402364033640436405364063640736408364093641036411364123641336414364153641636417364183641936420364213642236423364243642536426364273642836429364303643136432364333643436435364363643736438364393644036441364423644336444364453644636447364483644936450364513645236453364543645536456364573645836459364603646136462364633646436465364663646736468364693647036471364723647336474364753647636477364783647936480364813648236483364843648536486364873648836489364903649136492364933649436495364963649736498364993650036501365023650336504365053650636507365083650936510365113651236513365143651536516365173651836519365203652136522365233652436525365263652736528365293653036531365323653336534365353653636537365383653936540365413654236543365443654536546365473654836549365503655136552365533655436555365563655736558365593656036561365623656336564365653656636567365683656936570365713657236573365743657536576365773657836579365803658136582365833658436585365863658736588365893659036591365923659336594365953659636597365983659936600366013660236603366043660536606366073660836609366103661136612366133661436615366163661736618366193662036621366223662336624366253662636627366283662936630366313663236633366343663536636366373663836639366403664136642366433664436645366463664736648366493665036651366523665336654366553665636657366583665936660366613666236663366643666536666366673666836669366703667136672366733667436675366763667736678366793668036681366823668336684366853668636687366883668936690366913669236693366943669536696366973669836699367003670136702367033670436705367063670736708367093671036711367123671336714367153671636717367183671936720367213672236723367243672536726367273672836729367303673136732367333673436735367363673736738367393674036741367423674336744367453674636747367483674936750367513675236753367543675536756367573675836759367603676136762367633676436765367663676736768367693677036771367723677336774367753677636777367783677936780367813678236783367843678536786367873678836789367903679136792367933679436795367963679736798367993680036801368023680336804368053680636807368083680936810368113681236813368143681536816368173681836819368203682136822368233682436825368263682736828368293683036831368323683336834368353683636837368383683936840368413684236843368443684536846368473684836849368503685136852368533685436855368563685736858368593686036861368623686336864368653686636867368683686936870368713687236873368743687536876368773687836879368803688136882368833688436885368863688736888368893689036891368923689336894368953689636897368983689936900369013690236903369043690536906369073690836909369103691136912369133691436915369163691736918369193692036921369223692336924369253692636927369283692936930369313693236933369343693536936369373693836939369403694136942369433694436945369463694736948369493695036951369523695336954369553695636957369583695936960369613696236963369643696536966369673696836969369703697136972369733697436975369763697736978369793698036981369823698336984369853698636987369883698936990369913699236993369943699536996369973699836999370003700137002370033700437005370063700737008370093701037011370123701337014370153701637017370183701937020370213702237023370243702537026370273702837029370303703137032370333703437035370363703737038370393704037041370423704337044370453704637047370483704937050370513705237053370543705537056370573705837059370603706137062370633706437065370663706737068370693707037071370723707337074370753707637077370783707937080370813708237083370843708537086370873708837089370903709137092370933709437095370963709737098370993710037101371023710337104371053710637107371083710937110371113711237113371143711537116371173711837119371203712137122371233712437125371263712737128371293713037131371323713337134371353713637137371383713937140371413714237143371443714537146371473714837149371503715137152371533715437155371563715737158371593716037161371623716337164371653716637167371683716937170371713717237173371743717537176371773717837179371803718137182371833718437185371863718737188371893719037191371923719337194371953719637197371983719937200372013720237203372043720537206372073720837209372103721137212372133721437215372163721737218372193722037221372223722337224372253722637227372283722937230372313723237233372343723537236372373723837239372403724137242372433724437245372463724737248372493725037251372523725337254372553725637257372583725937260372613726237263372643726537266372673726837269372703727137272372733727437275372763727737278372793728037281372823728337284372853728637287372883728937290372913729237293372943729537296372973729837299373003730137302373033730437305373063730737308373093731037311373123731337314373153731637317373183731937320373213732237323373243732537326373273732837329373303733137332373333733437335373363733737338373393734037341373423734337344373453734637347373483734937350373513735237353373543735537356373573735837359373603736137362373633736437365373663736737368373693737037371373723737337374373753737637377373783737937380373813738237383373843738537386373873738837389373903739137392373933739437395373963739737398373993740037401374023740337404374053740637407374083740937410374113741237413374143741537416374173741837419374203742137422374233742437425374263742737428374293743037431374323743337434374353743637437374383743937440374413744237443374443744537446374473744837449374503745137452374533745437455374563745737458374593746037461374623746337464374653746637467374683746937470374713747237473374743747537476374773747837479374803748137482374833748437485374863748737488374893749037491374923749337494374953749637497374983749937500375013750237503375043750537506375073750837509375103751137512375133751437515375163751737518375193752037521375223752337524375253752637527375283752937530375313753237533375343753537536375373753837539375403754137542375433754437545375463754737548375493755037551375523755337554375553755637557375583755937560375613756237563375643756537566375673756837569375703757137572375733757437575375763757737578375793758037581375823758337584375853758637587375883758937590375913759237593375943759537596375973759837599376003760137602376033760437605376063760737608376093761037611376123761337614376153761637617376183761937620376213762237623376243762537626376273762837629376303763137632376333763437635376363763737638376393764037641376423764337644376453764637647376483764937650376513765237653376543765537656376573765837659376603766137662376633766437665376663766737668376693767037671376723767337674376753767637677376783767937680376813768237683376843768537686376873768837689376903769137692376933769437695376963769737698376993770037701377023770337704377053770637707377083770937710377113771237713377143771537716377173771837719377203772137722377233772437725377263772737728377293773037731377323773337734377353773637737377383773937740377413774237743377443774537746377473774837749377503775137752377533775437755377563775737758377593776037761377623776337764377653776637767377683776937770377713777237773377743777537776377773777837779377803778137782377833778437785377863778737788377893779037791377923779337794377953779637797377983779937800378013780237803378043780537806378073780837809378103781137812378133781437815378163781737818378193782037821378223782337824378253782637827378283782937830378313783237833378343783537836378373783837839378403784137842378433784437845378463784737848378493785037851378523785337854378553785637857378583785937860378613786237863378643786537866378673786837869378703787137872378733787437875378763787737878378793788037881378823788337884378853788637887378883788937890378913789237893378943789537896378973789837899379003790137902379033790437905379063790737908379093791037911379123791337914379153791637917379183791937920379213792237923379243792537926379273792837929379303793137932379333793437935379363793737938379393794037941379423794337944379453794637947379483794937950379513795237953379543795537956379573795837959379603796137962379633796437965379663796737968379693797037971379723797337974379753797637977379783797937980379813798237983379843798537986379873798837989379903799137992379933799437995379963799737998379993800038001380023800338004380053800638007380083800938010380113801238013380143801538016380173801838019380203802138022380233802438025380263802738028380293803038031380323803338034380353803638037380383803938040380413804238043380443804538046380473804838049380503805138052380533805438055380563805738058380593806038061380623806338064380653806638067380683806938070380713807238073380743807538076380773807838079380803808138082380833808438085380863808738088380893809038091380923809338094380953809638097380983809938100381013810238103381043810538106381073810838109381103811138112381133811438115381163811738118381193812038121381223812338124381253812638127381283812938130381313813238133381343813538136381373813838139381403814138142381433814438145381463814738148381493815038151381523815338154381553815638157381583815938160381613816238163381643816538166381673816838169381703817138172381733817438175381763817738178381793818038181381823818338184381853818638187381883818938190381913819238193381943819538196381973819838199382003820138202382033820438205382063820738208382093821038211382123821338214382153821638217382183821938220382213822238223382243822538226382273822838229382303823138232382333823438235382363823738238382393824038241382423824338244382453824638247382483824938250382513825238253382543825538256382573825838259382603826138262382633826438265382663826738268382693827038271382723827338274382753827638277382783827938280382813828238283382843828538286382873828838289382903829138292382933829438295382963829738298382993830038301383023830338304383053830638307383083830938310383113831238313383143831538316383173831838319383203832138322383233832438325383263832738328383293833038331383323833338334383353833638337383383833938340383413834238343383443834538346383473834838349383503835138352383533835438355383563835738358383593836038361383623836338364383653836638367383683836938370383713837238373383743837538376383773837838379383803838138382383833838438385383863838738388383893839038391383923839338394383953839638397383983839938400384013840238403384043840538406384073840838409384103841138412384133841438415384163841738418384193842038421384223842338424384253842638427384283842938430384313843238433384343843538436384373843838439384403844138442384433844438445384463844738448384493845038451384523845338454384553845638457384583845938460384613846238463384643846538466384673846838469384703847138472384733847438475384763847738478384793848038481384823848338484384853848638487384883848938490384913849238493384943849538496384973849838499385003850138502385033850438505385063850738508385093851038511385123851338514385153851638517385183851938520385213852238523385243852538526385273852838529385303853138532385333853438535385363853738538385393854038541385423854338544385453854638547385483854938550385513855238553385543855538556385573855838559385603856138562385633856438565385663856738568385693857038571385723857338574385753857638577385783857938580385813858238583385843858538586385873858838589385903859138592385933859438595385963859738598385993860038601386023860338604386053860638607386083860938610386113861238613386143861538616386173861838619386203862138622386233862438625386263862738628386293863038631386323863338634386353863638637386383863938640386413864238643386443864538646386473864838649386503865138652386533865438655386563865738658386593866038661386623866338664386653866638667386683866938670386713867238673386743867538676386773867838679386803868138682386833868438685386863868738688386893869038691386923869338694386953869638697386983869938700387013870238703387043870538706387073870838709387103871138712387133871438715387163871738718387193872038721387223872338724387253872638727387283872938730387313873238733387343873538736387373873838739387403874138742387433874438745387463874738748387493875038751387523875338754387553875638757387583875938760387613876238763387643876538766387673876838769387703877138772387733877438775387763877738778387793878038781387823878338784387853878638787387883878938790387913879238793387943879538796387973879838799388003880138802388033880438805388063880738808388093881038811388123881338814388153881638817388183881938820388213882238823388243882538826388273882838829388303883138832388333883438835388363883738838388393884038841388423884338844388453884638847388483884938850388513885238853388543885538856388573885838859388603886138862388633886438865388663886738868388693887038871388723887338874388753887638877388783887938880388813888238883388843888538886388873888838889388903889138892388933889438895388963889738898388993890038901389023890338904389053890638907389083890938910389113891238913389143891538916389173891838919389203892138922389233892438925389263892738928389293893038931389323893338934389353893638937389383893938940389413894238943389443894538946389473894838949389503895138952389533895438955389563895738958389593896038961389623896338964389653896638967389683896938970389713897238973389743897538976389773897838979389803898138982389833898438985389863898738988389893899038991389923899338994389953899638997389983899939000390013900239003390043900539006390073900839009390103901139012390133901439015390163901739018390193902039021390223902339024390253902639027390283902939030390313903239033390343903539036390373903839039390403904139042390433904439045390463904739048390493905039051390523905339054390553905639057390583905939060390613906239063390643906539066390673906839069390703907139072390733907439075390763907739078390793908039081390823908339084390853908639087390883908939090390913909239093390943909539096390973909839099391003910139102391033910439105391063910739108391093911039111391123911339114391153911639117391183911939120391213912239123391243912539126391273912839129391303913139132391333913439135391363913739138391393914039141391423914339144391453914639147391483914939150391513915239153391543915539156391573915839159391603916139162391633916439165391663916739168391693917039171391723917339174391753917639177391783917939180391813918239183391843918539186391873918839189391903919139192391933919439195391963919739198391993920039201392023920339204392053920639207392083920939210392113921239213392143921539216392173921839219392203922139222392233922439225392263922739228392293923039231392323923339234392353923639237392383923939240392413924239243392443924539246392473924839249392503925139252392533925439255392563925739258392593926039261392623926339264392653926639267392683926939270392713927239273392743927539276392773927839279392803928139282392833928439285392863928739288392893929039291392923929339294392953929639297392983929939300393013930239303393043930539306393073930839309393103931139312393133931439315393163931739318393193932039321393223932339324393253932639327393283932939330393313933239333393343933539336393373933839339393403934139342393433934439345393463934739348393493935039351393523935339354393553935639357393583935939360393613936239363393643936539366393673936839369393703937139372393733937439375393763937739378393793938039381393823938339384393853938639387393883938939390393913939239393393943939539396393973939839399394003940139402394033940439405394063940739408394093941039411394123941339414394153941639417394183941939420394213942239423394243942539426394273942839429394303943139432394333943439435394363943739438394393944039441394423944339444394453944639447394483944939450394513945239453394543945539456394573945839459394603946139462394633946439465394663946739468394693947039471394723947339474394753947639477394783947939480394813948239483394843948539486394873948839489394903949139492394933949439495394963949739498394993950039501395023950339504395053950639507395083950939510395113951239513395143951539516395173951839519395203952139522395233952439525395263952739528395293953039531395323953339534395353953639537395383953939540395413954239543395443954539546395473954839549395503955139552395533955439555395563955739558395593956039561395623956339564395653956639567395683956939570395713957239573395743957539576395773957839579395803958139582395833958439585395863958739588395893959039591395923959339594395953959639597395983959939600396013960239603396043960539606396073960839609396103961139612396133961439615396163961739618396193962039621396223962339624396253962639627396283962939630396313963239633396343963539636396373963839639396403964139642396433964439645396463964739648396493965039651396523965339654396553965639657396583965939660396613966239663396643966539666396673966839669396703967139672396733967439675396763967739678396793968039681396823968339684396853968639687396883968939690396913969239693396943969539696396973969839699397003970139702397033970439705397063970739708397093971039711397123971339714397153971639717397183971939720397213972239723397243972539726397273972839729397303973139732397333973439735397363973739738397393974039741397423974339744397453974639747397483974939750397513975239753397543975539756397573975839759397603976139762397633976439765397663976739768397693977039771397723977339774397753977639777397783977939780397813978239783397843978539786397873978839789397903979139792397933979439795397963979739798397993980039801398023980339804398053980639807398083980939810398113981239813398143981539816398173981839819398203982139822398233982439825398263982739828398293983039831398323983339834398353983639837398383983939840398413984239843398443984539846398473984839849398503985139852398533985439855398563985739858398593986039861398623986339864398653986639867398683986939870398713987239873398743987539876398773987839879398803988139882398833988439885398863988739888398893989039891398923989339894398953989639897398983989939900399013990239903399043990539906399073990839909399103991139912399133991439915399163991739918399193992039921399223992339924399253992639927399283992939930399313993239933399343993539936399373993839939399403994139942399433994439945399463994739948399493995039951399523995339954399553995639957399583995939960399613996239963399643996539966399673996839969399703997139972399733997439975399763997739978399793998039981399823998339984399853998639987399883998939990399913999239993399943999539996399973999839999400004000140002400034000440005400064000740008400094001040011400124001340014400154001640017400184001940020400214002240023400244002540026400274002840029400304003140032400334003440035400364003740038400394004040041400424004340044400454004640047400484004940050400514005240053400544005540056400574005840059400604006140062400634006440065400664006740068400694007040071400724007340074400754007640077400784007940080400814008240083400844008540086400874008840089400904009140092400934009440095400964009740098400994010040101401024010340104401054010640107401084010940110401114011240113401144011540116401174011840119401204012140122401234012440125401264012740128401294013040131401324013340134401354013640137401384013940140401414014240143401444014540146401474014840149401504015140152401534015440155401564015740158401594016040161401624016340164401654016640167401684016940170401714017240173401744017540176401774017840179401804018140182401834018440185401864018740188401894019040191401924019340194401954019640197401984019940200402014020240203402044020540206402074020840209402104021140212402134021440215402164021740218402194022040221402224022340224402254022640227402284022940230402314023240233402344023540236402374023840239402404024140242402434024440245402464024740248402494025040251402524025340254402554025640257402584025940260402614026240263402644026540266402674026840269402704027140272402734027440275402764027740278402794028040281402824028340284402854028640287402884028940290402914029240293402944029540296402974029840299403004030140302403034030440305403064030740308403094031040311403124031340314403154031640317403184031940320403214032240323403244032540326403274032840329403304033140332403334033440335403364033740338403394034040341403424034340344403454034640347403484034940350403514035240353403544035540356403574035840359403604036140362403634036440365403664036740368403694037040371403724037340374403754037640377403784037940380403814038240383403844038540386403874038840389403904039140392403934039440395403964039740398403994040040401404024040340404404054040640407404084040940410404114041240413404144041540416404174041840419404204042140422404234042440425404264042740428404294043040431404324043340434404354043640437404384043940440404414044240443404444044540446404474044840449404504045140452404534045440455404564045740458404594046040461404624046340464404654046640467404684046940470404714047240473404744047540476404774047840479404804048140482404834048440485404864048740488404894049040491404924049340494404954049640497404984049940500405014050240503405044050540506405074050840509405104051140512405134051440515405164051740518405194052040521405224052340524405254052640527405284052940530405314053240533405344053540536405374053840539405404054140542405434054440545405464054740548405494055040551405524055340554405554055640557405584055940560405614056240563405644056540566405674056840569405704057140572405734057440575405764057740578405794058040581405824058340584405854058640587405884058940590405914059240593405944059540596405974059840599406004060140602406034060440605406064060740608406094061040611406124061340614406154061640617406184061940620406214062240623406244062540626406274062840629406304063140632406334063440635406364063740638406394064040641406424064340644406454064640647406484064940650406514065240653406544065540656406574065840659406604066140662406634066440665406664066740668406694067040671406724067340674406754067640677406784067940680406814068240683406844068540686406874068840689406904069140692406934069440695406964069740698406994070040701407024070340704407054070640707407084070940710407114071240713407144071540716407174071840719407204072140722407234072440725407264072740728407294073040731407324073340734407354073640737407384073940740407414074240743407444074540746407474074840749407504075140752407534075440755407564075740758407594076040761407624076340764407654076640767407684076940770407714077240773407744077540776407774077840779407804078140782407834078440785407864078740788407894079040791407924079340794407954079640797407984079940800408014080240803408044080540806408074080840809408104081140812408134081440815408164081740818408194082040821408224082340824408254082640827408284082940830408314083240833408344083540836408374083840839408404084140842408434084440845408464084740848408494085040851408524085340854408554085640857408584085940860408614086240863408644086540866408674086840869408704087140872408734087440875408764087740878408794088040881408824088340884408854088640887408884088940890408914089240893408944089540896408974089840899409004090140902409034090440905409064090740908409094091040911409124091340914409154091640917409184091940920409214092240923409244092540926409274092840929409304093140932409334093440935409364093740938409394094040941409424094340944409454094640947409484094940950409514095240953409544095540956409574095840959409604096140962409634096440965409664096740968409694097040971409724097340974409754097640977409784097940980409814098240983409844098540986409874098840989409904099140992409934099440995409964099740998409994100041001410024100341004410054100641007410084100941010410114101241013410144101541016410174101841019410204102141022410234102441025410264102741028410294103041031410324103341034410354103641037410384103941040410414104241043410444104541046410474104841049410504105141052410534105441055410564105741058410594106041061410624106341064410654106641067410684106941070410714107241073410744107541076410774107841079410804108141082410834108441085410864108741088410894109041091410924109341094410954109641097410984109941100411014110241103411044110541106411074110841109411104111141112411134111441115411164111741118411194112041121411224112341124411254112641127411284112941130411314113241133411344113541136411374113841139411404114141142411434114441145411464114741148411494115041151411524115341154411554115641157411584115941160411614116241163411644116541166411674116841169411704117141172411734117441175411764117741178411794118041181411824118341184411854118641187411884118941190411914119241193411944119541196411974119841199412004120141202412034120441205412064120741208412094121041211412124121341214412154121641217412184121941220412214122241223412244122541226412274122841229412304123141232412334123441235412364123741238412394124041241412424124341244412454124641247412484124941250412514125241253412544125541256412574125841259412604126141262412634126441265412664126741268412694127041271412724127341274412754127641277412784127941280412814128241283412844128541286412874128841289412904129141292412934129441295412964129741298412994130041301413024130341304413054130641307413084130941310413114131241313413144131541316413174131841319413204132141322413234132441325413264132741328413294133041331413324133341334413354133641337413384133941340413414134241343413444134541346413474134841349413504135141352413534135441355413564135741358413594136041361413624136341364413654136641367413684136941370413714137241373413744137541376413774137841379413804138141382413834138441385413864138741388413894139041391413924139341394413954139641397413984139941400414014140241403414044140541406414074140841409414104141141412414134141441415414164141741418414194142041421414224142341424414254142641427414284142941430414314143241433414344143541436414374143841439414404144141442414434144441445414464144741448414494145041451414524145341454414554145641457414584145941460414614146241463414644146541466414674146841469414704147141472414734147441475414764147741478414794148041481414824148341484414854148641487414884148941490414914149241493414944149541496414974149841499415004150141502415034150441505415064150741508415094151041511415124151341514415154151641517415184151941520415214152241523415244152541526415274152841529415304153141532415334153441535415364153741538415394154041541415424154341544415454154641547415484154941550415514155241553415544155541556415574155841559415604156141562415634156441565415664156741568415694157041571415724157341574415754157641577415784157941580415814158241583415844158541586415874158841589415904159141592415934159441595415964159741598415994160041601416024160341604416054160641607416084160941610416114161241613416144161541616416174161841619416204162141622416234162441625416264162741628416294163041631416324163341634416354163641637416384163941640416414164241643416444164541646416474164841649416504165141652416534165441655416564165741658416594166041661416624166341664416654166641667416684166941670416714167241673416744167541676416774167841679416804168141682416834168441685416864168741688416894169041691416924169341694416954169641697416984169941700417014170241703417044170541706417074170841709417104171141712417134171441715417164171741718417194172041721417224172341724417254172641727417284172941730417314173241733417344173541736417374173841739417404174141742417434174441745417464174741748417494175041751417524175341754417554175641757417584175941760417614176241763417644176541766417674176841769417704177141772417734177441775417764177741778417794178041781417824178341784417854178641787417884178941790417914179241793417944179541796417974179841799418004180141802418034180441805418064180741808418094181041811418124181341814418154181641817418184181941820418214182241823418244182541826418274182841829418304183141832418334183441835418364183741838418394184041841418424184341844418454184641847418484184941850418514185241853418544185541856418574185841859418604186141862418634186441865418664186741868418694187041871418724187341874418754187641877418784187941880418814188241883418844188541886418874188841889418904189141892418934189441895418964189741898418994190041901419024190341904419054190641907419084190941910419114191241913419144191541916419174191841919419204192141922419234192441925419264192741928419294193041931419324193341934419354193641937419384193941940419414194241943419444194541946419474194841949419504195141952419534195441955419564195741958419594196041961419624196341964419654196641967419684196941970419714197241973419744197541976419774197841979419804198141982419834198441985419864198741988419894199041991419924199341994419954199641997419984199942000420014200242003420044200542006420074200842009420104201142012420134201442015420164201742018420194202042021420224202342024420254202642027420284202942030420314203242033420344203542036420374203842039420404204142042420434204442045420464204742048420494205042051420524205342054420554205642057420584205942060420614206242063420644206542066420674206842069420704207142072420734207442075420764207742078420794208042081420824208342084420854208642087420884208942090420914209242093420944209542096420974209842099421004210142102421034210442105421064210742108421094211042111421124211342114421154211642117421184211942120421214212242123421244212542126421274212842129421304213142132421334213442135421364213742138421394214042141421424214342144421454214642147421484214942150421514215242153421544215542156421574215842159421604216142162421634216442165421664216742168421694217042171421724217342174421754217642177421784217942180421814218242183421844218542186421874218842189421904219142192421934219442195421964219742198421994220042201422024220342204422054220642207422084220942210422114221242213422144221542216422174221842219422204222142222422234222442225422264222742228422294223042231422324223342234422354223642237422384223942240422414224242243422444224542246422474224842249422504225142252422534225442255422564225742258422594226042261422624226342264422654226642267422684226942270422714227242273422744227542276422774227842279422804228142282422834228442285422864228742288422894229042291422924229342294422954229642297422984229942300423014230242303423044230542306423074230842309423104231142312423134231442315423164231742318423194232042321423224232342324423254232642327423284232942330423314233242333423344233542336423374233842339423404234142342423434234442345423464234742348423494235042351423524235342354423554235642357423584235942360423614236242363423644236542366423674236842369423704237142372423734237442375423764237742378423794238042381423824238342384423854238642387423884238942390423914239242393423944239542396423974239842399424004240142402424034240442405424064240742408424094241042411424124241342414424154241642417424184241942420424214242242423424244242542426424274242842429424304243142432424334243442435424364243742438424394244042441424424244342444424454244642447424484244942450424514245242453424544245542456424574245842459424604246142462424634246442465424664246742468424694247042471424724247342474424754247642477424784247942480424814248242483424844248542486424874248842489424904249142492424934249442495424964249742498424994250042501425024250342504425054250642507425084250942510425114251242513425144251542516425174251842519425204252142522425234252442525425264252742528425294253042531425324253342534425354253642537425384253942540425414254242543425444254542546425474254842549425504255142552425534255442555425564255742558425594256042561425624256342564425654256642567425684256942570425714257242573425744257542576425774257842579425804258142582425834258442585425864258742588425894259042591425924259342594425954259642597425984259942600426014260242603426044260542606426074260842609426104261142612426134261442615426164261742618426194262042621426224262342624426254262642627426284262942630426314263242633426344263542636426374263842639426404264142642426434264442645426464264742648426494265042651426524265342654426554265642657426584265942660426614266242663426644266542666426674266842669426704267142672426734267442675426764267742678426794268042681426824268342684426854268642687426884268942690426914269242693426944269542696426974269842699427004270142702427034270442705427064270742708427094271042711427124271342714427154271642717427184271942720427214272242723427244272542726427274272842729427304273142732427334273442735427364273742738427394274042741427424274342744427454274642747427484274942750427514275242753427544275542756427574275842759427604276142762427634276442765427664276742768427694277042771427724277342774427754277642777427784277942780427814278242783427844278542786427874278842789427904279142792427934279442795427964279742798427994280042801428024280342804428054280642807428084280942810428114281242813428144281542816428174281842819428204282142822428234282442825428264282742828428294283042831428324283342834428354283642837428384283942840428414284242843428444284542846428474284842849428504285142852428534285442855428564285742858428594286042861428624286342864428654286642867428684286942870428714287242873428744287542876428774287842879428804288142882428834288442885428864288742888428894289042891428924289342894428954289642897428984289942900429014290242903429044290542906429074290842909429104291142912429134291442915429164291742918429194292042921429224292342924429254292642927429284292942930429314293242933429344293542936429374293842939429404294142942429434294442945429464294742948429494295042951429524295342954429554295642957429584295942960429614296242963429644296542966429674296842969429704297142972429734297442975429764297742978429794298042981429824298342984429854298642987429884298942990429914299242993429944299542996429974299842999430004300143002430034300443005430064300743008430094301043011430124301343014430154301643017430184301943020430214302243023430244302543026430274302843029430304303143032430334303443035430364303743038430394304043041430424304343044430454304643047430484304943050430514305243053430544305543056430574305843059430604306143062430634306443065430664306743068430694307043071430724307343074430754307643077430784307943080430814308243083430844308543086430874308843089430904309143092430934309443095430964309743098430994310043101431024310343104431054310643107431084310943110431114311243113431144311543116431174311843119431204312143122431234312443125431264312743128431294313043131431324313343134431354313643137431384313943140431414314243143431444314543146431474314843149431504315143152431534315443155431564315743158431594316043161431624316343164431654316643167431684316943170431714317243173431744317543176431774317843179431804318143182431834318443185431864318743188431894319043191431924319343194431954319643197431984319943200432014320243203432044320543206432074320843209432104321143212432134321443215432164321743218432194322043221432224322343224432254322643227432284322943230432314323243233432344323543236432374323843239432404324143242432434324443245432464324743248432494325043251432524325343254432554325643257432584325943260432614326243263432644326543266432674326843269432704327143272432734327443275432764327743278432794328043281432824328343284432854328643287432884328943290432914329243293432944329543296432974329843299433004330143302433034330443305433064330743308433094331043311433124331343314433154331643317433184331943320433214332243323433244332543326433274332843329433304333143332433334333443335433364333743338433394334043341433424334343344433454334643347433484334943350433514335243353433544335543356433574335843359433604336143362433634336443365433664336743368433694337043371433724337343374433754337643377433784337943380433814338243383433844338543386433874338843389433904339143392433934339443395433964339743398433994340043401434024340343404434054340643407434084340943410434114341243413434144341543416434174341843419434204342143422434234342443425434264342743428434294343043431434324343343434434354343643437434384343943440434414344243443434444344543446434474344843449434504345143452434534345443455434564345743458434594346043461434624346343464434654346643467434684346943470434714347243473434744347543476434774347843479434804348143482434834348443485434864348743488434894349043491434924349343494434954349643497434984349943500435014350243503435044350543506435074350843509435104351143512435134351443515435164351743518435194352043521435224352343524435254352643527435284352943530435314353243533435344353543536435374353843539435404354143542435434354443545435464354743548435494355043551435524355343554435554355643557435584355943560435614356243563435644356543566435674356843569435704357143572435734357443575435764357743578435794358043581435824358343584435854358643587435884358943590435914359243593435944359543596435974359843599436004360143602436034360443605436064360743608436094361043611436124361343614436154361643617436184361943620436214362243623436244362543626436274362843629436304363143632436334363443635436364363743638436394364043641436424364343644436454364643647436484364943650436514365243653436544365543656436574365843659436604366143662436634366443665436664366743668436694367043671436724367343674436754367643677436784367943680436814368243683436844368543686436874368843689436904369143692436934369443695436964369743698436994370043701437024370343704437054370643707437084370943710437114371243713437144371543716437174371843719437204372143722437234372443725437264372743728437294373043731437324373343734437354373643737437384373943740437414374243743437444374543746437474374843749437504375143752437534375443755437564375743758437594376043761437624376343764437654376643767437684376943770437714377243773437744377543776437774377843779437804378143782437834378443785437864378743788437894379043791437924379343794437954379643797437984379943800438014380243803438044380543806438074380843809438104381143812438134381443815438164381743818438194382043821438224382343824438254382643827438284382943830438314383243833438344383543836438374383843839438404384143842438434384443845438464384743848438494385043851438524385343854438554385643857438584385943860438614386243863438644386543866438674386843869438704387143872438734387443875438764387743878438794388043881438824388343884438854388643887438884388943890438914389243893438944389543896438974389843899439004390143902439034390443905439064390743908439094391043911439124391343914439154391643917439184391943920439214392243923439244392543926439274392843929439304393143932439334393443935439364393743938439394394043941439424394343944439454394643947439484394943950439514395243953439544395543956439574395843959439604396143962439634396443965439664396743968439694397043971439724397343974439754397643977439784397943980439814398243983439844398543986439874398843989439904399143992439934399443995439964399743998439994400044001440024400344004440054400644007440084400944010440114401244013440144401544016440174401844019440204402144022440234402444025440264402744028440294403044031440324403344034440354403644037440384403944040440414404244043440444404544046440474404844049440504405144052440534405444055440564405744058440594406044061440624406344064440654406644067440684406944070440714407244073440744407544076440774407844079440804408144082440834408444085440864408744088440894409044091440924409344094440954409644097440984409944100441014410244103441044410544106441074410844109441104411144112441134411444115441164411744118441194412044121441224412344124441254412644127441284412944130441314413244133441344413544136441374413844139441404414144142441434414444145441464414744148441494415044151441524415344154441554415644157441584415944160441614416244163441644416544166441674416844169441704417144172441734417444175441764417744178441794418044181441824418344184441854418644187441884418944190441914419244193441944419544196441974419844199442004420144202442034420444205442064420744208442094421044211442124421344214442154421644217442184421944220442214422244223442244422544226442274422844229442304423144232442334423444235442364423744238442394424044241442424424344244442454424644247442484424944250442514425244253442544425544256442574425844259442604426144262442634426444265442664426744268442694427044271442724427344274442754427644277442784427944280442814428244283442844428544286442874428844289442904429144292442934429444295442964429744298442994430044301443024430344304443054430644307443084430944310443114431244313443144431544316443174431844319443204432144322443234432444325443264432744328443294433044331443324433344334443354433644337443384433944340443414434244343443444434544346443474434844349443504435144352443534435444355443564435744358443594436044361443624436344364443654436644367443684436944370443714437244373443744437544376443774437844379443804438144382443834438444385443864438744388443894439044391443924439344394443954439644397443984439944400444014440244403444044440544406444074440844409444104441144412444134441444415444164441744418444194442044421444224442344424444254442644427444284442944430444314443244433444344443544436444374443844439444404444144442444434444444445444464444744448444494445044451444524445344454444554445644457444584445944460444614446244463444644446544466444674446844469444704447144472444734447444475444764447744478444794448044481444824448344484444854448644487444884448944490444914449244493444944449544496444974449844499445004450144502445034450444505445064450744508445094451044511445124451344514445154451644517445184451944520445214452244523445244452544526445274452844529445304453144532445334453444535445364453744538445394454044541445424454344544445454454644547445484454944550445514455244553445544455544556445574455844559445604456144562445634456444565445664456744568445694457044571445724457344574445754457644577445784457944580445814458244583445844458544586445874458844589445904459144592445934459444595445964459744598445994460044601446024460344604446054460644607446084460944610446114461244613446144461544616446174461844619446204462144622446234462444625446264462744628446294463044631446324463344634446354463644637446384463944640446414464244643446444464544646446474464844649446504465144652446534465444655446564465744658446594466044661446624466344664446654466644667446684466944670446714467244673446744467544676446774467844679446804468144682446834468444685446864468744688446894469044691446924469344694446954469644697446984469944700447014470244703447044470544706447074470844709447104471144712447134471444715447164471744718447194472044721447224472344724447254472644727447284472944730447314473244733447344473544736447374473844739447404474144742447434474444745447464474744748447494475044751447524475344754447554475644757447584475944760447614476244763447644476544766447674476844769447704477144772447734477444775447764477744778447794478044781447824478344784447854478644787447884478944790447914479244793447944479544796447974479844799448004480144802448034480444805448064480744808448094481044811448124481344814448154481644817448184481944820448214482244823448244482544826448274482844829448304483144832448334483444835448364483744838448394484044841448424484344844448454484644847448484484944850448514485244853448544485544856448574485844859448604486144862448634486444865448664486744868448694487044871448724487344874448754487644877448784487944880448814488244883448844488544886448874488844889448904489144892448934489444895448964489744898448994490044901449024490344904449054490644907449084490944910449114491244913449144491544916449174491844919449204492144922449234492444925449264492744928449294493044931449324493344934449354493644937449384493944940449414494244943449444494544946449474494844949449504495144952449534495444955449564495744958449594496044961449624496344964449654496644967449684496944970449714497244973449744497544976449774497844979449804498144982449834498444985449864498744988449894499044991449924499344994449954499644997449984499945000450014500245003450044500545006450074500845009450104501145012450134501445015450164501745018450194502045021450224502345024450254502645027450284502945030450314503245033450344503545036450374503845039450404504145042450434504445045450464504745048450494505045051450524505345054450554505645057450584505945060450614506245063450644506545066450674506845069450704507145072450734507445075450764507745078450794508045081450824508345084450854508645087450884508945090450914509245093450944509545096450974509845099451004510145102451034510445105451064510745108451094511045111451124511345114451154511645117451184511945120451214512245123451244512545126451274512845129451304513145132451334513445135451364513745138451394514045141451424514345144451454514645147451484514945150451514515245153451544515545156451574515845159451604516145162451634516445165451664516745168451694517045171451724517345174451754517645177451784517945180451814518245183451844518545186451874518845189451904519145192451934519445195451964519745198451994520045201452024520345204452054520645207452084520945210452114521245213452144521545216452174521845219452204522145222452234522445225452264522745228452294523045231452324523345234452354523645237452384523945240452414524245243452444524545246452474524845249452504525145252452534525445255452564525745258452594526045261452624526345264452654526645267452684526945270452714527245273452744527545276452774527845279452804528145282452834528445285452864528745288452894529045291452924529345294452954529645297452984529945300453014530245303453044530545306453074530845309453104531145312453134531445315453164531745318453194532045321453224532345324453254532645327453284532945330453314533245333453344533545336453374533845339453404534145342453434534445345453464534745348453494535045351453524535345354453554535645357453584535945360453614536245363453644536545366453674536845369453704537145372453734537445375453764537745378453794538045381453824538345384453854538645387453884538945390453914539245393453944539545396453974539845399454004540145402454034540445405454064540745408454094541045411454124541345414454154541645417454184541945420454214542245423454244542545426454274542845429454304543145432454334543445435454364543745438454394544045441454424544345444454454544645447454484544945450454514545245453454544545545456454574545845459454604546145462454634546445465454664546745468454694547045471454724547345474454754547645477454784547945480454814548245483454844548545486454874548845489454904549145492454934549445495454964549745498454994550045501455024550345504455054550645507455084550945510455114551245513455144551545516455174551845519455204552145522455234552445525455264552745528455294553045531455324553345534455354553645537455384553945540455414554245543455444554545546455474554845549455504555145552455534555445555455564555745558455594556045561455624556345564455654556645567455684556945570455714557245573455744557545576455774557845579455804558145582455834558445585455864558745588455894559045591455924559345594455954559645597455984559945600456014560245603456044560545606456074560845609456104561145612456134561445615456164561745618456194562045621456224562345624456254562645627456284562945630456314563245633456344563545636456374563845639456404564145642456434564445645456464564745648456494565045651456524565345654456554565645657456584565945660456614566245663456644566545666456674566845669456704567145672456734567445675456764567745678456794568045681456824568345684456854568645687456884568945690456914569245693456944569545696456974569845699457004570145702457034570445705457064570745708457094571045711457124571345714457154571645717457184571945720457214572245723457244572545726457274572845729457304573145732457334573445735457364573745738457394574045741457424574345744457454574645747457484574945750457514575245753457544575545756457574575845759457604576145762457634576445765457664576745768457694577045771457724577345774457754577645777457784577945780457814578245783457844578545786457874578845789457904579145792457934579445795457964579745798457994580045801458024580345804458054580645807458084580945810458114581245813458144581545816458174581845819458204582145822458234582445825458264582745828458294583045831458324583345834458354583645837458384583945840458414584245843458444584545846458474584845849458504585145852458534585445855458564585745858458594586045861458624586345864458654586645867458684586945870458714587245873458744587545876458774587845879458804588145882458834588445885458864588745888458894589045891458924589345894458954589645897458984589945900459014590245903459044590545906459074590845909459104591145912459134591445915459164591745918459194592045921459224592345924459254592645927459284592945930459314593245933459344593545936459374593845939459404594145942459434594445945459464594745948459494595045951459524595345954459554595645957459584595945960459614596245963459644596545966459674596845969459704597145972459734597445975459764597745978459794598045981459824598345984459854598645987459884598945990459914599245993459944599545996459974599845999460004600146002460034600446005460064600746008460094601046011460124601346014460154601646017460184601946020460214602246023460244602546026460274602846029460304603146032460334603446035460364603746038460394604046041460424604346044460454604646047460484604946050460514605246053460544605546056460574605846059460604606146062460634606446065460664606746068460694607046071460724607346074460754607646077460784607946080460814608246083460844608546086460874608846089460904609146092460934609446095460964609746098460994610046101461024610346104461054610646107461084610946110461114611246113461144611546116461174611846119461204612146122461234612446125461264612746128461294613046131461324613346134461354613646137461384613946140461414614246143461444614546146461474614846149461504615146152461534615446155461564615746158461594616046161461624616346164461654616646167461684616946170461714617246173461744617546176461774617846179461804618146182461834618446185461864618746188461894619046191461924619346194461954619646197461984619946200462014620246203462044620546206462074620846209462104621146212462134621446215462164621746218462194622046221462224622346224462254622646227462284622946230462314623246233462344623546236462374623846239462404624146242462434624446245462464624746248462494625046251462524625346254462554625646257462584625946260462614626246263462644626546266462674626846269462704627146272462734627446275462764627746278462794628046281462824628346284462854628646287462884628946290462914629246293462944629546296462974629846299463004630146302463034630446305463064630746308463094631046311463124631346314463154631646317463184631946320463214632246323463244632546326463274632846329463304633146332463334633446335463364633746338463394634046341463424634346344463454634646347463484634946350463514635246353463544635546356463574635846359463604636146362463634636446365463664636746368463694637046371463724637346374463754637646377463784637946380463814638246383463844638546386463874638846389463904639146392463934639446395463964639746398463994640046401464024640346404464054640646407464084640946410464114641246413464144641546416464174641846419464204642146422464234642446425464264642746428464294643046431464324643346434464354643646437464384643946440464414644246443464444644546446464474644846449464504645146452464534645446455464564645746458464594646046461464624646346464464654646646467464684646946470464714647246473464744647546476464774647846479464804648146482464834648446485464864648746488464894649046491464924649346494464954649646497464984649946500465014650246503465044650546506465074650846509465104651146512465134651446515465164651746518465194652046521465224652346524465254652646527465284652946530465314653246533465344653546536465374653846539465404654146542465434654446545465464654746548465494655046551465524655346554465554655646557465584655946560465614656246563465644656546566465674656846569465704657146572465734657446575465764657746578465794658046581465824658346584465854658646587465884658946590465914659246593465944659546596465974659846599466004660146602466034660446605466064660746608466094661046611466124661346614466154661646617466184661946620466214662246623466244662546626466274662846629466304663146632466334663446635466364663746638466394664046641466424664346644466454664646647466484664946650466514665246653466544665546656466574665846659466604666146662466634666446665466664666746668466694667046671466724667346674466754667646677466784667946680466814668246683466844668546686466874668846689466904669146692466934669446695466964669746698466994670046701467024670346704467054670646707467084670946710467114671246713467144671546716467174671846719467204672146722467234672446725467264672746728467294673046731467324673346734467354673646737467384673946740467414674246743467444674546746467474674846749467504675146752467534675446755467564675746758467594676046761467624676346764467654676646767467684676946770467714677246773467744677546776467774677846779467804678146782467834678446785467864678746788467894679046791467924679346794467954679646797467984679946800468014680246803468044680546806468074680846809468104681146812468134681446815468164681746818468194682046821468224682346824468254682646827468284682946830468314683246833468344683546836468374683846839468404684146842468434684446845468464684746848468494685046851468524685346854468554685646857468584685946860468614686246863468644686546866468674686846869468704687146872468734687446875468764687746878468794688046881468824688346884468854688646887468884688946890468914689246893468944689546896468974689846899469004690146902469034690446905469064690746908469094691046911469124691346914469154691646917469184691946920469214692246923469244692546926469274692846929469304693146932469334693446935469364693746938469394694046941469424694346944469454694646947469484694946950469514695246953469544695546956469574695846959469604696146962469634696446965469664696746968469694697046971469724697346974469754697646977469784697946980469814698246983469844698546986469874698846989469904699146992469934699446995469964699746998469994700047001470024700347004470054700647007470084700947010470114701247013470144701547016470174701847019470204702147022470234702447025470264702747028470294703047031470324703347034470354703647037470384703947040470414704247043470444704547046470474704847049470504705147052470534705447055470564705747058470594706047061470624706347064470654706647067470684706947070470714707247073470744707547076470774707847079470804708147082470834708447085470864708747088470894709047091470924709347094470954709647097470984709947100471014710247103471044710547106471074710847109471104711147112471134711447115471164711747118471194712047121471224712347124471254712647127471284712947130471314713247133471344713547136471374713847139471404714147142471434714447145471464714747148471494715047151471524715347154471554715647157471584715947160471614716247163471644716547166471674716847169471704717147172471734717447175471764717747178471794718047181471824718347184471854718647187471884718947190471914719247193471944719547196471974719847199472004720147202472034720447205472064720747208472094721047211472124721347214472154721647217472184721947220472214722247223472244722547226472274722847229472304723147232472334723447235472364723747238472394724047241472424724347244472454724647247472484724947250472514725247253472544725547256472574725847259472604726147262472634726447265472664726747268472694727047271472724727347274472754727647277472784727947280472814728247283472844728547286472874728847289472904729147292472934729447295472964729747298472994730047301473024730347304473054730647307473084730947310473114731247313473144731547316473174731847319473204732147322473234732447325473264732747328473294733047331473324733347334473354733647337473384733947340473414734247343473444734547346473474734847349473504735147352473534735447355473564735747358473594736047361473624736347364473654736647367473684736947370473714737247373473744737547376473774737847379473804738147382473834738447385473864738747388473894739047391473924739347394473954739647397473984739947400474014740247403474044740547406474074740847409474104741147412474134741447415474164741747418474194742047421474224742347424474254742647427474284742947430474314743247433474344743547436474374743847439474404744147442474434744447445474464744747448474494745047451474524745347454474554745647457474584745947460474614746247463474644746547466474674746847469474704747147472474734747447475474764747747478474794748047481474824748347484474854748647487474884748947490474914749247493474944749547496474974749847499475004750147502475034750447505475064750747508475094751047511475124751347514475154751647517475184751947520475214752247523475244752547526475274752847529475304753147532475334753447535475364753747538475394754047541475424754347544475454754647547475484754947550475514755247553475544755547556475574755847559475604756147562475634756447565475664756747568475694757047571475724757347574475754757647577475784757947580475814758247583475844758547586475874758847589475904759147592475934759447595475964759747598475994760047601476024760347604476054760647607476084760947610476114761247613476144761547616476174761847619476204762147622476234762447625476264762747628476294763047631476324763347634476354763647637476384763947640476414764247643476444764547646476474764847649476504765147652476534765447655476564765747658476594766047661476624766347664476654766647667476684766947670476714767247673476744767547676476774767847679476804768147682476834768447685476864768747688476894769047691476924769347694476954769647697476984769947700477014770247703477044770547706477074770847709477104771147712477134771447715477164771747718477194772047721477224772347724477254772647727477284772947730477314773247733477344773547736477374773847739477404774147742477434774447745477464774747748477494775047751477524775347754477554775647757477584775947760477614776247763477644776547766477674776847769477704777147772477734777447775477764777747778477794778047781477824778347784477854778647787477884778947790477914779247793477944779547796477974779847799478004780147802478034780447805478064780747808478094781047811478124781347814478154781647817478184781947820478214782247823478244782547826478274782847829478304783147832478334783447835478364783747838478394784047841478424784347844478454784647847478484784947850478514785247853478544785547856478574785847859478604786147862478634786447865478664786747868478694787047871478724787347874478754787647877478784787947880478814788247883478844788547886478874788847889478904789147892478934789447895478964789747898478994790047901479024790347904479054790647907479084790947910479114791247913479144791547916479174791847919479204792147922479234792447925479264792747928479294793047931479324793347934479354793647937479384793947940479414794247943479444794547946479474794847949479504795147952479534795447955479564795747958479594796047961479624796347964479654796647967479684796947970479714797247973479744797547976479774797847979479804798147982479834798447985479864798747988479894799047991479924799347994479954799647997479984799948000480014800248003480044800548006480074800848009480104801148012480134801448015480164801748018480194802048021480224802348024480254802648027480284802948030480314803248033480344803548036480374803848039480404804148042480434804448045480464804748048480494805048051480524805348054480554805648057480584805948060480614806248063480644806548066480674806848069480704807148072480734807448075480764807748078480794808048081480824808348084480854808648087480884808948090480914809248093480944809548096480974809848099481004810148102481034810448105481064810748108481094811048111481124811348114481154811648117481184811948120481214812248123481244812548126481274812848129481304813148132481334813448135481364813748138481394814048141481424814348144481454814648147481484814948150481514815248153481544815548156481574815848159481604816148162481634816448165481664816748168481694817048171481724817348174481754817648177481784817948180481814818248183481844818548186481874818848189481904819148192481934819448195481964819748198481994820048201482024820348204482054820648207482084820948210482114821248213482144821548216482174821848219482204822148222482234822448225482264822748228482294823048231482324823348234482354823648237482384823948240482414824248243482444824548246482474824848249482504825148252482534825448255482564825748258482594826048261482624826348264482654826648267482684826948270482714827248273482744827548276482774827848279482804828148282482834828448285482864828748288482894829048291482924829348294482954829648297482984829948300483014830248303483044830548306483074830848309483104831148312483134831448315483164831748318483194832048321483224832348324483254832648327483284832948330483314833248333483344833548336483374833848339483404834148342483434834448345483464834748348483494835048351483524835348354483554835648357483584835948360483614836248363483644836548366483674836848369483704837148372483734837448375483764837748378483794838048381483824838348384483854838648387483884838948390483914839248393483944839548396483974839848399484004840148402484034840448405484064840748408484094841048411484124841348414484154841648417484184841948420484214842248423484244842548426484274842848429484304843148432484334843448435484364843748438484394844048441484424844348444484454844648447484484844948450484514845248453484544845548456484574845848459484604846148462484634846448465484664846748468484694847048471484724847348474484754847648477484784847948480484814848248483484844848548486484874848848489484904849148492484934849448495484964849748498484994850048501485024850348504485054850648507485084850948510485114851248513485144851548516485174851848519485204852148522485234852448525485264852748528485294853048531485324853348534485354853648537485384853948540485414854248543485444854548546485474854848549485504855148552485534855448555485564855748558485594856048561485624856348564485654856648567485684856948570485714857248573485744857548576485774857848579485804858148582485834858448585485864858748588485894859048591485924859348594485954859648597485984859948600486014860248603486044860548606486074860848609486104861148612486134861448615486164861748618486194862048621486224862348624486254862648627486284862948630486314863248633486344863548636486374863848639486404864148642486434864448645486464864748648486494865048651486524865348654486554865648657486584865948660486614866248663486644866548666486674866848669486704867148672486734867448675486764867748678486794868048681486824868348684486854868648687486884868948690486914869248693486944869548696486974869848699487004870148702487034870448705487064870748708487094871048711487124871348714487154871648717487184871948720487214872248723487244872548726487274872848729487304873148732487334873448735487364873748738487394874048741487424874348744487454874648747487484874948750487514875248753487544875548756487574875848759487604876148762487634876448765487664876748768487694877048771487724877348774487754877648777487784877948780487814878248783487844878548786487874878848789487904879148792487934879448795487964879748798487994880048801488024880348804488054880648807488084880948810488114881248813488144881548816488174881848819488204882148822488234882448825488264882748828488294883048831488324883348834488354883648837488384883948840488414884248843488444884548846488474884848849488504885148852488534885448855488564885748858488594886048861488624886348864488654886648867488684886948870488714887248873488744887548876488774887848879488804888148882488834888448885488864888748888488894889048891488924889348894488954889648897488984889948900489014890248903489044890548906489074890848909489104891148912489134891448915489164891748918489194892048921489224892348924489254892648927489284892948930489314893248933489344893548936489374893848939489404894148942489434894448945489464894748948489494895048951489524895348954489554895648957489584895948960489614896248963489644896548966489674896848969489704897148972489734897448975489764897748978489794898048981489824898348984489854898648987489884898948990489914899248993489944899548996489974899848999490004900149002490034900449005490064900749008490094901049011490124901349014490154901649017490184901949020490214902249023490244902549026490274902849029490304903149032490334903449035490364903749038490394904049041490424904349044490454904649047490484904949050490514905249053490544905549056490574905849059490604906149062490634906449065490664906749068490694907049071490724907349074490754907649077490784907949080490814908249083490844908549086490874908849089490904909149092490934909449095490964909749098490994910049101491024910349104491054910649107491084910949110491114911249113491144911549116491174911849119491204912149122491234912449125491264912749128491294913049131491324913349134491354913649137491384913949140491414914249143491444914549146491474914849149491504915149152491534915449155491564915749158491594916049161491624916349164491654916649167491684916949170491714917249173491744917549176491774917849179491804918149182491834918449185491864918749188491894919049191491924919349194491954919649197491984919949200492014920249203492044920549206492074920849209492104921149212492134921449215492164921749218492194922049221492224922349224492254922649227492284922949230492314923249233492344923549236492374923849239492404924149242492434924449245492464924749248492494925049251492524925349254492554925649257492584925949260492614926249263492644926549266492674926849269492704927149272492734927449275492764927749278492794928049281492824928349284492854928649287492884928949290492914929249293492944929549296492974929849299493004930149302493034930449305493064930749308493094931049311493124931349314493154931649317493184931949320493214932249323493244932549326493274932849329493304933149332493334933449335493364933749338493394934049341493424934349344493454934649347493484934949350493514935249353493544935549356493574935849359493604936149362493634936449365493664936749368493694937049371493724937349374493754937649377493784937949380493814938249383493844938549386493874938849389493904939149392493934939449395493964939749398493994940049401494024940349404494054940649407494084940949410494114941249413494144941549416494174941849419494204942149422494234942449425494264942749428494294943049431494324943349434494354943649437494384943949440494414944249443494444944549446494474944849449494504945149452494534945449455494564945749458494594946049461494624946349464494654946649467494684946949470494714947249473494744947549476494774947849479494804948149482494834948449485494864948749488494894949049491494924949349494494954949649497494984949949500495014950249503495044950549506495074950849509495104951149512495134951449515495164951749518495194952049521495224952349524495254952649527495284952949530495314953249533495344953549536495374953849539495404954149542495434954449545495464954749548495494955049551495524955349554495554955649557495584955949560495614956249563495644956549566495674956849569495704957149572495734957449575495764957749578495794958049581495824958349584495854958649587495884958949590495914959249593495944959549596495974959849599496004960149602496034960449605496064960749608496094961049611496124961349614496154961649617496184961949620496214962249623496244962549626496274962849629496304963149632496334963449635496364963749638496394964049641496424964349644496454964649647496484964949650496514965249653496544965549656496574965849659496604966149662496634966449665496664966749668496694967049671496724967349674496754967649677496784967949680496814968249683496844968549686496874968849689496904969149692496934969449695496964969749698496994970049701497024970349704497054970649707497084970949710497114971249713497144971549716497174971849719497204972149722497234972449725497264972749728497294973049731497324973349734497354973649737497384973949740497414974249743497444974549746497474974849749497504975149752497534975449755497564975749758497594976049761497624976349764497654976649767497684976949770497714977249773497744977549776497774977849779497804978149782497834978449785497864978749788497894979049791497924979349794497954979649797497984979949800498014980249803498044980549806498074980849809498104981149812498134981449815498164981749818498194982049821498224982349824498254982649827498284982949830498314983249833498344983549836498374983849839498404984149842498434984449845498464984749848498494985049851498524985349854498554985649857498584985949860498614986249863498644986549866498674986849869498704987149872498734987449875498764987749878498794988049881498824988349884498854988649887498884988949890498914989249893498944989549896498974989849899499004990149902499034990449905499064990749908499094991049911499124991349914499154991649917499184991949920499214992249923499244992549926499274992849929499304993149932499334993449935499364993749938499394994049941499424994349944499454994649947499484994949950499514995249953499544995549956499574995849959499604996149962499634996449965499664996749968499694997049971499724997349974499754997649977499784997949980499814998249983499844998549986499874998849989499904999149992499934999449995499964999749998499995000050001500025000350004500055000650007500085000950010500115001250013500145001550016500175001850019500205002150022500235002450025500265002750028500295003050031500325003350034500355003650037500385003950040500415004250043500445004550046500475004850049500505005150052500535005450055500565005750058500595006050061500625006350064500655006650067500685006950070500715007250073500745007550076500775007850079500805008150082500835008450085500865008750088500895009050091500925009350094500955009650097500985009950100501015010250103501045010550106501075010850109501105011150112501135011450115501165011750118501195012050121501225012350124501255012650127501285012950130501315013250133501345013550136501375013850139501405014150142501435014450145501465014750148501495015050151501525015350154501555015650157501585015950160501615016250163501645016550166501675016850169501705017150172501735017450175501765017750178501795018050181501825018350184501855018650187501885018950190501915019250193501945019550196501975019850199502005020150202502035020450205502065020750208502095021050211502125021350214502155021650217502185021950220502215022250223502245022550226502275022850229502305023150232502335023450235502365023750238502395024050241502425024350244502455024650247502485024950250502515025250253502545025550256502575025850259502605026150262502635026450265502665026750268502695027050271502725027350274502755027650277502785027950280502815028250283502845028550286502875028850289502905029150292502935029450295502965029750298502995030050301503025030350304503055030650307503085030950310503115031250313503145031550316503175031850319503205032150322503235032450325503265032750328503295033050331503325033350334503355033650337503385033950340503415034250343503445034550346503475034850349503505035150352503535035450355503565035750358503595036050361503625036350364503655036650367503685036950370503715037250373503745037550376503775037850379503805038150382503835038450385503865038750388503895039050391503925039350394503955039650397503985039950400504015040250403504045040550406504075040850409504105041150412504135041450415504165041750418504195042050421504225042350424504255042650427504285042950430504315043250433504345043550436504375043850439504405044150442504435044450445504465044750448504495045050451504525045350454504555045650457504585045950460504615046250463504645046550466504675046850469504705047150472504735047450475504765047750478504795048050481504825048350484504855048650487504885048950490504915049250493504945049550496504975049850499505005050150502505035050450505505065050750508505095051050511505125051350514505155051650517505185051950520505215052250523505245052550526505275052850529505305053150532505335053450535505365053750538505395054050541505425054350544505455054650547505485054950550505515055250553505545055550556505575055850559505605056150562505635056450565505665056750568505695057050571505725057350574505755057650577505785057950580505815058250583505845058550586505875058850589505905059150592505935059450595505965059750598505995060050601506025060350604506055060650607506085060950610506115061250613506145061550616506175061850619506205062150622506235062450625506265062750628506295063050631506325063350634506355063650637506385063950640506415064250643506445064550646506475064850649506505065150652506535065450655506565065750658506595066050661506625066350664506655066650667506685066950670506715067250673506745067550676506775067850679506805068150682506835068450685506865068750688506895069050691506925069350694506955069650697506985069950700507015070250703507045070550706507075070850709507105071150712507135071450715507165071750718507195072050721507225072350724507255072650727507285072950730507315073250733507345073550736507375073850739507405074150742507435074450745507465074750748507495075050751507525075350754507555075650757507585075950760507615076250763507645076550766507675076850769507705077150772507735077450775507765077750778507795078050781507825078350784507855078650787507885078950790507915079250793507945079550796507975079850799508005080150802508035080450805508065080750808508095081050811508125081350814508155081650817508185081950820508215082250823508245082550826508275082850829508305083150832508335083450835508365083750838508395084050841508425084350844508455084650847508485084950850508515085250853508545085550856508575085850859508605086150862508635086450865508665086750868508695087050871508725087350874508755087650877508785087950880508815088250883508845088550886508875088850889508905089150892508935089450895508965089750898508995090050901509025090350904509055090650907509085090950910509115091250913509145091550916509175091850919509205092150922509235092450925509265092750928509295093050931509325093350934509355093650937509385093950940509415094250943509445094550946509475094850949509505095150952509535095450955509565095750958509595096050961509625096350964509655096650967509685096950970509715097250973509745097550976509775097850979509805098150982509835098450985509865098750988509895099050991509925099350994509955099650997509985099951000510015100251003510045100551006510075100851009510105101151012510135101451015510165101751018510195102051021510225102351024510255102651027510285102951030510315103251033510345103551036510375103851039510405104151042510435104451045510465104751048510495105051051510525105351054510555105651057510585105951060510615106251063510645106551066510675106851069510705107151072510735107451075510765107751078510795108051081510825108351084510855108651087510885108951090510915109251093510945109551096510975109851099511005110151102511035110451105511065110751108511095111051111511125111351114511155111651117511185111951120511215112251123511245112551126511275112851129511305113151132511335113451135511365113751138511395114051141511425114351144511455114651147511485114951150511515115251153511545115551156511575115851159511605116151162511635116451165511665116751168511695117051171511725117351174511755117651177511785117951180511815118251183511845118551186511875118851189511905119151192511935119451195511965119751198511995120051201512025120351204512055120651207512085120951210512115121251213512145121551216512175121851219512205122151222512235122451225512265122751228512295123051231512325123351234512355123651237512385123951240512415124251243512445124551246512475124851249512505125151252512535125451255512565125751258512595126051261512625126351264512655126651267512685126951270512715127251273512745127551276512775127851279512805128151282512835128451285512865128751288512895129051291512925129351294512955129651297512985129951300513015130251303513045130551306513075130851309513105131151312513135131451315513165131751318513195132051321513225132351324513255132651327513285132951330513315133251333513345133551336513375133851339513405134151342513435134451345513465134751348513495135051351513525135351354513555135651357513585135951360513615136251363513645136551366513675136851369513705137151372513735137451375513765137751378513795138051381513825138351384513855138651387513885138951390513915139251393513945139551396513975139851399514005140151402514035140451405514065140751408514095141051411514125141351414514155141651417514185141951420514215142251423514245142551426514275142851429514305143151432514335143451435514365143751438514395144051441514425144351444514455144651447514485144951450514515145251453514545145551456514575145851459514605146151462514635146451465514665146751468514695147051471514725147351474514755147651477514785147951480514815148251483514845148551486514875148851489514905149151492514935149451495514965149751498514995150051501515025150351504515055150651507515085150951510515115151251513515145151551516515175151851519515205152151522515235152451525515265152751528515295153051531515325153351534515355153651537515385153951540515415154251543515445154551546515475154851549515505155151552515535155451555515565155751558515595156051561515625156351564515655156651567515685156951570515715157251573515745157551576515775157851579515805158151582515835158451585515865158751588515895159051591515925159351594515955159651597515985159951600516015160251603516045160551606516075160851609516105161151612516135161451615516165161751618516195162051621516225162351624516255162651627516285162951630516315163251633516345163551636516375163851639516405164151642516435164451645516465164751648516495165051651516525165351654516555165651657516585165951660516615166251663516645166551666516675166851669516705167151672516735167451675516765167751678516795168051681516825168351684516855168651687516885168951690516915169251693516945169551696516975169851699517005170151702517035170451705517065170751708517095171051711517125171351714517155171651717517185171951720517215172251723517245172551726517275172851729517305173151732517335173451735517365173751738517395174051741517425174351744517455174651747517485174951750517515175251753517545175551756517575175851759517605176151762517635176451765517665176751768517695177051771517725177351774517755177651777517785177951780517815178251783517845178551786517875178851789517905179151792517935179451795517965179751798517995180051801518025180351804518055180651807518085180951810518115181251813518145181551816518175181851819518205182151822518235182451825518265182751828518295183051831518325183351834518355183651837518385183951840518415184251843518445184551846518475184851849518505185151852518535185451855518565185751858518595186051861518625186351864518655186651867518685186951870518715187251873518745187551876518775187851879518805188151882518835188451885518865188751888518895189051891518925189351894518955189651897518985189951900519015190251903519045190551906519075190851909519105191151912519135191451915519165191751918519195192051921519225192351924519255192651927519285192951930519315193251933519345193551936519375193851939519405194151942519435194451945519465194751948519495195051951519525195351954519555195651957519585195951960519615196251963519645196551966519675196851969519705197151972519735197451975519765197751978519795198051981519825198351984519855198651987519885198951990519915199251993519945199551996519975199851999520005200152002520035200452005520065200752008520095201052011520125201352014520155201652017520185201952020520215202252023520245202552026520275202852029520305203152032520335203452035520365203752038520395204052041520425204352044520455204652047520485204952050520515205252053520545205552056520575205852059520605206152062520635206452065520665206752068520695207052071520725207352074520755207652077520785207952080520815208252083520845208552086520875208852089520905209152092520935209452095520965209752098520995210052101521025210352104521055210652107521085210952110521115211252113521145211552116521175211852119521205212152122521235212452125521265212752128521295213052131521325213352134521355213652137521385213952140521415214252143521445214552146521475214852149521505215152152521535215452155521565215752158521595216052161521625216352164521655216652167521685216952170521715217252173521745217552176521775217852179521805218152182521835218452185521865218752188521895219052191521925219352194521955219652197521985219952200522015220252203522045220552206522075220852209522105221152212522135221452215522165221752218522195222052221522225222352224522255222652227522285222952230522315223252233522345223552236522375223852239522405224152242522435224452245522465224752248522495225052251522525225352254522555225652257522585225952260522615226252263522645226552266522675226852269522705227152272522735227452275522765227752278522795228052281522825228352284522855228652287522885228952290522915229252293522945229552296522975229852299523005230152302523035230452305523065230752308523095231052311523125231352314523155231652317523185231952320523215232252323523245232552326523275232852329523305233152332523335233452335523365233752338523395234052341523425234352344523455234652347523485234952350523515235252353523545235552356523575235852359523605236152362523635236452365523665236752368523695237052371523725237352374523755237652377523785237952380523815238252383523845238552386523875238852389523905239152392523935239452395523965239752398523995240052401524025240352404524055240652407524085240952410524115241252413524145241552416524175241852419524205242152422524235242452425524265242752428524295243052431524325243352434524355243652437524385243952440524415244252443524445244552446524475244852449524505245152452524535245452455524565245752458524595246052461524625246352464524655246652467524685246952470524715247252473524745247552476524775247852479524805248152482524835248452485524865248752488524895249052491524925249352494524955249652497524985249952500525015250252503525045250552506525075250852509525105251152512525135251452515525165251752518525195252052521525225252352524525255252652527525285252952530525315253252533525345253552536525375253852539525405254152542525435254452545525465254752548525495255052551525525255352554525555255652557525585255952560525615256252563525645256552566525675256852569525705257152572525735257452575525765257752578525795258052581525825258352584525855258652587525885258952590525915259252593525945259552596525975259852599526005260152602526035260452605526065260752608526095261052611526125261352614526155261652617526185261952620526215262252623526245262552626526275262852629526305263152632526335263452635526365263752638526395264052641526425264352644526455264652647526485264952650526515265252653526545265552656526575265852659526605266152662526635266452665526665266752668526695267052671526725267352674526755267652677526785267952680526815268252683526845268552686526875268852689526905269152692526935269452695526965269752698526995270052701527025270352704527055270652707527085270952710527115271252713527145271552716527175271852719527205272152722527235272452725527265272752728527295273052731527325273352734527355273652737527385273952740527415274252743527445274552746527475274852749527505275152752527535275452755527565275752758527595276052761527625276352764527655276652767527685276952770527715277252773527745277552776527775277852779527805278152782527835278452785527865278752788527895279052791527925279352794527955279652797527985279952800528015280252803528045280552806528075280852809528105281152812528135281452815528165281752818528195282052821528225282352824528255282652827528285282952830528315283252833528345283552836528375283852839528405284152842528435284452845528465284752848528495285052851528525285352854528555285652857528585285952860528615286252863528645286552866528675286852869528705287152872528735287452875528765287752878528795288052881528825288352884528855288652887528885288952890528915289252893528945289552896528975289852899529005290152902529035290452905529065290752908529095291052911529125291352914529155291652917529185291952920529215292252923529245292552926529275292852929529305293152932529335293452935529365293752938529395294052941529425294352944529455294652947529485294952950529515295252953529545295552956529575295852959529605296152962529635296452965529665296752968529695297052971529725297352974529755297652977529785297952980529815298252983529845298552986529875298852989529905299152992529935299452995529965299752998529995300053001530025300353004530055300653007530085300953010530115301253013530145301553016530175301853019530205302153022530235302453025530265302753028530295303053031530325303353034530355303653037530385303953040530415304253043530445304553046530475304853049530505305153052530535305453055530565305753058530595306053061530625306353064530655306653067530685306953070530715307253073530745307553076530775307853079530805308153082530835308453085530865308753088530895309053091530925309353094530955309653097530985309953100531015310253103531045310553106531075310853109531105311153112531135311453115531165311753118531195312053121531225312353124531255312653127531285312953130531315313253133531345313553136531375313853139531405314153142531435314453145531465314753148531495315053151531525315353154531555315653157531585315953160531615316253163531645316553166531675316853169531705317153172531735317453175531765317753178531795318053181531825318353184531855318653187531885318953190531915319253193531945319553196531975319853199532005320153202532035320453205532065320753208532095321053211532125321353214532155321653217532185321953220532215322253223532245322553226532275322853229532305323153232532335323453235532365323753238532395324053241532425324353244532455324653247532485324953250532515325253253532545325553256532575325853259532605326153262532635326453265532665326753268532695327053271532725327353274532755327653277532785327953280532815328253283532845328553286532875328853289532905329153292532935329453295532965329753298532995330053301533025330353304533055330653307533085330953310533115331253313533145331553316533175331853319533205332153322533235332453325533265332753328533295333053331533325333353334533355333653337533385333953340533415334253343533445334553346533475334853349533505335153352533535335453355533565335753358533595336053361533625336353364533655336653367533685336953370533715337253373533745337553376533775337853379533805338153382533835338453385533865338753388533895339053391533925339353394533955339653397533985339953400534015340253403534045340553406534075340853409534105341153412534135341453415534165341753418534195342053421534225342353424534255342653427534285342953430534315343253433534345343553436534375343853439534405344153442534435344453445534465344753448534495345053451534525345353454534555345653457534585345953460534615346253463534645346553466534675346853469534705347153472534735347453475534765347753478534795348053481534825348353484534855348653487534885348953490534915349253493534945349553496534975349853499535005350153502535035350453505535065350753508535095351053511535125351353514535155351653517535185351953520535215352253523535245352553526535275352853529535305353153532535335353453535535365353753538535395354053541535425354353544535455354653547535485354953550535515355253553535545355553556535575355853559535605356153562535635356453565535665356753568535695357053571535725357353574535755357653577535785357953580535815358253583535845358553586535875358853589535905359153592535935359453595535965359753598535995360053601536025360353604536055360653607536085360953610536115361253613536145361553616536175361853619536205362153622536235362453625536265362753628536295363053631536325363353634536355363653637536385363953640536415364253643536445364553646536475364853649536505365153652536535365453655536565365753658536595366053661536625366353664536655366653667536685366953670536715367253673536745367553676536775367853679536805368153682536835368453685536865368753688536895369053691536925369353694536955369653697536985369953700537015370253703537045370553706537075370853709537105371153712537135371453715537165371753718537195372053721537225372353724537255372653727537285372953730537315373253733537345373553736537375373853739537405374153742537435374453745537465374753748537495375053751537525375353754537555375653757537585375953760537615376253763537645376553766537675376853769537705377153772537735377453775537765377753778537795378053781537825378353784537855378653787537885378953790537915379253793537945379553796537975379853799538005380153802538035380453805538065380753808538095381053811538125381353814538155381653817538185381953820538215382253823538245382553826538275382853829538305383153832538335383453835538365383753838538395384053841538425384353844538455384653847538485384953850538515385253853538545385553856538575385853859538605386153862538635386453865538665386753868538695387053871538725387353874538755387653877538785387953880538815388253883538845388553886538875388853889538905389153892538935389453895538965389753898538995390053901539025390353904539055390653907539085390953910539115391253913539145391553916539175391853919539205392153922539235392453925539265392753928539295393053931539325393353934539355393653937539385393953940539415394253943539445394553946539475394853949539505395153952539535395453955539565395753958539595396053961539625396353964539655396653967539685396953970539715397253973539745397553976539775397853979539805398153982539835398453985539865398753988539895399053991539925399353994539955399653997539985399954000540015400254003540045400554006540075400854009540105401154012540135401454015540165401754018540195402054021540225402354024540255402654027540285402954030540315403254033540345403554036540375403854039540405404154042540435404454045540465404754048540495405054051540525405354054540555405654057540585405954060540615406254063540645406554066540675406854069540705407154072540735407454075540765407754078540795408054081540825408354084540855408654087540885408954090540915409254093540945409554096540975409854099541005410154102541035410454105541065410754108541095411054111541125411354114541155411654117541185411954120541215412254123541245412554126541275412854129541305413154132541335413454135541365413754138541395414054141541425414354144541455414654147541485414954150541515415254153541545415554156541575415854159541605416154162541635416454165541665416754168541695417054171541725417354174541755417654177541785417954180541815418254183541845418554186541875418854189541905419154192541935419454195541965419754198541995420054201542025420354204542055420654207542085420954210542115421254213542145421554216542175421854219542205422154222542235422454225542265422754228542295423054231542325423354234542355423654237542385423954240542415424254243542445424554246542475424854249542505425154252542535425454255542565425754258542595426054261542625426354264542655426654267542685426954270542715427254273542745427554276542775427854279542805428154282542835428454285542865428754288542895429054291542925429354294542955429654297542985429954300543015430254303543045430554306543075430854309543105431154312543135431454315543165431754318543195432054321543225432354324543255432654327543285432954330543315433254333543345433554336543375433854339543405434154342543435434454345543465434754348543495435054351543525435354354543555435654357543585435954360543615436254363543645436554366543675436854369543705437154372543735437454375543765437754378543795438054381543825438354384543855438654387543885438954390543915439254393543945439554396543975439854399544005440154402544035440454405544065440754408544095441054411544125441354414544155441654417544185441954420544215442254423544245442554426544275442854429544305443154432544335443454435544365443754438544395444054441544425444354444544455444654447544485444954450544515445254453544545445554456544575445854459544605446154462544635446454465544665446754468544695447054471544725447354474544755447654477544785447954480544815448254483544845448554486544875448854489544905449154492544935449454495544965449754498544995450054501545025450354504545055450654507545085450954510545115451254513545145451554516545175451854519545205452154522545235452454525545265452754528545295453054531545325453354534545355453654537545385453954540545415454254543545445454554546545475454854549545505455154552545535455454555545565455754558545595456054561545625456354564545655456654567545685456954570545715457254573545745457554576545775457854579545805458154582545835458454585545865458754588545895459054591545925459354594545955459654597545985459954600546015460254603546045460554606546075460854609546105461154612546135461454615546165461754618546195462054621546225462354624546255462654627546285462954630546315463254633546345463554636546375463854639546405464154642546435464454645546465464754648546495465054651546525465354654546555465654657546585465954660546615466254663546645466554666546675466854669546705467154672546735467454675546765467754678546795468054681546825468354684546855468654687546885468954690546915469254693546945469554696546975469854699547005470154702547035470454705547065470754708547095471054711547125471354714547155471654717547185471954720547215472254723547245472554726547275472854729547305473154732547335473454735547365473754738547395474054741547425474354744547455474654747547485474954750547515475254753547545475554756547575475854759547605476154762547635476454765547665476754768547695477054771547725477354774547755477654777547785477954780547815478254783547845478554786547875478854789547905479154792547935479454795547965479754798547995480054801548025480354804548055480654807548085480954810548115481254813548145481554816548175481854819548205482154822548235482454825548265482754828548295483054831548325483354834548355483654837548385483954840548415484254843548445484554846548475484854849548505485154852548535485454855548565485754858548595486054861548625486354864548655486654867548685486954870548715487254873548745487554876548775487854879548805488154882548835488454885548865488754888548895489054891548925489354894548955489654897548985489954900549015490254903549045490554906549075490854909549105491154912549135491454915549165491754918549195492054921549225492354924549255492654927549285492954930549315493254933549345493554936549375493854939549405494154942549435494454945549465494754948549495495054951549525495354954549555495654957549585495954960549615496254963549645496554966549675496854969549705497154972549735497454975549765497754978549795498054981549825498354984549855498654987549885498954990549915499254993549945499554996549975499854999550005500155002550035500455005550065500755008550095501055011550125501355014550155501655017550185501955020550215502255023550245502555026550275502855029550305503155032550335503455035550365503755038550395504055041550425504355044550455504655047550485504955050550515505255053550545505555056550575505855059550605506155062550635506455065550665506755068550695507055071550725507355074550755507655077550785507955080550815508255083550845508555086550875508855089550905509155092550935509455095550965509755098550995510055101551025510355104551055510655107551085510955110551115511255113551145511555116551175511855119551205512155122551235512455125551265512755128551295513055131551325513355134551355513655137551385513955140551415514255143551445514555146551475514855149551505515155152551535515455155551565515755158551595516055161551625516355164551655516655167551685516955170551715517255173551745517555176551775517855179551805518155182551835518455185551865518755188551895519055191551925519355194551955519655197551985519955200552015520255203552045520555206552075520855209552105521155212552135521455215552165521755218552195522055221552225522355224552255522655227552285522955230552315523255233552345523555236552375523855239552405524155242552435524455245552465524755248552495525055251552525525355254552555525655257552585525955260552615526255263552645526555266552675526855269552705527155272552735527455275552765527755278552795528055281552825528355284552855528655287552885528955290552915529255293552945529555296552975529855299553005530155302553035530455305553065530755308553095531055311553125531355314553155531655317553185531955320553215532255323553245532555326553275532855329553305533155332553335533455335553365533755338553395534055341553425534355344553455534655347553485534955350553515535255353553545535555356553575535855359553605536155362553635536455365553665536755368553695537055371553725537355374553755537655377553785537955380553815538255383553845538555386553875538855389553905539155392553935539455395553965539755398553995540055401554025540355404554055540655407554085540955410554115541255413554145541555416554175541855419554205542155422554235542455425554265542755428554295543055431554325543355434554355543655437554385543955440554415544255443554445544555446554475544855449554505545155452554535545455455554565545755458554595546055461554625546355464554655546655467554685546955470554715547255473554745547555476554775547855479554805548155482554835548455485554865548755488554895549055491554925549355494554955549655497554985549955500555015550255503555045550555506555075550855509555105551155512555135551455515555165551755518555195552055521555225552355524555255552655527555285552955530555315553255533555345553555536555375553855539555405554155542555435554455545555465554755548555495555055551555525555355554555555555655557555585555955560555615556255563555645556555566555675556855569555705557155572555735557455575555765557755578555795558055581555825558355584555855558655587555885558955590555915559255593555945559555596555975559855599556005560155602556035560455605556065560755608556095561055611556125561355614556155561655617556185561955620556215562255623556245562555626556275562855629556305563155632556335563455635556365563755638556395564055641556425564355644556455564655647556485564955650556515565255653556545565555656556575565855659556605566155662556635566455665556665566755668556695567055671556725567355674556755567655677556785567955680556815568255683556845568555686556875568855689556905569155692556935569455695556965569755698556995570055701557025570355704557055570655707557085570955710557115571255713557145571555716557175571855719557205572155722557235572455725557265572755728557295573055731557325573355734557355573655737557385573955740557415574255743557445574555746557475574855749557505575155752557535575455755557565575755758557595576055761557625576355764557655576655767557685576955770557715577255773557745577555776557775577855779557805578155782557835578455785557865578755788557895579055791557925579355794557955579655797557985579955800558015580255803558045580555806558075580855809558105581155812558135581455815558165581755818558195582055821558225582355824558255582655827558285582955830558315583255833558345583555836558375583855839558405584155842558435584455845558465584755848558495585055851558525585355854558555585655857558585585955860558615586255863558645586555866558675586855869558705587155872558735587455875558765587755878558795588055881558825588355884558855588655887558885588955890558915589255893558945589555896558975589855899559005590155902559035590455905559065590755908559095591055911559125591355914559155591655917559185591955920559215592255923559245592555926559275592855929559305593155932559335593455935559365593755938559395594055941559425594355944559455594655947559485594955950559515595255953559545595555956559575595855959559605596155962559635596455965559665596755968559695597055971559725597355974559755597655977559785597955980559815598255983559845598555986559875598855989559905599155992559935599455995559965599755998559995600056001560025600356004560055600656007560085600956010560115601256013560145601556016560175601856019560205602156022560235602456025560265602756028560295603056031560325603356034560355603656037560385603956040560415604256043560445604556046560475604856049560505605156052560535605456055560565605756058560595606056061560625606356064560655606656067560685606956070560715607256073560745607556076560775607856079560805608156082560835608456085560865608756088560895609056091560925609356094560955609656097560985609956100561015610256103561045610556106561075610856109561105611156112561135611456115561165611756118561195612056121561225612356124561255612656127561285612956130561315613256133561345613556136561375613856139561405614156142561435614456145561465614756148561495615056151561525615356154561555615656157561585615956160561615616256163561645616556166561675616856169561705617156172561735617456175561765617756178561795618056181561825618356184561855618656187561885618956190561915619256193561945619556196561975619856199562005620156202562035620456205562065620756208562095621056211562125621356214562155621656217562185621956220562215622256223562245622556226562275622856229562305623156232562335623456235562365623756238562395624056241562425624356244562455624656247562485624956250562515625256253562545625556256562575625856259562605626156262562635626456265562665626756268562695627056271562725627356274562755627656277562785627956280562815628256283562845628556286562875628856289562905629156292562935629456295562965629756298562995630056301563025630356304563055630656307563085630956310563115631256313563145631556316563175631856319563205632156322563235632456325563265632756328563295633056331563325633356334563355633656337563385633956340563415634256343563445634556346563475634856349563505635156352563535635456355563565635756358563595636056361563625636356364563655636656367563685636956370563715637256373563745637556376563775637856379563805638156382563835638456385563865638756388563895639056391563925639356394563955639656397563985639956400564015640256403564045640556406564075640856409564105641156412564135641456415564165641756418564195642056421564225642356424564255642656427564285642956430564315643256433564345643556436564375643856439564405644156442564435644456445564465644756448564495645056451564525645356454564555645656457564585645956460564615646256463564645646556466564675646856469564705647156472564735647456475564765647756478564795648056481564825648356484564855648656487564885648956490564915649256493564945649556496564975649856499565005650156502565035650456505565065650756508565095651056511565125651356514565155651656517565185651956520565215652256523565245652556526565275652856529565305653156532565335653456535565365653756538565395654056541565425654356544565455654656547565485654956550565515655256553565545655556556565575655856559565605656156562565635656456565565665656756568565695657056571565725657356574565755657656577565785657956580565815658256583565845658556586565875658856589565905659156592565935659456595565965659756598565995660056601566025660356604566055660656607566085660956610566115661256613566145661556616566175661856619566205662156622566235662456625566265662756628566295663056631566325663356634566355663656637566385663956640566415664256643566445664556646566475664856649566505665156652566535665456655566565665756658566595666056661566625666356664566655666656667566685666956670566715667256673566745667556676566775667856679566805668156682566835668456685566865668756688566895669056691566925669356694566955669656697566985669956700567015670256703567045670556706567075670856709567105671156712567135671456715567165671756718567195672056721567225672356724567255672656727567285672956730567315673256733567345673556736567375673856739567405674156742567435674456745567465674756748567495675056751567525675356754567555675656757567585675956760567615676256763567645676556766567675676856769567705677156772567735677456775567765677756778567795678056781567825678356784567855678656787567885678956790567915679256793567945679556796567975679856799568005680156802568035680456805568065680756808568095681056811568125681356814568155681656817568185681956820568215682256823568245682556826568275682856829568305683156832568335683456835568365683756838568395684056841568425684356844568455684656847568485684956850568515685256853568545685556856568575685856859568605686156862568635686456865568665686756868568695687056871568725687356874568755687656877568785687956880568815688256883568845688556886568875688856889568905689156892568935689456895568965689756898568995690056901569025690356904569055690656907569085690956910569115691256913569145691556916569175691856919569205692156922569235692456925569265692756928569295693056931569325693356934569355693656937569385693956940569415694256943569445694556946569475694856949569505695156952569535695456955569565695756958569595696056961569625696356964569655696656967569685696956970569715697256973569745697556976569775697856979569805698156982569835698456985569865698756988569895699056991569925699356994569955699656997569985699957000570015700257003570045700557006570075700857009570105701157012570135701457015570165701757018570195702057021570225702357024570255702657027570285702957030570315703257033570345703557036570375703857039570405704157042570435704457045570465704757048570495705057051570525705357054570555705657057570585705957060570615706257063570645706557066570675706857069570705707157072570735707457075570765707757078570795708057081570825708357084570855708657087570885708957090570915709257093570945709557096570975709857099571005710157102571035710457105571065710757108571095711057111571125711357114571155711657117571185711957120571215712257123571245712557126571275712857129571305713157132571335713457135571365713757138571395714057141571425714357144571455714657147571485714957150571515715257153571545715557156571575715857159571605716157162571635716457165571665716757168571695717057171571725717357174571755717657177571785717957180571815718257183571845718557186571875718857189571905719157192571935719457195571965719757198571995720057201572025720357204572055720657207572085720957210572115721257213572145721557216572175721857219572205722157222572235722457225572265722757228572295723057231572325723357234572355723657237572385723957240572415724257243572445724557246572475724857249572505725157252572535725457255572565725757258572595726057261572625726357264572655726657267572685726957270572715727257273572745727557276572775727857279572805728157282572835728457285572865728757288572895729057291572925729357294572955729657297572985729957300573015730257303573045730557306573075730857309573105731157312573135731457315573165731757318573195732057321573225732357324573255732657327573285732957330573315733257333573345733557336573375733857339573405734157342573435734457345573465734757348573495735057351573525735357354573555735657357573585735957360573615736257363573645736557366573675736857369573705737157372573735737457375573765737757378573795738057381573825738357384573855738657387573885738957390573915739257393573945739557396573975739857399574005740157402574035740457405574065740757408574095741057411574125741357414574155741657417574185741957420574215742257423574245742557426574275742857429574305743157432574335743457435574365743757438574395744057441574425744357444574455744657447574485744957450574515745257453574545745557456574575745857459574605746157462574635746457465574665746757468574695747057471574725747357474574755747657477574785747957480574815748257483574845748557486574875748857489574905749157492574935749457495574965749757498574995750057501575025750357504575055750657507575085750957510575115751257513575145751557516575175751857519575205752157522575235752457525575265752757528575295753057531575325753357534575355753657537575385753957540575415754257543575445754557546575475754857549575505755157552575535755457555575565755757558575595756057561575625756357564575655756657567575685756957570575715757257573575745757557576575775757857579575805758157582575835758457585575865758757588575895759057591575925759357594575955759657597575985759957600576015760257603576045760557606576075760857609576105761157612576135761457615576165761757618576195762057621576225762357624576255762657627576285762957630576315763257633576345763557636576375763857639576405764157642576435764457645576465764757648576495765057651576525765357654576555765657657576585765957660576615766257663576645766557666576675766857669576705767157672576735767457675576765767757678576795768057681576825768357684576855768657687576885768957690576915769257693576945769557696576975769857699577005770157702577035770457705577065770757708577095771057711577125771357714577155771657717577185771957720577215772257723577245772557726577275772857729577305773157732577335773457735577365773757738577395774057741577425774357744577455774657747577485774957750577515775257753577545775557756577575775857759577605776157762577635776457765577665776757768577695777057771577725777357774577755777657777577785777957780577815778257783577845778557786577875778857789577905779157792577935779457795577965779757798577995780057801578025780357804578055780657807578085780957810578115781257813578145781557816578175781857819578205782157822578235782457825578265782757828578295783057831578325783357834578355783657837578385783957840578415784257843578445784557846578475784857849578505785157852578535785457855578565785757858578595786057861578625786357864578655786657867578685786957870578715787257873578745787557876578775787857879578805788157882578835788457885578865788757888578895789057891578925789357894578955789657897578985789957900579015790257903579045790557906579075790857909579105791157912579135791457915579165791757918579195792057921579225792357924579255792657927579285792957930579315793257933579345793557936579375793857939579405794157942579435794457945579465794757948579495795057951579525795357954579555795657957579585795957960579615796257963579645796557966579675796857969579705797157972579735797457975579765797757978579795798057981579825798357984579855798657987579885798957990579915799257993579945799557996579975799857999580005800158002580035800458005580065800758008580095801058011580125801358014580155801658017580185801958020580215802258023580245802558026580275802858029580305803158032580335803458035580365803758038580395804058041580425804358044580455804658047580485804958050580515805258053580545805558056580575805858059580605806158062580635806458065580665806758068580695807058071580725807358074580755807658077580785807958080580815808258083580845808558086580875808858089580905809158092580935809458095580965809758098580995810058101581025810358104581055810658107581085810958110581115811258113581145811558116581175811858119581205812158122581235812458125581265812758128581295813058131581325813358134581355813658137581385813958140581415814258143581445814558146581475814858149581505815158152581535815458155581565815758158581595816058161581625816358164581655816658167581685816958170581715817258173581745817558176581775817858179581805818158182581835818458185581865818758188581895819058191581925819358194581955819658197581985819958200582015820258203582045820558206582075820858209582105821158212582135821458215582165821758218582195822058221582225822358224582255822658227582285822958230582315823258233582345823558236582375823858239582405824158242582435824458245582465824758248582495825058251582525825358254582555825658257582585825958260582615826258263582645826558266582675826858269582705827158272582735827458275582765827758278582795828058281582825828358284582855828658287582885828958290582915829258293582945829558296582975829858299583005830158302583035830458305583065830758308583095831058311583125831358314583155831658317583185831958320583215832258323583245832558326583275832858329583305833158332583335833458335583365833758338583395834058341583425834358344583455834658347583485834958350583515835258353583545835558356583575835858359583605836158362583635836458365583665836758368583695837058371583725837358374583755837658377583785837958380583815838258383583845838558386583875838858389583905839158392583935839458395583965839758398583995840058401584025840358404584055840658407584085840958410584115841258413584145841558416584175841858419584205842158422584235842458425584265842758428584295843058431584325843358434584355843658437584385843958440584415844258443584445844558446584475844858449584505845158452584535845458455584565845758458584595846058461584625846358464584655846658467584685846958470584715847258473584745847558476584775847858479584805848158482584835848458485584865848758488584895849058491584925849358494584955849658497584985849958500585015850258503585045850558506585075850858509585105851158512585135851458515585165851758518585195852058521585225852358524585255852658527585285852958530585315853258533585345853558536585375853858539585405854158542585435854458545585465854758548585495855058551585525855358554585555855658557585585855958560585615856258563585645856558566585675856858569585705857158572585735857458575585765857758578585795858058581585825858358584585855858658587585885858958590585915859258593585945859558596585975859858599586005860158602586035860458605586065860758608586095861058611586125861358614586155861658617586185861958620586215862258623586245862558626586275862858629586305863158632586335863458635586365863758638586395864058641586425864358644586455864658647586485864958650586515865258653586545865558656586575865858659586605866158662586635866458665586665866758668586695867058671586725867358674586755867658677586785867958680586815868258683586845868558686586875868858689586905869158692586935869458695586965869758698586995870058701587025870358704587055870658707587085870958710587115871258713587145871558716587175871858719587205872158722587235872458725587265872758728587295873058731587325873358734587355873658737587385873958740587415874258743587445874558746587475874858749587505875158752587535875458755587565875758758587595876058761587625876358764587655876658767587685876958770587715877258773587745877558776587775877858779587805878158782587835878458785587865878758788587895879058791587925879358794587955879658797587985879958800588015880258803588045880558806588075880858809588105881158812588135881458815588165881758818588195882058821588225882358824588255882658827588285882958830588315883258833588345883558836588375883858839588405884158842588435884458845588465884758848588495885058851588525885358854588555885658857588585885958860588615886258863588645886558866588675886858869588705887158872588735887458875588765887758878588795888058881588825888358884588855888658887588885888958890588915889258893588945889558896588975889858899589005890158902589035890458905589065890758908589095891058911589125891358914589155891658917589185891958920589215892258923589245892558926589275892858929589305893158932589335893458935589365893758938589395894058941589425894358944589455894658947589485894958950589515895258953589545895558956589575895858959589605896158962589635896458965589665896758968589695897058971589725897358974589755897658977589785897958980589815898258983589845898558986589875898858989589905899158992589935899458995589965899758998589995900059001590025900359004590055900659007590085900959010590115901259013590145901559016590175901859019590205902159022590235902459025590265902759028590295903059031590325903359034590355903659037590385903959040590415904259043590445904559046590475904859049590505905159052590535905459055590565905759058590595906059061590625906359064590655906659067590685906959070590715907259073590745907559076590775907859079590805908159082590835908459085590865908759088590895909059091590925909359094590955909659097590985909959100591015910259103591045910559106591075910859109591105911159112591135911459115591165911759118591195912059121591225912359124591255912659127591285912959130591315913259133591345913559136591375913859139591405914159142591435914459145591465914759148591495915059151591525915359154591555915659157591585915959160591615916259163591645916559166591675916859169591705917159172591735917459175591765917759178591795918059181591825918359184591855918659187591885918959190591915919259193591945919559196591975919859199592005920159202592035920459205592065920759208592095921059211592125921359214592155921659217592185921959220592215922259223592245922559226592275922859229592305923159232592335923459235592365923759238592395924059241592425924359244592455924659247592485924959250592515925259253592545925559256592575925859259592605926159262592635926459265592665926759268592695927059271592725927359274592755927659277592785927959280592815928259283592845928559286592875928859289592905929159292592935929459295592965929759298592995930059301593025930359304593055930659307593085930959310593115931259313593145931559316593175931859319593205932159322593235932459325593265932759328593295933059331593325933359334593355933659337593385933959340593415934259343593445934559346593475934859349593505935159352593535935459355593565935759358593595936059361593625936359364593655936659367593685936959370593715937259373593745937559376593775937859379593805938159382593835938459385593865938759388593895939059391593925939359394593955939659397593985939959400594015940259403594045940559406594075940859409594105941159412594135941459415594165941759418594195942059421594225942359424594255942659427594285942959430594315943259433594345943559436594375943859439594405944159442594435944459445594465944759448594495945059451594525945359454594555945659457594585945959460594615946259463594645946559466594675946859469594705947159472594735947459475594765947759478594795948059481594825948359484594855948659487594885948959490594915949259493594945949559496594975949859499595005950159502595035950459505595065950759508595095951059511595125951359514595155951659517595185951959520595215952259523595245952559526595275952859529595305953159532595335953459535595365953759538595395954059541595425954359544595455954659547595485954959550595515955259553595545955559556595575955859559595605956159562595635956459565595665956759568595695957059571595725957359574595755957659577595785957959580595815958259583595845958559586595875958859589595905959159592595935959459595595965959759598595995960059601596025960359604596055960659607596085960959610596115961259613596145961559616596175961859619596205962159622596235962459625596265962759628596295963059631596325963359634596355963659637596385963959640596415964259643596445964559646596475964859649596505965159652596535965459655596565965759658596595966059661596625966359664596655966659667596685966959670596715967259673596745967559676596775967859679596805968159682596835968459685596865968759688596895969059691596925969359694596955969659697596985969959700597015970259703597045970559706597075970859709597105971159712597135971459715597165971759718597195972059721597225972359724597255972659727597285972959730597315973259733597345973559736597375973859739597405974159742597435974459745597465974759748597495975059751597525975359754597555975659757597585975959760597615976259763597645976559766597675976859769597705977159772597735977459775597765977759778597795978059781597825978359784597855978659787597885978959790597915979259793597945979559796597975979859799598005980159802598035980459805598065980759808598095981059811598125981359814598155981659817598185981959820598215982259823598245982559826598275982859829598305983159832598335983459835598365983759838598395984059841598425984359844598455984659847598485984959850598515985259853598545985559856598575985859859598605986159862598635986459865598665986759868598695987059871598725987359874598755987659877598785987959880598815988259883598845988559886598875988859889598905989159892598935989459895598965989759898598995990059901599025990359904599055990659907599085990959910599115991259913599145991559916599175991859919599205992159922599235992459925599265992759928599295993059931599325993359934599355993659937599385993959940599415994259943599445994559946599475994859949599505995159952599535995459955599565995759958599595996059961599625996359964599655996659967599685996959970599715997259973599745997559976599775997859979599805998159982599835998459985599865998759988599895999059991599925999359994599955999659997599985999960000600016000260003600046000560006600076000860009600106001160012600136001460015600166001760018600196002060021600226002360024600256002660027600286002960030600316003260033600346003560036600376003860039600406004160042600436004460045600466004760048600496005060051600526005360054600556005660057600586005960060600616006260063600646006560066600676006860069600706007160072600736007460075600766007760078600796008060081600826008360084600856008660087600886008960090600916009260093600946009560096600976009860099601006010160102601036010460105601066010760108601096011060111601126011360114601156011660117601186011960120601216012260123601246012560126601276012860129601306013160132601336013460135601366013760138601396014060141601426014360144601456014660147601486014960150601516015260153601546015560156601576015860159601606016160162601636016460165601666016760168601696017060171601726017360174601756017660177601786017960180601816018260183601846018560186601876018860189601906019160192601936019460195601966019760198601996020060201602026020360204602056020660207602086020960210602116021260213602146021560216602176021860219602206022160222602236022460225602266022760228602296023060231602326023360234602356023660237602386023960240602416024260243602446024560246602476024860249602506025160252602536025460255602566025760258602596026060261602626026360264602656026660267602686026960270602716027260273602746027560276602776027860279602806028160282602836028460285602866028760288602896029060291602926029360294602956029660297602986029960300603016030260303603046030560306603076030860309603106031160312603136031460315603166031760318603196032060321603226032360324603256032660327603286032960330603316033260333603346033560336603376033860339603406034160342603436034460345603466034760348603496035060351603526035360354603556035660357603586035960360603616036260363603646036560366603676036860369603706037160372603736037460375603766037760378603796038060381603826038360384603856038660387603886038960390603916039260393603946039560396603976039860399604006040160402604036040460405604066040760408604096041060411604126041360414604156041660417604186041960420604216042260423604246042560426604276042860429604306043160432604336043460435604366043760438604396044060441604426044360444604456044660447604486044960450604516045260453604546045560456604576045860459604606046160462604636046460465604666046760468604696047060471604726047360474604756047660477604786047960480604816048260483604846048560486604876048860489604906049160492604936049460495604966049760498604996050060501605026050360504605056050660507605086050960510605116051260513605146051560516605176051860519605206052160522605236052460525605266052760528605296053060531605326053360534605356053660537605386053960540605416054260543605446054560546605476054860549605506055160552605536055460555605566055760558605596056060561605626056360564605656056660567605686056960570605716057260573605746057560576605776057860579605806058160582605836058460585605866058760588605896059060591605926059360594605956059660597605986059960600606016060260603606046060560606606076060860609606106061160612606136061460615606166061760618606196062060621606226062360624606256062660627606286062960630606316063260633606346063560636606376063860639606406064160642606436064460645606466064760648606496065060651606526065360654606556065660657606586065960660606616066260663606646066560666606676066860669606706067160672606736067460675606766067760678606796068060681606826068360684606856068660687606886068960690606916069260693606946069560696606976069860699607006070160702607036070460705607066070760708607096071060711607126071360714607156071660717607186071960720607216072260723607246072560726607276072860729607306073160732607336073460735607366073760738607396074060741607426074360744607456074660747607486074960750607516075260753607546075560756607576075860759607606076160762607636076460765607666076760768607696077060771607726077360774607756077660777607786077960780607816078260783607846078560786607876078860789607906079160792607936079460795607966079760798607996080060801608026080360804608056080660807608086080960810608116081260813608146081560816608176081860819608206082160822608236082460825608266082760828608296083060831608326083360834608356083660837608386083960840608416084260843608446084560846608476084860849608506085160852608536085460855608566085760858608596086060861608626086360864608656086660867608686086960870608716087260873608746087560876608776087860879608806088160882608836088460885608866088760888608896089060891608926089360894608956089660897608986089960900609016090260903609046090560906609076090860909609106091160912609136091460915609166091760918609196092060921609226092360924609256092660927609286092960930609316093260933609346093560936609376093860939609406094160942609436094460945609466094760948609496095060951609526095360954609556095660957609586095960960609616096260963609646096560966609676096860969609706097160972609736097460975609766097760978609796098060981609826098360984609856098660987609886098960990609916099260993609946099560996609976099860999610006100161002610036100461005610066100761008610096101061011610126101361014610156101661017610186101961020610216102261023610246102561026610276102861029610306103161032610336103461035610366103761038610396104061041610426104361044610456104661047610486104961050610516105261053610546105561056610576105861059610606106161062610636106461065610666106761068610696107061071610726107361074610756107661077610786107961080610816108261083610846108561086610876108861089610906109161092610936109461095610966109761098610996110061101611026110361104611056110661107611086110961110611116111261113611146111561116611176111861119611206112161122611236112461125611266112761128611296113061131611326113361134611356113661137611386113961140611416114261143611446114561146611476114861149611506115161152611536115461155611566115761158611596116061161611626116361164611656116661167611686116961170611716117261173611746117561176611776117861179611806118161182611836118461185611866118761188611896119061191611926119361194611956119661197611986119961200612016120261203612046120561206612076120861209612106121161212612136121461215612166121761218612196122061221612226122361224612256122661227612286122961230612316123261233612346123561236612376123861239612406124161242612436124461245612466124761248612496125061251612526125361254612556125661257612586125961260612616126261263612646126561266612676126861269612706127161272612736127461275612766127761278612796128061281612826128361284612856128661287612886128961290612916129261293612946129561296612976129861299613006130161302613036130461305613066130761308613096131061311613126131361314613156131661317613186131961320613216132261323613246132561326613276132861329613306133161332613336133461335613366133761338613396134061341613426134361344613456134661347613486134961350613516135261353613546135561356613576135861359613606136161362613636136461365613666136761368613696137061371613726137361374613756137661377613786137961380613816138261383613846138561386613876138861389613906139161392613936139461395613966139761398613996140061401614026140361404614056140661407614086140961410614116141261413614146141561416614176141861419614206142161422614236142461425614266142761428614296143061431614326143361434614356143661437614386143961440614416144261443614446144561446614476144861449614506145161452614536145461455614566145761458614596146061461614626146361464614656146661467614686146961470614716147261473614746147561476614776147861479614806148161482614836148461485614866148761488614896149061491614926149361494614956149661497614986149961500615016150261503615046150561506615076150861509615106151161512615136151461515615166151761518615196152061521615226152361524615256152661527615286152961530615316153261533615346153561536615376153861539615406154161542615436154461545615466154761548615496155061551615526155361554615556155661557615586155961560615616156261563615646156561566615676156861569615706157161572615736157461575615766157761578615796158061581615826158361584615856158661587615886158961590615916159261593615946159561596615976159861599616006160161602616036160461605616066160761608616096161061611616126161361614616156161661617616186161961620616216162261623616246162561626616276162861629616306163161632616336163461635616366163761638616396164061641616426164361644616456164661647616486164961650616516165261653616546165561656616576165861659616606166161662616636166461665616666166761668616696167061671616726167361674616756167661677616786167961680616816168261683616846168561686616876168861689616906169161692616936169461695616966169761698616996170061701617026170361704617056170661707617086170961710617116171261713617146171561716617176171861719617206172161722617236172461725617266172761728617296173061731617326173361734617356173661737617386173961740
  1. OZE_Sensor.elf: file format elf32-littlearm
  2. Sections:
  3. Idx Name Size VMA LMA File off Algn
  4. 0 .isr_vector 00000298 08000000 08000000 00001000 2**0
  5. CONTENTS, ALLOC, LOAD, READONLY, DATA
  6. 1 .text 000185c8 080002a0 080002a0 000012a0 2**4
  7. CONTENTS, ALLOC, LOAD, READONLY, CODE
  8. 2 .rodata 000001d4 08018868 08018868 00019868 2**2
  9. CONTENTS, ALLOC, LOAD, READONLY, DATA
  10. 3 .ARM 00000008 08018a3c 08018a3c 00019a3c 2**2
  11. CONTENTS, ALLOC, LOAD, READONLY, DATA
  12. 4 .init_array 00000004 08018a44 08018a44 00019a44 2**2
  13. CONTENTS, ALLOC, LOAD, READONLY, DATA
  14. 5 .fini_array 00000004 08018a48 08018a48 00019a48 2**2
  15. CONTENTS, ALLOC, LOAD, READONLY, DATA
  16. 6 .data 000000a4 24000000 08018a4c 0001a000 2**2
  17. CONTENTS, ALLOC, LOAD, DATA
  18. 7 .bss 00012d20 240000c0 08018af0 0001a0c0 2**5
  19. ALLOC
  20. 8 ._user_heap_stack 00000600 24012de0 08018af0 0001ade0 2**0
  21. ALLOC
  22. 9 .ARM.attributes 0000002e 00000000 00000000 0001a0a4 2**0
  23. CONTENTS, READONLY
  24. 10 .debug_info 00033c84 00000000 00000000 0001a0d2 2**0
  25. CONTENTS, READONLY, DEBUGGING, OCTETS
  26. 11 .debug_abbrev 0000628c 00000000 00000000 0004dd56 2**0
  27. CONTENTS, READONLY, DEBUGGING, OCTETS
  28. 12 .debug_aranges 000024d0 00000000 00000000 00053fe8 2**3
  29. CONTENTS, READONLY, DEBUGGING, OCTETS
  30. 13 .debug_macro 0003f37d 00000000 00000000 000564b8 2**0
  31. CONTENTS, READONLY, DEBUGGING, OCTETS
  32. 14 .debug_line 00030703 00000000 00000000 00095835 2**0
  33. CONTENTS, READONLY, DEBUGGING, OCTETS
  34. 15 .debug_str 00187ded 00000000 00000000 000c5f38 2**0
  35. CONTENTS, READONLY, DEBUGGING, OCTETS
  36. 16 .comment 00000043 00000000 00000000 0024dd25 2**0
  37. CONTENTS, READONLY
  38. 17 .debug_rnglists 00001c5b 00000000 00000000 0024dd68 2**0
  39. CONTENTS, READONLY, DEBUGGING, OCTETS
  40. 18 .debug_frame 0000a2e4 00000000 00000000 0024f9c4 2**2
  41. CONTENTS, READONLY, DEBUGGING, OCTETS
  42. 19 .debug_line_str 00000066 00000000 00000000 00259ca8 2**0
  43. CONTENTS, READONLY, DEBUGGING, OCTETS
  44. Disassembly of section .text:
  45. 080002a0 <__do_global_dtors_aux>:
  46. 80002a0: b510 push {r4, lr}
  47. 80002a2: 4c05 ldr r4, [pc, #20] @ (80002b8 <__do_global_dtors_aux+0x18>)
  48. 80002a4: 7823 ldrb r3, [r4, #0]
  49. 80002a6: b933 cbnz r3, 80002b6 <__do_global_dtors_aux+0x16>
  50. 80002a8: 4b04 ldr r3, [pc, #16] @ (80002bc <__do_global_dtors_aux+0x1c>)
  51. 80002aa: b113 cbz r3, 80002b2 <__do_global_dtors_aux+0x12>
  52. 80002ac: 4804 ldr r0, [pc, #16] @ (80002c0 <__do_global_dtors_aux+0x20>)
  53. 80002ae: f3af 8000 nop.w
  54. 80002b2: 2301 movs r3, #1
  55. 80002b4: 7023 strb r3, [r4, #0]
  56. 80002b6: bd10 pop {r4, pc}
  57. 80002b8: 240000c0 .word 0x240000c0
  58. 80002bc: 00000000 .word 0x00000000
  59. 80002c0: 08018850 .word 0x08018850
  60. 080002c4 <frame_dummy>:
  61. 80002c4: b508 push {r3, lr}
  62. 80002c6: 4b03 ldr r3, [pc, #12] @ (80002d4 <frame_dummy+0x10>)
  63. 80002c8: b11b cbz r3, 80002d2 <frame_dummy+0xe>
  64. 80002ca: 4903 ldr r1, [pc, #12] @ (80002d8 <frame_dummy+0x14>)
  65. 80002cc: 4803 ldr r0, [pc, #12] @ (80002dc <frame_dummy+0x18>)
  66. 80002ce: f3af 8000 nop.w
  67. 80002d2: bd08 pop {r3, pc}
  68. 80002d4: 00000000 .word 0x00000000
  69. 80002d8: 240000c4 .word 0x240000c4
  70. 80002dc: 08018850 .word 0x08018850
  71. 080002e0 <memchr>:
  72. 80002e0: f001 01ff and.w r1, r1, #255 @ 0xff
  73. 80002e4: 2a10 cmp r2, #16
  74. 80002e6: db2b blt.n 8000340 <memchr+0x60>
  75. 80002e8: f010 0f07 tst.w r0, #7
  76. 80002ec: d008 beq.n 8000300 <memchr+0x20>
  77. 80002ee: f810 3b01 ldrb.w r3, [r0], #1
  78. 80002f2: 3a01 subs r2, #1
  79. 80002f4: 428b cmp r3, r1
  80. 80002f6: d02d beq.n 8000354 <memchr+0x74>
  81. 80002f8: f010 0f07 tst.w r0, #7
  82. 80002fc: b342 cbz r2, 8000350 <memchr+0x70>
  83. 80002fe: d1f6 bne.n 80002ee <memchr+0xe>
  84. 8000300: b4f0 push {r4, r5, r6, r7}
  85. 8000302: ea41 2101 orr.w r1, r1, r1, lsl #8
  86. 8000306: ea41 4101 orr.w r1, r1, r1, lsl #16
  87. 800030a: f022 0407 bic.w r4, r2, #7
  88. 800030e: f07f 0700 mvns.w r7, #0
  89. 8000312: 2300 movs r3, #0
  90. 8000314: e8f0 5602 ldrd r5, r6, [r0], #8
  91. 8000318: 3c08 subs r4, #8
  92. 800031a: ea85 0501 eor.w r5, r5, r1
  93. 800031e: ea86 0601 eor.w r6, r6, r1
  94. 8000322: fa85 f547 uadd8 r5, r5, r7
  95. 8000326: faa3 f587 sel r5, r3, r7
  96. 800032a: fa86 f647 uadd8 r6, r6, r7
  97. 800032e: faa5 f687 sel r6, r5, r7
  98. 8000332: b98e cbnz r6, 8000358 <memchr+0x78>
  99. 8000334: d1ee bne.n 8000314 <memchr+0x34>
  100. 8000336: bcf0 pop {r4, r5, r6, r7}
  101. 8000338: f001 01ff and.w r1, r1, #255 @ 0xff
  102. 800033c: f002 0207 and.w r2, r2, #7
  103. 8000340: b132 cbz r2, 8000350 <memchr+0x70>
  104. 8000342: f810 3b01 ldrb.w r3, [r0], #1
  105. 8000346: 3a01 subs r2, #1
  106. 8000348: ea83 0301 eor.w r3, r3, r1
  107. 800034c: b113 cbz r3, 8000354 <memchr+0x74>
  108. 800034e: d1f8 bne.n 8000342 <memchr+0x62>
  109. 8000350: 2000 movs r0, #0
  110. 8000352: 4770 bx lr
  111. 8000354: 3801 subs r0, #1
  112. 8000356: 4770 bx lr
  113. 8000358: 2d00 cmp r5, #0
  114. 800035a: bf06 itte eq
  115. 800035c: 4635 moveq r5, r6
  116. 800035e: 3803 subeq r0, #3
  117. 8000360: 3807 subne r0, #7
  118. 8000362: f015 0f01 tst.w r5, #1
  119. 8000366: d107 bne.n 8000378 <memchr+0x98>
  120. 8000368: 3001 adds r0, #1
  121. 800036a: f415 7f80 tst.w r5, #256 @ 0x100
  122. 800036e: bf02 ittt eq
  123. 8000370: 3001 addeq r0, #1
  124. 8000372: f415 3fc0 tsteq.w r5, #98304 @ 0x18000
  125. 8000376: 3001 addeq r0, #1
  126. 8000378: bcf0 pop {r4, r5, r6, r7}
  127. 800037a: 3801 subs r0, #1
  128. 800037c: 4770 bx lr
  129. 800037e: bf00 nop
  130. 08000380 <__aeabi_uldivmod>:
  131. 8000380: b953 cbnz r3, 8000398 <__aeabi_uldivmod+0x18>
  132. 8000382: b94a cbnz r2, 8000398 <__aeabi_uldivmod+0x18>
  133. 8000384: 2900 cmp r1, #0
  134. 8000386: bf08 it eq
  135. 8000388: 2800 cmpeq r0, #0
  136. 800038a: bf1c itt ne
  137. 800038c: f04f 31ff movne.w r1, #4294967295 @ 0xffffffff
  138. 8000390: f04f 30ff movne.w r0, #4294967295 @ 0xffffffff
  139. 8000394: f000 b96a b.w 800066c <__aeabi_idiv0>
  140. 8000398: f1ad 0c08 sub.w ip, sp, #8
  141. 800039c: e96d ce04 strd ip, lr, [sp, #-16]!
  142. 80003a0: f000 f806 bl 80003b0 <__udivmoddi4>
  143. 80003a4: f8dd e004 ldr.w lr, [sp, #4]
  144. 80003a8: e9dd 2302 ldrd r2, r3, [sp, #8]
  145. 80003ac: b004 add sp, #16
  146. 80003ae: 4770 bx lr
  147. 080003b0 <__udivmoddi4>:
  148. 80003b0: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
  149. 80003b4: 9d08 ldr r5, [sp, #32]
  150. 80003b6: 460c mov r4, r1
  151. 80003b8: 2b00 cmp r3, #0
  152. 80003ba: d14e bne.n 800045a <__udivmoddi4+0xaa>
  153. 80003bc: 4694 mov ip, r2
  154. 80003be: 458c cmp ip, r1
  155. 80003c0: 4686 mov lr, r0
  156. 80003c2: fab2 f282 clz r2, r2
  157. 80003c6: d962 bls.n 800048e <__udivmoddi4+0xde>
  158. 80003c8: b14a cbz r2, 80003de <__udivmoddi4+0x2e>
  159. 80003ca: f1c2 0320 rsb r3, r2, #32
  160. 80003ce: 4091 lsls r1, r2
  161. 80003d0: fa20 f303 lsr.w r3, r0, r3
  162. 80003d4: fa0c fc02 lsl.w ip, ip, r2
  163. 80003d8: 4319 orrs r1, r3
  164. 80003da: fa00 fe02 lsl.w lr, r0, r2
  165. 80003de: ea4f 471c mov.w r7, ip, lsr #16
  166. 80003e2: fa1f f68c uxth.w r6, ip
  167. 80003e6: fbb1 f4f7 udiv r4, r1, r7
  168. 80003ea: ea4f 431e mov.w r3, lr, lsr #16
  169. 80003ee: fb07 1114 mls r1, r7, r4, r1
  170. 80003f2: ea43 4301 orr.w r3, r3, r1, lsl #16
  171. 80003f6: fb04 f106 mul.w r1, r4, r6
  172. 80003fa: 4299 cmp r1, r3
  173. 80003fc: d90a bls.n 8000414 <__udivmoddi4+0x64>
  174. 80003fe: eb1c 0303 adds.w r3, ip, r3
  175. 8000402: f104 30ff add.w r0, r4, #4294967295 @ 0xffffffff
  176. 8000406: f080 8112 bcs.w 800062e <__udivmoddi4+0x27e>
  177. 800040a: 4299 cmp r1, r3
  178. 800040c: f240 810f bls.w 800062e <__udivmoddi4+0x27e>
  179. 8000410: 3c02 subs r4, #2
  180. 8000412: 4463 add r3, ip
  181. 8000414: 1a59 subs r1, r3, r1
  182. 8000416: fa1f f38e uxth.w r3, lr
  183. 800041a: fbb1 f0f7 udiv r0, r1, r7
  184. 800041e: fb07 1110 mls r1, r7, r0, r1
  185. 8000422: ea43 4301 orr.w r3, r3, r1, lsl #16
  186. 8000426: fb00 f606 mul.w r6, r0, r6
  187. 800042a: 429e cmp r6, r3
  188. 800042c: d90a bls.n 8000444 <__udivmoddi4+0x94>
  189. 800042e: eb1c 0303 adds.w r3, ip, r3
  190. 8000432: f100 31ff add.w r1, r0, #4294967295 @ 0xffffffff
  191. 8000436: f080 80fc bcs.w 8000632 <__udivmoddi4+0x282>
  192. 800043a: 429e cmp r6, r3
  193. 800043c: f240 80f9 bls.w 8000632 <__udivmoddi4+0x282>
  194. 8000440: 4463 add r3, ip
  195. 8000442: 3802 subs r0, #2
  196. 8000444: 1b9b subs r3, r3, r6
  197. 8000446: ea40 4004 orr.w r0, r0, r4, lsl #16
  198. 800044a: 2100 movs r1, #0
  199. 800044c: b11d cbz r5, 8000456 <__udivmoddi4+0xa6>
  200. 800044e: 40d3 lsrs r3, r2
  201. 8000450: 2200 movs r2, #0
  202. 8000452: e9c5 3200 strd r3, r2, [r5]
  203. 8000456: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
  204. 800045a: 428b cmp r3, r1
  205. 800045c: d905 bls.n 800046a <__udivmoddi4+0xba>
  206. 800045e: b10d cbz r5, 8000464 <__udivmoddi4+0xb4>
  207. 8000460: e9c5 0100 strd r0, r1, [r5]
  208. 8000464: 2100 movs r1, #0
  209. 8000466: 4608 mov r0, r1
  210. 8000468: e7f5 b.n 8000456 <__udivmoddi4+0xa6>
  211. 800046a: fab3 f183 clz r1, r3
  212. 800046e: 2900 cmp r1, #0
  213. 8000470: d146 bne.n 8000500 <__udivmoddi4+0x150>
  214. 8000472: 42a3 cmp r3, r4
  215. 8000474: d302 bcc.n 800047c <__udivmoddi4+0xcc>
  216. 8000476: 4290 cmp r0, r2
  217. 8000478: f0c0 80f0 bcc.w 800065c <__udivmoddi4+0x2ac>
  218. 800047c: 1a86 subs r6, r0, r2
  219. 800047e: eb64 0303 sbc.w r3, r4, r3
  220. 8000482: 2001 movs r0, #1
  221. 8000484: 2d00 cmp r5, #0
  222. 8000486: d0e6 beq.n 8000456 <__udivmoddi4+0xa6>
  223. 8000488: e9c5 6300 strd r6, r3, [r5]
  224. 800048c: e7e3 b.n 8000456 <__udivmoddi4+0xa6>
  225. 800048e: 2a00 cmp r2, #0
  226. 8000490: f040 8090 bne.w 80005b4 <__udivmoddi4+0x204>
  227. 8000494: eba1 040c sub.w r4, r1, ip
  228. 8000498: ea4f 481c mov.w r8, ip, lsr #16
  229. 800049c: fa1f f78c uxth.w r7, ip
  230. 80004a0: 2101 movs r1, #1
  231. 80004a2: fbb4 f6f8 udiv r6, r4, r8
  232. 80004a6: ea4f 431e mov.w r3, lr, lsr #16
  233. 80004aa: fb08 4416 mls r4, r8, r6, r4
  234. 80004ae: ea43 4304 orr.w r3, r3, r4, lsl #16
  235. 80004b2: fb07 f006 mul.w r0, r7, r6
  236. 80004b6: 4298 cmp r0, r3
  237. 80004b8: d908 bls.n 80004cc <__udivmoddi4+0x11c>
  238. 80004ba: eb1c 0303 adds.w r3, ip, r3
  239. 80004be: f106 34ff add.w r4, r6, #4294967295 @ 0xffffffff
  240. 80004c2: d202 bcs.n 80004ca <__udivmoddi4+0x11a>
  241. 80004c4: 4298 cmp r0, r3
  242. 80004c6: f200 80cd bhi.w 8000664 <__udivmoddi4+0x2b4>
  243. 80004ca: 4626 mov r6, r4
  244. 80004cc: 1a1c subs r4, r3, r0
  245. 80004ce: fa1f f38e uxth.w r3, lr
  246. 80004d2: fbb4 f0f8 udiv r0, r4, r8
  247. 80004d6: fb08 4410 mls r4, r8, r0, r4
  248. 80004da: ea43 4304 orr.w r3, r3, r4, lsl #16
  249. 80004de: fb00 f707 mul.w r7, r0, r7
  250. 80004e2: 429f cmp r7, r3
  251. 80004e4: d908 bls.n 80004f8 <__udivmoddi4+0x148>
  252. 80004e6: eb1c 0303 adds.w r3, ip, r3
  253. 80004ea: f100 34ff add.w r4, r0, #4294967295 @ 0xffffffff
  254. 80004ee: d202 bcs.n 80004f6 <__udivmoddi4+0x146>
  255. 80004f0: 429f cmp r7, r3
  256. 80004f2: f200 80b0 bhi.w 8000656 <__udivmoddi4+0x2a6>
  257. 80004f6: 4620 mov r0, r4
  258. 80004f8: 1bdb subs r3, r3, r7
  259. 80004fa: ea40 4006 orr.w r0, r0, r6, lsl #16
  260. 80004fe: e7a5 b.n 800044c <__udivmoddi4+0x9c>
  261. 8000500: f1c1 0620 rsb r6, r1, #32
  262. 8000504: 408b lsls r3, r1
  263. 8000506: fa22 f706 lsr.w r7, r2, r6
  264. 800050a: 431f orrs r7, r3
  265. 800050c: fa20 fc06 lsr.w ip, r0, r6
  266. 8000510: fa04 f301 lsl.w r3, r4, r1
  267. 8000514: ea43 030c orr.w r3, r3, ip
  268. 8000518: 40f4 lsrs r4, r6
  269. 800051a: fa00 f801 lsl.w r8, r0, r1
  270. 800051e: 0c38 lsrs r0, r7, #16
  271. 8000520: ea4f 4913 mov.w r9, r3, lsr #16
  272. 8000524: fbb4 fef0 udiv lr, r4, r0
  273. 8000528: fa1f fc87 uxth.w ip, r7
  274. 800052c: fb00 441e mls r4, r0, lr, r4
  275. 8000530: ea49 4404 orr.w r4, r9, r4, lsl #16
  276. 8000534: fb0e f90c mul.w r9, lr, ip
  277. 8000538: 45a1 cmp r9, r4
  278. 800053a: fa02 f201 lsl.w r2, r2, r1
  279. 800053e: d90a bls.n 8000556 <__udivmoddi4+0x1a6>
  280. 8000540: 193c adds r4, r7, r4
  281. 8000542: f10e 3aff add.w sl, lr, #4294967295 @ 0xffffffff
  282. 8000546: f080 8084 bcs.w 8000652 <__udivmoddi4+0x2a2>
  283. 800054a: 45a1 cmp r9, r4
  284. 800054c: f240 8081 bls.w 8000652 <__udivmoddi4+0x2a2>
  285. 8000550: f1ae 0e02 sub.w lr, lr, #2
  286. 8000554: 443c add r4, r7
  287. 8000556: eba4 0409 sub.w r4, r4, r9
  288. 800055a: fa1f f983 uxth.w r9, r3
  289. 800055e: fbb4 f3f0 udiv r3, r4, r0
  290. 8000562: fb00 4413 mls r4, r0, r3, r4
  291. 8000566: ea49 4404 orr.w r4, r9, r4, lsl #16
  292. 800056a: fb03 fc0c mul.w ip, r3, ip
  293. 800056e: 45a4 cmp ip, r4
  294. 8000570: d907 bls.n 8000582 <__udivmoddi4+0x1d2>
  295. 8000572: 193c adds r4, r7, r4
  296. 8000574: f103 30ff add.w r0, r3, #4294967295 @ 0xffffffff
  297. 8000578: d267 bcs.n 800064a <__udivmoddi4+0x29a>
  298. 800057a: 45a4 cmp ip, r4
  299. 800057c: d965 bls.n 800064a <__udivmoddi4+0x29a>
  300. 800057e: 3b02 subs r3, #2
  301. 8000580: 443c add r4, r7
  302. 8000582: ea43 400e orr.w r0, r3, lr, lsl #16
  303. 8000586: fba0 9302 umull r9, r3, r0, r2
  304. 800058a: eba4 040c sub.w r4, r4, ip
  305. 800058e: 429c cmp r4, r3
  306. 8000590: 46ce mov lr, r9
  307. 8000592: 469c mov ip, r3
  308. 8000594: d351 bcc.n 800063a <__udivmoddi4+0x28a>
  309. 8000596: d04e beq.n 8000636 <__udivmoddi4+0x286>
  310. 8000598: b155 cbz r5, 80005b0 <__udivmoddi4+0x200>
  311. 800059a: ebb8 030e subs.w r3, r8, lr
  312. 800059e: eb64 040c sbc.w r4, r4, ip
  313. 80005a2: fa04 f606 lsl.w r6, r4, r6
  314. 80005a6: 40cb lsrs r3, r1
  315. 80005a8: 431e orrs r6, r3
  316. 80005aa: 40cc lsrs r4, r1
  317. 80005ac: e9c5 6400 strd r6, r4, [r5]
  318. 80005b0: 2100 movs r1, #0
  319. 80005b2: e750 b.n 8000456 <__udivmoddi4+0xa6>
  320. 80005b4: f1c2 0320 rsb r3, r2, #32
  321. 80005b8: fa20 f103 lsr.w r1, r0, r3
  322. 80005bc: fa0c fc02 lsl.w ip, ip, r2
  323. 80005c0: fa24 f303 lsr.w r3, r4, r3
  324. 80005c4: 4094 lsls r4, r2
  325. 80005c6: 430c orrs r4, r1
  326. 80005c8: ea4f 481c mov.w r8, ip, lsr #16
  327. 80005cc: fa00 fe02 lsl.w lr, r0, r2
  328. 80005d0: fa1f f78c uxth.w r7, ip
  329. 80005d4: fbb3 f0f8 udiv r0, r3, r8
  330. 80005d8: fb08 3110 mls r1, r8, r0, r3
  331. 80005dc: 0c23 lsrs r3, r4, #16
  332. 80005de: ea43 4301 orr.w r3, r3, r1, lsl #16
  333. 80005e2: fb00 f107 mul.w r1, r0, r7
  334. 80005e6: 4299 cmp r1, r3
  335. 80005e8: d908 bls.n 80005fc <__udivmoddi4+0x24c>
  336. 80005ea: eb1c 0303 adds.w r3, ip, r3
  337. 80005ee: f100 36ff add.w r6, r0, #4294967295 @ 0xffffffff
  338. 80005f2: d22c bcs.n 800064e <__udivmoddi4+0x29e>
  339. 80005f4: 4299 cmp r1, r3
  340. 80005f6: d92a bls.n 800064e <__udivmoddi4+0x29e>
  341. 80005f8: 3802 subs r0, #2
  342. 80005fa: 4463 add r3, ip
  343. 80005fc: 1a5b subs r3, r3, r1
  344. 80005fe: b2a4 uxth r4, r4
  345. 8000600: fbb3 f1f8 udiv r1, r3, r8
  346. 8000604: fb08 3311 mls r3, r8, r1, r3
  347. 8000608: ea44 4403 orr.w r4, r4, r3, lsl #16
  348. 800060c: fb01 f307 mul.w r3, r1, r7
  349. 8000610: 42a3 cmp r3, r4
  350. 8000612: d908 bls.n 8000626 <__udivmoddi4+0x276>
  351. 8000614: eb1c 0404 adds.w r4, ip, r4
  352. 8000618: f101 36ff add.w r6, r1, #4294967295 @ 0xffffffff
  353. 800061c: d213 bcs.n 8000646 <__udivmoddi4+0x296>
  354. 800061e: 42a3 cmp r3, r4
  355. 8000620: d911 bls.n 8000646 <__udivmoddi4+0x296>
  356. 8000622: 3902 subs r1, #2
  357. 8000624: 4464 add r4, ip
  358. 8000626: 1ae4 subs r4, r4, r3
  359. 8000628: ea41 4100 orr.w r1, r1, r0, lsl #16
  360. 800062c: e739 b.n 80004a2 <__udivmoddi4+0xf2>
  361. 800062e: 4604 mov r4, r0
  362. 8000630: e6f0 b.n 8000414 <__udivmoddi4+0x64>
  363. 8000632: 4608 mov r0, r1
  364. 8000634: e706 b.n 8000444 <__udivmoddi4+0x94>
  365. 8000636: 45c8 cmp r8, r9
  366. 8000638: d2ae bcs.n 8000598 <__udivmoddi4+0x1e8>
  367. 800063a: ebb9 0e02 subs.w lr, r9, r2
  368. 800063e: eb63 0c07 sbc.w ip, r3, r7
  369. 8000642: 3801 subs r0, #1
  370. 8000644: e7a8 b.n 8000598 <__udivmoddi4+0x1e8>
  371. 8000646: 4631 mov r1, r6
  372. 8000648: e7ed b.n 8000626 <__udivmoddi4+0x276>
  373. 800064a: 4603 mov r3, r0
  374. 800064c: e799 b.n 8000582 <__udivmoddi4+0x1d2>
  375. 800064e: 4630 mov r0, r6
  376. 8000650: e7d4 b.n 80005fc <__udivmoddi4+0x24c>
  377. 8000652: 46d6 mov lr, sl
  378. 8000654: e77f b.n 8000556 <__udivmoddi4+0x1a6>
  379. 8000656: 4463 add r3, ip
  380. 8000658: 3802 subs r0, #2
  381. 800065a: e74d b.n 80004f8 <__udivmoddi4+0x148>
  382. 800065c: 4606 mov r6, r0
  383. 800065e: 4623 mov r3, r4
  384. 8000660: 4608 mov r0, r1
  385. 8000662: e70f b.n 8000484 <__udivmoddi4+0xd4>
  386. 8000664: 3e02 subs r6, #2
  387. 8000666: 4463 add r3, ip
  388. 8000668: e730 b.n 80004cc <__udivmoddi4+0x11c>
  389. 800066a: bf00 nop
  390. 0800066c <__aeabi_idiv0>:
  391. 800066c: 4770 bx lr
  392. 800066e: bf00 nop
  393. 08000670 <vApplicationStackOverflowHook>:
  394. /* Hook prototypes */
  395. void vApplicationStackOverflowHook(xTaskHandle xTask, signed char *pcTaskName);
  396. /* USER CODE BEGIN 4 */
  397. void vApplicationStackOverflowHook(xTaskHandle xTask, signed char *pcTaskName)
  398. {
  399. 8000670: b480 push {r7}
  400. 8000672: b083 sub sp, #12
  401. 8000674: af00 add r7, sp, #0
  402. 8000676: 6078 str r0, [r7, #4]
  403. 8000678: 6039 str r1, [r7, #0]
  404. /* Run time stack overflow checking is performed if
  405. configCHECK_FOR_STACK_OVERFLOW is defined to 1 or 2. This hook function is
  406. called if a stack overflow is detected. */
  407. }
  408. 800067a: bf00 nop
  409. 800067c: 370c adds r7, #12
  410. 800067e: 46bd mov sp, r7
  411. 8000680: f85d 7b04 ldr.w r7, [sp], #4
  412. 8000684: 4770 bx lr
  413. ...
  414. 08000688 <__io_putchar>:
  415. /* USER CODE END PFP */
  416. /* Private user code ---------------------------------------------------------*/
  417. /* USER CODE BEGIN 0 */
  418. int __io_putchar(int ch)
  419. {
  420. 8000688: b580 push {r7, lr}
  421. 800068a: b082 sub sp, #8
  422. 800068c: af00 add r7, sp, #0
  423. 800068e: 6078 str r0, [r7, #4]
  424. #if UART_TASK_LOGS
  425. HAL_UART_Transmit(&huart8, (uint8_t *)&ch, 1, 0xFFFF); // Use UART8 as debug interface
  426. 8000690: 1d39 adds r1, r7, #4
  427. 8000692: f64f 73ff movw r3, #65535 @ 0xffff
  428. 8000696: 2201 movs r2, #1
  429. 8000698: 4803 ldr r0, [pc, #12] @ (80006a8 <__io_putchar+0x20>)
  430. 800069a: f010 f961 bl 8010960 <HAL_UART_Transmit>
  431. // ITM_SendChar(ch); // Use SWV as debug interface
  432. #endif
  433. return ch;
  434. 800069e: 687b ldr r3, [r7, #4]
  435. }
  436. 80006a0: 4618 mov r0, r3
  437. 80006a2: 3708 adds r7, #8
  438. 80006a4: 46bd mov sp, r7
  439. 80006a6: bd80 pop {r7, pc}
  440. 80006a8: 2400057c .word 0x2400057c
  441. 080006ac <HAL_GPIO_EXTI_Callback>:
  442. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
  443. {
  444. 80006ac: b580 push {r7, lr}
  445. 80006ae: b084 sub sp, #16
  446. 80006b0: af00 add r7, sp, #0
  447. 80006b2: 4603 mov r3, r0
  448. 80006b4: 80fb strh r3, [r7, #6]
  449. LimiterSwitchData limiterSwitchData = { 0 };
  450. 80006b6: 2300 movs r3, #0
  451. 80006b8: 60fb str r3, [r7, #12]
  452. limiterSwitchData.gpioPin = GPIO_Pin;
  453. 80006ba: 88fb ldrh r3, [r7, #6]
  454. 80006bc: 81bb strh r3, [r7, #12]
  455. limiterSwitchData.pinState = HAL_GPIO_ReadPin(GPIOD, GPIO_Pin);
  456. 80006be: 88fb ldrh r3, [r7, #6]
  457. 80006c0: 4619 mov r1, r3
  458. 80006c2: 4808 ldr r0, [pc, #32] @ (80006e4 <HAL_GPIO_EXTI_Callback+0x38>)
  459. 80006c4: f00a fa12 bl 800aaec <HAL_GPIO_ReadPin>
  460. 80006c8: 4603 mov r3, r0
  461. 80006ca: 73bb strb r3, [r7, #14]
  462. osMessageQueuePut(limiterSwitchDataQueue, &limiterSwitchData, 0, 0);
  463. 80006cc: 4b06 ldr r3, [pc, #24] @ (80006e8 <HAL_GPIO_EXTI_Callback+0x3c>)
  464. 80006ce: 6818 ldr r0, [r3, #0]
  465. 80006d0: f107 010c add.w r1, r7, #12
  466. 80006d4: 2300 movs r3, #0
  467. 80006d6: 2200 movs r2, #0
  468. 80006d8: f013 faf8 bl 8013ccc <osMessageQueuePut>
  469. }
  470. 80006dc: bf00 nop
  471. 80006de: 3710 adds r7, #16
  472. 80006e0: 46bd mov sp, r7
  473. 80006e2: bd80 pop {r7, pc}
  474. 80006e4: 58020c00 .word 0x58020c00
  475. 80006e8: 240007d4 .word 0x240007d4
  476. 080006ec <main>:
  477. /**
  478. * @brief The application entry point.
  479. * @retval int
  480. */
  481. int main(void)
  482. {
  483. 80006ec: b580 push {r7, lr}
  484. 80006ee: b084 sub sp, #16
  485. 80006f0: af00 add r7, sp, #0
  486. /* USER CODE BEGIN 1 */
  487. /* USER CODE END 1 */
  488. /* MPU Configuration--------------------------------------------------------*/
  489. MPU_Config();
  490. 80006f2: f001 fadd bl 8001cb0 <MPU_Config>
  491. \details Turns on I-Cache
  492. */
  493. __STATIC_FORCEINLINE void SCB_EnableICache (void)
  494. {
  495. #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)
  496. if (SCB->CCR & SCB_CCR_IC_Msk) return; /* return if ICache is already enabled */
  497. 80006f6: 4b5e ldr r3, [pc, #376] @ (8000870 <main+0x184>)
  498. 80006f8: 695b ldr r3, [r3, #20]
  499. 80006fa: f403 3300 and.w r3, r3, #131072 @ 0x20000
  500. 80006fe: 2b00 cmp r3, #0
  501. 8000700: d11b bne.n 800073a <main+0x4e>
  502. \details Acts as a special kind of Data Memory Barrier.
  503. It completes when all explicit memory accesses before this instruction complete.
  504. */
  505. __STATIC_FORCEINLINE void __DSB(void)
  506. {
  507. __ASM volatile ("dsb 0xF":::"memory");
  508. 8000702: f3bf 8f4f dsb sy
  509. }
  510. 8000706: bf00 nop
  511. __ASM volatile ("isb 0xF":::"memory");
  512. 8000708: f3bf 8f6f isb sy
  513. }
  514. 800070c: bf00 nop
  515. __DSB();
  516. __ISB();
  517. SCB->ICIALLU = 0UL; /* invalidate I-Cache */
  518. 800070e: 4b58 ldr r3, [pc, #352] @ (8000870 <main+0x184>)
  519. 8000710: 2200 movs r2, #0
  520. 8000712: f8c3 2250 str.w r2, [r3, #592] @ 0x250
  521. __ASM volatile ("dsb 0xF":::"memory");
  522. 8000716: f3bf 8f4f dsb sy
  523. }
  524. 800071a: bf00 nop
  525. __ASM volatile ("isb 0xF":::"memory");
  526. 800071c: f3bf 8f6f isb sy
  527. }
  528. 8000720: bf00 nop
  529. __DSB();
  530. __ISB();
  531. SCB->CCR |= (uint32_t)SCB_CCR_IC_Msk; /* enable I-Cache */
  532. 8000722: 4b53 ldr r3, [pc, #332] @ (8000870 <main+0x184>)
  533. 8000724: 695b ldr r3, [r3, #20]
  534. 8000726: 4a52 ldr r2, [pc, #328] @ (8000870 <main+0x184>)
  535. 8000728: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  536. 800072c: 6153 str r3, [r2, #20]
  537. __ASM volatile ("dsb 0xF":::"memory");
  538. 800072e: f3bf 8f4f dsb sy
  539. }
  540. 8000732: bf00 nop
  541. __ASM volatile ("isb 0xF":::"memory");
  542. 8000734: f3bf 8f6f isb sy
  543. }
  544. 8000738: e000 b.n 800073c <main+0x50>
  545. if (SCB->CCR & SCB_CCR_IC_Msk) return; /* return if ICache is already enabled */
  546. 800073a: bf00 nop
  547. #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)
  548. uint32_t ccsidr;
  549. uint32_t sets;
  550. uint32_t ways;
  551. if (SCB->CCR & SCB_CCR_DC_Msk) return; /* return if DCache is already enabled */
  552. 800073c: 4b4c ldr r3, [pc, #304] @ (8000870 <main+0x184>)
  553. 800073e: 695b ldr r3, [r3, #20]
  554. 8000740: f403 3380 and.w r3, r3, #65536 @ 0x10000
  555. 8000744: 2b00 cmp r3, #0
  556. 8000746: d138 bne.n 80007ba <main+0xce>
  557. SCB->CSSELR = 0U; /* select Level 1 data cache */
  558. 8000748: 4b49 ldr r3, [pc, #292] @ (8000870 <main+0x184>)
  559. 800074a: 2200 movs r2, #0
  560. 800074c: f8c3 2084 str.w r2, [r3, #132] @ 0x84
  561. __ASM volatile ("dsb 0xF":::"memory");
  562. 8000750: f3bf 8f4f dsb sy
  563. }
  564. 8000754: bf00 nop
  565. __DSB();
  566. ccsidr = SCB->CCSIDR;
  567. 8000756: 4b46 ldr r3, [pc, #280] @ (8000870 <main+0x184>)
  568. 8000758: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  569. 800075c: 60fb str r3, [r7, #12]
  570. /* invalidate D-Cache */
  571. sets = (uint32_t)(CCSIDR_SETS(ccsidr));
  572. 800075e: 68fb ldr r3, [r7, #12]
  573. 8000760: 0b5b lsrs r3, r3, #13
  574. 8000762: f3c3 030e ubfx r3, r3, #0, #15
  575. 8000766: 60bb str r3, [r7, #8]
  576. do {
  577. ways = (uint32_t)(CCSIDR_WAYS(ccsidr));
  578. 8000768: 68fb ldr r3, [r7, #12]
  579. 800076a: 08db lsrs r3, r3, #3
  580. 800076c: f3c3 0309 ubfx r3, r3, #0, #10
  581. 8000770: 607b str r3, [r7, #4]
  582. do {
  583. SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) |
  584. 8000772: 68bb ldr r3, [r7, #8]
  585. 8000774: 015a lsls r2, r3, #5
  586. 8000776: f643 73e0 movw r3, #16352 @ 0x3fe0
  587. 800077a: 4013 ands r3, r2
  588. ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk) );
  589. 800077c: 687a ldr r2, [r7, #4]
  590. 800077e: 0792 lsls r2, r2, #30
  591. SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) |
  592. 8000780: 493b ldr r1, [pc, #236] @ (8000870 <main+0x184>)
  593. 8000782: 4313 orrs r3, r2
  594. 8000784: f8c1 3260 str.w r3, [r1, #608] @ 0x260
  595. #if defined ( __CC_ARM )
  596. __schedule_barrier();
  597. #endif
  598. } while (ways-- != 0U);
  599. 8000788: 687b ldr r3, [r7, #4]
  600. 800078a: 1e5a subs r2, r3, #1
  601. 800078c: 607a str r2, [r7, #4]
  602. 800078e: 2b00 cmp r3, #0
  603. 8000790: d1ef bne.n 8000772 <main+0x86>
  604. } while(sets-- != 0U);
  605. 8000792: 68bb ldr r3, [r7, #8]
  606. 8000794: 1e5a subs r2, r3, #1
  607. 8000796: 60ba str r2, [r7, #8]
  608. 8000798: 2b00 cmp r3, #0
  609. 800079a: d1e5 bne.n 8000768 <main+0x7c>
  610. __ASM volatile ("dsb 0xF":::"memory");
  611. 800079c: f3bf 8f4f dsb sy
  612. }
  613. 80007a0: bf00 nop
  614. __DSB();
  615. SCB->CCR |= (uint32_t)SCB_CCR_DC_Msk; /* enable D-Cache */
  616. 80007a2: 4b33 ldr r3, [pc, #204] @ (8000870 <main+0x184>)
  617. 80007a4: 695b ldr r3, [r3, #20]
  618. 80007a6: 4a32 ldr r2, [pc, #200] @ (8000870 <main+0x184>)
  619. 80007a8: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  620. 80007ac: 6153 str r3, [r2, #20]
  621. __ASM volatile ("dsb 0xF":::"memory");
  622. 80007ae: f3bf 8f4f dsb sy
  623. }
  624. 80007b2: bf00 nop
  625. __ASM volatile ("isb 0xF":::"memory");
  626. 80007b4: f3bf 8f6f isb sy
  627. }
  628. 80007b8: e000 b.n 80007bc <main+0xd0>
  629. if (SCB->CCR & SCB_CCR_DC_Msk) return; /* return if DCache is already enabled */
  630. 80007ba: bf00 nop
  631. SCB_EnableDCache();
  632. /* MCU Configuration--------------------------------------------------------*/
  633. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  634. HAL_Init();
  635. 80007bc: f004 fdbe bl 800533c <HAL_Init>
  636. /* USER CODE BEGIN Init */
  637. /* USER CODE END Init */
  638. /* Configure the system clock */
  639. SystemClock_Config();
  640. 80007c0: f000 f876 bl 80008b0 <SystemClock_Config>
  641. /* Configure the peripherals common clocks */
  642. PeriphCommonClock_Config();
  643. 80007c4: f000 f8f0 bl 80009a8 <PeriphCommonClock_Config>
  644. /* USER CODE BEGIN SysInit */
  645. /* USER CODE END SysInit */
  646. /* Initialize all configured peripherals */
  647. MX_GPIO_Init();
  648. 80007c8: f000 ff06 bl 80015d8 <MX_GPIO_Init>
  649. MX_DMA_Init();
  650. 80007cc: f000 fed4 bl 8001578 <MX_DMA_Init>
  651. MX_RNG_Init();
  652. 80007d0: f000 fbdc bl 8000f8c <MX_RNG_Init>
  653. MX_USART1_UART_Init();
  654. 80007d4: f000 fe80 bl 80014d8 <MX_USART1_UART_Init>
  655. MX_ADC1_Init();
  656. 80007d8: f000 f916 bl 8000a08 <MX_ADC1_Init>
  657. MX_UART8_Init();
  658. 80007dc: f000 fe30 bl 8001440 <MX_UART8_Init>
  659. MX_CRC_Init();
  660. 80007e0: f000 fb6e bl 8000ec0 <MX_CRC_Init>
  661. MX_ADC2_Init();
  662. 80007e4: f000 f9fa bl 8000bdc <MX_ADC2_Init>
  663. MX_ADC3_Init();
  664. 80007e8: f000 fa8c bl 8000d04 <MX_ADC3_Init>
  665. MX_TIM2_Init();
  666. 80007ec: f000 fc80 bl 80010f0 <MX_TIM2_Init>
  667. MX_TIM1_Init();
  668. 80007f0: f000 fbe2 bl 8000fb8 <MX_TIM1_Init>
  669. MX_TIM3_Init();
  670. 80007f4: f000 fcfa bl 80011ec <MX_TIM3_Init>
  671. MX_DAC1_Init();
  672. 80007f8: f000 fb8c bl 8000f14 <MX_DAC1_Init>
  673. MX_COMP1_Init();
  674. 80007fc: f000 fb32 bl 8000e64 <MX_COMP1_Init>
  675. MX_TIM4_Init();
  676. 8000800: f000 fda0 bl 8001344 <MX_TIM4_Init>
  677. /* USER CODE BEGIN 2 */
  678. /* USER CODE END 2 */
  679. /* Init scheduler */
  680. osKernelInitialize();
  681. 8000804: f012 fef2 bl 80135ec <osKernelInitialize>
  682. /* add semaphores, ... */
  683. /* USER CODE END RTOS_SEMAPHORES */
  684. /* Create the timer(s) */
  685. /* creation of debugLedTimer */
  686. debugLedTimerHandle = osTimerNew(debugLedTimerCallback, osTimerOnce, NULL, &debugLedTimer_attributes);
  687. 8000808: 4b1a ldr r3, [pc, #104] @ (8000874 <main+0x188>)
  688. 800080a: 2200 movs r2, #0
  689. 800080c: 2100 movs r1, #0
  690. 800080e: 481a ldr r0, [pc, #104] @ (8000878 <main+0x18c>)
  691. 8000810: f012 fffa bl 8013808 <osTimerNew>
  692. 8000814: 4603 mov r3, r0
  693. 8000816: 4a19 ldr r2, [pc, #100] @ (800087c <main+0x190>)
  694. 8000818: 6013 str r3, [r2, #0]
  695. /* creation of fanTimer */
  696. fanTimerHandle = osTimerNew(fanTimerCallback, osTimerOnce, NULL, &fanTimer_attributes);
  697. 800081a: 4b19 ldr r3, [pc, #100] @ (8000880 <main+0x194>)
  698. 800081c: 2200 movs r2, #0
  699. 800081e: 2100 movs r1, #0
  700. 8000820: 4818 ldr r0, [pc, #96] @ (8000884 <main+0x198>)
  701. 8000822: f012 fff1 bl 8013808 <osTimerNew>
  702. 8000826: 4603 mov r3, r0
  703. 8000828: 4a17 ldr r2, [pc, #92] @ (8000888 <main+0x19c>)
  704. 800082a: 6013 str r3, [r2, #0]
  705. /* creation of motorXTimer */
  706. motorXTimerHandle = osTimerNew(motorXTimerCallback, osTimerPeriodic, NULL, &motorXTimer_attributes);
  707. 800082c: 4b17 ldr r3, [pc, #92] @ (800088c <main+0x1a0>)
  708. 800082e: 2200 movs r2, #0
  709. 8000830: 2101 movs r1, #1
  710. 8000832: 4817 ldr r0, [pc, #92] @ (8000890 <main+0x1a4>)
  711. 8000834: f012 ffe8 bl 8013808 <osTimerNew>
  712. 8000838: 4603 mov r3, r0
  713. 800083a: 4a16 ldr r2, [pc, #88] @ (8000894 <main+0x1a8>)
  714. 800083c: 6013 str r3, [r2, #0]
  715. /* creation of motorYTimer */
  716. motorYTimerHandle = osTimerNew(motorYTimerCallback, osTimerPeriodic, NULL, &motorYTimer_attributes);
  717. 800083e: 4b16 ldr r3, [pc, #88] @ (8000898 <main+0x1ac>)
  718. 8000840: 2200 movs r2, #0
  719. 8000842: 2101 movs r1, #1
  720. 8000844: 4815 ldr r0, [pc, #84] @ (800089c <main+0x1b0>)
  721. 8000846: f012 ffdf bl 8013808 <osTimerNew>
  722. 800084a: 4603 mov r3, r0
  723. 800084c: 4a14 ldr r2, [pc, #80] @ (80008a0 <main+0x1b4>)
  724. 800084e: 6013 str r3, [r2, #0]
  725. /* add queues, ... */
  726. /* USER CODE END RTOS_QUEUES */
  727. /* Create the thread(s) */
  728. /* creation of defaultTask */
  729. defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes);
  730. 8000850: 4a14 ldr r2, [pc, #80] @ (80008a4 <main+0x1b8>)
  731. 8000852: 2100 movs r1, #0
  732. 8000854: 4814 ldr r0, [pc, #80] @ (80008a8 <main+0x1bc>)
  733. 8000856: f012 ff13 bl 8013680 <osThreadNew>
  734. 800085a: 4603 mov r3, r0
  735. 800085c: 4a13 ldr r2, [pc, #76] @ (80008ac <main+0x1c0>)
  736. 800085e: 6013 str r3, [r2, #0]
  737. /* USER CODE BEGIN RTOS_THREADS */
  738. /* add threads, ... */
  739. // Uart8TasksInit();
  740. UartTasksInit();
  741. 8000860: f003 fcc8 bl 80041f4 <UartTasksInit>
  742. #ifdef USER_MOCKS
  743. MockMeasurmetsTaskInit();
  744. #else
  745. MeasTasksInit();
  746. 8000864: f001 fada bl 8001e1c <MeasTasksInit>
  747. /* USER CODE BEGIN RTOS_EVENTS */
  748. /* add events, ... */
  749. /* USER CODE END RTOS_EVENTS */
  750. /* Start scheduler */
  751. osKernelStart();
  752. 8000868: f012 fee4 bl 8013634 <osKernelStart>
  753. /* We should never get here as control is now taken by the scheduler */
  754. /* Infinite loop */
  755. /* USER CODE BEGIN WHILE */
  756. while (1)
  757. 800086c: bf00 nop
  758. 800086e: e7fd b.n 800086c <main+0x180>
  759. 8000870: e000ed00 .word 0xe000ed00
  760. 8000874: 08018988 .word 0x08018988
  761. 8000878: 08001c05 .word 0x08001c05
  762. 800087c: 240006a8 .word 0x240006a8
  763. 8000880: 08018998 .word 0x08018998
  764. 8000884: 08001c1d .word 0x08001c1d
  765. 8000888: 240006d8 .word 0x240006d8
  766. 800088c: 080189a8 .word 0x080189a8
  767. 8000890: 08001c39 .word 0x08001c39
  768. 8000894: 24000708 .word 0x24000708
  769. 8000898: 080189b8 .word 0x080189b8
  770. 800089c: 08001c75 .word 0x08001c75
  771. 80008a0: 24000738 .word 0x24000738
  772. 80008a4: 08018964 .word 0x08018964
  773. 80008a8: 08001a75 .word 0x08001a75
  774. 80008ac: 240006a4 .word 0x240006a4
  775. 080008b0 <SystemClock_Config>:
  776. /**
  777. * @brief System Clock Configuration
  778. * @retval None
  779. */
  780. void SystemClock_Config(void)
  781. {
  782. 80008b0: b580 push {r7, lr}
  783. 80008b2: b09c sub sp, #112 @ 0x70
  784. 80008b4: af00 add r7, sp, #0
  785. RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  786. 80008b6: f107 0324 add.w r3, r7, #36 @ 0x24
  787. 80008ba: 224c movs r2, #76 @ 0x4c
  788. 80008bc: 2100 movs r1, #0
  789. 80008be: 4618 mov r0, r3
  790. 80008c0: f017 f949 bl 8017b56 <memset>
  791. RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  792. 80008c4: 1d3b adds r3, r7, #4
  793. 80008c6: 2220 movs r2, #32
  794. 80008c8: 2100 movs r1, #0
  795. 80008ca: 4618 mov r0, r3
  796. 80008cc: f017 f943 bl 8017b56 <memset>
  797. /** Supply configuration update enable
  798. */
  799. HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY);
  800. 80008d0: 2002 movs r0, #2
  801. 80008d2: f00a f9fb bl 800accc <HAL_PWREx_ConfigSupply>
  802. /** Configure the main internal regulator output voltage
  803. */
  804. __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
  805. 80008d6: 2300 movs r3, #0
  806. 80008d8: 603b str r3, [r7, #0]
  807. 80008da: 4b31 ldr r3, [pc, #196] @ (80009a0 <SystemClock_Config+0xf0>)
  808. 80008dc: 6adb ldr r3, [r3, #44] @ 0x2c
  809. 80008de: 4a30 ldr r2, [pc, #192] @ (80009a0 <SystemClock_Config+0xf0>)
  810. 80008e0: f023 0301 bic.w r3, r3, #1
  811. 80008e4: 62d3 str r3, [r2, #44] @ 0x2c
  812. 80008e6: 4b2e ldr r3, [pc, #184] @ (80009a0 <SystemClock_Config+0xf0>)
  813. 80008e8: 6adb ldr r3, [r3, #44] @ 0x2c
  814. 80008ea: f003 0301 and.w r3, r3, #1
  815. 80008ee: 603b str r3, [r7, #0]
  816. 80008f0: 4b2c ldr r3, [pc, #176] @ (80009a4 <SystemClock_Config+0xf4>)
  817. 80008f2: 699b ldr r3, [r3, #24]
  818. 80008f4: 4a2b ldr r2, [pc, #172] @ (80009a4 <SystemClock_Config+0xf4>)
  819. 80008f6: f443 4340 orr.w r3, r3, #49152 @ 0xc000
  820. 80008fa: 6193 str r3, [r2, #24]
  821. 80008fc: 4b29 ldr r3, [pc, #164] @ (80009a4 <SystemClock_Config+0xf4>)
  822. 80008fe: 699b ldr r3, [r3, #24]
  823. 8000900: f403 4340 and.w r3, r3, #49152 @ 0xc000
  824. 8000904: 603b str r3, [r7, #0]
  825. 8000906: 683b ldr r3, [r7, #0]
  826. while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}
  827. 8000908: bf00 nop
  828. 800090a: 4b26 ldr r3, [pc, #152] @ (80009a4 <SystemClock_Config+0xf4>)
  829. 800090c: 699b ldr r3, [r3, #24]
  830. 800090e: f403 5300 and.w r3, r3, #8192 @ 0x2000
  831. 8000912: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  832. 8000916: d1f8 bne.n 800090a <SystemClock_Config+0x5a>
  833. /** Initializes the RCC Oscillators according to the specified parameters
  834. * in the RCC_OscInitTypeDef structure.
  835. */
  836. RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48|RCC_OSCILLATORTYPE_HSE;
  837. 8000918: 2321 movs r3, #33 @ 0x21
  838. 800091a: 627b str r3, [r7, #36] @ 0x24
  839. RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  840. 800091c: f44f 3380 mov.w r3, #65536 @ 0x10000
  841. 8000920: 62bb str r3, [r7, #40] @ 0x28
  842. RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
  843. 8000922: 2301 movs r3, #1
  844. 8000924: 63fb str r3, [r7, #60] @ 0x3c
  845. RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  846. 8000926: 2302 movs r3, #2
  847. 8000928: 64bb str r3, [r7, #72] @ 0x48
  848. RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  849. 800092a: 2302 movs r3, #2
  850. 800092c: 64fb str r3, [r7, #76] @ 0x4c
  851. RCC_OscInitStruct.PLL.PLLM = 5;
  852. 800092e: 2305 movs r3, #5
  853. 8000930: 653b str r3, [r7, #80] @ 0x50
  854. RCC_OscInitStruct.PLL.PLLN = 160;
  855. 8000932: 23a0 movs r3, #160 @ 0xa0
  856. 8000934: 657b str r3, [r7, #84] @ 0x54
  857. RCC_OscInitStruct.PLL.PLLP = 2;
  858. 8000936: 2302 movs r3, #2
  859. 8000938: 65bb str r3, [r7, #88] @ 0x58
  860. RCC_OscInitStruct.PLL.PLLQ = 2;
  861. 800093a: 2302 movs r3, #2
  862. 800093c: 65fb str r3, [r7, #92] @ 0x5c
  863. RCC_OscInitStruct.PLL.PLLR = 2;
  864. 800093e: 2302 movs r3, #2
  865. 8000940: 663b str r3, [r7, #96] @ 0x60
  866. RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2;
  867. 8000942: 2308 movs r3, #8
  868. 8000944: 667b str r3, [r7, #100] @ 0x64
  869. RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;
  870. 8000946: 2300 movs r3, #0
  871. 8000948: 66bb str r3, [r7, #104] @ 0x68
  872. RCC_OscInitStruct.PLL.PLLFRACN = 0;
  873. 800094a: 2300 movs r3, #0
  874. 800094c: 66fb str r3, [r7, #108] @ 0x6c
  875. if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  876. 800094e: f107 0324 add.w r3, r7, #36 @ 0x24
  877. 8000952: 4618 mov r0, r3
  878. 8000954: f00a fa7a bl 800ae4c <HAL_RCC_OscConfig>
  879. 8000958: 4603 mov r3, r0
  880. 800095a: 2b00 cmp r3, #0
  881. 800095c: d001 beq.n 8000962 <SystemClock_Config+0xb2>
  882. {
  883. Error_Handler();
  884. 800095e: f001 fa57 bl 8001e10 <Error_Handler>
  885. }
  886. /** Initializes the CPU, AHB and APB buses clocks
  887. */
  888. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  889. 8000962: 233f movs r3, #63 @ 0x3f
  890. 8000964: 607b str r3, [r7, #4]
  891. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2
  892. |RCC_CLOCKTYPE_D3PCLK1|RCC_CLOCKTYPE_D1PCLK1;
  893. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  894. 8000966: 2303 movs r3, #3
  895. 8000968: 60bb str r3, [r7, #8]
  896. RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;
  897. 800096a: 2300 movs r3, #0
  898. 800096c: 60fb str r3, [r7, #12]
  899. RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2;
  900. 800096e: 2308 movs r3, #8
  901. 8000970: 613b str r3, [r7, #16]
  902. RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2;
  903. 8000972: 2340 movs r3, #64 @ 0x40
  904. 8000974: 617b str r3, [r7, #20]
  905. RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2;
  906. 8000976: 2340 movs r3, #64 @ 0x40
  907. 8000978: 61bb str r3, [r7, #24]
  908. RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;
  909. 800097a: f44f 6380 mov.w r3, #1024 @ 0x400
  910. 800097e: 61fb str r3, [r7, #28]
  911. RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;
  912. 8000980: 2340 movs r3, #64 @ 0x40
  913. 8000982: 623b str r3, [r7, #32]
  914. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  915. 8000984: 1d3b adds r3, r7, #4
  916. 8000986: 2102 movs r1, #2
  917. 8000988: 4618 mov r0, r3
  918. 800098a: f00a feb9 bl 800b700 <HAL_RCC_ClockConfig>
  919. 800098e: 4603 mov r3, r0
  920. 8000990: 2b00 cmp r3, #0
  921. 8000992: d001 beq.n 8000998 <SystemClock_Config+0xe8>
  922. {
  923. Error_Handler();
  924. 8000994: f001 fa3c bl 8001e10 <Error_Handler>
  925. }
  926. }
  927. 8000998: bf00 nop
  928. 800099a: 3770 adds r7, #112 @ 0x70
  929. 800099c: 46bd mov sp, r7
  930. 800099e: bd80 pop {r7, pc}
  931. 80009a0: 58000400 .word 0x58000400
  932. 80009a4: 58024800 .word 0x58024800
  933. 080009a8 <PeriphCommonClock_Config>:
  934. /**
  935. * @brief Peripherals Common Clock Configuration
  936. * @retval None
  937. */
  938. void PeriphCommonClock_Config(void)
  939. {
  940. 80009a8: b580 push {r7, lr}
  941. 80009aa: b0b0 sub sp, #192 @ 0xc0
  942. 80009ac: af00 add r7, sp, #0
  943. RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
  944. 80009ae: 463b mov r3, r7
  945. 80009b0: 22c0 movs r2, #192 @ 0xc0
  946. 80009b2: 2100 movs r1, #0
  947. 80009b4: 4618 mov r0, r3
  948. 80009b6: f017 f8ce bl 8017b56 <memset>
  949. /** Initializes the peripherals clock
  950. */
  951. PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_ADC;
  952. 80009ba: f44f 2200 mov.w r2, #524288 @ 0x80000
  953. 80009be: f04f 0300 mov.w r3, #0
  954. 80009c2: e9c7 2300 strd r2, r3, [r7]
  955. PeriphClkInitStruct.PLL2.PLL2M = 5;
  956. 80009c6: 2305 movs r3, #5
  957. 80009c8: 60bb str r3, [r7, #8]
  958. PeriphClkInitStruct.PLL2.PLL2N = 52;
  959. 80009ca: 2334 movs r3, #52 @ 0x34
  960. 80009cc: 60fb str r3, [r7, #12]
  961. PeriphClkInitStruct.PLL2.PLL2P = 26;
  962. 80009ce: 231a movs r3, #26
  963. 80009d0: 613b str r3, [r7, #16]
  964. PeriphClkInitStruct.PLL2.PLL2Q = 2;
  965. 80009d2: 2302 movs r3, #2
  966. 80009d4: 617b str r3, [r7, #20]
  967. PeriphClkInitStruct.PLL2.PLL2R = 2;
  968. 80009d6: 2302 movs r3, #2
  969. 80009d8: 61bb str r3, [r7, #24]
  970. PeriphClkInitStruct.PLL2.PLL2RGE = RCC_PLL2VCIRANGE_2;
  971. 80009da: 2380 movs r3, #128 @ 0x80
  972. 80009dc: 61fb str r3, [r7, #28]
  973. PeriphClkInitStruct.PLL2.PLL2VCOSEL = RCC_PLL2VCOWIDE;
  974. 80009de: 2300 movs r3, #0
  975. 80009e0: 623b str r3, [r7, #32]
  976. PeriphClkInitStruct.PLL2.PLL2FRACN = 0;
  977. 80009e2: 2300 movs r3, #0
  978. 80009e4: 627b str r3, [r7, #36] @ 0x24
  979. PeriphClkInitStruct.AdcClockSelection = RCC_ADCCLKSOURCE_PLL2;
  980. 80009e6: 2300 movs r3, #0
  981. 80009e8: f8c7 30a4 str.w r3, [r7, #164] @ 0xa4
  982. if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
  983. 80009ec: 463b mov r3, r7
  984. 80009ee: 4618 mov r0, r3
  985. 80009f0: f00b fa54 bl 800be9c <HAL_RCCEx_PeriphCLKConfig>
  986. 80009f4: 4603 mov r3, r0
  987. 80009f6: 2b00 cmp r3, #0
  988. 80009f8: d001 beq.n 80009fe <PeriphCommonClock_Config+0x56>
  989. {
  990. Error_Handler();
  991. 80009fa: f001 fa09 bl 8001e10 <Error_Handler>
  992. }
  993. }
  994. 80009fe: bf00 nop
  995. 8000a00: 37c0 adds r7, #192 @ 0xc0
  996. 8000a02: 46bd mov sp, r7
  997. 8000a04: bd80 pop {r7, pc}
  998. ...
  999. 08000a08 <MX_ADC1_Init>:
  1000. * @brief ADC1 Initialization Function
  1001. * @param None
  1002. * @retval None
  1003. */
  1004. static void MX_ADC1_Init(void)
  1005. {
  1006. 8000a08: b580 push {r7, lr}
  1007. 8000a0a: b08a sub sp, #40 @ 0x28
  1008. 8000a0c: af00 add r7, sp, #0
  1009. /* USER CODE BEGIN ADC1_Init 0 */
  1010. /* USER CODE END ADC1_Init 0 */
  1011. ADC_MultiModeTypeDef multimode = {0};
  1012. 8000a0e: f107 031c add.w r3, r7, #28
  1013. 8000a12: 2200 movs r2, #0
  1014. 8000a14: 601a str r2, [r3, #0]
  1015. 8000a16: 605a str r2, [r3, #4]
  1016. 8000a18: 609a str r2, [r3, #8]
  1017. ADC_ChannelConfTypeDef sConfig = {0};
  1018. 8000a1a: 463b mov r3, r7
  1019. 8000a1c: 2200 movs r2, #0
  1020. 8000a1e: 601a str r2, [r3, #0]
  1021. 8000a20: 605a str r2, [r3, #4]
  1022. 8000a22: 609a str r2, [r3, #8]
  1023. 8000a24: 60da str r2, [r3, #12]
  1024. 8000a26: 611a str r2, [r3, #16]
  1025. 8000a28: 615a str r2, [r3, #20]
  1026. 8000a2a: 619a str r2, [r3, #24]
  1027. /* USER CODE END ADC1_Init 1 */
  1028. /** Common config
  1029. */
  1030. hadc1.Instance = ADC1;
  1031. 8000a2c: 4b62 ldr r3, [pc, #392] @ (8000bb8 <MX_ADC1_Init+0x1b0>)
  1032. 8000a2e: 4a63 ldr r2, [pc, #396] @ (8000bbc <MX_ADC1_Init+0x1b4>)
  1033. 8000a30: 601a str r2, [r3, #0]
  1034. hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
  1035. 8000a32: 4b61 ldr r3, [pc, #388] @ (8000bb8 <MX_ADC1_Init+0x1b0>)
  1036. 8000a34: 2200 movs r2, #0
  1037. 8000a36: 605a str r2, [r3, #4]
  1038. hadc1.Init.Resolution = ADC_RESOLUTION_16B;
  1039. 8000a38: 4b5f ldr r3, [pc, #380] @ (8000bb8 <MX_ADC1_Init+0x1b0>)
  1040. 8000a3a: 2200 movs r2, #0
  1041. 8000a3c: 609a str r2, [r3, #8]
  1042. hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
  1043. 8000a3e: 4b5e ldr r3, [pc, #376] @ (8000bb8 <MX_ADC1_Init+0x1b0>)
  1044. 8000a40: 2201 movs r2, #1
  1045. 8000a42: 60da str r2, [r3, #12]
  1046. hadc1.Init.EOCSelection = ADC_EOC_SEQ_CONV;
  1047. 8000a44: 4b5c ldr r3, [pc, #368] @ (8000bb8 <MX_ADC1_Init+0x1b0>)
  1048. 8000a46: 2208 movs r2, #8
  1049. 8000a48: 611a str r2, [r3, #16]
  1050. hadc1.Init.LowPowerAutoWait = DISABLE;
  1051. 8000a4a: 4b5b ldr r3, [pc, #364] @ (8000bb8 <MX_ADC1_Init+0x1b0>)
  1052. 8000a4c: 2200 movs r2, #0
  1053. 8000a4e: 751a strb r2, [r3, #20]
  1054. hadc1.Init.ContinuousConvMode = ENABLE;
  1055. 8000a50: 4b59 ldr r3, [pc, #356] @ (8000bb8 <MX_ADC1_Init+0x1b0>)
  1056. 8000a52: 2201 movs r2, #1
  1057. 8000a54: 755a strb r2, [r3, #21]
  1058. hadc1.Init.NbrOfConversion = 7;
  1059. 8000a56: 4b58 ldr r3, [pc, #352] @ (8000bb8 <MX_ADC1_Init+0x1b0>)
  1060. 8000a58: 2207 movs r2, #7
  1061. 8000a5a: 619a str r2, [r3, #24]
  1062. hadc1.Init.DiscontinuousConvMode = DISABLE;
  1063. 8000a5c: 4b56 ldr r3, [pc, #344] @ (8000bb8 <MX_ADC1_Init+0x1b0>)
  1064. 8000a5e: 2200 movs r2, #0
  1065. 8000a60: 771a strb r2, [r3, #28]
  1066. hadc1.Init.ExternalTrigConv = ADC_EXTERNALTRIG_T2_TRGO;
  1067. 8000a62: 4b55 ldr r3, [pc, #340] @ (8000bb8 <MX_ADC1_Init+0x1b0>)
  1068. 8000a64: f44f 62ac mov.w r2, #1376 @ 0x560
  1069. 8000a68: 625a str r2, [r3, #36] @ 0x24
  1070. hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING;
  1071. 8000a6a: 4b53 ldr r3, [pc, #332] @ (8000bb8 <MX_ADC1_Init+0x1b0>)
  1072. 8000a6c: f44f 6280 mov.w r2, #1024 @ 0x400
  1073. 8000a70: 629a str r2, [r3, #40] @ 0x28
  1074. hadc1.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DMA_ONESHOT;
  1075. 8000a72: 4b51 ldr r3, [pc, #324] @ (8000bb8 <MX_ADC1_Init+0x1b0>)
  1076. 8000a74: 2201 movs r2, #1
  1077. 8000a76: 62da str r2, [r3, #44] @ 0x2c
  1078. hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
  1079. 8000a78: 4b4f ldr r3, [pc, #316] @ (8000bb8 <MX_ADC1_Init+0x1b0>)
  1080. 8000a7a: 2200 movs r2, #0
  1081. 8000a7c: 631a str r2, [r3, #48] @ 0x30
  1082. hadc1.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE;
  1083. 8000a7e: 4b4e ldr r3, [pc, #312] @ (8000bb8 <MX_ADC1_Init+0x1b0>)
  1084. 8000a80: 2200 movs r2, #0
  1085. 8000a82: 635a str r2, [r3, #52] @ 0x34
  1086. hadc1.Init.OversamplingMode = DISABLE;
  1087. 8000a84: 4b4c ldr r3, [pc, #304] @ (8000bb8 <MX_ADC1_Init+0x1b0>)
  1088. 8000a86: 2200 movs r2, #0
  1089. 8000a88: f883 2038 strb.w r2, [r3, #56] @ 0x38
  1090. if (HAL_ADC_Init(&hadc1) != HAL_OK)
  1091. 8000a8c: 484a ldr r0, [pc, #296] @ (8000bb8 <MX_ADC1_Init+0x1b0>)
  1092. 8000a8e: f004 ff05 bl 800589c <HAL_ADC_Init>
  1093. 8000a92: 4603 mov r3, r0
  1094. 8000a94: 2b00 cmp r3, #0
  1095. 8000a96: d001 beq.n 8000a9c <MX_ADC1_Init+0x94>
  1096. {
  1097. Error_Handler();
  1098. 8000a98: f001 f9ba bl 8001e10 <Error_Handler>
  1099. }
  1100. /** Configure the ADC multi-mode
  1101. */
  1102. multimode.Mode = ADC_MODE_INDEPENDENT;
  1103. 8000a9c: 2300 movs r3, #0
  1104. 8000a9e: 61fb str r3, [r7, #28]
  1105. if (HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode) != HAL_OK)
  1106. 8000aa0: f107 031c add.w r3, r7, #28
  1107. 8000aa4: 4619 mov r1, r3
  1108. 8000aa6: 4844 ldr r0, [pc, #272] @ (8000bb8 <MX_ADC1_Init+0x1b0>)
  1109. 8000aa8: f006 f816 bl 8006ad8 <HAL_ADCEx_MultiModeConfigChannel>
  1110. 8000aac: 4603 mov r3, r0
  1111. 8000aae: 2b00 cmp r3, #0
  1112. 8000ab0: d001 beq.n 8000ab6 <MX_ADC1_Init+0xae>
  1113. {
  1114. Error_Handler();
  1115. 8000ab2: f001 f9ad bl 8001e10 <Error_Handler>
  1116. }
  1117. /** Configure Regular Channel
  1118. */
  1119. sConfig.Channel = ADC_CHANNEL_8;
  1120. 8000ab6: 4b42 ldr r3, [pc, #264] @ (8000bc0 <MX_ADC1_Init+0x1b8>)
  1121. 8000ab8: 603b str r3, [r7, #0]
  1122. sConfig.Rank = ADC_REGULAR_RANK_1;
  1123. 8000aba: 2306 movs r3, #6
  1124. 8000abc: 607b str r3, [r7, #4]
  1125. sConfig.SamplingTime = ADC_SAMPLETIME_387CYCLES_5;
  1126. 8000abe: 2306 movs r3, #6
  1127. 8000ac0: 60bb str r3, [r7, #8]
  1128. sConfig.SingleDiff = ADC_SINGLE_ENDED;
  1129. 8000ac2: f240 73ff movw r3, #2047 @ 0x7ff
  1130. 8000ac6: 60fb str r3, [r7, #12]
  1131. sConfig.OffsetNumber = ADC_OFFSET_NONE;
  1132. 8000ac8: 2304 movs r3, #4
  1133. 8000aca: 613b str r3, [r7, #16]
  1134. sConfig.Offset = 0;
  1135. 8000acc: 2300 movs r3, #0
  1136. 8000ace: 617b str r3, [r7, #20]
  1137. sConfig.OffsetSignedSaturation = DISABLE;
  1138. 8000ad0: 2300 movs r3, #0
  1139. 8000ad2: 767b strb r3, [r7, #25]
  1140. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  1141. 8000ad4: 463b mov r3, r7
  1142. 8000ad6: 4619 mov r1, r3
  1143. 8000ad8: 4837 ldr r0, [pc, #220] @ (8000bb8 <MX_ADC1_Init+0x1b0>)
  1144. 8000ada: f005 f959 bl 8005d90 <HAL_ADC_ConfigChannel>
  1145. 8000ade: 4603 mov r3, r0
  1146. 8000ae0: 2b00 cmp r3, #0
  1147. 8000ae2: d001 beq.n 8000ae8 <MX_ADC1_Init+0xe0>
  1148. {
  1149. Error_Handler();
  1150. 8000ae4: f001 f994 bl 8001e10 <Error_Handler>
  1151. }
  1152. /** Configure Regular Channel
  1153. */
  1154. sConfig.Channel = ADC_CHANNEL_7;
  1155. 8000ae8: 4b36 ldr r3, [pc, #216] @ (8000bc4 <MX_ADC1_Init+0x1bc>)
  1156. 8000aea: 603b str r3, [r7, #0]
  1157. sConfig.Rank = ADC_REGULAR_RANK_2;
  1158. 8000aec: 230c movs r3, #12
  1159. 8000aee: 607b str r3, [r7, #4]
  1160. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  1161. 8000af0: 463b mov r3, r7
  1162. 8000af2: 4619 mov r1, r3
  1163. 8000af4: 4830 ldr r0, [pc, #192] @ (8000bb8 <MX_ADC1_Init+0x1b0>)
  1164. 8000af6: f005 f94b bl 8005d90 <HAL_ADC_ConfigChannel>
  1165. 8000afa: 4603 mov r3, r0
  1166. 8000afc: 2b00 cmp r3, #0
  1167. 8000afe: d001 beq.n 8000b04 <MX_ADC1_Init+0xfc>
  1168. {
  1169. Error_Handler();
  1170. 8000b00: f001 f986 bl 8001e10 <Error_Handler>
  1171. }
  1172. /** Configure Regular Channel
  1173. */
  1174. sConfig.Channel = ADC_CHANNEL_9;
  1175. 8000b04: 4b30 ldr r3, [pc, #192] @ (8000bc8 <MX_ADC1_Init+0x1c0>)
  1176. 8000b06: 603b str r3, [r7, #0]
  1177. sConfig.Rank = ADC_REGULAR_RANK_3;
  1178. 8000b08: 2312 movs r3, #18
  1179. 8000b0a: 607b str r3, [r7, #4]
  1180. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  1181. 8000b0c: 463b mov r3, r7
  1182. 8000b0e: 4619 mov r1, r3
  1183. 8000b10: 4829 ldr r0, [pc, #164] @ (8000bb8 <MX_ADC1_Init+0x1b0>)
  1184. 8000b12: f005 f93d bl 8005d90 <HAL_ADC_ConfigChannel>
  1185. 8000b16: 4603 mov r3, r0
  1186. 8000b18: 2b00 cmp r3, #0
  1187. 8000b1a: d001 beq.n 8000b20 <MX_ADC1_Init+0x118>
  1188. {
  1189. Error_Handler();
  1190. 8000b1c: f001 f978 bl 8001e10 <Error_Handler>
  1191. }
  1192. /** Configure Regular Channel
  1193. */
  1194. sConfig.Channel = ADC_CHANNEL_16;
  1195. 8000b20: 4b2a ldr r3, [pc, #168] @ (8000bcc <MX_ADC1_Init+0x1c4>)
  1196. 8000b22: 603b str r3, [r7, #0]
  1197. sConfig.Rank = ADC_REGULAR_RANK_4;
  1198. 8000b24: 2318 movs r3, #24
  1199. 8000b26: 607b str r3, [r7, #4]
  1200. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  1201. 8000b28: 463b mov r3, r7
  1202. 8000b2a: 4619 mov r1, r3
  1203. 8000b2c: 4822 ldr r0, [pc, #136] @ (8000bb8 <MX_ADC1_Init+0x1b0>)
  1204. 8000b2e: f005 f92f bl 8005d90 <HAL_ADC_ConfigChannel>
  1205. 8000b32: 4603 mov r3, r0
  1206. 8000b34: 2b00 cmp r3, #0
  1207. 8000b36: d001 beq.n 8000b3c <MX_ADC1_Init+0x134>
  1208. {
  1209. Error_Handler();
  1210. 8000b38: f001 f96a bl 8001e10 <Error_Handler>
  1211. }
  1212. /** Configure Regular Channel
  1213. */
  1214. sConfig.Channel = ADC_CHANNEL_17;
  1215. 8000b3c: 4b24 ldr r3, [pc, #144] @ (8000bd0 <MX_ADC1_Init+0x1c8>)
  1216. 8000b3e: 603b str r3, [r7, #0]
  1217. sConfig.Rank = ADC_REGULAR_RANK_5;
  1218. 8000b40: f44f 7380 mov.w r3, #256 @ 0x100
  1219. 8000b44: 607b str r3, [r7, #4]
  1220. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  1221. 8000b46: 463b mov r3, r7
  1222. 8000b48: 4619 mov r1, r3
  1223. 8000b4a: 481b ldr r0, [pc, #108] @ (8000bb8 <MX_ADC1_Init+0x1b0>)
  1224. 8000b4c: f005 f920 bl 8005d90 <HAL_ADC_ConfigChannel>
  1225. 8000b50: 4603 mov r3, r0
  1226. 8000b52: 2b00 cmp r3, #0
  1227. 8000b54: d001 beq.n 8000b5a <MX_ADC1_Init+0x152>
  1228. {
  1229. Error_Handler();
  1230. 8000b56: f001 f95b bl 8001e10 <Error_Handler>
  1231. }
  1232. /** Configure Regular Channel
  1233. */
  1234. sConfig.Channel = ADC_CHANNEL_14;
  1235. 8000b5a: 4b1e ldr r3, [pc, #120] @ (8000bd4 <MX_ADC1_Init+0x1cc>)
  1236. 8000b5c: 603b str r3, [r7, #0]
  1237. sConfig.Rank = ADC_REGULAR_RANK_6;
  1238. 8000b5e: f44f 7383 mov.w r3, #262 @ 0x106
  1239. 8000b62: 607b str r3, [r7, #4]
  1240. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  1241. 8000b64: 463b mov r3, r7
  1242. 8000b66: 4619 mov r1, r3
  1243. 8000b68: 4813 ldr r0, [pc, #76] @ (8000bb8 <MX_ADC1_Init+0x1b0>)
  1244. 8000b6a: f005 f911 bl 8005d90 <HAL_ADC_ConfigChannel>
  1245. 8000b6e: 4603 mov r3, r0
  1246. 8000b70: 2b00 cmp r3, #0
  1247. 8000b72: d001 beq.n 8000b78 <MX_ADC1_Init+0x170>
  1248. {
  1249. Error_Handler();
  1250. 8000b74: f001 f94c bl 8001e10 <Error_Handler>
  1251. }
  1252. /** Configure Regular Channel
  1253. */
  1254. sConfig.Channel = ADC_CHANNEL_15;
  1255. 8000b78: 4b17 ldr r3, [pc, #92] @ (8000bd8 <MX_ADC1_Init+0x1d0>)
  1256. 8000b7a: 603b str r3, [r7, #0]
  1257. sConfig.Rank = ADC_REGULAR_RANK_7;
  1258. 8000b7c: f44f 7386 mov.w r3, #268 @ 0x10c
  1259. 8000b80: 607b str r3, [r7, #4]
  1260. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  1261. 8000b82: 463b mov r3, r7
  1262. 8000b84: 4619 mov r1, r3
  1263. 8000b86: 480c ldr r0, [pc, #48] @ (8000bb8 <MX_ADC1_Init+0x1b0>)
  1264. 8000b88: f005 f902 bl 8005d90 <HAL_ADC_ConfigChannel>
  1265. 8000b8c: 4603 mov r3, r0
  1266. 8000b8e: 2b00 cmp r3, #0
  1267. 8000b90: d001 beq.n 8000b96 <MX_ADC1_Init+0x18e>
  1268. {
  1269. Error_Handler();
  1270. 8000b92: f001 f93d bl 8001e10 <Error_Handler>
  1271. }
  1272. /* USER CODE BEGIN ADC1_Init 2 */
  1273. if (HAL_ADCEx_Calibration_Start(&hadc1, ADC_CALIB_OFFSET_LINEARITY, ADC_SINGLE_ENDED) != HAL_OK)
  1274. 8000b96: f240 72ff movw r2, #2047 @ 0x7ff
  1275. 8000b9a: f04f 1101 mov.w r1, #65537 @ 0x10001
  1276. 8000b9e: 4806 ldr r0, [pc, #24] @ (8000bb8 <MX_ADC1_Init+0x1b0>)
  1277. 8000ba0: f005 ff36 bl 8006a10 <HAL_ADCEx_Calibration_Start>
  1278. 8000ba4: 4603 mov r3, r0
  1279. 8000ba6: 2b00 cmp r3, #0
  1280. 8000ba8: d001 beq.n 8000bae <MX_ADC1_Init+0x1a6>
  1281. {
  1282. Error_Handler();
  1283. 8000baa: f001 f931 bl 8001e10 <Error_Handler>
  1284. }
  1285. /* USER CODE END ADC1_Init 2 */
  1286. }
  1287. 8000bae: bf00 nop
  1288. 8000bb0: 3728 adds r7, #40 @ 0x28
  1289. 8000bb2: 46bd mov sp, r7
  1290. 8000bb4: bd80 pop {r7, pc}
  1291. 8000bb6: bf00 nop
  1292. 8000bb8: 24000140 .word 0x24000140
  1293. 8000bbc: 40022000 .word 0x40022000
  1294. 8000bc0: 21800100 .word 0x21800100
  1295. 8000bc4: 1d500080 .word 0x1d500080
  1296. 8000bc8: 25b00200 .word 0x25b00200
  1297. 8000bcc: 43210000 .word 0x43210000
  1298. 8000bd0: 47520000 .word 0x47520000
  1299. 8000bd4: 3ac04000 .word 0x3ac04000
  1300. 8000bd8: 3ef08000 .word 0x3ef08000
  1301. 08000bdc <MX_ADC2_Init>:
  1302. * @brief ADC2 Initialization Function
  1303. * @param None
  1304. * @retval None
  1305. */
  1306. static void MX_ADC2_Init(void)
  1307. {
  1308. 8000bdc: b580 push {r7, lr}
  1309. 8000bde: b088 sub sp, #32
  1310. 8000be0: af00 add r7, sp, #0
  1311. /* USER CODE BEGIN ADC2_Init 0 */
  1312. /* USER CODE END ADC2_Init 0 */
  1313. ADC_ChannelConfTypeDef sConfig = {0};
  1314. 8000be2: 1d3b adds r3, r7, #4
  1315. 8000be4: 2200 movs r2, #0
  1316. 8000be6: 601a str r2, [r3, #0]
  1317. 8000be8: 605a str r2, [r3, #4]
  1318. 8000bea: 609a str r2, [r3, #8]
  1319. 8000bec: 60da str r2, [r3, #12]
  1320. 8000bee: 611a str r2, [r3, #16]
  1321. 8000bf0: 615a str r2, [r3, #20]
  1322. 8000bf2: 619a str r2, [r3, #24]
  1323. /* USER CODE END ADC2_Init 1 */
  1324. /** Common config
  1325. */
  1326. hadc2.Instance = ADC2;
  1327. 8000bf4: 4b3e ldr r3, [pc, #248] @ (8000cf0 <MX_ADC2_Init+0x114>)
  1328. 8000bf6: 4a3f ldr r2, [pc, #252] @ (8000cf4 <MX_ADC2_Init+0x118>)
  1329. 8000bf8: 601a str r2, [r3, #0]
  1330. hadc2.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
  1331. 8000bfa: 4b3d ldr r3, [pc, #244] @ (8000cf0 <MX_ADC2_Init+0x114>)
  1332. 8000bfc: 2200 movs r2, #0
  1333. 8000bfe: 605a str r2, [r3, #4]
  1334. hadc2.Init.Resolution = ADC_RESOLUTION_16B;
  1335. 8000c00: 4b3b ldr r3, [pc, #236] @ (8000cf0 <MX_ADC2_Init+0x114>)
  1336. 8000c02: 2200 movs r2, #0
  1337. 8000c04: 609a str r2, [r3, #8]
  1338. hadc2.Init.ScanConvMode = ADC_SCAN_ENABLE;
  1339. 8000c06: 4b3a ldr r3, [pc, #232] @ (8000cf0 <MX_ADC2_Init+0x114>)
  1340. 8000c08: 2201 movs r2, #1
  1341. 8000c0a: 60da str r2, [r3, #12]
  1342. hadc2.Init.EOCSelection = ADC_EOC_SEQ_CONV;
  1343. 8000c0c: 4b38 ldr r3, [pc, #224] @ (8000cf0 <MX_ADC2_Init+0x114>)
  1344. 8000c0e: 2208 movs r2, #8
  1345. 8000c10: 611a str r2, [r3, #16]
  1346. hadc2.Init.LowPowerAutoWait = DISABLE;
  1347. 8000c12: 4b37 ldr r3, [pc, #220] @ (8000cf0 <MX_ADC2_Init+0x114>)
  1348. 8000c14: 2200 movs r2, #0
  1349. 8000c16: 751a strb r2, [r3, #20]
  1350. hadc2.Init.ContinuousConvMode = ENABLE;
  1351. 8000c18: 4b35 ldr r3, [pc, #212] @ (8000cf0 <MX_ADC2_Init+0x114>)
  1352. 8000c1a: 2201 movs r2, #1
  1353. 8000c1c: 755a strb r2, [r3, #21]
  1354. hadc2.Init.NbrOfConversion = 3;
  1355. 8000c1e: 4b34 ldr r3, [pc, #208] @ (8000cf0 <MX_ADC2_Init+0x114>)
  1356. 8000c20: 2203 movs r2, #3
  1357. 8000c22: 619a str r2, [r3, #24]
  1358. hadc2.Init.DiscontinuousConvMode = DISABLE;
  1359. 8000c24: 4b32 ldr r3, [pc, #200] @ (8000cf0 <MX_ADC2_Init+0x114>)
  1360. 8000c26: 2200 movs r2, #0
  1361. 8000c28: 771a strb r2, [r3, #28]
  1362. hadc2.Init.ExternalTrigConv = ADC_EXTERNALTRIG_T2_TRGO;
  1363. 8000c2a: 4b31 ldr r3, [pc, #196] @ (8000cf0 <MX_ADC2_Init+0x114>)
  1364. 8000c2c: f44f 62ac mov.w r2, #1376 @ 0x560
  1365. 8000c30: 625a str r2, [r3, #36] @ 0x24
  1366. hadc2.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING;
  1367. 8000c32: 4b2f ldr r3, [pc, #188] @ (8000cf0 <MX_ADC2_Init+0x114>)
  1368. 8000c34: f44f 6280 mov.w r2, #1024 @ 0x400
  1369. 8000c38: 629a str r2, [r3, #40] @ 0x28
  1370. hadc2.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DMA_ONESHOT;
  1371. 8000c3a: 4b2d ldr r3, [pc, #180] @ (8000cf0 <MX_ADC2_Init+0x114>)
  1372. 8000c3c: 2201 movs r2, #1
  1373. 8000c3e: 62da str r2, [r3, #44] @ 0x2c
  1374. hadc2.Init.Overrun = ADC_OVR_DATA_PRESERVED;
  1375. 8000c40: 4b2b ldr r3, [pc, #172] @ (8000cf0 <MX_ADC2_Init+0x114>)
  1376. 8000c42: 2200 movs r2, #0
  1377. 8000c44: 631a str r2, [r3, #48] @ 0x30
  1378. hadc2.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE;
  1379. 8000c46: 4b2a ldr r3, [pc, #168] @ (8000cf0 <MX_ADC2_Init+0x114>)
  1380. 8000c48: 2200 movs r2, #0
  1381. 8000c4a: 635a str r2, [r3, #52] @ 0x34
  1382. hadc2.Init.OversamplingMode = DISABLE;
  1383. 8000c4c: 4b28 ldr r3, [pc, #160] @ (8000cf0 <MX_ADC2_Init+0x114>)
  1384. 8000c4e: 2200 movs r2, #0
  1385. 8000c50: f883 2038 strb.w r2, [r3, #56] @ 0x38
  1386. if (HAL_ADC_Init(&hadc2) != HAL_OK)
  1387. 8000c54: 4826 ldr r0, [pc, #152] @ (8000cf0 <MX_ADC2_Init+0x114>)
  1388. 8000c56: f004 fe21 bl 800589c <HAL_ADC_Init>
  1389. 8000c5a: 4603 mov r3, r0
  1390. 8000c5c: 2b00 cmp r3, #0
  1391. 8000c5e: d001 beq.n 8000c64 <MX_ADC2_Init+0x88>
  1392. {
  1393. Error_Handler();
  1394. 8000c60: f001 f8d6 bl 8001e10 <Error_Handler>
  1395. }
  1396. /** Configure Regular Channel
  1397. */
  1398. sConfig.Channel = ADC_CHANNEL_3;
  1399. 8000c64: 4b24 ldr r3, [pc, #144] @ (8000cf8 <MX_ADC2_Init+0x11c>)
  1400. 8000c66: 607b str r3, [r7, #4]
  1401. sConfig.Rank = ADC_REGULAR_RANK_1;
  1402. 8000c68: 2306 movs r3, #6
  1403. 8000c6a: 60bb str r3, [r7, #8]
  1404. sConfig.SamplingTime = ADC_SAMPLETIME_387CYCLES_5;
  1405. 8000c6c: 2306 movs r3, #6
  1406. 8000c6e: 60fb str r3, [r7, #12]
  1407. sConfig.SingleDiff = ADC_SINGLE_ENDED;
  1408. 8000c70: f240 73ff movw r3, #2047 @ 0x7ff
  1409. 8000c74: 613b str r3, [r7, #16]
  1410. sConfig.OffsetNumber = ADC_OFFSET_NONE;
  1411. 8000c76: 2304 movs r3, #4
  1412. 8000c78: 617b str r3, [r7, #20]
  1413. sConfig.Offset = 0;
  1414. 8000c7a: 2300 movs r3, #0
  1415. 8000c7c: 61bb str r3, [r7, #24]
  1416. sConfig.OffsetSignedSaturation = DISABLE;
  1417. 8000c7e: 2300 movs r3, #0
  1418. 8000c80: 777b strb r3, [r7, #29]
  1419. if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
  1420. 8000c82: 1d3b adds r3, r7, #4
  1421. 8000c84: 4619 mov r1, r3
  1422. 8000c86: 481a ldr r0, [pc, #104] @ (8000cf0 <MX_ADC2_Init+0x114>)
  1423. 8000c88: f005 f882 bl 8005d90 <HAL_ADC_ConfigChannel>
  1424. 8000c8c: 4603 mov r3, r0
  1425. 8000c8e: 2b00 cmp r3, #0
  1426. 8000c90: d001 beq.n 8000c96 <MX_ADC2_Init+0xba>
  1427. {
  1428. Error_Handler();
  1429. 8000c92: f001 f8bd bl 8001e10 <Error_Handler>
  1430. }
  1431. /** Configure Regular Channel
  1432. */
  1433. sConfig.Channel = ADC_CHANNEL_4;
  1434. 8000c96: 4b19 ldr r3, [pc, #100] @ (8000cfc <MX_ADC2_Init+0x120>)
  1435. 8000c98: 607b str r3, [r7, #4]
  1436. sConfig.Rank = ADC_REGULAR_RANK_2;
  1437. 8000c9a: 230c movs r3, #12
  1438. 8000c9c: 60bb str r3, [r7, #8]
  1439. if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
  1440. 8000c9e: 1d3b adds r3, r7, #4
  1441. 8000ca0: 4619 mov r1, r3
  1442. 8000ca2: 4813 ldr r0, [pc, #76] @ (8000cf0 <MX_ADC2_Init+0x114>)
  1443. 8000ca4: f005 f874 bl 8005d90 <HAL_ADC_ConfigChannel>
  1444. 8000ca8: 4603 mov r3, r0
  1445. 8000caa: 2b00 cmp r3, #0
  1446. 8000cac: d001 beq.n 8000cb2 <MX_ADC2_Init+0xd6>
  1447. {
  1448. Error_Handler();
  1449. 8000cae: f001 f8af bl 8001e10 <Error_Handler>
  1450. }
  1451. /** Configure Regular Channel
  1452. */
  1453. sConfig.Channel = ADC_CHANNEL_5;
  1454. 8000cb2: 4b13 ldr r3, [pc, #76] @ (8000d00 <MX_ADC2_Init+0x124>)
  1455. 8000cb4: 607b str r3, [r7, #4]
  1456. sConfig.Rank = ADC_REGULAR_RANK_3;
  1457. 8000cb6: 2312 movs r3, #18
  1458. 8000cb8: 60bb str r3, [r7, #8]
  1459. if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
  1460. 8000cba: 1d3b adds r3, r7, #4
  1461. 8000cbc: 4619 mov r1, r3
  1462. 8000cbe: 480c ldr r0, [pc, #48] @ (8000cf0 <MX_ADC2_Init+0x114>)
  1463. 8000cc0: f005 f866 bl 8005d90 <HAL_ADC_ConfigChannel>
  1464. 8000cc4: 4603 mov r3, r0
  1465. 8000cc6: 2b00 cmp r3, #0
  1466. 8000cc8: d001 beq.n 8000cce <MX_ADC2_Init+0xf2>
  1467. {
  1468. Error_Handler();
  1469. 8000cca: f001 f8a1 bl 8001e10 <Error_Handler>
  1470. }
  1471. /* USER CODE BEGIN ADC2_Init 2 */
  1472. if (HAL_ADCEx_Calibration_Start(&hadc2, ADC_CALIB_OFFSET_LINEARITY, ADC_SINGLE_ENDED) != HAL_OK)
  1473. 8000cce: f240 72ff movw r2, #2047 @ 0x7ff
  1474. 8000cd2: f04f 1101 mov.w r1, #65537 @ 0x10001
  1475. 8000cd6: 4806 ldr r0, [pc, #24] @ (8000cf0 <MX_ADC2_Init+0x114>)
  1476. 8000cd8: f005 fe9a bl 8006a10 <HAL_ADCEx_Calibration_Start>
  1477. 8000cdc: 4603 mov r3, r0
  1478. 8000cde: 2b00 cmp r3, #0
  1479. 8000ce0: d001 beq.n 8000ce6 <MX_ADC2_Init+0x10a>
  1480. {
  1481. Error_Handler();
  1482. 8000ce2: f001 f895 bl 8001e10 <Error_Handler>
  1483. }
  1484. /* USER CODE END ADC2_Init 2 */
  1485. }
  1486. 8000ce6: bf00 nop
  1487. 8000ce8: 3720 adds r7, #32
  1488. 8000cea: 46bd mov sp, r7
  1489. 8000cec: bd80 pop {r7, pc}
  1490. 8000cee: bf00 nop
  1491. 8000cf0: 240001a4 .word 0x240001a4
  1492. 8000cf4: 40022100 .word 0x40022100
  1493. 8000cf8: 0c900008 .word 0x0c900008
  1494. 8000cfc: 10c00010 .word 0x10c00010
  1495. 8000d00: 14f00020 .word 0x14f00020
  1496. 08000d04 <MX_ADC3_Init>:
  1497. * @brief ADC3 Initialization Function
  1498. * @param None
  1499. * @retval None
  1500. */
  1501. static void MX_ADC3_Init(void)
  1502. {
  1503. 8000d04: b580 push {r7, lr}
  1504. 8000d06: b088 sub sp, #32
  1505. 8000d08: af00 add r7, sp, #0
  1506. /* USER CODE BEGIN ADC3_Init 0 */
  1507. /* USER CODE END ADC3_Init 0 */
  1508. ADC_ChannelConfTypeDef sConfig = {0};
  1509. 8000d0a: 1d3b adds r3, r7, #4
  1510. 8000d0c: 2200 movs r2, #0
  1511. 8000d0e: 601a str r2, [r3, #0]
  1512. 8000d10: 605a str r2, [r3, #4]
  1513. 8000d12: 609a str r2, [r3, #8]
  1514. 8000d14: 60da str r2, [r3, #12]
  1515. 8000d16: 611a str r2, [r3, #16]
  1516. 8000d18: 615a str r2, [r3, #20]
  1517. 8000d1a: 619a str r2, [r3, #24]
  1518. /* USER CODE END ADC3_Init 1 */
  1519. /** Common config
  1520. */
  1521. hadc3.Instance = ADC3;
  1522. 8000d1c: 4b4b ldr r3, [pc, #300] @ (8000e4c <MX_ADC3_Init+0x148>)
  1523. 8000d1e: 4a4c ldr r2, [pc, #304] @ (8000e50 <MX_ADC3_Init+0x14c>)
  1524. 8000d20: 601a str r2, [r3, #0]
  1525. hadc3.Init.Resolution = ADC_RESOLUTION_16B;
  1526. 8000d22: 4b4a ldr r3, [pc, #296] @ (8000e4c <MX_ADC3_Init+0x148>)
  1527. 8000d24: 2200 movs r2, #0
  1528. 8000d26: 609a str r2, [r3, #8]
  1529. hadc3.Init.ScanConvMode = ADC_SCAN_ENABLE;
  1530. 8000d28: 4b48 ldr r3, [pc, #288] @ (8000e4c <MX_ADC3_Init+0x148>)
  1531. 8000d2a: 2201 movs r2, #1
  1532. 8000d2c: 60da str r2, [r3, #12]
  1533. hadc3.Init.EOCSelection = ADC_EOC_SEQ_CONV;
  1534. 8000d2e: 4b47 ldr r3, [pc, #284] @ (8000e4c <MX_ADC3_Init+0x148>)
  1535. 8000d30: 2208 movs r2, #8
  1536. 8000d32: 611a str r2, [r3, #16]
  1537. hadc3.Init.LowPowerAutoWait = DISABLE;
  1538. 8000d34: 4b45 ldr r3, [pc, #276] @ (8000e4c <MX_ADC3_Init+0x148>)
  1539. 8000d36: 2200 movs r2, #0
  1540. 8000d38: 751a strb r2, [r3, #20]
  1541. hadc3.Init.ContinuousConvMode = ENABLE;
  1542. 8000d3a: 4b44 ldr r3, [pc, #272] @ (8000e4c <MX_ADC3_Init+0x148>)
  1543. 8000d3c: 2201 movs r2, #1
  1544. 8000d3e: 755a strb r2, [r3, #21]
  1545. hadc3.Init.NbrOfConversion = 5;
  1546. 8000d40: 4b42 ldr r3, [pc, #264] @ (8000e4c <MX_ADC3_Init+0x148>)
  1547. 8000d42: 2205 movs r2, #5
  1548. 8000d44: 619a str r2, [r3, #24]
  1549. hadc3.Init.DiscontinuousConvMode = DISABLE;
  1550. 8000d46: 4b41 ldr r3, [pc, #260] @ (8000e4c <MX_ADC3_Init+0x148>)
  1551. 8000d48: 2200 movs r2, #0
  1552. 8000d4a: 771a strb r2, [r3, #28]
  1553. hadc3.Init.ExternalTrigConv = ADC_EXTERNALTRIG_T2_TRGO;
  1554. 8000d4c: 4b3f ldr r3, [pc, #252] @ (8000e4c <MX_ADC3_Init+0x148>)
  1555. 8000d4e: f44f 62ac mov.w r2, #1376 @ 0x560
  1556. 8000d52: 625a str r2, [r3, #36] @ 0x24
  1557. hadc3.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING;
  1558. 8000d54: 4b3d ldr r3, [pc, #244] @ (8000e4c <MX_ADC3_Init+0x148>)
  1559. 8000d56: f44f 6280 mov.w r2, #1024 @ 0x400
  1560. 8000d5a: 629a str r2, [r3, #40] @ 0x28
  1561. hadc3.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DMA_ONESHOT;
  1562. 8000d5c: 4b3b ldr r3, [pc, #236] @ (8000e4c <MX_ADC3_Init+0x148>)
  1563. 8000d5e: 2201 movs r2, #1
  1564. 8000d60: 62da str r2, [r3, #44] @ 0x2c
  1565. hadc3.Init.Overrun = ADC_OVR_DATA_PRESERVED;
  1566. 8000d62: 4b3a ldr r3, [pc, #232] @ (8000e4c <MX_ADC3_Init+0x148>)
  1567. 8000d64: 2200 movs r2, #0
  1568. 8000d66: 631a str r2, [r3, #48] @ 0x30
  1569. hadc3.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE;
  1570. 8000d68: 4b38 ldr r3, [pc, #224] @ (8000e4c <MX_ADC3_Init+0x148>)
  1571. 8000d6a: 2200 movs r2, #0
  1572. 8000d6c: 635a str r2, [r3, #52] @ 0x34
  1573. hadc3.Init.OversamplingMode = DISABLE;
  1574. 8000d6e: 4b37 ldr r3, [pc, #220] @ (8000e4c <MX_ADC3_Init+0x148>)
  1575. 8000d70: 2200 movs r2, #0
  1576. 8000d72: f883 2038 strb.w r2, [r3, #56] @ 0x38
  1577. if (HAL_ADC_Init(&hadc3) != HAL_OK)
  1578. 8000d76: 4835 ldr r0, [pc, #212] @ (8000e4c <MX_ADC3_Init+0x148>)
  1579. 8000d78: f004 fd90 bl 800589c <HAL_ADC_Init>
  1580. 8000d7c: 4603 mov r3, r0
  1581. 8000d7e: 2b00 cmp r3, #0
  1582. 8000d80: d001 beq.n 8000d86 <MX_ADC3_Init+0x82>
  1583. {
  1584. Error_Handler();
  1585. 8000d82: f001 f845 bl 8001e10 <Error_Handler>
  1586. }
  1587. /** Configure Regular Channel
  1588. */
  1589. sConfig.Channel = ADC_CHANNEL_0;
  1590. 8000d86: 2301 movs r3, #1
  1591. 8000d88: 607b str r3, [r7, #4]
  1592. sConfig.Rank = ADC_REGULAR_RANK_1;
  1593. 8000d8a: 2306 movs r3, #6
  1594. 8000d8c: 60bb str r3, [r7, #8]
  1595. sConfig.SamplingTime = ADC_SAMPLETIME_387CYCLES_5;
  1596. 8000d8e: 2306 movs r3, #6
  1597. 8000d90: 60fb str r3, [r7, #12]
  1598. sConfig.SingleDiff = ADC_SINGLE_ENDED;
  1599. 8000d92: f240 73ff movw r3, #2047 @ 0x7ff
  1600. 8000d96: 613b str r3, [r7, #16]
  1601. sConfig.OffsetNumber = ADC_OFFSET_NONE;
  1602. 8000d98: 2304 movs r3, #4
  1603. 8000d9a: 617b str r3, [r7, #20]
  1604. sConfig.Offset = 0;
  1605. 8000d9c: 2300 movs r3, #0
  1606. 8000d9e: 61bb str r3, [r7, #24]
  1607. sConfig.OffsetSignedSaturation = DISABLE;
  1608. 8000da0: 2300 movs r3, #0
  1609. 8000da2: 777b strb r3, [r7, #29]
  1610. if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
  1611. 8000da4: 1d3b adds r3, r7, #4
  1612. 8000da6: 4619 mov r1, r3
  1613. 8000da8: 4828 ldr r0, [pc, #160] @ (8000e4c <MX_ADC3_Init+0x148>)
  1614. 8000daa: f004 fff1 bl 8005d90 <HAL_ADC_ConfigChannel>
  1615. 8000dae: 4603 mov r3, r0
  1616. 8000db0: 2b00 cmp r3, #0
  1617. 8000db2: d001 beq.n 8000db8 <MX_ADC3_Init+0xb4>
  1618. {
  1619. Error_Handler();
  1620. 8000db4: f001 f82c bl 8001e10 <Error_Handler>
  1621. }
  1622. /** Configure Regular Channel
  1623. */
  1624. sConfig.Channel = ADC_CHANNEL_1;
  1625. 8000db8: 4b26 ldr r3, [pc, #152] @ (8000e54 <MX_ADC3_Init+0x150>)
  1626. 8000dba: 607b str r3, [r7, #4]
  1627. sConfig.Rank = ADC_REGULAR_RANK_2;
  1628. 8000dbc: 230c movs r3, #12
  1629. 8000dbe: 60bb str r3, [r7, #8]
  1630. if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
  1631. 8000dc0: 1d3b adds r3, r7, #4
  1632. 8000dc2: 4619 mov r1, r3
  1633. 8000dc4: 4821 ldr r0, [pc, #132] @ (8000e4c <MX_ADC3_Init+0x148>)
  1634. 8000dc6: f004 ffe3 bl 8005d90 <HAL_ADC_ConfigChannel>
  1635. 8000dca: 4603 mov r3, r0
  1636. 8000dcc: 2b00 cmp r3, #0
  1637. 8000dce: d001 beq.n 8000dd4 <MX_ADC3_Init+0xd0>
  1638. {
  1639. Error_Handler();
  1640. 8000dd0: f001 f81e bl 8001e10 <Error_Handler>
  1641. }
  1642. /** Configure Regular Channel
  1643. */
  1644. sConfig.Channel = ADC_CHANNEL_10;
  1645. 8000dd4: 4b20 ldr r3, [pc, #128] @ (8000e58 <MX_ADC3_Init+0x154>)
  1646. 8000dd6: 607b str r3, [r7, #4]
  1647. sConfig.Rank = ADC_REGULAR_RANK_3;
  1648. 8000dd8: 2312 movs r3, #18
  1649. 8000dda: 60bb str r3, [r7, #8]
  1650. if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
  1651. 8000ddc: 1d3b adds r3, r7, #4
  1652. 8000dde: 4619 mov r1, r3
  1653. 8000de0: 481a ldr r0, [pc, #104] @ (8000e4c <MX_ADC3_Init+0x148>)
  1654. 8000de2: f004 ffd5 bl 8005d90 <HAL_ADC_ConfigChannel>
  1655. 8000de6: 4603 mov r3, r0
  1656. 8000de8: 2b00 cmp r3, #0
  1657. 8000dea: d001 beq.n 8000df0 <MX_ADC3_Init+0xec>
  1658. {
  1659. Error_Handler();
  1660. 8000dec: f001 f810 bl 8001e10 <Error_Handler>
  1661. }
  1662. /** Configure Regular Channel
  1663. */
  1664. sConfig.Channel = ADC_CHANNEL_11;
  1665. 8000df0: 4b1a ldr r3, [pc, #104] @ (8000e5c <MX_ADC3_Init+0x158>)
  1666. 8000df2: 607b str r3, [r7, #4]
  1667. sConfig.Rank = ADC_REGULAR_RANK_4;
  1668. 8000df4: 2318 movs r3, #24
  1669. 8000df6: 60bb str r3, [r7, #8]
  1670. if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
  1671. 8000df8: 1d3b adds r3, r7, #4
  1672. 8000dfa: 4619 mov r1, r3
  1673. 8000dfc: 4813 ldr r0, [pc, #76] @ (8000e4c <MX_ADC3_Init+0x148>)
  1674. 8000dfe: f004 ffc7 bl 8005d90 <HAL_ADC_ConfigChannel>
  1675. 8000e02: 4603 mov r3, r0
  1676. 8000e04: 2b00 cmp r3, #0
  1677. 8000e06: d001 beq.n 8000e0c <MX_ADC3_Init+0x108>
  1678. {
  1679. Error_Handler();
  1680. 8000e08: f001 f802 bl 8001e10 <Error_Handler>
  1681. }
  1682. /** Configure Regular Channel
  1683. */
  1684. sConfig.Channel = ADC_CHANNEL_VREFINT;
  1685. 8000e0c: 4b14 ldr r3, [pc, #80] @ (8000e60 <MX_ADC3_Init+0x15c>)
  1686. 8000e0e: 607b str r3, [r7, #4]
  1687. sConfig.Rank = ADC_REGULAR_RANK_5;
  1688. 8000e10: f44f 7380 mov.w r3, #256 @ 0x100
  1689. 8000e14: 60bb str r3, [r7, #8]
  1690. if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
  1691. 8000e16: 1d3b adds r3, r7, #4
  1692. 8000e18: 4619 mov r1, r3
  1693. 8000e1a: 480c ldr r0, [pc, #48] @ (8000e4c <MX_ADC3_Init+0x148>)
  1694. 8000e1c: f004 ffb8 bl 8005d90 <HAL_ADC_ConfigChannel>
  1695. 8000e20: 4603 mov r3, r0
  1696. 8000e22: 2b00 cmp r3, #0
  1697. 8000e24: d001 beq.n 8000e2a <MX_ADC3_Init+0x126>
  1698. {
  1699. Error_Handler();
  1700. 8000e26: f000 fff3 bl 8001e10 <Error_Handler>
  1701. }
  1702. /* USER CODE BEGIN ADC3_Init 2 */
  1703. if (HAL_ADCEx_Calibration_Start(&hadc3, ADC_CALIB_OFFSET_LINEARITY, ADC_SINGLE_ENDED) != HAL_OK)
  1704. 8000e2a: f240 72ff movw r2, #2047 @ 0x7ff
  1705. 8000e2e: f04f 1101 mov.w r1, #65537 @ 0x10001
  1706. 8000e32: 4806 ldr r0, [pc, #24] @ (8000e4c <MX_ADC3_Init+0x148>)
  1707. 8000e34: f005 fdec bl 8006a10 <HAL_ADCEx_Calibration_Start>
  1708. 8000e38: 4603 mov r3, r0
  1709. 8000e3a: 2b00 cmp r3, #0
  1710. 8000e3c: d001 beq.n 8000e42 <MX_ADC3_Init+0x13e>
  1711. {
  1712. Error_Handler();
  1713. 8000e3e: f000 ffe7 bl 8001e10 <Error_Handler>
  1714. }
  1715. /* USER CODE END ADC3_Init 2 */
  1716. }
  1717. 8000e42: bf00 nop
  1718. 8000e44: 3720 adds r7, #32
  1719. 8000e46: 46bd mov sp, r7
  1720. 8000e48: bd80 pop {r7, pc}
  1721. 8000e4a: bf00 nop
  1722. 8000e4c: 24000208 .word 0x24000208
  1723. 8000e50: 58026000 .word 0x58026000
  1724. 8000e54: 04300002 .word 0x04300002
  1725. 8000e58: 2a000400 .word 0x2a000400
  1726. 8000e5c: 2e300800 .word 0x2e300800
  1727. 8000e60: cfb80000 .word 0xcfb80000
  1728. 08000e64 <MX_COMP1_Init>:
  1729. * @brief COMP1 Initialization Function
  1730. * @param None
  1731. * @retval None
  1732. */
  1733. static void MX_COMP1_Init(void)
  1734. {
  1735. 8000e64: b580 push {r7, lr}
  1736. 8000e66: af00 add r7, sp, #0
  1737. /* USER CODE END COMP1_Init 0 */
  1738. /* USER CODE BEGIN COMP1_Init 1 */
  1739. /* USER CODE END COMP1_Init 1 */
  1740. hcomp1.Instance = COMP1;
  1741. 8000e68: 4b12 ldr r3, [pc, #72] @ (8000eb4 <MX_COMP1_Init+0x50>)
  1742. 8000e6a: 4a13 ldr r2, [pc, #76] @ (8000eb8 <MX_COMP1_Init+0x54>)
  1743. 8000e6c: 601a str r2, [r3, #0]
  1744. hcomp1.Init.InvertingInput = COMP_INPUT_MINUS_3_4VREFINT;
  1745. 8000e6e: 4b11 ldr r3, [pc, #68] @ (8000eb4 <MX_COMP1_Init+0x50>)
  1746. 8000e70: 4a12 ldr r2, [pc, #72] @ (8000ebc <MX_COMP1_Init+0x58>)
  1747. 8000e72: 611a str r2, [r3, #16]
  1748. hcomp1.Init.NonInvertingInput = COMP_INPUT_PLUS_IO2;
  1749. 8000e74: 4b0f ldr r3, [pc, #60] @ (8000eb4 <MX_COMP1_Init+0x50>)
  1750. 8000e76: f44f 1280 mov.w r2, #1048576 @ 0x100000
  1751. 8000e7a: 60da str r2, [r3, #12]
  1752. hcomp1.Init.OutputPol = COMP_OUTPUTPOL_NONINVERTED;
  1753. 8000e7c: 4b0d ldr r3, [pc, #52] @ (8000eb4 <MX_COMP1_Init+0x50>)
  1754. 8000e7e: 2200 movs r2, #0
  1755. 8000e80: 619a str r2, [r3, #24]
  1756. hcomp1.Init.Hysteresis = COMP_HYSTERESIS_NONE;
  1757. 8000e82: 4b0c ldr r3, [pc, #48] @ (8000eb4 <MX_COMP1_Init+0x50>)
  1758. 8000e84: 2200 movs r2, #0
  1759. 8000e86: 615a str r2, [r3, #20]
  1760. hcomp1.Init.BlankingSrce = COMP_BLANKINGSRC_NONE;
  1761. 8000e88: 4b0a ldr r3, [pc, #40] @ (8000eb4 <MX_COMP1_Init+0x50>)
  1762. 8000e8a: 2200 movs r2, #0
  1763. 8000e8c: 61da str r2, [r3, #28]
  1764. hcomp1.Init.Mode = COMP_POWERMODE_HIGHSPEED;
  1765. 8000e8e: 4b09 ldr r3, [pc, #36] @ (8000eb4 <MX_COMP1_Init+0x50>)
  1766. 8000e90: 2200 movs r2, #0
  1767. 8000e92: 609a str r2, [r3, #8]
  1768. hcomp1.Init.WindowMode = COMP_WINDOWMODE_DISABLE;
  1769. 8000e94: 4b07 ldr r3, [pc, #28] @ (8000eb4 <MX_COMP1_Init+0x50>)
  1770. 8000e96: 2200 movs r2, #0
  1771. 8000e98: 605a str r2, [r3, #4]
  1772. hcomp1.Init.TriggerMode = COMP_TRIGGERMODE_NONE;
  1773. 8000e9a: 4b06 ldr r3, [pc, #24] @ (8000eb4 <MX_COMP1_Init+0x50>)
  1774. 8000e9c: 2200 movs r2, #0
  1775. 8000e9e: 621a str r2, [r3, #32]
  1776. if (HAL_COMP_Init(&hcomp1) != HAL_OK)
  1777. 8000ea0: 4804 ldr r0, [pc, #16] @ (8000eb4 <MX_COMP1_Init+0x50>)
  1778. 8000ea2: f005 fef7 bl 8006c94 <HAL_COMP_Init>
  1779. 8000ea6: 4603 mov r3, r0
  1780. 8000ea8: 2b00 cmp r3, #0
  1781. 8000eaa: d001 beq.n 8000eb0 <MX_COMP1_Init+0x4c>
  1782. {
  1783. Error_Handler();
  1784. 8000eac: f000 ffb0 bl 8001e10 <Error_Handler>
  1785. }
  1786. /* USER CODE BEGIN COMP1_Init 2 */
  1787. /* USER CODE END COMP1_Init 2 */
  1788. }
  1789. 8000eb0: bf00 nop
  1790. 8000eb2: bd80 pop {r7, pc}
  1791. 8000eb4: 240003d4 .word 0x240003d4
  1792. 8000eb8: 5800380c .word 0x5800380c
  1793. 8000ebc: 00020006 .word 0x00020006
  1794. 08000ec0 <MX_CRC_Init>:
  1795. * @brief CRC Initialization Function
  1796. * @param None
  1797. * @retval None
  1798. */
  1799. static void MX_CRC_Init(void)
  1800. {
  1801. 8000ec0: b580 push {r7, lr}
  1802. 8000ec2: af00 add r7, sp, #0
  1803. /* USER CODE END CRC_Init 0 */
  1804. /* USER CODE BEGIN CRC_Init 1 */
  1805. /* USER CODE END CRC_Init 1 */
  1806. hcrc.Instance = CRC;
  1807. 8000ec4: 4b11 ldr r3, [pc, #68] @ (8000f0c <MX_CRC_Init+0x4c>)
  1808. 8000ec6: 4a12 ldr r2, [pc, #72] @ (8000f10 <MX_CRC_Init+0x50>)
  1809. 8000ec8: 601a str r2, [r3, #0]
  1810. hcrc.Init.DefaultPolynomialUse = DEFAULT_POLYNOMIAL_DISABLE;
  1811. 8000eca: 4b10 ldr r3, [pc, #64] @ (8000f0c <MX_CRC_Init+0x4c>)
  1812. 8000ecc: 2201 movs r2, #1
  1813. 8000ece: 711a strb r2, [r3, #4]
  1814. hcrc.Init.DefaultInitValueUse = DEFAULT_INIT_VALUE_ENABLE;
  1815. 8000ed0: 4b0e ldr r3, [pc, #56] @ (8000f0c <MX_CRC_Init+0x4c>)
  1816. 8000ed2: 2200 movs r2, #0
  1817. 8000ed4: 715a strb r2, [r3, #5]
  1818. hcrc.Init.GeneratingPolynomial = 4129;
  1819. 8000ed6: 4b0d ldr r3, [pc, #52] @ (8000f0c <MX_CRC_Init+0x4c>)
  1820. 8000ed8: f241 0221 movw r2, #4129 @ 0x1021
  1821. 8000edc: 609a str r2, [r3, #8]
  1822. hcrc.Init.CRCLength = CRC_POLYLENGTH_16B;
  1823. 8000ede: 4b0b ldr r3, [pc, #44] @ (8000f0c <MX_CRC_Init+0x4c>)
  1824. 8000ee0: 2208 movs r2, #8
  1825. 8000ee2: 60da str r2, [r3, #12]
  1826. hcrc.Init.InputDataInversionMode = CRC_INPUTDATA_INVERSION_NONE;
  1827. 8000ee4: 4b09 ldr r3, [pc, #36] @ (8000f0c <MX_CRC_Init+0x4c>)
  1828. 8000ee6: 2200 movs r2, #0
  1829. 8000ee8: 615a str r2, [r3, #20]
  1830. hcrc.Init.OutputDataInversionMode = CRC_OUTPUTDATA_INVERSION_DISABLE;
  1831. 8000eea: 4b08 ldr r3, [pc, #32] @ (8000f0c <MX_CRC_Init+0x4c>)
  1832. 8000eec: 2200 movs r2, #0
  1833. 8000eee: 619a str r2, [r3, #24]
  1834. hcrc.InputDataFormat = CRC_INPUTDATA_FORMAT_BYTES;
  1835. 8000ef0: 4b06 ldr r3, [pc, #24] @ (8000f0c <MX_CRC_Init+0x4c>)
  1836. 8000ef2: 2201 movs r2, #1
  1837. 8000ef4: 621a str r2, [r3, #32]
  1838. if (HAL_CRC_Init(&hcrc) != HAL_OK)
  1839. 8000ef6: 4805 ldr r0, [pc, #20] @ (8000f0c <MX_CRC_Init+0x4c>)
  1840. 8000ef8: f006 f9b6 bl 8007268 <HAL_CRC_Init>
  1841. 8000efc: 4603 mov r3, r0
  1842. 8000efe: 2b00 cmp r3, #0
  1843. 8000f00: d001 beq.n 8000f06 <MX_CRC_Init+0x46>
  1844. {
  1845. Error_Handler();
  1846. 8000f02: f000 ff85 bl 8001e10 <Error_Handler>
  1847. }
  1848. /* USER CODE BEGIN CRC_Init 2 */
  1849. /* USER CODE END CRC_Init 2 */
  1850. }
  1851. 8000f06: bf00 nop
  1852. 8000f08: bd80 pop {r7, pc}
  1853. 8000f0a: bf00 nop
  1854. 8000f0c: 24000400 .word 0x24000400
  1855. 8000f10: 58024c00 .word 0x58024c00
  1856. 08000f14 <MX_DAC1_Init>:
  1857. * @brief DAC1 Initialization Function
  1858. * @param None
  1859. * @retval None
  1860. */
  1861. static void MX_DAC1_Init(void)
  1862. {
  1863. 8000f14: b580 push {r7, lr}
  1864. 8000f16: b08a sub sp, #40 @ 0x28
  1865. 8000f18: af00 add r7, sp, #0
  1866. /* USER CODE BEGIN DAC1_Init 0 */
  1867. /* USER CODE END DAC1_Init 0 */
  1868. DAC_ChannelConfTypeDef sConfig = {0};
  1869. 8000f1a: 1d3b adds r3, r7, #4
  1870. 8000f1c: 2224 movs r2, #36 @ 0x24
  1871. 8000f1e: 2100 movs r1, #0
  1872. 8000f20: 4618 mov r0, r3
  1873. 8000f22: f016 fe18 bl 8017b56 <memset>
  1874. /* USER CODE END DAC1_Init 1 */
  1875. /** DAC Initialization
  1876. */
  1877. hdac1.Instance = DAC1;
  1878. 8000f26: 4b17 ldr r3, [pc, #92] @ (8000f84 <MX_DAC1_Init+0x70>)
  1879. 8000f28: 4a17 ldr r2, [pc, #92] @ (8000f88 <MX_DAC1_Init+0x74>)
  1880. 8000f2a: 601a str r2, [r3, #0]
  1881. if (HAL_DAC_Init(&hdac1) != HAL_OK)
  1882. 8000f2c: 4815 ldr r0, [pc, #84] @ (8000f84 <MX_DAC1_Init+0x70>)
  1883. 8000f2e: f006 fba1 bl 8007674 <HAL_DAC_Init>
  1884. 8000f32: 4603 mov r3, r0
  1885. 8000f34: 2b00 cmp r3, #0
  1886. 8000f36: d001 beq.n 8000f3c <MX_DAC1_Init+0x28>
  1887. {
  1888. Error_Handler();
  1889. 8000f38: f000 ff6a bl 8001e10 <Error_Handler>
  1890. }
  1891. /** DAC channel OUT1 config
  1892. */
  1893. sConfig.DAC_SampleAndHold = DAC_SAMPLEANDHOLD_DISABLE;
  1894. 8000f3c: 2300 movs r3, #0
  1895. 8000f3e: 607b str r3, [r7, #4]
  1896. sConfig.DAC_Trigger = DAC_TRIGGER_NONE;
  1897. 8000f40: 2300 movs r3, #0
  1898. 8000f42: 60bb str r3, [r7, #8]
  1899. sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;
  1900. 8000f44: 2300 movs r3, #0
  1901. 8000f46: 60fb str r3, [r7, #12]
  1902. sConfig.DAC_ConnectOnChipPeripheral = DAC_CHIPCONNECT_DISABLE;
  1903. 8000f48: 2301 movs r3, #1
  1904. 8000f4a: 613b str r3, [r7, #16]
  1905. sConfig.DAC_UserTrimming = DAC_TRIMMING_FACTORY;
  1906. 8000f4c: 2300 movs r3, #0
  1907. 8000f4e: 617b str r3, [r7, #20]
  1908. if (HAL_DAC_ConfigChannel(&hdac1, &sConfig, DAC_CHANNEL_1) != HAL_OK)
  1909. 8000f50: 1d3b adds r3, r7, #4
  1910. 8000f52: 2200 movs r2, #0
  1911. 8000f54: 4619 mov r1, r3
  1912. 8000f56: 480b ldr r0, [pc, #44] @ (8000f84 <MX_DAC1_Init+0x70>)
  1913. 8000f58: f006 fc90 bl 800787c <HAL_DAC_ConfigChannel>
  1914. 8000f5c: 4603 mov r3, r0
  1915. 8000f5e: 2b00 cmp r3, #0
  1916. 8000f60: d001 beq.n 8000f66 <MX_DAC1_Init+0x52>
  1917. {
  1918. Error_Handler();
  1919. 8000f62: f000 ff55 bl 8001e10 <Error_Handler>
  1920. }
  1921. /** DAC channel OUT2 config
  1922. */
  1923. if (HAL_DAC_ConfigChannel(&hdac1, &sConfig, DAC_CHANNEL_2) != HAL_OK)
  1924. 8000f66: 1d3b adds r3, r7, #4
  1925. 8000f68: 2210 movs r2, #16
  1926. 8000f6a: 4619 mov r1, r3
  1927. 8000f6c: 4805 ldr r0, [pc, #20] @ (8000f84 <MX_DAC1_Init+0x70>)
  1928. 8000f6e: f006 fc85 bl 800787c <HAL_DAC_ConfigChannel>
  1929. 8000f72: 4603 mov r3, r0
  1930. 8000f74: 2b00 cmp r3, #0
  1931. 8000f76: d001 beq.n 8000f7c <MX_DAC1_Init+0x68>
  1932. {
  1933. Error_Handler();
  1934. 8000f78: f000 ff4a bl 8001e10 <Error_Handler>
  1935. }
  1936. /* USER CODE BEGIN DAC1_Init 2 */
  1937. /* USER CODE END DAC1_Init 2 */
  1938. }
  1939. 8000f7c: bf00 nop
  1940. 8000f7e: 3728 adds r7, #40 @ 0x28
  1941. 8000f80: 46bd mov sp, r7
  1942. 8000f82: bd80 pop {r7, pc}
  1943. 8000f84: 24000424 .word 0x24000424
  1944. 8000f88: 40007400 .word 0x40007400
  1945. 08000f8c <MX_RNG_Init>:
  1946. * @brief RNG Initialization Function
  1947. * @param None
  1948. * @retval None
  1949. */
  1950. static void MX_RNG_Init(void)
  1951. {
  1952. 8000f8c: b580 push {r7, lr}
  1953. 8000f8e: af00 add r7, sp, #0
  1954. /* USER CODE END RNG_Init 0 */
  1955. /* USER CODE BEGIN RNG_Init 1 */
  1956. /* USER CODE END RNG_Init 1 */
  1957. hrng.Instance = RNG;
  1958. 8000f90: 4b07 ldr r3, [pc, #28] @ (8000fb0 <MX_RNG_Init+0x24>)
  1959. 8000f92: 4a08 ldr r2, [pc, #32] @ (8000fb4 <MX_RNG_Init+0x28>)
  1960. 8000f94: 601a str r2, [r3, #0]
  1961. hrng.Init.ClockErrorDetection = RNG_CED_ENABLE;
  1962. 8000f96: 4b06 ldr r3, [pc, #24] @ (8000fb0 <MX_RNG_Init+0x24>)
  1963. 8000f98: 2200 movs r2, #0
  1964. 8000f9a: 605a str r2, [r3, #4]
  1965. if (HAL_RNG_Init(&hrng) != HAL_OK)
  1966. 8000f9c: 4804 ldr r0, [pc, #16] @ (8000fb0 <MX_RNG_Init+0x24>)
  1967. 8000f9e: f00d fc5f bl 800e860 <HAL_RNG_Init>
  1968. 8000fa2: 4603 mov r3, r0
  1969. 8000fa4: 2b00 cmp r3, #0
  1970. 8000fa6: d001 beq.n 8000fac <MX_RNG_Init+0x20>
  1971. {
  1972. Error_Handler();
  1973. 8000fa8: f000 ff32 bl 8001e10 <Error_Handler>
  1974. }
  1975. /* USER CODE BEGIN RNG_Init 2 */
  1976. /* USER CODE END RNG_Init 2 */
  1977. }
  1978. 8000fac: bf00 nop
  1979. 8000fae: bd80 pop {r7, pc}
  1980. 8000fb0: 24000438 .word 0x24000438
  1981. 8000fb4: 48021800 .word 0x48021800
  1982. 08000fb8 <MX_TIM1_Init>:
  1983. * @brief TIM1 Initialization Function
  1984. * @param None
  1985. * @retval None
  1986. */
  1987. static void MX_TIM1_Init(void)
  1988. {
  1989. 8000fb8: b5b0 push {r4, r5, r7, lr}
  1990. 8000fba: b096 sub sp, #88 @ 0x58
  1991. 8000fbc: af00 add r7, sp, #0
  1992. /* USER CODE BEGIN TIM1_Init 0 */
  1993. /* USER CODE END TIM1_Init 0 */
  1994. TIM_MasterConfigTypeDef sMasterConfig = {0};
  1995. 8000fbe: f107 034c add.w r3, r7, #76 @ 0x4c
  1996. 8000fc2: 2200 movs r2, #0
  1997. 8000fc4: 601a str r2, [r3, #0]
  1998. 8000fc6: 605a str r2, [r3, #4]
  1999. 8000fc8: 609a str r2, [r3, #8]
  2000. TIM_OC_InitTypeDef sConfigOC = {0};
  2001. 8000fca: f107 0330 add.w r3, r7, #48 @ 0x30
  2002. 8000fce: 2200 movs r2, #0
  2003. 8000fd0: 601a str r2, [r3, #0]
  2004. 8000fd2: 605a str r2, [r3, #4]
  2005. 8000fd4: 609a str r2, [r3, #8]
  2006. 8000fd6: 60da str r2, [r3, #12]
  2007. 8000fd8: 611a str r2, [r3, #16]
  2008. 8000fda: 615a str r2, [r3, #20]
  2009. 8000fdc: 619a str r2, [r3, #24]
  2010. TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
  2011. 8000fde: 1d3b adds r3, r7, #4
  2012. 8000fe0: 222c movs r2, #44 @ 0x2c
  2013. 8000fe2: 2100 movs r1, #0
  2014. 8000fe4: 4618 mov r0, r3
  2015. 8000fe6: f016 fdb6 bl 8017b56 <memset>
  2016. /* USER CODE BEGIN TIM1_Init 1 */
  2017. /* USER CODE END TIM1_Init 1 */
  2018. htim1.Instance = TIM1;
  2019. 8000fea: 4b3e ldr r3, [pc, #248] @ (80010e4 <MX_TIM1_Init+0x12c>)
  2020. 8000fec: 4a3e ldr r2, [pc, #248] @ (80010e8 <MX_TIM1_Init+0x130>)
  2021. 8000fee: 601a str r2, [r3, #0]
  2022. htim1.Init.Prescaler = 199;
  2023. 8000ff0: 4b3c ldr r3, [pc, #240] @ (80010e4 <MX_TIM1_Init+0x12c>)
  2024. 8000ff2: 22c7 movs r2, #199 @ 0xc7
  2025. 8000ff4: 605a str r2, [r3, #4]
  2026. htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
  2027. 8000ff6: 4b3b ldr r3, [pc, #236] @ (80010e4 <MX_TIM1_Init+0x12c>)
  2028. 8000ff8: 2200 movs r2, #0
  2029. 8000ffa: 609a str r2, [r3, #8]
  2030. htim1.Init.Period = 999;
  2031. 8000ffc: 4b39 ldr r3, [pc, #228] @ (80010e4 <MX_TIM1_Init+0x12c>)
  2032. 8000ffe: f240 32e7 movw r2, #999 @ 0x3e7
  2033. 8001002: 60da str r2, [r3, #12]
  2034. htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  2035. 8001004: 4b37 ldr r3, [pc, #220] @ (80010e4 <MX_TIM1_Init+0x12c>)
  2036. 8001006: 2200 movs r2, #0
  2037. 8001008: 611a str r2, [r3, #16]
  2038. htim1.Init.RepetitionCounter = 0;
  2039. 800100a: 4b36 ldr r3, [pc, #216] @ (80010e4 <MX_TIM1_Init+0x12c>)
  2040. 800100c: 2200 movs r2, #0
  2041. 800100e: 615a str r2, [r3, #20]
  2042. htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  2043. 8001010: 4b34 ldr r3, [pc, #208] @ (80010e4 <MX_TIM1_Init+0x12c>)
  2044. 8001012: 2280 movs r2, #128 @ 0x80
  2045. 8001014: 619a str r2, [r3, #24]
  2046. if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
  2047. 8001016: 4833 ldr r0, [pc, #204] @ (80010e4 <MX_TIM1_Init+0x12c>)
  2048. 8001018: f00d fdc4 bl 800eba4 <HAL_TIM_PWM_Init>
  2049. 800101c: 4603 mov r3, r0
  2050. 800101e: 2b00 cmp r3, #0
  2051. 8001020: d001 beq.n 8001026 <MX_TIM1_Init+0x6e>
  2052. {
  2053. Error_Handler();
  2054. 8001022: f000 fef5 bl 8001e10 <Error_Handler>
  2055. }
  2056. sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  2057. 8001026: 2300 movs r3, #0
  2058. 8001028: 64fb str r3, [r7, #76] @ 0x4c
  2059. sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
  2060. 800102a: 2300 movs r3, #0
  2061. 800102c: 653b str r3, [r7, #80] @ 0x50
  2062. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  2063. 800102e: 2300 movs r3, #0
  2064. 8001030: 657b str r3, [r7, #84] @ 0x54
  2065. if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
  2066. 8001032: f107 034c add.w r3, r7, #76 @ 0x4c
  2067. 8001036: 4619 mov r1, r3
  2068. 8001038: 482a ldr r0, [pc, #168] @ (80010e4 <MX_TIM1_Init+0x12c>)
  2069. 800103a: f00f fb17 bl 801066c <HAL_TIMEx_MasterConfigSynchronization>
  2070. 800103e: 4603 mov r3, r0
  2071. 8001040: 2b00 cmp r3, #0
  2072. 8001042: d001 beq.n 8001048 <MX_TIM1_Init+0x90>
  2073. {
  2074. Error_Handler();
  2075. 8001044: f000 fee4 bl 8001e10 <Error_Handler>
  2076. }
  2077. sConfigOC.OCMode = TIM_OCMODE_PWM1;
  2078. 8001048: 2360 movs r3, #96 @ 0x60
  2079. 800104a: 633b str r3, [r7, #48] @ 0x30
  2080. sConfigOC.Pulse = 99;
  2081. 800104c: 2363 movs r3, #99 @ 0x63
  2082. 800104e: 637b str r3, [r7, #52] @ 0x34
  2083. sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  2084. 8001050: 2300 movs r3, #0
  2085. 8001052: 63bb str r3, [r7, #56] @ 0x38
  2086. sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
  2087. 8001054: 2300 movs r3, #0
  2088. 8001056: 63fb str r3, [r7, #60] @ 0x3c
  2089. sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  2090. 8001058: 2300 movs r3, #0
  2091. 800105a: 643b str r3, [r7, #64] @ 0x40
  2092. sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
  2093. 800105c: 2300 movs r3, #0
  2094. 800105e: 647b str r3, [r7, #68] @ 0x44
  2095. sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
  2096. 8001060: 2300 movs r3, #0
  2097. 8001062: 64bb str r3, [r7, #72] @ 0x48
  2098. if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
  2099. 8001064: f107 0330 add.w r3, r7, #48 @ 0x30
  2100. 8001068: 2204 movs r2, #4
  2101. 800106a: 4619 mov r1, r3
  2102. 800106c: 481d ldr r0, [pc, #116] @ (80010e4 <MX_TIM1_Init+0x12c>)
  2103. 800106e: f00e faeb bl 800f648 <HAL_TIM_PWM_ConfigChannel>
  2104. 8001072: 4603 mov r3, r0
  2105. 8001074: 2b00 cmp r3, #0
  2106. 8001076: d001 beq.n 800107c <MX_TIM1_Init+0xc4>
  2107. {
  2108. Error_Handler();
  2109. 8001078: f000 feca bl 8001e10 <Error_Handler>
  2110. }
  2111. sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
  2112. 800107c: 2300 movs r3, #0
  2113. 800107e: 607b str r3, [r7, #4]
  2114. sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
  2115. 8001080: 2300 movs r3, #0
  2116. 8001082: 60bb str r3, [r7, #8]
  2117. sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
  2118. 8001084: 2300 movs r3, #0
  2119. 8001086: 60fb str r3, [r7, #12]
  2120. sBreakDeadTimeConfig.DeadTime = 0;
  2121. 8001088: 2300 movs r3, #0
  2122. 800108a: 613b str r3, [r7, #16]
  2123. sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
  2124. 800108c: 2300 movs r3, #0
  2125. 800108e: 617b str r3, [r7, #20]
  2126. sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
  2127. 8001090: f44f 5300 mov.w r3, #8192 @ 0x2000
  2128. 8001094: 61bb str r3, [r7, #24]
  2129. sBreakDeadTimeConfig.BreakFilter = 0;
  2130. 8001096: 2300 movs r3, #0
  2131. 8001098: 61fb str r3, [r7, #28]
  2132. sBreakDeadTimeConfig.Break2State = TIM_BREAK2_DISABLE;
  2133. 800109a: 2300 movs r3, #0
  2134. 800109c: 623b str r3, [r7, #32]
  2135. sBreakDeadTimeConfig.Break2Polarity = TIM_BREAK2POLARITY_HIGH;
  2136. 800109e: f04f 7300 mov.w r3, #33554432 @ 0x2000000
  2137. 80010a2: 627b str r3, [r7, #36] @ 0x24
  2138. sBreakDeadTimeConfig.Break2Filter = 0;
  2139. 80010a4: 2300 movs r3, #0
  2140. 80010a6: 62bb str r3, [r7, #40] @ 0x28
  2141. sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
  2142. 80010a8: 2300 movs r3, #0
  2143. 80010aa: 62fb str r3, [r7, #44] @ 0x2c
  2144. if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK)
  2145. 80010ac: 1d3b adds r3, r7, #4
  2146. 80010ae: 4619 mov r1, r3
  2147. 80010b0: 480c ldr r0, [pc, #48] @ (80010e4 <MX_TIM1_Init+0x12c>)
  2148. 80010b2: f00f fb69 bl 8010788 <HAL_TIMEx_ConfigBreakDeadTime>
  2149. 80010b6: 4603 mov r3, r0
  2150. 80010b8: 2b00 cmp r3, #0
  2151. 80010ba: d001 beq.n 80010c0 <MX_TIM1_Init+0x108>
  2152. {
  2153. Error_Handler();
  2154. 80010bc: f000 fea8 bl 8001e10 <Error_Handler>
  2155. }
  2156. /* USER CODE BEGIN TIM1_Init 2 */
  2157. memcpy(&fanTimerConfigOC, &sConfigOC, sizeof(TIM_OC_InitTypeDef));
  2158. 80010c0: 4b0a ldr r3, [pc, #40] @ (80010ec <MX_TIM1_Init+0x134>)
  2159. 80010c2: 461d mov r5, r3
  2160. 80010c4: f107 0430 add.w r4, r7, #48 @ 0x30
  2161. 80010c8: cc0f ldmia r4!, {r0, r1, r2, r3}
  2162. 80010ca: c50f stmia r5!, {r0, r1, r2, r3}
  2163. 80010cc: e894 0007 ldmia.w r4, {r0, r1, r2}
  2164. 80010d0: e885 0007 stmia.w r5, {r0, r1, r2}
  2165. /* USER CODE END TIM1_Init 2 */
  2166. HAL_TIM_MspPostInit(&htim1);
  2167. 80010d4: 4803 ldr r0, [pc, #12] @ (80010e4 <MX_TIM1_Init+0x12c>)
  2168. 80010d6: f002 fd29 bl 8003b2c <HAL_TIM_MspPostInit>
  2169. }
  2170. 80010da: bf00 nop
  2171. 80010dc: 3758 adds r7, #88 @ 0x58
  2172. 80010de: 46bd mov sp, r7
  2173. 80010e0: bdb0 pop {r4, r5, r7, pc}
  2174. 80010e2: bf00 nop
  2175. 80010e4: 2400044c .word 0x2400044c
  2176. 80010e8: 40010000 .word 0x40010000
  2177. 80010ec: 24000768 .word 0x24000768
  2178. 080010f0 <MX_TIM2_Init>:
  2179. * @brief TIM2 Initialization Function
  2180. * @param None
  2181. * @retval None
  2182. */
  2183. static void MX_TIM2_Init(void)
  2184. {
  2185. 80010f0: b580 push {r7, lr}
  2186. 80010f2: b08c sub sp, #48 @ 0x30
  2187. 80010f4: af00 add r7, sp, #0
  2188. /* USER CODE BEGIN TIM2_Init 0 */
  2189. /* USER CODE END TIM2_Init 0 */
  2190. TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  2191. 80010f6: f107 0320 add.w r3, r7, #32
  2192. 80010fa: 2200 movs r2, #0
  2193. 80010fc: 601a str r2, [r3, #0]
  2194. 80010fe: 605a str r2, [r3, #4]
  2195. 8001100: 609a str r2, [r3, #8]
  2196. 8001102: 60da str r2, [r3, #12]
  2197. TIM_MasterConfigTypeDef sMasterConfig = {0};
  2198. 8001104: f107 0314 add.w r3, r7, #20
  2199. 8001108: 2200 movs r2, #0
  2200. 800110a: 601a str r2, [r3, #0]
  2201. 800110c: 605a str r2, [r3, #4]
  2202. 800110e: 609a str r2, [r3, #8]
  2203. TIM_IC_InitTypeDef sConfigIC = {0};
  2204. 8001110: 1d3b adds r3, r7, #4
  2205. 8001112: 2200 movs r2, #0
  2206. 8001114: 601a str r2, [r3, #0]
  2207. 8001116: 605a str r2, [r3, #4]
  2208. 8001118: 609a str r2, [r3, #8]
  2209. 800111a: 60da str r2, [r3, #12]
  2210. /* USER CODE BEGIN TIM2_Init 1 */
  2211. /* USER CODE END TIM2_Init 1 */
  2212. htim2.Instance = TIM2;
  2213. 800111c: 4b31 ldr r3, [pc, #196] @ (80011e4 <MX_TIM2_Init+0xf4>)
  2214. 800111e: f04f 4280 mov.w r2, #1073741824 @ 0x40000000
  2215. 8001122: 601a str r2, [r3, #0]
  2216. htim2.Init.Prescaler = 0;
  2217. 8001124: 4b2f ldr r3, [pc, #188] @ (80011e4 <MX_TIM2_Init+0xf4>)
  2218. 8001126: 2200 movs r2, #0
  2219. 8001128: 605a str r2, [r3, #4]
  2220. htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  2221. 800112a: 4b2e ldr r3, [pc, #184] @ (80011e4 <MX_TIM2_Init+0xf4>)
  2222. 800112c: 2200 movs r2, #0
  2223. 800112e: 609a str r2, [r3, #8]
  2224. htim2.Init.Period = 9999999;
  2225. 8001130: 4b2c ldr r3, [pc, #176] @ (80011e4 <MX_TIM2_Init+0xf4>)
  2226. 8001132: 4a2d ldr r2, [pc, #180] @ (80011e8 <MX_TIM2_Init+0xf8>)
  2227. 8001134: 60da str r2, [r3, #12]
  2228. htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV2;
  2229. 8001136: 4b2b ldr r3, [pc, #172] @ (80011e4 <MX_TIM2_Init+0xf4>)
  2230. 8001138: f44f 7280 mov.w r2, #256 @ 0x100
  2231. 800113c: 611a str r2, [r3, #16]
  2232. htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  2233. 800113e: 4b29 ldr r3, [pc, #164] @ (80011e4 <MX_TIM2_Init+0xf4>)
  2234. 8001140: 2280 movs r2, #128 @ 0x80
  2235. 8001142: 619a str r2, [r3, #24]
  2236. if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
  2237. 8001144: 4827 ldr r0, [pc, #156] @ (80011e4 <MX_TIM2_Init+0xf4>)
  2238. 8001146: f00d fbed bl 800e924 <HAL_TIM_Base_Init>
  2239. 800114a: 4603 mov r3, r0
  2240. 800114c: 2b00 cmp r3, #0
  2241. 800114e: d001 beq.n 8001154 <MX_TIM2_Init+0x64>
  2242. {
  2243. Error_Handler();
  2244. 8001150: f000 fe5e bl 8001e10 <Error_Handler>
  2245. }
  2246. sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  2247. 8001154: f44f 5380 mov.w r3, #4096 @ 0x1000
  2248. 8001158: 623b str r3, [r7, #32]
  2249. if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
  2250. 800115a: f107 0320 add.w r3, r7, #32
  2251. 800115e: 4619 mov r1, r3
  2252. 8001160: 4820 ldr r0, [pc, #128] @ (80011e4 <MX_TIM2_Init+0xf4>)
  2253. 8001162: f00e fb85 bl 800f870 <HAL_TIM_ConfigClockSource>
  2254. 8001166: 4603 mov r3, r0
  2255. 8001168: 2b00 cmp r3, #0
  2256. 800116a: d001 beq.n 8001170 <MX_TIM2_Init+0x80>
  2257. {
  2258. Error_Handler();
  2259. 800116c: f000 fe50 bl 8001e10 <Error_Handler>
  2260. }
  2261. if (HAL_TIM_IC_Init(&htim2) != HAL_OK)
  2262. 8001170: 481c ldr r0, [pc, #112] @ (80011e4 <MX_TIM2_Init+0xf4>)
  2263. 8001172: f00d ff13 bl 800ef9c <HAL_TIM_IC_Init>
  2264. 8001176: 4603 mov r3, r0
  2265. 8001178: 2b00 cmp r3, #0
  2266. 800117a: d001 beq.n 8001180 <MX_TIM2_Init+0x90>
  2267. {
  2268. Error_Handler();
  2269. 800117c: f000 fe48 bl 8001e10 <Error_Handler>
  2270. }
  2271. sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;
  2272. 8001180: 2320 movs r3, #32
  2273. 8001182: 617b str r3, [r7, #20]
  2274. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_ENABLE;
  2275. 8001184: 2380 movs r3, #128 @ 0x80
  2276. 8001186: 61fb str r3, [r7, #28]
  2277. if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
  2278. 8001188: f107 0314 add.w r3, r7, #20
  2279. 800118c: 4619 mov r1, r3
  2280. 800118e: 4815 ldr r0, [pc, #84] @ (80011e4 <MX_TIM2_Init+0xf4>)
  2281. 8001190: f00f fa6c bl 801066c <HAL_TIMEx_MasterConfigSynchronization>
  2282. 8001194: 4603 mov r3, r0
  2283. 8001196: 2b00 cmp r3, #0
  2284. 8001198: d001 beq.n 800119e <MX_TIM2_Init+0xae>
  2285. {
  2286. Error_Handler();
  2287. 800119a: f000 fe39 bl 8001e10 <Error_Handler>
  2288. }
  2289. sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
  2290. 800119e: 2300 movs r3, #0
  2291. 80011a0: 607b str r3, [r7, #4]
  2292. sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
  2293. 80011a2: 2301 movs r3, #1
  2294. 80011a4: 60bb str r3, [r7, #8]
  2295. sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
  2296. 80011a6: 2300 movs r3, #0
  2297. 80011a8: 60fb str r3, [r7, #12]
  2298. sConfigIC.ICFilter = 0;
  2299. 80011aa: 2300 movs r3, #0
  2300. 80011ac: 613b str r3, [r7, #16]
  2301. if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_3) != HAL_OK)
  2302. 80011ae: 1d3b adds r3, r7, #4
  2303. 80011b0: 2208 movs r2, #8
  2304. 80011b2: 4619 mov r1, r3
  2305. 80011b4: 480b ldr r0, [pc, #44] @ (80011e4 <MX_TIM2_Init+0xf4>)
  2306. 80011b6: f00e f9aa bl 800f50e <HAL_TIM_IC_ConfigChannel>
  2307. 80011ba: 4603 mov r3, r0
  2308. 80011bc: 2b00 cmp r3, #0
  2309. 80011be: d001 beq.n 80011c4 <MX_TIM2_Init+0xd4>
  2310. {
  2311. Error_Handler();
  2312. 80011c0: f000 fe26 bl 8001e10 <Error_Handler>
  2313. }
  2314. if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_4) != HAL_OK)
  2315. 80011c4: 1d3b adds r3, r7, #4
  2316. 80011c6: 220c movs r2, #12
  2317. 80011c8: 4619 mov r1, r3
  2318. 80011ca: 4806 ldr r0, [pc, #24] @ (80011e4 <MX_TIM2_Init+0xf4>)
  2319. 80011cc: f00e f99f bl 800f50e <HAL_TIM_IC_ConfigChannel>
  2320. 80011d0: 4603 mov r3, r0
  2321. 80011d2: 2b00 cmp r3, #0
  2322. 80011d4: d001 beq.n 80011da <MX_TIM2_Init+0xea>
  2323. {
  2324. Error_Handler();
  2325. 80011d6: f000 fe1b bl 8001e10 <Error_Handler>
  2326. }
  2327. /* USER CODE BEGIN TIM2_Init 2 */
  2328. /* USER CODE END TIM2_Init 2 */
  2329. }
  2330. 80011da: bf00 nop
  2331. 80011dc: 3730 adds r7, #48 @ 0x30
  2332. 80011de: 46bd mov sp, r7
  2333. 80011e0: bd80 pop {r7, pc}
  2334. 80011e2: bf00 nop
  2335. 80011e4: 24000498 .word 0x24000498
  2336. 80011e8: 0098967f .word 0x0098967f
  2337. 080011ec <MX_TIM3_Init>:
  2338. * @brief TIM3 Initialization Function
  2339. * @param None
  2340. * @retval None
  2341. */
  2342. static void MX_TIM3_Init(void)
  2343. {
  2344. 80011ec: b5b0 push {r4, r5, r7, lr}
  2345. 80011ee: b08a sub sp, #40 @ 0x28
  2346. 80011f0: af00 add r7, sp, #0
  2347. /* USER CODE BEGIN TIM3_Init 0 */
  2348. /* USER CODE END TIM3_Init 0 */
  2349. TIM_MasterConfigTypeDef sMasterConfig = {0};
  2350. 80011f2: f107 031c add.w r3, r7, #28
  2351. 80011f6: 2200 movs r2, #0
  2352. 80011f8: 601a str r2, [r3, #0]
  2353. 80011fa: 605a str r2, [r3, #4]
  2354. 80011fc: 609a str r2, [r3, #8]
  2355. TIM_OC_InitTypeDef sConfigOC = {0};
  2356. 80011fe: 463b mov r3, r7
  2357. 8001200: 2200 movs r2, #0
  2358. 8001202: 601a str r2, [r3, #0]
  2359. 8001204: 605a str r2, [r3, #4]
  2360. 8001206: 609a str r2, [r3, #8]
  2361. 8001208: 60da str r2, [r3, #12]
  2362. 800120a: 611a str r2, [r3, #16]
  2363. 800120c: 615a str r2, [r3, #20]
  2364. 800120e: 619a str r2, [r3, #24]
  2365. /* USER CODE BEGIN TIM3_Init 1 */
  2366. /* USER CODE END TIM3_Init 1 */
  2367. htim3.Instance = TIM3;
  2368. 8001210: 4b48 ldr r3, [pc, #288] @ (8001334 <MX_TIM3_Init+0x148>)
  2369. 8001212: 4a49 ldr r2, [pc, #292] @ (8001338 <MX_TIM3_Init+0x14c>)
  2370. 8001214: 601a str r2, [r3, #0]
  2371. htim3.Init.Prescaler = 199;
  2372. 8001216: 4b47 ldr r3, [pc, #284] @ (8001334 <MX_TIM3_Init+0x148>)
  2373. 8001218: 22c7 movs r2, #199 @ 0xc7
  2374. 800121a: 605a str r2, [r3, #4]
  2375. htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
  2376. 800121c: 4b45 ldr r3, [pc, #276] @ (8001334 <MX_TIM3_Init+0x148>)
  2377. 800121e: 2200 movs r2, #0
  2378. 8001220: 609a str r2, [r3, #8]
  2379. htim3.Init.Period = 999;
  2380. 8001222: 4b44 ldr r3, [pc, #272] @ (8001334 <MX_TIM3_Init+0x148>)
  2381. 8001224: f240 32e7 movw r2, #999 @ 0x3e7
  2382. 8001228: 60da str r2, [r3, #12]
  2383. htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  2384. 800122a: 4b42 ldr r3, [pc, #264] @ (8001334 <MX_TIM3_Init+0x148>)
  2385. 800122c: 2200 movs r2, #0
  2386. 800122e: 611a str r2, [r3, #16]
  2387. htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  2388. 8001230: 4b40 ldr r3, [pc, #256] @ (8001334 <MX_TIM3_Init+0x148>)
  2389. 8001232: 2280 movs r2, #128 @ 0x80
  2390. 8001234: 619a str r2, [r3, #24]
  2391. if (HAL_TIM_PWM_Init(&htim3) != HAL_OK)
  2392. 8001236: 483f ldr r0, [pc, #252] @ (8001334 <MX_TIM3_Init+0x148>)
  2393. 8001238: f00d fcb4 bl 800eba4 <HAL_TIM_PWM_Init>
  2394. 800123c: 4603 mov r3, r0
  2395. 800123e: 2b00 cmp r3, #0
  2396. 8001240: d001 beq.n 8001246 <MX_TIM3_Init+0x5a>
  2397. {
  2398. Error_Handler();
  2399. 8001242: f000 fde5 bl 8001e10 <Error_Handler>
  2400. }
  2401. sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  2402. 8001246: 2300 movs r3, #0
  2403. 8001248: 61fb str r3, [r7, #28]
  2404. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  2405. 800124a: 2300 movs r3, #0
  2406. 800124c: 627b str r3, [r7, #36] @ 0x24
  2407. if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
  2408. 800124e: f107 031c add.w r3, r7, #28
  2409. 8001252: 4619 mov r1, r3
  2410. 8001254: 4837 ldr r0, [pc, #220] @ (8001334 <MX_TIM3_Init+0x148>)
  2411. 8001256: f00f fa09 bl 801066c <HAL_TIMEx_MasterConfigSynchronization>
  2412. 800125a: 4603 mov r3, r0
  2413. 800125c: 2b00 cmp r3, #0
  2414. 800125e: d001 beq.n 8001264 <MX_TIM3_Init+0x78>
  2415. {
  2416. Error_Handler();
  2417. 8001260: f000 fdd6 bl 8001e10 <Error_Handler>
  2418. }
  2419. sConfigOC.OCMode = TIM_OCMODE_COMBINED_PWM1;
  2420. 8001264: 4b35 ldr r3, [pc, #212] @ (800133c <MX_TIM3_Init+0x150>)
  2421. 8001266: 603b str r3, [r7, #0]
  2422. sConfigOC.Pulse = 500;
  2423. 8001268: f44f 73fa mov.w r3, #500 @ 0x1f4
  2424. 800126c: 607b str r3, [r7, #4]
  2425. sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  2426. 800126e: 2300 movs r3, #0
  2427. 8001270: 60bb str r3, [r7, #8]
  2428. sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  2429. 8001272: 2300 movs r3, #0
  2430. 8001274: 613b str r3, [r7, #16]
  2431. if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
  2432. 8001276: 463b mov r3, r7
  2433. 8001278: 2200 movs r2, #0
  2434. 800127a: 4619 mov r1, r3
  2435. 800127c: 482d ldr r0, [pc, #180] @ (8001334 <MX_TIM3_Init+0x148>)
  2436. 800127e: f00e f9e3 bl 800f648 <HAL_TIM_PWM_ConfigChannel>
  2437. 8001282: 4603 mov r3, r0
  2438. 8001284: 2b00 cmp r3, #0
  2439. 8001286: d001 beq.n 800128c <MX_TIM3_Init+0xa0>
  2440. {
  2441. Error_Handler();
  2442. 8001288: f000 fdc2 bl 8001e10 <Error_Handler>
  2443. }
  2444. __HAL_TIM_DISABLE_OCxPRELOAD(&htim3, TIM_CHANNEL_1);
  2445. 800128c: 4b29 ldr r3, [pc, #164] @ (8001334 <MX_TIM3_Init+0x148>)
  2446. 800128e: 681b ldr r3, [r3, #0]
  2447. 8001290: 699a ldr r2, [r3, #24]
  2448. 8001292: 4b28 ldr r3, [pc, #160] @ (8001334 <MX_TIM3_Init+0x148>)
  2449. 8001294: 681b ldr r3, [r3, #0]
  2450. 8001296: f022 0208 bic.w r2, r2, #8
  2451. 800129a: 619a str r2, [r3, #24]
  2452. sConfigOC.OCMode = TIM_OCMODE_PWM1;
  2453. 800129c: 2360 movs r3, #96 @ 0x60
  2454. 800129e: 603b str r3, [r7, #0]
  2455. if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
  2456. 80012a0: 463b mov r3, r7
  2457. 80012a2: 2204 movs r2, #4
  2458. 80012a4: 4619 mov r1, r3
  2459. 80012a6: 4823 ldr r0, [pc, #140] @ (8001334 <MX_TIM3_Init+0x148>)
  2460. 80012a8: f00e f9ce bl 800f648 <HAL_TIM_PWM_ConfigChannel>
  2461. 80012ac: 4603 mov r3, r0
  2462. 80012ae: 2b00 cmp r3, #0
  2463. 80012b0: d001 beq.n 80012b6 <MX_TIM3_Init+0xca>
  2464. {
  2465. Error_Handler();
  2466. 80012b2: f000 fdad bl 8001e10 <Error_Handler>
  2467. }
  2468. __HAL_TIM_DISABLE_OCxPRELOAD(&htim3, TIM_CHANNEL_2);
  2469. 80012b6: 4b1f ldr r3, [pc, #124] @ (8001334 <MX_TIM3_Init+0x148>)
  2470. 80012b8: 681b ldr r3, [r3, #0]
  2471. 80012ba: 699a ldr r2, [r3, #24]
  2472. 80012bc: 4b1d ldr r3, [pc, #116] @ (8001334 <MX_TIM3_Init+0x148>)
  2473. 80012be: 681b ldr r3, [r3, #0]
  2474. 80012c0: f422 6200 bic.w r2, r2, #2048 @ 0x800
  2475. 80012c4: 619a str r2, [r3, #24]
  2476. if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
  2477. 80012c6: 463b mov r3, r7
  2478. 80012c8: 2208 movs r2, #8
  2479. 80012ca: 4619 mov r1, r3
  2480. 80012cc: 4819 ldr r0, [pc, #100] @ (8001334 <MX_TIM3_Init+0x148>)
  2481. 80012ce: f00e f9bb bl 800f648 <HAL_TIM_PWM_ConfigChannel>
  2482. 80012d2: 4603 mov r3, r0
  2483. 80012d4: 2b00 cmp r3, #0
  2484. 80012d6: d001 beq.n 80012dc <MX_TIM3_Init+0xf0>
  2485. {
  2486. Error_Handler();
  2487. 80012d8: f000 fd9a bl 8001e10 <Error_Handler>
  2488. }
  2489. __HAL_TIM_DISABLE_OCxPRELOAD(&htim3, TIM_CHANNEL_3);
  2490. 80012dc: 4b15 ldr r3, [pc, #84] @ (8001334 <MX_TIM3_Init+0x148>)
  2491. 80012de: 681b ldr r3, [r3, #0]
  2492. 80012e0: 69da ldr r2, [r3, #28]
  2493. 80012e2: 4b14 ldr r3, [pc, #80] @ (8001334 <MX_TIM3_Init+0x148>)
  2494. 80012e4: 681b ldr r3, [r3, #0]
  2495. 80012e6: f022 0208 bic.w r2, r2, #8
  2496. 80012ea: 61da str r2, [r3, #28]
  2497. if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
  2498. 80012ec: 463b mov r3, r7
  2499. 80012ee: 220c movs r2, #12
  2500. 80012f0: 4619 mov r1, r3
  2501. 80012f2: 4810 ldr r0, [pc, #64] @ (8001334 <MX_TIM3_Init+0x148>)
  2502. 80012f4: f00e f9a8 bl 800f648 <HAL_TIM_PWM_ConfigChannel>
  2503. 80012f8: 4603 mov r3, r0
  2504. 80012fa: 2b00 cmp r3, #0
  2505. 80012fc: d001 beq.n 8001302 <MX_TIM3_Init+0x116>
  2506. {
  2507. Error_Handler();
  2508. 80012fe: f000 fd87 bl 8001e10 <Error_Handler>
  2509. }
  2510. __HAL_TIM_DISABLE_OCxPRELOAD(&htim3, TIM_CHANNEL_4);
  2511. 8001302: 4b0c ldr r3, [pc, #48] @ (8001334 <MX_TIM3_Init+0x148>)
  2512. 8001304: 681b ldr r3, [r3, #0]
  2513. 8001306: 69da ldr r2, [r3, #28]
  2514. 8001308: 4b0a ldr r3, [pc, #40] @ (8001334 <MX_TIM3_Init+0x148>)
  2515. 800130a: 681b ldr r3, [r3, #0]
  2516. 800130c: f422 6200 bic.w r2, r2, #2048 @ 0x800
  2517. 8001310: 61da str r2, [r3, #28]
  2518. /* USER CODE BEGIN TIM3_Init 2 */
  2519. memcpy(&motorXYTimerConfigOC, &sConfigOC, sizeof(TIM_OC_InitTypeDef));
  2520. 8001312: 4b0b ldr r3, [pc, #44] @ (8001340 <MX_TIM3_Init+0x154>)
  2521. 8001314: 461d mov r5, r3
  2522. 8001316: 463c mov r4, r7
  2523. 8001318: cc0f ldmia r4!, {r0, r1, r2, r3}
  2524. 800131a: c50f stmia r5!, {r0, r1, r2, r3}
  2525. 800131c: e894 0007 ldmia.w r4, {r0, r1, r2}
  2526. 8001320: e885 0007 stmia.w r5, {r0, r1, r2}
  2527. /* USER CODE END TIM3_Init 2 */
  2528. HAL_TIM_MspPostInit(&htim3);
  2529. 8001324: 4803 ldr r0, [pc, #12] @ (8001334 <MX_TIM3_Init+0x148>)
  2530. 8001326: f002 fc01 bl 8003b2c <HAL_TIM_MspPostInit>
  2531. }
  2532. 800132a: bf00 nop
  2533. 800132c: 3728 adds r7, #40 @ 0x28
  2534. 800132e: 46bd mov sp, r7
  2535. 8001330: bdb0 pop {r4, r5, r7, pc}
  2536. 8001332: bf00 nop
  2537. 8001334: 240004e4 .word 0x240004e4
  2538. 8001338: 40000400 .word 0x40000400
  2539. 800133c: 00010040 .word 0x00010040
  2540. 8001340: 24000784 .word 0x24000784
  2541. 08001344 <MX_TIM4_Init>:
  2542. * @brief TIM4 Initialization Function
  2543. * @param None
  2544. * @retval None
  2545. */
  2546. static void MX_TIM4_Init(void)
  2547. {
  2548. 8001344: b580 push {r7, lr}
  2549. 8001346: b08c sub sp, #48 @ 0x30
  2550. 8001348: af00 add r7, sp, #0
  2551. /* USER CODE BEGIN TIM4_Init 0 */
  2552. /* USER CODE END TIM4_Init 0 */
  2553. TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  2554. 800134a: f107 0320 add.w r3, r7, #32
  2555. 800134e: 2200 movs r2, #0
  2556. 8001350: 601a str r2, [r3, #0]
  2557. 8001352: 605a str r2, [r3, #4]
  2558. 8001354: 609a str r2, [r3, #8]
  2559. 8001356: 60da str r2, [r3, #12]
  2560. TIM_MasterConfigTypeDef sMasterConfig = {0};
  2561. 8001358: f107 0314 add.w r3, r7, #20
  2562. 800135c: 2200 movs r2, #0
  2563. 800135e: 601a str r2, [r3, #0]
  2564. 8001360: 605a str r2, [r3, #4]
  2565. 8001362: 609a str r2, [r3, #8]
  2566. TIM_IC_InitTypeDef sConfigIC = {0};
  2567. 8001364: 1d3b adds r3, r7, #4
  2568. 8001366: 2200 movs r2, #0
  2569. 8001368: 601a str r2, [r3, #0]
  2570. 800136a: 605a str r2, [r3, #4]
  2571. 800136c: 609a str r2, [r3, #8]
  2572. 800136e: 60da str r2, [r3, #12]
  2573. /* USER CODE BEGIN TIM4_Init 1 */
  2574. /* USER CODE END TIM4_Init 1 */
  2575. htim4.Instance = TIM4;
  2576. 8001370: 4b31 ldr r3, [pc, #196] @ (8001438 <MX_TIM4_Init+0xf4>)
  2577. 8001372: 4a32 ldr r2, [pc, #200] @ (800143c <MX_TIM4_Init+0xf8>)
  2578. 8001374: 601a str r2, [r3, #0]
  2579. htim4.Init.Prescaler = 19999;
  2580. 8001376: 4b30 ldr r3, [pc, #192] @ (8001438 <MX_TIM4_Init+0xf4>)
  2581. 8001378: f644 621f movw r2, #19999 @ 0x4e1f
  2582. 800137c: 605a str r2, [r3, #4]
  2583. htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
  2584. 800137e: 4b2e ldr r3, [pc, #184] @ (8001438 <MX_TIM4_Init+0xf4>)
  2585. 8001380: 2200 movs r2, #0
  2586. 8001382: 609a str r2, [r3, #8]
  2587. htim4.Init.Period = 9999;
  2588. 8001384: 4b2c ldr r3, [pc, #176] @ (8001438 <MX_TIM4_Init+0xf4>)
  2589. 8001386: f242 720f movw r2, #9999 @ 0x270f
  2590. 800138a: 60da str r2, [r3, #12]
  2591. htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  2592. 800138c: 4b2a ldr r3, [pc, #168] @ (8001438 <MX_TIM4_Init+0xf4>)
  2593. 800138e: 2200 movs r2, #0
  2594. 8001390: 611a str r2, [r3, #16]
  2595. htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  2596. 8001392: 4b29 ldr r3, [pc, #164] @ (8001438 <MX_TIM4_Init+0xf4>)
  2597. 8001394: 2280 movs r2, #128 @ 0x80
  2598. 8001396: 619a str r2, [r3, #24]
  2599. if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
  2600. 8001398: 4827 ldr r0, [pc, #156] @ (8001438 <MX_TIM4_Init+0xf4>)
  2601. 800139a: f00d fac3 bl 800e924 <HAL_TIM_Base_Init>
  2602. 800139e: 4603 mov r3, r0
  2603. 80013a0: 2b00 cmp r3, #0
  2604. 80013a2: d001 beq.n 80013a8 <MX_TIM4_Init+0x64>
  2605. {
  2606. Error_Handler();
  2607. 80013a4: f000 fd34 bl 8001e10 <Error_Handler>
  2608. }
  2609. sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  2610. 80013a8: f44f 5380 mov.w r3, #4096 @ 0x1000
  2611. 80013ac: 623b str r3, [r7, #32]
  2612. if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK)
  2613. 80013ae: f107 0320 add.w r3, r7, #32
  2614. 80013b2: 4619 mov r1, r3
  2615. 80013b4: 4820 ldr r0, [pc, #128] @ (8001438 <MX_TIM4_Init+0xf4>)
  2616. 80013b6: f00e fa5b bl 800f870 <HAL_TIM_ConfigClockSource>
  2617. 80013ba: 4603 mov r3, r0
  2618. 80013bc: 2b00 cmp r3, #0
  2619. 80013be: d001 beq.n 80013c4 <MX_TIM4_Init+0x80>
  2620. {
  2621. Error_Handler();
  2622. 80013c0: f000 fd26 bl 8001e10 <Error_Handler>
  2623. }
  2624. if (HAL_TIM_IC_Init(&htim4) != HAL_OK)
  2625. 80013c4: 481c ldr r0, [pc, #112] @ (8001438 <MX_TIM4_Init+0xf4>)
  2626. 80013c6: f00d fde9 bl 800ef9c <HAL_TIM_IC_Init>
  2627. 80013ca: 4603 mov r3, r0
  2628. 80013cc: 2b00 cmp r3, #0
  2629. 80013ce: d001 beq.n 80013d4 <MX_TIM4_Init+0x90>
  2630. {
  2631. Error_Handler();
  2632. 80013d0: f000 fd1e bl 8001e10 <Error_Handler>
  2633. }
  2634. sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  2635. 80013d4: 2300 movs r3, #0
  2636. 80013d6: 617b str r3, [r7, #20]
  2637. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  2638. 80013d8: 2300 movs r3, #0
  2639. 80013da: 61fb str r3, [r7, #28]
  2640. if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
  2641. 80013dc: f107 0314 add.w r3, r7, #20
  2642. 80013e0: 4619 mov r1, r3
  2643. 80013e2: 4815 ldr r0, [pc, #84] @ (8001438 <MX_TIM4_Init+0xf4>)
  2644. 80013e4: f00f f942 bl 801066c <HAL_TIMEx_MasterConfigSynchronization>
  2645. 80013e8: 4603 mov r3, r0
  2646. 80013ea: 2b00 cmp r3, #0
  2647. 80013ec: d001 beq.n 80013f2 <MX_TIM4_Init+0xae>
  2648. {
  2649. Error_Handler();
  2650. 80013ee: f000 fd0f bl 8001e10 <Error_Handler>
  2651. }
  2652. sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
  2653. 80013f2: 2300 movs r3, #0
  2654. 80013f4: 607b str r3, [r7, #4]
  2655. sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
  2656. 80013f6: 2301 movs r3, #1
  2657. 80013f8: 60bb str r3, [r7, #8]
  2658. sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
  2659. 80013fa: 2300 movs r3, #0
  2660. 80013fc: 60fb str r3, [r7, #12]
  2661. sConfigIC.ICFilter = 0;
  2662. 80013fe: 2300 movs r3, #0
  2663. 8001400: 613b str r3, [r7, #16]
  2664. if (HAL_TIM_IC_ConfigChannel(&htim4, &sConfigIC, TIM_CHANNEL_3) != HAL_OK)
  2665. 8001402: 1d3b adds r3, r7, #4
  2666. 8001404: 2208 movs r2, #8
  2667. 8001406: 4619 mov r1, r3
  2668. 8001408: 480b ldr r0, [pc, #44] @ (8001438 <MX_TIM4_Init+0xf4>)
  2669. 800140a: f00e f880 bl 800f50e <HAL_TIM_IC_ConfigChannel>
  2670. 800140e: 4603 mov r3, r0
  2671. 8001410: 2b00 cmp r3, #0
  2672. 8001412: d001 beq.n 8001418 <MX_TIM4_Init+0xd4>
  2673. {
  2674. Error_Handler();
  2675. 8001414: f000 fcfc bl 8001e10 <Error_Handler>
  2676. }
  2677. if (HAL_TIM_IC_ConfigChannel(&htim4, &sConfigIC, TIM_CHANNEL_4) != HAL_OK)
  2678. 8001418: 1d3b adds r3, r7, #4
  2679. 800141a: 220c movs r2, #12
  2680. 800141c: 4619 mov r1, r3
  2681. 800141e: 4806 ldr r0, [pc, #24] @ (8001438 <MX_TIM4_Init+0xf4>)
  2682. 8001420: f00e f875 bl 800f50e <HAL_TIM_IC_ConfigChannel>
  2683. 8001424: 4603 mov r3, r0
  2684. 8001426: 2b00 cmp r3, #0
  2685. 8001428: d001 beq.n 800142e <MX_TIM4_Init+0xea>
  2686. {
  2687. Error_Handler();
  2688. 800142a: f000 fcf1 bl 8001e10 <Error_Handler>
  2689. }
  2690. /* USER CODE BEGIN TIM4_Init 2 */
  2691. /* USER CODE END TIM4_Init 2 */
  2692. }
  2693. 800142e: bf00 nop
  2694. 8001430: 3730 adds r7, #48 @ 0x30
  2695. 8001432: 46bd mov sp, r7
  2696. 8001434: bd80 pop {r7, pc}
  2697. 8001436: bf00 nop
  2698. 8001438: 24000530 .word 0x24000530
  2699. 800143c: 40000800 .word 0x40000800
  2700. 08001440 <MX_UART8_Init>:
  2701. * @brief UART8 Initialization Function
  2702. * @param None
  2703. * @retval None
  2704. */
  2705. static void MX_UART8_Init(void)
  2706. {
  2707. 8001440: b580 push {r7, lr}
  2708. 8001442: af00 add r7, sp, #0
  2709. /* USER CODE END UART8_Init 0 */
  2710. /* USER CODE BEGIN UART8_Init 1 */
  2711. /* USER CODE END UART8_Init 1 */
  2712. huart8.Instance = UART8;
  2713. 8001444: 4b22 ldr r3, [pc, #136] @ (80014d0 <MX_UART8_Init+0x90>)
  2714. 8001446: 4a23 ldr r2, [pc, #140] @ (80014d4 <MX_UART8_Init+0x94>)
  2715. 8001448: 601a str r2, [r3, #0]
  2716. huart8.Init.BaudRate = 115200;
  2717. 800144a: 4b21 ldr r3, [pc, #132] @ (80014d0 <MX_UART8_Init+0x90>)
  2718. 800144c: f44f 32e1 mov.w r2, #115200 @ 0x1c200
  2719. 8001450: 605a str r2, [r3, #4]
  2720. huart8.Init.WordLength = UART_WORDLENGTH_8B;
  2721. 8001452: 4b1f ldr r3, [pc, #124] @ (80014d0 <MX_UART8_Init+0x90>)
  2722. 8001454: 2200 movs r2, #0
  2723. 8001456: 609a str r2, [r3, #8]
  2724. huart8.Init.StopBits = UART_STOPBITS_1;
  2725. 8001458: 4b1d ldr r3, [pc, #116] @ (80014d0 <MX_UART8_Init+0x90>)
  2726. 800145a: 2200 movs r2, #0
  2727. 800145c: 60da str r2, [r3, #12]
  2728. huart8.Init.Parity = UART_PARITY_NONE;
  2729. 800145e: 4b1c ldr r3, [pc, #112] @ (80014d0 <MX_UART8_Init+0x90>)
  2730. 8001460: 2200 movs r2, #0
  2731. 8001462: 611a str r2, [r3, #16]
  2732. huart8.Init.Mode = UART_MODE_TX_RX;
  2733. 8001464: 4b1a ldr r3, [pc, #104] @ (80014d0 <MX_UART8_Init+0x90>)
  2734. 8001466: 220c movs r2, #12
  2735. 8001468: 615a str r2, [r3, #20]
  2736. huart8.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  2737. 800146a: 4b19 ldr r3, [pc, #100] @ (80014d0 <MX_UART8_Init+0x90>)
  2738. 800146c: 2200 movs r2, #0
  2739. 800146e: 619a str r2, [r3, #24]
  2740. huart8.Init.OverSampling = UART_OVERSAMPLING_16;
  2741. 8001470: 4b17 ldr r3, [pc, #92] @ (80014d0 <MX_UART8_Init+0x90>)
  2742. 8001472: 2200 movs r2, #0
  2743. 8001474: 61da str r2, [r3, #28]
  2744. huart8.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  2745. 8001476: 4b16 ldr r3, [pc, #88] @ (80014d0 <MX_UART8_Init+0x90>)
  2746. 8001478: 2200 movs r2, #0
  2747. 800147a: 621a str r2, [r3, #32]
  2748. huart8.Init.ClockPrescaler = UART_PRESCALER_DIV1;
  2749. 800147c: 4b14 ldr r3, [pc, #80] @ (80014d0 <MX_UART8_Init+0x90>)
  2750. 800147e: 2200 movs r2, #0
  2751. 8001480: 625a str r2, [r3, #36] @ 0x24
  2752. huart8.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  2753. 8001482: 4b13 ldr r3, [pc, #76] @ (80014d0 <MX_UART8_Init+0x90>)
  2754. 8001484: 2200 movs r2, #0
  2755. 8001486: 629a str r2, [r3, #40] @ 0x28
  2756. if (HAL_UART_Init(&huart8) != HAL_OK)
  2757. 8001488: 4811 ldr r0, [pc, #68] @ (80014d0 <MX_UART8_Init+0x90>)
  2758. 800148a: f00f fa19 bl 80108c0 <HAL_UART_Init>
  2759. 800148e: 4603 mov r3, r0
  2760. 8001490: 2b00 cmp r3, #0
  2761. 8001492: d001 beq.n 8001498 <MX_UART8_Init+0x58>
  2762. {
  2763. Error_Handler();
  2764. 8001494: f000 fcbc bl 8001e10 <Error_Handler>
  2765. }
  2766. if (HAL_UARTEx_SetTxFifoThreshold(&huart8, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
  2767. 8001498: 2100 movs r1, #0
  2768. 800149a: 480d ldr r0, [pc, #52] @ (80014d0 <MX_UART8_Init+0x90>)
  2769. 800149c: f011 ff47 bl 801332e <HAL_UARTEx_SetTxFifoThreshold>
  2770. 80014a0: 4603 mov r3, r0
  2771. 80014a2: 2b00 cmp r3, #0
  2772. 80014a4: d001 beq.n 80014aa <MX_UART8_Init+0x6a>
  2773. {
  2774. Error_Handler();
  2775. 80014a6: f000 fcb3 bl 8001e10 <Error_Handler>
  2776. }
  2777. if (HAL_UARTEx_SetRxFifoThreshold(&huart8, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
  2778. 80014aa: 2100 movs r1, #0
  2779. 80014ac: 4808 ldr r0, [pc, #32] @ (80014d0 <MX_UART8_Init+0x90>)
  2780. 80014ae: f011 ff7c bl 80133aa <HAL_UARTEx_SetRxFifoThreshold>
  2781. 80014b2: 4603 mov r3, r0
  2782. 80014b4: 2b00 cmp r3, #0
  2783. 80014b6: d001 beq.n 80014bc <MX_UART8_Init+0x7c>
  2784. {
  2785. Error_Handler();
  2786. 80014b8: f000 fcaa bl 8001e10 <Error_Handler>
  2787. }
  2788. if (HAL_UARTEx_DisableFifoMode(&huart8) != HAL_OK)
  2789. 80014bc: 4804 ldr r0, [pc, #16] @ (80014d0 <MX_UART8_Init+0x90>)
  2790. 80014be: f011 fefd bl 80132bc <HAL_UARTEx_DisableFifoMode>
  2791. 80014c2: 4603 mov r3, r0
  2792. 80014c4: 2b00 cmp r3, #0
  2793. 80014c6: d001 beq.n 80014cc <MX_UART8_Init+0x8c>
  2794. {
  2795. Error_Handler();
  2796. 80014c8: f000 fca2 bl 8001e10 <Error_Handler>
  2797. }
  2798. /* USER CODE BEGIN UART8_Init 2 */
  2799. /* USER CODE END UART8_Init 2 */
  2800. }
  2801. 80014cc: bf00 nop
  2802. 80014ce: bd80 pop {r7, pc}
  2803. 80014d0: 2400057c .word 0x2400057c
  2804. 80014d4: 40007c00 .word 0x40007c00
  2805. 080014d8 <MX_USART1_UART_Init>:
  2806. * @brief USART1 Initialization Function
  2807. * @param None
  2808. * @retval None
  2809. */
  2810. static void MX_USART1_UART_Init(void)
  2811. {
  2812. 80014d8: b580 push {r7, lr}
  2813. 80014da: af00 add r7, sp, #0
  2814. /* USER CODE END USART1_Init 0 */
  2815. /* USER CODE BEGIN USART1_Init 1 */
  2816. /* USER CODE END USART1_Init 1 */
  2817. huart1.Instance = USART1;
  2818. 80014dc: 4b24 ldr r3, [pc, #144] @ (8001570 <MX_USART1_UART_Init+0x98>)
  2819. 80014de: 4a25 ldr r2, [pc, #148] @ (8001574 <MX_USART1_UART_Init+0x9c>)
  2820. 80014e0: 601a str r2, [r3, #0]
  2821. huart1.Init.BaudRate = 115200;
  2822. 80014e2: 4b23 ldr r3, [pc, #140] @ (8001570 <MX_USART1_UART_Init+0x98>)
  2823. 80014e4: f44f 32e1 mov.w r2, #115200 @ 0x1c200
  2824. 80014e8: 605a str r2, [r3, #4]
  2825. huart1.Init.WordLength = UART_WORDLENGTH_8B;
  2826. 80014ea: 4b21 ldr r3, [pc, #132] @ (8001570 <MX_USART1_UART_Init+0x98>)
  2827. 80014ec: 2200 movs r2, #0
  2828. 80014ee: 609a str r2, [r3, #8]
  2829. huart1.Init.StopBits = UART_STOPBITS_1;
  2830. 80014f0: 4b1f ldr r3, [pc, #124] @ (8001570 <MX_USART1_UART_Init+0x98>)
  2831. 80014f2: 2200 movs r2, #0
  2832. 80014f4: 60da str r2, [r3, #12]
  2833. huart1.Init.Parity = UART_PARITY_NONE;
  2834. 80014f6: 4b1e ldr r3, [pc, #120] @ (8001570 <MX_USART1_UART_Init+0x98>)
  2835. 80014f8: 2200 movs r2, #0
  2836. 80014fa: 611a str r2, [r3, #16]
  2837. huart1.Init.Mode = UART_MODE_TX_RX;
  2838. 80014fc: 4b1c ldr r3, [pc, #112] @ (8001570 <MX_USART1_UART_Init+0x98>)
  2839. 80014fe: 220c movs r2, #12
  2840. 8001500: 615a str r2, [r3, #20]
  2841. huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  2842. 8001502: 4b1b ldr r3, [pc, #108] @ (8001570 <MX_USART1_UART_Init+0x98>)
  2843. 8001504: 2200 movs r2, #0
  2844. 8001506: 619a str r2, [r3, #24]
  2845. huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  2846. 8001508: 4b19 ldr r3, [pc, #100] @ (8001570 <MX_USART1_UART_Init+0x98>)
  2847. 800150a: 2200 movs r2, #0
  2848. 800150c: 61da str r2, [r3, #28]
  2849. huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  2850. 800150e: 4b18 ldr r3, [pc, #96] @ (8001570 <MX_USART1_UART_Init+0x98>)
  2851. 8001510: 2200 movs r2, #0
  2852. 8001512: 621a str r2, [r3, #32]
  2853. huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
  2854. 8001514: 4b16 ldr r3, [pc, #88] @ (8001570 <MX_USART1_UART_Init+0x98>)
  2855. 8001516: 2200 movs r2, #0
  2856. 8001518: 625a str r2, [r3, #36] @ 0x24
  2857. huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_TXINVERT_INIT;
  2858. 800151a: 4b15 ldr r3, [pc, #84] @ (8001570 <MX_USART1_UART_Init+0x98>)
  2859. 800151c: 2201 movs r2, #1
  2860. 800151e: 629a str r2, [r3, #40] @ 0x28
  2861. huart1.AdvancedInit.TxPinLevelInvert = UART_ADVFEATURE_TXINV_ENABLE;
  2862. 8001520: 4b13 ldr r3, [pc, #76] @ (8001570 <MX_USART1_UART_Init+0x98>)
  2863. 8001522: f44f 3200 mov.w r2, #131072 @ 0x20000
  2864. 8001526: 62da str r2, [r3, #44] @ 0x2c
  2865. if (HAL_UART_Init(&huart1) != HAL_OK)
  2866. 8001528: 4811 ldr r0, [pc, #68] @ (8001570 <MX_USART1_UART_Init+0x98>)
  2867. 800152a: f00f f9c9 bl 80108c0 <HAL_UART_Init>
  2868. 800152e: 4603 mov r3, r0
  2869. 8001530: 2b00 cmp r3, #0
  2870. 8001532: d001 beq.n 8001538 <MX_USART1_UART_Init+0x60>
  2871. {
  2872. Error_Handler();
  2873. 8001534: f000 fc6c bl 8001e10 <Error_Handler>
  2874. }
  2875. if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
  2876. 8001538: 2100 movs r1, #0
  2877. 800153a: 480d ldr r0, [pc, #52] @ (8001570 <MX_USART1_UART_Init+0x98>)
  2878. 800153c: f011 fef7 bl 801332e <HAL_UARTEx_SetTxFifoThreshold>
  2879. 8001540: 4603 mov r3, r0
  2880. 8001542: 2b00 cmp r3, #0
  2881. 8001544: d001 beq.n 800154a <MX_USART1_UART_Init+0x72>
  2882. {
  2883. Error_Handler();
  2884. 8001546: f000 fc63 bl 8001e10 <Error_Handler>
  2885. }
  2886. if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
  2887. 800154a: 2100 movs r1, #0
  2888. 800154c: 4808 ldr r0, [pc, #32] @ (8001570 <MX_USART1_UART_Init+0x98>)
  2889. 800154e: f011 ff2c bl 80133aa <HAL_UARTEx_SetRxFifoThreshold>
  2890. 8001552: 4603 mov r3, r0
  2891. 8001554: 2b00 cmp r3, #0
  2892. 8001556: d001 beq.n 800155c <MX_USART1_UART_Init+0x84>
  2893. {
  2894. Error_Handler();
  2895. 8001558: f000 fc5a bl 8001e10 <Error_Handler>
  2896. }
  2897. if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
  2898. 800155c: 4804 ldr r0, [pc, #16] @ (8001570 <MX_USART1_UART_Init+0x98>)
  2899. 800155e: f011 fead bl 80132bc <HAL_UARTEx_DisableFifoMode>
  2900. 8001562: 4603 mov r3, r0
  2901. 8001564: 2b00 cmp r3, #0
  2902. 8001566: d001 beq.n 800156c <MX_USART1_UART_Init+0x94>
  2903. {
  2904. Error_Handler();
  2905. 8001568: f000 fc52 bl 8001e10 <Error_Handler>
  2906. }
  2907. /* USER CODE BEGIN USART1_Init 2 */
  2908. /* USER CODE END USART1_Init 2 */
  2909. }
  2910. 800156c: bf00 nop
  2911. 800156e: bd80 pop {r7, pc}
  2912. 8001570: 24000610 .word 0x24000610
  2913. 8001574: 40011000 .word 0x40011000
  2914. 08001578 <MX_DMA_Init>:
  2915. /**
  2916. * Enable DMA controller clock
  2917. */
  2918. static void MX_DMA_Init(void)
  2919. {
  2920. 8001578: b580 push {r7, lr}
  2921. 800157a: b082 sub sp, #8
  2922. 800157c: af00 add r7, sp, #0
  2923. /* DMA controller clock enable */
  2924. __HAL_RCC_DMA1_CLK_ENABLE();
  2925. 800157e: 4b15 ldr r3, [pc, #84] @ (80015d4 <MX_DMA_Init+0x5c>)
  2926. 8001580: f8d3 30d8 ldr.w r3, [r3, #216] @ 0xd8
  2927. 8001584: 4a13 ldr r2, [pc, #76] @ (80015d4 <MX_DMA_Init+0x5c>)
  2928. 8001586: f043 0301 orr.w r3, r3, #1
  2929. 800158a: f8c2 30d8 str.w r3, [r2, #216] @ 0xd8
  2930. 800158e: 4b11 ldr r3, [pc, #68] @ (80015d4 <MX_DMA_Init+0x5c>)
  2931. 8001590: f8d3 30d8 ldr.w r3, [r3, #216] @ 0xd8
  2932. 8001594: f003 0301 and.w r3, r3, #1
  2933. 8001598: 607b str r3, [r7, #4]
  2934. 800159a: 687b ldr r3, [r7, #4]
  2935. /* DMA interrupt init */
  2936. /* DMA1_Stream0_IRQn interrupt configuration */
  2937. HAL_NVIC_SetPriority(DMA1_Stream0_IRQn, 5, 0);
  2938. 800159c: 2200 movs r2, #0
  2939. 800159e: 2105 movs r1, #5
  2940. 80015a0: 200b movs r0, #11
  2941. 80015a2: f005 fdc1 bl 8007128 <HAL_NVIC_SetPriority>
  2942. HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn);
  2943. 80015a6: 200b movs r0, #11
  2944. 80015a8: f005 fdd8 bl 800715c <HAL_NVIC_EnableIRQ>
  2945. /* DMA1_Stream1_IRQn interrupt configuration */
  2946. HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 5, 0);
  2947. 80015ac: 2200 movs r2, #0
  2948. 80015ae: 2105 movs r1, #5
  2949. 80015b0: 200c movs r0, #12
  2950. 80015b2: f005 fdb9 bl 8007128 <HAL_NVIC_SetPriority>
  2951. HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn);
  2952. 80015b6: 200c movs r0, #12
  2953. 80015b8: f005 fdd0 bl 800715c <HAL_NVIC_EnableIRQ>
  2954. /* DMA1_Stream2_IRQn interrupt configuration */
  2955. HAL_NVIC_SetPriority(DMA1_Stream2_IRQn, 5, 0);
  2956. 80015bc: 2200 movs r2, #0
  2957. 80015be: 2105 movs r1, #5
  2958. 80015c0: 200d movs r0, #13
  2959. 80015c2: f005 fdb1 bl 8007128 <HAL_NVIC_SetPriority>
  2960. HAL_NVIC_EnableIRQ(DMA1_Stream2_IRQn);
  2961. 80015c6: 200d movs r0, #13
  2962. 80015c8: f005 fdc8 bl 800715c <HAL_NVIC_EnableIRQ>
  2963. }
  2964. 80015cc: bf00 nop
  2965. 80015ce: 3708 adds r7, #8
  2966. 80015d0: 46bd mov sp, r7
  2967. 80015d2: bd80 pop {r7, pc}
  2968. 80015d4: 58024400 .word 0x58024400
  2969. 080015d8 <MX_GPIO_Init>:
  2970. * @brief GPIO Initialization Function
  2971. * @param None
  2972. * @retval None
  2973. */
  2974. static void MX_GPIO_Init(void)
  2975. {
  2976. 80015d8: b580 push {r7, lr}
  2977. 80015da: b08c sub sp, #48 @ 0x30
  2978. 80015dc: af00 add r7, sp, #0
  2979. GPIO_InitTypeDef GPIO_InitStruct = {0};
  2980. 80015de: f107 031c add.w r3, r7, #28
  2981. 80015e2: 2200 movs r2, #0
  2982. 80015e4: 601a str r2, [r3, #0]
  2983. 80015e6: 605a str r2, [r3, #4]
  2984. 80015e8: 609a str r2, [r3, #8]
  2985. 80015ea: 60da str r2, [r3, #12]
  2986. 80015ec: 611a str r2, [r3, #16]
  2987. /* USER CODE BEGIN MX_GPIO_Init_1 */
  2988. /* USER CODE END MX_GPIO_Init_1 */
  2989. /* GPIO Ports Clock Enable */
  2990. __HAL_RCC_GPIOH_CLK_ENABLE();
  2991. 80015ee: 4b58 ldr r3, [pc, #352] @ (8001750 <MX_GPIO_Init+0x178>)
  2992. 80015f0: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2993. 80015f4: 4a56 ldr r2, [pc, #344] @ (8001750 <MX_GPIO_Init+0x178>)
  2994. 80015f6: f043 0380 orr.w r3, r3, #128 @ 0x80
  2995. 80015fa: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  2996. 80015fe: 4b54 ldr r3, [pc, #336] @ (8001750 <MX_GPIO_Init+0x178>)
  2997. 8001600: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2998. 8001604: f003 0380 and.w r3, r3, #128 @ 0x80
  2999. 8001608: 61bb str r3, [r7, #24]
  3000. 800160a: 69bb ldr r3, [r7, #24]
  3001. __HAL_RCC_GPIOC_CLK_ENABLE();
  3002. 800160c: 4b50 ldr r3, [pc, #320] @ (8001750 <MX_GPIO_Init+0x178>)
  3003. 800160e: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  3004. 8001612: 4a4f ldr r2, [pc, #316] @ (8001750 <MX_GPIO_Init+0x178>)
  3005. 8001614: f043 0304 orr.w r3, r3, #4
  3006. 8001618: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  3007. 800161c: 4b4c ldr r3, [pc, #304] @ (8001750 <MX_GPIO_Init+0x178>)
  3008. 800161e: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  3009. 8001622: f003 0304 and.w r3, r3, #4
  3010. 8001626: 617b str r3, [r7, #20]
  3011. 8001628: 697b ldr r3, [r7, #20]
  3012. __HAL_RCC_GPIOA_CLK_ENABLE();
  3013. 800162a: 4b49 ldr r3, [pc, #292] @ (8001750 <MX_GPIO_Init+0x178>)
  3014. 800162c: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  3015. 8001630: 4a47 ldr r2, [pc, #284] @ (8001750 <MX_GPIO_Init+0x178>)
  3016. 8001632: f043 0301 orr.w r3, r3, #1
  3017. 8001636: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  3018. 800163a: 4b45 ldr r3, [pc, #276] @ (8001750 <MX_GPIO_Init+0x178>)
  3019. 800163c: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  3020. 8001640: f003 0301 and.w r3, r3, #1
  3021. 8001644: 613b str r3, [r7, #16]
  3022. 8001646: 693b ldr r3, [r7, #16]
  3023. __HAL_RCC_GPIOB_CLK_ENABLE();
  3024. 8001648: 4b41 ldr r3, [pc, #260] @ (8001750 <MX_GPIO_Init+0x178>)
  3025. 800164a: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  3026. 800164e: 4a40 ldr r2, [pc, #256] @ (8001750 <MX_GPIO_Init+0x178>)
  3027. 8001650: f043 0302 orr.w r3, r3, #2
  3028. 8001654: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  3029. 8001658: 4b3d ldr r3, [pc, #244] @ (8001750 <MX_GPIO_Init+0x178>)
  3030. 800165a: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  3031. 800165e: f003 0302 and.w r3, r3, #2
  3032. 8001662: 60fb str r3, [r7, #12]
  3033. 8001664: 68fb ldr r3, [r7, #12]
  3034. __HAL_RCC_GPIOE_CLK_ENABLE();
  3035. 8001666: 4b3a ldr r3, [pc, #232] @ (8001750 <MX_GPIO_Init+0x178>)
  3036. 8001668: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  3037. 800166c: 4a38 ldr r2, [pc, #224] @ (8001750 <MX_GPIO_Init+0x178>)
  3038. 800166e: f043 0310 orr.w r3, r3, #16
  3039. 8001672: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  3040. 8001676: 4b36 ldr r3, [pc, #216] @ (8001750 <MX_GPIO_Init+0x178>)
  3041. 8001678: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  3042. 800167c: f003 0310 and.w r3, r3, #16
  3043. 8001680: 60bb str r3, [r7, #8]
  3044. 8001682: 68bb ldr r3, [r7, #8]
  3045. __HAL_RCC_GPIOD_CLK_ENABLE();
  3046. 8001684: 4b32 ldr r3, [pc, #200] @ (8001750 <MX_GPIO_Init+0x178>)
  3047. 8001686: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  3048. 800168a: 4a31 ldr r2, [pc, #196] @ (8001750 <MX_GPIO_Init+0x178>)
  3049. 800168c: f043 0308 orr.w r3, r3, #8
  3050. 8001690: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  3051. 8001694: 4b2e ldr r3, [pc, #184] @ (8001750 <MX_GPIO_Init+0x178>)
  3052. 8001696: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  3053. 800169a: f003 0308 and.w r3, r3, #8
  3054. 800169e: 607b str r3, [r7, #4]
  3055. 80016a0: 687b ldr r3, [r7, #4]
  3056. /*Configure GPIO pin Output Level */
  3057. HAL_GPIO_WritePin(GPIOE, GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10
  3058. 80016a2: 2200 movs r2, #0
  3059. 80016a4: f24e 7180 movw r1, #59264 @ 0xe780
  3060. 80016a8: 482a ldr r0, [pc, #168] @ (8001754 <MX_GPIO_Init+0x17c>)
  3061. 80016aa: f009 fa37 bl 800ab1c <HAL_GPIO_WritePin>
  3062. |GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15, GPIO_PIN_RESET);
  3063. /*Configure GPIO pin Output Level */
  3064. HAL_GPIO_WritePin(GPIOD, GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7, GPIO_PIN_RESET);
  3065. 80016ae: 2200 movs r2, #0
  3066. 80016b0: 21f0 movs r1, #240 @ 0xf0
  3067. 80016b2: 4829 ldr r0, [pc, #164] @ (8001758 <MX_GPIO_Init+0x180>)
  3068. 80016b4: f009 fa32 bl 800ab1c <HAL_GPIO_WritePin>
  3069. /*Configure GPIO pins : PE7 PE8 PE9 PE10
  3070. PE13 PE14 PE15 */
  3071. GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10
  3072. 80016b8: f24e 7380 movw r3, #59264 @ 0xe780
  3073. 80016bc: 61fb str r3, [r7, #28]
  3074. |GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
  3075. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  3076. 80016be: 2301 movs r3, #1
  3077. 80016c0: 623b str r3, [r7, #32]
  3078. GPIO_InitStruct.Pull = GPIO_NOPULL;
  3079. 80016c2: 2300 movs r3, #0
  3080. 80016c4: 627b str r3, [r7, #36] @ 0x24
  3081. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  3082. 80016c6: 2300 movs r3, #0
  3083. 80016c8: 62bb str r3, [r7, #40] @ 0x28
  3084. HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
  3085. 80016ca: f107 031c add.w r3, r7, #28
  3086. 80016ce: 4619 mov r1, r3
  3087. 80016d0: 4820 ldr r0, [pc, #128] @ (8001754 <MX_GPIO_Init+0x17c>)
  3088. 80016d2: f009 f85b bl 800a78c <HAL_GPIO_Init>
  3089. /*Configure GPIO pins : PD8 PD9 PD10 PD11
  3090. PD12 PD13 */
  3091. GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11
  3092. 80016d6: f44f 537c mov.w r3, #16128 @ 0x3f00
  3093. 80016da: 61fb str r3, [r7, #28]
  3094. |GPIO_PIN_12|GPIO_PIN_13;
  3095. GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
  3096. 80016dc: f44f 1344 mov.w r3, #3211264 @ 0x310000
  3097. 80016e0: 623b str r3, [r7, #32]
  3098. GPIO_InitStruct.Pull = GPIO_NOPULL;
  3099. 80016e2: 2300 movs r3, #0
  3100. 80016e4: 627b str r3, [r7, #36] @ 0x24
  3101. HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
  3102. 80016e6: f107 031c add.w r3, r7, #28
  3103. 80016ea: 4619 mov r1, r3
  3104. 80016ec: 481a ldr r0, [pc, #104] @ (8001758 <MX_GPIO_Init+0x180>)
  3105. 80016ee: f009 f84d bl 800a78c <HAL_GPIO_Init>
  3106. /*Configure GPIO pin : PD3 */
  3107. GPIO_InitStruct.Pin = GPIO_PIN_3;
  3108. 80016f2: 2308 movs r3, #8
  3109. 80016f4: 61fb str r3, [r7, #28]
  3110. GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  3111. 80016f6: 2300 movs r3, #0
  3112. 80016f8: 623b str r3, [r7, #32]
  3113. GPIO_InitStruct.Pull = GPIO_NOPULL;
  3114. 80016fa: 2300 movs r3, #0
  3115. 80016fc: 627b str r3, [r7, #36] @ 0x24
  3116. HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
  3117. 80016fe: f107 031c add.w r3, r7, #28
  3118. 8001702: 4619 mov r1, r3
  3119. 8001704: 4814 ldr r0, [pc, #80] @ (8001758 <MX_GPIO_Init+0x180>)
  3120. 8001706: f009 f841 bl 800a78c <HAL_GPIO_Init>
  3121. /*Configure GPIO pins : PD4 PD5 PD6 PD7 */
  3122. GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
  3123. 800170a: 23f0 movs r3, #240 @ 0xf0
  3124. 800170c: 61fb str r3, [r7, #28]
  3125. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  3126. 800170e: 2301 movs r3, #1
  3127. 8001710: 623b str r3, [r7, #32]
  3128. GPIO_InitStruct.Pull = GPIO_NOPULL;
  3129. 8001712: 2300 movs r3, #0
  3130. 8001714: 627b str r3, [r7, #36] @ 0x24
  3131. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  3132. 8001716: 2300 movs r3, #0
  3133. 8001718: 62bb str r3, [r7, #40] @ 0x28
  3134. HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
  3135. 800171a: f107 031c add.w r3, r7, #28
  3136. 800171e: 4619 mov r1, r3
  3137. 8001720: 480d ldr r0, [pc, #52] @ (8001758 <MX_GPIO_Init+0x180>)
  3138. 8001722: f009 f833 bl 800a78c <HAL_GPIO_Init>
  3139. /* EXTI interrupt init*/
  3140. HAL_NVIC_SetPriority(EXTI9_5_IRQn, 5, 0);
  3141. 8001726: 2200 movs r2, #0
  3142. 8001728: 2105 movs r1, #5
  3143. 800172a: 2017 movs r0, #23
  3144. 800172c: f005 fcfc bl 8007128 <HAL_NVIC_SetPriority>
  3145. HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);
  3146. 8001730: 2017 movs r0, #23
  3147. 8001732: f005 fd13 bl 800715c <HAL_NVIC_EnableIRQ>
  3148. HAL_NVIC_SetPriority(EXTI15_10_IRQn, 5, 0);
  3149. 8001736: 2200 movs r2, #0
  3150. 8001738: 2105 movs r1, #5
  3151. 800173a: 2028 movs r0, #40 @ 0x28
  3152. 800173c: f005 fcf4 bl 8007128 <HAL_NVIC_SetPriority>
  3153. HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
  3154. 8001740: 2028 movs r0, #40 @ 0x28
  3155. 8001742: f005 fd0b bl 800715c <HAL_NVIC_EnableIRQ>
  3156. /* USER CODE BEGIN MX_GPIO_Init_2 */
  3157. /* USER CODE END MX_GPIO_Init_2 */
  3158. }
  3159. 8001746: bf00 nop
  3160. 8001748: 3730 adds r7, #48 @ 0x30
  3161. 800174a: 46bd mov sp, r7
  3162. 800174c: bd80 pop {r7, pc}
  3163. 800174e: bf00 nop
  3164. 8001750: 58024400 .word 0x58024400
  3165. 8001754: 58021000 .word 0x58021000
  3166. 8001758: 58020c00 .word 0x58020c00
  3167. 0800175c <HAL_ADC_ConvCpltCallback>:
  3168. /* USER CODE BEGIN 4 */
  3169. void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)
  3170. {
  3171. 800175c: b580 push {r7, lr}
  3172. 800175e: b08e sub sp, #56 @ 0x38
  3173. 8001760: af00 add r7, sp, #0
  3174. 8001762: 6078 str r0, [r7, #4]
  3175. if(hadc->Instance == ADC1)
  3176. 8001764: 687b ldr r3, [r7, #4]
  3177. 8001766: 681b ldr r3, [r3, #0]
  3178. 8001768: 4a67 ldr r2, [pc, #412] @ (8001908 <HAL_ADC_ConvCpltCallback+0x1ac>)
  3179. 800176a: 4293 cmp r3, r2
  3180. 800176c: d13f bne.n 80017ee <HAL_ADC_ConvCpltCallback+0x92>
  3181. {
  3182. DbgLEDToggle(DBG_LED4);
  3183. 800176e: 2080 movs r0, #128 @ 0x80
  3184. 8001770: f001 fada bl 8002d28 <DbgLEDToggle>
  3185. SCB_InvalidateDCache_by_Addr((uint32_t*)(((uint32_t)adc1Data.adcDataBuffer) & ~(uint32_t)0x1F), __SCB_DCACHE_LINE_SIZE);
  3186. 8001774: 4b65 ldr r3, [pc, #404] @ (800190c <HAL_ADC_ConvCpltCallback+0x1b0>)
  3187. 8001776: f023 031f bic.w r3, r3, #31
  3188. 800177a: 637b str r3, [r7, #52] @ 0x34
  3189. 800177c: 2320 movs r3, #32
  3190. 800177e: 633b str r3, [r7, #48] @ 0x30
  3191. \param[in] dsize size of memory block (in number of bytes)
  3192. */
  3193. __STATIC_FORCEINLINE void SCB_InvalidateDCache_by_Addr (void *addr, int32_t dsize)
  3194. {
  3195. #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)
  3196. if ( dsize > 0 ) {
  3197. 8001780: 6b3b ldr r3, [r7, #48] @ 0x30
  3198. 8001782: 2b00 cmp r3, #0
  3199. 8001784: dd1d ble.n 80017c2 <HAL_ADC_ConvCpltCallback+0x66>
  3200. int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U));
  3201. 8001786: 6b7b ldr r3, [r7, #52] @ 0x34
  3202. 8001788: f003 021f and.w r2, r3, #31
  3203. 800178c: 6b3b ldr r3, [r7, #48] @ 0x30
  3204. 800178e: 4413 add r3, r2
  3205. 8001790: 62fb str r3, [r7, #44] @ 0x2c
  3206. uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */;
  3207. 8001792: 6b7b ldr r3, [r7, #52] @ 0x34
  3208. 8001794: 62bb str r3, [r7, #40] @ 0x28
  3209. __ASM volatile ("dsb 0xF":::"memory");
  3210. 8001796: f3bf 8f4f dsb sy
  3211. }
  3212. 800179a: bf00 nop
  3213. __DSB();
  3214. do {
  3215. SCB->DCIMVAC = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */
  3216. 800179c: 4a5c ldr r2, [pc, #368] @ (8001910 <HAL_ADC_ConvCpltCallback+0x1b4>)
  3217. 800179e: 6abb ldr r3, [r7, #40] @ 0x28
  3218. 80017a0: f8c2 325c str.w r3, [r2, #604] @ 0x25c
  3219. op_addr += __SCB_DCACHE_LINE_SIZE;
  3220. 80017a4: 6abb ldr r3, [r7, #40] @ 0x28
  3221. 80017a6: 3320 adds r3, #32
  3222. 80017a8: 62bb str r3, [r7, #40] @ 0x28
  3223. op_size -= __SCB_DCACHE_LINE_SIZE;
  3224. 80017aa: 6afb ldr r3, [r7, #44] @ 0x2c
  3225. 80017ac: 3b20 subs r3, #32
  3226. 80017ae: 62fb str r3, [r7, #44] @ 0x2c
  3227. } while ( op_size > 0 );
  3228. 80017b0: 6afb ldr r3, [r7, #44] @ 0x2c
  3229. 80017b2: 2b00 cmp r3, #0
  3230. 80017b4: dcf2 bgt.n 800179c <HAL_ADC_ConvCpltCallback+0x40>
  3231. __ASM volatile ("dsb 0xF":::"memory");
  3232. 80017b6: f3bf 8f4f dsb sy
  3233. }
  3234. 80017ba: bf00 nop
  3235. __ASM volatile ("isb 0xF":::"memory");
  3236. 80017bc: f3bf 8f6f isb sy
  3237. }
  3238. 80017c0: bf00 nop
  3239. __DSB();
  3240. __ISB();
  3241. }
  3242. #endif
  3243. }
  3244. 80017c2: bf00 nop
  3245. if(adc1MeasDataQueue != NULL)
  3246. 80017c4: 4b53 ldr r3, [pc, #332] @ (8001914 <HAL_ADC_ConvCpltCallback+0x1b8>)
  3247. 80017c6: 681b ldr r3, [r3, #0]
  3248. 80017c8: 2b00 cmp r3, #0
  3249. 80017ca: d006 beq.n 80017da <HAL_ADC_ConvCpltCallback+0x7e>
  3250. {
  3251. osMessageQueuePut(adc1MeasDataQueue, &adc1Data, 0, 0);
  3252. 80017cc: 4b51 ldr r3, [pc, #324] @ (8001914 <HAL_ADC_ConvCpltCallback+0x1b8>)
  3253. 80017ce: 6818 ldr r0, [r3, #0]
  3254. 80017d0: 2300 movs r3, #0
  3255. 80017d2: 2200 movs r2, #0
  3256. 80017d4: 494d ldr r1, [pc, #308] @ (800190c <HAL_ADC_ConvCpltCallback+0x1b0>)
  3257. 80017d6: f012 fa79 bl 8013ccc <osMessageQueuePut>
  3258. }
  3259. if(HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc1Data.adcDataBuffer, ADC1LastData) != HAL_OK)
  3260. 80017da: 2207 movs r2, #7
  3261. 80017dc: 494b ldr r1, [pc, #300] @ (800190c <HAL_ADC_ConvCpltCallback+0x1b0>)
  3262. 80017de: 484e ldr r0, [pc, #312] @ (8001918 <HAL_ADC_ConvCpltCallback+0x1bc>)
  3263. 80017e0: f004 f9fe bl 8005be0 <HAL_ADC_Start_DMA>
  3264. 80017e4: 4603 mov r3, r0
  3265. 80017e6: 2b00 cmp r3, #0
  3266. 80017e8: d001 beq.n 80017ee <HAL_ADC_ConvCpltCallback+0x92>
  3267. {
  3268. Error_Handler();
  3269. 80017ea: f000 fb11 bl 8001e10 <Error_Handler>
  3270. }
  3271. }
  3272. if(hadc->Instance == ADC2)
  3273. 80017ee: 687b ldr r3, [r7, #4]
  3274. 80017f0: 681b ldr r3, [r3, #0]
  3275. 80017f2: 4a4a ldr r2, [pc, #296] @ (800191c <HAL_ADC_ConvCpltCallback+0x1c0>)
  3276. 80017f4: 4293 cmp r3, r2
  3277. 80017f6: d13c bne.n 8001872 <HAL_ADC_ConvCpltCallback+0x116>
  3278. {
  3279. SCB_InvalidateDCache_by_Addr((uint32_t*)(((uint32_t)adc2Data.adcDataBuffer) & ~(uint32_t)0x1F), __SCB_DCACHE_LINE_SIZE);
  3280. 80017f8: 4b49 ldr r3, [pc, #292] @ (8001920 <HAL_ADC_ConvCpltCallback+0x1c4>)
  3281. 80017fa: f023 031f bic.w r3, r3, #31
  3282. 80017fe: 627b str r3, [r7, #36] @ 0x24
  3283. 8001800: 2320 movs r3, #32
  3284. 8001802: 623b str r3, [r7, #32]
  3285. if ( dsize > 0 ) {
  3286. 8001804: 6a3b ldr r3, [r7, #32]
  3287. 8001806: 2b00 cmp r3, #0
  3288. 8001808: dd1d ble.n 8001846 <HAL_ADC_ConvCpltCallback+0xea>
  3289. int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U));
  3290. 800180a: 6a7b ldr r3, [r7, #36] @ 0x24
  3291. 800180c: f003 021f and.w r2, r3, #31
  3292. 8001810: 6a3b ldr r3, [r7, #32]
  3293. 8001812: 4413 add r3, r2
  3294. 8001814: 61fb str r3, [r7, #28]
  3295. uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */;
  3296. 8001816: 6a7b ldr r3, [r7, #36] @ 0x24
  3297. 8001818: 61bb str r3, [r7, #24]
  3298. __ASM volatile ("dsb 0xF":::"memory");
  3299. 800181a: f3bf 8f4f dsb sy
  3300. }
  3301. 800181e: bf00 nop
  3302. SCB->DCIMVAC = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */
  3303. 8001820: 4a3b ldr r2, [pc, #236] @ (8001910 <HAL_ADC_ConvCpltCallback+0x1b4>)
  3304. 8001822: 69bb ldr r3, [r7, #24]
  3305. 8001824: f8c2 325c str.w r3, [r2, #604] @ 0x25c
  3306. op_addr += __SCB_DCACHE_LINE_SIZE;
  3307. 8001828: 69bb ldr r3, [r7, #24]
  3308. 800182a: 3320 adds r3, #32
  3309. 800182c: 61bb str r3, [r7, #24]
  3310. op_size -= __SCB_DCACHE_LINE_SIZE;
  3311. 800182e: 69fb ldr r3, [r7, #28]
  3312. 8001830: 3b20 subs r3, #32
  3313. 8001832: 61fb str r3, [r7, #28]
  3314. } while ( op_size > 0 );
  3315. 8001834: 69fb ldr r3, [r7, #28]
  3316. 8001836: 2b00 cmp r3, #0
  3317. 8001838: dcf2 bgt.n 8001820 <HAL_ADC_ConvCpltCallback+0xc4>
  3318. __ASM volatile ("dsb 0xF":::"memory");
  3319. 800183a: f3bf 8f4f dsb sy
  3320. }
  3321. 800183e: bf00 nop
  3322. __ASM volatile ("isb 0xF":::"memory");
  3323. 8001840: f3bf 8f6f isb sy
  3324. }
  3325. 8001844: bf00 nop
  3326. }
  3327. 8001846: bf00 nop
  3328. if(adc2MeasDataQueue != NULL)
  3329. 8001848: 4b36 ldr r3, [pc, #216] @ (8001924 <HAL_ADC_ConvCpltCallback+0x1c8>)
  3330. 800184a: 681b ldr r3, [r3, #0]
  3331. 800184c: 2b00 cmp r3, #0
  3332. 800184e: d006 beq.n 800185e <HAL_ADC_ConvCpltCallback+0x102>
  3333. {
  3334. osMessageQueuePut(adc2MeasDataQueue, &adc2Data, 0, 0);
  3335. 8001850: 4b34 ldr r3, [pc, #208] @ (8001924 <HAL_ADC_ConvCpltCallback+0x1c8>)
  3336. 8001852: 6818 ldr r0, [r3, #0]
  3337. 8001854: 2300 movs r3, #0
  3338. 8001856: 2200 movs r2, #0
  3339. 8001858: 4931 ldr r1, [pc, #196] @ (8001920 <HAL_ADC_ConvCpltCallback+0x1c4>)
  3340. 800185a: f012 fa37 bl 8013ccc <osMessageQueuePut>
  3341. }
  3342. if(HAL_ADC_Start_DMA(&hadc2, (uint32_t *)adc2Data.adcDataBuffer, ADC2LastData) != HAL_OK)
  3343. 800185e: 2203 movs r2, #3
  3344. 8001860: 492f ldr r1, [pc, #188] @ (8001920 <HAL_ADC_ConvCpltCallback+0x1c4>)
  3345. 8001862: 4831 ldr r0, [pc, #196] @ (8001928 <HAL_ADC_ConvCpltCallback+0x1cc>)
  3346. 8001864: f004 f9bc bl 8005be0 <HAL_ADC_Start_DMA>
  3347. 8001868: 4603 mov r3, r0
  3348. 800186a: 2b00 cmp r3, #0
  3349. 800186c: d001 beq.n 8001872 <HAL_ADC_ConvCpltCallback+0x116>
  3350. {
  3351. Error_Handler();
  3352. 800186e: f000 facf bl 8001e10 <Error_Handler>
  3353. }
  3354. }
  3355. if(hadc->Instance == ADC3)
  3356. 8001872: 687b ldr r3, [r7, #4]
  3357. 8001874: 681b ldr r3, [r3, #0]
  3358. 8001876: 4a2d ldr r2, [pc, #180] @ (800192c <HAL_ADC_ConvCpltCallback+0x1d0>)
  3359. 8001878: 4293 cmp r3, r2
  3360. 800187a: d13c bne.n 80018f6 <HAL_ADC_ConvCpltCallback+0x19a>
  3361. {
  3362. SCB_InvalidateDCache_by_Addr((uint32_t*)(((uint32_t)adc3Data.adcDataBuffer) & ~(uint32_t)0x1F), __SCB_DCACHE_LINE_SIZE);
  3363. 800187c: 4b2c ldr r3, [pc, #176] @ (8001930 <HAL_ADC_ConvCpltCallback+0x1d4>)
  3364. 800187e: f023 031f bic.w r3, r3, #31
  3365. 8001882: 617b str r3, [r7, #20]
  3366. 8001884: 2320 movs r3, #32
  3367. 8001886: 613b str r3, [r7, #16]
  3368. if ( dsize > 0 ) {
  3369. 8001888: 693b ldr r3, [r7, #16]
  3370. 800188a: 2b00 cmp r3, #0
  3371. 800188c: dd1d ble.n 80018ca <HAL_ADC_ConvCpltCallback+0x16e>
  3372. int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U));
  3373. 800188e: 697b ldr r3, [r7, #20]
  3374. 8001890: f003 021f and.w r2, r3, #31
  3375. 8001894: 693b ldr r3, [r7, #16]
  3376. 8001896: 4413 add r3, r2
  3377. 8001898: 60fb str r3, [r7, #12]
  3378. uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */;
  3379. 800189a: 697b ldr r3, [r7, #20]
  3380. 800189c: 60bb str r3, [r7, #8]
  3381. __ASM volatile ("dsb 0xF":::"memory");
  3382. 800189e: f3bf 8f4f dsb sy
  3383. }
  3384. 80018a2: bf00 nop
  3385. SCB->DCIMVAC = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */
  3386. 80018a4: 4a1a ldr r2, [pc, #104] @ (8001910 <HAL_ADC_ConvCpltCallback+0x1b4>)
  3387. 80018a6: 68bb ldr r3, [r7, #8]
  3388. 80018a8: f8c2 325c str.w r3, [r2, #604] @ 0x25c
  3389. op_addr += __SCB_DCACHE_LINE_SIZE;
  3390. 80018ac: 68bb ldr r3, [r7, #8]
  3391. 80018ae: 3320 adds r3, #32
  3392. 80018b0: 60bb str r3, [r7, #8]
  3393. op_size -= __SCB_DCACHE_LINE_SIZE;
  3394. 80018b2: 68fb ldr r3, [r7, #12]
  3395. 80018b4: 3b20 subs r3, #32
  3396. 80018b6: 60fb str r3, [r7, #12]
  3397. } while ( op_size > 0 );
  3398. 80018b8: 68fb ldr r3, [r7, #12]
  3399. 80018ba: 2b00 cmp r3, #0
  3400. 80018bc: dcf2 bgt.n 80018a4 <HAL_ADC_ConvCpltCallback+0x148>
  3401. __ASM volatile ("dsb 0xF":::"memory");
  3402. 80018be: f3bf 8f4f dsb sy
  3403. }
  3404. 80018c2: bf00 nop
  3405. __ASM volatile ("isb 0xF":::"memory");
  3406. 80018c4: f3bf 8f6f isb sy
  3407. }
  3408. 80018c8: bf00 nop
  3409. }
  3410. 80018ca: bf00 nop
  3411. if(adc3MeasDataQueue != NULL)
  3412. 80018cc: 4b19 ldr r3, [pc, #100] @ (8001934 <HAL_ADC_ConvCpltCallback+0x1d8>)
  3413. 80018ce: 681b ldr r3, [r3, #0]
  3414. 80018d0: 2b00 cmp r3, #0
  3415. 80018d2: d006 beq.n 80018e2 <HAL_ADC_ConvCpltCallback+0x186>
  3416. {
  3417. osMessageQueuePut(adc3MeasDataQueue, &adc3Data, 0, 0);
  3418. 80018d4: 4b17 ldr r3, [pc, #92] @ (8001934 <HAL_ADC_ConvCpltCallback+0x1d8>)
  3419. 80018d6: 6818 ldr r0, [r3, #0]
  3420. 80018d8: 2300 movs r3, #0
  3421. 80018da: 2200 movs r2, #0
  3422. 80018dc: 4914 ldr r1, [pc, #80] @ (8001930 <HAL_ADC_ConvCpltCallback+0x1d4>)
  3423. 80018de: f012 f9f5 bl 8013ccc <osMessageQueuePut>
  3424. }
  3425. if(HAL_ADC_Start_DMA(&hadc3, (uint32_t *)adc3Data.adcDataBuffer, ADC3LastData) != HAL_OK)
  3426. 80018e2: 2205 movs r2, #5
  3427. 80018e4: 4912 ldr r1, [pc, #72] @ (8001930 <HAL_ADC_ConvCpltCallback+0x1d4>)
  3428. 80018e6: 4814 ldr r0, [pc, #80] @ (8001938 <HAL_ADC_ConvCpltCallback+0x1dc>)
  3429. 80018e8: f004 f97a bl 8005be0 <HAL_ADC_Start_DMA>
  3430. 80018ec: 4603 mov r3, r0
  3431. 80018ee: 2b00 cmp r3, #0
  3432. 80018f0: d001 beq.n 80018f6 <HAL_ADC_ConvCpltCallback+0x19a>
  3433. {
  3434. Error_Handler();
  3435. 80018f2: f000 fa8d bl 8001e10 <Error_Handler>
  3436. }
  3437. }osTimerStop (debugLedTimerHandle);
  3438. 80018f6: 4b11 ldr r3, [pc, #68] @ (800193c <HAL_ADC_ConvCpltCallback+0x1e0>)
  3439. 80018f8: 681b ldr r3, [r3, #0]
  3440. 80018fa: 4618 mov r0, r3
  3441. 80018fc: f012 f82e bl 801395c <osTimerStop>
  3442. }
  3443. 8001900: bf00 nop
  3444. 8001902: 3738 adds r7, #56 @ 0x38
  3445. 8001904: 46bd mov sp, r7
  3446. 8001906: bd80 pop {r7, pc}
  3447. 8001908: 40022000 .word 0x40022000
  3448. 800190c: 240000e0 .word 0x240000e0
  3449. 8001910: e000ed00 .word 0xe000ed00
  3450. 8001914: 240007c8 .word 0x240007c8
  3451. 8001918: 24000140 .word 0x24000140
  3452. 800191c: 40022100 .word 0x40022100
  3453. 8001920: 24000100 .word 0x24000100
  3454. 8001924: 240007cc .word 0x240007cc
  3455. 8001928: 240001a4 .word 0x240001a4
  3456. 800192c: 58026000 .word 0x58026000
  3457. 8001930: 24000120 .word 0x24000120
  3458. 8001934: 240007d0 .word 0x240007d0
  3459. 8001938: 24000208 .word 0x24000208
  3460. 800193c: 240006a8 .word 0x240006a8
  3461. 08001940 <HAL_TIM_IC_CaptureCallback>:
  3462. void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
  3463. {
  3464. 8001940: b580 push {r7, lr}
  3465. 8001942: b084 sub sp, #16
  3466. 8001944: af00 add r7, sp, #0
  3467. 8001946: 6078 str r0, [r7, #4]
  3468. if (htim->Instance == TIM4)
  3469. 8001948: 687b ldr r3, [r7, #4]
  3470. 800194a: 681b ldr r3, [r3, #0]
  3471. 800194c: 4a42 ldr r2, [pc, #264] @ (8001a58 <HAL_TIM_IC_CaptureCallback+0x118>)
  3472. 800194e: 4293 cmp r3, r2
  3473. 8001950: d13c bne.n 80019cc <HAL_TIM_IC_CaptureCallback+0x8c>
  3474. {
  3475. if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_3)
  3476. 8001952: 687b ldr r3, [r7, #4]
  3477. 8001954: 7f1b ldrb r3, [r3, #28]
  3478. 8001956: 2b04 cmp r3, #4
  3479. 8001958: d108 bne.n 800196c <HAL_TIM_IC_CaptureCallback+0x2c>
  3480. {
  3481. encoderXChannelA = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_3);
  3482. 800195a: 2108 movs r1, #8
  3483. 800195c: 6878 ldr r0, [r7, #4]
  3484. 800195e: f00e f87f bl 800fa60 <HAL_TIM_ReadCapturedValue>
  3485. 8001962: 4603 mov r3, r0
  3486. 8001964: 461a mov r2, r3
  3487. 8001966: 4b3d ldr r3, [pc, #244] @ (8001a5c <HAL_TIM_IC_CaptureCallback+0x11c>)
  3488. 8001968: 601a str r2, [r3, #0]
  3489. 800196a: e00b b.n 8001984 <HAL_TIM_IC_CaptureCallback+0x44>
  3490. } else if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_4)
  3491. 800196c: 687b ldr r3, [r7, #4]
  3492. 800196e: 7f1b ldrb r3, [r3, #28]
  3493. 8001970: 2b08 cmp r3, #8
  3494. 8001972: d107 bne.n 8001984 <HAL_TIM_IC_CaptureCallback+0x44>
  3495. {
  3496. encoderXChannelB = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_4);
  3497. 8001974: 210c movs r1, #12
  3498. 8001976: 6878 ldr r0, [r7, #4]
  3499. 8001978: f00e f872 bl 800fa60 <HAL_TIM_ReadCapturedValue>
  3500. 800197c: 4603 mov r3, r0
  3501. 800197e: 461a mov r2, r3
  3502. 8001980: 4b37 ldr r3, [pc, #220] @ (8001a60 <HAL_TIM_IC_CaptureCallback+0x120>)
  3503. 8001982: 601a str r2, [r3, #0]
  3504. }
  3505. if((encoderXChannelA != 0) && (encoderXChannelB != 0))
  3506. 8001984: 4b35 ldr r3, [pc, #212] @ (8001a5c <HAL_TIM_IC_CaptureCallback+0x11c>)
  3507. 8001986: 681b ldr r3, [r3, #0]
  3508. 8001988: 2b00 cmp r3, #0
  3509. 800198a: d060 beq.n 8001a4e <HAL_TIM_IC_CaptureCallback+0x10e>
  3510. 800198c: 4b34 ldr r3, [pc, #208] @ (8001a60 <HAL_TIM_IC_CaptureCallback+0x120>)
  3511. 800198e: 681b ldr r3, [r3, #0]
  3512. 8001990: 2b00 cmp r3, #0
  3513. 8001992: d05c beq.n 8001a4e <HAL_TIM_IC_CaptureCallback+0x10e>
  3514. {
  3515. EncoderData encoderData = { 0 };
  3516. 8001994: 2300 movs r3, #0
  3517. 8001996: 81bb strh r3, [r7, #12]
  3518. encoderData.axe = encoderAxeX;
  3519. 8001998: 2300 movs r3, #0
  3520. 800199a: 733b strb r3, [r7, #12]
  3521. encoderData.direction = encoderXChannelA - encoderXChannelB < 0 ? encoderCW : encoderCCW;
  3522. 800199c: 4b2f ldr r3, [pc, #188] @ (8001a5c <HAL_TIM_IC_CaptureCallback+0x11c>)
  3523. 800199e: 681a ldr r2, [r3, #0]
  3524. 80019a0: 4b2f ldr r3, [pc, #188] @ (8001a60 <HAL_TIM_IC_CaptureCallback+0x120>)
  3525. 80019a2: 681b ldr r3, [r3, #0]
  3526. 80019a4: 1ad3 subs r3, r2, r3
  3527. 80019a6: 43db mvns r3, r3
  3528. 80019a8: 0fdb lsrs r3, r3, #31
  3529. 80019aa: b2db uxtb r3, r3
  3530. 80019ac: 737b strb r3, [r7, #13]
  3531. osMessageQueuePut(encoderXDataQueue, &encoderData, 0, 0);
  3532. 80019ae: 4b2d ldr r3, [pc, #180] @ (8001a64 <HAL_TIM_IC_CaptureCallback+0x124>)
  3533. 80019b0: 6818 ldr r0, [r3, #0]
  3534. 80019b2: f107 010c add.w r1, r7, #12
  3535. 80019b6: 2300 movs r3, #0
  3536. 80019b8: 2200 movs r2, #0
  3537. 80019ba: f012 f987 bl 8013ccc <osMessageQueuePut>
  3538. encoderXChannelA = 0;
  3539. 80019be: 4b27 ldr r3, [pc, #156] @ (8001a5c <HAL_TIM_IC_CaptureCallback+0x11c>)
  3540. 80019c0: 2200 movs r2, #0
  3541. 80019c2: 601a str r2, [r3, #0]
  3542. encoderXChannelB = 0;
  3543. 80019c4: 4b26 ldr r3, [pc, #152] @ (8001a60 <HAL_TIM_IC_CaptureCallback+0x120>)
  3544. 80019c6: 2200 movs r2, #0
  3545. 80019c8: 601a str r2, [r3, #0]
  3546. osMessageQueuePut(encoderYDataQueue, &encoderData, 0, 0);
  3547. encoderYChannelA = 0;
  3548. encoderYChannelB = 0;
  3549. }
  3550. }
  3551. }
  3552. 80019ca: e040 b.n 8001a4e <HAL_TIM_IC_CaptureCallback+0x10e>
  3553. } else if (htim->Instance == TIM2)
  3554. 80019cc: 687b ldr r3, [r7, #4]
  3555. 80019ce: 681b ldr r3, [r3, #0]
  3556. 80019d0: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  3557. 80019d4: d13b bne.n 8001a4e <HAL_TIM_IC_CaptureCallback+0x10e>
  3558. if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_3)
  3559. 80019d6: 687b ldr r3, [r7, #4]
  3560. 80019d8: 7f1b ldrb r3, [r3, #28]
  3561. 80019da: 2b04 cmp r3, #4
  3562. 80019dc: d108 bne.n 80019f0 <HAL_TIM_IC_CaptureCallback+0xb0>
  3563. encoderYChannelA = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_3);
  3564. 80019de: 2108 movs r1, #8
  3565. 80019e0: 6878 ldr r0, [r7, #4]
  3566. 80019e2: f00e f83d bl 800fa60 <HAL_TIM_ReadCapturedValue>
  3567. 80019e6: 4603 mov r3, r0
  3568. 80019e8: 461a mov r2, r3
  3569. 80019ea: 4b1f ldr r3, [pc, #124] @ (8001a68 <HAL_TIM_IC_CaptureCallback+0x128>)
  3570. 80019ec: 601a str r2, [r3, #0]
  3571. 80019ee: e00b b.n 8001a08 <HAL_TIM_IC_CaptureCallback+0xc8>
  3572. } else if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_4)
  3573. 80019f0: 687b ldr r3, [r7, #4]
  3574. 80019f2: 7f1b ldrb r3, [r3, #28]
  3575. 80019f4: 2b08 cmp r3, #8
  3576. 80019f6: d107 bne.n 8001a08 <HAL_TIM_IC_CaptureCallback+0xc8>
  3577. encoderYChannelB = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_4);
  3578. 80019f8: 210c movs r1, #12
  3579. 80019fa: 6878 ldr r0, [r7, #4]
  3580. 80019fc: f00e f830 bl 800fa60 <HAL_TIM_ReadCapturedValue>
  3581. 8001a00: 4603 mov r3, r0
  3582. 8001a02: 461a mov r2, r3
  3583. 8001a04: 4b19 ldr r3, [pc, #100] @ (8001a6c <HAL_TIM_IC_CaptureCallback+0x12c>)
  3584. 8001a06: 601a str r2, [r3, #0]
  3585. if((encoderYChannelA != 0) && (encoderYChannelB != 0))
  3586. 8001a08: 4b17 ldr r3, [pc, #92] @ (8001a68 <HAL_TIM_IC_CaptureCallback+0x128>)
  3587. 8001a0a: 681b ldr r3, [r3, #0]
  3588. 8001a0c: 2b00 cmp r3, #0
  3589. 8001a0e: d01e beq.n 8001a4e <HAL_TIM_IC_CaptureCallback+0x10e>
  3590. 8001a10: 4b16 ldr r3, [pc, #88] @ (8001a6c <HAL_TIM_IC_CaptureCallback+0x12c>)
  3591. 8001a12: 681b ldr r3, [r3, #0]
  3592. 8001a14: 2b00 cmp r3, #0
  3593. 8001a16: d01a beq.n 8001a4e <HAL_TIM_IC_CaptureCallback+0x10e>
  3594. EncoderData encoderData = { 0 };
  3595. 8001a18: 2300 movs r3, #0
  3596. 8001a1a: 813b strh r3, [r7, #8]
  3597. encoderData.axe = encoderAxeY;
  3598. 8001a1c: 2301 movs r3, #1
  3599. 8001a1e: 723b strb r3, [r7, #8]
  3600. encoderData.direction = encoderYChannelA - encoderYChannelB < 0 ? encoderCW : encoderCCW;
  3601. 8001a20: 4b11 ldr r3, [pc, #68] @ (8001a68 <HAL_TIM_IC_CaptureCallback+0x128>)
  3602. 8001a22: 681a ldr r2, [r3, #0]
  3603. 8001a24: 4b11 ldr r3, [pc, #68] @ (8001a6c <HAL_TIM_IC_CaptureCallback+0x12c>)
  3604. 8001a26: 681b ldr r3, [r3, #0]
  3605. 8001a28: 1ad3 subs r3, r2, r3
  3606. 8001a2a: 43db mvns r3, r3
  3607. 8001a2c: 0fdb lsrs r3, r3, #31
  3608. 8001a2e: b2db uxtb r3, r3
  3609. 8001a30: 727b strb r3, [r7, #9]
  3610. osMessageQueuePut(encoderYDataQueue, &encoderData, 0, 0);
  3611. 8001a32: 4b0f ldr r3, [pc, #60] @ (8001a70 <HAL_TIM_IC_CaptureCallback+0x130>)
  3612. 8001a34: 6818 ldr r0, [r3, #0]
  3613. 8001a36: f107 0108 add.w r1, r7, #8
  3614. 8001a3a: 2300 movs r3, #0
  3615. 8001a3c: 2200 movs r2, #0
  3616. 8001a3e: f012 f945 bl 8013ccc <osMessageQueuePut>
  3617. encoderYChannelA = 0;
  3618. 8001a42: 4b09 ldr r3, [pc, #36] @ (8001a68 <HAL_TIM_IC_CaptureCallback+0x128>)
  3619. 8001a44: 2200 movs r2, #0
  3620. 8001a46: 601a str r2, [r3, #0]
  3621. encoderYChannelB = 0;
  3622. 8001a48: 4b08 ldr r3, [pc, #32] @ (8001a6c <HAL_TIM_IC_CaptureCallback+0x12c>)
  3623. 8001a4a: 2200 movs r2, #0
  3624. 8001a4c: 601a str r2, [r3, #0]
  3625. }
  3626. 8001a4e: bf00 nop
  3627. 8001a50: 3710 adds r7, #16
  3628. 8001a52: 46bd mov sp, r7
  3629. 8001a54: bd80 pop {r7, pc}
  3630. 8001a56: bf00 nop
  3631. 8001a58: 40000800 .word 0x40000800
  3632. 8001a5c: 240007a0 .word 0x240007a0
  3633. 8001a60: 240007a4 .word 0x240007a4
  3634. 8001a64: 240007d8 .word 0x240007d8
  3635. 8001a68: 240007a8 .word 0x240007a8
  3636. 8001a6c: 240007ac .word 0x240007ac
  3637. 8001a70: 240007dc .word 0x240007dc
  3638. 08001a74 <StartDefaultTask>:
  3639. * @param argument: Not used
  3640. * @retval None
  3641. */
  3642. /* USER CODE END Header_StartDefaultTask */
  3643. void StartDefaultTask(void *argument)
  3644. {
  3645. 8001a74: b580 push {r7, lr}
  3646. 8001a76: b082 sub sp, #8
  3647. 8001a78: af00 add r7, sp, #0
  3648. 8001a7a: 6078 str r0, [r7, #4]
  3649. /* USER CODE BEGIN 5 */
  3650. SelectCurrentSensorGain(CurrentSensorL1, csGain3);
  3651. 8001a7c: 2102 movs r1, #2
  3652. 8001a7e: 2000 movs r0, #0
  3653. 8001a80: f001 f970 bl 8002d64 <SelectCurrentSensorGain>
  3654. SelectCurrentSensorGain(CurrentSensorL2, csGain3);
  3655. 8001a84: 2102 movs r1, #2
  3656. 8001a86: 2001 movs r0, #1
  3657. 8001a88: f001 f96c bl 8002d64 <SelectCurrentSensorGain>
  3658. SelectCurrentSensorGain(CurrentSensorL3, csGain3);
  3659. 8001a8c: 2102 movs r1, #2
  3660. 8001a8e: 2002 movs r0, #2
  3661. 8001a90: f001 f968 bl 8002d64 <SelectCurrentSensorGain>
  3662. EnableCurrentSensors();
  3663. 8001a94: f001 f95a bl 8002d4c <EnableCurrentSensors>
  3664. osDelay(pdMS_TO_TICKS(1000));
  3665. 8001a98: f44f 707a mov.w r0, #1000 @ 0x3e8
  3666. 8001a9c: f011 fe83 bl 80137a6 <osDelay>
  3667. if(HAL_TIM_Base_Start(&htim2) != HAL_OK)
  3668. 8001aa0: 484c ldr r0, [pc, #304] @ (8001bd4 <StartDefaultTask+0x160>)
  3669. 8001aa2: f00c ff97 bl 800e9d4 <HAL_TIM_Base_Start>
  3670. 8001aa6: 4603 mov r3, r0
  3671. 8001aa8: 2b00 cmp r3, #0
  3672. 8001aaa: d001 beq.n 8001ab0 <StartDefaultTask+0x3c>
  3673. {
  3674. Error_Handler();
  3675. 8001aac: f000 f9b0 bl 8001e10 <Error_Handler>
  3676. }
  3677. if(HAL_TIM_Base_Start_IT(&htim4) != HAL_OK)
  3678. 8001ab0: 4849 ldr r0, [pc, #292] @ (8001bd8 <StartDefaultTask+0x164>)
  3679. 8001ab2: f00c ffff bl 800eab4 <HAL_TIM_Base_Start_IT>
  3680. 8001ab6: 4603 mov r3, r0
  3681. 8001ab8: 2b00 cmp r3, #0
  3682. 8001aba: d001 beq.n 8001ac0 <StartDefaultTask+0x4c>
  3683. {
  3684. Error_Handler();
  3685. 8001abc: f000 f9a8 bl 8001e10 <Error_Handler>
  3686. }
  3687. if(HAL_TIM_IC_Start_IT(&htim4, TIM_CHANNEL_3) != HAL_OK)
  3688. 8001ac0: 2108 movs r1, #8
  3689. 8001ac2: 4845 ldr r0, [pc, #276] @ (8001bd8 <StartDefaultTask+0x164>)
  3690. 8001ac4: f00d facc bl 800f060 <HAL_TIM_IC_Start_IT>
  3691. 8001ac8: 4603 mov r3, r0
  3692. 8001aca: 2b00 cmp r3, #0
  3693. 8001acc: d001 beq.n 8001ad2 <StartDefaultTask+0x5e>
  3694. {
  3695. Error_Handler();
  3696. 8001ace: f000 f99f bl 8001e10 <Error_Handler>
  3697. }
  3698. if(HAL_TIM_IC_Start_IT(&htim4, TIM_CHANNEL_4) != HAL_OK)
  3699. 8001ad2: 210c movs r1, #12
  3700. 8001ad4: 4840 ldr r0, [pc, #256] @ (8001bd8 <StartDefaultTask+0x164>)
  3701. 8001ad6: f00d fac3 bl 800f060 <HAL_TIM_IC_Start_IT>
  3702. 8001ada: 4603 mov r3, r0
  3703. 8001adc: 2b00 cmp r3, #0
  3704. 8001ade: d001 beq.n 8001ae4 <StartDefaultTask+0x70>
  3705. {
  3706. Error_Handler();
  3707. 8001ae0: f000 f996 bl 8001e10 <Error_Handler>
  3708. }
  3709. if(HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_3) != HAL_OK)
  3710. 8001ae4: 2108 movs r1, #8
  3711. 8001ae6: 483b ldr r0, [pc, #236] @ (8001bd4 <StartDefaultTask+0x160>)
  3712. 8001ae8: f00d faba bl 800f060 <HAL_TIM_IC_Start_IT>
  3713. 8001aec: 4603 mov r3, r0
  3714. 8001aee: 2b00 cmp r3, #0
  3715. 8001af0: d001 beq.n 8001af6 <StartDefaultTask+0x82>
  3716. {
  3717. Error_Handler();
  3718. 8001af2: f000 f98d bl 8001e10 <Error_Handler>
  3719. }
  3720. if(HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_4) != HAL_OK)
  3721. 8001af6: 210c movs r1, #12
  3722. 8001af8: 4836 ldr r0, [pc, #216] @ (8001bd4 <StartDefaultTask+0x160>)
  3723. 8001afa: f00d fab1 bl 800f060 <HAL_TIM_IC_Start_IT>
  3724. 8001afe: 4603 mov r3, r0
  3725. 8001b00: 2b00 cmp r3, #0
  3726. 8001b02: d001 beq.n 8001b08 <StartDefaultTask+0x94>
  3727. {
  3728. Error_Handler();
  3729. 8001b04: f000 f984 bl 8001e10 <Error_Handler>
  3730. }
  3731. if(HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc1Data.adcDataBuffer, ADC1LastData) != HAL_OK)
  3732. 8001b08: 2207 movs r2, #7
  3733. 8001b0a: 4934 ldr r1, [pc, #208] @ (8001bdc <StartDefaultTask+0x168>)
  3734. 8001b0c: 4834 ldr r0, [pc, #208] @ (8001be0 <StartDefaultTask+0x16c>)
  3735. 8001b0e: f004 f867 bl 8005be0 <HAL_ADC_Start_DMA>
  3736. 8001b12: 4603 mov r3, r0
  3737. 8001b14: 2b00 cmp r3, #0
  3738. 8001b16: d001 beq.n 8001b1c <StartDefaultTask+0xa8>
  3739. {
  3740. Error_Handler();
  3741. 8001b18: f000 f97a bl 8001e10 <Error_Handler>
  3742. }
  3743. if(HAL_ADC_Start_DMA(&hadc2, (uint32_t *)adc2Data.adcDataBuffer, ADC2LastData) != HAL_OK)
  3744. 8001b1c: 2203 movs r2, #3
  3745. 8001b1e: 4931 ldr r1, [pc, #196] @ (8001be4 <StartDefaultTask+0x170>)
  3746. 8001b20: 4831 ldr r0, [pc, #196] @ (8001be8 <StartDefaultTask+0x174>)
  3747. 8001b22: f004 f85d bl 8005be0 <HAL_ADC_Start_DMA>
  3748. 8001b26: 4603 mov r3, r0
  3749. 8001b28: 2b00 cmp r3, #0
  3750. 8001b2a: d001 beq.n 8001b30 <StartDefaultTask+0xbc>
  3751. {
  3752. Error_Handler();
  3753. 8001b2c: f000 f970 bl 8001e10 <Error_Handler>
  3754. }
  3755. if(HAL_ADC_Start_DMA(&hadc3, (uint32_t *)adc3Data.adcDataBuffer, ADC3LastData) != HAL_OK)
  3756. 8001b30: 2205 movs r2, #5
  3757. 8001b32: 492e ldr r1, [pc, #184] @ (8001bec <StartDefaultTask+0x178>)
  3758. 8001b34: 482e ldr r0, [pc, #184] @ (8001bf0 <StartDefaultTask+0x17c>)
  3759. 8001b36: f004 f853 bl 8005be0 <HAL_ADC_Start_DMA>
  3760. 8001b3a: 4603 mov r3, r0
  3761. 8001b3c: 2b00 cmp r3, #0
  3762. 8001b3e: d001 beq.n 8001b44 <StartDefaultTask+0xd0>
  3763. {
  3764. Error_Handler();
  3765. 8001b40: f000 f966 bl 8001e10 <Error_Handler>
  3766. }
  3767. HAL_COMP_Start(&hcomp1);
  3768. 8001b44: 482b ldr r0, [pc, #172] @ (8001bf4 <StartDefaultTask+0x180>)
  3769. 8001b46: f005 f9cf bl 8006ee8 <HAL_COMP_Start>
  3770. /* Infinite loop */
  3771. for(;;)
  3772. {
  3773. osDelay(pdMS_TO_TICKS(100));
  3774. 8001b4a: 2064 movs r0, #100 @ 0x64
  3775. 8001b4c: f011 fe2b bl 80137a6 <osDelay>
  3776. if(HAL_TIM_GetChannelState(&htim3, TIM_CHANNEL_1) == HAL_TIM_CHANNEL_STATE_READY &&
  3777. 8001b50: 2100 movs r1, #0
  3778. 8001b52: 4829 ldr r0, [pc, #164] @ (8001bf8 <StartDefaultTask+0x184>)
  3779. 8001b54: f00d ffe6 bl 800fb24 <HAL_TIM_GetChannelState>
  3780. 8001b58: 4603 mov r3, r0
  3781. 8001b5a: 2b01 cmp r3, #1
  3782. 8001b5c: d118 bne.n 8001b90 <StartDefaultTask+0x11c>
  3783. HAL_TIM_GetChannelState(&htim3, TIM_CHANNEL_2) == HAL_TIM_CHANNEL_STATE_READY)
  3784. 8001b5e: 2104 movs r1, #4
  3785. 8001b60: 4825 ldr r0, [pc, #148] @ (8001bf8 <StartDefaultTask+0x184>)
  3786. 8001b62: f00d ffdf bl 800fb24 <HAL_TIM_GetChannelState>
  3787. 8001b66: 4603 mov r3, r0
  3788. if(HAL_TIM_GetChannelState(&htim3, TIM_CHANNEL_1) == HAL_TIM_CHANNEL_STATE_READY &&
  3789. 8001b68: 2b01 cmp r3, #1
  3790. 8001b6a: d111 bne.n 8001b90 <StartDefaultTask+0x11c>
  3791. {
  3792. if(osMutexAcquire(sensorsInfoMutex, osWaitForever) == osOK)
  3793. 8001b6c: 4b23 ldr r3, [pc, #140] @ (8001bfc <StartDefaultTask+0x188>)
  3794. 8001b6e: 681b ldr r3, [r3, #0]
  3795. 8001b70: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  3796. 8001b74: 4618 mov r0, r3
  3797. 8001b76: f011 ffae bl 8013ad6 <osMutexAcquire>
  3798. 8001b7a: 4603 mov r3, r0
  3799. 8001b7c: 2b00 cmp r3, #0
  3800. 8001b7e: d107 bne.n 8001b90 <StartDefaultTask+0x11c>
  3801. {
  3802. sensorsInfo.motorXStatus = 0;
  3803. 8001b80: 4b1f ldr r3, [pc, #124] @ (8001c00 <StartDefaultTask+0x18c>)
  3804. 8001b82: 2200 movs r2, #0
  3805. 8001b84: 751a strb r2, [r3, #20]
  3806. osMutexRelease(sensorsInfoMutex);
  3807. 8001b86: 4b1d ldr r3, [pc, #116] @ (8001bfc <StartDefaultTask+0x188>)
  3808. 8001b88: 681b ldr r3, [r3, #0]
  3809. 8001b8a: 4618 mov r0, r3
  3810. 8001b8c: f011 ffee bl 8013b6c <osMutexRelease>
  3811. }
  3812. }
  3813. if(HAL_TIM_GetChannelState(&htim3, TIM_CHANNEL_3) == HAL_TIM_CHANNEL_STATE_READY &&
  3814. 8001b90: 2108 movs r1, #8
  3815. 8001b92: 4819 ldr r0, [pc, #100] @ (8001bf8 <StartDefaultTask+0x184>)
  3816. 8001b94: f00d ffc6 bl 800fb24 <HAL_TIM_GetChannelState>
  3817. 8001b98: 4603 mov r3, r0
  3818. 8001b9a: 2b01 cmp r3, #1
  3819. 8001b9c: d1d5 bne.n 8001b4a <StartDefaultTask+0xd6>
  3820. HAL_TIM_GetChannelState(&htim3, TIM_CHANNEL_4) == HAL_TIM_CHANNEL_STATE_READY)
  3821. 8001b9e: 210c movs r1, #12
  3822. 8001ba0: 4815 ldr r0, [pc, #84] @ (8001bf8 <StartDefaultTask+0x184>)
  3823. 8001ba2: f00d ffbf bl 800fb24 <HAL_TIM_GetChannelState>
  3824. 8001ba6: 4603 mov r3, r0
  3825. if(HAL_TIM_GetChannelState(&htim3, TIM_CHANNEL_3) == HAL_TIM_CHANNEL_STATE_READY &&
  3826. 8001ba8: 2b01 cmp r3, #1
  3827. 8001baa: d1ce bne.n 8001b4a <StartDefaultTask+0xd6>
  3828. {
  3829. if(osMutexAcquire(sensorsInfoMutex, osWaitForever) == osOK)
  3830. 8001bac: 4b13 ldr r3, [pc, #76] @ (8001bfc <StartDefaultTask+0x188>)
  3831. 8001bae: 681b ldr r3, [r3, #0]
  3832. 8001bb0: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  3833. 8001bb4: 4618 mov r0, r3
  3834. 8001bb6: f011 ff8e bl 8013ad6 <osMutexAcquire>
  3835. 8001bba: 4603 mov r3, r0
  3836. 8001bbc: 2b00 cmp r3, #0
  3837. 8001bbe: d1c4 bne.n 8001b4a <StartDefaultTask+0xd6>
  3838. {
  3839. sensorsInfo.motorYStatus = 0;
  3840. 8001bc0: 4b0f ldr r3, [pc, #60] @ (8001c00 <StartDefaultTask+0x18c>)
  3841. 8001bc2: 2200 movs r2, #0
  3842. 8001bc4: 755a strb r2, [r3, #21]
  3843. osMutexRelease(sensorsInfoMutex);
  3844. 8001bc6: 4b0d ldr r3, [pc, #52] @ (8001bfc <StartDefaultTask+0x188>)
  3845. 8001bc8: 681b ldr r3, [r3, #0]
  3846. 8001bca: 4618 mov r0, r3
  3847. 8001bcc: f011 ffce bl 8013b6c <osMutexRelease>
  3848. osDelay(pdMS_TO_TICKS(100));
  3849. 8001bd0: e7bb b.n 8001b4a <StartDefaultTask+0xd6>
  3850. 8001bd2: bf00 nop
  3851. 8001bd4: 24000498 .word 0x24000498
  3852. 8001bd8: 24000530 .word 0x24000530
  3853. 8001bdc: 240000e0 .word 0x240000e0
  3854. 8001be0: 24000140 .word 0x24000140
  3855. 8001be4: 24000100 .word 0x24000100
  3856. 8001be8: 240001a4 .word 0x240001a4
  3857. 8001bec: 24000120 .word 0x24000120
  3858. 8001bf0: 24000208 .word 0x24000208
  3859. 8001bf4: 240003d4 .word 0x240003d4
  3860. 8001bf8: 240004e4 .word 0x240004e4
  3861. 8001bfc: 240007e8 .word 0x240007e8
  3862. 8001c00: 2400082c .word 0x2400082c
  3863. 08001c04 <debugLedTimerCallback>:
  3864. /* USER CODE END 5 */
  3865. }
  3866. /* debugLedTimerCallback function */
  3867. void debugLedTimerCallback(void *argument)
  3868. {
  3869. 8001c04: b580 push {r7, lr}
  3870. 8001c06: b082 sub sp, #8
  3871. 8001c08: af00 add r7, sp, #0
  3872. 8001c0a: 6078 str r0, [r7, #4]
  3873. /* USER CODE BEGIN debugLedTimerCallback */
  3874. DbgLEDOff (DBG_LED1);
  3875. 8001c0c: 2010 movs r0, #16
  3876. 8001c0e: f001 f879 bl 8002d04 <DbgLEDOff>
  3877. /* USER CODE END debugLedTimerCallback */
  3878. }
  3879. 8001c12: bf00 nop
  3880. 8001c14: 3708 adds r7, #8
  3881. 8001c16: 46bd mov sp, r7
  3882. 8001c18: bd80 pop {r7, pc}
  3883. ...
  3884. 08001c1c <fanTimerCallback>:
  3885. /* fanTimerCallback function */
  3886. void fanTimerCallback(void *argument)
  3887. {
  3888. 8001c1c: b580 push {r7, lr}
  3889. 8001c1e: b082 sub sp, #8
  3890. 8001c20: af00 add r7, sp, #0
  3891. 8001c22: 6078 str r0, [r7, #4]
  3892. /* USER CODE BEGIN fanTimerCallback */
  3893. HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_2);
  3894. 8001c24: 2104 movs r1, #4
  3895. 8001c26: 4803 ldr r0, [pc, #12] @ (8001c34 <fanTimerCallback+0x18>)
  3896. 8001c28: f00d f922 bl 800ee70 <HAL_TIM_PWM_Stop>
  3897. /* USER CODE END fanTimerCallback */
  3898. }
  3899. 8001c2c: bf00 nop
  3900. 8001c2e: 3708 adds r7, #8
  3901. 8001c30: 46bd mov sp, r7
  3902. 8001c32: bd80 pop {r7, pc}
  3903. 8001c34: 2400044c .word 0x2400044c
  3904. 08001c38 <motorXTimerCallback>:
  3905. /* motorXTimerCallback function */
  3906. void motorXTimerCallback(void *argument)
  3907. {
  3908. 8001c38: b580 push {r7, lr}
  3909. 8001c3a: b084 sub sp, #16
  3910. 8001c3c: af02 add r7, sp, #8
  3911. 8001c3e: 6078 str r0, [r7, #4]
  3912. /* USER CODE BEGIN motorXTimerCallback */
  3913. motorAction(&htim3, &motorXYTimerConfigOC, TIM_CHANNEL_1, TIM_CHANNEL_2, HiZ, 0);
  3914. 8001c40: 2300 movs r3, #0
  3915. 8001c42: 9301 str r3, [sp, #4]
  3916. 8001c44: 2300 movs r3, #0
  3917. 8001c46: 9300 str r3, [sp, #0]
  3918. 8001c48: 2304 movs r3, #4
  3919. 8001c4a: 2200 movs r2, #0
  3920. 8001c4c: 4907 ldr r1, [pc, #28] @ (8001c6c <motorXTimerCallback+0x34>)
  3921. 8001c4e: 4808 ldr r0, [pc, #32] @ (8001c70 <motorXTimerCallback+0x38>)
  3922. 8001c50: f001 fa0d bl 800306e <motorAction>
  3923. HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_1);
  3924. 8001c54: 2100 movs r1, #0
  3925. 8001c56: 4806 ldr r0, [pc, #24] @ (8001c70 <motorXTimerCallback+0x38>)
  3926. 8001c58: f00d f90a bl 800ee70 <HAL_TIM_PWM_Stop>
  3927. HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_2);
  3928. 8001c5c: 2104 movs r1, #4
  3929. 8001c5e: 4804 ldr r0, [pc, #16] @ (8001c70 <motorXTimerCallback+0x38>)
  3930. 8001c60: f00d f906 bl 800ee70 <HAL_TIM_PWM_Stop>
  3931. /* USER CODE END motorXTimerCallback */
  3932. }
  3933. 8001c64: bf00 nop
  3934. 8001c66: 3708 adds r7, #8
  3935. 8001c68: 46bd mov sp, r7
  3936. 8001c6a: bd80 pop {r7, pc}
  3937. 8001c6c: 24000784 .word 0x24000784
  3938. 8001c70: 240004e4 .word 0x240004e4
  3939. 08001c74 <motorYTimerCallback>:
  3940. /* motorYTimerCallback function */
  3941. void motorYTimerCallback(void *argument)
  3942. {
  3943. 8001c74: b580 push {r7, lr}
  3944. 8001c76: b084 sub sp, #16
  3945. 8001c78: af02 add r7, sp, #8
  3946. 8001c7a: 6078 str r0, [r7, #4]
  3947. /* USER CODE BEGIN motorYTimerCallback */
  3948. motorAction(&htim3, &motorXYTimerConfigOC, TIM_CHANNEL_3, TIM_CHANNEL_4, HiZ, 0);
  3949. 8001c7c: 2300 movs r3, #0
  3950. 8001c7e: 9301 str r3, [sp, #4]
  3951. 8001c80: 2300 movs r3, #0
  3952. 8001c82: 9300 str r3, [sp, #0]
  3953. 8001c84: 230c movs r3, #12
  3954. 8001c86: 2208 movs r2, #8
  3955. 8001c88: 4907 ldr r1, [pc, #28] @ (8001ca8 <motorYTimerCallback+0x34>)
  3956. 8001c8a: 4808 ldr r0, [pc, #32] @ (8001cac <motorYTimerCallback+0x38>)
  3957. 8001c8c: f001 f9ef bl 800306e <motorAction>
  3958. HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_3);
  3959. 8001c90: 2108 movs r1, #8
  3960. 8001c92: 4806 ldr r0, [pc, #24] @ (8001cac <motorYTimerCallback+0x38>)
  3961. 8001c94: f00d f8ec bl 800ee70 <HAL_TIM_PWM_Stop>
  3962. HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_4);
  3963. 8001c98: 210c movs r1, #12
  3964. 8001c9a: 4804 ldr r0, [pc, #16] @ (8001cac <motorYTimerCallback+0x38>)
  3965. 8001c9c: f00d f8e8 bl 800ee70 <HAL_TIM_PWM_Stop>
  3966. /* USER CODE END motorYTimerCallback */
  3967. }
  3968. 8001ca0: bf00 nop
  3969. 8001ca2: 3708 adds r7, #8
  3970. 8001ca4: 46bd mov sp, r7
  3971. 8001ca6: bd80 pop {r7, pc}
  3972. 8001ca8: 24000784 .word 0x24000784
  3973. 8001cac: 240004e4 .word 0x240004e4
  3974. 08001cb0 <MPU_Config>:
  3975. /* MPU Configuration */
  3976. void MPU_Config(void)
  3977. {
  3978. 8001cb0: b580 push {r7, lr}
  3979. 8001cb2: b084 sub sp, #16
  3980. 8001cb4: af00 add r7, sp, #0
  3981. MPU_Region_InitTypeDef MPU_InitStruct = {0};
  3982. 8001cb6: 463b mov r3, r7
  3983. 8001cb8: 2200 movs r2, #0
  3984. 8001cba: 601a str r2, [r3, #0]
  3985. 8001cbc: 605a str r2, [r3, #4]
  3986. 8001cbe: 609a str r2, [r3, #8]
  3987. 8001cc0: 60da str r2, [r3, #12]
  3988. /* Disables the MPU */
  3989. HAL_MPU_Disable();
  3990. 8001cc2: f005 fa59 bl 8007178 <HAL_MPU_Disable>
  3991. /** Initializes and configures the Region and the memory to be protected
  3992. */
  3993. MPU_InitStruct.Enable = MPU_REGION_ENABLE;
  3994. 8001cc6: 2301 movs r3, #1
  3995. 8001cc8: 703b strb r3, [r7, #0]
  3996. MPU_InitStruct.Number = MPU_REGION_NUMBER0;
  3997. 8001cca: 2300 movs r3, #0
  3998. 8001ccc: 707b strb r3, [r7, #1]
  3999. MPU_InitStruct.BaseAddress = 0x0;
  4000. 8001cce: 2300 movs r3, #0
  4001. 8001cd0: 607b str r3, [r7, #4]
  4002. MPU_InitStruct.Size = MPU_REGION_SIZE_4GB;
  4003. 8001cd2: 231f movs r3, #31
  4004. 8001cd4: 723b strb r3, [r7, #8]
  4005. MPU_InitStruct.SubRegionDisable = 0x87;
  4006. 8001cd6: 2387 movs r3, #135 @ 0x87
  4007. 8001cd8: 727b strb r3, [r7, #9]
  4008. MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
  4009. 8001cda: 2300 movs r3, #0
  4010. 8001cdc: 72bb strb r3, [r7, #10]
  4011. MPU_InitStruct.AccessPermission = MPU_REGION_NO_ACCESS;
  4012. 8001cde: 2300 movs r3, #0
  4013. 8001ce0: 72fb strb r3, [r7, #11]
  4014. MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_DISABLE;
  4015. 8001ce2: 2301 movs r3, #1
  4016. 8001ce4: 733b strb r3, [r7, #12]
  4017. MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;
  4018. 8001ce6: 2301 movs r3, #1
  4019. 8001ce8: 737b strb r3, [r7, #13]
  4020. MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
  4021. 8001cea: 2300 movs r3, #0
  4022. 8001cec: 73bb strb r3, [r7, #14]
  4023. MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
  4024. 8001cee: 2300 movs r3, #0
  4025. 8001cf0: 73fb strb r3, [r7, #15]
  4026. HAL_MPU_ConfigRegion(&MPU_InitStruct);
  4027. 8001cf2: 463b mov r3, r7
  4028. 8001cf4: 4618 mov r0, r3
  4029. 8001cf6: f005 fa77 bl 80071e8 <HAL_MPU_ConfigRegion>
  4030. /** Initializes and configures the Region and the memory to be protected
  4031. */
  4032. MPU_InitStruct.Number = MPU_REGION_NUMBER1;
  4033. 8001cfa: 2301 movs r3, #1
  4034. 8001cfc: 707b strb r3, [r7, #1]
  4035. MPU_InitStruct.BaseAddress = 0x24020000;
  4036. 8001cfe: 4b13 ldr r3, [pc, #76] @ (8001d4c <MPU_Config+0x9c>)
  4037. 8001d00: 607b str r3, [r7, #4]
  4038. MPU_InitStruct.Size = MPU_REGION_SIZE_128KB;
  4039. 8001d02: 2310 movs r3, #16
  4040. 8001d04: 723b strb r3, [r7, #8]
  4041. MPU_InitStruct.SubRegionDisable = 0x0;
  4042. 8001d06: 2300 movs r3, #0
  4043. 8001d08: 727b strb r3, [r7, #9]
  4044. MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1;
  4045. 8001d0a: 2301 movs r3, #1
  4046. 8001d0c: 72bb strb r3, [r7, #10]
  4047. MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
  4048. 8001d0e: 2303 movs r3, #3
  4049. 8001d10: 72fb strb r3, [r7, #11]
  4050. MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
  4051. 8001d12: 2300 movs r3, #0
  4052. 8001d14: 737b strb r3, [r7, #13]
  4053. HAL_MPU_ConfigRegion(&MPU_InitStruct);
  4054. 8001d16: 463b mov r3, r7
  4055. 8001d18: 4618 mov r0, r3
  4056. 8001d1a: f005 fa65 bl 80071e8 <HAL_MPU_ConfigRegion>
  4057. /** Initializes and configures the Region and the memory to be protected
  4058. */
  4059. MPU_InitStruct.Number = MPU_REGION_NUMBER2;
  4060. 8001d1e: 2302 movs r3, #2
  4061. 8001d20: 707b strb r3, [r7, #1]
  4062. MPU_InitStruct.BaseAddress = 0x24040000;
  4063. 8001d22: 4b0b ldr r3, [pc, #44] @ (8001d50 <MPU_Config+0xa0>)
  4064. 8001d24: 607b str r3, [r7, #4]
  4065. MPU_InitStruct.Size = MPU_REGION_SIZE_512B;
  4066. 8001d26: 2308 movs r3, #8
  4067. 8001d28: 723b strb r3, [r7, #8]
  4068. MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
  4069. 8001d2a: 2300 movs r3, #0
  4070. 8001d2c: 72bb strb r3, [r7, #10]
  4071. MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;
  4072. 8001d2e: 2301 movs r3, #1
  4073. 8001d30: 737b strb r3, [r7, #13]
  4074. MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE;
  4075. 8001d32: 2301 movs r3, #1
  4076. 8001d34: 73fb strb r3, [r7, #15]
  4077. HAL_MPU_ConfigRegion(&MPU_InitStruct);
  4078. 8001d36: 463b mov r3, r7
  4079. 8001d38: 4618 mov r0, r3
  4080. 8001d3a: f005 fa55 bl 80071e8 <HAL_MPU_ConfigRegion>
  4081. /* Enables the MPU */
  4082. HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
  4083. 8001d3e: 2004 movs r0, #4
  4084. 8001d40: f005 fa32 bl 80071a8 <HAL_MPU_Enable>
  4085. }
  4086. 8001d44: bf00 nop
  4087. 8001d46: 3710 adds r7, #16
  4088. 8001d48: 46bd mov sp, r7
  4089. 8001d4a: bd80 pop {r7, pc}
  4090. 8001d4c: 24020000 .word 0x24020000
  4091. 8001d50: 24040000 .word 0x24040000
  4092. 08001d54 <HAL_TIM_PeriodElapsedCallback>:
  4093. * a global variable "uwTick" used as application time base.
  4094. * @param htim : TIM handle
  4095. * @retval None
  4096. */
  4097. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  4098. {
  4099. 8001d54: b580 push {r7, lr}
  4100. 8001d56: b082 sub sp, #8
  4101. 8001d58: af00 add r7, sp, #0
  4102. 8001d5a: 6078 str r0, [r7, #4]
  4103. /* USER CODE BEGIN Callback 0 */
  4104. /* USER CODE END Callback 0 */
  4105. if (htim->Instance == TIM6) {
  4106. 8001d5c: 687b ldr r3, [r7, #4]
  4107. 8001d5e: 681b ldr r3, [r3, #0]
  4108. 8001d60: 4a25 ldr r2, [pc, #148] @ (8001df8 <HAL_TIM_PeriodElapsedCallback+0xa4>)
  4109. 8001d62: 4293 cmp r3, r2
  4110. 8001d64: d102 bne.n 8001d6c <HAL_TIM_PeriodElapsedCallback+0x18>
  4111. HAL_IncTick();
  4112. 8001d66: f003 fb25 bl 80053b4 <HAL_IncTick>
  4113. encoderYChannelA += htim->Instance->ARR;
  4114. }
  4115. }
  4116. /* USER CODE END Callback 1 */
  4117. }
  4118. 8001d6a: e040 b.n 8001dee <HAL_TIM_PeriodElapsedCallback+0x9a>
  4119. else if (htim->Instance == TIM4)
  4120. 8001d6c: 687b ldr r3, [r7, #4]
  4121. 8001d6e: 681b ldr r3, [r3, #0]
  4122. 8001d70: 4a22 ldr r2, [pc, #136] @ (8001dfc <HAL_TIM_PeriodElapsedCallback+0xa8>)
  4123. 8001d72: 4293 cmp r3, r2
  4124. 8001d74: d11b bne.n 8001dae <HAL_TIM_PeriodElapsedCallback+0x5a>
  4125. if(encoderXChannelA > 0)
  4126. 8001d76: 4b22 ldr r3, [pc, #136] @ (8001e00 <HAL_TIM_PeriodElapsedCallback+0xac>)
  4127. 8001d78: 681b ldr r3, [r3, #0]
  4128. 8001d7a: 2b00 cmp r3, #0
  4129. 8001d7c: dd09 ble.n 8001d92 <HAL_TIM_PeriodElapsedCallback+0x3e>
  4130. encoderXChannelB += htim->Instance->ARR;
  4131. 8001d7e: 687b ldr r3, [r7, #4]
  4132. 8001d80: 681b ldr r3, [r3, #0]
  4133. 8001d82: 6adb ldr r3, [r3, #44] @ 0x2c
  4134. 8001d84: 4a1f ldr r2, [pc, #124] @ (8001e04 <HAL_TIM_PeriodElapsedCallback+0xb0>)
  4135. 8001d86: 6812 ldr r2, [r2, #0]
  4136. 8001d88: 4413 add r3, r2
  4137. 8001d8a: 461a mov r2, r3
  4138. 8001d8c: 4b1d ldr r3, [pc, #116] @ (8001e04 <HAL_TIM_PeriodElapsedCallback+0xb0>)
  4139. 8001d8e: 601a str r2, [r3, #0]
  4140. }
  4141. 8001d90: e02d b.n 8001dee <HAL_TIM_PeriodElapsedCallback+0x9a>
  4142. } else if(encoderXChannelB > 0)
  4143. 8001d92: 4b1c ldr r3, [pc, #112] @ (8001e04 <HAL_TIM_PeriodElapsedCallback+0xb0>)
  4144. 8001d94: 681b ldr r3, [r3, #0]
  4145. 8001d96: 2b00 cmp r3, #0
  4146. 8001d98: dd29 ble.n 8001dee <HAL_TIM_PeriodElapsedCallback+0x9a>
  4147. encoderXChannelA += htim->Instance->ARR;
  4148. 8001d9a: 687b ldr r3, [r7, #4]
  4149. 8001d9c: 681b ldr r3, [r3, #0]
  4150. 8001d9e: 6adb ldr r3, [r3, #44] @ 0x2c
  4151. 8001da0: 4a17 ldr r2, [pc, #92] @ (8001e00 <HAL_TIM_PeriodElapsedCallback+0xac>)
  4152. 8001da2: 6812 ldr r2, [r2, #0]
  4153. 8001da4: 4413 add r3, r2
  4154. 8001da6: 461a mov r2, r3
  4155. 8001da8: 4b15 ldr r3, [pc, #84] @ (8001e00 <HAL_TIM_PeriodElapsedCallback+0xac>)
  4156. 8001daa: 601a str r2, [r3, #0]
  4157. }
  4158. 8001dac: e01f b.n 8001dee <HAL_TIM_PeriodElapsedCallback+0x9a>
  4159. else if (htim->Instance == TIM2)
  4160. 8001dae: 687b ldr r3, [r7, #4]
  4161. 8001db0: 681b ldr r3, [r3, #0]
  4162. 8001db2: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  4163. 8001db6: d11a bne.n 8001dee <HAL_TIM_PeriodElapsedCallback+0x9a>
  4164. if(encoderYChannelA > 0)
  4165. 8001db8: 4b13 ldr r3, [pc, #76] @ (8001e08 <HAL_TIM_PeriodElapsedCallback+0xb4>)
  4166. 8001dba: 681b ldr r3, [r3, #0]
  4167. 8001dbc: 2b00 cmp r3, #0
  4168. 8001dbe: dd09 ble.n 8001dd4 <HAL_TIM_PeriodElapsedCallback+0x80>
  4169. encoderYChannelB += htim->Instance->ARR;
  4170. 8001dc0: 687b ldr r3, [r7, #4]
  4171. 8001dc2: 681b ldr r3, [r3, #0]
  4172. 8001dc4: 6adb ldr r3, [r3, #44] @ 0x2c
  4173. 8001dc6: 4a11 ldr r2, [pc, #68] @ (8001e0c <HAL_TIM_PeriodElapsedCallback+0xb8>)
  4174. 8001dc8: 6812 ldr r2, [r2, #0]
  4175. 8001dca: 4413 add r3, r2
  4176. 8001dcc: 461a mov r2, r3
  4177. 8001dce: 4b0f ldr r3, [pc, #60] @ (8001e0c <HAL_TIM_PeriodElapsedCallback+0xb8>)
  4178. 8001dd0: 601a str r2, [r3, #0]
  4179. }
  4180. 8001dd2: e00c b.n 8001dee <HAL_TIM_PeriodElapsedCallback+0x9a>
  4181. } else if(encoderYChannelB > 0)
  4182. 8001dd4: 4b0d ldr r3, [pc, #52] @ (8001e0c <HAL_TIM_PeriodElapsedCallback+0xb8>)
  4183. 8001dd6: 681b ldr r3, [r3, #0]
  4184. 8001dd8: 2b00 cmp r3, #0
  4185. 8001dda: dd08 ble.n 8001dee <HAL_TIM_PeriodElapsedCallback+0x9a>
  4186. encoderYChannelA += htim->Instance->ARR;
  4187. 8001ddc: 687b ldr r3, [r7, #4]
  4188. 8001dde: 681b ldr r3, [r3, #0]
  4189. 8001de0: 6adb ldr r3, [r3, #44] @ 0x2c
  4190. 8001de2: 4a09 ldr r2, [pc, #36] @ (8001e08 <HAL_TIM_PeriodElapsedCallback+0xb4>)
  4191. 8001de4: 6812 ldr r2, [r2, #0]
  4192. 8001de6: 4413 add r3, r2
  4193. 8001de8: 461a mov r2, r3
  4194. 8001dea: 4b07 ldr r3, [pc, #28] @ (8001e08 <HAL_TIM_PeriodElapsedCallback+0xb4>)
  4195. 8001dec: 601a str r2, [r3, #0]
  4196. }
  4197. 8001dee: bf00 nop
  4198. 8001df0: 3708 adds r7, #8
  4199. 8001df2: 46bd mov sp, r7
  4200. 8001df4: bd80 pop {r7, pc}
  4201. 8001df6: bf00 nop
  4202. 8001df8: 40001000 .word 0x40001000
  4203. 8001dfc: 40000800 .word 0x40000800
  4204. 8001e00: 240007a0 .word 0x240007a0
  4205. 8001e04: 240007a4 .word 0x240007a4
  4206. 8001e08: 240007a8 .word 0x240007a8
  4207. 8001e0c: 240007ac .word 0x240007ac
  4208. 08001e10 <Error_Handler>:
  4209. /**
  4210. * @brief This function is executed in case of error occurrence.
  4211. * @retval None
  4212. */
  4213. void Error_Handler(void)
  4214. {
  4215. 8001e10: b480 push {r7}
  4216. 8001e12: af00 add r7, sp, #0
  4217. __ASM volatile ("cpsid i" : : : "memory");
  4218. 8001e14: b672 cpsid i
  4219. }
  4220. 8001e16: bf00 nop
  4221. /* USER CODE BEGIN Error_Handler_Debug */
  4222. /* User can add his own implementation to report the HAL error return state */
  4223. __disable_irq();
  4224. while (1)
  4225. 8001e18: bf00 nop
  4226. 8001e1a: e7fd b.n 8001e18 <Error_Handler+0x8>
  4227. 08001e1c <MeasTasksInit>:
  4228. extern TIM_OC_InitTypeDef motorXYTimerConfigOC;
  4229. extern osTimerId_t motorXTimerHandle;
  4230. extern osTimerId_t motorYTimerHandle;
  4231. void MeasTasksInit (void) {
  4232. 8001e1c: b580 push {r7, lr}
  4233. 8001e1e: b0b6 sub sp, #216 @ 0xd8
  4234. 8001e20: af00 add r7, sp, #0
  4235. vRefmVMutex = osMutexNew (NULL);
  4236. 8001e22: 2000 movs r0, #0
  4237. 8001e24: f011 fdd1 bl 80139ca <osMutexNew>
  4238. 8001e28: 4603 mov r3, r0
  4239. 8001e2a: 4a69 ldr r2, [pc, #420] @ (8001fd0 <MeasTasksInit+0x1b4>)
  4240. 8001e2c: 6013 str r3, [r2, #0]
  4241. resMeasurementsMutex = osMutexNew (NULL);
  4242. 8001e2e: 2000 movs r0, #0
  4243. 8001e30: f011 fdcb bl 80139ca <osMutexNew>
  4244. 8001e34: 4603 mov r3, r0
  4245. 8001e36: 4a67 ldr r2, [pc, #412] @ (8001fd4 <MeasTasksInit+0x1b8>)
  4246. 8001e38: 6013 str r3, [r2, #0]
  4247. sensorsInfoMutex = osMutexNew (NULL);
  4248. 8001e3a: 2000 movs r0, #0
  4249. 8001e3c: f011 fdc5 bl 80139ca <osMutexNew>
  4250. 8001e40: 4603 mov r3, r0
  4251. 8001e42: 4a65 ldr r2, [pc, #404] @ (8001fd8 <MeasTasksInit+0x1bc>)
  4252. 8001e44: 6013 str r3, [r2, #0]
  4253. ILxRefMutex = osMutexNew (NULL);
  4254. 8001e46: 2000 movs r0, #0
  4255. 8001e48: f011 fdbf bl 80139ca <osMutexNew>
  4256. 8001e4c: 4603 mov r3, r0
  4257. 8001e4e: 4a63 ldr r2, [pc, #396] @ (8001fdc <MeasTasksInit+0x1c0>)
  4258. 8001e50: 6013 str r3, [r2, #0]
  4259. adc1MeasDataQueue = osMessageQueueNew (8, sizeof (ADC1_Data), NULL);
  4260. 8001e52: 2200 movs r2, #0
  4261. 8001e54: 2120 movs r1, #32
  4262. 8001e56: 2008 movs r0, #8
  4263. 8001e58: f011 fec5 bl 8013be6 <osMessageQueueNew>
  4264. 8001e5c: 4603 mov r3, r0
  4265. 8001e5e: 4a60 ldr r2, [pc, #384] @ (8001fe0 <MeasTasksInit+0x1c4>)
  4266. 8001e60: 6013 str r3, [r2, #0]
  4267. adc2MeasDataQueue = osMessageQueueNew (8, sizeof (ADC2_Data), NULL);
  4268. 8001e62: 2200 movs r2, #0
  4269. 8001e64: 2120 movs r1, #32
  4270. 8001e66: 2008 movs r0, #8
  4271. 8001e68: f011 febd bl 8013be6 <osMessageQueueNew>
  4272. 8001e6c: 4603 mov r3, r0
  4273. 8001e6e: 4a5d ldr r2, [pc, #372] @ (8001fe4 <MeasTasksInit+0x1c8>)
  4274. 8001e70: 6013 str r3, [r2, #0]
  4275. adc3MeasDataQueue = osMessageQueueNew (8, sizeof (ADC3_Data), NULL);
  4276. 8001e72: 2200 movs r2, #0
  4277. 8001e74: 2120 movs r1, #32
  4278. 8001e76: 2008 movs r0, #8
  4279. 8001e78: f011 feb5 bl 8013be6 <osMessageQueueNew>
  4280. 8001e7c: 4603 mov r3, r0
  4281. 8001e7e: 4a5a ldr r2, [pc, #360] @ (8001fe8 <MeasTasksInit+0x1cc>)
  4282. 8001e80: 6013 str r3, [r2, #0]
  4283. osThreadAttr_t osThreadAttradc1MeasTask = { 0 };
  4284. 8001e82: f107 03b4 add.w r3, r7, #180 @ 0xb4
  4285. 8001e86: 2224 movs r2, #36 @ 0x24
  4286. 8001e88: 2100 movs r1, #0
  4287. 8001e8a: 4618 mov r0, r3
  4288. 8001e8c: f015 fe63 bl 8017b56 <memset>
  4289. osThreadAttr_t osThreadAttradc2MeasTask = { 0 };
  4290. 8001e90: f107 0390 add.w r3, r7, #144 @ 0x90
  4291. 8001e94: 2224 movs r2, #36 @ 0x24
  4292. 8001e96: 2100 movs r1, #0
  4293. 8001e98: 4618 mov r0, r3
  4294. 8001e9a: f015 fe5c bl 8017b56 <memset>
  4295. osThreadAttr_t osThreadAttradc3MeasTask = { 0 };
  4296. 8001e9e: f107 036c add.w r3, r7, #108 @ 0x6c
  4297. 8001ea2: 2224 movs r2, #36 @ 0x24
  4298. 8001ea4: 2100 movs r1, #0
  4299. 8001ea6: 4618 mov r0, r3
  4300. 8001ea8: f015 fe55 bl 8017b56 <memset>
  4301. osThreadAttradc1MeasTask.stack_size = configMINIMAL_STACK_SIZE * 2;
  4302. 8001eac: f44f 6380 mov.w r3, #1024 @ 0x400
  4303. 8001eb0: f8c7 30c8 str.w r3, [r7, #200] @ 0xc8
  4304. osThreadAttradc1MeasTask.priority = (osPriority_t)osPriorityRealtime;
  4305. 8001eb4: 2330 movs r3, #48 @ 0x30
  4306. 8001eb6: f8c7 30cc str.w r3, [r7, #204] @ 0xcc
  4307. osThreadAttradc2MeasTask.stack_size = configMINIMAL_STACK_SIZE * 2;
  4308. 8001eba: f44f 6380 mov.w r3, #1024 @ 0x400
  4309. 8001ebe: f8c7 30a4 str.w r3, [r7, #164] @ 0xa4
  4310. osThreadAttradc2MeasTask.priority = (osPriority_t)osPriorityRealtime;
  4311. 8001ec2: 2330 movs r3, #48 @ 0x30
  4312. 8001ec4: f8c7 30a8 str.w r3, [r7, #168] @ 0xa8
  4313. osThreadAttradc3MeasTask.stack_size = configMINIMAL_STACK_SIZE * 2;
  4314. 8001ec8: f44f 6380 mov.w r3, #1024 @ 0x400
  4315. 8001ecc: f8c7 3080 str.w r3, [r7, #128] @ 0x80
  4316. osThreadAttradc3MeasTask.priority = (osPriority_t)osPriorityNormal;
  4317. 8001ed0: 2318 movs r3, #24
  4318. 8001ed2: f8c7 3084 str.w r3, [r7, #132] @ 0x84
  4319. adc1MeasTaskHandle = osThreadNew (ADC1MeasTask, NULL, &osThreadAttradc1MeasTask);
  4320. 8001ed6: f107 03b4 add.w r3, r7, #180 @ 0xb4
  4321. 8001eda: 461a mov r2, r3
  4322. 8001edc: 2100 movs r1, #0
  4323. 8001ede: 4843 ldr r0, [pc, #268] @ (8001fec <MeasTasksInit+0x1d0>)
  4324. 8001ee0: f011 fbce bl 8013680 <osThreadNew>
  4325. 8001ee4: 4603 mov r3, r0
  4326. 8001ee6: 4a42 ldr r2, [pc, #264] @ (8001ff0 <MeasTasksInit+0x1d4>)
  4327. 8001ee8: 6013 str r3, [r2, #0]
  4328. adc2MeasTaskHandle = osThreadNew (ADC2MeasTask, NULL, &osThreadAttradc2MeasTask);
  4329. 8001eea: f107 0390 add.w r3, r7, #144 @ 0x90
  4330. 8001eee: 461a mov r2, r3
  4331. 8001ef0: 2100 movs r1, #0
  4332. 8001ef2: 4840 ldr r0, [pc, #256] @ (8001ff4 <MeasTasksInit+0x1d8>)
  4333. 8001ef4: f011 fbc4 bl 8013680 <osThreadNew>
  4334. 8001ef8: 4603 mov r3, r0
  4335. 8001efa: 4a3f ldr r2, [pc, #252] @ (8001ff8 <MeasTasksInit+0x1dc>)
  4336. 8001efc: 6013 str r3, [r2, #0]
  4337. adc3MeasTaskHandle = osThreadNew (ADC3MeasTask, NULL, &osThreadAttradc3MeasTask);
  4338. 8001efe: f107 036c add.w r3, r7, #108 @ 0x6c
  4339. 8001f02: 461a mov r2, r3
  4340. 8001f04: 2100 movs r1, #0
  4341. 8001f06: 483d ldr r0, [pc, #244] @ (8001ffc <MeasTasksInit+0x1e0>)
  4342. 8001f08: f011 fbba bl 8013680 <osThreadNew>
  4343. 8001f0c: 4603 mov r3, r0
  4344. 8001f0e: 4a3c ldr r2, [pc, #240] @ (8002000 <MeasTasksInit+0x1e4>)
  4345. 8001f10: 6013 str r3, [r2, #0]
  4346. limiterSwitchDataQueue = osMessageQueueNew (8, sizeof (LimiterSwitchData), NULL);
  4347. 8001f12: 2200 movs r2, #0
  4348. 8001f14: 2104 movs r1, #4
  4349. 8001f16: 2008 movs r0, #8
  4350. 8001f18: f011 fe65 bl 8013be6 <osMessageQueueNew>
  4351. 8001f1c: 4603 mov r3, r0
  4352. 8001f1e: 4a39 ldr r2, [pc, #228] @ (8002004 <MeasTasksInit+0x1e8>)
  4353. 8001f20: 6013 str r3, [r2, #0]
  4354. osThreadAttr_t osThreadAttradc1LimiterSwitchTask = { 0 };
  4355. 8001f22: f107 0348 add.w r3, r7, #72 @ 0x48
  4356. 8001f26: 2224 movs r2, #36 @ 0x24
  4357. 8001f28: 2100 movs r1, #0
  4358. 8001f2a: 4618 mov r0, r3
  4359. 8001f2c: f015 fe13 bl 8017b56 <memset>
  4360. osThreadAttradc1LimiterSwitchTask.stack_size = configMINIMAL_STACK_SIZE * 2;
  4361. 8001f30: f44f 6380 mov.w r3, #1024 @ 0x400
  4362. 8001f34: 65fb str r3, [r7, #92] @ 0x5c
  4363. osThreadAttradc1LimiterSwitchTask.priority = (osPriority_t)osPriorityNormal;
  4364. 8001f36: 2318 movs r3, #24
  4365. 8001f38: 663b str r3, [r7, #96] @ 0x60
  4366. limiterSwitchTaskHandle = osThreadNew (LimiterSwitchTask, NULL, &osThreadAttradc1LimiterSwitchTask);
  4367. 8001f3a: f107 0348 add.w r3, r7, #72 @ 0x48
  4368. 8001f3e: 461a mov r2, r3
  4369. 8001f40: 2100 movs r1, #0
  4370. 8001f42: 4831 ldr r0, [pc, #196] @ (8002008 <MeasTasksInit+0x1ec>)
  4371. 8001f44: f011 fb9c bl 8013680 <osThreadNew>
  4372. 8001f48: 4603 mov r3, r0
  4373. 8001f4a: 4a30 ldr r2, [pc, #192] @ (800200c <MeasTasksInit+0x1f0>)
  4374. 8001f4c: 6013 str r3, [r2, #0]
  4375. encoderXDataQueue = osMessageQueueNew (8, sizeof (EncoderData), NULL);
  4376. 8001f4e: 2200 movs r2, #0
  4377. 8001f50: 2102 movs r1, #2
  4378. 8001f52: 2008 movs r0, #8
  4379. 8001f54: f011 fe47 bl 8013be6 <osMessageQueueNew>
  4380. 8001f58: 4603 mov r3, r0
  4381. 8001f5a: 4a2d ldr r2, [pc, #180] @ (8002010 <MeasTasksInit+0x1f4>)
  4382. 8001f5c: 6013 str r3, [r2, #0]
  4383. encoderYDataQueue = osMessageQueueNew (8, sizeof (EncoderData), NULL);
  4384. 8001f5e: 2200 movs r2, #0
  4385. 8001f60: 2102 movs r1, #2
  4386. 8001f62: 2008 movs r0, #8
  4387. 8001f64: f011 fe3f bl 8013be6 <osMessageQueueNew>
  4388. 8001f68: 4603 mov r3, r0
  4389. 8001f6a: 4a2a ldr r2, [pc, #168] @ (8002014 <MeasTasksInit+0x1f8>)
  4390. 8001f6c: 6013 str r3, [r2, #0]
  4391. osThreadAttr_t osThreadAttrEncoderXTask = { 0 };
  4392. 8001f6e: f107 0324 add.w r3, r7, #36 @ 0x24
  4393. 8001f72: 2224 movs r2, #36 @ 0x24
  4394. 8001f74: 2100 movs r1, #0
  4395. 8001f76: 4618 mov r0, r3
  4396. 8001f78: f015 fded bl 8017b56 <memset>
  4397. osThreadAttrEncoderXTask.stack_size = configMINIMAL_STACK_SIZE * 2;
  4398. 8001f7c: f44f 6380 mov.w r3, #1024 @ 0x400
  4399. 8001f80: 63bb str r3, [r7, #56] @ 0x38
  4400. osThreadAttrEncoderXTask.priority = (osPriority_t)osPriorityNormal;
  4401. 8001f82: 2318 movs r3, #24
  4402. 8001f84: 63fb str r3, [r7, #60] @ 0x3c
  4403. encoderXTaskHandle = osThreadNew (EncoderTask, encoderXDataQueue, &osThreadAttrEncoderXTask);
  4404. 8001f86: 4b22 ldr r3, [pc, #136] @ (8002010 <MeasTasksInit+0x1f4>)
  4405. 8001f88: 681b ldr r3, [r3, #0]
  4406. 8001f8a: f107 0224 add.w r2, r7, #36 @ 0x24
  4407. 8001f8e: 4619 mov r1, r3
  4408. 8001f90: 4821 ldr r0, [pc, #132] @ (8002018 <MeasTasksInit+0x1fc>)
  4409. 8001f92: f011 fb75 bl 8013680 <osThreadNew>
  4410. 8001f96: 4603 mov r3, r0
  4411. 8001f98: 4a20 ldr r2, [pc, #128] @ (800201c <MeasTasksInit+0x200>)
  4412. 8001f9a: 6013 str r3, [r2, #0]
  4413. osThreadAttr_t osThreadAttrEncoderYTask = { 0 };
  4414. 8001f9c: 463b mov r3, r7
  4415. 8001f9e: 2224 movs r2, #36 @ 0x24
  4416. 8001fa0: 2100 movs r1, #0
  4417. 8001fa2: 4618 mov r0, r3
  4418. 8001fa4: f015 fdd7 bl 8017b56 <memset>
  4419. osThreadAttrEncoderYTask.stack_size = configMINIMAL_STACK_SIZE * 2;
  4420. 8001fa8: f44f 6380 mov.w r3, #1024 @ 0x400
  4421. 8001fac: 617b str r3, [r7, #20]
  4422. osThreadAttrEncoderYTask.priority = (osPriority_t)osPriorityNormal;
  4423. 8001fae: 2318 movs r3, #24
  4424. 8001fb0: 61bb str r3, [r7, #24]
  4425. encoderYTaskHandle = osThreadNew (EncoderTask, encoderYDataQueue, &osThreadAttrEncoderYTask);
  4426. 8001fb2: 4b18 ldr r3, [pc, #96] @ (8002014 <MeasTasksInit+0x1f8>)
  4427. 8001fb4: 681b ldr r3, [r3, #0]
  4428. 8001fb6: 463a mov r2, r7
  4429. 8001fb8: 4619 mov r1, r3
  4430. 8001fba: 4817 ldr r0, [pc, #92] @ (8002018 <MeasTasksInit+0x1fc>)
  4431. 8001fbc: f011 fb60 bl 8013680 <osThreadNew>
  4432. 8001fc0: 4603 mov r3, r0
  4433. 8001fc2: 4a17 ldr r2, [pc, #92] @ (8002020 <MeasTasksInit+0x204>)
  4434. 8001fc4: 6013 str r3, [r2, #0]
  4435. }
  4436. 8001fc6: bf00 nop
  4437. 8001fc8: 37d8 adds r7, #216 @ 0xd8
  4438. 8001fca: 46bd mov sp, r7
  4439. 8001fcc: bd80 pop {r7, pc}
  4440. 8001fce: bf00 nop
  4441. 8001fd0: 240007e0 .word 0x240007e0
  4442. 8001fd4: 240007e4 .word 0x240007e4
  4443. 8001fd8: 240007e8 .word 0x240007e8
  4444. 8001fdc: 240007ec .word 0x240007ec
  4445. 8001fe0: 240007c8 .word 0x240007c8
  4446. 8001fe4: 240007cc .word 0x240007cc
  4447. 8001fe8: 240007d0 .word 0x240007d0
  4448. 8001fec: 08002029 .word 0x08002029
  4449. 8001ff0: 240007b0 .word 0x240007b0
  4450. 8001ff4: 080023b1 .word 0x080023b1
  4451. 8001ff8: 240007b4 .word 0x240007b4
  4452. 8001ffc: 080026b9 .word 0x080026b9
  4453. 8002000: 240007b8 .word 0x240007b8
  4454. 8002004: 240007d4 .word 0x240007d4
  4455. 8002008: 08002a35 .word 0x08002a35
  4456. 800200c: 240007bc .word 0x240007bc
  4457. 8002010: 240007d8 .word 0x240007d8
  4458. 8002014: 240007dc .word 0x240007dc
  4459. 8002018: 08002c25 .word 0x08002c25
  4460. 800201c: 240007c0 .word 0x240007c0
  4461. 8002020: 240007c4 .word 0x240007c4
  4462. 8002024: 00000000 .word 0x00000000
  4463. 08002028 <ADC1MeasTask>:
  4464. void ADC1MeasTask (void* arg) {
  4465. 8002028: b580 push {r7, lr}
  4466. 800202a: b09a sub sp, #104 @ 0x68
  4467. 800202c: af00 add r7, sp, #0
  4468. 800202e: 6078 str r0, [r7, #4]
  4469. float circBuffer[VOLTAGES_COUNT][CIRC_BUFF_LEN] = { 0 };
  4470. 8002030: f107 032c add.w r3, r7, #44 @ 0x2c
  4471. 8002034: 2228 movs r2, #40 @ 0x28
  4472. 8002036: 2100 movs r1, #0
  4473. 8002038: 4618 mov r0, r3
  4474. 800203a: f015 fd8c bl 8017b56 <memset>
  4475. float rms[VOLTAGES_COUNT] = { 0 };
  4476. 800203e: f04f 0300 mov.w r3, #0
  4477. 8002042: 62bb str r3, [r7, #40] @ 0x28
  4478. ;
  4479. ADC1_Data adcData = { 0 };
  4480. 8002044: f107 0308 add.w r3, r7, #8
  4481. 8002048: 2220 movs r2, #32
  4482. 800204a: 2100 movs r1, #0
  4483. 800204c: 4618 mov r0, r3
  4484. 800204e: f015 fd82 bl 8017b56 <memset>
  4485. uint32_t circBuffPos = 0;
  4486. 8002052: 2300 movs r3, #0
  4487. 8002054: 667b str r3, [r7, #100] @ 0x64
  4488. float gainCorrection = 1.0;
  4489. 8002056: f04f 537e mov.w r3, #1065353216 @ 0x3f800000
  4490. 800205a: 663b str r3, [r7, #96] @ 0x60
  4491. while (pdTRUE) {
  4492. osMessageQueueGet (adc1MeasDataQueue, &adcData, 0, osWaitForever);
  4493. 800205c: 4bc8 ldr r3, [pc, #800] @ (8002380 <ADC1MeasTask+0x358>)
  4494. 800205e: 6818 ldr r0, [r3, #0]
  4495. 8002060: f107 0108 add.w r1, r7, #8
  4496. 8002064: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  4497. 8002068: 2200 movs r2, #0
  4498. 800206a: f011 fe8f bl 8013d8c <osMessageQueueGet>
  4499. #ifdef GAIN_AUTO_CORRECTION
  4500. if (osMutexAcquire (vRefmVMutex, osWaitForever) == osOK) {
  4501. 800206e: 4bc5 ldr r3, [pc, #788] @ (8002384 <ADC1MeasTask+0x35c>)
  4502. 8002070: 681b ldr r3, [r3, #0]
  4503. 8002072: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  4504. 8002076: 4618 mov r0, r3
  4505. 8002078: f011 fd2d bl 8013ad6 <osMutexAcquire>
  4506. 800207c: 4603 mov r3, r0
  4507. 800207e: 2b00 cmp r3, #0
  4508. 8002080: d10c bne.n 800209c <ADC1MeasTask+0x74>
  4509. gainCorrection = (float)vRefmV;
  4510. 8002082: 4bc1 ldr r3, [pc, #772] @ (8002388 <ADC1MeasTask+0x360>)
  4511. 8002084: 681b ldr r3, [r3, #0]
  4512. 8002086: ee07 3a90 vmov s15, r3
  4513. 800208a: eef8 7a67 vcvt.f32.u32 s15, s15
  4514. 800208e: edc7 7a18 vstr s15, [r7, #96] @ 0x60
  4515. osMutexRelease (vRefmVMutex);
  4516. 8002092: 4bbc ldr r3, [pc, #752] @ (8002384 <ADC1MeasTask+0x35c>)
  4517. 8002094: 681b ldr r3, [r3, #0]
  4518. 8002096: 4618 mov r0, r3
  4519. 8002098: f011 fd68 bl 8013b6c <osMutexRelease>
  4520. }
  4521. gainCorrection = gainCorrection / EXT_VREF_mV;
  4522. 800209c: ed97 7a18 vldr s14, [r7, #96] @ 0x60
  4523. 80020a0: eddf 6aba vldr s13, [pc, #744] @ 800238c <ADC1MeasTask+0x364>
  4524. 80020a4: eec7 7a26 vdiv.f32 s15, s14, s13
  4525. 80020a8: edc7 7a18 vstr s15, [r7, #96] @ 0x60
  4526. #endif
  4527. for (uint8_t i = 0; i < VOLTAGES_COUNT; i++) {
  4528. 80020ac: 2300 movs r3, #0
  4529. 80020ae: f887 305f strb.w r3, [r7, #95] @ 0x5f
  4530. 80020b2: e0e7 b.n 8002284 <ADC1MeasTask+0x25c>
  4531. float val = adcData.adcDataBuffer[i] * deltaADC * U_CHANNEL_CONST * gainCorrection * U_MeasCorrectionData[i].gain + U_MeasCorrectionData[i].offset;
  4532. 80020b4: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4533. 80020b8: 005b lsls r3, r3, #1
  4534. 80020ba: 3368 adds r3, #104 @ 0x68
  4535. 80020bc: 443b add r3, r7
  4536. 80020be: f833 3c60 ldrh.w r3, [r3, #-96]
  4537. 80020c2: ee07 3a90 vmov s15, r3
  4538. 80020c6: eeb8 7be7 vcvt.f64.s32 d7, s15
  4539. 80020ca: eeb0 6b08 vmov.f64 d6, #8 @ 0x40400000 3.0
  4540. 80020ce: ee27 6b06 vmul.f64 d6, d7, d6
  4541. 80020d2: ed9f 5ba5 vldr d5, [pc, #660] @ 8002368 <ADC1MeasTask+0x340>
  4542. 80020d6: ee86 7b05 vdiv.f64 d7, d6, d5
  4543. 80020da: ed9f 6ba5 vldr d6, [pc, #660] @ 8002370 <ADC1MeasTask+0x348>
  4544. 80020de: ee27 6b06 vmul.f64 d6, d7, d6
  4545. 80020e2: edd7 7a18 vldr s15, [r7, #96] @ 0x60
  4546. 80020e6: eeb7 7ae7 vcvt.f64.f32 d7, s15
  4547. 80020ea: ee26 6b07 vmul.f64 d6, d6, d7
  4548. 80020ee: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4549. 80020f2: 4aa7 ldr r2, [pc, #668] @ (8002390 <ADC1MeasTask+0x368>)
  4550. 80020f4: 00db lsls r3, r3, #3
  4551. 80020f6: 4413 add r3, r2
  4552. 80020f8: edd3 7a00 vldr s15, [r3]
  4553. 80020fc: eeb7 7ae7 vcvt.f64.f32 d7, s15
  4554. 8002100: ee26 6b07 vmul.f64 d6, d6, d7
  4555. 8002104: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4556. 8002108: 4aa1 ldr r2, [pc, #644] @ (8002390 <ADC1MeasTask+0x368>)
  4557. 800210a: 00db lsls r3, r3, #3
  4558. 800210c: 4413 add r3, r2
  4559. 800210e: 3304 adds r3, #4
  4560. 8002110: edd3 7a00 vldr s15, [r3]
  4561. 8002114: eeb7 7ae7 vcvt.f64.f32 d7, s15
  4562. 8002118: ee36 7b07 vadd.f64 d7, d6, d7
  4563. 800211c: eef7 7bc7 vcvt.f32.f64 s15, d7
  4564. 8002120: edc7 7a15 vstr s15, [r7, #84] @ 0x54
  4565. circBuffer[i][circBuffPos] = val;
  4566. 8002124: f897 205f ldrb.w r2, [r7, #95] @ 0x5f
  4567. 8002128: 4613 mov r3, r2
  4568. 800212a: 009b lsls r3, r3, #2
  4569. 800212c: 4413 add r3, r2
  4570. 800212e: 005b lsls r3, r3, #1
  4571. 8002130: 6e7a ldr r2, [r7, #100] @ 0x64
  4572. 8002132: 4413 add r3, r2
  4573. 8002134: 009b lsls r3, r3, #2
  4574. 8002136: 3368 adds r3, #104 @ 0x68
  4575. 8002138: 443b add r3, r7
  4576. 800213a: 3b3c subs r3, #60 @ 0x3c
  4577. 800213c: 6d7a ldr r2, [r7, #84] @ 0x54
  4578. 800213e: 601a str r2, [r3, #0]
  4579. rms[i] = 0.0;
  4580. 8002140: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4581. 8002144: 009b lsls r3, r3, #2
  4582. 8002146: 3368 adds r3, #104 @ 0x68
  4583. 8002148: 443b add r3, r7
  4584. 800214a: 3b40 subs r3, #64 @ 0x40
  4585. 800214c: f04f 0200 mov.w r2, #0
  4586. 8002150: 601a str r2, [r3, #0]
  4587. for (uint8_t c = 0; c < CIRC_BUFF_LEN; c++) {
  4588. 8002152: 2300 movs r3, #0
  4589. 8002154: f887 305e strb.w r3, [r7, #94] @ 0x5e
  4590. 8002158: e025 b.n 80021a6 <ADC1MeasTask+0x17e>
  4591. rms[i] += circBuffer[i][c];
  4592. 800215a: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4593. 800215e: 009b lsls r3, r3, #2
  4594. 8002160: 3368 adds r3, #104 @ 0x68
  4595. 8002162: 443b add r3, r7
  4596. 8002164: 3b40 subs r3, #64 @ 0x40
  4597. 8002166: ed93 7a00 vldr s14, [r3]
  4598. 800216a: f897 205f ldrb.w r2, [r7, #95] @ 0x5f
  4599. 800216e: f897 105e ldrb.w r1, [r7, #94] @ 0x5e
  4600. 8002172: 4613 mov r3, r2
  4601. 8002174: 009b lsls r3, r3, #2
  4602. 8002176: 4413 add r3, r2
  4603. 8002178: 005b lsls r3, r3, #1
  4604. 800217a: 440b add r3, r1
  4605. 800217c: 009b lsls r3, r3, #2
  4606. 800217e: 3368 adds r3, #104 @ 0x68
  4607. 8002180: 443b add r3, r7
  4608. 8002182: 3b3c subs r3, #60 @ 0x3c
  4609. 8002184: edd3 7a00 vldr s15, [r3]
  4610. 8002188: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4611. 800218c: ee77 7a27 vadd.f32 s15, s14, s15
  4612. 8002190: 009b lsls r3, r3, #2
  4613. 8002192: 3368 adds r3, #104 @ 0x68
  4614. 8002194: 443b add r3, r7
  4615. 8002196: 3b40 subs r3, #64 @ 0x40
  4616. 8002198: edc3 7a00 vstr s15, [r3]
  4617. for (uint8_t c = 0; c < CIRC_BUFF_LEN; c++) {
  4618. 800219c: f897 305e ldrb.w r3, [r7, #94] @ 0x5e
  4619. 80021a0: 3301 adds r3, #1
  4620. 80021a2: f887 305e strb.w r3, [r7, #94] @ 0x5e
  4621. 80021a6: f897 305e ldrb.w r3, [r7, #94] @ 0x5e
  4622. 80021aa: 2b09 cmp r3, #9
  4623. 80021ac: d9d5 bls.n 800215a <ADC1MeasTask+0x132>
  4624. }
  4625. rms[i] = rms[i] / CIRC_BUFF_LEN;
  4626. 80021ae: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4627. 80021b2: 009b lsls r3, r3, #2
  4628. 80021b4: 3368 adds r3, #104 @ 0x68
  4629. 80021b6: 443b add r3, r7
  4630. 80021b8: 3b40 subs r3, #64 @ 0x40
  4631. 80021ba: ed93 7a00 vldr s14, [r3]
  4632. 80021be: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4633. 80021c2: eef2 6a04 vmov.f32 s13, #36 @ 0x41200000 10.0
  4634. 80021c6: eec7 7a26 vdiv.f32 s15, s14, s13
  4635. 80021ca: 009b lsls r3, r3, #2
  4636. 80021cc: 3368 adds r3, #104 @ 0x68
  4637. 80021ce: 443b add r3, r7
  4638. 80021d0: 3b40 subs r3, #64 @ 0x40
  4639. 80021d2: edc3 7a00 vstr s15, [r3]
  4640. if (osMutexAcquire (resMeasurementsMutex, osWaitForever) == osOK) {
  4641. 80021d6: 4b6f ldr r3, [pc, #444] @ (8002394 <ADC1MeasTask+0x36c>)
  4642. 80021d8: 681b ldr r3, [r3, #0]
  4643. 80021da: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  4644. 80021de: 4618 mov r0, r3
  4645. 80021e0: f011 fc79 bl 8013ad6 <osMutexAcquire>
  4646. 80021e4: 4603 mov r3, r0
  4647. 80021e6: 2b00 cmp r3, #0
  4648. 80021e8: d147 bne.n 800227a <ADC1MeasTask+0x252>
  4649. if (fabs (resMeasurements.voltagePeak[i]) < fabs (val)) {
  4650. 80021ea: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4651. 80021ee: 4a6a ldr r2, [pc, #424] @ (8002398 <ADC1MeasTask+0x370>)
  4652. 80021f0: 3302 adds r3, #2
  4653. 80021f2: 009b lsls r3, r3, #2
  4654. 80021f4: 4413 add r3, r2
  4655. 80021f6: 3304 adds r3, #4
  4656. 80021f8: edd3 7a00 vldr s15, [r3]
  4657. 80021fc: eeb0 7ae7 vabs.f32 s14, s15
  4658. 8002200: edd7 7a15 vldr s15, [r7, #84] @ 0x54
  4659. 8002204: eef0 7ae7 vabs.f32 s15, s15
  4660. 8002208: eeb4 7ae7 vcmpe.f32 s14, s15
  4661. 800220c: eef1 fa10 vmrs APSR_nzcv, fpscr
  4662. 8002210: d508 bpl.n 8002224 <ADC1MeasTask+0x1fc>
  4663. resMeasurements.voltagePeak[i] = val;
  4664. 8002212: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4665. 8002216: 4a60 ldr r2, [pc, #384] @ (8002398 <ADC1MeasTask+0x370>)
  4666. 8002218: 3302 adds r3, #2
  4667. 800221a: 009b lsls r3, r3, #2
  4668. 800221c: 4413 add r3, r2
  4669. 800221e: 3304 adds r3, #4
  4670. 8002220: 6d7a ldr r2, [r7, #84] @ 0x54
  4671. 8002222: 601a str r2, [r3, #0]
  4672. }
  4673. resMeasurements.voltageRMS[i] = rms[i];
  4674. 8002224: f897 205f ldrb.w r2, [r7, #95] @ 0x5f
  4675. 8002228: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4676. 800222c: 0092 lsls r2, r2, #2
  4677. 800222e: 3268 adds r2, #104 @ 0x68
  4678. 8002230: 443a add r2, r7
  4679. 8002232: 3a40 subs r2, #64 @ 0x40
  4680. 8002234: 6812 ldr r2, [r2, #0]
  4681. 8002236: 4958 ldr r1, [pc, #352] @ (8002398 <ADC1MeasTask+0x370>)
  4682. 8002238: 009b lsls r3, r3, #2
  4683. 800223a: 440b add r3, r1
  4684. 800223c: 601a str r2, [r3, #0]
  4685. resMeasurements.power[i] = resMeasurements.voltageRMS[i] * resMeasurements.currentRMS[i];
  4686. 800223e: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4687. 8002242: 4a55 ldr r2, [pc, #340] @ (8002398 <ADC1MeasTask+0x370>)
  4688. 8002244: 009b lsls r3, r3, #2
  4689. 8002246: 4413 add r3, r2
  4690. 8002248: ed93 7a00 vldr s14, [r3]
  4691. 800224c: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4692. 8002250: 4a51 ldr r2, [pc, #324] @ (8002398 <ADC1MeasTask+0x370>)
  4693. 8002252: 3306 adds r3, #6
  4694. 8002254: 009b lsls r3, r3, #2
  4695. 8002256: 4413 add r3, r2
  4696. 8002258: edd3 7a00 vldr s15, [r3]
  4697. 800225c: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4698. 8002260: ee67 7a27 vmul.f32 s15, s14, s15
  4699. 8002264: 4a4c ldr r2, [pc, #304] @ (8002398 <ADC1MeasTask+0x370>)
  4700. 8002266: 330c adds r3, #12
  4701. 8002268: 009b lsls r3, r3, #2
  4702. 800226a: 4413 add r3, r2
  4703. 800226c: edc3 7a00 vstr s15, [r3]
  4704. osMutexRelease (resMeasurementsMutex);
  4705. 8002270: 4b48 ldr r3, [pc, #288] @ (8002394 <ADC1MeasTask+0x36c>)
  4706. 8002272: 681b ldr r3, [r3, #0]
  4707. 8002274: 4618 mov r0, r3
  4708. 8002276: f011 fc79 bl 8013b6c <osMutexRelease>
  4709. for (uint8_t i = 0; i < VOLTAGES_COUNT; i++) {
  4710. 800227a: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4711. 800227e: 3301 adds r3, #1
  4712. 8002280: f887 305f strb.w r3, [r7, #95] @ 0x5f
  4713. 8002284: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4714. 8002288: 2b00 cmp r3, #0
  4715. 800228a: f43f af13 beq.w 80020b4 <ADC1MeasTask+0x8c>
  4716. }
  4717. }
  4718. ++circBuffPos;
  4719. 800228e: 6e7b ldr r3, [r7, #100] @ 0x64
  4720. 8002290: 3301 adds r3, #1
  4721. 8002292: 667b str r3, [r7, #100] @ 0x64
  4722. circBuffPos = circBuffPos % CIRC_BUFF_LEN;
  4723. 8002294: 6e7a ldr r2, [r7, #100] @ 0x64
  4724. 8002296: 4b41 ldr r3, [pc, #260] @ (800239c <ADC1MeasTask+0x374>)
  4725. 8002298: fba3 1302 umull r1, r3, r3, r2
  4726. 800229c: 08d9 lsrs r1, r3, #3
  4727. 800229e: 460b mov r3, r1
  4728. 80022a0: 009b lsls r3, r3, #2
  4729. 80022a2: 440b add r3, r1
  4730. 80022a4: 005b lsls r3, r3, #1
  4731. 80022a6: 1ad3 subs r3, r2, r3
  4732. 80022a8: 667b str r3, [r7, #100] @ 0x64
  4733. if (osMutexAcquire (ILxRefMutex, osWaitForever) == osOK) {
  4734. 80022aa: 4b3d ldr r3, [pc, #244] @ (80023a0 <ADC1MeasTask+0x378>)
  4735. 80022ac: 681b ldr r3, [r3, #0]
  4736. 80022ae: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  4737. 80022b2: 4618 mov r0, r3
  4738. 80022b4: f011 fc0f bl 8013ad6 <osMutexAcquire>
  4739. 80022b8: 4603 mov r3, r0
  4740. 80022ba: 2b00 cmp r3, #0
  4741. 80022bc: d124 bne.n 8002308 <ADC1MeasTask+0x2e0>
  4742. uint8_t refIdx = 0;
  4743. 80022be: 2300 movs r3, #0
  4744. 80022c0: f887 305d strb.w r3, [r7, #93] @ 0x5d
  4745. for (uint8_t i = (uint8_t)IL1Ref; i <= (uint8_t)IL3Ref; i++) {
  4746. 80022c4: 2303 movs r3, #3
  4747. 80022c6: f887 305c strb.w r3, [r7, #92] @ 0x5c
  4748. 80022ca: e014 b.n 80022f6 <ADC1MeasTask+0x2ce>
  4749. ILxRef[refIdx++] = adcData.adcDataBuffer[i];
  4750. 80022cc: f897 205c ldrb.w r2, [r7, #92] @ 0x5c
  4751. 80022d0: f897 305d ldrb.w r3, [r7, #93] @ 0x5d
  4752. 80022d4: 1c59 adds r1, r3, #1
  4753. 80022d6: f887 105d strb.w r1, [r7, #93] @ 0x5d
  4754. 80022da: 4619 mov r1, r3
  4755. 80022dc: 0053 lsls r3, r2, #1
  4756. 80022de: 3368 adds r3, #104 @ 0x68
  4757. 80022e0: 443b add r3, r7
  4758. 80022e2: f833 2c60 ldrh.w r2, [r3, #-96]
  4759. 80022e6: 4b2f ldr r3, [pc, #188] @ (80023a4 <ADC1MeasTask+0x37c>)
  4760. 80022e8: f823 2011 strh.w r2, [r3, r1, lsl #1]
  4761. for (uint8_t i = (uint8_t)IL1Ref; i <= (uint8_t)IL3Ref; i++) {
  4762. 80022ec: f897 305c ldrb.w r3, [r7, #92] @ 0x5c
  4763. 80022f0: 3301 adds r3, #1
  4764. 80022f2: f887 305c strb.w r3, [r7, #92] @ 0x5c
  4765. 80022f6: f897 305c ldrb.w r3, [r7, #92] @ 0x5c
  4766. 80022fa: 2b05 cmp r3, #5
  4767. 80022fc: d9e6 bls.n 80022cc <ADC1MeasTask+0x2a4>
  4768. }
  4769. osMutexRelease (ILxRefMutex);
  4770. 80022fe: 4b28 ldr r3, [pc, #160] @ (80023a0 <ADC1MeasTask+0x378>)
  4771. 8002300: 681b ldr r3, [r3, #0]
  4772. 8002302: 4618 mov r0, r3
  4773. 8002304: f011 fc32 bl 8013b6c <osMutexRelease>
  4774. }
  4775. float fanFBVoltage = adcData.adcDataBuffer[FanFB] * deltaADC * -4.35 + 12;
  4776. 8002308: 8abb ldrh r3, [r7, #20]
  4777. 800230a: ee07 3a90 vmov s15, r3
  4778. 800230e: eeb8 7be7 vcvt.f64.s32 d7, s15
  4779. 8002312: eeb0 6b08 vmov.f64 d6, #8 @ 0x40400000 3.0
  4780. 8002316: ee27 6b06 vmul.f64 d6, d7, d6
  4781. 800231a: ed9f 5b13 vldr d5, [pc, #76] @ 8002368 <ADC1MeasTask+0x340>
  4782. 800231e: ee86 7b05 vdiv.f64 d7, d6, d5
  4783. 8002322: ed9f 6b15 vldr d6, [pc, #84] @ 8002378 <ADC1MeasTask+0x350>
  4784. 8002326: ee27 7b06 vmul.f64 d7, d7, d6
  4785. 800232a: eeb2 6b08 vmov.f64 d6, #40 @ 0x41400000 12.0
  4786. 800232e: ee37 7b06 vadd.f64 d7, d7, d6
  4787. 8002332: eef7 7bc7 vcvt.f32.f64 s15, d7
  4788. 8002336: edc7 7a16 vstr s15, [r7, #88] @ 0x58
  4789. if (osMutexAcquire (sensorsInfoMutex, osWaitForever) == osOK) {
  4790. 800233a: 4b1b ldr r3, [pc, #108] @ (80023a8 <ADC1MeasTask+0x380>)
  4791. 800233c: 681b ldr r3, [r3, #0]
  4792. 800233e: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  4793. 8002342: 4618 mov r0, r3
  4794. 8002344: f011 fbc7 bl 8013ad6 <osMutexAcquire>
  4795. 8002348: 4603 mov r3, r0
  4796. 800234a: 2b00 cmp r3, #0
  4797. 800234c: f47f ae86 bne.w 800205c <ADC1MeasTask+0x34>
  4798. sensorsInfo.fanVoltage = fanFBVoltage;
  4799. 8002350: 4a16 ldr r2, [pc, #88] @ (80023ac <ADC1MeasTask+0x384>)
  4800. 8002352: 6dbb ldr r3, [r7, #88] @ 0x58
  4801. 8002354: 6093 str r3, [r2, #8]
  4802. osMutexRelease (sensorsInfoMutex);
  4803. 8002356: 4b14 ldr r3, [pc, #80] @ (80023a8 <ADC1MeasTask+0x380>)
  4804. 8002358: 681b ldr r3, [r3, #0]
  4805. 800235a: 4618 mov r0, r3
  4806. 800235c: f011 fc06 bl 8013b6c <osMutexRelease>
  4807. while (pdTRUE) {
  4808. 8002360: e67c b.n 800205c <ADC1MeasTask+0x34>
  4809. 8002362: bf00 nop
  4810. 8002364: f3af 8000 nop.w
  4811. 8002368: 00000000 .word 0x00000000
  4812. 800236c: 40efffe0 .word 0x40efffe0
  4813. 8002370: f5c28f5c .word 0xf5c28f5c
  4814. 8002374: 401e5c28 .word 0x401e5c28
  4815. 8002378: 66666666 .word 0x66666666
  4816. 800237c: c0116666 .word 0xc0116666
  4817. 8002380: 240007c8 .word 0x240007c8
  4818. 8002384: 240007e0 .word 0x240007e0
  4819. 8002388: 24000030 .word 0x24000030
  4820. 800238c: 453b8000 .word 0x453b8000
  4821. 8002390: 24000000 .word 0x24000000
  4822. 8002394: 240007e4 .word 0x240007e4
  4823. 8002398: 240007f0 .word 0x240007f0
  4824. 800239c: cccccccd .word 0xcccccccd
  4825. 80023a0: 240007ec .word 0x240007ec
  4826. 80023a4: 2400085c .word 0x2400085c
  4827. 80023a8: 240007e8 .word 0x240007e8
  4828. 80023ac: 2400082c .word 0x2400082c
  4829. 080023b0 <ADC2MeasTask>:
  4830. }
  4831. }
  4832. }
  4833. void ADC2MeasTask (void* arg) {
  4834. 80023b0: b580 push {r7, lr}
  4835. 80023b2: b09c sub sp, #112 @ 0x70
  4836. 80023b4: af00 add r7, sp, #0
  4837. 80023b6: 6078 str r0, [r7, #4]
  4838. float circBuffer[CURRENTS_COUNT][CIRC_BUFF_LEN] = { 0 };
  4839. 80023b8: f107 0334 add.w r3, r7, #52 @ 0x34
  4840. 80023bc: 2228 movs r2, #40 @ 0x28
  4841. 80023be: 2100 movs r1, #0
  4842. 80023c0: 4618 mov r0, r3
  4843. 80023c2: f015 fbc8 bl 8017b56 <memset>
  4844. float rms[CURRENTS_COUNT] = { 0 };
  4845. 80023c6: f04f 0300 mov.w r3, #0
  4846. 80023ca: 633b str r3, [r7, #48] @ 0x30
  4847. ADC2_Data adcData = { 0 };
  4848. 80023cc: f107 0310 add.w r3, r7, #16
  4849. 80023d0: 2220 movs r2, #32
  4850. 80023d2: 2100 movs r1, #0
  4851. 80023d4: 4618 mov r0, r3
  4852. 80023d6: f015 fbbe bl 8017b56 <memset>
  4853. uint32_t circBuffPos = 0;
  4854. 80023da: 2300 movs r3, #0
  4855. 80023dc: 66fb str r3, [r7, #108] @ 0x6c
  4856. float gainCorrection = 1.0;
  4857. 80023de: f04f 537e mov.w r3, #1065353216 @ 0x3f800000
  4858. 80023e2: 66bb str r3, [r7, #104] @ 0x68
  4859. while (pdTRUE) {
  4860. osMessageQueueGet (adc2MeasDataQueue, &adcData, 0, osWaitForever);
  4861. 80023e4: 4baa ldr r3, [pc, #680] @ (8002690 <ADC2MeasTask+0x2e0>)
  4862. 80023e6: 6818 ldr r0, [r3, #0]
  4863. 80023e8: f107 0110 add.w r1, r7, #16
  4864. 80023ec: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  4865. 80023f0: 2200 movs r2, #0
  4866. 80023f2: f011 fccb bl 8013d8c <osMessageQueueGet>
  4867. if (osMutexAcquire (vRefmVMutex, osWaitForever) == osOK) {
  4868. 80023f6: 4ba7 ldr r3, [pc, #668] @ (8002694 <ADC2MeasTask+0x2e4>)
  4869. 80023f8: 681b ldr r3, [r3, #0]
  4870. 80023fa: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  4871. 80023fe: 4618 mov r0, r3
  4872. 8002400: f011 fb69 bl 8013ad6 <osMutexAcquire>
  4873. 8002404: 4603 mov r3, r0
  4874. 8002406: 2b00 cmp r3, #0
  4875. 8002408: d10c bne.n 8002424 <ADC2MeasTask+0x74>
  4876. gainCorrection = (float)vRefmV;
  4877. 800240a: 4ba3 ldr r3, [pc, #652] @ (8002698 <ADC2MeasTask+0x2e8>)
  4878. 800240c: 681b ldr r3, [r3, #0]
  4879. 800240e: ee07 3a90 vmov s15, r3
  4880. 8002412: eef8 7a67 vcvt.f32.u32 s15, s15
  4881. 8002416: edc7 7a1a vstr s15, [r7, #104] @ 0x68
  4882. osMutexRelease (vRefmVMutex);
  4883. 800241a: 4b9e ldr r3, [pc, #632] @ (8002694 <ADC2MeasTask+0x2e4>)
  4884. 800241c: 681b ldr r3, [r3, #0]
  4885. 800241e: 4618 mov r0, r3
  4886. 8002420: f011 fba4 bl 8013b6c <osMutexRelease>
  4887. }
  4888. gainCorrection = gainCorrection / EXT_VREF_mV;
  4889. 8002424: ed97 7a1a vldr s14, [r7, #104] @ 0x68
  4890. 8002428: eddf 6a9c vldr s13, [pc, #624] @ 800269c <ADC2MeasTask+0x2ec>
  4891. 800242c: eec7 7a26 vdiv.f32 s15, s14, s13
  4892. 8002430: edc7 7a1a vstr s15, [r7, #104] @ 0x68
  4893. float ref[CURRENTS_COUNT] = { 0 };
  4894. 8002434: f04f 0300 mov.w r3, #0
  4895. 8002438: 60fb str r3, [r7, #12]
  4896. if (osMutexAcquire (ILxRefMutex, osWaitForever) == osOK) {
  4897. 800243a: 4b99 ldr r3, [pc, #612] @ (80026a0 <ADC2MeasTask+0x2f0>)
  4898. 800243c: 681b ldr r3, [r3, #0]
  4899. 800243e: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  4900. 8002442: 4618 mov r0, r3
  4901. 8002444: f011 fb47 bl 8013ad6 <osMutexAcquire>
  4902. 8002448: 4603 mov r3, r0
  4903. 800244a: 2b00 cmp r3, #0
  4904. 800244c: d122 bne.n 8002494 <ADC2MeasTask+0xe4>
  4905. for (uint8_t i = 0; i < CURRENTS_COUNT; i++) {
  4906. 800244e: 2300 movs r3, #0
  4907. 8002450: f887 3067 strb.w r3, [r7, #103] @ 0x67
  4908. 8002454: e015 b.n 8002482 <ADC2MeasTask+0xd2>
  4909. ref[i] = (float)ILxRef[i];
  4910. 8002456: f897 3067 ldrb.w r3, [r7, #103] @ 0x67
  4911. 800245a: 4a92 ldr r2, [pc, #584] @ (80026a4 <ADC2MeasTask+0x2f4>)
  4912. 800245c: f832 2013 ldrh.w r2, [r2, r3, lsl #1]
  4913. 8002460: f897 3067 ldrb.w r3, [r7, #103] @ 0x67
  4914. 8002464: ee07 2a90 vmov s15, r2
  4915. 8002468: eef8 7a67 vcvt.f32.u32 s15, s15
  4916. 800246c: 009b lsls r3, r3, #2
  4917. 800246e: 3370 adds r3, #112 @ 0x70
  4918. 8002470: 443b add r3, r7
  4919. 8002472: 3b64 subs r3, #100 @ 0x64
  4920. 8002474: edc3 7a00 vstr s15, [r3]
  4921. for (uint8_t i = 0; i < CURRENTS_COUNT; i++) {
  4922. 8002478: f897 3067 ldrb.w r3, [r7, #103] @ 0x67
  4923. 800247c: 3301 adds r3, #1
  4924. 800247e: f887 3067 strb.w r3, [r7, #103] @ 0x67
  4925. 8002482: f897 3067 ldrb.w r3, [r7, #103] @ 0x67
  4926. 8002486: 2b00 cmp r3, #0
  4927. 8002488: d0e5 beq.n 8002456 <ADC2MeasTask+0xa6>
  4928. }
  4929. osMutexRelease (ILxRefMutex);
  4930. 800248a: 4b85 ldr r3, [pc, #532] @ (80026a0 <ADC2MeasTask+0x2f0>)
  4931. 800248c: 681b ldr r3, [r3, #0]
  4932. 800248e: 4618 mov r0, r3
  4933. 8002490: f011 fb6c bl 8013b6c <osMutexRelease>
  4934. }
  4935. for (uint8_t i = 0; i < CURRENTS_COUNT; i++) {
  4936. 8002494: 2300 movs r3, #0
  4937. 8002496: f887 3066 strb.w r3, [r7, #102] @ 0x66
  4938. 800249a: e0db b.n 8002654 <ADC2MeasTask+0x2a4>
  4939. float adcVal = (float)adcData.adcDataBuffer[i];
  4940. 800249c: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  4941. 80024a0: 005b lsls r3, r3, #1
  4942. 80024a2: 3370 adds r3, #112 @ 0x70
  4943. 80024a4: 443b add r3, r7
  4944. 80024a6: f833 3c60 ldrh.w r3, [r3, #-96]
  4945. 80024aa: ee07 3a90 vmov s15, r3
  4946. 80024ae: eef8 7a67 vcvt.f32.u32 s15, s15
  4947. 80024b2: edc7 7a18 vstr s15, [r7, #96] @ 0x60
  4948. float val = (adcVal - ref[i]) * deltaADC * I_CHANNEL_CONST * gainCorrection * I_MeasCorrectionData[i].gain + I_MeasCorrectionData[i].offset;
  4949. 80024b6: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  4950. 80024ba: 009b lsls r3, r3, #2
  4951. 80024bc: 3370 adds r3, #112 @ 0x70
  4952. 80024be: 443b add r3, r7
  4953. 80024c0: 3b64 subs r3, #100 @ 0x64
  4954. 80024c2: edd3 7a00 vldr s15, [r3]
  4955. 80024c6: ed97 7a18 vldr s14, [r7, #96] @ 0x60
  4956. 80024ca: ee77 7a67 vsub.f32 s15, s14, s15
  4957. 80024ce: eeb7 7ae7 vcvt.f64.f32 d7, s15
  4958. 80024d2: eeb0 6b08 vmov.f64 d6, #8 @ 0x40400000 3.0
  4959. 80024d6: ee27 6b06 vmul.f64 d6, d7, d6
  4960. 80024da: ed9f 5b69 vldr d5, [pc, #420] @ 8002680 <ADC2MeasTask+0x2d0>
  4961. 80024de: ee86 7b05 vdiv.f64 d7, d6, d5
  4962. 80024e2: ed9f 6b69 vldr d6, [pc, #420] @ 8002688 <ADC2MeasTask+0x2d8>
  4963. 80024e6: ee27 6b06 vmul.f64 d6, d7, d6
  4964. 80024ea: edd7 7a1a vldr s15, [r7, #104] @ 0x68
  4965. 80024ee: eeb7 7ae7 vcvt.f64.f32 d7, s15
  4966. 80024f2: ee26 6b07 vmul.f64 d6, d6, d7
  4967. 80024f6: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  4968. 80024fa: 4a6b ldr r2, [pc, #428] @ (80026a8 <ADC2MeasTask+0x2f8>)
  4969. 80024fc: 00db lsls r3, r3, #3
  4970. 80024fe: 4413 add r3, r2
  4971. 8002500: edd3 7a00 vldr s15, [r3]
  4972. 8002504: eeb7 7ae7 vcvt.f64.f32 d7, s15
  4973. 8002508: ee26 6b07 vmul.f64 d6, d6, d7
  4974. 800250c: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  4975. 8002510: 4a65 ldr r2, [pc, #404] @ (80026a8 <ADC2MeasTask+0x2f8>)
  4976. 8002512: 00db lsls r3, r3, #3
  4977. 8002514: 4413 add r3, r2
  4978. 8002516: 3304 adds r3, #4
  4979. 8002518: edd3 7a00 vldr s15, [r3]
  4980. 800251c: eeb7 7ae7 vcvt.f64.f32 d7, s15
  4981. 8002520: ee36 7b07 vadd.f64 d7, d6, d7
  4982. 8002524: eef7 7bc7 vcvt.f32.f64 s15, d7
  4983. 8002528: edc7 7a17 vstr s15, [r7, #92] @ 0x5c
  4984. circBuffer[i][circBuffPos] = val;
  4985. 800252c: f897 2066 ldrb.w r2, [r7, #102] @ 0x66
  4986. 8002530: 4613 mov r3, r2
  4987. 8002532: 009b lsls r3, r3, #2
  4988. 8002534: 4413 add r3, r2
  4989. 8002536: 005b lsls r3, r3, #1
  4990. 8002538: 6efa ldr r2, [r7, #108] @ 0x6c
  4991. 800253a: 4413 add r3, r2
  4992. 800253c: 009b lsls r3, r3, #2
  4993. 800253e: 3370 adds r3, #112 @ 0x70
  4994. 8002540: 443b add r3, r7
  4995. 8002542: 3b3c subs r3, #60 @ 0x3c
  4996. 8002544: 6dfa ldr r2, [r7, #92] @ 0x5c
  4997. 8002546: 601a str r2, [r3, #0]
  4998. rms[i] = 0.0;
  4999. 8002548: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  5000. 800254c: 009b lsls r3, r3, #2
  5001. 800254e: 3370 adds r3, #112 @ 0x70
  5002. 8002550: 443b add r3, r7
  5003. 8002552: 3b40 subs r3, #64 @ 0x40
  5004. 8002554: f04f 0200 mov.w r2, #0
  5005. 8002558: 601a str r2, [r3, #0]
  5006. for (uint8_t c = 0; c < CIRC_BUFF_LEN; c++) {
  5007. 800255a: 2300 movs r3, #0
  5008. 800255c: f887 3065 strb.w r3, [r7, #101] @ 0x65
  5009. 8002560: e025 b.n 80025ae <ADC2MeasTask+0x1fe>
  5010. rms[i] += circBuffer[i][c];
  5011. 8002562: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  5012. 8002566: 009b lsls r3, r3, #2
  5013. 8002568: 3370 adds r3, #112 @ 0x70
  5014. 800256a: 443b add r3, r7
  5015. 800256c: 3b40 subs r3, #64 @ 0x40
  5016. 800256e: ed93 7a00 vldr s14, [r3]
  5017. 8002572: f897 2066 ldrb.w r2, [r7, #102] @ 0x66
  5018. 8002576: f897 1065 ldrb.w r1, [r7, #101] @ 0x65
  5019. 800257a: 4613 mov r3, r2
  5020. 800257c: 009b lsls r3, r3, #2
  5021. 800257e: 4413 add r3, r2
  5022. 8002580: 005b lsls r3, r3, #1
  5023. 8002582: 440b add r3, r1
  5024. 8002584: 009b lsls r3, r3, #2
  5025. 8002586: 3370 adds r3, #112 @ 0x70
  5026. 8002588: 443b add r3, r7
  5027. 800258a: 3b3c subs r3, #60 @ 0x3c
  5028. 800258c: edd3 7a00 vldr s15, [r3]
  5029. 8002590: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  5030. 8002594: ee77 7a27 vadd.f32 s15, s14, s15
  5031. 8002598: 009b lsls r3, r3, #2
  5032. 800259a: 3370 adds r3, #112 @ 0x70
  5033. 800259c: 443b add r3, r7
  5034. 800259e: 3b40 subs r3, #64 @ 0x40
  5035. 80025a0: edc3 7a00 vstr s15, [r3]
  5036. for (uint8_t c = 0; c < CIRC_BUFF_LEN; c++) {
  5037. 80025a4: f897 3065 ldrb.w r3, [r7, #101] @ 0x65
  5038. 80025a8: 3301 adds r3, #1
  5039. 80025aa: f887 3065 strb.w r3, [r7, #101] @ 0x65
  5040. 80025ae: f897 3065 ldrb.w r3, [r7, #101] @ 0x65
  5041. 80025b2: 2b09 cmp r3, #9
  5042. 80025b4: d9d5 bls.n 8002562 <ADC2MeasTask+0x1b2>
  5043. }
  5044. rms[i] = rms[i] / CIRC_BUFF_LEN;
  5045. 80025b6: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  5046. 80025ba: 009b lsls r3, r3, #2
  5047. 80025bc: 3370 adds r3, #112 @ 0x70
  5048. 80025be: 443b add r3, r7
  5049. 80025c0: 3b40 subs r3, #64 @ 0x40
  5050. 80025c2: ed93 7a00 vldr s14, [r3]
  5051. 80025c6: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  5052. 80025ca: eef2 6a04 vmov.f32 s13, #36 @ 0x41200000 10.0
  5053. 80025ce: eec7 7a26 vdiv.f32 s15, s14, s13
  5054. 80025d2: 009b lsls r3, r3, #2
  5055. 80025d4: 3370 adds r3, #112 @ 0x70
  5056. 80025d6: 443b add r3, r7
  5057. 80025d8: 3b40 subs r3, #64 @ 0x40
  5058. 80025da: edc3 7a00 vstr s15, [r3]
  5059. if (osMutexAcquire (resMeasurementsMutex, osWaitForever) == osOK) {
  5060. 80025de: 4b33 ldr r3, [pc, #204] @ (80026ac <ADC2MeasTask+0x2fc>)
  5061. 80025e0: 681b ldr r3, [r3, #0]
  5062. 80025e2: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  5063. 80025e6: 4618 mov r0, r3
  5064. 80025e8: f011 fa75 bl 8013ad6 <osMutexAcquire>
  5065. 80025ec: 4603 mov r3, r0
  5066. 80025ee: 2b00 cmp r3, #0
  5067. 80025f0: d12b bne.n 800264a <ADC2MeasTask+0x29a>
  5068. if (resMeasurements.currentPeak[i] < val) {
  5069. 80025f2: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  5070. 80025f6: 4a2e ldr r2, [pc, #184] @ (80026b0 <ADC2MeasTask+0x300>)
  5071. 80025f8: 3308 adds r3, #8
  5072. 80025fa: 009b lsls r3, r3, #2
  5073. 80025fc: 4413 add r3, r2
  5074. 80025fe: 3304 adds r3, #4
  5075. 8002600: edd3 7a00 vldr s15, [r3]
  5076. 8002604: ed97 7a17 vldr s14, [r7, #92] @ 0x5c
  5077. 8002608: eeb4 7ae7 vcmpe.f32 s14, s15
  5078. 800260c: eef1 fa10 vmrs APSR_nzcv, fpscr
  5079. 8002610: dd08 ble.n 8002624 <ADC2MeasTask+0x274>
  5080. resMeasurements.currentPeak[i] = val;
  5081. 8002612: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  5082. 8002616: 4a26 ldr r2, [pc, #152] @ (80026b0 <ADC2MeasTask+0x300>)
  5083. 8002618: 3308 adds r3, #8
  5084. 800261a: 009b lsls r3, r3, #2
  5085. 800261c: 4413 add r3, r2
  5086. 800261e: 3304 adds r3, #4
  5087. 8002620: 6dfa ldr r2, [r7, #92] @ 0x5c
  5088. 8002622: 601a str r2, [r3, #0]
  5089. }
  5090. resMeasurements.currentRMS[i] = rms[i];
  5091. 8002624: f897 2066 ldrb.w r2, [r7, #102] @ 0x66
  5092. 8002628: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  5093. 800262c: 0092 lsls r2, r2, #2
  5094. 800262e: 3270 adds r2, #112 @ 0x70
  5095. 8002630: 443a add r2, r7
  5096. 8002632: 3a40 subs r2, #64 @ 0x40
  5097. 8002634: 6812 ldr r2, [r2, #0]
  5098. 8002636: 491e ldr r1, [pc, #120] @ (80026b0 <ADC2MeasTask+0x300>)
  5099. 8002638: 3306 adds r3, #6
  5100. 800263a: 009b lsls r3, r3, #2
  5101. 800263c: 440b add r3, r1
  5102. 800263e: 601a str r2, [r3, #0]
  5103. osMutexRelease (resMeasurementsMutex);
  5104. 8002640: 4b1a ldr r3, [pc, #104] @ (80026ac <ADC2MeasTask+0x2fc>)
  5105. 8002642: 681b ldr r3, [r3, #0]
  5106. 8002644: 4618 mov r0, r3
  5107. 8002646: f011 fa91 bl 8013b6c <osMutexRelease>
  5108. for (uint8_t i = 0; i < CURRENTS_COUNT; i++) {
  5109. 800264a: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  5110. 800264e: 3301 adds r3, #1
  5111. 8002650: f887 3066 strb.w r3, [r7, #102] @ 0x66
  5112. 8002654: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  5113. 8002658: 2b00 cmp r3, #0
  5114. 800265a: f43f af1f beq.w 800249c <ADC2MeasTask+0xec>
  5115. }
  5116. }
  5117. ++circBuffPos;
  5118. 800265e: 6efb ldr r3, [r7, #108] @ 0x6c
  5119. 8002660: 3301 adds r3, #1
  5120. 8002662: 66fb str r3, [r7, #108] @ 0x6c
  5121. circBuffPos = circBuffPos % CIRC_BUFF_LEN;
  5122. 8002664: 6efa ldr r2, [r7, #108] @ 0x6c
  5123. 8002666: 4b13 ldr r3, [pc, #76] @ (80026b4 <ADC2MeasTask+0x304>)
  5124. 8002668: fba3 1302 umull r1, r3, r3, r2
  5125. 800266c: 08d9 lsrs r1, r3, #3
  5126. 800266e: 460b mov r3, r1
  5127. 8002670: 009b lsls r3, r3, #2
  5128. 8002672: 440b add r3, r1
  5129. 8002674: 005b lsls r3, r3, #1
  5130. 8002676: 1ad3 subs r3, r2, r3
  5131. 8002678: 66fb str r3, [r7, #108] @ 0x6c
  5132. while (pdTRUE) {
  5133. 800267a: e6b3 b.n 80023e4 <ADC2MeasTask+0x34>
  5134. 800267c: f3af 8000 nop.w
  5135. 8002680: 00000000 .word 0x00000000
  5136. 8002684: 40efffe0 .word 0x40efffe0
  5137. 8002688: 83e425af .word 0x83e425af
  5138. 800268c: 401e4d9e .word 0x401e4d9e
  5139. 8002690: 240007cc .word 0x240007cc
  5140. 8002694: 240007e0 .word 0x240007e0
  5141. 8002698: 24000030 .word 0x24000030
  5142. 800269c: 453b8000 .word 0x453b8000
  5143. 80026a0: 240007ec .word 0x240007ec
  5144. 80026a4: 2400085c .word 0x2400085c
  5145. 80026a8: 24000018 .word 0x24000018
  5146. 80026ac: 240007e4 .word 0x240007e4
  5147. 80026b0: 240007f0 .word 0x240007f0
  5148. 80026b4: cccccccd .word 0xcccccccd
  5149. 080026b8 <ADC3MeasTask>:
  5150. }
  5151. }
  5152. void ADC3MeasTask (void* arg) {
  5153. 80026b8: b580 push {r7, lr}
  5154. 80026ba: b0bc sub sp, #240 @ 0xf0
  5155. 80026bc: af00 add r7, sp, #0
  5156. 80026be: 6078 str r0, [r7, #4]
  5157. float motorXSensCircBuffer[CIRC_BUFF_LEN] = { 0 };
  5158. 80026c0: f107 03a4 add.w r3, r7, #164 @ 0xa4
  5159. 80026c4: 2228 movs r2, #40 @ 0x28
  5160. 80026c6: 2100 movs r1, #0
  5161. 80026c8: 4618 mov r0, r3
  5162. 80026ca: f015 fa44 bl 8017b56 <memset>
  5163. float motorYSensCircBuffer[CIRC_BUFF_LEN] = { 0 };
  5164. 80026ce: f107 037c add.w r3, r7, #124 @ 0x7c
  5165. 80026d2: 2228 movs r2, #40 @ 0x28
  5166. 80026d4: 2100 movs r1, #0
  5167. 80026d6: 4618 mov r0, r3
  5168. 80026d8: f015 fa3d bl 8017b56 <memset>
  5169. float pvT1CircBuffer[CIRC_BUFF_LEN] = { 0 };
  5170. 80026dc: f107 0354 add.w r3, r7, #84 @ 0x54
  5171. 80026e0: 2228 movs r2, #40 @ 0x28
  5172. 80026e2: 2100 movs r1, #0
  5173. 80026e4: 4618 mov r0, r3
  5174. 80026e6: f015 fa36 bl 8017b56 <memset>
  5175. float pvT2CircBuffer[CIRC_BUFF_LEN] = { 0 };
  5176. 80026ea: f107 032c add.w r3, r7, #44 @ 0x2c
  5177. 80026ee: 2228 movs r2, #40 @ 0x28
  5178. 80026f0: 2100 movs r1, #0
  5179. 80026f2: 4618 mov r0, r3
  5180. 80026f4: f015 fa2f bl 8017b56 <memset>
  5181. uint32_t circBuffPos = 0;
  5182. 80026f8: 2300 movs r3, #0
  5183. 80026fa: f8c7 30ec str.w r3, [r7, #236] @ 0xec
  5184. ADC3_Data adcData = { 0 };
  5185. 80026fe: f107 030c add.w r3, r7, #12
  5186. 8002702: 2220 movs r2, #32
  5187. 8002704: 2100 movs r1, #0
  5188. 8002706: 4618 mov r0, r3
  5189. 8002708: f015 fa25 bl 8017b56 <memset>
  5190. while (pdTRUE) {
  5191. osMessageQueueGet (adc3MeasDataQueue, &adcData, 0, osWaitForever);
  5192. 800270c: 4bc2 ldr r3, [pc, #776] @ (8002a18 <ADC3MeasTask+0x360>)
  5193. 800270e: 6818 ldr r0, [r3, #0]
  5194. 8002710: f107 010c add.w r1, r7, #12
  5195. 8002714: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  5196. 8002718: 2200 movs r2, #0
  5197. 800271a: f011 fb37 bl 8013d8c <osMessageQueueGet>
  5198. uint32_t vRef = __LL_ADC_CALC_VREFANALOG_VOLTAGE (adcData.adcDataBuffer[VrefInt], LL_ADC_RESOLUTION_16B);
  5199. 800271e: 4bbf ldr r3, [pc, #764] @ (8002a1c <ADC3MeasTask+0x364>)
  5200. 8002720: 881b ldrh r3, [r3, #0]
  5201. 8002722: 461a mov r2, r3
  5202. 8002724: f640 43e4 movw r3, #3300 @ 0xce4
  5203. 8002728: fb02 f303 mul.w r3, r2, r3
  5204. 800272c: 8aba ldrh r2, [r7, #20]
  5205. 800272e: fbb3 f3f2 udiv r3, r3, r2
  5206. 8002732: f8c7 30d4 str.w r3, [r7, #212] @ 0xd4
  5207. if (osMutexAcquire (vRefmVMutex, osWaitForever) == osOK) {
  5208. 8002736: 4bba ldr r3, [pc, #744] @ (8002a20 <ADC3MeasTask+0x368>)
  5209. 8002738: 681b ldr r3, [r3, #0]
  5210. 800273a: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  5211. 800273e: 4618 mov r0, r3
  5212. 8002740: f011 f9c9 bl 8013ad6 <osMutexAcquire>
  5213. 8002744: 4603 mov r3, r0
  5214. 8002746: 2b00 cmp r3, #0
  5215. 8002748: d108 bne.n 800275c <ADC3MeasTask+0xa4>
  5216. vRefmV = vRef;
  5217. 800274a: 4ab6 ldr r2, [pc, #728] @ (8002a24 <ADC3MeasTask+0x36c>)
  5218. 800274c: f8d7 30d4 ldr.w r3, [r7, #212] @ 0xd4
  5219. 8002750: 6013 str r3, [r2, #0]
  5220. osMutexRelease (vRefmVMutex);
  5221. 8002752: 4bb3 ldr r3, [pc, #716] @ (8002a20 <ADC3MeasTask+0x368>)
  5222. 8002754: 681b ldr r3, [r3, #0]
  5223. 8002756: 4618 mov r0, r3
  5224. 8002758: f011 fa08 bl 8013b6c <osMutexRelease>
  5225. }
  5226. float motorXCurrentSense = adcData.adcDataBuffer[motorXSense] * deltaADC * 10 / 8.33333;
  5227. 800275c: 8a3b ldrh r3, [r7, #16]
  5228. 800275e: ee07 3a90 vmov s15, r3
  5229. 8002762: eeb8 7be7 vcvt.f64.s32 d7, s15
  5230. 8002766: eeb0 6b08 vmov.f64 d6, #8 @ 0x40400000 3.0
  5231. 800276a: ee27 6b06 vmul.f64 d6, d7, d6
  5232. 800276e: ed9f 5ba2 vldr d5, [pc, #648] @ 80029f8 <ADC3MeasTask+0x340>
  5233. 8002772: ee86 7b05 vdiv.f64 d7, d6, d5
  5234. 8002776: eeb2 6b04 vmov.f64 d6, #36 @ 0x41200000 10.0
  5235. 800277a: ee27 6b06 vmul.f64 d6, d7, d6
  5236. 800277e: ed9f 5ba0 vldr d5, [pc, #640] @ 8002a00 <ADC3MeasTask+0x348>
  5237. 8002782: ee86 7b05 vdiv.f64 d7, d6, d5
  5238. 8002786: eef7 7bc7 vcvt.f32.f64 s15, d7
  5239. 800278a: edc7 7a34 vstr s15, [r7, #208] @ 0xd0
  5240. float motorYCurrentSense = adcData.adcDataBuffer[motorYSense] * deltaADC * 10 / 8.33333;
  5241. 800278e: 8a7b ldrh r3, [r7, #18]
  5242. 8002790: ee07 3a90 vmov s15, r3
  5243. 8002794: eeb8 7be7 vcvt.f64.s32 d7, s15
  5244. 8002798: eeb0 6b08 vmov.f64 d6, #8 @ 0x40400000 3.0
  5245. 800279c: ee27 6b06 vmul.f64 d6, d7, d6
  5246. 80027a0: ed9f 5b95 vldr d5, [pc, #596] @ 80029f8 <ADC3MeasTask+0x340>
  5247. 80027a4: ee86 7b05 vdiv.f64 d7, d6, d5
  5248. 80027a8: eeb2 6b04 vmov.f64 d6, #36 @ 0x41200000 10.0
  5249. 80027ac: ee27 6b06 vmul.f64 d6, d7, d6
  5250. 80027b0: ed9f 5b93 vldr d5, [pc, #588] @ 8002a00 <ADC3MeasTask+0x348>
  5251. 80027b4: ee86 7b05 vdiv.f64 d7, d6, d5
  5252. 80027b8: eef7 7bc7 vcvt.f32.f64 s15, d7
  5253. 80027bc: edc7 7a33 vstr s15, [r7, #204] @ 0xcc
  5254. motorXSensCircBuffer[circBuffPos] = motorXCurrentSense;
  5255. 80027c0: f8d7 30ec ldr.w r3, [r7, #236] @ 0xec
  5256. 80027c4: 009b lsls r3, r3, #2
  5257. 80027c6: 33f0 adds r3, #240 @ 0xf0
  5258. 80027c8: 443b add r3, r7
  5259. 80027ca: 3b4c subs r3, #76 @ 0x4c
  5260. 80027cc: f8d7 20d0 ldr.w r2, [r7, #208] @ 0xd0
  5261. 80027d0: 601a str r2, [r3, #0]
  5262. motorYSensCircBuffer[circBuffPos] = motorYCurrentSense;
  5263. 80027d2: f8d7 30ec ldr.w r3, [r7, #236] @ 0xec
  5264. 80027d6: 009b lsls r3, r3, #2
  5265. 80027d8: 33f0 adds r3, #240 @ 0xf0
  5266. 80027da: 443b add r3, r7
  5267. 80027dc: 3b74 subs r3, #116 @ 0x74
  5268. 80027de: f8d7 20cc ldr.w r2, [r7, #204] @ 0xcc
  5269. 80027e2: 601a str r2, [r3, #0]
  5270. pvT1CircBuffer[circBuffPos] = adcData.adcDataBuffer[pvTemp1] * deltaADC * 45.33333333 - 63;
  5271. 80027e4: 89bb ldrh r3, [r7, #12]
  5272. 80027e6: ee07 3a90 vmov s15, r3
  5273. 80027ea: eeb8 7be7 vcvt.f64.s32 d7, s15
  5274. 80027ee: eeb0 6b08 vmov.f64 d6, #8 @ 0x40400000 3.0
  5275. 80027f2: ee27 6b06 vmul.f64 d6, d7, d6
  5276. 80027f6: ed9f 5b80 vldr d5, [pc, #512] @ 80029f8 <ADC3MeasTask+0x340>
  5277. 80027fa: ee86 7b05 vdiv.f64 d7, d6, d5
  5278. 80027fe: ed9f 6b82 vldr d6, [pc, #520] @ 8002a08 <ADC3MeasTask+0x350>
  5279. 8002802: ee27 7b06 vmul.f64 d7, d7, d6
  5280. 8002806: ed9f 6b82 vldr d6, [pc, #520] @ 8002a10 <ADC3MeasTask+0x358>
  5281. 800280a: ee37 7b46 vsub.f64 d7, d7, d6
  5282. 800280e: eef7 7bc7 vcvt.f32.f64 s15, d7
  5283. 8002812: f8d7 30ec ldr.w r3, [r7, #236] @ 0xec
  5284. 8002816: 009b lsls r3, r3, #2
  5285. 8002818: 33f0 adds r3, #240 @ 0xf0
  5286. 800281a: 443b add r3, r7
  5287. 800281c: 3b9c subs r3, #156 @ 0x9c
  5288. 800281e: edc3 7a00 vstr s15, [r3]
  5289. pvT2CircBuffer[circBuffPos] = adcData.adcDataBuffer[pvTemp2] * deltaADC * 45.33333333 - 63;
  5290. 8002822: 89fb ldrh r3, [r7, #14]
  5291. 8002824: ee07 3a90 vmov s15, r3
  5292. 8002828: eeb8 7be7 vcvt.f64.s32 d7, s15
  5293. 800282c: eeb0 6b08 vmov.f64 d6, #8 @ 0x40400000 3.0
  5294. 8002830: ee27 6b06 vmul.f64 d6, d7, d6
  5295. 8002834: ed9f 5b70 vldr d5, [pc, #448] @ 80029f8 <ADC3MeasTask+0x340>
  5296. 8002838: ee86 7b05 vdiv.f64 d7, d6, d5
  5297. 800283c: ed9f 6b72 vldr d6, [pc, #456] @ 8002a08 <ADC3MeasTask+0x350>
  5298. 8002840: ee27 7b06 vmul.f64 d7, d7, d6
  5299. 8002844: ed9f 6b72 vldr d6, [pc, #456] @ 8002a10 <ADC3MeasTask+0x358>
  5300. 8002848: ee37 7b46 vsub.f64 d7, d7, d6
  5301. 800284c: eef7 7bc7 vcvt.f32.f64 s15, d7
  5302. 8002850: f8d7 30ec ldr.w r3, [r7, #236] @ 0xec
  5303. 8002854: 009b lsls r3, r3, #2
  5304. 8002856: 33f0 adds r3, #240 @ 0xf0
  5305. 8002858: 443b add r3, r7
  5306. 800285a: 3bc4 subs r3, #196 @ 0xc4
  5307. 800285c: edc3 7a00 vstr s15, [r3]
  5308. float motorXAveCurrent = 0;
  5309. 8002860: f04f 0300 mov.w r3, #0
  5310. 8002864: f8c7 30e8 str.w r3, [r7, #232] @ 0xe8
  5311. float motorYAveCurrent = 0;
  5312. 8002868: f04f 0300 mov.w r3, #0
  5313. 800286c: f8c7 30e4 str.w r3, [r7, #228] @ 0xe4
  5314. float pvT1AveTemp = 0;
  5315. 8002870: f04f 0300 mov.w r3, #0
  5316. 8002874: f8c7 30e0 str.w r3, [r7, #224] @ 0xe0
  5317. float pvT2AveTemp = 0;
  5318. 8002878: f04f 0300 mov.w r3, #0
  5319. 800287c: f8c7 30dc str.w r3, [r7, #220] @ 0xdc
  5320. for (uint8_t i = 0; i < CIRC_BUFF_LEN; i++) {
  5321. 8002880: 2300 movs r3, #0
  5322. 8002882: f887 30db strb.w r3, [r7, #219] @ 0xdb
  5323. 8002886: e03c b.n 8002902 <ADC3MeasTask+0x24a>
  5324. motorXAveCurrent += motorXSensCircBuffer[i];
  5325. 8002888: f897 30db ldrb.w r3, [r7, #219] @ 0xdb
  5326. 800288c: 009b lsls r3, r3, #2
  5327. 800288e: 33f0 adds r3, #240 @ 0xf0
  5328. 8002890: 443b add r3, r7
  5329. 8002892: 3b4c subs r3, #76 @ 0x4c
  5330. 8002894: edd3 7a00 vldr s15, [r3]
  5331. 8002898: ed97 7a3a vldr s14, [r7, #232] @ 0xe8
  5332. 800289c: ee77 7a27 vadd.f32 s15, s14, s15
  5333. 80028a0: edc7 7a3a vstr s15, [r7, #232] @ 0xe8
  5334. motorYAveCurrent += motorYSensCircBuffer[i];
  5335. 80028a4: f897 30db ldrb.w r3, [r7, #219] @ 0xdb
  5336. 80028a8: 009b lsls r3, r3, #2
  5337. 80028aa: 33f0 adds r3, #240 @ 0xf0
  5338. 80028ac: 443b add r3, r7
  5339. 80028ae: 3b74 subs r3, #116 @ 0x74
  5340. 80028b0: edd3 7a00 vldr s15, [r3]
  5341. 80028b4: ed97 7a39 vldr s14, [r7, #228] @ 0xe4
  5342. 80028b8: ee77 7a27 vadd.f32 s15, s14, s15
  5343. 80028bc: edc7 7a39 vstr s15, [r7, #228] @ 0xe4
  5344. #ifdef PV_BOARD
  5345. pvT1AveTemp += pvT1CircBuffer[i];
  5346. 80028c0: f897 30db ldrb.w r3, [r7, #219] @ 0xdb
  5347. 80028c4: 009b lsls r3, r3, #2
  5348. 80028c6: 33f0 adds r3, #240 @ 0xf0
  5349. 80028c8: 443b add r3, r7
  5350. 80028ca: 3b9c subs r3, #156 @ 0x9c
  5351. 80028cc: edd3 7a00 vldr s15, [r3]
  5352. 80028d0: ed97 7a38 vldr s14, [r7, #224] @ 0xe0
  5353. 80028d4: ee77 7a27 vadd.f32 s15, s14, s15
  5354. 80028d8: edc7 7a38 vstr s15, [r7, #224] @ 0xe0
  5355. pvT2AveTemp += pvT2CircBuffer[i];
  5356. 80028dc: f897 30db ldrb.w r3, [r7, #219] @ 0xdb
  5357. 80028e0: 009b lsls r3, r3, #2
  5358. 80028e2: 33f0 adds r3, #240 @ 0xf0
  5359. 80028e4: 443b add r3, r7
  5360. 80028e6: 3bc4 subs r3, #196 @ 0xc4
  5361. 80028e8: edd3 7a00 vldr s15, [r3]
  5362. 80028ec: ed97 7a37 vldr s14, [r7, #220] @ 0xdc
  5363. 80028f0: ee77 7a27 vadd.f32 s15, s14, s15
  5364. 80028f4: edc7 7a37 vstr s15, [r7, #220] @ 0xdc
  5365. for (uint8_t i = 0; i < CIRC_BUFF_LEN; i++) {
  5366. 80028f8: f897 30db ldrb.w r3, [r7, #219] @ 0xdb
  5367. 80028fc: 3301 adds r3, #1
  5368. 80028fe: f887 30db strb.w r3, [r7, #219] @ 0xdb
  5369. 8002902: f897 30db ldrb.w r3, [r7, #219] @ 0xdb
  5370. 8002906: 2b09 cmp r3, #9
  5371. 8002908: d9be bls.n 8002888 <ADC3MeasTask+0x1d0>
  5372. #endif
  5373. }
  5374. motorXAveCurrent /= CIRC_BUFF_LEN;
  5375. 800290a: ed97 7a3a vldr s14, [r7, #232] @ 0xe8
  5376. 800290e: eef2 6a04 vmov.f32 s13, #36 @ 0x41200000 10.0
  5377. 8002912: eec7 7a26 vdiv.f32 s15, s14, s13
  5378. 8002916: edc7 7a3a vstr s15, [r7, #232] @ 0xe8
  5379. motorYAveCurrent /= CIRC_BUFF_LEN;
  5380. 800291a: ed97 7a39 vldr s14, [r7, #228] @ 0xe4
  5381. 800291e: eef2 6a04 vmov.f32 s13, #36 @ 0x41200000 10.0
  5382. 8002922: eec7 7a26 vdiv.f32 s15, s14, s13
  5383. 8002926: edc7 7a39 vstr s15, [r7, #228] @ 0xe4
  5384. pvT1AveTemp /= CIRC_BUFF_LEN;
  5385. 800292a: ed97 7a38 vldr s14, [r7, #224] @ 0xe0
  5386. 800292e: eef2 6a04 vmov.f32 s13, #36 @ 0x41200000 10.0
  5387. 8002932: eec7 7a26 vdiv.f32 s15, s14, s13
  5388. 8002936: edc7 7a38 vstr s15, [r7, #224] @ 0xe0
  5389. pvT2AveTemp /= CIRC_BUFF_LEN;
  5390. 800293a: ed97 7a37 vldr s14, [r7, #220] @ 0xdc
  5391. 800293e: eef2 6a04 vmov.f32 s13, #36 @ 0x41200000 10.0
  5392. 8002942: eec7 7a26 vdiv.f32 s15, s14, s13
  5393. 8002946: edc7 7a37 vstr s15, [r7, #220] @ 0xdc
  5394. if (osMutexAcquire (sensorsInfoMutex, osWaitForever) == osOK) {
  5395. 800294a: 4b37 ldr r3, [pc, #220] @ (8002a28 <ADC3MeasTask+0x370>)
  5396. 800294c: 681b ldr r3, [r3, #0]
  5397. 800294e: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  5398. 8002952: 4618 mov r0, r3
  5399. 8002954: f011 f8bf bl 8013ad6 <osMutexAcquire>
  5400. 8002958: 4603 mov r3, r0
  5401. 800295a: 2b00 cmp r3, #0
  5402. 800295c: d138 bne.n 80029d0 <ADC3MeasTask+0x318>
  5403. if (sensorsInfo.motorXStatus == 1) {
  5404. 800295e: 4b33 ldr r3, [pc, #204] @ (8002a2c <ADC3MeasTask+0x374>)
  5405. 8002960: 7d1b ldrb r3, [r3, #20]
  5406. 8002962: 2b01 cmp r3, #1
  5407. 8002964: d111 bne.n 800298a <ADC3MeasTask+0x2d2>
  5408. sensorsInfo.motorXAveCurrent = motorXAveCurrent;
  5409. 8002966: 4a31 ldr r2, [pc, #196] @ (8002a2c <ADC3MeasTask+0x374>)
  5410. 8002968: f8d7 30e8 ldr.w r3, [r7, #232] @ 0xe8
  5411. 800296c: 6193 str r3, [r2, #24]
  5412. if (sensorsInfo.motorXPeakCurrent < motorXCurrentSense) {
  5413. 800296e: 4b2f ldr r3, [pc, #188] @ (8002a2c <ADC3MeasTask+0x374>)
  5414. 8002970: edd3 7a08 vldr s15, [r3, #32]
  5415. 8002974: ed97 7a34 vldr s14, [r7, #208] @ 0xd0
  5416. 8002978: eeb4 7ae7 vcmpe.f32 s14, s15
  5417. 800297c: eef1 fa10 vmrs APSR_nzcv, fpscr
  5418. 8002980: dd03 ble.n 800298a <ADC3MeasTask+0x2d2>
  5419. sensorsInfo.motorXPeakCurrent = motorXCurrentSense;
  5420. 8002982: 4a2a ldr r2, [pc, #168] @ (8002a2c <ADC3MeasTask+0x374>)
  5421. 8002984: f8d7 30d0 ldr.w r3, [r7, #208] @ 0xd0
  5422. 8002988: 6213 str r3, [r2, #32]
  5423. }
  5424. }
  5425. if (sensorsInfo.motorYStatus == 1) {
  5426. 800298a: 4b28 ldr r3, [pc, #160] @ (8002a2c <ADC3MeasTask+0x374>)
  5427. 800298c: 7d5b ldrb r3, [r3, #21]
  5428. 800298e: 2b01 cmp r3, #1
  5429. 8002990: d111 bne.n 80029b6 <ADC3MeasTask+0x2fe>
  5430. sensorsInfo.motorYAveCurrent = motorYAveCurrent;
  5431. 8002992: 4a26 ldr r2, [pc, #152] @ (8002a2c <ADC3MeasTask+0x374>)
  5432. 8002994: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  5433. 8002998: 61d3 str r3, [r2, #28]
  5434. if (sensorsInfo.motorYPeakCurrent < motorYCurrentSense) {
  5435. 800299a: 4b24 ldr r3, [pc, #144] @ (8002a2c <ADC3MeasTask+0x374>)
  5436. 800299c: edd3 7a09 vldr s15, [r3, #36] @ 0x24
  5437. 80029a0: ed97 7a33 vldr s14, [r7, #204] @ 0xcc
  5438. 80029a4: eeb4 7ae7 vcmpe.f32 s14, s15
  5439. 80029a8: eef1 fa10 vmrs APSR_nzcv, fpscr
  5440. 80029ac: dd03 ble.n 80029b6 <ADC3MeasTask+0x2fe>
  5441. sensorsInfo.motorYPeakCurrent = motorYCurrentSense;
  5442. 80029ae: 4a1f ldr r2, [pc, #124] @ (8002a2c <ADC3MeasTask+0x374>)
  5443. 80029b0: f8d7 30cc ldr.w r3, [r7, #204] @ 0xcc
  5444. 80029b4: 6253 str r3, [r2, #36] @ 0x24
  5445. }
  5446. }
  5447. sensorsInfo.pvTemperature[0] = pvT1AveTemp;
  5448. 80029b6: 4a1d ldr r2, [pc, #116] @ (8002a2c <ADC3MeasTask+0x374>)
  5449. 80029b8: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  5450. 80029bc: 6013 str r3, [r2, #0]
  5451. sensorsInfo.pvTemperature[1] = pvT2AveTemp;
  5452. 80029be: 4a1b ldr r2, [pc, #108] @ (8002a2c <ADC3MeasTask+0x374>)
  5453. 80029c0: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc
  5454. 80029c4: 6053 str r3, [r2, #4]
  5455. osMutexRelease (sensorsInfoMutex);
  5456. 80029c6: 4b18 ldr r3, [pc, #96] @ (8002a28 <ADC3MeasTask+0x370>)
  5457. 80029c8: 681b ldr r3, [r3, #0]
  5458. 80029ca: 4618 mov r0, r3
  5459. 80029cc: f011 f8ce bl 8013b6c <osMutexRelease>
  5460. }
  5461. ++circBuffPos;
  5462. 80029d0: f8d7 30ec ldr.w r3, [r7, #236] @ 0xec
  5463. 80029d4: 3301 adds r3, #1
  5464. 80029d6: f8c7 30ec str.w r3, [r7, #236] @ 0xec
  5465. circBuffPos = circBuffPos % CIRC_BUFF_LEN;
  5466. 80029da: f8d7 20ec ldr.w r2, [r7, #236] @ 0xec
  5467. 80029de: 4b14 ldr r3, [pc, #80] @ (8002a30 <ADC3MeasTask+0x378>)
  5468. 80029e0: fba3 1302 umull r1, r3, r3, r2
  5469. 80029e4: 08d9 lsrs r1, r3, #3
  5470. 80029e6: 460b mov r3, r1
  5471. 80029e8: 009b lsls r3, r3, #2
  5472. 80029ea: 440b add r3, r1
  5473. 80029ec: 005b lsls r3, r3, #1
  5474. 80029ee: 1ad3 subs r3, r2, r3
  5475. 80029f0: f8c7 30ec str.w r3, [r7, #236] @ 0xec
  5476. while (pdTRUE) {
  5477. 80029f4: e68a b.n 800270c <ADC3MeasTask+0x54>
  5478. 80029f6: bf00 nop
  5479. 80029f8: 00000000 .word 0x00000000
  5480. 80029fc: 40efffe0 .word 0x40efffe0
  5481. 8002a00: 3ad18d26 .word 0x3ad18d26
  5482. 8002a04: 4020aaaa .word 0x4020aaaa
  5483. 8002a08: aaa38226 .word 0xaaa38226
  5484. 8002a0c: 4046aaaa .word 0x4046aaaa
  5485. 8002a10: 00000000 .word 0x00000000
  5486. 8002a14: 404f8000 .word 0x404f8000
  5487. 8002a18: 240007d0 .word 0x240007d0
  5488. 8002a1c: 1ff1e860 .word 0x1ff1e860
  5489. 8002a20: 240007e0 .word 0x240007e0
  5490. 8002a24: 24000030 .word 0x24000030
  5491. 8002a28: 240007e8 .word 0x240007e8
  5492. 8002a2c: 2400082c .word 0x2400082c
  5493. 8002a30: cccccccd .word 0xcccccccd
  5494. 08002a34 <LimiterSwitchTask>:
  5495. }
  5496. }
  5497. void LimiterSwitchTask (void* arg) {
  5498. 8002a34: b580 push {r7, lr}
  5499. 8002a36: b08a sub sp, #40 @ 0x28
  5500. 8002a38: af06 add r7, sp, #24
  5501. 8002a3a: 6078 str r0, [r7, #4]
  5502. LimiterSwitchData limiterSwitchData = { 0 };
  5503. 8002a3c: 2300 movs r3, #0
  5504. 8002a3e: 60bb str r3, [r7, #8]
  5505. limiterSwitchData.gpioPin = GPIO_PIN_8;
  5506. 8002a40: f44f 7380 mov.w r3, #256 @ 0x100
  5507. 8002a44: 813b strh r3, [r7, #8]
  5508. for (uint8_t i = 0; i < 6; i++) {
  5509. 8002a46: 2300 movs r3, #0
  5510. 8002a48: 73fb strb r3, [r7, #15]
  5511. 8002a4a: e015 b.n 8002a78 <LimiterSwitchTask+0x44>
  5512. limiterSwitchData.pinState = HAL_GPIO_ReadPin (GPIOD, limiterSwitchData.gpioPin);
  5513. 8002a4c: 893b ldrh r3, [r7, #8]
  5514. 8002a4e: 4619 mov r1, r3
  5515. 8002a50: 486c ldr r0, [pc, #432] @ (8002c04 <LimiterSwitchTask+0x1d0>)
  5516. 8002a52: f008 f84b bl 800aaec <HAL_GPIO_ReadPin>
  5517. 8002a56: 4603 mov r3, r0
  5518. 8002a58: 72bb strb r3, [r7, #10]
  5519. osMessageQueuePut (limiterSwitchDataQueue, &limiterSwitchData, 0, 0);
  5520. 8002a5a: 4b6b ldr r3, [pc, #428] @ (8002c08 <LimiterSwitchTask+0x1d4>)
  5521. 8002a5c: 6818 ldr r0, [r3, #0]
  5522. 8002a5e: f107 0108 add.w r1, r7, #8
  5523. 8002a62: 2300 movs r3, #0
  5524. 8002a64: 2200 movs r2, #0
  5525. 8002a66: f011 f931 bl 8013ccc <osMessageQueuePut>
  5526. limiterSwitchData.gpioPin = limiterSwitchData.gpioPin << 1;
  5527. 8002a6a: 893b ldrh r3, [r7, #8]
  5528. 8002a6c: 005b lsls r3, r3, #1
  5529. 8002a6e: b29b uxth r3, r3
  5530. 8002a70: 813b strh r3, [r7, #8]
  5531. for (uint8_t i = 0; i < 6; i++) {
  5532. 8002a72: 7bfb ldrb r3, [r7, #15]
  5533. 8002a74: 3301 adds r3, #1
  5534. 8002a76: 73fb strb r3, [r7, #15]
  5535. 8002a78: 7bfb ldrb r3, [r7, #15]
  5536. 8002a7a: 2b05 cmp r3, #5
  5537. 8002a7c: d9e6 bls.n 8002a4c <LimiterSwitchTask+0x18>
  5538. }
  5539. while (pdTRUE) {
  5540. osMessageQueueGet (limiterSwitchDataQueue, &limiterSwitchData, 0, osWaitForever);
  5541. 8002a7e: 4b62 ldr r3, [pc, #392] @ (8002c08 <LimiterSwitchTask+0x1d4>)
  5542. 8002a80: 6818 ldr r0, [r3, #0]
  5543. 8002a82: f107 0108 add.w r1, r7, #8
  5544. 8002a86: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  5545. 8002a8a: 2200 movs r2, #0
  5546. 8002a8c: f011 f97e bl 8013d8c <osMessageQueueGet>
  5547. if (osMutexAcquire (sensorsInfoMutex, osWaitForever) == osOK) {
  5548. 8002a90: 4b5e ldr r3, [pc, #376] @ (8002c0c <LimiterSwitchTask+0x1d8>)
  5549. 8002a92: 681b ldr r3, [r3, #0]
  5550. 8002a94: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  5551. 8002a98: 4618 mov r0, r3
  5552. 8002a9a: f011 f81c bl 8013ad6 <osMutexAcquire>
  5553. 8002a9e: 4603 mov r3, r0
  5554. 8002aa0: 2b00 cmp r3, #0
  5555. 8002aa2: d1ec bne.n 8002a7e <LimiterSwitchTask+0x4a>
  5556. switch (limiterSwitchData.gpioPin) {
  5557. 8002aa4: 893b ldrh r3, [r7, #8]
  5558. 8002aa6: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  5559. 8002aaa: d052 beq.n 8002b52 <LimiterSwitchTask+0x11e>
  5560. 8002aac: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  5561. 8002ab0: dc5a bgt.n 8002b68 <LimiterSwitchTask+0x134>
  5562. 8002ab2: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  5563. 8002ab6: d041 beq.n 8002b3c <LimiterSwitchTask+0x108>
  5564. 8002ab8: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  5565. 8002abc: dc54 bgt.n 8002b68 <LimiterSwitchTask+0x134>
  5566. 8002abe: f5b3 6f00 cmp.w r3, #2048 @ 0x800
  5567. 8002ac2: d030 beq.n 8002b26 <LimiterSwitchTask+0xf2>
  5568. 8002ac4: f5b3 6f00 cmp.w r3, #2048 @ 0x800
  5569. 8002ac8: dc4e bgt.n 8002b68 <LimiterSwitchTask+0x134>
  5570. 8002aca: f5b3 6f80 cmp.w r3, #1024 @ 0x400
  5571. 8002ace: d01f beq.n 8002b10 <LimiterSwitchTask+0xdc>
  5572. 8002ad0: f5b3 6f80 cmp.w r3, #1024 @ 0x400
  5573. 8002ad4: dc48 bgt.n 8002b68 <LimiterSwitchTask+0x134>
  5574. 8002ad6: f5b3 7f80 cmp.w r3, #256 @ 0x100
  5575. 8002ada: d003 beq.n 8002ae4 <LimiterSwitchTask+0xb0>
  5576. 8002adc: f5b3 7f00 cmp.w r3, #512 @ 0x200
  5577. 8002ae0: d00b beq.n 8002afa <LimiterSwitchTask+0xc6>
  5578. case GPIO_PIN_9: sensorsInfo.limitYSwitchDown = limiterSwitchData.pinState == GPIO_PIN_SET ? 0 : 1; break;
  5579. case GPIO_PIN_10: sensorsInfo.limitXSwitchCenter = limiterSwitchData.pinState == GPIO_PIN_SET ? 0 : 1; break;
  5580. case GPIO_PIN_11: sensorsInfo.limitYSwitchUp = limiterSwitchData.pinState == GPIO_PIN_SET ? 0 : 1; break;
  5581. case GPIO_PIN_12: sensorsInfo.limitXSwitchUp = limiterSwitchData.pinState == GPIO_PIN_SET ? 0 : 1; break;
  5582. case GPIO_PIN_13: sensorsInfo.limitXSwitchDown = limiterSwitchData.pinState == GPIO_PIN_SET ? 0 : 1; break;
  5583. default: break;
  5584. 8002ae2: e041 b.n 8002b68 <LimiterSwitchTask+0x134>
  5585. case GPIO_PIN_8: sensorsInfo.limitYSwitchCenter = limiterSwitchData.pinState == GPIO_PIN_SET ? 0 : 1; break;
  5586. 8002ae4: 7abb ldrb r3, [r7, #10]
  5587. 8002ae6: 2b01 cmp r3, #1
  5588. 8002ae8: bf14 ite ne
  5589. 8002aea: 2301 movne r3, #1
  5590. 8002aec: 2300 moveq r3, #0
  5591. 8002aee: b2db uxtb r3, r3
  5592. 8002af0: 461a mov r2, r3
  5593. 8002af2: 4b47 ldr r3, [pc, #284] @ (8002c10 <LimiterSwitchTask+0x1dc>)
  5594. 8002af4: f883 202d strb.w r2, [r3, #45] @ 0x2d
  5595. 8002af8: e037 b.n 8002b6a <LimiterSwitchTask+0x136>
  5596. case GPIO_PIN_9: sensorsInfo.limitYSwitchDown = limiterSwitchData.pinState == GPIO_PIN_SET ? 0 : 1; break;
  5597. 8002afa: 7abb ldrb r3, [r7, #10]
  5598. 8002afc: 2b01 cmp r3, #1
  5599. 8002afe: bf14 ite ne
  5600. 8002b00: 2301 movne r3, #1
  5601. 8002b02: 2300 moveq r3, #0
  5602. 8002b04: b2db uxtb r3, r3
  5603. 8002b06: 461a mov r2, r3
  5604. 8002b08: 4b41 ldr r3, [pc, #260] @ (8002c10 <LimiterSwitchTask+0x1dc>)
  5605. 8002b0a: f883 202c strb.w r2, [r3, #44] @ 0x2c
  5606. 8002b0e: e02c b.n 8002b6a <LimiterSwitchTask+0x136>
  5607. case GPIO_PIN_10: sensorsInfo.limitXSwitchCenter = limiterSwitchData.pinState == GPIO_PIN_SET ? 0 : 1; break;
  5608. 8002b10: 7abb ldrb r3, [r7, #10]
  5609. 8002b12: 2b01 cmp r3, #1
  5610. 8002b14: bf14 ite ne
  5611. 8002b16: 2301 movne r3, #1
  5612. 8002b18: 2300 moveq r3, #0
  5613. 8002b1a: b2db uxtb r3, r3
  5614. 8002b1c: 461a mov r2, r3
  5615. 8002b1e: 4b3c ldr r3, [pc, #240] @ (8002c10 <LimiterSwitchTask+0x1dc>)
  5616. 8002b20: f883 202a strb.w r2, [r3, #42] @ 0x2a
  5617. 8002b24: e021 b.n 8002b6a <LimiterSwitchTask+0x136>
  5618. case GPIO_PIN_11: sensorsInfo.limitYSwitchUp = limiterSwitchData.pinState == GPIO_PIN_SET ? 0 : 1; break;
  5619. 8002b26: 7abb ldrb r3, [r7, #10]
  5620. 8002b28: 2b01 cmp r3, #1
  5621. 8002b2a: bf14 ite ne
  5622. 8002b2c: 2301 movne r3, #1
  5623. 8002b2e: 2300 moveq r3, #0
  5624. 8002b30: b2db uxtb r3, r3
  5625. 8002b32: 461a mov r2, r3
  5626. 8002b34: 4b36 ldr r3, [pc, #216] @ (8002c10 <LimiterSwitchTask+0x1dc>)
  5627. 8002b36: f883 202b strb.w r2, [r3, #43] @ 0x2b
  5628. 8002b3a: e016 b.n 8002b6a <LimiterSwitchTask+0x136>
  5629. case GPIO_PIN_12: sensorsInfo.limitXSwitchUp = limiterSwitchData.pinState == GPIO_PIN_SET ? 0 : 1; break;
  5630. 8002b3c: 7abb ldrb r3, [r7, #10]
  5631. 8002b3e: 2b01 cmp r3, #1
  5632. 8002b40: bf14 ite ne
  5633. 8002b42: 2301 movne r3, #1
  5634. 8002b44: 2300 moveq r3, #0
  5635. 8002b46: b2db uxtb r3, r3
  5636. 8002b48: 461a mov r2, r3
  5637. 8002b4a: 4b31 ldr r3, [pc, #196] @ (8002c10 <LimiterSwitchTask+0x1dc>)
  5638. 8002b4c: f883 2028 strb.w r2, [r3, #40] @ 0x28
  5639. 8002b50: e00b b.n 8002b6a <LimiterSwitchTask+0x136>
  5640. case GPIO_PIN_13: sensorsInfo.limitXSwitchDown = limiterSwitchData.pinState == GPIO_PIN_SET ? 0 : 1; break;
  5641. 8002b52: 7abb ldrb r3, [r7, #10]
  5642. 8002b54: 2b01 cmp r3, #1
  5643. 8002b56: bf14 ite ne
  5644. 8002b58: 2301 movne r3, #1
  5645. 8002b5a: 2300 moveq r3, #0
  5646. 8002b5c: b2db uxtb r3, r3
  5647. 8002b5e: 461a mov r2, r3
  5648. 8002b60: 4b2b ldr r3, [pc, #172] @ (8002c10 <LimiterSwitchTask+0x1dc>)
  5649. 8002b62: f883 2029 strb.w r2, [r3, #41] @ 0x29
  5650. 8002b66: e000 b.n 8002b6a <LimiterSwitchTask+0x136>
  5651. default: break;
  5652. 8002b68: bf00 nop
  5653. }
  5654. if ((sensorsInfo.limitXSwitchDown == 1) || (sensorsInfo.limitXSwitchUp == 1)) {
  5655. 8002b6a: 4b29 ldr r3, [pc, #164] @ (8002c10 <LimiterSwitchTask+0x1dc>)
  5656. 8002b6c: f893 3029 ldrb.w r3, [r3, #41] @ 0x29
  5657. 8002b70: 2b01 cmp r3, #1
  5658. 8002b72: d004 beq.n 8002b7e <LimiterSwitchTask+0x14a>
  5659. 8002b74: 4b26 ldr r3, [pc, #152] @ (8002c10 <LimiterSwitchTask+0x1dc>)
  5660. 8002b76: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  5661. 8002b7a: 2b01 cmp r3, #1
  5662. 8002b7c: d118 bne.n 8002bb0 <LimiterSwitchTask+0x17c>
  5663. sensorsInfo.motorXStatus = motorControl (&htim3, &motorXYTimerConfigOC, TIM_CHANNEL_1, TIM_CHANNEL_2, motorXTimerHandle, 0, 0, sensorsInfo.limitXSwitchUp, sensorsInfo.limitXSwitchDown);
  5664. 8002b7e: 4b25 ldr r3, [pc, #148] @ (8002c14 <LimiterSwitchTask+0x1e0>)
  5665. 8002b80: 681b ldr r3, [r3, #0]
  5666. 8002b82: 4a23 ldr r2, [pc, #140] @ (8002c10 <LimiterSwitchTask+0x1dc>)
  5667. 8002b84: f892 2028 ldrb.w r2, [r2, #40] @ 0x28
  5668. 8002b88: 4921 ldr r1, [pc, #132] @ (8002c10 <LimiterSwitchTask+0x1dc>)
  5669. 8002b8a: f891 1029 ldrb.w r1, [r1, #41] @ 0x29
  5670. 8002b8e: 9104 str r1, [sp, #16]
  5671. 8002b90: 9203 str r2, [sp, #12]
  5672. 8002b92: 2200 movs r2, #0
  5673. 8002b94: 9202 str r2, [sp, #8]
  5674. 8002b96: 2200 movs r2, #0
  5675. 8002b98: 9201 str r2, [sp, #4]
  5676. 8002b9a: 9300 str r3, [sp, #0]
  5677. 8002b9c: 2304 movs r3, #4
  5678. 8002b9e: 2200 movs r2, #0
  5679. 8002ba0: 491d ldr r1, [pc, #116] @ (8002c18 <LimiterSwitchTask+0x1e4>)
  5680. 8002ba2: 481e ldr r0, [pc, #120] @ (8002c1c <LimiterSwitchTask+0x1e8>)
  5681. 8002ba4: f000 f92a bl 8002dfc <motorControl>
  5682. 8002ba8: 4603 mov r3, r0
  5683. 8002baa: 461a mov r2, r3
  5684. 8002bac: 4b18 ldr r3, [pc, #96] @ (8002c10 <LimiterSwitchTask+0x1dc>)
  5685. 8002bae: 751a strb r2, [r3, #20]
  5686. }
  5687. if ((sensorsInfo.limitYSwitchDown == 1) || (sensorsInfo.limitYSwitchUp == 1)) {
  5688. 8002bb0: 4b17 ldr r3, [pc, #92] @ (8002c10 <LimiterSwitchTask+0x1dc>)
  5689. 8002bb2: f893 302c ldrb.w r3, [r3, #44] @ 0x2c
  5690. 8002bb6: 2b01 cmp r3, #1
  5691. 8002bb8: d004 beq.n 8002bc4 <LimiterSwitchTask+0x190>
  5692. 8002bba: 4b15 ldr r3, [pc, #84] @ (8002c10 <LimiterSwitchTask+0x1dc>)
  5693. 8002bbc: f893 302b ldrb.w r3, [r3, #43] @ 0x2b
  5694. 8002bc0: 2b01 cmp r3, #1
  5695. 8002bc2: d118 bne.n 8002bf6 <LimiterSwitchTask+0x1c2>
  5696. sensorsInfo.motorYStatus = motorControl (&htim3, &motorXYTimerConfigOC, TIM_CHANNEL_3, TIM_CHANNEL_4, motorYTimerHandle, 0, 0, sensorsInfo.limitYSwitchUp, sensorsInfo.limitYSwitchDown);
  5697. 8002bc4: 4b16 ldr r3, [pc, #88] @ (8002c20 <LimiterSwitchTask+0x1ec>)
  5698. 8002bc6: 681b ldr r3, [r3, #0]
  5699. 8002bc8: 4a11 ldr r2, [pc, #68] @ (8002c10 <LimiterSwitchTask+0x1dc>)
  5700. 8002bca: f892 202b ldrb.w r2, [r2, #43] @ 0x2b
  5701. 8002bce: 4910 ldr r1, [pc, #64] @ (8002c10 <LimiterSwitchTask+0x1dc>)
  5702. 8002bd0: f891 102c ldrb.w r1, [r1, #44] @ 0x2c
  5703. 8002bd4: 9104 str r1, [sp, #16]
  5704. 8002bd6: 9203 str r2, [sp, #12]
  5705. 8002bd8: 2200 movs r2, #0
  5706. 8002bda: 9202 str r2, [sp, #8]
  5707. 8002bdc: 2200 movs r2, #0
  5708. 8002bde: 9201 str r2, [sp, #4]
  5709. 8002be0: 9300 str r3, [sp, #0]
  5710. 8002be2: 230c movs r3, #12
  5711. 8002be4: 2208 movs r2, #8
  5712. 8002be6: 490c ldr r1, [pc, #48] @ (8002c18 <LimiterSwitchTask+0x1e4>)
  5713. 8002be8: 480c ldr r0, [pc, #48] @ (8002c1c <LimiterSwitchTask+0x1e8>)
  5714. 8002bea: f000 f907 bl 8002dfc <motorControl>
  5715. 8002bee: 4603 mov r3, r0
  5716. 8002bf0: 461a mov r2, r3
  5717. 8002bf2: 4b07 ldr r3, [pc, #28] @ (8002c10 <LimiterSwitchTask+0x1dc>)
  5718. 8002bf4: 755a strb r2, [r3, #21]
  5719. }
  5720. osMutexRelease (sensorsInfoMutex);
  5721. 8002bf6: 4b05 ldr r3, [pc, #20] @ (8002c0c <LimiterSwitchTask+0x1d8>)
  5722. 8002bf8: 681b ldr r3, [r3, #0]
  5723. 8002bfa: 4618 mov r0, r3
  5724. 8002bfc: f010 ffb6 bl 8013b6c <osMutexRelease>
  5725. osMessageQueueGet (limiterSwitchDataQueue, &limiterSwitchData, 0, osWaitForever);
  5726. 8002c00: e73d b.n 8002a7e <LimiterSwitchTask+0x4a>
  5727. 8002c02: bf00 nop
  5728. 8002c04: 58020c00 .word 0x58020c00
  5729. 8002c08: 240007d4 .word 0x240007d4
  5730. 8002c0c: 240007e8 .word 0x240007e8
  5731. 8002c10: 2400082c .word 0x2400082c
  5732. 8002c14: 24000708 .word 0x24000708
  5733. 8002c18: 24000784 .word 0x24000784
  5734. 8002c1c: 240004e4 .word 0x240004e4
  5735. 8002c20: 24000738 .word 0x24000738
  5736. 08002c24 <EncoderTask>:
  5737. }
  5738. }
  5739. }
  5740. void EncoderTask (void* arg) {
  5741. 8002c24: b580 push {r7, lr}
  5742. 8002c26: b084 sub sp, #16
  5743. 8002c28: af00 add r7, sp, #0
  5744. 8002c2a: 6078 str r0, [r7, #4]
  5745. EncoderData encoderData = { 0 };
  5746. 8002c2c: 2300 movs r3, #0
  5747. 8002c2e: 813b strh r3, [r7, #8]
  5748. osMessageQueueId_t encoderQueue = (osMessageQueueId_t)arg;
  5749. 8002c30: 687b ldr r3, [r7, #4]
  5750. 8002c32: 60fb str r3, [r7, #12]
  5751. while (pdTRUE) {
  5752. osMessageQueueGet (encoderQueue, &encoderData, 0, osWaitForever);
  5753. 8002c34: f107 0108 add.w r1, r7, #8
  5754. 8002c38: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  5755. 8002c3c: 2200 movs r2, #0
  5756. 8002c3e: 68f8 ldr r0, [r7, #12]
  5757. 8002c40: f011 f8a4 bl 8013d8c <osMessageQueueGet>
  5758. if (osMutexAcquire (sensorsInfoMutex, osWaitForever) == osOK) {
  5759. 8002c44: 4b24 ldr r3, [pc, #144] @ (8002cd8 <EncoderTask+0xb4>)
  5760. 8002c46: 681b ldr r3, [r3, #0]
  5761. 8002c48: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  5762. 8002c4c: 4618 mov r0, r3
  5763. 8002c4e: f010 ff42 bl 8013ad6 <osMutexAcquire>
  5764. 8002c52: 4603 mov r3, r0
  5765. 8002c54: 2b00 cmp r3, #0
  5766. 8002c56: d1ed bne.n 8002c34 <EncoderTask+0x10>
  5767. if (encoderData.axe == encoderAxeX) {
  5768. 8002c58: 7a3b ldrb r3, [r7, #8]
  5769. 8002c5a: 2b00 cmp r3, #0
  5770. 8002c5c: d11b bne.n 8002c96 <EncoderTask+0x72>
  5771. if (encoderData.direction == encoderCW) {
  5772. 8002c5e: 7a7b ldrb r3, [r7, #9]
  5773. 8002c60: 2b00 cmp r3, #0
  5774. 8002c62: d10a bne.n 8002c7a <EncoderTask+0x56>
  5775. sensorsInfo.pvEncoderX += 360.0 / ENCODER_X_IMP_PER_TURN;
  5776. 8002c64: 4b1d ldr r3, [pc, #116] @ (8002cdc <EncoderTask+0xb8>)
  5777. 8002c66: edd3 7a03 vldr s15, [r3, #12]
  5778. 8002c6a: eeb3 7a02 vmov.f32 s14, #50 @ 0x41900000 18.0
  5779. 8002c6e: ee77 7a87 vadd.f32 s15, s15, s14
  5780. 8002c72: 4b1a ldr r3, [pc, #104] @ (8002cdc <EncoderTask+0xb8>)
  5781. 8002c74: edc3 7a03 vstr s15, [r3, #12]
  5782. 8002c78: e009 b.n 8002c8e <EncoderTask+0x6a>
  5783. } else {
  5784. sensorsInfo.pvEncoderX -= 360.0 / ENCODER_X_IMP_PER_TURN;
  5785. 8002c7a: 4b18 ldr r3, [pc, #96] @ (8002cdc <EncoderTask+0xb8>)
  5786. 8002c7c: edd3 7a03 vldr s15, [r3, #12]
  5787. 8002c80: eeb3 7a02 vmov.f32 s14, #50 @ 0x41900000 18.0
  5788. 8002c84: ee77 7ac7 vsub.f32 s15, s15, s14
  5789. 8002c88: 4b14 ldr r3, [pc, #80] @ (8002cdc <EncoderTask+0xb8>)
  5790. 8002c8a: edc3 7a03 vstr s15, [r3, #12]
  5791. }
  5792. DbgLEDToggle(DBG_LED2);
  5793. 8002c8e: 2020 movs r0, #32
  5794. 8002c90: f000 f84a bl 8002d28 <DbgLEDToggle>
  5795. 8002c94: e01a b.n 8002ccc <EncoderTask+0xa8>
  5796. } else {
  5797. if (encoderData.direction == encoderCW) {
  5798. 8002c96: 7a7b ldrb r3, [r7, #9]
  5799. 8002c98: 2b00 cmp r3, #0
  5800. 8002c9a: d10a bne.n 8002cb2 <EncoderTask+0x8e>
  5801. sensorsInfo.pvEncoderY += 360.0 / ENCODER_Y_IMP_PER_TURN;
  5802. 8002c9c: 4b0f ldr r3, [pc, #60] @ (8002cdc <EncoderTask+0xb8>)
  5803. 8002c9e: edd3 7a04 vldr s15, [r3, #16]
  5804. 8002ca2: eeb3 7a02 vmov.f32 s14, #50 @ 0x41900000 18.0
  5805. 8002ca6: ee77 7a87 vadd.f32 s15, s15, s14
  5806. 8002caa: 4b0c ldr r3, [pc, #48] @ (8002cdc <EncoderTask+0xb8>)
  5807. 8002cac: edc3 7a04 vstr s15, [r3, #16]
  5808. 8002cb0: e009 b.n 8002cc6 <EncoderTask+0xa2>
  5809. } else {
  5810. sensorsInfo.pvEncoderY -= 360.0 / ENCODER_Y_IMP_PER_TURN;
  5811. 8002cb2: 4b0a ldr r3, [pc, #40] @ (8002cdc <EncoderTask+0xb8>)
  5812. 8002cb4: edd3 7a04 vldr s15, [r3, #16]
  5813. 8002cb8: eeb3 7a02 vmov.f32 s14, #50 @ 0x41900000 18.0
  5814. 8002cbc: ee77 7ac7 vsub.f32 s15, s15, s14
  5815. 8002cc0: 4b06 ldr r3, [pc, #24] @ (8002cdc <EncoderTask+0xb8>)
  5816. 8002cc2: edc3 7a04 vstr s15, [r3, #16]
  5817. }
  5818. DbgLEDToggle(DBG_LED3);
  5819. 8002cc6: 2040 movs r0, #64 @ 0x40
  5820. 8002cc8: f000 f82e bl 8002d28 <DbgLEDToggle>
  5821. }
  5822. osMutexRelease (sensorsInfoMutex);
  5823. 8002ccc: 4b02 ldr r3, [pc, #8] @ (8002cd8 <EncoderTask+0xb4>)
  5824. 8002cce: 681b ldr r3, [r3, #0]
  5825. 8002cd0: 4618 mov r0, r3
  5826. 8002cd2: f010 ff4b bl 8013b6c <osMutexRelease>
  5827. osMessageQueueGet (encoderQueue, &encoderData, 0, osWaitForever);
  5828. 8002cd6: e7ad b.n 8002c34 <EncoderTask+0x10>
  5829. 8002cd8: 240007e8 .word 0x240007e8
  5830. 8002cdc: 2400082c .word 0x2400082c
  5831. 08002ce0 <DbgLEDOn>:
  5832. #include <stdlib.h>
  5833. #include "peripherial.h"
  5834. void DbgLEDOn (uint8_t ledNumber) {
  5835. 8002ce0: b580 push {r7, lr}
  5836. 8002ce2: b082 sub sp, #8
  5837. 8002ce4: af00 add r7, sp, #0
  5838. 8002ce6: 4603 mov r3, r0
  5839. 8002ce8: 71fb strb r3, [r7, #7]
  5840. HAL_GPIO_WritePin (GPIOD, ledNumber, GPIO_PIN_SET);
  5841. 8002cea: 79fb ldrb r3, [r7, #7]
  5842. 8002cec: b29b uxth r3, r3
  5843. 8002cee: 2201 movs r2, #1
  5844. 8002cf0: 4619 mov r1, r3
  5845. 8002cf2: 4803 ldr r0, [pc, #12] @ (8002d00 <DbgLEDOn+0x20>)
  5846. 8002cf4: f007 ff12 bl 800ab1c <HAL_GPIO_WritePin>
  5847. }
  5848. 8002cf8: bf00 nop
  5849. 8002cfa: 3708 adds r7, #8
  5850. 8002cfc: 46bd mov sp, r7
  5851. 8002cfe: bd80 pop {r7, pc}
  5852. 8002d00: 58020c00 .word 0x58020c00
  5853. 08002d04 <DbgLEDOff>:
  5854. void DbgLEDOff (uint8_t ledNumber) {
  5855. 8002d04: b580 push {r7, lr}
  5856. 8002d06: b082 sub sp, #8
  5857. 8002d08: af00 add r7, sp, #0
  5858. 8002d0a: 4603 mov r3, r0
  5859. 8002d0c: 71fb strb r3, [r7, #7]
  5860. HAL_GPIO_WritePin (GPIOD, ledNumber, GPIO_PIN_RESET);
  5861. 8002d0e: 79fb ldrb r3, [r7, #7]
  5862. 8002d10: b29b uxth r3, r3
  5863. 8002d12: 2200 movs r2, #0
  5864. 8002d14: 4619 mov r1, r3
  5865. 8002d16: 4803 ldr r0, [pc, #12] @ (8002d24 <DbgLEDOff+0x20>)
  5866. 8002d18: f007 ff00 bl 800ab1c <HAL_GPIO_WritePin>
  5867. }
  5868. 8002d1c: bf00 nop
  5869. 8002d1e: 3708 adds r7, #8
  5870. 8002d20: 46bd mov sp, r7
  5871. 8002d22: bd80 pop {r7, pc}
  5872. 8002d24: 58020c00 .word 0x58020c00
  5873. 08002d28 <DbgLEDToggle>:
  5874. void DbgLEDToggle (uint8_t ledNumber) {
  5875. 8002d28: b580 push {r7, lr}
  5876. 8002d2a: b082 sub sp, #8
  5877. 8002d2c: af00 add r7, sp, #0
  5878. 8002d2e: 4603 mov r3, r0
  5879. 8002d30: 71fb strb r3, [r7, #7]
  5880. HAL_GPIO_TogglePin (GPIOD, ledNumber);
  5881. 8002d32: 79fb ldrb r3, [r7, #7]
  5882. 8002d34: b29b uxth r3, r3
  5883. 8002d36: 4619 mov r1, r3
  5884. 8002d38: 4803 ldr r0, [pc, #12] @ (8002d48 <DbgLEDToggle+0x20>)
  5885. 8002d3a: f007 ff08 bl 800ab4e <HAL_GPIO_TogglePin>
  5886. }
  5887. 8002d3e: bf00 nop
  5888. 8002d40: 3708 adds r7, #8
  5889. 8002d42: 46bd mov sp, r7
  5890. 8002d44: bd80 pop {r7, pc}
  5891. 8002d46: bf00 nop
  5892. 8002d48: 58020c00 .word 0x58020c00
  5893. 08002d4c <EnableCurrentSensors>:
  5894. void EnableCurrentSensors (void) {
  5895. 8002d4c: b580 push {r7, lr}
  5896. 8002d4e: af00 add r7, sp, #0
  5897. HAL_GPIO_WritePin (GPIOE, MCU_CS_PWR_EN, GPIO_PIN_SET);
  5898. 8002d50: 2201 movs r2, #1
  5899. 8002d52: f44f 4100 mov.w r1, #32768 @ 0x8000
  5900. 8002d56: 4802 ldr r0, [pc, #8] @ (8002d60 <EnableCurrentSensors+0x14>)
  5901. 8002d58: f007 fee0 bl 800ab1c <HAL_GPIO_WritePin>
  5902. }
  5903. 8002d5c: bf00 nop
  5904. 8002d5e: bd80 pop {r7, pc}
  5905. 8002d60: 58021000 .word 0x58021000
  5906. 08002d64 <SelectCurrentSensorGain>:
  5907. void DisableCurrentSensors (void) {
  5908. HAL_GPIO_WritePin (GPIOE, MCU_CS_PWR_EN, GPIO_PIN_RESET);
  5909. }
  5910. void SelectCurrentSensorGain (CurrentSensor sensor, CurrentSensorGain gain) {
  5911. 8002d64: b580 push {r7, lr}
  5912. 8002d66: b084 sub sp, #16
  5913. 8002d68: af00 add r7, sp, #0
  5914. 8002d6a: 4603 mov r3, r0
  5915. 8002d6c: 460a mov r2, r1
  5916. 8002d6e: 71fb strb r3, [r7, #7]
  5917. 8002d70: 4613 mov r3, r2
  5918. 8002d72: 71bb strb r3, [r7, #6]
  5919. uint8_t gpioOffset = 0;
  5920. 8002d74: 2300 movs r3, #0
  5921. 8002d76: 73fb strb r3, [r7, #15]
  5922. switch (sensor) {
  5923. 8002d78: 79fb ldrb r3, [r7, #7]
  5924. 8002d7a: 2b02 cmp r3, #2
  5925. 8002d7c: d00c beq.n 8002d98 <SelectCurrentSensorGain+0x34>
  5926. 8002d7e: 2b02 cmp r3, #2
  5927. 8002d80: dc0d bgt.n 8002d9e <SelectCurrentSensorGain+0x3a>
  5928. 8002d82: 2b00 cmp r3, #0
  5929. 8002d84: d002 beq.n 8002d8c <SelectCurrentSensorGain+0x28>
  5930. 8002d86: 2b01 cmp r3, #1
  5931. 8002d88: d003 beq.n 8002d92 <SelectCurrentSensorGain+0x2e>
  5932. case CurrentSensorL1: gpioOffset = CURRENT_SENSOR_L1_GPIO_OFFSET; break;
  5933. case CurrentSensorL2: gpioOffset = CURRENT_SENSOR_L2_GPIO_OFFSET; break;
  5934. case CurrentSensorL3: gpioOffset = CURRENT_SENSOR_L3_GPIO_OFFSET; break;
  5935. default: break;
  5936. 8002d8a: e008 b.n 8002d9e <SelectCurrentSensorGain+0x3a>
  5937. case CurrentSensorL1: gpioOffset = CURRENT_SENSOR_L1_GPIO_OFFSET; break;
  5938. 8002d8c: 2307 movs r3, #7
  5939. 8002d8e: 73fb strb r3, [r7, #15]
  5940. 8002d90: e006 b.n 8002da0 <SelectCurrentSensorGain+0x3c>
  5941. case CurrentSensorL2: gpioOffset = CURRENT_SENSOR_L2_GPIO_OFFSET; break;
  5942. 8002d92: 2309 movs r3, #9
  5943. 8002d94: 73fb strb r3, [r7, #15]
  5944. 8002d96: e003 b.n 8002da0 <SelectCurrentSensorGain+0x3c>
  5945. case CurrentSensorL3: gpioOffset = CURRENT_SENSOR_L3_GPIO_OFFSET; break;
  5946. 8002d98: 230d movs r3, #13
  5947. 8002d9a: 73fb strb r3, [r7, #15]
  5948. 8002d9c: e000 b.n 8002da0 <SelectCurrentSensorGain+0x3c>
  5949. default: break;
  5950. 8002d9e: bf00 nop
  5951. }
  5952. if (gpioOffset > 0) {
  5953. 8002da0: 7bfb ldrb r3, [r7, #15]
  5954. 8002da2: 2b00 cmp r3, #0
  5955. 8002da4: d023 beq.n 8002dee <SelectCurrentSensorGain+0x8a>
  5956. uint16_t gain0Gpio = 1 << gpioOffset;
  5957. 8002da6: 7bfb ldrb r3, [r7, #15]
  5958. 8002da8: 2201 movs r2, #1
  5959. 8002daa: fa02 f303 lsl.w r3, r2, r3
  5960. 8002dae: 81bb strh r3, [r7, #12]
  5961. uint16_t gain1Gpio = 1 << (gpioOffset + 1);
  5962. 8002db0: 7bfb ldrb r3, [r7, #15]
  5963. 8002db2: 3301 adds r3, #1
  5964. 8002db4: 2201 movs r2, #1
  5965. 8002db6: fa02 f303 lsl.w r3, r2, r3
  5966. 8002dba: 817b strh r3, [r7, #10]
  5967. uint16_t gpioState = ((uint16_t)gain) & 0x0001;
  5968. 8002dbc: 79bb ldrb r3, [r7, #6]
  5969. 8002dbe: b29b uxth r3, r3
  5970. 8002dc0: f003 0301 and.w r3, r3, #1
  5971. 8002dc4: 813b strh r3, [r7, #8]
  5972. HAL_GPIO_WritePin (GPIOE, gain0Gpio, gpioState);
  5973. 8002dc6: 893b ldrh r3, [r7, #8]
  5974. 8002dc8: b2da uxtb r2, r3
  5975. 8002dca: 89bb ldrh r3, [r7, #12]
  5976. 8002dcc: 4619 mov r1, r3
  5977. 8002dce: 480a ldr r0, [pc, #40] @ (8002df8 <SelectCurrentSensorGain+0x94>)
  5978. 8002dd0: f007 fea4 bl 800ab1c <HAL_GPIO_WritePin>
  5979. gpioState = (((uint16_t)gain) >> 1) & 0x0001;
  5980. 8002dd4: 79bb ldrb r3, [r7, #6]
  5981. 8002dd6: 085b lsrs r3, r3, #1
  5982. 8002dd8: b2db uxtb r3, r3
  5983. 8002dda: f003 0301 and.w r3, r3, #1
  5984. 8002dde: 813b strh r3, [r7, #8]
  5985. HAL_GPIO_WritePin (GPIOE, gain1Gpio, gpioState);
  5986. 8002de0: 893b ldrh r3, [r7, #8]
  5987. 8002de2: b2da uxtb r2, r3
  5988. 8002de4: 897b ldrh r3, [r7, #10]
  5989. 8002de6: 4619 mov r1, r3
  5990. 8002de8: 4803 ldr r0, [pc, #12] @ (8002df8 <SelectCurrentSensorGain+0x94>)
  5991. 8002dea: f007 fe97 bl 800ab1c <HAL_GPIO_WritePin>
  5992. }
  5993. }
  5994. 8002dee: bf00 nop
  5995. 8002df0: 3710 adds r7, #16
  5996. 8002df2: 46bd mov sp, r7
  5997. 8002df4: bd80 pop {r7, pc}
  5998. 8002df6: bf00 nop
  5999. 8002df8: 58021000 .word 0x58021000
  6000. 08002dfc <motorControl>:
  6001. uint8_t
  6002. motorControl (TIM_HandleTypeDef* htim, TIM_OC_InitTypeDef* motorTimerConfigOC, uint8_t channel1, uint8_t channel2, osTimerId_t motorTimerHandle, int32_t motorPWMPulse, int32_t motorTimerPeriod, uint8_t switchLimiterUpStat, uint8_t switchLimiterDownStat) {
  6003. 8002dfc: b580 push {r7, lr}
  6004. 8002dfe: b088 sub sp, #32
  6005. 8002e00: af02 add r7, sp, #8
  6006. 8002e02: 60f8 str r0, [r7, #12]
  6007. 8002e04: 60b9 str r1, [r7, #8]
  6008. 8002e06: 4611 mov r1, r2
  6009. 8002e08: 461a mov r2, r3
  6010. 8002e0a: 460b mov r3, r1
  6011. 8002e0c: 71fb strb r3, [r7, #7]
  6012. 8002e0e: 4613 mov r3, r2
  6013. 8002e10: 71bb strb r3, [r7, #6]
  6014. uint32_t motorStatus = 0;
  6015. 8002e12: 2300 movs r3, #0
  6016. 8002e14: 617b str r3, [r7, #20]
  6017. MotorDriverState setMotorYState = HiZ;
  6018. 8002e16: 2300 movs r3, #0
  6019. 8002e18: 74fb strb r3, [r7, #19]
  6020. HAL_TIM_PWM_Stop (htim, channel1);
  6021. 8002e1a: 79fb ldrb r3, [r7, #7]
  6022. 8002e1c: 4619 mov r1, r3
  6023. 8002e1e: 68f8 ldr r0, [r7, #12]
  6024. 8002e20: f00c f826 bl 800ee70 <HAL_TIM_PWM_Stop>
  6025. HAL_TIM_PWM_Stop (htim, channel2);
  6026. 8002e24: 79bb ldrb r3, [r7, #6]
  6027. 8002e26: 4619 mov r1, r3
  6028. 8002e28: 68f8 ldr r0, [r7, #12]
  6029. 8002e2a: f00c f821 bl 800ee70 <HAL_TIM_PWM_Stop>
  6030. if (motorTimerPeriod > 0) {
  6031. 8002e2e: 6abb ldr r3, [r7, #40] @ 0x28
  6032. 8002e30: 2b00 cmp r3, #0
  6033. 8002e32: f340 808c ble.w 8002f4e <motorControl+0x152>
  6034. if (motorPWMPulse > 0) {
  6035. 8002e36: 6a7b ldr r3, [r7, #36] @ 0x24
  6036. 8002e38: 2b00 cmp r3, #0
  6037. 8002e3a: dd2c ble.n 8002e96 <motorControl+0x9a>
  6038. // Forward
  6039. if (switchLimiterUpStat == 0) {
  6040. 8002e3c: f897 302c ldrb.w r3, [r7, #44] @ 0x2c
  6041. 8002e40: 2b00 cmp r3, #0
  6042. 8002e42: d11d bne.n 8002e80 <motorControl+0x84>
  6043. setMotorYState = Forward;
  6044. 8002e44: 2301 movs r3, #1
  6045. 8002e46: 74fb strb r3, [r7, #19]
  6046. motorAction (htim, motorTimerConfigOC, channel1, channel2, setMotorYState, abs (motorPWMPulse) * 10);
  6047. 8002e48: 79f9 ldrb r1, [r7, #7]
  6048. 8002e4a: 79b8 ldrb r0, [r7, #6]
  6049. 8002e4c: 6a7b ldr r3, [r7, #36] @ 0x24
  6050. 8002e4e: ea83 72e3 eor.w r2, r3, r3, asr #31
  6051. 8002e52: eba2 72e3 sub.w r2, r2, r3, asr #31
  6052. 8002e56: 4613 mov r3, r2
  6053. 8002e58: 009b lsls r3, r3, #2
  6054. 8002e5a: 4413 add r3, r2
  6055. 8002e5c: 005b lsls r3, r3, #1
  6056. 8002e5e: 9301 str r3, [sp, #4]
  6057. 8002e60: 7cfb ldrb r3, [r7, #19]
  6058. 8002e62: 9300 str r3, [sp, #0]
  6059. 8002e64: 4603 mov r3, r0
  6060. 8002e66: 460a mov r2, r1
  6061. 8002e68: 68b9 ldr r1, [r7, #8]
  6062. 8002e6a: 68f8 ldr r0, [r7, #12]
  6063. 8002e6c: f000 f8ff bl 800306e <motorAction>
  6064. HAL_TIM_PWM_Start (htim, channel1);
  6065. 8002e70: 79fb ldrb r3, [r7, #7]
  6066. 8002e72: 4619 mov r1, r3
  6067. 8002e74: 68f8 ldr r0, [r7, #12]
  6068. 8002e76: f00b feed bl 800ec54 <HAL_TIM_PWM_Start>
  6069. motorStatus = 1;
  6070. 8002e7a: 2301 movs r3, #1
  6071. 8002e7c: 617b str r3, [r7, #20]
  6072. 8002e7e: e004 b.n 8002e8a <motorControl+0x8e>
  6073. } else {
  6074. HAL_TIM_PWM_Stop (htim, channel1);
  6075. 8002e80: 79fb ldrb r3, [r7, #7]
  6076. 8002e82: 4619 mov r1, r3
  6077. 8002e84: 68f8 ldr r0, [r7, #12]
  6078. 8002e86: f00b fff3 bl 800ee70 <HAL_TIM_PWM_Stop>
  6079. }
  6080. HAL_TIM_PWM_Stop (htim, channel2);
  6081. 8002e8a: 79bb ldrb r3, [r7, #6]
  6082. 8002e8c: 4619 mov r1, r3
  6083. 8002e8e: 68f8 ldr r0, [r7, #12]
  6084. 8002e90: f00b ffee bl 800ee70 <HAL_TIM_PWM_Stop>
  6085. 8002e94: e051 b.n 8002f3a <motorControl+0x13e>
  6086. } else if (motorPWMPulse < 0) {
  6087. 8002e96: 6a7b ldr r3, [r7, #36] @ 0x24
  6088. 8002e98: 2b00 cmp r3, #0
  6089. 8002e9a: da2c bge.n 8002ef6 <motorControl+0xfa>
  6090. // Reverse
  6091. if (switchLimiterDownStat == 0) {
  6092. 8002e9c: f897 3030 ldrb.w r3, [r7, #48] @ 0x30
  6093. 8002ea0: 2b00 cmp r3, #0
  6094. 8002ea2: d11d bne.n 8002ee0 <motorControl+0xe4>
  6095. setMotorYState = Reverse;
  6096. 8002ea4: 2302 movs r3, #2
  6097. 8002ea6: 74fb strb r3, [r7, #19]
  6098. motorAction (htim, motorTimerConfigOC, channel1, channel2, setMotorYState, abs (motorPWMPulse) * 10);
  6099. 8002ea8: 79f9 ldrb r1, [r7, #7]
  6100. 8002eaa: 79b8 ldrb r0, [r7, #6]
  6101. 8002eac: 6a7b ldr r3, [r7, #36] @ 0x24
  6102. 8002eae: ea83 72e3 eor.w r2, r3, r3, asr #31
  6103. 8002eb2: eba2 72e3 sub.w r2, r2, r3, asr #31
  6104. 8002eb6: 4613 mov r3, r2
  6105. 8002eb8: 009b lsls r3, r3, #2
  6106. 8002eba: 4413 add r3, r2
  6107. 8002ebc: 005b lsls r3, r3, #1
  6108. 8002ebe: 9301 str r3, [sp, #4]
  6109. 8002ec0: 7cfb ldrb r3, [r7, #19]
  6110. 8002ec2: 9300 str r3, [sp, #0]
  6111. 8002ec4: 4603 mov r3, r0
  6112. 8002ec6: 460a mov r2, r1
  6113. 8002ec8: 68b9 ldr r1, [r7, #8]
  6114. 8002eca: 68f8 ldr r0, [r7, #12]
  6115. 8002ecc: f000 f8cf bl 800306e <motorAction>
  6116. HAL_TIM_PWM_Start (htim, channel2);
  6117. 8002ed0: 79bb ldrb r3, [r7, #6]
  6118. 8002ed2: 4619 mov r1, r3
  6119. 8002ed4: 68f8 ldr r0, [r7, #12]
  6120. 8002ed6: f00b febd bl 800ec54 <HAL_TIM_PWM_Start>
  6121. motorStatus = 1;
  6122. 8002eda: 2301 movs r3, #1
  6123. 8002edc: 617b str r3, [r7, #20]
  6124. 8002ede: e004 b.n 8002eea <motorControl+0xee>
  6125. } else {
  6126. HAL_TIM_PWM_Stop (htim, channel2);
  6127. 8002ee0: 79bb ldrb r3, [r7, #6]
  6128. 8002ee2: 4619 mov r1, r3
  6129. 8002ee4: 68f8 ldr r0, [r7, #12]
  6130. 8002ee6: f00b ffc3 bl 800ee70 <HAL_TIM_PWM_Stop>
  6131. }
  6132. HAL_TIM_PWM_Stop (htim, channel1);
  6133. 8002eea: 79fb ldrb r3, [r7, #7]
  6134. 8002eec: 4619 mov r1, r3
  6135. 8002eee: 68f8 ldr r0, [r7, #12]
  6136. 8002ef0: f00b ffbe bl 800ee70 <HAL_TIM_PWM_Stop>
  6137. 8002ef4: e021 b.n 8002f3a <motorControl+0x13e>
  6138. } else {
  6139. // Brake
  6140. setMotorYState = Brake;
  6141. 8002ef6: 2303 movs r3, #3
  6142. 8002ef8: 74fb strb r3, [r7, #19]
  6143. motorAction (htim, motorTimerConfigOC, channel1, channel2, setMotorYState, abs (motorPWMPulse) * 10);
  6144. 8002efa: 79f9 ldrb r1, [r7, #7]
  6145. 8002efc: 79b8 ldrb r0, [r7, #6]
  6146. 8002efe: 6a7b ldr r3, [r7, #36] @ 0x24
  6147. 8002f00: ea83 72e3 eor.w r2, r3, r3, asr #31
  6148. 8002f04: eba2 72e3 sub.w r2, r2, r3, asr #31
  6149. 8002f08: 4613 mov r3, r2
  6150. 8002f0a: 009b lsls r3, r3, #2
  6151. 8002f0c: 4413 add r3, r2
  6152. 8002f0e: 005b lsls r3, r3, #1
  6153. 8002f10: 9301 str r3, [sp, #4]
  6154. 8002f12: 7cfb ldrb r3, [r7, #19]
  6155. 8002f14: 9300 str r3, [sp, #0]
  6156. 8002f16: 4603 mov r3, r0
  6157. 8002f18: 460a mov r2, r1
  6158. 8002f1a: 68b9 ldr r1, [r7, #8]
  6159. 8002f1c: 68f8 ldr r0, [r7, #12]
  6160. 8002f1e: f000 f8a6 bl 800306e <motorAction>
  6161. HAL_TIM_PWM_Start (htim, channel1);
  6162. 8002f22: 79fb ldrb r3, [r7, #7]
  6163. 8002f24: 4619 mov r1, r3
  6164. 8002f26: 68f8 ldr r0, [r7, #12]
  6165. 8002f28: f00b fe94 bl 800ec54 <HAL_TIM_PWM_Start>
  6166. HAL_TIM_PWM_Start (htim, channel2);
  6167. 8002f2c: 79bb ldrb r3, [r7, #6]
  6168. 8002f2e: 4619 mov r1, r3
  6169. 8002f30: 68f8 ldr r0, [r7, #12]
  6170. 8002f32: f00b fe8f bl 800ec54 <HAL_TIM_PWM_Start>
  6171. motorStatus = 0;
  6172. 8002f36: 2300 movs r3, #0
  6173. 8002f38: 617b str r3, [r7, #20]
  6174. }
  6175. osTimerStart (motorTimerHandle, motorTimerPeriod * 1000);
  6176. 8002f3a: 6abb ldr r3, [r7, #40] @ 0x28
  6177. 8002f3c: f44f 727a mov.w r2, #1000 @ 0x3e8
  6178. 8002f40: fb02 f303 mul.w r3, r2, r3
  6179. 8002f44: 4619 mov r1, r3
  6180. 8002f46: 6a38 ldr r0, [r7, #32]
  6181. 8002f48: f010 fcda bl 8013900 <osTimerStart>
  6182. 8002f4c: e089 b.n 8003062 <motorControl+0x266>
  6183. } else if ((motorTimerPeriod == 0) && (motorPWMPulse == 0)) {
  6184. 8002f4e: 6abb ldr r3, [r7, #40] @ 0x28
  6185. 8002f50: 2b00 cmp r3, #0
  6186. 8002f52: d126 bne.n 8002fa2 <motorControl+0x1a6>
  6187. 8002f54: 6a7b ldr r3, [r7, #36] @ 0x24
  6188. 8002f56: 2b00 cmp r3, #0
  6189. 8002f58: d123 bne.n 8002fa2 <motorControl+0x1a6>
  6190. motorAction (htim, motorTimerConfigOC, channel1, channel2, HiZ, abs (motorPWMPulse) * 10);
  6191. 8002f5a: 79f9 ldrb r1, [r7, #7]
  6192. 8002f5c: 79b8 ldrb r0, [r7, #6]
  6193. 8002f5e: 6a7b ldr r3, [r7, #36] @ 0x24
  6194. 8002f60: ea83 72e3 eor.w r2, r3, r3, asr #31
  6195. 8002f64: eba2 72e3 sub.w r2, r2, r3, asr #31
  6196. 8002f68: 4613 mov r3, r2
  6197. 8002f6a: 009b lsls r3, r3, #2
  6198. 8002f6c: 4413 add r3, r2
  6199. 8002f6e: 005b lsls r3, r3, #1
  6200. 8002f70: 9301 str r3, [sp, #4]
  6201. 8002f72: 2300 movs r3, #0
  6202. 8002f74: 9300 str r3, [sp, #0]
  6203. 8002f76: 4603 mov r3, r0
  6204. 8002f78: 460a mov r2, r1
  6205. 8002f7a: 68b9 ldr r1, [r7, #8]
  6206. 8002f7c: 68f8 ldr r0, [r7, #12]
  6207. 8002f7e: f000 f876 bl 800306e <motorAction>
  6208. HAL_TIM_PWM_Stop (htim, channel1);
  6209. 8002f82: 79fb ldrb r3, [r7, #7]
  6210. 8002f84: 4619 mov r1, r3
  6211. 8002f86: 68f8 ldr r0, [r7, #12]
  6212. 8002f88: f00b ff72 bl 800ee70 <HAL_TIM_PWM_Stop>
  6213. HAL_TIM_PWM_Stop (htim, channel2);
  6214. 8002f8c: 79bb ldrb r3, [r7, #6]
  6215. 8002f8e: 4619 mov r1, r3
  6216. 8002f90: 68f8 ldr r0, [r7, #12]
  6217. 8002f92: f00b ff6d bl 800ee70 <HAL_TIM_PWM_Stop>
  6218. osTimerStop (motorTimerHandle);
  6219. 8002f96: 6a38 ldr r0, [r7, #32]
  6220. 8002f98: f010 fce0 bl 801395c <osTimerStop>
  6221. motorStatus = 0;
  6222. 8002f9c: 2300 movs r3, #0
  6223. 8002f9e: 617b str r3, [r7, #20]
  6224. 8002fa0: e05f b.n 8003062 <motorControl+0x266>
  6225. } else if (motorTimerPeriod == -1) {
  6226. 8002fa2: 6abb ldr r3, [r7, #40] @ 0x28
  6227. 8002fa4: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  6228. 8002fa8: d15b bne.n 8003062 <motorControl+0x266>
  6229. if (motorPWMPulse > 0) {
  6230. 8002faa: 6a7b ldr r3, [r7, #36] @ 0x24
  6231. 8002fac: 2b00 cmp r3, #0
  6232. 8002fae: dd2c ble.n 800300a <motorControl+0x20e>
  6233. // Forward
  6234. if (switchLimiterUpStat == 0) {
  6235. 8002fb0: f897 302c ldrb.w r3, [r7, #44] @ 0x2c
  6236. 8002fb4: 2b00 cmp r3, #0
  6237. 8002fb6: d11d bne.n 8002ff4 <motorControl+0x1f8>
  6238. setMotorYState = Forward;
  6239. 8002fb8: 2301 movs r3, #1
  6240. 8002fba: 74fb strb r3, [r7, #19]
  6241. motorAction (htim, motorTimerConfigOC, channel1, channel2, setMotorYState, abs (motorPWMPulse) * 10);
  6242. 8002fbc: 79f9 ldrb r1, [r7, #7]
  6243. 8002fbe: 79b8 ldrb r0, [r7, #6]
  6244. 8002fc0: 6a7b ldr r3, [r7, #36] @ 0x24
  6245. 8002fc2: ea83 72e3 eor.w r2, r3, r3, asr #31
  6246. 8002fc6: eba2 72e3 sub.w r2, r2, r3, asr #31
  6247. 8002fca: 4613 mov r3, r2
  6248. 8002fcc: 009b lsls r3, r3, #2
  6249. 8002fce: 4413 add r3, r2
  6250. 8002fd0: 005b lsls r3, r3, #1
  6251. 8002fd2: 9301 str r3, [sp, #4]
  6252. 8002fd4: 7cfb ldrb r3, [r7, #19]
  6253. 8002fd6: 9300 str r3, [sp, #0]
  6254. 8002fd8: 4603 mov r3, r0
  6255. 8002fda: 460a mov r2, r1
  6256. 8002fdc: 68b9 ldr r1, [r7, #8]
  6257. 8002fde: 68f8 ldr r0, [r7, #12]
  6258. 8002fe0: f000 f845 bl 800306e <motorAction>
  6259. HAL_TIM_PWM_Start (htim, channel1);
  6260. 8002fe4: 79fb ldrb r3, [r7, #7]
  6261. 8002fe6: 4619 mov r1, r3
  6262. 8002fe8: 68f8 ldr r0, [r7, #12]
  6263. 8002fea: f00b fe33 bl 800ec54 <HAL_TIM_PWM_Start>
  6264. motorStatus = 1;
  6265. 8002fee: 2301 movs r3, #1
  6266. 8002ff0: 617b str r3, [r7, #20]
  6267. 8002ff2: e004 b.n 8002ffe <motorControl+0x202>
  6268. } else {
  6269. HAL_TIM_PWM_Stop (htim, channel1);
  6270. 8002ff4: 79fb ldrb r3, [r7, #7]
  6271. 8002ff6: 4619 mov r1, r3
  6272. 8002ff8: 68f8 ldr r0, [r7, #12]
  6273. 8002ffa: f00b ff39 bl 800ee70 <HAL_TIM_PWM_Stop>
  6274. }
  6275. HAL_TIM_PWM_Stop (htim, channel2);
  6276. 8002ffe: 79bb ldrb r3, [r7, #6]
  6277. 8003000: 4619 mov r1, r3
  6278. 8003002: 68f8 ldr r0, [r7, #12]
  6279. 8003004: f00b ff34 bl 800ee70 <HAL_TIM_PWM_Stop>
  6280. 8003008: e02b b.n 8003062 <motorControl+0x266>
  6281. } else {
  6282. // Reverse
  6283. if (switchLimiterDownStat == 0) {
  6284. 800300a: f897 3030 ldrb.w r3, [r7, #48] @ 0x30
  6285. 800300e: 2b00 cmp r3, #0
  6286. 8003010: d11d bne.n 800304e <motorControl+0x252>
  6287. setMotorYState = Reverse;
  6288. 8003012: 2302 movs r3, #2
  6289. 8003014: 74fb strb r3, [r7, #19]
  6290. motorAction (htim, motorTimerConfigOC, channel1, channel2, setMotorYState, abs (motorPWMPulse) * 10);
  6291. 8003016: 79f9 ldrb r1, [r7, #7]
  6292. 8003018: 79b8 ldrb r0, [r7, #6]
  6293. 800301a: 6a7b ldr r3, [r7, #36] @ 0x24
  6294. 800301c: ea83 72e3 eor.w r2, r3, r3, asr #31
  6295. 8003020: eba2 72e3 sub.w r2, r2, r3, asr #31
  6296. 8003024: 4613 mov r3, r2
  6297. 8003026: 009b lsls r3, r3, #2
  6298. 8003028: 4413 add r3, r2
  6299. 800302a: 005b lsls r3, r3, #1
  6300. 800302c: 9301 str r3, [sp, #4]
  6301. 800302e: 7cfb ldrb r3, [r7, #19]
  6302. 8003030: 9300 str r3, [sp, #0]
  6303. 8003032: 4603 mov r3, r0
  6304. 8003034: 460a mov r2, r1
  6305. 8003036: 68b9 ldr r1, [r7, #8]
  6306. 8003038: 68f8 ldr r0, [r7, #12]
  6307. 800303a: f000 f818 bl 800306e <motorAction>
  6308. HAL_TIM_PWM_Start (htim, channel2);
  6309. 800303e: 79bb ldrb r3, [r7, #6]
  6310. 8003040: 4619 mov r1, r3
  6311. 8003042: 68f8 ldr r0, [r7, #12]
  6312. 8003044: f00b fe06 bl 800ec54 <HAL_TIM_PWM_Start>
  6313. motorStatus = 1;
  6314. 8003048: 2301 movs r3, #1
  6315. 800304a: 617b str r3, [r7, #20]
  6316. 800304c: e004 b.n 8003058 <motorControl+0x25c>
  6317. } else {
  6318. HAL_TIM_PWM_Stop (htim, channel2);
  6319. 800304e: 79bb ldrb r3, [r7, #6]
  6320. 8003050: 4619 mov r1, r3
  6321. 8003052: 68f8 ldr r0, [r7, #12]
  6322. 8003054: f00b ff0c bl 800ee70 <HAL_TIM_PWM_Stop>
  6323. }
  6324. HAL_TIM_PWM_Stop (htim, channel1);
  6325. 8003058: 79fb ldrb r3, [r7, #7]
  6326. 800305a: 4619 mov r1, r3
  6327. 800305c: 68f8 ldr r0, [r7, #12]
  6328. 800305e: f00b ff07 bl 800ee70 <HAL_TIM_PWM_Stop>
  6329. }
  6330. }
  6331. return motorStatus;
  6332. 8003062: 697b ldr r3, [r7, #20]
  6333. 8003064: b2db uxtb r3, r3
  6334. }
  6335. 8003066: 4618 mov r0, r3
  6336. 8003068: 3718 adds r7, #24
  6337. 800306a: 46bd mov sp, r7
  6338. 800306c: bd80 pop {r7, pc}
  6339. 0800306e <motorAction>:
  6340. void motorAction (TIM_HandleTypeDef* tim, TIM_OC_InitTypeDef* timerConf, uint32_t channel1, uint32_t channel2, MotorDriverState setState, uint32_t pulse) {
  6341. 800306e: b580 push {r7, lr}
  6342. 8003070: b084 sub sp, #16
  6343. 8003072: af00 add r7, sp, #0
  6344. 8003074: 60f8 str r0, [r7, #12]
  6345. 8003076: 60b9 str r1, [r7, #8]
  6346. 8003078: 607a str r2, [r7, #4]
  6347. 800307a: 603b str r3, [r7, #0]
  6348. timerConf->Pulse = pulse;
  6349. 800307c: 68bb ldr r3, [r7, #8]
  6350. 800307e: 69fa ldr r2, [r7, #28]
  6351. 8003080: 605a str r2, [r3, #4]
  6352. switch (setState) {
  6353. 8003082: 7e3b ldrb r3, [r7, #24]
  6354. 8003084: 2b02 cmp r3, #2
  6355. 8003086: dc02 bgt.n 800308e <motorAction+0x20>
  6356. 8003088: 2b00 cmp r3, #0
  6357. 800308a: da03 bge.n 8003094 <motorAction+0x26>
  6358. 800308c: e038 b.n 8003100 <motorAction+0x92>
  6359. 800308e: 2b03 cmp r3, #3
  6360. 8003090: d01b beq.n 80030ca <motorAction+0x5c>
  6361. 8003092: e035 b.n 8003100 <motorAction+0x92>
  6362. case Forward:
  6363. case Reverse:
  6364. case HiZ:
  6365. timerConf->OCPolarity = TIM_OCPOLARITY_HIGH;
  6366. 8003094: 68bb ldr r3, [r7, #8]
  6367. 8003096: 2200 movs r2, #0
  6368. 8003098: 609a str r2, [r3, #8]
  6369. if (HAL_TIM_PWM_ConfigChannel (tim, timerConf, channel1) != HAL_OK) {
  6370. 800309a: 687a ldr r2, [r7, #4]
  6371. 800309c: 68b9 ldr r1, [r7, #8]
  6372. 800309e: 68f8 ldr r0, [r7, #12]
  6373. 80030a0: f00c fad2 bl 800f648 <HAL_TIM_PWM_ConfigChannel>
  6374. 80030a4: 4603 mov r3, r0
  6375. 80030a6: 2b00 cmp r3, #0
  6376. 80030a8: d001 beq.n 80030ae <motorAction+0x40>
  6377. Error_Handler ();
  6378. 80030aa: f7fe feb1 bl 8001e10 <Error_Handler>
  6379. }
  6380. timerConf->OCPolarity = TIM_OCPOLARITY_HIGH;
  6381. 80030ae: 68bb ldr r3, [r7, #8]
  6382. 80030b0: 2200 movs r2, #0
  6383. 80030b2: 609a str r2, [r3, #8]
  6384. if (HAL_TIM_PWM_ConfigChannel (tim, timerConf, channel2) != HAL_OK) {
  6385. 80030b4: 683a ldr r2, [r7, #0]
  6386. 80030b6: 68b9 ldr r1, [r7, #8]
  6387. 80030b8: 68f8 ldr r0, [r7, #12]
  6388. 80030ba: f00c fac5 bl 800f648 <HAL_TIM_PWM_ConfigChannel>
  6389. 80030be: 4603 mov r3, r0
  6390. 80030c0: 2b00 cmp r3, #0
  6391. 80030c2: d038 beq.n 8003136 <motorAction+0xc8>
  6392. Error_Handler ();
  6393. 80030c4: f7fe fea4 bl 8001e10 <Error_Handler>
  6394. }
  6395. break;
  6396. 80030c8: e035 b.n 8003136 <motorAction+0xc8>
  6397. case Brake:
  6398. timerConf->OCPolarity = TIM_OCPOLARITY_LOW;
  6399. 80030ca: 68bb ldr r3, [r7, #8]
  6400. 80030cc: 2202 movs r2, #2
  6401. 80030ce: 609a str r2, [r3, #8]
  6402. if (HAL_TIM_PWM_ConfigChannel (tim, timerConf, channel1) != HAL_OK) {
  6403. 80030d0: 687a ldr r2, [r7, #4]
  6404. 80030d2: 68b9 ldr r1, [r7, #8]
  6405. 80030d4: 68f8 ldr r0, [r7, #12]
  6406. 80030d6: f00c fab7 bl 800f648 <HAL_TIM_PWM_ConfigChannel>
  6407. 80030da: 4603 mov r3, r0
  6408. 80030dc: 2b00 cmp r3, #0
  6409. 80030de: d001 beq.n 80030e4 <motorAction+0x76>
  6410. Error_Handler ();
  6411. 80030e0: f7fe fe96 bl 8001e10 <Error_Handler>
  6412. }
  6413. timerConf->OCPolarity = TIM_OCPOLARITY_LOW;
  6414. 80030e4: 68bb ldr r3, [r7, #8]
  6415. 80030e6: 2202 movs r2, #2
  6416. 80030e8: 609a str r2, [r3, #8]
  6417. if (HAL_TIM_PWM_ConfigChannel (tim, timerConf, channel2) != HAL_OK) {
  6418. 80030ea: 683a ldr r2, [r7, #0]
  6419. 80030ec: 68b9 ldr r1, [r7, #8]
  6420. 80030ee: 68f8 ldr r0, [r7, #12]
  6421. 80030f0: f00c faaa bl 800f648 <HAL_TIM_PWM_ConfigChannel>
  6422. 80030f4: 4603 mov r3, r0
  6423. 80030f6: 2b00 cmp r3, #0
  6424. 80030f8: d01f beq.n 800313a <motorAction+0xcc>
  6425. Error_Handler ();
  6426. 80030fa: f7fe fe89 bl 8001e10 <Error_Handler>
  6427. }
  6428. break;
  6429. 80030fe: e01c b.n 800313a <motorAction+0xcc>
  6430. default:
  6431. timerConf->OCPolarity = TIM_OCPOLARITY_HIGH;
  6432. 8003100: 68bb ldr r3, [r7, #8]
  6433. 8003102: 2200 movs r2, #0
  6434. 8003104: 609a str r2, [r3, #8]
  6435. if (HAL_TIM_PWM_ConfigChannel (tim, timerConf, channel1) != HAL_OK) {
  6436. 8003106: 687a ldr r2, [r7, #4]
  6437. 8003108: 68b9 ldr r1, [r7, #8]
  6438. 800310a: 68f8 ldr r0, [r7, #12]
  6439. 800310c: f00c fa9c bl 800f648 <HAL_TIM_PWM_ConfigChannel>
  6440. 8003110: 4603 mov r3, r0
  6441. 8003112: 2b00 cmp r3, #0
  6442. 8003114: d001 beq.n 800311a <motorAction+0xac>
  6443. Error_Handler ();
  6444. 8003116: f7fe fe7b bl 8001e10 <Error_Handler>
  6445. }
  6446. timerConf->OCPolarity = TIM_OCPOLARITY_HIGH;
  6447. 800311a: 68bb ldr r3, [r7, #8]
  6448. 800311c: 2200 movs r2, #0
  6449. 800311e: 609a str r2, [r3, #8]
  6450. if (HAL_TIM_PWM_ConfigChannel (tim, timerConf, channel2) != HAL_OK) {
  6451. 8003120: 683a ldr r2, [r7, #0]
  6452. 8003122: 68b9 ldr r1, [r7, #8]
  6453. 8003124: 68f8 ldr r0, [r7, #12]
  6454. 8003126: f00c fa8f bl 800f648 <HAL_TIM_PWM_ConfigChannel>
  6455. 800312a: 4603 mov r3, r0
  6456. 800312c: 2b00 cmp r3, #0
  6457. 800312e: d006 beq.n 800313e <motorAction+0xd0>
  6458. Error_Handler ();
  6459. 8003130: f7fe fe6e bl 8001e10 <Error_Handler>
  6460. }
  6461. break;
  6462. 8003134: e003 b.n 800313e <motorAction+0xd0>
  6463. break;
  6464. 8003136: bf00 nop
  6465. 8003138: e002 b.n 8003140 <motorAction+0xd2>
  6466. break;
  6467. 800313a: bf00 nop
  6468. 800313c: e000 b.n 8003140 <motorAction+0xd2>
  6469. break;
  6470. 800313e: bf00 nop
  6471. }
  6472. }
  6473. 8003140: bf00 nop
  6474. 8003142: 3710 adds r7, #16
  6475. 8003144: 46bd mov sp, r7
  6476. 8003146: bd80 pop {r7, pc}
  6477. 08003148 <WriteDataToBuffer>:
  6478. buff[newBuffPos++] = (uint8_t)((uData >> (i * 8)) & 0xFF);
  6479. }
  6480. *buffPos = newBuffPos;
  6481. }
  6482. void WriteDataToBuffer (uint8_t* buff, uint16_t* buffPos, void* data, uint8_t dataSize) {
  6483. 8003148: b480 push {r7}
  6484. 800314a: b089 sub sp, #36 @ 0x24
  6485. 800314c: af00 add r7, sp, #0
  6486. 800314e: 60f8 str r0, [r7, #12]
  6487. 8003150: 60b9 str r1, [r7, #8]
  6488. 8003152: 607a str r2, [r7, #4]
  6489. 8003154: 70fb strb r3, [r7, #3]
  6490. uint32_t* uDataPtr = data;
  6491. 8003156: 687b ldr r3, [r7, #4]
  6492. 8003158: 61bb str r3, [r7, #24]
  6493. uint32_t uData = *uDataPtr;
  6494. 800315a: 69bb ldr r3, [r7, #24]
  6495. 800315c: 681b ldr r3, [r3, #0]
  6496. 800315e: 617b str r3, [r7, #20]
  6497. uint8_t i = 0;
  6498. 8003160: 2300 movs r3, #0
  6499. 8003162: 77fb strb r3, [r7, #31]
  6500. uint8_t newBuffPos = *buffPos;
  6501. 8003164: 68bb ldr r3, [r7, #8]
  6502. 8003166: 881b ldrh r3, [r3, #0]
  6503. 8003168: 77bb strb r3, [r7, #30]
  6504. for (i = 0; i < dataSize; i++) {
  6505. 800316a: 2300 movs r3, #0
  6506. 800316c: 77fb strb r3, [r7, #31]
  6507. 800316e: e00e b.n 800318e <WriteDataToBuffer+0x46>
  6508. buff[newBuffPos++] = (uint8_t)((uData >> (i * 8)) & 0xFF);
  6509. 8003170: 7ffb ldrb r3, [r7, #31]
  6510. 8003172: 00db lsls r3, r3, #3
  6511. 8003174: 697a ldr r2, [r7, #20]
  6512. 8003176: 40da lsrs r2, r3
  6513. 8003178: 7fbb ldrb r3, [r7, #30]
  6514. 800317a: 1c59 adds r1, r3, #1
  6515. 800317c: 77b9 strb r1, [r7, #30]
  6516. 800317e: 4619 mov r1, r3
  6517. 8003180: 68fb ldr r3, [r7, #12]
  6518. 8003182: 440b add r3, r1
  6519. 8003184: b2d2 uxtb r2, r2
  6520. 8003186: 701a strb r2, [r3, #0]
  6521. for (i = 0; i < dataSize; i++) {
  6522. 8003188: 7ffb ldrb r3, [r7, #31]
  6523. 800318a: 3301 adds r3, #1
  6524. 800318c: 77fb strb r3, [r7, #31]
  6525. 800318e: 7ffa ldrb r2, [r7, #31]
  6526. 8003190: 78fb ldrb r3, [r7, #3]
  6527. 8003192: 429a cmp r2, r3
  6528. 8003194: d3ec bcc.n 8003170 <WriteDataToBuffer+0x28>
  6529. }
  6530. *buffPos = newBuffPos;
  6531. 8003196: 7fbb ldrb r3, [r7, #30]
  6532. 8003198: b29a uxth r2, r3
  6533. 800319a: 68bb ldr r3, [r7, #8]
  6534. 800319c: 801a strh r2, [r3, #0]
  6535. }
  6536. 800319e: bf00 nop
  6537. 80031a0: 3724 adds r7, #36 @ 0x24
  6538. 80031a2: 46bd mov sp, r7
  6539. 80031a4: f85d 7b04 ldr.w r7, [sp], #4
  6540. 80031a8: 4770 bx lr
  6541. 080031aa <ReadWordFromBufer>:
  6542. *data = CONVERT_BYTES_TO_SHORT_WORD(&buff[*buffPos]);
  6543. *buffPos += sizeof(uint16_t);
  6544. }
  6545. void ReadWordFromBufer(uint8_t* buff, uint16_t* buffPos, uint32_t* data)
  6546. {
  6547. 80031aa: b480 push {r7}
  6548. 80031ac: b085 sub sp, #20
  6549. 80031ae: af00 add r7, sp, #0
  6550. 80031b0: 60f8 str r0, [r7, #12]
  6551. 80031b2: 60b9 str r1, [r7, #8]
  6552. 80031b4: 607a str r2, [r7, #4]
  6553. *data = CONVERT_BYTES_TO_WORD(&buff[*buffPos]);
  6554. 80031b6: 68bb ldr r3, [r7, #8]
  6555. 80031b8: 881b ldrh r3, [r3, #0]
  6556. 80031ba: 3303 adds r3, #3
  6557. 80031bc: 68fa ldr r2, [r7, #12]
  6558. 80031be: 4413 add r3, r2
  6559. 80031c0: 781b ldrb r3, [r3, #0]
  6560. 80031c2: 061a lsls r2, r3, #24
  6561. 80031c4: 68bb ldr r3, [r7, #8]
  6562. 80031c6: 881b ldrh r3, [r3, #0]
  6563. 80031c8: 3302 adds r3, #2
  6564. 80031ca: 68f9 ldr r1, [r7, #12]
  6565. 80031cc: 440b add r3, r1
  6566. 80031ce: 781b ldrb r3, [r3, #0]
  6567. 80031d0: 041b lsls r3, r3, #16
  6568. 80031d2: 431a orrs r2, r3
  6569. 80031d4: 68bb ldr r3, [r7, #8]
  6570. 80031d6: 881b ldrh r3, [r3, #0]
  6571. 80031d8: 3301 adds r3, #1
  6572. 80031da: 68f9 ldr r1, [r7, #12]
  6573. 80031dc: 440b add r3, r1
  6574. 80031de: 781b ldrb r3, [r3, #0]
  6575. 80031e0: 021b lsls r3, r3, #8
  6576. 80031e2: 4313 orrs r3, r2
  6577. 80031e4: 68ba ldr r2, [r7, #8]
  6578. 80031e6: 8812 ldrh r2, [r2, #0]
  6579. 80031e8: 4611 mov r1, r2
  6580. 80031ea: 68fa ldr r2, [r7, #12]
  6581. 80031ec: 440a add r2, r1
  6582. 80031ee: 7812 ldrb r2, [r2, #0]
  6583. 80031f0: 4313 orrs r3, r2
  6584. 80031f2: 461a mov r2, r3
  6585. 80031f4: 687b ldr r3, [r7, #4]
  6586. 80031f6: 601a str r2, [r3, #0]
  6587. *buffPos += sizeof(uint32_t);
  6588. 80031f8: 68bb ldr r3, [r7, #8]
  6589. 80031fa: 881b ldrh r3, [r3, #0]
  6590. 80031fc: 3304 adds r3, #4
  6591. 80031fe: b29a uxth r2, r3
  6592. 8003200: 68bb ldr r3, [r7, #8]
  6593. 8003202: 801a strh r2, [r3, #0]
  6594. }
  6595. 8003204: bf00 nop
  6596. 8003206: 3714 adds r7, #20
  6597. 8003208: 46bd mov sp, r7
  6598. 800320a: f85d 7b04 ldr.w r7, [sp], #4
  6599. 800320e: 4770 bx lr
  6600. 08003210 <PrepareRespFrame>:
  6601. txBuffer[txBufferPos++] = GET_SHORT_WORD_SECOND_BYTE (crc);
  6602. return txBufferPos;
  6603. }
  6604. uint16_t PrepareRespFrame (uint8_t* txBuffer, uint16_t frameId, SerialProtocolCommands frameCommand, SerialProtocolRespStatus respStatus, uint8_t* dataBuffer, uint16_t dataLength) {
  6605. 8003210: b580 push {r7, lr}
  6606. 8003212: b084 sub sp, #16
  6607. 8003214: af00 add r7, sp, #0
  6608. 8003216: 6078 str r0, [r7, #4]
  6609. 8003218: 4608 mov r0, r1
  6610. 800321a: 4611 mov r1, r2
  6611. 800321c: 461a mov r2, r3
  6612. 800321e: 4603 mov r3, r0
  6613. 8003220: 807b strh r3, [r7, #2]
  6614. 8003222: 460b mov r3, r1
  6615. 8003224: 707b strb r3, [r7, #1]
  6616. 8003226: 4613 mov r3, r2
  6617. 8003228: 703b strb r3, [r7, #0]
  6618. uint16_t crc = 0;
  6619. 800322a: 2300 movs r3, #0
  6620. 800322c: 81bb strh r3, [r7, #12]
  6621. uint16_t txBufferPos = 0;
  6622. 800322e: 2300 movs r3, #0
  6623. 8003230: 81fb strh r3, [r7, #14]
  6624. uint16_t frameCmd = ((uint16_t)frameCommand) | 0x8000; // MSB set means response
  6625. 8003232: 787b ldrb r3, [r7, #1]
  6626. 8003234: b21a sxth r2, r3
  6627. 8003236: 4b43 ldr r3, [pc, #268] @ (8003344 <PrepareRespFrame+0x134>)
  6628. 8003238: 4313 orrs r3, r2
  6629. 800323a: b21b sxth r3, r3
  6630. 800323c: 817b strh r3, [r7, #10]
  6631. memset (txBuffer, 0x00, dataLength);
  6632. 800323e: 8bbb ldrh r3, [r7, #28]
  6633. 8003240: 461a mov r2, r3
  6634. 8003242: 2100 movs r1, #0
  6635. 8003244: 6878 ldr r0, [r7, #4]
  6636. 8003246: f014 fc86 bl 8017b56 <memset>
  6637. txBuffer[txBufferPos++] = FRAME_INDICATOR;
  6638. 800324a: 89fb ldrh r3, [r7, #14]
  6639. 800324c: 1c5a adds r2, r3, #1
  6640. 800324e: 81fa strh r2, [r7, #14]
  6641. 8003250: 461a mov r2, r3
  6642. 8003252: 687b ldr r3, [r7, #4]
  6643. 8003254: 4413 add r3, r2
  6644. 8003256: 22aa movs r2, #170 @ 0xaa
  6645. 8003258: 701a strb r2, [r3, #0]
  6646. txBuffer[txBufferPos++] = GET_SHORT_WORD_FIRST_BYTE (frameId);
  6647. 800325a: 89fb ldrh r3, [r7, #14]
  6648. 800325c: 1c5a adds r2, r3, #1
  6649. 800325e: 81fa strh r2, [r7, #14]
  6650. 8003260: 461a mov r2, r3
  6651. 8003262: 687b ldr r3, [r7, #4]
  6652. 8003264: 4413 add r3, r2
  6653. 8003266: 887a ldrh r2, [r7, #2]
  6654. 8003268: b2d2 uxtb r2, r2
  6655. 800326a: 701a strb r2, [r3, #0]
  6656. txBuffer[txBufferPos++] = GET_SHORT_WORD_SECOND_BYTE (frameId);
  6657. 800326c: 887b ldrh r3, [r7, #2]
  6658. 800326e: 0a1b lsrs r3, r3, #8
  6659. 8003270: b29a uxth r2, r3
  6660. 8003272: 89fb ldrh r3, [r7, #14]
  6661. 8003274: 1c59 adds r1, r3, #1
  6662. 8003276: 81f9 strh r1, [r7, #14]
  6663. 8003278: 4619 mov r1, r3
  6664. 800327a: 687b ldr r3, [r7, #4]
  6665. 800327c: 440b add r3, r1
  6666. 800327e: b2d2 uxtb r2, r2
  6667. 8003280: 701a strb r2, [r3, #0]
  6668. txBuffer[txBufferPos++] = GET_SHORT_WORD_FIRST_BYTE (frameCmd);
  6669. 8003282: 89fb ldrh r3, [r7, #14]
  6670. 8003284: 1c5a adds r2, r3, #1
  6671. 8003286: 81fa strh r2, [r7, #14]
  6672. 8003288: 461a mov r2, r3
  6673. 800328a: 687b ldr r3, [r7, #4]
  6674. 800328c: 4413 add r3, r2
  6675. 800328e: 897a ldrh r2, [r7, #10]
  6676. 8003290: b2d2 uxtb r2, r2
  6677. 8003292: 701a strb r2, [r3, #0]
  6678. txBuffer[txBufferPos++] = GET_SHORT_WORD_SECOND_BYTE (frameCmd);
  6679. 8003294: 897b ldrh r3, [r7, #10]
  6680. 8003296: 0a1b lsrs r3, r3, #8
  6681. 8003298: b29a uxth r2, r3
  6682. 800329a: 89fb ldrh r3, [r7, #14]
  6683. 800329c: 1c59 adds r1, r3, #1
  6684. 800329e: 81f9 strh r1, [r7, #14]
  6685. 80032a0: 4619 mov r1, r3
  6686. 80032a2: 687b ldr r3, [r7, #4]
  6687. 80032a4: 440b add r3, r1
  6688. 80032a6: b2d2 uxtb r2, r2
  6689. 80032a8: 701a strb r2, [r3, #0]
  6690. txBuffer[txBufferPos++] = GET_SHORT_WORD_FIRST_BYTE (dataLength);
  6691. 80032aa: 89fb ldrh r3, [r7, #14]
  6692. 80032ac: 1c5a adds r2, r3, #1
  6693. 80032ae: 81fa strh r2, [r7, #14]
  6694. 80032b0: 461a mov r2, r3
  6695. 80032b2: 687b ldr r3, [r7, #4]
  6696. 80032b4: 4413 add r3, r2
  6697. 80032b6: 8bba ldrh r2, [r7, #28]
  6698. 80032b8: b2d2 uxtb r2, r2
  6699. 80032ba: 701a strb r2, [r3, #0]
  6700. txBuffer[txBufferPos++] = GET_SHORT_WORD_SECOND_BYTE (dataLength);
  6701. 80032bc: 8bbb ldrh r3, [r7, #28]
  6702. 80032be: 0a1b lsrs r3, r3, #8
  6703. 80032c0: b29a uxth r2, r3
  6704. 80032c2: 89fb ldrh r3, [r7, #14]
  6705. 80032c4: 1c59 adds r1, r3, #1
  6706. 80032c6: 81f9 strh r1, [r7, #14]
  6707. 80032c8: 4619 mov r1, r3
  6708. 80032ca: 687b ldr r3, [r7, #4]
  6709. 80032cc: 440b add r3, r1
  6710. 80032ce: b2d2 uxtb r2, r2
  6711. 80032d0: 701a strb r2, [r3, #0]
  6712. txBuffer[txBufferPos++] = (uint8_t)respStatus;
  6713. 80032d2: 89fb ldrh r3, [r7, #14]
  6714. 80032d4: 1c5a adds r2, r3, #1
  6715. 80032d6: 81fa strh r2, [r7, #14]
  6716. 80032d8: 461a mov r2, r3
  6717. 80032da: 687b ldr r3, [r7, #4]
  6718. 80032dc: 4413 add r3, r2
  6719. 80032de: 783a ldrb r2, [r7, #0]
  6720. 80032e0: 701a strb r2, [r3, #0]
  6721. if (dataLength > 0) {
  6722. 80032e2: 8bbb ldrh r3, [r7, #28]
  6723. 80032e4: 2b00 cmp r3, #0
  6724. 80032e6: d00b beq.n 8003300 <PrepareRespFrame+0xf0>
  6725. memcpy (&txBuffer[txBufferPos], dataBuffer, dataLength);
  6726. 80032e8: 89fb ldrh r3, [r7, #14]
  6727. 80032ea: 687a ldr r2, [r7, #4]
  6728. 80032ec: 4413 add r3, r2
  6729. 80032ee: 8bba ldrh r2, [r7, #28]
  6730. 80032f0: 69b9 ldr r1, [r7, #24]
  6731. 80032f2: 4618 mov r0, r3
  6732. 80032f4: f014 fd01 bl 8017cfa <memcpy>
  6733. txBufferPos += dataLength;
  6734. 80032f8: 89fa ldrh r2, [r7, #14]
  6735. 80032fa: 8bbb ldrh r3, [r7, #28]
  6736. 80032fc: 4413 add r3, r2
  6737. 80032fe: 81fb strh r3, [r7, #14]
  6738. }
  6739. crc = HAL_CRC_Calculate (&hcrc, (uint32_t*)txBuffer, txBufferPos);
  6740. 8003300: 89fb ldrh r3, [r7, #14]
  6741. 8003302: 461a mov r2, r3
  6742. 8003304: 6879 ldr r1, [r7, #4]
  6743. 8003306: 4810 ldr r0, [pc, #64] @ (8003348 <PrepareRespFrame+0x138>)
  6744. 8003308: f004 f812 bl 8007330 <HAL_CRC_Calculate>
  6745. 800330c: 4603 mov r3, r0
  6746. 800330e: 81bb strh r3, [r7, #12]
  6747. txBuffer[txBufferPos++] = GET_SHORT_WORD_FIRST_BYTE (crc);
  6748. 8003310: 89fb ldrh r3, [r7, #14]
  6749. 8003312: 1c5a adds r2, r3, #1
  6750. 8003314: 81fa strh r2, [r7, #14]
  6751. 8003316: 461a mov r2, r3
  6752. 8003318: 687b ldr r3, [r7, #4]
  6753. 800331a: 4413 add r3, r2
  6754. 800331c: 89ba ldrh r2, [r7, #12]
  6755. 800331e: b2d2 uxtb r2, r2
  6756. 8003320: 701a strb r2, [r3, #0]
  6757. txBuffer[txBufferPos++] = GET_SHORT_WORD_SECOND_BYTE (crc);
  6758. 8003322: 89bb ldrh r3, [r7, #12]
  6759. 8003324: 0a1b lsrs r3, r3, #8
  6760. 8003326: b29a uxth r2, r3
  6761. 8003328: 89fb ldrh r3, [r7, #14]
  6762. 800332a: 1c59 adds r1, r3, #1
  6763. 800332c: 81f9 strh r1, [r7, #14]
  6764. 800332e: 4619 mov r1, r3
  6765. 8003330: 687b ldr r3, [r7, #4]
  6766. 8003332: 440b add r3, r1
  6767. 8003334: b2d2 uxtb r2, r2
  6768. 8003336: 701a strb r2, [r3, #0]
  6769. return txBufferPos;
  6770. 8003338: 89fb ldrh r3, [r7, #14]
  6771. }
  6772. 800333a: 4618 mov r0, r3
  6773. 800333c: 3710 adds r7, #16
  6774. 800333e: 46bd mov sp, r7
  6775. 8003340: bd80 pop {r7, pc}
  6776. 8003342: bf00 nop
  6777. 8003344: ffff8000 .word 0xffff8000
  6778. 8003348: 24000400 .word 0x24000400
  6779. 0800334c <HAL_MspInit>:
  6780. void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
  6781. /**
  6782. * Initializes the Global MSP.
  6783. */
  6784. void HAL_MspInit(void)
  6785. {
  6786. 800334c: b580 push {r7, lr}
  6787. 800334e: b086 sub sp, #24
  6788. 8003350: af00 add r7, sp, #0
  6789. /* USER CODE BEGIN MspInit 0 */
  6790. /* USER CODE END MspInit 0 */
  6791. PWREx_AVDTypeDef sConfigAVD = {0};
  6792. 8003352: f107 0310 add.w r3, r7, #16
  6793. 8003356: 2200 movs r2, #0
  6794. 8003358: 601a str r2, [r3, #0]
  6795. 800335a: 605a str r2, [r3, #4]
  6796. PWR_PVDTypeDef sConfigPVD = {0};
  6797. 800335c: f107 0308 add.w r3, r7, #8
  6798. 8003360: 2200 movs r2, #0
  6799. 8003362: 601a str r2, [r3, #0]
  6800. 8003364: 605a str r2, [r3, #4]
  6801. __HAL_RCC_SYSCFG_CLK_ENABLE();
  6802. 8003366: 4b26 ldr r3, [pc, #152] @ (8003400 <HAL_MspInit+0xb4>)
  6803. 8003368: f8d3 30f4 ldr.w r3, [r3, #244] @ 0xf4
  6804. 800336c: 4a24 ldr r2, [pc, #144] @ (8003400 <HAL_MspInit+0xb4>)
  6805. 800336e: f043 0302 orr.w r3, r3, #2
  6806. 8003372: f8c2 30f4 str.w r3, [r2, #244] @ 0xf4
  6807. 8003376: 4b22 ldr r3, [pc, #136] @ (8003400 <HAL_MspInit+0xb4>)
  6808. 8003378: f8d3 30f4 ldr.w r3, [r3, #244] @ 0xf4
  6809. 800337c: f003 0302 and.w r3, r3, #2
  6810. 8003380: 607b str r3, [r7, #4]
  6811. 8003382: 687b ldr r3, [r7, #4]
  6812. /* System interrupt init*/
  6813. /* PendSV_IRQn interrupt configuration */
  6814. HAL_NVIC_SetPriority(PendSV_IRQn, 15, 0);
  6815. 8003384: 2200 movs r2, #0
  6816. 8003386: 210f movs r1, #15
  6817. 8003388: f06f 0001 mvn.w r0, #1
  6818. 800338c: f003 fecc bl 8007128 <HAL_NVIC_SetPriority>
  6819. /* Peripheral interrupt init */
  6820. /* RCC_IRQn interrupt configuration */
  6821. HAL_NVIC_SetPriority(RCC_IRQn, 5, 0);
  6822. 8003390: 2200 movs r2, #0
  6823. 8003392: 2105 movs r1, #5
  6824. 8003394: 2005 movs r0, #5
  6825. 8003396: f003 fec7 bl 8007128 <HAL_NVIC_SetPriority>
  6826. HAL_NVIC_EnableIRQ(RCC_IRQn);
  6827. 800339a: 2005 movs r0, #5
  6828. 800339c: f003 fede bl 800715c <HAL_NVIC_EnableIRQ>
  6829. /** AVD Configuration
  6830. */
  6831. sConfigAVD.AVDLevel = PWR_AVDLEVEL_3;
  6832. 80033a0: f44f 23c0 mov.w r3, #393216 @ 0x60000
  6833. 80033a4: 613b str r3, [r7, #16]
  6834. sConfigAVD.Mode = PWR_AVD_MODE_NORMAL;
  6835. 80033a6: 2300 movs r3, #0
  6836. 80033a8: 617b str r3, [r7, #20]
  6837. HAL_PWREx_ConfigAVD(&sConfigAVD);
  6838. 80033aa: f107 0310 add.w r3, r7, #16
  6839. 80033ae: 4618 mov r0, r3
  6840. 80033b0: f007 fcc6 bl 800ad40 <HAL_PWREx_ConfigAVD>
  6841. /** Enable the AVD Output
  6842. */
  6843. HAL_PWREx_EnableAVD();
  6844. 80033b4: f007 fd3a bl 800ae2c <HAL_PWREx_EnableAVD>
  6845. /** PVD Configuration
  6846. */
  6847. sConfigPVD.PVDLevel = PWR_PVDLEVEL_6;
  6848. 80033b8: 23c0 movs r3, #192 @ 0xc0
  6849. 80033ba: 60bb str r3, [r7, #8]
  6850. sConfigPVD.Mode = PWR_PVD_MODE_NORMAL;
  6851. 80033bc: 2300 movs r3, #0
  6852. 80033be: 60fb str r3, [r7, #12]
  6853. HAL_PWR_ConfigPVD(&sConfigPVD);
  6854. 80033c0: f107 0308 add.w r3, r7, #8
  6855. 80033c4: 4618 mov r0, r3
  6856. 80033c6: f007 fbf7 bl 800abb8 <HAL_PWR_ConfigPVD>
  6857. /** Enable the PVD Output
  6858. */
  6859. HAL_PWR_EnablePVD();
  6860. 80033ca: f007 fc6f bl 800acac <HAL_PWR_EnablePVD>
  6861. /** Enable the VREF clock
  6862. */
  6863. __HAL_RCC_VREF_CLK_ENABLE();
  6864. 80033ce: 4b0c ldr r3, [pc, #48] @ (8003400 <HAL_MspInit+0xb4>)
  6865. 80033d0: f8d3 30f4 ldr.w r3, [r3, #244] @ 0xf4
  6866. 80033d4: 4a0a ldr r2, [pc, #40] @ (8003400 <HAL_MspInit+0xb4>)
  6867. 80033d6: f443 4300 orr.w r3, r3, #32768 @ 0x8000
  6868. 80033da: f8c2 30f4 str.w r3, [r2, #244] @ 0xf4
  6869. 80033de: 4b08 ldr r3, [pc, #32] @ (8003400 <HAL_MspInit+0xb4>)
  6870. 80033e0: f8d3 30f4 ldr.w r3, [r3, #244] @ 0xf4
  6871. 80033e4: f403 4300 and.w r3, r3, #32768 @ 0x8000
  6872. 80033e8: 603b str r3, [r7, #0]
  6873. 80033ea: 683b ldr r3, [r7, #0]
  6874. /** Disable the Internal Voltage Reference buffer
  6875. */
  6876. HAL_SYSCFG_DisableVREFBUF();
  6877. 80033ec: f002 f822 bl 8005434 <HAL_SYSCFG_DisableVREFBUF>
  6878. /** Configure the internal voltage reference buffer high impedance mode
  6879. */
  6880. HAL_SYSCFG_VREFBUF_HighImpedanceConfig(SYSCFG_VREFBUF_HIGH_IMPEDANCE_ENABLE);
  6881. 80033f0: 2002 movs r0, #2
  6882. 80033f2: f002 f80b bl 800540c <HAL_SYSCFG_VREFBUF_HighImpedanceConfig>
  6883. /* USER CODE BEGIN MspInit 1 */
  6884. /* USER CODE END MspInit 1 */
  6885. }
  6886. 80033f6: bf00 nop
  6887. 80033f8: 3718 adds r7, #24
  6888. 80033fa: 46bd mov sp, r7
  6889. 80033fc: bd80 pop {r7, pc}
  6890. 80033fe: bf00 nop
  6891. 8003400: 58024400 .word 0x58024400
  6892. 08003404 <HAL_ADC_MspInit>:
  6893. * This function configures the hardware resources used in this example
  6894. * @param hadc: ADC handle pointer
  6895. * @retval None
  6896. */
  6897. void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
  6898. {
  6899. 8003404: b580 push {r7, lr}
  6900. 8003406: b092 sub sp, #72 @ 0x48
  6901. 8003408: af00 add r7, sp, #0
  6902. 800340a: 6078 str r0, [r7, #4]
  6903. GPIO_InitTypeDef GPIO_InitStruct = {0};
  6904. 800340c: f107 0334 add.w r3, r7, #52 @ 0x34
  6905. 8003410: 2200 movs r2, #0
  6906. 8003412: 601a str r2, [r3, #0]
  6907. 8003414: 605a str r2, [r3, #4]
  6908. 8003416: 609a str r2, [r3, #8]
  6909. 8003418: 60da str r2, [r3, #12]
  6910. 800341a: 611a str r2, [r3, #16]
  6911. if(hadc->Instance==ADC1)
  6912. 800341c: 687b ldr r3, [r7, #4]
  6913. 800341e: 681b ldr r3, [r3, #0]
  6914. 8003420: 4a9d ldr r2, [pc, #628] @ (8003698 <HAL_ADC_MspInit+0x294>)
  6915. 8003422: 4293 cmp r3, r2
  6916. 8003424: f040 8099 bne.w 800355a <HAL_ADC_MspInit+0x156>
  6917. {
  6918. /* USER CODE BEGIN ADC1_MspInit 0 */
  6919. /* USER CODE END ADC1_MspInit 0 */
  6920. /* Peripheral clock enable */
  6921. HAL_RCC_ADC12_CLK_ENABLED++;
  6922. 8003428: 4b9c ldr r3, [pc, #624] @ (800369c <HAL_ADC_MspInit+0x298>)
  6923. 800342a: 681b ldr r3, [r3, #0]
  6924. 800342c: 3301 adds r3, #1
  6925. 800342e: 4a9b ldr r2, [pc, #620] @ (800369c <HAL_ADC_MspInit+0x298>)
  6926. 8003430: 6013 str r3, [r2, #0]
  6927. if(HAL_RCC_ADC12_CLK_ENABLED==1){
  6928. 8003432: 4b9a ldr r3, [pc, #616] @ (800369c <HAL_ADC_MspInit+0x298>)
  6929. 8003434: 681b ldr r3, [r3, #0]
  6930. 8003436: 2b01 cmp r3, #1
  6931. 8003438: d10e bne.n 8003458 <HAL_ADC_MspInit+0x54>
  6932. __HAL_RCC_ADC12_CLK_ENABLE();
  6933. 800343a: 4b99 ldr r3, [pc, #612] @ (80036a0 <HAL_ADC_MspInit+0x29c>)
  6934. 800343c: f8d3 30d8 ldr.w r3, [r3, #216] @ 0xd8
  6935. 8003440: 4a97 ldr r2, [pc, #604] @ (80036a0 <HAL_ADC_MspInit+0x29c>)
  6936. 8003442: f043 0320 orr.w r3, r3, #32
  6937. 8003446: f8c2 30d8 str.w r3, [r2, #216] @ 0xd8
  6938. 800344a: 4b95 ldr r3, [pc, #596] @ (80036a0 <HAL_ADC_MspInit+0x29c>)
  6939. 800344c: f8d3 30d8 ldr.w r3, [r3, #216] @ 0xd8
  6940. 8003450: f003 0320 and.w r3, r3, #32
  6941. 8003454: 633b str r3, [r7, #48] @ 0x30
  6942. 8003456: 6b3b ldr r3, [r7, #48] @ 0x30
  6943. }
  6944. __HAL_RCC_GPIOA_CLK_ENABLE();
  6945. 8003458: 4b91 ldr r3, [pc, #580] @ (80036a0 <HAL_ADC_MspInit+0x29c>)
  6946. 800345a: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  6947. 800345e: 4a90 ldr r2, [pc, #576] @ (80036a0 <HAL_ADC_MspInit+0x29c>)
  6948. 8003460: f043 0301 orr.w r3, r3, #1
  6949. 8003464: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  6950. 8003468: 4b8d ldr r3, [pc, #564] @ (80036a0 <HAL_ADC_MspInit+0x29c>)
  6951. 800346a: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  6952. 800346e: f003 0301 and.w r3, r3, #1
  6953. 8003472: 62fb str r3, [r7, #44] @ 0x2c
  6954. 8003474: 6afb ldr r3, [r7, #44] @ 0x2c
  6955. __HAL_RCC_GPIOC_CLK_ENABLE();
  6956. 8003476: 4b8a ldr r3, [pc, #552] @ (80036a0 <HAL_ADC_MspInit+0x29c>)
  6957. 8003478: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  6958. 800347c: 4a88 ldr r2, [pc, #544] @ (80036a0 <HAL_ADC_MspInit+0x29c>)
  6959. 800347e: f043 0304 orr.w r3, r3, #4
  6960. 8003482: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  6961. 8003486: 4b86 ldr r3, [pc, #536] @ (80036a0 <HAL_ADC_MspInit+0x29c>)
  6962. 8003488: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  6963. 800348c: f003 0304 and.w r3, r3, #4
  6964. 8003490: 62bb str r3, [r7, #40] @ 0x28
  6965. 8003492: 6abb ldr r3, [r7, #40] @ 0x28
  6966. __HAL_RCC_GPIOB_CLK_ENABLE();
  6967. 8003494: 4b82 ldr r3, [pc, #520] @ (80036a0 <HAL_ADC_MspInit+0x29c>)
  6968. 8003496: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  6969. 800349a: 4a81 ldr r2, [pc, #516] @ (80036a0 <HAL_ADC_MspInit+0x29c>)
  6970. 800349c: f043 0302 orr.w r3, r3, #2
  6971. 80034a0: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  6972. 80034a4: 4b7e ldr r3, [pc, #504] @ (80036a0 <HAL_ADC_MspInit+0x29c>)
  6973. 80034a6: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  6974. 80034aa: f003 0302 and.w r3, r3, #2
  6975. 80034ae: 627b str r3, [r7, #36] @ 0x24
  6976. 80034b0: 6a7b ldr r3, [r7, #36] @ 0x24
  6977. PA3 ------> ADC1_INP15
  6978. PA7 ------> ADC1_INP7
  6979. PC5 ------> ADC1_INP8
  6980. PB0 ------> ADC1_INP9
  6981. */
  6982. GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
  6983. 80034b2: 238f movs r3, #143 @ 0x8f
  6984. 80034b4: 637b str r3, [r7, #52] @ 0x34
  6985. |GPIO_PIN_7;
  6986. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  6987. 80034b6: 2303 movs r3, #3
  6988. 80034b8: 63bb str r3, [r7, #56] @ 0x38
  6989. GPIO_InitStruct.Pull = GPIO_NOPULL;
  6990. 80034ba: 2300 movs r3, #0
  6991. 80034bc: 63fb str r3, [r7, #60] @ 0x3c
  6992. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  6993. 80034be: f107 0334 add.w r3, r7, #52 @ 0x34
  6994. 80034c2: 4619 mov r1, r3
  6995. 80034c4: 4877 ldr r0, [pc, #476] @ (80036a4 <HAL_ADC_MspInit+0x2a0>)
  6996. 80034c6: f007 f961 bl 800a78c <HAL_GPIO_Init>
  6997. GPIO_InitStruct.Pin = GPIO_PIN_5;
  6998. 80034ca: 2320 movs r3, #32
  6999. 80034cc: 637b str r3, [r7, #52] @ 0x34
  7000. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  7001. 80034ce: 2303 movs r3, #3
  7002. 80034d0: 63bb str r3, [r7, #56] @ 0x38
  7003. GPIO_InitStruct.Pull = GPIO_NOPULL;
  7004. 80034d2: 2300 movs r3, #0
  7005. 80034d4: 63fb str r3, [r7, #60] @ 0x3c
  7006. HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  7007. 80034d6: f107 0334 add.w r3, r7, #52 @ 0x34
  7008. 80034da: 4619 mov r1, r3
  7009. 80034dc: 4872 ldr r0, [pc, #456] @ (80036a8 <HAL_ADC_MspInit+0x2a4>)
  7010. 80034de: f007 f955 bl 800a78c <HAL_GPIO_Init>
  7011. GPIO_InitStruct.Pin = GPIO_PIN_0;
  7012. 80034e2: 2301 movs r3, #1
  7013. 80034e4: 637b str r3, [r7, #52] @ 0x34
  7014. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  7015. 80034e6: 2303 movs r3, #3
  7016. 80034e8: 63bb str r3, [r7, #56] @ 0x38
  7017. GPIO_InitStruct.Pull = GPIO_NOPULL;
  7018. 80034ea: 2300 movs r3, #0
  7019. 80034ec: 63fb str r3, [r7, #60] @ 0x3c
  7020. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  7021. 80034ee: f107 0334 add.w r3, r7, #52 @ 0x34
  7022. 80034f2: 4619 mov r1, r3
  7023. 80034f4: 486d ldr r0, [pc, #436] @ (80036ac <HAL_ADC_MspInit+0x2a8>)
  7024. 80034f6: f007 f949 bl 800a78c <HAL_GPIO_Init>
  7025. /* ADC1 DMA Init */
  7026. /* ADC1 Init */
  7027. hdma_adc1.Instance = DMA1_Stream0;
  7028. 80034fa: 4b6d ldr r3, [pc, #436] @ (80036b0 <HAL_ADC_MspInit+0x2ac>)
  7029. 80034fc: 4a6d ldr r2, [pc, #436] @ (80036b4 <HAL_ADC_MspInit+0x2b0>)
  7030. 80034fe: 601a str r2, [r3, #0]
  7031. hdma_adc1.Init.Request = DMA_REQUEST_ADC1;
  7032. 8003500: 4b6b ldr r3, [pc, #428] @ (80036b0 <HAL_ADC_MspInit+0x2ac>)
  7033. 8003502: 2209 movs r2, #9
  7034. 8003504: 605a str r2, [r3, #4]
  7035. hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY;
  7036. 8003506: 4b6a ldr r3, [pc, #424] @ (80036b0 <HAL_ADC_MspInit+0x2ac>)
  7037. 8003508: 2200 movs r2, #0
  7038. 800350a: 609a str r2, [r3, #8]
  7039. hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE;
  7040. 800350c: 4b68 ldr r3, [pc, #416] @ (80036b0 <HAL_ADC_MspInit+0x2ac>)
  7041. 800350e: 2200 movs r2, #0
  7042. 8003510: 60da str r2, [r3, #12]
  7043. hdma_adc1.Init.MemInc = DMA_MINC_ENABLE;
  7044. 8003512: 4b67 ldr r3, [pc, #412] @ (80036b0 <HAL_ADC_MspInit+0x2ac>)
  7045. 8003514: f44f 6280 mov.w r2, #1024 @ 0x400
  7046. 8003518: 611a str r2, [r3, #16]
  7047. hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
  7048. 800351a: 4b65 ldr r3, [pc, #404] @ (80036b0 <HAL_ADC_MspInit+0x2ac>)
  7049. 800351c: f44f 6200 mov.w r2, #2048 @ 0x800
  7050. 8003520: 615a str r2, [r3, #20]
  7051. hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
  7052. 8003522: 4b63 ldr r3, [pc, #396] @ (80036b0 <HAL_ADC_MspInit+0x2ac>)
  7053. 8003524: f44f 5200 mov.w r2, #8192 @ 0x2000
  7054. 8003528: 619a str r2, [r3, #24]
  7055. hdma_adc1.Init.Mode = DMA_NORMAL;
  7056. 800352a: 4b61 ldr r3, [pc, #388] @ (80036b0 <HAL_ADC_MspInit+0x2ac>)
  7057. 800352c: 2200 movs r2, #0
  7058. 800352e: 61da str r2, [r3, #28]
  7059. hdma_adc1.Init.Priority = DMA_PRIORITY_LOW;
  7060. 8003530: 4b5f ldr r3, [pc, #380] @ (80036b0 <HAL_ADC_MspInit+0x2ac>)
  7061. 8003532: 2200 movs r2, #0
  7062. 8003534: 621a str r2, [r3, #32]
  7063. hdma_adc1.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
  7064. 8003536: 4b5e ldr r3, [pc, #376] @ (80036b0 <HAL_ADC_MspInit+0x2ac>)
  7065. 8003538: 2200 movs r2, #0
  7066. 800353a: 625a str r2, [r3, #36] @ 0x24
  7067. if (HAL_DMA_Init(&hdma_adc1) != HAL_OK)
  7068. 800353c: 485c ldr r0, [pc, #368] @ (80036b0 <HAL_ADC_MspInit+0x2ac>)
  7069. 800353e: f004 fae9 bl 8007b14 <HAL_DMA_Init>
  7070. 8003542: 4603 mov r3, r0
  7071. 8003544: 2b00 cmp r3, #0
  7072. 8003546: d001 beq.n 800354c <HAL_ADC_MspInit+0x148>
  7073. {
  7074. Error_Handler();
  7075. 8003548: f7fe fc62 bl 8001e10 <Error_Handler>
  7076. }
  7077. __HAL_LINKDMA(hadc,DMA_Handle,hdma_adc1);
  7078. 800354c: 687b ldr r3, [r7, #4]
  7079. 800354e: 4a58 ldr r2, [pc, #352] @ (80036b0 <HAL_ADC_MspInit+0x2ac>)
  7080. 8003550: 64da str r2, [r3, #76] @ 0x4c
  7081. 8003552: 4a57 ldr r2, [pc, #348] @ (80036b0 <HAL_ADC_MspInit+0x2ac>)
  7082. 8003554: 687b ldr r3, [r7, #4]
  7083. 8003556: 6393 str r3, [r2, #56] @ 0x38
  7084. /* USER CODE BEGIN ADC3_MspInit 1 */
  7085. /* USER CODE END ADC3_MspInit 1 */
  7086. }
  7087. }
  7088. 8003558: e11e b.n 8003798 <HAL_ADC_MspInit+0x394>
  7089. else if(hadc->Instance==ADC2)
  7090. 800355a: 687b ldr r3, [r7, #4]
  7091. 800355c: 681b ldr r3, [r3, #0]
  7092. 800355e: 4a56 ldr r2, [pc, #344] @ (80036b8 <HAL_ADC_MspInit+0x2b4>)
  7093. 8003560: 4293 cmp r3, r2
  7094. 8003562: f040 80af bne.w 80036c4 <HAL_ADC_MspInit+0x2c0>
  7095. HAL_RCC_ADC12_CLK_ENABLED++;
  7096. 8003566: 4b4d ldr r3, [pc, #308] @ (800369c <HAL_ADC_MspInit+0x298>)
  7097. 8003568: 681b ldr r3, [r3, #0]
  7098. 800356a: 3301 adds r3, #1
  7099. 800356c: 4a4b ldr r2, [pc, #300] @ (800369c <HAL_ADC_MspInit+0x298>)
  7100. 800356e: 6013 str r3, [r2, #0]
  7101. if(HAL_RCC_ADC12_CLK_ENABLED==1){
  7102. 8003570: 4b4a ldr r3, [pc, #296] @ (800369c <HAL_ADC_MspInit+0x298>)
  7103. 8003572: 681b ldr r3, [r3, #0]
  7104. 8003574: 2b01 cmp r3, #1
  7105. 8003576: d10e bne.n 8003596 <HAL_ADC_MspInit+0x192>
  7106. __HAL_RCC_ADC12_CLK_ENABLE();
  7107. 8003578: 4b49 ldr r3, [pc, #292] @ (80036a0 <HAL_ADC_MspInit+0x29c>)
  7108. 800357a: f8d3 30d8 ldr.w r3, [r3, #216] @ 0xd8
  7109. 800357e: 4a48 ldr r2, [pc, #288] @ (80036a0 <HAL_ADC_MspInit+0x29c>)
  7110. 8003580: f043 0320 orr.w r3, r3, #32
  7111. 8003584: f8c2 30d8 str.w r3, [r2, #216] @ 0xd8
  7112. 8003588: 4b45 ldr r3, [pc, #276] @ (80036a0 <HAL_ADC_MspInit+0x29c>)
  7113. 800358a: f8d3 30d8 ldr.w r3, [r3, #216] @ 0xd8
  7114. 800358e: f003 0320 and.w r3, r3, #32
  7115. 8003592: 623b str r3, [r7, #32]
  7116. 8003594: 6a3b ldr r3, [r7, #32]
  7117. __HAL_RCC_GPIOA_CLK_ENABLE();
  7118. 8003596: 4b42 ldr r3, [pc, #264] @ (80036a0 <HAL_ADC_MspInit+0x29c>)
  7119. 8003598: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  7120. 800359c: 4a40 ldr r2, [pc, #256] @ (80036a0 <HAL_ADC_MspInit+0x29c>)
  7121. 800359e: f043 0301 orr.w r3, r3, #1
  7122. 80035a2: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  7123. 80035a6: 4b3e ldr r3, [pc, #248] @ (80036a0 <HAL_ADC_MspInit+0x29c>)
  7124. 80035a8: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  7125. 80035ac: f003 0301 and.w r3, r3, #1
  7126. 80035b0: 61fb str r3, [r7, #28]
  7127. 80035b2: 69fb ldr r3, [r7, #28]
  7128. __HAL_RCC_GPIOC_CLK_ENABLE();
  7129. 80035b4: 4b3a ldr r3, [pc, #232] @ (80036a0 <HAL_ADC_MspInit+0x29c>)
  7130. 80035b6: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  7131. 80035ba: 4a39 ldr r2, [pc, #228] @ (80036a0 <HAL_ADC_MspInit+0x29c>)
  7132. 80035bc: f043 0304 orr.w r3, r3, #4
  7133. 80035c0: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  7134. 80035c4: 4b36 ldr r3, [pc, #216] @ (80036a0 <HAL_ADC_MspInit+0x29c>)
  7135. 80035c6: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  7136. 80035ca: f003 0304 and.w r3, r3, #4
  7137. 80035ce: 61bb str r3, [r7, #24]
  7138. 80035d0: 69bb ldr r3, [r7, #24]
  7139. __HAL_RCC_GPIOB_CLK_ENABLE();
  7140. 80035d2: 4b33 ldr r3, [pc, #204] @ (80036a0 <HAL_ADC_MspInit+0x29c>)
  7141. 80035d4: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  7142. 80035d8: 4a31 ldr r2, [pc, #196] @ (80036a0 <HAL_ADC_MspInit+0x29c>)
  7143. 80035da: f043 0302 orr.w r3, r3, #2
  7144. 80035de: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  7145. 80035e2: 4b2f ldr r3, [pc, #188] @ (80036a0 <HAL_ADC_MspInit+0x29c>)
  7146. 80035e4: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  7147. 80035e8: f003 0302 and.w r3, r3, #2
  7148. 80035ec: 617b str r3, [r7, #20]
  7149. 80035ee: 697b ldr r3, [r7, #20]
  7150. GPIO_InitStruct.Pin = GPIO_PIN_6;
  7151. 80035f0: 2340 movs r3, #64 @ 0x40
  7152. 80035f2: 637b str r3, [r7, #52] @ 0x34
  7153. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  7154. 80035f4: 2303 movs r3, #3
  7155. 80035f6: 63bb str r3, [r7, #56] @ 0x38
  7156. GPIO_InitStruct.Pull = GPIO_NOPULL;
  7157. 80035f8: 2300 movs r3, #0
  7158. 80035fa: 63fb str r3, [r7, #60] @ 0x3c
  7159. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  7160. 80035fc: f107 0334 add.w r3, r7, #52 @ 0x34
  7161. 8003600: 4619 mov r1, r3
  7162. 8003602: 4828 ldr r0, [pc, #160] @ (80036a4 <HAL_ADC_MspInit+0x2a0>)
  7163. 8003604: f007 f8c2 bl 800a78c <HAL_GPIO_Init>
  7164. GPIO_InitStruct.Pin = GPIO_PIN_4;
  7165. 8003608: 2310 movs r3, #16
  7166. 800360a: 637b str r3, [r7, #52] @ 0x34
  7167. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  7168. 800360c: 2303 movs r3, #3
  7169. 800360e: 63bb str r3, [r7, #56] @ 0x38
  7170. GPIO_InitStruct.Pull = GPIO_NOPULL;
  7171. 8003610: 2300 movs r3, #0
  7172. 8003612: 63fb str r3, [r7, #60] @ 0x3c
  7173. HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  7174. 8003614: f107 0334 add.w r3, r7, #52 @ 0x34
  7175. 8003618: 4619 mov r1, r3
  7176. 800361a: 4823 ldr r0, [pc, #140] @ (80036a8 <HAL_ADC_MspInit+0x2a4>)
  7177. 800361c: f007 f8b6 bl 800a78c <HAL_GPIO_Init>
  7178. GPIO_InitStruct.Pin = GPIO_PIN_1;
  7179. 8003620: 2302 movs r3, #2
  7180. 8003622: 637b str r3, [r7, #52] @ 0x34
  7181. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  7182. 8003624: 2303 movs r3, #3
  7183. 8003626: 63bb str r3, [r7, #56] @ 0x38
  7184. GPIO_InitStruct.Pull = GPIO_NOPULL;
  7185. 8003628: 2300 movs r3, #0
  7186. 800362a: 63fb str r3, [r7, #60] @ 0x3c
  7187. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  7188. 800362c: f107 0334 add.w r3, r7, #52 @ 0x34
  7189. 8003630: 4619 mov r1, r3
  7190. 8003632: 481e ldr r0, [pc, #120] @ (80036ac <HAL_ADC_MspInit+0x2a8>)
  7191. 8003634: f007 f8aa bl 800a78c <HAL_GPIO_Init>
  7192. hdma_adc2.Instance = DMA1_Stream1;
  7193. 8003638: 4b20 ldr r3, [pc, #128] @ (80036bc <HAL_ADC_MspInit+0x2b8>)
  7194. 800363a: 4a21 ldr r2, [pc, #132] @ (80036c0 <HAL_ADC_MspInit+0x2bc>)
  7195. 800363c: 601a str r2, [r3, #0]
  7196. hdma_adc2.Init.Request = DMA_REQUEST_ADC2;
  7197. 800363e: 4b1f ldr r3, [pc, #124] @ (80036bc <HAL_ADC_MspInit+0x2b8>)
  7198. 8003640: 220a movs r2, #10
  7199. 8003642: 605a str r2, [r3, #4]
  7200. hdma_adc2.Init.Direction = DMA_PERIPH_TO_MEMORY;
  7201. 8003644: 4b1d ldr r3, [pc, #116] @ (80036bc <HAL_ADC_MspInit+0x2b8>)
  7202. 8003646: 2200 movs r2, #0
  7203. 8003648: 609a str r2, [r3, #8]
  7204. hdma_adc2.Init.PeriphInc = DMA_PINC_DISABLE;
  7205. 800364a: 4b1c ldr r3, [pc, #112] @ (80036bc <HAL_ADC_MspInit+0x2b8>)
  7206. 800364c: 2200 movs r2, #0
  7207. 800364e: 60da str r2, [r3, #12]
  7208. hdma_adc2.Init.MemInc = DMA_MINC_ENABLE;
  7209. 8003650: 4b1a ldr r3, [pc, #104] @ (80036bc <HAL_ADC_MspInit+0x2b8>)
  7210. 8003652: f44f 6280 mov.w r2, #1024 @ 0x400
  7211. 8003656: 611a str r2, [r3, #16]
  7212. hdma_adc2.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
  7213. 8003658: 4b18 ldr r3, [pc, #96] @ (80036bc <HAL_ADC_MspInit+0x2b8>)
  7214. 800365a: f44f 6200 mov.w r2, #2048 @ 0x800
  7215. 800365e: 615a str r2, [r3, #20]
  7216. hdma_adc2.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
  7217. 8003660: 4b16 ldr r3, [pc, #88] @ (80036bc <HAL_ADC_MspInit+0x2b8>)
  7218. 8003662: f44f 5200 mov.w r2, #8192 @ 0x2000
  7219. 8003666: 619a str r2, [r3, #24]
  7220. hdma_adc2.Init.Mode = DMA_NORMAL;
  7221. 8003668: 4b14 ldr r3, [pc, #80] @ (80036bc <HAL_ADC_MspInit+0x2b8>)
  7222. 800366a: 2200 movs r2, #0
  7223. 800366c: 61da str r2, [r3, #28]
  7224. hdma_adc2.Init.Priority = DMA_PRIORITY_LOW;
  7225. 800366e: 4b13 ldr r3, [pc, #76] @ (80036bc <HAL_ADC_MspInit+0x2b8>)
  7226. 8003670: 2200 movs r2, #0
  7227. 8003672: 621a str r2, [r3, #32]
  7228. hdma_adc2.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
  7229. 8003674: 4b11 ldr r3, [pc, #68] @ (80036bc <HAL_ADC_MspInit+0x2b8>)
  7230. 8003676: 2200 movs r2, #0
  7231. 8003678: 625a str r2, [r3, #36] @ 0x24
  7232. if (HAL_DMA_Init(&hdma_adc2) != HAL_OK)
  7233. 800367a: 4810 ldr r0, [pc, #64] @ (80036bc <HAL_ADC_MspInit+0x2b8>)
  7234. 800367c: f004 fa4a bl 8007b14 <HAL_DMA_Init>
  7235. 8003680: 4603 mov r3, r0
  7236. 8003682: 2b00 cmp r3, #0
  7237. 8003684: d001 beq.n 800368a <HAL_ADC_MspInit+0x286>
  7238. Error_Handler();
  7239. 8003686: f7fe fbc3 bl 8001e10 <Error_Handler>
  7240. __HAL_LINKDMA(hadc,DMA_Handle,hdma_adc2);
  7241. 800368a: 687b ldr r3, [r7, #4]
  7242. 800368c: 4a0b ldr r2, [pc, #44] @ (80036bc <HAL_ADC_MspInit+0x2b8>)
  7243. 800368e: 64da str r2, [r3, #76] @ 0x4c
  7244. 8003690: 4a0a ldr r2, [pc, #40] @ (80036bc <HAL_ADC_MspInit+0x2b8>)
  7245. 8003692: 687b ldr r3, [r7, #4]
  7246. 8003694: 6393 str r3, [r2, #56] @ 0x38
  7247. }
  7248. 8003696: e07f b.n 8003798 <HAL_ADC_MspInit+0x394>
  7249. 8003698: 40022000 .word 0x40022000
  7250. 800369c: 24000860 .word 0x24000860
  7251. 80036a0: 58024400 .word 0x58024400
  7252. 80036a4: 58020000 .word 0x58020000
  7253. 80036a8: 58020800 .word 0x58020800
  7254. 80036ac: 58020400 .word 0x58020400
  7255. 80036b0: 2400026c .word 0x2400026c
  7256. 80036b4: 40020010 .word 0x40020010
  7257. 80036b8: 40022100 .word 0x40022100
  7258. 80036bc: 240002e4 .word 0x240002e4
  7259. 80036c0: 40020028 .word 0x40020028
  7260. else if(hadc->Instance==ADC3)
  7261. 80036c4: 687b ldr r3, [r7, #4]
  7262. 80036c6: 681b ldr r3, [r3, #0]
  7263. 80036c8: 4a35 ldr r2, [pc, #212] @ (80037a0 <HAL_ADC_MspInit+0x39c>)
  7264. 80036ca: 4293 cmp r3, r2
  7265. 80036cc: d164 bne.n 8003798 <HAL_ADC_MspInit+0x394>
  7266. __HAL_RCC_ADC3_CLK_ENABLE();
  7267. 80036ce: 4b35 ldr r3, [pc, #212] @ (80037a4 <HAL_ADC_MspInit+0x3a0>)
  7268. 80036d0: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  7269. 80036d4: 4a33 ldr r2, [pc, #204] @ (80037a4 <HAL_ADC_MspInit+0x3a0>)
  7270. 80036d6: f043 7380 orr.w r3, r3, #16777216 @ 0x1000000
  7271. 80036da: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  7272. 80036de: 4b31 ldr r3, [pc, #196] @ (80037a4 <HAL_ADC_MspInit+0x3a0>)
  7273. 80036e0: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  7274. 80036e4: f003 7380 and.w r3, r3, #16777216 @ 0x1000000
  7275. 80036e8: 613b str r3, [r7, #16]
  7276. 80036ea: 693b ldr r3, [r7, #16]
  7277. __HAL_RCC_GPIOC_CLK_ENABLE();
  7278. 80036ec: 4b2d ldr r3, [pc, #180] @ (80037a4 <HAL_ADC_MspInit+0x3a0>)
  7279. 80036ee: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  7280. 80036f2: 4a2c ldr r2, [pc, #176] @ (80037a4 <HAL_ADC_MspInit+0x3a0>)
  7281. 80036f4: f043 0304 orr.w r3, r3, #4
  7282. 80036f8: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  7283. 80036fc: 4b29 ldr r3, [pc, #164] @ (80037a4 <HAL_ADC_MspInit+0x3a0>)
  7284. 80036fe: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  7285. 8003702: f003 0304 and.w r3, r3, #4
  7286. 8003706: 60fb str r3, [r7, #12]
  7287. 8003708: 68fb ldr r3, [r7, #12]
  7288. GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;
  7289. 800370a: 2303 movs r3, #3
  7290. 800370c: 637b str r3, [r7, #52] @ 0x34
  7291. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  7292. 800370e: 2303 movs r3, #3
  7293. 8003710: 63bb str r3, [r7, #56] @ 0x38
  7294. GPIO_InitStruct.Pull = GPIO_NOPULL;
  7295. 8003712: 2300 movs r3, #0
  7296. 8003714: 63fb str r3, [r7, #60] @ 0x3c
  7297. HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  7298. 8003716: f107 0334 add.w r3, r7, #52 @ 0x34
  7299. 800371a: 4619 mov r1, r3
  7300. 800371c: 4822 ldr r0, [pc, #136] @ (80037a8 <HAL_ADC_MspInit+0x3a4>)
  7301. 800371e: f007 f835 bl 800a78c <HAL_GPIO_Init>
  7302. HAL_SYSCFG_AnalogSwitchConfig(SYSCFG_SWITCH_PC2, SYSCFG_SWITCH_PC2_OPEN);
  7303. 8003722: f04f 6180 mov.w r1, #67108864 @ 0x4000000
  7304. 8003726: f04f 6080 mov.w r0, #67108864 @ 0x4000000
  7305. 800372a: f001 fe93 bl 8005454 <HAL_SYSCFG_AnalogSwitchConfig>
  7306. HAL_SYSCFG_AnalogSwitchConfig(SYSCFG_SWITCH_PC3, SYSCFG_SWITCH_PC3_OPEN);
  7307. 800372e: f04f 6100 mov.w r1, #134217728 @ 0x8000000
  7308. 8003732: f04f 6000 mov.w r0, #134217728 @ 0x8000000
  7309. 8003736: f001 fe8d bl 8005454 <HAL_SYSCFG_AnalogSwitchConfig>
  7310. hdma_adc3.Instance = DMA1_Stream2;
  7311. 800373a: 4b1c ldr r3, [pc, #112] @ (80037ac <HAL_ADC_MspInit+0x3a8>)
  7312. 800373c: 4a1c ldr r2, [pc, #112] @ (80037b0 <HAL_ADC_MspInit+0x3ac>)
  7313. 800373e: 601a str r2, [r3, #0]
  7314. hdma_adc3.Init.Request = DMA_REQUEST_ADC3;
  7315. 8003740: 4b1a ldr r3, [pc, #104] @ (80037ac <HAL_ADC_MspInit+0x3a8>)
  7316. 8003742: 2273 movs r2, #115 @ 0x73
  7317. 8003744: 605a str r2, [r3, #4]
  7318. hdma_adc3.Init.Direction = DMA_PERIPH_TO_MEMORY;
  7319. 8003746: 4b19 ldr r3, [pc, #100] @ (80037ac <HAL_ADC_MspInit+0x3a8>)
  7320. 8003748: 2200 movs r2, #0
  7321. 800374a: 609a str r2, [r3, #8]
  7322. hdma_adc3.Init.PeriphInc = DMA_PINC_DISABLE;
  7323. 800374c: 4b17 ldr r3, [pc, #92] @ (80037ac <HAL_ADC_MspInit+0x3a8>)
  7324. 800374e: 2200 movs r2, #0
  7325. 8003750: 60da str r2, [r3, #12]
  7326. hdma_adc3.Init.MemInc = DMA_MINC_ENABLE;
  7327. 8003752: 4b16 ldr r3, [pc, #88] @ (80037ac <HAL_ADC_MspInit+0x3a8>)
  7328. 8003754: f44f 6280 mov.w r2, #1024 @ 0x400
  7329. 8003758: 611a str r2, [r3, #16]
  7330. hdma_adc3.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
  7331. 800375a: 4b14 ldr r3, [pc, #80] @ (80037ac <HAL_ADC_MspInit+0x3a8>)
  7332. 800375c: f44f 6200 mov.w r2, #2048 @ 0x800
  7333. 8003760: 615a str r2, [r3, #20]
  7334. hdma_adc3.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
  7335. 8003762: 4b12 ldr r3, [pc, #72] @ (80037ac <HAL_ADC_MspInit+0x3a8>)
  7336. 8003764: f44f 5200 mov.w r2, #8192 @ 0x2000
  7337. 8003768: 619a str r2, [r3, #24]
  7338. hdma_adc3.Init.Mode = DMA_NORMAL;
  7339. 800376a: 4b10 ldr r3, [pc, #64] @ (80037ac <HAL_ADC_MspInit+0x3a8>)
  7340. 800376c: 2200 movs r2, #0
  7341. 800376e: 61da str r2, [r3, #28]
  7342. hdma_adc3.Init.Priority = DMA_PRIORITY_LOW;
  7343. 8003770: 4b0e ldr r3, [pc, #56] @ (80037ac <HAL_ADC_MspInit+0x3a8>)
  7344. 8003772: 2200 movs r2, #0
  7345. 8003774: 621a str r2, [r3, #32]
  7346. hdma_adc3.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
  7347. 8003776: 4b0d ldr r3, [pc, #52] @ (80037ac <HAL_ADC_MspInit+0x3a8>)
  7348. 8003778: 2200 movs r2, #0
  7349. 800377a: 625a str r2, [r3, #36] @ 0x24
  7350. if (HAL_DMA_Init(&hdma_adc3) != HAL_OK)
  7351. 800377c: 480b ldr r0, [pc, #44] @ (80037ac <HAL_ADC_MspInit+0x3a8>)
  7352. 800377e: f004 f9c9 bl 8007b14 <HAL_DMA_Init>
  7353. 8003782: 4603 mov r3, r0
  7354. 8003784: 2b00 cmp r3, #0
  7355. 8003786: d001 beq.n 800378c <HAL_ADC_MspInit+0x388>
  7356. Error_Handler();
  7357. 8003788: f7fe fb42 bl 8001e10 <Error_Handler>
  7358. __HAL_LINKDMA(hadc,DMA_Handle,hdma_adc3);
  7359. 800378c: 687b ldr r3, [r7, #4]
  7360. 800378e: 4a07 ldr r2, [pc, #28] @ (80037ac <HAL_ADC_MspInit+0x3a8>)
  7361. 8003790: 64da str r2, [r3, #76] @ 0x4c
  7362. 8003792: 4a06 ldr r2, [pc, #24] @ (80037ac <HAL_ADC_MspInit+0x3a8>)
  7363. 8003794: 687b ldr r3, [r7, #4]
  7364. 8003796: 6393 str r3, [r2, #56] @ 0x38
  7365. }
  7366. 8003798: bf00 nop
  7367. 800379a: 3748 adds r7, #72 @ 0x48
  7368. 800379c: 46bd mov sp, r7
  7369. 800379e: bd80 pop {r7, pc}
  7370. 80037a0: 58026000 .word 0x58026000
  7371. 80037a4: 58024400 .word 0x58024400
  7372. 80037a8: 58020800 .word 0x58020800
  7373. 80037ac: 2400035c .word 0x2400035c
  7374. 80037b0: 40020040 .word 0x40020040
  7375. 080037b4 <HAL_COMP_MspInit>:
  7376. * This function configures the hardware resources used in this example
  7377. * @param hcomp: COMP handle pointer
  7378. * @retval None
  7379. */
  7380. void HAL_COMP_MspInit(COMP_HandleTypeDef* hcomp)
  7381. {
  7382. 80037b4: b580 push {r7, lr}
  7383. 80037b6: b08a sub sp, #40 @ 0x28
  7384. 80037b8: af00 add r7, sp, #0
  7385. 80037ba: 6078 str r0, [r7, #4]
  7386. GPIO_InitTypeDef GPIO_InitStruct = {0};
  7387. 80037bc: f107 0314 add.w r3, r7, #20
  7388. 80037c0: 2200 movs r2, #0
  7389. 80037c2: 601a str r2, [r3, #0]
  7390. 80037c4: 605a str r2, [r3, #4]
  7391. 80037c6: 609a str r2, [r3, #8]
  7392. 80037c8: 60da str r2, [r3, #12]
  7393. 80037ca: 611a str r2, [r3, #16]
  7394. if(hcomp->Instance==COMP1)
  7395. 80037cc: 687b ldr r3, [r7, #4]
  7396. 80037ce: 681b ldr r3, [r3, #0]
  7397. 80037d0: 4a18 ldr r2, [pc, #96] @ (8003834 <HAL_COMP_MspInit+0x80>)
  7398. 80037d2: 4293 cmp r3, r2
  7399. 80037d4: d129 bne.n 800382a <HAL_COMP_MspInit+0x76>
  7400. {
  7401. /* USER CODE BEGIN COMP1_MspInit 0 */
  7402. /* USER CODE END COMP1_MspInit 0 */
  7403. /* Peripheral clock enable */
  7404. __HAL_RCC_COMP12_CLK_ENABLE();
  7405. 80037d6: 4b18 ldr r3, [pc, #96] @ (8003838 <HAL_COMP_MspInit+0x84>)
  7406. 80037d8: f8d3 30f4 ldr.w r3, [r3, #244] @ 0xf4
  7407. 80037dc: 4a16 ldr r2, [pc, #88] @ (8003838 <HAL_COMP_MspInit+0x84>)
  7408. 80037de: f443 4380 orr.w r3, r3, #16384 @ 0x4000
  7409. 80037e2: f8c2 30f4 str.w r3, [r2, #244] @ 0xf4
  7410. 80037e6: 4b14 ldr r3, [pc, #80] @ (8003838 <HAL_COMP_MspInit+0x84>)
  7411. 80037e8: f8d3 30f4 ldr.w r3, [r3, #244] @ 0xf4
  7412. 80037ec: f403 4380 and.w r3, r3, #16384 @ 0x4000
  7413. 80037f0: 613b str r3, [r7, #16]
  7414. 80037f2: 693b ldr r3, [r7, #16]
  7415. __HAL_RCC_GPIOB_CLK_ENABLE();
  7416. 80037f4: 4b10 ldr r3, [pc, #64] @ (8003838 <HAL_COMP_MspInit+0x84>)
  7417. 80037f6: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  7418. 80037fa: 4a0f ldr r2, [pc, #60] @ (8003838 <HAL_COMP_MspInit+0x84>)
  7419. 80037fc: f043 0302 orr.w r3, r3, #2
  7420. 8003800: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  7421. 8003804: 4b0c ldr r3, [pc, #48] @ (8003838 <HAL_COMP_MspInit+0x84>)
  7422. 8003806: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  7423. 800380a: f003 0302 and.w r3, r3, #2
  7424. 800380e: 60fb str r3, [r7, #12]
  7425. 8003810: 68fb ldr r3, [r7, #12]
  7426. /**COMP1 GPIO Configuration
  7427. PB2 ------> COMP1_INP
  7428. */
  7429. GPIO_InitStruct.Pin = GPIO_PIN_2;
  7430. 8003812: 2304 movs r3, #4
  7431. 8003814: 617b str r3, [r7, #20]
  7432. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  7433. 8003816: 2303 movs r3, #3
  7434. 8003818: 61bb str r3, [r7, #24]
  7435. GPIO_InitStruct.Pull = GPIO_NOPULL;
  7436. 800381a: 2300 movs r3, #0
  7437. 800381c: 61fb str r3, [r7, #28]
  7438. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  7439. 800381e: f107 0314 add.w r3, r7, #20
  7440. 8003822: 4619 mov r1, r3
  7441. 8003824: 4805 ldr r0, [pc, #20] @ (800383c <HAL_COMP_MspInit+0x88>)
  7442. 8003826: f006 ffb1 bl 800a78c <HAL_GPIO_Init>
  7443. /* USER CODE BEGIN COMP1_MspInit 1 */
  7444. /* USER CODE END COMP1_MspInit 1 */
  7445. }
  7446. }
  7447. 800382a: bf00 nop
  7448. 800382c: 3728 adds r7, #40 @ 0x28
  7449. 800382e: 46bd mov sp, r7
  7450. 8003830: bd80 pop {r7, pc}
  7451. 8003832: bf00 nop
  7452. 8003834: 5800380c .word 0x5800380c
  7453. 8003838: 58024400 .word 0x58024400
  7454. 800383c: 58020400 .word 0x58020400
  7455. 08003840 <HAL_CRC_MspInit>:
  7456. * This function configures the hardware resources used in this example
  7457. * @param hcrc: CRC handle pointer
  7458. * @retval None
  7459. */
  7460. void HAL_CRC_MspInit(CRC_HandleTypeDef* hcrc)
  7461. {
  7462. 8003840: b480 push {r7}
  7463. 8003842: b085 sub sp, #20
  7464. 8003844: af00 add r7, sp, #0
  7465. 8003846: 6078 str r0, [r7, #4]
  7466. if(hcrc->Instance==CRC)
  7467. 8003848: 687b ldr r3, [r7, #4]
  7468. 800384a: 681b ldr r3, [r3, #0]
  7469. 800384c: 4a0b ldr r2, [pc, #44] @ (800387c <HAL_CRC_MspInit+0x3c>)
  7470. 800384e: 4293 cmp r3, r2
  7471. 8003850: d10e bne.n 8003870 <HAL_CRC_MspInit+0x30>
  7472. {
  7473. /* USER CODE BEGIN CRC_MspInit 0 */
  7474. /* USER CODE END CRC_MspInit 0 */
  7475. /* Peripheral clock enable */
  7476. __HAL_RCC_CRC_CLK_ENABLE();
  7477. 8003852: 4b0b ldr r3, [pc, #44] @ (8003880 <HAL_CRC_MspInit+0x40>)
  7478. 8003854: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  7479. 8003858: 4a09 ldr r2, [pc, #36] @ (8003880 <HAL_CRC_MspInit+0x40>)
  7480. 800385a: f443 2300 orr.w r3, r3, #524288 @ 0x80000
  7481. 800385e: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  7482. 8003862: 4b07 ldr r3, [pc, #28] @ (8003880 <HAL_CRC_MspInit+0x40>)
  7483. 8003864: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  7484. 8003868: f403 2300 and.w r3, r3, #524288 @ 0x80000
  7485. 800386c: 60fb str r3, [r7, #12]
  7486. 800386e: 68fb ldr r3, [r7, #12]
  7487. /* USER CODE BEGIN CRC_MspInit 1 */
  7488. /* USER CODE END CRC_MspInit 1 */
  7489. }
  7490. }
  7491. 8003870: bf00 nop
  7492. 8003872: 3714 adds r7, #20
  7493. 8003874: 46bd mov sp, r7
  7494. 8003876: f85d 7b04 ldr.w r7, [sp], #4
  7495. 800387a: 4770 bx lr
  7496. 800387c: 58024c00 .word 0x58024c00
  7497. 8003880: 58024400 .word 0x58024400
  7498. 08003884 <HAL_DAC_MspInit>:
  7499. * This function configures the hardware resources used in this example
  7500. * @param hdac: DAC handle pointer
  7501. * @retval None
  7502. */
  7503. void HAL_DAC_MspInit(DAC_HandleTypeDef* hdac)
  7504. {
  7505. 8003884: b580 push {r7, lr}
  7506. 8003886: b08a sub sp, #40 @ 0x28
  7507. 8003888: af00 add r7, sp, #0
  7508. 800388a: 6078 str r0, [r7, #4]
  7509. GPIO_InitTypeDef GPIO_InitStruct = {0};
  7510. 800388c: f107 0314 add.w r3, r7, #20
  7511. 8003890: 2200 movs r2, #0
  7512. 8003892: 601a str r2, [r3, #0]
  7513. 8003894: 605a str r2, [r3, #4]
  7514. 8003896: 609a str r2, [r3, #8]
  7515. 8003898: 60da str r2, [r3, #12]
  7516. 800389a: 611a str r2, [r3, #16]
  7517. if(hdac->Instance==DAC1)
  7518. 800389c: 687b ldr r3, [r7, #4]
  7519. 800389e: 681b ldr r3, [r3, #0]
  7520. 80038a0: 4a1c ldr r2, [pc, #112] @ (8003914 <HAL_DAC_MspInit+0x90>)
  7521. 80038a2: 4293 cmp r3, r2
  7522. 80038a4: d131 bne.n 800390a <HAL_DAC_MspInit+0x86>
  7523. {
  7524. /* USER CODE BEGIN DAC1_MspInit 0 */
  7525. /* USER CODE END DAC1_MspInit 0 */
  7526. /* Peripheral clock enable */
  7527. __HAL_RCC_DAC12_CLK_ENABLE();
  7528. 80038a6: 4b1c ldr r3, [pc, #112] @ (8003918 <HAL_DAC_MspInit+0x94>)
  7529. 80038a8: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  7530. 80038ac: 4a1a ldr r2, [pc, #104] @ (8003918 <HAL_DAC_MspInit+0x94>)
  7531. 80038ae: f043 5300 orr.w r3, r3, #536870912 @ 0x20000000
  7532. 80038b2: f8c2 30e8 str.w r3, [r2, #232] @ 0xe8
  7533. 80038b6: 4b18 ldr r3, [pc, #96] @ (8003918 <HAL_DAC_MspInit+0x94>)
  7534. 80038b8: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  7535. 80038bc: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  7536. 80038c0: 613b str r3, [r7, #16]
  7537. 80038c2: 693b ldr r3, [r7, #16]
  7538. __HAL_RCC_GPIOA_CLK_ENABLE();
  7539. 80038c4: 4b14 ldr r3, [pc, #80] @ (8003918 <HAL_DAC_MspInit+0x94>)
  7540. 80038c6: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  7541. 80038ca: 4a13 ldr r2, [pc, #76] @ (8003918 <HAL_DAC_MspInit+0x94>)
  7542. 80038cc: f043 0301 orr.w r3, r3, #1
  7543. 80038d0: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  7544. 80038d4: 4b10 ldr r3, [pc, #64] @ (8003918 <HAL_DAC_MspInit+0x94>)
  7545. 80038d6: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  7546. 80038da: f003 0301 and.w r3, r3, #1
  7547. 80038de: 60fb str r3, [r7, #12]
  7548. 80038e0: 68fb ldr r3, [r7, #12]
  7549. /**DAC1 GPIO Configuration
  7550. PA4 ------> DAC1_OUT1
  7551. PA5 ------> DAC1_OUT2
  7552. */
  7553. GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5;
  7554. 80038e2: 2330 movs r3, #48 @ 0x30
  7555. 80038e4: 617b str r3, [r7, #20]
  7556. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  7557. 80038e6: 2303 movs r3, #3
  7558. 80038e8: 61bb str r3, [r7, #24]
  7559. GPIO_InitStruct.Pull = GPIO_NOPULL;
  7560. 80038ea: 2300 movs r3, #0
  7561. 80038ec: 61fb str r3, [r7, #28]
  7562. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  7563. 80038ee: f107 0314 add.w r3, r7, #20
  7564. 80038f2: 4619 mov r1, r3
  7565. 80038f4: 4809 ldr r0, [pc, #36] @ (800391c <HAL_DAC_MspInit+0x98>)
  7566. 80038f6: f006 ff49 bl 800a78c <HAL_GPIO_Init>
  7567. /* DAC1 interrupt Init */
  7568. HAL_NVIC_SetPriority(TIM6_DAC_IRQn, 5, 0);
  7569. 80038fa: 2200 movs r2, #0
  7570. 80038fc: 2105 movs r1, #5
  7571. 80038fe: 2036 movs r0, #54 @ 0x36
  7572. 8003900: f003 fc12 bl 8007128 <HAL_NVIC_SetPriority>
  7573. HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn);
  7574. 8003904: 2036 movs r0, #54 @ 0x36
  7575. 8003906: f003 fc29 bl 800715c <HAL_NVIC_EnableIRQ>
  7576. /* USER CODE BEGIN DAC1_MspInit 1 */
  7577. /* USER CODE END DAC1_MspInit 1 */
  7578. }
  7579. }
  7580. 800390a: bf00 nop
  7581. 800390c: 3728 adds r7, #40 @ 0x28
  7582. 800390e: 46bd mov sp, r7
  7583. 8003910: bd80 pop {r7, pc}
  7584. 8003912: bf00 nop
  7585. 8003914: 40007400 .word 0x40007400
  7586. 8003918: 58024400 .word 0x58024400
  7587. 800391c: 58020000 .word 0x58020000
  7588. 08003920 <HAL_RNG_MspInit>:
  7589. * This function configures the hardware resources used in this example
  7590. * @param hrng: RNG handle pointer
  7591. * @retval None
  7592. */
  7593. void HAL_RNG_MspInit(RNG_HandleTypeDef* hrng)
  7594. {
  7595. 8003920: b580 push {r7, lr}
  7596. 8003922: b0b4 sub sp, #208 @ 0xd0
  7597. 8003924: af00 add r7, sp, #0
  7598. 8003926: 6078 str r0, [r7, #4]
  7599. RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
  7600. 8003928: f107 0310 add.w r3, r7, #16
  7601. 800392c: 22c0 movs r2, #192 @ 0xc0
  7602. 800392e: 2100 movs r1, #0
  7603. 8003930: 4618 mov r0, r3
  7604. 8003932: f014 f910 bl 8017b56 <memset>
  7605. if(hrng->Instance==RNG)
  7606. 8003936: 687b ldr r3, [r7, #4]
  7607. 8003938: 681b ldr r3, [r3, #0]
  7608. 800393a: 4a14 ldr r2, [pc, #80] @ (800398c <HAL_RNG_MspInit+0x6c>)
  7609. 800393c: 4293 cmp r3, r2
  7610. 800393e: d121 bne.n 8003984 <HAL_RNG_MspInit+0x64>
  7611. /* USER CODE END RNG_MspInit 0 */
  7612. /** Initializes the peripherals clock
  7613. */
  7614. PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RNG;
  7615. 8003940: f44f 3200 mov.w r2, #131072 @ 0x20000
  7616. 8003944: f04f 0300 mov.w r3, #0
  7617. 8003948: e9c7 2304 strd r2, r3, [r7, #16]
  7618. PeriphClkInitStruct.RngClockSelection = RCC_RNGCLKSOURCE_HSI48;
  7619. 800394c: 2300 movs r3, #0
  7620. 800394e: f8c7 3090 str.w r3, [r7, #144] @ 0x90
  7621. if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
  7622. 8003952: f107 0310 add.w r3, r7, #16
  7623. 8003956: 4618 mov r0, r3
  7624. 8003958: f008 faa0 bl 800be9c <HAL_RCCEx_PeriphCLKConfig>
  7625. 800395c: 4603 mov r3, r0
  7626. 800395e: 2b00 cmp r3, #0
  7627. 8003960: d001 beq.n 8003966 <HAL_RNG_MspInit+0x46>
  7628. {
  7629. Error_Handler();
  7630. 8003962: f7fe fa55 bl 8001e10 <Error_Handler>
  7631. }
  7632. /* Peripheral clock enable */
  7633. __HAL_RCC_RNG_CLK_ENABLE();
  7634. 8003966: 4b0a ldr r3, [pc, #40] @ (8003990 <HAL_RNG_MspInit+0x70>)
  7635. 8003968: f8d3 30dc ldr.w r3, [r3, #220] @ 0xdc
  7636. 800396c: 4a08 ldr r2, [pc, #32] @ (8003990 <HAL_RNG_MspInit+0x70>)
  7637. 800396e: f043 0340 orr.w r3, r3, #64 @ 0x40
  7638. 8003972: f8c2 30dc str.w r3, [r2, #220] @ 0xdc
  7639. 8003976: 4b06 ldr r3, [pc, #24] @ (8003990 <HAL_RNG_MspInit+0x70>)
  7640. 8003978: f8d3 30dc ldr.w r3, [r3, #220] @ 0xdc
  7641. 800397c: f003 0340 and.w r3, r3, #64 @ 0x40
  7642. 8003980: 60fb str r3, [r7, #12]
  7643. 8003982: 68fb ldr r3, [r7, #12]
  7644. /* USER CODE BEGIN RNG_MspInit 1 */
  7645. /* USER CODE END RNG_MspInit 1 */
  7646. }
  7647. }
  7648. 8003984: bf00 nop
  7649. 8003986: 37d0 adds r7, #208 @ 0xd0
  7650. 8003988: 46bd mov sp, r7
  7651. 800398a: bd80 pop {r7, pc}
  7652. 800398c: 48021800 .word 0x48021800
  7653. 8003990: 58024400 .word 0x58024400
  7654. 08003994 <HAL_TIM_PWM_MspInit>:
  7655. * This function configures the hardware resources used in this example
  7656. * @param htim_pwm: TIM_PWM handle pointer
  7657. * @retval None
  7658. */
  7659. void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* htim_pwm)
  7660. {
  7661. 8003994: b480 push {r7}
  7662. 8003996: b085 sub sp, #20
  7663. 8003998: af00 add r7, sp, #0
  7664. 800399a: 6078 str r0, [r7, #4]
  7665. if(htim_pwm->Instance==TIM1)
  7666. 800399c: 687b ldr r3, [r7, #4]
  7667. 800399e: 681b ldr r3, [r3, #0]
  7668. 80039a0: 4a16 ldr r2, [pc, #88] @ (80039fc <HAL_TIM_PWM_MspInit+0x68>)
  7669. 80039a2: 4293 cmp r3, r2
  7670. 80039a4: d10f bne.n 80039c6 <HAL_TIM_PWM_MspInit+0x32>
  7671. {
  7672. /* USER CODE BEGIN TIM1_MspInit 0 */
  7673. /* USER CODE END TIM1_MspInit 0 */
  7674. /* Peripheral clock enable */
  7675. __HAL_RCC_TIM1_CLK_ENABLE();
  7676. 80039a6: 4b16 ldr r3, [pc, #88] @ (8003a00 <HAL_TIM_PWM_MspInit+0x6c>)
  7677. 80039a8: f8d3 30f0 ldr.w r3, [r3, #240] @ 0xf0
  7678. 80039ac: 4a14 ldr r2, [pc, #80] @ (8003a00 <HAL_TIM_PWM_MspInit+0x6c>)
  7679. 80039ae: f043 0301 orr.w r3, r3, #1
  7680. 80039b2: f8c2 30f0 str.w r3, [r2, #240] @ 0xf0
  7681. 80039b6: 4b12 ldr r3, [pc, #72] @ (8003a00 <HAL_TIM_PWM_MspInit+0x6c>)
  7682. 80039b8: f8d3 30f0 ldr.w r3, [r3, #240] @ 0xf0
  7683. 80039bc: f003 0301 and.w r3, r3, #1
  7684. 80039c0: 60fb str r3, [r7, #12]
  7685. 80039c2: 68fb ldr r3, [r7, #12]
  7686. /* USER CODE BEGIN TIM3_MspInit 1 */
  7687. /* USER CODE END TIM3_MspInit 1 */
  7688. }
  7689. }
  7690. 80039c4: e013 b.n 80039ee <HAL_TIM_PWM_MspInit+0x5a>
  7691. else if(htim_pwm->Instance==TIM3)
  7692. 80039c6: 687b ldr r3, [r7, #4]
  7693. 80039c8: 681b ldr r3, [r3, #0]
  7694. 80039ca: 4a0e ldr r2, [pc, #56] @ (8003a04 <HAL_TIM_PWM_MspInit+0x70>)
  7695. 80039cc: 4293 cmp r3, r2
  7696. 80039ce: d10e bne.n 80039ee <HAL_TIM_PWM_MspInit+0x5a>
  7697. __HAL_RCC_TIM3_CLK_ENABLE();
  7698. 80039d0: 4b0b ldr r3, [pc, #44] @ (8003a00 <HAL_TIM_PWM_MspInit+0x6c>)
  7699. 80039d2: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  7700. 80039d6: 4a0a ldr r2, [pc, #40] @ (8003a00 <HAL_TIM_PWM_MspInit+0x6c>)
  7701. 80039d8: f043 0302 orr.w r3, r3, #2
  7702. 80039dc: f8c2 30e8 str.w r3, [r2, #232] @ 0xe8
  7703. 80039e0: 4b07 ldr r3, [pc, #28] @ (8003a00 <HAL_TIM_PWM_MspInit+0x6c>)
  7704. 80039e2: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  7705. 80039e6: f003 0302 and.w r3, r3, #2
  7706. 80039ea: 60bb str r3, [r7, #8]
  7707. 80039ec: 68bb ldr r3, [r7, #8]
  7708. }
  7709. 80039ee: bf00 nop
  7710. 80039f0: 3714 adds r7, #20
  7711. 80039f2: 46bd mov sp, r7
  7712. 80039f4: f85d 7b04 ldr.w r7, [sp], #4
  7713. 80039f8: 4770 bx lr
  7714. 80039fa: bf00 nop
  7715. 80039fc: 40010000 .word 0x40010000
  7716. 8003a00: 58024400 .word 0x58024400
  7717. 8003a04: 40000400 .word 0x40000400
  7718. 08003a08 <HAL_TIM_Base_MspInit>:
  7719. * This function configures the hardware resources used in this example
  7720. * @param htim_base: TIM_Base handle pointer
  7721. * @retval None
  7722. */
  7723. void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
  7724. {
  7725. 8003a08: b580 push {r7, lr}
  7726. 8003a0a: b08c sub sp, #48 @ 0x30
  7727. 8003a0c: af00 add r7, sp, #0
  7728. 8003a0e: 6078 str r0, [r7, #4]
  7729. GPIO_InitTypeDef GPIO_InitStruct = {0};
  7730. 8003a10: f107 031c add.w r3, r7, #28
  7731. 8003a14: 2200 movs r2, #0
  7732. 8003a16: 601a str r2, [r3, #0]
  7733. 8003a18: 605a str r2, [r3, #4]
  7734. 8003a1a: 609a str r2, [r3, #8]
  7735. 8003a1c: 60da str r2, [r3, #12]
  7736. 8003a1e: 611a str r2, [r3, #16]
  7737. if(htim_base->Instance==TIM2)
  7738. 8003a20: 687b ldr r3, [r7, #4]
  7739. 8003a22: 681b ldr r3, [r3, #0]
  7740. 8003a24: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  7741. 8003a28: d137 bne.n 8003a9a <HAL_TIM_Base_MspInit+0x92>
  7742. {
  7743. /* USER CODE BEGIN TIM2_MspInit 0 */
  7744. /* USER CODE END TIM2_MspInit 0 */
  7745. /* Peripheral clock enable */
  7746. __HAL_RCC_TIM2_CLK_ENABLE();
  7747. 8003a2a: 4b3c ldr r3, [pc, #240] @ (8003b1c <HAL_TIM_Base_MspInit+0x114>)
  7748. 8003a2c: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  7749. 8003a30: 4a3a ldr r2, [pc, #232] @ (8003b1c <HAL_TIM_Base_MspInit+0x114>)
  7750. 8003a32: f043 0301 orr.w r3, r3, #1
  7751. 8003a36: f8c2 30e8 str.w r3, [r2, #232] @ 0xe8
  7752. 8003a3a: 4b38 ldr r3, [pc, #224] @ (8003b1c <HAL_TIM_Base_MspInit+0x114>)
  7753. 8003a3c: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  7754. 8003a40: f003 0301 and.w r3, r3, #1
  7755. 8003a44: 61bb str r3, [r7, #24]
  7756. 8003a46: 69bb ldr r3, [r7, #24]
  7757. __HAL_RCC_GPIOB_CLK_ENABLE();
  7758. 8003a48: 4b34 ldr r3, [pc, #208] @ (8003b1c <HAL_TIM_Base_MspInit+0x114>)
  7759. 8003a4a: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  7760. 8003a4e: 4a33 ldr r2, [pc, #204] @ (8003b1c <HAL_TIM_Base_MspInit+0x114>)
  7761. 8003a50: f043 0302 orr.w r3, r3, #2
  7762. 8003a54: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  7763. 8003a58: 4b30 ldr r3, [pc, #192] @ (8003b1c <HAL_TIM_Base_MspInit+0x114>)
  7764. 8003a5a: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  7765. 8003a5e: f003 0302 and.w r3, r3, #2
  7766. 8003a62: 617b str r3, [r7, #20]
  7767. 8003a64: 697b ldr r3, [r7, #20]
  7768. /**TIM2 GPIO Configuration
  7769. PB10 ------> TIM2_CH3
  7770. PB11 ------> TIM2_CH4
  7771. */
  7772. GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11;
  7773. 8003a66: f44f 6340 mov.w r3, #3072 @ 0xc00
  7774. 8003a6a: 61fb str r3, [r7, #28]
  7775. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  7776. 8003a6c: 2302 movs r3, #2
  7777. 8003a6e: 623b str r3, [r7, #32]
  7778. GPIO_InitStruct.Pull = GPIO_NOPULL;
  7779. 8003a70: 2300 movs r3, #0
  7780. 8003a72: 627b str r3, [r7, #36] @ 0x24
  7781. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  7782. 8003a74: 2300 movs r3, #0
  7783. 8003a76: 62bb str r3, [r7, #40] @ 0x28
  7784. GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;
  7785. 8003a78: 2301 movs r3, #1
  7786. 8003a7a: 62fb str r3, [r7, #44] @ 0x2c
  7787. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  7788. 8003a7c: f107 031c add.w r3, r7, #28
  7789. 8003a80: 4619 mov r1, r3
  7790. 8003a82: 4827 ldr r0, [pc, #156] @ (8003b20 <HAL_TIM_Base_MspInit+0x118>)
  7791. 8003a84: f006 fe82 bl 800a78c <HAL_GPIO_Init>
  7792. /* TIM2 interrupt Init */
  7793. HAL_NVIC_SetPriority(TIM2_IRQn, 5, 0);
  7794. 8003a88: 2200 movs r2, #0
  7795. 8003a8a: 2105 movs r1, #5
  7796. 8003a8c: 201c movs r0, #28
  7797. 8003a8e: f003 fb4b bl 8007128 <HAL_NVIC_SetPriority>
  7798. HAL_NVIC_EnableIRQ(TIM2_IRQn);
  7799. 8003a92: 201c movs r0, #28
  7800. 8003a94: f003 fb62 bl 800715c <HAL_NVIC_EnableIRQ>
  7801. /* USER CODE BEGIN TIM4_MspInit 1 */
  7802. /* USER CODE END TIM4_MspInit 1 */
  7803. }
  7804. }
  7805. 8003a98: e03b b.n 8003b12 <HAL_TIM_Base_MspInit+0x10a>
  7806. else if(htim_base->Instance==TIM4)
  7807. 8003a9a: 687b ldr r3, [r7, #4]
  7808. 8003a9c: 681b ldr r3, [r3, #0]
  7809. 8003a9e: 4a21 ldr r2, [pc, #132] @ (8003b24 <HAL_TIM_Base_MspInit+0x11c>)
  7810. 8003aa0: 4293 cmp r3, r2
  7811. 8003aa2: d136 bne.n 8003b12 <HAL_TIM_Base_MspInit+0x10a>
  7812. __HAL_RCC_TIM4_CLK_ENABLE();
  7813. 8003aa4: 4b1d ldr r3, [pc, #116] @ (8003b1c <HAL_TIM_Base_MspInit+0x114>)
  7814. 8003aa6: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  7815. 8003aaa: 4a1c ldr r2, [pc, #112] @ (8003b1c <HAL_TIM_Base_MspInit+0x114>)
  7816. 8003aac: f043 0304 orr.w r3, r3, #4
  7817. 8003ab0: f8c2 30e8 str.w r3, [r2, #232] @ 0xe8
  7818. 8003ab4: 4b19 ldr r3, [pc, #100] @ (8003b1c <HAL_TIM_Base_MspInit+0x114>)
  7819. 8003ab6: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  7820. 8003aba: f003 0304 and.w r3, r3, #4
  7821. 8003abe: 613b str r3, [r7, #16]
  7822. 8003ac0: 693b ldr r3, [r7, #16]
  7823. __HAL_RCC_GPIOD_CLK_ENABLE();
  7824. 8003ac2: 4b16 ldr r3, [pc, #88] @ (8003b1c <HAL_TIM_Base_MspInit+0x114>)
  7825. 8003ac4: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  7826. 8003ac8: 4a14 ldr r2, [pc, #80] @ (8003b1c <HAL_TIM_Base_MspInit+0x114>)
  7827. 8003aca: f043 0308 orr.w r3, r3, #8
  7828. 8003ace: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  7829. 8003ad2: 4b12 ldr r3, [pc, #72] @ (8003b1c <HAL_TIM_Base_MspInit+0x114>)
  7830. 8003ad4: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  7831. 8003ad8: f003 0308 and.w r3, r3, #8
  7832. 8003adc: 60fb str r3, [r7, #12]
  7833. 8003ade: 68fb ldr r3, [r7, #12]
  7834. GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15;
  7835. 8003ae0: f44f 4340 mov.w r3, #49152 @ 0xc000
  7836. 8003ae4: 61fb str r3, [r7, #28]
  7837. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  7838. 8003ae6: 2302 movs r3, #2
  7839. 8003ae8: 623b str r3, [r7, #32]
  7840. GPIO_InitStruct.Pull = GPIO_NOPULL;
  7841. 8003aea: 2300 movs r3, #0
  7842. 8003aec: 627b str r3, [r7, #36] @ 0x24
  7843. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  7844. 8003aee: 2300 movs r3, #0
  7845. 8003af0: 62bb str r3, [r7, #40] @ 0x28
  7846. GPIO_InitStruct.Alternate = GPIO_AF2_TIM4;
  7847. 8003af2: 2302 movs r3, #2
  7848. 8003af4: 62fb str r3, [r7, #44] @ 0x2c
  7849. HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
  7850. 8003af6: f107 031c add.w r3, r7, #28
  7851. 8003afa: 4619 mov r1, r3
  7852. 8003afc: 480a ldr r0, [pc, #40] @ (8003b28 <HAL_TIM_Base_MspInit+0x120>)
  7853. 8003afe: f006 fe45 bl 800a78c <HAL_GPIO_Init>
  7854. HAL_NVIC_SetPriority(TIM4_IRQn, 5, 0);
  7855. 8003b02: 2200 movs r2, #0
  7856. 8003b04: 2105 movs r1, #5
  7857. 8003b06: 201e movs r0, #30
  7858. 8003b08: f003 fb0e bl 8007128 <HAL_NVIC_SetPriority>
  7859. HAL_NVIC_EnableIRQ(TIM4_IRQn);
  7860. 8003b0c: 201e movs r0, #30
  7861. 8003b0e: f003 fb25 bl 800715c <HAL_NVIC_EnableIRQ>
  7862. }
  7863. 8003b12: bf00 nop
  7864. 8003b14: 3730 adds r7, #48 @ 0x30
  7865. 8003b16: 46bd mov sp, r7
  7866. 8003b18: bd80 pop {r7, pc}
  7867. 8003b1a: bf00 nop
  7868. 8003b1c: 58024400 .word 0x58024400
  7869. 8003b20: 58020400 .word 0x58020400
  7870. 8003b24: 40000800 .word 0x40000800
  7871. 8003b28: 58020c00 .word 0x58020c00
  7872. 08003b2c <HAL_TIM_MspPostInit>:
  7873. void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim)
  7874. {
  7875. 8003b2c: b580 push {r7, lr}
  7876. 8003b2e: b08a sub sp, #40 @ 0x28
  7877. 8003b30: af00 add r7, sp, #0
  7878. 8003b32: 6078 str r0, [r7, #4]
  7879. GPIO_InitTypeDef GPIO_InitStruct = {0};
  7880. 8003b34: f107 0314 add.w r3, r7, #20
  7881. 8003b38: 2200 movs r2, #0
  7882. 8003b3a: 601a str r2, [r3, #0]
  7883. 8003b3c: 605a str r2, [r3, #4]
  7884. 8003b3e: 609a str r2, [r3, #8]
  7885. 8003b40: 60da str r2, [r3, #12]
  7886. 8003b42: 611a str r2, [r3, #16]
  7887. if(htim->Instance==TIM1)
  7888. 8003b44: 687b ldr r3, [r7, #4]
  7889. 8003b46: 681b ldr r3, [r3, #0]
  7890. 8003b48: 4a26 ldr r2, [pc, #152] @ (8003be4 <HAL_TIM_MspPostInit+0xb8>)
  7891. 8003b4a: 4293 cmp r3, r2
  7892. 8003b4c: d120 bne.n 8003b90 <HAL_TIM_MspPostInit+0x64>
  7893. {
  7894. /* USER CODE BEGIN TIM1_MspPostInit 0 */
  7895. /* USER CODE END TIM1_MspPostInit 0 */
  7896. __HAL_RCC_GPIOA_CLK_ENABLE();
  7897. 8003b4e: 4b26 ldr r3, [pc, #152] @ (8003be8 <HAL_TIM_MspPostInit+0xbc>)
  7898. 8003b50: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  7899. 8003b54: 4a24 ldr r2, [pc, #144] @ (8003be8 <HAL_TIM_MspPostInit+0xbc>)
  7900. 8003b56: f043 0301 orr.w r3, r3, #1
  7901. 8003b5a: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  7902. 8003b5e: 4b22 ldr r3, [pc, #136] @ (8003be8 <HAL_TIM_MspPostInit+0xbc>)
  7903. 8003b60: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  7904. 8003b64: f003 0301 and.w r3, r3, #1
  7905. 8003b68: 613b str r3, [r7, #16]
  7906. 8003b6a: 693b ldr r3, [r7, #16]
  7907. /**TIM1 GPIO Configuration
  7908. PA9 ------> TIM1_CH2
  7909. */
  7910. GPIO_InitStruct.Pin = GPIO_PIN_9;
  7911. 8003b6c: f44f 7300 mov.w r3, #512 @ 0x200
  7912. 8003b70: 617b str r3, [r7, #20]
  7913. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  7914. 8003b72: 2302 movs r3, #2
  7915. 8003b74: 61bb str r3, [r7, #24]
  7916. GPIO_InitStruct.Pull = GPIO_NOPULL;
  7917. 8003b76: 2300 movs r3, #0
  7918. 8003b78: 61fb str r3, [r7, #28]
  7919. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  7920. 8003b7a: 2300 movs r3, #0
  7921. 8003b7c: 623b str r3, [r7, #32]
  7922. GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
  7923. 8003b7e: 2301 movs r3, #1
  7924. 8003b80: 627b str r3, [r7, #36] @ 0x24
  7925. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  7926. 8003b82: f107 0314 add.w r3, r7, #20
  7927. 8003b86: 4619 mov r1, r3
  7928. 8003b88: 4818 ldr r0, [pc, #96] @ (8003bec <HAL_TIM_MspPostInit+0xc0>)
  7929. 8003b8a: f006 fdff bl 800a78c <HAL_GPIO_Init>
  7930. /* USER CODE BEGIN TIM3_MspPostInit 1 */
  7931. /* USER CODE END TIM3_MspPostInit 1 */
  7932. }
  7933. }
  7934. 8003b8e: e024 b.n 8003bda <HAL_TIM_MspPostInit+0xae>
  7935. else if(htim->Instance==TIM3)
  7936. 8003b90: 687b ldr r3, [r7, #4]
  7937. 8003b92: 681b ldr r3, [r3, #0]
  7938. 8003b94: 4a16 ldr r2, [pc, #88] @ (8003bf0 <HAL_TIM_MspPostInit+0xc4>)
  7939. 8003b96: 4293 cmp r3, r2
  7940. 8003b98: d11f bne.n 8003bda <HAL_TIM_MspPostInit+0xae>
  7941. __HAL_RCC_GPIOC_CLK_ENABLE();
  7942. 8003b9a: 4b13 ldr r3, [pc, #76] @ (8003be8 <HAL_TIM_MspPostInit+0xbc>)
  7943. 8003b9c: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  7944. 8003ba0: 4a11 ldr r2, [pc, #68] @ (8003be8 <HAL_TIM_MspPostInit+0xbc>)
  7945. 8003ba2: f043 0304 orr.w r3, r3, #4
  7946. 8003ba6: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  7947. 8003baa: 4b0f ldr r3, [pc, #60] @ (8003be8 <HAL_TIM_MspPostInit+0xbc>)
  7948. 8003bac: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  7949. 8003bb0: f003 0304 and.w r3, r3, #4
  7950. 8003bb4: 60fb str r3, [r7, #12]
  7951. 8003bb6: 68fb ldr r3, [r7, #12]
  7952. GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9;
  7953. 8003bb8: f44f 7370 mov.w r3, #960 @ 0x3c0
  7954. 8003bbc: 617b str r3, [r7, #20]
  7955. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  7956. 8003bbe: 2302 movs r3, #2
  7957. 8003bc0: 61bb str r3, [r7, #24]
  7958. GPIO_InitStruct.Pull = GPIO_NOPULL;
  7959. 8003bc2: 2300 movs r3, #0
  7960. 8003bc4: 61fb str r3, [r7, #28]
  7961. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
  7962. 8003bc6: 2301 movs r3, #1
  7963. 8003bc8: 623b str r3, [r7, #32]
  7964. GPIO_InitStruct.Alternate = GPIO_AF2_TIM3;
  7965. 8003bca: 2302 movs r3, #2
  7966. 8003bcc: 627b str r3, [r7, #36] @ 0x24
  7967. HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  7968. 8003bce: f107 0314 add.w r3, r7, #20
  7969. 8003bd2: 4619 mov r1, r3
  7970. 8003bd4: 4807 ldr r0, [pc, #28] @ (8003bf4 <HAL_TIM_MspPostInit+0xc8>)
  7971. 8003bd6: f006 fdd9 bl 800a78c <HAL_GPIO_Init>
  7972. }
  7973. 8003bda: bf00 nop
  7974. 8003bdc: 3728 adds r7, #40 @ 0x28
  7975. 8003bde: 46bd mov sp, r7
  7976. 8003be0: bd80 pop {r7, pc}
  7977. 8003be2: bf00 nop
  7978. 8003be4: 40010000 .word 0x40010000
  7979. 8003be8: 58024400 .word 0x58024400
  7980. 8003bec: 58020000 .word 0x58020000
  7981. 8003bf0: 40000400 .word 0x40000400
  7982. 8003bf4: 58020800 .word 0x58020800
  7983. 08003bf8 <HAL_UART_MspInit>:
  7984. * This function configures the hardware resources used in this example
  7985. * @param huart: UART handle pointer
  7986. * @retval None
  7987. */
  7988. void HAL_UART_MspInit(UART_HandleTypeDef* huart)
  7989. {
  7990. 8003bf8: b580 push {r7, lr}
  7991. 8003bfa: b0bc sub sp, #240 @ 0xf0
  7992. 8003bfc: af00 add r7, sp, #0
  7993. 8003bfe: 6078 str r0, [r7, #4]
  7994. GPIO_InitTypeDef GPIO_InitStruct = {0};
  7995. 8003c00: f107 03dc add.w r3, r7, #220 @ 0xdc
  7996. 8003c04: 2200 movs r2, #0
  7997. 8003c06: 601a str r2, [r3, #0]
  7998. 8003c08: 605a str r2, [r3, #4]
  7999. 8003c0a: 609a str r2, [r3, #8]
  8000. 8003c0c: 60da str r2, [r3, #12]
  8001. 8003c0e: 611a str r2, [r3, #16]
  8002. RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
  8003. 8003c10: f107 0318 add.w r3, r7, #24
  8004. 8003c14: 22c0 movs r2, #192 @ 0xc0
  8005. 8003c16: 2100 movs r1, #0
  8006. 8003c18: 4618 mov r0, r3
  8007. 8003c1a: f013 ff9c bl 8017b56 <memset>
  8008. if(huart->Instance==UART8)
  8009. 8003c1e: 687b ldr r3, [r7, #4]
  8010. 8003c20: 681b ldr r3, [r3, #0]
  8011. 8003c22: 4a55 ldr r2, [pc, #340] @ (8003d78 <HAL_UART_MspInit+0x180>)
  8012. 8003c24: 4293 cmp r3, r2
  8013. 8003c26: d14e bne.n 8003cc6 <HAL_UART_MspInit+0xce>
  8014. /* USER CODE END UART8_MspInit 0 */
  8015. /** Initializes the peripherals clock
  8016. */
  8017. PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_UART8;
  8018. 8003c28: f04f 0202 mov.w r2, #2
  8019. 8003c2c: f04f 0300 mov.w r3, #0
  8020. 8003c30: e9c7 2306 strd r2, r3, [r7, #24]
  8021. PeriphClkInitStruct.Usart234578ClockSelection = RCC_USART234578CLKSOURCE_D2PCLK1;
  8022. 8003c34: 2300 movs r3, #0
  8023. 8003c36: f8c7 3090 str.w r3, [r7, #144] @ 0x90
  8024. if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
  8025. 8003c3a: f107 0318 add.w r3, r7, #24
  8026. 8003c3e: 4618 mov r0, r3
  8027. 8003c40: f008 f92c bl 800be9c <HAL_RCCEx_PeriphCLKConfig>
  8028. 8003c44: 4603 mov r3, r0
  8029. 8003c46: 2b00 cmp r3, #0
  8030. 8003c48: d001 beq.n 8003c4e <HAL_UART_MspInit+0x56>
  8031. {
  8032. Error_Handler();
  8033. 8003c4a: f7fe f8e1 bl 8001e10 <Error_Handler>
  8034. }
  8035. /* Peripheral clock enable */
  8036. __HAL_RCC_UART8_CLK_ENABLE();
  8037. 8003c4e: 4b4b ldr r3, [pc, #300] @ (8003d7c <HAL_UART_MspInit+0x184>)
  8038. 8003c50: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  8039. 8003c54: 4a49 ldr r2, [pc, #292] @ (8003d7c <HAL_UART_MspInit+0x184>)
  8040. 8003c56: f043 4300 orr.w r3, r3, #2147483648 @ 0x80000000
  8041. 8003c5a: f8c2 30e8 str.w r3, [r2, #232] @ 0xe8
  8042. 8003c5e: 4b47 ldr r3, [pc, #284] @ (8003d7c <HAL_UART_MspInit+0x184>)
  8043. 8003c60: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  8044. 8003c64: f003 4300 and.w r3, r3, #2147483648 @ 0x80000000
  8045. 8003c68: 617b str r3, [r7, #20]
  8046. 8003c6a: 697b ldr r3, [r7, #20]
  8047. __HAL_RCC_GPIOE_CLK_ENABLE();
  8048. 8003c6c: 4b43 ldr r3, [pc, #268] @ (8003d7c <HAL_UART_MspInit+0x184>)
  8049. 8003c6e: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  8050. 8003c72: 4a42 ldr r2, [pc, #264] @ (8003d7c <HAL_UART_MspInit+0x184>)
  8051. 8003c74: f043 0310 orr.w r3, r3, #16
  8052. 8003c78: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  8053. 8003c7c: 4b3f ldr r3, [pc, #252] @ (8003d7c <HAL_UART_MspInit+0x184>)
  8054. 8003c7e: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  8055. 8003c82: f003 0310 and.w r3, r3, #16
  8056. 8003c86: 613b str r3, [r7, #16]
  8057. 8003c88: 693b ldr r3, [r7, #16]
  8058. /**UART8 GPIO Configuration
  8059. PE0 ------> UART8_RX
  8060. PE1 ------> UART8_TX
  8061. */
  8062. GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;
  8063. 8003c8a: 2303 movs r3, #3
  8064. 8003c8c: f8c7 30dc str.w r3, [r7, #220] @ 0xdc
  8065. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  8066. 8003c90: 2302 movs r3, #2
  8067. 8003c92: f8c7 30e0 str.w r3, [r7, #224] @ 0xe0
  8068. GPIO_InitStruct.Pull = GPIO_NOPULL;
  8069. 8003c96: 2300 movs r3, #0
  8070. 8003c98: f8c7 30e4 str.w r3, [r7, #228] @ 0xe4
  8071. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  8072. 8003c9c: 2300 movs r3, #0
  8073. 8003c9e: f8c7 30e8 str.w r3, [r7, #232] @ 0xe8
  8074. GPIO_InitStruct.Alternate = GPIO_AF8_UART8;
  8075. 8003ca2: 2308 movs r3, #8
  8076. 8003ca4: f8c7 30ec str.w r3, [r7, #236] @ 0xec
  8077. HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
  8078. 8003ca8: f107 03dc add.w r3, r7, #220 @ 0xdc
  8079. 8003cac: 4619 mov r1, r3
  8080. 8003cae: 4834 ldr r0, [pc, #208] @ (8003d80 <HAL_UART_MspInit+0x188>)
  8081. 8003cb0: f006 fd6c bl 800a78c <HAL_GPIO_Init>
  8082. /* UART8 interrupt Init */
  8083. HAL_NVIC_SetPriority(UART8_IRQn, 5, 0);
  8084. 8003cb4: 2200 movs r2, #0
  8085. 8003cb6: 2105 movs r1, #5
  8086. 8003cb8: 2053 movs r0, #83 @ 0x53
  8087. 8003cba: f003 fa35 bl 8007128 <HAL_NVIC_SetPriority>
  8088. HAL_NVIC_EnableIRQ(UART8_IRQn);
  8089. 8003cbe: 2053 movs r0, #83 @ 0x53
  8090. 8003cc0: f003 fa4c bl 800715c <HAL_NVIC_EnableIRQ>
  8091. /* USER CODE BEGIN USART1_MspInit 1 */
  8092. /* USER CODE END USART1_MspInit 1 */
  8093. }
  8094. }
  8095. 8003cc4: e053 b.n 8003d6e <HAL_UART_MspInit+0x176>
  8096. else if(huart->Instance==USART1)
  8097. 8003cc6: 687b ldr r3, [r7, #4]
  8098. 8003cc8: 681b ldr r3, [r3, #0]
  8099. 8003cca: 4a2e ldr r2, [pc, #184] @ (8003d84 <HAL_UART_MspInit+0x18c>)
  8100. 8003ccc: 4293 cmp r3, r2
  8101. 8003cce: d14e bne.n 8003d6e <HAL_UART_MspInit+0x176>
  8102. PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART1;
  8103. 8003cd0: f04f 0201 mov.w r2, #1
  8104. 8003cd4: f04f 0300 mov.w r3, #0
  8105. 8003cd8: e9c7 2306 strd r2, r3, [r7, #24]
  8106. PeriphClkInitStruct.Usart16ClockSelection = RCC_USART16CLKSOURCE_D2PCLK2;
  8107. 8003cdc: 2300 movs r3, #0
  8108. 8003cde: f8c7 3094 str.w r3, [r7, #148] @ 0x94
  8109. if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
  8110. 8003ce2: f107 0318 add.w r3, r7, #24
  8111. 8003ce6: 4618 mov r0, r3
  8112. 8003ce8: f008 f8d8 bl 800be9c <HAL_RCCEx_PeriphCLKConfig>
  8113. 8003cec: 4603 mov r3, r0
  8114. 8003cee: 2b00 cmp r3, #0
  8115. 8003cf0: d001 beq.n 8003cf6 <HAL_UART_MspInit+0xfe>
  8116. Error_Handler();
  8117. 8003cf2: f7fe f88d bl 8001e10 <Error_Handler>
  8118. __HAL_RCC_USART1_CLK_ENABLE();
  8119. 8003cf6: 4b21 ldr r3, [pc, #132] @ (8003d7c <HAL_UART_MspInit+0x184>)
  8120. 8003cf8: f8d3 30f0 ldr.w r3, [r3, #240] @ 0xf0
  8121. 8003cfc: 4a1f ldr r2, [pc, #124] @ (8003d7c <HAL_UART_MspInit+0x184>)
  8122. 8003cfe: f043 0310 orr.w r3, r3, #16
  8123. 8003d02: f8c2 30f0 str.w r3, [r2, #240] @ 0xf0
  8124. 8003d06: 4b1d ldr r3, [pc, #116] @ (8003d7c <HAL_UART_MspInit+0x184>)
  8125. 8003d08: f8d3 30f0 ldr.w r3, [r3, #240] @ 0xf0
  8126. 8003d0c: f003 0310 and.w r3, r3, #16
  8127. 8003d10: 60fb str r3, [r7, #12]
  8128. 8003d12: 68fb ldr r3, [r7, #12]
  8129. __HAL_RCC_GPIOB_CLK_ENABLE();
  8130. 8003d14: 4b19 ldr r3, [pc, #100] @ (8003d7c <HAL_UART_MspInit+0x184>)
  8131. 8003d16: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  8132. 8003d1a: 4a18 ldr r2, [pc, #96] @ (8003d7c <HAL_UART_MspInit+0x184>)
  8133. 8003d1c: f043 0302 orr.w r3, r3, #2
  8134. 8003d20: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  8135. 8003d24: 4b15 ldr r3, [pc, #84] @ (8003d7c <HAL_UART_MspInit+0x184>)
  8136. 8003d26: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  8137. 8003d2a: f003 0302 and.w r3, r3, #2
  8138. 8003d2e: 60bb str r3, [r7, #8]
  8139. 8003d30: 68bb ldr r3, [r7, #8]
  8140. GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15;
  8141. 8003d32: f44f 4340 mov.w r3, #49152 @ 0xc000
  8142. 8003d36: f8c7 30dc str.w r3, [r7, #220] @ 0xdc
  8143. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  8144. 8003d3a: 2302 movs r3, #2
  8145. 8003d3c: f8c7 30e0 str.w r3, [r7, #224] @ 0xe0
  8146. GPIO_InitStruct.Pull = GPIO_NOPULL;
  8147. 8003d40: 2300 movs r3, #0
  8148. 8003d42: f8c7 30e4 str.w r3, [r7, #228] @ 0xe4
  8149. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  8150. 8003d46: 2300 movs r3, #0
  8151. 8003d48: f8c7 30e8 str.w r3, [r7, #232] @ 0xe8
  8152. GPIO_InitStruct.Alternate = GPIO_AF4_USART1;
  8153. 8003d4c: 2304 movs r3, #4
  8154. 8003d4e: f8c7 30ec str.w r3, [r7, #236] @ 0xec
  8155. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  8156. 8003d52: f107 03dc add.w r3, r7, #220 @ 0xdc
  8157. 8003d56: 4619 mov r1, r3
  8158. 8003d58: 480b ldr r0, [pc, #44] @ (8003d88 <HAL_UART_MspInit+0x190>)
  8159. 8003d5a: f006 fd17 bl 800a78c <HAL_GPIO_Init>
  8160. HAL_NVIC_SetPriority(USART1_IRQn, 5, 0);
  8161. 8003d5e: 2200 movs r2, #0
  8162. 8003d60: 2105 movs r1, #5
  8163. 8003d62: 2025 movs r0, #37 @ 0x25
  8164. 8003d64: f003 f9e0 bl 8007128 <HAL_NVIC_SetPriority>
  8165. HAL_NVIC_EnableIRQ(USART1_IRQn);
  8166. 8003d68: 2025 movs r0, #37 @ 0x25
  8167. 8003d6a: f003 f9f7 bl 800715c <HAL_NVIC_EnableIRQ>
  8168. }
  8169. 8003d6e: bf00 nop
  8170. 8003d70: 37f0 adds r7, #240 @ 0xf0
  8171. 8003d72: 46bd mov sp, r7
  8172. 8003d74: bd80 pop {r7, pc}
  8173. 8003d76: bf00 nop
  8174. 8003d78: 40007c00 .word 0x40007c00
  8175. 8003d7c: 58024400 .word 0x58024400
  8176. 8003d80: 58021000 .word 0x58021000
  8177. 8003d84: 40011000 .word 0x40011000
  8178. 8003d88: 58020400 .word 0x58020400
  8179. 08003d8c <HAL_InitTick>:
  8180. * reset by HAL_Init() or at any time when clock is configured, by HAL_RCC_ClockConfig().
  8181. * @param TickPriority: Tick interrupt priority.
  8182. * @retval HAL status
  8183. */
  8184. HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
  8185. {
  8186. 8003d8c: b580 push {r7, lr}
  8187. 8003d8e: b090 sub sp, #64 @ 0x40
  8188. 8003d90: af00 add r7, sp, #0
  8189. 8003d92: 6078 str r0, [r7, #4]
  8190. uint32_t uwTimclock, uwAPB1Prescaler;
  8191. uint32_t uwPrescalerValue;
  8192. uint32_t pFLatency;
  8193. /*Configure the TIM6 IRQ priority */
  8194. if (TickPriority < (1UL << __NVIC_PRIO_BITS))
  8195. 8003d94: 687b ldr r3, [r7, #4]
  8196. 8003d96: 2b0f cmp r3, #15
  8197. 8003d98: d827 bhi.n 8003dea <HAL_InitTick+0x5e>
  8198. {
  8199. HAL_NVIC_SetPriority(TIM6_DAC_IRQn, TickPriority ,0U);
  8200. 8003d9a: 2200 movs r2, #0
  8201. 8003d9c: 6879 ldr r1, [r7, #4]
  8202. 8003d9e: 2036 movs r0, #54 @ 0x36
  8203. 8003da0: f003 f9c2 bl 8007128 <HAL_NVIC_SetPriority>
  8204. /* Enable the TIM6 global Interrupt */
  8205. HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn);
  8206. 8003da4: 2036 movs r0, #54 @ 0x36
  8207. 8003da6: f003 f9d9 bl 800715c <HAL_NVIC_EnableIRQ>
  8208. uwTickPrio = TickPriority;
  8209. 8003daa: 4a29 ldr r2, [pc, #164] @ (8003e50 <HAL_InitTick+0xc4>)
  8210. 8003dac: 687b ldr r3, [r7, #4]
  8211. 8003dae: 6013 str r3, [r2, #0]
  8212. {
  8213. return HAL_ERROR;
  8214. }
  8215. /* Enable TIM6 clock */
  8216. __HAL_RCC_TIM6_CLK_ENABLE();
  8217. 8003db0: 4b28 ldr r3, [pc, #160] @ (8003e54 <HAL_InitTick+0xc8>)
  8218. 8003db2: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  8219. 8003db6: 4a27 ldr r2, [pc, #156] @ (8003e54 <HAL_InitTick+0xc8>)
  8220. 8003db8: f043 0310 orr.w r3, r3, #16
  8221. 8003dbc: f8c2 30e8 str.w r3, [r2, #232] @ 0xe8
  8222. 8003dc0: 4b24 ldr r3, [pc, #144] @ (8003e54 <HAL_InitTick+0xc8>)
  8223. 8003dc2: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  8224. 8003dc6: f003 0310 and.w r3, r3, #16
  8225. 8003dca: 60fb str r3, [r7, #12]
  8226. 8003dcc: 68fb ldr r3, [r7, #12]
  8227. /* Get clock configuration */
  8228. HAL_RCC_GetClockConfig(&clkconfig, &pFLatency);
  8229. 8003dce: f107 0210 add.w r2, r7, #16
  8230. 8003dd2: f107 0314 add.w r3, r7, #20
  8231. 8003dd6: 4611 mov r1, r2
  8232. 8003dd8: 4618 mov r0, r3
  8233. 8003dda: f008 f81d bl 800be18 <HAL_RCC_GetClockConfig>
  8234. /* Get APB1 prescaler */
  8235. uwAPB1Prescaler = clkconfig.APB1CLKDivider;
  8236. 8003dde: 6abb ldr r3, [r7, #40] @ 0x28
  8237. 8003de0: 63bb str r3, [r7, #56] @ 0x38
  8238. /* Compute TIM6 clock */
  8239. if (uwAPB1Prescaler == RCC_HCLK_DIV1)
  8240. 8003de2: 6bbb ldr r3, [r7, #56] @ 0x38
  8241. 8003de4: 2b00 cmp r3, #0
  8242. 8003de6: d106 bne.n 8003df6 <HAL_InitTick+0x6a>
  8243. 8003de8: e001 b.n 8003dee <HAL_InitTick+0x62>
  8244. return HAL_ERROR;
  8245. 8003dea: 2301 movs r3, #1
  8246. 8003dec: e02b b.n 8003e46 <HAL_InitTick+0xba>
  8247. {
  8248. uwTimclock = HAL_RCC_GetPCLK1Freq();
  8249. 8003dee: f007 ffe7 bl 800bdc0 <HAL_RCC_GetPCLK1Freq>
  8250. 8003df2: 63f8 str r0, [r7, #60] @ 0x3c
  8251. 8003df4: e004 b.n 8003e00 <HAL_InitTick+0x74>
  8252. }
  8253. else
  8254. {
  8255. uwTimclock = 2UL * HAL_RCC_GetPCLK1Freq();
  8256. 8003df6: f007 ffe3 bl 800bdc0 <HAL_RCC_GetPCLK1Freq>
  8257. 8003dfa: 4603 mov r3, r0
  8258. 8003dfc: 005b lsls r3, r3, #1
  8259. 8003dfe: 63fb str r3, [r7, #60] @ 0x3c
  8260. }
  8261. /* Compute the prescaler value to have TIM6 counter clock equal to 1MHz */
  8262. uwPrescalerValue = (uint32_t) ((uwTimclock / 1000000U) - 1U);
  8263. 8003e00: 6bfb ldr r3, [r7, #60] @ 0x3c
  8264. 8003e02: 4a15 ldr r2, [pc, #84] @ (8003e58 <HAL_InitTick+0xcc>)
  8265. 8003e04: fba2 2303 umull r2, r3, r2, r3
  8266. 8003e08: 0c9b lsrs r3, r3, #18
  8267. 8003e0a: 3b01 subs r3, #1
  8268. 8003e0c: 637b str r3, [r7, #52] @ 0x34
  8269. /* Initialize TIM6 */
  8270. htim6.Instance = TIM6;
  8271. 8003e0e: 4b13 ldr r3, [pc, #76] @ (8003e5c <HAL_InitTick+0xd0>)
  8272. 8003e10: 4a13 ldr r2, [pc, #76] @ (8003e60 <HAL_InitTick+0xd4>)
  8273. 8003e12: 601a str r2, [r3, #0]
  8274. + Period = [(TIM6CLK/1000) - 1]. to have a (1/1000) s time base.
  8275. + Prescaler = (uwTimclock/1000000 - 1) to have a 1MHz counter clock.
  8276. + ClockDivision = 0
  8277. + Counter direction = Up
  8278. */
  8279. htim6.Init.Period = (1000000U / 1000U) - 1U;
  8280. 8003e14: 4b11 ldr r3, [pc, #68] @ (8003e5c <HAL_InitTick+0xd0>)
  8281. 8003e16: f240 32e7 movw r2, #999 @ 0x3e7
  8282. 8003e1a: 60da str r2, [r3, #12]
  8283. htim6.Init.Prescaler = uwPrescalerValue;
  8284. 8003e1c: 4a0f ldr r2, [pc, #60] @ (8003e5c <HAL_InitTick+0xd0>)
  8285. 8003e1e: 6b7b ldr r3, [r7, #52] @ 0x34
  8286. 8003e20: 6053 str r3, [r2, #4]
  8287. htim6.Init.ClockDivision = 0;
  8288. 8003e22: 4b0e ldr r3, [pc, #56] @ (8003e5c <HAL_InitTick+0xd0>)
  8289. 8003e24: 2200 movs r2, #0
  8290. 8003e26: 611a str r2, [r3, #16]
  8291. htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
  8292. 8003e28: 4b0c ldr r3, [pc, #48] @ (8003e5c <HAL_InitTick+0xd0>)
  8293. 8003e2a: 2200 movs r2, #0
  8294. 8003e2c: 609a str r2, [r3, #8]
  8295. if(HAL_TIM_Base_Init(&htim6) == HAL_OK)
  8296. 8003e2e: 480b ldr r0, [pc, #44] @ (8003e5c <HAL_InitTick+0xd0>)
  8297. 8003e30: f00a fd78 bl 800e924 <HAL_TIM_Base_Init>
  8298. 8003e34: 4603 mov r3, r0
  8299. 8003e36: 2b00 cmp r3, #0
  8300. 8003e38: d104 bne.n 8003e44 <HAL_InitTick+0xb8>
  8301. {
  8302. /* Start the TIM time Base generation in interrupt mode */
  8303. return HAL_TIM_Base_Start_IT(&htim6);
  8304. 8003e3a: 4808 ldr r0, [pc, #32] @ (8003e5c <HAL_InitTick+0xd0>)
  8305. 8003e3c: f00a fe3a bl 800eab4 <HAL_TIM_Base_Start_IT>
  8306. 8003e40: 4603 mov r3, r0
  8307. 8003e42: e000 b.n 8003e46 <HAL_InitTick+0xba>
  8308. }
  8309. /* Return function status */
  8310. return HAL_ERROR;
  8311. 8003e44: 2301 movs r3, #1
  8312. }
  8313. 8003e46: 4618 mov r0, r3
  8314. 8003e48: 3740 adds r7, #64 @ 0x40
  8315. 8003e4a: 46bd mov sp, r7
  8316. 8003e4c: bd80 pop {r7, pc}
  8317. 8003e4e: bf00 nop
  8318. 8003e50: 2400003c .word 0x2400003c
  8319. 8003e54: 58024400 .word 0x58024400
  8320. 8003e58: 431bde83 .word 0x431bde83
  8321. 8003e5c: 24000864 .word 0x24000864
  8322. 8003e60: 40001000 .word 0x40001000
  8323. 08003e64 <NMI_Handler>:
  8324. /******************************************************************************/
  8325. /**
  8326. * @brief This function handles Non maskable interrupt.
  8327. */
  8328. void NMI_Handler(void)
  8329. {
  8330. 8003e64: b480 push {r7}
  8331. 8003e66: af00 add r7, sp, #0
  8332. /* USER CODE BEGIN NonMaskableInt_IRQn 0 */
  8333. /* USER CODE END NonMaskableInt_IRQn 0 */
  8334. /* USER CODE BEGIN NonMaskableInt_IRQn 1 */
  8335. while (1)
  8336. 8003e68: bf00 nop
  8337. 8003e6a: e7fd b.n 8003e68 <NMI_Handler+0x4>
  8338. 08003e6c <HardFault_Handler>:
  8339. /**
  8340. * @brief This function handles Hard fault interrupt.
  8341. */
  8342. void HardFault_Handler(void)
  8343. {
  8344. 8003e6c: b480 push {r7}
  8345. 8003e6e: af00 add r7, sp, #0
  8346. /* USER CODE BEGIN HardFault_IRQn 0 */
  8347. /* USER CODE END HardFault_IRQn 0 */
  8348. while (1)
  8349. 8003e70: bf00 nop
  8350. 8003e72: e7fd b.n 8003e70 <HardFault_Handler+0x4>
  8351. 08003e74 <MemManage_Handler>:
  8352. /**
  8353. * @brief This function handles Memory management fault.
  8354. */
  8355. void MemManage_Handler(void)
  8356. {
  8357. 8003e74: b480 push {r7}
  8358. 8003e76: af00 add r7, sp, #0
  8359. /* USER CODE BEGIN MemoryManagement_IRQn 0 */
  8360. /* USER CODE END MemoryManagement_IRQn 0 */
  8361. while (1)
  8362. 8003e78: bf00 nop
  8363. 8003e7a: e7fd b.n 8003e78 <MemManage_Handler+0x4>
  8364. 08003e7c <BusFault_Handler>:
  8365. /**
  8366. * @brief This function handles Pre-fetch fault, memory access fault.
  8367. */
  8368. void BusFault_Handler(void)
  8369. {
  8370. 8003e7c: b480 push {r7}
  8371. 8003e7e: af00 add r7, sp, #0
  8372. /* USER CODE BEGIN BusFault_IRQn 0 */
  8373. /* USER CODE END BusFault_IRQn 0 */
  8374. while (1)
  8375. 8003e80: bf00 nop
  8376. 8003e82: e7fd b.n 8003e80 <BusFault_Handler+0x4>
  8377. 08003e84 <UsageFault_Handler>:
  8378. /**
  8379. * @brief This function handles Undefined instruction or illegal state.
  8380. */
  8381. void UsageFault_Handler(void)
  8382. {
  8383. 8003e84: b480 push {r7}
  8384. 8003e86: af00 add r7, sp, #0
  8385. /* USER CODE BEGIN UsageFault_IRQn 0 */
  8386. /* USER CODE END UsageFault_IRQn 0 */
  8387. while (1)
  8388. 8003e88: bf00 nop
  8389. 8003e8a: e7fd b.n 8003e88 <UsageFault_Handler+0x4>
  8390. 08003e8c <DebugMon_Handler>:
  8391. /**
  8392. * @brief This function handles Debug monitor.
  8393. */
  8394. void DebugMon_Handler(void)
  8395. {
  8396. 8003e8c: b480 push {r7}
  8397. 8003e8e: af00 add r7, sp, #0
  8398. /* USER CODE END DebugMonitor_IRQn 0 */
  8399. /* USER CODE BEGIN DebugMonitor_IRQn 1 */
  8400. /* USER CODE END DebugMonitor_IRQn 1 */
  8401. }
  8402. 8003e90: bf00 nop
  8403. 8003e92: 46bd mov sp, r7
  8404. 8003e94: f85d 7b04 ldr.w r7, [sp], #4
  8405. 8003e98: 4770 bx lr
  8406. 08003e9a <RCC_IRQHandler>:
  8407. /**
  8408. * @brief This function handles RCC global interrupt.
  8409. */
  8410. void RCC_IRQHandler(void)
  8411. {
  8412. 8003e9a: b480 push {r7}
  8413. 8003e9c: af00 add r7, sp, #0
  8414. /* USER CODE END RCC_IRQn 0 */
  8415. /* USER CODE BEGIN RCC_IRQn 1 */
  8416. /* USER CODE END RCC_IRQn 1 */
  8417. }
  8418. 8003e9e: bf00 nop
  8419. 8003ea0: 46bd mov sp, r7
  8420. 8003ea2: f85d 7b04 ldr.w r7, [sp], #4
  8421. 8003ea6: 4770 bx lr
  8422. 08003ea8 <DMA1_Stream0_IRQHandler>:
  8423. /**
  8424. * @brief This function handles DMA1 stream0 global interrupt.
  8425. */
  8426. void DMA1_Stream0_IRQHandler(void)
  8427. {
  8428. 8003ea8: b580 push {r7, lr}
  8429. 8003eaa: af00 add r7, sp, #0
  8430. /* USER CODE BEGIN DMA1_Stream0_IRQn 0 */
  8431. /* USER CODE END DMA1_Stream0_IRQn 0 */
  8432. HAL_DMA_IRQHandler(&hdma_adc1);
  8433. 8003eac: 4802 ldr r0, [pc, #8] @ (8003eb8 <DMA1_Stream0_IRQHandler+0x10>)
  8434. 8003eae: f005 f95b bl 8009168 <HAL_DMA_IRQHandler>
  8435. /* USER CODE BEGIN DMA1_Stream0_IRQn 1 */
  8436. /* USER CODE END DMA1_Stream0_IRQn 1 */
  8437. }
  8438. 8003eb2: bf00 nop
  8439. 8003eb4: bd80 pop {r7, pc}
  8440. 8003eb6: bf00 nop
  8441. 8003eb8: 2400026c .word 0x2400026c
  8442. 08003ebc <DMA1_Stream1_IRQHandler>:
  8443. /**
  8444. * @brief This function handles DMA1 stream1 global interrupt.
  8445. */
  8446. void DMA1_Stream1_IRQHandler(void)
  8447. {
  8448. 8003ebc: b580 push {r7, lr}
  8449. 8003ebe: af00 add r7, sp, #0
  8450. /* USER CODE BEGIN DMA1_Stream1_IRQn 0 */
  8451. /* USER CODE END DMA1_Stream1_IRQn 0 */
  8452. HAL_DMA_IRQHandler(&hdma_adc2);
  8453. 8003ec0: 4802 ldr r0, [pc, #8] @ (8003ecc <DMA1_Stream1_IRQHandler+0x10>)
  8454. 8003ec2: f005 f951 bl 8009168 <HAL_DMA_IRQHandler>
  8455. /* USER CODE BEGIN DMA1_Stream1_IRQn 1 */
  8456. /* USER CODE END DMA1_Stream1_IRQn 1 */
  8457. }
  8458. 8003ec6: bf00 nop
  8459. 8003ec8: bd80 pop {r7, pc}
  8460. 8003eca: bf00 nop
  8461. 8003ecc: 240002e4 .word 0x240002e4
  8462. 08003ed0 <DMA1_Stream2_IRQHandler>:
  8463. /**
  8464. * @brief This function handles DMA1 stream2 global interrupt.
  8465. */
  8466. void DMA1_Stream2_IRQHandler(void)
  8467. {
  8468. 8003ed0: b580 push {r7, lr}
  8469. 8003ed2: af00 add r7, sp, #0
  8470. /* USER CODE BEGIN DMA1_Stream2_IRQn 0 */
  8471. /* USER CODE END DMA1_Stream2_IRQn 0 */
  8472. HAL_DMA_IRQHandler(&hdma_adc3);
  8473. 8003ed4: 4802 ldr r0, [pc, #8] @ (8003ee0 <DMA1_Stream2_IRQHandler+0x10>)
  8474. 8003ed6: f005 f947 bl 8009168 <HAL_DMA_IRQHandler>
  8475. /* USER CODE BEGIN DMA1_Stream2_IRQn 1 */
  8476. /* USER CODE END DMA1_Stream2_IRQn 1 */
  8477. }
  8478. 8003eda: bf00 nop
  8479. 8003edc: bd80 pop {r7, pc}
  8480. 8003ede: bf00 nop
  8481. 8003ee0: 2400035c .word 0x2400035c
  8482. 08003ee4 <EXTI9_5_IRQHandler>:
  8483. /**
  8484. * @brief This function handles EXTI line[9:5] interrupts.
  8485. */
  8486. void EXTI9_5_IRQHandler(void)
  8487. {
  8488. 8003ee4: b580 push {r7, lr}
  8489. 8003ee6: af00 add r7, sp, #0
  8490. /* USER CODE BEGIN EXTI9_5_IRQn 0 */
  8491. /* USER CODE END EXTI9_5_IRQn 0 */
  8492. HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_8);
  8493. 8003ee8: f44f 7080 mov.w r0, #256 @ 0x100
  8494. 8003eec: f006 fe49 bl 800ab82 <HAL_GPIO_EXTI_IRQHandler>
  8495. HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_9);
  8496. 8003ef0: f44f 7000 mov.w r0, #512 @ 0x200
  8497. 8003ef4: f006 fe45 bl 800ab82 <HAL_GPIO_EXTI_IRQHandler>
  8498. /* USER CODE BEGIN EXTI9_5_IRQn 1 */
  8499. /* USER CODE END EXTI9_5_IRQn 1 */
  8500. }
  8501. 8003ef8: bf00 nop
  8502. 8003efa: bd80 pop {r7, pc}
  8503. 08003efc <TIM2_IRQHandler>:
  8504. /**
  8505. * @brief This function handles TIM2 global interrupt.
  8506. */
  8507. void TIM2_IRQHandler(void)
  8508. {
  8509. 8003efc: b580 push {r7, lr}
  8510. 8003efe: af00 add r7, sp, #0
  8511. /* USER CODE BEGIN TIM2_IRQn 0 */
  8512. /* USER CODE END TIM2_IRQn 0 */
  8513. HAL_TIM_IRQHandler(&htim2);
  8514. 8003f00: 4802 ldr r0, [pc, #8] @ (8003f0c <TIM2_IRQHandler+0x10>)
  8515. 8003f02: f00b f9fd bl 800f300 <HAL_TIM_IRQHandler>
  8516. /* USER CODE BEGIN TIM2_IRQn 1 */
  8517. /* USER CODE END TIM2_IRQn 1 */
  8518. }
  8519. 8003f06: bf00 nop
  8520. 8003f08: bd80 pop {r7, pc}
  8521. 8003f0a: bf00 nop
  8522. 8003f0c: 24000498 .word 0x24000498
  8523. 08003f10 <TIM4_IRQHandler>:
  8524. /**
  8525. * @brief This function handles TIM4 global interrupt.
  8526. */
  8527. void TIM4_IRQHandler(void)
  8528. {
  8529. 8003f10: b580 push {r7, lr}
  8530. 8003f12: af00 add r7, sp, #0
  8531. /* USER CODE BEGIN TIM4_IRQn 0 */
  8532. /* USER CODE END TIM4_IRQn 0 */
  8533. HAL_TIM_IRQHandler(&htim4);
  8534. 8003f14: 4802 ldr r0, [pc, #8] @ (8003f20 <TIM4_IRQHandler+0x10>)
  8535. 8003f16: f00b f9f3 bl 800f300 <HAL_TIM_IRQHandler>
  8536. /* USER CODE BEGIN TIM4_IRQn 1 */
  8537. /* USER CODE END TIM4_IRQn 1 */
  8538. }
  8539. 8003f1a: bf00 nop
  8540. 8003f1c: bd80 pop {r7, pc}
  8541. 8003f1e: bf00 nop
  8542. 8003f20: 24000530 .word 0x24000530
  8543. 08003f24 <USART1_IRQHandler>:
  8544. /**
  8545. * @brief This function handles USART1 global interrupt.
  8546. */
  8547. void USART1_IRQHandler(void)
  8548. {
  8549. 8003f24: b580 push {r7, lr}
  8550. 8003f26: af00 add r7, sp, #0
  8551. /* USER CODE BEGIN USART1_IRQn 0 */
  8552. /* USER CODE END USART1_IRQn 0 */
  8553. HAL_UART_IRQHandler(&huart1);
  8554. 8003f28: 4802 ldr r0, [pc, #8] @ (8003f34 <USART1_IRQHandler+0x10>)
  8555. 8003f2a: f00c fe3b bl 8010ba4 <HAL_UART_IRQHandler>
  8556. /* USER CODE BEGIN USART1_IRQn 1 */
  8557. /* USER CODE END USART1_IRQn 1 */
  8558. }
  8559. 8003f2e: bf00 nop
  8560. 8003f30: bd80 pop {r7, pc}
  8561. 8003f32: bf00 nop
  8562. 8003f34: 24000610 .word 0x24000610
  8563. 08003f38 <EXTI15_10_IRQHandler>:
  8564. /**
  8565. * @brief This function handles EXTI line[15:10] interrupts.
  8566. */
  8567. void EXTI15_10_IRQHandler(void)
  8568. {
  8569. 8003f38: b580 push {r7, lr}
  8570. 8003f3a: af00 add r7, sp, #0
  8571. /* USER CODE BEGIN EXTI15_10_IRQn 0 */
  8572. /* USER CODE END EXTI15_10_IRQn 0 */
  8573. HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_10);
  8574. 8003f3c: f44f 6080 mov.w r0, #1024 @ 0x400
  8575. 8003f40: f006 fe1f bl 800ab82 <HAL_GPIO_EXTI_IRQHandler>
  8576. HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_11);
  8577. 8003f44: f44f 6000 mov.w r0, #2048 @ 0x800
  8578. 8003f48: f006 fe1b bl 800ab82 <HAL_GPIO_EXTI_IRQHandler>
  8579. HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_12);
  8580. 8003f4c: f44f 5080 mov.w r0, #4096 @ 0x1000
  8581. 8003f50: f006 fe17 bl 800ab82 <HAL_GPIO_EXTI_IRQHandler>
  8582. HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13);
  8583. 8003f54: f44f 5000 mov.w r0, #8192 @ 0x2000
  8584. 8003f58: f006 fe13 bl 800ab82 <HAL_GPIO_EXTI_IRQHandler>
  8585. /* USER CODE BEGIN EXTI15_10_IRQn 1 */
  8586. /* USER CODE END EXTI15_10_IRQn 1 */
  8587. }
  8588. 8003f5c: bf00 nop
  8589. 8003f5e: bd80 pop {r7, pc}
  8590. 08003f60 <TIM6_DAC_IRQHandler>:
  8591. /**
  8592. * @brief This function handles TIM6 global interrupt, DAC1_CH1 and DAC1_CH2 underrun error interrupts.
  8593. */
  8594. void TIM6_DAC_IRQHandler(void)
  8595. {
  8596. 8003f60: b580 push {r7, lr}
  8597. 8003f62: af00 add r7, sp, #0
  8598. /* USER CODE BEGIN TIM6_DAC_IRQn 0 */
  8599. /* USER CODE END TIM6_DAC_IRQn 0 */
  8600. if (hdac1.State != HAL_DAC_STATE_RESET) {
  8601. 8003f64: 4b06 ldr r3, [pc, #24] @ (8003f80 <TIM6_DAC_IRQHandler+0x20>)
  8602. 8003f66: 791b ldrb r3, [r3, #4]
  8603. 8003f68: b2db uxtb r3, r3
  8604. 8003f6a: 2b00 cmp r3, #0
  8605. 8003f6c: d002 beq.n 8003f74 <TIM6_DAC_IRQHandler+0x14>
  8606. HAL_DAC_IRQHandler(&hdac1);
  8607. 8003f6e: 4804 ldr r0, [pc, #16] @ (8003f80 <TIM6_DAC_IRQHandler+0x20>)
  8608. 8003f70: f003 fbf9 bl 8007766 <HAL_DAC_IRQHandler>
  8609. }
  8610. HAL_TIM_IRQHandler(&htim6);
  8611. 8003f74: 4803 ldr r0, [pc, #12] @ (8003f84 <TIM6_DAC_IRQHandler+0x24>)
  8612. 8003f76: f00b f9c3 bl 800f300 <HAL_TIM_IRQHandler>
  8613. /* USER CODE BEGIN TIM6_DAC_IRQn 1 */
  8614. /* USER CODE END TIM6_DAC_IRQn 1 */
  8615. }
  8616. 8003f7a: bf00 nop
  8617. 8003f7c: bd80 pop {r7, pc}
  8618. 8003f7e: bf00 nop
  8619. 8003f80: 24000424 .word 0x24000424
  8620. 8003f84: 24000864 .word 0x24000864
  8621. 08003f88 <UART8_IRQHandler>:
  8622. /**
  8623. * @brief This function handles UART8 global interrupt.
  8624. */
  8625. void UART8_IRQHandler(void)
  8626. {
  8627. 8003f88: b580 push {r7, lr}
  8628. 8003f8a: af00 add r7, sp, #0
  8629. /* USER CODE BEGIN UART8_IRQn 0 */
  8630. /* USER CODE END UART8_IRQn 0 */
  8631. HAL_UART_IRQHandler(&huart8);
  8632. 8003f8c: 4802 ldr r0, [pc, #8] @ (8003f98 <UART8_IRQHandler+0x10>)
  8633. 8003f8e: f00c fe09 bl 8010ba4 <HAL_UART_IRQHandler>
  8634. /* USER CODE BEGIN UART8_IRQn 1 */
  8635. /* USER CODE END UART8_IRQn 1 */
  8636. }
  8637. 8003f92: bf00 nop
  8638. 8003f94: bd80 pop {r7, pc}
  8639. 8003f96: bf00 nop
  8640. 8003f98: 2400057c .word 0x2400057c
  8641. 08003f9c <_read>:
  8642. _kill(status, -1);
  8643. while (1) {} /* Make sure we hang here */
  8644. }
  8645. __attribute__((weak)) int _read(int file, char *ptr, int len)
  8646. {
  8647. 8003f9c: b580 push {r7, lr}
  8648. 8003f9e: b086 sub sp, #24
  8649. 8003fa0: af00 add r7, sp, #0
  8650. 8003fa2: 60f8 str r0, [r7, #12]
  8651. 8003fa4: 60b9 str r1, [r7, #8]
  8652. 8003fa6: 607a str r2, [r7, #4]
  8653. (void)file;
  8654. int DataIdx;
  8655. for (DataIdx = 0; DataIdx < len; DataIdx++)
  8656. 8003fa8: 2300 movs r3, #0
  8657. 8003faa: 617b str r3, [r7, #20]
  8658. 8003fac: e00a b.n 8003fc4 <_read+0x28>
  8659. {
  8660. *ptr++ = __io_getchar();
  8661. 8003fae: f3af 8000 nop.w
  8662. 8003fb2: 4601 mov r1, r0
  8663. 8003fb4: 68bb ldr r3, [r7, #8]
  8664. 8003fb6: 1c5a adds r2, r3, #1
  8665. 8003fb8: 60ba str r2, [r7, #8]
  8666. 8003fba: b2ca uxtb r2, r1
  8667. 8003fbc: 701a strb r2, [r3, #0]
  8668. for (DataIdx = 0; DataIdx < len; DataIdx++)
  8669. 8003fbe: 697b ldr r3, [r7, #20]
  8670. 8003fc0: 3301 adds r3, #1
  8671. 8003fc2: 617b str r3, [r7, #20]
  8672. 8003fc4: 697a ldr r2, [r7, #20]
  8673. 8003fc6: 687b ldr r3, [r7, #4]
  8674. 8003fc8: 429a cmp r2, r3
  8675. 8003fca: dbf0 blt.n 8003fae <_read+0x12>
  8676. }
  8677. return len;
  8678. 8003fcc: 687b ldr r3, [r7, #4]
  8679. }
  8680. 8003fce: 4618 mov r0, r3
  8681. 8003fd0: 3718 adds r7, #24
  8682. 8003fd2: 46bd mov sp, r7
  8683. 8003fd4: bd80 pop {r7, pc}
  8684. 08003fd6 <_write>:
  8685. __attribute__((weak)) int _write(int file, char *ptr, int len)
  8686. {
  8687. 8003fd6: b580 push {r7, lr}
  8688. 8003fd8: b086 sub sp, #24
  8689. 8003fda: af00 add r7, sp, #0
  8690. 8003fdc: 60f8 str r0, [r7, #12]
  8691. 8003fde: 60b9 str r1, [r7, #8]
  8692. 8003fe0: 607a str r2, [r7, #4]
  8693. (void)file;
  8694. int DataIdx;
  8695. for (DataIdx = 0; DataIdx < len; DataIdx++)
  8696. 8003fe2: 2300 movs r3, #0
  8697. 8003fe4: 617b str r3, [r7, #20]
  8698. 8003fe6: e009 b.n 8003ffc <_write+0x26>
  8699. {
  8700. __io_putchar(*ptr++);
  8701. 8003fe8: 68bb ldr r3, [r7, #8]
  8702. 8003fea: 1c5a adds r2, r3, #1
  8703. 8003fec: 60ba str r2, [r7, #8]
  8704. 8003fee: 781b ldrb r3, [r3, #0]
  8705. 8003ff0: 4618 mov r0, r3
  8706. 8003ff2: f7fc fb49 bl 8000688 <__io_putchar>
  8707. for (DataIdx = 0; DataIdx < len; DataIdx++)
  8708. 8003ff6: 697b ldr r3, [r7, #20]
  8709. 8003ff8: 3301 adds r3, #1
  8710. 8003ffa: 617b str r3, [r7, #20]
  8711. 8003ffc: 697a ldr r2, [r7, #20]
  8712. 8003ffe: 687b ldr r3, [r7, #4]
  8713. 8004000: 429a cmp r2, r3
  8714. 8004002: dbf1 blt.n 8003fe8 <_write+0x12>
  8715. }
  8716. return len;
  8717. 8004004: 687b ldr r3, [r7, #4]
  8718. }
  8719. 8004006: 4618 mov r0, r3
  8720. 8004008: 3718 adds r7, #24
  8721. 800400a: 46bd mov sp, r7
  8722. 800400c: bd80 pop {r7, pc}
  8723. 0800400e <_close>:
  8724. int _close(int file)
  8725. {
  8726. 800400e: b480 push {r7}
  8727. 8004010: b083 sub sp, #12
  8728. 8004012: af00 add r7, sp, #0
  8729. 8004014: 6078 str r0, [r7, #4]
  8730. (void)file;
  8731. return -1;
  8732. 8004016: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  8733. }
  8734. 800401a: 4618 mov r0, r3
  8735. 800401c: 370c adds r7, #12
  8736. 800401e: 46bd mov sp, r7
  8737. 8004020: f85d 7b04 ldr.w r7, [sp], #4
  8738. 8004024: 4770 bx lr
  8739. 08004026 <_fstat>:
  8740. int _fstat(int file, struct stat *st)
  8741. {
  8742. 8004026: b480 push {r7}
  8743. 8004028: b083 sub sp, #12
  8744. 800402a: af00 add r7, sp, #0
  8745. 800402c: 6078 str r0, [r7, #4]
  8746. 800402e: 6039 str r1, [r7, #0]
  8747. (void)file;
  8748. st->st_mode = S_IFCHR;
  8749. 8004030: 683b ldr r3, [r7, #0]
  8750. 8004032: f44f 5200 mov.w r2, #8192 @ 0x2000
  8751. 8004036: 605a str r2, [r3, #4]
  8752. return 0;
  8753. 8004038: 2300 movs r3, #0
  8754. }
  8755. 800403a: 4618 mov r0, r3
  8756. 800403c: 370c adds r7, #12
  8757. 800403e: 46bd mov sp, r7
  8758. 8004040: f85d 7b04 ldr.w r7, [sp], #4
  8759. 8004044: 4770 bx lr
  8760. 08004046 <_isatty>:
  8761. int _isatty(int file)
  8762. {
  8763. 8004046: b480 push {r7}
  8764. 8004048: b083 sub sp, #12
  8765. 800404a: af00 add r7, sp, #0
  8766. 800404c: 6078 str r0, [r7, #4]
  8767. (void)file;
  8768. return 1;
  8769. 800404e: 2301 movs r3, #1
  8770. }
  8771. 8004050: 4618 mov r0, r3
  8772. 8004052: 370c adds r7, #12
  8773. 8004054: 46bd mov sp, r7
  8774. 8004056: f85d 7b04 ldr.w r7, [sp], #4
  8775. 800405a: 4770 bx lr
  8776. 0800405c <_lseek>:
  8777. int _lseek(int file, int ptr, int dir)
  8778. {
  8779. 800405c: b480 push {r7}
  8780. 800405e: b085 sub sp, #20
  8781. 8004060: af00 add r7, sp, #0
  8782. 8004062: 60f8 str r0, [r7, #12]
  8783. 8004064: 60b9 str r1, [r7, #8]
  8784. 8004066: 607a str r2, [r7, #4]
  8785. (void)file;
  8786. (void)ptr;
  8787. (void)dir;
  8788. return 0;
  8789. 8004068: 2300 movs r3, #0
  8790. }
  8791. 800406a: 4618 mov r0, r3
  8792. 800406c: 3714 adds r7, #20
  8793. 800406e: 46bd mov sp, r7
  8794. 8004070: f85d 7b04 ldr.w r7, [sp], #4
  8795. 8004074: 4770 bx lr
  8796. ...
  8797. 08004078 <_sbrk>:
  8798. *
  8799. * @param incr Memory size
  8800. * @return Pointer to allocated memory
  8801. */
  8802. void *_sbrk(ptrdiff_t incr)
  8803. {
  8804. 8004078: b580 push {r7, lr}
  8805. 800407a: b086 sub sp, #24
  8806. 800407c: af00 add r7, sp, #0
  8807. 800407e: 6078 str r0, [r7, #4]
  8808. extern uint8_t _end; /* Symbol defined in the linker script */
  8809. extern uint8_t _estack; /* Symbol defined in the linker script */
  8810. extern uint32_t _Min_Stack_Size; /* Symbol defined in the linker script */
  8811. const uint32_t stack_limit = (uint32_t)&_estack - (uint32_t)&_Min_Stack_Size;
  8812. 8004080: 4a14 ldr r2, [pc, #80] @ (80040d4 <_sbrk+0x5c>)
  8813. 8004082: 4b15 ldr r3, [pc, #84] @ (80040d8 <_sbrk+0x60>)
  8814. 8004084: 1ad3 subs r3, r2, r3
  8815. 8004086: 617b str r3, [r7, #20]
  8816. const uint8_t *max_heap = (uint8_t *)stack_limit;
  8817. 8004088: 697b ldr r3, [r7, #20]
  8818. 800408a: 613b str r3, [r7, #16]
  8819. uint8_t *prev_heap_end;
  8820. /* Initialize heap end at first call */
  8821. if (NULL == __sbrk_heap_end)
  8822. 800408c: 4b13 ldr r3, [pc, #76] @ (80040dc <_sbrk+0x64>)
  8823. 800408e: 681b ldr r3, [r3, #0]
  8824. 8004090: 2b00 cmp r3, #0
  8825. 8004092: d102 bne.n 800409a <_sbrk+0x22>
  8826. {
  8827. __sbrk_heap_end = &_end;
  8828. 8004094: 4b11 ldr r3, [pc, #68] @ (80040dc <_sbrk+0x64>)
  8829. 8004096: 4a12 ldr r2, [pc, #72] @ (80040e0 <_sbrk+0x68>)
  8830. 8004098: 601a str r2, [r3, #0]
  8831. }
  8832. /* Protect heap from growing into the reserved MSP stack */
  8833. if (__sbrk_heap_end + incr > max_heap)
  8834. 800409a: 4b10 ldr r3, [pc, #64] @ (80040dc <_sbrk+0x64>)
  8835. 800409c: 681a ldr r2, [r3, #0]
  8836. 800409e: 687b ldr r3, [r7, #4]
  8837. 80040a0: 4413 add r3, r2
  8838. 80040a2: 693a ldr r2, [r7, #16]
  8839. 80040a4: 429a cmp r2, r3
  8840. 80040a6: d207 bcs.n 80040b8 <_sbrk+0x40>
  8841. {
  8842. errno = ENOMEM;
  8843. 80040a8: f013 fdfa bl 8017ca0 <__errno>
  8844. 80040ac: 4603 mov r3, r0
  8845. 80040ae: 220c movs r2, #12
  8846. 80040b0: 601a str r2, [r3, #0]
  8847. return (void *)-1;
  8848. 80040b2: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  8849. 80040b6: e009 b.n 80040cc <_sbrk+0x54>
  8850. }
  8851. prev_heap_end = __sbrk_heap_end;
  8852. 80040b8: 4b08 ldr r3, [pc, #32] @ (80040dc <_sbrk+0x64>)
  8853. 80040ba: 681b ldr r3, [r3, #0]
  8854. 80040bc: 60fb str r3, [r7, #12]
  8855. __sbrk_heap_end += incr;
  8856. 80040be: 4b07 ldr r3, [pc, #28] @ (80040dc <_sbrk+0x64>)
  8857. 80040c0: 681a ldr r2, [r3, #0]
  8858. 80040c2: 687b ldr r3, [r7, #4]
  8859. 80040c4: 4413 add r3, r2
  8860. 80040c6: 4a05 ldr r2, [pc, #20] @ (80040dc <_sbrk+0x64>)
  8861. 80040c8: 6013 str r3, [r2, #0]
  8862. return (void *)prev_heap_end;
  8863. 80040ca: 68fb ldr r3, [r7, #12]
  8864. }
  8865. 80040cc: 4618 mov r0, r3
  8866. 80040ce: 3718 adds r7, #24
  8867. 80040d0: 46bd mov sp, r7
  8868. 80040d2: bd80 pop {r7, pc}
  8869. 80040d4: 24060000 .word 0x24060000
  8870. 80040d8: 00000400 .word 0x00000400
  8871. 80040dc: 240008b0 .word 0x240008b0
  8872. 80040e0: 24012de0 .word 0x24012de0
  8873. 080040e4 <SystemInit>:
  8874. * configuration.
  8875. * @param None
  8876. * @retval None
  8877. */
  8878. void SystemInit (void)
  8879. {
  8880. 80040e4: b480 push {r7}
  8881. 80040e6: af00 add r7, sp, #0
  8882. __IO uint32_t tmpreg;
  8883. #endif /* DATA_IN_D2_SRAM */
  8884. /* FPU settings ------------------------------------------------------------*/
  8885. #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
  8886. SCB->CPACR |= ((3UL << (10*2))|(3UL << (11*2))); /* set CP10 and CP11 Full Access */
  8887. 80040e8: 4b37 ldr r3, [pc, #220] @ (80041c8 <SystemInit+0xe4>)
  8888. 80040ea: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  8889. 80040ee: 4a36 ldr r2, [pc, #216] @ (80041c8 <SystemInit+0xe4>)
  8890. 80040f0: f443 0370 orr.w r3, r3, #15728640 @ 0xf00000
  8891. 80040f4: f8c2 3088 str.w r3, [r2, #136] @ 0x88
  8892. #endif
  8893. /* Reset the RCC clock configuration to the default reset state ------------*/
  8894. /* Increasing the CPU frequency */
  8895. if(FLASH_LATENCY_DEFAULT > (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY)))
  8896. 80040f8: 4b34 ldr r3, [pc, #208] @ (80041cc <SystemInit+0xe8>)
  8897. 80040fa: 681b ldr r3, [r3, #0]
  8898. 80040fc: f003 030f and.w r3, r3, #15
  8899. 8004100: 2b06 cmp r3, #6
  8900. 8004102: d807 bhi.n 8004114 <SystemInit+0x30>
  8901. {
  8902. /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
  8903. MODIFY_REG(FLASH->ACR, FLASH_ACR_LATENCY, (uint32_t)(FLASH_LATENCY_DEFAULT));
  8904. 8004104: 4b31 ldr r3, [pc, #196] @ (80041cc <SystemInit+0xe8>)
  8905. 8004106: 681b ldr r3, [r3, #0]
  8906. 8004108: f023 030f bic.w r3, r3, #15
  8907. 800410c: 4a2f ldr r2, [pc, #188] @ (80041cc <SystemInit+0xe8>)
  8908. 800410e: f043 0307 orr.w r3, r3, #7
  8909. 8004112: 6013 str r3, [r2, #0]
  8910. }
  8911. /* Set HSION bit */
  8912. RCC->CR |= RCC_CR_HSION;
  8913. 8004114: 4b2e ldr r3, [pc, #184] @ (80041d0 <SystemInit+0xec>)
  8914. 8004116: 681b ldr r3, [r3, #0]
  8915. 8004118: 4a2d ldr r2, [pc, #180] @ (80041d0 <SystemInit+0xec>)
  8916. 800411a: f043 0301 orr.w r3, r3, #1
  8917. 800411e: 6013 str r3, [r2, #0]
  8918. /* Reset CFGR register */
  8919. RCC->CFGR = 0x00000000;
  8920. 8004120: 4b2b ldr r3, [pc, #172] @ (80041d0 <SystemInit+0xec>)
  8921. 8004122: 2200 movs r2, #0
  8922. 8004124: 611a str r2, [r3, #16]
  8923. /* Reset HSEON, HSECSSON, CSION, HSI48ON, CSIKERON, PLL1ON, PLL2ON and PLL3ON bits */
  8924. RCC->CR &= 0xEAF6ED7FU;
  8925. 8004126: 4b2a ldr r3, [pc, #168] @ (80041d0 <SystemInit+0xec>)
  8926. 8004128: 681a ldr r2, [r3, #0]
  8927. 800412a: 4929 ldr r1, [pc, #164] @ (80041d0 <SystemInit+0xec>)
  8928. 800412c: 4b29 ldr r3, [pc, #164] @ (80041d4 <SystemInit+0xf0>)
  8929. 800412e: 4013 ands r3, r2
  8930. 8004130: 600b str r3, [r1, #0]
  8931. /* Decreasing the number of wait states because of lower CPU frequency */
  8932. if(FLASH_LATENCY_DEFAULT < (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY)))
  8933. 8004132: 4b26 ldr r3, [pc, #152] @ (80041cc <SystemInit+0xe8>)
  8934. 8004134: 681b ldr r3, [r3, #0]
  8935. 8004136: f003 0308 and.w r3, r3, #8
  8936. 800413a: 2b00 cmp r3, #0
  8937. 800413c: d007 beq.n 800414e <SystemInit+0x6a>
  8938. {
  8939. /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
  8940. MODIFY_REG(FLASH->ACR, FLASH_ACR_LATENCY, (uint32_t)(FLASH_LATENCY_DEFAULT));
  8941. 800413e: 4b23 ldr r3, [pc, #140] @ (80041cc <SystemInit+0xe8>)
  8942. 8004140: 681b ldr r3, [r3, #0]
  8943. 8004142: f023 030f bic.w r3, r3, #15
  8944. 8004146: 4a21 ldr r2, [pc, #132] @ (80041cc <SystemInit+0xe8>)
  8945. 8004148: f043 0307 orr.w r3, r3, #7
  8946. 800414c: 6013 str r3, [r2, #0]
  8947. }
  8948. #if defined(D3_SRAM_BASE)
  8949. /* Reset D1CFGR register */
  8950. RCC->D1CFGR = 0x00000000;
  8951. 800414e: 4b20 ldr r3, [pc, #128] @ (80041d0 <SystemInit+0xec>)
  8952. 8004150: 2200 movs r2, #0
  8953. 8004152: 619a str r2, [r3, #24]
  8954. /* Reset D2CFGR register */
  8955. RCC->D2CFGR = 0x00000000;
  8956. 8004154: 4b1e ldr r3, [pc, #120] @ (80041d0 <SystemInit+0xec>)
  8957. 8004156: 2200 movs r2, #0
  8958. 8004158: 61da str r2, [r3, #28]
  8959. /* Reset D3CFGR register */
  8960. RCC->D3CFGR = 0x00000000;
  8961. 800415a: 4b1d ldr r3, [pc, #116] @ (80041d0 <SystemInit+0xec>)
  8962. 800415c: 2200 movs r2, #0
  8963. 800415e: 621a str r2, [r3, #32]
  8964. /* Reset SRDCFGR register */
  8965. RCC->SRDCFGR = 0x00000000;
  8966. #endif
  8967. /* Reset PLLCKSELR register */
  8968. RCC->PLLCKSELR = 0x02020200;
  8969. 8004160: 4b1b ldr r3, [pc, #108] @ (80041d0 <SystemInit+0xec>)
  8970. 8004162: 4a1d ldr r2, [pc, #116] @ (80041d8 <SystemInit+0xf4>)
  8971. 8004164: 629a str r2, [r3, #40] @ 0x28
  8972. /* Reset PLLCFGR register */
  8973. RCC->PLLCFGR = 0x01FF0000;
  8974. 8004166: 4b1a ldr r3, [pc, #104] @ (80041d0 <SystemInit+0xec>)
  8975. 8004168: 4a1c ldr r2, [pc, #112] @ (80041dc <SystemInit+0xf8>)
  8976. 800416a: 62da str r2, [r3, #44] @ 0x2c
  8977. /* Reset PLL1DIVR register */
  8978. RCC->PLL1DIVR = 0x01010280;
  8979. 800416c: 4b18 ldr r3, [pc, #96] @ (80041d0 <SystemInit+0xec>)
  8980. 800416e: 4a1c ldr r2, [pc, #112] @ (80041e0 <SystemInit+0xfc>)
  8981. 8004170: 631a str r2, [r3, #48] @ 0x30
  8982. /* Reset PLL1FRACR register */
  8983. RCC->PLL1FRACR = 0x00000000;
  8984. 8004172: 4b17 ldr r3, [pc, #92] @ (80041d0 <SystemInit+0xec>)
  8985. 8004174: 2200 movs r2, #0
  8986. 8004176: 635a str r2, [r3, #52] @ 0x34
  8987. /* Reset PLL2DIVR register */
  8988. RCC->PLL2DIVR = 0x01010280;
  8989. 8004178: 4b15 ldr r3, [pc, #84] @ (80041d0 <SystemInit+0xec>)
  8990. 800417a: 4a19 ldr r2, [pc, #100] @ (80041e0 <SystemInit+0xfc>)
  8991. 800417c: 639a str r2, [r3, #56] @ 0x38
  8992. /* Reset PLL2FRACR register */
  8993. RCC->PLL2FRACR = 0x00000000;
  8994. 800417e: 4b14 ldr r3, [pc, #80] @ (80041d0 <SystemInit+0xec>)
  8995. 8004180: 2200 movs r2, #0
  8996. 8004182: 63da str r2, [r3, #60] @ 0x3c
  8997. /* Reset PLL3DIVR register */
  8998. RCC->PLL3DIVR = 0x01010280;
  8999. 8004184: 4b12 ldr r3, [pc, #72] @ (80041d0 <SystemInit+0xec>)
  9000. 8004186: 4a16 ldr r2, [pc, #88] @ (80041e0 <SystemInit+0xfc>)
  9001. 8004188: 641a str r2, [r3, #64] @ 0x40
  9002. /* Reset PLL3FRACR register */
  9003. RCC->PLL3FRACR = 0x00000000;
  9004. 800418a: 4b11 ldr r3, [pc, #68] @ (80041d0 <SystemInit+0xec>)
  9005. 800418c: 2200 movs r2, #0
  9006. 800418e: 645a str r2, [r3, #68] @ 0x44
  9007. /* Reset HSEBYP bit */
  9008. RCC->CR &= 0xFFFBFFFFU;
  9009. 8004190: 4b0f ldr r3, [pc, #60] @ (80041d0 <SystemInit+0xec>)
  9010. 8004192: 681b ldr r3, [r3, #0]
  9011. 8004194: 4a0e ldr r2, [pc, #56] @ (80041d0 <SystemInit+0xec>)
  9012. 8004196: f423 2380 bic.w r3, r3, #262144 @ 0x40000
  9013. 800419a: 6013 str r3, [r2, #0]
  9014. /* Disable all interrupts */
  9015. RCC->CIER = 0x00000000;
  9016. 800419c: 4b0c ldr r3, [pc, #48] @ (80041d0 <SystemInit+0xec>)
  9017. 800419e: 2200 movs r2, #0
  9018. 80041a0: 661a str r2, [r3, #96] @ 0x60
  9019. #if (STM32H7_DEV_ID == 0x450UL)
  9020. /* dual core CM7 or single core line */
  9021. if((DBGMCU->IDCODE & 0xFFFF0000U) < 0x20000000U)
  9022. 80041a2: 4b10 ldr r3, [pc, #64] @ (80041e4 <SystemInit+0x100>)
  9023. 80041a4: 681a ldr r2, [r3, #0]
  9024. 80041a6: 4b10 ldr r3, [pc, #64] @ (80041e8 <SystemInit+0x104>)
  9025. 80041a8: 4013 ands r3, r2
  9026. 80041aa: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  9027. 80041ae: d202 bcs.n 80041b6 <SystemInit+0xd2>
  9028. {
  9029. /* if stm32h7 revY*/
  9030. /* Change the switch matrix read issuing capability to 1 for the AXI SRAM target (Target 7) */
  9031. *((__IO uint32_t*)0x51008108) = 0x000000001U;
  9032. 80041b0: 4b0e ldr r3, [pc, #56] @ (80041ec <SystemInit+0x108>)
  9033. 80041b2: 2201 movs r2, #1
  9034. 80041b4: 601a str r2, [r3, #0]
  9035. /*
  9036. * Disable the FMC bank1 (enabled after reset).
  9037. * This, prevents CPU speculation access on this bank which blocks the use of FMC during
  9038. * 24us. During this time the others FMC master (such as LTDC) cannot use it!
  9039. */
  9040. FMC_Bank1_R->BTCR[0] = 0x000030D2;
  9041. 80041b6: 4b0e ldr r3, [pc, #56] @ (80041f0 <SystemInit+0x10c>)
  9042. 80041b8: f243 02d2 movw r2, #12498 @ 0x30d2
  9043. 80041bc: 601a str r2, [r3, #0]
  9044. #if defined(USER_VECT_TAB_ADDRESS)
  9045. SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal D1 AXI-RAM or in Internal FLASH */
  9046. #endif /* USER_VECT_TAB_ADDRESS */
  9047. #endif /*DUAL_CORE && CORE_CM4*/
  9048. }
  9049. 80041be: bf00 nop
  9050. 80041c0: 46bd mov sp, r7
  9051. 80041c2: f85d 7b04 ldr.w r7, [sp], #4
  9052. 80041c6: 4770 bx lr
  9053. 80041c8: e000ed00 .word 0xe000ed00
  9054. 80041cc: 52002000 .word 0x52002000
  9055. 80041d0: 58024400 .word 0x58024400
  9056. 80041d4: eaf6ed7f .word 0xeaf6ed7f
  9057. 80041d8: 02020200 .word 0x02020200
  9058. 80041dc: 01ff0000 .word 0x01ff0000
  9059. 80041e0: 01010280 .word 0x01010280
  9060. 80041e4: 5c001000 .word 0x5c001000
  9061. 80041e8: ffff0000 .word 0xffff0000
  9062. 80041ec: 51008108 .word 0x51008108
  9063. 80041f0: 52004000 .word 0x52004000
  9064. 080041f4 <UartTasksInit>:
  9065. uint32_t slaveLastSeen[SLAVES_COUNT] = { 0 };
  9066. extern RNG_HandleTypeDef hrng;
  9067. void UartTasksInit (void) {
  9068. 80041f4: b580 push {r7, lr}
  9069. 80041f6: af00 add r7, sp, #0
  9070. uart1TaskData.uartRxBuffer = uart1RxBuffer;
  9071. 80041f8: 4b13 ldr r3, [pc, #76] @ (8004248 <UartTasksInit+0x54>)
  9072. 80041fa: 4a14 ldr r2, [pc, #80] @ (800424c <UartTasksInit+0x58>)
  9073. 80041fc: 601a str r2, [r3, #0]
  9074. uart1TaskData.uartRxBufferLen = UART1_RX_BUFF_SIZE;
  9075. 80041fe: 4b12 ldr r3, [pc, #72] @ (8004248 <UartTasksInit+0x54>)
  9076. 8004200: f44f 7280 mov.w r2, #256 @ 0x100
  9077. 8004204: 809a strh r2, [r3, #4]
  9078. uart1TaskData.uartTxBuffer = uart1TxBuffer;
  9079. 8004206: 4b10 ldr r3, [pc, #64] @ (8004248 <UartTasksInit+0x54>)
  9080. 8004208: 4a11 ldr r2, [pc, #68] @ (8004250 <UartTasksInit+0x5c>)
  9081. 800420a: 609a str r2, [r3, #8]
  9082. uart1TaskData.uartRxBufferLen = UART1_TX_BUFF_SIZE;
  9083. 800420c: 4b0e ldr r3, [pc, #56] @ (8004248 <UartTasksInit+0x54>)
  9084. 800420e: f44f 7280 mov.w r2, #256 @ 0x100
  9085. 8004212: 809a strh r2, [r3, #4]
  9086. uart1TaskData.frameData = uart1TaskFrameData;
  9087. 8004214: 4b0c ldr r3, [pc, #48] @ (8004248 <UartTasksInit+0x54>)
  9088. 8004216: 4a0f ldr r2, [pc, #60] @ (8004254 <UartTasksInit+0x60>)
  9089. 8004218: 611a str r2, [r3, #16]
  9090. uart1TaskData.frameDataLen = UART1_RX_BUFF_SIZE;
  9091. 800421a: 4b0b ldr r3, [pc, #44] @ (8004248 <UartTasksInit+0x54>)
  9092. 800421c: f44f 7280 mov.w r2, #256 @ 0x100
  9093. 8004220: 829a strh r2, [r3, #20]
  9094. uart1TaskData.huart = &huart1;
  9095. 8004222: 4b09 ldr r3, [pc, #36] @ (8004248 <UartTasksInit+0x54>)
  9096. 8004224: 4a0c ldr r2, [pc, #48] @ (8004258 <UartTasksInit+0x64>)
  9097. 8004226: 631a str r2, [r3, #48] @ 0x30
  9098. uart1TaskData.uartNumber = 1;
  9099. 8004228: 4b07 ldr r3, [pc, #28] @ (8004248 <UartTasksInit+0x54>)
  9100. 800422a: 2201 movs r2, #1
  9101. 800422c: f883 2034 strb.w r2, [r3, #52] @ 0x34
  9102. uart1TaskData.processDataCb = Uart1ReceivedDataProcessCallback;
  9103. 8004230: 4b05 ldr r3, [pc, #20] @ (8004248 <UartTasksInit+0x54>)
  9104. 8004232: 4a0a ldr r2, [pc, #40] @ (800425c <UartTasksInit+0x68>)
  9105. 8004234: 629a str r2, [r3, #40] @ 0x28
  9106. uart1TaskData.processRxDataMsgBuffer = NULL;
  9107. 8004236: 4b04 ldr r3, [pc, #16] @ (8004248 <UartTasksInit+0x54>)
  9108. 8004238: 2200 movs r2, #0
  9109. 800423a: 625a str r2, [r3, #36] @ 0x24
  9110. UartTaskCreate (&uart1TaskData);
  9111. 800423c: 4802 ldr r0, [pc, #8] @ (8004248 <UartTasksInit+0x54>)
  9112. 800423e: f000 f80f bl 8004260 <UartTaskCreate>
  9113. }
  9114. 8004242: bf00 nop
  9115. 8004244: bd80 pop {r7, pc}
  9116. 8004246: bf00 nop
  9117. 8004248: 24000bb4 .word 0x24000bb4
  9118. 800424c: 240008b4 .word 0x240008b4
  9119. 8004250: 240009b4 .word 0x240009b4
  9120. 8004254: 24000ab4 .word 0x24000ab4
  9121. 8004258: 24000610 .word 0x24000610
  9122. 800425c: 08004965 .word 0x08004965
  9123. 08004260 <UartTaskCreate>:
  9124. void UartTaskCreate (UartTaskData* uartTaskData) {
  9125. 8004260: b580 push {r7, lr}
  9126. 8004262: b08c sub sp, #48 @ 0x30
  9127. 8004264: af00 add r7, sp, #0
  9128. 8004266: 6078 str r0, [r7, #4]
  9129. osThreadAttr_t osThreadAttrRxUart = { 0 };
  9130. 8004268: f107 030c add.w r3, r7, #12
  9131. 800426c: 2224 movs r2, #36 @ 0x24
  9132. 800426e: 2100 movs r1, #0
  9133. 8004270: 4618 mov r0, r3
  9134. 8004272: f013 fc70 bl 8017b56 <memset>
  9135. osThreadAttrRxUart.stack_size = configMINIMAL_STACK_SIZE * 2;
  9136. 8004276: f44f 6380 mov.w r3, #1024 @ 0x400
  9137. 800427a: 623b str r3, [r7, #32]
  9138. osThreadAttrRxUart.priority = (osPriority_t)osPriorityHigh;
  9139. 800427c: 2328 movs r3, #40 @ 0x28
  9140. 800427e: 627b str r3, [r7, #36] @ 0x24
  9141. uartTaskData->uartRecieveTaskHandle = osThreadNew (UartRxTask, uartTaskData, &osThreadAttrRxUart);
  9142. 8004280: f107 030c add.w r3, r7, #12
  9143. 8004284: 461a mov r2, r3
  9144. 8004286: 6879 ldr r1, [r7, #4]
  9145. 8004288: 4804 ldr r0, [pc, #16] @ (800429c <UartTaskCreate+0x3c>)
  9146. 800428a: f00f f9f9 bl 8013680 <osThreadNew>
  9147. 800428e: 4602 mov r2, r0
  9148. 8004290: 687b ldr r3, [r7, #4]
  9149. 8004292: 619a str r2, [r3, #24]
  9150. }
  9151. 8004294: bf00 nop
  9152. 8004296: 3730 adds r7, #48 @ 0x30
  9153. 8004298: 46bd mov sp, r7
  9154. 800429a: bd80 pop {r7, pc}
  9155. 800429c: 080043b5 .word 0x080043b5
  9156. 080042a0 <HAL_UART_RxCpltCallback>:
  9157. uart8TaskData.huart = &huart8;
  9158. uart8TaskData.uartNumber = 8;
  9159. uart8TaskData.uartRecieveTaskHandle = osThreadNew (UartRxTask, &uart8TaskData, &osThreadAttrRxUart);
  9160. }
  9161. void HAL_UART_RxCpltCallback (UART_HandleTypeDef* huart) {
  9162. 80042a0: b480 push {r7}
  9163. 80042a2: b083 sub sp, #12
  9164. 80042a4: af00 add r7, sp, #0
  9165. 80042a6: 6078 str r0, [r7, #4]
  9166. }
  9167. 80042a8: bf00 nop
  9168. 80042aa: 370c adds r7, #12
  9169. 80042ac: 46bd mov sp, r7
  9170. 80042ae: f85d 7b04 ldr.w r7, [sp], #4
  9171. 80042b2: 4770 bx lr
  9172. 080042b4 <HAL_UARTEx_RxEventCallback>:
  9173. void HAL_UARTEx_RxEventCallback (UART_HandleTypeDef* huart, uint16_t Size) {
  9174. 80042b4: b580 push {r7, lr}
  9175. 80042b6: b082 sub sp, #8
  9176. 80042b8: af00 add r7, sp, #0
  9177. 80042ba: 6078 str r0, [r7, #4]
  9178. 80042bc: 460b mov r3, r1
  9179. 80042be: 807b strh r3, [r7, #2]
  9180. if (huart->Instance == USART1) {
  9181. 80042c0: 687b ldr r3, [r7, #4]
  9182. 80042c2: 681b ldr r3, [r3, #0]
  9183. 80042c4: 4a0c ldr r2, [pc, #48] @ (80042f8 <HAL_UARTEx_RxEventCallback+0x44>)
  9184. 80042c6: 4293 cmp r3, r2
  9185. 80042c8: d106 bne.n 80042d8 <HAL_UARTEx_RxEventCallback+0x24>
  9186. HandleUartRxCallback (&uart1TaskData, huart, Size);
  9187. 80042ca: 887b ldrh r3, [r7, #2]
  9188. 80042cc: 461a mov r2, r3
  9189. 80042ce: 6879 ldr r1, [r7, #4]
  9190. 80042d0: 480a ldr r0, [pc, #40] @ (80042fc <HAL_UARTEx_RxEventCallback+0x48>)
  9191. 80042d2: f000 f823 bl 800431c <HandleUartRxCallback>
  9192. } else if (huart->Instance == UART8) {
  9193. HandleUartRxCallback (&uart8TaskData, huart, Size);
  9194. }
  9195. }
  9196. 80042d6: e00a b.n 80042ee <HAL_UARTEx_RxEventCallback+0x3a>
  9197. } else if (huart->Instance == UART8) {
  9198. 80042d8: 687b ldr r3, [r7, #4]
  9199. 80042da: 681b ldr r3, [r3, #0]
  9200. 80042dc: 4a08 ldr r2, [pc, #32] @ (8004300 <HAL_UARTEx_RxEventCallback+0x4c>)
  9201. 80042de: 4293 cmp r3, r2
  9202. 80042e0: d105 bne.n 80042ee <HAL_UARTEx_RxEventCallback+0x3a>
  9203. HandleUartRxCallback (&uart8TaskData, huart, Size);
  9204. 80042e2: 887b ldrh r3, [r7, #2]
  9205. 80042e4: 461a mov r2, r3
  9206. 80042e6: 6879 ldr r1, [r7, #4]
  9207. 80042e8: 4806 ldr r0, [pc, #24] @ (8004304 <HAL_UARTEx_RxEventCallback+0x50>)
  9208. 80042ea: f000 f817 bl 800431c <HandleUartRxCallback>
  9209. }
  9210. 80042ee: bf00 nop
  9211. 80042f0: 3708 adds r7, #8
  9212. 80042f2: 46bd mov sp, r7
  9213. 80042f4: bd80 pop {r7, pc}
  9214. 80042f6: bf00 nop
  9215. 80042f8: 40011000 .word 0x40011000
  9216. 80042fc: 24000bb4 .word 0x24000bb4
  9217. 8004300: 40007c00 .word 0x40007c00
  9218. 8004304: 24000bec .word 0x24000bec
  9219. 08004308 <HAL_UART_TxCpltCallback>:
  9220. void HAL_UART_TxCpltCallback (UART_HandleTypeDef* huart) {
  9221. 8004308: b480 push {r7}
  9222. 800430a: b083 sub sp, #12
  9223. 800430c: af00 add r7, sp, #0
  9224. 800430e: 6078 str r0, [r7, #4]
  9225. if (huart->Instance == UART8) {
  9226. }
  9227. }
  9228. 8004310: bf00 nop
  9229. 8004312: 370c adds r7, #12
  9230. 8004314: 46bd mov sp, r7
  9231. 8004316: f85d 7b04 ldr.w r7, [sp], #4
  9232. 800431a: 4770 bx lr
  9233. 0800431c <HandleUartRxCallback>:
  9234. void HandleUartRxCallback (UartTaskData* uartTaskData, UART_HandleTypeDef* huart, uint16_t Size) {
  9235. 800431c: b580 push {r7, lr}
  9236. 800431e: b088 sub sp, #32
  9237. 8004320: af02 add r7, sp, #8
  9238. 8004322: 60f8 str r0, [r7, #12]
  9239. 8004324: 60b9 str r1, [r7, #8]
  9240. 8004326: 4613 mov r3, r2
  9241. 8004328: 80fb strh r3, [r7, #6]
  9242. BaseType_t pxHigherPriorityTaskWoken = pdFALSE;
  9243. 800432a: 2300 movs r3, #0
  9244. 800432c: 617b str r3, [r7, #20]
  9245. osMutexAcquire (uartTaskData->rxDataBufferMutex, osWaitForever);
  9246. 800432e: 68fb ldr r3, [r7, #12]
  9247. 8004330: 6a1b ldr r3, [r3, #32]
  9248. 8004332: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  9249. 8004336: 4618 mov r0, r3
  9250. 8004338: f00f fbcd bl 8013ad6 <osMutexAcquire>
  9251. memcpy (&(uartTaskData->frameData[uartTaskData->frameBytesCount]), uartTaskData->uartRxBuffer, Size);
  9252. 800433c: 68fb ldr r3, [r7, #12]
  9253. 800433e: 691b ldr r3, [r3, #16]
  9254. 8004340: 68fa ldr r2, [r7, #12]
  9255. 8004342: 8ad2 ldrh r2, [r2, #22]
  9256. 8004344: 1898 adds r0, r3, r2
  9257. 8004346: 68fb ldr r3, [r7, #12]
  9258. 8004348: 681b ldr r3, [r3, #0]
  9259. 800434a: 88fa ldrh r2, [r7, #6]
  9260. 800434c: 4619 mov r1, r3
  9261. 800434e: f013 fcd4 bl 8017cfa <memcpy>
  9262. uartTaskData->frameBytesCount += Size;
  9263. 8004352: 68fb ldr r3, [r7, #12]
  9264. 8004354: 8ada ldrh r2, [r3, #22]
  9265. 8004356: 88fb ldrh r3, [r7, #6]
  9266. 8004358: 4413 add r3, r2
  9267. 800435a: b29a uxth r2, r3
  9268. 800435c: 68fb ldr r3, [r7, #12]
  9269. 800435e: 82da strh r2, [r3, #22]
  9270. osMutexRelease (uartTaskData->rxDataBufferMutex);
  9271. 8004360: 68fb ldr r3, [r7, #12]
  9272. 8004362: 6a1b ldr r3, [r3, #32]
  9273. 8004364: 4618 mov r0, r3
  9274. 8004366: f00f fc01 bl 8013b6c <osMutexRelease>
  9275. xTaskNotifyFromISR (uartTaskData->uartRecieveTaskHandle, Size, eSetValueWithOverwrite, &pxHigherPriorityTaskWoken);
  9276. 800436a: 68fb ldr r3, [r7, #12]
  9277. 800436c: 6998 ldr r0, [r3, #24]
  9278. 800436e: 88f9 ldrh r1, [r7, #6]
  9279. 8004370: f107 0314 add.w r3, r7, #20
  9280. 8004374: 9300 str r3, [sp, #0]
  9281. 8004376: 2300 movs r3, #0
  9282. 8004378: 2203 movs r2, #3
  9283. 800437a: f012 f8f1 bl 8016560 <xTaskGenericNotifyFromISR>
  9284. HAL_UARTEx_ReceiveToIdle_IT (uartTaskData->huart, uartTaskData->uartRxBuffer, uartTaskData->uartRxBufferLen);
  9285. 800437e: 68fb ldr r3, [r7, #12]
  9286. 8004380: 6b18 ldr r0, [r3, #48] @ 0x30
  9287. 8004382: 68fb ldr r3, [r7, #12]
  9288. 8004384: 6819 ldr r1, [r3, #0]
  9289. 8004386: 68fb ldr r3, [r7, #12]
  9290. 8004388: 889b ldrh r3, [r3, #4]
  9291. 800438a: 461a mov r2, r3
  9292. 800438c: f00f f84b bl 8013426 <HAL_UARTEx_ReceiveToIdle_IT>
  9293. portEND_SWITCHING_ISR (pxHigherPriorityTaskWoken);
  9294. 8004390: 697b ldr r3, [r7, #20]
  9295. 8004392: 2b00 cmp r3, #0
  9296. 8004394: d007 beq.n 80043a6 <HandleUartRxCallback+0x8a>
  9297. 8004396: 4b06 ldr r3, [pc, #24] @ (80043b0 <HandleUartRxCallback+0x94>)
  9298. 8004398: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  9299. 800439c: 601a str r2, [r3, #0]
  9300. 800439e: f3bf 8f4f dsb sy
  9301. 80043a2: f3bf 8f6f isb sy
  9302. }
  9303. 80043a6: bf00 nop
  9304. 80043a8: 3718 adds r7, #24
  9305. 80043aa: 46bd mov sp, r7
  9306. 80043ac: bd80 pop {r7, pc}
  9307. 80043ae: bf00 nop
  9308. 80043b0: e000ed04 .word 0xe000ed04
  9309. 080043b4 <UartRxTask>:
  9310. void UartRxTask (void* argument) {
  9311. 80043b4: b580 push {r7, lr}
  9312. 80043b6: b0d2 sub sp, #328 @ 0x148
  9313. 80043b8: af02 add r7, sp, #8
  9314. 80043ba: f507 73a0 add.w r3, r7, #320 @ 0x140
  9315. 80043be: f5a3 739e sub.w r3, r3, #316 @ 0x13c
  9316. 80043c2: 6018 str r0, [r3, #0]
  9317. UartTaskData* uartTaskData = (UartTaskData*)argument;
  9318. 80043c4: f507 73a0 add.w r3, r7, #320 @ 0x140
  9319. 80043c8: f5a3 739e sub.w r3, r3, #316 @ 0x13c
  9320. 80043cc: 681b ldr r3, [r3, #0]
  9321. 80043ce: f8c7 312c str.w r3, [r7, #300] @ 0x12c
  9322. SerialProtocolFrameData spFrameData = { 0 };
  9323. 80043d2: f507 73a0 add.w r3, r7, #320 @ 0x140
  9324. 80043d6: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  9325. 80043da: 4618 mov r0, r3
  9326. 80043dc: f44f 7386 mov.w r3, #268 @ 0x10c
  9327. 80043e0: 461a mov r2, r3
  9328. 80043e2: 2100 movs r1, #0
  9329. 80043e4: f013 fbb7 bl 8017b56 <memset>
  9330. uint32_t bytesRec = 0;
  9331. 80043e8: f507 73a0 add.w r3, r7, #320 @ 0x140
  9332. 80043ec: f5a3 739a sub.w r3, r3, #308 @ 0x134
  9333. 80043f0: 2200 movs r2, #0
  9334. 80043f2: 601a str r2, [r3, #0]
  9335. uint32_t crc = 0;
  9336. 80043f4: 2300 movs r3, #0
  9337. 80043f6: f8c7 3128 str.w r3, [r7, #296] @ 0x128
  9338. uint16_t frameCommandRaw = 0x0000;
  9339. 80043fa: 2300 movs r3, #0
  9340. 80043fc: f8a7 3126 strh.w r3, [r7, #294] @ 0x126
  9341. uint16_t frameBytesCount = 0;
  9342. 8004400: 2300 movs r3, #0
  9343. 8004402: f8a7 3124 strh.w r3, [r7, #292] @ 0x124
  9344. uint16_t frameCrc = 0;
  9345. 8004406: 2300 movs r3, #0
  9346. 8004408: f8a7 3122 strh.w r3, [r7, #290] @ 0x122
  9347. uint16_t frameTotalLength = 0;
  9348. 800440c: 2300 movs r3, #0
  9349. 800440e: f8a7 313e strh.w r3, [r7, #318] @ 0x13e
  9350. uint16_t dataToSend = 0;
  9351. 8004412: 2300 movs r3, #0
  9352. 8004414: f8a7 313c strh.w r3, [r7, #316] @ 0x13c
  9353. portBASE_TYPE crcPass = pdFAIL;
  9354. 8004418: 2300 movs r3, #0
  9355. 800441a: f8c7 3138 str.w r3, [r7, #312] @ 0x138
  9356. portBASE_TYPE proceed = pdFALSE;
  9357. 800441e: 2300 movs r3, #0
  9358. 8004420: f8c7 3134 str.w r3, [r7, #308] @ 0x134
  9359. portBASE_TYPE frameTimeout = pdFAIL;
  9360. 8004424: 2300 movs r3, #0
  9361. 8004426: f8c7 311c str.w r3, [r7, #284] @ 0x11c
  9362. enum SerialReceiverStates receverState = srWaitForHeader;
  9363. 800442a: 2300 movs r3, #0
  9364. 800442c: f887 3133 strb.w r3, [r7, #307] @ 0x133
  9365. uartTaskData->rxDataBufferMutex = osMutexNew (NULL);
  9366. 8004430: 2000 movs r0, #0
  9367. 8004432: f00f faca bl 80139ca <osMutexNew>
  9368. 8004436: 4602 mov r2, r0
  9369. 8004438: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9370. 800443c: 621a str r2, [r3, #32]
  9371. HAL_UARTEx_ReceiveToIdle_IT (uartTaskData->huart, uartTaskData->uartRxBuffer, uartTaskData->uartRxBufferLen);
  9372. 800443e: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9373. 8004442: 6b18 ldr r0, [r3, #48] @ 0x30
  9374. 8004444: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9375. 8004448: 6819 ldr r1, [r3, #0]
  9376. 800444a: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9377. 800444e: 889b ldrh r3, [r3, #4]
  9378. 8004450: 461a mov r2, r3
  9379. 8004452: f00e ffe8 bl 8013426 <HAL_UARTEx_ReceiveToIdle_IT>
  9380. while (pdTRUE) {
  9381. frameTimeout = !(xTaskNotifyWait (0, 0, &bytesRec, pdMS_TO_TICKS (FRAME_TIMEOUT_MS)));
  9382. 8004456: f107 020c add.w r2, r7, #12
  9383. 800445a: f44f 63fa mov.w r3, #2000 @ 0x7d0
  9384. 800445e: 2100 movs r1, #0
  9385. 8004460: 2000 movs r0, #0
  9386. 8004462: f011 ff5b bl 801631c <xTaskNotifyWait>
  9387. 8004466: 4603 mov r3, r0
  9388. 8004468: 2b00 cmp r3, #0
  9389. 800446a: bf0c ite eq
  9390. 800446c: 2301 moveq r3, #1
  9391. 800446e: 2300 movne r3, #0
  9392. 8004470: b2db uxtb r3, r3
  9393. 8004472: f8c7 311c str.w r3, [r7, #284] @ 0x11c
  9394. osMutexAcquire (uartTaskData->rxDataBufferMutex, osWaitForever);
  9395. 8004476: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9396. 800447a: 6a1b ldr r3, [r3, #32]
  9397. 800447c: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  9398. 8004480: 4618 mov r0, r3
  9399. 8004482: f00f fb28 bl 8013ad6 <osMutexAcquire>
  9400. frameBytesCount = uartTaskData->frameBytesCount;
  9401. 8004486: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9402. 800448a: 8adb ldrh r3, [r3, #22]
  9403. 800448c: f8a7 3124 strh.w r3, [r7, #292] @ 0x124
  9404. osMutexRelease (uartTaskData->rxDataBufferMutex);
  9405. 8004490: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9406. 8004494: 6a1b ldr r3, [r3, #32]
  9407. 8004496: 4618 mov r0, r3
  9408. 8004498: f00f fb68 bl 8013b6c <osMutexRelease>
  9409. if ((frameTimeout == pdTRUE) && (frameBytesCount > 0)) {
  9410. 800449c: f8d7 311c ldr.w r3, [r7, #284] @ 0x11c
  9411. 80044a0: 2b01 cmp r3, #1
  9412. 80044a2: d10a bne.n 80044ba <UartRxTask+0x106>
  9413. 80044a4: f8b7 3124 ldrh.w r3, [r7, #292] @ 0x124
  9414. 80044a8: 2b00 cmp r3, #0
  9415. 80044aa: d006 beq.n 80044ba <UartRxTask+0x106>
  9416. receverState = srFail;
  9417. 80044ac: 2304 movs r3, #4
  9418. 80044ae: f887 3133 strb.w r3, [r7, #307] @ 0x133
  9419. proceed = pdTRUE;
  9420. 80044b2: 2301 movs r3, #1
  9421. 80044b4: f8c7 3134 str.w r3, [r7, #308] @ 0x134
  9422. 80044b8: e029 b.n 800450e <UartRxTask+0x15a>
  9423. } else {
  9424. if (frameTimeout == pdFALSE) {
  9425. 80044ba: f8d7 311c ldr.w r3, [r7, #284] @ 0x11c
  9426. 80044be: 2b00 cmp r3, #0
  9427. 80044c0: d111 bne.n 80044e6 <UartRxTask+0x132>
  9428. proceed = pdTRUE;
  9429. 80044c2: 2301 movs r3, #1
  9430. 80044c4: f8c7 3134 str.w r3, [r7, #308] @ 0x134
  9431. printf ("Uart%d: RX bytes received: %ld\n", uartTaskData->uartNumber, bytesRec);
  9432. 80044c8: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9433. 80044cc: f893 3034 ldrb.w r3, [r3, #52] @ 0x34
  9434. 80044d0: 4619 mov r1, r3
  9435. 80044d2: f507 73a0 add.w r3, r7, #320 @ 0x140
  9436. 80044d6: f5a3 739a sub.w r3, r3, #308 @ 0x134
  9437. 80044da: 681b ldr r3, [r3, #0]
  9438. 80044dc: 461a mov r2, r3
  9439. 80044de: 48c1 ldr r0, [pc, #772] @ (80047e4 <UartRxTask+0x430>)
  9440. 80044e0: f013 fae4 bl 8017aac <iprintf>
  9441. 80044e4: e22f b.n 8004946 <UartRxTask+0x592>
  9442. } else {
  9443. if (uartTaskData->huart->RxState == HAL_UART_STATE_READY) {
  9444. 80044e6: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9445. 80044ea: 6b1b ldr r3, [r3, #48] @ 0x30
  9446. 80044ec: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c
  9447. 80044f0: 2b20 cmp r3, #32
  9448. 80044f2: f040 8228 bne.w 8004946 <UartRxTask+0x592>
  9449. HAL_UARTEx_ReceiveToIdle_IT (uartTaskData->huart, uartTaskData->uartRxBuffer, uartTaskData->uartRxBufferLen);
  9450. 80044f6: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9451. 80044fa: 6b18 ldr r0, [r3, #48] @ 0x30
  9452. 80044fc: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9453. 8004500: 6819 ldr r1, [r3, #0]
  9454. 8004502: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9455. 8004506: 889b ldrh r3, [r3, #4]
  9456. 8004508: 461a mov r2, r3
  9457. 800450a: f00e ff8c bl 8013426 <HAL_UARTEx_ReceiveToIdle_IT>
  9458. }
  9459. }
  9460. }
  9461. while (proceed) {
  9462. 800450e: e21a b.n 8004946 <UartRxTask+0x592>
  9463. switch (receverState) {
  9464. 8004510: f897 3133 ldrb.w r3, [r7, #307] @ 0x133
  9465. 8004514: 2b04 cmp r3, #4
  9466. 8004516: f200 81f1 bhi.w 80048fc <UartRxTask+0x548>
  9467. 800451a: a201 add r2, pc, #4 @ (adr r2, 8004520 <UartRxTask+0x16c>)
  9468. 800451c: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  9469. 8004520: 08004535 .word 0x08004535
  9470. 8004524: 08004697 .word 0x08004697
  9471. 8004528: 0800467b .word 0x0800467b
  9472. 800452c: 08004737 .word 0x08004737
  9473. 8004530: 080047f1 .word 0x080047f1
  9474. case srWaitForHeader:
  9475. osMutexAcquire (uartTaskData->rxDataBufferMutex, osWaitForever);
  9476. 8004534: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9477. 8004538: 6a1b ldr r3, [r3, #32]
  9478. 800453a: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  9479. 800453e: 4618 mov r0, r3
  9480. 8004540: f00f fac9 bl 8013ad6 <osMutexAcquire>
  9481. if (uartTaskData->frameData[0] == FRAME_INDICATOR) {
  9482. 8004544: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9483. 8004548: 691b ldr r3, [r3, #16]
  9484. 800454a: 781b ldrb r3, [r3, #0]
  9485. 800454c: 2baa cmp r3, #170 @ 0xaa
  9486. 800454e: f040 8082 bne.w 8004656 <UartRxTask+0x2a2>
  9487. if (frameBytesCount > FRAME_ID_LENGTH) {
  9488. 8004552: f8b7 3124 ldrh.w r3, [r7, #292] @ 0x124
  9489. 8004556: 2b02 cmp r3, #2
  9490. 8004558: d914 bls.n 8004584 <UartRxTask+0x1d0>
  9491. spFrameData.frameHeader.frameId =
  9492. CONVERT_BYTES_TO_SHORT_WORD (&(uartTaskData->frameData[FRAME_HEADER_LENGTH - FRAME_RESP_STAT_LENGTH - FRAME_DATALEN_LENGTH - FRAME_ID_LENGTH - FRAME_COMMAND_LENGTH]));
  9493. 800455a: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9494. 800455e: 691b ldr r3, [r3, #16]
  9495. 8004560: 3302 adds r3, #2
  9496. 8004562: 781b ldrb r3, [r3, #0]
  9497. 8004564: 021b lsls r3, r3, #8
  9498. 8004566: b21a sxth r2, r3
  9499. 8004568: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9500. 800456c: 691b ldr r3, [r3, #16]
  9501. 800456e: 3301 adds r3, #1
  9502. 8004570: 781b ldrb r3, [r3, #0]
  9503. 8004572: b21b sxth r3, r3
  9504. 8004574: 4313 orrs r3, r2
  9505. 8004576: b21b sxth r3, r3
  9506. 8004578: b29a uxth r2, r3
  9507. spFrameData.frameHeader.frameId =
  9508. 800457a: f507 73a0 add.w r3, r7, #320 @ 0x140
  9509. 800457e: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  9510. 8004582: 801a strh r2, [r3, #0]
  9511. }
  9512. if (frameBytesCount > FRAME_ID_LENGTH + FRAME_COMMAND_LENGTH) {
  9513. 8004584: f8b7 3124 ldrh.w r3, [r7, #292] @ 0x124
  9514. 8004588: 2b04 cmp r3, #4
  9515. 800458a: d923 bls.n 80045d4 <UartRxTask+0x220>
  9516. frameCommandRaw = CONVERT_BYTES_TO_SHORT_WORD (&(uartTaskData->frameData[FRAME_HEADER_LENGTH - FRAME_RESP_STAT_LENGTH - FRAME_DATALEN_LENGTH - FRAME_COMMAND_LENGTH]));
  9517. 800458c: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9518. 8004590: 691b ldr r3, [r3, #16]
  9519. 8004592: 3304 adds r3, #4
  9520. 8004594: 781b ldrb r3, [r3, #0]
  9521. 8004596: 021b lsls r3, r3, #8
  9522. 8004598: b21a sxth r2, r3
  9523. 800459a: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9524. 800459e: 691b ldr r3, [r3, #16]
  9525. 80045a0: 3303 adds r3, #3
  9526. 80045a2: 781b ldrb r3, [r3, #0]
  9527. 80045a4: b21b sxth r3, r3
  9528. 80045a6: 4313 orrs r3, r2
  9529. 80045a8: b21b sxth r3, r3
  9530. 80045aa: f8a7 3126 strh.w r3, [r7, #294] @ 0x126
  9531. spFrameData.frameHeader.frameCommand = (SerialProtocolCommands)(frameCommandRaw & 0x7FFF);
  9532. 80045ae: f8b7 3126 ldrh.w r3, [r7, #294] @ 0x126
  9533. 80045b2: b2da uxtb r2, r3
  9534. 80045b4: f507 73a0 add.w r3, r7, #320 @ 0x140
  9535. 80045b8: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  9536. 80045bc: 709a strb r2, [r3, #2]
  9537. spFrameData.frameHeader.isResponseFrame = (frameCommandRaw & 0x8000) != 0 ? pdTRUE : pdFALSE;
  9538. 80045be: f9b7 3126 ldrsh.w r3, [r7, #294] @ 0x126
  9539. 80045c2: 13db asrs r3, r3, #15
  9540. 80045c4: b21b sxth r3, r3
  9541. 80045c6: f003 0201 and.w r2, r3, #1
  9542. 80045ca: f507 73a0 add.w r3, r7, #320 @ 0x140
  9543. 80045ce: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  9544. 80045d2: 609a str r2, [r3, #8]
  9545. }
  9546. if ((frameBytesCount > FRAME_ID_LENGTH + FRAME_COMMAND_LENGTH + FRAME_RESP_STAT_LENGTH) && ((spFrameData.frameHeader.frameCommand & 0x8000) != 0)) {
  9547. 80045d4: f8b7 3124 ldrh.w r3, [r7, #292] @ 0x124
  9548. 80045d8: 2b05 cmp r3, #5
  9549. 80045da: d913 bls.n 8004604 <UartRxTask+0x250>
  9550. 80045dc: f507 73a0 add.w r3, r7, #320 @ 0x140
  9551. 80045e0: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  9552. 80045e4: 789b ldrb r3, [r3, #2]
  9553. 80045e6: f403 4300 and.w r3, r3, #32768 @ 0x8000
  9554. 80045ea: 2b00 cmp r3, #0
  9555. 80045ec: d00a beq.n 8004604 <UartRxTask+0x250>
  9556. spFrameData.frameHeader.respStatus = (SerialProtocolRespStatus)(uartTaskData->frameData[FRAME_ID_LENGTH + FRAME_COMMAND_LENGTH + FRAME_RESP_STAT_LENGTH]);
  9557. 80045ee: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9558. 80045f2: 691b ldr r3, [r3, #16]
  9559. 80045f4: 3305 adds r3, #5
  9560. 80045f6: 781b ldrb r3, [r3, #0]
  9561. 80045f8: b25a sxtb r2, r3
  9562. 80045fa: f507 73a0 add.w r3, r7, #320 @ 0x140
  9563. 80045fe: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  9564. 8004602: 70da strb r2, [r3, #3]
  9565. }
  9566. if (frameBytesCount >= FRAME_HEADER_LENGTH) {
  9567. 8004604: f8b7 3124 ldrh.w r3, [r7, #292] @ 0x124
  9568. 8004608: 2b07 cmp r3, #7
  9569. 800460a: d920 bls.n 800464e <UartRxTask+0x29a>
  9570. spFrameData.frameHeader.frameDataLength = CONVERT_BYTES_TO_SHORT_WORD (&(uartTaskData->frameData[FRAME_HEADER_LENGTH - FRAME_RESP_STAT_LENGTH - FRAME_DATALEN_LENGTH]));
  9571. 800460c: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9572. 8004610: 691b ldr r3, [r3, #16]
  9573. 8004612: 3306 adds r3, #6
  9574. 8004614: 781b ldrb r3, [r3, #0]
  9575. 8004616: 021b lsls r3, r3, #8
  9576. 8004618: b21a sxth r2, r3
  9577. 800461a: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9578. 800461e: 691b ldr r3, [r3, #16]
  9579. 8004620: 3305 adds r3, #5
  9580. 8004622: 781b ldrb r3, [r3, #0]
  9581. 8004624: b21b sxth r3, r3
  9582. 8004626: 4313 orrs r3, r2
  9583. 8004628: b21b sxth r3, r3
  9584. 800462a: b29a uxth r2, r3
  9585. 800462c: f507 73a0 add.w r3, r7, #320 @ 0x140
  9586. 8004630: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  9587. 8004634: 809a strh r2, [r3, #4]
  9588. frameTotalLength = FRAME_HEADER_LENGTH + spFrameData.frameHeader.frameDataLength + FRAME_CRC_LENGTH;
  9589. 8004636: f507 73a0 add.w r3, r7, #320 @ 0x140
  9590. 800463a: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  9591. 800463e: 889b ldrh r3, [r3, #4]
  9592. 8004640: 330a adds r3, #10
  9593. 8004642: f8a7 313e strh.w r3, [r7, #318] @ 0x13e
  9594. receverState = srRecieveData;
  9595. 8004646: 2302 movs r3, #2
  9596. 8004648: f887 3133 strb.w r3, [r7, #307] @ 0x133
  9597. 800464c: e00e b.n 800466c <UartRxTask+0x2b8>
  9598. } else {
  9599. proceed = pdFALSE;
  9600. 800464e: 2300 movs r3, #0
  9601. 8004650: f8c7 3134 str.w r3, [r7, #308] @ 0x134
  9602. 8004654: e00a b.n 800466c <UartRxTask+0x2b8>
  9603. }
  9604. } else {
  9605. if (frameBytesCount > 0) {
  9606. 8004656: f8b7 3124 ldrh.w r3, [r7, #292] @ 0x124
  9607. 800465a: 2b00 cmp r3, #0
  9608. 800465c: d003 beq.n 8004666 <UartRxTask+0x2b2>
  9609. receverState = srFail;
  9610. 800465e: 2304 movs r3, #4
  9611. 8004660: f887 3133 strb.w r3, [r7, #307] @ 0x133
  9612. 8004664: e002 b.n 800466c <UartRxTask+0x2b8>
  9613. } else {
  9614. proceed = pdFALSE;
  9615. 8004666: 2300 movs r3, #0
  9616. 8004668: f8c7 3134 str.w r3, [r7, #308] @ 0x134
  9617. }
  9618. }
  9619. osMutexRelease (uartTaskData->rxDataBufferMutex);
  9620. 800466c: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9621. 8004670: 6a1b ldr r3, [r3, #32]
  9622. 8004672: 4618 mov r0, r3
  9623. 8004674: f00f fa7a bl 8013b6c <osMutexRelease>
  9624. break;
  9625. 8004678: e165 b.n 8004946 <UartRxTask+0x592>
  9626. case srRecieveData:
  9627. if (frameBytesCount >= frameTotalLength) {
  9628. 800467a: f8b7 2124 ldrh.w r2, [r7, #292] @ 0x124
  9629. 800467e: f8b7 313e ldrh.w r3, [r7, #318] @ 0x13e
  9630. 8004682: 429a cmp r2, r3
  9631. 8004684: d303 bcc.n 800468e <UartRxTask+0x2da>
  9632. receverState = srCheckCrc;
  9633. 8004686: 2301 movs r3, #1
  9634. 8004688: f887 3133 strb.w r3, [r7, #307] @ 0x133
  9635. } else {
  9636. proceed = pdFALSE;
  9637. }
  9638. break;
  9639. 800468c: e15b b.n 8004946 <UartRxTask+0x592>
  9640. proceed = pdFALSE;
  9641. 800468e: 2300 movs r3, #0
  9642. 8004690: f8c7 3134 str.w r3, [r7, #308] @ 0x134
  9643. break;
  9644. 8004694: e157 b.n 8004946 <UartRxTask+0x592>
  9645. case srCheckCrc:
  9646. osMutexAcquire (uartTaskData->rxDataBufferMutex, osWaitForever);
  9647. 8004696: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9648. 800469a: 6a1b ldr r3, [r3, #32]
  9649. 800469c: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  9650. 80046a0: 4618 mov r0, r3
  9651. 80046a2: f00f fa18 bl 8013ad6 <osMutexAcquire>
  9652. frameCrc = CONVERT_BYTES_TO_SHORT_WORD (&(uartTaskData->frameData[frameTotalLength - FRAME_CRC_LENGTH]));
  9653. 80046a6: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9654. 80046aa: 691a ldr r2, [r3, #16]
  9655. 80046ac: f8b7 313e ldrh.w r3, [r7, #318] @ 0x13e
  9656. 80046b0: 3b01 subs r3, #1
  9657. 80046b2: 4413 add r3, r2
  9658. 80046b4: 781b ldrb r3, [r3, #0]
  9659. 80046b6: 021b lsls r3, r3, #8
  9660. 80046b8: b21a sxth r2, r3
  9661. 80046ba: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9662. 80046be: 6919 ldr r1, [r3, #16]
  9663. 80046c0: f8b7 313e ldrh.w r3, [r7, #318] @ 0x13e
  9664. 80046c4: 3b02 subs r3, #2
  9665. 80046c6: 440b add r3, r1
  9666. 80046c8: 781b ldrb r3, [r3, #0]
  9667. 80046ca: b21b sxth r3, r3
  9668. 80046cc: 4313 orrs r3, r2
  9669. 80046ce: b21b sxth r3, r3
  9670. 80046d0: f8a7 3122 strh.w r3, [r7, #290] @ 0x122
  9671. crc = HAL_CRC_Calculate (&hcrc, (uint32_t*)(uartTaskData->frameData), frameTotalLength - FRAME_CRC_LENGTH);
  9672. 80046d4: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9673. 80046d8: 6919 ldr r1, [r3, #16]
  9674. 80046da: f8b7 313e ldrh.w r3, [r7, #318] @ 0x13e
  9675. 80046de: 3b02 subs r3, #2
  9676. 80046e0: 461a mov r2, r3
  9677. 80046e2: 4841 ldr r0, [pc, #260] @ (80047e8 <UartRxTask+0x434>)
  9678. 80046e4: f002 fe24 bl 8007330 <HAL_CRC_Calculate>
  9679. 80046e8: f8c7 0128 str.w r0, [r7, #296] @ 0x128
  9680. osMutexRelease (uartTaskData->rxDataBufferMutex);
  9681. 80046ec: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9682. 80046f0: 6a1b ldr r3, [r3, #32]
  9683. 80046f2: 4618 mov r0, r3
  9684. 80046f4: f00f fa3a bl 8013b6c <osMutexRelease>
  9685. crcPass = frameCrc == crc;
  9686. 80046f8: f8b7 3122 ldrh.w r3, [r7, #290] @ 0x122
  9687. 80046fc: f8d7 2128 ldr.w r2, [r7, #296] @ 0x128
  9688. 8004700: 429a cmp r2, r3
  9689. 8004702: bf0c ite eq
  9690. 8004704: 2301 moveq r3, #1
  9691. 8004706: 2300 movne r3, #0
  9692. 8004708: b2db uxtb r3, r3
  9693. 800470a: f8c7 3138 str.w r3, [r7, #312] @ 0x138
  9694. if (crcPass) {
  9695. 800470e: f8d7 3138 ldr.w r3, [r7, #312] @ 0x138
  9696. 8004712: 2b00 cmp r3, #0
  9697. 8004714: d00b beq.n 800472e <UartRxTask+0x37a>
  9698. printf ("Uart%d: Frame CRC PASS\n", uartTaskData->uartNumber);
  9699. 8004716: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9700. 800471a: f893 3034 ldrb.w r3, [r3, #52] @ 0x34
  9701. 800471e: 4619 mov r1, r3
  9702. 8004720: 4832 ldr r0, [pc, #200] @ (80047ec <UartRxTask+0x438>)
  9703. 8004722: f013 f9c3 bl 8017aac <iprintf>
  9704. receverState = srExecuteCmd;
  9705. 8004726: 2303 movs r3, #3
  9706. 8004728: f887 3133 strb.w r3, [r7, #307] @ 0x133
  9707. } else {
  9708. receverState = srFail;
  9709. }
  9710. break;
  9711. 800472c: e10b b.n 8004946 <UartRxTask+0x592>
  9712. receverState = srFail;
  9713. 800472e: 2304 movs r3, #4
  9714. 8004730: f887 3133 strb.w r3, [r7, #307] @ 0x133
  9715. break;
  9716. 8004734: e107 b.n 8004946 <UartRxTask+0x592>
  9717. case srExecuteCmd:
  9718. if ((uartTaskData->processDataCb != NULL) || (uartTaskData->processRxDataMsgBuffer != NULL)) {
  9719. 8004736: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9720. 800473a: 6a9b ldr r3, [r3, #40] @ 0x28
  9721. 800473c: 2b00 cmp r3, #0
  9722. 800473e: d104 bne.n 800474a <UartRxTask+0x396>
  9723. 8004740: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9724. 8004744: 6a5b ldr r3, [r3, #36] @ 0x24
  9725. 8004746: 2b00 cmp r3, #0
  9726. 8004748: d01e beq.n 8004788 <UartRxTask+0x3d4>
  9727. osMutexAcquire (uartTaskData->rxDataBufferMutex, osWaitForever);
  9728. 800474a: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9729. 800474e: 6a1b ldr r3, [r3, #32]
  9730. 8004750: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  9731. 8004754: 4618 mov r0, r3
  9732. 8004756: f00f f9be bl 8013ad6 <osMutexAcquire>
  9733. memcpy (spFrameData.dataBuffer, &(uartTaskData->frameData[FRAME_HEADER_LENGTH]), spFrameData.frameHeader.frameDataLength);
  9734. 800475a: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9735. 800475e: 691b ldr r3, [r3, #16]
  9736. 8004760: f103 0108 add.w r1, r3, #8
  9737. 8004764: f507 73a0 add.w r3, r7, #320 @ 0x140
  9738. 8004768: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  9739. 800476c: 889b ldrh r3, [r3, #4]
  9740. 800476e: 461a mov r2, r3
  9741. 8004770: f107 0310 add.w r3, r7, #16
  9742. 8004774: 330c adds r3, #12
  9743. 8004776: 4618 mov r0, r3
  9744. 8004778: f013 fabf bl 8017cfa <memcpy>
  9745. osMutexRelease (uartTaskData->rxDataBufferMutex);
  9746. 800477c: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9747. 8004780: 6a1b ldr r3, [r3, #32]
  9748. 8004782: 4618 mov r0, r3
  9749. 8004784: f00f f9f2 bl 8013b6c <osMutexRelease>
  9750. }
  9751. if (uartTaskData->processRxDataMsgBuffer != NULL) {
  9752. 8004788: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9753. 800478c: 6a5b ldr r3, [r3, #36] @ 0x24
  9754. 800478e: 2b00 cmp r3, #0
  9755. 8004790: d015 beq.n 80047be <UartRxTask+0x40a>
  9756. if (xMessageBufferSend (uartTaskData->processRxDataMsgBuffer, &spFrameData, sizeof (SerialProtocolFrameHeader) + spFrameData.frameHeader.frameDataLength, pdMS_TO_TICKS (200)) == pdFALSE) {
  9757. 8004792: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9758. 8004796: 6a58 ldr r0, [r3, #36] @ 0x24
  9759. 8004798: f507 73a0 add.w r3, r7, #320 @ 0x140
  9760. 800479c: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  9761. 80047a0: 889b ldrh r3, [r3, #4]
  9762. 80047a2: f103 020c add.w r2, r3, #12
  9763. 80047a6: f107 0110 add.w r1, r7, #16
  9764. 80047aa: 23c8 movs r3, #200 @ 0xc8
  9765. 80047ac: f010 fc00 bl 8014fb0 <xStreamBufferSend>
  9766. 80047b0: 4603 mov r3, r0
  9767. 80047b2: 2b00 cmp r3, #0
  9768. 80047b4: d103 bne.n 80047be <UartRxTask+0x40a>
  9769. receverState = srFail;
  9770. 80047b6: 2304 movs r3, #4
  9771. 80047b8: f887 3133 strb.w r3, [r7, #307] @ 0x133
  9772. break;
  9773. 80047bc: e0c3 b.n 8004946 <UartRxTask+0x592>
  9774. }
  9775. }
  9776. if (uartTaskData->processDataCb != NULL) {
  9777. 80047be: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9778. 80047c2: 6a9b ldr r3, [r3, #40] @ 0x28
  9779. 80047c4: 2b00 cmp r3, #0
  9780. 80047c6: d008 beq.n 80047da <UartRxTask+0x426>
  9781. uartTaskData->processDataCb (uartTaskData, &spFrameData);
  9782. 80047c8: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9783. 80047cc: 6a9b ldr r3, [r3, #40] @ 0x28
  9784. 80047ce: f107 0210 add.w r2, r7, #16
  9785. 80047d2: 4611 mov r1, r2
  9786. 80047d4: f8d7 012c ldr.w r0, [r7, #300] @ 0x12c
  9787. 80047d8: 4798 blx r3
  9788. }
  9789. receverState = srFinish;
  9790. 80047da: 2305 movs r3, #5
  9791. 80047dc: f887 3133 strb.w r3, [r7, #307] @ 0x133
  9792. break;
  9793. 80047e0: e0b1 b.n 8004946 <UartRxTask+0x592>
  9794. 80047e2: bf00 nop
  9795. 80047e4: 080188bc .word 0x080188bc
  9796. 80047e8: 24000400 .word 0x24000400
  9797. 80047ec: 080188dc .word 0x080188dc
  9798. case srFail:
  9799. dataToSend = 0;
  9800. 80047f0: 2300 movs r3, #0
  9801. 80047f2: f8a7 313c strh.w r3, [r7, #316] @ 0x13c
  9802. if ((frameTimeout == pdTRUE) && (frameBytesCount > 2)) {
  9803. 80047f6: f8d7 311c ldr.w r3, [r7, #284] @ 0x11c
  9804. 80047fa: 2b01 cmp r3, #1
  9805. 80047fc: d124 bne.n 8004848 <UartRxTask+0x494>
  9806. 80047fe: f8b7 3124 ldrh.w r3, [r7, #292] @ 0x124
  9807. 8004802: 2b02 cmp r3, #2
  9808. 8004804: d920 bls.n 8004848 <UartRxTask+0x494>
  9809. dataToSend = PrepareRespFrame (uartTaskData->uartTxBuffer, spFrameData.frameHeader.frameId, spFrameData.frameHeader.frameCommand, spTimeout, NULL, 0);
  9810. 8004806: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9811. 800480a: 6898 ldr r0, [r3, #8]
  9812. 800480c: f507 73a0 add.w r3, r7, #320 @ 0x140
  9813. 8004810: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  9814. 8004814: 8819 ldrh r1, [r3, #0]
  9815. 8004816: f507 73a0 add.w r3, r7, #320 @ 0x140
  9816. 800481a: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  9817. 800481e: 789a ldrb r2, [r3, #2]
  9818. 8004820: 2300 movs r3, #0
  9819. 8004822: 9301 str r3, [sp, #4]
  9820. 8004824: 2300 movs r3, #0
  9821. 8004826: 9300 str r3, [sp, #0]
  9822. 8004828: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  9823. 800482c: f7fe fcf0 bl 8003210 <PrepareRespFrame>
  9824. 8004830: 4603 mov r3, r0
  9825. 8004832: f8a7 313c strh.w r3, [r7, #316] @ 0x13c
  9826. printf ("Uart%d: RX data receiver timeout!\n", uartTaskData->uartNumber);
  9827. 8004836: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9828. 800483a: f893 3034 ldrb.w r3, [r3, #52] @ 0x34
  9829. 800483e: 4619 mov r1, r3
  9830. 8004840: 4844 ldr r0, [pc, #272] @ (8004954 <UartRxTask+0x5a0>)
  9831. 8004842: f013 f933 bl 8017aac <iprintf>
  9832. 8004846: e03c b.n 80048c2 <UartRxTask+0x50e>
  9833. } else if (!crcPass) {
  9834. 8004848: f8d7 3138 ldr.w r3, [r7, #312] @ 0x138
  9835. 800484c: 2b00 cmp r3, #0
  9836. 800484e: d120 bne.n 8004892 <UartRxTask+0x4de>
  9837. dataToSend = PrepareRespFrame (uartTaskData->uartTxBuffer, spFrameData.frameHeader.frameId, spFrameData.frameHeader.frameCommand, spCrcFail, NULL, 0);
  9838. 8004850: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9839. 8004854: 6898 ldr r0, [r3, #8]
  9840. 8004856: f507 73a0 add.w r3, r7, #320 @ 0x140
  9841. 800485a: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  9842. 800485e: 8819 ldrh r1, [r3, #0]
  9843. 8004860: f507 73a0 add.w r3, r7, #320 @ 0x140
  9844. 8004864: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  9845. 8004868: 789a ldrb r2, [r3, #2]
  9846. 800486a: 2300 movs r3, #0
  9847. 800486c: 9301 str r3, [sp, #4]
  9848. 800486e: 2300 movs r3, #0
  9849. 8004870: 9300 str r3, [sp, #0]
  9850. 8004872: f06f 0301 mvn.w r3, #1
  9851. 8004876: f7fe fccb bl 8003210 <PrepareRespFrame>
  9852. 800487a: 4603 mov r3, r0
  9853. 800487c: f8a7 313c strh.w r3, [r7, #316] @ 0x13c
  9854. printf ("Uart%d: Frame CRC FAIL\n", uartTaskData->uartNumber);
  9855. 8004880: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9856. 8004884: f893 3034 ldrb.w r3, [r3, #52] @ 0x34
  9857. 8004888: 4619 mov r1, r3
  9858. 800488a: 4833 ldr r0, [pc, #204] @ (8004958 <UartRxTask+0x5a4>)
  9859. 800488c: f013 f90e bl 8017aac <iprintf>
  9860. 8004890: e017 b.n 80048c2 <UartRxTask+0x50e>
  9861. } else {
  9862. dataToSend = PrepareRespFrame (uartTaskData->uartTxBuffer, spFrameData.frameHeader.frameId, spFrameData.frameHeader.frameCommand, spInternalError, NULL, 0);
  9863. 8004892: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9864. 8004896: 6898 ldr r0, [r3, #8]
  9865. 8004898: f507 73a0 add.w r3, r7, #320 @ 0x140
  9866. 800489c: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  9867. 80048a0: 8819 ldrh r1, [r3, #0]
  9868. 80048a2: f507 73a0 add.w r3, r7, #320 @ 0x140
  9869. 80048a6: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  9870. 80048aa: 789a ldrb r2, [r3, #2]
  9871. 80048ac: 2300 movs r3, #0
  9872. 80048ae: 9301 str r3, [sp, #4]
  9873. 80048b0: 2300 movs r3, #0
  9874. 80048b2: 9300 str r3, [sp, #0]
  9875. 80048b4: f06f 0303 mvn.w r3, #3
  9876. 80048b8: f7fe fcaa bl 8003210 <PrepareRespFrame>
  9877. 80048bc: 4603 mov r3, r0
  9878. 80048be: f8a7 313c strh.w r3, [r7, #316] @ 0x13c
  9879. }
  9880. if (dataToSend > 0) {
  9881. 80048c2: f8b7 313c ldrh.w r3, [r7, #316] @ 0x13c
  9882. 80048c6: 2b00 cmp r3, #0
  9883. 80048c8: d00a beq.n 80048e0 <UartRxTask+0x52c>
  9884. HAL_UART_Transmit_IT (uartTaskData->huart, uartTaskData->uartTxBuffer, dataToSend);
  9885. 80048ca: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9886. 80048ce: 6b18 ldr r0, [r3, #48] @ 0x30
  9887. 80048d0: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9888. 80048d4: 689b ldr r3, [r3, #8]
  9889. 80048d6: f8b7 213c ldrh.w r2, [r7, #316] @ 0x13c
  9890. 80048da: 4619 mov r1, r3
  9891. 80048dc: f00c f8ce bl 8010a7c <HAL_UART_Transmit_IT>
  9892. }
  9893. printf ("Uart%d: TX bytes sent: %d\n", dataToSend, uartTaskData->uartNumber);
  9894. 80048e0: f8b7 113c ldrh.w r1, [r7, #316] @ 0x13c
  9895. 80048e4: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9896. 80048e8: f893 3034 ldrb.w r3, [r3, #52] @ 0x34
  9897. 80048ec: 461a mov r2, r3
  9898. 80048ee: 481b ldr r0, [pc, #108] @ (800495c <UartRxTask+0x5a8>)
  9899. 80048f0: f013 f8dc bl 8017aac <iprintf>
  9900. receverState = srFinish;
  9901. 80048f4: 2305 movs r3, #5
  9902. 80048f6: f887 3133 strb.w r3, [r7, #307] @ 0x133
  9903. break;
  9904. 80048fa: e024 b.n 8004946 <UartRxTask+0x592>
  9905. case srFinish:
  9906. default:
  9907. osMutexAcquire (uartTaskData->rxDataBufferMutex, osWaitForever);
  9908. 80048fc: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9909. 8004900: 6a1b ldr r3, [r3, #32]
  9910. 8004902: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  9911. 8004906: 4618 mov r0, r3
  9912. 8004908: f00f f8e5 bl 8013ad6 <osMutexAcquire>
  9913. uartTaskData->frameBytesCount = 0;
  9914. 800490c: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9915. 8004910: 2200 movs r2, #0
  9916. 8004912: 82da strh r2, [r3, #22]
  9917. osMutexRelease (uartTaskData->rxDataBufferMutex);
  9918. 8004914: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  9919. 8004918: 6a1b ldr r3, [r3, #32]
  9920. 800491a: 4618 mov r0, r3
  9921. 800491c: f00f f926 bl 8013b6c <osMutexRelease>
  9922. spFrameData.frameHeader.frameCommand = spUnknown;
  9923. 8004920: f507 73a0 add.w r3, r7, #320 @ 0x140
  9924. 8004924: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  9925. 8004928: 220f movs r2, #15
  9926. 800492a: 709a strb r2, [r3, #2]
  9927. frameTotalLength = 0;
  9928. 800492c: 2300 movs r3, #0
  9929. 800492e: f8a7 313e strh.w r3, [r7, #318] @ 0x13e
  9930. outputDataBufferPos = 0;
  9931. 8004932: 4b0b ldr r3, [pc, #44] @ (8004960 <UartRxTask+0x5ac>)
  9932. 8004934: 2200 movs r2, #0
  9933. 8004936: 801a strh r2, [r3, #0]
  9934. receverState = srWaitForHeader;
  9935. 8004938: 2300 movs r3, #0
  9936. 800493a: f887 3133 strb.w r3, [r7, #307] @ 0x133
  9937. proceed = pdFALSE;
  9938. 800493e: 2300 movs r3, #0
  9939. 8004940: f8c7 3134 str.w r3, [r7, #308] @ 0x134
  9940. break;
  9941. 8004944: bf00 nop
  9942. while (proceed) {
  9943. 8004946: f8d7 3134 ldr.w r3, [r7, #308] @ 0x134
  9944. 800494a: 2b00 cmp r3, #0
  9945. 800494c: f47f ade0 bne.w 8004510 <UartRxTask+0x15c>
  9946. frameTimeout = !(xTaskNotifyWait (0, 0, &bytesRec, pdMS_TO_TICKS (FRAME_TIMEOUT_MS)));
  9947. 8004950: e581 b.n 8004456 <UartRxTask+0xa2>
  9948. 8004952: bf00 nop
  9949. 8004954: 080188f4 .word 0x080188f4
  9950. 8004958: 08018918 .word 0x08018918
  9951. 800495c: 08018930 .word 0x08018930
  9952. 8004960: 24000ca4 .word 0x24000ca4
  9953. 08004964 <Uart1ReceivedDataProcessCallback>:
  9954. void Uart8ReceivedDataProcessCallback (void* arg, SerialProtocolFrameData* spFrameData) {
  9955. Uart1ReceivedDataProcessCallback (arg, spFrameData);
  9956. }
  9957. void Uart1ReceivedDataProcessCallback (void* arg, SerialProtocolFrameData* spFrameData) {
  9958. 8004964: b590 push {r4, r7, lr}
  9959. 8004966: b0a3 sub sp, #140 @ 0x8c
  9960. 8004968: af06 add r7, sp, #24
  9961. 800496a: 6078 str r0, [r7, #4]
  9962. 800496c: 6039 str r1, [r7, #0]
  9963. UartTaskData* uartTaskData = (UartTaskData*)arg;
  9964. 800496e: 687b ldr r3, [r7, #4]
  9965. 8004970: 64fb str r3, [r7, #76] @ 0x4c
  9966. uint16_t dataToSend = 0;
  9967. 8004972: 2300 movs r3, #0
  9968. 8004974: f8a7 304a strh.w r3, [r7, #74] @ 0x4a
  9969. outputDataBufferPos = 0;
  9970. 8004978: 4ba3 ldr r3, [pc, #652] @ (8004c08 <Uart1ReceivedDataProcessCallback+0x2a4>)
  9971. 800497a: 2200 movs r2, #0
  9972. 800497c: 801a strh r2, [r3, #0]
  9973. uint16_t inputDataBufferPos = 0;
  9974. 800497e: 2300 movs r3, #0
  9975. 8004980: 86bb strh r3, [r7, #52] @ 0x34
  9976. SerialProtocolRespStatus respStatus = spUnknownCommand;
  9977. 8004982: 23fd movs r3, #253 @ 0xfd
  9978. 8004984: f887 306f strb.w r3, [r7, #111] @ 0x6f
  9979. switch (spFrameData->frameHeader.frameCommand) {
  9980. 8004988: 683b ldr r3, [r7, #0]
  9981. 800498a: 789b ldrb r3, [r3, #2]
  9982. 800498c: 2b0e cmp r3, #14
  9983. 800498e: f200 8473 bhi.w 8005278 <Uart1ReceivedDataProcessCallback+0x914>
  9984. 8004992: a201 add r2, pc, #4 @ (adr r2, 8004998 <Uart1ReceivedDataProcessCallback+0x34>)
  9985. 8004994: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  9986. 8004998: 080049d5 .word 0x080049d5
  9987. 800499c: 08004ac3 .word 0x08004ac3
  9988. 80049a0: 08004c6d .word 0x08004c6d
  9989. 80049a4: 08004d29 .word 0x08004d29
  9990. 80049a8: 08004dcb .word 0x08004dcb
  9991. 80049ac: 08004ee9 .word 0x08004ee9
  9992. 80049b0: 08004f71 .word 0x08004f71
  9993. 80049b4: 08004e6d .word 0x08004e6d
  9994. 80049b8: 08004fc7 .word 0x08004fc7
  9995. 80049bc: 08005039 .word 0x08005039
  9996. 80049c0: 08005085 .word 0x08005085
  9997. 80049c4: 080050d1 .word 0x080050d1
  9998. 80049c8: 08005133 .word 0x08005133
  9999. 80049cc: 08005197 .word 0x08005197
  10000. 80049d0: 080051f9 .word 0x080051f9
  10001. case spGetElectricalMeasurments:
  10002. if (osMutexAcquire (resMeasurementsMutex, osWaitForever) == osOK) {
  10003. 80049d4: 4b8d ldr r3, [pc, #564] @ (8004c0c <Uart1ReceivedDataProcessCallback+0x2a8>)
  10004. 80049d6: 681b ldr r3, [r3, #0]
  10005. 80049d8: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  10006. 80049dc: 4618 mov r0, r3
  10007. 80049de: f00f f87a bl 8013ad6 <osMutexAcquire>
  10008. 80049e2: 4603 mov r3, r0
  10009. 80049e4: 2b00 cmp r3, #0
  10010. 80049e6: d168 bne.n 8004aba <Uart1ReceivedDataProcessCallback+0x156>
  10011. for (int i = 0; i < 3; i++) {
  10012. 80049e8: 2300 movs r3, #0
  10013. 80049ea: 66bb str r3, [r7, #104] @ 0x68
  10014. 80049ec: e00b b.n 8004a06 <Uart1ReceivedDataProcessCallback+0xa2>
  10015. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &resMeasurements.voltageRMS[i], sizeof (float));
  10016. 80049ee: 6ebb ldr r3, [r7, #104] @ 0x68
  10017. 80049f0: 009b lsls r3, r3, #2
  10018. 80049f2: 4a87 ldr r2, [pc, #540] @ (8004c10 <Uart1ReceivedDataProcessCallback+0x2ac>)
  10019. 80049f4: 441a add r2, r3
  10020. 80049f6: 2304 movs r3, #4
  10021. 80049f8: 4983 ldr r1, [pc, #524] @ (8004c08 <Uart1ReceivedDataProcessCallback+0x2a4>)
  10022. 80049fa: 4886 ldr r0, [pc, #536] @ (8004c14 <Uart1ReceivedDataProcessCallback+0x2b0>)
  10023. 80049fc: f7fe fba4 bl 8003148 <WriteDataToBuffer>
  10024. for (int i = 0; i < 3; i++) {
  10025. 8004a00: 6ebb ldr r3, [r7, #104] @ 0x68
  10026. 8004a02: 3301 adds r3, #1
  10027. 8004a04: 66bb str r3, [r7, #104] @ 0x68
  10028. 8004a06: 6ebb ldr r3, [r7, #104] @ 0x68
  10029. 8004a08: 2b02 cmp r3, #2
  10030. 8004a0a: ddf0 ble.n 80049ee <Uart1ReceivedDataProcessCallback+0x8a>
  10031. }
  10032. for (int i = 0; i < 3; i++) {
  10033. 8004a0c: 2300 movs r3, #0
  10034. 8004a0e: 667b str r3, [r7, #100] @ 0x64
  10035. 8004a10: e00d b.n 8004a2e <Uart1ReceivedDataProcessCallback+0xca>
  10036. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &resMeasurements.voltagePeak[i], sizeof (float));
  10037. 8004a12: 6e7b ldr r3, [r7, #100] @ 0x64
  10038. 8004a14: 3302 adds r3, #2
  10039. 8004a16: 009b lsls r3, r3, #2
  10040. 8004a18: 4a7d ldr r2, [pc, #500] @ (8004c10 <Uart1ReceivedDataProcessCallback+0x2ac>)
  10041. 8004a1a: 4413 add r3, r2
  10042. 8004a1c: 1d1a adds r2, r3, #4
  10043. 8004a1e: 2304 movs r3, #4
  10044. 8004a20: 4979 ldr r1, [pc, #484] @ (8004c08 <Uart1ReceivedDataProcessCallback+0x2a4>)
  10045. 8004a22: 487c ldr r0, [pc, #496] @ (8004c14 <Uart1ReceivedDataProcessCallback+0x2b0>)
  10046. 8004a24: f7fe fb90 bl 8003148 <WriteDataToBuffer>
  10047. for (int i = 0; i < 3; i++) {
  10048. 8004a28: 6e7b ldr r3, [r7, #100] @ 0x64
  10049. 8004a2a: 3301 adds r3, #1
  10050. 8004a2c: 667b str r3, [r7, #100] @ 0x64
  10051. 8004a2e: 6e7b ldr r3, [r7, #100] @ 0x64
  10052. 8004a30: 2b02 cmp r3, #2
  10053. 8004a32: ddee ble.n 8004a12 <Uart1ReceivedDataProcessCallback+0xae>
  10054. }
  10055. for (int i = 0; i < 3; i++) {
  10056. 8004a34: 2300 movs r3, #0
  10057. 8004a36: 663b str r3, [r7, #96] @ 0x60
  10058. 8004a38: e00c b.n 8004a54 <Uart1ReceivedDataProcessCallback+0xf0>
  10059. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &resMeasurements.currentRMS[i], sizeof (float));
  10060. 8004a3a: 6e3b ldr r3, [r7, #96] @ 0x60
  10061. 8004a3c: 3306 adds r3, #6
  10062. 8004a3e: 009b lsls r3, r3, #2
  10063. 8004a40: 4a73 ldr r2, [pc, #460] @ (8004c10 <Uart1ReceivedDataProcessCallback+0x2ac>)
  10064. 8004a42: 441a add r2, r3
  10065. 8004a44: 2304 movs r3, #4
  10066. 8004a46: 4970 ldr r1, [pc, #448] @ (8004c08 <Uart1ReceivedDataProcessCallback+0x2a4>)
  10067. 8004a48: 4872 ldr r0, [pc, #456] @ (8004c14 <Uart1ReceivedDataProcessCallback+0x2b0>)
  10068. 8004a4a: f7fe fb7d bl 8003148 <WriteDataToBuffer>
  10069. for (int i = 0; i < 3; i++) {
  10070. 8004a4e: 6e3b ldr r3, [r7, #96] @ 0x60
  10071. 8004a50: 3301 adds r3, #1
  10072. 8004a52: 663b str r3, [r7, #96] @ 0x60
  10073. 8004a54: 6e3b ldr r3, [r7, #96] @ 0x60
  10074. 8004a56: 2b02 cmp r3, #2
  10075. 8004a58: ddef ble.n 8004a3a <Uart1ReceivedDataProcessCallback+0xd6>
  10076. }
  10077. for (int i = 0; i < 3; i++) {
  10078. 8004a5a: 2300 movs r3, #0
  10079. 8004a5c: 65fb str r3, [r7, #92] @ 0x5c
  10080. 8004a5e: e00d b.n 8004a7c <Uart1ReceivedDataProcessCallback+0x118>
  10081. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &resMeasurements.currentPeak[i], sizeof (float));
  10082. 8004a60: 6dfb ldr r3, [r7, #92] @ 0x5c
  10083. 8004a62: 3308 adds r3, #8
  10084. 8004a64: 009b lsls r3, r3, #2
  10085. 8004a66: 4a6a ldr r2, [pc, #424] @ (8004c10 <Uart1ReceivedDataProcessCallback+0x2ac>)
  10086. 8004a68: 4413 add r3, r2
  10087. 8004a6a: 1d1a adds r2, r3, #4
  10088. 8004a6c: 2304 movs r3, #4
  10089. 8004a6e: 4966 ldr r1, [pc, #408] @ (8004c08 <Uart1ReceivedDataProcessCallback+0x2a4>)
  10090. 8004a70: 4868 ldr r0, [pc, #416] @ (8004c14 <Uart1ReceivedDataProcessCallback+0x2b0>)
  10091. 8004a72: f7fe fb69 bl 8003148 <WriteDataToBuffer>
  10092. for (int i = 0; i < 3; i++) {
  10093. 8004a76: 6dfb ldr r3, [r7, #92] @ 0x5c
  10094. 8004a78: 3301 adds r3, #1
  10095. 8004a7a: 65fb str r3, [r7, #92] @ 0x5c
  10096. 8004a7c: 6dfb ldr r3, [r7, #92] @ 0x5c
  10097. 8004a7e: 2b02 cmp r3, #2
  10098. 8004a80: ddee ble.n 8004a60 <Uart1ReceivedDataProcessCallback+0xfc>
  10099. }
  10100. for (int i = 0; i < 3; i++) {
  10101. 8004a82: 2300 movs r3, #0
  10102. 8004a84: 65bb str r3, [r7, #88] @ 0x58
  10103. 8004a86: e00c b.n 8004aa2 <Uart1ReceivedDataProcessCallback+0x13e>
  10104. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &resMeasurements.power[i], sizeof (float));
  10105. 8004a88: 6dbb ldr r3, [r7, #88] @ 0x58
  10106. 8004a8a: 330c adds r3, #12
  10107. 8004a8c: 009b lsls r3, r3, #2
  10108. 8004a8e: 4a60 ldr r2, [pc, #384] @ (8004c10 <Uart1ReceivedDataProcessCallback+0x2ac>)
  10109. 8004a90: 441a add r2, r3
  10110. 8004a92: 2304 movs r3, #4
  10111. 8004a94: 495c ldr r1, [pc, #368] @ (8004c08 <Uart1ReceivedDataProcessCallback+0x2a4>)
  10112. 8004a96: 485f ldr r0, [pc, #380] @ (8004c14 <Uart1ReceivedDataProcessCallback+0x2b0>)
  10113. 8004a98: f7fe fb56 bl 8003148 <WriteDataToBuffer>
  10114. for (int i = 0; i < 3; i++) {
  10115. 8004a9c: 6dbb ldr r3, [r7, #88] @ 0x58
  10116. 8004a9e: 3301 adds r3, #1
  10117. 8004aa0: 65bb str r3, [r7, #88] @ 0x58
  10118. 8004aa2: 6dbb ldr r3, [r7, #88] @ 0x58
  10119. 8004aa4: 2b02 cmp r3, #2
  10120. 8004aa6: ddef ble.n 8004a88 <Uart1ReceivedDataProcessCallback+0x124>
  10121. }
  10122. osMutexRelease (resMeasurementsMutex);
  10123. 8004aa8: 4b58 ldr r3, [pc, #352] @ (8004c0c <Uart1ReceivedDataProcessCallback+0x2a8>)
  10124. 8004aaa: 681b ldr r3, [r3, #0]
  10125. 8004aac: 4618 mov r0, r3
  10126. 8004aae: f00f f85d bl 8013b6c <osMutexRelease>
  10127. respStatus = spOK;
  10128. 8004ab2: 2300 movs r3, #0
  10129. 8004ab4: f887 306f strb.w r3, [r7, #111] @ 0x6f
  10130. } else {
  10131. respStatus = spInternalError;
  10132. }
  10133. break;
  10134. 8004ab8: e3e2 b.n 8005280 <Uart1ReceivedDataProcessCallback+0x91c>
  10135. respStatus = spInternalError;
  10136. 8004aba: 23fc movs r3, #252 @ 0xfc
  10137. 8004abc: f887 306f strb.w r3, [r7, #111] @ 0x6f
  10138. break;
  10139. 8004ac0: e3de b.n 8005280 <Uart1ReceivedDataProcessCallback+0x91c>
  10140. case spGetSensorMeasurments:
  10141. if (osMutexAcquire (sensorsInfoMutex, osWaitForever) == osOK) {
  10142. 8004ac2: 4b55 ldr r3, [pc, #340] @ (8004c18 <Uart1ReceivedDataProcessCallback+0x2b4>)
  10143. 8004ac4: 681b ldr r3, [r3, #0]
  10144. 8004ac6: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  10145. 8004aca: 4618 mov r0, r3
  10146. 8004acc: f00f f803 bl 8013ad6 <osMutexAcquire>
  10147. 8004ad0: 4603 mov r3, r0
  10148. 8004ad2: 2b00 cmp r3, #0
  10149. 8004ad4: f040 8094 bne.w 8004c00 <Uart1ReceivedDataProcessCallback+0x29c>
  10150. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.pvTemperature[0], sizeof (float));
  10151. 8004ad8: 2304 movs r3, #4
  10152. 8004ada: 4a50 ldr r2, [pc, #320] @ (8004c1c <Uart1ReceivedDataProcessCallback+0x2b8>)
  10153. 8004adc: 494a ldr r1, [pc, #296] @ (8004c08 <Uart1ReceivedDataProcessCallback+0x2a4>)
  10154. 8004ade: 484d ldr r0, [pc, #308] @ (8004c14 <Uart1ReceivedDataProcessCallback+0x2b0>)
  10155. 8004ae0: f7fe fb32 bl 8003148 <WriteDataToBuffer>
  10156. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.pvTemperature[1], sizeof (float));
  10157. 8004ae4: 2304 movs r3, #4
  10158. 8004ae6: 4a4e ldr r2, [pc, #312] @ (8004c20 <Uart1ReceivedDataProcessCallback+0x2bc>)
  10159. 8004ae8: 4947 ldr r1, [pc, #284] @ (8004c08 <Uart1ReceivedDataProcessCallback+0x2a4>)
  10160. 8004aea: 484a ldr r0, [pc, #296] @ (8004c14 <Uart1ReceivedDataProcessCallback+0x2b0>)
  10161. 8004aec: f7fe fb2c bl 8003148 <WriteDataToBuffer>
  10162. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.fanVoltage, sizeof (float));
  10163. 8004af0: 2304 movs r3, #4
  10164. 8004af2: 4a4c ldr r2, [pc, #304] @ (8004c24 <Uart1ReceivedDataProcessCallback+0x2c0>)
  10165. 8004af4: 4944 ldr r1, [pc, #272] @ (8004c08 <Uart1ReceivedDataProcessCallback+0x2a4>)
  10166. 8004af6: 4847 ldr r0, [pc, #284] @ (8004c14 <Uart1ReceivedDataProcessCallback+0x2b0>)
  10167. 8004af8: f7fe fb26 bl 8003148 <WriteDataToBuffer>
  10168. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.pvEncoderX, sizeof (float));
  10169. 8004afc: 2304 movs r3, #4
  10170. 8004afe: 4a4a ldr r2, [pc, #296] @ (8004c28 <Uart1ReceivedDataProcessCallback+0x2c4>)
  10171. 8004b00: 4941 ldr r1, [pc, #260] @ (8004c08 <Uart1ReceivedDataProcessCallback+0x2a4>)
  10172. 8004b02: 4844 ldr r0, [pc, #272] @ (8004c14 <Uart1ReceivedDataProcessCallback+0x2b0>)
  10173. 8004b04: f7fe fb20 bl 8003148 <WriteDataToBuffer>
  10174. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.pvEncoderY, sizeof (float));
  10175. 8004b08: 2304 movs r3, #4
  10176. 8004b0a: 4a48 ldr r2, [pc, #288] @ (8004c2c <Uart1ReceivedDataProcessCallback+0x2c8>)
  10177. 8004b0c: 493e ldr r1, [pc, #248] @ (8004c08 <Uart1ReceivedDataProcessCallback+0x2a4>)
  10178. 8004b0e: 4841 ldr r0, [pc, #260] @ (8004c14 <Uart1ReceivedDataProcessCallback+0x2b0>)
  10179. 8004b10: f7fe fb1a bl 8003148 <WriteDataToBuffer>
  10180. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.motorXStatus, sizeof (uint8_t));
  10181. 8004b14: 2301 movs r3, #1
  10182. 8004b16: 4a46 ldr r2, [pc, #280] @ (8004c30 <Uart1ReceivedDataProcessCallback+0x2cc>)
  10183. 8004b18: 493b ldr r1, [pc, #236] @ (8004c08 <Uart1ReceivedDataProcessCallback+0x2a4>)
  10184. 8004b1a: 483e ldr r0, [pc, #248] @ (8004c14 <Uart1ReceivedDataProcessCallback+0x2b0>)
  10185. 8004b1c: f7fe fb14 bl 8003148 <WriteDataToBuffer>
  10186. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.motorYStatus, sizeof (uint8_t));
  10187. 8004b20: 2301 movs r3, #1
  10188. 8004b22: 4a44 ldr r2, [pc, #272] @ (8004c34 <Uart1ReceivedDataProcessCallback+0x2d0>)
  10189. 8004b24: 4938 ldr r1, [pc, #224] @ (8004c08 <Uart1ReceivedDataProcessCallback+0x2a4>)
  10190. 8004b26: 483b ldr r0, [pc, #236] @ (8004c14 <Uart1ReceivedDataProcessCallback+0x2b0>)
  10191. 8004b28: f7fe fb0e bl 8003148 <WriteDataToBuffer>
  10192. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.motorXAveCurrent, sizeof (float));
  10193. 8004b2c: 2304 movs r3, #4
  10194. 8004b2e: 4a42 ldr r2, [pc, #264] @ (8004c38 <Uart1ReceivedDataProcessCallback+0x2d4>)
  10195. 8004b30: 4935 ldr r1, [pc, #212] @ (8004c08 <Uart1ReceivedDataProcessCallback+0x2a4>)
  10196. 8004b32: 4838 ldr r0, [pc, #224] @ (8004c14 <Uart1ReceivedDataProcessCallback+0x2b0>)
  10197. 8004b34: f7fe fb08 bl 8003148 <WriteDataToBuffer>
  10198. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.motorYAveCurrent, sizeof (float));
  10199. 8004b38: 2304 movs r3, #4
  10200. 8004b3a: 4a40 ldr r2, [pc, #256] @ (8004c3c <Uart1ReceivedDataProcessCallback+0x2d8>)
  10201. 8004b3c: 4932 ldr r1, [pc, #200] @ (8004c08 <Uart1ReceivedDataProcessCallback+0x2a4>)
  10202. 8004b3e: 4835 ldr r0, [pc, #212] @ (8004c14 <Uart1ReceivedDataProcessCallback+0x2b0>)
  10203. 8004b40: f7fe fb02 bl 8003148 <WriteDataToBuffer>
  10204. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.motorXPeakCurrent, sizeof (float));
  10205. 8004b44: 2304 movs r3, #4
  10206. 8004b46: 4a3e ldr r2, [pc, #248] @ (8004c40 <Uart1ReceivedDataProcessCallback+0x2dc>)
  10207. 8004b48: 492f ldr r1, [pc, #188] @ (8004c08 <Uart1ReceivedDataProcessCallback+0x2a4>)
  10208. 8004b4a: 4832 ldr r0, [pc, #200] @ (8004c14 <Uart1ReceivedDataProcessCallback+0x2b0>)
  10209. 8004b4c: f7fe fafc bl 8003148 <WriteDataToBuffer>
  10210. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.motorYPeakCurrent, sizeof (float));
  10211. 8004b50: 2304 movs r3, #4
  10212. 8004b52: 4a3c ldr r2, [pc, #240] @ (8004c44 <Uart1ReceivedDataProcessCallback+0x2e0>)
  10213. 8004b54: 492c ldr r1, [pc, #176] @ (8004c08 <Uart1ReceivedDataProcessCallback+0x2a4>)
  10214. 8004b56: 482f ldr r0, [pc, #188] @ (8004c14 <Uart1ReceivedDataProcessCallback+0x2b0>)
  10215. 8004b58: f7fe faf6 bl 8003148 <WriteDataToBuffer>
  10216. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.limitXSwitchUp, sizeof (uint8_t));
  10217. 8004b5c: 2301 movs r3, #1
  10218. 8004b5e: 4a3a ldr r2, [pc, #232] @ (8004c48 <Uart1ReceivedDataProcessCallback+0x2e4>)
  10219. 8004b60: 4929 ldr r1, [pc, #164] @ (8004c08 <Uart1ReceivedDataProcessCallback+0x2a4>)
  10220. 8004b62: 482c ldr r0, [pc, #176] @ (8004c14 <Uart1ReceivedDataProcessCallback+0x2b0>)
  10221. 8004b64: f7fe faf0 bl 8003148 <WriteDataToBuffer>
  10222. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.limitXSwitchDown, sizeof (uint8_t));
  10223. 8004b68: 2301 movs r3, #1
  10224. 8004b6a: 4a38 ldr r2, [pc, #224] @ (8004c4c <Uart1ReceivedDataProcessCallback+0x2e8>)
  10225. 8004b6c: 4926 ldr r1, [pc, #152] @ (8004c08 <Uart1ReceivedDataProcessCallback+0x2a4>)
  10226. 8004b6e: 4829 ldr r0, [pc, #164] @ (8004c14 <Uart1ReceivedDataProcessCallback+0x2b0>)
  10227. 8004b70: f7fe faea bl 8003148 <WriteDataToBuffer>
  10228. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.limitXSwitchCenter, sizeof (uint8_t));
  10229. 8004b74: 2301 movs r3, #1
  10230. 8004b76: 4a36 ldr r2, [pc, #216] @ (8004c50 <Uart1ReceivedDataProcessCallback+0x2ec>)
  10231. 8004b78: 4923 ldr r1, [pc, #140] @ (8004c08 <Uart1ReceivedDataProcessCallback+0x2a4>)
  10232. 8004b7a: 4826 ldr r0, [pc, #152] @ (8004c14 <Uart1ReceivedDataProcessCallback+0x2b0>)
  10233. 8004b7c: f7fe fae4 bl 8003148 <WriteDataToBuffer>
  10234. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.limitYSwitchUp, sizeof (uint8_t));
  10235. 8004b80: 2301 movs r3, #1
  10236. 8004b82: 4a34 ldr r2, [pc, #208] @ (8004c54 <Uart1ReceivedDataProcessCallback+0x2f0>)
  10237. 8004b84: 4920 ldr r1, [pc, #128] @ (8004c08 <Uart1ReceivedDataProcessCallback+0x2a4>)
  10238. 8004b86: 4823 ldr r0, [pc, #140] @ (8004c14 <Uart1ReceivedDataProcessCallback+0x2b0>)
  10239. 8004b88: f7fe fade bl 8003148 <WriteDataToBuffer>
  10240. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.limitYSwitchDown, sizeof (uint8_t));
  10241. 8004b8c: 2301 movs r3, #1
  10242. 8004b8e: 4a32 ldr r2, [pc, #200] @ (8004c58 <Uart1ReceivedDataProcessCallback+0x2f4>)
  10243. 8004b90: 491d ldr r1, [pc, #116] @ (8004c08 <Uart1ReceivedDataProcessCallback+0x2a4>)
  10244. 8004b92: 4820 ldr r0, [pc, #128] @ (8004c14 <Uart1ReceivedDataProcessCallback+0x2b0>)
  10245. 8004b94: f7fe fad8 bl 8003148 <WriteDataToBuffer>
  10246. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.limitYSwitchCenter, sizeof (uint8_t));
  10247. 8004b98: 2301 movs r3, #1
  10248. 8004b9a: 4a30 ldr r2, [pc, #192] @ (8004c5c <Uart1ReceivedDataProcessCallback+0x2f8>)
  10249. 8004b9c: 491a ldr r1, [pc, #104] @ (8004c08 <Uart1ReceivedDataProcessCallback+0x2a4>)
  10250. 8004b9e: 481d ldr r0, [pc, #116] @ (8004c14 <Uart1ReceivedDataProcessCallback+0x2b0>)
  10251. 8004ba0: f7fe fad2 bl 8003148 <WriteDataToBuffer>
  10252. uint8_t comparatorOutput = HAL_COMP_GetOutputLevel (&hcomp1) == COMP_OUTPUT_LEVEL_HIGH ? 1 : 0;
  10253. 8004ba4: 482e ldr r0, [pc, #184] @ (8004c60 <Uart1ReceivedDataProcessCallback+0x2fc>)
  10254. 8004ba6: f002 f9e9 bl 8006f7c <HAL_COMP_GetOutputLevel>
  10255. 8004baa: 4603 mov r3, r0
  10256. 8004bac: 2b01 cmp r3, #1
  10257. 8004bae: bf0c ite eq
  10258. 8004bb0: 2301 moveq r3, #1
  10259. 8004bb2: 2300 movne r3, #0
  10260. 8004bb4: b2db uxtb r3, r3
  10261. 8004bb6: f887 3037 strb.w r3, [r7, #55] @ 0x37
  10262. sensorsInfo.powerSupplyFailMask = ~((comparatorOutput << 1) | HAL_GPIO_ReadPin (GPIOD, GPIO_PIN_3)) & 0x01;
  10263. 8004bba: f897 3037 ldrb.w r3, [r7, #55] @ 0x37
  10264. 8004bbe: 005c lsls r4, r3, #1
  10265. 8004bc0: 2108 movs r1, #8
  10266. 8004bc2: 4828 ldr r0, [pc, #160] @ (8004c64 <Uart1ReceivedDataProcessCallback+0x300>)
  10267. 8004bc4: f005 ff92 bl 800aaec <HAL_GPIO_ReadPin>
  10268. 8004bc8: 4603 mov r3, r0
  10269. 8004bca: 4323 orrs r3, r4
  10270. 8004bcc: f003 0301 and.w r3, r3, #1
  10271. 8004bd0: 2b00 cmp r3, #0
  10272. 8004bd2: bf0c ite eq
  10273. 8004bd4: 2301 moveq r3, #1
  10274. 8004bd6: 2300 movne r3, #0
  10275. 8004bd8: b2db uxtb r3, r3
  10276. 8004bda: 461a mov r2, r3
  10277. 8004bdc: 4b0f ldr r3, [pc, #60] @ (8004c1c <Uart1ReceivedDataProcessCallback+0x2b8>)
  10278. 8004bde: f883 202e strb.w r2, [r3, #46] @ 0x2e
  10279. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.powerSupplyFailMask, sizeof (uint8_t));
  10280. 8004be2: 2301 movs r3, #1
  10281. 8004be4: 4a20 ldr r2, [pc, #128] @ (8004c68 <Uart1ReceivedDataProcessCallback+0x304>)
  10282. 8004be6: 4908 ldr r1, [pc, #32] @ (8004c08 <Uart1ReceivedDataProcessCallback+0x2a4>)
  10283. 8004be8: 480a ldr r0, [pc, #40] @ (8004c14 <Uart1ReceivedDataProcessCallback+0x2b0>)
  10284. 8004bea: f7fe faad bl 8003148 <WriteDataToBuffer>
  10285. osMutexRelease (sensorsInfoMutex);
  10286. 8004bee: 4b0a ldr r3, [pc, #40] @ (8004c18 <Uart1ReceivedDataProcessCallback+0x2b4>)
  10287. 8004bf0: 681b ldr r3, [r3, #0]
  10288. 8004bf2: 4618 mov r0, r3
  10289. 8004bf4: f00e ffba bl 8013b6c <osMutexRelease>
  10290. respStatus = spOK;
  10291. 8004bf8: 2300 movs r3, #0
  10292. 8004bfa: f887 306f strb.w r3, [r7, #111] @ 0x6f
  10293. } else {
  10294. respStatus = spInternalError;
  10295. }
  10296. break;
  10297. 8004bfe: e33f b.n 8005280 <Uart1ReceivedDataProcessCallback+0x91c>
  10298. respStatus = spInternalError;
  10299. 8004c00: 23fc movs r3, #252 @ 0xfc
  10300. 8004c02: f887 306f strb.w r3, [r7, #111] @ 0x6f
  10301. break;
  10302. 8004c06: e33b b.n 8005280 <Uart1ReceivedDataProcessCallback+0x91c>
  10303. 8004c08: 24000ca4 .word 0x24000ca4
  10304. 8004c0c: 240007e4 .word 0x240007e4
  10305. 8004c10: 240007f0 .word 0x240007f0
  10306. 8004c14: 24000c24 .word 0x24000c24
  10307. 8004c18: 240007e8 .word 0x240007e8
  10308. 8004c1c: 2400082c .word 0x2400082c
  10309. 8004c20: 24000830 .word 0x24000830
  10310. 8004c24: 24000834 .word 0x24000834
  10311. 8004c28: 24000838 .word 0x24000838
  10312. 8004c2c: 2400083c .word 0x2400083c
  10313. 8004c30: 24000840 .word 0x24000840
  10314. 8004c34: 24000841 .word 0x24000841
  10315. 8004c38: 24000844 .word 0x24000844
  10316. 8004c3c: 24000848 .word 0x24000848
  10317. 8004c40: 2400084c .word 0x2400084c
  10318. 8004c44: 24000850 .word 0x24000850
  10319. 8004c48: 24000854 .word 0x24000854
  10320. 8004c4c: 24000855 .word 0x24000855
  10321. 8004c50: 24000856 .word 0x24000856
  10322. 8004c54: 24000857 .word 0x24000857
  10323. 8004c58: 24000858 .word 0x24000858
  10324. 8004c5c: 24000859 .word 0x24000859
  10325. 8004c60: 240003d4 .word 0x240003d4
  10326. 8004c64: 58020c00 .word 0x58020c00
  10327. 8004c68: 2400085a .word 0x2400085a
  10328. case spSetFanSpeed:
  10329. osTimerStop (fanTimerHandle);
  10330. 8004c6c: 4bb4 ldr r3, [pc, #720] @ (8004f40 <Uart1ReceivedDataProcessCallback+0x5dc>)
  10331. 8004c6e: 681b ldr r3, [r3, #0]
  10332. 8004c70: 4618 mov r0, r3
  10333. 8004c72: f00e fe73 bl 801395c <osTimerStop>
  10334. int32_t fanTimerPeriod = 0;
  10335. 8004c76: 2300 movs r3, #0
  10336. 8004c78: 633b str r3, [r7, #48] @ 0x30
  10337. uint32_t pulse = 0;
  10338. 8004c7a: 2300 movs r3, #0
  10339. 8004c7c: 62fb str r3, [r7, #44] @ 0x2c
  10340. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, &pulse);
  10341. 8004c7e: 683b ldr r3, [r7, #0]
  10342. 8004c80: 330c adds r3, #12
  10343. 8004c82: f107 022c add.w r2, r7, #44 @ 0x2c
  10344. 8004c86: f107 0134 add.w r1, r7, #52 @ 0x34
  10345. 8004c8a: 4618 mov r0, r3
  10346. 8004c8c: f7fe fa8d bl 80031aa <ReadWordFromBufer>
  10347. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, (uint32_t*)&fanTimerPeriod);
  10348. 8004c90: 683b ldr r3, [r7, #0]
  10349. 8004c92: 330c adds r3, #12
  10350. 8004c94: f107 0230 add.w r2, r7, #48 @ 0x30
  10351. 8004c98: f107 0134 add.w r1, r7, #52 @ 0x34
  10352. 8004c9c: 4618 mov r0, r3
  10353. 8004c9e: f7fe fa84 bl 80031aa <ReadWordFromBufer>
  10354. fanTimerConfigOC.Pulse = pulse * 10;
  10355. 8004ca2: 6afa ldr r2, [r7, #44] @ 0x2c
  10356. 8004ca4: 4613 mov r3, r2
  10357. 8004ca6: 009b lsls r3, r3, #2
  10358. 8004ca8: 4413 add r3, r2
  10359. 8004caa: 005b lsls r3, r3, #1
  10360. 8004cac: 461a mov r2, r3
  10361. 8004cae: 4ba5 ldr r3, [pc, #660] @ (8004f44 <Uart1ReceivedDataProcessCallback+0x5e0>)
  10362. 8004cb0: 605a str r2, [r3, #4]
  10363. if (HAL_TIM_PWM_ConfigChannel (&htim1, &fanTimerConfigOC, TIM_CHANNEL_2) != HAL_OK) {
  10364. 8004cb2: 2204 movs r2, #4
  10365. 8004cb4: 49a3 ldr r1, [pc, #652] @ (8004f44 <Uart1ReceivedDataProcessCallback+0x5e0>)
  10366. 8004cb6: 48a4 ldr r0, [pc, #656] @ (8004f48 <Uart1ReceivedDataProcessCallback+0x5e4>)
  10367. 8004cb8: f00a fcc6 bl 800f648 <HAL_TIM_PWM_ConfigChannel>
  10368. 8004cbc: 4603 mov r3, r0
  10369. 8004cbe: 2b00 cmp r3, #0
  10370. 8004cc0: d001 beq.n 8004cc6 <Uart1ReceivedDataProcessCallback+0x362>
  10371. Error_Handler ();
  10372. 8004cc2: f7fd f8a5 bl 8001e10 <Error_Handler>
  10373. }
  10374. if (fanTimerPeriod > 0) {
  10375. 8004cc6: 6b3b ldr r3, [r7, #48] @ 0x30
  10376. 8004cc8: 2b00 cmp r3, #0
  10377. 8004cca: dd0f ble.n 8004cec <Uart1ReceivedDataProcessCallback+0x388>
  10378. osTimerStart (fanTimerHandle, fanTimerPeriod * 1000);
  10379. 8004ccc: 4b9c ldr r3, [pc, #624] @ (8004f40 <Uart1ReceivedDataProcessCallback+0x5dc>)
  10380. 8004cce: 681a ldr r2, [r3, #0]
  10381. 8004cd0: 6b3b ldr r3, [r7, #48] @ 0x30
  10382. 8004cd2: f44f 717a mov.w r1, #1000 @ 0x3e8
  10383. 8004cd6: fb01 f303 mul.w r3, r1, r3
  10384. 8004cda: 4619 mov r1, r3
  10385. 8004cdc: 4610 mov r0, r2
  10386. 8004cde: f00e fe0f bl 8013900 <osTimerStart>
  10387. HAL_TIM_PWM_Start (&htim1, TIM_CHANNEL_2);
  10388. 8004ce2: 2104 movs r1, #4
  10389. 8004ce4: 4898 ldr r0, [pc, #608] @ (8004f48 <Uart1ReceivedDataProcessCallback+0x5e4>)
  10390. 8004ce6: f009 ffb5 bl 800ec54 <HAL_TIM_PWM_Start>
  10391. 8004cea: e019 b.n 8004d20 <Uart1ReceivedDataProcessCallback+0x3bc>
  10392. } else if (fanTimerPeriod == 0) {
  10393. 8004cec: 6b3b ldr r3, [r7, #48] @ 0x30
  10394. 8004cee: 2b00 cmp r3, #0
  10395. 8004cf0: d109 bne.n 8004d06 <Uart1ReceivedDataProcessCallback+0x3a2>
  10396. osTimerStop (fanTimerHandle);
  10397. 8004cf2: 4b93 ldr r3, [pc, #588] @ (8004f40 <Uart1ReceivedDataProcessCallback+0x5dc>)
  10398. 8004cf4: 681b ldr r3, [r3, #0]
  10399. 8004cf6: 4618 mov r0, r3
  10400. 8004cf8: f00e fe30 bl 801395c <osTimerStop>
  10401. HAL_TIM_PWM_Stop (&htim1, TIM_CHANNEL_2);
  10402. 8004cfc: 2104 movs r1, #4
  10403. 8004cfe: 4892 ldr r0, [pc, #584] @ (8004f48 <Uart1ReceivedDataProcessCallback+0x5e4>)
  10404. 8004d00: f00a f8b6 bl 800ee70 <HAL_TIM_PWM_Stop>
  10405. 8004d04: e00c b.n 8004d20 <Uart1ReceivedDataProcessCallback+0x3bc>
  10406. } else if (fanTimerPeriod == -1) {
  10407. 8004d06: 6b3b ldr r3, [r7, #48] @ 0x30
  10408. 8004d08: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  10409. 8004d0c: d108 bne.n 8004d20 <Uart1ReceivedDataProcessCallback+0x3bc>
  10410. osTimerStop (fanTimerHandle);
  10411. 8004d0e: 4b8c ldr r3, [pc, #560] @ (8004f40 <Uart1ReceivedDataProcessCallback+0x5dc>)
  10412. 8004d10: 681b ldr r3, [r3, #0]
  10413. 8004d12: 4618 mov r0, r3
  10414. 8004d14: f00e fe22 bl 801395c <osTimerStop>
  10415. HAL_TIM_PWM_Start (&htim1, TIM_CHANNEL_2);
  10416. 8004d18: 2104 movs r1, #4
  10417. 8004d1a: 488b ldr r0, [pc, #556] @ (8004f48 <Uart1ReceivedDataProcessCallback+0x5e4>)
  10418. 8004d1c: f009 ff9a bl 800ec54 <HAL_TIM_PWM_Start>
  10419. }
  10420. respStatus = spOK;
  10421. 8004d20: 2300 movs r3, #0
  10422. 8004d22: f887 306f strb.w r3, [r7, #111] @ 0x6f
  10423. break;
  10424. 8004d26: e2ab b.n 8005280 <Uart1ReceivedDataProcessCallback+0x91c>
  10425. case spSetMotorXOn:
  10426. int32_t motorXPWMPulse = 0;
  10427. 8004d28: 2300 movs r3, #0
  10428. 8004d2a: 62bb str r3, [r7, #40] @ 0x28
  10429. int32_t motorXTimerPeriod = 0;
  10430. 8004d2c: 2300 movs r3, #0
  10431. 8004d2e: 627b str r3, [r7, #36] @ 0x24
  10432. uint32_t motorXStatus = 0;
  10433. 8004d30: 2300 movs r3, #0
  10434. 8004d32: 63bb str r3, [r7, #56] @ 0x38
  10435. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, (uint32_t*)&motorXPWMPulse);
  10436. 8004d34: 683b ldr r3, [r7, #0]
  10437. 8004d36: 330c adds r3, #12
  10438. 8004d38: f107 0228 add.w r2, r7, #40 @ 0x28
  10439. 8004d3c: f107 0134 add.w r1, r7, #52 @ 0x34
  10440. 8004d40: 4618 mov r0, r3
  10441. 8004d42: f7fe fa32 bl 80031aa <ReadWordFromBufer>
  10442. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, (uint32_t*)&motorXTimerPeriod);
  10443. 8004d46: 683b ldr r3, [r7, #0]
  10444. 8004d48: 330c adds r3, #12
  10445. 8004d4a: f107 0224 add.w r2, r7, #36 @ 0x24
  10446. 8004d4e: f107 0134 add.w r1, r7, #52 @ 0x34
  10447. 8004d52: 4618 mov r0, r3
  10448. 8004d54: f7fe fa29 bl 80031aa <ReadWordFromBufer>
  10449. if (osMutexAcquire (sensorsInfoMutex, osWaitForever) == osOK) {
  10450. 8004d58: 4b7c ldr r3, [pc, #496] @ (8004f4c <Uart1ReceivedDataProcessCallback+0x5e8>)
  10451. 8004d5a: 681b ldr r3, [r3, #0]
  10452. 8004d5c: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  10453. 8004d60: 4618 mov r0, r3
  10454. 8004d62: f00e feb8 bl 8013ad6 <osMutexAcquire>
  10455. 8004d66: 4603 mov r3, r0
  10456. 8004d68: 2b00 cmp r3, #0
  10457. 8004d6a: d12a bne.n 8004dc2 <Uart1ReceivedDataProcessCallback+0x45e>
  10458. motorXStatus =
  10459. motorControl (&htim3, &motorXYTimerConfigOC, TIM_CHANNEL_1, TIM_CHANNEL_2, motorXTimerHandle, motorXPWMPulse, motorXTimerPeriod, sensorsInfo.limitXSwitchUp, sensorsInfo.limitXSwitchDown);
  10460. 8004d6c: 4b78 ldr r3, [pc, #480] @ (8004f50 <Uart1ReceivedDataProcessCallback+0x5ec>)
  10461. 8004d6e: 681b ldr r3, [r3, #0]
  10462. 8004d70: 6aba ldr r2, [r7, #40] @ 0x28
  10463. 8004d72: 6a79 ldr r1, [r7, #36] @ 0x24
  10464. 8004d74: 4877 ldr r0, [pc, #476] @ (8004f54 <Uart1ReceivedDataProcessCallback+0x5f0>)
  10465. 8004d76: f890 0028 ldrb.w r0, [r0, #40] @ 0x28
  10466. 8004d7a: 4c76 ldr r4, [pc, #472] @ (8004f54 <Uart1ReceivedDataProcessCallback+0x5f0>)
  10467. 8004d7c: f894 4029 ldrb.w r4, [r4, #41] @ 0x29
  10468. 8004d80: 9404 str r4, [sp, #16]
  10469. 8004d82: 9003 str r0, [sp, #12]
  10470. 8004d84: 9102 str r1, [sp, #8]
  10471. 8004d86: 9201 str r2, [sp, #4]
  10472. 8004d88: 9300 str r3, [sp, #0]
  10473. 8004d8a: 2304 movs r3, #4
  10474. 8004d8c: 2200 movs r2, #0
  10475. 8004d8e: 4972 ldr r1, [pc, #456] @ (8004f58 <Uart1ReceivedDataProcessCallback+0x5f4>)
  10476. 8004d90: 4872 ldr r0, [pc, #456] @ (8004f5c <Uart1ReceivedDataProcessCallback+0x5f8>)
  10477. 8004d92: f7fe f833 bl 8002dfc <motorControl>
  10478. 8004d96: 4603 mov r3, r0
  10479. motorXStatus =
  10480. 8004d98: 63bb str r3, [r7, #56] @ 0x38
  10481. sensorsInfo.motorXStatus = motorXStatus;
  10482. 8004d9a: 6bbb ldr r3, [r7, #56] @ 0x38
  10483. 8004d9c: b2da uxtb r2, r3
  10484. 8004d9e: 4b6d ldr r3, [pc, #436] @ (8004f54 <Uart1ReceivedDataProcessCallback+0x5f0>)
  10485. 8004da0: 751a strb r2, [r3, #20]
  10486. if (motorXStatus == 1) {
  10487. 8004da2: 6bbb ldr r3, [r7, #56] @ 0x38
  10488. 8004da4: 2b01 cmp r3, #1
  10489. 8004da6: d103 bne.n 8004db0 <Uart1ReceivedDataProcessCallback+0x44c>
  10490. sensorsInfo.motorXPeakCurrent = 0.0;
  10491. 8004da8: 4b6a ldr r3, [pc, #424] @ (8004f54 <Uart1ReceivedDataProcessCallback+0x5f0>)
  10492. 8004daa: f04f 0200 mov.w r2, #0
  10493. 8004dae: 621a str r2, [r3, #32]
  10494. }
  10495. osMutexRelease (sensorsInfoMutex);
  10496. 8004db0: 4b66 ldr r3, [pc, #408] @ (8004f4c <Uart1ReceivedDataProcessCallback+0x5e8>)
  10497. 8004db2: 681b ldr r3, [r3, #0]
  10498. 8004db4: 4618 mov r0, r3
  10499. 8004db6: f00e fed9 bl 8013b6c <osMutexRelease>
  10500. respStatus = spOK;
  10501. 8004dba: 2300 movs r3, #0
  10502. 8004dbc: f887 306f strb.w r3, [r7, #111] @ 0x6f
  10503. } else {
  10504. respStatus = spInternalError;
  10505. }
  10506. break;
  10507. 8004dc0: e25e b.n 8005280 <Uart1ReceivedDataProcessCallback+0x91c>
  10508. respStatus = spInternalError;
  10509. 8004dc2: 23fc movs r3, #252 @ 0xfc
  10510. 8004dc4: f887 306f strb.w r3, [r7, #111] @ 0x6f
  10511. break;
  10512. 8004dc8: e25a b.n 8005280 <Uart1ReceivedDataProcessCallback+0x91c>
  10513. case spSetMotorYOn:
  10514. int32_t motorYPWMPulse = 0;
  10515. 8004dca: 2300 movs r3, #0
  10516. 8004dcc: 623b str r3, [r7, #32]
  10517. int32_t motorYTimerPeriod = 0;
  10518. 8004dce: 2300 movs r3, #0
  10519. 8004dd0: 61fb str r3, [r7, #28]
  10520. uint32_t motorYStatus = 0;
  10521. 8004dd2: 2300 movs r3, #0
  10522. 8004dd4: 63fb str r3, [r7, #60] @ 0x3c
  10523. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, (uint32_t*)&motorYPWMPulse);
  10524. 8004dd6: 683b ldr r3, [r7, #0]
  10525. 8004dd8: 330c adds r3, #12
  10526. 8004dda: f107 0220 add.w r2, r7, #32
  10527. 8004dde: f107 0134 add.w r1, r7, #52 @ 0x34
  10528. 8004de2: 4618 mov r0, r3
  10529. 8004de4: f7fe f9e1 bl 80031aa <ReadWordFromBufer>
  10530. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, (uint32_t*)&motorYTimerPeriod);
  10531. 8004de8: 683b ldr r3, [r7, #0]
  10532. 8004dea: 330c adds r3, #12
  10533. 8004dec: f107 021c add.w r2, r7, #28
  10534. 8004df0: f107 0134 add.w r1, r7, #52 @ 0x34
  10535. 8004df4: 4618 mov r0, r3
  10536. 8004df6: f7fe f9d8 bl 80031aa <ReadWordFromBufer>
  10537. if (osMutexAcquire (sensorsInfoMutex, osWaitForever) == osOK) {
  10538. 8004dfa: 4b54 ldr r3, [pc, #336] @ (8004f4c <Uart1ReceivedDataProcessCallback+0x5e8>)
  10539. 8004dfc: 681b ldr r3, [r3, #0]
  10540. 8004dfe: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  10541. 8004e02: 4618 mov r0, r3
  10542. 8004e04: f00e fe67 bl 8013ad6 <osMutexAcquire>
  10543. 8004e08: 4603 mov r3, r0
  10544. 8004e0a: 2b00 cmp r3, #0
  10545. 8004e0c: d12a bne.n 8004e64 <Uart1ReceivedDataProcessCallback+0x500>
  10546. motorYStatus =
  10547. motorControl (&htim3, &motorXYTimerConfigOC, TIM_CHANNEL_3, TIM_CHANNEL_4, motorYTimerHandle, motorYPWMPulse, motorYTimerPeriod, sensorsInfo.limitYSwitchUp, sensorsInfo.limitYSwitchDown);
  10548. 8004e0e: 4b54 ldr r3, [pc, #336] @ (8004f60 <Uart1ReceivedDataProcessCallback+0x5fc>)
  10549. 8004e10: 681b ldr r3, [r3, #0]
  10550. 8004e12: 6a3a ldr r2, [r7, #32]
  10551. 8004e14: 69f9 ldr r1, [r7, #28]
  10552. 8004e16: 484f ldr r0, [pc, #316] @ (8004f54 <Uart1ReceivedDataProcessCallback+0x5f0>)
  10553. 8004e18: f890 002b ldrb.w r0, [r0, #43] @ 0x2b
  10554. 8004e1c: 4c4d ldr r4, [pc, #308] @ (8004f54 <Uart1ReceivedDataProcessCallback+0x5f0>)
  10555. 8004e1e: f894 402c ldrb.w r4, [r4, #44] @ 0x2c
  10556. 8004e22: 9404 str r4, [sp, #16]
  10557. 8004e24: 9003 str r0, [sp, #12]
  10558. 8004e26: 9102 str r1, [sp, #8]
  10559. 8004e28: 9201 str r2, [sp, #4]
  10560. 8004e2a: 9300 str r3, [sp, #0]
  10561. 8004e2c: 230c movs r3, #12
  10562. 8004e2e: 2208 movs r2, #8
  10563. 8004e30: 4949 ldr r1, [pc, #292] @ (8004f58 <Uart1ReceivedDataProcessCallback+0x5f4>)
  10564. 8004e32: 484a ldr r0, [pc, #296] @ (8004f5c <Uart1ReceivedDataProcessCallback+0x5f8>)
  10565. 8004e34: f7fd ffe2 bl 8002dfc <motorControl>
  10566. 8004e38: 4603 mov r3, r0
  10567. motorYStatus =
  10568. 8004e3a: 63fb str r3, [r7, #60] @ 0x3c
  10569. sensorsInfo.motorYStatus = motorYStatus;
  10570. 8004e3c: 6bfb ldr r3, [r7, #60] @ 0x3c
  10571. 8004e3e: b2da uxtb r2, r3
  10572. 8004e40: 4b44 ldr r3, [pc, #272] @ (8004f54 <Uart1ReceivedDataProcessCallback+0x5f0>)
  10573. 8004e42: 755a strb r2, [r3, #21]
  10574. if (motorYStatus == 1) {
  10575. 8004e44: 6bfb ldr r3, [r7, #60] @ 0x3c
  10576. 8004e46: 2b01 cmp r3, #1
  10577. 8004e48: d103 bne.n 8004e52 <Uart1ReceivedDataProcessCallback+0x4ee>
  10578. sensorsInfo.motorYPeakCurrent = 0.0;
  10579. 8004e4a: 4b42 ldr r3, [pc, #264] @ (8004f54 <Uart1ReceivedDataProcessCallback+0x5f0>)
  10580. 8004e4c: f04f 0200 mov.w r2, #0
  10581. 8004e50: 625a str r2, [r3, #36] @ 0x24
  10582. }
  10583. osMutexRelease (sensorsInfoMutex);
  10584. 8004e52: 4b3e ldr r3, [pc, #248] @ (8004f4c <Uart1ReceivedDataProcessCallback+0x5e8>)
  10585. 8004e54: 681b ldr r3, [r3, #0]
  10586. 8004e56: 4618 mov r0, r3
  10587. 8004e58: f00e fe88 bl 8013b6c <osMutexRelease>
  10588. respStatus = spOK;
  10589. 8004e5c: 2300 movs r3, #0
  10590. 8004e5e: f887 306f strb.w r3, [r7, #111] @ 0x6f
  10591. } else {
  10592. respStatus = spInternalError;
  10593. }
  10594. break;
  10595. 8004e62: e20d b.n 8005280 <Uart1ReceivedDataProcessCallback+0x91c>
  10596. respStatus = spInternalError;
  10597. 8004e64: 23fc movs r3, #252 @ 0xfc
  10598. 8004e66: f887 306f strb.w r3, [r7, #111] @ 0x6f
  10599. break;
  10600. 8004e6a: e209 b.n 8005280 <Uart1ReceivedDataProcessCallback+0x91c>
  10601. case spSetDiodeOn:
  10602. osTimerStop (debugLedTimerHandle);
  10603. 8004e6c: 4b3d ldr r3, [pc, #244] @ (8004f64 <Uart1ReceivedDataProcessCallback+0x600>)
  10604. 8004e6e: 681b ldr r3, [r3, #0]
  10605. 8004e70: 4618 mov r0, r3
  10606. 8004e72: f00e fd73 bl 801395c <osTimerStop>
  10607. int32_t dbgLedTimerPeriod = 0;
  10608. 8004e76: 2300 movs r3, #0
  10609. 8004e78: 61bb str r3, [r7, #24]
  10610. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, (uint32_t*)&dbgLedTimerPeriod);
  10611. 8004e7a: 683b ldr r3, [r7, #0]
  10612. 8004e7c: 330c adds r3, #12
  10613. 8004e7e: f107 0218 add.w r2, r7, #24
  10614. 8004e82: f107 0134 add.w r1, r7, #52 @ 0x34
  10615. 8004e86: 4618 mov r0, r3
  10616. 8004e88: f7fe f98f bl 80031aa <ReadWordFromBufer>
  10617. if (dbgLedTimerPeriod > 0) {
  10618. 8004e8c: 69bb ldr r3, [r7, #24]
  10619. 8004e8e: 2b00 cmp r3, #0
  10620. 8004e90: dd0e ble.n 8004eb0 <Uart1ReceivedDataProcessCallback+0x54c>
  10621. osTimerStart (debugLedTimerHandle, dbgLedTimerPeriod * 1000);
  10622. 8004e92: 4b34 ldr r3, [pc, #208] @ (8004f64 <Uart1ReceivedDataProcessCallback+0x600>)
  10623. 8004e94: 681a ldr r2, [r3, #0]
  10624. 8004e96: 69bb ldr r3, [r7, #24]
  10625. 8004e98: f44f 717a mov.w r1, #1000 @ 0x3e8
  10626. 8004e9c: fb01 f303 mul.w r3, r1, r3
  10627. 8004ea0: 4619 mov r1, r3
  10628. 8004ea2: 4610 mov r0, r2
  10629. 8004ea4: f00e fd2c bl 8013900 <osTimerStart>
  10630. DbgLEDOn (DBG_LED1);
  10631. 8004ea8: 2010 movs r0, #16
  10632. 8004eaa: f7fd ff19 bl 8002ce0 <DbgLEDOn>
  10633. 8004eae: e017 b.n 8004ee0 <Uart1ReceivedDataProcessCallback+0x57c>
  10634. } else if (dbgLedTimerPeriod == 0) {
  10635. 8004eb0: 69bb ldr r3, [r7, #24]
  10636. 8004eb2: 2b00 cmp r3, #0
  10637. 8004eb4: d108 bne.n 8004ec8 <Uart1ReceivedDataProcessCallback+0x564>
  10638. osTimerStop (debugLedTimerHandle);
  10639. 8004eb6: 4b2b ldr r3, [pc, #172] @ (8004f64 <Uart1ReceivedDataProcessCallback+0x600>)
  10640. 8004eb8: 681b ldr r3, [r3, #0]
  10641. 8004eba: 4618 mov r0, r3
  10642. 8004ebc: f00e fd4e bl 801395c <osTimerStop>
  10643. DbgLEDOff (DBG_LED1);
  10644. 8004ec0: 2010 movs r0, #16
  10645. 8004ec2: f7fd ff1f bl 8002d04 <DbgLEDOff>
  10646. 8004ec6: e00b b.n 8004ee0 <Uart1ReceivedDataProcessCallback+0x57c>
  10647. } else if (dbgLedTimerPeriod == -1) {
  10648. 8004ec8: 69bb ldr r3, [r7, #24]
  10649. 8004eca: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  10650. 8004ece: d107 bne.n 8004ee0 <Uart1ReceivedDataProcessCallback+0x57c>
  10651. osTimerStop (debugLedTimerHandle);
  10652. 8004ed0: 4b24 ldr r3, [pc, #144] @ (8004f64 <Uart1ReceivedDataProcessCallback+0x600>)
  10653. 8004ed2: 681b ldr r3, [r3, #0]
  10654. 8004ed4: 4618 mov r0, r3
  10655. 8004ed6: f00e fd41 bl 801395c <osTimerStop>
  10656. DbgLEDOn (DBG_LED1);
  10657. 8004eda: 2010 movs r0, #16
  10658. 8004edc: f7fd ff00 bl 8002ce0 <DbgLEDOn>
  10659. }
  10660. respStatus = spOK;
  10661. 8004ee0: 2300 movs r3, #0
  10662. 8004ee2: f887 306f strb.w r3, [r7, #111] @ 0x6f
  10663. break;
  10664. 8004ee6: e1cb b.n 8005280 <Uart1ReceivedDataProcessCallback+0x91c>
  10665. case spSetmotorXMaxCurrent:
  10666. float motorXMaxCurrent = 0;
  10667. 8004ee8: f04f 0300 mov.w r3, #0
  10668. 8004eec: 617b str r3, [r7, #20]
  10669. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, (uint32_t*)&motorXMaxCurrent);
  10670. 8004eee: 683b ldr r3, [r7, #0]
  10671. 8004ef0: 330c adds r3, #12
  10672. 8004ef2: f107 0214 add.w r2, r7, #20
  10673. 8004ef6: f107 0134 add.w r1, r7, #52 @ 0x34
  10674. 8004efa: 4618 mov r0, r3
  10675. 8004efc: f7fe f955 bl 80031aa <ReadWordFromBufer>
  10676. uint32_t dacDataCh1 = (uint32_t)(4095 * motorXMaxCurrent / (EXT_VREF_mV * 0.001));
  10677. 8004f00: edd7 7a05 vldr s15, [r7, #20]
  10678. 8004f04: ed9f 7a19 vldr s14, [pc, #100] @ 8004f6c <Uart1ReceivedDataProcessCallback+0x608>
  10679. 8004f08: ee67 7a87 vmul.f32 s15, s15, s14
  10680. 8004f0c: eeb7 6ae7 vcvt.f64.f32 d6, s15
  10681. 8004f10: eeb0 5b08 vmov.f64 d5, #8 @ 0x40400000 3.0
  10682. 8004f14: ee86 7b05 vdiv.f64 d7, d6, d5
  10683. 8004f18: eefc 7bc7 vcvt.u32.f64 s15, d7
  10684. 8004f1c: ee17 3a90 vmov r3, s15
  10685. 8004f20: 643b str r3, [r7, #64] @ 0x40
  10686. HAL_DAC_SetValue (&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, dacDataCh1);
  10687. 8004f22: 6c3b ldr r3, [r7, #64] @ 0x40
  10688. 8004f24: 2200 movs r2, #0
  10689. 8004f26: 2100 movs r1, #0
  10690. 8004f28: 480f ldr r0, [pc, #60] @ (8004f68 <Uart1ReceivedDataProcessCallback+0x604>)
  10691. 8004f2a: f002 fc72 bl 8007812 <HAL_DAC_SetValue>
  10692. HAL_DAC_Start (&hdac1, DAC_CHANNEL_1);
  10693. 8004f2e: 2100 movs r1, #0
  10694. 8004f30: 480d ldr r0, [pc, #52] @ (8004f68 <Uart1ReceivedDataProcessCallback+0x604>)
  10695. 8004f32: f002 fbc1 bl 80076b8 <HAL_DAC_Start>
  10696. respStatus = spOK;
  10697. 8004f36: 2300 movs r3, #0
  10698. 8004f38: f887 306f strb.w r3, [r7, #111] @ 0x6f
  10699. break;
  10700. 8004f3c: e1a0 b.n 8005280 <Uart1ReceivedDataProcessCallback+0x91c>
  10701. 8004f3e: bf00 nop
  10702. 8004f40: 240006d8 .word 0x240006d8
  10703. 8004f44: 24000768 .word 0x24000768
  10704. 8004f48: 2400044c .word 0x2400044c
  10705. 8004f4c: 240007e8 .word 0x240007e8
  10706. 8004f50: 24000708 .word 0x24000708
  10707. 8004f54: 2400082c .word 0x2400082c
  10708. 8004f58: 24000784 .word 0x24000784
  10709. 8004f5c: 240004e4 .word 0x240004e4
  10710. 8004f60: 24000738 .word 0x24000738
  10711. 8004f64: 240006a8 .word 0x240006a8
  10712. 8004f68: 24000424 .word 0x24000424
  10713. 8004f6c: 457ff000 .word 0x457ff000
  10714. case spSetmotorYMaxCurrent:
  10715. float motorYMaxCurrent = 0;
  10716. 8004f70: f04f 0300 mov.w r3, #0
  10717. 8004f74: 613b str r3, [r7, #16]
  10718. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, (uint32_t*)&motorYMaxCurrent);
  10719. 8004f76: 683b ldr r3, [r7, #0]
  10720. 8004f78: 330c adds r3, #12
  10721. 8004f7a: f107 0210 add.w r2, r7, #16
  10722. 8004f7e: f107 0134 add.w r1, r7, #52 @ 0x34
  10723. 8004f82: 4618 mov r0, r3
  10724. 8004f84: f7fe f911 bl 80031aa <ReadWordFromBufer>
  10725. uint32_t dacDataCh2 = (uint32_t)(4095 * motorYMaxCurrent / (EXT_VREF_mV * 0.001));
  10726. 8004f88: edd7 7a04 vldr s15, [r7, #16]
  10727. 8004f8c: ed1f 7a09 vldr s14, [pc, #-36] @ 8004f6c <Uart1ReceivedDataProcessCallback+0x608>
  10728. 8004f90: ee67 7a87 vmul.f32 s15, s15, s14
  10729. 8004f94: eeb7 6ae7 vcvt.f64.f32 d6, s15
  10730. 8004f98: eeb0 5b08 vmov.f64 d5, #8 @ 0x40400000 3.0
  10731. 8004f9c: ee86 7b05 vdiv.f64 d7, d6, d5
  10732. 8004fa0: eefc 7bc7 vcvt.u32.f64 s15, d7
  10733. 8004fa4: ee17 3a90 vmov r3, s15
  10734. 8004fa8: 647b str r3, [r7, #68] @ 0x44
  10735. HAL_DAC_SetValue (&hdac1, DAC_CHANNEL_2, DAC_ALIGN_12B_R, dacDataCh2);
  10736. 8004faa: 6c7b ldr r3, [r7, #68] @ 0x44
  10737. 8004fac: 2200 movs r2, #0
  10738. 8004fae: 2110 movs r1, #16
  10739. 8004fb0: 48aa ldr r0, [pc, #680] @ (800525c <Uart1ReceivedDataProcessCallback+0x8f8>)
  10740. 8004fb2: f002 fc2e bl 8007812 <HAL_DAC_SetValue>
  10741. HAL_DAC_Start (&hdac1, DAC_CHANNEL_2);
  10742. 8004fb6: 2110 movs r1, #16
  10743. 8004fb8: 48a8 ldr r0, [pc, #672] @ (800525c <Uart1ReceivedDataProcessCallback+0x8f8>)
  10744. 8004fba: f002 fb7d bl 80076b8 <HAL_DAC_Start>
  10745. respStatus = spOK;
  10746. 8004fbe: 2300 movs r3, #0
  10747. 8004fc0: f887 306f strb.w r3, [r7, #111] @ 0x6f
  10748. break;
  10749. 8004fc4: e15c b.n 8005280 <Uart1ReceivedDataProcessCallback+0x91c>
  10750. case spClearPeakMeasurments:
  10751. if (osMutexAcquire (resMeasurementsMutex, osWaitForever) == osOK) {
  10752. 8004fc6: 4ba6 ldr r3, [pc, #664] @ (8005260 <Uart1ReceivedDataProcessCallback+0x8fc>)
  10753. 8004fc8: 681b ldr r3, [r3, #0]
  10754. 8004fca: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  10755. 8004fce: 4618 mov r0, r3
  10756. 8004fd0: f00e fd81 bl 8013ad6 <osMutexAcquire>
  10757. 8004fd4: 4603 mov r3, r0
  10758. 8004fd6: 2b00 cmp r3, #0
  10759. 8004fd8: d12a bne.n 8005030 <Uart1ReceivedDataProcessCallback+0x6cc>
  10760. for (int i = 0; i < 3; i++) {
  10761. 8004fda: 2300 movs r3, #0
  10762. 8004fdc: 657b str r3, [r7, #84] @ 0x54
  10763. 8004fde: e01b b.n 8005018 <Uart1ReceivedDataProcessCallback+0x6b4>
  10764. resMeasurements.voltagePeak[i] = resMeasurements.voltageRMS[i];
  10765. 8004fe0: 4aa0 ldr r2, [pc, #640] @ (8005264 <Uart1ReceivedDataProcessCallback+0x900>)
  10766. 8004fe2: 6d7b ldr r3, [r7, #84] @ 0x54
  10767. 8004fe4: 009b lsls r3, r3, #2
  10768. 8004fe6: 4413 add r3, r2
  10769. 8004fe8: 681a ldr r2, [r3, #0]
  10770. 8004fea: 499e ldr r1, [pc, #632] @ (8005264 <Uart1ReceivedDataProcessCallback+0x900>)
  10771. 8004fec: 6d7b ldr r3, [r7, #84] @ 0x54
  10772. 8004fee: 3302 adds r3, #2
  10773. 8004ff0: 009b lsls r3, r3, #2
  10774. 8004ff2: 440b add r3, r1
  10775. 8004ff4: 3304 adds r3, #4
  10776. 8004ff6: 601a str r2, [r3, #0]
  10777. resMeasurements.currentPeak[i] = resMeasurements.currentRMS[i];
  10778. 8004ff8: 4a9a ldr r2, [pc, #616] @ (8005264 <Uart1ReceivedDataProcessCallback+0x900>)
  10779. 8004ffa: 6d7b ldr r3, [r7, #84] @ 0x54
  10780. 8004ffc: 3306 adds r3, #6
  10781. 8004ffe: 009b lsls r3, r3, #2
  10782. 8005000: 4413 add r3, r2
  10783. 8005002: 681a ldr r2, [r3, #0]
  10784. 8005004: 4997 ldr r1, [pc, #604] @ (8005264 <Uart1ReceivedDataProcessCallback+0x900>)
  10785. 8005006: 6d7b ldr r3, [r7, #84] @ 0x54
  10786. 8005008: 3308 adds r3, #8
  10787. 800500a: 009b lsls r3, r3, #2
  10788. 800500c: 440b add r3, r1
  10789. 800500e: 3304 adds r3, #4
  10790. 8005010: 601a str r2, [r3, #0]
  10791. for (int i = 0; i < 3; i++) {
  10792. 8005012: 6d7b ldr r3, [r7, #84] @ 0x54
  10793. 8005014: 3301 adds r3, #1
  10794. 8005016: 657b str r3, [r7, #84] @ 0x54
  10795. 8005018: 6d7b ldr r3, [r7, #84] @ 0x54
  10796. 800501a: 2b02 cmp r3, #2
  10797. 800501c: dde0 ble.n 8004fe0 <Uart1ReceivedDataProcessCallback+0x67c>
  10798. }
  10799. osMutexRelease (resMeasurementsMutex);
  10800. 800501e: 4b90 ldr r3, [pc, #576] @ (8005260 <Uart1ReceivedDataProcessCallback+0x8fc>)
  10801. 8005020: 681b ldr r3, [r3, #0]
  10802. 8005022: 4618 mov r0, r3
  10803. 8005024: f00e fda2 bl 8013b6c <osMutexRelease>
  10804. respStatus = spOK;
  10805. 8005028: 2300 movs r3, #0
  10806. 800502a: f887 306f strb.w r3, [r7, #111] @ 0x6f
  10807. } else {
  10808. respStatus = spInternalError;
  10809. }
  10810. break;
  10811. 800502e: e127 b.n 8005280 <Uart1ReceivedDataProcessCallback+0x91c>
  10812. respStatus = spInternalError;
  10813. 8005030: 23fc movs r3, #252 @ 0xfc
  10814. 8005032: f887 306f strb.w r3, [r7, #111] @ 0x6f
  10815. break;
  10816. 8005036: e123 b.n 8005280 <Uart1ReceivedDataProcessCallback+0x91c>
  10817. case spSetEncoderXValue:
  10818. float enocoderXValue = 0;
  10819. 8005038: f04f 0300 mov.w r3, #0
  10820. 800503c: 60fb str r3, [r7, #12]
  10821. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, (uint32_t*)&enocoderXValue);
  10822. 800503e: 683b ldr r3, [r7, #0]
  10823. 8005040: 330c adds r3, #12
  10824. 8005042: f107 020c add.w r2, r7, #12
  10825. 8005046: f107 0134 add.w r1, r7, #52 @ 0x34
  10826. 800504a: 4618 mov r0, r3
  10827. 800504c: f7fe f8ad bl 80031aa <ReadWordFromBufer>
  10828. if (osMutexAcquire (sensorsInfoMutex, osWaitForever) == osOK) {
  10829. 8005050: 4b85 ldr r3, [pc, #532] @ (8005268 <Uart1ReceivedDataProcessCallback+0x904>)
  10830. 8005052: 681b ldr r3, [r3, #0]
  10831. 8005054: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  10832. 8005058: 4618 mov r0, r3
  10833. 800505a: f00e fd3c bl 8013ad6 <osMutexAcquire>
  10834. 800505e: 4603 mov r3, r0
  10835. 8005060: 2b00 cmp r3, #0
  10836. 8005062: d10b bne.n 800507c <Uart1ReceivedDataProcessCallback+0x718>
  10837. sensorsInfo.pvEncoderX = enocoderXValue;
  10838. 8005064: 68fb ldr r3, [r7, #12]
  10839. 8005066: 4a81 ldr r2, [pc, #516] @ (800526c <Uart1ReceivedDataProcessCallback+0x908>)
  10840. 8005068: 60d3 str r3, [r2, #12]
  10841. osMutexRelease (sensorsInfoMutex);
  10842. 800506a: 4b7f ldr r3, [pc, #508] @ (8005268 <Uart1ReceivedDataProcessCallback+0x904>)
  10843. 800506c: 681b ldr r3, [r3, #0]
  10844. 800506e: 4618 mov r0, r3
  10845. 8005070: f00e fd7c bl 8013b6c <osMutexRelease>
  10846. respStatus = spOK;
  10847. 8005074: 2300 movs r3, #0
  10848. 8005076: f887 306f strb.w r3, [r7, #111] @ 0x6f
  10849. } else {
  10850. respStatus = spInternalError;
  10851. }
  10852. break;
  10853. 800507a: e101 b.n 8005280 <Uart1ReceivedDataProcessCallback+0x91c>
  10854. respStatus = spInternalError;
  10855. 800507c: 23fc movs r3, #252 @ 0xfc
  10856. 800507e: f887 306f strb.w r3, [r7, #111] @ 0x6f
  10857. break;
  10858. 8005082: e0fd b.n 8005280 <Uart1ReceivedDataProcessCallback+0x91c>
  10859. case spSetEncoderYValue:
  10860. float enocoderYValue = 0;
  10861. 8005084: f04f 0300 mov.w r3, #0
  10862. 8005088: 60bb str r3, [r7, #8]
  10863. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, (uint32_t*)&enocoderYValue);
  10864. 800508a: 683b ldr r3, [r7, #0]
  10865. 800508c: 330c adds r3, #12
  10866. 800508e: f107 0208 add.w r2, r7, #8
  10867. 8005092: f107 0134 add.w r1, r7, #52 @ 0x34
  10868. 8005096: 4618 mov r0, r3
  10869. 8005098: f7fe f887 bl 80031aa <ReadWordFromBufer>
  10870. if (osMutexAcquire (sensorsInfoMutex, osWaitForever) == osOK) {
  10871. 800509c: 4b72 ldr r3, [pc, #456] @ (8005268 <Uart1ReceivedDataProcessCallback+0x904>)
  10872. 800509e: 681b ldr r3, [r3, #0]
  10873. 80050a0: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  10874. 80050a4: 4618 mov r0, r3
  10875. 80050a6: f00e fd16 bl 8013ad6 <osMutexAcquire>
  10876. 80050aa: 4603 mov r3, r0
  10877. 80050ac: 2b00 cmp r3, #0
  10878. 80050ae: d10b bne.n 80050c8 <Uart1ReceivedDataProcessCallback+0x764>
  10879. sensorsInfo.pvEncoderY = enocoderYValue;
  10880. 80050b0: 68bb ldr r3, [r7, #8]
  10881. 80050b2: 4a6e ldr r2, [pc, #440] @ (800526c <Uart1ReceivedDataProcessCallback+0x908>)
  10882. 80050b4: 6113 str r3, [r2, #16]
  10883. osMutexRelease (sensorsInfoMutex);
  10884. 80050b6: 4b6c ldr r3, [pc, #432] @ (8005268 <Uart1ReceivedDataProcessCallback+0x904>)
  10885. 80050b8: 681b ldr r3, [r3, #0]
  10886. 80050ba: 4618 mov r0, r3
  10887. 80050bc: f00e fd56 bl 8013b6c <osMutexRelease>
  10888. respStatus = spOK;
  10889. 80050c0: 2300 movs r3, #0
  10890. 80050c2: f887 306f strb.w r3, [r7, #111] @ 0x6f
  10891. } else {
  10892. respStatus = spInternalError;
  10893. }
  10894. break;
  10895. 80050c6: e0db b.n 8005280 <Uart1ReceivedDataProcessCallback+0x91c>
  10896. respStatus = spInternalError;
  10897. 80050c8: 23fc movs r3, #252 @ 0xfc
  10898. 80050ca: f887 306f strb.w r3, [r7, #111] @ 0x6f
  10899. break;
  10900. 80050ce: e0d7 b.n 8005280 <Uart1ReceivedDataProcessCallback+0x91c>
  10901. case spSetVoltageMeasGains:
  10902. if (osMutexAcquire (resMeasurementsMutex, osWaitForever) == osOK) {
  10903. 80050d0: 4b63 ldr r3, [pc, #396] @ (8005260 <Uart1ReceivedDataProcessCallback+0x8fc>)
  10904. 80050d2: 681b ldr r3, [r3, #0]
  10905. 80050d4: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  10906. 80050d8: 4618 mov r0, r3
  10907. 80050da: f00e fcfc bl 8013ad6 <osMutexAcquire>
  10908. 80050de: 4603 mov r3, r0
  10909. 80050e0: 2b00 cmp r3, #0
  10910. 80050e2: d122 bne.n 800512a <Uart1ReceivedDataProcessCallback+0x7c6>
  10911. for (uint8_t i = 0; i < 3; i++) {
  10912. 80050e4: 2300 movs r3, #0
  10913. 80050e6: f887 3053 strb.w r3, [r7, #83] @ 0x53
  10914. 80050ea: e011 b.n 8005110 <Uart1ReceivedDataProcessCallback+0x7ac>
  10915. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, (uint32_t*)&U_MeasCorrectionData[i].gain);
  10916. 80050ec: 683b ldr r3, [r7, #0]
  10917. 80050ee: f103 000c add.w r0, r3, #12
  10918. 80050f2: f897 3053 ldrb.w r3, [r7, #83] @ 0x53
  10919. 80050f6: 00db lsls r3, r3, #3
  10920. 80050f8: 4a5d ldr r2, [pc, #372] @ (8005270 <Uart1ReceivedDataProcessCallback+0x90c>)
  10921. 80050fa: 441a add r2, r3
  10922. 80050fc: f107 0334 add.w r3, r7, #52 @ 0x34
  10923. 8005100: 4619 mov r1, r3
  10924. 8005102: f7fe f852 bl 80031aa <ReadWordFromBufer>
  10925. for (uint8_t i = 0; i < 3; i++) {
  10926. 8005106: f897 3053 ldrb.w r3, [r7, #83] @ 0x53
  10927. 800510a: 3301 adds r3, #1
  10928. 800510c: f887 3053 strb.w r3, [r7, #83] @ 0x53
  10929. 8005110: f897 3053 ldrb.w r3, [r7, #83] @ 0x53
  10930. 8005114: 2b02 cmp r3, #2
  10931. 8005116: d9e9 bls.n 80050ec <Uart1ReceivedDataProcessCallback+0x788>
  10932. }
  10933. osMutexRelease (resMeasurementsMutex);
  10934. 8005118: 4b51 ldr r3, [pc, #324] @ (8005260 <Uart1ReceivedDataProcessCallback+0x8fc>)
  10935. 800511a: 681b ldr r3, [r3, #0]
  10936. 800511c: 4618 mov r0, r3
  10937. 800511e: f00e fd25 bl 8013b6c <osMutexRelease>
  10938. respStatus = spOK;
  10939. 8005122: 2300 movs r3, #0
  10940. 8005124: f887 306f strb.w r3, [r7, #111] @ 0x6f
  10941. } else {
  10942. respStatus = spInternalError;
  10943. }
  10944. break;
  10945. 8005128: e0aa b.n 8005280 <Uart1ReceivedDataProcessCallback+0x91c>
  10946. respStatus = spInternalError;
  10947. 800512a: 23fc movs r3, #252 @ 0xfc
  10948. 800512c: f887 306f strb.w r3, [r7, #111] @ 0x6f
  10949. break;
  10950. 8005130: e0a6 b.n 8005280 <Uart1ReceivedDataProcessCallback+0x91c>
  10951. case spSetVoltageMeasOffsets:
  10952. if (osMutexAcquire (resMeasurementsMutex, osWaitForever) == osOK) {
  10953. 8005132: 4b4b ldr r3, [pc, #300] @ (8005260 <Uart1ReceivedDataProcessCallback+0x8fc>)
  10954. 8005134: 681b ldr r3, [r3, #0]
  10955. 8005136: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  10956. 800513a: 4618 mov r0, r3
  10957. 800513c: f00e fccb bl 8013ad6 <osMutexAcquire>
  10958. 8005140: 4603 mov r3, r0
  10959. 8005142: 2b00 cmp r3, #0
  10960. 8005144: d123 bne.n 800518e <Uart1ReceivedDataProcessCallback+0x82a>
  10961. for (uint8_t i = 0; i < 3; i++) {
  10962. 8005146: 2300 movs r3, #0
  10963. 8005148: f887 3052 strb.w r3, [r7, #82] @ 0x52
  10964. 800514c: e012 b.n 8005174 <Uart1ReceivedDataProcessCallback+0x810>
  10965. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, (uint32_t*)&U_MeasCorrectionData[i].offset);
  10966. 800514e: 683b ldr r3, [r7, #0]
  10967. 8005150: f103 000c add.w r0, r3, #12
  10968. 8005154: f897 3052 ldrb.w r3, [r7, #82] @ 0x52
  10969. 8005158: 00db lsls r3, r3, #3
  10970. 800515a: 4a45 ldr r2, [pc, #276] @ (8005270 <Uart1ReceivedDataProcessCallback+0x90c>)
  10971. 800515c: 4413 add r3, r2
  10972. 800515e: 1d1a adds r2, r3, #4
  10973. 8005160: f107 0334 add.w r3, r7, #52 @ 0x34
  10974. 8005164: 4619 mov r1, r3
  10975. 8005166: f7fe f820 bl 80031aa <ReadWordFromBufer>
  10976. for (uint8_t i = 0; i < 3; i++) {
  10977. 800516a: f897 3052 ldrb.w r3, [r7, #82] @ 0x52
  10978. 800516e: 3301 adds r3, #1
  10979. 8005170: f887 3052 strb.w r3, [r7, #82] @ 0x52
  10980. 8005174: f897 3052 ldrb.w r3, [r7, #82] @ 0x52
  10981. 8005178: 2b02 cmp r3, #2
  10982. 800517a: d9e8 bls.n 800514e <Uart1ReceivedDataProcessCallback+0x7ea>
  10983. }
  10984. osMutexRelease (resMeasurementsMutex);
  10985. 800517c: 4b38 ldr r3, [pc, #224] @ (8005260 <Uart1ReceivedDataProcessCallback+0x8fc>)
  10986. 800517e: 681b ldr r3, [r3, #0]
  10987. 8005180: 4618 mov r0, r3
  10988. 8005182: f00e fcf3 bl 8013b6c <osMutexRelease>
  10989. respStatus = spOK;
  10990. 8005186: 2300 movs r3, #0
  10991. 8005188: f887 306f strb.w r3, [r7, #111] @ 0x6f
  10992. } else {
  10993. respStatus = spInternalError;
  10994. }
  10995. break;
  10996. 800518c: e078 b.n 8005280 <Uart1ReceivedDataProcessCallback+0x91c>
  10997. respStatus = spInternalError;
  10998. 800518e: 23fc movs r3, #252 @ 0xfc
  10999. 8005190: f887 306f strb.w r3, [r7, #111] @ 0x6f
  11000. break;
  11001. 8005194: e074 b.n 8005280 <Uart1ReceivedDataProcessCallback+0x91c>
  11002. case spSetCurrentMeasGains:
  11003. if (osMutexAcquire (resMeasurementsMutex, osWaitForever) == osOK) {
  11004. 8005196: 4b32 ldr r3, [pc, #200] @ (8005260 <Uart1ReceivedDataProcessCallback+0x8fc>)
  11005. 8005198: 681b ldr r3, [r3, #0]
  11006. 800519a: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  11007. 800519e: 4618 mov r0, r3
  11008. 80051a0: f00e fc99 bl 8013ad6 <osMutexAcquire>
  11009. 80051a4: 4603 mov r3, r0
  11010. 80051a6: 2b00 cmp r3, #0
  11011. 80051a8: d122 bne.n 80051f0 <Uart1ReceivedDataProcessCallback+0x88c>
  11012. for (uint8_t i = 0; i < 3; i++) {
  11013. 80051aa: 2300 movs r3, #0
  11014. 80051ac: f887 3051 strb.w r3, [r7, #81] @ 0x51
  11015. 80051b0: e011 b.n 80051d6 <Uart1ReceivedDataProcessCallback+0x872>
  11016. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, (uint32_t*)&I_MeasCorrectionData[i].gain);
  11017. 80051b2: 683b ldr r3, [r7, #0]
  11018. 80051b4: f103 000c add.w r0, r3, #12
  11019. 80051b8: f897 3051 ldrb.w r3, [r7, #81] @ 0x51
  11020. 80051bc: 00db lsls r3, r3, #3
  11021. 80051be: 4a2d ldr r2, [pc, #180] @ (8005274 <Uart1ReceivedDataProcessCallback+0x910>)
  11022. 80051c0: 441a add r2, r3
  11023. 80051c2: f107 0334 add.w r3, r7, #52 @ 0x34
  11024. 80051c6: 4619 mov r1, r3
  11025. 80051c8: f7fd ffef bl 80031aa <ReadWordFromBufer>
  11026. for (uint8_t i = 0; i < 3; i++) {
  11027. 80051cc: f897 3051 ldrb.w r3, [r7, #81] @ 0x51
  11028. 80051d0: 3301 adds r3, #1
  11029. 80051d2: f887 3051 strb.w r3, [r7, #81] @ 0x51
  11030. 80051d6: f897 3051 ldrb.w r3, [r7, #81] @ 0x51
  11031. 80051da: 2b02 cmp r3, #2
  11032. 80051dc: d9e9 bls.n 80051b2 <Uart1ReceivedDataProcessCallback+0x84e>
  11033. }
  11034. osMutexRelease (resMeasurementsMutex);
  11035. 80051de: 4b20 ldr r3, [pc, #128] @ (8005260 <Uart1ReceivedDataProcessCallback+0x8fc>)
  11036. 80051e0: 681b ldr r3, [r3, #0]
  11037. 80051e2: 4618 mov r0, r3
  11038. 80051e4: f00e fcc2 bl 8013b6c <osMutexRelease>
  11039. respStatus = spOK;
  11040. 80051e8: 2300 movs r3, #0
  11041. 80051ea: f887 306f strb.w r3, [r7, #111] @ 0x6f
  11042. } else {
  11043. respStatus = spInternalError;
  11044. }
  11045. break;
  11046. 80051ee: e047 b.n 8005280 <Uart1ReceivedDataProcessCallback+0x91c>
  11047. respStatus = spInternalError;
  11048. 80051f0: 23fc movs r3, #252 @ 0xfc
  11049. 80051f2: f887 306f strb.w r3, [r7, #111] @ 0x6f
  11050. break;
  11051. 80051f6: e043 b.n 8005280 <Uart1ReceivedDataProcessCallback+0x91c>
  11052. case spSetCurrentMeasOffsets:
  11053. if (osMutexAcquire (resMeasurementsMutex, osWaitForever) == osOK) {
  11054. 80051f8: 4b19 ldr r3, [pc, #100] @ (8005260 <Uart1ReceivedDataProcessCallback+0x8fc>)
  11055. 80051fa: 681b ldr r3, [r3, #0]
  11056. 80051fc: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  11057. 8005200: 4618 mov r0, r3
  11058. 8005202: f00e fc68 bl 8013ad6 <osMutexAcquire>
  11059. 8005206: 4603 mov r3, r0
  11060. 8005208: 2b00 cmp r3, #0
  11061. 800520a: d123 bne.n 8005254 <Uart1ReceivedDataProcessCallback+0x8f0>
  11062. for (uint8_t i = 0; i < 3; i++) {
  11063. 800520c: 2300 movs r3, #0
  11064. 800520e: f887 3050 strb.w r3, [r7, #80] @ 0x50
  11065. 8005212: e012 b.n 800523a <Uart1ReceivedDataProcessCallback+0x8d6>
  11066. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, (uint32_t*)&I_MeasCorrectionData[i].offset);
  11067. 8005214: 683b ldr r3, [r7, #0]
  11068. 8005216: f103 000c add.w r0, r3, #12
  11069. 800521a: f897 3050 ldrb.w r3, [r7, #80] @ 0x50
  11070. 800521e: 00db lsls r3, r3, #3
  11071. 8005220: 4a14 ldr r2, [pc, #80] @ (8005274 <Uart1ReceivedDataProcessCallback+0x910>)
  11072. 8005222: 4413 add r3, r2
  11073. 8005224: 1d1a adds r2, r3, #4
  11074. 8005226: f107 0334 add.w r3, r7, #52 @ 0x34
  11075. 800522a: 4619 mov r1, r3
  11076. 800522c: f7fd ffbd bl 80031aa <ReadWordFromBufer>
  11077. for (uint8_t i = 0; i < 3; i++) {
  11078. 8005230: f897 3050 ldrb.w r3, [r7, #80] @ 0x50
  11079. 8005234: 3301 adds r3, #1
  11080. 8005236: f887 3050 strb.w r3, [r7, #80] @ 0x50
  11081. 800523a: f897 3050 ldrb.w r3, [r7, #80] @ 0x50
  11082. 800523e: 2b02 cmp r3, #2
  11083. 8005240: d9e8 bls.n 8005214 <Uart1ReceivedDataProcessCallback+0x8b0>
  11084. }
  11085. osMutexRelease (resMeasurementsMutex);
  11086. 8005242: 4b07 ldr r3, [pc, #28] @ (8005260 <Uart1ReceivedDataProcessCallback+0x8fc>)
  11087. 8005244: 681b ldr r3, [r3, #0]
  11088. 8005246: 4618 mov r0, r3
  11089. 8005248: f00e fc90 bl 8013b6c <osMutexRelease>
  11090. respStatus = spOK;
  11091. 800524c: 2300 movs r3, #0
  11092. 800524e: f887 306f strb.w r3, [r7, #111] @ 0x6f
  11093. } else {
  11094. respStatus = spInternalError;
  11095. }
  11096. break;
  11097. 8005252: e015 b.n 8005280 <Uart1ReceivedDataProcessCallback+0x91c>
  11098. respStatus = spInternalError;
  11099. 8005254: 23fc movs r3, #252 @ 0xfc
  11100. 8005256: f887 306f strb.w r3, [r7, #111] @ 0x6f
  11101. break;
  11102. 800525a: e011 b.n 8005280 <Uart1ReceivedDataProcessCallback+0x91c>
  11103. 800525c: 24000424 .word 0x24000424
  11104. 8005260: 240007e4 .word 0x240007e4
  11105. 8005264: 240007f0 .word 0x240007f0
  11106. 8005268: 240007e8 .word 0x240007e8
  11107. 800526c: 2400082c .word 0x2400082c
  11108. 8005270: 24000000 .word 0x24000000
  11109. 8005274: 24000018 .word 0x24000018
  11110. default: respStatus = spUnknownCommand; break;
  11111. 8005278: 23fd movs r3, #253 @ 0xfd
  11112. 800527a: f887 306f strb.w r3, [r7, #111] @ 0x6f
  11113. 800527e: bf00 nop
  11114. }
  11115. dataToSend = PrepareRespFrame (uartTaskData->uartTxBuffer, spFrameData->frameHeader.frameId, spFrameData->frameHeader.frameCommand, respStatus, outputDataBuffer, outputDataBufferPos);
  11116. 8005280: 6cfb ldr r3, [r7, #76] @ 0x4c
  11117. 8005282: 6898 ldr r0, [r3, #8]
  11118. 8005284: 683b ldr r3, [r7, #0]
  11119. 8005286: 8819 ldrh r1, [r3, #0]
  11120. 8005288: 683b ldr r3, [r7, #0]
  11121. 800528a: 789a ldrb r2, [r3, #2]
  11122. 800528c: 4b13 ldr r3, [pc, #76] @ (80052dc <Uart1ReceivedDataProcessCallback+0x978>)
  11123. 800528e: 881b ldrh r3, [r3, #0]
  11124. 8005290: f997 406f ldrsb.w r4, [r7, #111] @ 0x6f
  11125. 8005294: 9301 str r3, [sp, #4]
  11126. 8005296: 4b12 ldr r3, [pc, #72] @ (80052e0 <Uart1ReceivedDataProcessCallback+0x97c>)
  11127. 8005298: 9300 str r3, [sp, #0]
  11128. 800529a: 4623 mov r3, r4
  11129. 800529c: f7fd ffb8 bl 8003210 <PrepareRespFrame>
  11130. 80052a0: 4603 mov r3, r0
  11131. 80052a2: f8a7 304a strh.w r3, [r7, #74] @ 0x4a
  11132. if (dataToSend > 0) {
  11133. 80052a6: f8b7 304a ldrh.w r3, [r7, #74] @ 0x4a
  11134. 80052aa: 2b00 cmp r3, #0
  11135. 80052ac: d008 beq.n 80052c0 <Uart1ReceivedDataProcessCallback+0x95c>
  11136. HAL_UART_Transmit_IT (uartTaskData->huart, uartTaskData->uartTxBuffer, dataToSend);
  11137. 80052ae: 6cfb ldr r3, [r7, #76] @ 0x4c
  11138. 80052b0: 6b18 ldr r0, [r3, #48] @ 0x30
  11139. 80052b2: 6cfb ldr r3, [r7, #76] @ 0x4c
  11140. 80052b4: 689b ldr r3, [r3, #8]
  11141. 80052b6: f8b7 204a ldrh.w r2, [r7, #74] @ 0x4a
  11142. 80052ba: 4619 mov r1, r3
  11143. 80052bc: f00b fbde bl 8010a7c <HAL_UART_Transmit_IT>
  11144. }
  11145. printf ("Uart%d: TX bytes sent: %d\n", uartTaskData->uartNumber, dataToSend);
  11146. 80052c0: 6cfb ldr r3, [r7, #76] @ 0x4c
  11147. 80052c2: f893 3034 ldrb.w r3, [r3, #52] @ 0x34
  11148. 80052c6: 4619 mov r1, r3
  11149. 80052c8: f8b7 304a ldrh.w r3, [r7, #74] @ 0x4a
  11150. 80052cc: 461a mov r2, r3
  11151. 80052ce: 4805 ldr r0, [pc, #20] @ (80052e4 <Uart1ReceivedDataProcessCallback+0x980>)
  11152. 80052d0: f012 fbec bl 8017aac <iprintf>
  11153. }
  11154. 80052d4: bf00 nop
  11155. 80052d6: 3774 adds r7, #116 @ 0x74
  11156. 80052d8: 46bd mov sp, r7
  11157. 80052da: bd90 pop {r4, r7, pc}
  11158. 80052dc: 24000ca4 .word 0x24000ca4
  11159. 80052e0: 24000c24 .word 0x24000c24
  11160. 80052e4: 08018930 .word 0x08018930
  11161. 080052e8 <Reset_Handler>:
  11162. .section .text.Reset_Handler
  11163. .weak Reset_Handler
  11164. .type Reset_Handler, %function
  11165. Reset_Handler:
  11166. ldr sp, =_estack /* set stack pointer */
  11167. 80052e8: f8df d034 ldr.w sp, [pc, #52] @ 8005320 <LoopFillZerobss+0xe>
  11168. /* Call the clock system initialization function.*/
  11169. bl SystemInit
  11170. 80052ec: f7fe fefa bl 80040e4 <SystemInit>
  11171. /* Copy the data segment initializers from flash to SRAM */
  11172. ldr r0, =_sdata
  11173. 80052f0: 480c ldr r0, [pc, #48] @ (8005324 <LoopFillZerobss+0x12>)
  11174. ldr r1, =_edata
  11175. 80052f2: 490d ldr r1, [pc, #52] @ (8005328 <LoopFillZerobss+0x16>)
  11176. ldr r2, =_sidata
  11177. 80052f4: 4a0d ldr r2, [pc, #52] @ (800532c <LoopFillZerobss+0x1a>)
  11178. movs r3, #0
  11179. 80052f6: 2300 movs r3, #0
  11180. b LoopCopyDataInit
  11181. 80052f8: e002 b.n 8005300 <LoopCopyDataInit>
  11182. 080052fa <CopyDataInit>:
  11183. CopyDataInit:
  11184. ldr r4, [r2, r3]
  11185. 80052fa: 58d4 ldr r4, [r2, r3]
  11186. str r4, [r0, r3]
  11187. 80052fc: 50c4 str r4, [r0, r3]
  11188. adds r3, r3, #4
  11189. 80052fe: 3304 adds r3, #4
  11190. 08005300 <LoopCopyDataInit>:
  11191. LoopCopyDataInit:
  11192. adds r4, r0, r3
  11193. 8005300: 18c4 adds r4, r0, r3
  11194. cmp r4, r1
  11195. 8005302: 428c cmp r4, r1
  11196. bcc CopyDataInit
  11197. 8005304: d3f9 bcc.n 80052fa <CopyDataInit>
  11198. /* Zero fill the bss segment. */
  11199. ldr r2, =_sbss
  11200. 8005306: 4a0a ldr r2, [pc, #40] @ (8005330 <LoopFillZerobss+0x1e>)
  11201. ldr r4, =_ebss
  11202. 8005308: 4c0a ldr r4, [pc, #40] @ (8005334 <LoopFillZerobss+0x22>)
  11203. movs r3, #0
  11204. 800530a: 2300 movs r3, #0
  11205. b LoopFillZerobss
  11206. 800530c: e001 b.n 8005312 <LoopFillZerobss>
  11207. 0800530e <FillZerobss>:
  11208. FillZerobss:
  11209. str r3, [r2]
  11210. 800530e: 6013 str r3, [r2, #0]
  11211. adds r2, r2, #4
  11212. 8005310: 3204 adds r2, #4
  11213. 08005312 <LoopFillZerobss>:
  11214. LoopFillZerobss:
  11215. cmp r2, r4
  11216. 8005312: 42a2 cmp r2, r4
  11217. bcc FillZerobss
  11218. 8005314: d3fb bcc.n 800530e <FillZerobss>
  11219. /* Call static constructors */
  11220. bl __libc_init_array
  11221. 8005316: f012 fcc9 bl 8017cac <__libc_init_array>
  11222. /* Call the application's entry point.*/
  11223. bl main
  11224. 800531a: f7fb f9e7 bl 80006ec <main>
  11225. bx lr
  11226. 800531e: 4770 bx lr
  11227. ldr sp, =_estack /* set stack pointer */
  11228. 8005320: 24060000 .word 0x24060000
  11229. ldr r0, =_sdata
  11230. 8005324: 24000000 .word 0x24000000
  11231. ldr r1, =_edata
  11232. 8005328: 240000a4 .word 0x240000a4
  11233. ldr r2, =_sidata
  11234. 800532c: 08018a4c .word 0x08018a4c
  11235. ldr r2, =_sbss
  11236. 8005330: 240000c0 .word 0x240000c0
  11237. ldr r4, =_ebss
  11238. 8005334: 24012de0 .word 0x24012de0
  11239. 08005338 <ADC3_IRQHandler>:
  11240. * @retval None
  11241. */
  11242. .section .text.Default_Handler,"ax",%progbits
  11243. Default_Handler:
  11244. Infinite_Loop:
  11245. b Infinite_Loop
  11246. 8005338: e7fe b.n 8005338 <ADC3_IRQHandler>
  11247. ...
  11248. 0800533c <HAL_Init>:
  11249. * need to ensure that the SysTick time base is always set to 1 millisecond
  11250. * to have correct HAL operation.
  11251. * @retval HAL status
  11252. */
  11253. HAL_StatusTypeDef HAL_Init(void)
  11254. {
  11255. 800533c: b580 push {r7, lr}
  11256. 800533e: b082 sub sp, #8
  11257. 8005340: af00 add r7, sp, #0
  11258. __HAL_ART_CONFIG_BASE_ADDRESS(0x08100000UL); /* Configure the Cortex-M4 ART Base address to the Flash Bank 2 : */
  11259. __HAL_ART_ENABLE(); /* Enable the Cortex-M4 ART */
  11260. #endif /* DUAL_CORE && CORE_CM4 */
  11261. /* Set Interrupt Group Priority */
  11262. HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
  11263. 8005342: 2003 movs r0, #3
  11264. 8005344: f001 fee5 bl 8007112 <HAL_NVIC_SetPriorityGrouping>
  11265. /* Update the SystemCoreClock global variable */
  11266. #if defined(RCC_D1CFGR_D1CPRE)
  11267. common_system_clock = HAL_RCC_GetSysClockFreq() >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_D1CPRE)>> RCC_D1CFGR_D1CPRE_Pos]) & 0x1FU);
  11268. 8005348: f006 fb90 bl 800ba6c <HAL_RCC_GetSysClockFreq>
  11269. 800534c: 4602 mov r2, r0
  11270. 800534e: 4b15 ldr r3, [pc, #84] @ (80053a4 <HAL_Init+0x68>)
  11271. 8005350: 699b ldr r3, [r3, #24]
  11272. 8005352: 0a1b lsrs r3, r3, #8
  11273. 8005354: f003 030f and.w r3, r3, #15
  11274. 8005358: 4913 ldr r1, [pc, #76] @ (80053a8 <HAL_Init+0x6c>)
  11275. 800535a: 5ccb ldrb r3, [r1, r3]
  11276. 800535c: f003 031f and.w r3, r3, #31
  11277. 8005360: fa22 f303 lsr.w r3, r2, r3
  11278. 8005364: 607b str r3, [r7, #4]
  11279. common_system_clock = HAL_RCC_GetSysClockFreq() >> ((D1CorePrescTable[(RCC->CDCFGR1 & RCC_CDCFGR1_CDCPRE)>> RCC_CDCFGR1_CDCPRE_Pos]) & 0x1FU);
  11280. #endif
  11281. /* Update the SystemD2Clock global variable */
  11282. #if defined(RCC_D1CFGR_HPRE)
  11283. SystemD2Clock = (common_system_clock >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_HPRE)>> RCC_D1CFGR_HPRE_Pos]) & 0x1FU));
  11284. 8005366: 4b0f ldr r3, [pc, #60] @ (80053a4 <HAL_Init+0x68>)
  11285. 8005368: 699b ldr r3, [r3, #24]
  11286. 800536a: f003 030f and.w r3, r3, #15
  11287. 800536e: 4a0e ldr r2, [pc, #56] @ (80053a8 <HAL_Init+0x6c>)
  11288. 8005370: 5cd3 ldrb r3, [r2, r3]
  11289. 8005372: f003 031f and.w r3, r3, #31
  11290. 8005376: 687a ldr r2, [r7, #4]
  11291. 8005378: fa22 f303 lsr.w r3, r2, r3
  11292. 800537c: 4a0b ldr r2, [pc, #44] @ (80053ac <HAL_Init+0x70>)
  11293. 800537e: 6013 str r3, [r2, #0]
  11294. #endif
  11295. #if defined(DUAL_CORE) && defined(CORE_CM4)
  11296. SystemCoreClock = SystemD2Clock;
  11297. #else
  11298. SystemCoreClock = common_system_clock;
  11299. 8005380: 4a0b ldr r2, [pc, #44] @ (80053b0 <HAL_Init+0x74>)
  11300. 8005382: 687b ldr r3, [r7, #4]
  11301. 8005384: 6013 str r3, [r2, #0]
  11302. #endif /* DUAL_CORE && CORE_CM4 */
  11303. /* Use systick as time base source and configure 1ms tick (default clock after Reset is HSI) */
  11304. if(HAL_InitTick(TICK_INT_PRIORITY) != HAL_OK)
  11305. 8005386: 2005 movs r0, #5
  11306. 8005388: f7fe fd00 bl 8003d8c <HAL_InitTick>
  11307. 800538c: 4603 mov r3, r0
  11308. 800538e: 2b00 cmp r3, #0
  11309. 8005390: d001 beq.n 8005396 <HAL_Init+0x5a>
  11310. {
  11311. return HAL_ERROR;
  11312. 8005392: 2301 movs r3, #1
  11313. 8005394: e002 b.n 800539c <HAL_Init+0x60>
  11314. }
  11315. /* Init the low level hardware */
  11316. HAL_MspInit();
  11317. 8005396: f7fd ffd9 bl 800334c <HAL_MspInit>
  11318. /* Return function status */
  11319. return HAL_OK;
  11320. 800539a: 2300 movs r3, #0
  11321. }
  11322. 800539c: 4618 mov r0, r3
  11323. 800539e: 3708 adds r7, #8
  11324. 80053a0: 46bd mov sp, r7
  11325. 80053a2: bd80 pop {r7, pc}
  11326. 80053a4: 58024400 .word 0x58024400
  11327. 80053a8: 080189c8 .word 0x080189c8
  11328. 80053ac: 24000038 .word 0x24000038
  11329. 80053b0: 24000034 .word 0x24000034
  11330. 080053b4 <HAL_IncTick>:
  11331. * @note This function is declared as __weak to be overwritten in case of other
  11332. * implementations in user file.
  11333. * @retval None
  11334. */
  11335. __weak void HAL_IncTick(void)
  11336. {
  11337. 80053b4: b480 push {r7}
  11338. 80053b6: af00 add r7, sp, #0
  11339. uwTick += (uint32_t)uwTickFreq;
  11340. 80053b8: 4b06 ldr r3, [pc, #24] @ (80053d4 <HAL_IncTick+0x20>)
  11341. 80053ba: 781b ldrb r3, [r3, #0]
  11342. 80053bc: 461a mov r2, r3
  11343. 80053be: 4b06 ldr r3, [pc, #24] @ (80053d8 <HAL_IncTick+0x24>)
  11344. 80053c0: 681b ldr r3, [r3, #0]
  11345. 80053c2: 4413 add r3, r2
  11346. 80053c4: 4a04 ldr r2, [pc, #16] @ (80053d8 <HAL_IncTick+0x24>)
  11347. 80053c6: 6013 str r3, [r2, #0]
  11348. }
  11349. 80053c8: bf00 nop
  11350. 80053ca: 46bd mov sp, r7
  11351. 80053cc: f85d 7b04 ldr.w r7, [sp], #4
  11352. 80053d0: 4770 bx lr
  11353. 80053d2: bf00 nop
  11354. 80053d4: 24000040 .word 0x24000040
  11355. 80053d8: 24000ca8 .word 0x24000ca8
  11356. 080053dc <HAL_GetTick>:
  11357. * @note This function is declared as __weak to be overwritten in case of other
  11358. * implementations in user file.
  11359. * @retval tick value
  11360. */
  11361. __weak uint32_t HAL_GetTick(void)
  11362. {
  11363. 80053dc: b480 push {r7}
  11364. 80053de: af00 add r7, sp, #0
  11365. return uwTick;
  11366. 80053e0: 4b03 ldr r3, [pc, #12] @ (80053f0 <HAL_GetTick+0x14>)
  11367. 80053e2: 681b ldr r3, [r3, #0]
  11368. }
  11369. 80053e4: 4618 mov r0, r3
  11370. 80053e6: 46bd mov sp, r7
  11371. 80053e8: f85d 7b04 ldr.w r7, [sp], #4
  11372. 80053ec: 4770 bx lr
  11373. 80053ee: bf00 nop
  11374. 80053f0: 24000ca8 .word 0x24000ca8
  11375. 080053f4 <HAL_GetREVID>:
  11376. /**
  11377. * @brief Returns the device revision identifier.
  11378. * @retval Device revision identifier
  11379. */
  11380. uint32_t HAL_GetREVID(void)
  11381. {
  11382. 80053f4: b480 push {r7}
  11383. 80053f6: af00 add r7, sp, #0
  11384. return((DBGMCU->IDCODE) >> 16);
  11385. 80053f8: 4b03 ldr r3, [pc, #12] @ (8005408 <HAL_GetREVID+0x14>)
  11386. 80053fa: 681b ldr r3, [r3, #0]
  11387. 80053fc: 0c1b lsrs r3, r3, #16
  11388. }
  11389. 80053fe: 4618 mov r0, r3
  11390. 8005400: 46bd mov sp, r7
  11391. 8005402: f85d 7b04 ldr.w r7, [sp], #4
  11392. 8005406: 4770 bx lr
  11393. 8005408: 5c001000 .word 0x5c001000
  11394. 0800540c <HAL_SYSCFG_VREFBUF_HighImpedanceConfig>:
  11395. * @arg SYSCFG_VREFBUF_HIGH_IMPEDANCE_DISABLE: VREF+ pin is internally connect to VREFINT output.
  11396. * @arg SYSCFG_VREFBUF_HIGH_IMPEDANCE_ENABLE: VREF+ pin is high impedance.
  11397. * @retval None
  11398. */
  11399. void HAL_SYSCFG_VREFBUF_HighImpedanceConfig(uint32_t Mode)
  11400. {
  11401. 800540c: b480 push {r7}
  11402. 800540e: b083 sub sp, #12
  11403. 8005410: af00 add r7, sp, #0
  11404. 8005412: 6078 str r0, [r7, #4]
  11405. /* Check the parameters */
  11406. assert_param(IS_SYSCFG_VREFBUF_HIGH_IMPEDANCE(Mode));
  11407. MODIFY_REG(VREFBUF->CSR, VREFBUF_CSR_HIZ, Mode);
  11408. 8005414: 4b06 ldr r3, [pc, #24] @ (8005430 <HAL_SYSCFG_VREFBUF_HighImpedanceConfig+0x24>)
  11409. 8005416: 681b ldr r3, [r3, #0]
  11410. 8005418: f023 0202 bic.w r2, r3, #2
  11411. 800541c: 4904 ldr r1, [pc, #16] @ (8005430 <HAL_SYSCFG_VREFBUF_HighImpedanceConfig+0x24>)
  11412. 800541e: 687b ldr r3, [r7, #4]
  11413. 8005420: 4313 orrs r3, r2
  11414. 8005422: 600b str r3, [r1, #0]
  11415. }
  11416. 8005424: bf00 nop
  11417. 8005426: 370c adds r7, #12
  11418. 8005428: 46bd mov sp, r7
  11419. 800542a: f85d 7b04 ldr.w r7, [sp], #4
  11420. 800542e: 4770 bx lr
  11421. 8005430: 58003c00 .word 0x58003c00
  11422. 08005434 <HAL_SYSCFG_DisableVREFBUF>:
  11423. * @brief Disable the Internal Voltage Reference buffer (VREFBUF).
  11424. *
  11425. * @retval None
  11426. */
  11427. void HAL_SYSCFG_DisableVREFBUF(void)
  11428. {
  11429. 8005434: b480 push {r7}
  11430. 8005436: af00 add r7, sp, #0
  11431. CLEAR_BIT(VREFBUF->CSR, VREFBUF_CSR_ENVR);
  11432. 8005438: 4b05 ldr r3, [pc, #20] @ (8005450 <HAL_SYSCFG_DisableVREFBUF+0x1c>)
  11433. 800543a: 681b ldr r3, [r3, #0]
  11434. 800543c: 4a04 ldr r2, [pc, #16] @ (8005450 <HAL_SYSCFG_DisableVREFBUF+0x1c>)
  11435. 800543e: f023 0301 bic.w r3, r3, #1
  11436. 8005442: 6013 str r3, [r2, #0]
  11437. }
  11438. 8005444: bf00 nop
  11439. 8005446: 46bd mov sp, r7
  11440. 8005448: f85d 7b04 ldr.w r7, [sp], #4
  11441. 800544c: 4770 bx lr
  11442. 800544e: bf00 nop
  11443. 8005450: 58003c00 .word 0x58003c00
  11444. 08005454 <HAL_SYSCFG_AnalogSwitchConfig>:
  11445. * @arg SYSCFG_SWITCH_PC3_CLOSE
  11446. * @retval None
  11447. */
  11448. void HAL_SYSCFG_AnalogSwitchConfig(uint32_t SYSCFG_AnalogSwitch , uint32_t SYSCFG_SwitchState )
  11449. {
  11450. 8005454: b480 push {r7}
  11451. 8005456: b083 sub sp, #12
  11452. 8005458: af00 add r7, sp, #0
  11453. 800545a: 6078 str r0, [r7, #4]
  11454. 800545c: 6039 str r1, [r7, #0]
  11455. /* Check the parameter */
  11456. assert_param(IS_SYSCFG_ANALOG_SWITCH(SYSCFG_AnalogSwitch));
  11457. assert_param(IS_SYSCFG_SWITCH_STATE(SYSCFG_SwitchState));
  11458. MODIFY_REG(SYSCFG->PMCR, (uint32_t) SYSCFG_AnalogSwitch, (uint32_t)(SYSCFG_SwitchState));
  11459. 800545e: 4b07 ldr r3, [pc, #28] @ (800547c <HAL_SYSCFG_AnalogSwitchConfig+0x28>)
  11460. 8005460: 685a ldr r2, [r3, #4]
  11461. 8005462: 687b ldr r3, [r7, #4]
  11462. 8005464: 43db mvns r3, r3
  11463. 8005466: 401a ands r2, r3
  11464. 8005468: 4904 ldr r1, [pc, #16] @ (800547c <HAL_SYSCFG_AnalogSwitchConfig+0x28>)
  11465. 800546a: 683b ldr r3, [r7, #0]
  11466. 800546c: 4313 orrs r3, r2
  11467. 800546e: 604b str r3, [r1, #4]
  11468. }
  11469. 8005470: bf00 nop
  11470. 8005472: 370c adds r7, #12
  11471. 8005474: 46bd mov sp, r7
  11472. 8005476: f85d 7b04 ldr.w r7, [sp], #4
  11473. 800547a: 4770 bx lr
  11474. 800547c: 58000400 .word 0x58000400
  11475. 08005480 <LL_ADC_SetCommonClock>:
  11476. * @arg @ref LL_ADC_CLOCK_ASYNC_DIV128
  11477. * @arg @ref LL_ADC_CLOCK_ASYNC_DIV256
  11478. * @retval None
  11479. */
  11480. __STATIC_INLINE void LL_ADC_SetCommonClock(ADC_Common_TypeDef *ADCxy_COMMON, uint32_t CommonClock)
  11481. {
  11482. 8005480: b480 push {r7}
  11483. 8005482: b083 sub sp, #12
  11484. 8005484: af00 add r7, sp, #0
  11485. 8005486: 6078 str r0, [r7, #4]
  11486. 8005488: 6039 str r1, [r7, #0]
  11487. MODIFY_REG(ADCxy_COMMON->CCR, ADC_CCR_CKMODE | ADC_CCR_PRESC, CommonClock);
  11488. 800548a: 687b ldr r3, [r7, #4]
  11489. 800548c: 689b ldr r3, [r3, #8]
  11490. 800548e: f423 127c bic.w r2, r3, #4128768 @ 0x3f0000
  11491. 8005492: 683b ldr r3, [r7, #0]
  11492. 8005494: 431a orrs r2, r3
  11493. 8005496: 687b ldr r3, [r7, #4]
  11494. 8005498: 609a str r2, [r3, #8]
  11495. }
  11496. 800549a: bf00 nop
  11497. 800549c: 370c adds r7, #12
  11498. 800549e: 46bd mov sp, r7
  11499. 80054a0: f85d 7b04 ldr.w r7, [sp], #4
  11500. 80054a4: 4770 bx lr
  11501. 080054a6 <LL_ADC_SetCommonPathInternalCh>:
  11502. * @arg @ref LL_ADC_PATH_INTERNAL_TEMPSENSOR
  11503. * @arg @ref LL_ADC_PATH_INTERNAL_VBAT
  11504. * @retval None
  11505. */
  11506. __STATIC_INLINE void LL_ADC_SetCommonPathInternalCh(ADC_Common_TypeDef *ADCxy_COMMON, uint32_t PathInternal)
  11507. {
  11508. 80054a6: b480 push {r7}
  11509. 80054a8: b083 sub sp, #12
  11510. 80054aa: af00 add r7, sp, #0
  11511. 80054ac: 6078 str r0, [r7, #4]
  11512. 80054ae: 6039 str r1, [r7, #0]
  11513. MODIFY_REG(ADCxy_COMMON->CCR, ADC_CCR_VREFEN | ADC_CCR_TSEN | ADC_CCR_VBATEN, PathInternal);
  11514. 80054b0: 687b ldr r3, [r7, #4]
  11515. 80054b2: 689b ldr r3, [r3, #8]
  11516. 80054b4: f023 72e0 bic.w r2, r3, #29360128 @ 0x1c00000
  11517. 80054b8: 683b ldr r3, [r7, #0]
  11518. 80054ba: 431a orrs r2, r3
  11519. 80054bc: 687b ldr r3, [r7, #4]
  11520. 80054be: 609a str r2, [r3, #8]
  11521. }
  11522. 80054c0: bf00 nop
  11523. 80054c2: 370c adds r7, #12
  11524. 80054c4: 46bd mov sp, r7
  11525. 80054c6: f85d 7b04 ldr.w r7, [sp], #4
  11526. 80054ca: 4770 bx lr
  11527. 080054cc <LL_ADC_GetCommonPathInternalCh>:
  11528. * @arg @ref LL_ADC_PATH_INTERNAL_VREFINT
  11529. * @arg @ref LL_ADC_PATH_INTERNAL_TEMPSENSOR
  11530. * @arg @ref LL_ADC_PATH_INTERNAL_VBAT
  11531. */
  11532. __STATIC_INLINE uint32_t LL_ADC_GetCommonPathInternalCh(ADC_Common_TypeDef *ADCxy_COMMON)
  11533. {
  11534. 80054cc: b480 push {r7}
  11535. 80054ce: b083 sub sp, #12
  11536. 80054d0: af00 add r7, sp, #0
  11537. 80054d2: 6078 str r0, [r7, #4]
  11538. return (uint32_t)(READ_BIT(ADCxy_COMMON->CCR, ADC_CCR_VREFEN | ADC_CCR_TSEN | ADC_CCR_VBATEN));
  11539. 80054d4: 687b ldr r3, [r7, #4]
  11540. 80054d6: 689b ldr r3, [r3, #8]
  11541. 80054d8: f003 73e0 and.w r3, r3, #29360128 @ 0x1c00000
  11542. }
  11543. 80054dc: 4618 mov r0, r3
  11544. 80054de: 370c adds r7, #12
  11545. 80054e0: 46bd mov sp, r7
  11546. 80054e2: f85d 7b04 ldr.w r7, [sp], #4
  11547. 80054e6: 4770 bx lr
  11548. 080054e8 <LL_ADC_SetOffset>:
  11549. * Other channels are slow channels (conversion rate: refer to reference manual).
  11550. * @param OffsetLevel Value between Min_Data=0x000 and Max_Data=0x3FFFFFF
  11551. * @retval None
  11552. */
  11553. __STATIC_INLINE void LL_ADC_SetOffset(ADC_TypeDef *ADCx, uint32_t Offsety, uint32_t Channel, uint32_t OffsetLevel)
  11554. {
  11555. 80054e8: b480 push {r7}
  11556. 80054ea: b087 sub sp, #28
  11557. 80054ec: af00 add r7, sp, #0
  11558. 80054ee: 60f8 str r0, [r7, #12]
  11559. 80054f0: 60b9 str r1, [r7, #8]
  11560. 80054f2: 607a str r2, [r7, #4]
  11561. 80054f4: 603b str r3, [r7, #0]
  11562. __IO uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->OFR1, Offsety);
  11563. 80054f6: 68fb ldr r3, [r7, #12]
  11564. 80054f8: 3360 adds r3, #96 @ 0x60
  11565. 80054fa: 461a mov r2, r3
  11566. 80054fc: 68bb ldr r3, [r7, #8]
  11567. 80054fe: 009b lsls r3, r3, #2
  11568. 8005500: 4413 add r3, r2
  11569. 8005502: 617b str r3, [r7, #20]
  11570. ADC3_OFR1_OFFSET1_EN | (Channel & ADC_CHANNEL_ID_NUMBER_MASK) | OffsetLevel);
  11571. }
  11572. else
  11573. #endif /* ADC_VER_V5_V90 */
  11574. {
  11575. MODIFY_REG(*preg,
  11576. 8005504: 697b ldr r3, [r7, #20]
  11577. 8005506: 681b ldr r3, [r3, #0]
  11578. 8005508: f003 4200 and.w r2, r3, #2147483648 @ 0x80000000
  11579. 800550c: 687b ldr r3, [r7, #4]
  11580. 800550e: f003 41f8 and.w r1, r3, #2080374784 @ 0x7c000000
  11581. 8005512: 683b ldr r3, [r7, #0]
  11582. 8005514: 430b orrs r3, r1
  11583. 8005516: 431a orrs r2, r3
  11584. 8005518: 697b ldr r3, [r7, #20]
  11585. 800551a: 601a str r2, [r3, #0]
  11586. ADC_OFR1_OFFSET1_CH | ADC_OFR1_OFFSET1,
  11587. (Channel & ADC_CHANNEL_ID_NUMBER_MASK) | OffsetLevel);
  11588. }
  11589. }
  11590. 800551c: bf00 nop
  11591. 800551e: 371c adds r7, #28
  11592. 8005520: 46bd mov sp, r7
  11593. 8005522: f85d 7b04 ldr.w r7, [sp], #4
  11594. 8005526: 4770 bx lr
  11595. 08005528 <LL_ADC_SetDataRightShift>:
  11596. * @arg @ref LL_ADC_OFFSET_RSHIFT_ENABLE
  11597. * @arg @ref LL_ADC_OFFSET_RSHIFT_DISABLE
  11598. * @retval Returned None
  11599. */
  11600. __STATIC_INLINE void LL_ADC_SetDataRightShift(ADC_TypeDef *ADCx, uint32_t Offsety, uint32_t RigthShift)
  11601. {
  11602. 8005528: b480 push {r7}
  11603. 800552a: b085 sub sp, #20
  11604. 800552c: af00 add r7, sp, #0
  11605. 800552e: 60f8 str r0, [r7, #12]
  11606. 8005530: 60b9 str r1, [r7, #8]
  11607. 8005532: 607a str r2, [r7, #4]
  11608. MODIFY_REG(ADCx->CFGR2, (ADC_CFGR2_RSHIFT1 | ADC_CFGR2_RSHIFT2 | ADC_CFGR2_RSHIFT3 | ADC_CFGR2_RSHIFT4), RigthShift << (Offsety & 0x1FUL));
  11609. 8005534: 68fb ldr r3, [r7, #12]
  11610. 8005536: 691b ldr r3, [r3, #16]
  11611. 8005538: f423 42f0 bic.w r2, r3, #30720 @ 0x7800
  11612. 800553c: 68bb ldr r3, [r7, #8]
  11613. 800553e: f003 031f and.w r3, r3, #31
  11614. 8005542: 6879 ldr r1, [r7, #4]
  11615. 8005544: fa01 f303 lsl.w r3, r1, r3
  11616. 8005548: 431a orrs r2, r3
  11617. 800554a: 68fb ldr r3, [r7, #12]
  11618. 800554c: 611a str r2, [r3, #16]
  11619. }
  11620. 800554e: bf00 nop
  11621. 8005550: 3714 adds r7, #20
  11622. 8005552: 46bd mov sp, r7
  11623. 8005554: f85d 7b04 ldr.w r7, [sp], #4
  11624. 8005558: 4770 bx lr
  11625. 0800555a <LL_ADC_SetOffsetSignedSaturation>:
  11626. * @arg @ref LL_ADC_OFFSET_SIGNED_SATURATION_ENABLE
  11627. * @arg @ref LL_ADC_OFFSET_SIGNED_SATURATION_DISABLE
  11628. * @retval Returned None
  11629. */
  11630. __STATIC_INLINE void LL_ADC_SetOffsetSignedSaturation(ADC_TypeDef *ADCx, uint32_t Offsety, uint32_t OffsetSignedSaturation)
  11631. {
  11632. 800555a: b480 push {r7}
  11633. 800555c: b087 sub sp, #28
  11634. 800555e: af00 add r7, sp, #0
  11635. 8005560: 60f8 str r0, [r7, #12]
  11636. 8005562: 60b9 str r1, [r7, #8]
  11637. 8005564: 607a str r2, [r7, #4]
  11638. /* Function not available on this instance */
  11639. }
  11640. else
  11641. #endif /* ADC_VER_V5_V90 */
  11642. {
  11643. __IO uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->OFR1, Offsety);
  11644. 8005566: 68fb ldr r3, [r7, #12]
  11645. 8005568: 3360 adds r3, #96 @ 0x60
  11646. 800556a: 461a mov r2, r3
  11647. 800556c: 68bb ldr r3, [r7, #8]
  11648. 800556e: 009b lsls r3, r3, #2
  11649. 8005570: 4413 add r3, r2
  11650. 8005572: 617b str r3, [r7, #20]
  11651. MODIFY_REG(*preg, ADC_OFR1_SSATE, OffsetSignedSaturation);
  11652. 8005574: 697b ldr r3, [r7, #20]
  11653. 8005576: 681b ldr r3, [r3, #0]
  11654. 8005578: f023 4200 bic.w r2, r3, #2147483648 @ 0x80000000
  11655. 800557c: 687b ldr r3, [r7, #4]
  11656. 800557e: 431a orrs r2, r3
  11657. 8005580: 697b ldr r3, [r7, #20]
  11658. 8005582: 601a str r2, [r3, #0]
  11659. }
  11660. }
  11661. 8005584: bf00 nop
  11662. 8005586: 371c adds r7, #28
  11663. 8005588: 46bd mov sp, r7
  11664. 800558a: f85d 7b04 ldr.w r7, [sp], #4
  11665. 800558e: 4770 bx lr
  11666. 08005590 <LL_ADC_REG_IsTriggerSourceSWStart>:
  11667. * @param ADCx ADC instance
  11668. * @retval Value "0" if trigger source external trigger
  11669. * Value "1" if trigger source SW start.
  11670. */
  11671. __STATIC_INLINE uint32_t LL_ADC_REG_IsTriggerSourceSWStart(ADC_TypeDef *ADCx)
  11672. {
  11673. 8005590: b480 push {r7}
  11674. 8005592: b083 sub sp, #12
  11675. 8005594: af00 add r7, sp, #0
  11676. 8005596: 6078 str r0, [r7, #4]
  11677. return ((READ_BIT(ADCx->CFGR, ADC_CFGR_EXTEN) == (LL_ADC_REG_TRIG_SOFTWARE & ADC_CFGR_EXTEN)) ? 1UL : 0UL);
  11678. 8005598: 687b ldr r3, [r7, #4]
  11679. 800559a: 68db ldr r3, [r3, #12]
  11680. 800559c: f403 6340 and.w r3, r3, #3072 @ 0xc00
  11681. 80055a0: 2b00 cmp r3, #0
  11682. 80055a2: d101 bne.n 80055a8 <LL_ADC_REG_IsTriggerSourceSWStart+0x18>
  11683. 80055a4: 2301 movs r3, #1
  11684. 80055a6: e000 b.n 80055aa <LL_ADC_REG_IsTriggerSourceSWStart+0x1a>
  11685. 80055a8: 2300 movs r3, #0
  11686. }
  11687. 80055aa: 4618 mov r0, r3
  11688. 80055ac: 370c adds r7, #12
  11689. 80055ae: 46bd mov sp, r7
  11690. 80055b0: f85d 7b04 ldr.w r7, [sp], #4
  11691. 80055b4: 4770 bx lr
  11692. 080055b6 <LL_ADC_REG_SetSequencerRanks>:
  11693. * (3) On STM32H7, fast channel (0.125 us for 14-bit resolution (ADC conversion rate up to 8 Ms/s)).
  11694. * Other channels are slow channels (conversion rate: refer to reference manual).
  11695. * @retval None
  11696. */
  11697. __STATIC_INLINE void LL_ADC_REG_SetSequencerRanks(ADC_TypeDef *ADCx, uint32_t Rank, uint32_t Channel)
  11698. {
  11699. 80055b6: b480 push {r7}
  11700. 80055b8: b087 sub sp, #28
  11701. 80055ba: af00 add r7, sp, #0
  11702. 80055bc: 60f8 str r0, [r7, #12]
  11703. 80055be: 60b9 str r1, [r7, #8]
  11704. 80055c0: 607a str r2, [r7, #4]
  11705. /* Set bits with content of parameter "Channel" with bits position */
  11706. /* in register and register position depending on parameter "Rank". */
  11707. /* Parameters "Rank" and "Channel" are used with masks because containing */
  11708. /* other bits reserved for other purpose. */
  11709. __IO uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->SQR1, ((Rank & ADC_REG_SQRX_REGOFFSET_MASK) >> ADC_SQRX_REGOFFSET_POS));
  11710. 80055c2: 68fb ldr r3, [r7, #12]
  11711. 80055c4: 3330 adds r3, #48 @ 0x30
  11712. 80055c6: 461a mov r2, r3
  11713. 80055c8: 68bb ldr r3, [r7, #8]
  11714. 80055ca: 0a1b lsrs r3, r3, #8
  11715. 80055cc: 009b lsls r3, r3, #2
  11716. 80055ce: f003 030c and.w r3, r3, #12
  11717. 80055d2: 4413 add r3, r2
  11718. 80055d4: 617b str r3, [r7, #20]
  11719. MODIFY_REG(*preg,
  11720. 80055d6: 697b ldr r3, [r7, #20]
  11721. 80055d8: 681a ldr r2, [r3, #0]
  11722. 80055da: 68bb ldr r3, [r7, #8]
  11723. 80055dc: f003 031f and.w r3, r3, #31
  11724. 80055e0: 211f movs r1, #31
  11725. 80055e2: fa01 f303 lsl.w r3, r1, r3
  11726. 80055e6: 43db mvns r3, r3
  11727. 80055e8: 401a ands r2, r3
  11728. 80055ea: 687b ldr r3, [r7, #4]
  11729. 80055ec: 0e9b lsrs r3, r3, #26
  11730. 80055ee: f003 011f and.w r1, r3, #31
  11731. 80055f2: 68bb ldr r3, [r7, #8]
  11732. 80055f4: f003 031f and.w r3, r3, #31
  11733. 80055f8: fa01 f303 lsl.w r3, r1, r3
  11734. 80055fc: 431a orrs r2, r3
  11735. 80055fe: 697b ldr r3, [r7, #20]
  11736. 8005600: 601a str r2, [r3, #0]
  11737. ADC_CHANNEL_ID_NUMBER_MASK_POSBIT0 << (Rank & ADC_REG_RANK_ID_SQRX_MASK),
  11738. ((Channel & ADC_CHANNEL_ID_NUMBER_MASK) >> ADC_CHANNEL_ID_NUMBER_BITOFFSET_POS) << (Rank & ADC_REG_RANK_ID_SQRX_MASK));
  11739. }
  11740. 8005602: bf00 nop
  11741. 8005604: 371c adds r7, #28
  11742. 8005606: 46bd mov sp, r7
  11743. 8005608: f85d 7b04 ldr.w r7, [sp], #4
  11744. 800560c: 4770 bx lr
  11745. 0800560e <LL_ADC_REG_SetDataTransferMode>:
  11746. * @param ADCx ADC instance
  11747. * @param DataTransferMode Select Data Management configuration
  11748. * @retval None
  11749. */
  11750. __STATIC_INLINE void LL_ADC_REG_SetDataTransferMode(ADC_TypeDef *ADCx, uint32_t DataTransferMode)
  11751. {
  11752. 800560e: b480 push {r7}
  11753. 8005610: b083 sub sp, #12
  11754. 8005612: af00 add r7, sp, #0
  11755. 8005614: 6078 str r0, [r7, #4]
  11756. 8005616: 6039 str r1, [r7, #0]
  11757. MODIFY_REG(ADCx->CFGR, ADC_CFGR_DMNGT, DataTransferMode);
  11758. 8005618: 687b ldr r3, [r7, #4]
  11759. 800561a: 68db ldr r3, [r3, #12]
  11760. 800561c: f023 0203 bic.w r2, r3, #3
  11761. 8005620: 683b ldr r3, [r7, #0]
  11762. 8005622: 431a orrs r2, r3
  11763. 8005624: 687b ldr r3, [r7, #4]
  11764. 8005626: 60da str r2, [r3, #12]
  11765. }
  11766. 8005628: bf00 nop
  11767. 800562a: 370c adds r7, #12
  11768. 800562c: 46bd mov sp, r7
  11769. 800562e: f85d 7b04 ldr.w r7, [sp], #4
  11770. 8005632: 4770 bx lr
  11771. 08005634 <LL_ADC_SetChannelSamplingTime>:
  11772. * @arg @ref LL_ADC_SAMPLINGTIME_387CYCLES_5
  11773. * @arg @ref LL_ADC_SAMPLINGTIME_810CYCLES_5
  11774. * @retval None
  11775. */
  11776. __STATIC_INLINE void LL_ADC_SetChannelSamplingTime(ADC_TypeDef *ADCx, uint32_t Channel, uint32_t SamplingTime)
  11777. {
  11778. 8005634: b480 push {r7}
  11779. 8005636: b087 sub sp, #28
  11780. 8005638: af00 add r7, sp, #0
  11781. 800563a: 60f8 str r0, [r7, #12]
  11782. 800563c: 60b9 str r1, [r7, #8]
  11783. 800563e: 607a str r2, [r7, #4]
  11784. /* Set bits with content of parameter "SamplingTime" with bits position */
  11785. /* in register and register position depending on parameter "Channel". */
  11786. /* Parameter "Channel" is used with masks because containing */
  11787. /* other bits reserved for other purpose. */
  11788. __IO uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->SMPR1, ((Channel & ADC_CHANNEL_SMPRX_REGOFFSET_MASK) >> ADC_SMPRX_REGOFFSET_POS));
  11789. 8005640: 68fb ldr r3, [r7, #12]
  11790. 8005642: 3314 adds r3, #20
  11791. 8005644: 461a mov r2, r3
  11792. 8005646: 68bb ldr r3, [r7, #8]
  11793. 8005648: 0e5b lsrs r3, r3, #25
  11794. 800564a: 009b lsls r3, r3, #2
  11795. 800564c: f003 0304 and.w r3, r3, #4
  11796. 8005650: 4413 add r3, r2
  11797. 8005652: 617b str r3, [r7, #20]
  11798. MODIFY_REG(*preg,
  11799. 8005654: 697b ldr r3, [r7, #20]
  11800. 8005656: 681a ldr r2, [r3, #0]
  11801. 8005658: 68bb ldr r3, [r7, #8]
  11802. 800565a: 0d1b lsrs r3, r3, #20
  11803. 800565c: f003 031f and.w r3, r3, #31
  11804. 8005660: 2107 movs r1, #7
  11805. 8005662: fa01 f303 lsl.w r3, r1, r3
  11806. 8005666: 43db mvns r3, r3
  11807. 8005668: 401a ands r2, r3
  11808. 800566a: 68bb ldr r3, [r7, #8]
  11809. 800566c: 0d1b lsrs r3, r3, #20
  11810. 800566e: f003 031f and.w r3, r3, #31
  11811. 8005672: 6879 ldr r1, [r7, #4]
  11812. 8005674: fa01 f303 lsl.w r3, r1, r3
  11813. 8005678: 431a orrs r2, r3
  11814. 800567a: 697b ldr r3, [r7, #20]
  11815. 800567c: 601a str r2, [r3, #0]
  11816. ADC_SMPR1_SMP0 << ((Channel & ADC_CHANNEL_SMPx_BITOFFSET_MASK) >> ADC_CHANNEL_SMPx_BITOFFSET_POS),
  11817. SamplingTime << ((Channel & ADC_CHANNEL_SMPx_BITOFFSET_MASK) >> ADC_CHANNEL_SMPx_BITOFFSET_POS));
  11818. }
  11819. 800567e: bf00 nop
  11820. 8005680: 371c adds r7, #28
  11821. 8005682: 46bd mov sp, r7
  11822. 8005684: f85d 7b04 ldr.w r7, [sp], #4
  11823. 8005688: 4770 bx lr
  11824. ...
  11825. 0800568c <LL_ADC_SetChannelSingleDiff>:
  11826. * @arg @ref LL_ADC_SINGLE_ENDED
  11827. * @arg @ref LL_ADC_DIFFERENTIAL_ENDED
  11828. * @retval None
  11829. */
  11830. __STATIC_INLINE void LL_ADC_SetChannelSingleDiff(ADC_TypeDef *ADCx, uint32_t Channel, uint32_t SingleDiff)
  11831. {
  11832. 800568c: b480 push {r7}
  11833. 800568e: b085 sub sp, #20
  11834. 8005690: af00 add r7, sp, #0
  11835. 8005692: 60f8 str r0, [r7, #12]
  11836. 8005694: 60b9 str r1, [r7, #8]
  11837. 8005696: 607a str r2, [r7, #4]
  11838. }
  11839. #else /* ADC_VER_V5_V90 */
  11840. /* Bits of channels in single or differential mode are set only for */
  11841. /* differential mode (for single mode, mask of bits allowed to be set is */
  11842. /* shifted out of range of bits of channels in single or differential mode. */
  11843. MODIFY_REG(ADCx->DIFSEL,
  11844. 8005698: 68fb ldr r3, [r7, #12]
  11845. 800569a: f8d3 20c0 ldr.w r2, [r3, #192] @ 0xc0
  11846. 800569e: 68bb ldr r3, [r7, #8]
  11847. 80056a0: f3c3 0313 ubfx r3, r3, #0, #20
  11848. 80056a4: 43db mvns r3, r3
  11849. 80056a6: 401a ands r2, r3
  11850. 80056a8: 687b ldr r3, [r7, #4]
  11851. 80056aa: f003 0318 and.w r3, r3, #24
  11852. 80056ae: 4908 ldr r1, [pc, #32] @ (80056d0 <LL_ADC_SetChannelSingleDiff+0x44>)
  11853. 80056b0: 40d9 lsrs r1, r3
  11854. 80056b2: 68bb ldr r3, [r7, #8]
  11855. 80056b4: 400b ands r3, r1
  11856. 80056b6: f3c3 0313 ubfx r3, r3, #0, #20
  11857. 80056ba: 431a orrs r2, r3
  11858. 80056bc: 68fb ldr r3, [r7, #12]
  11859. 80056be: f8c3 20c0 str.w r2, [r3, #192] @ 0xc0
  11860. Channel & ADC_SINGLEDIFF_CHANNEL_MASK,
  11861. (Channel & ADC_SINGLEDIFF_CHANNEL_MASK) & (ADC_DIFSEL_DIFSEL >> (SingleDiff & ADC_SINGLEDIFF_CHANNEL_SHIFT_MASK)));
  11862. #endif /* ADC_VER_V5_V90 */
  11863. }
  11864. 80056c2: bf00 nop
  11865. 80056c4: 3714 adds r7, #20
  11866. 80056c6: 46bd mov sp, r7
  11867. 80056c8: f85d 7b04 ldr.w r7, [sp], #4
  11868. 80056cc: 4770 bx lr
  11869. 80056ce: bf00 nop
  11870. 80056d0: 000fffff .word 0x000fffff
  11871. 080056d4 <LL_ADC_GetMultimode>:
  11872. * @arg @ref LL_ADC_MULTI_DUAL_REG_SIM_INJ_SIM
  11873. * @arg @ref LL_ADC_MULTI_DUAL_REG_SIM_INJ_ALT
  11874. * @arg @ref LL_ADC_MULTI_DUAL_REG_INT_INJ_SIM
  11875. */
  11876. __STATIC_INLINE uint32_t LL_ADC_GetMultimode(ADC_Common_TypeDef *ADCxy_COMMON)
  11877. {
  11878. 80056d4: b480 push {r7}
  11879. 80056d6: b083 sub sp, #12
  11880. 80056d8: af00 add r7, sp, #0
  11881. 80056da: 6078 str r0, [r7, #4]
  11882. return (uint32_t)(READ_BIT(ADCxy_COMMON->CCR, ADC_CCR_DUAL));
  11883. 80056dc: 687b ldr r3, [r7, #4]
  11884. 80056de: 689b ldr r3, [r3, #8]
  11885. 80056e0: f003 031f and.w r3, r3, #31
  11886. }
  11887. 80056e4: 4618 mov r0, r3
  11888. 80056e6: 370c adds r7, #12
  11889. 80056e8: 46bd mov sp, r7
  11890. 80056ea: f85d 7b04 ldr.w r7, [sp], #4
  11891. 80056ee: 4770 bx lr
  11892. 080056f0 <LL_ADC_DisableDeepPowerDown>:
  11893. * @rmtoll CR DEEPPWD LL_ADC_DisableDeepPowerDown
  11894. * @param ADCx ADC instance
  11895. * @retval None
  11896. */
  11897. __STATIC_INLINE void LL_ADC_DisableDeepPowerDown(ADC_TypeDef *ADCx)
  11898. {
  11899. 80056f0: b480 push {r7}
  11900. 80056f2: b083 sub sp, #12
  11901. 80056f4: af00 add r7, sp, #0
  11902. 80056f6: 6078 str r0, [r7, #4]
  11903. /* Note: Write register with some additional bits forced to state reset */
  11904. /* instead of modifying only the selected bit for this function, */
  11905. /* to not interfere with bits with HW property "rs". */
  11906. CLEAR_BIT(ADCx->CR, (ADC_CR_DEEPPWD | ADC_CR_BITS_PROPERTY_RS));
  11907. 80056f8: 687b ldr r3, [r7, #4]
  11908. 80056fa: 689a ldr r2, [r3, #8]
  11909. 80056fc: 4b04 ldr r3, [pc, #16] @ (8005710 <LL_ADC_DisableDeepPowerDown+0x20>)
  11910. 80056fe: 4013 ands r3, r2
  11911. 8005700: 687a ldr r2, [r7, #4]
  11912. 8005702: 6093 str r3, [r2, #8]
  11913. }
  11914. 8005704: bf00 nop
  11915. 8005706: 370c adds r7, #12
  11916. 8005708: 46bd mov sp, r7
  11917. 800570a: f85d 7b04 ldr.w r7, [sp], #4
  11918. 800570e: 4770 bx lr
  11919. 8005710: 5fffffc0 .word 0x5fffffc0
  11920. 08005714 <LL_ADC_IsDeepPowerDownEnabled>:
  11921. * @rmtoll CR DEEPPWD LL_ADC_IsDeepPowerDownEnabled
  11922. * @param ADCx ADC instance
  11923. * @retval 0: deep power down is disabled, 1: deep power down is enabled.
  11924. */
  11925. __STATIC_INLINE uint32_t LL_ADC_IsDeepPowerDownEnabled(ADC_TypeDef *ADCx)
  11926. {
  11927. 8005714: b480 push {r7}
  11928. 8005716: b083 sub sp, #12
  11929. 8005718: af00 add r7, sp, #0
  11930. 800571a: 6078 str r0, [r7, #4]
  11931. return ((READ_BIT(ADCx->CR, ADC_CR_DEEPPWD) == (ADC_CR_DEEPPWD)) ? 1UL : 0UL);
  11932. 800571c: 687b ldr r3, [r7, #4]
  11933. 800571e: 689b ldr r3, [r3, #8]
  11934. 8005720: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  11935. 8005724: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  11936. 8005728: d101 bne.n 800572e <LL_ADC_IsDeepPowerDownEnabled+0x1a>
  11937. 800572a: 2301 movs r3, #1
  11938. 800572c: e000 b.n 8005730 <LL_ADC_IsDeepPowerDownEnabled+0x1c>
  11939. 800572e: 2300 movs r3, #0
  11940. }
  11941. 8005730: 4618 mov r0, r3
  11942. 8005732: 370c adds r7, #12
  11943. 8005734: 46bd mov sp, r7
  11944. 8005736: f85d 7b04 ldr.w r7, [sp], #4
  11945. 800573a: 4770 bx lr
  11946. 0800573c <LL_ADC_EnableInternalRegulator>:
  11947. * @rmtoll CR ADVREGEN LL_ADC_EnableInternalRegulator
  11948. * @param ADCx ADC instance
  11949. * @retval None
  11950. */
  11951. __STATIC_INLINE void LL_ADC_EnableInternalRegulator(ADC_TypeDef *ADCx)
  11952. {
  11953. 800573c: b480 push {r7}
  11954. 800573e: b083 sub sp, #12
  11955. 8005740: af00 add r7, sp, #0
  11956. 8005742: 6078 str r0, [r7, #4]
  11957. /* Note: Write register with some additional bits forced to state reset */
  11958. /* instead of modifying only the selected bit for this function, */
  11959. /* to not interfere with bits with HW property "rs". */
  11960. MODIFY_REG(ADCx->CR,
  11961. 8005744: 687b ldr r3, [r7, #4]
  11962. 8005746: 689a ldr r2, [r3, #8]
  11963. 8005748: 4b05 ldr r3, [pc, #20] @ (8005760 <LL_ADC_EnableInternalRegulator+0x24>)
  11964. 800574a: 4013 ands r3, r2
  11965. 800574c: f043 5280 orr.w r2, r3, #268435456 @ 0x10000000
  11966. 8005750: 687b ldr r3, [r7, #4]
  11967. 8005752: 609a str r2, [r3, #8]
  11968. ADC_CR_BITS_PROPERTY_RS,
  11969. ADC_CR_ADVREGEN);
  11970. }
  11971. 8005754: bf00 nop
  11972. 8005756: 370c adds r7, #12
  11973. 8005758: 46bd mov sp, r7
  11974. 800575a: f85d 7b04 ldr.w r7, [sp], #4
  11975. 800575e: 4770 bx lr
  11976. 8005760: 6fffffc0 .word 0x6fffffc0
  11977. 08005764 <LL_ADC_IsInternalRegulatorEnabled>:
  11978. * @rmtoll CR ADVREGEN LL_ADC_IsInternalRegulatorEnabled
  11979. * @param ADCx ADC instance
  11980. * @retval 0: internal regulator is disabled, 1: internal regulator is enabled.
  11981. */
  11982. __STATIC_INLINE uint32_t LL_ADC_IsInternalRegulatorEnabled(ADC_TypeDef *ADCx)
  11983. {
  11984. 8005764: b480 push {r7}
  11985. 8005766: b083 sub sp, #12
  11986. 8005768: af00 add r7, sp, #0
  11987. 800576a: 6078 str r0, [r7, #4]
  11988. return ((READ_BIT(ADCx->CR, ADC_CR_ADVREGEN) == (ADC_CR_ADVREGEN)) ? 1UL : 0UL);
  11989. 800576c: 687b ldr r3, [r7, #4]
  11990. 800576e: 689b ldr r3, [r3, #8]
  11991. 8005770: f003 5380 and.w r3, r3, #268435456 @ 0x10000000
  11992. 8005774: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  11993. 8005778: d101 bne.n 800577e <LL_ADC_IsInternalRegulatorEnabled+0x1a>
  11994. 800577a: 2301 movs r3, #1
  11995. 800577c: e000 b.n 8005780 <LL_ADC_IsInternalRegulatorEnabled+0x1c>
  11996. 800577e: 2300 movs r3, #0
  11997. }
  11998. 8005780: 4618 mov r0, r3
  11999. 8005782: 370c adds r7, #12
  12000. 8005784: 46bd mov sp, r7
  12001. 8005786: f85d 7b04 ldr.w r7, [sp], #4
  12002. 800578a: 4770 bx lr
  12003. 0800578c <LL_ADC_Enable>:
  12004. * @rmtoll CR ADEN LL_ADC_Enable
  12005. * @param ADCx ADC instance
  12006. * @retval None
  12007. */
  12008. __STATIC_INLINE void LL_ADC_Enable(ADC_TypeDef *ADCx)
  12009. {
  12010. 800578c: b480 push {r7}
  12011. 800578e: b083 sub sp, #12
  12012. 8005790: af00 add r7, sp, #0
  12013. 8005792: 6078 str r0, [r7, #4]
  12014. /* Note: Write register with some additional bits forced to state reset */
  12015. /* instead of modifying only the selected bit for this function, */
  12016. /* to not interfere with bits with HW property "rs". */
  12017. MODIFY_REG(ADCx->CR,
  12018. 8005794: 687b ldr r3, [r7, #4]
  12019. 8005796: 689a ldr r2, [r3, #8]
  12020. 8005798: 4b05 ldr r3, [pc, #20] @ (80057b0 <LL_ADC_Enable+0x24>)
  12021. 800579a: 4013 ands r3, r2
  12022. 800579c: f043 0201 orr.w r2, r3, #1
  12023. 80057a0: 687b ldr r3, [r7, #4]
  12024. 80057a2: 609a str r2, [r3, #8]
  12025. ADC_CR_BITS_PROPERTY_RS,
  12026. ADC_CR_ADEN);
  12027. }
  12028. 80057a4: bf00 nop
  12029. 80057a6: 370c adds r7, #12
  12030. 80057a8: 46bd mov sp, r7
  12031. 80057aa: f85d 7b04 ldr.w r7, [sp], #4
  12032. 80057ae: 4770 bx lr
  12033. 80057b0: 7fffffc0 .word 0x7fffffc0
  12034. 080057b4 <LL_ADC_Disable>:
  12035. * @rmtoll CR ADDIS LL_ADC_Disable
  12036. * @param ADCx ADC instance
  12037. * @retval None
  12038. */
  12039. __STATIC_INLINE void LL_ADC_Disable(ADC_TypeDef *ADCx)
  12040. {
  12041. 80057b4: b480 push {r7}
  12042. 80057b6: b083 sub sp, #12
  12043. 80057b8: af00 add r7, sp, #0
  12044. 80057ba: 6078 str r0, [r7, #4]
  12045. /* Note: Write register with some additional bits forced to state reset */
  12046. /* instead of modifying only the selected bit for this function, */
  12047. /* to not interfere with bits with HW property "rs". */
  12048. MODIFY_REG(ADCx->CR,
  12049. 80057bc: 687b ldr r3, [r7, #4]
  12050. 80057be: 689a ldr r2, [r3, #8]
  12051. 80057c0: 4b05 ldr r3, [pc, #20] @ (80057d8 <LL_ADC_Disable+0x24>)
  12052. 80057c2: 4013 ands r3, r2
  12053. 80057c4: f043 0202 orr.w r2, r3, #2
  12054. 80057c8: 687b ldr r3, [r7, #4]
  12055. 80057ca: 609a str r2, [r3, #8]
  12056. ADC_CR_BITS_PROPERTY_RS,
  12057. ADC_CR_ADDIS);
  12058. }
  12059. 80057cc: bf00 nop
  12060. 80057ce: 370c adds r7, #12
  12061. 80057d0: 46bd mov sp, r7
  12062. 80057d2: f85d 7b04 ldr.w r7, [sp], #4
  12063. 80057d6: 4770 bx lr
  12064. 80057d8: 7fffffc0 .word 0x7fffffc0
  12065. 080057dc <LL_ADC_IsEnabled>:
  12066. * @rmtoll CR ADEN LL_ADC_IsEnabled
  12067. * @param ADCx ADC instance
  12068. * @retval 0: ADC is disabled, 1: ADC is enabled.
  12069. */
  12070. __STATIC_INLINE uint32_t LL_ADC_IsEnabled(ADC_TypeDef *ADCx)
  12071. {
  12072. 80057dc: b480 push {r7}
  12073. 80057de: b083 sub sp, #12
  12074. 80057e0: af00 add r7, sp, #0
  12075. 80057e2: 6078 str r0, [r7, #4]
  12076. return ((READ_BIT(ADCx->CR, ADC_CR_ADEN) == (ADC_CR_ADEN)) ? 1UL : 0UL);
  12077. 80057e4: 687b ldr r3, [r7, #4]
  12078. 80057e6: 689b ldr r3, [r3, #8]
  12079. 80057e8: f003 0301 and.w r3, r3, #1
  12080. 80057ec: 2b01 cmp r3, #1
  12081. 80057ee: d101 bne.n 80057f4 <LL_ADC_IsEnabled+0x18>
  12082. 80057f0: 2301 movs r3, #1
  12083. 80057f2: e000 b.n 80057f6 <LL_ADC_IsEnabled+0x1a>
  12084. 80057f4: 2300 movs r3, #0
  12085. }
  12086. 80057f6: 4618 mov r0, r3
  12087. 80057f8: 370c adds r7, #12
  12088. 80057fa: 46bd mov sp, r7
  12089. 80057fc: f85d 7b04 ldr.w r7, [sp], #4
  12090. 8005800: 4770 bx lr
  12091. 08005802 <LL_ADC_IsDisableOngoing>:
  12092. * @rmtoll CR ADDIS LL_ADC_IsDisableOngoing
  12093. * @param ADCx ADC instance
  12094. * @retval 0: no ADC disable command on going.
  12095. */
  12096. __STATIC_INLINE uint32_t LL_ADC_IsDisableOngoing(ADC_TypeDef *ADCx)
  12097. {
  12098. 8005802: b480 push {r7}
  12099. 8005804: b083 sub sp, #12
  12100. 8005806: af00 add r7, sp, #0
  12101. 8005808: 6078 str r0, [r7, #4]
  12102. return ((READ_BIT(ADCx->CR, ADC_CR_ADDIS) == (ADC_CR_ADDIS)) ? 1UL : 0UL);
  12103. 800580a: 687b ldr r3, [r7, #4]
  12104. 800580c: 689b ldr r3, [r3, #8]
  12105. 800580e: f003 0302 and.w r3, r3, #2
  12106. 8005812: 2b02 cmp r3, #2
  12107. 8005814: d101 bne.n 800581a <LL_ADC_IsDisableOngoing+0x18>
  12108. 8005816: 2301 movs r3, #1
  12109. 8005818: e000 b.n 800581c <LL_ADC_IsDisableOngoing+0x1a>
  12110. 800581a: 2300 movs r3, #0
  12111. }
  12112. 800581c: 4618 mov r0, r3
  12113. 800581e: 370c adds r7, #12
  12114. 8005820: 46bd mov sp, r7
  12115. 8005822: f85d 7b04 ldr.w r7, [sp], #4
  12116. 8005826: 4770 bx lr
  12117. 08005828 <LL_ADC_REG_StartConversion>:
  12118. * @rmtoll CR ADSTART LL_ADC_REG_StartConversion
  12119. * @param ADCx ADC instance
  12120. * @retval None
  12121. */
  12122. __STATIC_INLINE void LL_ADC_REG_StartConversion(ADC_TypeDef *ADCx)
  12123. {
  12124. 8005828: b480 push {r7}
  12125. 800582a: b083 sub sp, #12
  12126. 800582c: af00 add r7, sp, #0
  12127. 800582e: 6078 str r0, [r7, #4]
  12128. /* Note: Write register with some additional bits forced to state reset */
  12129. /* instead of modifying only the selected bit for this function, */
  12130. /* to not interfere with bits with HW property "rs". */
  12131. MODIFY_REG(ADCx->CR,
  12132. 8005830: 687b ldr r3, [r7, #4]
  12133. 8005832: 689a ldr r2, [r3, #8]
  12134. 8005834: 4b05 ldr r3, [pc, #20] @ (800584c <LL_ADC_REG_StartConversion+0x24>)
  12135. 8005836: 4013 ands r3, r2
  12136. 8005838: f043 0204 orr.w r2, r3, #4
  12137. 800583c: 687b ldr r3, [r7, #4]
  12138. 800583e: 609a str r2, [r3, #8]
  12139. ADC_CR_BITS_PROPERTY_RS,
  12140. ADC_CR_ADSTART);
  12141. }
  12142. 8005840: bf00 nop
  12143. 8005842: 370c adds r7, #12
  12144. 8005844: 46bd mov sp, r7
  12145. 8005846: f85d 7b04 ldr.w r7, [sp], #4
  12146. 800584a: 4770 bx lr
  12147. 800584c: 7fffffc0 .word 0x7fffffc0
  12148. 08005850 <LL_ADC_REG_IsConversionOngoing>:
  12149. * @rmtoll CR ADSTART LL_ADC_REG_IsConversionOngoing
  12150. * @param ADCx ADC instance
  12151. * @retval 0: no conversion is on going on ADC group regular.
  12152. */
  12153. __STATIC_INLINE uint32_t LL_ADC_REG_IsConversionOngoing(ADC_TypeDef *ADCx)
  12154. {
  12155. 8005850: b480 push {r7}
  12156. 8005852: b083 sub sp, #12
  12157. 8005854: af00 add r7, sp, #0
  12158. 8005856: 6078 str r0, [r7, #4]
  12159. return ((READ_BIT(ADCx->CR, ADC_CR_ADSTART) == (ADC_CR_ADSTART)) ? 1UL : 0UL);
  12160. 8005858: 687b ldr r3, [r7, #4]
  12161. 800585a: 689b ldr r3, [r3, #8]
  12162. 800585c: f003 0304 and.w r3, r3, #4
  12163. 8005860: 2b04 cmp r3, #4
  12164. 8005862: d101 bne.n 8005868 <LL_ADC_REG_IsConversionOngoing+0x18>
  12165. 8005864: 2301 movs r3, #1
  12166. 8005866: e000 b.n 800586a <LL_ADC_REG_IsConversionOngoing+0x1a>
  12167. 8005868: 2300 movs r3, #0
  12168. }
  12169. 800586a: 4618 mov r0, r3
  12170. 800586c: 370c adds r7, #12
  12171. 800586e: 46bd mov sp, r7
  12172. 8005870: f85d 7b04 ldr.w r7, [sp], #4
  12173. 8005874: 4770 bx lr
  12174. 08005876 <LL_ADC_INJ_IsConversionOngoing>:
  12175. * @rmtoll CR JADSTART LL_ADC_INJ_IsConversionOngoing
  12176. * @param ADCx ADC instance
  12177. * @retval 0: no conversion is on going on ADC group injected.
  12178. */
  12179. __STATIC_INLINE uint32_t LL_ADC_INJ_IsConversionOngoing(ADC_TypeDef *ADCx)
  12180. {
  12181. 8005876: b480 push {r7}
  12182. 8005878: b083 sub sp, #12
  12183. 800587a: af00 add r7, sp, #0
  12184. 800587c: 6078 str r0, [r7, #4]
  12185. return ((READ_BIT(ADCx->CR, ADC_CR_JADSTART) == (ADC_CR_JADSTART)) ? 1UL : 0UL);
  12186. 800587e: 687b ldr r3, [r7, #4]
  12187. 8005880: 689b ldr r3, [r3, #8]
  12188. 8005882: f003 0308 and.w r3, r3, #8
  12189. 8005886: 2b08 cmp r3, #8
  12190. 8005888: d101 bne.n 800588e <LL_ADC_INJ_IsConversionOngoing+0x18>
  12191. 800588a: 2301 movs r3, #1
  12192. 800588c: e000 b.n 8005890 <LL_ADC_INJ_IsConversionOngoing+0x1a>
  12193. 800588e: 2300 movs r3, #0
  12194. }
  12195. 8005890: 4618 mov r0, r3
  12196. 8005892: 370c adds r7, #12
  12197. 8005894: 46bd mov sp, r7
  12198. 8005896: f85d 7b04 ldr.w r7, [sp], #4
  12199. 800589a: 4770 bx lr
  12200. 0800589c <HAL_ADC_Init>:
  12201. * without disabling the other ADCs.
  12202. * @param hadc ADC handle
  12203. * @retval HAL status
  12204. */
  12205. HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef *hadc)
  12206. {
  12207. 800589c: b590 push {r4, r7, lr}
  12208. 800589e: b089 sub sp, #36 @ 0x24
  12209. 80058a0: af00 add r7, sp, #0
  12210. 80058a2: 6078 str r0, [r7, #4]
  12211. HAL_StatusTypeDef tmp_hal_status = HAL_OK;
  12212. 80058a4: 2300 movs r3, #0
  12213. 80058a6: 77fb strb r3, [r7, #31]
  12214. uint32_t tmpCFGR;
  12215. uint32_t tmp_adc_reg_is_conversion_on_going;
  12216. __IO uint32_t wait_loop_index = 0UL;
  12217. 80058a8: 2300 movs r3, #0
  12218. 80058aa: 60bb str r3, [r7, #8]
  12219. uint32_t tmp_adc_is_conversion_on_going_regular;
  12220. uint32_t tmp_adc_is_conversion_on_going_injected;
  12221. /* Check ADC handle */
  12222. if (hadc == NULL)
  12223. 80058ac: 687b ldr r3, [r7, #4]
  12224. 80058ae: 2b00 cmp r3, #0
  12225. 80058b0: d101 bne.n 80058b6 <HAL_ADC_Init+0x1a>
  12226. {
  12227. return HAL_ERROR;
  12228. 80058b2: 2301 movs r3, #1
  12229. 80058b4: e18f b.n 8005bd6 <HAL_ADC_Init+0x33a>
  12230. assert_param(IS_ADC_EOC_SELECTION(hadc->Init.EOCSelection));
  12231. assert_param(IS_ADC_OVERRUN(hadc->Init.Overrun));
  12232. assert_param(IS_FUNCTIONAL_STATE(hadc->Init.LowPowerAutoWait));
  12233. assert_param(IS_FUNCTIONAL_STATE(hadc->Init.OversamplingMode));
  12234. if (hadc->Init.ScanConvMode != ADC_SCAN_DISABLE)
  12235. 80058b6: 687b ldr r3, [r7, #4]
  12236. 80058b8: 68db ldr r3, [r3, #12]
  12237. 80058ba: 2b00 cmp r3, #0
  12238. /* DISCEN and CONT bits cannot be set at the same time */
  12239. assert_param(!((hadc->Init.DiscontinuousConvMode == ENABLE) && (hadc->Init.ContinuousConvMode == ENABLE)));
  12240. /* Actions performed only if ADC is coming from state reset: */
  12241. /* - Initialization of ADC MSP */
  12242. if (hadc->State == HAL_ADC_STATE_RESET)
  12243. 80058bc: 687b ldr r3, [r7, #4]
  12244. 80058be: 6d5b ldr r3, [r3, #84] @ 0x54
  12245. 80058c0: 2b00 cmp r3, #0
  12246. 80058c2: d109 bne.n 80058d8 <HAL_ADC_Init+0x3c>
  12247. /* Init the low level hardware */
  12248. hadc->MspInitCallback(hadc);
  12249. #else
  12250. /* Init the low level hardware */
  12251. HAL_ADC_MspInit(hadc);
  12252. 80058c4: 6878 ldr r0, [r7, #4]
  12253. 80058c6: f7fd fd9d bl 8003404 <HAL_ADC_MspInit>
  12254. #endif /* USE_HAL_ADC_REGISTER_CALLBACKS */
  12255. /* Set ADC error code to none */
  12256. ADC_CLEAR_ERRORCODE(hadc);
  12257. 80058ca: 687b ldr r3, [r7, #4]
  12258. 80058cc: 2200 movs r2, #0
  12259. 80058ce: 659a str r2, [r3, #88] @ 0x58
  12260. /* Initialize Lock */
  12261. hadc->Lock = HAL_UNLOCKED;
  12262. 80058d0: 687b ldr r3, [r7, #4]
  12263. 80058d2: 2200 movs r2, #0
  12264. 80058d4: f883 2050 strb.w r2, [r3, #80] @ 0x50
  12265. }
  12266. /* - Exit from deep-power-down mode and ADC voltage regulator enable */
  12267. if (LL_ADC_IsDeepPowerDownEnabled(hadc->Instance) != 0UL)
  12268. 80058d8: 687b ldr r3, [r7, #4]
  12269. 80058da: 681b ldr r3, [r3, #0]
  12270. 80058dc: 4618 mov r0, r3
  12271. 80058de: f7ff ff19 bl 8005714 <LL_ADC_IsDeepPowerDownEnabled>
  12272. 80058e2: 4603 mov r3, r0
  12273. 80058e4: 2b00 cmp r3, #0
  12274. 80058e6: d004 beq.n 80058f2 <HAL_ADC_Init+0x56>
  12275. {
  12276. /* Disable ADC deep power down mode */
  12277. LL_ADC_DisableDeepPowerDown(hadc->Instance);
  12278. 80058e8: 687b ldr r3, [r7, #4]
  12279. 80058ea: 681b ldr r3, [r3, #0]
  12280. 80058ec: 4618 mov r0, r3
  12281. 80058ee: f7ff feff bl 80056f0 <LL_ADC_DisableDeepPowerDown>
  12282. /* System was in deep power down mode, calibration must
  12283. be relaunched or a previously saved calibration factor
  12284. re-applied once the ADC voltage regulator is enabled */
  12285. }
  12286. if (LL_ADC_IsInternalRegulatorEnabled(hadc->Instance) == 0UL)
  12287. 80058f2: 687b ldr r3, [r7, #4]
  12288. 80058f4: 681b ldr r3, [r3, #0]
  12289. 80058f6: 4618 mov r0, r3
  12290. 80058f8: f7ff ff34 bl 8005764 <LL_ADC_IsInternalRegulatorEnabled>
  12291. 80058fc: 4603 mov r3, r0
  12292. 80058fe: 2b00 cmp r3, #0
  12293. 8005900: d114 bne.n 800592c <HAL_ADC_Init+0x90>
  12294. {
  12295. /* Enable ADC internal voltage regulator */
  12296. LL_ADC_EnableInternalRegulator(hadc->Instance);
  12297. 8005902: 687b ldr r3, [r7, #4]
  12298. 8005904: 681b ldr r3, [r3, #0]
  12299. 8005906: 4618 mov r0, r3
  12300. 8005908: f7ff ff18 bl 800573c <LL_ADC_EnableInternalRegulator>
  12301. /* Note: Variable divided by 2 to compensate partially */
  12302. /* CPU processing cycles, scaling in us split to not */
  12303. /* exceed 32 bits register capacity and handle low frequency. */
  12304. wait_loop_index = ((LL_ADC_DELAY_INTERNAL_REGUL_STAB_US / 10UL) * ((SystemCoreClock / (100000UL * 2UL)) + 1UL));
  12305. 800590c: 4b87 ldr r3, [pc, #540] @ (8005b2c <HAL_ADC_Init+0x290>)
  12306. 800590e: 681b ldr r3, [r3, #0]
  12307. 8005910: 099b lsrs r3, r3, #6
  12308. 8005912: 4a87 ldr r2, [pc, #540] @ (8005b30 <HAL_ADC_Init+0x294>)
  12309. 8005914: fba2 2303 umull r2, r3, r2, r3
  12310. 8005918: 099b lsrs r3, r3, #6
  12311. 800591a: 3301 adds r3, #1
  12312. 800591c: 60bb str r3, [r7, #8]
  12313. while (wait_loop_index != 0UL)
  12314. 800591e: e002 b.n 8005926 <HAL_ADC_Init+0x8a>
  12315. {
  12316. wait_loop_index--;
  12317. 8005920: 68bb ldr r3, [r7, #8]
  12318. 8005922: 3b01 subs r3, #1
  12319. 8005924: 60bb str r3, [r7, #8]
  12320. while (wait_loop_index != 0UL)
  12321. 8005926: 68bb ldr r3, [r7, #8]
  12322. 8005928: 2b00 cmp r3, #0
  12323. 800592a: d1f9 bne.n 8005920 <HAL_ADC_Init+0x84>
  12324. }
  12325. /* Verification that ADC voltage regulator is correctly enabled, whether */
  12326. /* or not ADC is coming from state reset (if any potential problem of */
  12327. /* clocking, voltage regulator would not be enabled). */
  12328. if (LL_ADC_IsInternalRegulatorEnabled(hadc->Instance) == 0UL)
  12329. 800592c: 687b ldr r3, [r7, #4]
  12330. 800592e: 681b ldr r3, [r3, #0]
  12331. 8005930: 4618 mov r0, r3
  12332. 8005932: f7ff ff17 bl 8005764 <LL_ADC_IsInternalRegulatorEnabled>
  12333. 8005936: 4603 mov r3, r0
  12334. 8005938: 2b00 cmp r3, #0
  12335. 800593a: d10d bne.n 8005958 <HAL_ADC_Init+0xbc>
  12336. {
  12337. /* Update ADC state machine to error */
  12338. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
  12339. 800593c: 687b ldr r3, [r7, #4]
  12340. 800593e: 6d5b ldr r3, [r3, #84] @ 0x54
  12341. 8005940: f043 0210 orr.w r2, r3, #16
  12342. 8005944: 687b ldr r3, [r7, #4]
  12343. 8005946: 655a str r2, [r3, #84] @ 0x54
  12344. /* Set ADC error code to ADC peripheral internal error */
  12345. SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);
  12346. 8005948: 687b ldr r3, [r7, #4]
  12347. 800594a: 6d9b ldr r3, [r3, #88] @ 0x58
  12348. 800594c: f043 0201 orr.w r2, r3, #1
  12349. 8005950: 687b ldr r3, [r7, #4]
  12350. 8005952: 659a str r2, [r3, #88] @ 0x58
  12351. tmp_hal_status = HAL_ERROR;
  12352. 8005954: 2301 movs r3, #1
  12353. 8005956: 77fb strb r3, [r7, #31]
  12354. /* Configuration of ADC parameters if previous preliminary actions are */
  12355. /* correctly completed and if there is no conversion on going on regular */
  12356. /* group (ADC may already be enabled at this point if HAL_ADC_Init() is */
  12357. /* called to update a parameter on the fly). */
  12358. tmp_adc_reg_is_conversion_on_going = LL_ADC_REG_IsConversionOngoing(hadc->Instance);
  12359. 8005958: 687b ldr r3, [r7, #4]
  12360. 800595a: 681b ldr r3, [r3, #0]
  12361. 800595c: 4618 mov r0, r3
  12362. 800595e: f7ff ff77 bl 8005850 <LL_ADC_REG_IsConversionOngoing>
  12363. 8005962: 6178 str r0, [r7, #20]
  12364. if (((hadc->State & HAL_ADC_STATE_ERROR_INTERNAL) == 0UL)
  12365. 8005964: 687b ldr r3, [r7, #4]
  12366. 8005966: 6d5b ldr r3, [r3, #84] @ 0x54
  12367. 8005968: f003 0310 and.w r3, r3, #16
  12368. 800596c: 2b00 cmp r3, #0
  12369. 800596e: f040 8129 bne.w 8005bc4 <HAL_ADC_Init+0x328>
  12370. && (tmp_adc_reg_is_conversion_on_going == 0UL)
  12371. 8005972: 697b ldr r3, [r7, #20]
  12372. 8005974: 2b00 cmp r3, #0
  12373. 8005976: f040 8125 bne.w 8005bc4 <HAL_ADC_Init+0x328>
  12374. )
  12375. {
  12376. /* Set ADC state */
  12377. ADC_STATE_CLR_SET(hadc->State,
  12378. 800597a: 687b ldr r3, [r7, #4]
  12379. 800597c: 6d5b ldr r3, [r3, #84] @ 0x54
  12380. 800597e: f423 7381 bic.w r3, r3, #258 @ 0x102
  12381. 8005982: f043 0202 orr.w r2, r3, #2
  12382. 8005986: 687b ldr r3, [r7, #4]
  12383. 8005988: 655a str r2, [r3, #84] @ 0x54
  12384. /* Configuration of common ADC parameters */
  12385. /* Parameters update conditioned to ADC state: */
  12386. /* Parameters that can be updated only when ADC is disabled: */
  12387. /* - clock configuration */
  12388. if (LL_ADC_IsEnabled(hadc->Instance) == 0UL)
  12389. 800598a: 687b ldr r3, [r7, #4]
  12390. 800598c: 681b ldr r3, [r3, #0]
  12391. 800598e: 4618 mov r0, r3
  12392. 8005990: f7ff ff24 bl 80057dc <LL_ADC_IsEnabled>
  12393. 8005994: 4603 mov r3, r0
  12394. 8005996: 2b00 cmp r3, #0
  12395. 8005998: d136 bne.n 8005a08 <HAL_ADC_Init+0x16c>
  12396. {
  12397. if (__LL_ADC_IS_ENABLED_ALL_COMMON_INSTANCE(__LL_ADC_COMMON_INSTANCE(hadc->Instance)) == 0UL)
  12398. 800599a: 687b ldr r3, [r7, #4]
  12399. 800599c: 681b ldr r3, [r3, #0]
  12400. 800599e: 4a65 ldr r2, [pc, #404] @ (8005b34 <HAL_ADC_Init+0x298>)
  12401. 80059a0: 4293 cmp r3, r2
  12402. 80059a2: d004 beq.n 80059ae <HAL_ADC_Init+0x112>
  12403. 80059a4: 687b ldr r3, [r7, #4]
  12404. 80059a6: 681b ldr r3, [r3, #0]
  12405. 80059a8: 4a63 ldr r2, [pc, #396] @ (8005b38 <HAL_ADC_Init+0x29c>)
  12406. 80059aa: 4293 cmp r3, r2
  12407. 80059ac: d10e bne.n 80059cc <HAL_ADC_Init+0x130>
  12408. 80059ae: 4861 ldr r0, [pc, #388] @ (8005b34 <HAL_ADC_Init+0x298>)
  12409. 80059b0: f7ff ff14 bl 80057dc <LL_ADC_IsEnabled>
  12410. 80059b4: 4604 mov r4, r0
  12411. 80059b6: 4860 ldr r0, [pc, #384] @ (8005b38 <HAL_ADC_Init+0x29c>)
  12412. 80059b8: f7ff ff10 bl 80057dc <LL_ADC_IsEnabled>
  12413. 80059bc: 4603 mov r3, r0
  12414. 80059be: 4323 orrs r3, r4
  12415. 80059c0: 2b00 cmp r3, #0
  12416. 80059c2: bf0c ite eq
  12417. 80059c4: 2301 moveq r3, #1
  12418. 80059c6: 2300 movne r3, #0
  12419. 80059c8: b2db uxtb r3, r3
  12420. 80059ca: e008 b.n 80059de <HAL_ADC_Init+0x142>
  12421. 80059cc: 485b ldr r0, [pc, #364] @ (8005b3c <HAL_ADC_Init+0x2a0>)
  12422. 80059ce: f7ff ff05 bl 80057dc <LL_ADC_IsEnabled>
  12423. 80059d2: 4603 mov r3, r0
  12424. 80059d4: 2b00 cmp r3, #0
  12425. 80059d6: bf0c ite eq
  12426. 80059d8: 2301 moveq r3, #1
  12427. 80059da: 2300 movne r3, #0
  12428. 80059dc: b2db uxtb r3, r3
  12429. 80059de: 2b00 cmp r3, #0
  12430. 80059e0: d012 beq.n 8005a08 <HAL_ADC_Init+0x16c>
  12431. /* parameters: MDMA, DMACFG, DELAY, DUAL (set by API */
  12432. /* HAL_ADCEx_MultiModeConfigChannel() ) */
  12433. /* - internal measurement paths: Vbat, temperature sensor, Vref */
  12434. /* (set into HAL_ADC_ConfigChannel() or */
  12435. /* HAL_ADCEx_InjectedConfigChannel() ) */
  12436. LL_ADC_SetCommonClock(__LL_ADC_COMMON_INSTANCE(hadc->Instance), hadc->Init.ClockPrescaler);
  12437. 80059e2: 687b ldr r3, [r7, #4]
  12438. 80059e4: 681b ldr r3, [r3, #0]
  12439. 80059e6: 4a53 ldr r2, [pc, #332] @ (8005b34 <HAL_ADC_Init+0x298>)
  12440. 80059e8: 4293 cmp r3, r2
  12441. 80059ea: d004 beq.n 80059f6 <HAL_ADC_Init+0x15a>
  12442. 80059ec: 687b ldr r3, [r7, #4]
  12443. 80059ee: 681b ldr r3, [r3, #0]
  12444. 80059f0: 4a51 ldr r2, [pc, #324] @ (8005b38 <HAL_ADC_Init+0x29c>)
  12445. 80059f2: 4293 cmp r3, r2
  12446. 80059f4: d101 bne.n 80059fa <HAL_ADC_Init+0x15e>
  12447. 80059f6: 4a52 ldr r2, [pc, #328] @ (8005b40 <HAL_ADC_Init+0x2a4>)
  12448. 80059f8: e000 b.n 80059fc <HAL_ADC_Init+0x160>
  12449. 80059fa: 4a52 ldr r2, [pc, #328] @ (8005b44 <HAL_ADC_Init+0x2a8>)
  12450. 80059fc: 687b ldr r3, [r7, #4]
  12451. 80059fe: 685b ldr r3, [r3, #4]
  12452. 8005a00: 4619 mov r1, r3
  12453. 8005a02: 4610 mov r0, r2
  12454. 8005a04: f7ff fd3c bl 8005480 <LL_ADC_SetCommonClock>
  12455. ADC_CFGR_REG_DISCONTINUOUS((uint32_t)hadc->Init.DiscontinuousConvMode));
  12456. }
  12457. #else
  12458. if ((HAL_GetREVID() > REV_ID_Y) && (ADC_RESOLUTION_8B == hadc->Init.Resolution))
  12459. 8005a08: f7ff fcf4 bl 80053f4 <HAL_GetREVID>
  12460. 8005a0c: 4603 mov r3, r0
  12461. 8005a0e: f241 0203 movw r2, #4099 @ 0x1003
  12462. 8005a12: 4293 cmp r3, r2
  12463. 8005a14: d914 bls.n 8005a40 <HAL_ADC_Init+0x1a4>
  12464. 8005a16: 687b ldr r3, [r7, #4]
  12465. 8005a18: 689b ldr r3, [r3, #8]
  12466. 8005a1a: 2b10 cmp r3, #16
  12467. 8005a1c: d110 bne.n 8005a40 <HAL_ADC_Init+0x1a4>
  12468. {
  12469. /* for STM32H7 silicon rev.B and above , ADC_CFGR_RES value for 8bits resolution is : b111 */
  12470. tmpCFGR = (ADC_CFGR_CONTINUOUS((uint32_t)hadc->Init.ContinuousConvMode) |
  12471. 8005a1e: 687b ldr r3, [r7, #4]
  12472. 8005a20: 7d5b ldrb r3, [r3, #21]
  12473. 8005a22: 035a lsls r2, r3, #13
  12474. hadc->Init.Overrun |
  12475. 8005a24: 687b ldr r3, [r7, #4]
  12476. 8005a26: 6b1b ldr r3, [r3, #48] @ 0x30
  12477. tmpCFGR = (ADC_CFGR_CONTINUOUS((uint32_t)hadc->Init.ContinuousConvMode) |
  12478. 8005a28: 431a orrs r2, r3
  12479. hadc->Init.Resolution | (ADC_CFGR_RES_1 | ADC_CFGR_RES_0) |
  12480. 8005a2a: 687b ldr r3, [r7, #4]
  12481. 8005a2c: 689b ldr r3, [r3, #8]
  12482. hadc->Init.Overrun |
  12483. 8005a2e: 431a orrs r2, r3
  12484. ADC_CFGR_REG_DISCONTINUOUS((uint32_t)hadc->Init.DiscontinuousConvMode));
  12485. 8005a30: 687b ldr r3, [r7, #4]
  12486. 8005a32: 7f1b ldrb r3, [r3, #28]
  12487. 8005a34: 041b lsls r3, r3, #16
  12488. hadc->Init.Resolution | (ADC_CFGR_RES_1 | ADC_CFGR_RES_0) |
  12489. 8005a36: 4313 orrs r3, r2
  12490. tmpCFGR = (ADC_CFGR_CONTINUOUS((uint32_t)hadc->Init.ContinuousConvMode) |
  12491. 8005a38: f043 030c orr.w r3, r3, #12
  12492. 8005a3c: 61bb str r3, [r7, #24]
  12493. 8005a3e: e00d b.n 8005a5c <HAL_ADC_Init+0x1c0>
  12494. }
  12495. else
  12496. {
  12497. tmpCFGR = (ADC_CFGR_CONTINUOUS((uint32_t)hadc->Init.ContinuousConvMode) |
  12498. 8005a40: 687b ldr r3, [r7, #4]
  12499. 8005a42: 7d5b ldrb r3, [r3, #21]
  12500. 8005a44: 035a lsls r2, r3, #13
  12501. hadc->Init.Overrun |
  12502. 8005a46: 687b ldr r3, [r7, #4]
  12503. 8005a48: 6b1b ldr r3, [r3, #48] @ 0x30
  12504. tmpCFGR = (ADC_CFGR_CONTINUOUS((uint32_t)hadc->Init.ContinuousConvMode) |
  12505. 8005a4a: 431a orrs r2, r3
  12506. hadc->Init.Resolution |
  12507. 8005a4c: 687b ldr r3, [r7, #4]
  12508. 8005a4e: 689b ldr r3, [r3, #8]
  12509. hadc->Init.Overrun |
  12510. 8005a50: 431a orrs r2, r3
  12511. ADC_CFGR_REG_DISCONTINUOUS((uint32_t)hadc->Init.DiscontinuousConvMode));
  12512. 8005a52: 687b ldr r3, [r7, #4]
  12513. 8005a54: 7f1b ldrb r3, [r3, #28]
  12514. 8005a56: 041b lsls r3, r3, #16
  12515. tmpCFGR = (ADC_CFGR_CONTINUOUS((uint32_t)hadc->Init.ContinuousConvMode) |
  12516. 8005a58: 4313 orrs r3, r2
  12517. 8005a5a: 61bb str r3, [r7, #24]
  12518. }
  12519. #endif /* ADC_VER_V5_3 */
  12520. if (hadc->Init.DiscontinuousConvMode == ENABLE)
  12521. 8005a5c: 687b ldr r3, [r7, #4]
  12522. 8005a5e: 7f1b ldrb r3, [r3, #28]
  12523. 8005a60: 2b01 cmp r3, #1
  12524. 8005a62: d106 bne.n 8005a72 <HAL_ADC_Init+0x1d6>
  12525. {
  12526. tmpCFGR |= ADC_CFGR_DISCONTINUOUS_NUM(hadc->Init.NbrOfDiscConversion);
  12527. 8005a64: 687b ldr r3, [r7, #4]
  12528. 8005a66: 6a1b ldr r3, [r3, #32]
  12529. 8005a68: 3b01 subs r3, #1
  12530. 8005a6a: 045b lsls r3, r3, #17
  12531. 8005a6c: 69ba ldr r2, [r7, #24]
  12532. 8005a6e: 4313 orrs r3, r2
  12533. 8005a70: 61bb str r3, [r7, #24]
  12534. /* Enable external trigger if trigger selection is different of software */
  12535. /* start. */
  12536. /* Note: This configuration keeps the hardware feature of parameter */
  12537. /* ExternalTrigConvEdge "trigger edge none" equivalent to */
  12538. /* software start. */
  12539. if (hadc->Init.ExternalTrigConv != ADC_SOFTWARE_START)
  12540. 8005a72: 687b ldr r3, [r7, #4]
  12541. 8005a74: 6a5b ldr r3, [r3, #36] @ 0x24
  12542. 8005a76: 2b00 cmp r3, #0
  12543. 8005a78: d009 beq.n 8005a8e <HAL_ADC_Init+0x1f2>
  12544. {
  12545. tmpCFGR |= ((hadc->Init.ExternalTrigConv & ADC_CFGR_EXTSEL)
  12546. 8005a7a: 687b ldr r3, [r7, #4]
  12547. 8005a7c: 6a5b ldr r3, [r3, #36] @ 0x24
  12548. 8005a7e: f403 7278 and.w r2, r3, #992 @ 0x3e0
  12549. | hadc->Init.ExternalTrigConvEdge
  12550. 8005a82: 687b ldr r3, [r7, #4]
  12551. 8005a84: 6a9b ldr r3, [r3, #40] @ 0x28
  12552. 8005a86: 4313 orrs r3, r2
  12553. tmpCFGR |= ((hadc->Init.ExternalTrigConv & ADC_CFGR_EXTSEL)
  12554. 8005a88: 69ba ldr r2, [r7, #24]
  12555. 8005a8a: 4313 orrs r3, r2
  12556. 8005a8c: 61bb str r3, [r7, #24]
  12557. /* Update Configuration Register CFGR */
  12558. MODIFY_REG(hadc->Instance->CFGR, ADC_CFGR_FIELDS_1, tmpCFGR);
  12559. }
  12560. #else
  12561. /* Update Configuration Register CFGR */
  12562. MODIFY_REG(hadc->Instance->CFGR, ADC_CFGR_FIELDS_1, tmpCFGR);
  12563. 8005a8e: 687b ldr r3, [r7, #4]
  12564. 8005a90: 681b ldr r3, [r3, #0]
  12565. 8005a92: 68da ldr r2, [r3, #12]
  12566. 8005a94: 4b2c ldr r3, [pc, #176] @ (8005b48 <HAL_ADC_Init+0x2ac>)
  12567. 8005a96: 4013 ands r3, r2
  12568. 8005a98: 687a ldr r2, [r7, #4]
  12569. 8005a9a: 6812 ldr r2, [r2, #0]
  12570. 8005a9c: 69b9 ldr r1, [r7, #24]
  12571. 8005a9e: 430b orrs r3, r1
  12572. 8005aa0: 60d3 str r3, [r2, #12]
  12573. /* Parameters that can be updated when ADC is disabled or enabled without */
  12574. /* conversion on going on regular and injected groups: */
  12575. /* - Conversion data management Init.ConversionDataManagement */
  12576. /* - LowPowerAutoWait feature Init.LowPowerAutoWait */
  12577. /* - Oversampling parameters Init.Oversampling */
  12578. tmp_adc_is_conversion_on_going_regular = LL_ADC_REG_IsConversionOngoing(hadc->Instance);
  12579. 8005aa2: 687b ldr r3, [r7, #4]
  12580. 8005aa4: 681b ldr r3, [r3, #0]
  12581. 8005aa6: 4618 mov r0, r3
  12582. 8005aa8: f7ff fed2 bl 8005850 <LL_ADC_REG_IsConversionOngoing>
  12583. 8005aac: 6138 str r0, [r7, #16]
  12584. tmp_adc_is_conversion_on_going_injected = LL_ADC_INJ_IsConversionOngoing(hadc->Instance);
  12585. 8005aae: 687b ldr r3, [r7, #4]
  12586. 8005ab0: 681b ldr r3, [r3, #0]
  12587. 8005ab2: 4618 mov r0, r3
  12588. 8005ab4: f7ff fedf bl 8005876 <LL_ADC_INJ_IsConversionOngoing>
  12589. 8005ab8: 60f8 str r0, [r7, #12]
  12590. if ((tmp_adc_is_conversion_on_going_regular == 0UL)
  12591. 8005aba: 693b ldr r3, [r7, #16]
  12592. 8005abc: 2b00 cmp r3, #0
  12593. 8005abe: d15f bne.n 8005b80 <HAL_ADC_Init+0x2e4>
  12594. && (tmp_adc_is_conversion_on_going_injected == 0UL)
  12595. 8005ac0: 68fb ldr r3, [r7, #12]
  12596. 8005ac2: 2b00 cmp r3, #0
  12597. 8005ac4: d15c bne.n 8005b80 <HAL_ADC_Init+0x2e4>
  12598. ADC_CFGR_AUTOWAIT((uint32_t)hadc->Init.LowPowerAutoWait) |
  12599. ADC_CFGR_DMACONTREQ((uint32_t)hadc->Init.ConversionDataManagement));
  12600. }
  12601. #else
  12602. tmpCFGR = (
  12603. ADC_CFGR_AUTOWAIT((uint32_t)hadc->Init.LowPowerAutoWait) |
  12604. 8005ac6: 687b ldr r3, [r7, #4]
  12605. 8005ac8: 7d1b ldrb r3, [r3, #20]
  12606. 8005aca: 039a lsls r2, r3, #14
  12607. ADC_CFGR_DMACONTREQ((uint32_t)hadc->Init.ConversionDataManagement));
  12608. 8005acc: 687b ldr r3, [r7, #4]
  12609. 8005ace: 6adb ldr r3, [r3, #44] @ 0x2c
  12610. tmpCFGR = (
  12611. 8005ad0: 4313 orrs r3, r2
  12612. 8005ad2: 61bb str r3, [r7, #24]
  12613. #endif
  12614. MODIFY_REG(hadc->Instance->CFGR, ADC_CFGR_FIELDS_2, tmpCFGR);
  12615. 8005ad4: 687b ldr r3, [r7, #4]
  12616. 8005ad6: 681b ldr r3, [r3, #0]
  12617. 8005ad8: 68da ldr r2, [r3, #12]
  12618. 8005ada: 4b1c ldr r3, [pc, #112] @ (8005b4c <HAL_ADC_Init+0x2b0>)
  12619. 8005adc: 4013 ands r3, r2
  12620. 8005ade: 687a ldr r2, [r7, #4]
  12621. 8005ae0: 6812 ldr r2, [r2, #0]
  12622. 8005ae2: 69b9 ldr r1, [r7, #24]
  12623. 8005ae4: 430b orrs r3, r1
  12624. 8005ae6: 60d3 str r3, [r2, #12]
  12625. if (hadc->Init.OversamplingMode == ENABLE)
  12626. 8005ae8: 687b ldr r3, [r7, #4]
  12627. 8005aea: f893 3038 ldrb.w r3, [r3, #56] @ 0x38
  12628. 8005aee: 2b01 cmp r3, #1
  12629. 8005af0: d130 bne.n 8005b54 <HAL_ADC_Init+0x2b8>
  12630. #endif
  12631. assert_param(IS_ADC_RIGHT_BIT_SHIFT(hadc->Init.Oversampling.RightBitShift));
  12632. assert_param(IS_ADC_TRIGGERED_OVERSAMPLING_MODE(hadc->Init.Oversampling.TriggeredMode));
  12633. assert_param(IS_ADC_REGOVERSAMPLING_MODE(hadc->Init.Oversampling.OversamplingStopReset));
  12634. if ((hadc->Init.ExternalTrigConv == ADC_SOFTWARE_START)
  12635. 8005af2: 687b ldr r3, [r7, #4]
  12636. 8005af4: 6a5b ldr r3, [r3, #36] @ 0x24
  12637. 8005af6: 2b00 cmp r3, #0
  12638. /* - Oversampling Ratio */
  12639. /* - Right bit shift */
  12640. /* - Left bit shift */
  12641. /* - Triggered mode */
  12642. /* - Oversampling mode (continued/resumed) */
  12643. MODIFY_REG(hadc->Instance->CFGR2, ADC_CFGR2_FIELDS,
  12644. 8005af8: 687b ldr r3, [r7, #4]
  12645. 8005afa: 681b ldr r3, [r3, #0]
  12646. 8005afc: 691a ldr r2, [r3, #16]
  12647. 8005afe: 4b14 ldr r3, [pc, #80] @ (8005b50 <HAL_ADC_Init+0x2b4>)
  12648. 8005b00: 4013 ands r3, r2
  12649. 8005b02: 687a ldr r2, [r7, #4]
  12650. 8005b04: 6bd2 ldr r2, [r2, #60] @ 0x3c
  12651. 8005b06: 3a01 subs r2, #1
  12652. 8005b08: 0411 lsls r1, r2, #16
  12653. 8005b0a: 687a ldr r2, [r7, #4]
  12654. 8005b0c: 6c12 ldr r2, [r2, #64] @ 0x40
  12655. 8005b0e: 4311 orrs r1, r2
  12656. 8005b10: 687a ldr r2, [r7, #4]
  12657. 8005b12: 6c52 ldr r2, [r2, #68] @ 0x44
  12658. 8005b14: 4311 orrs r1, r2
  12659. 8005b16: 687a ldr r2, [r7, #4]
  12660. 8005b18: 6c92 ldr r2, [r2, #72] @ 0x48
  12661. 8005b1a: 430a orrs r2, r1
  12662. 8005b1c: 431a orrs r2, r3
  12663. 8005b1e: 687b ldr r3, [r7, #4]
  12664. 8005b20: 681b ldr r3, [r3, #0]
  12665. 8005b22: f042 0201 orr.w r2, r2, #1
  12666. 8005b26: 611a str r2, [r3, #16]
  12667. 8005b28: e01c b.n 8005b64 <HAL_ADC_Init+0x2c8>
  12668. 8005b2a: bf00 nop
  12669. 8005b2c: 24000034 .word 0x24000034
  12670. 8005b30: 053e2d63 .word 0x053e2d63
  12671. 8005b34: 40022000 .word 0x40022000
  12672. 8005b38: 40022100 .word 0x40022100
  12673. 8005b3c: 58026000 .word 0x58026000
  12674. 8005b40: 40022300 .word 0x40022300
  12675. 8005b44: 58026300 .word 0x58026300
  12676. 8005b48: fff0c003 .word 0xfff0c003
  12677. 8005b4c: ffffbffc .word 0xffffbffc
  12678. 8005b50: fc00f81e .word 0xfc00f81e
  12679. }
  12680. else
  12681. {
  12682. /* Disable ADC oversampling scope on ADC group regular */
  12683. CLEAR_BIT(hadc->Instance->CFGR2, ADC_CFGR2_ROVSE);
  12684. 8005b54: 687b ldr r3, [r7, #4]
  12685. 8005b56: 681b ldr r3, [r3, #0]
  12686. 8005b58: 691a ldr r2, [r3, #16]
  12687. 8005b5a: 687b ldr r3, [r7, #4]
  12688. 8005b5c: 681b ldr r3, [r3, #0]
  12689. 8005b5e: f022 0201 bic.w r2, r2, #1
  12690. 8005b62: 611a str r2, [r3, #16]
  12691. }
  12692. /* Set the LeftShift parameter: it is applied to the final result with or without oversampling */
  12693. MODIFY_REG(hadc->Instance->CFGR2, ADC_CFGR2_LSHIFT, hadc->Init.LeftBitShift);
  12694. 8005b64: 687b ldr r3, [r7, #4]
  12695. 8005b66: 681b ldr r3, [r3, #0]
  12696. 8005b68: 691b ldr r3, [r3, #16]
  12697. 8005b6a: f023 4170 bic.w r1, r3, #4026531840 @ 0xf0000000
  12698. 8005b6e: 687b ldr r3, [r7, #4]
  12699. 8005b70: 6b5a ldr r2, [r3, #52] @ 0x34
  12700. 8005b72: 687b ldr r3, [r7, #4]
  12701. 8005b74: 681b ldr r3, [r3, #0]
  12702. 8005b76: 430a orrs r2, r1
  12703. 8005b78: 611a str r2, [r3, #16]
  12704. /* Configure the BOOST Mode */
  12705. ADC_ConfigureBoostMode(hadc);
  12706. }
  12707. #else
  12708. /* Configure the BOOST Mode */
  12709. ADC_ConfigureBoostMode(hadc);
  12710. 8005b7a: 6878 ldr r0, [r7, #4]
  12711. 8005b7c: f000 fde2 bl 8006744 <ADC_ConfigureBoostMode>
  12712. /* Note: Scan mode is not present by hardware on this device, but */
  12713. /* emulated by software for alignment over all STM32 devices. */
  12714. /* - if scan mode is enabled, regular channels sequence length is set to */
  12715. /* parameter "NbrOfConversion". */
  12716. if (hadc->Init.ScanConvMode == ADC_SCAN_ENABLE)
  12717. 8005b80: 687b ldr r3, [r7, #4]
  12718. 8005b82: 68db ldr r3, [r3, #12]
  12719. 8005b84: 2b01 cmp r3, #1
  12720. 8005b86: d10c bne.n 8005ba2 <HAL_ADC_Init+0x306>
  12721. {
  12722. /* Set number of ranks in regular group sequencer */
  12723. MODIFY_REG(hadc->Instance->SQR1, ADC_SQR1_L, (hadc->Init.NbrOfConversion - (uint8_t)1));
  12724. 8005b88: 687b ldr r3, [r7, #4]
  12725. 8005b8a: 681b ldr r3, [r3, #0]
  12726. 8005b8c: 6b1b ldr r3, [r3, #48] @ 0x30
  12727. 8005b8e: f023 010f bic.w r1, r3, #15
  12728. 8005b92: 687b ldr r3, [r7, #4]
  12729. 8005b94: 699b ldr r3, [r3, #24]
  12730. 8005b96: 1e5a subs r2, r3, #1
  12731. 8005b98: 687b ldr r3, [r7, #4]
  12732. 8005b9a: 681b ldr r3, [r3, #0]
  12733. 8005b9c: 430a orrs r2, r1
  12734. 8005b9e: 631a str r2, [r3, #48] @ 0x30
  12735. 8005ba0: e007 b.n 8005bb2 <HAL_ADC_Init+0x316>
  12736. }
  12737. else
  12738. {
  12739. CLEAR_BIT(hadc->Instance->SQR1, ADC_SQR1_L);
  12740. 8005ba2: 687b ldr r3, [r7, #4]
  12741. 8005ba4: 681b ldr r3, [r3, #0]
  12742. 8005ba6: 6b1a ldr r2, [r3, #48] @ 0x30
  12743. 8005ba8: 687b ldr r3, [r7, #4]
  12744. 8005baa: 681b ldr r3, [r3, #0]
  12745. 8005bac: f022 020f bic.w r2, r2, #15
  12746. 8005bb0: 631a str r2, [r3, #48] @ 0x30
  12747. }
  12748. /* Initialize the ADC state */
  12749. /* Clear HAL_ADC_STATE_BUSY_INTERNAL bit, set HAL_ADC_STATE_READY bit */
  12750. ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_BUSY_INTERNAL, HAL_ADC_STATE_READY);
  12751. 8005bb2: 687b ldr r3, [r7, #4]
  12752. 8005bb4: 6d5b ldr r3, [r3, #84] @ 0x54
  12753. 8005bb6: f023 0303 bic.w r3, r3, #3
  12754. 8005bba: f043 0201 orr.w r2, r3, #1
  12755. 8005bbe: 687b ldr r3, [r7, #4]
  12756. 8005bc0: 655a str r2, [r3, #84] @ 0x54
  12757. 8005bc2: e007 b.n 8005bd4 <HAL_ADC_Init+0x338>
  12758. }
  12759. else
  12760. {
  12761. /* Update ADC state machine to error */
  12762. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
  12763. 8005bc4: 687b ldr r3, [r7, #4]
  12764. 8005bc6: 6d5b ldr r3, [r3, #84] @ 0x54
  12765. 8005bc8: f043 0210 orr.w r2, r3, #16
  12766. 8005bcc: 687b ldr r3, [r7, #4]
  12767. 8005bce: 655a str r2, [r3, #84] @ 0x54
  12768. tmp_hal_status = HAL_ERROR;
  12769. 8005bd0: 2301 movs r3, #1
  12770. 8005bd2: 77fb strb r3, [r7, #31]
  12771. }
  12772. /* Return function status */
  12773. return tmp_hal_status;
  12774. 8005bd4: 7ffb ldrb r3, [r7, #31]
  12775. }
  12776. 8005bd6: 4618 mov r0, r3
  12777. 8005bd8: 3724 adds r7, #36 @ 0x24
  12778. 8005bda: 46bd mov sp, r7
  12779. 8005bdc: bd90 pop {r4, r7, pc}
  12780. 8005bde: bf00 nop
  12781. 08005be0 <HAL_ADC_Start_DMA>:
  12782. * @param pData Destination Buffer address.
  12783. * @param Length Number of data to be transferred from ADC peripheral to memory
  12784. * @retval HAL status.
  12785. */
  12786. HAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef *hadc, uint32_t *pData, uint32_t Length)
  12787. {
  12788. 8005be0: b580 push {r7, lr}
  12789. 8005be2: b086 sub sp, #24
  12790. 8005be4: af00 add r7, sp, #0
  12791. 8005be6: 60f8 str r0, [r7, #12]
  12792. 8005be8: 60b9 str r1, [r7, #8]
  12793. 8005bea: 607a str r2, [r7, #4]
  12794. HAL_StatusTypeDef tmp_hal_status;
  12795. uint32_t tmp_multimode_config = LL_ADC_GetMultimode(__LL_ADC_COMMON_INSTANCE(hadc->Instance));
  12796. 8005bec: 68fb ldr r3, [r7, #12]
  12797. 8005bee: 681b ldr r3, [r3, #0]
  12798. 8005bf0: 4a55 ldr r2, [pc, #340] @ (8005d48 <HAL_ADC_Start_DMA+0x168>)
  12799. 8005bf2: 4293 cmp r3, r2
  12800. 8005bf4: d004 beq.n 8005c00 <HAL_ADC_Start_DMA+0x20>
  12801. 8005bf6: 68fb ldr r3, [r7, #12]
  12802. 8005bf8: 681b ldr r3, [r3, #0]
  12803. 8005bfa: 4a54 ldr r2, [pc, #336] @ (8005d4c <HAL_ADC_Start_DMA+0x16c>)
  12804. 8005bfc: 4293 cmp r3, r2
  12805. 8005bfe: d101 bne.n 8005c04 <HAL_ADC_Start_DMA+0x24>
  12806. 8005c00: 4b53 ldr r3, [pc, #332] @ (8005d50 <HAL_ADC_Start_DMA+0x170>)
  12807. 8005c02: e000 b.n 8005c06 <HAL_ADC_Start_DMA+0x26>
  12808. 8005c04: 4b53 ldr r3, [pc, #332] @ (8005d54 <HAL_ADC_Start_DMA+0x174>)
  12809. 8005c06: 4618 mov r0, r3
  12810. 8005c08: f7ff fd64 bl 80056d4 <LL_ADC_GetMultimode>
  12811. 8005c0c: 6138 str r0, [r7, #16]
  12812. /* Check the parameters */
  12813. assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
  12814. /* Perform ADC enable and conversion start if no conversion is on going */
  12815. if (LL_ADC_REG_IsConversionOngoing(hadc->Instance) == 0UL)
  12816. 8005c0e: 68fb ldr r3, [r7, #12]
  12817. 8005c10: 681b ldr r3, [r3, #0]
  12818. 8005c12: 4618 mov r0, r3
  12819. 8005c14: f7ff fe1c bl 8005850 <LL_ADC_REG_IsConversionOngoing>
  12820. 8005c18: 4603 mov r3, r0
  12821. 8005c1a: 2b00 cmp r3, #0
  12822. 8005c1c: f040 808c bne.w 8005d38 <HAL_ADC_Start_DMA+0x158>
  12823. {
  12824. /* Process locked */
  12825. __HAL_LOCK(hadc);
  12826. 8005c20: 68fb ldr r3, [r7, #12]
  12827. 8005c22: f893 3050 ldrb.w r3, [r3, #80] @ 0x50
  12828. 8005c26: 2b01 cmp r3, #1
  12829. 8005c28: d101 bne.n 8005c2e <HAL_ADC_Start_DMA+0x4e>
  12830. 8005c2a: 2302 movs r3, #2
  12831. 8005c2c: e087 b.n 8005d3e <HAL_ADC_Start_DMA+0x15e>
  12832. 8005c2e: 68fb ldr r3, [r7, #12]
  12833. 8005c30: 2201 movs r2, #1
  12834. 8005c32: f883 2050 strb.w r2, [r3, #80] @ 0x50
  12835. /* Ensure that multimode regular conversions are not enabled. */
  12836. /* Otherwise, dedicated API HAL_ADCEx_MultiModeStart_DMA() must be used. */
  12837. if ((tmp_multimode_config == LL_ADC_MULTI_INDEPENDENT)
  12838. 8005c36: 693b ldr r3, [r7, #16]
  12839. 8005c38: 2b00 cmp r3, #0
  12840. 8005c3a: d005 beq.n 8005c48 <HAL_ADC_Start_DMA+0x68>
  12841. || (tmp_multimode_config == LL_ADC_MULTI_DUAL_INJ_SIMULT)
  12842. 8005c3c: 693b ldr r3, [r7, #16]
  12843. 8005c3e: 2b05 cmp r3, #5
  12844. 8005c40: d002 beq.n 8005c48 <HAL_ADC_Start_DMA+0x68>
  12845. || (tmp_multimode_config == LL_ADC_MULTI_DUAL_INJ_ALTERN)
  12846. 8005c42: 693b ldr r3, [r7, #16]
  12847. 8005c44: 2b09 cmp r3, #9
  12848. 8005c46: d170 bne.n 8005d2a <HAL_ADC_Start_DMA+0x14a>
  12849. )
  12850. {
  12851. /* Enable the ADC peripheral */
  12852. tmp_hal_status = ADC_Enable(hadc);
  12853. 8005c48: 68f8 ldr r0, [r7, #12]
  12854. 8005c4a: f000 fbfd bl 8006448 <ADC_Enable>
  12855. 8005c4e: 4603 mov r3, r0
  12856. 8005c50: 75fb strb r3, [r7, #23]
  12857. /* Start conversion if ADC is effectively enabled */
  12858. if (tmp_hal_status == HAL_OK)
  12859. 8005c52: 7dfb ldrb r3, [r7, #23]
  12860. 8005c54: 2b00 cmp r3, #0
  12861. 8005c56: d163 bne.n 8005d20 <HAL_ADC_Start_DMA+0x140>
  12862. {
  12863. /* Set ADC state */
  12864. /* - Clear state bitfield related to regular group conversion results */
  12865. /* - Set state bitfield related to regular operation */
  12866. ADC_STATE_CLR_SET(hadc->State,
  12867. 8005c58: 68fb ldr r3, [r7, #12]
  12868. 8005c5a: 6d5a ldr r2, [r3, #84] @ 0x54
  12869. 8005c5c: 4b3e ldr r3, [pc, #248] @ (8005d58 <HAL_ADC_Start_DMA+0x178>)
  12870. 8005c5e: 4013 ands r3, r2
  12871. 8005c60: f443 7280 orr.w r2, r3, #256 @ 0x100
  12872. 8005c64: 68fb ldr r3, [r7, #12]
  12873. 8005c66: 655a str r2, [r3, #84] @ 0x54
  12874. HAL_ADC_STATE_REG_BUSY);
  12875. /* Reset HAL_ADC_STATE_MULTIMODE_SLAVE bit
  12876. - if ADC instance is master or if multimode feature is not available
  12877. - if multimode setting is disabled (ADC instance slave in independent mode) */
  12878. if ((__LL_ADC_MULTI_INSTANCE_MASTER(hadc->Instance) == hadc->Instance)
  12879. 8005c68: 68fb ldr r3, [r7, #12]
  12880. 8005c6a: 681b ldr r3, [r3, #0]
  12881. 8005c6c: 4a37 ldr r2, [pc, #220] @ (8005d4c <HAL_ADC_Start_DMA+0x16c>)
  12882. 8005c6e: 4293 cmp r3, r2
  12883. 8005c70: d002 beq.n 8005c78 <HAL_ADC_Start_DMA+0x98>
  12884. 8005c72: 68fb ldr r3, [r7, #12]
  12885. 8005c74: 681b ldr r3, [r3, #0]
  12886. 8005c76: e000 b.n 8005c7a <HAL_ADC_Start_DMA+0x9a>
  12887. 8005c78: 4b33 ldr r3, [pc, #204] @ (8005d48 <HAL_ADC_Start_DMA+0x168>)
  12888. 8005c7a: 68fa ldr r2, [r7, #12]
  12889. 8005c7c: 6812 ldr r2, [r2, #0]
  12890. 8005c7e: 4293 cmp r3, r2
  12891. 8005c80: d002 beq.n 8005c88 <HAL_ADC_Start_DMA+0xa8>
  12892. || (tmp_multimode_config == LL_ADC_MULTI_INDEPENDENT)
  12893. 8005c82: 693b ldr r3, [r7, #16]
  12894. 8005c84: 2b00 cmp r3, #0
  12895. 8005c86: d105 bne.n 8005c94 <HAL_ADC_Start_DMA+0xb4>
  12896. )
  12897. {
  12898. CLEAR_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);
  12899. 8005c88: 68fb ldr r3, [r7, #12]
  12900. 8005c8a: 6d5b ldr r3, [r3, #84] @ 0x54
  12901. 8005c8c: f423 1280 bic.w r2, r3, #1048576 @ 0x100000
  12902. 8005c90: 68fb ldr r3, [r7, #12]
  12903. 8005c92: 655a str r2, [r3, #84] @ 0x54
  12904. }
  12905. /* Check if a conversion is on going on ADC group injected */
  12906. if ((hadc->State & HAL_ADC_STATE_INJ_BUSY) != 0UL)
  12907. 8005c94: 68fb ldr r3, [r7, #12]
  12908. 8005c96: 6d5b ldr r3, [r3, #84] @ 0x54
  12909. 8005c98: f403 5380 and.w r3, r3, #4096 @ 0x1000
  12910. 8005c9c: 2b00 cmp r3, #0
  12911. 8005c9e: d006 beq.n 8005cae <HAL_ADC_Start_DMA+0xce>
  12912. {
  12913. /* Reset ADC error code fields related to regular conversions only */
  12914. CLEAR_BIT(hadc->ErrorCode, (HAL_ADC_ERROR_OVR | HAL_ADC_ERROR_DMA));
  12915. 8005ca0: 68fb ldr r3, [r7, #12]
  12916. 8005ca2: 6d9b ldr r3, [r3, #88] @ 0x58
  12917. 8005ca4: f023 0206 bic.w r2, r3, #6
  12918. 8005ca8: 68fb ldr r3, [r7, #12]
  12919. 8005caa: 659a str r2, [r3, #88] @ 0x58
  12920. 8005cac: e002 b.n 8005cb4 <HAL_ADC_Start_DMA+0xd4>
  12921. }
  12922. else
  12923. {
  12924. /* Reset all ADC error code fields */
  12925. ADC_CLEAR_ERRORCODE(hadc);
  12926. 8005cae: 68fb ldr r3, [r7, #12]
  12927. 8005cb0: 2200 movs r2, #0
  12928. 8005cb2: 659a str r2, [r3, #88] @ 0x58
  12929. }
  12930. /* Set the DMA transfer complete callback */
  12931. hadc->DMA_Handle->XferCpltCallback = ADC_DMAConvCplt;
  12932. 8005cb4: 68fb ldr r3, [r7, #12]
  12933. 8005cb6: 6cdb ldr r3, [r3, #76] @ 0x4c
  12934. 8005cb8: 4a28 ldr r2, [pc, #160] @ (8005d5c <HAL_ADC_Start_DMA+0x17c>)
  12935. 8005cba: 63da str r2, [r3, #60] @ 0x3c
  12936. /* Set the DMA half transfer complete callback */
  12937. hadc->DMA_Handle->XferHalfCpltCallback = ADC_DMAHalfConvCplt;
  12938. 8005cbc: 68fb ldr r3, [r7, #12]
  12939. 8005cbe: 6cdb ldr r3, [r3, #76] @ 0x4c
  12940. 8005cc0: 4a27 ldr r2, [pc, #156] @ (8005d60 <HAL_ADC_Start_DMA+0x180>)
  12941. 8005cc2: 641a str r2, [r3, #64] @ 0x40
  12942. /* Set the DMA error callback */
  12943. hadc->DMA_Handle->XferErrorCallback = ADC_DMAError;
  12944. 8005cc4: 68fb ldr r3, [r7, #12]
  12945. 8005cc6: 6cdb ldr r3, [r3, #76] @ 0x4c
  12946. 8005cc8: 4a26 ldr r2, [pc, #152] @ (8005d64 <HAL_ADC_Start_DMA+0x184>)
  12947. 8005cca: 64da str r2, [r3, #76] @ 0x4c
  12948. /* ADC start (in case of SW start): */
  12949. /* Clear regular group conversion flag and overrun flag */
  12950. /* (To ensure of no unknown state from potential previous ADC */
  12951. /* operations) */
  12952. __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_EOC | ADC_FLAG_EOS | ADC_FLAG_OVR));
  12953. 8005ccc: 68fb ldr r3, [r7, #12]
  12954. 8005cce: 681b ldr r3, [r3, #0]
  12955. 8005cd0: 221c movs r2, #28
  12956. 8005cd2: 601a str r2, [r3, #0]
  12957. /* Process unlocked */
  12958. /* Unlock before starting ADC conversions: in case of potential */
  12959. /* interruption, to let the process to ADC IRQ Handler. */
  12960. __HAL_UNLOCK(hadc);
  12961. 8005cd4: 68fb ldr r3, [r7, #12]
  12962. 8005cd6: 2200 movs r2, #0
  12963. 8005cd8: f883 2050 strb.w r2, [r3, #80] @ 0x50
  12964. /* With DMA, overrun event is always considered as an error even if
  12965. hadc->Init.Overrun is set to ADC_OVR_DATA_OVERWRITTEN. Therefore,
  12966. ADC_IT_OVR is enabled. */
  12967. __HAL_ADC_ENABLE_IT(hadc, ADC_IT_OVR);
  12968. 8005cdc: 68fb ldr r3, [r7, #12]
  12969. 8005cde: 681b ldr r3, [r3, #0]
  12970. 8005ce0: 685a ldr r2, [r3, #4]
  12971. 8005ce2: 68fb ldr r3, [r7, #12]
  12972. 8005ce4: 681b ldr r3, [r3, #0]
  12973. 8005ce6: f042 0210 orr.w r2, r2, #16
  12974. 8005cea: 605a str r2, [r3, #4]
  12975. {
  12976. LL_ADC_REG_SetDataTransferMode(hadc->Instance, ADC_CFGR_DMACONTREQ((uint32_t)hadc->Init.ConversionDataManagement));
  12977. }
  12978. #else
  12979. LL_ADC_REG_SetDataTransferMode(hadc->Instance, (uint32_t)hadc->Init.ConversionDataManagement);
  12980. 8005cec: 68fb ldr r3, [r7, #12]
  12981. 8005cee: 681a ldr r2, [r3, #0]
  12982. 8005cf0: 68fb ldr r3, [r7, #12]
  12983. 8005cf2: 6adb ldr r3, [r3, #44] @ 0x2c
  12984. 8005cf4: 4619 mov r1, r3
  12985. 8005cf6: 4610 mov r0, r2
  12986. 8005cf8: f7ff fc89 bl 800560e <LL_ADC_REG_SetDataTransferMode>
  12987. #endif
  12988. /* Start the DMA channel */
  12989. tmp_hal_status = HAL_DMA_Start_IT(hadc->DMA_Handle, (uint32_t)&hadc->Instance->DR, (uint32_t)pData, Length);
  12990. 8005cfc: 68fb ldr r3, [r7, #12]
  12991. 8005cfe: 6cd8 ldr r0, [r3, #76] @ 0x4c
  12992. 8005d00: 68fb ldr r3, [r7, #12]
  12993. 8005d02: 681b ldr r3, [r3, #0]
  12994. 8005d04: 3340 adds r3, #64 @ 0x40
  12995. 8005d06: 4619 mov r1, r3
  12996. 8005d08: 68ba ldr r2, [r7, #8]
  12997. 8005d0a: 687b ldr r3, [r7, #4]
  12998. 8005d0c: f002 fa5e bl 80081cc <HAL_DMA_Start_IT>
  12999. 8005d10: 4603 mov r3, r0
  13000. 8005d12: 75fb strb r3, [r7, #23]
  13001. /* Enable conversion of regular group. */
  13002. /* If software start has been selected, conversion starts immediately. */
  13003. /* If external trigger has been selected, conversion will start at next */
  13004. /* trigger event. */
  13005. /* Start ADC group regular conversion */
  13006. LL_ADC_REG_StartConversion(hadc->Instance);
  13007. 8005d14: 68fb ldr r3, [r7, #12]
  13008. 8005d16: 681b ldr r3, [r3, #0]
  13009. 8005d18: 4618 mov r0, r3
  13010. 8005d1a: f7ff fd85 bl 8005828 <LL_ADC_REG_StartConversion>
  13011. if (tmp_hal_status == HAL_OK)
  13012. 8005d1e: e00d b.n 8005d3c <HAL_ADC_Start_DMA+0x15c>
  13013. }
  13014. else
  13015. {
  13016. /* Process unlocked */
  13017. __HAL_UNLOCK(hadc);
  13018. 8005d20: 68fb ldr r3, [r7, #12]
  13019. 8005d22: 2200 movs r2, #0
  13020. 8005d24: f883 2050 strb.w r2, [r3, #80] @ 0x50
  13021. if (tmp_hal_status == HAL_OK)
  13022. 8005d28: e008 b.n 8005d3c <HAL_ADC_Start_DMA+0x15c>
  13023. }
  13024. }
  13025. else
  13026. {
  13027. tmp_hal_status = HAL_ERROR;
  13028. 8005d2a: 2301 movs r3, #1
  13029. 8005d2c: 75fb strb r3, [r7, #23]
  13030. /* Process unlocked */
  13031. __HAL_UNLOCK(hadc);
  13032. 8005d2e: 68fb ldr r3, [r7, #12]
  13033. 8005d30: 2200 movs r2, #0
  13034. 8005d32: f883 2050 strb.w r2, [r3, #80] @ 0x50
  13035. 8005d36: e001 b.n 8005d3c <HAL_ADC_Start_DMA+0x15c>
  13036. }
  13037. }
  13038. else
  13039. {
  13040. tmp_hal_status = HAL_BUSY;
  13041. 8005d38: 2302 movs r3, #2
  13042. 8005d3a: 75fb strb r3, [r7, #23]
  13043. }
  13044. /* Return function status */
  13045. return tmp_hal_status;
  13046. 8005d3c: 7dfb ldrb r3, [r7, #23]
  13047. }
  13048. 8005d3e: 4618 mov r0, r3
  13049. 8005d40: 3718 adds r7, #24
  13050. 8005d42: 46bd mov sp, r7
  13051. 8005d44: bd80 pop {r7, pc}
  13052. 8005d46: bf00 nop
  13053. 8005d48: 40022000 .word 0x40022000
  13054. 8005d4c: 40022100 .word 0x40022100
  13055. 8005d50: 40022300 .word 0x40022300
  13056. 8005d54: 58026300 .word 0x58026300
  13057. 8005d58: fffff0fe .word 0xfffff0fe
  13058. 8005d5c: 0800661b .word 0x0800661b
  13059. 8005d60: 080066f3 .word 0x080066f3
  13060. 8005d64: 0800670f .word 0x0800670f
  13061. 08005d68 <HAL_ADC_ConvHalfCpltCallback>:
  13062. * @brief Conversion DMA half-transfer callback in non-blocking mode.
  13063. * @param hadc ADC handle
  13064. * @retval None
  13065. */
  13066. __weak void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef *hadc)
  13067. {
  13068. 8005d68: b480 push {r7}
  13069. 8005d6a: b083 sub sp, #12
  13070. 8005d6c: af00 add r7, sp, #0
  13071. 8005d6e: 6078 str r0, [r7, #4]
  13072. UNUSED(hadc);
  13073. /* NOTE : This function should not be modified. When the callback is needed,
  13074. function HAL_ADC_ConvHalfCpltCallback must be implemented in the user file.
  13075. */
  13076. }
  13077. 8005d70: bf00 nop
  13078. 8005d72: 370c adds r7, #12
  13079. 8005d74: 46bd mov sp, r7
  13080. 8005d76: f85d 7b04 ldr.w r7, [sp], #4
  13081. 8005d7a: 4770 bx lr
  13082. 08005d7c <HAL_ADC_ErrorCallback>:
  13083. * (this function is also clearing overrun flag)
  13084. * @param hadc ADC handle
  13085. * @retval None
  13086. */
  13087. __weak void HAL_ADC_ErrorCallback(ADC_HandleTypeDef *hadc)
  13088. {
  13089. 8005d7c: b480 push {r7}
  13090. 8005d7e: b083 sub sp, #12
  13091. 8005d80: af00 add r7, sp, #0
  13092. 8005d82: 6078 str r0, [r7, #4]
  13093. UNUSED(hadc);
  13094. /* NOTE : This function should not be modified. When the callback is needed,
  13095. function HAL_ADC_ErrorCallback must be implemented in the user file.
  13096. */
  13097. }
  13098. 8005d84: bf00 nop
  13099. 8005d86: 370c adds r7, #12
  13100. 8005d88: 46bd mov sp, r7
  13101. 8005d8a: f85d 7b04 ldr.w r7, [sp], #4
  13102. 8005d8e: 4770 bx lr
  13103. 08005d90 <HAL_ADC_ConfigChannel>:
  13104. * @param hadc ADC handle
  13105. * @param sConfig Structure of ADC channel assigned to ADC group regular.
  13106. * @retval HAL status
  13107. */
  13108. HAL_StatusTypeDef HAL_ADC_ConfigChannel(ADC_HandleTypeDef *hadc, ADC_ChannelConfTypeDef *sConfig)
  13109. {
  13110. 8005d90: b590 push {r4, r7, lr}
  13111. 8005d92: b0a1 sub sp, #132 @ 0x84
  13112. 8005d94: af00 add r7, sp, #0
  13113. 8005d96: 6078 str r0, [r7, #4]
  13114. 8005d98: 6039 str r1, [r7, #0]
  13115. HAL_StatusTypeDef tmp_hal_status = HAL_OK;
  13116. 8005d9a: 2300 movs r3, #0
  13117. 8005d9c: f887 307f strb.w r3, [r7, #127] @ 0x7f
  13118. uint32_t tmpOffsetShifted;
  13119. uint32_t tmp_config_internal_channel;
  13120. __IO uint32_t wait_loop_index = 0;
  13121. 8005da0: 2300 movs r3, #0
  13122. 8005da2: 60bb str r3, [r7, #8]
  13123. /* if ROVSE is set, the value of the OFFSETy_EN bit in ADCx_OFRy register is
  13124. ignored (considered as reset) */
  13125. assert_param(!((sConfig->OffsetNumber != ADC_OFFSET_NONE) && (hadc->Init.OversamplingMode == ENABLE)));
  13126. /* Verification of channel number */
  13127. if (sConfig->SingleDiff != ADC_DIFFERENTIAL_ENDED)
  13128. 8005da4: 683b ldr r3, [r7, #0]
  13129. 8005da6: 68db ldr r3, [r3, #12]
  13130. 8005da8: 4a65 ldr r2, [pc, #404] @ (8005f40 <HAL_ADC_ConfigChannel+0x1b0>)
  13131. 8005daa: 4293 cmp r3, r2
  13132. }
  13133. #endif
  13134. }
  13135. /* Process locked */
  13136. __HAL_LOCK(hadc);
  13137. 8005dac: 687b ldr r3, [r7, #4]
  13138. 8005dae: f893 3050 ldrb.w r3, [r3, #80] @ 0x50
  13139. 8005db2: 2b01 cmp r3, #1
  13140. 8005db4: d101 bne.n 8005dba <HAL_ADC_ConfigChannel+0x2a>
  13141. 8005db6: 2302 movs r3, #2
  13142. 8005db8: e32e b.n 8006418 <HAL_ADC_ConfigChannel+0x688>
  13143. 8005dba: 687b ldr r3, [r7, #4]
  13144. 8005dbc: 2201 movs r2, #1
  13145. 8005dbe: f883 2050 strb.w r2, [r3, #80] @ 0x50
  13146. /* Parameters update conditioned to ADC state: */
  13147. /* Parameters that can be updated when ADC is disabled or enabled without */
  13148. /* conversion on going on regular group: */
  13149. /* - Channel number */
  13150. /* - Channel rank */
  13151. if (LL_ADC_REG_IsConversionOngoing(hadc->Instance) == 0UL)
  13152. 8005dc2: 687b ldr r3, [r7, #4]
  13153. 8005dc4: 681b ldr r3, [r3, #0]
  13154. 8005dc6: 4618 mov r0, r3
  13155. 8005dc8: f7ff fd42 bl 8005850 <LL_ADC_REG_IsConversionOngoing>
  13156. 8005dcc: 4603 mov r3, r0
  13157. 8005dce: 2b00 cmp r3, #0
  13158. 8005dd0: f040 8313 bne.w 80063fa <HAL_ADC_ConfigChannel+0x66a>
  13159. {
  13160. if (!(__LL_ADC_IS_CHANNEL_INTERNAL(sConfig->Channel)))
  13161. 8005dd4: 683b ldr r3, [r7, #0]
  13162. 8005dd6: 681b ldr r3, [r3, #0]
  13163. 8005dd8: 2b00 cmp r3, #0
  13164. 8005dda: db2c blt.n 8005e36 <HAL_ADC_ConfigChannel+0xa6>
  13165. /* ADC channels preselection */
  13166. hadc->Instance->PCSEL_RES0 |= (1UL << (__LL_ADC_CHANNEL_TO_DECIMAL_NB((uint32_t)sConfig->Channel) & 0x1FUL));
  13167. }
  13168. #else
  13169. /* ADC channels preselection */
  13170. hadc->Instance->PCSEL |= (1UL << (__LL_ADC_CHANNEL_TO_DECIMAL_NB((uint32_t)sConfig->Channel) & 0x1FUL));
  13171. 8005ddc: 683b ldr r3, [r7, #0]
  13172. 8005dde: 681b ldr r3, [r3, #0]
  13173. 8005de0: f3c3 0313 ubfx r3, r3, #0, #20
  13174. 8005de4: 2b00 cmp r3, #0
  13175. 8005de6: d108 bne.n 8005dfa <HAL_ADC_ConfigChannel+0x6a>
  13176. 8005de8: 683b ldr r3, [r7, #0]
  13177. 8005dea: 681b ldr r3, [r3, #0]
  13178. 8005dec: 0e9b lsrs r3, r3, #26
  13179. 8005dee: f003 031f and.w r3, r3, #31
  13180. 8005df2: 2201 movs r2, #1
  13181. 8005df4: fa02 f303 lsl.w r3, r2, r3
  13182. 8005df8: e016 b.n 8005e28 <HAL_ADC_ConfigChannel+0x98>
  13183. 8005dfa: 683b ldr r3, [r7, #0]
  13184. 8005dfc: 681b ldr r3, [r3, #0]
  13185. 8005dfe: 667b str r3, [r7, #100] @ 0x64
  13186. uint32_t result;
  13187. #if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \
  13188. (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \
  13189. (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) )
  13190. __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
  13191. 8005e00: 6e7b ldr r3, [r7, #100] @ 0x64
  13192. 8005e02: fa93 f3a3 rbit r3, r3
  13193. 8005e06: 663b str r3, [r7, #96] @ 0x60
  13194. result |= value & 1U;
  13195. s--;
  13196. }
  13197. result <<= s; /* shift when v's highest bits are zero */
  13198. #endif
  13199. return result;
  13200. 8005e08: 6e3b ldr r3, [r7, #96] @ 0x60
  13201. 8005e0a: 66bb str r3, [r7, #104] @ 0x68
  13202. optimisations using the logic "value was passed to __builtin_clz, so it
  13203. is non-zero".
  13204. ARM GCC 7.3 and possibly earlier will optimise this test away, leaving a
  13205. single CLZ instruction.
  13206. */
  13207. if (value == 0U)
  13208. 8005e0c: 6ebb ldr r3, [r7, #104] @ 0x68
  13209. 8005e0e: 2b00 cmp r3, #0
  13210. 8005e10: d101 bne.n 8005e16 <HAL_ADC_ConfigChannel+0x86>
  13211. {
  13212. return 32U;
  13213. 8005e12: 2320 movs r3, #32
  13214. 8005e14: e003 b.n 8005e1e <HAL_ADC_ConfigChannel+0x8e>
  13215. }
  13216. return __builtin_clz(value);
  13217. 8005e16: 6ebb ldr r3, [r7, #104] @ 0x68
  13218. 8005e18: fab3 f383 clz r3, r3
  13219. 8005e1c: b2db uxtb r3, r3
  13220. 8005e1e: f003 031f and.w r3, r3, #31
  13221. 8005e22: 2201 movs r2, #1
  13222. 8005e24: fa02 f303 lsl.w r3, r2, r3
  13223. 8005e28: 687a ldr r2, [r7, #4]
  13224. 8005e2a: 6812 ldr r2, [r2, #0]
  13225. 8005e2c: 69d1 ldr r1, [r2, #28]
  13226. 8005e2e: 687a ldr r2, [r7, #4]
  13227. 8005e30: 6812 ldr r2, [r2, #0]
  13228. 8005e32: 430b orrs r3, r1
  13229. 8005e34: 61d3 str r3, [r2, #28]
  13230. #endif /* ADC_VER_V5_V90 */
  13231. }
  13232. /* Set ADC group regular sequence: channel on the selected scan sequence rank */
  13233. LL_ADC_REG_SetSequencerRanks(hadc->Instance, sConfig->Rank, sConfig->Channel);
  13234. 8005e36: 687b ldr r3, [r7, #4]
  13235. 8005e38: 6818 ldr r0, [r3, #0]
  13236. 8005e3a: 683b ldr r3, [r7, #0]
  13237. 8005e3c: 6859 ldr r1, [r3, #4]
  13238. 8005e3e: 683b ldr r3, [r7, #0]
  13239. 8005e40: 681b ldr r3, [r3, #0]
  13240. 8005e42: 461a mov r2, r3
  13241. 8005e44: f7ff fbb7 bl 80055b6 <LL_ADC_REG_SetSequencerRanks>
  13242. /* Parameters update conditioned to ADC state: */
  13243. /* Parameters that can be updated when ADC is disabled or enabled without */
  13244. /* conversion on going on regular group: */
  13245. /* - Channel sampling time */
  13246. /* - Channel offset */
  13247. tmp_adc_is_conversion_on_going_regular = LL_ADC_REG_IsConversionOngoing(hadc->Instance);
  13248. 8005e48: 687b ldr r3, [r7, #4]
  13249. 8005e4a: 681b ldr r3, [r3, #0]
  13250. 8005e4c: 4618 mov r0, r3
  13251. 8005e4e: f7ff fcff bl 8005850 <LL_ADC_REG_IsConversionOngoing>
  13252. 8005e52: 67b8 str r0, [r7, #120] @ 0x78
  13253. tmp_adc_is_conversion_on_going_injected = LL_ADC_INJ_IsConversionOngoing(hadc->Instance);
  13254. 8005e54: 687b ldr r3, [r7, #4]
  13255. 8005e56: 681b ldr r3, [r3, #0]
  13256. 8005e58: 4618 mov r0, r3
  13257. 8005e5a: f7ff fd0c bl 8005876 <LL_ADC_INJ_IsConversionOngoing>
  13258. 8005e5e: 6778 str r0, [r7, #116] @ 0x74
  13259. if ((tmp_adc_is_conversion_on_going_regular == 0UL)
  13260. 8005e60: 6fbb ldr r3, [r7, #120] @ 0x78
  13261. 8005e62: 2b00 cmp r3, #0
  13262. 8005e64: f040 80b8 bne.w 8005fd8 <HAL_ADC_ConfigChannel+0x248>
  13263. && (tmp_adc_is_conversion_on_going_injected == 0UL)
  13264. 8005e68: 6f7b ldr r3, [r7, #116] @ 0x74
  13265. 8005e6a: 2b00 cmp r3, #0
  13266. 8005e6c: f040 80b4 bne.w 8005fd8 <HAL_ADC_ConfigChannel+0x248>
  13267. )
  13268. {
  13269. /* Set sampling time of the selected ADC channel */
  13270. LL_ADC_SetChannelSamplingTime(hadc->Instance, sConfig->Channel, sConfig->SamplingTime);
  13271. 8005e70: 687b ldr r3, [r7, #4]
  13272. 8005e72: 6818 ldr r0, [r3, #0]
  13273. 8005e74: 683b ldr r3, [r7, #0]
  13274. 8005e76: 6819 ldr r1, [r3, #0]
  13275. 8005e78: 683b ldr r3, [r7, #0]
  13276. 8005e7a: 689b ldr r3, [r3, #8]
  13277. 8005e7c: 461a mov r2, r3
  13278. 8005e7e: f7ff fbd9 bl 8005634 <LL_ADC_SetChannelSamplingTime>
  13279. tmpOffsetShifted = ADC3_OFFSET_SHIFT_RESOLUTION(hadc, (uint32_t)sConfig->Offset);
  13280. }
  13281. else
  13282. #endif /* ADC_VER_V5_V90 */
  13283. {
  13284. tmpOffsetShifted = ADC_OFFSET_SHIFT_RESOLUTION(hadc, (uint32_t)sConfig->Offset);
  13285. 8005e82: 4b30 ldr r3, [pc, #192] @ (8005f44 <HAL_ADC_ConfigChannel+0x1b4>)
  13286. 8005e84: 681b ldr r3, [r3, #0]
  13287. 8005e86: f003 4370 and.w r3, r3, #4026531840 @ 0xf0000000
  13288. 8005e8a: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  13289. 8005e8e: d10b bne.n 8005ea8 <HAL_ADC_ConfigChannel+0x118>
  13290. 8005e90: 683b ldr r3, [r7, #0]
  13291. 8005e92: 695a ldr r2, [r3, #20]
  13292. 8005e94: 687b ldr r3, [r7, #4]
  13293. 8005e96: 681b ldr r3, [r3, #0]
  13294. 8005e98: 68db ldr r3, [r3, #12]
  13295. 8005e9a: 089b lsrs r3, r3, #2
  13296. 8005e9c: f003 0307 and.w r3, r3, #7
  13297. 8005ea0: 005b lsls r3, r3, #1
  13298. 8005ea2: fa02 f303 lsl.w r3, r2, r3
  13299. 8005ea6: e01d b.n 8005ee4 <HAL_ADC_ConfigChannel+0x154>
  13300. 8005ea8: 687b ldr r3, [r7, #4]
  13301. 8005eaa: 681b ldr r3, [r3, #0]
  13302. 8005eac: 68db ldr r3, [r3, #12]
  13303. 8005eae: f003 0310 and.w r3, r3, #16
  13304. 8005eb2: 2b00 cmp r3, #0
  13305. 8005eb4: d10b bne.n 8005ece <HAL_ADC_ConfigChannel+0x13e>
  13306. 8005eb6: 683b ldr r3, [r7, #0]
  13307. 8005eb8: 695a ldr r2, [r3, #20]
  13308. 8005eba: 687b ldr r3, [r7, #4]
  13309. 8005ebc: 681b ldr r3, [r3, #0]
  13310. 8005ebe: 68db ldr r3, [r3, #12]
  13311. 8005ec0: 089b lsrs r3, r3, #2
  13312. 8005ec2: f003 0307 and.w r3, r3, #7
  13313. 8005ec6: 005b lsls r3, r3, #1
  13314. 8005ec8: fa02 f303 lsl.w r3, r2, r3
  13315. 8005ecc: e00a b.n 8005ee4 <HAL_ADC_ConfigChannel+0x154>
  13316. 8005ece: 683b ldr r3, [r7, #0]
  13317. 8005ed0: 695a ldr r2, [r3, #20]
  13318. 8005ed2: 687b ldr r3, [r7, #4]
  13319. 8005ed4: 681b ldr r3, [r3, #0]
  13320. 8005ed6: 68db ldr r3, [r3, #12]
  13321. 8005ed8: 089b lsrs r3, r3, #2
  13322. 8005eda: f003 0304 and.w r3, r3, #4
  13323. 8005ede: 005b lsls r3, r3, #1
  13324. 8005ee0: fa02 f303 lsl.w r3, r2, r3
  13325. 8005ee4: 673b str r3, [r7, #112] @ 0x70
  13326. }
  13327. if (sConfig->OffsetNumber != ADC_OFFSET_NONE)
  13328. 8005ee6: 683b ldr r3, [r7, #0]
  13329. 8005ee8: 691b ldr r3, [r3, #16]
  13330. 8005eea: 2b04 cmp r3, #4
  13331. 8005eec: d02c beq.n 8005f48 <HAL_ADC_ConfigChannel+0x1b8>
  13332. {
  13333. /* Set ADC selected offset number */
  13334. LL_ADC_SetOffset(hadc->Instance, sConfig->OffsetNumber, sConfig->Channel, tmpOffsetShifted);
  13335. 8005eee: 687b ldr r3, [r7, #4]
  13336. 8005ef0: 6818 ldr r0, [r3, #0]
  13337. 8005ef2: 683b ldr r3, [r7, #0]
  13338. 8005ef4: 6919 ldr r1, [r3, #16]
  13339. 8005ef6: 683b ldr r3, [r7, #0]
  13340. 8005ef8: 681a ldr r2, [r3, #0]
  13341. 8005efa: 6f3b ldr r3, [r7, #112] @ 0x70
  13342. 8005efc: f7ff faf4 bl 80054e8 <LL_ADC_SetOffset>
  13343. else
  13344. #endif /* ADC_VER_V5_V90 */
  13345. {
  13346. assert_param(IS_FUNCTIONAL_STATE(sConfig->OffsetSignedSaturation));
  13347. /* Set ADC selected offset signed saturation */
  13348. LL_ADC_SetOffsetSignedSaturation(hadc->Instance, sConfig->OffsetNumber, (sConfig->OffsetSignedSaturation == ENABLE) ? LL_ADC_OFFSET_SIGNED_SATURATION_ENABLE : LL_ADC_OFFSET_SIGNED_SATURATION_DISABLE);
  13349. 8005f00: 687b ldr r3, [r7, #4]
  13350. 8005f02: 6818 ldr r0, [r3, #0]
  13351. 8005f04: 683b ldr r3, [r7, #0]
  13352. 8005f06: 6919 ldr r1, [r3, #16]
  13353. 8005f08: 683b ldr r3, [r7, #0]
  13354. 8005f0a: 7e5b ldrb r3, [r3, #25]
  13355. 8005f0c: 2b01 cmp r3, #1
  13356. 8005f0e: d102 bne.n 8005f16 <HAL_ADC_ConfigChannel+0x186>
  13357. 8005f10: f04f 4300 mov.w r3, #2147483648 @ 0x80000000
  13358. 8005f14: e000 b.n 8005f18 <HAL_ADC_ConfigChannel+0x188>
  13359. 8005f16: 2300 movs r3, #0
  13360. 8005f18: 461a mov r2, r3
  13361. 8005f1a: f7ff fb1e bl 800555a <LL_ADC_SetOffsetSignedSaturation>
  13362. assert_param(IS_FUNCTIONAL_STATE(sConfig->OffsetRightShift));
  13363. /* Set ADC selected offset right shift */
  13364. LL_ADC_SetDataRightShift(hadc->Instance, sConfig->OffsetNumber, (sConfig->OffsetRightShift == ENABLE) ? LL_ADC_OFFSET_RSHIFT_ENABLE : LL_ADC_OFFSET_RSHIFT_DISABLE);
  13365. 8005f1e: 687b ldr r3, [r7, #4]
  13366. 8005f20: 6818 ldr r0, [r3, #0]
  13367. 8005f22: 683b ldr r3, [r7, #0]
  13368. 8005f24: 6919 ldr r1, [r3, #16]
  13369. 8005f26: 683b ldr r3, [r7, #0]
  13370. 8005f28: 7e1b ldrb r3, [r3, #24]
  13371. 8005f2a: 2b01 cmp r3, #1
  13372. 8005f2c: d102 bne.n 8005f34 <HAL_ADC_ConfigChannel+0x1a4>
  13373. 8005f2e: f44f 6300 mov.w r3, #2048 @ 0x800
  13374. 8005f32: e000 b.n 8005f36 <HAL_ADC_ConfigChannel+0x1a6>
  13375. 8005f34: 2300 movs r3, #0
  13376. 8005f36: 461a mov r2, r3
  13377. 8005f38: f7ff faf6 bl 8005528 <LL_ADC_SetDataRightShift>
  13378. 8005f3c: e04c b.n 8005fd8 <HAL_ADC_ConfigChannel+0x248>
  13379. 8005f3e: bf00 nop
  13380. 8005f40: 47ff0000 .word 0x47ff0000
  13381. 8005f44: 5c001000 .word 0x5c001000
  13382. }
  13383. }
  13384. else
  13385. #endif /* ADC_VER_V5_V90 */
  13386. {
  13387. if (((hadc->Instance->OFR1) & ADC_OFR1_OFFSET1_CH) == ADC_OFR_CHANNEL(sConfig->Channel))
  13388. 8005f48: 687b ldr r3, [r7, #4]
  13389. 8005f4a: 681b ldr r3, [r3, #0]
  13390. 8005f4c: 6e1b ldr r3, [r3, #96] @ 0x60
  13391. 8005f4e: f003 42f8 and.w r2, r3, #2080374784 @ 0x7c000000
  13392. 8005f52: 683b ldr r3, [r7, #0]
  13393. 8005f54: 681b ldr r3, [r3, #0]
  13394. 8005f56: 069b lsls r3, r3, #26
  13395. 8005f58: 429a cmp r2, r3
  13396. 8005f5a: d107 bne.n 8005f6c <HAL_ADC_ConfigChannel+0x1dc>
  13397. {
  13398. CLEAR_BIT(hadc->Instance->OFR1, ADC_OFR1_SSATE);
  13399. 8005f5c: 687b ldr r3, [r7, #4]
  13400. 8005f5e: 681b ldr r3, [r3, #0]
  13401. 8005f60: 6e1a ldr r2, [r3, #96] @ 0x60
  13402. 8005f62: 687b ldr r3, [r7, #4]
  13403. 8005f64: 681b ldr r3, [r3, #0]
  13404. 8005f66: f022 4200 bic.w r2, r2, #2147483648 @ 0x80000000
  13405. 8005f6a: 661a str r2, [r3, #96] @ 0x60
  13406. }
  13407. if (((hadc->Instance->OFR2) & ADC_OFR2_OFFSET2_CH) == ADC_OFR_CHANNEL(sConfig->Channel))
  13408. 8005f6c: 687b ldr r3, [r7, #4]
  13409. 8005f6e: 681b ldr r3, [r3, #0]
  13410. 8005f70: 6e5b ldr r3, [r3, #100] @ 0x64
  13411. 8005f72: f003 42f8 and.w r2, r3, #2080374784 @ 0x7c000000
  13412. 8005f76: 683b ldr r3, [r7, #0]
  13413. 8005f78: 681b ldr r3, [r3, #0]
  13414. 8005f7a: 069b lsls r3, r3, #26
  13415. 8005f7c: 429a cmp r2, r3
  13416. 8005f7e: d107 bne.n 8005f90 <HAL_ADC_ConfigChannel+0x200>
  13417. {
  13418. CLEAR_BIT(hadc->Instance->OFR2, ADC_OFR2_SSATE);
  13419. 8005f80: 687b ldr r3, [r7, #4]
  13420. 8005f82: 681b ldr r3, [r3, #0]
  13421. 8005f84: 6e5a ldr r2, [r3, #100] @ 0x64
  13422. 8005f86: 687b ldr r3, [r7, #4]
  13423. 8005f88: 681b ldr r3, [r3, #0]
  13424. 8005f8a: f022 4200 bic.w r2, r2, #2147483648 @ 0x80000000
  13425. 8005f8e: 665a str r2, [r3, #100] @ 0x64
  13426. }
  13427. if (((hadc->Instance->OFR3) & ADC_OFR3_OFFSET3_CH) == ADC_OFR_CHANNEL(sConfig->Channel))
  13428. 8005f90: 687b ldr r3, [r7, #4]
  13429. 8005f92: 681b ldr r3, [r3, #0]
  13430. 8005f94: 6e9b ldr r3, [r3, #104] @ 0x68
  13431. 8005f96: f003 42f8 and.w r2, r3, #2080374784 @ 0x7c000000
  13432. 8005f9a: 683b ldr r3, [r7, #0]
  13433. 8005f9c: 681b ldr r3, [r3, #0]
  13434. 8005f9e: 069b lsls r3, r3, #26
  13435. 8005fa0: 429a cmp r2, r3
  13436. 8005fa2: d107 bne.n 8005fb4 <HAL_ADC_ConfigChannel+0x224>
  13437. {
  13438. CLEAR_BIT(hadc->Instance->OFR3, ADC_OFR3_SSATE);
  13439. 8005fa4: 687b ldr r3, [r7, #4]
  13440. 8005fa6: 681b ldr r3, [r3, #0]
  13441. 8005fa8: 6e9a ldr r2, [r3, #104] @ 0x68
  13442. 8005faa: 687b ldr r3, [r7, #4]
  13443. 8005fac: 681b ldr r3, [r3, #0]
  13444. 8005fae: f022 4200 bic.w r2, r2, #2147483648 @ 0x80000000
  13445. 8005fb2: 669a str r2, [r3, #104] @ 0x68
  13446. }
  13447. if (((hadc->Instance->OFR4) & ADC_OFR4_OFFSET4_CH) == ADC_OFR_CHANNEL(sConfig->Channel))
  13448. 8005fb4: 687b ldr r3, [r7, #4]
  13449. 8005fb6: 681b ldr r3, [r3, #0]
  13450. 8005fb8: 6edb ldr r3, [r3, #108] @ 0x6c
  13451. 8005fba: f003 42f8 and.w r2, r3, #2080374784 @ 0x7c000000
  13452. 8005fbe: 683b ldr r3, [r7, #0]
  13453. 8005fc0: 681b ldr r3, [r3, #0]
  13454. 8005fc2: 069b lsls r3, r3, #26
  13455. 8005fc4: 429a cmp r2, r3
  13456. 8005fc6: d107 bne.n 8005fd8 <HAL_ADC_ConfigChannel+0x248>
  13457. {
  13458. CLEAR_BIT(hadc->Instance->OFR4, ADC_OFR4_SSATE);
  13459. 8005fc8: 687b ldr r3, [r7, #4]
  13460. 8005fca: 681b ldr r3, [r3, #0]
  13461. 8005fcc: 6eda ldr r2, [r3, #108] @ 0x6c
  13462. 8005fce: 687b ldr r3, [r7, #4]
  13463. 8005fd0: 681b ldr r3, [r3, #0]
  13464. 8005fd2: f022 4200 bic.w r2, r2, #2147483648 @ 0x80000000
  13465. 8005fd6: 66da str r2, [r3, #108] @ 0x6c
  13466. /* Parameters update conditioned to ADC state: */
  13467. /* Parameters that can be updated only when ADC is disabled: */
  13468. /* - Single or differential mode */
  13469. /* - Internal measurement channels: Vbat/VrefInt/TempSensor */
  13470. if (LL_ADC_IsEnabled(hadc->Instance) == 0UL)
  13471. 8005fd8: 687b ldr r3, [r7, #4]
  13472. 8005fda: 681b ldr r3, [r3, #0]
  13473. 8005fdc: 4618 mov r0, r3
  13474. 8005fde: f7ff fbfd bl 80057dc <LL_ADC_IsEnabled>
  13475. 8005fe2: 4603 mov r3, r0
  13476. 8005fe4: 2b00 cmp r3, #0
  13477. 8005fe6: f040 8211 bne.w 800640c <HAL_ADC_ConfigChannel+0x67c>
  13478. {
  13479. /* Set mode single-ended or differential input of the selected ADC channel */
  13480. LL_ADC_SetChannelSingleDiff(hadc->Instance, sConfig->Channel, sConfig->SingleDiff);
  13481. 8005fea: 687b ldr r3, [r7, #4]
  13482. 8005fec: 6818 ldr r0, [r3, #0]
  13483. 8005fee: 683b ldr r3, [r7, #0]
  13484. 8005ff0: 6819 ldr r1, [r3, #0]
  13485. 8005ff2: 683b ldr r3, [r7, #0]
  13486. 8005ff4: 68db ldr r3, [r3, #12]
  13487. 8005ff6: 461a mov r2, r3
  13488. 8005ff8: f7ff fb48 bl 800568c <LL_ADC_SetChannelSingleDiff>
  13489. /* Configuration of differential mode */
  13490. if (sConfig->SingleDiff == ADC_DIFFERENTIAL_ENDED)
  13491. 8005ffc: 683b ldr r3, [r7, #0]
  13492. 8005ffe: 68db ldr r3, [r3, #12]
  13493. 8006000: 4aa1 ldr r2, [pc, #644] @ (8006288 <HAL_ADC_ConfigChannel+0x4f8>)
  13494. 8006002: 4293 cmp r3, r2
  13495. 8006004: f040 812e bne.w 8006264 <HAL_ADC_ConfigChannel+0x4d4>
  13496. {
  13497. /* Set sampling time of the selected ADC channel */
  13498. /* Note: ADC channel number masked with value "0x1F" to ensure shift value within 32 bits range */
  13499. LL_ADC_SetChannelSamplingTime(hadc->Instance,
  13500. 8006008: 687b ldr r3, [r7, #4]
  13501. 800600a: 6818 ldr r0, [r3, #0]
  13502. (uint32_t)(__LL_ADC_DECIMAL_NB_TO_CHANNEL((__LL_ADC_CHANNEL_TO_DECIMAL_NB((uint32_t)sConfig->Channel) + 1UL) & 0x1FUL)),
  13503. 800600c: 683b ldr r3, [r7, #0]
  13504. 800600e: 681b ldr r3, [r3, #0]
  13505. 8006010: f3c3 0313 ubfx r3, r3, #0, #20
  13506. 8006014: 2b00 cmp r3, #0
  13507. 8006016: d10b bne.n 8006030 <HAL_ADC_ConfigChannel+0x2a0>
  13508. 8006018: 683b ldr r3, [r7, #0]
  13509. 800601a: 681b ldr r3, [r3, #0]
  13510. 800601c: 0e9b lsrs r3, r3, #26
  13511. 800601e: 3301 adds r3, #1
  13512. 8006020: f003 031f and.w r3, r3, #31
  13513. 8006024: 2b09 cmp r3, #9
  13514. 8006026: bf94 ite ls
  13515. 8006028: 2301 movls r3, #1
  13516. 800602a: 2300 movhi r3, #0
  13517. 800602c: b2db uxtb r3, r3
  13518. 800602e: e019 b.n 8006064 <HAL_ADC_ConfigChannel+0x2d4>
  13519. 8006030: 683b ldr r3, [r7, #0]
  13520. 8006032: 681b ldr r3, [r3, #0]
  13521. 8006034: 65bb str r3, [r7, #88] @ 0x58
  13522. __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
  13523. 8006036: 6dbb ldr r3, [r7, #88] @ 0x58
  13524. 8006038: fa93 f3a3 rbit r3, r3
  13525. 800603c: 657b str r3, [r7, #84] @ 0x54
  13526. return result;
  13527. 800603e: 6d7b ldr r3, [r7, #84] @ 0x54
  13528. 8006040: 65fb str r3, [r7, #92] @ 0x5c
  13529. if (value == 0U)
  13530. 8006042: 6dfb ldr r3, [r7, #92] @ 0x5c
  13531. 8006044: 2b00 cmp r3, #0
  13532. 8006046: d101 bne.n 800604c <HAL_ADC_ConfigChannel+0x2bc>
  13533. return 32U;
  13534. 8006048: 2320 movs r3, #32
  13535. 800604a: e003 b.n 8006054 <HAL_ADC_ConfigChannel+0x2c4>
  13536. return __builtin_clz(value);
  13537. 800604c: 6dfb ldr r3, [r7, #92] @ 0x5c
  13538. 800604e: fab3 f383 clz r3, r3
  13539. 8006052: b2db uxtb r3, r3
  13540. 8006054: 3301 adds r3, #1
  13541. 8006056: f003 031f and.w r3, r3, #31
  13542. 800605a: 2b09 cmp r3, #9
  13543. 800605c: bf94 ite ls
  13544. 800605e: 2301 movls r3, #1
  13545. 8006060: 2300 movhi r3, #0
  13546. 8006062: b2db uxtb r3, r3
  13547. LL_ADC_SetChannelSamplingTime(hadc->Instance,
  13548. 8006064: 2b00 cmp r3, #0
  13549. 8006066: d079 beq.n 800615c <HAL_ADC_ConfigChannel+0x3cc>
  13550. (uint32_t)(__LL_ADC_DECIMAL_NB_TO_CHANNEL((__LL_ADC_CHANNEL_TO_DECIMAL_NB((uint32_t)sConfig->Channel) + 1UL) & 0x1FUL)),
  13551. 8006068: 683b ldr r3, [r7, #0]
  13552. 800606a: 681b ldr r3, [r3, #0]
  13553. 800606c: f3c3 0313 ubfx r3, r3, #0, #20
  13554. 8006070: 2b00 cmp r3, #0
  13555. 8006072: d107 bne.n 8006084 <HAL_ADC_ConfigChannel+0x2f4>
  13556. 8006074: 683b ldr r3, [r7, #0]
  13557. 8006076: 681b ldr r3, [r3, #0]
  13558. 8006078: 0e9b lsrs r3, r3, #26
  13559. 800607a: 3301 adds r3, #1
  13560. 800607c: 069b lsls r3, r3, #26
  13561. 800607e: f003 42f8 and.w r2, r3, #2080374784 @ 0x7c000000
  13562. 8006082: e015 b.n 80060b0 <HAL_ADC_ConfigChannel+0x320>
  13563. 8006084: 683b ldr r3, [r7, #0]
  13564. 8006086: 681b ldr r3, [r3, #0]
  13565. 8006088: 64fb str r3, [r7, #76] @ 0x4c
  13566. __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
  13567. 800608a: 6cfb ldr r3, [r7, #76] @ 0x4c
  13568. 800608c: fa93 f3a3 rbit r3, r3
  13569. 8006090: 64bb str r3, [r7, #72] @ 0x48
  13570. return result;
  13571. 8006092: 6cbb ldr r3, [r7, #72] @ 0x48
  13572. 8006094: 653b str r3, [r7, #80] @ 0x50
  13573. if (value == 0U)
  13574. 8006096: 6d3b ldr r3, [r7, #80] @ 0x50
  13575. 8006098: 2b00 cmp r3, #0
  13576. 800609a: d101 bne.n 80060a0 <HAL_ADC_ConfigChannel+0x310>
  13577. return 32U;
  13578. 800609c: 2320 movs r3, #32
  13579. 800609e: e003 b.n 80060a8 <HAL_ADC_ConfigChannel+0x318>
  13580. return __builtin_clz(value);
  13581. 80060a0: 6d3b ldr r3, [r7, #80] @ 0x50
  13582. 80060a2: fab3 f383 clz r3, r3
  13583. 80060a6: b2db uxtb r3, r3
  13584. 80060a8: 3301 adds r3, #1
  13585. 80060aa: 069b lsls r3, r3, #26
  13586. 80060ac: f003 42f8 and.w r2, r3, #2080374784 @ 0x7c000000
  13587. 80060b0: 683b ldr r3, [r7, #0]
  13588. 80060b2: 681b ldr r3, [r3, #0]
  13589. 80060b4: f3c3 0313 ubfx r3, r3, #0, #20
  13590. 80060b8: 2b00 cmp r3, #0
  13591. 80060ba: d109 bne.n 80060d0 <HAL_ADC_ConfigChannel+0x340>
  13592. 80060bc: 683b ldr r3, [r7, #0]
  13593. 80060be: 681b ldr r3, [r3, #0]
  13594. 80060c0: 0e9b lsrs r3, r3, #26
  13595. 80060c2: 3301 adds r3, #1
  13596. 80060c4: f003 031f and.w r3, r3, #31
  13597. 80060c8: 2101 movs r1, #1
  13598. 80060ca: fa01 f303 lsl.w r3, r1, r3
  13599. 80060ce: e017 b.n 8006100 <HAL_ADC_ConfigChannel+0x370>
  13600. 80060d0: 683b ldr r3, [r7, #0]
  13601. 80060d2: 681b ldr r3, [r3, #0]
  13602. 80060d4: 643b str r3, [r7, #64] @ 0x40
  13603. __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
  13604. 80060d6: 6c3b ldr r3, [r7, #64] @ 0x40
  13605. 80060d8: fa93 f3a3 rbit r3, r3
  13606. 80060dc: 63fb str r3, [r7, #60] @ 0x3c
  13607. return result;
  13608. 80060de: 6bfb ldr r3, [r7, #60] @ 0x3c
  13609. 80060e0: 647b str r3, [r7, #68] @ 0x44
  13610. if (value == 0U)
  13611. 80060e2: 6c7b ldr r3, [r7, #68] @ 0x44
  13612. 80060e4: 2b00 cmp r3, #0
  13613. 80060e6: d101 bne.n 80060ec <HAL_ADC_ConfigChannel+0x35c>
  13614. return 32U;
  13615. 80060e8: 2320 movs r3, #32
  13616. 80060ea: e003 b.n 80060f4 <HAL_ADC_ConfigChannel+0x364>
  13617. return __builtin_clz(value);
  13618. 80060ec: 6c7b ldr r3, [r7, #68] @ 0x44
  13619. 80060ee: fab3 f383 clz r3, r3
  13620. 80060f2: b2db uxtb r3, r3
  13621. 80060f4: 3301 adds r3, #1
  13622. 80060f6: f003 031f and.w r3, r3, #31
  13623. 80060fa: 2101 movs r1, #1
  13624. 80060fc: fa01 f303 lsl.w r3, r1, r3
  13625. 8006100: ea42 0103 orr.w r1, r2, r3
  13626. 8006104: 683b ldr r3, [r7, #0]
  13627. 8006106: 681b ldr r3, [r3, #0]
  13628. 8006108: f3c3 0313 ubfx r3, r3, #0, #20
  13629. 800610c: 2b00 cmp r3, #0
  13630. 800610e: d10a bne.n 8006126 <HAL_ADC_ConfigChannel+0x396>
  13631. 8006110: 683b ldr r3, [r7, #0]
  13632. 8006112: 681b ldr r3, [r3, #0]
  13633. 8006114: 0e9b lsrs r3, r3, #26
  13634. 8006116: 3301 adds r3, #1
  13635. 8006118: f003 021f and.w r2, r3, #31
  13636. 800611c: 4613 mov r3, r2
  13637. 800611e: 005b lsls r3, r3, #1
  13638. 8006120: 4413 add r3, r2
  13639. 8006122: 051b lsls r3, r3, #20
  13640. 8006124: e018 b.n 8006158 <HAL_ADC_ConfigChannel+0x3c8>
  13641. 8006126: 683b ldr r3, [r7, #0]
  13642. 8006128: 681b ldr r3, [r3, #0]
  13643. 800612a: 637b str r3, [r7, #52] @ 0x34
  13644. __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
  13645. 800612c: 6b7b ldr r3, [r7, #52] @ 0x34
  13646. 800612e: fa93 f3a3 rbit r3, r3
  13647. 8006132: 633b str r3, [r7, #48] @ 0x30
  13648. return result;
  13649. 8006134: 6b3b ldr r3, [r7, #48] @ 0x30
  13650. 8006136: 63bb str r3, [r7, #56] @ 0x38
  13651. if (value == 0U)
  13652. 8006138: 6bbb ldr r3, [r7, #56] @ 0x38
  13653. 800613a: 2b00 cmp r3, #0
  13654. 800613c: d101 bne.n 8006142 <HAL_ADC_ConfigChannel+0x3b2>
  13655. return 32U;
  13656. 800613e: 2320 movs r3, #32
  13657. 8006140: e003 b.n 800614a <HAL_ADC_ConfigChannel+0x3ba>
  13658. return __builtin_clz(value);
  13659. 8006142: 6bbb ldr r3, [r7, #56] @ 0x38
  13660. 8006144: fab3 f383 clz r3, r3
  13661. 8006148: b2db uxtb r3, r3
  13662. 800614a: 3301 adds r3, #1
  13663. 800614c: f003 021f and.w r2, r3, #31
  13664. 8006150: 4613 mov r3, r2
  13665. 8006152: 005b lsls r3, r3, #1
  13666. 8006154: 4413 add r3, r2
  13667. 8006156: 051b lsls r3, r3, #20
  13668. LL_ADC_SetChannelSamplingTime(hadc->Instance,
  13669. 8006158: 430b orrs r3, r1
  13670. 800615a: e07e b.n 800625a <HAL_ADC_ConfigChannel+0x4ca>
  13671. (uint32_t)(__LL_ADC_DECIMAL_NB_TO_CHANNEL((__LL_ADC_CHANNEL_TO_DECIMAL_NB((uint32_t)sConfig->Channel) + 1UL) & 0x1FUL)),
  13672. 800615c: 683b ldr r3, [r7, #0]
  13673. 800615e: 681b ldr r3, [r3, #0]
  13674. 8006160: f3c3 0313 ubfx r3, r3, #0, #20
  13675. 8006164: 2b00 cmp r3, #0
  13676. 8006166: d107 bne.n 8006178 <HAL_ADC_ConfigChannel+0x3e8>
  13677. 8006168: 683b ldr r3, [r7, #0]
  13678. 800616a: 681b ldr r3, [r3, #0]
  13679. 800616c: 0e9b lsrs r3, r3, #26
  13680. 800616e: 3301 adds r3, #1
  13681. 8006170: 069b lsls r3, r3, #26
  13682. 8006172: f003 42f8 and.w r2, r3, #2080374784 @ 0x7c000000
  13683. 8006176: e015 b.n 80061a4 <HAL_ADC_ConfigChannel+0x414>
  13684. 8006178: 683b ldr r3, [r7, #0]
  13685. 800617a: 681b ldr r3, [r3, #0]
  13686. 800617c: 62bb str r3, [r7, #40] @ 0x28
  13687. __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
  13688. 800617e: 6abb ldr r3, [r7, #40] @ 0x28
  13689. 8006180: fa93 f3a3 rbit r3, r3
  13690. 8006184: 627b str r3, [r7, #36] @ 0x24
  13691. return result;
  13692. 8006186: 6a7b ldr r3, [r7, #36] @ 0x24
  13693. 8006188: 62fb str r3, [r7, #44] @ 0x2c
  13694. if (value == 0U)
  13695. 800618a: 6afb ldr r3, [r7, #44] @ 0x2c
  13696. 800618c: 2b00 cmp r3, #0
  13697. 800618e: d101 bne.n 8006194 <HAL_ADC_ConfigChannel+0x404>
  13698. return 32U;
  13699. 8006190: 2320 movs r3, #32
  13700. 8006192: e003 b.n 800619c <HAL_ADC_ConfigChannel+0x40c>
  13701. return __builtin_clz(value);
  13702. 8006194: 6afb ldr r3, [r7, #44] @ 0x2c
  13703. 8006196: fab3 f383 clz r3, r3
  13704. 800619a: b2db uxtb r3, r3
  13705. 800619c: 3301 adds r3, #1
  13706. 800619e: 069b lsls r3, r3, #26
  13707. 80061a0: f003 42f8 and.w r2, r3, #2080374784 @ 0x7c000000
  13708. 80061a4: 683b ldr r3, [r7, #0]
  13709. 80061a6: 681b ldr r3, [r3, #0]
  13710. 80061a8: f3c3 0313 ubfx r3, r3, #0, #20
  13711. 80061ac: 2b00 cmp r3, #0
  13712. 80061ae: d109 bne.n 80061c4 <HAL_ADC_ConfigChannel+0x434>
  13713. 80061b0: 683b ldr r3, [r7, #0]
  13714. 80061b2: 681b ldr r3, [r3, #0]
  13715. 80061b4: 0e9b lsrs r3, r3, #26
  13716. 80061b6: 3301 adds r3, #1
  13717. 80061b8: f003 031f and.w r3, r3, #31
  13718. 80061bc: 2101 movs r1, #1
  13719. 80061be: fa01 f303 lsl.w r3, r1, r3
  13720. 80061c2: e017 b.n 80061f4 <HAL_ADC_ConfigChannel+0x464>
  13721. 80061c4: 683b ldr r3, [r7, #0]
  13722. 80061c6: 681b ldr r3, [r3, #0]
  13723. 80061c8: 61fb str r3, [r7, #28]
  13724. __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
  13725. 80061ca: 69fb ldr r3, [r7, #28]
  13726. 80061cc: fa93 f3a3 rbit r3, r3
  13727. 80061d0: 61bb str r3, [r7, #24]
  13728. return result;
  13729. 80061d2: 69bb ldr r3, [r7, #24]
  13730. 80061d4: 623b str r3, [r7, #32]
  13731. if (value == 0U)
  13732. 80061d6: 6a3b ldr r3, [r7, #32]
  13733. 80061d8: 2b00 cmp r3, #0
  13734. 80061da: d101 bne.n 80061e0 <HAL_ADC_ConfigChannel+0x450>
  13735. return 32U;
  13736. 80061dc: 2320 movs r3, #32
  13737. 80061de: e003 b.n 80061e8 <HAL_ADC_ConfigChannel+0x458>
  13738. return __builtin_clz(value);
  13739. 80061e0: 6a3b ldr r3, [r7, #32]
  13740. 80061e2: fab3 f383 clz r3, r3
  13741. 80061e6: b2db uxtb r3, r3
  13742. 80061e8: 3301 adds r3, #1
  13743. 80061ea: f003 031f and.w r3, r3, #31
  13744. 80061ee: 2101 movs r1, #1
  13745. 80061f0: fa01 f303 lsl.w r3, r1, r3
  13746. 80061f4: ea42 0103 orr.w r1, r2, r3
  13747. 80061f8: 683b ldr r3, [r7, #0]
  13748. 80061fa: 681b ldr r3, [r3, #0]
  13749. 80061fc: f3c3 0313 ubfx r3, r3, #0, #20
  13750. 8006200: 2b00 cmp r3, #0
  13751. 8006202: d10d bne.n 8006220 <HAL_ADC_ConfigChannel+0x490>
  13752. 8006204: 683b ldr r3, [r7, #0]
  13753. 8006206: 681b ldr r3, [r3, #0]
  13754. 8006208: 0e9b lsrs r3, r3, #26
  13755. 800620a: 3301 adds r3, #1
  13756. 800620c: f003 021f and.w r2, r3, #31
  13757. 8006210: 4613 mov r3, r2
  13758. 8006212: 005b lsls r3, r3, #1
  13759. 8006214: 4413 add r3, r2
  13760. 8006216: 3b1e subs r3, #30
  13761. 8006218: 051b lsls r3, r3, #20
  13762. 800621a: f043 7300 orr.w r3, r3, #33554432 @ 0x2000000
  13763. 800621e: e01b b.n 8006258 <HAL_ADC_ConfigChannel+0x4c8>
  13764. 8006220: 683b ldr r3, [r7, #0]
  13765. 8006222: 681b ldr r3, [r3, #0]
  13766. 8006224: 613b str r3, [r7, #16]
  13767. __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
  13768. 8006226: 693b ldr r3, [r7, #16]
  13769. 8006228: fa93 f3a3 rbit r3, r3
  13770. 800622c: 60fb str r3, [r7, #12]
  13771. return result;
  13772. 800622e: 68fb ldr r3, [r7, #12]
  13773. 8006230: 617b str r3, [r7, #20]
  13774. if (value == 0U)
  13775. 8006232: 697b ldr r3, [r7, #20]
  13776. 8006234: 2b00 cmp r3, #0
  13777. 8006236: d101 bne.n 800623c <HAL_ADC_ConfigChannel+0x4ac>
  13778. return 32U;
  13779. 8006238: 2320 movs r3, #32
  13780. 800623a: e003 b.n 8006244 <HAL_ADC_ConfigChannel+0x4b4>
  13781. return __builtin_clz(value);
  13782. 800623c: 697b ldr r3, [r7, #20]
  13783. 800623e: fab3 f383 clz r3, r3
  13784. 8006242: b2db uxtb r3, r3
  13785. 8006244: 3301 adds r3, #1
  13786. 8006246: f003 021f and.w r2, r3, #31
  13787. 800624a: 4613 mov r3, r2
  13788. 800624c: 005b lsls r3, r3, #1
  13789. 800624e: 4413 add r3, r2
  13790. 8006250: 3b1e subs r3, #30
  13791. 8006252: 051b lsls r3, r3, #20
  13792. 8006254: f043 7300 orr.w r3, r3, #33554432 @ 0x2000000
  13793. LL_ADC_SetChannelSamplingTime(hadc->Instance,
  13794. 8006258: 430b orrs r3, r1
  13795. 800625a: 683a ldr r2, [r7, #0]
  13796. 800625c: 6892 ldr r2, [r2, #8]
  13797. 800625e: 4619 mov r1, r3
  13798. 8006260: f7ff f9e8 bl 8005634 <LL_ADC_SetChannelSamplingTime>
  13799. /* If internal channel selected, enable dedicated internal buffers and */
  13800. /* paths. */
  13801. /* Note: these internal measurement paths can be disabled using */
  13802. /* HAL_ADC_DeInit(). */
  13803. if (__LL_ADC_IS_CHANNEL_INTERNAL(sConfig->Channel))
  13804. 8006264: 683b ldr r3, [r7, #0]
  13805. 8006266: 681b ldr r3, [r3, #0]
  13806. 8006268: 2b00 cmp r3, #0
  13807. 800626a: f280 80cf bge.w 800640c <HAL_ADC_ConfigChannel+0x67c>
  13808. {
  13809. /* Configuration of common ADC parameters */
  13810. tmp_config_internal_channel = LL_ADC_GetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance));
  13811. 800626e: 687b ldr r3, [r7, #4]
  13812. 8006270: 681b ldr r3, [r3, #0]
  13813. 8006272: 4a06 ldr r2, [pc, #24] @ (800628c <HAL_ADC_ConfigChannel+0x4fc>)
  13814. 8006274: 4293 cmp r3, r2
  13815. 8006276: d004 beq.n 8006282 <HAL_ADC_ConfigChannel+0x4f2>
  13816. 8006278: 687b ldr r3, [r7, #4]
  13817. 800627a: 681b ldr r3, [r3, #0]
  13818. 800627c: 4a04 ldr r2, [pc, #16] @ (8006290 <HAL_ADC_ConfigChannel+0x500>)
  13819. 800627e: 4293 cmp r3, r2
  13820. 8006280: d10a bne.n 8006298 <HAL_ADC_ConfigChannel+0x508>
  13821. 8006282: 4b04 ldr r3, [pc, #16] @ (8006294 <HAL_ADC_ConfigChannel+0x504>)
  13822. 8006284: e009 b.n 800629a <HAL_ADC_ConfigChannel+0x50a>
  13823. 8006286: bf00 nop
  13824. 8006288: 47ff0000 .word 0x47ff0000
  13825. 800628c: 40022000 .word 0x40022000
  13826. 8006290: 40022100 .word 0x40022100
  13827. 8006294: 40022300 .word 0x40022300
  13828. 8006298: 4b61 ldr r3, [pc, #388] @ (8006420 <HAL_ADC_ConfigChannel+0x690>)
  13829. 800629a: 4618 mov r0, r3
  13830. 800629c: f7ff f916 bl 80054cc <LL_ADC_GetCommonPathInternalCh>
  13831. 80062a0: 66f8 str r0, [r7, #108] @ 0x6c
  13832. /* Software is allowed to change common parameters only when all ADCs */
  13833. /* of the common group are disabled. */
  13834. if (__LL_ADC_IS_ENABLED_ALL_COMMON_INSTANCE(__LL_ADC_COMMON_INSTANCE(hadc->Instance)) == 0UL)
  13835. 80062a2: 687b ldr r3, [r7, #4]
  13836. 80062a4: 681b ldr r3, [r3, #0]
  13837. 80062a6: 4a5f ldr r2, [pc, #380] @ (8006424 <HAL_ADC_ConfigChannel+0x694>)
  13838. 80062a8: 4293 cmp r3, r2
  13839. 80062aa: d004 beq.n 80062b6 <HAL_ADC_ConfigChannel+0x526>
  13840. 80062ac: 687b ldr r3, [r7, #4]
  13841. 80062ae: 681b ldr r3, [r3, #0]
  13842. 80062b0: 4a5d ldr r2, [pc, #372] @ (8006428 <HAL_ADC_ConfigChannel+0x698>)
  13843. 80062b2: 4293 cmp r3, r2
  13844. 80062b4: d10e bne.n 80062d4 <HAL_ADC_ConfigChannel+0x544>
  13845. 80062b6: 485b ldr r0, [pc, #364] @ (8006424 <HAL_ADC_ConfigChannel+0x694>)
  13846. 80062b8: f7ff fa90 bl 80057dc <LL_ADC_IsEnabled>
  13847. 80062bc: 4604 mov r4, r0
  13848. 80062be: 485a ldr r0, [pc, #360] @ (8006428 <HAL_ADC_ConfigChannel+0x698>)
  13849. 80062c0: f7ff fa8c bl 80057dc <LL_ADC_IsEnabled>
  13850. 80062c4: 4603 mov r3, r0
  13851. 80062c6: 4323 orrs r3, r4
  13852. 80062c8: 2b00 cmp r3, #0
  13853. 80062ca: bf0c ite eq
  13854. 80062cc: 2301 moveq r3, #1
  13855. 80062ce: 2300 movne r3, #0
  13856. 80062d0: b2db uxtb r3, r3
  13857. 80062d2: e008 b.n 80062e6 <HAL_ADC_ConfigChannel+0x556>
  13858. 80062d4: 4855 ldr r0, [pc, #340] @ (800642c <HAL_ADC_ConfigChannel+0x69c>)
  13859. 80062d6: f7ff fa81 bl 80057dc <LL_ADC_IsEnabled>
  13860. 80062da: 4603 mov r3, r0
  13861. 80062dc: 2b00 cmp r3, #0
  13862. 80062de: bf0c ite eq
  13863. 80062e0: 2301 moveq r3, #1
  13864. 80062e2: 2300 movne r3, #0
  13865. 80062e4: b2db uxtb r3, r3
  13866. 80062e6: 2b00 cmp r3, #0
  13867. 80062e8: d07d beq.n 80063e6 <HAL_ADC_ConfigChannel+0x656>
  13868. {
  13869. /* If the requested internal measurement path has already been enabled, */
  13870. /* bypass the configuration processing. */
  13871. if ((sConfig->Channel == ADC_CHANNEL_TEMPSENSOR) && ((tmp_config_internal_channel & LL_ADC_PATH_INTERNAL_TEMPSENSOR) == 0UL))
  13872. 80062ea: 683b ldr r3, [r7, #0]
  13873. 80062ec: 681b ldr r3, [r3, #0]
  13874. 80062ee: 4a50 ldr r2, [pc, #320] @ (8006430 <HAL_ADC_ConfigChannel+0x6a0>)
  13875. 80062f0: 4293 cmp r3, r2
  13876. 80062f2: d130 bne.n 8006356 <HAL_ADC_ConfigChannel+0x5c6>
  13877. 80062f4: 6efb ldr r3, [r7, #108] @ 0x6c
  13878. 80062f6: f403 0300 and.w r3, r3, #8388608 @ 0x800000
  13879. 80062fa: 2b00 cmp r3, #0
  13880. 80062fc: d12b bne.n 8006356 <HAL_ADC_ConfigChannel+0x5c6>
  13881. {
  13882. if (ADC_TEMPERATURE_SENSOR_INSTANCE(hadc))
  13883. 80062fe: 687b ldr r3, [r7, #4]
  13884. 8006300: 681b ldr r3, [r3, #0]
  13885. 8006302: 4a4a ldr r2, [pc, #296] @ (800642c <HAL_ADC_ConfigChannel+0x69c>)
  13886. 8006304: 4293 cmp r3, r2
  13887. 8006306: f040 8081 bne.w 800640c <HAL_ADC_ConfigChannel+0x67c>
  13888. {
  13889. LL_ADC_SetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance), LL_ADC_PATH_INTERNAL_TEMPSENSOR | tmp_config_internal_channel);
  13890. 800630a: 687b ldr r3, [r7, #4]
  13891. 800630c: 681b ldr r3, [r3, #0]
  13892. 800630e: 4a45 ldr r2, [pc, #276] @ (8006424 <HAL_ADC_ConfigChannel+0x694>)
  13893. 8006310: 4293 cmp r3, r2
  13894. 8006312: d004 beq.n 800631e <HAL_ADC_ConfigChannel+0x58e>
  13895. 8006314: 687b ldr r3, [r7, #4]
  13896. 8006316: 681b ldr r3, [r3, #0]
  13897. 8006318: 4a43 ldr r2, [pc, #268] @ (8006428 <HAL_ADC_ConfigChannel+0x698>)
  13898. 800631a: 4293 cmp r3, r2
  13899. 800631c: d101 bne.n 8006322 <HAL_ADC_ConfigChannel+0x592>
  13900. 800631e: 4a45 ldr r2, [pc, #276] @ (8006434 <HAL_ADC_ConfigChannel+0x6a4>)
  13901. 8006320: e000 b.n 8006324 <HAL_ADC_ConfigChannel+0x594>
  13902. 8006322: 4a3f ldr r2, [pc, #252] @ (8006420 <HAL_ADC_ConfigChannel+0x690>)
  13903. 8006324: 6efb ldr r3, [r7, #108] @ 0x6c
  13904. 8006326: f443 0300 orr.w r3, r3, #8388608 @ 0x800000
  13905. 800632a: 4619 mov r1, r3
  13906. 800632c: 4610 mov r0, r2
  13907. 800632e: f7ff f8ba bl 80054a6 <LL_ADC_SetCommonPathInternalCh>
  13908. /* Delay for temperature sensor stabilization time */
  13909. /* Wait loop initialization and execution */
  13910. /* Note: Variable divided by 2 to compensate partially */
  13911. /* CPU processing cycles, scaling in us split to not */
  13912. /* exceed 32 bits register capacity and handle low frequency. */
  13913. wait_loop_index = ((LL_ADC_DELAY_TEMPSENSOR_STAB_US / 10UL) * ((SystemCoreClock / (100000UL * 2UL)) + 1UL));
  13914. 8006332: 4b41 ldr r3, [pc, #260] @ (8006438 <HAL_ADC_ConfigChannel+0x6a8>)
  13915. 8006334: 681b ldr r3, [r3, #0]
  13916. 8006336: 099b lsrs r3, r3, #6
  13917. 8006338: 4a40 ldr r2, [pc, #256] @ (800643c <HAL_ADC_ConfigChannel+0x6ac>)
  13918. 800633a: fba2 2303 umull r2, r3, r2, r3
  13919. 800633e: 099b lsrs r3, r3, #6
  13920. 8006340: 3301 adds r3, #1
  13921. 8006342: 005b lsls r3, r3, #1
  13922. 8006344: 60bb str r3, [r7, #8]
  13923. while (wait_loop_index != 0UL)
  13924. 8006346: e002 b.n 800634e <HAL_ADC_ConfigChannel+0x5be>
  13925. {
  13926. wait_loop_index--;
  13927. 8006348: 68bb ldr r3, [r7, #8]
  13928. 800634a: 3b01 subs r3, #1
  13929. 800634c: 60bb str r3, [r7, #8]
  13930. while (wait_loop_index != 0UL)
  13931. 800634e: 68bb ldr r3, [r7, #8]
  13932. 8006350: 2b00 cmp r3, #0
  13933. 8006352: d1f9 bne.n 8006348 <HAL_ADC_ConfigChannel+0x5b8>
  13934. if (ADC_TEMPERATURE_SENSOR_INSTANCE(hadc))
  13935. 8006354: e05a b.n 800640c <HAL_ADC_ConfigChannel+0x67c>
  13936. }
  13937. }
  13938. }
  13939. else if ((sConfig->Channel == ADC_CHANNEL_VBAT) && ((tmp_config_internal_channel & LL_ADC_PATH_INTERNAL_VBAT) == 0UL))
  13940. 8006356: 683b ldr r3, [r7, #0]
  13941. 8006358: 681b ldr r3, [r3, #0]
  13942. 800635a: 4a39 ldr r2, [pc, #228] @ (8006440 <HAL_ADC_ConfigChannel+0x6b0>)
  13943. 800635c: 4293 cmp r3, r2
  13944. 800635e: d11e bne.n 800639e <HAL_ADC_ConfigChannel+0x60e>
  13945. 8006360: 6efb ldr r3, [r7, #108] @ 0x6c
  13946. 8006362: f003 7380 and.w r3, r3, #16777216 @ 0x1000000
  13947. 8006366: 2b00 cmp r3, #0
  13948. 8006368: d119 bne.n 800639e <HAL_ADC_ConfigChannel+0x60e>
  13949. {
  13950. if (ADC_BATTERY_VOLTAGE_INSTANCE(hadc))
  13951. 800636a: 687b ldr r3, [r7, #4]
  13952. 800636c: 681b ldr r3, [r3, #0]
  13953. 800636e: 4a2f ldr r2, [pc, #188] @ (800642c <HAL_ADC_ConfigChannel+0x69c>)
  13954. 8006370: 4293 cmp r3, r2
  13955. 8006372: d14b bne.n 800640c <HAL_ADC_ConfigChannel+0x67c>
  13956. {
  13957. LL_ADC_SetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance), LL_ADC_PATH_INTERNAL_VBAT | tmp_config_internal_channel);
  13958. 8006374: 687b ldr r3, [r7, #4]
  13959. 8006376: 681b ldr r3, [r3, #0]
  13960. 8006378: 4a2a ldr r2, [pc, #168] @ (8006424 <HAL_ADC_ConfigChannel+0x694>)
  13961. 800637a: 4293 cmp r3, r2
  13962. 800637c: d004 beq.n 8006388 <HAL_ADC_ConfigChannel+0x5f8>
  13963. 800637e: 687b ldr r3, [r7, #4]
  13964. 8006380: 681b ldr r3, [r3, #0]
  13965. 8006382: 4a29 ldr r2, [pc, #164] @ (8006428 <HAL_ADC_ConfigChannel+0x698>)
  13966. 8006384: 4293 cmp r3, r2
  13967. 8006386: d101 bne.n 800638c <HAL_ADC_ConfigChannel+0x5fc>
  13968. 8006388: 4a2a ldr r2, [pc, #168] @ (8006434 <HAL_ADC_ConfigChannel+0x6a4>)
  13969. 800638a: e000 b.n 800638e <HAL_ADC_ConfigChannel+0x5fe>
  13970. 800638c: 4a24 ldr r2, [pc, #144] @ (8006420 <HAL_ADC_ConfigChannel+0x690>)
  13971. 800638e: 6efb ldr r3, [r7, #108] @ 0x6c
  13972. 8006390: f043 7380 orr.w r3, r3, #16777216 @ 0x1000000
  13973. 8006394: 4619 mov r1, r3
  13974. 8006396: 4610 mov r0, r2
  13975. 8006398: f7ff f885 bl 80054a6 <LL_ADC_SetCommonPathInternalCh>
  13976. if (ADC_BATTERY_VOLTAGE_INSTANCE(hadc))
  13977. 800639c: e036 b.n 800640c <HAL_ADC_ConfigChannel+0x67c>
  13978. }
  13979. }
  13980. else if ((sConfig->Channel == ADC_CHANNEL_VREFINT) && ((tmp_config_internal_channel & LL_ADC_PATH_INTERNAL_VREFINT) == 0UL))
  13981. 800639e: 683b ldr r3, [r7, #0]
  13982. 80063a0: 681b ldr r3, [r3, #0]
  13983. 80063a2: 4a28 ldr r2, [pc, #160] @ (8006444 <HAL_ADC_ConfigChannel+0x6b4>)
  13984. 80063a4: 4293 cmp r3, r2
  13985. 80063a6: d131 bne.n 800640c <HAL_ADC_ConfigChannel+0x67c>
  13986. 80063a8: 6efb ldr r3, [r7, #108] @ 0x6c
  13987. 80063aa: f403 0380 and.w r3, r3, #4194304 @ 0x400000
  13988. 80063ae: 2b00 cmp r3, #0
  13989. 80063b0: d12c bne.n 800640c <HAL_ADC_ConfigChannel+0x67c>
  13990. {
  13991. if (ADC_VREFINT_INSTANCE(hadc))
  13992. 80063b2: 687b ldr r3, [r7, #4]
  13993. 80063b4: 681b ldr r3, [r3, #0]
  13994. 80063b6: 4a1d ldr r2, [pc, #116] @ (800642c <HAL_ADC_ConfigChannel+0x69c>)
  13995. 80063b8: 4293 cmp r3, r2
  13996. 80063ba: d127 bne.n 800640c <HAL_ADC_ConfigChannel+0x67c>
  13997. {
  13998. LL_ADC_SetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance), LL_ADC_PATH_INTERNAL_VREFINT | tmp_config_internal_channel);
  13999. 80063bc: 687b ldr r3, [r7, #4]
  14000. 80063be: 681b ldr r3, [r3, #0]
  14001. 80063c0: 4a18 ldr r2, [pc, #96] @ (8006424 <HAL_ADC_ConfigChannel+0x694>)
  14002. 80063c2: 4293 cmp r3, r2
  14003. 80063c4: d004 beq.n 80063d0 <HAL_ADC_ConfigChannel+0x640>
  14004. 80063c6: 687b ldr r3, [r7, #4]
  14005. 80063c8: 681b ldr r3, [r3, #0]
  14006. 80063ca: 4a17 ldr r2, [pc, #92] @ (8006428 <HAL_ADC_ConfigChannel+0x698>)
  14007. 80063cc: 4293 cmp r3, r2
  14008. 80063ce: d101 bne.n 80063d4 <HAL_ADC_ConfigChannel+0x644>
  14009. 80063d0: 4a18 ldr r2, [pc, #96] @ (8006434 <HAL_ADC_ConfigChannel+0x6a4>)
  14010. 80063d2: e000 b.n 80063d6 <HAL_ADC_ConfigChannel+0x646>
  14011. 80063d4: 4a12 ldr r2, [pc, #72] @ (8006420 <HAL_ADC_ConfigChannel+0x690>)
  14012. 80063d6: 6efb ldr r3, [r7, #108] @ 0x6c
  14013. 80063d8: f443 0380 orr.w r3, r3, #4194304 @ 0x400000
  14014. 80063dc: 4619 mov r1, r3
  14015. 80063de: 4610 mov r0, r2
  14016. 80063e0: f7ff f861 bl 80054a6 <LL_ADC_SetCommonPathInternalCh>
  14017. 80063e4: e012 b.n 800640c <HAL_ADC_ConfigChannel+0x67c>
  14018. /* enabled and other ADC of the common group are enabled, internal */
  14019. /* measurement paths cannot be enabled. */
  14020. else
  14021. {
  14022. /* Update ADC state machine to error */
  14023. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);
  14024. 80063e6: 687b ldr r3, [r7, #4]
  14025. 80063e8: 6d5b ldr r3, [r3, #84] @ 0x54
  14026. 80063ea: f043 0220 orr.w r2, r3, #32
  14027. 80063ee: 687b ldr r3, [r7, #4]
  14028. 80063f0: 655a str r2, [r3, #84] @ 0x54
  14029. tmp_hal_status = HAL_ERROR;
  14030. 80063f2: 2301 movs r3, #1
  14031. 80063f4: f887 307f strb.w r3, [r7, #127] @ 0x7f
  14032. 80063f8: e008 b.n 800640c <HAL_ADC_ConfigChannel+0x67c>
  14033. /* channel could be done on neither of the channel configuration structure */
  14034. /* parameters. */
  14035. else
  14036. {
  14037. /* Update ADC state machine to error */
  14038. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);
  14039. 80063fa: 687b ldr r3, [r7, #4]
  14040. 80063fc: 6d5b ldr r3, [r3, #84] @ 0x54
  14041. 80063fe: f043 0220 orr.w r2, r3, #32
  14042. 8006402: 687b ldr r3, [r7, #4]
  14043. 8006404: 655a str r2, [r3, #84] @ 0x54
  14044. tmp_hal_status = HAL_ERROR;
  14045. 8006406: 2301 movs r3, #1
  14046. 8006408: f887 307f strb.w r3, [r7, #127] @ 0x7f
  14047. }
  14048. /* Process unlocked */
  14049. __HAL_UNLOCK(hadc);
  14050. 800640c: 687b ldr r3, [r7, #4]
  14051. 800640e: 2200 movs r2, #0
  14052. 8006410: f883 2050 strb.w r2, [r3, #80] @ 0x50
  14053. /* Return function status */
  14054. return tmp_hal_status;
  14055. 8006414: f897 307f ldrb.w r3, [r7, #127] @ 0x7f
  14056. }
  14057. 8006418: 4618 mov r0, r3
  14058. 800641a: 3784 adds r7, #132 @ 0x84
  14059. 800641c: 46bd mov sp, r7
  14060. 800641e: bd90 pop {r4, r7, pc}
  14061. 8006420: 58026300 .word 0x58026300
  14062. 8006424: 40022000 .word 0x40022000
  14063. 8006428: 40022100 .word 0x40022100
  14064. 800642c: 58026000 .word 0x58026000
  14065. 8006430: cb840000 .word 0xcb840000
  14066. 8006434: 40022300 .word 0x40022300
  14067. 8006438: 24000034 .word 0x24000034
  14068. 800643c: 053e2d63 .word 0x053e2d63
  14069. 8006440: c7520000 .word 0xc7520000
  14070. 8006444: cfb80000 .word 0xcfb80000
  14071. 08006448 <ADC_Enable>:
  14072. * and voltage regulator must be enabled (done into HAL_ADC_Init()).
  14073. * @param hadc ADC handle
  14074. * @retval HAL status.
  14075. */
  14076. HAL_StatusTypeDef ADC_Enable(ADC_HandleTypeDef *hadc)
  14077. {
  14078. 8006448: b580 push {r7, lr}
  14079. 800644a: b084 sub sp, #16
  14080. 800644c: af00 add r7, sp, #0
  14081. 800644e: 6078 str r0, [r7, #4]
  14082. /* ADC enable and wait for ADC ready (in case of ADC is disabled or */
  14083. /* enabling phase not yet completed: flag ADC ready not yet set). */
  14084. /* Timeout implemented to not be stuck if ADC cannot be enabled (possible */
  14085. /* causes: ADC clock not running, ...). */
  14086. if (LL_ADC_IsEnabled(hadc->Instance) == 0UL)
  14087. 8006450: 687b ldr r3, [r7, #4]
  14088. 8006452: 681b ldr r3, [r3, #0]
  14089. 8006454: 4618 mov r0, r3
  14090. 8006456: f7ff f9c1 bl 80057dc <LL_ADC_IsEnabled>
  14091. 800645a: 4603 mov r3, r0
  14092. 800645c: 2b00 cmp r3, #0
  14093. 800645e: d16e bne.n 800653e <ADC_Enable+0xf6>
  14094. {
  14095. /* Check if conditions to enable the ADC are fulfilled */
  14096. if ((hadc->Instance->CR & (ADC_CR_ADCAL | ADC_CR_JADSTP | ADC_CR_ADSTP | ADC_CR_JADSTART | ADC_CR_ADSTART | ADC_CR_ADDIS | ADC_CR_ADEN)) != 0UL)
  14097. 8006460: 687b ldr r3, [r7, #4]
  14098. 8006462: 681b ldr r3, [r3, #0]
  14099. 8006464: 689a ldr r2, [r3, #8]
  14100. 8006466: 4b38 ldr r3, [pc, #224] @ (8006548 <ADC_Enable+0x100>)
  14101. 8006468: 4013 ands r3, r2
  14102. 800646a: 2b00 cmp r3, #0
  14103. 800646c: d00d beq.n 800648a <ADC_Enable+0x42>
  14104. {
  14105. /* Update ADC state machine to error */
  14106. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
  14107. 800646e: 687b ldr r3, [r7, #4]
  14108. 8006470: 6d5b ldr r3, [r3, #84] @ 0x54
  14109. 8006472: f043 0210 orr.w r2, r3, #16
  14110. 8006476: 687b ldr r3, [r7, #4]
  14111. 8006478: 655a str r2, [r3, #84] @ 0x54
  14112. /* Set ADC error code to ADC peripheral internal error */
  14113. SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);
  14114. 800647a: 687b ldr r3, [r7, #4]
  14115. 800647c: 6d9b ldr r3, [r3, #88] @ 0x58
  14116. 800647e: f043 0201 orr.w r2, r3, #1
  14117. 8006482: 687b ldr r3, [r7, #4]
  14118. 8006484: 659a str r2, [r3, #88] @ 0x58
  14119. return HAL_ERROR;
  14120. 8006486: 2301 movs r3, #1
  14121. 8006488: e05a b.n 8006540 <ADC_Enable+0xf8>
  14122. }
  14123. /* Enable the ADC peripheral */
  14124. LL_ADC_Enable(hadc->Instance);
  14125. 800648a: 687b ldr r3, [r7, #4]
  14126. 800648c: 681b ldr r3, [r3, #0]
  14127. 800648e: 4618 mov r0, r3
  14128. 8006490: f7ff f97c bl 800578c <LL_ADC_Enable>
  14129. /* Wait for ADC effectively enabled */
  14130. tickstart = HAL_GetTick();
  14131. 8006494: f7fe ffa2 bl 80053dc <HAL_GetTick>
  14132. 8006498: 60f8 str r0, [r7, #12]
  14133. /* Poll for ADC ready flag raised except case of multimode enabled
  14134. and ADC slave selected. */
  14135. uint32_t tmp_multimode_config = LL_ADC_GetMultimode(__LL_ADC_COMMON_INSTANCE(hadc->Instance));
  14136. 800649a: 687b ldr r3, [r7, #4]
  14137. 800649c: 681b ldr r3, [r3, #0]
  14138. 800649e: 4a2b ldr r2, [pc, #172] @ (800654c <ADC_Enable+0x104>)
  14139. 80064a0: 4293 cmp r3, r2
  14140. 80064a2: d004 beq.n 80064ae <ADC_Enable+0x66>
  14141. 80064a4: 687b ldr r3, [r7, #4]
  14142. 80064a6: 681b ldr r3, [r3, #0]
  14143. 80064a8: 4a29 ldr r2, [pc, #164] @ (8006550 <ADC_Enable+0x108>)
  14144. 80064aa: 4293 cmp r3, r2
  14145. 80064ac: d101 bne.n 80064b2 <ADC_Enable+0x6a>
  14146. 80064ae: 4b29 ldr r3, [pc, #164] @ (8006554 <ADC_Enable+0x10c>)
  14147. 80064b0: e000 b.n 80064b4 <ADC_Enable+0x6c>
  14148. 80064b2: 4b29 ldr r3, [pc, #164] @ (8006558 <ADC_Enable+0x110>)
  14149. 80064b4: 4618 mov r0, r3
  14150. 80064b6: f7ff f90d bl 80056d4 <LL_ADC_GetMultimode>
  14151. 80064ba: 60b8 str r0, [r7, #8]
  14152. if ((__LL_ADC_MULTI_INSTANCE_MASTER(hadc->Instance) == hadc->Instance)
  14153. 80064bc: 687b ldr r3, [r7, #4]
  14154. 80064be: 681b ldr r3, [r3, #0]
  14155. 80064c0: 4a23 ldr r2, [pc, #140] @ (8006550 <ADC_Enable+0x108>)
  14156. 80064c2: 4293 cmp r3, r2
  14157. 80064c4: d002 beq.n 80064cc <ADC_Enable+0x84>
  14158. 80064c6: 687b ldr r3, [r7, #4]
  14159. 80064c8: 681b ldr r3, [r3, #0]
  14160. 80064ca: e000 b.n 80064ce <ADC_Enable+0x86>
  14161. 80064cc: 4b1f ldr r3, [pc, #124] @ (800654c <ADC_Enable+0x104>)
  14162. 80064ce: 687a ldr r2, [r7, #4]
  14163. 80064d0: 6812 ldr r2, [r2, #0]
  14164. 80064d2: 4293 cmp r3, r2
  14165. 80064d4: d02c beq.n 8006530 <ADC_Enable+0xe8>
  14166. || (tmp_multimode_config == LL_ADC_MULTI_INDEPENDENT)
  14167. 80064d6: 68bb ldr r3, [r7, #8]
  14168. 80064d8: 2b00 cmp r3, #0
  14169. 80064da: d130 bne.n 800653e <ADC_Enable+0xf6>
  14170. )
  14171. {
  14172. while (__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_RDY) == 0UL)
  14173. 80064dc: e028 b.n 8006530 <ADC_Enable+0xe8>
  14174. The workaround is to continue setting ADEN until ADRDY is becomes 1.
  14175. Additionally, ADC_ENABLE_TIMEOUT is defined to encompass this
  14176. 4 ADC clock cycle duration */
  14177. /* Note: Test of ADC enabled required due to hardware constraint to */
  14178. /* not enable ADC if already enabled. */
  14179. if (LL_ADC_IsEnabled(hadc->Instance) == 0UL)
  14180. 80064de: 687b ldr r3, [r7, #4]
  14181. 80064e0: 681b ldr r3, [r3, #0]
  14182. 80064e2: 4618 mov r0, r3
  14183. 80064e4: f7ff f97a bl 80057dc <LL_ADC_IsEnabled>
  14184. 80064e8: 4603 mov r3, r0
  14185. 80064ea: 2b00 cmp r3, #0
  14186. 80064ec: d104 bne.n 80064f8 <ADC_Enable+0xb0>
  14187. {
  14188. LL_ADC_Enable(hadc->Instance);
  14189. 80064ee: 687b ldr r3, [r7, #4]
  14190. 80064f0: 681b ldr r3, [r3, #0]
  14191. 80064f2: 4618 mov r0, r3
  14192. 80064f4: f7ff f94a bl 800578c <LL_ADC_Enable>
  14193. }
  14194. if ((HAL_GetTick() - tickstart) > ADC_ENABLE_TIMEOUT)
  14195. 80064f8: f7fe ff70 bl 80053dc <HAL_GetTick>
  14196. 80064fc: 4602 mov r2, r0
  14197. 80064fe: 68fb ldr r3, [r7, #12]
  14198. 8006500: 1ad3 subs r3, r2, r3
  14199. 8006502: 2b02 cmp r3, #2
  14200. 8006504: d914 bls.n 8006530 <ADC_Enable+0xe8>
  14201. {
  14202. /* New check to avoid false timeout detection in case of preemption */
  14203. if (__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_RDY) == 0UL)
  14204. 8006506: 687b ldr r3, [r7, #4]
  14205. 8006508: 681b ldr r3, [r3, #0]
  14206. 800650a: 681b ldr r3, [r3, #0]
  14207. 800650c: f003 0301 and.w r3, r3, #1
  14208. 8006510: 2b01 cmp r3, #1
  14209. 8006512: d00d beq.n 8006530 <ADC_Enable+0xe8>
  14210. {
  14211. /* Update ADC state machine to error */
  14212. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
  14213. 8006514: 687b ldr r3, [r7, #4]
  14214. 8006516: 6d5b ldr r3, [r3, #84] @ 0x54
  14215. 8006518: f043 0210 orr.w r2, r3, #16
  14216. 800651c: 687b ldr r3, [r7, #4]
  14217. 800651e: 655a str r2, [r3, #84] @ 0x54
  14218. /* Set ADC error code to ADC peripheral internal error */
  14219. SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);
  14220. 8006520: 687b ldr r3, [r7, #4]
  14221. 8006522: 6d9b ldr r3, [r3, #88] @ 0x58
  14222. 8006524: f043 0201 orr.w r2, r3, #1
  14223. 8006528: 687b ldr r3, [r7, #4]
  14224. 800652a: 659a str r2, [r3, #88] @ 0x58
  14225. return HAL_ERROR;
  14226. 800652c: 2301 movs r3, #1
  14227. 800652e: e007 b.n 8006540 <ADC_Enable+0xf8>
  14228. while (__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_RDY) == 0UL)
  14229. 8006530: 687b ldr r3, [r7, #4]
  14230. 8006532: 681b ldr r3, [r3, #0]
  14231. 8006534: 681b ldr r3, [r3, #0]
  14232. 8006536: f003 0301 and.w r3, r3, #1
  14233. 800653a: 2b01 cmp r3, #1
  14234. 800653c: d1cf bne.n 80064de <ADC_Enable+0x96>
  14235. }
  14236. }
  14237. }
  14238. /* Return HAL status */
  14239. return HAL_OK;
  14240. 800653e: 2300 movs r3, #0
  14241. }
  14242. 8006540: 4618 mov r0, r3
  14243. 8006542: 3710 adds r7, #16
  14244. 8006544: 46bd mov sp, r7
  14245. 8006546: bd80 pop {r7, pc}
  14246. 8006548: 8000003f .word 0x8000003f
  14247. 800654c: 40022000 .word 0x40022000
  14248. 8006550: 40022100 .word 0x40022100
  14249. 8006554: 40022300 .word 0x40022300
  14250. 8006558: 58026300 .word 0x58026300
  14251. 0800655c <ADC_Disable>:
  14252. * stopped.
  14253. * @param hadc ADC handle
  14254. * @retval HAL status.
  14255. */
  14256. HAL_StatusTypeDef ADC_Disable(ADC_HandleTypeDef *hadc)
  14257. {
  14258. 800655c: b580 push {r7, lr}
  14259. 800655e: b084 sub sp, #16
  14260. 8006560: af00 add r7, sp, #0
  14261. 8006562: 6078 str r0, [r7, #4]
  14262. uint32_t tickstart;
  14263. const uint32_t tmp_adc_is_disable_on_going = LL_ADC_IsDisableOngoing(hadc->Instance);
  14264. 8006564: 687b ldr r3, [r7, #4]
  14265. 8006566: 681b ldr r3, [r3, #0]
  14266. 8006568: 4618 mov r0, r3
  14267. 800656a: f7ff f94a bl 8005802 <LL_ADC_IsDisableOngoing>
  14268. 800656e: 60f8 str r0, [r7, #12]
  14269. /* Verification if ADC is not already disabled: */
  14270. /* Note: forbidden to disable ADC (set bit ADC_CR_ADDIS) if ADC is already */
  14271. /* disabled. */
  14272. if ((LL_ADC_IsEnabled(hadc->Instance) != 0UL)
  14273. 8006570: 687b ldr r3, [r7, #4]
  14274. 8006572: 681b ldr r3, [r3, #0]
  14275. 8006574: 4618 mov r0, r3
  14276. 8006576: f7ff f931 bl 80057dc <LL_ADC_IsEnabled>
  14277. 800657a: 4603 mov r3, r0
  14278. 800657c: 2b00 cmp r3, #0
  14279. 800657e: d047 beq.n 8006610 <ADC_Disable+0xb4>
  14280. && (tmp_adc_is_disable_on_going == 0UL)
  14281. 8006580: 68fb ldr r3, [r7, #12]
  14282. 8006582: 2b00 cmp r3, #0
  14283. 8006584: d144 bne.n 8006610 <ADC_Disable+0xb4>
  14284. )
  14285. {
  14286. /* Check if conditions to disable the ADC are fulfilled */
  14287. if ((hadc->Instance->CR & (ADC_CR_JADSTART | ADC_CR_ADSTART | ADC_CR_ADEN)) == ADC_CR_ADEN)
  14288. 8006586: 687b ldr r3, [r7, #4]
  14289. 8006588: 681b ldr r3, [r3, #0]
  14290. 800658a: 689b ldr r3, [r3, #8]
  14291. 800658c: f003 030d and.w r3, r3, #13
  14292. 8006590: 2b01 cmp r3, #1
  14293. 8006592: d10c bne.n 80065ae <ADC_Disable+0x52>
  14294. {
  14295. /* Disable the ADC peripheral */
  14296. LL_ADC_Disable(hadc->Instance);
  14297. 8006594: 687b ldr r3, [r7, #4]
  14298. 8006596: 681b ldr r3, [r3, #0]
  14299. 8006598: 4618 mov r0, r3
  14300. 800659a: f7ff f90b bl 80057b4 <LL_ADC_Disable>
  14301. __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_EOSMP | ADC_FLAG_RDY));
  14302. 800659e: 687b ldr r3, [r7, #4]
  14303. 80065a0: 681b ldr r3, [r3, #0]
  14304. 80065a2: 2203 movs r2, #3
  14305. 80065a4: 601a str r2, [r3, #0]
  14306. return HAL_ERROR;
  14307. }
  14308. /* Wait for ADC effectively disabled */
  14309. /* Get tick count */
  14310. tickstart = HAL_GetTick();
  14311. 80065a6: f7fe ff19 bl 80053dc <HAL_GetTick>
  14312. 80065aa: 60b8 str r0, [r7, #8]
  14313. while ((hadc->Instance->CR & ADC_CR_ADEN) != 0UL)
  14314. 80065ac: e029 b.n 8006602 <ADC_Disable+0xa6>
  14315. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
  14316. 80065ae: 687b ldr r3, [r7, #4]
  14317. 80065b0: 6d5b ldr r3, [r3, #84] @ 0x54
  14318. 80065b2: f043 0210 orr.w r2, r3, #16
  14319. 80065b6: 687b ldr r3, [r7, #4]
  14320. 80065b8: 655a str r2, [r3, #84] @ 0x54
  14321. SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);
  14322. 80065ba: 687b ldr r3, [r7, #4]
  14323. 80065bc: 6d9b ldr r3, [r3, #88] @ 0x58
  14324. 80065be: f043 0201 orr.w r2, r3, #1
  14325. 80065c2: 687b ldr r3, [r7, #4]
  14326. 80065c4: 659a str r2, [r3, #88] @ 0x58
  14327. return HAL_ERROR;
  14328. 80065c6: 2301 movs r3, #1
  14329. 80065c8: e023 b.n 8006612 <ADC_Disable+0xb6>
  14330. {
  14331. if ((HAL_GetTick() - tickstart) > ADC_DISABLE_TIMEOUT)
  14332. 80065ca: f7fe ff07 bl 80053dc <HAL_GetTick>
  14333. 80065ce: 4602 mov r2, r0
  14334. 80065d0: 68bb ldr r3, [r7, #8]
  14335. 80065d2: 1ad3 subs r3, r2, r3
  14336. 80065d4: 2b02 cmp r3, #2
  14337. 80065d6: d914 bls.n 8006602 <ADC_Disable+0xa6>
  14338. {
  14339. /* New check to avoid false timeout detection in case of preemption */
  14340. if ((hadc->Instance->CR & ADC_CR_ADEN) != 0UL)
  14341. 80065d8: 687b ldr r3, [r7, #4]
  14342. 80065da: 681b ldr r3, [r3, #0]
  14343. 80065dc: 689b ldr r3, [r3, #8]
  14344. 80065de: f003 0301 and.w r3, r3, #1
  14345. 80065e2: 2b00 cmp r3, #0
  14346. 80065e4: d00d beq.n 8006602 <ADC_Disable+0xa6>
  14347. {
  14348. /* Update ADC state machine to error */
  14349. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
  14350. 80065e6: 687b ldr r3, [r7, #4]
  14351. 80065e8: 6d5b ldr r3, [r3, #84] @ 0x54
  14352. 80065ea: f043 0210 orr.w r2, r3, #16
  14353. 80065ee: 687b ldr r3, [r7, #4]
  14354. 80065f0: 655a str r2, [r3, #84] @ 0x54
  14355. /* Set ADC error code to ADC peripheral internal error */
  14356. SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);
  14357. 80065f2: 687b ldr r3, [r7, #4]
  14358. 80065f4: 6d9b ldr r3, [r3, #88] @ 0x58
  14359. 80065f6: f043 0201 orr.w r2, r3, #1
  14360. 80065fa: 687b ldr r3, [r7, #4]
  14361. 80065fc: 659a str r2, [r3, #88] @ 0x58
  14362. return HAL_ERROR;
  14363. 80065fe: 2301 movs r3, #1
  14364. 8006600: e007 b.n 8006612 <ADC_Disable+0xb6>
  14365. while ((hadc->Instance->CR & ADC_CR_ADEN) != 0UL)
  14366. 8006602: 687b ldr r3, [r7, #4]
  14367. 8006604: 681b ldr r3, [r3, #0]
  14368. 8006606: 689b ldr r3, [r3, #8]
  14369. 8006608: f003 0301 and.w r3, r3, #1
  14370. 800660c: 2b00 cmp r3, #0
  14371. 800660e: d1dc bne.n 80065ca <ADC_Disable+0x6e>
  14372. }
  14373. }
  14374. }
  14375. /* Return HAL status */
  14376. return HAL_OK;
  14377. 8006610: 2300 movs r3, #0
  14378. }
  14379. 8006612: 4618 mov r0, r3
  14380. 8006614: 3710 adds r7, #16
  14381. 8006616: 46bd mov sp, r7
  14382. 8006618: bd80 pop {r7, pc}
  14383. 0800661a <ADC_DMAConvCplt>:
  14384. * @brief DMA transfer complete callback.
  14385. * @param hdma pointer to DMA handle.
  14386. * @retval None
  14387. */
  14388. void ADC_DMAConvCplt(DMA_HandleTypeDef *hdma)
  14389. {
  14390. 800661a: b580 push {r7, lr}
  14391. 800661c: b084 sub sp, #16
  14392. 800661e: af00 add r7, sp, #0
  14393. 8006620: 6078 str r0, [r7, #4]
  14394. /* Retrieve ADC handle corresponding to current DMA handle */
  14395. ADC_HandleTypeDef *hadc = (ADC_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
  14396. 8006622: 687b ldr r3, [r7, #4]
  14397. 8006624: 6b9b ldr r3, [r3, #56] @ 0x38
  14398. 8006626: 60fb str r3, [r7, #12]
  14399. /* Update state machine on conversion status if not in error state */
  14400. if ((hadc->State & (HAL_ADC_STATE_ERROR_INTERNAL | HAL_ADC_STATE_ERROR_DMA)) == 0UL)
  14401. 8006628: 68fb ldr r3, [r7, #12]
  14402. 800662a: 6d5b ldr r3, [r3, #84] @ 0x54
  14403. 800662c: f003 0350 and.w r3, r3, #80 @ 0x50
  14404. 8006630: 2b00 cmp r3, #0
  14405. 8006632: d14b bne.n 80066cc <ADC_DMAConvCplt+0xb2>
  14406. {
  14407. /* Set ADC state */
  14408. SET_BIT(hadc->State, HAL_ADC_STATE_REG_EOC);
  14409. 8006634: 68fb ldr r3, [r7, #12]
  14410. 8006636: 6d5b ldr r3, [r3, #84] @ 0x54
  14411. 8006638: f443 7200 orr.w r2, r3, #512 @ 0x200
  14412. 800663c: 68fb ldr r3, [r7, #12]
  14413. 800663e: 655a str r2, [r3, #84] @ 0x54
  14414. /* Determine whether any further conversion upcoming on group regular */
  14415. /* by external trigger, continuous mode or scan sequence on going */
  14416. /* to disable interruption. */
  14417. /* Is it the end of the regular sequence ? */
  14418. if ((hadc->Instance->ISR & ADC_FLAG_EOS) != 0UL)
  14419. 8006640: 68fb ldr r3, [r7, #12]
  14420. 8006642: 681b ldr r3, [r3, #0]
  14421. 8006644: 681b ldr r3, [r3, #0]
  14422. 8006646: f003 0308 and.w r3, r3, #8
  14423. 800664a: 2b00 cmp r3, #0
  14424. 800664c: d021 beq.n 8006692 <ADC_DMAConvCplt+0x78>
  14425. {
  14426. /* Are conversions software-triggered ? */
  14427. if (LL_ADC_REG_IsTriggerSourceSWStart(hadc->Instance) != 0UL)
  14428. 800664e: 68fb ldr r3, [r7, #12]
  14429. 8006650: 681b ldr r3, [r3, #0]
  14430. 8006652: 4618 mov r0, r3
  14431. 8006654: f7fe ff9c bl 8005590 <LL_ADC_REG_IsTriggerSourceSWStart>
  14432. 8006658: 4603 mov r3, r0
  14433. 800665a: 2b00 cmp r3, #0
  14434. 800665c: d032 beq.n 80066c4 <ADC_DMAConvCplt+0xaa>
  14435. {
  14436. /* Is CONT bit set ? */
  14437. if (READ_BIT(hadc->Instance->CFGR, ADC_CFGR_CONT) == 0UL)
  14438. 800665e: 68fb ldr r3, [r7, #12]
  14439. 8006660: 681b ldr r3, [r3, #0]
  14440. 8006662: 68db ldr r3, [r3, #12]
  14441. 8006664: f403 5300 and.w r3, r3, #8192 @ 0x2000
  14442. 8006668: 2b00 cmp r3, #0
  14443. 800666a: d12b bne.n 80066c4 <ADC_DMAConvCplt+0xaa>
  14444. {
  14445. /* CONT bit is not set, no more conversions expected */
  14446. CLEAR_BIT(hadc->State, HAL_ADC_STATE_REG_BUSY);
  14447. 800666c: 68fb ldr r3, [r7, #12]
  14448. 800666e: 6d5b ldr r3, [r3, #84] @ 0x54
  14449. 8006670: f423 7280 bic.w r2, r3, #256 @ 0x100
  14450. 8006674: 68fb ldr r3, [r7, #12]
  14451. 8006676: 655a str r2, [r3, #84] @ 0x54
  14452. if ((hadc->State & HAL_ADC_STATE_INJ_BUSY) == 0UL)
  14453. 8006678: 68fb ldr r3, [r7, #12]
  14454. 800667a: 6d5b ldr r3, [r3, #84] @ 0x54
  14455. 800667c: f403 5380 and.w r3, r3, #4096 @ 0x1000
  14456. 8006680: 2b00 cmp r3, #0
  14457. 8006682: d11f bne.n 80066c4 <ADC_DMAConvCplt+0xaa>
  14458. {
  14459. SET_BIT(hadc->State, HAL_ADC_STATE_READY);
  14460. 8006684: 68fb ldr r3, [r7, #12]
  14461. 8006686: 6d5b ldr r3, [r3, #84] @ 0x54
  14462. 8006688: f043 0201 orr.w r2, r3, #1
  14463. 800668c: 68fb ldr r3, [r7, #12]
  14464. 800668e: 655a str r2, [r3, #84] @ 0x54
  14465. 8006690: e018 b.n 80066c4 <ADC_DMAConvCplt+0xaa>
  14466. }
  14467. else
  14468. {
  14469. /* DMA End of Transfer interrupt was triggered but conversions sequence
  14470. is not over. If DMACFG is set to 0, conversions are stopped. */
  14471. if (READ_BIT(hadc->Instance->CFGR, ADC_CFGR_DMNGT) == 0UL)
  14472. 8006692: 68fb ldr r3, [r7, #12]
  14473. 8006694: 681b ldr r3, [r3, #0]
  14474. 8006696: 68db ldr r3, [r3, #12]
  14475. 8006698: f003 0303 and.w r3, r3, #3
  14476. 800669c: 2b00 cmp r3, #0
  14477. 800669e: d111 bne.n 80066c4 <ADC_DMAConvCplt+0xaa>
  14478. {
  14479. /* DMACFG bit is not set, conversions are stopped. */
  14480. CLEAR_BIT(hadc->State, HAL_ADC_STATE_REG_BUSY);
  14481. 80066a0: 68fb ldr r3, [r7, #12]
  14482. 80066a2: 6d5b ldr r3, [r3, #84] @ 0x54
  14483. 80066a4: f423 7280 bic.w r2, r3, #256 @ 0x100
  14484. 80066a8: 68fb ldr r3, [r7, #12]
  14485. 80066aa: 655a str r2, [r3, #84] @ 0x54
  14486. if ((hadc->State & HAL_ADC_STATE_INJ_BUSY) == 0UL)
  14487. 80066ac: 68fb ldr r3, [r7, #12]
  14488. 80066ae: 6d5b ldr r3, [r3, #84] @ 0x54
  14489. 80066b0: f403 5380 and.w r3, r3, #4096 @ 0x1000
  14490. 80066b4: 2b00 cmp r3, #0
  14491. 80066b6: d105 bne.n 80066c4 <ADC_DMAConvCplt+0xaa>
  14492. {
  14493. SET_BIT(hadc->State, HAL_ADC_STATE_READY);
  14494. 80066b8: 68fb ldr r3, [r7, #12]
  14495. 80066ba: 6d5b ldr r3, [r3, #84] @ 0x54
  14496. 80066bc: f043 0201 orr.w r2, r3, #1
  14497. 80066c0: 68fb ldr r3, [r7, #12]
  14498. 80066c2: 655a str r2, [r3, #84] @ 0x54
  14499. /* Conversion complete callback */
  14500. #if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)
  14501. hadc->ConvCpltCallback(hadc);
  14502. #else
  14503. HAL_ADC_ConvCpltCallback(hadc);
  14504. 80066c4: 68f8 ldr r0, [r7, #12]
  14505. 80066c6: f7fb f849 bl 800175c <HAL_ADC_ConvCpltCallback>
  14506. {
  14507. /* Call ADC DMA error callback */
  14508. hadc->DMA_Handle->XferErrorCallback(hdma);
  14509. }
  14510. }
  14511. }
  14512. 80066ca: e00e b.n 80066ea <ADC_DMAConvCplt+0xd0>
  14513. if ((hadc->State & HAL_ADC_STATE_ERROR_INTERNAL) != 0UL)
  14514. 80066cc: 68fb ldr r3, [r7, #12]
  14515. 80066ce: 6d5b ldr r3, [r3, #84] @ 0x54
  14516. 80066d0: f003 0310 and.w r3, r3, #16
  14517. 80066d4: 2b00 cmp r3, #0
  14518. 80066d6: d003 beq.n 80066e0 <ADC_DMAConvCplt+0xc6>
  14519. HAL_ADC_ErrorCallback(hadc);
  14520. 80066d8: 68f8 ldr r0, [r7, #12]
  14521. 80066da: f7ff fb4f bl 8005d7c <HAL_ADC_ErrorCallback>
  14522. }
  14523. 80066de: e004 b.n 80066ea <ADC_DMAConvCplt+0xd0>
  14524. hadc->DMA_Handle->XferErrorCallback(hdma);
  14525. 80066e0: 68fb ldr r3, [r7, #12]
  14526. 80066e2: 6cdb ldr r3, [r3, #76] @ 0x4c
  14527. 80066e4: 6cdb ldr r3, [r3, #76] @ 0x4c
  14528. 80066e6: 6878 ldr r0, [r7, #4]
  14529. 80066e8: 4798 blx r3
  14530. }
  14531. 80066ea: bf00 nop
  14532. 80066ec: 3710 adds r7, #16
  14533. 80066ee: 46bd mov sp, r7
  14534. 80066f0: bd80 pop {r7, pc}
  14535. 080066f2 <ADC_DMAHalfConvCplt>:
  14536. * @brief DMA half transfer complete callback.
  14537. * @param hdma pointer to DMA handle.
  14538. * @retval None
  14539. */
  14540. void ADC_DMAHalfConvCplt(DMA_HandleTypeDef *hdma)
  14541. {
  14542. 80066f2: b580 push {r7, lr}
  14543. 80066f4: b084 sub sp, #16
  14544. 80066f6: af00 add r7, sp, #0
  14545. 80066f8: 6078 str r0, [r7, #4]
  14546. /* Retrieve ADC handle corresponding to current DMA handle */
  14547. ADC_HandleTypeDef *hadc = (ADC_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
  14548. 80066fa: 687b ldr r3, [r7, #4]
  14549. 80066fc: 6b9b ldr r3, [r3, #56] @ 0x38
  14550. 80066fe: 60fb str r3, [r7, #12]
  14551. /* Half conversion callback */
  14552. #if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)
  14553. hadc->ConvHalfCpltCallback(hadc);
  14554. #else
  14555. HAL_ADC_ConvHalfCpltCallback(hadc);
  14556. 8006700: 68f8 ldr r0, [r7, #12]
  14557. 8006702: f7ff fb31 bl 8005d68 <HAL_ADC_ConvHalfCpltCallback>
  14558. #endif /* USE_HAL_ADC_REGISTER_CALLBACKS */
  14559. }
  14560. 8006706: bf00 nop
  14561. 8006708: 3710 adds r7, #16
  14562. 800670a: 46bd mov sp, r7
  14563. 800670c: bd80 pop {r7, pc}
  14564. 0800670e <ADC_DMAError>:
  14565. * @brief DMA error callback.
  14566. * @param hdma pointer to DMA handle.
  14567. * @retval None
  14568. */
  14569. void ADC_DMAError(DMA_HandleTypeDef *hdma)
  14570. {
  14571. 800670e: b580 push {r7, lr}
  14572. 8006710: b084 sub sp, #16
  14573. 8006712: af00 add r7, sp, #0
  14574. 8006714: 6078 str r0, [r7, #4]
  14575. /* Retrieve ADC handle corresponding to current DMA handle */
  14576. ADC_HandleTypeDef *hadc = (ADC_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
  14577. 8006716: 687b ldr r3, [r7, #4]
  14578. 8006718: 6b9b ldr r3, [r3, #56] @ 0x38
  14579. 800671a: 60fb str r3, [r7, #12]
  14580. /* Set ADC state */
  14581. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_DMA);
  14582. 800671c: 68fb ldr r3, [r7, #12]
  14583. 800671e: 6d5b ldr r3, [r3, #84] @ 0x54
  14584. 8006720: f043 0240 orr.w r2, r3, #64 @ 0x40
  14585. 8006724: 68fb ldr r3, [r7, #12]
  14586. 8006726: 655a str r2, [r3, #84] @ 0x54
  14587. /* Set ADC error code to DMA error */
  14588. SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_DMA);
  14589. 8006728: 68fb ldr r3, [r7, #12]
  14590. 800672a: 6d9b ldr r3, [r3, #88] @ 0x58
  14591. 800672c: f043 0204 orr.w r2, r3, #4
  14592. 8006730: 68fb ldr r3, [r7, #12]
  14593. 8006732: 659a str r2, [r3, #88] @ 0x58
  14594. /* Error callback */
  14595. #if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)
  14596. hadc->ErrorCallback(hadc);
  14597. #else
  14598. HAL_ADC_ErrorCallback(hadc);
  14599. 8006734: 68f8 ldr r0, [r7, #12]
  14600. 8006736: f7ff fb21 bl 8005d7c <HAL_ADC_ErrorCallback>
  14601. #endif /* USE_HAL_ADC_REGISTER_CALLBACKS */
  14602. }
  14603. 800673a: bf00 nop
  14604. 800673c: 3710 adds r7, #16
  14605. 800673e: 46bd mov sp, r7
  14606. 8006740: bd80 pop {r7, pc}
  14607. ...
  14608. 08006744 <ADC_ConfigureBoostMode>:
  14609. * stopped.
  14610. * @param hadc ADC handle
  14611. * @retval None.
  14612. */
  14613. void ADC_ConfigureBoostMode(ADC_HandleTypeDef *hadc)
  14614. {
  14615. 8006744: b580 push {r7, lr}
  14616. 8006746: b084 sub sp, #16
  14617. 8006748: af00 add r7, sp, #0
  14618. 800674a: 6078 str r0, [r7, #4]
  14619. uint32_t freq;
  14620. if (ADC_IS_SYNCHRONOUS_CLOCK_MODE(hadc))
  14621. 800674c: 687b ldr r3, [r7, #4]
  14622. 800674e: 681b ldr r3, [r3, #0]
  14623. 8006750: 4a7a ldr r2, [pc, #488] @ (800693c <ADC_ConfigureBoostMode+0x1f8>)
  14624. 8006752: 4293 cmp r3, r2
  14625. 8006754: d004 beq.n 8006760 <ADC_ConfigureBoostMode+0x1c>
  14626. 8006756: 687b ldr r3, [r7, #4]
  14627. 8006758: 681b ldr r3, [r3, #0]
  14628. 800675a: 4a79 ldr r2, [pc, #484] @ (8006940 <ADC_ConfigureBoostMode+0x1fc>)
  14629. 800675c: 4293 cmp r3, r2
  14630. 800675e: d109 bne.n 8006774 <ADC_ConfigureBoostMode+0x30>
  14631. 8006760: 4b78 ldr r3, [pc, #480] @ (8006944 <ADC_ConfigureBoostMode+0x200>)
  14632. 8006762: 689b ldr r3, [r3, #8]
  14633. 8006764: f403 3340 and.w r3, r3, #196608 @ 0x30000
  14634. 8006768: 2b00 cmp r3, #0
  14635. 800676a: bf14 ite ne
  14636. 800676c: 2301 movne r3, #1
  14637. 800676e: 2300 moveq r3, #0
  14638. 8006770: b2db uxtb r3, r3
  14639. 8006772: e008 b.n 8006786 <ADC_ConfigureBoostMode+0x42>
  14640. 8006774: 4b74 ldr r3, [pc, #464] @ (8006948 <ADC_ConfigureBoostMode+0x204>)
  14641. 8006776: 689b ldr r3, [r3, #8]
  14642. 8006778: f403 3340 and.w r3, r3, #196608 @ 0x30000
  14643. 800677c: 2b00 cmp r3, #0
  14644. 800677e: bf14 ite ne
  14645. 8006780: 2301 movne r3, #1
  14646. 8006782: 2300 moveq r3, #0
  14647. 8006784: b2db uxtb r3, r3
  14648. 8006786: 2b00 cmp r3, #0
  14649. 8006788: d01c beq.n 80067c4 <ADC_ConfigureBoostMode+0x80>
  14650. {
  14651. freq = HAL_RCC_GetHCLKFreq();
  14652. 800678a: f005 fae9 bl 800bd60 <HAL_RCC_GetHCLKFreq>
  14653. 800678e: 60f8 str r0, [r7, #12]
  14654. switch (hadc->Init.ClockPrescaler)
  14655. 8006790: 687b ldr r3, [r7, #4]
  14656. 8006792: 685b ldr r3, [r3, #4]
  14657. 8006794: f5b3 3f40 cmp.w r3, #196608 @ 0x30000
  14658. 8006798: d010 beq.n 80067bc <ADC_ConfigureBoostMode+0x78>
  14659. 800679a: f5b3 3f40 cmp.w r3, #196608 @ 0x30000
  14660. 800679e: d873 bhi.n 8006888 <ADC_ConfigureBoostMode+0x144>
  14661. 80067a0: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  14662. 80067a4: d002 beq.n 80067ac <ADC_ConfigureBoostMode+0x68>
  14663. 80067a6: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  14664. 80067aa: d16d bne.n 8006888 <ADC_ConfigureBoostMode+0x144>
  14665. {
  14666. case ADC_CLOCK_SYNC_PCLK_DIV1:
  14667. case ADC_CLOCK_SYNC_PCLK_DIV2:
  14668. freq /= (hadc->Init.ClockPrescaler >> ADC_CCR_CKMODE_Pos);
  14669. 80067ac: 687b ldr r3, [r7, #4]
  14670. 80067ae: 685b ldr r3, [r3, #4]
  14671. 80067b0: 0c1b lsrs r3, r3, #16
  14672. 80067b2: 68fa ldr r2, [r7, #12]
  14673. 80067b4: fbb2 f3f3 udiv r3, r2, r3
  14674. 80067b8: 60fb str r3, [r7, #12]
  14675. break;
  14676. 80067ba: e068 b.n 800688e <ADC_ConfigureBoostMode+0x14a>
  14677. case ADC_CLOCK_SYNC_PCLK_DIV4:
  14678. freq /= 4UL;
  14679. 80067bc: 68fb ldr r3, [r7, #12]
  14680. 80067be: 089b lsrs r3, r3, #2
  14681. 80067c0: 60fb str r3, [r7, #12]
  14682. break;
  14683. 80067c2: e064 b.n 800688e <ADC_ConfigureBoostMode+0x14a>
  14684. break;
  14685. }
  14686. }
  14687. else
  14688. {
  14689. freq = HAL_RCCEx_GetPeriphCLKFreq(RCC_PERIPHCLK_ADC);
  14690. 80067c4: f44f 2000 mov.w r0, #524288 @ 0x80000
  14691. 80067c8: f04f 0100 mov.w r1, #0
  14692. 80067cc: f006 fd54 bl 800d278 <HAL_RCCEx_GetPeriphCLKFreq>
  14693. 80067d0: 60f8 str r0, [r7, #12]
  14694. switch (hadc->Init.ClockPrescaler)
  14695. 80067d2: 687b ldr r3, [r7, #4]
  14696. 80067d4: 685b ldr r3, [r3, #4]
  14697. 80067d6: f5b3 1f30 cmp.w r3, #2883584 @ 0x2c0000
  14698. 80067da: d051 beq.n 8006880 <ADC_ConfigureBoostMode+0x13c>
  14699. 80067dc: f5b3 1f30 cmp.w r3, #2883584 @ 0x2c0000
  14700. 80067e0: d854 bhi.n 800688c <ADC_ConfigureBoostMode+0x148>
  14701. 80067e2: f5b3 1f20 cmp.w r3, #2621440 @ 0x280000
  14702. 80067e6: d047 beq.n 8006878 <ADC_ConfigureBoostMode+0x134>
  14703. 80067e8: f5b3 1f20 cmp.w r3, #2621440 @ 0x280000
  14704. 80067ec: d84e bhi.n 800688c <ADC_ConfigureBoostMode+0x148>
  14705. 80067ee: f5b3 1f10 cmp.w r3, #2359296 @ 0x240000
  14706. 80067f2: d03d beq.n 8006870 <ADC_ConfigureBoostMode+0x12c>
  14707. 80067f4: f5b3 1f10 cmp.w r3, #2359296 @ 0x240000
  14708. 80067f8: d848 bhi.n 800688c <ADC_ConfigureBoostMode+0x148>
  14709. 80067fa: f5b3 1f00 cmp.w r3, #2097152 @ 0x200000
  14710. 80067fe: d033 beq.n 8006868 <ADC_ConfigureBoostMode+0x124>
  14711. 8006800: f5b3 1f00 cmp.w r3, #2097152 @ 0x200000
  14712. 8006804: d842 bhi.n 800688c <ADC_ConfigureBoostMode+0x148>
  14713. 8006806: f5b3 1fe0 cmp.w r3, #1835008 @ 0x1c0000
  14714. 800680a: d029 beq.n 8006860 <ADC_ConfigureBoostMode+0x11c>
  14715. 800680c: f5b3 1fe0 cmp.w r3, #1835008 @ 0x1c0000
  14716. 8006810: d83c bhi.n 800688c <ADC_ConfigureBoostMode+0x148>
  14717. 8006812: f5b3 1fc0 cmp.w r3, #1572864 @ 0x180000
  14718. 8006816: d01a beq.n 800684e <ADC_ConfigureBoostMode+0x10a>
  14719. 8006818: f5b3 1fc0 cmp.w r3, #1572864 @ 0x180000
  14720. 800681c: d836 bhi.n 800688c <ADC_ConfigureBoostMode+0x148>
  14721. 800681e: f5b3 1fa0 cmp.w r3, #1310720 @ 0x140000
  14722. 8006822: d014 beq.n 800684e <ADC_ConfigureBoostMode+0x10a>
  14723. 8006824: f5b3 1fa0 cmp.w r3, #1310720 @ 0x140000
  14724. 8006828: d830 bhi.n 800688c <ADC_ConfigureBoostMode+0x148>
  14725. 800682a: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
  14726. 800682e: d00e beq.n 800684e <ADC_ConfigureBoostMode+0x10a>
  14727. 8006830: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
  14728. 8006834: d82a bhi.n 800688c <ADC_ConfigureBoostMode+0x148>
  14729. 8006836: f5b3 2f40 cmp.w r3, #786432 @ 0xc0000
  14730. 800683a: d008 beq.n 800684e <ADC_ConfigureBoostMode+0x10a>
  14731. 800683c: f5b3 2f40 cmp.w r3, #786432 @ 0xc0000
  14732. 8006840: d824 bhi.n 800688c <ADC_ConfigureBoostMode+0x148>
  14733. 8006842: f5b3 2f80 cmp.w r3, #262144 @ 0x40000
  14734. 8006846: d002 beq.n 800684e <ADC_ConfigureBoostMode+0x10a>
  14735. 8006848: f5b3 2f00 cmp.w r3, #524288 @ 0x80000
  14736. 800684c: d11e bne.n 800688c <ADC_ConfigureBoostMode+0x148>
  14737. case ADC_CLOCK_ASYNC_DIV4:
  14738. case ADC_CLOCK_ASYNC_DIV6:
  14739. case ADC_CLOCK_ASYNC_DIV8:
  14740. case ADC_CLOCK_ASYNC_DIV10:
  14741. case ADC_CLOCK_ASYNC_DIV12:
  14742. freq /= ((hadc->Init.ClockPrescaler >> ADC_CCR_PRESC_Pos) << 1UL);
  14743. 800684e: 687b ldr r3, [r7, #4]
  14744. 8006850: 685b ldr r3, [r3, #4]
  14745. 8006852: 0c9b lsrs r3, r3, #18
  14746. 8006854: 005b lsls r3, r3, #1
  14747. 8006856: 68fa ldr r2, [r7, #12]
  14748. 8006858: fbb2 f3f3 udiv r3, r2, r3
  14749. 800685c: 60fb str r3, [r7, #12]
  14750. break;
  14751. 800685e: e016 b.n 800688e <ADC_ConfigureBoostMode+0x14a>
  14752. case ADC_CLOCK_ASYNC_DIV16:
  14753. freq /= 16UL;
  14754. 8006860: 68fb ldr r3, [r7, #12]
  14755. 8006862: 091b lsrs r3, r3, #4
  14756. 8006864: 60fb str r3, [r7, #12]
  14757. break;
  14758. 8006866: e012 b.n 800688e <ADC_ConfigureBoostMode+0x14a>
  14759. case ADC_CLOCK_ASYNC_DIV32:
  14760. freq /= 32UL;
  14761. 8006868: 68fb ldr r3, [r7, #12]
  14762. 800686a: 095b lsrs r3, r3, #5
  14763. 800686c: 60fb str r3, [r7, #12]
  14764. break;
  14765. 800686e: e00e b.n 800688e <ADC_ConfigureBoostMode+0x14a>
  14766. case ADC_CLOCK_ASYNC_DIV64:
  14767. freq /= 64UL;
  14768. 8006870: 68fb ldr r3, [r7, #12]
  14769. 8006872: 099b lsrs r3, r3, #6
  14770. 8006874: 60fb str r3, [r7, #12]
  14771. break;
  14772. 8006876: e00a b.n 800688e <ADC_ConfigureBoostMode+0x14a>
  14773. case ADC_CLOCK_ASYNC_DIV128:
  14774. freq /= 128UL;
  14775. 8006878: 68fb ldr r3, [r7, #12]
  14776. 800687a: 09db lsrs r3, r3, #7
  14777. 800687c: 60fb str r3, [r7, #12]
  14778. break;
  14779. 800687e: e006 b.n 800688e <ADC_ConfigureBoostMode+0x14a>
  14780. case ADC_CLOCK_ASYNC_DIV256:
  14781. freq /= 256UL;
  14782. 8006880: 68fb ldr r3, [r7, #12]
  14783. 8006882: 0a1b lsrs r3, r3, #8
  14784. 8006884: 60fb str r3, [r7, #12]
  14785. break;
  14786. 8006886: e002 b.n 800688e <ADC_ConfigureBoostMode+0x14a>
  14787. break;
  14788. 8006888: bf00 nop
  14789. 800688a: e000 b.n 800688e <ADC_ConfigureBoostMode+0x14a>
  14790. default:
  14791. break;
  14792. 800688c: bf00 nop
  14793. else /* if(freq > 25000000UL) */
  14794. {
  14795. MODIFY_REG(hadc->Instance->CR, ADC_CR_BOOST, ADC_CR_BOOST_1 | ADC_CR_BOOST_0);
  14796. }
  14797. #else
  14798. if (HAL_GetREVID() <= REV_ID_Y) /* STM32H7 silicon Rev.Y */
  14799. 800688e: f7fe fdb1 bl 80053f4 <HAL_GetREVID>
  14800. 8006892: 4603 mov r3, r0
  14801. 8006894: f241 0203 movw r2, #4099 @ 0x1003
  14802. 8006898: 4293 cmp r3, r2
  14803. 800689a: d815 bhi.n 80068c8 <ADC_ConfigureBoostMode+0x184>
  14804. {
  14805. if (freq > 20000000UL)
  14806. 800689c: 68fb ldr r3, [r7, #12]
  14807. 800689e: 4a2b ldr r2, [pc, #172] @ (800694c <ADC_ConfigureBoostMode+0x208>)
  14808. 80068a0: 4293 cmp r3, r2
  14809. 80068a2: d908 bls.n 80068b6 <ADC_ConfigureBoostMode+0x172>
  14810. {
  14811. SET_BIT(hadc->Instance->CR, ADC_CR_BOOST_0);
  14812. 80068a4: 687b ldr r3, [r7, #4]
  14813. 80068a6: 681b ldr r3, [r3, #0]
  14814. 80068a8: 689a ldr r2, [r3, #8]
  14815. 80068aa: 687b ldr r3, [r7, #4]
  14816. 80068ac: 681b ldr r3, [r3, #0]
  14817. 80068ae: f442 7280 orr.w r2, r2, #256 @ 0x100
  14818. 80068b2: 609a str r2, [r3, #8]
  14819. {
  14820. MODIFY_REG(hadc->Instance->CR, ADC_CR_BOOST, ADC_CR_BOOST_1 | ADC_CR_BOOST_0);
  14821. }
  14822. }
  14823. #endif /* ADC_VER_V5_3 */
  14824. }
  14825. 80068b4: e03e b.n 8006934 <ADC_ConfigureBoostMode+0x1f0>
  14826. CLEAR_BIT(hadc->Instance->CR, ADC_CR_BOOST_0);
  14827. 80068b6: 687b ldr r3, [r7, #4]
  14828. 80068b8: 681b ldr r3, [r3, #0]
  14829. 80068ba: 689a ldr r2, [r3, #8]
  14830. 80068bc: 687b ldr r3, [r7, #4]
  14831. 80068be: 681b ldr r3, [r3, #0]
  14832. 80068c0: f422 7280 bic.w r2, r2, #256 @ 0x100
  14833. 80068c4: 609a str r2, [r3, #8]
  14834. }
  14835. 80068c6: e035 b.n 8006934 <ADC_ConfigureBoostMode+0x1f0>
  14836. freq /= 2U; /* divider by 2 for Rev.V */
  14837. 80068c8: 68fb ldr r3, [r7, #12]
  14838. 80068ca: 085b lsrs r3, r3, #1
  14839. 80068cc: 60fb str r3, [r7, #12]
  14840. if (freq <= 6250000UL)
  14841. 80068ce: 68fb ldr r3, [r7, #12]
  14842. 80068d0: 4a1f ldr r2, [pc, #124] @ (8006950 <ADC_ConfigureBoostMode+0x20c>)
  14843. 80068d2: 4293 cmp r3, r2
  14844. 80068d4: d808 bhi.n 80068e8 <ADC_ConfigureBoostMode+0x1a4>
  14845. MODIFY_REG(hadc->Instance->CR, ADC_CR_BOOST, 0UL);
  14846. 80068d6: 687b ldr r3, [r7, #4]
  14847. 80068d8: 681b ldr r3, [r3, #0]
  14848. 80068da: 689a ldr r2, [r3, #8]
  14849. 80068dc: 687b ldr r3, [r7, #4]
  14850. 80068de: 681b ldr r3, [r3, #0]
  14851. 80068e0: f422 7240 bic.w r2, r2, #768 @ 0x300
  14852. 80068e4: 609a str r2, [r3, #8]
  14853. }
  14854. 80068e6: e025 b.n 8006934 <ADC_ConfigureBoostMode+0x1f0>
  14855. else if (freq <= 12500000UL)
  14856. 80068e8: 68fb ldr r3, [r7, #12]
  14857. 80068ea: 4a1a ldr r2, [pc, #104] @ (8006954 <ADC_ConfigureBoostMode+0x210>)
  14858. 80068ec: 4293 cmp r3, r2
  14859. 80068ee: d80a bhi.n 8006906 <ADC_ConfigureBoostMode+0x1c2>
  14860. MODIFY_REG(hadc->Instance->CR, ADC_CR_BOOST, ADC_CR_BOOST_0);
  14861. 80068f0: 687b ldr r3, [r7, #4]
  14862. 80068f2: 681b ldr r3, [r3, #0]
  14863. 80068f4: 689b ldr r3, [r3, #8]
  14864. 80068f6: f423 7240 bic.w r2, r3, #768 @ 0x300
  14865. 80068fa: 687b ldr r3, [r7, #4]
  14866. 80068fc: 681b ldr r3, [r3, #0]
  14867. 80068fe: f442 7280 orr.w r2, r2, #256 @ 0x100
  14868. 8006902: 609a str r2, [r3, #8]
  14869. }
  14870. 8006904: e016 b.n 8006934 <ADC_ConfigureBoostMode+0x1f0>
  14871. else if (freq <= 25000000UL)
  14872. 8006906: 68fb ldr r3, [r7, #12]
  14873. 8006908: 4a13 ldr r2, [pc, #76] @ (8006958 <ADC_ConfigureBoostMode+0x214>)
  14874. 800690a: 4293 cmp r3, r2
  14875. 800690c: d80a bhi.n 8006924 <ADC_ConfigureBoostMode+0x1e0>
  14876. MODIFY_REG(hadc->Instance->CR, ADC_CR_BOOST, ADC_CR_BOOST_1);
  14877. 800690e: 687b ldr r3, [r7, #4]
  14878. 8006910: 681b ldr r3, [r3, #0]
  14879. 8006912: 689b ldr r3, [r3, #8]
  14880. 8006914: f423 7240 bic.w r2, r3, #768 @ 0x300
  14881. 8006918: 687b ldr r3, [r7, #4]
  14882. 800691a: 681b ldr r3, [r3, #0]
  14883. 800691c: f442 7200 orr.w r2, r2, #512 @ 0x200
  14884. 8006920: 609a str r2, [r3, #8]
  14885. }
  14886. 8006922: e007 b.n 8006934 <ADC_ConfigureBoostMode+0x1f0>
  14887. MODIFY_REG(hadc->Instance->CR, ADC_CR_BOOST, ADC_CR_BOOST_1 | ADC_CR_BOOST_0);
  14888. 8006924: 687b ldr r3, [r7, #4]
  14889. 8006926: 681b ldr r3, [r3, #0]
  14890. 8006928: 689a ldr r2, [r3, #8]
  14891. 800692a: 687b ldr r3, [r7, #4]
  14892. 800692c: 681b ldr r3, [r3, #0]
  14893. 800692e: f442 7240 orr.w r2, r2, #768 @ 0x300
  14894. 8006932: 609a str r2, [r3, #8]
  14895. }
  14896. 8006934: bf00 nop
  14897. 8006936: 3710 adds r7, #16
  14898. 8006938: 46bd mov sp, r7
  14899. 800693a: bd80 pop {r7, pc}
  14900. 800693c: 40022000 .word 0x40022000
  14901. 8006940: 40022100 .word 0x40022100
  14902. 8006944: 40022300 .word 0x40022300
  14903. 8006948: 58026300 .word 0x58026300
  14904. 800694c: 01312d00 .word 0x01312d00
  14905. 8006950: 005f5e10 .word 0x005f5e10
  14906. 8006954: 00bebc20 .word 0x00bebc20
  14907. 8006958: 017d7840 .word 0x017d7840
  14908. 0800695c <LL_ADC_IsEnabled>:
  14909. {
  14910. 800695c: b480 push {r7}
  14911. 800695e: b083 sub sp, #12
  14912. 8006960: af00 add r7, sp, #0
  14913. 8006962: 6078 str r0, [r7, #4]
  14914. return ((READ_BIT(ADCx->CR, ADC_CR_ADEN) == (ADC_CR_ADEN)) ? 1UL : 0UL);
  14915. 8006964: 687b ldr r3, [r7, #4]
  14916. 8006966: 689b ldr r3, [r3, #8]
  14917. 8006968: f003 0301 and.w r3, r3, #1
  14918. 800696c: 2b01 cmp r3, #1
  14919. 800696e: d101 bne.n 8006974 <LL_ADC_IsEnabled+0x18>
  14920. 8006970: 2301 movs r3, #1
  14921. 8006972: e000 b.n 8006976 <LL_ADC_IsEnabled+0x1a>
  14922. 8006974: 2300 movs r3, #0
  14923. }
  14924. 8006976: 4618 mov r0, r3
  14925. 8006978: 370c adds r7, #12
  14926. 800697a: 46bd mov sp, r7
  14927. 800697c: f85d 7b04 ldr.w r7, [sp], #4
  14928. 8006980: 4770 bx lr
  14929. ...
  14930. 08006984 <LL_ADC_StartCalibration>:
  14931. {
  14932. 8006984: b480 push {r7}
  14933. 8006986: b085 sub sp, #20
  14934. 8006988: af00 add r7, sp, #0
  14935. 800698a: 60f8 str r0, [r7, #12]
  14936. 800698c: 60b9 str r1, [r7, #8]
  14937. 800698e: 607a str r2, [r7, #4]
  14938. MODIFY_REG(ADCx->CR,
  14939. 8006990: 68fb ldr r3, [r7, #12]
  14940. 8006992: 689a ldr r2, [r3, #8]
  14941. 8006994: 4b09 ldr r3, [pc, #36] @ (80069bc <LL_ADC_StartCalibration+0x38>)
  14942. 8006996: 4013 ands r3, r2
  14943. 8006998: 68ba ldr r2, [r7, #8]
  14944. 800699a: f402 3180 and.w r1, r2, #65536 @ 0x10000
  14945. 800699e: 687a ldr r2, [r7, #4]
  14946. 80069a0: f002 4280 and.w r2, r2, #1073741824 @ 0x40000000
  14947. 80069a4: 430a orrs r2, r1
  14948. 80069a6: 4313 orrs r3, r2
  14949. 80069a8: f043 4200 orr.w r2, r3, #2147483648 @ 0x80000000
  14950. 80069ac: 68fb ldr r3, [r7, #12]
  14951. 80069ae: 609a str r2, [r3, #8]
  14952. }
  14953. 80069b0: bf00 nop
  14954. 80069b2: 3714 adds r7, #20
  14955. 80069b4: 46bd mov sp, r7
  14956. 80069b6: f85d 7b04 ldr.w r7, [sp], #4
  14957. 80069ba: 4770 bx lr
  14958. 80069bc: 3ffeffc0 .word 0x3ffeffc0
  14959. 080069c0 <LL_ADC_IsCalibrationOnGoing>:
  14960. {
  14961. 80069c0: b480 push {r7}
  14962. 80069c2: b083 sub sp, #12
  14963. 80069c4: af00 add r7, sp, #0
  14964. 80069c6: 6078 str r0, [r7, #4]
  14965. return ((READ_BIT(ADCx->CR, ADC_CR_ADCAL) == (ADC_CR_ADCAL)) ? 1UL : 0UL);
  14966. 80069c8: 687b ldr r3, [r7, #4]
  14967. 80069ca: 689b ldr r3, [r3, #8]
  14968. 80069cc: f003 4300 and.w r3, r3, #2147483648 @ 0x80000000
  14969. 80069d0: f1b3 4f00 cmp.w r3, #2147483648 @ 0x80000000
  14970. 80069d4: d101 bne.n 80069da <LL_ADC_IsCalibrationOnGoing+0x1a>
  14971. 80069d6: 2301 movs r3, #1
  14972. 80069d8: e000 b.n 80069dc <LL_ADC_IsCalibrationOnGoing+0x1c>
  14973. 80069da: 2300 movs r3, #0
  14974. }
  14975. 80069dc: 4618 mov r0, r3
  14976. 80069de: 370c adds r7, #12
  14977. 80069e0: 46bd mov sp, r7
  14978. 80069e2: f85d 7b04 ldr.w r7, [sp], #4
  14979. 80069e6: 4770 bx lr
  14980. 080069e8 <LL_ADC_REG_IsConversionOngoing>:
  14981. {
  14982. 80069e8: b480 push {r7}
  14983. 80069ea: b083 sub sp, #12
  14984. 80069ec: af00 add r7, sp, #0
  14985. 80069ee: 6078 str r0, [r7, #4]
  14986. return ((READ_BIT(ADCx->CR, ADC_CR_ADSTART) == (ADC_CR_ADSTART)) ? 1UL : 0UL);
  14987. 80069f0: 687b ldr r3, [r7, #4]
  14988. 80069f2: 689b ldr r3, [r3, #8]
  14989. 80069f4: f003 0304 and.w r3, r3, #4
  14990. 80069f8: 2b04 cmp r3, #4
  14991. 80069fa: d101 bne.n 8006a00 <LL_ADC_REG_IsConversionOngoing+0x18>
  14992. 80069fc: 2301 movs r3, #1
  14993. 80069fe: e000 b.n 8006a02 <LL_ADC_REG_IsConversionOngoing+0x1a>
  14994. 8006a00: 2300 movs r3, #0
  14995. }
  14996. 8006a02: 4618 mov r0, r3
  14997. 8006a04: 370c adds r7, #12
  14998. 8006a06: 46bd mov sp, r7
  14999. 8006a08: f85d 7b04 ldr.w r7, [sp], #4
  15000. 8006a0c: 4770 bx lr
  15001. ...
  15002. 08006a10 <HAL_ADCEx_Calibration_Start>:
  15003. * @arg @ref ADC_SINGLE_ENDED Channel in mode input single ended
  15004. * @arg @ref ADC_DIFFERENTIAL_ENDED Channel in mode input differential ended
  15005. * @retval HAL status
  15006. */
  15007. HAL_StatusTypeDef HAL_ADCEx_Calibration_Start(ADC_HandleTypeDef *hadc, uint32_t CalibrationMode, uint32_t SingleDiff)
  15008. {
  15009. 8006a10: b580 push {r7, lr}
  15010. 8006a12: b086 sub sp, #24
  15011. 8006a14: af00 add r7, sp, #0
  15012. 8006a16: 60f8 str r0, [r7, #12]
  15013. 8006a18: 60b9 str r1, [r7, #8]
  15014. 8006a1a: 607a str r2, [r7, #4]
  15015. HAL_StatusTypeDef tmp_hal_status;
  15016. __IO uint32_t wait_loop_index = 0UL;
  15017. 8006a1c: 2300 movs r3, #0
  15018. 8006a1e: 613b str r3, [r7, #16]
  15019. /* Check the parameters */
  15020. assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
  15021. assert_param(IS_ADC_SINGLE_DIFFERENTIAL(SingleDiff));
  15022. /* Process locked */
  15023. __HAL_LOCK(hadc);
  15024. 8006a20: 68fb ldr r3, [r7, #12]
  15025. 8006a22: f893 3050 ldrb.w r3, [r3, #80] @ 0x50
  15026. 8006a26: 2b01 cmp r3, #1
  15027. 8006a28: d101 bne.n 8006a2e <HAL_ADCEx_Calibration_Start+0x1e>
  15028. 8006a2a: 2302 movs r3, #2
  15029. 8006a2c: e04c b.n 8006ac8 <HAL_ADCEx_Calibration_Start+0xb8>
  15030. 8006a2e: 68fb ldr r3, [r7, #12]
  15031. 8006a30: 2201 movs r2, #1
  15032. 8006a32: f883 2050 strb.w r2, [r3, #80] @ 0x50
  15033. /* Calibration prerequisite: ADC must be disabled. */
  15034. /* Disable the ADC (if not already disabled) */
  15035. tmp_hal_status = ADC_Disable(hadc);
  15036. 8006a36: 68f8 ldr r0, [r7, #12]
  15037. 8006a38: f7ff fd90 bl 800655c <ADC_Disable>
  15038. 8006a3c: 4603 mov r3, r0
  15039. 8006a3e: 75fb strb r3, [r7, #23]
  15040. /* Check if ADC is effectively disabled */
  15041. if (tmp_hal_status == HAL_OK)
  15042. 8006a40: 7dfb ldrb r3, [r7, #23]
  15043. 8006a42: 2b00 cmp r3, #0
  15044. 8006a44: d135 bne.n 8006ab2 <HAL_ADCEx_Calibration_Start+0xa2>
  15045. {
  15046. /* Set ADC state */
  15047. ADC_STATE_CLR_SET(hadc->State,
  15048. 8006a46: 68fb ldr r3, [r7, #12]
  15049. 8006a48: 6d5a ldr r2, [r3, #84] @ 0x54
  15050. 8006a4a: 4b21 ldr r3, [pc, #132] @ (8006ad0 <HAL_ADCEx_Calibration_Start+0xc0>)
  15051. 8006a4c: 4013 ands r3, r2
  15052. 8006a4e: f043 0202 orr.w r2, r3, #2
  15053. 8006a52: 68fb ldr r3, [r7, #12]
  15054. 8006a54: 655a str r2, [r3, #84] @ 0x54
  15055. HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY,
  15056. HAL_ADC_STATE_BUSY_INTERNAL);
  15057. /* Start ADC calibration in mode single-ended or differential */
  15058. LL_ADC_StartCalibration(hadc->Instance, CalibrationMode, SingleDiff);
  15059. 8006a56: 68fb ldr r3, [r7, #12]
  15060. 8006a58: 681b ldr r3, [r3, #0]
  15061. 8006a5a: 687a ldr r2, [r7, #4]
  15062. 8006a5c: 68b9 ldr r1, [r7, #8]
  15063. 8006a5e: 4618 mov r0, r3
  15064. 8006a60: f7ff ff90 bl 8006984 <LL_ADC_StartCalibration>
  15065. /* Wait for calibration completion */
  15066. while (LL_ADC_IsCalibrationOnGoing(hadc->Instance) != 0UL)
  15067. 8006a64: e014 b.n 8006a90 <HAL_ADCEx_Calibration_Start+0x80>
  15068. {
  15069. wait_loop_index++;
  15070. 8006a66: 693b ldr r3, [r7, #16]
  15071. 8006a68: 3301 adds r3, #1
  15072. 8006a6a: 613b str r3, [r7, #16]
  15073. if (wait_loop_index >= ADC_CALIBRATION_TIMEOUT)
  15074. 8006a6c: 693b ldr r3, [r7, #16]
  15075. 8006a6e: 4a19 ldr r2, [pc, #100] @ (8006ad4 <HAL_ADCEx_Calibration_Start+0xc4>)
  15076. 8006a70: 4293 cmp r3, r2
  15077. 8006a72: d30d bcc.n 8006a90 <HAL_ADCEx_Calibration_Start+0x80>
  15078. {
  15079. /* Update ADC state machine to error */
  15080. ADC_STATE_CLR_SET(hadc->State,
  15081. 8006a74: 68fb ldr r3, [r7, #12]
  15082. 8006a76: 6d5b ldr r3, [r3, #84] @ 0x54
  15083. 8006a78: f023 0312 bic.w r3, r3, #18
  15084. 8006a7c: f043 0210 orr.w r2, r3, #16
  15085. 8006a80: 68fb ldr r3, [r7, #12]
  15086. 8006a82: 655a str r2, [r3, #84] @ 0x54
  15087. HAL_ADC_STATE_BUSY_INTERNAL,
  15088. HAL_ADC_STATE_ERROR_INTERNAL);
  15089. /* Process unlocked */
  15090. __HAL_UNLOCK(hadc);
  15091. 8006a84: 68fb ldr r3, [r7, #12]
  15092. 8006a86: 2200 movs r2, #0
  15093. 8006a88: f883 2050 strb.w r2, [r3, #80] @ 0x50
  15094. return HAL_ERROR;
  15095. 8006a8c: 2301 movs r3, #1
  15096. 8006a8e: e01b b.n 8006ac8 <HAL_ADCEx_Calibration_Start+0xb8>
  15097. while (LL_ADC_IsCalibrationOnGoing(hadc->Instance) != 0UL)
  15098. 8006a90: 68fb ldr r3, [r7, #12]
  15099. 8006a92: 681b ldr r3, [r3, #0]
  15100. 8006a94: 4618 mov r0, r3
  15101. 8006a96: f7ff ff93 bl 80069c0 <LL_ADC_IsCalibrationOnGoing>
  15102. 8006a9a: 4603 mov r3, r0
  15103. 8006a9c: 2b00 cmp r3, #0
  15104. 8006a9e: d1e2 bne.n 8006a66 <HAL_ADCEx_Calibration_Start+0x56>
  15105. }
  15106. }
  15107. /* Set ADC state */
  15108. ADC_STATE_CLR_SET(hadc->State,
  15109. 8006aa0: 68fb ldr r3, [r7, #12]
  15110. 8006aa2: 6d5b ldr r3, [r3, #84] @ 0x54
  15111. 8006aa4: f023 0303 bic.w r3, r3, #3
  15112. 8006aa8: f043 0201 orr.w r2, r3, #1
  15113. 8006aac: 68fb ldr r3, [r7, #12]
  15114. 8006aae: 655a str r2, [r3, #84] @ 0x54
  15115. 8006ab0: e005 b.n 8006abe <HAL_ADCEx_Calibration_Start+0xae>
  15116. HAL_ADC_STATE_BUSY_INTERNAL,
  15117. HAL_ADC_STATE_READY);
  15118. }
  15119. else
  15120. {
  15121. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
  15122. 8006ab2: 68fb ldr r3, [r7, #12]
  15123. 8006ab4: 6d5b ldr r3, [r3, #84] @ 0x54
  15124. 8006ab6: f043 0210 orr.w r2, r3, #16
  15125. 8006aba: 68fb ldr r3, [r7, #12]
  15126. 8006abc: 655a str r2, [r3, #84] @ 0x54
  15127. /* Note: No need to update variable "tmp_hal_status" here: already set */
  15128. /* to state "HAL_ERROR" by function disabling the ADC. */
  15129. }
  15130. /* Process unlocked */
  15131. __HAL_UNLOCK(hadc);
  15132. 8006abe: 68fb ldr r3, [r7, #12]
  15133. 8006ac0: 2200 movs r2, #0
  15134. 8006ac2: f883 2050 strb.w r2, [r3, #80] @ 0x50
  15135. /* Return function status */
  15136. return tmp_hal_status;
  15137. 8006ac6: 7dfb ldrb r3, [r7, #23]
  15138. }
  15139. 8006ac8: 4618 mov r0, r3
  15140. 8006aca: 3718 adds r7, #24
  15141. 8006acc: 46bd mov sp, r7
  15142. 8006ace: bd80 pop {r7, pc}
  15143. 8006ad0: ffffeefd .word 0xffffeefd
  15144. 8006ad4: 25c3f800 .word 0x25c3f800
  15145. 08006ad8 <HAL_ADCEx_MultiModeConfigChannel>:
  15146. * @param hadc Master ADC handle
  15147. * @param multimode Structure of ADC multimode configuration
  15148. * @retval HAL status
  15149. */
  15150. HAL_StatusTypeDef HAL_ADCEx_MultiModeConfigChannel(ADC_HandleTypeDef *hadc, ADC_MultiModeTypeDef *multimode)
  15151. {
  15152. 8006ad8: b590 push {r4, r7, lr}
  15153. 8006ada: b09f sub sp, #124 @ 0x7c
  15154. 8006adc: af00 add r7, sp, #0
  15155. 8006ade: 6078 str r0, [r7, #4]
  15156. 8006ae0: 6039 str r1, [r7, #0]
  15157. HAL_StatusTypeDef tmp_hal_status = HAL_OK;
  15158. 8006ae2: 2300 movs r3, #0
  15159. 8006ae4: f887 3077 strb.w r3, [r7, #119] @ 0x77
  15160. assert_param(IS_ADC_DUAL_DATA_MODE(multimode->DualModeData));
  15161. assert_param(IS_ADC_SAMPLING_DELAY(multimode->TwoSamplingDelay));
  15162. }
  15163. /* Process locked */
  15164. __HAL_LOCK(hadc);
  15165. 8006ae8: 687b ldr r3, [r7, #4]
  15166. 8006aea: f893 3050 ldrb.w r3, [r3, #80] @ 0x50
  15167. 8006aee: 2b01 cmp r3, #1
  15168. 8006af0: d101 bne.n 8006af6 <HAL_ADCEx_MultiModeConfigChannel+0x1e>
  15169. 8006af2: 2302 movs r3, #2
  15170. 8006af4: e0be b.n 8006c74 <HAL_ADCEx_MultiModeConfigChannel+0x19c>
  15171. 8006af6: 687b ldr r3, [r7, #4]
  15172. 8006af8: 2201 movs r2, #1
  15173. 8006afa: f883 2050 strb.w r2, [r3, #80] @ 0x50
  15174. tmphadcSlave.State = HAL_ADC_STATE_RESET;
  15175. 8006afe: 2300 movs r3, #0
  15176. 8006b00: 65fb str r3, [r7, #92] @ 0x5c
  15177. tmphadcSlave.ErrorCode = HAL_ADC_ERROR_NONE;
  15178. 8006b02: 2300 movs r3, #0
  15179. 8006b04: 663b str r3, [r7, #96] @ 0x60
  15180. ADC_MULTI_SLAVE(hadc, &tmphadcSlave);
  15181. 8006b06: 687b ldr r3, [r7, #4]
  15182. 8006b08: 681b ldr r3, [r3, #0]
  15183. 8006b0a: 4a5c ldr r2, [pc, #368] @ (8006c7c <HAL_ADCEx_MultiModeConfigChannel+0x1a4>)
  15184. 8006b0c: 4293 cmp r3, r2
  15185. 8006b0e: d102 bne.n 8006b16 <HAL_ADCEx_MultiModeConfigChannel+0x3e>
  15186. 8006b10: 4b5b ldr r3, [pc, #364] @ (8006c80 <HAL_ADCEx_MultiModeConfigChannel+0x1a8>)
  15187. 8006b12: 60bb str r3, [r7, #8]
  15188. 8006b14: e001 b.n 8006b1a <HAL_ADCEx_MultiModeConfigChannel+0x42>
  15189. 8006b16: 2300 movs r3, #0
  15190. 8006b18: 60bb str r3, [r7, #8]
  15191. if (tmphadcSlave.Instance == NULL)
  15192. 8006b1a: 68bb ldr r3, [r7, #8]
  15193. 8006b1c: 2b00 cmp r3, #0
  15194. 8006b1e: d10b bne.n 8006b38 <HAL_ADCEx_MultiModeConfigChannel+0x60>
  15195. {
  15196. /* Update ADC state machine to error */
  15197. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);
  15198. 8006b20: 687b ldr r3, [r7, #4]
  15199. 8006b22: 6d5b ldr r3, [r3, #84] @ 0x54
  15200. 8006b24: f043 0220 orr.w r2, r3, #32
  15201. 8006b28: 687b ldr r3, [r7, #4]
  15202. 8006b2a: 655a str r2, [r3, #84] @ 0x54
  15203. /* Process unlocked */
  15204. __HAL_UNLOCK(hadc);
  15205. 8006b2c: 687b ldr r3, [r7, #4]
  15206. 8006b2e: 2200 movs r2, #0
  15207. 8006b30: f883 2050 strb.w r2, [r3, #80] @ 0x50
  15208. return HAL_ERROR;
  15209. 8006b34: 2301 movs r3, #1
  15210. 8006b36: e09d b.n 8006c74 <HAL_ADCEx_MultiModeConfigChannel+0x19c>
  15211. /* Parameters update conditioned to ADC state: */
  15212. /* Parameters that can be updated when ADC is disabled or enabled without */
  15213. /* conversion on going on regular group: */
  15214. /* - Multimode DATA Format configuration */
  15215. tmphadcSlave_conversion_on_going = LL_ADC_REG_IsConversionOngoing((&tmphadcSlave)->Instance);
  15216. 8006b38: 68bb ldr r3, [r7, #8]
  15217. 8006b3a: 4618 mov r0, r3
  15218. 8006b3c: f7ff ff54 bl 80069e8 <LL_ADC_REG_IsConversionOngoing>
  15219. 8006b40: 6738 str r0, [r7, #112] @ 0x70
  15220. if ((LL_ADC_REG_IsConversionOngoing(hadc->Instance) == 0UL)
  15221. 8006b42: 687b ldr r3, [r7, #4]
  15222. 8006b44: 681b ldr r3, [r3, #0]
  15223. 8006b46: 4618 mov r0, r3
  15224. 8006b48: f7ff ff4e bl 80069e8 <LL_ADC_REG_IsConversionOngoing>
  15225. 8006b4c: 4603 mov r3, r0
  15226. 8006b4e: 2b00 cmp r3, #0
  15227. 8006b50: d17f bne.n 8006c52 <HAL_ADCEx_MultiModeConfigChannel+0x17a>
  15228. && (tmphadcSlave_conversion_on_going == 0UL))
  15229. 8006b52: 6f3b ldr r3, [r7, #112] @ 0x70
  15230. 8006b54: 2b00 cmp r3, #0
  15231. 8006b56: d17c bne.n 8006c52 <HAL_ADCEx_MultiModeConfigChannel+0x17a>
  15232. {
  15233. /* Pointer to the common control register */
  15234. tmpADC_Common = __LL_ADC_COMMON_INSTANCE(hadc->Instance);
  15235. 8006b58: 687b ldr r3, [r7, #4]
  15236. 8006b5a: 681b ldr r3, [r3, #0]
  15237. 8006b5c: 4a47 ldr r2, [pc, #284] @ (8006c7c <HAL_ADCEx_MultiModeConfigChannel+0x1a4>)
  15238. 8006b5e: 4293 cmp r3, r2
  15239. 8006b60: d004 beq.n 8006b6c <HAL_ADCEx_MultiModeConfigChannel+0x94>
  15240. 8006b62: 687b ldr r3, [r7, #4]
  15241. 8006b64: 681b ldr r3, [r3, #0]
  15242. 8006b66: 4a46 ldr r2, [pc, #280] @ (8006c80 <HAL_ADCEx_MultiModeConfigChannel+0x1a8>)
  15243. 8006b68: 4293 cmp r3, r2
  15244. 8006b6a: d101 bne.n 8006b70 <HAL_ADCEx_MultiModeConfigChannel+0x98>
  15245. 8006b6c: 4b45 ldr r3, [pc, #276] @ (8006c84 <HAL_ADCEx_MultiModeConfigChannel+0x1ac>)
  15246. 8006b6e: e000 b.n 8006b72 <HAL_ADCEx_MultiModeConfigChannel+0x9a>
  15247. 8006b70: 4b45 ldr r3, [pc, #276] @ (8006c88 <HAL_ADCEx_MultiModeConfigChannel+0x1b0>)
  15248. 8006b72: 66fb str r3, [r7, #108] @ 0x6c
  15249. /* If multimode is selected, configure all multimode parameters. */
  15250. /* Otherwise, reset multimode parameters (can be used in case of */
  15251. /* transition from multimode to independent mode). */
  15252. if (multimode->Mode != ADC_MODE_INDEPENDENT)
  15253. 8006b74: 683b ldr r3, [r7, #0]
  15254. 8006b76: 681b ldr r3, [r3, #0]
  15255. 8006b78: 2b00 cmp r3, #0
  15256. 8006b7a: d039 beq.n 8006bf0 <HAL_ADCEx_MultiModeConfigChannel+0x118>
  15257. {
  15258. MODIFY_REG(tmpADC_Common->CCR, ADC_CCR_DAMDF, multimode->DualModeData);
  15259. 8006b7c: 6efb ldr r3, [r7, #108] @ 0x6c
  15260. 8006b7e: 689b ldr r3, [r3, #8]
  15261. 8006b80: f423 4240 bic.w r2, r3, #49152 @ 0xc000
  15262. 8006b84: 683b ldr r3, [r7, #0]
  15263. 8006b86: 685b ldr r3, [r3, #4]
  15264. 8006b88: 431a orrs r2, r3
  15265. 8006b8a: 6efb ldr r3, [r7, #108] @ 0x6c
  15266. 8006b8c: 609a str r2, [r3, #8]
  15267. /* from 1 to 8 clock cycles for 12 bits */
  15268. /* from 1 to 6 clock cycles for 10 and 8 bits */
  15269. /* If a higher delay is selected, it will be clipped to maximum delay */
  15270. /* range */
  15271. if (__LL_ADC_IS_ENABLED_ALL_COMMON_INSTANCE(__LL_ADC_COMMON_INSTANCE(hadc->Instance)) == 0UL)
  15272. 8006b8e: 687b ldr r3, [r7, #4]
  15273. 8006b90: 681b ldr r3, [r3, #0]
  15274. 8006b92: 4a3a ldr r2, [pc, #232] @ (8006c7c <HAL_ADCEx_MultiModeConfigChannel+0x1a4>)
  15275. 8006b94: 4293 cmp r3, r2
  15276. 8006b96: d004 beq.n 8006ba2 <HAL_ADCEx_MultiModeConfigChannel+0xca>
  15277. 8006b98: 687b ldr r3, [r7, #4]
  15278. 8006b9a: 681b ldr r3, [r3, #0]
  15279. 8006b9c: 4a38 ldr r2, [pc, #224] @ (8006c80 <HAL_ADCEx_MultiModeConfigChannel+0x1a8>)
  15280. 8006b9e: 4293 cmp r3, r2
  15281. 8006ba0: d10e bne.n 8006bc0 <HAL_ADCEx_MultiModeConfigChannel+0xe8>
  15282. 8006ba2: 4836 ldr r0, [pc, #216] @ (8006c7c <HAL_ADCEx_MultiModeConfigChannel+0x1a4>)
  15283. 8006ba4: f7ff feda bl 800695c <LL_ADC_IsEnabled>
  15284. 8006ba8: 4604 mov r4, r0
  15285. 8006baa: 4835 ldr r0, [pc, #212] @ (8006c80 <HAL_ADCEx_MultiModeConfigChannel+0x1a8>)
  15286. 8006bac: f7ff fed6 bl 800695c <LL_ADC_IsEnabled>
  15287. 8006bb0: 4603 mov r3, r0
  15288. 8006bb2: 4323 orrs r3, r4
  15289. 8006bb4: 2b00 cmp r3, #0
  15290. 8006bb6: bf0c ite eq
  15291. 8006bb8: 2301 moveq r3, #1
  15292. 8006bba: 2300 movne r3, #0
  15293. 8006bbc: b2db uxtb r3, r3
  15294. 8006bbe: e008 b.n 8006bd2 <HAL_ADCEx_MultiModeConfigChannel+0xfa>
  15295. 8006bc0: 4832 ldr r0, [pc, #200] @ (8006c8c <HAL_ADCEx_MultiModeConfigChannel+0x1b4>)
  15296. 8006bc2: f7ff fecb bl 800695c <LL_ADC_IsEnabled>
  15297. 8006bc6: 4603 mov r3, r0
  15298. 8006bc8: 2b00 cmp r3, #0
  15299. 8006bca: bf0c ite eq
  15300. 8006bcc: 2301 moveq r3, #1
  15301. 8006bce: 2300 movne r3, #0
  15302. 8006bd0: b2db uxtb r3, r3
  15303. 8006bd2: 2b00 cmp r3, #0
  15304. 8006bd4: d047 beq.n 8006c66 <HAL_ADCEx_MultiModeConfigChannel+0x18e>
  15305. {
  15306. MODIFY_REG(tmpADC_Common->CCR,
  15307. 8006bd6: 6efb ldr r3, [r7, #108] @ 0x6c
  15308. 8006bd8: 689a ldr r2, [r3, #8]
  15309. 8006bda: 4b2d ldr r3, [pc, #180] @ (8006c90 <HAL_ADCEx_MultiModeConfigChannel+0x1b8>)
  15310. 8006bdc: 4013 ands r3, r2
  15311. 8006bde: 683a ldr r2, [r7, #0]
  15312. 8006be0: 6811 ldr r1, [r2, #0]
  15313. 8006be2: 683a ldr r2, [r7, #0]
  15314. 8006be4: 6892 ldr r2, [r2, #8]
  15315. 8006be6: 430a orrs r2, r1
  15316. 8006be8: 431a orrs r2, r3
  15317. 8006bea: 6efb ldr r3, [r7, #108] @ 0x6c
  15318. 8006bec: 609a str r2, [r3, #8]
  15319. if (multimode->Mode != ADC_MODE_INDEPENDENT)
  15320. 8006bee: e03a b.n 8006c66 <HAL_ADCEx_MultiModeConfigChannel+0x18e>
  15321. );
  15322. }
  15323. }
  15324. else /* ADC_MODE_INDEPENDENT */
  15325. {
  15326. CLEAR_BIT(tmpADC_Common->CCR, ADC_CCR_DAMDF);
  15327. 8006bf0: 6efb ldr r3, [r7, #108] @ 0x6c
  15328. 8006bf2: 689b ldr r3, [r3, #8]
  15329. 8006bf4: f423 4240 bic.w r2, r3, #49152 @ 0xc000
  15330. 8006bf8: 6efb ldr r3, [r7, #108] @ 0x6c
  15331. 8006bfa: 609a str r2, [r3, #8]
  15332. /* Parameters that can be updated only when ADC is disabled: */
  15333. /* - Multimode mode selection */
  15334. /* - Multimode delay */
  15335. if (__LL_ADC_IS_ENABLED_ALL_COMMON_INSTANCE(__LL_ADC_COMMON_INSTANCE(hadc->Instance)) == 0UL)
  15336. 8006bfc: 687b ldr r3, [r7, #4]
  15337. 8006bfe: 681b ldr r3, [r3, #0]
  15338. 8006c00: 4a1e ldr r2, [pc, #120] @ (8006c7c <HAL_ADCEx_MultiModeConfigChannel+0x1a4>)
  15339. 8006c02: 4293 cmp r3, r2
  15340. 8006c04: d004 beq.n 8006c10 <HAL_ADCEx_MultiModeConfigChannel+0x138>
  15341. 8006c06: 687b ldr r3, [r7, #4]
  15342. 8006c08: 681b ldr r3, [r3, #0]
  15343. 8006c0a: 4a1d ldr r2, [pc, #116] @ (8006c80 <HAL_ADCEx_MultiModeConfigChannel+0x1a8>)
  15344. 8006c0c: 4293 cmp r3, r2
  15345. 8006c0e: d10e bne.n 8006c2e <HAL_ADCEx_MultiModeConfigChannel+0x156>
  15346. 8006c10: 481a ldr r0, [pc, #104] @ (8006c7c <HAL_ADCEx_MultiModeConfigChannel+0x1a4>)
  15347. 8006c12: f7ff fea3 bl 800695c <LL_ADC_IsEnabled>
  15348. 8006c16: 4604 mov r4, r0
  15349. 8006c18: 4819 ldr r0, [pc, #100] @ (8006c80 <HAL_ADCEx_MultiModeConfigChannel+0x1a8>)
  15350. 8006c1a: f7ff fe9f bl 800695c <LL_ADC_IsEnabled>
  15351. 8006c1e: 4603 mov r3, r0
  15352. 8006c20: 4323 orrs r3, r4
  15353. 8006c22: 2b00 cmp r3, #0
  15354. 8006c24: bf0c ite eq
  15355. 8006c26: 2301 moveq r3, #1
  15356. 8006c28: 2300 movne r3, #0
  15357. 8006c2a: b2db uxtb r3, r3
  15358. 8006c2c: e008 b.n 8006c40 <HAL_ADCEx_MultiModeConfigChannel+0x168>
  15359. 8006c2e: 4817 ldr r0, [pc, #92] @ (8006c8c <HAL_ADCEx_MultiModeConfigChannel+0x1b4>)
  15360. 8006c30: f7ff fe94 bl 800695c <LL_ADC_IsEnabled>
  15361. 8006c34: 4603 mov r3, r0
  15362. 8006c36: 2b00 cmp r3, #0
  15363. 8006c38: bf0c ite eq
  15364. 8006c3a: 2301 moveq r3, #1
  15365. 8006c3c: 2300 movne r3, #0
  15366. 8006c3e: b2db uxtb r3, r3
  15367. 8006c40: 2b00 cmp r3, #0
  15368. 8006c42: d010 beq.n 8006c66 <HAL_ADCEx_MultiModeConfigChannel+0x18e>
  15369. {
  15370. CLEAR_BIT(tmpADC_Common->CCR, ADC_CCR_DUAL | ADC_CCR_DELAY);
  15371. 8006c44: 6efb ldr r3, [r7, #108] @ 0x6c
  15372. 8006c46: 689a ldr r2, [r3, #8]
  15373. 8006c48: 4b11 ldr r3, [pc, #68] @ (8006c90 <HAL_ADCEx_MultiModeConfigChannel+0x1b8>)
  15374. 8006c4a: 4013 ands r3, r2
  15375. 8006c4c: 6efa ldr r2, [r7, #108] @ 0x6c
  15376. 8006c4e: 6093 str r3, [r2, #8]
  15377. if (multimode->Mode != ADC_MODE_INDEPENDENT)
  15378. 8006c50: e009 b.n 8006c66 <HAL_ADCEx_MultiModeConfigChannel+0x18e>
  15379. /* If one of the ADC sharing the same common group is enabled, no update */
  15380. /* could be done on neither of the multimode structure parameters. */
  15381. else
  15382. {
  15383. /* Update ADC state machine to error */
  15384. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);
  15385. 8006c52: 687b ldr r3, [r7, #4]
  15386. 8006c54: 6d5b ldr r3, [r3, #84] @ 0x54
  15387. 8006c56: f043 0220 orr.w r2, r3, #32
  15388. 8006c5a: 687b ldr r3, [r7, #4]
  15389. 8006c5c: 655a str r2, [r3, #84] @ 0x54
  15390. tmp_hal_status = HAL_ERROR;
  15391. 8006c5e: 2301 movs r3, #1
  15392. 8006c60: f887 3077 strb.w r3, [r7, #119] @ 0x77
  15393. 8006c64: e000 b.n 8006c68 <HAL_ADCEx_MultiModeConfigChannel+0x190>
  15394. if (multimode->Mode != ADC_MODE_INDEPENDENT)
  15395. 8006c66: bf00 nop
  15396. }
  15397. /* Process unlocked */
  15398. __HAL_UNLOCK(hadc);
  15399. 8006c68: 687b ldr r3, [r7, #4]
  15400. 8006c6a: 2200 movs r2, #0
  15401. 8006c6c: f883 2050 strb.w r2, [r3, #80] @ 0x50
  15402. /* Return function status */
  15403. return tmp_hal_status;
  15404. 8006c70: f897 3077 ldrb.w r3, [r7, #119] @ 0x77
  15405. }
  15406. 8006c74: 4618 mov r0, r3
  15407. 8006c76: 377c adds r7, #124 @ 0x7c
  15408. 8006c78: 46bd mov sp, r7
  15409. 8006c7a: bd90 pop {r4, r7, pc}
  15410. 8006c7c: 40022000 .word 0x40022000
  15411. 8006c80: 40022100 .word 0x40022100
  15412. 8006c84: 40022300 .word 0x40022300
  15413. 8006c88: 58026300 .word 0x58026300
  15414. 8006c8c: 58026000 .word 0x58026000
  15415. 8006c90: fffff0e0 .word 0xfffff0e0
  15416. 08006c94 <HAL_COMP_Init>:
  15417. * To unlock the configuration, perform a system reset.
  15418. * @param hcomp COMP handle
  15419. * @retval HAL status
  15420. */
  15421. HAL_StatusTypeDef HAL_COMP_Init(COMP_HandleTypeDef *hcomp)
  15422. {
  15423. 8006c94: b580 push {r7, lr}
  15424. 8006c96: b088 sub sp, #32
  15425. 8006c98: af00 add r7, sp, #0
  15426. 8006c9a: 6078 str r0, [r7, #4]
  15427. uint32_t tmp_csr ;
  15428. uint32_t exti_line ;
  15429. uint32_t comp_voltage_scaler_initialized; /* Value "0" is comparator voltage scaler is not initialized */
  15430. __IO uint32_t wait_loop_index = 0UL;
  15431. 8006c9c: 2300 movs r3, #0
  15432. 8006c9e: 60fb str r3, [r7, #12]
  15433. HAL_StatusTypeDef status = HAL_OK;
  15434. 8006ca0: 2300 movs r3, #0
  15435. 8006ca2: 77fb strb r3, [r7, #31]
  15436. /* Check the COMP handle allocation and lock status */
  15437. if(hcomp == NULL)
  15438. 8006ca4: 687b ldr r3, [r7, #4]
  15439. 8006ca6: 2b00 cmp r3, #0
  15440. 8006ca8: d102 bne.n 8006cb0 <HAL_COMP_Init+0x1c>
  15441. {
  15442. status = HAL_ERROR;
  15443. 8006caa: 2301 movs r3, #1
  15444. 8006cac: 77fb strb r3, [r7, #31]
  15445. 8006cae: e10e b.n 8006ece <HAL_COMP_Init+0x23a>
  15446. }
  15447. else if(__HAL_COMP_IS_LOCKED(hcomp))
  15448. 8006cb0: 687b ldr r3, [r7, #4]
  15449. 8006cb2: 681b ldr r3, [r3, #0]
  15450. 8006cb4: 681b ldr r3, [r3, #0]
  15451. 8006cb6: f003 4300 and.w r3, r3, #2147483648 @ 0x80000000
  15452. 8006cba: f1b3 4f00 cmp.w r3, #2147483648 @ 0x80000000
  15453. 8006cbe: d102 bne.n 8006cc6 <HAL_COMP_Init+0x32>
  15454. {
  15455. status = HAL_ERROR;
  15456. 8006cc0: 2301 movs r3, #1
  15457. 8006cc2: 77fb strb r3, [r7, #31]
  15458. 8006cc4: e103 b.n 8006ece <HAL_COMP_Init+0x23a>
  15459. assert_param(IS_COMP_HYSTERESIS(hcomp->Init.Hysteresis));
  15460. assert_param(IS_COMP_BLANKINGSRCE(hcomp->Init.BlankingSrce));
  15461. assert_param(IS_COMP_TRIGGERMODE(hcomp->Init.TriggerMode));
  15462. assert_param(IS_COMP_WINDOWMODE(hcomp->Init.WindowMode));
  15463. if(hcomp->State == HAL_COMP_STATE_RESET)
  15464. 8006cc6: 687b ldr r3, [r7, #4]
  15465. 8006cc8: f893 3025 ldrb.w r3, [r3, #37] @ 0x25
  15466. 8006ccc: b2db uxtb r3, r3
  15467. 8006cce: 2b00 cmp r3, #0
  15468. 8006cd0: d109 bne.n 8006ce6 <HAL_COMP_Init+0x52>
  15469. {
  15470. /* Allocate lock resource and initialize it */
  15471. hcomp->Lock = HAL_UNLOCKED;
  15472. 8006cd2: 687b ldr r3, [r7, #4]
  15473. 8006cd4: 2200 movs r2, #0
  15474. 8006cd6: f883 2024 strb.w r2, [r3, #36] @ 0x24
  15475. /* Set COMP error code to none */
  15476. COMP_CLEAR_ERRORCODE(hcomp);
  15477. 8006cda: 687b ldr r3, [r7, #4]
  15478. 8006cdc: 2200 movs r2, #0
  15479. 8006cde: 629a str r2, [r3, #40] @ 0x28
  15480. /* Init the low level hardware */
  15481. hcomp->MspInitCallback(hcomp);
  15482. #else
  15483. /* Init the low level hardware */
  15484. HAL_COMP_MspInit(hcomp);
  15485. 8006ce0: 6878 ldr r0, [r7, #4]
  15486. 8006ce2: f7fc fd67 bl 80037b4 <HAL_COMP_MspInit>
  15487. #endif /* USE_HAL_COMP_REGISTER_CALLBACKS */
  15488. }
  15489. /* Memorize voltage scaler state before initialization */
  15490. comp_voltage_scaler_initialized = READ_BIT(hcomp->Instance->CFGR, COMP_CFGRx_SCALEN);
  15491. 8006ce6: 687b ldr r3, [r7, #4]
  15492. 8006ce8: 681b ldr r3, [r3, #0]
  15493. 8006cea: 681b ldr r3, [r3, #0]
  15494. 8006cec: f003 0304 and.w r3, r3, #4
  15495. 8006cf0: 61bb str r3, [r7, #24]
  15496. /* Set BLANKING bits according to hcomp->Init.BlankingSrce value */
  15497. /* Set HYST bits according to hcomp->Init.Hysteresis value */
  15498. /* Set POLARITY bit according to hcomp->Init.OutputPol value */
  15499. /* Set POWERMODE bits according to hcomp->Init.Mode value */
  15500. tmp_csr = (hcomp->Init.InvertingInput | \
  15501. 8006cf2: 687b ldr r3, [r7, #4]
  15502. 8006cf4: 691a ldr r2, [r3, #16]
  15503. hcomp->Init.NonInvertingInput | \
  15504. 8006cf6: 687b ldr r3, [r7, #4]
  15505. 8006cf8: 68db ldr r3, [r3, #12]
  15506. tmp_csr = (hcomp->Init.InvertingInput | \
  15507. 8006cfa: 431a orrs r2, r3
  15508. hcomp->Init.BlankingSrce | \
  15509. 8006cfc: 687b ldr r3, [r7, #4]
  15510. 8006cfe: 69db ldr r3, [r3, #28]
  15511. hcomp->Init.NonInvertingInput | \
  15512. 8006d00: 431a orrs r2, r3
  15513. hcomp->Init.Hysteresis | \
  15514. 8006d02: 687b ldr r3, [r7, #4]
  15515. 8006d04: 695b ldr r3, [r3, #20]
  15516. hcomp->Init.BlankingSrce | \
  15517. 8006d06: 431a orrs r2, r3
  15518. hcomp->Init.OutputPol | \
  15519. 8006d08: 687b ldr r3, [r7, #4]
  15520. 8006d0a: 699b ldr r3, [r3, #24]
  15521. hcomp->Init.Hysteresis | \
  15522. 8006d0c: 431a orrs r2, r3
  15523. hcomp->Init.Mode );
  15524. 8006d0e: 687b ldr r3, [r7, #4]
  15525. 8006d10: 689b ldr r3, [r3, #8]
  15526. tmp_csr = (hcomp->Init.InvertingInput | \
  15527. 8006d12: 4313 orrs r3, r2
  15528. 8006d14: 617b str r3, [r7, #20]
  15529. COMP_CFGRx_INP2SEL | COMP_CFGRx_WINMODE | COMP_CFGRx_POLARITY | COMP_CFGRx_HYST |
  15530. COMP_CFGRx_BLANKING | COMP_CFGRx_BRGEN | COMP_CFGRx_SCALEN,
  15531. tmp_csr
  15532. );
  15533. #else
  15534. MODIFY_REG(hcomp->Instance->CFGR,
  15535. 8006d16: 687b ldr r3, [r7, #4]
  15536. 8006d18: 681b ldr r3, [r3, #0]
  15537. 8006d1a: 681a ldr r2, [r3, #0]
  15538. 8006d1c: 4b6e ldr r3, [pc, #440] @ (8006ed8 <HAL_COMP_Init+0x244>)
  15539. 8006d1e: 4013 ands r3, r2
  15540. 8006d20: 687a ldr r2, [r7, #4]
  15541. 8006d22: 6812 ldr r2, [r2, #0]
  15542. 8006d24: 6979 ldr r1, [r7, #20]
  15543. 8006d26: 430b orrs r3, r1
  15544. 8006d28: 6013 str r3, [r2, #0]
  15545. #endif
  15546. /* Set window mode */
  15547. /* Note: Window mode bit is located into 1 out of the 2 pairs of COMP */
  15548. /* instances. Therefore, this function can update another COMP */
  15549. /* instance that the one currently selected. */
  15550. if(hcomp->Init.WindowMode == COMP_WINDOWMODE_COMP1_INPUT_PLUS_COMMON)
  15551. 8006d2a: 687b ldr r3, [r7, #4]
  15552. 8006d2c: 685b ldr r3, [r3, #4]
  15553. 8006d2e: 2b10 cmp r3, #16
  15554. 8006d30: d108 bne.n 8006d44 <HAL_COMP_Init+0xb0>
  15555. {
  15556. SET_BIT(hcomp->Instance->CFGR, COMP_CFGRx_WINMODE);
  15557. 8006d32: 687b ldr r3, [r7, #4]
  15558. 8006d34: 681b ldr r3, [r3, #0]
  15559. 8006d36: 681a ldr r2, [r3, #0]
  15560. 8006d38: 687b ldr r3, [r7, #4]
  15561. 8006d3a: 681b ldr r3, [r3, #0]
  15562. 8006d3c: f042 0210 orr.w r2, r2, #16
  15563. 8006d40: 601a str r2, [r3, #0]
  15564. 8006d42: e007 b.n 8006d54 <HAL_COMP_Init+0xc0>
  15565. }
  15566. else
  15567. {
  15568. CLEAR_BIT(hcomp->Instance->CFGR, COMP_CFGRx_WINMODE);
  15569. 8006d44: 687b ldr r3, [r7, #4]
  15570. 8006d46: 681b ldr r3, [r3, #0]
  15571. 8006d48: 681a ldr r2, [r3, #0]
  15572. 8006d4a: 687b ldr r3, [r7, #4]
  15573. 8006d4c: 681b ldr r3, [r3, #0]
  15574. 8006d4e: f022 0210 bic.w r2, r2, #16
  15575. 8006d52: 601a str r2, [r3, #0]
  15576. }
  15577. /* Delay for COMP scaler bridge voltage stabilization */
  15578. /* Apply the delay if voltage scaler bridge is enabled for the first time */
  15579. if ((READ_BIT(hcomp->Instance->CFGR, COMP_CFGRx_SCALEN) != 0UL) &&
  15580. 8006d54: 687b ldr r3, [r7, #4]
  15581. 8006d56: 681b ldr r3, [r3, #0]
  15582. 8006d58: 681b ldr r3, [r3, #0]
  15583. 8006d5a: f003 0304 and.w r3, r3, #4
  15584. 8006d5e: 2b00 cmp r3, #0
  15585. 8006d60: d016 beq.n 8006d90 <HAL_COMP_Init+0xfc>
  15586. 8006d62: 69bb ldr r3, [r7, #24]
  15587. 8006d64: 2b00 cmp r3, #0
  15588. 8006d66: d013 beq.n 8006d90 <HAL_COMP_Init+0xfc>
  15589. {
  15590. /* Wait loop initialization and execution */
  15591. /* Note: Variable divided by 2 to compensate partially */
  15592. /* CPU processing cycles.*/
  15593. wait_loop_index = ((COMP_DELAY_VOLTAGE_SCALER_STAB_US / 10UL) * ((SystemCoreClock / (100000UL * 2UL)) + 1UL));
  15594. 8006d68: 4b5c ldr r3, [pc, #368] @ (8006edc <HAL_COMP_Init+0x248>)
  15595. 8006d6a: 681b ldr r3, [r3, #0]
  15596. 8006d6c: 099b lsrs r3, r3, #6
  15597. 8006d6e: 4a5c ldr r2, [pc, #368] @ (8006ee0 <HAL_COMP_Init+0x24c>)
  15598. 8006d70: fba2 2303 umull r2, r3, r2, r3
  15599. 8006d74: 099b lsrs r3, r3, #6
  15600. 8006d76: 1c5a adds r2, r3, #1
  15601. 8006d78: 4613 mov r3, r2
  15602. 8006d7a: 009b lsls r3, r3, #2
  15603. 8006d7c: 4413 add r3, r2
  15604. 8006d7e: 009b lsls r3, r3, #2
  15605. 8006d80: 60fb str r3, [r7, #12]
  15606. while(wait_loop_index != 0UL)
  15607. 8006d82: e002 b.n 8006d8a <HAL_COMP_Init+0xf6>
  15608. {
  15609. wait_loop_index --;
  15610. 8006d84: 68fb ldr r3, [r7, #12]
  15611. 8006d86: 3b01 subs r3, #1
  15612. 8006d88: 60fb str r3, [r7, #12]
  15613. while(wait_loop_index != 0UL)
  15614. 8006d8a: 68fb ldr r3, [r7, #12]
  15615. 8006d8c: 2b00 cmp r3, #0
  15616. 8006d8e: d1f9 bne.n 8006d84 <HAL_COMP_Init+0xf0>
  15617. }
  15618. }
  15619. /* Get the EXTI line corresponding to the selected COMP instance */
  15620. exti_line = COMP_GET_EXTI_LINE(hcomp->Instance);
  15621. 8006d90: 687b ldr r3, [r7, #4]
  15622. 8006d92: 681b ldr r3, [r3, #0]
  15623. 8006d94: 4a53 ldr r2, [pc, #332] @ (8006ee4 <HAL_COMP_Init+0x250>)
  15624. 8006d96: 4293 cmp r3, r2
  15625. 8006d98: d102 bne.n 8006da0 <HAL_COMP_Init+0x10c>
  15626. 8006d9a: f44f 1380 mov.w r3, #1048576 @ 0x100000
  15627. 8006d9e: e001 b.n 8006da4 <HAL_COMP_Init+0x110>
  15628. 8006da0: f44f 1300 mov.w r3, #2097152 @ 0x200000
  15629. 8006da4: 613b str r3, [r7, #16]
  15630. /* Manage EXTI settings */
  15631. if((hcomp->Init.TriggerMode & (COMP_EXTI_IT | COMP_EXTI_EVENT)) != 0UL)
  15632. 8006da6: 687b ldr r3, [r7, #4]
  15633. 8006da8: 6a1b ldr r3, [r3, #32]
  15634. 8006daa: f003 0303 and.w r3, r3, #3
  15635. 8006dae: 2b00 cmp r3, #0
  15636. 8006db0: d06d beq.n 8006e8e <HAL_COMP_Init+0x1fa>
  15637. {
  15638. /* Configure EXTI rising edge */
  15639. if((hcomp->Init.TriggerMode & COMP_EXTI_RISING) != 0UL)
  15640. 8006db2: 687b ldr r3, [r7, #4]
  15641. 8006db4: 6a1b ldr r3, [r3, #32]
  15642. 8006db6: f003 0310 and.w r3, r3, #16
  15643. 8006dba: 2b00 cmp r3, #0
  15644. 8006dbc: d008 beq.n 8006dd0 <HAL_COMP_Init+0x13c>
  15645. {
  15646. SET_BIT(EXTI->RTSR1, exti_line);
  15647. 8006dbe: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  15648. 8006dc2: 681a ldr r2, [r3, #0]
  15649. 8006dc4: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
  15650. 8006dc8: 693b ldr r3, [r7, #16]
  15651. 8006dca: 4313 orrs r3, r2
  15652. 8006dcc: 600b str r3, [r1, #0]
  15653. 8006dce: e008 b.n 8006de2 <HAL_COMP_Init+0x14e>
  15654. }
  15655. else
  15656. {
  15657. CLEAR_BIT(EXTI->RTSR1, exti_line);
  15658. 8006dd0: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  15659. 8006dd4: 681a ldr r2, [r3, #0]
  15660. 8006dd6: 693b ldr r3, [r7, #16]
  15661. 8006dd8: 43db mvns r3, r3
  15662. 8006dda: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
  15663. 8006dde: 4013 ands r3, r2
  15664. 8006de0: 600b str r3, [r1, #0]
  15665. }
  15666. /* Configure EXTI falling edge */
  15667. if((hcomp->Init.TriggerMode & COMP_EXTI_FALLING) != 0UL)
  15668. 8006de2: 687b ldr r3, [r7, #4]
  15669. 8006de4: 6a1b ldr r3, [r3, #32]
  15670. 8006de6: f003 0320 and.w r3, r3, #32
  15671. 8006dea: 2b00 cmp r3, #0
  15672. 8006dec: d008 beq.n 8006e00 <HAL_COMP_Init+0x16c>
  15673. {
  15674. SET_BIT(EXTI->FTSR1, exti_line);
  15675. 8006dee: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  15676. 8006df2: 685a ldr r2, [r3, #4]
  15677. 8006df4: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
  15678. 8006df8: 693b ldr r3, [r7, #16]
  15679. 8006dfa: 4313 orrs r3, r2
  15680. 8006dfc: 604b str r3, [r1, #4]
  15681. 8006dfe: e008 b.n 8006e12 <HAL_COMP_Init+0x17e>
  15682. }
  15683. else
  15684. {
  15685. CLEAR_BIT(EXTI->FTSR1, exti_line);
  15686. 8006e00: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  15687. 8006e04: 685a ldr r2, [r3, #4]
  15688. 8006e06: 693b ldr r3, [r7, #16]
  15689. 8006e08: 43db mvns r3, r3
  15690. 8006e0a: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
  15691. 8006e0e: 4013 ands r3, r2
  15692. 8006e10: 604b str r3, [r1, #4]
  15693. }
  15694. #if !defined (CORE_CM4)
  15695. /* Clear COMP EXTI pending bit (if any) */
  15696. WRITE_REG(EXTI->PR1, exti_line);
  15697. 8006e12: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  15698. 8006e16: 693b ldr r3, [r7, #16]
  15699. 8006e18: f8c2 3088 str.w r3, [r2, #136] @ 0x88
  15700. /* Configure EXTI event mode */
  15701. if((hcomp->Init.TriggerMode & COMP_EXTI_EVENT) != 0UL)
  15702. 8006e1c: 687b ldr r3, [r7, #4]
  15703. 8006e1e: 6a1b ldr r3, [r3, #32]
  15704. 8006e20: f003 0302 and.w r3, r3, #2
  15705. 8006e24: 2b00 cmp r3, #0
  15706. 8006e26: d00a beq.n 8006e3e <HAL_COMP_Init+0x1aa>
  15707. {
  15708. SET_BIT(EXTI->EMR1, exti_line);
  15709. 8006e28: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  15710. 8006e2c: f8d3 2084 ldr.w r2, [r3, #132] @ 0x84
  15711. 8006e30: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
  15712. 8006e34: 693b ldr r3, [r7, #16]
  15713. 8006e36: 4313 orrs r3, r2
  15714. 8006e38: f8c1 3084 str.w r3, [r1, #132] @ 0x84
  15715. 8006e3c: e00a b.n 8006e54 <HAL_COMP_Init+0x1c0>
  15716. }
  15717. else
  15718. {
  15719. CLEAR_BIT(EXTI->EMR1, exti_line);
  15720. 8006e3e: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  15721. 8006e42: f8d3 2084 ldr.w r2, [r3, #132] @ 0x84
  15722. 8006e46: 693b ldr r3, [r7, #16]
  15723. 8006e48: 43db mvns r3, r3
  15724. 8006e4a: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
  15725. 8006e4e: 4013 ands r3, r2
  15726. 8006e50: f8c1 3084 str.w r3, [r1, #132] @ 0x84
  15727. }
  15728. /* Configure EXTI interrupt mode */
  15729. if((hcomp->Init.TriggerMode & COMP_EXTI_IT) != 0UL)
  15730. 8006e54: 687b ldr r3, [r7, #4]
  15731. 8006e56: 6a1b ldr r3, [r3, #32]
  15732. 8006e58: f003 0301 and.w r3, r3, #1
  15733. 8006e5c: 2b00 cmp r3, #0
  15734. 8006e5e: d00a beq.n 8006e76 <HAL_COMP_Init+0x1e2>
  15735. {
  15736. SET_BIT(EXTI->IMR1, exti_line);
  15737. 8006e60: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  15738. 8006e64: f8d3 2080 ldr.w r2, [r3, #128] @ 0x80
  15739. 8006e68: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
  15740. 8006e6c: 693b ldr r3, [r7, #16]
  15741. 8006e6e: 4313 orrs r3, r2
  15742. 8006e70: f8c1 3080 str.w r3, [r1, #128] @ 0x80
  15743. 8006e74: e021 b.n 8006eba <HAL_COMP_Init+0x226>
  15744. }
  15745. else
  15746. {
  15747. CLEAR_BIT(EXTI->IMR1, exti_line);
  15748. 8006e76: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  15749. 8006e7a: f8d3 2080 ldr.w r2, [r3, #128] @ 0x80
  15750. 8006e7e: 693b ldr r3, [r7, #16]
  15751. 8006e80: 43db mvns r3, r3
  15752. 8006e82: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
  15753. 8006e86: 4013 ands r3, r2
  15754. 8006e88: f8c1 3080 str.w r3, [r1, #128] @ 0x80
  15755. 8006e8c: e015 b.n 8006eba <HAL_COMP_Init+0x226>
  15756. }
  15757. }
  15758. else
  15759. {
  15760. /* Disable EXTI event mode */
  15761. CLEAR_BIT(EXTI->EMR1, exti_line);
  15762. 8006e8e: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  15763. 8006e92: f8d3 2084 ldr.w r2, [r3, #132] @ 0x84
  15764. 8006e96: 693b ldr r3, [r7, #16]
  15765. 8006e98: 43db mvns r3, r3
  15766. 8006e9a: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
  15767. 8006e9e: 4013 ands r3, r2
  15768. 8006ea0: f8c1 3084 str.w r3, [r1, #132] @ 0x84
  15769. /* Disable EXTI interrupt mode */
  15770. CLEAR_BIT(EXTI->IMR1, exti_line);
  15771. 8006ea4: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  15772. 8006ea8: f8d3 2080 ldr.w r2, [r3, #128] @ 0x80
  15773. 8006eac: 693b ldr r3, [r7, #16]
  15774. 8006eae: 43db mvns r3, r3
  15775. 8006eb0: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
  15776. 8006eb4: 4013 ands r3, r2
  15777. 8006eb6: f8c1 3080 str.w r3, [r1, #128] @ 0x80
  15778. }
  15779. #endif
  15780. /* Set HAL COMP handle state */
  15781. /* Note: Transition from state reset to state ready, */
  15782. /* otherwise (coming from state ready or busy) no state update. */
  15783. if (hcomp->State == HAL_COMP_STATE_RESET)
  15784. 8006eba: 687b ldr r3, [r7, #4]
  15785. 8006ebc: f893 3025 ldrb.w r3, [r3, #37] @ 0x25
  15786. 8006ec0: b2db uxtb r3, r3
  15787. 8006ec2: 2b00 cmp r3, #0
  15788. 8006ec4: d103 bne.n 8006ece <HAL_COMP_Init+0x23a>
  15789. {
  15790. hcomp->State = HAL_COMP_STATE_READY;
  15791. 8006ec6: 687b ldr r3, [r7, #4]
  15792. 8006ec8: 2201 movs r2, #1
  15793. 8006eca: f883 2025 strb.w r2, [r3, #37] @ 0x25
  15794. }
  15795. }
  15796. return status;
  15797. 8006ece: 7ffb ldrb r3, [r7, #31]
  15798. }
  15799. 8006ed0: 4618 mov r0, r3
  15800. 8006ed2: 3720 adds r7, #32
  15801. 8006ed4: 46bd mov sp, r7
  15802. 8006ed6: bd80 pop {r7, pc}
  15803. 8006ed8: f0e8cce1 .word 0xf0e8cce1
  15804. 8006edc: 24000034 .word 0x24000034
  15805. 8006ee0: 053e2d63 .word 0x053e2d63
  15806. 8006ee4: 5800380c .word 0x5800380c
  15807. 08006ee8 <HAL_COMP_Start>:
  15808. * @brief Start the comparator.
  15809. * @param hcomp COMP handle
  15810. * @retval HAL status
  15811. */
  15812. HAL_StatusTypeDef HAL_COMP_Start(COMP_HandleTypeDef *hcomp)
  15813. {
  15814. 8006ee8: b480 push {r7}
  15815. 8006eea: b085 sub sp, #20
  15816. 8006eec: af00 add r7, sp, #0
  15817. 8006eee: 6078 str r0, [r7, #4]
  15818. __IO uint32_t wait_loop_index = 0UL;
  15819. 8006ef0: 2300 movs r3, #0
  15820. 8006ef2: 60bb str r3, [r7, #8]
  15821. HAL_StatusTypeDef status = HAL_OK;
  15822. 8006ef4: 2300 movs r3, #0
  15823. 8006ef6: 73fb strb r3, [r7, #15]
  15824. /* Check the COMP handle allocation and lock status */
  15825. if(hcomp == NULL)
  15826. 8006ef8: 687b ldr r3, [r7, #4]
  15827. 8006efa: 2b00 cmp r3, #0
  15828. 8006efc: d102 bne.n 8006f04 <HAL_COMP_Start+0x1c>
  15829. {
  15830. status = HAL_ERROR;
  15831. 8006efe: 2301 movs r3, #1
  15832. 8006f00: 73fb strb r3, [r7, #15]
  15833. 8006f02: e030 b.n 8006f66 <HAL_COMP_Start+0x7e>
  15834. }
  15835. else if(__HAL_COMP_IS_LOCKED(hcomp))
  15836. 8006f04: 687b ldr r3, [r7, #4]
  15837. 8006f06: 681b ldr r3, [r3, #0]
  15838. 8006f08: 681b ldr r3, [r3, #0]
  15839. 8006f0a: f003 4300 and.w r3, r3, #2147483648 @ 0x80000000
  15840. 8006f0e: f1b3 4f00 cmp.w r3, #2147483648 @ 0x80000000
  15841. 8006f12: d102 bne.n 8006f1a <HAL_COMP_Start+0x32>
  15842. {
  15843. status = HAL_ERROR;
  15844. 8006f14: 2301 movs r3, #1
  15845. 8006f16: 73fb strb r3, [r7, #15]
  15846. 8006f18: e025 b.n 8006f66 <HAL_COMP_Start+0x7e>
  15847. else
  15848. {
  15849. /* Check the parameter */
  15850. assert_param(IS_COMP_ALL_INSTANCE(hcomp->Instance));
  15851. if(hcomp->State == HAL_COMP_STATE_READY)
  15852. 8006f1a: 687b ldr r3, [r7, #4]
  15853. 8006f1c: f893 3025 ldrb.w r3, [r3, #37] @ 0x25
  15854. 8006f20: b2db uxtb r3, r3
  15855. 8006f22: 2b01 cmp r3, #1
  15856. 8006f24: d11d bne.n 8006f62 <HAL_COMP_Start+0x7a>
  15857. {
  15858. /* Enable the selected comparator */
  15859. SET_BIT(hcomp->Instance->CFGR, COMP_CFGRx_EN);
  15860. 8006f26: 687b ldr r3, [r7, #4]
  15861. 8006f28: 681b ldr r3, [r3, #0]
  15862. 8006f2a: 681a ldr r2, [r3, #0]
  15863. 8006f2c: 687b ldr r3, [r7, #4]
  15864. 8006f2e: 681b ldr r3, [r3, #0]
  15865. 8006f30: f042 0201 orr.w r2, r2, #1
  15866. 8006f34: 601a str r2, [r3, #0]
  15867. /* Set HAL COMP handle state */
  15868. hcomp->State = HAL_COMP_STATE_BUSY;
  15869. 8006f36: 687b ldr r3, [r7, #4]
  15870. 8006f38: 2202 movs r2, #2
  15871. 8006f3a: f883 2025 strb.w r2, [r3, #37] @ 0x25
  15872. /* Delay for COMP startup time */
  15873. /* Wait loop initialization and execution */
  15874. /* Note: Variable divided by 2 to compensate partially */
  15875. /* CPU processing cycles. */
  15876. wait_loop_index = ((COMP_DELAY_STARTUP_US / 10UL) * ((SystemCoreClock / (100000UL * 2UL)) + 1UL));
  15877. 8006f3e: 4b0d ldr r3, [pc, #52] @ (8006f74 <HAL_COMP_Start+0x8c>)
  15878. 8006f40: 681b ldr r3, [r3, #0]
  15879. 8006f42: 099b lsrs r3, r3, #6
  15880. 8006f44: 4a0c ldr r2, [pc, #48] @ (8006f78 <HAL_COMP_Start+0x90>)
  15881. 8006f46: fba2 2303 umull r2, r3, r2, r3
  15882. 8006f4a: 099b lsrs r3, r3, #6
  15883. 8006f4c: 3301 adds r3, #1
  15884. 8006f4e: 00db lsls r3, r3, #3
  15885. 8006f50: 60bb str r3, [r7, #8]
  15886. while(wait_loop_index != 0UL)
  15887. 8006f52: e002 b.n 8006f5a <HAL_COMP_Start+0x72>
  15888. {
  15889. wait_loop_index--;
  15890. 8006f54: 68bb ldr r3, [r7, #8]
  15891. 8006f56: 3b01 subs r3, #1
  15892. 8006f58: 60bb str r3, [r7, #8]
  15893. while(wait_loop_index != 0UL)
  15894. 8006f5a: 68bb ldr r3, [r7, #8]
  15895. 8006f5c: 2b00 cmp r3, #0
  15896. 8006f5e: d1f9 bne.n 8006f54 <HAL_COMP_Start+0x6c>
  15897. 8006f60: e001 b.n 8006f66 <HAL_COMP_Start+0x7e>
  15898. }
  15899. }
  15900. else
  15901. {
  15902. status = HAL_ERROR;
  15903. 8006f62: 2301 movs r3, #1
  15904. 8006f64: 73fb strb r3, [r7, #15]
  15905. }
  15906. }
  15907. return status;
  15908. 8006f66: 7bfb ldrb r3, [r7, #15]
  15909. }
  15910. 8006f68: 4618 mov r0, r3
  15911. 8006f6a: 3714 adds r7, #20
  15912. 8006f6c: 46bd mov sp, r7
  15913. 8006f6e: f85d 7b04 ldr.w r7, [sp], #4
  15914. 8006f72: 4770 bx lr
  15915. 8006f74: 24000034 .word 0x24000034
  15916. 8006f78: 053e2d63 .word 0x053e2d63
  15917. 08006f7c <HAL_COMP_GetOutputLevel>:
  15918. * @arg @ref COMP_OUTPUT_LEVEL_LOW
  15919. * @arg @ref COMP_OUTPUT_LEVEL_HIGH
  15920. *
  15921. */
  15922. uint32_t HAL_COMP_GetOutputLevel(COMP_HandleTypeDef *hcomp)
  15923. {
  15924. 8006f7c: b480 push {r7}
  15925. 8006f7e: b083 sub sp, #12
  15926. 8006f80: af00 add r7, sp, #0
  15927. 8006f82: 6078 str r0, [r7, #4]
  15928. /* Check the parameter */
  15929. assert_param(IS_COMP_ALL_INSTANCE(hcomp->Instance));
  15930. if (hcomp->Instance == COMP1)
  15931. 8006f84: 687b ldr r3, [r7, #4]
  15932. 8006f86: 681b ldr r3, [r3, #0]
  15933. 8006f88: 4a09 ldr r2, [pc, #36] @ (8006fb0 <HAL_COMP_GetOutputLevel+0x34>)
  15934. 8006f8a: 4293 cmp r3, r2
  15935. 8006f8c: d104 bne.n 8006f98 <HAL_COMP_GetOutputLevel+0x1c>
  15936. {
  15937. return (uint32_t)(READ_BIT(COMP12->SR, COMP_SR_C1VAL));
  15938. 8006f8e: 4b09 ldr r3, [pc, #36] @ (8006fb4 <HAL_COMP_GetOutputLevel+0x38>)
  15939. 8006f90: 681b ldr r3, [r3, #0]
  15940. 8006f92: f003 0301 and.w r3, r3, #1
  15941. 8006f96: e004 b.n 8006fa2 <HAL_COMP_GetOutputLevel+0x26>
  15942. }
  15943. else
  15944. {
  15945. return (uint32_t)((READ_BIT(COMP12->SR, COMP_SR_C2VAL))>> 1UL);
  15946. 8006f98: 4b06 ldr r3, [pc, #24] @ (8006fb4 <HAL_COMP_GetOutputLevel+0x38>)
  15947. 8006f9a: 681b ldr r3, [r3, #0]
  15948. 8006f9c: 085b lsrs r3, r3, #1
  15949. 8006f9e: f003 0301 and.w r3, r3, #1
  15950. }
  15951. }
  15952. 8006fa2: 4618 mov r0, r3
  15953. 8006fa4: 370c adds r7, #12
  15954. 8006fa6: 46bd mov sp, r7
  15955. 8006fa8: f85d 7b04 ldr.w r7, [sp], #4
  15956. 8006fac: 4770 bx lr
  15957. 8006fae: bf00 nop
  15958. 8006fb0: 5800380c .word 0x5800380c
  15959. 8006fb4: 58003800 .word 0x58003800
  15960. 08006fb8 <__NVIC_SetPriorityGrouping>:
  15961. {
  15962. 8006fb8: b480 push {r7}
  15963. 8006fba: b085 sub sp, #20
  15964. 8006fbc: af00 add r7, sp, #0
  15965. 8006fbe: 6078 str r0, [r7, #4]
  15966. uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */
  15967. 8006fc0: 687b ldr r3, [r7, #4]
  15968. 8006fc2: f003 0307 and.w r3, r3, #7
  15969. 8006fc6: 60fb str r3, [r7, #12]
  15970. reg_value = SCB->AIRCR; /* read old register configuration */
  15971. 8006fc8: 4b0b ldr r3, [pc, #44] @ (8006ff8 <__NVIC_SetPriorityGrouping+0x40>)
  15972. 8006fca: 68db ldr r3, [r3, #12]
  15973. 8006fcc: 60bb str r3, [r7, #8]
  15974. reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */
  15975. 8006fce: 68ba ldr r2, [r7, #8]
  15976. 8006fd0: f64f 03ff movw r3, #63743 @ 0xf8ff
  15977. 8006fd4: 4013 ands r3, r2
  15978. 8006fd6: 60bb str r3, [r7, #8]
  15979. (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */
  15980. 8006fd8: 68fb ldr r3, [r7, #12]
  15981. 8006fda: 021a lsls r2, r3, #8
  15982. ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |
  15983. 8006fdc: 68bb ldr r3, [r7, #8]
  15984. 8006fde: 431a orrs r2, r3
  15985. reg_value = (reg_value |
  15986. 8006fe0: 4b06 ldr r3, [pc, #24] @ (8006ffc <__NVIC_SetPriorityGrouping+0x44>)
  15987. 8006fe2: 4313 orrs r3, r2
  15988. 8006fe4: 60bb str r3, [r7, #8]
  15989. SCB->AIRCR = reg_value;
  15990. 8006fe6: 4a04 ldr r2, [pc, #16] @ (8006ff8 <__NVIC_SetPriorityGrouping+0x40>)
  15991. 8006fe8: 68bb ldr r3, [r7, #8]
  15992. 8006fea: 60d3 str r3, [r2, #12]
  15993. }
  15994. 8006fec: bf00 nop
  15995. 8006fee: 3714 adds r7, #20
  15996. 8006ff0: 46bd mov sp, r7
  15997. 8006ff2: f85d 7b04 ldr.w r7, [sp], #4
  15998. 8006ff6: 4770 bx lr
  15999. 8006ff8: e000ed00 .word 0xe000ed00
  16000. 8006ffc: 05fa0000 .word 0x05fa0000
  16001. 08007000 <__NVIC_GetPriorityGrouping>:
  16002. {
  16003. 8007000: b480 push {r7}
  16004. 8007002: af00 add r7, sp, #0
  16005. return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos));
  16006. 8007004: 4b04 ldr r3, [pc, #16] @ (8007018 <__NVIC_GetPriorityGrouping+0x18>)
  16007. 8007006: 68db ldr r3, [r3, #12]
  16008. 8007008: 0a1b lsrs r3, r3, #8
  16009. 800700a: f003 0307 and.w r3, r3, #7
  16010. }
  16011. 800700e: 4618 mov r0, r3
  16012. 8007010: 46bd mov sp, r7
  16013. 8007012: f85d 7b04 ldr.w r7, [sp], #4
  16014. 8007016: 4770 bx lr
  16015. 8007018: e000ed00 .word 0xe000ed00
  16016. 0800701c <__NVIC_EnableIRQ>:
  16017. {
  16018. 800701c: b480 push {r7}
  16019. 800701e: b083 sub sp, #12
  16020. 8007020: af00 add r7, sp, #0
  16021. 8007022: 4603 mov r3, r0
  16022. 8007024: 80fb strh r3, [r7, #6]
  16023. if ((int32_t)(IRQn) >= 0)
  16024. 8007026: f9b7 3006 ldrsh.w r3, [r7, #6]
  16025. 800702a: 2b00 cmp r3, #0
  16026. 800702c: db0b blt.n 8007046 <__NVIC_EnableIRQ+0x2a>
  16027. NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
  16028. 800702e: 88fb ldrh r3, [r7, #6]
  16029. 8007030: f003 021f and.w r2, r3, #31
  16030. 8007034: 4907 ldr r1, [pc, #28] @ (8007054 <__NVIC_EnableIRQ+0x38>)
  16031. 8007036: f9b7 3006 ldrsh.w r3, [r7, #6]
  16032. 800703a: 095b lsrs r3, r3, #5
  16033. 800703c: 2001 movs r0, #1
  16034. 800703e: fa00 f202 lsl.w r2, r0, r2
  16035. 8007042: f841 2023 str.w r2, [r1, r3, lsl #2]
  16036. }
  16037. 8007046: bf00 nop
  16038. 8007048: 370c adds r7, #12
  16039. 800704a: 46bd mov sp, r7
  16040. 800704c: f85d 7b04 ldr.w r7, [sp], #4
  16041. 8007050: 4770 bx lr
  16042. 8007052: bf00 nop
  16043. 8007054: e000e100 .word 0xe000e100
  16044. 08007058 <__NVIC_SetPriority>:
  16045. {
  16046. 8007058: b480 push {r7}
  16047. 800705a: b083 sub sp, #12
  16048. 800705c: af00 add r7, sp, #0
  16049. 800705e: 4603 mov r3, r0
  16050. 8007060: 6039 str r1, [r7, #0]
  16051. 8007062: 80fb strh r3, [r7, #6]
  16052. if ((int32_t)(IRQn) >= 0)
  16053. 8007064: f9b7 3006 ldrsh.w r3, [r7, #6]
  16054. 8007068: 2b00 cmp r3, #0
  16055. 800706a: db0a blt.n 8007082 <__NVIC_SetPriority+0x2a>
  16056. NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
  16057. 800706c: 683b ldr r3, [r7, #0]
  16058. 800706e: b2da uxtb r2, r3
  16059. 8007070: 490c ldr r1, [pc, #48] @ (80070a4 <__NVIC_SetPriority+0x4c>)
  16060. 8007072: f9b7 3006 ldrsh.w r3, [r7, #6]
  16061. 8007076: 0112 lsls r2, r2, #4
  16062. 8007078: b2d2 uxtb r2, r2
  16063. 800707a: 440b add r3, r1
  16064. 800707c: f883 2300 strb.w r2, [r3, #768] @ 0x300
  16065. }
  16066. 8007080: e00a b.n 8007098 <__NVIC_SetPriority+0x40>
  16067. SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
  16068. 8007082: 683b ldr r3, [r7, #0]
  16069. 8007084: b2da uxtb r2, r3
  16070. 8007086: 4908 ldr r1, [pc, #32] @ (80070a8 <__NVIC_SetPriority+0x50>)
  16071. 8007088: 88fb ldrh r3, [r7, #6]
  16072. 800708a: f003 030f and.w r3, r3, #15
  16073. 800708e: 3b04 subs r3, #4
  16074. 8007090: 0112 lsls r2, r2, #4
  16075. 8007092: b2d2 uxtb r2, r2
  16076. 8007094: 440b add r3, r1
  16077. 8007096: 761a strb r2, [r3, #24]
  16078. }
  16079. 8007098: bf00 nop
  16080. 800709a: 370c adds r7, #12
  16081. 800709c: 46bd mov sp, r7
  16082. 800709e: f85d 7b04 ldr.w r7, [sp], #4
  16083. 80070a2: 4770 bx lr
  16084. 80070a4: e000e100 .word 0xe000e100
  16085. 80070a8: e000ed00 .word 0xe000ed00
  16086. 080070ac <NVIC_EncodePriority>:
  16087. {
  16088. 80070ac: b480 push {r7}
  16089. 80070ae: b089 sub sp, #36 @ 0x24
  16090. 80070b0: af00 add r7, sp, #0
  16091. 80070b2: 60f8 str r0, [r7, #12]
  16092. 80070b4: 60b9 str r1, [r7, #8]
  16093. 80070b6: 607a str r2, [r7, #4]
  16094. uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */
  16095. 80070b8: 68fb ldr r3, [r7, #12]
  16096. 80070ba: f003 0307 and.w r3, r3, #7
  16097. 80070be: 61fb str r3, [r7, #28]
  16098. PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);
  16099. 80070c0: 69fb ldr r3, [r7, #28]
  16100. 80070c2: f1c3 0307 rsb r3, r3, #7
  16101. 80070c6: 2b04 cmp r3, #4
  16102. 80070c8: bf28 it cs
  16103. 80070ca: 2304 movcs r3, #4
  16104. 80070cc: 61bb str r3, [r7, #24]
  16105. SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));
  16106. 80070ce: 69fb ldr r3, [r7, #28]
  16107. 80070d0: 3304 adds r3, #4
  16108. 80070d2: 2b06 cmp r3, #6
  16109. 80070d4: d902 bls.n 80070dc <NVIC_EncodePriority+0x30>
  16110. 80070d6: 69fb ldr r3, [r7, #28]
  16111. 80070d8: 3b03 subs r3, #3
  16112. 80070da: e000 b.n 80070de <NVIC_EncodePriority+0x32>
  16113. 80070dc: 2300 movs r3, #0
  16114. 80070de: 617b str r3, [r7, #20]
  16115. ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) |
  16116. 80070e0: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
  16117. 80070e4: 69bb ldr r3, [r7, #24]
  16118. 80070e6: fa02 f303 lsl.w r3, r2, r3
  16119. 80070ea: 43da mvns r2, r3
  16120. 80070ec: 68bb ldr r3, [r7, #8]
  16121. 80070ee: 401a ands r2, r3
  16122. 80070f0: 697b ldr r3, [r7, #20]
  16123. 80070f2: 409a lsls r2, r3
  16124. ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL)))
  16125. 80070f4: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  16126. 80070f8: 697b ldr r3, [r7, #20]
  16127. 80070fa: fa01 f303 lsl.w r3, r1, r3
  16128. 80070fe: 43d9 mvns r1, r3
  16129. 8007100: 687b ldr r3, [r7, #4]
  16130. 8007102: 400b ands r3, r1
  16131. ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) |
  16132. 8007104: 4313 orrs r3, r2
  16133. }
  16134. 8007106: 4618 mov r0, r3
  16135. 8007108: 3724 adds r7, #36 @ 0x24
  16136. 800710a: 46bd mov sp, r7
  16137. 800710c: f85d 7b04 ldr.w r7, [sp], #4
  16138. 8007110: 4770 bx lr
  16139. 08007112 <HAL_NVIC_SetPriorityGrouping>:
  16140. * @note When the NVIC_PriorityGroup_0 is selected, IRQ preemption is no more possible.
  16141. * The pending IRQ priority will be managed only by the subpriority.
  16142. * @retval None
  16143. */
  16144. void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup)
  16145. {
  16146. 8007112: b580 push {r7, lr}
  16147. 8007114: b082 sub sp, #8
  16148. 8007116: af00 add r7, sp, #0
  16149. 8007118: 6078 str r0, [r7, #4]
  16150. /* Check the parameters */
  16151. assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup));
  16152. /* Set the PRIGROUP[10:8] bits according to the PriorityGroup parameter value */
  16153. NVIC_SetPriorityGrouping(PriorityGroup);
  16154. 800711a: 6878 ldr r0, [r7, #4]
  16155. 800711c: f7ff ff4c bl 8006fb8 <__NVIC_SetPriorityGrouping>
  16156. }
  16157. 8007120: bf00 nop
  16158. 8007122: 3708 adds r7, #8
  16159. 8007124: 46bd mov sp, r7
  16160. 8007126: bd80 pop {r7, pc}
  16161. 08007128 <HAL_NVIC_SetPriority>:
  16162. * This parameter can be a value between 0 and 15
  16163. * A lower priority value indicates a higher priority.
  16164. * @retval None
  16165. */
  16166. void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority)
  16167. {
  16168. 8007128: b580 push {r7, lr}
  16169. 800712a: b086 sub sp, #24
  16170. 800712c: af00 add r7, sp, #0
  16171. 800712e: 4603 mov r3, r0
  16172. 8007130: 60b9 str r1, [r7, #8]
  16173. 8007132: 607a str r2, [r7, #4]
  16174. 8007134: 81fb strh r3, [r7, #14]
  16175. /* Check the parameters */
  16176. assert_param(IS_NVIC_SUB_PRIORITY(SubPriority));
  16177. assert_param(IS_NVIC_PREEMPTION_PRIORITY(PreemptPriority));
  16178. prioritygroup = NVIC_GetPriorityGrouping();
  16179. 8007136: f7ff ff63 bl 8007000 <__NVIC_GetPriorityGrouping>
  16180. 800713a: 6178 str r0, [r7, #20]
  16181. NVIC_SetPriority(IRQn, NVIC_EncodePriority(prioritygroup, PreemptPriority, SubPriority));
  16182. 800713c: 687a ldr r2, [r7, #4]
  16183. 800713e: 68b9 ldr r1, [r7, #8]
  16184. 8007140: 6978 ldr r0, [r7, #20]
  16185. 8007142: f7ff ffb3 bl 80070ac <NVIC_EncodePriority>
  16186. 8007146: 4602 mov r2, r0
  16187. 8007148: f9b7 300e ldrsh.w r3, [r7, #14]
  16188. 800714c: 4611 mov r1, r2
  16189. 800714e: 4618 mov r0, r3
  16190. 8007150: f7ff ff82 bl 8007058 <__NVIC_SetPriority>
  16191. }
  16192. 8007154: bf00 nop
  16193. 8007156: 3718 adds r7, #24
  16194. 8007158: 46bd mov sp, r7
  16195. 800715a: bd80 pop {r7, pc}
  16196. 0800715c <HAL_NVIC_EnableIRQ>:
  16197. * This parameter can be an enumerator of IRQn_Type enumeration
  16198. * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32h7xxxx.h))
  16199. * @retval None
  16200. */
  16201. void HAL_NVIC_EnableIRQ(IRQn_Type IRQn)
  16202. {
  16203. 800715c: b580 push {r7, lr}
  16204. 800715e: b082 sub sp, #8
  16205. 8007160: af00 add r7, sp, #0
  16206. 8007162: 4603 mov r3, r0
  16207. 8007164: 80fb strh r3, [r7, #6]
  16208. /* Check the parameters */
  16209. assert_param(IS_NVIC_DEVICE_IRQ(IRQn));
  16210. /* Enable interrupt */
  16211. NVIC_EnableIRQ(IRQn);
  16212. 8007166: f9b7 3006 ldrsh.w r3, [r7, #6]
  16213. 800716a: 4618 mov r0, r3
  16214. 800716c: f7ff ff56 bl 800701c <__NVIC_EnableIRQ>
  16215. }
  16216. 8007170: bf00 nop
  16217. 8007172: 3708 adds r7, #8
  16218. 8007174: 46bd mov sp, r7
  16219. 8007176: bd80 pop {r7, pc}
  16220. 08007178 <HAL_MPU_Disable>:
  16221. /**
  16222. * @brief Disables the MPU
  16223. * @retval None
  16224. */
  16225. void HAL_MPU_Disable(void)
  16226. {
  16227. 8007178: b480 push {r7}
  16228. 800717a: af00 add r7, sp, #0
  16229. __ASM volatile ("dmb 0xF":::"memory");
  16230. 800717c: f3bf 8f5f dmb sy
  16231. }
  16232. 8007180: bf00 nop
  16233. /* Make sure outstanding transfers are done */
  16234. __DMB();
  16235. /* Disable fault exceptions */
  16236. SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk;
  16237. 8007182: 4b07 ldr r3, [pc, #28] @ (80071a0 <HAL_MPU_Disable+0x28>)
  16238. 8007184: 6a5b ldr r3, [r3, #36] @ 0x24
  16239. 8007186: 4a06 ldr r2, [pc, #24] @ (80071a0 <HAL_MPU_Disable+0x28>)
  16240. 8007188: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  16241. 800718c: 6253 str r3, [r2, #36] @ 0x24
  16242. /* Disable the MPU and clear the control register*/
  16243. MPU->CTRL = 0;
  16244. 800718e: 4b05 ldr r3, [pc, #20] @ (80071a4 <HAL_MPU_Disable+0x2c>)
  16245. 8007190: 2200 movs r2, #0
  16246. 8007192: 605a str r2, [r3, #4]
  16247. }
  16248. 8007194: bf00 nop
  16249. 8007196: 46bd mov sp, r7
  16250. 8007198: f85d 7b04 ldr.w r7, [sp], #4
  16251. 800719c: 4770 bx lr
  16252. 800719e: bf00 nop
  16253. 80071a0: e000ed00 .word 0xe000ed00
  16254. 80071a4: e000ed90 .word 0xe000ed90
  16255. 080071a8 <HAL_MPU_Enable>:
  16256. * @arg MPU_PRIVILEGED_DEFAULT
  16257. * @arg MPU_HFNMI_PRIVDEF
  16258. * @retval None
  16259. */
  16260. void HAL_MPU_Enable(uint32_t MPU_Control)
  16261. {
  16262. 80071a8: b480 push {r7}
  16263. 80071aa: b083 sub sp, #12
  16264. 80071ac: af00 add r7, sp, #0
  16265. 80071ae: 6078 str r0, [r7, #4]
  16266. /* Enable the MPU */
  16267. MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk;
  16268. 80071b0: 4a0b ldr r2, [pc, #44] @ (80071e0 <HAL_MPU_Enable+0x38>)
  16269. 80071b2: 687b ldr r3, [r7, #4]
  16270. 80071b4: f043 0301 orr.w r3, r3, #1
  16271. 80071b8: 6053 str r3, [r2, #4]
  16272. /* Enable fault exceptions */
  16273. SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk;
  16274. 80071ba: 4b0a ldr r3, [pc, #40] @ (80071e4 <HAL_MPU_Enable+0x3c>)
  16275. 80071bc: 6a5b ldr r3, [r3, #36] @ 0x24
  16276. 80071be: 4a09 ldr r2, [pc, #36] @ (80071e4 <HAL_MPU_Enable+0x3c>)
  16277. 80071c0: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  16278. 80071c4: 6253 str r3, [r2, #36] @ 0x24
  16279. __ASM volatile ("dsb 0xF":::"memory");
  16280. 80071c6: f3bf 8f4f dsb sy
  16281. }
  16282. 80071ca: bf00 nop
  16283. __ASM volatile ("isb 0xF":::"memory");
  16284. 80071cc: f3bf 8f6f isb sy
  16285. }
  16286. 80071d0: bf00 nop
  16287. /* Ensure MPU setting take effects */
  16288. __DSB();
  16289. __ISB();
  16290. }
  16291. 80071d2: bf00 nop
  16292. 80071d4: 370c adds r7, #12
  16293. 80071d6: 46bd mov sp, r7
  16294. 80071d8: f85d 7b04 ldr.w r7, [sp], #4
  16295. 80071dc: 4770 bx lr
  16296. 80071de: bf00 nop
  16297. 80071e0: e000ed90 .word 0xe000ed90
  16298. 80071e4: e000ed00 .word 0xe000ed00
  16299. 080071e8 <HAL_MPU_ConfigRegion>:
  16300. * @param MPU_Init Pointer to a MPU_Region_InitTypeDef structure that contains
  16301. * the initialization and configuration information.
  16302. * @retval None
  16303. */
  16304. void HAL_MPU_ConfigRegion(MPU_Region_InitTypeDef *MPU_Init)
  16305. {
  16306. 80071e8: b480 push {r7}
  16307. 80071ea: b083 sub sp, #12
  16308. 80071ec: af00 add r7, sp, #0
  16309. 80071ee: 6078 str r0, [r7, #4]
  16310. assert_param(IS_MPU_ACCESS_BUFFERABLE(MPU_Init->IsBufferable));
  16311. assert_param(IS_MPU_SUB_REGION_DISABLE(MPU_Init->SubRegionDisable));
  16312. assert_param(IS_MPU_REGION_SIZE(MPU_Init->Size));
  16313. /* Set the Region number */
  16314. MPU->RNR = MPU_Init->Number;
  16315. 80071f0: 687b ldr r3, [r7, #4]
  16316. 80071f2: 785a ldrb r2, [r3, #1]
  16317. 80071f4: 4b1b ldr r3, [pc, #108] @ (8007264 <HAL_MPU_ConfigRegion+0x7c>)
  16318. 80071f6: 609a str r2, [r3, #8]
  16319. /* Disable the Region */
  16320. CLEAR_BIT(MPU->RASR, MPU_RASR_ENABLE_Msk);
  16321. 80071f8: 4b1a ldr r3, [pc, #104] @ (8007264 <HAL_MPU_ConfigRegion+0x7c>)
  16322. 80071fa: 691b ldr r3, [r3, #16]
  16323. 80071fc: 4a19 ldr r2, [pc, #100] @ (8007264 <HAL_MPU_ConfigRegion+0x7c>)
  16324. 80071fe: f023 0301 bic.w r3, r3, #1
  16325. 8007202: 6113 str r3, [r2, #16]
  16326. /* Apply configuration */
  16327. MPU->RBAR = MPU_Init->BaseAddress;
  16328. 8007204: 4a17 ldr r2, [pc, #92] @ (8007264 <HAL_MPU_ConfigRegion+0x7c>)
  16329. 8007206: 687b ldr r3, [r7, #4]
  16330. 8007208: 685b ldr r3, [r3, #4]
  16331. 800720a: 60d3 str r3, [r2, #12]
  16332. MPU->RASR = ((uint32_t)MPU_Init->DisableExec << MPU_RASR_XN_Pos) |
  16333. 800720c: 687b ldr r3, [r7, #4]
  16334. 800720e: 7b1b ldrb r3, [r3, #12]
  16335. 8007210: 071a lsls r2, r3, #28
  16336. ((uint32_t)MPU_Init->AccessPermission << MPU_RASR_AP_Pos) |
  16337. 8007212: 687b ldr r3, [r7, #4]
  16338. 8007214: 7adb ldrb r3, [r3, #11]
  16339. 8007216: 061b lsls r3, r3, #24
  16340. MPU->RASR = ((uint32_t)MPU_Init->DisableExec << MPU_RASR_XN_Pos) |
  16341. 8007218: 431a orrs r2, r3
  16342. ((uint32_t)MPU_Init->TypeExtField << MPU_RASR_TEX_Pos) |
  16343. 800721a: 687b ldr r3, [r7, #4]
  16344. 800721c: 7a9b ldrb r3, [r3, #10]
  16345. 800721e: 04db lsls r3, r3, #19
  16346. ((uint32_t)MPU_Init->AccessPermission << MPU_RASR_AP_Pos) |
  16347. 8007220: 431a orrs r2, r3
  16348. ((uint32_t)MPU_Init->IsShareable << MPU_RASR_S_Pos) |
  16349. 8007222: 687b ldr r3, [r7, #4]
  16350. 8007224: 7b5b ldrb r3, [r3, #13]
  16351. 8007226: 049b lsls r3, r3, #18
  16352. ((uint32_t)MPU_Init->TypeExtField << MPU_RASR_TEX_Pos) |
  16353. 8007228: 431a orrs r2, r3
  16354. ((uint32_t)MPU_Init->IsCacheable << MPU_RASR_C_Pos) |
  16355. 800722a: 687b ldr r3, [r7, #4]
  16356. 800722c: 7b9b ldrb r3, [r3, #14]
  16357. 800722e: 045b lsls r3, r3, #17
  16358. ((uint32_t)MPU_Init->IsShareable << MPU_RASR_S_Pos) |
  16359. 8007230: 431a orrs r2, r3
  16360. ((uint32_t)MPU_Init->IsBufferable << MPU_RASR_B_Pos) |
  16361. 8007232: 687b ldr r3, [r7, #4]
  16362. 8007234: 7bdb ldrb r3, [r3, #15]
  16363. 8007236: 041b lsls r3, r3, #16
  16364. ((uint32_t)MPU_Init->IsCacheable << MPU_RASR_C_Pos) |
  16365. 8007238: 431a orrs r2, r3
  16366. ((uint32_t)MPU_Init->SubRegionDisable << MPU_RASR_SRD_Pos) |
  16367. 800723a: 687b ldr r3, [r7, #4]
  16368. 800723c: 7a5b ldrb r3, [r3, #9]
  16369. 800723e: 021b lsls r3, r3, #8
  16370. ((uint32_t)MPU_Init->IsBufferable << MPU_RASR_B_Pos) |
  16371. 8007240: 431a orrs r2, r3
  16372. ((uint32_t)MPU_Init->Size << MPU_RASR_SIZE_Pos) |
  16373. 8007242: 687b ldr r3, [r7, #4]
  16374. 8007244: 7a1b ldrb r3, [r3, #8]
  16375. 8007246: 005b lsls r3, r3, #1
  16376. ((uint32_t)MPU_Init->SubRegionDisable << MPU_RASR_SRD_Pos) |
  16377. 8007248: 4313 orrs r3, r2
  16378. ((uint32_t)MPU_Init->Enable << MPU_RASR_ENABLE_Pos);
  16379. 800724a: 687a ldr r2, [r7, #4]
  16380. 800724c: 7812 ldrb r2, [r2, #0]
  16381. 800724e: 4611 mov r1, r2
  16382. MPU->RASR = ((uint32_t)MPU_Init->DisableExec << MPU_RASR_XN_Pos) |
  16383. 8007250: 4a04 ldr r2, [pc, #16] @ (8007264 <HAL_MPU_ConfigRegion+0x7c>)
  16384. ((uint32_t)MPU_Init->Size << MPU_RASR_SIZE_Pos) |
  16385. 8007252: 430b orrs r3, r1
  16386. MPU->RASR = ((uint32_t)MPU_Init->DisableExec << MPU_RASR_XN_Pos) |
  16387. 8007254: 6113 str r3, [r2, #16]
  16388. }
  16389. 8007256: bf00 nop
  16390. 8007258: 370c adds r7, #12
  16391. 800725a: 46bd mov sp, r7
  16392. 800725c: f85d 7b04 ldr.w r7, [sp], #4
  16393. 8007260: 4770 bx lr
  16394. 8007262: bf00 nop
  16395. 8007264: e000ed90 .word 0xe000ed90
  16396. 08007268 <HAL_CRC_Init>:
  16397. * parameters in the CRC_InitTypeDef and create the associated handle.
  16398. * @param hcrc CRC handle
  16399. * @retval HAL status
  16400. */
  16401. HAL_StatusTypeDef HAL_CRC_Init(CRC_HandleTypeDef *hcrc)
  16402. {
  16403. 8007268: b580 push {r7, lr}
  16404. 800726a: b082 sub sp, #8
  16405. 800726c: af00 add r7, sp, #0
  16406. 800726e: 6078 str r0, [r7, #4]
  16407. /* Check the CRC handle allocation */
  16408. if (hcrc == NULL)
  16409. 8007270: 687b ldr r3, [r7, #4]
  16410. 8007272: 2b00 cmp r3, #0
  16411. 8007274: d101 bne.n 800727a <HAL_CRC_Init+0x12>
  16412. {
  16413. return HAL_ERROR;
  16414. 8007276: 2301 movs r3, #1
  16415. 8007278: e054 b.n 8007324 <HAL_CRC_Init+0xbc>
  16416. }
  16417. /* Check the parameters */
  16418. assert_param(IS_CRC_ALL_INSTANCE(hcrc->Instance));
  16419. if (hcrc->State == HAL_CRC_STATE_RESET)
  16420. 800727a: 687b ldr r3, [r7, #4]
  16421. 800727c: 7f5b ldrb r3, [r3, #29]
  16422. 800727e: b2db uxtb r3, r3
  16423. 8007280: 2b00 cmp r3, #0
  16424. 8007282: d105 bne.n 8007290 <HAL_CRC_Init+0x28>
  16425. {
  16426. /* Allocate lock resource and initialize it */
  16427. hcrc->Lock = HAL_UNLOCKED;
  16428. 8007284: 687b ldr r3, [r7, #4]
  16429. 8007286: 2200 movs r2, #0
  16430. 8007288: 771a strb r2, [r3, #28]
  16431. /* Init the low level hardware */
  16432. HAL_CRC_MspInit(hcrc);
  16433. 800728a: 6878 ldr r0, [r7, #4]
  16434. 800728c: f7fc fad8 bl 8003840 <HAL_CRC_MspInit>
  16435. }
  16436. hcrc->State = HAL_CRC_STATE_BUSY;
  16437. 8007290: 687b ldr r3, [r7, #4]
  16438. 8007292: 2202 movs r2, #2
  16439. 8007294: 775a strb r2, [r3, #29]
  16440. /* check whether or not non-default generating polynomial has been
  16441. * picked up by user */
  16442. assert_param(IS_DEFAULT_POLYNOMIAL(hcrc->Init.DefaultPolynomialUse));
  16443. if (hcrc->Init.DefaultPolynomialUse == DEFAULT_POLYNOMIAL_ENABLE)
  16444. 8007296: 687b ldr r3, [r7, #4]
  16445. 8007298: 791b ldrb r3, [r3, #4]
  16446. 800729a: 2b00 cmp r3, #0
  16447. 800729c: d10c bne.n 80072b8 <HAL_CRC_Init+0x50>
  16448. {
  16449. /* initialize peripheral with default generating polynomial */
  16450. WRITE_REG(hcrc->Instance->POL, DEFAULT_CRC32_POLY);
  16451. 800729e: 687b ldr r3, [r7, #4]
  16452. 80072a0: 681b ldr r3, [r3, #0]
  16453. 80072a2: 4a22 ldr r2, [pc, #136] @ (800732c <HAL_CRC_Init+0xc4>)
  16454. 80072a4: 615a str r2, [r3, #20]
  16455. MODIFY_REG(hcrc->Instance->CR, CRC_CR_POLYSIZE, CRC_POLYLENGTH_32B);
  16456. 80072a6: 687b ldr r3, [r7, #4]
  16457. 80072a8: 681b ldr r3, [r3, #0]
  16458. 80072aa: 689a ldr r2, [r3, #8]
  16459. 80072ac: 687b ldr r3, [r7, #4]
  16460. 80072ae: 681b ldr r3, [r3, #0]
  16461. 80072b0: f022 0218 bic.w r2, r2, #24
  16462. 80072b4: 609a str r2, [r3, #8]
  16463. 80072b6: e00c b.n 80072d2 <HAL_CRC_Init+0x6a>
  16464. }
  16465. else
  16466. {
  16467. /* initialize CRC peripheral with generating polynomial defined by user */
  16468. if (HAL_CRCEx_Polynomial_Set(hcrc, hcrc->Init.GeneratingPolynomial, hcrc->Init.CRCLength) != HAL_OK)
  16469. 80072b8: 687b ldr r3, [r7, #4]
  16470. 80072ba: 6899 ldr r1, [r3, #8]
  16471. 80072bc: 687b ldr r3, [r7, #4]
  16472. 80072be: 68db ldr r3, [r3, #12]
  16473. 80072c0: 461a mov r2, r3
  16474. 80072c2: 6878 ldr r0, [r7, #4]
  16475. 80072c4: f000 f948 bl 8007558 <HAL_CRCEx_Polynomial_Set>
  16476. 80072c8: 4603 mov r3, r0
  16477. 80072ca: 2b00 cmp r3, #0
  16478. 80072cc: d001 beq.n 80072d2 <HAL_CRC_Init+0x6a>
  16479. {
  16480. return HAL_ERROR;
  16481. 80072ce: 2301 movs r3, #1
  16482. 80072d0: e028 b.n 8007324 <HAL_CRC_Init+0xbc>
  16483. }
  16484. /* check whether or not non-default CRC initial value has been
  16485. * picked up by user */
  16486. assert_param(IS_DEFAULT_INIT_VALUE(hcrc->Init.DefaultInitValueUse));
  16487. if (hcrc->Init.DefaultInitValueUse == DEFAULT_INIT_VALUE_ENABLE)
  16488. 80072d2: 687b ldr r3, [r7, #4]
  16489. 80072d4: 795b ldrb r3, [r3, #5]
  16490. 80072d6: 2b00 cmp r3, #0
  16491. 80072d8: d105 bne.n 80072e6 <HAL_CRC_Init+0x7e>
  16492. {
  16493. WRITE_REG(hcrc->Instance->INIT, DEFAULT_CRC_INITVALUE);
  16494. 80072da: 687b ldr r3, [r7, #4]
  16495. 80072dc: 681b ldr r3, [r3, #0]
  16496. 80072de: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
  16497. 80072e2: 611a str r2, [r3, #16]
  16498. 80072e4: e004 b.n 80072f0 <HAL_CRC_Init+0x88>
  16499. }
  16500. else
  16501. {
  16502. WRITE_REG(hcrc->Instance->INIT, hcrc->Init.InitValue);
  16503. 80072e6: 687b ldr r3, [r7, #4]
  16504. 80072e8: 681b ldr r3, [r3, #0]
  16505. 80072ea: 687a ldr r2, [r7, #4]
  16506. 80072ec: 6912 ldr r2, [r2, #16]
  16507. 80072ee: 611a str r2, [r3, #16]
  16508. }
  16509. /* set input data inversion mode */
  16510. assert_param(IS_CRC_INPUTDATA_INVERSION_MODE(hcrc->Init.InputDataInversionMode));
  16511. MODIFY_REG(hcrc->Instance->CR, CRC_CR_REV_IN, hcrc->Init.InputDataInversionMode);
  16512. 80072f0: 687b ldr r3, [r7, #4]
  16513. 80072f2: 681b ldr r3, [r3, #0]
  16514. 80072f4: 689b ldr r3, [r3, #8]
  16515. 80072f6: f023 0160 bic.w r1, r3, #96 @ 0x60
  16516. 80072fa: 687b ldr r3, [r7, #4]
  16517. 80072fc: 695a ldr r2, [r3, #20]
  16518. 80072fe: 687b ldr r3, [r7, #4]
  16519. 8007300: 681b ldr r3, [r3, #0]
  16520. 8007302: 430a orrs r2, r1
  16521. 8007304: 609a str r2, [r3, #8]
  16522. /* set output data inversion mode */
  16523. assert_param(IS_CRC_OUTPUTDATA_INVERSION_MODE(hcrc->Init.OutputDataInversionMode));
  16524. MODIFY_REG(hcrc->Instance->CR, CRC_CR_REV_OUT, hcrc->Init.OutputDataInversionMode);
  16525. 8007306: 687b ldr r3, [r7, #4]
  16526. 8007308: 681b ldr r3, [r3, #0]
  16527. 800730a: 689b ldr r3, [r3, #8]
  16528. 800730c: f023 0180 bic.w r1, r3, #128 @ 0x80
  16529. 8007310: 687b ldr r3, [r7, #4]
  16530. 8007312: 699a ldr r2, [r3, #24]
  16531. 8007314: 687b ldr r3, [r7, #4]
  16532. 8007316: 681b ldr r3, [r3, #0]
  16533. 8007318: 430a orrs r2, r1
  16534. 800731a: 609a str r2, [r3, #8]
  16535. /* makes sure the input data format (bytes, halfwords or words stream)
  16536. * is properly specified by user */
  16537. assert_param(IS_CRC_INPUTDATA_FORMAT(hcrc->InputDataFormat));
  16538. /* Change CRC peripheral state */
  16539. hcrc->State = HAL_CRC_STATE_READY;
  16540. 800731c: 687b ldr r3, [r7, #4]
  16541. 800731e: 2201 movs r2, #1
  16542. 8007320: 775a strb r2, [r3, #29]
  16543. /* Return function status */
  16544. return HAL_OK;
  16545. 8007322: 2300 movs r3, #0
  16546. }
  16547. 8007324: 4618 mov r0, r3
  16548. 8007326: 3708 adds r7, #8
  16549. 8007328: 46bd mov sp, r7
  16550. 800732a: bd80 pop {r7, pc}
  16551. 800732c: 04c11db7 .word 0x04c11db7
  16552. 08007330 <HAL_CRC_Calculate>:
  16553. * and the API will internally adjust its input data processing based on the
  16554. * handle field hcrc->InputDataFormat.
  16555. * @retval uint32_t CRC (returned value LSBs for CRC shorter than 32 bits)
  16556. */
  16557. uint32_t HAL_CRC_Calculate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength)
  16558. {
  16559. 8007330: b580 push {r7, lr}
  16560. 8007332: b086 sub sp, #24
  16561. 8007334: af00 add r7, sp, #0
  16562. 8007336: 60f8 str r0, [r7, #12]
  16563. 8007338: 60b9 str r1, [r7, #8]
  16564. 800733a: 607a str r2, [r7, #4]
  16565. uint32_t index; /* CRC input data buffer index */
  16566. uint32_t temp = 0U; /* CRC output (read from hcrc->Instance->DR register) */
  16567. 800733c: 2300 movs r3, #0
  16568. 800733e: 613b str r3, [r7, #16]
  16569. /* Change CRC peripheral state */
  16570. hcrc->State = HAL_CRC_STATE_BUSY;
  16571. 8007340: 68fb ldr r3, [r7, #12]
  16572. 8007342: 2202 movs r2, #2
  16573. 8007344: 775a strb r2, [r3, #29]
  16574. /* Reset CRC Calculation Unit (hcrc->Instance->INIT is
  16575. * written in hcrc->Instance->DR) */
  16576. __HAL_CRC_DR_RESET(hcrc);
  16577. 8007346: 68fb ldr r3, [r7, #12]
  16578. 8007348: 681b ldr r3, [r3, #0]
  16579. 800734a: 689a ldr r2, [r3, #8]
  16580. 800734c: 68fb ldr r3, [r7, #12]
  16581. 800734e: 681b ldr r3, [r3, #0]
  16582. 8007350: f042 0201 orr.w r2, r2, #1
  16583. 8007354: 609a str r2, [r3, #8]
  16584. switch (hcrc->InputDataFormat)
  16585. 8007356: 68fb ldr r3, [r7, #12]
  16586. 8007358: 6a1b ldr r3, [r3, #32]
  16587. 800735a: 2b03 cmp r3, #3
  16588. 800735c: d006 beq.n 800736c <HAL_CRC_Calculate+0x3c>
  16589. 800735e: 2b03 cmp r3, #3
  16590. 8007360: d829 bhi.n 80073b6 <HAL_CRC_Calculate+0x86>
  16591. 8007362: 2b01 cmp r3, #1
  16592. 8007364: d019 beq.n 800739a <HAL_CRC_Calculate+0x6a>
  16593. 8007366: 2b02 cmp r3, #2
  16594. 8007368: d01e beq.n 80073a8 <HAL_CRC_Calculate+0x78>
  16595. /* Specific 16-bit input data handling */
  16596. temp = CRC_Handle_16(hcrc, (uint16_t *)(void *)pBuffer, BufferLength); /* Derogation MisraC2012 R.11.5 */
  16597. break;
  16598. default:
  16599. break;
  16600. 800736a: e024 b.n 80073b6 <HAL_CRC_Calculate+0x86>
  16601. for (index = 0U; index < BufferLength; index++)
  16602. 800736c: 2300 movs r3, #0
  16603. 800736e: 617b str r3, [r7, #20]
  16604. 8007370: e00a b.n 8007388 <HAL_CRC_Calculate+0x58>
  16605. hcrc->Instance->DR = pBuffer[index];
  16606. 8007372: 697b ldr r3, [r7, #20]
  16607. 8007374: 009b lsls r3, r3, #2
  16608. 8007376: 68ba ldr r2, [r7, #8]
  16609. 8007378: 441a add r2, r3
  16610. 800737a: 68fb ldr r3, [r7, #12]
  16611. 800737c: 681b ldr r3, [r3, #0]
  16612. 800737e: 6812 ldr r2, [r2, #0]
  16613. 8007380: 601a str r2, [r3, #0]
  16614. for (index = 0U; index < BufferLength; index++)
  16615. 8007382: 697b ldr r3, [r7, #20]
  16616. 8007384: 3301 adds r3, #1
  16617. 8007386: 617b str r3, [r7, #20]
  16618. 8007388: 697a ldr r2, [r7, #20]
  16619. 800738a: 687b ldr r3, [r7, #4]
  16620. 800738c: 429a cmp r2, r3
  16621. 800738e: d3f0 bcc.n 8007372 <HAL_CRC_Calculate+0x42>
  16622. temp = hcrc->Instance->DR;
  16623. 8007390: 68fb ldr r3, [r7, #12]
  16624. 8007392: 681b ldr r3, [r3, #0]
  16625. 8007394: 681b ldr r3, [r3, #0]
  16626. 8007396: 613b str r3, [r7, #16]
  16627. break;
  16628. 8007398: e00e b.n 80073b8 <HAL_CRC_Calculate+0x88>
  16629. temp = CRC_Handle_8(hcrc, (uint8_t *)pBuffer, BufferLength);
  16630. 800739a: 687a ldr r2, [r7, #4]
  16631. 800739c: 68b9 ldr r1, [r7, #8]
  16632. 800739e: 68f8 ldr r0, [r7, #12]
  16633. 80073a0: f000 f812 bl 80073c8 <CRC_Handle_8>
  16634. 80073a4: 6138 str r0, [r7, #16]
  16635. break;
  16636. 80073a6: e007 b.n 80073b8 <HAL_CRC_Calculate+0x88>
  16637. temp = CRC_Handle_16(hcrc, (uint16_t *)(void *)pBuffer, BufferLength); /* Derogation MisraC2012 R.11.5 */
  16638. 80073a8: 687a ldr r2, [r7, #4]
  16639. 80073aa: 68b9 ldr r1, [r7, #8]
  16640. 80073ac: 68f8 ldr r0, [r7, #12]
  16641. 80073ae: f000 f899 bl 80074e4 <CRC_Handle_16>
  16642. 80073b2: 6138 str r0, [r7, #16]
  16643. break;
  16644. 80073b4: e000 b.n 80073b8 <HAL_CRC_Calculate+0x88>
  16645. break;
  16646. 80073b6: bf00 nop
  16647. }
  16648. /* Change CRC peripheral state */
  16649. hcrc->State = HAL_CRC_STATE_READY;
  16650. 80073b8: 68fb ldr r3, [r7, #12]
  16651. 80073ba: 2201 movs r2, #1
  16652. 80073bc: 775a strb r2, [r3, #29]
  16653. /* Return the CRC computed value */
  16654. return temp;
  16655. 80073be: 693b ldr r3, [r7, #16]
  16656. }
  16657. 80073c0: 4618 mov r0, r3
  16658. 80073c2: 3718 adds r7, #24
  16659. 80073c4: 46bd mov sp, r7
  16660. 80073c6: bd80 pop {r7, pc}
  16661. 080073c8 <CRC_Handle_8>:
  16662. * @param pBuffer pointer to the input data buffer
  16663. * @param BufferLength input data buffer length
  16664. * @retval uint32_t CRC (returned value LSBs for CRC shorter than 32 bits)
  16665. */
  16666. static uint32_t CRC_Handle_8(CRC_HandleTypeDef *hcrc, uint8_t pBuffer[], uint32_t BufferLength)
  16667. {
  16668. 80073c8: b480 push {r7}
  16669. 80073ca: b089 sub sp, #36 @ 0x24
  16670. 80073cc: af00 add r7, sp, #0
  16671. 80073ce: 60f8 str r0, [r7, #12]
  16672. 80073d0: 60b9 str r1, [r7, #8]
  16673. 80073d2: 607a str r2, [r7, #4]
  16674. __IO uint16_t *pReg;
  16675. /* Processing time optimization: 4 bytes are entered in a row with a single word write,
  16676. * last bytes must be carefully fed to the CRC calculator to ensure a correct type
  16677. * handling by the peripheral */
  16678. for (i = 0U; i < (BufferLength / 4U); i++)
  16679. 80073d4: 2300 movs r3, #0
  16680. 80073d6: 61fb str r3, [r7, #28]
  16681. 80073d8: e023 b.n 8007422 <CRC_Handle_8+0x5a>
  16682. {
  16683. hcrc->Instance->DR = ((uint32_t)pBuffer[4U * i] << 24U) | \
  16684. 80073da: 69fb ldr r3, [r7, #28]
  16685. 80073dc: 009b lsls r3, r3, #2
  16686. 80073de: 68ba ldr r2, [r7, #8]
  16687. 80073e0: 4413 add r3, r2
  16688. 80073e2: 781b ldrb r3, [r3, #0]
  16689. 80073e4: 061a lsls r2, r3, #24
  16690. ((uint32_t)pBuffer[(4U * i) + 1U] << 16U) | \
  16691. 80073e6: 69fb ldr r3, [r7, #28]
  16692. 80073e8: 009b lsls r3, r3, #2
  16693. 80073ea: 3301 adds r3, #1
  16694. 80073ec: 68b9 ldr r1, [r7, #8]
  16695. 80073ee: 440b add r3, r1
  16696. 80073f0: 781b ldrb r3, [r3, #0]
  16697. 80073f2: 041b lsls r3, r3, #16
  16698. hcrc->Instance->DR = ((uint32_t)pBuffer[4U * i] << 24U) | \
  16699. 80073f4: 431a orrs r2, r3
  16700. ((uint32_t)pBuffer[(4U * i) + 2U] << 8U) | \
  16701. 80073f6: 69fb ldr r3, [r7, #28]
  16702. 80073f8: 009b lsls r3, r3, #2
  16703. 80073fa: 3302 adds r3, #2
  16704. 80073fc: 68b9 ldr r1, [r7, #8]
  16705. 80073fe: 440b add r3, r1
  16706. 8007400: 781b ldrb r3, [r3, #0]
  16707. 8007402: 021b lsls r3, r3, #8
  16708. ((uint32_t)pBuffer[(4U * i) + 1U] << 16U) | \
  16709. 8007404: 431a orrs r2, r3
  16710. (uint32_t)pBuffer[(4U * i) + 3U];
  16711. 8007406: 69fb ldr r3, [r7, #28]
  16712. 8007408: 009b lsls r3, r3, #2
  16713. 800740a: 3303 adds r3, #3
  16714. 800740c: 68b9 ldr r1, [r7, #8]
  16715. 800740e: 440b add r3, r1
  16716. 8007410: 781b ldrb r3, [r3, #0]
  16717. 8007412: 4619 mov r1, r3
  16718. hcrc->Instance->DR = ((uint32_t)pBuffer[4U * i] << 24U) | \
  16719. 8007414: 68fb ldr r3, [r7, #12]
  16720. 8007416: 681b ldr r3, [r3, #0]
  16721. ((uint32_t)pBuffer[(4U * i) + 2U] << 8U) | \
  16722. 8007418: 430a orrs r2, r1
  16723. hcrc->Instance->DR = ((uint32_t)pBuffer[4U * i] << 24U) | \
  16724. 800741a: 601a str r2, [r3, #0]
  16725. for (i = 0U; i < (BufferLength / 4U); i++)
  16726. 800741c: 69fb ldr r3, [r7, #28]
  16727. 800741e: 3301 adds r3, #1
  16728. 8007420: 61fb str r3, [r7, #28]
  16729. 8007422: 687b ldr r3, [r7, #4]
  16730. 8007424: 089b lsrs r3, r3, #2
  16731. 8007426: 69fa ldr r2, [r7, #28]
  16732. 8007428: 429a cmp r2, r3
  16733. 800742a: d3d6 bcc.n 80073da <CRC_Handle_8+0x12>
  16734. }
  16735. /* last bytes specific handling */
  16736. if ((BufferLength % 4U) != 0U)
  16737. 800742c: 687b ldr r3, [r7, #4]
  16738. 800742e: f003 0303 and.w r3, r3, #3
  16739. 8007432: 2b00 cmp r3, #0
  16740. 8007434: d04d beq.n 80074d2 <CRC_Handle_8+0x10a>
  16741. {
  16742. if ((BufferLength % 4U) == 1U)
  16743. 8007436: 687b ldr r3, [r7, #4]
  16744. 8007438: f003 0303 and.w r3, r3, #3
  16745. 800743c: 2b01 cmp r3, #1
  16746. 800743e: d107 bne.n 8007450 <CRC_Handle_8+0x88>
  16747. {
  16748. *(__IO uint8_t *)(__IO void *)(&hcrc->Instance->DR) = pBuffer[4U * i]; /* Derogation MisraC2012 R.11.5 */
  16749. 8007440: 69fb ldr r3, [r7, #28]
  16750. 8007442: 009b lsls r3, r3, #2
  16751. 8007444: 68ba ldr r2, [r7, #8]
  16752. 8007446: 4413 add r3, r2
  16753. 8007448: 68fa ldr r2, [r7, #12]
  16754. 800744a: 6812 ldr r2, [r2, #0]
  16755. 800744c: 781b ldrb r3, [r3, #0]
  16756. 800744e: 7013 strb r3, [r2, #0]
  16757. }
  16758. if ((BufferLength % 4U) == 2U)
  16759. 8007450: 687b ldr r3, [r7, #4]
  16760. 8007452: f003 0303 and.w r3, r3, #3
  16761. 8007456: 2b02 cmp r3, #2
  16762. 8007458: d116 bne.n 8007488 <CRC_Handle_8+0xc0>
  16763. {
  16764. data = ((uint16_t)(pBuffer[4U * i]) << 8U) | (uint16_t)pBuffer[(4U * i) + 1U];
  16765. 800745a: 69fb ldr r3, [r7, #28]
  16766. 800745c: 009b lsls r3, r3, #2
  16767. 800745e: 68ba ldr r2, [r7, #8]
  16768. 8007460: 4413 add r3, r2
  16769. 8007462: 781b ldrb r3, [r3, #0]
  16770. 8007464: 021b lsls r3, r3, #8
  16771. 8007466: b21a sxth r2, r3
  16772. 8007468: 69fb ldr r3, [r7, #28]
  16773. 800746a: 009b lsls r3, r3, #2
  16774. 800746c: 3301 adds r3, #1
  16775. 800746e: 68b9 ldr r1, [r7, #8]
  16776. 8007470: 440b add r3, r1
  16777. 8007472: 781b ldrb r3, [r3, #0]
  16778. 8007474: b21b sxth r3, r3
  16779. 8007476: 4313 orrs r3, r2
  16780. 8007478: b21b sxth r3, r3
  16781. 800747a: 837b strh r3, [r7, #26]
  16782. pReg = (__IO uint16_t *)(__IO void *)(&hcrc->Instance->DR); /* Derogation MisraC2012 R.11.5 */
  16783. 800747c: 68fb ldr r3, [r7, #12]
  16784. 800747e: 681b ldr r3, [r3, #0]
  16785. 8007480: 617b str r3, [r7, #20]
  16786. *pReg = data;
  16787. 8007482: 697b ldr r3, [r7, #20]
  16788. 8007484: 8b7a ldrh r2, [r7, #26]
  16789. 8007486: 801a strh r2, [r3, #0]
  16790. }
  16791. if ((BufferLength % 4U) == 3U)
  16792. 8007488: 687b ldr r3, [r7, #4]
  16793. 800748a: f003 0303 and.w r3, r3, #3
  16794. 800748e: 2b03 cmp r3, #3
  16795. 8007490: d11f bne.n 80074d2 <CRC_Handle_8+0x10a>
  16796. {
  16797. data = ((uint16_t)(pBuffer[4U * i]) << 8U) | (uint16_t)pBuffer[(4U * i) + 1U];
  16798. 8007492: 69fb ldr r3, [r7, #28]
  16799. 8007494: 009b lsls r3, r3, #2
  16800. 8007496: 68ba ldr r2, [r7, #8]
  16801. 8007498: 4413 add r3, r2
  16802. 800749a: 781b ldrb r3, [r3, #0]
  16803. 800749c: 021b lsls r3, r3, #8
  16804. 800749e: b21a sxth r2, r3
  16805. 80074a0: 69fb ldr r3, [r7, #28]
  16806. 80074a2: 009b lsls r3, r3, #2
  16807. 80074a4: 3301 adds r3, #1
  16808. 80074a6: 68b9 ldr r1, [r7, #8]
  16809. 80074a8: 440b add r3, r1
  16810. 80074aa: 781b ldrb r3, [r3, #0]
  16811. 80074ac: b21b sxth r3, r3
  16812. 80074ae: 4313 orrs r3, r2
  16813. 80074b0: b21b sxth r3, r3
  16814. 80074b2: 837b strh r3, [r7, #26]
  16815. pReg = (__IO uint16_t *)(__IO void *)(&hcrc->Instance->DR); /* Derogation MisraC2012 R.11.5 */
  16816. 80074b4: 68fb ldr r3, [r7, #12]
  16817. 80074b6: 681b ldr r3, [r3, #0]
  16818. 80074b8: 617b str r3, [r7, #20]
  16819. *pReg = data;
  16820. 80074ba: 697b ldr r3, [r7, #20]
  16821. 80074bc: 8b7a ldrh r2, [r7, #26]
  16822. 80074be: 801a strh r2, [r3, #0]
  16823. *(__IO uint8_t *)(__IO void *)(&hcrc->Instance->DR) = pBuffer[(4U * i) + 2U]; /* Derogation MisraC2012 R.11.5 */
  16824. 80074c0: 69fb ldr r3, [r7, #28]
  16825. 80074c2: 009b lsls r3, r3, #2
  16826. 80074c4: 3302 adds r3, #2
  16827. 80074c6: 68ba ldr r2, [r7, #8]
  16828. 80074c8: 4413 add r3, r2
  16829. 80074ca: 68fa ldr r2, [r7, #12]
  16830. 80074cc: 6812 ldr r2, [r2, #0]
  16831. 80074ce: 781b ldrb r3, [r3, #0]
  16832. 80074d0: 7013 strb r3, [r2, #0]
  16833. }
  16834. }
  16835. /* Return the CRC computed value */
  16836. return hcrc->Instance->DR;
  16837. 80074d2: 68fb ldr r3, [r7, #12]
  16838. 80074d4: 681b ldr r3, [r3, #0]
  16839. 80074d6: 681b ldr r3, [r3, #0]
  16840. }
  16841. 80074d8: 4618 mov r0, r3
  16842. 80074da: 3724 adds r7, #36 @ 0x24
  16843. 80074dc: 46bd mov sp, r7
  16844. 80074de: f85d 7b04 ldr.w r7, [sp], #4
  16845. 80074e2: 4770 bx lr
  16846. 080074e4 <CRC_Handle_16>:
  16847. * @param pBuffer pointer to the input data buffer
  16848. * @param BufferLength input data buffer length
  16849. * @retval uint32_t CRC (returned value LSBs for CRC shorter than 32 bits)
  16850. */
  16851. static uint32_t CRC_Handle_16(CRC_HandleTypeDef *hcrc, uint16_t pBuffer[], uint32_t BufferLength)
  16852. {
  16853. 80074e4: b480 push {r7}
  16854. 80074e6: b087 sub sp, #28
  16855. 80074e8: af00 add r7, sp, #0
  16856. 80074ea: 60f8 str r0, [r7, #12]
  16857. 80074ec: 60b9 str r1, [r7, #8]
  16858. 80074ee: 607a str r2, [r7, #4]
  16859. __IO uint16_t *pReg;
  16860. /* Processing time optimization: 2 HalfWords are entered in a row with a single word write,
  16861. * in case of odd length, last HalfWord must be carefully fed to the CRC calculator to ensure
  16862. * a correct type handling by the peripheral */
  16863. for (i = 0U; i < (BufferLength / 2U); i++)
  16864. 80074f0: 2300 movs r3, #0
  16865. 80074f2: 617b str r3, [r7, #20]
  16866. 80074f4: e013 b.n 800751e <CRC_Handle_16+0x3a>
  16867. {
  16868. hcrc->Instance->DR = ((uint32_t)pBuffer[2U * i] << 16U) | (uint32_t)pBuffer[(2U * i) + 1U];
  16869. 80074f6: 697b ldr r3, [r7, #20]
  16870. 80074f8: 009b lsls r3, r3, #2
  16871. 80074fa: 68ba ldr r2, [r7, #8]
  16872. 80074fc: 4413 add r3, r2
  16873. 80074fe: 881b ldrh r3, [r3, #0]
  16874. 8007500: 041a lsls r2, r3, #16
  16875. 8007502: 697b ldr r3, [r7, #20]
  16876. 8007504: 009b lsls r3, r3, #2
  16877. 8007506: 3302 adds r3, #2
  16878. 8007508: 68b9 ldr r1, [r7, #8]
  16879. 800750a: 440b add r3, r1
  16880. 800750c: 881b ldrh r3, [r3, #0]
  16881. 800750e: 4619 mov r1, r3
  16882. 8007510: 68fb ldr r3, [r7, #12]
  16883. 8007512: 681b ldr r3, [r3, #0]
  16884. 8007514: 430a orrs r2, r1
  16885. 8007516: 601a str r2, [r3, #0]
  16886. for (i = 0U; i < (BufferLength / 2U); i++)
  16887. 8007518: 697b ldr r3, [r7, #20]
  16888. 800751a: 3301 adds r3, #1
  16889. 800751c: 617b str r3, [r7, #20]
  16890. 800751e: 687b ldr r3, [r7, #4]
  16891. 8007520: 085b lsrs r3, r3, #1
  16892. 8007522: 697a ldr r2, [r7, #20]
  16893. 8007524: 429a cmp r2, r3
  16894. 8007526: d3e6 bcc.n 80074f6 <CRC_Handle_16+0x12>
  16895. }
  16896. if ((BufferLength % 2U) != 0U)
  16897. 8007528: 687b ldr r3, [r7, #4]
  16898. 800752a: f003 0301 and.w r3, r3, #1
  16899. 800752e: 2b00 cmp r3, #0
  16900. 8007530: d009 beq.n 8007546 <CRC_Handle_16+0x62>
  16901. {
  16902. pReg = (__IO uint16_t *)(__IO void *)(&hcrc->Instance->DR); /* Derogation MisraC2012 R.11.5 */
  16903. 8007532: 68fb ldr r3, [r7, #12]
  16904. 8007534: 681b ldr r3, [r3, #0]
  16905. 8007536: 613b str r3, [r7, #16]
  16906. *pReg = pBuffer[2U * i];
  16907. 8007538: 697b ldr r3, [r7, #20]
  16908. 800753a: 009b lsls r3, r3, #2
  16909. 800753c: 68ba ldr r2, [r7, #8]
  16910. 800753e: 4413 add r3, r2
  16911. 8007540: 881a ldrh r2, [r3, #0]
  16912. 8007542: 693b ldr r3, [r7, #16]
  16913. 8007544: 801a strh r2, [r3, #0]
  16914. }
  16915. /* Return the CRC computed value */
  16916. return hcrc->Instance->DR;
  16917. 8007546: 68fb ldr r3, [r7, #12]
  16918. 8007548: 681b ldr r3, [r3, #0]
  16919. 800754a: 681b ldr r3, [r3, #0]
  16920. }
  16921. 800754c: 4618 mov r0, r3
  16922. 800754e: 371c adds r7, #28
  16923. 8007550: 46bd mov sp, r7
  16924. 8007552: f85d 7b04 ldr.w r7, [sp], #4
  16925. 8007556: 4770 bx lr
  16926. 08007558 <HAL_CRCEx_Polynomial_Set>:
  16927. * @arg @ref CRC_POLYLENGTH_16B 16-bit long CRC (generating polynomial of degree 16)
  16928. * @arg @ref CRC_POLYLENGTH_32B 32-bit long CRC (generating polynomial of degree 32)
  16929. * @retval HAL status
  16930. */
  16931. HAL_StatusTypeDef HAL_CRCEx_Polynomial_Set(CRC_HandleTypeDef *hcrc, uint32_t Pol, uint32_t PolyLength)
  16932. {
  16933. 8007558: b480 push {r7}
  16934. 800755a: b087 sub sp, #28
  16935. 800755c: af00 add r7, sp, #0
  16936. 800755e: 60f8 str r0, [r7, #12]
  16937. 8007560: 60b9 str r1, [r7, #8]
  16938. 8007562: 607a str r2, [r7, #4]
  16939. HAL_StatusTypeDef status = HAL_OK;
  16940. 8007564: 2300 movs r3, #0
  16941. 8007566: 75fb strb r3, [r7, #23]
  16942. uint32_t msb = 31U; /* polynomial degree is 32 at most, so msb is initialized to max value */
  16943. 8007568: 231f movs r3, #31
  16944. 800756a: 613b str r3, [r7, #16]
  16945. /* Check the parameters */
  16946. assert_param(IS_CRC_POL_LENGTH(PolyLength));
  16947. /* Ensure that the generating polynomial is odd */
  16948. if ((Pol & (uint32_t)(0x1U)) == 0U)
  16949. 800756c: 68bb ldr r3, [r7, #8]
  16950. 800756e: f003 0301 and.w r3, r3, #1
  16951. 8007572: 2b00 cmp r3, #0
  16952. 8007574: d102 bne.n 800757c <HAL_CRCEx_Polynomial_Set+0x24>
  16953. {
  16954. status = HAL_ERROR;
  16955. 8007576: 2301 movs r3, #1
  16956. 8007578: 75fb strb r3, [r7, #23]
  16957. 800757a: e063 b.n 8007644 <HAL_CRCEx_Polynomial_Set+0xec>
  16958. * definition. HAL_ERROR is reported if Pol degree is
  16959. * larger than that indicated by PolyLength.
  16960. * Look for MSB position: msb will contain the degree of
  16961. * the second to the largest polynomial member. E.g., for
  16962. * X^7 + X^6 + X^5 + X^2 + 1, msb = 6. */
  16963. while ((msb-- > 0U) && ((Pol & ((uint32_t)(0x1U) << (msb & 0x1FU))) == 0U))
  16964. 800757c: bf00 nop
  16965. 800757e: 693b ldr r3, [r7, #16]
  16966. 8007580: 1e5a subs r2, r3, #1
  16967. 8007582: 613a str r2, [r7, #16]
  16968. 8007584: 2b00 cmp r3, #0
  16969. 8007586: d009 beq.n 800759c <HAL_CRCEx_Polynomial_Set+0x44>
  16970. 8007588: 693b ldr r3, [r7, #16]
  16971. 800758a: f003 031f and.w r3, r3, #31
  16972. 800758e: 68ba ldr r2, [r7, #8]
  16973. 8007590: fa22 f303 lsr.w r3, r2, r3
  16974. 8007594: f003 0301 and.w r3, r3, #1
  16975. 8007598: 2b00 cmp r3, #0
  16976. 800759a: d0f0 beq.n 800757e <HAL_CRCEx_Polynomial_Set+0x26>
  16977. {
  16978. }
  16979. switch (PolyLength)
  16980. 800759c: 687b ldr r3, [r7, #4]
  16981. 800759e: 2b18 cmp r3, #24
  16982. 80075a0: d846 bhi.n 8007630 <HAL_CRCEx_Polynomial_Set+0xd8>
  16983. 80075a2: a201 add r2, pc, #4 @ (adr r2, 80075a8 <HAL_CRCEx_Polynomial_Set+0x50>)
  16984. 80075a4: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  16985. 80075a8: 08007637 .word 0x08007637
  16986. 80075ac: 08007631 .word 0x08007631
  16987. 80075b0: 08007631 .word 0x08007631
  16988. 80075b4: 08007631 .word 0x08007631
  16989. 80075b8: 08007631 .word 0x08007631
  16990. 80075bc: 08007631 .word 0x08007631
  16991. 80075c0: 08007631 .word 0x08007631
  16992. 80075c4: 08007631 .word 0x08007631
  16993. 80075c8: 08007625 .word 0x08007625
  16994. 80075cc: 08007631 .word 0x08007631
  16995. 80075d0: 08007631 .word 0x08007631
  16996. 80075d4: 08007631 .word 0x08007631
  16997. 80075d8: 08007631 .word 0x08007631
  16998. 80075dc: 08007631 .word 0x08007631
  16999. 80075e0: 08007631 .word 0x08007631
  17000. 80075e4: 08007631 .word 0x08007631
  17001. 80075e8: 08007619 .word 0x08007619
  17002. 80075ec: 08007631 .word 0x08007631
  17003. 80075f0: 08007631 .word 0x08007631
  17004. 80075f4: 08007631 .word 0x08007631
  17005. 80075f8: 08007631 .word 0x08007631
  17006. 80075fc: 08007631 .word 0x08007631
  17007. 8007600: 08007631 .word 0x08007631
  17008. 8007604: 08007631 .word 0x08007631
  17009. 8007608: 0800760d .word 0x0800760d
  17010. {
  17011. case CRC_POLYLENGTH_7B:
  17012. if (msb >= HAL_CRC_LENGTH_7B)
  17013. 800760c: 693b ldr r3, [r7, #16]
  17014. 800760e: 2b06 cmp r3, #6
  17015. 8007610: d913 bls.n 800763a <HAL_CRCEx_Polynomial_Set+0xe2>
  17016. {
  17017. status = HAL_ERROR;
  17018. 8007612: 2301 movs r3, #1
  17019. 8007614: 75fb strb r3, [r7, #23]
  17020. }
  17021. break;
  17022. 8007616: e010 b.n 800763a <HAL_CRCEx_Polynomial_Set+0xe2>
  17023. case CRC_POLYLENGTH_8B:
  17024. if (msb >= HAL_CRC_LENGTH_8B)
  17025. 8007618: 693b ldr r3, [r7, #16]
  17026. 800761a: 2b07 cmp r3, #7
  17027. 800761c: d90f bls.n 800763e <HAL_CRCEx_Polynomial_Set+0xe6>
  17028. {
  17029. status = HAL_ERROR;
  17030. 800761e: 2301 movs r3, #1
  17031. 8007620: 75fb strb r3, [r7, #23]
  17032. }
  17033. break;
  17034. 8007622: e00c b.n 800763e <HAL_CRCEx_Polynomial_Set+0xe6>
  17035. case CRC_POLYLENGTH_16B:
  17036. if (msb >= HAL_CRC_LENGTH_16B)
  17037. 8007624: 693b ldr r3, [r7, #16]
  17038. 8007626: 2b0f cmp r3, #15
  17039. 8007628: d90b bls.n 8007642 <HAL_CRCEx_Polynomial_Set+0xea>
  17040. {
  17041. status = HAL_ERROR;
  17042. 800762a: 2301 movs r3, #1
  17043. 800762c: 75fb strb r3, [r7, #23]
  17044. }
  17045. break;
  17046. 800762e: e008 b.n 8007642 <HAL_CRCEx_Polynomial_Set+0xea>
  17047. case CRC_POLYLENGTH_32B:
  17048. /* no polynomial definition vs. polynomial length issue possible */
  17049. break;
  17050. default:
  17051. status = HAL_ERROR;
  17052. 8007630: 2301 movs r3, #1
  17053. 8007632: 75fb strb r3, [r7, #23]
  17054. break;
  17055. 8007634: e006 b.n 8007644 <HAL_CRCEx_Polynomial_Set+0xec>
  17056. break;
  17057. 8007636: bf00 nop
  17058. 8007638: e004 b.n 8007644 <HAL_CRCEx_Polynomial_Set+0xec>
  17059. break;
  17060. 800763a: bf00 nop
  17061. 800763c: e002 b.n 8007644 <HAL_CRCEx_Polynomial_Set+0xec>
  17062. break;
  17063. 800763e: bf00 nop
  17064. 8007640: e000 b.n 8007644 <HAL_CRCEx_Polynomial_Set+0xec>
  17065. break;
  17066. 8007642: bf00 nop
  17067. }
  17068. }
  17069. if (status == HAL_OK)
  17070. 8007644: 7dfb ldrb r3, [r7, #23]
  17071. 8007646: 2b00 cmp r3, #0
  17072. 8007648: d10d bne.n 8007666 <HAL_CRCEx_Polynomial_Set+0x10e>
  17073. {
  17074. /* set generating polynomial */
  17075. WRITE_REG(hcrc->Instance->POL, Pol);
  17076. 800764a: 68fb ldr r3, [r7, #12]
  17077. 800764c: 681b ldr r3, [r3, #0]
  17078. 800764e: 68ba ldr r2, [r7, #8]
  17079. 8007650: 615a str r2, [r3, #20]
  17080. /* set generating polynomial size */
  17081. MODIFY_REG(hcrc->Instance->CR, CRC_CR_POLYSIZE, PolyLength);
  17082. 8007652: 68fb ldr r3, [r7, #12]
  17083. 8007654: 681b ldr r3, [r3, #0]
  17084. 8007656: 689b ldr r3, [r3, #8]
  17085. 8007658: f023 0118 bic.w r1, r3, #24
  17086. 800765c: 68fb ldr r3, [r7, #12]
  17087. 800765e: 681b ldr r3, [r3, #0]
  17088. 8007660: 687a ldr r2, [r7, #4]
  17089. 8007662: 430a orrs r2, r1
  17090. 8007664: 609a str r2, [r3, #8]
  17091. }
  17092. /* Return function status */
  17093. return status;
  17094. 8007666: 7dfb ldrb r3, [r7, #23]
  17095. }
  17096. 8007668: 4618 mov r0, r3
  17097. 800766a: 371c adds r7, #28
  17098. 800766c: 46bd mov sp, r7
  17099. 800766e: f85d 7b04 ldr.w r7, [sp], #4
  17100. 8007672: 4770 bx lr
  17101. 08007674 <HAL_DAC_Init>:
  17102. * @param hdac pointer to a DAC_HandleTypeDef structure that contains
  17103. * the configuration information for the specified DAC.
  17104. * @retval HAL status
  17105. */
  17106. HAL_StatusTypeDef HAL_DAC_Init(DAC_HandleTypeDef *hdac)
  17107. {
  17108. 8007674: b580 push {r7, lr}
  17109. 8007676: b082 sub sp, #8
  17110. 8007678: af00 add r7, sp, #0
  17111. 800767a: 6078 str r0, [r7, #4]
  17112. /* Check the DAC peripheral handle */
  17113. if (hdac == NULL)
  17114. 800767c: 687b ldr r3, [r7, #4]
  17115. 800767e: 2b00 cmp r3, #0
  17116. 8007680: d101 bne.n 8007686 <HAL_DAC_Init+0x12>
  17117. {
  17118. return HAL_ERROR;
  17119. 8007682: 2301 movs r3, #1
  17120. 8007684: e014 b.n 80076b0 <HAL_DAC_Init+0x3c>
  17121. }
  17122. /* Check the parameters */
  17123. assert_param(IS_DAC_ALL_INSTANCE(hdac->Instance));
  17124. if (hdac->State == HAL_DAC_STATE_RESET)
  17125. 8007686: 687b ldr r3, [r7, #4]
  17126. 8007688: 791b ldrb r3, [r3, #4]
  17127. 800768a: b2db uxtb r3, r3
  17128. 800768c: 2b00 cmp r3, #0
  17129. 800768e: d105 bne.n 800769c <HAL_DAC_Init+0x28>
  17130. hdac->MspInitCallback = HAL_DAC_MspInit;
  17131. }
  17132. #endif /* USE_HAL_DAC_REGISTER_CALLBACKS */
  17133. /* Allocate lock resource and initialize it */
  17134. hdac->Lock = HAL_UNLOCKED;
  17135. 8007690: 687b ldr r3, [r7, #4]
  17136. 8007692: 2200 movs r2, #0
  17137. 8007694: 715a strb r2, [r3, #5]
  17138. #if (USE_HAL_DAC_REGISTER_CALLBACKS == 1)
  17139. /* Init the low level hardware */
  17140. hdac->MspInitCallback(hdac);
  17141. #else
  17142. /* Init the low level hardware */
  17143. HAL_DAC_MspInit(hdac);
  17144. 8007696: 6878 ldr r0, [r7, #4]
  17145. 8007698: f7fc f8f4 bl 8003884 <HAL_DAC_MspInit>
  17146. #endif /* USE_HAL_DAC_REGISTER_CALLBACKS */
  17147. }
  17148. /* Initialize the DAC state*/
  17149. hdac->State = HAL_DAC_STATE_BUSY;
  17150. 800769c: 687b ldr r3, [r7, #4]
  17151. 800769e: 2202 movs r2, #2
  17152. 80076a0: 711a strb r2, [r3, #4]
  17153. /* Set DAC error code to none */
  17154. hdac->ErrorCode = HAL_DAC_ERROR_NONE;
  17155. 80076a2: 687b ldr r3, [r7, #4]
  17156. 80076a4: 2200 movs r2, #0
  17157. 80076a6: 611a str r2, [r3, #16]
  17158. /* Initialize the DAC state*/
  17159. hdac->State = HAL_DAC_STATE_READY;
  17160. 80076a8: 687b ldr r3, [r7, #4]
  17161. 80076aa: 2201 movs r2, #1
  17162. 80076ac: 711a strb r2, [r3, #4]
  17163. /* Return function status */
  17164. return HAL_OK;
  17165. 80076ae: 2300 movs r3, #0
  17166. }
  17167. 80076b0: 4618 mov r0, r3
  17168. 80076b2: 3708 adds r7, #8
  17169. 80076b4: 46bd mov sp, r7
  17170. 80076b6: bd80 pop {r7, pc}
  17171. 080076b8 <HAL_DAC_Start>:
  17172. * @arg DAC_CHANNEL_1: DAC Channel1 selected
  17173. * @arg DAC_CHANNEL_2: DAC Channel2 selected
  17174. * @retval HAL status
  17175. */
  17176. HAL_StatusTypeDef HAL_DAC_Start(DAC_HandleTypeDef *hdac, uint32_t Channel)
  17177. {
  17178. 80076b8: b480 push {r7}
  17179. 80076ba: b083 sub sp, #12
  17180. 80076bc: af00 add r7, sp, #0
  17181. 80076be: 6078 str r0, [r7, #4]
  17182. 80076c0: 6039 str r1, [r7, #0]
  17183. /* Check the DAC peripheral handle */
  17184. if (hdac == NULL)
  17185. 80076c2: 687b ldr r3, [r7, #4]
  17186. 80076c4: 2b00 cmp r3, #0
  17187. 80076c6: d101 bne.n 80076cc <HAL_DAC_Start+0x14>
  17188. {
  17189. return HAL_ERROR;
  17190. 80076c8: 2301 movs r3, #1
  17191. 80076ca: e046 b.n 800775a <HAL_DAC_Start+0xa2>
  17192. /* Check the parameters */
  17193. assert_param(IS_DAC_CHANNEL(Channel));
  17194. /* Process locked */
  17195. __HAL_LOCK(hdac);
  17196. 80076cc: 687b ldr r3, [r7, #4]
  17197. 80076ce: 795b ldrb r3, [r3, #5]
  17198. 80076d0: 2b01 cmp r3, #1
  17199. 80076d2: d101 bne.n 80076d8 <HAL_DAC_Start+0x20>
  17200. 80076d4: 2302 movs r3, #2
  17201. 80076d6: e040 b.n 800775a <HAL_DAC_Start+0xa2>
  17202. 80076d8: 687b ldr r3, [r7, #4]
  17203. 80076da: 2201 movs r2, #1
  17204. 80076dc: 715a strb r2, [r3, #5]
  17205. /* Change DAC state */
  17206. hdac->State = HAL_DAC_STATE_BUSY;
  17207. 80076de: 687b ldr r3, [r7, #4]
  17208. 80076e0: 2202 movs r2, #2
  17209. 80076e2: 711a strb r2, [r3, #4]
  17210. /* Enable the Peripheral */
  17211. __HAL_DAC_ENABLE(hdac, Channel);
  17212. 80076e4: 687b ldr r3, [r7, #4]
  17213. 80076e6: 681b ldr r3, [r3, #0]
  17214. 80076e8: 6819 ldr r1, [r3, #0]
  17215. 80076ea: 683b ldr r3, [r7, #0]
  17216. 80076ec: f003 0310 and.w r3, r3, #16
  17217. 80076f0: 2201 movs r2, #1
  17218. 80076f2: 409a lsls r2, r3
  17219. 80076f4: 687b ldr r3, [r7, #4]
  17220. 80076f6: 681b ldr r3, [r3, #0]
  17221. 80076f8: 430a orrs r2, r1
  17222. 80076fa: 601a str r2, [r3, #0]
  17223. if (Channel == DAC_CHANNEL_1)
  17224. 80076fc: 683b ldr r3, [r7, #0]
  17225. 80076fe: 2b00 cmp r3, #0
  17226. 8007700: d10f bne.n 8007722 <HAL_DAC_Start+0x6a>
  17227. {
  17228. /* Check if software trigger enabled */
  17229. if ((hdac->Instance->CR & (DAC_CR_TEN1 | DAC_CR_TSEL1)) == DAC_TRIGGER_SOFTWARE)
  17230. 8007702: 687b ldr r3, [r7, #4]
  17231. 8007704: 681b ldr r3, [r3, #0]
  17232. 8007706: 681b ldr r3, [r3, #0]
  17233. 8007708: f003 033e and.w r3, r3, #62 @ 0x3e
  17234. 800770c: 2b02 cmp r3, #2
  17235. 800770e: d11d bne.n 800774c <HAL_DAC_Start+0x94>
  17236. {
  17237. /* Enable the selected DAC software conversion */
  17238. SET_BIT(hdac->Instance->SWTRIGR, DAC_SWTRIGR_SWTRIG1);
  17239. 8007710: 687b ldr r3, [r7, #4]
  17240. 8007712: 681b ldr r3, [r3, #0]
  17241. 8007714: 685a ldr r2, [r3, #4]
  17242. 8007716: 687b ldr r3, [r7, #4]
  17243. 8007718: 681b ldr r3, [r3, #0]
  17244. 800771a: f042 0201 orr.w r2, r2, #1
  17245. 800771e: 605a str r2, [r3, #4]
  17246. 8007720: e014 b.n 800774c <HAL_DAC_Start+0x94>
  17247. }
  17248. else
  17249. {
  17250. /* Check if software trigger enabled */
  17251. if ((hdac->Instance->CR & (DAC_CR_TEN2 | DAC_CR_TSEL2)) == (DAC_TRIGGER_SOFTWARE << (Channel & 0x10UL)))
  17252. 8007722: 687b ldr r3, [r7, #4]
  17253. 8007724: 681b ldr r3, [r3, #0]
  17254. 8007726: 681b ldr r3, [r3, #0]
  17255. 8007728: f403 1278 and.w r2, r3, #4063232 @ 0x3e0000
  17256. 800772c: 683b ldr r3, [r7, #0]
  17257. 800772e: f003 0310 and.w r3, r3, #16
  17258. 8007732: 2102 movs r1, #2
  17259. 8007734: fa01 f303 lsl.w r3, r1, r3
  17260. 8007738: 429a cmp r2, r3
  17261. 800773a: d107 bne.n 800774c <HAL_DAC_Start+0x94>
  17262. {
  17263. /* Enable the selected DAC software conversion*/
  17264. SET_BIT(hdac->Instance->SWTRIGR, DAC_SWTRIGR_SWTRIG2);
  17265. 800773c: 687b ldr r3, [r7, #4]
  17266. 800773e: 681b ldr r3, [r3, #0]
  17267. 8007740: 685a ldr r2, [r3, #4]
  17268. 8007742: 687b ldr r3, [r7, #4]
  17269. 8007744: 681b ldr r3, [r3, #0]
  17270. 8007746: f042 0202 orr.w r2, r2, #2
  17271. 800774a: 605a str r2, [r3, #4]
  17272. }
  17273. }
  17274. /* Change DAC state */
  17275. hdac->State = HAL_DAC_STATE_READY;
  17276. 800774c: 687b ldr r3, [r7, #4]
  17277. 800774e: 2201 movs r2, #1
  17278. 8007750: 711a strb r2, [r3, #4]
  17279. /* Process unlocked */
  17280. __HAL_UNLOCK(hdac);
  17281. 8007752: 687b ldr r3, [r7, #4]
  17282. 8007754: 2200 movs r2, #0
  17283. 8007756: 715a strb r2, [r3, #5]
  17284. /* Return function status */
  17285. return HAL_OK;
  17286. 8007758: 2300 movs r3, #0
  17287. }
  17288. 800775a: 4618 mov r0, r3
  17289. 800775c: 370c adds r7, #12
  17290. 800775e: 46bd mov sp, r7
  17291. 8007760: f85d 7b04 ldr.w r7, [sp], #4
  17292. 8007764: 4770 bx lr
  17293. 08007766 <HAL_DAC_IRQHandler>:
  17294. * @param hdac pointer to a DAC_HandleTypeDef structure that contains
  17295. * the configuration information for the specified DAC.
  17296. * @retval None
  17297. */
  17298. void HAL_DAC_IRQHandler(DAC_HandleTypeDef *hdac)
  17299. {
  17300. 8007766: b580 push {r7, lr}
  17301. 8007768: b084 sub sp, #16
  17302. 800776a: af00 add r7, sp, #0
  17303. 800776c: 6078 str r0, [r7, #4]
  17304. uint32_t itsource = hdac->Instance->CR;
  17305. 800776e: 687b ldr r3, [r7, #4]
  17306. 8007770: 681b ldr r3, [r3, #0]
  17307. 8007772: 681b ldr r3, [r3, #0]
  17308. 8007774: 60fb str r3, [r7, #12]
  17309. uint32_t itflag = hdac->Instance->SR;
  17310. 8007776: 687b ldr r3, [r7, #4]
  17311. 8007778: 681b ldr r3, [r3, #0]
  17312. 800777a: 6b5b ldr r3, [r3, #52] @ 0x34
  17313. 800777c: 60bb str r3, [r7, #8]
  17314. if ((itsource & DAC_IT_DMAUDR1) == DAC_IT_DMAUDR1)
  17315. 800777e: 68fb ldr r3, [r7, #12]
  17316. 8007780: f403 5300 and.w r3, r3, #8192 @ 0x2000
  17317. 8007784: 2b00 cmp r3, #0
  17318. 8007786: d01d beq.n 80077c4 <HAL_DAC_IRQHandler+0x5e>
  17319. {
  17320. /* Check underrun flag of DAC channel 1 */
  17321. if ((itflag & DAC_FLAG_DMAUDR1) == DAC_FLAG_DMAUDR1)
  17322. 8007788: 68bb ldr r3, [r7, #8]
  17323. 800778a: f403 5300 and.w r3, r3, #8192 @ 0x2000
  17324. 800778e: 2b00 cmp r3, #0
  17325. 8007790: d018 beq.n 80077c4 <HAL_DAC_IRQHandler+0x5e>
  17326. {
  17327. /* Change DAC state to error state */
  17328. hdac->State = HAL_DAC_STATE_ERROR;
  17329. 8007792: 687b ldr r3, [r7, #4]
  17330. 8007794: 2204 movs r2, #4
  17331. 8007796: 711a strb r2, [r3, #4]
  17332. /* Set DAC error code to channel1 DMA underrun error */
  17333. SET_BIT(hdac->ErrorCode, HAL_DAC_ERROR_DMAUNDERRUNCH1);
  17334. 8007798: 687b ldr r3, [r7, #4]
  17335. 800779a: 691b ldr r3, [r3, #16]
  17336. 800779c: f043 0201 orr.w r2, r3, #1
  17337. 80077a0: 687b ldr r3, [r7, #4]
  17338. 80077a2: 611a str r2, [r3, #16]
  17339. /* Clear the underrun flag */
  17340. __HAL_DAC_CLEAR_FLAG(hdac, DAC_FLAG_DMAUDR1);
  17341. 80077a4: 687b ldr r3, [r7, #4]
  17342. 80077a6: 681b ldr r3, [r3, #0]
  17343. 80077a8: f44f 5200 mov.w r2, #8192 @ 0x2000
  17344. 80077ac: 635a str r2, [r3, #52] @ 0x34
  17345. /* Disable the selected DAC channel1 DMA request */
  17346. __HAL_DAC_DISABLE_IT(hdac, DAC_CR_DMAEN1);
  17347. 80077ae: 687b ldr r3, [r7, #4]
  17348. 80077b0: 681b ldr r3, [r3, #0]
  17349. 80077b2: 681a ldr r2, [r3, #0]
  17350. 80077b4: 687b ldr r3, [r7, #4]
  17351. 80077b6: 681b ldr r3, [r3, #0]
  17352. 80077b8: f422 5280 bic.w r2, r2, #4096 @ 0x1000
  17353. 80077bc: 601a str r2, [r3, #0]
  17354. /* Error callback */
  17355. #if (USE_HAL_DAC_REGISTER_CALLBACKS == 1)
  17356. hdac->DMAUnderrunCallbackCh1(hdac);
  17357. #else
  17358. HAL_DAC_DMAUnderrunCallbackCh1(hdac);
  17359. 80077be: 6878 ldr r0, [r7, #4]
  17360. 80077c0: f000 f851 bl 8007866 <HAL_DAC_DMAUnderrunCallbackCh1>
  17361. #endif /* USE_HAL_DAC_REGISTER_CALLBACKS */
  17362. }
  17363. }
  17364. if ((itsource & DAC_IT_DMAUDR2) == DAC_IT_DMAUDR2)
  17365. 80077c4: 68fb ldr r3, [r7, #12]
  17366. 80077c6: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  17367. 80077ca: 2b00 cmp r3, #0
  17368. 80077cc: d01d beq.n 800780a <HAL_DAC_IRQHandler+0xa4>
  17369. {
  17370. /* Check underrun flag of DAC channel 2 */
  17371. if ((itflag & DAC_FLAG_DMAUDR2) == DAC_FLAG_DMAUDR2)
  17372. 80077ce: 68bb ldr r3, [r7, #8]
  17373. 80077d0: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  17374. 80077d4: 2b00 cmp r3, #0
  17375. 80077d6: d018 beq.n 800780a <HAL_DAC_IRQHandler+0xa4>
  17376. {
  17377. /* Change DAC state to error state */
  17378. hdac->State = HAL_DAC_STATE_ERROR;
  17379. 80077d8: 687b ldr r3, [r7, #4]
  17380. 80077da: 2204 movs r2, #4
  17381. 80077dc: 711a strb r2, [r3, #4]
  17382. /* Set DAC error code to channel2 DMA underrun error */
  17383. SET_BIT(hdac->ErrorCode, HAL_DAC_ERROR_DMAUNDERRUNCH2);
  17384. 80077de: 687b ldr r3, [r7, #4]
  17385. 80077e0: 691b ldr r3, [r3, #16]
  17386. 80077e2: f043 0202 orr.w r2, r3, #2
  17387. 80077e6: 687b ldr r3, [r7, #4]
  17388. 80077e8: 611a str r2, [r3, #16]
  17389. /* Clear the underrun flag */
  17390. __HAL_DAC_CLEAR_FLAG(hdac, DAC_FLAG_DMAUDR2);
  17391. 80077ea: 687b ldr r3, [r7, #4]
  17392. 80077ec: 681b ldr r3, [r3, #0]
  17393. 80077ee: f04f 5200 mov.w r2, #536870912 @ 0x20000000
  17394. 80077f2: 635a str r2, [r3, #52] @ 0x34
  17395. /* Disable the selected DAC channel2 DMA request */
  17396. __HAL_DAC_DISABLE_IT(hdac, DAC_CR_DMAEN2);
  17397. 80077f4: 687b ldr r3, [r7, #4]
  17398. 80077f6: 681b ldr r3, [r3, #0]
  17399. 80077f8: 681a ldr r2, [r3, #0]
  17400. 80077fa: 687b ldr r3, [r7, #4]
  17401. 80077fc: 681b ldr r3, [r3, #0]
  17402. 80077fe: f022 5280 bic.w r2, r2, #268435456 @ 0x10000000
  17403. 8007802: 601a str r2, [r3, #0]
  17404. /* Error callback */
  17405. #if (USE_HAL_DAC_REGISTER_CALLBACKS == 1)
  17406. hdac->DMAUnderrunCallbackCh2(hdac);
  17407. #else
  17408. HAL_DACEx_DMAUnderrunCallbackCh2(hdac);
  17409. 8007804: 6878 ldr r0, [r7, #4]
  17410. 8007806: f000 f97b bl 8007b00 <HAL_DACEx_DMAUnderrunCallbackCh2>
  17411. #endif /* USE_HAL_DAC_REGISTER_CALLBACKS */
  17412. }
  17413. }
  17414. }
  17415. 800780a: bf00 nop
  17416. 800780c: 3710 adds r7, #16
  17417. 800780e: 46bd mov sp, r7
  17418. 8007810: bd80 pop {r7, pc}
  17419. 08007812 <HAL_DAC_SetValue>:
  17420. * @arg DAC_ALIGN_12B_R: 12bit right data alignment selected
  17421. * @param Data Data to be loaded in the selected data holding register.
  17422. * @retval HAL status
  17423. */
  17424. HAL_StatusTypeDef HAL_DAC_SetValue(DAC_HandleTypeDef *hdac, uint32_t Channel, uint32_t Alignment, uint32_t Data)
  17425. {
  17426. 8007812: b480 push {r7}
  17427. 8007814: b087 sub sp, #28
  17428. 8007816: af00 add r7, sp, #0
  17429. 8007818: 60f8 str r0, [r7, #12]
  17430. 800781a: 60b9 str r1, [r7, #8]
  17431. 800781c: 607a str r2, [r7, #4]
  17432. 800781e: 603b str r3, [r7, #0]
  17433. __IO uint32_t tmp = 0UL;
  17434. 8007820: 2300 movs r3, #0
  17435. 8007822: 617b str r3, [r7, #20]
  17436. /* Check the DAC peripheral handle */
  17437. if (hdac == NULL)
  17438. 8007824: 68fb ldr r3, [r7, #12]
  17439. 8007826: 2b00 cmp r3, #0
  17440. 8007828: d101 bne.n 800782e <HAL_DAC_SetValue+0x1c>
  17441. {
  17442. return HAL_ERROR;
  17443. 800782a: 2301 movs r3, #1
  17444. 800782c: e015 b.n 800785a <HAL_DAC_SetValue+0x48>
  17445. /* Check the parameters */
  17446. assert_param(IS_DAC_CHANNEL(Channel));
  17447. assert_param(IS_DAC_ALIGN(Alignment));
  17448. assert_param(IS_DAC_DATA(Data));
  17449. tmp = (uint32_t)hdac->Instance;
  17450. 800782e: 68fb ldr r3, [r7, #12]
  17451. 8007830: 681b ldr r3, [r3, #0]
  17452. 8007832: 617b str r3, [r7, #20]
  17453. if (Channel == DAC_CHANNEL_1)
  17454. 8007834: 68bb ldr r3, [r7, #8]
  17455. 8007836: 2b00 cmp r3, #0
  17456. 8007838: d105 bne.n 8007846 <HAL_DAC_SetValue+0x34>
  17457. {
  17458. tmp += DAC_DHR12R1_ALIGNMENT(Alignment);
  17459. 800783a: 697a ldr r2, [r7, #20]
  17460. 800783c: 687b ldr r3, [r7, #4]
  17461. 800783e: 4413 add r3, r2
  17462. 8007840: 3308 adds r3, #8
  17463. 8007842: 617b str r3, [r7, #20]
  17464. 8007844: e004 b.n 8007850 <HAL_DAC_SetValue+0x3e>
  17465. }
  17466. else
  17467. {
  17468. tmp += DAC_DHR12R2_ALIGNMENT(Alignment);
  17469. 8007846: 697a ldr r2, [r7, #20]
  17470. 8007848: 687b ldr r3, [r7, #4]
  17471. 800784a: 4413 add r3, r2
  17472. 800784c: 3314 adds r3, #20
  17473. 800784e: 617b str r3, [r7, #20]
  17474. }
  17475. /* Set the DAC channel selected data holding register */
  17476. *(__IO uint32_t *) tmp = Data;
  17477. 8007850: 697b ldr r3, [r7, #20]
  17478. 8007852: 461a mov r2, r3
  17479. 8007854: 683b ldr r3, [r7, #0]
  17480. 8007856: 6013 str r3, [r2, #0]
  17481. /* Return function status */
  17482. return HAL_OK;
  17483. 8007858: 2300 movs r3, #0
  17484. }
  17485. 800785a: 4618 mov r0, r3
  17486. 800785c: 371c adds r7, #28
  17487. 800785e: 46bd mov sp, r7
  17488. 8007860: f85d 7b04 ldr.w r7, [sp], #4
  17489. 8007864: 4770 bx lr
  17490. 08007866 <HAL_DAC_DMAUnderrunCallbackCh1>:
  17491. * @param hdac pointer to a DAC_HandleTypeDef structure that contains
  17492. * the configuration information for the specified DAC.
  17493. * @retval None
  17494. */
  17495. __weak void HAL_DAC_DMAUnderrunCallbackCh1(DAC_HandleTypeDef *hdac)
  17496. {
  17497. 8007866: b480 push {r7}
  17498. 8007868: b083 sub sp, #12
  17499. 800786a: af00 add r7, sp, #0
  17500. 800786c: 6078 str r0, [r7, #4]
  17501. UNUSED(hdac);
  17502. /* NOTE : This function should not be modified, when the callback is needed,
  17503. the HAL_DAC_DMAUnderrunCallbackCh1 could be implemented in the user file
  17504. */
  17505. }
  17506. 800786e: bf00 nop
  17507. 8007870: 370c adds r7, #12
  17508. 8007872: 46bd mov sp, r7
  17509. 8007874: f85d 7b04 ldr.w r7, [sp], #4
  17510. 8007878: 4770 bx lr
  17511. ...
  17512. 0800787c <HAL_DAC_ConfigChannel>:
  17513. * @arg DAC_CHANNEL_2: DAC Channel2 selected
  17514. * @retval HAL status
  17515. */
  17516. HAL_StatusTypeDef HAL_DAC_ConfigChannel(DAC_HandleTypeDef *hdac,
  17517. const DAC_ChannelConfTypeDef *sConfig, uint32_t Channel)
  17518. {
  17519. 800787c: b580 push {r7, lr}
  17520. 800787e: b08a sub sp, #40 @ 0x28
  17521. 8007880: af00 add r7, sp, #0
  17522. 8007882: 60f8 str r0, [r7, #12]
  17523. 8007884: 60b9 str r1, [r7, #8]
  17524. 8007886: 607a str r2, [r7, #4]
  17525. HAL_StatusTypeDef status = HAL_OK;
  17526. 8007888: 2300 movs r3, #0
  17527. 800788a: f887 3023 strb.w r3, [r7, #35] @ 0x23
  17528. uint32_t tmpreg2;
  17529. uint32_t tickstart;
  17530. uint32_t connectOnChip;
  17531. /* Check the DAC peripheral handle and channel configuration struct */
  17532. if ((hdac == NULL) || (sConfig == NULL))
  17533. 800788e: 68fb ldr r3, [r7, #12]
  17534. 8007890: 2b00 cmp r3, #0
  17535. 8007892: d002 beq.n 800789a <HAL_DAC_ConfigChannel+0x1e>
  17536. 8007894: 68bb ldr r3, [r7, #8]
  17537. 8007896: 2b00 cmp r3, #0
  17538. 8007898: d101 bne.n 800789e <HAL_DAC_ConfigChannel+0x22>
  17539. {
  17540. return HAL_ERROR;
  17541. 800789a: 2301 movs r3, #1
  17542. 800789c: e12a b.n 8007af4 <HAL_DAC_ConfigChannel+0x278>
  17543. assert_param(IS_DAC_REFRESHTIME(sConfig->DAC_SampleAndHoldConfig.DAC_RefreshTime));
  17544. }
  17545. assert_param(IS_DAC_CHANNEL(Channel));
  17546. /* Process locked */
  17547. __HAL_LOCK(hdac);
  17548. 800789e: 68fb ldr r3, [r7, #12]
  17549. 80078a0: 795b ldrb r3, [r3, #5]
  17550. 80078a2: 2b01 cmp r3, #1
  17551. 80078a4: d101 bne.n 80078aa <HAL_DAC_ConfigChannel+0x2e>
  17552. 80078a6: 2302 movs r3, #2
  17553. 80078a8: e124 b.n 8007af4 <HAL_DAC_ConfigChannel+0x278>
  17554. 80078aa: 68fb ldr r3, [r7, #12]
  17555. 80078ac: 2201 movs r2, #1
  17556. 80078ae: 715a strb r2, [r3, #5]
  17557. /* Change DAC state */
  17558. hdac->State = HAL_DAC_STATE_BUSY;
  17559. 80078b0: 68fb ldr r3, [r7, #12]
  17560. 80078b2: 2202 movs r2, #2
  17561. 80078b4: 711a strb r2, [r3, #4]
  17562. /* Sample and hold configuration */
  17563. if (sConfig->DAC_SampleAndHold == DAC_SAMPLEANDHOLD_ENABLE)
  17564. 80078b6: 68bb ldr r3, [r7, #8]
  17565. 80078b8: 681b ldr r3, [r3, #0]
  17566. 80078ba: 2b04 cmp r3, #4
  17567. 80078bc: d17a bne.n 80079b4 <HAL_DAC_ConfigChannel+0x138>
  17568. {
  17569. /* Get timeout */
  17570. tickstart = HAL_GetTick();
  17571. 80078be: f7fd fd8d bl 80053dc <HAL_GetTick>
  17572. 80078c2: 61f8 str r0, [r7, #28]
  17573. if (Channel == DAC_CHANNEL_1)
  17574. 80078c4: 687b ldr r3, [r7, #4]
  17575. 80078c6: 2b00 cmp r3, #0
  17576. 80078c8: d13d bne.n 8007946 <HAL_DAC_ConfigChannel+0xca>
  17577. {
  17578. /* SHSR1 can be written when BWST1 is cleared */
  17579. while (((hdac->Instance->SR) & DAC_SR_BWST1) != 0UL)
  17580. 80078ca: e018 b.n 80078fe <HAL_DAC_ConfigChannel+0x82>
  17581. {
  17582. /* Check for the Timeout */
  17583. if ((HAL_GetTick() - tickstart) > TIMEOUT_DAC_CALIBCONFIG)
  17584. 80078cc: f7fd fd86 bl 80053dc <HAL_GetTick>
  17585. 80078d0: 4602 mov r2, r0
  17586. 80078d2: 69fb ldr r3, [r7, #28]
  17587. 80078d4: 1ad3 subs r3, r2, r3
  17588. 80078d6: 2b01 cmp r3, #1
  17589. 80078d8: d911 bls.n 80078fe <HAL_DAC_ConfigChannel+0x82>
  17590. {
  17591. /* New check to avoid false timeout detection in case of preemption */
  17592. if (((hdac->Instance->SR) & DAC_SR_BWST1) != 0UL)
  17593. 80078da: 68fb ldr r3, [r7, #12]
  17594. 80078dc: 681b ldr r3, [r3, #0]
  17595. 80078de: 6b5a ldr r2, [r3, #52] @ 0x34
  17596. 80078e0: 4b86 ldr r3, [pc, #536] @ (8007afc <HAL_DAC_ConfigChannel+0x280>)
  17597. 80078e2: 4013 ands r3, r2
  17598. 80078e4: 2b00 cmp r3, #0
  17599. 80078e6: d00a beq.n 80078fe <HAL_DAC_ConfigChannel+0x82>
  17600. {
  17601. /* Update error code */
  17602. SET_BIT(hdac->ErrorCode, HAL_DAC_ERROR_TIMEOUT);
  17603. 80078e8: 68fb ldr r3, [r7, #12]
  17604. 80078ea: 691b ldr r3, [r3, #16]
  17605. 80078ec: f043 0208 orr.w r2, r3, #8
  17606. 80078f0: 68fb ldr r3, [r7, #12]
  17607. 80078f2: 611a str r2, [r3, #16]
  17608. /* Change the DMA state */
  17609. hdac->State = HAL_DAC_STATE_TIMEOUT;
  17610. 80078f4: 68fb ldr r3, [r7, #12]
  17611. 80078f6: 2203 movs r2, #3
  17612. 80078f8: 711a strb r2, [r3, #4]
  17613. return HAL_TIMEOUT;
  17614. 80078fa: 2303 movs r3, #3
  17615. 80078fc: e0fa b.n 8007af4 <HAL_DAC_ConfigChannel+0x278>
  17616. while (((hdac->Instance->SR) & DAC_SR_BWST1) != 0UL)
  17617. 80078fe: 68fb ldr r3, [r7, #12]
  17618. 8007900: 681b ldr r3, [r3, #0]
  17619. 8007902: 6b5a ldr r2, [r3, #52] @ 0x34
  17620. 8007904: 4b7d ldr r3, [pc, #500] @ (8007afc <HAL_DAC_ConfigChannel+0x280>)
  17621. 8007906: 4013 ands r3, r2
  17622. 8007908: 2b00 cmp r3, #0
  17623. 800790a: d1df bne.n 80078cc <HAL_DAC_ConfigChannel+0x50>
  17624. }
  17625. }
  17626. }
  17627. hdac->Instance->SHSR1 = sConfig->DAC_SampleAndHoldConfig.DAC_SampleTime;
  17628. 800790c: 68fb ldr r3, [r7, #12]
  17629. 800790e: 681b ldr r3, [r3, #0]
  17630. 8007910: 68ba ldr r2, [r7, #8]
  17631. 8007912: 6992 ldr r2, [r2, #24]
  17632. 8007914: 641a str r2, [r3, #64] @ 0x40
  17633. 8007916: e020 b.n 800795a <HAL_DAC_ConfigChannel+0xde>
  17634. {
  17635. /* SHSR2 can be written when BWST2 is cleared */
  17636. while (((hdac->Instance->SR) & DAC_SR_BWST2) != 0UL)
  17637. {
  17638. /* Check for the Timeout */
  17639. if ((HAL_GetTick() - tickstart) > TIMEOUT_DAC_CALIBCONFIG)
  17640. 8007918: f7fd fd60 bl 80053dc <HAL_GetTick>
  17641. 800791c: 4602 mov r2, r0
  17642. 800791e: 69fb ldr r3, [r7, #28]
  17643. 8007920: 1ad3 subs r3, r2, r3
  17644. 8007922: 2b01 cmp r3, #1
  17645. 8007924: d90f bls.n 8007946 <HAL_DAC_ConfigChannel+0xca>
  17646. {
  17647. /* New check to avoid false timeout detection in case of preemption */
  17648. if (((hdac->Instance->SR) & DAC_SR_BWST2) != 0UL)
  17649. 8007926: 68fb ldr r3, [r7, #12]
  17650. 8007928: 681b ldr r3, [r3, #0]
  17651. 800792a: 6b5b ldr r3, [r3, #52] @ 0x34
  17652. 800792c: 2b00 cmp r3, #0
  17653. 800792e: da0a bge.n 8007946 <HAL_DAC_ConfigChannel+0xca>
  17654. {
  17655. /* Update error code */
  17656. SET_BIT(hdac->ErrorCode, HAL_DAC_ERROR_TIMEOUT);
  17657. 8007930: 68fb ldr r3, [r7, #12]
  17658. 8007932: 691b ldr r3, [r3, #16]
  17659. 8007934: f043 0208 orr.w r2, r3, #8
  17660. 8007938: 68fb ldr r3, [r7, #12]
  17661. 800793a: 611a str r2, [r3, #16]
  17662. /* Change the DMA state */
  17663. hdac->State = HAL_DAC_STATE_TIMEOUT;
  17664. 800793c: 68fb ldr r3, [r7, #12]
  17665. 800793e: 2203 movs r2, #3
  17666. 8007940: 711a strb r2, [r3, #4]
  17667. return HAL_TIMEOUT;
  17668. 8007942: 2303 movs r3, #3
  17669. 8007944: e0d6 b.n 8007af4 <HAL_DAC_ConfigChannel+0x278>
  17670. while (((hdac->Instance->SR) & DAC_SR_BWST2) != 0UL)
  17671. 8007946: 68fb ldr r3, [r7, #12]
  17672. 8007948: 681b ldr r3, [r3, #0]
  17673. 800794a: 6b5b ldr r3, [r3, #52] @ 0x34
  17674. 800794c: 2b00 cmp r3, #0
  17675. 800794e: dbe3 blt.n 8007918 <HAL_DAC_ConfigChannel+0x9c>
  17676. }
  17677. }
  17678. }
  17679. hdac->Instance->SHSR2 = sConfig->DAC_SampleAndHoldConfig.DAC_SampleTime;
  17680. 8007950: 68fb ldr r3, [r7, #12]
  17681. 8007952: 681b ldr r3, [r3, #0]
  17682. 8007954: 68ba ldr r2, [r7, #8]
  17683. 8007956: 6992 ldr r2, [r2, #24]
  17684. 8007958: 645a str r2, [r3, #68] @ 0x44
  17685. }
  17686. /* HoldTime */
  17687. MODIFY_REG(hdac->Instance->SHHR, DAC_SHHR_THOLD1 << (Channel & 0x10UL),
  17688. 800795a: 68fb ldr r3, [r7, #12]
  17689. 800795c: 681b ldr r3, [r3, #0]
  17690. 800795e: 6c9a ldr r2, [r3, #72] @ 0x48
  17691. 8007960: 687b ldr r3, [r7, #4]
  17692. 8007962: f003 0310 and.w r3, r3, #16
  17693. 8007966: f240 31ff movw r1, #1023 @ 0x3ff
  17694. 800796a: fa01 f303 lsl.w r3, r1, r3
  17695. 800796e: 43db mvns r3, r3
  17696. 8007970: ea02 0103 and.w r1, r2, r3
  17697. 8007974: 68bb ldr r3, [r7, #8]
  17698. 8007976: 69da ldr r2, [r3, #28]
  17699. 8007978: 687b ldr r3, [r7, #4]
  17700. 800797a: f003 0310 and.w r3, r3, #16
  17701. 800797e: 409a lsls r2, r3
  17702. 8007980: 68fb ldr r3, [r7, #12]
  17703. 8007982: 681b ldr r3, [r3, #0]
  17704. 8007984: 430a orrs r2, r1
  17705. 8007986: 649a str r2, [r3, #72] @ 0x48
  17706. (sConfig->DAC_SampleAndHoldConfig.DAC_HoldTime) << (Channel & 0x10UL));
  17707. /* RefreshTime */
  17708. MODIFY_REG(hdac->Instance->SHRR, DAC_SHRR_TREFRESH1 << (Channel & 0x10UL),
  17709. 8007988: 68fb ldr r3, [r7, #12]
  17710. 800798a: 681b ldr r3, [r3, #0]
  17711. 800798c: 6cda ldr r2, [r3, #76] @ 0x4c
  17712. 800798e: 687b ldr r3, [r7, #4]
  17713. 8007990: f003 0310 and.w r3, r3, #16
  17714. 8007994: 21ff movs r1, #255 @ 0xff
  17715. 8007996: fa01 f303 lsl.w r3, r1, r3
  17716. 800799a: 43db mvns r3, r3
  17717. 800799c: ea02 0103 and.w r1, r2, r3
  17718. 80079a0: 68bb ldr r3, [r7, #8]
  17719. 80079a2: 6a1a ldr r2, [r3, #32]
  17720. 80079a4: 687b ldr r3, [r7, #4]
  17721. 80079a6: f003 0310 and.w r3, r3, #16
  17722. 80079aa: 409a lsls r2, r3
  17723. 80079ac: 68fb ldr r3, [r7, #12]
  17724. 80079ae: 681b ldr r3, [r3, #0]
  17725. 80079b0: 430a orrs r2, r1
  17726. 80079b2: 64da str r2, [r3, #76] @ 0x4c
  17727. (sConfig->DAC_SampleAndHoldConfig.DAC_RefreshTime) << (Channel & 0x10UL));
  17728. }
  17729. if (sConfig->DAC_UserTrimming == DAC_TRIMMING_USER)
  17730. 80079b4: 68bb ldr r3, [r7, #8]
  17731. 80079b6: 691b ldr r3, [r3, #16]
  17732. 80079b8: 2b01 cmp r3, #1
  17733. 80079ba: d11d bne.n 80079f8 <HAL_DAC_ConfigChannel+0x17c>
  17734. /* USER TRIMMING */
  17735. {
  17736. /* Get the DAC CCR value */
  17737. tmpreg1 = hdac->Instance->CCR;
  17738. 80079bc: 68fb ldr r3, [r7, #12]
  17739. 80079be: 681b ldr r3, [r3, #0]
  17740. 80079c0: 6b9b ldr r3, [r3, #56] @ 0x38
  17741. 80079c2: 61bb str r3, [r7, #24]
  17742. /* Clear trimming value */
  17743. tmpreg1 &= ~(((uint32_t)(DAC_CCR_OTRIM1)) << (Channel & 0x10UL));
  17744. 80079c4: 687b ldr r3, [r7, #4]
  17745. 80079c6: f003 0310 and.w r3, r3, #16
  17746. 80079ca: 221f movs r2, #31
  17747. 80079cc: fa02 f303 lsl.w r3, r2, r3
  17748. 80079d0: 43db mvns r3, r3
  17749. 80079d2: 69ba ldr r2, [r7, #24]
  17750. 80079d4: 4013 ands r3, r2
  17751. 80079d6: 61bb str r3, [r7, #24]
  17752. /* Configure for the selected trimming offset */
  17753. tmpreg2 = sConfig->DAC_TrimmingValue;
  17754. 80079d8: 68bb ldr r3, [r7, #8]
  17755. 80079da: 695b ldr r3, [r3, #20]
  17756. 80079dc: 617b str r3, [r7, #20]
  17757. /* Calculate CCR register value depending on DAC_Channel */
  17758. tmpreg1 |= tmpreg2 << (Channel & 0x10UL);
  17759. 80079de: 687b ldr r3, [r7, #4]
  17760. 80079e0: f003 0310 and.w r3, r3, #16
  17761. 80079e4: 697a ldr r2, [r7, #20]
  17762. 80079e6: fa02 f303 lsl.w r3, r2, r3
  17763. 80079ea: 69ba ldr r2, [r7, #24]
  17764. 80079ec: 4313 orrs r3, r2
  17765. 80079ee: 61bb str r3, [r7, #24]
  17766. /* Write to DAC CCR */
  17767. hdac->Instance->CCR = tmpreg1;
  17768. 80079f0: 68fb ldr r3, [r7, #12]
  17769. 80079f2: 681b ldr r3, [r3, #0]
  17770. 80079f4: 69ba ldr r2, [r7, #24]
  17771. 80079f6: 639a str r2, [r3, #56] @ 0x38
  17772. }
  17773. /* else factory trimming is used (factory setting are available at reset)*/
  17774. /* SW Nothing has nothing to do */
  17775. /* Get the DAC MCR value */
  17776. tmpreg1 = hdac->Instance->MCR;
  17777. 80079f8: 68fb ldr r3, [r7, #12]
  17778. 80079fa: 681b ldr r3, [r3, #0]
  17779. 80079fc: 6bdb ldr r3, [r3, #60] @ 0x3c
  17780. 80079fe: 61bb str r3, [r7, #24]
  17781. /* Clear DAC_MCR_MODEx bits */
  17782. tmpreg1 &= ~(((uint32_t)(DAC_MCR_MODE1)) << (Channel & 0x10UL));
  17783. 8007a00: 687b ldr r3, [r7, #4]
  17784. 8007a02: f003 0310 and.w r3, r3, #16
  17785. 8007a06: 2207 movs r2, #7
  17786. 8007a08: fa02 f303 lsl.w r3, r2, r3
  17787. 8007a0c: 43db mvns r3, r3
  17788. 8007a0e: 69ba ldr r2, [r7, #24]
  17789. 8007a10: 4013 ands r3, r2
  17790. 8007a12: 61bb str r3, [r7, #24]
  17791. /* Configure for the selected DAC channel: mode, buffer output & on chip peripheral connect */
  17792. if (sConfig->DAC_ConnectOnChipPeripheral == DAC_CHIPCONNECT_EXTERNAL)
  17793. 8007a14: 68bb ldr r3, [r7, #8]
  17794. 8007a16: 68db ldr r3, [r3, #12]
  17795. 8007a18: 2b01 cmp r3, #1
  17796. 8007a1a: d102 bne.n 8007a22 <HAL_DAC_ConfigChannel+0x1a6>
  17797. {
  17798. connectOnChip = 0x00000000UL;
  17799. 8007a1c: 2300 movs r3, #0
  17800. 8007a1e: 627b str r3, [r7, #36] @ 0x24
  17801. 8007a20: e00f b.n 8007a42 <HAL_DAC_ConfigChannel+0x1c6>
  17802. }
  17803. else if (sConfig->DAC_ConnectOnChipPeripheral == DAC_CHIPCONNECT_INTERNAL)
  17804. 8007a22: 68bb ldr r3, [r7, #8]
  17805. 8007a24: 68db ldr r3, [r3, #12]
  17806. 8007a26: 2b02 cmp r3, #2
  17807. 8007a28: d102 bne.n 8007a30 <HAL_DAC_ConfigChannel+0x1b4>
  17808. {
  17809. connectOnChip = DAC_MCR_MODE1_0;
  17810. 8007a2a: 2301 movs r3, #1
  17811. 8007a2c: 627b str r3, [r7, #36] @ 0x24
  17812. 8007a2e: e008 b.n 8007a42 <HAL_DAC_ConfigChannel+0x1c6>
  17813. }
  17814. else /* (sConfig->DAC_ConnectOnChipPeripheral == DAC_CHIPCONNECT_BOTH) */
  17815. {
  17816. if (sConfig->DAC_OutputBuffer == DAC_OUTPUTBUFFER_ENABLE)
  17817. 8007a30: 68bb ldr r3, [r7, #8]
  17818. 8007a32: 689b ldr r3, [r3, #8]
  17819. 8007a34: 2b00 cmp r3, #0
  17820. 8007a36: d102 bne.n 8007a3e <HAL_DAC_ConfigChannel+0x1c2>
  17821. {
  17822. connectOnChip = DAC_MCR_MODE1_0;
  17823. 8007a38: 2301 movs r3, #1
  17824. 8007a3a: 627b str r3, [r7, #36] @ 0x24
  17825. 8007a3c: e001 b.n 8007a42 <HAL_DAC_ConfigChannel+0x1c6>
  17826. }
  17827. else
  17828. {
  17829. connectOnChip = 0x00000000UL;
  17830. 8007a3e: 2300 movs r3, #0
  17831. 8007a40: 627b str r3, [r7, #36] @ 0x24
  17832. }
  17833. }
  17834. tmpreg2 = (sConfig->DAC_SampleAndHold | sConfig->DAC_OutputBuffer | connectOnChip);
  17835. 8007a42: 68bb ldr r3, [r7, #8]
  17836. 8007a44: 681a ldr r2, [r3, #0]
  17837. 8007a46: 68bb ldr r3, [r7, #8]
  17838. 8007a48: 689b ldr r3, [r3, #8]
  17839. 8007a4a: 4313 orrs r3, r2
  17840. 8007a4c: 6a7a ldr r2, [r7, #36] @ 0x24
  17841. 8007a4e: 4313 orrs r3, r2
  17842. 8007a50: 617b str r3, [r7, #20]
  17843. /* Calculate MCR register value depending on DAC_Channel */
  17844. tmpreg1 |= tmpreg2 << (Channel & 0x10UL);
  17845. 8007a52: 687b ldr r3, [r7, #4]
  17846. 8007a54: f003 0310 and.w r3, r3, #16
  17847. 8007a58: 697a ldr r2, [r7, #20]
  17848. 8007a5a: fa02 f303 lsl.w r3, r2, r3
  17849. 8007a5e: 69ba ldr r2, [r7, #24]
  17850. 8007a60: 4313 orrs r3, r2
  17851. 8007a62: 61bb str r3, [r7, #24]
  17852. /* Write to DAC MCR */
  17853. hdac->Instance->MCR = tmpreg1;
  17854. 8007a64: 68fb ldr r3, [r7, #12]
  17855. 8007a66: 681b ldr r3, [r3, #0]
  17856. 8007a68: 69ba ldr r2, [r7, #24]
  17857. 8007a6a: 63da str r2, [r3, #60] @ 0x3c
  17858. /* DAC in normal operating mode hence clear DAC_CR_CENx bit */
  17859. CLEAR_BIT(hdac->Instance->CR, DAC_CR_CEN1 << (Channel & 0x10UL));
  17860. 8007a6c: 68fb ldr r3, [r7, #12]
  17861. 8007a6e: 681b ldr r3, [r3, #0]
  17862. 8007a70: 6819 ldr r1, [r3, #0]
  17863. 8007a72: 687b ldr r3, [r7, #4]
  17864. 8007a74: f003 0310 and.w r3, r3, #16
  17865. 8007a78: f44f 4280 mov.w r2, #16384 @ 0x4000
  17866. 8007a7c: fa02 f303 lsl.w r3, r2, r3
  17867. 8007a80: 43da mvns r2, r3
  17868. 8007a82: 68fb ldr r3, [r7, #12]
  17869. 8007a84: 681b ldr r3, [r3, #0]
  17870. 8007a86: 400a ands r2, r1
  17871. 8007a88: 601a str r2, [r3, #0]
  17872. /* Get the DAC CR value */
  17873. tmpreg1 = hdac->Instance->CR;
  17874. 8007a8a: 68fb ldr r3, [r7, #12]
  17875. 8007a8c: 681b ldr r3, [r3, #0]
  17876. 8007a8e: 681b ldr r3, [r3, #0]
  17877. 8007a90: 61bb str r3, [r7, #24]
  17878. /* Clear TENx, TSELx, WAVEx and MAMPx bits */
  17879. tmpreg1 &= ~(((uint32_t)(DAC_CR_MAMP1 | DAC_CR_WAVE1 | DAC_CR_TSEL1 | DAC_CR_TEN1)) << (Channel & 0x10UL));
  17880. 8007a92: 687b ldr r3, [r7, #4]
  17881. 8007a94: f003 0310 and.w r3, r3, #16
  17882. 8007a98: f640 72fe movw r2, #4094 @ 0xffe
  17883. 8007a9c: fa02 f303 lsl.w r3, r2, r3
  17884. 8007aa0: 43db mvns r3, r3
  17885. 8007aa2: 69ba ldr r2, [r7, #24]
  17886. 8007aa4: 4013 ands r3, r2
  17887. 8007aa6: 61bb str r3, [r7, #24]
  17888. /* Configure for the selected DAC channel: trigger */
  17889. /* Set TSELx and TENx bits according to DAC_Trigger value */
  17890. tmpreg2 = sConfig->DAC_Trigger;
  17891. 8007aa8: 68bb ldr r3, [r7, #8]
  17892. 8007aaa: 685b ldr r3, [r3, #4]
  17893. 8007aac: 617b str r3, [r7, #20]
  17894. /* Calculate CR register value depending on DAC_Channel */
  17895. tmpreg1 |= tmpreg2 << (Channel & 0x10UL);
  17896. 8007aae: 687b ldr r3, [r7, #4]
  17897. 8007ab0: f003 0310 and.w r3, r3, #16
  17898. 8007ab4: 697a ldr r2, [r7, #20]
  17899. 8007ab6: fa02 f303 lsl.w r3, r2, r3
  17900. 8007aba: 69ba ldr r2, [r7, #24]
  17901. 8007abc: 4313 orrs r3, r2
  17902. 8007abe: 61bb str r3, [r7, #24]
  17903. /* Write to DAC CR */
  17904. hdac->Instance->CR = tmpreg1;
  17905. 8007ac0: 68fb ldr r3, [r7, #12]
  17906. 8007ac2: 681b ldr r3, [r3, #0]
  17907. 8007ac4: 69ba ldr r2, [r7, #24]
  17908. 8007ac6: 601a str r2, [r3, #0]
  17909. /* Disable wave generation */
  17910. CLEAR_BIT(hdac->Instance->CR, (DAC_CR_WAVE1 << (Channel & 0x10UL)));
  17911. 8007ac8: 68fb ldr r3, [r7, #12]
  17912. 8007aca: 681b ldr r3, [r3, #0]
  17913. 8007acc: 6819 ldr r1, [r3, #0]
  17914. 8007ace: 687b ldr r3, [r7, #4]
  17915. 8007ad0: f003 0310 and.w r3, r3, #16
  17916. 8007ad4: 22c0 movs r2, #192 @ 0xc0
  17917. 8007ad6: fa02 f303 lsl.w r3, r2, r3
  17918. 8007ada: 43da mvns r2, r3
  17919. 8007adc: 68fb ldr r3, [r7, #12]
  17920. 8007ade: 681b ldr r3, [r3, #0]
  17921. 8007ae0: 400a ands r2, r1
  17922. 8007ae2: 601a str r2, [r3, #0]
  17923. /* Change DAC state */
  17924. hdac->State = HAL_DAC_STATE_READY;
  17925. 8007ae4: 68fb ldr r3, [r7, #12]
  17926. 8007ae6: 2201 movs r2, #1
  17927. 8007ae8: 711a strb r2, [r3, #4]
  17928. /* Process unlocked */
  17929. __HAL_UNLOCK(hdac);
  17930. 8007aea: 68fb ldr r3, [r7, #12]
  17931. 8007aec: 2200 movs r2, #0
  17932. 8007aee: 715a strb r2, [r3, #5]
  17933. /* Return function status */
  17934. return status;
  17935. 8007af0: f897 3023 ldrb.w r3, [r7, #35] @ 0x23
  17936. }
  17937. 8007af4: 4618 mov r0, r3
  17938. 8007af6: 3728 adds r7, #40 @ 0x28
  17939. 8007af8: 46bd mov sp, r7
  17940. 8007afa: bd80 pop {r7, pc}
  17941. 8007afc: 20008000 .word 0x20008000
  17942. 08007b00 <HAL_DACEx_DMAUnderrunCallbackCh2>:
  17943. * @param hdac pointer to a DAC_HandleTypeDef structure that contains
  17944. * the configuration information for the specified DAC.
  17945. * @retval None
  17946. */
  17947. __weak void HAL_DACEx_DMAUnderrunCallbackCh2(DAC_HandleTypeDef *hdac)
  17948. {
  17949. 8007b00: b480 push {r7}
  17950. 8007b02: b083 sub sp, #12
  17951. 8007b04: af00 add r7, sp, #0
  17952. 8007b06: 6078 str r0, [r7, #4]
  17953. UNUSED(hdac);
  17954. /* NOTE : This function should not be modified, when the callback is needed,
  17955. the HAL_DACEx_DMAUnderrunCallbackCh2 could be implemented in the user file
  17956. */
  17957. }
  17958. 8007b08: bf00 nop
  17959. 8007b0a: 370c adds r7, #12
  17960. 8007b0c: 46bd mov sp, r7
  17961. 8007b0e: f85d 7b04 ldr.w r7, [sp], #4
  17962. 8007b12: 4770 bx lr
  17963. 08007b14 <HAL_DMA_Init>:
  17964. * @param hdma: Pointer to a DMA_HandleTypeDef structure that contains
  17965. * the configuration information for the specified DMA Stream.
  17966. * @retval HAL status
  17967. */
  17968. HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma)
  17969. {
  17970. 8007b14: b580 push {r7, lr}
  17971. 8007b16: b086 sub sp, #24
  17972. 8007b18: af00 add r7, sp, #0
  17973. 8007b1a: 6078 str r0, [r7, #4]
  17974. uint32_t registerValue;
  17975. uint32_t tickstart = HAL_GetTick();
  17976. 8007b1c: f7fd fc5e bl 80053dc <HAL_GetTick>
  17977. 8007b20: 6138 str r0, [r7, #16]
  17978. DMA_Base_Registers *regs_dma;
  17979. BDMA_Base_Registers *regs_bdma;
  17980. /* Check the DMA peripheral handle */
  17981. if(hdma == NULL)
  17982. 8007b22: 687b ldr r3, [r7, #4]
  17983. 8007b24: 2b00 cmp r3, #0
  17984. 8007b26: d101 bne.n 8007b2c <HAL_DMA_Init+0x18>
  17985. {
  17986. return HAL_ERROR;
  17987. 8007b28: 2301 movs r3, #1
  17988. 8007b2a: e316 b.n 800815a <HAL_DMA_Init+0x646>
  17989. assert_param(IS_DMA_PERIPHERAL_DATA_SIZE(hdma->Init.PeriphDataAlignment));
  17990. assert_param(IS_DMA_MEMORY_DATA_SIZE(hdma->Init.MemDataAlignment));
  17991. assert_param(IS_DMA_MODE(hdma->Init.Mode));
  17992. assert_param(IS_DMA_PRIORITY(hdma->Init.Priority));
  17993. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  17994. 8007b2c: 687b ldr r3, [r7, #4]
  17995. 8007b2e: 681b ldr r3, [r3, #0]
  17996. 8007b30: 4a66 ldr r2, [pc, #408] @ (8007ccc <HAL_DMA_Init+0x1b8>)
  17997. 8007b32: 4293 cmp r3, r2
  17998. 8007b34: d04a beq.n 8007bcc <HAL_DMA_Init+0xb8>
  17999. 8007b36: 687b ldr r3, [r7, #4]
  18000. 8007b38: 681b ldr r3, [r3, #0]
  18001. 8007b3a: 4a65 ldr r2, [pc, #404] @ (8007cd0 <HAL_DMA_Init+0x1bc>)
  18002. 8007b3c: 4293 cmp r3, r2
  18003. 8007b3e: d045 beq.n 8007bcc <HAL_DMA_Init+0xb8>
  18004. 8007b40: 687b ldr r3, [r7, #4]
  18005. 8007b42: 681b ldr r3, [r3, #0]
  18006. 8007b44: 4a63 ldr r2, [pc, #396] @ (8007cd4 <HAL_DMA_Init+0x1c0>)
  18007. 8007b46: 4293 cmp r3, r2
  18008. 8007b48: d040 beq.n 8007bcc <HAL_DMA_Init+0xb8>
  18009. 8007b4a: 687b ldr r3, [r7, #4]
  18010. 8007b4c: 681b ldr r3, [r3, #0]
  18011. 8007b4e: 4a62 ldr r2, [pc, #392] @ (8007cd8 <HAL_DMA_Init+0x1c4>)
  18012. 8007b50: 4293 cmp r3, r2
  18013. 8007b52: d03b beq.n 8007bcc <HAL_DMA_Init+0xb8>
  18014. 8007b54: 687b ldr r3, [r7, #4]
  18015. 8007b56: 681b ldr r3, [r3, #0]
  18016. 8007b58: 4a60 ldr r2, [pc, #384] @ (8007cdc <HAL_DMA_Init+0x1c8>)
  18017. 8007b5a: 4293 cmp r3, r2
  18018. 8007b5c: d036 beq.n 8007bcc <HAL_DMA_Init+0xb8>
  18019. 8007b5e: 687b ldr r3, [r7, #4]
  18020. 8007b60: 681b ldr r3, [r3, #0]
  18021. 8007b62: 4a5f ldr r2, [pc, #380] @ (8007ce0 <HAL_DMA_Init+0x1cc>)
  18022. 8007b64: 4293 cmp r3, r2
  18023. 8007b66: d031 beq.n 8007bcc <HAL_DMA_Init+0xb8>
  18024. 8007b68: 687b ldr r3, [r7, #4]
  18025. 8007b6a: 681b ldr r3, [r3, #0]
  18026. 8007b6c: 4a5d ldr r2, [pc, #372] @ (8007ce4 <HAL_DMA_Init+0x1d0>)
  18027. 8007b6e: 4293 cmp r3, r2
  18028. 8007b70: d02c beq.n 8007bcc <HAL_DMA_Init+0xb8>
  18029. 8007b72: 687b ldr r3, [r7, #4]
  18030. 8007b74: 681b ldr r3, [r3, #0]
  18031. 8007b76: 4a5c ldr r2, [pc, #368] @ (8007ce8 <HAL_DMA_Init+0x1d4>)
  18032. 8007b78: 4293 cmp r3, r2
  18033. 8007b7a: d027 beq.n 8007bcc <HAL_DMA_Init+0xb8>
  18034. 8007b7c: 687b ldr r3, [r7, #4]
  18035. 8007b7e: 681b ldr r3, [r3, #0]
  18036. 8007b80: 4a5a ldr r2, [pc, #360] @ (8007cec <HAL_DMA_Init+0x1d8>)
  18037. 8007b82: 4293 cmp r3, r2
  18038. 8007b84: d022 beq.n 8007bcc <HAL_DMA_Init+0xb8>
  18039. 8007b86: 687b ldr r3, [r7, #4]
  18040. 8007b88: 681b ldr r3, [r3, #0]
  18041. 8007b8a: 4a59 ldr r2, [pc, #356] @ (8007cf0 <HAL_DMA_Init+0x1dc>)
  18042. 8007b8c: 4293 cmp r3, r2
  18043. 8007b8e: d01d beq.n 8007bcc <HAL_DMA_Init+0xb8>
  18044. 8007b90: 687b ldr r3, [r7, #4]
  18045. 8007b92: 681b ldr r3, [r3, #0]
  18046. 8007b94: 4a57 ldr r2, [pc, #348] @ (8007cf4 <HAL_DMA_Init+0x1e0>)
  18047. 8007b96: 4293 cmp r3, r2
  18048. 8007b98: d018 beq.n 8007bcc <HAL_DMA_Init+0xb8>
  18049. 8007b9a: 687b ldr r3, [r7, #4]
  18050. 8007b9c: 681b ldr r3, [r3, #0]
  18051. 8007b9e: 4a56 ldr r2, [pc, #344] @ (8007cf8 <HAL_DMA_Init+0x1e4>)
  18052. 8007ba0: 4293 cmp r3, r2
  18053. 8007ba2: d013 beq.n 8007bcc <HAL_DMA_Init+0xb8>
  18054. 8007ba4: 687b ldr r3, [r7, #4]
  18055. 8007ba6: 681b ldr r3, [r3, #0]
  18056. 8007ba8: 4a54 ldr r2, [pc, #336] @ (8007cfc <HAL_DMA_Init+0x1e8>)
  18057. 8007baa: 4293 cmp r3, r2
  18058. 8007bac: d00e beq.n 8007bcc <HAL_DMA_Init+0xb8>
  18059. 8007bae: 687b ldr r3, [r7, #4]
  18060. 8007bb0: 681b ldr r3, [r3, #0]
  18061. 8007bb2: 4a53 ldr r2, [pc, #332] @ (8007d00 <HAL_DMA_Init+0x1ec>)
  18062. 8007bb4: 4293 cmp r3, r2
  18063. 8007bb6: d009 beq.n 8007bcc <HAL_DMA_Init+0xb8>
  18064. 8007bb8: 687b ldr r3, [r7, #4]
  18065. 8007bba: 681b ldr r3, [r3, #0]
  18066. 8007bbc: 4a51 ldr r2, [pc, #324] @ (8007d04 <HAL_DMA_Init+0x1f0>)
  18067. 8007bbe: 4293 cmp r3, r2
  18068. 8007bc0: d004 beq.n 8007bcc <HAL_DMA_Init+0xb8>
  18069. 8007bc2: 687b ldr r3, [r7, #4]
  18070. 8007bc4: 681b ldr r3, [r3, #0]
  18071. 8007bc6: 4a50 ldr r2, [pc, #320] @ (8007d08 <HAL_DMA_Init+0x1f4>)
  18072. 8007bc8: 4293 cmp r3, r2
  18073. 8007bca: d101 bne.n 8007bd0 <HAL_DMA_Init+0xbc>
  18074. 8007bcc: 2301 movs r3, #1
  18075. 8007bce: e000 b.n 8007bd2 <HAL_DMA_Init+0xbe>
  18076. 8007bd0: 2300 movs r3, #0
  18077. 8007bd2: 2b00 cmp r3, #0
  18078. 8007bd4: f000 813b beq.w 8007e4e <HAL_DMA_Init+0x33a>
  18079. assert_param(IS_DMA_MEMORY_BURST(hdma->Init.MemBurst));
  18080. assert_param(IS_DMA_PERIPHERAL_BURST(hdma->Init.PeriphBurst));
  18081. }
  18082. /* Change DMA peripheral state */
  18083. hdma->State = HAL_DMA_STATE_BUSY;
  18084. 8007bd8: 687b ldr r3, [r7, #4]
  18085. 8007bda: 2202 movs r2, #2
  18086. 8007bdc: f883 2035 strb.w r2, [r3, #53] @ 0x35
  18087. /* Allocate lock resource */
  18088. __HAL_UNLOCK(hdma);
  18089. 8007be0: 687b ldr r3, [r7, #4]
  18090. 8007be2: 2200 movs r2, #0
  18091. 8007be4: f883 2034 strb.w r2, [r3, #52] @ 0x34
  18092. /* Disable the peripheral */
  18093. __HAL_DMA_DISABLE(hdma);
  18094. 8007be8: 687b ldr r3, [r7, #4]
  18095. 8007bea: 681b ldr r3, [r3, #0]
  18096. 8007bec: 4a37 ldr r2, [pc, #220] @ (8007ccc <HAL_DMA_Init+0x1b8>)
  18097. 8007bee: 4293 cmp r3, r2
  18098. 8007bf0: d04a beq.n 8007c88 <HAL_DMA_Init+0x174>
  18099. 8007bf2: 687b ldr r3, [r7, #4]
  18100. 8007bf4: 681b ldr r3, [r3, #0]
  18101. 8007bf6: 4a36 ldr r2, [pc, #216] @ (8007cd0 <HAL_DMA_Init+0x1bc>)
  18102. 8007bf8: 4293 cmp r3, r2
  18103. 8007bfa: d045 beq.n 8007c88 <HAL_DMA_Init+0x174>
  18104. 8007bfc: 687b ldr r3, [r7, #4]
  18105. 8007bfe: 681b ldr r3, [r3, #0]
  18106. 8007c00: 4a34 ldr r2, [pc, #208] @ (8007cd4 <HAL_DMA_Init+0x1c0>)
  18107. 8007c02: 4293 cmp r3, r2
  18108. 8007c04: d040 beq.n 8007c88 <HAL_DMA_Init+0x174>
  18109. 8007c06: 687b ldr r3, [r7, #4]
  18110. 8007c08: 681b ldr r3, [r3, #0]
  18111. 8007c0a: 4a33 ldr r2, [pc, #204] @ (8007cd8 <HAL_DMA_Init+0x1c4>)
  18112. 8007c0c: 4293 cmp r3, r2
  18113. 8007c0e: d03b beq.n 8007c88 <HAL_DMA_Init+0x174>
  18114. 8007c10: 687b ldr r3, [r7, #4]
  18115. 8007c12: 681b ldr r3, [r3, #0]
  18116. 8007c14: 4a31 ldr r2, [pc, #196] @ (8007cdc <HAL_DMA_Init+0x1c8>)
  18117. 8007c16: 4293 cmp r3, r2
  18118. 8007c18: d036 beq.n 8007c88 <HAL_DMA_Init+0x174>
  18119. 8007c1a: 687b ldr r3, [r7, #4]
  18120. 8007c1c: 681b ldr r3, [r3, #0]
  18121. 8007c1e: 4a30 ldr r2, [pc, #192] @ (8007ce0 <HAL_DMA_Init+0x1cc>)
  18122. 8007c20: 4293 cmp r3, r2
  18123. 8007c22: d031 beq.n 8007c88 <HAL_DMA_Init+0x174>
  18124. 8007c24: 687b ldr r3, [r7, #4]
  18125. 8007c26: 681b ldr r3, [r3, #0]
  18126. 8007c28: 4a2e ldr r2, [pc, #184] @ (8007ce4 <HAL_DMA_Init+0x1d0>)
  18127. 8007c2a: 4293 cmp r3, r2
  18128. 8007c2c: d02c beq.n 8007c88 <HAL_DMA_Init+0x174>
  18129. 8007c2e: 687b ldr r3, [r7, #4]
  18130. 8007c30: 681b ldr r3, [r3, #0]
  18131. 8007c32: 4a2d ldr r2, [pc, #180] @ (8007ce8 <HAL_DMA_Init+0x1d4>)
  18132. 8007c34: 4293 cmp r3, r2
  18133. 8007c36: d027 beq.n 8007c88 <HAL_DMA_Init+0x174>
  18134. 8007c38: 687b ldr r3, [r7, #4]
  18135. 8007c3a: 681b ldr r3, [r3, #0]
  18136. 8007c3c: 4a2b ldr r2, [pc, #172] @ (8007cec <HAL_DMA_Init+0x1d8>)
  18137. 8007c3e: 4293 cmp r3, r2
  18138. 8007c40: d022 beq.n 8007c88 <HAL_DMA_Init+0x174>
  18139. 8007c42: 687b ldr r3, [r7, #4]
  18140. 8007c44: 681b ldr r3, [r3, #0]
  18141. 8007c46: 4a2a ldr r2, [pc, #168] @ (8007cf0 <HAL_DMA_Init+0x1dc>)
  18142. 8007c48: 4293 cmp r3, r2
  18143. 8007c4a: d01d beq.n 8007c88 <HAL_DMA_Init+0x174>
  18144. 8007c4c: 687b ldr r3, [r7, #4]
  18145. 8007c4e: 681b ldr r3, [r3, #0]
  18146. 8007c50: 4a28 ldr r2, [pc, #160] @ (8007cf4 <HAL_DMA_Init+0x1e0>)
  18147. 8007c52: 4293 cmp r3, r2
  18148. 8007c54: d018 beq.n 8007c88 <HAL_DMA_Init+0x174>
  18149. 8007c56: 687b ldr r3, [r7, #4]
  18150. 8007c58: 681b ldr r3, [r3, #0]
  18151. 8007c5a: 4a27 ldr r2, [pc, #156] @ (8007cf8 <HAL_DMA_Init+0x1e4>)
  18152. 8007c5c: 4293 cmp r3, r2
  18153. 8007c5e: d013 beq.n 8007c88 <HAL_DMA_Init+0x174>
  18154. 8007c60: 687b ldr r3, [r7, #4]
  18155. 8007c62: 681b ldr r3, [r3, #0]
  18156. 8007c64: 4a25 ldr r2, [pc, #148] @ (8007cfc <HAL_DMA_Init+0x1e8>)
  18157. 8007c66: 4293 cmp r3, r2
  18158. 8007c68: d00e beq.n 8007c88 <HAL_DMA_Init+0x174>
  18159. 8007c6a: 687b ldr r3, [r7, #4]
  18160. 8007c6c: 681b ldr r3, [r3, #0]
  18161. 8007c6e: 4a24 ldr r2, [pc, #144] @ (8007d00 <HAL_DMA_Init+0x1ec>)
  18162. 8007c70: 4293 cmp r3, r2
  18163. 8007c72: d009 beq.n 8007c88 <HAL_DMA_Init+0x174>
  18164. 8007c74: 687b ldr r3, [r7, #4]
  18165. 8007c76: 681b ldr r3, [r3, #0]
  18166. 8007c78: 4a22 ldr r2, [pc, #136] @ (8007d04 <HAL_DMA_Init+0x1f0>)
  18167. 8007c7a: 4293 cmp r3, r2
  18168. 8007c7c: d004 beq.n 8007c88 <HAL_DMA_Init+0x174>
  18169. 8007c7e: 687b ldr r3, [r7, #4]
  18170. 8007c80: 681b ldr r3, [r3, #0]
  18171. 8007c82: 4a21 ldr r2, [pc, #132] @ (8007d08 <HAL_DMA_Init+0x1f4>)
  18172. 8007c84: 4293 cmp r3, r2
  18173. 8007c86: d108 bne.n 8007c9a <HAL_DMA_Init+0x186>
  18174. 8007c88: 687b ldr r3, [r7, #4]
  18175. 8007c8a: 681b ldr r3, [r3, #0]
  18176. 8007c8c: 681a ldr r2, [r3, #0]
  18177. 8007c8e: 687b ldr r3, [r7, #4]
  18178. 8007c90: 681b ldr r3, [r3, #0]
  18179. 8007c92: f022 0201 bic.w r2, r2, #1
  18180. 8007c96: 601a str r2, [r3, #0]
  18181. 8007c98: e007 b.n 8007caa <HAL_DMA_Init+0x196>
  18182. 8007c9a: 687b ldr r3, [r7, #4]
  18183. 8007c9c: 681b ldr r3, [r3, #0]
  18184. 8007c9e: 681a ldr r2, [r3, #0]
  18185. 8007ca0: 687b ldr r3, [r7, #4]
  18186. 8007ca2: 681b ldr r3, [r3, #0]
  18187. 8007ca4: f022 0201 bic.w r2, r2, #1
  18188. 8007ca8: 601a str r2, [r3, #0]
  18189. /* Check if the DMA Stream is effectively disabled */
  18190. while((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_EN) != 0U)
  18191. 8007caa: e02f b.n 8007d0c <HAL_DMA_Init+0x1f8>
  18192. {
  18193. /* Check for the Timeout */
  18194. if((HAL_GetTick() - tickstart ) > HAL_TIMEOUT_DMA_ABORT)
  18195. 8007cac: f7fd fb96 bl 80053dc <HAL_GetTick>
  18196. 8007cb0: 4602 mov r2, r0
  18197. 8007cb2: 693b ldr r3, [r7, #16]
  18198. 8007cb4: 1ad3 subs r3, r2, r3
  18199. 8007cb6: 2b05 cmp r3, #5
  18200. 8007cb8: d928 bls.n 8007d0c <HAL_DMA_Init+0x1f8>
  18201. {
  18202. /* Update error code */
  18203. hdma->ErrorCode = HAL_DMA_ERROR_TIMEOUT;
  18204. 8007cba: 687b ldr r3, [r7, #4]
  18205. 8007cbc: 2220 movs r2, #32
  18206. 8007cbe: 655a str r2, [r3, #84] @ 0x54
  18207. /* Change the DMA state */
  18208. hdma->State = HAL_DMA_STATE_ERROR;
  18209. 8007cc0: 687b ldr r3, [r7, #4]
  18210. 8007cc2: 2203 movs r2, #3
  18211. 8007cc4: f883 2035 strb.w r2, [r3, #53] @ 0x35
  18212. return HAL_ERROR;
  18213. 8007cc8: 2301 movs r3, #1
  18214. 8007cca: e246 b.n 800815a <HAL_DMA_Init+0x646>
  18215. 8007ccc: 40020010 .word 0x40020010
  18216. 8007cd0: 40020028 .word 0x40020028
  18217. 8007cd4: 40020040 .word 0x40020040
  18218. 8007cd8: 40020058 .word 0x40020058
  18219. 8007cdc: 40020070 .word 0x40020070
  18220. 8007ce0: 40020088 .word 0x40020088
  18221. 8007ce4: 400200a0 .word 0x400200a0
  18222. 8007ce8: 400200b8 .word 0x400200b8
  18223. 8007cec: 40020410 .word 0x40020410
  18224. 8007cf0: 40020428 .word 0x40020428
  18225. 8007cf4: 40020440 .word 0x40020440
  18226. 8007cf8: 40020458 .word 0x40020458
  18227. 8007cfc: 40020470 .word 0x40020470
  18228. 8007d00: 40020488 .word 0x40020488
  18229. 8007d04: 400204a0 .word 0x400204a0
  18230. 8007d08: 400204b8 .word 0x400204b8
  18231. while((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_EN) != 0U)
  18232. 8007d0c: 687b ldr r3, [r7, #4]
  18233. 8007d0e: 681b ldr r3, [r3, #0]
  18234. 8007d10: 681b ldr r3, [r3, #0]
  18235. 8007d12: f003 0301 and.w r3, r3, #1
  18236. 8007d16: 2b00 cmp r3, #0
  18237. 8007d18: d1c8 bne.n 8007cac <HAL_DMA_Init+0x198>
  18238. }
  18239. }
  18240. /* Get the CR register value */
  18241. registerValue = ((DMA_Stream_TypeDef *)hdma->Instance)->CR;
  18242. 8007d1a: 687b ldr r3, [r7, #4]
  18243. 8007d1c: 681b ldr r3, [r3, #0]
  18244. 8007d1e: 681b ldr r3, [r3, #0]
  18245. 8007d20: 617b str r3, [r7, #20]
  18246. /* Clear CHSEL, MBURST, PBURST, PL, MSIZE, PSIZE, MINC, PINC, CIRC, DIR, CT and DBM bits */
  18247. registerValue &= ((uint32_t)~(DMA_SxCR_MBURST | DMA_SxCR_PBURST | \
  18248. 8007d22: 697a ldr r2, [r7, #20]
  18249. 8007d24: 4b83 ldr r3, [pc, #524] @ (8007f34 <HAL_DMA_Init+0x420>)
  18250. 8007d26: 4013 ands r3, r2
  18251. 8007d28: 617b str r3, [r7, #20]
  18252. DMA_SxCR_PL | DMA_SxCR_MSIZE | DMA_SxCR_PSIZE | \
  18253. DMA_SxCR_MINC | DMA_SxCR_PINC | DMA_SxCR_CIRC | \
  18254. DMA_SxCR_DIR | DMA_SxCR_CT | DMA_SxCR_DBM));
  18255. /* Prepare the DMA Stream configuration */
  18256. registerValue |= hdma->Init.Direction |
  18257. 8007d2a: 687b ldr r3, [r7, #4]
  18258. 8007d2c: 689a ldr r2, [r3, #8]
  18259. hdma->Init.PeriphInc | hdma->Init.MemInc |
  18260. 8007d2e: 687b ldr r3, [r7, #4]
  18261. 8007d30: 68db ldr r3, [r3, #12]
  18262. registerValue |= hdma->Init.Direction |
  18263. 8007d32: 431a orrs r2, r3
  18264. hdma->Init.PeriphInc | hdma->Init.MemInc |
  18265. 8007d34: 687b ldr r3, [r7, #4]
  18266. 8007d36: 691b ldr r3, [r3, #16]
  18267. 8007d38: 431a orrs r2, r3
  18268. hdma->Init.PeriphDataAlignment | hdma->Init.MemDataAlignment |
  18269. 8007d3a: 687b ldr r3, [r7, #4]
  18270. 8007d3c: 695b ldr r3, [r3, #20]
  18271. hdma->Init.PeriphInc | hdma->Init.MemInc |
  18272. 8007d3e: 431a orrs r2, r3
  18273. hdma->Init.PeriphDataAlignment | hdma->Init.MemDataAlignment |
  18274. 8007d40: 687b ldr r3, [r7, #4]
  18275. 8007d42: 699b ldr r3, [r3, #24]
  18276. 8007d44: 431a orrs r2, r3
  18277. hdma->Init.Mode | hdma->Init.Priority;
  18278. 8007d46: 687b ldr r3, [r7, #4]
  18279. 8007d48: 69db ldr r3, [r3, #28]
  18280. hdma->Init.PeriphDataAlignment | hdma->Init.MemDataAlignment |
  18281. 8007d4a: 431a orrs r2, r3
  18282. hdma->Init.Mode | hdma->Init.Priority;
  18283. 8007d4c: 687b ldr r3, [r7, #4]
  18284. 8007d4e: 6a1b ldr r3, [r3, #32]
  18285. 8007d50: 4313 orrs r3, r2
  18286. registerValue |= hdma->Init.Direction |
  18287. 8007d52: 697a ldr r2, [r7, #20]
  18288. 8007d54: 4313 orrs r3, r2
  18289. 8007d56: 617b str r3, [r7, #20]
  18290. /* the Memory burst and peripheral burst are not used when the FIFO is disabled */
  18291. if(hdma->Init.FIFOMode == DMA_FIFOMODE_ENABLE)
  18292. 8007d58: 687b ldr r3, [r7, #4]
  18293. 8007d5a: 6a5b ldr r3, [r3, #36] @ 0x24
  18294. 8007d5c: 2b04 cmp r3, #4
  18295. 8007d5e: d107 bne.n 8007d70 <HAL_DMA_Init+0x25c>
  18296. {
  18297. /* Get memory burst and peripheral burst */
  18298. registerValue |= hdma->Init.MemBurst | hdma->Init.PeriphBurst;
  18299. 8007d60: 687b ldr r3, [r7, #4]
  18300. 8007d62: 6ada ldr r2, [r3, #44] @ 0x2c
  18301. 8007d64: 687b ldr r3, [r7, #4]
  18302. 8007d66: 6b1b ldr r3, [r3, #48] @ 0x30
  18303. 8007d68: 4313 orrs r3, r2
  18304. 8007d6a: 697a ldr r2, [r7, #20]
  18305. 8007d6c: 4313 orrs r3, r2
  18306. 8007d6e: 617b str r3, [r7, #20]
  18307. }
  18308. /* Work around for Errata 2.22: UART/USART- DMA transfer lock: DMA stream could be
  18309. lock when transferring data to/from USART/UART */
  18310. #if (STM32H7_DEV_ID == 0x450UL)
  18311. if((DBGMCU->IDCODE & 0xFFFF0000U) >= 0x20000000U)
  18312. 8007d70: 4b71 ldr r3, [pc, #452] @ (8007f38 <HAL_DMA_Init+0x424>)
  18313. 8007d72: 681a ldr r2, [r3, #0]
  18314. 8007d74: 4b71 ldr r3, [pc, #452] @ (8007f3c <HAL_DMA_Init+0x428>)
  18315. 8007d76: 4013 ands r3, r2
  18316. 8007d78: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  18317. 8007d7c: d328 bcc.n 8007dd0 <HAL_DMA_Init+0x2bc>
  18318. {
  18319. #endif /* STM32H7_DEV_ID == 0x450UL */
  18320. if(IS_DMA_UART_USART_REQUEST(hdma->Init.Request) != 0U)
  18321. 8007d7e: 687b ldr r3, [r7, #4]
  18322. 8007d80: 685b ldr r3, [r3, #4]
  18323. 8007d82: 2b28 cmp r3, #40 @ 0x28
  18324. 8007d84: d903 bls.n 8007d8e <HAL_DMA_Init+0x27a>
  18325. 8007d86: 687b ldr r3, [r7, #4]
  18326. 8007d88: 685b ldr r3, [r3, #4]
  18327. 8007d8a: 2b2e cmp r3, #46 @ 0x2e
  18328. 8007d8c: d917 bls.n 8007dbe <HAL_DMA_Init+0x2aa>
  18329. 8007d8e: 687b ldr r3, [r7, #4]
  18330. 8007d90: 685b ldr r3, [r3, #4]
  18331. 8007d92: 2b3e cmp r3, #62 @ 0x3e
  18332. 8007d94: d903 bls.n 8007d9e <HAL_DMA_Init+0x28a>
  18333. 8007d96: 687b ldr r3, [r7, #4]
  18334. 8007d98: 685b ldr r3, [r3, #4]
  18335. 8007d9a: 2b42 cmp r3, #66 @ 0x42
  18336. 8007d9c: d90f bls.n 8007dbe <HAL_DMA_Init+0x2aa>
  18337. 8007d9e: 687b ldr r3, [r7, #4]
  18338. 8007da0: 685b ldr r3, [r3, #4]
  18339. 8007da2: 2b46 cmp r3, #70 @ 0x46
  18340. 8007da4: d903 bls.n 8007dae <HAL_DMA_Init+0x29a>
  18341. 8007da6: 687b ldr r3, [r7, #4]
  18342. 8007da8: 685b ldr r3, [r3, #4]
  18343. 8007daa: 2b48 cmp r3, #72 @ 0x48
  18344. 8007dac: d907 bls.n 8007dbe <HAL_DMA_Init+0x2aa>
  18345. 8007dae: 687b ldr r3, [r7, #4]
  18346. 8007db0: 685b ldr r3, [r3, #4]
  18347. 8007db2: 2b4e cmp r3, #78 @ 0x4e
  18348. 8007db4: d905 bls.n 8007dc2 <HAL_DMA_Init+0x2ae>
  18349. 8007db6: 687b ldr r3, [r7, #4]
  18350. 8007db8: 685b ldr r3, [r3, #4]
  18351. 8007dba: 2b52 cmp r3, #82 @ 0x52
  18352. 8007dbc: d801 bhi.n 8007dc2 <HAL_DMA_Init+0x2ae>
  18353. 8007dbe: 2301 movs r3, #1
  18354. 8007dc0: e000 b.n 8007dc4 <HAL_DMA_Init+0x2b0>
  18355. 8007dc2: 2300 movs r3, #0
  18356. 8007dc4: 2b00 cmp r3, #0
  18357. 8007dc6: d003 beq.n 8007dd0 <HAL_DMA_Init+0x2bc>
  18358. {
  18359. registerValue |= DMA_SxCR_TRBUFF;
  18360. 8007dc8: 697b ldr r3, [r7, #20]
  18361. 8007dca: f443 1380 orr.w r3, r3, #1048576 @ 0x100000
  18362. 8007dce: 617b str r3, [r7, #20]
  18363. #if (STM32H7_DEV_ID == 0x450UL)
  18364. }
  18365. #endif /* STM32H7_DEV_ID == 0x450UL */
  18366. /* Write to DMA Stream CR register */
  18367. ((DMA_Stream_TypeDef *)hdma->Instance)->CR = registerValue;
  18368. 8007dd0: 687b ldr r3, [r7, #4]
  18369. 8007dd2: 681b ldr r3, [r3, #0]
  18370. 8007dd4: 697a ldr r2, [r7, #20]
  18371. 8007dd6: 601a str r2, [r3, #0]
  18372. /* Get the FCR register value */
  18373. registerValue = ((DMA_Stream_TypeDef *)hdma->Instance)->FCR;
  18374. 8007dd8: 687b ldr r3, [r7, #4]
  18375. 8007dda: 681b ldr r3, [r3, #0]
  18376. 8007ddc: 695b ldr r3, [r3, #20]
  18377. 8007dde: 617b str r3, [r7, #20]
  18378. /* Clear Direct mode and FIFO threshold bits */
  18379. registerValue &= (uint32_t)~(DMA_SxFCR_DMDIS | DMA_SxFCR_FTH);
  18380. 8007de0: 697b ldr r3, [r7, #20]
  18381. 8007de2: f023 0307 bic.w r3, r3, #7
  18382. 8007de6: 617b str r3, [r7, #20]
  18383. /* Prepare the DMA Stream FIFO configuration */
  18384. registerValue |= hdma->Init.FIFOMode;
  18385. 8007de8: 687b ldr r3, [r7, #4]
  18386. 8007dea: 6a5b ldr r3, [r3, #36] @ 0x24
  18387. 8007dec: 697a ldr r2, [r7, #20]
  18388. 8007dee: 4313 orrs r3, r2
  18389. 8007df0: 617b str r3, [r7, #20]
  18390. /* the FIFO threshold is not used when the FIFO mode is disabled */
  18391. if(hdma->Init.FIFOMode == DMA_FIFOMODE_ENABLE)
  18392. 8007df2: 687b ldr r3, [r7, #4]
  18393. 8007df4: 6a5b ldr r3, [r3, #36] @ 0x24
  18394. 8007df6: 2b04 cmp r3, #4
  18395. 8007df8: d117 bne.n 8007e2a <HAL_DMA_Init+0x316>
  18396. {
  18397. /* Get the FIFO threshold */
  18398. registerValue |= hdma->Init.FIFOThreshold;
  18399. 8007dfa: 687b ldr r3, [r7, #4]
  18400. 8007dfc: 6a9b ldr r3, [r3, #40] @ 0x28
  18401. 8007dfe: 697a ldr r2, [r7, #20]
  18402. 8007e00: 4313 orrs r3, r2
  18403. 8007e02: 617b str r3, [r7, #20]
  18404. /* Check compatibility between FIFO threshold level and size of the memory burst */
  18405. /* for INCR4, INCR8, INCR16 */
  18406. if(hdma->Init.MemBurst != DMA_MBURST_SINGLE)
  18407. 8007e04: 687b ldr r3, [r7, #4]
  18408. 8007e06: 6adb ldr r3, [r3, #44] @ 0x2c
  18409. 8007e08: 2b00 cmp r3, #0
  18410. 8007e0a: d00e beq.n 8007e2a <HAL_DMA_Init+0x316>
  18411. {
  18412. if (DMA_CheckFifoParam(hdma) != HAL_OK)
  18413. 8007e0c: 6878 ldr r0, [r7, #4]
  18414. 8007e0e: f002 fb33 bl 800a478 <DMA_CheckFifoParam>
  18415. 8007e12: 4603 mov r3, r0
  18416. 8007e14: 2b00 cmp r3, #0
  18417. 8007e16: d008 beq.n 8007e2a <HAL_DMA_Init+0x316>
  18418. {
  18419. /* Update error code */
  18420. hdma->ErrorCode = HAL_DMA_ERROR_PARAM;
  18421. 8007e18: 687b ldr r3, [r7, #4]
  18422. 8007e1a: 2240 movs r2, #64 @ 0x40
  18423. 8007e1c: 655a str r2, [r3, #84] @ 0x54
  18424. /* Change the DMA state */
  18425. hdma->State = HAL_DMA_STATE_READY;
  18426. 8007e1e: 687b ldr r3, [r7, #4]
  18427. 8007e20: 2201 movs r2, #1
  18428. 8007e22: f883 2035 strb.w r2, [r3, #53] @ 0x35
  18429. return HAL_ERROR;
  18430. 8007e26: 2301 movs r3, #1
  18431. 8007e28: e197 b.n 800815a <HAL_DMA_Init+0x646>
  18432. }
  18433. }
  18434. }
  18435. /* Write to DMA Stream FCR */
  18436. ((DMA_Stream_TypeDef *)hdma->Instance)->FCR = registerValue;
  18437. 8007e2a: 687b ldr r3, [r7, #4]
  18438. 8007e2c: 681b ldr r3, [r3, #0]
  18439. 8007e2e: 697a ldr r2, [r7, #20]
  18440. 8007e30: 615a str r2, [r3, #20]
  18441. /* Initialize StreamBaseAddress and StreamIndex parameters to be used to calculate
  18442. DMA steam Base Address needed by HAL_DMA_IRQHandler() and HAL_DMA_PollForTransfer() */
  18443. regs_dma = (DMA_Base_Registers *)DMA_CalcBaseAndBitshift(hdma);
  18444. 8007e32: 6878 ldr r0, [r7, #4]
  18445. 8007e34: f002 fa6e bl 800a314 <DMA_CalcBaseAndBitshift>
  18446. 8007e38: 4603 mov r3, r0
  18447. 8007e3a: 60bb str r3, [r7, #8]
  18448. /* Clear all interrupt flags */
  18449. regs_dma->IFCR = 0x3FUL << (hdma->StreamIndex & 0x1FU);
  18450. 8007e3c: 687b ldr r3, [r7, #4]
  18451. 8007e3e: 6ddb ldr r3, [r3, #92] @ 0x5c
  18452. 8007e40: f003 031f and.w r3, r3, #31
  18453. 8007e44: 223f movs r2, #63 @ 0x3f
  18454. 8007e46: 409a lsls r2, r3
  18455. 8007e48: 68bb ldr r3, [r7, #8]
  18456. 8007e4a: 609a str r2, [r3, #8]
  18457. 8007e4c: e0cd b.n 8007fea <HAL_DMA_Init+0x4d6>
  18458. }
  18459. else if(IS_BDMA_CHANNEL_INSTANCE(hdma->Instance) != 0U) /* BDMA instance(s) */
  18460. 8007e4e: 687b ldr r3, [r7, #4]
  18461. 8007e50: 681b ldr r3, [r3, #0]
  18462. 8007e52: 4a3b ldr r2, [pc, #236] @ (8007f40 <HAL_DMA_Init+0x42c>)
  18463. 8007e54: 4293 cmp r3, r2
  18464. 8007e56: d022 beq.n 8007e9e <HAL_DMA_Init+0x38a>
  18465. 8007e58: 687b ldr r3, [r7, #4]
  18466. 8007e5a: 681b ldr r3, [r3, #0]
  18467. 8007e5c: 4a39 ldr r2, [pc, #228] @ (8007f44 <HAL_DMA_Init+0x430>)
  18468. 8007e5e: 4293 cmp r3, r2
  18469. 8007e60: d01d beq.n 8007e9e <HAL_DMA_Init+0x38a>
  18470. 8007e62: 687b ldr r3, [r7, #4]
  18471. 8007e64: 681b ldr r3, [r3, #0]
  18472. 8007e66: 4a38 ldr r2, [pc, #224] @ (8007f48 <HAL_DMA_Init+0x434>)
  18473. 8007e68: 4293 cmp r3, r2
  18474. 8007e6a: d018 beq.n 8007e9e <HAL_DMA_Init+0x38a>
  18475. 8007e6c: 687b ldr r3, [r7, #4]
  18476. 8007e6e: 681b ldr r3, [r3, #0]
  18477. 8007e70: 4a36 ldr r2, [pc, #216] @ (8007f4c <HAL_DMA_Init+0x438>)
  18478. 8007e72: 4293 cmp r3, r2
  18479. 8007e74: d013 beq.n 8007e9e <HAL_DMA_Init+0x38a>
  18480. 8007e76: 687b ldr r3, [r7, #4]
  18481. 8007e78: 681b ldr r3, [r3, #0]
  18482. 8007e7a: 4a35 ldr r2, [pc, #212] @ (8007f50 <HAL_DMA_Init+0x43c>)
  18483. 8007e7c: 4293 cmp r3, r2
  18484. 8007e7e: d00e beq.n 8007e9e <HAL_DMA_Init+0x38a>
  18485. 8007e80: 687b ldr r3, [r7, #4]
  18486. 8007e82: 681b ldr r3, [r3, #0]
  18487. 8007e84: 4a33 ldr r2, [pc, #204] @ (8007f54 <HAL_DMA_Init+0x440>)
  18488. 8007e86: 4293 cmp r3, r2
  18489. 8007e88: d009 beq.n 8007e9e <HAL_DMA_Init+0x38a>
  18490. 8007e8a: 687b ldr r3, [r7, #4]
  18491. 8007e8c: 681b ldr r3, [r3, #0]
  18492. 8007e8e: 4a32 ldr r2, [pc, #200] @ (8007f58 <HAL_DMA_Init+0x444>)
  18493. 8007e90: 4293 cmp r3, r2
  18494. 8007e92: d004 beq.n 8007e9e <HAL_DMA_Init+0x38a>
  18495. 8007e94: 687b ldr r3, [r7, #4]
  18496. 8007e96: 681b ldr r3, [r3, #0]
  18497. 8007e98: 4a30 ldr r2, [pc, #192] @ (8007f5c <HAL_DMA_Init+0x448>)
  18498. 8007e9a: 4293 cmp r3, r2
  18499. 8007e9c: d101 bne.n 8007ea2 <HAL_DMA_Init+0x38e>
  18500. 8007e9e: 2301 movs r3, #1
  18501. 8007ea0: e000 b.n 8007ea4 <HAL_DMA_Init+0x390>
  18502. 8007ea2: 2300 movs r3, #0
  18503. 8007ea4: 2b00 cmp r3, #0
  18504. 8007ea6: f000 8097 beq.w 8007fd8 <HAL_DMA_Init+0x4c4>
  18505. {
  18506. if(IS_BDMA_CHANNEL_DMAMUX_INSTANCE(hdma->Instance) != 0U)
  18507. 8007eaa: 687b ldr r3, [r7, #4]
  18508. 8007eac: 681b ldr r3, [r3, #0]
  18509. 8007eae: 4a24 ldr r2, [pc, #144] @ (8007f40 <HAL_DMA_Init+0x42c>)
  18510. 8007eb0: 4293 cmp r3, r2
  18511. 8007eb2: d021 beq.n 8007ef8 <HAL_DMA_Init+0x3e4>
  18512. 8007eb4: 687b ldr r3, [r7, #4]
  18513. 8007eb6: 681b ldr r3, [r3, #0]
  18514. 8007eb8: 4a22 ldr r2, [pc, #136] @ (8007f44 <HAL_DMA_Init+0x430>)
  18515. 8007eba: 4293 cmp r3, r2
  18516. 8007ebc: d01c beq.n 8007ef8 <HAL_DMA_Init+0x3e4>
  18517. 8007ebe: 687b ldr r3, [r7, #4]
  18518. 8007ec0: 681b ldr r3, [r3, #0]
  18519. 8007ec2: 4a21 ldr r2, [pc, #132] @ (8007f48 <HAL_DMA_Init+0x434>)
  18520. 8007ec4: 4293 cmp r3, r2
  18521. 8007ec6: d017 beq.n 8007ef8 <HAL_DMA_Init+0x3e4>
  18522. 8007ec8: 687b ldr r3, [r7, #4]
  18523. 8007eca: 681b ldr r3, [r3, #0]
  18524. 8007ecc: 4a1f ldr r2, [pc, #124] @ (8007f4c <HAL_DMA_Init+0x438>)
  18525. 8007ece: 4293 cmp r3, r2
  18526. 8007ed0: d012 beq.n 8007ef8 <HAL_DMA_Init+0x3e4>
  18527. 8007ed2: 687b ldr r3, [r7, #4]
  18528. 8007ed4: 681b ldr r3, [r3, #0]
  18529. 8007ed6: 4a1e ldr r2, [pc, #120] @ (8007f50 <HAL_DMA_Init+0x43c>)
  18530. 8007ed8: 4293 cmp r3, r2
  18531. 8007eda: d00d beq.n 8007ef8 <HAL_DMA_Init+0x3e4>
  18532. 8007edc: 687b ldr r3, [r7, #4]
  18533. 8007ede: 681b ldr r3, [r3, #0]
  18534. 8007ee0: 4a1c ldr r2, [pc, #112] @ (8007f54 <HAL_DMA_Init+0x440>)
  18535. 8007ee2: 4293 cmp r3, r2
  18536. 8007ee4: d008 beq.n 8007ef8 <HAL_DMA_Init+0x3e4>
  18537. 8007ee6: 687b ldr r3, [r7, #4]
  18538. 8007ee8: 681b ldr r3, [r3, #0]
  18539. 8007eea: 4a1b ldr r2, [pc, #108] @ (8007f58 <HAL_DMA_Init+0x444>)
  18540. 8007eec: 4293 cmp r3, r2
  18541. 8007eee: d003 beq.n 8007ef8 <HAL_DMA_Init+0x3e4>
  18542. 8007ef0: 687b ldr r3, [r7, #4]
  18543. 8007ef2: 681b ldr r3, [r3, #0]
  18544. 8007ef4: 4a19 ldr r2, [pc, #100] @ (8007f5c <HAL_DMA_Init+0x448>)
  18545. 8007ef6: 4293 cmp r3, r2
  18546. /* Check the request parameter */
  18547. assert_param(IS_BDMA_REQUEST(hdma->Init.Request));
  18548. }
  18549. /* Change DMA peripheral state */
  18550. hdma->State = HAL_DMA_STATE_BUSY;
  18551. 8007ef8: 687b ldr r3, [r7, #4]
  18552. 8007efa: 2202 movs r2, #2
  18553. 8007efc: f883 2035 strb.w r2, [r3, #53] @ 0x35
  18554. /* Allocate lock resource */
  18555. __HAL_UNLOCK(hdma);
  18556. 8007f00: 687b ldr r3, [r7, #4]
  18557. 8007f02: 2200 movs r2, #0
  18558. 8007f04: f883 2034 strb.w r2, [r3, #52] @ 0x34
  18559. /* Get the CR register value */
  18560. registerValue = ((BDMA_Channel_TypeDef *)hdma->Instance)->CCR;
  18561. 8007f08: 687b ldr r3, [r7, #4]
  18562. 8007f0a: 681b ldr r3, [r3, #0]
  18563. 8007f0c: 681b ldr r3, [r3, #0]
  18564. 8007f0e: 617b str r3, [r7, #20]
  18565. /* Clear PL, MSIZE, PSIZE, MINC, PINC, CIRC, DIR, MEM2MEM, DBM and CT bits */
  18566. registerValue &= ((uint32_t)~(BDMA_CCR_PL | BDMA_CCR_MSIZE | BDMA_CCR_PSIZE | \
  18567. 8007f10: 697a ldr r2, [r7, #20]
  18568. 8007f12: 4b13 ldr r3, [pc, #76] @ (8007f60 <HAL_DMA_Init+0x44c>)
  18569. 8007f14: 4013 ands r3, r2
  18570. 8007f16: 617b str r3, [r7, #20]
  18571. BDMA_CCR_MINC | BDMA_CCR_PINC | BDMA_CCR_CIRC | \
  18572. BDMA_CCR_DIR | BDMA_CCR_MEM2MEM | BDMA_CCR_DBM | \
  18573. BDMA_CCR_CT));
  18574. /* Prepare the DMA Channel configuration */
  18575. registerValue |= DMA_TO_BDMA_DIRECTION(hdma->Init.Direction) |
  18576. 8007f18: 687b ldr r3, [r7, #4]
  18577. 8007f1a: 689b ldr r3, [r3, #8]
  18578. 8007f1c: 2b40 cmp r3, #64 @ 0x40
  18579. 8007f1e: d021 beq.n 8007f64 <HAL_DMA_Init+0x450>
  18580. 8007f20: 687b ldr r3, [r7, #4]
  18581. 8007f22: 689b ldr r3, [r3, #8]
  18582. 8007f24: 2b80 cmp r3, #128 @ 0x80
  18583. 8007f26: d102 bne.n 8007f2e <HAL_DMA_Init+0x41a>
  18584. 8007f28: f44f 4380 mov.w r3, #16384 @ 0x4000
  18585. 8007f2c: e01b b.n 8007f66 <HAL_DMA_Init+0x452>
  18586. 8007f2e: 2300 movs r3, #0
  18587. 8007f30: e019 b.n 8007f66 <HAL_DMA_Init+0x452>
  18588. 8007f32: bf00 nop
  18589. 8007f34: fe10803f .word 0xfe10803f
  18590. 8007f38: 5c001000 .word 0x5c001000
  18591. 8007f3c: ffff0000 .word 0xffff0000
  18592. 8007f40: 58025408 .word 0x58025408
  18593. 8007f44: 5802541c .word 0x5802541c
  18594. 8007f48: 58025430 .word 0x58025430
  18595. 8007f4c: 58025444 .word 0x58025444
  18596. 8007f50: 58025458 .word 0x58025458
  18597. 8007f54: 5802546c .word 0x5802546c
  18598. 8007f58: 58025480 .word 0x58025480
  18599. 8007f5c: 58025494 .word 0x58025494
  18600. 8007f60: fffe000f .word 0xfffe000f
  18601. 8007f64: 2310 movs r3, #16
  18602. DMA_TO_BDMA_PERIPHERAL_INC(hdma->Init.PeriphInc) |
  18603. 8007f66: 687a ldr r2, [r7, #4]
  18604. 8007f68: 68d2 ldr r2, [r2, #12]
  18605. 8007f6a: 08d2 lsrs r2, r2, #3
  18606. registerValue |= DMA_TO_BDMA_DIRECTION(hdma->Init.Direction) |
  18607. 8007f6c: 431a orrs r2, r3
  18608. DMA_TO_BDMA_MEMORY_INC(hdma->Init.MemInc) |
  18609. 8007f6e: 687b ldr r3, [r7, #4]
  18610. 8007f70: 691b ldr r3, [r3, #16]
  18611. 8007f72: 08db lsrs r3, r3, #3
  18612. DMA_TO_BDMA_PERIPHERAL_INC(hdma->Init.PeriphInc) |
  18613. 8007f74: 431a orrs r2, r3
  18614. DMA_TO_BDMA_PDATA_SIZE(hdma->Init.PeriphDataAlignment) |
  18615. 8007f76: 687b ldr r3, [r7, #4]
  18616. 8007f78: 695b ldr r3, [r3, #20]
  18617. 8007f7a: 08db lsrs r3, r3, #3
  18618. DMA_TO_BDMA_MEMORY_INC(hdma->Init.MemInc) |
  18619. 8007f7c: 431a orrs r2, r3
  18620. DMA_TO_BDMA_MDATA_SIZE(hdma->Init.MemDataAlignment) |
  18621. 8007f7e: 687b ldr r3, [r7, #4]
  18622. 8007f80: 699b ldr r3, [r3, #24]
  18623. 8007f82: 08db lsrs r3, r3, #3
  18624. DMA_TO_BDMA_PDATA_SIZE(hdma->Init.PeriphDataAlignment) |
  18625. 8007f84: 431a orrs r2, r3
  18626. DMA_TO_BDMA_MODE(hdma->Init.Mode) |
  18627. 8007f86: 687b ldr r3, [r7, #4]
  18628. 8007f88: 69db ldr r3, [r3, #28]
  18629. 8007f8a: 08db lsrs r3, r3, #3
  18630. DMA_TO_BDMA_MDATA_SIZE(hdma->Init.MemDataAlignment) |
  18631. 8007f8c: 431a orrs r2, r3
  18632. DMA_TO_BDMA_PRIORITY(hdma->Init.Priority);
  18633. 8007f8e: 687b ldr r3, [r7, #4]
  18634. 8007f90: 6a1b ldr r3, [r3, #32]
  18635. 8007f92: 091b lsrs r3, r3, #4
  18636. DMA_TO_BDMA_MODE(hdma->Init.Mode) |
  18637. 8007f94: 4313 orrs r3, r2
  18638. registerValue |= DMA_TO_BDMA_DIRECTION(hdma->Init.Direction) |
  18639. 8007f96: 697a ldr r2, [r7, #20]
  18640. 8007f98: 4313 orrs r3, r2
  18641. 8007f9a: 617b str r3, [r7, #20]
  18642. /* Write to DMA Channel CR register */
  18643. ((BDMA_Channel_TypeDef *)hdma->Instance)->CCR = registerValue;
  18644. 8007f9c: 687b ldr r3, [r7, #4]
  18645. 8007f9e: 681b ldr r3, [r3, #0]
  18646. 8007fa0: 697a ldr r2, [r7, #20]
  18647. 8007fa2: 601a str r2, [r3, #0]
  18648. /* calculation of the channel index */
  18649. hdma->StreamIndex = (((uint32_t)((uint32_t*)hdma->Instance) - (uint32_t)BDMA_Channel0) / ((uint32_t)BDMA_Channel1 - (uint32_t)BDMA_Channel0)) << 2U;
  18650. 8007fa4: 687b ldr r3, [r7, #4]
  18651. 8007fa6: 681b ldr r3, [r3, #0]
  18652. 8007fa8: 461a mov r2, r3
  18653. 8007faa: 4b6e ldr r3, [pc, #440] @ (8008164 <HAL_DMA_Init+0x650>)
  18654. 8007fac: 4413 add r3, r2
  18655. 8007fae: 4a6e ldr r2, [pc, #440] @ (8008168 <HAL_DMA_Init+0x654>)
  18656. 8007fb0: fba2 2303 umull r2, r3, r2, r3
  18657. 8007fb4: 091b lsrs r3, r3, #4
  18658. 8007fb6: 009a lsls r2, r3, #2
  18659. 8007fb8: 687b ldr r3, [r7, #4]
  18660. 8007fba: 65da str r2, [r3, #92] @ 0x5c
  18661. /* Initialize StreamBaseAddress and StreamIndex parameters to be used to calculate
  18662. DMA steam Base Address needed by HAL_DMA_IRQHandler() and HAL_DMA_PollForTransfer() */
  18663. regs_bdma = (BDMA_Base_Registers *)DMA_CalcBaseAndBitshift(hdma);
  18664. 8007fbc: 6878 ldr r0, [r7, #4]
  18665. 8007fbe: f002 f9a9 bl 800a314 <DMA_CalcBaseAndBitshift>
  18666. 8007fc2: 4603 mov r3, r0
  18667. 8007fc4: 60fb str r3, [r7, #12]
  18668. /* Clear all interrupt flags */
  18669. regs_bdma->IFCR = ((BDMA_IFCR_CGIF0) << (hdma->StreamIndex & 0x1FU));
  18670. 8007fc6: 687b ldr r3, [r7, #4]
  18671. 8007fc8: 6ddb ldr r3, [r3, #92] @ 0x5c
  18672. 8007fca: f003 031f and.w r3, r3, #31
  18673. 8007fce: 2201 movs r2, #1
  18674. 8007fd0: 409a lsls r2, r3
  18675. 8007fd2: 68fb ldr r3, [r7, #12]
  18676. 8007fd4: 605a str r2, [r3, #4]
  18677. 8007fd6: e008 b.n 8007fea <HAL_DMA_Init+0x4d6>
  18678. }
  18679. else
  18680. {
  18681. hdma->ErrorCode = HAL_DMA_ERROR_PARAM;
  18682. 8007fd8: 687b ldr r3, [r7, #4]
  18683. 8007fda: 2240 movs r2, #64 @ 0x40
  18684. 8007fdc: 655a str r2, [r3, #84] @ 0x54
  18685. hdma->State = HAL_DMA_STATE_ERROR;
  18686. 8007fde: 687b ldr r3, [r7, #4]
  18687. 8007fe0: 2203 movs r2, #3
  18688. 8007fe2: f883 2035 strb.w r2, [r3, #53] @ 0x35
  18689. return HAL_ERROR;
  18690. 8007fe6: 2301 movs r3, #1
  18691. 8007fe8: e0b7 b.n 800815a <HAL_DMA_Init+0x646>
  18692. }
  18693. if(IS_DMA_DMAMUX_ALL_INSTANCE(hdma->Instance) != 0U) /* No DMAMUX available for BDMA1 */
  18694. 8007fea: 687b ldr r3, [r7, #4]
  18695. 8007fec: 681b ldr r3, [r3, #0]
  18696. 8007fee: 4a5f ldr r2, [pc, #380] @ (800816c <HAL_DMA_Init+0x658>)
  18697. 8007ff0: 4293 cmp r3, r2
  18698. 8007ff2: d072 beq.n 80080da <HAL_DMA_Init+0x5c6>
  18699. 8007ff4: 687b ldr r3, [r7, #4]
  18700. 8007ff6: 681b ldr r3, [r3, #0]
  18701. 8007ff8: 4a5d ldr r2, [pc, #372] @ (8008170 <HAL_DMA_Init+0x65c>)
  18702. 8007ffa: 4293 cmp r3, r2
  18703. 8007ffc: d06d beq.n 80080da <HAL_DMA_Init+0x5c6>
  18704. 8007ffe: 687b ldr r3, [r7, #4]
  18705. 8008000: 681b ldr r3, [r3, #0]
  18706. 8008002: 4a5c ldr r2, [pc, #368] @ (8008174 <HAL_DMA_Init+0x660>)
  18707. 8008004: 4293 cmp r3, r2
  18708. 8008006: d068 beq.n 80080da <HAL_DMA_Init+0x5c6>
  18709. 8008008: 687b ldr r3, [r7, #4]
  18710. 800800a: 681b ldr r3, [r3, #0]
  18711. 800800c: 4a5a ldr r2, [pc, #360] @ (8008178 <HAL_DMA_Init+0x664>)
  18712. 800800e: 4293 cmp r3, r2
  18713. 8008010: d063 beq.n 80080da <HAL_DMA_Init+0x5c6>
  18714. 8008012: 687b ldr r3, [r7, #4]
  18715. 8008014: 681b ldr r3, [r3, #0]
  18716. 8008016: 4a59 ldr r2, [pc, #356] @ (800817c <HAL_DMA_Init+0x668>)
  18717. 8008018: 4293 cmp r3, r2
  18718. 800801a: d05e beq.n 80080da <HAL_DMA_Init+0x5c6>
  18719. 800801c: 687b ldr r3, [r7, #4]
  18720. 800801e: 681b ldr r3, [r3, #0]
  18721. 8008020: 4a57 ldr r2, [pc, #348] @ (8008180 <HAL_DMA_Init+0x66c>)
  18722. 8008022: 4293 cmp r3, r2
  18723. 8008024: d059 beq.n 80080da <HAL_DMA_Init+0x5c6>
  18724. 8008026: 687b ldr r3, [r7, #4]
  18725. 8008028: 681b ldr r3, [r3, #0]
  18726. 800802a: 4a56 ldr r2, [pc, #344] @ (8008184 <HAL_DMA_Init+0x670>)
  18727. 800802c: 4293 cmp r3, r2
  18728. 800802e: d054 beq.n 80080da <HAL_DMA_Init+0x5c6>
  18729. 8008030: 687b ldr r3, [r7, #4]
  18730. 8008032: 681b ldr r3, [r3, #0]
  18731. 8008034: 4a54 ldr r2, [pc, #336] @ (8008188 <HAL_DMA_Init+0x674>)
  18732. 8008036: 4293 cmp r3, r2
  18733. 8008038: d04f beq.n 80080da <HAL_DMA_Init+0x5c6>
  18734. 800803a: 687b ldr r3, [r7, #4]
  18735. 800803c: 681b ldr r3, [r3, #0]
  18736. 800803e: 4a53 ldr r2, [pc, #332] @ (800818c <HAL_DMA_Init+0x678>)
  18737. 8008040: 4293 cmp r3, r2
  18738. 8008042: d04a beq.n 80080da <HAL_DMA_Init+0x5c6>
  18739. 8008044: 687b ldr r3, [r7, #4]
  18740. 8008046: 681b ldr r3, [r3, #0]
  18741. 8008048: 4a51 ldr r2, [pc, #324] @ (8008190 <HAL_DMA_Init+0x67c>)
  18742. 800804a: 4293 cmp r3, r2
  18743. 800804c: d045 beq.n 80080da <HAL_DMA_Init+0x5c6>
  18744. 800804e: 687b ldr r3, [r7, #4]
  18745. 8008050: 681b ldr r3, [r3, #0]
  18746. 8008052: 4a50 ldr r2, [pc, #320] @ (8008194 <HAL_DMA_Init+0x680>)
  18747. 8008054: 4293 cmp r3, r2
  18748. 8008056: d040 beq.n 80080da <HAL_DMA_Init+0x5c6>
  18749. 8008058: 687b ldr r3, [r7, #4]
  18750. 800805a: 681b ldr r3, [r3, #0]
  18751. 800805c: 4a4e ldr r2, [pc, #312] @ (8008198 <HAL_DMA_Init+0x684>)
  18752. 800805e: 4293 cmp r3, r2
  18753. 8008060: d03b beq.n 80080da <HAL_DMA_Init+0x5c6>
  18754. 8008062: 687b ldr r3, [r7, #4]
  18755. 8008064: 681b ldr r3, [r3, #0]
  18756. 8008066: 4a4d ldr r2, [pc, #308] @ (800819c <HAL_DMA_Init+0x688>)
  18757. 8008068: 4293 cmp r3, r2
  18758. 800806a: d036 beq.n 80080da <HAL_DMA_Init+0x5c6>
  18759. 800806c: 687b ldr r3, [r7, #4]
  18760. 800806e: 681b ldr r3, [r3, #0]
  18761. 8008070: 4a4b ldr r2, [pc, #300] @ (80081a0 <HAL_DMA_Init+0x68c>)
  18762. 8008072: 4293 cmp r3, r2
  18763. 8008074: d031 beq.n 80080da <HAL_DMA_Init+0x5c6>
  18764. 8008076: 687b ldr r3, [r7, #4]
  18765. 8008078: 681b ldr r3, [r3, #0]
  18766. 800807a: 4a4a ldr r2, [pc, #296] @ (80081a4 <HAL_DMA_Init+0x690>)
  18767. 800807c: 4293 cmp r3, r2
  18768. 800807e: d02c beq.n 80080da <HAL_DMA_Init+0x5c6>
  18769. 8008080: 687b ldr r3, [r7, #4]
  18770. 8008082: 681b ldr r3, [r3, #0]
  18771. 8008084: 4a48 ldr r2, [pc, #288] @ (80081a8 <HAL_DMA_Init+0x694>)
  18772. 8008086: 4293 cmp r3, r2
  18773. 8008088: d027 beq.n 80080da <HAL_DMA_Init+0x5c6>
  18774. 800808a: 687b ldr r3, [r7, #4]
  18775. 800808c: 681b ldr r3, [r3, #0]
  18776. 800808e: 4a47 ldr r2, [pc, #284] @ (80081ac <HAL_DMA_Init+0x698>)
  18777. 8008090: 4293 cmp r3, r2
  18778. 8008092: d022 beq.n 80080da <HAL_DMA_Init+0x5c6>
  18779. 8008094: 687b ldr r3, [r7, #4]
  18780. 8008096: 681b ldr r3, [r3, #0]
  18781. 8008098: 4a45 ldr r2, [pc, #276] @ (80081b0 <HAL_DMA_Init+0x69c>)
  18782. 800809a: 4293 cmp r3, r2
  18783. 800809c: d01d beq.n 80080da <HAL_DMA_Init+0x5c6>
  18784. 800809e: 687b ldr r3, [r7, #4]
  18785. 80080a0: 681b ldr r3, [r3, #0]
  18786. 80080a2: 4a44 ldr r2, [pc, #272] @ (80081b4 <HAL_DMA_Init+0x6a0>)
  18787. 80080a4: 4293 cmp r3, r2
  18788. 80080a6: d018 beq.n 80080da <HAL_DMA_Init+0x5c6>
  18789. 80080a8: 687b ldr r3, [r7, #4]
  18790. 80080aa: 681b ldr r3, [r3, #0]
  18791. 80080ac: 4a42 ldr r2, [pc, #264] @ (80081b8 <HAL_DMA_Init+0x6a4>)
  18792. 80080ae: 4293 cmp r3, r2
  18793. 80080b0: d013 beq.n 80080da <HAL_DMA_Init+0x5c6>
  18794. 80080b2: 687b ldr r3, [r7, #4]
  18795. 80080b4: 681b ldr r3, [r3, #0]
  18796. 80080b6: 4a41 ldr r2, [pc, #260] @ (80081bc <HAL_DMA_Init+0x6a8>)
  18797. 80080b8: 4293 cmp r3, r2
  18798. 80080ba: d00e beq.n 80080da <HAL_DMA_Init+0x5c6>
  18799. 80080bc: 687b ldr r3, [r7, #4]
  18800. 80080be: 681b ldr r3, [r3, #0]
  18801. 80080c0: 4a3f ldr r2, [pc, #252] @ (80081c0 <HAL_DMA_Init+0x6ac>)
  18802. 80080c2: 4293 cmp r3, r2
  18803. 80080c4: d009 beq.n 80080da <HAL_DMA_Init+0x5c6>
  18804. 80080c6: 687b ldr r3, [r7, #4]
  18805. 80080c8: 681b ldr r3, [r3, #0]
  18806. 80080ca: 4a3e ldr r2, [pc, #248] @ (80081c4 <HAL_DMA_Init+0x6b0>)
  18807. 80080cc: 4293 cmp r3, r2
  18808. 80080ce: d004 beq.n 80080da <HAL_DMA_Init+0x5c6>
  18809. 80080d0: 687b ldr r3, [r7, #4]
  18810. 80080d2: 681b ldr r3, [r3, #0]
  18811. 80080d4: 4a3c ldr r2, [pc, #240] @ (80081c8 <HAL_DMA_Init+0x6b4>)
  18812. 80080d6: 4293 cmp r3, r2
  18813. 80080d8: d101 bne.n 80080de <HAL_DMA_Init+0x5ca>
  18814. 80080da: 2301 movs r3, #1
  18815. 80080dc: e000 b.n 80080e0 <HAL_DMA_Init+0x5cc>
  18816. 80080de: 2300 movs r3, #0
  18817. 80080e0: 2b00 cmp r3, #0
  18818. 80080e2: d032 beq.n 800814a <HAL_DMA_Init+0x636>
  18819. {
  18820. /* Initialize parameters for DMAMUX channel :
  18821. DMAmuxChannel, DMAmuxChannelStatus and DMAmuxChannelStatusMask
  18822. */
  18823. DMA_CalcDMAMUXChannelBaseAndMask(hdma);
  18824. 80080e4: 6878 ldr r0, [r7, #4]
  18825. 80080e6: f002 fa43 bl 800a570 <DMA_CalcDMAMUXChannelBaseAndMask>
  18826. if(hdma->Init.Direction == DMA_MEMORY_TO_MEMORY)
  18827. 80080ea: 687b ldr r3, [r7, #4]
  18828. 80080ec: 689b ldr r3, [r3, #8]
  18829. 80080ee: 2b80 cmp r3, #128 @ 0x80
  18830. 80080f0: d102 bne.n 80080f8 <HAL_DMA_Init+0x5e4>
  18831. {
  18832. /* if memory to memory force the request to 0*/
  18833. hdma->Init.Request = DMA_REQUEST_MEM2MEM;
  18834. 80080f2: 687b ldr r3, [r7, #4]
  18835. 80080f4: 2200 movs r2, #0
  18836. 80080f6: 605a str r2, [r3, #4]
  18837. }
  18838. /* Set peripheral request to DMAMUX channel */
  18839. hdma->DMAmuxChannel->CCR = (hdma->Init.Request & DMAMUX_CxCR_DMAREQ_ID);
  18840. 80080f8: 687b ldr r3, [r7, #4]
  18841. 80080fa: 685a ldr r2, [r3, #4]
  18842. 80080fc: 687b ldr r3, [r7, #4]
  18843. 80080fe: 6e1b ldr r3, [r3, #96] @ 0x60
  18844. 8008100: b2d2 uxtb r2, r2
  18845. 8008102: 601a str r2, [r3, #0]
  18846. /* Clear the DMAMUX synchro overrun flag */
  18847. hdma->DMAmuxChannelStatus->CFR = hdma->DMAmuxChannelStatusMask;
  18848. 8008104: 687b ldr r3, [r7, #4]
  18849. 8008106: 6e5b ldr r3, [r3, #100] @ 0x64
  18850. 8008108: 687a ldr r2, [r7, #4]
  18851. 800810a: 6e92 ldr r2, [r2, #104] @ 0x68
  18852. 800810c: 605a str r2, [r3, #4]
  18853. /* Initialize parameters for DMAMUX request generator :
  18854. if the DMA request is DMA_REQUEST_GENERATOR0 to DMA_REQUEST_GENERATOR7
  18855. */
  18856. if((hdma->Init.Request >= DMA_REQUEST_GENERATOR0) && (hdma->Init.Request <= DMA_REQUEST_GENERATOR7))
  18857. 800810e: 687b ldr r3, [r7, #4]
  18858. 8008110: 685b ldr r3, [r3, #4]
  18859. 8008112: 2b00 cmp r3, #0
  18860. 8008114: d010 beq.n 8008138 <HAL_DMA_Init+0x624>
  18861. 8008116: 687b ldr r3, [r7, #4]
  18862. 8008118: 685b ldr r3, [r3, #4]
  18863. 800811a: 2b08 cmp r3, #8
  18864. 800811c: d80c bhi.n 8008138 <HAL_DMA_Init+0x624>
  18865. {
  18866. /* Initialize parameters for DMAMUX request generator :
  18867. DMAmuxRequestGen, DMAmuxRequestGenStatus and DMAmuxRequestGenStatusMask */
  18868. DMA_CalcDMAMUXRequestGenBaseAndMask(hdma);
  18869. 800811e: 6878 ldr r0, [r7, #4]
  18870. 8008120: f002 fac0 bl 800a6a4 <DMA_CalcDMAMUXRequestGenBaseAndMask>
  18871. /* Reset the DMAMUX request generator register */
  18872. hdma->DMAmuxRequestGen->RGCR = 0U;
  18873. 8008124: 687b ldr r3, [r7, #4]
  18874. 8008126: 6edb ldr r3, [r3, #108] @ 0x6c
  18875. 8008128: 2200 movs r2, #0
  18876. 800812a: 601a str r2, [r3, #0]
  18877. /* Clear the DMAMUX request generator overrun flag */
  18878. hdma->DMAmuxRequestGenStatus->RGCFR = hdma->DMAmuxRequestGenStatusMask;
  18879. 800812c: 687b ldr r3, [r7, #4]
  18880. 800812e: 6f1b ldr r3, [r3, #112] @ 0x70
  18881. 8008130: 687a ldr r2, [r7, #4]
  18882. 8008132: 6f52 ldr r2, [r2, #116] @ 0x74
  18883. 8008134: 605a str r2, [r3, #4]
  18884. 8008136: e008 b.n 800814a <HAL_DMA_Init+0x636>
  18885. }
  18886. else
  18887. {
  18888. hdma->DMAmuxRequestGen = 0U;
  18889. 8008138: 687b ldr r3, [r7, #4]
  18890. 800813a: 2200 movs r2, #0
  18891. 800813c: 66da str r2, [r3, #108] @ 0x6c
  18892. hdma->DMAmuxRequestGenStatus = 0U;
  18893. 800813e: 687b ldr r3, [r7, #4]
  18894. 8008140: 2200 movs r2, #0
  18895. 8008142: 671a str r2, [r3, #112] @ 0x70
  18896. hdma->DMAmuxRequestGenStatusMask = 0U;
  18897. 8008144: 687b ldr r3, [r7, #4]
  18898. 8008146: 2200 movs r2, #0
  18899. 8008148: 675a str r2, [r3, #116] @ 0x74
  18900. }
  18901. }
  18902. /* Initialize the error code */
  18903. hdma->ErrorCode = HAL_DMA_ERROR_NONE;
  18904. 800814a: 687b ldr r3, [r7, #4]
  18905. 800814c: 2200 movs r2, #0
  18906. 800814e: 655a str r2, [r3, #84] @ 0x54
  18907. /* Initialize the DMA state */
  18908. hdma->State = HAL_DMA_STATE_READY;
  18909. 8008150: 687b ldr r3, [r7, #4]
  18910. 8008152: 2201 movs r2, #1
  18911. 8008154: f883 2035 strb.w r2, [r3, #53] @ 0x35
  18912. return HAL_OK;
  18913. 8008158: 2300 movs r3, #0
  18914. }
  18915. 800815a: 4618 mov r0, r3
  18916. 800815c: 3718 adds r7, #24
  18917. 800815e: 46bd mov sp, r7
  18918. 8008160: bd80 pop {r7, pc}
  18919. 8008162: bf00 nop
  18920. 8008164: a7fdabf8 .word 0xa7fdabf8
  18921. 8008168: cccccccd .word 0xcccccccd
  18922. 800816c: 40020010 .word 0x40020010
  18923. 8008170: 40020028 .word 0x40020028
  18924. 8008174: 40020040 .word 0x40020040
  18925. 8008178: 40020058 .word 0x40020058
  18926. 800817c: 40020070 .word 0x40020070
  18927. 8008180: 40020088 .word 0x40020088
  18928. 8008184: 400200a0 .word 0x400200a0
  18929. 8008188: 400200b8 .word 0x400200b8
  18930. 800818c: 40020410 .word 0x40020410
  18931. 8008190: 40020428 .word 0x40020428
  18932. 8008194: 40020440 .word 0x40020440
  18933. 8008198: 40020458 .word 0x40020458
  18934. 800819c: 40020470 .word 0x40020470
  18935. 80081a0: 40020488 .word 0x40020488
  18936. 80081a4: 400204a0 .word 0x400204a0
  18937. 80081a8: 400204b8 .word 0x400204b8
  18938. 80081ac: 58025408 .word 0x58025408
  18939. 80081b0: 5802541c .word 0x5802541c
  18940. 80081b4: 58025430 .word 0x58025430
  18941. 80081b8: 58025444 .word 0x58025444
  18942. 80081bc: 58025458 .word 0x58025458
  18943. 80081c0: 5802546c .word 0x5802546c
  18944. 80081c4: 58025480 .word 0x58025480
  18945. 80081c8: 58025494 .word 0x58025494
  18946. 080081cc <HAL_DMA_Start_IT>:
  18947. * @param DstAddress: The destination memory Buffer address
  18948. * @param DataLength: The length of data to be transferred from source to destination
  18949. * @retval HAL status
  18950. */
  18951. HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
  18952. {
  18953. 80081cc: b580 push {r7, lr}
  18954. 80081ce: b086 sub sp, #24
  18955. 80081d0: af00 add r7, sp, #0
  18956. 80081d2: 60f8 str r0, [r7, #12]
  18957. 80081d4: 60b9 str r1, [r7, #8]
  18958. 80081d6: 607a str r2, [r7, #4]
  18959. 80081d8: 603b str r3, [r7, #0]
  18960. HAL_StatusTypeDef status = HAL_OK;
  18961. 80081da: 2300 movs r3, #0
  18962. 80081dc: 75fb strb r3, [r7, #23]
  18963. /* Check the parameters */
  18964. assert_param(IS_DMA_BUFFER_SIZE(DataLength));
  18965. /* Check the DMA peripheral handle */
  18966. if(hdma == NULL)
  18967. 80081de: 68fb ldr r3, [r7, #12]
  18968. 80081e0: 2b00 cmp r3, #0
  18969. 80081e2: d101 bne.n 80081e8 <HAL_DMA_Start_IT+0x1c>
  18970. {
  18971. return HAL_ERROR;
  18972. 80081e4: 2301 movs r3, #1
  18973. 80081e6: e226 b.n 8008636 <HAL_DMA_Start_IT+0x46a>
  18974. }
  18975. /* Process locked */
  18976. __HAL_LOCK(hdma);
  18977. 80081e8: 68fb ldr r3, [r7, #12]
  18978. 80081ea: f893 3034 ldrb.w r3, [r3, #52] @ 0x34
  18979. 80081ee: 2b01 cmp r3, #1
  18980. 80081f0: d101 bne.n 80081f6 <HAL_DMA_Start_IT+0x2a>
  18981. 80081f2: 2302 movs r3, #2
  18982. 80081f4: e21f b.n 8008636 <HAL_DMA_Start_IT+0x46a>
  18983. 80081f6: 68fb ldr r3, [r7, #12]
  18984. 80081f8: 2201 movs r2, #1
  18985. 80081fa: f883 2034 strb.w r2, [r3, #52] @ 0x34
  18986. if(HAL_DMA_STATE_READY == hdma->State)
  18987. 80081fe: 68fb ldr r3, [r7, #12]
  18988. 8008200: f893 3035 ldrb.w r3, [r3, #53] @ 0x35
  18989. 8008204: b2db uxtb r3, r3
  18990. 8008206: 2b01 cmp r3, #1
  18991. 8008208: f040 820a bne.w 8008620 <HAL_DMA_Start_IT+0x454>
  18992. {
  18993. /* Change DMA peripheral state */
  18994. hdma->State = HAL_DMA_STATE_BUSY;
  18995. 800820c: 68fb ldr r3, [r7, #12]
  18996. 800820e: 2202 movs r2, #2
  18997. 8008210: f883 2035 strb.w r2, [r3, #53] @ 0x35
  18998. /* Initialize the error code */
  18999. hdma->ErrorCode = HAL_DMA_ERROR_NONE;
  19000. 8008214: 68fb ldr r3, [r7, #12]
  19001. 8008216: 2200 movs r2, #0
  19002. 8008218: 655a str r2, [r3, #84] @ 0x54
  19003. /* Disable the peripheral */
  19004. __HAL_DMA_DISABLE(hdma);
  19005. 800821a: 68fb ldr r3, [r7, #12]
  19006. 800821c: 681b ldr r3, [r3, #0]
  19007. 800821e: 4a68 ldr r2, [pc, #416] @ (80083c0 <HAL_DMA_Start_IT+0x1f4>)
  19008. 8008220: 4293 cmp r3, r2
  19009. 8008222: d04a beq.n 80082ba <HAL_DMA_Start_IT+0xee>
  19010. 8008224: 68fb ldr r3, [r7, #12]
  19011. 8008226: 681b ldr r3, [r3, #0]
  19012. 8008228: 4a66 ldr r2, [pc, #408] @ (80083c4 <HAL_DMA_Start_IT+0x1f8>)
  19013. 800822a: 4293 cmp r3, r2
  19014. 800822c: d045 beq.n 80082ba <HAL_DMA_Start_IT+0xee>
  19015. 800822e: 68fb ldr r3, [r7, #12]
  19016. 8008230: 681b ldr r3, [r3, #0]
  19017. 8008232: 4a65 ldr r2, [pc, #404] @ (80083c8 <HAL_DMA_Start_IT+0x1fc>)
  19018. 8008234: 4293 cmp r3, r2
  19019. 8008236: d040 beq.n 80082ba <HAL_DMA_Start_IT+0xee>
  19020. 8008238: 68fb ldr r3, [r7, #12]
  19021. 800823a: 681b ldr r3, [r3, #0]
  19022. 800823c: 4a63 ldr r2, [pc, #396] @ (80083cc <HAL_DMA_Start_IT+0x200>)
  19023. 800823e: 4293 cmp r3, r2
  19024. 8008240: d03b beq.n 80082ba <HAL_DMA_Start_IT+0xee>
  19025. 8008242: 68fb ldr r3, [r7, #12]
  19026. 8008244: 681b ldr r3, [r3, #0]
  19027. 8008246: 4a62 ldr r2, [pc, #392] @ (80083d0 <HAL_DMA_Start_IT+0x204>)
  19028. 8008248: 4293 cmp r3, r2
  19029. 800824a: d036 beq.n 80082ba <HAL_DMA_Start_IT+0xee>
  19030. 800824c: 68fb ldr r3, [r7, #12]
  19031. 800824e: 681b ldr r3, [r3, #0]
  19032. 8008250: 4a60 ldr r2, [pc, #384] @ (80083d4 <HAL_DMA_Start_IT+0x208>)
  19033. 8008252: 4293 cmp r3, r2
  19034. 8008254: d031 beq.n 80082ba <HAL_DMA_Start_IT+0xee>
  19035. 8008256: 68fb ldr r3, [r7, #12]
  19036. 8008258: 681b ldr r3, [r3, #0]
  19037. 800825a: 4a5f ldr r2, [pc, #380] @ (80083d8 <HAL_DMA_Start_IT+0x20c>)
  19038. 800825c: 4293 cmp r3, r2
  19039. 800825e: d02c beq.n 80082ba <HAL_DMA_Start_IT+0xee>
  19040. 8008260: 68fb ldr r3, [r7, #12]
  19041. 8008262: 681b ldr r3, [r3, #0]
  19042. 8008264: 4a5d ldr r2, [pc, #372] @ (80083dc <HAL_DMA_Start_IT+0x210>)
  19043. 8008266: 4293 cmp r3, r2
  19044. 8008268: d027 beq.n 80082ba <HAL_DMA_Start_IT+0xee>
  19045. 800826a: 68fb ldr r3, [r7, #12]
  19046. 800826c: 681b ldr r3, [r3, #0]
  19047. 800826e: 4a5c ldr r2, [pc, #368] @ (80083e0 <HAL_DMA_Start_IT+0x214>)
  19048. 8008270: 4293 cmp r3, r2
  19049. 8008272: d022 beq.n 80082ba <HAL_DMA_Start_IT+0xee>
  19050. 8008274: 68fb ldr r3, [r7, #12]
  19051. 8008276: 681b ldr r3, [r3, #0]
  19052. 8008278: 4a5a ldr r2, [pc, #360] @ (80083e4 <HAL_DMA_Start_IT+0x218>)
  19053. 800827a: 4293 cmp r3, r2
  19054. 800827c: d01d beq.n 80082ba <HAL_DMA_Start_IT+0xee>
  19055. 800827e: 68fb ldr r3, [r7, #12]
  19056. 8008280: 681b ldr r3, [r3, #0]
  19057. 8008282: 4a59 ldr r2, [pc, #356] @ (80083e8 <HAL_DMA_Start_IT+0x21c>)
  19058. 8008284: 4293 cmp r3, r2
  19059. 8008286: d018 beq.n 80082ba <HAL_DMA_Start_IT+0xee>
  19060. 8008288: 68fb ldr r3, [r7, #12]
  19061. 800828a: 681b ldr r3, [r3, #0]
  19062. 800828c: 4a57 ldr r2, [pc, #348] @ (80083ec <HAL_DMA_Start_IT+0x220>)
  19063. 800828e: 4293 cmp r3, r2
  19064. 8008290: d013 beq.n 80082ba <HAL_DMA_Start_IT+0xee>
  19065. 8008292: 68fb ldr r3, [r7, #12]
  19066. 8008294: 681b ldr r3, [r3, #0]
  19067. 8008296: 4a56 ldr r2, [pc, #344] @ (80083f0 <HAL_DMA_Start_IT+0x224>)
  19068. 8008298: 4293 cmp r3, r2
  19069. 800829a: d00e beq.n 80082ba <HAL_DMA_Start_IT+0xee>
  19070. 800829c: 68fb ldr r3, [r7, #12]
  19071. 800829e: 681b ldr r3, [r3, #0]
  19072. 80082a0: 4a54 ldr r2, [pc, #336] @ (80083f4 <HAL_DMA_Start_IT+0x228>)
  19073. 80082a2: 4293 cmp r3, r2
  19074. 80082a4: d009 beq.n 80082ba <HAL_DMA_Start_IT+0xee>
  19075. 80082a6: 68fb ldr r3, [r7, #12]
  19076. 80082a8: 681b ldr r3, [r3, #0]
  19077. 80082aa: 4a53 ldr r2, [pc, #332] @ (80083f8 <HAL_DMA_Start_IT+0x22c>)
  19078. 80082ac: 4293 cmp r3, r2
  19079. 80082ae: d004 beq.n 80082ba <HAL_DMA_Start_IT+0xee>
  19080. 80082b0: 68fb ldr r3, [r7, #12]
  19081. 80082b2: 681b ldr r3, [r3, #0]
  19082. 80082b4: 4a51 ldr r2, [pc, #324] @ (80083fc <HAL_DMA_Start_IT+0x230>)
  19083. 80082b6: 4293 cmp r3, r2
  19084. 80082b8: d108 bne.n 80082cc <HAL_DMA_Start_IT+0x100>
  19085. 80082ba: 68fb ldr r3, [r7, #12]
  19086. 80082bc: 681b ldr r3, [r3, #0]
  19087. 80082be: 681a ldr r2, [r3, #0]
  19088. 80082c0: 68fb ldr r3, [r7, #12]
  19089. 80082c2: 681b ldr r3, [r3, #0]
  19090. 80082c4: f022 0201 bic.w r2, r2, #1
  19091. 80082c8: 601a str r2, [r3, #0]
  19092. 80082ca: e007 b.n 80082dc <HAL_DMA_Start_IT+0x110>
  19093. 80082cc: 68fb ldr r3, [r7, #12]
  19094. 80082ce: 681b ldr r3, [r3, #0]
  19095. 80082d0: 681a ldr r2, [r3, #0]
  19096. 80082d2: 68fb ldr r3, [r7, #12]
  19097. 80082d4: 681b ldr r3, [r3, #0]
  19098. 80082d6: f022 0201 bic.w r2, r2, #1
  19099. 80082da: 601a str r2, [r3, #0]
  19100. /* Configure the source, destination address and the data length */
  19101. DMA_SetConfig(hdma, SrcAddress, DstAddress, DataLength);
  19102. 80082dc: 683b ldr r3, [r7, #0]
  19103. 80082de: 687a ldr r2, [r7, #4]
  19104. 80082e0: 68b9 ldr r1, [r7, #8]
  19105. 80082e2: 68f8 ldr r0, [r7, #12]
  19106. 80082e4: f001 fe6a bl 8009fbc <DMA_SetConfig>
  19107. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  19108. 80082e8: 68fb ldr r3, [r7, #12]
  19109. 80082ea: 681b ldr r3, [r3, #0]
  19110. 80082ec: 4a34 ldr r2, [pc, #208] @ (80083c0 <HAL_DMA_Start_IT+0x1f4>)
  19111. 80082ee: 4293 cmp r3, r2
  19112. 80082f0: d04a beq.n 8008388 <HAL_DMA_Start_IT+0x1bc>
  19113. 80082f2: 68fb ldr r3, [r7, #12]
  19114. 80082f4: 681b ldr r3, [r3, #0]
  19115. 80082f6: 4a33 ldr r2, [pc, #204] @ (80083c4 <HAL_DMA_Start_IT+0x1f8>)
  19116. 80082f8: 4293 cmp r3, r2
  19117. 80082fa: d045 beq.n 8008388 <HAL_DMA_Start_IT+0x1bc>
  19118. 80082fc: 68fb ldr r3, [r7, #12]
  19119. 80082fe: 681b ldr r3, [r3, #0]
  19120. 8008300: 4a31 ldr r2, [pc, #196] @ (80083c8 <HAL_DMA_Start_IT+0x1fc>)
  19121. 8008302: 4293 cmp r3, r2
  19122. 8008304: d040 beq.n 8008388 <HAL_DMA_Start_IT+0x1bc>
  19123. 8008306: 68fb ldr r3, [r7, #12]
  19124. 8008308: 681b ldr r3, [r3, #0]
  19125. 800830a: 4a30 ldr r2, [pc, #192] @ (80083cc <HAL_DMA_Start_IT+0x200>)
  19126. 800830c: 4293 cmp r3, r2
  19127. 800830e: d03b beq.n 8008388 <HAL_DMA_Start_IT+0x1bc>
  19128. 8008310: 68fb ldr r3, [r7, #12]
  19129. 8008312: 681b ldr r3, [r3, #0]
  19130. 8008314: 4a2e ldr r2, [pc, #184] @ (80083d0 <HAL_DMA_Start_IT+0x204>)
  19131. 8008316: 4293 cmp r3, r2
  19132. 8008318: d036 beq.n 8008388 <HAL_DMA_Start_IT+0x1bc>
  19133. 800831a: 68fb ldr r3, [r7, #12]
  19134. 800831c: 681b ldr r3, [r3, #0]
  19135. 800831e: 4a2d ldr r2, [pc, #180] @ (80083d4 <HAL_DMA_Start_IT+0x208>)
  19136. 8008320: 4293 cmp r3, r2
  19137. 8008322: d031 beq.n 8008388 <HAL_DMA_Start_IT+0x1bc>
  19138. 8008324: 68fb ldr r3, [r7, #12]
  19139. 8008326: 681b ldr r3, [r3, #0]
  19140. 8008328: 4a2b ldr r2, [pc, #172] @ (80083d8 <HAL_DMA_Start_IT+0x20c>)
  19141. 800832a: 4293 cmp r3, r2
  19142. 800832c: d02c beq.n 8008388 <HAL_DMA_Start_IT+0x1bc>
  19143. 800832e: 68fb ldr r3, [r7, #12]
  19144. 8008330: 681b ldr r3, [r3, #0]
  19145. 8008332: 4a2a ldr r2, [pc, #168] @ (80083dc <HAL_DMA_Start_IT+0x210>)
  19146. 8008334: 4293 cmp r3, r2
  19147. 8008336: d027 beq.n 8008388 <HAL_DMA_Start_IT+0x1bc>
  19148. 8008338: 68fb ldr r3, [r7, #12]
  19149. 800833a: 681b ldr r3, [r3, #0]
  19150. 800833c: 4a28 ldr r2, [pc, #160] @ (80083e0 <HAL_DMA_Start_IT+0x214>)
  19151. 800833e: 4293 cmp r3, r2
  19152. 8008340: d022 beq.n 8008388 <HAL_DMA_Start_IT+0x1bc>
  19153. 8008342: 68fb ldr r3, [r7, #12]
  19154. 8008344: 681b ldr r3, [r3, #0]
  19155. 8008346: 4a27 ldr r2, [pc, #156] @ (80083e4 <HAL_DMA_Start_IT+0x218>)
  19156. 8008348: 4293 cmp r3, r2
  19157. 800834a: d01d beq.n 8008388 <HAL_DMA_Start_IT+0x1bc>
  19158. 800834c: 68fb ldr r3, [r7, #12]
  19159. 800834e: 681b ldr r3, [r3, #0]
  19160. 8008350: 4a25 ldr r2, [pc, #148] @ (80083e8 <HAL_DMA_Start_IT+0x21c>)
  19161. 8008352: 4293 cmp r3, r2
  19162. 8008354: d018 beq.n 8008388 <HAL_DMA_Start_IT+0x1bc>
  19163. 8008356: 68fb ldr r3, [r7, #12]
  19164. 8008358: 681b ldr r3, [r3, #0]
  19165. 800835a: 4a24 ldr r2, [pc, #144] @ (80083ec <HAL_DMA_Start_IT+0x220>)
  19166. 800835c: 4293 cmp r3, r2
  19167. 800835e: d013 beq.n 8008388 <HAL_DMA_Start_IT+0x1bc>
  19168. 8008360: 68fb ldr r3, [r7, #12]
  19169. 8008362: 681b ldr r3, [r3, #0]
  19170. 8008364: 4a22 ldr r2, [pc, #136] @ (80083f0 <HAL_DMA_Start_IT+0x224>)
  19171. 8008366: 4293 cmp r3, r2
  19172. 8008368: d00e beq.n 8008388 <HAL_DMA_Start_IT+0x1bc>
  19173. 800836a: 68fb ldr r3, [r7, #12]
  19174. 800836c: 681b ldr r3, [r3, #0]
  19175. 800836e: 4a21 ldr r2, [pc, #132] @ (80083f4 <HAL_DMA_Start_IT+0x228>)
  19176. 8008370: 4293 cmp r3, r2
  19177. 8008372: d009 beq.n 8008388 <HAL_DMA_Start_IT+0x1bc>
  19178. 8008374: 68fb ldr r3, [r7, #12]
  19179. 8008376: 681b ldr r3, [r3, #0]
  19180. 8008378: 4a1f ldr r2, [pc, #124] @ (80083f8 <HAL_DMA_Start_IT+0x22c>)
  19181. 800837a: 4293 cmp r3, r2
  19182. 800837c: d004 beq.n 8008388 <HAL_DMA_Start_IT+0x1bc>
  19183. 800837e: 68fb ldr r3, [r7, #12]
  19184. 8008380: 681b ldr r3, [r3, #0]
  19185. 8008382: 4a1e ldr r2, [pc, #120] @ (80083fc <HAL_DMA_Start_IT+0x230>)
  19186. 8008384: 4293 cmp r3, r2
  19187. 8008386: d101 bne.n 800838c <HAL_DMA_Start_IT+0x1c0>
  19188. 8008388: 2301 movs r3, #1
  19189. 800838a: e000 b.n 800838e <HAL_DMA_Start_IT+0x1c2>
  19190. 800838c: 2300 movs r3, #0
  19191. 800838e: 2b00 cmp r3, #0
  19192. 8008390: d036 beq.n 8008400 <HAL_DMA_Start_IT+0x234>
  19193. {
  19194. /* Enable Common interrupts*/
  19195. MODIFY_REG(((DMA_Stream_TypeDef *)hdma->Instance)->CR, (DMA_IT_TC | DMA_IT_TE | DMA_IT_DME | DMA_IT_HT), (DMA_IT_TC | DMA_IT_TE | DMA_IT_DME));
  19196. 8008392: 68fb ldr r3, [r7, #12]
  19197. 8008394: 681b ldr r3, [r3, #0]
  19198. 8008396: 681b ldr r3, [r3, #0]
  19199. 8008398: f023 021e bic.w r2, r3, #30
  19200. 800839c: 68fb ldr r3, [r7, #12]
  19201. 800839e: 681b ldr r3, [r3, #0]
  19202. 80083a0: f042 0216 orr.w r2, r2, #22
  19203. 80083a4: 601a str r2, [r3, #0]
  19204. if(hdma->XferHalfCpltCallback != NULL)
  19205. 80083a6: 68fb ldr r3, [r7, #12]
  19206. 80083a8: 6c1b ldr r3, [r3, #64] @ 0x40
  19207. 80083aa: 2b00 cmp r3, #0
  19208. 80083ac: d03e beq.n 800842c <HAL_DMA_Start_IT+0x260>
  19209. {
  19210. /* Enable Half Transfer IT if corresponding Callback is set */
  19211. ((DMA_Stream_TypeDef *)hdma->Instance)->CR |= DMA_IT_HT;
  19212. 80083ae: 68fb ldr r3, [r7, #12]
  19213. 80083b0: 681b ldr r3, [r3, #0]
  19214. 80083b2: 681a ldr r2, [r3, #0]
  19215. 80083b4: 68fb ldr r3, [r7, #12]
  19216. 80083b6: 681b ldr r3, [r3, #0]
  19217. 80083b8: f042 0208 orr.w r2, r2, #8
  19218. 80083bc: 601a str r2, [r3, #0]
  19219. 80083be: e035 b.n 800842c <HAL_DMA_Start_IT+0x260>
  19220. 80083c0: 40020010 .word 0x40020010
  19221. 80083c4: 40020028 .word 0x40020028
  19222. 80083c8: 40020040 .word 0x40020040
  19223. 80083cc: 40020058 .word 0x40020058
  19224. 80083d0: 40020070 .word 0x40020070
  19225. 80083d4: 40020088 .word 0x40020088
  19226. 80083d8: 400200a0 .word 0x400200a0
  19227. 80083dc: 400200b8 .word 0x400200b8
  19228. 80083e0: 40020410 .word 0x40020410
  19229. 80083e4: 40020428 .word 0x40020428
  19230. 80083e8: 40020440 .word 0x40020440
  19231. 80083ec: 40020458 .word 0x40020458
  19232. 80083f0: 40020470 .word 0x40020470
  19233. 80083f4: 40020488 .word 0x40020488
  19234. 80083f8: 400204a0 .word 0x400204a0
  19235. 80083fc: 400204b8 .word 0x400204b8
  19236. }
  19237. }
  19238. else /* BDMA channel */
  19239. {
  19240. /* Enable Common interrupts */
  19241. MODIFY_REG(((BDMA_Channel_TypeDef *)hdma->Instance)->CCR, (BDMA_CCR_TCIE | BDMA_CCR_HTIE | BDMA_CCR_TEIE), (BDMA_CCR_TCIE | BDMA_CCR_TEIE));
  19242. 8008400: 68fb ldr r3, [r7, #12]
  19243. 8008402: 681b ldr r3, [r3, #0]
  19244. 8008404: 681b ldr r3, [r3, #0]
  19245. 8008406: f023 020e bic.w r2, r3, #14
  19246. 800840a: 68fb ldr r3, [r7, #12]
  19247. 800840c: 681b ldr r3, [r3, #0]
  19248. 800840e: f042 020a orr.w r2, r2, #10
  19249. 8008412: 601a str r2, [r3, #0]
  19250. if(hdma->XferHalfCpltCallback != NULL)
  19251. 8008414: 68fb ldr r3, [r7, #12]
  19252. 8008416: 6c1b ldr r3, [r3, #64] @ 0x40
  19253. 8008418: 2b00 cmp r3, #0
  19254. 800841a: d007 beq.n 800842c <HAL_DMA_Start_IT+0x260>
  19255. {
  19256. /*Enable Half Transfer IT if corresponding Callback is set */
  19257. ((BDMA_Channel_TypeDef *)hdma->Instance)->CCR |= BDMA_CCR_HTIE;
  19258. 800841c: 68fb ldr r3, [r7, #12]
  19259. 800841e: 681b ldr r3, [r3, #0]
  19260. 8008420: 681a ldr r2, [r3, #0]
  19261. 8008422: 68fb ldr r3, [r7, #12]
  19262. 8008424: 681b ldr r3, [r3, #0]
  19263. 8008426: f042 0204 orr.w r2, r2, #4
  19264. 800842a: 601a str r2, [r3, #0]
  19265. }
  19266. }
  19267. if(IS_DMA_DMAMUX_ALL_INSTANCE(hdma->Instance) != 0U) /* No DMAMUX available for BDMA1 */
  19268. 800842c: 68fb ldr r3, [r7, #12]
  19269. 800842e: 681b ldr r3, [r3, #0]
  19270. 8008430: 4a83 ldr r2, [pc, #524] @ (8008640 <HAL_DMA_Start_IT+0x474>)
  19271. 8008432: 4293 cmp r3, r2
  19272. 8008434: d072 beq.n 800851c <HAL_DMA_Start_IT+0x350>
  19273. 8008436: 68fb ldr r3, [r7, #12]
  19274. 8008438: 681b ldr r3, [r3, #0]
  19275. 800843a: 4a82 ldr r2, [pc, #520] @ (8008644 <HAL_DMA_Start_IT+0x478>)
  19276. 800843c: 4293 cmp r3, r2
  19277. 800843e: d06d beq.n 800851c <HAL_DMA_Start_IT+0x350>
  19278. 8008440: 68fb ldr r3, [r7, #12]
  19279. 8008442: 681b ldr r3, [r3, #0]
  19280. 8008444: 4a80 ldr r2, [pc, #512] @ (8008648 <HAL_DMA_Start_IT+0x47c>)
  19281. 8008446: 4293 cmp r3, r2
  19282. 8008448: d068 beq.n 800851c <HAL_DMA_Start_IT+0x350>
  19283. 800844a: 68fb ldr r3, [r7, #12]
  19284. 800844c: 681b ldr r3, [r3, #0]
  19285. 800844e: 4a7f ldr r2, [pc, #508] @ (800864c <HAL_DMA_Start_IT+0x480>)
  19286. 8008450: 4293 cmp r3, r2
  19287. 8008452: d063 beq.n 800851c <HAL_DMA_Start_IT+0x350>
  19288. 8008454: 68fb ldr r3, [r7, #12]
  19289. 8008456: 681b ldr r3, [r3, #0]
  19290. 8008458: 4a7d ldr r2, [pc, #500] @ (8008650 <HAL_DMA_Start_IT+0x484>)
  19291. 800845a: 4293 cmp r3, r2
  19292. 800845c: d05e beq.n 800851c <HAL_DMA_Start_IT+0x350>
  19293. 800845e: 68fb ldr r3, [r7, #12]
  19294. 8008460: 681b ldr r3, [r3, #0]
  19295. 8008462: 4a7c ldr r2, [pc, #496] @ (8008654 <HAL_DMA_Start_IT+0x488>)
  19296. 8008464: 4293 cmp r3, r2
  19297. 8008466: d059 beq.n 800851c <HAL_DMA_Start_IT+0x350>
  19298. 8008468: 68fb ldr r3, [r7, #12]
  19299. 800846a: 681b ldr r3, [r3, #0]
  19300. 800846c: 4a7a ldr r2, [pc, #488] @ (8008658 <HAL_DMA_Start_IT+0x48c>)
  19301. 800846e: 4293 cmp r3, r2
  19302. 8008470: d054 beq.n 800851c <HAL_DMA_Start_IT+0x350>
  19303. 8008472: 68fb ldr r3, [r7, #12]
  19304. 8008474: 681b ldr r3, [r3, #0]
  19305. 8008476: 4a79 ldr r2, [pc, #484] @ (800865c <HAL_DMA_Start_IT+0x490>)
  19306. 8008478: 4293 cmp r3, r2
  19307. 800847a: d04f beq.n 800851c <HAL_DMA_Start_IT+0x350>
  19308. 800847c: 68fb ldr r3, [r7, #12]
  19309. 800847e: 681b ldr r3, [r3, #0]
  19310. 8008480: 4a77 ldr r2, [pc, #476] @ (8008660 <HAL_DMA_Start_IT+0x494>)
  19311. 8008482: 4293 cmp r3, r2
  19312. 8008484: d04a beq.n 800851c <HAL_DMA_Start_IT+0x350>
  19313. 8008486: 68fb ldr r3, [r7, #12]
  19314. 8008488: 681b ldr r3, [r3, #0]
  19315. 800848a: 4a76 ldr r2, [pc, #472] @ (8008664 <HAL_DMA_Start_IT+0x498>)
  19316. 800848c: 4293 cmp r3, r2
  19317. 800848e: d045 beq.n 800851c <HAL_DMA_Start_IT+0x350>
  19318. 8008490: 68fb ldr r3, [r7, #12]
  19319. 8008492: 681b ldr r3, [r3, #0]
  19320. 8008494: 4a74 ldr r2, [pc, #464] @ (8008668 <HAL_DMA_Start_IT+0x49c>)
  19321. 8008496: 4293 cmp r3, r2
  19322. 8008498: d040 beq.n 800851c <HAL_DMA_Start_IT+0x350>
  19323. 800849a: 68fb ldr r3, [r7, #12]
  19324. 800849c: 681b ldr r3, [r3, #0]
  19325. 800849e: 4a73 ldr r2, [pc, #460] @ (800866c <HAL_DMA_Start_IT+0x4a0>)
  19326. 80084a0: 4293 cmp r3, r2
  19327. 80084a2: d03b beq.n 800851c <HAL_DMA_Start_IT+0x350>
  19328. 80084a4: 68fb ldr r3, [r7, #12]
  19329. 80084a6: 681b ldr r3, [r3, #0]
  19330. 80084a8: 4a71 ldr r2, [pc, #452] @ (8008670 <HAL_DMA_Start_IT+0x4a4>)
  19331. 80084aa: 4293 cmp r3, r2
  19332. 80084ac: d036 beq.n 800851c <HAL_DMA_Start_IT+0x350>
  19333. 80084ae: 68fb ldr r3, [r7, #12]
  19334. 80084b0: 681b ldr r3, [r3, #0]
  19335. 80084b2: 4a70 ldr r2, [pc, #448] @ (8008674 <HAL_DMA_Start_IT+0x4a8>)
  19336. 80084b4: 4293 cmp r3, r2
  19337. 80084b6: d031 beq.n 800851c <HAL_DMA_Start_IT+0x350>
  19338. 80084b8: 68fb ldr r3, [r7, #12]
  19339. 80084ba: 681b ldr r3, [r3, #0]
  19340. 80084bc: 4a6e ldr r2, [pc, #440] @ (8008678 <HAL_DMA_Start_IT+0x4ac>)
  19341. 80084be: 4293 cmp r3, r2
  19342. 80084c0: d02c beq.n 800851c <HAL_DMA_Start_IT+0x350>
  19343. 80084c2: 68fb ldr r3, [r7, #12]
  19344. 80084c4: 681b ldr r3, [r3, #0]
  19345. 80084c6: 4a6d ldr r2, [pc, #436] @ (800867c <HAL_DMA_Start_IT+0x4b0>)
  19346. 80084c8: 4293 cmp r3, r2
  19347. 80084ca: d027 beq.n 800851c <HAL_DMA_Start_IT+0x350>
  19348. 80084cc: 68fb ldr r3, [r7, #12]
  19349. 80084ce: 681b ldr r3, [r3, #0]
  19350. 80084d0: 4a6b ldr r2, [pc, #428] @ (8008680 <HAL_DMA_Start_IT+0x4b4>)
  19351. 80084d2: 4293 cmp r3, r2
  19352. 80084d4: d022 beq.n 800851c <HAL_DMA_Start_IT+0x350>
  19353. 80084d6: 68fb ldr r3, [r7, #12]
  19354. 80084d8: 681b ldr r3, [r3, #0]
  19355. 80084da: 4a6a ldr r2, [pc, #424] @ (8008684 <HAL_DMA_Start_IT+0x4b8>)
  19356. 80084dc: 4293 cmp r3, r2
  19357. 80084de: d01d beq.n 800851c <HAL_DMA_Start_IT+0x350>
  19358. 80084e0: 68fb ldr r3, [r7, #12]
  19359. 80084e2: 681b ldr r3, [r3, #0]
  19360. 80084e4: 4a68 ldr r2, [pc, #416] @ (8008688 <HAL_DMA_Start_IT+0x4bc>)
  19361. 80084e6: 4293 cmp r3, r2
  19362. 80084e8: d018 beq.n 800851c <HAL_DMA_Start_IT+0x350>
  19363. 80084ea: 68fb ldr r3, [r7, #12]
  19364. 80084ec: 681b ldr r3, [r3, #0]
  19365. 80084ee: 4a67 ldr r2, [pc, #412] @ (800868c <HAL_DMA_Start_IT+0x4c0>)
  19366. 80084f0: 4293 cmp r3, r2
  19367. 80084f2: d013 beq.n 800851c <HAL_DMA_Start_IT+0x350>
  19368. 80084f4: 68fb ldr r3, [r7, #12]
  19369. 80084f6: 681b ldr r3, [r3, #0]
  19370. 80084f8: 4a65 ldr r2, [pc, #404] @ (8008690 <HAL_DMA_Start_IT+0x4c4>)
  19371. 80084fa: 4293 cmp r3, r2
  19372. 80084fc: d00e beq.n 800851c <HAL_DMA_Start_IT+0x350>
  19373. 80084fe: 68fb ldr r3, [r7, #12]
  19374. 8008500: 681b ldr r3, [r3, #0]
  19375. 8008502: 4a64 ldr r2, [pc, #400] @ (8008694 <HAL_DMA_Start_IT+0x4c8>)
  19376. 8008504: 4293 cmp r3, r2
  19377. 8008506: d009 beq.n 800851c <HAL_DMA_Start_IT+0x350>
  19378. 8008508: 68fb ldr r3, [r7, #12]
  19379. 800850a: 681b ldr r3, [r3, #0]
  19380. 800850c: 4a62 ldr r2, [pc, #392] @ (8008698 <HAL_DMA_Start_IT+0x4cc>)
  19381. 800850e: 4293 cmp r3, r2
  19382. 8008510: d004 beq.n 800851c <HAL_DMA_Start_IT+0x350>
  19383. 8008512: 68fb ldr r3, [r7, #12]
  19384. 8008514: 681b ldr r3, [r3, #0]
  19385. 8008516: 4a61 ldr r2, [pc, #388] @ (800869c <HAL_DMA_Start_IT+0x4d0>)
  19386. 8008518: 4293 cmp r3, r2
  19387. 800851a: d101 bne.n 8008520 <HAL_DMA_Start_IT+0x354>
  19388. 800851c: 2301 movs r3, #1
  19389. 800851e: e000 b.n 8008522 <HAL_DMA_Start_IT+0x356>
  19390. 8008520: 2300 movs r3, #0
  19391. 8008522: 2b00 cmp r3, #0
  19392. 8008524: d01a beq.n 800855c <HAL_DMA_Start_IT+0x390>
  19393. {
  19394. /* Check if DMAMUX Synchronization is enabled */
  19395. if((hdma->DMAmuxChannel->CCR & DMAMUX_CxCR_SE) != 0U)
  19396. 8008526: 68fb ldr r3, [r7, #12]
  19397. 8008528: 6e1b ldr r3, [r3, #96] @ 0x60
  19398. 800852a: 681b ldr r3, [r3, #0]
  19399. 800852c: f403 3380 and.w r3, r3, #65536 @ 0x10000
  19400. 8008530: 2b00 cmp r3, #0
  19401. 8008532: d007 beq.n 8008544 <HAL_DMA_Start_IT+0x378>
  19402. {
  19403. /* Enable DMAMUX sync overrun IT*/
  19404. hdma->DMAmuxChannel->CCR |= DMAMUX_CxCR_SOIE;
  19405. 8008534: 68fb ldr r3, [r7, #12]
  19406. 8008536: 6e1b ldr r3, [r3, #96] @ 0x60
  19407. 8008538: 681a ldr r2, [r3, #0]
  19408. 800853a: 68fb ldr r3, [r7, #12]
  19409. 800853c: 6e1b ldr r3, [r3, #96] @ 0x60
  19410. 800853e: f442 7280 orr.w r2, r2, #256 @ 0x100
  19411. 8008542: 601a str r2, [r3, #0]
  19412. }
  19413. if(hdma->DMAmuxRequestGen != 0U)
  19414. 8008544: 68fb ldr r3, [r7, #12]
  19415. 8008546: 6edb ldr r3, [r3, #108] @ 0x6c
  19416. 8008548: 2b00 cmp r3, #0
  19417. 800854a: d007 beq.n 800855c <HAL_DMA_Start_IT+0x390>
  19418. {
  19419. /* if using DMAMUX request generator, enable the DMAMUX request generator overrun IT*/
  19420. /* enable the request gen overrun IT */
  19421. hdma->DMAmuxRequestGen->RGCR |= DMAMUX_RGxCR_OIE;
  19422. 800854c: 68fb ldr r3, [r7, #12]
  19423. 800854e: 6edb ldr r3, [r3, #108] @ 0x6c
  19424. 8008550: 681a ldr r2, [r3, #0]
  19425. 8008552: 68fb ldr r3, [r7, #12]
  19426. 8008554: 6edb ldr r3, [r3, #108] @ 0x6c
  19427. 8008556: f442 7280 orr.w r2, r2, #256 @ 0x100
  19428. 800855a: 601a str r2, [r3, #0]
  19429. }
  19430. }
  19431. /* Enable the Peripheral */
  19432. __HAL_DMA_ENABLE(hdma);
  19433. 800855c: 68fb ldr r3, [r7, #12]
  19434. 800855e: 681b ldr r3, [r3, #0]
  19435. 8008560: 4a37 ldr r2, [pc, #220] @ (8008640 <HAL_DMA_Start_IT+0x474>)
  19436. 8008562: 4293 cmp r3, r2
  19437. 8008564: d04a beq.n 80085fc <HAL_DMA_Start_IT+0x430>
  19438. 8008566: 68fb ldr r3, [r7, #12]
  19439. 8008568: 681b ldr r3, [r3, #0]
  19440. 800856a: 4a36 ldr r2, [pc, #216] @ (8008644 <HAL_DMA_Start_IT+0x478>)
  19441. 800856c: 4293 cmp r3, r2
  19442. 800856e: d045 beq.n 80085fc <HAL_DMA_Start_IT+0x430>
  19443. 8008570: 68fb ldr r3, [r7, #12]
  19444. 8008572: 681b ldr r3, [r3, #0]
  19445. 8008574: 4a34 ldr r2, [pc, #208] @ (8008648 <HAL_DMA_Start_IT+0x47c>)
  19446. 8008576: 4293 cmp r3, r2
  19447. 8008578: d040 beq.n 80085fc <HAL_DMA_Start_IT+0x430>
  19448. 800857a: 68fb ldr r3, [r7, #12]
  19449. 800857c: 681b ldr r3, [r3, #0]
  19450. 800857e: 4a33 ldr r2, [pc, #204] @ (800864c <HAL_DMA_Start_IT+0x480>)
  19451. 8008580: 4293 cmp r3, r2
  19452. 8008582: d03b beq.n 80085fc <HAL_DMA_Start_IT+0x430>
  19453. 8008584: 68fb ldr r3, [r7, #12]
  19454. 8008586: 681b ldr r3, [r3, #0]
  19455. 8008588: 4a31 ldr r2, [pc, #196] @ (8008650 <HAL_DMA_Start_IT+0x484>)
  19456. 800858a: 4293 cmp r3, r2
  19457. 800858c: d036 beq.n 80085fc <HAL_DMA_Start_IT+0x430>
  19458. 800858e: 68fb ldr r3, [r7, #12]
  19459. 8008590: 681b ldr r3, [r3, #0]
  19460. 8008592: 4a30 ldr r2, [pc, #192] @ (8008654 <HAL_DMA_Start_IT+0x488>)
  19461. 8008594: 4293 cmp r3, r2
  19462. 8008596: d031 beq.n 80085fc <HAL_DMA_Start_IT+0x430>
  19463. 8008598: 68fb ldr r3, [r7, #12]
  19464. 800859a: 681b ldr r3, [r3, #0]
  19465. 800859c: 4a2e ldr r2, [pc, #184] @ (8008658 <HAL_DMA_Start_IT+0x48c>)
  19466. 800859e: 4293 cmp r3, r2
  19467. 80085a0: d02c beq.n 80085fc <HAL_DMA_Start_IT+0x430>
  19468. 80085a2: 68fb ldr r3, [r7, #12]
  19469. 80085a4: 681b ldr r3, [r3, #0]
  19470. 80085a6: 4a2d ldr r2, [pc, #180] @ (800865c <HAL_DMA_Start_IT+0x490>)
  19471. 80085a8: 4293 cmp r3, r2
  19472. 80085aa: d027 beq.n 80085fc <HAL_DMA_Start_IT+0x430>
  19473. 80085ac: 68fb ldr r3, [r7, #12]
  19474. 80085ae: 681b ldr r3, [r3, #0]
  19475. 80085b0: 4a2b ldr r2, [pc, #172] @ (8008660 <HAL_DMA_Start_IT+0x494>)
  19476. 80085b2: 4293 cmp r3, r2
  19477. 80085b4: d022 beq.n 80085fc <HAL_DMA_Start_IT+0x430>
  19478. 80085b6: 68fb ldr r3, [r7, #12]
  19479. 80085b8: 681b ldr r3, [r3, #0]
  19480. 80085ba: 4a2a ldr r2, [pc, #168] @ (8008664 <HAL_DMA_Start_IT+0x498>)
  19481. 80085bc: 4293 cmp r3, r2
  19482. 80085be: d01d beq.n 80085fc <HAL_DMA_Start_IT+0x430>
  19483. 80085c0: 68fb ldr r3, [r7, #12]
  19484. 80085c2: 681b ldr r3, [r3, #0]
  19485. 80085c4: 4a28 ldr r2, [pc, #160] @ (8008668 <HAL_DMA_Start_IT+0x49c>)
  19486. 80085c6: 4293 cmp r3, r2
  19487. 80085c8: d018 beq.n 80085fc <HAL_DMA_Start_IT+0x430>
  19488. 80085ca: 68fb ldr r3, [r7, #12]
  19489. 80085cc: 681b ldr r3, [r3, #0]
  19490. 80085ce: 4a27 ldr r2, [pc, #156] @ (800866c <HAL_DMA_Start_IT+0x4a0>)
  19491. 80085d0: 4293 cmp r3, r2
  19492. 80085d2: d013 beq.n 80085fc <HAL_DMA_Start_IT+0x430>
  19493. 80085d4: 68fb ldr r3, [r7, #12]
  19494. 80085d6: 681b ldr r3, [r3, #0]
  19495. 80085d8: 4a25 ldr r2, [pc, #148] @ (8008670 <HAL_DMA_Start_IT+0x4a4>)
  19496. 80085da: 4293 cmp r3, r2
  19497. 80085dc: d00e beq.n 80085fc <HAL_DMA_Start_IT+0x430>
  19498. 80085de: 68fb ldr r3, [r7, #12]
  19499. 80085e0: 681b ldr r3, [r3, #0]
  19500. 80085e2: 4a24 ldr r2, [pc, #144] @ (8008674 <HAL_DMA_Start_IT+0x4a8>)
  19501. 80085e4: 4293 cmp r3, r2
  19502. 80085e6: d009 beq.n 80085fc <HAL_DMA_Start_IT+0x430>
  19503. 80085e8: 68fb ldr r3, [r7, #12]
  19504. 80085ea: 681b ldr r3, [r3, #0]
  19505. 80085ec: 4a22 ldr r2, [pc, #136] @ (8008678 <HAL_DMA_Start_IT+0x4ac>)
  19506. 80085ee: 4293 cmp r3, r2
  19507. 80085f0: d004 beq.n 80085fc <HAL_DMA_Start_IT+0x430>
  19508. 80085f2: 68fb ldr r3, [r7, #12]
  19509. 80085f4: 681b ldr r3, [r3, #0]
  19510. 80085f6: 4a21 ldr r2, [pc, #132] @ (800867c <HAL_DMA_Start_IT+0x4b0>)
  19511. 80085f8: 4293 cmp r3, r2
  19512. 80085fa: d108 bne.n 800860e <HAL_DMA_Start_IT+0x442>
  19513. 80085fc: 68fb ldr r3, [r7, #12]
  19514. 80085fe: 681b ldr r3, [r3, #0]
  19515. 8008600: 681a ldr r2, [r3, #0]
  19516. 8008602: 68fb ldr r3, [r7, #12]
  19517. 8008604: 681b ldr r3, [r3, #0]
  19518. 8008606: f042 0201 orr.w r2, r2, #1
  19519. 800860a: 601a str r2, [r3, #0]
  19520. 800860c: e012 b.n 8008634 <HAL_DMA_Start_IT+0x468>
  19521. 800860e: 68fb ldr r3, [r7, #12]
  19522. 8008610: 681b ldr r3, [r3, #0]
  19523. 8008612: 681a ldr r2, [r3, #0]
  19524. 8008614: 68fb ldr r3, [r7, #12]
  19525. 8008616: 681b ldr r3, [r3, #0]
  19526. 8008618: f042 0201 orr.w r2, r2, #1
  19527. 800861c: 601a str r2, [r3, #0]
  19528. 800861e: e009 b.n 8008634 <HAL_DMA_Start_IT+0x468>
  19529. }
  19530. else
  19531. {
  19532. /* Set the error code to busy */
  19533. hdma->ErrorCode = HAL_DMA_ERROR_BUSY;
  19534. 8008620: 68fb ldr r3, [r7, #12]
  19535. 8008622: f44f 6200 mov.w r2, #2048 @ 0x800
  19536. 8008626: 655a str r2, [r3, #84] @ 0x54
  19537. /* Process unlocked */
  19538. __HAL_UNLOCK(hdma);
  19539. 8008628: 68fb ldr r3, [r7, #12]
  19540. 800862a: 2200 movs r2, #0
  19541. 800862c: f883 2034 strb.w r2, [r3, #52] @ 0x34
  19542. /* Return error status */
  19543. status = HAL_ERROR;
  19544. 8008630: 2301 movs r3, #1
  19545. 8008632: 75fb strb r3, [r7, #23]
  19546. }
  19547. return status;
  19548. 8008634: 7dfb ldrb r3, [r7, #23]
  19549. }
  19550. 8008636: 4618 mov r0, r3
  19551. 8008638: 3718 adds r7, #24
  19552. 800863a: 46bd mov sp, r7
  19553. 800863c: bd80 pop {r7, pc}
  19554. 800863e: bf00 nop
  19555. 8008640: 40020010 .word 0x40020010
  19556. 8008644: 40020028 .word 0x40020028
  19557. 8008648: 40020040 .word 0x40020040
  19558. 800864c: 40020058 .word 0x40020058
  19559. 8008650: 40020070 .word 0x40020070
  19560. 8008654: 40020088 .word 0x40020088
  19561. 8008658: 400200a0 .word 0x400200a0
  19562. 800865c: 400200b8 .word 0x400200b8
  19563. 8008660: 40020410 .word 0x40020410
  19564. 8008664: 40020428 .word 0x40020428
  19565. 8008668: 40020440 .word 0x40020440
  19566. 800866c: 40020458 .word 0x40020458
  19567. 8008670: 40020470 .word 0x40020470
  19568. 8008674: 40020488 .word 0x40020488
  19569. 8008678: 400204a0 .word 0x400204a0
  19570. 800867c: 400204b8 .word 0x400204b8
  19571. 8008680: 58025408 .word 0x58025408
  19572. 8008684: 5802541c .word 0x5802541c
  19573. 8008688: 58025430 .word 0x58025430
  19574. 800868c: 58025444 .word 0x58025444
  19575. 8008690: 58025458 .word 0x58025458
  19576. 8008694: 5802546c .word 0x5802546c
  19577. 8008698: 58025480 .word 0x58025480
  19578. 800869c: 58025494 .word 0x58025494
  19579. 080086a0 <HAL_DMA_Abort>:
  19580. * and the Stream will be effectively disabled only after the transfer of
  19581. * this single data is finished.
  19582. * @retval HAL status
  19583. */
  19584. HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma)
  19585. {
  19586. 80086a0: b580 push {r7, lr}
  19587. 80086a2: b086 sub sp, #24
  19588. 80086a4: af00 add r7, sp, #0
  19589. 80086a6: 6078 str r0, [r7, #4]
  19590. /* calculate DMA base and stream number */
  19591. DMA_Base_Registers *regs_dma;
  19592. BDMA_Base_Registers *regs_bdma;
  19593. const __IO uint32_t *enableRegister;
  19594. uint32_t tickstart = HAL_GetTick();
  19595. 80086a8: f7fc fe98 bl 80053dc <HAL_GetTick>
  19596. 80086ac: 6138 str r0, [r7, #16]
  19597. /* Check the DMA peripheral handle */
  19598. if(hdma == NULL)
  19599. 80086ae: 687b ldr r3, [r7, #4]
  19600. 80086b0: 2b00 cmp r3, #0
  19601. 80086b2: d101 bne.n 80086b8 <HAL_DMA_Abort+0x18>
  19602. {
  19603. return HAL_ERROR;
  19604. 80086b4: 2301 movs r3, #1
  19605. 80086b6: e2dc b.n 8008c72 <HAL_DMA_Abort+0x5d2>
  19606. }
  19607. /* Check the DMA peripheral state */
  19608. if(hdma->State != HAL_DMA_STATE_BUSY)
  19609. 80086b8: 687b ldr r3, [r7, #4]
  19610. 80086ba: f893 3035 ldrb.w r3, [r3, #53] @ 0x35
  19611. 80086be: b2db uxtb r3, r3
  19612. 80086c0: 2b02 cmp r3, #2
  19613. 80086c2: d008 beq.n 80086d6 <HAL_DMA_Abort+0x36>
  19614. {
  19615. hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER;
  19616. 80086c4: 687b ldr r3, [r7, #4]
  19617. 80086c6: 2280 movs r2, #128 @ 0x80
  19618. 80086c8: 655a str r2, [r3, #84] @ 0x54
  19619. /* Process Unlocked */
  19620. __HAL_UNLOCK(hdma);
  19621. 80086ca: 687b ldr r3, [r7, #4]
  19622. 80086cc: 2200 movs r2, #0
  19623. 80086ce: f883 2034 strb.w r2, [r3, #52] @ 0x34
  19624. return HAL_ERROR;
  19625. 80086d2: 2301 movs r3, #1
  19626. 80086d4: e2cd b.n 8008c72 <HAL_DMA_Abort+0x5d2>
  19627. }
  19628. else
  19629. {
  19630. /* Disable all the transfer interrupts */
  19631. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  19632. 80086d6: 687b ldr r3, [r7, #4]
  19633. 80086d8: 681b ldr r3, [r3, #0]
  19634. 80086da: 4a76 ldr r2, [pc, #472] @ (80088b4 <HAL_DMA_Abort+0x214>)
  19635. 80086dc: 4293 cmp r3, r2
  19636. 80086de: d04a beq.n 8008776 <HAL_DMA_Abort+0xd6>
  19637. 80086e0: 687b ldr r3, [r7, #4]
  19638. 80086e2: 681b ldr r3, [r3, #0]
  19639. 80086e4: 4a74 ldr r2, [pc, #464] @ (80088b8 <HAL_DMA_Abort+0x218>)
  19640. 80086e6: 4293 cmp r3, r2
  19641. 80086e8: d045 beq.n 8008776 <HAL_DMA_Abort+0xd6>
  19642. 80086ea: 687b ldr r3, [r7, #4]
  19643. 80086ec: 681b ldr r3, [r3, #0]
  19644. 80086ee: 4a73 ldr r2, [pc, #460] @ (80088bc <HAL_DMA_Abort+0x21c>)
  19645. 80086f0: 4293 cmp r3, r2
  19646. 80086f2: d040 beq.n 8008776 <HAL_DMA_Abort+0xd6>
  19647. 80086f4: 687b ldr r3, [r7, #4]
  19648. 80086f6: 681b ldr r3, [r3, #0]
  19649. 80086f8: 4a71 ldr r2, [pc, #452] @ (80088c0 <HAL_DMA_Abort+0x220>)
  19650. 80086fa: 4293 cmp r3, r2
  19651. 80086fc: d03b beq.n 8008776 <HAL_DMA_Abort+0xd6>
  19652. 80086fe: 687b ldr r3, [r7, #4]
  19653. 8008700: 681b ldr r3, [r3, #0]
  19654. 8008702: 4a70 ldr r2, [pc, #448] @ (80088c4 <HAL_DMA_Abort+0x224>)
  19655. 8008704: 4293 cmp r3, r2
  19656. 8008706: d036 beq.n 8008776 <HAL_DMA_Abort+0xd6>
  19657. 8008708: 687b ldr r3, [r7, #4]
  19658. 800870a: 681b ldr r3, [r3, #0]
  19659. 800870c: 4a6e ldr r2, [pc, #440] @ (80088c8 <HAL_DMA_Abort+0x228>)
  19660. 800870e: 4293 cmp r3, r2
  19661. 8008710: d031 beq.n 8008776 <HAL_DMA_Abort+0xd6>
  19662. 8008712: 687b ldr r3, [r7, #4]
  19663. 8008714: 681b ldr r3, [r3, #0]
  19664. 8008716: 4a6d ldr r2, [pc, #436] @ (80088cc <HAL_DMA_Abort+0x22c>)
  19665. 8008718: 4293 cmp r3, r2
  19666. 800871a: d02c beq.n 8008776 <HAL_DMA_Abort+0xd6>
  19667. 800871c: 687b ldr r3, [r7, #4]
  19668. 800871e: 681b ldr r3, [r3, #0]
  19669. 8008720: 4a6b ldr r2, [pc, #428] @ (80088d0 <HAL_DMA_Abort+0x230>)
  19670. 8008722: 4293 cmp r3, r2
  19671. 8008724: d027 beq.n 8008776 <HAL_DMA_Abort+0xd6>
  19672. 8008726: 687b ldr r3, [r7, #4]
  19673. 8008728: 681b ldr r3, [r3, #0]
  19674. 800872a: 4a6a ldr r2, [pc, #424] @ (80088d4 <HAL_DMA_Abort+0x234>)
  19675. 800872c: 4293 cmp r3, r2
  19676. 800872e: d022 beq.n 8008776 <HAL_DMA_Abort+0xd6>
  19677. 8008730: 687b ldr r3, [r7, #4]
  19678. 8008732: 681b ldr r3, [r3, #0]
  19679. 8008734: 4a68 ldr r2, [pc, #416] @ (80088d8 <HAL_DMA_Abort+0x238>)
  19680. 8008736: 4293 cmp r3, r2
  19681. 8008738: d01d beq.n 8008776 <HAL_DMA_Abort+0xd6>
  19682. 800873a: 687b ldr r3, [r7, #4]
  19683. 800873c: 681b ldr r3, [r3, #0]
  19684. 800873e: 4a67 ldr r2, [pc, #412] @ (80088dc <HAL_DMA_Abort+0x23c>)
  19685. 8008740: 4293 cmp r3, r2
  19686. 8008742: d018 beq.n 8008776 <HAL_DMA_Abort+0xd6>
  19687. 8008744: 687b ldr r3, [r7, #4]
  19688. 8008746: 681b ldr r3, [r3, #0]
  19689. 8008748: 4a65 ldr r2, [pc, #404] @ (80088e0 <HAL_DMA_Abort+0x240>)
  19690. 800874a: 4293 cmp r3, r2
  19691. 800874c: d013 beq.n 8008776 <HAL_DMA_Abort+0xd6>
  19692. 800874e: 687b ldr r3, [r7, #4]
  19693. 8008750: 681b ldr r3, [r3, #0]
  19694. 8008752: 4a64 ldr r2, [pc, #400] @ (80088e4 <HAL_DMA_Abort+0x244>)
  19695. 8008754: 4293 cmp r3, r2
  19696. 8008756: d00e beq.n 8008776 <HAL_DMA_Abort+0xd6>
  19697. 8008758: 687b ldr r3, [r7, #4]
  19698. 800875a: 681b ldr r3, [r3, #0]
  19699. 800875c: 4a62 ldr r2, [pc, #392] @ (80088e8 <HAL_DMA_Abort+0x248>)
  19700. 800875e: 4293 cmp r3, r2
  19701. 8008760: d009 beq.n 8008776 <HAL_DMA_Abort+0xd6>
  19702. 8008762: 687b ldr r3, [r7, #4]
  19703. 8008764: 681b ldr r3, [r3, #0]
  19704. 8008766: 4a61 ldr r2, [pc, #388] @ (80088ec <HAL_DMA_Abort+0x24c>)
  19705. 8008768: 4293 cmp r3, r2
  19706. 800876a: d004 beq.n 8008776 <HAL_DMA_Abort+0xd6>
  19707. 800876c: 687b ldr r3, [r7, #4]
  19708. 800876e: 681b ldr r3, [r3, #0]
  19709. 8008770: 4a5f ldr r2, [pc, #380] @ (80088f0 <HAL_DMA_Abort+0x250>)
  19710. 8008772: 4293 cmp r3, r2
  19711. 8008774: d101 bne.n 800877a <HAL_DMA_Abort+0xda>
  19712. 8008776: 2301 movs r3, #1
  19713. 8008778: e000 b.n 800877c <HAL_DMA_Abort+0xdc>
  19714. 800877a: 2300 movs r3, #0
  19715. 800877c: 2b00 cmp r3, #0
  19716. 800877e: d013 beq.n 80087a8 <HAL_DMA_Abort+0x108>
  19717. {
  19718. /* Disable DMA All Interrupts */
  19719. ((DMA_Stream_TypeDef *)hdma->Instance)->CR &= ~(DMA_IT_TC | DMA_IT_TE | DMA_IT_DME | DMA_IT_HT);
  19720. 8008780: 687b ldr r3, [r7, #4]
  19721. 8008782: 681b ldr r3, [r3, #0]
  19722. 8008784: 681a ldr r2, [r3, #0]
  19723. 8008786: 687b ldr r3, [r7, #4]
  19724. 8008788: 681b ldr r3, [r3, #0]
  19725. 800878a: f022 021e bic.w r2, r2, #30
  19726. 800878e: 601a str r2, [r3, #0]
  19727. ((DMA_Stream_TypeDef *)hdma->Instance)->FCR &= ~(DMA_IT_FE);
  19728. 8008790: 687b ldr r3, [r7, #4]
  19729. 8008792: 681b ldr r3, [r3, #0]
  19730. 8008794: 695a ldr r2, [r3, #20]
  19731. 8008796: 687b ldr r3, [r7, #4]
  19732. 8008798: 681b ldr r3, [r3, #0]
  19733. 800879a: f022 0280 bic.w r2, r2, #128 @ 0x80
  19734. 800879e: 615a str r2, [r3, #20]
  19735. enableRegister = (__IO uint32_t *)(&(((DMA_Stream_TypeDef *)hdma->Instance)->CR));
  19736. 80087a0: 687b ldr r3, [r7, #4]
  19737. 80087a2: 681b ldr r3, [r3, #0]
  19738. 80087a4: 617b str r3, [r7, #20]
  19739. 80087a6: e00a b.n 80087be <HAL_DMA_Abort+0x11e>
  19740. }
  19741. else /* BDMA channel */
  19742. {
  19743. /* Disable DMA All Interrupts */
  19744. ((BDMA_Channel_TypeDef *)hdma->Instance)->CCR &= ~(BDMA_CCR_TCIE | BDMA_CCR_HTIE | BDMA_CCR_TEIE);
  19745. 80087a8: 687b ldr r3, [r7, #4]
  19746. 80087aa: 681b ldr r3, [r3, #0]
  19747. 80087ac: 681a ldr r2, [r3, #0]
  19748. 80087ae: 687b ldr r3, [r7, #4]
  19749. 80087b0: 681b ldr r3, [r3, #0]
  19750. 80087b2: f022 020e bic.w r2, r2, #14
  19751. 80087b6: 601a str r2, [r3, #0]
  19752. enableRegister = (__IO uint32_t *)(&(((BDMA_Channel_TypeDef *)hdma->Instance)->CCR));
  19753. 80087b8: 687b ldr r3, [r7, #4]
  19754. 80087ba: 681b ldr r3, [r3, #0]
  19755. 80087bc: 617b str r3, [r7, #20]
  19756. }
  19757. if(IS_DMA_DMAMUX_ALL_INSTANCE(hdma->Instance) != 0U) /* No DMAMUX available for BDMA1 */
  19758. 80087be: 687b ldr r3, [r7, #4]
  19759. 80087c0: 681b ldr r3, [r3, #0]
  19760. 80087c2: 4a3c ldr r2, [pc, #240] @ (80088b4 <HAL_DMA_Abort+0x214>)
  19761. 80087c4: 4293 cmp r3, r2
  19762. 80087c6: d072 beq.n 80088ae <HAL_DMA_Abort+0x20e>
  19763. 80087c8: 687b ldr r3, [r7, #4]
  19764. 80087ca: 681b ldr r3, [r3, #0]
  19765. 80087cc: 4a3a ldr r2, [pc, #232] @ (80088b8 <HAL_DMA_Abort+0x218>)
  19766. 80087ce: 4293 cmp r3, r2
  19767. 80087d0: d06d beq.n 80088ae <HAL_DMA_Abort+0x20e>
  19768. 80087d2: 687b ldr r3, [r7, #4]
  19769. 80087d4: 681b ldr r3, [r3, #0]
  19770. 80087d6: 4a39 ldr r2, [pc, #228] @ (80088bc <HAL_DMA_Abort+0x21c>)
  19771. 80087d8: 4293 cmp r3, r2
  19772. 80087da: d068 beq.n 80088ae <HAL_DMA_Abort+0x20e>
  19773. 80087dc: 687b ldr r3, [r7, #4]
  19774. 80087de: 681b ldr r3, [r3, #0]
  19775. 80087e0: 4a37 ldr r2, [pc, #220] @ (80088c0 <HAL_DMA_Abort+0x220>)
  19776. 80087e2: 4293 cmp r3, r2
  19777. 80087e4: d063 beq.n 80088ae <HAL_DMA_Abort+0x20e>
  19778. 80087e6: 687b ldr r3, [r7, #4]
  19779. 80087e8: 681b ldr r3, [r3, #0]
  19780. 80087ea: 4a36 ldr r2, [pc, #216] @ (80088c4 <HAL_DMA_Abort+0x224>)
  19781. 80087ec: 4293 cmp r3, r2
  19782. 80087ee: d05e beq.n 80088ae <HAL_DMA_Abort+0x20e>
  19783. 80087f0: 687b ldr r3, [r7, #4]
  19784. 80087f2: 681b ldr r3, [r3, #0]
  19785. 80087f4: 4a34 ldr r2, [pc, #208] @ (80088c8 <HAL_DMA_Abort+0x228>)
  19786. 80087f6: 4293 cmp r3, r2
  19787. 80087f8: d059 beq.n 80088ae <HAL_DMA_Abort+0x20e>
  19788. 80087fa: 687b ldr r3, [r7, #4]
  19789. 80087fc: 681b ldr r3, [r3, #0]
  19790. 80087fe: 4a33 ldr r2, [pc, #204] @ (80088cc <HAL_DMA_Abort+0x22c>)
  19791. 8008800: 4293 cmp r3, r2
  19792. 8008802: d054 beq.n 80088ae <HAL_DMA_Abort+0x20e>
  19793. 8008804: 687b ldr r3, [r7, #4]
  19794. 8008806: 681b ldr r3, [r3, #0]
  19795. 8008808: 4a31 ldr r2, [pc, #196] @ (80088d0 <HAL_DMA_Abort+0x230>)
  19796. 800880a: 4293 cmp r3, r2
  19797. 800880c: d04f beq.n 80088ae <HAL_DMA_Abort+0x20e>
  19798. 800880e: 687b ldr r3, [r7, #4]
  19799. 8008810: 681b ldr r3, [r3, #0]
  19800. 8008812: 4a30 ldr r2, [pc, #192] @ (80088d4 <HAL_DMA_Abort+0x234>)
  19801. 8008814: 4293 cmp r3, r2
  19802. 8008816: d04a beq.n 80088ae <HAL_DMA_Abort+0x20e>
  19803. 8008818: 687b ldr r3, [r7, #4]
  19804. 800881a: 681b ldr r3, [r3, #0]
  19805. 800881c: 4a2e ldr r2, [pc, #184] @ (80088d8 <HAL_DMA_Abort+0x238>)
  19806. 800881e: 4293 cmp r3, r2
  19807. 8008820: d045 beq.n 80088ae <HAL_DMA_Abort+0x20e>
  19808. 8008822: 687b ldr r3, [r7, #4]
  19809. 8008824: 681b ldr r3, [r3, #0]
  19810. 8008826: 4a2d ldr r2, [pc, #180] @ (80088dc <HAL_DMA_Abort+0x23c>)
  19811. 8008828: 4293 cmp r3, r2
  19812. 800882a: d040 beq.n 80088ae <HAL_DMA_Abort+0x20e>
  19813. 800882c: 687b ldr r3, [r7, #4]
  19814. 800882e: 681b ldr r3, [r3, #0]
  19815. 8008830: 4a2b ldr r2, [pc, #172] @ (80088e0 <HAL_DMA_Abort+0x240>)
  19816. 8008832: 4293 cmp r3, r2
  19817. 8008834: d03b beq.n 80088ae <HAL_DMA_Abort+0x20e>
  19818. 8008836: 687b ldr r3, [r7, #4]
  19819. 8008838: 681b ldr r3, [r3, #0]
  19820. 800883a: 4a2a ldr r2, [pc, #168] @ (80088e4 <HAL_DMA_Abort+0x244>)
  19821. 800883c: 4293 cmp r3, r2
  19822. 800883e: d036 beq.n 80088ae <HAL_DMA_Abort+0x20e>
  19823. 8008840: 687b ldr r3, [r7, #4]
  19824. 8008842: 681b ldr r3, [r3, #0]
  19825. 8008844: 4a28 ldr r2, [pc, #160] @ (80088e8 <HAL_DMA_Abort+0x248>)
  19826. 8008846: 4293 cmp r3, r2
  19827. 8008848: d031 beq.n 80088ae <HAL_DMA_Abort+0x20e>
  19828. 800884a: 687b ldr r3, [r7, #4]
  19829. 800884c: 681b ldr r3, [r3, #0]
  19830. 800884e: 4a27 ldr r2, [pc, #156] @ (80088ec <HAL_DMA_Abort+0x24c>)
  19831. 8008850: 4293 cmp r3, r2
  19832. 8008852: d02c beq.n 80088ae <HAL_DMA_Abort+0x20e>
  19833. 8008854: 687b ldr r3, [r7, #4]
  19834. 8008856: 681b ldr r3, [r3, #0]
  19835. 8008858: 4a25 ldr r2, [pc, #148] @ (80088f0 <HAL_DMA_Abort+0x250>)
  19836. 800885a: 4293 cmp r3, r2
  19837. 800885c: d027 beq.n 80088ae <HAL_DMA_Abort+0x20e>
  19838. 800885e: 687b ldr r3, [r7, #4]
  19839. 8008860: 681b ldr r3, [r3, #0]
  19840. 8008862: 4a24 ldr r2, [pc, #144] @ (80088f4 <HAL_DMA_Abort+0x254>)
  19841. 8008864: 4293 cmp r3, r2
  19842. 8008866: d022 beq.n 80088ae <HAL_DMA_Abort+0x20e>
  19843. 8008868: 687b ldr r3, [r7, #4]
  19844. 800886a: 681b ldr r3, [r3, #0]
  19845. 800886c: 4a22 ldr r2, [pc, #136] @ (80088f8 <HAL_DMA_Abort+0x258>)
  19846. 800886e: 4293 cmp r3, r2
  19847. 8008870: d01d beq.n 80088ae <HAL_DMA_Abort+0x20e>
  19848. 8008872: 687b ldr r3, [r7, #4]
  19849. 8008874: 681b ldr r3, [r3, #0]
  19850. 8008876: 4a21 ldr r2, [pc, #132] @ (80088fc <HAL_DMA_Abort+0x25c>)
  19851. 8008878: 4293 cmp r3, r2
  19852. 800887a: d018 beq.n 80088ae <HAL_DMA_Abort+0x20e>
  19853. 800887c: 687b ldr r3, [r7, #4]
  19854. 800887e: 681b ldr r3, [r3, #0]
  19855. 8008880: 4a1f ldr r2, [pc, #124] @ (8008900 <HAL_DMA_Abort+0x260>)
  19856. 8008882: 4293 cmp r3, r2
  19857. 8008884: d013 beq.n 80088ae <HAL_DMA_Abort+0x20e>
  19858. 8008886: 687b ldr r3, [r7, #4]
  19859. 8008888: 681b ldr r3, [r3, #0]
  19860. 800888a: 4a1e ldr r2, [pc, #120] @ (8008904 <HAL_DMA_Abort+0x264>)
  19861. 800888c: 4293 cmp r3, r2
  19862. 800888e: d00e beq.n 80088ae <HAL_DMA_Abort+0x20e>
  19863. 8008890: 687b ldr r3, [r7, #4]
  19864. 8008892: 681b ldr r3, [r3, #0]
  19865. 8008894: 4a1c ldr r2, [pc, #112] @ (8008908 <HAL_DMA_Abort+0x268>)
  19866. 8008896: 4293 cmp r3, r2
  19867. 8008898: d009 beq.n 80088ae <HAL_DMA_Abort+0x20e>
  19868. 800889a: 687b ldr r3, [r7, #4]
  19869. 800889c: 681b ldr r3, [r3, #0]
  19870. 800889e: 4a1b ldr r2, [pc, #108] @ (800890c <HAL_DMA_Abort+0x26c>)
  19871. 80088a0: 4293 cmp r3, r2
  19872. 80088a2: d004 beq.n 80088ae <HAL_DMA_Abort+0x20e>
  19873. 80088a4: 687b ldr r3, [r7, #4]
  19874. 80088a6: 681b ldr r3, [r3, #0]
  19875. 80088a8: 4a19 ldr r2, [pc, #100] @ (8008910 <HAL_DMA_Abort+0x270>)
  19876. 80088aa: 4293 cmp r3, r2
  19877. 80088ac: d132 bne.n 8008914 <HAL_DMA_Abort+0x274>
  19878. 80088ae: 2301 movs r3, #1
  19879. 80088b0: e031 b.n 8008916 <HAL_DMA_Abort+0x276>
  19880. 80088b2: bf00 nop
  19881. 80088b4: 40020010 .word 0x40020010
  19882. 80088b8: 40020028 .word 0x40020028
  19883. 80088bc: 40020040 .word 0x40020040
  19884. 80088c0: 40020058 .word 0x40020058
  19885. 80088c4: 40020070 .word 0x40020070
  19886. 80088c8: 40020088 .word 0x40020088
  19887. 80088cc: 400200a0 .word 0x400200a0
  19888. 80088d0: 400200b8 .word 0x400200b8
  19889. 80088d4: 40020410 .word 0x40020410
  19890. 80088d8: 40020428 .word 0x40020428
  19891. 80088dc: 40020440 .word 0x40020440
  19892. 80088e0: 40020458 .word 0x40020458
  19893. 80088e4: 40020470 .word 0x40020470
  19894. 80088e8: 40020488 .word 0x40020488
  19895. 80088ec: 400204a0 .word 0x400204a0
  19896. 80088f0: 400204b8 .word 0x400204b8
  19897. 80088f4: 58025408 .word 0x58025408
  19898. 80088f8: 5802541c .word 0x5802541c
  19899. 80088fc: 58025430 .word 0x58025430
  19900. 8008900: 58025444 .word 0x58025444
  19901. 8008904: 58025458 .word 0x58025458
  19902. 8008908: 5802546c .word 0x5802546c
  19903. 800890c: 58025480 .word 0x58025480
  19904. 8008910: 58025494 .word 0x58025494
  19905. 8008914: 2300 movs r3, #0
  19906. 8008916: 2b00 cmp r3, #0
  19907. 8008918: d007 beq.n 800892a <HAL_DMA_Abort+0x28a>
  19908. {
  19909. /* disable the DMAMUX sync overrun IT */
  19910. hdma->DMAmuxChannel->CCR &= ~DMAMUX_CxCR_SOIE;
  19911. 800891a: 687b ldr r3, [r7, #4]
  19912. 800891c: 6e1b ldr r3, [r3, #96] @ 0x60
  19913. 800891e: 681a ldr r2, [r3, #0]
  19914. 8008920: 687b ldr r3, [r7, #4]
  19915. 8008922: 6e1b ldr r3, [r3, #96] @ 0x60
  19916. 8008924: f422 7280 bic.w r2, r2, #256 @ 0x100
  19917. 8008928: 601a str r2, [r3, #0]
  19918. }
  19919. /* Disable the stream */
  19920. __HAL_DMA_DISABLE(hdma);
  19921. 800892a: 687b ldr r3, [r7, #4]
  19922. 800892c: 681b ldr r3, [r3, #0]
  19923. 800892e: 4a6d ldr r2, [pc, #436] @ (8008ae4 <HAL_DMA_Abort+0x444>)
  19924. 8008930: 4293 cmp r3, r2
  19925. 8008932: d04a beq.n 80089ca <HAL_DMA_Abort+0x32a>
  19926. 8008934: 687b ldr r3, [r7, #4]
  19927. 8008936: 681b ldr r3, [r3, #0]
  19928. 8008938: 4a6b ldr r2, [pc, #428] @ (8008ae8 <HAL_DMA_Abort+0x448>)
  19929. 800893a: 4293 cmp r3, r2
  19930. 800893c: d045 beq.n 80089ca <HAL_DMA_Abort+0x32a>
  19931. 800893e: 687b ldr r3, [r7, #4]
  19932. 8008940: 681b ldr r3, [r3, #0]
  19933. 8008942: 4a6a ldr r2, [pc, #424] @ (8008aec <HAL_DMA_Abort+0x44c>)
  19934. 8008944: 4293 cmp r3, r2
  19935. 8008946: d040 beq.n 80089ca <HAL_DMA_Abort+0x32a>
  19936. 8008948: 687b ldr r3, [r7, #4]
  19937. 800894a: 681b ldr r3, [r3, #0]
  19938. 800894c: 4a68 ldr r2, [pc, #416] @ (8008af0 <HAL_DMA_Abort+0x450>)
  19939. 800894e: 4293 cmp r3, r2
  19940. 8008950: d03b beq.n 80089ca <HAL_DMA_Abort+0x32a>
  19941. 8008952: 687b ldr r3, [r7, #4]
  19942. 8008954: 681b ldr r3, [r3, #0]
  19943. 8008956: 4a67 ldr r2, [pc, #412] @ (8008af4 <HAL_DMA_Abort+0x454>)
  19944. 8008958: 4293 cmp r3, r2
  19945. 800895a: d036 beq.n 80089ca <HAL_DMA_Abort+0x32a>
  19946. 800895c: 687b ldr r3, [r7, #4]
  19947. 800895e: 681b ldr r3, [r3, #0]
  19948. 8008960: 4a65 ldr r2, [pc, #404] @ (8008af8 <HAL_DMA_Abort+0x458>)
  19949. 8008962: 4293 cmp r3, r2
  19950. 8008964: d031 beq.n 80089ca <HAL_DMA_Abort+0x32a>
  19951. 8008966: 687b ldr r3, [r7, #4]
  19952. 8008968: 681b ldr r3, [r3, #0]
  19953. 800896a: 4a64 ldr r2, [pc, #400] @ (8008afc <HAL_DMA_Abort+0x45c>)
  19954. 800896c: 4293 cmp r3, r2
  19955. 800896e: d02c beq.n 80089ca <HAL_DMA_Abort+0x32a>
  19956. 8008970: 687b ldr r3, [r7, #4]
  19957. 8008972: 681b ldr r3, [r3, #0]
  19958. 8008974: 4a62 ldr r2, [pc, #392] @ (8008b00 <HAL_DMA_Abort+0x460>)
  19959. 8008976: 4293 cmp r3, r2
  19960. 8008978: d027 beq.n 80089ca <HAL_DMA_Abort+0x32a>
  19961. 800897a: 687b ldr r3, [r7, #4]
  19962. 800897c: 681b ldr r3, [r3, #0]
  19963. 800897e: 4a61 ldr r2, [pc, #388] @ (8008b04 <HAL_DMA_Abort+0x464>)
  19964. 8008980: 4293 cmp r3, r2
  19965. 8008982: d022 beq.n 80089ca <HAL_DMA_Abort+0x32a>
  19966. 8008984: 687b ldr r3, [r7, #4]
  19967. 8008986: 681b ldr r3, [r3, #0]
  19968. 8008988: 4a5f ldr r2, [pc, #380] @ (8008b08 <HAL_DMA_Abort+0x468>)
  19969. 800898a: 4293 cmp r3, r2
  19970. 800898c: d01d beq.n 80089ca <HAL_DMA_Abort+0x32a>
  19971. 800898e: 687b ldr r3, [r7, #4]
  19972. 8008990: 681b ldr r3, [r3, #0]
  19973. 8008992: 4a5e ldr r2, [pc, #376] @ (8008b0c <HAL_DMA_Abort+0x46c>)
  19974. 8008994: 4293 cmp r3, r2
  19975. 8008996: d018 beq.n 80089ca <HAL_DMA_Abort+0x32a>
  19976. 8008998: 687b ldr r3, [r7, #4]
  19977. 800899a: 681b ldr r3, [r3, #0]
  19978. 800899c: 4a5c ldr r2, [pc, #368] @ (8008b10 <HAL_DMA_Abort+0x470>)
  19979. 800899e: 4293 cmp r3, r2
  19980. 80089a0: d013 beq.n 80089ca <HAL_DMA_Abort+0x32a>
  19981. 80089a2: 687b ldr r3, [r7, #4]
  19982. 80089a4: 681b ldr r3, [r3, #0]
  19983. 80089a6: 4a5b ldr r2, [pc, #364] @ (8008b14 <HAL_DMA_Abort+0x474>)
  19984. 80089a8: 4293 cmp r3, r2
  19985. 80089aa: d00e beq.n 80089ca <HAL_DMA_Abort+0x32a>
  19986. 80089ac: 687b ldr r3, [r7, #4]
  19987. 80089ae: 681b ldr r3, [r3, #0]
  19988. 80089b0: 4a59 ldr r2, [pc, #356] @ (8008b18 <HAL_DMA_Abort+0x478>)
  19989. 80089b2: 4293 cmp r3, r2
  19990. 80089b4: d009 beq.n 80089ca <HAL_DMA_Abort+0x32a>
  19991. 80089b6: 687b ldr r3, [r7, #4]
  19992. 80089b8: 681b ldr r3, [r3, #0]
  19993. 80089ba: 4a58 ldr r2, [pc, #352] @ (8008b1c <HAL_DMA_Abort+0x47c>)
  19994. 80089bc: 4293 cmp r3, r2
  19995. 80089be: d004 beq.n 80089ca <HAL_DMA_Abort+0x32a>
  19996. 80089c0: 687b ldr r3, [r7, #4]
  19997. 80089c2: 681b ldr r3, [r3, #0]
  19998. 80089c4: 4a56 ldr r2, [pc, #344] @ (8008b20 <HAL_DMA_Abort+0x480>)
  19999. 80089c6: 4293 cmp r3, r2
  20000. 80089c8: d108 bne.n 80089dc <HAL_DMA_Abort+0x33c>
  20001. 80089ca: 687b ldr r3, [r7, #4]
  20002. 80089cc: 681b ldr r3, [r3, #0]
  20003. 80089ce: 681a ldr r2, [r3, #0]
  20004. 80089d0: 687b ldr r3, [r7, #4]
  20005. 80089d2: 681b ldr r3, [r3, #0]
  20006. 80089d4: f022 0201 bic.w r2, r2, #1
  20007. 80089d8: 601a str r2, [r3, #0]
  20008. 80089da: e007 b.n 80089ec <HAL_DMA_Abort+0x34c>
  20009. 80089dc: 687b ldr r3, [r7, #4]
  20010. 80089de: 681b ldr r3, [r3, #0]
  20011. 80089e0: 681a ldr r2, [r3, #0]
  20012. 80089e2: 687b ldr r3, [r7, #4]
  20013. 80089e4: 681b ldr r3, [r3, #0]
  20014. 80089e6: f022 0201 bic.w r2, r2, #1
  20015. 80089ea: 601a str r2, [r3, #0]
  20016. /* Check if the DMA Stream is effectively disabled */
  20017. while(((*enableRegister) & DMA_SxCR_EN) != 0U)
  20018. 80089ec: e013 b.n 8008a16 <HAL_DMA_Abort+0x376>
  20019. {
  20020. /* Check for the Timeout */
  20021. if((HAL_GetTick() - tickstart ) > HAL_TIMEOUT_DMA_ABORT)
  20022. 80089ee: f7fc fcf5 bl 80053dc <HAL_GetTick>
  20023. 80089f2: 4602 mov r2, r0
  20024. 80089f4: 693b ldr r3, [r7, #16]
  20025. 80089f6: 1ad3 subs r3, r2, r3
  20026. 80089f8: 2b05 cmp r3, #5
  20027. 80089fa: d90c bls.n 8008a16 <HAL_DMA_Abort+0x376>
  20028. {
  20029. /* Update error code */
  20030. hdma->ErrorCode = HAL_DMA_ERROR_TIMEOUT;
  20031. 80089fc: 687b ldr r3, [r7, #4]
  20032. 80089fe: 2220 movs r2, #32
  20033. 8008a00: 655a str r2, [r3, #84] @ 0x54
  20034. /* Change the DMA state */
  20035. hdma->State = HAL_DMA_STATE_ERROR;
  20036. 8008a02: 687b ldr r3, [r7, #4]
  20037. 8008a04: 2203 movs r2, #3
  20038. 8008a06: f883 2035 strb.w r2, [r3, #53] @ 0x35
  20039. /* Process Unlocked */
  20040. __HAL_UNLOCK(hdma);
  20041. 8008a0a: 687b ldr r3, [r7, #4]
  20042. 8008a0c: 2200 movs r2, #0
  20043. 8008a0e: f883 2034 strb.w r2, [r3, #52] @ 0x34
  20044. return HAL_ERROR;
  20045. 8008a12: 2301 movs r3, #1
  20046. 8008a14: e12d b.n 8008c72 <HAL_DMA_Abort+0x5d2>
  20047. while(((*enableRegister) & DMA_SxCR_EN) != 0U)
  20048. 8008a16: 697b ldr r3, [r7, #20]
  20049. 8008a18: 681b ldr r3, [r3, #0]
  20050. 8008a1a: f003 0301 and.w r3, r3, #1
  20051. 8008a1e: 2b00 cmp r3, #0
  20052. 8008a20: d1e5 bne.n 80089ee <HAL_DMA_Abort+0x34e>
  20053. }
  20054. }
  20055. /* Clear all interrupt flags at correct offset within the register */
  20056. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  20057. 8008a22: 687b ldr r3, [r7, #4]
  20058. 8008a24: 681b ldr r3, [r3, #0]
  20059. 8008a26: 4a2f ldr r2, [pc, #188] @ (8008ae4 <HAL_DMA_Abort+0x444>)
  20060. 8008a28: 4293 cmp r3, r2
  20061. 8008a2a: d04a beq.n 8008ac2 <HAL_DMA_Abort+0x422>
  20062. 8008a2c: 687b ldr r3, [r7, #4]
  20063. 8008a2e: 681b ldr r3, [r3, #0]
  20064. 8008a30: 4a2d ldr r2, [pc, #180] @ (8008ae8 <HAL_DMA_Abort+0x448>)
  20065. 8008a32: 4293 cmp r3, r2
  20066. 8008a34: d045 beq.n 8008ac2 <HAL_DMA_Abort+0x422>
  20067. 8008a36: 687b ldr r3, [r7, #4]
  20068. 8008a38: 681b ldr r3, [r3, #0]
  20069. 8008a3a: 4a2c ldr r2, [pc, #176] @ (8008aec <HAL_DMA_Abort+0x44c>)
  20070. 8008a3c: 4293 cmp r3, r2
  20071. 8008a3e: d040 beq.n 8008ac2 <HAL_DMA_Abort+0x422>
  20072. 8008a40: 687b ldr r3, [r7, #4]
  20073. 8008a42: 681b ldr r3, [r3, #0]
  20074. 8008a44: 4a2a ldr r2, [pc, #168] @ (8008af0 <HAL_DMA_Abort+0x450>)
  20075. 8008a46: 4293 cmp r3, r2
  20076. 8008a48: d03b beq.n 8008ac2 <HAL_DMA_Abort+0x422>
  20077. 8008a4a: 687b ldr r3, [r7, #4]
  20078. 8008a4c: 681b ldr r3, [r3, #0]
  20079. 8008a4e: 4a29 ldr r2, [pc, #164] @ (8008af4 <HAL_DMA_Abort+0x454>)
  20080. 8008a50: 4293 cmp r3, r2
  20081. 8008a52: d036 beq.n 8008ac2 <HAL_DMA_Abort+0x422>
  20082. 8008a54: 687b ldr r3, [r7, #4]
  20083. 8008a56: 681b ldr r3, [r3, #0]
  20084. 8008a58: 4a27 ldr r2, [pc, #156] @ (8008af8 <HAL_DMA_Abort+0x458>)
  20085. 8008a5a: 4293 cmp r3, r2
  20086. 8008a5c: d031 beq.n 8008ac2 <HAL_DMA_Abort+0x422>
  20087. 8008a5e: 687b ldr r3, [r7, #4]
  20088. 8008a60: 681b ldr r3, [r3, #0]
  20089. 8008a62: 4a26 ldr r2, [pc, #152] @ (8008afc <HAL_DMA_Abort+0x45c>)
  20090. 8008a64: 4293 cmp r3, r2
  20091. 8008a66: d02c beq.n 8008ac2 <HAL_DMA_Abort+0x422>
  20092. 8008a68: 687b ldr r3, [r7, #4]
  20093. 8008a6a: 681b ldr r3, [r3, #0]
  20094. 8008a6c: 4a24 ldr r2, [pc, #144] @ (8008b00 <HAL_DMA_Abort+0x460>)
  20095. 8008a6e: 4293 cmp r3, r2
  20096. 8008a70: d027 beq.n 8008ac2 <HAL_DMA_Abort+0x422>
  20097. 8008a72: 687b ldr r3, [r7, #4]
  20098. 8008a74: 681b ldr r3, [r3, #0]
  20099. 8008a76: 4a23 ldr r2, [pc, #140] @ (8008b04 <HAL_DMA_Abort+0x464>)
  20100. 8008a78: 4293 cmp r3, r2
  20101. 8008a7a: d022 beq.n 8008ac2 <HAL_DMA_Abort+0x422>
  20102. 8008a7c: 687b ldr r3, [r7, #4]
  20103. 8008a7e: 681b ldr r3, [r3, #0]
  20104. 8008a80: 4a21 ldr r2, [pc, #132] @ (8008b08 <HAL_DMA_Abort+0x468>)
  20105. 8008a82: 4293 cmp r3, r2
  20106. 8008a84: d01d beq.n 8008ac2 <HAL_DMA_Abort+0x422>
  20107. 8008a86: 687b ldr r3, [r7, #4]
  20108. 8008a88: 681b ldr r3, [r3, #0]
  20109. 8008a8a: 4a20 ldr r2, [pc, #128] @ (8008b0c <HAL_DMA_Abort+0x46c>)
  20110. 8008a8c: 4293 cmp r3, r2
  20111. 8008a8e: d018 beq.n 8008ac2 <HAL_DMA_Abort+0x422>
  20112. 8008a90: 687b ldr r3, [r7, #4]
  20113. 8008a92: 681b ldr r3, [r3, #0]
  20114. 8008a94: 4a1e ldr r2, [pc, #120] @ (8008b10 <HAL_DMA_Abort+0x470>)
  20115. 8008a96: 4293 cmp r3, r2
  20116. 8008a98: d013 beq.n 8008ac2 <HAL_DMA_Abort+0x422>
  20117. 8008a9a: 687b ldr r3, [r7, #4]
  20118. 8008a9c: 681b ldr r3, [r3, #0]
  20119. 8008a9e: 4a1d ldr r2, [pc, #116] @ (8008b14 <HAL_DMA_Abort+0x474>)
  20120. 8008aa0: 4293 cmp r3, r2
  20121. 8008aa2: d00e beq.n 8008ac2 <HAL_DMA_Abort+0x422>
  20122. 8008aa4: 687b ldr r3, [r7, #4]
  20123. 8008aa6: 681b ldr r3, [r3, #0]
  20124. 8008aa8: 4a1b ldr r2, [pc, #108] @ (8008b18 <HAL_DMA_Abort+0x478>)
  20125. 8008aaa: 4293 cmp r3, r2
  20126. 8008aac: d009 beq.n 8008ac2 <HAL_DMA_Abort+0x422>
  20127. 8008aae: 687b ldr r3, [r7, #4]
  20128. 8008ab0: 681b ldr r3, [r3, #0]
  20129. 8008ab2: 4a1a ldr r2, [pc, #104] @ (8008b1c <HAL_DMA_Abort+0x47c>)
  20130. 8008ab4: 4293 cmp r3, r2
  20131. 8008ab6: d004 beq.n 8008ac2 <HAL_DMA_Abort+0x422>
  20132. 8008ab8: 687b ldr r3, [r7, #4]
  20133. 8008aba: 681b ldr r3, [r3, #0]
  20134. 8008abc: 4a18 ldr r2, [pc, #96] @ (8008b20 <HAL_DMA_Abort+0x480>)
  20135. 8008abe: 4293 cmp r3, r2
  20136. 8008ac0: d101 bne.n 8008ac6 <HAL_DMA_Abort+0x426>
  20137. 8008ac2: 2301 movs r3, #1
  20138. 8008ac4: e000 b.n 8008ac8 <HAL_DMA_Abort+0x428>
  20139. 8008ac6: 2300 movs r3, #0
  20140. 8008ac8: 2b00 cmp r3, #0
  20141. 8008aca: d02b beq.n 8008b24 <HAL_DMA_Abort+0x484>
  20142. {
  20143. regs_dma = (DMA_Base_Registers *)hdma->StreamBaseAddress;
  20144. 8008acc: 687b ldr r3, [r7, #4]
  20145. 8008ace: 6d9b ldr r3, [r3, #88] @ 0x58
  20146. 8008ad0: 60bb str r3, [r7, #8]
  20147. regs_dma->IFCR = 0x3FUL << (hdma->StreamIndex & 0x1FU);
  20148. 8008ad2: 687b ldr r3, [r7, #4]
  20149. 8008ad4: 6ddb ldr r3, [r3, #92] @ 0x5c
  20150. 8008ad6: f003 031f and.w r3, r3, #31
  20151. 8008ada: 223f movs r2, #63 @ 0x3f
  20152. 8008adc: 409a lsls r2, r3
  20153. 8008ade: 68bb ldr r3, [r7, #8]
  20154. 8008ae0: 609a str r2, [r3, #8]
  20155. 8008ae2: e02a b.n 8008b3a <HAL_DMA_Abort+0x49a>
  20156. 8008ae4: 40020010 .word 0x40020010
  20157. 8008ae8: 40020028 .word 0x40020028
  20158. 8008aec: 40020040 .word 0x40020040
  20159. 8008af0: 40020058 .word 0x40020058
  20160. 8008af4: 40020070 .word 0x40020070
  20161. 8008af8: 40020088 .word 0x40020088
  20162. 8008afc: 400200a0 .word 0x400200a0
  20163. 8008b00: 400200b8 .word 0x400200b8
  20164. 8008b04: 40020410 .word 0x40020410
  20165. 8008b08: 40020428 .word 0x40020428
  20166. 8008b0c: 40020440 .word 0x40020440
  20167. 8008b10: 40020458 .word 0x40020458
  20168. 8008b14: 40020470 .word 0x40020470
  20169. 8008b18: 40020488 .word 0x40020488
  20170. 8008b1c: 400204a0 .word 0x400204a0
  20171. 8008b20: 400204b8 .word 0x400204b8
  20172. }
  20173. else /* BDMA channel */
  20174. {
  20175. regs_bdma = (BDMA_Base_Registers *)hdma->StreamBaseAddress;
  20176. 8008b24: 687b ldr r3, [r7, #4]
  20177. 8008b26: 6d9b ldr r3, [r3, #88] @ 0x58
  20178. 8008b28: 60fb str r3, [r7, #12]
  20179. regs_bdma->IFCR = ((BDMA_IFCR_CGIF0) << (hdma->StreamIndex & 0x1FU));
  20180. 8008b2a: 687b ldr r3, [r7, #4]
  20181. 8008b2c: 6ddb ldr r3, [r3, #92] @ 0x5c
  20182. 8008b2e: f003 031f and.w r3, r3, #31
  20183. 8008b32: 2201 movs r2, #1
  20184. 8008b34: 409a lsls r2, r3
  20185. 8008b36: 68fb ldr r3, [r7, #12]
  20186. 8008b38: 605a str r2, [r3, #4]
  20187. }
  20188. if(IS_DMA_DMAMUX_ALL_INSTANCE(hdma->Instance) != 0U) /* No DMAMUX available for BDMA1 */
  20189. 8008b3a: 687b ldr r3, [r7, #4]
  20190. 8008b3c: 681b ldr r3, [r3, #0]
  20191. 8008b3e: 4a4f ldr r2, [pc, #316] @ (8008c7c <HAL_DMA_Abort+0x5dc>)
  20192. 8008b40: 4293 cmp r3, r2
  20193. 8008b42: d072 beq.n 8008c2a <HAL_DMA_Abort+0x58a>
  20194. 8008b44: 687b ldr r3, [r7, #4]
  20195. 8008b46: 681b ldr r3, [r3, #0]
  20196. 8008b48: 4a4d ldr r2, [pc, #308] @ (8008c80 <HAL_DMA_Abort+0x5e0>)
  20197. 8008b4a: 4293 cmp r3, r2
  20198. 8008b4c: d06d beq.n 8008c2a <HAL_DMA_Abort+0x58a>
  20199. 8008b4e: 687b ldr r3, [r7, #4]
  20200. 8008b50: 681b ldr r3, [r3, #0]
  20201. 8008b52: 4a4c ldr r2, [pc, #304] @ (8008c84 <HAL_DMA_Abort+0x5e4>)
  20202. 8008b54: 4293 cmp r3, r2
  20203. 8008b56: d068 beq.n 8008c2a <HAL_DMA_Abort+0x58a>
  20204. 8008b58: 687b ldr r3, [r7, #4]
  20205. 8008b5a: 681b ldr r3, [r3, #0]
  20206. 8008b5c: 4a4a ldr r2, [pc, #296] @ (8008c88 <HAL_DMA_Abort+0x5e8>)
  20207. 8008b5e: 4293 cmp r3, r2
  20208. 8008b60: d063 beq.n 8008c2a <HAL_DMA_Abort+0x58a>
  20209. 8008b62: 687b ldr r3, [r7, #4]
  20210. 8008b64: 681b ldr r3, [r3, #0]
  20211. 8008b66: 4a49 ldr r2, [pc, #292] @ (8008c8c <HAL_DMA_Abort+0x5ec>)
  20212. 8008b68: 4293 cmp r3, r2
  20213. 8008b6a: d05e beq.n 8008c2a <HAL_DMA_Abort+0x58a>
  20214. 8008b6c: 687b ldr r3, [r7, #4]
  20215. 8008b6e: 681b ldr r3, [r3, #0]
  20216. 8008b70: 4a47 ldr r2, [pc, #284] @ (8008c90 <HAL_DMA_Abort+0x5f0>)
  20217. 8008b72: 4293 cmp r3, r2
  20218. 8008b74: d059 beq.n 8008c2a <HAL_DMA_Abort+0x58a>
  20219. 8008b76: 687b ldr r3, [r7, #4]
  20220. 8008b78: 681b ldr r3, [r3, #0]
  20221. 8008b7a: 4a46 ldr r2, [pc, #280] @ (8008c94 <HAL_DMA_Abort+0x5f4>)
  20222. 8008b7c: 4293 cmp r3, r2
  20223. 8008b7e: d054 beq.n 8008c2a <HAL_DMA_Abort+0x58a>
  20224. 8008b80: 687b ldr r3, [r7, #4]
  20225. 8008b82: 681b ldr r3, [r3, #0]
  20226. 8008b84: 4a44 ldr r2, [pc, #272] @ (8008c98 <HAL_DMA_Abort+0x5f8>)
  20227. 8008b86: 4293 cmp r3, r2
  20228. 8008b88: d04f beq.n 8008c2a <HAL_DMA_Abort+0x58a>
  20229. 8008b8a: 687b ldr r3, [r7, #4]
  20230. 8008b8c: 681b ldr r3, [r3, #0]
  20231. 8008b8e: 4a43 ldr r2, [pc, #268] @ (8008c9c <HAL_DMA_Abort+0x5fc>)
  20232. 8008b90: 4293 cmp r3, r2
  20233. 8008b92: d04a beq.n 8008c2a <HAL_DMA_Abort+0x58a>
  20234. 8008b94: 687b ldr r3, [r7, #4]
  20235. 8008b96: 681b ldr r3, [r3, #0]
  20236. 8008b98: 4a41 ldr r2, [pc, #260] @ (8008ca0 <HAL_DMA_Abort+0x600>)
  20237. 8008b9a: 4293 cmp r3, r2
  20238. 8008b9c: d045 beq.n 8008c2a <HAL_DMA_Abort+0x58a>
  20239. 8008b9e: 687b ldr r3, [r7, #4]
  20240. 8008ba0: 681b ldr r3, [r3, #0]
  20241. 8008ba2: 4a40 ldr r2, [pc, #256] @ (8008ca4 <HAL_DMA_Abort+0x604>)
  20242. 8008ba4: 4293 cmp r3, r2
  20243. 8008ba6: d040 beq.n 8008c2a <HAL_DMA_Abort+0x58a>
  20244. 8008ba8: 687b ldr r3, [r7, #4]
  20245. 8008baa: 681b ldr r3, [r3, #0]
  20246. 8008bac: 4a3e ldr r2, [pc, #248] @ (8008ca8 <HAL_DMA_Abort+0x608>)
  20247. 8008bae: 4293 cmp r3, r2
  20248. 8008bb0: d03b beq.n 8008c2a <HAL_DMA_Abort+0x58a>
  20249. 8008bb2: 687b ldr r3, [r7, #4]
  20250. 8008bb4: 681b ldr r3, [r3, #0]
  20251. 8008bb6: 4a3d ldr r2, [pc, #244] @ (8008cac <HAL_DMA_Abort+0x60c>)
  20252. 8008bb8: 4293 cmp r3, r2
  20253. 8008bba: d036 beq.n 8008c2a <HAL_DMA_Abort+0x58a>
  20254. 8008bbc: 687b ldr r3, [r7, #4]
  20255. 8008bbe: 681b ldr r3, [r3, #0]
  20256. 8008bc0: 4a3b ldr r2, [pc, #236] @ (8008cb0 <HAL_DMA_Abort+0x610>)
  20257. 8008bc2: 4293 cmp r3, r2
  20258. 8008bc4: d031 beq.n 8008c2a <HAL_DMA_Abort+0x58a>
  20259. 8008bc6: 687b ldr r3, [r7, #4]
  20260. 8008bc8: 681b ldr r3, [r3, #0]
  20261. 8008bca: 4a3a ldr r2, [pc, #232] @ (8008cb4 <HAL_DMA_Abort+0x614>)
  20262. 8008bcc: 4293 cmp r3, r2
  20263. 8008bce: d02c beq.n 8008c2a <HAL_DMA_Abort+0x58a>
  20264. 8008bd0: 687b ldr r3, [r7, #4]
  20265. 8008bd2: 681b ldr r3, [r3, #0]
  20266. 8008bd4: 4a38 ldr r2, [pc, #224] @ (8008cb8 <HAL_DMA_Abort+0x618>)
  20267. 8008bd6: 4293 cmp r3, r2
  20268. 8008bd8: d027 beq.n 8008c2a <HAL_DMA_Abort+0x58a>
  20269. 8008bda: 687b ldr r3, [r7, #4]
  20270. 8008bdc: 681b ldr r3, [r3, #0]
  20271. 8008bde: 4a37 ldr r2, [pc, #220] @ (8008cbc <HAL_DMA_Abort+0x61c>)
  20272. 8008be0: 4293 cmp r3, r2
  20273. 8008be2: d022 beq.n 8008c2a <HAL_DMA_Abort+0x58a>
  20274. 8008be4: 687b ldr r3, [r7, #4]
  20275. 8008be6: 681b ldr r3, [r3, #0]
  20276. 8008be8: 4a35 ldr r2, [pc, #212] @ (8008cc0 <HAL_DMA_Abort+0x620>)
  20277. 8008bea: 4293 cmp r3, r2
  20278. 8008bec: d01d beq.n 8008c2a <HAL_DMA_Abort+0x58a>
  20279. 8008bee: 687b ldr r3, [r7, #4]
  20280. 8008bf0: 681b ldr r3, [r3, #0]
  20281. 8008bf2: 4a34 ldr r2, [pc, #208] @ (8008cc4 <HAL_DMA_Abort+0x624>)
  20282. 8008bf4: 4293 cmp r3, r2
  20283. 8008bf6: d018 beq.n 8008c2a <HAL_DMA_Abort+0x58a>
  20284. 8008bf8: 687b ldr r3, [r7, #4]
  20285. 8008bfa: 681b ldr r3, [r3, #0]
  20286. 8008bfc: 4a32 ldr r2, [pc, #200] @ (8008cc8 <HAL_DMA_Abort+0x628>)
  20287. 8008bfe: 4293 cmp r3, r2
  20288. 8008c00: d013 beq.n 8008c2a <HAL_DMA_Abort+0x58a>
  20289. 8008c02: 687b ldr r3, [r7, #4]
  20290. 8008c04: 681b ldr r3, [r3, #0]
  20291. 8008c06: 4a31 ldr r2, [pc, #196] @ (8008ccc <HAL_DMA_Abort+0x62c>)
  20292. 8008c08: 4293 cmp r3, r2
  20293. 8008c0a: d00e beq.n 8008c2a <HAL_DMA_Abort+0x58a>
  20294. 8008c0c: 687b ldr r3, [r7, #4]
  20295. 8008c0e: 681b ldr r3, [r3, #0]
  20296. 8008c10: 4a2f ldr r2, [pc, #188] @ (8008cd0 <HAL_DMA_Abort+0x630>)
  20297. 8008c12: 4293 cmp r3, r2
  20298. 8008c14: d009 beq.n 8008c2a <HAL_DMA_Abort+0x58a>
  20299. 8008c16: 687b ldr r3, [r7, #4]
  20300. 8008c18: 681b ldr r3, [r3, #0]
  20301. 8008c1a: 4a2e ldr r2, [pc, #184] @ (8008cd4 <HAL_DMA_Abort+0x634>)
  20302. 8008c1c: 4293 cmp r3, r2
  20303. 8008c1e: d004 beq.n 8008c2a <HAL_DMA_Abort+0x58a>
  20304. 8008c20: 687b ldr r3, [r7, #4]
  20305. 8008c22: 681b ldr r3, [r3, #0]
  20306. 8008c24: 4a2c ldr r2, [pc, #176] @ (8008cd8 <HAL_DMA_Abort+0x638>)
  20307. 8008c26: 4293 cmp r3, r2
  20308. 8008c28: d101 bne.n 8008c2e <HAL_DMA_Abort+0x58e>
  20309. 8008c2a: 2301 movs r3, #1
  20310. 8008c2c: e000 b.n 8008c30 <HAL_DMA_Abort+0x590>
  20311. 8008c2e: 2300 movs r3, #0
  20312. 8008c30: 2b00 cmp r3, #0
  20313. 8008c32: d015 beq.n 8008c60 <HAL_DMA_Abort+0x5c0>
  20314. {
  20315. /* Clear the DMAMUX synchro overrun flag */
  20316. hdma->DMAmuxChannelStatus->CFR = hdma->DMAmuxChannelStatusMask;
  20317. 8008c34: 687b ldr r3, [r7, #4]
  20318. 8008c36: 6e5b ldr r3, [r3, #100] @ 0x64
  20319. 8008c38: 687a ldr r2, [r7, #4]
  20320. 8008c3a: 6e92 ldr r2, [r2, #104] @ 0x68
  20321. 8008c3c: 605a str r2, [r3, #4]
  20322. if(hdma->DMAmuxRequestGen != 0U)
  20323. 8008c3e: 687b ldr r3, [r7, #4]
  20324. 8008c40: 6edb ldr r3, [r3, #108] @ 0x6c
  20325. 8008c42: 2b00 cmp r3, #0
  20326. 8008c44: d00c beq.n 8008c60 <HAL_DMA_Abort+0x5c0>
  20327. {
  20328. /* if using DMAMUX request generator, disable the DMAMUX request generator overrun IT */
  20329. /* disable the request gen overrun IT */
  20330. hdma->DMAmuxRequestGen->RGCR &= ~DMAMUX_RGxCR_OIE;
  20331. 8008c46: 687b ldr r3, [r7, #4]
  20332. 8008c48: 6edb ldr r3, [r3, #108] @ 0x6c
  20333. 8008c4a: 681a ldr r2, [r3, #0]
  20334. 8008c4c: 687b ldr r3, [r7, #4]
  20335. 8008c4e: 6edb ldr r3, [r3, #108] @ 0x6c
  20336. 8008c50: f422 7280 bic.w r2, r2, #256 @ 0x100
  20337. 8008c54: 601a str r2, [r3, #0]
  20338. /* Clear the DMAMUX request generator overrun flag */
  20339. hdma->DMAmuxRequestGenStatus->RGCFR = hdma->DMAmuxRequestGenStatusMask;
  20340. 8008c56: 687b ldr r3, [r7, #4]
  20341. 8008c58: 6f1b ldr r3, [r3, #112] @ 0x70
  20342. 8008c5a: 687a ldr r2, [r7, #4]
  20343. 8008c5c: 6f52 ldr r2, [r2, #116] @ 0x74
  20344. 8008c5e: 605a str r2, [r3, #4]
  20345. }
  20346. }
  20347. /* Change the DMA state */
  20348. hdma->State = HAL_DMA_STATE_READY;
  20349. 8008c60: 687b ldr r3, [r7, #4]
  20350. 8008c62: 2201 movs r2, #1
  20351. 8008c64: f883 2035 strb.w r2, [r3, #53] @ 0x35
  20352. /* Process Unlocked */
  20353. __HAL_UNLOCK(hdma);
  20354. 8008c68: 687b ldr r3, [r7, #4]
  20355. 8008c6a: 2200 movs r2, #0
  20356. 8008c6c: f883 2034 strb.w r2, [r3, #52] @ 0x34
  20357. }
  20358. return HAL_OK;
  20359. 8008c70: 2300 movs r3, #0
  20360. }
  20361. 8008c72: 4618 mov r0, r3
  20362. 8008c74: 3718 adds r7, #24
  20363. 8008c76: 46bd mov sp, r7
  20364. 8008c78: bd80 pop {r7, pc}
  20365. 8008c7a: bf00 nop
  20366. 8008c7c: 40020010 .word 0x40020010
  20367. 8008c80: 40020028 .word 0x40020028
  20368. 8008c84: 40020040 .word 0x40020040
  20369. 8008c88: 40020058 .word 0x40020058
  20370. 8008c8c: 40020070 .word 0x40020070
  20371. 8008c90: 40020088 .word 0x40020088
  20372. 8008c94: 400200a0 .word 0x400200a0
  20373. 8008c98: 400200b8 .word 0x400200b8
  20374. 8008c9c: 40020410 .word 0x40020410
  20375. 8008ca0: 40020428 .word 0x40020428
  20376. 8008ca4: 40020440 .word 0x40020440
  20377. 8008ca8: 40020458 .word 0x40020458
  20378. 8008cac: 40020470 .word 0x40020470
  20379. 8008cb0: 40020488 .word 0x40020488
  20380. 8008cb4: 400204a0 .word 0x400204a0
  20381. 8008cb8: 400204b8 .word 0x400204b8
  20382. 8008cbc: 58025408 .word 0x58025408
  20383. 8008cc0: 5802541c .word 0x5802541c
  20384. 8008cc4: 58025430 .word 0x58025430
  20385. 8008cc8: 58025444 .word 0x58025444
  20386. 8008ccc: 58025458 .word 0x58025458
  20387. 8008cd0: 5802546c .word 0x5802546c
  20388. 8008cd4: 58025480 .word 0x58025480
  20389. 8008cd8: 58025494 .word 0x58025494
  20390. 08008cdc <HAL_DMA_Abort_IT>:
  20391. * @param hdma : pointer to a DMA_HandleTypeDef structure that contains
  20392. * the configuration information for the specified DMA Stream.
  20393. * @retval HAL status
  20394. */
  20395. HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma)
  20396. {
  20397. 8008cdc: b580 push {r7, lr}
  20398. 8008cde: b084 sub sp, #16
  20399. 8008ce0: af00 add r7, sp, #0
  20400. 8008ce2: 6078 str r0, [r7, #4]
  20401. BDMA_Base_Registers *regs_bdma;
  20402. /* Check the DMA peripheral handle */
  20403. if(hdma == NULL)
  20404. 8008ce4: 687b ldr r3, [r7, #4]
  20405. 8008ce6: 2b00 cmp r3, #0
  20406. 8008ce8: d101 bne.n 8008cee <HAL_DMA_Abort_IT+0x12>
  20407. {
  20408. return HAL_ERROR;
  20409. 8008cea: 2301 movs r3, #1
  20410. 8008cec: e237 b.n 800915e <HAL_DMA_Abort_IT+0x482>
  20411. }
  20412. if(hdma->State != HAL_DMA_STATE_BUSY)
  20413. 8008cee: 687b ldr r3, [r7, #4]
  20414. 8008cf0: f893 3035 ldrb.w r3, [r3, #53] @ 0x35
  20415. 8008cf4: b2db uxtb r3, r3
  20416. 8008cf6: 2b02 cmp r3, #2
  20417. 8008cf8: d004 beq.n 8008d04 <HAL_DMA_Abort_IT+0x28>
  20418. {
  20419. hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER;
  20420. 8008cfa: 687b ldr r3, [r7, #4]
  20421. 8008cfc: 2280 movs r2, #128 @ 0x80
  20422. 8008cfe: 655a str r2, [r3, #84] @ 0x54
  20423. return HAL_ERROR;
  20424. 8008d00: 2301 movs r3, #1
  20425. 8008d02: e22c b.n 800915e <HAL_DMA_Abort_IT+0x482>
  20426. }
  20427. else
  20428. {
  20429. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  20430. 8008d04: 687b ldr r3, [r7, #4]
  20431. 8008d06: 681b ldr r3, [r3, #0]
  20432. 8008d08: 4a5c ldr r2, [pc, #368] @ (8008e7c <HAL_DMA_Abort_IT+0x1a0>)
  20433. 8008d0a: 4293 cmp r3, r2
  20434. 8008d0c: d04a beq.n 8008da4 <HAL_DMA_Abort_IT+0xc8>
  20435. 8008d0e: 687b ldr r3, [r7, #4]
  20436. 8008d10: 681b ldr r3, [r3, #0]
  20437. 8008d12: 4a5b ldr r2, [pc, #364] @ (8008e80 <HAL_DMA_Abort_IT+0x1a4>)
  20438. 8008d14: 4293 cmp r3, r2
  20439. 8008d16: d045 beq.n 8008da4 <HAL_DMA_Abort_IT+0xc8>
  20440. 8008d18: 687b ldr r3, [r7, #4]
  20441. 8008d1a: 681b ldr r3, [r3, #0]
  20442. 8008d1c: 4a59 ldr r2, [pc, #356] @ (8008e84 <HAL_DMA_Abort_IT+0x1a8>)
  20443. 8008d1e: 4293 cmp r3, r2
  20444. 8008d20: d040 beq.n 8008da4 <HAL_DMA_Abort_IT+0xc8>
  20445. 8008d22: 687b ldr r3, [r7, #4]
  20446. 8008d24: 681b ldr r3, [r3, #0]
  20447. 8008d26: 4a58 ldr r2, [pc, #352] @ (8008e88 <HAL_DMA_Abort_IT+0x1ac>)
  20448. 8008d28: 4293 cmp r3, r2
  20449. 8008d2a: d03b beq.n 8008da4 <HAL_DMA_Abort_IT+0xc8>
  20450. 8008d2c: 687b ldr r3, [r7, #4]
  20451. 8008d2e: 681b ldr r3, [r3, #0]
  20452. 8008d30: 4a56 ldr r2, [pc, #344] @ (8008e8c <HAL_DMA_Abort_IT+0x1b0>)
  20453. 8008d32: 4293 cmp r3, r2
  20454. 8008d34: d036 beq.n 8008da4 <HAL_DMA_Abort_IT+0xc8>
  20455. 8008d36: 687b ldr r3, [r7, #4]
  20456. 8008d38: 681b ldr r3, [r3, #0]
  20457. 8008d3a: 4a55 ldr r2, [pc, #340] @ (8008e90 <HAL_DMA_Abort_IT+0x1b4>)
  20458. 8008d3c: 4293 cmp r3, r2
  20459. 8008d3e: d031 beq.n 8008da4 <HAL_DMA_Abort_IT+0xc8>
  20460. 8008d40: 687b ldr r3, [r7, #4]
  20461. 8008d42: 681b ldr r3, [r3, #0]
  20462. 8008d44: 4a53 ldr r2, [pc, #332] @ (8008e94 <HAL_DMA_Abort_IT+0x1b8>)
  20463. 8008d46: 4293 cmp r3, r2
  20464. 8008d48: d02c beq.n 8008da4 <HAL_DMA_Abort_IT+0xc8>
  20465. 8008d4a: 687b ldr r3, [r7, #4]
  20466. 8008d4c: 681b ldr r3, [r3, #0]
  20467. 8008d4e: 4a52 ldr r2, [pc, #328] @ (8008e98 <HAL_DMA_Abort_IT+0x1bc>)
  20468. 8008d50: 4293 cmp r3, r2
  20469. 8008d52: d027 beq.n 8008da4 <HAL_DMA_Abort_IT+0xc8>
  20470. 8008d54: 687b ldr r3, [r7, #4]
  20471. 8008d56: 681b ldr r3, [r3, #0]
  20472. 8008d58: 4a50 ldr r2, [pc, #320] @ (8008e9c <HAL_DMA_Abort_IT+0x1c0>)
  20473. 8008d5a: 4293 cmp r3, r2
  20474. 8008d5c: d022 beq.n 8008da4 <HAL_DMA_Abort_IT+0xc8>
  20475. 8008d5e: 687b ldr r3, [r7, #4]
  20476. 8008d60: 681b ldr r3, [r3, #0]
  20477. 8008d62: 4a4f ldr r2, [pc, #316] @ (8008ea0 <HAL_DMA_Abort_IT+0x1c4>)
  20478. 8008d64: 4293 cmp r3, r2
  20479. 8008d66: d01d beq.n 8008da4 <HAL_DMA_Abort_IT+0xc8>
  20480. 8008d68: 687b ldr r3, [r7, #4]
  20481. 8008d6a: 681b ldr r3, [r3, #0]
  20482. 8008d6c: 4a4d ldr r2, [pc, #308] @ (8008ea4 <HAL_DMA_Abort_IT+0x1c8>)
  20483. 8008d6e: 4293 cmp r3, r2
  20484. 8008d70: d018 beq.n 8008da4 <HAL_DMA_Abort_IT+0xc8>
  20485. 8008d72: 687b ldr r3, [r7, #4]
  20486. 8008d74: 681b ldr r3, [r3, #0]
  20487. 8008d76: 4a4c ldr r2, [pc, #304] @ (8008ea8 <HAL_DMA_Abort_IT+0x1cc>)
  20488. 8008d78: 4293 cmp r3, r2
  20489. 8008d7a: d013 beq.n 8008da4 <HAL_DMA_Abort_IT+0xc8>
  20490. 8008d7c: 687b ldr r3, [r7, #4]
  20491. 8008d7e: 681b ldr r3, [r3, #0]
  20492. 8008d80: 4a4a ldr r2, [pc, #296] @ (8008eac <HAL_DMA_Abort_IT+0x1d0>)
  20493. 8008d82: 4293 cmp r3, r2
  20494. 8008d84: d00e beq.n 8008da4 <HAL_DMA_Abort_IT+0xc8>
  20495. 8008d86: 687b ldr r3, [r7, #4]
  20496. 8008d88: 681b ldr r3, [r3, #0]
  20497. 8008d8a: 4a49 ldr r2, [pc, #292] @ (8008eb0 <HAL_DMA_Abort_IT+0x1d4>)
  20498. 8008d8c: 4293 cmp r3, r2
  20499. 8008d8e: d009 beq.n 8008da4 <HAL_DMA_Abort_IT+0xc8>
  20500. 8008d90: 687b ldr r3, [r7, #4]
  20501. 8008d92: 681b ldr r3, [r3, #0]
  20502. 8008d94: 4a47 ldr r2, [pc, #284] @ (8008eb4 <HAL_DMA_Abort_IT+0x1d8>)
  20503. 8008d96: 4293 cmp r3, r2
  20504. 8008d98: d004 beq.n 8008da4 <HAL_DMA_Abort_IT+0xc8>
  20505. 8008d9a: 687b ldr r3, [r7, #4]
  20506. 8008d9c: 681b ldr r3, [r3, #0]
  20507. 8008d9e: 4a46 ldr r2, [pc, #280] @ (8008eb8 <HAL_DMA_Abort_IT+0x1dc>)
  20508. 8008da0: 4293 cmp r3, r2
  20509. 8008da2: d101 bne.n 8008da8 <HAL_DMA_Abort_IT+0xcc>
  20510. 8008da4: 2301 movs r3, #1
  20511. 8008da6: e000 b.n 8008daa <HAL_DMA_Abort_IT+0xce>
  20512. 8008da8: 2300 movs r3, #0
  20513. 8008daa: 2b00 cmp r3, #0
  20514. 8008dac: f000 8086 beq.w 8008ebc <HAL_DMA_Abort_IT+0x1e0>
  20515. {
  20516. /* Set Abort State */
  20517. hdma->State = HAL_DMA_STATE_ABORT;
  20518. 8008db0: 687b ldr r3, [r7, #4]
  20519. 8008db2: 2204 movs r2, #4
  20520. 8008db4: f883 2035 strb.w r2, [r3, #53] @ 0x35
  20521. /* Disable the stream */
  20522. __HAL_DMA_DISABLE(hdma);
  20523. 8008db8: 687b ldr r3, [r7, #4]
  20524. 8008dba: 681b ldr r3, [r3, #0]
  20525. 8008dbc: 4a2f ldr r2, [pc, #188] @ (8008e7c <HAL_DMA_Abort_IT+0x1a0>)
  20526. 8008dbe: 4293 cmp r3, r2
  20527. 8008dc0: d04a beq.n 8008e58 <HAL_DMA_Abort_IT+0x17c>
  20528. 8008dc2: 687b ldr r3, [r7, #4]
  20529. 8008dc4: 681b ldr r3, [r3, #0]
  20530. 8008dc6: 4a2e ldr r2, [pc, #184] @ (8008e80 <HAL_DMA_Abort_IT+0x1a4>)
  20531. 8008dc8: 4293 cmp r3, r2
  20532. 8008dca: d045 beq.n 8008e58 <HAL_DMA_Abort_IT+0x17c>
  20533. 8008dcc: 687b ldr r3, [r7, #4]
  20534. 8008dce: 681b ldr r3, [r3, #0]
  20535. 8008dd0: 4a2c ldr r2, [pc, #176] @ (8008e84 <HAL_DMA_Abort_IT+0x1a8>)
  20536. 8008dd2: 4293 cmp r3, r2
  20537. 8008dd4: d040 beq.n 8008e58 <HAL_DMA_Abort_IT+0x17c>
  20538. 8008dd6: 687b ldr r3, [r7, #4]
  20539. 8008dd8: 681b ldr r3, [r3, #0]
  20540. 8008dda: 4a2b ldr r2, [pc, #172] @ (8008e88 <HAL_DMA_Abort_IT+0x1ac>)
  20541. 8008ddc: 4293 cmp r3, r2
  20542. 8008dde: d03b beq.n 8008e58 <HAL_DMA_Abort_IT+0x17c>
  20543. 8008de0: 687b ldr r3, [r7, #4]
  20544. 8008de2: 681b ldr r3, [r3, #0]
  20545. 8008de4: 4a29 ldr r2, [pc, #164] @ (8008e8c <HAL_DMA_Abort_IT+0x1b0>)
  20546. 8008de6: 4293 cmp r3, r2
  20547. 8008de8: d036 beq.n 8008e58 <HAL_DMA_Abort_IT+0x17c>
  20548. 8008dea: 687b ldr r3, [r7, #4]
  20549. 8008dec: 681b ldr r3, [r3, #0]
  20550. 8008dee: 4a28 ldr r2, [pc, #160] @ (8008e90 <HAL_DMA_Abort_IT+0x1b4>)
  20551. 8008df0: 4293 cmp r3, r2
  20552. 8008df2: d031 beq.n 8008e58 <HAL_DMA_Abort_IT+0x17c>
  20553. 8008df4: 687b ldr r3, [r7, #4]
  20554. 8008df6: 681b ldr r3, [r3, #0]
  20555. 8008df8: 4a26 ldr r2, [pc, #152] @ (8008e94 <HAL_DMA_Abort_IT+0x1b8>)
  20556. 8008dfa: 4293 cmp r3, r2
  20557. 8008dfc: d02c beq.n 8008e58 <HAL_DMA_Abort_IT+0x17c>
  20558. 8008dfe: 687b ldr r3, [r7, #4]
  20559. 8008e00: 681b ldr r3, [r3, #0]
  20560. 8008e02: 4a25 ldr r2, [pc, #148] @ (8008e98 <HAL_DMA_Abort_IT+0x1bc>)
  20561. 8008e04: 4293 cmp r3, r2
  20562. 8008e06: d027 beq.n 8008e58 <HAL_DMA_Abort_IT+0x17c>
  20563. 8008e08: 687b ldr r3, [r7, #4]
  20564. 8008e0a: 681b ldr r3, [r3, #0]
  20565. 8008e0c: 4a23 ldr r2, [pc, #140] @ (8008e9c <HAL_DMA_Abort_IT+0x1c0>)
  20566. 8008e0e: 4293 cmp r3, r2
  20567. 8008e10: d022 beq.n 8008e58 <HAL_DMA_Abort_IT+0x17c>
  20568. 8008e12: 687b ldr r3, [r7, #4]
  20569. 8008e14: 681b ldr r3, [r3, #0]
  20570. 8008e16: 4a22 ldr r2, [pc, #136] @ (8008ea0 <HAL_DMA_Abort_IT+0x1c4>)
  20571. 8008e18: 4293 cmp r3, r2
  20572. 8008e1a: d01d beq.n 8008e58 <HAL_DMA_Abort_IT+0x17c>
  20573. 8008e1c: 687b ldr r3, [r7, #4]
  20574. 8008e1e: 681b ldr r3, [r3, #0]
  20575. 8008e20: 4a20 ldr r2, [pc, #128] @ (8008ea4 <HAL_DMA_Abort_IT+0x1c8>)
  20576. 8008e22: 4293 cmp r3, r2
  20577. 8008e24: d018 beq.n 8008e58 <HAL_DMA_Abort_IT+0x17c>
  20578. 8008e26: 687b ldr r3, [r7, #4]
  20579. 8008e28: 681b ldr r3, [r3, #0]
  20580. 8008e2a: 4a1f ldr r2, [pc, #124] @ (8008ea8 <HAL_DMA_Abort_IT+0x1cc>)
  20581. 8008e2c: 4293 cmp r3, r2
  20582. 8008e2e: d013 beq.n 8008e58 <HAL_DMA_Abort_IT+0x17c>
  20583. 8008e30: 687b ldr r3, [r7, #4]
  20584. 8008e32: 681b ldr r3, [r3, #0]
  20585. 8008e34: 4a1d ldr r2, [pc, #116] @ (8008eac <HAL_DMA_Abort_IT+0x1d0>)
  20586. 8008e36: 4293 cmp r3, r2
  20587. 8008e38: d00e beq.n 8008e58 <HAL_DMA_Abort_IT+0x17c>
  20588. 8008e3a: 687b ldr r3, [r7, #4]
  20589. 8008e3c: 681b ldr r3, [r3, #0]
  20590. 8008e3e: 4a1c ldr r2, [pc, #112] @ (8008eb0 <HAL_DMA_Abort_IT+0x1d4>)
  20591. 8008e40: 4293 cmp r3, r2
  20592. 8008e42: d009 beq.n 8008e58 <HAL_DMA_Abort_IT+0x17c>
  20593. 8008e44: 687b ldr r3, [r7, #4]
  20594. 8008e46: 681b ldr r3, [r3, #0]
  20595. 8008e48: 4a1a ldr r2, [pc, #104] @ (8008eb4 <HAL_DMA_Abort_IT+0x1d8>)
  20596. 8008e4a: 4293 cmp r3, r2
  20597. 8008e4c: d004 beq.n 8008e58 <HAL_DMA_Abort_IT+0x17c>
  20598. 8008e4e: 687b ldr r3, [r7, #4]
  20599. 8008e50: 681b ldr r3, [r3, #0]
  20600. 8008e52: 4a19 ldr r2, [pc, #100] @ (8008eb8 <HAL_DMA_Abort_IT+0x1dc>)
  20601. 8008e54: 4293 cmp r3, r2
  20602. 8008e56: d108 bne.n 8008e6a <HAL_DMA_Abort_IT+0x18e>
  20603. 8008e58: 687b ldr r3, [r7, #4]
  20604. 8008e5a: 681b ldr r3, [r3, #0]
  20605. 8008e5c: 681a ldr r2, [r3, #0]
  20606. 8008e5e: 687b ldr r3, [r7, #4]
  20607. 8008e60: 681b ldr r3, [r3, #0]
  20608. 8008e62: f022 0201 bic.w r2, r2, #1
  20609. 8008e66: 601a str r2, [r3, #0]
  20610. 8008e68: e178 b.n 800915c <HAL_DMA_Abort_IT+0x480>
  20611. 8008e6a: 687b ldr r3, [r7, #4]
  20612. 8008e6c: 681b ldr r3, [r3, #0]
  20613. 8008e6e: 681a ldr r2, [r3, #0]
  20614. 8008e70: 687b ldr r3, [r7, #4]
  20615. 8008e72: 681b ldr r3, [r3, #0]
  20616. 8008e74: f022 0201 bic.w r2, r2, #1
  20617. 8008e78: 601a str r2, [r3, #0]
  20618. 8008e7a: e16f b.n 800915c <HAL_DMA_Abort_IT+0x480>
  20619. 8008e7c: 40020010 .word 0x40020010
  20620. 8008e80: 40020028 .word 0x40020028
  20621. 8008e84: 40020040 .word 0x40020040
  20622. 8008e88: 40020058 .word 0x40020058
  20623. 8008e8c: 40020070 .word 0x40020070
  20624. 8008e90: 40020088 .word 0x40020088
  20625. 8008e94: 400200a0 .word 0x400200a0
  20626. 8008e98: 400200b8 .word 0x400200b8
  20627. 8008e9c: 40020410 .word 0x40020410
  20628. 8008ea0: 40020428 .word 0x40020428
  20629. 8008ea4: 40020440 .word 0x40020440
  20630. 8008ea8: 40020458 .word 0x40020458
  20631. 8008eac: 40020470 .word 0x40020470
  20632. 8008eb0: 40020488 .word 0x40020488
  20633. 8008eb4: 400204a0 .word 0x400204a0
  20634. 8008eb8: 400204b8 .word 0x400204b8
  20635. }
  20636. else /* BDMA channel */
  20637. {
  20638. /* Disable DMA All Interrupts */
  20639. ((BDMA_Channel_TypeDef *)hdma->Instance)->CCR &= ~(BDMA_CCR_TCIE | BDMA_CCR_HTIE | BDMA_CCR_TEIE);
  20640. 8008ebc: 687b ldr r3, [r7, #4]
  20641. 8008ebe: 681b ldr r3, [r3, #0]
  20642. 8008ec0: 681a ldr r2, [r3, #0]
  20643. 8008ec2: 687b ldr r3, [r7, #4]
  20644. 8008ec4: 681b ldr r3, [r3, #0]
  20645. 8008ec6: f022 020e bic.w r2, r2, #14
  20646. 8008eca: 601a str r2, [r3, #0]
  20647. /* Disable the channel */
  20648. __HAL_DMA_DISABLE(hdma);
  20649. 8008ecc: 687b ldr r3, [r7, #4]
  20650. 8008ece: 681b ldr r3, [r3, #0]
  20651. 8008ed0: 4a6c ldr r2, [pc, #432] @ (8009084 <HAL_DMA_Abort_IT+0x3a8>)
  20652. 8008ed2: 4293 cmp r3, r2
  20653. 8008ed4: d04a beq.n 8008f6c <HAL_DMA_Abort_IT+0x290>
  20654. 8008ed6: 687b ldr r3, [r7, #4]
  20655. 8008ed8: 681b ldr r3, [r3, #0]
  20656. 8008eda: 4a6b ldr r2, [pc, #428] @ (8009088 <HAL_DMA_Abort_IT+0x3ac>)
  20657. 8008edc: 4293 cmp r3, r2
  20658. 8008ede: d045 beq.n 8008f6c <HAL_DMA_Abort_IT+0x290>
  20659. 8008ee0: 687b ldr r3, [r7, #4]
  20660. 8008ee2: 681b ldr r3, [r3, #0]
  20661. 8008ee4: 4a69 ldr r2, [pc, #420] @ (800908c <HAL_DMA_Abort_IT+0x3b0>)
  20662. 8008ee6: 4293 cmp r3, r2
  20663. 8008ee8: d040 beq.n 8008f6c <HAL_DMA_Abort_IT+0x290>
  20664. 8008eea: 687b ldr r3, [r7, #4]
  20665. 8008eec: 681b ldr r3, [r3, #0]
  20666. 8008eee: 4a68 ldr r2, [pc, #416] @ (8009090 <HAL_DMA_Abort_IT+0x3b4>)
  20667. 8008ef0: 4293 cmp r3, r2
  20668. 8008ef2: d03b beq.n 8008f6c <HAL_DMA_Abort_IT+0x290>
  20669. 8008ef4: 687b ldr r3, [r7, #4]
  20670. 8008ef6: 681b ldr r3, [r3, #0]
  20671. 8008ef8: 4a66 ldr r2, [pc, #408] @ (8009094 <HAL_DMA_Abort_IT+0x3b8>)
  20672. 8008efa: 4293 cmp r3, r2
  20673. 8008efc: d036 beq.n 8008f6c <HAL_DMA_Abort_IT+0x290>
  20674. 8008efe: 687b ldr r3, [r7, #4]
  20675. 8008f00: 681b ldr r3, [r3, #0]
  20676. 8008f02: 4a65 ldr r2, [pc, #404] @ (8009098 <HAL_DMA_Abort_IT+0x3bc>)
  20677. 8008f04: 4293 cmp r3, r2
  20678. 8008f06: d031 beq.n 8008f6c <HAL_DMA_Abort_IT+0x290>
  20679. 8008f08: 687b ldr r3, [r7, #4]
  20680. 8008f0a: 681b ldr r3, [r3, #0]
  20681. 8008f0c: 4a63 ldr r2, [pc, #396] @ (800909c <HAL_DMA_Abort_IT+0x3c0>)
  20682. 8008f0e: 4293 cmp r3, r2
  20683. 8008f10: d02c beq.n 8008f6c <HAL_DMA_Abort_IT+0x290>
  20684. 8008f12: 687b ldr r3, [r7, #4]
  20685. 8008f14: 681b ldr r3, [r3, #0]
  20686. 8008f16: 4a62 ldr r2, [pc, #392] @ (80090a0 <HAL_DMA_Abort_IT+0x3c4>)
  20687. 8008f18: 4293 cmp r3, r2
  20688. 8008f1a: d027 beq.n 8008f6c <HAL_DMA_Abort_IT+0x290>
  20689. 8008f1c: 687b ldr r3, [r7, #4]
  20690. 8008f1e: 681b ldr r3, [r3, #0]
  20691. 8008f20: 4a60 ldr r2, [pc, #384] @ (80090a4 <HAL_DMA_Abort_IT+0x3c8>)
  20692. 8008f22: 4293 cmp r3, r2
  20693. 8008f24: d022 beq.n 8008f6c <HAL_DMA_Abort_IT+0x290>
  20694. 8008f26: 687b ldr r3, [r7, #4]
  20695. 8008f28: 681b ldr r3, [r3, #0]
  20696. 8008f2a: 4a5f ldr r2, [pc, #380] @ (80090a8 <HAL_DMA_Abort_IT+0x3cc>)
  20697. 8008f2c: 4293 cmp r3, r2
  20698. 8008f2e: d01d beq.n 8008f6c <HAL_DMA_Abort_IT+0x290>
  20699. 8008f30: 687b ldr r3, [r7, #4]
  20700. 8008f32: 681b ldr r3, [r3, #0]
  20701. 8008f34: 4a5d ldr r2, [pc, #372] @ (80090ac <HAL_DMA_Abort_IT+0x3d0>)
  20702. 8008f36: 4293 cmp r3, r2
  20703. 8008f38: d018 beq.n 8008f6c <HAL_DMA_Abort_IT+0x290>
  20704. 8008f3a: 687b ldr r3, [r7, #4]
  20705. 8008f3c: 681b ldr r3, [r3, #0]
  20706. 8008f3e: 4a5c ldr r2, [pc, #368] @ (80090b0 <HAL_DMA_Abort_IT+0x3d4>)
  20707. 8008f40: 4293 cmp r3, r2
  20708. 8008f42: d013 beq.n 8008f6c <HAL_DMA_Abort_IT+0x290>
  20709. 8008f44: 687b ldr r3, [r7, #4]
  20710. 8008f46: 681b ldr r3, [r3, #0]
  20711. 8008f48: 4a5a ldr r2, [pc, #360] @ (80090b4 <HAL_DMA_Abort_IT+0x3d8>)
  20712. 8008f4a: 4293 cmp r3, r2
  20713. 8008f4c: d00e beq.n 8008f6c <HAL_DMA_Abort_IT+0x290>
  20714. 8008f4e: 687b ldr r3, [r7, #4]
  20715. 8008f50: 681b ldr r3, [r3, #0]
  20716. 8008f52: 4a59 ldr r2, [pc, #356] @ (80090b8 <HAL_DMA_Abort_IT+0x3dc>)
  20717. 8008f54: 4293 cmp r3, r2
  20718. 8008f56: d009 beq.n 8008f6c <HAL_DMA_Abort_IT+0x290>
  20719. 8008f58: 687b ldr r3, [r7, #4]
  20720. 8008f5a: 681b ldr r3, [r3, #0]
  20721. 8008f5c: 4a57 ldr r2, [pc, #348] @ (80090bc <HAL_DMA_Abort_IT+0x3e0>)
  20722. 8008f5e: 4293 cmp r3, r2
  20723. 8008f60: d004 beq.n 8008f6c <HAL_DMA_Abort_IT+0x290>
  20724. 8008f62: 687b ldr r3, [r7, #4]
  20725. 8008f64: 681b ldr r3, [r3, #0]
  20726. 8008f66: 4a56 ldr r2, [pc, #344] @ (80090c0 <HAL_DMA_Abort_IT+0x3e4>)
  20727. 8008f68: 4293 cmp r3, r2
  20728. 8008f6a: d108 bne.n 8008f7e <HAL_DMA_Abort_IT+0x2a2>
  20729. 8008f6c: 687b ldr r3, [r7, #4]
  20730. 8008f6e: 681b ldr r3, [r3, #0]
  20731. 8008f70: 681a ldr r2, [r3, #0]
  20732. 8008f72: 687b ldr r3, [r7, #4]
  20733. 8008f74: 681b ldr r3, [r3, #0]
  20734. 8008f76: f022 0201 bic.w r2, r2, #1
  20735. 8008f7a: 601a str r2, [r3, #0]
  20736. 8008f7c: e007 b.n 8008f8e <HAL_DMA_Abort_IT+0x2b2>
  20737. 8008f7e: 687b ldr r3, [r7, #4]
  20738. 8008f80: 681b ldr r3, [r3, #0]
  20739. 8008f82: 681a ldr r2, [r3, #0]
  20740. 8008f84: 687b ldr r3, [r7, #4]
  20741. 8008f86: 681b ldr r3, [r3, #0]
  20742. 8008f88: f022 0201 bic.w r2, r2, #1
  20743. 8008f8c: 601a str r2, [r3, #0]
  20744. if(IS_DMA_DMAMUX_ALL_INSTANCE(hdma->Instance) != 0U) /* No DMAMUX available for BDMA1 */
  20745. 8008f8e: 687b ldr r3, [r7, #4]
  20746. 8008f90: 681b ldr r3, [r3, #0]
  20747. 8008f92: 4a3c ldr r2, [pc, #240] @ (8009084 <HAL_DMA_Abort_IT+0x3a8>)
  20748. 8008f94: 4293 cmp r3, r2
  20749. 8008f96: d072 beq.n 800907e <HAL_DMA_Abort_IT+0x3a2>
  20750. 8008f98: 687b ldr r3, [r7, #4]
  20751. 8008f9a: 681b ldr r3, [r3, #0]
  20752. 8008f9c: 4a3a ldr r2, [pc, #232] @ (8009088 <HAL_DMA_Abort_IT+0x3ac>)
  20753. 8008f9e: 4293 cmp r3, r2
  20754. 8008fa0: d06d beq.n 800907e <HAL_DMA_Abort_IT+0x3a2>
  20755. 8008fa2: 687b ldr r3, [r7, #4]
  20756. 8008fa4: 681b ldr r3, [r3, #0]
  20757. 8008fa6: 4a39 ldr r2, [pc, #228] @ (800908c <HAL_DMA_Abort_IT+0x3b0>)
  20758. 8008fa8: 4293 cmp r3, r2
  20759. 8008faa: d068 beq.n 800907e <HAL_DMA_Abort_IT+0x3a2>
  20760. 8008fac: 687b ldr r3, [r7, #4]
  20761. 8008fae: 681b ldr r3, [r3, #0]
  20762. 8008fb0: 4a37 ldr r2, [pc, #220] @ (8009090 <HAL_DMA_Abort_IT+0x3b4>)
  20763. 8008fb2: 4293 cmp r3, r2
  20764. 8008fb4: d063 beq.n 800907e <HAL_DMA_Abort_IT+0x3a2>
  20765. 8008fb6: 687b ldr r3, [r7, #4]
  20766. 8008fb8: 681b ldr r3, [r3, #0]
  20767. 8008fba: 4a36 ldr r2, [pc, #216] @ (8009094 <HAL_DMA_Abort_IT+0x3b8>)
  20768. 8008fbc: 4293 cmp r3, r2
  20769. 8008fbe: d05e beq.n 800907e <HAL_DMA_Abort_IT+0x3a2>
  20770. 8008fc0: 687b ldr r3, [r7, #4]
  20771. 8008fc2: 681b ldr r3, [r3, #0]
  20772. 8008fc4: 4a34 ldr r2, [pc, #208] @ (8009098 <HAL_DMA_Abort_IT+0x3bc>)
  20773. 8008fc6: 4293 cmp r3, r2
  20774. 8008fc8: d059 beq.n 800907e <HAL_DMA_Abort_IT+0x3a2>
  20775. 8008fca: 687b ldr r3, [r7, #4]
  20776. 8008fcc: 681b ldr r3, [r3, #0]
  20777. 8008fce: 4a33 ldr r2, [pc, #204] @ (800909c <HAL_DMA_Abort_IT+0x3c0>)
  20778. 8008fd0: 4293 cmp r3, r2
  20779. 8008fd2: d054 beq.n 800907e <HAL_DMA_Abort_IT+0x3a2>
  20780. 8008fd4: 687b ldr r3, [r7, #4]
  20781. 8008fd6: 681b ldr r3, [r3, #0]
  20782. 8008fd8: 4a31 ldr r2, [pc, #196] @ (80090a0 <HAL_DMA_Abort_IT+0x3c4>)
  20783. 8008fda: 4293 cmp r3, r2
  20784. 8008fdc: d04f beq.n 800907e <HAL_DMA_Abort_IT+0x3a2>
  20785. 8008fde: 687b ldr r3, [r7, #4]
  20786. 8008fe0: 681b ldr r3, [r3, #0]
  20787. 8008fe2: 4a30 ldr r2, [pc, #192] @ (80090a4 <HAL_DMA_Abort_IT+0x3c8>)
  20788. 8008fe4: 4293 cmp r3, r2
  20789. 8008fe6: d04a beq.n 800907e <HAL_DMA_Abort_IT+0x3a2>
  20790. 8008fe8: 687b ldr r3, [r7, #4]
  20791. 8008fea: 681b ldr r3, [r3, #0]
  20792. 8008fec: 4a2e ldr r2, [pc, #184] @ (80090a8 <HAL_DMA_Abort_IT+0x3cc>)
  20793. 8008fee: 4293 cmp r3, r2
  20794. 8008ff0: d045 beq.n 800907e <HAL_DMA_Abort_IT+0x3a2>
  20795. 8008ff2: 687b ldr r3, [r7, #4]
  20796. 8008ff4: 681b ldr r3, [r3, #0]
  20797. 8008ff6: 4a2d ldr r2, [pc, #180] @ (80090ac <HAL_DMA_Abort_IT+0x3d0>)
  20798. 8008ff8: 4293 cmp r3, r2
  20799. 8008ffa: d040 beq.n 800907e <HAL_DMA_Abort_IT+0x3a2>
  20800. 8008ffc: 687b ldr r3, [r7, #4]
  20801. 8008ffe: 681b ldr r3, [r3, #0]
  20802. 8009000: 4a2b ldr r2, [pc, #172] @ (80090b0 <HAL_DMA_Abort_IT+0x3d4>)
  20803. 8009002: 4293 cmp r3, r2
  20804. 8009004: d03b beq.n 800907e <HAL_DMA_Abort_IT+0x3a2>
  20805. 8009006: 687b ldr r3, [r7, #4]
  20806. 8009008: 681b ldr r3, [r3, #0]
  20807. 800900a: 4a2a ldr r2, [pc, #168] @ (80090b4 <HAL_DMA_Abort_IT+0x3d8>)
  20808. 800900c: 4293 cmp r3, r2
  20809. 800900e: d036 beq.n 800907e <HAL_DMA_Abort_IT+0x3a2>
  20810. 8009010: 687b ldr r3, [r7, #4]
  20811. 8009012: 681b ldr r3, [r3, #0]
  20812. 8009014: 4a28 ldr r2, [pc, #160] @ (80090b8 <HAL_DMA_Abort_IT+0x3dc>)
  20813. 8009016: 4293 cmp r3, r2
  20814. 8009018: d031 beq.n 800907e <HAL_DMA_Abort_IT+0x3a2>
  20815. 800901a: 687b ldr r3, [r7, #4]
  20816. 800901c: 681b ldr r3, [r3, #0]
  20817. 800901e: 4a27 ldr r2, [pc, #156] @ (80090bc <HAL_DMA_Abort_IT+0x3e0>)
  20818. 8009020: 4293 cmp r3, r2
  20819. 8009022: d02c beq.n 800907e <HAL_DMA_Abort_IT+0x3a2>
  20820. 8009024: 687b ldr r3, [r7, #4]
  20821. 8009026: 681b ldr r3, [r3, #0]
  20822. 8009028: 4a25 ldr r2, [pc, #148] @ (80090c0 <HAL_DMA_Abort_IT+0x3e4>)
  20823. 800902a: 4293 cmp r3, r2
  20824. 800902c: d027 beq.n 800907e <HAL_DMA_Abort_IT+0x3a2>
  20825. 800902e: 687b ldr r3, [r7, #4]
  20826. 8009030: 681b ldr r3, [r3, #0]
  20827. 8009032: 4a24 ldr r2, [pc, #144] @ (80090c4 <HAL_DMA_Abort_IT+0x3e8>)
  20828. 8009034: 4293 cmp r3, r2
  20829. 8009036: d022 beq.n 800907e <HAL_DMA_Abort_IT+0x3a2>
  20830. 8009038: 687b ldr r3, [r7, #4]
  20831. 800903a: 681b ldr r3, [r3, #0]
  20832. 800903c: 4a22 ldr r2, [pc, #136] @ (80090c8 <HAL_DMA_Abort_IT+0x3ec>)
  20833. 800903e: 4293 cmp r3, r2
  20834. 8009040: d01d beq.n 800907e <HAL_DMA_Abort_IT+0x3a2>
  20835. 8009042: 687b ldr r3, [r7, #4]
  20836. 8009044: 681b ldr r3, [r3, #0]
  20837. 8009046: 4a21 ldr r2, [pc, #132] @ (80090cc <HAL_DMA_Abort_IT+0x3f0>)
  20838. 8009048: 4293 cmp r3, r2
  20839. 800904a: d018 beq.n 800907e <HAL_DMA_Abort_IT+0x3a2>
  20840. 800904c: 687b ldr r3, [r7, #4]
  20841. 800904e: 681b ldr r3, [r3, #0]
  20842. 8009050: 4a1f ldr r2, [pc, #124] @ (80090d0 <HAL_DMA_Abort_IT+0x3f4>)
  20843. 8009052: 4293 cmp r3, r2
  20844. 8009054: d013 beq.n 800907e <HAL_DMA_Abort_IT+0x3a2>
  20845. 8009056: 687b ldr r3, [r7, #4]
  20846. 8009058: 681b ldr r3, [r3, #0]
  20847. 800905a: 4a1e ldr r2, [pc, #120] @ (80090d4 <HAL_DMA_Abort_IT+0x3f8>)
  20848. 800905c: 4293 cmp r3, r2
  20849. 800905e: d00e beq.n 800907e <HAL_DMA_Abort_IT+0x3a2>
  20850. 8009060: 687b ldr r3, [r7, #4]
  20851. 8009062: 681b ldr r3, [r3, #0]
  20852. 8009064: 4a1c ldr r2, [pc, #112] @ (80090d8 <HAL_DMA_Abort_IT+0x3fc>)
  20853. 8009066: 4293 cmp r3, r2
  20854. 8009068: d009 beq.n 800907e <HAL_DMA_Abort_IT+0x3a2>
  20855. 800906a: 687b ldr r3, [r7, #4]
  20856. 800906c: 681b ldr r3, [r3, #0]
  20857. 800906e: 4a1b ldr r2, [pc, #108] @ (80090dc <HAL_DMA_Abort_IT+0x400>)
  20858. 8009070: 4293 cmp r3, r2
  20859. 8009072: d004 beq.n 800907e <HAL_DMA_Abort_IT+0x3a2>
  20860. 8009074: 687b ldr r3, [r7, #4]
  20861. 8009076: 681b ldr r3, [r3, #0]
  20862. 8009078: 4a19 ldr r2, [pc, #100] @ (80090e0 <HAL_DMA_Abort_IT+0x404>)
  20863. 800907a: 4293 cmp r3, r2
  20864. 800907c: d132 bne.n 80090e4 <HAL_DMA_Abort_IT+0x408>
  20865. 800907e: 2301 movs r3, #1
  20866. 8009080: e031 b.n 80090e6 <HAL_DMA_Abort_IT+0x40a>
  20867. 8009082: bf00 nop
  20868. 8009084: 40020010 .word 0x40020010
  20869. 8009088: 40020028 .word 0x40020028
  20870. 800908c: 40020040 .word 0x40020040
  20871. 8009090: 40020058 .word 0x40020058
  20872. 8009094: 40020070 .word 0x40020070
  20873. 8009098: 40020088 .word 0x40020088
  20874. 800909c: 400200a0 .word 0x400200a0
  20875. 80090a0: 400200b8 .word 0x400200b8
  20876. 80090a4: 40020410 .word 0x40020410
  20877. 80090a8: 40020428 .word 0x40020428
  20878. 80090ac: 40020440 .word 0x40020440
  20879. 80090b0: 40020458 .word 0x40020458
  20880. 80090b4: 40020470 .word 0x40020470
  20881. 80090b8: 40020488 .word 0x40020488
  20882. 80090bc: 400204a0 .word 0x400204a0
  20883. 80090c0: 400204b8 .word 0x400204b8
  20884. 80090c4: 58025408 .word 0x58025408
  20885. 80090c8: 5802541c .word 0x5802541c
  20886. 80090cc: 58025430 .word 0x58025430
  20887. 80090d0: 58025444 .word 0x58025444
  20888. 80090d4: 58025458 .word 0x58025458
  20889. 80090d8: 5802546c .word 0x5802546c
  20890. 80090dc: 58025480 .word 0x58025480
  20891. 80090e0: 58025494 .word 0x58025494
  20892. 80090e4: 2300 movs r3, #0
  20893. 80090e6: 2b00 cmp r3, #0
  20894. 80090e8: d028 beq.n 800913c <HAL_DMA_Abort_IT+0x460>
  20895. {
  20896. /* disable the DMAMUX sync overrun IT */
  20897. hdma->DMAmuxChannel->CCR &= ~DMAMUX_CxCR_SOIE;
  20898. 80090ea: 687b ldr r3, [r7, #4]
  20899. 80090ec: 6e1b ldr r3, [r3, #96] @ 0x60
  20900. 80090ee: 681a ldr r2, [r3, #0]
  20901. 80090f0: 687b ldr r3, [r7, #4]
  20902. 80090f2: 6e1b ldr r3, [r3, #96] @ 0x60
  20903. 80090f4: f422 7280 bic.w r2, r2, #256 @ 0x100
  20904. 80090f8: 601a str r2, [r3, #0]
  20905. /* Clear all flags */
  20906. regs_bdma = (BDMA_Base_Registers *)hdma->StreamBaseAddress;
  20907. 80090fa: 687b ldr r3, [r7, #4]
  20908. 80090fc: 6d9b ldr r3, [r3, #88] @ 0x58
  20909. 80090fe: 60fb str r3, [r7, #12]
  20910. regs_bdma->IFCR = ((BDMA_IFCR_CGIF0) << (hdma->StreamIndex & 0x1FU));
  20911. 8009100: 687b ldr r3, [r7, #4]
  20912. 8009102: 6ddb ldr r3, [r3, #92] @ 0x5c
  20913. 8009104: f003 031f and.w r3, r3, #31
  20914. 8009108: 2201 movs r2, #1
  20915. 800910a: 409a lsls r2, r3
  20916. 800910c: 68fb ldr r3, [r7, #12]
  20917. 800910e: 605a str r2, [r3, #4]
  20918. /* Clear the DMAMUX synchro overrun flag */
  20919. hdma->DMAmuxChannelStatus->CFR = hdma->DMAmuxChannelStatusMask;
  20920. 8009110: 687b ldr r3, [r7, #4]
  20921. 8009112: 6e5b ldr r3, [r3, #100] @ 0x64
  20922. 8009114: 687a ldr r2, [r7, #4]
  20923. 8009116: 6e92 ldr r2, [r2, #104] @ 0x68
  20924. 8009118: 605a str r2, [r3, #4]
  20925. if(hdma->DMAmuxRequestGen != 0U)
  20926. 800911a: 687b ldr r3, [r7, #4]
  20927. 800911c: 6edb ldr r3, [r3, #108] @ 0x6c
  20928. 800911e: 2b00 cmp r3, #0
  20929. 8009120: d00c beq.n 800913c <HAL_DMA_Abort_IT+0x460>
  20930. {
  20931. /* if using DMAMUX request generator, disable the DMAMUX request generator overrun IT*/
  20932. /* disable the request gen overrun IT */
  20933. hdma->DMAmuxRequestGen->RGCR &= ~DMAMUX_RGxCR_OIE;
  20934. 8009122: 687b ldr r3, [r7, #4]
  20935. 8009124: 6edb ldr r3, [r3, #108] @ 0x6c
  20936. 8009126: 681a ldr r2, [r3, #0]
  20937. 8009128: 687b ldr r3, [r7, #4]
  20938. 800912a: 6edb ldr r3, [r3, #108] @ 0x6c
  20939. 800912c: f422 7280 bic.w r2, r2, #256 @ 0x100
  20940. 8009130: 601a str r2, [r3, #0]
  20941. /* Clear the DMAMUX request generator overrun flag */
  20942. hdma->DMAmuxRequestGenStatus->RGCFR = hdma->DMAmuxRequestGenStatusMask;
  20943. 8009132: 687b ldr r3, [r7, #4]
  20944. 8009134: 6f1b ldr r3, [r3, #112] @ 0x70
  20945. 8009136: 687a ldr r2, [r7, #4]
  20946. 8009138: 6f52 ldr r2, [r2, #116] @ 0x74
  20947. 800913a: 605a str r2, [r3, #4]
  20948. }
  20949. }
  20950. /* Change the DMA state */
  20951. hdma->State = HAL_DMA_STATE_READY;
  20952. 800913c: 687b ldr r3, [r7, #4]
  20953. 800913e: 2201 movs r2, #1
  20954. 8009140: f883 2035 strb.w r2, [r3, #53] @ 0x35
  20955. /* Process Unlocked */
  20956. __HAL_UNLOCK(hdma);
  20957. 8009144: 687b ldr r3, [r7, #4]
  20958. 8009146: 2200 movs r2, #0
  20959. 8009148: f883 2034 strb.w r2, [r3, #52] @ 0x34
  20960. /* Call User Abort callback */
  20961. if(hdma->XferAbortCallback != NULL)
  20962. 800914c: 687b ldr r3, [r7, #4]
  20963. 800914e: 6d1b ldr r3, [r3, #80] @ 0x50
  20964. 8009150: 2b00 cmp r3, #0
  20965. 8009152: d003 beq.n 800915c <HAL_DMA_Abort_IT+0x480>
  20966. {
  20967. hdma->XferAbortCallback(hdma);
  20968. 8009154: 687b ldr r3, [r7, #4]
  20969. 8009156: 6d1b ldr r3, [r3, #80] @ 0x50
  20970. 8009158: 6878 ldr r0, [r7, #4]
  20971. 800915a: 4798 blx r3
  20972. }
  20973. }
  20974. }
  20975. return HAL_OK;
  20976. 800915c: 2300 movs r3, #0
  20977. }
  20978. 800915e: 4618 mov r0, r3
  20979. 8009160: 3710 adds r7, #16
  20980. 8009162: 46bd mov sp, r7
  20981. 8009164: bd80 pop {r7, pc}
  20982. 8009166: bf00 nop
  20983. 08009168 <HAL_DMA_IRQHandler>:
  20984. * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
  20985. * the configuration information for the specified DMA Stream.
  20986. * @retval None
  20987. */
  20988. void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma)
  20989. {
  20990. 8009168: b580 push {r7, lr}
  20991. 800916a: b08a sub sp, #40 @ 0x28
  20992. 800916c: af00 add r7, sp, #0
  20993. 800916e: 6078 str r0, [r7, #4]
  20994. uint32_t tmpisr_dma, tmpisr_bdma;
  20995. uint32_t ccr_reg;
  20996. __IO uint32_t count = 0U;
  20997. 8009170: 2300 movs r3, #0
  20998. 8009172: 60fb str r3, [r7, #12]
  20999. uint32_t timeout = SystemCoreClock / 9600U;
  21000. 8009174: 4b67 ldr r3, [pc, #412] @ (8009314 <HAL_DMA_IRQHandler+0x1ac>)
  21001. 8009176: 681b ldr r3, [r3, #0]
  21002. 8009178: 4a67 ldr r2, [pc, #412] @ (8009318 <HAL_DMA_IRQHandler+0x1b0>)
  21003. 800917a: fba2 2303 umull r2, r3, r2, r3
  21004. 800917e: 0a9b lsrs r3, r3, #10
  21005. 8009180: 627b str r3, [r7, #36] @ 0x24
  21006. /* calculate DMA base and stream number */
  21007. DMA_Base_Registers *regs_dma = (DMA_Base_Registers *)hdma->StreamBaseAddress;
  21008. 8009182: 687b ldr r3, [r7, #4]
  21009. 8009184: 6d9b ldr r3, [r3, #88] @ 0x58
  21010. 8009186: 623b str r3, [r7, #32]
  21011. BDMA_Base_Registers *regs_bdma = (BDMA_Base_Registers *)hdma->StreamBaseAddress;
  21012. 8009188: 687b ldr r3, [r7, #4]
  21013. 800918a: 6d9b ldr r3, [r3, #88] @ 0x58
  21014. 800918c: 61fb str r3, [r7, #28]
  21015. tmpisr_dma = regs_dma->ISR;
  21016. 800918e: 6a3b ldr r3, [r7, #32]
  21017. 8009190: 681b ldr r3, [r3, #0]
  21018. 8009192: 61bb str r3, [r7, #24]
  21019. tmpisr_bdma = regs_bdma->ISR;
  21020. 8009194: 69fb ldr r3, [r7, #28]
  21021. 8009196: 681b ldr r3, [r3, #0]
  21022. 8009198: 617b str r3, [r7, #20]
  21023. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  21024. 800919a: 687b ldr r3, [r7, #4]
  21025. 800919c: 681b ldr r3, [r3, #0]
  21026. 800919e: 4a5f ldr r2, [pc, #380] @ (800931c <HAL_DMA_IRQHandler+0x1b4>)
  21027. 80091a0: 4293 cmp r3, r2
  21028. 80091a2: d04a beq.n 800923a <HAL_DMA_IRQHandler+0xd2>
  21029. 80091a4: 687b ldr r3, [r7, #4]
  21030. 80091a6: 681b ldr r3, [r3, #0]
  21031. 80091a8: 4a5d ldr r2, [pc, #372] @ (8009320 <HAL_DMA_IRQHandler+0x1b8>)
  21032. 80091aa: 4293 cmp r3, r2
  21033. 80091ac: d045 beq.n 800923a <HAL_DMA_IRQHandler+0xd2>
  21034. 80091ae: 687b ldr r3, [r7, #4]
  21035. 80091b0: 681b ldr r3, [r3, #0]
  21036. 80091b2: 4a5c ldr r2, [pc, #368] @ (8009324 <HAL_DMA_IRQHandler+0x1bc>)
  21037. 80091b4: 4293 cmp r3, r2
  21038. 80091b6: d040 beq.n 800923a <HAL_DMA_IRQHandler+0xd2>
  21039. 80091b8: 687b ldr r3, [r7, #4]
  21040. 80091ba: 681b ldr r3, [r3, #0]
  21041. 80091bc: 4a5a ldr r2, [pc, #360] @ (8009328 <HAL_DMA_IRQHandler+0x1c0>)
  21042. 80091be: 4293 cmp r3, r2
  21043. 80091c0: d03b beq.n 800923a <HAL_DMA_IRQHandler+0xd2>
  21044. 80091c2: 687b ldr r3, [r7, #4]
  21045. 80091c4: 681b ldr r3, [r3, #0]
  21046. 80091c6: 4a59 ldr r2, [pc, #356] @ (800932c <HAL_DMA_IRQHandler+0x1c4>)
  21047. 80091c8: 4293 cmp r3, r2
  21048. 80091ca: d036 beq.n 800923a <HAL_DMA_IRQHandler+0xd2>
  21049. 80091cc: 687b ldr r3, [r7, #4]
  21050. 80091ce: 681b ldr r3, [r3, #0]
  21051. 80091d0: 4a57 ldr r2, [pc, #348] @ (8009330 <HAL_DMA_IRQHandler+0x1c8>)
  21052. 80091d2: 4293 cmp r3, r2
  21053. 80091d4: d031 beq.n 800923a <HAL_DMA_IRQHandler+0xd2>
  21054. 80091d6: 687b ldr r3, [r7, #4]
  21055. 80091d8: 681b ldr r3, [r3, #0]
  21056. 80091da: 4a56 ldr r2, [pc, #344] @ (8009334 <HAL_DMA_IRQHandler+0x1cc>)
  21057. 80091dc: 4293 cmp r3, r2
  21058. 80091de: d02c beq.n 800923a <HAL_DMA_IRQHandler+0xd2>
  21059. 80091e0: 687b ldr r3, [r7, #4]
  21060. 80091e2: 681b ldr r3, [r3, #0]
  21061. 80091e4: 4a54 ldr r2, [pc, #336] @ (8009338 <HAL_DMA_IRQHandler+0x1d0>)
  21062. 80091e6: 4293 cmp r3, r2
  21063. 80091e8: d027 beq.n 800923a <HAL_DMA_IRQHandler+0xd2>
  21064. 80091ea: 687b ldr r3, [r7, #4]
  21065. 80091ec: 681b ldr r3, [r3, #0]
  21066. 80091ee: 4a53 ldr r2, [pc, #332] @ (800933c <HAL_DMA_IRQHandler+0x1d4>)
  21067. 80091f0: 4293 cmp r3, r2
  21068. 80091f2: d022 beq.n 800923a <HAL_DMA_IRQHandler+0xd2>
  21069. 80091f4: 687b ldr r3, [r7, #4]
  21070. 80091f6: 681b ldr r3, [r3, #0]
  21071. 80091f8: 4a51 ldr r2, [pc, #324] @ (8009340 <HAL_DMA_IRQHandler+0x1d8>)
  21072. 80091fa: 4293 cmp r3, r2
  21073. 80091fc: d01d beq.n 800923a <HAL_DMA_IRQHandler+0xd2>
  21074. 80091fe: 687b ldr r3, [r7, #4]
  21075. 8009200: 681b ldr r3, [r3, #0]
  21076. 8009202: 4a50 ldr r2, [pc, #320] @ (8009344 <HAL_DMA_IRQHandler+0x1dc>)
  21077. 8009204: 4293 cmp r3, r2
  21078. 8009206: d018 beq.n 800923a <HAL_DMA_IRQHandler+0xd2>
  21079. 8009208: 687b ldr r3, [r7, #4]
  21080. 800920a: 681b ldr r3, [r3, #0]
  21081. 800920c: 4a4e ldr r2, [pc, #312] @ (8009348 <HAL_DMA_IRQHandler+0x1e0>)
  21082. 800920e: 4293 cmp r3, r2
  21083. 8009210: d013 beq.n 800923a <HAL_DMA_IRQHandler+0xd2>
  21084. 8009212: 687b ldr r3, [r7, #4]
  21085. 8009214: 681b ldr r3, [r3, #0]
  21086. 8009216: 4a4d ldr r2, [pc, #308] @ (800934c <HAL_DMA_IRQHandler+0x1e4>)
  21087. 8009218: 4293 cmp r3, r2
  21088. 800921a: d00e beq.n 800923a <HAL_DMA_IRQHandler+0xd2>
  21089. 800921c: 687b ldr r3, [r7, #4]
  21090. 800921e: 681b ldr r3, [r3, #0]
  21091. 8009220: 4a4b ldr r2, [pc, #300] @ (8009350 <HAL_DMA_IRQHandler+0x1e8>)
  21092. 8009222: 4293 cmp r3, r2
  21093. 8009224: d009 beq.n 800923a <HAL_DMA_IRQHandler+0xd2>
  21094. 8009226: 687b ldr r3, [r7, #4]
  21095. 8009228: 681b ldr r3, [r3, #0]
  21096. 800922a: 4a4a ldr r2, [pc, #296] @ (8009354 <HAL_DMA_IRQHandler+0x1ec>)
  21097. 800922c: 4293 cmp r3, r2
  21098. 800922e: d004 beq.n 800923a <HAL_DMA_IRQHandler+0xd2>
  21099. 8009230: 687b ldr r3, [r7, #4]
  21100. 8009232: 681b ldr r3, [r3, #0]
  21101. 8009234: 4a48 ldr r2, [pc, #288] @ (8009358 <HAL_DMA_IRQHandler+0x1f0>)
  21102. 8009236: 4293 cmp r3, r2
  21103. 8009238: d101 bne.n 800923e <HAL_DMA_IRQHandler+0xd6>
  21104. 800923a: 2301 movs r3, #1
  21105. 800923c: e000 b.n 8009240 <HAL_DMA_IRQHandler+0xd8>
  21106. 800923e: 2300 movs r3, #0
  21107. 8009240: 2b00 cmp r3, #0
  21108. 8009242: f000 842b beq.w 8009a9c <HAL_DMA_IRQHandler+0x934>
  21109. {
  21110. /* Transfer Error Interrupt management ***************************************/
  21111. if ((tmpisr_dma & (DMA_FLAG_TEIF0_4 << (hdma->StreamIndex & 0x1FU))) != 0U)
  21112. 8009246: 687b ldr r3, [r7, #4]
  21113. 8009248: 6ddb ldr r3, [r3, #92] @ 0x5c
  21114. 800924a: f003 031f and.w r3, r3, #31
  21115. 800924e: 2208 movs r2, #8
  21116. 8009250: 409a lsls r2, r3
  21117. 8009252: 69bb ldr r3, [r7, #24]
  21118. 8009254: 4013 ands r3, r2
  21119. 8009256: 2b00 cmp r3, #0
  21120. 8009258: f000 80a2 beq.w 80093a0 <HAL_DMA_IRQHandler+0x238>
  21121. {
  21122. if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_TE) != 0U)
  21123. 800925c: 687b ldr r3, [r7, #4]
  21124. 800925e: 681b ldr r3, [r3, #0]
  21125. 8009260: 4a2e ldr r2, [pc, #184] @ (800931c <HAL_DMA_IRQHandler+0x1b4>)
  21126. 8009262: 4293 cmp r3, r2
  21127. 8009264: d04a beq.n 80092fc <HAL_DMA_IRQHandler+0x194>
  21128. 8009266: 687b ldr r3, [r7, #4]
  21129. 8009268: 681b ldr r3, [r3, #0]
  21130. 800926a: 4a2d ldr r2, [pc, #180] @ (8009320 <HAL_DMA_IRQHandler+0x1b8>)
  21131. 800926c: 4293 cmp r3, r2
  21132. 800926e: d045 beq.n 80092fc <HAL_DMA_IRQHandler+0x194>
  21133. 8009270: 687b ldr r3, [r7, #4]
  21134. 8009272: 681b ldr r3, [r3, #0]
  21135. 8009274: 4a2b ldr r2, [pc, #172] @ (8009324 <HAL_DMA_IRQHandler+0x1bc>)
  21136. 8009276: 4293 cmp r3, r2
  21137. 8009278: d040 beq.n 80092fc <HAL_DMA_IRQHandler+0x194>
  21138. 800927a: 687b ldr r3, [r7, #4]
  21139. 800927c: 681b ldr r3, [r3, #0]
  21140. 800927e: 4a2a ldr r2, [pc, #168] @ (8009328 <HAL_DMA_IRQHandler+0x1c0>)
  21141. 8009280: 4293 cmp r3, r2
  21142. 8009282: d03b beq.n 80092fc <HAL_DMA_IRQHandler+0x194>
  21143. 8009284: 687b ldr r3, [r7, #4]
  21144. 8009286: 681b ldr r3, [r3, #0]
  21145. 8009288: 4a28 ldr r2, [pc, #160] @ (800932c <HAL_DMA_IRQHandler+0x1c4>)
  21146. 800928a: 4293 cmp r3, r2
  21147. 800928c: d036 beq.n 80092fc <HAL_DMA_IRQHandler+0x194>
  21148. 800928e: 687b ldr r3, [r7, #4]
  21149. 8009290: 681b ldr r3, [r3, #0]
  21150. 8009292: 4a27 ldr r2, [pc, #156] @ (8009330 <HAL_DMA_IRQHandler+0x1c8>)
  21151. 8009294: 4293 cmp r3, r2
  21152. 8009296: d031 beq.n 80092fc <HAL_DMA_IRQHandler+0x194>
  21153. 8009298: 687b ldr r3, [r7, #4]
  21154. 800929a: 681b ldr r3, [r3, #0]
  21155. 800929c: 4a25 ldr r2, [pc, #148] @ (8009334 <HAL_DMA_IRQHandler+0x1cc>)
  21156. 800929e: 4293 cmp r3, r2
  21157. 80092a0: d02c beq.n 80092fc <HAL_DMA_IRQHandler+0x194>
  21158. 80092a2: 687b ldr r3, [r7, #4]
  21159. 80092a4: 681b ldr r3, [r3, #0]
  21160. 80092a6: 4a24 ldr r2, [pc, #144] @ (8009338 <HAL_DMA_IRQHandler+0x1d0>)
  21161. 80092a8: 4293 cmp r3, r2
  21162. 80092aa: d027 beq.n 80092fc <HAL_DMA_IRQHandler+0x194>
  21163. 80092ac: 687b ldr r3, [r7, #4]
  21164. 80092ae: 681b ldr r3, [r3, #0]
  21165. 80092b0: 4a22 ldr r2, [pc, #136] @ (800933c <HAL_DMA_IRQHandler+0x1d4>)
  21166. 80092b2: 4293 cmp r3, r2
  21167. 80092b4: d022 beq.n 80092fc <HAL_DMA_IRQHandler+0x194>
  21168. 80092b6: 687b ldr r3, [r7, #4]
  21169. 80092b8: 681b ldr r3, [r3, #0]
  21170. 80092ba: 4a21 ldr r2, [pc, #132] @ (8009340 <HAL_DMA_IRQHandler+0x1d8>)
  21171. 80092bc: 4293 cmp r3, r2
  21172. 80092be: d01d beq.n 80092fc <HAL_DMA_IRQHandler+0x194>
  21173. 80092c0: 687b ldr r3, [r7, #4]
  21174. 80092c2: 681b ldr r3, [r3, #0]
  21175. 80092c4: 4a1f ldr r2, [pc, #124] @ (8009344 <HAL_DMA_IRQHandler+0x1dc>)
  21176. 80092c6: 4293 cmp r3, r2
  21177. 80092c8: d018 beq.n 80092fc <HAL_DMA_IRQHandler+0x194>
  21178. 80092ca: 687b ldr r3, [r7, #4]
  21179. 80092cc: 681b ldr r3, [r3, #0]
  21180. 80092ce: 4a1e ldr r2, [pc, #120] @ (8009348 <HAL_DMA_IRQHandler+0x1e0>)
  21181. 80092d0: 4293 cmp r3, r2
  21182. 80092d2: d013 beq.n 80092fc <HAL_DMA_IRQHandler+0x194>
  21183. 80092d4: 687b ldr r3, [r7, #4]
  21184. 80092d6: 681b ldr r3, [r3, #0]
  21185. 80092d8: 4a1c ldr r2, [pc, #112] @ (800934c <HAL_DMA_IRQHandler+0x1e4>)
  21186. 80092da: 4293 cmp r3, r2
  21187. 80092dc: d00e beq.n 80092fc <HAL_DMA_IRQHandler+0x194>
  21188. 80092de: 687b ldr r3, [r7, #4]
  21189. 80092e0: 681b ldr r3, [r3, #0]
  21190. 80092e2: 4a1b ldr r2, [pc, #108] @ (8009350 <HAL_DMA_IRQHandler+0x1e8>)
  21191. 80092e4: 4293 cmp r3, r2
  21192. 80092e6: d009 beq.n 80092fc <HAL_DMA_IRQHandler+0x194>
  21193. 80092e8: 687b ldr r3, [r7, #4]
  21194. 80092ea: 681b ldr r3, [r3, #0]
  21195. 80092ec: 4a19 ldr r2, [pc, #100] @ (8009354 <HAL_DMA_IRQHandler+0x1ec>)
  21196. 80092ee: 4293 cmp r3, r2
  21197. 80092f0: d004 beq.n 80092fc <HAL_DMA_IRQHandler+0x194>
  21198. 80092f2: 687b ldr r3, [r7, #4]
  21199. 80092f4: 681b ldr r3, [r3, #0]
  21200. 80092f6: 4a18 ldr r2, [pc, #96] @ (8009358 <HAL_DMA_IRQHandler+0x1f0>)
  21201. 80092f8: 4293 cmp r3, r2
  21202. 80092fa: d12f bne.n 800935c <HAL_DMA_IRQHandler+0x1f4>
  21203. 80092fc: 687b ldr r3, [r7, #4]
  21204. 80092fe: 681b ldr r3, [r3, #0]
  21205. 8009300: 681b ldr r3, [r3, #0]
  21206. 8009302: f003 0304 and.w r3, r3, #4
  21207. 8009306: 2b00 cmp r3, #0
  21208. 8009308: bf14 ite ne
  21209. 800930a: 2301 movne r3, #1
  21210. 800930c: 2300 moveq r3, #0
  21211. 800930e: b2db uxtb r3, r3
  21212. 8009310: e02e b.n 8009370 <HAL_DMA_IRQHandler+0x208>
  21213. 8009312: bf00 nop
  21214. 8009314: 24000034 .word 0x24000034
  21215. 8009318: 1b4e81b5 .word 0x1b4e81b5
  21216. 800931c: 40020010 .word 0x40020010
  21217. 8009320: 40020028 .word 0x40020028
  21218. 8009324: 40020040 .word 0x40020040
  21219. 8009328: 40020058 .word 0x40020058
  21220. 800932c: 40020070 .word 0x40020070
  21221. 8009330: 40020088 .word 0x40020088
  21222. 8009334: 400200a0 .word 0x400200a0
  21223. 8009338: 400200b8 .word 0x400200b8
  21224. 800933c: 40020410 .word 0x40020410
  21225. 8009340: 40020428 .word 0x40020428
  21226. 8009344: 40020440 .word 0x40020440
  21227. 8009348: 40020458 .word 0x40020458
  21228. 800934c: 40020470 .word 0x40020470
  21229. 8009350: 40020488 .word 0x40020488
  21230. 8009354: 400204a0 .word 0x400204a0
  21231. 8009358: 400204b8 .word 0x400204b8
  21232. 800935c: 687b ldr r3, [r7, #4]
  21233. 800935e: 681b ldr r3, [r3, #0]
  21234. 8009360: 681b ldr r3, [r3, #0]
  21235. 8009362: f003 0308 and.w r3, r3, #8
  21236. 8009366: 2b00 cmp r3, #0
  21237. 8009368: bf14 ite ne
  21238. 800936a: 2301 movne r3, #1
  21239. 800936c: 2300 moveq r3, #0
  21240. 800936e: b2db uxtb r3, r3
  21241. 8009370: 2b00 cmp r3, #0
  21242. 8009372: d015 beq.n 80093a0 <HAL_DMA_IRQHandler+0x238>
  21243. {
  21244. /* Disable the transfer error interrupt */
  21245. ((DMA_Stream_TypeDef *)hdma->Instance)->CR &= ~(DMA_IT_TE);
  21246. 8009374: 687b ldr r3, [r7, #4]
  21247. 8009376: 681b ldr r3, [r3, #0]
  21248. 8009378: 681a ldr r2, [r3, #0]
  21249. 800937a: 687b ldr r3, [r7, #4]
  21250. 800937c: 681b ldr r3, [r3, #0]
  21251. 800937e: f022 0204 bic.w r2, r2, #4
  21252. 8009382: 601a str r2, [r3, #0]
  21253. /* Clear the transfer error flag */
  21254. regs_dma->IFCR = DMA_FLAG_TEIF0_4 << (hdma->StreamIndex & 0x1FU);
  21255. 8009384: 687b ldr r3, [r7, #4]
  21256. 8009386: 6ddb ldr r3, [r3, #92] @ 0x5c
  21257. 8009388: f003 031f and.w r3, r3, #31
  21258. 800938c: 2208 movs r2, #8
  21259. 800938e: 409a lsls r2, r3
  21260. 8009390: 6a3b ldr r3, [r7, #32]
  21261. 8009392: 609a str r2, [r3, #8]
  21262. /* Update error code */
  21263. hdma->ErrorCode |= HAL_DMA_ERROR_TE;
  21264. 8009394: 687b ldr r3, [r7, #4]
  21265. 8009396: 6d5b ldr r3, [r3, #84] @ 0x54
  21266. 8009398: f043 0201 orr.w r2, r3, #1
  21267. 800939c: 687b ldr r3, [r7, #4]
  21268. 800939e: 655a str r2, [r3, #84] @ 0x54
  21269. }
  21270. }
  21271. /* FIFO Error Interrupt management ******************************************/
  21272. if ((tmpisr_dma & (DMA_FLAG_FEIF0_4 << (hdma->StreamIndex & 0x1FU))) != 0U)
  21273. 80093a0: 687b ldr r3, [r7, #4]
  21274. 80093a2: 6ddb ldr r3, [r3, #92] @ 0x5c
  21275. 80093a4: f003 031f and.w r3, r3, #31
  21276. 80093a8: 69ba ldr r2, [r7, #24]
  21277. 80093aa: fa22 f303 lsr.w r3, r2, r3
  21278. 80093ae: f003 0301 and.w r3, r3, #1
  21279. 80093b2: 2b00 cmp r3, #0
  21280. 80093b4: d06e beq.n 8009494 <HAL_DMA_IRQHandler+0x32c>
  21281. {
  21282. if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_FE) != 0U)
  21283. 80093b6: 687b ldr r3, [r7, #4]
  21284. 80093b8: 681b ldr r3, [r3, #0]
  21285. 80093ba: 4a69 ldr r2, [pc, #420] @ (8009560 <HAL_DMA_IRQHandler+0x3f8>)
  21286. 80093bc: 4293 cmp r3, r2
  21287. 80093be: d04a beq.n 8009456 <HAL_DMA_IRQHandler+0x2ee>
  21288. 80093c0: 687b ldr r3, [r7, #4]
  21289. 80093c2: 681b ldr r3, [r3, #0]
  21290. 80093c4: 4a67 ldr r2, [pc, #412] @ (8009564 <HAL_DMA_IRQHandler+0x3fc>)
  21291. 80093c6: 4293 cmp r3, r2
  21292. 80093c8: d045 beq.n 8009456 <HAL_DMA_IRQHandler+0x2ee>
  21293. 80093ca: 687b ldr r3, [r7, #4]
  21294. 80093cc: 681b ldr r3, [r3, #0]
  21295. 80093ce: 4a66 ldr r2, [pc, #408] @ (8009568 <HAL_DMA_IRQHandler+0x400>)
  21296. 80093d0: 4293 cmp r3, r2
  21297. 80093d2: d040 beq.n 8009456 <HAL_DMA_IRQHandler+0x2ee>
  21298. 80093d4: 687b ldr r3, [r7, #4]
  21299. 80093d6: 681b ldr r3, [r3, #0]
  21300. 80093d8: 4a64 ldr r2, [pc, #400] @ (800956c <HAL_DMA_IRQHandler+0x404>)
  21301. 80093da: 4293 cmp r3, r2
  21302. 80093dc: d03b beq.n 8009456 <HAL_DMA_IRQHandler+0x2ee>
  21303. 80093de: 687b ldr r3, [r7, #4]
  21304. 80093e0: 681b ldr r3, [r3, #0]
  21305. 80093e2: 4a63 ldr r2, [pc, #396] @ (8009570 <HAL_DMA_IRQHandler+0x408>)
  21306. 80093e4: 4293 cmp r3, r2
  21307. 80093e6: d036 beq.n 8009456 <HAL_DMA_IRQHandler+0x2ee>
  21308. 80093e8: 687b ldr r3, [r7, #4]
  21309. 80093ea: 681b ldr r3, [r3, #0]
  21310. 80093ec: 4a61 ldr r2, [pc, #388] @ (8009574 <HAL_DMA_IRQHandler+0x40c>)
  21311. 80093ee: 4293 cmp r3, r2
  21312. 80093f0: d031 beq.n 8009456 <HAL_DMA_IRQHandler+0x2ee>
  21313. 80093f2: 687b ldr r3, [r7, #4]
  21314. 80093f4: 681b ldr r3, [r3, #0]
  21315. 80093f6: 4a60 ldr r2, [pc, #384] @ (8009578 <HAL_DMA_IRQHandler+0x410>)
  21316. 80093f8: 4293 cmp r3, r2
  21317. 80093fa: d02c beq.n 8009456 <HAL_DMA_IRQHandler+0x2ee>
  21318. 80093fc: 687b ldr r3, [r7, #4]
  21319. 80093fe: 681b ldr r3, [r3, #0]
  21320. 8009400: 4a5e ldr r2, [pc, #376] @ (800957c <HAL_DMA_IRQHandler+0x414>)
  21321. 8009402: 4293 cmp r3, r2
  21322. 8009404: d027 beq.n 8009456 <HAL_DMA_IRQHandler+0x2ee>
  21323. 8009406: 687b ldr r3, [r7, #4]
  21324. 8009408: 681b ldr r3, [r3, #0]
  21325. 800940a: 4a5d ldr r2, [pc, #372] @ (8009580 <HAL_DMA_IRQHandler+0x418>)
  21326. 800940c: 4293 cmp r3, r2
  21327. 800940e: d022 beq.n 8009456 <HAL_DMA_IRQHandler+0x2ee>
  21328. 8009410: 687b ldr r3, [r7, #4]
  21329. 8009412: 681b ldr r3, [r3, #0]
  21330. 8009414: 4a5b ldr r2, [pc, #364] @ (8009584 <HAL_DMA_IRQHandler+0x41c>)
  21331. 8009416: 4293 cmp r3, r2
  21332. 8009418: d01d beq.n 8009456 <HAL_DMA_IRQHandler+0x2ee>
  21333. 800941a: 687b ldr r3, [r7, #4]
  21334. 800941c: 681b ldr r3, [r3, #0]
  21335. 800941e: 4a5a ldr r2, [pc, #360] @ (8009588 <HAL_DMA_IRQHandler+0x420>)
  21336. 8009420: 4293 cmp r3, r2
  21337. 8009422: d018 beq.n 8009456 <HAL_DMA_IRQHandler+0x2ee>
  21338. 8009424: 687b ldr r3, [r7, #4]
  21339. 8009426: 681b ldr r3, [r3, #0]
  21340. 8009428: 4a58 ldr r2, [pc, #352] @ (800958c <HAL_DMA_IRQHandler+0x424>)
  21341. 800942a: 4293 cmp r3, r2
  21342. 800942c: d013 beq.n 8009456 <HAL_DMA_IRQHandler+0x2ee>
  21343. 800942e: 687b ldr r3, [r7, #4]
  21344. 8009430: 681b ldr r3, [r3, #0]
  21345. 8009432: 4a57 ldr r2, [pc, #348] @ (8009590 <HAL_DMA_IRQHandler+0x428>)
  21346. 8009434: 4293 cmp r3, r2
  21347. 8009436: d00e beq.n 8009456 <HAL_DMA_IRQHandler+0x2ee>
  21348. 8009438: 687b ldr r3, [r7, #4]
  21349. 800943a: 681b ldr r3, [r3, #0]
  21350. 800943c: 4a55 ldr r2, [pc, #340] @ (8009594 <HAL_DMA_IRQHandler+0x42c>)
  21351. 800943e: 4293 cmp r3, r2
  21352. 8009440: d009 beq.n 8009456 <HAL_DMA_IRQHandler+0x2ee>
  21353. 8009442: 687b ldr r3, [r7, #4]
  21354. 8009444: 681b ldr r3, [r3, #0]
  21355. 8009446: 4a54 ldr r2, [pc, #336] @ (8009598 <HAL_DMA_IRQHandler+0x430>)
  21356. 8009448: 4293 cmp r3, r2
  21357. 800944a: d004 beq.n 8009456 <HAL_DMA_IRQHandler+0x2ee>
  21358. 800944c: 687b ldr r3, [r7, #4]
  21359. 800944e: 681b ldr r3, [r3, #0]
  21360. 8009450: 4a52 ldr r2, [pc, #328] @ (800959c <HAL_DMA_IRQHandler+0x434>)
  21361. 8009452: 4293 cmp r3, r2
  21362. 8009454: d10a bne.n 800946c <HAL_DMA_IRQHandler+0x304>
  21363. 8009456: 687b ldr r3, [r7, #4]
  21364. 8009458: 681b ldr r3, [r3, #0]
  21365. 800945a: 695b ldr r3, [r3, #20]
  21366. 800945c: f003 0380 and.w r3, r3, #128 @ 0x80
  21367. 8009460: 2b00 cmp r3, #0
  21368. 8009462: bf14 ite ne
  21369. 8009464: 2301 movne r3, #1
  21370. 8009466: 2300 moveq r3, #0
  21371. 8009468: b2db uxtb r3, r3
  21372. 800946a: e003 b.n 8009474 <HAL_DMA_IRQHandler+0x30c>
  21373. 800946c: 687b ldr r3, [r7, #4]
  21374. 800946e: 681b ldr r3, [r3, #0]
  21375. 8009470: 681b ldr r3, [r3, #0]
  21376. 8009472: 2300 movs r3, #0
  21377. 8009474: 2b00 cmp r3, #0
  21378. 8009476: d00d beq.n 8009494 <HAL_DMA_IRQHandler+0x32c>
  21379. {
  21380. /* Clear the FIFO error flag */
  21381. regs_dma->IFCR = DMA_FLAG_FEIF0_4 << (hdma->StreamIndex & 0x1FU);
  21382. 8009478: 687b ldr r3, [r7, #4]
  21383. 800947a: 6ddb ldr r3, [r3, #92] @ 0x5c
  21384. 800947c: f003 031f and.w r3, r3, #31
  21385. 8009480: 2201 movs r2, #1
  21386. 8009482: 409a lsls r2, r3
  21387. 8009484: 6a3b ldr r3, [r7, #32]
  21388. 8009486: 609a str r2, [r3, #8]
  21389. /* Update error code */
  21390. hdma->ErrorCode |= HAL_DMA_ERROR_FE;
  21391. 8009488: 687b ldr r3, [r7, #4]
  21392. 800948a: 6d5b ldr r3, [r3, #84] @ 0x54
  21393. 800948c: f043 0202 orr.w r2, r3, #2
  21394. 8009490: 687b ldr r3, [r7, #4]
  21395. 8009492: 655a str r2, [r3, #84] @ 0x54
  21396. }
  21397. }
  21398. /* Direct Mode Error Interrupt management ***********************************/
  21399. if ((tmpisr_dma & (DMA_FLAG_DMEIF0_4 << (hdma->StreamIndex & 0x1FU))) != 0U)
  21400. 8009494: 687b ldr r3, [r7, #4]
  21401. 8009496: 6ddb ldr r3, [r3, #92] @ 0x5c
  21402. 8009498: f003 031f and.w r3, r3, #31
  21403. 800949c: 2204 movs r2, #4
  21404. 800949e: 409a lsls r2, r3
  21405. 80094a0: 69bb ldr r3, [r7, #24]
  21406. 80094a2: 4013 ands r3, r2
  21407. 80094a4: 2b00 cmp r3, #0
  21408. 80094a6: f000 808f beq.w 80095c8 <HAL_DMA_IRQHandler+0x460>
  21409. {
  21410. if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_DME) != 0U)
  21411. 80094aa: 687b ldr r3, [r7, #4]
  21412. 80094ac: 681b ldr r3, [r3, #0]
  21413. 80094ae: 4a2c ldr r2, [pc, #176] @ (8009560 <HAL_DMA_IRQHandler+0x3f8>)
  21414. 80094b0: 4293 cmp r3, r2
  21415. 80094b2: d04a beq.n 800954a <HAL_DMA_IRQHandler+0x3e2>
  21416. 80094b4: 687b ldr r3, [r7, #4]
  21417. 80094b6: 681b ldr r3, [r3, #0]
  21418. 80094b8: 4a2a ldr r2, [pc, #168] @ (8009564 <HAL_DMA_IRQHandler+0x3fc>)
  21419. 80094ba: 4293 cmp r3, r2
  21420. 80094bc: d045 beq.n 800954a <HAL_DMA_IRQHandler+0x3e2>
  21421. 80094be: 687b ldr r3, [r7, #4]
  21422. 80094c0: 681b ldr r3, [r3, #0]
  21423. 80094c2: 4a29 ldr r2, [pc, #164] @ (8009568 <HAL_DMA_IRQHandler+0x400>)
  21424. 80094c4: 4293 cmp r3, r2
  21425. 80094c6: d040 beq.n 800954a <HAL_DMA_IRQHandler+0x3e2>
  21426. 80094c8: 687b ldr r3, [r7, #4]
  21427. 80094ca: 681b ldr r3, [r3, #0]
  21428. 80094cc: 4a27 ldr r2, [pc, #156] @ (800956c <HAL_DMA_IRQHandler+0x404>)
  21429. 80094ce: 4293 cmp r3, r2
  21430. 80094d0: d03b beq.n 800954a <HAL_DMA_IRQHandler+0x3e2>
  21431. 80094d2: 687b ldr r3, [r7, #4]
  21432. 80094d4: 681b ldr r3, [r3, #0]
  21433. 80094d6: 4a26 ldr r2, [pc, #152] @ (8009570 <HAL_DMA_IRQHandler+0x408>)
  21434. 80094d8: 4293 cmp r3, r2
  21435. 80094da: d036 beq.n 800954a <HAL_DMA_IRQHandler+0x3e2>
  21436. 80094dc: 687b ldr r3, [r7, #4]
  21437. 80094de: 681b ldr r3, [r3, #0]
  21438. 80094e0: 4a24 ldr r2, [pc, #144] @ (8009574 <HAL_DMA_IRQHandler+0x40c>)
  21439. 80094e2: 4293 cmp r3, r2
  21440. 80094e4: d031 beq.n 800954a <HAL_DMA_IRQHandler+0x3e2>
  21441. 80094e6: 687b ldr r3, [r7, #4]
  21442. 80094e8: 681b ldr r3, [r3, #0]
  21443. 80094ea: 4a23 ldr r2, [pc, #140] @ (8009578 <HAL_DMA_IRQHandler+0x410>)
  21444. 80094ec: 4293 cmp r3, r2
  21445. 80094ee: d02c beq.n 800954a <HAL_DMA_IRQHandler+0x3e2>
  21446. 80094f0: 687b ldr r3, [r7, #4]
  21447. 80094f2: 681b ldr r3, [r3, #0]
  21448. 80094f4: 4a21 ldr r2, [pc, #132] @ (800957c <HAL_DMA_IRQHandler+0x414>)
  21449. 80094f6: 4293 cmp r3, r2
  21450. 80094f8: d027 beq.n 800954a <HAL_DMA_IRQHandler+0x3e2>
  21451. 80094fa: 687b ldr r3, [r7, #4]
  21452. 80094fc: 681b ldr r3, [r3, #0]
  21453. 80094fe: 4a20 ldr r2, [pc, #128] @ (8009580 <HAL_DMA_IRQHandler+0x418>)
  21454. 8009500: 4293 cmp r3, r2
  21455. 8009502: d022 beq.n 800954a <HAL_DMA_IRQHandler+0x3e2>
  21456. 8009504: 687b ldr r3, [r7, #4]
  21457. 8009506: 681b ldr r3, [r3, #0]
  21458. 8009508: 4a1e ldr r2, [pc, #120] @ (8009584 <HAL_DMA_IRQHandler+0x41c>)
  21459. 800950a: 4293 cmp r3, r2
  21460. 800950c: d01d beq.n 800954a <HAL_DMA_IRQHandler+0x3e2>
  21461. 800950e: 687b ldr r3, [r7, #4]
  21462. 8009510: 681b ldr r3, [r3, #0]
  21463. 8009512: 4a1d ldr r2, [pc, #116] @ (8009588 <HAL_DMA_IRQHandler+0x420>)
  21464. 8009514: 4293 cmp r3, r2
  21465. 8009516: d018 beq.n 800954a <HAL_DMA_IRQHandler+0x3e2>
  21466. 8009518: 687b ldr r3, [r7, #4]
  21467. 800951a: 681b ldr r3, [r3, #0]
  21468. 800951c: 4a1b ldr r2, [pc, #108] @ (800958c <HAL_DMA_IRQHandler+0x424>)
  21469. 800951e: 4293 cmp r3, r2
  21470. 8009520: d013 beq.n 800954a <HAL_DMA_IRQHandler+0x3e2>
  21471. 8009522: 687b ldr r3, [r7, #4]
  21472. 8009524: 681b ldr r3, [r3, #0]
  21473. 8009526: 4a1a ldr r2, [pc, #104] @ (8009590 <HAL_DMA_IRQHandler+0x428>)
  21474. 8009528: 4293 cmp r3, r2
  21475. 800952a: d00e beq.n 800954a <HAL_DMA_IRQHandler+0x3e2>
  21476. 800952c: 687b ldr r3, [r7, #4]
  21477. 800952e: 681b ldr r3, [r3, #0]
  21478. 8009530: 4a18 ldr r2, [pc, #96] @ (8009594 <HAL_DMA_IRQHandler+0x42c>)
  21479. 8009532: 4293 cmp r3, r2
  21480. 8009534: d009 beq.n 800954a <HAL_DMA_IRQHandler+0x3e2>
  21481. 8009536: 687b ldr r3, [r7, #4]
  21482. 8009538: 681b ldr r3, [r3, #0]
  21483. 800953a: 4a17 ldr r2, [pc, #92] @ (8009598 <HAL_DMA_IRQHandler+0x430>)
  21484. 800953c: 4293 cmp r3, r2
  21485. 800953e: d004 beq.n 800954a <HAL_DMA_IRQHandler+0x3e2>
  21486. 8009540: 687b ldr r3, [r7, #4]
  21487. 8009542: 681b ldr r3, [r3, #0]
  21488. 8009544: 4a15 ldr r2, [pc, #84] @ (800959c <HAL_DMA_IRQHandler+0x434>)
  21489. 8009546: 4293 cmp r3, r2
  21490. 8009548: d12a bne.n 80095a0 <HAL_DMA_IRQHandler+0x438>
  21491. 800954a: 687b ldr r3, [r7, #4]
  21492. 800954c: 681b ldr r3, [r3, #0]
  21493. 800954e: 681b ldr r3, [r3, #0]
  21494. 8009550: f003 0302 and.w r3, r3, #2
  21495. 8009554: 2b00 cmp r3, #0
  21496. 8009556: bf14 ite ne
  21497. 8009558: 2301 movne r3, #1
  21498. 800955a: 2300 moveq r3, #0
  21499. 800955c: b2db uxtb r3, r3
  21500. 800955e: e023 b.n 80095a8 <HAL_DMA_IRQHandler+0x440>
  21501. 8009560: 40020010 .word 0x40020010
  21502. 8009564: 40020028 .word 0x40020028
  21503. 8009568: 40020040 .word 0x40020040
  21504. 800956c: 40020058 .word 0x40020058
  21505. 8009570: 40020070 .word 0x40020070
  21506. 8009574: 40020088 .word 0x40020088
  21507. 8009578: 400200a0 .word 0x400200a0
  21508. 800957c: 400200b8 .word 0x400200b8
  21509. 8009580: 40020410 .word 0x40020410
  21510. 8009584: 40020428 .word 0x40020428
  21511. 8009588: 40020440 .word 0x40020440
  21512. 800958c: 40020458 .word 0x40020458
  21513. 8009590: 40020470 .word 0x40020470
  21514. 8009594: 40020488 .word 0x40020488
  21515. 8009598: 400204a0 .word 0x400204a0
  21516. 800959c: 400204b8 .word 0x400204b8
  21517. 80095a0: 687b ldr r3, [r7, #4]
  21518. 80095a2: 681b ldr r3, [r3, #0]
  21519. 80095a4: 681b ldr r3, [r3, #0]
  21520. 80095a6: 2300 movs r3, #0
  21521. 80095a8: 2b00 cmp r3, #0
  21522. 80095aa: d00d beq.n 80095c8 <HAL_DMA_IRQHandler+0x460>
  21523. {
  21524. /* Clear the direct mode error flag */
  21525. regs_dma->IFCR = DMA_FLAG_DMEIF0_4 << (hdma->StreamIndex & 0x1FU);
  21526. 80095ac: 687b ldr r3, [r7, #4]
  21527. 80095ae: 6ddb ldr r3, [r3, #92] @ 0x5c
  21528. 80095b0: f003 031f and.w r3, r3, #31
  21529. 80095b4: 2204 movs r2, #4
  21530. 80095b6: 409a lsls r2, r3
  21531. 80095b8: 6a3b ldr r3, [r7, #32]
  21532. 80095ba: 609a str r2, [r3, #8]
  21533. /* Update error code */
  21534. hdma->ErrorCode |= HAL_DMA_ERROR_DME;
  21535. 80095bc: 687b ldr r3, [r7, #4]
  21536. 80095be: 6d5b ldr r3, [r3, #84] @ 0x54
  21537. 80095c0: f043 0204 orr.w r2, r3, #4
  21538. 80095c4: 687b ldr r3, [r7, #4]
  21539. 80095c6: 655a str r2, [r3, #84] @ 0x54
  21540. }
  21541. }
  21542. /* Half Transfer Complete Interrupt management ******************************/
  21543. if ((tmpisr_dma & (DMA_FLAG_HTIF0_4 << (hdma->StreamIndex & 0x1FU))) != 0U)
  21544. 80095c8: 687b ldr r3, [r7, #4]
  21545. 80095ca: 6ddb ldr r3, [r3, #92] @ 0x5c
  21546. 80095cc: f003 031f and.w r3, r3, #31
  21547. 80095d0: 2210 movs r2, #16
  21548. 80095d2: 409a lsls r2, r3
  21549. 80095d4: 69bb ldr r3, [r7, #24]
  21550. 80095d6: 4013 ands r3, r2
  21551. 80095d8: 2b00 cmp r3, #0
  21552. 80095da: f000 80a6 beq.w 800972a <HAL_DMA_IRQHandler+0x5c2>
  21553. {
  21554. if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_HT) != 0U)
  21555. 80095de: 687b ldr r3, [r7, #4]
  21556. 80095e0: 681b ldr r3, [r3, #0]
  21557. 80095e2: 4a85 ldr r2, [pc, #532] @ (80097f8 <HAL_DMA_IRQHandler+0x690>)
  21558. 80095e4: 4293 cmp r3, r2
  21559. 80095e6: d04a beq.n 800967e <HAL_DMA_IRQHandler+0x516>
  21560. 80095e8: 687b ldr r3, [r7, #4]
  21561. 80095ea: 681b ldr r3, [r3, #0]
  21562. 80095ec: 4a83 ldr r2, [pc, #524] @ (80097fc <HAL_DMA_IRQHandler+0x694>)
  21563. 80095ee: 4293 cmp r3, r2
  21564. 80095f0: d045 beq.n 800967e <HAL_DMA_IRQHandler+0x516>
  21565. 80095f2: 687b ldr r3, [r7, #4]
  21566. 80095f4: 681b ldr r3, [r3, #0]
  21567. 80095f6: 4a82 ldr r2, [pc, #520] @ (8009800 <HAL_DMA_IRQHandler+0x698>)
  21568. 80095f8: 4293 cmp r3, r2
  21569. 80095fa: d040 beq.n 800967e <HAL_DMA_IRQHandler+0x516>
  21570. 80095fc: 687b ldr r3, [r7, #4]
  21571. 80095fe: 681b ldr r3, [r3, #0]
  21572. 8009600: 4a80 ldr r2, [pc, #512] @ (8009804 <HAL_DMA_IRQHandler+0x69c>)
  21573. 8009602: 4293 cmp r3, r2
  21574. 8009604: d03b beq.n 800967e <HAL_DMA_IRQHandler+0x516>
  21575. 8009606: 687b ldr r3, [r7, #4]
  21576. 8009608: 681b ldr r3, [r3, #0]
  21577. 800960a: 4a7f ldr r2, [pc, #508] @ (8009808 <HAL_DMA_IRQHandler+0x6a0>)
  21578. 800960c: 4293 cmp r3, r2
  21579. 800960e: d036 beq.n 800967e <HAL_DMA_IRQHandler+0x516>
  21580. 8009610: 687b ldr r3, [r7, #4]
  21581. 8009612: 681b ldr r3, [r3, #0]
  21582. 8009614: 4a7d ldr r2, [pc, #500] @ (800980c <HAL_DMA_IRQHandler+0x6a4>)
  21583. 8009616: 4293 cmp r3, r2
  21584. 8009618: d031 beq.n 800967e <HAL_DMA_IRQHandler+0x516>
  21585. 800961a: 687b ldr r3, [r7, #4]
  21586. 800961c: 681b ldr r3, [r3, #0]
  21587. 800961e: 4a7c ldr r2, [pc, #496] @ (8009810 <HAL_DMA_IRQHandler+0x6a8>)
  21588. 8009620: 4293 cmp r3, r2
  21589. 8009622: d02c beq.n 800967e <HAL_DMA_IRQHandler+0x516>
  21590. 8009624: 687b ldr r3, [r7, #4]
  21591. 8009626: 681b ldr r3, [r3, #0]
  21592. 8009628: 4a7a ldr r2, [pc, #488] @ (8009814 <HAL_DMA_IRQHandler+0x6ac>)
  21593. 800962a: 4293 cmp r3, r2
  21594. 800962c: d027 beq.n 800967e <HAL_DMA_IRQHandler+0x516>
  21595. 800962e: 687b ldr r3, [r7, #4]
  21596. 8009630: 681b ldr r3, [r3, #0]
  21597. 8009632: 4a79 ldr r2, [pc, #484] @ (8009818 <HAL_DMA_IRQHandler+0x6b0>)
  21598. 8009634: 4293 cmp r3, r2
  21599. 8009636: d022 beq.n 800967e <HAL_DMA_IRQHandler+0x516>
  21600. 8009638: 687b ldr r3, [r7, #4]
  21601. 800963a: 681b ldr r3, [r3, #0]
  21602. 800963c: 4a77 ldr r2, [pc, #476] @ (800981c <HAL_DMA_IRQHandler+0x6b4>)
  21603. 800963e: 4293 cmp r3, r2
  21604. 8009640: d01d beq.n 800967e <HAL_DMA_IRQHandler+0x516>
  21605. 8009642: 687b ldr r3, [r7, #4]
  21606. 8009644: 681b ldr r3, [r3, #0]
  21607. 8009646: 4a76 ldr r2, [pc, #472] @ (8009820 <HAL_DMA_IRQHandler+0x6b8>)
  21608. 8009648: 4293 cmp r3, r2
  21609. 800964a: d018 beq.n 800967e <HAL_DMA_IRQHandler+0x516>
  21610. 800964c: 687b ldr r3, [r7, #4]
  21611. 800964e: 681b ldr r3, [r3, #0]
  21612. 8009650: 4a74 ldr r2, [pc, #464] @ (8009824 <HAL_DMA_IRQHandler+0x6bc>)
  21613. 8009652: 4293 cmp r3, r2
  21614. 8009654: d013 beq.n 800967e <HAL_DMA_IRQHandler+0x516>
  21615. 8009656: 687b ldr r3, [r7, #4]
  21616. 8009658: 681b ldr r3, [r3, #0]
  21617. 800965a: 4a73 ldr r2, [pc, #460] @ (8009828 <HAL_DMA_IRQHandler+0x6c0>)
  21618. 800965c: 4293 cmp r3, r2
  21619. 800965e: d00e beq.n 800967e <HAL_DMA_IRQHandler+0x516>
  21620. 8009660: 687b ldr r3, [r7, #4]
  21621. 8009662: 681b ldr r3, [r3, #0]
  21622. 8009664: 4a71 ldr r2, [pc, #452] @ (800982c <HAL_DMA_IRQHandler+0x6c4>)
  21623. 8009666: 4293 cmp r3, r2
  21624. 8009668: d009 beq.n 800967e <HAL_DMA_IRQHandler+0x516>
  21625. 800966a: 687b ldr r3, [r7, #4]
  21626. 800966c: 681b ldr r3, [r3, #0]
  21627. 800966e: 4a70 ldr r2, [pc, #448] @ (8009830 <HAL_DMA_IRQHandler+0x6c8>)
  21628. 8009670: 4293 cmp r3, r2
  21629. 8009672: d004 beq.n 800967e <HAL_DMA_IRQHandler+0x516>
  21630. 8009674: 687b ldr r3, [r7, #4]
  21631. 8009676: 681b ldr r3, [r3, #0]
  21632. 8009678: 4a6e ldr r2, [pc, #440] @ (8009834 <HAL_DMA_IRQHandler+0x6cc>)
  21633. 800967a: 4293 cmp r3, r2
  21634. 800967c: d10a bne.n 8009694 <HAL_DMA_IRQHandler+0x52c>
  21635. 800967e: 687b ldr r3, [r7, #4]
  21636. 8009680: 681b ldr r3, [r3, #0]
  21637. 8009682: 681b ldr r3, [r3, #0]
  21638. 8009684: f003 0308 and.w r3, r3, #8
  21639. 8009688: 2b00 cmp r3, #0
  21640. 800968a: bf14 ite ne
  21641. 800968c: 2301 movne r3, #1
  21642. 800968e: 2300 moveq r3, #0
  21643. 8009690: b2db uxtb r3, r3
  21644. 8009692: e009 b.n 80096a8 <HAL_DMA_IRQHandler+0x540>
  21645. 8009694: 687b ldr r3, [r7, #4]
  21646. 8009696: 681b ldr r3, [r3, #0]
  21647. 8009698: 681b ldr r3, [r3, #0]
  21648. 800969a: f003 0304 and.w r3, r3, #4
  21649. 800969e: 2b00 cmp r3, #0
  21650. 80096a0: bf14 ite ne
  21651. 80096a2: 2301 movne r3, #1
  21652. 80096a4: 2300 moveq r3, #0
  21653. 80096a6: b2db uxtb r3, r3
  21654. 80096a8: 2b00 cmp r3, #0
  21655. 80096aa: d03e beq.n 800972a <HAL_DMA_IRQHandler+0x5c2>
  21656. {
  21657. /* Clear the half transfer complete flag */
  21658. regs_dma->IFCR = DMA_FLAG_HTIF0_4 << (hdma->StreamIndex & 0x1FU);
  21659. 80096ac: 687b ldr r3, [r7, #4]
  21660. 80096ae: 6ddb ldr r3, [r3, #92] @ 0x5c
  21661. 80096b0: f003 031f and.w r3, r3, #31
  21662. 80096b4: 2210 movs r2, #16
  21663. 80096b6: 409a lsls r2, r3
  21664. 80096b8: 6a3b ldr r3, [r7, #32]
  21665. 80096ba: 609a str r2, [r3, #8]
  21666. /* Multi_Buffering mode enabled */
  21667. if(((((DMA_Stream_TypeDef *)hdma->Instance)->CR) & (uint32_t)(DMA_SxCR_DBM)) != 0U)
  21668. 80096bc: 687b ldr r3, [r7, #4]
  21669. 80096be: 681b ldr r3, [r3, #0]
  21670. 80096c0: 681b ldr r3, [r3, #0]
  21671. 80096c2: f403 2380 and.w r3, r3, #262144 @ 0x40000
  21672. 80096c6: 2b00 cmp r3, #0
  21673. 80096c8: d018 beq.n 80096fc <HAL_DMA_IRQHandler+0x594>
  21674. {
  21675. /* Current memory buffer used is Memory 0 */
  21676. if((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_CT) == 0U)
  21677. 80096ca: 687b ldr r3, [r7, #4]
  21678. 80096cc: 681b ldr r3, [r3, #0]
  21679. 80096ce: 681b ldr r3, [r3, #0]
  21680. 80096d0: f403 2300 and.w r3, r3, #524288 @ 0x80000
  21681. 80096d4: 2b00 cmp r3, #0
  21682. 80096d6: d108 bne.n 80096ea <HAL_DMA_IRQHandler+0x582>
  21683. {
  21684. if(hdma->XferHalfCpltCallback != NULL)
  21685. 80096d8: 687b ldr r3, [r7, #4]
  21686. 80096da: 6c1b ldr r3, [r3, #64] @ 0x40
  21687. 80096dc: 2b00 cmp r3, #0
  21688. 80096de: d024 beq.n 800972a <HAL_DMA_IRQHandler+0x5c2>
  21689. {
  21690. /* Half transfer callback */
  21691. hdma->XferHalfCpltCallback(hdma);
  21692. 80096e0: 687b ldr r3, [r7, #4]
  21693. 80096e2: 6c1b ldr r3, [r3, #64] @ 0x40
  21694. 80096e4: 6878 ldr r0, [r7, #4]
  21695. 80096e6: 4798 blx r3
  21696. 80096e8: e01f b.n 800972a <HAL_DMA_IRQHandler+0x5c2>
  21697. }
  21698. }
  21699. /* Current memory buffer used is Memory 1 */
  21700. else
  21701. {
  21702. if(hdma->XferM1HalfCpltCallback != NULL)
  21703. 80096ea: 687b ldr r3, [r7, #4]
  21704. 80096ec: 6c9b ldr r3, [r3, #72] @ 0x48
  21705. 80096ee: 2b00 cmp r3, #0
  21706. 80096f0: d01b beq.n 800972a <HAL_DMA_IRQHandler+0x5c2>
  21707. {
  21708. /* Half transfer callback */
  21709. hdma->XferM1HalfCpltCallback(hdma);
  21710. 80096f2: 687b ldr r3, [r7, #4]
  21711. 80096f4: 6c9b ldr r3, [r3, #72] @ 0x48
  21712. 80096f6: 6878 ldr r0, [r7, #4]
  21713. 80096f8: 4798 blx r3
  21714. 80096fa: e016 b.n 800972a <HAL_DMA_IRQHandler+0x5c2>
  21715. }
  21716. }
  21717. else
  21718. {
  21719. /* Disable the half transfer interrupt if the DMA mode is not CIRCULAR */
  21720. if((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_CIRC) == 0U)
  21721. 80096fc: 687b ldr r3, [r7, #4]
  21722. 80096fe: 681b ldr r3, [r3, #0]
  21723. 8009700: 681b ldr r3, [r3, #0]
  21724. 8009702: f403 7380 and.w r3, r3, #256 @ 0x100
  21725. 8009706: 2b00 cmp r3, #0
  21726. 8009708: d107 bne.n 800971a <HAL_DMA_IRQHandler+0x5b2>
  21727. {
  21728. /* Disable the half transfer interrupt */
  21729. ((DMA_Stream_TypeDef *)hdma->Instance)->CR &= ~(DMA_IT_HT);
  21730. 800970a: 687b ldr r3, [r7, #4]
  21731. 800970c: 681b ldr r3, [r3, #0]
  21732. 800970e: 681a ldr r2, [r3, #0]
  21733. 8009710: 687b ldr r3, [r7, #4]
  21734. 8009712: 681b ldr r3, [r3, #0]
  21735. 8009714: f022 0208 bic.w r2, r2, #8
  21736. 8009718: 601a str r2, [r3, #0]
  21737. }
  21738. if(hdma->XferHalfCpltCallback != NULL)
  21739. 800971a: 687b ldr r3, [r7, #4]
  21740. 800971c: 6c1b ldr r3, [r3, #64] @ 0x40
  21741. 800971e: 2b00 cmp r3, #0
  21742. 8009720: d003 beq.n 800972a <HAL_DMA_IRQHandler+0x5c2>
  21743. {
  21744. /* Half transfer callback */
  21745. hdma->XferHalfCpltCallback(hdma);
  21746. 8009722: 687b ldr r3, [r7, #4]
  21747. 8009724: 6c1b ldr r3, [r3, #64] @ 0x40
  21748. 8009726: 6878 ldr r0, [r7, #4]
  21749. 8009728: 4798 blx r3
  21750. }
  21751. }
  21752. }
  21753. }
  21754. /* Transfer Complete Interrupt management ***********************************/
  21755. if ((tmpisr_dma & (DMA_FLAG_TCIF0_4 << (hdma->StreamIndex & 0x1FU))) != 0U)
  21756. 800972a: 687b ldr r3, [r7, #4]
  21757. 800972c: 6ddb ldr r3, [r3, #92] @ 0x5c
  21758. 800972e: f003 031f and.w r3, r3, #31
  21759. 8009732: 2220 movs r2, #32
  21760. 8009734: 409a lsls r2, r3
  21761. 8009736: 69bb ldr r3, [r7, #24]
  21762. 8009738: 4013 ands r3, r2
  21763. 800973a: 2b00 cmp r3, #0
  21764. 800973c: f000 8110 beq.w 8009960 <HAL_DMA_IRQHandler+0x7f8>
  21765. {
  21766. if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_TC) != 0U)
  21767. 8009740: 687b ldr r3, [r7, #4]
  21768. 8009742: 681b ldr r3, [r3, #0]
  21769. 8009744: 4a2c ldr r2, [pc, #176] @ (80097f8 <HAL_DMA_IRQHandler+0x690>)
  21770. 8009746: 4293 cmp r3, r2
  21771. 8009748: d04a beq.n 80097e0 <HAL_DMA_IRQHandler+0x678>
  21772. 800974a: 687b ldr r3, [r7, #4]
  21773. 800974c: 681b ldr r3, [r3, #0]
  21774. 800974e: 4a2b ldr r2, [pc, #172] @ (80097fc <HAL_DMA_IRQHandler+0x694>)
  21775. 8009750: 4293 cmp r3, r2
  21776. 8009752: d045 beq.n 80097e0 <HAL_DMA_IRQHandler+0x678>
  21777. 8009754: 687b ldr r3, [r7, #4]
  21778. 8009756: 681b ldr r3, [r3, #0]
  21779. 8009758: 4a29 ldr r2, [pc, #164] @ (8009800 <HAL_DMA_IRQHandler+0x698>)
  21780. 800975a: 4293 cmp r3, r2
  21781. 800975c: d040 beq.n 80097e0 <HAL_DMA_IRQHandler+0x678>
  21782. 800975e: 687b ldr r3, [r7, #4]
  21783. 8009760: 681b ldr r3, [r3, #0]
  21784. 8009762: 4a28 ldr r2, [pc, #160] @ (8009804 <HAL_DMA_IRQHandler+0x69c>)
  21785. 8009764: 4293 cmp r3, r2
  21786. 8009766: d03b beq.n 80097e0 <HAL_DMA_IRQHandler+0x678>
  21787. 8009768: 687b ldr r3, [r7, #4]
  21788. 800976a: 681b ldr r3, [r3, #0]
  21789. 800976c: 4a26 ldr r2, [pc, #152] @ (8009808 <HAL_DMA_IRQHandler+0x6a0>)
  21790. 800976e: 4293 cmp r3, r2
  21791. 8009770: d036 beq.n 80097e0 <HAL_DMA_IRQHandler+0x678>
  21792. 8009772: 687b ldr r3, [r7, #4]
  21793. 8009774: 681b ldr r3, [r3, #0]
  21794. 8009776: 4a25 ldr r2, [pc, #148] @ (800980c <HAL_DMA_IRQHandler+0x6a4>)
  21795. 8009778: 4293 cmp r3, r2
  21796. 800977a: d031 beq.n 80097e0 <HAL_DMA_IRQHandler+0x678>
  21797. 800977c: 687b ldr r3, [r7, #4]
  21798. 800977e: 681b ldr r3, [r3, #0]
  21799. 8009780: 4a23 ldr r2, [pc, #140] @ (8009810 <HAL_DMA_IRQHandler+0x6a8>)
  21800. 8009782: 4293 cmp r3, r2
  21801. 8009784: d02c beq.n 80097e0 <HAL_DMA_IRQHandler+0x678>
  21802. 8009786: 687b ldr r3, [r7, #4]
  21803. 8009788: 681b ldr r3, [r3, #0]
  21804. 800978a: 4a22 ldr r2, [pc, #136] @ (8009814 <HAL_DMA_IRQHandler+0x6ac>)
  21805. 800978c: 4293 cmp r3, r2
  21806. 800978e: d027 beq.n 80097e0 <HAL_DMA_IRQHandler+0x678>
  21807. 8009790: 687b ldr r3, [r7, #4]
  21808. 8009792: 681b ldr r3, [r3, #0]
  21809. 8009794: 4a20 ldr r2, [pc, #128] @ (8009818 <HAL_DMA_IRQHandler+0x6b0>)
  21810. 8009796: 4293 cmp r3, r2
  21811. 8009798: d022 beq.n 80097e0 <HAL_DMA_IRQHandler+0x678>
  21812. 800979a: 687b ldr r3, [r7, #4]
  21813. 800979c: 681b ldr r3, [r3, #0]
  21814. 800979e: 4a1f ldr r2, [pc, #124] @ (800981c <HAL_DMA_IRQHandler+0x6b4>)
  21815. 80097a0: 4293 cmp r3, r2
  21816. 80097a2: d01d beq.n 80097e0 <HAL_DMA_IRQHandler+0x678>
  21817. 80097a4: 687b ldr r3, [r7, #4]
  21818. 80097a6: 681b ldr r3, [r3, #0]
  21819. 80097a8: 4a1d ldr r2, [pc, #116] @ (8009820 <HAL_DMA_IRQHandler+0x6b8>)
  21820. 80097aa: 4293 cmp r3, r2
  21821. 80097ac: d018 beq.n 80097e0 <HAL_DMA_IRQHandler+0x678>
  21822. 80097ae: 687b ldr r3, [r7, #4]
  21823. 80097b0: 681b ldr r3, [r3, #0]
  21824. 80097b2: 4a1c ldr r2, [pc, #112] @ (8009824 <HAL_DMA_IRQHandler+0x6bc>)
  21825. 80097b4: 4293 cmp r3, r2
  21826. 80097b6: d013 beq.n 80097e0 <HAL_DMA_IRQHandler+0x678>
  21827. 80097b8: 687b ldr r3, [r7, #4]
  21828. 80097ba: 681b ldr r3, [r3, #0]
  21829. 80097bc: 4a1a ldr r2, [pc, #104] @ (8009828 <HAL_DMA_IRQHandler+0x6c0>)
  21830. 80097be: 4293 cmp r3, r2
  21831. 80097c0: d00e beq.n 80097e0 <HAL_DMA_IRQHandler+0x678>
  21832. 80097c2: 687b ldr r3, [r7, #4]
  21833. 80097c4: 681b ldr r3, [r3, #0]
  21834. 80097c6: 4a19 ldr r2, [pc, #100] @ (800982c <HAL_DMA_IRQHandler+0x6c4>)
  21835. 80097c8: 4293 cmp r3, r2
  21836. 80097ca: d009 beq.n 80097e0 <HAL_DMA_IRQHandler+0x678>
  21837. 80097cc: 687b ldr r3, [r7, #4]
  21838. 80097ce: 681b ldr r3, [r3, #0]
  21839. 80097d0: 4a17 ldr r2, [pc, #92] @ (8009830 <HAL_DMA_IRQHandler+0x6c8>)
  21840. 80097d2: 4293 cmp r3, r2
  21841. 80097d4: d004 beq.n 80097e0 <HAL_DMA_IRQHandler+0x678>
  21842. 80097d6: 687b ldr r3, [r7, #4]
  21843. 80097d8: 681b ldr r3, [r3, #0]
  21844. 80097da: 4a16 ldr r2, [pc, #88] @ (8009834 <HAL_DMA_IRQHandler+0x6cc>)
  21845. 80097dc: 4293 cmp r3, r2
  21846. 80097de: d12b bne.n 8009838 <HAL_DMA_IRQHandler+0x6d0>
  21847. 80097e0: 687b ldr r3, [r7, #4]
  21848. 80097e2: 681b ldr r3, [r3, #0]
  21849. 80097e4: 681b ldr r3, [r3, #0]
  21850. 80097e6: f003 0310 and.w r3, r3, #16
  21851. 80097ea: 2b00 cmp r3, #0
  21852. 80097ec: bf14 ite ne
  21853. 80097ee: 2301 movne r3, #1
  21854. 80097f0: 2300 moveq r3, #0
  21855. 80097f2: b2db uxtb r3, r3
  21856. 80097f4: e02a b.n 800984c <HAL_DMA_IRQHandler+0x6e4>
  21857. 80097f6: bf00 nop
  21858. 80097f8: 40020010 .word 0x40020010
  21859. 80097fc: 40020028 .word 0x40020028
  21860. 8009800: 40020040 .word 0x40020040
  21861. 8009804: 40020058 .word 0x40020058
  21862. 8009808: 40020070 .word 0x40020070
  21863. 800980c: 40020088 .word 0x40020088
  21864. 8009810: 400200a0 .word 0x400200a0
  21865. 8009814: 400200b8 .word 0x400200b8
  21866. 8009818: 40020410 .word 0x40020410
  21867. 800981c: 40020428 .word 0x40020428
  21868. 8009820: 40020440 .word 0x40020440
  21869. 8009824: 40020458 .word 0x40020458
  21870. 8009828: 40020470 .word 0x40020470
  21871. 800982c: 40020488 .word 0x40020488
  21872. 8009830: 400204a0 .word 0x400204a0
  21873. 8009834: 400204b8 .word 0x400204b8
  21874. 8009838: 687b ldr r3, [r7, #4]
  21875. 800983a: 681b ldr r3, [r3, #0]
  21876. 800983c: 681b ldr r3, [r3, #0]
  21877. 800983e: f003 0302 and.w r3, r3, #2
  21878. 8009842: 2b00 cmp r3, #0
  21879. 8009844: bf14 ite ne
  21880. 8009846: 2301 movne r3, #1
  21881. 8009848: 2300 moveq r3, #0
  21882. 800984a: b2db uxtb r3, r3
  21883. 800984c: 2b00 cmp r3, #0
  21884. 800984e: f000 8087 beq.w 8009960 <HAL_DMA_IRQHandler+0x7f8>
  21885. {
  21886. /* Clear the transfer complete flag */
  21887. regs_dma->IFCR = DMA_FLAG_TCIF0_4 << (hdma->StreamIndex & 0x1FU);
  21888. 8009852: 687b ldr r3, [r7, #4]
  21889. 8009854: 6ddb ldr r3, [r3, #92] @ 0x5c
  21890. 8009856: f003 031f and.w r3, r3, #31
  21891. 800985a: 2220 movs r2, #32
  21892. 800985c: 409a lsls r2, r3
  21893. 800985e: 6a3b ldr r3, [r7, #32]
  21894. 8009860: 609a str r2, [r3, #8]
  21895. if(HAL_DMA_STATE_ABORT == hdma->State)
  21896. 8009862: 687b ldr r3, [r7, #4]
  21897. 8009864: f893 3035 ldrb.w r3, [r3, #53] @ 0x35
  21898. 8009868: b2db uxtb r3, r3
  21899. 800986a: 2b04 cmp r3, #4
  21900. 800986c: d139 bne.n 80098e2 <HAL_DMA_IRQHandler+0x77a>
  21901. {
  21902. /* Disable all the transfer interrupts */
  21903. ((DMA_Stream_TypeDef *)hdma->Instance)->CR &= ~(DMA_IT_TC | DMA_IT_TE | DMA_IT_DME);
  21904. 800986e: 687b ldr r3, [r7, #4]
  21905. 8009870: 681b ldr r3, [r3, #0]
  21906. 8009872: 681a ldr r2, [r3, #0]
  21907. 8009874: 687b ldr r3, [r7, #4]
  21908. 8009876: 681b ldr r3, [r3, #0]
  21909. 8009878: f022 0216 bic.w r2, r2, #22
  21910. 800987c: 601a str r2, [r3, #0]
  21911. ((DMA_Stream_TypeDef *)hdma->Instance)->FCR &= ~(DMA_IT_FE);
  21912. 800987e: 687b ldr r3, [r7, #4]
  21913. 8009880: 681b ldr r3, [r3, #0]
  21914. 8009882: 695a ldr r2, [r3, #20]
  21915. 8009884: 687b ldr r3, [r7, #4]
  21916. 8009886: 681b ldr r3, [r3, #0]
  21917. 8009888: f022 0280 bic.w r2, r2, #128 @ 0x80
  21918. 800988c: 615a str r2, [r3, #20]
  21919. if((hdma->XferHalfCpltCallback != NULL) || (hdma->XferM1HalfCpltCallback != NULL))
  21920. 800988e: 687b ldr r3, [r7, #4]
  21921. 8009890: 6c1b ldr r3, [r3, #64] @ 0x40
  21922. 8009892: 2b00 cmp r3, #0
  21923. 8009894: d103 bne.n 800989e <HAL_DMA_IRQHandler+0x736>
  21924. 8009896: 687b ldr r3, [r7, #4]
  21925. 8009898: 6c9b ldr r3, [r3, #72] @ 0x48
  21926. 800989a: 2b00 cmp r3, #0
  21927. 800989c: d007 beq.n 80098ae <HAL_DMA_IRQHandler+0x746>
  21928. {
  21929. ((DMA_Stream_TypeDef *)hdma->Instance)->CR &= ~(DMA_IT_HT);
  21930. 800989e: 687b ldr r3, [r7, #4]
  21931. 80098a0: 681b ldr r3, [r3, #0]
  21932. 80098a2: 681a ldr r2, [r3, #0]
  21933. 80098a4: 687b ldr r3, [r7, #4]
  21934. 80098a6: 681b ldr r3, [r3, #0]
  21935. 80098a8: f022 0208 bic.w r2, r2, #8
  21936. 80098ac: 601a str r2, [r3, #0]
  21937. }
  21938. /* Clear all interrupt flags at correct offset within the register */
  21939. regs_dma->IFCR = 0x3FUL << (hdma->StreamIndex & 0x1FU);
  21940. 80098ae: 687b ldr r3, [r7, #4]
  21941. 80098b0: 6ddb ldr r3, [r3, #92] @ 0x5c
  21942. 80098b2: f003 031f and.w r3, r3, #31
  21943. 80098b6: 223f movs r2, #63 @ 0x3f
  21944. 80098b8: 409a lsls r2, r3
  21945. 80098ba: 6a3b ldr r3, [r7, #32]
  21946. 80098bc: 609a str r2, [r3, #8]
  21947. /* Change the DMA state */
  21948. hdma->State = HAL_DMA_STATE_READY;
  21949. 80098be: 687b ldr r3, [r7, #4]
  21950. 80098c0: 2201 movs r2, #1
  21951. 80098c2: f883 2035 strb.w r2, [r3, #53] @ 0x35
  21952. /* Process Unlocked */
  21953. __HAL_UNLOCK(hdma);
  21954. 80098c6: 687b ldr r3, [r7, #4]
  21955. 80098c8: 2200 movs r2, #0
  21956. 80098ca: f883 2034 strb.w r2, [r3, #52] @ 0x34
  21957. if(hdma->XferAbortCallback != NULL)
  21958. 80098ce: 687b ldr r3, [r7, #4]
  21959. 80098d0: 6d1b ldr r3, [r3, #80] @ 0x50
  21960. 80098d2: 2b00 cmp r3, #0
  21961. 80098d4: f000 834a beq.w 8009f6c <HAL_DMA_IRQHandler+0xe04>
  21962. {
  21963. hdma->XferAbortCallback(hdma);
  21964. 80098d8: 687b ldr r3, [r7, #4]
  21965. 80098da: 6d1b ldr r3, [r3, #80] @ 0x50
  21966. 80098dc: 6878 ldr r0, [r7, #4]
  21967. 80098de: 4798 blx r3
  21968. }
  21969. return;
  21970. 80098e0: e344 b.n 8009f6c <HAL_DMA_IRQHandler+0xe04>
  21971. }
  21972. if(((((DMA_Stream_TypeDef *)hdma->Instance)->CR) & (uint32_t)(DMA_SxCR_DBM)) != 0U)
  21973. 80098e2: 687b ldr r3, [r7, #4]
  21974. 80098e4: 681b ldr r3, [r3, #0]
  21975. 80098e6: 681b ldr r3, [r3, #0]
  21976. 80098e8: f403 2380 and.w r3, r3, #262144 @ 0x40000
  21977. 80098ec: 2b00 cmp r3, #0
  21978. 80098ee: d018 beq.n 8009922 <HAL_DMA_IRQHandler+0x7ba>
  21979. {
  21980. /* Current memory buffer used is Memory 0 */
  21981. if((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_CT) == 0U)
  21982. 80098f0: 687b ldr r3, [r7, #4]
  21983. 80098f2: 681b ldr r3, [r3, #0]
  21984. 80098f4: 681b ldr r3, [r3, #0]
  21985. 80098f6: f403 2300 and.w r3, r3, #524288 @ 0x80000
  21986. 80098fa: 2b00 cmp r3, #0
  21987. 80098fc: d108 bne.n 8009910 <HAL_DMA_IRQHandler+0x7a8>
  21988. {
  21989. if(hdma->XferM1CpltCallback != NULL)
  21990. 80098fe: 687b ldr r3, [r7, #4]
  21991. 8009900: 6c5b ldr r3, [r3, #68] @ 0x44
  21992. 8009902: 2b00 cmp r3, #0
  21993. 8009904: d02c beq.n 8009960 <HAL_DMA_IRQHandler+0x7f8>
  21994. {
  21995. /* Transfer complete Callback for memory1 */
  21996. hdma->XferM1CpltCallback(hdma);
  21997. 8009906: 687b ldr r3, [r7, #4]
  21998. 8009908: 6c5b ldr r3, [r3, #68] @ 0x44
  21999. 800990a: 6878 ldr r0, [r7, #4]
  22000. 800990c: 4798 blx r3
  22001. 800990e: e027 b.n 8009960 <HAL_DMA_IRQHandler+0x7f8>
  22002. }
  22003. }
  22004. /* Current memory buffer used is Memory 1 */
  22005. else
  22006. {
  22007. if(hdma->XferCpltCallback != NULL)
  22008. 8009910: 687b ldr r3, [r7, #4]
  22009. 8009912: 6bdb ldr r3, [r3, #60] @ 0x3c
  22010. 8009914: 2b00 cmp r3, #0
  22011. 8009916: d023 beq.n 8009960 <HAL_DMA_IRQHandler+0x7f8>
  22012. {
  22013. /* Transfer complete Callback for memory0 */
  22014. hdma->XferCpltCallback(hdma);
  22015. 8009918: 687b ldr r3, [r7, #4]
  22016. 800991a: 6bdb ldr r3, [r3, #60] @ 0x3c
  22017. 800991c: 6878 ldr r0, [r7, #4]
  22018. 800991e: 4798 blx r3
  22019. 8009920: e01e b.n 8009960 <HAL_DMA_IRQHandler+0x7f8>
  22020. }
  22021. }
  22022. /* Disable the transfer complete interrupt if the DMA mode is not CIRCULAR */
  22023. else
  22024. {
  22025. if((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_CIRC) == 0U)
  22026. 8009922: 687b ldr r3, [r7, #4]
  22027. 8009924: 681b ldr r3, [r3, #0]
  22028. 8009926: 681b ldr r3, [r3, #0]
  22029. 8009928: f403 7380 and.w r3, r3, #256 @ 0x100
  22030. 800992c: 2b00 cmp r3, #0
  22031. 800992e: d10f bne.n 8009950 <HAL_DMA_IRQHandler+0x7e8>
  22032. {
  22033. /* Disable the transfer complete interrupt */
  22034. ((DMA_Stream_TypeDef *)hdma->Instance)->CR &= ~(DMA_IT_TC);
  22035. 8009930: 687b ldr r3, [r7, #4]
  22036. 8009932: 681b ldr r3, [r3, #0]
  22037. 8009934: 681a ldr r2, [r3, #0]
  22038. 8009936: 687b ldr r3, [r7, #4]
  22039. 8009938: 681b ldr r3, [r3, #0]
  22040. 800993a: f022 0210 bic.w r2, r2, #16
  22041. 800993e: 601a str r2, [r3, #0]
  22042. /* Change the DMA state */
  22043. hdma->State = HAL_DMA_STATE_READY;
  22044. 8009940: 687b ldr r3, [r7, #4]
  22045. 8009942: 2201 movs r2, #1
  22046. 8009944: f883 2035 strb.w r2, [r3, #53] @ 0x35
  22047. /* Process Unlocked */
  22048. __HAL_UNLOCK(hdma);
  22049. 8009948: 687b ldr r3, [r7, #4]
  22050. 800994a: 2200 movs r2, #0
  22051. 800994c: f883 2034 strb.w r2, [r3, #52] @ 0x34
  22052. }
  22053. if(hdma->XferCpltCallback != NULL)
  22054. 8009950: 687b ldr r3, [r7, #4]
  22055. 8009952: 6bdb ldr r3, [r3, #60] @ 0x3c
  22056. 8009954: 2b00 cmp r3, #0
  22057. 8009956: d003 beq.n 8009960 <HAL_DMA_IRQHandler+0x7f8>
  22058. {
  22059. /* Transfer complete callback */
  22060. hdma->XferCpltCallback(hdma);
  22061. 8009958: 687b ldr r3, [r7, #4]
  22062. 800995a: 6bdb ldr r3, [r3, #60] @ 0x3c
  22063. 800995c: 6878 ldr r0, [r7, #4]
  22064. 800995e: 4798 blx r3
  22065. }
  22066. }
  22067. }
  22068. /* manage error case */
  22069. if(hdma->ErrorCode != HAL_DMA_ERROR_NONE)
  22070. 8009960: 687b ldr r3, [r7, #4]
  22071. 8009962: 6d5b ldr r3, [r3, #84] @ 0x54
  22072. 8009964: 2b00 cmp r3, #0
  22073. 8009966: f000 8306 beq.w 8009f76 <HAL_DMA_IRQHandler+0xe0e>
  22074. {
  22075. if((hdma->ErrorCode & HAL_DMA_ERROR_TE) != 0U)
  22076. 800996a: 687b ldr r3, [r7, #4]
  22077. 800996c: 6d5b ldr r3, [r3, #84] @ 0x54
  22078. 800996e: f003 0301 and.w r3, r3, #1
  22079. 8009972: 2b00 cmp r3, #0
  22080. 8009974: f000 8088 beq.w 8009a88 <HAL_DMA_IRQHandler+0x920>
  22081. {
  22082. hdma->State = HAL_DMA_STATE_ABORT;
  22083. 8009978: 687b ldr r3, [r7, #4]
  22084. 800997a: 2204 movs r2, #4
  22085. 800997c: f883 2035 strb.w r2, [r3, #53] @ 0x35
  22086. /* Disable the stream */
  22087. __HAL_DMA_DISABLE(hdma);
  22088. 8009980: 687b ldr r3, [r7, #4]
  22089. 8009982: 681b ldr r3, [r3, #0]
  22090. 8009984: 4a7a ldr r2, [pc, #488] @ (8009b70 <HAL_DMA_IRQHandler+0xa08>)
  22091. 8009986: 4293 cmp r3, r2
  22092. 8009988: d04a beq.n 8009a20 <HAL_DMA_IRQHandler+0x8b8>
  22093. 800998a: 687b ldr r3, [r7, #4]
  22094. 800998c: 681b ldr r3, [r3, #0]
  22095. 800998e: 4a79 ldr r2, [pc, #484] @ (8009b74 <HAL_DMA_IRQHandler+0xa0c>)
  22096. 8009990: 4293 cmp r3, r2
  22097. 8009992: d045 beq.n 8009a20 <HAL_DMA_IRQHandler+0x8b8>
  22098. 8009994: 687b ldr r3, [r7, #4]
  22099. 8009996: 681b ldr r3, [r3, #0]
  22100. 8009998: 4a77 ldr r2, [pc, #476] @ (8009b78 <HAL_DMA_IRQHandler+0xa10>)
  22101. 800999a: 4293 cmp r3, r2
  22102. 800999c: d040 beq.n 8009a20 <HAL_DMA_IRQHandler+0x8b8>
  22103. 800999e: 687b ldr r3, [r7, #4]
  22104. 80099a0: 681b ldr r3, [r3, #0]
  22105. 80099a2: 4a76 ldr r2, [pc, #472] @ (8009b7c <HAL_DMA_IRQHandler+0xa14>)
  22106. 80099a4: 4293 cmp r3, r2
  22107. 80099a6: d03b beq.n 8009a20 <HAL_DMA_IRQHandler+0x8b8>
  22108. 80099a8: 687b ldr r3, [r7, #4]
  22109. 80099aa: 681b ldr r3, [r3, #0]
  22110. 80099ac: 4a74 ldr r2, [pc, #464] @ (8009b80 <HAL_DMA_IRQHandler+0xa18>)
  22111. 80099ae: 4293 cmp r3, r2
  22112. 80099b0: d036 beq.n 8009a20 <HAL_DMA_IRQHandler+0x8b8>
  22113. 80099b2: 687b ldr r3, [r7, #4]
  22114. 80099b4: 681b ldr r3, [r3, #0]
  22115. 80099b6: 4a73 ldr r2, [pc, #460] @ (8009b84 <HAL_DMA_IRQHandler+0xa1c>)
  22116. 80099b8: 4293 cmp r3, r2
  22117. 80099ba: d031 beq.n 8009a20 <HAL_DMA_IRQHandler+0x8b8>
  22118. 80099bc: 687b ldr r3, [r7, #4]
  22119. 80099be: 681b ldr r3, [r3, #0]
  22120. 80099c0: 4a71 ldr r2, [pc, #452] @ (8009b88 <HAL_DMA_IRQHandler+0xa20>)
  22121. 80099c2: 4293 cmp r3, r2
  22122. 80099c4: d02c beq.n 8009a20 <HAL_DMA_IRQHandler+0x8b8>
  22123. 80099c6: 687b ldr r3, [r7, #4]
  22124. 80099c8: 681b ldr r3, [r3, #0]
  22125. 80099ca: 4a70 ldr r2, [pc, #448] @ (8009b8c <HAL_DMA_IRQHandler+0xa24>)
  22126. 80099cc: 4293 cmp r3, r2
  22127. 80099ce: d027 beq.n 8009a20 <HAL_DMA_IRQHandler+0x8b8>
  22128. 80099d0: 687b ldr r3, [r7, #4]
  22129. 80099d2: 681b ldr r3, [r3, #0]
  22130. 80099d4: 4a6e ldr r2, [pc, #440] @ (8009b90 <HAL_DMA_IRQHandler+0xa28>)
  22131. 80099d6: 4293 cmp r3, r2
  22132. 80099d8: d022 beq.n 8009a20 <HAL_DMA_IRQHandler+0x8b8>
  22133. 80099da: 687b ldr r3, [r7, #4]
  22134. 80099dc: 681b ldr r3, [r3, #0]
  22135. 80099de: 4a6d ldr r2, [pc, #436] @ (8009b94 <HAL_DMA_IRQHandler+0xa2c>)
  22136. 80099e0: 4293 cmp r3, r2
  22137. 80099e2: d01d beq.n 8009a20 <HAL_DMA_IRQHandler+0x8b8>
  22138. 80099e4: 687b ldr r3, [r7, #4]
  22139. 80099e6: 681b ldr r3, [r3, #0]
  22140. 80099e8: 4a6b ldr r2, [pc, #428] @ (8009b98 <HAL_DMA_IRQHandler+0xa30>)
  22141. 80099ea: 4293 cmp r3, r2
  22142. 80099ec: d018 beq.n 8009a20 <HAL_DMA_IRQHandler+0x8b8>
  22143. 80099ee: 687b ldr r3, [r7, #4]
  22144. 80099f0: 681b ldr r3, [r3, #0]
  22145. 80099f2: 4a6a ldr r2, [pc, #424] @ (8009b9c <HAL_DMA_IRQHandler+0xa34>)
  22146. 80099f4: 4293 cmp r3, r2
  22147. 80099f6: d013 beq.n 8009a20 <HAL_DMA_IRQHandler+0x8b8>
  22148. 80099f8: 687b ldr r3, [r7, #4]
  22149. 80099fa: 681b ldr r3, [r3, #0]
  22150. 80099fc: 4a68 ldr r2, [pc, #416] @ (8009ba0 <HAL_DMA_IRQHandler+0xa38>)
  22151. 80099fe: 4293 cmp r3, r2
  22152. 8009a00: d00e beq.n 8009a20 <HAL_DMA_IRQHandler+0x8b8>
  22153. 8009a02: 687b ldr r3, [r7, #4]
  22154. 8009a04: 681b ldr r3, [r3, #0]
  22155. 8009a06: 4a67 ldr r2, [pc, #412] @ (8009ba4 <HAL_DMA_IRQHandler+0xa3c>)
  22156. 8009a08: 4293 cmp r3, r2
  22157. 8009a0a: d009 beq.n 8009a20 <HAL_DMA_IRQHandler+0x8b8>
  22158. 8009a0c: 687b ldr r3, [r7, #4]
  22159. 8009a0e: 681b ldr r3, [r3, #0]
  22160. 8009a10: 4a65 ldr r2, [pc, #404] @ (8009ba8 <HAL_DMA_IRQHandler+0xa40>)
  22161. 8009a12: 4293 cmp r3, r2
  22162. 8009a14: d004 beq.n 8009a20 <HAL_DMA_IRQHandler+0x8b8>
  22163. 8009a16: 687b ldr r3, [r7, #4]
  22164. 8009a18: 681b ldr r3, [r3, #0]
  22165. 8009a1a: 4a64 ldr r2, [pc, #400] @ (8009bac <HAL_DMA_IRQHandler+0xa44>)
  22166. 8009a1c: 4293 cmp r3, r2
  22167. 8009a1e: d108 bne.n 8009a32 <HAL_DMA_IRQHandler+0x8ca>
  22168. 8009a20: 687b ldr r3, [r7, #4]
  22169. 8009a22: 681b ldr r3, [r3, #0]
  22170. 8009a24: 681a ldr r2, [r3, #0]
  22171. 8009a26: 687b ldr r3, [r7, #4]
  22172. 8009a28: 681b ldr r3, [r3, #0]
  22173. 8009a2a: f022 0201 bic.w r2, r2, #1
  22174. 8009a2e: 601a str r2, [r3, #0]
  22175. 8009a30: e007 b.n 8009a42 <HAL_DMA_IRQHandler+0x8da>
  22176. 8009a32: 687b ldr r3, [r7, #4]
  22177. 8009a34: 681b ldr r3, [r3, #0]
  22178. 8009a36: 681a ldr r2, [r3, #0]
  22179. 8009a38: 687b ldr r3, [r7, #4]
  22180. 8009a3a: 681b ldr r3, [r3, #0]
  22181. 8009a3c: f022 0201 bic.w r2, r2, #1
  22182. 8009a40: 601a str r2, [r3, #0]
  22183. do
  22184. {
  22185. if (++count > timeout)
  22186. 8009a42: 68fb ldr r3, [r7, #12]
  22187. 8009a44: 3301 adds r3, #1
  22188. 8009a46: 60fb str r3, [r7, #12]
  22189. 8009a48: 6a7a ldr r2, [r7, #36] @ 0x24
  22190. 8009a4a: 429a cmp r2, r3
  22191. 8009a4c: d307 bcc.n 8009a5e <HAL_DMA_IRQHandler+0x8f6>
  22192. {
  22193. break;
  22194. }
  22195. }
  22196. while((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_EN) != 0U);
  22197. 8009a4e: 687b ldr r3, [r7, #4]
  22198. 8009a50: 681b ldr r3, [r3, #0]
  22199. 8009a52: 681b ldr r3, [r3, #0]
  22200. 8009a54: f003 0301 and.w r3, r3, #1
  22201. 8009a58: 2b00 cmp r3, #0
  22202. 8009a5a: d1f2 bne.n 8009a42 <HAL_DMA_IRQHandler+0x8da>
  22203. 8009a5c: e000 b.n 8009a60 <HAL_DMA_IRQHandler+0x8f8>
  22204. break;
  22205. 8009a5e: bf00 nop
  22206. if((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_EN) != 0U)
  22207. 8009a60: 687b ldr r3, [r7, #4]
  22208. 8009a62: 681b ldr r3, [r3, #0]
  22209. 8009a64: 681b ldr r3, [r3, #0]
  22210. 8009a66: f003 0301 and.w r3, r3, #1
  22211. 8009a6a: 2b00 cmp r3, #0
  22212. 8009a6c: d004 beq.n 8009a78 <HAL_DMA_IRQHandler+0x910>
  22213. {
  22214. /* Change the DMA state to error if DMA disable fails */
  22215. hdma->State = HAL_DMA_STATE_ERROR;
  22216. 8009a6e: 687b ldr r3, [r7, #4]
  22217. 8009a70: 2203 movs r2, #3
  22218. 8009a72: f883 2035 strb.w r2, [r3, #53] @ 0x35
  22219. 8009a76: e003 b.n 8009a80 <HAL_DMA_IRQHandler+0x918>
  22220. }
  22221. else
  22222. {
  22223. /* Change the DMA state to Ready if DMA disable success */
  22224. hdma->State = HAL_DMA_STATE_READY;
  22225. 8009a78: 687b ldr r3, [r7, #4]
  22226. 8009a7a: 2201 movs r2, #1
  22227. 8009a7c: f883 2035 strb.w r2, [r3, #53] @ 0x35
  22228. }
  22229. /* Process Unlocked */
  22230. __HAL_UNLOCK(hdma);
  22231. 8009a80: 687b ldr r3, [r7, #4]
  22232. 8009a82: 2200 movs r2, #0
  22233. 8009a84: f883 2034 strb.w r2, [r3, #52] @ 0x34
  22234. }
  22235. if(hdma->XferErrorCallback != NULL)
  22236. 8009a88: 687b ldr r3, [r7, #4]
  22237. 8009a8a: 6cdb ldr r3, [r3, #76] @ 0x4c
  22238. 8009a8c: 2b00 cmp r3, #0
  22239. 8009a8e: f000 8272 beq.w 8009f76 <HAL_DMA_IRQHandler+0xe0e>
  22240. {
  22241. /* Transfer error callback */
  22242. hdma->XferErrorCallback(hdma);
  22243. 8009a92: 687b ldr r3, [r7, #4]
  22244. 8009a94: 6cdb ldr r3, [r3, #76] @ 0x4c
  22245. 8009a96: 6878 ldr r0, [r7, #4]
  22246. 8009a98: 4798 blx r3
  22247. 8009a9a: e26c b.n 8009f76 <HAL_DMA_IRQHandler+0xe0e>
  22248. }
  22249. }
  22250. }
  22251. else if(IS_BDMA_CHANNEL_INSTANCE(hdma->Instance) != 0U) /* BDMA instance(s) */
  22252. 8009a9c: 687b ldr r3, [r7, #4]
  22253. 8009a9e: 681b ldr r3, [r3, #0]
  22254. 8009aa0: 4a43 ldr r2, [pc, #268] @ (8009bb0 <HAL_DMA_IRQHandler+0xa48>)
  22255. 8009aa2: 4293 cmp r3, r2
  22256. 8009aa4: d022 beq.n 8009aec <HAL_DMA_IRQHandler+0x984>
  22257. 8009aa6: 687b ldr r3, [r7, #4]
  22258. 8009aa8: 681b ldr r3, [r3, #0]
  22259. 8009aaa: 4a42 ldr r2, [pc, #264] @ (8009bb4 <HAL_DMA_IRQHandler+0xa4c>)
  22260. 8009aac: 4293 cmp r3, r2
  22261. 8009aae: d01d beq.n 8009aec <HAL_DMA_IRQHandler+0x984>
  22262. 8009ab0: 687b ldr r3, [r7, #4]
  22263. 8009ab2: 681b ldr r3, [r3, #0]
  22264. 8009ab4: 4a40 ldr r2, [pc, #256] @ (8009bb8 <HAL_DMA_IRQHandler+0xa50>)
  22265. 8009ab6: 4293 cmp r3, r2
  22266. 8009ab8: d018 beq.n 8009aec <HAL_DMA_IRQHandler+0x984>
  22267. 8009aba: 687b ldr r3, [r7, #4]
  22268. 8009abc: 681b ldr r3, [r3, #0]
  22269. 8009abe: 4a3f ldr r2, [pc, #252] @ (8009bbc <HAL_DMA_IRQHandler+0xa54>)
  22270. 8009ac0: 4293 cmp r3, r2
  22271. 8009ac2: d013 beq.n 8009aec <HAL_DMA_IRQHandler+0x984>
  22272. 8009ac4: 687b ldr r3, [r7, #4]
  22273. 8009ac6: 681b ldr r3, [r3, #0]
  22274. 8009ac8: 4a3d ldr r2, [pc, #244] @ (8009bc0 <HAL_DMA_IRQHandler+0xa58>)
  22275. 8009aca: 4293 cmp r3, r2
  22276. 8009acc: d00e beq.n 8009aec <HAL_DMA_IRQHandler+0x984>
  22277. 8009ace: 687b ldr r3, [r7, #4]
  22278. 8009ad0: 681b ldr r3, [r3, #0]
  22279. 8009ad2: 4a3c ldr r2, [pc, #240] @ (8009bc4 <HAL_DMA_IRQHandler+0xa5c>)
  22280. 8009ad4: 4293 cmp r3, r2
  22281. 8009ad6: d009 beq.n 8009aec <HAL_DMA_IRQHandler+0x984>
  22282. 8009ad8: 687b ldr r3, [r7, #4]
  22283. 8009ada: 681b ldr r3, [r3, #0]
  22284. 8009adc: 4a3a ldr r2, [pc, #232] @ (8009bc8 <HAL_DMA_IRQHandler+0xa60>)
  22285. 8009ade: 4293 cmp r3, r2
  22286. 8009ae0: d004 beq.n 8009aec <HAL_DMA_IRQHandler+0x984>
  22287. 8009ae2: 687b ldr r3, [r7, #4]
  22288. 8009ae4: 681b ldr r3, [r3, #0]
  22289. 8009ae6: 4a39 ldr r2, [pc, #228] @ (8009bcc <HAL_DMA_IRQHandler+0xa64>)
  22290. 8009ae8: 4293 cmp r3, r2
  22291. 8009aea: d101 bne.n 8009af0 <HAL_DMA_IRQHandler+0x988>
  22292. 8009aec: 2301 movs r3, #1
  22293. 8009aee: e000 b.n 8009af2 <HAL_DMA_IRQHandler+0x98a>
  22294. 8009af0: 2300 movs r3, #0
  22295. 8009af2: 2b00 cmp r3, #0
  22296. 8009af4: f000 823f beq.w 8009f76 <HAL_DMA_IRQHandler+0xe0e>
  22297. {
  22298. ccr_reg = (((BDMA_Channel_TypeDef *)hdma->Instance)->CCR);
  22299. 8009af8: 687b ldr r3, [r7, #4]
  22300. 8009afa: 681b ldr r3, [r3, #0]
  22301. 8009afc: 681b ldr r3, [r3, #0]
  22302. 8009afe: 613b str r3, [r7, #16]
  22303. /* Half Transfer Complete Interrupt management ******************************/
  22304. if (((tmpisr_bdma & (BDMA_FLAG_HT0 << (hdma->StreamIndex & 0x1FU))) != 0U) && ((ccr_reg & BDMA_CCR_HTIE) != 0U))
  22305. 8009b00: 687b ldr r3, [r7, #4]
  22306. 8009b02: 6ddb ldr r3, [r3, #92] @ 0x5c
  22307. 8009b04: f003 031f and.w r3, r3, #31
  22308. 8009b08: 2204 movs r2, #4
  22309. 8009b0a: 409a lsls r2, r3
  22310. 8009b0c: 697b ldr r3, [r7, #20]
  22311. 8009b0e: 4013 ands r3, r2
  22312. 8009b10: 2b00 cmp r3, #0
  22313. 8009b12: f000 80cd beq.w 8009cb0 <HAL_DMA_IRQHandler+0xb48>
  22314. 8009b16: 693b ldr r3, [r7, #16]
  22315. 8009b18: f003 0304 and.w r3, r3, #4
  22316. 8009b1c: 2b00 cmp r3, #0
  22317. 8009b1e: f000 80c7 beq.w 8009cb0 <HAL_DMA_IRQHandler+0xb48>
  22318. {
  22319. /* Clear the half transfer complete flag */
  22320. regs_bdma->IFCR = (BDMA_ISR_HTIF0 << (hdma->StreamIndex & 0x1FU));
  22321. 8009b22: 687b ldr r3, [r7, #4]
  22322. 8009b24: 6ddb ldr r3, [r3, #92] @ 0x5c
  22323. 8009b26: f003 031f and.w r3, r3, #31
  22324. 8009b2a: 2204 movs r2, #4
  22325. 8009b2c: 409a lsls r2, r3
  22326. 8009b2e: 69fb ldr r3, [r7, #28]
  22327. 8009b30: 605a str r2, [r3, #4]
  22328. /* Disable the transfer complete interrupt if the DMA mode is Double Buffering */
  22329. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  22330. 8009b32: 693b ldr r3, [r7, #16]
  22331. 8009b34: f403 4300 and.w r3, r3, #32768 @ 0x8000
  22332. 8009b38: 2b00 cmp r3, #0
  22333. 8009b3a: d049 beq.n 8009bd0 <HAL_DMA_IRQHandler+0xa68>
  22334. {
  22335. /* Current memory buffer used is Memory 0 */
  22336. if((ccr_reg & BDMA_CCR_CT) == 0U)
  22337. 8009b3c: 693b ldr r3, [r7, #16]
  22338. 8009b3e: f403 3380 and.w r3, r3, #65536 @ 0x10000
  22339. 8009b42: 2b00 cmp r3, #0
  22340. 8009b44: d109 bne.n 8009b5a <HAL_DMA_IRQHandler+0x9f2>
  22341. {
  22342. if(hdma->XferM1HalfCpltCallback != NULL)
  22343. 8009b46: 687b ldr r3, [r7, #4]
  22344. 8009b48: 6c9b ldr r3, [r3, #72] @ 0x48
  22345. 8009b4a: 2b00 cmp r3, #0
  22346. 8009b4c: f000 8210 beq.w 8009f70 <HAL_DMA_IRQHandler+0xe08>
  22347. {
  22348. /* Half transfer Callback for Memory 1 */
  22349. hdma->XferM1HalfCpltCallback(hdma);
  22350. 8009b50: 687b ldr r3, [r7, #4]
  22351. 8009b52: 6c9b ldr r3, [r3, #72] @ 0x48
  22352. 8009b54: 6878 ldr r0, [r7, #4]
  22353. 8009b56: 4798 blx r3
  22354. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  22355. 8009b58: e20a b.n 8009f70 <HAL_DMA_IRQHandler+0xe08>
  22356. }
  22357. }
  22358. /* Current memory buffer used is Memory 1 */
  22359. else
  22360. {
  22361. if(hdma->XferHalfCpltCallback != NULL)
  22362. 8009b5a: 687b ldr r3, [r7, #4]
  22363. 8009b5c: 6c1b ldr r3, [r3, #64] @ 0x40
  22364. 8009b5e: 2b00 cmp r3, #0
  22365. 8009b60: f000 8206 beq.w 8009f70 <HAL_DMA_IRQHandler+0xe08>
  22366. {
  22367. /* Half transfer Callback for Memory 0 */
  22368. hdma->XferHalfCpltCallback(hdma);
  22369. 8009b64: 687b ldr r3, [r7, #4]
  22370. 8009b66: 6c1b ldr r3, [r3, #64] @ 0x40
  22371. 8009b68: 6878 ldr r0, [r7, #4]
  22372. 8009b6a: 4798 blx r3
  22373. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  22374. 8009b6c: e200 b.n 8009f70 <HAL_DMA_IRQHandler+0xe08>
  22375. 8009b6e: bf00 nop
  22376. 8009b70: 40020010 .word 0x40020010
  22377. 8009b74: 40020028 .word 0x40020028
  22378. 8009b78: 40020040 .word 0x40020040
  22379. 8009b7c: 40020058 .word 0x40020058
  22380. 8009b80: 40020070 .word 0x40020070
  22381. 8009b84: 40020088 .word 0x40020088
  22382. 8009b88: 400200a0 .word 0x400200a0
  22383. 8009b8c: 400200b8 .word 0x400200b8
  22384. 8009b90: 40020410 .word 0x40020410
  22385. 8009b94: 40020428 .word 0x40020428
  22386. 8009b98: 40020440 .word 0x40020440
  22387. 8009b9c: 40020458 .word 0x40020458
  22388. 8009ba0: 40020470 .word 0x40020470
  22389. 8009ba4: 40020488 .word 0x40020488
  22390. 8009ba8: 400204a0 .word 0x400204a0
  22391. 8009bac: 400204b8 .word 0x400204b8
  22392. 8009bb0: 58025408 .word 0x58025408
  22393. 8009bb4: 5802541c .word 0x5802541c
  22394. 8009bb8: 58025430 .word 0x58025430
  22395. 8009bbc: 58025444 .word 0x58025444
  22396. 8009bc0: 58025458 .word 0x58025458
  22397. 8009bc4: 5802546c .word 0x5802546c
  22398. 8009bc8: 58025480 .word 0x58025480
  22399. 8009bcc: 58025494 .word 0x58025494
  22400. }
  22401. }
  22402. }
  22403. else
  22404. {
  22405. if((ccr_reg & BDMA_CCR_CIRC) == 0U)
  22406. 8009bd0: 693b ldr r3, [r7, #16]
  22407. 8009bd2: f003 0320 and.w r3, r3, #32
  22408. 8009bd6: 2b00 cmp r3, #0
  22409. 8009bd8: d160 bne.n 8009c9c <HAL_DMA_IRQHandler+0xb34>
  22410. {
  22411. /* Disable the half transfer interrupt */
  22412. __HAL_DMA_DISABLE_IT(hdma, DMA_IT_HT);
  22413. 8009bda: 687b ldr r3, [r7, #4]
  22414. 8009bdc: 681b ldr r3, [r3, #0]
  22415. 8009bde: 4a7f ldr r2, [pc, #508] @ (8009ddc <HAL_DMA_IRQHandler+0xc74>)
  22416. 8009be0: 4293 cmp r3, r2
  22417. 8009be2: d04a beq.n 8009c7a <HAL_DMA_IRQHandler+0xb12>
  22418. 8009be4: 687b ldr r3, [r7, #4]
  22419. 8009be6: 681b ldr r3, [r3, #0]
  22420. 8009be8: 4a7d ldr r2, [pc, #500] @ (8009de0 <HAL_DMA_IRQHandler+0xc78>)
  22421. 8009bea: 4293 cmp r3, r2
  22422. 8009bec: d045 beq.n 8009c7a <HAL_DMA_IRQHandler+0xb12>
  22423. 8009bee: 687b ldr r3, [r7, #4]
  22424. 8009bf0: 681b ldr r3, [r3, #0]
  22425. 8009bf2: 4a7c ldr r2, [pc, #496] @ (8009de4 <HAL_DMA_IRQHandler+0xc7c>)
  22426. 8009bf4: 4293 cmp r3, r2
  22427. 8009bf6: d040 beq.n 8009c7a <HAL_DMA_IRQHandler+0xb12>
  22428. 8009bf8: 687b ldr r3, [r7, #4]
  22429. 8009bfa: 681b ldr r3, [r3, #0]
  22430. 8009bfc: 4a7a ldr r2, [pc, #488] @ (8009de8 <HAL_DMA_IRQHandler+0xc80>)
  22431. 8009bfe: 4293 cmp r3, r2
  22432. 8009c00: d03b beq.n 8009c7a <HAL_DMA_IRQHandler+0xb12>
  22433. 8009c02: 687b ldr r3, [r7, #4]
  22434. 8009c04: 681b ldr r3, [r3, #0]
  22435. 8009c06: 4a79 ldr r2, [pc, #484] @ (8009dec <HAL_DMA_IRQHandler+0xc84>)
  22436. 8009c08: 4293 cmp r3, r2
  22437. 8009c0a: d036 beq.n 8009c7a <HAL_DMA_IRQHandler+0xb12>
  22438. 8009c0c: 687b ldr r3, [r7, #4]
  22439. 8009c0e: 681b ldr r3, [r3, #0]
  22440. 8009c10: 4a77 ldr r2, [pc, #476] @ (8009df0 <HAL_DMA_IRQHandler+0xc88>)
  22441. 8009c12: 4293 cmp r3, r2
  22442. 8009c14: d031 beq.n 8009c7a <HAL_DMA_IRQHandler+0xb12>
  22443. 8009c16: 687b ldr r3, [r7, #4]
  22444. 8009c18: 681b ldr r3, [r3, #0]
  22445. 8009c1a: 4a76 ldr r2, [pc, #472] @ (8009df4 <HAL_DMA_IRQHandler+0xc8c>)
  22446. 8009c1c: 4293 cmp r3, r2
  22447. 8009c1e: d02c beq.n 8009c7a <HAL_DMA_IRQHandler+0xb12>
  22448. 8009c20: 687b ldr r3, [r7, #4]
  22449. 8009c22: 681b ldr r3, [r3, #0]
  22450. 8009c24: 4a74 ldr r2, [pc, #464] @ (8009df8 <HAL_DMA_IRQHandler+0xc90>)
  22451. 8009c26: 4293 cmp r3, r2
  22452. 8009c28: d027 beq.n 8009c7a <HAL_DMA_IRQHandler+0xb12>
  22453. 8009c2a: 687b ldr r3, [r7, #4]
  22454. 8009c2c: 681b ldr r3, [r3, #0]
  22455. 8009c2e: 4a73 ldr r2, [pc, #460] @ (8009dfc <HAL_DMA_IRQHandler+0xc94>)
  22456. 8009c30: 4293 cmp r3, r2
  22457. 8009c32: d022 beq.n 8009c7a <HAL_DMA_IRQHandler+0xb12>
  22458. 8009c34: 687b ldr r3, [r7, #4]
  22459. 8009c36: 681b ldr r3, [r3, #0]
  22460. 8009c38: 4a71 ldr r2, [pc, #452] @ (8009e00 <HAL_DMA_IRQHandler+0xc98>)
  22461. 8009c3a: 4293 cmp r3, r2
  22462. 8009c3c: d01d beq.n 8009c7a <HAL_DMA_IRQHandler+0xb12>
  22463. 8009c3e: 687b ldr r3, [r7, #4]
  22464. 8009c40: 681b ldr r3, [r3, #0]
  22465. 8009c42: 4a70 ldr r2, [pc, #448] @ (8009e04 <HAL_DMA_IRQHandler+0xc9c>)
  22466. 8009c44: 4293 cmp r3, r2
  22467. 8009c46: d018 beq.n 8009c7a <HAL_DMA_IRQHandler+0xb12>
  22468. 8009c48: 687b ldr r3, [r7, #4]
  22469. 8009c4a: 681b ldr r3, [r3, #0]
  22470. 8009c4c: 4a6e ldr r2, [pc, #440] @ (8009e08 <HAL_DMA_IRQHandler+0xca0>)
  22471. 8009c4e: 4293 cmp r3, r2
  22472. 8009c50: d013 beq.n 8009c7a <HAL_DMA_IRQHandler+0xb12>
  22473. 8009c52: 687b ldr r3, [r7, #4]
  22474. 8009c54: 681b ldr r3, [r3, #0]
  22475. 8009c56: 4a6d ldr r2, [pc, #436] @ (8009e0c <HAL_DMA_IRQHandler+0xca4>)
  22476. 8009c58: 4293 cmp r3, r2
  22477. 8009c5a: d00e beq.n 8009c7a <HAL_DMA_IRQHandler+0xb12>
  22478. 8009c5c: 687b ldr r3, [r7, #4]
  22479. 8009c5e: 681b ldr r3, [r3, #0]
  22480. 8009c60: 4a6b ldr r2, [pc, #428] @ (8009e10 <HAL_DMA_IRQHandler+0xca8>)
  22481. 8009c62: 4293 cmp r3, r2
  22482. 8009c64: d009 beq.n 8009c7a <HAL_DMA_IRQHandler+0xb12>
  22483. 8009c66: 687b ldr r3, [r7, #4]
  22484. 8009c68: 681b ldr r3, [r3, #0]
  22485. 8009c6a: 4a6a ldr r2, [pc, #424] @ (8009e14 <HAL_DMA_IRQHandler+0xcac>)
  22486. 8009c6c: 4293 cmp r3, r2
  22487. 8009c6e: d004 beq.n 8009c7a <HAL_DMA_IRQHandler+0xb12>
  22488. 8009c70: 687b ldr r3, [r7, #4]
  22489. 8009c72: 681b ldr r3, [r3, #0]
  22490. 8009c74: 4a68 ldr r2, [pc, #416] @ (8009e18 <HAL_DMA_IRQHandler+0xcb0>)
  22491. 8009c76: 4293 cmp r3, r2
  22492. 8009c78: d108 bne.n 8009c8c <HAL_DMA_IRQHandler+0xb24>
  22493. 8009c7a: 687b ldr r3, [r7, #4]
  22494. 8009c7c: 681b ldr r3, [r3, #0]
  22495. 8009c7e: 681a ldr r2, [r3, #0]
  22496. 8009c80: 687b ldr r3, [r7, #4]
  22497. 8009c82: 681b ldr r3, [r3, #0]
  22498. 8009c84: f022 0208 bic.w r2, r2, #8
  22499. 8009c88: 601a str r2, [r3, #0]
  22500. 8009c8a: e007 b.n 8009c9c <HAL_DMA_IRQHandler+0xb34>
  22501. 8009c8c: 687b ldr r3, [r7, #4]
  22502. 8009c8e: 681b ldr r3, [r3, #0]
  22503. 8009c90: 681a ldr r2, [r3, #0]
  22504. 8009c92: 687b ldr r3, [r7, #4]
  22505. 8009c94: 681b ldr r3, [r3, #0]
  22506. 8009c96: f022 0204 bic.w r2, r2, #4
  22507. 8009c9a: 601a str r2, [r3, #0]
  22508. }
  22509. /* DMA peripheral state is not updated in Half Transfer */
  22510. /* but in Transfer Complete case */
  22511. if(hdma->XferHalfCpltCallback != NULL)
  22512. 8009c9c: 687b ldr r3, [r7, #4]
  22513. 8009c9e: 6c1b ldr r3, [r3, #64] @ 0x40
  22514. 8009ca0: 2b00 cmp r3, #0
  22515. 8009ca2: f000 8165 beq.w 8009f70 <HAL_DMA_IRQHandler+0xe08>
  22516. {
  22517. /* Half transfer callback */
  22518. hdma->XferHalfCpltCallback(hdma);
  22519. 8009ca6: 687b ldr r3, [r7, #4]
  22520. 8009ca8: 6c1b ldr r3, [r3, #64] @ 0x40
  22521. 8009caa: 6878 ldr r0, [r7, #4]
  22522. 8009cac: 4798 blx r3
  22523. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  22524. 8009cae: e15f b.n 8009f70 <HAL_DMA_IRQHandler+0xe08>
  22525. }
  22526. }
  22527. }
  22528. /* Transfer Complete Interrupt management ***********************************/
  22529. else if (((tmpisr_bdma & (BDMA_FLAG_TC0 << (hdma->StreamIndex & 0x1FU))) != 0U) && ((ccr_reg & BDMA_CCR_TCIE) != 0U))
  22530. 8009cb0: 687b ldr r3, [r7, #4]
  22531. 8009cb2: 6ddb ldr r3, [r3, #92] @ 0x5c
  22532. 8009cb4: f003 031f and.w r3, r3, #31
  22533. 8009cb8: 2202 movs r2, #2
  22534. 8009cba: 409a lsls r2, r3
  22535. 8009cbc: 697b ldr r3, [r7, #20]
  22536. 8009cbe: 4013 ands r3, r2
  22537. 8009cc0: 2b00 cmp r3, #0
  22538. 8009cc2: f000 80c5 beq.w 8009e50 <HAL_DMA_IRQHandler+0xce8>
  22539. 8009cc6: 693b ldr r3, [r7, #16]
  22540. 8009cc8: f003 0302 and.w r3, r3, #2
  22541. 8009ccc: 2b00 cmp r3, #0
  22542. 8009cce: f000 80bf beq.w 8009e50 <HAL_DMA_IRQHandler+0xce8>
  22543. {
  22544. /* Clear the transfer complete flag */
  22545. regs_bdma->IFCR = (BDMA_ISR_TCIF0) << (hdma->StreamIndex & 0x1FU);
  22546. 8009cd2: 687b ldr r3, [r7, #4]
  22547. 8009cd4: 6ddb ldr r3, [r3, #92] @ 0x5c
  22548. 8009cd6: f003 031f and.w r3, r3, #31
  22549. 8009cda: 2202 movs r2, #2
  22550. 8009cdc: 409a lsls r2, r3
  22551. 8009cde: 69fb ldr r3, [r7, #28]
  22552. 8009ce0: 605a str r2, [r3, #4]
  22553. /* Disable the transfer complete interrupt if the DMA mode is Double Buffering */
  22554. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  22555. 8009ce2: 693b ldr r3, [r7, #16]
  22556. 8009ce4: f403 4300 and.w r3, r3, #32768 @ 0x8000
  22557. 8009ce8: 2b00 cmp r3, #0
  22558. 8009cea: d018 beq.n 8009d1e <HAL_DMA_IRQHandler+0xbb6>
  22559. {
  22560. /* Current memory buffer used is Memory 0 */
  22561. if((ccr_reg & BDMA_CCR_CT) == 0U)
  22562. 8009cec: 693b ldr r3, [r7, #16]
  22563. 8009cee: f403 3380 and.w r3, r3, #65536 @ 0x10000
  22564. 8009cf2: 2b00 cmp r3, #0
  22565. 8009cf4: d109 bne.n 8009d0a <HAL_DMA_IRQHandler+0xba2>
  22566. {
  22567. if(hdma->XferM1CpltCallback != NULL)
  22568. 8009cf6: 687b ldr r3, [r7, #4]
  22569. 8009cf8: 6c5b ldr r3, [r3, #68] @ 0x44
  22570. 8009cfa: 2b00 cmp r3, #0
  22571. 8009cfc: f000 813a beq.w 8009f74 <HAL_DMA_IRQHandler+0xe0c>
  22572. {
  22573. /* Transfer complete Callback for Memory 1 */
  22574. hdma->XferM1CpltCallback(hdma);
  22575. 8009d00: 687b ldr r3, [r7, #4]
  22576. 8009d02: 6c5b ldr r3, [r3, #68] @ 0x44
  22577. 8009d04: 6878 ldr r0, [r7, #4]
  22578. 8009d06: 4798 blx r3
  22579. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  22580. 8009d08: e134 b.n 8009f74 <HAL_DMA_IRQHandler+0xe0c>
  22581. }
  22582. }
  22583. /* Current memory buffer used is Memory 1 */
  22584. else
  22585. {
  22586. if(hdma->XferCpltCallback != NULL)
  22587. 8009d0a: 687b ldr r3, [r7, #4]
  22588. 8009d0c: 6bdb ldr r3, [r3, #60] @ 0x3c
  22589. 8009d0e: 2b00 cmp r3, #0
  22590. 8009d10: f000 8130 beq.w 8009f74 <HAL_DMA_IRQHandler+0xe0c>
  22591. {
  22592. /* Transfer complete Callback for Memory 0 */
  22593. hdma->XferCpltCallback(hdma);
  22594. 8009d14: 687b ldr r3, [r7, #4]
  22595. 8009d16: 6bdb ldr r3, [r3, #60] @ 0x3c
  22596. 8009d18: 6878 ldr r0, [r7, #4]
  22597. 8009d1a: 4798 blx r3
  22598. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  22599. 8009d1c: e12a b.n 8009f74 <HAL_DMA_IRQHandler+0xe0c>
  22600. }
  22601. }
  22602. }
  22603. else
  22604. {
  22605. if((ccr_reg & BDMA_CCR_CIRC) == 0U)
  22606. 8009d1e: 693b ldr r3, [r7, #16]
  22607. 8009d20: f003 0320 and.w r3, r3, #32
  22608. 8009d24: 2b00 cmp r3, #0
  22609. 8009d26: f040 8089 bne.w 8009e3c <HAL_DMA_IRQHandler+0xcd4>
  22610. {
  22611. /* Disable the transfer complete and error interrupt, if the DMA mode is not CIRCULAR */
  22612. __HAL_DMA_DISABLE_IT(hdma, DMA_IT_TE | DMA_IT_TC);
  22613. 8009d2a: 687b ldr r3, [r7, #4]
  22614. 8009d2c: 681b ldr r3, [r3, #0]
  22615. 8009d2e: 4a2b ldr r2, [pc, #172] @ (8009ddc <HAL_DMA_IRQHandler+0xc74>)
  22616. 8009d30: 4293 cmp r3, r2
  22617. 8009d32: d04a beq.n 8009dca <HAL_DMA_IRQHandler+0xc62>
  22618. 8009d34: 687b ldr r3, [r7, #4]
  22619. 8009d36: 681b ldr r3, [r3, #0]
  22620. 8009d38: 4a29 ldr r2, [pc, #164] @ (8009de0 <HAL_DMA_IRQHandler+0xc78>)
  22621. 8009d3a: 4293 cmp r3, r2
  22622. 8009d3c: d045 beq.n 8009dca <HAL_DMA_IRQHandler+0xc62>
  22623. 8009d3e: 687b ldr r3, [r7, #4]
  22624. 8009d40: 681b ldr r3, [r3, #0]
  22625. 8009d42: 4a28 ldr r2, [pc, #160] @ (8009de4 <HAL_DMA_IRQHandler+0xc7c>)
  22626. 8009d44: 4293 cmp r3, r2
  22627. 8009d46: d040 beq.n 8009dca <HAL_DMA_IRQHandler+0xc62>
  22628. 8009d48: 687b ldr r3, [r7, #4]
  22629. 8009d4a: 681b ldr r3, [r3, #0]
  22630. 8009d4c: 4a26 ldr r2, [pc, #152] @ (8009de8 <HAL_DMA_IRQHandler+0xc80>)
  22631. 8009d4e: 4293 cmp r3, r2
  22632. 8009d50: d03b beq.n 8009dca <HAL_DMA_IRQHandler+0xc62>
  22633. 8009d52: 687b ldr r3, [r7, #4]
  22634. 8009d54: 681b ldr r3, [r3, #0]
  22635. 8009d56: 4a25 ldr r2, [pc, #148] @ (8009dec <HAL_DMA_IRQHandler+0xc84>)
  22636. 8009d58: 4293 cmp r3, r2
  22637. 8009d5a: d036 beq.n 8009dca <HAL_DMA_IRQHandler+0xc62>
  22638. 8009d5c: 687b ldr r3, [r7, #4]
  22639. 8009d5e: 681b ldr r3, [r3, #0]
  22640. 8009d60: 4a23 ldr r2, [pc, #140] @ (8009df0 <HAL_DMA_IRQHandler+0xc88>)
  22641. 8009d62: 4293 cmp r3, r2
  22642. 8009d64: d031 beq.n 8009dca <HAL_DMA_IRQHandler+0xc62>
  22643. 8009d66: 687b ldr r3, [r7, #4]
  22644. 8009d68: 681b ldr r3, [r3, #0]
  22645. 8009d6a: 4a22 ldr r2, [pc, #136] @ (8009df4 <HAL_DMA_IRQHandler+0xc8c>)
  22646. 8009d6c: 4293 cmp r3, r2
  22647. 8009d6e: d02c beq.n 8009dca <HAL_DMA_IRQHandler+0xc62>
  22648. 8009d70: 687b ldr r3, [r7, #4]
  22649. 8009d72: 681b ldr r3, [r3, #0]
  22650. 8009d74: 4a20 ldr r2, [pc, #128] @ (8009df8 <HAL_DMA_IRQHandler+0xc90>)
  22651. 8009d76: 4293 cmp r3, r2
  22652. 8009d78: d027 beq.n 8009dca <HAL_DMA_IRQHandler+0xc62>
  22653. 8009d7a: 687b ldr r3, [r7, #4]
  22654. 8009d7c: 681b ldr r3, [r3, #0]
  22655. 8009d7e: 4a1f ldr r2, [pc, #124] @ (8009dfc <HAL_DMA_IRQHandler+0xc94>)
  22656. 8009d80: 4293 cmp r3, r2
  22657. 8009d82: d022 beq.n 8009dca <HAL_DMA_IRQHandler+0xc62>
  22658. 8009d84: 687b ldr r3, [r7, #4]
  22659. 8009d86: 681b ldr r3, [r3, #0]
  22660. 8009d88: 4a1d ldr r2, [pc, #116] @ (8009e00 <HAL_DMA_IRQHandler+0xc98>)
  22661. 8009d8a: 4293 cmp r3, r2
  22662. 8009d8c: d01d beq.n 8009dca <HAL_DMA_IRQHandler+0xc62>
  22663. 8009d8e: 687b ldr r3, [r7, #4]
  22664. 8009d90: 681b ldr r3, [r3, #0]
  22665. 8009d92: 4a1c ldr r2, [pc, #112] @ (8009e04 <HAL_DMA_IRQHandler+0xc9c>)
  22666. 8009d94: 4293 cmp r3, r2
  22667. 8009d96: d018 beq.n 8009dca <HAL_DMA_IRQHandler+0xc62>
  22668. 8009d98: 687b ldr r3, [r7, #4]
  22669. 8009d9a: 681b ldr r3, [r3, #0]
  22670. 8009d9c: 4a1a ldr r2, [pc, #104] @ (8009e08 <HAL_DMA_IRQHandler+0xca0>)
  22671. 8009d9e: 4293 cmp r3, r2
  22672. 8009da0: d013 beq.n 8009dca <HAL_DMA_IRQHandler+0xc62>
  22673. 8009da2: 687b ldr r3, [r7, #4]
  22674. 8009da4: 681b ldr r3, [r3, #0]
  22675. 8009da6: 4a19 ldr r2, [pc, #100] @ (8009e0c <HAL_DMA_IRQHandler+0xca4>)
  22676. 8009da8: 4293 cmp r3, r2
  22677. 8009daa: d00e beq.n 8009dca <HAL_DMA_IRQHandler+0xc62>
  22678. 8009dac: 687b ldr r3, [r7, #4]
  22679. 8009dae: 681b ldr r3, [r3, #0]
  22680. 8009db0: 4a17 ldr r2, [pc, #92] @ (8009e10 <HAL_DMA_IRQHandler+0xca8>)
  22681. 8009db2: 4293 cmp r3, r2
  22682. 8009db4: d009 beq.n 8009dca <HAL_DMA_IRQHandler+0xc62>
  22683. 8009db6: 687b ldr r3, [r7, #4]
  22684. 8009db8: 681b ldr r3, [r3, #0]
  22685. 8009dba: 4a16 ldr r2, [pc, #88] @ (8009e14 <HAL_DMA_IRQHandler+0xcac>)
  22686. 8009dbc: 4293 cmp r3, r2
  22687. 8009dbe: d004 beq.n 8009dca <HAL_DMA_IRQHandler+0xc62>
  22688. 8009dc0: 687b ldr r3, [r7, #4]
  22689. 8009dc2: 681b ldr r3, [r3, #0]
  22690. 8009dc4: 4a14 ldr r2, [pc, #80] @ (8009e18 <HAL_DMA_IRQHandler+0xcb0>)
  22691. 8009dc6: 4293 cmp r3, r2
  22692. 8009dc8: d128 bne.n 8009e1c <HAL_DMA_IRQHandler+0xcb4>
  22693. 8009dca: 687b ldr r3, [r7, #4]
  22694. 8009dcc: 681b ldr r3, [r3, #0]
  22695. 8009dce: 681a ldr r2, [r3, #0]
  22696. 8009dd0: 687b ldr r3, [r7, #4]
  22697. 8009dd2: 681b ldr r3, [r3, #0]
  22698. 8009dd4: f022 0214 bic.w r2, r2, #20
  22699. 8009dd8: 601a str r2, [r3, #0]
  22700. 8009dda: e027 b.n 8009e2c <HAL_DMA_IRQHandler+0xcc4>
  22701. 8009ddc: 40020010 .word 0x40020010
  22702. 8009de0: 40020028 .word 0x40020028
  22703. 8009de4: 40020040 .word 0x40020040
  22704. 8009de8: 40020058 .word 0x40020058
  22705. 8009dec: 40020070 .word 0x40020070
  22706. 8009df0: 40020088 .word 0x40020088
  22707. 8009df4: 400200a0 .word 0x400200a0
  22708. 8009df8: 400200b8 .word 0x400200b8
  22709. 8009dfc: 40020410 .word 0x40020410
  22710. 8009e00: 40020428 .word 0x40020428
  22711. 8009e04: 40020440 .word 0x40020440
  22712. 8009e08: 40020458 .word 0x40020458
  22713. 8009e0c: 40020470 .word 0x40020470
  22714. 8009e10: 40020488 .word 0x40020488
  22715. 8009e14: 400204a0 .word 0x400204a0
  22716. 8009e18: 400204b8 .word 0x400204b8
  22717. 8009e1c: 687b ldr r3, [r7, #4]
  22718. 8009e1e: 681b ldr r3, [r3, #0]
  22719. 8009e20: 681a ldr r2, [r3, #0]
  22720. 8009e22: 687b ldr r3, [r7, #4]
  22721. 8009e24: 681b ldr r3, [r3, #0]
  22722. 8009e26: f022 020a bic.w r2, r2, #10
  22723. 8009e2a: 601a str r2, [r3, #0]
  22724. /* Change the DMA state */
  22725. hdma->State = HAL_DMA_STATE_READY;
  22726. 8009e2c: 687b ldr r3, [r7, #4]
  22727. 8009e2e: 2201 movs r2, #1
  22728. 8009e30: f883 2035 strb.w r2, [r3, #53] @ 0x35
  22729. /* Process Unlocked */
  22730. __HAL_UNLOCK(hdma);
  22731. 8009e34: 687b ldr r3, [r7, #4]
  22732. 8009e36: 2200 movs r2, #0
  22733. 8009e38: f883 2034 strb.w r2, [r3, #52] @ 0x34
  22734. }
  22735. if(hdma->XferCpltCallback != NULL)
  22736. 8009e3c: 687b ldr r3, [r7, #4]
  22737. 8009e3e: 6bdb ldr r3, [r3, #60] @ 0x3c
  22738. 8009e40: 2b00 cmp r3, #0
  22739. 8009e42: f000 8097 beq.w 8009f74 <HAL_DMA_IRQHandler+0xe0c>
  22740. {
  22741. /* Transfer complete callback */
  22742. hdma->XferCpltCallback(hdma);
  22743. 8009e46: 687b ldr r3, [r7, #4]
  22744. 8009e48: 6bdb ldr r3, [r3, #60] @ 0x3c
  22745. 8009e4a: 6878 ldr r0, [r7, #4]
  22746. 8009e4c: 4798 blx r3
  22747. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  22748. 8009e4e: e091 b.n 8009f74 <HAL_DMA_IRQHandler+0xe0c>
  22749. }
  22750. }
  22751. }
  22752. /* Transfer Error Interrupt management **************************************/
  22753. else if (((tmpisr_bdma & (BDMA_FLAG_TE0 << (hdma->StreamIndex & 0x1FU))) != 0U) && ((ccr_reg & BDMA_CCR_TEIE) != 0U))
  22754. 8009e50: 687b ldr r3, [r7, #4]
  22755. 8009e52: 6ddb ldr r3, [r3, #92] @ 0x5c
  22756. 8009e54: f003 031f and.w r3, r3, #31
  22757. 8009e58: 2208 movs r2, #8
  22758. 8009e5a: 409a lsls r2, r3
  22759. 8009e5c: 697b ldr r3, [r7, #20]
  22760. 8009e5e: 4013 ands r3, r2
  22761. 8009e60: 2b00 cmp r3, #0
  22762. 8009e62: f000 8088 beq.w 8009f76 <HAL_DMA_IRQHandler+0xe0e>
  22763. 8009e66: 693b ldr r3, [r7, #16]
  22764. 8009e68: f003 0308 and.w r3, r3, #8
  22765. 8009e6c: 2b00 cmp r3, #0
  22766. 8009e6e: f000 8082 beq.w 8009f76 <HAL_DMA_IRQHandler+0xe0e>
  22767. {
  22768. /* When a DMA transfer error occurs */
  22769. /* A hardware clear of its EN bits is performed */
  22770. /* Disable ALL DMA IT */
  22771. __HAL_DMA_DISABLE_IT(hdma, (DMA_IT_TC | DMA_IT_HT | DMA_IT_TE));
  22772. 8009e72: 687b ldr r3, [r7, #4]
  22773. 8009e74: 681b ldr r3, [r3, #0]
  22774. 8009e76: 4a41 ldr r2, [pc, #260] @ (8009f7c <HAL_DMA_IRQHandler+0xe14>)
  22775. 8009e78: 4293 cmp r3, r2
  22776. 8009e7a: d04a beq.n 8009f12 <HAL_DMA_IRQHandler+0xdaa>
  22777. 8009e7c: 687b ldr r3, [r7, #4]
  22778. 8009e7e: 681b ldr r3, [r3, #0]
  22779. 8009e80: 4a3f ldr r2, [pc, #252] @ (8009f80 <HAL_DMA_IRQHandler+0xe18>)
  22780. 8009e82: 4293 cmp r3, r2
  22781. 8009e84: d045 beq.n 8009f12 <HAL_DMA_IRQHandler+0xdaa>
  22782. 8009e86: 687b ldr r3, [r7, #4]
  22783. 8009e88: 681b ldr r3, [r3, #0]
  22784. 8009e8a: 4a3e ldr r2, [pc, #248] @ (8009f84 <HAL_DMA_IRQHandler+0xe1c>)
  22785. 8009e8c: 4293 cmp r3, r2
  22786. 8009e8e: d040 beq.n 8009f12 <HAL_DMA_IRQHandler+0xdaa>
  22787. 8009e90: 687b ldr r3, [r7, #4]
  22788. 8009e92: 681b ldr r3, [r3, #0]
  22789. 8009e94: 4a3c ldr r2, [pc, #240] @ (8009f88 <HAL_DMA_IRQHandler+0xe20>)
  22790. 8009e96: 4293 cmp r3, r2
  22791. 8009e98: d03b beq.n 8009f12 <HAL_DMA_IRQHandler+0xdaa>
  22792. 8009e9a: 687b ldr r3, [r7, #4]
  22793. 8009e9c: 681b ldr r3, [r3, #0]
  22794. 8009e9e: 4a3b ldr r2, [pc, #236] @ (8009f8c <HAL_DMA_IRQHandler+0xe24>)
  22795. 8009ea0: 4293 cmp r3, r2
  22796. 8009ea2: d036 beq.n 8009f12 <HAL_DMA_IRQHandler+0xdaa>
  22797. 8009ea4: 687b ldr r3, [r7, #4]
  22798. 8009ea6: 681b ldr r3, [r3, #0]
  22799. 8009ea8: 4a39 ldr r2, [pc, #228] @ (8009f90 <HAL_DMA_IRQHandler+0xe28>)
  22800. 8009eaa: 4293 cmp r3, r2
  22801. 8009eac: d031 beq.n 8009f12 <HAL_DMA_IRQHandler+0xdaa>
  22802. 8009eae: 687b ldr r3, [r7, #4]
  22803. 8009eb0: 681b ldr r3, [r3, #0]
  22804. 8009eb2: 4a38 ldr r2, [pc, #224] @ (8009f94 <HAL_DMA_IRQHandler+0xe2c>)
  22805. 8009eb4: 4293 cmp r3, r2
  22806. 8009eb6: d02c beq.n 8009f12 <HAL_DMA_IRQHandler+0xdaa>
  22807. 8009eb8: 687b ldr r3, [r7, #4]
  22808. 8009eba: 681b ldr r3, [r3, #0]
  22809. 8009ebc: 4a36 ldr r2, [pc, #216] @ (8009f98 <HAL_DMA_IRQHandler+0xe30>)
  22810. 8009ebe: 4293 cmp r3, r2
  22811. 8009ec0: d027 beq.n 8009f12 <HAL_DMA_IRQHandler+0xdaa>
  22812. 8009ec2: 687b ldr r3, [r7, #4]
  22813. 8009ec4: 681b ldr r3, [r3, #0]
  22814. 8009ec6: 4a35 ldr r2, [pc, #212] @ (8009f9c <HAL_DMA_IRQHandler+0xe34>)
  22815. 8009ec8: 4293 cmp r3, r2
  22816. 8009eca: d022 beq.n 8009f12 <HAL_DMA_IRQHandler+0xdaa>
  22817. 8009ecc: 687b ldr r3, [r7, #4]
  22818. 8009ece: 681b ldr r3, [r3, #0]
  22819. 8009ed0: 4a33 ldr r2, [pc, #204] @ (8009fa0 <HAL_DMA_IRQHandler+0xe38>)
  22820. 8009ed2: 4293 cmp r3, r2
  22821. 8009ed4: d01d beq.n 8009f12 <HAL_DMA_IRQHandler+0xdaa>
  22822. 8009ed6: 687b ldr r3, [r7, #4]
  22823. 8009ed8: 681b ldr r3, [r3, #0]
  22824. 8009eda: 4a32 ldr r2, [pc, #200] @ (8009fa4 <HAL_DMA_IRQHandler+0xe3c>)
  22825. 8009edc: 4293 cmp r3, r2
  22826. 8009ede: d018 beq.n 8009f12 <HAL_DMA_IRQHandler+0xdaa>
  22827. 8009ee0: 687b ldr r3, [r7, #4]
  22828. 8009ee2: 681b ldr r3, [r3, #0]
  22829. 8009ee4: 4a30 ldr r2, [pc, #192] @ (8009fa8 <HAL_DMA_IRQHandler+0xe40>)
  22830. 8009ee6: 4293 cmp r3, r2
  22831. 8009ee8: d013 beq.n 8009f12 <HAL_DMA_IRQHandler+0xdaa>
  22832. 8009eea: 687b ldr r3, [r7, #4]
  22833. 8009eec: 681b ldr r3, [r3, #0]
  22834. 8009eee: 4a2f ldr r2, [pc, #188] @ (8009fac <HAL_DMA_IRQHandler+0xe44>)
  22835. 8009ef0: 4293 cmp r3, r2
  22836. 8009ef2: d00e beq.n 8009f12 <HAL_DMA_IRQHandler+0xdaa>
  22837. 8009ef4: 687b ldr r3, [r7, #4]
  22838. 8009ef6: 681b ldr r3, [r3, #0]
  22839. 8009ef8: 4a2d ldr r2, [pc, #180] @ (8009fb0 <HAL_DMA_IRQHandler+0xe48>)
  22840. 8009efa: 4293 cmp r3, r2
  22841. 8009efc: d009 beq.n 8009f12 <HAL_DMA_IRQHandler+0xdaa>
  22842. 8009efe: 687b ldr r3, [r7, #4]
  22843. 8009f00: 681b ldr r3, [r3, #0]
  22844. 8009f02: 4a2c ldr r2, [pc, #176] @ (8009fb4 <HAL_DMA_IRQHandler+0xe4c>)
  22845. 8009f04: 4293 cmp r3, r2
  22846. 8009f06: d004 beq.n 8009f12 <HAL_DMA_IRQHandler+0xdaa>
  22847. 8009f08: 687b ldr r3, [r7, #4]
  22848. 8009f0a: 681b ldr r3, [r3, #0]
  22849. 8009f0c: 4a2a ldr r2, [pc, #168] @ (8009fb8 <HAL_DMA_IRQHandler+0xe50>)
  22850. 8009f0e: 4293 cmp r3, r2
  22851. 8009f10: d108 bne.n 8009f24 <HAL_DMA_IRQHandler+0xdbc>
  22852. 8009f12: 687b ldr r3, [r7, #4]
  22853. 8009f14: 681b ldr r3, [r3, #0]
  22854. 8009f16: 681a ldr r2, [r3, #0]
  22855. 8009f18: 687b ldr r3, [r7, #4]
  22856. 8009f1a: 681b ldr r3, [r3, #0]
  22857. 8009f1c: f022 021c bic.w r2, r2, #28
  22858. 8009f20: 601a str r2, [r3, #0]
  22859. 8009f22: e007 b.n 8009f34 <HAL_DMA_IRQHandler+0xdcc>
  22860. 8009f24: 687b ldr r3, [r7, #4]
  22861. 8009f26: 681b ldr r3, [r3, #0]
  22862. 8009f28: 681a ldr r2, [r3, #0]
  22863. 8009f2a: 687b ldr r3, [r7, #4]
  22864. 8009f2c: 681b ldr r3, [r3, #0]
  22865. 8009f2e: f022 020e bic.w r2, r2, #14
  22866. 8009f32: 601a str r2, [r3, #0]
  22867. /* Clear all flags */
  22868. regs_bdma->IFCR = (BDMA_ISR_GIF0) << (hdma->StreamIndex & 0x1FU);
  22869. 8009f34: 687b ldr r3, [r7, #4]
  22870. 8009f36: 6ddb ldr r3, [r3, #92] @ 0x5c
  22871. 8009f38: f003 031f and.w r3, r3, #31
  22872. 8009f3c: 2201 movs r2, #1
  22873. 8009f3e: 409a lsls r2, r3
  22874. 8009f40: 69fb ldr r3, [r7, #28]
  22875. 8009f42: 605a str r2, [r3, #4]
  22876. /* Update error code */
  22877. hdma->ErrorCode = HAL_DMA_ERROR_TE;
  22878. 8009f44: 687b ldr r3, [r7, #4]
  22879. 8009f46: 2201 movs r2, #1
  22880. 8009f48: 655a str r2, [r3, #84] @ 0x54
  22881. /* Change the DMA state */
  22882. hdma->State = HAL_DMA_STATE_READY;
  22883. 8009f4a: 687b ldr r3, [r7, #4]
  22884. 8009f4c: 2201 movs r2, #1
  22885. 8009f4e: f883 2035 strb.w r2, [r3, #53] @ 0x35
  22886. /* Process Unlocked */
  22887. __HAL_UNLOCK(hdma);
  22888. 8009f52: 687b ldr r3, [r7, #4]
  22889. 8009f54: 2200 movs r2, #0
  22890. 8009f56: f883 2034 strb.w r2, [r3, #52] @ 0x34
  22891. if (hdma->XferErrorCallback != NULL)
  22892. 8009f5a: 687b ldr r3, [r7, #4]
  22893. 8009f5c: 6cdb ldr r3, [r3, #76] @ 0x4c
  22894. 8009f5e: 2b00 cmp r3, #0
  22895. 8009f60: d009 beq.n 8009f76 <HAL_DMA_IRQHandler+0xe0e>
  22896. {
  22897. /* Transfer error callback */
  22898. hdma->XferErrorCallback(hdma);
  22899. 8009f62: 687b ldr r3, [r7, #4]
  22900. 8009f64: 6cdb ldr r3, [r3, #76] @ 0x4c
  22901. 8009f66: 6878 ldr r0, [r7, #4]
  22902. 8009f68: 4798 blx r3
  22903. 8009f6a: e004 b.n 8009f76 <HAL_DMA_IRQHandler+0xe0e>
  22904. return;
  22905. 8009f6c: bf00 nop
  22906. 8009f6e: e002 b.n 8009f76 <HAL_DMA_IRQHandler+0xe0e>
  22907. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  22908. 8009f70: bf00 nop
  22909. 8009f72: e000 b.n 8009f76 <HAL_DMA_IRQHandler+0xe0e>
  22910. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  22911. 8009f74: bf00 nop
  22912. }
  22913. else
  22914. {
  22915. /* Nothing To Do */
  22916. }
  22917. }
  22918. 8009f76: 3728 adds r7, #40 @ 0x28
  22919. 8009f78: 46bd mov sp, r7
  22920. 8009f7a: bd80 pop {r7, pc}
  22921. 8009f7c: 40020010 .word 0x40020010
  22922. 8009f80: 40020028 .word 0x40020028
  22923. 8009f84: 40020040 .word 0x40020040
  22924. 8009f88: 40020058 .word 0x40020058
  22925. 8009f8c: 40020070 .word 0x40020070
  22926. 8009f90: 40020088 .word 0x40020088
  22927. 8009f94: 400200a0 .word 0x400200a0
  22928. 8009f98: 400200b8 .word 0x400200b8
  22929. 8009f9c: 40020410 .word 0x40020410
  22930. 8009fa0: 40020428 .word 0x40020428
  22931. 8009fa4: 40020440 .word 0x40020440
  22932. 8009fa8: 40020458 .word 0x40020458
  22933. 8009fac: 40020470 .word 0x40020470
  22934. 8009fb0: 40020488 .word 0x40020488
  22935. 8009fb4: 400204a0 .word 0x400204a0
  22936. 8009fb8: 400204b8 .word 0x400204b8
  22937. 08009fbc <DMA_SetConfig>:
  22938. * @param DstAddress: The destination memory Buffer address
  22939. * @param DataLength: The length of data to be transferred from source to destination
  22940. * @retval None
  22941. */
  22942. static void DMA_SetConfig(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
  22943. {
  22944. 8009fbc: b480 push {r7}
  22945. 8009fbe: b087 sub sp, #28
  22946. 8009fc0: af00 add r7, sp, #0
  22947. 8009fc2: 60f8 str r0, [r7, #12]
  22948. 8009fc4: 60b9 str r1, [r7, #8]
  22949. 8009fc6: 607a str r2, [r7, #4]
  22950. 8009fc8: 603b str r3, [r7, #0]
  22951. /* calculate DMA base and stream number */
  22952. DMA_Base_Registers *regs_dma = (DMA_Base_Registers *)hdma->StreamBaseAddress;
  22953. 8009fca: 68fb ldr r3, [r7, #12]
  22954. 8009fcc: 6d9b ldr r3, [r3, #88] @ 0x58
  22955. 8009fce: 617b str r3, [r7, #20]
  22956. BDMA_Base_Registers *regs_bdma = (BDMA_Base_Registers *)hdma->StreamBaseAddress;
  22957. 8009fd0: 68fb ldr r3, [r7, #12]
  22958. 8009fd2: 6d9b ldr r3, [r3, #88] @ 0x58
  22959. 8009fd4: 613b str r3, [r7, #16]
  22960. if(IS_DMA_DMAMUX_ALL_INSTANCE(hdma->Instance) != 0U) /* No DMAMUX available for BDMA1 */
  22961. 8009fd6: 68fb ldr r3, [r7, #12]
  22962. 8009fd8: 681b ldr r3, [r3, #0]
  22963. 8009fda: 4a7f ldr r2, [pc, #508] @ (800a1d8 <DMA_SetConfig+0x21c>)
  22964. 8009fdc: 4293 cmp r3, r2
  22965. 8009fde: d072 beq.n 800a0c6 <DMA_SetConfig+0x10a>
  22966. 8009fe0: 68fb ldr r3, [r7, #12]
  22967. 8009fe2: 681b ldr r3, [r3, #0]
  22968. 8009fe4: 4a7d ldr r2, [pc, #500] @ (800a1dc <DMA_SetConfig+0x220>)
  22969. 8009fe6: 4293 cmp r3, r2
  22970. 8009fe8: d06d beq.n 800a0c6 <DMA_SetConfig+0x10a>
  22971. 8009fea: 68fb ldr r3, [r7, #12]
  22972. 8009fec: 681b ldr r3, [r3, #0]
  22973. 8009fee: 4a7c ldr r2, [pc, #496] @ (800a1e0 <DMA_SetConfig+0x224>)
  22974. 8009ff0: 4293 cmp r3, r2
  22975. 8009ff2: d068 beq.n 800a0c6 <DMA_SetConfig+0x10a>
  22976. 8009ff4: 68fb ldr r3, [r7, #12]
  22977. 8009ff6: 681b ldr r3, [r3, #0]
  22978. 8009ff8: 4a7a ldr r2, [pc, #488] @ (800a1e4 <DMA_SetConfig+0x228>)
  22979. 8009ffa: 4293 cmp r3, r2
  22980. 8009ffc: d063 beq.n 800a0c6 <DMA_SetConfig+0x10a>
  22981. 8009ffe: 68fb ldr r3, [r7, #12]
  22982. 800a000: 681b ldr r3, [r3, #0]
  22983. 800a002: 4a79 ldr r2, [pc, #484] @ (800a1e8 <DMA_SetConfig+0x22c>)
  22984. 800a004: 4293 cmp r3, r2
  22985. 800a006: d05e beq.n 800a0c6 <DMA_SetConfig+0x10a>
  22986. 800a008: 68fb ldr r3, [r7, #12]
  22987. 800a00a: 681b ldr r3, [r3, #0]
  22988. 800a00c: 4a77 ldr r2, [pc, #476] @ (800a1ec <DMA_SetConfig+0x230>)
  22989. 800a00e: 4293 cmp r3, r2
  22990. 800a010: d059 beq.n 800a0c6 <DMA_SetConfig+0x10a>
  22991. 800a012: 68fb ldr r3, [r7, #12]
  22992. 800a014: 681b ldr r3, [r3, #0]
  22993. 800a016: 4a76 ldr r2, [pc, #472] @ (800a1f0 <DMA_SetConfig+0x234>)
  22994. 800a018: 4293 cmp r3, r2
  22995. 800a01a: d054 beq.n 800a0c6 <DMA_SetConfig+0x10a>
  22996. 800a01c: 68fb ldr r3, [r7, #12]
  22997. 800a01e: 681b ldr r3, [r3, #0]
  22998. 800a020: 4a74 ldr r2, [pc, #464] @ (800a1f4 <DMA_SetConfig+0x238>)
  22999. 800a022: 4293 cmp r3, r2
  23000. 800a024: d04f beq.n 800a0c6 <DMA_SetConfig+0x10a>
  23001. 800a026: 68fb ldr r3, [r7, #12]
  23002. 800a028: 681b ldr r3, [r3, #0]
  23003. 800a02a: 4a73 ldr r2, [pc, #460] @ (800a1f8 <DMA_SetConfig+0x23c>)
  23004. 800a02c: 4293 cmp r3, r2
  23005. 800a02e: d04a beq.n 800a0c6 <DMA_SetConfig+0x10a>
  23006. 800a030: 68fb ldr r3, [r7, #12]
  23007. 800a032: 681b ldr r3, [r3, #0]
  23008. 800a034: 4a71 ldr r2, [pc, #452] @ (800a1fc <DMA_SetConfig+0x240>)
  23009. 800a036: 4293 cmp r3, r2
  23010. 800a038: d045 beq.n 800a0c6 <DMA_SetConfig+0x10a>
  23011. 800a03a: 68fb ldr r3, [r7, #12]
  23012. 800a03c: 681b ldr r3, [r3, #0]
  23013. 800a03e: 4a70 ldr r2, [pc, #448] @ (800a200 <DMA_SetConfig+0x244>)
  23014. 800a040: 4293 cmp r3, r2
  23015. 800a042: d040 beq.n 800a0c6 <DMA_SetConfig+0x10a>
  23016. 800a044: 68fb ldr r3, [r7, #12]
  23017. 800a046: 681b ldr r3, [r3, #0]
  23018. 800a048: 4a6e ldr r2, [pc, #440] @ (800a204 <DMA_SetConfig+0x248>)
  23019. 800a04a: 4293 cmp r3, r2
  23020. 800a04c: d03b beq.n 800a0c6 <DMA_SetConfig+0x10a>
  23021. 800a04e: 68fb ldr r3, [r7, #12]
  23022. 800a050: 681b ldr r3, [r3, #0]
  23023. 800a052: 4a6d ldr r2, [pc, #436] @ (800a208 <DMA_SetConfig+0x24c>)
  23024. 800a054: 4293 cmp r3, r2
  23025. 800a056: d036 beq.n 800a0c6 <DMA_SetConfig+0x10a>
  23026. 800a058: 68fb ldr r3, [r7, #12]
  23027. 800a05a: 681b ldr r3, [r3, #0]
  23028. 800a05c: 4a6b ldr r2, [pc, #428] @ (800a20c <DMA_SetConfig+0x250>)
  23029. 800a05e: 4293 cmp r3, r2
  23030. 800a060: d031 beq.n 800a0c6 <DMA_SetConfig+0x10a>
  23031. 800a062: 68fb ldr r3, [r7, #12]
  23032. 800a064: 681b ldr r3, [r3, #0]
  23033. 800a066: 4a6a ldr r2, [pc, #424] @ (800a210 <DMA_SetConfig+0x254>)
  23034. 800a068: 4293 cmp r3, r2
  23035. 800a06a: d02c beq.n 800a0c6 <DMA_SetConfig+0x10a>
  23036. 800a06c: 68fb ldr r3, [r7, #12]
  23037. 800a06e: 681b ldr r3, [r3, #0]
  23038. 800a070: 4a68 ldr r2, [pc, #416] @ (800a214 <DMA_SetConfig+0x258>)
  23039. 800a072: 4293 cmp r3, r2
  23040. 800a074: d027 beq.n 800a0c6 <DMA_SetConfig+0x10a>
  23041. 800a076: 68fb ldr r3, [r7, #12]
  23042. 800a078: 681b ldr r3, [r3, #0]
  23043. 800a07a: 4a67 ldr r2, [pc, #412] @ (800a218 <DMA_SetConfig+0x25c>)
  23044. 800a07c: 4293 cmp r3, r2
  23045. 800a07e: d022 beq.n 800a0c6 <DMA_SetConfig+0x10a>
  23046. 800a080: 68fb ldr r3, [r7, #12]
  23047. 800a082: 681b ldr r3, [r3, #0]
  23048. 800a084: 4a65 ldr r2, [pc, #404] @ (800a21c <DMA_SetConfig+0x260>)
  23049. 800a086: 4293 cmp r3, r2
  23050. 800a088: d01d beq.n 800a0c6 <DMA_SetConfig+0x10a>
  23051. 800a08a: 68fb ldr r3, [r7, #12]
  23052. 800a08c: 681b ldr r3, [r3, #0]
  23053. 800a08e: 4a64 ldr r2, [pc, #400] @ (800a220 <DMA_SetConfig+0x264>)
  23054. 800a090: 4293 cmp r3, r2
  23055. 800a092: d018 beq.n 800a0c6 <DMA_SetConfig+0x10a>
  23056. 800a094: 68fb ldr r3, [r7, #12]
  23057. 800a096: 681b ldr r3, [r3, #0]
  23058. 800a098: 4a62 ldr r2, [pc, #392] @ (800a224 <DMA_SetConfig+0x268>)
  23059. 800a09a: 4293 cmp r3, r2
  23060. 800a09c: d013 beq.n 800a0c6 <DMA_SetConfig+0x10a>
  23061. 800a09e: 68fb ldr r3, [r7, #12]
  23062. 800a0a0: 681b ldr r3, [r3, #0]
  23063. 800a0a2: 4a61 ldr r2, [pc, #388] @ (800a228 <DMA_SetConfig+0x26c>)
  23064. 800a0a4: 4293 cmp r3, r2
  23065. 800a0a6: d00e beq.n 800a0c6 <DMA_SetConfig+0x10a>
  23066. 800a0a8: 68fb ldr r3, [r7, #12]
  23067. 800a0aa: 681b ldr r3, [r3, #0]
  23068. 800a0ac: 4a5f ldr r2, [pc, #380] @ (800a22c <DMA_SetConfig+0x270>)
  23069. 800a0ae: 4293 cmp r3, r2
  23070. 800a0b0: d009 beq.n 800a0c6 <DMA_SetConfig+0x10a>
  23071. 800a0b2: 68fb ldr r3, [r7, #12]
  23072. 800a0b4: 681b ldr r3, [r3, #0]
  23073. 800a0b6: 4a5e ldr r2, [pc, #376] @ (800a230 <DMA_SetConfig+0x274>)
  23074. 800a0b8: 4293 cmp r3, r2
  23075. 800a0ba: d004 beq.n 800a0c6 <DMA_SetConfig+0x10a>
  23076. 800a0bc: 68fb ldr r3, [r7, #12]
  23077. 800a0be: 681b ldr r3, [r3, #0]
  23078. 800a0c0: 4a5c ldr r2, [pc, #368] @ (800a234 <DMA_SetConfig+0x278>)
  23079. 800a0c2: 4293 cmp r3, r2
  23080. 800a0c4: d101 bne.n 800a0ca <DMA_SetConfig+0x10e>
  23081. 800a0c6: 2301 movs r3, #1
  23082. 800a0c8: e000 b.n 800a0cc <DMA_SetConfig+0x110>
  23083. 800a0ca: 2300 movs r3, #0
  23084. 800a0cc: 2b00 cmp r3, #0
  23085. 800a0ce: d00d beq.n 800a0ec <DMA_SetConfig+0x130>
  23086. {
  23087. /* Clear the DMAMUX synchro overrun flag */
  23088. hdma->DMAmuxChannelStatus->CFR = hdma->DMAmuxChannelStatusMask;
  23089. 800a0d0: 68fb ldr r3, [r7, #12]
  23090. 800a0d2: 6e5b ldr r3, [r3, #100] @ 0x64
  23091. 800a0d4: 68fa ldr r2, [r7, #12]
  23092. 800a0d6: 6e92 ldr r2, [r2, #104] @ 0x68
  23093. 800a0d8: 605a str r2, [r3, #4]
  23094. if(hdma->DMAmuxRequestGen != 0U)
  23095. 800a0da: 68fb ldr r3, [r7, #12]
  23096. 800a0dc: 6edb ldr r3, [r3, #108] @ 0x6c
  23097. 800a0de: 2b00 cmp r3, #0
  23098. 800a0e0: d004 beq.n 800a0ec <DMA_SetConfig+0x130>
  23099. {
  23100. /* Clear the DMAMUX request generator overrun flag */
  23101. hdma->DMAmuxRequestGenStatus->RGCFR = hdma->DMAmuxRequestGenStatusMask;
  23102. 800a0e2: 68fb ldr r3, [r7, #12]
  23103. 800a0e4: 6f1b ldr r3, [r3, #112] @ 0x70
  23104. 800a0e6: 68fa ldr r2, [r7, #12]
  23105. 800a0e8: 6f52 ldr r2, [r2, #116] @ 0x74
  23106. 800a0ea: 605a str r2, [r3, #4]
  23107. }
  23108. }
  23109. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  23110. 800a0ec: 68fb ldr r3, [r7, #12]
  23111. 800a0ee: 681b ldr r3, [r3, #0]
  23112. 800a0f0: 4a39 ldr r2, [pc, #228] @ (800a1d8 <DMA_SetConfig+0x21c>)
  23113. 800a0f2: 4293 cmp r3, r2
  23114. 800a0f4: d04a beq.n 800a18c <DMA_SetConfig+0x1d0>
  23115. 800a0f6: 68fb ldr r3, [r7, #12]
  23116. 800a0f8: 681b ldr r3, [r3, #0]
  23117. 800a0fa: 4a38 ldr r2, [pc, #224] @ (800a1dc <DMA_SetConfig+0x220>)
  23118. 800a0fc: 4293 cmp r3, r2
  23119. 800a0fe: d045 beq.n 800a18c <DMA_SetConfig+0x1d0>
  23120. 800a100: 68fb ldr r3, [r7, #12]
  23121. 800a102: 681b ldr r3, [r3, #0]
  23122. 800a104: 4a36 ldr r2, [pc, #216] @ (800a1e0 <DMA_SetConfig+0x224>)
  23123. 800a106: 4293 cmp r3, r2
  23124. 800a108: d040 beq.n 800a18c <DMA_SetConfig+0x1d0>
  23125. 800a10a: 68fb ldr r3, [r7, #12]
  23126. 800a10c: 681b ldr r3, [r3, #0]
  23127. 800a10e: 4a35 ldr r2, [pc, #212] @ (800a1e4 <DMA_SetConfig+0x228>)
  23128. 800a110: 4293 cmp r3, r2
  23129. 800a112: d03b beq.n 800a18c <DMA_SetConfig+0x1d0>
  23130. 800a114: 68fb ldr r3, [r7, #12]
  23131. 800a116: 681b ldr r3, [r3, #0]
  23132. 800a118: 4a33 ldr r2, [pc, #204] @ (800a1e8 <DMA_SetConfig+0x22c>)
  23133. 800a11a: 4293 cmp r3, r2
  23134. 800a11c: d036 beq.n 800a18c <DMA_SetConfig+0x1d0>
  23135. 800a11e: 68fb ldr r3, [r7, #12]
  23136. 800a120: 681b ldr r3, [r3, #0]
  23137. 800a122: 4a32 ldr r2, [pc, #200] @ (800a1ec <DMA_SetConfig+0x230>)
  23138. 800a124: 4293 cmp r3, r2
  23139. 800a126: d031 beq.n 800a18c <DMA_SetConfig+0x1d0>
  23140. 800a128: 68fb ldr r3, [r7, #12]
  23141. 800a12a: 681b ldr r3, [r3, #0]
  23142. 800a12c: 4a30 ldr r2, [pc, #192] @ (800a1f0 <DMA_SetConfig+0x234>)
  23143. 800a12e: 4293 cmp r3, r2
  23144. 800a130: d02c beq.n 800a18c <DMA_SetConfig+0x1d0>
  23145. 800a132: 68fb ldr r3, [r7, #12]
  23146. 800a134: 681b ldr r3, [r3, #0]
  23147. 800a136: 4a2f ldr r2, [pc, #188] @ (800a1f4 <DMA_SetConfig+0x238>)
  23148. 800a138: 4293 cmp r3, r2
  23149. 800a13a: d027 beq.n 800a18c <DMA_SetConfig+0x1d0>
  23150. 800a13c: 68fb ldr r3, [r7, #12]
  23151. 800a13e: 681b ldr r3, [r3, #0]
  23152. 800a140: 4a2d ldr r2, [pc, #180] @ (800a1f8 <DMA_SetConfig+0x23c>)
  23153. 800a142: 4293 cmp r3, r2
  23154. 800a144: d022 beq.n 800a18c <DMA_SetConfig+0x1d0>
  23155. 800a146: 68fb ldr r3, [r7, #12]
  23156. 800a148: 681b ldr r3, [r3, #0]
  23157. 800a14a: 4a2c ldr r2, [pc, #176] @ (800a1fc <DMA_SetConfig+0x240>)
  23158. 800a14c: 4293 cmp r3, r2
  23159. 800a14e: d01d beq.n 800a18c <DMA_SetConfig+0x1d0>
  23160. 800a150: 68fb ldr r3, [r7, #12]
  23161. 800a152: 681b ldr r3, [r3, #0]
  23162. 800a154: 4a2a ldr r2, [pc, #168] @ (800a200 <DMA_SetConfig+0x244>)
  23163. 800a156: 4293 cmp r3, r2
  23164. 800a158: d018 beq.n 800a18c <DMA_SetConfig+0x1d0>
  23165. 800a15a: 68fb ldr r3, [r7, #12]
  23166. 800a15c: 681b ldr r3, [r3, #0]
  23167. 800a15e: 4a29 ldr r2, [pc, #164] @ (800a204 <DMA_SetConfig+0x248>)
  23168. 800a160: 4293 cmp r3, r2
  23169. 800a162: d013 beq.n 800a18c <DMA_SetConfig+0x1d0>
  23170. 800a164: 68fb ldr r3, [r7, #12]
  23171. 800a166: 681b ldr r3, [r3, #0]
  23172. 800a168: 4a27 ldr r2, [pc, #156] @ (800a208 <DMA_SetConfig+0x24c>)
  23173. 800a16a: 4293 cmp r3, r2
  23174. 800a16c: d00e beq.n 800a18c <DMA_SetConfig+0x1d0>
  23175. 800a16e: 68fb ldr r3, [r7, #12]
  23176. 800a170: 681b ldr r3, [r3, #0]
  23177. 800a172: 4a26 ldr r2, [pc, #152] @ (800a20c <DMA_SetConfig+0x250>)
  23178. 800a174: 4293 cmp r3, r2
  23179. 800a176: d009 beq.n 800a18c <DMA_SetConfig+0x1d0>
  23180. 800a178: 68fb ldr r3, [r7, #12]
  23181. 800a17a: 681b ldr r3, [r3, #0]
  23182. 800a17c: 4a24 ldr r2, [pc, #144] @ (800a210 <DMA_SetConfig+0x254>)
  23183. 800a17e: 4293 cmp r3, r2
  23184. 800a180: d004 beq.n 800a18c <DMA_SetConfig+0x1d0>
  23185. 800a182: 68fb ldr r3, [r7, #12]
  23186. 800a184: 681b ldr r3, [r3, #0]
  23187. 800a186: 4a23 ldr r2, [pc, #140] @ (800a214 <DMA_SetConfig+0x258>)
  23188. 800a188: 4293 cmp r3, r2
  23189. 800a18a: d101 bne.n 800a190 <DMA_SetConfig+0x1d4>
  23190. 800a18c: 2301 movs r3, #1
  23191. 800a18e: e000 b.n 800a192 <DMA_SetConfig+0x1d6>
  23192. 800a190: 2300 movs r3, #0
  23193. 800a192: 2b00 cmp r3, #0
  23194. 800a194: d059 beq.n 800a24a <DMA_SetConfig+0x28e>
  23195. {
  23196. /* Clear all interrupt flags at correct offset within the register */
  23197. regs_dma->IFCR = 0x3FUL << (hdma->StreamIndex & 0x1FU);
  23198. 800a196: 68fb ldr r3, [r7, #12]
  23199. 800a198: 6ddb ldr r3, [r3, #92] @ 0x5c
  23200. 800a19a: f003 031f and.w r3, r3, #31
  23201. 800a19e: 223f movs r2, #63 @ 0x3f
  23202. 800a1a0: 409a lsls r2, r3
  23203. 800a1a2: 697b ldr r3, [r7, #20]
  23204. 800a1a4: 609a str r2, [r3, #8]
  23205. /* Clear DBM bit */
  23206. ((DMA_Stream_TypeDef *)hdma->Instance)->CR &= (uint32_t)(~DMA_SxCR_DBM);
  23207. 800a1a6: 68fb ldr r3, [r7, #12]
  23208. 800a1a8: 681b ldr r3, [r3, #0]
  23209. 800a1aa: 681a ldr r2, [r3, #0]
  23210. 800a1ac: 68fb ldr r3, [r7, #12]
  23211. 800a1ae: 681b ldr r3, [r3, #0]
  23212. 800a1b0: f422 2280 bic.w r2, r2, #262144 @ 0x40000
  23213. 800a1b4: 601a str r2, [r3, #0]
  23214. /* Configure DMA Stream data length */
  23215. ((DMA_Stream_TypeDef *)hdma->Instance)->NDTR = DataLength;
  23216. 800a1b6: 68fb ldr r3, [r7, #12]
  23217. 800a1b8: 681b ldr r3, [r3, #0]
  23218. 800a1ba: 683a ldr r2, [r7, #0]
  23219. 800a1bc: 605a str r2, [r3, #4]
  23220. /* Peripheral to Memory */
  23221. if((hdma->Init.Direction) == DMA_MEMORY_TO_PERIPH)
  23222. 800a1be: 68fb ldr r3, [r7, #12]
  23223. 800a1c0: 689b ldr r3, [r3, #8]
  23224. 800a1c2: 2b40 cmp r3, #64 @ 0x40
  23225. 800a1c4: d138 bne.n 800a238 <DMA_SetConfig+0x27c>
  23226. {
  23227. /* Configure DMA Stream destination address */
  23228. ((DMA_Stream_TypeDef *)hdma->Instance)->PAR = DstAddress;
  23229. 800a1c6: 68fb ldr r3, [r7, #12]
  23230. 800a1c8: 681b ldr r3, [r3, #0]
  23231. 800a1ca: 687a ldr r2, [r7, #4]
  23232. 800a1cc: 609a str r2, [r3, #8]
  23233. /* Configure DMA Stream source address */
  23234. ((DMA_Stream_TypeDef *)hdma->Instance)->M0AR = SrcAddress;
  23235. 800a1ce: 68fb ldr r3, [r7, #12]
  23236. 800a1d0: 681b ldr r3, [r3, #0]
  23237. 800a1d2: 68ba ldr r2, [r7, #8]
  23238. 800a1d4: 60da str r2, [r3, #12]
  23239. }
  23240. else
  23241. {
  23242. /* Nothing To Do */
  23243. }
  23244. }
  23245. 800a1d6: e086 b.n 800a2e6 <DMA_SetConfig+0x32a>
  23246. 800a1d8: 40020010 .word 0x40020010
  23247. 800a1dc: 40020028 .word 0x40020028
  23248. 800a1e0: 40020040 .word 0x40020040
  23249. 800a1e4: 40020058 .word 0x40020058
  23250. 800a1e8: 40020070 .word 0x40020070
  23251. 800a1ec: 40020088 .word 0x40020088
  23252. 800a1f0: 400200a0 .word 0x400200a0
  23253. 800a1f4: 400200b8 .word 0x400200b8
  23254. 800a1f8: 40020410 .word 0x40020410
  23255. 800a1fc: 40020428 .word 0x40020428
  23256. 800a200: 40020440 .word 0x40020440
  23257. 800a204: 40020458 .word 0x40020458
  23258. 800a208: 40020470 .word 0x40020470
  23259. 800a20c: 40020488 .word 0x40020488
  23260. 800a210: 400204a0 .word 0x400204a0
  23261. 800a214: 400204b8 .word 0x400204b8
  23262. 800a218: 58025408 .word 0x58025408
  23263. 800a21c: 5802541c .word 0x5802541c
  23264. 800a220: 58025430 .word 0x58025430
  23265. 800a224: 58025444 .word 0x58025444
  23266. 800a228: 58025458 .word 0x58025458
  23267. 800a22c: 5802546c .word 0x5802546c
  23268. 800a230: 58025480 .word 0x58025480
  23269. 800a234: 58025494 .word 0x58025494
  23270. ((DMA_Stream_TypeDef *)hdma->Instance)->PAR = SrcAddress;
  23271. 800a238: 68fb ldr r3, [r7, #12]
  23272. 800a23a: 681b ldr r3, [r3, #0]
  23273. 800a23c: 68ba ldr r2, [r7, #8]
  23274. 800a23e: 609a str r2, [r3, #8]
  23275. ((DMA_Stream_TypeDef *)hdma->Instance)->M0AR = DstAddress;
  23276. 800a240: 68fb ldr r3, [r7, #12]
  23277. 800a242: 681b ldr r3, [r3, #0]
  23278. 800a244: 687a ldr r2, [r7, #4]
  23279. 800a246: 60da str r2, [r3, #12]
  23280. }
  23281. 800a248: e04d b.n 800a2e6 <DMA_SetConfig+0x32a>
  23282. else if(IS_BDMA_CHANNEL_INSTANCE(hdma->Instance) != 0U) /* BDMA instance(s) */
  23283. 800a24a: 68fb ldr r3, [r7, #12]
  23284. 800a24c: 681b ldr r3, [r3, #0]
  23285. 800a24e: 4a29 ldr r2, [pc, #164] @ (800a2f4 <DMA_SetConfig+0x338>)
  23286. 800a250: 4293 cmp r3, r2
  23287. 800a252: d022 beq.n 800a29a <DMA_SetConfig+0x2de>
  23288. 800a254: 68fb ldr r3, [r7, #12]
  23289. 800a256: 681b ldr r3, [r3, #0]
  23290. 800a258: 4a27 ldr r2, [pc, #156] @ (800a2f8 <DMA_SetConfig+0x33c>)
  23291. 800a25a: 4293 cmp r3, r2
  23292. 800a25c: d01d beq.n 800a29a <DMA_SetConfig+0x2de>
  23293. 800a25e: 68fb ldr r3, [r7, #12]
  23294. 800a260: 681b ldr r3, [r3, #0]
  23295. 800a262: 4a26 ldr r2, [pc, #152] @ (800a2fc <DMA_SetConfig+0x340>)
  23296. 800a264: 4293 cmp r3, r2
  23297. 800a266: d018 beq.n 800a29a <DMA_SetConfig+0x2de>
  23298. 800a268: 68fb ldr r3, [r7, #12]
  23299. 800a26a: 681b ldr r3, [r3, #0]
  23300. 800a26c: 4a24 ldr r2, [pc, #144] @ (800a300 <DMA_SetConfig+0x344>)
  23301. 800a26e: 4293 cmp r3, r2
  23302. 800a270: d013 beq.n 800a29a <DMA_SetConfig+0x2de>
  23303. 800a272: 68fb ldr r3, [r7, #12]
  23304. 800a274: 681b ldr r3, [r3, #0]
  23305. 800a276: 4a23 ldr r2, [pc, #140] @ (800a304 <DMA_SetConfig+0x348>)
  23306. 800a278: 4293 cmp r3, r2
  23307. 800a27a: d00e beq.n 800a29a <DMA_SetConfig+0x2de>
  23308. 800a27c: 68fb ldr r3, [r7, #12]
  23309. 800a27e: 681b ldr r3, [r3, #0]
  23310. 800a280: 4a21 ldr r2, [pc, #132] @ (800a308 <DMA_SetConfig+0x34c>)
  23311. 800a282: 4293 cmp r3, r2
  23312. 800a284: d009 beq.n 800a29a <DMA_SetConfig+0x2de>
  23313. 800a286: 68fb ldr r3, [r7, #12]
  23314. 800a288: 681b ldr r3, [r3, #0]
  23315. 800a28a: 4a20 ldr r2, [pc, #128] @ (800a30c <DMA_SetConfig+0x350>)
  23316. 800a28c: 4293 cmp r3, r2
  23317. 800a28e: d004 beq.n 800a29a <DMA_SetConfig+0x2de>
  23318. 800a290: 68fb ldr r3, [r7, #12]
  23319. 800a292: 681b ldr r3, [r3, #0]
  23320. 800a294: 4a1e ldr r2, [pc, #120] @ (800a310 <DMA_SetConfig+0x354>)
  23321. 800a296: 4293 cmp r3, r2
  23322. 800a298: d101 bne.n 800a29e <DMA_SetConfig+0x2e2>
  23323. 800a29a: 2301 movs r3, #1
  23324. 800a29c: e000 b.n 800a2a0 <DMA_SetConfig+0x2e4>
  23325. 800a29e: 2300 movs r3, #0
  23326. 800a2a0: 2b00 cmp r3, #0
  23327. 800a2a2: d020 beq.n 800a2e6 <DMA_SetConfig+0x32a>
  23328. regs_bdma->IFCR = (BDMA_ISR_GIF0) << (hdma->StreamIndex & 0x1FU);
  23329. 800a2a4: 68fb ldr r3, [r7, #12]
  23330. 800a2a6: 6ddb ldr r3, [r3, #92] @ 0x5c
  23331. 800a2a8: f003 031f and.w r3, r3, #31
  23332. 800a2ac: 2201 movs r2, #1
  23333. 800a2ae: 409a lsls r2, r3
  23334. 800a2b0: 693b ldr r3, [r7, #16]
  23335. 800a2b2: 605a str r2, [r3, #4]
  23336. ((BDMA_Channel_TypeDef *)hdma->Instance)->CNDTR = DataLength;
  23337. 800a2b4: 68fb ldr r3, [r7, #12]
  23338. 800a2b6: 681b ldr r3, [r3, #0]
  23339. 800a2b8: 683a ldr r2, [r7, #0]
  23340. 800a2ba: 605a str r2, [r3, #4]
  23341. if((hdma->Init.Direction) == DMA_MEMORY_TO_PERIPH)
  23342. 800a2bc: 68fb ldr r3, [r7, #12]
  23343. 800a2be: 689b ldr r3, [r3, #8]
  23344. 800a2c0: 2b40 cmp r3, #64 @ 0x40
  23345. 800a2c2: d108 bne.n 800a2d6 <DMA_SetConfig+0x31a>
  23346. ((BDMA_Channel_TypeDef *)hdma->Instance)->CPAR = DstAddress;
  23347. 800a2c4: 68fb ldr r3, [r7, #12]
  23348. 800a2c6: 681b ldr r3, [r3, #0]
  23349. 800a2c8: 687a ldr r2, [r7, #4]
  23350. 800a2ca: 609a str r2, [r3, #8]
  23351. ((BDMA_Channel_TypeDef *)hdma->Instance)->CM0AR = SrcAddress;
  23352. 800a2cc: 68fb ldr r3, [r7, #12]
  23353. 800a2ce: 681b ldr r3, [r3, #0]
  23354. 800a2d0: 68ba ldr r2, [r7, #8]
  23355. 800a2d2: 60da str r2, [r3, #12]
  23356. }
  23357. 800a2d4: e007 b.n 800a2e6 <DMA_SetConfig+0x32a>
  23358. ((BDMA_Channel_TypeDef *)hdma->Instance)->CPAR = SrcAddress;
  23359. 800a2d6: 68fb ldr r3, [r7, #12]
  23360. 800a2d8: 681b ldr r3, [r3, #0]
  23361. 800a2da: 68ba ldr r2, [r7, #8]
  23362. 800a2dc: 609a str r2, [r3, #8]
  23363. ((BDMA_Channel_TypeDef *)hdma->Instance)->CM0AR = DstAddress;
  23364. 800a2de: 68fb ldr r3, [r7, #12]
  23365. 800a2e0: 681b ldr r3, [r3, #0]
  23366. 800a2e2: 687a ldr r2, [r7, #4]
  23367. 800a2e4: 60da str r2, [r3, #12]
  23368. }
  23369. 800a2e6: bf00 nop
  23370. 800a2e8: 371c adds r7, #28
  23371. 800a2ea: 46bd mov sp, r7
  23372. 800a2ec: f85d 7b04 ldr.w r7, [sp], #4
  23373. 800a2f0: 4770 bx lr
  23374. 800a2f2: bf00 nop
  23375. 800a2f4: 58025408 .word 0x58025408
  23376. 800a2f8: 5802541c .word 0x5802541c
  23377. 800a2fc: 58025430 .word 0x58025430
  23378. 800a300: 58025444 .word 0x58025444
  23379. 800a304: 58025458 .word 0x58025458
  23380. 800a308: 5802546c .word 0x5802546c
  23381. 800a30c: 58025480 .word 0x58025480
  23382. 800a310: 58025494 .word 0x58025494
  23383. 0800a314 <DMA_CalcBaseAndBitshift>:
  23384. * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
  23385. * the configuration information for the specified DMA Stream.
  23386. * @retval Stream base address
  23387. */
  23388. static uint32_t DMA_CalcBaseAndBitshift(DMA_HandleTypeDef *hdma)
  23389. {
  23390. 800a314: b480 push {r7}
  23391. 800a316: b085 sub sp, #20
  23392. 800a318: af00 add r7, sp, #0
  23393. 800a31a: 6078 str r0, [r7, #4]
  23394. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  23395. 800a31c: 687b ldr r3, [r7, #4]
  23396. 800a31e: 681b ldr r3, [r3, #0]
  23397. 800a320: 4a42 ldr r2, [pc, #264] @ (800a42c <DMA_CalcBaseAndBitshift+0x118>)
  23398. 800a322: 4293 cmp r3, r2
  23399. 800a324: d04a beq.n 800a3bc <DMA_CalcBaseAndBitshift+0xa8>
  23400. 800a326: 687b ldr r3, [r7, #4]
  23401. 800a328: 681b ldr r3, [r3, #0]
  23402. 800a32a: 4a41 ldr r2, [pc, #260] @ (800a430 <DMA_CalcBaseAndBitshift+0x11c>)
  23403. 800a32c: 4293 cmp r3, r2
  23404. 800a32e: d045 beq.n 800a3bc <DMA_CalcBaseAndBitshift+0xa8>
  23405. 800a330: 687b ldr r3, [r7, #4]
  23406. 800a332: 681b ldr r3, [r3, #0]
  23407. 800a334: 4a3f ldr r2, [pc, #252] @ (800a434 <DMA_CalcBaseAndBitshift+0x120>)
  23408. 800a336: 4293 cmp r3, r2
  23409. 800a338: d040 beq.n 800a3bc <DMA_CalcBaseAndBitshift+0xa8>
  23410. 800a33a: 687b ldr r3, [r7, #4]
  23411. 800a33c: 681b ldr r3, [r3, #0]
  23412. 800a33e: 4a3e ldr r2, [pc, #248] @ (800a438 <DMA_CalcBaseAndBitshift+0x124>)
  23413. 800a340: 4293 cmp r3, r2
  23414. 800a342: d03b beq.n 800a3bc <DMA_CalcBaseAndBitshift+0xa8>
  23415. 800a344: 687b ldr r3, [r7, #4]
  23416. 800a346: 681b ldr r3, [r3, #0]
  23417. 800a348: 4a3c ldr r2, [pc, #240] @ (800a43c <DMA_CalcBaseAndBitshift+0x128>)
  23418. 800a34a: 4293 cmp r3, r2
  23419. 800a34c: d036 beq.n 800a3bc <DMA_CalcBaseAndBitshift+0xa8>
  23420. 800a34e: 687b ldr r3, [r7, #4]
  23421. 800a350: 681b ldr r3, [r3, #0]
  23422. 800a352: 4a3b ldr r2, [pc, #236] @ (800a440 <DMA_CalcBaseAndBitshift+0x12c>)
  23423. 800a354: 4293 cmp r3, r2
  23424. 800a356: d031 beq.n 800a3bc <DMA_CalcBaseAndBitshift+0xa8>
  23425. 800a358: 687b ldr r3, [r7, #4]
  23426. 800a35a: 681b ldr r3, [r3, #0]
  23427. 800a35c: 4a39 ldr r2, [pc, #228] @ (800a444 <DMA_CalcBaseAndBitshift+0x130>)
  23428. 800a35e: 4293 cmp r3, r2
  23429. 800a360: d02c beq.n 800a3bc <DMA_CalcBaseAndBitshift+0xa8>
  23430. 800a362: 687b ldr r3, [r7, #4]
  23431. 800a364: 681b ldr r3, [r3, #0]
  23432. 800a366: 4a38 ldr r2, [pc, #224] @ (800a448 <DMA_CalcBaseAndBitshift+0x134>)
  23433. 800a368: 4293 cmp r3, r2
  23434. 800a36a: d027 beq.n 800a3bc <DMA_CalcBaseAndBitshift+0xa8>
  23435. 800a36c: 687b ldr r3, [r7, #4]
  23436. 800a36e: 681b ldr r3, [r3, #0]
  23437. 800a370: 4a36 ldr r2, [pc, #216] @ (800a44c <DMA_CalcBaseAndBitshift+0x138>)
  23438. 800a372: 4293 cmp r3, r2
  23439. 800a374: d022 beq.n 800a3bc <DMA_CalcBaseAndBitshift+0xa8>
  23440. 800a376: 687b ldr r3, [r7, #4]
  23441. 800a378: 681b ldr r3, [r3, #0]
  23442. 800a37a: 4a35 ldr r2, [pc, #212] @ (800a450 <DMA_CalcBaseAndBitshift+0x13c>)
  23443. 800a37c: 4293 cmp r3, r2
  23444. 800a37e: d01d beq.n 800a3bc <DMA_CalcBaseAndBitshift+0xa8>
  23445. 800a380: 687b ldr r3, [r7, #4]
  23446. 800a382: 681b ldr r3, [r3, #0]
  23447. 800a384: 4a33 ldr r2, [pc, #204] @ (800a454 <DMA_CalcBaseAndBitshift+0x140>)
  23448. 800a386: 4293 cmp r3, r2
  23449. 800a388: d018 beq.n 800a3bc <DMA_CalcBaseAndBitshift+0xa8>
  23450. 800a38a: 687b ldr r3, [r7, #4]
  23451. 800a38c: 681b ldr r3, [r3, #0]
  23452. 800a38e: 4a32 ldr r2, [pc, #200] @ (800a458 <DMA_CalcBaseAndBitshift+0x144>)
  23453. 800a390: 4293 cmp r3, r2
  23454. 800a392: d013 beq.n 800a3bc <DMA_CalcBaseAndBitshift+0xa8>
  23455. 800a394: 687b ldr r3, [r7, #4]
  23456. 800a396: 681b ldr r3, [r3, #0]
  23457. 800a398: 4a30 ldr r2, [pc, #192] @ (800a45c <DMA_CalcBaseAndBitshift+0x148>)
  23458. 800a39a: 4293 cmp r3, r2
  23459. 800a39c: d00e beq.n 800a3bc <DMA_CalcBaseAndBitshift+0xa8>
  23460. 800a39e: 687b ldr r3, [r7, #4]
  23461. 800a3a0: 681b ldr r3, [r3, #0]
  23462. 800a3a2: 4a2f ldr r2, [pc, #188] @ (800a460 <DMA_CalcBaseAndBitshift+0x14c>)
  23463. 800a3a4: 4293 cmp r3, r2
  23464. 800a3a6: d009 beq.n 800a3bc <DMA_CalcBaseAndBitshift+0xa8>
  23465. 800a3a8: 687b ldr r3, [r7, #4]
  23466. 800a3aa: 681b ldr r3, [r3, #0]
  23467. 800a3ac: 4a2d ldr r2, [pc, #180] @ (800a464 <DMA_CalcBaseAndBitshift+0x150>)
  23468. 800a3ae: 4293 cmp r3, r2
  23469. 800a3b0: d004 beq.n 800a3bc <DMA_CalcBaseAndBitshift+0xa8>
  23470. 800a3b2: 687b ldr r3, [r7, #4]
  23471. 800a3b4: 681b ldr r3, [r3, #0]
  23472. 800a3b6: 4a2c ldr r2, [pc, #176] @ (800a468 <DMA_CalcBaseAndBitshift+0x154>)
  23473. 800a3b8: 4293 cmp r3, r2
  23474. 800a3ba: d101 bne.n 800a3c0 <DMA_CalcBaseAndBitshift+0xac>
  23475. 800a3bc: 2301 movs r3, #1
  23476. 800a3be: e000 b.n 800a3c2 <DMA_CalcBaseAndBitshift+0xae>
  23477. 800a3c0: 2300 movs r3, #0
  23478. 800a3c2: 2b00 cmp r3, #0
  23479. 800a3c4: d024 beq.n 800a410 <DMA_CalcBaseAndBitshift+0xfc>
  23480. {
  23481. uint32_t stream_number = (((uint32_t)((uint32_t*)hdma->Instance) & 0xFFU) - 16U) / 24U;
  23482. 800a3c6: 687b ldr r3, [r7, #4]
  23483. 800a3c8: 681b ldr r3, [r3, #0]
  23484. 800a3ca: b2db uxtb r3, r3
  23485. 800a3cc: 3b10 subs r3, #16
  23486. 800a3ce: 4a27 ldr r2, [pc, #156] @ (800a46c <DMA_CalcBaseAndBitshift+0x158>)
  23487. 800a3d0: fba2 2303 umull r2, r3, r2, r3
  23488. 800a3d4: 091b lsrs r3, r3, #4
  23489. 800a3d6: 60fb str r3, [r7, #12]
  23490. /* lookup table for necessary bitshift of flags within status registers */
  23491. static const uint8_t flagBitshiftOffset[8U] = {0U, 6U, 16U, 22U, 0U, 6U, 16U, 22U};
  23492. hdma->StreamIndex = flagBitshiftOffset[stream_number & 0x7U];
  23493. 800a3d8: 68fb ldr r3, [r7, #12]
  23494. 800a3da: f003 0307 and.w r3, r3, #7
  23495. 800a3de: 4a24 ldr r2, [pc, #144] @ (800a470 <DMA_CalcBaseAndBitshift+0x15c>)
  23496. 800a3e0: 5cd3 ldrb r3, [r2, r3]
  23497. 800a3e2: 461a mov r2, r3
  23498. 800a3e4: 687b ldr r3, [r7, #4]
  23499. 800a3e6: 65da str r2, [r3, #92] @ 0x5c
  23500. if (stream_number > 3U)
  23501. 800a3e8: 68fb ldr r3, [r7, #12]
  23502. 800a3ea: 2b03 cmp r3, #3
  23503. 800a3ec: d908 bls.n 800a400 <DMA_CalcBaseAndBitshift+0xec>
  23504. {
  23505. /* return pointer to HISR and HIFCR */
  23506. hdma->StreamBaseAddress = (((uint32_t)((uint32_t*)hdma->Instance) & (uint32_t)(~0x3FFU)) + 4U);
  23507. 800a3ee: 687b ldr r3, [r7, #4]
  23508. 800a3f0: 681b ldr r3, [r3, #0]
  23509. 800a3f2: 461a mov r2, r3
  23510. 800a3f4: 4b1f ldr r3, [pc, #124] @ (800a474 <DMA_CalcBaseAndBitshift+0x160>)
  23511. 800a3f6: 4013 ands r3, r2
  23512. 800a3f8: 1d1a adds r2, r3, #4
  23513. 800a3fa: 687b ldr r3, [r7, #4]
  23514. 800a3fc: 659a str r2, [r3, #88] @ 0x58
  23515. 800a3fe: e00d b.n 800a41c <DMA_CalcBaseAndBitshift+0x108>
  23516. }
  23517. else
  23518. {
  23519. /* return pointer to LISR and LIFCR */
  23520. hdma->StreamBaseAddress = ((uint32_t)((uint32_t*)hdma->Instance) & (uint32_t)(~0x3FFU));
  23521. 800a400: 687b ldr r3, [r7, #4]
  23522. 800a402: 681b ldr r3, [r3, #0]
  23523. 800a404: 461a mov r2, r3
  23524. 800a406: 4b1b ldr r3, [pc, #108] @ (800a474 <DMA_CalcBaseAndBitshift+0x160>)
  23525. 800a408: 4013 ands r3, r2
  23526. 800a40a: 687a ldr r2, [r7, #4]
  23527. 800a40c: 6593 str r3, [r2, #88] @ 0x58
  23528. 800a40e: e005 b.n 800a41c <DMA_CalcBaseAndBitshift+0x108>
  23529. }
  23530. }
  23531. else /* BDMA instance(s) */
  23532. {
  23533. /* return pointer to ISR and IFCR */
  23534. hdma->StreamBaseAddress = ((uint32_t)((uint32_t*)hdma->Instance) & (uint32_t)(~0xFFU));
  23535. 800a410: 687b ldr r3, [r7, #4]
  23536. 800a412: 681b ldr r3, [r3, #0]
  23537. 800a414: f023 02ff bic.w r2, r3, #255 @ 0xff
  23538. 800a418: 687b ldr r3, [r7, #4]
  23539. 800a41a: 659a str r2, [r3, #88] @ 0x58
  23540. }
  23541. return hdma->StreamBaseAddress;
  23542. 800a41c: 687b ldr r3, [r7, #4]
  23543. 800a41e: 6d9b ldr r3, [r3, #88] @ 0x58
  23544. }
  23545. 800a420: 4618 mov r0, r3
  23546. 800a422: 3714 adds r7, #20
  23547. 800a424: 46bd mov sp, r7
  23548. 800a426: f85d 7b04 ldr.w r7, [sp], #4
  23549. 800a42a: 4770 bx lr
  23550. 800a42c: 40020010 .word 0x40020010
  23551. 800a430: 40020028 .word 0x40020028
  23552. 800a434: 40020040 .word 0x40020040
  23553. 800a438: 40020058 .word 0x40020058
  23554. 800a43c: 40020070 .word 0x40020070
  23555. 800a440: 40020088 .word 0x40020088
  23556. 800a444: 400200a0 .word 0x400200a0
  23557. 800a448: 400200b8 .word 0x400200b8
  23558. 800a44c: 40020410 .word 0x40020410
  23559. 800a450: 40020428 .word 0x40020428
  23560. 800a454: 40020440 .word 0x40020440
  23561. 800a458: 40020458 .word 0x40020458
  23562. 800a45c: 40020470 .word 0x40020470
  23563. 800a460: 40020488 .word 0x40020488
  23564. 800a464: 400204a0 .word 0x400204a0
  23565. 800a468: 400204b8 .word 0x400204b8
  23566. 800a46c: aaaaaaab .word 0xaaaaaaab
  23567. 800a470: 080189d8 .word 0x080189d8
  23568. 800a474: fffffc00 .word 0xfffffc00
  23569. 0800a478 <DMA_CheckFifoParam>:
  23570. * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
  23571. * the configuration information for the specified DMA Stream.
  23572. * @retval HAL status
  23573. */
  23574. static HAL_StatusTypeDef DMA_CheckFifoParam(DMA_HandleTypeDef *hdma)
  23575. {
  23576. 800a478: b480 push {r7}
  23577. 800a47a: b085 sub sp, #20
  23578. 800a47c: af00 add r7, sp, #0
  23579. 800a47e: 6078 str r0, [r7, #4]
  23580. HAL_StatusTypeDef status = HAL_OK;
  23581. 800a480: 2300 movs r3, #0
  23582. 800a482: 73fb strb r3, [r7, #15]
  23583. /* Memory Data size equal to Byte */
  23584. if (hdma->Init.MemDataAlignment == DMA_MDATAALIGN_BYTE)
  23585. 800a484: 687b ldr r3, [r7, #4]
  23586. 800a486: 699b ldr r3, [r3, #24]
  23587. 800a488: 2b00 cmp r3, #0
  23588. 800a48a: d120 bne.n 800a4ce <DMA_CheckFifoParam+0x56>
  23589. {
  23590. switch (hdma->Init.FIFOThreshold)
  23591. 800a48c: 687b ldr r3, [r7, #4]
  23592. 800a48e: 6a9b ldr r3, [r3, #40] @ 0x28
  23593. 800a490: 2b03 cmp r3, #3
  23594. 800a492: d858 bhi.n 800a546 <DMA_CheckFifoParam+0xce>
  23595. 800a494: a201 add r2, pc, #4 @ (adr r2, 800a49c <DMA_CheckFifoParam+0x24>)
  23596. 800a496: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  23597. 800a49a: bf00 nop
  23598. 800a49c: 0800a4ad .word 0x0800a4ad
  23599. 800a4a0: 0800a4bf .word 0x0800a4bf
  23600. 800a4a4: 0800a4ad .word 0x0800a4ad
  23601. 800a4a8: 0800a547 .word 0x0800a547
  23602. {
  23603. case DMA_FIFO_THRESHOLD_1QUARTERFULL:
  23604. case DMA_FIFO_THRESHOLD_3QUARTERSFULL:
  23605. if ((hdma->Init.MemBurst & DMA_SxCR_MBURST_1) == DMA_SxCR_MBURST_1)
  23606. 800a4ac: 687b ldr r3, [r7, #4]
  23607. 800a4ae: 6adb ldr r3, [r3, #44] @ 0x2c
  23608. 800a4b0: f003 7380 and.w r3, r3, #16777216 @ 0x1000000
  23609. 800a4b4: 2b00 cmp r3, #0
  23610. 800a4b6: d048 beq.n 800a54a <DMA_CheckFifoParam+0xd2>
  23611. {
  23612. status = HAL_ERROR;
  23613. 800a4b8: 2301 movs r3, #1
  23614. 800a4ba: 73fb strb r3, [r7, #15]
  23615. }
  23616. break;
  23617. 800a4bc: e045 b.n 800a54a <DMA_CheckFifoParam+0xd2>
  23618. case DMA_FIFO_THRESHOLD_HALFFULL:
  23619. if (hdma->Init.MemBurst == DMA_MBURST_INC16)
  23620. 800a4be: 687b ldr r3, [r7, #4]
  23621. 800a4c0: 6adb ldr r3, [r3, #44] @ 0x2c
  23622. 800a4c2: f1b3 7fc0 cmp.w r3, #25165824 @ 0x1800000
  23623. 800a4c6: d142 bne.n 800a54e <DMA_CheckFifoParam+0xd6>
  23624. {
  23625. status = HAL_ERROR;
  23626. 800a4c8: 2301 movs r3, #1
  23627. 800a4ca: 73fb strb r3, [r7, #15]
  23628. }
  23629. break;
  23630. 800a4cc: e03f b.n 800a54e <DMA_CheckFifoParam+0xd6>
  23631. break;
  23632. }
  23633. }
  23634. /* Memory Data size equal to Half-Word */
  23635. else if (hdma->Init.MemDataAlignment == DMA_MDATAALIGN_HALFWORD)
  23636. 800a4ce: 687b ldr r3, [r7, #4]
  23637. 800a4d0: 699b ldr r3, [r3, #24]
  23638. 800a4d2: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  23639. 800a4d6: d123 bne.n 800a520 <DMA_CheckFifoParam+0xa8>
  23640. {
  23641. switch (hdma->Init.FIFOThreshold)
  23642. 800a4d8: 687b ldr r3, [r7, #4]
  23643. 800a4da: 6a9b ldr r3, [r3, #40] @ 0x28
  23644. 800a4dc: 2b03 cmp r3, #3
  23645. 800a4de: d838 bhi.n 800a552 <DMA_CheckFifoParam+0xda>
  23646. 800a4e0: a201 add r2, pc, #4 @ (adr r2, 800a4e8 <DMA_CheckFifoParam+0x70>)
  23647. 800a4e2: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  23648. 800a4e6: bf00 nop
  23649. 800a4e8: 0800a4f9 .word 0x0800a4f9
  23650. 800a4ec: 0800a4ff .word 0x0800a4ff
  23651. 800a4f0: 0800a4f9 .word 0x0800a4f9
  23652. 800a4f4: 0800a511 .word 0x0800a511
  23653. {
  23654. case DMA_FIFO_THRESHOLD_1QUARTERFULL:
  23655. case DMA_FIFO_THRESHOLD_3QUARTERSFULL:
  23656. status = HAL_ERROR;
  23657. 800a4f8: 2301 movs r3, #1
  23658. 800a4fa: 73fb strb r3, [r7, #15]
  23659. break;
  23660. 800a4fc: e030 b.n 800a560 <DMA_CheckFifoParam+0xe8>
  23661. case DMA_FIFO_THRESHOLD_HALFFULL:
  23662. if ((hdma->Init.MemBurst & DMA_SxCR_MBURST_1) == DMA_SxCR_MBURST_1)
  23663. 800a4fe: 687b ldr r3, [r7, #4]
  23664. 800a500: 6adb ldr r3, [r3, #44] @ 0x2c
  23665. 800a502: f003 7380 and.w r3, r3, #16777216 @ 0x1000000
  23666. 800a506: 2b00 cmp r3, #0
  23667. 800a508: d025 beq.n 800a556 <DMA_CheckFifoParam+0xde>
  23668. {
  23669. status = HAL_ERROR;
  23670. 800a50a: 2301 movs r3, #1
  23671. 800a50c: 73fb strb r3, [r7, #15]
  23672. }
  23673. break;
  23674. 800a50e: e022 b.n 800a556 <DMA_CheckFifoParam+0xde>
  23675. case DMA_FIFO_THRESHOLD_FULL:
  23676. if (hdma->Init.MemBurst == DMA_MBURST_INC16)
  23677. 800a510: 687b ldr r3, [r7, #4]
  23678. 800a512: 6adb ldr r3, [r3, #44] @ 0x2c
  23679. 800a514: f1b3 7fc0 cmp.w r3, #25165824 @ 0x1800000
  23680. 800a518: d11f bne.n 800a55a <DMA_CheckFifoParam+0xe2>
  23681. {
  23682. status = HAL_ERROR;
  23683. 800a51a: 2301 movs r3, #1
  23684. 800a51c: 73fb strb r3, [r7, #15]
  23685. }
  23686. break;
  23687. 800a51e: e01c b.n 800a55a <DMA_CheckFifoParam+0xe2>
  23688. }
  23689. /* Memory Data size equal to Word */
  23690. else
  23691. {
  23692. switch (hdma->Init.FIFOThreshold)
  23693. 800a520: 687b ldr r3, [r7, #4]
  23694. 800a522: 6a9b ldr r3, [r3, #40] @ 0x28
  23695. 800a524: 2b02 cmp r3, #2
  23696. 800a526: d902 bls.n 800a52e <DMA_CheckFifoParam+0xb6>
  23697. 800a528: 2b03 cmp r3, #3
  23698. 800a52a: d003 beq.n 800a534 <DMA_CheckFifoParam+0xbc>
  23699. status = HAL_ERROR;
  23700. }
  23701. break;
  23702. default:
  23703. break;
  23704. 800a52c: e018 b.n 800a560 <DMA_CheckFifoParam+0xe8>
  23705. status = HAL_ERROR;
  23706. 800a52e: 2301 movs r3, #1
  23707. 800a530: 73fb strb r3, [r7, #15]
  23708. break;
  23709. 800a532: e015 b.n 800a560 <DMA_CheckFifoParam+0xe8>
  23710. if ((hdma->Init.MemBurst & DMA_SxCR_MBURST_1) == DMA_SxCR_MBURST_1)
  23711. 800a534: 687b ldr r3, [r7, #4]
  23712. 800a536: 6adb ldr r3, [r3, #44] @ 0x2c
  23713. 800a538: f003 7380 and.w r3, r3, #16777216 @ 0x1000000
  23714. 800a53c: 2b00 cmp r3, #0
  23715. 800a53e: d00e beq.n 800a55e <DMA_CheckFifoParam+0xe6>
  23716. status = HAL_ERROR;
  23717. 800a540: 2301 movs r3, #1
  23718. 800a542: 73fb strb r3, [r7, #15]
  23719. break;
  23720. 800a544: e00b b.n 800a55e <DMA_CheckFifoParam+0xe6>
  23721. break;
  23722. 800a546: bf00 nop
  23723. 800a548: e00a b.n 800a560 <DMA_CheckFifoParam+0xe8>
  23724. break;
  23725. 800a54a: bf00 nop
  23726. 800a54c: e008 b.n 800a560 <DMA_CheckFifoParam+0xe8>
  23727. break;
  23728. 800a54e: bf00 nop
  23729. 800a550: e006 b.n 800a560 <DMA_CheckFifoParam+0xe8>
  23730. break;
  23731. 800a552: bf00 nop
  23732. 800a554: e004 b.n 800a560 <DMA_CheckFifoParam+0xe8>
  23733. break;
  23734. 800a556: bf00 nop
  23735. 800a558: e002 b.n 800a560 <DMA_CheckFifoParam+0xe8>
  23736. break;
  23737. 800a55a: bf00 nop
  23738. 800a55c: e000 b.n 800a560 <DMA_CheckFifoParam+0xe8>
  23739. break;
  23740. 800a55e: bf00 nop
  23741. }
  23742. }
  23743. return status;
  23744. 800a560: 7bfb ldrb r3, [r7, #15]
  23745. }
  23746. 800a562: 4618 mov r0, r3
  23747. 800a564: 3714 adds r7, #20
  23748. 800a566: 46bd mov sp, r7
  23749. 800a568: f85d 7b04 ldr.w r7, [sp], #4
  23750. 800a56c: 4770 bx lr
  23751. 800a56e: bf00 nop
  23752. 0800a570 <DMA_CalcDMAMUXChannelBaseAndMask>:
  23753. * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
  23754. * the configuration information for the specified DMA Stream.
  23755. * @retval HAL status
  23756. */
  23757. static void DMA_CalcDMAMUXChannelBaseAndMask(DMA_HandleTypeDef *hdma)
  23758. {
  23759. 800a570: b480 push {r7}
  23760. 800a572: b085 sub sp, #20
  23761. 800a574: af00 add r7, sp, #0
  23762. 800a576: 6078 str r0, [r7, #4]
  23763. uint32_t stream_number;
  23764. uint32_t stream_baseaddress = (uint32_t)((uint32_t*)hdma->Instance);
  23765. 800a578: 687b ldr r3, [r7, #4]
  23766. 800a57a: 681b ldr r3, [r3, #0]
  23767. 800a57c: 60bb str r3, [r7, #8]
  23768. if(IS_BDMA_CHANNEL_DMAMUX_INSTANCE(hdma->Instance) != 0U)
  23769. 800a57e: 687b ldr r3, [r7, #4]
  23770. 800a580: 681b ldr r3, [r3, #0]
  23771. 800a582: 4a38 ldr r2, [pc, #224] @ (800a664 <DMA_CalcDMAMUXChannelBaseAndMask+0xf4>)
  23772. 800a584: 4293 cmp r3, r2
  23773. 800a586: d022 beq.n 800a5ce <DMA_CalcDMAMUXChannelBaseAndMask+0x5e>
  23774. 800a588: 687b ldr r3, [r7, #4]
  23775. 800a58a: 681b ldr r3, [r3, #0]
  23776. 800a58c: 4a36 ldr r2, [pc, #216] @ (800a668 <DMA_CalcDMAMUXChannelBaseAndMask+0xf8>)
  23777. 800a58e: 4293 cmp r3, r2
  23778. 800a590: d01d beq.n 800a5ce <DMA_CalcDMAMUXChannelBaseAndMask+0x5e>
  23779. 800a592: 687b ldr r3, [r7, #4]
  23780. 800a594: 681b ldr r3, [r3, #0]
  23781. 800a596: 4a35 ldr r2, [pc, #212] @ (800a66c <DMA_CalcDMAMUXChannelBaseAndMask+0xfc>)
  23782. 800a598: 4293 cmp r3, r2
  23783. 800a59a: d018 beq.n 800a5ce <DMA_CalcDMAMUXChannelBaseAndMask+0x5e>
  23784. 800a59c: 687b ldr r3, [r7, #4]
  23785. 800a59e: 681b ldr r3, [r3, #0]
  23786. 800a5a0: 4a33 ldr r2, [pc, #204] @ (800a670 <DMA_CalcDMAMUXChannelBaseAndMask+0x100>)
  23787. 800a5a2: 4293 cmp r3, r2
  23788. 800a5a4: d013 beq.n 800a5ce <DMA_CalcDMAMUXChannelBaseAndMask+0x5e>
  23789. 800a5a6: 687b ldr r3, [r7, #4]
  23790. 800a5a8: 681b ldr r3, [r3, #0]
  23791. 800a5aa: 4a32 ldr r2, [pc, #200] @ (800a674 <DMA_CalcDMAMUXChannelBaseAndMask+0x104>)
  23792. 800a5ac: 4293 cmp r3, r2
  23793. 800a5ae: d00e beq.n 800a5ce <DMA_CalcDMAMUXChannelBaseAndMask+0x5e>
  23794. 800a5b0: 687b ldr r3, [r7, #4]
  23795. 800a5b2: 681b ldr r3, [r3, #0]
  23796. 800a5b4: 4a30 ldr r2, [pc, #192] @ (800a678 <DMA_CalcDMAMUXChannelBaseAndMask+0x108>)
  23797. 800a5b6: 4293 cmp r3, r2
  23798. 800a5b8: d009 beq.n 800a5ce <DMA_CalcDMAMUXChannelBaseAndMask+0x5e>
  23799. 800a5ba: 687b ldr r3, [r7, #4]
  23800. 800a5bc: 681b ldr r3, [r3, #0]
  23801. 800a5be: 4a2f ldr r2, [pc, #188] @ (800a67c <DMA_CalcDMAMUXChannelBaseAndMask+0x10c>)
  23802. 800a5c0: 4293 cmp r3, r2
  23803. 800a5c2: d004 beq.n 800a5ce <DMA_CalcDMAMUXChannelBaseAndMask+0x5e>
  23804. 800a5c4: 687b ldr r3, [r7, #4]
  23805. 800a5c6: 681b ldr r3, [r3, #0]
  23806. 800a5c8: 4a2d ldr r2, [pc, #180] @ (800a680 <DMA_CalcDMAMUXChannelBaseAndMask+0x110>)
  23807. 800a5ca: 4293 cmp r3, r2
  23808. 800a5cc: d101 bne.n 800a5d2 <DMA_CalcDMAMUXChannelBaseAndMask+0x62>
  23809. 800a5ce: 2301 movs r3, #1
  23810. 800a5d0: e000 b.n 800a5d4 <DMA_CalcDMAMUXChannelBaseAndMask+0x64>
  23811. 800a5d2: 2300 movs r3, #0
  23812. 800a5d4: 2b00 cmp r3, #0
  23813. 800a5d6: d01a beq.n 800a60e <DMA_CalcDMAMUXChannelBaseAndMask+0x9e>
  23814. {
  23815. /* BDMA Channels are connected to DMAMUX2 channels */
  23816. stream_number = (((uint32_t)((uint32_t*)hdma->Instance) & 0xFFU) - 8U) / 20U;
  23817. 800a5d8: 687b ldr r3, [r7, #4]
  23818. 800a5da: 681b ldr r3, [r3, #0]
  23819. 800a5dc: b2db uxtb r3, r3
  23820. 800a5de: 3b08 subs r3, #8
  23821. 800a5e0: 4a28 ldr r2, [pc, #160] @ (800a684 <DMA_CalcDMAMUXChannelBaseAndMask+0x114>)
  23822. 800a5e2: fba2 2303 umull r2, r3, r2, r3
  23823. 800a5e6: 091b lsrs r3, r3, #4
  23824. 800a5e8: 60fb str r3, [r7, #12]
  23825. hdma->DMAmuxChannel = (DMAMUX_Channel_TypeDef *)((uint32_t)(((uint32_t)DMAMUX2_Channel0) + (stream_number * 4U)));
  23826. 800a5ea: 68fa ldr r2, [r7, #12]
  23827. 800a5ec: 4b26 ldr r3, [pc, #152] @ (800a688 <DMA_CalcDMAMUXChannelBaseAndMask+0x118>)
  23828. 800a5ee: 4413 add r3, r2
  23829. 800a5f0: 009b lsls r3, r3, #2
  23830. 800a5f2: 461a mov r2, r3
  23831. 800a5f4: 687b ldr r3, [r7, #4]
  23832. 800a5f6: 661a str r2, [r3, #96] @ 0x60
  23833. hdma->DMAmuxChannelStatus = DMAMUX2_ChannelStatus;
  23834. 800a5f8: 687b ldr r3, [r7, #4]
  23835. 800a5fa: 4a24 ldr r2, [pc, #144] @ (800a68c <DMA_CalcDMAMUXChannelBaseAndMask+0x11c>)
  23836. 800a5fc: 665a str r2, [r3, #100] @ 0x64
  23837. hdma->DMAmuxChannelStatusMask = 1UL << (stream_number & 0x1FU);
  23838. 800a5fe: 68fb ldr r3, [r7, #12]
  23839. 800a600: f003 031f and.w r3, r3, #31
  23840. 800a604: 2201 movs r2, #1
  23841. 800a606: 409a lsls r2, r3
  23842. 800a608: 687b ldr r3, [r7, #4]
  23843. 800a60a: 669a str r2, [r3, #104] @ 0x68
  23844. }
  23845. hdma->DMAmuxChannel = (DMAMUX_Channel_TypeDef *)((uint32_t)(((uint32_t)DMAMUX1_Channel0) + (stream_number * 4U)));
  23846. hdma->DMAmuxChannelStatus = DMAMUX1_ChannelStatus;
  23847. hdma->DMAmuxChannelStatusMask = 1UL << (stream_number & 0x1FU);
  23848. }
  23849. }
  23850. 800a60c: e024 b.n 800a658 <DMA_CalcDMAMUXChannelBaseAndMask+0xe8>
  23851. stream_number = (((uint32_t)((uint32_t*)hdma->Instance) & 0xFFU) - 16U) / 24U;
  23852. 800a60e: 687b ldr r3, [r7, #4]
  23853. 800a610: 681b ldr r3, [r3, #0]
  23854. 800a612: b2db uxtb r3, r3
  23855. 800a614: 3b10 subs r3, #16
  23856. 800a616: 4a1e ldr r2, [pc, #120] @ (800a690 <DMA_CalcDMAMUXChannelBaseAndMask+0x120>)
  23857. 800a618: fba2 2303 umull r2, r3, r2, r3
  23858. 800a61c: 091b lsrs r3, r3, #4
  23859. 800a61e: 60fb str r3, [r7, #12]
  23860. if((stream_baseaddress <= ((uint32_t)DMA2_Stream7) ) && \
  23861. 800a620: 68bb ldr r3, [r7, #8]
  23862. 800a622: 4a1c ldr r2, [pc, #112] @ (800a694 <DMA_CalcDMAMUXChannelBaseAndMask+0x124>)
  23863. 800a624: 4293 cmp r3, r2
  23864. 800a626: d806 bhi.n 800a636 <DMA_CalcDMAMUXChannelBaseAndMask+0xc6>
  23865. 800a628: 68bb ldr r3, [r7, #8]
  23866. 800a62a: 4a1b ldr r2, [pc, #108] @ (800a698 <DMA_CalcDMAMUXChannelBaseAndMask+0x128>)
  23867. 800a62c: 4293 cmp r3, r2
  23868. 800a62e: d902 bls.n 800a636 <DMA_CalcDMAMUXChannelBaseAndMask+0xc6>
  23869. stream_number += 8U;
  23870. 800a630: 68fb ldr r3, [r7, #12]
  23871. 800a632: 3308 adds r3, #8
  23872. 800a634: 60fb str r3, [r7, #12]
  23873. hdma->DMAmuxChannel = (DMAMUX_Channel_TypeDef *)((uint32_t)(((uint32_t)DMAMUX1_Channel0) + (stream_number * 4U)));
  23874. 800a636: 68fa ldr r2, [r7, #12]
  23875. 800a638: 4b18 ldr r3, [pc, #96] @ (800a69c <DMA_CalcDMAMUXChannelBaseAndMask+0x12c>)
  23876. 800a63a: 4413 add r3, r2
  23877. 800a63c: 009b lsls r3, r3, #2
  23878. 800a63e: 461a mov r2, r3
  23879. 800a640: 687b ldr r3, [r7, #4]
  23880. 800a642: 661a str r2, [r3, #96] @ 0x60
  23881. hdma->DMAmuxChannelStatus = DMAMUX1_ChannelStatus;
  23882. 800a644: 687b ldr r3, [r7, #4]
  23883. 800a646: 4a16 ldr r2, [pc, #88] @ (800a6a0 <DMA_CalcDMAMUXChannelBaseAndMask+0x130>)
  23884. 800a648: 665a str r2, [r3, #100] @ 0x64
  23885. hdma->DMAmuxChannelStatusMask = 1UL << (stream_number & 0x1FU);
  23886. 800a64a: 68fb ldr r3, [r7, #12]
  23887. 800a64c: f003 031f and.w r3, r3, #31
  23888. 800a650: 2201 movs r2, #1
  23889. 800a652: 409a lsls r2, r3
  23890. 800a654: 687b ldr r3, [r7, #4]
  23891. 800a656: 669a str r2, [r3, #104] @ 0x68
  23892. }
  23893. 800a658: bf00 nop
  23894. 800a65a: 3714 adds r7, #20
  23895. 800a65c: 46bd mov sp, r7
  23896. 800a65e: f85d 7b04 ldr.w r7, [sp], #4
  23897. 800a662: 4770 bx lr
  23898. 800a664: 58025408 .word 0x58025408
  23899. 800a668: 5802541c .word 0x5802541c
  23900. 800a66c: 58025430 .word 0x58025430
  23901. 800a670: 58025444 .word 0x58025444
  23902. 800a674: 58025458 .word 0x58025458
  23903. 800a678: 5802546c .word 0x5802546c
  23904. 800a67c: 58025480 .word 0x58025480
  23905. 800a680: 58025494 .word 0x58025494
  23906. 800a684: cccccccd .word 0xcccccccd
  23907. 800a688: 16009600 .word 0x16009600
  23908. 800a68c: 58025880 .word 0x58025880
  23909. 800a690: aaaaaaab .word 0xaaaaaaab
  23910. 800a694: 400204b8 .word 0x400204b8
  23911. 800a698: 4002040f .word 0x4002040f
  23912. 800a69c: 10008200 .word 0x10008200
  23913. 800a6a0: 40020880 .word 0x40020880
  23914. 0800a6a4 <DMA_CalcDMAMUXRequestGenBaseAndMask>:
  23915. * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
  23916. * the configuration information for the specified DMA Stream.
  23917. * @retval HAL status
  23918. */
  23919. static void DMA_CalcDMAMUXRequestGenBaseAndMask(DMA_HandleTypeDef *hdma)
  23920. {
  23921. 800a6a4: b480 push {r7}
  23922. 800a6a6: b085 sub sp, #20
  23923. 800a6a8: af00 add r7, sp, #0
  23924. 800a6aa: 6078 str r0, [r7, #4]
  23925. uint32_t request = hdma->Init.Request & DMAMUX_CxCR_DMAREQ_ID;
  23926. 800a6ac: 687b ldr r3, [r7, #4]
  23927. 800a6ae: 685b ldr r3, [r3, #4]
  23928. 800a6b0: b2db uxtb r3, r3
  23929. 800a6b2: 60fb str r3, [r7, #12]
  23930. if((request >= DMA_REQUEST_GENERATOR0) && (request <= DMA_REQUEST_GENERATOR7))
  23931. 800a6b4: 68fb ldr r3, [r7, #12]
  23932. 800a6b6: 2b00 cmp r3, #0
  23933. 800a6b8: d04a beq.n 800a750 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xac>
  23934. 800a6ba: 68fb ldr r3, [r7, #12]
  23935. 800a6bc: 2b08 cmp r3, #8
  23936. 800a6be: d847 bhi.n 800a750 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xac>
  23937. {
  23938. if(IS_BDMA_CHANNEL_DMAMUX_INSTANCE(hdma->Instance) != 0U)
  23939. 800a6c0: 687b ldr r3, [r7, #4]
  23940. 800a6c2: 681b ldr r3, [r3, #0]
  23941. 800a6c4: 4a25 ldr r2, [pc, #148] @ (800a75c <DMA_CalcDMAMUXRequestGenBaseAndMask+0xb8>)
  23942. 800a6c6: 4293 cmp r3, r2
  23943. 800a6c8: d022 beq.n 800a710 <DMA_CalcDMAMUXRequestGenBaseAndMask+0x6c>
  23944. 800a6ca: 687b ldr r3, [r7, #4]
  23945. 800a6cc: 681b ldr r3, [r3, #0]
  23946. 800a6ce: 4a24 ldr r2, [pc, #144] @ (800a760 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xbc>)
  23947. 800a6d0: 4293 cmp r3, r2
  23948. 800a6d2: d01d beq.n 800a710 <DMA_CalcDMAMUXRequestGenBaseAndMask+0x6c>
  23949. 800a6d4: 687b ldr r3, [r7, #4]
  23950. 800a6d6: 681b ldr r3, [r3, #0]
  23951. 800a6d8: 4a22 ldr r2, [pc, #136] @ (800a764 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xc0>)
  23952. 800a6da: 4293 cmp r3, r2
  23953. 800a6dc: d018 beq.n 800a710 <DMA_CalcDMAMUXRequestGenBaseAndMask+0x6c>
  23954. 800a6de: 687b ldr r3, [r7, #4]
  23955. 800a6e0: 681b ldr r3, [r3, #0]
  23956. 800a6e2: 4a21 ldr r2, [pc, #132] @ (800a768 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xc4>)
  23957. 800a6e4: 4293 cmp r3, r2
  23958. 800a6e6: d013 beq.n 800a710 <DMA_CalcDMAMUXRequestGenBaseAndMask+0x6c>
  23959. 800a6e8: 687b ldr r3, [r7, #4]
  23960. 800a6ea: 681b ldr r3, [r3, #0]
  23961. 800a6ec: 4a1f ldr r2, [pc, #124] @ (800a76c <DMA_CalcDMAMUXRequestGenBaseAndMask+0xc8>)
  23962. 800a6ee: 4293 cmp r3, r2
  23963. 800a6f0: d00e beq.n 800a710 <DMA_CalcDMAMUXRequestGenBaseAndMask+0x6c>
  23964. 800a6f2: 687b ldr r3, [r7, #4]
  23965. 800a6f4: 681b ldr r3, [r3, #0]
  23966. 800a6f6: 4a1e ldr r2, [pc, #120] @ (800a770 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xcc>)
  23967. 800a6f8: 4293 cmp r3, r2
  23968. 800a6fa: d009 beq.n 800a710 <DMA_CalcDMAMUXRequestGenBaseAndMask+0x6c>
  23969. 800a6fc: 687b ldr r3, [r7, #4]
  23970. 800a6fe: 681b ldr r3, [r3, #0]
  23971. 800a700: 4a1c ldr r2, [pc, #112] @ (800a774 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xd0>)
  23972. 800a702: 4293 cmp r3, r2
  23973. 800a704: d004 beq.n 800a710 <DMA_CalcDMAMUXRequestGenBaseAndMask+0x6c>
  23974. 800a706: 687b ldr r3, [r7, #4]
  23975. 800a708: 681b ldr r3, [r3, #0]
  23976. 800a70a: 4a1b ldr r2, [pc, #108] @ (800a778 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xd4>)
  23977. 800a70c: 4293 cmp r3, r2
  23978. 800a70e: d101 bne.n 800a714 <DMA_CalcDMAMUXRequestGenBaseAndMask+0x70>
  23979. 800a710: 2301 movs r3, #1
  23980. 800a712: e000 b.n 800a716 <DMA_CalcDMAMUXRequestGenBaseAndMask+0x72>
  23981. 800a714: 2300 movs r3, #0
  23982. 800a716: 2b00 cmp r3, #0
  23983. 800a718: d00a beq.n 800a730 <DMA_CalcDMAMUXRequestGenBaseAndMask+0x8c>
  23984. {
  23985. /* BDMA Channels are connected to DMAMUX2 request generator blocks */
  23986. hdma->DMAmuxRequestGen = (DMAMUX_RequestGen_TypeDef *)((uint32_t)(((uint32_t)DMAMUX2_RequestGenerator0) + ((request - 1U) * 4U)));
  23987. 800a71a: 68fa ldr r2, [r7, #12]
  23988. 800a71c: 4b17 ldr r3, [pc, #92] @ (800a77c <DMA_CalcDMAMUXRequestGenBaseAndMask+0xd8>)
  23989. 800a71e: 4413 add r3, r2
  23990. 800a720: 009b lsls r3, r3, #2
  23991. 800a722: 461a mov r2, r3
  23992. 800a724: 687b ldr r3, [r7, #4]
  23993. 800a726: 66da str r2, [r3, #108] @ 0x6c
  23994. hdma->DMAmuxRequestGenStatus = DMAMUX2_RequestGenStatus;
  23995. 800a728: 687b ldr r3, [r7, #4]
  23996. 800a72a: 4a15 ldr r2, [pc, #84] @ (800a780 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xdc>)
  23997. 800a72c: 671a str r2, [r3, #112] @ 0x70
  23998. 800a72e: e009 b.n 800a744 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xa0>
  23999. }
  24000. else
  24001. {
  24002. /* DMA1 and DMA2 Streams use DMAMUX1 request generator blocks */
  24003. hdma->DMAmuxRequestGen = (DMAMUX_RequestGen_TypeDef *)((uint32_t)(((uint32_t)DMAMUX1_RequestGenerator0) + ((request - 1U) * 4U)));
  24004. 800a730: 68fa ldr r2, [r7, #12]
  24005. 800a732: 4b14 ldr r3, [pc, #80] @ (800a784 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xe0>)
  24006. 800a734: 4413 add r3, r2
  24007. 800a736: 009b lsls r3, r3, #2
  24008. 800a738: 461a mov r2, r3
  24009. 800a73a: 687b ldr r3, [r7, #4]
  24010. 800a73c: 66da str r2, [r3, #108] @ 0x6c
  24011. hdma->DMAmuxRequestGenStatus = DMAMUX1_RequestGenStatus;
  24012. 800a73e: 687b ldr r3, [r7, #4]
  24013. 800a740: 4a11 ldr r2, [pc, #68] @ (800a788 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xe4>)
  24014. 800a742: 671a str r2, [r3, #112] @ 0x70
  24015. }
  24016. hdma->DMAmuxRequestGenStatusMask = 1UL << (request - 1U);
  24017. 800a744: 68fb ldr r3, [r7, #12]
  24018. 800a746: 3b01 subs r3, #1
  24019. 800a748: 2201 movs r2, #1
  24020. 800a74a: 409a lsls r2, r3
  24021. 800a74c: 687b ldr r3, [r7, #4]
  24022. 800a74e: 675a str r2, [r3, #116] @ 0x74
  24023. }
  24024. }
  24025. 800a750: bf00 nop
  24026. 800a752: 3714 adds r7, #20
  24027. 800a754: 46bd mov sp, r7
  24028. 800a756: f85d 7b04 ldr.w r7, [sp], #4
  24029. 800a75a: 4770 bx lr
  24030. 800a75c: 58025408 .word 0x58025408
  24031. 800a760: 5802541c .word 0x5802541c
  24032. 800a764: 58025430 .word 0x58025430
  24033. 800a768: 58025444 .word 0x58025444
  24034. 800a76c: 58025458 .word 0x58025458
  24035. 800a770: 5802546c .word 0x5802546c
  24036. 800a774: 58025480 .word 0x58025480
  24037. 800a778: 58025494 .word 0x58025494
  24038. 800a77c: 1600963f .word 0x1600963f
  24039. 800a780: 58025940 .word 0x58025940
  24040. 800a784: 1000823f .word 0x1000823f
  24041. 800a788: 40020940 .word 0x40020940
  24042. 0800a78c <HAL_GPIO_Init>:
  24043. * @param GPIO_Init: pointer to a GPIO_InitTypeDef structure that contains
  24044. * the configuration information for the specified GPIO peripheral.
  24045. * @retval None
  24046. */
  24047. void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)
  24048. {
  24049. 800a78c: b480 push {r7}
  24050. 800a78e: b089 sub sp, #36 @ 0x24
  24051. 800a790: af00 add r7, sp, #0
  24052. 800a792: 6078 str r0, [r7, #4]
  24053. 800a794: 6039 str r1, [r7, #0]
  24054. uint32_t position = 0x00U;
  24055. 800a796: 2300 movs r3, #0
  24056. 800a798: 61fb str r3, [r7, #28]
  24057. EXTI_Core_TypeDef *EXTI_CurrentCPU;
  24058. #if defined(DUAL_CORE) && defined(CORE_CM4)
  24059. EXTI_CurrentCPU = EXTI_D2; /* EXTI for CM4 CPU */
  24060. #else
  24061. EXTI_CurrentCPU = EXTI_D1; /* EXTI for CM7 CPU */
  24062. 800a79a: 4b89 ldr r3, [pc, #548] @ (800a9c0 <HAL_GPIO_Init+0x234>)
  24063. 800a79c: 617b str r3, [r7, #20]
  24064. assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));
  24065. assert_param(IS_GPIO_PIN(GPIO_Init->Pin));
  24066. assert_param(IS_GPIO_MODE(GPIO_Init->Mode));
  24067. /* Configure the port pins */
  24068. while (((GPIO_Init->Pin) >> position) != 0x00U)
  24069. 800a79e: e194 b.n 800aaca <HAL_GPIO_Init+0x33e>
  24070. {
  24071. /* Get current io position */
  24072. iocurrent = (GPIO_Init->Pin) & (1UL << position);
  24073. 800a7a0: 683b ldr r3, [r7, #0]
  24074. 800a7a2: 681a ldr r2, [r3, #0]
  24075. 800a7a4: 2101 movs r1, #1
  24076. 800a7a6: 69fb ldr r3, [r7, #28]
  24077. 800a7a8: fa01 f303 lsl.w r3, r1, r3
  24078. 800a7ac: 4013 ands r3, r2
  24079. 800a7ae: 613b str r3, [r7, #16]
  24080. if (iocurrent != 0x00U)
  24081. 800a7b0: 693b ldr r3, [r7, #16]
  24082. 800a7b2: 2b00 cmp r3, #0
  24083. 800a7b4: f000 8186 beq.w 800aac4 <HAL_GPIO_Init+0x338>
  24084. {
  24085. /*--------------------- GPIO Mode Configuration ------------------------*/
  24086. /* In case of Output or Alternate function mode selection */
  24087. if (((GPIO_Init->Mode & GPIO_MODE) == MODE_OUTPUT) || ((GPIO_Init->Mode & GPIO_MODE) == MODE_AF))
  24088. 800a7b8: 683b ldr r3, [r7, #0]
  24089. 800a7ba: 685b ldr r3, [r3, #4]
  24090. 800a7bc: f003 0303 and.w r3, r3, #3
  24091. 800a7c0: 2b01 cmp r3, #1
  24092. 800a7c2: d005 beq.n 800a7d0 <HAL_GPIO_Init+0x44>
  24093. 800a7c4: 683b ldr r3, [r7, #0]
  24094. 800a7c6: 685b ldr r3, [r3, #4]
  24095. 800a7c8: f003 0303 and.w r3, r3, #3
  24096. 800a7cc: 2b02 cmp r3, #2
  24097. 800a7ce: d130 bne.n 800a832 <HAL_GPIO_Init+0xa6>
  24098. {
  24099. /* Check the Speed parameter */
  24100. assert_param(IS_GPIO_SPEED(GPIO_Init->Speed));
  24101. /* Configure the IO Speed */
  24102. temp = GPIOx->OSPEEDR;
  24103. 800a7d0: 687b ldr r3, [r7, #4]
  24104. 800a7d2: 689b ldr r3, [r3, #8]
  24105. 800a7d4: 61bb str r3, [r7, #24]
  24106. temp &= ~(GPIO_OSPEEDR_OSPEED0 << (position * 2U));
  24107. 800a7d6: 69fb ldr r3, [r7, #28]
  24108. 800a7d8: 005b lsls r3, r3, #1
  24109. 800a7da: 2203 movs r2, #3
  24110. 800a7dc: fa02 f303 lsl.w r3, r2, r3
  24111. 800a7e0: 43db mvns r3, r3
  24112. 800a7e2: 69ba ldr r2, [r7, #24]
  24113. 800a7e4: 4013 ands r3, r2
  24114. 800a7e6: 61bb str r3, [r7, #24]
  24115. temp |= (GPIO_Init->Speed << (position * 2U));
  24116. 800a7e8: 683b ldr r3, [r7, #0]
  24117. 800a7ea: 68da ldr r2, [r3, #12]
  24118. 800a7ec: 69fb ldr r3, [r7, #28]
  24119. 800a7ee: 005b lsls r3, r3, #1
  24120. 800a7f0: fa02 f303 lsl.w r3, r2, r3
  24121. 800a7f4: 69ba ldr r2, [r7, #24]
  24122. 800a7f6: 4313 orrs r3, r2
  24123. 800a7f8: 61bb str r3, [r7, #24]
  24124. GPIOx->OSPEEDR = temp;
  24125. 800a7fa: 687b ldr r3, [r7, #4]
  24126. 800a7fc: 69ba ldr r2, [r7, #24]
  24127. 800a7fe: 609a str r2, [r3, #8]
  24128. /* Configure the IO Output Type */
  24129. temp = GPIOx->OTYPER;
  24130. 800a800: 687b ldr r3, [r7, #4]
  24131. 800a802: 685b ldr r3, [r3, #4]
  24132. 800a804: 61bb str r3, [r7, #24]
  24133. temp &= ~(GPIO_OTYPER_OT0 << position) ;
  24134. 800a806: 2201 movs r2, #1
  24135. 800a808: 69fb ldr r3, [r7, #28]
  24136. 800a80a: fa02 f303 lsl.w r3, r2, r3
  24137. 800a80e: 43db mvns r3, r3
  24138. 800a810: 69ba ldr r2, [r7, #24]
  24139. 800a812: 4013 ands r3, r2
  24140. 800a814: 61bb str r3, [r7, #24]
  24141. temp |= (((GPIO_Init->Mode & OUTPUT_TYPE) >> OUTPUT_TYPE_Pos) << position);
  24142. 800a816: 683b ldr r3, [r7, #0]
  24143. 800a818: 685b ldr r3, [r3, #4]
  24144. 800a81a: 091b lsrs r3, r3, #4
  24145. 800a81c: f003 0201 and.w r2, r3, #1
  24146. 800a820: 69fb ldr r3, [r7, #28]
  24147. 800a822: fa02 f303 lsl.w r3, r2, r3
  24148. 800a826: 69ba ldr r2, [r7, #24]
  24149. 800a828: 4313 orrs r3, r2
  24150. 800a82a: 61bb str r3, [r7, #24]
  24151. GPIOx->OTYPER = temp;
  24152. 800a82c: 687b ldr r3, [r7, #4]
  24153. 800a82e: 69ba ldr r2, [r7, #24]
  24154. 800a830: 605a str r2, [r3, #4]
  24155. }
  24156. if ((GPIO_Init->Mode & GPIO_MODE) != MODE_ANALOG)
  24157. 800a832: 683b ldr r3, [r7, #0]
  24158. 800a834: 685b ldr r3, [r3, #4]
  24159. 800a836: f003 0303 and.w r3, r3, #3
  24160. 800a83a: 2b03 cmp r3, #3
  24161. 800a83c: d017 beq.n 800a86e <HAL_GPIO_Init+0xe2>
  24162. {
  24163. /* Check the Pull parameter */
  24164. assert_param(IS_GPIO_PULL(GPIO_Init->Pull));
  24165. /* Activate the Pull-up or Pull down resistor for the current IO */
  24166. temp = GPIOx->PUPDR;
  24167. 800a83e: 687b ldr r3, [r7, #4]
  24168. 800a840: 68db ldr r3, [r3, #12]
  24169. 800a842: 61bb str r3, [r7, #24]
  24170. temp &= ~(GPIO_PUPDR_PUPD0 << (position * 2U));
  24171. 800a844: 69fb ldr r3, [r7, #28]
  24172. 800a846: 005b lsls r3, r3, #1
  24173. 800a848: 2203 movs r2, #3
  24174. 800a84a: fa02 f303 lsl.w r3, r2, r3
  24175. 800a84e: 43db mvns r3, r3
  24176. 800a850: 69ba ldr r2, [r7, #24]
  24177. 800a852: 4013 ands r3, r2
  24178. 800a854: 61bb str r3, [r7, #24]
  24179. temp |= ((GPIO_Init->Pull) << (position * 2U));
  24180. 800a856: 683b ldr r3, [r7, #0]
  24181. 800a858: 689a ldr r2, [r3, #8]
  24182. 800a85a: 69fb ldr r3, [r7, #28]
  24183. 800a85c: 005b lsls r3, r3, #1
  24184. 800a85e: fa02 f303 lsl.w r3, r2, r3
  24185. 800a862: 69ba ldr r2, [r7, #24]
  24186. 800a864: 4313 orrs r3, r2
  24187. 800a866: 61bb str r3, [r7, #24]
  24188. GPIOx->PUPDR = temp;
  24189. 800a868: 687b ldr r3, [r7, #4]
  24190. 800a86a: 69ba ldr r2, [r7, #24]
  24191. 800a86c: 60da str r2, [r3, #12]
  24192. }
  24193. /* In case of Alternate function mode selection */
  24194. if ((GPIO_Init->Mode & GPIO_MODE) == MODE_AF)
  24195. 800a86e: 683b ldr r3, [r7, #0]
  24196. 800a870: 685b ldr r3, [r3, #4]
  24197. 800a872: f003 0303 and.w r3, r3, #3
  24198. 800a876: 2b02 cmp r3, #2
  24199. 800a878: d123 bne.n 800a8c2 <HAL_GPIO_Init+0x136>
  24200. /* Check the Alternate function parameters */
  24201. assert_param(IS_GPIO_AF_INSTANCE(GPIOx));
  24202. assert_param(IS_GPIO_AF(GPIO_Init->Alternate));
  24203. /* Configure Alternate function mapped with the current IO */
  24204. temp = GPIOx->AFR[position >> 3U];
  24205. 800a87a: 69fb ldr r3, [r7, #28]
  24206. 800a87c: 08da lsrs r2, r3, #3
  24207. 800a87e: 687b ldr r3, [r7, #4]
  24208. 800a880: 3208 adds r2, #8
  24209. 800a882: f853 3022 ldr.w r3, [r3, r2, lsl #2]
  24210. 800a886: 61bb str r3, [r7, #24]
  24211. temp &= ~(0xFU << ((position & 0x07U) * 4U));
  24212. 800a888: 69fb ldr r3, [r7, #28]
  24213. 800a88a: f003 0307 and.w r3, r3, #7
  24214. 800a88e: 009b lsls r3, r3, #2
  24215. 800a890: 220f movs r2, #15
  24216. 800a892: fa02 f303 lsl.w r3, r2, r3
  24217. 800a896: 43db mvns r3, r3
  24218. 800a898: 69ba ldr r2, [r7, #24]
  24219. 800a89a: 4013 ands r3, r2
  24220. 800a89c: 61bb str r3, [r7, #24]
  24221. temp |= ((GPIO_Init->Alternate) << ((position & 0x07U) * 4U));
  24222. 800a89e: 683b ldr r3, [r7, #0]
  24223. 800a8a0: 691a ldr r2, [r3, #16]
  24224. 800a8a2: 69fb ldr r3, [r7, #28]
  24225. 800a8a4: f003 0307 and.w r3, r3, #7
  24226. 800a8a8: 009b lsls r3, r3, #2
  24227. 800a8aa: fa02 f303 lsl.w r3, r2, r3
  24228. 800a8ae: 69ba ldr r2, [r7, #24]
  24229. 800a8b0: 4313 orrs r3, r2
  24230. 800a8b2: 61bb str r3, [r7, #24]
  24231. GPIOx->AFR[position >> 3U] = temp;
  24232. 800a8b4: 69fb ldr r3, [r7, #28]
  24233. 800a8b6: 08da lsrs r2, r3, #3
  24234. 800a8b8: 687b ldr r3, [r7, #4]
  24235. 800a8ba: 3208 adds r2, #8
  24236. 800a8bc: 69b9 ldr r1, [r7, #24]
  24237. 800a8be: f843 1022 str.w r1, [r3, r2, lsl #2]
  24238. }
  24239. /* Configure IO Direction mode (Input, Output, Alternate or Analog) */
  24240. temp = GPIOx->MODER;
  24241. 800a8c2: 687b ldr r3, [r7, #4]
  24242. 800a8c4: 681b ldr r3, [r3, #0]
  24243. 800a8c6: 61bb str r3, [r7, #24]
  24244. temp &= ~(GPIO_MODER_MODE0 << (position * 2U));
  24245. 800a8c8: 69fb ldr r3, [r7, #28]
  24246. 800a8ca: 005b lsls r3, r3, #1
  24247. 800a8cc: 2203 movs r2, #3
  24248. 800a8ce: fa02 f303 lsl.w r3, r2, r3
  24249. 800a8d2: 43db mvns r3, r3
  24250. 800a8d4: 69ba ldr r2, [r7, #24]
  24251. 800a8d6: 4013 ands r3, r2
  24252. 800a8d8: 61bb str r3, [r7, #24]
  24253. temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2U));
  24254. 800a8da: 683b ldr r3, [r7, #0]
  24255. 800a8dc: 685b ldr r3, [r3, #4]
  24256. 800a8de: f003 0203 and.w r2, r3, #3
  24257. 800a8e2: 69fb ldr r3, [r7, #28]
  24258. 800a8e4: 005b lsls r3, r3, #1
  24259. 800a8e6: fa02 f303 lsl.w r3, r2, r3
  24260. 800a8ea: 69ba ldr r2, [r7, #24]
  24261. 800a8ec: 4313 orrs r3, r2
  24262. 800a8ee: 61bb str r3, [r7, #24]
  24263. GPIOx->MODER = temp;
  24264. 800a8f0: 687b ldr r3, [r7, #4]
  24265. 800a8f2: 69ba ldr r2, [r7, #24]
  24266. 800a8f4: 601a str r2, [r3, #0]
  24267. /*--------------------- EXTI Mode Configuration ------------------------*/
  24268. /* Configure the External Interrupt or event for the current IO */
  24269. if ((GPIO_Init->Mode & EXTI_MODE) != 0x00U)
  24270. 800a8f6: 683b ldr r3, [r7, #0]
  24271. 800a8f8: 685b ldr r3, [r3, #4]
  24272. 800a8fa: f403 3340 and.w r3, r3, #196608 @ 0x30000
  24273. 800a8fe: 2b00 cmp r3, #0
  24274. 800a900: f000 80e0 beq.w 800aac4 <HAL_GPIO_Init+0x338>
  24275. {
  24276. /* Enable SYSCFG Clock */
  24277. __HAL_RCC_SYSCFG_CLK_ENABLE();
  24278. 800a904: 4b2f ldr r3, [pc, #188] @ (800a9c4 <HAL_GPIO_Init+0x238>)
  24279. 800a906: f8d3 30f4 ldr.w r3, [r3, #244] @ 0xf4
  24280. 800a90a: 4a2e ldr r2, [pc, #184] @ (800a9c4 <HAL_GPIO_Init+0x238>)
  24281. 800a90c: f043 0302 orr.w r3, r3, #2
  24282. 800a910: f8c2 30f4 str.w r3, [r2, #244] @ 0xf4
  24283. 800a914: 4b2b ldr r3, [pc, #172] @ (800a9c4 <HAL_GPIO_Init+0x238>)
  24284. 800a916: f8d3 30f4 ldr.w r3, [r3, #244] @ 0xf4
  24285. 800a91a: f003 0302 and.w r3, r3, #2
  24286. 800a91e: 60fb str r3, [r7, #12]
  24287. 800a920: 68fb ldr r3, [r7, #12]
  24288. temp = SYSCFG->EXTICR[position >> 2U];
  24289. 800a922: 4a29 ldr r2, [pc, #164] @ (800a9c8 <HAL_GPIO_Init+0x23c>)
  24290. 800a924: 69fb ldr r3, [r7, #28]
  24291. 800a926: 089b lsrs r3, r3, #2
  24292. 800a928: 3302 adds r3, #2
  24293. 800a92a: f852 3023 ldr.w r3, [r2, r3, lsl #2]
  24294. 800a92e: 61bb str r3, [r7, #24]
  24295. temp &= ~(0x0FUL << (4U * (position & 0x03U)));
  24296. 800a930: 69fb ldr r3, [r7, #28]
  24297. 800a932: f003 0303 and.w r3, r3, #3
  24298. 800a936: 009b lsls r3, r3, #2
  24299. 800a938: 220f movs r2, #15
  24300. 800a93a: fa02 f303 lsl.w r3, r2, r3
  24301. 800a93e: 43db mvns r3, r3
  24302. 800a940: 69ba ldr r2, [r7, #24]
  24303. 800a942: 4013 ands r3, r2
  24304. 800a944: 61bb str r3, [r7, #24]
  24305. temp |= (GPIO_GET_INDEX(GPIOx) << (4U * (position & 0x03U)));
  24306. 800a946: 687b ldr r3, [r7, #4]
  24307. 800a948: 4a20 ldr r2, [pc, #128] @ (800a9cc <HAL_GPIO_Init+0x240>)
  24308. 800a94a: 4293 cmp r3, r2
  24309. 800a94c: d052 beq.n 800a9f4 <HAL_GPIO_Init+0x268>
  24310. 800a94e: 687b ldr r3, [r7, #4]
  24311. 800a950: 4a1f ldr r2, [pc, #124] @ (800a9d0 <HAL_GPIO_Init+0x244>)
  24312. 800a952: 4293 cmp r3, r2
  24313. 800a954: d031 beq.n 800a9ba <HAL_GPIO_Init+0x22e>
  24314. 800a956: 687b ldr r3, [r7, #4]
  24315. 800a958: 4a1e ldr r2, [pc, #120] @ (800a9d4 <HAL_GPIO_Init+0x248>)
  24316. 800a95a: 4293 cmp r3, r2
  24317. 800a95c: d02b beq.n 800a9b6 <HAL_GPIO_Init+0x22a>
  24318. 800a95e: 687b ldr r3, [r7, #4]
  24319. 800a960: 4a1d ldr r2, [pc, #116] @ (800a9d8 <HAL_GPIO_Init+0x24c>)
  24320. 800a962: 4293 cmp r3, r2
  24321. 800a964: d025 beq.n 800a9b2 <HAL_GPIO_Init+0x226>
  24322. 800a966: 687b ldr r3, [r7, #4]
  24323. 800a968: 4a1c ldr r2, [pc, #112] @ (800a9dc <HAL_GPIO_Init+0x250>)
  24324. 800a96a: 4293 cmp r3, r2
  24325. 800a96c: d01f beq.n 800a9ae <HAL_GPIO_Init+0x222>
  24326. 800a96e: 687b ldr r3, [r7, #4]
  24327. 800a970: 4a1b ldr r2, [pc, #108] @ (800a9e0 <HAL_GPIO_Init+0x254>)
  24328. 800a972: 4293 cmp r3, r2
  24329. 800a974: d019 beq.n 800a9aa <HAL_GPIO_Init+0x21e>
  24330. 800a976: 687b ldr r3, [r7, #4]
  24331. 800a978: 4a1a ldr r2, [pc, #104] @ (800a9e4 <HAL_GPIO_Init+0x258>)
  24332. 800a97a: 4293 cmp r3, r2
  24333. 800a97c: d013 beq.n 800a9a6 <HAL_GPIO_Init+0x21a>
  24334. 800a97e: 687b ldr r3, [r7, #4]
  24335. 800a980: 4a19 ldr r2, [pc, #100] @ (800a9e8 <HAL_GPIO_Init+0x25c>)
  24336. 800a982: 4293 cmp r3, r2
  24337. 800a984: d00d beq.n 800a9a2 <HAL_GPIO_Init+0x216>
  24338. 800a986: 687b ldr r3, [r7, #4]
  24339. 800a988: 4a18 ldr r2, [pc, #96] @ (800a9ec <HAL_GPIO_Init+0x260>)
  24340. 800a98a: 4293 cmp r3, r2
  24341. 800a98c: d007 beq.n 800a99e <HAL_GPIO_Init+0x212>
  24342. 800a98e: 687b ldr r3, [r7, #4]
  24343. 800a990: 4a17 ldr r2, [pc, #92] @ (800a9f0 <HAL_GPIO_Init+0x264>)
  24344. 800a992: 4293 cmp r3, r2
  24345. 800a994: d101 bne.n 800a99a <HAL_GPIO_Init+0x20e>
  24346. 800a996: 2309 movs r3, #9
  24347. 800a998: e02d b.n 800a9f6 <HAL_GPIO_Init+0x26a>
  24348. 800a99a: 230a movs r3, #10
  24349. 800a99c: e02b b.n 800a9f6 <HAL_GPIO_Init+0x26a>
  24350. 800a99e: 2308 movs r3, #8
  24351. 800a9a0: e029 b.n 800a9f6 <HAL_GPIO_Init+0x26a>
  24352. 800a9a2: 2307 movs r3, #7
  24353. 800a9a4: e027 b.n 800a9f6 <HAL_GPIO_Init+0x26a>
  24354. 800a9a6: 2306 movs r3, #6
  24355. 800a9a8: e025 b.n 800a9f6 <HAL_GPIO_Init+0x26a>
  24356. 800a9aa: 2305 movs r3, #5
  24357. 800a9ac: e023 b.n 800a9f6 <HAL_GPIO_Init+0x26a>
  24358. 800a9ae: 2304 movs r3, #4
  24359. 800a9b0: e021 b.n 800a9f6 <HAL_GPIO_Init+0x26a>
  24360. 800a9b2: 2303 movs r3, #3
  24361. 800a9b4: e01f b.n 800a9f6 <HAL_GPIO_Init+0x26a>
  24362. 800a9b6: 2302 movs r3, #2
  24363. 800a9b8: e01d b.n 800a9f6 <HAL_GPIO_Init+0x26a>
  24364. 800a9ba: 2301 movs r3, #1
  24365. 800a9bc: e01b b.n 800a9f6 <HAL_GPIO_Init+0x26a>
  24366. 800a9be: bf00 nop
  24367. 800a9c0: 58000080 .word 0x58000080
  24368. 800a9c4: 58024400 .word 0x58024400
  24369. 800a9c8: 58000400 .word 0x58000400
  24370. 800a9cc: 58020000 .word 0x58020000
  24371. 800a9d0: 58020400 .word 0x58020400
  24372. 800a9d4: 58020800 .word 0x58020800
  24373. 800a9d8: 58020c00 .word 0x58020c00
  24374. 800a9dc: 58021000 .word 0x58021000
  24375. 800a9e0: 58021400 .word 0x58021400
  24376. 800a9e4: 58021800 .word 0x58021800
  24377. 800a9e8: 58021c00 .word 0x58021c00
  24378. 800a9ec: 58022000 .word 0x58022000
  24379. 800a9f0: 58022400 .word 0x58022400
  24380. 800a9f4: 2300 movs r3, #0
  24381. 800a9f6: 69fa ldr r2, [r7, #28]
  24382. 800a9f8: f002 0203 and.w r2, r2, #3
  24383. 800a9fc: 0092 lsls r2, r2, #2
  24384. 800a9fe: 4093 lsls r3, r2
  24385. 800aa00: 69ba ldr r2, [r7, #24]
  24386. 800aa02: 4313 orrs r3, r2
  24387. 800aa04: 61bb str r3, [r7, #24]
  24388. SYSCFG->EXTICR[position >> 2U] = temp;
  24389. 800aa06: 4938 ldr r1, [pc, #224] @ (800aae8 <HAL_GPIO_Init+0x35c>)
  24390. 800aa08: 69fb ldr r3, [r7, #28]
  24391. 800aa0a: 089b lsrs r3, r3, #2
  24392. 800aa0c: 3302 adds r3, #2
  24393. 800aa0e: 69ba ldr r2, [r7, #24]
  24394. 800aa10: f841 2023 str.w r2, [r1, r3, lsl #2]
  24395. /* Clear Rising Falling edge configuration */
  24396. temp = EXTI->RTSR1;
  24397. 800aa14: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  24398. 800aa18: 681b ldr r3, [r3, #0]
  24399. 800aa1a: 61bb str r3, [r7, #24]
  24400. temp &= ~(iocurrent);
  24401. 800aa1c: 693b ldr r3, [r7, #16]
  24402. 800aa1e: 43db mvns r3, r3
  24403. 800aa20: 69ba ldr r2, [r7, #24]
  24404. 800aa22: 4013 ands r3, r2
  24405. 800aa24: 61bb str r3, [r7, #24]
  24406. if ((GPIO_Init->Mode & TRIGGER_RISING) != 0x00U)
  24407. 800aa26: 683b ldr r3, [r7, #0]
  24408. 800aa28: 685b ldr r3, [r3, #4]
  24409. 800aa2a: f403 1380 and.w r3, r3, #1048576 @ 0x100000
  24410. 800aa2e: 2b00 cmp r3, #0
  24411. 800aa30: d003 beq.n 800aa3a <HAL_GPIO_Init+0x2ae>
  24412. {
  24413. temp |= iocurrent;
  24414. 800aa32: 69ba ldr r2, [r7, #24]
  24415. 800aa34: 693b ldr r3, [r7, #16]
  24416. 800aa36: 4313 orrs r3, r2
  24417. 800aa38: 61bb str r3, [r7, #24]
  24418. }
  24419. EXTI->RTSR1 = temp;
  24420. 800aa3a: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  24421. 800aa3e: 69bb ldr r3, [r7, #24]
  24422. 800aa40: 6013 str r3, [r2, #0]
  24423. temp = EXTI->FTSR1;
  24424. 800aa42: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  24425. 800aa46: 685b ldr r3, [r3, #4]
  24426. 800aa48: 61bb str r3, [r7, #24]
  24427. temp &= ~(iocurrent);
  24428. 800aa4a: 693b ldr r3, [r7, #16]
  24429. 800aa4c: 43db mvns r3, r3
  24430. 800aa4e: 69ba ldr r2, [r7, #24]
  24431. 800aa50: 4013 ands r3, r2
  24432. 800aa52: 61bb str r3, [r7, #24]
  24433. if ((GPIO_Init->Mode & TRIGGER_FALLING) != 0x00U)
  24434. 800aa54: 683b ldr r3, [r7, #0]
  24435. 800aa56: 685b ldr r3, [r3, #4]
  24436. 800aa58: f403 1300 and.w r3, r3, #2097152 @ 0x200000
  24437. 800aa5c: 2b00 cmp r3, #0
  24438. 800aa5e: d003 beq.n 800aa68 <HAL_GPIO_Init+0x2dc>
  24439. {
  24440. temp |= iocurrent;
  24441. 800aa60: 69ba ldr r2, [r7, #24]
  24442. 800aa62: 693b ldr r3, [r7, #16]
  24443. 800aa64: 4313 orrs r3, r2
  24444. 800aa66: 61bb str r3, [r7, #24]
  24445. }
  24446. EXTI->FTSR1 = temp;
  24447. 800aa68: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  24448. 800aa6c: 69bb ldr r3, [r7, #24]
  24449. 800aa6e: 6053 str r3, [r2, #4]
  24450. temp = EXTI_CurrentCPU->EMR1;
  24451. 800aa70: 697b ldr r3, [r7, #20]
  24452. 800aa72: 685b ldr r3, [r3, #4]
  24453. 800aa74: 61bb str r3, [r7, #24]
  24454. temp &= ~(iocurrent);
  24455. 800aa76: 693b ldr r3, [r7, #16]
  24456. 800aa78: 43db mvns r3, r3
  24457. 800aa7a: 69ba ldr r2, [r7, #24]
  24458. 800aa7c: 4013 ands r3, r2
  24459. 800aa7e: 61bb str r3, [r7, #24]
  24460. if ((GPIO_Init->Mode & EXTI_EVT) != 0x00U)
  24461. 800aa80: 683b ldr r3, [r7, #0]
  24462. 800aa82: 685b ldr r3, [r3, #4]
  24463. 800aa84: f403 3300 and.w r3, r3, #131072 @ 0x20000
  24464. 800aa88: 2b00 cmp r3, #0
  24465. 800aa8a: d003 beq.n 800aa94 <HAL_GPIO_Init+0x308>
  24466. {
  24467. temp |= iocurrent;
  24468. 800aa8c: 69ba ldr r2, [r7, #24]
  24469. 800aa8e: 693b ldr r3, [r7, #16]
  24470. 800aa90: 4313 orrs r3, r2
  24471. 800aa92: 61bb str r3, [r7, #24]
  24472. }
  24473. EXTI_CurrentCPU->EMR1 = temp;
  24474. 800aa94: 697b ldr r3, [r7, #20]
  24475. 800aa96: 69ba ldr r2, [r7, #24]
  24476. 800aa98: 605a str r2, [r3, #4]
  24477. /* Clear EXTI line configuration */
  24478. temp = EXTI_CurrentCPU->IMR1;
  24479. 800aa9a: 697b ldr r3, [r7, #20]
  24480. 800aa9c: 681b ldr r3, [r3, #0]
  24481. 800aa9e: 61bb str r3, [r7, #24]
  24482. temp &= ~(iocurrent);
  24483. 800aaa0: 693b ldr r3, [r7, #16]
  24484. 800aaa2: 43db mvns r3, r3
  24485. 800aaa4: 69ba ldr r2, [r7, #24]
  24486. 800aaa6: 4013 ands r3, r2
  24487. 800aaa8: 61bb str r3, [r7, #24]
  24488. if ((GPIO_Init->Mode & EXTI_IT) != 0x00U)
  24489. 800aaaa: 683b ldr r3, [r7, #0]
  24490. 800aaac: 685b ldr r3, [r3, #4]
  24491. 800aaae: f403 3380 and.w r3, r3, #65536 @ 0x10000
  24492. 800aab2: 2b00 cmp r3, #0
  24493. 800aab4: d003 beq.n 800aabe <HAL_GPIO_Init+0x332>
  24494. {
  24495. temp |= iocurrent;
  24496. 800aab6: 69ba ldr r2, [r7, #24]
  24497. 800aab8: 693b ldr r3, [r7, #16]
  24498. 800aaba: 4313 orrs r3, r2
  24499. 800aabc: 61bb str r3, [r7, #24]
  24500. }
  24501. EXTI_CurrentCPU->IMR1 = temp;
  24502. 800aabe: 697b ldr r3, [r7, #20]
  24503. 800aac0: 69ba ldr r2, [r7, #24]
  24504. 800aac2: 601a str r2, [r3, #0]
  24505. }
  24506. }
  24507. position++;
  24508. 800aac4: 69fb ldr r3, [r7, #28]
  24509. 800aac6: 3301 adds r3, #1
  24510. 800aac8: 61fb str r3, [r7, #28]
  24511. while (((GPIO_Init->Pin) >> position) != 0x00U)
  24512. 800aaca: 683b ldr r3, [r7, #0]
  24513. 800aacc: 681a ldr r2, [r3, #0]
  24514. 800aace: 69fb ldr r3, [r7, #28]
  24515. 800aad0: fa22 f303 lsr.w r3, r2, r3
  24516. 800aad4: 2b00 cmp r3, #0
  24517. 800aad6: f47f ae63 bne.w 800a7a0 <HAL_GPIO_Init+0x14>
  24518. }
  24519. }
  24520. 800aada: bf00 nop
  24521. 800aadc: bf00 nop
  24522. 800aade: 3724 adds r7, #36 @ 0x24
  24523. 800aae0: 46bd mov sp, r7
  24524. 800aae2: f85d 7b04 ldr.w r7, [sp], #4
  24525. 800aae6: 4770 bx lr
  24526. 800aae8: 58000400 .word 0x58000400
  24527. 0800aaec <HAL_GPIO_ReadPin>:
  24528. * @param GPIO_Pin: specifies the port bit to read.
  24529. * This parameter can be GPIO_PIN_x where x can be (0..15).
  24530. * @retval The input port pin value.
  24531. */
  24532. GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
  24533. {
  24534. 800aaec: b480 push {r7}
  24535. 800aaee: b085 sub sp, #20
  24536. 800aaf0: af00 add r7, sp, #0
  24537. 800aaf2: 6078 str r0, [r7, #4]
  24538. 800aaf4: 460b mov r3, r1
  24539. 800aaf6: 807b strh r3, [r7, #2]
  24540. GPIO_PinState bitstatus;
  24541. /* Check the parameters */
  24542. assert_param(IS_GPIO_PIN(GPIO_Pin));
  24543. if ((GPIOx->IDR & GPIO_Pin) != 0x00U)
  24544. 800aaf8: 687b ldr r3, [r7, #4]
  24545. 800aafa: 691a ldr r2, [r3, #16]
  24546. 800aafc: 887b ldrh r3, [r7, #2]
  24547. 800aafe: 4013 ands r3, r2
  24548. 800ab00: 2b00 cmp r3, #0
  24549. 800ab02: d002 beq.n 800ab0a <HAL_GPIO_ReadPin+0x1e>
  24550. {
  24551. bitstatus = GPIO_PIN_SET;
  24552. 800ab04: 2301 movs r3, #1
  24553. 800ab06: 73fb strb r3, [r7, #15]
  24554. 800ab08: e001 b.n 800ab0e <HAL_GPIO_ReadPin+0x22>
  24555. }
  24556. else
  24557. {
  24558. bitstatus = GPIO_PIN_RESET;
  24559. 800ab0a: 2300 movs r3, #0
  24560. 800ab0c: 73fb strb r3, [r7, #15]
  24561. }
  24562. return bitstatus;
  24563. 800ab0e: 7bfb ldrb r3, [r7, #15]
  24564. }
  24565. 800ab10: 4618 mov r0, r3
  24566. 800ab12: 3714 adds r7, #20
  24567. 800ab14: 46bd mov sp, r7
  24568. 800ab16: f85d 7b04 ldr.w r7, [sp], #4
  24569. 800ab1a: 4770 bx lr
  24570. 0800ab1c <HAL_GPIO_WritePin>:
  24571. * @arg GPIO_PIN_RESET: to clear the port pin
  24572. * @arg GPIO_PIN_SET: to set the port pin
  24573. * @retval None
  24574. */
  24575. void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
  24576. {
  24577. 800ab1c: b480 push {r7}
  24578. 800ab1e: b083 sub sp, #12
  24579. 800ab20: af00 add r7, sp, #0
  24580. 800ab22: 6078 str r0, [r7, #4]
  24581. 800ab24: 460b mov r3, r1
  24582. 800ab26: 807b strh r3, [r7, #2]
  24583. 800ab28: 4613 mov r3, r2
  24584. 800ab2a: 707b strb r3, [r7, #1]
  24585. /* Check the parameters */
  24586. assert_param(IS_GPIO_PIN(GPIO_Pin));
  24587. assert_param(IS_GPIO_PIN_ACTION(PinState));
  24588. if (PinState != GPIO_PIN_RESET)
  24589. 800ab2c: 787b ldrb r3, [r7, #1]
  24590. 800ab2e: 2b00 cmp r3, #0
  24591. 800ab30: d003 beq.n 800ab3a <HAL_GPIO_WritePin+0x1e>
  24592. {
  24593. GPIOx->BSRR = GPIO_Pin;
  24594. 800ab32: 887a ldrh r2, [r7, #2]
  24595. 800ab34: 687b ldr r3, [r7, #4]
  24596. 800ab36: 619a str r2, [r3, #24]
  24597. }
  24598. else
  24599. {
  24600. GPIOx->BSRR = (uint32_t)GPIO_Pin << GPIO_NUMBER;
  24601. }
  24602. }
  24603. 800ab38: e003 b.n 800ab42 <HAL_GPIO_WritePin+0x26>
  24604. GPIOx->BSRR = (uint32_t)GPIO_Pin << GPIO_NUMBER;
  24605. 800ab3a: 887b ldrh r3, [r7, #2]
  24606. 800ab3c: 041a lsls r2, r3, #16
  24607. 800ab3e: 687b ldr r3, [r7, #4]
  24608. 800ab40: 619a str r2, [r3, #24]
  24609. }
  24610. 800ab42: bf00 nop
  24611. 800ab44: 370c adds r7, #12
  24612. 800ab46: 46bd mov sp, r7
  24613. 800ab48: f85d 7b04 ldr.w r7, [sp], #4
  24614. 800ab4c: 4770 bx lr
  24615. 0800ab4e <HAL_GPIO_TogglePin>:
  24616. * @param GPIOx: Where x can be (A..K) to select the GPIO peripheral.
  24617. * @param GPIO_Pin: Specifies the pins to be toggled.
  24618. * @retval None
  24619. */
  24620. void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
  24621. {
  24622. 800ab4e: b480 push {r7}
  24623. 800ab50: b085 sub sp, #20
  24624. 800ab52: af00 add r7, sp, #0
  24625. 800ab54: 6078 str r0, [r7, #4]
  24626. 800ab56: 460b mov r3, r1
  24627. 800ab58: 807b strh r3, [r7, #2]
  24628. /* Check the parameters */
  24629. assert_param(IS_GPIO_PIN(GPIO_Pin));
  24630. /* get current Output Data Register value */
  24631. odr = GPIOx->ODR;
  24632. 800ab5a: 687b ldr r3, [r7, #4]
  24633. 800ab5c: 695b ldr r3, [r3, #20]
  24634. 800ab5e: 60fb str r3, [r7, #12]
  24635. /* Set selected pins that were at low level, and reset ones that were high */
  24636. GPIOx->BSRR = ((odr & GPIO_Pin) << GPIO_NUMBER) | (~odr & GPIO_Pin);
  24637. 800ab60: 887a ldrh r2, [r7, #2]
  24638. 800ab62: 68fb ldr r3, [r7, #12]
  24639. 800ab64: 4013 ands r3, r2
  24640. 800ab66: 041a lsls r2, r3, #16
  24641. 800ab68: 68fb ldr r3, [r7, #12]
  24642. 800ab6a: 43d9 mvns r1, r3
  24643. 800ab6c: 887b ldrh r3, [r7, #2]
  24644. 800ab6e: 400b ands r3, r1
  24645. 800ab70: 431a orrs r2, r3
  24646. 800ab72: 687b ldr r3, [r7, #4]
  24647. 800ab74: 619a str r2, [r3, #24]
  24648. }
  24649. 800ab76: bf00 nop
  24650. 800ab78: 3714 adds r7, #20
  24651. 800ab7a: 46bd mov sp, r7
  24652. 800ab7c: f85d 7b04 ldr.w r7, [sp], #4
  24653. 800ab80: 4770 bx lr
  24654. 0800ab82 <HAL_GPIO_EXTI_IRQHandler>:
  24655. * @brief Handle EXTI interrupt request.
  24656. * @param GPIO_Pin: Specifies the port pin connected to corresponding EXTI line.
  24657. * @retval None
  24658. */
  24659. void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)
  24660. {
  24661. 800ab82: b580 push {r7, lr}
  24662. 800ab84: b082 sub sp, #8
  24663. 800ab86: af00 add r7, sp, #0
  24664. 800ab88: 4603 mov r3, r0
  24665. 800ab8a: 80fb strh r3, [r7, #6]
  24666. __HAL_GPIO_EXTID2_CLEAR_IT(GPIO_Pin);
  24667. HAL_GPIO_EXTI_Callback(GPIO_Pin);
  24668. }
  24669. #else
  24670. /* EXTI line interrupt detected */
  24671. if (__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != 0x00U)
  24672. 800ab8c: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  24673. 800ab90: f8d3 2088 ldr.w r2, [r3, #136] @ 0x88
  24674. 800ab94: 88fb ldrh r3, [r7, #6]
  24675. 800ab96: 4013 ands r3, r2
  24676. 800ab98: 2b00 cmp r3, #0
  24677. 800ab9a: d008 beq.n 800abae <HAL_GPIO_EXTI_IRQHandler+0x2c>
  24678. {
  24679. __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
  24680. 800ab9c: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  24681. 800aba0: 88fb ldrh r3, [r7, #6]
  24682. 800aba2: f8c2 3088 str.w r3, [r2, #136] @ 0x88
  24683. HAL_GPIO_EXTI_Callback(GPIO_Pin);
  24684. 800aba6: 88fb ldrh r3, [r7, #6]
  24685. 800aba8: 4618 mov r0, r3
  24686. 800abaa: f7f5 fd7f bl 80006ac <HAL_GPIO_EXTI_Callback>
  24687. }
  24688. #endif
  24689. }
  24690. 800abae: bf00 nop
  24691. 800abb0: 3708 adds r7, #8
  24692. 800abb2: 46bd mov sp, r7
  24693. 800abb4: bd80 pop {r7, pc}
  24694. ...
  24695. 0800abb8 <HAL_PWR_ConfigPVD>:
  24696. * driver. All combination are allowed: wake up only Cortex-M7, wake up
  24697. * only Cortex-M4 or wake up Cortex-M7 and Cortex-M4.
  24698. * @retval None.
  24699. */
  24700. void HAL_PWR_ConfigPVD (PWR_PVDTypeDef *sConfigPVD)
  24701. {
  24702. 800abb8: b480 push {r7}
  24703. 800abba: b083 sub sp, #12
  24704. 800abbc: af00 add r7, sp, #0
  24705. 800abbe: 6078 str r0, [r7, #4]
  24706. /* Check the PVD configuration parameter */
  24707. if (sConfigPVD == NULL)
  24708. 800abc0: 687b ldr r3, [r7, #4]
  24709. 800abc2: 2b00 cmp r3, #0
  24710. 800abc4: d069 beq.n 800ac9a <HAL_PWR_ConfigPVD+0xe2>
  24711. /* Check the parameters */
  24712. assert_param (IS_PWR_PVD_LEVEL (sConfigPVD->PVDLevel));
  24713. assert_param (IS_PWR_PVD_MODE (sConfigPVD->Mode));
  24714. /* Set PLS[7:5] bits according to PVDLevel value */
  24715. MODIFY_REG (PWR->CR1, PWR_CR1_PLS, sConfigPVD->PVDLevel);
  24716. 800abc6: 4b38 ldr r3, [pc, #224] @ (800aca8 <HAL_PWR_ConfigPVD+0xf0>)
  24717. 800abc8: 681b ldr r3, [r3, #0]
  24718. 800abca: f023 02e0 bic.w r2, r3, #224 @ 0xe0
  24719. 800abce: 687b ldr r3, [r7, #4]
  24720. 800abd0: 681b ldr r3, [r3, #0]
  24721. 800abd2: 4935 ldr r1, [pc, #212] @ (800aca8 <HAL_PWR_ConfigPVD+0xf0>)
  24722. 800abd4: 4313 orrs r3, r2
  24723. 800abd6: 600b str r3, [r1, #0]
  24724. /* Clear previous config */
  24725. #if !defined (DUAL_CORE)
  24726. __HAL_PWR_PVD_EXTI_DISABLE_EVENT ();
  24727. 800abd8: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  24728. 800abdc: f8d3 3084 ldr.w r3, [r3, #132] @ 0x84
  24729. 800abe0: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  24730. 800abe4: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  24731. 800abe8: f8c2 3084 str.w r3, [r2, #132] @ 0x84
  24732. __HAL_PWR_PVD_EXTI_DISABLE_IT ();
  24733. 800abec: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  24734. 800abf0: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  24735. 800abf4: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  24736. 800abf8: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  24737. 800abfc: f8c2 3080 str.w r3, [r2, #128] @ 0x80
  24738. #endif /* !defined (DUAL_CORE) */
  24739. __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE ();
  24740. 800ac00: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  24741. 800ac04: 681b ldr r3, [r3, #0]
  24742. 800ac06: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  24743. 800ac0a: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  24744. 800ac0e: 6013 str r3, [r2, #0]
  24745. __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE ();
  24746. 800ac10: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  24747. 800ac14: 685b ldr r3, [r3, #4]
  24748. 800ac16: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  24749. 800ac1a: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  24750. 800ac1e: 6053 str r3, [r2, #4]
  24751. #if !defined (DUAL_CORE)
  24752. /* Interrupt mode configuration */
  24753. if ((sConfigPVD->Mode & PVD_MODE_IT) == PVD_MODE_IT)
  24754. 800ac20: 687b ldr r3, [r7, #4]
  24755. 800ac22: 685b ldr r3, [r3, #4]
  24756. 800ac24: f403 3380 and.w r3, r3, #65536 @ 0x10000
  24757. 800ac28: 2b00 cmp r3, #0
  24758. 800ac2a: d009 beq.n 800ac40 <HAL_PWR_ConfigPVD+0x88>
  24759. {
  24760. __HAL_PWR_PVD_EXTI_ENABLE_IT ();
  24761. 800ac2c: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  24762. 800ac30: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  24763. 800ac34: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  24764. 800ac38: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  24765. 800ac3c: f8c2 3080 str.w r3, [r2, #128] @ 0x80
  24766. }
  24767. /* Event mode configuration */
  24768. if ((sConfigPVD->Mode & PVD_MODE_EVT) == PVD_MODE_EVT)
  24769. 800ac40: 687b ldr r3, [r7, #4]
  24770. 800ac42: 685b ldr r3, [r3, #4]
  24771. 800ac44: f403 3300 and.w r3, r3, #131072 @ 0x20000
  24772. 800ac48: 2b00 cmp r3, #0
  24773. 800ac4a: d009 beq.n 800ac60 <HAL_PWR_ConfigPVD+0xa8>
  24774. {
  24775. __HAL_PWR_PVD_EXTI_ENABLE_EVENT ();
  24776. 800ac4c: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  24777. 800ac50: f8d3 3084 ldr.w r3, [r3, #132] @ 0x84
  24778. 800ac54: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  24779. 800ac58: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  24780. 800ac5c: f8c2 3084 str.w r3, [r2, #132] @ 0x84
  24781. }
  24782. #endif /* !defined (DUAL_CORE) */
  24783. /* Rising edge configuration */
  24784. if ((sConfigPVD->Mode & PVD_RISING_EDGE) == PVD_RISING_EDGE)
  24785. 800ac60: 687b ldr r3, [r7, #4]
  24786. 800ac62: 685b ldr r3, [r3, #4]
  24787. 800ac64: f003 0301 and.w r3, r3, #1
  24788. 800ac68: 2b00 cmp r3, #0
  24789. 800ac6a: d007 beq.n 800ac7c <HAL_PWR_ConfigPVD+0xc4>
  24790. {
  24791. __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE ();
  24792. 800ac6c: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  24793. 800ac70: 681b ldr r3, [r3, #0]
  24794. 800ac72: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  24795. 800ac76: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  24796. 800ac7a: 6013 str r3, [r2, #0]
  24797. }
  24798. /* Falling edge configuration */
  24799. if ((sConfigPVD->Mode & PVD_FALLING_EDGE) == PVD_FALLING_EDGE)
  24800. 800ac7c: 687b ldr r3, [r7, #4]
  24801. 800ac7e: 685b ldr r3, [r3, #4]
  24802. 800ac80: f003 0302 and.w r3, r3, #2
  24803. 800ac84: 2b00 cmp r3, #0
  24804. 800ac86: d009 beq.n 800ac9c <HAL_PWR_ConfigPVD+0xe4>
  24805. {
  24806. __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE ();
  24807. 800ac88: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  24808. 800ac8c: 685b ldr r3, [r3, #4]
  24809. 800ac8e: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  24810. 800ac92: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  24811. 800ac96: 6053 str r3, [r2, #4]
  24812. 800ac98: e000 b.n 800ac9c <HAL_PWR_ConfigPVD+0xe4>
  24813. return;
  24814. 800ac9a: bf00 nop
  24815. }
  24816. }
  24817. 800ac9c: 370c adds r7, #12
  24818. 800ac9e: 46bd mov sp, r7
  24819. 800aca0: f85d 7b04 ldr.w r7, [sp], #4
  24820. 800aca4: 4770 bx lr
  24821. 800aca6: bf00 nop
  24822. 800aca8: 58024800 .word 0x58024800
  24823. 0800acac <HAL_PWR_EnablePVD>:
  24824. /**
  24825. * @brief Enable the Programmable Voltage Detector (PVD).
  24826. * @retval None.
  24827. */
  24828. void HAL_PWR_EnablePVD (void)
  24829. {
  24830. 800acac: b480 push {r7}
  24831. 800acae: af00 add r7, sp, #0
  24832. /* Enable the power voltage detector */
  24833. SET_BIT (PWR->CR1, PWR_CR1_PVDEN);
  24834. 800acb0: 4b05 ldr r3, [pc, #20] @ (800acc8 <HAL_PWR_EnablePVD+0x1c>)
  24835. 800acb2: 681b ldr r3, [r3, #0]
  24836. 800acb4: 4a04 ldr r2, [pc, #16] @ (800acc8 <HAL_PWR_EnablePVD+0x1c>)
  24837. 800acb6: f043 0310 orr.w r3, r3, #16
  24838. 800acba: 6013 str r3, [r2, #0]
  24839. }
  24840. 800acbc: bf00 nop
  24841. 800acbe: 46bd mov sp, r7
  24842. 800acc0: f85d 7b04 ldr.w r7, [sp], #4
  24843. 800acc4: 4770 bx lr
  24844. 800acc6: bf00 nop
  24845. 800acc8: 58024800 .word 0x58024800
  24846. 0800accc <HAL_PWREx_ConfigSupply>:
  24847. * PWR_SMPS_2V5_SUPPLIES_EXT are used only for lines that supports SMPS
  24848. * regulator.
  24849. * @retval HAL status.
  24850. */
  24851. HAL_StatusTypeDef HAL_PWREx_ConfigSupply (uint32_t SupplySource)
  24852. {
  24853. 800accc: b580 push {r7, lr}
  24854. 800acce: b084 sub sp, #16
  24855. 800acd0: af00 add r7, sp, #0
  24856. 800acd2: 6078 str r0, [r7, #4]
  24857. /* Check the parameters */
  24858. assert_param (IS_PWR_SUPPLY (SupplySource));
  24859. /* Check if supply source was configured */
  24860. #if defined (PWR_FLAG_SCUEN)
  24861. if (__HAL_PWR_GET_FLAG (PWR_FLAG_SCUEN) == 0U)
  24862. 800acd4: 4b19 ldr r3, [pc, #100] @ (800ad3c <HAL_PWREx_ConfigSupply+0x70>)
  24863. 800acd6: 68db ldr r3, [r3, #12]
  24864. 800acd8: f003 0304 and.w r3, r3, #4
  24865. 800acdc: 2b04 cmp r3, #4
  24866. 800acde: d00a beq.n 800acf6 <HAL_PWREx_ConfigSupply+0x2a>
  24867. #else
  24868. if ((PWR->CR3 & (PWR_CR3_SMPSEN | PWR_CR3_LDOEN | PWR_CR3_BYPASS)) != (PWR_CR3_SMPSEN | PWR_CR3_LDOEN))
  24869. #endif /* defined (PWR_FLAG_SCUEN) */
  24870. {
  24871. /* Check supply configuration */
  24872. if ((PWR->CR3 & PWR_SUPPLY_CONFIG_MASK) != SupplySource)
  24873. 800ace0: 4b16 ldr r3, [pc, #88] @ (800ad3c <HAL_PWREx_ConfigSupply+0x70>)
  24874. 800ace2: 68db ldr r3, [r3, #12]
  24875. 800ace4: f003 0307 and.w r3, r3, #7
  24876. 800ace8: 687a ldr r2, [r7, #4]
  24877. 800acea: 429a cmp r2, r3
  24878. 800acec: d001 beq.n 800acf2 <HAL_PWREx_ConfigSupply+0x26>
  24879. {
  24880. /* Supply configuration update locked, can't apply a new supply config */
  24881. return HAL_ERROR;
  24882. 800acee: 2301 movs r3, #1
  24883. 800acf0: e01f b.n 800ad32 <HAL_PWREx_ConfigSupply+0x66>
  24884. else
  24885. {
  24886. /* Supply configuration update locked, but new supply configuration
  24887. matches with old supply configuration : nothing to do
  24888. */
  24889. return HAL_OK;
  24890. 800acf2: 2300 movs r3, #0
  24891. 800acf4: e01d b.n 800ad32 <HAL_PWREx_ConfigSupply+0x66>
  24892. }
  24893. }
  24894. /* Set the power supply configuration */
  24895. MODIFY_REG (PWR->CR3, PWR_SUPPLY_CONFIG_MASK, SupplySource);
  24896. 800acf6: 4b11 ldr r3, [pc, #68] @ (800ad3c <HAL_PWREx_ConfigSupply+0x70>)
  24897. 800acf8: 68db ldr r3, [r3, #12]
  24898. 800acfa: f023 0207 bic.w r2, r3, #7
  24899. 800acfe: 490f ldr r1, [pc, #60] @ (800ad3c <HAL_PWREx_ConfigSupply+0x70>)
  24900. 800ad00: 687b ldr r3, [r7, #4]
  24901. 800ad02: 4313 orrs r3, r2
  24902. 800ad04: 60cb str r3, [r1, #12]
  24903. /* Get tick */
  24904. tickstart = HAL_GetTick ();
  24905. 800ad06: f7fa fb69 bl 80053dc <HAL_GetTick>
  24906. 800ad0a: 60f8 str r0, [r7, #12]
  24907. /* Wait till voltage level flag is set */
  24908. while (__HAL_PWR_GET_FLAG (PWR_FLAG_ACTVOSRDY) == 0U)
  24909. 800ad0c: e009 b.n 800ad22 <HAL_PWREx_ConfigSupply+0x56>
  24910. {
  24911. if ((HAL_GetTick () - tickstart) > PWR_FLAG_SETTING_DELAY)
  24912. 800ad0e: f7fa fb65 bl 80053dc <HAL_GetTick>
  24913. 800ad12: 4602 mov r2, r0
  24914. 800ad14: 68fb ldr r3, [r7, #12]
  24915. 800ad16: 1ad3 subs r3, r2, r3
  24916. 800ad18: f5b3 7f7a cmp.w r3, #1000 @ 0x3e8
  24917. 800ad1c: d901 bls.n 800ad22 <HAL_PWREx_ConfigSupply+0x56>
  24918. {
  24919. return HAL_ERROR;
  24920. 800ad1e: 2301 movs r3, #1
  24921. 800ad20: e007 b.n 800ad32 <HAL_PWREx_ConfigSupply+0x66>
  24922. while (__HAL_PWR_GET_FLAG (PWR_FLAG_ACTVOSRDY) == 0U)
  24923. 800ad22: 4b06 ldr r3, [pc, #24] @ (800ad3c <HAL_PWREx_ConfigSupply+0x70>)
  24924. 800ad24: 685b ldr r3, [r3, #4]
  24925. 800ad26: f403 5300 and.w r3, r3, #8192 @ 0x2000
  24926. 800ad2a: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  24927. 800ad2e: d1ee bne.n 800ad0e <HAL_PWREx_ConfigSupply+0x42>
  24928. }
  24929. }
  24930. }
  24931. #endif /* defined (SMPS) */
  24932. return HAL_OK;
  24933. 800ad30: 2300 movs r3, #0
  24934. }
  24935. 800ad32: 4618 mov r0, r3
  24936. 800ad34: 3710 adds r7, #16
  24937. 800ad36: 46bd mov sp, r7
  24938. 800ad38: bd80 pop {r7, pc}
  24939. 800ad3a: bf00 nop
  24940. 800ad3c: 58024800 .word 0x58024800
  24941. 0800ad40 <HAL_PWREx_ConfigAVD>:
  24942. * driver. All combination are allowed: wake up only Cortex-M7, wake up
  24943. * only Cortex-M4 and wake up Cortex-M7 and Cortex-M4.
  24944. * @retval None.
  24945. */
  24946. void HAL_PWREx_ConfigAVD (PWREx_AVDTypeDef *sConfigAVD)
  24947. {
  24948. 800ad40: b480 push {r7}
  24949. 800ad42: b083 sub sp, #12
  24950. 800ad44: af00 add r7, sp, #0
  24951. 800ad46: 6078 str r0, [r7, #4]
  24952. /* Check the parameters */
  24953. assert_param (IS_PWR_AVD_LEVEL (sConfigAVD->AVDLevel));
  24954. assert_param (IS_PWR_AVD_MODE (sConfigAVD->Mode));
  24955. /* Set the ALS[18:17] bits according to AVDLevel value */
  24956. MODIFY_REG (PWR->CR1, PWR_CR1_ALS, sConfigAVD->AVDLevel);
  24957. 800ad48: 4b37 ldr r3, [pc, #220] @ (800ae28 <HAL_PWREx_ConfigAVD+0xe8>)
  24958. 800ad4a: 681b ldr r3, [r3, #0]
  24959. 800ad4c: f423 22c0 bic.w r2, r3, #393216 @ 0x60000
  24960. 800ad50: 687b ldr r3, [r7, #4]
  24961. 800ad52: 681b ldr r3, [r3, #0]
  24962. 800ad54: 4934 ldr r1, [pc, #208] @ (800ae28 <HAL_PWREx_ConfigAVD+0xe8>)
  24963. 800ad56: 4313 orrs r3, r2
  24964. 800ad58: 600b str r3, [r1, #0]
  24965. /* Clear any previous config */
  24966. #if !defined (DUAL_CORE)
  24967. __HAL_PWR_AVD_EXTI_DISABLE_EVENT ();
  24968. 800ad5a: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  24969. 800ad5e: f8d3 3084 ldr.w r3, [r3, #132] @ 0x84
  24970. 800ad62: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  24971. 800ad66: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  24972. 800ad6a: f8c2 3084 str.w r3, [r2, #132] @ 0x84
  24973. __HAL_PWR_AVD_EXTI_DISABLE_IT ();
  24974. 800ad6e: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  24975. 800ad72: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  24976. 800ad76: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  24977. 800ad7a: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  24978. 800ad7e: f8c2 3080 str.w r3, [r2, #128] @ 0x80
  24979. #endif /* !defined (DUAL_CORE) */
  24980. __HAL_PWR_AVD_EXTI_DISABLE_RISING_EDGE ();
  24981. 800ad82: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  24982. 800ad86: 681b ldr r3, [r3, #0]
  24983. 800ad88: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  24984. 800ad8c: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  24985. 800ad90: 6013 str r3, [r2, #0]
  24986. __HAL_PWR_AVD_EXTI_DISABLE_FALLING_EDGE ();
  24987. 800ad92: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  24988. 800ad96: 685b ldr r3, [r3, #4]
  24989. 800ad98: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  24990. 800ad9c: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  24991. 800ada0: 6053 str r3, [r2, #4]
  24992. #if !defined (DUAL_CORE)
  24993. /* Configure the interrupt mode */
  24994. if ((sConfigAVD->Mode & AVD_MODE_IT) == AVD_MODE_IT)
  24995. 800ada2: 687b ldr r3, [r7, #4]
  24996. 800ada4: 685b ldr r3, [r3, #4]
  24997. 800ada6: f403 3380 and.w r3, r3, #65536 @ 0x10000
  24998. 800adaa: 2b00 cmp r3, #0
  24999. 800adac: d009 beq.n 800adc2 <HAL_PWREx_ConfigAVD+0x82>
  25000. {
  25001. __HAL_PWR_AVD_EXTI_ENABLE_IT ();
  25002. 800adae: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  25003. 800adb2: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  25004. 800adb6: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  25005. 800adba: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  25006. 800adbe: f8c2 3080 str.w r3, [r2, #128] @ 0x80
  25007. }
  25008. /* Configure the event mode */
  25009. if ((sConfigAVD->Mode & AVD_MODE_EVT) == AVD_MODE_EVT)
  25010. 800adc2: 687b ldr r3, [r7, #4]
  25011. 800adc4: 685b ldr r3, [r3, #4]
  25012. 800adc6: f403 3300 and.w r3, r3, #131072 @ 0x20000
  25013. 800adca: 2b00 cmp r3, #0
  25014. 800adcc: d009 beq.n 800ade2 <HAL_PWREx_ConfigAVD+0xa2>
  25015. {
  25016. __HAL_PWR_AVD_EXTI_ENABLE_EVENT ();
  25017. 800adce: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  25018. 800add2: f8d3 3084 ldr.w r3, [r3, #132] @ 0x84
  25019. 800add6: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  25020. 800adda: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  25021. 800adde: f8c2 3084 str.w r3, [r2, #132] @ 0x84
  25022. }
  25023. #endif /* !defined (DUAL_CORE) */
  25024. /* Rising edge configuration */
  25025. if ((sConfigAVD->Mode & AVD_RISING_EDGE) == AVD_RISING_EDGE)
  25026. 800ade2: 687b ldr r3, [r7, #4]
  25027. 800ade4: 685b ldr r3, [r3, #4]
  25028. 800ade6: f003 0301 and.w r3, r3, #1
  25029. 800adea: 2b00 cmp r3, #0
  25030. 800adec: d007 beq.n 800adfe <HAL_PWREx_ConfigAVD+0xbe>
  25031. {
  25032. __HAL_PWR_AVD_EXTI_ENABLE_RISING_EDGE ();
  25033. 800adee: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  25034. 800adf2: 681b ldr r3, [r3, #0]
  25035. 800adf4: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  25036. 800adf8: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  25037. 800adfc: 6013 str r3, [r2, #0]
  25038. }
  25039. /* Falling edge configuration */
  25040. if ((sConfigAVD->Mode & AVD_FALLING_EDGE) == AVD_FALLING_EDGE)
  25041. 800adfe: 687b ldr r3, [r7, #4]
  25042. 800ae00: 685b ldr r3, [r3, #4]
  25043. 800ae02: f003 0302 and.w r3, r3, #2
  25044. 800ae06: 2b00 cmp r3, #0
  25045. 800ae08: d007 beq.n 800ae1a <HAL_PWREx_ConfigAVD+0xda>
  25046. {
  25047. __HAL_PWR_AVD_EXTI_ENABLE_FALLING_EDGE ();
  25048. 800ae0a: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  25049. 800ae0e: 685b ldr r3, [r3, #4]
  25050. 800ae10: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  25051. 800ae14: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  25052. 800ae18: 6053 str r3, [r2, #4]
  25053. }
  25054. }
  25055. 800ae1a: bf00 nop
  25056. 800ae1c: 370c adds r7, #12
  25057. 800ae1e: 46bd mov sp, r7
  25058. 800ae20: f85d 7b04 ldr.w r7, [sp], #4
  25059. 800ae24: 4770 bx lr
  25060. 800ae26: bf00 nop
  25061. 800ae28: 58024800 .word 0x58024800
  25062. 0800ae2c <HAL_PWREx_EnableAVD>:
  25063. /**
  25064. * @brief Enable the Analog Voltage Detector (AVD).
  25065. * @retval None.
  25066. */
  25067. void HAL_PWREx_EnableAVD (void)
  25068. {
  25069. 800ae2c: b480 push {r7}
  25070. 800ae2e: af00 add r7, sp, #0
  25071. /* Enable the Analog Voltage Detector */
  25072. SET_BIT (PWR->CR1, PWR_CR1_AVDEN);
  25073. 800ae30: 4b05 ldr r3, [pc, #20] @ (800ae48 <HAL_PWREx_EnableAVD+0x1c>)
  25074. 800ae32: 681b ldr r3, [r3, #0]
  25075. 800ae34: 4a04 ldr r2, [pc, #16] @ (800ae48 <HAL_PWREx_EnableAVD+0x1c>)
  25076. 800ae36: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  25077. 800ae3a: 6013 str r3, [r2, #0]
  25078. }
  25079. 800ae3c: bf00 nop
  25080. 800ae3e: 46bd mov sp, r7
  25081. 800ae40: f85d 7b04 ldr.w r7, [sp], #4
  25082. 800ae44: 4770 bx lr
  25083. 800ae46: bf00 nop
  25084. 800ae48: 58024800 .word 0x58024800
  25085. 0800ae4c <HAL_RCC_OscConfig>:
  25086. * supported by this function. User should request a transition to HSE Off
  25087. * first and then HSE On or HSE Bypass.
  25088. * @retval HAL status
  25089. */
  25090. __weak HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
  25091. {
  25092. 800ae4c: b580 push {r7, lr}
  25093. 800ae4e: b08c sub sp, #48 @ 0x30
  25094. 800ae50: af00 add r7, sp, #0
  25095. 800ae52: 6078 str r0, [r7, #4]
  25096. uint32_t tickstart;
  25097. uint32_t temp1_pllckcfg, temp2_pllckcfg;
  25098. /* Check Null pointer */
  25099. if (RCC_OscInitStruct == NULL)
  25100. 800ae54: 687b ldr r3, [r7, #4]
  25101. 800ae56: 2b00 cmp r3, #0
  25102. 800ae58: d102 bne.n 800ae60 <HAL_RCC_OscConfig+0x14>
  25103. {
  25104. return HAL_ERROR;
  25105. 800ae5a: 2301 movs r3, #1
  25106. 800ae5c: f000 bc48 b.w 800b6f0 <HAL_RCC_OscConfig+0x8a4>
  25107. }
  25108. /* Check the parameters */
  25109. assert_param(IS_RCC_OSCILLATORTYPE(RCC_OscInitStruct->OscillatorType));
  25110. /*------------------------------- HSE Configuration ------------------------*/
  25111. if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE)
  25112. 800ae60: 687b ldr r3, [r7, #4]
  25113. 800ae62: 681b ldr r3, [r3, #0]
  25114. 800ae64: f003 0301 and.w r3, r3, #1
  25115. 800ae68: 2b00 cmp r3, #0
  25116. 800ae6a: f000 8088 beq.w 800af7e <HAL_RCC_OscConfig+0x132>
  25117. {
  25118. /* Check the parameters */
  25119. assert_param(IS_RCC_HSE(RCC_OscInitStruct->HSEState));
  25120. const uint32_t temp_sysclksrc = __HAL_RCC_GET_SYSCLK_SOURCE();
  25121. 800ae6e: 4b99 ldr r3, [pc, #612] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25122. 800ae70: 691b ldr r3, [r3, #16]
  25123. 800ae72: f003 0338 and.w r3, r3, #56 @ 0x38
  25124. 800ae76: 62fb str r3, [r7, #44] @ 0x2c
  25125. const uint32_t temp_pllckselr = RCC->PLLCKSELR;
  25126. 800ae78: 4b96 ldr r3, [pc, #600] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25127. 800ae7a: 6a9b ldr r3, [r3, #40] @ 0x28
  25128. 800ae7c: 62bb str r3, [r7, #40] @ 0x28
  25129. /* When the HSE is used as system clock or clock source for PLL in these cases HSE will not disabled */
  25130. if ((temp_sysclksrc == RCC_CFGR_SWS_HSE) || ((temp_sysclksrc == RCC_CFGR_SWS_PLL1) && ((temp_pllckselr & RCC_PLLCKSELR_PLLSRC) == RCC_PLLCKSELR_PLLSRC_HSE)))
  25131. 800ae7e: 6afb ldr r3, [r7, #44] @ 0x2c
  25132. 800ae80: 2b10 cmp r3, #16
  25133. 800ae82: d007 beq.n 800ae94 <HAL_RCC_OscConfig+0x48>
  25134. 800ae84: 6afb ldr r3, [r7, #44] @ 0x2c
  25135. 800ae86: 2b18 cmp r3, #24
  25136. 800ae88: d111 bne.n 800aeae <HAL_RCC_OscConfig+0x62>
  25137. 800ae8a: 6abb ldr r3, [r7, #40] @ 0x28
  25138. 800ae8c: f003 0303 and.w r3, r3, #3
  25139. 800ae90: 2b02 cmp r3, #2
  25140. 800ae92: d10c bne.n 800aeae <HAL_RCC_OscConfig+0x62>
  25141. {
  25142. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != 0U) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF))
  25143. 800ae94: 4b8f ldr r3, [pc, #572] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25144. 800ae96: 681b ldr r3, [r3, #0]
  25145. 800ae98: f403 3300 and.w r3, r3, #131072 @ 0x20000
  25146. 800ae9c: 2b00 cmp r3, #0
  25147. 800ae9e: d06d beq.n 800af7c <HAL_RCC_OscConfig+0x130>
  25148. 800aea0: 687b ldr r3, [r7, #4]
  25149. 800aea2: 685b ldr r3, [r3, #4]
  25150. 800aea4: 2b00 cmp r3, #0
  25151. 800aea6: d169 bne.n 800af7c <HAL_RCC_OscConfig+0x130>
  25152. {
  25153. return HAL_ERROR;
  25154. 800aea8: 2301 movs r3, #1
  25155. 800aeaa: f000 bc21 b.w 800b6f0 <HAL_RCC_OscConfig+0x8a4>
  25156. }
  25157. }
  25158. else
  25159. {
  25160. /* Set the new HSE configuration ---------------------------------------*/
  25161. __HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState);
  25162. 800aeae: 687b ldr r3, [r7, #4]
  25163. 800aeb0: 685b ldr r3, [r3, #4]
  25164. 800aeb2: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  25165. 800aeb6: d106 bne.n 800aec6 <HAL_RCC_OscConfig+0x7a>
  25166. 800aeb8: 4b86 ldr r3, [pc, #536] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25167. 800aeba: 681b ldr r3, [r3, #0]
  25168. 800aebc: 4a85 ldr r2, [pc, #532] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25169. 800aebe: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  25170. 800aec2: 6013 str r3, [r2, #0]
  25171. 800aec4: e02e b.n 800af24 <HAL_RCC_OscConfig+0xd8>
  25172. 800aec6: 687b ldr r3, [r7, #4]
  25173. 800aec8: 685b ldr r3, [r3, #4]
  25174. 800aeca: 2b00 cmp r3, #0
  25175. 800aecc: d10c bne.n 800aee8 <HAL_RCC_OscConfig+0x9c>
  25176. 800aece: 4b81 ldr r3, [pc, #516] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25177. 800aed0: 681b ldr r3, [r3, #0]
  25178. 800aed2: 4a80 ldr r2, [pc, #512] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25179. 800aed4: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  25180. 800aed8: 6013 str r3, [r2, #0]
  25181. 800aeda: 4b7e ldr r3, [pc, #504] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25182. 800aedc: 681b ldr r3, [r3, #0]
  25183. 800aede: 4a7d ldr r2, [pc, #500] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25184. 800aee0: f423 2380 bic.w r3, r3, #262144 @ 0x40000
  25185. 800aee4: 6013 str r3, [r2, #0]
  25186. 800aee6: e01d b.n 800af24 <HAL_RCC_OscConfig+0xd8>
  25187. 800aee8: 687b ldr r3, [r7, #4]
  25188. 800aeea: 685b ldr r3, [r3, #4]
  25189. 800aeec: f5b3 2fa0 cmp.w r3, #327680 @ 0x50000
  25190. 800aef0: d10c bne.n 800af0c <HAL_RCC_OscConfig+0xc0>
  25191. 800aef2: 4b78 ldr r3, [pc, #480] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25192. 800aef4: 681b ldr r3, [r3, #0]
  25193. 800aef6: 4a77 ldr r2, [pc, #476] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25194. 800aef8: f443 2380 orr.w r3, r3, #262144 @ 0x40000
  25195. 800aefc: 6013 str r3, [r2, #0]
  25196. 800aefe: 4b75 ldr r3, [pc, #468] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25197. 800af00: 681b ldr r3, [r3, #0]
  25198. 800af02: 4a74 ldr r2, [pc, #464] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25199. 800af04: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  25200. 800af08: 6013 str r3, [r2, #0]
  25201. 800af0a: e00b b.n 800af24 <HAL_RCC_OscConfig+0xd8>
  25202. 800af0c: 4b71 ldr r3, [pc, #452] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25203. 800af0e: 681b ldr r3, [r3, #0]
  25204. 800af10: 4a70 ldr r2, [pc, #448] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25205. 800af12: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  25206. 800af16: 6013 str r3, [r2, #0]
  25207. 800af18: 4b6e ldr r3, [pc, #440] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25208. 800af1a: 681b ldr r3, [r3, #0]
  25209. 800af1c: 4a6d ldr r2, [pc, #436] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25210. 800af1e: f423 2380 bic.w r3, r3, #262144 @ 0x40000
  25211. 800af22: 6013 str r3, [r2, #0]
  25212. /* Check the HSE State */
  25213. if (RCC_OscInitStruct->HSEState != RCC_HSE_OFF)
  25214. 800af24: 687b ldr r3, [r7, #4]
  25215. 800af26: 685b ldr r3, [r3, #4]
  25216. 800af28: 2b00 cmp r3, #0
  25217. 800af2a: d013 beq.n 800af54 <HAL_RCC_OscConfig+0x108>
  25218. {
  25219. /* Get Start Tick*/
  25220. tickstart = HAL_GetTick();
  25221. 800af2c: f7fa fa56 bl 80053dc <HAL_GetTick>
  25222. 800af30: 6278 str r0, [r7, #36] @ 0x24
  25223. /* Wait till HSE is ready */
  25224. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == 0U)
  25225. 800af32: e008 b.n 800af46 <HAL_RCC_OscConfig+0xfa>
  25226. {
  25227. if ((uint32_t)(HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE)
  25228. 800af34: f7fa fa52 bl 80053dc <HAL_GetTick>
  25229. 800af38: 4602 mov r2, r0
  25230. 800af3a: 6a7b ldr r3, [r7, #36] @ 0x24
  25231. 800af3c: 1ad3 subs r3, r2, r3
  25232. 800af3e: 2b64 cmp r3, #100 @ 0x64
  25233. 800af40: d901 bls.n 800af46 <HAL_RCC_OscConfig+0xfa>
  25234. {
  25235. return HAL_TIMEOUT;
  25236. 800af42: 2303 movs r3, #3
  25237. 800af44: e3d4 b.n 800b6f0 <HAL_RCC_OscConfig+0x8a4>
  25238. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == 0U)
  25239. 800af46: 4b63 ldr r3, [pc, #396] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25240. 800af48: 681b ldr r3, [r3, #0]
  25241. 800af4a: f403 3300 and.w r3, r3, #131072 @ 0x20000
  25242. 800af4e: 2b00 cmp r3, #0
  25243. 800af50: d0f0 beq.n 800af34 <HAL_RCC_OscConfig+0xe8>
  25244. 800af52: e014 b.n 800af7e <HAL_RCC_OscConfig+0x132>
  25245. }
  25246. }
  25247. else
  25248. {
  25249. /* Get Start Tick*/
  25250. tickstart = HAL_GetTick();
  25251. 800af54: f7fa fa42 bl 80053dc <HAL_GetTick>
  25252. 800af58: 6278 str r0, [r7, #36] @ 0x24
  25253. /* Wait till HSE is disabled */
  25254. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != 0U)
  25255. 800af5a: e008 b.n 800af6e <HAL_RCC_OscConfig+0x122>
  25256. {
  25257. if ((uint32_t)(HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE)
  25258. 800af5c: f7fa fa3e bl 80053dc <HAL_GetTick>
  25259. 800af60: 4602 mov r2, r0
  25260. 800af62: 6a7b ldr r3, [r7, #36] @ 0x24
  25261. 800af64: 1ad3 subs r3, r2, r3
  25262. 800af66: 2b64 cmp r3, #100 @ 0x64
  25263. 800af68: d901 bls.n 800af6e <HAL_RCC_OscConfig+0x122>
  25264. {
  25265. return HAL_TIMEOUT;
  25266. 800af6a: 2303 movs r3, #3
  25267. 800af6c: e3c0 b.n 800b6f0 <HAL_RCC_OscConfig+0x8a4>
  25268. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != 0U)
  25269. 800af6e: 4b59 ldr r3, [pc, #356] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25270. 800af70: 681b ldr r3, [r3, #0]
  25271. 800af72: f403 3300 and.w r3, r3, #131072 @ 0x20000
  25272. 800af76: 2b00 cmp r3, #0
  25273. 800af78: d1f0 bne.n 800af5c <HAL_RCC_OscConfig+0x110>
  25274. 800af7a: e000 b.n 800af7e <HAL_RCC_OscConfig+0x132>
  25275. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != 0U) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF))
  25276. 800af7c: bf00 nop
  25277. }
  25278. }
  25279. }
  25280. }
  25281. /*----------------------------- HSI Configuration --------------------------*/
  25282. if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI)
  25283. 800af7e: 687b ldr r3, [r7, #4]
  25284. 800af80: 681b ldr r3, [r3, #0]
  25285. 800af82: f003 0302 and.w r3, r3, #2
  25286. 800af86: 2b00 cmp r3, #0
  25287. 800af88: f000 80ca beq.w 800b120 <HAL_RCC_OscConfig+0x2d4>
  25288. /* Check the parameters */
  25289. assert_param(IS_RCC_HSI(RCC_OscInitStruct->HSIState));
  25290. assert_param(IS_RCC_HSICALIBRATION_VALUE(RCC_OscInitStruct->HSICalibrationValue));
  25291. /* When the HSI is used as system clock it will not be disabled */
  25292. const uint32_t temp_sysclksrc = __HAL_RCC_GET_SYSCLK_SOURCE();
  25293. 800af8c: 4b51 ldr r3, [pc, #324] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25294. 800af8e: 691b ldr r3, [r3, #16]
  25295. 800af90: f003 0338 and.w r3, r3, #56 @ 0x38
  25296. 800af94: 623b str r3, [r7, #32]
  25297. const uint32_t temp_pllckselr = RCC->PLLCKSELR;
  25298. 800af96: 4b4f ldr r3, [pc, #316] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25299. 800af98: 6a9b ldr r3, [r3, #40] @ 0x28
  25300. 800af9a: 61fb str r3, [r7, #28]
  25301. if ((temp_sysclksrc == RCC_CFGR_SWS_HSI) || ((temp_sysclksrc == RCC_CFGR_SWS_PLL1) && ((temp_pllckselr & RCC_PLLCKSELR_PLLSRC) == RCC_PLLCKSELR_PLLSRC_HSI)))
  25302. 800af9c: 6a3b ldr r3, [r7, #32]
  25303. 800af9e: 2b00 cmp r3, #0
  25304. 800afa0: d007 beq.n 800afb2 <HAL_RCC_OscConfig+0x166>
  25305. 800afa2: 6a3b ldr r3, [r7, #32]
  25306. 800afa4: 2b18 cmp r3, #24
  25307. 800afa6: d156 bne.n 800b056 <HAL_RCC_OscConfig+0x20a>
  25308. 800afa8: 69fb ldr r3, [r7, #28]
  25309. 800afaa: f003 0303 and.w r3, r3, #3
  25310. 800afae: 2b00 cmp r3, #0
  25311. 800afb0: d151 bne.n 800b056 <HAL_RCC_OscConfig+0x20a>
  25312. {
  25313. /* When HSI is used as system clock it will not be disabled */
  25314. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != 0U) && (RCC_OscInitStruct->HSIState == RCC_HSI_OFF))
  25315. 800afb2: 4b48 ldr r3, [pc, #288] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25316. 800afb4: 681b ldr r3, [r3, #0]
  25317. 800afb6: f003 0304 and.w r3, r3, #4
  25318. 800afba: 2b00 cmp r3, #0
  25319. 800afbc: d005 beq.n 800afca <HAL_RCC_OscConfig+0x17e>
  25320. 800afbe: 687b ldr r3, [r7, #4]
  25321. 800afc0: 68db ldr r3, [r3, #12]
  25322. 800afc2: 2b00 cmp r3, #0
  25323. 800afc4: d101 bne.n 800afca <HAL_RCC_OscConfig+0x17e>
  25324. {
  25325. return HAL_ERROR;
  25326. 800afc6: 2301 movs r3, #1
  25327. 800afc8: e392 b.n 800b6f0 <HAL_RCC_OscConfig+0x8a4>
  25328. }
  25329. /* Otherwise, only HSI division and calibration are allowed */
  25330. else
  25331. {
  25332. /* Enable the Internal High Speed oscillator (HSI, HSIDIV2, HSIDIV4, or HSIDIV8) */
  25333. __HAL_RCC_HSI_CONFIG(RCC_OscInitStruct->HSIState);
  25334. 800afca: 4b42 ldr r3, [pc, #264] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25335. 800afcc: 681b ldr r3, [r3, #0]
  25336. 800afce: f023 0219 bic.w r2, r3, #25
  25337. 800afd2: 687b ldr r3, [r7, #4]
  25338. 800afd4: 68db ldr r3, [r3, #12]
  25339. 800afd6: 493f ldr r1, [pc, #252] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25340. 800afd8: 4313 orrs r3, r2
  25341. 800afda: 600b str r3, [r1, #0]
  25342. /* Get Start Tick*/
  25343. tickstart = HAL_GetTick();
  25344. 800afdc: f7fa f9fe bl 80053dc <HAL_GetTick>
  25345. 800afe0: 6278 str r0, [r7, #36] @ 0x24
  25346. /* Wait till HSI is ready */
  25347. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == 0U)
  25348. 800afe2: e008 b.n 800aff6 <HAL_RCC_OscConfig+0x1aa>
  25349. {
  25350. if ((uint32_t)(HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE)
  25351. 800afe4: f7fa f9fa bl 80053dc <HAL_GetTick>
  25352. 800afe8: 4602 mov r2, r0
  25353. 800afea: 6a7b ldr r3, [r7, #36] @ 0x24
  25354. 800afec: 1ad3 subs r3, r2, r3
  25355. 800afee: 2b02 cmp r3, #2
  25356. 800aff0: d901 bls.n 800aff6 <HAL_RCC_OscConfig+0x1aa>
  25357. {
  25358. return HAL_TIMEOUT;
  25359. 800aff2: 2303 movs r3, #3
  25360. 800aff4: e37c b.n 800b6f0 <HAL_RCC_OscConfig+0x8a4>
  25361. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == 0U)
  25362. 800aff6: 4b37 ldr r3, [pc, #220] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25363. 800aff8: 681b ldr r3, [r3, #0]
  25364. 800affa: f003 0304 and.w r3, r3, #4
  25365. 800affe: 2b00 cmp r3, #0
  25366. 800b000: d0f0 beq.n 800afe4 <HAL_RCC_OscConfig+0x198>
  25367. }
  25368. }
  25369. /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/
  25370. __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue);
  25371. 800b002: f7fa f9f7 bl 80053f4 <HAL_GetREVID>
  25372. 800b006: 4603 mov r3, r0
  25373. 800b008: f241 0203 movw r2, #4099 @ 0x1003
  25374. 800b00c: 4293 cmp r3, r2
  25375. 800b00e: d817 bhi.n 800b040 <HAL_RCC_OscConfig+0x1f4>
  25376. 800b010: 687b ldr r3, [r7, #4]
  25377. 800b012: 691b ldr r3, [r3, #16]
  25378. 800b014: 2b40 cmp r3, #64 @ 0x40
  25379. 800b016: d108 bne.n 800b02a <HAL_RCC_OscConfig+0x1de>
  25380. 800b018: 4b2e ldr r3, [pc, #184] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25381. 800b01a: 685b ldr r3, [r3, #4]
  25382. 800b01c: f423 337c bic.w r3, r3, #258048 @ 0x3f000
  25383. 800b020: 4a2c ldr r2, [pc, #176] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25384. 800b022: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  25385. 800b026: 6053 str r3, [r2, #4]
  25386. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != 0U) && (RCC_OscInitStruct->HSIState == RCC_HSI_OFF))
  25387. 800b028: e07a b.n 800b120 <HAL_RCC_OscConfig+0x2d4>
  25388. __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue);
  25389. 800b02a: 4b2a ldr r3, [pc, #168] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25390. 800b02c: 685b ldr r3, [r3, #4]
  25391. 800b02e: f423 327c bic.w r2, r3, #258048 @ 0x3f000
  25392. 800b032: 687b ldr r3, [r7, #4]
  25393. 800b034: 691b ldr r3, [r3, #16]
  25394. 800b036: 031b lsls r3, r3, #12
  25395. 800b038: 4926 ldr r1, [pc, #152] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25396. 800b03a: 4313 orrs r3, r2
  25397. 800b03c: 604b str r3, [r1, #4]
  25398. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != 0U) && (RCC_OscInitStruct->HSIState == RCC_HSI_OFF))
  25399. 800b03e: e06f b.n 800b120 <HAL_RCC_OscConfig+0x2d4>
  25400. __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue);
  25401. 800b040: 4b24 ldr r3, [pc, #144] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25402. 800b042: 685b ldr r3, [r3, #4]
  25403. 800b044: f023 42fe bic.w r2, r3, #2130706432 @ 0x7f000000
  25404. 800b048: 687b ldr r3, [r7, #4]
  25405. 800b04a: 691b ldr r3, [r3, #16]
  25406. 800b04c: 061b lsls r3, r3, #24
  25407. 800b04e: 4921 ldr r1, [pc, #132] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25408. 800b050: 4313 orrs r3, r2
  25409. 800b052: 604b str r3, [r1, #4]
  25410. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != 0U) && (RCC_OscInitStruct->HSIState == RCC_HSI_OFF))
  25411. 800b054: e064 b.n 800b120 <HAL_RCC_OscConfig+0x2d4>
  25412. }
  25413. else
  25414. {
  25415. /* Check the HSI State */
  25416. if ((RCC_OscInitStruct->HSIState) != RCC_HSI_OFF)
  25417. 800b056: 687b ldr r3, [r7, #4]
  25418. 800b058: 68db ldr r3, [r3, #12]
  25419. 800b05a: 2b00 cmp r3, #0
  25420. 800b05c: d047 beq.n 800b0ee <HAL_RCC_OscConfig+0x2a2>
  25421. {
  25422. /* Enable the Internal High Speed oscillator (HSI, HSIDIV2,HSIDIV4, or HSIDIV8) */
  25423. __HAL_RCC_HSI_CONFIG(RCC_OscInitStruct->HSIState);
  25424. 800b05e: 4b1d ldr r3, [pc, #116] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25425. 800b060: 681b ldr r3, [r3, #0]
  25426. 800b062: f023 0219 bic.w r2, r3, #25
  25427. 800b066: 687b ldr r3, [r7, #4]
  25428. 800b068: 68db ldr r3, [r3, #12]
  25429. 800b06a: 491a ldr r1, [pc, #104] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25430. 800b06c: 4313 orrs r3, r2
  25431. 800b06e: 600b str r3, [r1, #0]
  25432. /* Get Start Tick*/
  25433. tickstart = HAL_GetTick();
  25434. 800b070: f7fa f9b4 bl 80053dc <HAL_GetTick>
  25435. 800b074: 6278 str r0, [r7, #36] @ 0x24
  25436. /* Wait till HSI is ready */
  25437. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == 0U)
  25438. 800b076: e008 b.n 800b08a <HAL_RCC_OscConfig+0x23e>
  25439. {
  25440. if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE)
  25441. 800b078: f7fa f9b0 bl 80053dc <HAL_GetTick>
  25442. 800b07c: 4602 mov r2, r0
  25443. 800b07e: 6a7b ldr r3, [r7, #36] @ 0x24
  25444. 800b080: 1ad3 subs r3, r2, r3
  25445. 800b082: 2b02 cmp r3, #2
  25446. 800b084: d901 bls.n 800b08a <HAL_RCC_OscConfig+0x23e>
  25447. {
  25448. return HAL_TIMEOUT;
  25449. 800b086: 2303 movs r3, #3
  25450. 800b088: e332 b.n 800b6f0 <HAL_RCC_OscConfig+0x8a4>
  25451. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == 0U)
  25452. 800b08a: 4b12 ldr r3, [pc, #72] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25453. 800b08c: 681b ldr r3, [r3, #0]
  25454. 800b08e: f003 0304 and.w r3, r3, #4
  25455. 800b092: 2b00 cmp r3, #0
  25456. 800b094: d0f0 beq.n 800b078 <HAL_RCC_OscConfig+0x22c>
  25457. }
  25458. }
  25459. /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/
  25460. __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue);
  25461. 800b096: f7fa f9ad bl 80053f4 <HAL_GetREVID>
  25462. 800b09a: 4603 mov r3, r0
  25463. 800b09c: f241 0203 movw r2, #4099 @ 0x1003
  25464. 800b0a0: 4293 cmp r3, r2
  25465. 800b0a2: d819 bhi.n 800b0d8 <HAL_RCC_OscConfig+0x28c>
  25466. 800b0a4: 687b ldr r3, [r7, #4]
  25467. 800b0a6: 691b ldr r3, [r3, #16]
  25468. 800b0a8: 2b40 cmp r3, #64 @ 0x40
  25469. 800b0aa: d108 bne.n 800b0be <HAL_RCC_OscConfig+0x272>
  25470. 800b0ac: 4b09 ldr r3, [pc, #36] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25471. 800b0ae: 685b ldr r3, [r3, #4]
  25472. 800b0b0: f423 337c bic.w r3, r3, #258048 @ 0x3f000
  25473. 800b0b4: 4a07 ldr r2, [pc, #28] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25474. 800b0b6: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  25475. 800b0ba: 6053 str r3, [r2, #4]
  25476. 800b0bc: e030 b.n 800b120 <HAL_RCC_OscConfig+0x2d4>
  25477. 800b0be: 4b05 ldr r3, [pc, #20] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25478. 800b0c0: 685b ldr r3, [r3, #4]
  25479. 800b0c2: f423 327c bic.w r2, r3, #258048 @ 0x3f000
  25480. 800b0c6: 687b ldr r3, [r7, #4]
  25481. 800b0c8: 691b ldr r3, [r3, #16]
  25482. 800b0ca: 031b lsls r3, r3, #12
  25483. 800b0cc: 4901 ldr r1, [pc, #4] @ (800b0d4 <HAL_RCC_OscConfig+0x288>)
  25484. 800b0ce: 4313 orrs r3, r2
  25485. 800b0d0: 604b str r3, [r1, #4]
  25486. 800b0d2: e025 b.n 800b120 <HAL_RCC_OscConfig+0x2d4>
  25487. 800b0d4: 58024400 .word 0x58024400
  25488. 800b0d8: 4b9a ldr r3, [pc, #616] @ (800b344 <HAL_RCC_OscConfig+0x4f8>)
  25489. 800b0da: 685b ldr r3, [r3, #4]
  25490. 800b0dc: f023 42fe bic.w r2, r3, #2130706432 @ 0x7f000000
  25491. 800b0e0: 687b ldr r3, [r7, #4]
  25492. 800b0e2: 691b ldr r3, [r3, #16]
  25493. 800b0e4: 061b lsls r3, r3, #24
  25494. 800b0e6: 4997 ldr r1, [pc, #604] @ (800b344 <HAL_RCC_OscConfig+0x4f8>)
  25495. 800b0e8: 4313 orrs r3, r2
  25496. 800b0ea: 604b str r3, [r1, #4]
  25497. 800b0ec: e018 b.n 800b120 <HAL_RCC_OscConfig+0x2d4>
  25498. }
  25499. else
  25500. {
  25501. /* Disable the Internal High Speed oscillator (HSI). */
  25502. __HAL_RCC_HSI_DISABLE();
  25503. 800b0ee: 4b95 ldr r3, [pc, #596] @ (800b344 <HAL_RCC_OscConfig+0x4f8>)
  25504. 800b0f0: 681b ldr r3, [r3, #0]
  25505. 800b0f2: 4a94 ldr r2, [pc, #592] @ (800b344 <HAL_RCC_OscConfig+0x4f8>)
  25506. 800b0f4: f023 0301 bic.w r3, r3, #1
  25507. 800b0f8: 6013 str r3, [r2, #0]
  25508. /* Get Start Tick*/
  25509. tickstart = HAL_GetTick();
  25510. 800b0fa: f7fa f96f bl 80053dc <HAL_GetTick>
  25511. 800b0fe: 6278 str r0, [r7, #36] @ 0x24
  25512. /* Wait till HSI is disabled */
  25513. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != 0U)
  25514. 800b100: e008 b.n 800b114 <HAL_RCC_OscConfig+0x2c8>
  25515. {
  25516. if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE)
  25517. 800b102: f7fa f96b bl 80053dc <HAL_GetTick>
  25518. 800b106: 4602 mov r2, r0
  25519. 800b108: 6a7b ldr r3, [r7, #36] @ 0x24
  25520. 800b10a: 1ad3 subs r3, r2, r3
  25521. 800b10c: 2b02 cmp r3, #2
  25522. 800b10e: d901 bls.n 800b114 <HAL_RCC_OscConfig+0x2c8>
  25523. {
  25524. return HAL_TIMEOUT;
  25525. 800b110: 2303 movs r3, #3
  25526. 800b112: e2ed b.n 800b6f0 <HAL_RCC_OscConfig+0x8a4>
  25527. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != 0U)
  25528. 800b114: 4b8b ldr r3, [pc, #556] @ (800b344 <HAL_RCC_OscConfig+0x4f8>)
  25529. 800b116: 681b ldr r3, [r3, #0]
  25530. 800b118: f003 0304 and.w r3, r3, #4
  25531. 800b11c: 2b00 cmp r3, #0
  25532. 800b11e: d1f0 bne.n 800b102 <HAL_RCC_OscConfig+0x2b6>
  25533. }
  25534. }
  25535. }
  25536. }
  25537. /*----------------------------- CSI Configuration --------------------------*/
  25538. if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_CSI) == RCC_OSCILLATORTYPE_CSI)
  25539. 800b120: 687b ldr r3, [r7, #4]
  25540. 800b122: 681b ldr r3, [r3, #0]
  25541. 800b124: f003 0310 and.w r3, r3, #16
  25542. 800b128: 2b00 cmp r3, #0
  25543. 800b12a: f000 80a9 beq.w 800b280 <HAL_RCC_OscConfig+0x434>
  25544. /* Check the parameters */
  25545. assert_param(IS_RCC_CSI(RCC_OscInitStruct->CSIState));
  25546. assert_param(IS_RCC_CSICALIBRATION_VALUE(RCC_OscInitStruct->CSICalibrationValue));
  25547. /* When the CSI is used as system clock it will not disabled */
  25548. const uint32_t temp_sysclksrc = __HAL_RCC_GET_SYSCLK_SOURCE();
  25549. 800b12e: 4b85 ldr r3, [pc, #532] @ (800b344 <HAL_RCC_OscConfig+0x4f8>)
  25550. 800b130: 691b ldr r3, [r3, #16]
  25551. 800b132: f003 0338 and.w r3, r3, #56 @ 0x38
  25552. 800b136: 61bb str r3, [r7, #24]
  25553. const uint32_t temp_pllckselr = RCC->PLLCKSELR;
  25554. 800b138: 4b82 ldr r3, [pc, #520] @ (800b344 <HAL_RCC_OscConfig+0x4f8>)
  25555. 800b13a: 6a9b ldr r3, [r3, #40] @ 0x28
  25556. 800b13c: 617b str r3, [r7, #20]
  25557. if ((temp_sysclksrc == RCC_CFGR_SWS_CSI) || ((temp_sysclksrc == RCC_CFGR_SWS_PLL1) && ((temp_pllckselr & RCC_PLLCKSELR_PLLSRC) == RCC_PLLCKSELR_PLLSRC_CSI)))
  25558. 800b13e: 69bb ldr r3, [r7, #24]
  25559. 800b140: 2b08 cmp r3, #8
  25560. 800b142: d007 beq.n 800b154 <HAL_RCC_OscConfig+0x308>
  25561. 800b144: 69bb ldr r3, [r7, #24]
  25562. 800b146: 2b18 cmp r3, #24
  25563. 800b148: d13a bne.n 800b1c0 <HAL_RCC_OscConfig+0x374>
  25564. 800b14a: 697b ldr r3, [r7, #20]
  25565. 800b14c: f003 0303 and.w r3, r3, #3
  25566. 800b150: 2b01 cmp r3, #1
  25567. 800b152: d135 bne.n 800b1c0 <HAL_RCC_OscConfig+0x374>
  25568. {
  25569. /* When CSI is used as system clock it will not disabled */
  25570. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) != 0U) && (RCC_OscInitStruct->CSIState != RCC_CSI_ON))
  25571. 800b154: 4b7b ldr r3, [pc, #492] @ (800b344 <HAL_RCC_OscConfig+0x4f8>)
  25572. 800b156: 681b ldr r3, [r3, #0]
  25573. 800b158: f403 7380 and.w r3, r3, #256 @ 0x100
  25574. 800b15c: 2b00 cmp r3, #0
  25575. 800b15e: d005 beq.n 800b16c <HAL_RCC_OscConfig+0x320>
  25576. 800b160: 687b ldr r3, [r7, #4]
  25577. 800b162: 69db ldr r3, [r3, #28]
  25578. 800b164: 2b80 cmp r3, #128 @ 0x80
  25579. 800b166: d001 beq.n 800b16c <HAL_RCC_OscConfig+0x320>
  25580. {
  25581. return HAL_ERROR;
  25582. 800b168: 2301 movs r3, #1
  25583. 800b16a: e2c1 b.n 800b6f0 <HAL_RCC_OscConfig+0x8a4>
  25584. }
  25585. /* Otherwise, just the calibration is allowed */
  25586. else
  25587. {
  25588. /* Adjusts the Internal High Speed oscillator (CSI) calibration value.*/
  25589. __HAL_RCC_CSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->CSICalibrationValue);
  25590. 800b16c: f7fa f942 bl 80053f4 <HAL_GetREVID>
  25591. 800b170: 4603 mov r3, r0
  25592. 800b172: f241 0203 movw r2, #4099 @ 0x1003
  25593. 800b176: 4293 cmp r3, r2
  25594. 800b178: d817 bhi.n 800b1aa <HAL_RCC_OscConfig+0x35e>
  25595. 800b17a: 687b ldr r3, [r7, #4]
  25596. 800b17c: 6a1b ldr r3, [r3, #32]
  25597. 800b17e: 2b20 cmp r3, #32
  25598. 800b180: d108 bne.n 800b194 <HAL_RCC_OscConfig+0x348>
  25599. 800b182: 4b70 ldr r3, [pc, #448] @ (800b344 <HAL_RCC_OscConfig+0x4f8>)
  25600. 800b184: 685b ldr r3, [r3, #4]
  25601. 800b186: f023 43f8 bic.w r3, r3, #2080374784 @ 0x7c000000
  25602. 800b18a: 4a6e ldr r2, [pc, #440] @ (800b344 <HAL_RCC_OscConfig+0x4f8>)
  25603. 800b18c: f043 4380 orr.w r3, r3, #1073741824 @ 0x40000000
  25604. 800b190: 6053 str r3, [r2, #4]
  25605. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) != 0U) && (RCC_OscInitStruct->CSIState != RCC_CSI_ON))
  25606. 800b192: e075 b.n 800b280 <HAL_RCC_OscConfig+0x434>
  25607. __HAL_RCC_CSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->CSICalibrationValue);
  25608. 800b194: 4b6b ldr r3, [pc, #428] @ (800b344 <HAL_RCC_OscConfig+0x4f8>)
  25609. 800b196: 685b ldr r3, [r3, #4]
  25610. 800b198: f023 42f8 bic.w r2, r3, #2080374784 @ 0x7c000000
  25611. 800b19c: 687b ldr r3, [r7, #4]
  25612. 800b19e: 6a1b ldr r3, [r3, #32]
  25613. 800b1a0: 069b lsls r3, r3, #26
  25614. 800b1a2: 4968 ldr r1, [pc, #416] @ (800b344 <HAL_RCC_OscConfig+0x4f8>)
  25615. 800b1a4: 4313 orrs r3, r2
  25616. 800b1a6: 604b str r3, [r1, #4]
  25617. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) != 0U) && (RCC_OscInitStruct->CSIState != RCC_CSI_ON))
  25618. 800b1a8: e06a b.n 800b280 <HAL_RCC_OscConfig+0x434>
  25619. __HAL_RCC_CSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->CSICalibrationValue);
  25620. 800b1aa: 4b66 ldr r3, [pc, #408] @ (800b344 <HAL_RCC_OscConfig+0x4f8>)
  25621. 800b1ac: 68db ldr r3, [r3, #12]
  25622. 800b1ae: f023 527c bic.w r2, r3, #1056964608 @ 0x3f000000
  25623. 800b1b2: 687b ldr r3, [r7, #4]
  25624. 800b1b4: 6a1b ldr r3, [r3, #32]
  25625. 800b1b6: 061b lsls r3, r3, #24
  25626. 800b1b8: 4962 ldr r1, [pc, #392] @ (800b344 <HAL_RCC_OscConfig+0x4f8>)
  25627. 800b1ba: 4313 orrs r3, r2
  25628. 800b1bc: 60cb str r3, [r1, #12]
  25629. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) != 0U) && (RCC_OscInitStruct->CSIState != RCC_CSI_ON))
  25630. 800b1be: e05f b.n 800b280 <HAL_RCC_OscConfig+0x434>
  25631. }
  25632. }
  25633. else
  25634. {
  25635. /* Check the CSI State */
  25636. if ((RCC_OscInitStruct->CSIState) != RCC_CSI_OFF)
  25637. 800b1c0: 687b ldr r3, [r7, #4]
  25638. 800b1c2: 69db ldr r3, [r3, #28]
  25639. 800b1c4: 2b00 cmp r3, #0
  25640. 800b1c6: d042 beq.n 800b24e <HAL_RCC_OscConfig+0x402>
  25641. {
  25642. /* Enable the Internal High Speed oscillator (CSI). */
  25643. __HAL_RCC_CSI_ENABLE();
  25644. 800b1c8: 4b5e ldr r3, [pc, #376] @ (800b344 <HAL_RCC_OscConfig+0x4f8>)
  25645. 800b1ca: 681b ldr r3, [r3, #0]
  25646. 800b1cc: 4a5d ldr r2, [pc, #372] @ (800b344 <HAL_RCC_OscConfig+0x4f8>)
  25647. 800b1ce: f043 0380 orr.w r3, r3, #128 @ 0x80
  25648. 800b1d2: 6013 str r3, [r2, #0]
  25649. /* Get Start Tick*/
  25650. tickstart = HAL_GetTick();
  25651. 800b1d4: f7fa f902 bl 80053dc <HAL_GetTick>
  25652. 800b1d8: 6278 str r0, [r7, #36] @ 0x24
  25653. /* Wait till CSI is ready */
  25654. while (__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) == 0U)
  25655. 800b1da: e008 b.n 800b1ee <HAL_RCC_OscConfig+0x3a2>
  25656. {
  25657. if ((HAL_GetTick() - tickstart) > CSI_TIMEOUT_VALUE)
  25658. 800b1dc: f7fa f8fe bl 80053dc <HAL_GetTick>
  25659. 800b1e0: 4602 mov r2, r0
  25660. 800b1e2: 6a7b ldr r3, [r7, #36] @ 0x24
  25661. 800b1e4: 1ad3 subs r3, r2, r3
  25662. 800b1e6: 2b02 cmp r3, #2
  25663. 800b1e8: d901 bls.n 800b1ee <HAL_RCC_OscConfig+0x3a2>
  25664. {
  25665. return HAL_TIMEOUT;
  25666. 800b1ea: 2303 movs r3, #3
  25667. 800b1ec: e280 b.n 800b6f0 <HAL_RCC_OscConfig+0x8a4>
  25668. while (__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) == 0U)
  25669. 800b1ee: 4b55 ldr r3, [pc, #340] @ (800b344 <HAL_RCC_OscConfig+0x4f8>)
  25670. 800b1f0: 681b ldr r3, [r3, #0]
  25671. 800b1f2: f403 7380 and.w r3, r3, #256 @ 0x100
  25672. 800b1f6: 2b00 cmp r3, #0
  25673. 800b1f8: d0f0 beq.n 800b1dc <HAL_RCC_OscConfig+0x390>
  25674. }
  25675. }
  25676. /* Adjusts the Internal High Speed oscillator (CSI) calibration value.*/
  25677. __HAL_RCC_CSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->CSICalibrationValue);
  25678. 800b1fa: f7fa f8fb bl 80053f4 <HAL_GetREVID>
  25679. 800b1fe: 4603 mov r3, r0
  25680. 800b200: f241 0203 movw r2, #4099 @ 0x1003
  25681. 800b204: 4293 cmp r3, r2
  25682. 800b206: d817 bhi.n 800b238 <HAL_RCC_OscConfig+0x3ec>
  25683. 800b208: 687b ldr r3, [r7, #4]
  25684. 800b20a: 6a1b ldr r3, [r3, #32]
  25685. 800b20c: 2b20 cmp r3, #32
  25686. 800b20e: d108 bne.n 800b222 <HAL_RCC_OscConfig+0x3d6>
  25687. 800b210: 4b4c ldr r3, [pc, #304] @ (800b344 <HAL_RCC_OscConfig+0x4f8>)
  25688. 800b212: 685b ldr r3, [r3, #4]
  25689. 800b214: f023 43f8 bic.w r3, r3, #2080374784 @ 0x7c000000
  25690. 800b218: 4a4a ldr r2, [pc, #296] @ (800b344 <HAL_RCC_OscConfig+0x4f8>)
  25691. 800b21a: f043 4380 orr.w r3, r3, #1073741824 @ 0x40000000
  25692. 800b21e: 6053 str r3, [r2, #4]
  25693. 800b220: e02e b.n 800b280 <HAL_RCC_OscConfig+0x434>
  25694. 800b222: 4b48 ldr r3, [pc, #288] @ (800b344 <HAL_RCC_OscConfig+0x4f8>)
  25695. 800b224: 685b ldr r3, [r3, #4]
  25696. 800b226: f023 42f8 bic.w r2, r3, #2080374784 @ 0x7c000000
  25697. 800b22a: 687b ldr r3, [r7, #4]
  25698. 800b22c: 6a1b ldr r3, [r3, #32]
  25699. 800b22e: 069b lsls r3, r3, #26
  25700. 800b230: 4944 ldr r1, [pc, #272] @ (800b344 <HAL_RCC_OscConfig+0x4f8>)
  25701. 800b232: 4313 orrs r3, r2
  25702. 800b234: 604b str r3, [r1, #4]
  25703. 800b236: e023 b.n 800b280 <HAL_RCC_OscConfig+0x434>
  25704. 800b238: 4b42 ldr r3, [pc, #264] @ (800b344 <HAL_RCC_OscConfig+0x4f8>)
  25705. 800b23a: 68db ldr r3, [r3, #12]
  25706. 800b23c: f023 527c bic.w r2, r3, #1056964608 @ 0x3f000000
  25707. 800b240: 687b ldr r3, [r7, #4]
  25708. 800b242: 6a1b ldr r3, [r3, #32]
  25709. 800b244: 061b lsls r3, r3, #24
  25710. 800b246: 493f ldr r1, [pc, #252] @ (800b344 <HAL_RCC_OscConfig+0x4f8>)
  25711. 800b248: 4313 orrs r3, r2
  25712. 800b24a: 60cb str r3, [r1, #12]
  25713. 800b24c: e018 b.n 800b280 <HAL_RCC_OscConfig+0x434>
  25714. }
  25715. else
  25716. {
  25717. /* Disable the Internal High Speed oscillator (CSI). */
  25718. __HAL_RCC_CSI_DISABLE();
  25719. 800b24e: 4b3d ldr r3, [pc, #244] @ (800b344 <HAL_RCC_OscConfig+0x4f8>)
  25720. 800b250: 681b ldr r3, [r3, #0]
  25721. 800b252: 4a3c ldr r2, [pc, #240] @ (800b344 <HAL_RCC_OscConfig+0x4f8>)
  25722. 800b254: f023 0380 bic.w r3, r3, #128 @ 0x80
  25723. 800b258: 6013 str r3, [r2, #0]
  25724. /* Get Start Tick*/
  25725. tickstart = HAL_GetTick();
  25726. 800b25a: f7fa f8bf bl 80053dc <HAL_GetTick>
  25727. 800b25e: 6278 str r0, [r7, #36] @ 0x24
  25728. /* Wait till CSI is disabled */
  25729. while (__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) != 0U)
  25730. 800b260: e008 b.n 800b274 <HAL_RCC_OscConfig+0x428>
  25731. {
  25732. if ((HAL_GetTick() - tickstart) > CSI_TIMEOUT_VALUE)
  25733. 800b262: f7fa f8bb bl 80053dc <HAL_GetTick>
  25734. 800b266: 4602 mov r2, r0
  25735. 800b268: 6a7b ldr r3, [r7, #36] @ 0x24
  25736. 800b26a: 1ad3 subs r3, r2, r3
  25737. 800b26c: 2b02 cmp r3, #2
  25738. 800b26e: d901 bls.n 800b274 <HAL_RCC_OscConfig+0x428>
  25739. {
  25740. return HAL_TIMEOUT;
  25741. 800b270: 2303 movs r3, #3
  25742. 800b272: e23d b.n 800b6f0 <HAL_RCC_OscConfig+0x8a4>
  25743. while (__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) != 0U)
  25744. 800b274: 4b33 ldr r3, [pc, #204] @ (800b344 <HAL_RCC_OscConfig+0x4f8>)
  25745. 800b276: 681b ldr r3, [r3, #0]
  25746. 800b278: f403 7380 and.w r3, r3, #256 @ 0x100
  25747. 800b27c: 2b00 cmp r3, #0
  25748. 800b27e: d1f0 bne.n 800b262 <HAL_RCC_OscConfig+0x416>
  25749. }
  25750. }
  25751. }
  25752. }
  25753. /*------------------------------ LSI Configuration -------------------------*/
  25754. if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI)
  25755. 800b280: 687b ldr r3, [r7, #4]
  25756. 800b282: 681b ldr r3, [r3, #0]
  25757. 800b284: f003 0308 and.w r3, r3, #8
  25758. 800b288: 2b00 cmp r3, #0
  25759. 800b28a: d036 beq.n 800b2fa <HAL_RCC_OscConfig+0x4ae>
  25760. {
  25761. /* Check the parameters */
  25762. assert_param(IS_RCC_LSI(RCC_OscInitStruct->LSIState));
  25763. /* Check the LSI State */
  25764. if ((RCC_OscInitStruct->LSIState) != RCC_LSI_OFF)
  25765. 800b28c: 687b ldr r3, [r7, #4]
  25766. 800b28e: 695b ldr r3, [r3, #20]
  25767. 800b290: 2b00 cmp r3, #0
  25768. 800b292: d019 beq.n 800b2c8 <HAL_RCC_OscConfig+0x47c>
  25769. {
  25770. /* Enable the Internal Low Speed oscillator (LSI). */
  25771. __HAL_RCC_LSI_ENABLE();
  25772. 800b294: 4b2b ldr r3, [pc, #172] @ (800b344 <HAL_RCC_OscConfig+0x4f8>)
  25773. 800b296: 6f5b ldr r3, [r3, #116] @ 0x74
  25774. 800b298: 4a2a ldr r2, [pc, #168] @ (800b344 <HAL_RCC_OscConfig+0x4f8>)
  25775. 800b29a: f043 0301 orr.w r3, r3, #1
  25776. 800b29e: 6753 str r3, [r2, #116] @ 0x74
  25777. /* Get Start Tick*/
  25778. tickstart = HAL_GetTick();
  25779. 800b2a0: f7fa f89c bl 80053dc <HAL_GetTick>
  25780. 800b2a4: 6278 str r0, [r7, #36] @ 0x24
  25781. /* Wait till LSI is ready */
  25782. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == 0U)
  25783. 800b2a6: e008 b.n 800b2ba <HAL_RCC_OscConfig+0x46e>
  25784. {
  25785. if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE)
  25786. 800b2a8: f7fa f898 bl 80053dc <HAL_GetTick>
  25787. 800b2ac: 4602 mov r2, r0
  25788. 800b2ae: 6a7b ldr r3, [r7, #36] @ 0x24
  25789. 800b2b0: 1ad3 subs r3, r2, r3
  25790. 800b2b2: 2b02 cmp r3, #2
  25791. 800b2b4: d901 bls.n 800b2ba <HAL_RCC_OscConfig+0x46e>
  25792. {
  25793. return HAL_TIMEOUT;
  25794. 800b2b6: 2303 movs r3, #3
  25795. 800b2b8: e21a b.n 800b6f0 <HAL_RCC_OscConfig+0x8a4>
  25796. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == 0U)
  25797. 800b2ba: 4b22 ldr r3, [pc, #136] @ (800b344 <HAL_RCC_OscConfig+0x4f8>)
  25798. 800b2bc: 6f5b ldr r3, [r3, #116] @ 0x74
  25799. 800b2be: f003 0302 and.w r3, r3, #2
  25800. 800b2c2: 2b00 cmp r3, #0
  25801. 800b2c4: d0f0 beq.n 800b2a8 <HAL_RCC_OscConfig+0x45c>
  25802. 800b2c6: e018 b.n 800b2fa <HAL_RCC_OscConfig+0x4ae>
  25803. }
  25804. }
  25805. else
  25806. {
  25807. /* Disable the Internal Low Speed oscillator (LSI). */
  25808. __HAL_RCC_LSI_DISABLE();
  25809. 800b2c8: 4b1e ldr r3, [pc, #120] @ (800b344 <HAL_RCC_OscConfig+0x4f8>)
  25810. 800b2ca: 6f5b ldr r3, [r3, #116] @ 0x74
  25811. 800b2cc: 4a1d ldr r2, [pc, #116] @ (800b344 <HAL_RCC_OscConfig+0x4f8>)
  25812. 800b2ce: f023 0301 bic.w r3, r3, #1
  25813. 800b2d2: 6753 str r3, [r2, #116] @ 0x74
  25814. /* Get Start Tick*/
  25815. tickstart = HAL_GetTick();
  25816. 800b2d4: f7fa f882 bl 80053dc <HAL_GetTick>
  25817. 800b2d8: 6278 str r0, [r7, #36] @ 0x24
  25818. /* Wait till LSI is ready */
  25819. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != 0U)
  25820. 800b2da: e008 b.n 800b2ee <HAL_RCC_OscConfig+0x4a2>
  25821. {
  25822. if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE)
  25823. 800b2dc: f7fa f87e bl 80053dc <HAL_GetTick>
  25824. 800b2e0: 4602 mov r2, r0
  25825. 800b2e2: 6a7b ldr r3, [r7, #36] @ 0x24
  25826. 800b2e4: 1ad3 subs r3, r2, r3
  25827. 800b2e6: 2b02 cmp r3, #2
  25828. 800b2e8: d901 bls.n 800b2ee <HAL_RCC_OscConfig+0x4a2>
  25829. {
  25830. return HAL_TIMEOUT;
  25831. 800b2ea: 2303 movs r3, #3
  25832. 800b2ec: e200 b.n 800b6f0 <HAL_RCC_OscConfig+0x8a4>
  25833. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != 0U)
  25834. 800b2ee: 4b15 ldr r3, [pc, #84] @ (800b344 <HAL_RCC_OscConfig+0x4f8>)
  25835. 800b2f0: 6f5b ldr r3, [r3, #116] @ 0x74
  25836. 800b2f2: f003 0302 and.w r3, r3, #2
  25837. 800b2f6: 2b00 cmp r3, #0
  25838. 800b2f8: d1f0 bne.n 800b2dc <HAL_RCC_OscConfig+0x490>
  25839. }
  25840. }
  25841. }
  25842. /*------------------------------ HSI48 Configuration -------------------------*/
  25843. if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI48) == RCC_OSCILLATORTYPE_HSI48)
  25844. 800b2fa: 687b ldr r3, [r7, #4]
  25845. 800b2fc: 681b ldr r3, [r3, #0]
  25846. 800b2fe: f003 0320 and.w r3, r3, #32
  25847. 800b302: 2b00 cmp r3, #0
  25848. 800b304: d039 beq.n 800b37a <HAL_RCC_OscConfig+0x52e>
  25849. {
  25850. /* Check the parameters */
  25851. assert_param(IS_RCC_HSI48(RCC_OscInitStruct->HSI48State));
  25852. /* Check the HSI48 State */
  25853. if ((RCC_OscInitStruct->HSI48State) != RCC_HSI48_OFF)
  25854. 800b306: 687b ldr r3, [r7, #4]
  25855. 800b308: 699b ldr r3, [r3, #24]
  25856. 800b30a: 2b00 cmp r3, #0
  25857. 800b30c: d01c beq.n 800b348 <HAL_RCC_OscConfig+0x4fc>
  25858. {
  25859. /* Enable the Internal Low Speed oscillator (HSI48). */
  25860. __HAL_RCC_HSI48_ENABLE();
  25861. 800b30e: 4b0d ldr r3, [pc, #52] @ (800b344 <HAL_RCC_OscConfig+0x4f8>)
  25862. 800b310: 681b ldr r3, [r3, #0]
  25863. 800b312: 4a0c ldr r2, [pc, #48] @ (800b344 <HAL_RCC_OscConfig+0x4f8>)
  25864. 800b314: f443 5380 orr.w r3, r3, #4096 @ 0x1000
  25865. 800b318: 6013 str r3, [r2, #0]
  25866. /* Get time-out */
  25867. tickstart = HAL_GetTick();
  25868. 800b31a: f7fa f85f bl 80053dc <HAL_GetTick>
  25869. 800b31e: 6278 str r0, [r7, #36] @ 0x24
  25870. /* Wait till HSI48 is ready */
  25871. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSI48RDY) == 0U)
  25872. 800b320: e008 b.n 800b334 <HAL_RCC_OscConfig+0x4e8>
  25873. {
  25874. if ((HAL_GetTick() - tickstart) > HSI48_TIMEOUT_VALUE)
  25875. 800b322: f7fa f85b bl 80053dc <HAL_GetTick>
  25876. 800b326: 4602 mov r2, r0
  25877. 800b328: 6a7b ldr r3, [r7, #36] @ 0x24
  25878. 800b32a: 1ad3 subs r3, r2, r3
  25879. 800b32c: 2b02 cmp r3, #2
  25880. 800b32e: d901 bls.n 800b334 <HAL_RCC_OscConfig+0x4e8>
  25881. {
  25882. return HAL_TIMEOUT;
  25883. 800b330: 2303 movs r3, #3
  25884. 800b332: e1dd b.n 800b6f0 <HAL_RCC_OscConfig+0x8a4>
  25885. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSI48RDY) == 0U)
  25886. 800b334: 4b03 ldr r3, [pc, #12] @ (800b344 <HAL_RCC_OscConfig+0x4f8>)
  25887. 800b336: 681b ldr r3, [r3, #0]
  25888. 800b338: f403 5300 and.w r3, r3, #8192 @ 0x2000
  25889. 800b33c: 2b00 cmp r3, #0
  25890. 800b33e: d0f0 beq.n 800b322 <HAL_RCC_OscConfig+0x4d6>
  25891. 800b340: e01b b.n 800b37a <HAL_RCC_OscConfig+0x52e>
  25892. 800b342: bf00 nop
  25893. 800b344: 58024400 .word 0x58024400
  25894. }
  25895. }
  25896. else
  25897. {
  25898. /* Disable the Internal Low Speed oscillator (HSI48). */
  25899. __HAL_RCC_HSI48_DISABLE();
  25900. 800b348: 4b9b ldr r3, [pc, #620] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  25901. 800b34a: 681b ldr r3, [r3, #0]
  25902. 800b34c: 4a9a ldr r2, [pc, #616] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  25903. 800b34e: f423 5380 bic.w r3, r3, #4096 @ 0x1000
  25904. 800b352: 6013 str r3, [r2, #0]
  25905. /* Get time-out */
  25906. tickstart = HAL_GetTick();
  25907. 800b354: f7fa f842 bl 80053dc <HAL_GetTick>
  25908. 800b358: 6278 str r0, [r7, #36] @ 0x24
  25909. /* Wait till HSI48 is ready */
  25910. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSI48RDY) != 0U)
  25911. 800b35a: e008 b.n 800b36e <HAL_RCC_OscConfig+0x522>
  25912. {
  25913. if ((HAL_GetTick() - tickstart) > HSI48_TIMEOUT_VALUE)
  25914. 800b35c: f7fa f83e bl 80053dc <HAL_GetTick>
  25915. 800b360: 4602 mov r2, r0
  25916. 800b362: 6a7b ldr r3, [r7, #36] @ 0x24
  25917. 800b364: 1ad3 subs r3, r2, r3
  25918. 800b366: 2b02 cmp r3, #2
  25919. 800b368: d901 bls.n 800b36e <HAL_RCC_OscConfig+0x522>
  25920. {
  25921. return HAL_TIMEOUT;
  25922. 800b36a: 2303 movs r3, #3
  25923. 800b36c: e1c0 b.n 800b6f0 <HAL_RCC_OscConfig+0x8a4>
  25924. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSI48RDY) != 0U)
  25925. 800b36e: 4b92 ldr r3, [pc, #584] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  25926. 800b370: 681b ldr r3, [r3, #0]
  25927. 800b372: f403 5300 and.w r3, r3, #8192 @ 0x2000
  25928. 800b376: 2b00 cmp r3, #0
  25929. 800b378: d1f0 bne.n 800b35c <HAL_RCC_OscConfig+0x510>
  25930. }
  25931. }
  25932. }
  25933. }
  25934. /*------------------------------ LSE Configuration -------------------------*/
  25935. if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE)
  25936. 800b37a: 687b ldr r3, [r7, #4]
  25937. 800b37c: 681b ldr r3, [r3, #0]
  25938. 800b37e: f003 0304 and.w r3, r3, #4
  25939. 800b382: 2b00 cmp r3, #0
  25940. 800b384: f000 8081 beq.w 800b48a <HAL_RCC_OscConfig+0x63e>
  25941. {
  25942. /* Check the parameters */
  25943. assert_param(IS_RCC_LSE(RCC_OscInitStruct->LSEState));
  25944. /* Enable write access to Backup domain */
  25945. PWR->CR1 |= PWR_CR1_DBP;
  25946. 800b388: 4b8c ldr r3, [pc, #560] @ (800b5bc <HAL_RCC_OscConfig+0x770>)
  25947. 800b38a: 681b ldr r3, [r3, #0]
  25948. 800b38c: 4a8b ldr r2, [pc, #556] @ (800b5bc <HAL_RCC_OscConfig+0x770>)
  25949. 800b38e: f443 7380 orr.w r3, r3, #256 @ 0x100
  25950. 800b392: 6013 str r3, [r2, #0]
  25951. /* Wait for Backup domain Write protection disable */
  25952. tickstart = HAL_GetTick();
  25953. 800b394: f7fa f822 bl 80053dc <HAL_GetTick>
  25954. 800b398: 6278 str r0, [r7, #36] @ 0x24
  25955. while ((PWR->CR1 & PWR_CR1_DBP) == 0U)
  25956. 800b39a: e008 b.n 800b3ae <HAL_RCC_OscConfig+0x562>
  25957. {
  25958. if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE)
  25959. 800b39c: f7fa f81e bl 80053dc <HAL_GetTick>
  25960. 800b3a0: 4602 mov r2, r0
  25961. 800b3a2: 6a7b ldr r3, [r7, #36] @ 0x24
  25962. 800b3a4: 1ad3 subs r3, r2, r3
  25963. 800b3a6: 2b64 cmp r3, #100 @ 0x64
  25964. 800b3a8: d901 bls.n 800b3ae <HAL_RCC_OscConfig+0x562>
  25965. {
  25966. return HAL_TIMEOUT;
  25967. 800b3aa: 2303 movs r3, #3
  25968. 800b3ac: e1a0 b.n 800b6f0 <HAL_RCC_OscConfig+0x8a4>
  25969. while ((PWR->CR1 & PWR_CR1_DBP) == 0U)
  25970. 800b3ae: 4b83 ldr r3, [pc, #524] @ (800b5bc <HAL_RCC_OscConfig+0x770>)
  25971. 800b3b0: 681b ldr r3, [r3, #0]
  25972. 800b3b2: f403 7380 and.w r3, r3, #256 @ 0x100
  25973. 800b3b6: 2b00 cmp r3, #0
  25974. 800b3b8: d0f0 beq.n 800b39c <HAL_RCC_OscConfig+0x550>
  25975. }
  25976. }
  25977. /* Set the new LSE configuration -----------------------------------------*/
  25978. __HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState);
  25979. 800b3ba: 687b ldr r3, [r7, #4]
  25980. 800b3bc: 689b ldr r3, [r3, #8]
  25981. 800b3be: 2b01 cmp r3, #1
  25982. 800b3c0: d106 bne.n 800b3d0 <HAL_RCC_OscConfig+0x584>
  25983. 800b3c2: 4b7d ldr r3, [pc, #500] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  25984. 800b3c4: 6f1b ldr r3, [r3, #112] @ 0x70
  25985. 800b3c6: 4a7c ldr r2, [pc, #496] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  25986. 800b3c8: f043 0301 orr.w r3, r3, #1
  25987. 800b3cc: 6713 str r3, [r2, #112] @ 0x70
  25988. 800b3ce: e02d b.n 800b42c <HAL_RCC_OscConfig+0x5e0>
  25989. 800b3d0: 687b ldr r3, [r7, #4]
  25990. 800b3d2: 689b ldr r3, [r3, #8]
  25991. 800b3d4: 2b00 cmp r3, #0
  25992. 800b3d6: d10c bne.n 800b3f2 <HAL_RCC_OscConfig+0x5a6>
  25993. 800b3d8: 4b77 ldr r3, [pc, #476] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  25994. 800b3da: 6f1b ldr r3, [r3, #112] @ 0x70
  25995. 800b3dc: 4a76 ldr r2, [pc, #472] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  25996. 800b3de: f023 0301 bic.w r3, r3, #1
  25997. 800b3e2: 6713 str r3, [r2, #112] @ 0x70
  25998. 800b3e4: 4b74 ldr r3, [pc, #464] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  25999. 800b3e6: 6f1b ldr r3, [r3, #112] @ 0x70
  26000. 800b3e8: 4a73 ldr r2, [pc, #460] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  26001. 800b3ea: f023 0304 bic.w r3, r3, #4
  26002. 800b3ee: 6713 str r3, [r2, #112] @ 0x70
  26003. 800b3f0: e01c b.n 800b42c <HAL_RCC_OscConfig+0x5e0>
  26004. 800b3f2: 687b ldr r3, [r7, #4]
  26005. 800b3f4: 689b ldr r3, [r3, #8]
  26006. 800b3f6: 2b05 cmp r3, #5
  26007. 800b3f8: d10c bne.n 800b414 <HAL_RCC_OscConfig+0x5c8>
  26008. 800b3fa: 4b6f ldr r3, [pc, #444] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  26009. 800b3fc: 6f1b ldr r3, [r3, #112] @ 0x70
  26010. 800b3fe: 4a6e ldr r2, [pc, #440] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  26011. 800b400: f043 0304 orr.w r3, r3, #4
  26012. 800b404: 6713 str r3, [r2, #112] @ 0x70
  26013. 800b406: 4b6c ldr r3, [pc, #432] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  26014. 800b408: 6f1b ldr r3, [r3, #112] @ 0x70
  26015. 800b40a: 4a6b ldr r2, [pc, #428] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  26016. 800b40c: f043 0301 orr.w r3, r3, #1
  26017. 800b410: 6713 str r3, [r2, #112] @ 0x70
  26018. 800b412: e00b b.n 800b42c <HAL_RCC_OscConfig+0x5e0>
  26019. 800b414: 4b68 ldr r3, [pc, #416] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  26020. 800b416: 6f1b ldr r3, [r3, #112] @ 0x70
  26021. 800b418: 4a67 ldr r2, [pc, #412] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  26022. 800b41a: f023 0301 bic.w r3, r3, #1
  26023. 800b41e: 6713 str r3, [r2, #112] @ 0x70
  26024. 800b420: 4b65 ldr r3, [pc, #404] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  26025. 800b422: 6f1b ldr r3, [r3, #112] @ 0x70
  26026. 800b424: 4a64 ldr r2, [pc, #400] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  26027. 800b426: f023 0304 bic.w r3, r3, #4
  26028. 800b42a: 6713 str r3, [r2, #112] @ 0x70
  26029. /* Check the LSE State */
  26030. if ((RCC_OscInitStruct->LSEState) != RCC_LSE_OFF)
  26031. 800b42c: 687b ldr r3, [r7, #4]
  26032. 800b42e: 689b ldr r3, [r3, #8]
  26033. 800b430: 2b00 cmp r3, #0
  26034. 800b432: d015 beq.n 800b460 <HAL_RCC_OscConfig+0x614>
  26035. {
  26036. /* Get Start Tick*/
  26037. tickstart = HAL_GetTick();
  26038. 800b434: f7f9 ffd2 bl 80053dc <HAL_GetTick>
  26039. 800b438: 6278 str r0, [r7, #36] @ 0x24
  26040. /* Wait till LSE is ready */
  26041. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == 0U)
  26042. 800b43a: e00a b.n 800b452 <HAL_RCC_OscConfig+0x606>
  26043. {
  26044. if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
  26045. 800b43c: f7f9 ffce bl 80053dc <HAL_GetTick>
  26046. 800b440: 4602 mov r2, r0
  26047. 800b442: 6a7b ldr r3, [r7, #36] @ 0x24
  26048. 800b444: 1ad3 subs r3, r2, r3
  26049. 800b446: f241 3288 movw r2, #5000 @ 0x1388
  26050. 800b44a: 4293 cmp r3, r2
  26051. 800b44c: d901 bls.n 800b452 <HAL_RCC_OscConfig+0x606>
  26052. {
  26053. return HAL_TIMEOUT;
  26054. 800b44e: 2303 movs r3, #3
  26055. 800b450: e14e b.n 800b6f0 <HAL_RCC_OscConfig+0x8a4>
  26056. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == 0U)
  26057. 800b452: 4b59 ldr r3, [pc, #356] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  26058. 800b454: 6f1b ldr r3, [r3, #112] @ 0x70
  26059. 800b456: f003 0302 and.w r3, r3, #2
  26060. 800b45a: 2b00 cmp r3, #0
  26061. 800b45c: d0ee beq.n 800b43c <HAL_RCC_OscConfig+0x5f0>
  26062. 800b45e: e014 b.n 800b48a <HAL_RCC_OscConfig+0x63e>
  26063. }
  26064. }
  26065. else
  26066. {
  26067. /* Get Start Tick*/
  26068. tickstart = HAL_GetTick();
  26069. 800b460: f7f9 ffbc bl 80053dc <HAL_GetTick>
  26070. 800b464: 6278 str r0, [r7, #36] @ 0x24
  26071. /* Wait till LSE is disabled */
  26072. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != 0U)
  26073. 800b466: e00a b.n 800b47e <HAL_RCC_OscConfig+0x632>
  26074. {
  26075. if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
  26076. 800b468: f7f9 ffb8 bl 80053dc <HAL_GetTick>
  26077. 800b46c: 4602 mov r2, r0
  26078. 800b46e: 6a7b ldr r3, [r7, #36] @ 0x24
  26079. 800b470: 1ad3 subs r3, r2, r3
  26080. 800b472: f241 3288 movw r2, #5000 @ 0x1388
  26081. 800b476: 4293 cmp r3, r2
  26082. 800b478: d901 bls.n 800b47e <HAL_RCC_OscConfig+0x632>
  26083. {
  26084. return HAL_TIMEOUT;
  26085. 800b47a: 2303 movs r3, #3
  26086. 800b47c: e138 b.n 800b6f0 <HAL_RCC_OscConfig+0x8a4>
  26087. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != 0U)
  26088. 800b47e: 4b4e ldr r3, [pc, #312] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  26089. 800b480: 6f1b ldr r3, [r3, #112] @ 0x70
  26090. 800b482: f003 0302 and.w r3, r3, #2
  26091. 800b486: 2b00 cmp r3, #0
  26092. 800b488: d1ee bne.n 800b468 <HAL_RCC_OscConfig+0x61c>
  26093. }
  26094. }
  26095. /*-------------------------------- PLL Configuration -----------------------*/
  26096. /* Check the parameters */
  26097. assert_param(IS_RCC_PLL(RCC_OscInitStruct->PLL.PLLState));
  26098. if ((RCC_OscInitStruct->PLL.PLLState) != RCC_PLL_NONE)
  26099. 800b48a: 687b ldr r3, [r7, #4]
  26100. 800b48c: 6a5b ldr r3, [r3, #36] @ 0x24
  26101. 800b48e: 2b00 cmp r3, #0
  26102. 800b490: f000 812d beq.w 800b6ee <HAL_RCC_OscConfig+0x8a2>
  26103. {
  26104. /* Check if the PLL is used as system clock or not */
  26105. if (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_CFGR_SWS_PLL1)
  26106. 800b494: 4b48 ldr r3, [pc, #288] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  26107. 800b496: 691b ldr r3, [r3, #16]
  26108. 800b498: f003 0338 and.w r3, r3, #56 @ 0x38
  26109. 800b49c: 2b18 cmp r3, #24
  26110. 800b49e: f000 80bd beq.w 800b61c <HAL_RCC_OscConfig+0x7d0>
  26111. {
  26112. if ((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON)
  26113. 800b4a2: 687b ldr r3, [r7, #4]
  26114. 800b4a4: 6a5b ldr r3, [r3, #36] @ 0x24
  26115. 800b4a6: 2b02 cmp r3, #2
  26116. 800b4a8: f040 809e bne.w 800b5e8 <HAL_RCC_OscConfig+0x79c>
  26117. assert_param(IS_RCC_PLLQ_VALUE(RCC_OscInitStruct->PLL.PLLQ));
  26118. assert_param(IS_RCC_PLLR_VALUE(RCC_OscInitStruct->PLL.PLLR));
  26119. assert_param(IS_RCC_PLLFRACN_VALUE(RCC_OscInitStruct->PLL.PLLFRACN));
  26120. /* Disable the main PLL. */
  26121. __HAL_RCC_PLL_DISABLE();
  26122. 800b4ac: 4b42 ldr r3, [pc, #264] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  26123. 800b4ae: 681b ldr r3, [r3, #0]
  26124. 800b4b0: 4a41 ldr r2, [pc, #260] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  26125. 800b4b2: f023 7380 bic.w r3, r3, #16777216 @ 0x1000000
  26126. 800b4b6: 6013 str r3, [r2, #0]
  26127. /* Get Start Tick*/
  26128. tickstart = HAL_GetTick();
  26129. 800b4b8: f7f9 ff90 bl 80053dc <HAL_GetTick>
  26130. 800b4bc: 6278 str r0, [r7, #36] @ 0x24
  26131. /* Wait till PLL is disabled */
  26132. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != 0U)
  26133. 800b4be: e008 b.n 800b4d2 <HAL_RCC_OscConfig+0x686>
  26134. {
  26135. if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
  26136. 800b4c0: f7f9 ff8c bl 80053dc <HAL_GetTick>
  26137. 800b4c4: 4602 mov r2, r0
  26138. 800b4c6: 6a7b ldr r3, [r7, #36] @ 0x24
  26139. 800b4c8: 1ad3 subs r3, r2, r3
  26140. 800b4ca: 2b02 cmp r3, #2
  26141. 800b4cc: d901 bls.n 800b4d2 <HAL_RCC_OscConfig+0x686>
  26142. {
  26143. return HAL_TIMEOUT;
  26144. 800b4ce: 2303 movs r3, #3
  26145. 800b4d0: e10e b.n 800b6f0 <HAL_RCC_OscConfig+0x8a4>
  26146. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != 0U)
  26147. 800b4d2: 4b39 ldr r3, [pc, #228] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  26148. 800b4d4: 681b ldr r3, [r3, #0]
  26149. 800b4d6: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  26150. 800b4da: 2b00 cmp r3, #0
  26151. 800b4dc: d1f0 bne.n 800b4c0 <HAL_RCC_OscConfig+0x674>
  26152. }
  26153. }
  26154. /* Configure the main PLL clock source, multiplication and division factors. */
  26155. __HAL_RCC_PLL_CONFIG(RCC_OscInitStruct->PLL.PLLSource,
  26156. 800b4de: 4b36 ldr r3, [pc, #216] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  26157. 800b4e0: 6a9a ldr r2, [r3, #40] @ 0x28
  26158. 800b4e2: 4b37 ldr r3, [pc, #220] @ (800b5c0 <HAL_RCC_OscConfig+0x774>)
  26159. 800b4e4: 4013 ands r3, r2
  26160. 800b4e6: 687a ldr r2, [r7, #4]
  26161. 800b4e8: 6a91 ldr r1, [r2, #40] @ 0x28
  26162. 800b4ea: 687a ldr r2, [r7, #4]
  26163. 800b4ec: 6ad2 ldr r2, [r2, #44] @ 0x2c
  26164. 800b4ee: 0112 lsls r2, r2, #4
  26165. 800b4f0: 430a orrs r2, r1
  26166. 800b4f2: 4931 ldr r1, [pc, #196] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  26167. 800b4f4: 4313 orrs r3, r2
  26168. 800b4f6: 628b str r3, [r1, #40] @ 0x28
  26169. 800b4f8: 687b ldr r3, [r7, #4]
  26170. 800b4fa: 6b1b ldr r3, [r3, #48] @ 0x30
  26171. 800b4fc: 3b01 subs r3, #1
  26172. 800b4fe: f3c3 0208 ubfx r2, r3, #0, #9
  26173. 800b502: 687b ldr r3, [r7, #4]
  26174. 800b504: 6b5b ldr r3, [r3, #52] @ 0x34
  26175. 800b506: 3b01 subs r3, #1
  26176. 800b508: 025b lsls r3, r3, #9
  26177. 800b50a: b29b uxth r3, r3
  26178. 800b50c: 431a orrs r2, r3
  26179. 800b50e: 687b ldr r3, [r7, #4]
  26180. 800b510: 6b9b ldr r3, [r3, #56] @ 0x38
  26181. 800b512: 3b01 subs r3, #1
  26182. 800b514: 041b lsls r3, r3, #16
  26183. 800b516: f403 03fe and.w r3, r3, #8323072 @ 0x7f0000
  26184. 800b51a: 431a orrs r2, r3
  26185. 800b51c: 687b ldr r3, [r7, #4]
  26186. 800b51e: 6bdb ldr r3, [r3, #60] @ 0x3c
  26187. 800b520: 3b01 subs r3, #1
  26188. 800b522: 061b lsls r3, r3, #24
  26189. 800b524: f003 43fe and.w r3, r3, #2130706432 @ 0x7f000000
  26190. 800b528: 4923 ldr r1, [pc, #140] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  26191. 800b52a: 4313 orrs r3, r2
  26192. 800b52c: 630b str r3, [r1, #48] @ 0x30
  26193. RCC_OscInitStruct->PLL.PLLP,
  26194. RCC_OscInitStruct->PLL.PLLQ,
  26195. RCC_OscInitStruct->PLL.PLLR);
  26196. /* Disable PLLFRACN . */
  26197. __HAL_RCC_PLLFRACN_DISABLE();
  26198. 800b52e: 4b22 ldr r3, [pc, #136] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  26199. 800b530: 6adb ldr r3, [r3, #44] @ 0x2c
  26200. 800b532: 4a21 ldr r2, [pc, #132] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  26201. 800b534: f023 0301 bic.w r3, r3, #1
  26202. 800b538: 62d3 str r3, [r2, #44] @ 0x2c
  26203. /* Configure PLL PLL1FRACN */
  26204. __HAL_RCC_PLLFRACN_CONFIG(RCC_OscInitStruct->PLL.PLLFRACN);
  26205. 800b53a: 4b1f ldr r3, [pc, #124] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  26206. 800b53c: 6b5a ldr r2, [r3, #52] @ 0x34
  26207. 800b53e: 4b21 ldr r3, [pc, #132] @ (800b5c4 <HAL_RCC_OscConfig+0x778>)
  26208. 800b540: 4013 ands r3, r2
  26209. 800b542: 687a ldr r2, [r7, #4]
  26210. 800b544: 6c92 ldr r2, [r2, #72] @ 0x48
  26211. 800b546: 00d2 lsls r2, r2, #3
  26212. 800b548: 491b ldr r1, [pc, #108] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  26213. 800b54a: 4313 orrs r3, r2
  26214. 800b54c: 634b str r3, [r1, #52] @ 0x34
  26215. /* Select PLL1 input reference frequency range: VCI */
  26216. __HAL_RCC_PLL_VCIRANGE(RCC_OscInitStruct->PLL.PLLRGE) ;
  26217. 800b54e: 4b1a ldr r3, [pc, #104] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  26218. 800b550: 6adb ldr r3, [r3, #44] @ 0x2c
  26219. 800b552: f023 020c bic.w r2, r3, #12
  26220. 800b556: 687b ldr r3, [r7, #4]
  26221. 800b558: 6c1b ldr r3, [r3, #64] @ 0x40
  26222. 800b55a: 4917 ldr r1, [pc, #92] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  26223. 800b55c: 4313 orrs r3, r2
  26224. 800b55e: 62cb str r3, [r1, #44] @ 0x2c
  26225. /* Select PLL1 output frequency range : VCO */
  26226. __HAL_RCC_PLL_VCORANGE(RCC_OscInitStruct->PLL.PLLVCOSEL) ;
  26227. 800b560: 4b15 ldr r3, [pc, #84] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  26228. 800b562: 6adb ldr r3, [r3, #44] @ 0x2c
  26229. 800b564: f023 0202 bic.w r2, r3, #2
  26230. 800b568: 687b ldr r3, [r7, #4]
  26231. 800b56a: 6c5b ldr r3, [r3, #68] @ 0x44
  26232. 800b56c: 4912 ldr r1, [pc, #72] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  26233. 800b56e: 4313 orrs r3, r2
  26234. 800b570: 62cb str r3, [r1, #44] @ 0x2c
  26235. /* Enable PLL System Clock output. */
  26236. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVP);
  26237. 800b572: 4b11 ldr r3, [pc, #68] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  26238. 800b574: 6adb ldr r3, [r3, #44] @ 0x2c
  26239. 800b576: 4a10 ldr r2, [pc, #64] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  26240. 800b578: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  26241. 800b57c: 62d3 str r3, [r2, #44] @ 0x2c
  26242. /* Enable PLL1Q Clock output. */
  26243. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  26244. 800b57e: 4b0e ldr r3, [pc, #56] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  26245. 800b580: 6adb ldr r3, [r3, #44] @ 0x2c
  26246. 800b582: 4a0d ldr r2, [pc, #52] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  26247. 800b584: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  26248. 800b588: 62d3 str r3, [r2, #44] @ 0x2c
  26249. /* Enable PLL1R Clock output. */
  26250. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVR);
  26251. 800b58a: 4b0b ldr r3, [pc, #44] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  26252. 800b58c: 6adb ldr r3, [r3, #44] @ 0x2c
  26253. 800b58e: 4a0a ldr r2, [pc, #40] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  26254. 800b590: f443 2380 orr.w r3, r3, #262144 @ 0x40000
  26255. 800b594: 62d3 str r3, [r2, #44] @ 0x2c
  26256. /* Enable PLL1FRACN . */
  26257. __HAL_RCC_PLLFRACN_ENABLE();
  26258. 800b596: 4b08 ldr r3, [pc, #32] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  26259. 800b598: 6adb ldr r3, [r3, #44] @ 0x2c
  26260. 800b59a: 4a07 ldr r2, [pc, #28] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  26261. 800b59c: f043 0301 orr.w r3, r3, #1
  26262. 800b5a0: 62d3 str r3, [r2, #44] @ 0x2c
  26263. /* Enable the main PLL. */
  26264. __HAL_RCC_PLL_ENABLE();
  26265. 800b5a2: 4b05 ldr r3, [pc, #20] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  26266. 800b5a4: 681b ldr r3, [r3, #0]
  26267. 800b5a6: 4a04 ldr r2, [pc, #16] @ (800b5b8 <HAL_RCC_OscConfig+0x76c>)
  26268. 800b5a8: f043 7380 orr.w r3, r3, #16777216 @ 0x1000000
  26269. 800b5ac: 6013 str r3, [r2, #0]
  26270. /* Get Start Tick*/
  26271. tickstart = HAL_GetTick();
  26272. 800b5ae: f7f9 ff15 bl 80053dc <HAL_GetTick>
  26273. 800b5b2: 6278 str r0, [r7, #36] @ 0x24
  26274. /* Wait till PLL is ready */
  26275. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == 0U)
  26276. 800b5b4: e011 b.n 800b5da <HAL_RCC_OscConfig+0x78e>
  26277. 800b5b6: bf00 nop
  26278. 800b5b8: 58024400 .word 0x58024400
  26279. 800b5bc: 58024800 .word 0x58024800
  26280. 800b5c0: fffffc0c .word 0xfffffc0c
  26281. 800b5c4: ffff0007 .word 0xffff0007
  26282. {
  26283. if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
  26284. 800b5c8: f7f9 ff08 bl 80053dc <HAL_GetTick>
  26285. 800b5cc: 4602 mov r2, r0
  26286. 800b5ce: 6a7b ldr r3, [r7, #36] @ 0x24
  26287. 800b5d0: 1ad3 subs r3, r2, r3
  26288. 800b5d2: 2b02 cmp r3, #2
  26289. 800b5d4: d901 bls.n 800b5da <HAL_RCC_OscConfig+0x78e>
  26290. {
  26291. return HAL_TIMEOUT;
  26292. 800b5d6: 2303 movs r3, #3
  26293. 800b5d8: e08a b.n 800b6f0 <HAL_RCC_OscConfig+0x8a4>
  26294. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == 0U)
  26295. 800b5da: 4b47 ldr r3, [pc, #284] @ (800b6f8 <HAL_RCC_OscConfig+0x8ac>)
  26296. 800b5dc: 681b ldr r3, [r3, #0]
  26297. 800b5de: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  26298. 800b5e2: 2b00 cmp r3, #0
  26299. 800b5e4: d0f0 beq.n 800b5c8 <HAL_RCC_OscConfig+0x77c>
  26300. 800b5e6: e082 b.n 800b6ee <HAL_RCC_OscConfig+0x8a2>
  26301. }
  26302. }
  26303. else
  26304. {
  26305. /* Disable the main PLL. */
  26306. __HAL_RCC_PLL_DISABLE();
  26307. 800b5e8: 4b43 ldr r3, [pc, #268] @ (800b6f8 <HAL_RCC_OscConfig+0x8ac>)
  26308. 800b5ea: 681b ldr r3, [r3, #0]
  26309. 800b5ec: 4a42 ldr r2, [pc, #264] @ (800b6f8 <HAL_RCC_OscConfig+0x8ac>)
  26310. 800b5ee: f023 7380 bic.w r3, r3, #16777216 @ 0x1000000
  26311. 800b5f2: 6013 str r3, [r2, #0]
  26312. /* Get Start Tick*/
  26313. tickstart = HAL_GetTick();
  26314. 800b5f4: f7f9 fef2 bl 80053dc <HAL_GetTick>
  26315. 800b5f8: 6278 str r0, [r7, #36] @ 0x24
  26316. /* Wait till PLL is disabled */
  26317. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != 0U)
  26318. 800b5fa: e008 b.n 800b60e <HAL_RCC_OscConfig+0x7c2>
  26319. {
  26320. if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
  26321. 800b5fc: f7f9 feee bl 80053dc <HAL_GetTick>
  26322. 800b600: 4602 mov r2, r0
  26323. 800b602: 6a7b ldr r3, [r7, #36] @ 0x24
  26324. 800b604: 1ad3 subs r3, r2, r3
  26325. 800b606: 2b02 cmp r3, #2
  26326. 800b608: d901 bls.n 800b60e <HAL_RCC_OscConfig+0x7c2>
  26327. {
  26328. return HAL_TIMEOUT;
  26329. 800b60a: 2303 movs r3, #3
  26330. 800b60c: e070 b.n 800b6f0 <HAL_RCC_OscConfig+0x8a4>
  26331. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != 0U)
  26332. 800b60e: 4b3a ldr r3, [pc, #232] @ (800b6f8 <HAL_RCC_OscConfig+0x8ac>)
  26333. 800b610: 681b ldr r3, [r3, #0]
  26334. 800b612: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  26335. 800b616: 2b00 cmp r3, #0
  26336. 800b618: d1f0 bne.n 800b5fc <HAL_RCC_OscConfig+0x7b0>
  26337. 800b61a: e068 b.n 800b6ee <HAL_RCC_OscConfig+0x8a2>
  26338. }
  26339. }
  26340. else
  26341. {
  26342. /* Do not return HAL_ERROR if request repeats the current configuration */
  26343. temp1_pllckcfg = RCC->PLLCKSELR;
  26344. 800b61c: 4b36 ldr r3, [pc, #216] @ (800b6f8 <HAL_RCC_OscConfig+0x8ac>)
  26345. 800b61e: 6a9b ldr r3, [r3, #40] @ 0x28
  26346. 800b620: 613b str r3, [r7, #16]
  26347. temp2_pllckcfg = RCC->PLL1DIVR;
  26348. 800b622: 4b35 ldr r3, [pc, #212] @ (800b6f8 <HAL_RCC_OscConfig+0x8ac>)
  26349. 800b624: 6b1b ldr r3, [r3, #48] @ 0x30
  26350. 800b626: 60fb str r3, [r7, #12]
  26351. if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) ||
  26352. 800b628: 687b ldr r3, [r7, #4]
  26353. 800b62a: 6a5b ldr r3, [r3, #36] @ 0x24
  26354. 800b62c: 2b01 cmp r3, #1
  26355. 800b62e: d031 beq.n 800b694 <HAL_RCC_OscConfig+0x848>
  26356. (READ_BIT(temp1_pllckcfg, RCC_PLLCKSELR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) ||
  26357. 800b630: 693b ldr r3, [r7, #16]
  26358. 800b632: f003 0203 and.w r2, r3, #3
  26359. 800b636: 687b ldr r3, [r7, #4]
  26360. 800b638: 6a9b ldr r3, [r3, #40] @ 0x28
  26361. if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) ||
  26362. 800b63a: 429a cmp r2, r3
  26363. 800b63c: d12a bne.n 800b694 <HAL_RCC_OscConfig+0x848>
  26364. ((READ_BIT(temp1_pllckcfg, RCC_PLLCKSELR_DIVM1) >> RCC_PLLCKSELR_DIVM1_Pos) != RCC_OscInitStruct->PLL.PLLM) ||
  26365. 800b63e: 693b ldr r3, [r7, #16]
  26366. 800b640: 091b lsrs r3, r3, #4
  26367. 800b642: f003 023f and.w r2, r3, #63 @ 0x3f
  26368. 800b646: 687b ldr r3, [r7, #4]
  26369. 800b648: 6adb ldr r3, [r3, #44] @ 0x2c
  26370. (READ_BIT(temp1_pllckcfg, RCC_PLLCKSELR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) ||
  26371. 800b64a: 429a cmp r2, r3
  26372. 800b64c: d122 bne.n 800b694 <HAL_RCC_OscConfig+0x848>
  26373. (READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_N1) != (RCC_OscInitStruct->PLL.PLLN - 1U)) ||
  26374. 800b64e: 68fb ldr r3, [r7, #12]
  26375. 800b650: f3c3 0208 ubfx r2, r3, #0, #9
  26376. 800b654: 687b ldr r3, [r7, #4]
  26377. 800b656: 6b1b ldr r3, [r3, #48] @ 0x30
  26378. 800b658: 3b01 subs r3, #1
  26379. ((READ_BIT(temp1_pllckcfg, RCC_PLLCKSELR_DIVM1) >> RCC_PLLCKSELR_DIVM1_Pos) != RCC_OscInitStruct->PLL.PLLM) ||
  26380. 800b65a: 429a cmp r2, r3
  26381. 800b65c: d11a bne.n 800b694 <HAL_RCC_OscConfig+0x848>
  26382. ((READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_P1) >> RCC_PLL1DIVR_P1_Pos) != (RCC_OscInitStruct->PLL.PLLP - 1U)) ||
  26383. 800b65e: 68fb ldr r3, [r7, #12]
  26384. 800b660: 0a5b lsrs r3, r3, #9
  26385. 800b662: f003 027f and.w r2, r3, #127 @ 0x7f
  26386. 800b666: 687b ldr r3, [r7, #4]
  26387. 800b668: 6b5b ldr r3, [r3, #52] @ 0x34
  26388. 800b66a: 3b01 subs r3, #1
  26389. (READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_N1) != (RCC_OscInitStruct->PLL.PLLN - 1U)) ||
  26390. 800b66c: 429a cmp r2, r3
  26391. 800b66e: d111 bne.n 800b694 <HAL_RCC_OscConfig+0x848>
  26392. ((READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_Q1) >> RCC_PLL1DIVR_Q1_Pos) != (RCC_OscInitStruct->PLL.PLLQ - 1U)) ||
  26393. 800b670: 68fb ldr r3, [r7, #12]
  26394. 800b672: 0c1b lsrs r3, r3, #16
  26395. 800b674: f003 027f and.w r2, r3, #127 @ 0x7f
  26396. 800b678: 687b ldr r3, [r7, #4]
  26397. 800b67a: 6b9b ldr r3, [r3, #56] @ 0x38
  26398. 800b67c: 3b01 subs r3, #1
  26399. ((READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_P1) >> RCC_PLL1DIVR_P1_Pos) != (RCC_OscInitStruct->PLL.PLLP - 1U)) ||
  26400. 800b67e: 429a cmp r2, r3
  26401. 800b680: d108 bne.n 800b694 <HAL_RCC_OscConfig+0x848>
  26402. ((READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_R1) >> RCC_PLL1DIVR_R1_Pos) != (RCC_OscInitStruct->PLL.PLLR - 1U)))
  26403. 800b682: 68fb ldr r3, [r7, #12]
  26404. 800b684: 0e1b lsrs r3, r3, #24
  26405. 800b686: f003 027f and.w r2, r3, #127 @ 0x7f
  26406. 800b68a: 687b ldr r3, [r7, #4]
  26407. 800b68c: 6bdb ldr r3, [r3, #60] @ 0x3c
  26408. 800b68e: 3b01 subs r3, #1
  26409. ((READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_Q1) >> RCC_PLL1DIVR_Q1_Pos) != (RCC_OscInitStruct->PLL.PLLQ - 1U)) ||
  26410. 800b690: 429a cmp r2, r3
  26411. 800b692: d001 beq.n 800b698 <HAL_RCC_OscConfig+0x84c>
  26412. {
  26413. return HAL_ERROR;
  26414. 800b694: 2301 movs r3, #1
  26415. 800b696: e02b b.n 800b6f0 <HAL_RCC_OscConfig+0x8a4>
  26416. }
  26417. else
  26418. {
  26419. /* Check if only fractional part needs to be updated */
  26420. temp1_pllckcfg = ((RCC->PLL1FRACR & RCC_PLL1FRACR_FRACN1) >> RCC_PLL1FRACR_FRACN1_Pos);
  26421. 800b698: 4b17 ldr r3, [pc, #92] @ (800b6f8 <HAL_RCC_OscConfig+0x8ac>)
  26422. 800b69a: 6b5b ldr r3, [r3, #52] @ 0x34
  26423. 800b69c: 08db lsrs r3, r3, #3
  26424. 800b69e: f3c3 030c ubfx r3, r3, #0, #13
  26425. 800b6a2: 613b str r3, [r7, #16]
  26426. if (RCC_OscInitStruct->PLL.PLLFRACN != temp1_pllckcfg)
  26427. 800b6a4: 687b ldr r3, [r7, #4]
  26428. 800b6a6: 6c9b ldr r3, [r3, #72] @ 0x48
  26429. 800b6a8: 693a ldr r2, [r7, #16]
  26430. 800b6aa: 429a cmp r2, r3
  26431. 800b6ac: d01f beq.n 800b6ee <HAL_RCC_OscConfig+0x8a2>
  26432. {
  26433. assert_param(IS_RCC_PLLFRACN_VALUE(RCC_OscInitStruct->PLL.PLLFRACN));
  26434. /* Disable PLL1FRACEN */
  26435. __HAL_RCC_PLLFRACN_DISABLE();
  26436. 800b6ae: 4b12 ldr r3, [pc, #72] @ (800b6f8 <HAL_RCC_OscConfig+0x8ac>)
  26437. 800b6b0: 6adb ldr r3, [r3, #44] @ 0x2c
  26438. 800b6b2: 4a11 ldr r2, [pc, #68] @ (800b6f8 <HAL_RCC_OscConfig+0x8ac>)
  26439. 800b6b4: f023 0301 bic.w r3, r3, #1
  26440. 800b6b8: 62d3 str r3, [r2, #44] @ 0x2c
  26441. /* Get Start Tick*/
  26442. tickstart = HAL_GetTick();
  26443. 800b6ba: f7f9 fe8f bl 80053dc <HAL_GetTick>
  26444. 800b6be: 6278 str r0, [r7, #36] @ 0x24
  26445. /* Wait at least 2 CK_REF (PLL input source divided by M) period to make sure next latched value will be taken into account. */
  26446. while ((HAL_GetTick() - tickstart) < PLL_FRAC_TIMEOUT_VALUE)
  26447. 800b6c0: bf00 nop
  26448. 800b6c2: f7f9 fe8b bl 80053dc <HAL_GetTick>
  26449. 800b6c6: 4602 mov r2, r0
  26450. 800b6c8: 6a7b ldr r3, [r7, #36] @ 0x24
  26451. 800b6ca: 4293 cmp r3, r2
  26452. 800b6cc: d0f9 beq.n 800b6c2 <HAL_RCC_OscConfig+0x876>
  26453. {
  26454. }
  26455. /* Configure PLL1 PLL1FRACN */
  26456. __HAL_RCC_PLLFRACN_CONFIG(RCC_OscInitStruct->PLL.PLLFRACN);
  26457. 800b6ce: 4b0a ldr r3, [pc, #40] @ (800b6f8 <HAL_RCC_OscConfig+0x8ac>)
  26458. 800b6d0: 6b5a ldr r2, [r3, #52] @ 0x34
  26459. 800b6d2: 4b0a ldr r3, [pc, #40] @ (800b6fc <HAL_RCC_OscConfig+0x8b0>)
  26460. 800b6d4: 4013 ands r3, r2
  26461. 800b6d6: 687a ldr r2, [r7, #4]
  26462. 800b6d8: 6c92 ldr r2, [r2, #72] @ 0x48
  26463. 800b6da: 00d2 lsls r2, r2, #3
  26464. 800b6dc: 4906 ldr r1, [pc, #24] @ (800b6f8 <HAL_RCC_OscConfig+0x8ac>)
  26465. 800b6de: 4313 orrs r3, r2
  26466. 800b6e0: 634b str r3, [r1, #52] @ 0x34
  26467. /* Enable PLL1FRACEN to latch new value. */
  26468. __HAL_RCC_PLLFRACN_ENABLE();
  26469. 800b6e2: 4b05 ldr r3, [pc, #20] @ (800b6f8 <HAL_RCC_OscConfig+0x8ac>)
  26470. 800b6e4: 6adb ldr r3, [r3, #44] @ 0x2c
  26471. 800b6e6: 4a04 ldr r2, [pc, #16] @ (800b6f8 <HAL_RCC_OscConfig+0x8ac>)
  26472. 800b6e8: f043 0301 orr.w r3, r3, #1
  26473. 800b6ec: 62d3 str r3, [r2, #44] @ 0x2c
  26474. }
  26475. }
  26476. }
  26477. }
  26478. return HAL_OK;
  26479. 800b6ee: 2300 movs r3, #0
  26480. }
  26481. 800b6f0: 4618 mov r0, r3
  26482. 800b6f2: 3730 adds r7, #48 @ 0x30
  26483. 800b6f4: 46bd mov sp, r7
  26484. 800b6f6: bd80 pop {r7, pc}
  26485. 800b6f8: 58024400 .word 0x58024400
  26486. 800b6fc: ffff0007 .word 0xffff0007
  26487. 0800b700 <HAL_RCC_ClockConfig>:
  26488. * D1CPRE[3:0] bits to ensure that Domain1 core clock not exceed the maximum allowed frequency
  26489. * (for more details refer to section above "Initialization/de-initialization functions")
  26490. * @retval None
  26491. */
  26492. HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency)
  26493. {
  26494. 800b700: b580 push {r7, lr}
  26495. 800b702: b086 sub sp, #24
  26496. 800b704: af00 add r7, sp, #0
  26497. 800b706: 6078 str r0, [r7, #4]
  26498. 800b708: 6039 str r1, [r7, #0]
  26499. HAL_StatusTypeDef halstatus;
  26500. uint32_t tickstart;
  26501. uint32_t common_system_clock;
  26502. /* Check Null pointer */
  26503. if (RCC_ClkInitStruct == NULL)
  26504. 800b70a: 687b ldr r3, [r7, #4]
  26505. 800b70c: 2b00 cmp r3, #0
  26506. 800b70e: d101 bne.n 800b714 <HAL_RCC_ClockConfig+0x14>
  26507. {
  26508. return HAL_ERROR;
  26509. 800b710: 2301 movs r3, #1
  26510. 800b712: e19c b.n 800ba4e <HAL_RCC_ClockConfig+0x34e>
  26511. /* To correctly read data from FLASH memory, the number of wait states (LATENCY)
  26512. must be correctly programmed according to the frequency of the CPU clock
  26513. (HCLK) and the supply voltage of the device. */
  26514. /* Increasing the CPU frequency */
  26515. if (FLatency > __HAL_FLASH_GET_LATENCY())
  26516. 800b714: 4b8a ldr r3, [pc, #552] @ (800b940 <HAL_RCC_ClockConfig+0x240>)
  26517. 800b716: 681b ldr r3, [r3, #0]
  26518. 800b718: f003 030f and.w r3, r3, #15
  26519. 800b71c: 683a ldr r2, [r7, #0]
  26520. 800b71e: 429a cmp r2, r3
  26521. 800b720: d910 bls.n 800b744 <HAL_RCC_ClockConfig+0x44>
  26522. {
  26523. /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
  26524. __HAL_FLASH_SET_LATENCY(FLatency);
  26525. 800b722: 4b87 ldr r3, [pc, #540] @ (800b940 <HAL_RCC_ClockConfig+0x240>)
  26526. 800b724: 681b ldr r3, [r3, #0]
  26527. 800b726: f023 020f bic.w r2, r3, #15
  26528. 800b72a: 4985 ldr r1, [pc, #532] @ (800b940 <HAL_RCC_ClockConfig+0x240>)
  26529. 800b72c: 683b ldr r3, [r7, #0]
  26530. 800b72e: 4313 orrs r3, r2
  26531. 800b730: 600b str r3, [r1, #0]
  26532. /* Check that the new number of wait states is taken into account to access the Flash
  26533. memory by reading the FLASH_ACR register */
  26534. if (__HAL_FLASH_GET_LATENCY() != FLatency)
  26535. 800b732: 4b83 ldr r3, [pc, #524] @ (800b940 <HAL_RCC_ClockConfig+0x240>)
  26536. 800b734: 681b ldr r3, [r3, #0]
  26537. 800b736: f003 030f and.w r3, r3, #15
  26538. 800b73a: 683a ldr r2, [r7, #0]
  26539. 800b73c: 429a cmp r2, r3
  26540. 800b73e: d001 beq.n 800b744 <HAL_RCC_ClockConfig+0x44>
  26541. {
  26542. return HAL_ERROR;
  26543. 800b740: 2301 movs r3, #1
  26544. 800b742: e184 b.n 800ba4e <HAL_RCC_ClockConfig+0x34e>
  26545. }
  26546. /* Increasing the BUS frequency divider */
  26547. /*-------------------------- D1PCLK1/CDPCLK1 Configuration ---------------------------*/
  26548. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_D1PCLK1) == RCC_CLOCKTYPE_D1PCLK1)
  26549. 800b744: 687b ldr r3, [r7, #4]
  26550. 800b746: 681b ldr r3, [r3, #0]
  26551. 800b748: f003 0304 and.w r3, r3, #4
  26552. 800b74c: 2b00 cmp r3, #0
  26553. 800b74e: d010 beq.n 800b772 <HAL_RCC_ClockConfig+0x72>
  26554. {
  26555. #if defined (RCC_D1CFGR_D1PPRE)
  26556. if ((RCC_ClkInitStruct->APB3CLKDivider) > (RCC->D1CFGR & RCC_D1CFGR_D1PPRE))
  26557. 800b750: 687b ldr r3, [r7, #4]
  26558. 800b752: 691a ldr r2, [r3, #16]
  26559. 800b754: 4b7b ldr r3, [pc, #492] @ (800b944 <HAL_RCC_ClockConfig+0x244>)
  26560. 800b756: 699b ldr r3, [r3, #24]
  26561. 800b758: f003 0370 and.w r3, r3, #112 @ 0x70
  26562. 800b75c: 429a cmp r2, r3
  26563. 800b75e: d908 bls.n 800b772 <HAL_RCC_ClockConfig+0x72>
  26564. {
  26565. assert_param(IS_RCC_D1PCLK1(RCC_ClkInitStruct->APB3CLKDivider));
  26566. MODIFY_REG(RCC->D1CFGR, RCC_D1CFGR_D1PPRE, RCC_ClkInitStruct->APB3CLKDivider);
  26567. 800b760: 4b78 ldr r3, [pc, #480] @ (800b944 <HAL_RCC_ClockConfig+0x244>)
  26568. 800b762: 699b ldr r3, [r3, #24]
  26569. 800b764: f023 0270 bic.w r2, r3, #112 @ 0x70
  26570. 800b768: 687b ldr r3, [r7, #4]
  26571. 800b76a: 691b ldr r3, [r3, #16]
  26572. 800b76c: 4975 ldr r1, [pc, #468] @ (800b944 <HAL_RCC_ClockConfig+0x244>)
  26573. 800b76e: 4313 orrs r3, r2
  26574. 800b770: 618b str r3, [r1, #24]
  26575. }
  26576. #endif
  26577. }
  26578. /*-------------------------- PCLK1 Configuration ---------------------------*/
  26579. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
  26580. 800b772: 687b ldr r3, [r7, #4]
  26581. 800b774: 681b ldr r3, [r3, #0]
  26582. 800b776: f003 0308 and.w r3, r3, #8
  26583. 800b77a: 2b00 cmp r3, #0
  26584. 800b77c: d010 beq.n 800b7a0 <HAL_RCC_ClockConfig+0xa0>
  26585. {
  26586. #if defined (RCC_D2CFGR_D2PPRE1)
  26587. if ((RCC_ClkInitStruct->APB1CLKDivider) > (RCC->D2CFGR & RCC_D2CFGR_D2PPRE1))
  26588. 800b77e: 687b ldr r3, [r7, #4]
  26589. 800b780: 695a ldr r2, [r3, #20]
  26590. 800b782: 4b70 ldr r3, [pc, #448] @ (800b944 <HAL_RCC_ClockConfig+0x244>)
  26591. 800b784: 69db ldr r3, [r3, #28]
  26592. 800b786: f003 0370 and.w r3, r3, #112 @ 0x70
  26593. 800b78a: 429a cmp r2, r3
  26594. 800b78c: d908 bls.n 800b7a0 <HAL_RCC_ClockConfig+0xa0>
  26595. {
  26596. assert_param(IS_RCC_PCLK1(RCC_ClkInitStruct->APB1CLKDivider));
  26597. MODIFY_REG(RCC->D2CFGR, RCC_D2CFGR_D2PPRE1, (RCC_ClkInitStruct->APB1CLKDivider));
  26598. 800b78e: 4b6d ldr r3, [pc, #436] @ (800b944 <HAL_RCC_ClockConfig+0x244>)
  26599. 800b790: 69db ldr r3, [r3, #28]
  26600. 800b792: f023 0270 bic.w r2, r3, #112 @ 0x70
  26601. 800b796: 687b ldr r3, [r7, #4]
  26602. 800b798: 695b ldr r3, [r3, #20]
  26603. 800b79a: 496a ldr r1, [pc, #424] @ (800b944 <HAL_RCC_ClockConfig+0x244>)
  26604. 800b79c: 4313 orrs r3, r2
  26605. 800b79e: 61cb str r3, [r1, #28]
  26606. MODIFY_REG(RCC->CDCFGR2, RCC_CDCFGR2_CDPPRE1, (RCC_ClkInitStruct->APB1CLKDivider));
  26607. }
  26608. #endif
  26609. }
  26610. /*-------------------------- PCLK2 Configuration ---------------------------*/
  26611. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
  26612. 800b7a0: 687b ldr r3, [r7, #4]
  26613. 800b7a2: 681b ldr r3, [r3, #0]
  26614. 800b7a4: f003 0310 and.w r3, r3, #16
  26615. 800b7a8: 2b00 cmp r3, #0
  26616. 800b7aa: d010 beq.n 800b7ce <HAL_RCC_ClockConfig+0xce>
  26617. {
  26618. #if defined(RCC_D2CFGR_D2PPRE2)
  26619. if ((RCC_ClkInitStruct->APB2CLKDivider) > (RCC->D2CFGR & RCC_D2CFGR_D2PPRE2))
  26620. 800b7ac: 687b ldr r3, [r7, #4]
  26621. 800b7ae: 699a ldr r2, [r3, #24]
  26622. 800b7b0: 4b64 ldr r3, [pc, #400] @ (800b944 <HAL_RCC_ClockConfig+0x244>)
  26623. 800b7b2: 69db ldr r3, [r3, #28]
  26624. 800b7b4: f403 63e0 and.w r3, r3, #1792 @ 0x700
  26625. 800b7b8: 429a cmp r2, r3
  26626. 800b7ba: d908 bls.n 800b7ce <HAL_RCC_ClockConfig+0xce>
  26627. {
  26628. assert_param(IS_RCC_PCLK2(RCC_ClkInitStruct->APB2CLKDivider));
  26629. MODIFY_REG(RCC->D2CFGR, RCC_D2CFGR_D2PPRE2, (RCC_ClkInitStruct->APB2CLKDivider));
  26630. 800b7bc: 4b61 ldr r3, [pc, #388] @ (800b944 <HAL_RCC_ClockConfig+0x244>)
  26631. 800b7be: 69db ldr r3, [r3, #28]
  26632. 800b7c0: f423 62e0 bic.w r2, r3, #1792 @ 0x700
  26633. 800b7c4: 687b ldr r3, [r7, #4]
  26634. 800b7c6: 699b ldr r3, [r3, #24]
  26635. 800b7c8: 495e ldr r1, [pc, #376] @ (800b944 <HAL_RCC_ClockConfig+0x244>)
  26636. 800b7ca: 4313 orrs r3, r2
  26637. 800b7cc: 61cb str r3, [r1, #28]
  26638. }
  26639. #endif
  26640. }
  26641. /*-------------------------- D3PCLK1 Configuration ---------------------------*/
  26642. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_D3PCLK1) == RCC_CLOCKTYPE_D3PCLK1)
  26643. 800b7ce: 687b ldr r3, [r7, #4]
  26644. 800b7d0: 681b ldr r3, [r3, #0]
  26645. 800b7d2: f003 0320 and.w r3, r3, #32
  26646. 800b7d6: 2b00 cmp r3, #0
  26647. 800b7d8: d010 beq.n 800b7fc <HAL_RCC_ClockConfig+0xfc>
  26648. {
  26649. #if defined(RCC_D3CFGR_D3PPRE)
  26650. if ((RCC_ClkInitStruct->APB4CLKDivider) > (RCC->D3CFGR & RCC_D3CFGR_D3PPRE))
  26651. 800b7da: 687b ldr r3, [r7, #4]
  26652. 800b7dc: 69da ldr r2, [r3, #28]
  26653. 800b7de: 4b59 ldr r3, [pc, #356] @ (800b944 <HAL_RCC_ClockConfig+0x244>)
  26654. 800b7e0: 6a1b ldr r3, [r3, #32]
  26655. 800b7e2: f003 0370 and.w r3, r3, #112 @ 0x70
  26656. 800b7e6: 429a cmp r2, r3
  26657. 800b7e8: d908 bls.n 800b7fc <HAL_RCC_ClockConfig+0xfc>
  26658. {
  26659. assert_param(IS_RCC_D3PCLK1(RCC_ClkInitStruct->APB4CLKDivider));
  26660. MODIFY_REG(RCC->D3CFGR, RCC_D3CFGR_D3PPRE, (RCC_ClkInitStruct->APB4CLKDivider));
  26661. 800b7ea: 4b56 ldr r3, [pc, #344] @ (800b944 <HAL_RCC_ClockConfig+0x244>)
  26662. 800b7ec: 6a1b ldr r3, [r3, #32]
  26663. 800b7ee: f023 0270 bic.w r2, r3, #112 @ 0x70
  26664. 800b7f2: 687b ldr r3, [r7, #4]
  26665. 800b7f4: 69db ldr r3, [r3, #28]
  26666. 800b7f6: 4953 ldr r1, [pc, #332] @ (800b944 <HAL_RCC_ClockConfig+0x244>)
  26667. 800b7f8: 4313 orrs r3, r2
  26668. 800b7fa: 620b str r3, [r1, #32]
  26669. }
  26670. #endif
  26671. }
  26672. /*-------------------------- HCLK Configuration --------------------------*/
  26673. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK)
  26674. 800b7fc: 687b ldr r3, [r7, #4]
  26675. 800b7fe: 681b ldr r3, [r3, #0]
  26676. 800b800: f003 0302 and.w r3, r3, #2
  26677. 800b804: 2b00 cmp r3, #0
  26678. 800b806: d010 beq.n 800b82a <HAL_RCC_ClockConfig+0x12a>
  26679. {
  26680. #if defined (RCC_D1CFGR_HPRE)
  26681. if ((RCC_ClkInitStruct->AHBCLKDivider) > (RCC->D1CFGR & RCC_D1CFGR_HPRE))
  26682. 800b808: 687b ldr r3, [r7, #4]
  26683. 800b80a: 68da ldr r2, [r3, #12]
  26684. 800b80c: 4b4d ldr r3, [pc, #308] @ (800b944 <HAL_RCC_ClockConfig+0x244>)
  26685. 800b80e: 699b ldr r3, [r3, #24]
  26686. 800b810: f003 030f and.w r3, r3, #15
  26687. 800b814: 429a cmp r2, r3
  26688. 800b816: d908 bls.n 800b82a <HAL_RCC_ClockConfig+0x12a>
  26689. {
  26690. /* Set the new HCLK clock divider */
  26691. assert_param(IS_RCC_HCLK(RCC_ClkInitStruct->AHBCLKDivider));
  26692. MODIFY_REG(RCC->D1CFGR, RCC_D1CFGR_HPRE, RCC_ClkInitStruct->AHBCLKDivider);
  26693. 800b818: 4b4a ldr r3, [pc, #296] @ (800b944 <HAL_RCC_ClockConfig+0x244>)
  26694. 800b81a: 699b ldr r3, [r3, #24]
  26695. 800b81c: f023 020f bic.w r2, r3, #15
  26696. 800b820: 687b ldr r3, [r7, #4]
  26697. 800b822: 68db ldr r3, [r3, #12]
  26698. 800b824: 4947 ldr r1, [pc, #284] @ (800b944 <HAL_RCC_ClockConfig+0x244>)
  26699. 800b826: 4313 orrs r3, r2
  26700. 800b828: 618b str r3, [r1, #24]
  26701. }
  26702. #endif
  26703. }
  26704. /*------------------------- SYSCLK Configuration -------------------------*/
  26705. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK)
  26706. 800b82a: 687b ldr r3, [r7, #4]
  26707. 800b82c: 681b ldr r3, [r3, #0]
  26708. 800b82e: f003 0301 and.w r3, r3, #1
  26709. 800b832: 2b00 cmp r3, #0
  26710. 800b834: d055 beq.n 800b8e2 <HAL_RCC_ClockConfig+0x1e2>
  26711. {
  26712. assert_param(IS_RCC_SYSCLK(RCC_ClkInitStruct->SYSCLKDivider));
  26713. assert_param(IS_RCC_SYSCLKSOURCE(RCC_ClkInitStruct->SYSCLKSource));
  26714. #if defined(RCC_D1CFGR_D1CPRE)
  26715. MODIFY_REG(RCC->D1CFGR, RCC_D1CFGR_D1CPRE, RCC_ClkInitStruct->SYSCLKDivider);
  26716. 800b836: 4b43 ldr r3, [pc, #268] @ (800b944 <HAL_RCC_ClockConfig+0x244>)
  26717. 800b838: 699b ldr r3, [r3, #24]
  26718. 800b83a: f423 6270 bic.w r2, r3, #3840 @ 0xf00
  26719. 800b83e: 687b ldr r3, [r7, #4]
  26720. 800b840: 689b ldr r3, [r3, #8]
  26721. 800b842: 4940 ldr r1, [pc, #256] @ (800b944 <HAL_RCC_ClockConfig+0x244>)
  26722. 800b844: 4313 orrs r3, r2
  26723. 800b846: 618b str r3, [r1, #24]
  26724. #else
  26725. MODIFY_REG(RCC->CDCFGR1, RCC_CDCFGR1_CDCPRE, RCC_ClkInitStruct->SYSCLKDivider);
  26726. #endif
  26727. /* HSE is selected as System Clock Source */
  26728. if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE)
  26729. 800b848: 687b ldr r3, [r7, #4]
  26730. 800b84a: 685b ldr r3, [r3, #4]
  26731. 800b84c: 2b02 cmp r3, #2
  26732. 800b84e: d107 bne.n 800b860 <HAL_RCC_ClockConfig+0x160>
  26733. {
  26734. /* Check the HSE ready flag */
  26735. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == 0U)
  26736. 800b850: 4b3c ldr r3, [pc, #240] @ (800b944 <HAL_RCC_ClockConfig+0x244>)
  26737. 800b852: 681b ldr r3, [r3, #0]
  26738. 800b854: f403 3300 and.w r3, r3, #131072 @ 0x20000
  26739. 800b858: 2b00 cmp r3, #0
  26740. 800b85a: d121 bne.n 800b8a0 <HAL_RCC_ClockConfig+0x1a0>
  26741. {
  26742. return HAL_ERROR;
  26743. 800b85c: 2301 movs r3, #1
  26744. 800b85e: e0f6 b.n 800ba4e <HAL_RCC_ClockConfig+0x34e>
  26745. }
  26746. }
  26747. /* PLL is selected as System Clock Source */
  26748. else if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK)
  26749. 800b860: 687b ldr r3, [r7, #4]
  26750. 800b862: 685b ldr r3, [r3, #4]
  26751. 800b864: 2b03 cmp r3, #3
  26752. 800b866: d107 bne.n 800b878 <HAL_RCC_ClockConfig+0x178>
  26753. {
  26754. /* Check the PLL ready flag */
  26755. if (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == 0U)
  26756. 800b868: 4b36 ldr r3, [pc, #216] @ (800b944 <HAL_RCC_ClockConfig+0x244>)
  26757. 800b86a: 681b ldr r3, [r3, #0]
  26758. 800b86c: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  26759. 800b870: 2b00 cmp r3, #0
  26760. 800b872: d115 bne.n 800b8a0 <HAL_RCC_ClockConfig+0x1a0>
  26761. {
  26762. return HAL_ERROR;
  26763. 800b874: 2301 movs r3, #1
  26764. 800b876: e0ea b.n 800ba4e <HAL_RCC_ClockConfig+0x34e>
  26765. }
  26766. }
  26767. /* CSI is selected as System Clock Source */
  26768. else if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_CSI)
  26769. 800b878: 687b ldr r3, [r7, #4]
  26770. 800b87a: 685b ldr r3, [r3, #4]
  26771. 800b87c: 2b01 cmp r3, #1
  26772. 800b87e: d107 bne.n 800b890 <HAL_RCC_ClockConfig+0x190>
  26773. {
  26774. /* Check the PLL ready flag */
  26775. if (__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) == 0U)
  26776. 800b880: 4b30 ldr r3, [pc, #192] @ (800b944 <HAL_RCC_ClockConfig+0x244>)
  26777. 800b882: 681b ldr r3, [r3, #0]
  26778. 800b884: f403 7380 and.w r3, r3, #256 @ 0x100
  26779. 800b888: 2b00 cmp r3, #0
  26780. 800b88a: d109 bne.n 800b8a0 <HAL_RCC_ClockConfig+0x1a0>
  26781. {
  26782. return HAL_ERROR;
  26783. 800b88c: 2301 movs r3, #1
  26784. 800b88e: e0de b.n 800ba4e <HAL_RCC_ClockConfig+0x34e>
  26785. }
  26786. /* HSI is selected as System Clock Source */
  26787. else
  26788. {
  26789. /* Check the HSI ready flag */
  26790. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == 0U)
  26791. 800b890: 4b2c ldr r3, [pc, #176] @ (800b944 <HAL_RCC_ClockConfig+0x244>)
  26792. 800b892: 681b ldr r3, [r3, #0]
  26793. 800b894: f003 0304 and.w r3, r3, #4
  26794. 800b898: 2b00 cmp r3, #0
  26795. 800b89a: d101 bne.n 800b8a0 <HAL_RCC_ClockConfig+0x1a0>
  26796. {
  26797. return HAL_ERROR;
  26798. 800b89c: 2301 movs r3, #1
  26799. 800b89e: e0d6 b.n 800ba4e <HAL_RCC_ClockConfig+0x34e>
  26800. }
  26801. }
  26802. MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, RCC_ClkInitStruct->SYSCLKSource);
  26803. 800b8a0: 4b28 ldr r3, [pc, #160] @ (800b944 <HAL_RCC_ClockConfig+0x244>)
  26804. 800b8a2: 691b ldr r3, [r3, #16]
  26805. 800b8a4: f023 0207 bic.w r2, r3, #7
  26806. 800b8a8: 687b ldr r3, [r7, #4]
  26807. 800b8aa: 685b ldr r3, [r3, #4]
  26808. 800b8ac: 4925 ldr r1, [pc, #148] @ (800b944 <HAL_RCC_ClockConfig+0x244>)
  26809. 800b8ae: 4313 orrs r3, r2
  26810. 800b8b0: 610b str r3, [r1, #16]
  26811. /* Get Start Tick*/
  26812. tickstart = HAL_GetTick();
  26813. 800b8b2: f7f9 fd93 bl 80053dc <HAL_GetTick>
  26814. 800b8b6: 6178 str r0, [r7, #20]
  26815. while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos))
  26816. 800b8b8: e00a b.n 800b8d0 <HAL_RCC_ClockConfig+0x1d0>
  26817. {
  26818. if ((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE)
  26819. 800b8ba: f7f9 fd8f bl 80053dc <HAL_GetTick>
  26820. 800b8be: 4602 mov r2, r0
  26821. 800b8c0: 697b ldr r3, [r7, #20]
  26822. 800b8c2: 1ad3 subs r3, r2, r3
  26823. 800b8c4: f241 3288 movw r2, #5000 @ 0x1388
  26824. 800b8c8: 4293 cmp r3, r2
  26825. 800b8ca: d901 bls.n 800b8d0 <HAL_RCC_ClockConfig+0x1d0>
  26826. {
  26827. return HAL_TIMEOUT;
  26828. 800b8cc: 2303 movs r3, #3
  26829. 800b8ce: e0be b.n 800ba4e <HAL_RCC_ClockConfig+0x34e>
  26830. while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos))
  26831. 800b8d0: 4b1c ldr r3, [pc, #112] @ (800b944 <HAL_RCC_ClockConfig+0x244>)
  26832. 800b8d2: 691b ldr r3, [r3, #16]
  26833. 800b8d4: f003 0238 and.w r2, r3, #56 @ 0x38
  26834. 800b8d8: 687b ldr r3, [r7, #4]
  26835. 800b8da: 685b ldr r3, [r3, #4]
  26836. 800b8dc: 00db lsls r3, r3, #3
  26837. 800b8de: 429a cmp r2, r3
  26838. 800b8e0: d1eb bne.n 800b8ba <HAL_RCC_ClockConfig+0x1ba>
  26839. }
  26840. /* Decreasing the BUS frequency divider */
  26841. /*-------------------------- HCLK Configuration --------------------------*/
  26842. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK)
  26843. 800b8e2: 687b ldr r3, [r7, #4]
  26844. 800b8e4: 681b ldr r3, [r3, #0]
  26845. 800b8e6: f003 0302 and.w r3, r3, #2
  26846. 800b8ea: 2b00 cmp r3, #0
  26847. 800b8ec: d010 beq.n 800b910 <HAL_RCC_ClockConfig+0x210>
  26848. {
  26849. #if defined(RCC_D1CFGR_HPRE)
  26850. if ((RCC_ClkInitStruct->AHBCLKDivider) < (RCC->D1CFGR & RCC_D1CFGR_HPRE))
  26851. 800b8ee: 687b ldr r3, [r7, #4]
  26852. 800b8f0: 68da ldr r2, [r3, #12]
  26853. 800b8f2: 4b14 ldr r3, [pc, #80] @ (800b944 <HAL_RCC_ClockConfig+0x244>)
  26854. 800b8f4: 699b ldr r3, [r3, #24]
  26855. 800b8f6: f003 030f and.w r3, r3, #15
  26856. 800b8fa: 429a cmp r2, r3
  26857. 800b8fc: d208 bcs.n 800b910 <HAL_RCC_ClockConfig+0x210>
  26858. {
  26859. /* Set the new HCLK clock divider */
  26860. assert_param(IS_RCC_HCLK(RCC_ClkInitStruct->AHBCLKDivider));
  26861. MODIFY_REG(RCC->D1CFGR, RCC_D1CFGR_HPRE, RCC_ClkInitStruct->AHBCLKDivider);
  26862. 800b8fe: 4b11 ldr r3, [pc, #68] @ (800b944 <HAL_RCC_ClockConfig+0x244>)
  26863. 800b900: 699b ldr r3, [r3, #24]
  26864. 800b902: f023 020f bic.w r2, r3, #15
  26865. 800b906: 687b ldr r3, [r7, #4]
  26866. 800b908: 68db ldr r3, [r3, #12]
  26867. 800b90a: 490e ldr r1, [pc, #56] @ (800b944 <HAL_RCC_ClockConfig+0x244>)
  26868. 800b90c: 4313 orrs r3, r2
  26869. 800b90e: 618b str r3, [r1, #24]
  26870. }
  26871. #endif
  26872. }
  26873. /* Decreasing the number of wait states because of lower CPU frequency */
  26874. if (FLatency < __HAL_FLASH_GET_LATENCY())
  26875. 800b910: 4b0b ldr r3, [pc, #44] @ (800b940 <HAL_RCC_ClockConfig+0x240>)
  26876. 800b912: 681b ldr r3, [r3, #0]
  26877. 800b914: f003 030f and.w r3, r3, #15
  26878. 800b918: 683a ldr r2, [r7, #0]
  26879. 800b91a: 429a cmp r2, r3
  26880. 800b91c: d214 bcs.n 800b948 <HAL_RCC_ClockConfig+0x248>
  26881. {
  26882. /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
  26883. __HAL_FLASH_SET_LATENCY(FLatency);
  26884. 800b91e: 4b08 ldr r3, [pc, #32] @ (800b940 <HAL_RCC_ClockConfig+0x240>)
  26885. 800b920: 681b ldr r3, [r3, #0]
  26886. 800b922: f023 020f bic.w r2, r3, #15
  26887. 800b926: 4906 ldr r1, [pc, #24] @ (800b940 <HAL_RCC_ClockConfig+0x240>)
  26888. 800b928: 683b ldr r3, [r7, #0]
  26889. 800b92a: 4313 orrs r3, r2
  26890. 800b92c: 600b str r3, [r1, #0]
  26891. /* Check that the new number of wait states is taken into account to access the Flash
  26892. memory by reading the FLASH_ACR register */
  26893. if (__HAL_FLASH_GET_LATENCY() != FLatency)
  26894. 800b92e: 4b04 ldr r3, [pc, #16] @ (800b940 <HAL_RCC_ClockConfig+0x240>)
  26895. 800b930: 681b ldr r3, [r3, #0]
  26896. 800b932: f003 030f and.w r3, r3, #15
  26897. 800b936: 683a ldr r2, [r7, #0]
  26898. 800b938: 429a cmp r2, r3
  26899. 800b93a: d005 beq.n 800b948 <HAL_RCC_ClockConfig+0x248>
  26900. {
  26901. return HAL_ERROR;
  26902. 800b93c: 2301 movs r3, #1
  26903. 800b93e: e086 b.n 800ba4e <HAL_RCC_ClockConfig+0x34e>
  26904. 800b940: 52002000 .word 0x52002000
  26905. 800b944: 58024400 .word 0x58024400
  26906. }
  26907. }
  26908. /*-------------------------- D1PCLK1/CDPCLK Configuration ---------------------------*/
  26909. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_D1PCLK1) == RCC_CLOCKTYPE_D1PCLK1)
  26910. 800b948: 687b ldr r3, [r7, #4]
  26911. 800b94a: 681b ldr r3, [r3, #0]
  26912. 800b94c: f003 0304 and.w r3, r3, #4
  26913. 800b950: 2b00 cmp r3, #0
  26914. 800b952: d010 beq.n 800b976 <HAL_RCC_ClockConfig+0x276>
  26915. {
  26916. #if defined(RCC_D1CFGR_D1PPRE)
  26917. if ((RCC_ClkInitStruct->APB3CLKDivider) < (RCC->D1CFGR & RCC_D1CFGR_D1PPRE))
  26918. 800b954: 687b ldr r3, [r7, #4]
  26919. 800b956: 691a ldr r2, [r3, #16]
  26920. 800b958: 4b3f ldr r3, [pc, #252] @ (800ba58 <HAL_RCC_ClockConfig+0x358>)
  26921. 800b95a: 699b ldr r3, [r3, #24]
  26922. 800b95c: f003 0370 and.w r3, r3, #112 @ 0x70
  26923. 800b960: 429a cmp r2, r3
  26924. 800b962: d208 bcs.n 800b976 <HAL_RCC_ClockConfig+0x276>
  26925. {
  26926. assert_param(IS_RCC_D1PCLK1(RCC_ClkInitStruct->APB3CLKDivider));
  26927. MODIFY_REG(RCC->D1CFGR, RCC_D1CFGR_D1PPRE, RCC_ClkInitStruct->APB3CLKDivider);
  26928. 800b964: 4b3c ldr r3, [pc, #240] @ (800ba58 <HAL_RCC_ClockConfig+0x358>)
  26929. 800b966: 699b ldr r3, [r3, #24]
  26930. 800b968: f023 0270 bic.w r2, r3, #112 @ 0x70
  26931. 800b96c: 687b ldr r3, [r7, #4]
  26932. 800b96e: 691b ldr r3, [r3, #16]
  26933. 800b970: 4939 ldr r1, [pc, #228] @ (800ba58 <HAL_RCC_ClockConfig+0x358>)
  26934. 800b972: 4313 orrs r3, r2
  26935. 800b974: 618b str r3, [r1, #24]
  26936. }
  26937. #endif
  26938. }
  26939. /*-------------------------- PCLK1 Configuration ---------------------------*/
  26940. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
  26941. 800b976: 687b ldr r3, [r7, #4]
  26942. 800b978: 681b ldr r3, [r3, #0]
  26943. 800b97a: f003 0308 and.w r3, r3, #8
  26944. 800b97e: 2b00 cmp r3, #0
  26945. 800b980: d010 beq.n 800b9a4 <HAL_RCC_ClockConfig+0x2a4>
  26946. {
  26947. #if defined(RCC_D2CFGR_D2PPRE1)
  26948. if ((RCC_ClkInitStruct->APB1CLKDivider) < (RCC->D2CFGR & RCC_D2CFGR_D2PPRE1))
  26949. 800b982: 687b ldr r3, [r7, #4]
  26950. 800b984: 695a ldr r2, [r3, #20]
  26951. 800b986: 4b34 ldr r3, [pc, #208] @ (800ba58 <HAL_RCC_ClockConfig+0x358>)
  26952. 800b988: 69db ldr r3, [r3, #28]
  26953. 800b98a: f003 0370 and.w r3, r3, #112 @ 0x70
  26954. 800b98e: 429a cmp r2, r3
  26955. 800b990: d208 bcs.n 800b9a4 <HAL_RCC_ClockConfig+0x2a4>
  26956. {
  26957. assert_param(IS_RCC_PCLK1(RCC_ClkInitStruct->APB1CLKDivider));
  26958. MODIFY_REG(RCC->D2CFGR, RCC_D2CFGR_D2PPRE1, (RCC_ClkInitStruct->APB1CLKDivider));
  26959. 800b992: 4b31 ldr r3, [pc, #196] @ (800ba58 <HAL_RCC_ClockConfig+0x358>)
  26960. 800b994: 69db ldr r3, [r3, #28]
  26961. 800b996: f023 0270 bic.w r2, r3, #112 @ 0x70
  26962. 800b99a: 687b ldr r3, [r7, #4]
  26963. 800b99c: 695b ldr r3, [r3, #20]
  26964. 800b99e: 492e ldr r1, [pc, #184] @ (800ba58 <HAL_RCC_ClockConfig+0x358>)
  26965. 800b9a0: 4313 orrs r3, r2
  26966. 800b9a2: 61cb str r3, [r1, #28]
  26967. }
  26968. #endif
  26969. }
  26970. /*-------------------------- PCLK2 Configuration ---------------------------*/
  26971. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
  26972. 800b9a4: 687b ldr r3, [r7, #4]
  26973. 800b9a6: 681b ldr r3, [r3, #0]
  26974. 800b9a8: f003 0310 and.w r3, r3, #16
  26975. 800b9ac: 2b00 cmp r3, #0
  26976. 800b9ae: d010 beq.n 800b9d2 <HAL_RCC_ClockConfig+0x2d2>
  26977. {
  26978. #if defined (RCC_D2CFGR_D2PPRE2)
  26979. if ((RCC_ClkInitStruct->APB2CLKDivider) < (RCC->D2CFGR & RCC_D2CFGR_D2PPRE2))
  26980. 800b9b0: 687b ldr r3, [r7, #4]
  26981. 800b9b2: 699a ldr r2, [r3, #24]
  26982. 800b9b4: 4b28 ldr r3, [pc, #160] @ (800ba58 <HAL_RCC_ClockConfig+0x358>)
  26983. 800b9b6: 69db ldr r3, [r3, #28]
  26984. 800b9b8: f403 63e0 and.w r3, r3, #1792 @ 0x700
  26985. 800b9bc: 429a cmp r2, r3
  26986. 800b9be: d208 bcs.n 800b9d2 <HAL_RCC_ClockConfig+0x2d2>
  26987. {
  26988. assert_param(IS_RCC_PCLK2(RCC_ClkInitStruct->APB2CLKDivider));
  26989. MODIFY_REG(RCC->D2CFGR, RCC_D2CFGR_D2PPRE2, (RCC_ClkInitStruct->APB2CLKDivider));
  26990. 800b9c0: 4b25 ldr r3, [pc, #148] @ (800ba58 <HAL_RCC_ClockConfig+0x358>)
  26991. 800b9c2: 69db ldr r3, [r3, #28]
  26992. 800b9c4: f423 62e0 bic.w r2, r3, #1792 @ 0x700
  26993. 800b9c8: 687b ldr r3, [r7, #4]
  26994. 800b9ca: 699b ldr r3, [r3, #24]
  26995. 800b9cc: 4922 ldr r1, [pc, #136] @ (800ba58 <HAL_RCC_ClockConfig+0x358>)
  26996. 800b9ce: 4313 orrs r3, r2
  26997. 800b9d0: 61cb str r3, [r1, #28]
  26998. }
  26999. #endif
  27000. }
  27001. /*-------------------------- D3PCLK1/SRDPCLK1 Configuration ---------------------------*/
  27002. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_D3PCLK1) == RCC_CLOCKTYPE_D3PCLK1)
  27003. 800b9d2: 687b ldr r3, [r7, #4]
  27004. 800b9d4: 681b ldr r3, [r3, #0]
  27005. 800b9d6: f003 0320 and.w r3, r3, #32
  27006. 800b9da: 2b00 cmp r3, #0
  27007. 800b9dc: d010 beq.n 800ba00 <HAL_RCC_ClockConfig+0x300>
  27008. {
  27009. #if defined(RCC_D3CFGR_D3PPRE)
  27010. if ((RCC_ClkInitStruct->APB4CLKDivider) < (RCC->D3CFGR & RCC_D3CFGR_D3PPRE))
  27011. 800b9de: 687b ldr r3, [r7, #4]
  27012. 800b9e0: 69da ldr r2, [r3, #28]
  27013. 800b9e2: 4b1d ldr r3, [pc, #116] @ (800ba58 <HAL_RCC_ClockConfig+0x358>)
  27014. 800b9e4: 6a1b ldr r3, [r3, #32]
  27015. 800b9e6: f003 0370 and.w r3, r3, #112 @ 0x70
  27016. 800b9ea: 429a cmp r2, r3
  27017. 800b9ec: d208 bcs.n 800ba00 <HAL_RCC_ClockConfig+0x300>
  27018. {
  27019. assert_param(IS_RCC_D3PCLK1(RCC_ClkInitStruct->APB4CLKDivider));
  27020. MODIFY_REG(RCC->D3CFGR, RCC_D3CFGR_D3PPRE, (RCC_ClkInitStruct->APB4CLKDivider));
  27021. 800b9ee: 4b1a ldr r3, [pc, #104] @ (800ba58 <HAL_RCC_ClockConfig+0x358>)
  27022. 800b9f0: 6a1b ldr r3, [r3, #32]
  27023. 800b9f2: f023 0270 bic.w r2, r3, #112 @ 0x70
  27024. 800b9f6: 687b ldr r3, [r7, #4]
  27025. 800b9f8: 69db ldr r3, [r3, #28]
  27026. 800b9fa: 4917 ldr r1, [pc, #92] @ (800ba58 <HAL_RCC_ClockConfig+0x358>)
  27027. 800b9fc: 4313 orrs r3, r2
  27028. 800b9fe: 620b str r3, [r1, #32]
  27029. #endif
  27030. }
  27031. /* Update the SystemCoreClock global variable */
  27032. #if defined(RCC_D1CFGR_D1CPRE)
  27033. common_system_clock = HAL_RCC_GetSysClockFreq() >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_D1CPRE) >> RCC_D1CFGR_D1CPRE_Pos]) & 0x1FU);
  27034. 800ba00: f000 f834 bl 800ba6c <HAL_RCC_GetSysClockFreq>
  27035. 800ba04: 4602 mov r2, r0
  27036. 800ba06: 4b14 ldr r3, [pc, #80] @ (800ba58 <HAL_RCC_ClockConfig+0x358>)
  27037. 800ba08: 699b ldr r3, [r3, #24]
  27038. 800ba0a: 0a1b lsrs r3, r3, #8
  27039. 800ba0c: f003 030f and.w r3, r3, #15
  27040. 800ba10: 4912 ldr r1, [pc, #72] @ (800ba5c <HAL_RCC_ClockConfig+0x35c>)
  27041. 800ba12: 5ccb ldrb r3, [r1, r3]
  27042. 800ba14: f003 031f and.w r3, r3, #31
  27043. 800ba18: fa22 f303 lsr.w r3, r2, r3
  27044. 800ba1c: 613b str r3, [r7, #16]
  27045. #else
  27046. common_system_clock = HAL_RCC_GetSysClockFreq() >> ((D1CorePrescTable[(RCC->CDCFGR1 & RCC_CDCFGR1_CDCPRE) >> RCC_CDCFGR1_CDCPRE_Pos]) & 0x1FU);
  27047. #endif
  27048. #if defined(RCC_D1CFGR_HPRE)
  27049. SystemD2Clock = (common_system_clock >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_HPRE) >> RCC_D1CFGR_HPRE_Pos]) & 0x1FU));
  27050. 800ba1e: 4b0e ldr r3, [pc, #56] @ (800ba58 <HAL_RCC_ClockConfig+0x358>)
  27051. 800ba20: 699b ldr r3, [r3, #24]
  27052. 800ba22: f003 030f and.w r3, r3, #15
  27053. 800ba26: 4a0d ldr r2, [pc, #52] @ (800ba5c <HAL_RCC_ClockConfig+0x35c>)
  27054. 800ba28: 5cd3 ldrb r3, [r2, r3]
  27055. 800ba2a: f003 031f and.w r3, r3, #31
  27056. 800ba2e: 693a ldr r2, [r7, #16]
  27057. 800ba30: fa22 f303 lsr.w r3, r2, r3
  27058. 800ba34: 4a0a ldr r2, [pc, #40] @ (800ba60 <HAL_RCC_ClockConfig+0x360>)
  27059. 800ba36: 6013 str r3, [r2, #0]
  27060. #endif
  27061. #if defined(DUAL_CORE) && defined(CORE_CM4)
  27062. SystemCoreClock = SystemD2Clock;
  27063. #else
  27064. SystemCoreClock = common_system_clock;
  27065. 800ba38: 4a0a ldr r2, [pc, #40] @ (800ba64 <HAL_RCC_ClockConfig+0x364>)
  27066. 800ba3a: 693b ldr r3, [r7, #16]
  27067. 800ba3c: 6013 str r3, [r2, #0]
  27068. #endif /* DUAL_CORE && CORE_CM4 */
  27069. /* Configure the source of time base considering new system clocks settings*/
  27070. halstatus = HAL_InitTick(uwTickPrio);
  27071. 800ba3e: 4b0a ldr r3, [pc, #40] @ (800ba68 <HAL_RCC_ClockConfig+0x368>)
  27072. 800ba40: 681b ldr r3, [r3, #0]
  27073. 800ba42: 4618 mov r0, r3
  27074. 800ba44: f7f8 f9a2 bl 8003d8c <HAL_InitTick>
  27075. 800ba48: 4603 mov r3, r0
  27076. 800ba4a: 73fb strb r3, [r7, #15]
  27077. return halstatus;
  27078. 800ba4c: 7bfb ldrb r3, [r7, #15]
  27079. }
  27080. 800ba4e: 4618 mov r0, r3
  27081. 800ba50: 3718 adds r7, #24
  27082. 800ba52: 46bd mov sp, r7
  27083. 800ba54: bd80 pop {r7, pc}
  27084. 800ba56: bf00 nop
  27085. 800ba58: 58024400 .word 0x58024400
  27086. 800ba5c: 080189c8 .word 0x080189c8
  27087. 800ba60: 24000038 .word 0x24000038
  27088. 800ba64: 24000034 .word 0x24000034
  27089. 800ba68: 2400003c .word 0x2400003c
  27090. 0800ba6c <HAL_RCC_GetSysClockFreq>:
  27091. *
  27092. *
  27093. * @retval SYSCLK frequency
  27094. */
  27095. uint32_t HAL_RCC_GetSysClockFreq(void)
  27096. {
  27097. 800ba6c: b480 push {r7}
  27098. 800ba6e: b089 sub sp, #36 @ 0x24
  27099. 800ba70: af00 add r7, sp, #0
  27100. float_t fracn1, pllvco;
  27101. uint32_t sysclockfreq;
  27102. /* Get SYSCLK source -------------------------------------------------------*/
  27103. switch (RCC->CFGR & RCC_CFGR_SWS)
  27104. 800ba72: 4bb3 ldr r3, [pc, #716] @ (800bd40 <HAL_RCC_GetSysClockFreq+0x2d4>)
  27105. 800ba74: 691b ldr r3, [r3, #16]
  27106. 800ba76: f003 0338 and.w r3, r3, #56 @ 0x38
  27107. 800ba7a: 2b18 cmp r3, #24
  27108. 800ba7c: f200 8155 bhi.w 800bd2a <HAL_RCC_GetSysClockFreq+0x2be>
  27109. 800ba80: a201 add r2, pc, #4 @ (adr r2, 800ba88 <HAL_RCC_GetSysClockFreq+0x1c>)
  27110. 800ba82: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  27111. 800ba86: bf00 nop
  27112. 800ba88: 0800baed .word 0x0800baed
  27113. 800ba8c: 0800bd2b .word 0x0800bd2b
  27114. 800ba90: 0800bd2b .word 0x0800bd2b
  27115. 800ba94: 0800bd2b .word 0x0800bd2b
  27116. 800ba98: 0800bd2b .word 0x0800bd2b
  27117. 800ba9c: 0800bd2b .word 0x0800bd2b
  27118. 800baa0: 0800bd2b .word 0x0800bd2b
  27119. 800baa4: 0800bd2b .word 0x0800bd2b
  27120. 800baa8: 0800bb13 .word 0x0800bb13
  27121. 800baac: 0800bd2b .word 0x0800bd2b
  27122. 800bab0: 0800bd2b .word 0x0800bd2b
  27123. 800bab4: 0800bd2b .word 0x0800bd2b
  27124. 800bab8: 0800bd2b .word 0x0800bd2b
  27125. 800babc: 0800bd2b .word 0x0800bd2b
  27126. 800bac0: 0800bd2b .word 0x0800bd2b
  27127. 800bac4: 0800bd2b .word 0x0800bd2b
  27128. 800bac8: 0800bb19 .word 0x0800bb19
  27129. 800bacc: 0800bd2b .word 0x0800bd2b
  27130. 800bad0: 0800bd2b .word 0x0800bd2b
  27131. 800bad4: 0800bd2b .word 0x0800bd2b
  27132. 800bad8: 0800bd2b .word 0x0800bd2b
  27133. 800badc: 0800bd2b .word 0x0800bd2b
  27134. 800bae0: 0800bd2b .word 0x0800bd2b
  27135. 800bae4: 0800bd2b .word 0x0800bd2b
  27136. 800bae8: 0800bb1f .word 0x0800bb1f
  27137. {
  27138. case RCC_CFGR_SWS_HSI: /* HSI used as system clock source */
  27139. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  27140. 800baec: 4b94 ldr r3, [pc, #592] @ (800bd40 <HAL_RCC_GetSysClockFreq+0x2d4>)
  27141. 800baee: 681b ldr r3, [r3, #0]
  27142. 800baf0: f003 0320 and.w r3, r3, #32
  27143. 800baf4: 2b00 cmp r3, #0
  27144. 800baf6: d009 beq.n 800bb0c <HAL_RCC_GetSysClockFreq+0xa0>
  27145. {
  27146. sysclockfreq = (uint32_t)(HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  27147. 800baf8: 4b91 ldr r3, [pc, #580] @ (800bd40 <HAL_RCC_GetSysClockFreq+0x2d4>)
  27148. 800bafa: 681b ldr r3, [r3, #0]
  27149. 800bafc: 08db lsrs r3, r3, #3
  27150. 800bafe: f003 0303 and.w r3, r3, #3
  27151. 800bb02: 4a90 ldr r2, [pc, #576] @ (800bd44 <HAL_RCC_GetSysClockFreq+0x2d8>)
  27152. 800bb04: fa22 f303 lsr.w r3, r2, r3
  27153. 800bb08: 61bb str r3, [r7, #24]
  27154. else
  27155. {
  27156. sysclockfreq = (uint32_t) HSI_VALUE;
  27157. }
  27158. break;
  27159. 800bb0a: e111 b.n 800bd30 <HAL_RCC_GetSysClockFreq+0x2c4>
  27160. sysclockfreq = (uint32_t) HSI_VALUE;
  27161. 800bb0c: 4b8d ldr r3, [pc, #564] @ (800bd44 <HAL_RCC_GetSysClockFreq+0x2d8>)
  27162. 800bb0e: 61bb str r3, [r7, #24]
  27163. break;
  27164. 800bb10: e10e b.n 800bd30 <HAL_RCC_GetSysClockFreq+0x2c4>
  27165. case RCC_CFGR_SWS_CSI: /* CSI used as system clock source */
  27166. sysclockfreq = CSI_VALUE;
  27167. 800bb12: 4b8d ldr r3, [pc, #564] @ (800bd48 <HAL_RCC_GetSysClockFreq+0x2dc>)
  27168. 800bb14: 61bb str r3, [r7, #24]
  27169. break;
  27170. 800bb16: e10b b.n 800bd30 <HAL_RCC_GetSysClockFreq+0x2c4>
  27171. case RCC_CFGR_SWS_HSE: /* HSE used as system clock source */
  27172. sysclockfreq = HSE_VALUE;
  27173. 800bb18: 4b8c ldr r3, [pc, #560] @ (800bd4c <HAL_RCC_GetSysClockFreq+0x2e0>)
  27174. 800bb1a: 61bb str r3, [r7, #24]
  27175. break;
  27176. 800bb1c: e108 b.n 800bd30 <HAL_RCC_GetSysClockFreq+0x2c4>
  27177. case RCC_CFGR_SWS_PLL1: /* PLL1 used as system clock source */
  27178. /* PLL_VCO = (HSE_VALUE or HSI_VALUE or CSI_VALUE/ PLLM) * PLLN
  27179. SYSCLK = PLL_VCO / PLLR
  27180. */
  27181. pllsource = (RCC->PLLCKSELR & RCC_PLLCKSELR_PLLSRC);
  27182. 800bb1e: 4b88 ldr r3, [pc, #544] @ (800bd40 <HAL_RCC_GetSysClockFreq+0x2d4>)
  27183. 800bb20: 6a9b ldr r3, [r3, #40] @ 0x28
  27184. 800bb22: f003 0303 and.w r3, r3, #3
  27185. 800bb26: 617b str r3, [r7, #20]
  27186. pllm = ((RCC->PLLCKSELR & RCC_PLLCKSELR_DIVM1) >> 4) ;
  27187. 800bb28: 4b85 ldr r3, [pc, #532] @ (800bd40 <HAL_RCC_GetSysClockFreq+0x2d4>)
  27188. 800bb2a: 6a9b ldr r3, [r3, #40] @ 0x28
  27189. 800bb2c: 091b lsrs r3, r3, #4
  27190. 800bb2e: f003 033f and.w r3, r3, #63 @ 0x3f
  27191. 800bb32: 613b str r3, [r7, #16]
  27192. pllfracen = ((RCC-> PLLCFGR & RCC_PLLCFGR_PLL1FRACEN) >> RCC_PLLCFGR_PLL1FRACEN_Pos);
  27193. 800bb34: 4b82 ldr r3, [pc, #520] @ (800bd40 <HAL_RCC_GetSysClockFreq+0x2d4>)
  27194. 800bb36: 6adb ldr r3, [r3, #44] @ 0x2c
  27195. 800bb38: f003 0301 and.w r3, r3, #1
  27196. 800bb3c: 60fb str r3, [r7, #12]
  27197. fracn1 = (float_t)(uint32_t)(pllfracen * ((RCC->PLL1FRACR & RCC_PLL1FRACR_FRACN1) >> 3));
  27198. 800bb3e: 4b80 ldr r3, [pc, #512] @ (800bd40 <HAL_RCC_GetSysClockFreq+0x2d4>)
  27199. 800bb40: 6b5b ldr r3, [r3, #52] @ 0x34
  27200. 800bb42: 08db lsrs r3, r3, #3
  27201. 800bb44: f3c3 030c ubfx r3, r3, #0, #13
  27202. 800bb48: 68fa ldr r2, [r7, #12]
  27203. 800bb4a: fb02 f303 mul.w r3, r2, r3
  27204. 800bb4e: ee07 3a90 vmov s15, r3
  27205. 800bb52: eef8 7a67 vcvt.f32.u32 s15, s15
  27206. 800bb56: edc7 7a02 vstr s15, [r7, #8]
  27207. if (pllm != 0U)
  27208. 800bb5a: 693b ldr r3, [r7, #16]
  27209. 800bb5c: 2b00 cmp r3, #0
  27210. 800bb5e: f000 80e1 beq.w 800bd24 <HAL_RCC_GetSysClockFreq+0x2b8>
  27211. 800bb62: 697b ldr r3, [r7, #20]
  27212. 800bb64: 2b02 cmp r3, #2
  27213. 800bb66: f000 8083 beq.w 800bc70 <HAL_RCC_GetSysClockFreq+0x204>
  27214. 800bb6a: 697b ldr r3, [r7, #20]
  27215. 800bb6c: 2b02 cmp r3, #2
  27216. 800bb6e: f200 80a1 bhi.w 800bcb4 <HAL_RCC_GetSysClockFreq+0x248>
  27217. 800bb72: 697b ldr r3, [r7, #20]
  27218. 800bb74: 2b00 cmp r3, #0
  27219. 800bb76: d003 beq.n 800bb80 <HAL_RCC_GetSysClockFreq+0x114>
  27220. 800bb78: 697b ldr r3, [r7, #20]
  27221. 800bb7a: 2b01 cmp r3, #1
  27222. 800bb7c: d056 beq.n 800bc2c <HAL_RCC_GetSysClockFreq+0x1c0>
  27223. 800bb7e: e099 b.n 800bcb4 <HAL_RCC_GetSysClockFreq+0x248>
  27224. {
  27225. switch (pllsource)
  27226. {
  27227. case RCC_PLLSOURCE_HSI: /* HSI used as PLL clock source */
  27228. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  27229. 800bb80: 4b6f ldr r3, [pc, #444] @ (800bd40 <HAL_RCC_GetSysClockFreq+0x2d4>)
  27230. 800bb82: 681b ldr r3, [r3, #0]
  27231. 800bb84: f003 0320 and.w r3, r3, #32
  27232. 800bb88: 2b00 cmp r3, #0
  27233. 800bb8a: d02d beq.n 800bbe8 <HAL_RCC_GetSysClockFreq+0x17c>
  27234. {
  27235. hsivalue = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  27236. 800bb8c: 4b6c ldr r3, [pc, #432] @ (800bd40 <HAL_RCC_GetSysClockFreq+0x2d4>)
  27237. 800bb8e: 681b ldr r3, [r3, #0]
  27238. 800bb90: 08db lsrs r3, r3, #3
  27239. 800bb92: f003 0303 and.w r3, r3, #3
  27240. 800bb96: 4a6b ldr r2, [pc, #428] @ (800bd44 <HAL_RCC_GetSysClockFreq+0x2d8>)
  27241. 800bb98: fa22 f303 lsr.w r3, r2, r3
  27242. 800bb9c: 607b str r3, [r7, #4]
  27243. pllvco = ((float_t)hsivalue / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  27244. 800bb9e: 687b ldr r3, [r7, #4]
  27245. 800bba0: ee07 3a90 vmov s15, r3
  27246. 800bba4: eef8 6a67 vcvt.f32.u32 s13, s15
  27247. 800bba8: 693b ldr r3, [r7, #16]
  27248. 800bbaa: ee07 3a90 vmov s15, r3
  27249. 800bbae: eef8 7a67 vcvt.f32.u32 s15, s15
  27250. 800bbb2: ee86 7aa7 vdiv.f32 s14, s13, s15
  27251. 800bbb6: 4b62 ldr r3, [pc, #392] @ (800bd40 <HAL_RCC_GetSysClockFreq+0x2d4>)
  27252. 800bbb8: 6b1b ldr r3, [r3, #48] @ 0x30
  27253. 800bbba: f3c3 0308 ubfx r3, r3, #0, #9
  27254. 800bbbe: ee07 3a90 vmov s15, r3
  27255. 800bbc2: eef8 6a67 vcvt.f32.u32 s13, s15
  27256. 800bbc6: ed97 6a02 vldr s12, [r7, #8]
  27257. 800bbca: eddf 5a61 vldr s11, [pc, #388] @ 800bd50 <HAL_RCC_GetSysClockFreq+0x2e4>
  27258. 800bbce: eec6 7a25 vdiv.f32 s15, s12, s11
  27259. 800bbd2: ee76 7aa7 vadd.f32 s15, s13, s15
  27260. 800bbd6: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  27261. 800bbda: ee77 7aa6 vadd.f32 s15, s15, s13
  27262. 800bbde: ee67 7a27 vmul.f32 s15, s14, s15
  27263. 800bbe2: edc7 7a07 vstr s15, [r7, #28]
  27264. }
  27265. else
  27266. {
  27267. pllvco = ((float_t)HSI_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  27268. }
  27269. break;
  27270. 800bbe6: e087 b.n 800bcf8 <HAL_RCC_GetSysClockFreq+0x28c>
  27271. pllvco = ((float_t)HSI_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  27272. 800bbe8: 693b ldr r3, [r7, #16]
  27273. 800bbea: ee07 3a90 vmov s15, r3
  27274. 800bbee: eef8 7a67 vcvt.f32.u32 s15, s15
  27275. 800bbf2: eddf 6a58 vldr s13, [pc, #352] @ 800bd54 <HAL_RCC_GetSysClockFreq+0x2e8>
  27276. 800bbf6: ee86 7aa7 vdiv.f32 s14, s13, s15
  27277. 800bbfa: 4b51 ldr r3, [pc, #324] @ (800bd40 <HAL_RCC_GetSysClockFreq+0x2d4>)
  27278. 800bbfc: 6b1b ldr r3, [r3, #48] @ 0x30
  27279. 800bbfe: f3c3 0308 ubfx r3, r3, #0, #9
  27280. 800bc02: ee07 3a90 vmov s15, r3
  27281. 800bc06: eef8 6a67 vcvt.f32.u32 s13, s15
  27282. 800bc0a: ed97 6a02 vldr s12, [r7, #8]
  27283. 800bc0e: eddf 5a50 vldr s11, [pc, #320] @ 800bd50 <HAL_RCC_GetSysClockFreq+0x2e4>
  27284. 800bc12: eec6 7a25 vdiv.f32 s15, s12, s11
  27285. 800bc16: ee76 7aa7 vadd.f32 s15, s13, s15
  27286. 800bc1a: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  27287. 800bc1e: ee77 7aa6 vadd.f32 s15, s15, s13
  27288. 800bc22: ee67 7a27 vmul.f32 s15, s14, s15
  27289. 800bc26: edc7 7a07 vstr s15, [r7, #28]
  27290. break;
  27291. 800bc2a: e065 b.n 800bcf8 <HAL_RCC_GetSysClockFreq+0x28c>
  27292. case RCC_PLLSOURCE_CSI: /* CSI used as PLL clock source */
  27293. pllvco = ((float_t)CSI_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  27294. 800bc2c: 693b ldr r3, [r7, #16]
  27295. 800bc2e: ee07 3a90 vmov s15, r3
  27296. 800bc32: eef8 7a67 vcvt.f32.u32 s15, s15
  27297. 800bc36: eddf 6a48 vldr s13, [pc, #288] @ 800bd58 <HAL_RCC_GetSysClockFreq+0x2ec>
  27298. 800bc3a: ee86 7aa7 vdiv.f32 s14, s13, s15
  27299. 800bc3e: 4b40 ldr r3, [pc, #256] @ (800bd40 <HAL_RCC_GetSysClockFreq+0x2d4>)
  27300. 800bc40: 6b1b ldr r3, [r3, #48] @ 0x30
  27301. 800bc42: f3c3 0308 ubfx r3, r3, #0, #9
  27302. 800bc46: ee07 3a90 vmov s15, r3
  27303. 800bc4a: eef8 6a67 vcvt.f32.u32 s13, s15
  27304. 800bc4e: ed97 6a02 vldr s12, [r7, #8]
  27305. 800bc52: eddf 5a3f vldr s11, [pc, #252] @ 800bd50 <HAL_RCC_GetSysClockFreq+0x2e4>
  27306. 800bc56: eec6 7a25 vdiv.f32 s15, s12, s11
  27307. 800bc5a: ee76 7aa7 vadd.f32 s15, s13, s15
  27308. 800bc5e: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  27309. 800bc62: ee77 7aa6 vadd.f32 s15, s15, s13
  27310. 800bc66: ee67 7a27 vmul.f32 s15, s14, s15
  27311. 800bc6a: edc7 7a07 vstr s15, [r7, #28]
  27312. break;
  27313. 800bc6e: e043 b.n 800bcf8 <HAL_RCC_GetSysClockFreq+0x28c>
  27314. case RCC_PLLSOURCE_HSE: /* HSE used as PLL clock source */
  27315. pllvco = ((float_t)HSE_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  27316. 800bc70: 693b ldr r3, [r7, #16]
  27317. 800bc72: ee07 3a90 vmov s15, r3
  27318. 800bc76: eef8 7a67 vcvt.f32.u32 s15, s15
  27319. 800bc7a: eddf 6a38 vldr s13, [pc, #224] @ 800bd5c <HAL_RCC_GetSysClockFreq+0x2f0>
  27320. 800bc7e: ee86 7aa7 vdiv.f32 s14, s13, s15
  27321. 800bc82: 4b2f ldr r3, [pc, #188] @ (800bd40 <HAL_RCC_GetSysClockFreq+0x2d4>)
  27322. 800bc84: 6b1b ldr r3, [r3, #48] @ 0x30
  27323. 800bc86: f3c3 0308 ubfx r3, r3, #0, #9
  27324. 800bc8a: ee07 3a90 vmov s15, r3
  27325. 800bc8e: eef8 6a67 vcvt.f32.u32 s13, s15
  27326. 800bc92: ed97 6a02 vldr s12, [r7, #8]
  27327. 800bc96: eddf 5a2e vldr s11, [pc, #184] @ 800bd50 <HAL_RCC_GetSysClockFreq+0x2e4>
  27328. 800bc9a: eec6 7a25 vdiv.f32 s15, s12, s11
  27329. 800bc9e: ee76 7aa7 vadd.f32 s15, s13, s15
  27330. 800bca2: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  27331. 800bca6: ee77 7aa6 vadd.f32 s15, s15, s13
  27332. 800bcaa: ee67 7a27 vmul.f32 s15, s14, s15
  27333. 800bcae: edc7 7a07 vstr s15, [r7, #28]
  27334. break;
  27335. 800bcb2: e021 b.n 800bcf8 <HAL_RCC_GetSysClockFreq+0x28c>
  27336. default:
  27337. pllvco = ((float_t)CSI_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  27338. 800bcb4: 693b ldr r3, [r7, #16]
  27339. 800bcb6: ee07 3a90 vmov s15, r3
  27340. 800bcba: eef8 7a67 vcvt.f32.u32 s15, s15
  27341. 800bcbe: eddf 6a26 vldr s13, [pc, #152] @ 800bd58 <HAL_RCC_GetSysClockFreq+0x2ec>
  27342. 800bcc2: ee86 7aa7 vdiv.f32 s14, s13, s15
  27343. 800bcc6: 4b1e ldr r3, [pc, #120] @ (800bd40 <HAL_RCC_GetSysClockFreq+0x2d4>)
  27344. 800bcc8: 6b1b ldr r3, [r3, #48] @ 0x30
  27345. 800bcca: f3c3 0308 ubfx r3, r3, #0, #9
  27346. 800bcce: ee07 3a90 vmov s15, r3
  27347. 800bcd2: eef8 6a67 vcvt.f32.u32 s13, s15
  27348. 800bcd6: ed97 6a02 vldr s12, [r7, #8]
  27349. 800bcda: eddf 5a1d vldr s11, [pc, #116] @ 800bd50 <HAL_RCC_GetSysClockFreq+0x2e4>
  27350. 800bcde: eec6 7a25 vdiv.f32 s15, s12, s11
  27351. 800bce2: ee76 7aa7 vadd.f32 s15, s13, s15
  27352. 800bce6: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  27353. 800bcea: ee77 7aa6 vadd.f32 s15, s15, s13
  27354. 800bcee: ee67 7a27 vmul.f32 s15, s14, s15
  27355. 800bcf2: edc7 7a07 vstr s15, [r7, #28]
  27356. break;
  27357. 800bcf6: bf00 nop
  27358. }
  27359. pllp = (((RCC->PLL1DIVR & RCC_PLL1DIVR_P1) >> 9) + 1U) ;
  27360. 800bcf8: 4b11 ldr r3, [pc, #68] @ (800bd40 <HAL_RCC_GetSysClockFreq+0x2d4>)
  27361. 800bcfa: 6b1b ldr r3, [r3, #48] @ 0x30
  27362. 800bcfc: 0a5b lsrs r3, r3, #9
  27363. 800bcfe: f003 037f and.w r3, r3, #127 @ 0x7f
  27364. 800bd02: 3301 adds r3, #1
  27365. 800bd04: 603b str r3, [r7, #0]
  27366. sysclockfreq = (uint32_t)(float_t)(pllvco / (float_t)pllp);
  27367. 800bd06: 683b ldr r3, [r7, #0]
  27368. 800bd08: ee07 3a90 vmov s15, r3
  27369. 800bd0c: eeb8 7a67 vcvt.f32.u32 s14, s15
  27370. 800bd10: edd7 6a07 vldr s13, [r7, #28]
  27371. 800bd14: eec6 7a87 vdiv.f32 s15, s13, s14
  27372. 800bd18: eefc 7ae7 vcvt.u32.f32 s15, s15
  27373. 800bd1c: ee17 3a90 vmov r3, s15
  27374. 800bd20: 61bb str r3, [r7, #24]
  27375. }
  27376. else
  27377. {
  27378. sysclockfreq = 0U;
  27379. }
  27380. break;
  27381. 800bd22: e005 b.n 800bd30 <HAL_RCC_GetSysClockFreq+0x2c4>
  27382. sysclockfreq = 0U;
  27383. 800bd24: 2300 movs r3, #0
  27384. 800bd26: 61bb str r3, [r7, #24]
  27385. break;
  27386. 800bd28: e002 b.n 800bd30 <HAL_RCC_GetSysClockFreq+0x2c4>
  27387. default:
  27388. sysclockfreq = CSI_VALUE;
  27389. 800bd2a: 4b07 ldr r3, [pc, #28] @ (800bd48 <HAL_RCC_GetSysClockFreq+0x2dc>)
  27390. 800bd2c: 61bb str r3, [r7, #24]
  27391. break;
  27392. 800bd2e: bf00 nop
  27393. }
  27394. return sysclockfreq;
  27395. 800bd30: 69bb ldr r3, [r7, #24]
  27396. }
  27397. 800bd32: 4618 mov r0, r3
  27398. 800bd34: 3724 adds r7, #36 @ 0x24
  27399. 800bd36: 46bd mov sp, r7
  27400. 800bd38: f85d 7b04 ldr.w r7, [sp], #4
  27401. 800bd3c: 4770 bx lr
  27402. 800bd3e: bf00 nop
  27403. 800bd40: 58024400 .word 0x58024400
  27404. 800bd44: 03d09000 .word 0x03d09000
  27405. 800bd48: 003d0900 .word 0x003d0900
  27406. 800bd4c: 017d7840 .word 0x017d7840
  27407. 800bd50: 46000000 .word 0x46000000
  27408. 800bd54: 4c742400 .word 0x4c742400
  27409. 800bd58: 4a742400 .word 0x4a742400
  27410. 800bd5c: 4bbebc20 .word 0x4bbebc20
  27411. 0800bd60 <HAL_RCC_GetHCLKFreq>:
  27412. * @note The SystemD2Clock CMSIS variable is used to store System domain2 Clock Frequency
  27413. * and updated within this function
  27414. * @retval HCLK frequency
  27415. */
  27416. uint32_t HAL_RCC_GetHCLKFreq(void)
  27417. {
  27418. 800bd60: b580 push {r7, lr}
  27419. 800bd62: b082 sub sp, #8
  27420. 800bd64: af00 add r7, sp, #0
  27421. uint32_t common_system_clock;
  27422. #if defined(RCC_D1CFGR_D1CPRE)
  27423. common_system_clock = HAL_RCC_GetSysClockFreq() >> (D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_D1CPRE) >> RCC_D1CFGR_D1CPRE_Pos] & 0x1FU);
  27424. 800bd66: f7ff fe81 bl 800ba6c <HAL_RCC_GetSysClockFreq>
  27425. 800bd6a: 4602 mov r2, r0
  27426. 800bd6c: 4b10 ldr r3, [pc, #64] @ (800bdb0 <HAL_RCC_GetHCLKFreq+0x50>)
  27427. 800bd6e: 699b ldr r3, [r3, #24]
  27428. 800bd70: 0a1b lsrs r3, r3, #8
  27429. 800bd72: f003 030f and.w r3, r3, #15
  27430. 800bd76: 490f ldr r1, [pc, #60] @ (800bdb4 <HAL_RCC_GetHCLKFreq+0x54>)
  27431. 800bd78: 5ccb ldrb r3, [r1, r3]
  27432. 800bd7a: f003 031f and.w r3, r3, #31
  27433. 800bd7e: fa22 f303 lsr.w r3, r2, r3
  27434. 800bd82: 607b str r3, [r7, #4]
  27435. #else
  27436. common_system_clock = HAL_RCC_GetSysClockFreq() >> (D1CorePrescTable[(RCC->CDCFGR1 & RCC_CDCFGR1_CDCPRE) >> RCC_CDCFGR1_CDCPRE_Pos] & 0x1FU);
  27437. #endif
  27438. #if defined(RCC_D1CFGR_HPRE)
  27439. SystemD2Clock = (common_system_clock >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_HPRE) >> RCC_D1CFGR_HPRE_Pos]) & 0x1FU));
  27440. 800bd84: 4b0a ldr r3, [pc, #40] @ (800bdb0 <HAL_RCC_GetHCLKFreq+0x50>)
  27441. 800bd86: 699b ldr r3, [r3, #24]
  27442. 800bd88: f003 030f and.w r3, r3, #15
  27443. 800bd8c: 4a09 ldr r2, [pc, #36] @ (800bdb4 <HAL_RCC_GetHCLKFreq+0x54>)
  27444. 800bd8e: 5cd3 ldrb r3, [r2, r3]
  27445. 800bd90: f003 031f and.w r3, r3, #31
  27446. 800bd94: 687a ldr r2, [r7, #4]
  27447. 800bd96: fa22 f303 lsr.w r3, r2, r3
  27448. 800bd9a: 4a07 ldr r2, [pc, #28] @ (800bdb8 <HAL_RCC_GetHCLKFreq+0x58>)
  27449. 800bd9c: 6013 str r3, [r2, #0]
  27450. #endif
  27451. #if defined(DUAL_CORE) && defined(CORE_CM4)
  27452. SystemCoreClock = SystemD2Clock;
  27453. #else
  27454. SystemCoreClock = common_system_clock;
  27455. 800bd9e: 4a07 ldr r2, [pc, #28] @ (800bdbc <HAL_RCC_GetHCLKFreq+0x5c>)
  27456. 800bda0: 687b ldr r3, [r7, #4]
  27457. 800bda2: 6013 str r3, [r2, #0]
  27458. #endif /* DUAL_CORE && CORE_CM4 */
  27459. return SystemD2Clock;
  27460. 800bda4: 4b04 ldr r3, [pc, #16] @ (800bdb8 <HAL_RCC_GetHCLKFreq+0x58>)
  27461. 800bda6: 681b ldr r3, [r3, #0]
  27462. }
  27463. 800bda8: 4618 mov r0, r3
  27464. 800bdaa: 3708 adds r7, #8
  27465. 800bdac: 46bd mov sp, r7
  27466. 800bdae: bd80 pop {r7, pc}
  27467. 800bdb0: 58024400 .word 0x58024400
  27468. 800bdb4: 080189c8 .word 0x080189c8
  27469. 800bdb8: 24000038 .word 0x24000038
  27470. 800bdbc: 24000034 .word 0x24000034
  27471. 0800bdc0 <HAL_RCC_GetPCLK1Freq>:
  27472. * @note Each time PCLK1 changes, this function must be called to update the
  27473. * right PCLK1 value. Otherwise, any configuration based on this function will be incorrect.
  27474. * @retval PCLK1 frequency
  27475. */
  27476. uint32_t HAL_RCC_GetPCLK1Freq(void)
  27477. {
  27478. 800bdc0: b580 push {r7, lr}
  27479. 800bdc2: af00 add r7, sp, #0
  27480. #if defined (RCC_D2CFGR_D2PPRE1)
  27481. /* Get HCLK source and Compute PCLK1 frequency ---------------------------*/
  27482. return (HAL_RCC_GetHCLKFreq() >> ((D1CorePrescTable[(RCC->D2CFGR & RCC_D2CFGR_D2PPRE1) >> RCC_D2CFGR_D2PPRE1_Pos]) & 0x1FU));
  27483. 800bdc4: f7ff ffcc bl 800bd60 <HAL_RCC_GetHCLKFreq>
  27484. 800bdc8: 4602 mov r2, r0
  27485. 800bdca: 4b06 ldr r3, [pc, #24] @ (800bde4 <HAL_RCC_GetPCLK1Freq+0x24>)
  27486. 800bdcc: 69db ldr r3, [r3, #28]
  27487. 800bdce: 091b lsrs r3, r3, #4
  27488. 800bdd0: f003 0307 and.w r3, r3, #7
  27489. 800bdd4: 4904 ldr r1, [pc, #16] @ (800bde8 <HAL_RCC_GetPCLK1Freq+0x28>)
  27490. 800bdd6: 5ccb ldrb r3, [r1, r3]
  27491. 800bdd8: f003 031f and.w r3, r3, #31
  27492. 800bddc: fa22 f303 lsr.w r3, r2, r3
  27493. #else
  27494. /* Get HCLK source and Compute PCLK1 frequency ---------------------------*/
  27495. return (HAL_RCC_GetHCLKFreq() >> ((D1CorePrescTable[(RCC->CDCFGR2 & RCC_CDCFGR2_CDPPRE1) >> RCC_CDCFGR2_CDPPRE1_Pos]) & 0x1FU));
  27496. #endif
  27497. }
  27498. 800bde0: 4618 mov r0, r3
  27499. 800bde2: bd80 pop {r7, pc}
  27500. 800bde4: 58024400 .word 0x58024400
  27501. 800bde8: 080189c8 .word 0x080189c8
  27502. 0800bdec <HAL_RCC_GetPCLK2Freq>:
  27503. * @note Each time PCLK2 changes, this function must be called to update the
  27504. * right PCLK2 value. Otherwise, any configuration based on this function will be incorrect.
  27505. * @retval PCLK1 frequency
  27506. */
  27507. uint32_t HAL_RCC_GetPCLK2Freq(void)
  27508. {
  27509. 800bdec: b580 push {r7, lr}
  27510. 800bdee: af00 add r7, sp, #0
  27511. /* Get HCLK source and Compute PCLK1 frequency ---------------------------*/
  27512. #if defined(RCC_D2CFGR_D2PPRE2)
  27513. return (HAL_RCC_GetHCLKFreq() >> ((D1CorePrescTable[(RCC->D2CFGR & RCC_D2CFGR_D2PPRE2) >> RCC_D2CFGR_D2PPRE2_Pos]) & 0x1FU));
  27514. 800bdf0: f7ff ffb6 bl 800bd60 <HAL_RCC_GetHCLKFreq>
  27515. 800bdf4: 4602 mov r2, r0
  27516. 800bdf6: 4b06 ldr r3, [pc, #24] @ (800be10 <HAL_RCC_GetPCLK2Freq+0x24>)
  27517. 800bdf8: 69db ldr r3, [r3, #28]
  27518. 800bdfa: 0a1b lsrs r3, r3, #8
  27519. 800bdfc: f003 0307 and.w r3, r3, #7
  27520. 800be00: 4904 ldr r1, [pc, #16] @ (800be14 <HAL_RCC_GetPCLK2Freq+0x28>)
  27521. 800be02: 5ccb ldrb r3, [r1, r3]
  27522. 800be04: f003 031f and.w r3, r3, #31
  27523. 800be08: fa22 f303 lsr.w r3, r2, r3
  27524. #else
  27525. return (HAL_RCC_GetHCLKFreq() >> ((D1CorePrescTable[(RCC->CDCFGR2 & RCC_CDCFGR2_CDPPRE2) >> RCC_CDCFGR2_CDPPRE2_Pos]) & 0x1FU));
  27526. #endif
  27527. }
  27528. 800be0c: 4618 mov r0, r3
  27529. 800be0e: bd80 pop {r7, pc}
  27530. 800be10: 58024400 .word 0x58024400
  27531. 800be14: 080189c8 .word 0x080189c8
  27532. 0800be18 <HAL_RCC_GetClockConfig>:
  27533. * will be configured.
  27534. * @param pFLatency: Pointer on the Flash Latency.
  27535. * @retval None
  27536. */
  27537. void HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t *pFLatency)
  27538. {
  27539. 800be18: b480 push {r7}
  27540. 800be1a: b083 sub sp, #12
  27541. 800be1c: af00 add r7, sp, #0
  27542. 800be1e: 6078 str r0, [r7, #4]
  27543. 800be20: 6039 str r1, [r7, #0]
  27544. /* Set all possible values for the Clock type parameter --------------------*/
  27545. RCC_ClkInitStruct->ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_D1PCLK1 | RCC_CLOCKTYPE_PCLK1 |
  27546. 800be22: 687b ldr r3, [r7, #4]
  27547. 800be24: 223f movs r2, #63 @ 0x3f
  27548. 800be26: 601a str r2, [r3, #0]
  27549. RCC_CLOCKTYPE_PCLK2 | RCC_CLOCKTYPE_D3PCLK1 ;
  27550. /* Get the SYSCLK configuration --------------------------------------------*/
  27551. RCC_ClkInitStruct->SYSCLKSource = (uint32_t)(RCC->CFGR & RCC_CFGR_SW);
  27552. 800be28: 4b1a ldr r3, [pc, #104] @ (800be94 <HAL_RCC_GetClockConfig+0x7c>)
  27553. 800be2a: 691b ldr r3, [r3, #16]
  27554. 800be2c: f003 0207 and.w r2, r3, #7
  27555. 800be30: 687b ldr r3, [r7, #4]
  27556. 800be32: 605a str r2, [r3, #4]
  27557. #if defined(RCC_D1CFGR_D1CPRE)
  27558. /* Get the SYSCLK configuration ----------------------------------------------*/
  27559. RCC_ClkInitStruct->SYSCLKDivider = (uint32_t)(RCC->D1CFGR & RCC_D1CFGR_D1CPRE);
  27560. 800be34: 4b17 ldr r3, [pc, #92] @ (800be94 <HAL_RCC_GetClockConfig+0x7c>)
  27561. 800be36: 699b ldr r3, [r3, #24]
  27562. 800be38: f403 6270 and.w r2, r3, #3840 @ 0xf00
  27563. 800be3c: 687b ldr r3, [r7, #4]
  27564. 800be3e: 609a str r2, [r3, #8]
  27565. /* Get the D1HCLK configuration ----------------------------------------------*/
  27566. RCC_ClkInitStruct->AHBCLKDivider = (uint32_t)(RCC->D1CFGR & RCC_D1CFGR_HPRE);
  27567. 800be40: 4b14 ldr r3, [pc, #80] @ (800be94 <HAL_RCC_GetClockConfig+0x7c>)
  27568. 800be42: 699b ldr r3, [r3, #24]
  27569. 800be44: f003 020f and.w r2, r3, #15
  27570. 800be48: 687b ldr r3, [r7, #4]
  27571. 800be4a: 60da str r2, [r3, #12]
  27572. /* Get the APB3 configuration ----------------------------------------------*/
  27573. RCC_ClkInitStruct->APB3CLKDivider = (uint32_t)(RCC->D1CFGR & RCC_D1CFGR_D1PPRE);
  27574. 800be4c: 4b11 ldr r3, [pc, #68] @ (800be94 <HAL_RCC_GetClockConfig+0x7c>)
  27575. 800be4e: 699b ldr r3, [r3, #24]
  27576. 800be50: f003 0270 and.w r2, r3, #112 @ 0x70
  27577. 800be54: 687b ldr r3, [r7, #4]
  27578. 800be56: 611a str r2, [r3, #16]
  27579. /* Get the APB1 configuration ----------------------------------------------*/
  27580. RCC_ClkInitStruct->APB1CLKDivider = (uint32_t)(RCC->D2CFGR & RCC_D2CFGR_D2PPRE1);
  27581. 800be58: 4b0e ldr r3, [pc, #56] @ (800be94 <HAL_RCC_GetClockConfig+0x7c>)
  27582. 800be5a: 69db ldr r3, [r3, #28]
  27583. 800be5c: f003 0270 and.w r2, r3, #112 @ 0x70
  27584. 800be60: 687b ldr r3, [r7, #4]
  27585. 800be62: 615a str r2, [r3, #20]
  27586. /* Get the APB2 configuration ----------------------------------------------*/
  27587. RCC_ClkInitStruct->APB2CLKDivider = (uint32_t)(RCC->D2CFGR & RCC_D2CFGR_D2PPRE2);
  27588. 800be64: 4b0b ldr r3, [pc, #44] @ (800be94 <HAL_RCC_GetClockConfig+0x7c>)
  27589. 800be66: 69db ldr r3, [r3, #28]
  27590. 800be68: f403 62e0 and.w r2, r3, #1792 @ 0x700
  27591. 800be6c: 687b ldr r3, [r7, #4]
  27592. 800be6e: 619a str r2, [r3, #24]
  27593. /* Get the APB4 configuration ----------------------------------------------*/
  27594. RCC_ClkInitStruct->APB4CLKDivider = (uint32_t)(RCC->D3CFGR & RCC_D3CFGR_D3PPRE);
  27595. 800be70: 4b08 ldr r3, [pc, #32] @ (800be94 <HAL_RCC_GetClockConfig+0x7c>)
  27596. 800be72: 6a1b ldr r3, [r3, #32]
  27597. 800be74: f003 0270 and.w r2, r3, #112 @ 0x70
  27598. 800be78: 687b ldr r3, [r7, #4]
  27599. 800be7a: 61da str r2, [r3, #28]
  27600. /* Get the APB4 configuration ----------------------------------------------*/
  27601. RCC_ClkInitStruct->APB4CLKDivider = (uint32_t)(RCC->SRDCFGR & RCC_SRDCFGR_SRDPPRE);
  27602. #endif
  27603. /* Get the Flash Wait State (Latency) configuration ------------------------*/
  27604. *pFLatency = (uint32_t)(FLASH->ACR & FLASH_ACR_LATENCY);
  27605. 800be7c: 4b06 ldr r3, [pc, #24] @ (800be98 <HAL_RCC_GetClockConfig+0x80>)
  27606. 800be7e: 681b ldr r3, [r3, #0]
  27607. 800be80: f003 020f and.w r2, r3, #15
  27608. 800be84: 683b ldr r3, [r7, #0]
  27609. 800be86: 601a str r2, [r3, #0]
  27610. }
  27611. 800be88: bf00 nop
  27612. 800be8a: 370c adds r7, #12
  27613. 800be8c: 46bd mov sp, r7
  27614. 800be8e: f85d 7b04 ldr.w r7, [sp], #4
  27615. 800be92: 4770 bx lr
  27616. 800be94: 58024400 .word 0x58024400
  27617. 800be98: 52002000 .word 0x52002000
  27618. 0800be9c <HAL_RCCEx_PeriphCLKConfig>:
  27619. * (*) : Available on some STM32H7 lines only.
  27620. *
  27621. * @retval HAL status
  27622. */
  27623. HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit)
  27624. {
  27625. 800be9c: e92d 4fb0 stmdb sp!, {r4, r5, r7, r8, r9, sl, fp, lr}
  27626. 800bea0: b0c8 sub sp, #288 @ 0x120
  27627. 800bea2: af00 add r7, sp, #0
  27628. 800bea4: f8c7 010c str.w r0, [r7, #268] @ 0x10c
  27629. uint32_t tmpreg;
  27630. uint32_t tickstart;
  27631. HAL_StatusTypeDef ret = HAL_OK; /* Intermediate status */
  27632. 800bea8: 2300 movs r3, #0
  27633. 800beaa: f887 311f strb.w r3, [r7, #287] @ 0x11f
  27634. HAL_StatusTypeDef status = HAL_OK; /* Final status */
  27635. 800beae: 2300 movs r3, #0
  27636. 800beb0: f887 311e strb.w r3, [r7, #286] @ 0x11e
  27637. /*---------------------------- SPDIFRX configuration -------------------------------*/
  27638. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SPDIFRX) == RCC_PERIPHCLK_SPDIFRX)
  27639. 800beb4: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27640. 800beb8: e9d3 2300 ldrd r2, r3, [r3]
  27641. 800bebc: f002 6400 and.w r4, r2, #134217728 @ 0x8000000
  27642. 800bec0: 2500 movs r5, #0
  27643. 800bec2: ea54 0305 orrs.w r3, r4, r5
  27644. 800bec6: d049 beq.n 800bf5c <HAL_RCCEx_PeriphCLKConfig+0xc0>
  27645. {
  27646. switch (PeriphClkInit->SpdifrxClockSelection)
  27647. 800bec8: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27648. 800becc: 6e9b ldr r3, [r3, #104] @ 0x68
  27649. 800bece: f5b3 1f40 cmp.w r3, #3145728 @ 0x300000
  27650. 800bed2: d02f beq.n 800bf34 <HAL_RCCEx_PeriphCLKConfig+0x98>
  27651. 800bed4: f5b3 1f40 cmp.w r3, #3145728 @ 0x300000
  27652. 800bed8: d828 bhi.n 800bf2c <HAL_RCCEx_PeriphCLKConfig+0x90>
  27653. 800beda: f5b3 1f00 cmp.w r3, #2097152 @ 0x200000
  27654. 800bede: d01a beq.n 800bf16 <HAL_RCCEx_PeriphCLKConfig+0x7a>
  27655. 800bee0: f5b3 1f00 cmp.w r3, #2097152 @ 0x200000
  27656. 800bee4: d822 bhi.n 800bf2c <HAL_RCCEx_PeriphCLKConfig+0x90>
  27657. 800bee6: 2b00 cmp r3, #0
  27658. 800bee8: d003 beq.n 800bef2 <HAL_RCCEx_PeriphCLKConfig+0x56>
  27659. 800beea: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
  27660. 800beee: d007 beq.n 800bf00 <HAL_RCCEx_PeriphCLKConfig+0x64>
  27661. 800bef0: e01c b.n 800bf2c <HAL_RCCEx_PeriphCLKConfig+0x90>
  27662. {
  27663. case RCC_SPDIFRXCLKSOURCE_PLL: /* PLL is used as clock source for SPDIFRX*/
  27664. /* Enable PLL1Q Clock output generated form System PLL . */
  27665. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  27666. 800bef2: 4bb8 ldr r3, [pc, #736] @ (800c1d4 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  27667. 800bef4: 6adb ldr r3, [r3, #44] @ 0x2c
  27668. 800bef6: 4ab7 ldr r2, [pc, #732] @ (800c1d4 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  27669. 800bef8: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  27670. 800befc: 62d3 str r3, [r2, #44] @ 0x2c
  27671. /* SPDIFRX clock source configuration done later after clock selection check */
  27672. break;
  27673. 800befe: e01a b.n 800bf36 <HAL_RCCEx_PeriphCLKConfig+0x9a>
  27674. case RCC_SPDIFRXCLKSOURCE_PLL2: /* PLL2 is used as clock source for SPDIFRX*/
  27675. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_R_UPDATE);
  27676. 800bf00: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27677. 800bf04: 3308 adds r3, #8
  27678. 800bf06: 2102 movs r1, #2
  27679. 800bf08: 4618 mov r0, r3
  27680. 800bf0a: f002 fb45 bl 800e598 <RCCEx_PLL2_Config>
  27681. 800bf0e: 4603 mov r3, r0
  27682. 800bf10: f887 311f strb.w r3, [r7, #287] @ 0x11f
  27683. /* SPDIFRX clock source configuration done later after clock selection check */
  27684. break;
  27685. 800bf14: e00f b.n 800bf36 <HAL_RCCEx_PeriphCLKConfig+0x9a>
  27686. case RCC_SPDIFRXCLKSOURCE_PLL3: /* PLL3 is used as clock source for SPDIFRX*/
  27687. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE);
  27688. 800bf16: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27689. 800bf1a: 3328 adds r3, #40 @ 0x28
  27690. 800bf1c: 2102 movs r1, #2
  27691. 800bf1e: 4618 mov r0, r3
  27692. 800bf20: f002 fbec bl 800e6fc <RCCEx_PLL3_Config>
  27693. 800bf24: 4603 mov r3, r0
  27694. 800bf26: f887 311f strb.w r3, [r7, #287] @ 0x11f
  27695. /* SPDIFRX clock source configuration done later after clock selection check */
  27696. break;
  27697. 800bf2a: e004 b.n 800bf36 <HAL_RCCEx_PeriphCLKConfig+0x9a>
  27698. /* Internal OSC clock is used as source of SPDIFRX clock*/
  27699. /* SPDIFRX clock source configuration done later after clock selection check */
  27700. break;
  27701. default:
  27702. ret = HAL_ERROR;
  27703. 800bf2c: 2301 movs r3, #1
  27704. 800bf2e: f887 311f strb.w r3, [r7, #287] @ 0x11f
  27705. break;
  27706. 800bf32: e000 b.n 800bf36 <HAL_RCCEx_PeriphCLKConfig+0x9a>
  27707. break;
  27708. 800bf34: bf00 nop
  27709. }
  27710. if (ret == HAL_OK)
  27711. 800bf36: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  27712. 800bf3a: 2b00 cmp r3, #0
  27713. 800bf3c: d10a bne.n 800bf54 <HAL_RCCEx_PeriphCLKConfig+0xb8>
  27714. {
  27715. /* Set the source of SPDIFRX clock*/
  27716. __HAL_RCC_SPDIFRX_CONFIG(PeriphClkInit->SpdifrxClockSelection);
  27717. 800bf3e: 4ba5 ldr r3, [pc, #660] @ (800c1d4 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  27718. 800bf40: 6d1b ldr r3, [r3, #80] @ 0x50
  27719. 800bf42: f423 1140 bic.w r1, r3, #3145728 @ 0x300000
  27720. 800bf46: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27721. 800bf4a: 6e9b ldr r3, [r3, #104] @ 0x68
  27722. 800bf4c: 4aa1 ldr r2, [pc, #644] @ (800c1d4 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  27723. 800bf4e: 430b orrs r3, r1
  27724. 800bf50: 6513 str r3, [r2, #80] @ 0x50
  27725. 800bf52: e003 b.n 800bf5c <HAL_RCCEx_PeriphCLKConfig+0xc0>
  27726. }
  27727. else
  27728. {
  27729. /* set overall return value */
  27730. status = ret;
  27731. 800bf54: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  27732. 800bf58: f887 311e strb.w r3, [r7, #286] @ 0x11e
  27733. }
  27734. }
  27735. /*---------------------------- SAI1 configuration -------------------------------*/
  27736. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI1) == RCC_PERIPHCLK_SAI1)
  27737. 800bf5c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27738. 800bf60: e9d3 2300 ldrd r2, r3, [r3]
  27739. 800bf64: f402 7880 and.w r8, r2, #256 @ 0x100
  27740. 800bf68: f04f 0900 mov.w r9, #0
  27741. 800bf6c: ea58 0309 orrs.w r3, r8, r9
  27742. 800bf70: d047 beq.n 800c002 <HAL_RCCEx_PeriphCLKConfig+0x166>
  27743. {
  27744. switch (PeriphClkInit->Sai1ClockSelection)
  27745. 800bf72: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27746. 800bf76: 6d9b ldr r3, [r3, #88] @ 0x58
  27747. 800bf78: 2b04 cmp r3, #4
  27748. 800bf7a: d82a bhi.n 800bfd2 <HAL_RCCEx_PeriphCLKConfig+0x136>
  27749. 800bf7c: a201 add r2, pc, #4 @ (adr r2, 800bf84 <HAL_RCCEx_PeriphCLKConfig+0xe8>)
  27750. 800bf7e: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  27751. 800bf82: bf00 nop
  27752. 800bf84: 0800bf99 .word 0x0800bf99
  27753. 800bf88: 0800bfa7 .word 0x0800bfa7
  27754. 800bf8c: 0800bfbd .word 0x0800bfbd
  27755. 800bf90: 0800bfdb .word 0x0800bfdb
  27756. 800bf94: 0800bfdb .word 0x0800bfdb
  27757. {
  27758. case RCC_SAI1CLKSOURCE_PLL: /* PLL is used as clock source for SAI1*/
  27759. /* Enable SAI Clock output generated form System PLL . */
  27760. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  27761. 800bf98: 4b8e ldr r3, [pc, #568] @ (800c1d4 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  27762. 800bf9a: 6adb ldr r3, [r3, #44] @ 0x2c
  27763. 800bf9c: 4a8d ldr r2, [pc, #564] @ (800c1d4 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  27764. 800bf9e: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  27765. 800bfa2: 62d3 str r3, [r2, #44] @ 0x2c
  27766. /* SAI1 clock source configuration done later after clock selection check */
  27767. break;
  27768. 800bfa4: e01a b.n 800bfdc <HAL_RCCEx_PeriphCLKConfig+0x140>
  27769. case RCC_SAI1CLKSOURCE_PLL2: /* PLL2 is used as clock source for SAI1*/
  27770. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  27771. 800bfa6: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27772. 800bfaa: 3308 adds r3, #8
  27773. 800bfac: 2100 movs r1, #0
  27774. 800bfae: 4618 mov r0, r3
  27775. 800bfb0: f002 faf2 bl 800e598 <RCCEx_PLL2_Config>
  27776. 800bfb4: 4603 mov r3, r0
  27777. 800bfb6: f887 311f strb.w r3, [r7, #287] @ 0x11f
  27778. /* SAI1 clock source configuration done later after clock selection check */
  27779. break;
  27780. 800bfba: e00f b.n 800bfdc <HAL_RCCEx_PeriphCLKConfig+0x140>
  27781. case RCC_SAI1CLKSOURCE_PLL3: /* PLL3 is used as clock source for SAI1*/
  27782. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
  27783. 800bfbc: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27784. 800bfc0: 3328 adds r3, #40 @ 0x28
  27785. 800bfc2: 2100 movs r1, #0
  27786. 800bfc4: 4618 mov r0, r3
  27787. 800bfc6: f002 fb99 bl 800e6fc <RCCEx_PLL3_Config>
  27788. 800bfca: 4603 mov r3, r0
  27789. 800bfcc: f887 311f strb.w r3, [r7, #287] @ 0x11f
  27790. /* SAI1 clock source configuration done later after clock selection check */
  27791. break;
  27792. 800bfd0: e004 b.n 800bfdc <HAL_RCCEx_PeriphCLKConfig+0x140>
  27793. /* HSI, HSE, or CSI oscillator is used as source of SAI1 clock */
  27794. /* SAI1 clock source configuration done later after clock selection check */
  27795. break;
  27796. default:
  27797. ret = HAL_ERROR;
  27798. 800bfd2: 2301 movs r3, #1
  27799. 800bfd4: f887 311f strb.w r3, [r7, #287] @ 0x11f
  27800. break;
  27801. 800bfd8: e000 b.n 800bfdc <HAL_RCCEx_PeriphCLKConfig+0x140>
  27802. break;
  27803. 800bfda: bf00 nop
  27804. }
  27805. if (ret == HAL_OK)
  27806. 800bfdc: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  27807. 800bfe0: 2b00 cmp r3, #0
  27808. 800bfe2: d10a bne.n 800bffa <HAL_RCCEx_PeriphCLKConfig+0x15e>
  27809. {
  27810. /* Set the source of SAI1 clock*/
  27811. __HAL_RCC_SAI1_CONFIG(PeriphClkInit->Sai1ClockSelection);
  27812. 800bfe4: 4b7b ldr r3, [pc, #492] @ (800c1d4 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  27813. 800bfe6: 6d1b ldr r3, [r3, #80] @ 0x50
  27814. 800bfe8: f023 0107 bic.w r1, r3, #7
  27815. 800bfec: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27816. 800bff0: 6d9b ldr r3, [r3, #88] @ 0x58
  27817. 800bff2: 4a78 ldr r2, [pc, #480] @ (800c1d4 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  27818. 800bff4: 430b orrs r3, r1
  27819. 800bff6: 6513 str r3, [r2, #80] @ 0x50
  27820. 800bff8: e003 b.n 800c002 <HAL_RCCEx_PeriphCLKConfig+0x166>
  27821. }
  27822. else
  27823. {
  27824. /* set overall return value */
  27825. status = ret;
  27826. 800bffa: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  27827. 800bffe: f887 311e strb.w r3, [r7, #286] @ 0x11e
  27828. }
  27829. }
  27830. #if defined(SAI3)
  27831. /*---------------------------- SAI2/3 configuration -------------------------------*/
  27832. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI23) == RCC_PERIPHCLK_SAI23)
  27833. 800c002: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27834. 800c006: e9d3 2300 ldrd r2, r3, [r3]
  27835. 800c00a: f402 7a00 and.w sl, r2, #512 @ 0x200
  27836. 800c00e: f04f 0b00 mov.w fp, #0
  27837. 800c012: ea5a 030b orrs.w r3, sl, fp
  27838. 800c016: d04c beq.n 800c0b2 <HAL_RCCEx_PeriphCLKConfig+0x216>
  27839. {
  27840. switch (PeriphClkInit->Sai23ClockSelection)
  27841. 800c018: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27842. 800c01c: 6ddb ldr r3, [r3, #92] @ 0x5c
  27843. 800c01e: f5b3 7f80 cmp.w r3, #256 @ 0x100
  27844. 800c022: d030 beq.n 800c086 <HAL_RCCEx_PeriphCLKConfig+0x1ea>
  27845. 800c024: f5b3 7f80 cmp.w r3, #256 @ 0x100
  27846. 800c028: d829 bhi.n 800c07e <HAL_RCCEx_PeriphCLKConfig+0x1e2>
  27847. 800c02a: 2bc0 cmp r3, #192 @ 0xc0
  27848. 800c02c: d02d beq.n 800c08a <HAL_RCCEx_PeriphCLKConfig+0x1ee>
  27849. 800c02e: 2bc0 cmp r3, #192 @ 0xc0
  27850. 800c030: d825 bhi.n 800c07e <HAL_RCCEx_PeriphCLKConfig+0x1e2>
  27851. 800c032: 2b80 cmp r3, #128 @ 0x80
  27852. 800c034: d018 beq.n 800c068 <HAL_RCCEx_PeriphCLKConfig+0x1cc>
  27853. 800c036: 2b80 cmp r3, #128 @ 0x80
  27854. 800c038: d821 bhi.n 800c07e <HAL_RCCEx_PeriphCLKConfig+0x1e2>
  27855. 800c03a: 2b00 cmp r3, #0
  27856. 800c03c: d002 beq.n 800c044 <HAL_RCCEx_PeriphCLKConfig+0x1a8>
  27857. 800c03e: 2b40 cmp r3, #64 @ 0x40
  27858. 800c040: d007 beq.n 800c052 <HAL_RCCEx_PeriphCLKConfig+0x1b6>
  27859. 800c042: e01c b.n 800c07e <HAL_RCCEx_PeriphCLKConfig+0x1e2>
  27860. {
  27861. case RCC_SAI23CLKSOURCE_PLL: /* PLL is used as clock source for SAI2/3 */
  27862. /* Enable SAI Clock output generated form System PLL . */
  27863. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  27864. 800c044: 4b63 ldr r3, [pc, #396] @ (800c1d4 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  27865. 800c046: 6adb ldr r3, [r3, #44] @ 0x2c
  27866. 800c048: 4a62 ldr r2, [pc, #392] @ (800c1d4 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  27867. 800c04a: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  27868. 800c04e: 62d3 str r3, [r2, #44] @ 0x2c
  27869. /* SAI2/3 clock source configuration done later after clock selection check */
  27870. break;
  27871. 800c050: e01c b.n 800c08c <HAL_RCCEx_PeriphCLKConfig+0x1f0>
  27872. case RCC_SAI23CLKSOURCE_PLL2: /* PLL2 is used as clock source for SAI2/3 */
  27873. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  27874. 800c052: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27875. 800c056: 3308 adds r3, #8
  27876. 800c058: 2100 movs r1, #0
  27877. 800c05a: 4618 mov r0, r3
  27878. 800c05c: f002 fa9c bl 800e598 <RCCEx_PLL2_Config>
  27879. 800c060: 4603 mov r3, r0
  27880. 800c062: f887 311f strb.w r3, [r7, #287] @ 0x11f
  27881. /* SAI2/3 clock source configuration done later after clock selection check */
  27882. break;
  27883. 800c066: e011 b.n 800c08c <HAL_RCCEx_PeriphCLKConfig+0x1f0>
  27884. case RCC_SAI23CLKSOURCE_PLL3: /* PLL3 is used as clock source for SAI2/3 */
  27885. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
  27886. 800c068: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27887. 800c06c: 3328 adds r3, #40 @ 0x28
  27888. 800c06e: 2100 movs r1, #0
  27889. 800c070: 4618 mov r0, r3
  27890. 800c072: f002 fb43 bl 800e6fc <RCCEx_PLL3_Config>
  27891. 800c076: 4603 mov r3, r0
  27892. 800c078: f887 311f strb.w r3, [r7, #287] @ 0x11f
  27893. /* SAI2/3 clock source configuration done later after clock selection check */
  27894. break;
  27895. 800c07c: e006 b.n 800c08c <HAL_RCCEx_PeriphCLKConfig+0x1f0>
  27896. /* HSI, HSE, or CSI oscillator is used as source of SAI2/3 clock */
  27897. /* SAI2/3 clock source configuration done later after clock selection check */
  27898. break;
  27899. default:
  27900. ret = HAL_ERROR;
  27901. 800c07e: 2301 movs r3, #1
  27902. 800c080: f887 311f strb.w r3, [r7, #287] @ 0x11f
  27903. break;
  27904. 800c084: e002 b.n 800c08c <HAL_RCCEx_PeriphCLKConfig+0x1f0>
  27905. break;
  27906. 800c086: bf00 nop
  27907. 800c088: e000 b.n 800c08c <HAL_RCCEx_PeriphCLKConfig+0x1f0>
  27908. break;
  27909. 800c08a: bf00 nop
  27910. }
  27911. if (ret == HAL_OK)
  27912. 800c08c: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  27913. 800c090: 2b00 cmp r3, #0
  27914. 800c092: d10a bne.n 800c0aa <HAL_RCCEx_PeriphCLKConfig+0x20e>
  27915. {
  27916. /* Set the source of SAI2/3 clock*/
  27917. __HAL_RCC_SAI23_CONFIG(PeriphClkInit->Sai23ClockSelection);
  27918. 800c094: 4b4f ldr r3, [pc, #316] @ (800c1d4 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  27919. 800c096: 6d1b ldr r3, [r3, #80] @ 0x50
  27920. 800c098: f423 71e0 bic.w r1, r3, #448 @ 0x1c0
  27921. 800c09c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27922. 800c0a0: 6ddb ldr r3, [r3, #92] @ 0x5c
  27923. 800c0a2: 4a4c ldr r2, [pc, #304] @ (800c1d4 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  27924. 800c0a4: 430b orrs r3, r1
  27925. 800c0a6: 6513 str r3, [r2, #80] @ 0x50
  27926. 800c0a8: e003 b.n 800c0b2 <HAL_RCCEx_PeriphCLKConfig+0x216>
  27927. }
  27928. else
  27929. {
  27930. /* set overall return value */
  27931. status = ret;
  27932. 800c0aa: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  27933. 800c0ae: f887 311e strb.w r3, [r7, #286] @ 0x11e
  27934. }
  27935. #endif /*SAI2B*/
  27936. #if defined(SAI4)
  27937. /*---------------------------- SAI4A configuration -------------------------------*/
  27938. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI4A) == RCC_PERIPHCLK_SAI4A)
  27939. 800c0b2: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27940. 800c0b6: e9d3 2300 ldrd r2, r3, [r3]
  27941. 800c0ba: f402 6380 and.w r3, r2, #1024 @ 0x400
  27942. 800c0be: f8c7 3100 str.w r3, [r7, #256] @ 0x100
  27943. 800c0c2: 2300 movs r3, #0
  27944. 800c0c4: f8c7 3104 str.w r3, [r7, #260] @ 0x104
  27945. 800c0c8: e9d7 1240 ldrd r1, r2, [r7, #256] @ 0x100
  27946. 800c0cc: 460b mov r3, r1
  27947. 800c0ce: 4313 orrs r3, r2
  27948. 800c0d0: d053 beq.n 800c17a <HAL_RCCEx_PeriphCLKConfig+0x2de>
  27949. {
  27950. switch (PeriphClkInit->Sai4AClockSelection)
  27951. 800c0d2: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27952. 800c0d6: f8d3 30a8 ldr.w r3, [r3, #168] @ 0xa8
  27953. 800c0da: f5b3 0f00 cmp.w r3, #8388608 @ 0x800000
  27954. 800c0de: d035 beq.n 800c14c <HAL_RCCEx_PeriphCLKConfig+0x2b0>
  27955. 800c0e0: f5b3 0f00 cmp.w r3, #8388608 @ 0x800000
  27956. 800c0e4: d82e bhi.n 800c144 <HAL_RCCEx_PeriphCLKConfig+0x2a8>
  27957. 800c0e6: f5b3 0fc0 cmp.w r3, #6291456 @ 0x600000
  27958. 800c0ea: d031 beq.n 800c150 <HAL_RCCEx_PeriphCLKConfig+0x2b4>
  27959. 800c0ec: f5b3 0fc0 cmp.w r3, #6291456 @ 0x600000
  27960. 800c0f0: d828 bhi.n 800c144 <HAL_RCCEx_PeriphCLKConfig+0x2a8>
  27961. 800c0f2: f5b3 0f80 cmp.w r3, #4194304 @ 0x400000
  27962. 800c0f6: d01a beq.n 800c12e <HAL_RCCEx_PeriphCLKConfig+0x292>
  27963. 800c0f8: f5b3 0f80 cmp.w r3, #4194304 @ 0x400000
  27964. 800c0fc: d822 bhi.n 800c144 <HAL_RCCEx_PeriphCLKConfig+0x2a8>
  27965. 800c0fe: 2b00 cmp r3, #0
  27966. 800c100: d003 beq.n 800c10a <HAL_RCCEx_PeriphCLKConfig+0x26e>
  27967. 800c102: f5b3 1f00 cmp.w r3, #2097152 @ 0x200000
  27968. 800c106: d007 beq.n 800c118 <HAL_RCCEx_PeriphCLKConfig+0x27c>
  27969. 800c108: e01c b.n 800c144 <HAL_RCCEx_PeriphCLKConfig+0x2a8>
  27970. {
  27971. case RCC_SAI4ACLKSOURCE_PLL: /* PLL is used as clock source for SAI2*/
  27972. /* Enable SAI Clock output generated form System PLL . */
  27973. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  27974. 800c10a: 4b32 ldr r3, [pc, #200] @ (800c1d4 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  27975. 800c10c: 6adb ldr r3, [r3, #44] @ 0x2c
  27976. 800c10e: 4a31 ldr r2, [pc, #196] @ (800c1d4 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  27977. 800c110: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  27978. 800c114: 62d3 str r3, [r2, #44] @ 0x2c
  27979. /* SAI1 clock source configuration done later after clock selection check */
  27980. break;
  27981. 800c116: e01c b.n 800c152 <HAL_RCCEx_PeriphCLKConfig+0x2b6>
  27982. case RCC_SAI4ACLKSOURCE_PLL2: /* PLL2 is used as clock source for SAI2*/
  27983. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  27984. 800c118: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27985. 800c11c: 3308 adds r3, #8
  27986. 800c11e: 2100 movs r1, #0
  27987. 800c120: 4618 mov r0, r3
  27988. 800c122: f002 fa39 bl 800e598 <RCCEx_PLL2_Config>
  27989. 800c126: 4603 mov r3, r0
  27990. 800c128: f887 311f strb.w r3, [r7, #287] @ 0x11f
  27991. /* SAI2 clock source configuration done later after clock selection check */
  27992. break;
  27993. 800c12c: e011 b.n 800c152 <HAL_RCCEx_PeriphCLKConfig+0x2b6>
  27994. case RCC_SAI4ACLKSOURCE_PLL3: /* PLL3 is used as clock source for SAI2*/
  27995. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
  27996. 800c12e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  27997. 800c132: 3328 adds r3, #40 @ 0x28
  27998. 800c134: 2100 movs r1, #0
  27999. 800c136: 4618 mov r0, r3
  28000. 800c138: f002 fae0 bl 800e6fc <RCCEx_PLL3_Config>
  28001. 800c13c: 4603 mov r3, r0
  28002. 800c13e: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28003. /* SAI1 clock source configuration done later after clock selection check */
  28004. break;
  28005. 800c142: e006 b.n 800c152 <HAL_RCCEx_PeriphCLKConfig+0x2b6>
  28006. /* SAI4A clock source configuration done later after clock selection check */
  28007. break;
  28008. #endif /* RCC_VER_3_0 */
  28009. default:
  28010. ret = HAL_ERROR;
  28011. 800c144: 2301 movs r3, #1
  28012. 800c146: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28013. break;
  28014. 800c14a: e002 b.n 800c152 <HAL_RCCEx_PeriphCLKConfig+0x2b6>
  28015. break;
  28016. 800c14c: bf00 nop
  28017. 800c14e: e000 b.n 800c152 <HAL_RCCEx_PeriphCLKConfig+0x2b6>
  28018. break;
  28019. 800c150: bf00 nop
  28020. }
  28021. if (ret == HAL_OK)
  28022. 800c152: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28023. 800c156: 2b00 cmp r3, #0
  28024. 800c158: d10b bne.n 800c172 <HAL_RCCEx_PeriphCLKConfig+0x2d6>
  28025. {
  28026. /* Set the source of SAI4A clock*/
  28027. __HAL_RCC_SAI4A_CONFIG(PeriphClkInit->Sai4AClockSelection);
  28028. 800c15a: 4b1e ldr r3, [pc, #120] @ (800c1d4 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  28029. 800c15c: 6d9b ldr r3, [r3, #88] @ 0x58
  28030. 800c15e: f423 0160 bic.w r1, r3, #14680064 @ 0xe00000
  28031. 800c162: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28032. 800c166: f8d3 30a8 ldr.w r3, [r3, #168] @ 0xa8
  28033. 800c16a: 4a1a ldr r2, [pc, #104] @ (800c1d4 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  28034. 800c16c: 430b orrs r3, r1
  28035. 800c16e: 6593 str r3, [r2, #88] @ 0x58
  28036. 800c170: e003 b.n 800c17a <HAL_RCCEx_PeriphCLKConfig+0x2de>
  28037. }
  28038. else
  28039. {
  28040. /* set overall return value */
  28041. status = ret;
  28042. 800c172: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28043. 800c176: f887 311e strb.w r3, [r7, #286] @ 0x11e
  28044. }
  28045. }
  28046. /*---------------------------- SAI4B configuration -------------------------------*/
  28047. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI4B) == RCC_PERIPHCLK_SAI4B)
  28048. 800c17a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28049. 800c17e: e9d3 2300 ldrd r2, r3, [r3]
  28050. 800c182: f402 6300 and.w r3, r2, #2048 @ 0x800
  28051. 800c186: f8c7 30f8 str.w r3, [r7, #248] @ 0xf8
  28052. 800c18a: 2300 movs r3, #0
  28053. 800c18c: f8c7 30fc str.w r3, [r7, #252] @ 0xfc
  28054. 800c190: e9d7 123e ldrd r1, r2, [r7, #248] @ 0xf8
  28055. 800c194: 460b mov r3, r1
  28056. 800c196: 4313 orrs r3, r2
  28057. 800c198: d056 beq.n 800c248 <HAL_RCCEx_PeriphCLKConfig+0x3ac>
  28058. {
  28059. switch (PeriphClkInit->Sai4BClockSelection)
  28060. 800c19a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28061. 800c19e: f8d3 30ac ldr.w r3, [r3, #172] @ 0xac
  28062. 800c1a2: f1b3 6f80 cmp.w r3, #67108864 @ 0x4000000
  28063. 800c1a6: d038 beq.n 800c21a <HAL_RCCEx_PeriphCLKConfig+0x37e>
  28064. 800c1a8: f1b3 6f80 cmp.w r3, #67108864 @ 0x4000000
  28065. 800c1ac: d831 bhi.n 800c212 <HAL_RCCEx_PeriphCLKConfig+0x376>
  28066. 800c1ae: f1b3 7f40 cmp.w r3, #50331648 @ 0x3000000
  28067. 800c1b2: d034 beq.n 800c21e <HAL_RCCEx_PeriphCLKConfig+0x382>
  28068. 800c1b4: f1b3 7f40 cmp.w r3, #50331648 @ 0x3000000
  28069. 800c1b8: d82b bhi.n 800c212 <HAL_RCCEx_PeriphCLKConfig+0x376>
  28070. 800c1ba: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  28071. 800c1be: d01d beq.n 800c1fc <HAL_RCCEx_PeriphCLKConfig+0x360>
  28072. 800c1c0: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  28073. 800c1c4: d825 bhi.n 800c212 <HAL_RCCEx_PeriphCLKConfig+0x376>
  28074. 800c1c6: 2b00 cmp r3, #0
  28075. 800c1c8: d006 beq.n 800c1d8 <HAL_RCCEx_PeriphCLKConfig+0x33c>
  28076. 800c1ca: f1b3 7f80 cmp.w r3, #16777216 @ 0x1000000
  28077. 800c1ce: d00a beq.n 800c1e6 <HAL_RCCEx_PeriphCLKConfig+0x34a>
  28078. 800c1d0: e01f b.n 800c212 <HAL_RCCEx_PeriphCLKConfig+0x376>
  28079. 800c1d2: bf00 nop
  28080. 800c1d4: 58024400 .word 0x58024400
  28081. {
  28082. case RCC_SAI4BCLKSOURCE_PLL: /* PLL is used as clock source for SAI2*/
  28083. /* Enable SAI Clock output generated form System PLL . */
  28084. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  28085. 800c1d8: 4ba2 ldr r3, [pc, #648] @ (800c464 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  28086. 800c1da: 6adb ldr r3, [r3, #44] @ 0x2c
  28087. 800c1dc: 4aa1 ldr r2, [pc, #644] @ (800c464 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  28088. 800c1de: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  28089. 800c1e2: 62d3 str r3, [r2, #44] @ 0x2c
  28090. /* SAI1 clock source configuration done later after clock selection check */
  28091. break;
  28092. 800c1e4: e01c b.n 800c220 <HAL_RCCEx_PeriphCLKConfig+0x384>
  28093. case RCC_SAI4BCLKSOURCE_PLL2: /* PLL2 is used as clock source for SAI2*/
  28094. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  28095. 800c1e6: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28096. 800c1ea: 3308 adds r3, #8
  28097. 800c1ec: 2100 movs r1, #0
  28098. 800c1ee: 4618 mov r0, r3
  28099. 800c1f0: f002 f9d2 bl 800e598 <RCCEx_PLL2_Config>
  28100. 800c1f4: 4603 mov r3, r0
  28101. 800c1f6: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28102. /* SAI2 clock source configuration done later after clock selection check */
  28103. break;
  28104. 800c1fa: e011 b.n 800c220 <HAL_RCCEx_PeriphCLKConfig+0x384>
  28105. case RCC_SAI4BCLKSOURCE_PLL3: /* PLL3 is used as clock source for SAI2*/
  28106. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
  28107. 800c1fc: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28108. 800c200: 3328 adds r3, #40 @ 0x28
  28109. 800c202: 2100 movs r1, #0
  28110. 800c204: 4618 mov r0, r3
  28111. 800c206: f002 fa79 bl 800e6fc <RCCEx_PLL3_Config>
  28112. 800c20a: 4603 mov r3, r0
  28113. 800c20c: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28114. /* SAI1 clock source configuration done later after clock selection check */
  28115. break;
  28116. 800c210: e006 b.n 800c220 <HAL_RCCEx_PeriphCLKConfig+0x384>
  28117. /* SAI4B clock source configuration done later after clock selection check */
  28118. break;
  28119. #endif /* RCC_VER_3_0 */
  28120. default:
  28121. ret = HAL_ERROR;
  28122. 800c212: 2301 movs r3, #1
  28123. 800c214: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28124. break;
  28125. 800c218: e002 b.n 800c220 <HAL_RCCEx_PeriphCLKConfig+0x384>
  28126. break;
  28127. 800c21a: bf00 nop
  28128. 800c21c: e000 b.n 800c220 <HAL_RCCEx_PeriphCLKConfig+0x384>
  28129. break;
  28130. 800c21e: bf00 nop
  28131. }
  28132. if (ret == HAL_OK)
  28133. 800c220: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28134. 800c224: 2b00 cmp r3, #0
  28135. 800c226: d10b bne.n 800c240 <HAL_RCCEx_PeriphCLKConfig+0x3a4>
  28136. {
  28137. /* Set the source of SAI4B clock*/
  28138. __HAL_RCC_SAI4B_CONFIG(PeriphClkInit->Sai4BClockSelection);
  28139. 800c228: 4b8e ldr r3, [pc, #568] @ (800c464 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  28140. 800c22a: 6d9b ldr r3, [r3, #88] @ 0x58
  28141. 800c22c: f023 61e0 bic.w r1, r3, #117440512 @ 0x7000000
  28142. 800c230: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28143. 800c234: f8d3 30ac ldr.w r3, [r3, #172] @ 0xac
  28144. 800c238: 4a8a ldr r2, [pc, #552] @ (800c464 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  28145. 800c23a: 430b orrs r3, r1
  28146. 800c23c: 6593 str r3, [r2, #88] @ 0x58
  28147. 800c23e: e003 b.n 800c248 <HAL_RCCEx_PeriphCLKConfig+0x3ac>
  28148. }
  28149. else
  28150. {
  28151. /* set overall return value */
  28152. status = ret;
  28153. 800c240: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28154. 800c244: f887 311e strb.w r3, [r7, #286] @ 0x11e
  28155. }
  28156. #endif /*SAI4*/
  28157. #if defined(QUADSPI)
  28158. /*---------------------------- QSPI configuration -------------------------------*/
  28159. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_QSPI) == RCC_PERIPHCLK_QSPI)
  28160. 800c248: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28161. 800c24c: e9d3 2300 ldrd r2, r3, [r3]
  28162. 800c250: f002 7300 and.w r3, r2, #33554432 @ 0x2000000
  28163. 800c254: f8c7 30f0 str.w r3, [r7, #240] @ 0xf0
  28164. 800c258: 2300 movs r3, #0
  28165. 800c25a: f8c7 30f4 str.w r3, [r7, #244] @ 0xf4
  28166. 800c25e: e9d7 123c ldrd r1, r2, [r7, #240] @ 0xf0
  28167. 800c262: 460b mov r3, r1
  28168. 800c264: 4313 orrs r3, r2
  28169. 800c266: d03a beq.n 800c2de <HAL_RCCEx_PeriphCLKConfig+0x442>
  28170. {
  28171. switch (PeriphClkInit->QspiClockSelection)
  28172. 800c268: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28173. 800c26c: 6cdb ldr r3, [r3, #76] @ 0x4c
  28174. 800c26e: 2b30 cmp r3, #48 @ 0x30
  28175. 800c270: d01f beq.n 800c2b2 <HAL_RCCEx_PeriphCLKConfig+0x416>
  28176. 800c272: 2b30 cmp r3, #48 @ 0x30
  28177. 800c274: d819 bhi.n 800c2aa <HAL_RCCEx_PeriphCLKConfig+0x40e>
  28178. 800c276: 2b20 cmp r3, #32
  28179. 800c278: d00c beq.n 800c294 <HAL_RCCEx_PeriphCLKConfig+0x3f8>
  28180. 800c27a: 2b20 cmp r3, #32
  28181. 800c27c: d815 bhi.n 800c2aa <HAL_RCCEx_PeriphCLKConfig+0x40e>
  28182. 800c27e: 2b00 cmp r3, #0
  28183. 800c280: d019 beq.n 800c2b6 <HAL_RCCEx_PeriphCLKConfig+0x41a>
  28184. 800c282: 2b10 cmp r3, #16
  28185. 800c284: d111 bne.n 800c2aa <HAL_RCCEx_PeriphCLKConfig+0x40e>
  28186. {
  28187. case RCC_QSPICLKSOURCE_PLL: /* PLL is used as clock source for QSPI*/
  28188. /* Enable QSPI Clock output generated form System PLL . */
  28189. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  28190. 800c286: 4b77 ldr r3, [pc, #476] @ (800c464 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  28191. 800c288: 6adb ldr r3, [r3, #44] @ 0x2c
  28192. 800c28a: 4a76 ldr r2, [pc, #472] @ (800c464 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  28193. 800c28c: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  28194. 800c290: 62d3 str r3, [r2, #44] @ 0x2c
  28195. /* QSPI clock source configuration done later after clock selection check */
  28196. break;
  28197. 800c292: e011 b.n 800c2b8 <HAL_RCCEx_PeriphCLKConfig+0x41c>
  28198. case RCC_QSPICLKSOURCE_PLL2: /* PLL2 is used as clock source for QSPI*/
  28199. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_R_UPDATE);
  28200. 800c294: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28201. 800c298: 3308 adds r3, #8
  28202. 800c29a: 2102 movs r1, #2
  28203. 800c29c: 4618 mov r0, r3
  28204. 800c29e: f002 f97b bl 800e598 <RCCEx_PLL2_Config>
  28205. 800c2a2: 4603 mov r3, r0
  28206. 800c2a4: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28207. /* QSPI clock source configuration done later after clock selection check */
  28208. break;
  28209. 800c2a8: e006 b.n 800c2b8 <HAL_RCCEx_PeriphCLKConfig+0x41c>
  28210. case RCC_QSPICLKSOURCE_D1HCLK:
  28211. /* Domain1 HCLK clock selected as QSPI kernel peripheral clock */
  28212. break;
  28213. default:
  28214. ret = HAL_ERROR;
  28215. 800c2aa: 2301 movs r3, #1
  28216. 800c2ac: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28217. break;
  28218. 800c2b0: e002 b.n 800c2b8 <HAL_RCCEx_PeriphCLKConfig+0x41c>
  28219. break;
  28220. 800c2b2: bf00 nop
  28221. 800c2b4: e000 b.n 800c2b8 <HAL_RCCEx_PeriphCLKConfig+0x41c>
  28222. break;
  28223. 800c2b6: bf00 nop
  28224. }
  28225. if (ret == HAL_OK)
  28226. 800c2b8: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28227. 800c2bc: 2b00 cmp r3, #0
  28228. 800c2be: d10a bne.n 800c2d6 <HAL_RCCEx_PeriphCLKConfig+0x43a>
  28229. {
  28230. /* Set the source of QSPI clock*/
  28231. __HAL_RCC_QSPI_CONFIG(PeriphClkInit->QspiClockSelection);
  28232. 800c2c0: 4b68 ldr r3, [pc, #416] @ (800c464 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  28233. 800c2c2: 6cdb ldr r3, [r3, #76] @ 0x4c
  28234. 800c2c4: f023 0130 bic.w r1, r3, #48 @ 0x30
  28235. 800c2c8: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28236. 800c2cc: 6cdb ldr r3, [r3, #76] @ 0x4c
  28237. 800c2ce: 4a65 ldr r2, [pc, #404] @ (800c464 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  28238. 800c2d0: 430b orrs r3, r1
  28239. 800c2d2: 64d3 str r3, [r2, #76] @ 0x4c
  28240. 800c2d4: e003 b.n 800c2de <HAL_RCCEx_PeriphCLKConfig+0x442>
  28241. }
  28242. else
  28243. {
  28244. /* set overall return value */
  28245. status = ret;
  28246. 800c2d6: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28247. 800c2da: f887 311e strb.w r3, [r7, #286] @ 0x11e
  28248. }
  28249. }
  28250. #endif /*OCTOSPI*/
  28251. /*---------------------------- SPI1/2/3 configuration -------------------------------*/
  28252. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SPI123) == RCC_PERIPHCLK_SPI123)
  28253. 800c2de: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28254. 800c2e2: e9d3 2300 ldrd r2, r3, [r3]
  28255. 800c2e6: f402 5380 and.w r3, r2, #4096 @ 0x1000
  28256. 800c2ea: f8c7 30e8 str.w r3, [r7, #232] @ 0xe8
  28257. 800c2ee: 2300 movs r3, #0
  28258. 800c2f0: f8c7 30ec str.w r3, [r7, #236] @ 0xec
  28259. 800c2f4: e9d7 123a ldrd r1, r2, [r7, #232] @ 0xe8
  28260. 800c2f8: 460b mov r3, r1
  28261. 800c2fa: 4313 orrs r3, r2
  28262. 800c2fc: d051 beq.n 800c3a2 <HAL_RCCEx_PeriphCLKConfig+0x506>
  28263. {
  28264. switch (PeriphClkInit->Spi123ClockSelection)
  28265. 800c2fe: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28266. 800c302: 6e1b ldr r3, [r3, #96] @ 0x60
  28267. 800c304: f5b3 4f80 cmp.w r3, #16384 @ 0x4000
  28268. 800c308: d035 beq.n 800c376 <HAL_RCCEx_PeriphCLKConfig+0x4da>
  28269. 800c30a: f5b3 4f80 cmp.w r3, #16384 @ 0x4000
  28270. 800c30e: d82e bhi.n 800c36e <HAL_RCCEx_PeriphCLKConfig+0x4d2>
  28271. 800c310: f5b3 5f40 cmp.w r3, #12288 @ 0x3000
  28272. 800c314: d031 beq.n 800c37a <HAL_RCCEx_PeriphCLKConfig+0x4de>
  28273. 800c316: f5b3 5f40 cmp.w r3, #12288 @ 0x3000
  28274. 800c31a: d828 bhi.n 800c36e <HAL_RCCEx_PeriphCLKConfig+0x4d2>
  28275. 800c31c: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  28276. 800c320: d01a beq.n 800c358 <HAL_RCCEx_PeriphCLKConfig+0x4bc>
  28277. 800c322: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  28278. 800c326: d822 bhi.n 800c36e <HAL_RCCEx_PeriphCLKConfig+0x4d2>
  28279. 800c328: 2b00 cmp r3, #0
  28280. 800c32a: d003 beq.n 800c334 <HAL_RCCEx_PeriphCLKConfig+0x498>
  28281. 800c32c: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  28282. 800c330: d007 beq.n 800c342 <HAL_RCCEx_PeriphCLKConfig+0x4a6>
  28283. 800c332: e01c b.n 800c36e <HAL_RCCEx_PeriphCLKConfig+0x4d2>
  28284. {
  28285. case RCC_SPI123CLKSOURCE_PLL: /* PLL is used as clock source for SPI1/2/3 */
  28286. /* Enable SPI Clock output generated form System PLL . */
  28287. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  28288. 800c334: 4b4b ldr r3, [pc, #300] @ (800c464 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  28289. 800c336: 6adb ldr r3, [r3, #44] @ 0x2c
  28290. 800c338: 4a4a ldr r2, [pc, #296] @ (800c464 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  28291. 800c33a: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  28292. 800c33e: 62d3 str r3, [r2, #44] @ 0x2c
  28293. /* SPI1/2/3 clock source configuration done later after clock selection check */
  28294. break;
  28295. 800c340: e01c b.n 800c37c <HAL_RCCEx_PeriphCLKConfig+0x4e0>
  28296. case RCC_SPI123CLKSOURCE_PLL2: /* PLL2 is used as clock source for SPI1/2/3 */
  28297. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  28298. 800c342: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28299. 800c346: 3308 adds r3, #8
  28300. 800c348: 2100 movs r1, #0
  28301. 800c34a: 4618 mov r0, r3
  28302. 800c34c: f002 f924 bl 800e598 <RCCEx_PLL2_Config>
  28303. 800c350: 4603 mov r3, r0
  28304. 800c352: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28305. /* SPI1/2/3 clock source configuration done later after clock selection check */
  28306. break;
  28307. 800c356: e011 b.n 800c37c <HAL_RCCEx_PeriphCLKConfig+0x4e0>
  28308. case RCC_SPI123CLKSOURCE_PLL3: /* PLL3 is used as clock source for SPI1/2/3 */
  28309. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
  28310. 800c358: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28311. 800c35c: 3328 adds r3, #40 @ 0x28
  28312. 800c35e: 2100 movs r1, #0
  28313. 800c360: 4618 mov r0, r3
  28314. 800c362: f002 f9cb bl 800e6fc <RCCEx_PLL3_Config>
  28315. 800c366: 4603 mov r3, r0
  28316. 800c368: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28317. /* SPI1/2/3 clock source configuration done later after clock selection check */
  28318. break;
  28319. 800c36c: e006 b.n 800c37c <HAL_RCCEx_PeriphCLKConfig+0x4e0>
  28320. /* HSI, HSE, or CSI oscillator is used as source of SPI1/2/3 clock */
  28321. /* SPI1/2/3 clock source configuration done later after clock selection check */
  28322. break;
  28323. default:
  28324. ret = HAL_ERROR;
  28325. 800c36e: 2301 movs r3, #1
  28326. 800c370: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28327. break;
  28328. 800c374: e002 b.n 800c37c <HAL_RCCEx_PeriphCLKConfig+0x4e0>
  28329. break;
  28330. 800c376: bf00 nop
  28331. 800c378: e000 b.n 800c37c <HAL_RCCEx_PeriphCLKConfig+0x4e0>
  28332. break;
  28333. 800c37a: bf00 nop
  28334. }
  28335. if (ret == HAL_OK)
  28336. 800c37c: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28337. 800c380: 2b00 cmp r3, #0
  28338. 800c382: d10a bne.n 800c39a <HAL_RCCEx_PeriphCLKConfig+0x4fe>
  28339. {
  28340. /* Set the source of SPI1/2/3 clock*/
  28341. __HAL_RCC_SPI123_CONFIG(PeriphClkInit->Spi123ClockSelection);
  28342. 800c384: 4b37 ldr r3, [pc, #220] @ (800c464 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  28343. 800c386: 6d1b ldr r3, [r3, #80] @ 0x50
  28344. 800c388: f423 41e0 bic.w r1, r3, #28672 @ 0x7000
  28345. 800c38c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28346. 800c390: 6e1b ldr r3, [r3, #96] @ 0x60
  28347. 800c392: 4a34 ldr r2, [pc, #208] @ (800c464 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  28348. 800c394: 430b orrs r3, r1
  28349. 800c396: 6513 str r3, [r2, #80] @ 0x50
  28350. 800c398: e003 b.n 800c3a2 <HAL_RCCEx_PeriphCLKConfig+0x506>
  28351. }
  28352. else
  28353. {
  28354. /* set overall return value */
  28355. status = ret;
  28356. 800c39a: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28357. 800c39e: f887 311e strb.w r3, [r7, #286] @ 0x11e
  28358. }
  28359. }
  28360. /*---------------------------- SPI4/5 configuration -------------------------------*/
  28361. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SPI45) == RCC_PERIPHCLK_SPI45)
  28362. 800c3a2: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28363. 800c3a6: e9d3 2300 ldrd r2, r3, [r3]
  28364. 800c3aa: f402 5300 and.w r3, r2, #8192 @ 0x2000
  28365. 800c3ae: f8c7 30e0 str.w r3, [r7, #224] @ 0xe0
  28366. 800c3b2: 2300 movs r3, #0
  28367. 800c3b4: f8c7 30e4 str.w r3, [r7, #228] @ 0xe4
  28368. 800c3b8: e9d7 1238 ldrd r1, r2, [r7, #224] @ 0xe0
  28369. 800c3bc: 460b mov r3, r1
  28370. 800c3be: 4313 orrs r3, r2
  28371. 800c3c0: d056 beq.n 800c470 <HAL_RCCEx_PeriphCLKConfig+0x5d4>
  28372. {
  28373. switch (PeriphClkInit->Spi45ClockSelection)
  28374. 800c3c2: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28375. 800c3c6: 6e5b ldr r3, [r3, #100] @ 0x64
  28376. 800c3c8: f5b3 2fa0 cmp.w r3, #327680 @ 0x50000
  28377. 800c3cc: d033 beq.n 800c436 <HAL_RCCEx_PeriphCLKConfig+0x59a>
  28378. 800c3ce: f5b3 2fa0 cmp.w r3, #327680 @ 0x50000
  28379. 800c3d2: d82c bhi.n 800c42e <HAL_RCCEx_PeriphCLKConfig+0x592>
  28380. 800c3d4: f5b3 2f80 cmp.w r3, #262144 @ 0x40000
  28381. 800c3d8: d02f beq.n 800c43a <HAL_RCCEx_PeriphCLKConfig+0x59e>
  28382. 800c3da: f5b3 2f80 cmp.w r3, #262144 @ 0x40000
  28383. 800c3de: d826 bhi.n 800c42e <HAL_RCCEx_PeriphCLKConfig+0x592>
  28384. 800c3e0: f5b3 3f40 cmp.w r3, #196608 @ 0x30000
  28385. 800c3e4: d02b beq.n 800c43e <HAL_RCCEx_PeriphCLKConfig+0x5a2>
  28386. 800c3e6: f5b3 3f40 cmp.w r3, #196608 @ 0x30000
  28387. 800c3ea: d820 bhi.n 800c42e <HAL_RCCEx_PeriphCLKConfig+0x592>
  28388. 800c3ec: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  28389. 800c3f0: d012 beq.n 800c418 <HAL_RCCEx_PeriphCLKConfig+0x57c>
  28390. 800c3f2: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  28391. 800c3f6: d81a bhi.n 800c42e <HAL_RCCEx_PeriphCLKConfig+0x592>
  28392. 800c3f8: 2b00 cmp r3, #0
  28393. 800c3fa: d022 beq.n 800c442 <HAL_RCCEx_PeriphCLKConfig+0x5a6>
  28394. 800c3fc: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  28395. 800c400: d115 bne.n 800c42e <HAL_RCCEx_PeriphCLKConfig+0x592>
  28396. /* SPI4/5 clock source configuration done later after clock selection check */
  28397. break;
  28398. case RCC_SPI45CLKSOURCE_PLL2: /* PLL2 is used as clock source for SPI4/5 */
  28399. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
  28400. 800c402: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28401. 800c406: 3308 adds r3, #8
  28402. 800c408: 2101 movs r1, #1
  28403. 800c40a: 4618 mov r0, r3
  28404. 800c40c: f002 f8c4 bl 800e598 <RCCEx_PLL2_Config>
  28405. 800c410: 4603 mov r3, r0
  28406. 800c412: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28407. /* SPI4/5 clock source configuration done later after clock selection check */
  28408. break;
  28409. 800c416: e015 b.n 800c444 <HAL_RCCEx_PeriphCLKConfig+0x5a8>
  28410. case RCC_SPI45CLKSOURCE_PLL3: /* PLL3 is used as clock source for SPI4/5 */
  28411. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
  28412. 800c418: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28413. 800c41c: 3328 adds r3, #40 @ 0x28
  28414. 800c41e: 2101 movs r1, #1
  28415. 800c420: 4618 mov r0, r3
  28416. 800c422: f002 f96b bl 800e6fc <RCCEx_PLL3_Config>
  28417. 800c426: 4603 mov r3, r0
  28418. 800c428: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28419. /* SPI4/5 clock source configuration done later after clock selection check */
  28420. break;
  28421. 800c42c: e00a b.n 800c444 <HAL_RCCEx_PeriphCLKConfig+0x5a8>
  28422. /* HSE, oscillator is used as source of SPI4/5 clock */
  28423. /* SPI4/5 clock source configuration done later after clock selection check */
  28424. break;
  28425. default:
  28426. ret = HAL_ERROR;
  28427. 800c42e: 2301 movs r3, #1
  28428. 800c430: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28429. break;
  28430. 800c434: e006 b.n 800c444 <HAL_RCCEx_PeriphCLKConfig+0x5a8>
  28431. break;
  28432. 800c436: bf00 nop
  28433. 800c438: e004 b.n 800c444 <HAL_RCCEx_PeriphCLKConfig+0x5a8>
  28434. break;
  28435. 800c43a: bf00 nop
  28436. 800c43c: e002 b.n 800c444 <HAL_RCCEx_PeriphCLKConfig+0x5a8>
  28437. break;
  28438. 800c43e: bf00 nop
  28439. 800c440: e000 b.n 800c444 <HAL_RCCEx_PeriphCLKConfig+0x5a8>
  28440. break;
  28441. 800c442: bf00 nop
  28442. }
  28443. if (ret == HAL_OK)
  28444. 800c444: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28445. 800c448: 2b00 cmp r3, #0
  28446. 800c44a: d10d bne.n 800c468 <HAL_RCCEx_PeriphCLKConfig+0x5cc>
  28447. {
  28448. /* Set the source of SPI4/5 clock*/
  28449. __HAL_RCC_SPI45_CONFIG(PeriphClkInit->Spi45ClockSelection);
  28450. 800c44c: 4b05 ldr r3, [pc, #20] @ (800c464 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  28451. 800c44e: 6d1b ldr r3, [r3, #80] @ 0x50
  28452. 800c450: f423 21e0 bic.w r1, r3, #458752 @ 0x70000
  28453. 800c454: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28454. 800c458: 6e5b ldr r3, [r3, #100] @ 0x64
  28455. 800c45a: 4a02 ldr r2, [pc, #8] @ (800c464 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  28456. 800c45c: 430b orrs r3, r1
  28457. 800c45e: 6513 str r3, [r2, #80] @ 0x50
  28458. 800c460: e006 b.n 800c470 <HAL_RCCEx_PeriphCLKConfig+0x5d4>
  28459. 800c462: bf00 nop
  28460. 800c464: 58024400 .word 0x58024400
  28461. }
  28462. else
  28463. {
  28464. /* set overall return value */
  28465. status = ret;
  28466. 800c468: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28467. 800c46c: f887 311e strb.w r3, [r7, #286] @ 0x11e
  28468. }
  28469. }
  28470. /*---------------------------- SPI6 configuration -------------------------------*/
  28471. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SPI6) == RCC_PERIPHCLK_SPI6)
  28472. 800c470: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28473. 800c474: e9d3 2300 ldrd r2, r3, [r3]
  28474. 800c478: f402 4380 and.w r3, r2, #16384 @ 0x4000
  28475. 800c47c: f8c7 30d8 str.w r3, [r7, #216] @ 0xd8
  28476. 800c480: 2300 movs r3, #0
  28477. 800c482: f8c7 30dc str.w r3, [r7, #220] @ 0xdc
  28478. 800c486: e9d7 1236 ldrd r1, r2, [r7, #216] @ 0xd8
  28479. 800c48a: 460b mov r3, r1
  28480. 800c48c: 4313 orrs r3, r2
  28481. 800c48e: d055 beq.n 800c53c <HAL_RCCEx_PeriphCLKConfig+0x6a0>
  28482. {
  28483. switch (PeriphClkInit->Spi6ClockSelection)
  28484. 800c490: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28485. 800c494: f8d3 30b0 ldr.w r3, [r3, #176] @ 0xb0
  28486. 800c498: f1b3 4fa0 cmp.w r3, #1342177280 @ 0x50000000
  28487. 800c49c: d033 beq.n 800c506 <HAL_RCCEx_PeriphCLKConfig+0x66a>
  28488. 800c49e: f1b3 4fa0 cmp.w r3, #1342177280 @ 0x50000000
  28489. 800c4a2: d82c bhi.n 800c4fe <HAL_RCCEx_PeriphCLKConfig+0x662>
  28490. 800c4a4: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  28491. 800c4a8: d02f beq.n 800c50a <HAL_RCCEx_PeriphCLKConfig+0x66e>
  28492. 800c4aa: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  28493. 800c4ae: d826 bhi.n 800c4fe <HAL_RCCEx_PeriphCLKConfig+0x662>
  28494. 800c4b0: f1b3 5f40 cmp.w r3, #805306368 @ 0x30000000
  28495. 800c4b4: d02b beq.n 800c50e <HAL_RCCEx_PeriphCLKConfig+0x672>
  28496. 800c4b6: f1b3 5f40 cmp.w r3, #805306368 @ 0x30000000
  28497. 800c4ba: d820 bhi.n 800c4fe <HAL_RCCEx_PeriphCLKConfig+0x662>
  28498. 800c4bc: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  28499. 800c4c0: d012 beq.n 800c4e8 <HAL_RCCEx_PeriphCLKConfig+0x64c>
  28500. 800c4c2: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  28501. 800c4c6: d81a bhi.n 800c4fe <HAL_RCCEx_PeriphCLKConfig+0x662>
  28502. 800c4c8: 2b00 cmp r3, #0
  28503. 800c4ca: d022 beq.n 800c512 <HAL_RCCEx_PeriphCLKConfig+0x676>
  28504. 800c4cc: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  28505. 800c4d0: d115 bne.n 800c4fe <HAL_RCCEx_PeriphCLKConfig+0x662>
  28506. /* SPI6 clock source configuration done later after clock selection check */
  28507. break;
  28508. case RCC_SPI6CLKSOURCE_PLL2: /* PLL2 is used as clock source for SPI6*/
  28509. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
  28510. 800c4d2: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28511. 800c4d6: 3308 adds r3, #8
  28512. 800c4d8: 2101 movs r1, #1
  28513. 800c4da: 4618 mov r0, r3
  28514. 800c4dc: f002 f85c bl 800e598 <RCCEx_PLL2_Config>
  28515. 800c4e0: 4603 mov r3, r0
  28516. 800c4e2: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28517. /* SPI6 clock source configuration done later after clock selection check */
  28518. break;
  28519. 800c4e6: e015 b.n 800c514 <HAL_RCCEx_PeriphCLKConfig+0x678>
  28520. case RCC_SPI6CLKSOURCE_PLL3: /* PLL3 is used as clock source for SPI6*/
  28521. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
  28522. 800c4e8: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28523. 800c4ec: 3328 adds r3, #40 @ 0x28
  28524. 800c4ee: 2101 movs r1, #1
  28525. 800c4f0: 4618 mov r0, r3
  28526. 800c4f2: f002 f903 bl 800e6fc <RCCEx_PLL3_Config>
  28527. 800c4f6: 4603 mov r3, r0
  28528. 800c4f8: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28529. /* SPI6 clock source configuration done later after clock selection check */
  28530. break;
  28531. 800c4fc: e00a b.n 800c514 <HAL_RCCEx_PeriphCLKConfig+0x678>
  28532. /* SPI6 clock source configuration done later after clock selection check */
  28533. break;
  28534. #endif
  28535. default:
  28536. ret = HAL_ERROR;
  28537. 800c4fe: 2301 movs r3, #1
  28538. 800c500: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28539. break;
  28540. 800c504: e006 b.n 800c514 <HAL_RCCEx_PeriphCLKConfig+0x678>
  28541. break;
  28542. 800c506: bf00 nop
  28543. 800c508: e004 b.n 800c514 <HAL_RCCEx_PeriphCLKConfig+0x678>
  28544. break;
  28545. 800c50a: bf00 nop
  28546. 800c50c: e002 b.n 800c514 <HAL_RCCEx_PeriphCLKConfig+0x678>
  28547. break;
  28548. 800c50e: bf00 nop
  28549. 800c510: e000 b.n 800c514 <HAL_RCCEx_PeriphCLKConfig+0x678>
  28550. break;
  28551. 800c512: bf00 nop
  28552. }
  28553. if (ret == HAL_OK)
  28554. 800c514: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28555. 800c518: 2b00 cmp r3, #0
  28556. 800c51a: d10b bne.n 800c534 <HAL_RCCEx_PeriphCLKConfig+0x698>
  28557. {
  28558. /* Set the source of SPI6 clock*/
  28559. __HAL_RCC_SPI6_CONFIG(PeriphClkInit->Spi6ClockSelection);
  28560. 800c51c: 4ba3 ldr r3, [pc, #652] @ (800c7ac <HAL_RCCEx_PeriphCLKConfig+0x910>)
  28561. 800c51e: 6d9b ldr r3, [r3, #88] @ 0x58
  28562. 800c520: f023 41e0 bic.w r1, r3, #1879048192 @ 0x70000000
  28563. 800c524: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28564. 800c528: f8d3 30b0 ldr.w r3, [r3, #176] @ 0xb0
  28565. 800c52c: 4a9f ldr r2, [pc, #636] @ (800c7ac <HAL_RCCEx_PeriphCLKConfig+0x910>)
  28566. 800c52e: 430b orrs r3, r1
  28567. 800c530: 6593 str r3, [r2, #88] @ 0x58
  28568. 800c532: e003 b.n 800c53c <HAL_RCCEx_PeriphCLKConfig+0x6a0>
  28569. }
  28570. else
  28571. {
  28572. /* set overall return value */
  28573. status = ret;
  28574. 800c534: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28575. 800c538: f887 311e strb.w r3, [r7, #286] @ 0x11e
  28576. }
  28577. #endif /*DSI*/
  28578. #if defined(FDCAN1) || defined(FDCAN2)
  28579. /*---------------------------- FDCAN configuration -------------------------------*/
  28580. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_FDCAN) == RCC_PERIPHCLK_FDCAN)
  28581. 800c53c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28582. 800c540: e9d3 2300 ldrd r2, r3, [r3]
  28583. 800c544: f402 4300 and.w r3, r2, #32768 @ 0x8000
  28584. 800c548: f8c7 30d0 str.w r3, [r7, #208] @ 0xd0
  28585. 800c54c: 2300 movs r3, #0
  28586. 800c54e: f8c7 30d4 str.w r3, [r7, #212] @ 0xd4
  28587. 800c552: e9d7 1234 ldrd r1, r2, [r7, #208] @ 0xd0
  28588. 800c556: 460b mov r3, r1
  28589. 800c558: 4313 orrs r3, r2
  28590. 800c55a: d037 beq.n 800c5cc <HAL_RCCEx_PeriphCLKConfig+0x730>
  28591. {
  28592. switch (PeriphClkInit->FdcanClockSelection)
  28593. 800c55c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28594. 800c560: 6f1b ldr r3, [r3, #112] @ 0x70
  28595. 800c562: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  28596. 800c566: d00e beq.n 800c586 <HAL_RCCEx_PeriphCLKConfig+0x6ea>
  28597. 800c568: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  28598. 800c56c: d816 bhi.n 800c59c <HAL_RCCEx_PeriphCLKConfig+0x700>
  28599. 800c56e: 2b00 cmp r3, #0
  28600. 800c570: d018 beq.n 800c5a4 <HAL_RCCEx_PeriphCLKConfig+0x708>
  28601. 800c572: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  28602. 800c576: d111 bne.n 800c59c <HAL_RCCEx_PeriphCLKConfig+0x700>
  28603. {
  28604. case RCC_FDCANCLKSOURCE_PLL: /* PLL is used as clock source for FDCAN*/
  28605. /* Enable FDCAN Clock output generated form System PLL . */
  28606. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  28607. 800c578: 4b8c ldr r3, [pc, #560] @ (800c7ac <HAL_RCCEx_PeriphCLKConfig+0x910>)
  28608. 800c57a: 6adb ldr r3, [r3, #44] @ 0x2c
  28609. 800c57c: 4a8b ldr r2, [pc, #556] @ (800c7ac <HAL_RCCEx_PeriphCLKConfig+0x910>)
  28610. 800c57e: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  28611. 800c582: 62d3 str r3, [r2, #44] @ 0x2c
  28612. /* FDCAN clock source configuration done later after clock selection check */
  28613. break;
  28614. 800c584: e00f b.n 800c5a6 <HAL_RCCEx_PeriphCLKConfig+0x70a>
  28615. case RCC_FDCANCLKSOURCE_PLL2: /* PLL2 is used as clock source for FDCAN*/
  28616. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
  28617. 800c586: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28618. 800c58a: 3308 adds r3, #8
  28619. 800c58c: 2101 movs r1, #1
  28620. 800c58e: 4618 mov r0, r3
  28621. 800c590: f002 f802 bl 800e598 <RCCEx_PLL2_Config>
  28622. 800c594: 4603 mov r3, r0
  28623. 800c596: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28624. /* FDCAN clock source configuration done later after clock selection check */
  28625. break;
  28626. 800c59a: e004 b.n 800c5a6 <HAL_RCCEx_PeriphCLKConfig+0x70a>
  28627. /* HSE is used as clock source for FDCAN*/
  28628. /* FDCAN clock source configuration done later after clock selection check */
  28629. break;
  28630. default:
  28631. ret = HAL_ERROR;
  28632. 800c59c: 2301 movs r3, #1
  28633. 800c59e: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28634. break;
  28635. 800c5a2: e000 b.n 800c5a6 <HAL_RCCEx_PeriphCLKConfig+0x70a>
  28636. break;
  28637. 800c5a4: bf00 nop
  28638. }
  28639. if (ret == HAL_OK)
  28640. 800c5a6: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28641. 800c5aa: 2b00 cmp r3, #0
  28642. 800c5ac: d10a bne.n 800c5c4 <HAL_RCCEx_PeriphCLKConfig+0x728>
  28643. {
  28644. /* Set the source of FDCAN clock*/
  28645. __HAL_RCC_FDCAN_CONFIG(PeriphClkInit->FdcanClockSelection);
  28646. 800c5ae: 4b7f ldr r3, [pc, #508] @ (800c7ac <HAL_RCCEx_PeriphCLKConfig+0x910>)
  28647. 800c5b0: 6d1b ldr r3, [r3, #80] @ 0x50
  28648. 800c5b2: f023 5140 bic.w r1, r3, #805306368 @ 0x30000000
  28649. 800c5b6: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28650. 800c5ba: 6f1b ldr r3, [r3, #112] @ 0x70
  28651. 800c5bc: 4a7b ldr r2, [pc, #492] @ (800c7ac <HAL_RCCEx_PeriphCLKConfig+0x910>)
  28652. 800c5be: 430b orrs r3, r1
  28653. 800c5c0: 6513 str r3, [r2, #80] @ 0x50
  28654. 800c5c2: e003 b.n 800c5cc <HAL_RCCEx_PeriphCLKConfig+0x730>
  28655. }
  28656. else
  28657. {
  28658. /* set overall return value */
  28659. status = ret;
  28660. 800c5c4: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28661. 800c5c8: f887 311e strb.w r3, [r7, #286] @ 0x11e
  28662. }
  28663. }
  28664. #endif /*FDCAN1 || FDCAN2*/
  28665. /*---------------------------- FMC configuration -------------------------------*/
  28666. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_FMC) == RCC_PERIPHCLK_FMC)
  28667. 800c5cc: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28668. 800c5d0: e9d3 2300 ldrd r2, r3, [r3]
  28669. 800c5d4: f002 7380 and.w r3, r2, #16777216 @ 0x1000000
  28670. 800c5d8: f8c7 30c8 str.w r3, [r7, #200] @ 0xc8
  28671. 800c5dc: 2300 movs r3, #0
  28672. 800c5de: f8c7 30cc str.w r3, [r7, #204] @ 0xcc
  28673. 800c5e2: e9d7 1232 ldrd r1, r2, [r7, #200] @ 0xc8
  28674. 800c5e6: 460b mov r3, r1
  28675. 800c5e8: 4313 orrs r3, r2
  28676. 800c5ea: d039 beq.n 800c660 <HAL_RCCEx_PeriphCLKConfig+0x7c4>
  28677. {
  28678. switch (PeriphClkInit->FmcClockSelection)
  28679. 800c5ec: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28680. 800c5f0: 6c9b ldr r3, [r3, #72] @ 0x48
  28681. 800c5f2: 2b03 cmp r3, #3
  28682. 800c5f4: d81c bhi.n 800c630 <HAL_RCCEx_PeriphCLKConfig+0x794>
  28683. 800c5f6: a201 add r2, pc, #4 @ (adr r2, 800c5fc <HAL_RCCEx_PeriphCLKConfig+0x760>)
  28684. 800c5f8: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  28685. 800c5fc: 0800c639 .word 0x0800c639
  28686. 800c600: 0800c60d .word 0x0800c60d
  28687. 800c604: 0800c61b .word 0x0800c61b
  28688. 800c608: 0800c639 .word 0x0800c639
  28689. {
  28690. case RCC_FMCCLKSOURCE_PLL: /* PLL is used as clock source for FMC*/
  28691. /* Enable FMC Clock output generated form System PLL . */
  28692. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  28693. 800c60c: 4b67 ldr r3, [pc, #412] @ (800c7ac <HAL_RCCEx_PeriphCLKConfig+0x910>)
  28694. 800c60e: 6adb ldr r3, [r3, #44] @ 0x2c
  28695. 800c610: 4a66 ldr r2, [pc, #408] @ (800c7ac <HAL_RCCEx_PeriphCLKConfig+0x910>)
  28696. 800c612: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  28697. 800c616: 62d3 str r3, [r2, #44] @ 0x2c
  28698. /* FMC clock source configuration done later after clock selection check */
  28699. break;
  28700. 800c618: e00f b.n 800c63a <HAL_RCCEx_PeriphCLKConfig+0x79e>
  28701. case RCC_FMCCLKSOURCE_PLL2: /* PLL2 is used as clock source for FMC*/
  28702. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_R_UPDATE);
  28703. 800c61a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28704. 800c61e: 3308 adds r3, #8
  28705. 800c620: 2102 movs r1, #2
  28706. 800c622: 4618 mov r0, r3
  28707. 800c624: f001 ffb8 bl 800e598 <RCCEx_PLL2_Config>
  28708. 800c628: 4603 mov r3, r0
  28709. 800c62a: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28710. /* FMC clock source configuration done later after clock selection check */
  28711. break;
  28712. 800c62e: e004 b.n 800c63a <HAL_RCCEx_PeriphCLKConfig+0x79e>
  28713. case RCC_FMCCLKSOURCE_HCLK:
  28714. /* D1/CD HCLK clock selected as FMC kernel peripheral clock */
  28715. break;
  28716. default:
  28717. ret = HAL_ERROR;
  28718. 800c630: 2301 movs r3, #1
  28719. 800c632: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28720. break;
  28721. 800c636: e000 b.n 800c63a <HAL_RCCEx_PeriphCLKConfig+0x79e>
  28722. break;
  28723. 800c638: bf00 nop
  28724. }
  28725. if (ret == HAL_OK)
  28726. 800c63a: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28727. 800c63e: 2b00 cmp r3, #0
  28728. 800c640: d10a bne.n 800c658 <HAL_RCCEx_PeriphCLKConfig+0x7bc>
  28729. {
  28730. /* Set the source of FMC clock*/
  28731. __HAL_RCC_FMC_CONFIG(PeriphClkInit->FmcClockSelection);
  28732. 800c642: 4b5a ldr r3, [pc, #360] @ (800c7ac <HAL_RCCEx_PeriphCLKConfig+0x910>)
  28733. 800c644: 6cdb ldr r3, [r3, #76] @ 0x4c
  28734. 800c646: f023 0103 bic.w r1, r3, #3
  28735. 800c64a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28736. 800c64e: 6c9b ldr r3, [r3, #72] @ 0x48
  28737. 800c650: 4a56 ldr r2, [pc, #344] @ (800c7ac <HAL_RCCEx_PeriphCLKConfig+0x910>)
  28738. 800c652: 430b orrs r3, r1
  28739. 800c654: 64d3 str r3, [r2, #76] @ 0x4c
  28740. 800c656: e003 b.n 800c660 <HAL_RCCEx_PeriphCLKConfig+0x7c4>
  28741. }
  28742. else
  28743. {
  28744. /* set overall return value */
  28745. status = ret;
  28746. 800c658: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28747. 800c65c: f887 311e strb.w r3, [r7, #286] @ 0x11e
  28748. }
  28749. }
  28750. /*---------------------------- RTC configuration -------------------------------*/
  28751. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC)
  28752. 800c660: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28753. 800c664: e9d3 2300 ldrd r2, r3, [r3]
  28754. 800c668: f402 0380 and.w r3, r2, #4194304 @ 0x400000
  28755. 800c66c: f8c7 30c0 str.w r3, [r7, #192] @ 0xc0
  28756. 800c670: 2300 movs r3, #0
  28757. 800c672: f8c7 30c4 str.w r3, [r7, #196] @ 0xc4
  28758. 800c676: e9d7 1230 ldrd r1, r2, [r7, #192] @ 0xc0
  28759. 800c67a: 460b mov r3, r1
  28760. 800c67c: 4313 orrs r3, r2
  28761. 800c67e: f000 809f beq.w 800c7c0 <HAL_RCCEx_PeriphCLKConfig+0x924>
  28762. {
  28763. /* check for RTC Parameters used to output RTCCLK */
  28764. assert_param(IS_RCC_RTCCLKSOURCE(PeriphClkInit->RTCClockSelection));
  28765. /* Enable write access to Backup domain */
  28766. SET_BIT(PWR->CR1, PWR_CR1_DBP);
  28767. 800c682: 4b4b ldr r3, [pc, #300] @ (800c7b0 <HAL_RCCEx_PeriphCLKConfig+0x914>)
  28768. 800c684: 681b ldr r3, [r3, #0]
  28769. 800c686: 4a4a ldr r2, [pc, #296] @ (800c7b0 <HAL_RCCEx_PeriphCLKConfig+0x914>)
  28770. 800c688: f443 7380 orr.w r3, r3, #256 @ 0x100
  28771. 800c68c: 6013 str r3, [r2, #0]
  28772. /* Wait for Backup domain Write protection disable */
  28773. tickstart = HAL_GetTick();
  28774. 800c68e: f7f8 fea5 bl 80053dc <HAL_GetTick>
  28775. 800c692: f8c7 0118 str.w r0, [r7, #280] @ 0x118
  28776. while ((PWR->CR1 & PWR_CR1_DBP) == 0U)
  28777. 800c696: e00b b.n 800c6b0 <HAL_RCCEx_PeriphCLKConfig+0x814>
  28778. {
  28779. if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE)
  28780. 800c698: f7f8 fea0 bl 80053dc <HAL_GetTick>
  28781. 800c69c: 4602 mov r2, r0
  28782. 800c69e: f8d7 3118 ldr.w r3, [r7, #280] @ 0x118
  28783. 800c6a2: 1ad3 subs r3, r2, r3
  28784. 800c6a4: 2b64 cmp r3, #100 @ 0x64
  28785. 800c6a6: d903 bls.n 800c6b0 <HAL_RCCEx_PeriphCLKConfig+0x814>
  28786. {
  28787. ret = HAL_TIMEOUT;
  28788. 800c6a8: 2303 movs r3, #3
  28789. 800c6aa: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28790. break;
  28791. 800c6ae: e005 b.n 800c6bc <HAL_RCCEx_PeriphCLKConfig+0x820>
  28792. while ((PWR->CR1 & PWR_CR1_DBP) == 0U)
  28793. 800c6b0: 4b3f ldr r3, [pc, #252] @ (800c7b0 <HAL_RCCEx_PeriphCLKConfig+0x914>)
  28794. 800c6b2: 681b ldr r3, [r3, #0]
  28795. 800c6b4: f403 7380 and.w r3, r3, #256 @ 0x100
  28796. 800c6b8: 2b00 cmp r3, #0
  28797. 800c6ba: d0ed beq.n 800c698 <HAL_RCCEx_PeriphCLKConfig+0x7fc>
  28798. }
  28799. }
  28800. if (ret == HAL_OK)
  28801. 800c6bc: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28802. 800c6c0: 2b00 cmp r3, #0
  28803. 800c6c2: d179 bne.n 800c7b8 <HAL_RCCEx_PeriphCLKConfig+0x91c>
  28804. {
  28805. /* Reset the Backup domain only if the RTC Clock source selection is modified */
  28806. if ((RCC->BDCR & RCC_BDCR_RTCSEL) != (PeriphClkInit->RTCClockSelection & RCC_BDCR_RTCSEL))
  28807. 800c6c4: 4b39 ldr r3, [pc, #228] @ (800c7ac <HAL_RCCEx_PeriphCLKConfig+0x910>)
  28808. 800c6c6: 6f1a ldr r2, [r3, #112] @ 0x70
  28809. 800c6c8: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28810. 800c6cc: f8d3 30b4 ldr.w r3, [r3, #180] @ 0xb4
  28811. 800c6d0: 4053 eors r3, r2
  28812. 800c6d2: f403 7340 and.w r3, r3, #768 @ 0x300
  28813. 800c6d6: 2b00 cmp r3, #0
  28814. 800c6d8: d015 beq.n 800c706 <HAL_RCCEx_PeriphCLKConfig+0x86a>
  28815. {
  28816. /* Store the content of BDCR register before the reset of Backup Domain */
  28817. tmpreg = (RCC->BDCR & ~(RCC_BDCR_RTCSEL));
  28818. 800c6da: 4b34 ldr r3, [pc, #208] @ (800c7ac <HAL_RCCEx_PeriphCLKConfig+0x910>)
  28819. 800c6dc: 6f1b ldr r3, [r3, #112] @ 0x70
  28820. 800c6de: f423 7340 bic.w r3, r3, #768 @ 0x300
  28821. 800c6e2: f8c7 3114 str.w r3, [r7, #276] @ 0x114
  28822. /* RTC Clock selection can be changed only if the Backup Domain is reset */
  28823. __HAL_RCC_BACKUPRESET_FORCE();
  28824. 800c6e6: 4b31 ldr r3, [pc, #196] @ (800c7ac <HAL_RCCEx_PeriphCLKConfig+0x910>)
  28825. 800c6e8: 6f1b ldr r3, [r3, #112] @ 0x70
  28826. 800c6ea: 4a30 ldr r2, [pc, #192] @ (800c7ac <HAL_RCCEx_PeriphCLKConfig+0x910>)
  28827. 800c6ec: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  28828. 800c6f0: 6713 str r3, [r2, #112] @ 0x70
  28829. __HAL_RCC_BACKUPRESET_RELEASE();
  28830. 800c6f2: 4b2e ldr r3, [pc, #184] @ (800c7ac <HAL_RCCEx_PeriphCLKConfig+0x910>)
  28831. 800c6f4: 6f1b ldr r3, [r3, #112] @ 0x70
  28832. 800c6f6: 4a2d ldr r2, [pc, #180] @ (800c7ac <HAL_RCCEx_PeriphCLKConfig+0x910>)
  28833. 800c6f8: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  28834. 800c6fc: 6713 str r3, [r2, #112] @ 0x70
  28835. /* Restore the Content of BDCR register */
  28836. RCC->BDCR = tmpreg;
  28837. 800c6fe: 4a2b ldr r2, [pc, #172] @ (800c7ac <HAL_RCCEx_PeriphCLKConfig+0x910>)
  28838. 800c700: f8d7 3114 ldr.w r3, [r7, #276] @ 0x114
  28839. 800c704: 6713 str r3, [r2, #112] @ 0x70
  28840. }
  28841. /* If LSE is selected as RTC clock source (and enabled prior to Backup Domain reset), wait for LSE reactivation */
  28842. if (PeriphClkInit->RTCClockSelection == RCC_RTCCLKSOURCE_LSE)
  28843. 800c706: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28844. 800c70a: f8d3 30b4 ldr.w r3, [r3, #180] @ 0xb4
  28845. 800c70e: f5b3 7f80 cmp.w r3, #256 @ 0x100
  28846. 800c712: d118 bne.n 800c746 <HAL_RCCEx_PeriphCLKConfig+0x8aa>
  28847. {
  28848. /* Get Start Tick*/
  28849. tickstart = HAL_GetTick();
  28850. 800c714: f7f8 fe62 bl 80053dc <HAL_GetTick>
  28851. 800c718: f8c7 0118 str.w r0, [r7, #280] @ 0x118
  28852. /* Wait till LSE is ready */
  28853. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == 0U)
  28854. 800c71c: e00d b.n 800c73a <HAL_RCCEx_PeriphCLKConfig+0x89e>
  28855. {
  28856. if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
  28857. 800c71e: f7f8 fe5d bl 80053dc <HAL_GetTick>
  28858. 800c722: 4602 mov r2, r0
  28859. 800c724: f8d7 3118 ldr.w r3, [r7, #280] @ 0x118
  28860. 800c728: 1ad2 subs r2, r2, r3
  28861. 800c72a: f241 3388 movw r3, #5000 @ 0x1388
  28862. 800c72e: 429a cmp r2, r3
  28863. 800c730: d903 bls.n 800c73a <HAL_RCCEx_PeriphCLKConfig+0x89e>
  28864. {
  28865. ret = HAL_TIMEOUT;
  28866. 800c732: 2303 movs r3, #3
  28867. 800c734: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28868. break;
  28869. 800c738: e005 b.n 800c746 <HAL_RCCEx_PeriphCLKConfig+0x8aa>
  28870. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == 0U)
  28871. 800c73a: 4b1c ldr r3, [pc, #112] @ (800c7ac <HAL_RCCEx_PeriphCLKConfig+0x910>)
  28872. 800c73c: 6f1b ldr r3, [r3, #112] @ 0x70
  28873. 800c73e: f003 0302 and.w r3, r3, #2
  28874. 800c742: 2b00 cmp r3, #0
  28875. 800c744: d0eb beq.n 800c71e <HAL_RCCEx_PeriphCLKConfig+0x882>
  28876. }
  28877. }
  28878. }
  28879. if (ret == HAL_OK)
  28880. 800c746: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28881. 800c74a: 2b00 cmp r3, #0
  28882. 800c74c: d129 bne.n 800c7a2 <HAL_RCCEx_PeriphCLKConfig+0x906>
  28883. {
  28884. __HAL_RCC_RTC_CONFIG(PeriphClkInit->RTCClockSelection);
  28885. 800c74e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28886. 800c752: f8d3 30b4 ldr.w r3, [r3, #180] @ 0xb4
  28887. 800c756: f403 7340 and.w r3, r3, #768 @ 0x300
  28888. 800c75a: f5b3 7f40 cmp.w r3, #768 @ 0x300
  28889. 800c75e: d10e bne.n 800c77e <HAL_RCCEx_PeriphCLKConfig+0x8e2>
  28890. 800c760: 4b12 ldr r3, [pc, #72] @ (800c7ac <HAL_RCCEx_PeriphCLKConfig+0x910>)
  28891. 800c762: 691b ldr r3, [r3, #16]
  28892. 800c764: f423 517c bic.w r1, r3, #16128 @ 0x3f00
  28893. 800c768: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28894. 800c76c: f8d3 30b4 ldr.w r3, [r3, #180] @ 0xb4
  28895. 800c770: 091a lsrs r2, r3, #4
  28896. 800c772: 4b10 ldr r3, [pc, #64] @ (800c7b4 <HAL_RCCEx_PeriphCLKConfig+0x918>)
  28897. 800c774: 4013 ands r3, r2
  28898. 800c776: 4a0d ldr r2, [pc, #52] @ (800c7ac <HAL_RCCEx_PeriphCLKConfig+0x910>)
  28899. 800c778: 430b orrs r3, r1
  28900. 800c77a: 6113 str r3, [r2, #16]
  28901. 800c77c: e005 b.n 800c78a <HAL_RCCEx_PeriphCLKConfig+0x8ee>
  28902. 800c77e: 4b0b ldr r3, [pc, #44] @ (800c7ac <HAL_RCCEx_PeriphCLKConfig+0x910>)
  28903. 800c780: 691b ldr r3, [r3, #16]
  28904. 800c782: 4a0a ldr r2, [pc, #40] @ (800c7ac <HAL_RCCEx_PeriphCLKConfig+0x910>)
  28905. 800c784: f423 537c bic.w r3, r3, #16128 @ 0x3f00
  28906. 800c788: 6113 str r3, [r2, #16]
  28907. 800c78a: 4b08 ldr r3, [pc, #32] @ (800c7ac <HAL_RCCEx_PeriphCLKConfig+0x910>)
  28908. 800c78c: 6f19 ldr r1, [r3, #112] @ 0x70
  28909. 800c78e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28910. 800c792: f8d3 30b4 ldr.w r3, [r3, #180] @ 0xb4
  28911. 800c796: f3c3 030b ubfx r3, r3, #0, #12
  28912. 800c79a: 4a04 ldr r2, [pc, #16] @ (800c7ac <HAL_RCCEx_PeriphCLKConfig+0x910>)
  28913. 800c79c: 430b orrs r3, r1
  28914. 800c79e: 6713 str r3, [r2, #112] @ 0x70
  28915. 800c7a0: e00e b.n 800c7c0 <HAL_RCCEx_PeriphCLKConfig+0x924>
  28916. }
  28917. else
  28918. {
  28919. /* set overall return value */
  28920. status = ret;
  28921. 800c7a2: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28922. 800c7a6: f887 311e strb.w r3, [r7, #286] @ 0x11e
  28923. 800c7aa: e009 b.n 800c7c0 <HAL_RCCEx_PeriphCLKConfig+0x924>
  28924. 800c7ac: 58024400 .word 0x58024400
  28925. 800c7b0: 58024800 .word 0x58024800
  28926. 800c7b4: 00ffffcf .word 0x00ffffcf
  28927. }
  28928. }
  28929. else
  28930. {
  28931. /* set overall return value */
  28932. status = ret;
  28933. 800c7b8: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28934. 800c7bc: f887 311e strb.w r3, [r7, #286] @ 0x11e
  28935. }
  28936. }
  28937. /*-------------------------- USART1/6 configuration --------------------------*/
  28938. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USART16) == RCC_PERIPHCLK_USART16)
  28939. 800c7c0: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28940. 800c7c4: e9d3 2300 ldrd r2, r3, [r3]
  28941. 800c7c8: f002 0301 and.w r3, r2, #1
  28942. 800c7cc: f8c7 30b8 str.w r3, [r7, #184] @ 0xb8
  28943. 800c7d0: 2300 movs r3, #0
  28944. 800c7d2: f8c7 30bc str.w r3, [r7, #188] @ 0xbc
  28945. 800c7d6: e9d7 122e ldrd r1, r2, [r7, #184] @ 0xb8
  28946. 800c7da: 460b mov r3, r1
  28947. 800c7dc: 4313 orrs r3, r2
  28948. 800c7de: f000 8089 beq.w 800c8f4 <HAL_RCCEx_PeriphCLKConfig+0xa58>
  28949. {
  28950. switch (PeriphClkInit->Usart16ClockSelection)
  28951. 800c7e2: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28952. 800c7e6: 6fdb ldr r3, [r3, #124] @ 0x7c
  28953. 800c7e8: 2b28 cmp r3, #40 @ 0x28
  28954. 800c7ea: d86b bhi.n 800c8c4 <HAL_RCCEx_PeriphCLKConfig+0xa28>
  28955. 800c7ec: a201 add r2, pc, #4 @ (adr r2, 800c7f4 <HAL_RCCEx_PeriphCLKConfig+0x958>)
  28956. 800c7ee: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  28957. 800c7f2: bf00 nop
  28958. 800c7f4: 0800c8cd .word 0x0800c8cd
  28959. 800c7f8: 0800c8c5 .word 0x0800c8c5
  28960. 800c7fc: 0800c8c5 .word 0x0800c8c5
  28961. 800c800: 0800c8c5 .word 0x0800c8c5
  28962. 800c804: 0800c8c5 .word 0x0800c8c5
  28963. 800c808: 0800c8c5 .word 0x0800c8c5
  28964. 800c80c: 0800c8c5 .word 0x0800c8c5
  28965. 800c810: 0800c8c5 .word 0x0800c8c5
  28966. 800c814: 0800c899 .word 0x0800c899
  28967. 800c818: 0800c8c5 .word 0x0800c8c5
  28968. 800c81c: 0800c8c5 .word 0x0800c8c5
  28969. 800c820: 0800c8c5 .word 0x0800c8c5
  28970. 800c824: 0800c8c5 .word 0x0800c8c5
  28971. 800c828: 0800c8c5 .word 0x0800c8c5
  28972. 800c82c: 0800c8c5 .word 0x0800c8c5
  28973. 800c830: 0800c8c5 .word 0x0800c8c5
  28974. 800c834: 0800c8af .word 0x0800c8af
  28975. 800c838: 0800c8c5 .word 0x0800c8c5
  28976. 800c83c: 0800c8c5 .word 0x0800c8c5
  28977. 800c840: 0800c8c5 .word 0x0800c8c5
  28978. 800c844: 0800c8c5 .word 0x0800c8c5
  28979. 800c848: 0800c8c5 .word 0x0800c8c5
  28980. 800c84c: 0800c8c5 .word 0x0800c8c5
  28981. 800c850: 0800c8c5 .word 0x0800c8c5
  28982. 800c854: 0800c8cd .word 0x0800c8cd
  28983. 800c858: 0800c8c5 .word 0x0800c8c5
  28984. 800c85c: 0800c8c5 .word 0x0800c8c5
  28985. 800c860: 0800c8c5 .word 0x0800c8c5
  28986. 800c864: 0800c8c5 .word 0x0800c8c5
  28987. 800c868: 0800c8c5 .word 0x0800c8c5
  28988. 800c86c: 0800c8c5 .word 0x0800c8c5
  28989. 800c870: 0800c8c5 .word 0x0800c8c5
  28990. 800c874: 0800c8cd .word 0x0800c8cd
  28991. 800c878: 0800c8c5 .word 0x0800c8c5
  28992. 800c87c: 0800c8c5 .word 0x0800c8c5
  28993. 800c880: 0800c8c5 .word 0x0800c8c5
  28994. 800c884: 0800c8c5 .word 0x0800c8c5
  28995. 800c888: 0800c8c5 .word 0x0800c8c5
  28996. 800c88c: 0800c8c5 .word 0x0800c8c5
  28997. 800c890: 0800c8c5 .word 0x0800c8c5
  28998. 800c894: 0800c8cd .word 0x0800c8cd
  28999. case RCC_USART16CLKSOURCE_PCLK2: /* CD/D2 PCLK2 as clock source for USART1/6 */
  29000. /* USART1/6 clock source configuration done later after clock selection check */
  29001. break;
  29002. case RCC_USART16CLKSOURCE_PLL2: /* PLL2 is used as clock source for USART1/6 */
  29003. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
  29004. 800c898: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29005. 800c89c: 3308 adds r3, #8
  29006. 800c89e: 2101 movs r1, #1
  29007. 800c8a0: 4618 mov r0, r3
  29008. 800c8a2: f001 fe79 bl 800e598 <RCCEx_PLL2_Config>
  29009. 800c8a6: 4603 mov r3, r0
  29010. 800c8a8: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29011. /* USART1/6 clock source configuration done later after clock selection check */
  29012. break;
  29013. 800c8ac: e00f b.n 800c8ce <HAL_RCCEx_PeriphCLKConfig+0xa32>
  29014. case RCC_USART16CLKSOURCE_PLL3: /* PLL3 is used as clock source for USART1/6 */
  29015. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
  29016. 800c8ae: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29017. 800c8b2: 3328 adds r3, #40 @ 0x28
  29018. 800c8b4: 2101 movs r1, #1
  29019. 800c8b6: 4618 mov r0, r3
  29020. 800c8b8: f001 ff20 bl 800e6fc <RCCEx_PLL3_Config>
  29021. 800c8bc: 4603 mov r3, r0
  29022. 800c8be: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29023. /* USART1/6 clock source configuration done later after clock selection check */
  29024. break;
  29025. 800c8c2: e004 b.n 800c8ce <HAL_RCCEx_PeriphCLKConfig+0xa32>
  29026. /* LSE, oscillator is used as source of USART1/6 clock */
  29027. /* USART1/6 clock source configuration done later after clock selection check */
  29028. break;
  29029. default:
  29030. ret = HAL_ERROR;
  29031. 800c8c4: 2301 movs r3, #1
  29032. 800c8c6: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29033. break;
  29034. 800c8ca: e000 b.n 800c8ce <HAL_RCCEx_PeriphCLKConfig+0xa32>
  29035. break;
  29036. 800c8cc: bf00 nop
  29037. }
  29038. if (ret == HAL_OK)
  29039. 800c8ce: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29040. 800c8d2: 2b00 cmp r3, #0
  29041. 800c8d4: d10a bne.n 800c8ec <HAL_RCCEx_PeriphCLKConfig+0xa50>
  29042. {
  29043. /* Set the source of USART1/6 clock */
  29044. __HAL_RCC_USART16_CONFIG(PeriphClkInit->Usart16ClockSelection);
  29045. 800c8d6: 4bbf ldr r3, [pc, #764] @ (800cbd4 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  29046. 800c8d8: 6d5b ldr r3, [r3, #84] @ 0x54
  29047. 800c8da: f023 0138 bic.w r1, r3, #56 @ 0x38
  29048. 800c8de: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29049. 800c8e2: 6fdb ldr r3, [r3, #124] @ 0x7c
  29050. 800c8e4: 4abb ldr r2, [pc, #748] @ (800cbd4 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  29051. 800c8e6: 430b orrs r3, r1
  29052. 800c8e8: 6553 str r3, [r2, #84] @ 0x54
  29053. 800c8ea: e003 b.n 800c8f4 <HAL_RCCEx_PeriphCLKConfig+0xa58>
  29054. }
  29055. else
  29056. {
  29057. /* set overall return value */
  29058. status = ret;
  29059. 800c8ec: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29060. 800c8f0: f887 311e strb.w r3, [r7, #286] @ 0x11e
  29061. }
  29062. }
  29063. /*-------------------------- USART2/3/4/5/7/8 Configuration --------------------------*/
  29064. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USART234578) == RCC_PERIPHCLK_USART234578)
  29065. 800c8f4: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29066. 800c8f8: e9d3 2300 ldrd r2, r3, [r3]
  29067. 800c8fc: f002 0302 and.w r3, r2, #2
  29068. 800c900: f8c7 30b0 str.w r3, [r7, #176] @ 0xb0
  29069. 800c904: 2300 movs r3, #0
  29070. 800c906: f8c7 30b4 str.w r3, [r7, #180] @ 0xb4
  29071. 800c90a: e9d7 122c ldrd r1, r2, [r7, #176] @ 0xb0
  29072. 800c90e: 460b mov r3, r1
  29073. 800c910: 4313 orrs r3, r2
  29074. 800c912: d041 beq.n 800c998 <HAL_RCCEx_PeriphCLKConfig+0xafc>
  29075. {
  29076. switch (PeriphClkInit->Usart234578ClockSelection)
  29077. 800c914: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29078. 800c918: 6f9b ldr r3, [r3, #120] @ 0x78
  29079. 800c91a: 2b05 cmp r3, #5
  29080. 800c91c: d824 bhi.n 800c968 <HAL_RCCEx_PeriphCLKConfig+0xacc>
  29081. 800c91e: a201 add r2, pc, #4 @ (adr r2, 800c924 <HAL_RCCEx_PeriphCLKConfig+0xa88>)
  29082. 800c920: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  29083. 800c924: 0800c971 .word 0x0800c971
  29084. 800c928: 0800c93d .word 0x0800c93d
  29085. 800c92c: 0800c953 .word 0x0800c953
  29086. 800c930: 0800c971 .word 0x0800c971
  29087. 800c934: 0800c971 .word 0x0800c971
  29088. 800c938: 0800c971 .word 0x0800c971
  29089. case RCC_USART234578CLKSOURCE_PCLK1: /* CD/D2 PCLK1 as clock source for USART2/3/4/5/7/8 */
  29090. /* USART2/3/4/5/7/8 clock source configuration done later after clock selection check */
  29091. break;
  29092. case RCC_USART234578CLKSOURCE_PLL2: /* PLL2 is used as clock source for USART2/3/4/5/7/8 */
  29093. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
  29094. 800c93c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29095. 800c940: 3308 adds r3, #8
  29096. 800c942: 2101 movs r1, #1
  29097. 800c944: 4618 mov r0, r3
  29098. 800c946: f001 fe27 bl 800e598 <RCCEx_PLL2_Config>
  29099. 800c94a: 4603 mov r3, r0
  29100. 800c94c: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29101. /* USART2/3/4/5/7/8 clock source configuration done later after clock selection check */
  29102. break;
  29103. 800c950: e00f b.n 800c972 <HAL_RCCEx_PeriphCLKConfig+0xad6>
  29104. case RCC_USART234578CLKSOURCE_PLL3: /* PLL3 is used as clock source for USART2/3/4/5/7/8 */
  29105. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
  29106. 800c952: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29107. 800c956: 3328 adds r3, #40 @ 0x28
  29108. 800c958: 2101 movs r1, #1
  29109. 800c95a: 4618 mov r0, r3
  29110. 800c95c: f001 fece bl 800e6fc <RCCEx_PLL3_Config>
  29111. 800c960: 4603 mov r3, r0
  29112. 800c962: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29113. /* USART2/3/4/5/7/8 clock source configuration done later after clock selection check */
  29114. break;
  29115. 800c966: e004 b.n 800c972 <HAL_RCCEx_PeriphCLKConfig+0xad6>
  29116. /* LSE, oscillator is used as source of USART2/3/4/5/7/8 clock */
  29117. /* USART2/3/4/5/7/8 clock source configuration done later after clock selection check */
  29118. break;
  29119. default:
  29120. ret = HAL_ERROR;
  29121. 800c968: 2301 movs r3, #1
  29122. 800c96a: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29123. break;
  29124. 800c96e: e000 b.n 800c972 <HAL_RCCEx_PeriphCLKConfig+0xad6>
  29125. break;
  29126. 800c970: bf00 nop
  29127. }
  29128. if (ret == HAL_OK)
  29129. 800c972: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29130. 800c976: 2b00 cmp r3, #0
  29131. 800c978: d10a bne.n 800c990 <HAL_RCCEx_PeriphCLKConfig+0xaf4>
  29132. {
  29133. /* Set the source of USART2/3/4/5/7/8 clock */
  29134. __HAL_RCC_USART234578_CONFIG(PeriphClkInit->Usart234578ClockSelection);
  29135. 800c97a: 4b96 ldr r3, [pc, #600] @ (800cbd4 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  29136. 800c97c: 6d5b ldr r3, [r3, #84] @ 0x54
  29137. 800c97e: f023 0107 bic.w r1, r3, #7
  29138. 800c982: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29139. 800c986: 6f9b ldr r3, [r3, #120] @ 0x78
  29140. 800c988: 4a92 ldr r2, [pc, #584] @ (800cbd4 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  29141. 800c98a: 430b orrs r3, r1
  29142. 800c98c: 6553 str r3, [r2, #84] @ 0x54
  29143. 800c98e: e003 b.n 800c998 <HAL_RCCEx_PeriphCLKConfig+0xafc>
  29144. }
  29145. else
  29146. {
  29147. /* set overall return value */
  29148. status = ret;
  29149. 800c990: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29150. 800c994: f887 311e strb.w r3, [r7, #286] @ 0x11e
  29151. }
  29152. }
  29153. /*-------------------------- LPUART1 Configuration -------------------------*/
  29154. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPUART1) == RCC_PERIPHCLK_LPUART1)
  29155. 800c998: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29156. 800c99c: e9d3 2300 ldrd r2, r3, [r3]
  29157. 800c9a0: f002 0304 and.w r3, r2, #4
  29158. 800c9a4: f8c7 30a8 str.w r3, [r7, #168] @ 0xa8
  29159. 800c9a8: 2300 movs r3, #0
  29160. 800c9aa: f8c7 30ac str.w r3, [r7, #172] @ 0xac
  29161. 800c9ae: e9d7 122a ldrd r1, r2, [r7, #168] @ 0xa8
  29162. 800c9b2: 460b mov r3, r1
  29163. 800c9b4: 4313 orrs r3, r2
  29164. 800c9b6: d044 beq.n 800ca42 <HAL_RCCEx_PeriphCLKConfig+0xba6>
  29165. {
  29166. switch (PeriphClkInit->Lpuart1ClockSelection)
  29167. 800c9b8: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29168. 800c9bc: f8d3 3094 ldr.w r3, [r3, #148] @ 0x94
  29169. 800c9c0: 2b05 cmp r3, #5
  29170. 800c9c2: d825 bhi.n 800ca10 <HAL_RCCEx_PeriphCLKConfig+0xb74>
  29171. 800c9c4: a201 add r2, pc, #4 @ (adr r2, 800c9cc <HAL_RCCEx_PeriphCLKConfig+0xb30>)
  29172. 800c9c6: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  29173. 800c9ca: bf00 nop
  29174. 800c9cc: 0800ca19 .word 0x0800ca19
  29175. 800c9d0: 0800c9e5 .word 0x0800c9e5
  29176. 800c9d4: 0800c9fb .word 0x0800c9fb
  29177. 800c9d8: 0800ca19 .word 0x0800ca19
  29178. 800c9dc: 0800ca19 .word 0x0800ca19
  29179. 800c9e0: 0800ca19 .word 0x0800ca19
  29180. case RCC_LPUART1CLKSOURCE_PCLK4: /* SRD/D3 PCLK1 (PCLK4) as clock source for LPUART1 */
  29181. /* LPUART1 clock source configuration done later after clock selection check */
  29182. break;
  29183. case RCC_LPUART1CLKSOURCE_PLL2: /* PLL2 is used as clock source for LPUART1 */
  29184. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
  29185. 800c9e4: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29186. 800c9e8: 3308 adds r3, #8
  29187. 800c9ea: 2101 movs r1, #1
  29188. 800c9ec: 4618 mov r0, r3
  29189. 800c9ee: f001 fdd3 bl 800e598 <RCCEx_PLL2_Config>
  29190. 800c9f2: 4603 mov r3, r0
  29191. 800c9f4: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29192. /* LPUART1 clock source configuration done later after clock selection check */
  29193. break;
  29194. 800c9f8: e00f b.n 800ca1a <HAL_RCCEx_PeriphCLKConfig+0xb7e>
  29195. case RCC_LPUART1CLKSOURCE_PLL3: /* PLL3 is used as clock source for LPUART1 */
  29196. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
  29197. 800c9fa: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29198. 800c9fe: 3328 adds r3, #40 @ 0x28
  29199. 800ca00: 2101 movs r1, #1
  29200. 800ca02: 4618 mov r0, r3
  29201. 800ca04: f001 fe7a bl 800e6fc <RCCEx_PLL3_Config>
  29202. 800ca08: 4603 mov r3, r0
  29203. 800ca0a: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29204. /* LPUART1 clock source configuration done later after clock selection check */
  29205. break;
  29206. 800ca0e: e004 b.n 800ca1a <HAL_RCCEx_PeriphCLKConfig+0xb7e>
  29207. /* LSE, oscillator is used as source of LPUART1 clock */
  29208. /* LPUART1 clock source configuration done later after clock selection check */
  29209. break;
  29210. default:
  29211. ret = HAL_ERROR;
  29212. 800ca10: 2301 movs r3, #1
  29213. 800ca12: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29214. break;
  29215. 800ca16: e000 b.n 800ca1a <HAL_RCCEx_PeriphCLKConfig+0xb7e>
  29216. break;
  29217. 800ca18: bf00 nop
  29218. }
  29219. if (ret == HAL_OK)
  29220. 800ca1a: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29221. 800ca1e: 2b00 cmp r3, #0
  29222. 800ca20: d10b bne.n 800ca3a <HAL_RCCEx_PeriphCLKConfig+0xb9e>
  29223. {
  29224. /* Set the source of LPUART1 clock */
  29225. __HAL_RCC_LPUART1_CONFIG(PeriphClkInit->Lpuart1ClockSelection);
  29226. 800ca22: 4b6c ldr r3, [pc, #432] @ (800cbd4 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  29227. 800ca24: 6d9b ldr r3, [r3, #88] @ 0x58
  29228. 800ca26: f023 0107 bic.w r1, r3, #7
  29229. 800ca2a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29230. 800ca2e: f8d3 3094 ldr.w r3, [r3, #148] @ 0x94
  29231. 800ca32: 4a68 ldr r2, [pc, #416] @ (800cbd4 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  29232. 800ca34: 430b orrs r3, r1
  29233. 800ca36: 6593 str r3, [r2, #88] @ 0x58
  29234. 800ca38: e003 b.n 800ca42 <HAL_RCCEx_PeriphCLKConfig+0xba6>
  29235. }
  29236. else
  29237. {
  29238. /* set overall return value */
  29239. status = ret;
  29240. 800ca3a: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29241. 800ca3e: f887 311e strb.w r3, [r7, #286] @ 0x11e
  29242. }
  29243. }
  29244. /*---------------------------- LPTIM1 configuration -------------------------------*/
  29245. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPTIM1) == RCC_PERIPHCLK_LPTIM1)
  29246. 800ca42: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29247. 800ca46: e9d3 2300 ldrd r2, r3, [r3]
  29248. 800ca4a: f002 0320 and.w r3, r2, #32
  29249. 800ca4e: f8c7 30a0 str.w r3, [r7, #160] @ 0xa0
  29250. 800ca52: 2300 movs r3, #0
  29251. 800ca54: f8c7 30a4 str.w r3, [r7, #164] @ 0xa4
  29252. 800ca58: e9d7 1228 ldrd r1, r2, [r7, #160] @ 0xa0
  29253. 800ca5c: 460b mov r3, r1
  29254. 800ca5e: 4313 orrs r3, r2
  29255. 800ca60: d055 beq.n 800cb0e <HAL_RCCEx_PeriphCLKConfig+0xc72>
  29256. {
  29257. switch (PeriphClkInit->Lptim1ClockSelection)
  29258. 800ca62: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29259. 800ca66: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  29260. 800ca6a: f1b3 4fa0 cmp.w r3, #1342177280 @ 0x50000000
  29261. 800ca6e: d033 beq.n 800cad8 <HAL_RCCEx_PeriphCLKConfig+0xc3c>
  29262. 800ca70: f1b3 4fa0 cmp.w r3, #1342177280 @ 0x50000000
  29263. 800ca74: d82c bhi.n 800cad0 <HAL_RCCEx_PeriphCLKConfig+0xc34>
  29264. 800ca76: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  29265. 800ca7a: d02f beq.n 800cadc <HAL_RCCEx_PeriphCLKConfig+0xc40>
  29266. 800ca7c: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  29267. 800ca80: d826 bhi.n 800cad0 <HAL_RCCEx_PeriphCLKConfig+0xc34>
  29268. 800ca82: f1b3 5f40 cmp.w r3, #805306368 @ 0x30000000
  29269. 800ca86: d02b beq.n 800cae0 <HAL_RCCEx_PeriphCLKConfig+0xc44>
  29270. 800ca88: f1b3 5f40 cmp.w r3, #805306368 @ 0x30000000
  29271. 800ca8c: d820 bhi.n 800cad0 <HAL_RCCEx_PeriphCLKConfig+0xc34>
  29272. 800ca8e: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  29273. 800ca92: d012 beq.n 800caba <HAL_RCCEx_PeriphCLKConfig+0xc1e>
  29274. 800ca94: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  29275. 800ca98: d81a bhi.n 800cad0 <HAL_RCCEx_PeriphCLKConfig+0xc34>
  29276. 800ca9a: 2b00 cmp r3, #0
  29277. 800ca9c: d022 beq.n 800cae4 <HAL_RCCEx_PeriphCLKConfig+0xc48>
  29278. 800ca9e: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  29279. 800caa2: d115 bne.n 800cad0 <HAL_RCCEx_PeriphCLKConfig+0xc34>
  29280. /* LPTIM1 clock source configuration done later after clock selection check */
  29281. break;
  29282. case RCC_LPTIM1CLKSOURCE_PLL2: /* PLL2 is used as clock source for LPTIM1*/
  29283. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  29284. 800caa4: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29285. 800caa8: 3308 adds r3, #8
  29286. 800caaa: 2100 movs r1, #0
  29287. 800caac: 4618 mov r0, r3
  29288. 800caae: f001 fd73 bl 800e598 <RCCEx_PLL2_Config>
  29289. 800cab2: 4603 mov r3, r0
  29290. 800cab4: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29291. /* LPTIM1 clock source configuration done later after clock selection check */
  29292. break;
  29293. 800cab8: e015 b.n 800cae6 <HAL_RCCEx_PeriphCLKConfig+0xc4a>
  29294. case RCC_LPTIM1CLKSOURCE_PLL3: /* PLL3 is used as clock source for LPTIM1*/
  29295. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE);
  29296. 800caba: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29297. 800cabe: 3328 adds r3, #40 @ 0x28
  29298. 800cac0: 2102 movs r1, #2
  29299. 800cac2: 4618 mov r0, r3
  29300. 800cac4: f001 fe1a bl 800e6fc <RCCEx_PLL3_Config>
  29301. 800cac8: 4603 mov r3, r0
  29302. 800caca: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29303. /* LPTIM1 clock source configuration done later after clock selection check */
  29304. break;
  29305. 800cace: e00a b.n 800cae6 <HAL_RCCEx_PeriphCLKConfig+0xc4a>
  29306. /* HSI, HSE, or CSI oscillator is used as source of LPTIM1 clock */
  29307. /* LPTIM1 clock source configuration done later after clock selection check */
  29308. break;
  29309. default:
  29310. ret = HAL_ERROR;
  29311. 800cad0: 2301 movs r3, #1
  29312. 800cad2: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29313. break;
  29314. 800cad6: e006 b.n 800cae6 <HAL_RCCEx_PeriphCLKConfig+0xc4a>
  29315. break;
  29316. 800cad8: bf00 nop
  29317. 800cada: e004 b.n 800cae6 <HAL_RCCEx_PeriphCLKConfig+0xc4a>
  29318. break;
  29319. 800cadc: bf00 nop
  29320. 800cade: e002 b.n 800cae6 <HAL_RCCEx_PeriphCLKConfig+0xc4a>
  29321. break;
  29322. 800cae0: bf00 nop
  29323. 800cae2: e000 b.n 800cae6 <HAL_RCCEx_PeriphCLKConfig+0xc4a>
  29324. break;
  29325. 800cae4: bf00 nop
  29326. }
  29327. if (ret == HAL_OK)
  29328. 800cae6: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29329. 800caea: 2b00 cmp r3, #0
  29330. 800caec: d10b bne.n 800cb06 <HAL_RCCEx_PeriphCLKConfig+0xc6a>
  29331. {
  29332. /* Set the source of LPTIM1 clock*/
  29333. __HAL_RCC_LPTIM1_CONFIG(PeriphClkInit->Lptim1ClockSelection);
  29334. 800caee: 4b39 ldr r3, [pc, #228] @ (800cbd4 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  29335. 800caf0: 6d5b ldr r3, [r3, #84] @ 0x54
  29336. 800caf2: f023 41e0 bic.w r1, r3, #1879048192 @ 0x70000000
  29337. 800caf6: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29338. 800cafa: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  29339. 800cafe: 4a35 ldr r2, [pc, #212] @ (800cbd4 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  29340. 800cb00: 430b orrs r3, r1
  29341. 800cb02: 6553 str r3, [r2, #84] @ 0x54
  29342. 800cb04: e003 b.n 800cb0e <HAL_RCCEx_PeriphCLKConfig+0xc72>
  29343. }
  29344. else
  29345. {
  29346. /* set overall return value */
  29347. status = ret;
  29348. 800cb06: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29349. 800cb0a: f887 311e strb.w r3, [r7, #286] @ 0x11e
  29350. }
  29351. }
  29352. /*---------------------------- LPTIM2 configuration -------------------------------*/
  29353. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPTIM2) == RCC_PERIPHCLK_LPTIM2)
  29354. 800cb0e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29355. 800cb12: e9d3 2300 ldrd r2, r3, [r3]
  29356. 800cb16: f002 0340 and.w r3, r2, #64 @ 0x40
  29357. 800cb1a: f8c7 3098 str.w r3, [r7, #152] @ 0x98
  29358. 800cb1e: 2300 movs r3, #0
  29359. 800cb20: f8c7 309c str.w r3, [r7, #156] @ 0x9c
  29360. 800cb24: e9d7 1226 ldrd r1, r2, [r7, #152] @ 0x98
  29361. 800cb28: 460b mov r3, r1
  29362. 800cb2a: 4313 orrs r3, r2
  29363. 800cb2c: d058 beq.n 800cbe0 <HAL_RCCEx_PeriphCLKConfig+0xd44>
  29364. {
  29365. switch (PeriphClkInit->Lptim2ClockSelection)
  29366. 800cb2e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29367. 800cb32: f8d3 309c ldr.w r3, [r3, #156] @ 0x9c
  29368. 800cb36: f5b3 5fa0 cmp.w r3, #5120 @ 0x1400
  29369. 800cb3a: d033 beq.n 800cba4 <HAL_RCCEx_PeriphCLKConfig+0xd08>
  29370. 800cb3c: f5b3 5fa0 cmp.w r3, #5120 @ 0x1400
  29371. 800cb40: d82c bhi.n 800cb9c <HAL_RCCEx_PeriphCLKConfig+0xd00>
  29372. 800cb42: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  29373. 800cb46: d02f beq.n 800cba8 <HAL_RCCEx_PeriphCLKConfig+0xd0c>
  29374. 800cb48: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  29375. 800cb4c: d826 bhi.n 800cb9c <HAL_RCCEx_PeriphCLKConfig+0xd00>
  29376. 800cb4e: f5b3 6f40 cmp.w r3, #3072 @ 0xc00
  29377. 800cb52: d02b beq.n 800cbac <HAL_RCCEx_PeriphCLKConfig+0xd10>
  29378. 800cb54: f5b3 6f40 cmp.w r3, #3072 @ 0xc00
  29379. 800cb58: d820 bhi.n 800cb9c <HAL_RCCEx_PeriphCLKConfig+0xd00>
  29380. 800cb5a: f5b3 6f00 cmp.w r3, #2048 @ 0x800
  29381. 800cb5e: d012 beq.n 800cb86 <HAL_RCCEx_PeriphCLKConfig+0xcea>
  29382. 800cb60: f5b3 6f00 cmp.w r3, #2048 @ 0x800
  29383. 800cb64: d81a bhi.n 800cb9c <HAL_RCCEx_PeriphCLKConfig+0xd00>
  29384. 800cb66: 2b00 cmp r3, #0
  29385. 800cb68: d022 beq.n 800cbb0 <HAL_RCCEx_PeriphCLKConfig+0xd14>
  29386. 800cb6a: f5b3 6f80 cmp.w r3, #1024 @ 0x400
  29387. 800cb6e: d115 bne.n 800cb9c <HAL_RCCEx_PeriphCLKConfig+0xd00>
  29388. /* LPTIM2 clock source configuration done later after clock selection check */
  29389. break;
  29390. case RCC_LPTIM2CLKSOURCE_PLL2: /* PLL2 is used as clock source for LPTIM2*/
  29391. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  29392. 800cb70: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29393. 800cb74: 3308 adds r3, #8
  29394. 800cb76: 2100 movs r1, #0
  29395. 800cb78: 4618 mov r0, r3
  29396. 800cb7a: f001 fd0d bl 800e598 <RCCEx_PLL2_Config>
  29397. 800cb7e: 4603 mov r3, r0
  29398. 800cb80: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29399. /* LPTIM2 clock source configuration done later after clock selection check */
  29400. break;
  29401. 800cb84: e015 b.n 800cbb2 <HAL_RCCEx_PeriphCLKConfig+0xd16>
  29402. case RCC_LPTIM2CLKSOURCE_PLL3: /* PLL3 is used as clock source for LPTIM2*/
  29403. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE);
  29404. 800cb86: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29405. 800cb8a: 3328 adds r3, #40 @ 0x28
  29406. 800cb8c: 2102 movs r1, #2
  29407. 800cb8e: 4618 mov r0, r3
  29408. 800cb90: f001 fdb4 bl 800e6fc <RCCEx_PLL3_Config>
  29409. 800cb94: 4603 mov r3, r0
  29410. 800cb96: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29411. /* LPTIM2 clock source configuration done later after clock selection check */
  29412. break;
  29413. 800cb9a: e00a b.n 800cbb2 <HAL_RCCEx_PeriphCLKConfig+0xd16>
  29414. /* HSI, HSE, or CSI oscillator is used as source of LPTIM2 clock */
  29415. /* LPTIM2 clock source configuration done later after clock selection check */
  29416. break;
  29417. default:
  29418. ret = HAL_ERROR;
  29419. 800cb9c: 2301 movs r3, #1
  29420. 800cb9e: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29421. break;
  29422. 800cba2: e006 b.n 800cbb2 <HAL_RCCEx_PeriphCLKConfig+0xd16>
  29423. break;
  29424. 800cba4: bf00 nop
  29425. 800cba6: e004 b.n 800cbb2 <HAL_RCCEx_PeriphCLKConfig+0xd16>
  29426. break;
  29427. 800cba8: bf00 nop
  29428. 800cbaa: e002 b.n 800cbb2 <HAL_RCCEx_PeriphCLKConfig+0xd16>
  29429. break;
  29430. 800cbac: bf00 nop
  29431. 800cbae: e000 b.n 800cbb2 <HAL_RCCEx_PeriphCLKConfig+0xd16>
  29432. break;
  29433. 800cbb0: bf00 nop
  29434. }
  29435. if (ret == HAL_OK)
  29436. 800cbb2: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29437. 800cbb6: 2b00 cmp r3, #0
  29438. 800cbb8: d10e bne.n 800cbd8 <HAL_RCCEx_PeriphCLKConfig+0xd3c>
  29439. {
  29440. /* Set the source of LPTIM2 clock*/
  29441. __HAL_RCC_LPTIM2_CONFIG(PeriphClkInit->Lptim2ClockSelection);
  29442. 800cbba: 4b06 ldr r3, [pc, #24] @ (800cbd4 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  29443. 800cbbc: 6d9b ldr r3, [r3, #88] @ 0x58
  29444. 800cbbe: f423 51e0 bic.w r1, r3, #7168 @ 0x1c00
  29445. 800cbc2: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29446. 800cbc6: f8d3 309c ldr.w r3, [r3, #156] @ 0x9c
  29447. 800cbca: 4a02 ldr r2, [pc, #8] @ (800cbd4 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  29448. 800cbcc: 430b orrs r3, r1
  29449. 800cbce: 6593 str r3, [r2, #88] @ 0x58
  29450. 800cbd0: e006 b.n 800cbe0 <HAL_RCCEx_PeriphCLKConfig+0xd44>
  29451. 800cbd2: bf00 nop
  29452. 800cbd4: 58024400 .word 0x58024400
  29453. }
  29454. else
  29455. {
  29456. /* set overall return value */
  29457. status = ret;
  29458. 800cbd8: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29459. 800cbdc: f887 311e strb.w r3, [r7, #286] @ 0x11e
  29460. }
  29461. }
  29462. /*---------------------------- LPTIM345 configuration -------------------------------*/
  29463. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPTIM345) == RCC_PERIPHCLK_LPTIM345)
  29464. 800cbe0: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29465. 800cbe4: e9d3 2300 ldrd r2, r3, [r3]
  29466. 800cbe8: f002 0380 and.w r3, r2, #128 @ 0x80
  29467. 800cbec: f8c7 3090 str.w r3, [r7, #144] @ 0x90
  29468. 800cbf0: 2300 movs r3, #0
  29469. 800cbf2: f8c7 3094 str.w r3, [r7, #148] @ 0x94
  29470. 800cbf6: e9d7 1224 ldrd r1, r2, [r7, #144] @ 0x90
  29471. 800cbfa: 460b mov r3, r1
  29472. 800cbfc: 4313 orrs r3, r2
  29473. 800cbfe: d055 beq.n 800ccac <HAL_RCCEx_PeriphCLKConfig+0xe10>
  29474. {
  29475. switch (PeriphClkInit->Lptim345ClockSelection)
  29476. 800cc00: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29477. 800cc04: f8d3 30a0 ldr.w r3, [r3, #160] @ 0xa0
  29478. 800cc08: f5b3 4f20 cmp.w r3, #40960 @ 0xa000
  29479. 800cc0c: d033 beq.n 800cc76 <HAL_RCCEx_PeriphCLKConfig+0xdda>
  29480. 800cc0e: f5b3 4f20 cmp.w r3, #40960 @ 0xa000
  29481. 800cc12: d82c bhi.n 800cc6e <HAL_RCCEx_PeriphCLKConfig+0xdd2>
  29482. 800cc14: f5b3 4f00 cmp.w r3, #32768 @ 0x8000
  29483. 800cc18: d02f beq.n 800cc7a <HAL_RCCEx_PeriphCLKConfig+0xdde>
  29484. 800cc1a: f5b3 4f00 cmp.w r3, #32768 @ 0x8000
  29485. 800cc1e: d826 bhi.n 800cc6e <HAL_RCCEx_PeriphCLKConfig+0xdd2>
  29486. 800cc20: f5b3 4fc0 cmp.w r3, #24576 @ 0x6000
  29487. 800cc24: d02b beq.n 800cc7e <HAL_RCCEx_PeriphCLKConfig+0xde2>
  29488. 800cc26: f5b3 4fc0 cmp.w r3, #24576 @ 0x6000
  29489. 800cc2a: d820 bhi.n 800cc6e <HAL_RCCEx_PeriphCLKConfig+0xdd2>
  29490. 800cc2c: f5b3 4f80 cmp.w r3, #16384 @ 0x4000
  29491. 800cc30: d012 beq.n 800cc58 <HAL_RCCEx_PeriphCLKConfig+0xdbc>
  29492. 800cc32: f5b3 4f80 cmp.w r3, #16384 @ 0x4000
  29493. 800cc36: d81a bhi.n 800cc6e <HAL_RCCEx_PeriphCLKConfig+0xdd2>
  29494. 800cc38: 2b00 cmp r3, #0
  29495. 800cc3a: d022 beq.n 800cc82 <HAL_RCCEx_PeriphCLKConfig+0xde6>
  29496. 800cc3c: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  29497. 800cc40: d115 bne.n 800cc6e <HAL_RCCEx_PeriphCLKConfig+0xdd2>
  29498. case RCC_LPTIM345CLKSOURCE_PCLK4: /* SRD/D3 PCLK1 (PCLK4) as clock source for LPTIM3/4/5 */
  29499. /* LPTIM3/4/5 clock source configuration done later after clock selection check */
  29500. break;
  29501. case RCC_LPTIM345CLKSOURCE_PLL2: /* PLL2 is used as clock source for LPTIM3/4/5 */
  29502. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  29503. 800cc42: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29504. 800cc46: 3308 adds r3, #8
  29505. 800cc48: 2100 movs r1, #0
  29506. 800cc4a: 4618 mov r0, r3
  29507. 800cc4c: f001 fca4 bl 800e598 <RCCEx_PLL2_Config>
  29508. 800cc50: 4603 mov r3, r0
  29509. 800cc52: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29510. /* LPTIM3/4/5 clock source configuration done later after clock selection check */
  29511. break;
  29512. 800cc56: e015 b.n 800cc84 <HAL_RCCEx_PeriphCLKConfig+0xde8>
  29513. case RCC_LPTIM345CLKSOURCE_PLL3: /* PLL3 is used as clock source for LPTIM3/4/5 */
  29514. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE);
  29515. 800cc58: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29516. 800cc5c: 3328 adds r3, #40 @ 0x28
  29517. 800cc5e: 2102 movs r1, #2
  29518. 800cc60: 4618 mov r0, r3
  29519. 800cc62: f001 fd4b bl 800e6fc <RCCEx_PLL3_Config>
  29520. 800cc66: 4603 mov r3, r0
  29521. 800cc68: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29522. /* LPTIM3/4/5 clock source configuration done later after clock selection check */
  29523. break;
  29524. 800cc6c: e00a b.n 800cc84 <HAL_RCCEx_PeriphCLKConfig+0xde8>
  29525. /* HSI, HSE, or CSI oscillator is used as source of LPTIM3/4/5 clock */
  29526. /* LPTIM3/4/5 clock source configuration done later after clock selection check */
  29527. break;
  29528. default:
  29529. ret = HAL_ERROR;
  29530. 800cc6e: 2301 movs r3, #1
  29531. 800cc70: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29532. break;
  29533. 800cc74: e006 b.n 800cc84 <HAL_RCCEx_PeriphCLKConfig+0xde8>
  29534. break;
  29535. 800cc76: bf00 nop
  29536. 800cc78: e004 b.n 800cc84 <HAL_RCCEx_PeriphCLKConfig+0xde8>
  29537. break;
  29538. 800cc7a: bf00 nop
  29539. 800cc7c: e002 b.n 800cc84 <HAL_RCCEx_PeriphCLKConfig+0xde8>
  29540. break;
  29541. 800cc7e: bf00 nop
  29542. 800cc80: e000 b.n 800cc84 <HAL_RCCEx_PeriphCLKConfig+0xde8>
  29543. break;
  29544. 800cc82: bf00 nop
  29545. }
  29546. if (ret == HAL_OK)
  29547. 800cc84: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29548. 800cc88: 2b00 cmp r3, #0
  29549. 800cc8a: d10b bne.n 800cca4 <HAL_RCCEx_PeriphCLKConfig+0xe08>
  29550. {
  29551. /* Set the source of LPTIM3/4/5 clock */
  29552. __HAL_RCC_LPTIM345_CONFIG(PeriphClkInit->Lptim345ClockSelection);
  29553. 800cc8c: 4bbb ldr r3, [pc, #748] @ (800cf7c <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  29554. 800cc8e: 6d9b ldr r3, [r3, #88] @ 0x58
  29555. 800cc90: f423 4160 bic.w r1, r3, #57344 @ 0xe000
  29556. 800cc94: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29557. 800cc98: f8d3 30a0 ldr.w r3, [r3, #160] @ 0xa0
  29558. 800cc9c: 4ab7 ldr r2, [pc, #732] @ (800cf7c <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  29559. 800cc9e: 430b orrs r3, r1
  29560. 800cca0: 6593 str r3, [r2, #88] @ 0x58
  29561. 800cca2: e003 b.n 800ccac <HAL_RCCEx_PeriphCLKConfig+0xe10>
  29562. }
  29563. else
  29564. {
  29565. /* set overall return value */
  29566. status = ret;
  29567. 800cca4: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29568. 800cca8: f887 311e strb.w r3, [r7, #286] @ 0x11e
  29569. __HAL_RCC_I2C1235_CONFIG(PeriphClkInit->I2c1235ClockSelection);
  29570. }
  29571. #else
  29572. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2C123) == RCC_PERIPHCLK_I2C123)
  29573. 800ccac: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29574. 800ccb0: e9d3 2300 ldrd r2, r3, [r3]
  29575. 800ccb4: f002 0308 and.w r3, r2, #8
  29576. 800ccb8: f8c7 3088 str.w r3, [r7, #136] @ 0x88
  29577. 800ccbc: 2300 movs r3, #0
  29578. 800ccbe: f8c7 308c str.w r3, [r7, #140] @ 0x8c
  29579. 800ccc2: e9d7 1222 ldrd r1, r2, [r7, #136] @ 0x88
  29580. 800ccc6: 460b mov r3, r1
  29581. 800ccc8: 4313 orrs r3, r2
  29582. 800ccca: d01e beq.n 800cd0a <HAL_RCCEx_PeriphCLKConfig+0xe6e>
  29583. {
  29584. /* Check the parameters */
  29585. assert_param(IS_RCC_I2C123CLKSOURCE(PeriphClkInit->I2c123ClockSelection));
  29586. if ((PeriphClkInit->I2c123ClockSelection) == RCC_I2C123CLKSOURCE_PLL3)
  29587. 800cccc: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29588. 800ccd0: f8d3 3084 ldr.w r3, [r3, #132] @ 0x84
  29589. 800ccd4: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  29590. 800ccd8: d10c bne.n 800ccf4 <HAL_RCCEx_PeriphCLKConfig+0xe58>
  29591. {
  29592. if (RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE) != HAL_OK)
  29593. 800ccda: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29594. 800ccde: 3328 adds r3, #40 @ 0x28
  29595. 800cce0: 2102 movs r1, #2
  29596. 800cce2: 4618 mov r0, r3
  29597. 800cce4: f001 fd0a bl 800e6fc <RCCEx_PLL3_Config>
  29598. 800cce8: 4603 mov r3, r0
  29599. 800ccea: 2b00 cmp r3, #0
  29600. 800ccec: d002 beq.n 800ccf4 <HAL_RCCEx_PeriphCLKConfig+0xe58>
  29601. {
  29602. status = HAL_ERROR;
  29603. 800ccee: 2301 movs r3, #1
  29604. 800ccf0: f887 311e strb.w r3, [r7, #286] @ 0x11e
  29605. }
  29606. }
  29607. __HAL_RCC_I2C123_CONFIG(PeriphClkInit->I2c123ClockSelection);
  29608. 800ccf4: 4ba1 ldr r3, [pc, #644] @ (800cf7c <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  29609. 800ccf6: 6d5b ldr r3, [r3, #84] @ 0x54
  29610. 800ccf8: f423 5140 bic.w r1, r3, #12288 @ 0x3000
  29611. 800ccfc: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29612. 800cd00: f8d3 3084 ldr.w r3, [r3, #132] @ 0x84
  29613. 800cd04: 4a9d ldr r2, [pc, #628] @ (800cf7c <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  29614. 800cd06: 430b orrs r3, r1
  29615. 800cd08: 6553 str r3, [r2, #84] @ 0x54
  29616. }
  29617. #endif /* I2C5 */
  29618. /*------------------------------ I2C4 Configuration ------------------------*/
  29619. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2C4) == RCC_PERIPHCLK_I2C4)
  29620. 800cd0a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29621. 800cd0e: e9d3 2300 ldrd r2, r3, [r3]
  29622. 800cd12: f002 0310 and.w r3, r2, #16
  29623. 800cd16: f8c7 3080 str.w r3, [r7, #128] @ 0x80
  29624. 800cd1a: 2300 movs r3, #0
  29625. 800cd1c: f8c7 3084 str.w r3, [r7, #132] @ 0x84
  29626. 800cd20: e9d7 1220 ldrd r1, r2, [r7, #128] @ 0x80
  29627. 800cd24: 460b mov r3, r1
  29628. 800cd26: 4313 orrs r3, r2
  29629. 800cd28: d01e beq.n 800cd68 <HAL_RCCEx_PeriphCLKConfig+0xecc>
  29630. {
  29631. /* Check the parameters */
  29632. assert_param(IS_RCC_I2C4CLKSOURCE(PeriphClkInit->I2c4ClockSelection));
  29633. if ((PeriphClkInit->I2c4ClockSelection) == RCC_I2C4CLKSOURCE_PLL3)
  29634. 800cd2a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29635. 800cd2e: f8d3 3098 ldr.w r3, [r3, #152] @ 0x98
  29636. 800cd32: f5b3 7f80 cmp.w r3, #256 @ 0x100
  29637. 800cd36: d10c bne.n 800cd52 <HAL_RCCEx_PeriphCLKConfig+0xeb6>
  29638. {
  29639. if (RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE) != HAL_OK)
  29640. 800cd38: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29641. 800cd3c: 3328 adds r3, #40 @ 0x28
  29642. 800cd3e: 2102 movs r1, #2
  29643. 800cd40: 4618 mov r0, r3
  29644. 800cd42: f001 fcdb bl 800e6fc <RCCEx_PLL3_Config>
  29645. 800cd46: 4603 mov r3, r0
  29646. 800cd48: 2b00 cmp r3, #0
  29647. 800cd4a: d002 beq.n 800cd52 <HAL_RCCEx_PeriphCLKConfig+0xeb6>
  29648. {
  29649. status = HAL_ERROR;
  29650. 800cd4c: 2301 movs r3, #1
  29651. 800cd4e: f887 311e strb.w r3, [r7, #286] @ 0x11e
  29652. }
  29653. }
  29654. __HAL_RCC_I2C4_CONFIG(PeriphClkInit->I2c4ClockSelection);
  29655. 800cd52: 4b8a ldr r3, [pc, #552] @ (800cf7c <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  29656. 800cd54: 6d9b ldr r3, [r3, #88] @ 0x58
  29657. 800cd56: f423 7140 bic.w r1, r3, #768 @ 0x300
  29658. 800cd5a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29659. 800cd5e: f8d3 3098 ldr.w r3, [r3, #152] @ 0x98
  29660. 800cd62: 4a86 ldr r2, [pc, #536] @ (800cf7c <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  29661. 800cd64: 430b orrs r3, r1
  29662. 800cd66: 6593 str r3, [r2, #88] @ 0x58
  29663. }
  29664. /*---------------------------- ADC configuration -------------------------------*/
  29665. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC)
  29666. 800cd68: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29667. 800cd6c: e9d3 2300 ldrd r2, r3, [r3]
  29668. 800cd70: f402 2300 and.w r3, r2, #524288 @ 0x80000
  29669. 800cd74: 67bb str r3, [r7, #120] @ 0x78
  29670. 800cd76: 2300 movs r3, #0
  29671. 800cd78: 67fb str r3, [r7, #124] @ 0x7c
  29672. 800cd7a: e9d7 121e ldrd r1, r2, [r7, #120] @ 0x78
  29673. 800cd7e: 460b mov r3, r1
  29674. 800cd80: 4313 orrs r3, r2
  29675. 800cd82: d03e beq.n 800ce02 <HAL_RCCEx_PeriphCLKConfig+0xf66>
  29676. {
  29677. switch (PeriphClkInit->AdcClockSelection)
  29678. 800cd84: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29679. 800cd88: f8d3 30a4 ldr.w r3, [r3, #164] @ 0xa4
  29680. 800cd8c: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  29681. 800cd90: d022 beq.n 800cdd8 <HAL_RCCEx_PeriphCLKConfig+0xf3c>
  29682. 800cd92: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  29683. 800cd96: d81b bhi.n 800cdd0 <HAL_RCCEx_PeriphCLKConfig+0xf34>
  29684. 800cd98: 2b00 cmp r3, #0
  29685. 800cd9a: d003 beq.n 800cda4 <HAL_RCCEx_PeriphCLKConfig+0xf08>
  29686. 800cd9c: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  29687. 800cda0: d00b beq.n 800cdba <HAL_RCCEx_PeriphCLKConfig+0xf1e>
  29688. 800cda2: e015 b.n 800cdd0 <HAL_RCCEx_PeriphCLKConfig+0xf34>
  29689. {
  29690. case RCC_ADCCLKSOURCE_PLL2: /* PLL2 is used as clock source for ADC*/
  29691. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  29692. 800cda4: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29693. 800cda8: 3308 adds r3, #8
  29694. 800cdaa: 2100 movs r1, #0
  29695. 800cdac: 4618 mov r0, r3
  29696. 800cdae: f001 fbf3 bl 800e598 <RCCEx_PLL2_Config>
  29697. 800cdb2: 4603 mov r3, r0
  29698. 800cdb4: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29699. /* ADC clock source configuration done later after clock selection check */
  29700. break;
  29701. 800cdb8: e00f b.n 800cdda <HAL_RCCEx_PeriphCLKConfig+0xf3e>
  29702. case RCC_ADCCLKSOURCE_PLL3: /* PLL3 is used as clock source for ADC*/
  29703. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE);
  29704. 800cdba: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29705. 800cdbe: 3328 adds r3, #40 @ 0x28
  29706. 800cdc0: 2102 movs r1, #2
  29707. 800cdc2: 4618 mov r0, r3
  29708. 800cdc4: f001 fc9a bl 800e6fc <RCCEx_PLL3_Config>
  29709. 800cdc8: 4603 mov r3, r0
  29710. 800cdca: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29711. /* ADC clock source configuration done later after clock selection check */
  29712. break;
  29713. 800cdce: e004 b.n 800cdda <HAL_RCCEx_PeriphCLKConfig+0xf3e>
  29714. /* HSI, HSE, or CSI oscillator is used as source of ADC clock */
  29715. /* ADC clock source configuration done later after clock selection check */
  29716. break;
  29717. default:
  29718. ret = HAL_ERROR;
  29719. 800cdd0: 2301 movs r3, #1
  29720. 800cdd2: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29721. break;
  29722. 800cdd6: e000 b.n 800cdda <HAL_RCCEx_PeriphCLKConfig+0xf3e>
  29723. break;
  29724. 800cdd8: bf00 nop
  29725. }
  29726. if (ret == HAL_OK)
  29727. 800cdda: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29728. 800cdde: 2b00 cmp r3, #0
  29729. 800cde0: d10b bne.n 800cdfa <HAL_RCCEx_PeriphCLKConfig+0xf5e>
  29730. {
  29731. /* Set the source of ADC clock*/
  29732. __HAL_RCC_ADC_CONFIG(PeriphClkInit->AdcClockSelection);
  29733. 800cde2: 4b66 ldr r3, [pc, #408] @ (800cf7c <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  29734. 800cde4: 6d9b ldr r3, [r3, #88] @ 0x58
  29735. 800cde6: f423 3140 bic.w r1, r3, #196608 @ 0x30000
  29736. 800cdea: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29737. 800cdee: f8d3 30a4 ldr.w r3, [r3, #164] @ 0xa4
  29738. 800cdf2: 4a62 ldr r2, [pc, #392] @ (800cf7c <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  29739. 800cdf4: 430b orrs r3, r1
  29740. 800cdf6: 6593 str r3, [r2, #88] @ 0x58
  29741. 800cdf8: e003 b.n 800ce02 <HAL_RCCEx_PeriphCLKConfig+0xf66>
  29742. }
  29743. else
  29744. {
  29745. /* set overall return value */
  29746. status = ret;
  29747. 800cdfa: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29748. 800cdfe: f887 311e strb.w r3, [r7, #286] @ 0x11e
  29749. }
  29750. }
  29751. /*------------------------------ USB Configuration -------------------------*/
  29752. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB)
  29753. 800ce02: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29754. 800ce06: e9d3 2300 ldrd r2, r3, [r3]
  29755. 800ce0a: f402 2380 and.w r3, r2, #262144 @ 0x40000
  29756. 800ce0e: 673b str r3, [r7, #112] @ 0x70
  29757. 800ce10: 2300 movs r3, #0
  29758. 800ce12: 677b str r3, [r7, #116] @ 0x74
  29759. 800ce14: e9d7 121c ldrd r1, r2, [r7, #112] @ 0x70
  29760. 800ce18: 460b mov r3, r1
  29761. 800ce1a: 4313 orrs r3, r2
  29762. 800ce1c: d03b beq.n 800ce96 <HAL_RCCEx_PeriphCLKConfig+0xffa>
  29763. {
  29764. switch (PeriphClkInit->UsbClockSelection)
  29765. 800ce1e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29766. 800ce22: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  29767. 800ce26: f5b3 1f40 cmp.w r3, #3145728 @ 0x300000
  29768. 800ce2a: d01f beq.n 800ce6c <HAL_RCCEx_PeriphCLKConfig+0xfd0>
  29769. 800ce2c: f5b3 1f40 cmp.w r3, #3145728 @ 0x300000
  29770. 800ce30: d818 bhi.n 800ce64 <HAL_RCCEx_PeriphCLKConfig+0xfc8>
  29771. 800ce32: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
  29772. 800ce36: d003 beq.n 800ce40 <HAL_RCCEx_PeriphCLKConfig+0xfa4>
  29773. 800ce38: f5b3 1f00 cmp.w r3, #2097152 @ 0x200000
  29774. 800ce3c: d007 beq.n 800ce4e <HAL_RCCEx_PeriphCLKConfig+0xfb2>
  29775. 800ce3e: e011 b.n 800ce64 <HAL_RCCEx_PeriphCLKConfig+0xfc8>
  29776. {
  29777. case RCC_USBCLKSOURCE_PLL: /* PLL is used as clock source for USB*/
  29778. /* Enable USB Clock output generated form System USB . */
  29779. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  29780. 800ce40: 4b4e ldr r3, [pc, #312] @ (800cf7c <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  29781. 800ce42: 6adb ldr r3, [r3, #44] @ 0x2c
  29782. 800ce44: 4a4d ldr r2, [pc, #308] @ (800cf7c <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  29783. 800ce46: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  29784. 800ce4a: 62d3 str r3, [r2, #44] @ 0x2c
  29785. /* USB clock source configuration done later after clock selection check */
  29786. break;
  29787. 800ce4c: e00f b.n 800ce6e <HAL_RCCEx_PeriphCLKConfig+0xfd2>
  29788. case RCC_USBCLKSOURCE_PLL3: /* PLL3 is used as clock source for USB*/
  29789. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
  29790. 800ce4e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29791. 800ce52: 3328 adds r3, #40 @ 0x28
  29792. 800ce54: 2101 movs r1, #1
  29793. 800ce56: 4618 mov r0, r3
  29794. 800ce58: f001 fc50 bl 800e6fc <RCCEx_PLL3_Config>
  29795. 800ce5c: 4603 mov r3, r0
  29796. 800ce5e: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29797. /* USB clock source configuration done later after clock selection check */
  29798. break;
  29799. 800ce62: e004 b.n 800ce6e <HAL_RCCEx_PeriphCLKConfig+0xfd2>
  29800. /* HSI48 oscillator is used as source of USB clock */
  29801. /* USB clock source configuration done later after clock selection check */
  29802. break;
  29803. default:
  29804. ret = HAL_ERROR;
  29805. 800ce64: 2301 movs r3, #1
  29806. 800ce66: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29807. break;
  29808. 800ce6a: e000 b.n 800ce6e <HAL_RCCEx_PeriphCLKConfig+0xfd2>
  29809. break;
  29810. 800ce6c: bf00 nop
  29811. }
  29812. if (ret == HAL_OK)
  29813. 800ce6e: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29814. 800ce72: 2b00 cmp r3, #0
  29815. 800ce74: d10b bne.n 800ce8e <HAL_RCCEx_PeriphCLKConfig+0xff2>
  29816. {
  29817. /* Set the source of USB clock*/
  29818. __HAL_RCC_USB_CONFIG(PeriphClkInit->UsbClockSelection);
  29819. 800ce76: 4b41 ldr r3, [pc, #260] @ (800cf7c <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  29820. 800ce78: 6d5b ldr r3, [r3, #84] @ 0x54
  29821. 800ce7a: f423 1140 bic.w r1, r3, #3145728 @ 0x300000
  29822. 800ce7e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29823. 800ce82: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  29824. 800ce86: 4a3d ldr r2, [pc, #244] @ (800cf7c <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  29825. 800ce88: 430b orrs r3, r1
  29826. 800ce8a: 6553 str r3, [r2, #84] @ 0x54
  29827. 800ce8c: e003 b.n 800ce96 <HAL_RCCEx_PeriphCLKConfig+0xffa>
  29828. }
  29829. else
  29830. {
  29831. /* set overall return value */
  29832. status = ret;
  29833. 800ce8e: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29834. 800ce92: f887 311e strb.w r3, [r7, #286] @ 0x11e
  29835. }
  29836. }
  29837. /*------------------------------------- SDMMC Configuration ------------------------------------*/
  29838. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SDMMC) == RCC_PERIPHCLK_SDMMC)
  29839. 800ce96: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29840. 800ce9a: e9d3 2300 ldrd r2, r3, [r3]
  29841. 800ce9e: f402 3380 and.w r3, r2, #65536 @ 0x10000
  29842. 800cea2: 66bb str r3, [r7, #104] @ 0x68
  29843. 800cea4: 2300 movs r3, #0
  29844. 800cea6: 66fb str r3, [r7, #108] @ 0x6c
  29845. 800cea8: e9d7 121a ldrd r1, r2, [r7, #104] @ 0x68
  29846. 800ceac: 460b mov r3, r1
  29847. 800ceae: 4313 orrs r3, r2
  29848. 800ceb0: d031 beq.n 800cf16 <HAL_RCCEx_PeriphCLKConfig+0x107a>
  29849. {
  29850. /* Check the parameters */
  29851. assert_param(IS_RCC_SDMMC(PeriphClkInit->SdmmcClockSelection));
  29852. switch (PeriphClkInit->SdmmcClockSelection)
  29853. 800ceb2: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29854. 800ceb6: 6d1b ldr r3, [r3, #80] @ 0x50
  29855. 800ceb8: 2b00 cmp r3, #0
  29856. 800ceba: d003 beq.n 800cec4 <HAL_RCCEx_PeriphCLKConfig+0x1028>
  29857. 800cebc: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  29858. 800cec0: d007 beq.n 800ced2 <HAL_RCCEx_PeriphCLKConfig+0x1036>
  29859. 800cec2: e011 b.n 800cee8 <HAL_RCCEx_PeriphCLKConfig+0x104c>
  29860. {
  29861. case RCC_SDMMCCLKSOURCE_PLL: /* PLL is used as clock source for SDMMC*/
  29862. /* Enable SDMMC Clock output generated form System PLL . */
  29863. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  29864. 800cec4: 4b2d ldr r3, [pc, #180] @ (800cf7c <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  29865. 800cec6: 6adb ldr r3, [r3, #44] @ 0x2c
  29866. 800cec8: 4a2c ldr r2, [pc, #176] @ (800cf7c <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  29867. 800ceca: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  29868. 800cece: 62d3 str r3, [r2, #44] @ 0x2c
  29869. /* SDMMC clock source configuration done later after clock selection check */
  29870. break;
  29871. 800ced0: e00e b.n 800cef0 <HAL_RCCEx_PeriphCLKConfig+0x1054>
  29872. case RCC_SDMMCCLKSOURCE_PLL2: /* PLL2 is used as clock source for SDMMC*/
  29873. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_R_UPDATE);
  29874. 800ced2: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29875. 800ced6: 3308 adds r3, #8
  29876. 800ced8: 2102 movs r1, #2
  29877. 800ceda: 4618 mov r0, r3
  29878. 800cedc: f001 fb5c bl 800e598 <RCCEx_PLL2_Config>
  29879. 800cee0: 4603 mov r3, r0
  29880. 800cee2: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29881. /* SDMMC clock source configuration done later after clock selection check */
  29882. break;
  29883. 800cee6: e003 b.n 800cef0 <HAL_RCCEx_PeriphCLKConfig+0x1054>
  29884. default:
  29885. ret = HAL_ERROR;
  29886. 800cee8: 2301 movs r3, #1
  29887. 800ceea: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29888. break;
  29889. 800ceee: bf00 nop
  29890. }
  29891. if (ret == HAL_OK)
  29892. 800cef0: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29893. 800cef4: 2b00 cmp r3, #0
  29894. 800cef6: d10a bne.n 800cf0e <HAL_RCCEx_PeriphCLKConfig+0x1072>
  29895. {
  29896. /* Set the source of SDMMC clock*/
  29897. __HAL_RCC_SDMMC_CONFIG(PeriphClkInit->SdmmcClockSelection);
  29898. 800cef8: 4b20 ldr r3, [pc, #128] @ (800cf7c <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  29899. 800cefa: 6cdb ldr r3, [r3, #76] @ 0x4c
  29900. 800cefc: f423 3180 bic.w r1, r3, #65536 @ 0x10000
  29901. 800cf00: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29902. 800cf04: 6d1b ldr r3, [r3, #80] @ 0x50
  29903. 800cf06: 4a1d ldr r2, [pc, #116] @ (800cf7c <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  29904. 800cf08: 430b orrs r3, r1
  29905. 800cf0a: 64d3 str r3, [r2, #76] @ 0x4c
  29906. 800cf0c: e003 b.n 800cf16 <HAL_RCCEx_PeriphCLKConfig+0x107a>
  29907. }
  29908. else
  29909. {
  29910. /* set overall return value */
  29911. status = ret;
  29912. 800cf0e: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29913. 800cf12: f887 311e strb.w r3, [r7, #286] @ 0x11e
  29914. }
  29915. }
  29916. #endif /* LTDC */
  29917. /*------------------------------ RNG Configuration -------------------------*/
  29918. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RNG) == RCC_PERIPHCLK_RNG)
  29919. 800cf16: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29920. 800cf1a: e9d3 2300 ldrd r2, r3, [r3]
  29921. 800cf1e: f402 3300 and.w r3, r2, #131072 @ 0x20000
  29922. 800cf22: 663b str r3, [r7, #96] @ 0x60
  29923. 800cf24: 2300 movs r3, #0
  29924. 800cf26: 667b str r3, [r7, #100] @ 0x64
  29925. 800cf28: e9d7 1218 ldrd r1, r2, [r7, #96] @ 0x60
  29926. 800cf2c: 460b mov r3, r1
  29927. 800cf2e: 4313 orrs r3, r2
  29928. 800cf30: d03b beq.n 800cfaa <HAL_RCCEx_PeriphCLKConfig+0x110e>
  29929. {
  29930. switch (PeriphClkInit->RngClockSelection)
  29931. 800cf32: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29932. 800cf36: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  29933. 800cf3a: f5b3 7f40 cmp.w r3, #768 @ 0x300
  29934. 800cf3e: d018 beq.n 800cf72 <HAL_RCCEx_PeriphCLKConfig+0x10d6>
  29935. 800cf40: f5b3 7f40 cmp.w r3, #768 @ 0x300
  29936. 800cf44: d811 bhi.n 800cf6a <HAL_RCCEx_PeriphCLKConfig+0x10ce>
  29937. 800cf46: f5b3 7f00 cmp.w r3, #512 @ 0x200
  29938. 800cf4a: d014 beq.n 800cf76 <HAL_RCCEx_PeriphCLKConfig+0x10da>
  29939. 800cf4c: f5b3 7f00 cmp.w r3, #512 @ 0x200
  29940. 800cf50: d80b bhi.n 800cf6a <HAL_RCCEx_PeriphCLKConfig+0x10ce>
  29941. 800cf52: 2b00 cmp r3, #0
  29942. 800cf54: d014 beq.n 800cf80 <HAL_RCCEx_PeriphCLKConfig+0x10e4>
  29943. 800cf56: f5b3 7f80 cmp.w r3, #256 @ 0x100
  29944. 800cf5a: d106 bne.n 800cf6a <HAL_RCCEx_PeriphCLKConfig+0x10ce>
  29945. {
  29946. case RCC_RNGCLKSOURCE_PLL: /* PLL is used as clock source for RNG*/
  29947. /* Enable RNG Clock output generated form System RNG . */
  29948. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  29949. 800cf5c: 4b07 ldr r3, [pc, #28] @ (800cf7c <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  29950. 800cf5e: 6adb ldr r3, [r3, #44] @ 0x2c
  29951. 800cf60: 4a06 ldr r2, [pc, #24] @ (800cf7c <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  29952. 800cf62: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  29953. 800cf66: 62d3 str r3, [r2, #44] @ 0x2c
  29954. /* RNG clock source configuration done later after clock selection check */
  29955. break;
  29956. 800cf68: e00b b.n 800cf82 <HAL_RCCEx_PeriphCLKConfig+0x10e6>
  29957. /* HSI48 oscillator is used as source of RNG clock */
  29958. /* RNG clock source configuration done later after clock selection check */
  29959. break;
  29960. default:
  29961. ret = HAL_ERROR;
  29962. 800cf6a: 2301 movs r3, #1
  29963. 800cf6c: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29964. break;
  29965. 800cf70: e007 b.n 800cf82 <HAL_RCCEx_PeriphCLKConfig+0x10e6>
  29966. break;
  29967. 800cf72: bf00 nop
  29968. 800cf74: e005 b.n 800cf82 <HAL_RCCEx_PeriphCLKConfig+0x10e6>
  29969. break;
  29970. 800cf76: bf00 nop
  29971. 800cf78: e003 b.n 800cf82 <HAL_RCCEx_PeriphCLKConfig+0x10e6>
  29972. 800cf7a: bf00 nop
  29973. 800cf7c: 58024400 .word 0x58024400
  29974. break;
  29975. 800cf80: bf00 nop
  29976. }
  29977. if (ret == HAL_OK)
  29978. 800cf82: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29979. 800cf86: 2b00 cmp r3, #0
  29980. 800cf88: d10b bne.n 800cfa2 <HAL_RCCEx_PeriphCLKConfig+0x1106>
  29981. {
  29982. /* Set the source of RNG clock*/
  29983. __HAL_RCC_RNG_CONFIG(PeriphClkInit->RngClockSelection);
  29984. 800cf8a: 4bba ldr r3, [pc, #744] @ (800d274 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  29985. 800cf8c: 6d5b ldr r3, [r3, #84] @ 0x54
  29986. 800cf8e: f423 7140 bic.w r1, r3, #768 @ 0x300
  29987. 800cf92: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29988. 800cf96: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  29989. 800cf9a: 4ab6 ldr r2, [pc, #728] @ (800d274 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  29990. 800cf9c: 430b orrs r3, r1
  29991. 800cf9e: 6553 str r3, [r2, #84] @ 0x54
  29992. 800cfa0: e003 b.n 800cfaa <HAL_RCCEx_PeriphCLKConfig+0x110e>
  29993. }
  29994. else
  29995. {
  29996. /* set overall return value */
  29997. status = ret;
  29998. 800cfa2: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29999. 800cfa6: f887 311e strb.w r3, [r7, #286] @ 0x11e
  30000. }
  30001. }
  30002. /*------------------------------ SWPMI1 Configuration ------------------------*/
  30003. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SWPMI1) == RCC_PERIPHCLK_SWPMI1)
  30004. 800cfaa: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30005. 800cfae: e9d3 2300 ldrd r2, r3, [r3]
  30006. 800cfb2: f402 1380 and.w r3, r2, #1048576 @ 0x100000
  30007. 800cfb6: 65bb str r3, [r7, #88] @ 0x58
  30008. 800cfb8: 2300 movs r3, #0
  30009. 800cfba: 65fb str r3, [r7, #92] @ 0x5c
  30010. 800cfbc: e9d7 1216 ldrd r1, r2, [r7, #88] @ 0x58
  30011. 800cfc0: 460b mov r3, r1
  30012. 800cfc2: 4313 orrs r3, r2
  30013. 800cfc4: d009 beq.n 800cfda <HAL_RCCEx_PeriphCLKConfig+0x113e>
  30014. {
  30015. /* Check the parameters */
  30016. assert_param(IS_RCC_SWPMI1CLKSOURCE(PeriphClkInit->Swpmi1ClockSelection));
  30017. /* Configure the SWPMI1 interface clock source */
  30018. __HAL_RCC_SWPMI1_CONFIG(PeriphClkInit->Swpmi1ClockSelection);
  30019. 800cfc6: 4bab ldr r3, [pc, #684] @ (800d274 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  30020. 800cfc8: 6d1b ldr r3, [r3, #80] @ 0x50
  30021. 800cfca: f023 4100 bic.w r1, r3, #2147483648 @ 0x80000000
  30022. 800cfce: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30023. 800cfd2: 6f5b ldr r3, [r3, #116] @ 0x74
  30024. 800cfd4: 4aa7 ldr r2, [pc, #668] @ (800d274 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  30025. 800cfd6: 430b orrs r3, r1
  30026. 800cfd8: 6513 str r3, [r2, #80] @ 0x50
  30027. }
  30028. #if defined(HRTIM1)
  30029. /*------------------------------ HRTIM1 clock Configuration ----------------*/
  30030. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_HRTIM1) == RCC_PERIPHCLK_HRTIM1)
  30031. 800cfda: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30032. 800cfde: e9d3 2300 ldrd r2, r3, [r3]
  30033. 800cfe2: f002 5380 and.w r3, r2, #268435456 @ 0x10000000
  30034. 800cfe6: 653b str r3, [r7, #80] @ 0x50
  30035. 800cfe8: 2300 movs r3, #0
  30036. 800cfea: 657b str r3, [r7, #84] @ 0x54
  30037. 800cfec: e9d7 1214 ldrd r1, r2, [r7, #80] @ 0x50
  30038. 800cff0: 460b mov r3, r1
  30039. 800cff2: 4313 orrs r3, r2
  30040. 800cff4: d00a beq.n 800d00c <HAL_RCCEx_PeriphCLKConfig+0x1170>
  30041. {
  30042. /* Check the parameters */
  30043. assert_param(IS_RCC_HRTIM1CLKSOURCE(PeriphClkInit->Hrtim1ClockSelection));
  30044. /* Configure the HRTIM1 clock source */
  30045. __HAL_RCC_HRTIM1_CONFIG(PeriphClkInit->Hrtim1ClockSelection);
  30046. 800cff6: 4b9f ldr r3, [pc, #636] @ (800d274 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  30047. 800cff8: 691b ldr r3, [r3, #16]
  30048. 800cffa: f423 4180 bic.w r1, r3, #16384 @ 0x4000
  30049. 800cffe: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30050. 800d002: f8d3 30b8 ldr.w r3, [r3, #184] @ 0xb8
  30051. 800d006: 4a9b ldr r2, [pc, #620] @ (800d274 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  30052. 800d008: 430b orrs r3, r1
  30053. 800d00a: 6113 str r3, [r2, #16]
  30054. }
  30055. #endif /*HRTIM1*/
  30056. /*------------------------------ DFSDM1 Configuration ------------------------*/
  30057. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_DFSDM1) == RCC_PERIPHCLK_DFSDM1)
  30058. 800d00c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30059. 800d010: e9d3 2300 ldrd r2, r3, [r3]
  30060. 800d014: f402 1300 and.w r3, r2, #2097152 @ 0x200000
  30061. 800d018: 64bb str r3, [r7, #72] @ 0x48
  30062. 800d01a: 2300 movs r3, #0
  30063. 800d01c: 64fb str r3, [r7, #76] @ 0x4c
  30064. 800d01e: e9d7 1212 ldrd r1, r2, [r7, #72] @ 0x48
  30065. 800d022: 460b mov r3, r1
  30066. 800d024: 4313 orrs r3, r2
  30067. 800d026: d009 beq.n 800d03c <HAL_RCCEx_PeriphCLKConfig+0x11a0>
  30068. {
  30069. /* Check the parameters */
  30070. assert_param(IS_RCC_DFSDM1CLKSOURCE(PeriphClkInit->Dfsdm1ClockSelection));
  30071. /* Configure the DFSDM1 interface clock source */
  30072. __HAL_RCC_DFSDM1_CONFIG(PeriphClkInit->Dfsdm1ClockSelection);
  30073. 800d028: 4b92 ldr r3, [pc, #584] @ (800d274 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  30074. 800d02a: 6d1b ldr r3, [r3, #80] @ 0x50
  30075. 800d02c: f023 7180 bic.w r1, r3, #16777216 @ 0x1000000
  30076. 800d030: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30077. 800d034: 6edb ldr r3, [r3, #108] @ 0x6c
  30078. 800d036: 4a8f ldr r2, [pc, #572] @ (800d274 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  30079. 800d038: 430b orrs r3, r1
  30080. 800d03a: 6513 str r3, [r2, #80] @ 0x50
  30081. __HAL_RCC_DFSDM2_CONFIG(PeriphClkInit->Dfsdm2ClockSelection);
  30082. }
  30083. #endif /* DFSDM2 */
  30084. /*------------------------------------ TIM configuration --------------------------------------*/
  30085. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM) == RCC_PERIPHCLK_TIM)
  30086. 800d03c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30087. 800d040: e9d3 2300 ldrd r2, r3, [r3]
  30088. 800d044: f002 4380 and.w r3, r2, #1073741824 @ 0x40000000
  30089. 800d048: 643b str r3, [r7, #64] @ 0x40
  30090. 800d04a: 2300 movs r3, #0
  30091. 800d04c: 647b str r3, [r7, #68] @ 0x44
  30092. 800d04e: e9d7 1210 ldrd r1, r2, [r7, #64] @ 0x40
  30093. 800d052: 460b mov r3, r1
  30094. 800d054: 4313 orrs r3, r2
  30095. 800d056: d00e beq.n 800d076 <HAL_RCCEx_PeriphCLKConfig+0x11da>
  30096. {
  30097. /* Check the parameters */
  30098. assert_param(IS_RCC_TIMPRES(PeriphClkInit->TIMPresSelection));
  30099. /* Configure Timer Prescaler */
  30100. __HAL_RCC_TIMCLKPRESCALER(PeriphClkInit->TIMPresSelection);
  30101. 800d058: 4b86 ldr r3, [pc, #536] @ (800d274 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  30102. 800d05a: 691b ldr r3, [r3, #16]
  30103. 800d05c: 4a85 ldr r2, [pc, #532] @ (800d274 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  30104. 800d05e: f423 4300 bic.w r3, r3, #32768 @ 0x8000
  30105. 800d062: 6113 str r3, [r2, #16]
  30106. 800d064: 4b83 ldr r3, [pc, #524] @ (800d274 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  30107. 800d066: 6919 ldr r1, [r3, #16]
  30108. 800d068: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30109. 800d06c: f8d3 30bc ldr.w r3, [r3, #188] @ 0xbc
  30110. 800d070: 4a80 ldr r2, [pc, #512] @ (800d274 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  30111. 800d072: 430b orrs r3, r1
  30112. 800d074: 6113 str r3, [r2, #16]
  30113. }
  30114. /*------------------------------------ CKPER configuration --------------------------------------*/
  30115. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_CKPER) == RCC_PERIPHCLK_CKPER)
  30116. 800d076: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30117. 800d07a: e9d3 2300 ldrd r2, r3, [r3]
  30118. 800d07e: f002 4300 and.w r3, r2, #2147483648 @ 0x80000000
  30119. 800d082: 63bb str r3, [r7, #56] @ 0x38
  30120. 800d084: 2300 movs r3, #0
  30121. 800d086: 63fb str r3, [r7, #60] @ 0x3c
  30122. 800d088: e9d7 120e ldrd r1, r2, [r7, #56] @ 0x38
  30123. 800d08c: 460b mov r3, r1
  30124. 800d08e: 4313 orrs r3, r2
  30125. 800d090: d009 beq.n 800d0a6 <HAL_RCCEx_PeriphCLKConfig+0x120a>
  30126. {
  30127. /* Check the parameters */
  30128. assert_param(IS_RCC_CLKPSOURCE(PeriphClkInit->CkperClockSelection));
  30129. /* Configure the CKPER clock source */
  30130. __HAL_RCC_CLKP_CONFIG(PeriphClkInit->CkperClockSelection);
  30131. 800d092: 4b78 ldr r3, [pc, #480] @ (800d274 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  30132. 800d094: 6cdb ldr r3, [r3, #76] @ 0x4c
  30133. 800d096: f023 5140 bic.w r1, r3, #805306368 @ 0x30000000
  30134. 800d09a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30135. 800d09e: 6d5b ldr r3, [r3, #84] @ 0x54
  30136. 800d0a0: 4a74 ldr r2, [pc, #464] @ (800d274 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  30137. 800d0a2: 430b orrs r3, r1
  30138. 800d0a4: 64d3 str r3, [r2, #76] @ 0x4c
  30139. }
  30140. /*------------------------------ CEC Configuration ------------------------*/
  30141. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_CEC) == RCC_PERIPHCLK_CEC)
  30142. 800d0a6: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30143. 800d0aa: e9d3 2300 ldrd r2, r3, [r3]
  30144. 800d0ae: f402 0300 and.w r3, r2, #8388608 @ 0x800000
  30145. 800d0b2: 633b str r3, [r7, #48] @ 0x30
  30146. 800d0b4: 2300 movs r3, #0
  30147. 800d0b6: 637b str r3, [r7, #52] @ 0x34
  30148. 800d0b8: e9d7 120c ldrd r1, r2, [r7, #48] @ 0x30
  30149. 800d0bc: 460b mov r3, r1
  30150. 800d0be: 4313 orrs r3, r2
  30151. 800d0c0: d00a beq.n 800d0d8 <HAL_RCCEx_PeriphCLKConfig+0x123c>
  30152. {
  30153. /* Check the parameters */
  30154. assert_param(IS_RCC_CECCLKSOURCE(PeriphClkInit->CecClockSelection));
  30155. /* Configure the CEC interface clock source */
  30156. __HAL_RCC_CEC_CONFIG(PeriphClkInit->CecClockSelection);
  30157. 800d0c2: 4b6c ldr r3, [pc, #432] @ (800d274 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  30158. 800d0c4: 6d5b ldr r3, [r3, #84] @ 0x54
  30159. 800d0c6: f423 0140 bic.w r1, r3, #12582912 @ 0xc00000
  30160. 800d0ca: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30161. 800d0ce: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c
  30162. 800d0d2: 4a68 ldr r2, [pc, #416] @ (800d274 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  30163. 800d0d4: 430b orrs r3, r1
  30164. 800d0d6: 6553 str r3, [r2, #84] @ 0x54
  30165. }
  30166. /*---------------------------- PLL2 configuration -------------------------------*/
  30167. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLL2_DIVP) == RCC_PERIPHCLK_PLL2_DIVP)
  30168. 800d0d8: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30169. 800d0dc: e9d3 2300 ldrd r2, r3, [r3]
  30170. 800d0e0: 2100 movs r1, #0
  30171. 800d0e2: 62b9 str r1, [r7, #40] @ 0x28
  30172. 800d0e4: f003 0301 and.w r3, r3, #1
  30173. 800d0e8: 62fb str r3, [r7, #44] @ 0x2c
  30174. 800d0ea: e9d7 120a ldrd r1, r2, [r7, #40] @ 0x28
  30175. 800d0ee: 460b mov r3, r1
  30176. 800d0f0: 4313 orrs r3, r2
  30177. 800d0f2: d011 beq.n 800d118 <HAL_RCCEx_PeriphCLKConfig+0x127c>
  30178. {
  30179. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  30180. 800d0f4: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30181. 800d0f8: 3308 adds r3, #8
  30182. 800d0fa: 2100 movs r1, #0
  30183. 800d0fc: 4618 mov r0, r3
  30184. 800d0fe: f001 fa4b bl 800e598 <RCCEx_PLL2_Config>
  30185. 800d102: 4603 mov r3, r0
  30186. 800d104: f887 311f strb.w r3, [r7, #287] @ 0x11f
  30187. if (ret == HAL_OK)
  30188. 800d108: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  30189. 800d10c: 2b00 cmp r3, #0
  30190. 800d10e: d003 beq.n 800d118 <HAL_RCCEx_PeriphCLKConfig+0x127c>
  30191. /*Nothing to do*/
  30192. }
  30193. else
  30194. {
  30195. /* set overall return value */
  30196. status = ret;
  30197. 800d110: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  30198. 800d114: f887 311e strb.w r3, [r7, #286] @ 0x11e
  30199. }
  30200. }
  30201. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLL2_DIVQ) == RCC_PERIPHCLK_PLL2_DIVQ)
  30202. 800d118: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30203. 800d11c: e9d3 2300 ldrd r2, r3, [r3]
  30204. 800d120: 2100 movs r1, #0
  30205. 800d122: 6239 str r1, [r7, #32]
  30206. 800d124: f003 0302 and.w r3, r3, #2
  30207. 800d128: 627b str r3, [r7, #36] @ 0x24
  30208. 800d12a: e9d7 1208 ldrd r1, r2, [r7, #32]
  30209. 800d12e: 460b mov r3, r1
  30210. 800d130: 4313 orrs r3, r2
  30211. 800d132: d011 beq.n 800d158 <HAL_RCCEx_PeriphCLKConfig+0x12bc>
  30212. {
  30213. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
  30214. 800d134: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30215. 800d138: 3308 adds r3, #8
  30216. 800d13a: 2101 movs r1, #1
  30217. 800d13c: 4618 mov r0, r3
  30218. 800d13e: f001 fa2b bl 800e598 <RCCEx_PLL2_Config>
  30219. 800d142: 4603 mov r3, r0
  30220. 800d144: f887 311f strb.w r3, [r7, #287] @ 0x11f
  30221. if (ret == HAL_OK)
  30222. 800d148: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  30223. 800d14c: 2b00 cmp r3, #0
  30224. 800d14e: d003 beq.n 800d158 <HAL_RCCEx_PeriphCLKConfig+0x12bc>
  30225. /*Nothing to do*/
  30226. }
  30227. else
  30228. {
  30229. /* set overall return value */
  30230. status = ret;
  30231. 800d150: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  30232. 800d154: f887 311e strb.w r3, [r7, #286] @ 0x11e
  30233. }
  30234. }
  30235. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLL2_DIVR) == RCC_PERIPHCLK_PLL2_DIVR)
  30236. 800d158: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30237. 800d15c: e9d3 2300 ldrd r2, r3, [r3]
  30238. 800d160: 2100 movs r1, #0
  30239. 800d162: 61b9 str r1, [r7, #24]
  30240. 800d164: f003 0304 and.w r3, r3, #4
  30241. 800d168: 61fb str r3, [r7, #28]
  30242. 800d16a: e9d7 1206 ldrd r1, r2, [r7, #24]
  30243. 800d16e: 460b mov r3, r1
  30244. 800d170: 4313 orrs r3, r2
  30245. 800d172: d011 beq.n 800d198 <HAL_RCCEx_PeriphCLKConfig+0x12fc>
  30246. {
  30247. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_R_UPDATE);
  30248. 800d174: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30249. 800d178: 3308 adds r3, #8
  30250. 800d17a: 2102 movs r1, #2
  30251. 800d17c: 4618 mov r0, r3
  30252. 800d17e: f001 fa0b bl 800e598 <RCCEx_PLL2_Config>
  30253. 800d182: 4603 mov r3, r0
  30254. 800d184: f887 311f strb.w r3, [r7, #287] @ 0x11f
  30255. if (ret == HAL_OK)
  30256. 800d188: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  30257. 800d18c: 2b00 cmp r3, #0
  30258. 800d18e: d003 beq.n 800d198 <HAL_RCCEx_PeriphCLKConfig+0x12fc>
  30259. /*Nothing to do*/
  30260. }
  30261. else
  30262. {
  30263. /* set overall return value */
  30264. status = ret;
  30265. 800d190: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  30266. 800d194: f887 311e strb.w r3, [r7, #286] @ 0x11e
  30267. }
  30268. }
  30269. /*---------------------------- PLL3 configuration -------------------------------*/
  30270. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLL3_DIVP) == RCC_PERIPHCLK_PLL3_DIVP)
  30271. 800d198: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30272. 800d19c: e9d3 2300 ldrd r2, r3, [r3]
  30273. 800d1a0: 2100 movs r1, #0
  30274. 800d1a2: 6139 str r1, [r7, #16]
  30275. 800d1a4: f003 0308 and.w r3, r3, #8
  30276. 800d1a8: 617b str r3, [r7, #20]
  30277. 800d1aa: e9d7 1204 ldrd r1, r2, [r7, #16]
  30278. 800d1ae: 460b mov r3, r1
  30279. 800d1b0: 4313 orrs r3, r2
  30280. 800d1b2: d011 beq.n 800d1d8 <HAL_RCCEx_PeriphCLKConfig+0x133c>
  30281. {
  30282. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
  30283. 800d1b4: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30284. 800d1b8: 3328 adds r3, #40 @ 0x28
  30285. 800d1ba: 2100 movs r1, #0
  30286. 800d1bc: 4618 mov r0, r3
  30287. 800d1be: f001 fa9d bl 800e6fc <RCCEx_PLL3_Config>
  30288. 800d1c2: 4603 mov r3, r0
  30289. 800d1c4: f887 311f strb.w r3, [r7, #287] @ 0x11f
  30290. if (ret == HAL_OK)
  30291. 800d1c8: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  30292. 800d1cc: 2b00 cmp r3, #0
  30293. 800d1ce: d003 beq.n 800d1d8 <HAL_RCCEx_PeriphCLKConfig+0x133c>
  30294. /*Nothing to do*/
  30295. }
  30296. else
  30297. {
  30298. /* set overall return value */
  30299. status = ret;
  30300. 800d1d0: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  30301. 800d1d4: f887 311e strb.w r3, [r7, #286] @ 0x11e
  30302. }
  30303. }
  30304. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLL3_DIVQ) == RCC_PERIPHCLK_PLL3_DIVQ)
  30305. 800d1d8: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30306. 800d1dc: e9d3 2300 ldrd r2, r3, [r3]
  30307. 800d1e0: 2100 movs r1, #0
  30308. 800d1e2: 60b9 str r1, [r7, #8]
  30309. 800d1e4: f003 0310 and.w r3, r3, #16
  30310. 800d1e8: 60fb str r3, [r7, #12]
  30311. 800d1ea: e9d7 1202 ldrd r1, r2, [r7, #8]
  30312. 800d1ee: 460b mov r3, r1
  30313. 800d1f0: 4313 orrs r3, r2
  30314. 800d1f2: d011 beq.n 800d218 <HAL_RCCEx_PeriphCLKConfig+0x137c>
  30315. {
  30316. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
  30317. 800d1f4: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30318. 800d1f8: 3328 adds r3, #40 @ 0x28
  30319. 800d1fa: 2101 movs r1, #1
  30320. 800d1fc: 4618 mov r0, r3
  30321. 800d1fe: f001 fa7d bl 800e6fc <RCCEx_PLL3_Config>
  30322. 800d202: 4603 mov r3, r0
  30323. 800d204: f887 311f strb.w r3, [r7, #287] @ 0x11f
  30324. if (ret == HAL_OK)
  30325. 800d208: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  30326. 800d20c: 2b00 cmp r3, #0
  30327. 800d20e: d003 beq.n 800d218 <HAL_RCCEx_PeriphCLKConfig+0x137c>
  30328. /*Nothing to do*/
  30329. }
  30330. else
  30331. {
  30332. /* set overall return value */
  30333. status = ret;
  30334. 800d210: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  30335. 800d214: f887 311e strb.w r3, [r7, #286] @ 0x11e
  30336. }
  30337. }
  30338. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLL3_DIVR) == RCC_PERIPHCLK_PLL3_DIVR)
  30339. 800d218: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30340. 800d21c: e9d3 2300 ldrd r2, r3, [r3]
  30341. 800d220: 2100 movs r1, #0
  30342. 800d222: 6039 str r1, [r7, #0]
  30343. 800d224: f003 0320 and.w r3, r3, #32
  30344. 800d228: 607b str r3, [r7, #4]
  30345. 800d22a: e9d7 1200 ldrd r1, r2, [r7]
  30346. 800d22e: 460b mov r3, r1
  30347. 800d230: 4313 orrs r3, r2
  30348. 800d232: d011 beq.n 800d258 <HAL_RCCEx_PeriphCLKConfig+0x13bc>
  30349. {
  30350. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE);
  30351. 800d234: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30352. 800d238: 3328 adds r3, #40 @ 0x28
  30353. 800d23a: 2102 movs r1, #2
  30354. 800d23c: 4618 mov r0, r3
  30355. 800d23e: f001 fa5d bl 800e6fc <RCCEx_PLL3_Config>
  30356. 800d242: 4603 mov r3, r0
  30357. 800d244: f887 311f strb.w r3, [r7, #287] @ 0x11f
  30358. if (ret == HAL_OK)
  30359. 800d248: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  30360. 800d24c: 2b00 cmp r3, #0
  30361. 800d24e: d003 beq.n 800d258 <HAL_RCCEx_PeriphCLKConfig+0x13bc>
  30362. /*Nothing to do*/
  30363. }
  30364. else
  30365. {
  30366. /* set overall return value */
  30367. status = ret;
  30368. 800d250: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  30369. 800d254: f887 311e strb.w r3, [r7, #286] @ 0x11e
  30370. }
  30371. }
  30372. if (status == HAL_OK)
  30373. 800d258: f897 311e ldrb.w r3, [r7, #286] @ 0x11e
  30374. 800d25c: 2b00 cmp r3, #0
  30375. 800d25e: d101 bne.n 800d264 <HAL_RCCEx_PeriphCLKConfig+0x13c8>
  30376. {
  30377. return HAL_OK;
  30378. 800d260: 2300 movs r3, #0
  30379. 800d262: e000 b.n 800d266 <HAL_RCCEx_PeriphCLKConfig+0x13ca>
  30380. }
  30381. return HAL_ERROR;
  30382. 800d264: 2301 movs r3, #1
  30383. }
  30384. 800d266: 4618 mov r0, r3
  30385. 800d268: f507 7790 add.w r7, r7, #288 @ 0x120
  30386. 800d26c: 46bd mov sp, r7
  30387. 800d26e: e8bd 8fb0 ldmia.w sp!, {r4, r5, r7, r8, r9, sl, fp, pc}
  30388. 800d272: bf00 nop
  30389. 800d274: 58024400 .word 0x58024400
  30390. 0800d278 <HAL_RCCEx_GetPeriphCLKFreq>:
  30391. * @retval Frequency in KHz
  30392. *
  30393. * (*) : Available on some STM32H7 lines only.
  30394. */
  30395. uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint64_t PeriphClk)
  30396. {
  30397. 800d278: b580 push {r7, lr}
  30398. 800d27a: b090 sub sp, #64 @ 0x40
  30399. 800d27c: af00 add r7, sp, #0
  30400. 800d27e: e9c7 0100 strd r0, r1, [r7]
  30401. /* This variable is used to store the SAI and CKP clock source */
  30402. uint32_t saiclocksource;
  30403. uint32_t ckpclocksource;
  30404. uint32_t srcclk;
  30405. if (PeriphClk == RCC_PERIPHCLK_SAI1)
  30406. 800d282: e9d7 2300 ldrd r2, r3, [r7]
  30407. 800d286: f5a2 7180 sub.w r1, r2, #256 @ 0x100
  30408. 800d28a: 430b orrs r3, r1
  30409. 800d28c: f040 8094 bne.w 800d3b8 <HAL_RCCEx_GetPeriphCLKFreq+0x140>
  30410. {
  30411. saiclocksource = __HAL_RCC_GET_SAI1_SOURCE();
  30412. 800d290: 4b9e ldr r3, [pc, #632] @ (800d50c <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  30413. 800d292: 6d1b ldr r3, [r3, #80] @ 0x50
  30414. 800d294: f003 0307 and.w r3, r3, #7
  30415. 800d298: 633b str r3, [r7, #48] @ 0x30
  30416. switch (saiclocksource)
  30417. 800d29a: 6b3b ldr r3, [r7, #48] @ 0x30
  30418. 800d29c: 2b04 cmp r3, #4
  30419. 800d29e: f200 8087 bhi.w 800d3b0 <HAL_RCCEx_GetPeriphCLKFreq+0x138>
  30420. 800d2a2: a201 add r2, pc, #4 @ (adr r2, 800d2a8 <HAL_RCCEx_GetPeriphCLKFreq+0x30>)
  30421. 800d2a4: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  30422. 800d2a8: 0800d2bd .word 0x0800d2bd
  30423. 800d2ac: 0800d2e5 .word 0x0800d2e5
  30424. 800d2b0: 0800d30d .word 0x0800d30d
  30425. 800d2b4: 0800d3a9 .word 0x0800d3a9
  30426. 800d2b8: 0800d335 .word 0x0800d335
  30427. {
  30428. case RCC_SAI1CLKSOURCE_PLL: /* PLL1 is the clock source for SAI1 */
  30429. {
  30430. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
  30431. 800d2bc: 4b93 ldr r3, [pc, #588] @ (800d50c <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  30432. 800d2be: 681b ldr r3, [r3, #0]
  30433. 800d2c0: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  30434. 800d2c4: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  30435. 800d2c8: d108 bne.n 800d2dc <HAL_RCCEx_GetPeriphCLKFreq+0x64>
  30436. {
  30437. HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
  30438. 800d2ca: f107 0324 add.w r3, r7, #36 @ 0x24
  30439. 800d2ce: 4618 mov r0, r3
  30440. 800d2d0: f001 f810 bl 800e2f4 <HAL_RCCEx_GetPLL1ClockFreq>
  30441. frequency = pll1_clocks.PLL1_Q_Frequency;
  30442. 800d2d4: 6abb ldr r3, [r7, #40] @ 0x28
  30443. 800d2d6: 63fb str r3, [r7, #60] @ 0x3c
  30444. }
  30445. else
  30446. {
  30447. frequency = 0;
  30448. }
  30449. break;
  30450. 800d2d8: f000 bd45 b.w 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30451. frequency = 0;
  30452. 800d2dc: 2300 movs r3, #0
  30453. 800d2de: 63fb str r3, [r7, #60] @ 0x3c
  30454. break;
  30455. 800d2e0: f000 bd41 b.w 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30456. }
  30457. case RCC_SAI1CLKSOURCE_PLL2: /* PLL2 is the clock source for SAI1 */
  30458. {
  30459. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  30460. 800d2e4: 4b89 ldr r3, [pc, #548] @ (800d50c <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  30461. 800d2e6: 681b ldr r3, [r3, #0]
  30462. 800d2e8: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  30463. 800d2ec: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  30464. 800d2f0: d108 bne.n 800d304 <HAL_RCCEx_GetPeriphCLKFreq+0x8c>
  30465. {
  30466. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  30467. 800d2f2: f107 0318 add.w r3, r7, #24
  30468. 800d2f6: 4618 mov r0, r3
  30469. 800d2f8: f000 fd54 bl 800dda4 <HAL_RCCEx_GetPLL2ClockFreq>
  30470. frequency = pll2_clocks.PLL2_P_Frequency;
  30471. 800d2fc: 69bb ldr r3, [r7, #24]
  30472. 800d2fe: 63fb str r3, [r7, #60] @ 0x3c
  30473. }
  30474. else
  30475. {
  30476. frequency = 0;
  30477. }
  30478. break;
  30479. 800d300: f000 bd31 b.w 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30480. frequency = 0;
  30481. 800d304: 2300 movs r3, #0
  30482. 800d306: 63fb str r3, [r7, #60] @ 0x3c
  30483. break;
  30484. 800d308: f000 bd2d b.w 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30485. }
  30486. case RCC_SAI1CLKSOURCE_PLL3: /* PLL3 is the clock source for SAI1 */
  30487. {
  30488. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
  30489. 800d30c: 4b7f ldr r3, [pc, #508] @ (800d50c <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  30490. 800d30e: 681b ldr r3, [r3, #0]
  30491. 800d310: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  30492. 800d314: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  30493. 800d318: d108 bne.n 800d32c <HAL_RCCEx_GetPeriphCLKFreq+0xb4>
  30494. {
  30495. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  30496. 800d31a: f107 030c add.w r3, r7, #12
  30497. 800d31e: 4618 mov r0, r3
  30498. 800d320: f000 fe94 bl 800e04c <HAL_RCCEx_GetPLL3ClockFreq>
  30499. frequency = pll3_clocks.PLL3_P_Frequency;
  30500. 800d324: 68fb ldr r3, [r7, #12]
  30501. 800d326: 63fb str r3, [r7, #60] @ 0x3c
  30502. }
  30503. else
  30504. {
  30505. frequency = 0;
  30506. }
  30507. break;
  30508. 800d328: f000 bd1d b.w 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30509. frequency = 0;
  30510. 800d32c: 2300 movs r3, #0
  30511. 800d32e: 63fb str r3, [r7, #60] @ 0x3c
  30512. break;
  30513. 800d330: f000 bd19 b.w 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30514. }
  30515. case RCC_SAI1CLKSOURCE_CLKP: /* CKPER is the clock source for SAI1*/
  30516. {
  30517. ckpclocksource = __HAL_RCC_GET_CLKP_SOURCE();
  30518. 800d334: 4b75 ldr r3, [pc, #468] @ (800d50c <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  30519. 800d336: 6cdb ldr r3, [r3, #76] @ 0x4c
  30520. 800d338: f003 5340 and.w r3, r3, #805306368 @ 0x30000000
  30521. 800d33c: 637b str r3, [r7, #52] @ 0x34
  30522. if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSI))
  30523. 800d33e: 4b73 ldr r3, [pc, #460] @ (800d50c <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  30524. 800d340: 681b ldr r3, [r3, #0]
  30525. 800d342: f003 0304 and.w r3, r3, #4
  30526. 800d346: 2b04 cmp r3, #4
  30527. 800d348: d10c bne.n 800d364 <HAL_RCCEx_GetPeriphCLKFreq+0xec>
  30528. 800d34a: 6b7b ldr r3, [r7, #52] @ 0x34
  30529. 800d34c: 2b00 cmp r3, #0
  30530. 800d34e: d109 bne.n 800d364 <HAL_RCCEx_GetPeriphCLKFreq+0xec>
  30531. {
  30532. /* In Case the CKPER Source is HSI */
  30533. frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  30534. 800d350: 4b6e ldr r3, [pc, #440] @ (800d50c <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  30535. 800d352: 681b ldr r3, [r3, #0]
  30536. 800d354: 08db lsrs r3, r3, #3
  30537. 800d356: f003 0303 and.w r3, r3, #3
  30538. 800d35a: 4a6d ldr r2, [pc, #436] @ (800d510 <HAL_RCCEx_GetPeriphCLKFreq+0x298>)
  30539. 800d35c: fa22 f303 lsr.w r3, r2, r3
  30540. 800d360: 63fb str r3, [r7, #60] @ 0x3c
  30541. 800d362: e01f b.n 800d3a4 <HAL_RCCEx_GetPeriphCLKFreq+0x12c>
  30542. }
  30543. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_CSI))
  30544. 800d364: 4b69 ldr r3, [pc, #420] @ (800d50c <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  30545. 800d366: 681b ldr r3, [r3, #0]
  30546. 800d368: f403 7380 and.w r3, r3, #256 @ 0x100
  30547. 800d36c: f5b3 7f80 cmp.w r3, #256 @ 0x100
  30548. 800d370: d106 bne.n 800d380 <HAL_RCCEx_GetPeriphCLKFreq+0x108>
  30549. 800d372: 6b7b ldr r3, [r7, #52] @ 0x34
  30550. 800d374: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  30551. 800d378: d102 bne.n 800d380 <HAL_RCCEx_GetPeriphCLKFreq+0x108>
  30552. {
  30553. /* In Case the CKPER Source is CSI */
  30554. frequency = CSI_VALUE;
  30555. 800d37a: 4b66 ldr r3, [pc, #408] @ (800d514 <HAL_RCCEx_GetPeriphCLKFreq+0x29c>)
  30556. 800d37c: 63fb str r3, [r7, #60] @ 0x3c
  30557. 800d37e: e011 b.n 800d3a4 <HAL_RCCEx_GetPeriphCLKFreq+0x12c>
  30558. }
  30559. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSE))
  30560. 800d380: 4b62 ldr r3, [pc, #392] @ (800d50c <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  30561. 800d382: 681b ldr r3, [r3, #0]
  30562. 800d384: f403 3300 and.w r3, r3, #131072 @ 0x20000
  30563. 800d388: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  30564. 800d38c: d106 bne.n 800d39c <HAL_RCCEx_GetPeriphCLKFreq+0x124>
  30565. 800d38e: 6b7b ldr r3, [r7, #52] @ 0x34
  30566. 800d390: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  30567. 800d394: d102 bne.n 800d39c <HAL_RCCEx_GetPeriphCLKFreq+0x124>
  30568. {
  30569. /* In Case the CKPER Source is HSE */
  30570. frequency = HSE_VALUE;
  30571. 800d396: 4b60 ldr r3, [pc, #384] @ (800d518 <HAL_RCCEx_GetPeriphCLKFreq+0x2a0>)
  30572. 800d398: 63fb str r3, [r7, #60] @ 0x3c
  30573. 800d39a: e003 b.n 800d3a4 <HAL_RCCEx_GetPeriphCLKFreq+0x12c>
  30574. }
  30575. else
  30576. {
  30577. /* In Case the CKPER is disabled*/
  30578. frequency = 0;
  30579. 800d39c: 2300 movs r3, #0
  30580. 800d39e: 63fb str r3, [r7, #60] @ 0x3c
  30581. }
  30582. break;
  30583. 800d3a0: f000 bce1 b.w 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30584. 800d3a4: f000 bcdf b.w 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30585. }
  30586. case (RCC_SAI1CLKSOURCE_PIN): /* External clock is the clock source for SAI1 */
  30587. {
  30588. frequency = EXTERNAL_CLOCK_VALUE;
  30589. 800d3a8: 4b5c ldr r3, [pc, #368] @ (800d51c <HAL_RCCEx_GetPeriphCLKFreq+0x2a4>)
  30590. 800d3aa: 63fb str r3, [r7, #60] @ 0x3c
  30591. break;
  30592. 800d3ac: f000 bcdb b.w 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30593. }
  30594. default :
  30595. {
  30596. frequency = 0;
  30597. 800d3b0: 2300 movs r3, #0
  30598. 800d3b2: 63fb str r3, [r7, #60] @ 0x3c
  30599. break;
  30600. 800d3b4: f000 bcd7 b.w 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30601. }
  30602. }
  30603. }
  30604. #if defined(SAI3)
  30605. else if (PeriphClk == RCC_PERIPHCLK_SAI23)
  30606. 800d3b8: e9d7 2300 ldrd r2, r3, [r7]
  30607. 800d3bc: f5a2 7100 sub.w r1, r2, #512 @ 0x200
  30608. 800d3c0: 430b orrs r3, r1
  30609. 800d3c2: f040 80ad bne.w 800d520 <HAL_RCCEx_GetPeriphCLKFreq+0x2a8>
  30610. {
  30611. saiclocksource = __HAL_RCC_GET_SAI23_SOURCE();
  30612. 800d3c6: 4b51 ldr r3, [pc, #324] @ (800d50c <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  30613. 800d3c8: 6d1b ldr r3, [r3, #80] @ 0x50
  30614. 800d3ca: f403 73e0 and.w r3, r3, #448 @ 0x1c0
  30615. 800d3ce: 633b str r3, [r7, #48] @ 0x30
  30616. switch (saiclocksource)
  30617. 800d3d0: 6b3b ldr r3, [r7, #48] @ 0x30
  30618. 800d3d2: f5b3 7f80 cmp.w r3, #256 @ 0x100
  30619. 800d3d6: d056 beq.n 800d486 <HAL_RCCEx_GetPeriphCLKFreq+0x20e>
  30620. 800d3d8: 6b3b ldr r3, [r7, #48] @ 0x30
  30621. 800d3da: f5b3 7f80 cmp.w r3, #256 @ 0x100
  30622. 800d3de: f200 8090 bhi.w 800d502 <HAL_RCCEx_GetPeriphCLKFreq+0x28a>
  30623. 800d3e2: 6b3b ldr r3, [r7, #48] @ 0x30
  30624. 800d3e4: 2bc0 cmp r3, #192 @ 0xc0
  30625. 800d3e6: f000 8088 beq.w 800d4fa <HAL_RCCEx_GetPeriphCLKFreq+0x282>
  30626. 800d3ea: 6b3b ldr r3, [r7, #48] @ 0x30
  30627. 800d3ec: 2bc0 cmp r3, #192 @ 0xc0
  30628. 800d3ee: f200 8088 bhi.w 800d502 <HAL_RCCEx_GetPeriphCLKFreq+0x28a>
  30629. 800d3f2: 6b3b ldr r3, [r7, #48] @ 0x30
  30630. 800d3f4: 2b80 cmp r3, #128 @ 0x80
  30631. 800d3f6: d032 beq.n 800d45e <HAL_RCCEx_GetPeriphCLKFreq+0x1e6>
  30632. 800d3f8: 6b3b ldr r3, [r7, #48] @ 0x30
  30633. 800d3fa: 2b80 cmp r3, #128 @ 0x80
  30634. 800d3fc: f200 8081 bhi.w 800d502 <HAL_RCCEx_GetPeriphCLKFreq+0x28a>
  30635. 800d400: 6b3b ldr r3, [r7, #48] @ 0x30
  30636. 800d402: 2b00 cmp r3, #0
  30637. 800d404: d003 beq.n 800d40e <HAL_RCCEx_GetPeriphCLKFreq+0x196>
  30638. 800d406: 6b3b ldr r3, [r7, #48] @ 0x30
  30639. 800d408: 2b40 cmp r3, #64 @ 0x40
  30640. 800d40a: d014 beq.n 800d436 <HAL_RCCEx_GetPeriphCLKFreq+0x1be>
  30641. 800d40c: e079 b.n 800d502 <HAL_RCCEx_GetPeriphCLKFreq+0x28a>
  30642. {
  30643. case RCC_SAI23CLKSOURCE_PLL: /* PLL1 is the clock source for SAI2/3 */
  30644. {
  30645. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
  30646. 800d40e: 4b3f ldr r3, [pc, #252] @ (800d50c <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  30647. 800d410: 681b ldr r3, [r3, #0]
  30648. 800d412: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  30649. 800d416: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  30650. 800d41a: d108 bne.n 800d42e <HAL_RCCEx_GetPeriphCLKFreq+0x1b6>
  30651. {
  30652. HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
  30653. 800d41c: f107 0324 add.w r3, r7, #36 @ 0x24
  30654. 800d420: 4618 mov r0, r3
  30655. 800d422: f000 ff67 bl 800e2f4 <HAL_RCCEx_GetPLL1ClockFreq>
  30656. frequency = pll1_clocks.PLL1_Q_Frequency;
  30657. 800d426: 6abb ldr r3, [r7, #40] @ 0x28
  30658. 800d428: 63fb str r3, [r7, #60] @ 0x3c
  30659. }
  30660. else
  30661. {
  30662. frequency = 0;
  30663. }
  30664. break;
  30665. 800d42a: f000 bc9c b.w 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30666. frequency = 0;
  30667. 800d42e: 2300 movs r3, #0
  30668. 800d430: 63fb str r3, [r7, #60] @ 0x3c
  30669. break;
  30670. 800d432: f000 bc98 b.w 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30671. }
  30672. case RCC_SAI23CLKSOURCE_PLL2: /* PLL2 is the clock source for SAI2/3 */
  30673. {
  30674. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  30675. 800d436: 4b35 ldr r3, [pc, #212] @ (800d50c <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  30676. 800d438: 681b ldr r3, [r3, #0]
  30677. 800d43a: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  30678. 800d43e: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  30679. 800d442: d108 bne.n 800d456 <HAL_RCCEx_GetPeriphCLKFreq+0x1de>
  30680. {
  30681. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  30682. 800d444: f107 0318 add.w r3, r7, #24
  30683. 800d448: 4618 mov r0, r3
  30684. 800d44a: f000 fcab bl 800dda4 <HAL_RCCEx_GetPLL2ClockFreq>
  30685. frequency = pll2_clocks.PLL2_P_Frequency;
  30686. 800d44e: 69bb ldr r3, [r7, #24]
  30687. 800d450: 63fb str r3, [r7, #60] @ 0x3c
  30688. }
  30689. else
  30690. {
  30691. frequency = 0;
  30692. }
  30693. break;
  30694. 800d452: f000 bc88 b.w 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30695. frequency = 0;
  30696. 800d456: 2300 movs r3, #0
  30697. 800d458: 63fb str r3, [r7, #60] @ 0x3c
  30698. break;
  30699. 800d45a: f000 bc84 b.w 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30700. }
  30701. case RCC_SAI23CLKSOURCE_PLL3: /* PLL3 is the clock source for SAI2/3 */
  30702. {
  30703. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
  30704. 800d45e: 4b2b ldr r3, [pc, #172] @ (800d50c <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  30705. 800d460: 681b ldr r3, [r3, #0]
  30706. 800d462: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  30707. 800d466: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  30708. 800d46a: d108 bne.n 800d47e <HAL_RCCEx_GetPeriphCLKFreq+0x206>
  30709. {
  30710. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  30711. 800d46c: f107 030c add.w r3, r7, #12
  30712. 800d470: 4618 mov r0, r3
  30713. 800d472: f000 fdeb bl 800e04c <HAL_RCCEx_GetPLL3ClockFreq>
  30714. frequency = pll3_clocks.PLL3_P_Frequency;
  30715. 800d476: 68fb ldr r3, [r7, #12]
  30716. 800d478: 63fb str r3, [r7, #60] @ 0x3c
  30717. }
  30718. else
  30719. {
  30720. frequency = 0;
  30721. }
  30722. break;
  30723. 800d47a: f000 bc74 b.w 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30724. frequency = 0;
  30725. 800d47e: 2300 movs r3, #0
  30726. 800d480: 63fb str r3, [r7, #60] @ 0x3c
  30727. break;
  30728. 800d482: f000 bc70 b.w 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30729. }
  30730. case RCC_SAI23CLKSOURCE_CLKP: /* CKPER is the clock source for SAI2/3 */
  30731. {
  30732. ckpclocksource = __HAL_RCC_GET_CLKP_SOURCE();
  30733. 800d486: 4b21 ldr r3, [pc, #132] @ (800d50c <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  30734. 800d488: 6cdb ldr r3, [r3, #76] @ 0x4c
  30735. 800d48a: f003 5340 and.w r3, r3, #805306368 @ 0x30000000
  30736. 800d48e: 637b str r3, [r7, #52] @ 0x34
  30737. if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSI))
  30738. 800d490: 4b1e ldr r3, [pc, #120] @ (800d50c <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  30739. 800d492: 681b ldr r3, [r3, #0]
  30740. 800d494: f003 0304 and.w r3, r3, #4
  30741. 800d498: 2b04 cmp r3, #4
  30742. 800d49a: d10c bne.n 800d4b6 <HAL_RCCEx_GetPeriphCLKFreq+0x23e>
  30743. 800d49c: 6b7b ldr r3, [r7, #52] @ 0x34
  30744. 800d49e: 2b00 cmp r3, #0
  30745. 800d4a0: d109 bne.n 800d4b6 <HAL_RCCEx_GetPeriphCLKFreq+0x23e>
  30746. {
  30747. /* In Case the CKPER Source is HSI */
  30748. frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  30749. 800d4a2: 4b1a ldr r3, [pc, #104] @ (800d50c <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  30750. 800d4a4: 681b ldr r3, [r3, #0]
  30751. 800d4a6: 08db lsrs r3, r3, #3
  30752. 800d4a8: f003 0303 and.w r3, r3, #3
  30753. 800d4ac: 4a18 ldr r2, [pc, #96] @ (800d510 <HAL_RCCEx_GetPeriphCLKFreq+0x298>)
  30754. 800d4ae: fa22 f303 lsr.w r3, r2, r3
  30755. 800d4b2: 63fb str r3, [r7, #60] @ 0x3c
  30756. 800d4b4: e01f b.n 800d4f6 <HAL_RCCEx_GetPeriphCLKFreq+0x27e>
  30757. }
  30758. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_CSI))
  30759. 800d4b6: 4b15 ldr r3, [pc, #84] @ (800d50c <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  30760. 800d4b8: 681b ldr r3, [r3, #0]
  30761. 800d4ba: f403 7380 and.w r3, r3, #256 @ 0x100
  30762. 800d4be: f5b3 7f80 cmp.w r3, #256 @ 0x100
  30763. 800d4c2: d106 bne.n 800d4d2 <HAL_RCCEx_GetPeriphCLKFreq+0x25a>
  30764. 800d4c4: 6b7b ldr r3, [r7, #52] @ 0x34
  30765. 800d4c6: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  30766. 800d4ca: d102 bne.n 800d4d2 <HAL_RCCEx_GetPeriphCLKFreq+0x25a>
  30767. {
  30768. /* In Case the CKPER Source is CSI */
  30769. frequency = CSI_VALUE;
  30770. 800d4cc: 4b11 ldr r3, [pc, #68] @ (800d514 <HAL_RCCEx_GetPeriphCLKFreq+0x29c>)
  30771. 800d4ce: 63fb str r3, [r7, #60] @ 0x3c
  30772. 800d4d0: e011 b.n 800d4f6 <HAL_RCCEx_GetPeriphCLKFreq+0x27e>
  30773. }
  30774. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSE))
  30775. 800d4d2: 4b0e ldr r3, [pc, #56] @ (800d50c <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  30776. 800d4d4: 681b ldr r3, [r3, #0]
  30777. 800d4d6: f403 3300 and.w r3, r3, #131072 @ 0x20000
  30778. 800d4da: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  30779. 800d4de: d106 bne.n 800d4ee <HAL_RCCEx_GetPeriphCLKFreq+0x276>
  30780. 800d4e0: 6b7b ldr r3, [r7, #52] @ 0x34
  30781. 800d4e2: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  30782. 800d4e6: d102 bne.n 800d4ee <HAL_RCCEx_GetPeriphCLKFreq+0x276>
  30783. {
  30784. /* In Case the CKPER Source is HSE */
  30785. frequency = HSE_VALUE;
  30786. 800d4e8: 4b0b ldr r3, [pc, #44] @ (800d518 <HAL_RCCEx_GetPeriphCLKFreq+0x2a0>)
  30787. 800d4ea: 63fb str r3, [r7, #60] @ 0x3c
  30788. 800d4ec: e003 b.n 800d4f6 <HAL_RCCEx_GetPeriphCLKFreq+0x27e>
  30789. }
  30790. else
  30791. {
  30792. /* In Case the CKPER is disabled*/
  30793. frequency = 0;
  30794. 800d4ee: 2300 movs r3, #0
  30795. 800d4f0: 63fb str r3, [r7, #60] @ 0x3c
  30796. }
  30797. break;
  30798. 800d4f2: f000 bc38 b.w 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30799. 800d4f6: f000 bc36 b.w 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30800. }
  30801. case (RCC_SAI23CLKSOURCE_PIN): /* External clock is the clock source for SAI2/3 */
  30802. {
  30803. frequency = EXTERNAL_CLOCK_VALUE;
  30804. 800d4fa: 4b08 ldr r3, [pc, #32] @ (800d51c <HAL_RCCEx_GetPeriphCLKFreq+0x2a4>)
  30805. 800d4fc: 63fb str r3, [r7, #60] @ 0x3c
  30806. break;
  30807. 800d4fe: f000 bc32 b.w 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30808. }
  30809. default :
  30810. {
  30811. frequency = 0;
  30812. 800d502: 2300 movs r3, #0
  30813. 800d504: 63fb str r3, [r7, #60] @ 0x3c
  30814. break;
  30815. 800d506: f000 bc2e b.w 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30816. 800d50a: bf00 nop
  30817. 800d50c: 58024400 .word 0x58024400
  30818. 800d510: 03d09000 .word 0x03d09000
  30819. 800d514: 003d0900 .word 0x003d0900
  30820. 800d518: 017d7840 .word 0x017d7840
  30821. 800d51c: 00bb8000 .word 0x00bb8000
  30822. }
  30823. }
  30824. #endif
  30825. #if defined(SAI4)
  30826. else if (PeriphClk == RCC_PERIPHCLK_SAI4A)
  30827. 800d520: e9d7 2300 ldrd r2, r3, [r7]
  30828. 800d524: f5a2 6180 sub.w r1, r2, #1024 @ 0x400
  30829. 800d528: 430b orrs r3, r1
  30830. 800d52a: f040 809c bne.w 800d666 <HAL_RCCEx_GetPeriphCLKFreq+0x3ee>
  30831. {
  30832. saiclocksource = __HAL_RCC_GET_SAI4A_SOURCE();
  30833. 800d52e: 4b9e ldr r3, [pc, #632] @ (800d7a8 <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  30834. 800d530: 6d9b ldr r3, [r3, #88] @ 0x58
  30835. 800d532: f403 0360 and.w r3, r3, #14680064 @ 0xe00000
  30836. 800d536: 633b str r3, [r7, #48] @ 0x30
  30837. switch (saiclocksource)
  30838. 800d538: 6b3b ldr r3, [r7, #48] @ 0x30
  30839. 800d53a: f5b3 0f00 cmp.w r3, #8388608 @ 0x800000
  30840. 800d53e: d054 beq.n 800d5ea <HAL_RCCEx_GetPeriphCLKFreq+0x372>
  30841. 800d540: 6b3b ldr r3, [r7, #48] @ 0x30
  30842. 800d542: f5b3 0f00 cmp.w r3, #8388608 @ 0x800000
  30843. 800d546: f200 808b bhi.w 800d660 <HAL_RCCEx_GetPeriphCLKFreq+0x3e8>
  30844. 800d54a: 6b3b ldr r3, [r7, #48] @ 0x30
  30845. 800d54c: f5b3 0fc0 cmp.w r3, #6291456 @ 0x600000
  30846. 800d550: f000 8083 beq.w 800d65a <HAL_RCCEx_GetPeriphCLKFreq+0x3e2>
  30847. 800d554: 6b3b ldr r3, [r7, #48] @ 0x30
  30848. 800d556: f5b3 0fc0 cmp.w r3, #6291456 @ 0x600000
  30849. 800d55a: f200 8081 bhi.w 800d660 <HAL_RCCEx_GetPeriphCLKFreq+0x3e8>
  30850. 800d55e: 6b3b ldr r3, [r7, #48] @ 0x30
  30851. 800d560: f5b3 0f80 cmp.w r3, #4194304 @ 0x400000
  30852. 800d564: d02f beq.n 800d5c6 <HAL_RCCEx_GetPeriphCLKFreq+0x34e>
  30853. 800d566: 6b3b ldr r3, [r7, #48] @ 0x30
  30854. 800d568: f5b3 0f80 cmp.w r3, #4194304 @ 0x400000
  30855. 800d56c: d878 bhi.n 800d660 <HAL_RCCEx_GetPeriphCLKFreq+0x3e8>
  30856. 800d56e: 6b3b ldr r3, [r7, #48] @ 0x30
  30857. 800d570: 2b00 cmp r3, #0
  30858. 800d572: d004 beq.n 800d57e <HAL_RCCEx_GetPeriphCLKFreq+0x306>
  30859. 800d574: 6b3b ldr r3, [r7, #48] @ 0x30
  30860. 800d576: f5b3 1f00 cmp.w r3, #2097152 @ 0x200000
  30861. 800d57a: d012 beq.n 800d5a2 <HAL_RCCEx_GetPeriphCLKFreq+0x32a>
  30862. 800d57c: e070 b.n 800d660 <HAL_RCCEx_GetPeriphCLKFreq+0x3e8>
  30863. {
  30864. case RCC_SAI4ACLKSOURCE_PLL: /* PLL1 is the clock source for SAI4A */
  30865. {
  30866. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
  30867. 800d57e: 4b8a ldr r3, [pc, #552] @ (800d7a8 <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  30868. 800d580: 681b ldr r3, [r3, #0]
  30869. 800d582: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  30870. 800d586: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  30871. 800d58a: d107 bne.n 800d59c <HAL_RCCEx_GetPeriphCLKFreq+0x324>
  30872. {
  30873. HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
  30874. 800d58c: f107 0324 add.w r3, r7, #36 @ 0x24
  30875. 800d590: 4618 mov r0, r3
  30876. 800d592: f000 feaf bl 800e2f4 <HAL_RCCEx_GetPLL1ClockFreq>
  30877. frequency = pll1_clocks.PLL1_Q_Frequency;
  30878. 800d596: 6abb ldr r3, [r7, #40] @ 0x28
  30879. 800d598: 63fb str r3, [r7, #60] @ 0x3c
  30880. }
  30881. else
  30882. {
  30883. frequency = 0;
  30884. }
  30885. break;
  30886. 800d59a: e3e4 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30887. frequency = 0;
  30888. 800d59c: 2300 movs r3, #0
  30889. 800d59e: 63fb str r3, [r7, #60] @ 0x3c
  30890. break;
  30891. 800d5a0: e3e1 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30892. }
  30893. case RCC_SAI4ACLKSOURCE_PLL2: /* PLLI2 is the clock source for SAI4A */
  30894. {
  30895. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  30896. 800d5a2: 4b81 ldr r3, [pc, #516] @ (800d7a8 <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  30897. 800d5a4: 681b ldr r3, [r3, #0]
  30898. 800d5a6: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  30899. 800d5aa: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  30900. 800d5ae: d107 bne.n 800d5c0 <HAL_RCCEx_GetPeriphCLKFreq+0x348>
  30901. {
  30902. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  30903. 800d5b0: f107 0318 add.w r3, r7, #24
  30904. 800d5b4: 4618 mov r0, r3
  30905. 800d5b6: f000 fbf5 bl 800dda4 <HAL_RCCEx_GetPLL2ClockFreq>
  30906. frequency = pll2_clocks.PLL2_P_Frequency;
  30907. 800d5ba: 69bb ldr r3, [r7, #24]
  30908. 800d5bc: 63fb str r3, [r7, #60] @ 0x3c
  30909. }
  30910. else
  30911. {
  30912. frequency = 0;
  30913. }
  30914. break;
  30915. 800d5be: e3d2 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30916. frequency = 0;
  30917. 800d5c0: 2300 movs r3, #0
  30918. 800d5c2: 63fb str r3, [r7, #60] @ 0x3c
  30919. break;
  30920. 800d5c4: e3cf b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30921. }
  30922. case RCC_SAI4ACLKSOURCE_PLL3: /* PLLI3 is the clock source for SAI4A */
  30923. {
  30924. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
  30925. 800d5c6: 4b78 ldr r3, [pc, #480] @ (800d7a8 <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  30926. 800d5c8: 681b ldr r3, [r3, #0]
  30927. 800d5ca: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  30928. 800d5ce: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  30929. 800d5d2: d107 bne.n 800d5e4 <HAL_RCCEx_GetPeriphCLKFreq+0x36c>
  30930. {
  30931. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  30932. 800d5d4: f107 030c add.w r3, r7, #12
  30933. 800d5d8: 4618 mov r0, r3
  30934. 800d5da: f000 fd37 bl 800e04c <HAL_RCCEx_GetPLL3ClockFreq>
  30935. frequency = pll3_clocks.PLL3_P_Frequency;
  30936. 800d5de: 68fb ldr r3, [r7, #12]
  30937. 800d5e0: 63fb str r3, [r7, #60] @ 0x3c
  30938. }
  30939. else
  30940. {
  30941. frequency = 0;
  30942. }
  30943. break;
  30944. 800d5e2: e3c0 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30945. frequency = 0;
  30946. 800d5e4: 2300 movs r3, #0
  30947. 800d5e6: 63fb str r3, [r7, #60] @ 0x3c
  30948. break;
  30949. 800d5e8: e3bd b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  30950. }
  30951. case RCC_SAI4ACLKSOURCE_CLKP: /* CKPER is the clock source for SAI4A*/
  30952. {
  30953. ckpclocksource = __HAL_RCC_GET_CLKP_SOURCE();
  30954. 800d5ea: 4b6f ldr r3, [pc, #444] @ (800d7a8 <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  30955. 800d5ec: 6cdb ldr r3, [r3, #76] @ 0x4c
  30956. 800d5ee: f003 5340 and.w r3, r3, #805306368 @ 0x30000000
  30957. 800d5f2: 637b str r3, [r7, #52] @ 0x34
  30958. if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSI))
  30959. 800d5f4: 4b6c ldr r3, [pc, #432] @ (800d7a8 <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  30960. 800d5f6: 681b ldr r3, [r3, #0]
  30961. 800d5f8: f003 0304 and.w r3, r3, #4
  30962. 800d5fc: 2b04 cmp r3, #4
  30963. 800d5fe: d10c bne.n 800d61a <HAL_RCCEx_GetPeriphCLKFreq+0x3a2>
  30964. 800d600: 6b7b ldr r3, [r7, #52] @ 0x34
  30965. 800d602: 2b00 cmp r3, #0
  30966. 800d604: d109 bne.n 800d61a <HAL_RCCEx_GetPeriphCLKFreq+0x3a2>
  30967. {
  30968. /* In Case the CKPER Source is HSI */
  30969. frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  30970. 800d606: 4b68 ldr r3, [pc, #416] @ (800d7a8 <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  30971. 800d608: 681b ldr r3, [r3, #0]
  30972. 800d60a: 08db lsrs r3, r3, #3
  30973. 800d60c: f003 0303 and.w r3, r3, #3
  30974. 800d610: 4a66 ldr r2, [pc, #408] @ (800d7ac <HAL_RCCEx_GetPeriphCLKFreq+0x534>)
  30975. 800d612: fa22 f303 lsr.w r3, r2, r3
  30976. 800d616: 63fb str r3, [r7, #60] @ 0x3c
  30977. 800d618: e01e b.n 800d658 <HAL_RCCEx_GetPeriphCLKFreq+0x3e0>
  30978. }
  30979. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_CSI))
  30980. 800d61a: 4b63 ldr r3, [pc, #396] @ (800d7a8 <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  30981. 800d61c: 681b ldr r3, [r3, #0]
  30982. 800d61e: f403 7380 and.w r3, r3, #256 @ 0x100
  30983. 800d622: f5b3 7f80 cmp.w r3, #256 @ 0x100
  30984. 800d626: d106 bne.n 800d636 <HAL_RCCEx_GetPeriphCLKFreq+0x3be>
  30985. 800d628: 6b7b ldr r3, [r7, #52] @ 0x34
  30986. 800d62a: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  30987. 800d62e: d102 bne.n 800d636 <HAL_RCCEx_GetPeriphCLKFreq+0x3be>
  30988. {
  30989. /* In Case the CKPER Source is CSI */
  30990. frequency = CSI_VALUE;
  30991. 800d630: 4b5f ldr r3, [pc, #380] @ (800d7b0 <HAL_RCCEx_GetPeriphCLKFreq+0x538>)
  30992. 800d632: 63fb str r3, [r7, #60] @ 0x3c
  30993. 800d634: e010 b.n 800d658 <HAL_RCCEx_GetPeriphCLKFreq+0x3e0>
  30994. }
  30995. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSE))
  30996. 800d636: 4b5c ldr r3, [pc, #368] @ (800d7a8 <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  30997. 800d638: 681b ldr r3, [r3, #0]
  30998. 800d63a: f403 3300 and.w r3, r3, #131072 @ 0x20000
  30999. 800d63e: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  31000. 800d642: d106 bne.n 800d652 <HAL_RCCEx_GetPeriphCLKFreq+0x3da>
  31001. 800d644: 6b7b ldr r3, [r7, #52] @ 0x34
  31002. 800d646: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  31003. 800d64a: d102 bne.n 800d652 <HAL_RCCEx_GetPeriphCLKFreq+0x3da>
  31004. {
  31005. /* In Case the CKPER Source is HSE */
  31006. frequency = HSE_VALUE;
  31007. 800d64c: 4b59 ldr r3, [pc, #356] @ (800d7b4 <HAL_RCCEx_GetPeriphCLKFreq+0x53c>)
  31008. 800d64e: 63fb str r3, [r7, #60] @ 0x3c
  31009. 800d650: e002 b.n 800d658 <HAL_RCCEx_GetPeriphCLKFreq+0x3e0>
  31010. }
  31011. else
  31012. {
  31013. /* In Case the CKPER is disabled*/
  31014. frequency = 0;
  31015. 800d652: 2300 movs r3, #0
  31016. 800d654: 63fb str r3, [r7, #60] @ 0x3c
  31017. }
  31018. break;
  31019. 800d656: e386 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31020. 800d658: e385 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31021. }
  31022. case RCC_SAI4ACLKSOURCE_PIN: /* External clock is the clock source for SAI4A */
  31023. {
  31024. frequency = EXTERNAL_CLOCK_VALUE;
  31025. 800d65a: 4b57 ldr r3, [pc, #348] @ (800d7b8 <HAL_RCCEx_GetPeriphCLKFreq+0x540>)
  31026. 800d65c: 63fb str r3, [r7, #60] @ 0x3c
  31027. break;
  31028. 800d65e: e382 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31029. }
  31030. default :
  31031. {
  31032. frequency = 0;
  31033. 800d660: 2300 movs r3, #0
  31034. 800d662: 63fb str r3, [r7, #60] @ 0x3c
  31035. break;
  31036. 800d664: e37f b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31037. }
  31038. }
  31039. }
  31040. else if (PeriphClk == RCC_PERIPHCLK_SAI4B)
  31041. 800d666: e9d7 2300 ldrd r2, r3, [r7]
  31042. 800d66a: f5a2 6100 sub.w r1, r2, #2048 @ 0x800
  31043. 800d66e: 430b orrs r3, r1
  31044. 800d670: f040 80a7 bne.w 800d7c2 <HAL_RCCEx_GetPeriphCLKFreq+0x54a>
  31045. {
  31046. saiclocksource = __HAL_RCC_GET_SAI4B_SOURCE();
  31047. 800d674: 4b4c ldr r3, [pc, #304] @ (800d7a8 <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  31048. 800d676: 6d9b ldr r3, [r3, #88] @ 0x58
  31049. 800d678: f003 63e0 and.w r3, r3, #117440512 @ 0x7000000
  31050. 800d67c: 633b str r3, [r7, #48] @ 0x30
  31051. switch (saiclocksource)
  31052. 800d67e: 6b3b ldr r3, [r7, #48] @ 0x30
  31053. 800d680: f1b3 6f80 cmp.w r3, #67108864 @ 0x4000000
  31054. 800d684: d055 beq.n 800d732 <HAL_RCCEx_GetPeriphCLKFreq+0x4ba>
  31055. 800d686: 6b3b ldr r3, [r7, #48] @ 0x30
  31056. 800d688: f1b3 6f80 cmp.w r3, #67108864 @ 0x4000000
  31057. 800d68c: f200 8096 bhi.w 800d7bc <HAL_RCCEx_GetPeriphCLKFreq+0x544>
  31058. 800d690: 6b3b ldr r3, [r7, #48] @ 0x30
  31059. 800d692: f1b3 7f40 cmp.w r3, #50331648 @ 0x3000000
  31060. 800d696: f000 8084 beq.w 800d7a2 <HAL_RCCEx_GetPeriphCLKFreq+0x52a>
  31061. 800d69a: 6b3b ldr r3, [r7, #48] @ 0x30
  31062. 800d69c: f1b3 7f40 cmp.w r3, #50331648 @ 0x3000000
  31063. 800d6a0: f200 808c bhi.w 800d7bc <HAL_RCCEx_GetPeriphCLKFreq+0x544>
  31064. 800d6a4: 6b3b ldr r3, [r7, #48] @ 0x30
  31065. 800d6a6: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  31066. 800d6aa: d030 beq.n 800d70e <HAL_RCCEx_GetPeriphCLKFreq+0x496>
  31067. 800d6ac: 6b3b ldr r3, [r7, #48] @ 0x30
  31068. 800d6ae: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  31069. 800d6b2: f200 8083 bhi.w 800d7bc <HAL_RCCEx_GetPeriphCLKFreq+0x544>
  31070. 800d6b6: 6b3b ldr r3, [r7, #48] @ 0x30
  31071. 800d6b8: 2b00 cmp r3, #0
  31072. 800d6ba: d004 beq.n 800d6c6 <HAL_RCCEx_GetPeriphCLKFreq+0x44e>
  31073. 800d6bc: 6b3b ldr r3, [r7, #48] @ 0x30
  31074. 800d6be: f1b3 7f80 cmp.w r3, #16777216 @ 0x1000000
  31075. 800d6c2: d012 beq.n 800d6ea <HAL_RCCEx_GetPeriphCLKFreq+0x472>
  31076. 800d6c4: e07a b.n 800d7bc <HAL_RCCEx_GetPeriphCLKFreq+0x544>
  31077. {
  31078. case RCC_SAI4BCLKSOURCE_PLL: /* PLL1 is the clock source for SAI4B */
  31079. {
  31080. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
  31081. 800d6c6: 4b38 ldr r3, [pc, #224] @ (800d7a8 <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  31082. 800d6c8: 681b ldr r3, [r3, #0]
  31083. 800d6ca: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  31084. 800d6ce: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  31085. 800d6d2: d107 bne.n 800d6e4 <HAL_RCCEx_GetPeriphCLKFreq+0x46c>
  31086. {
  31087. HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
  31088. 800d6d4: f107 0324 add.w r3, r7, #36 @ 0x24
  31089. 800d6d8: 4618 mov r0, r3
  31090. 800d6da: f000 fe0b bl 800e2f4 <HAL_RCCEx_GetPLL1ClockFreq>
  31091. frequency = pll1_clocks.PLL1_Q_Frequency;
  31092. 800d6de: 6abb ldr r3, [r7, #40] @ 0x28
  31093. 800d6e0: 63fb str r3, [r7, #60] @ 0x3c
  31094. }
  31095. else
  31096. {
  31097. frequency = 0;
  31098. }
  31099. break;
  31100. 800d6e2: e340 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31101. frequency = 0;
  31102. 800d6e4: 2300 movs r3, #0
  31103. 800d6e6: 63fb str r3, [r7, #60] @ 0x3c
  31104. break;
  31105. 800d6e8: e33d b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31106. }
  31107. case RCC_SAI4BCLKSOURCE_PLL2: /* PLLI2 is the clock source for SAI4B */
  31108. {
  31109. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  31110. 800d6ea: 4b2f ldr r3, [pc, #188] @ (800d7a8 <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  31111. 800d6ec: 681b ldr r3, [r3, #0]
  31112. 800d6ee: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  31113. 800d6f2: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  31114. 800d6f6: d107 bne.n 800d708 <HAL_RCCEx_GetPeriphCLKFreq+0x490>
  31115. {
  31116. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  31117. 800d6f8: f107 0318 add.w r3, r7, #24
  31118. 800d6fc: 4618 mov r0, r3
  31119. 800d6fe: f000 fb51 bl 800dda4 <HAL_RCCEx_GetPLL2ClockFreq>
  31120. frequency = pll2_clocks.PLL2_P_Frequency;
  31121. 800d702: 69bb ldr r3, [r7, #24]
  31122. 800d704: 63fb str r3, [r7, #60] @ 0x3c
  31123. }
  31124. else
  31125. {
  31126. frequency = 0;
  31127. }
  31128. break;
  31129. 800d706: e32e b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31130. frequency = 0;
  31131. 800d708: 2300 movs r3, #0
  31132. 800d70a: 63fb str r3, [r7, #60] @ 0x3c
  31133. break;
  31134. 800d70c: e32b b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31135. }
  31136. case RCC_SAI4BCLKSOURCE_PLL3: /* PLLI3 is the clock source for SAI4B */
  31137. {
  31138. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
  31139. 800d70e: 4b26 ldr r3, [pc, #152] @ (800d7a8 <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  31140. 800d710: 681b ldr r3, [r3, #0]
  31141. 800d712: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  31142. 800d716: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  31143. 800d71a: d107 bne.n 800d72c <HAL_RCCEx_GetPeriphCLKFreq+0x4b4>
  31144. {
  31145. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  31146. 800d71c: f107 030c add.w r3, r7, #12
  31147. 800d720: 4618 mov r0, r3
  31148. 800d722: f000 fc93 bl 800e04c <HAL_RCCEx_GetPLL3ClockFreq>
  31149. frequency = pll3_clocks.PLL3_P_Frequency;
  31150. 800d726: 68fb ldr r3, [r7, #12]
  31151. 800d728: 63fb str r3, [r7, #60] @ 0x3c
  31152. }
  31153. else
  31154. {
  31155. frequency = 0;
  31156. }
  31157. break;
  31158. 800d72a: e31c b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31159. frequency = 0;
  31160. 800d72c: 2300 movs r3, #0
  31161. 800d72e: 63fb str r3, [r7, #60] @ 0x3c
  31162. break;
  31163. 800d730: e319 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31164. }
  31165. case RCC_SAI4BCLKSOURCE_CLKP: /* CKPER is the clock source for SAI4B*/
  31166. {
  31167. ckpclocksource = __HAL_RCC_GET_CLKP_SOURCE();
  31168. 800d732: 4b1d ldr r3, [pc, #116] @ (800d7a8 <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  31169. 800d734: 6cdb ldr r3, [r3, #76] @ 0x4c
  31170. 800d736: f003 5340 and.w r3, r3, #805306368 @ 0x30000000
  31171. 800d73a: 637b str r3, [r7, #52] @ 0x34
  31172. if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSI))
  31173. 800d73c: 4b1a ldr r3, [pc, #104] @ (800d7a8 <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  31174. 800d73e: 681b ldr r3, [r3, #0]
  31175. 800d740: f003 0304 and.w r3, r3, #4
  31176. 800d744: 2b04 cmp r3, #4
  31177. 800d746: d10c bne.n 800d762 <HAL_RCCEx_GetPeriphCLKFreq+0x4ea>
  31178. 800d748: 6b7b ldr r3, [r7, #52] @ 0x34
  31179. 800d74a: 2b00 cmp r3, #0
  31180. 800d74c: d109 bne.n 800d762 <HAL_RCCEx_GetPeriphCLKFreq+0x4ea>
  31181. {
  31182. /* In Case the CKPER Source is HSI */
  31183. frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  31184. 800d74e: 4b16 ldr r3, [pc, #88] @ (800d7a8 <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  31185. 800d750: 681b ldr r3, [r3, #0]
  31186. 800d752: 08db lsrs r3, r3, #3
  31187. 800d754: f003 0303 and.w r3, r3, #3
  31188. 800d758: 4a14 ldr r2, [pc, #80] @ (800d7ac <HAL_RCCEx_GetPeriphCLKFreq+0x534>)
  31189. 800d75a: fa22 f303 lsr.w r3, r2, r3
  31190. 800d75e: 63fb str r3, [r7, #60] @ 0x3c
  31191. 800d760: e01e b.n 800d7a0 <HAL_RCCEx_GetPeriphCLKFreq+0x528>
  31192. }
  31193. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_CSI))
  31194. 800d762: 4b11 ldr r3, [pc, #68] @ (800d7a8 <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  31195. 800d764: 681b ldr r3, [r3, #0]
  31196. 800d766: f403 7380 and.w r3, r3, #256 @ 0x100
  31197. 800d76a: f5b3 7f80 cmp.w r3, #256 @ 0x100
  31198. 800d76e: d106 bne.n 800d77e <HAL_RCCEx_GetPeriphCLKFreq+0x506>
  31199. 800d770: 6b7b ldr r3, [r7, #52] @ 0x34
  31200. 800d772: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  31201. 800d776: d102 bne.n 800d77e <HAL_RCCEx_GetPeriphCLKFreq+0x506>
  31202. {
  31203. /* In Case the CKPER Source is CSI */
  31204. frequency = CSI_VALUE;
  31205. 800d778: 4b0d ldr r3, [pc, #52] @ (800d7b0 <HAL_RCCEx_GetPeriphCLKFreq+0x538>)
  31206. 800d77a: 63fb str r3, [r7, #60] @ 0x3c
  31207. 800d77c: e010 b.n 800d7a0 <HAL_RCCEx_GetPeriphCLKFreq+0x528>
  31208. }
  31209. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSE))
  31210. 800d77e: 4b0a ldr r3, [pc, #40] @ (800d7a8 <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  31211. 800d780: 681b ldr r3, [r3, #0]
  31212. 800d782: f403 3300 and.w r3, r3, #131072 @ 0x20000
  31213. 800d786: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  31214. 800d78a: d106 bne.n 800d79a <HAL_RCCEx_GetPeriphCLKFreq+0x522>
  31215. 800d78c: 6b7b ldr r3, [r7, #52] @ 0x34
  31216. 800d78e: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  31217. 800d792: d102 bne.n 800d79a <HAL_RCCEx_GetPeriphCLKFreq+0x522>
  31218. {
  31219. /* In Case the CKPER Source is HSE */
  31220. frequency = HSE_VALUE;
  31221. 800d794: 4b07 ldr r3, [pc, #28] @ (800d7b4 <HAL_RCCEx_GetPeriphCLKFreq+0x53c>)
  31222. 800d796: 63fb str r3, [r7, #60] @ 0x3c
  31223. 800d798: e002 b.n 800d7a0 <HAL_RCCEx_GetPeriphCLKFreq+0x528>
  31224. }
  31225. else
  31226. {
  31227. /* In Case the CKPER is disabled*/
  31228. frequency = 0;
  31229. 800d79a: 2300 movs r3, #0
  31230. 800d79c: 63fb str r3, [r7, #60] @ 0x3c
  31231. }
  31232. break;
  31233. 800d79e: e2e2 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31234. 800d7a0: e2e1 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31235. }
  31236. case RCC_SAI4BCLKSOURCE_PIN: /* External clock is the clock source for SAI4B */
  31237. {
  31238. frequency = EXTERNAL_CLOCK_VALUE;
  31239. 800d7a2: 4b05 ldr r3, [pc, #20] @ (800d7b8 <HAL_RCCEx_GetPeriphCLKFreq+0x540>)
  31240. 800d7a4: 63fb str r3, [r7, #60] @ 0x3c
  31241. break;
  31242. 800d7a6: e2de b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31243. 800d7a8: 58024400 .word 0x58024400
  31244. 800d7ac: 03d09000 .word 0x03d09000
  31245. 800d7b0: 003d0900 .word 0x003d0900
  31246. 800d7b4: 017d7840 .word 0x017d7840
  31247. 800d7b8: 00bb8000 .word 0x00bb8000
  31248. }
  31249. default :
  31250. {
  31251. frequency = 0;
  31252. 800d7bc: 2300 movs r3, #0
  31253. 800d7be: 63fb str r3, [r7, #60] @ 0x3c
  31254. break;
  31255. 800d7c0: e2d1 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31256. }
  31257. }
  31258. }
  31259. #endif /*SAI4*/
  31260. else if (PeriphClk == RCC_PERIPHCLK_SPI123)
  31261. 800d7c2: e9d7 2300 ldrd r2, r3, [r7]
  31262. 800d7c6: f5a2 5180 sub.w r1, r2, #4096 @ 0x1000
  31263. 800d7ca: 430b orrs r3, r1
  31264. 800d7cc: f040 809c bne.w 800d908 <HAL_RCCEx_GetPeriphCLKFreq+0x690>
  31265. {
  31266. /* Get SPI1/2/3 clock source */
  31267. srcclk = __HAL_RCC_GET_SPI123_SOURCE();
  31268. 800d7d0: 4b93 ldr r3, [pc, #588] @ (800da20 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  31269. 800d7d2: 6d1b ldr r3, [r3, #80] @ 0x50
  31270. 800d7d4: f403 43e0 and.w r3, r3, #28672 @ 0x7000
  31271. 800d7d8: 63bb str r3, [r7, #56] @ 0x38
  31272. switch (srcclk)
  31273. 800d7da: 6bbb ldr r3, [r7, #56] @ 0x38
  31274. 800d7dc: f5b3 4f80 cmp.w r3, #16384 @ 0x4000
  31275. 800d7e0: d054 beq.n 800d88c <HAL_RCCEx_GetPeriphCLKFreq+0x614>
  31276. 800d7e2: 6bbb ldr r3, [r7, #56] @ 0x38
  31277. 800d7e4: f5b3 4f80 cmp.w r3, #16384 @ 0x4000
  31278. 800d7e8: f200 808b bhi.w 800d902 <HAL_RCCEx_GetPeriphCLKFreq+0x68a>
  31279. 800d7ec: 6bbb ldr r3, [r7, #56] @ 0x38
  31280. 800d7ee: f5b3 5f40 cmp.w r3, #12288 @ 0x3000
  31281. 800d7f2: f000 8083 beq.w 800d8fc <HAL_RCCEx_GetPeriphCLKFreq+0x684>
  31282. 800d7f6: 6bbb ldr r3, [r7, #56] @ 0x38
  31283. 800d7f8: f5b3 5f40 cmp.w r3, #12288 @ 0x3000
  31284. 800d7fc: f200 8081 bhi.w 800d902 <HAL_RCCEx_GetPeriphCLKFreq+0x68a>
  31285. 800d800: 6bbb ldr r3, [r7, #56] @ 0x38
  31286. 800d802: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  31287. 800d806: d02f beq.n 800d868 <HAL_RCCEx_GetPeriphCLKFreq+0x5f0>
  31288. 800d808: 6bbb ldr r3, [r7, #56] @ 0x38
  31289. 800d80a: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  31290. 800d80e: d878 bhi.n 800d902 <HAL_RCCEx_GetPeriphCLKFreq+0x68a>
  31291. 800d810: 6bbb ldr r3, [r7, #56] @ 0x38
  31292. 800d812: 2b00 cmp r3, #0
  31293. 800d814: d004 beq.n 800d820 <HAL_RCCEx_GetPeriphCLKFreq+0x5a8>
  31294. 800d816: 6bbb ldr r3, [r7, #56] @ 0x38
  31295. 800d818: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  31296. 800d81c: d012 beq.n 800d844 <HAL_RCCEx_GetPeriphCLKFreq+0x5cc>
  31297. 800d81e: e070 b.n 800d902 <HAL_RCCEx_GetPeriphCLKFreq+0x68a>
  31298. {
  31299. case RCC_SPI123CLKSOURCE_PLL: /* PLL1 is the clock source for SPI123 */
  31300. {
  31301. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
  31302. 800d820: 4b7f ldr r3, [pc, #508] @ (800da20 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  31303. 800d822: 681b ldr r3, [r3, #0]
  31304. 800d824: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  31305. 800d828: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  31306. 800d82c: d107 bne.n 800d83e <HAL_RCCEx_GetPeriphCLKFreq+0x5c6>
  31307. {
  31308. HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
  31309. 800d82e: f107 0324 add.w r3, r7, #36 @ 0x24
  31310. 800d832: 4618 mov r0, r3
  31311. 800d834: f000 fd5e bl 800e2f4 <HAL_RCCEx_GetPLL1ClockFreq>
  31312. frequency = pll1_clocks.PLL1_Q_Frequency;
  31313. 800d838: 6abb ldr r3, [r7, #40] @ 0x28
  31314. 800d83a: 63fb str r3, [r7, #60] @ 0x3c
  31315. }
  31316. else
  31317. {
  31318. frequency = 0;
  31319. }
  31320. break;
  31321. 800d83c: e293 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31322. frequency = 0;
  31323. 800d83e: 2300 movs r3, #0
  31324. 800d840: 63fb str r3, [r7, #60] @ 0x3c
  31325. break;
  31326. 800d842: e290 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31327. }
  31328. case RCC_SPI123CLKSOURCE_PLL2: /* PLL2 is the clock source for SPI123 */
  31329. {
  31330. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  31331. 800d844: 4b76 ldr r3, [pc, #472] @ (800da20 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  31332. 800d846: 681b ldr r3, [r3, #0]
  31333. 800d848: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  31334. 800d84c: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  31335. 800d850: d107 bne.n 800d862 <HAL_RCCEx_GetPeriphCLKFreq+0x5ea>
  31336. {
  31337. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  31338. 800d852: f107 0318 add.w r3, r7, #24
  31339. 800d856: 4618 mov r0, r3
  31340. 800d858: f000 faa4 bl 800dda4 <HAL_RCCEx_GetPLL2ClockFreq>
  31341. frequency = pll2_clocks.PLL2_P_Frequency;
  31342. 800d85c: 69bb ldr r3, [r7, #24]
  31343. 800d85e: 63fb str r3, [r7, #60] @ 0x3c
  31344. }
  31345. else
  31346. {
  31347. frequency = 0;
  31348. }
  31349. break;
  31350. 800d860: e281 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31351. frequency = 0;
  31352. 800d862: 2300 movs r3, #0
  31353. 800d864: 63fb str r3, [r7, #60] @ 0x3c
  31354. break;
  31355. 800d866: e27e b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31356. }
  31357. case RCC_SPI123CLKSOURCE_PLL3: /* PLL3 is the clock source for SPI123 */
  31358. {
  31359. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
  31360. 800d868: 4b6d ldr r3, [pc, #436] @ (800da20 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  31361. 800d86a: 681b ldr r3, [r3, #0]
  31362. 800d86c: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  31363. 800d870: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  31364. 800d874: d107 bne.n 800d886 <HAL_RCCEx_GetPeriphCLKFreq+0x60e>
  31365. {
  31366. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  31367. 800d876: f107 030c add.w r3, r7, #12
  31368. 800d87a: 4618 mov r0, r3
  31369. 800d87c: f000 fbe6 bl 800e04c <HAL_RCCEx_GetPLL3ClockFreq>
  31370. frequency = pll3_clocks.PLL3_P_Frequency;
  31371. 800d880: 68fb ldr r3, [r7, #12]
  31372. 800d882: 63fb str r3, [r7, #60] @ 0x3c
  31373. }
  31374. else
  31375. {
  31376. frequency = 0;
  31377. }
  31378. break;
  31379. 800d884: e26f b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31380. frequency = 0;
  31381. 800d886: 2300 movs r3, #0
  31382. 800d888: 63fb str r3, [r7, #60] @ 0x3c
  31383. break;
  31384. 800d88a: e26c b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31385. }
  31386. case RCC_SPI123CLKSOURCE_CLKP: /* CKPER is the clock source for SPI123 */
  31387. {
  31388. ckpclocksource = __HAL_RCC_GET_CLKP_SOURCE();
  31389. 800d88c: 4b64 ldr r3, [pc, #400] @ (800da20 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  31390. 800d88e: 6cdb ldr r3, [r3, #76] @ 0x4c
  31391. 800d890: f003 5340 and.w r3, r3, #805306368 @ 0x30000000
  31392. 800d894: 637b str r3, [r7, #52] @ 0x34
  31393. if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSI))
  31394. 800d896: 4b62 ldr r3, [pc, #392] @ (800da20 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  31395. 800d898: 681b ldr r3, [r3, #0]
  31396. 800d89a: f003 0304 and.w r3, r3, #4
  31397. 800d89e: 2b04 cmp r3, #4
  31398. 800d8a0: d10c bne.n 800d8bc <HAL_RCCEx_GetPeriphCLKFreq+0x644>
  31399. 800d8a2: 6b7b ldr r3, [r7, #52] @ 0x34
  31400. 800d8a4: 2b00 cmp r3, #0
  31401. 800d8a6: d109 bne.n 800d8bc <HAL_RCCEx_GetPeriphCLKFreq+0x644>
  31402. {
  31403. /* In Case the CKPER Source is HSI */
  31404. frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  31405. 800d8a8: 4b5d ldr r3, [pc, #372] @ (800da20 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  31406. 800d8aa: 681b ldr r3, [r3, #0]
  31407. 800d8ac: 08db lsrs r3, r3, #3
  31408. 800d8ae: f003 0303 and.w r3, r3, #3
  31409. 800d8b2: 4a5c ldr r2, [pc, #368] @ (800da24 <HAL_RCCEx_GetPeriphCLKFreq+0x7ac>)
  31410. 800d8b4: fa22 f303 lsr.w r3, r2, r3
  31411. 800d8b8: 63fb str r3, [r7, #60] @ 0x3c
  31412. 800d8ba: e01e b.n 800d8fa <HAL_RCCEx_GetPeriphCLKFreq+0x682>
  31413. }
  31414. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_CSI))
  31415. 800d8bc: 4b58 ldr r3, [pc, #352] @ (800da20 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  31416. 800d8be: 681b ldr r3, [r3, #0]
  31417. 800d8c0: f403 7380 and.w r3, r3, #256 @ 0x100
  31418. 800d8c4: f5b3 7f80 cmp.w r3, #256 @ 0x100
  31419. 800d8c8: d106 bne.n 800d8d8 <HAL_RCCEx_GetPeriphCLKFreq+0x660>
  31420. 800d8ca: 6b7b ldr r3, [r7, #52] @ 0x34
  31421. 800d8cc: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  31422. 800d8d0: d102 bne.n 800d8d8 <HAL_RCCEx_GetPeriphCLKFreq+0x660>
  31423. {
  31424. /* In Case the CKPER Source is CSI */
  31425. frequency = CSI_VALUE;
  31426. 800d8d2: 4b55 ldr r3, [pc, #340] @ (800da28 <HAL_RCCEx_GetPeriphCLKFreq+0x7b0>)
  31427. 800d8d4: 63fb str r3, [r7, #60] @ 0x3c
  31428. 800d8d6: e010 b.n 800d8fa <HAL_RCCEx_GetPeriphCLKFreq+0x682>
  31429. }
  31430. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSE))
  31431. 800d8d8: 4b51 ldr r3, [pc, #324] @ (800da20 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  31432. 800d8da: 681b ldr r3, [r3, #0]
  31433. 800d8dc: f403 3300 and.w r3, r3, #131072 @ 0x20000
  31434. 800d8e0: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  31435. 800d8e4: d106 bne.n 800d8f4 <HAL_RCCEx_GetPeriphCLKFreq+0x67c>
  31436. 800d8e6: 6b7b ldr r3, [r7, #52] @ 0x34
  31437. 800d8e8: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  31438. 800d8ec: d102 bne.n 800d8f4 <HAL_RCCEx_GetPeriphCLKFreq+0x67c>
  31439. {
  31440. /* In Case the CKPER Source is HSE */
  31441. frequency = HSE_VALUE;
  31442. 800d8ee: 4b4f ldr r3, [pc, #316] @ (800da2c <HAL_RCCEx_GetPeriphCLKFreq+0x7b4>)
  31443. 800d8f0: 63fb str r3, [r7, #60] @ 0x3c
  31444. 800d8f2: e002 b.n 800d8fa <HAL_RCCEx_GetPeriphCLKFreq+0x682>
  31445. }
  31446. else
  31447. {
  31448. /* In Case the CKPER is disabled*/
  31449. frequency = 0;
  31450. 800d8f4: 2300 movs r3, #0
  31451. 800d8f6: 63fb str r3, [r7, #60] @ 0x3c
  31452. }
  31453. break;
  31454. 800d8f8: e235 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31455. 800d8fa: e234 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31456. }
  31457. case (RCC_SPI123CLKSOURCE_PIN): /* External clock is the clock source for I2S */
  31458. {
  31459. frequency = EXTERNAL_CLOCK_VALUE;
  31460. 800d8fc: 4b4c ldr r3, [pc, #304] @ (800da30 <HAL_RCCEx_GetPeriphCLKFreq+0x7b8>)
  31461. 800d8fe: 63fb str r3, [r7, #60] @ 0x3c
  31462. break;
  31463. 800d900: e231 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31464. }
  31465. default :
  31466. {
  31467. frequency = 0;
  31468. 800d902: 2300 movs r3, #0
  31469. 800d904: 63fb str r3, [r7, #60] @ 0x3c
  31470. break;
  31471. 800d906: e22e b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31472. }
  31473. }
  31474. }
  31475. else if (PeriphClk == RCC_PERIPHCLK_SPI45)
  31476. 800d908: e9d7 2300 ldrd r2, r3, [r7]
  31477. 800d90c: f5a2 5100 sub.w r1, r2, #8192 @ 0x2000
  31478. 800d910: 430b orrs r3, r1
  31479. 800d912: f040 808f bne.w 800da34 <HAL_RCCEx_GetPeriphCLKFreq+0x7bc>
  31480. {
  31481. /* Get SPI45 clock source */
  31482. srcclk = __HAL_RCC_GET_SPI45_SOURCE();
  31483. 800d916: 4b42 ldr r3, [pc, #264] @ (800da20 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  31484. 800d918: 6d1b ldr r3, [r3, #80] @ 0x50
  31485. 800d91a: f403 23e0 and.w r3, r3, #458752 @ 0x70000
  31486. 800d91e: 63bb str r3, [r7, #56] @ 0x38
  31487. switch (srcclk)
  31488. 800d920: 6bbb ldr r3, [r7, #56] @ 0x38
  31489. 800d922: f5b3 2fa0 cmp.w r3, #327680 @ 0x50000
  31490. 800d926: d06b beq.n 800da00 <HAL_RCCEx_GetPeriphCLKFreq+0x788>
  31491. 800d928: 6bbb ldr r3, [r7, #56] @ 0x38
  31492. 800d92a: f5b3 2fa0 cmp.w r3, #327680 @ 0x50000
  31493. 800d92e: d874 bhi.n 800da1a <HAL_RCCEx_GetPeriphCLKFreq+0x7a2>
  31494. 800d930: 6bbb ldr r3, [r7, #56] @ 0x38
  31495. 800d932: f5b3 2f80 cmp.w r3, #262144 @ 0x40000
  31496. 800d936: d056 beq.n 800d9e6 <HAL_RCCEx_GetPeriphCLKFreq+0x76e>
  31497. 800d938: 6bbb ldr r3, [r7, #56] @ 0x38
  31498. 800d93a: f5b3 2f80 cmp.w r3, #262144 @ 0x40000
  31499. 800d93e: d86c bhi.n 800da1a <HAL_RCCEx_GetPeriphCLKFreq+0x7a2>
  31500. 800d940: 6bbb ldr r3, [r7, #56] @ 0x38
  31501. 800d942: f5b3 3f40 cmp.w r3, #196608 @ 0x30000
  31502. 800d946: d03b beq.n 800d9c0 <HAL_RCCEx_GetPeriphCLKFreq+0x748>
  31503. 800d948: 6bbb ldr r3, [r7, #56] @ 0x38
  31504. 800d94a: f5b3 3f40 cmp.w r3, #196608 @ 0x30000
  31505. 800d94e: d864 bhi.n 800da1a <HAL_RCCEx_GetPeriphCLKFreq+0x7a2>
  31506. 800d950: 6bbb ldr r3, [r7, #56] @ 0x38
  31507. 800d952: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  31508. 800d956: d021 beq.n 800d99c <HAL_RCCEx_GetPeriphCLKFreq+0x724>
  31509. 800d958: 6bbb ldr r3, [r7, #56] @ 0x38
  31510. 800d95a: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  31511. 800d95e: d85c bhi.n 800da1a <HAL_RCCEx_GetPeriphCLKFreq+0x7a2>
  31512. 800d960: 6bbb ldr r3, [r7, #56] @ 0x38
  31513. 800d962: 2b00 cmp r3, #0
  31514. 800d964: d004 beq.n 800d970 <HAL_RCCEx_GetPeriphCLKFreq+0x6f8>
  31515. 800d966: 6bbb ldr r3, [r7, #56] @ 0x38
  31516. 800d968: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  31517. 800d96c: d004 beq.n 800d978 <HAL_RCCEx_GetPeriphCLKFreq+0x700>
  31518. 800d96e: e054 b.n 800da1a <HAL_RCCEx_GetPeriphCLKFreq+0x7a2>
  31519. {
  31520. case RCC_SPI45CLKSOURCE_PCLK2: /* CD/D2 PCLK2 is the clock source for SPI4/5 */
  31521. {
  31522. frequency = HAL_RCC_GetPCLK1Freq();
  31523. 800d970: f7fe fa26 bl 800bdc0 <HAL_RCC_GetPCLK1Freq>
  31524. 800d974: 63f8 str r0, [r7, #60] @ 0x3c
  31525. break;
  31526. 800d976: e1f6 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31527. }
  31528. case RCC_SPI45CLKSOURCE_PLL2: /* PLL2 is the clock source for SPI45 */
  31529. {
  31530. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  31531. 800d978: 4b29 ldr r3, [pc, #164] @ (800da20 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  31532. 800d97a: 681b ldr r3, [r3, #0]
  31533. 800d97c: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  31534. 800d980: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  31535. 800d984: d107 bne.n 800d996 <HAL_RCCEx_GetPeriphCLKFreq+0x71e>
  31536. {
  31537. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  31538. 800d986: f107 0318 add.w r3, r7, #24
  31539. 800d98a: 4618 mov r0, r3
  31540. 800d98c: f000 fa0a bl 800dda4 <HAL_RCCEx_GetPLL2ClockFreq>
  31541. frequency = pll2_clocks.PLL2_Q_Frequency;
  31542. 800d990: 69fb ldr r3, [r7, #28]
  31543. 800d992: 63fb str r3, [r7, #60] @ 0x3c
  31544. }
  31545. else
  31546. {
  31547. frequency = 0;
  31548. }
  31549. break;
  31550. 800d994: e1e7 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31551. frequency = 0;
  31552. 800d996: 2300 movs r3, #0
  31553. 800d998: 63fb str r3, [r7, #60] @ 0x3c
  31554. break;
  31555. 800d99a: e1e4 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31556. }
  31557. case RCC_SPI45CLKSOURCE_PLL3: /* PLL3 is the clock source for SPI45 */
  31558. {
  31559. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
  31560. 800d99c: 4b20 ldr r3, [pc, #128] @ (800da20 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  31561. 800d99e: 681b ldr r3, [r3, #0]
  31562. 800d9a0: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  31563. 800d9a4: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  31564. 800d9a8: d107 bne.n 800d9ba <HAL_RCCEx_GetPeriphCLKFreq+0x742>
  31565. {
  31566. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  31567. 800d9aa: f107 030c add.w r3, r7, #12
  31568. 800d9ae: 4618 mov r0, r3
  31569. 800d9b0: f000 fb4c bl 800e04c <HAL_RCCEx_GetPLL3ClockFreq>
  31570. frequency = pll3_clocks.PLL3_Q_Frequency;
  31571. 800d9b4: 693b ldr r3, [r7, #16]
  31572. 800d9b6: 63fb str r3, [r7, #60] @ 0x3c
  31573. }
  31574. else
  31575. {
  31576. frequency = 0;
  31577. }
  31578. break;
  31579. 800d9b8: e1d5 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31580. frequency = 0;
  31581. 800d9ba: 2300 movs r3, #0
  31582. 800d9bc: 63fb str r3, [r7, #60] @ 0x3c
  31583. break;
  31584. 800d9be: e1d2 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31585. }
  31586. case RCC_SPI45CLKSOURCE_HSI: /* HSI is the clock source for SPI45 */
  31587. {
  31588. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY))
  31589. 800d9c0: 4b17 ldr r3, [pc, #92] @ (800da20 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  31590. 800d9c2: 681b ldr r3, [r3, #0]
  31591. 800d9c4: f003 0304 and.w r3, r3, #4
  31592. 800d9c8: 2b04 cmp r3, #4
  31593. 800d9ca: d109 bne.n 800d9e0 <HAL_RCCEx_GetPeriphCLKFreq+0x768>
  31594. {
  31595. frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  31596. 800d9cc: 4b14 ldr r3, [pc, #80] @ (800da20 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  31597. 800d9ce: 681b ldr r3, [r3, #0]
  31598. 800d9d0: 08db lsrs r3, r3, #3
  31599. 800d9d2: f003 0303 and.w r3, r3, #3
  31600. 800d9d6: 4a13 ldr r2, [pc, #76] @ (800da24 <HAL_RCCEx_GetPeriphCLKFreq+0x7ac>)
  31601. 800d9d8: fa22 f303 lsr.w r3, r2, r3
  31602. 800d9dc: 63fb str r3, [r7, #60] @ 0x3c
  31603. }
  31604. else
  31605. {
  31606. frequency = 0;
  31607. }
  31608. break;
  31609. 800d9de: e1c2 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31610. frequency = 0;
  31611. 800d9e0: 2300 movs r3, #0
  31612. 800d9e2: 63fb str r3, [r7, #60] @ 0x3c
  31613. break;
  31614. 800d9e4: e1bf b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31615. }
  31616. case RCC_SPI45CLKSOURCE_CSI: /* CSI is the clock source for SPI45 */
  31617. {
  31618. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY))
  31619. 800d9e6: 4b0e ldr r3, [pc, #56] @ (800da20 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  31620. 800d9e8: 681b ldr r3, [r3, #0]
  31621. 800d9ea: f403 7380 and.w r3, r3, #256 @ 0x100
  31622. 800d9ee: f5b3 7f80 cmp.w r3, #256 @ 0x100
  31623. 800d9f2: d102 bne.n 800d9fa <HAL_RCCEx_GetPeriphCLKFreq+0x782>
  31624. {
  31625. frequency = CSI_VALUE;
  31626. 800d9f4: 4b0c ldr r3, [pc, #48] @ (800da28 <HAL_RCCEx_GetPeriphCLKFreq+0x7b0>)
  31627. 800d9f6: 63fb str r3, [r7, #60] @ 0x3c
  31628. }
  31629. else
  31630. {
  31631. frequency = 0;
  31632. }
  31633. break;
  31634. 800d9f8: e1b5 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31635. frequency = 0;
  31636. 800d9fa: 2300 movs r3, #0
  31637. 800d9fc: 63fb str r3, [r7, #60] @ 0x3c
  31638. break;
  31639. 800d9fe: e1b2 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31640. }
  31641. case RCC_SPI45CLKSOURCE_HSE: /* HSE is the clock source for SPI45 */
  31642. {
  31643. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY))
  31644. 800da00: 4b07 ldr r3, [pc, #28] @ (800da20 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  31645. 800da02: 681b ldr r3, [r3, #0]
  31646. 800da04: f403 3300 and.w r3, r3, #131072 @ 0x20000
  31647. 800da08: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  31648. 800da0c: d102 bne.n 800da14 <HAL_RCCEx_GetPeriphCLKFreq+0x79c>
  31649. {
  31650. frequency = HSE_VALUE;
  31651. 800da0e: 4b07 ldr r3, [pc, #28] @ (800da2c <HAL_RCCEx_GetPeriphCLKFreq+0x7b4>)
  31652. 800da10: 63fb str r3, [r7, #60] @ 0x3c
  31653. }
  31654. else
  31655. {
  31656. frequency = 0;
  31657. }
  31658. break;
  31659. 800da12: e1a8 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31660. frequency = 0;
  31661. 800da14: 2300 movs r3, #0
  31662. 800da16: 63fb str r3, [r7, #60] @ 0x3c
  31663. break;
  31664. 800da18: e1a5 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31665. }
  31666. default :
  31667. {
  31668. frequency = 0;
  31669. 800da1a: 2300 movs r3, #0
  31670. 800da1c: 63fb str r3, [r7, #60] @ 0x3c
  31671. break;
  31672. 800da1e: e1a2 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31673. 800da20: 58024400 .word 0x58024400
  31674. 800da24: 03d09000 .word 0x03d09000
  31675. 800da28: 003d0900 .word 0x003d0900
  31676. 800da2c: 017d7840 .word 0x017d7840
  31677. 800da30: 00bb8000 .word 0x00bb8000
  31678. }
  31679. }
  31680. }
  31681. else if (PeriphClk == RCC_PERIPHCLK_ADC)
  31682. 800da34: e9d7 2300 ldrd r2, r3, [r7]
  31683. 800da38: f5a2 2100 sub.w r1, r2, #524288 @ 0x80000
  31684. 800da3c: 430b orrs r3, r1
  31685. 800da3e: d173 bne.n 800db28 <HAL_RCCEx_GetPeriphCLKFreq+0x8b0>
  31686. {
  31687. /* Get ADC clock source */
  31688. srcclk = __HAL_RCC_GET_ADC_SOURCE();
  31689. 800da40: 4b9c ldr r3, [pc, #624] @ (800dcb4 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  31690. 800da42: 6d9b ldr r3, [r3, #88] @ 0x58
  31691. 800da44: f403 3340 and.w r3, r3, #196608 @ 0x30000
  31692. 800da48: 63bb str r3, [r7, #56] @ 0x38
  31693. switch (srcclk)
  31694. 800da4a: 6bbb ldr r3, [r7, #56] @ 0x38
  31695. 800da4c: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  31696. 800da50: d02f beq.n 800dab2 <HAL_RCCEx_GetPeriphCLKFreq+0x83a>
  31697. 800da52: 6bbb ldr r3, [r7, #56] @ 0x38
  31698. 800da54: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  31699. 800da58: d863 bhi.n 800db22 <HAL_RCCEx_GetPeriphCLKFreq+0x8aa>
  31700. 800da5a: 6bbb ldr r3, [r7, #56] @ 0x38
  31701. 800da5c: 2b00 cmp r3, #0
  31702. 800da5e: d004 beq.n 800da6a <HAL_RCCEx_GetPeriphCLKFreq+0x7f2>
  31703. 800da60: 6bbb ldr r3, [r7, #56] @ 0x38
  31704. 800da62: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  31705. 800da66: d012 beq.n 800da8e <HAL_RCCEx_GetPeriphCLKFreq+0x816>
  31706. 800da68: e05b b.n 800db22 <HAL_RCCEx_GetPeriphCLKFreq+0x8aa>
  31707. {
  31708. case RCC_ADCCLKSOURCE_PLL2:
  31709. {
  31710. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  31711. 800da6a: 4b92 ldr r3, [pc, #584] @ (800dcb4 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  31712. 800da6c: 681b ldr r3, [r3, #0]
  31713. 800da6e: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  31714. 800da72: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  31715. 800da76: d107 bne.n 800da88 <HAL_RCCEx_GetPeriphCLKFreq+0x810>
  31716. {
  31717. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  31718. 800da78: f107 0318 add.w r3, r7, #24
  31719. 800da7c: 4618 mov r0, r3
  31720. 800da7e: f000 f991 bl 800dda4 <HAL_RCCEx_GetPLL2ClockFreq>
  31721. frequency = pll2_clocks.PLL2_P_Frequency;
  31722. 800da82: 69bb ldr r3, [r7, #24]
  31723. 800da84: 63fb str r3, [r7, #60] @ 0x3c
  31724. }
  31725. else
  31726. {
  31727. frequency = 0;
  31728. }
  31729. break;
  31730. 800da86: e16e b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31731. frequency = 0;
  31732. 800da88: 2300 movs r3, #0
  31733. 800da8a: 63fb str r3, [r7, #60] @ 0x3c
  31734. break;
  31735. 800da8c: e16b b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31736. }
  31737. case RCC_ADCCLKSOURCE_PLL3:
  31738. {
  31739. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
  31740. 800da8e: 4b89 ldr r3, [pc, #548] @ (800dcb4 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  31741. 800da90: 681b ldr r3, [r3, #0]
  31742. 800da92: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  31743. 800da96: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  31744. 800da9a: d107 bne.n 800daac <HAL_RCCEx_GetPeriphCLKFreq+0x834>
  31745. {
  31746. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  31747. 800da9c: f107 030c add.w r3, r7, #12
  31748. 800daa0: 4618 mov r0, r3
  31749. 800daa2: f000 fad3 bl 800e04c <HAL_RCCEx_GetPLL3ClockFreq>
  31750. frequency = pll3_clocks.PLL3_R_Frequency;
  31751. 800daa6: 697b ldr r3, [r7, #20]
  31752. 800daa8: 63fb str r3, [r7, #60] @ 0x3c
  31753. }
  31754. else
  31755. {
  31756. frequency = 0;
  31757. }
  31758. break;
  31759. 800daaa: e15c b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31760. frequency = 0;
  31761. 800daac: 2300 movs r3, #0
  31762. 800daae: 63fb str r3, [r7, #60] @ 0x3c
  31763. break;
  31764. 800dab0: e159 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31765. }
  31766. case RCC_ADCCLKSOURCE_CLKP:
  31767. {
  31768. ckpclocksource = __HAL_RCC_GET_CLKP_SOURCE();
  31769. 800dab2: 4b80 ldr r3, [pc, #512] @ (800dcb4 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  31770. 800dab4: 6cdb ldr r3, [r3, #76] @ 0x4c
  31771. 800dab6: f003 5340 and.w r3, r3, #805306368 @ 0x30000000
  31772. 800daba: 637b str r3, [r7, #52] @ 0x34
  31773. if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSI))
  31774. 800dabc: 4b7d ldr r3, [pc, #500] @ (800dcb4 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  31775. 800dabe: 681b ldr r3, [r3, #0]
  31776. 800dac0: f003 0304 and.w r3, r3, #4
  31777. 800dac4: 2b04 cmp r3, #4
  31778. 800dac6: d10c bne.n 800dae2 <HAL_RCCEx_GetPeriphCLKFreq+0x86a>
  31779. 800dac8: 6b7b ldr r3, [r7, #52] @ 0x34
  31780. 800daca: 2b00 cmp r3, #0
  31781. 800dacc: d109 bne.n 800dae2 <HAL_RCCEx_GetPeriphCLKFreq+0x86a>
  31782. {
  31783. /* In Case the CKPER Source is HSI */
  31784. frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  31785. 800dace: 4b79 ldr r3, [pc, #484] @ (800dcb4 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  31786. 800dad0: 681b ldr r3, [r3, #0]
  31787. 800dad2: 08db lsrs r3, r3, #3
  31788. 800dad4: f003 0303 and.w r3, r3, #3
  31789. 800dad8: 4a77 ldr r2, [pc, #476] @ (800dcb8 <HAL_RCCEx_GetPeriphCLKFreq+0xa40>)
  31790. 800dada: fa22 f303 lsr.w r3, r2, r3
  31791. 800dade: 63fb str r3, [r7, #60] @ 0x3c
  31792. 800dae0: e01e b.n 800db20 <HAL_RCCEx_GetPeriphCLKFreq+0x8a8>
  31793. }
  31794. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_CSI))
  31795. 800dae2: 4b74 ldr r3, [pc, #464] @ (800dcb4 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  31796. 800dae4: 681b ldr r3, [r3, #0]
  31797. 800dae6: f403 7380 and.w r3, r3, #256 @ 0x100
  31798. 800daea: f5b3 7f80 cmp.w r3, #256 @ 0x100
  31799. 800daee: d106 bne.n 800dafe <HAL_RCCEx_GetPeriphCLKFreq+0x886>
  31800. 800daf0: 6b7b ldr r3, [r7, #52] @ 0x34
  31801. 800daf2: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  31802. 800daf6: d102 bne.n 800dafe <HAL_RCCEx_GetPeriphCLKFreq+0x886>
  31803. {
  31804. /* In Case the CKPER Source is CSI */
  31805. frequency = CSI_VALUE;
  31806. 800daf8: 4b70 ldr r3, [pc, #448] @ (800dcbc <HAL_RCCEx_GetPeriphCLKFreq+0xa44>)
  31807. 800dafa: 63fb str r3, [r7, #60] @ 0x3c
  31808. 800dafc: e010 b.n 800db20 <HAL_RCCEx_GetPeriphCLKFreq+0x8a8>
  31809. }
  31810. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSE))
  31811. 800dafe: 4b6d ldr r3, [pc, #436] @ (800dcb4 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  31812. 800db00: 681b ldr r3, [r3, #0]
  31813. 800db02: f403 3300 and.w r3, r3, #131072 @ 0x20000
  31814. 800db06: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  31815. 800db0a: d106 bne.n 800db1a <HAL_RCCEx_GetPeriphCLKFreq+0x8a2>
  31816. 800db0c: 6b7b ldr r3, [r7, #52] @ 0x34
  31817. 800db0e: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  31818. 800db12: d102 bne.n 800db1a <HAL_RCCEx_GetPeriphCLKFreq+0x8a2>
  31819. {
  31820. /* In Case the CKPER Source is HSE */
  31821. frequency = HSE_VALUE;
  31822. 800db14: 4b6a ldr r3, [pc, #424] @ (800dcc0 <HAL_RCCEx_GetPeriphCLKFreq+0xa48>)
  31823. 800db16: 63fb str r3, [r7, #60] @ 0x3c
  31824. 800db18: e002 b.n 800db20 <HAL_RCCEx_GetPeriphCLKFreq+0x8a8>
  31825. }
  31826. else
  31827. {
  31828. /* In Case the CKPER is disabled*/
  31829. frequency = 0;
  31830. 800db1a: 2300 movs r3, #0
  31831. 800db1c: 63fb str r3, [r7, #60] @ 0x3c
  31832. }
  31833. break;
  31834. 800db1e: e122 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31835. 800db20: e121 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31836. }
  31837. default :
  31838. {
  31839. frequency = 0;
  31840. 800db22: 2300 movs r3, #0
  31841. 800db24: 63fb str r3, [r7, #60] @ 0x3c
  31842. break;
  31843. 800db26: e11e b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31844. }
  31845. }
  31846. }
  31847. else if (PeriphClk == RCC_PERIPHCLK_SDMMC)
  31848. 800db28: e9d7 2300 ldrd r2, r3, [r7]
  31849. 800db2c: f5a2 3180 sub.w r1, r2, #65536 @ 0x10000
  31850. 800db30: 430b orrs r3, r1
  31851. 800db32: d133 bne.n 800db9c <HAL_RCCEx_GetPeriphCLKFreq+0x924>
  31852. {
  31853. /* Get SDMMC clock source */
  31854. srcclk = __HAL_RCC_GET_SDMMC_SOURCE();
  31855. 800db34: 4b5f ldr r3, [pc, #380] @ (800dcb4 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  31856. 800db36: 6cdb ldr r3, [r3, #76] @ 0x4c
  31857. 800db38: f403 3380 and.w r3, r3, #65536 @ 0x10000
  31858. 800db3c: 63bb str r3, [r7, #56] @ 0x38
  31859. switch (srcclk)
  31860. 800db3e: 6bbb ldr r3, [r7, #56] @ 0x38
  31861. 800db40: 2b00 cmp r3, #0
  31862. 800db42: d004 beq.n 800db4e <HAL_RCCEx_GetPeriphCLKFreq+0x8d6>
  31863. 800db44: 6bbb ldr r3, [r7, #56] @ 0x38
  31864. 800db46: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  31865. 800db4a: d012 beq.n 800db72 <HAL_RCCEx_GetPeriphCLKFreq+0x8fa>
  31866. 800db4c: e023 b.n 800db96 <HAL_RCCEx_GetPeriphCLKFreq+0x91e>
  31867. {
  31868. case RCC_SDMMCCLKSOURCE_PLL: /* PLL1 is the clock source for SDMMC */
  31869. {
  31870. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
  31871. 800db4e: 4b59 ldr r3, [pc, #356] @ (800dcb4 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  31872. 800db50: 681b ldr r3, [r3, #0]
  31873. 800db52: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  31874. 800db56: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  31875. 800db5a: d107 bne.n 800db6c <HAL_RCCEx_GetPeriphCLKFreq+0x8f4>
  31876. {
  31877. HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
  31878. 800db5c: f107 0324 add.w r3, r7, #36 @ 0x24
  31879. 800db60: 4618 mov r0, r3
  31880. 800db62: f000 fbc7 bl 800e2f4 <HAL_RCCEx_GetPLL1ClockFreq>
  31881. frequency = pll1_clocks.PLL1_Q_Frequency;
  31882. 800db66: 6abb ldr r3, [r7, #40] @ 0x28
  31883. 800db68: 63fb str r3, [r7, #60] @ 0x3c
  31884. }
  31885. else
  31886. {
  31887. frequency = 0;
  31888. }
  31889. break;
  31890. 800db6a: e0fc b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31891. frequency = 0;
  31892. 800db6c: 2300 movs r3, #0
  31893. 800db6e: 63fb str r3, [r7, #60] @ 0x3c
  31894. break;
  31895. 800db70: e0f9 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31896. }
  31897. case RCC_SDMMCCLKSOURCE_PLL2: /* PLL2 is the clock source for SDMMC */
  31898. {
  31899. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  31900. 800db72: 4b50 ldr r3, [pc, #320] @ (800dcb4 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  31901. 800db74: 681b ldr r3, [r3, #0]
  31902. 800db76: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  31903. 800db7a: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  31904. 800db7e: d107 bne.n 800db90 <HAL_RCCEx_GetPeriphCLKFreq+0x918>
  31905. {
  31906. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  31907. 800db80: f107 0318 add.w r3, r7, #24
  31908. 800db84: 4618 mov r0, r3
  31909. 800db86: f000 f90d bl 800dda4 <HAL_RCCEx_GetPLL2ClockFreq>
  31910. frequency = pll2_clocks.PLL2_R_Frequency;
  31911. 800db8a: 6a3b ldr r3, [r7, #32]
  31912. 800db8c: 63fb str r3, [r7, #60] @ 0x3c
  31913. }
  31914. else
  31915. {
  31916. frequency = 0;
  31917. }
  31918. break;
  31919. 800db8e: e0ea b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31920. frequency = 0;
  31921. 800db90: 2300 movs r3, #0
  31922. 800db92: 63fb str r3, [r7, #60] @ 0x3c
  31923. break;
  31924. 800db94: e0e7 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31925. }
  31926. default :
  31927. {
  31928. frequency = 0;
  31929. 800db96: 2300 movs r3, #0
  31930. 800db98: 63fb str r3, [r7, #60] @ 0x3c
  31931. break;
  31932. 800db9a: e0e4 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31933. }
  31934. }
  31935. }
  31936. else if (PeriphClk == RCC_PERIPHCLK_SPI6)
  31937. 800db9c: e9d7 2300 ldrd r2, r3, [r7]
  31938. 800dba0: f5a2 4180 sub.w r1, r2, #16384 @ 0x4000
  31939. 800dba4: 430b orrs r3, r1
  31940. 800dba6: f040 808d bne.w 800dcc4 <HAL_RCCEx_GetPeriphCLKFreq+0xa4c>
  31941. {
  31942. /* Get SPI6 clock source */
  31943. srcclk = __HAL_RCC_GET_SPI6_SOURCE();
  31944. 800dbaa: 4b42 ldr r3, [pc, #264] @ (800dcb4 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  31945. 800dbac: 6d9b ldr r3, [r3, #88] @ 0x58
  31946. 800dbae: f003 43e0 and.w r3, r3, #1879048192 @ 0x70000000
  31947. 800dbb2: 63bb str r3, [r7, #56] @ 0x38
  31948. switch (srcclk)
  31949. 800dbb4: 6bbb ldr r3, [r7, #56] @ 0x38
  31950. 800dbb6: f1b3 4fa0 cmp.w r3, #1342177280 @ 0x50000000
  31951. 800dbba: d06b beq.n 800dc94 <HAL_RCCEx_GetPeriphCLKFreq+0xa1c>
  31952. 800dbbc: 6bbb ldr r3, [r7, #56] @ 0x38
  31953. 800dbbe: f1b3 4fa0 cmp.w r3, #1342177280 @ 0x50000000
  31954. 800dbc2: d874 bhi.n 800dcae <HAL_RCCEx_GetPeriphCLKFreq+0xa36>
  31955. 800dbc4: 6bbb ldr r3, [r7, #56] @ 0x38
  31956. 800dbc6: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  31957. 800dbca: d056 beq.n 800dc7a <HAL_RCCEx_GetPeriphCLKFreq+0xa02>
  31958. 800dbcc: 6bbb ldr r3, [r7, #56] @ 0x38
  31959. 800dbce: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  31960. 800dbd2: d86c bhi.n 800dcae <HAL_RCCEx_GetPeriphCLKFreq+0xa36>
  31961. 800dbd4: 6bbb ldr r3, [r7, #56] @ 0x38
  31962. 800dbd6: f1b3 5f40 cmp.w r3, #805306368 @ 0x30000000
  31963. 800dbda: d03b beq.n 800dc54 <HAL_RCCEx_GetPeriphCLKFreq+0x9dc>
  31964. 800dbdc: 6bbb ldr r3, [r7, #56] @ 0x38
  31965. 800dbde: f1b3 5f40 cmp.w r3, #805306368 @ 0x30000000
  31966. 800dbe2: d864 bhi.n 800dcae <HAL_RCCEx_GetPeriphCLKFreq+0xa36>
  31967. 800dbe4: 6bbb ldr r3, [r7, #56] @ 0x38
  31968. 800dbe6: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  31969. 800dbea: d021 beq.n 800dc30 <HAL_RCCEx_GetPeriphCLKFreq+0x9b8>
  31970. 800dbec: 6bbb ldr r3, [r7, #56] @ 0x38
  31971. 800dbee: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  31972. 800dbf2: d85c bhi.n 800dcae <HAL_RCCEx_GetPeriphCLKFreq+0xa36>
  31973. 800dbf4: 6bbb ldr r3, [r7, #56] @ 0x38
  31974. 800dbf6: 2b00 cmp r3, #0
  31975. 800dbf8: d004 beq.n 800dc04 <HAL_RCCEx_GetPeriphCLKFreq+0x98c>
  31976. 800dbfa: 6bbb ldr r3, [r7, #56] @ 0x38
  31977. 800dbfc: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  31978. 800dc00: d004 beq.n 800dc0c <HAL_RCCEx_GetPeriphCLKFreq+0x994>
  31979. 800dc02: e054 b.n 800dcae <HAL_RCCEx_GetPeriphCLKFreq+0xa36>
  31980. {
  31981. case RCC_SPI6CLKSOURCE_D3PCLK1: /* D3PCLK1 (PCLK4) is the clock source for SPI6 */
  31982. {
  31983. frequency = HAL_RCCEx_GetD3PCLK1Freq();
  31984. 800dc04: f000 f8b8 bl 800dd78 <HAL_RCCEx_GetD3PCLK1Freq>
  31985. 800dc08: 63f8 str r0, [r7, #60] @ 0x3c
  31986. break;
  31987. 800dc0a: e0ac b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31988. }
  31989. case RCC_SPI6CLKSOURCE_PLL2: /* PLL2 is the clock source for SPI6 */
  31990. {
  31991. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  31992. 800dc0c: 4b29 ldr r3, [pc, #164] @ (800dcb4 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  31993. 800dc0e: 681b ldr r3, [r3, #0]
  31994. 800dc10: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  31995. 800dc14: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  31996. 800dc18: d107 bne.n 800dc2a <HAL_RCCEx_GetPeriphCLKFreq+0x9b2>
  31997. {
  31998. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  31999. 800dc1a: f107 0318 add.w r3, r7, #24
  32000. 800dc1e: 4618 mov r0, r3
  32001. 800dc20: f000 f8c0 bl 800dda4 <HAL_RCCEx_GetPLL2ClockFreq>
  32002. frequency = pll2_clocks.PLL2_Q_Frequency;
  32003. 800dc24: 69fb ldr r3, [r7, #28]
  32004. 800dc26: 63fb str r3, [r7, #60] @ 0x3c
  32005. }
  32006. else
  32007. {
  32008. frequency = 0;
  32009. }
  32010. break;
  32011. 800dc28: e09d b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32012. frequency = 0;
  32013. 800dc2a: 2300 movs r3, #0
  32014. 800dc2c: 63fb str r3, [r7, #60] @ 0x3c
  32015. break;
  32016. 800dc2e: e09a b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32017. }
  32018. case RCC_SPI6CLKSOURCE_PLL3: /* PLL3 is the clock source for SPI6 */
  32019. {
  32020. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
  32021. 800dc30: 4b20 ldr r3, [pc, #128] @ (800dcb4 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  32022. 800dc32: 681b ldr r3, [r3, #0]
  32023. 800dc34: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  32024. 800dc38: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  32025. 800dc3c: d107 bne.n 800dc4e <HAL_RCCEx_GetPeriphCLKFreq+0x9d6>
  32026. {
  32027. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  32028. 800dc3e: f107 030c add.w r3, r7, #12
  32029. 800dc42: 4618 mov r0, r3
  32030. 800dc44: f000 fa02 bl 800e04c <HAL_RCCEx_GetPLL3ClockFreq>
  32031. frequency = pll3_clocks.PLL3_Q_Frequency;
  32032. 800dc48: 693b ldr r3, [r7, #16]
  32033. 800dc4a: 63fb str r3, [r7, #60] @ 0x3c
  32034. }
  32035. else
  32036. {
  32037. frequency = 0;
  32038. }
  32039. break;
  32040. 800dc4c: e08b b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32041. frequency = 0;
  32042. 800dc4e: 2300 movs r3, #0
  32043. 800dc50: 63fb str r3, [r7, #60] @ 0x3c
  32044. break;
  32045. 800dc52: e088 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32046. }
  32047. case RCC_SPI6CLKSOURCE_HSI: /* HSI is the clock source for SPI6 */
  32048. {
  32049. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY))
  32050. 800dc54: 4b17 ldr r3, [pc, #92] @ (800dcb4 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  32051. 800dc56: 681b ldr r3, [r3, #0]
  32052. 800dc58: f003 0304 and.w r3, r3, #4
  32053. 800dc5c: 2b04 cmp r3, #4
  32054. 800dc5e: d109 bne.n 800dc74 <HAL_RCCEx_GetPeriphCLKFreq+0x9fc>
  32055. {
  32056. frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  32057. 800dc60: 4b14 ldr r3, [pc, #80] @ (800dcb4 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  32058. 800dc62: 681b ldr r3, [r3, #0]
  32059. 800dc64: 08db lsrs r3, r3, #3
  32060. 800dc66: f003 0303 and.w r3, r3, #3
  32061. 800dc6a: 4a13 ldr r2, [pc, #76] @ (800dcb8 <HAL_RCCEx_GetPeriphCLKFreq+0xa40>)
  32062. 800dc6c: fa22 f303 lsr.w r3, r2, r3
  32063. 800dc70: 63fb str r3, [r7, #60] @ 0x3c
  32064. }
  32065. else
  32066. {
  32067. frequency = 0;
  32068. }
  32069. break;
  32070. 800dc72: e078 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32071. frequency = 0;
  32072. 800dc74: 2300 movs r3, #0
  32073. 800dc76: 63fb str r3, [r7, #60] @ 0x3c
  32074. break;
  32075. 800dc78: e075 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32076. }
  32077. case RCC_SPI6CLKSOURCE_CSI: /* CSI is the clock source for SPI6 */
  32078. {
  32079. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY))
  32080. 800dc7a: 4b0e ldr r3, [pc, #56] @ (800dcb4 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  32081. 800dc7c: 681b ldr r3, [r3, #0]
  32082. 800dc7e: f403 7380 and.w r3, r3, #256 @ 0x100
  32083. 800dc82: f5b3 7f80 cmp.w r3, #256 @ 0x100
  32084. 800dc86: d102 bne.n 800dc8e <HAL_RCCEx_GetPeriphCLKFreq+0xa16>
  32085. {
  32086. frequency = CSI_VALUE;
  32087. 800dc88: 4b0c ldr r3, [pc, #48] @ (800dcbc <HAL_RCCEx_GetPeriphCLKFreq+0xa44>)
  32088. 800dc8a: 63fb str r3, [r7, #60] @ 0x3c
  32089. }
  32090. else
  32091. {
  32092. frequency = 0;
  32093. }
  32094. break;
  32095. 800dc8c: e06b b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32096. frequency = 0;
  32097. 800dc8e: 2300 movs r3, #0
  32098. 800dc90: 63fb str r3, [r7, #60] @ 0x3c
  32099. break;
  32100. 800dc92: e068 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32101. }
  32102. case RCC_SPI6CLKSOURCE_HSE: /* HSE is the clock source for SPI6 */
  32103. {
  32104. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY))
  32105. 800dc94: 4b07 ldr r3, [pc, #28] @ (800dcb4 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  32106. 800dc96: 681b ldr r3, [r3, #0]
  32107. 800dc98: f403 3300 and.w r3, r3, #131072 @ 0x20000
  32108. 800dc9c: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  32109. 800dca0: d102 bne.n 800dca8 <HAL_RCCEx_GetPeriphCLKFreq+0xa30>
  32110. {
  32111. frequency = HSE_VALUE;
  32112. 800dca2: 4b07 ldr r3, [pc, #28] @ (800dcc0 <HAL_RCCEx_GetPeriphCLKFreq+0xa48>)
  32113. 800dca4: 63fb str r3, [r7, #60] @ 0x3c
  32114. }
  32115. else
  32116. {
  32117. frequency = 0;
  32118. }
  32119. break;
  32120. 800dca6: e05e b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32121. frequency = 0;
  32122. 800dca8: 2300 movs r3, #0
  32123. 800dcaa: 63fb str r3, [r7, #60] @ 0x3c
  32124. break;
  32125. 800dcac: e05b b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32126. break;
  32127. }
  32128. #endif /* RCC_SPI6CLKSOURCE_PIN */
  32129. default :
  32130. {
  32131. frequency = 0;
  32132. 800dcae: 2300 movs r3, #0
  32133. 800dcb0: 63fb str r3, [r7, #60] @ 0x3c
  32134. break;
  32135. 800dcb2: e058 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32136. 800dcb4: 58024400 .word 0x58024400
  32137. 800dcb8: 03d09000 .word 0x03d09000
  32138. 800dcbc: 003d0900 .word 0x003d0900
  32139. 800dcc0: 017d7840 .word 0x017d7840
  32140. }
  32141. }
  32142. }
  32143. else if (PeriphClk == RCC_PERIPHCLK_FDCAN)
  32144. 800dcc4: e9d7 2300 ldrd r2, r3, [r7]
  32145. 800dcc8: f5a2 4100 sub.w r1, r2, #32768 @ 0x8000
  32146. 800dccc: 430b orrs r3, r1
  32147. 800dcce: d148 bne.n 800dd62 <HAL_RCCEx_GetPeriphCLKFreq+0xaea>
  32148. {
  32149. /* Get FDCAN clock source */
  32150. srcclk = __HAL_RCC_GET_FDCAN_SOURCE();
  32151. 800dcd0: 4b27 ldr r3, [pc, #156] @ (800dd70 <HAL_RCCEx_GetPeriphCLKFreq+0xaf8>)
  32152. 800dcd2: 6d1b ldr r3, [r3, #80] @ 0x50
  32153. 800dcd4: f003 5340 and.w r3, r3, #805306368 @ 0x30000000
  32154. 800dcd8: 63bb str r3, [r7, #56] @ 0x38
  32155. switch (srcclk)
  32156. 800dcda: 6bbb ldr r3, [r7, #56] @ 0x38
  32157. 800dcdc: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  32158. 800dce0: d02a beq.n 800dd38 <HAL_RCCEx_GetPeriphCLKFreq+0xac0>
  32159. 800dce2: 6bbb ldr r3, [r7, #56] @ 0x38
  32160. 800dce4: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  32161. 800dce8: d838 bhi.n 800dd5c <HAL_RCCEx_GetPeriphCLKFreq+0xae4>
  32162. 800dcea: 6bbb ldr r3, [r7, #56] @ 0x38
  32163. 800dcec: 2b00 cmp r3, #0
  32164. 800dcee: d004 beq.n 800dcfa <HAL_RCCEx_GetPeriphCLKFreq+0xa82>
  32165. 800dcf0: 6bbb ldr r3, [r7, #56] @ 0x38
  32166. 800dcf2: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  32167. 800dcf6: d00d beq.n 800dd14 <HAL_RCCEx_GetPeriphCLKFreq+0xa9c>
  32168. 800dcf8: e030 b.n 800dd5c <HAL_RCCEx_GetPeriphCLKFreq+0xae4>
  32169. {
  32170. case RCC_FDCANCLKSOURCE_HSE: /* HSE is the clock source for FDCAN */
  32171. {
  32172. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY))
  32173. 800dcfa: 4b1d ldr r3, [pc, #116] @ (800dd70 <HAL_RCCEx_GetPeriphCLKFreq+0xaf8>)
  32174. 800dcfc: 681b ldr r3, [r3, #0]
  32175. 800dcfe: f403 3300 and.w r3, r3, #131072 @ 0x20000
  32176. 800dd02: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  32177. 800dd06: d102 bne.n 800dd0e <HAL_RCCEx_GetPeriphCLKFreq+0xa96>
  32178. {
  32179. frequency = HSE_VALUE;
  32180. 800dd08: 4b1a ldr r3, [pc, #104] @ (800dd74 <HAL_RCCEx_GetPeriphCLKFreq+0xafc>)
  32181. 800dd0a: 63fb str r3, [r7, #60] @ 0x3c
  32182. }
  32183. else
  32184. {
  32185. frequency = 0;
  32186. }
  32187. break;
  32188. 800dd0c: e02b b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32189. frequency = 0;
  32190. 800dd0e: 2300 movs r3, #0
  32191. 800dd10: 63fb str r3, [r7, #60] @ 0x3c
  32192. break;
  32193. 800dd12: e028 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32194. }
  32195. case RCC_FDCANCLKSOURCE_PLL: /* PLL is the clock source for FDCAN */
  32196. {
  32197. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
  32198. 800dd14: 4b16 ldr r3, [pc, #88] @ (800dd70 <HAL_RCCEx_GetPeriphCLKFreq+0xaf8>)
  32199. 800dd16: 681b ldr r3, [r3, #0]
  32200. 800dd18: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  32201. 800dd1c: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  32202. 800dd20: d107 bne.n 800dd32 <HAL_RCCEx_GetPeriphCLKFreq+0xaba>
  32203. {
  32204. HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
  32205. 800dd22: f107 0324 add.w r3, r7, #36 @ 0x24
  32206. 800dd26: 4618 mov r0, r3
  32207. 800dd28: f000 fae4 bl 800e2f4 <HAL_RCCEx_GetPLL1ClockFreq>
  32208. frequency = pll1_clocks.PLL1_Q_Frequency;
  32209. 800dd2c: 6abb ldr r3, [r7, #40] @ 0x28
  32210. 800dd2e: 63fb str r3, [r7, #60] @ 0x3c
  32211. }
  32212. else
  32213. {
  32214. frequency = 0;
  32215. }
  32216. break;
  32217. 800dd30: e019 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32218. frequency = 0;
  32219. 800dd32: 2300 movs r3, #0
  32220. 800dd34: 63fb str r3, [r7, #60] @ 0x3c
  32221. break;
  32222. 800dd36: e016 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32223. }
  32224. case RCC_FDCANCLKSOURCE_PLL2: /* PLL2 is the clock source for FDCAN */
  32225. {
  32226. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  32227. 800dd38: 4b0d ldr r3, [pc, #52] @ (800dd70 <HAL_RCCEx_GetPeriphCLKFreq+0xaf8>)
  32228. 800dd3a: 681b ldr r3, [r3, #0]
  32229. 800dd3c: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  32230. 800dd40: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  32231. 800dd44: d107 bne.n 800dd56 <HAL_RCCEx_GetPeriphCLKFreq+0xade>
  32232. {
  32233. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  32234. 800dd46: f107 0318 add.w r3, r7, #24
  32235. 800dd4a: 4618 mov r0, r3
  32236. 800dd4c: f000 f82a bl 800dda4 <HAL_RCCEx_GetPLL2ClockFreq>
  32237. frequency = pll2_clocks.PLL2_Q_Frequency;
  32238. 800dd50: 69fb ldr r3, [r7, #28]
  32239. 800dd52: 63fb str r3, [r7, #60] @ 0x3c
  32240. }
  32241. else
  32242. {
  32243. frequency = 0;
  32244. }
  32245. break;
  32246. 800dd54: e007 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32247. frequency = 0;
  32248. 800dd56: 2300 movs r3, #0
  32249. 800dd58: 63fb str r3, [r7, #60] @ 0x3c
  32250. break;
  32251. 800dd5a: e004 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32252. }
  32253. default :
  32254. {
  32255. frequency = 0;
  32256. 800dd5c: 2300 movs r3, #0
  32257. 800dd5e: 63fb str r3, [r7, #60] @ 0x3c
  32258. break;
  32259. 800dd60: e001 b.n 800dd66 <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32260. }
  32261. }
  32262. }
  32263. else
  32264. {
  32265. frequency = 0;
  32266. 800dd62: 2300 movs r3, #0
  32267. 800dd64: 63fb str r3, [r7, #60] @ 0x3c
  32268. }
  32269. return frequency;
  32270. 800dd66: 6bfb ldr r3, [r7, #60] @ 0x3c
  32271. }
  32272. 800dd68: 4618 mov r0, r3
  32273. 800dd6a: 3740 adds r7, #64 @ 0x40
  32274. 800dd6c: 46bd mov sp, r7
  32275. 800dd6e: bd80 pop {r7, pc}
  32276. 800dd70: 58024400 .word 0x58024400
  32277. 800dd74: 017d7840 .word 0x017d7840
  32278. 0800dd78 <HAL_RCCEx_GetD3PCLK1Freq>:
  32279. * @note Each time D3PCLK1 changes, this function must be called to update the
  32280. * right D3PCLK1 value. Otherwise, any configuration based on this function will be incorrect.
  32281. * @retval D3PCLK1 frequency
  32282. */
  32283. uint32_t HAL_RCCEx_GetD3PCLK1Freq(void)
  32284. {
  32285. 800dd78: b580 push {r7, lr}
  32286. 800dd7a: af00 add r7, sp, #0
  32287. #if defined(RCC_D3CFGR_D3PPRE)
  32288. /* Get HCLK source and Compute D3PCLK1 frequency ---------------------------*/
  32289. return (HAL_RCC_GetHCLKFreq() >> (D1CorePrescTable[(RCC->D3CFGR & RCC_D3CFGR_D3PPRE) >> RCC_D3CFGR_D3PPRE_Pos] & 0x1FU));
  32290. 800dd7c: f7fd fff0 bl 800bd60 <HAL_RCC_GetHCLKFreq>
  32291. 800dd80: 4602 mov r2, r0
  32292. 800dd82: 4b06 ldr r3, [pc, #24] @ (800dd9c <HAL_RCCEx_GetD3PCLK1Freq+0x24>)
  32293. 800dd84: 6a1b ldr r3, [r3, #32]
  32294. 800dd86: 091b lsrs r3, r3, #4
  32295. 800dd88: f003 0307 and.w r3, r3, #7
  32296. 800dd8c: 4904 ldr r1, [pc, #16] @ (800dda0 <HAL_RCCEx_GetD3PCLK1Freq+0x28>)
  32297. 800dd8e: 5ccb ldrb r3, [r1, r3]
  32298. 800dd90: f003 031f and.w r3, r3, #31
  32299. 800dd94: fa22 f303 lsr.w r3, r2, r3
  32300. #else
  32301. /* Get HCLK source and Compute D3PCLK1 frequency ---------------------------*/
  32302. return (HAL_RCC_GetHCLKFreq() >> (D1CorePrescTable[(RCC->SRDCFGR & RCC_SRDCFGR_SRDPPRE) >> RCC_SRDCFGR_SRDPPRE_Pos] & 0x1FU));
  32303. #endif
  32304. }
  32305. 800dd98: 4618 mov r0, r3
  32306. 800dd9a: bd80 pop {r7, pc}
  32307. 800dd9c: 58024400 .word 0x58024400
  32308. 800dda0: 080189c8 .word 0x080189c8
  32309. 0800dda4 <HAL_RCCEx_GetPLL2ClockFreq>:
  32310. * right PLL2CLK value. Otherwise, any configuration based on this function will be incorrect.
  32311. * @param PLL2_Clocks structure.
  32312. * @retval None
  32313. */
  32314. void HAL_RCCEx_GetPLL2ClockFreq(PLL2_ClocksTypeDef *PLL2_Clocks)
  32315. {
  32316. 800dda4: b480 push {r7}
  32317. 800dda6: b089 sub sp, #36 @ 0x24
  32318. 800dda8: af00 add r7, sp, #0
  32319. 800ddaa: 6078 str r0, [r7, #4]
  32320. float_t fracn2, pll2vco;
  32321. /* PLL_VCO = (HSE_VALUE or HSI_VALUE or CSI_VALUE/ PLL2M) * PLL2N
  32322. PLL2xCLK = PLL2_VCO / PLL2x
  32323. */
  32324. pllsource = (RCC->PLLCKSELR & RCC_PLLCKSELR_PLLSRC);
  32325. 800ddac: 4ba1 ldr r3, [pc, #644] @ (800e034 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  32326. 800ddae: 6a9b ldr r3, [r3, #40] @ 0x28
  32327. 800ddb0: f003 0303 and.w r3, r3, #3
  32328. 800ddb4: 61bb str r3, [r7, #24]
  32329. pll2m = ((RCC->PLLCKSELR & RCC_PLLCKSELR_DIVM2) >> 12);
  32330. 800ddb6: 4b9f ldr r3, [pc, #636] @ (800e034 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  32331. 800ddb8: 6a9b ldr r3, [r3, #40] @ 0x28
  32332. 800ddba: 0b1b lsrs r3, r3, #12
  32333. 800ddbc: f003 033f and.w r3, r3, #63 @ 0x3f
  32334. 800ddc0: 617b str r3, [r7, #20]
  32335. pll2fracen = (RCC->PLLCFGR & RCC_PLLCFGR_PLL2FRACEN) >> RCC_PLLCFGR_PLL2FRACEN_Pos;
  32336. 800ddc2: 4b9c ldr r3, [pc, #624] @ (800e034 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  32337. 800ddc4: 6adb ldr r3, [r3, #44] @ 0x2c
  32338. 800ddc6: 091b lsrs r3, r3, #4
  32339. 800ddc8: f003 0301 and.w r3, r3, #1
  32340. 800ddcc: 613b str r3, [r7, #16]
  32341. fracn2 = (float_t)(uint32_t)(pll2fracen * ((RCC->PLL2FRACR & RCC_PLL2FRACR_FRACN2) >> 3));
  32342. 800ddce: 4b99 ldr r3, [pc, #612] @ (800e034 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  32343. 800ddd0: 6bdb ldr r3, [r3, #60] @ 0x3c
  32344. 800ddd2: 08db lsrs r3, r3, #3
  32345. 800ddd4: f3c3 030c ubfx r3, r3, #0, #13
  32346. 800ddd8: 693a ldr r2, [r7, #16]
  32347. 800ddda: fb02 f303 mul.w r3, r2, r3
  32348. 800ddde: ee07 3a90 vmov s15, r3
  32349. 800dde2: eef8 7a67 vcvt.f32.u32 s15, s15
  32350. 800dde6: edc7 7a03 vstr s15, [r7, #12]
  32351. if (pll2m != 0U)
  32352. 800ddea: 697b ldr r3, [r7, #20]
  32353. 800ddec: 2b00 cmp r3, #0
  32354. 800ddee: f000 8111 beq.w 800e014 <HAL_RCCEx_GetPLL2ClockFreq+0x270>
  32355. {
  32356. switch (pllsource)
  32357. 800ddf2: 69bb ldr r3, [r7, #24]
  32358. 800ddf4: 2b02 cmp r3, #2
  32359. 800ddf6: f000 8083 beq.w 800df00 <HAL_RCCEx_GetPLL2ClockFreq+0x15c>
  32360. 800ddfa: 69bb ldr r3, [r7, #24]
  32361. 800ddfc: 2b02 cmp r3, #2
  32362. 800ddfe: f200 80a1 bhi.w 800df44 <HAL_RCCEx_GetPLL2ClockFreq+0x1a0>
  32363. 800de02: 69bb ldr r3, [r7, #24]
  32364. 800de04: 2b00 cmp r3, #0
  32365. 800de06: d003 beq.n 800de10 <HAL_RCCEx_GetPLL2ClockFreq+0x6c>
  32366. 800de08: 69bb ldr r3, [r7, #24]
  32367. 800de0a: 2b01 cmp r3, #1
  32368. 800de0c: d056 beq.n 800debc <HAL_RCCEx_GetPLL2ClockFreq+0x118>
  32369. 800de0e: e099 b.n 800df44 <HAL_RCCEx_GetPLL2ClockFreq+0x1a0>
  32370. {
  32371. case RCC_PLLSOURCE_HSI: /* HSI used as PLL clock source */
  32372. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  32373. 800de10: 4b88 ldr r3, [pc, #544] @ (800e034 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  32374. 800de12: 681b ldr r3, [r3, #0]
  32375. 800de14: f003 0320 and.w r3, r3, #32
  32376. 800de18: 2b00 cmp r3, #0
  32377. 800de1a: d02d beq.n 800de78 <HAL_RCCEx_GetPLL2ClockFreq+0xd4>
  32378. {
  32379. hsivalue = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  32380. 800de1c: 4b85 ldr r3, [pc, #532] @ (800e034 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  32381. 800de1e: 681b ldr r3, [r3, #0]
  32382. 800de20: 08db lsrs r3, r3, #3
  32383. 800de22: f003 0303 and.w r3, r3, #3
  32384. 800de26: 4a84 ldr r2, [pc, #528] @ (800e038 <HAL_RCCEx_GetPLL2ClockFreq+0x294>)
  32385. 800de28: fa22 f303 lsr.w r3, r2, r3
  32386. 800de2c: 60bb str r3, [r7, #8]
  32387. pll2vco = ((float_t)hsivalue / (float_t)pll2m) * ((float_t)(uint32_t)(RCC->PLL2DIVR & RCC_PLL2DIVR_N2) + (fracn2 / (float_t)0x2000) + (float_t)1);
  32388. 800de2e: 68bb ldr r3, [r7, #8]
  32389. 800de30: ee07 3a90 vmov s15, r3
  32390. 800de34: eef8 6a67 vcvt.f32.u32 s13, s15
  32391. 800de38: 697b ldr r3, [r7, #20]
  32392. 800de3a: ee07 3a90 vmov s15, r3
  32393. 800de3e: eef8 7a67 vcvt.f32.u32 s15, s15
  32394. 800de42: ee86 7aa7 vdiv.f32 s14, s13, s15
  32395. 800de46: 4b7b ldr r3, [pc, #492] @ (800e034 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  32396. 800de48: 6b9b ldr r3, [r3, #56] @ 0x38
  32397. 800de4a: f3c3 0308 ubfx r3, r3, #0, #9
  32398. 800de4e: ee07 3a90 vmov s15, r3
  32399. 800de52: eef8 6a67 vcvt.f32.u32 s13, s15
  32400. 800de56: ed97 6a03 vldr s12, [r7, #12]
  32401. 800de5a: eddf 5a78 vldr s11, [pc, #480] @ 800e03c <HAL_RCCEx_GetPLL2ClockFreq+0x298>
  32402. 800de5e: eec6 7a25 vdiv.f32 s15, s12, s11
  32403. 800de62: ee76 7aa7 vadd.f32 s15, s13, s15
  32404. 800de66: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  32405. 800de6a: ee77 7aa6 vadd.f32 s15, s15, s13
  32406. 800de6e: ee67 7a27 vmul.f32 s15, s14, s15
  32407. 800de72: edc7 7a07 vstr s15, [r7, #28]
  32408. }
  32409. else
  32410. {
  32411. pll2vco = ((float_t)HSI_VALUE / (float_t)pll2m) * ((float_t)(uint32_t)(RCC->PLL2DIVR & RCC_PLL2DIVR_N2) + (fracn2 / (float_t)0x2000) + (float_t)1);
  32412. }
  32413. break;
  32414. 800de76: e087 b.n 800df88 <HAL_RCCEx_GetPLL2ClockFreq+0x1e4>
  32415. pll2vco = ((float_t)HSI_VALUE / (float_t)pll2m) * ((float_t)(uint32_t)(RCC->PLL2DIVR & RCC_PLL2DIVR_N2) + (fracn2 / (float_t)0x2000) + (float_t)1);
  32416. 800de78: 697b ldr r3, [r7, #20]
  32417. 800de7a: ee07 3a90 vmov s15, r3
  32418. 800de7e: eef8 7a67 vcvt.f32.u32 s15, s15
  32419. 800de82: eddf 6a6f vldr s13, [pc, #444] @ 800e040 <HAL_RCCEx_GetPLL2ClockFreq+0x29c>
  32420. 800de86: ee86 7aa7 vdiv.f32 s14, s13, s15
  32421. 800de8a: 4b6a ldr r3, [pc, #424] @ (800e034 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  32422. 800de8c: 6b9b ldr r3, [r3, #56] @ 0x38
  32423. 800de8e: f3c3 0308 ubfx r3, r3, #0, #9
  32424. 800de92: ee07 3a90 vmov s15, r3
  32425. 800de96: eef8 6a67 vcvt.f32.u32 s13, s15
  32426. 800de9a: ed97 6a03 vldr s12, [r7, #12]
  32427. 800de9e: eddf 5a67 vldr s11, [pc, #412] @ 800e03c <HAL_RCCEx_GetPLL2ClockFreq+0x298>
  32428. 800dea2: eec6 7a25 vdiv.f32 s15, s12, s11
  32429. 800dea6: ee76 7aa7 vadd.f32 s15, s13, s15
  32430. 800deaa: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  32431. 800deae: ee77 7aa6 vadd.f32 s15, s15, s13
  32432. 800deb2: ee67 7a27 vmul.f32 s15, s14, s15
  32433. 800deb6: edc7 7a07 vstr s15, [r7, #28]
  32434. break;
  32435. 800deba: e065 b.n 800df88 <HAL_RCCEx_GetPLL2ClockFreq+0x1e4>
  32436. case RCC_PLLSOURCE_CSI: /* CSI used as PLL clock source */
  32437. pll2vco = ((float_t)CSI_VALUE / (float_t)pll2m) * ((float_t)(uint32_t)(RCC->PLL2DIVR & RCC_PLL2DIVR_N2) + (fracn2 / (float_t)0x2000) + (float_t)1);
  32438. 800debc: 697b ldr r3, [r7, #20]
  32439. 800debe: ee07 3a90 vmov s15, r3
  32440. 800dec2: eef8 7a67 vcvt.f32.u32 s15, s15
  32441. 800dec6: eddf 6a5f vldr s13, [pc, #380] @ 800e044 <HAL_RCCEx_GetPLL2ClockFreq+0x2a0>
  32442. 800deca: ee86 7aa7 vdiv.f32 s14, s13, s15
  32443. 800dece: 4b59 ldr r3, [pc, #356] @ (800e034 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  32444. 800ded0: 6b9b ldr r3, [r3, #56] @ 0x38
  32445. 800ded2: f3c3 0308 ubfx r3, r3, #0, #9
  32446. 800ded6: ee07 3a90 vmov s15, r3
  32447. 800deda: eef8 6a67 vcvt.f32.u32 s13, s15
  32448. 800dede: ed97 6a03 vldr s12, [r7, #12]
  32449. 800dee2: eddf 5a56 vldr s11, [pc, #344] @ 800e03c <HAL_RCCEx_GetPLL2ClockFreq+0x298>
  32450. 800dee6: eec6 7a25 vdiv.f32 s15, s12, s11
  32451. 800deea: ee76 7aa7 vadd.f32 s15, s13, s15
  32452. 800deee: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  32453. 800def2: ee77 7aa6 vadd.f32 s15, s15, s13
  32454. 800def6: ee67 7a27 vmul.f32 s15, s14, s15
  32455. 800defa: edc7 7a07 vstr s15, [r7, #28]
  32456. break;
  32457. 800defe: e043 b.n 800df88 <HAL_RCCEx_GetPLL2ClockFreq+0x1e4>
  32458. case RCC_PLLSOURCE_HSE: /* HSE used as PLL clock source */
  32459. pll2vco = ((float_t)HSE_VALUE / (float_t)pll2m) * ((float_t)(uint32_t)(RCC->PLL2DIVR & RCC_PLL2DIVR_N2) + (fracn2 / (float_t)0x2000) + (float_t)1);
  32460. 800df00: 697b ldr r3, [r7, #20]
  32461. 800df02: ee07 3a90 vmov s15, r3
  32462. 800df06: eef8 7a67 vcvt.f32.u32 s15, s15
  32463. 800df0a: eddf 6a4f vldr s13, [pc, #316] @ 800e048 <HAL_RCCEx_GetPLL2ClockFreq+0x2a4>
  32464. 800df0e: ee86 7aa7 vdiv.f32 s14, s13, s15
  32465. 800df12: 4b48 ldr r3, [pc, #288] @ (800e034 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  32466. 800df14: 6b9b ldr r3, [r3, #56] @ 0x38
  32467. 800df16: f3c3 0308 ubfx r3, r3, #0, #9
  32468. 800df1a: ee07 3a90 vmov s15, r3
  32469. 800df1e: eef8 6a67 vcvt.f32.u32 s13, s15
  32470. 800df22: ed97 6a03 vldr s12, [r7, #12]
  32471. 800df26: eddf 5a45 vldr s11, [pc, #276] @ 800e03c <HAL_RCCEx_GetPLL2ClockFreq+0x298>
  32472. 800df2a: eec6 7a25 vdiv.f32 s15, s12, s11
  32473. 800df2e: ee76 7aa7 vadd.f32 s15, s13, s15
  32474. 800df32: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  32475. 800df36: ee77 7aa6 vadd.f32 s15, s15, s13
  32476. 800df3a: ee67 7a27 vmul.f32 s15, s14, s15
  32477. 800df3e: edc7 7a07 vstr s15, [r7, #28]
  32478. break;
  32479. 800df42: e021 b.n 800df88 <HAL_RCCEx_GetPLL2ClockFreq+0x1e4>
  32480. default:
  32481. pll2vco = ((float_t)CSI_VALUE / (float_t)pll2m) * ((float_t)(uint32_t)(RCC->PLL2DIVR & RCC_PLL2DIVR_N2) + (fracn2 / (float_t)0x2000) + (float_t)1);
  32482. 800df44: 697b ldr r3, [r7, #20]
  32483. 800df46: ee07 3a90 vmov s15, r3
  32484. 800df4a: eef8 7a67 vcvt.f32.u32 s15, s15
  32485. 800df4e: eddf 6a3d vldr s13, [pc, #244] @ 800e044 <HAL_RCCEx_GetPLL2ClockFreq+0x2a0>
  32486. 800df52: ee86 7aa7 vdiv.f32 s14, s13, s15
  32487. 800df56: 4b37 ldr r3, [pc, #220] @ (800e034 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  32488. 800df58: 6b9b ldr r3, [r3, #56] @ 0x38
  32489. 800df5a: f3c3 0308 ubfx r3, r3, #0, #9
  32490. 800df5e: ee07 3a90 vmov s15, r3
  32491. 800df62: eef8 6a67 vcvt.f32.u32 s13, s15
  32492. 800df66: ed97 6a03 vldr s12, [r7, #12]
  32493. 800df6a: eddf 5a34 vldr s11, [pc, #208] @ 800e03c <HAL_RCCEx_GetPLL2ClockFreq+0x298>
  32494. 800df6e: eec6 7a25 vdiv.f32 s15, s12, s11
  32495. 800df72: ee76 7aa7 vadd.f32 s15, s13, s15
  32496. 800df76: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  32497. 800df7a: ee77 7aa6 vadd.f32 s15, s15, s13
  32498. 800df7e: ee67 7a27 vmul.f32 s15, s14, s15
  32499. 800df82: edc7 7a07 vstr s15, [r7, #28]
  32500. break;
  32501. 800df86: bf00 nop
  32502. }
  32503. PLL2_Clocks->PLL2_P_Frequency = (uint32_t)(float_t)(pll2vco / ((float_t)(uint32_t)((RCC->PLL2DIVR & RCC_PLL2DIVR_P2) >> 9) + (float_t)1)) ;
  32504. 800df88: 4b2a ldr r3, [pc, #168] @ (800e034 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  32505. 800df8a: 6b9b ldr r3, [r3, #56] @ 0x38
  32506. 800df8c: 0a5b lsrs r3, r3, #9
  32507. 800df8e: f003 037f and.w r3, r3, #127 @ 0x7f
  32508. 800df92: ee07 3a90 vmov s15, r3
  32509. 800df96: eef8 7a67 vcvt.f32.u32 s15, s15
  32510. 800df9a: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  32511. 800df9e: ee37 7a87 vadd.f32 s14, s15, s14
  32512. 800dfa2: edd7 6a07 vldr s13, [r7, #28]
  32513. 800dfa6: eec6 7a87 vdiv.f32 s15, s13, s14
  32514. 800dfaa: eefc 7ae7 vcvt.u32.f32 s15, s15
  32515. 800dfae: ee17 2a90 vmov r2, s15
  32516. 800dfb2: 687b ldr r3, [r7, #4]
  32517. 800dfb4: 601a str r2, [r3, #0]
  32518. PLL2_Clocks->PLL2_Q_Frequency = (uint32_t)(float_t)(pll2vco / ((float_t)(uint32_t)((RCC->PLL2DIVR & RCC_PLL2DIVR_Q2) >> 16) + (float_t)1)) ;
  32519. 800dfb6: 4b1f ldr r3, [pc, #124] @ (800e034 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  32520. 800dfb8: 6b9b ldr r3, [r3, #56] @ 0x38
  32521. 800dfba: 0c1b lsrs r3, r3, #16
  32522. 800dfbc: f003 037f and.w r3, r3, #127 @ 0x7f
  32523. 800dfc0: ee07 3a90 vmov s15, r3
  32524. 800dfc4: eef8 7a67 vcvt.f32.u32 s15, s15
  32525. 800dfc8: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  32526. 800dfcc: ee37 7a87 vadd.f32 s14, s15, s14
  32527. 800dfd0: edd7 6a07 vldr s13, [r7, #28]
  32528. 800dfd4: eec6 7a87 vdiv.f32 s15, s13, s14
  32529. 800dfd8: eefc 7ae7 vcvt.u32.f32 s15, s15
  32530. 800dfdc: ee17 2a90 vmov r2, s15
  32531. 800dfe0: 687b ldr r3, [r7, #4]
  32532. 800dfe2: 605a str r2, [r3, #4]
  32533. PLL2_Clocks->PLL2_R_Frequency = (uint32_t)(float_t)(pll2vco / ((float_t)(uint32_t)((RCC->PLL2DIVR & RCC_PLL2DIVR_R2) >> 24) + (float_t)1)) ;
  32534. 800dfe4: 4b13 ldr r3, [pc, #76] @ (800e034 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  32535. 800dfe6: 6b9b ldr r3, [r3, #56] @ 0x38
  32536. 800dfe8: 0e1b lsrs r3, r3, #24
  32537. 800dfea: f003 037f and.w r3, r3, #127 @ 0x7f
  32538. 800dfee: ee07 3a90 vmov s15, r3
  32539. 800dff2: eef8 7a67 vcvt.f32.u32 s15, s15
  32540. 800dff6: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  32541. 800dffa: ee37 7a87 vadd.f32 s14, s15, s14
  32542. 800dffe: edd7 6a07 vldr s13, [r7, #28]
  32543. 800e002: eec6 7a87 vdiv.f32 s15, s13, s14
  32544. 800e006: eefc 7ae7 vcvt.u32.f32 s15, s15
  32545. 800e00a: ee17 2a90 vmov r2, s15
  32546. 800e00e: 687b ldr r3, [r7, #4]
  32547. 800e010: 609a str r2, [r3, #8]
  32548. {
  32549. PLL2_Clocks->PLL2_P_Frequency = 0U;
  32550. PLL2_Clocks->PLL2_Q_Frequency = 0U;
  32551. PLL2_Clocks->PLL2_R_Frequency = 0U;
  32552. }
  32553. }
  32554. 800e012: e008 b.n 800e026 <HAL_RCCEx_GetPLL2ClockFreq+0x282>
  32555. PLL2_Clocks->PLL2_P_Frequency = 0U;
  32556. 800e014: 687b ldr r3, [r7, #4]
  32557. 800e016: 2200 movs r2, #0
  32558. 800e018: 601a str r2, [r3, #0]
  32559. PLL2_Clocks->PLL2_Q_Frequency = 0U;
  32560. 800e01a: 687b ldr r3, [r7, #4]
  32561. 800e01c: 2200 movs r2, #0
  32562. 800e01e: 605a str r2, [r3, #4]
  32563. PLL2_Clocks->PLL2_R_Frequency = 0U;
  32564. 800e020: 687b ldr r3, [r7, #4]
  32565. 800e022: 2200 movs r2, #0
  32566. 800e024: 609a str r2, [r3, #8]
  32567. }
  32568. 800e026: bf00 nop
  32569. 800e028: 3724 adds r7, #36 @ 0x24
  32570. 800e02a: 46bd mov sp, r7
  32571. 800e02c: f85d 7b04 ldr.w r7, [sp], #4
  32572. 800e030: 4770 bx lr
  32573. 800e032: bf00 nop
  32574. 800e034: 58024400 .word 0x58024400
  32575. 800e038: 03d09000 .word 0x03d09000
  32576. 800e03c: 46000000 .word 0x46000000
  32577. 800e040: 4c742400 .word 0x4c742400
  32578. 800e044: 4a742400 .word 0x4a742400
  32579. 800e048: 4bbebc20 .word 0x4bbebc20
  32580. 0800e04c <HAL_RCCEx_GetPLL3ClockFreq>:
  32581. * right PLL3CLK value. Otherwise, any configuration based on this function will be incorrect.
  32582. * @param PLL3_Clocks structure.
  32583. * @retval None
  32584. */
  32585. void HAL_RCCEx_GetPLL3ClockFreq(PLL3_ClocksTypeDef *PLL3_Clocks)
  32586. {
  32587. 800e04c: b480 push {r7}
  32588. 800e04e: b089 sub sp, #36 @ 0x24
  32589. 800e050: af00 add r7, sp, #0
  32590. 800e052: 6078 str r0, [r7, #4]
  32591. float_t fracn3, pll3vco;
  32592. /* PLL3_VCO = (HSE_VALUE or HSI_VALUE or CSI_VALUE/ PLL3M) * PLL3N
  32593. PLL3xCLK = PLL3_VCO / PLLxR
  32594. */
  32595. pllsource = (RCC->PLLCKSELR & RCC_PLLCKSELR_PLLSRC);
  32596. 800e054: 4ba1 ldr r3, [pc, #644] @ (800e2dc <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  32597. 800e056: 6a9b ldr r3, [r3, #40] @ 0x28
  32598. 800e058: f003 0303 and.w r3, r3, #3
  32599. 800e05c: 61bb str r3, [r7, #24]
  32600. pll3m = ((RCC->PLLCKSELR & RCC_PLLCKSELR_DIVM3) >> 20) ;
  32601. 800e05e: 4b9f ldr r3, [pc, #636] @ (800e2dc <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  32602. 800e060: 6a9b ldr r3, [r3, #40] @ 0x28
  32603. 800e062: 0d1b lsrs r3, r3, #20
  32604. 800e064: f003 033f and.w r3, r3, #63 @ 0x3f
  32605. 800e068: 617b str r3, [r7, #20]
  32606. pll3fracen = (RCC->PLLCFGR & RCC_PLLCFGR_PLL3FRACEN) >> RCC_PLLCFGR_PLL3FRACEN_Pos;
  32607. 800e06a: 4b9c ldr r3, [pc, #624] @ (800e2dc <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  32608. 800e06c: 6adb ldr r3, [r3, #44] @ 0x2c
  32609. 800e06e: 0a1b lsrs r3, r3, #8
  32610. 800e070: f003 0301 and.w r3, r3, #1
  32611. 800e074: 613b str r3, [r7, #16]
  32612. fracn3 = (float_t)(uint32_t)(pll3fracen * ((RCC->PLL3FRACR & RCC_PLL3FRACR_FRACN3) >> 3));
  32613. 800e076: 4b99 ldr r3, [pc, #612] @ (800e2dc <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  32614. 800e078: 6c5b ldr r3, [r3, #68] @ 0x44
  32615. 800e07a: 08db lsrs r3, r3, #3
  32616. 800e07c: f3c3 030c ubfx r3, r3, #0, #13
  32617. 800e080: 693a ldr r2, [r7, #16]
  32618. 800e082: fb02 f303 mul.w r3, r2, r3
  32619. 800e086: ee07 3a90 vmov s15, r3
  32620. 800e08a: eef8 7a67 vcvt.f32.u32 s15, s15
  32621. 800e08e: edc7 7a03 vstr s15, [r7, #12]
  32622. if (pll3m != 0U)
  32623. 800e092: 697b ldr r3, [r7, #20]
  32624. 800e094: 2b00 cmp r3, #0
  32625. 800e096: f000 8111 beq.w 800e2bc <HAL_RCCEx_GetPLL3ClockFreq+0x270>
  32626. {
  32627. switch (pllsource)
  32628. 800e09a: 69bb ldr r3, [r7, #24]
  32629. 800e09c: 2b02 cmp r3, #2
  32630. 800e09e: f000 8083 beq.w 800e1a8 <HAL_RCCEx_GetPLL3ClockFreq+0x15c>
  32631. 800e0a2: 69bb ldr r3, [r7, #24]
  32632. 800e0a4: 2b02 cmp r3, #2
  32633. 800e0a6: f200 80a1 bhi.w 800e1ec <HAL_RCCEx_GetPLL3ClockFreq+0x1a0>
  32634. 800e0aa: 69bb ldr r3, [r7, #24]
  32635. 800e0ac: 2b00 cmp r3, #0
  32636. 800e0ae: d003 beq.n 800e0b8 <HAL_RCCEx_GetPLL3ClockFreq+0x6c>
  32637. 800e0b0: 69bb ldr r3, [r7, #24]
  32638. 800e0b2: 2b01 cmp r3, #1
  32639. 800e0b4: d056 beq.n 800e164 <HAL_RCCEx_GetPLL3ClockFreq+0x118>
  32640. 800e0b6: e099 b.n 800e1ec <HAL_RCCEx_GetPLL3ClockFreq+0x1a0>
  32641. {
  32642. case RCC_PLLSOURCE_HSI: /* HSI used as PLL clock source */
  32643. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  32644. 800e0b8: 4b88 ldr r3, [pc, #544] @ (800e2dc <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  32645. 800e0ba: 681b ldr r3, [r3, #0]
  32646. 800e0bc: f003 0320 and.w r3, r3, #32
  32647. 800e0c0: 2b00 cmp r3, #0
  32648. 800e0c2: d02d beq.n 800e120 <HAL_RCCEx_GetPLL3ClockFreq+0xd4>
  32649. {
  32650. hsivalue = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  32651. 800e0c4: 4b85 ldr r3, [pc, #532] @ (800e2dc <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  32652. 800e0c6: 681b ldr r3, [r3, #0]
  32653. 800e0c8: 08db lsrs r3, r3, #3
  32654. 800e0ca: f003 0303 and.w r3, r3, #3
  32655. 800e0ce: 4a84 ldr r2, [pc, #528] @ (800e2e0 <HAL_RCCEx_GetPLL3ClockFreq+0x294>)
  32656. 800e0d0: fa22 f303 lsr.w r3, r2, r3
  32657. 800e0d4: 60bb str r3, [r7, #8]
  32658. pll3vco = ((float_t)hsivalue / (float_t)pll3m) * ((float_t)(uint32_t)(RCC->PLL3DIVR & RCC_PLL3DIVR_N3) + (fracn3 / (float_t)0x2000) + (float_t)1);
  32659. 800e0d6: 68bb ldr r3, [r7, #8]
  32660. 800e0d8: ee07 3a90 vmov s15, r3
  32661. 800e0dc: eef8 6a67 vcvt.f32.u32 s13, s15
  32662. 800e0e0: 697b ldr r3, [r7, #20]
  32663. 800e0e2: ee07 3a90 vmov s15, r3
  32664. 800e0e6: eef8 7a67 vcvt.f32.u32 s15, s15
  32665. 800e0ea: ee86 7aa7 vdiv.f32 s14, s13, s15
  32666. 800e0ee: 4b7b ldr r3, [pc, #492] @ (800e2dc <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  32667. 800e0f0: 6c1b ldr r3, [r3, #64] @ 0x40
  32668. 800e0f2: f3c3 0308 ubfx r3, r3, #0, #9
  32669. 800e0f6: ee07 3a90 vmov s15, r3
  32670. 800e0fa: eef8 6a67 vcvt.f32.u32 s13, s15
  32671. 800e0fe: ed97 6a03 vldr s12, [r7, #12]
  32672. 800e102: eddf 5a78 vldr s11, [pc, #480] @ 800e2e4 <HAL_RCCEx_GetPLL3ClockFreq+0x298>
  32673. 800e106: eec6 7a25 vdiv.f32 s15, s12, s11
  32674. 800e10a: ee76 7aa7 vadd.f32 s15, s13, s15
  32675. 800e10e: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  32676. 800e112: ee77 7aa6 vadd.f32 s15, s15, s13
  32677. 800e116: ee67 7a27 vmul.f32 s15, s14, s15
  32678. 800e11a: edc7 7a07 vstr s15, [r7, #28]
  32679. }
  32680. else
  32681. {
  32682. pll3vco = ((float_t)HSI_VALUE / (float_t)pll3m) * ((float_t)(uint32_t)(RCC->PLL3DIVR & RCC_PLL3DIVR_N3) + (fracn3 / (float_t)0x2000) + (float_t)1);
  32683. }
  32684. break;
  32685. 800e11e: e087 b.n 800e230 <HAL_RCCEx_GetPLL3ClockFreq+0x1e4>
  32686. pll3vco = ((float_t)HSI_VALUE / (float_t)pll3m) * ((float_t)(uint32_t)(RCC->PLL3DIVR & RCC_PLL3DIVR_N3) + (fracn3 / (float_t)0x2000) + (float_t)1);
  32687. 800e120: 697b ldr r3, [r7, #20]
  32688. 800e122: ee07 3a90 vmov s15, r3
  32689. 800e126: eef8 7a67 vcvt.f32.u32 s15, s15
  32690. 800e12a: eddf 6a6f vldr s13, [pc, #444] @ 800e2e8 <HAL_RCCEx_GetPLL3ClockFreq+0x29c>
  32691. 800e12e: ee86 7aa7 vdiv.f32 s14, s13, s15
  32692. 800e132: 4b6a ldr r3, [pc, #424] @ (800e2dc <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  32693. 800e134: 6c1b ldr r3, [r3, #64] @ 0x40
  32694. 800e136: f3c3 0308 ubfx r3, r3, #0, #9
  32695. 800e13a: ee07 3a90 vmov s15, r3
  32696. 800e13e: eef8 6a67 vcvt.f32.u32 s13, s15
  32697. 800e142: ed97 6a03 vldr s12, [r7, #12]
  32698. 800e146: eddf 5a67 vldr s11, [pc, #412] @ 800e2e4 <HAL_RCCEx_GetPLL3ClockFreq+0x298>
  32699. 800e14a: eec6 7a25 vdiv.f32 s15, s12, s11
  32700. 800e14e: ee76 7aa7 vadd.f32 s15, s13, s15
  32701. 800e152: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  32702. 800e156: ee77 7aa6 vadd.f32 s15, s15, s13
  32703. 800e15a: ee67 7a27 vmul.f32 s15, s14, s15
  32704. 800e15e: edc7 7a07 vstr s15, [r7, #28]
  32705. break;
  32706. 800e162: e065 b.n 800e230 <HAL_RCCEx_GetPLL3ClockFreq+0x1e4>
  32707. case RCC_PLLSOURCE_CSI: /* CSI used as PLL clock source */
  32708. pll3vco = ((float_t)CSI_VALUE / (float_t)pll3m) * ((float_t)(uint32_t)(RCC->PLL3DIVR & RCC_PLL3DIVR_N3) + (fracn3 / (float_t)0x2000) + (float_t)1);
  32709. 800e164: 697b ldr r3, [r7, #20]
  32710. 800e166: ee07 3a90 vmov s15, r3
  32711. 800e16a: eef8 7a67 vcvt.f32.u32 s15, s15
  32712. 800e16e: eddf 6a5f vldr s13, [pc, #380] @ 800e2ec <HAL_RCCEx_GetPLL3ClockFreq+0x2a0>
  32713. 800e172: ee86 7aa7 vdiv.f32 s14, s13, s15
  32714. 800e176: 4b59 ldr r3, [pc, #356] @ (800e2dc <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  32715. 800e178: 6c1b ldr r3, [r3, #64] @ 0x40
  32716. 800e17a: f3c3 0308 ubfx r3, r3, #0, #9
  32717. 800e17e: ee07 3a90 vmov s15, r3
  32718. 800e182: eef8 6a67 vcvt.f32.u32 s13, s15
  32719. 800e186: ed97 6a03 vldr s12, [r7, #12]
  32720. 800e18a: eddf 5a56 vldr s11, [pc, #344] @ 800e2e4 <HAL_RCCEx_GetPLL3ClockFreq+0x298>
  32721. 800e18e: eec6 7a25 vdiv.f32 s15, s12, s11
  32722. 800e192: ee76 7aa7 vadd.f32 s15, s13, s15
  32723. 800e196: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  32724. 800e19a: ee77 7aa6 vadd.f32 s15, s15, s13
  32725. 800e19e: ee67 7a27 vmul.f32 s15, s14, s15
  32726. 800e1a2: edc7 7a07 vstr s15, [r7, #28]
  32727. break;
  32728. 800e1a6: e043 b.n 800e230 <HAL_RCCEx_GetPLL3ClockFreq+0x1e4>
  32729. case RCC_PLLSOURCE_HSE: /* HSE used as PLL clock source */
  32730. pll3vco = ((float_t)HSE_VALUE / (float_t)pll3m) * ((float_t)(uint32_t)(RCC->PLL3DIVR & RCC_PLL3DIVR_N3) + (fracn3 / (float_t)0x2000) + (float_t)1);
  32731. 800e1a8: 697b ldr r3, [r7, #20]
  32732. 800e1aa: ee07 3a90 vmov s15, r3
  32733. 800e1ae: eef8 7a67 vcvt.f32.u32 s15, s15
  32734. 800e1b2: eddf 6a4f vldr s13, [pc, #316] @ 800e2f0 <HAL_RCCEx_GetPLL3ClockFreq+0x2a4>
  32735. 800e1b6: ee86 7aa7 vdiv.f32 s14, s13, s15
  32736. 800e1ba: 4b48 ldr r3, [pc, #288] @ (800e2dc <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  32737. 800e1bc: 6c1b ldr r3, [r3, #64] @ 0x40
  32738. 800e1be: f3c3 0308 ubfx r3, r3, #0, #9
  32739. 800e1c2: ee07 3a90 vmov s15, r3
  32740. 800e1c6: eef8 6a67 vcvt.f32.u32 s13, s15
  32741. 800e1ca: ed97 6a03 vldr s12, [r7, #12]
  32742. 800e1ce: eddf 5a45 vldr s11, [pc, #276] @ 800e2e4 <HAL_RCCEx_GetPLL3ClockFreq+0x298>
  32743. 800e1d2: eec6 7a25 vdiv.f32 s15, s12, s11
  32744. 800e1d6: ee76 7aa7 vadd.f32 s15, s13, s15
  32745. 800e1da: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  32746. 800e1de: ee77 7aa6 vadd.f32 s15, s15, s13
  32747. 800e1e2: ee67 7a27 vmul.f32 s15, s14, s15
  32748. 800e1e6: edc7 7a07 vstr s15, [r7, #28]
  32749. break;
  32750. 800e1ea: e021 b.n 800e230 <HAL_RCCEx_GetPLL3ClockFreq+0x1e4>
  32751. default:
  32752. pll3vco = ((float_t)CSI_VALUE / (float_t)pll3m) * ((float_t)(uint32_t)(RCC->PLL3DIVR & RCC_PLL3DIVR_N3) + (fracn3 / (float_t)0x2000) + (float_t)1);
  32753. 800e1ec: 697b ldr r3, [r7, #20]
  32754. 800e1ee: ee07 3a90 vmov s15, r3
  32755. 800e1f2: eef8 7a67 vcvt.f32.u32 s15, s15
  32756. 800e1f6: eddf 6a3d vldr s13, [pc, #244] @ 800e2ec <HAL_RCCEx_GetPLL3ClockFreq+0x2a0>
  32757. 800e1fa: ee86 7aa7 vdiv.f32 s14, s13, s15
  32758. 800e1fe: 4b37 ldr r3, [pc, #220] @ (800e2dc <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  32759. 800e200: 6c1b ldr r3, [r3, #64] @ 0x40
  32760. 800e202: f3c3 0308 ubfx r3, r3, #0, #9
  32761. 800e206: ee07 3a90 vmov s15, r3
  32762. 800e20a: eef8 6a67 vcvt.f32.u32 s13, s15
  32763. 800e20e: ed97 6a03 vldr s12, [r7, #12]
  32764. 800e212: eddf 5a34 vldr s11, [pc, #208] @ 800e2e4 <HAL_RCCEx_GetPLL3ClockFreq+0x298>
  32765. 800e216: eec6 7a25 vdiv.f32 s15, s12, s11
  32766. 800e21a: ee76 7aa7 vadd.f32 s15, s13, s15
  32767. 800e21e: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  32768. 800e222: ee77 7aa6 vadd.f32 s15, s15, s13
  32769. 800e226: ee67 7a27 vmul.f32 s15, s14, s15
  32770. 800e22a: edc7 7a07 vstr s15, [r7, #28]
  32771. break;
  32772. 800e22e: bf00 nop
  32773. }
  32774. PLL3_Clocks->PLL3_P_Frequency = (uint32_t)(float_t)(pll3vco / ((float_t)(uint32_t)((RCC->PLL3DIVR & RCC_PLL3DIVR_P3) >> 9) + (float_t)1)) ;
  32775. 800e230: 4b2a ldr r3, [pc, #168] @ (800e2dc <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  32776. 800e232: 6c1b ldr r3, [r3, #64] @ 0x40
  32777. 800e234: 0a5b lsrs r3, r3, #9
  32778. 800e236: f003 037f and.w r3, r3, #127 @ 0x7f
  32779. 800e23a: ee07 3a90 vmov s15, r3
  32780. 800e23e: eef8 7a67 vcvt.f32.u32 s15, s15
  32781. 800e242: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  32782. 800e246: ee37 7a87 vadd.f32 s14, s15, s14
  32783. 800e24a: edd7 6a07 vldr s13, [r7, #28]
  32784. 800e24e: eec6 7a87 vdiv.f32 s15, s13, s14
  32785. 800e252: eefc 7ae7 vcvt.u32.f32 s15, s15
  32786. 800e256: ee17 2a90 vmov r2, s15
  32787. 800e25a: 687b ldr r3, [r7, #4]
  32788. 800e25c: 601a str r2, [r3, #0]
  32789. PLL3_Clocks->PLL3_Q_Frequency = (uint32_t)(float_t)(pll3vco / ((float_t)(uint32_t)((RCC->PLL3DIVR & RCC_PLL3DIVR_Q3) >> 16) + (float_t)1)) ;
  32790. 800e25e: 4b1f ldr r3, [pc, #124] @ (800e2dc <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  32791. 800e260: 6c1b ldr r3, [r3, #64] @ 0x40
  32792. 800e262: 0c1b lsrs r3, r3, #16
  32793. 800e264: f003 037f and.w r3, r3, #127 @ 0x7f
  32794. 800e268: ee07 3a90 vmov s15, r3
  32795. 800e26c: eef8 7a67 vcvt.f32.u32 s15, s15
  32796. 800e270: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  32797. 800e274: ee37 7a87 vadd.f32 s14, s15, s14
  32798. 800e278: edd7 6a07 vldr s13, [r7, #28]
  32799. 800e27c: eec6 7a87 vdiv.f32 s15, s13, s14
  32800. 800e280: eefc 7ae7 vcvt.u32.f32 s15, s15
  32801. 800e284: ee17 2a90 vmov r2, s15
  32802. 800e288: 687b ldr r3, [r7, #4]
  32803. 800e28a: 605a str r2, [r3, #4]
  32804. PLL3_Clocks->PLL3_R_Frequency = (uint32_t)(float_t)(pll3vco / ((float_t)(uint32_t)((RCC->PLL3DIVR & RCC_PLL3DIVR_R3) >> 24) + (float_t)1)) ;
  32805. 800e28c: 4b13 ldr r3, [pc, #76] @ (800e2dc <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  32806. 800e28e: 6c1b ldr r3, [r3, #64] @ 0x40
  32807. 800e290: 0e1b lsrs r3, r3, #24
  32808. 800e292: f003 037f and.w r3, r3, #127 @ 0x7f
  32809. 800e296: ee07 3a90 vmov s15, r3
  32810. 800e29a: eef8 7a67 vcvt.f32.u32 s15, s15
  32811. 800e29e: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  32812. 800e2a2: ee37 7a87 vadd.f32 s14, s15, s14
  32813. 800e2a6: edd7 6a07 vldr s13, [r7, #28]
  32814. 800e2aa: eec6 7a87 vdiv.f32 s15, s13, s14
  32815. 800e2ae: eefc 7ae7 vcvt.u32.f32 s15, s15
  32816. 800e2b2: ee17 2a90 vmov r2, s15
  32817. 800e2b6: 687b ldr r3, [r7, #4]
  32818. 800e2b8: 609a str r2, [r3, #8]
  32819. PLL3_Clocks->PLL3_P_Frequency = 0U;
  32820. PLL3_Clocks->PLL3_Q_Frequency = 0U;
  32821. PLL3_Clocks->PLL3_R_Frequency = 0U;
  32822. }
  32823. }
  32824. 800e2ba: e008 b.n 800e2ce <HAL_RCCEx_GetPLL3ClockFreq+0x282>
  32825. PLL3_Clocks->PLL3_P_Frequency = 0U;
  32826. 800e2bc: 687b ldr r3, [r7, #4]
  32827. 800e2be: 2200 movs r2, #0
  32828. 800e2c0: 601a str r2, [r3, #0]
  32829. PLL3_Clocks->PLL3_Q_Frequency = 0U;
  32830. 800e2c2: 687b ldr r3, [r7, #4]
  32831. 800e2c4: 2200 movs r2, #0
  32832. 800e2c6: 605a str r2, [r3, #4]
  32833. PLL3_Clocks->PLL3_R_Frequency = 0U;
  32834. 800e2c8: 687b ldr r3, [r7, #4]
  32835. 800e2ca: 2200 movs r2, #0
  32836. 800e2cc: 609a str r2, [r3, #8]
  32837. }
  32838. 800e2ce: bf00 nop
  32839. 800e2d0: 3724 adds r7, #36 @ 0x24
  32840. 800e2d2: 46bd mov sp, r7
  32841. 800e2d4: f85d 7b04 ldr.w r7, [sp], #4
  32842. 800e2d8: 4770 bx lr
  32843. 800e2da: bf00 nop
  32844. 800e2dc: 58024400 .word 0x58024400
  32845. 800e2e0: 03d09000 .word 0x03d09000
  32846. 800e2e4: 46000000 .word 0x46000000
  32847. 800e2e8: 4c742400 .word 0x4c742400
  32848. 800e2ec: 4a742400 .word 0x4a742400
  32849. 800e2f0: 4bbebc20 .word 0x4bbebc20
  32850. 0800e2f4 <HAL_RCCEx_GetPLL1ClockFreq>:
  32851. * right PLL1CLK value. Otherwise, any configuration based on this function will be incorrect.
  32852. * @param PLL1_Clocks structure.
  32853. * @retval None
  32854. */
  32855. void HAL_RCCEx_GetPLL1ClockFreq(PLL1_ClocksTypeDef *PLL1_Clocks)
  32856. {
  32857. 800e2f4: b480 push {r7}
  32858. 800e2f6: b089 sub sp, #36 @ 0x24
  32859. 800e2f8: af00 add r7, sp, #0
  32860. 800e2fa: 6078 str r0, [r7, #4]
  32861. uint32_t pllsource, pll1m, pll1fracen, hsivalue;
  32862. float_t fracn1, pll1vco;
  32863. pllsource = (RCC->PLLCKSELR & RCC_PLLCKSELR_PLLSRC);
  32864. 800e2fc: 4ba0 ldr r3, [pc, #640] @ (800e580 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  32865. 800e2fe: 6a9b ldr r3, [r3, #40] @ 0x28
  32866. 800e300: f003 0303 and.w r3, r3, #3
  32867. 800e304: 61bb str r3, [r7, #24]
  32868. pll1m = ((RCC->PLLCKSELR & RCC_PLLCKSELR_DIVM1) >> 4);
  32869. 800e306: 4b9e ldr r3, [pc, #632] @ (800e580 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  32870. 800e308: 6a9b ldr r3, [r3, #40] @ 0x28
  32871. 800e30a: 091b lsrs r3, r3, #4
  32872. 800e30c: f003 033f and.w r3, r3, #63 @ 0x3f
  32873. 800e310: 617b str r3, [r7, #20]
  32874. pll1fracen = RCC->PLLCFGR & RCC_PLLCFGR_PLL1FRACEN;
  32875. 800e312: 4b9b ldr r3, [pc, #620] @ (800e580 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  32876. 800e314: 6adb ldr r3, [r3, #44] @ 0x2c
  32877. 800e316: f003 0301 and.w r3, r3, #1
  32878. 800e31a: 613b str r3, [r7, #16]
  32879. fracn1 = (float_t)(uint32_t)(pll1fracen * ((RCC->PLL1FRACR & RCC_PLL1FRACR_FRACN1) >> 3));
  32880. 800e31c: 4b98 ldr r3, [pc, #608] @ (800e580 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  32881. 800e31e: 6b5b ldr r3, [r3, #52] @ 0x34
  32882. 800e320: 08db lsrs r3, r3, #3
  32883. 800e322: f3c3 030c ubfx r3, r3, #0, #13
  32884. 800e326: 693a ldr r2, [r7, #16]
  32885. 800e328: fb02 f303 mul.w r3, r2, r3
  32886. 800e32c: ee07 3a90 vmov s15, r3
  32887. 800e330: eef8 7a67 vcvt.f32.u32 s15, s15
  32888. 800e334: edc7 7a03 vstr s15, [r7, #12]
  32889. if (pll1m != 0U)
  32890. 800e338: 697b ldr r3, [r7, #20]
  32891. 800e33a: 2b00 cmp r3, #0
  32892. 800e33c: f000 8111 beq.w 800e562 <HAL_RCCEx_GetPLL1ClockFreq+0x26e>
  32893. {
  32894. switch (pllsource)
  32895. 800e340: 69bb ldr r3, [r7, #24]
  32896. 800e342: 2b02 cmp r3, #2
  32897. 800e344: f000 8083 beq.w 800e44e <HAL_RCCEx_GetPLL1ClockFreq+0x15a>
  32898. 800e348: 69bb ldr r3, [r7, #24]
  32899. 800e34a: 2b02 cmp r3, #2
  32900. 800e34c: f200 80a1 bhi.w 800e492 <HAL_RCCEx_GetPLL1ClockFreq+0x19e>
  32901. 800e350: 69bb ldr r3, [r7, #24]
  32902. 800e352: 2b00 cmp r3, #0
  32903. 800e354: d003 beq.n 800e35e <HAL_RCCEx_GetPLL1ClockFreq+0x6a>
  32904. 800e356: 69bb ldr r3, [r7, #24]
  32905. 800e358: 2b01 cmp r3, #1
  32906. 800e35a: d056 beq.n 800e40a <HAL_RCCEx_GetPLL1ClockFreq+0x116>
  32907. 800e35c: e099 b.n 800e492 <HAL_RCCEx_GetPLL1ClockFreq+0x19e>
  32908. {
  32909. case RCC_PLLSOURCE_HSI: /* HSI used as PLL clock source */
  32910. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  32911. 800e35e: 4b88 ldr r3, [pc, #544] @ (800e580 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  32912. 800e360: 681b ldr r3, [r3, #0]
  32913. 800e362: f003 0320 and.w r3, r3, #32
  32914. 800e366: 2b00 cmp r3, #0
  32915. 800e368: d02d beq.n 800e3c6 <HAL_RCCEx_GetPLL1ClockFreq+0xd2>
  32916. {
  32917. hsivalue = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  32918. 800e36a: 4b85 ldr r3, [pc, #532] @ (800e580 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  32919. 800e36c: 681b ldr r3, [r3, #0]
  32920. 800e36e: 08db lsrs r3, r3, #3
  32921. 800e370: f003 0303 and.w r3, r3, #3
  32922. 800e374: 4a83 ldr r2, [pc, #524] @ (800e584 <HAL_RCCEx_GetPLL1ClockFreq+0x290>)
  32923. 800e376: fa22 f303 lsr.w r3, r2, r3
  32924. 800e37a: 60bb str r3, [r7, #8]
  32925. pll1vco = ((float_t)hsivalue / (float_t)pll1m) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  32926. 800e37c: 68bb ldr r3, [r7, #8]
  32927. 800e37e: ee07 3a90 vmov s15, r3
  32928. 800e382: eef8 6a67 vcvt.f32.u32 s13, s15
  32929. 800e386: 697b ldr r3, [r7, #20]
  32930. 800e388: ee07 3a90 vmov s15, r3
  32931. 800e38c: eef8 7a67 vcvt.f32.u32 s15, s15
  32932. 800e390: ee86 7aa7 vdiv.f32 s14, s13, s15
  32933. 800e394: 4b7a ldr r3, [pc, #488] @ (800e580 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  32934. 800e396: 6b1b ldr r3, [r3, #48] @ 0x30
  32935. 800e398: f3c3 0308 ubfx r3, r3, #0, #9
  32936. 800e39c: ee07 3a90 vmov s15, r3
  32937. 800e3a0: eef8 6a67 vcvt.f32.u32 s13, s15
  32938. 800e3a4: ed97 6a03 vldr s12, [r7, #12]
  32939. 800e3a8: eddf 5a77 vldr s11, [pc, #476] @ 800e588 <HAL_RCCEx_GetPLL1ClockFreq+0x294>
  32940. 800e3ac: eec6 7a25 vdiv.f32 s15, s12, s11
  32941. 800e3b0: ee76 7aa7 vadd.f32 s15, s13, s15
  32942. 800e3b4: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  32943. 800e3b8: ee77 7aa6 vadd.f32 s15, s15, s13
  32944. 800e3bc: ee67 7a27 vmul.f32 s15, s14, s15
  32945. 800e3c0: edc7 7a07 vstr s15, [r7, #28]
  32946. }
  32947. else
  32948. {
  32949. pll1vco = ((float_t)HSI_VALUE / (float_t)pll1m) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  32950. }
  32951. break;
  32952. 800e3c4: e087 b.n 800e4d6 <HAL_RCCEx_GetPLL1ClockFreq+0x1e2>
  32953. pll1vco = ((float_t)HSI_VALUE / (float_t)pll1m) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  32954. 800e3c6: 697b ldr r3, [r7, #20]
  32955. 800e3c8: ee07 3a90 vmov s15, r3
  32956. 800e3cc: eef8 7a67 vcvt.f32.u32 s15, s15
  32957. 800e3d0: eddf 6a6e vldr s13, [pc, #440] @ 800e58c <HAL_RCCEx_GetPLL1ClockFreq+0x298>
  32958. 800e3d4: ee86 7aa7 vdiv.f32 s14, s13, s15
  32959. 800e3d8: 4b69 ldr r3, [pc, #420] @ (800e580 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  32960. 800e3da: 6b1b ldr r3, [r3, #48] @ 0x30
  32961. 800e3dc: f3c3 0308 ubfx r3, r3, #0, #9
  32962. 800e3e0: ee07 3a90 vmov s15, r3
  32963. 800e3e4: eef8 6a67 vcvt.f32.u32 s13, s15
  32964. 800e3e8: ed97 6a03 vldr s12, [r7, #12]
  32965. 800e3ec: eddf 5a66 vldr s11, [pc, #408] @ 800e588 <HAL_RCCEx_GetPLL1ClockFreq+0x294>
  32966. 800e3f0: eec6 7a25 vdiv.f32 s15, s12, s11
  32967. 800e3f4: ee76 7aa7 vadd.f32 s15, s13, s15
  32968. 800e3f8: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  32969. 800e3fc: ee77 7aa6 vadd.f32 s15, s15, s13
  32970. 800e400: ee67 7a27 vmul.f32 s15, s14, s15
  32971. 800e404: edc7 7a07 vstr s15, [r7, #28]
  32972. break;
  32973. 800e408: e065 b.n 800e4d6 <HAL_RCCEx_GetPLL1ClockFreq+0x1e2>
  32974. case RCC_PLLSOURCE_CSI: /* CSI used as PLL clock source */
  32975. pll1vco = ((float_t)CSI_VALUE / (float_t)pll1m) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  32976. 800e40a: 697b ldr r3, [r7, #20]
  32977. 800e40c: ee07 3a90 vmov s15, r3
  32978. 800e410: eef8 7a67 vcvt.f32.u32 s15, s15
  32979. 800e414: eddf 6a5e vldr s13, [pc, #376] @ 800e590 <HAL_RCCEx_GetPLL1ClockFreq+0x29c>
  32980. 800e418: ee86 7aa7 vdiv.f32 s14, s13, s15
  32981. 800e41c: 4b58 ldr r3, [pc, #352] @ (800e580 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  32982. 800e41e: 6b1b ldr r3, [r3, #48] @ 0x30
  32983. 800e420: f3c3 0308 ubfx r3, r3, #0, #9
  32984. 800e424: ee07 3a90 vmov s15, r3
  32985. 800e428: eef8 6a67 vcvt.f32.u32 s13, s15
  32986. 800e42c: ed97 6a03 vldr s12, [r7, #12]
  32987. 800e430: eddf 5a55 vldr s11, [pc, #340] @ 800e588 <HAL_RCCEx_GetPLL1ClockFreq+0x294>
  32988. 800e434: eec6 7a25 vdiv.f32 s15, s12, s11
  32989. 800e438: ee76 7aa7 vadd.f32 s15, s13, s15
  32990. 800e43c: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  32991. 800e440: ee77 7aa6 vadd.f32 s15, s15, s13
  32992. 800e444: ee67 7a27 vmul.f32 s15, s14, s15
  32993. 800e448: edc7 7a07 vstr s15, [r7, #28]
  32994. break;
  32995. 800e44c: e043 b.n 800e4d6 <HAL_RCCEx_GetPLL1ClockFreq+0x1e2>
  32996. case RCC_PLLSOURCE_HSE: /* HSE used as PLL clock source */
  32997. pll1vco = ((float_t)HSE_VALUE / (float_t)pll1m) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  32998. 800e44e: 697b ldr r3, [r7, #20]
  32999. 800e450: ee07 3a90 vmov s15, r3
  33000. 800e454: eef8 7a67 vcvt.f32.u32 s15, s15
  33001. 800e458: eddf 6a4e vldr s13, [pc, #312] @ 800e594 <HAL_RCCEx_GetPLL1ClockFreq+0x2a0>
  33002. 800e45c: ee86 7aa7 vdiv.f32 s14, s13, s15
  33003. 800e460: 4b47 ldr r3, [pc, #284] @ (800e580 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  33004. 800e462: 6b1b ldr r3, [r3, #48] @ 0x30
  33005. 800e464: f3c3 0308 ubfx r3, r3, #0, #9
  33006. 800e468: ee07 3a90 vmov s15, r3
  33007. 800e46c: eef8 6a67 vcvt.f32.u32 s13, s15
  33008. 800e470: ed97 6a03 vldr s12, [r7, #12]
  33009. 800e474: eddf 5a44 vldr s11, [pc, #272] @ 800e588 <HAL_RCCEx_GetPLL1ClockFreq+0x294>
  33010. 800e478: eec6 7a25 vdiv.f32 s15, s12, s11
  33011. 800e47c: ee76 7aa7 vadd.f32 s15, s13, s15
  33012. 800e480: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  33013. 800e484: ee77 7aa6 vadd.f32 s15, s15, s13
  33014. 800e488: ee67 7a27 vmul.f32 s15, s14, s15
  33015. 800e48c: edc7 7a07 vstr s15, [r7, #28]
  33016. break;
  33017. 800e490: e021 b.n 800e4d6 <HAL_RCCEx_GetPLL1ClockFreq+0x1e2>
  33018. default:
  33019. pll1vco = ((float_t)HSI_VALUE / (float_t)pll1m) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  33020. 800e492: 697b ldr r3, [r7, #20]
  33021. 800e494: ee07 3a90 vmov s15, r3
  33022. 800e498: eef8 7a67 vcvt.f32.u32 s15, s15
  33023. 800e49c: eddf 6a3b vldr s13, [pc, #236] @ 800e58c <HAL_RCCEx_GetPLL1ClockFreq+0x298>
  33024. 800e4a0: ee86 7aa7 vdiv.f32 s14, s13, s15
  33025. 800e4a4: 4b36 ldr r3, [pc, #216] @ (800e580 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  33026. 800e4a6: 6b1b ldr r3, [r3, #48] @ 0x30
  33027. 800e4a8: f3c3 0308 ubfx r3, r3, #0, #9
  33028. 800e4ac: ee07 3a90 vmov s15, r3
  33029. 800e4b0: eef8 6a67 vcvt.f32.u32 s13, s15
  33030. 800e4b4: ed97 6a03 vldr s12, [r7, #12]
  33031. 800e4b8: eddf 5a33 vldr s11, [pc, #204] @ 800e588 <HAL_RCCEx_GetPLL1ClockFreq+0x294>
  33032. 800e4bc: eec6 7a25 vdiv.f32 s15, s12, s11
  33033. 800e4c0: ee76 7aa7 vadd.f32 s15, s13, s15
  33034. 800e4c4: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  33035. 800e4c8: ee77 7aa6 vadd.f32 s15, s15, s13
  33036. 800e4cc: ee67 7a27 vmul.f32 s15, s14, s15
  33037. 800e4d0: edc7 7a07 vstr s15, [r7, #28]
  33038. break;
  33039. 800e4d4: bf00 nop
  33040. }
  33041. PLL1_Clocks->PLL1_P_Frequency = (uint32_t)(float_t)(pll1vco / ((float_t)(uint32_t)((RCC->PLL1DIVR & RCC_PLL1DIVR_P1) >> 9) + (float_t)1)) ;
  33042. 800e4d6: 4b2a ldr r3, [pc, #168] @ (800e580 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  33043. 800e4d8: 6b1b ldr r3, [r3, #48] @ 0x30
  33044. 800e4da: 0a5b lsrs r3, r3, #9
  33045. 800e4dc: f003 037f and.w r3, r3, #127 @ 0x7f
  33046. 800e4e0: ee07 3a90 vmov s15, r3
  33047. 800e4e4: eef8 7a67 vcvt.f32.u32 s15, s15
  33048. 800e4e8: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  33049. 800e4ec: ee37 7a87 vadd.f32 s14, s15, s14
  33050. 800e4f0: edd7 6a07 vldr s13, [r7, #28]
  33051. 800e4f4: eec6 7a87 vdiv.f32 s15, s13, s14
  33052. 800e4f8: eefc 7ae7 vcvt.u32.f32 s15, s15
  33053. 800e4fc: ee17 2a90 vmov r2, s15
  33054. 800e500: 687b ldr r3, [r7, #4]
  33055. 800e502: 601a str r2, [r3, #0]
  33056. PLL1_Clocks->PLL1_Q_Frequency = (uint32_t)(float_t)(pll1vco / ((float_t)(uint32_t)((RCC->PLL1DIVR & RCC_PLL1DIVR_Q1) >> 16) + (float_t)1)) ;
  33057. 800e504: 4b1e ldr r3, [pc, #120] @ (800e580 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  33058. 800e506: 6b1b ldr r3, [r3, #48] @ 0x30
  33059. 800e508: 0c1b lsrs r3, r3, #16
  33060. 800e50a: f003 037f and.w r3, r3, #127 @ 0x7f
  33061. 800e50e: ee07 3a90 vmov s15, r3
  33062. 800e512: eef8 7a67 vcvt.f32.u32 s15, s15
  33063. 800e516: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  33064. 800e51a: ee37 7a87 vadd.f32 s14, s15, s14
  33065. 800e51e: edd7 6a07 vldr s13, [r7, #28]
  33066. 800e522: eec6 7a87 vdiv.f32 s15, s13, s14
  33067. 800e526: eefc 7ae7 vcvt.u32.f32 s15, s15
  33068. 800e52a: ee17 2a90 vmov r2, s15
  33069. 800e52e: 687b ldr r3, [r7, #4]
  33070. 800e530: 605a str r2, [r3, #4]
  33071. PLL1_Clocks->PLL1_R_Frequency = (uint32_t)(float_t)(pll1vco / ((float_t)(uint32_t)((RCC->PLL1DIVR & RCC_PLL1DIVR_R1) >> 24) + (float_t)1)) ;
  33072. 800e532: 4b13 ldr r3, [pc, #76] @ (800e580 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  33073. 800e534: 6b1b ldr r3, [r3, #48] @ 0x30
  33074. 800e536: 0e1b lsrs r3, r3, #24
  33075. 800e538: f003 037f and.w r3, r3, #127 @ 0x7f
  33076. 800e53c: ee07 3a90 vmov s15, r3
  33077. 800e540: eef8 7a67 vcvt.f32.u32 s15, s15
  33078. 800e544: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  33079. 800e548: ee37 7a87 vadd.f32 s14, s15, s14
  33080. 800e54c: edd7 6a07 vldr s13, [r7, #28]
  33081. 800e550: eec6 7a87 vdiv.f32 s15, s13, s14
  33082. 800e554: eefc 7ae7 vcvt.u32.f32 s15, s15
  33083. 800e558: ee17 2a90 vmov r2, s15
  33084. 800e55c: 687b ldr r3, [r7, #4]
  33085. 800e55e: 609a str r2, [r3, #8]
  33086. PLL1_Clocks->PLL1_P_Frequency = 0U;
  33087. PLL1_Clocks->PLL1_Q_Frequency = 0U;
  33088. PLL1_Clocks->PLL1_R_Frequency = 0U;
  33089. }
  33090. }
  33091. 800e560: e008 b.n 800e574 <HAL_RCCEx_GetPLL1ClockFreq+0x280>
  33092. PLL1_Clocks->PLL1_P_Frequency = 0U;
  33093. 800e562: 687b ldr r3, [r7, #4]
  33094. 800e564: 2200 movs r2, #0
  33095. 800e566: 601a str r2, [r3, #0]
  33096. PLL1_Clocks->PLL1_Q_Frequency = 0U;
  33097. 800e568: 687b ldr r3, [r7, #4]
  33098. 800e56a: 2200 movs r2, #0
  33099. 800e56c: 605a str r2, [r3, #4]
  33100. PLL1_Clocks->PLL1_R_Frequency = 0U;
  33101. 800e56e: 687b ldr r3, [r7, #4]
  33102. 800e570: 2200 movs r2, #0
  33103. 800e572: 609a str r2, [r3, #8]
  33104. }
  33105. 800e574: bf00 nop
  33106. 800e576: 3724 adds r7, #36 @ 0x24
  33107. 800e578: 46bd mov sp, r7
  33108. 800e57a: f85d 7b04 ldr.w r7, [sp], #4
  33109. 800e57e: 4770 bx lr
  33110. 800e580: 58024400 .word 0x58024400
  33111. 800e584: 03d09000 .word 0x03d09000
  33112. 800e588: 46000000 .word 0x46000000
  33113. 800e58c: 4c742400 .word 0x4c742400
  33114. 800e590: 4a742400 .word 0x4a742400
  33115. 800e594: 4bbebc20 .word 0x4bbebc20
  33116. 0800e598 <RCCEx_PLL2_Config>:
  33117. * @note PLL2 is temporary disabled to apply new parameters
  33118. *
  33119. * @retval HAL status
  33120. */
  33121. static HAL_StatusTypeDef RCCEx_PLL2_Config(RCC_PLL2InitTypeDef *pll2, uint32_t Divider)
  33122. {
  33123. 800e598: b580 push {r7, lr}
  33124. 800e59a: b084 sub sp, #16
  33125. 800e59c: af00 add r7, sp, #0
  33126. 800e59e: 6078 str r0, [r7, #4]
  33127. 800e5a0: 6039 str r1, [r7, #0]
  33128. uint32_t tickstart;
  33129. HAL_StatusTypeDef status = HAL_OK;
  33130. 800e5a2: 2300 movs r3, #0
  33131. 800e5a4: 73fb strb r3, [r7, #15]
  33132. assert_param(IS_RCC_PLL2RGE_VALUE(pll2->PLL2RGE));
  33133. assert_param(IS_RCC_PLL2VCO_VALUE(pll2->PLL2VCOSEL));
  33134. assert_param(IS_RCC_PLLFRACN_VALUE(pll2->PLL2FRACN));
  33135. /* Check that PLL2 OSC clock source is already set */
  33136. if (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_NONE)
  33137. 800e5a6: 4b53 ldr r3, [pc, #332] @ (800e6f4 <RCCEx_PLL2_Config+0x15c>)
  33138. 800e5a8: 6a9b ldr r3, [r3, #40] @ 0x28
  33139. 800e5aa: f003 0303 and.w r3, r3, #3
  33140. 800e5ae: 2b03 cmp r3, #3
  33141. 800e5b0: d101 bne.n 800e5b6 <RCCEx_PLL2_Config+0x1e>
  33142. {
  33143. return HAL_ERROR;
  33144. 800e5b2: 2301 movs r3, #1
  33145. 800e5b4: e099 b.n 800e6ea <RCCEx_PLL2_Config+0x152>
  33146. else
  33147. {
  33148. /* Disable PLL2. */
  33149. __HAL_RCC_PLL2_DISABLE();
  33150. 800e5b6: 4b4f ldr r3, [pc, #316] @ (800e6f4 <RCCEx_PLL2_Config+0x15c>)
  33151. 800e5b8: 681b ldr r3, [r3, #0]
  33152. 800e5ba: 4a4e ldr r2, [pc, #312] @ (800e6f4 <RCCEx_PLL2_Config+0x15c>)
  33153. 800e5bc: f023 6380 bic.w r3, r3, #67108864 @ 0x4000000
  33154. 800e5c0: 6013 str r3, [r2, #0]
  33155. /* Get Start Tick*/
  33156. tickstart = HAL_GetTick();
  33157. 800e5c2: f7f6 ff0b bl 80053dc <HAL_GetTick>
  33158. 800e5c6: 60b8 str r0, [r7, #8]
  33159. /* Wait till PLL is disabled */
  33160. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != 0U)
  33161. 800e5c8: e008 b.n 800e5dc <RCCEx_PLL2_Config+0x44>
  33162. {
  33163. if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE)
  33164. 800e5ca: f7f6 ff07 bl 80053dc <HAL_GetTick>
  33165. 800e5ce: 4602 mov r2, r0
  33166. 800e5d0: 68bb ldr r3, [r7, #8]
  33167. 800e5d2: 1ad3 subs r3, r2, r3
  33168. 800e5d4: 2b02 cmp r3, #2
  33169. 800e5d6: d901 bls.n 800e5dc <RCCEx_PLL2_Config+0x44>
  33170. {
  33171. return HAL_TIMEOUT;
  33172. 800e5d8: 2303 movs r3, #3
  33173. 800e5da: e086 b.n 800e6ea <RCCEx_PLL2_Config+0x152>
  33174. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != 0U)
  33175. 800e5dc: 4b45 ldr r3, [pc, #276] @ (800e6f4 <RCCEx_PLL2_Config+0x15c>)
  33176. 800e5de: 681b ldr r3, [r3, #0]
  33177. 800e5e0: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  33178. 800e5e4: 2b00 cmp r3, #0
  33179. 800e5e6: d1f0 bne.n 800e5ca <RCCEx_PLL2_Config+0x32>
  33180. }
  33181. }
  33182. /* Configure PLL2 multiplication and division factors. */
  33183. __HAL_RCC_PLL2_CONFIG(pll2->PLL2M,
  33184. 800e5e8: 4b42 ldr r3, [pc, #264] @ (800e6f4 <RCCEx_PLL2_Config+0x15c>)
  33185. 800e5ea: 6a9b ldr r3, [r3, #40] @ 0x28
  33186. 800e5ec: f423 327c bic.w r2, r3, #258048 @ 0x3f000
  33187. 800e5f0: 687b ldr r3, [r7, #4]
  33188. 800e5f2: 681b ldr r3, [r3, #0]
  33189. 800e5f4: 031b lsls r3, r3, #12
  33190. 800e5f6: 493f ldr r1, [pc, #252] @ (800e6f4 <RCCEx_PLL2_Config+0x15c>)
  33191. 800e5f8: 4313 orrs r3, r2
  33192. 800e5fa: 628b str r3, [r1, #40] @ 0x28
  33193. 800e5fc: 687b ldr r3, [r7, #4]
  33194. 800e5fe: 685b ldr r3, [r3, #4]
  33195. 800e600: 3b01 subs r3, #1
  33196. 800e602: f3c3 0208 ubfx r2, r3, #0, #9
  33197. 800e606: 687b ldr r3, [r7, #4]
  33198. 800e608: 689b ldr r3, [r3, #8]
  33199. 800e60a: 3b01 subs r3, #1
  33200. 800e60c: 025b lsls r3, r3, #9
  33201. 800e60e: b29b uxth r3, r3
  33202. 800e610: 431a orrs r2, r3
  33203. 800e612: 687b ldr r3, [r7, #4]
  33204. 800e614: 68db ldr r3, [r3, #12]
  33205. 800e616: 3b01 subs r3, #1
  33206. 800e618: 041b lsls r3, r3, #16
  33207. 800e61a: f403 03fe and.w r3, r3, #8323072 @ 0x7f0000
  33208. 800e61e: 431a orrs r2, r3
  33209. 800e620: 687b ldr r3, [r7, #4]
  33210. 800e622: 691b ldr r3, [r3, #16]
  33211. 800e624: 3b01 subs r3, #1
  33212. 800e626: 061b lsls r3, r3, #24
  33213. 800e628: f003 43fe and.w r3, r3, #2130706432 @ 0x7f000000
  33214. 800e62c: 4931 ldr r1, [pc, #196] @ (800e6f4 <RCCEx_PLL2_Config+0x15c>)
  33215. 800e62e: 4313 orrs r3, r2
  33216. 800e630: 638b str r3, [r1, #56] @ 0x38
  33217. pll2->PLL2P,
  33218. pll2->PLL2Q,
  33219. pll2->PLL2R);
  33220. /* Select PLL2 input reference frequency range: VCI */
  33221. __HAL_RCC_PLL2_VCIRANGE(pll2->PLL2RGE) ;
  33222. 800e632: 4b30 ldr r3, [pc, #192] @ (800e6f4 <RCCEx_PLL2_Config+0x15c>)
  33223. 800e634: 6adb ldr r3, [r3, #44] @ 0x2c
  33224. 800e636: f023 02c0 bic.w r2, r3, #192 @ 0xc0
  33225. 800e63a: 687b ldr r3, [r7, #4]
  33226. 800e63c: 695b ldr r3, [r3, #20]
  33227. 800e63e: 492d ldr r1, [pc, #180] @ (800e6f4 <RCCEx_PLL2_Config+0x15c>)
  33228. 800e640: 4313 orrs r3, r2
  33229. 800e642: 62cb str r3, [r1, #44] @ 0x2c
  33230. /* Select PLL2 output frequency range : VCO */
  33231. __HAL_RCC_PLL2_VCORANGE(pll2->PLL2VCOSEL) ;
  33232. 800e644: 4b2b ldr r3, [pc, #172] @ (800e6f4 <RCCEx_PLL2_Config+0x15c>)
  33233. 800e646: 6adb ldr r3, [r3, #44] @ 0x2c
  33234. 800e648: f023 0220 bic.w r2, r3, #32
  33235. 800e64c: 687b ldr r3, [r7, #4]
  33236. 800e64e: 699b ldr r3, [r3, #24]
  33237. 800e650: 4928 ldr r1, [pc, #160] @ (800e6f4 <RCCEx_PLL2_Config+0x15c>)
  33238. 800e652: 4313 orrs r3, r2
  33239. 800e654: 62cb str r3, [r1, #44] @ 0x2c
  33240. /* Disable PLL2FRACN . */
  33241. __HAL_RCC_PLL2FRACN_DISABLE();
  33242. 800e656: 4b27 ldr r3, [pc, #156] @ (800e6f4 <RCCEx_PLL2_Config+0x15c>)
  33243. 800e658: 6adb ldr r3, [r3, #44] @ 0x2c
  33244. 800e65a: 4a26 ldr r2, [pc, #152] @ (800e6f4 <RCCEx_PLL2_Config+0x15c>)
  33245. 800e65c: f023 0310 bic.w r3, r3, #16
  33246. 800e660: 62d3 str r3, [r2, #44] @ 0x2c
  33247. /* Configures PLL2 clock Fractional Part Of The Multiplication Factor */
  33248. __HAL_RCC_PLL2FRACN_CONFIG(pll2->PLL2FRACN);
  33249. 800e662: 4b24 ldr r3, [pc, #144] @ (800e6f4 <RCCEx_PLL2_Config+0x15c>)
  33250. 800e664: 6bda ldr r2, [r3, #60] @ 0x3c
  33251. 800e666: 4b24 ldr r3, [pc, #144] @ (800e6f8 <RCCEx_PLL2_Config+0x160>)
  33252. 800e668: 4013 ands r3, r2
  33253. 800e66a: 687a ldr r2, [r7, #4]
  33254. 800e66c: 69d2 ldr r2, [r2, #28]
  33255. 800e66e: 00d2 lsls r2, r2, #3
  33256. 800e670: 4920 ldr r1, [pc, #128] @ (800e6f4 <RCCEx_PLL2_Config+0x15c>)
  33257. 800e672: 4313 orrs r3, r2
  33258. 800e674: 63cb str r3, [r1, #60] @ 0x3c
  33259. /* Enable PLL2FRACN . */
  33260. __HAL_RCC_PLL2FRACN_ENABLE();
  33261. 800e676: 4b1f ldr r3, [pc, #124] @ (800e6f4 <RCCEx_PLL2_Config+0x15c>)
  33262. 800e678: 6adb ldr r3, [r3, #44] @ 0x2c
  33263. 800e67a: 4a1e ldr r2, [pc, #120] @ (800e6f4 <RCCEx_PLL2_Config+0x15c>)
  33264. 800e67c: f043 0310 orr.w r3, r3, #16
  33265. 800e680: 62d3 str r3, [r2, #44] @ 0x2c
  33266. /* Enable the PLL2 clock output */
  33267. if (Divider == DIVIDER_P_UPDATE)
  33268. 800e682: 683b ldr r3, [r7, #0]
  33269. 800e684: 2b00 cmp r3, #0
  33270. 800e686: d106 bne.n 800e696 <RCCEx_PLL2_Config+0xfe>
  33271. {
  33272. __HAL_RCC_PLL2CLKOUT_ENABLE(RCC_PLL2_DIVP);
  33273. 800e688: 4b1a ldr r3, [pc, #104] @ (800e6f4 <RCCEx_PLL2_Config+0x15c>)
  33274. 800e68a: 6adb ldr r3, [r3, #44] @ 0x2c
  33275. 800e68c: 4a19 ldr r2, [pc, #100] @ (800e6f4 <RCCEx_PLL2_Config+0x15c>)
  33276. 800e68e: f443 2300 orr.w r3, r3, #524288 @ 0x80000
  33277. 800e692: 62d3 str r3, [r2, #44] @ 0x2c
  33278. 800e694: e00f b.n 800e6b6 <RCCEx_PLL2_Config+0x11e>
  33279. }
  33280. else if (Divider == DIVIDER_Q_UPDATE)
  33281. 800e696: 683b ldr r3, [r7, #0]
  33282. 800e698: 2b01 cmp r3, #1
  33283. 800e69a: d106 bne.n 800e6aa <RCCEx_PLL2_Config+0x112>
  33284. {
  33285. __HAL_RCC_PLL2CLKOUT_ENABLE(RCC_PLL2_DIVQ);
  33286. 800e69c: 4b15 ldr r3, [pc, #84] @ (800e6f4 <RCCEx_PLL2_Config+0x15c>)
  33287. 800e69e: 6adb ldr r3, [r3, #44] @ 0x2c
  33288. 800e6a0: 4a14 ldr r2, [pc, #80] @ (800e6f4 <RCCEx_PLL2_Config+0x15c>)
  33289. 800e6a2: f443 1380 orr.w r3, r3, #1048576 @ 0x100000
  33290. 800e6a6: 62d3 str r3, [r2, #44] @ 0x2c
  33291. 800e6a8: e005 b.n 800e6b6 <RCCEx_PLL2_Config+0x11e>
  33292. }
  33293. else
  33294. {
  33295. __HAL_RCC_PLL2CLKOUT_ENABLE(RCC_PLL2_DIVR);
  33296. 800e6aa: 4b12 ldr r3, [pc, #72] @ (800e6f4 <RCCEx_PLL2_Config+0x15c>)
  33297. 800e6ac: 6adb ldr r3, [r3, #44] @ 0x2c
  33298. 800e6ae: 4a11 ldr r2, [pc, #68] @ (800e6f4 <RCCEx_PLL2_Config+0x15c>)
  33299. 800e6b0: f443 1300 orr.w r3, r3, #2097152 @ 0x200000
  33300. 800e6b4: 62d3 str r3, [r2, #44] @ 0x2c
  33301. }
  33302. /* Enable PLL2. */
  33303. __HAL_RCC_PLL2_ENABLE();
  33304. 800e6b6: 4b0f ldr r3, [pc, #60] @ (800e6f4 <RCCEx_PLL2_Config+0x15c>)
  33305. 800e6b8: 681b ldr r3, [r3, #0]
  33306. 800e6ba: 4a0e ldr r2, [pc, #56] @ (800e6f4 <RCCEx_PLL2_Config+0x15c>)
  33307. 800e6bc: f043 6380 orr.w r3, r3, #67108864 @ 0x4000000
  33308. 800e6c0: 6013 str r3, [r2, #0]
  33309. /* Get Start Tick*/
  33310. tickstart = HAL_GetTick();
  33311. 800e6c2: f7f6 fe8b bl 80053dc <HAL_GetTick>
  33312. 800e6c6: 60b8 str r0, [r7, #8]
  33313. /* Wait till PLL2 is ready */
  33314. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) == 0U)
  33315. 800e6c8: e008 b.n 800e6dc <RCCEx_PLL2_Config+0x144>
  33316. {
  33317. if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE)
  33318. 800e6ca: f7f6 fe87 bl 80053dc <HAL_GetTick>
  33319. 800e6ce: 4602 mov r2, r0
  33320. 800e6d0: 68bb ldr r3, [r7, #8]
  33321. 800e6d2: 1ad3 subs r3, r2, r3
  33322. 800e6d4: 2b02 cmp r3, #2
  33323. 800e6d6: d901 bls.n 800e6dc <RCCEx_PLL2_Config+0x144>
  33324. {
  33325. return HAL_TIMEOUT;
  33326. 800e6d8: 2303 movs r3, #3
  33327. 800e6da: e006 b.n 800e6ea <RCCEx_PLL2_Config+0x152>
  33328. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) == 0U)
  33329. 800e6dc: 4b05 ldr r3, [pc, #20] @ (800e6f4 <RCCEx_PLL2_Config+0x15c>)
  33330. 800e6de: 681b ldr r3, [r3, #0]
  33331. 800e6e0: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  33332. 800e6e4: 2b00 cmp r3, #0
  33333. 800e6e6: d0f0 beq.n 800e6ca <RCCEx_PLL2_Config+0x132>
  33334. }
  33335. }
  33336. return status;
  33337. 800e6e8: 7bfb ldrb r3, [r7, #15]
  33338. }
  33339. 800e6ea: 4618 mov r0, r3
  33340. 800e6ec: 3710 adds r7, #16
  33341. 800e6ee: 46bd mov sp, r7
  33342. 800e6f0: bd80 pop {r7, pc}
  33343. 800e6f2: bf00 nop
  33344. 800e6f4: 58024400 .word 0x58024400
  33345. 800e6f8: ffff0007 .word 0xffff0007
  33346. 0800e6fc <RCCEx_PLL3_Config>:
  33347. * @note PLL3 is temporary disabled to apply new parameters
  33348. *
  33349. * @retval HAL status
  33350. */
  33351. static HAL_StatusTypeDef RCCEx_PLL3_Config(RCC_PLL3InitTypeDef *pll3, uint32_t Divider)
  33352. {
  33353. 800e6fc: b580 push {r7, lr}
  33354. 800e6fe: b084 sub sp, #16
  33355. 800e700: af00 add r7, sp, #0
  33356. 800e702: 6078 str r0, [r7, #4]
  33357. 800e704: 6039 str r1, [r7, #0]
  33358. uint32_t tickstart;
  33359. HAL_StatusTypeDef status = HAL_OK;
  33360. 800e706: 2300 movs r3, #0
  33361. 800e708: 73fb strb r3, [r7, #15]
  33362. assert_param(IS_RCC_PLL3RGE_VALUE(pll3->PLL3RGE));
  33363. assert_param(IS_RCC_PLL3VCO_VALUE(pll3->PLL3VCOSEL));
  33364. assert_param(IS_RCC_PLLFRACN_VALUE(pll3->PLL3FRACN));
  33365. /* Check that PLL3 OSC clock source is already set */
  33366. if (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_NONE)
  33367. 800e70a: 4b53 ldr r3, [pc, #332] @ (800e858 <RCCEx_PLL3_Config+0x15c>)
  33368. 800e70c: 6a9b ldr r3, [r3, #40] @ 0x28
  33369. 800e70e: f003 0303 and.w r3, r3, #3
  33370. 800e712: 2b03 cmp r3, #3
  33371. 800e714: d101 bne.n 800e71a <RCCEx_PLL3_Config+0x1e>
  33372. {
  33373. return HAL_ERROR;
  33374. 800e716: 2301 movs r3, #1
  33375. 800e718: e099 b.n 800e84e <RCCEx_PLL3_Config+0x152>
  33376. else
  33377. {
  33378. /* Disable PLL3. */
  33379. __HAL_RCC_PLL3_DISABLE();
  33380. 800e71a: 4b4f ldr r3, [pc, #316] @ (800e858 <RCCEx_PLL3_Config+0x15c>)
  33381. 800e71c: 681b ldr r3, [r3, #0]
  33382. 800e71e: 4a4e ldr r2, [pc, #312] @ (800e858 <RCCEx_PLL3_Config+0x15c>)
  33383. 800e720: f023 5380 bic.w r3, r3, #268435456 @ 0x10000000
  33384. 800e724: 6013 str r3, [r2, #0]
  33385. /* Get Start Tick*/
  33386. tickstart = HAL_GetTick();
  33387. 800e726: f7f6 fe59 bl 80053dc <HAL_GetTick>
  33388. 800e72a: 60b8 str r0, [r7, #8]
  33389. /* Wait till PLL3 is ready */
  33390. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL3RDY) != 0U)
  33391. 800e72c: e008 b.n 800e740 <RCCEx_PLL3_Config+0x44>
  33392. {
  33393. if ((HAL_GetTick() - tickstart) > PLL3_TIMEOUT_VALUE)
  33394. 800e72e: f7f6 fe55 bl 80053dc <HAL_GetTick>
  33395. 800e732: 4602 mov r2, r0
  33396. 800e734: 68bb ldr r3, [r7, #8]
  33397. 800e736: 1ad3 subs r3, r2, r3
  33398. 800e738: 2b02 cmp r3, #2
  33399. 800e73a: d901 bls.n 800e740 <RCCEx_PLL3_Config+0x44>
  33400. {
  33401. return HAL_TIMEOUT;
  33402. 800e73c: 2303 movs r3, #3
  33403. 800e73e: e086 b.n 800e84e <RCCEx_PLL3_Config+0x152>
  33404. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL3RDY) != 0U)
  33405. 800e740: 4b45 ldr r3, [pc, #276] @ (800e858 <RCCEx_PLL3_Config+0x15c>)
  33406. 800e742: 681b ldr r3, [r3, #0]
  33407. 800e744: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  33408. 800e748: 2b00 cmp r3, #0
  33409. 800e74a: d1f0 bne.n 800e72e <RCCEx_PLL3_Config+0x32>
  33410. }
  33411. }
  33412. /* Configure the PLL3 multiplication and division factors. */
  33413. __HAL_RCC_PLL3_CONFIG(pll3->PLL3M,
  33414. 800e74c: 4b42 ldr r3, [pc, #264] @ (800e858 <RCCEx_PLL3_Config+0x15c>)
  33415. 800e74e: 6a9b ldr r3, [r3, #40] @ 0x28
  33416. 800e750: f023 727c bic.w r2, r3, #66060288 @ 0x3f00000
  33417. 800e754: 687b ldr r3, [r7, #4]
  33418. 800e756: 681b ldr r3, [r3, #0]
  33419. 800e758: 051b lsls r3, r3, #20
  33420. 800e75a: 493f ldr r1, [pc, #252] @ (800e858 <RCCEx_PLL3_Config+0x15c>)
  33421. 800e75c: 4313 orrs r3, r2
  33422. 800e75e: 628b str r3, [r1, #40] @ 0x28
  33423. 800e760: 687b ldr r3, [r7, #4]
  33424. 800e762: 685b ldr r3, [r3, #4]
  33425. 800e764: 3b01 subs r3, #1
  33426. 800e766: f3c3 0208 ubfx r2, r3, #0, #9
  33427. 800e76a: 687b ldr r3, [r7, #4]
  33428. 800e76c: 689b ldr r3, [r3, #8]
  33429. 800e76e: 3b01 subs r3, #1
  33430. 800e770: 025b lsls r3, r3, #9
  33431. 800e772: b29b uxth r3, r3
  33432. 800e774: 431a orrs r2, r3
  33433. 800e776: 687b ldr r3, [r7, #4]
  33434. 800e778: 68db ldr r3, [r3, #12]
  33435. 800e77a: 3b01 subs r3, #1
  33436. 800e77c: 041b lsls r3, r3, #16
  33437. 800e77e: f403 03fe and.w r3, r3, #8323072 @ 0x7f0000
  33438. 800e782: 431a orrs r2, r3
  33439. 800e784: 687b ldr r3, [r7, #4]
  33440. 800e786: 691b ldr r3, [r3, #16]
  33441. 800e788: 3b01 subs r3, #1
  33442. 800e78a: 061b lsls r3, r3, #24
  33443. 800e78c: f003 43fe and.w r3, r3, #2130706432 @ 0x7f000000
  33444. 800e790: 4931 ldr r1, [pc, #196] @ (800e858 <RCCEx_PLL3_Config+0x15c>)
  33445. 800e792: 4313 orrs r3, r2
  33446. 800e794: 640b str r3, [r1, #64] @ 0x40
  33447. pll3->PLL3P,
  33448. pll3->PLL3Q,
  33449. pll3->PLL3R);
  33450. /* Select PLL3 input reference frequency range: VCI */
  33451. __HAL_RCC_PLL3_VCIRANGE(pll3->PLL3RGE) ;
  33452. 800e796: 4b30 ldr r3, [pc, #192] @ (800e858 <RCCEx_PLL3_Config+0x15c>)
  33453. 800e798: 6adb ldr r3, [r3, #44] @ 0x2c
  33454. 800e79a: f423 6240 bic.w r2, r3, #3072 @ 0xc00
  33455. 800e79e: 687b ldr r3, [r7, #4]
  33456. 800e7a0: 695b ldr r3, [r3, #20]
  33457. 800e7a2: 492d ldr r1, [pc, #180] @ (800e858 <RCCEx_PLL3_Config+0x15c>)
  33458. 800e7a4: 4313 orrs r3, r2
  33459. 800e7a6: 62cb str r3, [r1, #44] @ 0x2c
  33460. /* Select PLL3 output frequency range : VCO */
  33461. __HAL_RCC_PLL3_VCORANGE(pll3->PLL3VCOSEL) ;
  33462. 800e7a8: 4b2b ldr r3, [pc, #172] @ (800e858 <RCCEx_PLL3_Config+0x15c>)
  33463. 800e7aa: 6adb ldr r3, [r3, #44] @ 0x2c
  33464. 800e7ac: f423 7200 bic.w r2, r3, #512 @ 0x200
  33465. 800e7b0: 687b ldr r3, [r7, #4]
  33466. 800e7b2: 699b ldr r3, [r3, #24]
  33467. 800e7b4: 4928 ldr r1, [pc, #160] @ (800e858 <RCCEx_PLL3_Config+0x15c>)
  33468. 800e7b6: 4313 orrs r3, r2
  33469. 800e7b8: 62cb str r3, [r1, #44] @ 0x2c
  33470. /* Disable PLL3FRACN . */
  33471. __HAL_RCC_PLL3FRACN_DISABLE();
  33472. 800e7ba: 4b27 ldr r3, [pc, #156] @ (800e858 <RCCEx_PLL3_Config+0x15c>)
  33473. 800e7bc: 6adb ldr r3, [r3, #44] @ 0x2c
  33474. 800e7be: 4a26 ldr r2, [pc, #152] @ (800e858 <RCCEx_PLL3_Config+0x15c>)
  33475. 800e7c0: f423 7380 bic.w r3, r3, #256 @ 0x100
  33476. 800e7c4: 62d3 str r3, [r2, #44] @ 0x2c
  33477. /* Configures PLL3 clock Fractional Part Of The Multiplication Factor */
  33478. __HAL_RCC_PLL3FRACN_CONFIG(pll3->PLL3FRACN);
  33479. 800e7c6: 4b24 ldr r3, [pc, #144] @ (800e858 <RCCEx_PLL3_Config+0x15c>)
  33480. 800e7c8: 6c5a ldr r2, [r3, #68] @ 0x44
  33481. 800e7ca: 4b24 ldr r3, [pc, #144] @ (800e85c <RCCEx_PLL3_Config+0x160>)
  33482. 800e7cc: 4013 ands r3, r2
  33483. 800e7ce: 687a ldr r2, [r7, #4]
  33484. 800e7d0: 69d2 ldr r2, [r2, #28]
  33485. 800e7d2: 00d2 lsls r2, r2, #3
  33486. 800e7d4: 4920 ldr r1, [pc, #128] @ (800e858 <RCCEx_PLL3_Config+0x15c>)
  33487. 800e7d6: 4313 orrs r3, r2
  33488. 800e7d8: 644b str r3, [r1, #68] @ 0x44
  33489. /* Enable PLL3FRACN . */
  33490. __HAL_RCC_PLL3FRACN_ENABLE();
  33491. 800e7da: 4b1f ldr r3, [pc, #124] @ (800e858 <RCCEx_PLL3_Config+0x15c>)
  33492. 800e7dc: 6adb ldr r3, [r3, #44] @ 0x2c
  33493. 800e7de: 4a1e ldr r2, [pc, #120] @ (800e858 <RCCEx_PLL3_Config+0x15c>)
  33494. 800e7e0: f443 7380 orr.w r3, r3, #256 @ 0x100
  33495. 800e7e4: 62d3 str r3, [r2, #44] @ 0x2c
  33496. /* Enable the PLL3 clock output */
  33497. if (Divider == DIVIDER_P_UPDATE)
  33498. 800e7e6: 683b ldr r3, [r7, #0]
  33499. 800e7e8: 2b00 cmp r3, #0
  33500. 800e7ea: d106 bne.n 800e7fa <RCCEx_PLL3_Config+0xfe>
  33501. {
  33502. __HAL_RCC_PLL3CLKOUT_ENABLE(RCC_PLL3_DIVP);
  33503. 800e7ec: 4b1a ldr r3, [pc, #104] @ (800e858 <RCCEx_PLL3_Config+0x15c>)
  33504. 800e7ee: 6adb ldr r3, [r3, #44] @ 0x2c
  33505. 800e7f0: 4a19 ldr r2, [pc, #100] @ (800e858 <RCCEx_PLL3_Config+0x15c>)
  33506. 800e7f2: f443 0380 orr.w r3, r3, #4194304 @ 0x400000
  33507. 800e7f6: 62d3 str r3, [r2, #44] @ 0x2c
  33508. 800e7f8: e00f b.n 800e81a <RCCEx_PLL3_Config+0x11e>
  33509. }
  33510. else if (Divider == DIVIDER_Q_UPDATE)
  33511. 800e7fa: 683b ldr r3, [r7, #0]
  33512. 800e7fc: 2b01 cmp r3, #1
  33513. 800e7fe: d106 bne.n 800e80e <RCCEx_PLL3_Config+0x112>
  33514. {
  33515. __HAL_RCC_PLL3CLKOUT_ENABLE(RCC_PLL3_DIVQ);
  33516. 800e800: 4b15 ldr r3, [pc, #84] @ (800e858 <RCCEx_PLL3_Config+0x15c>)
  33517. 800e802: 6adb ldr r3, [r3, #44] @ 0x2c
  33518. 800e804: 4a14 ldr r2, [pc, #80] @ (800e858 <RCCEx_PLL3_Config+0x15c>)
  33519. 800e806: f443 0300 orr.w r3, r3, #8388608 @ 0x800000
  33520. 800e80a: 62d3 str r3, [r2, #44] @ 0x2c
  33521. 800e80c: e005 b.n 800e81a <RCCEx_PLL3_Config+0x11e>
  33522. }
  33523. else
  33524. {
  33525. __HAL_RCC_PLL3CLKOUT_ENABLE(RCC_PLL3_DIVR);
  33526. 800e80e: 4b12 ldr r3, [pc, #72] @ (800e858 <RCCEx_PLL3_Config+0x15c>)
  33527. 800e810: 6adb ldr r3, [r3, #44] @ 0x2c
  33528. 800e812: 4a11 ldr r2, [pc, #68] @ (800e858 <RCCEx_PLL3_Config+0x15c>)
  33529. 800e814: f043 7380 orr.w r3, r3, #16777216 @ 0x1000000
  33530. 800e818: 62d3 str r3, [r2, #44] @ 0x2c
  33531. }
  33532. /* Enable PLL3. */
  33533. __HAL_RCC_PLL3_ENABLE();
  33534. 800e81a: 4b0f ldr r3, [pc, #60] @ (800e858 <RCCEx_PLL3_Config+0x15c>)
  33535. 800e81c: 681b ldr r3, [r3, #0]
  33536. 800e81e: 4a0e ldr r2, [pc, #56] @ (800e858 <RCCEx_PLL3_Config+0x15c>)
  33537. 800e820: f043 5380 orr.w r3, r3, #268435456 @ 0x10000000
  33538. 800e824: 6013 str r3, [r2, #0]
  33539. /* Get Start Tick*/
  33540. tickstart = HAL_GetTick();
  33541. 800e826: f7f6 fdd9 bl 80053dc <HAL_GetTick>
  33542. 800e82a: 60b8 str r0, [r7, #8]
  33543. /* Wait till PLL3 is ready */
  33544. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL3RDY) == 0U)
  33545. 800e82c: e008 b.n 800e840 <RCCEx_PLL3_Config+0x144>
  33546. {
  33547. if ((HAL_GetTick() - tickstart) > PLL3_TIMEOUT_VALUE)
  33548. 800e82e: f7f6 fdd5 bl 80053dc <HAL_GetTick>
  33549. 800e832: 4602 mov r2, r0
  33550. 800e834: 68bb ldr r3, [r7, #8]
  33551. 800e836: 1ad3 subs r3, r2, r3
  33552. 800e838: 2b02 cmp r3, #2
  33553. 800e83a: d901 bls.n 800e840 <RCCEx_PLL3_Config+0x144>
  33554. {
  33555. return HAL_TIMEOUT;
  33556. 800e83c: 2303 movs r3, #3
  33557. 800e83e: e006 b.n 800e84e <RCCEx_PLL3_Config+0x152>
  33558. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL3RDY) == 0U)
  33559. 800e840: 4b05 ldr r3, [pc, #20] @ (800e858 <RCCEx_PLL3_Config+0x15c>)
  33560. 800e842: 681b ldr r3, [r3, #0]
  33561. 800e844: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  33562. 800e848: 2b00 cmp r3, #0
  33563. 800e84a: d0f0 beq.n 800e82e <RCCEx_PLL3_Config+0x132>
  33564. }
  33565. }
  33566. return status;
  33567. 800e84c: 7bfb ldrb r3, [r7, #15]
  33568. }
  33569. 800e84e: 4618 mov r0, r3
  33570. 800e850: 3710 adds r7, #16
  33571. 800e852: 46bd mov sp, r7
  33572. 800e854: bd80 pop {r7, pc}
  33573. 800e856: bf00 nop
  33574. 800e858: 58024400 .word 0x58024400
  33575. 800e85c: ffff0007 .word 0xffff0007
  33576. 0800e860 <HAL_RNG_Init>:
  33577. * @param hrng pointer to a RNG_HandleTypeDef structure that contains
  33578. * the configuration information for RNG.
  33579. * @retval HAL status
  33580. */
  33581. HAL_StatusTypeDef HAL_RNG_Init(RNG_HandleTypeDef *hrng)
  33582. {
  33583. 800e860: b580 push {r7, lr}
  33584. 800e862: b084 sub sp, #16
  33585. 800e864: af00 add r7, sp, #0
  33586. 800e866: 6078 str r0, [r7, #4]
  33587. uint32_t tickstart;
  33588. /* Check the RNG handle allocation */
  33589. if (hrng == NULL)
  33590. 800e868: 687b ldr r3, [r7, #4]
  33591. 800e86a: 2b00 cmp r3, #0
  33592. 800e86c: d101 bne.n 800e872 <HAL_RNG_Init+0x12>
  33593. {
  33594. return HAL_ERROR;
  33595. 800e86e: 2301 movs r3, #1
  33596. 800e870: e054 b.n 800e91c <HAL_RNG_Init+0xbc>
  33597. /* Init the low level hardware */
  33598. hrng->MspInitCallback(hrng);
  33599. }
  33600. #else
  33601. if (hrng->State == HAL_RNG_STATE_RESET)
  33602. 800e872: 687b ldr r3, [r7, #4]
  33603. 800e874: 7a5b ldrb r3, [r3, #9]
  33604. 800e876: b2db uxtb r3, r3
  33605. 800e878: 2b00 cmp r3, #0
  33606. 800e87a: d105 bne.n 800e888 <HAL_RNG_Init+0x28>
  33607. {
  33608. /* Allocate lock resource and initialize it */
  33609. hrng->Lock = HAL_UNLOCKED;
  33610. 800e87c: 687b ldr r3, [r7, #4]
  33611. 800e87e: 2200 movs r2, #0
  33612. 800e880: 721a strb r2, [r3, #8]
  33613. /* Init the low level hardware */
  33614. HAL_RNG_MspInit(hrng);
  33615. 800e882: 6878 ldr r0, [r7, #4]
  33616. 800e884: f7f5 f84c bl 8003920 <HAL_RNG_MspInit>
  33617. }
  33618. #endif /* USE_HAL_RNG_REGISTER_CALLBACKS */
  33619. /* Change RNG peripheral state */
  33620. hrng->State = HAL_RNG_STATE_BUSY;
  33621. 800e888: 687b ldr r3, [r7, #4]
  33622. 800e88a: 2202 movs r2, #2
  33623. 800e88c: 725a strb r2, [r3, #9]
  33624. }
  33625. }
  33626. }
  33627. #else
  33628. /* Clock Error Detection Configuration */
  33629. MODIFY_REG(hrng->Instance->CR, RNG_CR_CED, hrng->Init.ClockErrorDetection);
  33630. 800e88e: 687b ldr r3, [r7, #4]
  33631. 800e890: 681b ldr r3, [r3, #0]
  33632. 800e892: 681b ldr r3, [r3, #0]
  33633. 800e894: f023 0120 bic.w r1, r3, #32
  33634. 800e898: 687b ldr r3, [r7, #4]
  33635. 800e89a: 685a ldr r2, [r3, #4]
  33636. 800e89c: 687b ldr r3, [r7, #4]
  33637. 800e89e: 681b ldr r3, [r3, #0]
  33638. 800e8a0: 430a orrs r2, r1
  33639. 800e8a2: 601a str r2, [r3, #0]
  33640. #endif /* RNG_CR_CONDRST */
  33641. /* Enable the RNG Peripheral */
  33642. __HAL_RNG_ENABLE(hrng);
  33643. 800e8a4: 687b ldr r3, [r7, #4]
  33644. 800e8a6: 681b ldr r3, [r3, #0]
  33645. 800e8a8: 681a ldr r2, [r3, #0]
  33646. 800e8aa: 687b ldr r3, [r7, #4]
  33647. 800e8ac: 681b ldr r3, [r3, #0]
  33648. 800e8ae: f042 0204 orr.w r2, r2, #4
  33649. 800e8b2: 601a str r2, [r3, #0]
  33650. /* verify that no seed error */
  33651. if (__HAL_RNG_GET_IT(hrng, RNG_IT_SEI) != RESET)
  33652. 800e8b4: 687b ldr r3, [r7, #4]
  33653. 800e8b6: 681b ldr r3, [r3, #0]
  33654. 800e8b8: 685b ldr r3, [r3, #4]
  33655. 800e8ba: f003 0340 and.w r3, r3, #64 @ 0x40
  33656. 800e8be: 2b40 cmp r3, #64 @ 0x40
  33657. 800e8c0: d104 bne.n 800e8cc <HAL_RNG_Init+0x6c>
  33658. {
  33659. hrng->State = HAL_RNG_STATE_ERROR;
  33660. 800e8c2: 687b ldr r3, [r7, #4]
  33661. 800e8c4: 2204 movs r2, #4
  33662. 800e8c6: 725a strb r2, [r3, #9]
  33663. return HAL_ERROR;
  33664. 800e8c8: 2301 movs r3, #1
  33665. 800e8ca: e027 b.n 800e91c <HAL_RNG_Init+0xbc>
  33666. }
  33667. /* Get tick */
  33668. tickstart = HAL_GetTick();
  33669. 800e8cc: f7f6 fd86 bl 80053dc <HAL_GetTick>
  33670. 800e8d0: 60f8 str r0, [r7, #12]
  33671. /* Check if data register contains valid random data */
  33672. while (__HAL_RNG_GET_FLAG(hrng, RNG_FLAG_SECS) != RESET)
  33673. 800e8d2: e015 b.n 800e900 <HAL_RNG_Init+0xa0>
  33674. {
  33675. if ((HAL_GetTick() - tickstart) > RNG_TIMEOUT_VALUE)
  33676. 800e8d4: f7f6 fd82 bl 80053dc <HAL_GetTick>
  33677. 800e8d8: 4602 mov r2, r0
  33678. 800e8da: 68fb ldr r3, [r7, #12]
  33679. 800e8dc: 1ad3 subs r3, r2, r3
  33680. 800e8de: 2b02 cmp r3, #2
  33681. 800e8e0: d90e bls.n 800e900 <HAL_RNG_Init+0xa0>
  33682. {
  33683. /* New check to avoid false timeout detection in case of preemption */
  33684. if (__HAL_RNG_GET_FLAG(hrng, RNG_FLAG_SECS) != RESET)
  33685. 800e8e2: 687b ldr r3, [r7, #4]
  33686. 800e8e4: 681b ldr r3, [r3, #0]
  33687. 800e8e6: 685b ldr r3, [r3, #4]
  33688. 800e8e8: f003 0304 and.w r3, r3, #4
  33689. 800e8ec: 2b04 cmp r3, #4
  33690. 800e8ee: d107 bne.n 800e900 <HAL_RNG_Init+0xa0>
  33691. {
  33692. hrng->State = HAL_RNG_STATE_ERROR;
  33693. 800e8f0: 687b ldr r3, [r7, #4]
  33694. 800e8f2: 2204 movs r2, #4
  33695. 800e8f4: 725a strb r2, [r3, #9]
  33696. hrng->ErrorCode = HAL_RNG_ERROR_TIMEOUT;
  33697. 800e8f6: 687b ldr r3, [r7, #4]
  33698. 800e8f8: 2202 movs r2, #2
  33699. 800e8fa: 60da str r2, [r3, #12]
  33700. return HAL_ERROR;
  33701. 800e8fc: 2301 movs r3, #1
  33702. 800e8fe: e00d b.n 800e91c <HAL_RNG_Init+0xbc>
  33703. while (__HAL_RNG_GET_FLAG(hrng, RNG_FLAG_SECS) != RESET)
  33704. 800e900: 687b ldr r3, [r7, #4]
  33705. 800e902: 681b ldr r3, [r3, #0]
  33706. 800e904: 685b ldr r3, [r3, #4]
  33707. 800e906: f003 0304 and.w r3, r3, #4
  33708. 800e90a: 2b04 cmp r3, #4
  33709. 800e90c: d0e2 beq.n 800e8d4 <HAL_RNG_Init+0x74>
  33710. }
  33711. }
  33712. }
  33713. /* Initialize the RNG state */
  33714. hrng->State = HAL_RNG_STATE_READY;
  33715. 800e90e: 687b ldr r3, [r7, #4]
  33716. 800e910: 2201 movs r2, #1
  33717. 800e912: 725a strb r2, [r3, #9]
  33718. /* Initialise the error code */
  33719. hrng->ErrorCode = HAL_RNG_ERROR_NONE;
  33720. 800e914: 687b ldr r3, [r7, #4]
  33721. 800e916: 2200 movs r2, #0
  33722. 800e918: 60da str r2, [r3, #12]
  33723. /* Return function status */
  33724. return HAL_OK;
  33725. 800e91a: 2300 movs r3, #0
  33726. }
  33727. 800e91c: 4618 mov r0, r3
  33728. 800e91e: 3710 adds r7, #16
  33729. 800e920: 46bd mov sp, r7
  33730. 800e922: bd80 pop {r7, pc}
  33731. 0800e924 <HAL_TIM_Base_Init>:
  33732. * Ex: call @ref HAL_TIM_Base_DeInit() before HAL_TIM_Base_Init()
  33733. * @param htim TIM Base handle
  33734. * @retval HAL status
  33735. */
  33736. HAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim)
  33737. {
  33738. 800e924: b580 push {r7, lr}
  33739. 800e926: b082 sub sp, #8
  33740. 800e928: af00 add r7, sp, #0
  33741. 800e92a: 6078 str r0, [r7, #4]
  33742. /* Check the TIM handle allocation */
  33743. if (htim == NULL)
  33744. 800e92c: 687b ldr r3, [r7, #4]
  33745. 800e92e: 2b00 cmp r3, #0
  33746. 800e930: d101 bne.n 800e936 <HAL_TIM_Base_Init+0x12>
  33747. {
  33748. return HAL_ERROR;
  33749. 800e932: 2301 movs r3, #1
  33750. 800e934: e049 b.n 800e9ca <HAL_TIM_Base_Init+0xa6>
  33751. assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));
  33752. assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));
  33753. assert_param(IS_TIM_PERIOD(htim, htim->Init.Period));
  33754. assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));
  33755. if (htim->State == HAL_TIM_STATE_RESET)
  33756. 800e936: 687b ldr r3, [r7, #4]
  33757. 800e938: f893 303d ldrb.w r3, [r3, #61] @ 0x3d
  33758. 800e93c: b2db uxtb r3, r3
  33759. 800e93e: 2b00 cmp r3, #0
  33760. 800e940: d106 bne.n 800e950 <HAL_TIM_Base_Init+0x2c>
  33761. {
  33762. /* Allocate lock resource and initialize it */
  33763. htim->Lock = HAL_UNLOCKED;
  33764. 800e942: 687b ldr r3, [r7, #4]
  33765. 800e944: 2200 movs r2, #0
  33766. 800e946: f883 203c strb.w r2, [r3, #60] @ 0x3c
  33767. }
  33768. /* Init the low level hardware : GPIO, CLOCK, NVIC */
  33769. htim->Base_MspInitCallback(htim);
  33770. #else
  33771. /* Init the low level hardware : GPIO, CLOCK, NVIC */
  33772. HAL_TIM_Base_MspInit(htim);
  33773. 800e94a: 6878 ldr r0, [r7, #4]
  33774. 800e94c: f7f5 f85c bl 8003a08 <HAL_TIM_Base_MspInit>
  33775. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  33776. }
  33777. /* Set the TIM state */
  33778. htim->State = HAL_TIM_STATE_BUSY;
  33779. 800e950: 687b ldr r3, [r7, #4]
  33780. 800e952: 2202 movs r2, #2
  33781. 800e954: f883 203d strb.w r2, [r3, #61] @ 0x3d
  33782. /* Set the Time Base configuration */
  33783. TIM_Base_SetConfig(htim->Instance, &htim->Init);
  33784. 800e958: 687b ldr r3, [r7, #4]
  33785. 800e95a: 681a ldr r2, [r3, #0]
  33786. 800e95c: 687b ldr r3, [r7, #4]
  33787. 800e95e: 3304 adds r3, #4
  33788. 800e960: 4619 mov r1, r3
  33789. 800e962: 4610 mov r0, r2
  33790. 800e964: f001 f918 bl 800fb98 <TIM_Base_SetConfig>
  33791. /* Initialize the DMA burst operation state */
  33792. htim->DMABurstState = HAL_DMA_BURST_STATE_READY;
  33793. 800e968: 687b ldr r3, [r7, #4]
  33794. 800e96a: 2201 movs r2, #1
  33795. 800e96c: f883 2048 strb.w r2, [r3, #72] @ 0x48
  33796. /* Initialize the TIM channels state */
  33797. TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);
  33798. 800e970: 687b ldr r3, [r7, #4]
  33799. 800e972: 2201 movs r2, #1
  33800. 800e974: f883 203e strb.w r2, [r3, #62] @ 0x3e
  33801. 800e978: 687b ldr r3, [r7, #4]
  33802. 800e97a: 2201 movs r2, #1
  33803. 800e97c: f883 203f strb.w r2, [r3, #63] @ 0x3f
  33804. 800e980: 687b ldr r3, [r7, #4]
  33805. 800e982: 2201 movs r2, #1
  33806. 800e984: f883 2040 strb.w r2, [r3, #64] @ 0x40
  33807. 800e988: 687b ldr r3, [r7, #4]
  33808. 800e98a: 2201 movs r2, #1
  33809. 800e98c: f883 2041 strb.w r2, [r3, #65] @ 0x41
  33810. 800e990: 687b ldr r3, [r7, #4]
  33811. 800e992: 2201 movs r2, #1
  33812. 800e994: f883 2042 strb.w r2, [r3, #66] @ 0x42
  33813. 800e998: 687b ldr r3, [r7, #4]
  33814. 800e99a: 2201 movs r2, #1
  33815. 800e99c: f883 2043 strb.w r2, [r3, #67] @ 0x43
  33816. TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);
  33817. 800e9a0: 687b ldr r3, [r7, #4]
  33818. 800e9a2: 2201 movs r2, #1
  33819. 800e9a4: f883 2044 strb.w r2, [r3, #68] @ 0x44
  33820. 800e9a8: 687b ldr r3, [r7, #4]
  33821. 800e9aa: 2201 movs r2, #1
  33822. 800e9ac: f883 2045 strb.w r2, [r3, #69] @ 0x45
  33823. 800e9b0: 687b ldr r3, [r7, #4]
  33824. 800e9b2: 2201 movs r2, #1
  33825. 800e9b4: f883 2046 strb.w r2, [r3, #70] @ 0x46
  33826. 800e9b8: 687b ldr r3, [r7, #4]
  33827. 800e9ba: 2201 movs r2, #1
  33828. 800e9bc: f883 2047 strb.w r2, [r3, #71] @ 0x47
  33829. /* Initialize the TIM state*/
  33830. htim->State = HAL_TIM_STATE_READY;
  33831. 800e9c0: 687b ldr r3, [r7, #4]
  33832. 800e9c2: 2201 movs r2, #1
  33833. 800e9c4: f883 203d strb.w r2, [r3, #61] @ 0x3d
  33834. return HAL_OK;
  33835. 800e9c8: 2300 movs r3, #0
  33836. }
  33837. 800e9ca: 4618 mov r0, r3
  33838. 800e9cc: 3708 adds r7, #8
  33839. 800e9ce: 46bd mov sp, r7
  33840. 800e9d0: bd80 pop {r7, pc}
  33841. ...
  33842. 0800e9d4 <HAL_TIM_Base_Start>:
  33843. * @brief Starts the TIM Base generation.
  33844. * @param htim TIM Base handle
  33845. * @retval HAL status
  33846. */
  33847. HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim)
  33848. {
  33849. 800e9d4: b480 push {r7}
  33850. 800e9d6: b085 sub sp, #20
  33851. 800e9d8: af00 add r7, sp, #0
  33852. 800e9da: 6078 str r0, [r7, #4]
  33853. /* Check the parameters */
  33854. assert_param(IS_TIM_INSTANCE(htim->Instance));
  33855. /* Check the TIM state */
  33856. if (htim->State != HAL_TIM_STATE_READY)
  33857. 800e9dc: 687b ldr r3, [r7, #4]
  33858. 800e9de: f893 303d ldrb.w r3, [r3, #61] @ 0x3d
  33859. 800e9e2: b2db uxtb r3, r3
  33860. 800e9e4: 2b01 cmp r3, #1
  33861. 800e9e6: d001 beq.n 800e9ec <HAL_TIM_Base_Start+0x18>
  33862. {
  33863. return HAL_ERROR;
  33864. 800e9e8: 2301 movs r3, #1
  33865. 800e9ea: e04c b.n 800ea86 <HAL_TIM_Base_Start+0xb2>
  33866. }
  33867. /* Set the TIM state */
  33868. htim->State = HAL_TIM_STATE_BUSY;
  33869. 800e9ec: 687b ldr r3, [r7, #4]
  33870. 800e9ee: 2202 movs r2, #2
  33871. 800e9f0: f883 203d strb.w r2, [r3, #61] @ 0x3d
  33872. /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */
  33873. if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
  33874. 800e9f4: 687b ldr r3, [r7, #4]
  33875. 800e9f6: 681b ldr r3, [r3, #0]
  33876. 800e9f8: 4a26 ldr r2, [pc, #152] @ (800ea94 <HAL_TIM_Base_Start+0xc0>)
  33877. 800e9fa: 4293 cmp r3, r2
  33878. 800e9fc: d022 beq.n 800ea44 <HAL_TIM_Base_Start+0x70>
  33879. 800e9fe: 687b ldr r3, [r7, #4]
  33880. 800ea00: 681b ldr r3, [r3, #0]
  33881. 800ea02: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  33882. 800ea06: d01d beq.n 800ea44 <HAL_TIM_Base_Start+0x70>
  33883. 800ea08: 687b ldr r3, [r7, #4]
  33884. 800ea0a: 681b ldr r3, [r3, #0]
  33885. 800ea0c: 4a22 ldr r2, [pc, #136] @ (800ea98 <HAL_TIM_Base_Start+0xc4>)
  33886. 800ea0e: 4293 cmp r3, r2
  33887. 800ea10: d018 beq.n 800ea44 <HAL_TIM_Base_Start+0x70>
  33888. 800ea12: 687b ldr r3, [r7, #4]
  33889. 800ea14: 681b ldr r3, [r3, #0]
  33890. 800ea16: 4a21 ldr r2, [pc, #132] @ (800ea9c <HAL_TIM_Base_Start+0xc8>)
  33891. 800ea18: 4293 cmp r3, r2
  33892. 800ea1a: d013 beq.n 800ea44 <HAL_TIM_Base_Start+0x70>
  33893. 800ea1c: 687b ldr r3, [r7, #4]
  33894. 800ea1e: 681b ldr r3, [r3, #0]
  33895. 800ea20: 4a1f ldr r2, [pc, #124] @ (800eaa0 <HAL_TIM_Base_Start+0xcc>)
  33896. 800ea22: 4293 cmp r3, r2
  33897. 800ea24: d00e beq.n 800ea44 <HAL_TIM_Base_Start+0x70>
  33898. 800ea26: 687b ldr r3, [r7, #4]
  33899. 800ea28: 681b ldr r3, [r3, #0]
  33900. 800ea2a: 4a1e ldr r2, [pc, #120] @ (800eaa4 <HAL_TIM_Base_Start+0xd0>)
  33901. 800ea2c: 4293 cmp r3, r2
  33902. 800ea2e: d009 beq.n 800ea44 <HAL_TIM_Base_Start+0x70>
  33903. 800ea30: 687b ldr r3, [r7, #4]
  33904. 800ea32: 681b ldr r3, [r3, #0]
  33905. 800ea34: 4a1c ldr r2, [pc, #112] @ (800eaa8 <HAL_TIM_Base_Start+0xd4>)
  33906. 800ea36: 4293 cmp r3, r2
  33907. 800ea38: d004 beq.n 800ea44 <HAL_TIM_Base_Start+0x70>
  33908. 800ea3a: 687b ldr r3, [r7, #4]
  33909. 800ea3c: 681b ldr r3, [r3, #0]
  33910. 800ea3e: 4a1b ldr r2, [pc, #108] @ (800eaac <HAL_TIM_Base_Start+0xd8>)
  33911. 800ea40: 4293 cmp r3, r2
  33912. 800ea42: d115 bne.n 800ea70 <HAL_TIM_Base_Start+0x9c>
  33913. {
  33914. tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
  33915. 800ea44: 687b ldr r3, [r7, #4]
  33916. 800ea46: 681b ldr r3, [r3, #0]
  33917. 800ea48: 689a ldr r2, [r3, #8]
  33918. 800ea4a: 4b19 ldr r3, [pc, #100] @ (800eab0 <HAL_TIM_Base_Start+0xdc>)
  33919. 800ea4c: 4013 ands r3, r2
  33920. 800ea4e: 60fb str r3, [r7, #12]
  33921. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  33922. 800ea50: 68fb ldr r3, [r7, #12]
  33923. 800ea52: 2b06 cmp r3, #6
  33924. 800ea54: d015 beq.n 800ea82 <HAL_TIM_Base_Start+0xae>
  33925. 800ea56: 68fb ldr r3, [r7, #12]
  33926. 800ea58: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  33927. 800ea5c: d011 beq.n 800ea82 <HAL_TIM_Base_Start+0xae>
  33928. {
  33929. __HAL_TIM_ENABLE(htim);
  33930. 800ea5e: 687b ldr r3, [r7, #4]
  33931. 800ea60: 681b ldr r3, [r3, #0]
  33932. 800ea62: 681a ldr r2, [r3, #0]
  33933. 800ea64: 687b ldr r3, [r7, #4]
  33934. 800ea66: 681b ldr r3, [r3, #0]
  33935. 800ea68: f042 0201 orr.w r2, r2, #1
  33936. 800ea6c: 601a str r2, [r3, #0]
  33937. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  33938. 800ea6e: e008 b.n 800ea82 <HAL_TIM_Base_Start+0xae>
  33939. }
  33940. }
  33941. else
  33942. {
  33943. __HAL_TIM_ENABLE(htim);
  33944. 800ea70: 687b ldr r3, [r7, #4]
  33945. 800ea72: 681b ldr r3, [r3, #0]
  33946. 800ea74: 681a ldr r2, [r3, #0]
  33947. 800ea76: 687b ldr r3, [r7, #4]
  33948. 800ea78: 681b ldr r3, [r3, #0]
  33949. 800ea7a: f042 0201 orr.w r2, r2, #1
  33950. 800ea7e: 601a str r2, [r3, #0]
  33951. 800ea80: e000 b.n 800ea84 <HAL_TIM_Base_Start+0xb0>
  33952. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  33953. 800ea82: bf00 nop
  33954. }
  33955. /* Return function status */
  33956. return HAL_OK;
  33957. 800ea84: 2300 movs r3, #0
  33958. }
  33959. 800ea86: 4618 mov r0, r3
  33960. 800ea88: 3714 adds r7, #20
  33961. 800ea8a: 46bd mov sp, r7
  33962. 800ea8c: f85d 7b04 ldr.w r7, [sp], #4
  33963. 800ea90: 4770 bx lr
  33964. 800ea92: bf00 nop
  33965. 800ea94: 40010000 .word 0x40010000
  33966. 800ea98: 40000400 .word 0x40000400
  33967. 800ea9c: 40000800 .word 0x40000800
  33968. 800eaa0: 40000c00 .word 0x40000c00
  33969. 800eaa4: 40010400 .word 0x40010400
  33970. 800eaa8: 40001800 .word 0x40001800
  33971. 800eaac: 40014000 .word 0x40014000
  33972. 800eab0: 00010007 .word 0x00010007
  33973. 0800eab4 <HAL_TIM_Base_Start_IT>:
  33974. * @brief Starts the TIM Base generation in interrupt mode.
  33975. * @param htim TIM Base handle
  33976. * @retval HAL status
  33977. */
  33978. HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim)
  33979. {
  33980. 800eab4: b480 push {r7}
  33981. 800eab6: b085 sub sp, #20
  33982. 800eab8: af00 add r7, sp, #0
  33983. 800eaba: 6078 str r0, [r7, #4]
  33984. /* Check the parameters */
  33985. assert_param(IS_TIM_INSTANCE(htim->Instance));
  33986. /* Check the TIM state */
  33987. if (htim->State != HAL_TIM_STATE_READY)
  33988. 800eabc: 687b ldr r3, [r7, #4]
  33989. 800eabe: f893 303d ldrb.w r3, [r3, #61] @ 0x3d
  33990. 800eac2: b2db uxtb r3, r3
  33991. 800eac4: 2b01 cmp r3, #1
  33992. 800eac6: d001 beq.n 800eacc <HAL_TIM_Base_Start_IT+0x18>
  33993. {
  33994. return HAL_ERROR;
  33995. 800eac8: 2301 movs r3, #1
  33996. 800eaca: e054 b.n 800eb76 <HAL_TIM_Base_Start_IT+0xc2>
  33997. }
  33998. /* Set the TIM state */
  33999. htim->State = HAL_TIM_STATE_BUSY;
  34000. 800eacc: 687b ldr r3, [r7, #4]
  34001. 800eace: 2202 movs r2, #2
  34002. 800ead0: f883 203d strb.w r2, [r3, #61] @ 0x3d
  34003. /* Enable the TIM Update interrupt */
  34004. __HAL_TIM_ENABLE_IT(htim, TIM_IT_UPDATE);
  34005. 800ead4: 687b ldr r3, [r7, #4]
  34006. 800ead6: 681b ldr r3, [r3, #0]
  34007. 800ead8: 68da ldr r2, [r3, #12]
  34008. 800eada: 687b ldr r3, [r7, #4]
  34009. 800eadc: 681b ldr r3, [r3, #0]
  34010. 800eade: f042 0201 orr.w r2, r2, #1
  34011. 800eae2: 60da str r2, [r3, #12]
  34012. /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */
  34013. if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
  34014. 800eae4: 687b ldr r3, [r7, #4]
  34015. 800eae6: 681b ldr r3, [r3, #0]
  34016. 800eae8: 4a26 ldr r2, [pc, #152] @ (800eb84 <HAL_TIM_Base_Start_IT+0xd0>)
  34017. 800eaea: 4293 cmp r3, r2
  34018. 800eaec: d022 beq.n 800eb34 <HAL_TIM_Base_Start_IT+0x80>
  34019. 800eaee: 687b ldr r3, [r7, #4]
  34020. 800eaf0: 681b ldr r3, [r3, #0]
  34021. 800eaf2: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  34022. 800eaf6: d01d beq.n 800eb34 <HAL_TIM_Base_Start_IT+0x80>
  34023. 800eaf8: 687b ldr r3, [r7, #4]
  34024. 800eafa: 681b ldr r3, [r3, #0]
  34025. 800eafc: 4a22 ldr r2, [pc, #136] @ (800eb88 <HAL_TIM_Base_Start_IT+0xd4>)
  34026. 800eafe: 4293 cmp r3, r2
  34027. 800eb00: d018 beq.n 800eb34 <HAL_TIM_Base_Start_IT+0x80>
  34028. 800eb02: 687b ldr r3, [r7, #4]
  34029. 800eb04: 681b ldr r3, [r3, #0]
  34030. 800eb06: 4a21 ldr r2, [pc, #132] @ (800eb8c <HAL_TIM_Base_Start_IT+0xd8>)
  34031. 800eb08: 4293 cmp r3, r2
  34032. 800eb0a: d013 beq.n 800eb34 <HAL_TIM_Base_Start_IT+0x80>
  34033. 800eb0c: 687b ldr r3, [r7, #4]
  34034. 800eb0e: 681b ldr r3, [r3, #0]
  34035. 800eb10: 4a1f ldr r2, [pc, #124] @ (800eb90 <HAL_TIM_Base_Start_IT+0xdc>)
  34036. 800eb12: 4293 cmp r3, r2
  34037. 800eb14: d00e beq.n 800eb34 <HAL_TIM_Base_Start_IT+0x80>
  34038. 800eb16: 687b ldr r3, [r7, #4]
  34039. 800eb18: 681b ldr r3, [r3, #0]
  34040. 800eb1a: 4a1e ldr r2, [pc, #120] @ (800eb94 <HAL_TIM_Base_Start_IT+0xe0>)
  34041. 800eb1c: 4293 cmp r3, r2
  34042. 800eb1e: d009 beq.n 800eb34 <HAL_TIM_Base_Start_IT+0x80>
  34043. 800eb20: 687b ldr r3, [r7, #4]
  34044. 800eb22: 681b ldr r3, [r3, #0]
  34045. 800eb24: 4a1c ldr r2, [pc, #112] @ (800eb98 <HAL_TIM_Base_Start_IT+0xe4>)
  34046. 800eb26: 4293 cmp r3, r2
  34047. 800eb28: d004 beq.n 800eb34 <HAL_TIM_Base_Start_IT+0x80>
  34048. 800eb2a: 687b ldr r3, [r7, #4]
  34049. 800eb2c: 681b ldr r3, [r3, #0]
  34050. 800eb2e: 4a1b ldr r2, [pc, #108] @ (800eb9c <HAL_TIM_Base_Start_IT+0xe8>)
  34051. 800eb30: 4293 cmp r3, r2
  34052. 800eb32: d115 bne.n 800eb60 <HAL_TIM_Base_Start_IT+0xac>
  34053. {
  34054. tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
  34055. 800eb34: 687b ldr r3, [r7, #4]
  34056. 800eb36: 681b ldr r3, [r3, #0]
  34057. 800eb38: 689a ldr r2, [r3, #8]
  34058. 800eb3a: 4b19 ldr r3, [pc, #100] @ (800eba0 <HAL_TIM_Base_Start_IT+0xec>)
  34059. 800eb3c: 4013 ands r3, r2
  34060. 800eb3e: 60fb str r3, [r7, #12]
  34061. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  34062. 800eb40: 68fb ldr r3, [r7, #12]
  34063. 800eb42: 2b06 cmp r3, #6
  34064. 800eb44: d015 beq.n 800eb72 <HAL_TIM_Base_Start_IT+0xbe>
  34065. 800eb46: 68fb ldr r3, [r7, #12]
  34066. 800eb48: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  34067. 800eb4c: d011 beq.n 800eb72 <HAL_TIM_Base_Start_IT+0xbe>
  34068. {
  34069. __HAL_TIM_ENABLE(htim);
  34070. 800eb4e: 687b ldr r3, [r7, #4]
  34071. 800eb50: 681b ldr r3, [r3, #0]
  34072. 800eb52: 681a ldr r2, [r3, #0]
  34073. 800eb54: 687b ldr r3, [r7, #4]
  34074. 800eb56: 681b ldr r3, [r3, #0]
  34075. 800eb58: f042 0201 orr.w r2, r2, #1
  34076. 800eb5c: 601a str r2, [r3, #0]
  34077. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  34078. 800eb5e: e008 b.n 800eb72 <HAL_TIM_Base_Start_IT+0xbe>
  34079. }
  34080. }
  34081. else
  34082. {
  34083. __HAL_TIM_ENABLE(htim);
  34084. 800eb60: 687b ldr r3, [r7, #4]
  34085. 800eb62: 681b ldr r3, [r3, #0]
  34086. 800eb64: 681a ldr r2, [r3, #0]
  34087. 800eb66: 687b ldr r3, [r7, #4]
  34088. 800eb68: 681b ldr r3, [r3, #0]
  34089. 800eb6a: f042 0201 orr.w r2, r2, #1
  34090. 800eb6e: 601a str r2, [r3, #0]
  34091. 800eb70: e000 b.n 800eb74 <HAL_TIM_Base_Start_IT+0xc0>
  34092. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  34093. 800eb72: bf00 nop
  34094. }
  34095. /* Return function status */
  34096. return HAL_OK;
  34097. 800eb74: 2300 movs r3, #0
  34098. }
  34099. 800eb76: 4618 mov r0, r3
  34100. 800eb78: 3714 adds r7, #20
  34101. 800eb7a: 46bd mov sp, r7
  34102. 800eb7c: f85d 7b04 ldr.w r7, [sp], #4
  34103. 800eb80: 4770 bx lr
  34104. 800eb82: bf00 nop
  34105. 800eb84: 40010000 .word 0x40010000
  34106. 800eb88: 40000400 .word 0x40000400
  34107. 800eb8c: 40000800 .word 0x40000800
  34108. 800eb90: 40000c00 .word 0x40000c00
  34109. 800eb94: 40010400 .word 0x40010400
  34110. 800eb98: 40001800 .word 0x40001800
  34111. 800eb9c: 40014000 .word 0x40014000
  34112. 800eba0: 00010007 .word 0x00010007
  34113. 0800eba4 <HAL_TIM_PWM_Init>:
  34114. * Ex: call @ref HAL_TIM_PWM_DeInit() before HAL_TIM_PWM_Init()
  34115. * @param htim TIM PWM handle
  34116. * @retval HAL status
  34117. */
  34118. HAL_StatusTypeDef HAL_TIM_PWM_Init(TIM_HandleTypeDef *htim)
  34119. {
  34120. 800eba4: b580 push {r7, lr}
  34121. 800eba6: b082 sub sp, #8
  34122. 800eba8: af00 add r7, sp, #0
  34123. 800ebaa: 6078 str r0, [r7, #4]
  34124. /* Check the TIM handle allocation */
  34125. if (htim == NULL)
  34126. 800ebac: 687b ldr r3, [r7, #4]
  34127. 800ebae: 2b00 cmp r3, #0
  34128. 800ebb0: d101 bne.n 800ebb6 <HAL_TIM_PWM_Init+0x12>
  34129. {
  34130. return HAL_ERROR;
  34131. 800ebb2: 2301 movs r3, #1
  34132. 800ebb4: e049 b.n 800ec4a <HAL_TIM_PWM_Init+0xa6>
  34133. assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));
  34134. assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));
  34135. assert_param(IS_TIM_PERIOD(htim, htim->Init.Period));
  34136. assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));
  34137. if (htim->State == HAL_TIM_STATE_RESET)
  34138. 800ebb6: 687b ldr r3, [r7, #4]
  34139. 800ebb8: f893 303d ldrb.w r3, [r3, #61] @ 0x3d
  34140. 800ebbc: b2db uxtb r3, r3
  34141. 800ebbe: 2b00 cmp r3, #0
  34142. 800ebc0: d106 bne.n 800ebd0 <HAL_TIM_PWM_Init+0x2c>
  34143. {
  34144. /* Allocate lock resource and initialize it */
  34145. htim->Lock = HAL_UNLOCKED;
  34146. 800ebc2: 687b ldr r3, [r7, #4]
  34147. 800ebc4: 2200 movs r2, #0
  34148. 800ebc6: f883 203c strb.w r2, [r3, #60] @ 0x3c
  34149. }
  34150. /* Init the low level hardware : GPIO, CLOCK, NVIC */
  34151. htim->PWM_MspInitCallback(htim);
  34152. #else
  34153. /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */
  34154. HAL_TIM_PWM_MspInit(htim);
  34155. 800ebca: 6878 ldr r0, [r7, #4]
  34156. 800ebcc: f7f4 fee2 bl 8003994 <HAL_TIM_PWM_MspInit>
  34157. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  34158. }
  34159. /* Set the TIM state */
  34160. htim->State = HAL_TIM_STATE_BUSY;
  34161. 800ebd0: 687b ldr r3, [r7, #4]
  34162. 800ebd2: 2202 movs r2, #2
  34163. 800ebd4: f883 203d strb.w r2, [r3, #61] @ 0x3d
  34164. /* Init the base time for the PWM */
  34165. TIM_Base_SetConfig(htim->Instance, &htim->Init);
  34166. 800ebd8: 687b ldr r3, [r7, #4]
  34167. 800ebda: 681a ldr r2, [r3, #0]
  34168. 800ebdc: 687b ldr r3, [r7, #4]
  34169. 800ebde: 3304 adds r3, #4
  34170. 800ebe0: 4619 mov r1, r3
  34171. 800ebe2: 4610 mov r0, r2
  34172. 800ebe4: f000 ffd8 bl 800fb98 <TIM_Base_SetConfig>
  34173. /* Initialize the DMA burst operation state */
  34174. htim->DMABurstState = HAL_DMA_BURST_STATE_READY;
  34175. 800ebe8: 687b ldr r3, [r7, #4]
  34176. 800ebea: 2201 movs r2, #1
  34177. 800ebec: f883 2048 strb.w r2, [r3, #72] @ 0x48
  34178. /* Initialize the TIM channels state */
  34179. TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);
  34180. 800ebf0: 687b ldr r3, [r7, #4]
  34181. 800ebf2: 2201 movs r2, #1
  34182. 800ebf4: f883 203e strb.w r2, [r3, #62] @ 0x3e
  34183. 800ebf8: 687b ldr r3, [r7, #4]
  34184. 800ebfa: 2201 movs r2, #1
  34185. 800ebfc: f883 203f strb.w r2, [r3, #63] @ 0x3f
  34186. 800ec00: 687b ldr r3, [r7, #4]
  34187. 800ec02: 2201 movs r2, #1
  34188. 800ec04: f883 2040 strb.w r2, [r3, #64] @ 0x40
  34189. 800ec08: 687b ldr r3, [r7, #4]
  34190. 800ec0a: 2201 movs r2, #1
  34191. 800ec0c: f883 2041 strb.w r2, [r3, #65] @ 0x41
  34192. 800ec10: 687b ldr r3, [r7, #4]
  34193. 800ec12: 2201 movs r2, #1
  34194. 800ec14: f883 2042 strb.w r2, [r3, #66] @ 0x42
  34195. 800ec18: 687b ldr r3, [r7, #4]
  34196. 800ec1a: 2201 movs r2, #1
  34197. 800ec1c: f883 2043 strb.w r2, [r3, #67] @ 0x43
  34198. TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);
  34199. 800ec20: 687b ldr r3, [r7, #4]
  34200. 800ec22: 2201 movs r2, #1
  34201. 800ec24: f883 2044 strb.w r2, [r3, #68] @ 0x44
  34202. 800ec28: 687b ldr r3, [r7, #4]
  34203. 800ec2a: 2201 movs r2, #1
  34204. 800ec2c: f883 2045 strb.w r2, [r3, #69] @ 0x45
  34205. 800ec30: 687b ldr r3, [r7, #4]
  34206. 800ec32: 2201 movs r2, #1
  34207. 800ec34: f883 2046 strb.w r2, [r3, #70] @ 0x46
  34208. 800ec38: 687b ldr r3, [r7, #4]
  34209. 800ec3a: 2201 movs r2, #1
  34210. 800ec3c: f883 2047 strb.w r2, [r3, #71] @ 0x47
  34211. /* Initialize the TIM state*/
  34212. htim->State = HAL_TIM_STATE_READY;
  34213. 800ec40: 687b ldr r3, [r7, #4]
  34214. 800ec42: 2201 movs r2, #1
  34215. 800ec44: f883 203d strb.w r2, [r3, #61] @ 0x3d
  34216. return HAL_OK;
  34217. 800ec48: 2300 movs r3, #0
  34218. }
  34219. 800ec4a: 4618 mov r0, r3
  34220. 800ec4c: 3708 adds r7, #8
  34221. 800ec4e: 46bd mov sp, r7
  34222. 800ec50: bd80 pop {r7, pc}
  34223. ...
  34224. 0800ec54 <HAL_TIM_PWM_Start>:
  34225. * @arg TIM_CHANNEL_5: TIM Channel 5 selected
  34226. * @arg TIM_CHANNEL_6: TIM Channel 6 selected
  34227. * @retval HAL status
  34228. */
  34229. HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel)
  34230. {
  34231. 800ec54: b580 push {r7, lr}
  34232. 800ec56: b084 sub sp, #16
  34233. 800ec58: af00 add r7, sp, #0
  34234. 800ec5a: 6078 str r0, [r7, #4]
  34235. 800ec5c: 6039 str r1, [r7, #0]
  34236. /* Check the parameters */
  34237. assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
  34238. /* Check the TIM channel state */
  34239. if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY)
  34240. 800ec5e: 683b ldr r3, [r7, #0]
  34241. 800ec60: 2b00 cmp r3, #0
  34242. 800ec62: d109 bne.n 800ec78 <HAL_TIM_PWM_Start+0x24>
  34243. 800ec64: 687b ldr r3, [r7, #4]
  34244. 800ec66: f893 303e ldrb.w r3, [r3, #62] @ 0x3e
  34245. 800ec6a: b2db uxtb r3, r3
  34246. 800ec6c: 2b01 cmp r3, #1
  34247. 800ec6e: bf14 ite ne
  34248. 800ec70: 2301 movne r3, #1
  34249. 800ec72: 2300 moveq r3, #0
  34250. 800ec74: b2db uxtb r3, r3
  34251. 800ec76: e03c b.n 800ecf2 <HAL_TIM_PWM_Start+0x9e>
  34252. 800ec78: 683b ldr r3, [r7, #0]
  34253. 800ec7a: 2b04 cmp r3, #4
  34254. 800ec7c: d109 bne.n 800ec92 <HAL_TIM_PWM_Start+0x3e>
  34255. 800ec7e: 687b ldr r3, [r7, #4]
  34256. 800ec80: f893 303f ldrb.w r3, [r3, #63] @ 0x3f
  34257. 800ec84: b2db uxtb r3, r3
  34258. 800ec86: 2b01 cmp r3, #1
  34259. 800ec88: bf14 ite ne
  34260. 800ec8a: 2301 movne r3, #1
  34261. 800ec8c: 2300 moveq r3, #0
  34262. 800ec8e: b2db uxtb r3, r3
  34263. 800ec90: e02f b.n 800ecf2 <HAL_TIM_PWM_Start+0x9e>
  34264. 800ec92: 683b ldr r3, [r7, #0]
  34265. 800ec94: 2b08 cmp r3, #8
  34266. 800ec96: d109 bne.n 800ecac <HAL_TIM_PWM_Start+0x58>
  34267. 800ec98: 687b ldr r3, [r7, #4]
  34268. 800ec9a: f893 3040 ldrb.w r3, [r3, #64] @ 0x40
  34269. 800ec9e: b2db uxtb r3, r3
  34270. 800eca0: 2b01 cmp r3, #1
  34271. 800eca2: bf14 ite ne
  34272. 800eca4: 2301 movne r3, #1
  34273. 800eca6: 2300 moveq r3, #0
  34274. 800eca8: b2db uxtb r3, r3
  34275. 800ecaa: e022 b.n 800ecf2 <HAL_TIM_PWM_Start+0x9e>
  34276. 800ecac: 683b ldr r3, [r7, #0]
  34277. 800ecae: 2b0c cmp r3, #12
  34278. 800ecb0: d109 bne.n 800ecc6 <HAL_TIM_PWM_Start+0x72>
  34279. 800ecb2: 687b ldr r3, [r7, #4]
  34280. 800ecb4: f893 3041 ldrb.w r3, [r3, #65] @ 0x41
  34281. 800ecb8: b2db uxtb r3, r3
  34282. 800ecba: 2b01 cmp r3, #1
  34283. 800ecbc: bf14 ite ne
  34284. 800ecbe: 2301 movne r3, #1
  34285. 800ecc0: 2300 moveq r3, #0
  34286. 800ecc2: b2db uxtb r3, r3
  34287. 800ecc4: e015 b.n 800ecf2 <HAL_TIM_PWM_Start+0x9e>
  34288. 800ecc6: 683b ldr r3, [r7, #0]
  34289. 800ecc8: 2b10 cmp r3, #16
  34290. 800ecca: d109 bne.n 800ece0 <HAL_TIM_PWM_Start+0x8c>
  34291. 800eccc: 687b ldr r3, [r7, #4]
  34292. 800ecce: f893 3042 ldrb.w r3, [r3, #66] @ 0x42
  34293. 800ecd2: b2db uxtb r3, r3
  34294. 800ecd4: 2b01 cmp r3, #1
  34295. 800ecd6: bf14 ite ne
  34296. 800ecd8: 2301 movne r3, #1
  34297. 800ecda: 2300 moveq r3, #0
  34298. 800ecdc: b2db uxtb r3, r3
  34299. 800ecde: e008 b.n 800ecf2 <HAL_TIM_PWM_Start+0x9e>
  34300. 800ece0: 687b ldr r3, [r7, #4]
  34301. 800ece2: f893 3043 ldrb.w r3, [r3, #67] @ 0x43
  34302. 800ece6: b2db uxtb r3, r3
  34303. 800ece8: 2b01 cmp r3, #1
  34304. 800ecea: bf14 ite ne
  34305. 800ecec: 2301 movne r3, #1
  34306. 800ecee: 2300 moveq r3, #0
  34307. 800ecf0: b2db uxtb r3, r3
  34308. 800ecf2: 2b00 cmp r3, #0
  34309. 800ecf4: d001 beq.n 800ecfa <HAL_TIM_PWM_Start+0xa6>
  34310. {
  34311. return HAL_ERROR;
  34312. 800ecf6: 2301 movs r3, #1
  34313. 800ecf8: e0a1 b.n 800ee3e <HAL_TIM_PWM_Start+0x1ea>
  34314. }
  34315. /* Set the TIM channel state */
  34316. TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);
  34317. 800ecfa: 683b ldr r3, [r7, #0]
  34318. 800ecfc: 2b00 cmp r3, #0
  34319. 800ecfe: d104 bne.n 800ed0a <HAL_TIM_PWM_Start+0xb6>
  34320. 800ed00: 687b ldr r3, [r7, #4]
  34321. 800ed02: 2202 movs r2, #2
  34322. 800ed04: f883 203e strb.w r2, [r3, #62] @ 0x3e
  34323. 800ed08: e023 b.n 800ed52 <HAL_TIM_PWM_Start+0xfe>
  34324. 800ed0a: 683b ldr r3, [r7, #0]
  34325. 800ed0c: 2b04 cmp r3, #4
  34326. 800ed0e: d104 bne.n 800ed1a <HAL_TIM_PWM_Start+0xc6>
  34327. 800ed10: 687b ldr r3, [r7, #4]
  34328. 800ed12: 2202 movs r2, #2
  34329. 800ed14: f883 203f strb.w r2, [r3, #63] @ 0x3f
  34330. 800ed18: e01b b.n 800ed52 <HAL_TIM_PWM_Start+0xfe>
  34331. 800ed1a: 683b ldr r3, [r7, #0]
  34332. 800ed1c: 2b08 cmp r3, #8
  34333. 800ed1e: d104 bne.n 800ed2a <HAL_TIM_PWM_Start+0xd6>
  34334. 800ed20: 687b ldr r3, [r7, #4]
  34335. 800ed22: 2202 movs r2, #2
  34336. 800ed24: f883 2040 strb.w r2, [r3, #64] @ 0x40
  34337. 800ed28: e013 b.n 800ed52 <HAL_TIM_PWM_Start+0xfe>
  34338. 800ed2a: 683b ldr r3, [r7, #0]
  34339. 800ed2c: 2b0c cmp r3, #12
  34340. 800ed2e: d104 bne.n 800ed3a <HAL_TIM_PWM_Start+0xe6>
  34341. 800ed30: 687b ldr r3, [r7, #4]
  34342. 800ed32: 2202 movs r2, #2
  34343. 800ed34: f883 2041 strb.w r2, [r3, #65] @ 0x41
  34344. 800ed38: e00b b.n 800ed52 <HAL_TIM_PWM_Start+0xfe>
  34345. 800ed3a: 683b ldr r3, [r7, #0]
  34346. 800ed3c: 2b10 cmp r3, #16
  34347. 800ed3e: d104 bne.n 800ed4a <HAL_TIM_PWM_Start+0xf6>
  34348. 800ed40: 687b ldr r3, [r7, #4]
  34349. 800ed42: 2202 movs r2, #2
  34350. 800ed44: f883 2042 strb.w r2, [r3, #66] @ 0x42
  34351. 800ed48: e003 b.n 800ed52 <HAL_TIM_PWM_Start+0xfe>
  34352. 800ed4a: 687b ldr r3, [r7, #4]
  34353. 800ed4c: 2202 movs r2, #2
  34354. 800ed4e: f883 2043 strb.w r2, [r3, #67] @ 0x43
  34355. /* Enable the Capture compare channel */
  34356. TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);
  34357. 800ed52: 687b ldr r3, [r7, #4]
  34358. 800ed54: 681b ldr r3, [r3, #0]
  34359. 800ed56: 2201 movs r2, #1
  34360. 800ed58: 6839 ldr r1, [r7, #0]
  34361. 800ed5a: 4618 mov r0, r3
  34362. 800ed5c: f001 fc60 bl 8010620 <TIM_CCxChannelCmd>
  34363. if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET)
  34364. 800ed60: 687b ldr r3, [r7, #4]
  34365. 800ed62: 681b ldr r3, [r3, #0]
  34366. 800ed64: 4a38 ldr r2, [pc, #224] @ (800ee48 <HAL_TIM_PWM_Start+0x1f4>)
  34367. 800ed66: 4293 cmp r3, r2
  34368. 800ed68: d013 beq.n 800ed92 <HAL_TIM_PWM_Start+0x13e>
  34369. 800ed6a: 687b ldr r3, [r7, #4]
  34370. 800ed6c: 681b ldr r3, [r3, #0]
  34371. 800ed6e: 4a37 ldr r2, [pc, #220] @ (800ee4c <HAL_TIM_PWM_Start+0x1f8>)
  34372. 800ed70: 4293 cmp r3, r2
  34373. 800ed72: d00e beq.n 800ed92 <HAL_TIM_PWM_Start+0x13e>
  34374. 800ed74: 687b ldr r3, [r7, #4]
  34375. 800ed76: 681b ldr r3, [r3, #0]
  34376. 800ed78: 4a35 ldr r2, [pc, #212] @ (800ee50 <HAL_TIM_PWM_Start+0x1fc>)
  34377. 800ed7a: 4293 cmp r3, r2
  34378. 800ed7c: d009 beq.n 800ed92 <HAL_TIM_PWM_Start+0x13e>
  34379. 800ed7e: 687b ldr r3, [r7, #4]
  34380. 800ed80: 681b ldr r3, [r3, #0]
  34381. 800ed82: 4a34 ldr r2, [pc, #208] @ (800ee54 <HAL_TIM_PWM_Start+0x200>)
  34382. 800ed84: 4293 cmp r3, r2
  34383. 800ed86: d004 beq.n 800ed92 <HAL_TIM_PWM_Start+0x13e>
  34384. 800ed88: 687b ldr r3, [r7, #4]
  34385. 800ed8a: 681b ldr r3, [r3, #0]
  34386. 800ed8c: 4a32 ldr r2, [pc, #200] @ (800ee58 <HAL_TIM_PWM_Start+0x204>)
  34387. 800ed8e: 4293 cmp r3, r2
  34388. 800ed90: d101 bne.n 800ed96 <HAL_TIM_PWM_Start+0x142>
  34389. 800ed92: 2301 movs r3, #1
  34390. 800ed94: e000 b.n 800ed98 <HAL_TIM_PWM_Start+0x144>
  34391. 800ed96: 2300 movs r3, #0
  34392. 800ed98: 2b00 cmp r3, #0
  34393. 800ed9a: d007 beq.n 800edac <HAL_TIM_PWM_Start+0x158>
  34394. {
  34395. /* Enable the main output */
  34396. __HAL_TIM_MOE_ENABLE(htim);
  34397. 800ed9c: 687b ldr r3, [r7, #4]
  34398. 800ed9e: 681b ldr r3, [r3, #0]
  34399. 800eda0: 6c5a ldr r2, [r3, #68] @ 0x44
  34400. 800eda2: 687b ldr r3, [r7, #4]
  34401. 800eda4: 681b ldr r3, [r3, #0]
  34402. 800eda6: f442 4200 orr.w r2, r2, #32768 @ 0x8000
  34403. 800edaa: 645a str r2, [r3, #68] @ 0x44
  34404. }
  34405. /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */
  34406. if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
  34407. 800edac: 687b ldr r3, [r7, #4]
  34408. 800edae: 681b ldr r3, [r3, #0]
  34409. 800edb0: 4a25 ldr r2, [pc, #148] @ (800ee48 <HAL_TIM_PWM_Start+0x1f4>)
  34410. 800edb2: 4293 cmp r3, r2
  34411. 800edb4: d022 beq.n 800edfc <HAL_TIM_PWM_Start+0x1a8>
  34412. 800edb6: 687b ldr r3, [r7, #4]
  34413. 800edb8: 681b ldr r3, [r3, #0]
  34414. 800edba: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  34415. 800edbe: d01d beq.n 800edfc <HAL_TIM_PWM_Start+0x1a8>
  34416. 800edc0: 687b ldr r3, [r7, #4]
  34417. 800edc2: 681b ldr r3, [r3, #0]
  34418. 800edc4: 4a25 ldr r2, [pc, #148] @ (800ee5c <HAL_TIM_PWM_Start+0x208>)
  34419. 800edc6: 4293 cmp r3, r2
  34420. 800edc8: d018 beq.n 800edfc <HAL_TIM_PWM_Start+0x1a8>
  34421. 800edca: 687b ldr r3, [r7, #4]
  34422. 800edcc: 681b ldr r3, [r3, #0]
  34423. 800edce: 4a24 ldr r2, [pc, #144] @ (800ee60 <HAL_TIM_PWM_Start+0x20c>)
  34424. 800edd0: 4293 cmp r3, r2
  34425. 800edd2: d013 beq.n 800edfc <HAL_TIM_PWM_Start+0x1a8>
  34426. 800edd4: 687b ldr r3, [r7, #4]
  34427. 800edd6: 681b ldr r3, [r3, #0]
  34428. 800edd8: 4a22 ldr r2, [pc, #136] @ (800ee64 <HAL_TIM_PWM_Start+0x210>)
  34429. 800edda: 4293 cmp r3, r2
  34430. 800eddc: d00e beq.n 800edfc <HAL_TIM_PWM_Start+0x1a8>
  34431. 800edde: 687b ldr r3, [r7, #4]
  34432. 800ede0: 681b ldr r3, [r3, #0]
  34433. 800ede2: 4a1a ldr r2, [pc, #104] @ (800ee4c <HAL_TIM_PWM_Start+0x1f8>)
  34434. 800ede4: 4293 cmp r3, r2
  34435. 800ede6: d009 beq.n 800edfc <HAL_TIM_PWM_Start+0x1a8>
  34436. 800ede8: 687b ldr r3, [r7, #4]
  34437. 800edea: 681b ldr r3, [r3, #0]
  34438. 800edec: 4a1e ldr r2, [pc, #120] @ (800ee68 <HAL_TIM_PWM_Start+0x214>)
  34439. 800edee: 4293 cmp r3, r2
  34440. 800edf0: d004 beq.n 800edfc <HAL_TIM_PWM_Start+0x1a8>
  34441. 800edf2: 687b ldr r3, [r7, #4]
  34442. 800edf4: 681b ldr r3, [r3, #0]
  34443. 800edf6: 4a16 ldr r2, [pc, #88] @ (800ee50 <HAL_TIM_PWM_Start+0x1fc>)
  34444. 800edf8: 4293 cmp r3, r2
  34445. 800edfa: d115 bne.n 800ee28 <HAL_TIM_PWM_Start+0x1d4>
  34446. {
  34447. tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
  34448. 800edfc: 687b ldr r3, [r7, #4]
  34449. 800edfe: 681b ldr r3, [r3, #0]
  34450. 800ee00: 689a ldr r2, [r3, #8]
  34451. 800ee02: 4b1a ldr r3, [pc, #104] @ (800ee6c <HAL_TIM_PWM_Start+0x218>)
  34452. 800ee04: 4013 ands r3, r2
  34453. 800ee06: 60fb str r3, [r7, #12]
  34454. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  34455. 800ee08: 68fb ldr r3, [r7, #12]
  34456. 800ee0a: 2b06 cmp r3, #6
  34457. 800ee0c: d015 beq.n 800ee3a <HAL_TIM_PWM_Start+0x1e6>
  34458. 800ee0e: 68fb ldr r3, [r7, #12]
  34459. 800ee10: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  34460. 800ee14: d011 beq.n 800ee3a <HAL_TIM_PWM_Start+0x1e6>
  34461. {
  34462. __HAL_TIM_ENABLE(htim);
  34463. 800ee16: 687b ldr r3, [r7, #4]
  34464. 800ee18: 681b ldr r3, [r3, #0]
  34465. 800ee1a: 681a ldr r2, [r3, #0]
  34466. 800ee1c: 687b ldr r3, [r7, #4]
  34467. 800ee1e: 681b ldr r3, [r3, #0]
  34468. 800ee20: f042 0201 orr.w r2, r2, #1
  34469. 800ee24: 601a str r2, [r3, #0]
  34470. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  34471. 800ee26: e008 b.n 800ee3a <HAL_TIM_PWM_Start+0x1e6>
  34472. }
  34473. }
  34474. else
  34475. {
  34476. __HAL_TIM_ENABLE(htim);
  34477. 800ee28: 687b ldr r3, [r7, #4]
  34478. 800ee2a: 681b ldr r3, [r3, #0]
  34479. 800ee2c: 681a ldr r2, [r3, #0]
  34480. 800ee2e: 687b ldr r3, [r7, #4]
  34481. 800ee30: 681b ldr r3, [r3, #0]
  34482. 800ee32: f042 0201 orr.w r2, r2, #1
  34483. 800ee36: 601a str r2, [r3, #0]
  34484. 800ee38: e000 b.n 800ee3c <HAL_TIM_PWM_Start+0x1e8>
  34485. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  34486. 800ee3a: bf00 nop
  34487. }
  34488. /* Return function status */
  34489. return HAL_OK;
  34490. 800ee3c: 2300 movs r3, #0
  34491. }
  34492. 800ee3e: 4618 mov r0, r3
  34493. 800ee40: 3710 adds r7, #16
  34494. 800ee42: 46bd mov sp, r7
  34495. 800ee44: bd80 pop {r7, pc}
  34496. 800ee46: bf00 nop
  34497. 800ee48: 40010000 .word 0x40010000
  34498. 800ee4c: 40010400 .word 0x40010400
  34499. 800ee50: 40014000 .word 0x40014000
  34500. 800ee54: 40014400 .word 0x40014400
  34501. 800ee58: 40014800 .word 0x40014800
  34502. 800ee5c: 40000400 .word 0x40000400
  34503. 800ee60: 40000800 .word 0x40000800
  34504. 800ee64: 40000c00 .word 0x40000c00
  34505. 800ee68: 40001800 .word 0x40001800
  34506. 800ee6c: 00010007 .word 0x00010007
  34507. 0800ee70 <HAL_TIM_PWM_Stop>:
  34508. * @arg TIM_CHANNEL_5: TIM Channel 5 selected
  34509. * @arg TIM_CHANNEL_6: TIM Channel 6 selected
  34510. * @retval HAL status
  34511. */
  34512. HAL_StatusTypeDef HAL_TIM_PWM_Stop(TIM_HandleTypeDef *htim, uint32_t Channel)
  34513. {
  34514. 800ee70: b580 push {r7, lr}
  34515. 800ee72: b082 sub sp, #8
  34516. 800ee74: af00 add r7, sp, #0
  34517. 800ee76: 6078 str r0, [r7, #4]
  34518. 800ee78: 6039 str r1, [r7, #0]
  34519. /* Check the parameters */
  34520. assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
  34521. /* Disable the Capture compare channel */
  34522. TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);
  34523. 800ee7a: 687b ldr r3, [r7, #4]
  34524. 800ee7c: 681b ldr r3, [r3, #0]
  34525. 800ee7e: 2200 movs r2, #0
  34526. 800ee80: 6839 ldr r1, [r7, #0]
  34527. 800ee82: 4618 mov r0, r3
  34528. 800ee84: f001 fbcc bl 8010620 <TIM_CCxChannelCmd>
  34529. if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET)
  34530. 800ee88: 687b ldr r3, [r7, #4]
  34531. 800ee8a: 681b ldr r3, [r3, #0]
  34532. 800ee8c: 4a3e ldr r2, [pc, #248] @ (800ef88 <HAL_TIM_PWM_Stop+0x118>)
  34533. 800ee8e: 4293 cmp r3, r2
  34534. 800ee90: d013 beq.n 800eeba <HAL_TIM_PWM_Stop+0x4a>
  34535. 800ee92: 687b ldr r3, [r7, #4]
  34536. 800ee94: 681b ldr r3, [r3, #0]
  34537. 800ee96: 4a3d ldr r2, [pc, #244] @ (800ef8c <HAL_TIM_PWM_Stop+0x11c>)
  34538. 800ee98: 4293 cmp r3, r2
  34539. 800ee9a: d00e beq.n 800eeba <HAL_TIM_PWM_Stop+0x4a>
  34540. 800ee9c: 687b ldr r3, [r7, #4]
  34541. 800ee9e: 681b ldr r3, [r3, #0]
  34542. 800eea0: 4a3b ldr r2, [pc, #236] @ (800ef90 <HAL_TIM_PWM_Stop+0x120>)
  34543. 800eea2: 4293 cmp r3, r2
  34544. 800eea4: d009 beq.n 800eeba <HAL_TIM_PWM_Stop+0x4a>
  34545. 800eea6: 687b ldr r3, [r7, #4]
  34546. 800eea8: 681b ldr r3, [r3, #0]
  34547. 800eeaa: 4a3a ldr r2, [pc, #232] @ (800ef94 <HAL_TIM_PWM_Stop+0x124>)
  34548. 800eeac: 4293 cmp r3, r2
  34549. 800eeae: d004 beq.n 800eeba <HAL_TIM_PWM_Stop+0x4a>
  34550. 800eeb0: 687b ldr r3, [r7, #4]
  34551. 800eeb2: 681b ldr r3, [r3, #0]
  34552. 800eeb4: 4a38 ldr r2, [pc, #224] @ (800ef98 <HAL_TIM_PWM_Stop+0x128>)
  34553. 800eeb6: 4293 cmp r3, r2
  34554. 800eeb8: d101 bne.n 800eebe <HAL_TIM_PWM_Stop+0x4e>
  34555. 800eeba: 2301 movs r3, #1
  34556. 800eebc: e000 b.n 800eec0 <HAL_TIM_PWM_Stop+0x50>
  34557. 800eebe: 2300 movs r3, #0
  34558. 800eec0: 2b00 cmp r3, #0
  34559. 800eec2: d017 beq.n 800eef4 <HAL_TIM_PWM_Stop+0x84>
  34560. {
  34561. /* Disable the Main Output */
  34562. __HAL_TIM_MOE_DISABLE(htim);
  34563. 800eec4: 687b ldr r3, [r7, #4]
  34564. 800eec6: 681b ldr r3, [r3, #0]
  34565. 800eec8: 6a1a ldr r2, [r3, #32]
  34566. 800eeca: f241 1311 movw r3, #4369 @ 0x1111
  34567. 800eece: 4013 ands r3, r2
  34568. 800eed0: 2b00 cmp r3, #0
  34569. 800eed2: d10f bne.n 800eef4 <HAL_TIM_PWM_Stop+0x84>
  34570. 800eed4: 687b ldr r3, [r7, #4]
  34571. 800eed6: 681b ldr r3, [r3, #0]
  34572. 800eed8: 6a1a ldr r2, [r3, #32]
  34573. 800eeda: f240 4344 movw r3, #1092 @ 0x444
  34574. 800eede: 4013 ands r3, r2
  34575. 800eee0: 2b00 cmp r3, #0
  34576. 800eee2: d107 bne.n 800eef4 <HAL_TIM_PWM_Stop+0x84>
  34577. 800eee4: 687b ldr r3, [r7, #4]
  34578. 800eee6: 681b ldr r3, [r3, #0]
  34579. 800eee8: 6c5a ldr r2, [r3, #68] @ 0x44
  34580. 800eeea: 687b ldr r3, [r7, #4]
  34581. 800eeec: 681b ldr r3, [r3, #0]
  34582. 800eeee: f422 4200 bic.w r2, r2, #32768 @ 0x8000
  34583. 800eef2: 645a str r2, [r3, #68] @ 0x44
  34584. }
  34585. /* Disable the Peripheral */
  34586. __HAL_TIM_DISABLE(htim);
  34587. 800eef4: 687b ldr r3, [r7, #4]
  34588. 800eef6: 681b ldr r3, [r3, #0]
  34589. 800eef8: 6a1a ldr r2, [r3, #32]
  34590. 800eefa: f241 1311 movw r3, #4369 @ 0x1111
  34591. 800eefe: 4013 ands r3, r2
  34592. 800ef00: 2b00 cmp r3, #0
  34593. 800ef02: d10f bne.n 800ef24 <HAL_TIM_PWM_Stop+0xb4>
  34594. 800ef04: 687b ldr r3, [r7, #4]
  34595. 800ef06: 681b ldr r3, [r3, #0]
  34596. 800ef08: 6a1a ldr r2, [r3, #32]
  34597. 800ef0a: f240 4344 movw r3, #1092 @ 0x444
  34598. 800ef0e: 4013 ands r3, r2
  34599. 800ef10: 2b00 cmp r3, #0
  34600. 800ef12: d107 bne.n 800ef24 <HAL_TIM_PWM_Stop+0xb4>
  34601. 800ef14: 687b ldr r3, [r7, #4]
  34602. 800ef16: 681b ldr r3, [r3, #0]
  34603. 800ef18: 681a ldr r2, [r3, #0]
  34604. 800ef1a: 687b ldr r3, [r7, #4]
  34605. 800ef1c: 681b ldr r3, [r3, #0]
  34606. 800ef1e: f022 0201 bic.w r2, r2, #1
  34607. 800ef22: 601a str r2, [r3, #0]
  34608. /* Set the TIM channel state */
  34609. TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);
  34610. 800ef24: 683b ldr r3, [r7, #0]
  34611. 800ef26: 2b00 cmp r3, #0
  34612. 800ef28: d104 bne.n 800ef34 <HAL_TIM_PWM_Stop+0xc4>
  34613. 800ef2a: 687b ldr r3, [r7, #4]
  34614. 800ef2c: 2201 movs r2, #1
  34615. 800ef2e: f883 203e strb.w r2, [r3, #62] @ 0x3e
  34616. 800ef32: e023 b.n 800ef7c <HAL_TIM_PWM_Stop+0x10c>
  34617. 800ef34: 683b ldr r3, [r7, #0]
  34618. 800ef36: 2b04 cmp r3, #4
  34619. 800ef38: d104 bne.n 800ef44 <HAL_TIM_PWM_Stop+0xd4>
  34620. 800ef3a: 687b ldr r3, [r7, #4]
  34621. 800ef3c: 2201 movs r2, #1
  34622. 800ef3e: f883 203f strb.w r2, [r3, #63] @ 0x3f
  34623. 800ef42: e01b b.n 800ef7c <HAL_TIM_PWM_Stop+0x10c>
  34624. 800ef44: 683b ldr r3, [r7, #0]
  34625. 800ef46: 2b08 cmp r3, #8
  34626. 800ef48: d104 bne.n 800ef54 <HAL_TIM_PWM_Stop+0xe4>
  34627. 800ef4a: 687b ldr r3, [r7, #4]
  34628. 800ef4c: 2201 movs r2, #1
  34629. 800ef4e: f883 2040 strb.w r2, [r3, #64] @ 0x40
  34630. 800ef52: e013 b.n 800ef7c <HAL_TIM_PWM_Stop+0x10c>
  34631. 800ef54: 683b ldr r3, [r7, #0]
  34632. 800ef56: 2b0c cmp r3, #12
  34633. 800ef58: d104 bne.n 800ef64 <HAL_TIM_PWM_Stop+0xf4>
  34634. 800ef5a: 687b ldr r3, [r7, #4]
  34635. 800ef5c: 2201 movs r2, #1
  34636. 800ef5e: f883 2041 strb.w r2, [r3, #65] @ 0x41
  34637. 800ef62: e00b b.n 800ef7c <HAL_TIM_PWM_Stop+0x10c>
  34638. 800ef64: 683b ldr r3, [r7, #0]
  34639. 800ef66: 2b10 cmp r3, #16
  34640. 800ef68: d104 bne.n 800ef74 <HAL_TIM_PWM_Stop+0x104>
  34641. 800ef6a: 687b ldr r3, [r7, #4]
  34642. 800ef6c: 2201 movs r2, #1
  34643. 800ef6e: f883 2042 strb.w r2, [r3, #66] @ 0x42
  34644. 800ef72: e003 b.n 800ef7c <HAL_TIM_PWM_Stop+0x10c>
  34645. 800ef74: 687b ldr r3, [r7, #4]
  34646. 800ef76: 2201 movs r2, #1
  34647. 800ef78: f883 2043 strb.w r2, [r3, #67] @ 0x43
  34648. /* Return function status */
  34649. return HAL_OK;
  34650. 800ef7c: 2300 movs r3, #0
  34651. }
  34652. 800ef7e: 4618 mov r0, r3
  34653. 800ef80: 3708 adds r7, #8
  34654. 800ef82: 46bd mov sp, r7
  34655. 800ef84: bd80 pop {r7, pc}
  34656. 800ef86: bf00 nop
  34657. 800ef88: 40010000 .word 0x40010000
  34658. 800ef8c: 40010400 .word 0x40010400
  34659. 800ef90: 40014000 .word 0x40014000
  34660. 800ef94: 40014400 .word 0x40014400
  34661. 800ef98: 40014800 .word 0x40014800
  34662. 0800ef9c <HAL_TIM_IC_Init>:
  34663. * Ex: call @ref HAL_TIM_IC_DeInit() before HAL_TIM_IC_Init()
  34664. * @param htim TIM Input Capture handle
  34665. * @retval HAL status
  34666. */
  34667. HAL_StatusTypeDef HAL_TIM_IC_Init(TIM_HandleTypeDef *htim)
  34668. {
  34669. 800ef9c: b580 push {r7, lr}
  34670. 800ef9e: b082 sub sp, #8
  34671. 800efa0: af00 add r7, sp, #0
  34672. 800efa2: 6078 str r0, [r7, #4]
  34673. /* Check the TIM handle allocation */
  34674. if (htim == NULL)
  34675. 800efa4: 687b ldr r3, [r7, #4]
  34676. 800efa6: 2b00 cmp r3, #0
  34677. 800efa8: d101 bne.n 800efae <HAL_TIM_IC_Init+0x12>
  34678. {
  34679. return HAL_ERROR;
  34680. 800efaa: 2301 movs r3, #1
  34681. 800efac: e049 b.n 800f042 <HAL_TIM_IC_Init+0xa6>
  34682. assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));
  34683. assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));
  34684. assert_param(IS_TIM_PERIOD(htim, htim->Init.Period));
  34685. assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));
  34686. if (htim->State == HAL_TIM_STATE_RESET)
  34687. 800efae: 687b ldr r3, [r7, #4]
  34688. 800efb0: f893 303d ldrb.w r3, [r3, #61] @ 0x3d
  34689. 800efb4: b2db uxtb r3, r3
  34690. 800efb6: 2b00 cmp r3, #0
  34691. 800efb8: d106 bne.n 800efc8 <HAL_TIM_IC_Init+0x2c>
  34692. {
  34693. /* Allocate lock resource and initialize it */
  34694. htim->Lock = HAL_UNLOCKED;
  34695. 800efba: 687b ldr r3, [r7, #4]
  34696. 800efbc: 2200 movs r2, #0
  34697. 800efbe: f883 203c strb.w r2, [r3, #60] @ 0x3c
  34698. }
  34699. /* Init the low level hardware : GPIO, CLOCK, NVIC */
  34700. htim->IC_MspInitCallback(htim);
  34701. #else
  34702. /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */
  34703. HAL_TIM_IC_MspInit(htim);
  34704. 800efc2: 6878 ldr r0, [r7, #4]
  34705. 800efc4: f000 f841 bl 800f04a <HAL_TIM_IC_MspInit>
  34706. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  34707. }
  34708. /* Set the TIM state */
  34709. htim->State = HAL_TIM_STATE_BUSY;
  34710. 800efc8: 687b ldr r3, [r7, #4]
  34711. 800efca: 2202 movs r2, #2
  34712. 800efcc: f883 203d strb.w r2, [r3, #61] @ 0x3d
  34713. /* Init the base time for the input capture */
  34714. TIM_Base_SetConfig(htim->Instance, &htim->Init);
  34715. 800efd0: 687b ldr r3, [r7, #4]
  34716. 800efd2: 681a ldr r2, [r3, #0]
  34717. 800efd4: 687b ldr r3, [r7, #4]
  34718. 800efd6: 3304 adds r3, #4
  34719. 800efd8: 4619 mov r1, r3
  34720. 800efda: 4610 mov r0, r2
  34721. 800efdc: f000 fddc bl 800fb98 <TIM_Base_SetConfig>
  34722. /* Initialize the DMA burst operation state */
  34723. htim->DMABurstState = HAL_DMA_BURST_STATE_READY;
  34724. 800efe0: 687b ldr r3, [r7, #4]
  34725. 800efe2: 2201 movs r2, #1
  34726. 800efe4: f883 2048 strb.w r2, [r3, #72] @ 0x48
  34727. /* Initialize the TIM channels state */
  34728. TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);
  34729. 800efe8: 687b ldr r3, [r7, #4]
  34730. 800efea: 2201 movs r2, #1
  34731. 800efec: f883 203e strb.w r2, [r3, #62] @ 0x3e
  34732. 800eff0: 687b ldr r3, [r7, #4]
  34733. 800eff2: 2201 movs r2, #1
  34734. 800eff4: f883 203f strb.w r2, [r3, #63] @ 0x3f
  34735. 800eff8: 687b ldr r3, [r7, #4]
  34736. 800effa: 2201 movs r2, #1
  34737. 800effc: f883 2040 strb.w r2, [r3, #64] @ 0x40
  34738. 800f000: 687b ldr r3, [r7, #4]
  34739. 800f002: 2201 movs r2, #1
  34740. 800f004: f883 2041 strb.w r2, [r3, #65] @ 0x41
  34741. 800f008: 687b ldr r3, [r7, #4]
  34742. 800f00a: 2201 movs r2, #1
  34743. 800f00c: f883 2042 strb.w r2, [r3, #66] @ 0x42
  34744. 800f010: 687b ldr r3, [r7, #4]
  34745. 800f012: 2201 movs r2, #1
  34746. 800f014: f883 2043 strb.w r2, [r3, #67] @ 0x43
  34747. TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);
  34748. 800f018: 687b ldr r3, [r7, #4]
  34749. 800f01a: 2201 movs r2, #1
  34750. 800f01c: f883 2044 strb.w r2, [r3, #68] @ 0x44
  34751. 800f020: 687b ldr r3, [r7, #4]
  34752. 800f022: 2201 movs r2, #1
  34753. 800f024: f883 2045 strb.w r2, [r3, #69] @ 0x45
  34754. 800f028: 687b ldr r3, [r7, #4]
  34755. 800f02a: 2201 movs r2, #1
  34756. 800f02c: f883 2046 strb.w r2, [r3, #70] @ 0x46
  34757. 800f030: 687b ldr r3, [r7, #4]
  34758. 800f032: 2201 movs r2, #1
  34759. 800f034: f883 2047 strb.w r2, [r3, #71] @ 0x47
  34760. /* Initialize the TIM state*/
  34761. htim->State = HAL_TIM_STATE_READY;
  34762. 800f038: 687b ldr r3, [r7, #4]
  34763. 800f03a: 2201 movs r2, #1
  34764. 800f03c: f883 203d strb.w r2, [r3, #61] @ 0x3d
  34765. return HAL_OK;
  34766. 800f040: 2300 movs r3, #0
  34767. }
  34768. 800f042: 4618 mov r0, r3
  34769. 800f044: 3708 adds r7, #8
  34770. 800f046: 46bd mov sp, r7
  34771. 800f048: bd80 pop {r7, pc}
  34772. 0800f04a <HAL_TIM_IC_MspInit>:
  34773. * @brief Initializes the TIM Input Capture MSP.
  34774. * @param htim TIM Input Capture handle
  34775. * @retval None
  34776. */
  34777. __weak void HAL_TIM_IC_MspInit(TIM_HandleTypeDef *htim)
  34778. {
  34779. 800f04a: b480 push {r7}
  34780. 800f04c: b083 sub sp, #12
  34781. 800f04e: af00 add r7, sp, #0
  34782. 800f050: 6078 str r0, [r7, #4]
  34783. UNUSED(htim);
  34784. /* NOTE : This function should not be modified, when the callback is needed,
  34785. the HAL_TIM_IC_MspInit could be implemented in the user file
  34786. */
  34787. }
  34788. 800f052: bf00 nop
  34789. 800f054: 370c adds r7, #12
  34790. 800f056: 46bd mov sp, r7
  34791. 800f058: f85d 7b04 ldr.w r7, [sp], #4
  34792. 800f05c: 4770 bx lr
  34793. ...
  34794. 0800f060 <HAL_TIM_IC_Start_IT>:
  34795. * @arg TIM_CHANNEL_3: TIM Channel 3 selected
  34796. * @arg TIM_CHANNEL_4: TIM Channel 4 selected
  34797. * @retval HAL status
  34798. */
  34799. HAL_StatusTypeDef HAL_TIM_IC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
  34800. {
  34801. 800f060: b580 push {r7, lr}
  34802. 800f062: b084 sub sp, #16
  34803. 800f064: af00 add r7, sp, #0
  34804. 800f066: 6078 str r0, [r7, #4]
  34805. 800f068: 6039 str r1, [r7, #0]
  34806. HAL_StatusTypeDef status = HAL_OK;
  34807. 800f06a: 2300 movs r3, #0
  34808. 800f06c: 73fb strb r3, [r7, #15]
  34809. uint32_t tmpsmcr;
  34810. HAL_TIM_ChannelStateTypeDef channel_state = TIM_CHANNEL_STATE_GET(htim, Channel);
  34811. 800f06e: 683b ldr r3, [r7, #0]
  34812. 800f070: 2b00 cmp r3, #0
  34813. 800f072: d104 bne.n 800f07e <HAL_TIM_IC_Start_IT+0x1e>
  34814. 800f074: 687b ldr r3, [r7, #4]
  34815. 800f076: f893 303e ldrb.w r3, [r3, #62] @ 0x3e
  34816. 800f07a: b2db uxtb r3, r3
  34817. 800f07c: e023 b.n 800f0c6 <HAL_TIM_IC_Start_IT+0x66>
  34818. 800f07e: 683b ldr r3, [r7, #0]
  34819. 800f080: 2b04 cmp r3, #4
  34820. 800f082: d104 bne.n 800f08e <HAL_TIM_IC_Start_IT+0x2e>
  34821. 800f084: 687b ldr r3, [r7, #4]
  34822. 800f086: f893 303f ldrb.w r3, [r3, #63] @ 0x3f
  34823. 800f08a: b2db uxtb r3, r3
  34824. 800f08c: e01b b.n 800f0c6 <HAL_TIM_IC_Start_IT+0x66>
  34825. 800f08e: 683b ldr r3, [r7, #0]
  34826. 800f090: 2b08 cmp r3, #8
  34827. 800f092: d104 bne.n 800f09e <HAL_TIM_IC_Start_IT+0x3e>
  34828. 800f094: 687b ldr r3, [r7, #4]
  34829. 800f096: f893 3040 ldrb.w r3, [r3, #64] @ 0x40
  34830. 800f09a: b2db uxtb r3, r3
  34831. 800f09c: e013 b.n 800f0c6 <HAL_TIM_IC_Start_IT+0x66>
  34832. 800f09e: 683b ldr r3, [r7, #0]
  34833. 800f0a0: 2b0c cmp r3, #12
  34834. 800f0a2: d104 bne.n 800f0ae <HAL_TIM_IC_Start_IT+0x4e>
  34835. 800f0a4: 687b ldr r3, [r7, #4]
  34836. 800f0a6: f893 3041 ldrb.w r3, [r3, #65] @ 0x41
  34837. 800f0aa: b2db uxtb r3, r3
  34838. 800f0ac: e00b b.n 800f0c6 <HAL_TIM_IC_Start_IT+0x66>
  34839. 800f0ae: 683b ldr r3, [r7, #0]
  34840. 800f0b0: 2b10 cmp r3, #16
  34841. 800f0b2: d104 bne.n 800f0be <HAL_TIM_IC_Start_IT+0x5e>
  34842. 800f0b4: 687b ldr r3, [r7, #4]
  34843. 800f0b6: f893 3042 ldrb.w r3, [r3, #66] @ 0x42
  34844. 800f0ba: b2db uxtb r3, r3
  34845. 800f0bc: e003 b.n 800f0c6 <HAL_TIM_IC_Start_IT+0x66>
  34846. 800f0be: 687b ldr r3, [r7, #4]
  34847. 800f0c0: f893 3043 ldrb.w r3, [r3, #67] @ 0x43
  34848. 800f0c4: b2db uxtb r3, r3
  34849. 800f0c6: 73bb strb r3, [r7, #14]
  34850. HAL_TIM_ChannelStateTypeDef complementary_channel_state = TIM_CHANNEL_N_STATE_GET(htim, Channel);
  34851. 800f0c8: 683b ldr r3, [r7, #0]
  34852. 800f0ca: 2b00 cmp r3, #0
  34853. 800f0cc: d104 bne.n 800f0d8 <HAL_TIM_IC_Start_IT+0x78>
  34854. 800f0ce: 687b ldr r3, [r7, #4]
  34855. 800f0d0: f893 3044 ldrb.w r3, [r3, #68] @ 0x44
  34856. 800f0d4: b2db uxtb r3, r3
  34857. 800f0d6: e013 b.n 800f100 <HAL_TIM_IC_Start_IT+0xa0>
  34858. 800f0d8: 683b ldr r3, [r7, #0]
  34859. 800f0da: 2b04 cmp r3, #4
  34860. 800f0dc: d104 bne.n 800f0e8 <HAL_TIM_IC_Start_IT+0x88>
  34861. 800f0de: 687b ldr r3, [r7, #4]
  34862. 800f0e0: f893 3045 ldrb.w r3, [r3, #69] @ 0x45
  34863. 800f0e4: b2db uxtb r3, r3
  34864. 800f0e6: e00b b.n 800f100 <HAL_TIM_IC_Start_IT+0xa0>
  34865. 800f0e8: 683b ldr r3, [r7, #0]
  34866. 800f0ea: 2b08 cmp r3, #8
  34867. 800f0ec: d104 bne.n 800f0f8 <HAL_TIM_IC_Start_IT+0x98>
  34868. 800f0ee: 687b ldr r3, [r7, #4]
  34869. 800f0f0: f893 3046 ldrb.w r3, [r3, #70] @ 0x46
  34870. 800f0f4: b2db uxtb r3, r3
  34871. 800f0f6: e003 b.n 800f100 <HAL_TIM_IC_Start_IT+0xa0>
  34872. 800f0f8: 687b ldr r3, [r7, #4]
  34873. 800f0fa: f893 3047 ldrb.w r3, [r3, #71] @ 0x47
  34874. 800f0fe: b2db uxtb r3, r3
  34875. 800f100: 737b strb r3, [r7, #13]
  34876. /* Check the parameters */
  34877. assert_param(IS_TIM_CCX_CHANNEL(htim->Instance, Channel));
  34878. /* Check the TIM channel state */
  34879. if ((channel_state != HAL_TIM_CHANNEL_STATE_READY)
  34880. 800f102: 7bbb ldrb r3, [r7, #14]
  34881. 800f104: 2b01 cmp r3, #1
  34882. 800f106: d102 bne.n 800f10e <HAL_TIM_IC_Start_IT+0xae>
  34883. || (complementary_channel_state != HAL_TIM_CHANNEL_STATE_READY))
  34884. 800f108: 7b7b ldrb r3, [r7, #13]
  34885. 800f10a: 2b01 cmp r3, #1
  34886. 800f10c: d001 beq.n 800f112 <HAL_TIM_IC_Start_IT+0xb2>
  34887. {
  34888. return HAL_ERROR;
  34889. 800f10e: 2301 movs r3, #1
  34890. 800f110: e0e2 b.n 800f2d8 <HAL_TIM_IC_Start_IT+0x278>
  34891. }
  34892. /* Set the TIM channel state */
  34893. TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);
  34894. 800f112: 683b ldr r3, [r7, #0]
  34895. 800f114: 2b00 cmp r3, #0
  34896. 800f116: d104 bne.n 800f122 <HAL_TIM_IC_Start_IT+0xc2>
  34897. 800f118: 687b ldr r3, [r7, #4]
  34898. 800f11a: 2202 movs r2, #2
  34899. 800f11c: f883 203e strb.w r2, [r3, #62] @ 0x3e
  34900. 800f120: e023 b.n 800f16a <HAL_TIM_IC_Start_IT+0x10a>
  34901. 800f122: 683b ldr r3, [r7, #0]
  34902. 800f124: 2b04 cmp r3, #4
  34903. 800f126: d104 bne.n 800f132 <HAL_TIM_IC_Start_IT+0xd2>
  34904. 800f128: 687b ldr r3, [r7, #4]
  34905. 800f12a: 2202 movs r2, #2
  34906. 800f12c: f883 203f strb.w r2, [r3, #63] @ 0x3f
  34907. 800f130: e01b b.n 800f16a <HAL_TIM_IC_Start_IT+0x10a>
  34908. 800f132: 683b ldr r3, [r7, #0]
  34909. 800f134: 2b08 cmp r3, #8
  34910. 800f136: d104 bne.n 800f142 <HAL_TIM_IC_Start_IT+0xe2>
  34911. 800f138: 687b ldr r3, [r7, #4]
  34912. 800f13a: 2202 movs r2, #2
  34913. 800f13c: f883 2040 strb.w r2, [r3, #64] @ 0x40
  34914. 800f140: e013 b.n 800f16a <HAL_TIM_IC_Start_IT+0x10a>
  34915. 800f142: 683b ldr r3, [r7, #0]
  34916. 800f144: 2b0c cmp r3, #12
  34917. 800f146: d104 bne.n 800f152 <HAL_TIM_IC_Start_IT+0xf2>
  34918. 800f148: 687b ldr r3, [r7, #4]
  34919. 800f14a: 2202 movs r2, #2
  34920. 800f14c: f883 2041 strb.w r2, [r3, #65] @ 0x41
  34921. 800f150: e00b b.n 800f16a <HAL_TIM_IC_Start_IT+0x10a>
  34922. 800f152: 683b ldr r3, [r7, #0]
  34923. 800f154: 2b10 cmp r3, #16
  34924. 800f156: d104 bne.n 800f162 <HAL_TIM_IC_Start_IT+0x102>
  34925. 800f158: 687b ldr r3, [r7, #4]
  34926. 800f15a: 2202 movs r2, #2
  34927. 800f15c: f883 2042 strb.w r2, [r3, #66] @ 0x42
  34928. 800f160: e003 b.n 800f16a <HAL_TIM_IC_Start_IT+0x10a>
  34929. 800f162: 687b ldr r3, [r7, #4]
  34930. 800f164: 2202 movs r2, #2
  34931. 800f166: f883 2043 strb.w r2, [r3, #67] @ 0x43
  34932. TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);
  34933. 800f16a: 683b ldr r3, [r7, #0]
  34934. 800f16c: 2b00 cmp r3, #0
  34935. 800f16e: d104 bne.n 800f17a <HAL_TIM_IC_Start_IT+0x11a>
  34936. 800f170: 687b ldr r3, [r7, #4]
  34937. 800f172: 2202 movs r2, #2
  34938. 800f174: f883 2044 strb.w r2, [r3, #68] @ 0x44
  34939. 800f178: e013 b.n 800f1a2 <HAL_TIM_IC_Start_IT+0x142>
  34940. 800f17a: 683b ldr r3, [r7, #0]
  34941. 800f17c: 2b04 cmp r3, #4
  34942. 800f17e: d104 bne.n 800f18a <HAL_TIM_IC_Start_IT+0x12a>
  34943. 800f180: 687b ldr r3, [r7, #4]
  34944. 800f182: 2202 movs r2, #2
  34945. 800f184: f883 2045 strb.w r2, [r3, #69] @ 0x45
  34946. 800f188: e00b b.n 800f1a2 <HAL_TIM_IC_Start_IT+0x142>
  34947. 800f18a: 683b ldr r3, [r7, #0]
  34948. 800f18c: 2b08 cmp r3, #8
  34949. 800f18e: d104 bne.n 800f19a <HAL_TIM_IC_Start_IT+0x13a>
  34950. 800f190: 687b ldr r3, [r7, #4]
  34951. 800f192: 2202 movs r2, #2
  34952. 800f194: f883 2046 strb.w r2, [r3, #70] @ 0x46
  34953. 800f198: e003 b.n 800f1a2 <HAL_TIM_IC_Start_IT+0x142>
  34954. 800f19a: 687b ldr r3, [r7, #4]
  34955. 800f19c: 2202 movs r2, #2
  34956. 800f19e: f883 2047 strb.w r2, [r3, #71] @ 0x47
  34957. switch (Channel)
  34958. 800f1a2: 683b ldr r3, [r7, #0]
  34959. 800f1a4: 2b0c cmp r3, #12
  34960. 800f1a6: d841 bhi.n 800f22c <HAL_TIM_IC_Start_IT+0x1cc>
  34961. 800f1a8: a201 add r2, pc, #4 @ (adr r2, 800f1b0 <HAL_TIM_IC_Start_IT+0x150>)
  34962. 800f1aa: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  34963. 800f1ae: bf00 nop
  34964. 800f1b0: 0800f1e5 .word 0x0800f1e5
  34965. 800f1b4: 0800f22d .word 0x0800f22d
  34966. 800f1b8: 0800f22d .word 0x0800f22d
  34967. 800f1bc: 0800f22d .word 0x0800f22d
  34968. 800f1c0: 0800f1f7 .word 0x0800f1f7
  34969. 800f1c4: 0800f22d .word 0x0800f22d
  34970. 800f1c8: 0800f22d .word 0x0800f22d
  34971. 800f1cc: 0800f22d .word 0x0800f22d
  34972. 800f1d0: 0800f209 .word 0x0800f209
  34973. 800f1d4: 0800f22d .word 0x0800f22d
  34974. 800f1d8: 0800f22d .word 0x0800f22d
  34975. 800f1dc: 0800f22d .word 0x0800f22d
  34976. 800f1e0: 0800f21b .word 0x0800f21b
  34977. {
  34978. case TIM_CHANNEL_1:
  34979. {
  34980. /* Enable the TIM Capture/Compare 1 interrupt */
  34981. __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);
  34982. 800f1e4: 687b ldr r3, [r7, #4]
  34983. 800f1e6: 681b ldr r3, [r3, #0]
  34984. 800f1e8: 68da ldr r2, [r3, #12]
  34985. 800f1ea: 687b ldr r3, [r7, #4]
  34986. 800f1ec: 681b ldr r3, [r3, #0]
  34987. 800f1ee: f042 0202 orr.w r2, r2, #2
  34988. 800f1f2: 60da str r2, [r3, #12]
  34989. break;
  34990. 800f1f4: e01d b.n 800f232 <HAL_TIM_IC_Start_IT+0x1d2>
  34991. }
  34992. case TIM_CHANNEL_2:
  34993. {
  34994. /* Enable the TIM Capture/Compare 2 interrupt */
  34995. __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);
  34996. 800f1f6: 687b ldr r3, [r7, #4]
  34997. 800f1f8: 681b ldr r3, [r3, #0]
  34998. 800f1fa: 68da ldr r2, [r3, #12]
  34999. 800f1fc: 687b ldr r3, [r7, #4]
  35000. 800f1fe: 681b ldr r3, [r3, #0]
  35001. 800f200: f042 0204 orr.w r2, r2, #4
  35002. 800f204: 60da str r2, [r3, #12]
  35003. break;
  35004. 800f206: e014 b.n 800f232 <HAL_TIM_IC_Start_IT+0x1d2>
  35005. }
  35006. case TIM_CHANNEL_3:
  35007. {
  35008. /* Enable the TIM Capture/Compare 3 interrupt */
  35009. __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3);
  35010. 800f208: 687b ldr r3, [r7, #4]
  35011. 800f20a: 681b ldr r3, [r3, #0]
  35012. 800f20c: 68da ldr r2, [r3, #12]
  35013. 800f20e: 687b ldr r3, [r7, #4]
  35014. 800f210: 681b ldr r3, [r3, #0]
  35015. 800f212: f042 0208 orr.w r2, r2, #8
  35016. 800f216: 60da str r2, [r3, #12]
  35017. break;
  35018. 800f218: e00b b.n 800f232 <HAL_TIM_IC_Start_IT+0x1d2>
  35019. }
  35020. case TIM_CHANNEL_4:
  35021. {
  35022. /* Enable the TIM Capture/Compare 4 interrupt */
  35023. __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4);
  35024. 800f21a: 687b ldr r3, [r7, #4]
  35025. 800f21c: 681b ldr r3, [r3, #0]
  35026. 800f21e: 68da ldr r2, [r3, #12]
  35027. 800f220: 687b ldr r3, [r7, #4]
  35028. 800f222: 681b ldr r3, [r3, #0]
  35029. 800f224: f042 0210 orr.w r2, r2, #16
  35030. 800f228: 60da str r2, [r3, #12]
  35031. break;
  35032. 800f22a: e002 b.n 800f232 <HAL_TIM_IC_Start_IT+0x1d2>
  35033. }
  35034. default:
  35035. status = HAL_ERROR;
  35036. 800f22c: 2301 movs r3, #1
  35037. 800f22e: 73fb strb r3, [r7, #15]
  35038. break;
  35039. 800f230: bf00 nop
  35040. }
  35041. if (status == HAL_OK)
  35042. 800f232: 7bfb ldrb r3, [r7, #15]
  35043. 800f234: 2b00 cmp r3, #0
  35044. 800f236: d14e bne.n 800f2d6 <HAL_TIM_IC_Start_IT+0x276>
  35045. {
  35046. /* Enable the Input Capture channel */
  35047. TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);
  35048. 800f238: 687b ldr r3, [r7, #4]
  35049. 800f23a: 681b ldr r3, [r3, #0]
  35050. 800f23c: 2201 movs r2, #1
  35051. 800f23e: 6839 ldr r1, [r7, #0]
  35052. 800f240: 4618 mov r0, r3
  35053. 800f242: f001 f9ed bl 8010620 <TIM_CCxChannelCmd>
  35054. /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */
  35055. if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
  35056. 800f246: 687b ldr r3, [r7, #4]
  35057. 800f248: 681b ldr r3, [r3, #0]
  35058. 800f24a: 4a25 ldr r2, [pc, #148] @ (800f2e0 <HAL_TIM_IC_Start_IT+0x280>)
  35059. 800f24c: 4293 cmp r3, r2
  35060. 800f24e: d022 beq.n 800f296 <HAL_TIM_IC_Start_IT+0x236>
  35061. 800f250: 687b ldr r3, [r7, #4]
  35062. 800f252: 681b ldr r3, [r3, #0]
  35063. 800f254: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  35064. 800f258: d01d beq.n 800f296 <HAL_TIM_IC_Start_IT+0x236>
  35065. 800f25a: 687b ldr r3, [r7, #4]
  35066. 800f25c: 681b ldr r3, [r3, #0]
  35067. 800f25e: 4a21 ldr r2, [pc, #132] @ (800f2e4 <HAL_TIM_IC_Start_IT+0x284>)
  35068. 800f260: 4293 cmp r3, r2
  35069. 800f262: d018 beq.n 800f296 <HAL_TIM_IC_Start_IT+0x236>
  35070. 800f264: 687b ldr r3, [r7, #4]
  35071. 800f266: 681b ldr r3, [r3, #0]
  35072. 800f268: 4a1f ldr r2, [pc, #124] @ (800f2e8 <HAL_TIM_IC_Start_IT+0x288>)
  35073. 800f26a: 4293 cmp r3, r2
  35074. 800f26c: d013 beq.n 800f296 <HAL_TIM_IC_Start_IT+0x236>
  35075. 800f26e: 687b ldr r3, [r7, #4]
  35076. 800f270: 681b ldr r3, [r3, #0]
  35077. 800f272: 4a1e ldr r2, [pc, #120] @ (800f2ec <HAL_TIM_IC_Start_IT+0x28c>)
  35078. 800f274: 4293 cmp r3, r2
  35079. 800f276: d00e beq.n 800f296 <HAL_TIM_IC_Start_IT+0x236>
  35080. 800f278: 687b ldr r3, [r7, #4]
  35081. 800f27a: 681b ldr r3, [r3, #0]
  35082. 800f27c: 4a1c ldr r2, [pc, #112] @ (800f2f0 <HAL_TIM_IC_Start_IT+0x290>)
  35083. 800f27e: 4293 cmp r3, r2
  35084. 800f280: d009 beq.n 800f296 <HAL_TIM_IC_Start_IT+0x236>
  35085. 800f282: 687b ldr r3, [r7, #4]
  35086. 800f284: 681b ldr r3, [r3, #0]
  35087. 800f286: 4a1b ldr r2, [pc, #108] @ (800f2f4 <HAL_TIM_IC_Start_IT+0x294>)
  35088. 800f288: 4293 cmp r3, r2
  35089. 800f28a: d004 beq.n 800f296 <HAL_TIM_IC_Start_IT+0x236>
  35090. 800f28c: 687b ldr r3, [r7, #4]
  35091. 800f28e: 681b ldr r3, [r3, #0]
  35092. 800f290: 4a19 ldr r2, [pc, #100] @ (800f2f8 <HAL_TIM_IC_Start_IT+0x298>)
  35093. 800f292: 4293 cmp r3, r2
  35094. 800f294: d115 bne.n 800f2c2 <HAL_TIM_IC_Start_IT+0x262>
  35095. {
  35096. tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
  35097. 800f296: 687b ldr r3, [r7, #4]
  35098. 800f298: 681b ldr r3, [r3, #0]
  35099. 800f29a: 689a ldr r2, [r3, #8]
  35100. 800f29c: 4b17 ldr r3, [pc, #92] @ (800f2fc <HAL_TIM_IC_Start_IT+0x29c>)
  35101. 800f29e: 4013 ands r3, r2
  35102. 800f2a0: 60bb str r3, [r7, #8]
  35103. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  35104. 800f2a2: 68bb ldr r3, [r7, #8]
  35105. 800f2a4: 2b06 cmp r3, #6
  35106. 800f2a6: d015 beq.n 800f2d4 <HAL_TIM_IC_Start_IT+0x274>
  35107. 800f2a8: 68bb ldr r3, [r7, #8]
  35108. 800f2aa: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  35109. 800f2ae: d011 beq.n 800f2d4 <HAL_TIM_IC_Start_IT+0x274>
  35110. {
  35111. __HAL_TIM_ENABLE(htim);
  35112. 800f2b0: 687b ldr r3, [r7, #4]
  35113. 800f2b2: 681b ldr r3, [r3, #0]
  35114. 800f2b4: 681a ldr r2, [r3, #0]
  35115. 800f2b6: 687b ldr r3, [r7, #4]
  35116. 800f2b8: 681b ldr r3, [r3, #0]
  35117. 800f2ba: f042 0201 orr.w r2, r2, #1
  35118. 800f2be: 601a str r2, [r3, #0]
  35119. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  35120. 800f2c0: e008 b.n 800f2d4 <HAL_TIM_IC_Start_IT+0x274>
  35121. }
  35122. }
  35123. else
  35124. {
  35125. __HAL_TIM_ENABLE(htim);
  35126. 800f2c2: 687b ldr r3, [r7, #4]
  35127. 800f2c4: 681b ldr r3, [r3, #0]
  35128. 800f2c6: 681a ldr r2, [r3, #0]
  35129. 800f2c8: 687b ldr r3, [r7, #4]
  35130. 800f2ca: 681b ldr r3, [r3, #0]
  35131. 800f2cc: f042 0201 orr.w r2, r2, #1
  35132. 800f2d0: 601a str r2, [r3, #0]
  35133. 800f2d2: e000 b.n 800f2d6 <HAL_TIM_IC_Start_IT+0x276>
  35134. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  35135. 800f2d4: bf00 nop
  35136. }
  35137. }
  35138. /* Return function status */
  35139. return status;
  35140. 800f2d6: 7bfb ldrb r3, [r7, #15]
  35141. }
  35142. 800f2d8: 4618 mov r0, r3
  35143. 800f2da: 3710 adds r7, #16
  35144. 800f2dc: 46bd mov sp, r7
  35145. 800f2de: bd80 pop {r7, pc}
  35146. 800f2e0: 40010000 .word 0x40010000
  35147. 800f2e4: 40000400 .word 0x40000400
  35148. 800f2e8: 40000800 .word 0x40000800
  35149. 800f2ec: 40000c00 .word 0x40000c00
  35150. 800f2f0: 40010400 .word 0x40010400
  35151. 800f2f4: 40001800 .word 0x40001800
  35152. 800f2f8: 40014000 .word 0x40014000
  35153. 800f2fc: 00010007 .word 0x00010007
  35154. 0800f300 <HAL_TIM_IRQHandler>:
  35155. * @brief This function handles TIM interrupts requests.
  35156. * @param htim TIM handle
  35157. * @retval None
  35158. */
  35159. void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim)
  35160. {
  35161. 800f300: b580 push {r7, lr}
  35162. 800f302: b084 sub sp, #16
  35163. 800f304: af00 add r7, sp, #0
  35164. 800f306: 6078 str r0, [r7, #4]
  35165. uint32_t itsource = htim->Instance->DIER;
  35166. 800f308: 687b ldr r3, [r7, #4]
  35167. 800f30a: 681b ldr r3, [r3, #0]
  35168. 800f30c: 68db ldr r3, [r3, #12]
  35169. 800f30e: 60fb str r3, [r7, #12]
  35170. uint32_t itflag = htim->Instance->SR;
  35171. 800f310: 687b ldr r3, [r7, #4]
  35172. 800f312: 681b ldr r3, [r3, #0]
  35173. 800f314: 691b ldr r3, [r3, #16]
  35174. 800f316: 60bb str r3, [r7, #8]
  35175. /* Capture compare 1 event */
  35176. if ((itflag & (TIM_FLAG_CC1)) == (TIM_FLAG_CC1))
  35177. 800f318: 68bb ldr r3, [r7, #8]
  35178. 800f31a: f003 0302 and.w r3, r3, #2
  35179. 800f31e: 2b00 cmp r3, #0
  35180. 800f320: d020 beq.n 800f364 <HAL_TIM_IRQHandler+0x64>
  35181. {
  35182. if ((itsource & (TIM_IT_CC1)) == (TIM_IT_CC1))
  35183. 800f322: 68fb ldr r3, [r7, #12]
  35184. 800f324: f003 0302 and.w r3, r3, #2
  35185. 800f328: 2b00 cmp r3, #0
  35186. 800f32a: d01b beq.n 800f364 <HAL_TIM_IRQHandler+0x64>
  35187. {
  35188. {
  35189. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_CC1);
  35190. 800f32c: 687b ldr r3, [r7, #4]
  35191. 800f32e: 681b ldr r3, [r3, #0]
  35192. 800f330: f06f 0202 mvn.w r2, #2
  35193. 800f334: 611a str r2, [r3, #16]
  35194. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;
  35195. 800f336: 687b ldr r3, [r7, #4]
  35196. 800f338: 2201 movs r2, #1
  35197. 800f33a: 771a strb r2, [r3, #28]
  35198. /* Input capture event */
  35199. if ((htim->Instance->CCMR1 & TIM_CCMR1_CC1S) != 0x00U)
  35200. 800f33c: 687b ldr r3, [r7, #4]
  35201. 800f33e: 681b ldr r3, [r3, #0]
  35202. 800f340: 699b ldr r3, [r3, #24]
  35203. 800f342: f003 0303 and.w r3, r3, #3
  35204. 800f346: 2b00 cmp r3, #0
  35205. 800f348: d003 beq.n 800f352 <HAL_TIM_IRQHandler+0x52>
  35206. {
  35207. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  35208. htim->IC_CaptureCallback(htim);
  35209. #else
  35210. HAL_TIM_IC_CaptureCallback(htim);
  35211. 800f34a: 6878 ldr r0, [r7, #4]
  35212. 800f34c: f7f2 faf8 bl 8001940 <HAL_TIM_IC_CaptureCallback>
  35213. 800f350: e005 b.n 800f35e <HAL_TIM_IRQHandler+0x5e>
  35214. {
  35215. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  35216. htim->OC_DelayElapsedCallback(htim);
  35217. htim->PWM_PulseFinishedCallback(htim);
  35218. #else
  35219. HAL_TIM_OC_DelayElapsedCallback(htim);
  35220. 800f352: 6878 ldr r0, [r7, #4]
  35221. 800f354: f000 fbc8 bl 800fae8 <HAL_TIM_OC_DelayElapsedCallback>
  35222. HAL_TIM_PWM_PulseFinishedCallback(htim);
  35223. 800f358: 6878 ldr r0, [r7, #4]
  35224. 800f35a: f000 fbcf bl 800fafc <HAL_TIM_PWM_PulseFinishedCallback>
  35225. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  35226. }
  35227. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;
  35228. 800f35e: 687b ldr r3, [r7, #4]
  35229. 800f360: 2200 movs r2, #0
  35230. 800f362: 771a strb r2, [r3, #28]
  35231. }
  35232. }
  35233. }
  35234. /* Capture compare 2 event */
  35235. if ((itflag & (TIM_FLAG_CC2)) == (TIM_FLAG_CC2))
  35236. 800f364: 68bb ldr r3, [r7, #8]
  35237. 800f366: f003 0304 and.w r3, r3, #4
  35238. 800f36a: 2b00 cmp r3, #0
  35239. 800f36c: d020 beq.n 800f3b0 <HAL_TIM_IRQHandler+0xb0>
  35240. {
  35241. if ((itsource & (TIM_IT_CC2)) == (TIM_IT_CC2))
  35242. 800f36e: 68fb ldr r3, [r7, #12]
  35243. 800f370: f003 0304 and.w r3, r3, #4
  35244. 800f374: 2b00 cmp r3, #0
  35245. 800f376: d01b beq.n 800f3b0 <HAL_TIM_IRQHandler+0xb0>
  35246. {
  35247. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_CC2);
  35248. 800f378: 687b ldr r3, [r7, #4]
  35249. 800f37a: 681b ldr r3, [r3, #0]
  35250. 800f37c: f06f 0204 mvn.w r2, #4
  35251. 800f380: 611a str r2, [r3, #16]
  35252. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;
  35253. 800f382: 687b ldr r3, [r7, #4]
  35254. 800f384: 2202 movs r2, #2
  35255. 800f386: 771a strb r2, [r3, #28]
  35256. /* Input capture event */
  35257. if ((htim->Instance->CCMR1 & TIM_CCMR1_CC2S) != 0x00U)
  35258. 800f388: 687b ldr r3, [r7, #4]
  35259. 800f38a: 681b ldr r3, [r3, #0]
  35260. 800f38c: 699b ldr r3, [r3, #24]
  35261. 800f38e: f403 7340 and.w r3, r3, #768 @ 0x300
  35262. 800f392: 2b00 cmp r3, #0
  35263. 800f394: d003 beq.n 800f39e <HAL_TIM_IRQHandler+0x9e>
  35264. {
  35265. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  35266. htim->IC_CaptureCallback(htim);
  35267. #else
  35268. HAL_TIM_IC_CaptureCallback(htim);
  35269. 800f396: 6878 ldr r0, [r7, #4]
  35270. 800f398: f7f2 fad2 bl 8001940 <HAL_TIM_IC_CaptureCallback>
  35271. 800f39c: e005 b.n 800f3aa <HAL_TIM_IRQHandler+0xaa>
  35272. {
  35273. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  35274. htim->OC_DelayElapsedCallback(htim);
  35275. htim->PWM_PulseFinishedCallback(htim);
  35276. #else
  35277. HAL_TIM_OC_DelayElapsedCallback(htim);
  35278. 800f39e: 6878 ldr r0, [r7, #4]
  35279. 800f3a0: f000 fba2 bl 800fae8 <HAL_TIM_OC_DelayElapsedCallback>
  35280. HAL_TIM_PWM_PulseFinishedCallback(htim);
  35281. 800f3a4: 6878 ldr r0, [r7, #4]
  35282. 800f3a6: f000 fba9 bl 800fafc <HAL_TIM_PWM_PulseFinishedCallback>
  35283. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  35284. }
  35285. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;
  35286. 800f3aa: 687b ldr r3, [r7, #4]
  35287. 800f3ac: 2200 movs r2, #0
  35288. 800f3ae: 771a strb r2, [r3, #28]
  35289. }
  35290. }
  35291. /* Capture compare 3 event */
  35292. if ((itflag & (TIM_FLAG_CC3)) == (TIM_FLAG_CC3))
  35293. 800f3b0: 68bb ldr r3, [r7, #8]
  35294. 800f3b2: f003 0308 and.w r3, r3, #8
  35295. 800f3b6: 2b00 cmp r3, #0
  35296. 800f3b8: d020 beq.n 800f3fc <HAL_TIM_IRQHandler+0xfc>
  35297. {
  35298. if ((itsource & (TIM_IT_CC3)) == (TIM_IT_CC3))
  35299. 800f3ba: 68fb ldr r3, [r7, #12]
  35300. 800f3bc: f003 0308 and.w r3, r3, #8
  35301. 800f3c0: 2b00 cmp r3, #0
  35302. 800f3c2: d01b beq.n 800f3fc <HAL_TIM_IRQHandler+0xfc>
  35303. {
  35304. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_CC3);
  35305. 800f3c4: 687b ldr r3, [r7, #4]
  35306. 800f3c6: 681b ldr r3, [r3, #0]
  35307. 800f3c8: f06f 0208 mvn.w r2, #8
  35308. 800f3cc: 611a str r2, [r3, #16]
  35309. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;
  35310. 800f3ce: 687b ldr r3, [r7, #4]
  35311. 800f3d0: 2204 movs r2, #4
  35312. 800f3d2: 771a strb r2, [r3, #28]
  35313. /* Input capture event */
  35314. if ((htim->Instance->CCMR2 & TIM_CCMR2_CC3S) != 0x00U)
  35315. 800f3d4: 687b ldr r3, [r7, #4]
  35316. 800f3d6: 681b ldr r3, [r3, #0]
  35317. 800f3d8: 69db ldr r3, [r3, #28]
  35318. 800f3da: f003 0303 and.w r3, r3, #3
  35319. 800f3de: 2b00 cmp r3, #0
  35320. 800f3e0: d003 beq.n 800f3ea <HAL_TIM_IRQHandler+0xea>
  35321. {
  35322. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  35323. htim->IC_CaptureCallback(htim);
  35324. #else
  35325. HAL_TIM_IC_CaptureCallback(htim);
  35326. 800f3e2: 6878 ldr r0, [r7, #4]
  35327. 800f3e4: f7f2 faac bl 8001940 <HAL_TIM_IC_CaptureCallback>
  35328. 800f3e8: e005 b.n 800f3f6 <HAL_TIM_IRQHandler+0xf6>
  35329. {
  35330. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  35331. htim->OC_DelayElapsedCallback(htim);
  35332. htim->PWM_PulseFinishedCallback(htim);
  35333. #else
  35334. HAL_TIM_OC_DelayElapsedCallback(htim);
  35335. 800f3ea: 6878 ldr r0, [r7, #4]
  35336. 800f3ec: f000 fb7c bl 800fae8 <HAL_TIM_OC_DelayElapsedCallback>
  35337. HAL_TIM_PWM_PulseFinishedCallback(htim);
  35338. 800f3f0: 6878 ldr r0, [r7, #4]
  35339. 800f3f2: f000 fb83 bl 800fafc <HAL_TIM_PWM_PulseFinishedCallback>
  35340. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  35341. }
  35342. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;
  35343. 800f3f6: 687b ldr r3, [r7, #4]
  35344. 800f3f8: 2200 movs r2, #0
  35345. 800f3fa: 771a strb r2, [r3, #28]
  35346. }
  35347. }
  35348. /* Capture compare 4 event */
  35349. if ((itflag & (TIM_FLAG_CC4)) == (TIM_FLAG_CC4))
  35350. 800f3fc: 68bb ldr r3, [r7, #8]
  35351. 800f3fe: f003 0310 and.w r3, r3, #16
  35352. 800f402: 2b00 cmp r3, #0
  35353. 800f404: d020 beq.n 800f448 <HAL_TIM_IRQHandler+0x148>
  35354. {
  35355. if ((itsource & (TIM_IT_CC4)) == (TIM_IT_CC4))
  35356. 800f406: 68fb ldr r3, [r7, #12]
  35357. 800f408: f003 0310 and.w r3, r3, #16
  35358. 800f40c: 2b00 cmp r3, #0
  35359. 800f40e: d01b beq.n 800f448 <HAL_TIM_IRQHandler+0x148>
  35360. {
  35361. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_CC4);
  35362. 800f410: 687b ldr r3, [r7, #4]
  35363. 800f412: 681b ldr r3, [r3, #0]
  35364. 800f414: f06f 0210 mvn.w r2, #16
  35365. 800f418: 611a str r2, [r3, #16]
  35366. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4;
  35367. 800f41a: 687b ldr r3, [r7, #4]
  35368. 800f41c: 2208 movs r2, #8
  35369. 800f41e: 771a strb r2, [r3, #28]
  35370. /* Input capture event */
  35371. if ((htim->Instance->CCMR2 & TIM_CCMR2_CC4S) != 0x00U)
  35372. 800f420: 687b ldr r3, [r7, #4]
  35373. 800f422: 681b ldr r3, [r3, #0]
  35374. 800f424: 69db ldr r3, [r3, #28]
  35375. 800f426: f403 7340 and.w r3, r3, #768 @ 0x300
  35376. 800f42a: 2b00 cmp r3, #0
  35377. 800f42c: d003 beq.n 800f436 <HAL_TIM_IRQHandler+0x136>
  35378. {
  35379. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  35380. htim->IC_CaptureCallback(htim);
  35381. #else
  35382. HAL_TIM_IC_CaptureCallback(htim);
  35383. 800f42e: 6878 ldr r0, [r7, #4]
  35384. 800f430: f7f2 fa86 bl 8001940 <HAL_TIM_IC_CaptureCallback>
  35385. 800f434: e005 b.n 800f442 <HAL_TIM_IRQHandler+0x142>
  35386. {
  35387. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  35388. htim->OC_DelayElapsedCallback(htim);
  35389. htim->PWM_PulseFinishedCallback(htim);
  35390. #else
  35391. HAL_TIM_OC_DelayElapsedCallback(htim);
  35392. 800f436: 6878 ldr r0, [r7, #4]
  35393. 800f438: f000 fb56 bl 800fae8 <HAL_TIM_OC_DelayElapsedCallback>
  35394. HAL_TIM_PWM_PulseFinishedCallback(htim);
  35395. 800f43c: 6878 ldr r0, [r7, #4]
  35396. 800f43e: f000 fb5d bl 800fafc <HAL_TIM_PWM_PulseFinishedCallback>
  35397. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  35398. }
  35399. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;
  35400. 800f442: 687b ldr r3, [r7, #4]
  35401. 800f444: 2200 movs r2, #0
  35402. 800f446: 771a strb r2, [r3, #28]
  35403. }
  35404. }
  35405. /* TIM Update event */
  35406. if ((itflag & (TIM_FLAG_UPDATE)) == (TIM_FLAG_UPDATE))
  35407. 800f448: 68bb ldr r3, [r7, #8]
  35408. 800f44a: f003 0301 and.w r3, r3, #1
  35409. 800f44e: 2b00 cmp r3, #0
  35410. 800f450: d00c beq.n 800f46c <HAL_TIM_IRQHandler+0x16c>
  35411. {
  35412. if ((itsource & (TIM_IT_UPDATE)) == (TIM_IT_UPDATE))
  35413. 800f452: 68fb ldr r3, [r7, #12]
  35414. 800f454: f003 0301 and.w r3, r3, #1
  35415. 800f458: 2b00 cmp r3, #0
  35416. 800f45a: d007 beq.n 800f46c <HAL_TIM_IRQHandler+0x16c>
  35417. {
  35418. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_UPDATE);
  35419. 800f45c: 687b ldr r3, [r7, #4]
  35420. 800f45e: 681b ldr r3, [r3, #0]
  35421. 800f460: f06f 0201 mvn.w r2, #1
  35422. 800f464: 611a str r2, [r3, #16]
  35423. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  35424. htim->PeriodElapsedCallback(htim);
  35425. #else
  35426. HAL_TIM_PeriodElapsedCallback(htim);
  35427. 800f466: 6878 ldr r0, [r7, #4]
  35428. 800f468: f7f2 fc74 bl 8001d54 <HAL_TIM_PeriodElapsedCallback>
  35429. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  35430. }
  35431. }
  35432. /* TIM Break input event */
  35433. if (((itflag & (TIM_FLAG_BREAK)) == (TIM_FLAG_BREAK)) || \
  35434. 800f46c: 68bb ldr r3, [r7, #8]
  35435. 800f46e: f003 0380 and.w r3, r3, #128 @ 0x80
  35436. 800f472: 2b00 cmp r3, #0
  35437. 800f474: d104 bne.n 800f480 <HAL_TIM_IRQHandler+0x180>
  35438. ((itflag & (TIM_FLAG_SYSTEM_BREAK)) == (TIM_FLAG_SYSTEM_BREAK)))
  35439. 800f476: 68bb ldr r3, [r7, #8]
  35440. 800f478: f403 5300 and.w r3, r3, #8192 @ 0x2000
  35441. if (((itflag & (TIM_FLAG_BREAK)) == (TIM_FLAG_BREAK)) || \
  35442. 800f47c: 2b00 cmp r3, #0
  35443. 800f47e: d00c beq.n 800f49a <HAL_TIM_IRQHandler+0x19a>
  35444. {
  35445. if ((itsource & (TIM_IT_BREAK)) == (TIM_IT_BREAK))
  35446. 800f480: 68fb ldr r3, [r7, #12]
  35447. 800f482: f003 0380 and.w r3, r3, #128 @ 0x80
  35448. 800f486: 2b00 cmp r3, #0
  35449. 800f488: d007 beq.n 800f49a <HAL_TIM_IRQHandler+0x19a>
  35450. {
  35451. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_BREAK | TIM_FLAG_SYSTEM_BREAK);
  35452. 800f48a: 687b ldr r3, [r7, #4]
  35453. 800f48c: 681b ldr r3, [r3, #0]
  35454. 800f48e: f46f 5202 mvn.w r2, #8320 @ 0x2080
  35455. 800f492: 611a str r2, [r3, #16]
  35456. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  35457. htim->BreakCallback(htim);
  35458. #else
  35459. HAL_TIMEx_BreakCallback(htim);
  35460. 800f494: 6878 ldr r0, [r7, #4]
  35461. 800f496: f001 f9ff bl 8010898 <HAL_TIMEx_BreakCallback>
  35462. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  35463. }
  35464. }
  35465. /* TIM Break2 input event */
  35466. if ((itflag & (TIM_FLAG_BREAK2)) == (TIM_FLAG_BREAK2))
  35467. 800f49a: 68bb ldr r3, [r7, #8]
  35468. 800f49c: f403 7380 and.w r3, r3, #256 @ 0x100
  35469. 800f4a0: 2b00 cmp r3, #0
  35470. 800f4a2: d00c beq.n 800f4be <HAL_TIM_IRQHandler+0x1be>
  35471. {
  35472. if ((itsource & (TIM_IT_BREAK)) == (TIM_IT_BREAK))
  35473. 800f4a4: 68fb ldr r3, [r7, #12]
  35474. 800f4a6: f003 0380 and.w r3, r3, #128 @ 0x80
  35475. 800f4aa: 2b00 cmp r3, #0
  35476. 800f4ac: d007 beq.n 800f4be <HAL_TIM_IRQHandler+0x1be>
  35477. {
  35478. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_BREAK2);
  35479. 800f4ae: 687b ldr r3, [r7, #4]
  35480. 800f4b0: 681b ldr r3, [r3, #0]
  35481. 800f4b2: f46f 7280 mvn.w r2, #256 @ 0x100
  35482. 800f4b6: 611a str r2, [r3, #16]
  35483. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  35484. htim->Break2Callback(htim);
  35485. #else
  35486. HAL_TIMEx_Break2Callback(htim);
  35487. 800f4b8: 6878 ldr r0, [r7, #4]
  35488. 800f4ba: f001 f9f7 bl 80108ac <HAL_TIMEx_Break2Callback>
  35489. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  35490. }
  35491. }
  35492. /* TIM Trigger detection event */
  35493. if ((itflag & (TIM_FLAG_TRIGGER)) == (TIM_FLAG_TRIGGER))
  35494. 800f4be: 68bb ldr r3, [r7, #8]
  35495. 800f4c0: f003 0340 and.w r3, r3, #64 @ 0x40
  35496. 800f4c4: 2b00 cmp r3, #0
  35497. 800f4c6: d00c beq.n 800f4e2 <HAL_TIM_IRQHandler+0x1e2>
  35498. {
  35499. if ((itsource & (TIM_IT_TRIGGER)) == (TIM_IT_TRIGGER))
  35500. 800f4c8: 68fb ldr r3, [r7, #12]
  35501. 800f4ca: f003 0340 and.w r3, r3, #64 @ 0x40
  35502. 800f4ce: 2b00 cmp r3, #0
  35503. 800f4d0: d007 beq.n 800f4e2 <HAL_TIM_IRQHandler+0x1e2>
  35504. {
  35505. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_TRIGGER);
  35506. 800f4d2: 687b ldr r3, [r7, #4]
  35507. 800f4d4: 681b ldr r3, [r3, #0]
  35508. 800f4d6: f06f 0240 mvn.w r2, #64 @ 0x40
  35509. 800f4da: 611a str r2, [r3, #16]
  35510. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  35511. htim->TriggerCallback(htim);
  35512. #else
  35513. HAL_TIM_TriggerCallback(htim);
  35514. 800f4dc: 6878 ldr r0, [r7, #4]
  35515. 800f4de: f000 fb17 bl 800fb10 <HAL_TIM_TriggerCallback>
  35516. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  35517. }
  35518. }
  35519. /* TIM commutation event */
  35520. if ((itflag & (TIM_FLAG_COM)) == (TIM_FLAG_COM))
  35521. 800f4e2: 68bb ldr r3, [r7, #8]
  35522. 800f4e4: f003 0320 and.w r3, r3, #32
  35523. 800f4e8: 2b00 cmp r3, #0
  35524. 800f4ea: d00c beq.n 800f506 <HAL_TIM_IRQHandler+0x206>
  35525. {
  35526. if ((itsource & (TIM_IT_COM)) == (TIM_IT_COM))
  35527. 800f4ec: 68fb ldr r3, [r7, #12]
  35528. 800f4ee: f003 0320 and.w r3, r3, #32
  35529. 800f4f2: 2b00 cmp r3, #0
  35530. 800f4f4: d007 beq.n 800f506 <HAL_TIM_IRQHandler+0x206>
  35531. {
  35532. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_COM);
  35533. 800f4f6: 687b ldr r3, [r7, #4]
  35534. 800f4f8: 681b ldr r3, [r3, #0]
  35535. 800f4fa: f06f 0220 mvn.w r2, #32
  35536. 800f4fe: 611a str r2, [r3, #16]
  35537. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  35538. htim->CommutationCallback(htim);
  35539. #else
  35540. HAL_TIMEx_CommutCallback(htim);
  35541. 800f500: 6878 ldr r0, [r7, #4]
  35542. 800f502: f001 f9bf bl 8010884 <HAL_TIMEx_CommutCallback>
  35543. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  35544. }
  35545. }
  35546. }
  35547. 800f506: bf00 nop
  35548. 800f508: 3710 adds r7, #16
  35549. 800f50a: 46bd mov sp, r7
  35550. 800f50c: bd80 pop {r7, pc}
  35551. 0800f50e <HAL_TIM_IC_ConfigChannel>:
  35552. * @arg TIM_CHANNEL_3: TIM Channel 3 selected
  35553. * @arg TIM_CHANNEL_4: TIM Channel 4 selected
  35554. * @retval HAL status
  35555. */
  35556. HAL_StatusTypeDef HAL_TIM_IC_ConfigChannel(TIM_HandleTypeDef *htim, const TIM_IC_InitTypeDef *sConfig, uint32_t Channel)
  35557. {
  35558. 800f50e: b580 push {r7, lr}
  35559. 800f510: b086 sub sp, #24
  35560. 800f512: af00 add r7, sp, #0
  35561. 800f514: 60f8 str r0, [r7, #12]
  35562. 800f516: 60b9 str r1, [r7, #8]
  35563. 800f518: 607a str r2, [r7, #4]
  35564. HAL_StatusTypeDef status = HAL_OK;
  35565. 800f51a: 2300 movs r3, #0
  35566. 800f51c: 75fb strb r3, [r7, #23]
  35567. assert_param(IS_TIM_IC_SELECTION(sConfig->ICSelection));
  35568. assert_param(IS_TIM_IC_PRESCALER(sConfig->ICPrescaler));
  35569. assert_param(IS_TIM_IC_FILTER(sConfig->ICFilter));
  35570. /* Process Locked */
  35571. __HAL_LOCK(htim);
  35572. 800f51e: 68fb ldr r3, [r7, #12]
  35573. 800f520: f893 303c ldrb.w r3, [r3, #60] @ 0x3c
  35574. 800f524: 2b01 cmp r3, #1
  35575. 800f526: d101 bne.n 800f52c <HAL_TIM_IC_ConfigChannel+0x1e>
  35576. 800f528: 2302 movs r3, #2
  35577. 800f52a: e088 b.n 800f63e <HAL_TIM_IC_ConfigChannel+0x130>
  35578. 800f52c: 68fb ldr r3, [r7, #12]
  35579. 800f52e: 2201 movs r2, #1
  35580. 800f530: f883 203c strb.w r2, [r3, #60] @ 0x3c
  35581. if (Channel == TIM_CHANNEL_1)
  35582. 800f534: 687b ldr r3, [r7, #4]
  35583. 800f536: 2b00 cmp r3, #0
  35584. 800f538: d11b bne.n 800f572 <HAL_TIM_IC_ConfigChannel+0x64>
  35585. {
  35586. /* TI1 Configuration */
  35587. TIM_TI1_SetConfig(htim->Instance,
  35588. 800f53a: 68fb ldr r3, [r7, #12]
  35589. 800f53c: 6818 ldr r0, [r3, #0]
  35590. sConfig->ICPolarity,
  35591. 800f53e: 68bb ldr r3, [r7, #8]
  35592. 800f540: 6819 ldr r1, [r3, #0]
  35593. sConfig->ICSelection,
  35594. 800f542: 68bb ldr r3, [r7, #8]
  35595. 800f544: 685a ldr r2, [r3, #4]
  35596. sConfig->ICFilter);
  35597. 800f546: 68bb ldr r3, [r7, #8]
  35598. 800f548: 68db ldr r3, [r3, #12]
  35599. TIM_TI1_SetConfig(htim->Instance,
  35600. 800f54a: f000 fea1 bl 8010290 <TIM_TI1_SetConfig>
  35601. /* Reset the IC1PSC Bits */
  35602. htim->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC;
  35603. 800f54e: 68fb ldr r3, [r7, #12]
  35604. 800f550: 681b ldr r3, [r3, #0]
  35605. 800f552: 699a ldr r2, [r3, #24]
  35606. 800f554: 68fb ldr r3, [r7, #12]
  35607. 800f556: 681b ldr r3, [r3, #0]
  35608. 800f558: f022 020c bic.w r2, r2, #12
  35609. 800f55c: 619a str r2, [r3, #24]
  35610. /* Set the IC1PSC value */
  35611. htim->Instance->CCMR1 |= sConfig->ICPrescaler;
  35612. 800f55e: 68fb ldr r3, [r7, #12]
  35613. 800f560: 681b ldr r3, [r3, #0]
  35614. 800f562: 6999 ldr r1, [r3, #24]
  35615. 800f564: 68bb ldr r3, [r7, #8]
  35616. 800f566: 689a ldr r2, [r3, #8]
  35617. 800f568: 68fb ldr r3, [r7, #12]
  35618. 800f56a: 681b ldr r3, [r3, #0]
  35619. 800f56c: 430a orrs r2, r1
  35620. 800f56e: 619a str r2, [r3, #24]
  35621. 800f570: e060 b.n 800f634 <HAL_TIM_IC_ConfigChannel+0x126>
  35622. }
  35623. else if (Channel == TIM_CHANNEL_2)
  35624. 800f572: 687b ldr r3, [r7, #4]
  35625. 800f574: 2b04 cmp r3, #4
  35626. 800f576: d11c bne.n 800f5b2 <HAL_TIM_IC_ConfigChannel+0xa4>
  35627. {
  35628. /* TI2 Configuration */
  35629. assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
  35630. TIM_TI2_SetConfig(htim->Instance,
  35631. 800f578: 68fb ldr r3, [r7, #12]
  35632. 800f57a: 6818 ldr r0, [r3, #0]
  35633. sConfig->ICPolarity,
  35634. 800f57c: 68bb ldr r3, [r7, #8]
  35635. 800f57e: 6819 ldr r1, [r3, #0]
  35636. sConfig->ICSelection,
  35637. 800f580: 68bb ldr r3, [r7, #8]
  35638. 800f582: 685a ldr r2, [r3, #4]
  35639. sConfig->ICFilter);
  35640. 800f584: 68bb ldr r3, [r7, #8]
  35641. 800f586: 68db ldr r3, [r3, #12]
  35642. TIM_TI2_SetConfig(htim->Instance,
  35643. 800f588: f000 ff25 bl 80103d6 <TIM_TI2_SetConfig>
  35644. /* Reset the IC2PSC Bits */
  35645. htim->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC;
  35646. 800f58c: 68fb ldr r3, [r7, #12]
  35647. 800f58e: 681b ldr r3, [r3, #0]
  35648. 800f590: 699a ldr r2, [r3, #24]
  35649. 800f592: 68fb ldr r3, [r7, #12]
  35650. 800f594: 681b ldr r3, [r3, #0]
  35651. 800f596: f422 6240 bic.w r2, r2, #3072 @ 0xc00
  35652. 800f59a: 619a str r2, [r3, #24]
  35653. /* Set the IC2PSC value */
  35654. htim->Instance->CCMR1 |= (sConfig->ICPrescaler << 8U);
  35655. 800f59c: 68fb ldr r3, [r7, #12]
  35656. 800f59e: 681b ldr r3, [r3, #0]
  35657. 800f5a0: 6999 ldr r1, [r3, #24]
  35658. 800f5a2: 68bb ldr r3, [r7, #8]
  35659. 800f5a4: 689b ldr r3, [r3, #8]
  35660. 800f5a6: 021a lsls r2, r3, #8
  35661. 800f5a8: 68fb ldr r3, [r7, #12]
  35662. 800f5aa: 681b ldr r3, [r3, #0]
  35663. 800f5ac: 430a orrs r2, r1
  35664. 800f5ae: 619a str r2, [r3, #24]
  35665. 800f5b0: e040 b.n 800f634 <HAL_TIM_IC_ConfigChannel+0x126>
  35666. }
  35667. else if (Channel == TIM_CHANNEL_3)
  35668. 800f5b2: 687b ldr r3, [r7, #4]
  35669. 800f5b4: 2b08 cmp r3, #8
  35670. 800f5b6: d11b bne.n 800f5f0 <HAL_TIM_IC_ConfigChannel+0xe2>
  35671. {
  35672. /* TI3 Configuration */
  35673. assert_param(IS_TIM_CC3_INSTANCE(htim->Instance));
  35674. TIM_TI3_SetConfig(htim->Instance,
  35675. 800f5b8: 68fb ldr r3, [r7, #12]
  35676. 800f5ba: 6818 ldr r0, [r3, #0]
  35677. sConfig->ICPolarity,
  35678. 800f5bc: 68bb ldr r3, [r7, #8]
  35679. 800f5be: 6819 ldr r1, [r3, #0]
  35680. sConfig->ICSelection,
  35681. 800f5c0: 68bb ldr r3, [r7, #8]
  35682. 800f5c2: 685a ldr r2, [r3, #4]
  35683. sConfig->ICFilter);
  35684. 800f5c4: 68bb ldr r3, [r7, #8]
  35685. 800f5c6: 68db ldr r3, [r3, #12]
  35686. TIM_TI3_SetConfig(htim->Instance,
  35687. 800f5c8: f000 ff72 bl 80104b0 <TIM_TI3_SetConfig>
  35688. /* Reset the IC3PSC Bits */
  35689. htim->Instance->CCMR2 &= ~TIM_CCMR2_IC3PSC;
  35690. 800f5cc: 68fb ldr r3, [r7, #12]
  35691. 800f5ce: 681b ldr r3, [r3, #0]
  35692. 800f5d0: 69da ldr r2, [r3, #28]
  35693. 800f5d2: 68fb ldr r3, [r7, #12]
  35694. 800f5d4: 681b ldr r3, [r3, #0]
  35695. 800f5d6: f022 020c bic.w r2, r2, #12
  35696. 800f5da: 61da str r2, [r3, #28]
  35697. /* Set the IC3PSC value */
  35698. htim->Instance->CCMR2 |= sConfig->ICPrescaler;
  35699. 800f5dc: 68fb ldr r3, [r7, #12]
  35700. 800f5de: 681b ldr r3, [r3, #0]
  35701. 800f5e0: 69d9 ldr r1, [r3, #28]
  35702. 800f5e2: 68bb ldr r3, [r7, #8]
  35703. 800f5e4: 689a ldr r2, [r3, #8]
  35704. 800f5e6: 68fb ldr r3, [r7, #12]
  35705. 800f5e8: 681b ldr r3, [r3, #0]
  35706. 800f5ea: 430a orrs r2, r1
  35707. 800f5ec: 61da str r2, [r3, #28]
  35708. 800f5ee: e021 b.n 800f634 <HAL_TIM_IC_ConfigChannel+0x126>
  35709. }
  35710. else if (Channel == TIM_CHANNEL_4)
  35711. 800f5f0: 687b ldr r3, [r7, #4]
  35712. 800f5f2: 2b0c cmp r3, #12
  35713. 800f5f4: d11c bne.n 800f630 <HAL_TIM_IC_ConfigChannel+0x122>
  35714. {
  35715. /* TI4 Configuration */
  35716. assert_param(IS_TIM_CC4_INSTANCE(htim->Instance));
  35717. TIM_TI4_SetConfig(htim->Instance,
  35718. 800f5f6: 68fb ldr r3, [r7, #12]
  35719. 800f5f8: 6818 ldr r0, [r3, #0]
  35720. sConfig->ICPolarity,
  35721. 800f5fa: 68bb ldr r3, [r7, #8]
  35722. 800f5fc: 6819 ldr r1, [r3, #0]
  35723. sConfig->ICSelection,
  35724. 800f5fe: 68bb ldr r3, [r7, #8]
  35725. 800f600: 685a ldr r2, [r3, #4]
  35726. sConfig->ICFilter);
  35727. 800f602: 68bb ldr r3, [r7, #8]
  35728. 800f604: 68db ldr r3, [r3, #12]
  35729. TIM_TI4_SetConfig(htim->Instance,
  35730. 800f606: f000 ff8f bl 8010528 <TIM_TI4_SetConfig>
  35731. /* Reset the IC4PSC Bits */
  35732. htim->Instance->CCMR2 &= ~TIM_CCMR2_IC4PSC;
  35733. 800f60a: 68fb ldr r3, [r7, #12]
  35734. 800f60c: 681b ldr r3, [r3, #0]
  35735. 800f60e: 69da ldr r2, [r3, #28]
  35736. 800f610: 68fb ldr r3, [r7, #12]
  35737. 800f612: 681b ldr r3, [r3, #0]
  35738. 800f614: f422 6240 bic.w r2, r2, #3072 @ 0xc00
  35739. 800f618: 61da str r2, [r3, #28]
  35740. /* Set the IC4PSC value */
  35741. htim->Instance->CCMR2 |= (sConfig->ICPrescaler << 8U);
  35742. 800f61a: 68fb ldr r3, [r7, #12]
  35743. 800f61c: 681b ldr r3, [r3, #0]
  35744. 800f61e: 69d9 ldr r1, [r3, #28]
  35745. 800f620: 68bb ldr r3, [r7, #8]
  35746. 800f622: 689b ldr r3, [r3, #8]
  35747. 800f624: 021a lsls r2, r3, #8
  35748. 800f626: 68fb ldr r3, [r7, #12]
  35749. 800f628: 681b ldr r3, [r3, #0]
  35750. 800f62a: 430a orrs r2, r1
  35751. 800f62c: 61da str r2, [r3, #28]
  35752. 800f62e: e001 b.n 800f634 <HAL_TIM_IC_ConfigChannel+0x126>
  35753. }
  35754. else
  35755. {
  35756. status = HAL_ERROR;
  35757. 800f630: 2301 movs r3, #1
  35758. 800f632: 75fb strb r3, [r7, #23]
  35759. }
  35760. __HAL_UNLOCK(htim);
  35761. 800f634: 68fb ldr r3, [r7, #12]
  35762. 800f636: 2200 movs r2, #0
  35763. 800f638: f883 203c strb.w r2, [r3, #60] @ 0x3c
  35764. return status;
  35765. 800f63c: 7dfb ldrb r3, [r7, #23]
  35766. }
  35767. 800f63e: 4618 mov r0, r3
  35768. 800f640: 3718 adds r7, #24
  35769. 800f642: 46bd mov sp, r7
  35770. 800f644: bd80 pop {r7, pc}
  35771. ...
  35772. 0800f648 <HAL_TIM_PWM_ConfigChannel>:
  35773. * @retval HAL status
  35774. */
  35775. HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim,
  35776. const TIM_OC_InitTypeDef *sConfig,
  35777. uint32_t Channel)
  35778. {
  35779. 800f648: b580 push {r7, lr}
  35780. 800f64a: b086 sub sp, #24
  35781. 800f64c: af00 add r7, sp, #0
  35782. 800f64e: 60f8 str r0, [r7, #12]
  35783. 800f650: 60b9 str r1, [r7, #8]
  35784. 800f652: 607a str r2, [r7, #4]
  35785. HAL_StatusTypeDef status = HAL_OK;
  35786. 800f654: 2300 movs r3, #0
  35787. 800f656: 75fb strb r3, [r7, #23]
  35788. assert_param(IS_TIM_PWM_MODE(sConfig->OCMode));
  35789. assert_param(IS_TIM_OC_POLARITY(sConfig->OCPolarity));
  35790. assert_param(IS_TIM_FAST_STATE(sConfig->OCFastMode));
  35791. /* Process Locked */
  35792. __HAL_LOCK(htim);
  35793. 800f658: 68fb ldr r3, [r7, #12]
  35794. 800f65a: f893 303c ldrb.w r3, [r3, #60] @ 0x3c
  35795. 800f65e: 2b01 cmp r3, #1
  35796. 800f660: d101 bne.n 800f666 <HAL_TIM_PWM_ConfigChannel+0x1e>
  35797. 800f662: 2302 movs r3, #2
  35798. 800f664: e0ff b.n 800f866 <HAL_TIM_PWM_ConfigChannel+0x21e>
  35799. 800f666: 68fb ldr r3, [r7, #12]
  35800. 800f668: 2201 movs r2, #1
  35801. 800f66a: f883 203c strb.w r2, [r3, #60] @ 0x3c
  35802. switch (Channel)
  35803. 800f66e: 687b ldr r3, [r7, #4]
  35804. 800f670: 2b14 cmp r3, #20
  35805. 800f672: f200 80f0 bhi.w 800f856 <HAL_TIM_PWM_ConfigChannel+0x20e>
  35806. 800f676: a201 add r2, pc, #4 @ (adr r2, 800f67c <HAL_TIM_PWM_ConfigChannel+0x34>)
  35807. 800f678: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  35808. 800f67c: 0800f6d1 .word 0x0800f6d1
  35809. 800f680: 0800f857 .word 0x0800f857
  35810. 800f684: 0800f857 .word 0x0800f857
  35811. 800f688: 0800f857 .word 0x0800f857
  35812. 800f68c: 0800f711 .word 0x0800f711
  35813. 800f690: 0800f857 .word 0x0800f857
  35814. 800f694: 0800f857 .word 0x0800f857
  35815. 800f698: 0800f857 .word 0x0800f857
  35816. 800f69c: 0800f753 .word 0x0800f753
  35817. 800f6a0: 0800f857 .word 0x0800f857
  35818. 800f6a4: 0800f857 .word 0x0800f857
  35819. 800f6a8: 0800f857 .word 0x0800f857
  35820. 800f6ac: 0800f793 .word 0x0800f793
  35821. 800f6b0: 0800f857 .word 0x0800f857
  35822. 800f6b4: 0800f857 .word 0x0800f857
  35823. 800f6b8: 0800f857 .word 0x0800f857
  35824. 800f6bc: 0800f7d5 .word 0x0800f7d5
  35825. 800f6c0: 0800f857 .word 0x0800f857
  35826. 800f6c4: 0800f857 .word 0x0800f857
  35827. 800f6c8: 0800f857 .word 0x0800f857
  35828. 800f6cc: 0800f815 .word 0x0800f815
  35829. {
  35830. /* Check the parameters */
  35831. assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));
  35832. /* Configure the Channel 1 in PWM mode */
  35833. TIM_OC1_SetConfig(htim->Instance, sConfig);
  35834. 800f6d0: 68fb ldr r3, [r7, #12]
  35835. 800f6d2: 681b ldr r3, [r3, #0]
  35836. 800f6d4: 68b9 ldr r1, [r7, #8]
  35837. 800f6d6: 4618 mov r0, r3
  35838. 800f6d8: f000 fb04 bl 800fce4 <TIM_OC1_SetConfig>
  35839. /* Set the Preload enable bit for channel1 */
  35840. htim->Instance->CCMR1 |= TIM_CCMR1_OC1PE;
  35841. 800f6dc: 68fb ldr r3, [r7, #12]
  35842. 800f6de: 681b ldr r3, [r3, #0]
  35843. 800f6e0: 699a ldr r2, [r3, #24]
  35844. 800f6e2: 68fb ldr r3, [r7, #12]
  35845. 800f6e4: 681b ldr r3, [r3, #0]
  35846. 800f6e6: f042 0208 orr.w r2, r2, #8
  35847. 800f6ea: 619a str r2, [r3, #24]
  35848. /* Configure the Output Fast mode */
  35849. htim->Instance->CCMR1 &= ~TIM_CCMR1_OC1FE;
  35850. 800f6ec: 68fb ldr r3, [r7, #12]
  35851. 800f6ee: 681b ldr r3, [r3, #0]
  35852. 800f6f0: 699a ldr r2, [r3, #24]
  35853. 800f6f2: 68fb ldr r3, [r7, #12]
  35854. 800f6f4: 681b ldr r3, [r3, #0]
  35855. 800f6f6: f022 0204 bic.w r2, r2, #4
  35856. 800f6fa: 619a str r2, [r3, #24]
  35857. htim->Instance->CCMR1 |= sConfig->OCFastMode;
  35858. 800f6fc: 68fb ldr r3, [r7, #12]
  35859. 800f6fe: 681b ldr r3, [r3, #0]
  35860. 800f700: 6999 ldr r1, [r3, #24]
  35861. 800f702: 68bb ldr r3, [r7, #8]
  35862. 800f704: 691a ldr r2, [r3, #16]
  35863. 800f706: 68fb ldr r3, [r7, #12]
  35864. 800f708: 681b ldr r3, [r3, #0]
  35865. 800f70a: 430a orrs r2, r1
  35866. 800f70c: 619a str r2, [r3, #24]
  35867. break;
  35868. 800f70e: e0a5 b.n 800f85c <HAL_TIM_PWM_ConfigChannel+0x214>
  35869. {
  35870. /* Check the parameters */
  35871. assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
  35872. /* Configure the Channel 2 in PWM mode */
  35873. TIM_OC2_SetConfig(htim->Instance, sConfig);
  35874. 800f710: 68fb ldr r3, [r7, #12]
  35875. 800f712: 681b ldr r3, [r3, #0]
  35876. 800f714: 68b9 ldr r1, [r7, #8]
  35877. 800f716: 4618 mov r0, r3
  35878. 800f718: f000 fb74 bl 800fe04 <TIM_OC2_SetConfig>
  35879. /* Set the Preload enable bit for channel2 */
  35880. htim->Instance->CCMR1 |= TIM_CCMR1_OC2PE;
  35881. 800f71c: 68fb ldr r3, [r7, #12]
  35882. 800f71e: 681b ldr r3, [r3, #0]
  35883. 800f720: 699a ldr r2, [r3, #24]
  35884. 800f722: 68fb ldr r3, [r7, #12]
  35885. 800f724: 681b ldr r3, [r3, #0]
  35886. 800f726: f442 6200 orr.w r2, r2, #2048 @ 0x800
  35887. 800f72a: 619a str r2, [r3, #24]
  35888. /* Configure the Output Fast mode */
  35889. htim->Instance->CCMR1 &= ~TIM_CCMR1_OC2FE;
  35890. 800f72c: 68fb ldr r3, [r7, #12]
  35891. 800f72e: 681b ldr r3, [r3, #0]
  35892. 800f730: 699a ldr r2, [r3, #24]
  35893. 800f732: 68fb ldr r3, [r7, #12]
  35894. 800f734: 681b ldr r3, [r3, #0]
  35895. 800f736: f422 6280 bic.w r2, r2, #1024 @ 0x400
  35896. 800f73a: 619a str r2, [r3, #24]
  35897. htim->Instance->CCMR1 |= sConfig->OCFastMode << 8U;
  35898. 800f73c: 68fb ldr r3, [r7, #12]
  35899. 800f73e: 681b ldr r3, [r3, #0]
  35900. 800f740: 6999 ldr r1, [r3, #24]
  35901. 800f742: 68bb ldr r3, [r7, #8]
  35902. 800f744: 691b ldr r3, [r3, #16]
  35903. 800f746: 021a lsls r2, r3, #8
  35904. 800f748: 68fb ldr r3, [r7, #12]
  35905. 800f74a: 681b ldr r3, [r3, #0]
  35906. 800f74c: 430a orrs r2, r1
  35907. 800f74e: 619a str r2, [r3, #24]
  35908. break;
  35909. 800f750: e084 b.n 800f85c <HAL_TIM_PWM_ConfigChannel+0x214>
  35910. {
  35911. /* Check the parameters */
  35912. assert_param(IS_TIM_CC3_INSTANCE(htim->Instance));
  35913. /* Configure the Channel 3 in PWM mode */
  35914. TIM_OC3_SetConfig(htim->Instance, sConfig);
  35915. 800f752: 68fb ldr r3, [r7, #12]
  35916. 800f754: 681b ldr r3, [r3, #0]
  35917. 800f756: 68b9 ldr r1, [r7, #8]
  35918. 800f758: 4618 mov r0, r3
  35919. 800f75a: f000 fbdd bl 800ff18 <TIM_OC3_SetConfig>
  35920. /* Set the Preload enable bit for channel3 */
  35921. htim->Instance->CCMR2 |= TIM_CCMR2_OC3PE;
  35922. 800f75e: 68fb ldr r3, [r7, #12]
  35923. 800f760: 681b ldr r3, [r3, #0]
  35924. 800f762: 69da ldr r2, [r3, #28]
  35925. 800f764: 68fb ldr r3, [r7, #12]
  35926. 800f766: 681b ldr r3, [r3, #0]
  35927. 800f768: f042 0208 orr.w r2, r2, #8
  35928. 800f76c: 61da str r2, [r3, #28]
  35929. /* Configure the Output Fast mode */
  35930. htim->Instance->CCMR2 &= ~TIM_CCMR2_OC3FE;
  35931. 800f76e: 68fb ldr r3, [r7, #12]
  35932. 800f770: 681b ldr r3, [r3, #0]
  35933. 800f772: 69da ldr r2, [r3, #28]
  35934. 800f774: 68fb ldr r3, [r7, #12]
  35935. 800f776: 681b ldr r3, [r3, #0]
  35936. 800f778: f022 0204 bic.w r2, r2, #4
  35937. 800f77c: 61da str r2, [r3, #28]
  35938. htim->Instance->CCMR2 |= sConfig->OCFastMode;
  35939. 800f77e: 68fb ldr r3, [r7, #12]
  35940. 800f780: 681b ldr r3, [r3, #0]
  35941. 800f782: 69d9 ldr r1, [r3, #28]
  35942. 800f784: 68bb ldr r3, [r7, #8]
  35943. 800f786: 691a ldr r2, [r3, #16]
  35944. 800f788: 68fb ldr r3, [r7, #12]
  35945. 800f78a: 681b ldr r3, [r3, #0]
  35946. 800f78c: 430a orrs r2, r1
  35947. 800f78e: 61da str r2, [r3, #28]
  35948. break;
  35949. 800f790: e064 b.n 800f85c <HAL_TIM_PWM_ConfigChannel+0x214>
  35950. {
  35951. /* Check the parameters */
  35952. assert_param(IS_TIM_CC4_INSTANCE(htim->Instance));
  35953. /* Configure the Channel 4 in PWM mode */
  35954. TIM_OC4_SetConfig(htim->Instance, sConfig);
  35955. 800f792: 68fb ldr r3, [r7, #12]
  35956. 800f794: 681b ldr r3, [r3, #0]
  35957. 800f796: 68b9 ldr r1, [r7, #8]
  35958. 800f798: 4618 mov r0, r3
  35959. 800f79a: f000 fc45 bl 8010028 <TIM_OC4_SetConfig>
  35960. /* Set the Preload enable bit for channel4 */
  35961. htim->Instance->CCMR2 |= TIM_CCMR2_OC4PE;
  35962. 800f79e: 68fb ldr r3, [r7, #12]
  35963. 800f7a0: 681b ldr r3, [r3, #0]
  35964. 800f7a2: 69da ldr r2, [r3, #28]
  35965. 800f7a4: 68fb ldr r3, [r7, #12]
  35966. 800f7a6: 681b ldr r3, [r3, #0]
  35967. 800f7a8: f442 6200 orr.w r2, r2, #2048 @ 0x800
  35968. 800f7ac: 61da str r2, [r3, #28]
  35969. /* Configure the Output Fast mode */
  35970. htim->Instance->CCMR2 &= ~TIM_CCMR2_OC4FE;
  35971. 800f7ae: 68fb ldr r3, [r7, #12]
  35972. 800f7b0: 681b ldr r3, [r3, #0]
  35973. 800f7b2: 69da ldr r2, [r3, #28]
  35974. 800f7b4: 68fb ldr r3, [r7, #12]
  35975. 800f7b6: 681b ldr r3, [r3, #0]
  35976. 800f7b8: f422 6280 bic.w r2, r2, #1024 @ 0x400
  35977. 800f7bc: 61da str r2, [r3, #28]
  35978. htim->Instance->CCMR2 |= sConfig->OCFastMode << 8U;
  35979. 800f7be: 68fb ldr r3, [r7, #12]
  35980. 800f7c0: 681b ldr r3, [r3, #0]
  35981. 800f7c2: 69d9 ldr r1, [r3, #28]
  35982. 800f7c4: 68bb ldr r3, [r7, #8]
  35983. 800f7c6: 691b ldr r3, [r3, #16]
  35984. 800f7c8: 021a lsls r2, r3, #8
  35985. 800f7ca: 68fb ldr r3, [r7, #12]
  35986. 800f7cc: 681b ldr r3, [r3, #0]
  35987. 800f7ce: 430a orrs r2, r1
  35988. 800f7d0: 61da str r2, [r3, #28]
  35989. break;
  35990. 800f7d2: e043 b.n 800f85c <HAL_TIM_PWM_ConfigChannel+0x214>
  35991. {
  35992. /* Check the parameters */
  35993. assert_param(IS_TIM_CC5_INSTANCE(htim->Instance));
  35994. /* Configure the Channel 5 in PWM mode */
  35995. TIM_OC5_SetConfig(htim->Instance, sConfig);
  35996. 800f7d4: 68fb ldr r3, [r7, #12]
  35997. 800f7d6: 681b ldr r3, [r3, #0]
  35998. 800f7d8: 68b9 ldr r1, [r7, #8]
  35999. 800f7da: 4618 mov r0, r3
  36000. 800f7dc: f000 fc8e bl 80100fc <TIM_OC5_SetConfig>
  36001. /* Set the Preload enable bit for channel5*/
  36002. htim->Instance->CCMR3 |= TIM_CCMR3_OC5PE;
  36003. 800f7e0: 68fb ldr r3, [r7, #12]
  36004. 800f7e2: 681b ldr r3, [r3, #0]
  36005. 800f7e4: 6d5a ldr r2, [r3, #84] @ 0x54
  36006. 800f7e6: 68fb ldr r3, [r7, #12]
  36007. 800f7e8: 681b ldr r3, [r3, #0]
  36008. 800f7ea: f042 0208 orr.w r2, r2, #8
  36009. 800f7ee: 655a str r2, [r3, #84] @ 0x54
  36010. /* Configure the Output Fast mode */
  36011. htim->Instance->CCMR3 &= ~TIM_CCMR3_OC5FE;
  36012. 800f7f0: 68fb ldr r3, [r7, #12]
  36013. 800f7f2: 681b ldr r3, [r3, #0]
  36014. 800f7f4: 6d5a ldr r2, [r3, #84] @ 0x54
  36015. 800f7f6: 68fb ldr r3, [r7, #12]
  36016. 800f7f8: 681b ldr r3, [r3, #0]
  36017. 800f7fa: f022 0204 bic.w r2, r2, #4
  36018. 800f7fe: 655a str r2, [r3, #84] @ 0x54
  36019. htim->Instance->CCMR3 |= sConfig->OCFastMode;
  36020. 800f800: 68fb ldr r3, [r7, #12]
  36021. 800f802: 681b ldr r3, [r3, #0]
  36022. 800f804: 6d59 ldr r1, [r3, #84] @ 0x54
  36023. 800f806: 68bb ldr r3, [r7, #8]
  36024. 800f808: 691a ldr r2, [r3, #16]
  36025. 800f80a: 68fb ldr r3, [r7, #12]
  36026. 800f80c: 681b ldr r3, [r3, #0]
  36027. 800f80e: 430a orrs r2, r1
  36028. 800f810: 655a str r2, [r3, #84] @ 0x54
  36029. break;
  36030. 800f812: e023 b.n 800f85c <HAL_TIM_PWM_ConfigChannel+0x214>
  36031. {
  36032. /* Check the parameters */
  36033. assert_param(IS_TIM_CC6_INSTANCE(htim->Instance));
  36034. /* Configure the Channel 6 in PWM mode */
  36035. TIM_OC6_SetConfig(htim->Instance, sConfig);
  36036. 800f814: 68fb ldr r3, [r7, #12]
  36037. 800f816: 681b ldr r3, [r3, #0]
  36038. 800f818: 68b9 ldr r1, [r7, #8]
  36039. 800f81a: 4618 mov r0, r3
  36040. 800f81c: f000 fcd2 bl 80101c4 <TIM_OC6_SetConfig>
  36041. /* Set the Preload enable bit for channel6 */
  36042. htim->Instance->CCMR3 |= TIM_CCMR3_OC6PE;
  36043. 800f820: 68fb ldr r3, [r7, #12]
  36044. 800f822: 681b ldr r3, [r3, #0]
  36045. 800f824: 6d5a ldr r2, [r3, #84] @ 0x54
  36046. 800f826: 68fb ldr r3, [r7, #12]
  36047. 800f828: 681b ldr r3, [r3, #0]
  36048. 800f82a: f442 6200 orr.w r2, r2, #2048 @ 0x800
  36049. 800f82e: 655a str r2, [r3, #84] @ 0x54
  36050. /* Configure the Output Fast mode */
  36051. htim->Instance->CCMR3 &= ~TIM_CCMR3_OC6FE;
  36052. 800f830: 68fb ldr r3, [r7, #12]
  36053. 800f832: 681b ldr r3, [r3, #0]
  36054. 800f834: 6d5a ldr r2, [r3, #84] @ 0x54
  36055. 800f836: 68fb ldr r3, [r7, #12]
  36056. 800f838: 681b ldr r3, [r3, #0]
  36057. 800f83a: f422 6280 bic.w r2, r2, #1024 @ 0x400
  36058. 800f83e: 655a str r2, [r3, #84] @ 0x54
  36059. htim->Instance->CCMR3 |= sConfig->OCFastMode << 8U;
  36060. 800f840: 68fb ldr r3, [r7, #12]
  36061. 800f842: 681b ldr r3, [r3, #0]
  36062. 800f844: 6d59 ldr r1, [r3, #84] @ 0x54
  36063. 800f846: 68bb ldr r3, [r7, #8]
  36064. 800f848: 691b ldr r3, [r3, #16]
  36065. 800f84a: 021a lsls r2, r3, #8
  36066. 800f84c: 68fb ldr r3, [r7, #12]
  36067. 800f84e: 681b ldr r3, [r3, #0]
  36068. 800f850: 430a orrs r2, r1
  36069. 800f852: 655a str r2, [r3, #84] @ 0x54
  36070. break;
  36071. 800f854: e002 b.n 800f85c <HAL_TIM_PWM_ConfigChannel+0x214>
  36072. }
  36073. default:
  36074. status = HAL_ERROR;
  36075. 800f856: 2301 movs r3, #1
  36076. 800f858: 75fb strb r3, [r7, #23]
  36077. break;
  36078. 800f85a: bf00 nop
  36079. }
  36080. __HAL_UNLOCK(htim);
  36081. 800f85c: 68fb ldr r3, [r7, #12]
  36082. 800f85e: 2200 movs r2, #0
  36083. 800f860: f883 203c strb.w r2, [r3, #60] @ 0x3c
  36084. return status;
  36085. 800f864: 7dfb ldrb r3, [r7, #23]
  36086. }
  36087. 800f866: 4618 mov r0, r3
  36088. 800f868: 3718 adds r7, #24
  36089. 800f86a: 46bd mov sp, r7
  36090. 800f86c: bd80 pop {r7, pc}
  36091. 800f86e: bf00 nop
  36092. 0800f870 <HAL_TIM_ConfigClockSource>:
  36093. * @param sClockSourceConfig pointer to a TIM_ClockConfigTypeDef structure that
  36094. * contains the clock source information for the TIM peripheral.
  36095. * @retval HAL status
  36096. */
  36097. HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, const TIM_ClockConfigTypeDef *sClockSourceConfig)
  36098. {
  36099. 800f870: b580 push {r7, lr}
  36100. 800f872: b084 sub sp, #16
  36101. 800f874: af00 add r7, sp, #0
  36102. 800f876: 6078 str r0, [r7, #4]
  36103. 800f878: 6039 str r1, [r7, #0]
  36104. HAL_StatusTypeDef status = HAL_OK;
  36105. 800f87a: 2300 movs r3, #0
  36106. 800f87c: 73fb strb r3, [r7, #15]
  36107. uint32_t tmpsmcr;
  36108. /* Process Locked */
  36109. __HAL_LOCK(htim);
  36110. 800f87e: 687b ldr r3, [r7, #4]
  36111. 800f880: f893 303c ldrb.w r3, [r3, #60] @ 0x3c
  36112. 800f884: 2b01 cmp r3, #1
  36113. 800f886: d101 bne.n 800f88c <HAL_TIM_ConfigClockSource+0x1c>
  36114. 800f888: 2302 movs r3, #2
  36115. 800f88a: e0dc b.n 800fa46 <HAL_TIM_ConfigClockSource+0x1d6>
  36116. 800f88c: 687b ldr r3, [r7, #4]
  36117. 800f88e: 2201 movs r2, #1
  36118. 800f890: f883 203c strb.w r2, [r3, #60] @ 0x3c
  36119. htim->State = HAL_TIM_STATE_BUSY;
  36120. 800f894: 687b ldr r3, [r7, #4]
  36121. 800f896: 2202 movs r2, #2
  36122. 800f898: f883 203d strb.w r2, [r3, #61] @ 0x3d
  36123. /* Check the parameters */
  36124. assert_param(IS_TIM_CLOCKSOURCE(sClockSourceConfig->ClockSource));
  36125. /* Reset the SMS, TS, ECE, ETPS and ETRF bits */
  36126. tmpsmcr = htim->Instance->SMCR;
  36127. 800f89c: 687b ldr r3, [r7, #4]
  36128. 800f89e: 681b ldr r3, [r3, #0]
  36129. 800f8a0: 689b ldr r3, [r3, #8]
  36130. 800f8a2: 60bb str r3, [r7, #8]
  36131. tmpsmcr &= ~(TIM_SMCR_SMS | TIM_SMCR_TS);
  36132. 800f8a4: 68ba ldr r2, [r7, #8]
  36133. 800f8a6: 4b6a ldr r3, [pc, #424] @ (800fa50 <HAL_TIM_ConfigClockSource+0x1e0>)
  36134. 800f8a8: 4013 ands r3, r2
  36135. 800f8aa: 60bb str r3, [r7, #8]
  36136. tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP);
  36137. 800f8ac: 68bb ldr r3, [r7, #8]
  36138. 800f8ae: f423 437f bic.w r3, r3, #65280 @ 0xff00
  36139. 800f8b2: 60bb str r3, [r7, #8]
  36140. htim->Instance->SMCR = tmpsmcr;
  36141. 800f8b4: 687b ldr r3, [r7, #4]
  36142. 800f8b6: 681b ldr r3, [r3, #0]
  36143. 800f8b8: 68ba ldr r2, [r7, #8]
  36144. 800f8ba: 609a str r2, [r3, #8]
  36145. switch (sClockSourceConfig->ClockSource)
  36146. 800f8bc: 683b ldr r3, [r7, #0]
  36147. 800f8be: 681b ldr r3, [r3, #0]
  36148. 800f8c0: 4a64 ldr r2, [pc, #400] @ (800fa54 <HAL_TIM_ConfigClockSource+0x1e4>)
  36149. 800f8c2: 4293 cmp r3, r2
  36150. 800f8c4: f000 80a9 beq.w 800fa1a <HAL_TIM_ConfigClockSource+0x1aa>
  36151. 800f8c8: 4a62 ldr r2, [pc, #392] @ (800fa54 <HAL_TIM_ConfigClockSource+0x1e4>)
  36152. 800f8ca: 4293 cmp r3, r2
  36153. 800f8cc: f200 80ae bhi.w 800fa2c <HAL_TIM_ConfigClockSource+0x1bc>
  36154. 800f8d0: 4a61 ldr r2, [pc, #388] @ (800fa58 <HAL_TIM_ConfigClockSource+0x1e8>)
  36155. 800f8d2: 4293 cmp r3, r2
  36156. 800f8d4: f000 80a1 beq.w 800fa1a <HAL_TIM_ConfigClockSource+0x1aa>
  36157. 800f8d8: 4a5f ldr r2, [pc, #380] @ (800fa58 <HAL_TIM_ConfigClockSource+0x1e8>)
  36158. 800f8da: 4293 cmp r3, r2
  36159. 800f8dc: f200 80a6 bhi.w 800fa2c <HAL_TIM_ConfigClockSource+0x1bc>
  36160. 800f8e0: 4a5e ldr r2, [pc, #376] @ (800fa5c <HAL_TIM_ConfigClockSource+0x1ec>)
  36161. 800f8e2: 4293 cmp r3, r2
  36162. 800f8e4: f000 8099 beq.w 800fa1a <HAL_TIM_ConfigClockSource+0x1aa>
  36163. 800f8e8: 4a5c ldr r2, [pc, #368] @ (800fa5c <HAL_TIM_ConfigClockSource+0x1ec>)
  36164. 800f8ea: 4293 cmp r3, r2
  36165. 800f8ec: f200 809e bhi.w 800fa2c <HAL_TIM_ConfigClockSource+0x1bc>
  36166. 800f8f0: f1b3 1f10 cmp.w r3, #1048592 @ 0x100010
  36167. 800f8f4: f000 8091 beq.w 800fa1a <HAL_TIM_ConfigClockSource+0x1aa>
  36168. 800f8f8: f1b3 1f10 cmp.w r3, #1048592 @ 0x100010
  36169. 800f8fc: f200 8096 bhi.w 800fa2c <HAL_TIM_ConfigClockSource+0x1bc>
  36170. 800f900: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
  36171. 800f904: f000 8089 beq.w 800fa1a <HAL_TIM_ConfigClockSource+0x1aa>
  36172. 800f908: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
  36173. 800f90c: f200 808e bhi.w 800fa2c <HAL_TIM_ConfigClockSource+0x1bc>
  36174. 800f910: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  36175. 800f914: d03e beq.n 800f994 <HAL_TIM_ConfigClockSource+0x124>
  36176. 800f916: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  36177. 800f91a: f200 8087 bhi.w 800fa2c <HAL_TIM_ConfigClockSource+0x1bc>
  36178. 800f91e: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  36179. 800f922: f000 8086 beq.w 800fa32 <HAL_TIM_ConfigClockSource+0x1c2>
  36180. 800f926: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  36181. 800f92a: d87f bhi.n 800fa2c <HAL_TIM_ConfigClockSource+0x1bc>
  36182. 800f92c: 2b70 cmp r3, #112 @ 0x70
  36183. 800f92e: d01a beq.n 800f966 <HAL_TIM_ConfigClockSource+0xf6>
  36184. 800f930: 2b70 cmp r3, #112 @ 0x70
  36185. 800f932: d87b bhi.n 800fa2c <HAL_TIM_ConfigClockSource+0x1bc>
  36186. 800f934: 2b60 cmp r3, #96 @ 0x60
  36187. 800f936: d050 beq.n 800f9da <HAL_TIM_ConfigClockSource+0x16a>
  36188. 800f938: 2b60 cmp r3, #96 @ 0x60
  36189. 800f93a: d877 bhi.n 800fa2c <HAL_TIM_ConfigClockSource+0x1bc>
  36190. 800f93c: 2b50 cmp r3, #80 @ 0x50
  36191. 800f93e: d03c beq.n 800f9ba <HAL_TIM_ConfigClockSource+0x14a>
  36192. 800f940: 2b50 cmp r3, #80 @ 0x50
  36193. 800f942: d873 bhi.n 800fa2c <HAL_TIM_ConfigClockSource+0x1bc>
  36194. 800f944: 2b40 cmp r3, #64 @ 0x40
  36195. 800f946: d058 beq.n 800f9fa <HAL_TIM_ConfigClockSource+0x18a>
  36196. 800f948: 2b40 cmp r3, #64 @ 0x40
  36197. 800f94a: d86f bhi.n 800fa2c <HAL_TIM_ConfigClockSource+0x1bc>
  36198. 800f94c: 2b30 cmp r3, #48 @ 0x30
  36199. 800f94e: d064 beq.n 800fa1a <HAL_TIM_ConfigClockSource+0x1aa>
  36200. 800f950: 2b30 cmp r3, #48 @ 0x30
  36201. 800f952: d86b bhi.n 800fa2c <HAL_TIM_ConfigClockSource+0x1bc>
  36202. 800f954: 2b20 cmp r3, #32
  36203. 800f956: d060 beq.n 800fa1a <HAL_TIM_ConfigClockSource+0x1aa>
  36204. 800f958: 2b20 cmp r3, #32
  36205. 800f95a: d867 bhi.n 800fa2c <HAL_TIM_ConfigClockSource+0x1bc>
  36206. 800f95c: 2b00 cmp r3, #0
  36207. 800f95e: d05c beq.n 800fa1a <HAL_TIM_ConfigClockSource+0x1aa>
  36208. 800f960: 2b10 cmp r3, #16
  36209. 800f962: d05a beq.n 800fa1a <HAL_TIM_ConfigClockSource+0x1aa>
  36210. 800f964: e062 b.n 800fa2c <HAL_TIM_ConfigClockSource+0x1bc>
  36211. assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler));
  36212. assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));
  36213. assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));
  36214. /* Configure the ETR Clock source */
  36215. TIM_ETR_SetConfig(htim->Instance,
  36216. 800f966: 687b ldr r3, [r7, #4]
  36217. 800f968: 6818 ldr r0, [r3, #0]
  36218. sClockSourceConfig->ClockPrescaler,
  36219. 800f96a: 683b ldr r3, [r7, #0]
  36220. 800f96c: 6899 ldr r1, [r3, #8]
  36221. sClockSourceConfig->ClockPolarity,
  36222. 800f96e: 683b ldr r3, [r7, #0]
  36223. 800f970: 685a ldr r2, [r3, #4]
  36224. sClockSourceConfig->ClockFilter);
  36225. 800f972: 683b ldr r3, [r7, #0]
  36226. 800f974: 68db ldr r3, [r3, #12]
  36227. TIM_ETR_SetConfig(htim->Instance,
  36228. 800f976: f000 fe33 bl 80105e0 <TIM_ETR_SetConfig>
  36229. /* Select the External clock mode1 and the ETRF trigger */
  36230. tmpsmcr = htim->Instance->SMCR;
  36231. 800f97a: 687b ldr r3, [r7, #4]
  36232. 800f97c: 681b ldr r3, [r3, #0]
  36233. 800f97e: 689b ldr r3, [r3, #8]
  36234. 800f980: 60bb str r3, [r7, #8]
  36235. tmpsmcr |= (TIM_SLAVEMODE_EXTERNAL1 | TIM_CLOCKSOURCE_ETRMODE1);
  36236. 800f982: 68bb ldr r3, [r7, #8]
  36237. 800f984: f043 0377 orr.w r3, r3, #119 @ 0x77
  36238. 800f988: 60bb str r3, [r7, #8]
  36239. /* Write to TIMx SMCR */
  36240. htim->Instance->SMCR = tmpsmcr;
  36241. 800f98a: 687b ldr r3, [r7, #4]
  36242. 800f98c: 681b ldr r3, [r3, #0]
  36243. 800f98e: 68ba ldr r2, [r7, #8]
  36244. 800f990: 609a str r2, [r3, #8]
  36245. break;
  36246. 800f992: e04f b.n 800fa34 <HAL_TIM_ConfigClockSource+0x1c4>
  36247. assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler));
  36248. assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));
  36249. assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));
  36250. /* Configure the ETR Clock source */
  36251. TIM_ETR_SetConfig(htim->Instance,
  36252. 800f994: 687b ldr r3, [r7, #4]
  36253. 800f996: 6818 ldr r0, [r3, #0]
  36254. sClockSourceConfig->ClockPrescaler,
  36255. 800f998: 683b ldr r3, [r7, #0]
  36256. 800f99a: 6899 ldr r1, [r3, #8]
  36257. sClockSourceConfig->ClockPolarity,
  36258. 800f99c: 683b ldr r3, [r7, #0]
  36259. 800f99e: 685a ldr r2, [r3, #4]
  36260. sClockSourceConfig->ClockFilter);
  36261. 800f9a0: 683b ldr r3, [r7, #0]
  36262. 800f9a2: 68db ldr r3, [r3, #12]
  36263. TIM_ETR_SetConfig(htim->Instance,
  36264. 800f9a4: f000 fe1c bl 80105e0 <TIM_ETR_SetConfig>
  36265. /* Enable the External clock mode2 */
  36266. htim->Instance->SMCR |= TIM_SMCR_ECE;
  36267. 800f9a8: 687b ldr r3, [r7, #4]
  36268. 800f9aa: 681b ldr r3, [r3, #0]
  36269. 800f9ac: 689a ldr r2, [r3, #8]
  36270. 800f9ae: 687b ldr r3, [r7, #4]
  36271. 800f9b0: 681b ldr r3, [r3, #0]
  36272. 800f9b2: f442 4280 orr.w r2, r2, #16384 @ 0x4000
  36273. 800f9b6: 609a str r2, [r3, #8]
  36274. break;
  36275. 800f9b8: e03c b.n 800fa34 <HAL_TIM_ConfigClockSource+0x1c4>
  36276. /* Check TI1 input conditioning related parameters */
  36277. assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));
  36278. assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));
  36279. TIM_TI1_ConfigInputStage(htim->Instance,
  36280. 800f9ba: 687b ldr r3, [r7, #4]
  36281. 800f9bc: 6818 ldr r0, [r3, #0]
  36282. sClockSourceConfig->ClockPolarity,
  36283. 800f9be: 683b ldr r3, [r7, #0]
  36284. 800f9c0: 6859 ldr r1, [r3, #4]
  36285. sClockSourceConfig->ClockFilter);
  36286. 800f9c2: 683b ldr r3, [r7, #0]
  36287. 800f9c4: 68db ldr r3, [r3, #12]
  36288. TIM_TI1_ConfigInputStage(htim->Instance,
  36289. 800f9c6: 461a mov r2, r3
  36290. 800f9c8: f000 fcd6 bl 8010378 <TIM_TI1_ConfigInputStage>
  36291. TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI1);
  36292. 800f9cc: 687b ldr r3, [r7, #4]
  36293. 800f9ce: 681b ldr r3, [r3, #0]
  36294. 800f9d0: 2150 movs r1, #80 @ 0x50
  36295. 800f9d2: 4618 mov r0, r3
  36296. 800f9d4: f000 fde6 bl 80105a4 <TIM_ITRx_SetConfig>
  36297. break;
  36298. 800f9d8: e02c b.n 800fa34 <HAL_TIM_ConfigClockSource+0x1c4>
  36299. /* Check TI2 input conditioning related parameters */
  36300. assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));
  36301. assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));
  36302. TIM_TI2_ConfigInputStage(htim->Instance,
  36303. 800f9da: 687b ldr r3, [r7, #4]
  36304. 800f9dc: 6818 ldr r0, [r3, #0]
  36305. sClockSourceConfig->ClockPolarity,
  36306. 800f9de: 683b ldr r3, [r7, #0]
  36307. 800f9e0: 6859 ldr r1, [r3, #4]
  36308. sClockSourceConfig->ClockFilter);
  36309. 800f9e2: 683b ldr r3, [r7, #0]
  36310. 800f9e4: 68db ldr r3, [r3, #12]
  36311. TIM_TI2_ConfigInputStage(htim->Instance,
  36312. 800f9e6: 461a mov r2, r3
  36313. 800f9e8: f000 fd32 bl 8010450 <TIM_TI2_ConfigInputStage>
  36314. TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI2);
  36315. 800f9ec: 687b ldr r3, [r7, #4]
  36316. 800f9ee: 681b ldr r3, [r3, #0]
  36317. 800f9f0: 2160 movs r1, #96 @ 0x60
  36318. 800f9f2: 4618 mov r0, r3
  36319. 800f9f4: f000 fdd6 bl 80105a4 <TIM_ITRx_SetConfig>
  36320. break;
  36321. 800f9f8: e01c b.n 800fa34 <HAL_TIM_ConfigClockSource+0x1c4>
  36322. /* Check TI1 input conditioning related parameters */
  36323. assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));
  36324. assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));
  36325. TIM_TI1_ConfigInputStage(htim->Instance,
  36326. 800f9fa: 687b ldr r3, [r7, #4]
  36327. 800f9fc: 6818 ldr r0, [r3, #0]
  36328. sClockSourceConfig->ClockPolarity,
  36329. 800f9fe: 683b ldr r3, [r7, #0]
  36330. 800fa00: 6859 ldr r1, [r3, #4]
  36331. sClockSourceConfig->ClockFilter);
  36332. 800fa02: 683b ldr r3, [r7, #0]
  36333. 800fa04: 68db ldr r3, [r3, #12]
  36334. TIM_TI1_ConfigInputStage(htim->Instance,
  36335. 800fa06: 461a mov r2, r3
  36336. 800fa08: f000 fcb6 bl 8010378 <TIM_TI1_ConfigInputStage>
  36337. TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI1ED);
  36338. 800fa0c: 687b ldr r3, [r7, #4]
  36339. 800fa0e: 681b ldr r3, [r3, #0]
  36340. 800fa10: 2140 movs r1, #64 @ 0x40
  36341. 800fa12: 4618 mov r0, r3
  36342. 800fa14: f000 fdc6 bl 80105a4 <TIM_ITRx_SetConfig>
  36343. break;
  36344. 800fa18: e00c b.n 800fa34 <HAL_TIM_ConfigClockSource+0x1c4>
  36345. case TIM_CLOCKSOURCE_ITR8:
  36346. {
  36347. /* Check whether or not the timer instance supports internal trigger input */
  36348. assert_param(IS_TIM_CLOCKSOURCE_ITRX_INSTANCE(htim->Instance));
  36349. TIM_ITRx_SetConfig(htim->Instance, sClockSourceConfig->ClockSource);
  36350. 800fa1a: 687b ldr r3, [r7, #4]
  36351. 800fa1c: 681a ldr r2, [r3, #0]
  36352. 800fa1e: 683b ldr r3, [r7, #0]
  36353. 800fa20: 681b ldr r3, [r3, #0]
  36354. 800fa22: 4619 mov r1, r3
  36355. 800fa24: 4610 mov r0, r2
  36356. 800fa26: f000 fdbd bl 80105a4 <TIM_ITRx_SetConfig>
  36357. break;
  36358. 800fa2a: e003 b.n 800fa34 <HAL_TIM_ConfigClockSource+0x1c4>
  36359. }
  36360. default:
  36361. status = HAL_ERROR;
  36362. 800fa2c: 2301 movs r3, #1
  36363. 800fa2e: 73fb strb r3, [r7, #15]
  36364. break;
  36365. 800fa30: e000 b.n 800fa34 <HAL_TIM_ConfigClockSource+0x1c4>
  36366. break;
  36367. 800fa32: bf00 nop
  36368. }
  36369. htim->State = HAL_TIM_STATE_READY;
  36370. 800fa34: 687b ldr r3, [r7, #4]
  36371. 800fa36: 2201 movs r2, #1
  36372. 800fa38: f883 203d strb.w r2, [r3, #61] @ 0x3d
  36373. __HAL_UNLOCK(htim);
  36374. 800fa3c: 687b ldr r3, [r7, #4]
  36375. 800fa3e: 2200 movs r2, #0
  36376. 800fa40: f883 203c strb.w r2, [r3, #60] @ 0x3c
  36377. return status;
  36378. 800fa44: 7bfb ldrb r3, [r7, #15]
  36379. }
  36380. 800fa46: 4618 mov r0, r3
  36381. 800fa48: 3710 adds r7, #16
  36382. 800fa4a: 46bd mov sp, r7
  36383. 800fa4c: bd80 pop {r7, pc}
  36384. 800fa4e: bf00 nop
  36385. 800fa50: ffceff88 .word 0xffceff88
  36386. 800fa54: 00100040 .word 0x00100040
  36387. 800fa58: 00100030 .word 0x00100030
  36388. 800fa5c: 00100020 .word 0x00100020
  36389. 0800fa60 <HAL_TIM_ReadCapturedValue>:
  36390. * @arg TIM_CHANNEL_3: TIM Channel 3 selected
  36391. * @arg TIM_CHANNEL_4: TIM Channel 4 selected
  36392. * @retval Captured value
  36393. */
  36394. uint32_t HAL_TIM_ReadCapturedValue(const TIM_HandleTypeDef *htim, uint32_t Channel)
  36395. {
  36396. 800fa60: b480 push {r7}
  36397. 800fa62: b085 sub sp, #20
  36398. 800fa64: af00 add r7, sp, #0
  36399. 800fa66: 6078 str r0, [r7, #4]
  36400. 800fa68: 6039 str r1, [r7, #0]
  36401. uint32_t tmpreg = 0U;
  36402. 800fa6a: 2300 movs r3, #0
  36403. 800fa6c: 60fb str r3, [r7, #12]
  36404. switch (Channel)
  36405. 800fa6e: 683b ldr r3, [r7, #0]
  36406. 800fa70: 2b0c cmp r3, #12
  36407. 800fa72: d831 bhi.n 800fad8 <HAL_TIM_ReadCapturedValue+0x78>
  36408. 800fa74: a201 add r2, pc, #4 @ (adr r2, 800fa7c <HAL_TIM_ReadCapturedValue+0x1c>)
  36409. 800fa76: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  36410. 800fa7a: bf00 nop
  36411. 800fa7c: 0800fab1 .word 0x0800fab1
  36412. 800fa80: 0800fad9 .word 0x0800fad9
  36413. 800fa84: 0800fad9 .word 0x0800fad9
  36414. 800fa88: 0800fad9 .word 0x0800fad9
  36415. 800fa8c: 0800fabb .word 0x0800fabb
  36416. 800fa90: 0800fad9 .word 0x0800fad9
  36417. 800fa94: 0800fad9 .word 0x0800fad9
  36418. 800fa98: 0800fad9 .word 0x0800fad9
  36419. 800fa9c: 0800fac5 .word 0x0800fac5
  36420. 800faa0: 0800fad9 .word 0x0800fad9
  36421. 800faa4: 0800fad9 .word 0x0800fad9
  36422. 800faa8: 0800fad9 .word 0x0800fad9
  36423. 800faac: 0800facf .word 0x0800facf
  36424. {
  36425. /* Check the parameters */
  36426. assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));
  36427. /* Return the capture 1 value */
  36428. tmpreg = htim->Instance->CCR1;
  36429. 800fab0: 687b ldr r3, [r7, #4]
  36430. 800fab2: 681b ldr r3, [r3, #0]
  36431. 800fab4: 6b5b ldr r3, [r3, #52] @ 0x34
  36432. 800fab6: 60fb str r3, [r7, #12]
  36433. break;
  36434. 800fab8: e00f b.n 800fada <HAL_TIM_ReadCapturedValue+0x7a>
  36435. {
  36436. /* Check the parameters */
  36437. assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
  36438. /* Return the capture 2 value */
  36439. tmpreg = htim->Instance->CCR2;
  36440. 800faba: 687b ldr r3, [r7, #4]
  36441. 800fabc: 681b ldr r3, [r3, #0]
  36442. 800fabe: 6b9b ldr r3, [r3, #56] @ 0x38
  36443. 800fac0: 60fb str r3, [r7, #12]
  36444. break;
  36445. 800fac2: e00a b.n 800fada <HAL_TIM_ReadCapturedValue+0x7a>
  36446. {
  36447. /* Check the parameters */
  36448. assert_param(IS_TIM_CC3_INSTANCE(htim->Instance));
  36449. /* Return the capture 3 value */
  36450. tmpreg = htim->Instance->CCR3;
  36451. 800fac4: 687b ldr r3, [r7, #4]
  36452. 800fac6: 681b ldr r3, [r3, #0]
  36453. 800fac8: 6bdb ldr r3, [r3, #60] @ 0x3c
  36454. 800faca: 60fb str r3, [r7, #12]
  36455. break;
  36456. 800facc: e005 b.n 800fada <HAL_TIM_ReadCapturedValue+0x7a>
  36457. {
  36458. /* Check the parameters */
  36459. assert_param(IS_TIM_CC4_INSTANCE(htim->Instance));
  36460. /* Return the capture 4 value */
  36461. tmpreg = htim->Instance->CCR4;
  36462. 800face: 687b ldr r3, [r7, #4]
  36463. 800fad0: 681b ldr r3, [r3, #0]
  36464. 800fad2: 6c1b ldr r3, [r3, #64] @ 0x40
  36465. 800fad4: 60fb str r3, [r7, #12]
  36466. break;
  36467. 800fad6: e000 b.n 800fada <HAL_TIM_ReadCapturedValue+0x7a>
  36468. }
  36469. default:
  36470. break;
  36471. 800fad8: bf00 nop
  36472. }
  36473. return tmpreg;
  36474. 800fada: 68fb ldr r3, [r7, #12]
  36475. }
  36476. 800fadc: 4618 mov r0, r3
  36477. 800fade: 3714 adds r7, #20
  36478. 800fae0: 46bd mov sp, r7
  36479. 800fae2: f85d 7b04 ldr.w r7, [sp], #4
  36480. 800fae6: 4770 bx lr
  36481. 0800fae8 <HAL_TIM_OC_DelayElapsedCallback>:
  36482. * @brief Output Compare callback in non-blocking mode
  36483. * @param htim TIM OC handle
  36484. * @retval None
  36485. */
  36486. __weak void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)
  36487. {
  36488. 800fae8: b480 push {r7}
  36489. 800faea: b083 sub sp, #12
  36490. 800faec: af00 add r7, sp, #0
  36491. 800faee: 6078 str r0, [r7, #4]
  36492. UNUSED(htim);
  36493. /* NOTE : This function should not be modified, when the callback is needed,
  36494. the HAL_TIM_OC_DelayElapsedCallback could be implemented in the user file
  36495. */
  36496. }
  36497. 800faf0: bf00 nop
  36498. 800faf2: 370c adds r7, #12
  36499. 800faf4: 46bd mov sp, r7
  36500. 800faf6: f85d 7b04 ldr.w r7, [sp], #4
  36501. 800fafa: 4770 bx lr
  36502. 0800fafc <HAL_TIM_PWM_PulseFinishedCallback>:
  36503. * @brief PWM Pulse finished callback in non-blocking mode
  36504. * @param htim TIM handle
  36505. * @retval None
  36506. */
  36507. __weak void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
  36508. {
  36509. 800fafc: b480 push {r7}
  36510. 800fafe: b083 sub sp, #12
  36511. 800fb00: af00 add r7, sp, #0
  36512. 800fb02: 6078 str r0, [r7, #4]
  36513. UNUSED(htim);
  36514. /* NOTE : This function should not be modified, when the callback is needed,
  36515. the HAL_TIM_PWM_PulseFinishedCallback could be implemented in the user file
  36516. */
  36517. }
  36518. 800fb04: bf00 nop
  36519. 800fb06: 370c adds r7, #12
  36520. 800fb08: 46bd mov sp, r7
  36521. 800fb0a: f85d 7b04 ldr.w r7, [sp], #4
  36522. 800fb0e: 4770 bx lr
  36523. 0800fb10 <HAL_TIM_TriggerCallback>:
  36524. * @brief Hall Trigger detection callback in non-blocking mode
  36525. * @param htim TIM handle
  36526. * @retval None
  36527. */
  36528. __weak void HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim)
  36529. {
  36530. 800fb10: b480 push {r7}
  36531. 800fb12: b083 sub sp, #12
  36532. 800fb14: af00 add r7, sp, #0
  36533. 800fb16: 6078 str r0, [r7, #4]
  36534. UNUSED(htim);
  36535. /* NOTE : This function should not be modified, when the callback is needed,
  36536. the HAL_TIM_TriggerCallback could be implemented in the user file
  36537. */
  36538. }
  36539. 800fb18: bf00 nop
  36540. 800fb1a: 370c adds r7, #12
  36541. 800fb1c: 46bd mov sp, r7
  36542. 800fb1e: f85d 7b04 ldr.w r7, [sp], #4
  36543. 800fb22: 4770 bx lr
  36544. 0800fb24 <HAL_TIM_GetChannelState>:
  36545. * @arg TIM_CHANNEL_5: TIM Channel 5
  36546. * @arg TIM_CHANNEL_6: TIM Channel 6
  36547. * @retval TIM Channel state
  36548. */
  36549. HAL_TIM_ChannelStateTypeDef HAL_TIM_GetChannelState(const TIM_HandleTypeDef *htim, uint32_t Channel)
  36550. {
  36551. 800fb24: b480 push {r7}
  36552. 800fb26: b085 sub sp, #20
  36553. 800fb28: af00 add r7, sp, #0
  36554. 800fb2a: 6078 str r0, [r7, #4]
  36555. 800fb2c: 6039 str r1, [r7, #0]
  36556. HAL_TIM_ChannelStateTypeDef channel_state;
  36557. /* Check the parameters */
  36558. assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
  36559. channel_state = TIM_CHANNEL_STATE_GET(htim, Channel);
  36560. 800fb2e: 683b ldr r3, [r7, #0]
  36561. 800fb30: 2b00 cmp r3, #0
  36562. 800fb32: d104 bne.n 800fb3e <HAL_TIM_GetChannelState+0x1a>
  36563. 800fb34: 687b ldr r3, [r7, #4]
  36564. 800fb36: f893 303e ldrb.w r3, [r3, #62] @ 0x3e
  36565. 800fb3a: b2db uxtb r3, r3
  36566. 800fb3c: e023 b.n 800fb86 <HAL_TIM_GetChannelState+0x62>
  36567. 800fb3e: 683b ldr r3, [r7, #0]
  36568. 800fb40: 2b04 cmp r3, #4
  36569. 800fb42: d104 bne.n 800fb4e <HAL_TIM_GetChannelState+0x2a>
  36570. 800fb44: 687b ldr r3, [r7, #4]
  36571. 800fb46: f893 303f ldrb.w r3, [r3, #63] @ 0x3f
  36572. 800fb4a: b2db uxtb r3, r3
  36573. 800fb4c: e01b b.n 800fb86 <HAL_TIM_GetChannelState+0x62>
  36574. 800fb4e: 683b ldr r3, [r7, #0]
  36575. 800fb50: 2b08 cmp r3, #8
  36576. 800fb52: d104 bne.n 800fb5e <HAL_TIM_GetChannelState+0x3a>
  36577. 800fb54: 687b ldr r3, [r7, #4]
  36578. 800fb56: f893 3040 ldrb.w r3, [r3, #64] @ 0x40
  36579. 800fb5a: b2db uxtb r3, r3
  36580. 800fb5c: e013 b.n 800fb86 <HAL_TIM_GetChannelState+0x62>
  36581. 800fb5e: 683b ldr r3, [r7, #0]
  36582. 800fb60: 2b0c cmp r3, #12
  36583. 800fb62: d104 bne.n 800fb6e <HAL_TIM_GetChannelState+0x4a>
  36584. 800fb64: 687b ldr r3, [r7, #4]
  36585. 800fb66: f893 3041 ldrb.w r3, [r3, #65] @ 0x41
  36586. 800fb6a: b2db uxtb r3, r3
  36587. 800fb6c: e00b b.n 800fb86 <HAL_TIM_GetChannelState+0x62>
  36588. 800fb6e: 683b ldr r3, [r7, #0]
  36589. 800fb70: 2b10 cmp r3, #16
  36590. 800fb72: d104 bne.n 800fb7e <HAL_TIM_GetChannelState+0x5a>
  36591. 800fb74: 687b ldr r3, [r7, #4]
  36592. 800fb76: f893 3042 ldrb.w r3, [r3, #66] @ 0x42
  36593. 800fb7a: b2db uxtb r3, r3
  36594. 800fb7c: e003 b.n 800fb86 <HAL_TIM_GetChannelState+0x62>
  36595. 800fb7e: 687b ldr r3, [r7, #4]
  36596. 800fb80: f893 3043 ldrb.w r3, [r3, #67] @ 0x43
  36597. 800fb84: b2db uxtb r3, r3
  36598. 800fb86: 73fb strb r3, [r7, #15]
  36599. return channel_state;
  36600. 800fb88: 7bfb ldrb r3, [r7, #15]
  36601. }
  36602. 800fb8a: 4618 mov r0, r3
  36603. 800fb8c: 3714 adds r7, #20
  36604. 800fb8e: 46bd mov sp, r7
  36605. 800fb90: f85d 7b04 ldr.w r7, [sp], #4
  36606. 800fb94: 4770 bx lr
  36607. ...
  36608. 0800fb98 <TIM_Base_SetConfig>:
  36609. * @param TIMx TIM peripheral
  36610. * @param Structure TIM Base configuration structure
  36611. * @retval None
  36612. */
  36613. void TIM_Base_SetConfig(TIM_TypeDef *TIMx, const TIM_Base_InitTypeDef *Structure)
  36614. {
  36615. 800fb98: b480 push {r7}
  36616. 800fb9a: b085 sub sp, #20
  36617. 800fb9c: af00 add r7, sp, #0
  36618. 800fb9e: 6078 str r0, [r7, #4]
  36619. 800fba0: 6039 str r1, [r7, #0]
  36620. uint32_t tmpcr1;
  36621. tmpcr1 = TIMx->CR1;
  36622. 800fba2: 687b ldr r3, [r7, #4]
  36623. 800fba4: 681b ldr r3, [r3, #0]
  36624. 800fba6: 60fb str r3, [r7, #12]
  36625. /* Set TIM Time Base Unit parameters ---------------------------------------*/
  36626. if (IS_TIM_COUNTER_MODE_SELECT_INSTANCE(TIMx))
  36627. 800fba8: 687b ldr r3, [r7, #4]
  36628. 800fbaa: 4a46 ldr r2, [pc, #280] @ (800fcc4 <TIM_Base_SetConfig+0x12c>)
  36629. 800fbac: 4293 cmp r3, r2
  36630. 800fbae: d013 beq.n 800fbd8 <TIM_Base_SetConfig+0x40>
  36631. 800fbb0: 687b ldr r3, [r7, #4]
  36632. 800fbb2: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  36633. 800fbb6: d00f beq.n 800fbd8 <TIM_Base_SetConfig+0x40>
  36634. 800fbb8: 687b ldr r3, [r7, #4]
  36635. 800fbba: 4a43 ldr r2, [pc, #268] @ (800fcc8 <TIM_Base_SetConfig+0x130>)
  36636. 800fbbc: 4293 cmp r3, r2
  36637. 800fbbe: d00b beq.n 800fbd8 <TIM_Base_SetConfig+0x40>
  36638. 800fbc0: 687b ldr r3, [r7, #4]
  36639. 800fbc2: 4a42 ldr r2, [pc, #264] @ (800fccc <TIM_Base_SetConfig+0x134>)
  36640. 800fbc4: 4293 cmp r3, r2
  36641. 800fbc6: d007 beq.n 800fbd8 <TIM_Base_SetConfig+0x40>
  36642. 800fbc8: 687b ldr r3, [r7, #4]
  36643. 800fbca: 4a41 ldr r2, [pc, #260] @ (800fcd0 <TIM_Base_SetConfig+0x138>)
  36644. 800fbcc: 4293 cmp r3, r2
  36645. 800fbce: d003 beq.n 800fbd8 <TIM_Base_SetConfig+0x40>
  36646. 800fbd0: 687b ldr r3, [r7, #4]
  36647. 800fbd2: 4a40 ldr r2, [pc, #256] @ (800fcd4 <TIM_Base_SetConfig+0x13c>)
  36648. 800fbd4: 4293 cmp r3, r2
  36649. 800fbd6: d108 bne.n 800fbea <TIM_Base_SetConfig+0x52>
  36650. {
  36651. /* Select the Counter Mode */
  36652. tmpcr1 &= ~(TIM_CR1_DIR | TIM_CR1_CMS);
  36653. 800fbd8: 68fb ldr r3, [r7, #12]
  36654. 800fbda: f023 0370 bic.w r3, r3, #112 @ 0x70
  36655. 800fbde: 60fb str r3, [r7, #12]
  36656. tmpcr1 |= Structure->CounterMode;
  36657. 800fbe0: 683b ldr r3, [r7, #0]
  36658. 800fbe2: 685b ldr r3, [r3, #4]
  36659. 800fbe4: 68fa ldr r2, [r7, #12]
  36660. 800fbe6: 4313 orrs r3, r2
  36661. 800fbe8: 60fb str r3, [r7, #12]
  36662. }
  36663. if (IS_TIM_CLOCK_DIVISION_INSTANCE(TIMx))
  36664. 800fbea: 687b ldr r3, [r7, #4]
  36665. 800fbec: 4a35 ldr r2, [pc, #212] @ (800fcc4 <TIM_Base_SetConfig+0x12c>)
  36666. 800fbee: 4293 cmp r3, r2
  36667. 800fbf0: d01f beq.n 800fc32 <TIM_Base_SetConfig+0x9a>
  36668. 800fbf2: 687b ldr r3, [r7, #4]
  36669. 800fbf4: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  36670. 800fbf8: d01b beq.n 800fc32 <TIM_Base_SetConfig+0x9a>
  36671. 800fbfa: 687b ldr r3, [r7, #4]
  36672. 800fbfc: 4a32 ldr r2, [pc, #200] @ (800fcc8 <TIM_Base_SetConfig+0x130>)
  36673. 800fbfe: 4293 cmp r3, r2
  36674. 800fc00: d017 beq.n 800fc32 <TIM_Base_SetConfig+0x9a>
  36675. 800fc02: 687b ldr r3, [r7, #4]
  36676. 800fc04: 4a31 ldr r2, [pc, #196] @ (800fccc <TIM_Base_SetConfig+0x134>)
  36677. 800fc06: 4293 cmp r3, r2
  36678. 800fc08: d013 beq.n 800fc32 <TIM_Base_SetConfig+0x9a>
  36679. 800fc0a: 687b ldr r3, [r7, #4]
  36680. 800fc0c: 4a30 ldr r2, [pc, #192] @ (800fcd0 <TIM_Base_SetConfig+0x138>)
  36681. 800fc0e: 4293 cmp r3, r2
  36682. 800fc10: d00f beq.n 800fc32 <TIM_Base_SetConfig+0x9a>
  36683. 800fc12: 687b ldr r3, [r7, #4]
  36684. 800fc14: 4a2f ldr r2, [pc, #188] @ (800fcd4 <TIM_Base_SetConfig+0x13c>)
  36685. 800fc16: 4293 cmp r3, r2
  36686. 800fc18: d00b beq.n 800fc32 <TIM_Base_SetConfig+0x9a>
  36687. 800fc1a: 687b ldr r3, [r7, #4]
  36688. 800fc1c: 4a2e ldr r2, [pc, #184] @ (800fcd8 <TIM_Base_SetConfig+0x140>)
  36689. 800fc1e: 4293 cmp r3, r2
  36690. 800fc20: d007 beq.n 800fc32 <TIM_Base_SetConfig+0x9a>
  36691. 800fc22: 687b ldr r3, [r7, #4]
  36692. 800fc24: 4a2d ldr r2, [pc, #180] @ (800fcdc <TIM_Base_SetConfig+0x144>)
  36693. 800fc26: 4293 cmp r3, r2
  36694. 800fc28: d003 beq.n 800fc32 <TIM_Base_SetConfig+0x9a>
  36695. 800fc2a: 687b ldr r3, [r7, #4]
  36696. 800fc2c: 4a2c ldr r2, [pc, #176] @ (800fce0 <TIM_Base_SetConfig+0x148>)
  36697. 800fc2e: 4293 cmp r3, r2
  36698. 800fc30: d108 bne.n 800fc44 <TIM_Base_SetConfig+0xac>
  36699. {
  36700. /* Set the clock division */
  36701. tmpcr1 &= ~TIM_CR1_CKD;
  36702. 800fc32: 68fb ldr r3, [r7, #12]
  36703. 800fc34: f423 7340 bic.w r3, r3, #768 @ 0x300
  36704. 800fc38: 60fb str r3, [r7, #12]
  36705. tmpcr1 |= (uint32_t)Structure->ClockDivision;
  36706. 800fc3a: 683b ldr r3, [r7, #0]
  36707. 800fc3c: 68db ldr r3, [r3, #12]
  36708. 800fc3e: 68fa ldr r2, [r7, #12]
  36709. 800fc40: 4313 orrs r3, r2
  36710. 800fc42: 60fb str r3, [r7, #12]
  36711. }
  36712. /* Set the auto-reload preload */
  36713. MODIFY_REG(tmpcr1, TIM_CR1_ARPE, Structure->AutoReloadPreload);
  36714. 800fc44: 68fb ldr r3, [r7, #12]
  36715. 800fc46: f023 0280 bic.w r2, r3, #128 @ 0x80
  36716. 800fc4a: 683b ldr r3, [r7, #0]
  36717. 800fc4c: 695b ldr r3, [r3, #20]
  36718. 800fc4e: 4313 orrs r3, r2
  36719. 800fc50: 60fb str r3, [r7, #12]
  36720. TIMx->CR1 = tmpcr1;
  36721. 800fc52: 687b ldr r3, [r7, #4]
  36722. 800fc54: 68fa ldr r2, [r7, #12]
  36723. 800fc56: 601a str r2, [r3, #0]
  36724. /* Set the Autoreload value */
  36725. TIMx->ARR = (uint32_t)Structure->Period ;
  36726. 800fc58: 683b ldr r3, [r7, #0]
  36727. 800fc5a: 689a ldr r2, [r3, #8]
  36728. 800fc5c: 687b ldr r3, [r7, #4]
  36729. 800fc5e: 62da str r2, [r3, #44] @ 0x2c
  36730. /* Set the Prescaler value */
  36731. TIMx->PSC = Structure->Prescaler;
  36732. 800fc60: 683b ldr r3, [r7, #0]
  36733. 800fc62: 681a ldr r2, [r3, #0]
  36734. 800fc64: 687b ldr r3, [r7, #4]
  36735. 800fc66: 629a str r2, [r3, #40] @ 0x28
  36736. if (IS_TIM_REPETITION_COUNTER_INSTANCE(TIMx))
  36737. 800fc68: 687b ldr r3, [r7, #4]
  36738. 800fc6a: 4a16 ldr r2, [pc, #88] @ (800fcc4 <TIM_Base_SetConfig+0x12c>)
  36739. 800fc6c: 4293 cmp r3, r2
  36740. 800fc6e: d00f beq.n 800fc90 <TIM_Base_SetConfig+0xf8>
  36741. 800fc70: 687b ldr r3, [r7, #4]
  36742. 800fc72: 4a18 ldr r2, [pc, #96] @ (800fcd4 <TIM_Base_SetConfig+0x13c>)
  36743. 800fc74: 4293 cmp r3, r2
  36744. 800fc76: d00b beq.n 800fc90 <TIM_Base_SetConfig+0xf8>
  36745. 800fc78: 687b ldr r3, [r7, #4]
  36746. 800fc7a: 4a17 ldr r2, [pc, #92] @ (800fcd8 <TIM_Base_SetConfig+0x140>)
  36747. 800fc7c: 4293 cmp r3, r2
  36748. 800fc7e: d007 beq.n 800fc90 <TIM_Base_SetConfig+0xf8>
  36749. 800fc80: 687b ldr r3, [r7, #4]
  36750. 800fc82: 4a16 ldr r2, [pc, #88] @ (800fcdc <TIM_Base_SetConfig+0x144>)
  36751. 800fc84: 4293 cmp r3, r2
  36752. 800fc86: d003 beq.n 800fc90 <TIM_Base_SetConfig+0xf8>
  36753. 800fc88: 687b ldr r3, [r7, #4]
  36754. 800fc8a: 4a15 ldr r2, [pc, #84] @ (800fce0 <TIM_Base_SetConfig+0x148>)
  36755. 800fc8c: 4293 cmp r3, r2
  36756. 800fc8e: d103 bne.n 800fc98 <TIM_Base_SetConfig+0x100>
  36757. {
  36758. /* Set the Repetition Counter value */
  36759. TIMx->RCR = Structure->RepetitionCounter;
  36760. 800fc90: 683b ldr r3, [r7, #0]
  36761. 800fc92: 691a ldr r2, [r3, #16]
  36762. 800fc94: 687b ldr r3, [r7, #4]
  36763. 800fc96: 631a str r2, [r3, #48] @ 0x30
  36764. }
  36765. /* Generate an update event to reload the Prescaler
  36766. and the repetition counter (only for advanced timer) value immediately */
  36767. TIMx->EGR = TIM_EGR_UG;
  36768. 800fc98: 687b ldr r3, [r7, #4]
  36769. 800fc9a: 2201 movs r2, #1
  36770. 800fc9c: 615a str r2, [r3, #20]
  36771. /* Check if the update flag is set after the Update Generation, if so clear the UIF flag */
  36772. if (HAL_IS_BIT_SET(TIMx->SR, TIM_FLAG_UPDATE))
  36773. 800fc9e: 687b ldr r3, [r7, #4]
  36774. 800fca0: 691b ldr r3, [r3, #16]
  36775. 800fca2: f003 0301 and.w r3, r3, #1
  36776. 800fca6: 2b01 cmp r3, #1
  36777. 800fca8: d105 bne.n 800fcb6 <TIM_Base_SetConfig+0x11e>
  36778. {
  36779. /* Clear the update flag */
  36780. CLEAR_BIT(TIMx->SR, TIM_FLAG_UPDATE);
  36781. 800fcaa: 687b ldr r3, [r7, #4]
  36782. 800fcac: 691b ldr r3, [r3, #16]
  36783. 800fcae: f023 0201 bic.w r2, r3, #1
  36784. 800fcb2: 687b ldr r3, [r7, #4]
  36785. 800fcb4: 611a str r2, [r3, #16]
  36786. }
  36787. }
  36788. 800fcb6: bf00 nop
  36789. 800fcb8: 3714 adds r7, #20
  36790. 800fcba: 46bd mov sp, r7
  36791. 800fcbc: f85d 7b04 ldr.w r7, [sp], #4
  36792. 800fcc0: 4770 bx lr
  36793. 800fcc2: bf00 nop
  36794. 800fcc4: 40010000 .word 0x40010000
  36795. 800fcc8: 40000400 .word 0x40000400
  36796. 800fccc: 40000800 .word 0x40000800
  36797. 800fcd0: 40000c00 .word 0x40000c00
  36798. 800fcd4: 40010400 .word 0x40010400
  36799. 800fcd8: 40014000 .word 0x40014000
  36800. 800fcdc: 40014400 .word 0x40014400
  36801. 800fce0: 40014800 .word 0x40014800
  36802. 0800fce4 <TIM_OC1_SetConfig>:
  36803. * @param TIMx to select the TIM peripheral
  36804. * @param OC_Config The output configuration structure
  36805. * @retval None
  36806. */
  36807. static void TIM_OC1_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config)
  36808. {
  36809. 800fce4: b480 push {r7}
  36810. 800fce6: b087 sub sp, #28
  36811. 800fce8: af00 add r7, sp, #0
  36812. 800fcea: 6078 str r0, [r7, #4]
  36813. 800fcec: 6039 str r1, [r7, #0]
  36814. uint32_t tmpccmrx;
  36815. uint32_t tmpccer;
  36816. uint32_t tmpcr2;
  36817. /* Get the TIMx CCER register value */
  36818. tmpccer = TIMx->CCER;
  36819. 800fcee: 687b ldr r3, [r7, #4]
  36820. 800fcf0: 6a1b ldr r3, [r3, #32]
  36821. 800fcf2: 617b str r3, [r7, #20]
  36822. /* Disable the Channel 1: Reset the CC1E Bit */
  36823. TIMx->CCER &= ~TIM_CCER_CC1E;
  36824. 800fcf4: 687b ldr r3, [r7, #4]
  36825. 800fcf6: 6a1b ldr r3, [r3, #32]
  36826. 800fcf8: f023 0201 bic.w r2, r3, #1
  36827. 800fcfc: 687b ldr r3, [r7, #4]
  36828. 800fcfe: 621a str r2, [r3, #32]
  36829. /* Get the TIMx CR2 register value */
  36830. tmpcr2 = TIMx->CR2;
  36831. 800fd00: 687b ldr r3, [r7, #4]
  36832. 800fd02: 685b ldr r3, [r3, #4]
  36833. 800fd04: 613b str r3, [r7, #16]
  36834. /* Get the TIMx CCMR1 register value */
  36835. tmpccmrx = TIMx->CCMR1;
  36836. 800fd06: 687b ldr r3, [r7, #4]
  36837. 800fd08: 699b ldr r3, [r3, #24]
  36838. 800fd0a: 60fb str r3, [r7, #12]
  36839. /* Reset the Output Compare Mode Bits */
  36840. tmpccmrx &= ~TIM_CCMR1_OC1M;
  36841. 800fd0c: 68fa ldr r2, [r7, #12]
  36842. 800fd0e: 4b37 ldr r3, [pc, #220] @ (800fdec <TIM_OC1_SetConfig+0x108>)
  36843. 800fd10: 4013 ands r3, r2
  36844. 800fd12: 60fb str r3, [r7, #12]
  36845. tmpccmrx &= ~TIM_CCMR1_CC1S;
  36846. 800fd14: 68fb ldr r3, [r7, #12]
  36847. 800fd16: f023 0303 bic.w r3, r3, #3
  36848. 800fd1a: 60fb str r3, [r7, #12]
  36849. /* Select the Output Compare Mode */
  36850. tmpccmrx |= OC_Config->OCMode;
  36851. 800fd1c: 683b ldr r3, [r7, #0]
  36852. 800fd1e: 681b ldr r3, [r3, #0]
  36853. 800fd20: 68fa ldr r2, [r7, #12]
  36854. 800fd22: 4313 orrs r3, r2
  36855. 800fd24: 60fb str r3, [r7, #12]
  36856. /* Reset the Output Polarity level */
  36857. tmpccer &= ~TIM_CCER_CC1P;
  36858. 800fd26: 697b ldr r3, [r7, #20]
  36859. 800fd28: f023 0302 bic.w r3, r3, #2
  36860. 800fd2c: 617b str r3, [r7, #20]
  36861. /* Set the Output Compare Polarity */
  36862. tmpccer |= OC_Config->OCPolarity;
  36863. 800fd2e: 683b ldr r3, [r7, #0]
  36864. 800fd30: 689b ldr r3, [r3, #8]
  36865. 800fd32: 697a ldr r2, [r7, #20]
  36866. 800fd34: 4313 orrs r3, r2
  36867. 800fd36: 617b str r3, [r7, #20]
  36868. if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_1))
  36869. 800fd38: 687b ldr r3, [r7, #4]
  36870. 800fd3a: 4a2d ldr r2, [pc, #180] @ (800fdf0 <TIM_OC1_SetConfig+0x10c>)
  36871. 800fd3c: 4293 cmp r3, r2
  36872. 800fd3e: d00f beq.n 800fd60 <TIM_OC1_SetConfig+0x7c>
  36873. 800fd40: 687b ldr r3, [r7, #4]
  36874. 800fd42: 4a2c ldr r2, [pc, #176] @ (800fdf4 <TIM_OC1_SetConfig+0x110>)
  36875. 800fd44: 4293 cmp r3, r2
  36876. 800fd46: d00b beq.n 800fd60 <TIM_OC1_SetConfig+0x7c>
  36877. 800fd48: 687b ldr r3, [r7, #4]
  36878. 800fd4a: 4a2b ldr r2, [pc, #172] @ (800fdf8 <TIM_OC1_SetConfig+0x114>)
  36879. 800fd4c: 4293 cmp r3, r2
  36880. 800fd4e: d007 beq.n 800fd60 <TIM_OC1_SetConfig+0x7c>
  36881. 800fd50: 687b ldr r3, [r7, #4]
  36882. 800fd52: 4a2a ldr r2, [pc, #168] @ (800fdfc <TIM_OC1_SetConfig+0x118>)
  36883. 800fd54: 4293 cmp r3, r2
  36884. 800fd56: d003 beq.n 800fd60 <TIM_OC1_SetConfig+0x7c>
  36885. 800fd58: 687b ldr r3, [r7, #4]
  36886. 800fd5a: 4a29 ldr r2, [pc, #164] @ (800fe00 <TIM_OC1_SetConfig+0x11c>)
  36887. 800fd5c: 4293 cmp r3, r2
  36888. 800fd5e: d10c bne.n 800fd7a <TIM_OC1_SetConfig+0x96>
  36889. {
  36890. /* Check parameters */
  36891. assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity));
  36892. /* Reset the Output N Polarity level */
  36893. tmpccer &= ~TIM_CCER_CC1NP;
  36894. 800fd60: 697b ldr r3, [r7, #20]
  36895. 800fd62: f023 0308 bic.w r3, r3, #8
  36896. 800fd66: 617b str r3, [r7, #20]
  36897. /* Set the Output N Polarity */
  36898. tmpccer |= OC_Config->OCNPolarity;
  36899. 800fd68: 683b ldr r3, [r7, #0]
  36900. 800fd6a: 68db ldr r3, [r3, #12]
  36901. 800fd6c: 697a ldr r2, [r7, #20]
  36902. 800fd6e: 4313 orrs r3, r2
  36903. 800fd70: 617b str r3, [r7, #20]
  36904. /* Reset the Output N State */
  36905. tmpccer &= ~TIM_CCER_CC1NE;
  36906. 800fd72: 697b ldr r3, [r7, #20]
  36907. 800fd74: f023 0304 bic.w r3, r3, #4
  36908. 800fd78: 617b str r3, [r7, #20]
  36909. }
  36910. if (IS_TIM_BREAK_INSTANCE(TIMx))
  36911. 800fd7a: 687b ldr r3, [r7, #4]
  36912. 800fd7c: 4a1c ldr r2, [pc, #112] @ (800fdf0 <TIM_OC1_SetConfig+0x10c>)
  36913. 800fd7e: 4293 cmp r3, r2
  36914. 800fd80: d00f beq.n 800fda2 <TIM_OC1_SetConfig+0xbe>
  36915. 800fd82: 687b ldr r3, [r7, #4]
  36916. 800fd84: 4a1b ldr r2, [pc, #108] @ (800fdf4 <TIM_OC1_SetConfig+0x110>)
  36917. 800fd86: 4293 cmp r3, r2
  36918. 800fd88: d00b beq.n 800fda2 <TIM_OC1_SetConfig+0xbe>
  36919. 800fd8a: 687b ldr r3, [r7, #4]
  36920. 800fd8c: 4a1a ldr r2, [pc, #104] @ (800fdf8 <TIM_OC1_SetConfig+0x114>)
  36921. 800fd8e: 4293 cmp r3, r2
  36922. 800fd90: d007 beq.n 800fda2 <TIM_OC1_SetConfig+0xbe>
  36923. 800fd92: 687b ldr r3, [r7, #4]
  36924. 800fd94: 4a19 ldr r2, [pc, #100] @ (800fdfc <TIM_OC1_SetConfig+0x118>)
  36925. 800fd96: 4293 cmp r3, r2
  36926. 800fd98: d003 beq.n 800fda2 <TIM_OC1_SetConfig+0xbe>
  36927. 800fd9a: 687b ldr r3, [r7, #4]
  36928. 800fd9c: 4a18 ldr r2, [pc, #96] @ (800fe00 <TIM_OC1_SetConfig+0x11c>)
  36929. 800fd9e: 4293 cmp r3, r2
  36930. 800fda0: d111 bne.n 800fdc6 <TIM_OC1_SetConfig+0xe2>
  36931. /* Check parameters */
  36932. assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState));
  36933. assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState));
  36934. /* Reset the Output Compare and Output Compare N IDLE State */
  36935. tmpcr2 &= ~TIM_CR2_OIS1;
  36936. 800fda2: 693b ldr r3, [r7, #16]
  36937. 800fda4: f423 7380 bic.w r3, r3, #256 @ 0x100
  36938. 800fda8: 613b str r3, [r7, #16]
  36939. tmpcr2 &= ~TIM_CR2_OIS1N;
  36940. 800fdaa: 693b ldr r3, [r7, #16]
  36941. 800fdac: f423 7300 bic.w r3, r3, #512 @ 0x200
  36942. 800fdb0: 613b str r3, [r7, #16]
  36943. /* Set the Output Idle state */
  36944. tmpcr2 |= OC_Config->OCIdleState;
  36945. 800fdb2: 683b ldr r3, [r7, #0]
  36946. 800fdb4: 695b ldr r3, [r3, #20]
  36947. 800fdb6: 693a ldr r2, [r7, #16]
  36948. 800fdb8: 4313 orrs r3, r2
  36949. 800fdba: 613b str r3, [r7, #16]
  36950. /* Set the Output N Idle state */
  36951. tmpcr2 |= OC_Config->OCNIdleState;
  36952. 800fdbc: 683b ldr r3, [r7, #0]
  36953. 800fdbe: 699b ldr r3, [r3, #24]
  36954. 800fdc0: 693a ldr r2, [r7, #16]
  36955. 800fdc2: 4313 orrs r3, r2
  36956. 800fdc4: 613b str r3, [r7, #16]
  36957. }
  36958. /* Write to TIMx CR2 */
  36959. TIMx->CR2 = tmpcr2;
  36960. 800fdc6: 687b ldr r3, [r7, #4]
  36961. 800fdc8: 693a ldr r2, [r7, #16]
  36962. 800fdca: 605a str r2, [r3, #4]
  36963. /* Write to TIMx CCMR1 */
  36964. TIMx->CCMR1 = tmpccmrx;
  36965. 800fdcc: 687b ldr r3, [r7, #4]
  36966. 800fdce: 68fa ldr r2, [r7, #12]
  36967. 800fdd0: 619a str r2, [r3, #24]
  36968. /* Set the Capture Compare Register value */
  36969. TIMx->CCR1 = OC_Config->Pulse;
  36970. 800fdd2: 683b ldr r3, [r7, #0]
  36971. 800fdd4: 685a ldr r2, [r3, #4]
  36972. 800fdd6: 687b ldr r3, [r7, #4]
  36973. 800fdd8: 635a str r2, [r3, #52] @ 0x34
  36974. /* Write to TIMx CCER */
  36975. TIMx->CCER = tmpccer;
  36976. 800fdda: 687b ldr r3, [r7, #4]
  36977. 800fddc: 697a ldr r2, [r7, #20]
  36978. 800fdde: 621a str r2, [r3, #32]
  36979. }
  36980. 800fde0: bf00 nop
  36981. 800fde2: 371c adds r7, #28
  36982. 800fde4: 46bd mov sp, r7
  36983. 800fde6: f85d 7b04 ldr.w r7, [sp], #4
  36984. 800fdea: 4770 bx lr
  36985. 800fdec: fffeff8f .word 0xfffeff8f
  36986. 800fdf0: 40010000 .word 0x40010000
  36987. 800fdf4: 40010400 .word 0x40010400
  36988. 800fdf8: 40014000 .word 0x40014000
  36989. 800fdfc: 40014400 .word 0x40014400
  36990. 800fe00: 40014800 .word 0x40014800
  36991. 0800fe04 <TIM_OC2_SetConfig>:
  36992. * @param TIMx to select the TIM peripheral
  36993. * @param OC_Config The output configuration structure
  36994. * @retval None
  36995. */
  36996. void TIM_OC2_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config)
  36997. {
  36998. 800fe04: b480 push {r7}
  36999. 800fe06: b087 sub sp, #28
  37000. 800fe08: af00 add r7, sp, #0
  37001. 800fe0a: 6078 str r0, [r7, #4]
  37002. 800fe0c: 6039 str r1, [r7, #0]
  37003. uint32_t tmpccmrx;
  37004. uint32_t tmpccer;
  37005. uint32_t tmpcr2;
  37006. /* Get the TIMx CCER register value */
  37007. tmpccer = TIMx->CCER;
  37008. 800fe0e: 687b ldr r3, [r7, #4]
  37009. 800fe10: 6a1b ldr r3, [r3, #32]
  37010. 800fe12: 617b str r3, [r7, #20]
  37011. /* Disable the Channel 2: Reset the CC2E Bit */
  37012. TIMx->CCER &= ~TIM_CCER_CC2E;
  37013. 800fe14: 687b ldr r3, [r7, #4]
  37014. 800fe16: 6a1b ldr r3, [r3, #32]
  37015. 800fe18: f023 0210 bic.w r2, r3, #16
  37016. 800fe1c: 687b ldr r3, [r7, #4]
  37017. 800fe1e: 621a str r2, [r3, #32]
  37018. /* Get the TIMx CR2 register value */
  37019. tmpcr2 = TIMx->CR2;
  37020. 800fe20: 687b ldr r3, [r7, #4]
  37021. 800fe22: 685b ldr r3, [r3, #4]
  37022. 800fe24: 613b str r3, [r7, #16]
  37023. /* Get the TIMx CCMR1 register value */
  37024. tmpccmrx = TIMx->CCMR1;
  37025. 800fe26: 687b ldr r3, [r7, #4]
  37026. 800fe28: 699b ldr r3, [r3, #24]
  37027. 800fe2a: 60fb str r3, [r7, #12]
  37028. /* Reset the Output Compare mode and Capture/Compare selection Bits */
  37029. tmpccmrx &= ~TIM_CCMR1_OC2M;
  37030. 800fe2c: 68fa ldr r2, [r7, #12]
  37031. 800fe2e: 4b34 ldr r3, [pc, #208] @ (800ff00 <TIM_OC2_SetConfig+0xfc>)
  37032. 800fe30: 4013 ands r3, r2
  37033. 800fe32: 60fb str r3, [r7, #12]
  37034. tmpccmrx &= ~TIM_CCMR1_CC2S;
  37035. 800fe34: 68fb ldr r3, [r7, #12]
  37036. 800fe36: f423 7340 bic.w r3, r3, #768 @ 0x300
  37037. 800fe3a: 60fb str r3, [r7, #12]
  37038. /* Select the Output Compare Mode */
  37039. tmpccmrx |= (OC_Config->OCMode << 8U);
  37040. 800fe3c: 683b ldr r3, [r7, #0]
  37041. 800fe3e: 681b ldr r3, [r3, #0]
  37042. 800fe40: 021b lsls r3, r3, #8
  37043. 800fe42: 68fa ldr r2, [r7, #12]
  37044. 800fe44: 4313 orrs r3, r2
  37045. 800fe46: 60fb str r3, [r7, #12]
  37046. /* Reset the Output Polarity level */
  37047. tmpccer &= ~TIM_CCER_CC2P;
  37048. 800fe48: 697b ldr r3, [r7, #20]
  37049. 800fe4a: f023 0320 bic.w r3, r3, #32
  37050. 800fe4e: 617b str r3, [r7, #20]
  37051. /* Set the Output Compare Polarity */
  37052. tmpccer |= (OC_Config->OCPolarity << 4U);
  37053. 800fe50: 683b ldr r3, [r7, #0]
  37054. 800fe52: 689b ldr r3, [r3, #8]
  37055. 800fe54: 011b lsls r3, r3, #4
  37056. 800fe56: 697a ldr r2, [r7, #20]
  37057. 800fe58: 4313 orrs r3, r2
  37058. 800fe5a: 617b str r3, [r7, #20]
  37059. if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_2))
  37060. 800fe5c: 687b ldr r3, [r7, #4]
  37061. 800fe5e: 4a29 ldr r2, [pc, #164] @ (800ff04 <TIM_OC2_SetConfig+0x100>)
  37062. 800fe60: 4293 cmp r3, r2
  37063. 800fe62: d003 beq.n 800fe6c <TIM_OC2_SetConfig+0x68>
  37064. 800fe64: 687b ldr r3, [r7, #4]
  37065. 800fe66: 4a28 ldr r2, [pc, #160] @ (800ff08 <TIM_OC2_SetConfig+0x104>)
  37066. 800fe68: 4293 cmp r3, r2
  37067. 800fe6a: d10d bne.n 800fe88 <TIM_OC2_SetConfig+0x84>
  37068. {
  37069. assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity));
  37070. /* Reset the Output N Polarity level */
  37071. tmpccer &= ~TIM_CCER_CC2NP;
  37072. 800fe6c: 697b ldr r3, [r7, #20]
  37073. 800fe6e: f023 0380 bic.w r3, r3, #128 @ 0x80
  37074. 800fe72: 617b str r3, [r7, #20]
  37075. /* Set the Output N Polarity */
  37076. tmpccer |= (OC_Config->OCNPolarity << 4U);
  37077. 800fe74: 683b ldr r3, [r7, #0]
  37078. 800fe76: 68db ldr r3, [r3, #12]
  37079. 800fe78: 011b lsls r3, r3, #4
  37080. 800fe7a: 697a ldr r2, [r7, #20]
  37081. 800fe7c: 4313 orrs r3, r2
  37082. 800fe7e: 617b str r3, [r7, #20]
  37083. /* Reset the Output N State */
  37084. tmpccer &= ~TIM_CCER_CC2NE;
  37085. 800fe80: 697b ldr r3, [r7, #20]
  37086. 800fe82: f023 0340 bic.w r3, r3, #64 @ 0x40
  37087. 800fe86: 617b str r3, [r7, #20]
  37088. }
  37089. if (IS_TIM_BREAK_INSTANCE(TIMx))
  37090. 800fe88: 687b ldr r3, [r7, #4]
  37091. 800fe8a: 4a1e ldr r2, [pc, #120] @ (800ff04 <TIM_OC2_SetConfig+0x100>)
  37092. 800fe8c: 4293 cmp r3, r2
  37093. 800fe8e: d00f beq.n 800feb0 <TIM_OC2_SetConfig+0xac>
  37094. 800fe90: 687b ldr r3, [r7, #4]
  37095. 800fe92: 4a1d ldr r2, [pc, #116] @ (800ff08 <TIM_OC2_SetConfig+0x104>)
  37096. 800fe94: 4293 cmp r3, r2
  37097. 800fe96: d00b beq.n 800feb0 <TIM_OC2_SetConfig+0xac>
  37098. 800fe98: 687b ldr r3, [r7, #4]
  37099. 800fe9a: 4a1c ldr r2, [pc, #112] @ (800ff0c <TIM_OC2_SetConfig+0x108>)
  37100. 800fe9c: 4293 cmp r3, r2
  37101. 800fe9e: d007 beq.n 800feb0 <TIM_OC2_SetConfig+0xac>
  37102. 800fea0: 687b ldr r3, [r7, #4]
  37103. 800fea2: 4a1b ldr r2, [pc, #108] @ (800ff10 <TIM_OC2_SetConfig+0x10c>)
  37104. 800fea4: 4293 cmp r3, r2
  37105. 800fea6: d003 beq.n 800feb0 <TIM_OC2_SetConfig+0xac>
  37106. 800fea8: 687b ldr r3, [r7, #4]
  37107. 800feaa: 4a1a ldr r2, [pc, #104] @ (800ff14 <TIM_OC2_SetConfig+0x110>)
  37108. 800feac: 4293 cmp r3, r2
  37109. 800feae: d113 bne.n 800fed8 <TIM_OC2_SetConfig+0xd4>
  37110. /* Check parameters */
  37111. assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState));
  37112. assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState));
  37113. /* Reset the Output Compare and Output Compare N IDLE State */
  37114. tmpcr2 &= ~TIM_CR2_OIS2;
  37115. 800feb0: 693b ldr r3, [r7, #16]
  37116. 800feb2: f423 6380 bic.w r3, r3, #1024 @ 0x400
  37117. 800feb6: 613b str r3, [r7, #16]
  37118. tmpcr2 &= ~TIM_CR2_OIS2N;
  37119. 800feb8: 693b ldr r3, [r7, #16]
  37120. 800feba: f423 6300 bic.w r3, r3, #2048 @ 0x800
  37121. 800febe: 613b str r3, [r7, #16]
  37122. /* Set the Output Idle state */
  37123. tmpcr2 |= (OC_Config->OCIdleState << 2U);
  37124. 800fec0: 683b ldr r3, [r7, #0]
  37125. 800fec2: 695b ldr r3, [r3, #20]
  37126. 800fec4: 009b lsls r3, r3, #2
  37127. 800fec6: 693a ldr r2, [r7, #16]
  37128. 800fec8: 4313 orrs r3, r2
  37129. 800feca: 613b str r3, [r7, #16]
  37130. /* Set the Output N Idle state */
  37131. tmpcr2 |= (OC_Config->OCNIdleState << 2U);
  37132. 800fecc: 683b ldr r3, [r7, #0]
  37133. 800fece: 699b ldr r3, [r3, #24]
  37134. 800fed0: 009b lsls r3, r3, #2
  37135. 800fed2: 693a ldr r2, [r7, #16]
  37136. 800fed4: 4313 orrs r3, r2
  37137. 800fed6: 613b str r3, [r7, #16]
  37138. }
  37139. /* Write to TIMx CR2 */
  37140. TIMx->CR2 = tmpcr2;
  37141. 800fed8: 687b ldr r3, [r7, #4]
  37142. 800feda: 693a ldr r2, [r7, #16]
  37143. 800fedc: 605a str r2, [r3, #4]
  37144. /* Write to TIMx CCMR1 */
  37145. TIMx->CCMR1 = tmpccmrx;
  37146. 800fede: 687b ldr r3, [r7, #4]
  37147. 800fee0: 68fa ldr r2, [r7, #12]
  37148. 800fee2: 619a str r2, [r3, #24]
  37149. /* Set the Capture Compare Register value */
  37150. TIMx->CCR2 = OC_Config->Pulse;
  37151. 800fee4: 683b ldr r3, [r7, #0]
  37152. 800fee6: 685a ldr r2, [r3, #4]
  37153. 800fee8: 687b ldr r3, [r7, #4]
  37154. 800feea: 639a str r2, [r3, #56] @ 0x38
  37155. /* Write to TIMx CCER */
  37156. TIMx->CCER = tmpccer;
  37157. 800feec: 687b ldr r3, [r7, #4]
  37158. 800feee: 697a ldr r2, [r7, #20]
  37159. 800fef0: 621a str r2, [r3, #32]
  37160. }
  37161. 800fef2: bf00 nop
  37162. 800fef4: 371c adds r7, #28
  37163. 800fef6: 46bd mov sp, r7
  37164. 800fef8: f85d 7b04 ldr.w r7, [sp], #4
  37165. 800fefc: 4770 bx lr
  37166. 800fefe: bf00 nop
  37167. 800ff00: feff8fff .word 0xfeff8fff
  37168. 800ff04: 40010000 .word 0x40010000
  37169. 800ff08: 40010400 .word 0x40010400
  37170. 800ff0c: 40014000 .word 0x40014000
  37171. 800ff10: 40014400 .word 0x40014400
  37172. 800ff14: 40014800 .word 0x40014800
  37173. 0800ff18 <TIM_OC3_SetConfig>:
  37174. * @param TIMx to select the TIM peripheral
  37175. * @param OC_Config The output configuration structure
  37176. * @retval None
  37177. */
  37178. static void TIM_OC3_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config)
  37179. {
  37180. 800ff18: b480 push {r7}
  37181. 800ff1a: b087 sub sp, #28
  37182. 800ff1c: af00 add r7, sp, #0
  37183. 800ff1e: 6078 str r0, [r7, #4]
  37184. 800ff20: 6039 str r1, [r7, #0]
  37185. uint32_t tmpccmrx;
  37186. uint32_t tmpccer;
  37187. uint32_t tmpcr2;
  37188. /* Get the TIMx CCER register value */
  37189. tmpccer = TIMx->CCER;
  37190. 800ff22: 687b ldr r3, [r7, #4]
  37191. 800ff24: 6a1b ldr r3, [r3, #32]
  37192. 800ff26: 617b str r3, [r7, #20]
  37193. /* Disable the Channel 3: Reset the CC2E Bit */
  37194. TIMx->CCER &= ~TIM_CCER_CC3E;
  37195. 800ff28: 687b ldr r3, [r7, #4]
  37196. 800ff2a: 6a1b ldr r3, [r3, #32]
  37197. 800ff2c: f423 7280 bic.w r2, r3, #256 @ 0x100
  37198. 800ff30: 687b ldr r3, [r7, #4]
  37199. 800ff32: 621a str r2, [r3, #32]
  37200. /* Get the TIMx CR2 register value */
  37201. tmpcr2 = TIMx->CR2;
  37202. 800ff34: 687b ldr r3, [r7, #4]
  37203. 800ff36: 685b ldr r3, [r3, #4]
  37204. 800ff38: 613b str r3, [r7, #16]
  37205. /* Get the TIMx CCMR2 register value */
  37206. tmpccmrx = TIMx->CCMR2;
  37207. 800ff3a: 687b ldr r3, [r7, #4]
  37208. 800ff3c: 69db ldr r3, [r3, #28]
  37209. 800ff3e: 60fb str r3, [r7, #12]
  37210. /* Reset the Output Compare mode and Capture/Compare selection Bits */
  37211. tmpccmrx &= ~TIM_CCMR2_OC3M;
  37212. 800ff40: 68fa ldr r2, [r7, #12]
  37213. 800ff42: 4b33 ldr r3, [pc, #204] @ (8010010 <TIM_OC3_SetConfig+0xf8>)
  37214. 800ff44: 4013 ands r3, r2
  37215. 800ff46: 60fb str r3, [r7, #12]
  37216. tmpccmrx &= ~TIM_CCMR2_CC3S;
  37217. 800ff48: 68fb ldr r3, [r7, #12]
  37218. 800ff4a: f023 0303 bic.w r3, r3, #3
  37219. 800ff4e: 60fb str r3, [r7, #12]
  37220. /* Select the Output Compare Mode */
  37221. tmpccmrx |= OC_Config->OCMode;
  37222. 800ff50: 683b ldr r3, [r7, #0]
  37223. 800ff52: 681b ldr r3, [r3, #0]
  37224. 800ff54: 68fa ldr r2, [r7, #12]
  37225. 800ff56: 4313 orrs r3, r2
  37226. 800ff58: 60fb str r3, [r7, #12]
  37227. /* Reset the Output Polarity level */
  37228. tmpccer &= ~TIM_CCER_CC3P;
  37229. 800ff5a: 697b ldr r3, [r7, #20]
  37230. 800ff5c: f423 7300 bic.w r3, r3, #512 @ 0x200
  37231. 800ff60: 617b str r3, [r7, #20]
  37232. /* Set the Output Compare Polarity */
  37233. tmpccer |= (OC_Config->OCPolarity << 8U);
  37234. 800ff62: 683b ldr r3, [r7, #0]
  37235. 800ff64: 689b ldr r3, [r3, #8]
  37236. 800ff66: 021b lsls r3, r3, #8
  37237. 800ff68: 697a ldr r2, [r7, #20]
  37238. 800ff6a: 4313 orrs r3, r2
  37239. 800ff6c: 617b str r3, [r7, #20]
  37240. if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_3))
  37241. 800ff6e: 687b ldr r3, [r7, #4]
  37242. 800ff70: 4a28 ldr r2, [pc, #160] @ (8010014 <TIM_OC3_SetConfig+0xfc>)
  37243. 800ff72: 4293 cmp r3, r2
  37244. 800ff74: d003 beq.n 800ff7e <TIM_OC3_SetConfig+0x66>
  37245. 800ff76: 687b ldr r3, [r7, #4]
  37246. 800ff78: 4a27 ldr r2, [pc, #156] @ (8010018 <TIM_OC3_SetConfig+0x100>)
  37247. 800ff7a: 4293 cmp r3, r2
  37248. 800ff7c: d10d bne.n 800ff9a <TIM_OC3_SetConfig+0x82>
  37249. {
  37250. assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity));
  37251. /* Reset the Output N Polarity level */
  37252. tmpccer &= ~TIM_CCER_CC3NP;
  37253. 800ff7e: 697b ldr r3, [r7, #20]
  37254. 800ff80: f423 6300 bic.w r3, r3, #2048 @ 0x800
  37255. 800ff84: 617b str r3, [r7, #20]
  37256. /* Set the Output N Polarity */
  37257. tmpccer |= (OC_Config->OCNPolarity << 8U);
  37258. 800ff86: 683b ldr r3, [r7, #0]
  37259. 800ff88: 68db ldr r3, [r3, #12]
  37260. 800ff8a: 021b lsls r3, r3, #8
  37261. 800ff8c: 697a ldr r2, [r7, #20]
  37262. 800ff8e: 4313 orrs r3, r2
  37263. 800ff90: 617b str r3, [r7, #20]
  37264. /* Reset the Output N State */
  37265. tmpccer &= ~TIM_CCER_CC3NE;
  37266. 800ff92: 697b ldr r3, [r7, #20]
  37267. 800ff94: f423 6380 bic.w r3, r3, #1024 @ 0x400
  37268. 800ff98: 617b str r3, [r7, #20]
  37269. }
  37270. if (IS_TIM_BREAK_INSTANCE(TIMx))
  37271. 800ff9a: 687b ldr r3, [r7, #4]
  37272. 800ff9c: 4a1d ldr r2, [pc, #116] @ (8010014 <TIM_OC3_SetConfig+0xfc>)
  37273. 800ff9e: 4293 cmp r3, r2
  37274. 800ffa0: d00f beq.n 800ffc2 <TIM_OC3_SetConfig+0xaa>
  37275. 800ffa2: 687b ldr r3, [r7, #4]
  37276. 800ffa4: 4a1c ldr r2, [pc, #112] @ (8010018 <TIM_OC3_SetConfig+0x100>)
  37277. 800ffa6: 4293 cmp r3, r2
  37278. 800ffa8: d00b beq.n 800ffc2 <TIM_OC3_SetConfig+0xaa>
  37279. 800ffaa: 687b ldr r3, [r7, #4]
  37280. 800ffac: 4a1b ldr r2, [pc, #108] @ (801001c <TIM_OC3_SetConfig+0x104>)
  37281. 800ffae: 4293 cmp r3, r2
  37282. 800ffb0: d007 beq.n 800ffc2 <TIM_OC3_SetConfig+0xaa>
  37283. 800ffb2: 687b ldr r3, [r7, #4]
  37284. 800ffb4: 4a1a ldr r2, [pc, #104] @ (8010020 <TIM_OC3_SetConfig+0x108>)
  37285. 800ffb6: 4293 cmp r3, r2
  37286. 800ffb8: d003 beq.n 800ffc2 <TIM_OC3_SetConfig+0xaa>
  37287. 800ffba: 687b ldr r3, [r7, #4]
  37288. 800ffbc: 4a19 ldr r2, [pc, #100] @ (8010024 <TIM_OC3_SetConfig+0x10c>)
  37289. 800ffbe: 4293 cmp r3, r2
  37290. 800ffc0: d113 bne.n 800ffea <TIM_OC3_SetConfig+0xd2>
  37291. /* Check parameters */
  37292. assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState));
  37293. assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState));
  37294. /* Reset the Output Compare and Output Compare N IDLE State */
  37295. tmpcr2 &= ~TIM_CR2_OIS3;
  37296. 800ffc2: 693b ldr r3, [r7, #16]
  37297. 800ffc4: f423 5380 bic.w r3, r3, #4096 @ 0x1000
  37298. 800ffc8: 613b str r3, [r7, #16]
  37299. tmpcr2 &= ~TIM_CR2_OIS3N;
  37300. 800ffca: 693b ldr r3, [r7, #16]
  37301. 800ffcc: f423 5300 bic.w r3, r3, #8192 @ 0x2000
  37302. 800ffd0: 613b str r3, [r7, #16]
  37303. /* Set the Output Idle state */
  37304. tmpcr2 |= (OC_Config->OCIdleState << 4U);
  37305. 800ffd2: 683b ldr r3, [r7, #0]
  37306. 800ffd4: 695b ldr r3, [r3, #20]
  37307. 800ffd6: 011b lsls r3, r3, #4
  37308. 800ffd8: 693a ldr r2, [r7, #16]
  37309. 800ffda: 4313 orrs r3, r2
  37310. 800ffdc: 613b str r3, [r7, #16]
  37311. /* Set the Output N Idle state */
  37312. tmpcr2 |= (OC_Config->OCNIdleState << 4U);
  37313. 800ffde: 683b ldr r3, [r7, #0]
  37314. 800ffe0: 699b ldr r3, [r3, #24]
  37315. 800ffe2: 011b lsls r3, r3, #4
  37316. 800ffe4: 693a ldr r2, [r7, #16]
  37317. 800ffe6: 4313 orrs r3, r2
  37318. 800ffe8: 613b str r3, [r7, #16]
  37319. }
  37320. /* Write to TIMx CR2 */
  37321. TIMx->CR2 = tmpcr2;
  37322. 800ffea: 687b ldr r3, [r7, #4]
  37323. 800ffec: 693a ldr r2, [r7, #16]
  37324. 800ffee: 605a str r2, [r3, #4]
  37325. /* Write to TIMx CCMR2 */
  37326. TIMx->CCMR2 = tmpccmrx;
  37327. 800fff0: 687b ldr r3, [r7, #4]
  37328. 800fff2: 68fa ldr r2, [r7, #12]
  37329. 800fff4: 61da str r2, [r3, #28]
  37330. /* Set the Capture Compare Register value */
  37331. TIMx->CCR3 = OC_Config->Pulse;
  37332. 800fff6: 683b ldr r3, [r7, #0]
  37333. 800fff8: 685a ldr r2, [r3, #4]
  37334. 800fffa: 687b ldr r3, [r7, #4]
  37335. 800fffc: 63da str r2, [r3, #60] @ 0x3c
  37336. /* Write to TIMx CCER */
  37337. TIMx->CCER = tmpccer;
  37338. 800fffe: 687b ldr r3, [r7, #4]
  37339. 8010000: 697a ldr r2, [r7, #20]
  37340. 8010002: 621a str r2, [r3, #32]
  37341. }
  37342. 8010004: bf00 nop
  37343. 8010006: 371c adds r7, #28
  37344. 8010008: 46bd mov sp, r7
  37345. 801000a: f85d 7b04 ldr.w r7, [sp], #4
  37346. 801000e: 4770 bx lr
  37347. 8010010: fffeff8f .word 0xfffeff8f
  37348. 8010014: 40010000 .word 0x40010000
  37349. 8010018: 40010400 .word 0x40010400
  37350. 801001c: 40014000 .word 0x40014000
  37351. 8010020: 40014400 .word 0x40014400
  37352. 8010024: 40014800 .word 0x40014800
  37353. 08010028 <TIM_OC4_SetConfig>:
  37354. * @param TIMx to select the TIM peripheral
  37355. * @param OC_Config The output configuration structure
  37356. * @retval None
  37357. */
  37358. static void TIM_OC4_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config)
  37359. {
  37360. 8010028: b480 push {r7}
  37361. 801002a: b087 sub sp, #28
  37362. 801002c: af00 add r7, sp, #0
  37363. 801002e: 6078 str r0, [r7, #4]
  37364. 8010030: 6039 str r1, [r7, #0]
  37365. uint32_t tmpccmrx;
  37366. uint32_t tmpccer;
  37367. uint32_t tmpcr2;
  37368. /* Get the TIMx CCER register value */
  37369. tmpccer = TIMx->CCER;
  37370. 8010032: 687b ldr r3, [r7, #4]
  37371. 8010034: 6a1b ldr r3, [r3, #32]
  37372. 8010036: 613b str r3, [r7, #16]
  37373. /* Disable the Channel 4: Reset the CC4E Bit */
  37374. TIMx->CCER &= ~TIM_CCER_CC4E;
  37375. 8010038: 687b ldr r3, [r7, #4]
  37376. 801003a: 6a1b ldr r3, [r3, #32]
  37377. 801003c: f423 5280 bic.w r2, r3, #4096 @ 0x1000
  37378. 8010040: 687b ldr r3, [r7, #4]
  37379. 8010042: 621a str r2, [r3, #32]
  37380. /* Get the TIMx CR2 register value */
  37381. tmpcr2 = TIMx->CR2;
  37382. 8010044: 687b ldr r3, [r7, #4]
  37383. 8010046: 685b ldr r3, [r3, #4]
  37384. 8010048: 617b str r3, [r7, #20]
  37385. /* Get the TIMx CCMR2 register value */
  37386. tmpccmrx = TIMx->CCMR2;
  37387. 801004a: 687b ldr r3, [r7, #4]
  37388. 801004c: 69db ldr r3, [r3, #28]
  37389. 801004e: 60fb str r3, [r7, #12]
  37390. /* Reset the Output Compare mode and Capture/Compare selection Bits */
  37391. tmpccmrx &= ~TIM_CCMR2_OC4M;
  37392. 8010050: 68fa ldr r2, [r7, #12]
  37393. 8010052: 4b24 ldr r3, [pc, #144] @ (80100e4 <TIM_OC4_SetConfig+0xbc>)
  37394. 8010054: 4013 ands r3, r2
  37395. 8010056: 60fb str r3, [r7, #12]
  37396. tmpccmrx &= ~TIM_CCMR2_CC4S;
  37397. 8010058: 68fb ldr r3, [r7, #12]
  37398. 801005a: f423 7340 bic.w r3, r3, #768 @ 0x300
  37399. 801005e: 60fb str r3, [r7, #12]
  37400. /* Select the Output Compare Mode */
  37401. tmpccmrx |= (OC_Config->OCMode << 8U);
  37402. 8010060: 683b ldr r3, [r7, #0]
  37403. 8010062: 681b ldr r3, [r3, #0]
  37404. 8010064: 021b lsls r3, r3, #8
  37405. 8010066: 68fa ldr r2, [r7, #12]
  37406. 8010068: 4313 orrs r3, r2
  37407. 801006a: 60fb str r3, [r7, #12]
  37408. /* Reset the Output Polarity level */
  37409. tmpccer &= ~TIM_CCER_CC4P;
  37410. 801006c: 693b ldr r3, [r7, #16]
  37411. 801006e: f423 5300 bic.w r3, r3, #8192 @ 0x2000
  37412. 8010072: 613b str r3, [r7, #16]
  37413. /* Set the Output Compare Polarity */
  37414. tmpccer |= (OC_Config->OCPolarity << 12U);
  37415. 8010074: 683b ldr r3, [r7, #0]
  37416. 8010076: 689b ldr r3, [r3, #8]
  37417. 8010078: 031b lsls r3, r3, #12
  37418. 801007a: 693a ldr r2, [r7, #16]
  37419. 801007c: 4313 orrs r3, r2
  37420. 801007e: 613b str r3, [r7, #16]
  37421. if (IS_TIM_BREAK_INSTANCE(TIMx))
  37422. 8010080: 687b ldr r3, [r7, #4]
  37423. 8010082: 4a19 ldr r2, [pc, #100] @ (80100e8 <TIM_OC4_SetConfig+0xc0>)
  37424. 8010084: 4293 cmp r3, r2
  37425. 8010086: d00f beq.n 80100a8 <TIM_OC4_SetConfig+0x80>
  37426. 8010088: 687b ldr r3, [r7, #4]
  37427. 801008a: 4a18 ldr r2, [pc, #96] @ (80100ec <TIM_OC4_SetConfig+0xc4>)
  37428. 801008c: 4293 cmp r3, r2
  37429. 801008e: d00b beq.n 80100a8 <TIM_OC4_SetConfig+0x80>
  37430. 8010090: 687b ldr r3, [r7, #4]
  37431. 8010092: 4a17 ldr r2, [pc, #92] @ (80100f0 <TIM_OC4_SetConfig+0xc8>)
  37432. 8010094: 4293 cmp r3, r2
  37433. 8010096: d007 beq.n 80100a8 <TIM_OC4_SetConfig+0x80>
  37434. 8010098: 687b ldr r3, [r7, #4]
  37435. 801009a: 4a16 ldr r2, [pc, #88] @ (80100f4 <TIM_OC4_SetConfig+0xcc>)
  37436. 801009c: 4293 cmp r3, r2
  37437. 801009e: d003 beq.n 80100a8 <TIM_OC4_SetConfig+0x80>
  37438. 80100a0: 687b ldr r3, [r7, #4]
  37439. 80100a2: 4a15 ldr r2, [pc, #84] @ (80100f8 <TIM_OC4_SetConfig+0xd0>)
  37440. 80100a4: 4293 cmp r3, r2
  37441. 80100a6: d109 bne.n 80100bc <TIM_OC4_SetConfig+0x94>
  37442. {
  37443. /* Check parameters */
  37444. assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState));
  37445. /* Reset the Output Compare IDLE State */
  37446. tmpcr2 &= ~TIM_CR2_OIS4;
  37447. 80100a8: 697b ldr r3, [r7, #20]
  37448. 80100aa: f423 4380 bic.w r3, r3, #16384 @ 0x4000
  37449. 80100ae: 617b str r3, [r7, #20]
  37450. /* Set the Output Idle state */
  37451. tmpcr2 |= (OC_Config->OCIdleState << 6U);
  37452. 80100b0: 683b ldr r3, [r7, #0]
  37453. 80100b2: 695b ldr r3, [r3, #20]
  37454. 80100b4: 019b lsls r3, r3, #6
  37455. 80100b6: 697a ldr r2, [r7, #20]
  37456. 80100b8: 4313 orrs r3, r2
  37457. 80100ba: 617b str r3, [r7, #20]
  37458. }
  37459. /* Write to TIMx CR2 */
  37460. TIMx->CR2 = tmpcr2;
  37461. 80100bc: 687b ldr r3, [r7, #4]
  37462. 80100be: 697a ldr r2, [r7, #20]
  37463. 80100c0: 605a str r2, [r3, #4]
  37464. /* Write to TIMx CCMR2 */
  37465. TIMx->CCMR2 = tmpccmrx;
  37466. 80100c2: 687b ldr r3, [r7, #4]
  37467. 80100c4: 68fa ldr r2, [r7, #12]
  37468. 80100c6: 61da str r2, [r3, #28]
  37469. /* Set the Capture Compare Register value */
  37470. TIMx->CCR4 = OC_Config->Pulse;
  37471. 80100c8: 683b ldr r3, [r7, #0]
  37472. 80100ca: 685a ldr r2, [r3, #4]
  37473. 80100cc: 687b ldr r3, [r7, #4]
  37474. 80100ce: 641a str r2, [r3, #64] @ 0x40
  37475. /* Write to TIMx CCER */
  37476. TIMx->CCER = tmpccer;
  37477. 80100d0: 687b ldr r3, [r7, #4]
  37478. 80100d2: 693a ldr r2, [r7, #16]
  37479. 80100d4: 621a str r2, [r3, #32]
  37480. }
  37481. 80100d6: bf00 nop
  37482. 80100d8: 371c adds r7, #28
  37483. 80100da: 46bd mov sp, r7
  37484. 80100dc: f85d 7b04 ldr.w r7, [sp], #4
  37485. 80100e0: 4770 bx lr
  37486. 80100e2: bf00 nop
  37487. 80100e4: feff8fff .word 0xfeff8fff
  37488. 80100e8: 40010000 .word 0x40010000
  37489. 80100ec: 40010400 .word 0x40010400
  37490. 80100f0: 40014000 .word 0x40014000
  37491. 80100f4: 40014400 .word 0x40014400
  37492. 80100f8: 40014800 .word 0x40014800
  37493. 080100fc <TIM_OC5_SetConfig>:
  37494. * @param OC_Config The output configuration structure
  37495. * @retval None
  37496. */
  37497. static void TIM_OC5_SetConfig(TIM_TypeDef *TIMx,
  37498. const TIM_OC_InitTypeDef *OC_Config)
  37499. {
  37500. 80100fc: b480 push {r7}
  37501. 80100fe: b087 sub sp, #28
  37502. 8010100: af00 add r7, sp, #0
  37503. 8010102: 6078 str r0, [r7, #4]
  37504. 8010104: 6039 str r1, [r7, #0]
  37505. uint32_t tmpccmrx;
  37506. uint32_t tmpccer;
  37507. uint32_t tmpcr2;
  37508. /* Get the TIMx CCER register value */
  37509. tmpccer = TIMx->CCER;
  37510. 8010106: 687b ldr r3, [r7, #4]
  37511. 8010108: 6a1b ldr r3, [r3, #32]
  37512. 801010a: 613b str r3, [r7, #16]
  37513. /* Disable the output: Reset the CCxE Bit */
  37514. TIMx->CCER &= ~TIM_CCER_CC5E;
  37515. 801010c: 687b ldr r3, [r7, #4]
  37516. 801010e: 6a1b ldr r3, [r3, #32]
  37517. 8010110: f423 3280 bic.w r2, r3, #65536 @ 0x10000
  37518. 8010114: 687b ldr r3, [r7, #4]
  37519. 8010116: 621a str r2, [r3, #32]
  37520. /* Get the TIMx CR2 register value */
  37521. tmpcr2 = TIMx->CR2;
  37522. 8010118: 687b ldr r3, [r7, #4]
  37523. 801011a: 685b ldr r3, [r3, #4]
  37524. 801011c: 617b str r3, [r7, #20]
  37525. /* Get the TIMx CCMR1 register value */
  37526. tmpccmrx = TIMx->CCMR3;
  37527. 801011e: 687b ldr r3, [r7, #4]
  37528. 8010120: 6d5b ldr r3, [r3, #84] @ 0x54
  37529. 8010122: 60fb str r3, [r7, #12]
  37530. /* Reset the Output Compare Mode Bits */
  37531. tmpccmrx &= ~(TIM_CCMR3_OC5M);
  37532. 8010124: 68fa ldr r2, [r7, #12]
  37533. 8010126: 4b21 ldr r3, [pc, #132] @ (80101ac <TIM_OC5_SetConfig+0xb0>)
  37534. 8010128: 4013 ands r3, r2
  37535. 801012a: 60fb str r3, [r7, #12]
  37536. /* Select the Output Compare Mode */
  37537. tmpccmrx |= OC_Config->OCMode;
  37538. 801012c: 683b ldr r3, [r7, #0]
  37539. 801012e: 681b ldr r3, [r3, #0]
  37540. 8010130: 68fa ldr r2, [r7, #12]
  37541. 8010132: 4313 orrs r3, r2
  37542. 8010134: 60fb str r3, [r7, #12]
  37543. /* Reset the Output Polarity level */
  37544. tmpccer &= ~TIM_CCER_CC5P;
  37545. 8010136: 693b ldr r3, [r7, #16]
  37546. 8010138: f423 3300 bic.w r3, r3, #131072 @ 0x20000
  37547. 801013c: 613b str r3, [r7, #16]
  37548. /* Set the Output Compare Polarity */
  37549. tmpccer |= (OC_Config->OCPolarity << 16U);
  37550. 801013e: 683b ldr r3, [r7, #0]
  37551. 8010140: 689b ldr r3, [r3, #8]
  37552. 8010142: 041b lsls r3, r3, #16
  37553. 8010144: 693a ldr r2, [r7, #16]
  37554. 8010146: 4313 orrs r3, r2
  37555. 8010148: 613b str r3, [r7, #16]
  37556. if (IS_TIM_BREAK_INSTANCE(TIMx))
  37557. 801014a: 687b ldr r3, [r7, #4]
  37558. 801014c: 4a18 ldr r2, [pc, #96] @ (80101b0 <TIM_OC5_SetConfig+0xb4>)
  37559. 801014e: 4293 cmp r3, r2
  37560. 8010150: d00f beq.n 8010172 <TIM_OC5_SetConfig+0x76>
  37561. 8010152: 687b ldr r3, [r7, #4]
  37562. 8010154: 4a17 ldr r2, [pc, #92] @ (80101b4 <TIM_OC5_SetConfig+0xb8>)
  37563. 8010156: 4293 cmp r3, r2
  37564. 8010158: d00b beq.n 8010172 <TIM_OC5_SetConfig+0x76>
  37565. 801015a: 687b ldr r3, [r7, #4]
  37566. 801015c: 4a16 ldr r2, [pc, #88] @ (80101b8 <TIM_OC5_SetConfig+0xbc>)
  37567. 801015e: 4293 cmp r3, r2
  37568. 8010160: d007 beq.n 8010172 <TIM_OC5_SetConfig+0x76>
  37569. 8010162: 687b ldr r3, [r7, #4]
  37570. 8010164: 4a15 ldr r2, [pc, #84] @ (80101bc <TIM_OC5_SetConfig+0xc0>)
  37571. 8010166: 4293 cmp r3, r2
  37572. 8010168: d003 beq.n 8010172 <TIM_OC5_SetConfig+0x76>
  37573. 801016a: 687b ldr r3, [r7, #4]
  37574. 801016c: 4a14 ldr r2, [pc, #80] @ (80101c0 <TIM_OC5_SetConfig+0xc4>)
  37575. 801016e: 4293 cmp r3, r2
  37576. 8010170: d109 bne.n 8010186 <TIM_OC5_SetConfig+0x8a>
  37577. {
  37578. /* Reset the Output Compare IDLE State */
  37579. tmpcr2 &= ~TIM_CR2_OIS5;
  37580. 8010172: 697b ldr r3, [r7, #20]
  37581. 8010174: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  37582. 8010178: 617b str r3, [r7, #20]
  37583. /* Set the Output Idle state */
  37584. tmpcr2 |= (OC_Config->OCIdleState << 8U);
  37585. 801017a: 683b ldr r3, [r7, #0]
  37586. 801017c: 695b ldr r3, [r3, #20]
  37587. 801017e: 021b lsls r3, r3, #8
  37588. 8010180: 697a ldr r2, [r7, #20]
  37589. 8010182: 4313 orrs r3, r2
  37590. 8010184: 617b str r3, [r7, #20]
  37591. }
  37592. /* Write to TIMx CR2 */
  37593. TIMx->CR2 = tmpcr2;
  37594. 8010186: 687b ldr r3, [r7, #4]
  37595. 8010188: 697a ldr r2, [r7, #20]
  37596. 801018a: 605a str r2, [r3, #4]
  37597. /* Write to TIMx CCMR3 */
  37598. TIMx->CCMR3 = tmpccmrx;
  37599. 801018c: 687b ldr r3, [r7, #4]
  37600. 801018e: 68fa ldr r2, [r7, #12]
  37601. 8010190: 655a str r2, [r3, #84] @ 0x54
  37602. /* Set the Capture Compare Register value */
  37603. TIMx->CCR5 = OC_Config->Pulse;
  37604. 8010192: 683b ldr r3, [r7, #0]
  37605. 8010194: 685a ldr r2, [r3, #4]
  37606. 8010196: 687b ldr r3, [r7, #4]
  37607. 8010198: 659a str r2, [r3, #88] @ 0x58
  37608. /* Write to TIMx CCER */
  37609. TIMx->CCER = tmpccer;
  37610. 801019a: 687b ldr r3, [r7, #4]
  37611. 801019c: 693a ldr r2, [r7, #16]
  37612. 801019e: 621a str r2, [r3, #32]
  37613. }
  37614. 80101a0: bf00 nop
  37615. 80101a2: 371c adds r7, #28
  37616. 80101a4: 46bd mov sp, r7
  37617. 80101a6: f85d 7b04 ldr.w r7, [sp], #4
  37618. 80101aa: 4770 bx lr
  37619. 80101ac: fffeff8f .word 0xfffeff8f
  37620. 80101b0: 40010000 .word 0x40010000
  37621. 80101b4: 40010400 .word 0x40010400
  37622. 80101b8: 40014000 .word 0x40014000
  37623. 80101bc: 40014400 .word 0x40014400
  37624. 80101c0: 40014800 .word 0x40014800
  37625. 080101c4 <TIM_OC6_SetConfig>:
  37626. * @param OC_Config The output configuration structure
  37627. * @retval None
  37628. */
  37629. static void TIM_OC6_SetConfig(TIM_TypeDef *TIMx,
  37630. const TIM_OC_InitTypeDef *OC_Config)
  37631. {
  37632. 80101c4: b480 push {r7}
  37633. 80101c6: b087 sub sp, #28
  37634. 80101c8: af00 add r7, sp, #0
  37635. 80101ca: 6078 str r0, [r7, #4]
  37636. 80101cc: 6039 str r1, [r7, #0]
  37637. uint32_t tmpccmrx;
  37638. uint32_t tmpccer;
  37639. uint32_t tmpcr2;
  37640. /* Get the TIMx CCER register value */
  37641. tmpccer = TIMx->CCER;
  37642. 80101ce: 687b ldr r3, [r7, #4]
  37643. 80101d0: 6a1b ldr r3, [r3, #32]
  37644. 80101d2: 613b str r3, [r7, #16]
  37645. /* Disable the output: Reset the CCxE Bit */
  37646. TIMx->CCER &= ~TIM_CCER_CC6E;
  37647. 80101d4: 687b ldr r3, [r7, #4]
  37648. 80101d6: 6a1b ldr r3, [r3, #32]
  37649. 80101d8: f423 1280 bic.w r2, r3, #1048576 @ 0x100000
  37650. 80101dc: 687b ldr r3, [r7, #4]
  37651. 80101de: 621a str r2, [r3, #32]
  37652. /* Get the TIMx CR2 register value */
  37653. tmpcr2 = TIMx->CR2;
  37654. 80101e0: 687b ldr r3, [r7, #4]
  37655. 80101e2: 685b ldr r3, [r3, #4]
  37656. 80101e4: 617b str r3, [r7, #20]
  37657. /* Get the TIMx CCMR1 register value */
  37658. tmpccmrx = TIMx->CCMR3;
  37659. 80101e6: 687b ldr r3, [r7, #4]
  37660. 80101e8: 6d5b ldr r3, [r3, #84] @ 0x54
  37661. 80101ea: 60fb str r3, [r7, #12]
  37662. /* Reset the Output Compare Mode Bits */
  37663. tmpccmrx &= ~(TIM_CCMR3_OC6M);
  37664. 80101ec: 68fa ldr r2, [r7, #12]
  37665. 80101ee: 4b22 ldr r3, [pc, #136] @ (8010278 <TIM_OC6_SetConfig+0xb4>)
  37666. 80101f0: 4013 ands r3, r2
  37667. 80101f2: 60fb str r3, [r7, #12]
  37668. /* Select the Output Compare Mode */
  37669. tmpccmrx |= (OC_Config->OCMode << 8U);
  37670. 80101f4: 683b ldr r3, [r7, #0]
  37671. 80101f6: 681b ldr r3, [r3, #0]
  37672. 80101f8: 021b lsls r3, r3, #8
  37673. 80101fa: 68fa ldr r2, [r7, #12]
  37674. 80101fc: 4313 orrs r3, r2
  37675. 80101fe: 60fb str r3, [r7, #12]
  37676. /* Reset the Output Polarity level */
  37677. tmpccer &= (uint32_t)~TIM_CCER_CC6P;
  37678. 8010200: 693b ldr r3, [r7, #16]
  37679. 8010202: f423 1300 bic.w r3, r3, #2097152 @ 0x200000
  37680. 8010206: 613b str r3, [r7, #16]
  37681. /* Set the Output Compare Polarity */
  37682. tmpccer |= (OC_Config->OCPolarity << 20U);
  37683. 8010208: 683b ldr r3, [r7, #0]
  37684. 801020a: 689b ldr r3, [r3, #8]
  37685. 801020c: 051b lsls r3, r3, #20
  37686. 801020e: 693a ldr r2, [r7, #16]
  37687. 8010210: 4313 orrs r3, r2
  37688. 8010212: 613b str r3, [r7, #16]
  37689. if (IS_TIM_BREAK_INSTANCE(TIMx))
  37690. 8010214: 687b ldr r3, [r7, #4]
  37691. 8010216: 4a19 ldr r2, [pc, #100] @ (801027c <TIM_OC6_SetConfig+0xb8>)
  37692. 8010218: 4293 cmp r3, r2
  37693. 801021a: d00f beq.n 801023c <TIM_OC6_SetConfig+0x78>
  37694. 801021c: 687b ldr r3, [r7, #4]
  37695. 801021e: 4a18 ldr r2, [pc, #96] @ (8010280 <TIM_OC6_SetConfig+0xbc>)
  37696. 8010220: 4293 cmp r3, r2
  37697. 8010222: d00b beq.n 801023c <TIM_OC6_SetConfig+0x78>
  37698. 8010224: 687b ldr r3, [r7, #4]
  37699. 8010226: 4a17 ldr r2, [pc, #92] @ (8010284 <TIM_OC6_SetConfig+0xc0>)
  37700. 8010228: 4293 cmp r3, r2
  37701. 801022a: d007 beq.n 801023c <TIM_OC6_SetConfig+0x78>
  37702. 801022c: 687b ldr r3, [r7, #4]
  37703. 801022e: 4a16 ldr r2, [pc, #88] @ (8010288 <TIM_OC6_SetConfig+0xc4>)
  37704. 8010230: 4293 cmp r3, r2
  37705. 8010232: d003 beq.n 801023c <TIM_OC6_SetConfig+0x78>
  37706. 8010234: 687b ldr r3, [r7, #4]
  37707. 8010236: 4a15 ldr r2, [pc, #84] @ (801028c <TIM_OC6_SetConfig+0xc8>)
  37708. 8010238: 4293 cmp r3, r2
  37709. 801023a: d109 bne.n 8010250 <TIM_OC6_SetConfig+0x8c>
  37710. {
  37711. /* Reset the Output Compare IDLE State */
  37712. tmpcr2 &= ~TIM_CR2_OIS6;
  37713. 801023c: 697b ldr r3, [r7, #20]
  37714. 801023e: f423 2380 bic.w r3, r3, #262144 @ 0x40000
  37715. 8010242: 617b str r3, [r7, #20]
  37716. /* Set the Output Idle state */
  37717. tmpcr2 |= (OC_Config->OCIdleState << 10U);
  37718. 8010244: 683b ldr r3, [r7, #0]
  37719. 8010246: 695b ldr r3, [r3, #20]
  37720. 8010248: 029b lsls r3, r3, #10
  37721. 801024a: 697a ldr r2, [r7, #20]
  37722. 801024c: 4313 orrs r3, r2
  37723. 801024e: 617b str r3, [r7, #20]
  37724. }
  37725. /* Write to TIMx CR2 */
  37726. TIMx->CR2 = tmpcr2;
  37727. 8010250: 687b ldr r3, [r7, #4]
  37728. 8010252: 697a ldr r2, [r7, #20]
  37729. 8010254: 605a str r2, [r3, #4]
  37730. /* Write to TIMx CCMR3 */
  37731. TIMx->CCMR3 = tmpccmrx;
  37732. 8010256: 687b ldr r3, [r7, #4]
  37733. 8010258: 68fa ldr r2, [r7, #12]
  37734. 801025a: 655a str r2, [r3, #84] @ 0x54
  37735. /* Set the Capture Compare Register value */
  37736. TIMx->CCR6 = OC_Config->Pulse;
  37737. 801025c: 683b ldr r3, [r7, #0]
  37738. 801025e: 685a ldr r2, [r3, #4]
  37739. 8010260: 687b ldr r3, [r7, #4]
  37740. 8010262: 65da str r2, [r3, #92] @ 0x5c
  37741. /* Write to TIMx CCER */
  37742. TIMx->CCER = tmpccer;
  37743. 8010264: 687b ldr r3, [r7, #4]
  37744. 8010266: 693a ldr r2, [r7, #16]
  37745. 8010268: 621a str r2, [r3, #32]
  37746. }
  37747. 801026a: bf00 nop
  37748. 801026c: 371c adds r7, #28
  37749. 801026e: 46bd mov sp, r7
  37750. 8010270: f85d 7b04 ldr.w r7, [sp], #4
  37751. 8010274: 4770 bx lr
  37752. 8010276: bf00 nop
  37753. 8010278: feff8fff .word 0xfeff8fff
  37754. 801027c: 40010000 .word 0x40010000
  37755. 8010280: 40010400 .word 0x40010400
  37756. 8010284: 40014000 .word 0x40014000
  37757. 8010288: 40014400 .word 0x40014400
  37758. 801028c: 40014800 .word 0x40014800
  37759. 08010290 <TIM_TI1_SetConfig>:
  37760. * (on channel2 path) is used as the input signal. Therefore CCMR1 must be
  37761. * protected against un-initialized filter and polarity values.
  37762. */
  37763. void TIM_TI1_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection,
  37764. uint32_t TIM_ICFilter)
  37765. {
  37766. 8010290: b480 push {r7}
  37767. 8010292: b087 sub sp, #28
  37768. 8010294: af00 add r7, sp, #0
  37769. 8010296: 60f8 str r0, [r7, #12]
  37770. 8010298: 60b9 str r1, [r7, #8]
  37771. 801029a: 607a str r2, [r7, #4]
  37772. 801029c: 603b str r3, [r7, #0]
  37773. uint32_t tmpccmr1;
  37774. uint32_t tmpccer;
  37775. /* Disable the Channel 1: Reset the CC1E Bit */
  37776. tmpccer = TIMx->CCER;
  37777. 801029e: 68fb ldr r3, [r7, #12]
  37778. 80102a0: 6a1b ldr r3, [r3, #32]
  37779. 80102a2: 613b str r3, [r7, #16]
  37780. TIMx->CCER &= ~TIM_CCER_CC1E;
  37781. 80102a4: 68fb ldr r3, [r7, #12]
  37782. 80102a6: 6a1b ldr r3, [r3, #32]
  37783. 80102a8: f023 0201 bic.w r2, r3, #1
  37784. 80102ac: 68fb ldr r3, [r7, #12]
  37785. 80102ae: 621a str r2, [r3, #32]
  37786. tmpccmr1 = TIMx->CCMR1;
  37787. 80102b0: 68fb ldr r3, [r7, #12]
  37788. 80102b2: 699b ldr r3, [r3, #24]
  37789. 80102b4: 617b str r3, [r7, #20]
  37790. /* Select the Input */
  37791. if (IS_TIM_CC2_INSTANCE(TIMx) != RESET)
  37792. 80102b6: 68fb ldr r3, [r7, #12]
  37793. 80102b8: 4a28 ldr r2, [pc, #160] @ (801035c <TIM_TI1_SetConfig+0xcc>)
  37794. 80102ba: 4293 cmp r3, r2
  37795. 80102bc: d01b beq.n 80102f6 <TIM_TI1_SetConfig+0x66>
  37796. 80102be: 68fb ldr r3, [r7, #12]
  37797. 80102c0: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  37798. 80102c4: d017 beq.n 80102f6 <TIM_TI1_SetConfig+0x66>
  37799. 80102c6: 68fb ldr r3, [r7, #12]
  37800. 80102c8: 4a25 ldr r2, [pc, #148] @ (8010360 <TIM_TI1_SetConfig+0xd0>)
  37801. 80102ca: 4293 cmp r3, r2
  37802. 80102cc: d013 beq.n 80102f6 <TIM_TI1_SetConfig+0x66>
  37803. 80102ce: 68fb ldr r3, [r7, #12]
  37804. 80102d0: 4a24 ldr r2, [pc, #144] @ (8010364 <TIM_TI1_SetConfig+0xd4>)
  37805. 80102d2: 4293 cmp r3, r2
  37806. 80102d4: d00f beq.n 80102f6 <TIM_TI1_SetConfig+0x66>
  37807. 80102d6: 68fb ldr r3, [r7, #12]
  37808. 80102d8: 4a23 ldr r2, [pc, #140] @ (8010368 <TIM_TI1_SetConfig+0xd8>)
  37809. 80102da: 4293 cmp r3, r2
  37810. 80102dc: d00b beq.n 80102f6 <TIM_TI1_SetConfig+0x66>
  37811. 80102de: 68fb ldr r3, [r7, #12]
  37812. 80102e0: 4a22 ldr r2, [pc, #136] @ (801036c <TIM_TI1_SetConfig+0xdc>)
  37813. 80102e2: 4293 cmp r3, r2
  37814. 80102e4: d007 beq.n 80102f6 <TIM_TI1_SetConfig+0x66>
  37815. 80102e6: 68fb ldr r3, [r7, #12]
  37816. 80102e8: 4a21 ldr r2, [pc, #132] @ (8010370 <TIM_TI1_SetConfig+0xe0>)
  37817. 80102ea: 4293 cmp r3, r2
  37818. 80102ec: d003 beq.n 80102f6 <TIM_TI1_SetConfig+0x66>
  37819. 80102ee: 68fb ldr r3, [r7, #12]
  37820. 80102f0: 4a20 ldr r2, [pc, #128] @ (8010374 <TIM_TI1_SetConfig+0xe4>)
  37821. 80102f2: 4293 cmp r3, r2
  37822. 80102f4: d101 bne.n 80102fa <TIM_TI1_SetConfig+0x6a>
  37823. 80102f6: 2301 movs r3, #1
  37824. 80102f8: e000 b.n 80102fc <TIM_TI1_SetConfig+0x6c>
  37825. 80102fa: 2300 movs r3, #0
  37826. 80102fc: 2b00 cmp r3, #0
  37827. 80102fe: d008 beq.n 8010312 <TIM_TI1_SetConfig+0x82>
  37828. {
  37829. tmpccmr1 &= ~TIM_CCMR1_CC1S;
  37830. 8010300: 697b ldr r3, [r7, #20]
  37831. 8010302: f023 0303 bic.w r3, r3, #3
  37832. 8010306: 617b str r3, [r7, #20]
  37833. tmpccmr1 |= TIM_ICSelection;
  37834. 8010308: 697a ldr r2, [r7, #20]
  37835. 801030a: 687b ldr r3, [r7, #4]
  37836. 801030c: 4313 orrs r3, r2
  37837. 801030e: 617b str r3, [r7, #20]
  37838. 8010310: e003 b.n 801031a <TIM_TI1_SetConfig+0x8a>
  37839. }
  37840. else
  37841. {
  37842. tmpccmr1 |= TIM_CCMR1_CC1S_0;
  37843. 8010312: 697b ldr r3, [r7, #20]
  37844. 8010314: f043 0301 orr.w r3, r3, #1
  37845. 8010318: 617b str r3, [r7, #20]
  37846. }
  37847. /* Set the filter */
  37848. tmpccmr1 &= ~TIM_CCMR1_IC1F;
  37849. 801031a: 697b ldr r3, [r7, #20]
  37850. 801031c: f023 03f0 bic.w r3, r3, #240 @ 0xf0
  37851. 8010320: 617b str r3, [r7, #20]
  37852. tmpccmr1 |= ((TIM_ICFilter << 4U) & TIM_CCMR1_IC1F);
  37853. 8010322: 683b ldr r3, [r7, #0]
  37854. 8010324: 011b lsls r3, r3, #4
  37855. 8010326: b2db uxtb r3, r3
  37856. 8010328: 697a ldr r2, [r7, #20]
  37857. 801032a: 4313 orrs r3, r2
  37858. 801032c: 617b str r3, [r7, #20]
  37859. /* Select the Polarity and set the CC1E Bit */
  37860. tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP);
  37861. 801032e: 693b ldr r3, [r7, #16]
  37862. 8010330: f023 030a bic.w r3, r3, #10
  37863. 8010334: 613b str r3, [r7, #16]
  37864. tmpccer |= (TIM_ICPolarity & (TIM_CCER_CC1P | TIM_CCER_CC1NP));
  37865. 8010336: 68bb ldr r3, [r7, #8]
  37866. 8010338: f003 030a and.w r3, r3, #10
  37867. 801033c: 693a ldr r2, [r7, #16]
  37868. 801033e: 4313 orrs r3, r2
  37869. 8010340: 613b str r3, [r7, #16]
  37870. /* Write to TIMx CCMR1 and CCER registers */
  37871. TIMx->CCMR1 = tmpccmr1;
  37872. 8010342: 68fb ldr r3, [r7, #12]
  37873. 8010344: 697a ldr r2, [r7, #20]
  37874. 8010346: 619a str r2, [r3, #24]
  37875. TIMx->CCER = tmpccer;
  37876. 8010348: 68fb ldr r3, [r7, #12]
  37877. 801034a: 693a ldr r2, [r7, #16]
  37878. 801034c: 621a str r2, [r3, #32]
  37879. }
  37880. 801034e: bf00 nop
  37881. 8010350: 371c adds r7, #28
  37882. 8010352: 46bd mov sp, r7
  37883. 8010354: f85d 7b04 ldr.w r7, [sp], #4
  37884. 8010358: 4770 bx lr
  37885. 801035a: bf00 nop
  37886. 801035c: 40010000 .word 0x40010000
  37887. 8010360: 40000400 .word 0x40000400
  37888. 8010364: 40000800 .word 0x40000800
  37889. 8010368: 40000c00 .word 0x40000c00
  37890. 801036c: 40010400 .word 0x40010400
  37891. 8010370: 40001800 .word 0x40001800
  37892. 8010374: 40014000 .word 0x40014000
  37893. 08010378 <TIM_TI1_ConfigInputStage>:
  37894. * @param TIM_ICFilter Specifies the Input Capture Filter.
  37895. * This parameter must be a value between 0x00 and 0x0F.
  37896. * @retval None
  37897. */
  37898. static void TIM_TI1_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter)
  37899. {
  37900. 8010378: b480 push {r7}
  37901. 801037a: b087 sub sp, #28
  37902. 801037c: af00 add r7, sp, #0
  37903. 801037e: 60f8 str r0, [r7, #12]
  37904. 8010380: 60b9 str r1, [r7, #8]
  37905. 8010382: 607a str r2, [r7, #4]
  37906. uint32_t tmpccmr1;
  37907. uint32_t tmpccer;
  37908. /* Disable the Channel 1: Reset the CC1E Bit */
  37909. tmpccer = TIMx->CCER;
  37910. 8010384: 68fb ldr r3, [r7, #12]
  37911. 8010386: 6a1b ldr r3, [r3, #32]
  37912. 8010388: 617b str r3, [r7, #20]
  37913. TIMx->CCER &= ~TIM_CCER_CC1E;
  37914. 801038a: 68fb ldr r3, [r7, #12]
  37915. 801038c: 6a1b ldr r3, [r3, #32]
  37916. 801038e: f023 0201 bic.w r2, r3, #1
  37917. 8010392: 68fb ldr r3, [r7, #12]
  37918. 8010394: 621a str r2, [r3, #32]
  37919. tmpccmr1 = TIMx->CCMR1;
  37920. 8010396: 68fb ldr r3, [r7, #12]
  37921. 8010398: 699b ldr r3, [r3, #24]
  37922. 801039a: 613b str r3, [r7, #16]
  37923. /* Set the filter */
  37924. tmpccmr1 &= ~TIM_CCMR1_IC1F;
  37925. 801039c: 693b ldr r3, [r7, #16]
  37926. 801039e: f023 03f0 bic.w r3, r3, #240 @ 0xf0
  37927. 80103a2: 613b str r3, [r7, #16]
  37928. tmpccmr1 |= (TIM_ICFilter << 4U);
  37929. 80103a4: 687b ldr r3, [r7, #4]
  37930. 80103a6: 011b lsls r3, r3, #4
  37931. 80103a8: 693a ldr r2, [r7, #16]
  37932. 80103aa: 4313 orrs r3, r2
  37933. 80103ac: 613b str r3, [r7, #16]
  37934. /* Select the Polarity and set the CC1E Bit */
  37935. tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP);
  37936. 80103ae: 697b ldr r3, [r7, #20]
  37937. 80103b0: f023 030a bic.w r3, r3, #10
  37938. 80103b4: 617b str r3, [r7, #20]
  37939. tmpccer |= TIM_ICPolarity;
  37940. 80103b6: 697a ldr r2, [r7, #20]
  37941. 80103b8: 68bb ldr r3, [r7, #8]
  37942. 80103ba: 4313 orrs r3, r2
  37943. 80103bc: 617b str r3, [r7, #20]
  37944. /* Write to TIMx CCMR1 and CCER registers */
  37945. TIMx->CCMR1 = tmpccmr1;
  37946. 80103be: 68fb ldr r3, [r7, #12]
  37947. 80103c0: 693a ldr r2, [r7, #16]
  37948. 80103c2: 619a str r2, [r3, #24]
  37949. TIMx->CCER = tmpccer;
  37950. 80103c4: 68fb ldr r3, [r7, #12]
  37951. 80103c6: 697a ldr r2, [r7, #20]
  37952. 80103c8: 621a str r2, [r3, #32]
  37953. }
  37954. 80103ca: bf00 nop
  37955. 80103cc: 371c adds r7, #28
  37956. 80103ce: 46bd mov sp, r7
  37957. 80103d0: f85d 7b04 ldr.w r7, [sp], #4
  37958. 80103d4: 4770 bx lr
  37959. 080103d6 <TIM_TI2_SetConfig>:
  37960. * (on channel1 path) is used as the input signal. Therefore CCMR1 must be
  37961. * protected against un-initialized filter and polarity values.
  37962. */
  37963. static void TIM_TI2_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection,
  37964. uint32_t TIM_ICFilter)
  37965. {
  37966. 80103d6: b480 push {r7}
  37967. 80103d8: b087 sub sp, #28
  37968. 80103da: af00 add r7, sp, #0
  37969. 80103dc: 60f8 str r0, [r7, #12]
  37970. 80103de: 60b9 str r1, [r7, #8]
  37971. 80103e0: 607a str r2, [r7, #4]
  37972. 80103e2: 603b str r3, [r7, #0]
  37973. uint32_t tmpccmr1;
  37974. uint32_t tmpccer;
  37975. /* Disable the Channel 2: Reset the CC2E Bit */
  37976. tmpccer = TIMx->CCER;
  37977. 80103e4: 68fb ldr r3, [r7, #12]
  37978. 80103e6: 6a1b ldr r3, [r3, #32]
  37979. 80103e8: 617b str r3, [r7, #20]
  37980. TIMx->CCER &= ~TIM_CCER_CC2E;
  37981. 80103ea: 68fb ldr r3, [r7, #12]
  37982. 80103ec: 6a1b ldr r3, [r3, #32]
  37983. 80103ee: f023 0210 bic.w r2, r3, #16
  37984. 80103f2: 68fb ldr r3, [r7, #12]
  37985. 80103f4: 621a str r2, [r3, #32]
  37986. tmpccmr1 = TIMx->CCMR1;
  37987. 80103f6: 68fb ldr r3, [r7, #12]
  37988. 80103f8: 699b ldr r3, [r3, #24]
  37989. 80103fa: 613b str r3, [r7, #16]
  37990. /* Select the Input */
  37991. tmpccmr1 &= ~TIM_CCMR1_CC2S;
  37992. 80103fc: 693b ldr r3, [r7, #16]
  37993. 80103fe: f423 7340 bic.w r3, r3, #768 @ 0x300
  37994. 8010402: 613b str r3, [r7, #16]
  37995. tmpccmr1 |= (TIM_ICSelection << 8U);
  37996. 8010404: 687b ldr r3, [r7, #4]
  37997. 8010406: 021b lsls r3, r3, #8
  37998. 8010408: 693a ldr r2, [r7, #16]
  37999. 801040a: 4313 orrs r3, r2
  38000. 801040c: 613b str r3, [r7, #16]
  38001. /* Set the filter */
  38002. tmpccmr1 &= ~TIM_CCMR1_IC2F;
  38003. 801040e: 693b ldr r3, [r7, #16]
  38004. 8010410: f423 4370 bic.w r3, r3, #61440 @ 0xf000
  38005. 8010414: 613b str r3, [r7, #16]
  38006. tmpccmr1 |= ((TIM_ICFilter << 12U) & TIM_CCMR1_IC2F);
  38007. 8010416: 683b ldr r3, [r7, #0]
  38008. 8010418: 031b lsls r3, r3, #12
  38009. 801041a: b29b uxth r3, r3
  38010. 801041c: 693a ldr r2, [r7, #16]
  38011. 801041e: 4313 orrs r3, r2
  38012. 8010420: 613b str r3, [r7, #16]
  38013. /* Select the Polarity and set the CC2E Bit */
  38014. tmpccer &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP);
  38015. 8010422: 697b ldr r3, [r7, #20]
  38016. 8010424: f023 03a0 bic.w r3, r3, #160 @ 0xa0
  38017. 8010428: 617b str r3, [r7, #20]
  38018. tmpccer |= ((TIM_ICPolarity << 4U) & (TIM_CCER_CC2P | TIM_CCER_CC2NP));
  38019. 801042a: 68bb ldr r3, [r7, #8]
  38020. 801042c: 011b lsls r3, r3, #4
  38021. 801042e: f003 03a0 and.w r3, r3, #160 @ 0xa0
  38022. 8010432: 697a ldr r2, [r7, #20]
  38023. 8010434: 4313 orrs r3, r2
  38024. 8010436: 617b str r3, [r7, #20]
  38025. /* Write to TIMx CCMR1 and CCER registers */
  38026. TIMx->CCMR1 = tmpccmr1 ;
  38027. 8010438: 68fb ldr r3, [r7, #12]
  38028. 801043a: 693a ldr r2, [r7, #16]
  38029. 801043c: 619a str r2, [r3, #24]
  38030. TIMx->CCER = tmpccer;
  38031. 801043e: 68fb ldr r3, [r7, #12]
  38032. 8010440: 697a ldr r2, [r7, #20]
  38033. 8010442: 621a str r2, [r3, #32]
  38034. }
  38035. 8010444: bf00 nop
  38036. 8010446: 371c adds r7, #28
  38037. 8010448: 46bd mov sp, r7
  38038. 801044a: f85d 7b04 ldr.w r7, [sp], #4
  38039. 801044e: 4770 bx lr
  38040. 08010450 <TIM_TI2_ConfigInputStage>:
  38041. * @param TIM_ICFilter Specifies the Input Capture Filter.
  38042. * This parameter must be a value between 0x00 and 0x0F.
  38043. * @retval None
  38044. */
  38045. static void TIM_TI2_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter)
  38046. {
  38047. 8010450: b480 push {r7}
  38048. 8010452: b087 sub sp, #28
  38049. 8010454: af00 add r7, sp, #0
  38050. 8010456: 60f8 str r0, [r7, #12]
  38051. 8010458: 60b9 str r1, [r7, #8]
  38052. 801045a: 607a str r2, [r7, #4]
  38053. uint32_t tmpccmr1;
  38054. uint32_t tmpccer;
  38055. /* Disable the Channel 2: Reset the CC2E Bit */
  38056. tmpccer = TIMx->CCER;
  38057. 801045c: 68fb ldr r3, [r7, #12]
  38058. 801045e: 6a1b ldr r3, [r3, #32]
  38059. 8010460: 617b str r3, [r7, #20]
  38060. TIMx->CCER &= ~TIM_CCER_CC2E;
  38061. 8010462: 68fb ldr r3, [r7, #12]
  38062. 8010464: 6a1b ldr r3, [r3, #32]
  38063. 8010466: f023 0210 bic.w r2, r3, #16
  38064. 801046a: 68fb ldr r3, [r7, #12]
  38065. 801046c: 621a str r2, [r3, #32]
  38066. tmpccmr1 = TIMx->CCMR1;
  38067. 801046e: 68fb ldr r3, [r7, #12]
  38068. 8010470: 699b ldr r3, [r3, #24]
  38069. 8010472: 613b str r3, [r7, #16]
  38070. /* Set the filter */
  38071. tmpccmr1 &= ~TIM_CCMR1_IC2F;
  38072. 8010474: 693b ldr r3, [r7, #16]
  38073. 8010476: f423 4370 bic.w r3, r3, #61440 @ 0xf000
  38074. 801047a: 613b str r3, [r7, #16]
  38075. tmpccmr1 |= (TIM_ICFilter << 12U);
  38076. 801047c: 687b ldr r3, [r7, #4]
  38077. 801047e: 031b lsls r3, r3, #12
  38078. 8010480: 693a ldr r2, [r7, #16]
  38079. 8010482: 4313 orrs r3, r2
  38080. 8010484: 613b str r3, [r7, #16]
  38081. /* Select the Polarity and set the CC2E Bit */
  38082. tmpccer &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP);
  38083. 8010486: 697b ldr r3, [r7, #20]
  38084. 8010488: f023 03a0 bic.w r3, r3, #160 @ 0xa0
  38085. 801048c: 617b str r3, [r7, #20]
  38086. tmpccer |= (TIM_ICPolarity << 4U);
  38087. 801048e: 68bb ldr r3, [r7, #8]
  38088. 8010490: 011b lsls r3, r3, #4
  38089. 8010492: 697a ldr r2, [r7, #20]
  38090. 8010494: 4313 orrs r3, r2
  38091. 8010496: 617b str r3, [r7, #20]
  38092. /* Write to TIMx CCMR1 and CCER registers */
  38093. TIMx->CCMR1 = tmpccmr1 ;
  38094. 8010498: 68fb ldr r3, [r7, #12]
  38095. 801049a: 693a ldr r2, [r7, #16]
  38096. 801049c: 619a str r2, [r3, #24]
  38097. TIMx->CCER = tmpccer;
  38098. 801049e: 68fb ldr r3, [r7, #12]
  38099. 80104a0: 697a ldr r2, [r7, #20]
  38100. 80104a2: 621a str r2, [r3, #32]
  38101. }
  38102. 80104a4: bf00 nop
  38103. 80104a6: 371c adds r7, #28
  38104. 80104a8: 46bd mov sp, r7
  38105. 80104aa: f85d 7b04 ldr.w r7, [sp], #4
  38106. 80104ae: 4770 bx lr
  38107. 080104b0 <TIM_TI3_SetConfig>:
  38108. * (on channel1 path) is used as the input signal. Therefore CCMR2 must be
  38109. * protected against un-initialized filter and polarity values.
  38110. */
  38111. static void TIM_TI3_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection,
  38112. uint32_t TIM_ICFilter)
  38113. {
  38114. 80104b0: b480 push {r7}
  38115. 80104b2: b087 sub sp, #28
  38116. 80104b4: af00 add r7, sp, #0
  38117. 80104b6: 60f8 str r0, [r7, #12]
  38118. 80104b8: 60b9 str r1, [r7, #8]
  38119. 80104ba: 607a str r2, [r7, #4]
  38120. 80104bc: 603b str r3, [r7, #0]
  38121. uint32_t tmpccmr2;
  38122. uint32_t tmpccer;
  38123. /* Disable the Channel 3: Reset the CC3E Bit */
  38124. tmpccer = TIMx->CCER;
  38125. 80104be: 68fb ldr r3, [r7, #12]
  38126. 80104c0: 6a1b ldr r3, [r3, #32]
  38127. 80104c2: 617b str r3, [r7, #20]
  38128. TIMx->CCER &= ~TIM_CCER_CC3E;
  38129. 80104c4: 68fb ldr r3, [r7, #12]
  38130. 80104c6: 6a1b ldr r3, [r3, #32]
  38131. 80104c8: f423 7280 bic.w r2, r3, #256 @ 0x100
  38132. 80104cc: 68fb ldr r3, [r7, #12]
  38133. 80104ce: 621a str r2, [r3, #32]
  38134. tmpccmr2 = TIMx->CCMR2;
  38135. 80104d0: 68fb ldr r3, [r7, #12]
  38136. 80104d2: 69db ldr r3, [r3, #28]
  38137. 80104d4: 613b str r3, [r7, #16]
  38138. /* Select the Input */
  38139. tmpccmr2 &= ~TIM_CCMR2_CC3S;
  38140. 80104d6: 693b ldr r3, [r7, #16]
  38141. 80104d8: f023 0303 bic.w r3, r3, #3
  38142. 80104dc: 613b str r3, [r7, #16]
  38143. tmpccmr2 |= TIM_ICSelection;
  38144. 80104de: 693a ldr r2, [r7, #16]
  38145. 80104e0: 687b ldr r3, [r7, #4]
  38146. 80104e2: 4313 orrs r3, r2
  38147. 80104e4: 613b str r3, [r7, #16]
  38148. /* Set the filter */
  38149. tmpccmr2 &= ~TIM_CCMR2_IC3F;
  38150. 80104e6: 693b ldr r3, [r7, #16]
  38151. 80104e8: f023 03f0 bic.w r3, r3, #240 @ 0xf0
  38152. 80104ec: 613b str r3, [r7, #16]
  38153. tmpccmr2 |= ((TIM_ICFilter << 4U) & TIM_CCMR2_IC3F);
  38154. 80104ee: 683b ldr r3, [r7, #0]
  38155. 80104f0: 011b lsls r3, r3, #4
  38156. 80104f2: b2db uxtb r3, r3
  38157. 80104f4: 693a ldr r2, [r7, #16]
  38158. 80104f6: 4313 orrs r3, r2
  38159. 80104f8: 613b str r3, [r7, #16]
  38160. /* Select the Polarity and set the CC3E Bit */
  38161. tmpccer &= ~(TIM_CCER_CC3P | TIM_CCER_CC3NP);
  38162. 80104fa: 697b ldr r3, [r7, #20]
  38163. 80104fc: f423 6320 bic.w r3, r3, #2560 @ 0xa00
  38164. 8010500: 617b str r3, [r7, #20]
  38165. tmpccer |= ((TIM_ICPolarity << 8U) & (TIM_CCER_CC3P | TIM_CCER_CC3NP));
  38166. 8010502: 68bb ldr r3, [r7, #8]
  38167. 8010504: 021b lsls r3, r3, #8
  38168. 8010506: f403 6320 and.w r3, r3, #2560 @ 0xa00
  38169. 801050a: 697a ldr r2, [r7, #20]
  38170. 801050c: 4313 orrs r3, r2
  38171. 801050e: 617b str r3, [r7, #20]
  38172. /* Write to TIMx CCMR2 and CCER registers */
  38173. TIMx->CCMR2 = tmpccmr2;
  38174. 8010510: 68fb ldr r3, [r7, #12]
  38175. 8010512: 693a ldr r2, [r7, #16]
  38176. 8010514: 61da str r2, [r3, #28]
  38177. TIMx->CCER = tmpccer;
  38178. 8010516: 68fb ldr r3, [r7, #12]
  38179. 8010518: 697a ldr r2, [r7, #20]
  38180. 801051a: 621a str r2, [r3, #32]
  38181. }
  38182. 801051c: bf00 nop
  38183. 801051e: 371c adds r7, #28
  38184. 8010520: 46bd mov sp, r7
  38185. 8010522: f85d 7b04 ldr.w r7, [sp], #4
  38186. 8010526: 4770 bx lr
  38187. 08010528 <TIM_TI4_SetConfig>:
  38188. * protected against un-initialized filter and polarity values.
  38189. * @retval None
  38190. */
  38191. static void TIM_TI4_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection,
  38192. uint32_t TIM_ICFilter)
  38193. {
  38194. 8010528: b480 push {r7}
  38195. 801052a: b087 sub sp, #28
  38196. 801052c: af00 add r7, sp, #0
  38197. 801052e: 60f8 str r0, [r7, #12]
  38198. 8010530: 60b9 str r1, [r7, #8]
  38199. 8010532: 607a str r2, [r7, #4]
  38200. 8010534: 603b str r3, [r7, #0]
  38201. uint32_t tmpccmr2;
  38202. uint32_t tmpccer;
  38203. /* Disable the Channel 4: Reset the CC4E Bit */
  38204. tmpccer = TIMx->CCER;
  38205. 8010536: 68fb ldr r3, [r7, #12]
  38206. 8010538: 6a1b ldr r3, [r3, #32]
  38207. 801053a: 617b str r3, [r7, #20]
  38208. TIMx->CCER &= ~TIM_CCER_CC4E;
  38209. 801053c: 68fb ldr r3, [r7, #12]
  38210. 801053e: 6a1b ldr r3, [r3, #32]
  38211. 8010540: f423 5280 bic.w r2, r3, #4096 @ 0x1000
  38212. 8010544: 68fb ldr r3, [r7, #12]
  38213. 8010546: 621a str r2, [r3, #32]
  38214. tmpccmr2 = TIMx->CCMR2;
  38215. 8010548: 68fb ldr r3, [r7, #12]
  38216. 801054a: 69db ldr r3, [r3, #28]
  38217. 801054c: 613b str r3, [r7, #16]
  38218. /* Select the Input */
  38219. tmpccmr2 &= ~TIM_CCMR2_CC4S;
  38220. 801054e: 693b ldr r3, [r7, #16]
  38221. 8010550: f423 7340 bic.w r3, r3, #768 @ 0x300
  38222. 8010554: 613b str r3, [r7, #16]
  38223. tmpccmr2 |= (TIM_ICSelection << 8U);
  38224. 8010556: 687b ldr r3, [r7, #4]
  38225. 8010558: 021b lsls r3, r3, #8
  38226. 801055a: 693a ldr r2, [r7, #16]
  38227. 801055c: 4313 orrs r3, r2
  38228. 801055e: 613b str r3, [r7, #16]
  38229. /* Set the filter */
  38230. tmpccmr2 &= ~TIM_CCMR2_IC4F;
  38231. 8010560: 693b ldr r3, [r7, #16]
  38232. 8010562: f423 4370 bic.w r3, r3, #61440 @ 0xf000
  38233. 8010566: 613b str r3, [r7, #16]
  38234. tmpccmr2 |= ((TIM_ICFilter << 12U) & TIM_CCMR2_IC4F);
  38235. 8010568: 683b ldr r3, [r7, #0]
  38236. 801056a: 031b lsls r3, r3, #12
  38237. 801056c: b29b uxth r3, r3
  38238. 801056e: 693a ldr r2, [r7, #16]
  38239. 8010570: 4313 orrs r3, r2
  38240. 8010572: 613b str r3, [r7, #16]
  38241. /* Select the Polarity and set the CC4E Bit */
  38242. tmpccer &= ~(TIM_CCER_CC4P | TIM_CCER_CC4NP);
  38243. 8010574: 697b ldr r3, [r7, #20]
  38244. 8010576: f423 4320 bic.w r3, r3, #40960 @ 0xa000
  38245. 801057a: 617b str r3, [r7, #20]
  38246. tmpccer |= ((TIM_ICPolarity << 12U) & (TIM_CCER_CC4P | TIM_CCER_CC4NP));
  38247. 801057c: 68bb ldr r3, [r7, #8]
  38248. 801057e: 031b lsls r3, r3, #12
  38249. 8010580: f403 4320 and.w r3, r3, #40960 @ 0xa000
  38250. 8010584: 697a ldr r2, [r7, #20]
  38251. 8010586: 4313 orrs r3, r2
  38252. 8010588: 617b str r3, [r7, #20]
  38253. /* Write to TIMx CCMR2 and CCER registers */
  38254. TIMx->CCMR2 = tmpccmr2;
  38255. 801058a: 68fb ldr r3, [r7, #12]
  38256. 801058c: 693a ldr r2, [r7, #16]
  38257. 801058e: 61da str r2, [r3, #28]
  38258. TIMx->CCER = tmpccer ;
  38259. 8010590: 68fb ldr r3, [r7, #12]
  38260. 8010592: 697a ldr r2, [r7, #20]
  38261. 8010594: 621a str r2, [r3, #32]
  38262. }
  38263. 8010596: bf00 nop
  38264. 8010598: 371c adds r7, #28
  38265. 801059a: 46bd mov sp, r7
  38266. 801059c: f85d 7b04 ldr.w r7, [sp], #4
  38267. 80105a0: 4770 bx lr
  38268. ...
  38269. 080105a4 <TIM_ITRx_SetConfig>:
  38270. * (*) Value not defined in all devices.
  38271. *
  38272. * @retval None
  38273. */
  38274. static void TIM_ITRx_SetConfig(TIM_TypeDef *TIMx, uint32_t InputTriggerSource)
  38275. {
  38276. 80105a4: b480 push {r7}
  38277. 80105a6: b085 sub sp, #20
  38278. 80105a8: af00 add r7, sp, #0
  38279. 80105aa: 6078 str r0, [r7, #4]
  38280. 80105ac: 6039 str r1, [r7, #0]
  38281. uint32_t tmpsmcr;
  38282. /* Get the TIMx SMCR register value */
  38283. tmpsmcr = TIMx->SMCR;
  38284. 80105ae: 687b ldr r3, [r7, #4]
  38285. 80105b0: 689b ldr r3, [r3, #8]
  38286. 80105b2: 60fb str r3, [r7, #12]
  38287. /* Reset the TS Bits */
  38288. tmpsmcr &= ~TIM_SMCR_TS;
  38289. 80105b4: 68fa ldr r2, [r7, #12]
  38290. 80105b6: 4b09 ldr r3, [pc, #36] @ (80105dc <TIM_ITRx_SetConfig+0x38>)
  38291. 80105b8: 4013 ands r3, r2
  38292. 80105ba: 60fb str r3, [r7, #12]
  38293. /* Set the Input Trigger source and the slave mode*/
  38294. tmpsmcr |= (InputTriggerSource | TIM_SLAVEMODE_EXTERNAL1);
  38295. 80105bc: 683a ldr r2, [r7, #0]
  38296. 80105be: 68fb ldr r3, [r7, #12]
  38297. 80105c0: 4313 orrs r3, r2
  38298. 80105c2: f043 0307 orr.w r3, r3, #7
  38299. 80105c6: 60fb str r3, [r7, #12]
  38300. /* Write to TIMx SMCR */
  38301. TIMx->SMCR = tmpsmcr;
  38302. 80105c8: 687b ldr r3, [r7, #4]
  38303. 80105ca: 68fa ldr r2, [r7, #12]
  38304. 80105cc: 609a str r2, [r3, #8]
  38305. }
  38306. 80105ce: bf00 nop
  38307. 80105d0: 3714 adds r7, #20
  38308. 80105d2: 46bd mov sp, r7
  38309. 80105d4: f85d 7b04 ldr.w r7, [sp], #4
  38310. 80105d8: 4770 bx lr
  38311. 80105da: bf00 nop
  38312. 80105dc: ffcfff8f .word 0xffcfff8f
  38313. 080105e0 <TIM_ETR_SetConfig>:
  38314. * This parameter must be a value between 0x00 and 0x0F
  38315. * @retval None
  38316. */
  38317. void TIM_ETR_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ExtTRGPrescaler,
  38318. uint32_t TIM_ExtTRGPolarity, uint32_t ExtTRGFilter)
  38319. {
  38320. 80105e0: b480 push {r7}
  38321. 80105e2: b087 sub sp, #28
  38322. 80105e4: af00 add r7, sp, #0
  38323. 80105e6: 60f8 str r0, [r7, #12]
  38324. 80105e8: 60b9 str r1, [r7, #8]
  38325. 80105ea: 607a str r2, [r7, #4]
  38326. 80105ec: 603b str r3, [r7, #0]
  38327. uint32_t tmpsmcr;
  38328. tmpsmcr = TIMx->SMCR;
  38329. 80105ee: 68fb ldr r3, [r7, #12]
  38330. 80105f0: 689b ldr r3, [r3, #8]
  38331. 80105f2: 617b str r3, [r7, #20]
  38332. /* Reset the ETR Bits */
  38333. tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP);
  38334. 80105f4: 697b ldr r3, [r7, #20]
  38335. 80105f6: f423 437f bic.w r3, r3, #65280 @ 0xff00
  38336. 80105fa: 617b str r3, [r7, #20]
  38337. /* Set the Prescaler, the Filter value and the Polarity */
  38338. tmpsmcr |= (uint32_t)(TIM_ExtTRGPrescaler | (TIM_ExtTRGPolarity | (ExtTRGFilter << 8U)));
  38339. 80105fc: 683b ldr r3, [r7, #0]
  38340. 80105fe: 021a lsls r2, r3, #8
  38341. 8010600: 687b ldr r3, [r7, #4]
  38342. 8010602: 431a orrs r2, r3
  38343. 8010604: 68bb ldr r3, [r7, #8]
  38344. 8010606: 4313 orrs r3, r2
  38345. 8010608: 697a ldr r2, [r7, #20]
  38346. 801060a: 4313 orrs r3, r2
  38347. 801060c: 617b str r3, [r7, #20]
  38348. /* Write to TIMx SMCR */
  38349. TIMx->SMCR = tmpsmcr;
  38350. 801060e: 68fb ldr r3, [r7, #12]
  38351. 8010610: 697a ldr r2, [r7, #20]
  38352. 8010612: 609a str r2, [r3, #8]
  38353. }
  38354. 8010614: bf00 nop
  38355. 8010616: 371c adds r7, #28
  38356. 8010618: 46bd mov sp, r7
  38357. 801061a: f85d 7b04 ldr.w r7, [sp], #4
  38358. 801061e: 4770 bx lr
  38359. 08010620 <TIM_CCxChannelCmd>:
  38360. * @param ChannelState specifies the TIM Channel CCxE bit new state.
  38361. * This parameter can be: TIM_CCx_ENABLE or TIM_CCx_DISABLE.
  38362. * @retval None
  38363. */
  38364. void TIM_CCxChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelState)
  38365. {
  38366. 8010620: b480 push {r7}
  38367. 8010622: b087 sub sp, #28
  38368. 8010624: af00 add r7, sp, #0
  38369. 8010626: 60f8 str r0, [r7, #12]
  38370. 8010628: 60b9 str r1, [r7, #8]
  38371. 801062a: 607a str r2, [r7, #4]
  38372. /* Check the parameters */
  38373. assert_param(IS_TIM_CC1_INSTANCE(TIMx));
  38374. assert_param(IS_TIM_CHANNELS(Channel));
  38375. tmp = TIM_CCER_CC1E << (Channel & 0x1FU); /* 0x1FU = 31 bits max shift */
  38376. 801062c: 68bb ldr r3, [r7, #8]
  38377. 801062e: f003 031f and.w r3, r3, #31
  38378. 8010632: 2201 movs r2, #1
  38379. 8010634: fa02 f303 lsl.w r3, r2, r3
  38380. 8010638: 617b str r3, [r7, #20]
  38381. /* Reset the CCxE Bit */
  38382. TIMx->CCER &= ~tmp;
  38383. 801063a: 68fb ldr r3, [r7, #12]
  38384. 801063c: 6a1a ldr r2, [r3, #32]
  38385. 801063e: 697b ldr r3, [r7, #20]
  38386. 8010640: 43db mvns r3, r3
  38387. 8010642: 401a ands r2, r3
  38388. 8010644: 68fb ldr r3, [r7, #12]
  38389. 8010646: 621a str r2, [r3, #32]
  38390. /* Set or reset the CCxE Bit */
  38391. TIMx->CCER |= (uint32_t)(ChannelState << (Channel & 0x1FU)); /* 0x1FU = 31 bits max shift */
  38392. 8010648: 68fb ldr r3, [r7, #12]
  38393. 801064a: 6a1a ldr r2, [r3, #32]
  38394. 801064c: 68bb ldr r3, [r7, #8]
  38395. 801064e: f003 031f and.w r3, r3, #31
  38396. 8010652: 6879 ldr r1, [r7, #4]
  38397. 8010654: fa01 f303 lsl.w r3, r1, r3
  38398. 8010658: 431a orrs r2, r3
  38399. 801065a: 68fb ldr r3, [r7, #12]
  38400. 801065c: 621a str r2, [r3, #32]
  38401. }
  38402. 801065e: bf00 nop
  38403. 8010660: 371c adds r7, #28
  38404. 8010662: 46bd mov sp, r7
  38405. 8010664: f85d 7b04 ldr.w r7, [sp], #4
  38406. 8010668: 4770 bx lr
  38407. ...
  38408. 0801066c <HAL_TIMEx_MasterConfigSynchronization>:
  38409. * mode.
  38410. * @retval HAL status
  38411. */
  38412. HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
  38413. const TIM_MasterConfigTypeDef *sMasterConfig)
  38414. {
  38415. 801066c: b480 push {r7}
  38416. 801066e: b085 sub sp, #20
  38417. 8010670: af00 add r7, sp, #0
  38418. 8010672: 6078 str r0, [r7, #4]
  38419. 8010674: 6039 str r1, [r7, #0]
  38420. assert_param(IS_TIM_MASTER_INSTANCE(htim->Instance));
  38421. assert_param(IS_TIM_TRGO_SOURCE(sMasterConfig->MasterOutputTrigger));
  38422. assert_param(IS_TIM_MSM_STATE(sMasterConfig->MasterSlaveMode));
  38423. /* Check input state */
  38424. __HAL_LOCK(htim);
  38425. 8010676: 687b ldr r3, [r7, #4]
  38426. 8010678: f893 303c ldrb.w r3, [r3, #60] @ 0x3c
  38427. 801067c: 2b01 cmp r3, #1
  38428. 801067e: d101 bne.n 8010684 <HAL_TIMEx_MasterConfigSynchronization+0x18>
  38429. 8010680: 2302 movs r3, #2
  38430. 8010682: e06d b.n 8010760 <HAL_TIMEx_MasterConfigSynchronization+0xf4>
  38431. 8010684: 687b ldr r3, [r7, #4]
  38432. 8010686: 2201 movs r2, #1
  38433. 8010688: f883 203c strb.w r2, [r3, #60] @ 0x3c
  38434. /* Change the handler state */
  38435. htim->State = HAL_TIM_STATE_BUSY;
  38436. 801068c: 687b ldr r3, [r7, #4]
  38437. 801068e: 2202 movs r2, #2
  38438. 8010690: f883 203d strb.w r2, [r3, #61] @ 0x3d
  38439. /* Get the TIMx CR2 register value */
  38440. tmpcr2 = htim->Instance->CR2;
  38441. 8010694: 687b ldr r3, [r7, #4]
  38442. 8010696: 681b ldr r3, [r3, #0]
  38443. 8010698: 685b ldr r3, [r3, #4]
  38444. 801069a: 60fb str r3, [r7, #12]
  38445. /* Get the TIMx SMCR register value */
  38446. tmpsmcr = htim->Instance->SMCR;
  38447. 801069c: 687b ldr r3, [r7, #4]
  38448. 801069e: 681b ldr r3, [r3, #0]
  38449. 80106a0: 689b ldr r3, [r3, #8]
  38450. 80106a2: 60bb str r3, [r7, #8]
  38451. /* If the timer supports ADC synchronization through TRGO2, set the master mode selection 2 */
  38452. if (IS_TIM_TRGO2_INSTANCE(htim->Instance))
  38453. 80106a4: 687b ldr r3, [r7, #4]
  38454. 80106a6: 681b ldr r3, [r3, #0]
  38455. 80106a8: 4a30 ldr r2, [pc, #192] @ (801076c <HAL_TIMEx_MasterConfigSynchronization+0x100>)
  38456. 80106aa: 4293 cmp r3, r2
  38457. 80106ac: d004 beq.n 80106b8 <HAL_TIMEx_MasterConfigSynchronization+0x4c>
  38458. 80106ae: 687b ldr r3, [r7, #4]
  38459. 80106b0: 681b ldr r3, [r3, #0]
  38460. 80106b2: 4a2f ldr r2, [pc, #188] @ (8010770 <HAL_TIMEx_MasterConfigSynchronization+0x104>)
  38461. 80106b4: 4293 cmp r3, r2
  38462. 80106b6: d108 bne.n 80106ca <HAL_TIMEx_MasterConfigSynchronization+0x5e>
  38463. {
  38464. /* Check the parameters */
  38465. assert_param(IS_TIM_TRGO2_SOURCE(sMasterConfig->MasterOutputTrigger2));
  38466. /* Clear the MMS2 bits */
  38467. tmpcr2 &= ~TIM_CR2_MMS2;
  38468. 80106b8: 68fb ldr r3, [r7, #12]
  38469. 80106ba: f423 0370 bic.w r3, r3, #15728640 @ 0xf00000
  38470. 80106be: 60fb str r3, [r7, #12]
  38471. /* Select the TRGO2 source*/
  38472. tmpcr2 |= sMasterConfig->MasterOutputTrigger2;
  38473. 80106c0: 683b ldr r3, [r7, #0]
  38474. 80106c2: 685b ldr r3, [r3, #4]
  38475. 80106c4: 68fa ldr r2, [r7, #12]
  38476. 80106c6: 4313 orrs r3, r2
  38477. 80106c8: 60fb str r3, [r7, #12]
  38478. }
  38479. /* Reset the MMS Bits */
  38480. tmpcr2 &= ~TIM_CR2_MMS;
  38481. 80106ca: 68fb ldr r3, [r7, #12]
  38482. 80106cc: f023 0370 bic.w r3, r3, #112 @ 0x70
  38483. 80106d0: 60fb str r3, [r7, #12]
  38484. /* Select the TRGO source */
  38485. tmpcr2 |= sMasterConfig->MasterOutputTrigger;
  38486. 80106d2: 683b ldr r3, [r7, #0]
  38487. 80106d4: 681b ldr r3, [r3, #0]
  38488. 80106d6: 68fa ldr r2, [r7, #12]
  38489. 80106d8: 4313 orrs r3, r2
  38490. 80106da: 60fb str r3, [r7, #12]
  38491. /* Update TIMx CR2 */
  38492. htim->Instance->CR2 = tmpcr2;
  38493. 80106dc: 687b ldr r3, [r7, #4]
  38494. 80106de: 681b ldr r3, [r3, #0]
  38495. 80106e0: 68fa ldr r2, [r7, #12]
  38496. 80106e2: 605a str r2, [r3, #4]
  38497. if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
  38498. 80106e4: 687b ldr r3, [r7, #4]
  38499. 80106e6: 681b ldr r3, [r3, #0]
  38500. 80106e8: 4a20 ldr r2, [pc, #128] @ (801076c <HAL_TIMEx_MasterConfigSynchronization+0x100>)
  38501. 80106ea: 4293 cmp r3, r2
  38502. 80106ec: d022 beq.n 8010734 <HAL_TIMEx_MasterConfigSynchronization+0xc8>
  38503. 80106ee: 687b ldr r3, [r7, #4]
  38504. 80106f0: 681b ldr r3, [r3, #0]
  38505. 80106f2: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  38506. 80106f6: d01d beq.n 8010734 <HAL_TIMEx_MasterConfigSynchronization+0xc8>
  38507. 80106f8: 687b ldr r3, [r7, #4]
  38508. 80106fa: 681b ldr r3, [r3, #0]
  38509. 80106fc: 4a1d ldr r2, [pc, #116] @ (8010774 <HAL_TIMEx_MasterConfigSynchronization+0x108>)
  38510. 80106fe: 4293 cmp r3, r2
  38511. 8010700: d018 beq.n 8010734 <HAL_TIMEx_MasterConfigSynchronization+0xc8>
  38512. 8010702: 687b ldr r3, [r7, #4]
  38513. 8010704: 681b ldr r3, [r3, #0]
  38514. 8010706: 4a1c ldr r2, [pc, #112] @ (8010778 <HAL_TIMEx_MasterConfigSynchronization+0x10c>)
  38515. 8010708: 4293 cmp r3, r2
  38516. 801070a: d013 beq.n 8010734 <HAL_TIMEx_MasterConfigSynchronization+0xc8>
  38517. 801070c: 687b ldr r3, [r7, #4]
  38518. 801070e: 681b ldr r3, [r3, #0]
  38519. 8010710: 4a1a ldr r2, [pc, #104] @ (801077c <HAL_TIMEx_MasterConfigSynchronization+0x110>)
  38520. 8010712: 4293 cmp r3, r2
  38521. 8010714: d00e beq.n 8010734 <HAL_TIMEx_MasterConfigSynchronization+0xc8>
  38522. 8010716: 687b ldr r3, [r7, #4]
  38523. 8010718: 681b ldr r3, [r3, #0]
  38524. 801071a: 4a15 ldr r2, [pc, #84] @ (8010770 <HAL_TIMEx_MasterConfigSynchronization+0x104>)
  38525. 801071c: 4293 cmp r3, r2
  38526. 801071e: d009 beq.n 8010734 <HAL_TIMEx_MasterConfigSynchronization+0xc8>
  38527. 8010720: 687b ldr r3, [r7, #4]
  38528. 8010722: 681b ldr r3, [r3, #0]
  38529. 8010724: 4a16 ldr r2, [pc, #88] @ (8010780 <HAL_TIMEx_MasterConfigSynchronization+0x114>)
  38530. 8010726: 4293 cmp r3, r2
  38531. 8010728: d004 beq.n 8010734 <HAL_TIMEx_MasterConfigSynchronization+0xc8>
  38532. 801072a: 687b ldr r3, [r7, #4]
  38533. 801072c: 681b ldr r3, [r3, #0]
  38534. 801072e: 4a15 ldr r2, [pc, #84] @ (8010784 <HAL_TIMEx_MasterConfigSynchronization+0x118>)
  38535. 8010730: 4293 cmp r3, r2
  38536. 8010732: d10c bne.n 801074e <HAL_TIMEx_MasterConfigSynchronization+0xe2>
  38537. {
  38538. /* Reset the MSM Bit */
  38539. tmpsmcr &= ~TIM_SMCR_MSM;
  38540. 8010734: 68bb ldr r3, [r7, #8]
  38541. 8010736: f023 0380 bic.w r3, r3, #128 @ 0x80
  38542. 801073a: 60bb str r3, [r7, #8]
  38543. /* Set master mode */
  38544. tmpsmcr |= sMasterConfig->MasterSlaveMode;
  38545. 801073c: 683b ldr r3, [r7, #0]
  38546. 801073e: 689b ldr r3, [r3, #8]
  38547. 8010740: 68ba ldr r2, [r7, #8]
  38548. 8010742: 4313 orrs r3, r2
  38549. 8010744: 60bb str r3, [r7, #8]
  38550. /* Update TIMx SMCR */
  38551. htim->Instance->SMCR = tmpsmcr;
  38552. 8010746: 687b ldr r3, [r7, #4]
  38553. 8010748: 681b ldr r3, [r3, #0]
  38554. 801074a: 68ba ldr r2, [r7, #8]
  38555. 801074c: 609a str r2, [r3, #8]
  38556. }
  38557. /* Change the htim state */
  38558. htim->State = HAL_TIM_STATE_READY;
  38559. 801074e: 687b ldr r3, [r7, #4]
  38560. 8010750: 2201 movs r2, #1
  38561. 8010752: f883 203d strb.w r2, [r3, #61] @ 0x3d
  38562. __HAL_UNLOCK(htim);
  38563. 8010756: 687b ldr r3, [r7, #4]
  38564. 8010758: 2200 movs r2, #0
  38565. 801075a: f883 203c strb.w r2, [r3, #60] @ 0x3c
  38566. return HAL_OK;
  38567. 801075e: 2300 movs r3, #0
  38568. }
  38569. 8010760: 4618 mov r0, r3
  38570. 8010762: 3714 adds r7, #20
  38571. 8010764: 46bd mov sp, r7
  38572. 8010766: f85d 7b04 ldr.w r7, [sp], #4
  38573. 801076a: 4770 bx lr
  38574. 801076c: 40010000 .word 0x40010000
  38575. 8010770: 40010400 .word 0x40010400
  38576. 8010774: 40000400 .word 0x40000400
  38577. 8010778: 40000800 .word 0x40000800
  38578. 801077c: 40000c00 .word 0x40000c00
  38579. 8010780: 40001800 .word 0x40001800
  38580. 8010784: 40014000 .word 0x40014000
  38581. 08010788 <HAL_TIMEx_ConfigBreakDeadTime>:
  38582. * interrupt can be enabled by calling the @ref __HAL_TIM_ENABLE_IT macro.
  38583. * @retval HAL status
  38584. */
  38585. HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim,
  38586. const TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig)
  38587. {
  38588. 8010788: b480 push {r7}
  38589. 801078a: b085 sub sp, #20
  38590. 801078c: af00 add r7, sp, #0
  38591. 801078e: 6078 str r0, [r7, #4]
  38592. 8010790: 6039 str r1, [r7, #0]
  38593. /* Keep this variable initialized to 0 as it is used to configure BDTR register */
  38594. uint32_t tmpbdtr = 0U;
  38595. 8010792: 2300 movs r3, #0
  38596. 8010794: 60fb str r3, [r7, #12]
  38597. #if defined(TIM_BDTR_BKBID)
  38598. assert_param(IS_TIM_BREAK_AFMODE(sBreakDeadTimeConfig->BreakAFMode));
  38599. #endif /* TIM_BDTR_BKBID */
  38600. /* Check input state */
  38601. __HAL_LOCK(htim);
  38602. 8010796: 687b ldr r3, [r7, #4]
  38603. 8010798: f893 303c ldrb.w r3, [r3, #60] @ 0x3c
  38604. 801079c: 2b01 cmp r3, #1
  38605. 801079e: d101 bne.n 80107a4 <HAL_TIMEx_ConfigBreakDeadTime+0x1c>
  38606. 80107a0: 2302 movs r3, #2
  38607. 80107a2: e065 b.n 8010870 <HAL_TIMEx_ConfigBreakDeadTime+0xe8>
  38608. 80107a4: 687b ldr r3, [r7, #4]
  38609. 80107a6: 2201 movs r2, #1
  38610. 80107a8: f883 203c strb.w r2, [r3, #60] @ 0x3c
  38611. /* Set the Lock level, the Break enable Bit and the Polarity, the OSSR State,
  38612. the OSSI State, the dead time value and the Automatic Output Enable Bit */
  38613. /* Set the BDTR bits */
  38614. MODIFY_REG(tmpbdtr, TIM_BDTR_DTG, sBreakDeadTimeConfig->DeadTime);
  38615. 80107ac: 68fb ldr r3, [r7, #12]
  38616. 80107ae: f023 02ff bic.w r2, r3, #255 @ 0xff
  38617. 80107b2: 683b ldr r3, [r7, #0]
  38618. 80107b4: 68db ldr r3, [r3, #12]
  38619. 80107b6: 4313 orrs r3, r2
  38620. 80107b8: 60fb str r3, [r7, #12]
  38621. MODIFY_REG(tmpbdtr, TIM_BDTR_LOCK, sBreakDeadTimeConfig->LockLevel);
  38622. 80107ba: 68fb ldr r3, [r7, #12]
  38623. 80107bc: f423 7240 bic.w r2, r3, #768 @ 0x300
  38624. 80107c0: 683b ldr r3, [r7, #0]
  38625. 80107c2: 689b ldr r3, [r3, #8]
  38626. 80107c4: 4313 orrs r3, r2
  38627. 80107c6: 60fb str r3, [r7, #12]
  38628. MODIFY_REG(tmpbdtr, TIM_BDTR_OSSI, sBreakDeadTimeConfig->OffStateIDLEMode);
  38629. 80107c8: 68fb ldr r3, [r7, #12]
  38630. 80107ca: f423 6280 bic.w r2, r3, #1024 @ 0x400
  38631. 80107ce: 683b ldr r3, [r7, #0]
  38632. 80107d0: 685b ldr r3, [r3, #4]
  38633. 80107d2: 4313 orrs r3, r2
  38634. 80107d4: 60fb str r3, [r7, #12]
  38635. MODIFY_REG(tmpbdtr, TIM_BDTR_OSSR, sBreakDeadTimeConfig->OffStateRunMode);
  38636. 80107d6: 68fb ldr r3, [r7, #12]
  38637. 80107d8: f423 6200 bic.w r2, r3, #2048 @ 0x800
  38638. 80107dc: 683b ldr r3, [r7, #0]
  38639. 80107de: 681b ldr r3, [r3, #0]
  38640. 80107e0: 4313 orrs r3, r2
  38641. 80107e2: 60fb str r3, [r7, #12]
  38642. MODIFY_REG(tmpbdtr, TIM_BDTR_BKE, sBreakDeadTimeConfig->BreakState);
  38643. 80107e4: 68fb ldr r3, [r7, #12]
  38644. 80107e6: f423 5280 bic.w r2, r3, #4096 @ 0x1000
  38645. 80107ea: 683b ldr r3, [r7, #0]
  38646. 80107ec: 691b ldr r3, [r3, #16]
  38647. 80107ee: 4313 orrs r3, r2
  38648. 80107f0: 60fb str r3, [r7, #12]
  38649. MODIFY_REG(tmpbdtr, TIM_BDTR_BKP, sBreakDeadTimeConfig->BreakPolarity);
  38650. 80107f2: 68fb ldr r3, [r7, #12]
  38651. 80107f4: f423 5200 bic.w r2, r3, #8192 @ 0x2000
  38652. 80107f8: 683b ldr r3, [r7, #0]
  38653. 80107fa: 695b ldr r3, [r3, #20]
  38654. 80107fc: 4313 orrs r3, r2
  38655. 80107fe: 60fb str r3, [r7, #12]
  38656. MODIFY_REG(tmpbdtr, TIM_BDTR_AOE, sBreakDeadTimeConfig->AutomaticOutput);
  38657. 8010800: 68fb ldr r3, [r7, #12]
  38658. 8010802: f423 4280 bic.w r2, r3, #16384 @ 0x4000
  38659. 8010806: 683b ldr r3, [r7, #0]
  38660. 8010808: 6a9b ldr r3, [r3, #40] @ 0x28
  38661. 801080a: 4313 orrs r3, r2
  38662. 801080c: 60fb str r3, [r7, #12]
  38663. MODIFY_REG(tmpbdtr, TIM_BDTR_BKF, (sBreakDeadTimeConfig->BreakFilter << TIM_BDTR_BKF_Pos));
  38664. 801080e: 68fb ldr r3, [r7, #12]
  38665. 8010810: f423 2270 bic.w r2, r3, #983040 @ 0xf0000
  38666. 8010814: 683b ldr r3, [r7, #0]
  38667. 8010816: 699b ldr r3, [r3, #24]
  38668. 8010818: 041b lsls r3, r3, #16
  38669. 801081a: 4313 orrs r3, r2
  38670. 801081c: 60fb str r3, [r7, #12]
  38671. #if defined(TIM_BDTR_BKBID)
  38672. MODIFY_REG(tmpbdtr, TIM_BDTR_BKBID, sBreakDeadTimeConfig->BreakAFMode);
  38673. #endif /* TIM_BDTR_BKBID */
  38674. if (IS_TIM_BKIN2_INSTANCE(htim->Instance))
  38675. 801081e: 687b ldr r3, [r7, #4]
  38676. 8010820: 681b ldr r3, [r3, #0]
  38677. 8010822: 4a16 ldr r2, [pc, #88] @ (801087c <HAL_TIMEx_ConfigBreakDeadTime+0xf4>)
  38678. 8010824: 4293 cmp r3, r2
  38679. 8010826: d004 beq.n 8010832 <HAL_TIMEx_ConfigBreakDeadTime+0xaa>
  38680. 8010828: 687b ldr r3, [r7, #4]
  38681. 801082a: 681b ldr r3, [r3, #0]
  38682. 801082c: 4a14 ldr r2, [pc, #80] @ (8010880 <HAL_TIMEx_ConfigBreakDeadTime+0xf8>)
  38683. 801082e: 4293 cmp r3, r2
  38684. 8010830: d115 bne.n 801085e <HAL_TIMEx_ConfigBreakDeadTime+0xd6>
  38685. #if defined(TIM_BDTR_BKBID)
  38686. assert_param(IS_TIM_BREAK2_AFMODE(sBreakDeadTimeConfig->Break2AFMode));
  38687. #endif /* TIM_BDTR_BKBID */
  38688. /* Set the BREAK2 input related BDTR bits */
  38689. MODIFY_REG(tmpbdtr, TIM_BDTR_BK2F, (sBreakDeadTimeConfig->Break2Filter << TIM_BDTR_BK2F_Pos));
  38690. 8010832: 68fb ldr r3, [r7, #12]
  38691. 8010834: f423 0270 bic.w r2, r3, #15728640 @ 0xf00000
  38692. 8010838: 683b ldr r3, [r7, #0]
  38693. 801083a: 6a5b ldr r3, [r3, #36] @ 0x24
  38694. 801083c: 051b lsls r3, r3, #20
  38695. 801083e: 4313 orrs r3, r2
  38696. 8010840: 60fb str r3, [r7, #12]
  38697. MODIFY_REG(tmpbdtr, TIM_BDTR_BK2E, sBreakDeadTimeConfig->Break2State);
  38698. 8010842: 68fb ldr r3, [r7, #12]
  38699. 8010844: f023 7280 bic.w r2, r3, #16777216 @ 0x1000000
  38700. 8010848: 683b ldr r3, [r7, #0]
  38701. 801084a: 69db ldr r3, [r3, #28]
  38702. 801084c: 4313 orrs r3, r2
  38703. 801084e: 60fb str r3, [r7, #12]
  38704. MODIFY_REG(tmpbdtr, TIM_BDTR_BK2P, sBreakDeadTimeConfig->Break2Polarity);
  38705. 8010850: 68fb ldr r3, [r7, #12]
  38706. 8010852: f023 7200 bic.w r2, r3, #33554432 @ 0x2000000
  38707. 8010856: 683b ldr r3, [r7, #0]
  38708. 8010858: 6a1b ldr r3, [r3, #32]
  38709. 801085a: 4313 orrs r3, r2
  38710. 801085c: 60fb str r3, [r7, #12]
  38711. MODIFY_REG(tmpbdtr, TIM_BDTR_BK2BID, sBreakDeadTimeConfig->Break2AFMode);
  38712. #endif /* TIM_BDTR_BKBID */
  38713. }
  38714. /* Set TIMx_BDTR */
  38715. htim->Instance->BDTR = tmpbdtr;
  38716. 801085e: 687b ldr r3, [r7, #4]
  38717. 8010860: 681b ldr r3, [r3, #0]
  38718. 8010862: 68fa ldr r2, [r7, #12]
  38719. 8010864: 645a str r2, [r3, #68] @ 0x44
  38720. __HAL_UNLOCK(htim);
  38721. 8010866: 687b ldr r3, [r7, #4]
  38722. 8010868: 2200 movs r2, #0
  38723. 801086a: f883 203c strb.w r2, [r3, #60] @ 0x3c
  38724. return HAL_OK;
  38725. 801086e: 2300 movs r3, #0
  38726. }
  38727. 8010870: 4618 mov r0, r3
  38728. 8010872: 3714 adds r7, #20
  38729. 8010874: 46bd mov sp, r7
  38730. 8010876: f85d 7b04 ldr.w r7, [sp], #4
  38731. 801087a: 4770 bx lr
  38732. 801087c: 40010000 .word 0x40010000
  38733. 8010880: 40010400 .word 0x40010400
  38734. 08010884 <HAL_TIMEx_CommutCallback>:
  38735. * @brief Commutation callback in non-blocking mode
  38736. * @param htim TIM handle
  38737. * @retval None
  38738. */
  38739. __weak void HAL_TIMEx_CommutCallback(TIM_HandleTypeDef *htim)
  38740. {
  38741. 8010884: b480 push {r7}
  38742. 8010886: b083 sub sp, #12
  38743. 8010888: af00 add r7, sp, #0
  38744. 801088a: 6078 str r0, [r7, #4]
  38745. UNUSED(htim);
  38746. /* NOTE : This function should not be modified, when the callback is needed,
  38747. the HAL_TIMEx_CommutCallback could be implemented in the user file
  38748. */
  38749. }
  38750. 801088c: bf00 nop
  38751. 801088e: 370c adds r7, #12
  38752. 8010890: 46bd mov sp, r7
  38753. 8010892: f85d 7b04 ldr.w r7, [sp], #4
  38754. 8010896: 4770 bx lr
  38755. 08010898 <HAL_TIMEx_BreakCallback>:
  38756. * @brief Break detection callback in non-blocking mode
  38757. * @param htim TIM handle
  38758. * @retval None
  38759. */
  38760. __weak void HAL_TIMEx_BreakCallback(TIM_HandleTypeDef *htim)
  38761. {
  38762. 8010898: b480 push {r7}
  38763. 801089a: b083 sub sp, #12
  38764. 801089c: af00 add r7, sp, #0
  38765. 801089e: 6078 str r0, [r7, #4]
  38766. UNUSED(htim);
  38767. /* NOTE : This function should not be modified, when the callback is needed,
  38768. the HAL_TIMEx_BreakCallback could be implemented in the user file
  38769. */
  38770. }
  38771. 80108a0: bf00 nop
  38772. 80108a2: 370c adds r7, #12
  38773. 80108a4: 46bd mov sp, r7
  38774. 80108a6: f85d 7b04 ldr.w r7, [sp], #4
  38775. 80108aa: 4770 bx lr
  38776. 080108ac <HAL_TIMEx_Break2Callback>:
  38777. * @brief Break2 detection callback in non blocking mode
  38778. * @param htim: TIM handle
  38779. * @retval None
  38780. */
  38781. __weak void HAL_TIMEx_Break2Callback(TIM_HandleTypeDef *htim)
  38782. {
  38783. 80108ac: b480 push {r7}
  38784. 80108ae: b083 sub sp, #12
  38785. 80108b0: af00 add r7, sp, #0
  38786. 80108b2: 6078 str r0, [r7, #4]
  38787. UNUSED(htim);
  38788. /* NOTE : This function Should not be modified, when the callback is needed,
  38789. the HAL_TIMEx_Break2Callback could be implemented in the user file
  38790. */
  38791. }
  38792. 80108b4: bf00 nop
  38793. 80108b6: 370c adds r7, #12
  38794. 80108b8: 46bd mov sp, r7
  38795. 80108ba: f85d 7b04 ldr.w r7, [sp], #4
  38796. 80108be: 4770 bx lr
  38797. 080108c0 <HAL_UART_Init>:
  38798. * parameters in the UART_InitTypeDef and initialize the associated handle.
  38799. * @param huart UART handle.
  38800. * @retval HAL status
  38801. */
  38802. HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart)
  38803. {
  38804. 80108c0: b580 push {r7, lr}
  38805. 80108c2: b082 sub sp, #8
  38806. 80108c4: af00 add r7, sp, #0
  38807. 80108c6: 6078 str r0, [r7, #4]
  38808. /* Check the UART handle allocation */
  38809. if (huart == NULL)
  38810. 80108c8: 687b ldr r3, [r7, #4]
  38811. 80108ca: 2b00 cmp r3, #0
  38812. 80108cc: d101 bne.n 80108d2 <HAL_UART_Init+0x12>
  38813. {
  38814. return HAL_ERROR;
  38815. 80108ce: 2301 movs r3, #1
  38816. 80108d0: e042 b.n 8010958 <HAL_UART_Init+0x98>
  38817. {
  38818. /* Check the parameters */
  38819. assert_param((IS_UART_INSTANCE(huart->Instance)) || (IS_LPUART_INSTANCE(huart->Instance)));
  38820. }
  38821. if (huart->gState == HAL_UART_STATE_RESET)
  38822. 80108d2: 687b ldr r3, [r7, #4]
  38823. 80108d4: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  38824. 80108d8: 2b00 cmp r3, #0
  38825. 80108da: d106 bne.n 80108ea <HAL_UART_Init+0x2a>
  38826. {
  38827. /* Allocate lock resource and initialize it */
  38828. huart->Lock = HAL_UNLOCKED;
  38829. 80108dc: 687b ldr r3, [r7, #4]
  38830. 80108de: 2200 movs r2, #0
  38831. 80108e0: f883 2084 strb.w r2, [r3, #132] @ 0x84
  38832. /* Init the low level hardware */
  38833. huart->MspInitCallback(huart);
  38834. #else
  38835. /* Init the low level hardware : GPIO, CLOCK */
  38836. HAL_UART_MspInit(huart);
  38837. 80108e4: 6878 ldr r0, [r7, #4]
  38838. 80108e6: f7f3 f987 bl 8003bf8 <HAL_UART_MspInit>
  38839. #endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */
  38840. }
  38841. huart->gState = HAL_UART_STATE_BUSY;
  38842. 80108ea: 687b ldr r3, [r7, #4]
  38843. 80108ec: 2224 movs r2, #36 @ 0x24
  38844. 80108ee: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  38845. __HAL_UART_DISABLE(huart);
  38846. 80108f2: 687b ldr r3, [r7, #4]
  38847. 80108f4: 681b ldr r3, [r3, #0]
  38848. 80108f6: 681a ldr r2, [r3, #0]
  38849. 80108f8: 687b ldr r3, [r7, #4]
  38850. 80108fa: 681b ldr r3, [r3, #0]
  38851. 80108fc: f022 0201 bic.w r2, r2, #1
  38852. 8010900: 601a str r2, [r3, #0]
  38853. /* Perform advanced settings configuration */
  38854. /* For some items, configuration requires to be done prior TE and RE bits are set */
  38855. if (huart->AdvancedInit.AdvFeatureInit != UART_ADVFEATURE_NO_INIT)
  38856. 8010902: 687b ldr r3, [r7, #4]
  38857. 8010904: 6a9b ldr r3, [r3, #40] @ 0x28
  38858. 8010906: 2b00 cmp r3, #0
  38859. 8010908: d002 beq.n 8010910 <HAL_UART_Init+0x50>
  38860. {
  38861. UART_AdvFeatureConfig(huart);
  38862. 801090a: 6878 ldr r0, [r7, #4]
  38863. 801090c: f001 fa76 bl 8011dfc <UART_AdvFeatureConfig>
  38864. }
  38865. /* Set the UART Communication parameters */
  38866. if (UART_SetConfig(huart) == HAL_ERROR)
  38867. 8010910: 6878 ldr r0, [r7, #4]
  38868. 8010912: f000 fd0b bl 801132c <UART_SetConfig>
  38869. 8010916: 4603 mov r3, r0
  38870. 8010918: 2b01 cmp r3, #1
  38871. 801091a: d101 bne.n 8010920 <HAL_UART_Init+0x60>
  38872. {
  38873. return HAL_ERROR;
  38874. 801091c: 2301 movs r3, #1
  38875. 801091e: e01b b.n 8010958 <HAL_UART_Init+0x98>
  38876. }
  38877. /* In asynchronous mode, the following bits must be kept cleared:
  38878. - LINEN and CLKEN bits in the USART_CR2 register,
  38879. - SCEN, HDSEL and IREN bits in the USART_CR3 register.*/
  38880. CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN));
  38881. 8010920: 687b ldr r3, [r7, #4]
  38882. 8010922: 681b ldr r3, [r3, #0]
  38883. 8010924: 685a ldr r2, [r3, #4]
  38884. 8010926: 687b ldr r3, [r7, #4]
  38885. 8010928: 681b ldr r3, [r3, #0]
  38886. 801092a: f422 4290 bic.w r2, r2, #18432 @ 0x4800
  38887. 801092e: 605a str r2, [r3, #4]
  38888. CLEAR_BIT(huart->Instance->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN));
  38889. 8010930: 687b ldr r3, [r7, #4]
  38890. 8010932: 681b ldr r3, [r3, #0]
  38891. 8010934: 689a ldr r2, [r3, #8]
  38892. 8010936: 687b ldr r3, [r7, #4]
  38893. 8010938: 681b ldr r3, [r3, #0]
  38894. 801093a: f022 022a bic.w r2, r2, #42 @ 0x2a
  38895. 801093e: 609a str r2, [r3, #8]
  38896. __HAL_UART_ENABLE(huart);
  38897. 8010940: 687b ldr r3, [r7, #4]
  38898. 8010942: 681b ldr r3, [r3, #0]
  38899. 8010944: 681a ldr r2, [r3, #0]
  38900. 8010946: 687b ldr r3, [r7, #4]
  38901. 8010948: 681b ldr r3, [r3, #0]
  38902. 801094a: f042 0201 orr.w r2, r2, #1
  38903. 801094e: 601a str r2, [r3, #0]
  38904. /* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */
  38905. return (UART_CheckIdleState(huart));
  38906. 8010950: 6878 ldr r0, [r7, #4]
  38907. 8010952: f001 faf5 bl 8011f40 <UART_CheckIdleState>
  38908. 8010956: 4603 mov r3, r0
  38909. }
  38910. 8010958: 4618 mov r0, r3
  38911. 801095a: 3708 adds r7, #8
  38912. 801095c: 46bd mov sp, r7
  38913. 801095e: bd80 pop {r7, pc}
  38914. 08010960 <HAL_UART_Transmit>:
  38915. * @param Size Amount of data elements (u8 or u16) to be sent.
  38916. * @param Timeout Timeout duration.
  38917. * @retval HAL status
  38918. */
  38919. HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout)
  38920. {
  38921. 8010960: b580 push {r7, lr}
  38922. 8010962: b08a sub sp, #40 @ 0x28
  38923. 8010964: af02 add r7, sp, #8
  38924. 8010966: 60f8 str r0, [r7, #12]
  38925. 8010968: 60b9 str r1, [r7, #8]
  38926. 801096a: 603b str r3, [r7, #0]
  38927. 801096c: 4613 mov r3, r2
  38928. 801096e: 80fb strh r3, [r7, #6]
  38929. const uint8_t *pdata8bits;
  38930. const uint16_t *pdata16bits;
  38931. uint32_t tickstart;
  38932. /* Check that a Tx process is not already ongoing */
  38933. if (huart->gState == HAL_UART_STATE_READY)
  38934. 8010970: 68fb ldr r3, [r7, #12]
  38935. 8010972: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  38936. 8010976: 2b20 cmp r3, #32
  38937. 8010978: d17b bne.n 8010a72 <HAL_UART_Transmit+0x112>
  38938. {
  38939. if ((pData == NULL) || (Size == 0U))
  38940. 801097a: 68bb ldr r3, [r7, #8]
  38941. 801097c: 2b00 cmp r3, #0
  38942. 801097e: d002 beq.n 8010986 <HAL_UART_Transmit+0x26>
  38943. 8010980: 88fb ldrh r3, [r7, #6]
  38944. 8010982: 2b00 cmp r3, #0
  38945. 8010984: d101 bne.n 801098a <HAL_UART_Transmit+0x2a>
  38946. {
  38947. return HAL_ERROR;
  38948. 8010986: 2301 movs r3, #1
  38949. 8010988: e074 b.n 8010a74 <HAL_UART_Transmit+0x114>
  38950. }
  38951. huart->ErrorCode = HAL_UART_ERROR_NONE;
  38952. 801098a: 68fb ldr r3, [r7, #12]
  38953. 801098c: 2200 movs r2, #0
  38954. 801098e: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  38955. huart->gState = HAL_UART_STATE_BUSY_TX;
  38956. 8010992: 68fb ldr r3, [r7, #12]
  38957. 8010994: 2221 movs r2, #33 @ 0x21
  38958. 8010996: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  38959. /* Init tickstart for timeout management */
  38960. tickstart = HAL_GetTick();
  38961. 801099a: f7f4 fd1f bl 80053dc <HAL_GetTick>
  38962. 801099e: 6178 str r0, [r7, #20]
  38963. huart->TxXferSize = Size;
  38964. 80109a0: 68fb ldr r3, [r7, #12]
  38965. 80109a2: 88fa ldrh r2, [r7, #6]
  38966. 80109a4: f8a3 2054 strh.w r2, [r3, #84] @ 0x54
  38967. huart->TxXferCount = Size;
  38968. 80109a8: 68fb ldr r3, [r7, #12]
  38969. 80109aa: 88fa ldrh r2, [r7, #6]
  38970. 80109ac: f8a3 2056 strh.w r2, [r3, #86] @ 0x56
  38971. /* In case of 9bits/No Parity transfer, pData needs to be handled as a uint16_t pointer */
  38972. if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE))
  38973. 80109b0: 68fb ldr r3, [r7, #12]
  38974. 80109b2: 689b ldr r3, [r3, #8]
  38975. 80109b4: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  38976. 80109b8: d108 bne.n 80109cc <HAL_UART_Transmit+0x6c>
  38977. 80109ba: 68fb ldr r3, [r7, #12]
  38978. 80109bc: 691b ldr r3, [r3, #16]
  38979. 80109be: 2b00 cmp r3, #0
  38980. 80109c0: d104 bne.n 80109cc <HAL_UART_Transmit+0x6c>
  38981. {
  38982. pdata8bits = NULL;
  38983. 80109c2: 2300 movs r3, #0
  38984. 80109c4: 61fb str r3, [r7, #28]
  38985. pdata16bits = (const uint16_t *) pData;
  38986. 80109c6: 68bb ldr r3, [r7, #8]
  38987. 80109c8: 61bb str r3, [r7, #24]
  38988. 80109ca: e003 b.n 80109d4 <HAL_UART_Transmit+0x74>
  38989. }
  38990. else
  38991. {
  38992. pdata8bits = pData;
  38993. 80109cc: 68bb ldr r3, [r7, #8]
  38994. 80109ce: 61fb str r3, [r7, #28]
  38995. pdata16bits = NULL;
  38996. 80109d0: 2300 movs r3, #0
  38997. 80109d2: 61bb str r3, [r7, #24]
  38998. }
  38999. while (huart->TxXferCount > 0U)
  39000. 80109d4: e030 b.n 8010a38 <HAL_UART_Transmit+0xd8>
  39001. {
  39002. if (UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_TXE, RESET, tickstart, Timeout) != HAL_OK)
  39003. 80109d6: 683b ldr r3, [r7, #0]
  39004. 80109d8: 9300 str r3, [sp, #0]
  39005. 80109da: 697b ldr r3, [r7, #20]
  39006. 80109dc: 2200 movs r2, #0
  39007. 80109de: 2180 movs r1, #128 @ 0x80
  39008. 80109e0: 68f8 ldr r0, [r7, #12]
  39009. 80109e2: f001 fb57 bl 8012094 <UART_WaitOnFlagUntilTimeout>
  39010. 80109e6: 4603 mov r3, r0
  39011. 80109e8: 2b00 cmp r3, #0
  39012. 80109ea: d005 beq.n 80109f8 <HAL_UART_Transmit+0x98>
  39013. {
  39014. huart->gState = HAL_UART_STATE_READY;
  39015. 80109ec: 68fb ldr r3, [r7, #12]
  39016. 80109ee: 2220 movs r2, #32
  39017. 80109f0: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  39018. return HAL_TIMEOUT;
  39019. 80109f4: 2303 movs r3, #3
  39020. 80109f6: e03d b.n 8010a74 <HAL_UART_Transmit+0x114>
  39021. }
  39022. if (pdata8bits == NULL)
  39023. 80109f8: 69fb ldr r3, [r7, #28]
  39024. 80109fa: 2b00 cmp r3, #0
  39025. 80109fc: d10b bne.n 8010a16 <HAL_UART_Transmit+0xb6>
  39026. {
  39027. huart->Instance->TDR = (uint16_t)(*pdata16bits & 0x01FFU);
  39028. 80109fe: 69bb ldr r3, [r7, #24]
  39029. 8010a00: 881b ldrh r3, [r3, #0]
  39030. 8010a02: 461a mov r2, r3
  39031. 8010a04: 68fb ldr r3, [r7, #12]
  39032. 8010a06: 681b ldr r3, [r3, #0]
  39033. 8010a08: f3c2 0208 ubfx r2, r2, #0, #9
  39034. 8010a0c: 629a str r2, [r3, #40] @ 0x28
  39035. pdata16bits++;
  39036. 8010a0e: 69bb ldr r3, [r7, #24]
  39037. 8010a10: 3302 adds r3, #2
  39038. 8010a12: 61bb str r3, [r7, #24]
  39039. 8010a14: e007 b.n 8010a26 <HAL_UART_Transmit+0xc6>
  39040. }
  39041. else
  39042. {
  39043. huart->Instance->TDR = (uint8_t)(*pdata8bits & 0xFFU);
  39044. 8010a16: 69fb ldr r3, [r7, #28]
  39045. 8010a18: 781a ldrb r2, [r3, #0]
  39046. 8010a1a: 68fb ldr r3, [r7, #12]
  39047. 8010a1c: 681b ldr r3, [r3, #0]
  39048. 8010a1e: 629a str r2, [r3, #40] @ 0x28
  39049. pdata8bits++;
  39050. 8010a20: 69fb ldr r3, [r7, #28]
  39051. 8010a22: 3301 adds r3, #1
  39052. 8010a24: 61fb str r3, [r7, #28]
  39053. }
  39054. huart->TxXferCount--;
  39055. 8010a26: 68fb ldr r3, [r7, #12]
  39056. 8010a28: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  39057. 8010a2c: b29b uxth r3, r3
  39058. 8010a2e: 3b01 subs r3, #1
  39059. 8010a30: b29a uxth r2, r3
  39060. 8010a32: 68fb ldr r3, [r7, #12]
  39061. 8010a34: f8a3 2056 strh.w r2, [r3, #86] @ 0x56
  39062. while (huart->TxXferCount > 0U)
  39063. 8010a38: 68fb ldr r3, [r7, #12]
  39064. 8010a3a: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  39065. 8010a3e: b29b uxth r3, r3
  39066. 8010a40: 2b00 cmp r3, #0
  39067. 8010a42: d1c8 bne.n 80109d6 <HAL_UART_Transmit+0x76>
  39068. }
  39069. if (UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_TC, RESET, tickstart, Timeout) != HAL_OK)
  39070. 8010a44: 683b ldr r3, [r7, #0]
  39071. 8010a46: 9300 str r3, [sp, #0]
  39072. 8010a48: 697b ldr r3, [r7, #20]
  39073. 8010a4a: 2200 movs r2, #0
  39074. 8010a4c: 2140 movs r1, #64 @ 0x40
  39075. 8010a4e: 68f8 ldr r0, [r7, #12]
  39076. 8010a50: f001 fb20 bl 8012094 <UART_WaitOnFlagUntilTimeout>
  39077. 8010a54: 4603 mov r3, r0
  39078. 8010a56: 2b00 cmp r3, #0
  39079. 8010a58: d005 beq.n 8010a66 <HAL_UART_Transmit+0x106>
  39080. {
  39081. huart->gState = HAL_UART_STATE_READY;
  39082. 8010a5a: 68fb ldr r3, [r7, #12]
  39083. 8010a5c: 2220 movs r2, #32
  39084. 8010a5e: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  39085. return HAL_TIMEOUT;
  39086. 8010a62: 2303 movs r3, #3
  39087. 8010a64: e006 b.n 8010a74 <HAL_UART_Transmit+0x114>
  39088. }
  39089. /* At end of Tx process, restore huart->gState to Ready */
  39090. huart->gState = HAL_UART_STATE_READY;
  39091. 8010a66: 68fb ldr r3, [r7, #12]
  39092. 8010a68: 2220 movs r2, #32
  39093. 8010a6a: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  39094. return HAL_OK;
  39095. 8010a6e: 2300 movs r3, #0
  39096. 8010a70: e000 b.n 8010a74 <HAL_UART_Transmit+0x114>
  39097. }
  39098. else
  39099. {
  39100. return HAL_BUSY;
  39101. 8010a72: 2302 movs r3, #2
  39102. }
  39103. }
  39104. 8010a74: 4618 mov r0, r3
  39105. 8010a76: 3720 adds r7, #32
  39106. 8010a78: 46bd mov sp, r7
  39107. 8010a7a: bd80 pop {r7, pc}
  39108. 08010a7c <HAL_UART_Transmit_IT>:
  39109. * @param pData Pointer to data buffer (u8 or u16 data elements).
  39110. * @param Size Amount of data elements (u8 or u16) to be sent.
  39111. * @retval HAL status
  39112. */
  39113. HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size)
  39114. {
  39115. 8010a7c: b480 push {r7}
  39116. 8010a7e: b091 sub sp, #68 @ 0x44
  39117. 8010a80: af00 add r7, sp, #0
  39118. 8010a82: 60f8 str r0, [r7, #12]
  39119. 8010a84: 60b9 str r1, [r7, #8]
  39120. 8010a86: 4613 mov r3, r2
  39121. 8010a88: 80fb strh r3, [r7, #6]
  39122. /* Check that a Tx process is not already ongoing */
  39123. if (huart->gState == HAL_UART_STATE_READY)
  39124. 8010a8a: 68fb ldr r3, [r7, #12]
  39125. 8010a8c: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  39126. 8010a90: 2b20 cmp r3, #32
  39127. 8010a92: d178 bne.n 8010b86 <HAL_UART_Transmit_IT+0x10a>
  39128. {
  39129. if ((pData == NULL) || (Size == 0U))
  39130. 8010a94: 68bb ldr r3, [r7, #8]
  39131. 8010a96: 2b00 cmp r3, #0
  39132. 8010a98: d002 beq.n 8010aa0 <HAL_UART_Transmit_IT+0x24>
  39133. 8010a9a: 88fb ldrh r3, [r7, #6]
  39134. 8010a9c: 2b00 cmp r3, #0
  39135. 8010a9e: d101 bne.n 8010aa4 <HAL_UART_Transmit_IT+0x28>
  39136. {
  39137. return HAL_ERROR;
  39138. 8010aa0: 2301 movs r3, #1
  39139. 8010aa2: e071 b.n 8010b88 <HAL_UART_Transmit_IT+0x10c>
  39140. }
  39141. huart->pTxBuffPtr = pData;
  39142. 8010aa4: 68fb ldr r3, [r7, #12]
  39143. 8010aa6: 68ba ldr r2, [r7, #8]
  39144. 8010aa8: 651a str r2, [r3, #80] @ 0x50
  39145. huart->TxXferSize = Size;
  39146. 8010aaa: 68fb ldr r3, [r7, #12]
  39147. 8010aac: 88fa ldrh r2, [r7, #6]
  39148. 8010aae: f8a3 2054 strh.w r2, [r3, #84] @ 0x54
  39149. huart->TxXferCount = Size;
  39150. 8010ab2: 68fb ldr r3, [r7, #12]
  39151. 8010ab4: 88fa ldrh r2, [r7, #6]
  39152. 8010ab6: f8a3 2056 strh.w r2, [r3, #86] @ 0x56
  39153. huart->TxISR = NULL;
  39154. 8010aba: 68fb ldr r3, [r7, #12]
  39155. 8010abc: 2200 movs r2, #0
  39156. 8010abe: 679a str r2, [r3, #120] @ 0x78
  39157. huart->ErrorCode = HAL_UART_ERROR_NONE;
  39158. 8010ac0: 68fb ldr r3, [r7, #12]
  39159. 8010ac2: 2200 movs r2, #0
  39160. 8010ac4: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  39161. huart->gState = HAL_UART_STATE_BUSY_TX;
  39162. 8010ac8: 68fb ldr r3, [r7, #12]
  39163. 8010aca: 2221 movs r2, #33 @ 0x21
  39164. 8010acc: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  39165. /* Configure Tx interrupt processing */
  39166. if (huart->FifoMode == UART_FIFOMODE_ENABLE)
  39167. 8010ad0: 68fb ldr r3, [r7, #12]
  39168. 8010ad2: 6e5b ldr r3, [r3, #100] @ 0x64
  39169. 8010ad4: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  39170. 8010ad8: d12a bne.n 8010b30 <HAL_UART_Transmit_IT+0xb4>
  39171. {
  39172. /* Set the Tx ISR function pointer according to the data word length */
  39173. if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE))
  39174. 8010ada: 68fb ldr r3, [r7, #12]
  39175. 8010adc: 689b ldr r3, [r3, #8]
  39176. 8010ade: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  39177. 8010ae2: d107 bne.n 8010af4 <HAL_UART_Transmit_IT+0x78>
  39178. 8010ae4: 68fb ldr r3, [r7, #12]
  39179. 8010ae6: 691b ldr r3, [r3, #16]
  39180. 8010ae8: 2b00 cmp r3, #0
  39181. 8010aea: d103 bne.n 8010af4 <HAL_UART_Transmit_IT+0x78>
  39182. {
  39183. huart->TxISR = UART_TxISR_16BIT_FIFOEN;
  39184. 8010aec: 68fb ldr r3, [r7, #12]
  39185. 8010aee: 4a29 ldr r2, [pc, #164] @ (8010b94 <HAL_UART_Transmit_IT+0x118>)
  39186. 8010af0: 679a str r2, [r3, #120] @ 0x78
  39187. 8010af2: e002 b.n 8010afa <HAL_UART_Transmit_IT+0x7e>
  39188. }
  39189. else
  39190. {
  39191. huart->TxISR = UART_TxISR_8BIT_FIFOEN;
  39192. 8010af4: 68fb ldr r3, [r7, #12]
  39193. 8010af6: 4a28 ldr r2, [pc, #160] @ (8010b98 <HAL_UART_Transmit_IT+0x11c>)
  39194. 8010af8: 679a str r2, [r3, #120] @ 0x78
  39195. }
  39196. /* Enable the TX FIFO threshold interrupt */
  39197. ATOMIC_SET_BIT(huart->Instance->CR3, USART_CR3_TXFTIE);
  39198. 8010afa: 68fb ldr r3, [r7, #12]
  39199. 8010afc: 681b ldr r3, [r3, #0]
  39200. 8010afe: 3308 adds r3, #8
  39201. 8010b00: 62bb str r3, [r7, #40] @ 0x28
  39202. */
  39203. __STATIC_FORCEINLINE uint32_t __LDREXW(volatile uint32_t *addr)
  39204. {
  39205. uint32_t result;
  39206. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  39207. 8010b02: 6abb ldr r3, [r7, #40] @ 0x28
  39208. 8010b04: e853 3f00 ldrex r3, [r3]
  39209. 8010b08: 627b str r3, [r7, #36] @ 0x24
  39210. return(result);
  39211. 8010b0a: 6a7b ldr r3, [r7, #36] @ 0x24
  39212. 8010b0c: f443 0300 orr.w r3, r3, #8388608 @ 0x800000
  39213. 8010b10: 63bb str r3, [r7, #56] @ 0x38
  39214. 8010b12: 68fb ldr r3, [r7, #12]
  39215. 8010b14: 681b ldr r3, [r3, #0]
  39216. 8010b16: 3308 adds r3, #8
  39217. 8010b18: 6bba ldr r2, [r7, #56] @ 0x38
  39218. 8010b1a: 637a str r2, [r7, #52] @ 0x34
  39219. 8010b1c: 633b str r3, [r7, #48] @ 0x30
  39220. */
  39221. __STATIC_FORCEINLINE uint32_t __STREXW(uint32_t value, volatile uint32_t *addr)
  39222. {
  39223. uint32_t result;
  39224. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  39225. 8010b1e: 6b39 ldr r1, [r7, #48] @ 0x30
  39226. 8010b20: 6b7a ldr r2, [r7, #52] @ 0x34
  39227. 8010b22: e841 2300 strex r3, r2, [r1]
  39228. 8010b26: 62fb str r3, [r7, #44] @ 0x2c
  39229. return(result);
  39230. 8010b28: 6afb ldr r3, [r7, #44] @ 0x2c
  39231. 8010b2a: 2b00 cmp r3, #0
  39232. 8010b2c: d1e5 bne.n 8010afa <HAL_UART_Transmit_IT+0x7e>
  39233. 8010b2e: e028 b.n 8010b82 <HAL_UART_Transmit_IT+0x106>
  39234. }
  39235. else
  39236. {
  39237. /* Set the Tx ISR function pointer according to the data word length */
  39238. if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE))
  39239. 8010b30: 68fb ldr r3, [r7, #12]
  39240. 8010b32: 689b ldr r3, [r3, #8]
  39241. 8010b34: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  39242. 8010b38: d107 bne.n 8010b4a <HAL_UART_Transmit_IT+0xce>
  39243. 8010b3a: 68fb ldr r3, [r7, #12]
  39244. 8010b3c: 691b ldr r3, [r3, #16]
  39245. 8010b3e: 2b00 cmp r3, #0
  39246. 8010b40: d103 bne.n 8010b4a <HAL_UART_Transmit_IT+0xce>
  39247. {
  39248. huart->TxISR = UART_TxISR_16BIT;
  39249. 8010b42: 68fb ldr r3, [r7, #12]
  39250. 8010b44: 4a15 ldr r2, [pc, #84] @ (8010b9c <HAL_UART_Transmit_IT+0x120>)
  39251. 8010b46: 679a str r2, [r3, #120] @ 0x78
  39252. 8010b48: e002 b.n 8010b50 <HAL_UART_Transmit_IT+0xd4>
  39253. }
  39254. else
  39255. {
  39256. huart->TxISR = UART_TxISR_8BIT;
  39257. 8010b4a: 68fb ldr r3, [r7, #12]
  39258. 8010b4c: 4a14 ldr r2, [pc, #80] @ (8010ba0 <HAL_UART_Transmit_IT+0x124>)
  39259. 8010b4e: 679a str r2, [r3, #120] @ 0x78
  39260. }
  39261. /* Enable the Transmit Data Register Empty interrupt */
  39262. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_TXEIE_TXFNFIE);
  39263. 8010b50: 68fb ldr r3, [r7, #12]
  39264. 8010b52: 681b ldr r3, [r3, #0]
  39265. 8010b54: 617b str r3, [r7, #20]
  39266. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  39267. 8010b56: 697b ldr r3, [r7, #20]
  39268. 8010b58: e853 3f00 ldrex r3, [r3]
  39269. 8010b5c: 613b str r3, [r7, #16]
  39270. return(result);
  39271. 8010b5e: 693b ldr r3, [r7, #16]
  39272. 8010b60: f043 0380 orr.w r3, r3, #128 @ 0x80
  39273. 8010b64: 63fb str r3, [r7, #60] @ 0x3c
  39274. 8010b66: 68fb ldr r3, [r7, #12]
  39275. 8010b68: 681b ldr r3, [r3, #0]
  39276. 8010b6a: 461a mov r2, r3
  39277. 8010b6c: 6bfb ldr r3, [r7, #60] @ 0x3c
  39278. 8010b6e: 623b str r3, [r7, #32]
  39279. 8010b70: 61fa str r2, [r7, #28]
  39280. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  39281. 8010b72: 69f9 ldr r1, [r7, #28]
  39282. 8010b74: 6a3a ldr r2, [r7, #32]
  39283. 8010b76: e841 2300 strex r3, r2, [r1]
  39284. 8010b7a: 61bb str r3, [r7, #24]
  39285. return(result);
  39286. 8010b7c: 69bb ldr r3, [r7, #24]
  39287. 8010b7e: 2b00 cmp r3, #0
  39288. 8010b80: d1e6 bne.n 8010b50 <HAL_UART_Transmit_IT+0xd4>
  39289. }
  39290. return HAL_OK;
  39291. 8010b82: 2300 movs r3, #0
  39292. 8010b84: e000 b.n 8010b88 <HAL_UART_Transmit_IT+0x10c>
  39293. }
  39294. else
  39295. {
  39296. return HAL_BUSY;
  39297. 8010b86: 2302 movs r3, #2
  39298. }
  39299. }
  39300. 8010b88: 4618 mov r0, r3
  39301. 8010b8a: 3744 adds r7, #68 @ 0x44
  39302. 8010b8c: 46bd mov sp, r7
  39303. 8010b8e: f85d 7b04 ldr.w r7, [sp], #4
  39304. 8010b92: 4770 bx lr
  39305. 8010b94: 08012707 .word 0x08012707
  39306. 8010b98: 08012627 .word 0x08012627
  39307. 8010b9c: 08012565 .word 0x08012565
  39308. 8010ba0: 080124ad .word 0x080124ad
  39309. 08010ba4 <HAL_UART_IRQHandler>:
  39310. * @brief Handle UART interrupt request.
  39311. * @param huart UART handle.
  39312. * @retval None
  39313. */
  39314. void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)
  39315. {
  39316. 8010ba4: b580 push {r7, lr}
  39317. 8010ba6: b0ba sub sp, #232 @ 0xe8
  39318. 8010ba8: af00 add r7, sp, #0
  39319. 8010baa: 6078 str r0, [r7, #4]
  39320. uint32_t isrflags = READ_REG(huart->Instance->ISR);
  39321. 8010bac: 687b ldr r3, [r7, #4]
  39322. 8010bae: 681b ldr r3, [r3, #0]
  39323. 8010bb0: 69db ldr r3, [r3, #28]
  39324. 8010bb2: f8c7 30e4 str.w r3, [r7, #228] @ 0xe4
  39325. uint32_t cr1its = READ_REG(huart->Instance->CR1);
  39326. 8010bb6: 687b ldr r3, [r7, #4]
  39327. 8010bb8: 681b ldr r3, [r3, #0]
  39328. 8010bba: 681b ldr r3, [r3, #0]
  39329. 8010bbc: f8c7 30e0 str.w r3, [r7, #224] @ 0xe0
  39330. uint32_t cr3its = READ_REG(huart->Instance->CR3);
  39331. 8010bc0: 687b ldr r3, [r7, #4]
  39332. 8010bc2: 681b ldr r3, [r3, #0]
  39333. 8010bc4: 689b ldr r3, [r3, #8]
  39334. 8010bc6: f8c7 30dc str.w r3, [r7, #220] @ 0xdc
  39335. uint32_t errorflags;
  39336. uint32_t errorcode;
  39337. /* If no error occurs */
  39338. errorflags = (isrflags & (uint32_t)(USART_ISR_PE | USART_ISR_FE | USART_ISR_ORE | USART_ISR_NE | USART_ISR_RTOF));
  39339. 8010bca: f8d7 20e4 ldr.w r2, [r7, #228] @ 0xe4
  39340. 8010bce: f640 030f movw r3, #2063 @ 0x80f
  39341. 8010bd2: 4013 ands r3, r2
  39342. 8010bd4: f8c7 30d8 str.w r3, [r7, #216] @ 0xd8
  39343. if (errorflags == 0U)
  39344. 8010bd8: f8d7 30d8 ldr.w r3, [r7, #216] @ 0xd8
  39345. 8010bdc: 2b00 cmp r3, #0
  39346. 8010bde: d11b bne.n 8010c18 <HAL_UART_IRQHandler+0x74>
  39347. {
  39348. /* UART in mode Receiver ---------------------------------------------------*/
  39349. if (((isrflags & USART_ISR_RXNE_RXFNE) != 0U)
  39350. 8010be0: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  39351. 8010be4: f003 0320 and.w r3, r3, #32
  39352. 8010be8: 2b00 cmp r3, #0
  39353. 8010bea: d015 beq.n 8010c18 <HAL_UART_IRQHandler+0x74>
  39354. && (((cr1its & USART_CR1_RXNEIE_RXFNEIE) != 0U)
  39355. 8010bec: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  39356. 8010bf0: f003 0320 and.w r3, r3, #32
  39357. 8010bf4: 2b00 cmp r3, #0
  39358. 8010bf6: d105 bne.n 8010c04 <HAL_UART_IRQHandler+0x60>
  39359. || ((cr3its & USART_CR3_RXFTIE) != 0U)))
  39360. 8010bf8: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc
  39361. 8010bfc: f003 5380 and.w r3, r3, #268435456 @ 0x10000000
  39362. 8010c00: 2b00 cmp r3, #0
  39363. 8010c02: d009 beq.n 8010c18 <HAL_UART_IRQHandler+0x74>
  39364. {
  39365. if (huart->RxISR != NULL)
  39366. 8010c04: 687b ldr r3, [r7, #4]
  39367. 8010c06: 6f5b ldr r3, [r3, #116] @ 0x74
  39368. 8010c08: 2b00 cmp r3, #0
  39369. 8010c0a: f000 8377 beq.w 80112fc <HAL_UART_IRQHandler+0x758>
  39370. {
  39371. huart->RxISR(huart);
  39372. 8010c0e: 687b ldr r3, [r7, #4]
  39373. 8010c10: 6f5b ldr r3, [r3, #116] @ 0x74
  39374. 8010c12: 6878 ldr r0, [r7, #4]
  39375. 8010c14: 4798 blx r3
  39376. }
  39377. return;
  39378. 8010c16: e371 b.n 80112fc <HAL_UART_IRQHandler+0x758>
  39379. }
  39380. }
  39381. /* If some errors occur */
  39382. if ((errorflags != 0U)
  39383. 8010c18: f8d7 30d8 ldr.w r3, [r7, #216] @ 0xd8
  39384. 8010c1c: 2b00 cmp r3, #0
  39385. 8010c1e: f000 8123 beq.w 8010e68 <HAL_UART_IRQHandler+0x2c4>
  39386. && ((((cr3its & (USART_CR3_RXFTIE | USART_CR3_EIE)) != 0U)
  39387. 8010c22: f8d7 20dc ldr.w r2, [r7, #220] @ 0xdc
  39388. 8010c26: 4b8d ldr r3, [pc, #564] @ (8010e5c <HAL_UART_IRQHandler+0x2b8>)
  39389. 8010c28: 4013 ands r3, r2
  39390. 8010c2a: 2b00 cmp r3, #0
  39391. 8010c2c: d106 bne.n 8010c3c <HAL_UART_IRQHandler+0x98>
  39392. || ((cr1its & (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE | USART_CR1_RTOIE)) != 0U))))
  39393. 8010c2e: f8d7 20e0 ldr.w r2, [r7, #224] @ 0xe0
  39394. 8010c32: 4b8b ldr r3, [pc, #556] @ (8010e60 <HAL_UART_IRQHandler+0x2bc>)
  39395. 8010c34: 4013 ands r3, r2
  39396. 8010c36: 2b00 cmp r3, #0
  39397. 8010c38: f000 8116 beq.w 8010e68 <HAL_UART_IRQHandler+0x2c4>
  39398. {
  39399. /* UART parity error interrupt occurred -------------------------------------*/
  39400. if (((isrflags & USART_ISR_PE) != 0U) && ((cr1its & USART_CR1_PEIE) != 0U))
  39401. 8010c3c: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  39402. 8010c40: f003 0301 and.w r3, r3, #1
  39403. 8010c44: 2b00 cmp r3, #0
  39404. 8010c46: d011 beq.n 8010c6c <HAL_UART_IRQHandler+0xc8>
  39405. 8010c48: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  39406. 8010c4c: f403 7380 and.w r3, r3, #256 @ 0x100
  39407. 8010c50: 2b00 cmp r3, #0
  39408. 8010c52: d00b beq.n 8010c6c <HAL_UART_IRQHandler+0xc8>
  39409. {
  39410. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_PEF);
  39411. 8010c54: 687b ldr r3, [r7, #4]
  39412. 8010c56: 681b ldr r3, [r3, #0]
  39413. 8010c58: 2201 movs r2, #1
  39414. 8010c5a: 621a str r2, [r3, #32]
  39415. huart->ErrorCode |= HAL_UART_ERROR_PE;
  39416. 8010c5c: 687b ldr r3, [r7, #4]
  39417. 8010c5e: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  39418. 8010c62: f043 0201 orr.w r2, r3, #1
  39419. 8010c66: 687b ldr r3, [r7, #4]
  39420. 8010c68: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  39421. }
  39422. /* UART frame error interrupt occurred --------------------------------------*/
  39423. if (((isrflags & USART_ISR_FE) != 0U) && ((cr3its & USART_CR3_EIE) != 0U))
  39424. 8010c6c: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  39425. 8010c70: f003 0302 and.w r3, r3, #2
  39426. 8010c74: 2b00 cmp r3, #0
  39427. 8010c76: d011 beq.n 8010c9c <HAL_UART_IRQHandler+0xf8>
  39428. 8010c78: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc
  39429. 8010c7c: f003 0301 and.w r3, r3, #1
  39430. 8010c80: 2b00 cmp r3, #0
  39431. 8010c82: d00b beq.n 8010c9c <HAL_UART_IRQHandler+0xf8>
  39432. {
  39433. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_FEF);
  39434. 8010c84: 687b ldr r3, [r7, #4]
  39435. 8010c86: 681b ldr r3, [r3, #0]
  39436. 8010c88: 2202 movs r2, #2
  39437. 8010c8a: 621a str r2, [r3, #32]
  39438. huart->ErrorCode |= HAL_UART_ERROR_FE;
  39439. 8010c8c: 687b ldr r3, [r7, #4]
  39440. 8010c8e: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  39441. 8010c92: f043 0204 orr.w r2, r3, #4
  39442. 8010c96: 687b ldr r3, [r7, #4]
  39443. 8010c98: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  39444. }
  39445. /* UART noise error interrupt occurred --------------------------------------*/
  39446. if (((isrflags & USART_ISR_NE) != 0U) && ((cr3its & USART_CR3_EIE) != 0U))
  39447. 8010c9c: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  39448. 8010ca0: f003 0304 and.w r3, r3, #4
  39449. 8010ca4: 2b00 cmp r3, #0
  39450. 8010ca6: d011 beq.n 8010ccc <HAL_UART_IRQHandler+0x128>
  39451. 8010ca8: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc
  39452. 8010cac: f003 0301 and.w r3, r3, #1
  39453. 8010cb0: 2b00 cmp r3, #0
  39454. 8010cb2: d00b beq.n 8010ccc <HAL_UART_IRQHandler+0x128>
  39455. {
  39456. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_NEF);
  39457. 8010cb4: 687b ldr r3, [r7, #4]
  39458. 8010cb6: 681b ldr r3, [r3, #0]
  39459. 8010cb8: 2204 movs r2, #4
  39460. 8010cba: 621a str r2, [r3, #32]
  39461. huart->ErrorCode |= HAL_UART_ERROR_NE;
  39462. 8010cbc: 687b ldr r3, [r7, #4]
  39463. 8010cbe: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  39464. 8010cc2: f043 0202 orr.w r2, r3, #2
  39465. 8010cc6: 687b ldr r3, [r7, #4]
  39466. 8010cc8: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  39467. }
  39468. /* UART Over-Run interrupt occurred -----------------------------------------*/
  39469. if (((isrflags & USART_ISR_ORE) != 0U)
  39470. 8010ccc: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  39471. 8010cd0: f003 0308 and.w r3, r3, #8
  39472. 8010cd4: 2b00 cmp r3, #0
  39473. 8010cd6: d017 beq.n 8010d08 <HAL_UART_IRQHandler+0x164>
  39474. && (((cr1its & USART_CR1_RXNEIE_RXFNEIE) != 0U) ||
  39475. 8010cd8: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  39476. 8010cdc: f003 0320 and.w r3, r3, #32
  39477. 8010ce0: 2b00 cmp r3, #0
  39478. 8010ce2: d105 bne.n 8010cf0 <HAL_UART_IRQHandler+0x14c>
  39479. ((cr3its & (USART_CR3_RXFTIE | USART_CR3_EIE)) != 0U)))
  39480. 8010ce4: f8d7 20dc ldr.w r2, [r7, #220] @ 0xdc
  39481. 8010ce8: 4b5c ldr r3, [pc, #368] @ (8010e5c <HAL_UART_IRQHandler+0x2b8>)
  39482. 8010cea: 4013 ands r3, r2
  39483. && (((cr1its & USART_CR1_RXNEIE_RXFNEIE) != 0U) ||
  39484. 8010cec: 2b00 cmp r3, #0
  39485. 8010cee: d00b beq.n 8010d08 <HAL_UART_IRQHandler+0x164>
  39486. {
  39487. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF);
  39488. 8010cf0: 687b ldr r3, [r7, #4]
  39489. 8010cf2: 681b ldr r3, [r3, #0]
  39490. 8010cf4: 2208 movs r2, #8
  39491. 8010cf6: 621a str r2, [r3, #32]
  39492. huart->ErrorCode |= HAL_UART_ERROR_ORE;
  39493. 8010cf8: 687b ldr r3, [r7, #4]
  39494. 8010cfa: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  39495. 8010cfe: f043 0208 orr.w r2, r3, #8
  39496. 8010d02: 687b ldr r3, [r7, #4]
  39497. 8010d04: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  39498. }
  39499. /* UART Receiver Timeout interrupt occurred ---------------------------------*/
  39500. if (((isrflags & USART_ISR_RTOF) != 0U) && ((cr1its & USART_CR1_RTOIE) != 0U))
  39501. 8010d08: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  39502. 8010d0c: f403 6300 and.w r3, r3, #2048 @ 0x800
  39503. 8010d10: 2b00 cmp r3, #0
  39504. 8010d12: d012 beq.n 8010d3a <HAL_UART_IRQHandler+0x196>
  39505. 8010d14: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  39506. 8010d18: f003 6380 and.w r3, r3, #67108864 @ 0x4000000
  39507. 8010d1c: 2b00 cmp r3, #0
  39508. 8010d1e: d00c beq.n 8010d3a <HAL_UART_IRQHandler+0x196>
  39509. {
  39510. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_RTOF);
  39511. 8010d20: 687b ldr r3, [r7, #4]
  39512. 8010d22: 681b ldr r3, [r3, #0]
  39513. 8010d24: f44f 6200 mov.w r2, #2048 @ 0x800
  39514. 8010d28: 621a str r2, [r3, #32]
  39515. huart->ErrorCode |= HAL_UART_ERROR_RTO;
  39516. 8010d2a: 687b ldr r3, [r7, #4]
  39517. 8010d2c: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  39518. 8010d30: f043 0220 orr.w r2, r3, #32
  39519. 8010d34: 687b ldr r3, [r7, #4]
  39520. 8010d36: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  39521. }
  39522. /* Call UART Error Call back function if need be ----------------------------*/
  39523. if (huart->ErrorCode != HAL_UART_ERROR_NONE)
  39524. 8010d3a: 687b ldr r3, [r7, #4]
  39525. 8010d3c: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  39526. 8010d40: 2b00 cmp r3, #0
  39527. 8010d42: f000 82dd beq.w 8011300 <HAL_UART_IRQHandler+0x75c>
  39528. {
  39529. /* UART in mode Receiver --------------------------------------------------*/
  39530. if (((isrflags & USART_ISR_RXNE_RXFNE) != 0U)
  39531. 8010d46: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  39532. 8010d4a: f003 0320 and.w r3, r3, #32
  39533. 8010d4e: 2b00 cmp r3, #0
  39534. 8010d50: d013 beq.n 8010d7a <HAL_UART_IRQHandler+0x1d6>
  39535. && (((cr1its & USART_CR1_RXNEIE_RXFNEIE) != 0U)
  39536. 8010d52: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  39537. 8010d56: f003 0320 and.w r3, r3, #32
  39538. 8010d5a: 2b00 cmp r3, #0
  39539. 8010d5c: d105 bne.n 8010d6a <HAL_UART_IRQHandler+0x1c6>
  39540. || ((cr3its & USART_CR3_RXFTIE) != 0U)))
  39541. 8010d5e: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc
  39542. 8010d62: f003 5380 and.w r3, r3, #268435456 @ 0x10000000
  39543. 8010d66: 2b00 cmp r3, #0
  39544. 8010d68: d007 beq.n 8010d7a <HAL_UART_IRQHandler+0x1d6>
  39545. {
  39546. if (huart->RxISR != NULL)
  39547. 8010d6a: 687b ldr r3, [r7, #4]
  39548. 8010d6c: 6f5b ldr r3, [r3, #116] @ 0x74
  39549. 8010d6e: 2b00 cmp r3, #0
  39550. 8010d70: d003 beq.n 8010d7a <HAL_UART_IRQHandler+0x1d6>
  39551. {
  39552. huart->RxISR(huart);
  39553. 8010d72: 687b ldr r3, [r7, #4]
  39554. 8010d74: 6f5b ldr r3, [r3, #116] @ 0x74
  39555. 8010d76: 6878 ldr r0, [r7, #4]
  39556. 8010d78: 4798 blx r3
  39557. /* If Error is to be considered as blocking :
  39558. - Receiver Timeout error in Reception
  39559. - Overrun error in Reception
  39560. - any error occurs in DMA mode reception
  39561. */
  39562. errorcode = huart->ErrorCode;
  39563. 8010d7a: 687b ldr r3, [r7, #4]
  39564. 8010d7c: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  39565. 8010d80: f8c7 30d4 str.w r3, [r7, #212] @ 0xd4
  39566. if ((HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) ||
  39567. 8010d84: 687b ldr r3, [r7, #4]
  39568. 8010d86: 681b ldr r3, [r3, #0]
  39569. 8010d88: 689b ldr r3, [r3, #8]
  39570. 8010d8a: f003 0340 and.w r3, r3, #64 @ 0x40
  39571. 8010d8e: 2b40 cmp r3, #64 @ 0x40
  39572. 8010d90: d005 beq.n 8010d9e <HAL_UART_IRQHandler+0x1fa>
  39573. ((errorcode & (HAL_UART_ERROR_RTO | HAL_UART_ERROR_ORE)) != 0U))
  39574. 8010d92: f8d7 30d4 ldr.w r3, [r7, #212] @ 0xd4
  39575. 8010d96: f003 0328 and.w r3, r3, #40 @ 0x28
  39576. if ((HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) ||
  39577. 8010d9a: 2b00 cmp r3, #0
  39578. 8010d9c: d054 beq.n 8010e48 <HAL_UART_IRQHandler+0x2a4>
  39579. {
  39580. /* Blocking error : transfer is aborted
  39581. Set the UART state ready to be able to start again the process,
  39582. Disable Rx Interrupts, and disable Rx DMA request, if ongoing */
  39583. UART_EndRxTransfer(huart);
  39584. 8010d9e: 6878 ldr r0, [r7, #4]
  39585. 8010da0: f001 fb08 bl 80123b4 <UART_EndRxTransfer>
  39586. /* Abort the UART DMA Rx channel if enabled */
  39587. if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))
  39588. 8010da4: 687b ldr r3, [r7, #4]
  39589. 8010da6: 681b ldr r3, [r3, #0]
  39590. 8010da8: 689b ldr r3, [r3, #8]
  39591. 8010daa: f003 0340 and.w r3, r3, #64 @ 0x40
  39592. 8010dae: 2b40 cmp r3, #64 @ 0x40
  39593. 8010db0: d146 bne.n 8010e40 <HAL_UART_IRQHandler+0x29c>
  39594. {
  39595. /* Disable the UART DMA Rx request if enabled */
  39596. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR);
  39597. 8010db2: 687b ldr r3, [r7, #4]
  39598. 8010db4: 681b ldr r3, [r3, #0]
  39599. 8010db6: 3308 adds r3, #8
  39600. 8010db8: f8c7 309c str.w r3, [r7, #156] @ 0x9c
  39601. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  39602. 8010dbc: f8d7 309c ldr.w r3, [r7, #156] @ 0x9c
  39603. 8010dc0: e853 3f00 ldrex r3, [r3]
  39604. 8010dc4: f8c7 3098 str.w r3, [r7, #152] @ 0x98
  39605. return(result);
  39606. 8010dc8: f8d7 3098 ldr.w r3, [r7, #152] @ 0x98
  39607. 8010dcc: f023 0340 bic.w r3, r3, #64 @ 0x40
  39608. 8010dd0: f8c7 30d0 str.w r3, [r7, #208] @ 0xd0
  39609. 8010dd4: 687b ldr r3, [r7, #4]
  39610. 8010dd6: 681b ldr r3, [r3, #0]
  39611. 8010dd8: 3308 adds r3, #8
  39612. 8010dda: f8d7 20d0 ldr.w r2, [r7, #208] @ 0xd0
  39613. 8010dde: f8c7 20a8 str.w r2, [r7, #168] @ 0xa8
  39614. 8010de2: f8c7 30a4 str.w r3, [r7, #164] @ 0xa4
  39615. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  39616. 8010de6: f8d7 10a4 ldr.w r1, [r7, #164] @ 0xa4
  39617. 8010dea: f8d7 20a8 ldr.w r2, [r7, #168] @ 0xa8
  39618. 8010dee: e841 2300 strex r3, r2, [r1]
  39619. 8010df2: f8c7 30a0 str.w r3, [r7, #160] @ 0xa0
  39620. return(result);
  39621. 8010df6: f8d7 30a0 ldr.w r3, [r7, #160] @ 0xa0
  39622. 8010dfa: 2b00 cmp r3, #0
  39623. 8010dfc: d1d9 bne.n 8010db2 <HAL_UART_IRQHandler+0x20e>
  39624. /* Abort the UART DMA Rx channel */
  39625. if (huart->hdmarx != NULL)
  39626. 8010dfe: 687b ldr r3, [r7, #4]
  39627. 8010e00: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39628. 8010e04: 2b00 cmp r3, #0
  39629. 8010e06: d017 beq.n 8010e38 <HAL_UART_IRQHandler+0x294>
  39630. {
  39631. /* Set the UART DMA Abort callback :
  39632. will lead to call HAL_UART_ErrorCallback() at end of DMA abort procedure */
  39633. huart->hdmarx->XferAbortCallback = UART_DMAAbortOnError;
  39634. 8010e08: 687b ldr r3, [r7, #4]
  39635. 8010e0a: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39636. 8010e0e: 4a15 ldr r2, [pc, #84] @ (8010e64 <HAL_UART_IRQHandler+0x2c0>)
  39637. 8010e10: 651a str r2, [r3, #80] @ 0x50
  39638. /* Abort DMA RX */
  39639. if (HAL_DMA_Abort_IT(huart->hdmarx) != HAL_OK)
  39640. 8010e12: 687b ldr r3, [r7, #4]
  39641. 8010e14: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39642. 8010e18: 4618 mov r0, r3
  39643. 8010e1a: f7f7 ff5f bl 8008cdc <HAL_DMA_Abort_IT>
  39644. 8010e1e: 4603 mov r3, r0
  39645. 8010e20: 2b00 cmp r3, #0
  39646. 8010e22: d019 beq.n 8010e58 <HAL_UART_IRQHandler+0x2b4>
  39647. {
  39648. /* Call Directly huart->hdmarx->XferAbortCallback function in case of error */
  39649. huart->hdmarx->XferAbortCallback(huart->hdmarx);
  39650. 8010e24: 687b ldr r3, [r7, #4]
  39651. 8010e26: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39652. 8010e2a: 6d1b ldr r3, [r3, #80] @ 0x50
  39653. 8010e2c: 687a ldr r2, [r7, #4]
  39654. 8010e2e: f8d2 2080 ldr.w r2, [r2, #128] @ 0x80
  39655. 8010e32: 4610 mov r0, r2
  39656. 8010e34: 4798 blx r3
  39657. if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))
  39658. 8010e36: e00f b.n 8010e58 <HAL_UART_IRQHandler+0x2b4>
  39659. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  39660. /*Call registered error callback*/
  39661. huart->ErrorCallback(huart);
  39662. #else
  39663. /*Call legacy weak error callback*/
  39664. HAL_UART_ErrorCallback(huart);
  39665. 8010e38: 6878 ldr r0, [r7, #4]
  39666. 8010e3a: f000 fa6d bl 8011318 <HAL_UART_ErrorCallback>
  39667. if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))
  39668. 8010e3e: e00b b.n 8010e58 <HAL_UART_IRQHandler+0x2b4>
  39669. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  39670. /*Call registered error callback*/
  39671. huart->ErrorCallback(huart);
  39672. #else
  39673. /*Call legacy weak error callback*/
  39674. HAL_UART_ErrorCallback(huart);
  39675. 8010e40: 6878 ldr r0, [r7, #4]
  39676. 8010e42: f000 fa69 bl 8011318 <HAL_UART_ErrorCallback>
  39677. if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))
  39678. 8010e46: e007 b.n 8010e58 <HAL_UART_IRQHandler+0x2b4>
  39679. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  39680. /*Call registered error callback*/
  39681. huart->ErrorCallback(huart);
  39682. #else
  39683. /*Call legacy weak error callback*/
  39684. HAL_UART_ErrorCallback(huart);
  39685. 8010e48: 6878 ldr r0, [r7, #4]
  39686. 8010e4a: f000 fa65 bl 8011318 <HAL_UART_ErrorCallback>
  39687. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  39688. huart->ErrorCode = HAL_UART_ERROR_NONE;
  39689. 8010e4e: 687b ldr r3, [r7, #4]
  39690. 8010e50: 2200 movs r2, #0
  39691. 8010e52: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  39692. }
  39693. }
  39694. return;
  39695. 8010e56: e253 b.n 8011300 <HAL_UART_IRQHandler+0x75c>
  39696. if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))
  39697. 8010e58: bf00 nop
  39698. return;
  39699. 8010e5a: e251 b.n 8011300 <HAL_UART_IRQHandler+0x75c>
  39700. 8010e5c: 10000001 .word 0x10000001
  39701. 8010e60: 04000120 .word 0x04000120
  39702. 8010e64: 08012481 .word 0x08012481
  39703. } /* End if some error occurs */
  39704. /* Check current reception Mode :
  39705. If Reception till IDLE event has been selected : */
  39706. if ((huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
  39707. 8010e68: 687b ldr r3, [r7, #4]
  39708. 8010e6a: 6edb ldr r3, [r3, #108] @ 0x6c
  39709. 8010e6c: 2b01 cmp r3, #1
  39710. 8010e6e: f040 81e7 bne.w 8011240 <HAL_UART_IRQHandler+0x69c>
  39711. && ((isrflags & USART_ISR_IDLE) != 0U)
  39712. 8010e72: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  39713. 8010e76: f003 0310 and.w r3, r3, #16
  39714. 8010e7a: 2b00 cmp r3, #0
  39715. 8010e7c: f000 81e0 beq.w 8011240 <HAL_UART_IRQHandler+0x69c>
  39716. && ((cr1its & USART_ISR_IDLE) != 0U))
  39717. 8010e80: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  39718. 8010e84: f003 0310 and.w r3, r3, #16
  39719. 8010e88: 2b00 cmp r3, #0
  39720. 8010e8a: f000 81d9 beq.w 8011240 <HAL_UART_IRQHandler+0x69c>
  39721. {
  39722. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_IDLEF);
  39723. 8010e8e: 687b ldr r3, [r7, #4]
  39724. 8010e90: 681b ldr r3, [r3, #0]
  39725. 8010e92: 2210 movs r2, #16
  39726. 8010e94: 621a str r2, [r3, #32]
  39727. /* Check if DMA mode is enabled in UART */
  39728. if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))
  39729. 8010e96: 687b ldr r3, [r7, #4]
  39730. 8010e98: 681b ldr r3, [r3, #0]
  39731. 8010e9a: 689b ldr r3, [r3, #8]
  39732. 8010e9c: f003 0340 and.w r3, r3, #64 @ 0x40
  39733. 8010ea0: 2b40 cmp r3, #64 @ 0x40
  39734. 8010ea2: f040 8151 bne.w 8011148 <HAL_UART_IRQHandler+0x5a4>
  39735. {
  39736. /* DMA mode enabled */
  39737. /* Check received length : If all expected data are received, do nothing,
  39738. (DMA cplt callback will be called).
  39739. Otherwise, if at least one data has already been received, IDLE event is to be notified to user */
  39740. uint16_t nb_remaining_rx_data = (uint16_t) __HAL_DMA_GET_COUNTER(huart->hdmarx);
  39741. 8010ea6: 687b ldr r3, [r7, #4]
  39742. 8010ea8: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39743. 8010eac: 681b ldr r3, [r3, #0]
  39744. 8010eae: 4a96 ldr r2, [pc, #600] @ (8011108 <HAL_UART_IRQHandler+0x564>)
  39745. 8010eb0: 4293 cmp r3, r2
  39746. 8010eb2: d068 beq.n 8010f86 <HAL_UART_IRQHandler+0x3e2>
  39747. 8010eb4: 687b ldr r3, [r7, #4]
  39748. 8010eb6: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39749. 8010eba: 681b ldr r3, [r3, #0]
  39750. 8010ebc: 4a93 ldr r2, [pc, #588] @ (801110c <HAL_UART_IRQHandler+0x568>)
  39751. 8010ebe: 4293 cmp r3, r2
  39752. 8010ec0: d061 beq.n 8010f86 <HAL_UART_IRQHandler+0x3e2>
  39753. 8010ec2: 687b ldr r3, [r7, #4]
  39754. 8010ec4: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39755. 8010ec8: 681b ldr r3, [r3, #0]
  39756. 8010eca: 4a91 ldr r2, [pc, #580] @ (8011110 <HAL_UART_IRQHandler+0x56c>)
  39757. 8010ecc: 4293 cmp r3, r2
  39758. 8010ece: d05a beq.n 8010f86 <HAL_UART_IRQHandler+0x3e2>
  39759. 8010ed0: 687b ldr r3, [r7, #4]
  39760. 8010ed2: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39761. 8010ed6: 681b ldr r3, [r3, #0]
  39762. 8010ed8: 4a8e ldr r2, [pc, #568] @ (8011114 <HAL_UART_IRQHandler+0x570>)
  39763. 8010eda: 4293 cmp r3, r2
  39764. 8010edc: d053 beq.n 8010f86 <HAL_UART_IRQHandler+0x3e2>
  39765. 8010ede: 687b ldr r3, [r7, #4]
  39766. 8010ee0: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39767. 8010ee4: 681b ldr r3, [r3, #0]
  39768. 8010ee6: 4a8c ldr r2, [pc, #560] @ (8011118 <HAL_UART_IRQHandler+0x574>)
  39769. 8010ee8: 4293 cmp r3, r2
  39770. 8010eea: d04c beq.n 8010f86 <HAL_UART_IRQHandler+0x3e2>
  39771. 8010eec: 687b ldr r3, [r7, #4]
  39772. 8010eee: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39773. 8010ef2: 681b ldr r3, [r3, #0]
  39774. 8010ef4: 4a89 ldr r2, [pc, #548] @ (801111c <HAL_UART_IRQHandler+0x578>)
  39775. 8010ef6: 4293 cmp r3, r2
  39776. 8010ef8: d045 beq.n 8010f86 <HAL_UART_IRQHandler+0x3e2>
  39777. 8010efa: 687b ldr r3, [r7, #4]
  39778. 8010efc: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39779. 8010f00: 681b ldr r3, [r3, #0]
  39780. 8010f02: 4a87 ldr r2, [pc, #540] @ (8011120 <HAL_UART_IRQHandler+0x57c>)
  39781. 8010f04: 4293 cmp r3, r2
  39782. 8010f06: d03e beq.n 8010f86 <HAL_UART_IRQHandler+0x3e2>
  39783. 8010f08: 687b ldr r3, [r7, #4]
  39784. 8010f0a: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39785. 8010f0e: 681b ldr r3, [r3, #0]
  39786. 8010f10: 4a84 ldr r2, [pc, #528] @ (8011124 <HAL_UART_IRQHandler+0x580>)
  39787. 8010f12: 4293 cmp r3, r2
  39788. 8010f14: d037 beq.n 8010f86 <HAL_UART_IRQHandler+0x3e2>
  39789. 8010f16: 687b ldr r3, [r7, #4]
  39790. 8010f18: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39791. 8010f1c: 681b ldr r3, [r3, #0]
  39792. 8010f1e: 4a82 ldr r2, [pc, #520] @ (8011128 <HAL_UART_IRQHandler+0x584>)
  39793. 8010f20: 4293 cmp r3, r2
  39794. 8010f22: d030 beq.n 8010f86 <HAL_UART_IRQHandler+0x3e2>
  39795. 8010f24: 687b ldr r3, [r7, #4]
  39796. 8010f26: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39797. 8010f2a: 681b ldr r3, [r3, #0]
  39798. 8010f2c: 4a7f ldr r2, [pc, #508] @ (801112c <HAL_UART_IRQHandler+0x588>)
  39799. 8010f2e: 4293 cmp r3, r2
  39800. 8010f30: d029 beq.n 8010f86 <HAL_UART_IRQHandler+0x3e2>
  39801. 8010f32: 687b ldr r3, [r7, #4]
  39802. 8010f34: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39803. 8010f38: 681b ldr r3, [r3, #0]
  39804. 8010f3a: 4a7d ldr r2, [pc, #500] @ (8011130 <HAL_UART_IRQHandler+0x58c>)
  39805. 8010f3c: 4293 cmp r3, r2
  39806. 8010f3e: d022 beq.n 8010f86 <HAL_UART_IRQHandler+0x3e2>
  39807. 8010f40: 687b ldr r3, [r7, #4]
  39808. 8010f42: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39809. 8010f46: 681b ldr r3, [r3, #0]
  39810. 8010f48: 4a7a ldr r2, [pc, #488] @ (8011134 <HAL_UART_IRQHandler+0x590>)
  39811. 8010f4a: 4293 cmp r3, r2
  39812. 8010f4c: d01b beq.n 8010f86 <HAL_UART_IRQHandler+0x3e2>
  39813. 8010f4e: 687b ldr r3, [r7, #4]
  39814. 8010f50: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39815. 8010f54: 681b ldr r3, [r3, #0]
  39816. 8010f56: 4a78 ldr r2, [pc, #480] @ (8011138 <HAL_UART_IRQHandler+0x594>)
  39817. 8010f58: 4293 cmp r3, r2
  39818. 8010f5a: d014 beq.n 8010f86 <HAL_UART_IRQHandler+0x3e2>
  39819. 8010f5c: 687b ldr r3, [r7, #4]
  39820. 8010f5e: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39821. 8010f62: 681b ldr r3, [r3, #0]
  39822. 8010f64: 4a75 ldr r2, [pc, #468] @ (801113c <HAL_UART_IRQHandler+0x598>)
  39823. 8010f66: 4293 cmp r3, r2
  39824. 8010f68: d00d beq.n 8010f86 <HAL_UART_IRQHandler+0x3e2>
  39825. 8010f6a: 687b ldr r3, [r7, #4]
  39826. 8010f6c: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39827. 8010f70: 681b ldr r3, [r3, #0]
  39828. 8010f72: 4a73 ldr r2, [pc, #460] @ (8011140 <HAL_UART_IRQHandler+0x59c>)
  39829. 8010f74: 4293 cmp r3, r2
  39830. 8010f76: d006 beq.n 8010f86 <HAL_UART_IRQHandler+0x3e2>
  39831. 8010f78: 687b ldr r3, [r7, #4]
  39832. 8010f7a: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39833. 8010f7e: 681b ldr r3, [r3, #0]
  39834. 8010f80: 4a70 ldr r2, [pc, #448] @ (8011144 <HAL_UART_IRQHandler+0x5a0>)
  39835. 8010f82: 4293 cmp r3, r2
  39836. 8010f84: d106 bne.n 8010f94 <HAL_UART_IRQHandler+0x3f0>
  39837. 8010f86: 687b ldr r3, [r7, #4]
  39838. 8010f88: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39839. 8010f8c: 681b ldr r3, [r3, #0]
  39840. 8010f8e: 685b ldr r3, [r3, #4]
  39841. 8010f90: b29b uxth r3, r3
  39842. 8010f92: e005 b.n 8010fa0 <HAL_UART_IRQHandler+0x3fc>
  39843. 8010f94: 687b ldr r3, [r7, #4]
  39844. 8010f96: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39845. 8010f9a: 681b ldr r3, [r3, #0]
  39846. 8010f9c: 685b ldr r3, [r3, #4]
  39847. 8010f9e: b29b uxth r3, r3
  39848. 8010fa0: f8a7 30be strh.w r3, [r7, #190] @ 0xbe
  39849. if ((nb_remaining_rx_data > 0U)
  39850. 8010fa4: f8b7 30be ldrh.w r3, [r7, #190] @ 0xbe
  39851. 8010fa8: 2b00 cmp r3, #0
  39852. 8010faa: f000 81ab beq.w 8011304 <HAL_UART_IRQHandler+0x760>
  39853. && (nb_remaining_rx_data < huart->RxXferSize))
  39854. 8010fae: 687b ldr r3, [r7, #4]
  39855. 8010fb0: f8b3 305c ldrh.w r3, [r3, #92] @ 0x5c
  39856. 8010fb4: f8b7 20be ldrh.w r2, [r7, #190] @ 0xbe
  39857. 8010fb8: 429a cmp r2, r3
  39858. 8010fba: f080 81a3 bcs.w 8011304 <HAL_UART_IRQHandler+0x760>
  39859. {
  39860. /* Reception is not complete */
  39861. huart->RxXferCount = nb_remaining_rx_data;
  39862. 8010fbe: 687b ldr r3, [r7, #4]
  39863. 8010fc0: f8b7 20be ldrh.w r2, [r7, #190] @ 0xbe
  39864. 8010fc4: f8a3 205e strh.w r2, [r3, #94] @ 0x5e
  39865. /* In Normal mode, end DMA xfer and HAL UART Rx process*/
  39866. if (huart->hdmarx->Init.Mode != DMA_CIRCULAR)
  39867. 8010fc8: 687b ldr r3, [r7, #4]
  39868. 8010fca: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39869. 8010fce: 69db ldr r3, [r3, #28]
  39870. 8010fd0: f5b3 7f80 cmp.w r3, #256 @ 0x100
  39871. 8010fd4: f000 8087 beq.w 80110e6 <HAL_UART_IRQHandler+0x542>
  39872. {
  39873. /* Disable PE and ERR (Frame error, noise error, overrun error) interrupts */
  39874. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_PEIE);
  39875. 8010fd8: 687b ldr r3, [r7, #4]
  39876. 8010fda: 681b ldr r3, [r3, #0]
  39877. 8010fdc: f8c7 3088 str.w r3, [r7, #136] @ 0x88
  39878. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  39879. 8010fe0: f8d7 3088 ldr.w r3, [r7, #136] @ 0x88
  39880. 8010fe4: e853 3f00 ldrex r3, [r3]
  39881. 8010fe8: f8c7 3084 str.w r3, [r7, #132] @ 0x84
  39882. return(result);
  39883. 8010fec: f8d7 3084 ldr.w r3, [r7, #132] @ 0x84
  39884. 8010ff0: f423 7380 bic.w r3, r3, #256 @ 0x100
  39885. 8010ff4: f8c7 30b8 str.w r3, [r7, #184] @ 0xb8
  39886. 8010ff8: 687b ldr r3, [r7, #4]
  39887. 8010ffa: 681b ldr r3, [r3, #0]
  39888. 8010ffc: 461a mov r2, r3
  39889. 8010ffe: f8d7 30b8 ldr.w r3, [r7, #184] @ 0xb8
  39890. 8011002: f8c7 3094 str.w r3, [r7, #148] @ 0x94
  39891. 8011006: f8c7 2090 str.w r2, [r7, #144] @ 0x90
  39892. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  39893. 801100a: f8d7 1090 ldr.w r1, [r7, #144] @ 0x90
  39894. 801100e: f8d7 2094 ldr.w r2, [r7, #148] @ 0x94
  39895. 8011012: e841 2300 strex r3, r2, [r1]
  39896. 8011016: f8c7 308c str.w r3, [r7, #140] @ 0x8c
  39897. return(result);
  39898. 801101a: f8d7 308c ldr.w r3, [r7, #140] @ 0x8c
  39899. 801101e: 2b00 cmp r3, #0
  39900. 8011020: d1da bne.n 8010fd8 <HAL_UART_IRQHandler+0x434>
  39901. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);
  39902. 8011022: 687b ldr r3, [r7, #4]
  39903. 8011024: 681b ldr r3, [r3, #0]
  39904. 8011026: 3308 adds r3, #8
  39905. 8011028: 677b str r3, [r7, #116] @ 0x74
  39906. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  39907. 801102a: 6f7b ldr r3, [r7, #116] @ 0x74
  39908. 801102c: e853 3f00 ldrex r3, [r3]
  39909. 8011030: 673b str r3, [r7, #112] @ 0x70
  39910. return(result);
  39911. 8011032: 6f3b ldr r3, [r7, #112] @ 0x70
  39912. 8011034: f023 0301 bic.w r3, r3, #1
  39913. 8011038: f8c7 30b4 str.w r3, [r7, #180] @ 0xb4
  39914. 801103c: 687b ldr r3, [r7, #4]
  39915. 801103e: 681b ldr r3, [r3, #0]
  39916. 8011040: 3308 adds r3, #8
  39917. 8011042: f8d7 20b4 ldr.w r2, [r7, #180] @ 0xb4
  39918. 8011046: f8c7 2080 str.w r2, [r7, #128] @ 0x80
  39919. 801104a: 67fb str r3, [r7, #124] @ 0x7c
  39920. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  39921. 801104c: 6ff9 ldr r1, [r7, #124] @ 0x7c
  39922. 801104e: f8d7 2080 ldr.w r2, [r7, #128] @ 0x80
  39923. 8011052: e841 2300 strex r3, r2, [r1]
  39924. 8011056: 67bb str r3, [r7, #120] @ 0x78
  39925. return(result);
  39926. 8011058: 6fbb ldr r3, [r7, #120] @ 0x78
  39927. 801105a: 2b00 cmp r3, #0
  39928. 801105c: d1e1 bne.n 8011022 <HAL_UART_IRQHandler+0x47e>
  39929. /* Disable the DMA transfer for the receiver request by resetting the DMAR bit
  39930. in the UART CR3 register */
  39931. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR);
  39932. 801105e: 687b ldr r3, [r7, #4]
  39933. 8011060: 681b ldr r3, [r3, #0]
  39934. 8011062: 3308 adds r3, #8
  39935. 8011064: 663b str r3, [r7, #96] @ 0x60
  39936. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  39937. 8011066: 6e3b ldr r3, [r7, #96] @ 0x60
  39938. 8011068: e853 3f00 ldrex r3, [r3]
  39939. 801106c: 65fb str r3, [r7, #92] @ 0x5c
  39940. return(result);
  39941. 801106e: 6dfb ldr r3, [r7, #92] @ 0x5c
  39942. 8011070: f023 0340 bic.w r3, r3, #64 @ 0x40
  39943. 8011074: f8c7 30b0 str.w r3, [r7, #176] @ 0xb0
  39944. 8011078: 687b ldr r3, [r7, #4]
  39945. 801107a: 681b ldr r3, [r3, #0]
  39946. 801107c: 3308 adds r3, #8
  39947. 801107e: f8d7 20b0 ldr.w r2, [r7, #176] @ 0xb0
  39948. 8011082: 66fa str r2, [r7, #108] @ 0x6c
  39949. 8011084: 66bb str r3, [r7, #104] @ 0x68
  39950. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  39951. 8011086: 6eb9 ldr r1, [r7, #104] @ 0x68
  39952. 8011088: 6efa ldr r2, [r7, #108] @ 0x6c
  39953. 801108a: e841 2300 strex r3, r2, [r1]
  39954. 801108e: 667b str r3, [r7, #100] @ 0x64
  39955. return(result);
  39956. 8011090: 6e7b ldr r3, [r7, #100] @ 0x64
  39957. 8011092: 2b00 cmp r3, #0
  39958. 8011094: d1e3 bne.n 801105e <HAL_UART_IRQHandler+0x4ba>
  39959. /* At end of Rx process, restore huart->RxState to Ready */
  39960. huart->RxState = HAL_UART_STATE_READY;
  39961. 8011096: 687b ldr r3, [r7, #4]
  39962. 8011098: 2220 movs r2, #32
  39963. 801109a: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  39964. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  39965. 801109e: 687b ldr r3, [r7, #4]
  39966. 80110a0: 2200 movs r2, #0
  39967. 80110a2: 66da str r2, [r3, #108] @ 0x6c
  39968. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  39969. 80110a4: 687b ldr r3, [r7, #4]
  39970. 80110a6: 681b ldr r3, [r3, #0]
  39971. 80110a8: 64fb str r3, [r7, #76] @ 0x4c
  39972. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  39973. 80110aa: 6cfb ldr r3, [r7, #76] @ 0x4c
  39974. 80110ac: e853 3f00 ldrex r3, [r3]
  39975. 80110b0: 64bb str r3, [r7, #72] @ 0x48
  39976. return(result);
  39977. 80110b2: 6cbb ldr r3, [r7, #72] @ 0x48
  39978. 80110b4: f023 0310 bic.w r3, r3, #16
  39979. 80110b8: f8c7 30ac str.w r3, [r7, #172] @ 0xac
  39980. 80110bc: 687b ldr r3, [r7, #4]
  39981. 80110be: 681b ldr r3, [r3, #0]
  39982. 80110c0: 461a mov r2, r3
  39983. 80110c2: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac
  39984. 80110c6: 65bb str r3, [r7, #88] @ 0x58
  39985. 80110c8: 657a str r2, [r7, #84] @ 0x54
  39986. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  39987. 80110ca: 6d79 ldr r1, [r7, #84] @ 0x54
  39988. 80110cc: 6dba ldr r2, [r7, #88] @ 0x58
  39989. 80110ce: e841 2300 strex r3, r2, [r1]
  39990. 80110d2: 653b str r3, [r7, #80] @ 0x50
  39991. return(result);
  39992. 80110d4: 6d3b ldr r3, [r7, #80] @ 0x50
  39993. 80110d6: 2b00 cmp r3, #0
  39994. 80110d8: d1e4 bne.n 80110a4 <HAL_UART_IRQHandler+0x500>
  39995. /* Last bytes received, so no need as the abort is immediate */
  39996. (void)HAL_DMA_Abort(huart->hdmarx);
  39997. 80110da: 687b ldr r3, [r7, #4]
  39998. 80110dc: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39999. 80110e0: 4618 mov r0, r3
  40000. 80110e2: f7f7 fadd bl 80086a0 <HAL_DMA_Abort>
  40001. }
  40002. /* Initialize type of RxEvent that correspond to RxEvent callback execution;
  40003. In this case, Rx Event type is Idle Event */
  40004. huart->RxEventType = HAL_UART_RXEVENT_IDLE;
  40005. 80110e6: 687b ldr r3, [r7, #4]
  40006. 80110e8: 2202 movs r2, #2
  40007. 80110ea: 671a str r2, [r3, #112] @ 0x70
  40008. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  40009. /*Call registered Rx Event callback*/
  40010. huart->RxEventCallback(huart, (huart->RxXferSize - huart->RxXferCount));
  40011. #else
  40012. /*Call legacy weak Rx Event callback*/
  40013. HAL_UARTEx_RxEventCallback(huart, (huart->RxXferSize - huart->RxXferCount));
  40014. 80110ec: 687b ldr r3, [r7, #4]
  40015. 80110ee: f8b3 205c ldrh.w r2, [r3, #92] @ 0x5c
  40016. 80110f2: 687b ldr r3, [r7, #4]
  40017. 80110f4: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  40018. 80110f8: b29b uxth r3, r3
  40019. 80110fa: 1ad3 subs r3, r2, r3
  40020. 80110fc: b29b uxth r3, r3
  40021. 80110fe: 4619 mov r1, r3
  40022. 8011100: 6878 ldr r0, [r7, #4]
  40023. 8011102: f7f3 f8d7 bl 80042b4 <HAL_UARTEx_RxEventCallback>
  40024. #endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */
  40025. }
  40026. return;
  40027. 8011106: e0fd b.n 8011304 <HAL_UART_IRQHandler+0x760>
  40028. 8011108: 40020010 .word 0x40020010
  40029. 801110c: 40020028 .word 0x40020028
  40030. 8011110: 40020040 .word 0x40020040
  40031. 8011114: 40020058 .word 0x40020058
  40032. 8011118: 40020070 .word 0x40020070
  40033. 801111c: 40020088 .word 0x40020088
  40034. 8011120: 400200a0 .word 0x400200a0
  40035. 8011124: 400200b8 .word 0x400200b8
  40036. 8011128: 40020410 .word 0x40020410
  40037. 801112c: 40020428 .word 0x40020428
  40038. 8011130: 40020440 .word 0x40020440
  40039. 8011134: 40020458 .word 0x40020458
  40040. 8011138: 40020470 .word 0x40020470
  40041. 801113c: 40020488 .word 0x40020488
  40042. 8011140: 400204a0 .word 0x400204a0
  40043. 8011144: 400204b8 .word 0x400204b8
  40044. else
  40045. {
  40046. /* DMA mode not enabled */
  40047. /* Check received length : If all expected data are received, do nothing.
  40048. Otherwise, if at least one data has already been received, IDLE event is to be notified to user */
  40049. uint16_t nb_rx_data = huart->RxXferSize - huart->RxXferCount;
  40050. 8011148: 687b ldr r3, [r7, #4]
  40051. 801114a: f8b3 205c ldrh.w r2, [r3, #92] @ 0x5c
  40052. 801114e: 687b ldr r3, [r7, #4]
  40053. 8011150: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  40054. 8011154: b29b uxth r3, r3
  40055. 8011156: 1ad3 subs r3, r2, r3
  40056. 8011158: f8a7 30ce strh.w r3, [r7, #206] @ 0xce
  40057. if ((huart->RxXferCount > 0U)
  40058. 801115c: 687b ldr r3, [r7, #4]
  40059. 801115e: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  40060. 8011162: b29b uxth r3, r3
  40061. 8011164: 2b00 cmp r3, #0
  40062. 8011166: f000 80cf beq.w 8011308 <HAL_UART_IRQHandler+0x764>
  40063. && (nb_rx_data > 0U))
  40064. 801116a: f8b7 30ce ldrh.w r3, [r7, #206] @ 0xce
  40065. 801116e: 2b00 cmp r3, #0
  40066. 8011170: f000 80ca beq.w 8011308 <HAL_UART_IRQHandler+0x764>
  40067. {
  40068. /* Disable the UART Parity Error Interrupt and RXNE interrupts */
  40069. ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE));
  40070. 8011174: 687b ldr r3, [r7, #4]
  40071. 8011176: 681b ldr r3, [r3, #0]
  40072. 8011178: 63bb str r3, [r7, #56] @ 0x38
  40073. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  40074. 801117a: 6bbb ldr r3, [r7, #56] @ 0x38
  40075. 801117c: e853 3f00 ldrex r3, [r3]
  40076. 8011180: 637b str r3, [r7, #52] @ 0x34
  40077. return(result);
  40078. 8011182: 6b7b ldr r3, [r7, #52] @ 0x34
  40079. 8011184: f423 7390 bic.w r3, r3, #288 @ 0x120
  40080. 8011188: f8c7 30c8 str.w r3, [r7, #200] @ 0xc8
  40081. 801118c: 687b ldr r3, [r7, #4]
  40082. 801118e: 681b ldr r3, [r3, #0]
  40083. 8011190: 461a mov r2, r3
  40084. 8011192: f8d7 30c8 ldr.w r3, [r7, #200] @ 0xc8
  40085. 8011196: 647b str r3, [r7, #68] @ 0x44
  40086. 8011198: 643a str r2, [r7, #64] @ 0x40
  40087. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  40088. 801119a: 6c39 ldr r1, [r7, #64] @ 0x40
  40089. 801119c: 6c7a ldr r2, [r7, #68] @ 0x44
  40090. 801119e: e841 2300 strex r3, r2, [r1]
  40091. 80111a2: 63fb str r3, [r7, #60] @ 0x3c
  40092. return(result);
  40093. 80111a4: 6bfb ldr r3, [r7, #60] @ 0x3c
  40094. 80111a6: 2b00 cmp r3, #0
  40095. 80111a8: d1e4 bne.n 8011174 <HAL_UART_IRQHandler+0x5d0>
  40096. /* Disable the UART Error Interrupt:(Frame error, noise error, overrun error) and RX FIFO Threshold interrupt */
  40097. ATOMIC_CLEAR_BIT(huart->Instance->CR3, (USART_CR3_EIE | USART_CR3_RXFTIE));
  40098. 80111aa: 687b ldr r3, [r7, #4]
  40099. 80111ac: 681b ldr r3, [r3, #0]
  40100. 80111ae: 3308 adds r3, #8
  40101. 80111b0: 627b str r3, [r7, #36] @ 0x24
  40102. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  40103. 80111b2: 6a7b ldr r3, [r7, #36] @ 0x24
  40104. 80111b4: e853 3f00 ldrex r3, [r3]
  40105. 80111b8: 623b str r3, [r7, #32]
  40106. return(result);
  40107. 80111ba: 6a3a ldr r2, [r7, #32]
  40108. 80111bc: 4b55 ldr r3, [pc, #340] @ (8011314 <HAL_UART_IRQHandler+0x770>)
  40109. 80111be: 4013 ands r3, r2
  40110. 80111c0: f8c7 30c4 str.w r3, [r7, #196] @ 0xc4
  40111. 80111c4: 687b ldr r3, [r7, #4]
  40112. 80111c6: 681b ldr r3, [r3, #0]
  40113. 80111c8: 3308 adds r3, #8
  40114. 80111ca: f8d7 20c4 ldr.w r2, [r7, #196] @ 0xc4
  40115. 80111ce: 633a str r2, [r7, #48] @ 0x30
  40116. 80111d0: 62fb str r3, [r7, #44] @ 0x2c
  40117. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  40118. 80111d2: 6af9 ldr r1, [r7, #44] @ 0x2c
  40119. 80111d4: 6b3a ldr r2, [r7, #48] @ 0x30
  40120. 80111d6: e841 2300 strex r3, r2, [r1]
  40121. 80111da: 62bb str r3, [r7, #40] @ 0x28
  40122. return(result);
  40123. 80111dc: 6abb ldr r3, [r7, #40] @ 0x28
  40124. 80111de: 2b00 cmp r3, #0
  40125. 80111e0: d1e3 bne.n 80111aa <HAL_UART_IRQHandler+0x606>
  40126. /* Rx process is completed, restore huart->RxState to Ready */
  40127. huart->RxState = HAL_UART_STATE_READY;
  40128. 80111e2: 687b ldr r3, [r7, #4]
  40129. 80111e4: 2220 movs r2, #32
  40130. 80111e6: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  40131. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  40132. 80111ea: 687b ldr r3, [r7, #4]
  40133. 80111ec: 2200 movs r2, #0
  40134. 80111ee: 66da str r2, [r3, #108] @ 0x6c
  40135. /* Clear RxISR function pointer */
  40136. huart->RxISR = NULL;
  40137. 80111f0: 687b ldr r3, [r7, #4]
  40138. 80111f2: 2200 movs r2, #0
  40139. 80111f4: 675a str r2, [r3, #116] @ 0x74
  40140. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  40141. 80111f6: 687b ldr r3, [r7, #4]
  40142. 80111f8: 681b ldr r3, [r3, #0]
  40143. 80111fa: 613b str r3, [r7, #16]
  40144. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  40145. 80111fc: 693b ldr r3, [r7, #16]
  40146. 80111fe: e853 3f00 ldrex r3, [r3]
  40147. 8011202: 60fb str r3, [r7, #12]
  40148. return(result);
  40149. 8011204: 68fb ldr r3, [r7, #12]
  40150. 8011206: f023 0310 bic.w r3, r3, #16
  40151. 801120a: f8c7 30c0 str.w r3, [r7, #192] @ 0xc0
  40152. 801120e: 687b ldr r3, [r7, #4]
  40153. 8011210: 681b ldr r3, [r3, #0]
  40154. 8011212: 461a mov r2, r3
  40155. 8011214: f8d7 30c0 ldr.w r3, [r7, #192] @ 0xc0
  40156. 8011218: 61fb str r3, [r7, #28]
  40157. 801121a: 61ba str r2, [r7, #24]
  40158. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  40159. 801121c: 69b9 ldr r1, [r7, #24]
  40160. 801121e: 69fa ldr r2, [r7, #28]
  40161. 8011220: e841 2300 strex r3, r2, [r1]
  40162. 8011224: 617b str r3, [r7, #20]
  40163. return(result);
  40164. 8011226: 697b ldr r3, [r7, #20]
  40165. 8011228: 2b00 cmp r3, #0
  40166. 801122a: d1e4 bne.n 80111f6 <HAL_UART_IRQHandler+0x652>
  40167. /* Initialize type of RxEvent that correspond to RxEvent callback execution;
  40168. In this case, Rx Event type is Idle Event */
  40169. huart->RxEventType = HAL_UART_RXEVENT_IDLE;
  40170. 801122c: 687b ldr r3, [r7, #4]
  40171. 801122e: 2202 movs r2, #2
  40172. 8011230: 671a str r2, [r3, #112] @ 0x70
  40173. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  40174. /*Call registered Rx complete callback*/
  40175. huart->RxEventCallback(huart, nb_rx_data);
  40176. #else
  40177. /*Call legacy weak Rx Event callback*/
  40178. HAL_UARTEx_RxEventCallback(huart, nb_rx_data);
  40179. 8011232: f8b7 30ce ldrh.w r3, [r7, #206] @ 0xce
  40180. 8011236: 4619 mov r1, r3
  40181. 8011238: 6878 ldr r0, [r7, #4]
  40182. 801123a: f7f3 f83b bl 80042b4 <HAL_UARTEx_RxEventCallback>
  40183. #endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */
  40184. }
  40185. return;
  40186. 801123e: e063 b.n 8011308 <HAL_UART_IRQHandler+0x764>
  40187. }
  40188. }
  40189. /* UART wakeup from Stop mode interrupt occurred ---------------------------*/
  40190. if (((isrflags & USART_ISR_WUF) != 0U) && ((cr3its & USART_CR3_WUFIE) != 0U))
  40191. 8011240: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  40192. 8011244: f403 1380 and.w r3, r3, #1048576 @ 0x100000
  40193. 8011248: 2b00 cmp r3, #0
  40194. 801124a: d00e beq.n 801126a <HAL_UART_IRQHandler+0x6c6>
  40195. 801124c: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc
  40196. 8011250: f403 0380 and.w r3, r3, #4194304 @ 0x400000
  40197. 8011254: 2b00 cmp r3, #0
  40198. 8011256: d008 beq.n 801126a <HAL_UART_IRQHandler+0x6c6>
  40199. {
  40200. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_WUF);
  40201. 8011258: 687b ldr r3, [r7, #4]
  40202. 801125a: 681b ldr r3, [r3, #0]
  40203. 801125c: f44f 1280 mov.w r2, #1048576 @ 0x100000
  40204. 8011260: 621a str r2, [r3, #32]
  40205. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  40206. /* Call registered Wakeup Callback */
  40207. huart->WakeupCallback(huart);
  40208. #else
  40209. /* Call legacy weak Wakeup Callback */
  40210. HAL_UARTEx_WakeupCallback(huart);
  40211. 8011262: 6878 ldr r0, [r7, #4]
  40212. 8011264: f002 f80c bl 8013280 <HAL_UARTEx_WakeupCallback>
  40213. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  40214. return;
  40215. 8011268: e051 b.n 801130e <HAL_UART_IRQHandler+0x76a>
  40216. }
  40217. /* UART in mode Transmitter ------------------------------------------------*/
  40218. if (((isrflags & USART_ISR_TXE_TXFNF) != 0U)
  40219. 801126a: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  40220. 801126e: f003 0380 and.w r3, r3, #128 @ 0x80
  40221. 8011272: 2b00 cmp r3, #0
  40222. 8011274: d014 beq.n 80112a0 <HAL_UART_IRQHandler+0x6fc>
  40223. && (((cr1its & USART_CR1_TXEIE_TXFNFIE) != 0U)
  40224. 8011276: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  40225. 801127a: f003 0380 and.w r3, r3, #128 @ 0x80
  40226. 801127e: 2b00 cmp r3, #0
  40227. 8011280: d105 bne.n 801128e <HAL_UART_IRQHandler+0x6ea>
  40228. || ((cr3its & USART_CR3_TXFTIE) != 0U)))
  40229. 8011282: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc
  40230. 8011286: f403 0300 and.w r3, r3, #8388608 @ 0x800000
  40231. 801128a: 2b00 cmp r3, #0
  40232. 801128c: d008 beq.n 80112a0 <HAL_UART_IRQHandler+0x6fc>
  40233. {
  40234. if (huart->TxISR != NULL)
  40235. 801128e: 687b ldr r3, [r7, #4]
  40236. 8011290: 6f9b ldr r3, [r3, #120] @ 0x78
  40237. 8011292: 2b00 cmp r3, #0
  40238. 8011294: d03a beq.n 801130c <HAL_UART_IRQHandler+0x768>
  40239. {
  40240. huart->TxISR(huart);
  40241. 8011296: 687b ldr r3, [r7, #4]
  40242. 8011298: 6f9b ldr r3, [r3, #120] @ 0x78
  40243. 801129a: 6878 ldr r0, [r7, #4]
  40244. 801129c: 4798 blx r3
  40245. }
  40246. return;
  40247. 801129e: e035 b.n 801130c <HAL_UART_IRQHandler+0x768>
  40248. }
  40249. /* UART in mode Transmitter (transmission end) -----------------------------*/
  40250. if (((isrflags & USART_ISR_TC) != 0U) && ((cr1its & USART_CR1_TCIE) != 0U))
  40251. 80112a0: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  40252. 80112a4: f003 0340 and.w r3, r3, #64 @ 0x40
  40253. 80112a8: 2b00 cmp r3, #0
  40254. 80112aa: d009 beq.n 80112c0 <HAL_UART_IRQHandler+0x71c>
  40255. 80112ac: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  40256. 80112b0: f003 0340 and.w r3, r3, #64 @ 0x40
  40257. 80112b4: 2b00 cmp r3, #0
  40258. 80112b6: d003 beq.n 80112c0 <HAL_UART_IRQHandler+0x71c>
  40259. {
  40260. UART_EndTransmit_IT(huart);
  40261. 80112b8: 6878 ldr r0, [r7, #4]
  40262. 80112ba: f001 fa99 bl 80127f0 <UART_EndTransmit_IT>
  40263. return;
  40264. 80112be: e026 b.n 801130e <HAL_UART_IRQHandler+0x76a>
  40265. }
  40266. /* UART TX Fifo Empty occurred ----------------------------------------------*/
  40267. if (((isrflags & USART_ISR_TXFE) != 0U) && ((cr1its & USART_CR1_TXFEIE) != 0U))
  40268. 80112c0: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  40269. 80112c4: f403 0300 and.w r3, r3, #8388608 @ 0x800000
  40270. 80112c8: 2b00 cmp r3, #0
  40271. 80112ca: d009 beq.n 80112e0 <HAL_UART_IRQHandler+0x73c>
  40272. 80112cc: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  40273. 80112d0: f003 4380 and.w r3, r3, #1073741824 @ 0x40000000
  40274. 80112d4: 2b00 cmp r3, #0
  40275. 80112d6: d003 beq.n 80112e0 <HAL_UART_IRQHandler+0x73c>
  40276. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  40277. /* Call registered Tx Fifo Empty Callback */
  40278. huart->TxFifoEmptyCallback(huart);
  40279. #else
  40280. /* Call legacy weak Tx Fifo Empty Callback */
  40281. HAL_UARTEx_TxFifoEmptyCallback(huart);
  40282. 80112d8: 6878 ldr r0, [r7, #4]
  40283. 80112da: f001 ffe5 bl 80132a8 <HAL_UARTEx_TxFifoEmptyCallback>
  40284. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  40285. return;
  40286. 80112de: e016 b.n 801130e <HAL_UART_IRQHandler+0x76a>
  40287. }
  40288. /* UART RX Fifo Full occurred ----------------------------------------------*/
  40289. if (((isrflags & USART_ISR_RXFF) != 0U) && ((cr1its & USART_CR1_RXFFIE) != 0U))
  40290. 80112e0: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  40291. 80112e4: f003 7380 and.w r3, r3, #16777216 @ 0x1000000
  40292. 80112e8: 2b00 cmp r3, #0
  40293. 80112ea: d010 beq.n 801130e <HAL_UART_IRQHandler+0x76a>
  40294. 80112ec: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  40295. 80112f0: 2b00 cmp r3, #0
  40296. 80112f2: da0c bge.n 801130e <HAL_UART_IRQHandler+0x76a>
  40297. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  40298. /* Call registered Rx Fifo Full Callback */
  40299. huart->RxFifoFullCallback(huart);
  40300. #else
  40301. /* Call legacy weak Rx Fifo Full Callback */
  40302. HAL_UARTEx_RxFifoFullCallback(huart);
  40303. 80112f4: 6878 ldr r0, [r7, #4]
  40304. 80112f6: f001 ffcd bl 8013294 <HAL_UARTEx_RxFifoFullCallback>
  40305. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  40306. return;
  40307. 80112fa: e008 b.n 801130e <HAL_UART_IRQHandler+0x76a>
  40308. return;
  40309. 80112fc: bf00 nop
  40310. 80112fe: e006 b.n 801130e <HAL_UART_IRQHandler+0x76a>
  40311. return;
  40312. 8011300: bf00 nop
  40313. 8011302: e004 b.n 801130e <HAL_UART_IRQHandler+0x76a>
  40314. return;
  40315. 8011304: bf00 nop
  40316. 8011306: e002 b.n 801130e <HAL_UART_IRQHandler+0x76a>
  40317. return;
  40318. 8011308: bf00 nop
  40319. 801130a: e000 b.n 801130e <HAL_UART_IRQHandler+0x76a>
  40320. return;
  40321. 801130c: bf00 nop
  40322. }
  40323. }
  40324. 801130e: 37e8 adds r7, #232 @ 0xe8
  40325. 8011310: 46bd mov sp, r7
  40326. 8011312: bd80 pop {r7, pc}
  40327. 8011314: effffffe .word 0xeffffffe
  40328. 08011318 <HAL_UART_ErrorCallback>:
  40329. * @brief UART error callback.
  40330. * @param huart UART handle.
  40331. * @retval None
  40332. */
  40333. __weak void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
  40334. {
  40335. 8011318: b480 push {r7}
  40336. 801131a: b083 sub sp, #12
  40337. 801131c: af00 add r7, sp, #0
  40338. 801131e: 6078 str r0, [r7, #4]
  40339. UNUSED(huart);
  40340. /* NOTE : This function should not be modified, when the callback is needed,
  40341. the HAL_UART_ErrorCallback can be implemented in the user file.
  40342. */
  40343. }
  40344. 8011320: bf00 nop
  40345. 8011322: 370c adds r7, #12
  40346. 8011324: 46bd mov sp, r7
  40347. 8011326: f85d 7b04 ldr.w r7, [sp], #4
  40348. 801132a: 4770 bx lr
  40349. 0801132c <UART_SetConfig>:
  40350. * @brief Configure the UART peripheral.
  40351. * @param huart UART handle.
  40352. * @retval HAL status
  40353. */
  40354. HAL_StatusTypeDef UART_SetConfig(UART_HandleTypeDef *huart)
  40355. {
  40356. 801132c: e92d 4fb0 stmdb sp!, {r4, r5, r7, r8, r9, sl, fp, lr}
  40357. 8011330: b092 sub sp, #72 @ 0x48
  40358. 8011332: af00 add r7, sp, #0
  40359. 8011334: 6178 str r0, [r7, #20]
  40360. uint32_t tmpreg;
  40361. uint16_t brrtemp;
  40362. UART_ClockSourceTypeDef clocksource;
  40363. uint32_t usartdiv;
  40364. HAL_StatusTypeDef ret = HAL_OK;
  40365. 8011336: 2300 movs r3, #0
  40366. 8011338: f887 3042 strb.w r3, [r7, #66] @ 0x42
  40367. * the UART Word Length, Parity, Mode and oversampling:
  40368. * set the M bits according to huart->Init.WordLength value
  40369. * set PCE and PS bits according to huart->Init.Parity value
  40370. * set TE and RE bits according to huart->Init.Mode value
  40371. * set OVER8 bit according to huart->Init.OverSampling value */
  40372. tmpreg = (uint32_t)huart->Init.WordLength | huart->Init.Parity | huart->Init.Mode | huart->Init.OverSampling ;
  40373. 801133c: 697b ldr r3, [r7, #20]
  40374. 801133e: 689a ldr r2, [r3, #8]
  40375. 8011340: 697b ldr r3, [r7, #20]
  40376. 8011342: 691b ldr r3, [r3, #16]
  40377. 8011344: 431a orrs r2, r3
  40378. 8011346: 697b ldr r3, [r7, #20]
  40379. 8011348: 695b ldr r3, [r3, #20]
  40380. 801134a: 431a orrs r2, r3
  40381. 801134c: 697b ldr r3, [r7, #20]
  40382. 801134e: 69db ldr r3, [r3, #28]
  40383. 8011350: 4313 orrs r3, r2
  40384. 8011352: 647b str r3, [r7, #68] @ 0x44
  40385. MODIFY_REG(huart->Instance->CR1, USART_CR1_FIELDS, tmpreg);
  40386. 8011354: 697b ldr r3, [r7, #20]
  40387. 8011356: 681b ldr r3, [r3, #0]
  40388. 8011358: 681a ldr r2, [r3, #0]
  40389. 801135a: 4bbe ldr r3, [pc, #760] @ (8011654 <UART_SetConfig+0x328>)
  40390. 801135c: 4013 ands r3, r2
  40391. 801135e: 697a ldr r2, [r7, #20]
  40392. 8011360: 6812 ldr r2, [r2, #0]
  40393. 8011362: 6c79 ldr r1, [r7, #68] @ 0x44
  40394. 8011364: 430b orrs r3, r1
  40395. 8011366: 6013 str r3, [r2, #0]
  40396. /*-------------------------- USART CR2 Configuration -----------------------*/
  40397. /* Configure the UART Stop Bits: Set STOP[13:12] bits according
  40398. * to huart->Init.StopBits value */
  40399. MODIFY_REG(huart->Instance->CR2, USART_CR2_STOP, huart->Init.StopBits);
  40400. 8011368: 697b ldr r3, [r7, #20]
  40401. 801136a: 681b ldr r3, [r3, #0]
  40402. 801136c: 685b ldr r3, [r3, #4]
  40403. 801136e: f423 5140 bic.w r1, r3, #12288 @ 0x3000
  40404. 8011372: 697b ldr r3, [r7, #20]
  40405. 8011374: 68da ldr r2, [r3, #12]
  40406. 8011376: 697b ldr r3, [r7, #20]
  40407. 8011378: 681b ldr r3, [r3, #0]
  40408. 801137a: 430a orrs r2, r1
  40409. 801137c: 605a str r2, [r3, #4]
  40410. /* Configure
  40411. * - UART HardWare Flow Control: set CTSE and RTSE bits according
  40412. * to huart->Init.HwFlowCtl value
  40413. * - one-bit sampling method versus three samples' majority rule according
  40414. * to huart->Init.OneBitSampling (not applicable to LPUART) */
  40415. tmpreg = (uint32_t)huart->Init.HwFlowCtl;
  40416. 801137e: 697b ldr r3, [r7, #20]
  40417. 8011380: 699b ldr r3, [r3, #24]
  40418. 8011382: 647b str r3, [r7, #68] @ 0x44
  40419. if (!(UART_INSTANCE_LOWPOWER(huart)))
  40420. 8011384: 697b ldr r3, [r7, #20]
  40421. 8011386: 681b ldr r3, [r3, #0]
  40422. 8011388: 4ab3 ldr r2, [pc, #716] @ (8011658 <UART_SetConfig+0x32c>)
  40423. 801138a: 4293 cmp r3, r2
  40424. 801138c: d004 beq.n 8011398 <UART_SetConfig+0x6c>
  40425. {
  40426. tmpreg |= huart->Init.OneBitSampling;
  40427. 801138e: 697b ldr r3, [r7, #20]
  40428. 8011390: 6a1b ldr r3, [r3, #32]
  40429. 8011392: 6c7a ldr r2, [r7, #68] @ 0x44
  40430. 8011394: 4313 orrs r3, r2
  40431. 8011396: 647b str r3, [r7, #68] @ 0x44
  40432. }
  40433. MODIFY_REG(huart->Instance->CR3, USART_CR3_FIELDS, tmpreg);
  40434. 8011398: 697b ldr r3, [r7, #20]
  40435. 801139a: 681b ldr r3, [r3, #0]
  40436. 801139c: 689a ldr r2, [r3, #8]
  40437. 801139e: 4baf ldr r3, [pc, #700] @ (801165c <UART_SetConfig+0x330>)
  40438. 80113a0: 4013 ands r3, r2
  40439. 80113a2: 697a ldr r2, [r7, #20]
  40440. 80113a4: 6812 ldr r2, [r2, #0]
  40441. 80113a6: 6c79 ldr r1, [r7, #68] @ 0x44
  40442. 80113a8: 430b orrs r3, r1
  40443. 80113aa: 6093 str r3, [r2, #8]
  40444. /*-------------------------- USART PRESC Configuration -----------------------*/
  40445. /* Configure
  40446. * - UART Clock Prescaler : set PRESCALER according to huart->Init.ClockPrescaler value */
  40447. MODIFY_REG(huart->Instance->PRESC, USART_PRESC_PRESCALER, huart->Init.ClockPrescaler);
  40448. 80113ac: 697b ldr r3, [r7, #20]
  40449. 80113ae: 681b ldr r3, [r3, #0]
  40450. 80113b0: 6adb ldr r3, [r3, #44] @ 0x2c
  40451. 80113b2: f023 010f bic.w r1, r3, #15
  40452. 80113b6: 697b ldr r3, [r7, #20]
  40453. 80113b8: 6a5a ldr r2, [r3, #36] @ 0x24
  40454. 80113ba: 697b ldr r3, [r7, #20]
  40455. 80113bc: 681b ldr r3, [r3, #0]
  40456. 80113be: 430a orrs r2, r1
  40457. 80113c0: 62da str r2, [r3, #44] @ 0x2c
  40458. /*-------------------------- USART BRR Configuration -----------------------*/
  40459. UART_GETCLOCKSOURCE(huart, clocksource);
  40460. 80113c2: 697b ldr r3, [r7, #20]
  40461. 80113c4: 681b ldr r3, [r3, #0]
  40462. 80113c6: 4aa6 ldr r2, [pc, #664] @ (8011660 <UART_SetConfig+0x334>)
  40463. 80113c8: 4293 cmp r3, r2
  40464. 80113ca: d177 bne.n 80114bc <UART_SetConfig+0x190>
  40465. 80113cc: 4ba5 ldr r3, [pc, #660] @ (8011664 <UART_SetConfig+0x338>)
  40466. 80113ce: 6d5b ldr r3, [r3, #84] @ 0x54
  40467. 80113d0: f003 0338 and.w r3, r3, #56 @ 0x38
  40468. 80113d4: 2b28 cmp r3, #40 @ 0x28
  40469. 80113d6: d86d bhi.n 80114b4 <UART_SetConfig+0x188>
  40470. 80113d8: a201 add r2, pc, #4 @ (adr r2, 80113e0 <UART_SetConfig+0xb4>)
  40471. 80113da: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  40472. 80113de: bf00 nop
  40473. 80113e0: 08011485 .word 0x08011485
  40474. 80113e4: 080114b5 .word 0x080114b5
  40475. 80113e8: 080114b5 .word 0x080114b5
  40476. 80113ec: 080114b5 .word 0x080114b5
  40477. 80113f0: 080114b5 .word 0x080114b5
  40478. 80113f4: 080114b5 .word 0x080114b5
  40479. 80113f8: 080114b5 .word 0x080114b5
  40480. 80113fc: 080114b5 .word 0x080114b5
  40481. 8011400: 0801148d .word 0x0801148d
  40482. 8011404: 080114b5 .word 0x080114b5
  40483. 8011408: 080114b5 .word 0x080114b5
  40484. 801140c: 080114b5 .word 0x080114b5
  40485. 8011410: 080114b5 .word 0x080114b5
  40486. 8011414: 080114b5 .word 0x080114b5
  40487. 8011418: 080114b5 .word 0x080114b5
  40488. 801141c: 080114b5 .word 0x080114b5
  40489. 8011420: 08011495 .word 0x08011495
  40490. 8011424: 080114b5 .word 0x080114b5
  40491. 8011428: 080114b5 .word 0x080114b5
  40492. 801142c: 080114b5 .word 0x080114b5
  40493. 8011430: 080114b5 .word 0x080114b5
  40494. 8011434: 080114b5 .word 0x080114b5
  40495. 8011438: 080114b5 .word 0x080114b5
  40496. 801143c: 080114b5 .word 0x080114b5
  40497. 8011440: 0801149d .word 0x0801149d
  40498. 8011444: 080114b5 .word 0x080114b5
  40499. 8011448: 080114b5 .word 0x080114b5
  40500. 801144c: 080114b5 .word 0x080114b5
  40501. 8011450: 080114b5 .word 0x080114b5
  40502. 8011454: 080114b5 .word 0x080114b5
  40503. 8011458: 080114b5 .word 0x080114b5
  40504. 801145c: 080114b5 .word 0x080114b5
  40505. 8011460: 080114a5 .word 0x080114a5
  40506. 8011464: 080114b5 .word 0x080114b5
  40507. 8011468: 080114b5 .word 0x080114b5
  40508. 801146c: 080114b5 .word 0x080114b5
  40509. 8011470: 080114b5 .word 0x080114b5
  40510. 8011474: 080114b5 .word 0x080114b5
  40511. 8011478: 080114b5 .word 0x080114b5
  40512. 801147c: 080114b5 .word 0x080114b5
  40513. 8011480: 080114ad .word 0x080114ad
  40514. 8011484: 2301 movs r3, #1
  40515. 8011486: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40516. 801148a: e222 b.n 80118d2 <UART_SetConfig+0x5a6>
  40517. 801148c: 2304 movs r3, #4
  40518. 801148e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40519. 8011492: e21e b.n 80118d2 <UART_SetConfig+0x5a6>
  40520. 8011494: 2308 movs r3, #8
  40521. 8011496: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40522. 801149a: e21a b.n 80118d2 <UART_SetConfig+0x5a6>
  40523. 801149c: 2310 movs r3, #16
  40524. 801149e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40525. 80114a2: e216 b.n 80118d2 <UART_SetConfig+0x5a6>
  40526. 80114a4: 2320 movs r3, #32
  40527. 80114a6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40528. 80114aa: e212 b.n 80118d2 <UART_SetConfig+0x5a6>
  40529. 80114ac: 2340 movs r3, #64 @ 0x40
  40530. 80114ae: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40531. 80114b2: e20e b.n 80118d2 <UART_SetConfig+0x5a6>
  40532. 80114b4: 2380 movs r3, #128 @ 0x80
  40533. 80114b6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40534. 80114ba: e20a b.n 80118d2 <UART_SetConfig+0x5a6>
  40535. 80114bc: 697b ldr r3, [r7, #20]
  40536. 80114be: 681b ldr r3, [r3, #0]
  40537. 80114c0: 4a69 ldr r2, [pc, #420] @ (8011668 <UART_SetConfig+0x33c>)
  40538. 80114c2: 4293 cmp r3, r2
  40539. 80114c4: d130 bne.n 8011528 <UART_SetConfig+0x1fc>
  40540. 80114c6: 4b67 ldr r3, [pc, #412] @ (8011664 <UART_SetConfig+0x338>)
  40541. 80114c8: 6d5b ldr r3, [r3, #84] @ 0x54
  40542. 80114ca: f003 0307 and.w r3, r3, #7
  40543. 80114ce: 2b05 cmp r3, #5
  40544. 80114d0: d826 bhi.n 8011520 <UART_SetConfig+0x1f4>
  40545. 80114d2: a201 add r2, pc, #4 @ (adr r2, 80114d8 <UART_SetConfig+0x1ac>)
  40546. 80114d4: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  40547. 80114d8: 080114f1 .word 0x080114f1
  40548. 80114dc: 080114f9 .word 0x080114f9
  40549. 80114e0: 08011501 .word 0x08011501
  40550. 80114e4: 08011509 .word 0x08011509
  40551. 80114e8: 08011511 .word 0x08011511
  40552. 80114ec: 08011519 .word 0x08011519
  40553. 80114f0: 2300 movs r3, #0
  40554. 80114f2: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40555. 80114f6: e1ec b.n 80118d2 <UART_SetConfig+0x5a6>
  40556. 80114f8: 2304 movs r3, #4
  40557. 80114fa: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40558. 80114fe: e1e8 b.n 80118d2 <UART_SetConfig+0x5a6>
  40559. 8011500: 2308 movs r3, #8
  40560. 8011502: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40561. 8011506: e1e4 b.n 80118d2 <UART_SetConfig+0x5a6>
  40562. 8011508: 2310 movs r3, #16
  40563. 801150a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40564. 801150e: e1e0 b.n 80118d2 <UART_SetConfig+0x5a6>
  40565. 8011510: 2320 movs r3, #32
  40566. 8011512: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40567. 8011516: e1dc b.n 80118d2 <UART_SetConfig+0x5a6>
  40568. 8011518: 2340 movs r3, #64 @ 0x40
  40569. 801151a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40570. 801151e: e1d8 b.n 80118d2 <UART_SetConfig+0x5a6>
  40571. 8011520: 2380 movs r3, #128 @ 0x80
  40572. 8011522: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40573. 8011526: e1d4 b.n 80118d2 <UART_SetConfig+0x5a6>
  40574. 8011528: 697b ldr r3, [r7, #20]
  40575. 801152a: 681b ldr r3, [r3, #0]
  40576. 801152c: 4a4f ldr r2, [pc, #316] @ (801166c <UART_SetConfig+0x340>)
  40577. 801152e: 4293 cmp r3, r2
  40578. 8011530: d130 bne.n 8011594 <UART_SetConfig+0x268>
  40579. 8011532: 4b4c ldr r3, [pc, #304] @ (8011664 <UART_SetConfig+0x338>)
  40580. 8011534: 6d5b ldr r3, [r3, #84] @ 0x54
  40581. 8011536: f003 0307 and.w r3, r3, #7
  40582. 801153a: 2b05 cmp r3, #5
  40583. 801153c: d826 bhi.n 801158c <UART_SetConfig+0x260>
  40584. 801153e: a201 add r2, pc, #4 @ (adr r2, 8011544 <UART_SetConfig+0x218>)
  40585. 8011540: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  40586. 8011544: 0801155d .word 0x0801155d
  40587. 8011548: 08011565 .word 0x08011565
  40588. 801154c: 0801156d .word 0x0801156d
  40589. 8011550: 08011575 .word 0x08011575
  40590. 8011554: 0801157d .word 0x0801157d
  40591. 8011558: 08011585 .word 0x08011585
  40592. 801155c: 2300 movs r3, #0
  40593. 801155e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40594. 8011562: e1b6 b.n 80118d2 <UART_SetConfig+0x5a6>
  40595. 8011564: 2304 movs r3, #4
  40596. 8011566: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40597. 801156a: e1b2 b.n 80118d2 <UART_SetConfig+0x5a6>
  40598. 801156c: 2308 movs r3, #8
  40599. 801156e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40600. 8011572: e1ae b.n 80118d2 <UART_SetConfig+0x5a6>
  40601. 8011574: 2310 movs r3, #16
  40602. 8011576: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40603. 801157a: e1aa b.n 80118d2 <UART_SetConfig+0x5a6>
  40604. 801157c: 2320 movs r3, #32
  40605. 801157e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40606. 8011582: e1a6 b.n 80118d2 <UART_SetConfig+0x5a6>
  40607. 8011584: 2340 movs r3, #64 @ 0x40
  40608. 8011586: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40609. 801158a: e1a2 b.n 80118d2 <UART_SetConfig+0x5a6>
  40610. 801158c: 2380 movs r3, #128 @ 0x80
  40611. 801158e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40612. 8011592: e19e b.n 80118d2 <UART_SetConfig+0x5a6>
  40613. 8011594: 697b ldr r3, [r7, #20]
  40614. 8011596: 681b ldr r3, [r3, #0]
  40615. 8011598: 4a35 ldr r2, [pc, #212] @ (8011670 <UART_SetConfig+0x344>)
  40616. 801159a: 4293 cmp r3, r2
  40617. 801159c: d130 bne.n 8011600 <UART_SetConfig+0x2d4>
  40618. 801159e: 4b31 ldr r3, [pc, #196] @ (8011664 <UART_SetConfig+0x338>)
  40619. 80115a0: 6d5b ldr r3, [r3, #84] @ 0x54
  40620. 80115a2: f003 0307 and.w r3, r3, #7
  40621. 80115a6: 2b05 cmp r3, #5
  40622. 80115a8: d826 bhi.n 80115f8 <UART_SetConfig+0x2cc>
  40623. 80115aa: a201 add r2, pc, #4 @ (adr r2, 80115b0 <UART_SetConfig+0x284>)
  40624. 80115ac: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  40625. 80115b0: 080115c9 .word 0x080115c9
  40626. 80115b4: 080115d1 .word 0x080115d1
  40627. 80115b8: 080115d9 .word 0x080115d9
  40628. 80115bc: 080115e1 .word 0x080115e1
  40629. 80115c0: 080115e9 .word 0x080115e9
  40630. 80115c4: 080115f1 .word 0x080115f1
  40631. 80115c8: 2300 movs r3, #0
  40632. 80115ca: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40633. 80115ce: e180 b.n 80118d2 <UART_SetConfig+0x5a6>
  40634. 80115d0: 2304 movs r3, #4
  40635. 80115d2: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40636. 80115d6: e17c b.n 80118d2 <UART_SetConfig+0x5a6>
  40637. 80115d8: 2308 movs r3, #8
  40638. 80115da: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40639. 80115de: e178 b.n 80118d2 <UART_SetConfig+0x5a6>
  40640. 80115e0: 2310 movs r3, #16
  40641. 80115e2: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40642. 80115e6: e174 b.n 80118d2 <UART_SetConfig+0x5a6>
  40643. 80115e8: 2320 movs r3, #32
  40644. 80115ea: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40645. 80115ee: e170 b.n 80118d2 <UART_SetConfig+0x5a6>
  40646. 80115f0: 2340 movs r3, #64 @ 0x40
  40647. 80115f2: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40648. 80115f6: e16c b.n 80118d2 <UART_SetConfig+0x5a6>
  40649. 80115f8: 2380 movs r3, #128 @ 0x80
  40650. 80115fa: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40651. 80115fe: e168 b.n 80118d2 <UART_SetConfig+0x5a6>
  40652. 8011600: 697b ldr r3, [r7, #20]
  40653. 8011602: 681b ldr r3, [r3, #0]
  40654. 8011604: 4a1b ldr r2, [pc, #108] @ (8011674 <UART_SetConfig+0x348>)
  40655. 8011606: 4293 cmp r3, r2
  40656. 8011608: d142 bne.n 8011690 <UART_SetConfig+0x364>
  40657. 801160a: 4b16 ldr r3, [pc, #88] @ (8011664 <UART_SetConfig+0x338>)
  40658. 801160c: 6d5b ldr r3, [r3, #84] @ 0x54
  40659. 801160e: f003 0307 and.w r3, r3, #7
  40660. 8011612: 2b05 cmp r3, #5
  40661. 8011614: d838 bhi.n 8011688 <UART_SetConfig+0x35c>
  40662. 8011616: a201 add r2, pc, #4 @ (adr r2, 801161c <UART_SetConfig+0x2f0>)
  40663. 8011618: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  40664. 801161c: 08011635 .word 0x08011635
  40665. 8011620: 0801163d .word 0x0801163d
  40666. 8011624: 08011645 .word 0x08011645
  40667. 8011628: 0801164d .word 0x0801164d
  40668. 801162c: 08011679 .word 0x08011679
  40669. 8011630: 08011681 .word 0x08011681
  40670. 8011634: 2300 movs r3, #0
  40671. 8011636: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40672. 801163a: e14a b.n 80118d2 <UART_SetConfig+0x5a6>
  40673. 801163c: 2304 movs r3, #4
  40674. 801163e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40675. 8011642: e146 b.n 80118d2 <UART_SetConfig+0x5a6>
  40676. 8011644: 2308 movs r3, #8
  40677. 8011646: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40678. 801164a: e142 b.n 80118d2 <UART_SetConfig+0x5a6>
  40679. 801164c: 2310 movs r3, #16
  40680. 801164e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40681. 8011652: e13e b.n 80118d2 <UART_SetConfig+0x5a6>
  40682. 8011654: cfff69f3 .word 0xcfff69f3
  40683. 8011658: 58000c00 .word 0x58000c00
  40684. 801165c: 11fff4ff .word 0x11fff4ff
  40685. 8011660: 40011000 .word 0x40011000
  40686. 8011664: 58024400 .word 0x58024400
  40687. 8011668: 40004400 .word 0x40004400
  40688. 801166c: 40004800 .word 0x40004800
  40689. 8011670: 40004c00 .word 0x40004c00
  40690. 8011674: 40005000 .word 0x40005000
  40691. 8011678: 2320 movs r3, #32
  40692. 801167a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40693. 801167e: e128 b.n 80118d2 <UART_SetConfig+0x5a6>
  40694. 8011680: 2340 movs r3, #64 @ 0x40
  40695. 8011682: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40696. 8011686: e124 b.n 80118d2 <UART_SetConfig+0x5a6>
  40697. 8011688: 2380 movs r3, #128 @ 0x80
  40698. 801168a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40699. 801168e: e120 b.n 80118d2 <UART_SetConfig+0x5a6>
  40700. 8011690: 697b ldr r3, [r7, #20]
  40701. 8011692: 681b ldr r3, [r3, #0]
  40702. 8011694: 4acb ldr r2, [pc, #812] @ (80119c4 <UART_SetConfig+0x698>)
  40703. 8011696: 4293 cmp r3, r2
  40704. 8011698: d176 bne.n 8011788 <UART_SetConfig+0x45c>
  40705. 801169a: 4bcb ldr r3, [pc, #812] @ (80119c8 <UART_SetConfig+0x69c>)
  40706. 801169c: 6d5b ldr r3, [r3, #84] @ 0x54
  40707. 801169e: f003 0338 and.w r3, r3, #56 @ 0x38
  40708. 80116a2: 2b28 cmp r3, #40 @ 0x28
  40709. 80116a4: d86c bhi.n 8011780 <UART_SetConfig+0x454>
  40710. 80116a6: a201 add r2, pc, #4 @ (adr r2, 80116ac <UART_SetConfig+0x380>)
  40711. 80116a8: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  40712. 80116ac: 08011751 .word 0x08011751
  40713. 80116b0: 08011781 .word 0x08011781
  40714. 80116b4: 08011781 .word 0x08011781
  40715. 80116b8: 08011781 .word 0x08011781
  40716. 80116bc: 08011781 .word 0x08011781
  40717. 80116c0: 08011781 .word 0x08011781
  40718. 80116c4: 08011781 .word 0x08011781
  40719. 80116c8: 08011781 .word 0x08011781
  40720. 80116cc: 08011759 .word 0x08011759
  40721. 80116d0: 08011781 .word 0x08011781
  40722. 80116d4: 08011781 .word 0x08011781
  40723. 80116d8: 08011781 .word 0x08011781
  40724. 80116dc: 08011781 .word 0x08011781
  40725. 80116e0: 08011781 .word 0x08011781
  40726. 80116e4: 08011781 .word 0x08011781
  40727. 80116e8: 08011781 .word 0x08011781
  40728. 80116ec: 08011761 .word 0x08011761
  40729. 80116f0: 08011781 .word 0x08011781
  40730. 80116f4: 08011781 .word 0x08011781
  40731. 80116f8: 08011781 .word 0x08011781
  40732. 80116fc: 08011781 .word 0x08011781
  40733. 8011700: 08011781 .word 0x08011781
  40734. 8011704: 08011781 .word 0x08011781
  40735. 8011708: 08011781 .word 0x08011781
  40736. 801170c: 08011769 .word 0x08011769
  40737. 8011710: 08011781 .word 0x08011781
  40738. 8011714: 08011781 .word 0x08011781
  40739. 8011718: 08011781 .word 0x08011781
  40740. 801171c: 08011781 .word 0x08011781
  40741. 8011720: 08011781 .word 0x08011781
  40742. 8011724: 08011781 .word 0x08011781
  40743. 8011728: 08011781 .word 0x08011781
  40744. 801172c: 08011771 .word 0x08011771
  40745. 8011730: 08011781 .word 0x08011781
  40746. 8011734: 08011781 .word 0x08011781
  40747. 8011738: 08011781 .word 0x08011781
  40748. 801173c: 08011781 .word 0x08011781
  40749. 8011740: 08011781 .word 0x08011781
  40750. 8011744: 08011781 .word 0x08011781
  40751. 8011748: 08011781 .word 0x08011781
  40752. 801174c: 08011779 .word 0x08011779
  40753. 8011750: 2301 movs r3, #1
  40754. 8011752: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40755. 8011756: e0bc b.n 80118d2 <UART_SetConfig+0x5a6>
  40756. 8011758: 2304 movs r3, #4
  40757. 801175a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40758. 801175e: e0b8 b.n 80118d2 <UART_SetConfig+0x5a6>
  40759. 8011760: 2308 movs r3, #8
  40760. 8011762: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40761. 8011766: e0b4 b.n 80118d2 <UART_SetConfig+0x5a6>
  40762. 8011768: 2310 movs r3, #16
  40763. 801176a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40764. 801176e: e0b0 b.n 80118d2 <UART_SetConfig+0x5a6>
  40765. 8011770: 2320 movs r3, #32
  40766. 8011772: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40767. 8011776: e0ac b.n 80118d2 <UART_SetConfig+0x5a6>
  40768. 8011778: 2340 movs r3, #64 @ 0x40
  40769. 801177a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40770. 801177e: e0a8 b.n 80118d2 <UART_SetConfig+0x5a6>
  40771. 8011780: 2380 movs r3, #128 @ 0x80
  40772. 8011782: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40773. 8011786: e0a4 b.n 80118d2 <UART_SetConfig+0x5a6>
  40774. 8011788: 697b ldr r3, [r7, #20]
  40775. 801178a: 681b ldr r3, [r3, #0]
  40776. 801178c: 4a8f ldr r2, [pc, #572] @ (80119cc <UART_SetConfig+0x6a0>)
  40777. 801178e: 4293 cmp r3, r2
  40778. 8011790: d130 bne.n 80117f4 <UART_SetConfig+0x4c8>
  40779. 8011792: 4b8d ldr r3, [pc, #564] @ (80119c8 <UART_SetConfig+0x69c>)
  40780. 8011794: 6d5b ldr r3, [r3, #84] @ 0x54
  40781. 8011796: f003 0307 and.w r3, r3, #7
  40782. 801179a: 2b05 cmp r3, #5
  40783. 801179c: d826 bhi.n 80117ec <UART_SetConfig+0x4c0>
  40784. 801179e: a201 add r2, pc, #4 @ (adr r2, 80117a4 <UART_SetConfig+0x478>)
  40785. 80117a0: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  40786. 80117a4: 080117bd .word 0x080117bd
  40787. 80117a8: 080117c5 .word 0x080117c5
  40788. 80117ac: 080117cd .word 0x080117cd
  40789. 80117b0: 080117d5 .word 0x080117d5
  40790. 80117b4: 080117dd .word 0x080117dd
  40791. 80117b8: 080117e5 .word 0x080117e5
  40792. 80117bc: 2300 movs r3, #0
  40793. 80117be: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40794. 80117c2: e086 b.n 80118d2 <UART_SetConfig+0x5a6>
  40795. 80117c4: 2304 movs r3, #4
  40796. 80117c6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40797. 80117ca: e082 b.n 80118d2 <UART_SetConfig+0x5a6>
  40798. 80117cc: 2308 movs r3, #8
  40799. 80117ce: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40800. 80117d2: e07e b.n 80118d2 <UART_SetConfig+0x5a6>
  40801. 80117d4: 2310 movs r3, #16
  40802. 80117d6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40803. 80117da: e07a b.n 80118d2 <UART_SetConfig+0x5a6>
  40804. 80117dc: 2320 movs r3, #32
  40805. 80117de: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40806. 80117e2: e076 b.n 80118d2 <UART_SetConfig+0x5a6>
  40807. 80117e4: 2340 movs r3, #64 @ 0x40
  40808. 80117e6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40809. 80117ea: e072 b.n 80118d2 <UART_SetConfig+0x5a6>
  40810. 80117ec: 2380 movs r3, #128 @ 0x80
  40811. 80117ee: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40812. 80117f2: e06e b.n 80118d2 <UART_SetConfig+0x5a6>
  40813. 80117f4: 697b ldr r3, [r7, #20]
  40814. 80117f6: 681b ldr r3, [r3, #0]
  40815. 80117f8: 4a75 ldr r2, [pc, #468] @ (80119d0 <UART_SetConfig+0x6a4>)
  40816. 80117fa: 4293 cmp r3, r2
  40817. 80117fc: d130 bne.n 8011860 <UART_SetConfig+0x534>
  40818. 80117fe: 4b72 ldr r3, [pc, #456] @ (80119c8 <UART_SetConfig+0x69c>)
  40819. 8011800: 6d5b ldr r3, [r3, #84] @ 0x54
  40820. 8011802: f003 0307 and.w r3, r3, #7
  40821. 8011806: 2b05 cmp r3, #5
  40822. 8011808: d826 bhi.n 8011858 <UART_SetConfig+0x52c>
  40823. 801180a: a201 add r2, pc, #4 @ (adr r2, 8011810 <UART_SetConfig+0x4e4>)
  40824. 801180c: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  40825. 8011810: 08011829 .word 0x08011829
  40826. 8011814: 08011831 .word 0x08011831
  40827. 8011818: 08011839 .word 0x08011839
  40828. 801181c: 08011841 .word 0x08011841
  40829. 8011820: 08011849 .word 0x08011849
  40830. 8011824: 08011851 .word 0x08011851
  40831. 8011828: 2300 movs r3, #0
  40832. 801182a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40833. 801182e: e050 b.n 80118d2 <UART_SetConfig+0x5a6>
  40834. 8011830: 2304 movs r3, #4
  40835. 8011832: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40836. 8011836: e04c b.n 80118d2 <UART_SetConfig+0x5a6>
  40837. 8011838: 2308 movs r3, #8
  40838. 801183a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40839. 801183e: e048 b.n 80118d2 <UART_SetConfig+0x5a6>
  40840. 8011840: 2310 movs r3, #16
  40841. 8011842: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40842. 8011846: e044 b.n 80118d2 <UART_SetConfig+0x5a6>
  40843. 8011848: 2320 movs r3, #32
  40844. 801184a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40845. 801184e: e040 b.n 80118d2 <UART_SetConfig+0x5a6>
  40846. 8011850: 2340 movs r3, #64 @ 0x40
  40847. 8011852: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40848. 8011856: e03c b.n 80118d2 <UART_SetConfig+0x5a6>
  40849. 8011858: 2380 movs r3, #128 @ 0x80
  40850. 801185a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40851. 801185e: e038 b.n 80118d2 <UART_SetConfig+0x5a6>
  40852. 8011860: 697b ldr r3, [r7, #20]
  40853. 8011862: 681b ldr r3, [r3, #0]
  40854. 8011864: 4a5b ldr r2, [pc, #364] @ (80119d4 <UART_SetConfig+0x6a8>)
  40855. 8011866: 4293 cmp r3, r2
  40856. 8011868: d130 bne.n 80118cc <UART_SetConfig+0x5a0>
  40857. 801186a: 4b57 ldr r3, [pc, #348] @ (80119c8 <UART_SetConfig+0x69c>)
  40858. 801186c: 6d9b ldr r3, [r3, #88] @ 0x58
  40859. 801186e: f003 0307 and.w r3, r3, #7
  40860. 8011872: 2b05 cmp r3, #5
  40861. 8011874: d826 bhi.n 80118c4 <UART_SetConfig+0x598>
  40862. 8011876: a201 add r2, pc, #4 @ (adr r2, 801187c <UART_SetConfig+0x550>)
  40863. 8011878: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  40864. 801187c: 08011895 .word 0x08011895
  40865. 8011880: 0801189d .word 0x0801189d
  40866. 8011884: 080118a5 .word 0x080118a5
  40867. 8011888: 080118ad .word 0x080118ad
  40868. 801188c: 080118b5 .word 0x080118b5
  40869. 8011890: 080118bd .word 0x080118bd
  40870. 8011894: 2302 movs r3, #2
  40871. 8011896: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40872. 801189a: e01a b.n 80118d2 <UART_SetConfig+0x5a6>
  40873. 801189c: 2304 movs r3, #4
  40874. 801189e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40875. 80118a2: e016 b.n 80118d2 <UART_SetConfig+0x5a6>
  40876. 80118a4: 2308 movs r3, #8
  40877. 80118a6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40878. 80118aa: e012 b.n 80118d2 <UART_SetConfig+0x5a6>
  40879. 80118ac: 2310 movs r3, #16
  40880. 80118ae: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40881. 80118b2: e00e b.n 80118d2 <UART_SetConfig+0x5a6>
  40882. 80118b4: 2320 movs r3, #32
  40883. 80118b6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40884. 80118ba: e00a b.n 80118d2 <UART_SetConfig+0x5a6>
  40885. 80118bc: 2340 movs r3, #64 @ 0x40
  40886. 80118be: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40887. 80118c2: e006 b.n 80118d2 <UART_SetConfig+0x5a6>
  40888. 80118c4: 2380 movs r3, #128 @ 0x80
  40889. 80118c6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40890. 80118ca: e002 b.n 80118d2 <UART_SetConfig+0x5a6>
  40891. 80118cc: 2380 movs r3, #128 @ 0x80
  40892. 80118ce: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40893. /* Check LPUART instance */
  40894. if (UART_INSTANCE_LOWPOWER(huart))
  40895. 80118d2: 697b ldr r3, [r7, #20]
  40896. 80118d4: 681b ldr r3, [r3, #0]
  40897. 80118d6: 4a3f ldr r2, [pc, #252] @ (80119d4 <UART_SetConfig+0x6a8>)
  40898. 80118d8: 4293 cmp r3, r2
  40899. 80118da: f040 80f8 bne.w 8011ace <UART_SetConfig+0x7a2>
  40900. {
  40901. /* Retrieve frequency clock */
  40902. switch (clocksource)
  40903. 80118de: f897 3043 ldrb.w r3, [r7, #67] @ 0x43
  40904. 80118e2: 2b20 cmp r3, #32
  40905. 80118e4: dc46 bgt.n 8011974 <UART_SetConfig+0x648>
  40906. 80118e6: 2b02 cmp r3, #2
  40907. 80118e8: f2c0 8082 blt.w 80119f0 <UART_SetConfig+0x6c4>
  40908. 80118ec: 3b02 subs r3, #2
  40909. 80118ee: 2b1e cmp r3, #30
  40910. 80118f0: d87e bhi.n 80119f0 <UART_SetConfig+0x6c4>
  40911. 80118f2: a201 add r2, pc, #4 @ (adr r2, 80118f8 <UART_SetConfig+0x5cc>)
  40912. 80118f4: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  40913. 80118f8: 0801197b .word 0x0801197b
  40914. 80118fc: 080119f1 .word 0x080119f1
  40915. 8011900: 08011983 .word 0x08011983
  40916. 8011904: 080119f1 .word 0x080119f1
  40917. 8011908: 080119f1 .word 0x080119f1
  40918. 801190c: 080119f1 .word 0x080119f1
  40919. 8011910: 08011993 .word 0x08011993
  40920. 8011914: 080119f1 .word 0x080119f1
  40921. 8011918: 080119f1 .word 0x080119f1
  40922. 801191c: 080119f1 .word 0x080119f1
  40923. 8011920: 080119f1 .word 0x080119f1
  40924. 8011924: 080119f1 .word 0x080119f1
  40925. 8011928: 080119f1 .word 0x080119f1
  40926. 801192c: 080119f1 .word 0x080119f1
  40927. 8011930: 080119a3 .word 0x080119a3
  40928. 8011934: 080119f1 .word 0x080119f1
  40929. 8011938: 080119f1 .word 0x080119f1
  40930. 801193c: 080119f1 .word 0x080119f1
  40931. 8011940: 080119f1 .word 0x080119f1
  40932. 8011944: 080119f1 .word 0x080119f1
  40933. 8011948: 080119f1 .word 0x080119f1
  40934. 801194c: 080119f1 .word 0x080119f1
  40935. 8011950: 080119f1 .word 0x080119f1
  40936. 8011954: 080119f1 .word 0x080119f1
  40937. 8011958: 080119f1 .word 0x080119f1
  40938. 801195c: 080119f1 .word 0x080119f1
  40939. 8011960: 080119f1 .word 0x080119f1
  40940. 8011964: 080119f1 .word 0x080119f1
  40941. 8011968: 080119f1 .word 0x080119f1
  40942. 801196c: 080119f1 .word 0x080119f1
  40943. 8011970: 080119e3 .word 0x080119e3
  40944. 8011974: 2b40 cmp r3, #64 @ 0x40
  40945. 8011976: d037 beq.n 80119e8 <UART_SetConfig+0x6bc>
  40946. 8011978: e03a b.n 80119f0 <UART_SetConfig+0x6c4>
  40947. {
  40948. case UART_CLOCKSOURCE_D3PCLK1:
  40949. pclk = HAL_RCCEx_GetD3PCLK1Freq();
  40950. 801197a: f7fc f9fd bl 800dd78 <HAL_RCCEx_GetD3PCLK1Freq>
  40951. 801197e: 63f8 str r0, [r7, #60] @ 0x3c
  40952. break;
  40953. 8011980: e03c b.n 80119fc <UART_SetConfig+0x6d0>
  40954. case UART_CLOCKSOURCE_PLL2:
  40955. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  40956. 8011982: f107 0324 add.w r3, r7, #36 @ 0x24
  40957. 8011986: 4618 mov r0, r3
  40958. 8011988: f7fc fa0c bl 800dda4 <HAL_RCCEx_GetPLL2ClockFreq>
  40959. pclk = pll2_clocks.PLL2_Q_Frequency;
  40960. 801198c: 6abb ldr r3, [r7, #40] @ 0x28
  40961. 801198e: 63fb str r3, [r7, #60] @ 0x3c
  40962. break;
  40963. 8011990: e034 b.n 80119fc <UART_SetConfig+0x6d0>
  40964. case UART_CLOCKSOURCE_PLL3:
  40965. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  40966. 8011992: f107 0318 add.w r3, r7, #24
  40967. 8011996: 4618 mov r0, r3
  40968. 8011998: f7fc fb58 bl 800e04c <HAL_RCCEx_GetPLL3ClockFreq>
  40969. pclk = pll3_clocks.PLL3_Q_Frequency;
  40970. 801199c: 69fb ldr r3, [r7, #28]
  40971. 801199e: 63fb str r3, [r7, #60] @ 0x3c
  40972. break;
  40973. 80119a0: e02c b.n 80119fc <UART_SetConfig+0x6d0>
  40974. case UART_CLOCKSOURCE_HSI:
  40975. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  40976. 80119a2: 4b09 ldr r3, [pc, #36] @ (80119c8 <UART_SetConfig+0x69c>)
  40977. 80119a4: 681b ldr r3, [r3, #0]
  40978. 80119a6: f003 0320 and.w r3, r3, #32
  40979. 80119aa: 2b00 cmp r3, #0
  40980. 80119ac: d016 beq.n 80119dc <UART_SetConfig+0x6b0>
  40981. {
  40982. pclk = (uint32_t)(HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3U));
  40983. 80119ae: 4b06 ldr r3, [pc, #24] @ (80119c8 <UART_SetConfig+0x69c>)
  40984. 80119b0: 681b ldr r3, [r3, #0]
  40985. 80119b2: 08db lsrs r3, r3, #3
  40986. 80119b4: f003 0303 and.w r3, r3, #3
  40987. 80119b8: 4a07 ldr r2, [pc, #28] @ (80119d8 <UART_SetConfig+0x6ac>)
  40988. 80119ba: fa22 f303 lsr.w r3, r2, r3
  40989. 80119be: 63fb str r3, [r7, #60] @ 0x3c
  40990. }
  40991. else
  40992. {
  40993. pclk = (uint32_t) HSI_VALUE;
  40994. }
  40995. break;
  40996. 80119c0: e01c b.n 80119fc <UART_SetConfig+0x6d0>
  40997. 80119c2: bf00 nop
  40998. 80119c4: 40011400 .word 0x40011400
  40999. 80119c8: 58024400 .word 0x58024400
  41000. 80119cc: 40007800 .word 0x40007800
  41001. 80119d0: 40007c00 .word 0x40007c00
  41002. 80119d4: 58000c00 .word 0x58000c00
  41003. 80119d8: 03d09000 .word 0x03d09000
  41004. pclk = (uint32_t) HSI_VALUE;
  41005. 80119dc: 4b9d ldr r3, [pc, #628] @ (8011c54 <UART_SetConfig+0x928>)
  41006. 80119de: 63fb str r3, [r7, #60] @ 0x3c
  41007. break;
  41008. 80119e0: e00c b.n 80119fc <UART_SetConfig+0x6d0>
  41009. case UART_CLOCKSOURCE_CSI:
  41010. pclk = (uint32_t) CSI_VALUE;
  41011. 80119e2: 4b9d ldr r3, [pc, #628] @ (8011c58 <UART_SetConfig+0x92c>)
  41012. 80119e4: 63fb str r3, [r7, #60] @ 0x3c
  41013. break;
  41014. 80119e6: e009 b.n 80119fc <UART_SetConfig+0x6d0>
  41015. case UART_CLOCKSOURCE_LSE:
  41016. pclk = (uint32_t) LSE_VALUE;
  41017. 80119e8: f44f 4300 mov.w r3, #32768 @ 0x8000
  41018. 80119ec: 63fb str r3, [r7, #60] @ 0x3c
  41019. break;
  41020. 80119ee: e005 b.n 80119fc <UART_SetConfig+0x6d0>
  41021. default:
  41022. pclk = 0U;
  41023. 80119f0: 2300 movs r3, #0
  41024. 80119f2: 63fb str r3, [r7, #60] @ 0x3c
  41025. ret = HAL_ERROR;
  41026. 80119f4: 2301 movs r3, #1
  41027. 80119f6: f887 3042 strb.w r3, [r7, #66] @ 0x42
  41028. break;
  41029. 80119fa: bf00 nop
  41030. }
  41031. /* If proper clock source reported */
  41032. if (pclk != 0U)
  41033. 80119fc: 6bfb ldr r3, [r7, #60] @ 0x3c
  41034. 80119fe: 2b00 cmp r3, #0
  41035. 8011a00: f000 81de beq.w 8011dc0 <UART_SetConfig+0xa94>
  41036. {
  41037. /* Compute clock after Prescaler */
  41038. lpuart_ker_ck_pres = (pclk / UARTPrescTable[huart->Init.ClockPrescaler]);
  41039. 8011a04: 697b ldr r3, [r7, #20]
  41040. 8011a06: 6a5b ldr r3, [r3, #36] @ 0x24
  41041. 8011a08: 4a94 ldr r2, [pc, #592] @ (8011c5c <UART_SetConfig+0x930>)
  41042. 8011a0a: f832 3013 ldrh.w r3, [r2, r3, lsl #1]
  41043. 8011a0e: 461a mov r2, r3
  41044. 8011a10: 6bfb ldr r3, [r7, #60] @ 0x3c
  41045. 8011a12: fbb3 f3f2 udiv r3, r3, r2
  41046. 8011a16: 633b str r3, [r7, #48] @ 0x30
  41047. /* Ensure that Frequency clock is in the range [3 * baudrate, 4096 * baudrate] */
  41048. if ((lpuart_ker_ck_pres < (3U * huart->Init.BaudRate)) ||
  41049. 8011a18: 697b ldr r3, [r7, #20]
  41050. 8011a1a: 685a ldr r2, [r3, #4]
  41051. 8011a1c: 4613 mov r3, r2
  41052. 8011a1e: 005b lsls r3, r3, #1
  41053. 8011a20: 4413 add r3, r2
  41054. 8011a22: 6b3a ldr r2, [r7, #48] @ 0x30
  41055. 8011a24: 429a cmp r2, r3
  41056. 8011a26: d305 bcc.n 8011a34 <UART_SetConfig+0x708>
  41057. (lpuart_ker_ck_pres > (4096U * huart->Init.BaudRate)))
  41058. 8011a28: 697b ldr r3, [r7, #20]
  41059. 8011a2a: 685b ldr r3, [r3, #4]
  41060. 8011a2c: 031b lsls r3, r3, #12
  41061. if ((lpuart_ker_ck_pres < (3U * huart->Init.BaudRate)) ||
  41062. 8011a2e: 6b3a ldr r2, [r7, #48] @ 0x30
  41063. 8011a30: 429a cmp r2, r3
  41064. 8011a32: d903 bls.n 8011a3c <UART_SetConfig+0x710>
  41065. {
  41066. ret = HAL_ERROR;
  41067. 8011a34: 2301 movs r3, #1
  41068. 8011a36: f887 3042 strb.w r3, [r7, #66] @ 0x42
  41069. 8011a3a: e1c1 b.n 8011dc0 <UART_SetConfig+0xa94>
  41070. }
  41071. else
  41072. {
  41073. /* Check computed UsartDiv value is in allocated range
  41074. (it is forbidden to write values lower than 0x300 in the LPUART_BRR register) */
  41075. usartdiv = (uint32_t)(UART_DIV_LPUART(pclk, huart->Init.BaudRate, huart->Init.ClockPrescaler));
  41076. 8011a3c: 6bfb ldr r3, [r7, #60] @ 0x3c
  41077. 8011a3e: 2200 movs r2, #0
  41078. 8011a40: 60bb str r3, [r7, #8]
  41079. 8011a42: 60fa str r2, [r7, #12]
  41080. 8011a44: 697b ldr r3, [r7, #20]
  41081. 8011a46: 6a5b ldr r3, [r3, #36] @ 0x24
  41082. 8011a48: 4a84 ldr r2, [pc, #528] @ (8011c5c <UART_SetConfig+0x930>)
  41083. 8011a4a: f832 3013 ldrh.w r3, [r2, r3, lsl #1]
  41084. 8011a4e: b29b uxth r3, r3
  41085. 8011a50: 2200 movs r2, #0
  41086. 8011a52: 603b str r3, [r7, #0]
  41087. 8011a54: 607a str r2, [r7, #4]
  41088. 8011a56: e9d7 2300 ldrd r2, r3, [r7]
  41089. 8011a5a: e9d7 0102 ldrd r0, r1, [r7, #8]
  41090. 8011a5e: f7ee fc8f bl 8000380 <__aeabi_uldivmod>
  41091. 8011a62: 4602 mov r2, r0
  41092. 8011a64: 460b mov r3, r1
  41093. 8011a66: 4610 mov r0, r2
  41094. 8011a68: 4619 mov r1, r3
  41095. 8011a6a: f04f 0200 mov.w r2, #0
  41096. 8011a6e: f04f 0300 mov.w r3, #0
  41097. 8011a72: 020b lsls r3, r1, #8
  41098. 8011a74: ea43 6310 orr.w r3, r3, r0, lsr #24
  41099. 8011a78: 0202 lsls r2, r0, #8
  41100. 8011a7a: 6979 ldr r1, [r7, #20]
  41101. 8011a7c: 6849 ldr r1, [r1, #4]
  41102. 8011a7e: 0849 lsrs r1, r1, #1
  41103. 8011a80: 2000 movs r0, #0
  41104. 8011a82: 460c mov r4, r1
  41105. 8011a84: 4605 mov r5, r0
  41106. 8011a86: eb12 0804 adds.w r8, r2, r4
  41107. 8011a8a: eb43 0905 adc.w r9, r3, r5
  41108. 8011a8e: 697b ldr r3, [r7, #20]
  41109. 8011a90: 685b ldr r3, [r3, #4]
  41110. 8011a92: 2200 movs r2, #0
  41111. 8011a94: 469a mov sl, r3
  41112. 8011a96: 4693 mov fp, r2
  41113. 8011a98: 4652 mov r2, sl
  41114. 8011a9a: 465b mov r3, fp
  41115. 8011a9c: 4640 mov r0, r8
  41116. 8011a9e: 4649 mov r1, r9
  41117. 8011aa0: f7ee fc6e bl 8000380 <__aeabi_uldivmod>
  41118. 8011aa4: 4602 mov r2, r0
  41119. 8011aa6: 460b mov r3, r1
  41120. 8011aa8: 4613 mov r3, r2
  41121. 8011aaa: 63bb str r3, [r7, #56] @ 0x38
  41122. if ((usartdiv >= LPUART_BRR_MIN) && (usartdiv <= LPUART_BRR_MAX))
  41123. 8011aac: 6bbb ldr r3, [r7, #56] @ 0x38
  41124. 8011aae: f5b3 7f40 cmp.w r3, #768 @ 0x300
  41125. 8011ab2: d308 bcc.n 8011ac6 <UART_SetConfig+0x79a>
  41126. 8011ab4: 6bbb ldr r3, [r7, #56] @ 0x38
  41127. 8011ab6: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
  41128. 8011aba: d204 bcs.n 8011ac6 <UART_SetConfig+0x79a>
  41129. {
  41130. huart->Instance->BRR = usartdiv;
  41131. 8011abc: 697b ldr r3, [r7, #20]
  41132. 8011abe: 681b ldr r3, [r3, #0]
  41133. 8011ac0: 6bba ldr r2, [r7, #56] @ 0x38
  41134. 8011ac2: 60da str r2, [r3, #12]
  41135. 8011ac4: e17c b.n 8011dc0 <UART_SetConfig+0xa94>
  41136. }
  41137. else
  41138. {
  41139. ret = HAL_ERROR;
  41140. 8011ac6: 2301 movs r3, #1
  41141. 8011ac8: f887 3042 strb.w r3, [r7, #66] @ 0x42
  41142. 8011acc: e178 b.n 8011dc0 <UART_SetConfig+0xa94>
  41143. } /* if ( (lpuart_ker_ck_pres < (3 * huart->Init.BaudRate) ) ||
  41144. (lpuart_ker_ck_pres > (4096 * huart->Init.BaudRate) )) */
  41145. } /* if (pclk != 0) */
  41146. }
  41147. /* Check UART Over Sampling to set Baud Rate Register */
  41148. else if (huart->Init.OverSampling == UART_OVERSAMPLING_8)
  41149. 8011ace: 697b ldr r3, [r7, #20]
  41150. 8011ad0: 69db ldr r3, [r3, #28]
  41151. 8011ad2: f5b3 4f00 cmp.w r3, #32768 @ 0x8000
  41152. 8011ad6: f040 80c5 bne.w 8011c64 <UART_SetConfig+0x938>
  41153. {
  41154. switch (clocksource)
  41155. 8011ada: f897 3043 ldrb.w r3, [r7, #67] @ 0x43
  41156. 8011ade: 2b20 cmp r3, #32
  41157. 8011ae0: dc48 bgt.n 8011b74 <UART_SetConfig+0x848>
  41158. 8011ae2: 2b00 cmp r3, #0
  41159. 8011ae4: db7b blt.n 8011bde <UART_SetConfig+0x8b2>
  41160. 8011ae6: 2b20 cmp r3, #32
  41161. 8011ae8: d879 bhi.n 8011bde <UART_SetConfig+0x8b2>
  41162. 8011aea: a201 add r2, pc, #4 @ (adr r2, 8011af0 <UART_SetConfig+0x7c4>)
  41163. 8011aec: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  41164. 8011af0: 08011b7b .word 0x08011b7b
  41165. 8011af4: 08011b83 .word 0x08011b83
  41166. 8011af8: 08011bdf .word 0x08011bdf
  41167. 8011afc: 08011bdf .word 0x08011bdf
  41168. 8011b00: 08011b8b .word 0x08011b8b
  41169. 8011b04: 08011bdf .word 0x08011bdf
  41170. 8011b08: 08011bdf .word 0x08011bdf
  41171. 8011b0c: 08011bdf .word 0x08011bdf
  41172. 8011b10: 08011b9b .word 0x08011b9b
  41173. 8011b14: 08011bdf .word 0x08011bdf
  41174. 8011b18: 08011bdf .word 0x08011bdf
  41175. 8011b1c: 08011bdf .word 0x08011bdf
  41176. 8011b20: 08011bdf .word 0x08011bdf
  41177. 8011b24: 08011bdf .word 0x08011bdf
  41178. 8011b28: 08011bdf .word 0x08011bdf
  41179. 8011b2c: 08011bdf .word 0x08011bdf
  41180. 8011b30: 08011bab .word 0x08011bab
  41181. 8011b34: 08011bdf .word 0x08011bdf
  41182. 8011b38: 08011bdf .word 0x08011bdf
  41183. 8011b3c: 08011bdf .word 0x08011bdf
  41184. 8011b40: 08011bdf .word 0x08011bdf
  41185. 8011b44: 08011bdf .word 0x08011bdf
  41186. 8011b48: 08011bdf .word 0x08011bdf
  41187. 8011b4c: 08011bdf .word 0x08011bdf
  41188. 8011b50: 08011bdf .word 0x08011bdf
  41189. 8011b54: 08011bdf .word 0x08011bdf
  41190. 8011b58: 08011bdf .word 0x08011bdf
  41191. 8011b5c: 08011bdf .word 0x08011bdf
  41192. 8011b60: 08011bdf .word 0x08011bdf
  41193. 8011b64: 08011bdf .word 0x08011bdf
  41194. 8011b68: 08011bdf .word 0x08011bdf
  41195. 8011b6c: 08011bdf .word 0x08011bdf
  41196. 8011b70: 08011bd1 .word 0x08011bd1
  41197. 8011b74: 2b40 cmp r3, #64 @ 0x40
  41198. 8011b76: d02e beq.n 8011bd6 <UART_SetConfig+0x8aa>
  41199. 8011b78: e031 b.n 8011bde <UART_SetConfig+0x8b2>
  41200. {
  41201. case UART_CLOCKSOURCE_D2PCLK1:
  41202. pclk = HAL_RCC_GetPCLK1Freq();
  41203. 8011b7a: f7fa f921 bl 800bdc0 <HAL_RCC_GetPCLK1Freq>
  41204. 8011b7e: 63f8 str r0, [r7, #60] @ 0x3c
  41205. break;
  41206. 8011b80: e033 b.n 8011bea <UART_SetConfig+0x8be>
  41207. case UART_CLOCKSOURCE_D2PCLK2:
  41208. pclk = HAL_RCC_GetPCLK2Freq();
  41209. 8011b82: f7fa f933 bl 800bdec <HAL_RCC_GetPCLK2Freq>
  41210. 8011b86: 63f8 str r0, [r7, #60] @ 0x3c
  41211. break;
  41212. 8011b88: e02f b.n 8011bea <UART_SetConfig+0x8be>
  41213. case UART_CLOCKSOURCE_PLL2:
  41214. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  41215. 8011b8a: f107 0324 add.w r3, r7, #36 @ 0x24
  41216. 8011b8e: 4618 mov r0, r3
  41217. 8011b90: f7fc f908 bl 800dda4 <HAL_RCCEx_GetPLL2ClockFreq>
  41218. pclk = pll2_clocks.PLL2_Q_Frequency;
  41219. 8011b94: 6abb ldr r3, [r7, #40] @ 0x28
  41220. 8011b96: 63fb str r3, [r7, #60] @ 0x3c
  41221. break;
  41222. 8011b98: e027 b.n 8011bea <UART_SetConfig+0x8be>
  41223. case UART_CLOCKSOURCE_PLL3:
  41224. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  41225. 8011b9a: f107 0318 add.w r3, r7, #24
  41226. 8011b9e: 4618 mov r0, r3
  41227. 8011ba0: f7fc fa54 bl 800e04c <HAL_RCCEx_GetPLL3ClockFreq>
  41228. pclk = pll3_clocks.PLL3_Q_Frequency;
  41229. 8011ba4: 69fb ldr r3, [r7, #28]
  41230. 8011ba6: 63fb str r3, [r7, #60] @ 0x3c
  41231. break;
  41232. 8011ba8: e01f b.n 8011bea <UART_SetConfig+0x8be>
  41233. case UART_CLOCKSOURCE_HSI:
  41234. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  41235. 8011baa: 4b2d ldr r3, [pc, #180] @ (8011c60 <UART_SetConfig+0x934>)
  41236. 8011bac: 681b ldr r3, [r3, #0]
  41237. 8011bae: f003 0320 and.w r3, r3, #32
  41238. 8011bb2: 2b00 cmp r3, #0
  41239. 8011bb4: d009 beq.n 8011bca <UART_SetConfig+0x89e>
  41240. {
  41241. pclk = (uint32_t)(HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3U));
  41242. 8011bb6: 4b2a ldr r3, [pc, #168] @ (8011c60 <UART_SetConfig+0x934>)
  41243. 8011bb8: 681b ldr r3, [r3, #0]
  41244. 8011bba: 08db lsrs r3, r3, #3
  41245. 8011bbc: f003 0303 and.w r3, r3, #3
  41246. 8011bc0: 4a24 ldr r2, [pc, #144] @ (8011c54 <UART_SetConfig+0x928>)
  41247. 8011bc2: fa22 f303 lsr.w r3, r2, r3
  41248. 8011bc6: 63fb str r3, [r7, #60] @ 0x3c
  41249. }
  41250. else
  41251. {
  41252. pclk = (uint32_t) HSI_VALUE;
  41253. }
  41254. break;
  41255. 8011bc8: e00f b.n 8011bea <UART_SetConfig+0x8be>
  41256. pclk = (uint32_t) HSI_VALUE;
  41257. 8011bca: 4b22 ldr r3, [pc, #136] @ (8011c54 <UART_SetConfig+0x928>)
  41258. 8011bcc: 63fb str r3, [r7, #60] @ 0x3c
  41259. break;
  41260. 8011bce: e00c b.n 8011bea <UART_SetConfig+0x8be>
  41261. case UART_CLOCKSOURCE_CSI:
  41262. pclk = (uint32_t) CSI_VALUE;
  41263. 8011bd0: 4b21 ldr r3, [pc, #132] @ (8011c58 <UART_SetConfig+0x92c>)
  41264. 8011bd2: 63fb str r3, [r7, #60] @ 0x3c
  41265. break;
  41266. 8011bd4: e009 b.n 8011bea <UART_SetConfig+0x8be>
  41267. case UART_CLOCKSOURCE_LSE:
  41268. pclk = (uint32_t) LSE_VALUE;
  41269. 8011bd6: f44f 4300 mov.w r3, #32768 @ 0x8000
  41270. 8011bda: 63fb str r3, [r7, #60] @ 0x3c
  41271. break;
  41272. 8011bdc: e005 b.n 8011bea <UART_SetConfig+0x8be>
  41273. default:
  41274. pclk = 0U;
  41275. 8011bde: 2300 movs r3, #0
  41276. 8011be0: 63fb str r3, [r7, #60] @ 0x3c
  41277. ret = HAL_ERROR;
  41278. 8011be2: 2301 movs r3, #1
  41279. 8011be4: f887 3042 strb.w r3, [r7, #66] @ 0x42
  41280. break;
  41281. 8011be8: bf00 nop
  41282. }
  41283. /* USARTDIV must be greater than or equal to 0d16 */
  41284. if (pclk != 0U)
  41285. 8011bea: 6bfb ldr r3, [r7, #60] @ 0x3c
  41286. 8011bec: 2b00 cmp r3, #0
  41287. 8011bee: f000 80e7 beq.w 8011dc0 <UART_SetConfig+0xa94>
  41288. {
  41289. usartdiv = (uint32_t)(UART_DIV_SAMPLING8(pclk, huart->Init.BaudRate, huart->Init.ClockPrescaler));
  41290. 8011bf2: 697b ldr r3, [r7, #20]
  41291. 8011bf4: 6a5b ldr r3, [r3, #36] @ 0x24
  41292. 8011bf6: 4a19 ldr r2, [pc, #100] @ (8011c5c <UART_SetConfig+0x930>)
  41293. 8011bf8: f832 3013 ldrh.w r3, [r2, r3, lsl #1]
  41294. 8011bfc: 461a mov r2, r3
  41295. 8011bfe: 6bfb ldr r3, [r7, #60] @ 0x3c
  41296. 8011c00: fbb3 f3f2 udiv r3, r3, r2
  41297. 8011c04: 005a lsls r2, r3, #1
  41298. 8011c06: 697b ldr r3, [r7, #20]
  41299. 8011c08: 685b ldr r3, [r3, #4]
  41300. 8011c0a: 085b lsrs r3, r3, #1
  41301. 8011c0c: 441a add r2, r3
  41302. 8011c0e: 697b ldr r3, [r7, #20]
  41303. 8011c10: 685b ldr r3, [r3, #4]
  41304. 8011c12: fbb2 f3f3 udiv r3, r2, r3
  41305. 8011c16: 63bb str r3, [r7, #56] @ 0x38
  41306. if ((usartdiv >= UART_BRR_MIN) && (usartdiv <= UART_BRR_MAX))
  41307. 8011c18: 6bbb ldr r3, [r7, #56] @ 0x38
  41308. 8011c1a: 2b0f cmp r3, #15
  41309. 8011c1c: d916 bls.n 8011c4c <UART_SetConfig+0x920>
  41310. 8011c1e: 6bbb ldr r3, [r7, #56] @ 0x38
  41311. 8011c20: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  41312. 8011c24: d212 bcs.n 8011c4c <UART_SetConfig+0x920>
  41313. {
  41314. brrtemp = (uint16_t)(usartdiv & 0xFFF0U);
  41315. 8011c26: 6bbb ldr r3, [r7, #56] @ 0x38
  41316. 8011c28: b29b uxth r3, r3
  41317. 8011c2a: f023 030f bic.w r3, r3, #15
  41318. 8011c2e: 86fb strh r3, [r7, #54] @ 0x36
  41319. brrtemp |= (uint16_t)((usartdiv & (uint16_t)0x000FU) >> 1U);
  41320. 8011c30: 6bbb ldr r3, [r7, #56] @ 0x38
  41321. 8011c32: 085b lsrs r3, r3, #1
  41322. 8011c34: b29b uxth r3, r3
  41323. 8011c36: f003 0307 and.w r3, r3, #7
  41324. 8011c3a: b29a uxth r2, r3
  41325. 8011c3c: 8efb ldrh r3, [r7, #54] @ 0x36
  41326. 8011c3e: 4313 orrs r3, r2
  41327. 8011c40: 86fb strh r3, [r7, #54] @ 0x36
  41328. huart->Instance->BRR = brrtemp;
  41329. 8011c42: 697b ldr r3, [r7, #20]
  41330. 8011c44: 681b ldr r3, [r3, #0]
  41331. 8011c46: 8efa ldrh r2, [r7, #54] @ 0x36
  41332. 8011c48: 60da str r2, [r3, #12]
  41333. 8011c4a: e0b9 b.n 8011dc0 <UART_SetConfig+0xa94>
  41334. }
  41335. else
  41336. {
  41337. ret = HAL_ERROR;
  41338. 8011c4c: 2301 movs r3, #1
  41339. 8011c4e: f887 3042 strb.w r3, [r7, #66] @ 0x42
  41340. 8011c52: e0b5 b.n 8011dc0 <UART_SetConfig+0xa94>
  41341. 8011c54: 03d09000 .word 0x03d09000
  41342. 8011c58: 003d0900 .word 0x003d0900
  41343. 8011c5c: 080189e0 .word 0x080189e0
  41344. 8011c60: 58024400 .word 0x58024400
  41345. }
  41346. }
  41347. }
  41348. else
  41349. {
  41350. switch (clocksource)
  41351. 8011c64: f897 3043 ldrb.w r3, [r7, #67] @ 0x43
  41352. 8011c68: 2b20 cmp r3, #32
  41353. 8011c6a: dc49 bgt.n 8011d00 <UART_SetConfig+0x9d4>
  41354. 8011c6c: 2b00 cmp r3, #0
  41355. 8011c6e: db7c blt.n 8011d6a <UART_SetConfig+0xa3e>
  41356. 8011c70: 2b20 cmp r3, #32
  41357. 8011c72: d87a bhi.n 8011d6a <UART_SetConfig+0xa3e>
  41358. 8011c74: a201 add r2, pc, #4 @ (adr r2, 8011c7c <UART_SetConfig+0x950>)
  41359. 8011c76: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  41360. 8011c7a: bf00 nop
  41361. 8011c7c: 08011d07 .word 0x08011d07
  41362. 8011c80: 08011d0f .word 0x08011d0f
  41363. 8011c84: 08011d6b .word 0x08011d6b
  41364. 8011c88: 08011d6b .word 0x08011d6b
  41365. 8011c8c: 08011d17 .word 0x08011d17
  41366. 8011c90: 08011d6b .word 0x08011d6b
  41367. 8011c94: 08011d6b .word 0x08011d6b
  41368. 8011c98: 08011d6b .word 0x08011d6b
  41369. 8011c9c: 08011d27 .word 0x08011d27
  41370. 8011ca0: 08011d6b .word 0x08011d6b
  41371. 8011ca4: 08011d6b .word 0x08011d6b
  41372. 8011ca8: 08011d6b .word 0x08011d6b
  41373. 8011cac: 08011d6b .word 0x08011d6b
  41374. 8011cb0: 08011d6b .word 0x08011d6b
  41375. 8011cb4: 08011d6b .word 0x08011d6b
  41376. 8011cb8: 08011d6b .word 0x08011d6b
  41377. 8011cbc: 08011d37 .word 0x08011d37
  41378. 8011cc0: 08011d6b .word 0x08011d6b
  41379. 8011cc4: 08011d6b .word 0x08011d6b
  41380. 8011cc8: 08011d6b .word 0x08011d6b
  41381. 8011ccc: 08011d6b .word 0x08011d6b
  41382. 8011cd0: 08011d6b .word 0x08011d6b
  41383. 8011cd4: 08011d6b .word 0x08011d6b
  41384. 8011cd8: 08011d6b .word 0x08011d6b
  41385. 8011cdc: 08011d6b .word 0x08011d6b
  41386. 8011ce0: 08011d6b .word 0x08011d6b
  41387. 8011ce4: 08011d6b .word 0x08011d6b
  41388. 8011ce8: 08011d6b .word 0x08011d6b
  41389. 8011cec: 08011d6b .word 0x08011d6b
  41390. 8011cf0: 08011d6b .word 0x08011d6b
  41391. 8011cf4: 08011d6b .word 0x08011d6b
  41392. 8011cf8: 08011d6b .word 0x08011d6b
  41393. 8011cfc: 08011d5d .word 0x08011d5d
  41394. 8011d00: 2b40 cmp r3, #64 @ 0x40
  41395. 8011d02: d02e beq.n 8011d62 <UART_SetConfig+0xa36>
  41396. 8011d04: e031 b.n 8011d6a <UART_SetConfig+0xa3e>
  41397. {
  41398. case UART_CLOCKSOURCE_D2PCLK1:
  41399. pclk = HAL_RCC_GetPCLK1Freq();
  41400. 8011d06: f7fa f85b bl 800bdc0 <HAL_RCC_GetPCLK1Freq>
  41401. 8011d0a: 63f8 str r0, [r7, #60] @ 0x3c
  41402. break;
  41403. 8011d0c: e033 b.n 8011d76 <UART_SetConfig+0xa4a>
  41404. case UART_CLOCKSOURCE_D2PCLK2:
  41405. pclk = HAL_RCC_GetPCLK2Freq();
  41406. 8011d0e: f7fa f86d bl 800bdec <HAL_RCC_GetPCLK2Freq>
  41407. 8011d12: 63f8 str r0, [r7, #60] @ 0x3c
  41408. break;
  41409. 8011d14: e02f b.n 8011d76 <UART_SetConfig+0xa4a>
  41410. case UART_CLOCKSOURCE_PLL2:
  41411. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  41412. 8011d16: f107 0324 add.w r3, r7, #36 @ 0x24
  41413. 8011d1a: 4618 mov r0, r3
  41414. 8011d1c: f7fc f842 bl 800dda4 <HAL_RCCEx_GetPLL2ClockFreq>
  41415. pclk = pll2_clocks.PLL2_Q_Frequency;
  41416. 8011d20: 6abb ldr r3, [r7, #40] @ 0x28
  41417. 8011d22: 63fb str r3, [r7, #60] @ 0x3c
  41418. break;
  41419. 8011d24: e027 b.n 8011d76 <UART_SetConfig+0xa4a>
  41420. case UART_CLOCKSOURCE_PLL3:
  41421. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  41422. 8011d26: f107 0318 add.w r3, r7, #24
  41423. 8011d2a: 4618 mov r0, r3
  41424. 8011d2c: f7fc f98e bl 800e04c <HAL_RCCEx_GetPLL3ClockFreq>
  41425. pclk = pll3_clocks.PLL3_Q_Frequency;
  41426. 8011d30: 69fb ldr r3, [r7, #28]
  41427. 8011d32: 63fb str r3, [r7, #60] @ 0x3c
  41428. break;
  41429. 8011d34: e01f b.n 8011d76 <UART_SetConfig+0xa4a>
  41430. case UART_CLOCKSOURCE_HSI:
  41431. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  41432. 8011d36: 4b2d ldr r3, [pc, #180] @ (8011dec <UART_SetConfig+0xac0>)
  41433. 8011d38: 681b ldr r3, [r3, #0]
  41434. 8011d3a: f003 0320 and.w r3, r3, #32
  41435. 8011d3e: 2b00 cmp r3, #0
  41436. 8011d40: d009 beq.n 8011d56 <UART_SetConfig+0xa2a>
  41437. {
  41438. pclk = (uint32_t)(HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3U));
  41439. 8011d42: 4b2a ldr r3, [pc, #168] @ (8011dec <UART_SetConfig+0xac0>)
  41440. 8011d44: 681b ldr r3, [r3, #0]
  41441. 8011d46: 08db lsrs r3, r3, #3
  41442. 8011d48: f003 0303 and.w r3, r3, #3
  41443. 8011d4c: 4a28 ldr r2, [pc, #160] @ (8011df0 <UART_SetConfig+0xac4>)
  41444. 8011d4e: fa22 f303 lsr.w r3, r2, r3
  41445. 8011d52: 63fb str r3, [r7, #60] @ 0x3c
  41446. }
  41447. else
  41448. {
  41449. pclk = (uint32_t) HSI_VALUE;
  41450. }
  41451. break;
  41452. 8011d54: e00f b.n 8011d76 <UART_SetConfig+0xa4a>
  41453. pclk = (uint32_t) HSI_VALUE;
  41454. 8011d56: 4b26 ldr r3, [pc, #152] @ (8011df0 <UART_SetConfig+0xac4>)
  41455. 8011d58: 63fb str r3, [r7, #60] @ 0x3c
  41456. break;
  41457. 8011d5a: e00c b.n 8011d76 <UART_SetConfig+0xa4a>
  41458. case UART_CLOCKSOURCE_CSI:
  41459. pclk = (uint32_t) CSI_VALUE;
  41460. 8011d5c: 4b25 ldr r3, [pc, #148] @ (8011df4 <UART_SetConfig+0xac8>)
  41461. 8011d5e: 63fb str r3, [r7, #60] @ 0x3c
  41462. break;
  41463. 8011d60: e009 b.n 8011d76 <UART_SetConfig+0xa4a>
  41464. case UART_CLOCKSOURCE_LSE:
  41465. pclk = (uint32_t) LSE_VALUE;
  41466. 8011d62: f44f 4300 mov.w r3, #32768 @ 0x8000
  41467. 8011d66: 63fb str r3, [r7, #60] @ 0x3c
  41468. break;
  41469. 8011d68: e005 b.n 8011d76 <UART_SetConfig+0xa4a>
  41470. default:
  41471. pclk = 0U;
  41472. 8011d6a: 2300 movs r3, #0
  41473. 8011d6c: 63fb str r3, [r7, #60] @ 0x3c
  41474. ret = HAL_ERROR;
  41475. 8011d6e: 2301 movs r3, #1
  41476. 8011d70: f887 3042 strb.w r3, [r7, #66] @ 0x42
  41477. break;
  41478. 8011d74: bf00 nop
  41479. }
  41480. if (pclk != 0U)
  41481. 8011d76: 6bfb ldr r3, [r7, #60] @ 0x3c
  41482. 8011d78: 2b00 cmp r3, #0
  41483. 8011d7a: d021 beq.n 8011dc0 <UART_SetConfig+0xa94>
  41484. {
  41485. /* USARTDIV must be greater than or equal to 0d16 */
  41486. usartdiv = (uint32_t)(UART_DIV_SAMPLING16(pclk, huart->Init.BaudRate, huart->Init.ClockPrescaler));
  41487. 8011d7c: 697b ldr r3, [r7, #20]
  41488. 8011d7e: 6a5b ldr r3, [r3, #36] @ 0x24
  41489. 8011d80: 4a1d ldr r2, [pc, #116] @ (8011df8 <UART_SetConfig+0xacc>)
  41490. 8011d82: f832 3013 ldrh.w r3, [r2, r3, lsl #1]
  41491. 8011d86: 461a mov r2, r3
  41492. 8011d88: 6bfb ldr r3, [r7, #60] @ 0x3c
  41493. 8011d8a: fbb3 f2f2 udiv r2, r3, r2
  41494. 8011d8e: 697b ldr r3, [r7, #20]
  41495. 8011d90: 685b ldr r3, [r3, #4]
  41496. 8011d92: 085b lsrs r3, r3, #1
  41497. 8011d94: 441a add r2, r3
  41498. 8011d96: 697b ldr r3, [r7, #20]
  41499. 8011d98: 685b ldr r3, [r3, #4]
  41500. 8011d9a: fbb2 f3f3 udiv r3, r2, r3
  41501. 8011d9e: 63bb str r3, [r7, #56] @ 0x38
  41502. if ((usartdiv >= UART_BRR_MIN) && (usartdiv <= UART_BRR_MAX))
  41503. 8011da0: 6bbb ldr r3, [r7, #56] @ 0x38
  41504. 8011da2: 2b0f cmp r3, #15
  41505. 8011da4: d909 bls.n 8011dba <UART_SetConfig+0xa8e>
  41506. 8011da6: 6bbb ldr r3, [r7, #56] @ 0x38
  41507. 8011da8: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  41508. 8011dac: d205 bcs.n 8011dba <UART_SetConfig+0xa8e>
  41509. {
  41510. huart->Instance->BRR = (uint16_t)usartdiv;
  41511. 8011dae: 6bbb ldr r3, [r7, #56] @ 0x38
  41512. 8011db0: b29a uxth r2, r3
  41513. 8011db2: 697b ldr r3, [r7, #20]
  41514. 8011db4: 681b ldr r3, [r3, #0]
  41515. 8011db6: 60da str r2, [r3, #12]
  41516. 8011db8: e002 b.n 8011dc0 <UART_SetConfig+0xa94>
  41517. }
  41518. else
  41519. {
  41520. ret = HAL_ERROR;
  41521. 8011dba: 2301 movs r3, #1
  41522. 8011dbc: f887 3042 strb.w r3, [r7, #66] @ 0x42
  41523. }
  41524. }
  41525. }
  41526. /* Initialize the number of data to process during RX/TX ISR execution */
  41527. huart->NbTxDataToProcess = 1;
  41528. 8011dc0: 697b ldr r3, [r7, #20]
  41529. 8011dc2: 2201 movs r2, #1
  41530. 8011dc4: f8a3 206a strh.w r2, [r3, #106] @ 0x6a
  41531. huart->NbRxDataToProcess = 1;
  41532. 8011dc8: 697b ldr r3, [r7, #20]
  41533. 8011dca: 2201 movs r2, #1
  41534. 8011dcc: f8a3 2068 strh.w r2, [r3, #104] @ 0x68
  41535. /* Clear ISR function pointers */
  41536. huart->RxISR = NULL;
  41537. 8011dd0: 697b ldr r3, [r7, #20]
  41538. 8011dd2: 2200 movs r2, #0
  41539. 8011dd4: 675a str r2, [r3, #116] @ 0x74
  41540. huart->TxISR = NULL;
  41541. 8011dd6: 697b ldr r3, [r7, #20]
  41542. 8011dd8: 2200 movs r2, #0
  41543. 8011dda: 679a str r2, [r3, #120] @ 0x78
  41544. return ret;
  41545. 8011ddc: f897 3042 ldrb.w r3, [r7, #66] @ 0x42
  41546. }
  41547. 8011de0: 4618 mov r0, r3
  41548. 8011de2: 3748 adds r7, #72 @ 0x48
  41549. 8011de4: 46bd mov sp, r7
  41550. 8011de6: e8bd 8fb0 ldmia.w sp!, {r4, r5, r7, r8, r9, sl, fp, pc}
  41551. 8011dea: bf00 nop
  41552. 8011dec: 58024400 .word 0x58024400
  41553. 8011df0: 03d09000 .word 0x03d09000
  41554. 8011df4: 003d0900 .word 0x003d0900
  41555. 8011df8: 080189e0 .word 0x080189e0
  41556. 08011dfc <UART_AdvFeatureConfig>:
  41557. * @brief Configure the UART peripheral advanced features.
  41558. * @param huart UART handle.
  41559. * @retval None
  41560. */
  41561. void UART_AdvFeatureConfig(UART_HandleTypeDef *huart)
  41562. {
  41563. 8011dfc: b480 push {r7}
  41564. 8011dfe: b083 sub sp, #12
  41565. 8011e00: af00 add r7, sp, #0
  41566. 8011e02: 6078 str r0, [r7, #4]
  41567. /* Check whether the set of advanced features to configure is properly set */
  41568. assert_param(IS_UART_ADVFEATURE_INIT(huart->AdvancedInit.AdvFeatureInit));
  41569. /* if required, configure RX/TX pins swap */
  41570. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_SWAP_INIT))
  41571. 8011e04: 687b ldr r3, [r7, #4]
  41572. 8011e06: 6a9b ldr r3, [r3, #40] @ 0x28
  41573. 8011e08: f003 0308 and.w r3, r3, #8
  41574. 8011e0c: 2b00 cmp r3, #0
  41575. 8011e0e: d00a beq.n 8011e26 <UART_AdvFeatureConfig+0x2a>
  41576. {
  41577. assert_param(IS_UART_ADVFEATURE_SWAP(huart->AdvancedInit.Swap));
  41578. MODIFY_REG(huart->Instance->CR2, USART_CR2_SWAP, huart->AdvancedInit.Swap);
  41579. 8011e10: 687b ldr r3, [r7, #4]
  41580. 8011e12: 681b ldr r3, [r3, #0]
  41581. 8011e14: 685b ldr r3, [r3, #4]
  41582. 8011e16: f423 4100 bic.w r1, r3, #32768 @ 0x8000
  41583. 8011e1a: 687b ldr r3, [r7, #4]
  41584. 8011e1c: 6b9a ldr r2, [r3, #56] @ 0x38
  41585. 8011e1e: 687b ldr r3, [r7, #4]
  41586. 8011e20: 681b ldr r3, [r3, #0]
  41587. 8011e22: 430a orrs r2, r1
  41588. 8011e24: 605a str r2, [r3, #4]
  41589. }
  41590. /* if required, configure TX pin active level inversion */
  41591. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_TXINVERT_INIT))
  41592. 8011e26: 687b ldr r3, [r7, #4]
  41593. 8011e28: 6a9b ldr r3, [r3, #40] @ 0x28
  41594. 8011e2a: f003 0301 and.w r3, r3, #1
  41595. 8011e2e: 2b00 cmp r3, #0
  41596. 8011e30: d00a beq.n 8011e48 <UART_AdvFeatureConfig+0x4c>
  41597. {
  41598. assert_param(IS_UART_ADVFEATURE_TXINV(huart->AdvancedInit.TxPinLevelInvert));
  41599. MODIFY_REG(huart->Instance->CR2, USART_CR2_TXINV, huart->AdvancedInit.TxPinLevelInvert);
  41600. 8011e32: 687b ldr r3, [r7, #4]
  41601. 8011e34: 681b ldr r3, [r3, #0]
  41602. 8011e36: 685b ldr r3, [r3, #4]
  41603. 8011e38: f423 3100 bic.w r1, r3, #131072 @ 0x20000
  41604. 8011e3c: 687b ldr r3, [r7, #4]
  41605. 8011e3e: 6ada ldr r2, [r3, #44] @ 0x2c
  41606. 8011e40: 687b ldr r3, [r7, #4]
  41607. 8011e42: 681b ldr r3, [r3, #0]
  41608. 8011e44: 430a orrs r2, r1
  41609. 8011e46: 605a str r2, [r3, #4]
  41610. }
  41611. /* if required, configure RX pin active level inversion */
  41612. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_RXINVERT_INIT))
  41613. 8011e48: 687b ldr r3, [r7, #4]
  41614. 8011e4a: 6a9b ldr r3, [r3, #40] @ 0x28
  41615. 8011e4c: f003 0302 and.w r3, r3, #2
  41616. 8011e50: 2b00 cmp r3, #0
  41617. 8011e52: d00a beq.n 8011e6a <UART_AdvFeatureConfig+0x6e>
  41618. {
  41619. assert_param(IS_UART_ADVFEATURE_RXINV(huart->AdvancedInit.RxPinLevelInvert));
  41620. MODIFY_REG(huart->Instance->CR2, USART_CR2_RXINV, huart->AdvancedInit.RxPinLevelInvert);
  41621. 8011e54: 687b ldr r3, [r7, #4]
  41622. 8011e56: 681b ldr r3, [r3, #0]
  41623. 8011e58: 685b ldr r3, [r3, #4]
  41624. 8011e5a: f423 3180 bic.w r1, r3, #65536 @ 0x10000
  41625. 8011e5e: 687b ldr r3, [r7, #4]
  41626. 8011e60: 6b1a ldr r2, [r3, #48] @ 0x30
  41627. 8011e62: 687b ldr r3, [r7, #4]
  41628. 8011e64: 681b ldr r3, [r3, #0]
  41629. 8011e66: 430a orrs r2, r1
  41630. 8011e68: 605a str r2, [r3, #4]
  41631. }
  41632. /* if required, configure data inversion */
  41633. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_DATAINVERT_INIT))
  41634. 8011e6a: 687b ldr r3, [r7, #4]
  41635. 8011e6c: 6a9b ldr r3, [r3, #40] @ 0x28
  41636. 8011e6e: f003 0304 and.w r3, r3, #4
  41637. 8011e72: 2b00 cmp r3, #0
  41638. 8011e74: d00a beq.n 8011e8c <UART_AdvFeatureConfig+0x90>
  41639. {
  41640. assert_param(IS_UART_ADVFEATURE_DATAINV(huart->AdvancedInit.DataInvert));
  41641. MODIFY_REG(huart->Instance->CR2, USART_CR2_DATAINV, huart->AdvancedInit.DataInvert);
  41642. 8011e76: 687b ldr r3, [r7, #4]
  41643. 8011e78: 681b ldr r3, [r3, #0]
  41644. 8011e7a: 685b ldr r3, [r3, #4]
  41645. 8011e7c: f423 2180 bic.w r1, r3, #262144 @ 0x40000
  41646. 8011e80: 687b ldr r3, [r7, #4]
  41647. 8011e82: 6b5a ldr r2, [r3, #52] @ 0x34
  41648. 8011e84: 687b ldr r3, [r7, #4]
  41649. 8011e86: 681b ldr r3, [r3, #0]
  41650. 8011e88: 430a orrs r2, r1
  41651. 8011e8a: 605a str r2, [r3, #4]
  41652. }
  41653. /* if required, configure RX overrun detection disabling */
  41654. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_RXOVERRUNDISABLE_INIT))
  41655. 8011e8c: 687b ldr r3, [r7, #4]
  41656. 8011e8e: 6a9b ldr r3, [r3, #40] @ 0x28
  41657. 8011e90: f003 0310 and.w r3, r3, #16
  41658. 8011e94: 2b00 cmp r3, #0
  41659. 8011e96: d00a beq.n 8011eae <UART_AdvFeatureConfig+0xb2>
  41660. {
  41661. assert_param(IS_UART_OVERRUN(huart->AdvancedInit.OverrunDisable));
  41662. MODIFY_REG(huart->Instance->CR3, USART_CR3_OVRDIS, huart->AdvancedInit.OverrunDisable);
  41663. 8011e98: 687b ldr r3, [r7, #4]
  41664. 8011e9a: 681b ldr r3, [r3, #0]
  41665. 8011e9c: 689b ldr r3, [r3, #8]
  41666. 8011e9e: f423 5180 bic.w r1, r3, #4096 @ 0x1000
  41667. 8011ea2: 687b ldr r3, [r7, #4]
  41668. 8011ea4: 6bda ldr r2, [r3, #60] @ 0x3c
  41669. 8011ea6: 687b ldr r3, [r7, #4]
  41670. 8011ea8: 681b ldr r3, [r3, #0]
  41671. 8011eaa: 430a orrs r2, r1
  41672. 8011eac: 609a str r2, [r3, #8]
  41673. }
  41674. /* if required, configure DMA disabling on reception error */
  41675. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_DMADISABLEONERROR_INIT))
  41676. 8011eae: 687b ldr r3, [r7, #4]
  41677. 8011eb0: 6a9b ldr r3, [r3, #40] @ 0x28
  41678. 8011eb2: f003 0320 and.w r3, r3, #32
  41679. 8011eb6: 2b00 cmp r3, #0
  41680. 8011eb8: d00a beq.n 8011ed0 <UART_AdvFeatureConfig+0xd4>
  41681. {
  41682. assert_param(IS_UART_ADVFEATURE_DMAONRXERROR(huart->AdvancedInit.DMADisableonRxError));
  41683. MODIFY_REG(huart->Instance->CR3, USART_CR3_DDRE, huart->AdvancedInit.DMADisableonRxError);
  41684. 8011eba: 687b ldr r3, [r7, #4]
  41685. 8011ebc: 681b ldr r3, [r3, #0]
  41686. 8011ebe: 689b ldr r3, [r3, #8]
  41687. 8011ec0: f423 5100 bic.w r1, r3, #8192 @ 0x2000
  41688. 8011ec4: 687b ldr r3, [r7, #4]
  41689. 8011ec6: 6c1a ldr r2, [r3, #64] @ 0x40
  41690. 8011ec8: 687b ldr r3, [r7, #4]
  41691. 8011eca: 681b ldr r3, [r3, #0]
  41692. 8011ecc: 430a orrs r2, r1
  41693. 8011ece: 609a str r2, [r3, #8]
  41694. }
  41695. /* if required, configure auto Baud rate detection scheme */
  41696. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_AUTOBAUDRATE_INIT))
  41697. 8011ed0: 687b ldr r3, [r7, #4]
  41698. 8011ed2: 6a9b ldr r3, [r3, #40] @ 0x28
  41699. 8011ed4: f003 0340 and.w r3, r3, #64 @ 0x40
  41700. 8011ed8: 2b00 cmp r3, #0
  41701. 8011eda: d01a beq.n 8011f12 <UART_AdvFeatureConfig+0x116>
  41702. {
  41703. assert_param(IS_USART_AUTOBAUDRATE_DETECTION_INSTANCE(huart->Instance));
  41704. assert_param(IS_UART_ADVFEATURE_AUTOBAUDRATE(huart->AdvancedInit.AutoBaudRateEnable));
  41705. MODIFY_REG(huart->Instance->CR2, USART_CR2_ABREN, huart->AdvancedInit.AutoBaudRateEnable);
  41706. 8011edc: 687b ldr r3, [r7, #4]
  41707. 8011ede: 681b ldr r3, [r3, #0]
  41708. 8011ee0: 685b ldr r3, [r3, #4]
  41709. 8011ee2: f423 1180 bic.w r1, r3, #1048576 @ 0x100000
  41710. 8011ee6: 687b ldr r3, [r7, #4]
  41711. 8011ee8: 6c5a ldr r2, [r3, #68] @ 0x44
  41712. 8011eea: 687b ldr r3, [r7, #4]
  41713. 8011eec: 681b ldr r3, [r3, #0]
  41714. 8011eee: 430a orrs r2, r1
  41715. 8011ef0: 605a str r2, [r3, #4]
  41716. /* set auto Baudrate detection parameters if detection is enabled */
  41717. if (huart->AdvancedInit.AutoBaudRateEnable == UART_ADVFEATURE_AUTOBAUDRATE_ENABLE)
  41718. 8011ef2: 687b ldr r3, [r7, #4]
  41719. 8011ef4: 6c5b ldr r3, [r3, #68] @ 0x44
  41720. 8011ef6: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
  41721. 8011efa: d10a bne.n 8011f12 <UART_AdvFeatureConfig+0x116>
  41722. {
  41723. assert_param(IS_UART_ADVFEATURE_AUTOBAUDRATEMODE(huart->AdvancedInit.AutoBaudRateMode));
  41724. MODIFY_REG(huart->Instance->CR2, USART_CR2_ABRMODE, huart->AdvancedInit.AutoBaudRateMode);
  41725. 8011efc: 687b ldr r3, [r7, #4]
  41726. 8011efe: 681b ldr r3, [r3, #0]
  41727. 8011f00: 685b ldr r3, [r3, #4]
  41728. 8011f02: f423 01c0 bic.w r1, r3, #6291456 @ 0x600000
  41729. 8011f06: 687b ldr r3, [r7, #4]
  41730. 8011f08: 6c9a ldr r2, [r3, #72] @ 0x48
  41731. 8011f0a: 687b ldr r3, [r7, #4]
  41732. 8011f0c: 681b ldr r3, [r3, #0]
  41733. 8011f0e: 430a orrs r2, r1
  41734. 8011f10: 605a str r2, [r3, #4]
  41735. }
  41736. }
  41737. /* if required, configure MSB first on communication line */
  41738. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_MSBFIRST_INIT))
  41739. 8011f12: 687b ldr r3, [r7, #4]
  41740. 8011f14: 6a9b ldr r3, [r3, #40] @ 0x28
  41741. 8011f16: f003 0380 and.w r3, r3, #128 @ 0x80
  41742. 8011f1a: 2b00 cmp r3, #0
  41743. 8011f1c: d00a beq.n 8011f34 <UART_AdvFeatureConfig+0x138>
  41744. {
  41745. assert_param(IS_UART_ADVFEATURE_MSBFIRST(huart->AdvancedInit.MSBFirst));
  41746. MODIFY_REG(huart->Instance->CR2, USART_CR2_MSBFIRST, huart->AdvancedInit.MSBFirst);
  41747. 8011f1e: 687b ldr r3, [r7, #4]
  41748. 8011f20: 681b ldr r3, [r3, #0]
  41749. 8011f22: 685b ldr r3, [r3, #4]
  41750. 8011f24: f423 2100 bic.w r1, r3, #524288 @ 0x80000
  41751. 8011f28: 687b ldr r3, [r7, #4]
  41752. 8011f2a: 6cda ldr r2, [r3, #76] @ 0x4c
  41753. 8011f2c: 687b ldr r3, [r7, #4]
  41754. 8011f2e: 681b ldr r3, [r3, #0]
  41755. 8011f30: 430a orrs r2, r1
  41756. 8011f32: 605a str r2, [r3, #4]
  41757. }
  41758. }
  41759. 8011f34: bf00 nop
  41760. 8011f36: 370c adds r7, #12
  41761. 8011f38: 46bd mov sp, r7
  41762. 8011f3a: f85d 7b04 ldr.w r7, [sp], #4
  41763. 8011f3e: 4770 bx lr
  41764. 08011f40 <UART_CheckIdleState>:
  41765. * @brief Check the UART Idle State.
  41766. * @param huart UART handle.
  41767. * @retval HAL status
  41768. */
  41769. HAL_StatusTypeDef UART_CheckIdleState(UART_HandleTypeDef *huart)
  41770. {
  41771. 8011f40: b580 push {r7, lr}
  41772. 8011f42: b098 sub sp, #96 @ 0x60
  41773. 8011f44: af02 add r7, sp, #8
  41774. 8011f46: 6078 str r0, [r7, #4]
  41775. uint32_t tickstart;
  41776. /* Initialize the UART ErrorCode */
  41777. huart->ErrorCode = HAL_UART_ERROR_NONE;
  41778. 8011f48: 687b ldr r3, [r7, #4]
  41779. 8011f4a: 2200 movs r2, #0
  41780. 8011f4c: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  41781. /* Init tickstart for timeout management */
  41782. tickstart = HAL_GetTick();
  41783. 8011f50: f7f3 fa44 bl 80053dc <HAL_GetTick>
  41784. 8011f54: 6578 str r0, [r7, #84] @ 0x54
  41785. /* Check if the Transmitter is enabled */
  41786. if ((huart->Instance->CR1 & USART_CR1_TE) == USART_CR1_TE)
  41787. 8011f56: 687b ldr r3, [r7, #4]
  41788. 8011f58: 681b ldr r3, [r3, #0]
  41789. 8011f5a: 681b ldr r3, [r3, #0]
  41790. 8011f5c: f003 0308 and.w r3, r3, #8
  41791. 8011f60: 2b08 cmp r3, #8
  41792. 8011f62: d12f bne.n 8011fc4 <UART_CheckIdleState+0x84>
  41793. {
  41794. /* Wait until TEACK flag is set */
  41795. if (UART_WaitOnFlagUntilTimeout(huart, USART_ISR_TEACK, RESET, tickstart, HAL_UART_TIMEOUT_VALUE) != HAL_OK)
  41796. 8011f64: f06f 437e mvn.w r3, #4261412864 @ 0xfe000000
  41797. 8011f68: 9300 str r3, [sp, #0]
  41798. 8011f6a: 6d7b ldr r3, [r7, #84] @ 0x54
  41799. 8011f6c: 2200 movs r2, #0
  41800. 8011f6e: f44f 1100 mov.w r1, #2097152 @ 0x200000
  41801. 8011f72: 6878 ldr r0, [r7, #4]
  41802. 8011f74: f000 f88e bl 8012094 <UART_WaitOnFlagUntilTimeout>
  41803. 8011f78: 4603 mov r3, r0
  41804. 8011f7a: 2b00 cmp r3, #0
  41805. 8011f7c: d022 beq.n 8011fc4 <UART_CheckIdleState+0x84>
  41806. {
  41807. /* Disable TXE interrupt for the interrupt process */
  41808. ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_TXEIE_TXFNFIE));
  41809. 8011f7e: 687b ldr r3, [r7, #4]
  41810. 8011f80: 681b ldr r3, [r3, #0]
  41811. 8011f82: 63bb str r3, [r7, #56] @ 0x38
  41812. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  41813. 8011f84: 6bbb ldr r3, [r7, #56] @ 0x38
  41814. 8011f86: e853 3f00 ldrex r3, [r3]
  41815. 8011f8a: 637b str r3, [r7, #52] @ 0x34
  41816. return(result);
  41817. 8011f8c: 6b7b ldr r3, [r7, #52] @ 0x34
  41818. 8011f8e: f023 0380 bic.w r3, r3, #128 @ 0x80
  41819. 8011f92: 653b str r3, [r7, #80] @ 0x50
  41820. 8011f94: 687b ldr r3, [r7, #4]
  41821. 8011f96: 681b ldr r3, [r3, #0]
  41822. 8011f98: 461a mov r2, r3
  41823. 8011f9a: 6d3b ldr r3, [r7, #80] @ 0x50
  41824. 8011f9c: 647b str r3, [r7, #68] @ 0x44
  41825. 8011f9e: 643a str r2, [r7, #64] @ 0x40
  41826. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  41827. 8011fa0: 6c39 ldr r1, [r7, #64] @ 0x40
  41828. 8011fa2: 6c7a ldr r2, [r7, #68] @ 0x44
  41829. 8011fa4: e841 2300 strex r3, r2, [r1]
  41830. 8011fa8: 63fb str r3, [r7, #60] @ 0x3c
  41831. return(result);
  41832. 8011faa: 6bfb ldr r3, [r7, #60] @ 0x3c
  41833. 8011fac: 2b00 cmp r3, #0
  41834. 8011fae: d1e6 bne.n 8011f7e <UART_CheckIdleState+0x3e>
  41835. huart->gState = HAL_UART_STATE_READY;
  41836. 8011fb0: 687b ldr r3, [r7, #4]
  41837. 8011fb2: 2220 movs r2, #32
  41838. 8011fb4: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  41839. __HAL_UNLOCK(huart);
  41840. 8011fb8: 687b ldr r3, [r7, #4]
  41841. 8011fba: 2200 movs r2, #0
  41842. 8011fbc: f883 2084 strb.w r2, [r3, #132] @ 0x84
  41843. /* Timeout occurred */
  41844. return HAL_TIMEOUT;
  41845. 8011fc0: 2303 movs r3, #3
  41846. 8011fc2: e063 b.n 801208c <UART_CheckIdleState+0x14c>
  41847. }
  41848. }
  41849. /* Check if the Receiver is enabled */
  41850. if ((huart->Instance->CR1 & USART_CR1_RE) == USART_CR1_RE)
  41851. 8011fc4: 687b ldr r3, [r7, #4]
  41852. 8011fc6: 681b ldr r3, [r3, #0]
  41853. 8011fc8: 681b ldr r3, [r3, #0]
  41854. 8011fca: f003 0304 and.w r3, r3, #4
  41855. 8011fce: 2b04 cmp r3, #4
  41856. 8011fd0: d149 bne.n 8012066 <UART_CheckIdleState+0x126>
  41857. {
  41858. /* Wait until REACK flag is set */
  41859. if (UART_WaitOnFlagUntilTimeout(huart, USART_ISR_REACK, RESET, tickstart, HAL_UART_TIMEOUT_VALUE) != HAL_OK)
  41860. 8011fd2: f06f 437e mvn.w r3, #4261412864 @ 0xfe000000
  41861. 8011fd6: 9300 str r3, [sp, #0]
  41862. 8011fd8: 6d7b ldr r3, [r7, #84] @ 0x54
  41863. 8011fda: 2200 movs r2, #0
  41864. 8011fdc: f44f 0180 mov.w r1, #4194304 @ 0x400000
  41865. 8011fe0: 6878 ldr r0, [r7, #4]
  41866. 8011fe2: f000 f857 bl 8012094 <UART_WaitOnFlagUntilTimeout>
  41867. 8011fe6: 4603 mov r3, r0
  41868. 8011fe8: 2b00 cmp r3, #0
  41869. 8011fea: d03c beq.n 8012066 <UART_CheckIdleState+0x126>
  41870. {
  41871. /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error)
  41872. interrupts for the interrupt process */
  41873. ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE));
  41874. 8011fec: 687b ldr r3, [r7, #4]
  41875. 8011fee: 681b ldr r3, [r3, #0]
  41876. 8011ff0: 627b str r3, [r7, #36] @ 0x24
  41877. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  41878. 8011ff2: 6a7b ldr r3, [r7, #36] @ 0x24
  41879. 8011ff4: e853 3f00 ldrex r3, [r3]
  41880. 8011ff8: 623b str r3, [r7, #32]
  41881. return(result);
  41882. 8011ffa: 6a3b ldr r3, [r7, #32]
  41883. 8011ffc: f423 7390 bic.w r3, r3, #288 @ 0x120
  41884. 8012000: 64fb str r3, [r7, #76] @ 0x4c
  41885. 8012002: 687b ldr r3, [r7, #4]
  41886. 8012004: 681b ldr r3, [r3, #0]
  41887. 8012006: 461a mov r2, r3
  41888. 8012008: 6cfb ldr r3, [r7, #76] @ 0x4c
  41889. 801200a: 633b str r3, [r7, #48] @ 0x30
  41890. 801200c: 62fa str r2, [r7, #44] @ 0x2c
  41891. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  41892. 801200e: 6af9 ldr r1, [r7, #44] @ 0x2c
  41893. 8012010: 6b3a ldr r2, [r7, #48] @ 0x30
  41894. 8012012: e841 2300 strex r3, r2, [r1]
  41895. 8012016: 62bb str r3, [r7, #40] @ 0x28
  41896. return(result);
  41897. 8012018: 6abb ldr r3, [r7, #40] @ 0x28
  41898. 801201a: 2b00 cmp r3, #0
  41899. 801201c: d1e6 bne.n 8011fec <UART_CheckIdleState+0xac>
  41900. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);
  41901. 801201e: 687b ldr r3, [r7, #4]
  41902. 8012020: 681b ldr r3, [r3, #0]
  41903. 8012022: 3308 adds r3, #8
  41904. 8012024: 613b str r3, [r7, #16]
  41905. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  41906. 8012026: 693b ldr r3, [r7, #16]
  41907. 8012028: e853 3f00 ldrex r3, [r3]
  41908. 801202c: 60fb str r3, [r7, #12]
  41909. return(result);
  41910. 801202e: 68fb ldr r3, [r7, #12]
  41911. 8012030: f023 0301 bic.w r3, r3, #1
  41912. 8012034: 64bb str r3, [r7, #72] @ 0x48
  41913. 8012036: 687b ldr r3, [r7, #4]
  41914. 8012038: 681b ldr r3, [r3, #0]
  41915. 801203a: 3308 adds r3, #8
  41916. 801203c: 6cba ldr r2, [r7, #72] @ 0x48
  41917. 801203e: 61fa str r2, [r7, #28]
  41918. 8012040: 61bb str r3, [r7, #24]
  41919. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  41920. 8012042: 69b9 ldr r1, [r7, #24]
  41921. 8012044: 69fa ldr r2, [r7, #28]
  41922. 8012046: e841 2300 strex r3, r2, [r1]
  41923. 801204a: 617b str r3, [r7, #20]
  41924. return(result);
  41925. 801204c: 697b ldr r3, [r7, #20]
  41926. 801204e: 2b00 cmp r3, #0
  41927. 8012050: d1e5 bne.n 801201e <UART_CheckIdleState+0xde>
  41928. huart->RxState = HAL_UART_STATE_READY;
  41929. 8012052: 687b ldr r3, [r7, #4]
  41930. 8012054: 2220 movs r2, #32
  41931. 8012056: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  41932. __HAL_UNLOCK(huart);
  41933. 801205a: 687b ldr r3, [r7, #4]
  41934. 801205c: 2200 movs r2, #0
  41935. 801205e: f883 2084 strb.w r2, [r3, #132] @ 0x84
  41936. /* Timeout occurred */
  41937. return HAL_TIMEOUT;
  41938. 8012062: 2303 movs r3, #3
  41939. 8012064: e012 b.n 801208c <UART_CheckIdleState+0x14c>
  41940. }
  41941. }
  41942. /* Initialize the UART State */
  41943. huart->gState = HAL_UART_STATE_READY;
  41944. 8012066: 687b ldr r3, [r7, #4]
  41945. 8012068: 2220 movs r2, #32
  41946. 801206a: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  41947. huart->RxState = HAL_UART_STATE_READY;
  41948. 801206e: 687b ldr r3, [r7, #4]
  41949. 8012070: 2220 movs r2, #32
  41950. 8012072: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  41951. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  41952. 8012076: 687b ldr r3, [r7, #4]
  41953. 8012078: 2200 movs r2, #0
  41954. 801207a: 66da str r2, [r3, #108] @ 0x6c
  41955. huart->RxEventType = HAL_UART_RXEVENT_TC;
  41956. 801207c: 687b ldr r3, [r7, #4]
  41957. 801207e: 2200 movs r2, #0
  41958. 8012080: 671a str r2, [r3, #112] @ 0x70
  41959. __HAL_UNLOCK(huart);
  41960. 8012082: 687b ldr r3, [r7, #4]
  41961. 8012084: 2200 movs r2, #0
  41962. 8012086: f883 2084 strb.w r2, [r3, #132] @ 0x84
  41963. return HAL_OK;
  41964. 801208a: 2300 movs r3, #0
  41965. }
  41966. 801208c: 4618 mov r0, r3
  41967. 801208e: 3758 adds r7, #88 @ 0x58
  41968. 8012090: 46bd mov sp, r7
  41969. 8012092: bd80 pop {r7, pc}
  41970. 08012094 <UART_WaitOnFlagUntilTimeout>:
  41971. * @param Timeout Timeout duration
  41972. * @retval HAL status
  41973. */
  41974. HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status,
  41975. uint32_t Tickstart, uint32_t Timeout)
  41976. {
  41977. 8012094: b580 push {r7, lr}
  41978. 8012096: b084 sub sp, #16
  41979. 8012098: af00 add r7, sp, #0
  41980. 801209a: 60f8 str r0, [r7, #12]
  41981. 801209c: 60b9 str r1, [r7, #8]
  41982. 801209e: 603b str r3, [r7, #0]
  41983. 80120a0: 4613 mov r3, r2
  41984. 80120a2: 71fb strb r3, [r7, #7]
  41985. /* Wait until flag is set */
  41986. while ((__HAL_UART_GET_FLAG(huart, Flag) ? SET : RESET) == Status)
  41987. 80120a4: e04f b.n 8012146 <UART_WaitOnFlagUntilTimeout+0xb2>
  41988. {
  41989. /* Check for the Timeout */
  41990. if (Timeout != HAL_MAX_DELAY)
  41991. 80120a6: 69bb ldr r3, [r7, #24]
  41992. 80120a8: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  41993. 80120ac: d04b beq.n 8012146 <UART_WaitOnFlagUntilTimeout+0xb2>
  41994. {
  41995. if (((HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U))
  41996. 80120ae: f7f3 f995 bl 80053dc <HAL_GetTick>
  41997. 80120b2: 4602 mov r2, r0
  41998. 80120b4: 683b ldr r3, [r7, #0]
  41999. 80120b6: 1ad3 subs r3, r2, r3
  42000. 80120b8: 69ba ldr r2, [r7, #24]
  42001. 80120ba: 429a cmp r2, r3
  42002. 80120bc: d302 bcc.n 80120c4 <UART_WaitOnFlagUntilTimeout+0x30>
  42003. 80120be: 69bb ldr r3, [r7, #24]
  42004. 80120c0: 2b00 cmp r3, #0
  42005. 80120c2: d101 bne.n 80120c8 <UART_WaitOnFlagUntilTimeout+0x34>
  42006. {
  42007. return HAL_TIMEOUT;
  42008. 80120c4: 2303 movs r3, #3
  42009. 80120c6: e04e b.n 8012166 <UART_WaitOnFlagUntilTimeout+0xd2>
  42010. }
  42011. if ((READ_BIT(huart->Instance->CR1, USART_CR1_RE) != 0U) && (Flag != UART_FLAG_TXE) && (Flag != UART_FLAG_TC))
  42012. 80120c8: 68fb ldr r3, [r7, #12]
  42013. 80120ca: 681b ldr r3, [r3, #0]
  42014. 80120cc: 681b ldr r3, [r3, #0]
  42015. 80120ce: f003 0304 and.w r3, r3, #4
  42016. 80120d2: 2b00 cmp r3, #0
  42017. 80120d4: d037 beq.n 8012146 <UART_WaitOnFlagUntilTimeout+0xb2>
  42018. 80120d6: 68bb ldr r3, [r7, #8]
  42019. 80120d8: 2b80 cmp r3, #128 @ 0x80
  42020. 80120da: d034 beq.n 8012146 <UART_WaitOnFlagUntilTimeout+0xb2>
  42021. 80120dc: 68bb ldr r3, [r7, #8]
  42022. 80120de: 2b40 cmp r3, #64 @ 0x40
  42023. 80120e0: d031 beq.n 8012146 <UART_WaitOnFlagUntilTimeout+0xb2>
  42024. {
  42025. if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) == SET)
  42026. 80120e2: 68fb ldr r3, [r7, #12]
  42027. 80120e4: 681b ldr r3, [r3, #0]
  42028. 80120e6: 69db ldr r3, [r3, #28]
  42029. 80120e8: f003 0308 and.w r3, r3, #8
  42030. 80120ec: 2b08 cmp r3, #8
  42031. 80120ee: d110 bne.n 8012112 <UART_WaitOnFlagUntilTimeout+0x7e>
  42032. {
  42033. /* Clear Overrun Error flag*/
  42034. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF);
  42035. 80120f0: 68fb ldr r3, [r7, #12]
  42036. 80120f2: 681b ldr r3, [r3, #0]
  42037. 80120f4: 2208 movs r2, #8
  42038. 80120f6: 621a str r2, [r3, #32]
  42039. /* Blocking error : transfer is aborted
  42040. Set the UART state ready to be able to start again the process,
  42041. Disable Rx Interrupts if ongoing */
  42042. UART_EndRxTransfer(huart);
  42043. 80120f8: 68f8 ldr r0, [r7, #12]
  42044. 80120fa: f000 f95b bl 80123b4 <UART_EndRxTransfer>
  42045. huart->ErrorCode = HAL_UART_ERROR_ORE;
  42046. 80120fe: 68fb ldr r3, [r7, #12]
  42047. 8012100: 2208 movs r2, #8
  42048. 8012102: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  42049. /* Process Unlocked */
  42050. __HAL_UNLOCK(huart);
  42051. 8012106: 68fb ldr r3, [r7, #12]
  42052. 8012108: 2200 movs r2, #0
  42053. 801210a: f883 2084 strb.w r2, [r3, #132] @ 0x84
  42054. return HAL_ERROR;
  42055. 801210e: 2301 movs r3, #1
  42056. 8012110: e029 b.n 8012166 <UART_WaitOnFlagUntilTimeout+0xd2>
  42057. }
  42058. if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RTOF) == SET)
  42059. 8012112: 68fb ldr r3, [r7, #12]
  42060. 8012114: 681b ldr r3, [r3, #0]
  42061. 8012116: 69db ldr r3, [r3, #28]
  42062. 8012118: f403 6300 and.w r3, r3, #2048 @ 0x800
  42063. 801211c: f5b3 6f00 cmp.w r3, #2048 @ 0x800
  42064. 8012120: d111 bne.n 8012146 <UART_WaitOnFlagUntilTimeout+0xb2>
  42065. {
  42066. /* Clear Receiver Timeout flag*/
  42067. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_RTOF);
  42068. 8012122: 68fb ldr r3, [r7, #12]
  42069. 8012124: 681b ldr r3, [r3, #0]
  42070. 8012126: f44f 6200 mov.w r2, #2048 @ 0x800
  42071. 801212a: 621a str r2, [r3, #32]
  42072. /* Blocking error : transfer is aborted
  42073. Set the UART state ready to be able to start again the process,
  42074. Disable Rx Interrupts if ongoing */
  42075. UART_EndRxTransfer(huart);
  42076. 801212c: 68f8 ldr r0, [r7, #12]
  42077. 801212e: f000 f941 bl 80123b4 <UART_EndRxTransfer>
  42078. huart->ErrorCode = HAL_UART_ERROR_RTO;
  42079. 8012132: 68fb ldr r3, [r7, #12]
  42080. 8012134: 2220 movs r2, #32
  42081. 8012136: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  42082. /* Process Unlocked */
  42083. __HAL_UNLOCK(huart);
  42084. 801213a: 68fb ldr r3, [r7, #12]
  42085. 801213c: 2200 movs r2, #0
  42086. 801213e: f883 2084 strb.w r2, [r3, #132] @ 0x84
  42087. return HAL_TIMEOUT;
  42088. 8012142: 2303 movs r3, #3
  42089. 8012144: e00f b.n 8012166 <UART_WaitOnFlagUntilTimeout+0xd2>
  42090. while ((__HAL_UART_GET_FLAG(huart, Flag) ? SET : RESET) == Status)
  42091. 8012146: 68fb ldr r3, [r7, #12]
  42092. 8012148: 681b ldr r3, [r3, #0]
  42093. 801214a: 69da ldr r2, [r3, #28]
  42094. 801214c: 68bb ldr r3, [r7, #8]
  42095. 801214e: 4013 ands r3, r2
  42096. 8012150: 68ba ldr r2, [r7, #8]
  42097. 8012152: 429a cmp r2, r3
  42098. 8012154: bf0c ite eq
  42099. 8012156: 2301 moveq r3, #1
  42100. 8012158: 2300 movne r3, #0
  42101. 801215a: b2db uxtb r3, r3
  42102. 801215c: 461a mov r2, r3
  42103. 801215e: 79fb ldrb r3, [r7, #7]
  42104. 8012160: 429a cmp r2, r3
  42105. 8012162: d0a0 beq.n 80120a6 <UART_WaitOnFlagUntilTimeout+0x12>
  42106. }
  42107. }
  42108. }
  42109. }
  42110. return HAL_OK;
  42111. 8012164: 2300 movs r3, #0
  42112. }
  42113. 8012166: 4618 mov r0, r3
  42114. 8012168: 3710 adds r7, #16
  42115. 801216a: 46bd mov sp, r7
  42116. 801216c: bd80 pop {r7, pc}
  42117. ...
  42118. 08012170 <UART_Start_Receive_IT>:
  42119. * @param pData Pointer to data buffer (u8 or u16 data elements).
  42120. * @param Size Amount of data elements (u8 or u16) to be received.
  42121. * @retval HAL status
  42122. */
  42123. HAL_StatusTypeDef UART_Start_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
  42124. {
  42125. 8012170: b480 push {r7}
  42126. 8012172: b0a3 sub sp, #140 @ 0x8c
  42127. 8012174: af00 add r7, sp, #0
  42128. 8012176: 60f8 str r0, [r7, #12]
  42129. 8012178: 60b9 str r1, [r7, #8]
  42130. 801217a: 4613 mov r3, r2
  42131. 801217c: 80fb strh r3, [r7, #6]
  42132. huart->pRxBuffPtr = pData;
  42133. 801217e: 68fb ldr r3, [r7, #12]
  42134. 8012180: 68ba ldr r2, [r7, #8]
  42135. 8012182: 659a str r2, [r3, #88] @ 0x58
  42136. huart->RxXferSize = Size;
  42137. 8012184: 68fb ldr r3, [r7, #12]
  42138. 8012186: 88fa ldrh r2, [r7, #6]
  42139. 8012188: f8a3 205c strh.w r2, [r3, #92] @ 0x5c
  42140. huart->RxXferCount = Size;
  42141. 801218c: 68fb ldr r3, [r7, #12]
  42142. 801218e: 88fa ldrh r2, [r7, #6]
  42143. 8012190: f8a3 205e strh.w r2, [r3, #94] @ 0x5e
  42144. huart->RxISR = NULL;
  42145. 8012194: 68fb ldr r3, [r7, #12]
  42146. 8012196: 2200 movs r2, #0
  42147. 8012198: 675a str r2, [r3, #116] @ 0x74
  42148. /* Computation of UART mask to apply to RDR register */
  42149. UART_MASK_COMPUTATION(huart);
  42150. 801219a: 68fb ldr r3, [r7, #12]
  42151. 801219c: 689b ldr r3, [r3, #8]
  42152. 801219e: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  42153. 80121a2: d10e bne.n 80121c2 <UART_Start_Receive_IT+0x52>
  42154. 80121a4: 68fb ldr r3, [r7, #12]
  42155. 80121a6: 691b ldr r3, [r3, #16]
  42156. 80121a8: 2b00 cmp r3, #0
  42157. 80121aa: d105 bne.n 80121b8 <UART_Start_Receive_IT+0x48>
  42158. 80121ac: 68fb ldr r3, [r7, #12]
  42159. 80121ae: f240 12ff movw r2, #511 @ 0x1ff
  42160. 80121b2: f8a3 2060 strh.w r2, [r3, #96] @ 0x60
  42161. 80121b6: e02d b.n 8012214 <UART_Start_Receive_IT+0xa4>
  42162. 80121b8: 68fb ldr r3, [r7, #12]
  42163. 80121ba: 22ff movs r2, #255 @ 0xff
  42164. 80121bc: f8a3 2060 strh.w r2, [r3, #96] @ 0x60
  42165. 80121c0: e028 b.n 8012214 <UART_Start_Receive_IT+0xa4>
  42166. 80121c2: 68fb ldr r3, [r7, #12]
  42167. 80121c4: 689b ldr r3, [r3, #8]
  42168. 80121c6: 2b00 cmp r3, #0
  42169. 80121c8: d10d bne.n 80121e6 <UART_Start_Receive_IT+0x76>
  42170. 80121ca: 68fb ldr r3, [r7, #12]
  42171. 80121cc: 691b ldr r3, [r3, #16]
  42172. 80121ce: 2b00 cmp r3, #0
  42173. 80121d0: d104 bne.n 80121dc <UART_Start_Receive_IT+0x6c>
  42174. 80121d2: 68fb ldr r3, [r7, #12]
  42175. 80121d4: 22ff movs r2, #255 @ 0xff
  42176. 80121d6: f8a3 2060 strh.w r2, [r3, #96] @ 0x60
  42177. 80121da: e01b b.n 8012214 <UART_Start_Receive_IT+0xa4>
  42178. 80121dc: 68fb ldr r3, [r7, #12]
  42179. 80121de: 227f movs r2, #127 @ 0x7f
  42180. 80121e0: f8a3 2060 strh.w r2, [r3, #96] @ 0x60
  42181. 80121e4: e016 b.n 8012214 <UART_Start_Receive_IT+0xa4>
  42182. 80121e6: 68fb ldr r3, [r7, #12]
  42183. 80121e8: 689b ldr r3, [r3, #8]
  42184. 80121ea: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  42185. 80121ee: d10d bne.n 801220c <UART_Start_Receive_IT+0x9c>
  42186. 80121f0: 68fb ldr r3, [r7, #12]
  42187. 80121f2: 691b ldr r3, [r3, #16]
  42188. 80121f4: 2b00 cmp r3, #0
  42189. 80121f6: d104 bne.n 8012202 <UART_Start_Receive_IT+0x92>
  42190. 80121f8: 68fb ldr r3, [r7, #12]
  42191. 80121fa: 227f movs r2, #127 @ 0x7f
  42192. 80121fc: f8a3 2060 strh.w r2, [r3, #96] @ 0x60
  42193. 8012200: e008 b.n 8012214 <UART_Start_Receive_IT+0xa4>
  42194. 8012202: 68fb ldr r3, [r7, #12]
  42195. 8012204: 223f movs r2, #63 @ 0x3f
  42196. 8012206: f8a3 2060 strh.w r2, [r3, #96] @ 0x60
  42197. 801220a: e003 b.n 8012214 <UART_Start_Receive_IT+0xa4>
  42198. 801220c: 68fb ldr r3, [r7, #12]
  42199. 801220e: 2200 movs r2, #0
  42200. 8012210: f8a3 2060 strh.w r2, [r3, #96] @ 0x60
  42201. huart->ErrorCode = HAL_UART_ERROR_NONE;
  42202. 8012214: 68fb ldr r3, [r7, #12]
  42203. 8012216: 2200 movs r2, #0
  42204. 8012218: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  42205. huart->RxState = HAL_UART_STATE_BUSY_RX;
  42206. 801221c: 68fb ldr r3, [r7, #12]
  42207. 801221e: 2222 movs r2, #34 @ 0x22
  42208. 8012220: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  42209. /* Enable the UART Error Interrupt: (Frame error, noise error, overrun error) */
  42210. ATOMIC_SET_BIT(huart->Instance->CR3, USART_CR3_EIE);
  42211. 8012224: 68fb ldr r3, [r7, #12]
  42212. 8012226: 681b ldr r3, [r3, #0]
  42213. 8012228: 3308 adds r3, #8
  42214. 801222a: 667b str r3, [r7, #100] @ 0x64
  42215. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  42216. 801222c: 6e7b ldr r3, [r7, #100] @ 0x64
  42217. 801222e: e853 3f00 ldrex r3, [r3]
  42218. 8012232: 663b str r3, [r7, #96] @ 0x60
  42219. return(result);
  42220. 8012234: 6e3b ldr r3, [r7, #96] @ 0x60
  42221. 8012236: f043 0301 orr.w r3, r3, #1
  42222. 801223a: f8c7 3084 str.w r3, [r7, #132] @ 0x84
  42223. 801223e: 68fb ldr r3, [r7, #12]
  42224. 8012240: 681b ldr r3, [r3, #0]
  42225. 8012242: 3308 adds r3, #8
  42226. 8012244: f8d7 2084 ldr.w r2, [r7, #132] @ 0x84
  42227. 8012248: 673a str r2, [r7, #112] @ 0x70
  42228. 801224a: 66fb str r3, [r7, #108] @ 0x6c
  42229. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  42230. 801224c: 6ef9 ldr r1, [r7, #108] @ 0x6c
  42231. 801224e: 6f3a ldr r2, [r7, #112] @ 0x70
  42232. 8012250: e841 2300 strex r3, r2, [r1]
  42233. 8012254: 66bb str r3, [r7, #104] @ 0x68
  42234. return(result);
  42235. 8012256: 6ebb ldr r3, [r7, #104] @ 0x68
  42236. 8012258: 2b00 cmp r3, #0
  42237. 801225a: d1e3 bne.n 8012224 <UART_Start_Receive_IT+0xb4>
  42238. /* Configure Rx interrupt processing */
  42239. if ((huart->FifoMode == UART_FIFOMODE_ENABLE) && (Size >= huart->NbRxDataToProcess))
  42240. 801225c: 68fb ldr r3, [r7, #12]
  42241. 801225e: 6e5b ldr r3, [r3, #100] @ 0x64
  42242. 8012260: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  42243. 8012264: d14f bne.n 8012306 <UART_Start_Receive_IT+0x196>
  42244. 8012266: 68fb ldr r3, [r7, #12]
  42245. 8012268: f8b3 3068 ldrh.w r3, [r3, #104] @ 0x68
  42246. 801226c: 88fa ldrh r2, [r7, #6]
  42247. 801226e: 429a cmp r2, r3
  42248. 8012270: d349 bcc.n 8012306 <UART_Start_Receive_IT+0x196>
  42249. {
  42250. /* Set the Rx ISR function pointer according to the data word length */
  42251. if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE))
  42252. 8012272: 68fb ldr r3, [r7, #12]
  42253. 8012274: 689b ldr r3, [r3, #8]
  42254. 8012276: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  42255. 801227a: d107 bne.n 801228c <UART_Start_Receive_IT+0x11c>
  42256. 801227c: 68fb ldr r3, [r7, #12]
  42257. 801227e: 691b ldr r3, [r3, #16]
  42258. 8012280: 2b00 cmp r3, #0
  42259. 8012282: d103 bne.n 801228c <UART_Start_Receive_IT+0x11c>
  42260. {
  42261. huart->RxISR = UART_RxISR_16BIT_FIFOEN;
  42262. 8012284: 68fb ldr r3, [r7, #12]
  42263. 8012286: 4a47 ldr r2, [pc, #284] @ (80123a4 <UART_Start_Receive_IT+0x234>)
  42264. 8012288: 675a str r2, [r3, #116] @ 0x74
  42265. 801228a: e002 b.n 8012292 <UART_Start_Receive_IT+0x122>
  42266. }
  42267. else
  42268. {
  42269. huart->RxISR = UART_RxISR_8BIT_FIFOEN;
  42270. 801228c: 68fb ldr r3, [r7, #12]
  42271. 801228e: 4a46 ldr r2, [pc, #280] @ (80123a8 <UART_Start_Receive_IT+0x238>)
  42272. 8012290: 675a str r2, [r3, #116] @ 0x74
  42273. }
  42274. /* Enable the UART Parity Error interrupt and RX FIFO Threshold interrupt */
  42275. if (huart->Init.Parity != UART_PARITY_NONE)
  42276. 8012292: 68fb ldr r3, [r7, #12]
  42277. 8012294: 691b ldr r3, [r3, #16]
  42278. 8012296: 2b00 cmp r3, #0
  42279. 8012298: d01a beq.n 80122d0 <UART_Start_Receive_IT+0x160>
  42280. {
  42281. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_PEIE);
  42282. 801229a: 68fb ldr r3, [r7, #12]
  42283. 801229c: 681b ldr r3, [r3, #0]
  42284. 801229e: 653b str r3, [r7, #80] @ 0x50
  42285. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  42286. 80122a0: 6d3b ldr r3, [r7, #80] @ 0x50
  42287. 80122a2: e853 3f00 ldrex r3, [r3]
  42288. 80122a6: 64fb str r3, [r7, #76] @ 0x4c
  42289. return(result);
  42290. 80122a8: 6cfb ldr r3, [r7, #76] @ 0x4c
  42291. 80122aa: f443 7380 orr.w r3, r3, #256 @ 0x100
  42292. 80122ae: f8c7 3080 str.w r3, [r7, #128] @ 0x80
  42293. 80122b2: 68fb ldr r3, [r7, #12]
  42294. 80122b4: 681b ldr r3, [r3, #0]
  42295. 80122b6: 461a mov r2, r3
  42296. 80122b8: f8d7 3080 ldr.w r3, [r7, #128] @ 0x80
  42297. 80122bc: 65fb str r3, [r7, #92] @ 0x5c
  42298. 80122be: 65ba str r2, [r7, #88] @ 0x58
  42299. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  42300. 80122c0: 6db9 ldr r1, [r7, #88] @ 0x58
  42301. 80122c2: 6dfa ldr r2, [r7, #92] @ 0x5c
  42302. 80122c4: e841 2300 strex r3, r2, [r1]
  42303. 80122c8: 657b str r3, [r7, #84] @ 0x54
  42304. return(result);
  42305. 80122ca: 6d7b ldr r3, [r7, #84] @ 0x54
  42306. 80122cc: 2b00 cmp r3, #0
  42307. 80122ce: d1e4 bne.n 801229a <UART_Start_Receive_IT+0x12a>
  42308. }
  42309. ATOMIC_SET_BIT(huart->Instance->CR3, USART_CR3_RXFTIE);
  42310. 80122d0: 68fb ldr r3, [r7, #12]
  42311. 80122d2: 681b ldr r3, [r3, #0]
  42312. 80122d4: 3308 adds r3, #8
  42313. 80122d6: 63fb str r3, [r7, #60] @ 0x3c
  42314. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  42315. 80122d8: 6bfb ldr r3, [r7, #60] @ 0x3c
  42316. 80122da: e853 3f00 ldrex r3, [r3]
  42317. 80122de: 63bb str r3, [r7, #56] @ 0x38
  42318. return(result);
  42319. 80122e0: 6bbb ldr r3, [r7, #56] @ 0x38
  42320. 80122e2: f043 5380 orr.w r3, r3, #268435456 @ 0x10000000
  42321. 80122e6: 67fb str r3, [r7, #124] @ 0x7c
  42322. 80122e8: 68fb ldr r3, [r7, #12]
  42323. 80122ea: 681b ldr r3, [r3, #0]
  42324. 80122ec: 3308 adds r3, #8
  42325. 80122ee: 6ffa ldr r2, [r7, #124] @ 0x7c
  42326. 80122f0: 64ba str r2, [r7, #72] @ 0x48
  42327. 80122f2: 647b str r3, [r7, #68] @ 0x44
  42328. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  42329. 80122f4: 6c79 ldr r1, [r7, #68] @ 0x44
  42330. 80122f6: 6cba ldr r2, [r7, #72] @ 0x48
  42331. 80122f8: e841 2300 strex r3, r2, [r1]
  42332. 80122fc: 643b str r3, [r7, #64] @ 0x40
  42333. return(result);
  42334. 80122fe: 6c3b ldr r3, [r7, #64] @ 0x40
  42335. 8012300: 2b00 cmp r3, #0
  42336. 8012302: d1e5 bne.n 80122d0 <UART_Start_Receive_IT+0x160>
  42337. 8012304: e046 b.n 8012394 <UART_Start_Receive_IT+0x224>
  42338. }
  42339. else
  42340. {
  42341. /* Set the Rx ISR function pointer according to the data word length */
  42342. if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE))
  42343. 8012306: 68fb ldr r3, [r7, #12]
  42344. 8012308: 689b ldr r3, [r3, #8]
  42345. 801230a: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  42346. 801230e: d107 bne.n 8012320 <UART_Start_Receive_IT+0x1b0>
  42347. 8012310: 68fb ldr r3, [r7, #12]
  42348. 8012312: 691b ldr r3, [r3, #16]
  42349. 8012314: 2b00 cmp r3, #0
  42350. 8012316: d103 bne.n 8012320 <UART_Start_Receive_IT+0x1b0>
  42351. {
  42352. huart->RxISR = UART_RxISR_16BIT;
  42353. 8012318: 68fb ldr r3, [r7, #12]
  42354. 801231a: 4a24 ldr r2, [pc, #144] @ (80123ac <UART_Start_Receive_IT+0x23c>)
  42355. 801231c: 675a str r2, [r3, #116] @ 0x74
  42356. 801231e: e002 b.n 8012326 <UART_Start_Receive_IT+0x1b6>
  42357. }
  42358. else
  42359. {
  42360. huart->RxISR = UART_RxISR_8BIT;
  42361. 8012320: 68fb ldr r3, [r7, #12]
  42362. 8012322: 4a23 ldr r2, [pc, #140] @ (80123b0 <UART_Start_Receive_IT+0x240>)
  42363. 8012324: 675a str r2, [r3, #116] @ 0x74
  42364. }
  42365. /* Enable the UART Parity Error interrupt and Data Register Not Empty interrupt */
  42366. if (huart->Init.Parity != UART_PARITY_NONE)
  42367. 8012326: 68fb ldr r3, [r7, #12]
  42368. 8012328: 691b ldr r3, [r3, #16]
  42369. 801232a: 2b00 cmp r3, #0
  42370. 801232c: d019 beq.n 8012362 <UART_Start_Receive_IT+0x1f2>
  42371. {
  42372. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_PEIE | USART_CR1_RXNEIE_RXFNEIE);
  42373. 801232e: 68fb ldr r3, [r7, #12]
  42374. 8012330: 681b ldr r3, [r3, #0]
  42375. 8012332: 62bb str r3, [r7, #40] @ 0x28
  42376. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  42377. 8012334: 6abb ldr r3, [r7, #40] @ 0x28
  42378. 8012336: e853 3f00 ldrex r3, [r3]
  42379. 801233a: 627b str r3, [r7, #36] @ 0x24
  42380. return(result);
  42381. 801233c: 6a7b ldr r3, [r7, #36] @ 0x24
  42382. 801233e: f443 7390 orr.w r3, r3, #288 @ 0x120
  42383. 8012342: 677b str r3, [r7, #116] @ 0x74
  42384. 8012344: 68fb ldr r3, [r7, #12]
  42385. 8012346: 681b ldr r3, [r3, #0]
  42386. 8012348: 461a mov r2, r3
  42387. 801234a: 6f7b ldr r3, [r7, #116] @ 0x74
  42388. 801234c: 637b str r3, [r7, #52] @ 0x34
  42389. 801234e: 633a str r2, [r7, #48] @ 0x30
  42390. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  42391. 8012350: 6b39 ldr r1, [r7, #48] @ 0x30
  42392. 8012352: 6b7a ldr r2, [r7, #52] @ 0x34
  42393. 8012354: e841 2300 strex r3, r2, [r1]
  42394. 8012358: 62fb str r3, [r7, #44] @ 0x2c
  42395. return(result);
  42396. 801235a: 6afb ldr r3, [r7, #44] @ 0x2c
  42397. 801235c: 2b00 cmp r3, #0
  42398. 801235e: d1e6 bne.n 801232e <UART_Start_Receive_IT+0x1be>
  42399. 8012360: e018 b.n 8012394 <UART_Start_Receive_IT+0x224>
  42400. }
  42401. else
  42402. {
  42403. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_RXNEIE_RXFNEIE);
  42404. 8012362: 68fb ldr r3, [r7, #12]
  42405. 8012364: 681b ldr r3, [r3, #0]
  42406. 8012366: 617b str r3, [r7, #20]
  42407. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  42408. 8012368: 697b ldr r3, [r7, #20]
  42409. 801236a: e853 3f00 ldrex r3, [r3]
  42410. 801236e: 613b str r3, [r7, #16]
  42411. return(result);
  42412. 8012370: 693b ldr r3, [r7, #16]
  42413. 8012372: f043 0320 orr.w r3, r3, #32
  42414. 8012376: 67bb str r3, [r7, #120] @ 0x78
  42415. 8012378: 68fb ldr r3, [r7, #12]
  42416. 801237a: 681b ldr r3, [r3, #0]
  42417. 801237c: 461a mov r2, r3
  42418. 801237e: 6fbb ldr r3, [r7, #120] @ 0x78
  42419. 8012380: 623b str r3, [r7, #32]
  42420. 8012382: 61fa str r2, [r7, #28]
  42421. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  42422. 8012384: 69f9 ldr r1, [r7, #28]
  42423. 8012386: 6a3a ldr r2, [r7, #32]
  42424. 8012388: e841 2300 strex r3, r2, [r1]
  42425. 801238c: 61bb str r3, [r7, #24]
  42426. return(result);
  42427. 801238e: 69bb ldr r3, [r7, #24]
  42428. 8012390: 2b00 cmp r3, #0
  42429. 8012392: d1e6 bne.n 8012362 <UART_Start_Receive_IT+0x1f2>
  42430. }
  42431. }
  42432. return HAL_OK;
  42433. 8012394: 2300 movs r3, #0
  42434. }
  42435. 8012396: 4618 mov r0, r3
  42436. 8012398: 378c adds r7, #140 @ 0x8c
  42437. 801239a: 46bd mov sp, r7
  42438. 801239c: f85d 7b04 ldr.w r7, [sp], #4
  42439. 80123a0: 4770 bx lr
  42440. 80123a2: bf00 nop
  42441. 80123a4: 08012f19 .word 0x08012f19
  42442. 80123a8: 08012bb9 .word 0x08012bb9
  42443. 80123ac: 08012a01 .word 0x08012a01
  42444. 80123b0: 08012849 .word 0x08012849
  42445. 080123b4 <UART_EndRxTransfer>:
  42446. * @brief End ongoing Rx transfer on UART peripheral (following error detection or Reception completion).
  42447. * @param huart UART handle.
  42448. * @retval None
  42449. */
  42450. static void UART_EndRxTransfer(UART_HandleTypeDef *huart)
  42451. {
  42452. 80123b4: b480 push {r7}
  42453. 80123b6: b095 sub sp, #84 @ 0x54
  42454. 80123b8: af00 add r7, sp, #0
  42455. 80123ba: 6078 str r0, [r7, #4]
  42456. /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */
  42457. ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE));
  42458. 80123bc: 687b ldr r3, [r7, #4]
  42459. 80123be: 681b ldr r3, [r3, #0]
  42460. 80123c0: 637b str r3, [r7, #52] @ 0x34
  42461. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  42462. 80123c2: 6b7b ldr r3, [r7, #52] @ 0x34
  42463. 80123c4: e853 3f00 ldrex r3, [r3]
  42464. 80123c8: 633b str r3, [r7, #48] @ 0x30
  42465. return(result);
  42466. 80123ca: 6b3b ldr r3, [r7, #48] @ 0x30
  42467. 80123cc: f423 7390 bic.w r3, r3, #288 @ 0x120
  42468. 80123d0: 64fb str r3, [r7, #76] @ 0x4c
  42469. 80123d2: 687b ldr r3, [r7, #4]
  42470. 80123d4: 681b ldr r3, [r3, #0]
  42471. 80123d6: 461a mov r2, r3
  42472. 80123d8: 6cfb ldr r3, [r7, #76] @ 0x4c
  42473. 80123da: 643b str r3, [r7, #64] @ 0x40
  42474. 80123dc: 63fa str r2, [r7, #60] @ 0x3c
  42475. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  42476. 80123de: 6bf9 ldr r1, [r7, #60] @ 0x3c
  42477. 80123e0: 6c3a ldr r2, [r7, #64] @ 0x40
  42478. 80123e2: e841 2300 strex r3, r2, [r1]
  42479. 80123e6: 63bb str r3, [r7, #56] @ 0x38
  42480. return(result);
  42481. 80123e8: 6bbb ldr r3, [r7, #56] @ 0x38
  42482. 80123ea: 2b00 cmp r3, #0
  42483. 80123ec: d1e6 bne.n 80123bc <UART_EndRxTransfer+0x8>
  42484. ATOMIC_CLEAR_BIT(huart->Instance->CR3, (USART_CR3_EIE | USART_CR3_RXFTIE));
  42485. 80123ee: 687b ldr r3, [r7, #4]
  42486. 80123f0: 681b ldr r3, [r3, #0]
  42487. 80123f2: 3308 adds r3, #8
  42488. 80123f4: 623b str r3, [r7, #32]
  42489. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  42490. 80123f6: 6a3b ldr r3, [r7, #32]
  42491. 80123f8: e853 3f00 ldrex r3, [r3]
  42492. 80123fc: 61fb str r3, [r7, #28]
  42493. return(result);
  42494. 80123fe: 69fa ldr r2, [r7, #28]
  42495. 8012400: 4b1e ldr r3, [pc, #120] @ (801247c <UART_EndRxTransfer+0xc8>)
  42496. 8012402: 4013 ands r3, r2
  42497. 8012404: 64bb str r3, [r7, #72] @ 0x48
  42498. 8012406: 687b ldr r3, [r7, #4]
  42499. 8012408: 681b ldr r3, [r3, #0]
  42500. 801240a: 3308 adds r3, #8
  42501. 801240c: 6cba ldr r2, [r7, #72] @ 0x48
  42502. 801240e: 62fa str r2, [r7, #44] @ 0x2c
  42503. 8012410: 62bb str r3, [r7, #40] @ 0x28
  42504. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  42505. 8012412: 6ab9 ldr r1, [r7, #40] @ 0x28
  42506. 8012414: 6afa ldr r2, [r7, #44] @ 0x2c
  42507. 8012416: e841 2300 strex r3, r2, [r1]
  42508. 801241a: 627b str r3, [r7, #36] @ 0x24
  42509. return(result);
  42510. 801241c: 6a7b ldr r3, [r7, #36] @ 0x24
  42511. 801241e: 2b00 cmp r3, #0
  42512. 8012420: d1e5 bne.n 80123ee <UART_EndRxTransfer+0x3a>
  42513. /* In case of reception waiting for IDLE event, disable also the IDLE IE interrupt source */
  42514. if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
  42515. 8012422: 687b ldr r3, [r7, #4]
  42516. 8012424: 6edb ldr r3, [r3, #108] @ 0x6c
  42517. 8012426: 2b01 cmp r3, #1
  42518. 8012428: d118 bne.n 801245c <UART_EndRxTransfer+0xa8>
  42519. {
  42520. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  42521. 801242a: 687b ldr r3, [r7, #4]
  42522. 801242c: 681b ldr r3, [r3, #0]
  42523. 801242e: 60fb str r3, [r7, #12]
  42524. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  42525. 8012430: 68fb ldr r3, [r7, #12]
  42526. 8012432: e853 3f00 ldrex r3, [r3]
  42527. 8012436: 60bb str r3, [r7, #8]
  42528. return(result);
  42529. 8012438: 68bb ldr r3, [r7, #8]
  42530. 801243a: f023 0310 bic.w r3, r3, #16
  42531. 801243e: 647b str r3, [r7, #68] @ 0x44
  42532. 8012440: 687b ldr r3, [r7, #4]
  42533. 8012442: 681b ldr r3, [r3, #0]
  42534. 8012444: 461a mov r2, r3
  42535. 8012446: 6c7b ldr r3, [r7, #68] @ 0x44
  42536. 8012448: 61bb str r3, [r7, #24]
  42537. 801244a: 617a str r2, [r7, #20]
  42538. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  42539. 801244c: 6979 ldr r1, [r7, #20]
  42540. 801244e: 69ba ldr r2, [r7, #24]
  42541. 8012450: e841 2300 strex r3, r2, [r1]
  42542. 8012454: 613b str r3, [r7, #16]
  42543. return(result);
  42544. 8012456: 693b ldr r3, [r7, #16]
  42545. 8012458: 2b00 cmp r3, #0
  42546. 801245a: d1e6 bne.n 801242a <UART_EndRxTransfer+0x76>
  42547. }
  42548. /* At end of Rx process, restore huart->RxState to Ready */
  42549. huart->RxState = HAL_UART_STATE_READY;
  42550. 801245c: 687b ldr r3, [r7, #4]
  42551. 801245e: 2220 movs r2, #32
  42552. 8012460: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  42553. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  42554. 8012464: 687b ldr r3, [r7, #4]
  42555. 8012466: 2200 movs r2, #0
  42556. 8012468: 66da str r2, [r3, #108] @ 0x6c
  42557. /* Reset RxIsr function pointer */
  42558. huart->RxISR = NULL;
  42559. 801246a: 687b ldr r3, [r7, #4]
  42560. 801246c: 2200 movs r2, #0
  42561. 801246e: 675a str r2, [r3, #116] @ 0x74
  42562. }
  42563. 8012470: bf00 nop
  42564. 8012472: 3754 adds r7, #84 @ 0x54
  42565. 8012474: 46bd mov sp, r7
  42566. 8012476: f85d 7b04 ldr.w r7, [sp], #4
  42567. 801247a: 4770 bx lr
  42568. 801247c: effffffe .word 0xeffffffe
  42569. 08012480 <UART_DMAAbortOnError>:
  42570. * (To be called at end of DMA Abort procedure following error occurrence).
  42571. * @param hdma DMA handle.
  42572. * @retval None
  42573. */
  42574. static void UART_DMAAbortOnError(DMA_HandleTypeDef *hdma)
  42575. {
  42576. 8012480: b580 push {r7, lr}
  42577. 8012482: b084 sub sp, #16
  42578. 8012484: af00 add r7, sp, #0
  42579. 8012486: 6078 str r0, [r7, #4]
  42580. UART_HandleTypeDef *huart = (UART_HandleTypeDef *)(hdma->Parent);
  42581. 8012488: 687b ldr r3, [r7, #4]
  42582. 801248a: 6b9b ldr r3, [r3, #56] @ 0x38
  42583. 801248c: 60fb str r3, [r7, #12]
  42584. huart->RxXferCount = 0U;
  42585. 801248e: 68fb ldr r3, [r7, #12]
  42586. 8012490: 2200 movs r2, #0
  42587. 8012492: f8a3 205e strh.w r2, [r3, #94] @ 0x5e
  42588. huart->TxXferCount = 0U;
  42589. 8012496: 68fb ldr r3, [r7, #12]
  42590. 8012498: 2200 movs r2, #0
  42591. 801249a: f8a3 2056 strh.w r2, [r3, #86] @ 0x56
  42592. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  42593. /*Call registered error callback*/
  42594. huart->ErrorCallback(huart);
  42595. #else
  42596. /*Call legacy weak error callback*/
  42597. HAL_UART_ErrorCallback(huart);
  42598. 801249e: 68f8 ldr r0, [r7, #12]
  42599. 80124a0: f7fe ff3a bl 8011318 <HAL_UART_ErrorCallback>
  42600. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  42601. }
  42602. 80124a4: bf00 nop
  42603. 80124a6: 3710 adds r7, #16
  42604. 80124a8: 46bd mov sp, r7
  42605. 80124aa: bd80 pop {r7, pc}
  42606. 080124ac <UART_TxISR_8BIT>:
  42607. * interruptions have been enabled by HAL_UART_Transmit_IT().
  42608. * @param huart UART handle.
  42609. * @retval None
  42610. */
  42611. static void UART_TxISR_8BIT(UART_HandleTypeDef *huart)
  42612. {
  42613. 80124ac: b480 push {r7}
  42614. 80124ae: b08f sub sp, #60 @ 0x3c
  42615. 80124b0: af00 add r7, sp, #0
  42616. 80124b2: 6078 str r0, [r7, #4]
  42617. /* Check that a Tx process is ongoing */
  42618. if (huart->gState == HAL_UART_STATE_BUSY_TX)
  42619. 80124b4: 687b ldr r3, [r7, #4]
  42620. 80124b6: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  42621. 80124ba: 2b21 cmp r3, #33 @ 0x21
  42622. 80124bc: d14c bne.n 8012558 <UART_TxISR_8BIT+0xac>
  42623. {
  42624. if (huart->TxXferCount == 0U)
  42625. 80124be: 687b ldr r3, [r7, #4]
  42626. 80124c0: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  42627. 80124c4: b29b uxth r3, r3
  42628. 80124c6: 2b00 cmp r3, #0
  42629. 80124c8: d132 bne.n 8012530 <UART_TxISR_8BIT+0x84>
  42630. {
  42631. /* Disable the UART Transmit Data Register Empty Interrupt */
  42632. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_TXEIE_TXFNFIE);
  42633. 80124ca: 687b ldr r3, [r7, #4]
  42634. 80124cc: 681b ldr r3, [r3, #0]
  42635. 80124ce: 623b str r3, [r7, #32]
  42636. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  42637. 80124d0: 6a3b ldr r3, [r7, #32]
  42638. 80124d2: e853 3f00 ldrex r3, [r3]
  42639. 80124d6: 61fb str r3, [r7, #28]
  42640. return(result);
  42641. 80124d8: 69fb ldr r3, [r7, #28]
  42642. 80124da: f023 0380 bic.w r3, r3, #128 @ 0x80
  42643. 80124de: 637b str r3, [r7, #52] @ 0x34
  42644. 80124e0: 687b ldr r3, [r7, #4]
  42645. 80124e2: 681b ldr r3, [r3, #0]
  42646. 80124e4: 461a mov r2, r3
  42647. 80124e6: 6b7b ldr r3, [r7, #52] @ 0x34
  42648. 80124e8: 62fb str r3, [r7, #44] @ 0x2c
  42649. 80124ea: 62ba str r2, [r7, #40] @ 0x28
  42650. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  42651. 80124ec: 6ab9 ldr r1, [r7, #40] @ 0x28
  42652. 80124ee: 6afa ldr r2, [r7, #44] @ 0x2c
  42653. 80124f0: e841 2300 strex r3, r2, [r1]
  42654. 80124f4: 627b str r3, [r7, #36] @ 0x24
  42655. return(result);
  42656. 80124f6: 6a7b ldr r3, [r7, #36] @ 0x24
  42657. 80124f8: 2b00 cmp r3, #0
  42658. 80124fa: d1e6 bne.n 80124ca <UART_TxISR_8BIT+0x1e>
  42659. /* Enable the UART Transmit Complete Interrupt */
  42660. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_TCIE);
  42661. 80124fc: 687b ldr r3, [r7, #4]
  42662. 80124fe: 681b ldr r3, [r3, #0]
  42663. 8012500: 60fb str r3, [r7, #12]
  42664. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  42665. 8012502: 68fb ldr r3, [r7, #12]
  42666. 8012504: e853 3f00 ldrex r3, [r3]
  42667. 8012508: 60bb str r3, [r7, #8]
  42668. return(result);
  42669. 801250a: 68bb ldr r3, [r7, #8]
  42670. 801250c: f043 0340 orr.w r3, r3, #64 @ 0x40
  42671. 8012510: 633b str r3, [r7, #48] @ 0x30
  42672. 8012512: 687b ldr r3, [r7, #4]
  42673. 8012514: 681b ldr r3, [r3, #0]
  42674. 8012516: 461a mov r2, r3
  42675. 8012518: 6b3b ldr r3, [r7, #48] @ 0x30
  42676. 801251a: 61bb str r3, [r7, #24]
  42677. 801251c: 617a str r2, [r7, #20]
  42678. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  42679. 801251e: 6979 ldr r1, [r7, #20]
  42680. 8012520: 69ba ldr r2, [r7, #24]
  42681. 8012522: e841 2300 strex r3, r2, [r1]
  42682. 8012526: 613b str r3, [r7, #16]
  42683. return(result);
  42684. 8012528: 693b ldr r3, [r7, #16]
  42685. 801252a: 2b00 cmp r3, #0
  42686. 801252c: d1e6 bne.n 80124fc <UART_TxISR_8BIT+0x50>
  42687. huart->Instance->TDR = (uint8_t)(*huart->pTxBuffPtr & (uint8_t)0xFF);
  42688. huart->pTxBuffPtr++;
  42689. huart->TxXferCount--;
  42690. }
  42691. }
  42692. }
  42693. 801252e: e013 b.n 8012558 <UART_TxISR_8BIT+0xac>
  42694. huart->Instance->TDR = (uint8_t)(*huart->pTxBuffPtr & (uint8_t)0xFF);
  42695. 8012530: 687b ldr r3, [r7, #4]
  42696. 8012532: 6d1b ldr r3, [r3, #80] @ 0x50
  42697. 8012534: 781a ldrb r2, [r3, #0]
  42698. 8012536: 687b ldr r3, [r7, #4]
  42699. 8012538: 681b ldr r3, [r3, #0]
  42700. 801253a: 629a str r2, [r3, #40] @ 0x28
  42701. huart->pTxBuffPtr++;
  42702. 801253c: 687b ldr r3, [r7, #4]
  42703. 801253e: 6d1b ldr r3, [r3, #80] @ 0x50
  42704. 8012540: 1c5a adds r2, r3, #1
  42705. 8012542: 687b ldr r3, [r7, #4]
  42706. 8012544: 651a str r2, [r3, #80] @ 0x50
  42707. huart->TxXferCount--;
  42708. 8012546: 687b ldr r3, [r7, #4]
  42709. 8012548: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  42710. 801254c: b29b uxth r3, r3
  42711. 801254e: 3b01 subs r3, #1
  42712. 8012550: b29a uxth r2, r3
  42713. 8012552: 687b ldr r3, [r7, #4]
  42714. 8012554: f8a3 2056 strh.w r2, [r3, #86] @ 0x56
  42715. }
  42716. 8012558: bf00 nop
  42717. 801255a: 373c adds r7, #60 @ 0x3c
  42718. 801255c: 46bd mov sp, r7
  42719. 801255e: f85d 7b04 ldr.w r7, [sp], #4
  42720. 8012562: 4770 bx lr
  42721. 08012564 <UART_TxISR_16BIT>:
  42722. * interruptions have been enabled by HAL_UART_Transmit_IT().
  42723. * @param huart UART handle.
  42724. * @retval None
  42725. */
  42726. static void UART_TxISR_16BIT(UART_HandleTypeDef *huart)
  42727. {
  42728. 8012564: b480 push {r7}
  42729. 8012566: b091 sub sp, #68 @ 0x44
  42730. 8012568: af00 add r7, sp, #0
  42731. 801256a: 6078 str r0, [r7, #4]
  42732. const uint16_t *tmp;
  42733. /* Check that a Tx process is ongoing */
  42734. if (huart->gState == HAL_UART_STATE_BUSY_TX)
  42735. 801256c: 687b ldr r3, [r7, #4]
  42736. 801256e: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  42737. 8012572: 2b21 cmp r3, #33 @ 0x21
  42738. 8012574: d151 bne.n 801261a <UART_TxISR_16BIT+0xb6>
  42739. {
  42740. if (huart->TxXferCount == 0U)
  42741. 8012576: 687b ldr r3, [r7, #4]
  42742. 8012578: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  42743. 801257c: b29b uxth r3, r3
  42744. 801257e: 2b00 cmp r3, #0
  42745. 8012580: d132 bne.n 80125e8 <UART_TxISR_16BIT+0x84>
  42746. {
  42747. /* Disable the UART Transmit Data Register Empty Interrupt */
  42748. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_TXEIE_TXFNFIE);
  42749. 8012582: 687b ldr r3, [r7, #4]
  42750. 8012584: 681b ldr r3, [r3, #0]
  42751. 8012586: 627b str r3, [r7, #36] @ 0x24
  42752. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  42753. 8012588: 6a7b ldr r3, [r7, #36] @ 0x24
  42754. 801258a: e853 3f00 ldrex r3, [r3]
  42755. 801258e: 623b str r3, [r7, #32]
  42756. return(result);
  42757. 8012590: 6a3b ldr r3, [r7, #32]
  42758. 8012592: f023 0380 bic.w r3, r3, #128 @ 0x80
  42759. 8012596: 63bb str r3, [r7, #56] @ 0x38
  42760. 8012598: 687b ldr r3, [r7, #4]
  42761. 801259a: 681b ldr r3, [r3, #0]
  42762. 801259c: 461a mov r2, r3
  42763. 801259e: 6bbb ldr r3, [r7, #56] @ 0x38
  42764. 80125a0: 633b str r3, [r7, #48] @ 0x30
  42765. 80125a2: 62fa str r2, [r7, #44] @ 0x2c
  42766. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  42767. 80125a4: 6af9 ldr r1, [r7, #44] @ 0x2c
  42768. 80125a6: 6b3a ldr r2, [r7, #48] @ 0x30
  42769. 80125a8: e841 2300 strex r3, r2, [r1]
  42770. 80125ac: 62bb str r3, [r7, #40] @ 0x28
  42771. return(result);
  42772. 80125ae: 6abb ldr r3, [r7, #40] @ 0x28
  42773. 80125b0: 2b00 cmp r3, #0
  42774. 80125b2: d1e6 bne.n 8012582 <UART_TxISR_16BIT+0x1e>
  42775. /* Enable the UART Transmit Complete Interrupt */
  42776. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_TCIE);
  42777. 80125b4: 687b ldr r3, [r7, #4]
  42778. 80125b6: 681b ldr r3, [r3, #0]
  42779. 80125b8: 613b str r3, [r7, #16]
  42780. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  42781. 80125ba: 693b ldr r3, [r7, #16]
  42782. 80125bc: e853 3f00 ldrex r3, [r3]
  42783. 80125c0: 60fb str r3, [r7, #12]
  42784. return(result);
  42785. 80125c2: 68fb ldr r3, [r7, #12]
  42786. 80125c4: f043 0340 orr.w r3, r3, #64 @ 0x40
  42787. 80125c8: 637b str r3, [r7, #52] @ 0x34
  42788. 80125ca: 687b ldr r3, [r7, #4]
  42789. 80125cc: 681b ldr r3, [r3, #0]
  42790. 80125ce: 461a mov r2, r3
  42791. 80125d0: 6b7b ldr r3, [r7, #52] @ 0x34
  42792. 80125d2: 61fb str r3, [r7, #28]
  42793. 80125d4: 61ba str r2, [r7, #24]
  42794. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  42795. 80125d6: 69b9 ldr r1, [r7, #24]
  42796. 80125d8: 69fa ldr r2, [r7, #28]
  42797. 80125da: e841 2300 strex r3, r2, [r1]
  42798. 80125de: 617b str r3, [r7, #20]
  42799. return(result);
  42800. 80125e0: 697b ldr r3, [r7, #20]
  42801. 80125e2: 2b00 cmp r3, #0
  42802. 80125e4: d1e6 bne.n 80125b4 <UART_TxISR_16BIT+0x50>
  42803. huart->Instance->TDR = (((uint32_t)(*tmp)) & 0x01FFUL);
  42804. huart->pTxBuffPtr += 2U;
  42805. huart->TxXferCount--;
  42806. }
  42807. }
  42808. }
  42809. 80125e6: e018 b.n 801261a <UART_TxISR_16BIT+0xb6>
  42810. tmp = (const uint16_t *) huart->pTxBuffPtr;
  42811. 80125e8: 687b ldr r3, [r7, #4]
  42812. 80125ea: 6d1b ldr r3, [r3, #80] @ 0x50
  42813. 80125ec: 63fb str r3, [r7, #60] @ 0x3c
  42814. huart->Instance->TDR = (((uint32_t)(*tmp)) & 0x01FFUL);
  42815. 80125ee: 6bfb ldr r3, [r7, #60] @ 0x3c
  42816. 80125f0: 881b ldrh r3, [r3, #0]
  42817. 80125f2: 461a mov r2, r3
  42818. 80125f4: 687b ldr r3, [r7, #4]
  42819. 80125f6: 681b ldr r3, [r3, #0]
  42820. 80125f8: f3c2 0208 ubfx r2, r2, #0, #9
  42821. 80125fc: 629a str r2, [r3, #40] @ 0x28
  42822. huart->pTxBuffPtr += 2U;
  42823. 80125fe: 687b ldr r3, [r7, #4]
  42824. 8012600: 6d1b ldr r3, [r3, #80] @ 0x50
  42825. 8012602: 1c9a adds r2, r3, #2
  42826. 8012604: 687b ldr r3, [r7, #4]
  42827. 8012606: 651a str r2, [r3, #80] @ 0x50
  42828. huart->TxXferCount--;
  42829. 8012608: 687b ldr r3, [r7, #4]
  42830. 801260a: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  42831. 801260e: b29b uxth r3, r3
  42832. 8012610: 3b01 subs r3, #1
  42833. 8012612: b29a uxth r2, r3
  42834. 8012614: 687b ldr r3, [r7, #4]
  42835. 8012616: f8a3 2056 strh.w r2, [r3, #86] @ 0x56
  42836. }
  42837. 801261a: bf00 nop
  42838. 801261c: 3744 adds r7, #68 @ 0x44
  42839. 801261e: 46bd mov sp, r7
  42840. 8012620: f85d 7b04 ldr.w r7, [sp], #4
  42841. 8012624: 4770 bx lr
  42842. 08012626 <UART_TxISR_8BIT_FIFOEN>:
  42843. * interruptions have been enabled by HAL_UART_Transmit_IT().
  42844. * @param huart UART handle.
  42845. * @retval None
  42846. */
  42847. static void UART_TxISR_8BIT_FIFOEN(UART_HandleTypeDef *huart)
  42848. {
  42849. 8012626: b480 push {r7}
  42850. 8012628: b091 sub sp, #68 @ 0x44
  42851. 801262a: af00 add r7, sp, #0
  42852. 801262c: 6078 str r0, [r7, #4]
  42853. uint16_t nb_tx_data;
  42854. /* Check that a Tx process is ongoing */
  42855. if (huart->gState == HAL_UART_STATE_BUSY_TX)
  42856. 801262e: 687b ldr r3, [r7, #4]
  42857. 8012630: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  42858. 8012634: 2b21 cmp r3, #33 @ 0x21
  42859. 8012636: d160 bne.n 80126fa <UART_TxISR_8BIT_FIFOEN+0xd4>
  42860. {
  42861. for (nb_tx_data = huart->NbTxDataToProcess ; nb_tx_data > 0U ; nb_tx_data--)
  42862. 8012638: 687b ldr r3, [r7, #4]
  42863. 801263a: f8b3 306a ldrh.w r3, [r3, #106] @ 0x6a
  42864. 801263e: 87fb strh r3, [r7, #62] @ 0x3e
  42865. 8012640: e057 b.n 80126f2 <UART_TxISR_8BIT_FIFOEN+0xcc>
  42866. {
  42867. if (huart->TxXferCount == 0U)
  42868. 8012642: 687b ldr r3, [r7, #4]
  42869. 8012644: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  42870. 8012648: b29b uxth r3, r3
  42871. 801264a: 2b00 cmp r3, #0
  42872. 801264c: d133 bne.n 80126b6 <UART_TxISR_8BIT_FIFOEN+0x90>
  42873. {
  42874. /* Disable the TX FIFO threshold interrupt */
  42875. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_TXFTIE);
  42876. 801264e: 687b ldr r3, [r7, #4]
  42877. 8012650: 681b ldr r3, [r3, #0]
  42878. 8012652: 3308 adds r3, #8
  42879. 8012654: 627b str r3, [r7, #36] @ 0x24
  42880. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  42881. 8012656: 6a7b ldr r3, [r7, #36] @ 0x24
  42882. 8012658: e853 3f00 ldrex r3, [r3]
  42883. 801265c: 623b str r3, [r7, #32]
  42884. return(result);
  42885. 801265e: 6a3b ldr r3, [r7, #32]
  42886. 8012660: f423 0300 bic.w r3, r3, #8388608 @ 0x800000
  42887. 8012664: 63bb str r3, [r7, #56] @ 0x38
  42888. 8012666: 687b ldr r3, [r7, #4]
  42889. 8012668: 681b ldr r3, [r3, #0]
  42890. 801266a: 3308 adds r3, #8
  42891. 801266c: 6bba ldr r2, [r7, #56] @ 0x38
  42892. 801266e: 633a str r2, [r7, #48] @ 0x30
  42893. 8012670: 62fb str r3, [r7, #44] @ 0x2c
  42894. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  42895. 8012672: 6af9 ldr r1, [r7, #44] @ 0x2c
  42896. 8012674: 6b3a ldr r2, [r7, #48] @ 0x30
  42897. 8012676: e841 2300 strex r3, r2, [r1]
  42898. 801267a: 62bb str r3, [r7, #40] @ 0x28
  42899. return(result);
  42900. 801267c: 6abb ldr r3, [r7, #40] @ 0x28
  42901. 801267e: 2b00 cmp r3, #0
  42902. 8012680: d1e5 bne.n 801264e <UART_TxISR_8BIT_FIFOEN+0x28>
  42903. /* Enable the UART Transmit Complete Interrupt */
  42904. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_TCIE);
  42905. 8012682: 687b ldr r3, [r7, #4]
  42906. 8012684: 681b ldr r3, [r3, #0]
  42907. 8012686: 613b str r3, [r7, #16]
  42908. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  42909. 8012688: 693b ldr r3, [r7, #16]
  42910. 801268a: e853 3f00 ldrex r3, [r3]
  42911. 801268e: 60fb str r3, [r7, #12]
  42912. return(result);
  42913. 8012690: 68fb ldr r3, [r7, #12]
  42914. 8012692: f043 0340 orr.w r3, r3, #64 @ 0x40
  42915. 8012696: 637b str r3, [r7, #52] @ 0x34
  42916. 8012698: 687b ldr r3, [r7, #4]
  42917. 801269a: 681b ldr r3, [r3, #0]
  42918. 801269c: 461a mov r2, r3
  42919. 801269e: 6b7b ldr r3, [r7, #52] @ 0x34
  42920. 80126a0: 61fb str r3, [r7, #28]
  42921. 80126a2: 61ba str r2, [r7, #24]
  42922. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  42923. 80126a4: 69b9 ldr r1, [r7, #24]
  42924. 80126a6: 69fa ldr r2, [r7, #28]
  42925. 80126a8: e841 2300 strex r3, r2, [r1]
  42926. 80126ac: 617b str r3, [r7, #20]
  42927. return(result);
  42928. 80126ae: 697b ldr r3, [r7, #20]
  42929. 80126b0: 2b00 cmp r3, #0
  42930. 80126b2: d1e6 bne.n 8012682 <UART_TxISR_8BIT_FIFOEN+0x5c>
  42931. break; /* force exit loop */
  42932. 80126b4: e021 b.n 80126fa <UART_TxISR_8BIT_FIFOEN+0xd4>
  42933. }
  42934. else if (READ_BIT(huart->Instance->ISR, USART_ISR_TXE_TXFNF) != 0U)
  42935. 80126b6: 687b ldr r3, [r7, #4]
  42936. 80126b8: 681b ldr r3, [r3, #0]
  42937. 80126ba: 69db ldr r3, [r3, #28]
  42938. 80126bc: f003 0380 and.w r3, r3, #128 @ 0x80
  42939. 80126c0: 2b00 cmp r3, #0
  42940. 80126c2: d013 beq.n 80126ec <UART_TxISR_8BIT_FIFOEN+0xc6>
  42941. {
  42942. huart->Instance->TDR = (uint8_t)(*huart->pTxBuffPtr & (uint8_t)0xFF);
  42943. 80126c4: 687b ldr r3, [r7, #4]
  42944. 80126c6: 6d1b ldr r3, [r3, #80] @ 0x50
  42945. 80126c8: 781a ldrb r2, [r3, #0]
  42946. 80126ca: 687b ldr r3, [r7, #4]
  42947. 80126cc: 681b ldr r3, [r3, #0]
  42948. 80126ce: 629a str r2, [r3, #40] @ 0x28
  42949. huart->pTxBuffPtr++;
  42950. 80126d0: 687b ldr r3, [r7, #4]
  42951. 80126d2: 6d1b ldr r3, [r3, #80] @ 0x50
  42952. 80126d4: 1c5a adds r2, r3, #1
  42953. 80126d6: 687b ldr r3, [r7, #4]
  42954. 80126d8: 651a str r2, [r3, #80] @ 0x50
  42955. huart->TxXferCount--;
  42956. 80126da: 687b ldr r3, [r7, #4]
  42957. 80126dc: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  42958. 80126e0: b29b uxth r3, r3
  42959. 80126e2: 3b01 subs r3, #1
  42960. 80126e4: b29a uxth r2, r3
  42961. 80126e6: 687b ldr r3, [r7, #4]
  42962. 80126e8: f8a3 2056 strh.w r2, [r3, #86] @ 0x56
  42963. for (nb_tx_data = huart->NbTxDataToProcess ; nb_tx_data > 0U ; nb_tx_data--)
  42964. 80126ec: 8ffb ldrh r3, [r7, #62] @ 0x3e
  42965. 80126ee: 3b01 subs r3, #1
  42966. 80126f0: 87fb strh r3, [r7, #62] @ 0x3e
  42967. 80126f2: 8ffb ldrh r3, [r7, #62] @ 0x3e
  42968. 80126f4: 2b00 cmp r3, #0
  42969. 80126f6: d1a4 bne.n 8012642 <UART_TxISR_8BIT_FIFOEN+0x1c>
  42970. {
  42971. /* Nothing to do */
  42972. }
  42973. }
  42974. }
  42975. }
  42976. 80126f8: e7ff b.n 80126fa <UART_TxISR_8BIT_FIFOEN+0xd4>
  42977. 80126fa: bf00 nop
  42978. 80126fc: 3744 adds r7, #68 @ 0x44
  42979. 80126fe: 46bd mov sp, r7
  42980. 8012700: f85d 7b04 ldr.w r7, [sp], #4
  42981. 8012704: 4770 bx lr
  42982. 08012706 <UART_TxISR_16BIT_FIFOEN>:
  42983. * interruptions have been enabled by HAL_UART_Transmit_IT().
  42984. * @param huart UART handle.
  42985. * @retval None
  42986. */
  42987. static void UART_TxISR_16BIT_FIFOEN(UART_HandleTypeDef *huart)
  42988. {
  42989. 8012706: b480 push {r7}
  42990. 8012708: b091 sub sp, #68 @ 0x44
  42991. 801270a: af00 add r7, sp, #0
  42992. 801270c: 6078 str r0, [r7, #4]
  42993. const uint16_t *tmp;
  42994. uint16_t nb_tx_data;
  42995. /* Check that a Tx process is ongoing */
  42996. if (huart->gState == HAL_UART_STATE_BUSY_TX)
  42997. 801270e: 687b ldr r3, [r7, #4]
  42998. 8012710: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  42999. 8012714: 2b21 cmp r3, #33 @ 0x21
  43000. 8012716: d165 bne.n 80127e4 <UART_TxISR_16BIT_FIFOEN+0xde>
  43001. {
  43002. for (nb_tx_data = huart->NbTxDataToProcess ; nb_tx_data > 0U ; nb_tx_data--)
  43003. 8012718: 687b ldr r3, [r7, #4]
  43004. 801271a: f8b3 306a ldrh.w r3, [r3, #106] @ 0x6a
  43005. 801271e: 87fb strh r3, [r7, #62] @ 0x3e
  43006. 8012720: e05c b.n 80127dc <UART_TxISR_16BIT_FIFOEN+0xd6>
  43007. {
  43008. if (huart->TxXferCount == 0U)
  43009. 8012722: 687b ldr r3, [r7, #4]
  43010. 8012724: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  43011. 8012728: b29b uxth r3, r3
  43012. 801272a: 2b00 cmp r3, #0
  43013. 801272c: d133 bne.n 8012796 <UART_TxISR_16BIT_FIFOEN+0x90>
  43014. {
  43015. /* Disable the TX FIFO threshold interrupt */
  43016. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_TXFTIE);
  43017. 801272e: 687b ldr r3, [r7, #4]
  43018. 8012730: 681b ldr r3, [r3, #0]
  43019. 8012732: 3308 adds r3, #8
  43020. 8012734: 623b str r3, [r7, #32]
  43021. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  43022. 8012736: 6a3b ldr r3, [r7, #32]
  43023. 8012738: e853 3f00 ldrex r3, [r3]
  43024. 801273c: 61fb str r3, [r7, #28]
  43025. return(result);
  43026. 801273e: 69fb ldr r3, [r7, #28]
  43027. 8012740: f423 0300 bic.w r3, r3, #8388608 @ 0x800000
  43028. 8012744: 637b str r3, [r7, #52] @ 0x34
  43029. 8012746: 687b ldr r3, [r7, #4]
  43030. 8012748: 681b ldr r3, [r3, #0]
  43031. 801274a: 3308 adds r3, #8
  43032. 801274c: 6b7a ldr r2, [r7, #52] @ 0x34
  43033. 801274e: 62fa str r2, [r7, #44] @ 0x2c
  43034. 8012750: 62bb str r3, [r7, #40] @ 0x28
  43035. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  43036. 8012752: 6ab9 ldr r1, [r7, #40] @ 0x28
  43037. 8012754: 6afa ldr r2, [r7, #44] @ 0x2c
  43038. 8012756: e841 2300 strex r3, r2, [r1]
  43039. 801275a: 627b str r3, [r7, #36] @ 0x24
  43040. return(result);
  43041. 801275c: 6a7b ldr r3, [r7, #36] @ 0x24
  43042. 801275e: 2b00 cmp r3, #0
  43043. 8012760: d1e5 bne.n 801272e <UART_TxISR_16BIT_FIFOEN+0x28>
  43044. /* Enable the UART Transmit Complete Interrupt */
  43045. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_TCIE);
  43046. 8012762: 687b ldr r3, [r7, #4]
  43047. 8012764: 681b ldr r3, [r3, #0]
  43048. 8012766: 60fb str r3, [r7, #12]
  43049. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  43050. 8012768: 68fb ldr r3, [r7, #12]
  43051. 801276a: e853 3f00 ldrex r3, [r3]
  43052. 801276e: 60bb str r3, [r7, #8]
  43053. return(result);
  43054. 8012770: 68bb ldr r3, [r7, #8]
  43055. 8012772: f043 0340 orr.w r3, r3, #64 @ 0x40
  43056. 8012776: 633b str r3, [r7, #48] @ 0x30
  43057. 8012778: 687b ldr r3, [r7, #4]
  43058. 801277a: 681b ldr r3, [r3, #0]
  43059. 801277c: 461a mov r2, r3
  43060. 801277e: 6b3b ldr r3, [r7, #48] @ 0x30
  43061. 8012780: 61bb str r3, [r7, #24]
  43062. 8012782: 617a str r2, [r7, #20]
  43063. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  43064. 8012784: 6979 ldr r1, [r7, #20]
  43065. 8012786: 69ba ldr r2, [r7, #24]
  43066. 8012788: e841 2300 strex r3, r2, [r1]
  43067. 801278c: 613b str r3, [r7, #16]
  43068. return(result);
  43069. 801278e: 693b ldr r3, [r7, #16]
  43070. 8012790: 2b00 cmp r3, #0
  43071. 8012792: d1e6 bne.n 8012762 <UART_TxISR_16BIT_FIFOEN+0x5c>
  43072. break; /* force exit loop */
  43073. 8012794: e026 b.n 80127e4 <UART_TxISR_16BIT_FIFOEN+0xde>
  43074. }
  43075. else if (READ_BIT(huart->Instance->ISR, USART_ISR_TXE_TXFNF) != 0U)
  43076. 8012796: 687b ldr r3, [r7, #4]
  43077. 8012798: 681b ldr r3, [r3, #0]
  43078. 801279a: 69db ldr r3, [r3, #28]
  43079. 801279c: f003 0380 and.w r3, r3, #128 @ 0x80
  43080. 80127a0: 2b00 cmp r3, #0
  43081. 80127a2: d018 beq.n 80127d6 <UART_TxISR_16BIT_FIFOEN+0xd0>
  43082. {
  43083. tmp = (const uint16_t *) huart->pTxBuffPtr;
  43084. 80127a4: 687b ldr r3, [r7, #4]
  43085. 80127a6: 6d1b ldr r3, [r3, #80] @ 0x50
  43086. 80127a8: 63bb str r3, [r7, #56] @ 0x38
  43087. huart->Instance->TDR = (((uint32_t)(*tmp)) & 0x01FFUL);
  43088. 80127aa: 6bbb ldr r3, [r7, #56] @ 0x38
  43089. 80127ac: 881b ldrh r3, [r3, #0]
  43090. 80127ae: 461a mov r2, r3
  43091. 80127b0: 687b ldr r3, [r7, #4]
  43092. 80127b2: 681b ldr r3, [r3, #0]
  43093. 80127b4: f3c2 0208 ubfx r2, r2, #0, #9
  43094. 80127b8: 629a str r2, [r3, #40] @ 0x28
  43095. huart->pTxBuffPtr += 2U;
  43096. 80127ba: 687b ldr r3, [r7, #4]
  43097. 80127bc: 6d1b ldr r3, [r3, #80] @ 0x50
  43098. 80127be: 1c9a adds r2, r3, #2
  43099. 80127c0: 687b ldr r3, [r7, #4]
  43100. 80127c2: 651a str r2, [r3, #80] @ 0x50
  43101. huart->TxXferCount--;
  43102. 80127c4: 687b ldr r3, [r7, #4]
  43103. 80127c6: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  43104. 80127ca: b29b uxth r3, r3
  43105. 80127cc: 3b01 subs r3, #1
  43106. 80127ce: b29a uxth r2, r3
  43107. 80127d0: 687b ldr r3, [r7, #4]
  43108. 80127d2: f8a3 2056 strh.w r2, [r3, #86] @ 0x56
  43109. for (nb_tx_data = huart->NbTxDataToProcess ; nb_tx_data > 0U ; nb_tx_data--)
  43110. 80127d6: 8ffb ldrh r3, [r7, #62] @ 0x3e
  43111. 80127d8: 3b01 subs r3, #1
  43112. 80127da: 87fb strh r3, [r7, #62] @ 0x3e
  43113. 80127dc: 8ffb ldrh r3, [r7, #62] @ 0x3e
  43114. 80127de: 2b00 cmp r3, #0
  43115. 80127e0: d19f bne.n 8012722 <UART_TxISR_16BIT_FIFOEN+0x1c>
  43116. {
  43117. /* Nothing to do */
  43118. }
  43119. }
  43120. }
  43121. }
  43122. 80127e2: e7ff b.n 80127e4 <UART_TxISR_16BIT_FIFOEN+0xde>
  43123. 80127e4: bf00 nop
  43124. 80127e6: 3744 adds r7, #68 @ 0x44
  43125. 80127e8: 46bd mov sp, r7
  43126. 80127ea: f85d 7b04 ldr.w r7, [sp], #4
  43127. 80127ee: 4770 bx lr
  43128. 080127f0 <UART_EndTransmit_IT>:
  43129. * @param huart pointer to a UART_HandleTypeDef structure that contains
  43130. * the configuration information for the specified UART module.
  43131. * @retval None
  43132. */
  43133. static void UART_EndTransmit_IT(UART_HandleTypeDef *huart)
  43134. {
  43135. 80127f0: b580 push {r7, lr}
  43136. 80127f2: b088 sub sp, #32
  43137. 80127f4: af00 add r7, sp, #0
  43138. 80127f6: 6078 str r0, [r7, #4]
  43139. /* Disable the UART Transmit Complete Interrupt */
  43140. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_TCIE);
  43141. 80127f8: 687b ldr r3, [r7, #4]
  43142. 80127fa: 681b ldr r3, [r3, #0]
  43143. 80127fc: 60fb str r3, [r7, #12]
  43144. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  43145. 80127fe: 68fb ldr r3, [r7, #12]
  43146. 8012800: e853 3f00 ldrex r3, [r3]
  43147. 8012804: 60bb str r3, [r7, #8]
  43148. return(result);
  43149. 8012806: 68bb ldr r3, [r7, #8]
  43150. 8012808: f023 0340 bic.w r3, r3, #64 @ 0x40
  43151. 801280c: 61fb str r3, [r7, #28]
  43152. 801280e: 687b ldr r3, [r7, #4]
  43153. 8012810: 681b ldr r3, [r3, #0]
  43154. 8012812: 461a mov r2, r3
  43155. 8012814: 69fb ldr r3, [r7, #28]
  43156. 8012816: 61bb str r3, [r7, #24]
  43157. 8012818: 617a str r2, [r7, #20]
  43158. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  43159. 801281a: 6979 ldr r1, [r7, #20]
  43160. 801281c: 69ba ldr r2, [r7, #24]
  43161. 801281e: e841 2300 strex r3, r2, [r1]
  43162. 8012822: 613b str r3, [r7, #16]
  43163. return(result);
  43164. 8012824: 693b ldr r3, [r7, #16]
  43165. 8012826: 2b00 cmp r3, #0
  43166. 8012828: d1e6 bne.n 80127f8 <UART_EndTransmit_IT+0x8>
  43167. /* Tx process is ended, restore huart->gState to Ready */
  43168. huart->gState = HAL_UART_STATE_READY;
  43169. 801282a: 687b ldr r3, [r7, #4]
  43170. 801282c: 2220 movs r2, #32
  43171. 801282e: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  43172. /* Cleat TxISR function pointer */
  43173. huart->TxISR = NULL;
  43174. 8012832: 687b ldr r3, [r7, #4]
  43175. 8012834: 2200 movs r2, #0
  43176. 8012836: 679a str r2, [r3, #120] @ 0x78
  43177. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  43178. /*Call registered Tx complete callback*/
  43179. huart->TxCpltCallback(huart);
  43180. #else
  43181. /*Call legacy weak Tx complete callback*/
  43182. HAL_UART_TxCpltCallback(huart);
  43183. 8012838: 6878 ldr r0, [r7, #4]
  43184. 801283a: f7f1 fd65 bl 8004308 <HAL_UART_TxCpltCallback>
  43185. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  43186. }
  43187. 801283e: bf00 nop
  43188. 8012840: 3720 adds r7, #32
  43189. 8012842: 46bd mov sp, r7
  43190. 8012844: bd80 pop {r7, pc}
  43191. ...
  43192. 08012848 <UART_RxISR_8BIT>:
  43193. * @brief RX interrupt handler for 7 or 8 bits data word length .
  43194. * @param huart UART handle.
  43195. * @retval None
  43196. */
  43197. static void UART_RxISR_8BIT(UART_HandleTypeDef *huart)
  43198. {
  43199. 8012848: b580 push {r7, lr}
  43200. 801284a: b09c sub sp, #112 @ 0x70
  43201. 801284c: af00 add r7, sp, #0
  43202. 801284e: 6078 str r0, [r7, #4]
  43203. uint16_t uhMask = huart->Mask;
  43204. 8012850: 687b ldr r3, [r7, #4]
  43205. 8012852: f8b3 3060 ldrh.w r3, [r3, #96] @ 0x60
  43206. 8012856: f8a7 306e strh.w r3, [r7, #110] @ 0x6e
  43207. uint16_t uhdata;
  43208. /* Check that a Rx process is ongoing */
  43209. if (huart->RxState == HAL_UART_STATE_BUSY_RX)
  43210. 801285a: 687b ldr r3, [r7, #4]
  43211. 801285c: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c
  43212. 8012860: 2b22 cmp r3, #34 @ 0x22
  43213. 8012862: f040 80be bne.w 80129e2 <UART_RxISR_8BIT+0x19a>
  43214. {
  43215. uhdata = (uint16_t) READ_REG(huart->Instance->RDR);
  43216. 8012866: 687b ldr r3, [r7, #4]
  43217. 8012868: 681b ldr r3, [r3, #0]
  43218. 801286a: 6a5b ldr r3, [r3, #36] @ 0x24
  43219. 801286c: f8a7 306c strh.w r3, [r7, #108] @ 0x6c
  43220. *huart->pRxBuffPtr = (uint8_t)(uhdata & (uint8_t)uhMask);
  43221. 8012870: f8b7 306c ldrh.w r3, [r7, #108] @ 0x6c
  43222. 8012874: b2d9 uxtb r1, r3
  43223. 8012876: f8b7 306e ldrh.w r3, [r7, #110] @ 0x6e
  43224. 801287a: b2da uxtb r2, r3
  43225. 801287c: 687b ldr r3, [r7, #4]
  43226. 801287e: 6d9b ldr r3, [r3, #88] @ 0x58
  43227. 8012880: 400a ands r2, r1
  43228. 8012882: b2d2 uxtb r2, r2
  43229. 8012884: 701a strb r2, [r3, #0]
  43230. huart->pRxBuffPtr++;
  43231. 8012886: 687b ldr r3, [r7, #4]
  43232. 8012888: 6d9b ldr r3, [r3, #88] @ 0x58
  43233. 801288a: 1c5a adds r2, r3, #1
  43234. 801288c: 687b ldr r3, [r7, #4]
  43235. 801288e: 659a str r2, [r3, #88] @ 0x58
  43236. huart->RxXferCount--;
  43237. 8012890: 687b ldr r3, [r7, #4]
  43238. 8012892: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  43239. 8012896: b29b uxth r3, r3
  43240. 8012898: 3b01 subs r3, #1
  43241. 801289a: b29a uxth r2, r3
  43242. 801289c: 687b ldr r3, [r7, #4]
  43243. 801289e: f8a3 205e strh.w r2, [r3, #94] @ 0x5e
  43244. if (huart->RxXferCount == 0U)
  43245. 80128a2: 687b ldr r3, [r7, #4]
  43246. 80128a4: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  43247. 80128a8: b29b uxth r3, r3
  43248. 80128aa: 2b00 cmp r3, #0
  43249. 80128ac: f040 80a1 bne.w 80129f2 <UART_RxISR_8BIT+0x1aa>
  43250. {
  43251. /* Disable the UART Parity Error Interrupt and RXNE interrupts */
  43252. ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE));
  43253. 80128b0: 687b ldr r3, [r7, #4]
  43254. 80128b2: 681b ldr r3, [r3, #0]
  43255. 80128b4: 64fb str r3, [r7, #76] @ 0x4c
  43256. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  43257. 80128b6: 6cfb ldr r3, [r7, #76] @ 0x4c
  43258. 80128b8: e853 3f00 ldrex r3, [r3]
  43259. 80128bc: 64bb str r3, [r7, #72] @ 0x48
  43260. return(result);
  43261. 80128be: 6cbb ldr r3, [r7, #72] @ 0x48
  43262. 80128c0: f423 7390 bic.w r3, r3, #288 @ 0x120
  43263. 80128c4: 66bb str r3, [r7, #104] @ 0x68
  43264. 80128c6: 687b ldr r3, [r7, #4]
  43265. 80128c8: 681b ldr r3, [r3, #0]
  43266. 80128ca: 461a mov r2, r3
  43267. 80128cc: 6ebb ldr r3, [r7, #104] @ 0x68
  43268. 80128ce: 65bb str r3, [r7, #88] @ 0x58
  43269. 80128d0: 657a str r2, [r7, #84] @ 0x54
  43270. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  43271. 80128d2: 6d79 ldr r1, [r7, #84] @ 0x54
  43272. 80128d4: 6dba ldr r2, [r7, #88] @ 0x58
  43273. 80128d6: e841 2300 strex r3, r2, [r1]
  43274. 80128da: 653b str r3, [r7, #80] @ 0x50
  43275. return(result);
  43276. 80128dc: 6d3b ldr r3, [r7, #80] @ 0x50
  43277. 80128de: 2b00 cmp r3, #0
  43278. 80128e0: d1e6 bne.n 80128b0 <UART_RxISR_8BIT+0x68>
  43279. /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error) */
  43280. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);
  43281. 80128e2: 687b ldr r3, [r7, #4]
  43282. 80128e4: 681b ldr r3, [r3, #0]
  43283. 80128e6: 3308 adds r3, #8
  43284. 80128e8: 63bb str r3, [r7, #56] @ 0x38
  43285. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  43286. 80128ea: 6bbb ldr r3, [r7, #56] @ 0x38
  43287. 80128ec: e853 3f00 ldrex r3, [r3]
  43288. 80128f0: 637b str r3, [r7, #52] @ 0x34
  43289. return(result);
  43290. 80128f2: 6b7b ldr r3, [r7, #52] @ 0x34
  43291. 80128f4: f023 0301 bic.w r3, r3, #1
  43292. 80128f8: 667b str r3, [r7, #100] @ 0x64
  43293. 80128fa: 687b ldr r3, [r7, #4]
  43294. 80128fc: 681b ldr r3, [r3, #0]
  43295. 80128fe: 3308 adds r3, #8
  43296. 8012900: 6e7a ldr r2, [r7, #100] @ 0x64
  43297. 8012902: 647a str r2, [r7, #68] @ 0x44
  43298. 8012904: 643b str r3, [r7, #64] @ 0x40
  43299. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  43300. 8012906: 6c39 ldr r1, [r7, #64] @ 0x40
  43301. 8012908: 6c7a ldr r2, [r7, #68] @ 0x44
  43302. 801290a: e841 2300 strex r3, r2, [r1]
  43303. 801290e: 63fb str r3, [r7, #60] @ 0x3c
  43304. return(result);
  43305. 8012910: 6bfb ldr r3, [r7, #60] @ 0x3c
  43306. 8012912: 2b00 cmp r3, #0
  43307. 8012914: d1e5 bne.n 80128e2 <UART_RxISR_8BIT+0x9a>
  43308. /* Rx process is completed, restore huart->RxState to Ready */
  43309. huart->RxState = HAL_UART_STATE_READY;
  43310. 8012916: 687b ldr r3, [r7, #4]
  43311. 8012918: 2220 movs r2, #32
  43312. 801291a: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  43313. /* Clear RxISR function pointer */
  43314. huart->RxISR = NULL;
  43315. 801291e: 687b ldr r3, [r7, #4]
  43316. 8012920: 2200 movs r2, #0
  43317. 8012922: 675a str r2, [r3, #116] @ 0x74
  43318. /* Initialize type of RxEvent to Transfer Complete */
  43319. huart->RxEventType = HAL_UART_RXEVENT_TC;
  43320. 8012924: 687b ldr r3, [r7, #4]
  43321. 8012926: 2200 movs r2, #0
  43322. 8012928: 671a str r2, [r3, #112] @ 0x70
  43323. if (!(IS_LPUART_INSTANCE(huart->Instance)))
  43324. 801292a: 687b ldr r3, [r7, #4]
  43325. 801292c: 681b ldr r3, [r3, #0]
  43326. 801292e: 4a33 ldr r2, [pc, #204] @ (80129fc <UART_RxISR_8BIT+0x1b4>)
  43327. 8012930: 4293 cmp r3, r2
  43328. 8012932: d01f beq.n 8012974 <UART_RxISR_8BIT+0x12c>
  43329. {
  43330. /* Check that USART RTOEN bit is set */
  43331. if (READ_BIT(huart->Instance->CR2, USART_CR2_RTOEN) != 0U)
  43332. 8012934: 687b ldr r3, [r7, #4]
  43333. 8012936: 681b ldr r3, [r3, #0]
  43334. 8012938: 685b ldr r3, [r3, #4]
  43335. 801293a: f403 0300 and.w r3, r3, #8388608 @ 0x800000
  43336. 801293e: 2b00 cmp r3, #0
  43337. 8012940: d018 beq.n 8012974 <UART_RxISR_8BIT+0x12c>
  43338. {
  43339. /* Enable the UART Receiver Timeout Interrupt */
  43340. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_RTOIE);
  43341. 8012942: 687b ldr r3, [r7, #4]
  43342. 8012944: 681b ldr r3, [r3, #0]
  43343. 8012946: 627b str r3, [r7, #36] @ 0x24
  43344. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  43345. 8012948: 6a7b ldr r3, [r7, #36] @ 0x24
  43346. 801294a: e853 3f00 ldrex r3, [r3]
  43347. 801294e: 623b str r3, [r7, #32]
  43348. return(result);
  43349. 8012950: 6a3b ldr r3, [r7, #32]
  43350. 8012952: f023 6380 bic.w r3, r3, #67108864 @ 0x4000000
  43351. 8012956: 663b str r3, [r7, #96] @ 0x60
  43352. 8012958: 687b ldr r3, [r7, #4]
  43353. 801295a: 681b ldr r3, [r3, #0]
  43354. 801295c: 461a mov r2, r3
  43355. 801295e: 6e3b ldr r3, [r7, #96] @ 0x60
  43356. 8012960: 633b str r3, [r7, #48] @ 0x30
  43357. 8012962: 62fa str r2, [r7, #44] @ 0x2c
  43358. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  43359. 8012964: 6af9 ldr r1, [r7, #44] @ 0x2c
  43360. 8012966: 6b3a ldr r2, [r7, #48] @ 0x30
  43361. 8012968: e841 2300 strex r3, r2, [r1]
  43362. 801296c: 62bb str r3, [r7, #40] @ 0x28
  43363. return(result);
  43364. 801296e: 6abb ldr r3, [r7, #40] @ 0x28
  43365. 8012970: 2b00 cmp r3, #0
  43366. 8012972: d1e6 bne.n 8012942 <UART_RxISR_8BIT+0xfa>
  43367. }
  43368. }
  43369. /* Check current reception Mode :
  43370. If Reception till IDLE event has been selected : */
  43371. if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
  43372. 8012974: 687b ldr r3, [r7, #4]
  43373. 8012976: 6edb ldr r3, [r3, #108] @ 0x6c
  43374. 8012978: 2b01 cmp r3, #1
  43375. 801297a: d12e bne.n 80129da <UART_RxISR_8BIT+0x192>
  43376. {
  43377. /* Set reception type to Standard */
  43378. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  43379. 801297c: 687b ldr r3, [r7, #4]
  43380. 801297e: 2200 movs r2, #0
  43381. 8012980: 66da str r2, [r3, #108] @ 0x6c
  43382. /* Disable IDLE interrupt */
  43383. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  43384. 8012982: 687b ldr r3, [r7, #4]
  43385. 8012984: 681b ldr r3, [r3, #0]
  43386. 8012986: 613b str r3, [r7, #16]
  43387. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  43388. 8012988: 693b ldr r3, [r7, #16]
  43389. 801298a: e853 3f00 ldrex r3, [r3]
  43390. 801298e: 60fb str r3, [r7, #12]
  43391. return(result);
  43392. 8012990: 68fb ldr r3, [r7, #12]
  43393. 8012992: f023 0310 bic.w r3, r3, #16
  43394. 8012996: 65fb str r3, [r7, #92] @ 0x5c
  43395. 8012998: 687b ldr r3, [r7, #4]
  43396. 801299a: 681b ldr r3, [r3, #0]
  43397. 801299c: 461a mov r2, r3
  43398. 801299e: 6dfb ldr r3, [r7, #92] @ 0x5c
  43399. 80129a0: 61fb str r3, [r7, #28]
  43400. 80129a2: 61ba str r2, [r7, #24]
  43401. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  43402. 80129a4: 69b9 ldr r1, [r7, #24]
  43403. 80129a6: 69fa ldr r2, [r7, #28]
  43404. 80129a8: e841 2300 strex r3, r2, [r1]
  43405. 80129ac: 617b str r3, [r7, #20]
  43406. return(result);
  43407. 80129ae: 697b ldr r3, [r7, #20]
  43408. 80129b0: 2b00 cmp r3, #0
  43409. 80129b2: d1e6 bne.n 8012982 <UART_RxISR_8BIT+0x13a>
  43410. if (__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE) == SET)
  43411. 80129b4: 687b ldr r3, [r7, #4]
  43412. 80129b6: 681b ldr r3, [r3, #0]
  43413. 80129b8: 69db ldr r3, [r3, #28]
  43414. 80129ba: f003 0310 and.w r3, r3, #16
  43415. 80129be: 2b10 cmp r3, #16
  43416. 80129c0: d103 bne.n 80129ca <UART_RxISR_8BIT+0x182>
  43417. {
  43418. /* Clear IDLE Flag */
  43419. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_IDLEF);
  43420. 80129c2: 687b ldr r3, [r7, #4]
  43421. 80129c4: 681b ldr r3, [r3, #0]
  43422. 80129c6: 2210 movs r2, #16
  43423. 80129c8: 621a str r2, [r3, #32]
  43424. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  43425. /*Call registered Rx Event callback*/
  43426. huart->RxEventCallback(huart, huart->RxXferSize);
  43427. #else
  43428. /*Call legacy weak Rx Event callback*/
  43429. HAL_UARTEx_RxEventCallback(huart, huart->RxXferSize);
  43430. 80129ca: 687b ldr r3, [r7, #4]
  43431. 80129cc: f8b3 305c ldrh.w r3, [r3, #92] @ 0x5c
  43432. 80129d0: 4619 mov r1, r3
  43433. 80129d2: 6878 ldr r0, [r7, #4]
  43434. 80129d4: f7f1 fc6e bl 80042b4 <HAL_UARTEx_RxEventCallback>
  43435. else
  43436. {
  43437. /* Clear RXNE interrupt flag */
  43438. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  43439. }
  43440. }
  43441. 80129d8: e00b b.n 80129f2 <UART_RxISR_8BIT+0x1aa>
  43442. HAL_UART_RxCpltCallback(huart);
  43443. 80129da: 6878 ldr r0, [r7, #4]
  43444. 80129dc: f7f1 fc60 bl 80042a0 <HAL_UART_RxCpltCallback>
  43445. }
  43446. 80129e0: e007 b.n 80129f2 <UART_RxISR_8BIT+0x1aa>
  43447. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  43448. 80129e2: 687b ldr r3, [r7, #4]
  43449. 80129e4: 681b ldr r3, [r3, #0]
  43450. 80129e6: 699a ldr r2, [r3, #24]
  43451. 80129e8: 687b ldr r3, [r7, #4]
  43452. 80129ea: 681b ldr r3, [r3, #0]
  43453. 80129ec: f042 0208 orr.w r2, r2, #8
  43454. 80129f0: 619a str r2, [r3, #24]
  43455. }
  43456. 80129f2: bf00 nop
  43457. 80129f4: 3770 adds r7, #112 @ 0x70
  43458. 80129f6: 46bd mov sp, r7
  43459. 80129f8: bd80 pop {r7, pc}
  43460. 80129fa: bf00 nop
  43461. 80129fc: 58000c00 .word 0x58000c00
  43462. 08012a00 <UART_RxISR_16BIT>:
  43463. * interruptions have been enabled by HAL_UART_Receive_IT()
  43464. * @param huart UART handle.
  43465. * @retval None
  43466. */
  43467. static void UART_RxISR_16BIT(UART_HandleTypeDef *huart)
  43468. {
  43469. 8012a00: b580 push {r7, lr}
  43470. 8012a02: b09c sub sp, #112 @ 0x70
  43471. 8012a04: af00 add r7, sp, #0
  43472. 8012a06: 6078 str r0, [r7, #4]
  43473. uint16_t *tmp;
  43474. uint16_t uhMask = huart->Mask;
  43475. 8012a08: 687b ldr r3, [r7, #4]
  43476. 8012a0a: f8b3 3060 ldrh.w r3, [r3, #96] @ 0x60
  43477. 8012a0e: f8a7 306e strh.w r3, [r7, #110] @ 0x6e
  43478. uint16_t uhdata;
  43479. /* Check that a Rx process is ongoing */
  43480. if (huart->RxState == HAL_UART_STATE_BUSY_RX)
  43481. 8012a12: 687b ldr r3, [r7, #4]
  43482. 8012a14: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c
  43483. 8012a18: 2b22 cmp r3, #34 @ 0x22
  43484. 8012a1a: f040 80be bne.w 8012b9a <UART_RxISR_16BIT+0x19a>
  43485. {
  43486. uhdata = (uint16_t) READ_REG(huart->Instance->RDR);
  43487. 8012a1e: 687b ldr r3, [r7, #4]
  43488. 8012a20: 681b ldr r3, [r3, #0]
  43489. 8012a22: 6a5b ldr r3, [r3, #36] @ 0x24
  43490. 8012a24: f8a7 306c strh.w r3, [r7, #108] @ 0x6c
  43491. tmp = (uint16_t *) huart->pRxBuffPtr ;
  43492. 8012a28: 687b ldr r3, [r7, #4]
  43493. 8012a2a: 6d9b ldr r3, [r3, #88] @ 0x58
  43494. 8012a2c: 66bb str r3, [r7, #104] @ 0x68
  43495. *tmp = (uint16_t)(uhdata & uhMask);
  43496. 8012a2e: f8b7 206c ldrh.w r2, [r7, #108] @ 0x6c
  43497. 8012a32: f8b7 306e ldrh.w r3, [r7, #110] @ 0x6e
  43498. 8012a36: 4013 ands r3, r2
  43499. 8012a38: b29a uxth r2, r3
  43500. 8012a3a: 6ebb ldr r3, [r7, #104] @ 0x68
  43501. 8012a3c: 801a strh r2, [r3, #0]
  43502. huart->pRxBuffPtr += 2U;
  43503. 8012a3e: 687b ldr r3, [r7, #4]
  43504. 8012a40: 6d9b ldr r3, [r3, #88] @ 0x58
  43505. 8012a42: 1c9a adds r2, r3, #2
  43506. 8012a44: 687b ldr r3, [r7, #4]
  43507. 8012a46: 659a str r2, [r3, #88] @ 0x58
  43508. huart->RxXferCount--;
  43509. 8012a48: 687b ldr r3, [r7, #4]
  43510. 8012a4a: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  43511. 8012a4e: b29b uxth r3, r3
  43512. 8012a50: 3b01 subs r3, #1
  43513. 8012a52: b29a uxth r2, r3
  43514. 8012a54: 687b ldr r3, [r7, #4]
  43515. 8012a56: f8a3 205e strh.w r2, [r3, #94] @ 0x5e
  43516. if (huart->RxXferCount == 0U)
  43517. 8012a5a: 687b ldr r3, [r7, #4]
  43518. 8012a5c: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  43519. 8012a60: b29b uxth r3, r3
  43520. 8012a62: 2b00 cmp r3, #0
  43521. 8012a64: f040 80a1 bne.w 8012baa <UART_RxISR_16BIT+0x1aa>
  43522. {
  43523. /* Disable the UART Parity Error Interrupt and RXNE interrupt*/
  43524. ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE));
  43525. 8012a68: 687b ldr r3, [r7, #4]
  43526. 8012a6a: 681b ldr r3, [r3, #0]
  43527. 8012a6c: 64bb str r3, [r7, #72] @ 0x48
  43528. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  43529. 8012a6e: 6cbb ldr r3, [r7, #72] @ 0x48
  43530. 8012a70: e853 3f00 ldrex r3, [r3]
  43531. 8012a74: 647b str r3, [r7, #68] @ 0x44
  43532. return(result);
  43533. 8012a76: 6c7b ldr r3, [r7, #68] @ 0x44
  43534. 8012a78: f423 7390 bic.w r3, r3, #288 @ 0x120
  43535. 8012a7c: 667b str r3, [r7, #100] @ 0x64
  43536. 8012a7e: 687b ldr r3, [r7, #4]
  43537. 8012a80: 681b ldr r3, [r3, #0]
  43538. 8012a82: 461a mov r2, r3
  43539. 8012a84: 6e7b ldr r3, [r7, #100] @ 0x64
  43540. 8012a86: 657b str r3, [r7, #84] @ 0x54
  43541. 8012a88: 653a str r2, [r7, #80] @ 0x50
  43542. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  43543. 8012a8a: 6d39 ldr r1, [r7, #80] @ 0x50
  43544. 8012a8c: 6d7a ldr r2, [r7, #84] @ 0x54
  43545. 8012a8e: e841 2300 strex r3, r2, [r1]
  43546. 8012a92: 64fb str r3, [r7, #76] @ 0x4c
  43547. return(result);
  43548. 8012a94: 6cfb ldr r3, [r7, #76] @ 0x4c
  43549. 8012a96: 2b00 cmp r3, #0
  43550. 8012a98: d1e6 bne.n 8012a68 <UART_RxISR_16BIT+0x68>
  43551. /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error) */
  43552. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);
  43553. 8012a9a: 687b ldr r3, [r7, #4]
  43554. 8012a9c: 681b ldr r3, [r3, #0]
  43555. 8012a9e: 3308 adds r3, #8
  43556. 8012aa0: 637b str r3, [r7, #52] @ 0x34
  43557. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  43558. 8012aa2: 6b7b ldr r3, [r7, #52] @ 0x34
  43559. 8012aa4: e853 3f00 ldrex r3, [r3]
  43560. 8012aa8: 633b str r3, [r7, #48] @ 0x30
  43561. return(result);
  43562. 8012aaa: 6b3b ldr r3, [r7, #48] @ 0x30
  43563. 8012aac: f023 0301 bic.w r3, r3, #1
  43564. 8012ab0: 663b str r3, [r7, #96] @ 0x60
  43565. 8012ab2: 687b ldr r3, [r7, #4]
  43566. 8012ab4: 681b ldr r3, [r3, #0]
  43567. 8012ab6: 3308 adds r3, #8
  43568. 8012ab8: 6e3a ldr r2, [r7, #96] @ 0x60
  43569. 8012aba: 643a str r2, [r7, #64] @ 0x40
  43570. 8012abc: 63fb str r3, [r7, #60] @ 0x3c
  43571. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  43572. 8012abe: 6bf9 ldr r1, [r7, #60] @ 0x3c
  43573. 8012ac0: 6c3a ldr r2, [r7, #64] @ 0x40
  43574. 8012ac2: e841 2300 strex r3, r2, [r1]
  43575. 8012ac6: 63bb str r3, [r7, #56] @ 0x38
  43576. return(result);
  43577. 8012ac8: 6bbb ldr r3, [r7, #56] @ 0x38
  43578. 8012aca: 2b00 cmp r3, #0
  43579. 8012acc: d1e5 bne.n 8012a9a <UART_RxISR_16BIT+0x9a>
  43580. /* Rx process is completed, restore huart->RxState to Ready */
  43581. huart->RxState = HAL_UART_STATE_READY;
  43582. 8012ace: 687b ldr r3, [r7, #4]
  43583. 8012ad0: 2220 movs r2, #32
  43584. 8012ad2: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  43585. /* Clear RxISR function pointer */
  43586. huart->RxISR = NULL;
  43587. 8012ad6: 687b ldr r3, [r7, #4]
  43588. 8012ad8: 2200 movs r2, #0
  43589. 8012ada: 675a str r2, [r3, #116] @ 0x74
  43590. /* Initialize type of RxEvent to Transfer Complete */
  43591. huart->RxEventType = HAL_UART_RXEVENT_TC;
  43592. 8012adc: 687b ldr r3, [r7, #4]
  43593. 8012ade: 2200 movs r2, #0
  43594. 8012ae0: 671a str r2, [r3, #112] @ 0x70
  43595. if (!(IS_LPUART_INSTANCE(huart->Instance)))
  43596. 8012ae2: 687b ldr r3, [r7, #4]
  43597. 8012ae4: 681b ldr r3, [r3, #0]
  43598. 8012ae6: 4a33 ldr r2, [pc, #204] @ (8012bb4 <UART_RxISR_16BIT+0x1b4>)
  43599. 8012ae8: 4293 cmp r3, r2
  43600. 8012aea: d01f beq.n 8012b2c <UART_RxISR_16BIT+0x12c>
  43601. {
  43602. /* Check that USART RTOEN bit is set */
  43603. if (READ_BIT(huart->Instance->CR2, USART_CR2_RTOEN) != 0U)
  43604. 8012aec: 687b ldr r3, [r7, #4]
  43605. 8012aee: 681b ldr r3, [r3, #0]
  43606. 8012af0: 685b ldr r3, [r3, #4]
  43607. 8012af2: f403 0300 and.w r3, r3, #8388608 @ 0x800000
  43608. 8012af6: 2b00 cmp r3, #0
  43609. 8012af8: d018 beq.n 8012b2c <UART_RxISR_16BIT+0x12c>
  43610. {
  43611. /* Enable the UART Receiver Timeout Interrupt */
  43612. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_RTOIE);
  43613. 8012afa: 687b ldr r3, [r7, #4]
  43614. 8012afc: 681b ldr r3, [r3, #0]
  43615. 8012afe: 623b str r3, [r7, #32]
  43616. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  43617. 8012b00: 6a3b ldr r3, [r7, #32]
  43618. 8012b02: e853 3f00 ldrex r3, [r3]
  43619. 8012b06: 61fb str r3, [r7, #28]
  43620. return(result);
  43621. 8012b08: 69fb ldr r3, [r7, #28]
  43622. 8012b0a: f023 6380 bic.w r3, r3, #67108864 @ 0x4000000
  43623. 8012b0e: 65fb str r3, [r7, #92] @ 0x5c
  43624. 8012b10: 687b ldr r3, [r7, #4]
  43625. 8012b12: 681b ldr r3, [r3, #0]
  43626. 8012b14: 461a mov r2, r3
  43627. 8012b16: 6dfb ldr r3, [r7, #92] @ 0x5c
  43628. 8012b18: 62fb str r3, [r7, #44] @ 0x2c
  43629. 8012b1a: 62ba str r2, [r7, #40] @ 0x28
  43630. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  43631. 8012b1c: 6ab9 ldr r1, [r7, #40] @ 0x28
  43632. 8012b1e: 6afa ldr r2, [r7, #44] @ 0x2c
  43633. 8012b20: e841 2300 strex r3, r2, [r1]
  43634. 8012b24: 627b str r3, [r7, #36] @ 0x24
  43635. return(result);
  43636. 8012b26: 6a7b ldr r3, [r7, #36] @ 0x24
  43637. 8012b28: 2b00 cmp r3, #0
  43638. 8012b2a: d1e6 bne.n 8012afa <UART_RxISR_16BIT+0xfa>
  43639. }
  43640. }
  43641. /* Check current reception Mode :
  43642. If Reception till IDLE event has been selected : */
  43643. if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
  43644. 8012b2c: 687b ldr r3, [r7, #4]
  43645. 8012b2e: 6edb ldr r3, [r3, #108] @ 0x6c
  43646. 8012b30: 2b01 cmp r3, #1
  43647. 8012b32: d12e bne.n 8012b92 <UART_RxISR_16BIT+0x192>
  43648. {
  43649. /* Set reception type to Standard */
  43650. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  43651. 8012b34: 687b ldr r3, [r7, #4]
  43652. 8012b36: 2200 movs r2, #0
  43653. 8012b38: 66da str r2, [r3, #108] @ 0x6c
  43654. /* Disable IDLE interrupt */
  43655. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  43656. 8012b3a: 687b ldr r3, [r7, #4]
  43657. 8012b3c: 681b ldr r3, [r3, #0]
  43658. 8012b3e: 60fb str r3, [r7, #12]
  43659. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  43660. 8012b40: 68fb ldr r3, [r7, #12]
  43661. 8012b42: e853 3f00 ldrex r3, [r3]
  43662. 8012b46: 60bb str r3, [r7, #8]
  43663. return(result);
  43664. 8012b48: 68bb ldr r3, [r7, #8]
  43665. 8012b4a: f023 0310 bic.w r3, r3, #16
  43666. 8012b4e: 65bb str r3, [r7, #88] @ 0x58
  43667. 8012b50: 687b ldr r3, [r7, #4]
  43668. 8012b52: 681b ldr r3, [r3, #0]
  43669. 8012b54: 461a mov r2, r3
  43670. 8012b56: 6dbb ldr r3, [r7, #88] @ 0x58
  43671. 8012b58: 61bb str r3, [r7, #24]
  43672. 8012b5a: 617a str r2, [r7, #20]
  43673. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  43674. 8012b5c: 6979 ldr r1, [r7, #20]
  43675. 8012b5e: 69ba ldr r2, [r7, #24]
  43676. 8012b60: e841 2300 strex r3, r2, [r1]
  43677. 8012b64: 613b str r3, [r7, #16]
  43678. return(result);
  43679. 8012b66: 693b ldr r3, [r7, #16]
  43680. 8012b68: 2b00 cmp r3, #0
  43681. 8012b6a: d1e6 bne.n 8012b3a <UART_RxISR_16BIT+0x13a>
  43682. if (__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE) == SET)
  43683. 8012b6c: 687b ldr r3, [r7, #4]
  43684. 8012b6e: 681b ldr r3, [r3, #0]
  43685. 8012b70: 69db ldr r3, [r3, #28]
  43686. 8012b72: f003 0310 and.w r3, r3, #16
  43687. 8012b76: 2b10 cmp r3, #16
  43688. 8012b78: d103 bne.n 8012b82 <UART_RxISR_16BIT+0x182>
  43689. {
  43690. /* Clear IDLE Flag */
  43691. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_IDLEF);
  43692. 8012b7a: 687b ldr r3, [r7, #4]
  43693. 8012b7c: 681b ldr r3, [r3, #0]
  43694. 8012b7e: 2210 movs r2, #16
  43695. 8012b80: 621a str r2, [r3, #32]
  43696. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  43697. /*Call registered Rx Event callback*/
  43698. huart->RxEventCallback(huart, huart->RxXferSize);
  43699. #else
  43700. /*Call legacy weak Rx Event callback*/
  43701. HAL_UARTEx_RxEventCallback(huart, huart->RxXferSize);
  43702. 8012b82: 687b ldr r3, [r7, #4]
  43703. 8012b84: f8b3 305c ldrh.w r3, [r3, #92] @ 0x5c
  43704. 8012b88: 4619 mov r1, r3
  43705. 8012b8a: 6878 ldr r0, [r7, #4]
  43706. 8012b8c: f7f1 fb92 bl 80042b4 <HAL_UARTEx_RxEventCallback>
  43707. else
  43708. {
  43709. /* Clear RXNE interrupt flag */
  43710. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  43711. }
  43712. }
  43713. 8012b90: e00b b.n 8012baa <UART_RxISR_16BIT+0x1aa>
  43714. HAL_UART_RxCpltCallback(huart);
  43715. 8012b92: 6878 ldr r0, [r7, #4]
  43716. 8012b94: f7f1 fb84 bl 80042a0 <HAL_UART_RxCpltCallback>
  43717. }
  43718. 8012b98: e007 b.n 8012baa <UART_RxISR_16BIT+0x1aa>
  43719. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  43720. 8012b9a: 687b ldr r3, [r7, #4]
  43721. 8012b9c: 681b ldr r3, [r3, #0]
  43722. 8012b9e: 699a ldr r2, [r3, #24]
  43723. 8012ba0: 687b ldr r3, [r7, #4]
  43724. 8012ba2: 681b ldr r3, [r3, #0]
  43725. 8012ba4: f042 0208 orr.w r2, r2, #8
  43726. 8012ba8: 619a str r2, [r3, #24]
  43727. }
  43728. 8012baa: bf00 nop
  43729. 8012bac: 3770 adds r7, #112 @ 0x70
  43730. 8012bae: 46bd mov sp, r7
  43731. 8012bb0: bd80 pop {r7, pc}
  43732. 8012bb2: bf00 nop
  43733. 8012bb4: 58000c00 .word 0x58000c00
  43734. 08012bb8 <UART_RxISR_8BIT_FIFOEN>:
  43735. * interruptions have been enabled by HAL_UART_Receive_IT()
  43736. * @param huart UART handle.
  43737. * @retval None
  43738. */
  43739. static void UART_RxISR_8BIT_FIFOEN(UART_HandleTypeDef *huart)
  43740. {
  43741. 8012bb8: b580 push {r7, lr}
  43742. 8012bba: b0ac sub sp, #176 @ 0xb0
  43743. 8012bbc: af00 add r7, sp, #0
  43744. 8012bbe: 6078 str r0, [r7, #4]
  43745. uint16_t uhMask = huart->Mask;
  43746. 8012bc0: 687b ldr r3, [r7, #4]
  43747. 8012bc2: f8b3 3060 ldrh.w r3, [r3, #96] @ 0x60
  43748. 8012bc6: f8a7 30aa strh.w r3, [r7, #170] @ 0xaa
  43749. uint16_t uhdata;
  43750. uint16_t nb_rx_data;
  43751. uint16_t rxdatacount;
  43752. uint32_t isrflags = READ_REG(huart->Instance->ISR);
  43753. 8012bca: 687b ldr r3, [r7, #4]
  43754. 8012bcc: 681b ldr r3, [r3, #0]
  43755. 8012bce: 69db ldr r3, [r3, #28]
  43756. 8012bd0: f8c7 30ac str.w r3, [r7, #172] @ 0xac
  43757. uint32_t cr1its = READ_REG(huart->Instance->CR1);
  43758. 8012bd4: 687b ldr r3, [r7, #4]
  43759. 8012bd6: 681b ldr r3, [r3, #0]
  43760. 8012bd8: 681b ldr r3, [r3, #0]
  43761. 8012bda: f8c7 30a4 str.w r3, [r7, #164] @ 0xa4
  43762. uint32_t cr3its = READ_REG(huart->Instance->CR3);
  43763. 8012bde: 687b ldr r3, [r7, #4]
  43764. 8012be0: 681b ldr r3, [r3, #0]
  43765. 8012be2: 689b ldr r3, [r3, #8]
  43766. 8012be4: f8c7 30a0 str.w r3, [r7, #160] @ 0xa0
  43767. /* Check that a Rx process is ongoing */
  43768. if (huart->RxState == HAL_UART_STATE_BUSY_RX)
  43769. 8012be8: 687b ldr r3, [r7, #4]
  43770. 8012bea: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c
  43771. 8012bee: 2b22 cmp r3, #34 @ 0x22
  43772. 8012bf0: f040 8180 bne.w 8012ef4 <UART_RxISR_8BIT_FIFOEN+0x33c>
  43773. {
  43774. nb_rx_data = huart->NbRxDataToProcess;
  43775. 8012bf4: 687b ldr r3, [r7, #4]
  43776. 8012bf6: f8b3 3068 ldrh.w r3, [r3, #104] @ 0x68
  43777. 8012bfa: f8a7 309e strh.w r3, [r7, #158] @ 0x9e
  43778. while ((nb_rx_data > 0U) && ((isrflags & USART_ISR_RXNE_RXFNE) != 0U))
  43779. 8012bfe: e123 b.n 8012e48 <UART_RxISR_8BIT_FIFOEN+0x290>
  43780. {
  43781. uhdata = (uint16_t) READ_REG(huart->Instance->RDR);
  43782. 8012c00: 687b ldr r3, [r7, #4]
  43783. 8012c02: 681b ldr r3, [r3, #0]
  43784. 8012c04: 6a5b ldr r3, [r3, #36] @ 0x24
  43785. 8012c06: f8a7 309c strh.w r3, [r7, #156] @ 0x9c
  43786. *huart->pRxBuffPtr = (uint8_t)(uhdata & (uint8_t)uhMask);
  43787. 8012c0a: f8b7 309c ldrh.w r3, [r7, #156] @ 0x9c
  43788. 8012c0e: b2d9 uxtb r1, r3
  43789. 8012c10: f8b7 30aa ldrh.w r3, [r7, #170] @ 0xaa
  43790. 8012c14: b2da uxtb r2, r3
  43791. 8012c16: 687b ldr r3, [r7, #4]
  43792. 8012c18: 6d9b ldr r3, [r3, #88] @ 0x58
  43793. 8012c1a: 400a ands r2, r1
  43794. 8012c1c: b2d2 uxtb r2, r2
  43795. 8012c1e: 701a strb r2, [r3, #0]
  43796. huart->pRxBuffPtr++;
  43797. 8012c20: 687b ldr r3, [r7, #4]
  43798. 8012c22: 6d9b ldr r3, [r3, #88] @ 0x58
  43799. 8012c24: 1c5a adds r2, r3, #1
  43800. 8012c26: 687b ldr r3, [r7, #4]
  43801. 8012c28: 659a str r2, [r3, #88] @ 0x58
  43802. huart->RxXferCount--;
  43803. 8012c2a: 687b ldr r3, [r7, #4]
  43804. 8012c2c: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  43805. 8012c30: b29b uxth r3, r3
  43806. 8012c32: 3b01 subs r3, #1
  43807. 8012c34: b29a uxth r2, r3
  43808. 8012c36: 687b ldr r3, [r7, #4]
  43809. 8012c38: f8a3 205e strh.w r2, [r3, #94] @ 0x5e
  43810. isrflags = READ_REG(huart->Instance->ISR);
  43811. 8012c3c: 687b ldr r3, [r7, #4]
  43812. 8012c3e: 681b ldr r3, [r3, #0]
  43813. 8012c40: 69db ldr r3, [r3, #28]
  43814. 8012c42: f8c7 30ac str.w r3, [r7, #172] @ 0xac
  43815. /* If some non blocking errors occurred */
  43816. if ((isrflags & (USART_ISR_PE | USART_ISR_FE | USART_ISR_NE)) != 0U)
  43817. 8012c46: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac
  43818. 8012c4a: f003 0307 and.w r3, r3, #7
  43819. 8012c4e: 2b00 cmp r3, #0
  43820. 8012c50: d053 beq.n 8012cfa <UART_RxISR_8BIT_FIFOEN+0x142>
  43821. {
  43822. /* UART parity error interrupt occurred -------------------------------------*/
  43823. if (((isrflags & USART_ISR_PE) != 0U) && ((cr1its & USART_CR1_PEIE) != 0U))
  43824. 8012c52: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac
  43825. 8012c56: f003 0301 and.w r3, r3, #1
  43826. 8012c5a: 2b00 cmp r3, #0
  43827. 8012c5c: d011 beq.n 8012c82 <UART_RxISR_8BIT_FIFOEN+0xca>
  43828. 8012c5e: f8d7 30a4 ldr.w r3, [r7, #164] @ 0xa4
  43829. 8012c62: f403 7380 and.w r3, r3, #256 @ 0x100
  43830. 8012c66: 2b00 cmp r3, #0
  43831. 8012c68: d00b beq.n 8012c82 <UART_RxISR_8BIT_FIFOEN+0xca>
  43832. {
  43833. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_PEF);
  43834. 8012c6a: 687b ldr r3, [r7, #4]
  43835. 8012c6c: 681b ldr r3, [r3, #0]
  43836. 8012c6e: 2201 movs r2, #1
  43837. 8012c70: 621a str r2, [r3, #32]
  43838. huart->ErrorCode |= HAL_UART_ERROR_PE;
  43839. 8012c72: 687b ldr r3, [r7, #4]
  43840. 8012c74: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  43841. 8012c78: f043 0201 orr.w r2, r3, #1
  43842. 8012c7c: 687b ldr r3, [r7, #4]
  43843. 8012c7e: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  43844. }
  43845. /* UART frame error interrupt occurred --------------------------------------*/
  43846. if (((isrflags & USART_ISR_FE) != 0U) && ((cr3its & USART_CR3_EIE) != 0U))
  43847. 8012c82: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac
  43848. 8012c86: f003 0302 and.w r3, r3, #2
  43849. 8012c8a: 2b00 cmp r3, #0
  43850. 8012c8c: d011 beq.n 8012cb2 <UART_RxISR_8BIT_FIFOEN+0xfa>
  43851. 8012c8e: f8d7 30a0 ldr.w r3, [r7, #160] @ 0xa0
  43852. 8012c92: f003 0301 and.w r3, r3, #1
  43853. 8012c96: 2b00 cmp r3, #0
  43854. 8012c98: d00b beq.n 8012cb2 <UART_RxISR_8BIT_FIFOEN+0xfa>
  43855. {
  43856. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_FEF);
  43857. 8012c9a: 687b ldr r3, [r7, #4]
  43858. 8012c9c: 681b ldr r3, [r3, #0]
  43859. 8012c9e: 2202 movs r2, #2
  43860. 8012ca0: 621a str r2, [r3, #32]
  43861. huart->ErrorCode |= HAL_UART_ERROR_FE;
  43862. 8012ca2: 687b ldr r3, [r7, #4]
  43863. 8012ca4: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  43864. 8012ca8: f043 0204 orr.w r2, r3, #4
  43865. 8012cac: 687b ldr r3, [r7, #4]
  43866. 8012cae: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  43867. }
  43868. /* UART noise error interrupt occurred --------------------------------------*/
  43869. if (((isrflags & USART_ISR_NE) != 0U) && ((cr3its & USART_CR3_EIE) != 0U))
  43870. 8012cb2: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac
  43871. 8012cb6: f003 0304 and.w r3, r3, #4
  43872. 8012cba: 2b00 cmp r3, #0
  43873. 8012cbc: d011 beq.n 8012ce2 <UART_RxISR_8BIT_FIFOEN+0x12a>
  43874. 8012cbe: f8d7 30a0 ldr.w r3, [r7, #160] @ 0xa0
  43875. 8012cc2: f003 0301 and.w r3, r3, #1
  43876. 8012cc6: 2b00 cmp r3, #0
  43877. 8012cc8: d00b beq.n 8012ce2 <UART_RxISR_8BIT_FIFOEN+0x12a>
  43878. {
  43879. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_NEF);
  43880. 8012cca: 687b ldr r3, [r7, #4]
  43881. 8012ccc: 681b ldr r3, [r3, #0]
  43882. 8012cce: 2204 movs r2, #4
  43883. 8012cd0: 621a str r2, [r3, #32]
  43884. huart->ErrorCode |= HAL_UART_ERROR_NE;
  43885. 8012cd2: 687b ldr r3, [r7, #4]
  43886. 8012cd4: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  43887. 8012cd8: f043 0202 orr.w r2, r3, #2
  43888. 8012cdc: 687b ldr r3, [r7, #4]
  43889. 8012cde: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  43890. }
  43891. /* Call UART Error Call back function if need be ----------------------------*/
  43892. if (huart->ErrorCode != HAL_UART_ERROR_NONE)
  43893. 8012ce2: 687b ldr r3, [r7, #4]
  43894. 8012ce4: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  43895. 8012ce8: 2b00 cmp r3, #0
  43896. 8012cea: d006 beq.n 8012cfa <UART_RxISR_8BIT_FIFOEN+0x142>
  43897. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  43898. /*Call registered error callback*/
  43899. huart->ErrorCallback(huart);
  43900. #else
  43901. /*Call legacy weak error callback*/
  43902. HAL_UART_ErrorCallback(huart);
  43903. 8012cec: 6878 ldr r0, [r7, #4]
  43904. 8012cee: f7fe fb13 bl 8011318 <HAL_UART_ErrorCallback>
  43905. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  43906. huart->ErrorCode = HAL_UART_ERROR_NONE;
  43907. 8012cf2: 687b ldr r3, [r7, #4]
  43908. 8012cf4: 2200 movs r2, #0
  43909. 8012cf6: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  43910. }
  43911. }
  43912. if (huart->RxXferCount == 0U)
  43913. 8012cfa: 687b ldr r3, [r7, #4]
  43914. 8012cfc: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  43915. 8012d00: b29b uxth r3, r3
  43916. 8012d02: 2b00 cmp r3, #0
  43917. 8012d04: f040 80a0 bne.w 8012e48 <UART_RxISR_8BIT_FIFOEN+0x290>
  43918. {
  43919. /* Disable the UART Parity Error Interrupt and RXFT interrupt*/
  43920. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_PEIE);
  43921. 8012d08: 687b ldr r3, [r7, #4]
  43922. 8012d0a: 681b ldr r3, [r3, #0]
  43923. 8012d0c: 673b str r3, [r7, #112] @ 0x70
  43924. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  43925. 8012d0e: 6f3b ldr r3, [r7, #112] @ 0x70
  43926. 8012d10: e853 3f00 ldrex r3, [r3]
  43927. 8012d14: 66fb str r3, [r7, #108] @ 0x6c
  43928. return(result);
  43929. 8012d16: 6efb ldr r3, [r7, #108] @ 0x6c
  43930. 8012d18: f423 7380 bic.w r3, r3, #256 @ 0x100
  43931. 8012d1c: f8c7 3098 str.w r3, [r7, #152] @ 0x98
  43932. 8012d20: 687b ldr r3, [r7, #4]
  43933. 8012d22: 681b ldr r3, [r3, #0]
  43934. 8012d24: 461a mov r2, r3
  43935. 8012d26: f8d7 3098 ldr.w r3, [r7, #152] @ 0x98
  43936. 8012d2a: 67fb str r3, [r7, #124] @ 0x7c
  43937. 8012d2c: 67ba str r2, [r7, #120] @ 0x78
  43938. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  43939. 8012d2e: 6fb9 ldr r1, [r7, #120] @ 0x78
  43940. 8012d30: 6ffa ldr r2, [r7, #124] @ 0x7c
  43941. 8012d32: e841 2300 strex r3, r2, [r1]
  43942. 8012d36: 677b str r3, [r7, #116] @ 0x74
  43943. return(result);
  43944. 8012d38: 6f7b ldr r3, [r7, #116] @ 0x74
  43945. 8012d3a: 2b00 cmp r3, #0
  43946. 8012d3c: d1e4 bne.n 8012d08 <UART_RxISR_8BIT_FIFOEN+0x150>
  43947. /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error)
  43948. and RX FIFO Threshold interrupt */
  43949. ATOMIC_CLEAR_BIT(huart->Instance->CR3, (USART_CR3_EIE | USART_CR3_RXFTIE));
  43950. 8012d3e: 687b ldr r3, [r7, #4]
  43951. 8012d40: 681b ldr r3, [r3, #0]
  43952. 8012d42: 3308 adds r3, #8
  43953. 8012d44: 65fb str r3, [r7, #92] @ 0x5c
  43954. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  43955. 8012d46: 6dfb ldr r3, [r7, #92] @ 0x5c
  43956. 8012d48: e853 3f00 ldrex r3, [r3]
  43957. 8012d4c: 65bb str r3, [r7, #88] @ 0x58
  43958. return(result);
  43959. 8012d4e: 6dba ldr r2, [r7, #88] @ 0x58
  43960. 8012d50: 4b6e ldr r3, [pc, #440] @ (8012f0c <UART_RxISR_8BIT_FIFOEN+0x354>)
  43961. 8012d52: 4013 ands r3, r2
  43962. 8012d54: f8c7 3094 str.w r3, [r7, #148] @ 0x94
  43963. 8012d58: 687b ldr r3, [r7, #4]
  43964. 8012d5a: 681b ldr r3, [r3, #0]
  43965. 8012d5c: 3308 adds r3, #8
  43966. 8012d5e: f8d7 2094 ldr.w r2, [r7, #148] @ 0x94
  43967. 8012d62: 66ba str r2, [r7, #104] @ 0x68
  43968. 8012d64: 667b str r3, [r7, #100] @ 0x64
  43969. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  43970. 8012d66: 6e79 ldr r1, [r7, #100] @ 0x64
  43971. 8012d68: 6eba ldr r2, [r7, #104] @ 0x68
  43972. 8012d6a: e841 2300 strex r3, r2, [r1]
  43973. 8012d6e: 663b str r3, [r7, #96] @ 0x60
  43974. return(result);
  43975. 8012d70: 6e3b ldr r3, [r7, #96] @ 0x60
  43976. 8012d72: 2b00 cmp r3, #0
  43977. 8012d74: d1e3 bne.n 8012d3e <UART_RxISR_8BIT_FIFOEN+0x186>
  43978. /* Rx process is completed, restore huart->RxState to Ready */
  43979. huart->RxState = HAL_UART_STATE_READY;
  43980. 8012d76: 687b ldr r3, [r7, #4]
  43981. 8012d78: 2220 movs r2, #32
  43982. 8012d7a: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  43983. /* Clear RxISR function pointer */
  43984. huart->RxISR = NULL;
  43985. 8012d7e: 687b ldr r3, [r7, #4]
  43986. 8012d80: 2200 movs r2, #0
  43987. 8012d82: 675a str r2, [r3, #116] @ 0x74
  43988. /* Initialize type of RxEvent to Transfer Complete */
  43989. huart->RxEventType = HAL_UART_RXEVENT_TC;
  43990. 8012d84: 687b ldr r3, [r7, #4]
  43991. 8012d86: 2200 movs r2, #0
  43992. 8012d88: 671a str r2, [r3, #112] @ 0x70
  43993. if (!(IS_LPUART_INSTANCE(huart->Instance)))
  43994. 8012d8a: 687b ldr r3, [r7, #4]
  43995. 8012d8c: 681b ldr r3, [r3, #0]
  43996. 8012d8e: 4a60 ldr r2, [pc, #384] @ (8012f10 <UART_RxISR_8BIT_FIFOEN+0x358>)
  43997. 8012d90: 4293 cmp r3, r2
  43998. 8012d92: d021 beq.n 8012dd8 <UART_RxISR_8BIT_FIFOEN+0x220>
  43999. {
  44000. /* Check that USART RTOEN bit is set */
  44001. if (READ_BIT(huart->Instance->CR2, USART_CR2_RTOEN) != 0U)
  44002. 8012d94: 687b ldr r3, [r7, #4]
  44003. 8012d96: 681b ldr r3, [r3, #0]
  44004. 8012d98: 685b ldr r3, [r3, #4]
  44005. 8012d9a: f403 0300 and.w r3, r3, #8388608 @ 0x800000
  44006. 8012d9e: 2b00 cmp r3, #0
  44007. 8012da0: d01a beq.n 8012dd8 <UART_RxISR_8BIT_FIFOEN+0x220>
  44008. {
  44009. /* Enable the UART Receiver Timeout Interrupt */
  44010. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_RTOIE);
  44011. 8012da2: 687b ldr r3, [r7, #4]
  44012. 8012da4: 681b ldr r3, [r3, #0]
  44013. 8012da6: 64bb str r3, [r7, #72] @ 0x48
  44014. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  44015. 8012da8: 6cbb ldr r3, [r7, #72] @ 0x48
  44016. 8012daa: e853 3f00 ldrex r3, [r3]
  44017. 8012dae: 647b str r3, [r7, #68] @ 0x44
  44018. return(result);
  44019. 8012db0: 6c7b ldr r3, [r7, #68] @ 0x44
  44020. 8012db2: f023 6380 bic.w r3, r3, #67108864 @ 0x4000000
  44021. 8012db6: f8c7 3090 str.w r3, [r7, #144] @ 0x90
  44022. 8012dba: 687b ldr r3, [r7, #4]
  44023. 8012dbc: 681b ldr r3, [r3, #0]
  44024. 8012dbe: 461a mov r2, r3
  44025. 8012dc0: f8d7 3090 ldr.w r3, [r7, #144] @ 0x90
  44026. 8012dc4: 657b str r3, [r7, #84] @ 0x54
  44027. 8012dc6: 653a str r2, [r7, #80] @ 0x50
  44028. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  44029. 8012dc8: 6d39 ldr r1, [r7, #80] @ 0x50
  44030. 8012dca: 6d7a ldr r2, [r7, #84] @ 0x54
  44031. 8012dcc: e841 2300 strex r3, r2, [r1]
  44032. 8012dd0: 64fb str r3, [r7, #76] @ 0x4c
  44033. return(result);
  44034. 8012dd2: 6cfb ldr r3, [r7, #76] @ 0x4c
  44035. 8012dd4: 2b00 cmp r3, #0
  44036. 8012dd6: d1e4 bne.n 8012da2 <UART_RxISR_8BIT_FIFOEN+0x1ea>
  44037. }
  44038. }
  44039. /* Check current reception Mode :
  44040. If Reception till IDLE event has been selected : */
  44041. if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
  44042. 8012dd8: 687b ldr r3, [r7, #4]
  44043. 8012dda: 6edb ldr r3, [r3, #108] @ 0x6c
  44044. 8012ddc: 2b01 cmp r3, #1
  44045. 8012dde: d130 bne.n 8012e42 <UART_RxISR_8BIT_FIFOEN+0x28a>
  44046. {
  44047. /* Set reception type to Standard */
  44048. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  44049. 8012de0: 687b ldr r3, [r7, #4]
  44050. 8012de2: 2200 movs r2, #0
  44051. 8012de4: 66da str r2, [r3, #108] @ 0x6c
  44052. /* Disable IDLE interrupt */
  44053. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  44054. 8012de6: 687b ldr r3, [r7, #4]
  44055. 8012de8: 681b ldr r3, [r3, #0]
  44056. 8012dea: 637b str r3, [r7, #52] @ 0x34
  44057. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  44058. 8012dec: 6b7b ldr r3, [r7, #52] @ 0x34
  44059. 8012dee: e853 3f00 ldrex r3, [r3]
  44060. 8012df2: 633b str r3, [r7, #48] @ 0x30
  44061. return(result);
  44062. 8012df4: 6b3b ldr r3, [r7, #48] @ 0x30
  44063. 8012df6: f023 0310 bic.w r3, r3, #16
  44064. 8012dfa: f8c7 308c str.w r3, [r7, #140] @ 0x8c
  44065. 8012dfe: 687b ldr r3, [r7, #4]
  44066. 8012e00: 681b ldr r3, [r3, #0]
  44067. 8012e02: 461a mov r2, r3
  44068. 8012e04: f8d7 308c ldr.w r3, [r7, #140] @ 0x8c
  44069. 8012e08: 643b str r3, [r7, #64] @ 0x40
  44070. 8012e0a: 63fa str r2, [r7, #60] @ 0x3c
  44071. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  44072. 8012e0c: 6bf9 ldr r1, [r7, #60] @ 0x3c
  44073. 8012e0e: 6c3a ldr r2, [r7, #64] @ 0x40
  44074. 8012e10: e841 2300 strex r3, r2, [r1]
  44075. 8012e14: 63bb str r3, [r7, #56] @ 0x38
  44076. return(result);
  44077. 8012e16: 6bbb ldr r3, [r7, #56] @ 0x38
  44078. 8012e18: 2b00 cmp r3, #0
  44079. 8012e1a: d1e4 bne.n 8012de6 <UART_RxISR_8BIT_FIFOEN+0x22e>
  44080. if (__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE) == SET)
  44081. 8012e1c: 687b ldr r3, [r7, #4]
  44082. 8012e1e: 681b ldr r3, [r3, #0]
  44083. 8012e20: 69db ldr r3, [r3, #28]
  44084. 8012e22: f003 0310 and.w r3, r3, #16
  44085. 8012e26: 2b10 cmp r3, #16
  44086. 8012e28: d103 bne.n 8012e32 <UART_RxISR_8BIT_FIFOEN+0x27a>
  44087. {
  44088. /* Clear IDLE Flag */
  44089. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_IDLEF);
  44090. 8012e2a: 687b ldr r3, [r7, #4]
  44091. 8012e2c: 681b ldr r3, [r3, #0]
  44092. 8012e2e: 2210 movs r2, #16
  44093. 8012e30: 621a str r2, [r3, #32]
  44094. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  44095. /*Call registered Rx Event callback*/
  44096. huart->RxEventCallback(huart, huart->RxXferSize);
  44097. #else
  44098. /*Call legacy weak Rx Event callback*/
  44099. HAL_UARTEx_RxEventCallback(huart, huart->RxXferSize);
  44100. 8012e32: 687b ldr r3, [r7, #4]
  44101. 8012e34: f8b3 305c ldrh.w r3, [r3, #92] @ 0x5c
  44102. 8012e38: 4619 mov r1, r3
  44103. 8012e3a: 6878 ldr r0, [r7, #4]
  44104. 8012e3c: f7f1 fa3a bl 80042b4 <HAL_UARTEx_RxEventCallback>
  44105. 8012e40: e002 b.n 8012e48 <UART_RxISR_8BIT_FIFOEN+0x290>
  44106. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  44107. /*Call registered Rx complete callback*/
  44108. huart->RxCpltCallback(huart);
  44109. #else
  44110. /*Call legacy weak Rx complete callback*/
  44111. HAL_UART_RxCpltCallback(huart);
  44112. 8012e42: 6878 ldr r0, [r7, #4]
  44113. 8012e44: f7f1 fa2c bl 80042a0 <HAL_UART_RxCpltCallback>
  44114. while ((nb_rx_data > 0U) && ((isrflags & USART_ISR_RXNE_RXFNE) != 0U))
  44115. 8012e48: f8b7 309e ldrh.w r3, [r7, #158] @ 0x9e
  44116. 8012e4c: 2b00 cmp r3, #0
  44117. 8012e4e: d006 beq.n 8012e5e <UART_RxISR_8BIT_FIFOEN+0x2a6>
  44118. 8012e50: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac
  44119. 8012e54: f003 0320 and.w r3, r3, #32
  44120. 8012e58: 2b00 cmp r3, #0
  44121. 8012e5a: f47f aed1 bne.w 8012c00 <UART_RxISR_8BIT_FIFOEN+0x48>
  44122. /* When remaining number of bytes to receive is less than the RX FIFO
  44123. threshold, next incoming frames are processed as if FIFO mode was
  44124. disabled (i.e. one interrupt per received frame).
  44125. */
  44126. rxdatacount = huart->RxXferCount;
  44127. 8012e5e: 687b ldr r3, [r7, #4]
  44128. 8012e60: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  44129. 8012e64: f8a7 308a strh.w r3, [r7, #138] @ 0x8a
  44130. if ((rxdatacount != 0U) && (rxdatacount < huart->NbRxDataToProcess))
  44131. 8012e68: f8b7 308a ldrh.w r3, [r7, #138] @ 0x8a
  44132. 8012e6c: 2b00 cmp r3, #0
  44133. 8012e6e: d049 beq.n 8012f04 <UART_RxISR_8BIT_FIFOEN+0x34c>
  44134. 8012e70: 687b ldr r3, [r7, #4]
  44135. 8012e72: f8b3 3068 ldrh.w r3, [r3, #104] @ 0x68
  44136. 8012e76: f8b7 208a ldrh.w r2, [r7, #138] @ 0x8a
  44137. 8012e7a: 429a cmp r2, r3
  44138. 8012e7c: d242 bcs.n 8012f04 <UART_RxISR_8BIT_FIFOEN+0x34c>
  44139. {
  44140. /* Disable the UART RXFT interrupt*/
  44141. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_RXFTIE);
  44142. 8012e7e: 687b ldr r3, [r7, #4]
  44143. 8012e80: 681b ldr r3, [r3, #0]
  44144. 8012e82: 3308 adds r3, #8
  44145. 8012e84: 623b str r3, [r7, #32]
  44146. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  44147. 8012e86: 6a3b ldr r3, [r7, #32]
  44148. 8012e88: e853 3f00 ldrex r3, [r3]
  44149. 8012e8c: 61fb str r3, [r7, #28]
  44150. return(result);
  44151. 8012e8e: 69fb ldr r3, [r7, #28]
  44152. 8012e90: f023 5380 bic.w r3, r3, #268435456 @ 0x10000000
  44153. 8012e94: f8c7 3084 str.w r3, [r7, #132] @ 0x84
  44154. 8012e98: 687b ldr r3, [r7, #4]
  44155. 8012e9a: 681b ldr r3, [r3, #0]
  44156. 8012e9c: 3308 adds r3, #8
  44157. 8012e9e: f8d7 2084 ldr.w r2, [r7, #132] @ 0x84
  44158. 8012ea2: 62fa str r2, [r7, #44] @ 0x2c
  44159. 8012ea4: 62bb str r3, [r7, #40] @ 0x28
  44160. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  44161. 8012ea6: 6ab9 ldr r1, [r7, #40] @ 0x28
  44162. 8012ea8: 6afa ldr r2, [r7, #44] @ 0x2c
  44163. 8012eaa: e841 2300 strex r3, r2, [r1]
  44164. 8012eae: 627b str r3, [r7, #36] @ 0x24
  44165. return(result);
  44166. 8012eb0: 6a7b ldr r3, [r7, #36] @ 0x24
  44167. 8012eb2: 2b00 cmp r3, #0
  44168. 8012eb4: d1e3 bne.n 8012e7e <UART_RxISR_8BIT_FIFOEN+0x2c6>
  44169. /* Update the RxISR function pointer */
  44170. huart->RxISR = UART_RxISR_8BIT;
  44171. 8012eb6: 687b ldr r3, [r7, #4]
  44172. 8012eb8: 4a16 ldr r2, [pc, #88] @ (8012f14 <UART_RxISR_8BIT_FIFOEN+0x35c>)
  44173. 8012eba: 675a str r2, [r3, #116] @ 0x74
  44174. /* Enable the UART Data Register Not Empty interrupt */
  44175. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_RXNEIE_RXFNEIE);
  44176. 8012ebc: 687b ldr r3, [r7, #4]
  44177. 8012ebe: 681b ldr r3, [r3, #0]
  44178. 8012ec0: 60fb str r3, [r7, #12]
  44179. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  44180. 8012ec2: 68fb ldr r3, [r7, #12]
  44181. 8012ec4: e853 3f00 ldrex r3, [r3]
  44182. 8012ec8: 60bb str r3, [r7, #8]
  44183. return(result);
  44184. 8012eca: 68bb ldr r3, [r7, #8]
  44185. 8012ecc: f043 0320 orr.w r3, r3, #32
  44186. 8012ed0: f8c7 3080 str.w r3, [r7, #128] @ 0x80
  44187. 8012ed4: 687b ldr r3, [r7, #4]
  44188. 8012ed6: 681b ldr r3, [r3, #0]
  44189. 8012ed8: 461a mov r2, r3
  44190. 8012eda: f8d7 3080 ldr.w r3, [r7, #128] @ 0x80
  44191. 8012ede: 61bb str r3, [r7, #24]
  44192. 8012ee0: 617a str r2, [r7, #20]
  44193. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  44194. 8012ee2: 6979 ldr r1, [r7, #20]
  44195. 8012ee4: 69ba ldr r2, [r7, #24]
  44196. 8012ee6: e841 2300 strex r3, r2, [r1]
  44197. 8012eea: 613b str r3, [r7, #16]
  44198. return(result);
  44199. 8012eec: 693b ldr r3, [r7, #16]
  44200. 8012eee: 2b00 cmp r3, #0
  44201. 8012ef0: d1e4 bne.n 8012ebc <UART_RxISR_8BIT_FIFOEN+0x304>
  44202. else
  44203. {
  44204. /* Clear RXNE interrupt flag */
  44205. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  44206. }
  44207. }
  44208. 8012ef2: e007 b.n 8012f04 <UART_RxISR_8BIT_FIFOEN+0x34c>
  44209. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  44210. 8012ef4: 687b ldr r3, [r7, #4]
  44211. 8012ef6: 681b ldr r3, [r3, #0]
  44212. 8012ef8: 699a ldr r2, [r3, #24]
  44213. 8012efa: 687b ldr r3, [r7, #4]
  44214. 8012efc: 681b ldr r3, [r3, #0]
  44215. 8012efe: f042 0208 orr.w r2, r2, #8
  44216. 8012f02: 619a str r2, [r3, #24]
  44217. }
  44218. 8012f04: bf00 nop
  44219. 8012f06: 37b0 adds r7, #176 @ 0xb0
  44220. 8012f08: 46bd mov sp, r7
  44221. 8012f0a: bd80 pop {r7, pc}
  44222. 8012f0c: effffffe .word 0xeffffffe
  44223. 8012f10: 58000c00 .word 0x58000c00
  44224. 8012f14: 08012849 .word 0x08012849
  44225. 08012f18 <UART_RxISR_16BIT_FIFOEN>:
  44226. * interruptions have been enabled by HAL_UART_Receive_IT()
  44227. * @param huart UART handle.
  44228. * @retval None
  44229. */
  44230. static void UART_RxISR_16BIT_FIFOEN(UART_HandleTypeDef *huart)
  44231. {
  44232. 8012f18: b580 push {r7, lr}
  44233. 8012f1a: b0ae sub sp, #184 @ 0xb8
  44234. 8012f1c: af00 add r7, sp, #0
  44235. 8012f1e: 6078 str r0, [r7, #4]
  44236. uint16_t *tmp;
  44237. uint16_t uhMask = huart->Mask;
  44238. 8012f20: 687b ldr r3, [r7, #4]
  44239. 8012f22: f8b3 3060 ldrh.w r3, [r3, #96] @ 0x60
  44240. 8012f26: f8a7 30b2 strh.w r3, [r7, #178] @ 0xb2
  44241. uint16_t uhdata;
  44242. uint16_t nb_rx_data;
  44243. uint16_t rxdatacount;
  44244. uint32_t isrflags = READ_REG(huart->Instance->ISR);
  44245. 8012f2a: 687b ldr r3, [r7, #4]
  44246. 8012f2c: 681b ldr r3, [r3, #0]
  44247. 8012f2e: 69db ldr r3, [r3, #28]
  44248. 8012f30: f8c7 30b4 str.w r3, [r7, #180] @ 0xb4
  44249. uint32_t cr1its = READ_REG(huart->Instance->CR1);
  44250. 8012f34: 687b ldr r3, [r7, #4]
  44251. 8012f36: 681b ldr r3, [r3, #0]
  44252. 8012f38: 681b ldr r3, [r3, #0]
  44253. 8012f3a: f8c7 30ac str.w r3, [r7, #172] @ 0xac
  44254. uint32_t cr3its = READ_REG(huart->Instance->CR3);
  44255. 8012f3e: 687b ldr r3, [r7, #4]
  44256. 8012f40: 681b ldr r3, [r3, #0]
  44257. 8012f42: 689b ldr r3, [r3, #8]
  44258. 8012f44: f8c7 30a8 str.w r3, [r7, #168] @ 0xa8
  44259. /* Check that a Rx process is ongoing */
  44260. if (huart->RxState == HAL_UART_STATE_BUSY_RX)
  44261. 8012f48: 687b ldr r3, [r7, #4]
  44262. 8012f4a: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c
  44263. 8012f4e: 2b22 cmp r3, #34 @ 0x22
  44264. 8012f50: f040 8184 bne.w 801325c <UART_RxISR_16BIT_FIFOEN+0x344>
  44265. {
  44266. nb_rx_data = huart->NbRxDataToProcess;
  44267. 8012f54: 687b ldr r3, [r7, #4]
  44268. 8012f56: f8b3 3068 ldrh.w r3, [r3, #104] @ 0x68
  44269. 8012f5a: f8a7 30a6 strh.w r3, [r7, #166] @ 0xa6
  44270. while ((nb_rx_data > 0U) && ((isrflags & USART_ISR_RXNE_RXFNE) != 0U))
  44271. 8012f5e: e127 b.n 80131b0 <UART_RxISR_16BIT_FIFOEN+0x298>
  44272. {
  44273. uhdata = (uint16_t) READ_REG(huart->Instance->RDR);
  44274. 8012f60: 687b ldr r3, [r7, #4]
  44275. 8012f62: 681b ldr r3, [r3, #0]
  44276. 8012f64: 6a5b ldr r3, [r3, #36] @ 0x24
  44277. 8012f66: f8a7 30a4 strh.w r3, [r7, #164] @ 0xa4
  44278. tmp = (uint16_t *) huart->pRxBuffPtr ;
  44279. 8012f6a: 687b ldr r3, [r7, #4]
  44280. 8012f6c: 6d9b ldr r3, [r3, #88] @ 0x58
  44281. 8012f6e: f8c7 30a0 str.w r3, [r7, #160] @ 0xa0
  44282. *tmp = (uint16_t)(uhdata & uhMask);
  44283. 8012f72: f8b7 20a4 ldrh.w r2, [r7, #164] @ 0xa4
  44284. 8012f76: f8b7 30b2 ldrh.w r3, [r7, #178] @ 0xb2
  44285. 8012f7a: 4013 ands r3, r2
  44286. 8012f7c: b29a uxth r2, r3
  44287. 8012f7e: f8d7 30a0 ldr.w r3, [r7, #160] @ 0xa0
  44288. 8012f82: 801a strh r2, [r3, #0]
  44289. huart->pRxBuffPtr += 2U;
  44290. 8012f84: 687b ldr r3, [r7, #4]
  44291. 8012f86: 6d9b ldr r3, [r3, #88] @ 0x58
  44292. 8012f88: 1c9a adds r2, r3, #2
  44293. 8012f8a: 687b ldr r3, [r7, #4]
  44294. 8012f8c: 659a str r2, [r3, #88] @ 0x58
  44295. huart->RxXferCount--;
  44296. 8012f8e: 687b ldr r3, [r7, #4]
  44297. 8012f90: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  44298. 8012f94: b29b uxth r3, r3
  44299. 8012f96: 3b01 subs r3, #1
  44300. 8012f98: b29a uxth r2, r3
  44301. 8012f9a: 687b ldr r3, [r7, #4]
  44302. 8012f9c: f8a3 205e strh.w r2, [r3, #94] @ 0x5e
  44303. isrflags = READ_REG(huart->Instance->ISR);
  44304. 8012fa0: 687b ldr r3, [r7, #4]
  44305. 8012fa2: 681b ldr r3, [r3, #0]
  44306. 8012fa4: 69db ldr r3, [r3, #28]
  44307. 8012fa6: f8c7 30b4 str.w r3, [r7, #180] @ 0xb4
  44308. /* If some non blocking errors occurred */
  44309. if ((isrflags & (USART_ISR_PE | USART_ISR_FE | USART_ISR_NE)) != 0U)
  44310. 8012faa: f8d7 30b4 ldr.w r3, [r7, #180] @ 0xb4
  44311. 8012fae: f003 0307 and.w r3, r3, #7
  44312. 8012fb2: 2b00 cmp r3, #0
  44313. 8012fb4: d053 beq.n 801305e <UART_RxISR_16BIT_FIFOEN+0x146>
  44314. {
  44315. /* UART parity error interrupt occurred -------------------------------------*/
  44316. if (((isrflags & USART_ISR_PE) != 0U) && ((cr1its & USART_CR1_PEIE) != 0U))
  44317. 8012fb6: f8d7 30b4 ldr.w r3, [r7, #180] @ 0xb4
  44318. 8012fba: f003 0301 and.w r3, r3, #1
  44319. 8012fbe: 2b00 cmp r3, #0
  44320. 8012fc0: d011 beq.n 8012fe6 <UART_RxISR_16BIT_FIFOEN+0xce>
  44321. 8012fc2: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac
  44322. 8012fc6: f403 7380 and.w r3, r3, #256 @ 0x100
  44323. 8012fca: 2b00 cmp r3, #0
  44324. 8012fcc: d00b beq.n 8012fe6 <UART_RxISR_16BIT_FIFOEN+0xce>
  44325. {
  44326. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_PEF);
  44327. 8012fce: 687b ldr r3, [r7, #4]
  44328. 8012fd0: 681b ldr r3, [r3, #0]
  44329. 8012fd2: 2201 movs r2, #1
  44330. 8012fd4: 621a str r2, [r3, #32]
  44331. huart->ErrorCode |= HAL_UART_ERROR_PE;
  44332. 8012fd6: 687b ldr r3, [r7, #4]
  44333. 8012fd8: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  44334. 8012fdc: f043 0201 orr.w r2, r3, #1
  44335. 8012fe0: 687b ldr r3, [r7, #4]
  44336. 8012fe2: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  44337. }
  44338. /* UART frame error interrupt occurred --------------------------------------*/
  44339. if (((isrflags & USART_ISR_FE) != 0U) && ((cr3its & USART_CR3_EIE) != 0U))
  44340. 8012fe6: f8d7 30b4 ldr.w r3, [r7, #180] @ 0xb4
  44341. 8012fea: f003 0302 and.w r3, r3, #2
  44342. 8012fee: 2b00 cmp r3, #0
  44343. 8012ff0: d011 beq.n 8013016 <UART_RxISR_16BIT_FIFOEN+0xfe>
  44344. 8012ff2: f8d7 30a8 ldr.w r3, [r7, #168] @ 0xa8
  44345. 8012ff6: f003 0301 and.w r3, r3, #1
  44346. 8012ffa: 2b00 cmp r3, #0
  44347. 8012ffc: d00b beq.n 8013016 <UART_RxISR_16BIT_FIFOEN+0xfe>
  44348. {
  44349. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_FEF);
  44350. 8012ffe: 687b ldr r3, [r7, #4]
  44351. 8013000: 681b ldr r3, [r3, #0]
  44352. 8013002: 2202 movs r2, #2
  44353. 8013004: 621a str r2, [r3, #32]
  44354. huart->ErrorCode |= HAL_UART_ERROR_FE;
  44355. 8013006: 687b ldr r3, [r7, #4]
  44356. 8013008: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  44357. 801300c: f043 0204 orr.w r2, r3, #4
  44358. 8013010: 687b ldr r3, [r7, #4]
  44359. 8013012: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  44360. }
  44361. /* UART noise error interrupt occurred --------------------------------------*/
  44362. if (((isrflags & USART_ISR_NE) != 0U) && ((cr3its & USART_CR3_EIE) != 0U))
  44363. 8013016: f8d7 30b4 ldr.w r3, [r7, #180] @ 0xb4
  44364. 801301a: f003 0304 and.w r3, r3, #4
  44365. 801301e: 2b00 cmp r3, #0
  44366. 8013020: d011 beq.n 8013046 <UART_RxISR_16BIT_FIFOEN+0x12e>
  44367. 8013022: f8d7 30a8 ldr.w r3, [r7, #168] @ 0xa8
  44368. 8013026: f003 0301 and.w r3, r3, #1
  44369. 801302a: 2b00 cmp r3, #0
  44370. 801302c: d00b beq.n 8013046 <UART_RxISR_16BIT_FIFOEN+0x12e>
  44371. {
  44372. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_NEF);
  44373. 801302e: 687b ldr r3, [r7, #4]
  44374. 8013030: 681b ldr r3, [r3, #0]
  44375. 8013032: 2204 movs r2, #4
  44376. 8013034: 621a str r2, [r3, #32]
  44377. huart->ErrorCode |= HAL_UART_ERROR_NE;
  44378. 8013036: 687b ldr r3, [r7, #4]
  44379. 8013038: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  44380. 801303c: f043 0202 orr.w r2, r3, #2
  44381. 8013040: 687b ldr r3, [r7, #4]
  44382. 8013042: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  44383. }
  44384. /* Call UART Error Call back function if need be ----------------------------*/
  44385. if (huart->ErrorCode != HAL_UART_ERROR_NONE)
  44386. 8013046: 687b ldr r3, [r7, #4]
  44387. 8013048: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  44388. 801304c: 2b00 cmp r3, #0
  44389. 801304e: d006 beq.n 801305e <UART_RxISR_16BIT_FIFOEN+0x146>
  44390. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  44391. /*Call registered error callback*/
  44392. huart->ErrorCallback(huart);
  44393. #else
  44394. /*Call legacy weak error callback*/
  44395. HAL_UART_ErrorCallback(huart);
  44396. 8013050: 6878 ldr r0, [r7, #4]
  44397. 8013052: f7fe f961 bl 8011318 <HAL_UART_ErrorCallback>
  44398. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  44399. huart->ErrorCode = HAL_UART_ERROR_NONE;
  44400. 8013056: 687b ldr r3, [r7, #4]
  44401. 8013058: 2200 movs r2, #0
  44402. 801305a: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  44403. }
  44404. }
  44405. if (huart->RxXferCount == 0U)
  44406. 801305e: 687b ldr r3, [r7, #4]
  44407. 8013060: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  44408. 8013064: b29b uxth r3, r3
  44409. 8013066: 2b00 cmp r3, #0
  44410. 8013068: f040 80a2 bne.w 80131b0 <UART_RxISR_16BIT_FIFOEN+0x298>
  44411. {
  44412. /* Disable the UART Parity Error Interrupt and RXFT interrupt*/
  44413. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_PEIE);
  44414. 801306c: 687b ldr r3, [r7, #4]
  44415. 801306e: 681b ldr r3, [r3, #0]
  44416. 8013070: 677b str r3, [r7, #116] @ 0x74
  44417. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  44418. 8013072: 6f7b ldr r3, [r7, #116] @ 0x74
  44419. 8013074: e853 3f00 ldrex r3, [r3]
  44420. 8013078: 673b str r3, [r7, #112] @ 0x70
  44421. return(result);
  44422. 801307a: 6f3b ldr r3, [r7, #112] @ 0x70
  44423. 801307c: f423 7380 bic.w r3, r3, #256 @ 0x100
  44424. 8013080: f8c7 309c str.w r3, [r7, #156] @ 0x9c
  44425. 8013084: 687b ldr r3, [r7, #4]
  44426. 8013086: 681b ldr r3, [r3, #0]
  44427. 8013088: 461a mov r2, r3
  44428. 801308a: f8d7 309c ldr.w r3, [r7, #156] @ 0x9c
  44429. 801308e: f8c7 3080 str.w r3, [r7, #128] @ 0x80
  44430. 8013092: 67fa str r2, [r7, #124] @ 0x7c
  44431. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  44432. 8013094: 6ff9 ldr r1, [r7, #124] @ 0x7c
  44433. 8013096: f8d7 2080 ldr.w r2, [r7, #128] @ 0x80
  44434. 801309a: e841 2300 strex r3, r2, [r1]
  44435. 801309e: 67bb str r3, [r7, #120] @ 0x78
  44436. return(result);
  44437. 80130a0: 6fbb ldr r3, [r7, #120] @ 0x78
  44438. 80130a2: 2b00 cmp r3, #0
  44439. 80130a4: d1e2 bne.n 801306c <UART_RxISR_16BIT_FIFOEN+0x154>
  44440. /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error)
  44441. and RX FIFO Threshold interrupt */
  44442. ATOMIC_CLEAR_BIT(huart->Instance->CR3, (USART_CR3_EIE | USART_CR3_RXFTIE));
  44443. 80130a6: 687b ldr r3, [r7, #4]
  44444. 80130a8: 681b ldr r3, [r3, #0]
  44445. 80130aa: 3308 adds r3, #8
  44446. 80130ac: 663b str r3, [r7, #96] @ 0x60
  44447. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  44448. 80130ae: 6e3b ldr r3, [r7, #96] @ 0x60
  44449. 80130b0: e853 3f00 ldrex r3, [r3]
  44450. 80130b4: 65fb str r3, [r7, #92] @ 0x5c
  44451. return(result);
  44452. 80130b6: 6dfa ldr r2, [r7, #92] @ 0x5c
  44453. 80130b8: 4b6e ldr r3, [pc, #440] @ (8013274 <UART_RxISR_16BIT_FIFOEN+0x35c>)
  44454. 80130ba: 4013 ands r3, r2
  44455. 80130bc: f8c7 3098 str.w r3, [r7, #152] @ 0x98
  44456. 80130c0: 687b ldr r3, [r7, #4]
  44457. 80130c2: 681b ldr r3, [r3, #0]
  44458. 80130c4: 3308 adds r3, #8
  44459. 80130c6: f8d7 2098 ldr.w r2, [r7, #152] @ 0x98
  44460. 80130ca: 66fa str r2, [r7, #108] @ 0x6c
  44461. 80130cc: 66bb str r3, [r7, #104] @ 0x68
  44462. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  44463. 80130ce: 6eb9 ldr r1, [r7, #104] @ 0x68
  44464. 80130d0: 6efa ldr r2, [r7, #108] @ 0x6c
  44465. 80130d2: e841 2300 strex r3, r2, [r1]
  44466. 80130d6: 667b str r3, [r7, #100] @ 0x64
  44467. return(result);
  44468. 80130d8: 6e7b ldr r3, [r7, #100] @ 0x64
  44469. 80130da: 2b00 cmp r3, #0
  44470. 80130dc: d1e3 bne.n 80130a6 <UART_RxISR_16BIT_FIFOEN+0x18e>
  44471. /* Rx process is completed, restore huart->RxState to Ready */
  44472. huart->RxState = HAL_UART_STATE_READY;
  44473. 80130de: 687b ldr r3, [r7, #4]
  44474. 80130e0: 2220 movs r2, #32
  44475. 80130e2: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  44476. /* Clear RxISR function pointer */
  44477. huart->RxISR = NULL;
  44478. 80130e6: 687b ldr r3, [r7, #4]
  44479. 80130e8: 2200 movs r2, #0
  44480. 80130ea: 675a str r2, [r3, #116] @ 0x74
  44481. /* Initialize type of RxEvent to Transfer Complete */
  44482. huart->RxEventType = HAL_UART_RXEVENT_TC;
  44483. 80130ec: 687b ldr r3, [r7, #4]
  44484. 80130ee: 2200 movs r2, #0
  44485. 80130f0: 671a str r2, [r3, #112] @ 0x70
  44486. if (!(IS_LPUART_INSTANCE(huart->Instance)))
  44487. 80130f2: 687b ldr r3, [r7, #4]
  44488. 80130f4: 681b ldr r3, [r3, #0]
  44489. 80130f6: 4a60 ldr r2, [pc, #384] @ (8013278 <UART_RxISR_16BIT_FIFOEN+0x360>)
  44490. 80130f8: 4293 cmp r3, r2
  44491. 80130fa: d021 beq.n 8013140 <UART_RxISR_16BIT_FIFOEN+0x228>
  44492. {
  44493. /* Check that USART RTOEN bit is set */
  44494. if (READ_BIT(huart->Instance->CR2, USART_CR2_RTOEN) != 0U)
  44495. 80130fc: 687b ldr r3, [r7, #4]
  44496. 80130fe: 681b ldr r3, [r3, #0]
  44497. 8013100: 685b ldr r3, [r3, #4]
  44498. 8013102: f403 0300 and.w r3, r3, #8388608 @ 0x800000
  44499. 8013106: 2b00 cmp r3, #0
  44500. 8013108: d01a beq.n 8013140 <UART_RxISR_16BIT_FIFOEN+0x228>
  44501. {
  44502. /* Enable the UART Receiver Timeout Interrupt */
  44503. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_RTOIE);
  44504. 801310a: 687b ldr r3, [r7, #4]
  44505. 801310c: 681b ldr r3, [r3, #0]
  44506. 801310e: 64fb str r3, [r7, #76] @ 0x4c
  44507. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  44508. 8013110: 6cfb ldr r3, [r7, #76] @ 0x4c
  44509. 8013112: e853 3f00 ldrex r3, [r3]
  44510. 8013116: 64bb str r3, [r7, #72] @ 0x48
  44511. return(result);
  44512. 8013118: 6cbb ldr r3, [r7, #72] @ 0x48
  44513. 801311a: f023 6380 bic.w r3, r3, #67108864 @ 0x4000000
  44514. 801311e: f8c7 3094 str.w r3, [r7, #148] @ 0x94
  44515. 8013122: 687b ldr r3, [r7, #4]
  44516. 8013124: 681b ldr r3, [r3, #0]
  44517. 8013126: 461a mov r2, r3
  44518. 8013128: f8d7 3094 ldr.w r3, [r7, #148] @ 0x94
  44519. 801312c: 65bb str r3, [r7, #88] @ 0x58
  44520. 801312e: 657a str r2, [r7, #84] @ 0x54
  44521. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  44522. 8013130: 6d79 ldr r1, [r7, #84] @ 0x54
  44523. 8013132: 6dba ldr r2, [r7, #88] @ 0x58
  44524. 8013134: e841 2300 strex r3, r2, [r1]
  44525. 8013138: 653b str r3, [r7, #80] @ 0x50
  44526. return(result);
  44527. 801313a: 6d3b ldr r3, [r7, #80] @ 0x50
  44528. 801313c: 2b00 cmp r3, #0
  44529. 801313e: d1e4 bne.n 801310a <UART_RxISR_16BIT_FIFOEN+0x1f2>
  44530. }
  44531. }
  44532. /* Check current reception Mode :
  44533. If Reception till IDLE event has been selected : */
  44534. if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
  44535. 8013140: 687b ldr r3, [r7, #4]
  44536. 8013142: 6edb ldr r3, [r3, #108] @ 0x6c
  44537. 8013144: 2b01 cmp r3, #1
  44538. 8013146: d130 bne.n 80131aa <UART_RxISR_16BIT_FIFOEN+0x292>
  44539. {
  44540. /* Set reception type to Standard */
  44541. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  44542. 8013148: 687b ldr r3, [r7, #4]
  44543. 801314a: 2200 movs r2, #0
  44544. 801314c: 66da str r2, [r3, #108] @ 0x6c
  44545. /* Disable IDLE interrupt */
  44546. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  44547. 801314e: 687b ldr r3, [r7, #4]
  44548. 8013150: 681b ldr r3, [r3, #0]
  44549. 8013152: 63bb str r3, [r7, #56] @ 0x38
  44550. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  44551. 8013154: 6bbb ldr r3, [r7, #56] @ 0x38
  44552. 8013156: e853 3f00 ldrex r3, [r3]
  44553. 801315a: 637b str r3, [r7, #52] @ 0x34
  44554. return(result);
  44555. 801315c: 6b7b ldr r3, [r7, #52] @ 0x34
  44556. 801315e: f023 0310 bic.w r3, r3, #16
  44557. 8013162: f8c7 3090 str.w r3, [r7, #144] @ 0x90
  44558. 8013166: 687b ldr r3, [r7, #4]
  44559. 8013168: 681b ldr r3, [r3, #0]
  44560. 801316a: 461a mov r2, r3
  44561. 801316c: f8d7 3090 ldr.w r3, [r7, #144] @ 0x90
  44562. 8013170: 647b str r3, [r7, #68] @ 0x44
  44563. 8013172: 643a str r2, [r7, #64] @ 0x40
  44564. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  44565. 8013174: 6c39 ldr r1, [r7, #64] @ 0x40
  44566. 8013176: 6c7a ldr r2, [r7, #68] @ 0x44
  44567. 8013178: e841 2300 strex r3, r2, [r1]
  44568. 801317c: 63fb str r3, [r7, #60] @ 0x3c
  44569. return(result);
  44570. 801317e: 6bfb ldr r3, [r7, #60] @ 0x3c
  44571. 8013180: 2b00 cmp r3, #0
  44572. 8013182: d1e4 bne.n 801314e <UART_RxISR_16BIT_FIFOEN+0x236>
  44573. if (__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE) == SET)
  44574. 8013184: 687b ldr r3, [r7, #4]
  44575. 8013186: 681b ldr r3, [r3, #0]
  44576. 8013188: 69db ldr r3, [r3, #28]
  44577. 801318a: f003 0310 and.w r3, r3, #16
  44578. 801318e: 2b10 cmp r3, #16
  44579. 8013190: d103 bne.n 801319a <UART_RxISR_16BIT_FIFOEN+0x282>
  44580. {
  44581. /* Clear IDLE Flag */
  44582. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_IDLEF);
  44583. 8013192: 687b ldr r3, [r7, #4]
  44584. 8013194: 681b ldr r3, [r3, #0]
  44585. 8013196: 2210 movs r2, #16
  44586. 8013198: 621a str r2, [r3, #32]
  44587. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  44588. /*Call registered Rx Event callback*/
  44589. huart->RxEventCallback(huart, huart->RxXferSize);
  44590. #else
  44591. /*Call legacy weak Rx Event callback*/
  44592. HAL_UARTEx_RxEventCallback(huart, huart->RxXferSize);
  44593. 801319a: 687b ldr r3, [r7, #4]
  44594. 801319c: f8b3 305c ldrh.w r3, [r3, #92] @ 0x5c
  44595. 80131a0: 4619 mov r1, r3
  44596. 80131a2: 6878 ldr r0, [r7, #4]
  44597. 80131a4: f7f1 f886 bl 80042b4 <HAL_UARTEx_RxEventCallback>
  44598. 80131a8: e002 b.n 80131b0 <UART_RxISR_16BIT_FIFOEN+0x298>
  44599. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  44600. /*Call registered Rx complete callback*/
  44601. huart->RxCpltCallback(huart);
  44602. #else
  44603. /*Call legacy weak Rx complete callback*/
  44604. HAL_UART_RxCpltCallback(huart);
  44605. 80131aa: 6878 ldr r0, [r7, #4]
  44606. 80131ac: f7f1 f878 bl 80042a0 <HAL_UART_RxCpltCallback>
  44607. while ((nb_rx_data > 0U) && ((isrflags & USART_ISR_RXNE_RXFNE) != 0U))
  44608. 80131b0: f8b7 30a6 ldrh.w r3, [r7, #166] @ 0xa6
  44609. 80131b4: 2b00 cmp r3, #0
  44610. 80131b6: d006 beq.n 80131c6 <UART_RxISR_16BIT_FIFOEN+0x2ae>
  44611. 80131b8: f8d7 30b4 ldr.w r3, [r7, #180] @ 0xb4
  44612. 80131bc: f003 0320 and.w r3, r3, #32
  44613. 80131c0: 2b00 cmp r3, #0
  44614. 80131c2: f47f aecd bne.w 8012f60 <UART_RxISR_16BIT_FIFOEN+0x48>
  44615. /* When remaining number of bytes to receive is less than the RX FIFO
  44616. threshold, next incoming frames are processed as if FIFO mode was
  44617. disabled (i.e. one interrupt per received frame).
  44618. */
  44619. rxdatacount = huart->RxXferCount;
  44620. 80131c6: 687b ldr r3, [r7, #4]
  44621. 80131c8: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  44622. 80131cc: f8a7 308e strh.w r3, [r7, #142] @ 0x8e
  44623. if ((rxdatacount != 0U) && (rxdatacount < huart->NbRxDataToProcess))
  44624. 80131d0: f8b7 308e ldrh.w r3, [r7, #142] @ 0x8e
  44625. 80131d4: 2b00 cmp r3, #0
  44626. 80131d6: d049 beq.n 801326c <UART_RxISR_16BIT_FIFOEN+0x354>
  44627. 80131d8: 687b ldr r3, [r7, #4]
  44628. 80131da: f8b3 3068 ldrh.w r3, [r3, #104] @ 0x68
  44629. 80131de: f8b7 208e ldrh.w r2, [r7, #142] @ 0x8e
  44630. 80131e2: 429a cmp r2, r3
  44631. 80131e4: d242 bcs.n 801326c <UART_RxISR_16BIT_FIFOEN+0x354>
  44632. {
  44633. /* Disable the UART RXFT interrupt*/
  44634. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_RXFTIE);
  44635. 80131e6: 687b ldr r3, [r7, #4]
  44636. 80131e8: 681b ldr r3, [r3, #0]
  44637. 80131ea: 3308 adds r3, #8
  44638. 80131ec: 627b str r3, [r7, #36] @ 0x24
  44639. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  44640. 80131ee: 6a7b ldr r3, [r7, #36] @ 0x24
  44641. 80131f0: e853 3f00 ldrex r3, [r3]
  44642. 80131f4: 623b str r3, [r7, #32]
  44643. return(result);
  44644. 80131f6: 6a3b ldr r3, [r7, #32]
  44645. 80131f8: f023 5380 bic.w r3, r3, #268435456 @ 0x10000000
  44646. 80131fc: f8c7 3088 str.w r3, [r7, #136] @ 0x88
  44647. 8013200: 687b ldr r3, [r7, #4]
  44648. 8013202: 681b ldr r3, [r3, #0]
  44649. 8013204: 3308 adds r3, #8
  44650. 8013206: f8d7 2088 ldr.w r2, [r7, #136] @ 0x88
  44651. 801320a: 633a str r2, [r7, #48] @ 0x30
  44652. 801320c: 62fb str r3, [r7, #44] @ 0x2c
  44653. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  44654. 801320e: 6af9 ldr r1, [r7, #44] @ 0x2c
  44655. 8013210: 6b3a ldr r2, [r7, #48] @ 0x30
  44656. 8013212: e841 2300 strex r3, r2, [r1]
  44657. 8013216: 62bb str r3, [r7, #40] @ 0x28
  44658. return(result);
  44659. 8013218: 6abb ldr r3, [r7, #40] @ 0x28
  44660. 801321a: 2b00 cmp r3, #0
  44661. 801321c: d1e3 bne.n 80131e6 <UART_RxISR_16BIT_FIFOEN+0x2ce>
  44662. /* Update the RxISR function pointer */
  44663. huart->RxISR = UART_RxISR_16BIT;
  44664. 801321e: 687b ldr r3, [r7, #4]
  44665. 8013220: 4a16 ldr r2, [pc, #88] @ (801327c <UART_RxISR_16BIT_FIFOEN+0x364>)
  44666. 8013222: 675a str r2, [r3, #116] @ 0x74
  44667. /* Enable the UART Data Register Not Empty interrupt */
  44668. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_RXNEIE_RXFNEIE);
  44669. 8013224: 687b ldr r3, [r7, #4]
  44670. 8013226: 681b ldr r3, [r3, #0]
  44671. 8013228: 613b str r3, [r7, #16]
  44672. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  44673. 801322a: 693b ldr r3, [r7, #16]
  44674. 801322c: e853 3f00 ldrex r3, [r3]
  44675. 8013230: 60fb str r3, [r7, #12]
  44676. return(result);
  44677. 8013232: 68fb ldr r3, [r7, #12]
  44678. 8013234: f043 0320 orr.w r3, r3, #32
  44679. 8013238: f8c7 3084 str.w r3, [r7, #132] @ 0x84
  44680. 801323c: 687b ldr r3, [r7, #4]
  44681. 801323e: 681b ldr r3, [r3, #0]
  44682. 8013240: 461a mov r2, r3
  44683. 8013242: f8d7 3084 ldr.w r3, [r7, #132] @ 0x84
  44684. 8013246: 61fb str r3, [r7, #28]
  44685. 8013248: 61ba str r2, [r7, #24]
  44686. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  44687. 801324a: 69b9 ldr r1, [r7, #24]
  44688. 801324c: 69fa ldr r2, [r7, #28]
  44689. 801324e: e841 2300 strex r3, r2, [r1]
  44690. 8013252: 617b str r3, [r7, #20]
  44691. return(result);
  44692. 8013254: 697b ldr r3, [r7, #20]
  44693. 8013256: 2b00 cmp r3, #0
  44694. 8013258: d1e4 bne.n 8013224 <UART_RxISR_16BIT_FIFOEN+0x30c>
  44695. else
  44696. {
  44697. /* Clear RXNE interrupt flag */
  44698. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  44699. }
  44700. }
  44701. 801325a: e007 b.n 801326c <UART_RxISR_16BIT_FIFOEN+0x354>
  44702. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  44703. 801325c: 687b ldr r3, [r7, #4]
  44704. 801325e: 681b ldr r3, [r3, #0]
  44705. 8013260: 699a ldr r2, [r3, #24]
  44706. 8013262: 687b ldr r3, [r7, #4]
  44707. 8013264: 681b ldr r3, [r3, #0]
  44708. 8013266: f042 0208 orr.w r2, r2, #8
  44709. 801326a: 619a str r2, [r3, #24]
  44710. }
  44711. 801326c: bf00 nop
  44712. 801326e: 37b8 adds r7, #184 @ 0xb8
  44713. 8013270: 46bd mov sp, r7
  44714. 8013272: bd80 pop {r7, pc}
  44715. 8013274: effffffe .word 0xeffffffe
  44716. 8013278: 58000c00 .word 0x58000c00
  44717. 801327c: 08012a01 .word 0x08012a01
  44718. 08013280 <HAL_UARTEx_WakeupCallback>:
  44719. * @brief UART wakeup from Stop mode callback.
  44720. * @param huart UART handle.
  44721. * @retval None
  44722. */
  44723. __weak void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart)
  44724. {
  44725. 8013280: b480 push {r7}
  44726. 8013282: b083 sub sp, #12
  44727. 8013284: af00 add r7, sp, #0
  44728. 8013286: 6078 str r0, [r7, #4]
  44729. UNUSED(huart);
  44730. /* NOTE : This function should not be modified, when the callback is needed,
  44731. the HAL_UARTEx_WakeupCallback can be implemented in the user file.
  44732. */
  44733. }
  44734. 8013288: bf00 nop
  44735. 801328a: 370c adds r7, #12
  44736. 801328c: 46bd mov sp, r7
  44737. 801328e: f85d 7b04 ldr.w r7, [sp], #4
  44738. 8013292: 4770 bx lr
  44739. 08013294 <HAL_UARTEx_RxFifoFullCallback>:
  44740. * @brief UART RX Fifo full callback.
  44741. * @param huart UART handle.
  44742. * @retval None
  44743. */
  44744. __weak void HAL_UARTEx_RxFifoFullCallback(UART_HandleTypeDef *huart)
  44745. {
  44746. 8013294: b480 push {r7}
  44747. 8013296: b083 sub sp, #12
  44748. 8013298: af00 add r7, sp, #0
  44749. 801329a: 6078 str r0, [r7, #4]
  44750. UNUSED(huart);
  44751. /* NOTE : This function should not be modified, when the callback is needed,
  44752. the HAL_UARTEx_RxFifoFullCallback can be implemented in the user file.
  44753. */
  44754. }
  44755. 801329c: bf00 nop
  44756. 801329e: 370c adds r7, #12
  44757. 80132a0: 46bd mov sp, r7
  44758. 80132a2: f85d 7b04 ldr.w r7, [sp], #4
  44759. 80132a6: 4770 bx lr
  44760. 080132a8 <HAL_UARTEx_TxFifoEmptyCallback>:
  44761. * @brief UART TX Fifo empty callback.
  44762. * @param huart UART handle.
  44763. * @retval None
  44764. */
  44765. __weak void HAL_UARTEx_TxFifoEmptyCallback(UART_HandleTypeDef *huart)
  44766. {
  44767. 80132a8: b480 push {r7}
  44768. 80132aa: b083 sub sp, #12
  44769. 80132ac: af00 add r7, sp, #0
  44770. 80132ae: 6078 str r0, [r7, #4]
  44771. UNUSED(huart);
  44772. /* NOTE : This function should not be modified, when the callback is needed,
  44773. the HAL_UARTEx_TxFifoEmptyCallback can be implemented in the user file.
  44774. */
  44775. }
  44776. 80132b0: bf00 nop
  44777. 80132b2: 370c adds r7, #12
  44778. 80132b4: 46bd mov sp, r7
  44779. 80132b6: f85d 7b04 ldr.w r7, [sp], #4
  44780. 80132ba: 4770 bx lr
  44781. 080132bc <HAL_UARTEx_DisableFifoMode>:
  44782. * @brief Disable the FIFO mode.
  44783. * @param huart UART handle.
  44784. * @retval HAL status
  44785. */
  44786. HAL_StatusTypeDef HAL_UARTEx_DisableFifoMode(UART_HandleTypeDef *huart)
  44787. {
  44788. 80132bc: b480 push {r7}
  44789. 80132be: b085 sub sp, #20
  44790. 80132c0: af00 add r7, sp, #0
  44791. 80132c2: 6078 str r0, [r7, #4]
  44792. /* Check parameters */
  44793. assert_param(IS_UART_FIFO_INSTANCE(huart->Instance));
  44794. /* Process Locked */
  44795. __HAL_LOCK(huart);
  44796. 80132c4: 687b ldr r3, [r7, #4]
  44797. 80132c6: f893 3084 ldrb.w r3, [r3, #132] @ 0x84
  44798. 80132ca: 2b01 cmp r3, #1
  44799. 80132cc: d101 bne.n 80132d2 <HAL_UARTEx_DisableFifoMode+0x16>
  44800. 80132ce: 2302 movs r3, #2
  44801. 80132d0: e027 b.n 8013322 <HAL_UARTEx_DisableFifoMode+0x66>
  44802. 80132d2: 687b ldr r3, [r7, #4]
  44803. 80132d4: 2201 movs r2, #1
  44804. 80132d6: f883 2084 strb.w r2, [r3, #132] @ 0x84
  44805. huart->gState = HAL_UART_STATE_BUSY;
  44806. 80132da: 687b ldr r3, [r7, #4]
  44807. 80132dc: 2224 movs r2, #36 @ 0x24
  44808. 80132de: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  44809. /* Save actual UART configuration */
  44810. tmpcr1 = READ_REG(huart->Instance->CR1);
  44811. 80132e2: 687b ldr r3, [r7, #4]
  44812. 80132e4: 681b ldr r3, [r3, #0]
  44813. 80132e6: 681b ldr r3, [r3, #0]
  44814. 80132e8: 60fb str r3, [r7, #12]
  44815. /* Disable UART */
  44816. __HAL_UART_DISABLE(huart);
  44817. 80132ea: 687b ldr r3, [r7, #4]
  44818. 80132ec: 681b ldr r3, [r3, #0]
  44819. 80132ee: 681a ldr r2, [r3, #0]
  44820. 80132f0: 687b ldr r3, [r7, #4]
  44821. 80132f2: 681b ldr r3, [r3, #0]
  44822. 80132f4: f022 0201 bic.w r2, r2, #1
  44823. 80132f8: 601a str r2, [r3, #0]
  44824. /* Enable FIFO mode */
  44825. CLEAR_BIT(tmpcr1, USART_CR1_FIFOEN);
  44826. 80132fa: 68fb ldr r3, [r7, #12]
  44827. 80132fc: f023 5300 bic.w r3, r3, #536870912 @ 0x20000000
  44828. 8013300: 60fb str r3, [r7, #12]
  44829. huart->FifoMode = UART_FIFOMODE_DISABLE;
  44830. 8013302: 687b ldr r3, [r7, #4]
  44831. 8013304: 2200 movs r2, #0
  44832. 8013306: 665a str r2, [r3, #100] @ 0x64
  44833. /* Restore UART configuration */
  44834. WRITE_REG(huart->Instance->CR1, tmpcr1);
  44835. 8013308: 687b ldr r3, [r7, #4]
  44836. 801330a: 681b ldr r3, [r3, #0]
  44837. 801330c: 68fa ldr r2, [r7, #12]
  44838. 801330e: 601a str r2, [r3, #0]
  44839. huart->gState = HAL_UART_STATE_READY;
  44840. 8013310: 687b ldr r3, [r7, #4]
  44841. 8013312: 2220 movs r2, #32
  44842. 8013314: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  44843. /* Process Unlocked */
  44844. __HAL_UNLOCK(huart);
  44845. 8013318: 687b ldr r3, [r7, #4]
  44846. 801331a: 2200 movs r2, #0
  44847. 801331c: f883 2084 strb.w r2, [r3, #132] @ 0x84
  44848. return HAL_OK;
  44849. 8013320: 2300 movs r3, #0
  44850. }
  44851. 8013322: 4618 mov r0, r3
  44852. 8013324: 3714 adds r7, #20
  44853. 8013326: 46bd mov sp, r7
  44854. 8013328: f85d 7b04 ldr.w r7, [sp], #4
  44855. 801332c: 4770 bx lr
  44856. 0801332e <HAL_UARTEx_SetTxFifoThreshold>:
  44857. * @arg @ref UART_TXFIFO_THRESHOLD_7_8
  44858. * @arg @ref UART_TXFIFO_THRESHOLD_8_8
  44859. * @retval HAL status
  44860. */
  44861. HAL_StatusTypeDef HAL_UARTEx_SetTxFifoThreshold(UART_HandleTypeDef *huart, uint32_t Threshold)
  44862. {
  44863. 801332e: b580 push {r7, lr}
  44864. 8013330: b084 sub sp, #16
  44865. 8013332: af00 add r7, sp, #0
  44866. 8013334: 6078 str r0, [r7, #4]
  44867. 8013336: 6039 str r1, [r7, #0]
  44868. /* Check parameters */
  44869. assert_param(IS_UART_FIFO_INSTANCE(huart->Instance));
  44870. assert_param(IS_UART_TXFIFO_THRESHOLD(Threshold));
  44871. /* Process Locked */
  44872. __HAL_LOCK(huart);
  44873. 8013338: 687b ldr r3, [r7, #4]
  44874. 801333a: f893 3084 ldrb.w r3, [r3, #132] @ 0x84
  44875. 801333e: 2b01 cmp r3, #1
  44876. 8013340: d101 bne.n 8013346 <HAL_UARTEx_SetTxFifoThreshold+0x18>
  44877. 8013342: 2302 movs r3, #2
  44878. 8013344: e02d b.n 80133a2 <HAL_UARTEx_SetTxFifoThreshold+0x74>
  44879. 8013346: 687b ldr r3, [r7, #4]
  44880. 8013348: 2201 movs r2, #1
  44881. 801334a: f883 2084 strb.w r2, [r3, #132] @ 0x84
  44882. huart->gState = HAL_UART_STATE_BUSY;
  44883. 801334e: 687b ldr r3, [r7, #4]
  44884. 8013350: 2224 movs r2, #36 @ 0x24
  44885. 8013352: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  44886. /* Save actual UART configuration */
  44887. tmpcr1 = READ_REG(huart->Instance->CR1);
  44888. 8013356: 687b ldr r3, [r7, #4]
  44889. 8013358: 681b ldr r3, [r3, #0]
  44890. 801335a: 681b ldr r3, [r3, #0]
  44891. 801335c: 60fb str r3, [r7, #12]
  44892. /* Disable UART */
  44893. __HAL_UART_DISABLE(huart);
  44894. 801335e: 687b ldr r3, [r7, #4]
  44895. 8013360: 681b ldr r3, [r3, #0]
  44896. 8013362: 681a ldr r2, [r3, #0]
  44897. 8013364: 687b ldr r3, [r7, #4]
  44898. 8013366: 681b ldr r3, [r3, #0]
  44899. 8013368: f022 0201 bic.w r2, r2, #1
  44900. 801336c: 601a str r2, [r3, #0]
  44901. /* Update TX threshold configuration */
  44902. MODIFY_REG(huart->Instance->CR3, USART_CR3_TXFTCFG, Threshold);
  44903. 801336e: 687b ldr r3, [r7, #4]
  44904. 8013370: 681b ldr r3, [r3, #0]
  44905. 8013372: 689b ldr r3, [r3, #8]
  44906. 8013374: f023 4160 bic.w r1, r3, #3758096384 @ 0xe0000000
  44907. 8013378: 687b ldr r3, [r7, #4]
  44908. 801337a: 681b ldr r3, [r3, #0]
  44909. 801337c: 683a ldr r2, [r7, #0]
  44910. 801337e: 430a orrs r2, r1
  44911. 8013380: 609a str r2, [r3, #8]
  44912. /* Determine the number of data to process during RX/TX ISR execution */
  44913. UARTEx_SetNbDataToProcess(huart);
  44914. 8013382: 6878 ldr r0, [r7, #4]
  44915. 8013384: f000 f8a0 bl 80134c8 <UARTEx_SetNbDataToProcess>
  44916. /* Restore UART configuration */
  44917. WRITE_REG(huart->Instance->CR1, tmpcr1);
  44918. 8013388: 687b ldr r3, [r7, #4]
  44919. 801338a: 681b ldr r3, [r3, #0]
  44920. 801338c: 68fa ldr r2, [r7, #12]
  44921. 801338e: 601a str r2, [r3, #0]
  44922. huart->gState = HAL_UART_STATE_READY;
  44923. 8013390: 687b ldr r3, [r7, #4]
  44924. 8013392: 2220 movs r2, #32
  44925. 8013394: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  44926. /* Process Unlocked */
  44927. __HAL_UNLOCK(huart);
  44928. 8013398: 687b ldr r3, [r7, #4]
  44929. 801339a: 2200 movs r2, #0
  44930. 801339c: f883 2084 strb.w r2, [r3, #132] @ 0x84
  44931. return HAL_OK;
  44932. 80133a0: 2300 movs r3, #0
  44933. }
  44934. 80133a2: 4618 mov r0, r3
  44935. 80133a4: 3710 adds r7, #16
  44936. 80133a6: 46bd mov sp, r7
  44937. 80133a8: bd80 pop {r7, pc}
  44938. 080133aa <HAL_UARTEx_SetRxFifoThreshold>:
  44939. * @arg @ref UART_RXFIFO_THRESHOLD_7_8
  44940. * @arg @ref UART_RXFIFO_THRESHOLD_8_8
  44941. * @retval HAL status
  44942. */
  44943. HAL_StatusTypeDef HAL_UARTEx_SetRxFifoThreshold(UART_HandleTypeDef *huart, uint32_t Threshold)
  44944. {
  44945. 80133aa: b580 push {r7, lr}
  44946. 80133ac: b084 sub sp, #16
  44947. 80133ae: af00 add r7, sp, #0
  44948. 80133b0: 6078 str r0, [r7, #4]
  44949. 80133b2: 6039 str r1, [r7, #0]
  44950. /* Check the parameters */
  44951. assert_param(IS_UART_FIFO_INSTANCE(huart->Instance));
  44952. assert_param(IS_UART_RXFIFO_THRESHOLD(Threshold));
  44953. /* Process Locked */
  44954. __HAL_LOCK(huart);
  44955. 80133b4: 687b ldr r3, [r7, #4]
  44956. 80133b6: f893 3084 ldrb.w r3, [r3, #132] @ 0x84
  44957. 80133ba: 2b01 cmp r3, #1
  44958. 80133bc: d101 bne.n 80133c2 <HAL_UARTEx_SetRxFifoThreshold+0x18>
  44959. 80133be: 2302 movs r3, #2
  44960. 80133c0: e02d b.n 801341e <HAL_UARTEx_SetRxFifoThreshold+0x74>
  44961. 80133c2: 687b ldr r3, [r7, #4]
  44962. 80133c4: 2201 movs r2, #1
  44963. 80133c6: f883 2084 strb.w r2, [r3, #132] @ 0x84
  44964. huart->gState = HAL_UART_STATE_BUSY;
  44965. 80133ca: 687b ldr r3, [r7, #4]
  44966. 80133cc: 2224 movs r2, #36 @ 0x24
  44967. 80133ce: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  44968. /* Save actual UART configuration */
  44969. tmpcr1 = READ_REG(huart->Instance->CR1);
  44970. 80133d2: 687b ldr r3, [r7, #4]
  44971. 80133d4: 681b ldr r3, [r3, #0]
  44972. 80133d6: 681b ldr r3, [r3, #0]
  44973. 80133d8: 60fb str r3, [r7, #12]
  44974. /* Disable UART */
  44975. __HAL_UART_DISABLE(huart);
  44976. 80133da: 687b ldr r3, [r7, #4]
  44977. 80133dc: 681b ldr r3, [r3, #0]
  44978. 80133de: 681a ldr r2, [r3, #0]
  44979. 80133e0: 687b ldr r3, [r7, #4]
  44980. 80133e2: 681b ldr r3, [r3, #0]
  44981. 80133e4: f022 0201 bic.w r2, r2, #1
  44982. 80133e8: 601a str r2, [r3, #0]
  44983. /* Update RX threshold configuration */
  44984. MODIFY_REG(huart->Instance->CR3, USART_CR3_RXFTCFG, Threshold);
  44985. 80133ea: 687b ldr r3, [r7, #4]
  44986. 80133ec: 681b ldr r3, [r3, #0]
  44987. 80133ee: 689b ldr r3, [r3, #8]
  44988. 80133f0: f023 6160 bic.w r1, r3, #234881024 @ 0xe000000
  44989. 80133f4: 687b ldr r3, [r7, #4]
  44990. 80133f6: 681b ldr r3, [r3, #0]
  44991. 80133f8: 683a ldr r2, [r7, #0]
  44992. 80133fa: 430a orrs r2, r1
  44993. 80133fc: 609a str r2, [r3, #8]
  44994. /* Determine the number of data to process during RX/TX ISR execution */
  44995. UARTEx_SetNbDataToProcess(huart);
  44996. 80133fe: 6878 ldr r0, [r7, #4]
  44997. 8013400: f000 f862 bl 80134c8 <UARTEx_SetNbDataToProcess>
  44998. /* Restore UART configuration */
  44999. WRITE_REG(huart->Instance->CR1, tmpcr1);
  45000. 8013404: 687b ldr r3, [r7, #4]
  45001. 8013406: 681b ldr r3, [r3, #0]
  45002. 8013408: 68fa ldr r2, [r7, #12]
  45003. 801340a: 601a str r2, [r3, #0]
  45004. huart->gState = HAL_UART_STATE_READY;
  45005. 801340c: 687b ldr r3, [r7, #4]
  45006. 801340e: 2220 movs r2, #32
  45007. 8013410: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  45008. /* Process Unlocked */
  45009. __HAL_UNLOCK(huart);
  45010. 8013414: 687b ldr r3, [r7, #4]
  45011. 8013416: 2200 movs r2, #0
  45012. 8013418: f883 2084 strb.w r2, [r3, #132] @ 0x84
  45013. return HAL_OK;
  45014. 801341c: 2300 movs r3, #0
  45015. }
  45016. 801341e: 4618 mov r0, r3
  45017. 8013420: 3710 adds r7, #16
  45018. 8013422: 46bd mov sp, r7
  45019. 8013424: bd80 pop {r7, pc}
  45020. 08013426 <HAL_UARTEx_ReceiveToIdle_IT>:
  45021. * @param pData Pointer to data buffer (uint8_t or uint16_t data elements).
  45022. * @param Size Amount of data elements (uint8_t or uint16_t) to be received.
  45023. * @retval HAL status
  45024. */
  45025. HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
  45026. {
  45027. 8013426: b580 push {r7, lr}
  45028. 8013428: b08c sub sp, #48 @ 0x30
  45029. 801342a: af00 add r7, sp, #0
  45030. 801342c: 60f8 str r0, [r7, #12]
  45031. 801342e: 60b9 str r1, [r7, #8]
  45032. 8013430: 4613 mov r3, r2
  45033. 8013432: 80fb strh r3, [r7, #6]
  45034. HAL_StatusTypeDef status = HAL_OK;
  45035. 8013434: 2300 movs r3, #0
  45036. 8013436: f887 302f strb.w r3, [r7, #47] @ 0x2f
  45037. /* Check that a Rx process is not already ongoing */
  45038. if (huart->RxState == HAL_UART_STATE_READY)
  45039. 801343a: 68fb ldr r3, [r7, #12]
  45040. 801343c: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c
  45041. 8013440: 2b20 cmp r3, #32
  45042. 8013442: d13b bne.n 80134bc <HAL_UARTEx_ReceiveToIdle_IT+0x96>
  45043. {
  45044. if ((pData == NULL) || (Size == 0U))
  45045. 8013444: 68bb ldr r3, [r7, #8]
  45046. 8013446: 2b00 cmp r3, #0
  45047. 8013448: d002 beq.n 8013450 <HAL_UARTEx_ReceiveToIdle_IT+0x2a>
  45048. 801344a: 88fb ldrh r3, [r7, #6]
  45049. 801344c: 2b00 cmp r3, #0
  45050. 801344e: d101 bne.n 8013454 <HAL_UARTEx_ReceiveToIdle_IT+0x2e>
  45051. {
  45052. return HAL_ERROR;
  45053. 8013450: 2301 movs r3, #1
  45054. 8013452: e034 b.n 80134be <HAL_UARTEx_ReceiveToIdle_IT+0x98>
  45055. }
  45056. /* Set Reception type to reception till IDLE Event*/
  45057. huart->ReceptionType = HAL_UART_RECEPTION_TOIDLE;
  45058. 8013454: 68fb ldr r3, [r7, #12]
  45059. 8013456: 2201 movs r2, #1
  45060. 8013458: 66da str r2, [r3, #108] @ 0x6c
  45061. huart->RxEventType = HAL_UART_RXEVENT_TC;
  45062. 801345a: 68fb ldr r3, [r7, #12]
  45063. 801345c: 2200 movs r2, #0
  45064. 801345e: 671a str r2, [r3, #112] @ 0x70
  45065. (void)UART_Start_Receive_IT(huart, pData, Size);
  45066. 8013460: 88fb ldrh r3, [r7, #6]
  45067. 8013462: 461a mov r2, r3
  45068. 8013464: 68b9 ldr r1, [r7, #8]
  45069. 8013466: 68f8 ldr r0, [r7, #12]
  45070. 8013468: f7fe fe82 bl 8012170 <UART_Start_Receive_IT>
  45071. if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
  45072. 801346c: 68fb ldr r3, [r7, #12]
  45073. 801346e: 6edb ldr r3, [r3, #108] @ 0x6c
  45074. 8013470: 2b01 cmp r3, #1
  45075. 8013472: d11d bne.n 80134b0 <HAL_UARTEx_ReceiveToIdle_IT+0x8a>
  45076. {
  45077. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_IDLEF);
  45078. 8013474: 68fb ldr r3, [r7, #12]
  45079. 8013476: 681b ldr r3, [r3, #0]
  45080. 8013478: 2210 movs r2, #16
  45081. 801347a: 621a str r2, [r3, #32]
  45082. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  45083. 801347c: 68fb ldr r3, [r7, #12]
  45084. 801347e: 681b ldr r3, [r3, #0]
  45085. 8013480: 61bb str r3, [r7, #24]
  45086. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  45087. 8013482: 69bb ldr r3, [r7, #24]
  45088. 8013484: e853 3f00 ldrex r3, [r3]
  45089. 8013488: 617b str r3, [r7, #20]
  45090. return(result);
  45091. 801348a: 697b ldr r3, [r7, #20]
  45092. 801348c: f043 0310 orr.w r3, r3, #16
  45093. 8013490: 62bb str r3, [r7, #40] @ 0x28
  45094. 8013492: 68fb ldr r3, [r7, #12]
  45095. 8013494: 681b ldr r3, [r3, #0]
  45096. 8013496: 461a mov r2, r3
  45097. 8013498: 6abb ldr r3, [r7, #40] @ 0x28
  45098. 801349a: 627b str r3, [r7, #36] @ 0x24
  45099. 801349c: 623a str r2, [r7, #32]
  45100. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  45101. 801349e: 6a39 ldr r1, [r7, #32]
  45102. 80134a0: 6a7a ldr r2, [r7, #36] @ 0x24
  45103. 80134a2: e841 2300 strex r3, r2, [r1]
  45104. 80134a6: 61fb str r3, [r7, #28]
  45105. return(result);
  45106. 80134a8: 69fb ldr r3, [r7, #28]
  45107. 80134aa: 2b00 cmp r3, #0
  45108. 80134ac: d1e6 bne.n 801347c <HAL_UARTEx_ReceiveToIdle_IT+0x56>
  45109. 80134ae: e002 b.n 80134b6 <HAL_UARTEx_ReceiveToIdle_IT+0x90>
  45110. {
  45111. /* In case of errors already pending when reception is started,
  45112. Interrupts may have already been raised and lead to reception abortion.
  45113. (Overrun error for instance).
  45114. In such case Reception Type has been reset to HAL_UART_RECEPTION_STANDARD. */
  45115. status = HAL_ERROR;
  45116. 80134b0: 2301 movs r3, #1
  45117. 80134b2: f887 302f strb.w r3, [r7, #47] @ 0x2f
  45118. }
  45119. return status;
  45120. 80134b6: f897 302f ldrb.w r3, [r7, #47] @ 0x2f
  45121. 80134ba: e000 b.n 80134be <HAL_UARTEx_ReceiveToIdle_IT+0x98>
  45122. }
  45123. else
  45124. {
  45125. return HAL_BUSY;
  45126. 80134bc: 2302 movs r3, #2
  45127. }
  45128. }
  45129. 80134be: 4618 mov r0, r3
  45130. 80134c0: 3730 adds r7, #48 @ 0x30
  45131. 80134c2: 46bd mov sp, r7
  45132. 80134c4: bd80 pop {r7, pc}
  45133. ...
  45134. 080134c8 <UARTEx_SetNbDataToProcess>:
  45135. * the UART configuration registers.
  45136. * @param huart UART handle.
  45137. * @retval None
  45138. */
  45139. static void UARTEx_SetNbDataToProcess(UART_HandleTypeDef *huart)
  45140. {
  45141. 80134c8: b480 push {r7}
  45142. 80134ca: b085 sub sp, #20
  45143. 80134cc: af00 add r7, sp, #0
  45144. 80134ce: 6078 str r0, [r7, #4]
  45145. uint8_t rx_fifo_threshold;
  45146. uint8_t tx_fifo_threshold;
  45147. static const uint8_t numerator[] = {1U, 1U, 1U, 3U, 7U, 1U, 0U, 0U};
  45148. static const uint8_t denominator[] = {8U, 4U, 2U, 4U, 8U, 1U, 1U, 1U};
  45149. if (huart->FifoMode == UART_FIFOMODE_DISABLE)
  45150. 80134d0: 687b ldr r3, [r7, #4]
  45151. 80134d2: 6e5b ldr r3, [r3, #100] @ 0x64
  45152. 80134d4: 2b00 cmp r3, #0
  45153. 80134d6: d108 bne.n 80134ea <UARTEx_SetNbDataToProcess+0x22>
  45154. {
  45155. huart->NbTxDataToProcess = 1U;
  45156. 80134d8: 687b ldr r3, [r7, #4]
  45157. 80134da: 2201 movs r2, #1
  45158. 80134dc: f8a3 206a strh.w r2, [r3, #106] @ 0x6a
  45159. huart->NbRxDataToProcess = 1U;
  45160. 80134e0: 687b ldr r3, [r7, #4]
  45161. 80134e2: 2201 movs r2, #1
  45162. 80134e4: f8a3 2068 strh.w r2, [r3, #104] @ 0x68
  45163. huart->NbTxDataToProcess = ((uint16_t)tx_fifo_depth * numerator[tx_fifo_threshold]) /
  45164. (uint16_t)denominator[tx_fifo_threshold];
  45165. huart->NbRxDataToProcess = ((uint16_t)rx_fifo_depth * numerator[rx_fifo_threshold]) /
  45166. (uint16_t)denominator[rx_fifo_threshold];
  45167. }
  45168. }
  45169. 80134e8: e031 b.n 801354e <UARTEx_SetNbDataToProcess+0x86>
  45170. rx_fifo_depth = RX_FIFO_DEPTH;
  45171. 80134ea: 2310 movs r3, #16
  45172. 80134ec: 73fb strb r3, [r7, #15]
  45173. tx_fifo_depth = TX_FIFO_DEPTH;
  45174. 80134ee: 2310 movs r3, #16
  45175. 80134f0: 73bb strb r3, [r7, #14]
  45176. rx_fifo_threshold = (uint8_t)(READ_BIT(huart->Instance->CR3, USART_CR3_RXFTCFG) >> USART_CR3_RXFTCFG_Pos);
  45177. 80134f2: 687b ldr r3, [r7, #4]
  45178. 80134f4: 681b ldr r3, [r3, #0]
  45179. 80134f6: 689b ldr r3, [r3, #8]
  45180. 80134f8: 0e5b lsrs r3, r3, #25
  45181. 80134fa: b2db uxtb r3, r3
  45182. 80134fc: f003 0307 and.w r3, r3, #7
  45183. 8013500: 737b strb r3, [r7, #13]
  45184. tx_fifo_threshold = (uint8_t)(READ_BIT(huart->Instance->CR3, USART_CR3_TXFTCFG) >> USART_CR3_TXFTCFG_Pos);
  45185. 8013502: 687b ldr r3, [r7, #4]
  45186. 8013504: 681b ldr r3, [r3, #0]
  45187. 8013506: 689b ldr r3, [r3, #8]
  45188. 8013508: 0f5b lsrs r3, r3, #29
  45189. 801350a: b2db uxtb r3, r3
  45190. 801350c: f003 0307 and.w r3, r3, #7
  45191. 8013510: 733b strb r3, [r7, #12]
  45192. huart->NbTxDataToProcess = ((uint16_t)tx_fifo_depth * numerator[tx_fifo_threshold]) /
  45193. 8013512: 7bbb ldrb r3, [r7, #14]
  45194. 8013514: 7b3a ldrb r2, [r7, #12]
  45195. 8013516: 4911 ldr r1, [pc, #68] @ (801355c <UARTEx_SetNbDataToProcess+0x94>)
  45196. 8013518: 5c8a ldrb r2, [r1, r2]
  45197. 801351a: fb02 f303 mul.w r3, r2, r3
  45198. (uint16_t)denominator[tx_fifo_threshold];
  45199. 801351e: 7b3a ldrb r2, [r7, #12]
  45200. 8013520: 490f ldr r1, [pc, #60] @ (8013560 <UARTEx_SetNbDataToProcess+0x98>)
  45201. 8013522: 5c8a ldrb r2, [r1, r2]
  45202. huart->NbTxDataToProcess = ((uint16_t)tx_fifo_depth * numerator[tx_fifo_threshold]) /
  45203. 8013524: fb93 f3f2 sdiv r3, r3, r2
  45204. 8013528: b29a uxth r2, r3
  45205. 801352a: 687b ldr r3, [r7, #4]
  45206. 801352c: f8a3 206a strh.w r2, [r3, #106] @ 0x6a
  45207. huart->NbRxDataToProcess = ((uint16_t)rx_fifo_depth * numerator[rx_fifo_threshold]) /
  45208. 8013530: 7bfb ldrb r3, [r7, #15]
  45209. 8013532: 7b7a ldrb r2, [r7, #13]
  45210. 8013534: 4909 ldr r1, [pc, #36] @ (801355c <UARTEx_SetNbDataToProcess+0x94>)
  45211. 8013536: 5c8a ldrb r2, [r1, r2]
  45212. 8013538: fb02 f303 mul.w r3, r2, r3
  45213. (uint16_t)denominator[rx_fifo_threshold];
  45214. 801353c: 7b7a ldrb r2, [r7, #13]
  45215. 801353e: 4908 ldr r1, [pc, #32] @ (8013560 <UARTEx_SetNbDataToProcess+0x98>)
  45216. 8013540: 5c8a ldrb r2, [r1, r2]
  45217. huart->NbRxDataToProcess = ((uint16_t)rx_fifo_depth * numerator[rx_fifo_threshold]) /
  45218. 8013542: fb93 f3f2 sdiv r3, r3, r2
  45219. 8013546: b29a uxth r2, r3
  45220. 8013548: 687b ldr r3, [r7, #4]
  45221. 801354a: f8a3 2068 strh.w r2, [r3, #104] @ 0x68
  45222. }
  45223. 801354e: bf00 nop
  45224. 8013550: 3714 adds r7, #20
  45225. 8013552: 46bd mov sp, r7
  45226. 8013554: f85d 7b04 ldr.w r7, [sp], #4
  45227. 8013558: 4770 bx lr
  45228. 801355a: bf00 nop
  45229. 801355c: 080189f8 .word 0x080189f8
  45230. 8013560: 08018a00 .word 0x08018a00
  45231. 08013564 <__NVIC_SetPriority>:
  45232. {
  45233. 8013564: b480 push {r7}
  45234. 8013566: b083 sub sp, #12
  45235. 8013568: af00 add r7, sp, #0
  45236. 801356a: 4603 mov r3, r0
  45237. 801356c: 6039 str r1, [r7, #0]
  45238. 801356e: 80fb strh r3, [r7, #6]
  45239. if ((int32_t)(IRQn) >= 0)
  45240. 8013570: f9b7 3006 ldrsh.w r3, [r7, #6]
  45241. 8013574: 2b00 cmp r3, #0
  45242. 8013576: db0a blt.n 801358e <__NVIC_SetPriority+0x2a>
  45243. NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
  45244. 8013578: 683b ldr r3, [r7, #0]
  45245. 801357a: b2da uxtb r2, r3
  45246. 801357c: 490c ldr r1, [pc, #48] @ (80135b0 <__NVIC_SetPriority+0x4c>)
  45247. 801357e: f9b7 3006 ldrsh.w r3, [r7, #6]
  45248. 8013582: 0112 lsls r2, r2, #4
  45249. 8013584: b2d2 uxtb r2, r2
  45250. 8013586: 440b add r3, r1
  45251. 8013588: f883 2300 strb.w r2, [r3, #768] @ 0x300
  45252. }
  45253. 801358c: e00a b.n 80135a4 <__NVIC_SetPriority+0x40>
  45254. SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
  45255. 801358e: 683b ldr r3, [r7, #0]
  45256. 8013590: b2da uxtb r2, r3
  45257. 8013592: 4908 ldr r1, [pc, #32] @ (80135b4 <__NVIC_SetPriority+0x50>)
  45258. 8013594: 88fb ldrh r3, [r7, #6]
  45259. 8013596: f003 030f and.w r3, r3, #15
  45260. 801359a: 3b04 subs r3, #4
  45261. 801359c: 0112 lsls r2, r2, #4
  45262. 801359e: b2d2 uxtb r2, r2
  45263. 80135a0: 440b add r3, r1
  45264. 80135a2: 761a strb r2, [r3, #24]
  45265. }
  45266. 80135a4: bf00 nop
  45267. 80135a6: 370c adds r7, #12
  45268. 80135a8: 46bd mov sp, r7
  45269. 80135aa: f85d 7b04 ldr.w r7, [sp], #4
  45270. 80135ae: 4770 bx lr
  45271. 80135b0: e000e100 .word 0xe000e100
  45272. 80135b4: e000ed00 .word 0xe000ed00
  45273. 080135b8 <SysTick_Handler>:
  45274. /*
  45275. SysTick handler implementation that also clears overflow flag.
  45276. */
  45277. #if (USE_CUSTOM_SYSTICK_HANDLER_IMPLEMENTATION == 0)
  45278. void SysTick_Handler (void) {
  45279. 80135b8: b580 push {r7, lr}
  45280. 80135ba: af00 add r7, sp, #0
  45281. /* Clear overflow flag */
  45282. SysTick->CTRL;
  45283. 80135bc: 4b05 ldr r3, [pc, #20] @ (80135d4 <SysTick_Handler+0x1c>)
  45284. 80135be: 681b ldr r3, [r3, #0]
  45285. if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED) {
  45286. 80135c0: f002 fd1e bl 8016000 <xTaskGetSchedulerState>
  45287. 80135c4: 4603 mov r3, r0
  45288. 80135c6: 2b01 cmp r3, #1
  45289. 80135c8: d001 beq.n 80135ce <SysTick_Handler+0x16>
  45290. /* Call tick handler */
  45291. xPortSysTickHandler();
  45292. 80135ca: f003 ff2d bl 8017428 <xPortSysTickHandler>
  45293. }
  45294. }
  45295. 80135ce: bf00 nop
  45296. 80135d0: bd80 pop {r7, pc}
  45297. 80135d2: bf00 nop
  45298. 80135d4: e000e010 .word 0xe000e010
  45299. 080135d8 <SVC_Setup>:
  45300. #endif /* SysTick */
  45301. /*
  45302. Setup SVC to reset value.
  45303. */
  45304. __STATIC_INLINE void SVC_Setup (void) {
  45305. 80135d8: b580 push {r7, lr}
  45306. 80135da: af00 add r7, sp, #0
  45307. #if (__ARM_ARCH_7A__ == 0U)
  45308. /* Service Call interrupt might be configured before kernel start */
  45309. /* and when its priority is lower or equal to BASEPRI, svc intruction */
  45310. /* causes a Hard Fault. */
  45311. NVIC_SetPriority (SVCall_IRQ_NBR, 0U);
  45312. 80135dc: 2100 movs r1, #0
  45313. 80135de: f06f 0004 mvn.w r0, #4
  45314. 80135e2: f7ff ffbf bl 8013564 <__NVIC_SetPriority>
  45315. #endif
  45316. }
  45317. 80135e6: bf00 nop
  45318. 80135e8: bd80 pop {r7, pc}
  45319. ...
  45320. 080135ec <osKernelInitialize>:
  45321. static uint32_t OS_Tick_GetOverflow (void);
  45322. /* Get OS Tick interval */
  45323. static uint32_t OS_Tick_GetInterval (void);
  45324. /*---------------------------------------------------------------------------*/
  45325. osStatus_t osKernelInitialize (void) {
  45326. 80135ec: b480 push {r7}
  45327. 80135ee: b083 sub sp, #12
  45328. 80135f0: af00 add r7, sp, #0
  45329. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  45330. 80135f2: f3ef 8305 mrs r3, IPSR
  45331. 80135f6: 603b str r3, [r7, #0]
  45332. return(result);
  45333. 80135f8: 683b ldr r3, [r7, #0]
  45334. osStatus_t stat;
  45335. if (IS_IRQ()) {
  45336. 80135fa: 2b00 cmp r3, #0
  45337. 80135fc: d003 beq.n 8013606 <osKernelInitialize+0x1a>
  45338. stat = osErrorISR;
  45339. 80135fe: f06f 0305 mvn.w r3, #5
  45340. 8013602: 607b str r3, [r7, #4]
  45341. 8013604: e00c b.n 8013620 <osKernelInitialize+0x34>
  45342. }
  45343. else {
  45344. if (KernelState == osKernelInactive) {
  45345. 8013606: 4b0a ldr r3, [pc, #40] @ (8013630 <osKernelInitialize+0x44>)
  45346. 8013608: 681b ldr r3, [r3, #0]
  45347. 801360a: 2b00 cmp r3, #0
  45348. 801360c: d105 bne.n 801361a <osKernelInitialize+0x2e>
  45349. EvrFreeRTOSSetup(0U);
  45350. #endif
  45351. #if defined(USE_FreeRTOS_HEAP_5) && (HEAP_5_REGION_SETUP == 1)
  45352. vPortDefineHeapRegions (configHEAP_5_REGIONS);
  45353. #endif
  45354. KernelState = osKernelReady;
  45355. 801360e: 4b08 ldr r3, [pc, #32] @ (8013630 <osKernelInitialize+0x44>)
  45356. 8013610: 2201 movs r2, #1
  45357. 8013612: 601a str r2, [r3, #0]
  45358. stat = osOK;
  45359. 8013614: 2300 movs r3, #0
  45360. 8013616: 607b str r3, [r7, #4]
  45361. 8013618: e002 b.n 8013620 <osKernelInitialize+0x34>
  45362. } else {
  45363. stat = osError;
  45364. 801361a: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  45365. 801361e: 607b str r3, [r7, #4]
  45366. }
  45367. }
  45368. return (stat);
  45369. 8013620: 687b ldr r3, [r7, #4]
  45370. }
  45371. 8013622: 4618 mov r0, r3
  45372. 8013624: 370c adds r7, #12
  45373. 8013626: 46bd mov sp, r7
  45374. 8013628: f85d 7b04 ldr.w r7, [sp], #4
  45375. 801362c: 4770 bx lr
  45376. 801362e: bf00 nop
  45377. 8013630: 24000cac .word 0x24000cac
  45378. 08013634 <osKernelStart>:
  45379. }
  45380. return (state);
  45381. }
  45382. osStatus_t osKernelStart (void) {
  45383. 8013634: b580 push {r7, lr}
  45384. 8013636: b082 sub sp, #8
  45385. 8013638: af00 add r7, sp, #0
  45386. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  45387. 801363a: f3ef 8305 mrs r3, IPSR
  45388. 801363e: 603b str r3, [r7, #0]
  45389. return(result);
  45390. 8013640: 683b ldr r3, [r7, #0]
  45391. osStatus_t stat;
  45392. if (IS_IRQ()) {
  45393. 8013642: 2b00 cmp r3, #0
  45394. 8013644: d003 beq.n 801364e <osKernelStart+0x1a>
  45395. stat = osErrorISR;
  45396. 8013646: f06f 0305 mvn.w r3, #5
  45397. 801364a: 607b str r3, [r7, #4]
  45398. 801364c: e010 b.n 8013670 <osKernelStart+0x3c>
  45399. }
  45400. else {
  45401. if (KernelState == osKernelReady) {
  45402. 801364e: 4b0b ldr r3, [pc, #44] @ (801367c <osKernelStart+0x48>)
  45403. 8013650: 681b ldr r3, [r3, #0]
  45404. 8013652: 2b01 cmp r3, #1
  45405. 8013654: d109 bne.n 801366a <osKernelStart+0x36>
  45406. /* Ensure SVC priority is at the reset value */
  45407. SVC_Setup();
  45408. 8013656: f7ff ffbf bl 80135d8 <SVC_Setup>
  45409. /* Change state to enable IRQ masking check */
  45410. KernelState = osKernelRunning;
  45411. 801365a: 4b08 ldr r3, [pc, #32] @ (801367c <osKernelStart+0x48>)
  45412. 801365c: 2202 movs r2, #2
  45413. 801365e: 601a str r2, [r3, #0]
  45414. /* Start the kernel scheduler */
  45415. vTaskStartScheduler();
  45416. 8013660: f002 f824 bl 80156ac <vTaskStartScheduler>
  45417. stat = osOK;
  45418. 8013664: 2300 movs r3, #0
  45419. 8013666: 607b str r3, [r7, #4]
  45420. 8013668: e002 b.n 8013670 <osKernelStart+0x3c>
  45421. } else {
  45422. stat = osError;
  45423. 801366a: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  45424. 801366e: 607b str r3, [r7, #4]
  45425. }
  45426. }
  45427. return (stat);
  45428. 8013670: 687b ldr r3, [r7, #4]
  45429. }
  45430. 8013672: 4618 mov r0, r3
  45431. 8013674: 3708 adds r7, #8
  45432. 8013676: 46bd mov sp, r7
  45433. 8013678: bd80 pop {r7, pc}
  45434. 801367a: bf00 nop
  45435. 801367c: 24000cac .word 0x24000cac
  45436. 08013680 <osThreadNew>:
  45437. return (configCPU_CLOCK_HZ);
  45438. }
  45439. /*---------------------------------------------------------------------------*/
  45440. osThreadId_t osThreadNew (osThreadFunc_t func, void *argument, const osThreadAttr_t *attr) {
  45441. 8013680: b580 push {r7, lr}
  45442. 8013682: b08e sub sp, #56 @ 0x38
  45443. 8013684: af04 add r7, sp, #16
  45444. 8013686: 60f8 str r0, [r7, #12]
  45445. 8013688: 60b9 str r1, [r7, #8]
  45446. 801368a: 607a str r2, [r7, #4]
  45447. uint32_t stack;
  45448. TaskHandle_t hTask;
  45449. UBaseType_t prio;
  45450. int32_t mem;
  45451. hTask = NULL;
  45452. 801368c: 2300 movs r3, #0
  45453. 801368e: 613b str r3, [r7, #16]
  45454. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  45455. 8013690: f3ef 8305 mrs r3, IPSR
  45456. 8013694: 617b str r3, [r7, #20]
  45457. return(result);
  45458. 8013696: 697b ldr r3, [r7, #20]
  45459. if (!IS_IRQ() && (func != NULL)) {
  45460. 8013698: 2b00 cmp r3, #0
  45461. 801369a: d17f bne.n 801379c <osThreadNew+0x11c>
  45462. 801369c: 68fb ldr r3, [r7, #12]
  45463. 801369e: 2b00 cmp r3, #0
  45464. 80136a0: d07c beq.n 801379c <osThreadNew+0x11c>
  45465. stack = configMINIMAL_STACK_SIZE;
  45466. 80136a2: f44f 7300 mov.w r3, #512 @ 0x200
  45467. 80136a6: 623b str r3, [r7, #32]
  45468. prio = (UBaseType_t)osPriorityNormal;
  45469. 80136a8: 2318 movs r3, #24
  45470. 80136aa: 61fb str r3, [r7, #28]
  45471. name = NULL;
  45472. 80136ac: 2300 movs r3, #0
  45473. 80136ae: 627b str r3, [r7, #36] @ 0x24
  45474. mem = -1;
  45475. 80136b0: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  45476. 80136b4: 61bb str r3, [r7, #24]
  45477. if (attr != NULL) {
  45478. 80136b6: 687b ldr r3, [r7, #4]
  45479. 80136b8: 2b00 cmp r3, #0
  45480. 80136ba: d045 beq.n 8013748 <osThreadNew+0xc8>
  45481. if (attr->name != NULL) {
  45482. 80136bc: 687b ldr r3, [r7, #4]
  45483. 80136be: 681b ldr r3, [r3, #0]
  45484. 80136c0: 2b00 cmp r3, #0
  45485. 80136c2: d002 beq.n 80136ca <osThreadNew+0x4a>
  45486. name = attr->name;
  45487. 80136c4: 687b ldr r3, [r7, #4]
  45488. 80136c6: 681b ldr r3, [r3, #0]
  45489. 80136c8: 627b str r3, [r7, #36] @ 0x24
  45490. }
  45491. if (attr->priority != osPriorityNone) {
  45492. 80136ca: 687b ldr r3, [r7, #4]
  45493. 80136cc: 699b ldr r3, [r3, #24]
  45494. 80136ce: 2b00 cmp r3, #0
  45495. 80136d0: d002 beq.n 80136d8 <osThreadNew+0x58>
  45496. prio = (UBaseType_t)attr->priority;
  45497. 80136d2: 687b ldr r3, [r7, #4]
  45498. 80136d4: 699b ldr r3, [r3, #24]
  45499. 80136d6: 61fb str r3, [r7, #28]
  45500. }
  45501. if ((prio < osPriorityIdle) || (prio > osPriorityISR) || ((attr->attr_bits & osThreadJoinable) == osThreadJoinable)) {
  45502. 80136d8: 69fb ldr r3, [r7, #28]
  45503. 80136da: 2b00 cmp r3, #0
  45504. 80136dc: d008 beq.n 80136f0 <osThreadNew+0x70>
  45505. 80136de: 69fb ldr r3, [r7, #28]
  45506. 80136e0: 2b38 cmp r3, #56 @ 0x38
  45507. 80136e2: d805 bhi.n 80136f0 <osThreadNew+0x70>
  45508. 80136e4: 687b ldr r3, [r7, #4]
  45509. 80136e6: 685b ldr r3, [r3, #4]
  45510. 80136e8: f003 0301 and.w r3, r3, #1
  45511. 80136ec: 2b00 cmp r3, #0
  45512. 80136ee: d001 beq.n 80136f4 <osThreadNew+0x74>
  45513. return (NULL);
  45514. 80136f0: 2300 movs r3, #0
  45515. 80136f2: e054 b.n 801379e <osThreadNew+0x11e>
  45516. }
  45517. if (attr->stack_size > 0U) {
  45518. 80136f4: 687b ldr r3, [r7, #4]
  45519. 80136f6: 695b ldr r3, [r3, #20]
  45520. 80136f8: 2b00 cmp r3, #0
  45521. 80136fa: d003 beq.n 8013704 <osThreadNew+0x84>
  45522. /* In FreeRTOS stack is not in bytes, but in sizeof(StackType_t) which is 4 on ARM ports. */
  45523. /* Stack size should be therefore 4 byte aligned in order to avoid division caused side effects */
  45524. stack = attr->stack_size / sizeof(StackType_t);
  45525. 80136fc: 687b ldr r3, [r7, #4]
  45526. 80136fe: 695b ldr r3, [r3, #20]
  45527. 8013700: 089b lsrs r3, r3, #2
  45528. 8013702: 623b str r3, [r7, #32]
  45529. }
  45530. if ((attr->cb_mem != NULL) && (attr->cb_size >= sizeof(StaticTask_t)) &&
  45531. 8013704: 687b ldr r3, [r7, #4]
  45532. 8013706: 689b ldr r3, [r3, #8]
  45533. 8013708: 2b00 cmp r3, #0
  45534. 801370a: d00e beq.n 801372a <osThreadNew+0xaa>
  45535. 801370c: 687b ldr r3, [r7, #4]
  45536. 801370e: 68db ldr r3, [r3, #12]
  45537. 8013710: 2ba7 cmp r3, #167 @ 0xa7
  45538. 8013712: d90a bls.n 801372a <osThreadNew+0xaa>
  45539. (attr->stack_mem != NULL) && (attr->stack_size > 0U)) {
  45540. 8013714: 687b ldr r3, [r7, #4]
  45541. 8013716: 691b ldr r3, [r3, #16]
  45542. if ((attr->cb_mem != NULL) && (attr->cb_size >= sizeof(StaticTask_t)) &&
  45543. 8013718: 2b00 cmp r3, #0
  45544. 801371a: d006 beq.n 801372a <osThreadNew+0xaa>
  45545. (attr->stack_mem != NULL) && (attr->stack_size > 0U)) {
  45546. 801371c: 687b ldr r3, [r7, #4]
  45547. 801371e: 695b ldr r3, [r3, #20]
  45548. 8013720: 2b00 cmp r3, #0
  45549. 8013722: d002 beq.n 801372a <osThreadNew+0xaa>
  45550. mem = 1;
  45551. 8013724: 2301 movs r3, #1
  45552. 8013726: 61bb str r3, [r7, #24]
  45553. 8013728: e010 b.n 801374c <osThreadNew+0xcc>
  45554. }
  45555. else {
  45556. if ((attr->cb_mem == NULL) && (attr->cb_size == 0U) && (attr->stack_mem == NULL)) {
  45557. 801372a: 687b ldr r3, [r7, #4]
  45558. 801372c: 689b ldr r3, [r3, #8]
  45559. 801372e: 2b00 cmp r3, #0
  45560. 8013730: d10c bne.n 801374c <osThreadNew+0xcc>
  45561. 8013732: 687b ldr r3, [r7, #4]
  45562. 8013734: 68db ldr r3, [r3, #12]
  45563. 8013736: 2b00 cmp r3, #0
  45564. 8013738: d108 bne.n 801374c <osThreadNew+0xcc>
  45565. 801373a: 687b ldr r3, [r7, #4]
  45566. 801373c: 691b ldr r3, [r3, #16]
  45567. 801373e: 2b00 cmp r3, #0
  45568. 8013740: d104 bne.n 801374c <osThreadNew+0xcc>
  45569. mem = 0;
  45570. 8013742: 2300 movs r3, #0
  45571. 8013744: 61bb str r3, [r7, #24]
  45572. 8013746: e001 b.n 801374c <osThreadNew+0xcc>
  45573. }
  45574. }
  45575. }
  45576. else {
  45577. mem = 0;
  45578. 8013748: 2300 movs r3, #0
  45579. 801374a: 61bb str r3, [r7, #24]
  45580. }
  45581. if (mem == 1) {
  45582. 801374c: 69bb ldr r3, [r7, #24]
  45583. 801374e: 2b01 cmp r3, #1
  45584. 8013750: d110 bne.n 8013774 <osThreadNew+0xf4>
  45585. #if (configSUPPORT_STATIC_ALLOCATION == 1)
  45586. hTask = xTaskCreateStatic ((TaskFunction_t)func, name, stack, argument, prio, (StackType_t *)attr->stack_mem,
  45587. 8013752: 687b ldr r3, [r7, #4]
  45588. 8013754: 691b ldr r3, [r3, #16]
  45589. (StaticTask_t *)attr->cb_mem);
  45590. 8013756: 687a ldr r2, [r7, #4]
  45591. 8013758: 6892 ldr r2, [r2, #8]
  45592. hTask = xTaskCreateStatic ((TaskFunction_t)func, name, stack, argument, prio, (StackType_t *)attr->stack_mem,
  45593. 801375a: 9202 str r2, [sp, #8]
  45594. 801375c: 9301 str r3, [sp, #4]
  45595. 801375e: 69fb ldr r3, [r7, #28]
  45596. 8013760: 9300 str r3, [sp, #0]
  45597. 8013762: 68bb ldr r3, [r7, #8]
  45598. 8013764: 6a3a ldr r2, [r7, #32]
  45599. 8013766: 6a79 ldr r1, [r7, #36] @ 0x24
  45600. 8013768: 68f8 ldr r0, [r7, #12]
  45601. 801376a: f001 fdac bl 80152c6 <xTaskCreateStatic>
  45602. 801376e: 4603 mov r3, r0
  45603. 8013770: 613b str r3, [r7, #16]
  45604. 8013772: e013 b.n 801379c <osThreadNew+0x11c>
  45605. #endif
  45606. }
  45607. else {
  45608. if (mem == 0) {
  45609. 8013774: 69bb ldr r3, [r7, #24]
  45610. 8013776: 2b00 cmp r3, #0
  45611. 8013778: d110 bne.n 801379c <osThreadNew+0x11c>
  45612. #if (configSUPPORT_DYNAMIC_ALLOCATION == 1)
  45613. if (xTaskCreate ((TaskFunction_t)func, name, (uint16_t)stack, argument, prio, &hTask) != pdPASS) {
  45614. 801377a: 6a3b ldr r3, [r7, #32]
  45615. 801377c: b29a uxth r2, r3
  45616. 801377e: f107 0310 add.w r3, r7, #16
  45617. 8013782: 9301 str r3, [sp, #4]
  45618. 8013784: 69fb ldr r3, [r7, #28]
  45619. 8013786: 9300 str r3, [sp, #0]
  45620. 8013788: 68bb ldr r3, [r7, #8]
  45621. 801378a: 6a79 ldr r1, [r7, #36] @ 0x24
  45622. 801378c: 68f8 ldr r0, [r7, #12]
  45623. 801378e: f001 fdfa bl 8015386 <xTaskCreate>
  45624. 8013792: 4603 mov r3, r0
  45625. 8013794: 2b01 cmp r3, #1
  45626. 8013796: d001 beq.n 801379c <osThreadNew+0x11c>
  45627. hTask = NULL;
  45628. 8013798: 2300 movs r3, #0
  45629. 801379a: 613b str r3, [r7, #16]
  45630. #endif
  45631. }
  45632. }
  45633. }
  45634. return ((osThreadId_t)hTask);
  45635. 801379c: 693b ldr r3, [r7, #16]
  45636. }
  45637. 801379e: 4618 mov r0, r3
  45638. 80137a0: 3728 adds r7, #40 @ 0x28
  45639. 80137a2: 46bd mov sp, r7
  45640. 80137a4: bd80 pop {r7, pc}
  45641. 080137a6 <osDelay>:
  45642. /* Return flags before clearing */
  45643. return (rflags);
  45644. }
  45645. #endif /* (configUSE_OS2_THREAD_FLAGS == 1) */
  45646. osStatus_t osDelay (uint32_t ticks) {
  45647. 80137a6: b580 push {r7, lr}
  45648. 80137a8: b084 sub sp, #16
  45649. 80137aa: af00 add r7, sp, #0
  45650. 80137ac: 6078 str r0, [r7, #4]
  45651. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  45652. 80137ae: f3ef 8305 mrs r3, IPSR
  45653. 80137b2: 60bb str r3, [r7, #8]
  45654. return(result);
  45655. 80137b4: 68bb ldr r3, [r7, #8]
  45656. osStatus_t stat;
  45657. if (IS_IRQ()) {
  45658. 80137b6: 2b00 cmp r3, #0
  45659. 80137b8: d003 beq.n 80137c2 <osDelay+0x1c>
  45660. stat = osErrorISR;
  45661. 80137ba: f06f 0305 mvn.w r3, #5
  45662. 80137be: 60fb str r3, [r7, #12]
  45663. 80137c0: e007 b.n 80137d2 <osDelay+0x2c>
  45664. }
  45665. else {
  45666. stat = osOK;
  45667. 80137c2: 2300 movs r3, #0
  45668. 80137c4: 60fb str r3, [r7, #12]
  45669. if (ticks != 0U) {
  45670. 80137c6: 687b ldr r3, [r7, #4]
  45671. 80137c8: 2b00 cmp r3, #0
  45672. 80137ca: d002 beq.n 80137d2 <osDelay+0x2c>
  45673. vTaskDelay(ticks);
  45674. 80137cc: 6878 ldr r0, [r7, #4]
  45675. 80137ce: f001 ff37 bl 8015640 <vTaskDelay>
  45676. }
  45677. }
  45678. return (stat);
  45679. 80137d2: 68fb ldr r3, [r7, #12]
  45680. }
  45681. 80137d4: 4618 mov r0, r3
  45682. 80137d6: 3710 adds r7, #16
  45683. 80137d8: 46bd mov sp, r7
  45684. 80137da: bd80 pop {r7, pc}
  45685. 080137dc <TimerCallback>:
  45686. }
  45687. /*---------------------------------------------------------------------------*/
  45688. #if (configUSE_OS2_TIMER == 1)
  45689. static void TimerCallback (TimerHandle_t hTimer) {
  45690. 80137dc: b580 push {r7, lr}
  45691. 80137de: b084 sub sp, #16
  45692. 80137e0: af00 add r7, sp, #0
  45693. 80137e2: 6078 str r0, [r7, #4]
  45694. TimerCallback_t *callb;
  45695. callb = (TimerCallback_t *)pvTimerGetTimerID (hTimer);
  45696. 80137e4: 6878 ldr r0, [r7, #4]
  45697. 80137e6: f003 fc3d bl 8017064 <pvTimerGetTimerID>
  45698. 80137ea: 60f8 str r0, [r7, #12]
  45699. if (callb != NULL) {
  45700. 80137ec: 68fb ldr r3, [r7, #12]
  45701. 80137ee: 2b00 cmp r3, #0
  45702. 80137f0: d005 beq.n 80137fe <TimerCallback+0x22>
  45703. callb->func (callb->arg);
  45704. 80137f2: 68fb ldr r3, [r7, #12]
  45705. 80137f4: 681b ldr r3, [r3, #0]
  45706. 80137f6: 68fa ldr r2, [r7, #12]
  45707. 80137f8: 6852 ldr r2, [r2, #4]
  45708. 80137fa: 4610 mov r0, r2
  45709. 80137fc: 4798 blx r3
  45710. }
  45711. }
  45712. 80137fe: bf00 nop
  45713. 8013800: 3710 adds r7, #16
  45714. 8013802: 46bd mov sp, r7
  45715. 8013804: bd80 pop {r7, pc}
  45716. ...
  45717. 08013808 <osTimerNew>:
  45718. osTimerId_t osTimerNew (osTimerFunc_t func, osTimerType_t type, void *argument, const osTimerAttr_t *attr) {
  45719. 8013808: b580 push {r7, lr}
  45720. 801380a: b08c sub sp, #48 @ 0x30
  45721. 801380c: af02 add r7, sp, #8
  45722. 801380e: 60f8 str r0, [r7, #12]
  45723. 8013810: 607a str r2, [r7, #4]
  45724. 8013812: 603b str r3, [r7, #0]
  45725. 8013814: 460b mov r3, r1
  45726. 8013816: 72fb strb r3, [r7, #11]
  45727. TimerHandle_t hTimer;
  45728. TimerCallback_t *callb;
  45729. UBaseType_t reload;
  45730. int32_t mem;
  45731. hTimer = NULL;
  45732. 8013818: 2300 movs r3, #0
  45733. 801381a: 623b str r3, [r7, #32]
  45734. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  45735. 801381c: f3ef 8305 mrs r3, IPSR
  45736. 8013820: 613b str r3, [r7, #16]
  45737. return(result);
  45738. 8013822: 693b ldr r3, [r7, #16]
  45739. if (!IS_IRQ() && (func != NULL)) {
  45740. 8013824: 2b00 cmp r3, #0
  45741. 8013826: d163 bne.n 80138f0 <osTimerNew+0xe8>
  45742. 8013828: 68fb ldr r3, [r7, #12]
  45743. 801382a: 2b00 cmp r3, #0
  45744. 801382c: d060 beq.n 80138f0 <osTimerNew+0xe8>
  45745. /* Allocate memory to store callback function and argument */
  45746. callb = pvPortMalloc (sizeof(TimerCallback_t));
  45747. 801382e: 2008 movs r0, #8
  45748. 8013830: f003 fe8c bl 801754c <pvPortMalloc>
  45749. 8013834: 6178 str r0, [r7, #20]
  45750. if (callb != NULL) {
  45751. 8013836: 697b ldr r3, [r7, #20]
  45752. 8013838: 2b00 cmp r3, #0
  45753. 801383a: d059 beq.n 80138f0 <osTimerNew+0xe8>
  45754. callb->func = func;
  45755. 801383c: 697b ldr r3, [r7, #20]
  45756. 801383e: 68fa ldr r2, [r7, #12]
  45757. 8013840: 601a str r2, [r3, #0]
  45758. callb->arg = argument;
  45759. 8013842: 697b ldr r3, [r7, #20]
  45760. 8013844: 687a ldr r2, [r7, #4]
  45761. 8013846: 605a str r2, [r3, #4]
  45762. if (type == osTimerOnce) {
  45763. 8013848: 7afb ldrb r3, [r7, #11]
  45764. 801384a: 2b00 cmp r3, #0
  45765. 801384c: d102 bne.n 8013854 <osTimerNew+0x4c>
  45766. reload = pdFALSE;
  45767. 801384e: 2300 movs r3, #0
  45768. 8013850: 61fb str r3, [r7, #28]
  45769. 8013852: e001 b.n 8013858 <osTimerNew+0x50>
  45770. } else {
  45771. reload = pdTRUE;
  45772. 8013854: 2301 movs r3, #1
  45773. 8013856: 61fb str r3, [r7, #28]
  45774. }
  45775. mem = -1;
  45776. 8013858: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  45777. 801385c: 61bb str r3, [r7, #24]
  45778. name = NULL;
  45779. 801385e: 2300 movs r3, #0
  45780. 8013860: 627b str r3, [r7, #36] @ 0x24
  45781. if (attr != NULL) {
  45782. 8013862: 683b ldr r3, [r7, #0]
  45783. 8013864: 2b00 cmp r3, #0
  45784. 8013866: d01c beq.n 80138a2 <osTimerNew+0x9a>
  45785. if (attr->name != NULL) {
  45786. 8013868: 683b ldr r3, [r7, #0]
  45787. 801386a: 681b ldr r3, [r3, #0]
  45788. 801386c: 2b00 cmp r3, #0
  45789. 801386e: d002 beq.n 8013876 <osTimerNew+0x6e>
  45790. name = attr->name;
  45791. 8013870: 683b ldr r3, [r7, #0]
  45792. 8013872: 681b ldr r3, [r3, #0]
  45793. 8013874: 627b str r3, [r7, #36] @ 0x24
  45794. }
  45795. if ((attr->cb_mem != NULL) && (attr->cb_size >= sizeof(StaticTimer_t))) {
  45796. 8013876: 683b ldr r3, [r7, #0]
  45797. 8013878: 689b ldr r3, [r3, #8]
  45798. 801387a: 2b00 cmp r3, #0
  45799. 801387c: d006 beq.n 801388c <osTimerNew+0x84>
  45800. 801387e: 683b ldr r3, [r7, #0]
  45801. 8013880: 68db ldr r3, [r3, #12]
  45802. 8013882: 2b2b cmp r3, #43 @ 0x2b
  45803. 8013884: d902 bls.n 801388c <osTimerNew+0x84>
  45804. mem = 1;
  45805. 8013886: 2301 movs r3, #1
  45806. 8013888: 61bb str r3, [r7, #24]
  45807. 801388a: e00c b.n 80138a6 <osTimerNew+0x9e>
  45808. }
  45809. else {
  45810. if ((attr->cb_mem == NULL) && (attr->cb_size == 0U)) {
  45811. 801388c: 683b ldr r3, [r7, #0]
  45812. 801388e: 689b ldr r3, [r3, #8]
  45813. 8013890: 2b00 cmp r3, #0
  45814. 8013892: d108 bne.n 80138a6 <osTimerNew+0x9e>
  45815. 8013894: 683b ldr r3, [r7, #0]
  45816. 8013896: 68db ldr r3, [r3, #12]
  45817. 8013898: 2b00 cmp r3, #0
  45818. 801389a: d104 bne.n 80138a6 <osTimerNew+0x9e>
  45819. mem = 0;
  45820. 801389c: 2300 movs r3, #0
  45821. 801389e: 61bb str r3, [r7, #24]
  45822. 80138a0: e001 b.n 80138a6 <osTimerNew+0x9e>
  45823. }
  45824. }
  45825. }
  45826. else {
  45827. mem = 0;
  45828. 80138a2: 2300 movs r3, #0
  45829. 80138a4: 61bb str r3, [r7, #24]
  45830. }
  45831. if (mem == 1) {
  45832. 80138a6: 69bb ldr r3, [r7, #24]
  45833. 80138a8: 2b01 cmp r3, #1
  45834. 80138aa: d10c bne.n 80138c6 <osTimerNew+0xbe>
  45835. #if (configSUPPORT_STATIC_ALLOCATION == 1)
  45836. hTimer = xTimerCreateStatic (name, 1, reload, callb, TimerCallback, (StaticTimer_t *)attr->cb_mem);
  45837. 80138ac: 683b ldr r3, [r7, #0]
  45838. 80138ae: 689b ldr r3, [r3, #8]
  45839. 80138b0: 9301 str r3, [sp, #4]
  45840. 80138b2: 4b12 ldr r3, [pc, #72] @ (80138fc <osTimerNew+0xf4>)
  45841. 80138b4: 9300 str r3, [sp, #0]
  45842. 80138b6: 697b ldr r3, [r7, #20]
  45843. 80138b8: 69fa ldr r2, [r7, #28]
  45844. 80138ba: 2101 movs r1, #1
  45845. 80138bc: 6a78 ldr r0, [r7, #36] @ 0x24
  45846. 80138be: f003 f81a bl 80168f6 <xTimerCreateStatic>
  45847. 80138c2: 6238 str r0, [r7, #32]
  45848. 80138c4: e00b b.n 80138de <osTimerNew+0xd6>
  45849. #endif
  45850. }
  45851. else {
  45852. if (mem == 0) {
  45853. 80138c6: 69bb ldr r3, [r7, #24]
  45854. 80138c8: 2b00 cmp r3, #0
  45855. 80138ca: d108 bne.n 80138de <osTimerNew+0xd6>
  45856. #if (configSUPPORT_DYNAMIC_ALLOCATION == 1)
  45857. hTimer = xTimerCreate (name, 1, reload, callb, TimerCallback);
  45858. 80138cc: 4b0b ldr r3, [pc, #44] @ (80138fc <osTimerNew+0xf4>)
  45859. 80138ce: 9300 str r3, [sp, #0]
  45860. 80138d0: 697b ldr r3, [r7, #20]
  45861. 80138d2: 69fa ldr r2, [r7, #28]
  45862. 80138d4: 2101 movs r1, #1
  45863. 80138d6: 6a78 ldr r0, [r7, #36] @ 0x24
  45864. 80138d8: f002 ffec bl 80168b4 <xTimerCreate>
  45865. 80138dc: 6238 str r0, [r7, #32]
  45866. #endif
  45867. }
  45868. }
  45869. if ((hTimer == NULL) && (callb != NULL)) {
  45870. 80138de: 6a3b ldr r3, [r7, #32]
  45871. 80138e0: 2b00 cmp r3, #0
  45872. 80138e2: d105 bne.n 80138f0 <osTimerNew+0xe8>
  45873. 80138e4: 697b ldr r3, [r7, #20]
  45874. 80138e6: 2b00 cmp r3, #0
  45875. 80138e8: d002 beq.n 80138f0 <osTimerNew+0xe8>
  45876. vPortFree (callb);
  45877. 80138ea: 6978 ldr r0, [r7, #20]
  45878. 80138ec: f003 fefc bl 80176e8 <vPortFree>
  45879. }
  45880. }
  45881. }
  45882. return ((osTimerId_t)hTimer);
  45883. 80138f0: 6a3b ldr r3, [r7, #32]
  45884. }
  45885. 80138f2: 4618 mov r0, r3
  45886. 80138f4: 3728 adds r7, #40 @ 0x28
  45887. 80138f6: 46bd mov sp, r7
  45888. 80138f8: bd80 pop {r7, pc}
  45889. 80138fa: bf00 nop
  45890. 80138fc: 080137dd .word 0x080137dd
  45891. 08013900 <osTimerStart>:
  45892. }
  45893. return (p);
  45894. }
  45895. osStatus_t osTimerStart (osTimerId_t timer_id, uint32_t ticks) {
  45896. 8013900: b580 push {r7, lr}
  45897. 8013902: b088 sub sp, #32
  45898. 8013904: af02 add r7, sp, #8
  45899. 8013906: 6078 str r0, [r7, #4]
  45900. 8013908: 6039 str r1, [r7, #0]
  45901. TimerHandle_t hTimer = (TimerHandle_t)timer_id;
  45902. 801390a: 687b ldr r3, [r7, #4]
  45903. 801390c: 613b str r3, [r7, #16]
  45904. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  45905. 801390e: f3ef 8305 mrs r3, IPSR
  45906. 8013912: 60fb str r3, [r7, #12]
  45907. return(result);
  45908. 8013914: 68fb ldr r3, [r7, #12]
  45909. osStatus_t stat;
  45910. if (IS_IRQ()) {
  45911. 8013916: 2b00 cmp r3, #0
  45912. 8013918: d003 beq.n 8013922 <osTimerStart+0x22>
  45913. stat = osErrorISR;
  45914. 801391a: f06f 0305 mvn.w r3, #5
  45915. 801391e: 617b str r3, [r7, #20]
  45916. 8013920: e017 b.n 8013952 <osTimerStart+0x52>
  45917. }
  45918. else if (hTimer == NULL) {
  45919. 8013922: 693b ldr r3, [r7, #16]
  45920. 8013924: 2b00 cmp r3, #0
  45921. 8013926: d103 bne.n 8013930 <osTimerStart+0x30>
  45922. stat = osErrorParameter;
  45923. 8013928: f06f 0303 mvn.w r3, #3
  45924. 801392c: 617b str r3, [r7, #20]
  45925. 801392e: e010 b.n 8013952 <osTimerStart+0x52>
  45926. }
  45927. else {
  45928. if (xTimerChangePeriod (hTimer, ticks, 0) == pdPASS) {
  45929. 8013930: 2300 movs r3, #0
  45930. 8013932: 9300 str r3, [sp, #0]
  45931. 8013934: 2300 movs r3, #0
  45932. 8013936: 683a ldr r2, [r7, #0]
  45933. 8013938: 2104 movs r1, #4
  45934. 801393a: 6938 ldr r0, [r7, #16]
  45935. 801393c: f003 f858 bl 80169f0 <xTimerGenericCommand>
  45936. 8013940: 4603 mov r3, r0
  45937. 8013942: 2b01 cmp r3, #1
  45938. 8013944: d102 bne.n 801394c <osTimerStart+0x4c>
  45939. stat = osOK;
  45940. 8013946: 2300 movs r3, #0
  45941. 8013948: 617b str r3, [r7, #20]
  45942. 801394a: e002 b.n 8013952 <osTimerStart+0x52>
  45943. } else {
  45944. stat = osErrorResource;
  45945. 801394c: f06f 0302 mvn.w r3, #2
  45946. 8013950: 617b str r3, [r7, #20]
  45947. }
  45948. }
  45949. return (stat);
  45950. 8013952: 697b ldr r3, [r7, #20]
  45951. }
  45952. 8013954: 4618 mov r0, r3
  45953. 8013956: 3718 adds r7, #24
  45954. 8013958: 46bd mov sp, r7
  45955. 801395a: bd80 pop {r7, pc}
  45956. 0801395c <osTimerStop>:
  45957. osStatus_t osTimerStop (osTimerId_t timer_id) {
  45958. 801395c: b580 push {r7, lr}
  45959. 801395e: b088 sub sp, #32
  45960. 8013960: af02 add r7, sp, #8
  45961. 8013962: 6078 str r0, [r7, #4]
  45962. TimerHandle_t hTimer = (TimerHandle_t)timer_id;
  45963. 8013964: 687b ldr r3, [r7, #4]
  45964. 8013966: 613b str r3, [r7, #16]
  45965. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  45966. 8013968: f3ef 8305 mrs r3, IPSR
  45967. 801396c: 60fb str r3, [r7, #12]
  45968. return(result);
  45969. 801396e: 68fb ldr r3, [r7, #12]
  45970. osStatus_t stat;
  45971. if (IS_IRQ()) {
  45972. 8013970: 2b00 cmp r3, #0
  45973. 8013972: d003 beq.n 801397c <osTimerStop+0x20>
  45974. stat = osErrorISR;
  45975. 8013974: f06f 0305 mvn.w r3, #5
  45976. 8013978: 617b str r3, [r7, #20]
  45977. 801397a: e021 b.n 80139c0 <osTimerStop+0x64>
  45978. }
  45979. else if (hTimer == NULL) {
  45980. 801397c: 693b ldr r3, [r7, #16]
  45981. 801397e: 2b00 cmp r3, #0
  45982. 8013980: d103 bne.n 801398a <osTimerStop+0x2e>
  45983. stat = osErrorParameter;
  45984. 8013982: f06f 0303 mvn.w r3, #3
  45985. 8013986: 617b str r3, [r7, #20]
  45986. 8013988: e01a b.n 80139c0 <osTimerStop+0x64>
  45987. }
  45988. else {
  45989. if (xTimerIsTimerActive (hTimer) == pdFALSE) {
  45990. 801398a: 6938 ldr r0, [r7, #16]
  45991. 801398c: f003 fb40 bl 8017010 <xTimerIsTimerActive>
  45992. 8013990: 4603 mov r3, r0
  45993. 8013992: 2b00 cmp r3, #0
  45994. 8013994: d103 bne.n 801399e <osTimerStop+0x42>
  45995. stat = osErrorResource;
  45996. 8013996: f06f 0302 mvn.w r3, #2
  45997. 801399a: 617b str r3, [r7, #20]
  45998. 801399c: e010 b.n 80139c0 <osTimerStop+0x64>
  45999. }
  46000. else {
  46001. if (xTimerStop (hTimer, 0) == pdPASS) {
  46002. 801399e: 2300 movs r3, #0
  46003. 80139a0: 9300 str r3, [sp, #0]
  46004. 80139a2: 2300 movs r3, #0
  46005. 80139a4: 2200 movs r2, #0
  46006. 80139a6: 2103 movs r1, #3
  46007. 80139a8: 6938 ldr r0, [r7, #16]
  46008. 80139aa: f003 f821 bl 80169f0 <xTimerGenericCommand>
  46009. 80139ae: 4603 mov r3, r0
  46010. 80139b0: 2b01 cmp r3, #1
  46011. 80139b2: d102 bne.n 80139ba <osTimerStop+0x5e>
  46012. stat = osOK;
  46013. 80139b4: 2300 movs r3, #0
  46014. 80139b6: 617b str r3, [r7, #20]
  46015. 80139b8: e002 b.n 80139c0 <osTimerStop+0x64>
  46016. } else {
  46017. stat = osError;
  46018. 80139ba: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  46019. 80139be: 617b str r3, [r7, #20]
  46020. }
  46021. }
  46022. }
  46023. return (stat);
  46024. 80139c0: 697b ldr r3, [r7, #20]
  46025. }
  46026. 80139c2: 4618 mov r0, r3
  46027. 80139c4: 3718 adds r7, #24
  46028. 80139c6: 46bd mov sp, r7
  46029. 80139c8: bd80 pop {r7, pc}
  46030. 080139ca <osMutexNew>:
  46031. }
  46032. /*---------------------------------------------------------------------------*/
  46033. #if (configUSE_OS2_MUTEX == 1)
  46034. osMutexId_t osMutexNew (const osMutexAttr_t *attr) {
  46035. 80139ca: b580 push {r7, lr}
  46036. 80139cc: b088 sub sp, #32
  46037. 80139ce: af00 add r7, sp, #0
  46038. 80139d0: 6078 str r0, [r7, #4]
  46039. int32_t mem;
  46040. #if (configQUEUE_REGISTRY_SIZE > 0)
  46041. const char *name;
  46042. #endif
  46043. hMutex = NULL;
  46044. 80139d2: 2300 movs r3, #0
  46045. 80139d4: 61fb str r3, [r7, #28]
  46046. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  46047. 80139d6: f3ef 8305 mrs r3, IPSR
  46048. 80139da: 60bb str r3, [r7, #8]
  46049. return(result);
  46050. 80139dc: 68bb ldr r3, [r7, #8]
  46051. if (!IS_IRQ()) {
  46052. 80139de: 2b00 cmp r3, #0
  46053. 80139e0: d174 bne.n 8013acc <osMutexNew+0x102>
  46054. if (attr != NULL) {
  46055. 80139e2: 687b ldr r3, [r7, #4]
  46056. 80139e4: 2b00 cmp r3, #0
  46057. 80139e6: d003 beq.n 80139f0 <osMutexNew+0x26>
  46058. type = attr->attr_bits;
  46059. 80139e8: 687b ldr r3, [r7, #4]
  46060. 80139ea: 685b ldr r3, [r3, #4]
  46061. 80139ec: 61bb str r3, [r7, #24]
  46062. 80139ee: e001 b.n 80139f4 <osMutexNew+0x2a>
  46063. } else {
  46064. type = 0U;
  46065. 80139f0: 2300 movs r3, #0
  46066. 80139f2: 61bb str r3, [r7, #24]
  46067. }
  46068. if ((type & osMutexRecursive) == osMutexRecursive) {
  46069. 80139f4: 69bb ldr r3, [r7, #24]
  46070. 80139f6: f003 0301 and.w r3, r3, #1
  46071. 80139fa: 2b00 cmp r3, #0
  46072. 80139fc: d002 beq.n 8013a04 <osMutexNew+0x3a>
  46073. rmtx = 1U;
  46074. 80139fe: 2301 movs r3, #1
  46075. 8013a00: 617b str r3, [r7, #20]
  46076. 8013a02: e001 b.n 8013a08 <osMutexNew+0x3e>
  46077. } else {
  46078. rmtx = 0U;
  46079. 8013a04: 2300 movs r3, #0
  46080. 8013a06: 617b str r3, [r7, #20]
  46081. }
  46082. if ((type & osMutexRobust) != osMutexRobust) {
  46083. 8013a08: 69bb ldr r3, [r7, #24]
  46084. 8013a0a: f003 0308 and.w r3, r3, #8
  46085. 8013a0e: 2b00 cmp r3, #0
  46086. 8013a10: d15c bne.n 8013acc <osMutexNew+0x102>
  46087. mem = -1;
  46088. 8013a12: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  46089. 8013a16: 613b str r3, [r7, #16]
  46090. if (attr != NULL) {
  46091. 8013a18: 687b ldr r3, [r7, #4]
  46092. 8013a1a: 2b00 cmp r3, #0
  46093. 8013a1c: d015 beq.n 8013a4a <osMutexNew+0x80>
  46094. if ((attr->cb_mem != NULL) && (attr->cb_size >= sizeof(StaticSemaphore_t))) {
  46095. 8013a1e: 687b ldr r3, [r7, #4]
  46096. 8013a20: 689b ldr r3, [r3, #8]
  46097. 8013a22: 2b00 cmp r3, #0
  46098. 8013a24: d006 beq.n 8013a34 <osMutexNew+0x6a>
  46099. 8013a26: 687b ldr r3, [r7, #4]
  46100. 8013a28: 68db ldr r3, [r3, #12]
  46101. 8013a2a: 2b4f cmp r3, #79 @ 0x4f
  46102. 8013a2c: d902 bls.n 8013a34 <osMutexNew+0x6a>
  46103. mem = 1;
  46104. 8013a2e: 2301 movs r3, #1
  46105. 8013a30: 613b str r3, [r7, #16]
  46106. 8013a32: e00c b.n 8013a4e <osMutexNew+0x84>
  46107. }
  46108. else {
  46109. if ((attr->cb_mem == NULL) && (attr->cb_size == 0U)) {
  46110. 8013a34: 687b ldr r3, [r7, #4]
  46111. 8013a36: 689b ldr r3, [r3, #8]
  46112. 8013a38: 2b00 cmp r3, #0
  46113. 8013a3a: d108 bne.n 8013a4e <osMutexNew+0x84>
  46114. 8013a3c: 687b ldr r3, [r7, #4]
  46115. 8013a3e: 68db ldr r3, [r3, #12]
  46116. 8013a40: 2b00 cmp r3, #0
  46117. 8013a42: d104 bne.n 8013a4e <osMutexNew+0x84>
  46118. mem = 0;
  46119. 8013a44: 2300 movs r3, #0
  46120. 8013a46: 613b str r3, [r7, #16]
  46121. 8013a48: e001 b.n 8013a4e <osMutexNew+0x84>
  46122. }
  46123. }
  46124. }
  46125. else {
  46126. mem = 0;
  46127. 8013a4a: 2300 movs r3, #0
  46128. 8013a4c: 613b str r3, [r7, #16]
  46129. }
  46130. if (mem == 1) {
  46131. 8013a4e: 693b ldr r3, [r7, #16]
  46132. 8013a50: 2b01 cmp r3, #1
  46133. 8013a52: d112 bne.n 8013a7a <osMutexNew+0xb0>
  46134. #if (configSUPPORT_STATIC_ALLOCATION == 1)
  46135. if (rmtx != 0U) {
  46136. 8013a54: 697b ldr r3, [r7, #20]
  46137. 8013a56: 2b00 cmp r3, #0
  46138. 8013a58: d007 beq.n 8013a6a <osMutexNew+0xa0>
  46139. #if (configUSE_RECURSIVE_MUTEXES == 1)
  46140. hMutex = xSemaphoreCreateRecursiveMutexStatic (attr->cb_mem);
  46141. 8013a5a: 687b ldr r3, [r7, #4]
  46142. 8013a5c: 689b ldr r3, [r3, #8]
  46143. 8013a5e: 4619 mov r1, r3
  46144. 8013a60: 2004 movs r0, #4
  46145. 8013a62: f000 fc50 bl 8014306 <xQueueCreateMutexStatic>
  46146. 8013a66: 61f8 str r0, [r7, #28]
  46147. 8013a68: e016 b.n 8013a98 <osMutexNew+0xce>
  46148. #endif
  46149. }
  46150. else {
  46151. hMutex = xSemaphoreCreateMutexStatic (attr->cb_mem);
  46152. 8013a6a: 687b ldr r3, [r7, #4]
  46153. 8013a6c: 689b ldr r3, [r3, #8]
  46154. 8013a6e: 4619 mov r1, r3
  46155. 8013a70: 2001 movs r0, #1
  46156. 8013a72: f000 fc48 bl 8014306 <xQueueCreateMutexStatic>
  46157. 8013a76: 61f8 str r0, [r7, #28]
  46158. 8013a78: e00e b.n 8013a98 <osMutexNew+0xce>
  46159. }
  46160. #endif
  46161. }
  46162. else {
  46163. if (mem == 0) {
  46164. 8013a7a: 693b ldr r3, [r7, #16]
  46165. 8013a7c: 2b00 cmp r3, #0
  46166. 8013a7e: d10b bne.n 8013a98 <osMutexNew+0xce>
  46167. #if (configSUPPORT_DYNAMIC_ALLOCATION == 1)
  46168. if (rmtx != 0U) {
  46169. 8013a80: 697b ldr r3, [r7, #20]
  46170. 8013a82: 2b00 cmp r3, #0
  46171. 8013a84: d004 beq.n 8013a90 <osMutexNew+0xc6>
  46172. #if (configUSE_RECURSIVE_MUTEXES == 1)
  46173. hMutex = xSemaphoreCreateRecursiveMutex ();
  46174. 8013a86: 2004 movs r0, #4
  46175. 8013a88: f000 fc25 bl 80142d6 <xQueueCreateMutex>
  46176. 8013a8c: 61f8 str r0, [r7, #28]
  46177. 8013a8e: e003 b.n 8013a98 <osMutexNew+0xce>
  46178. #endif
  46179. } else {
  46180. hMutex = xSemaphoreCreateMutex ();
  46181. 8013a90: 2001 movs r0, #1
  46182. 8013a92: f000 fc20 bl 80142d6 <xQueueCreateMutex>
  46183. 8013a96: 61f8 str r0, [r7, #28]
  46184. #endif
  46185. }
  46186. }
  46187. #if (configQUEUE_REGISTRY_SIZE > 0)
  46188. if (hMutex != NULL) {
  46189. 8013a98: 69fb ldr r3, [r7, #28]
  46190. 8013a9a: 2b00 cmp r3, #0
  46191. 8013a9c: d00c beq.n 8013ab8 <osMutexNew+0xee>
  46192. if (attr != NULL) {
  46193. 8013a9e: 687b ldr r3, [r7, #4]
  46194. 8013aa0: 2b00 cmp r3, #0
  46195. 8013aa2: d003 beq.n 8013aac <osMutexNew+0xe2>
  46196. name = attr->name;
  46197. 8013aa4: 687b ldr r3, [r7, #4]
  46198. 8013aa6: 681b ldr r3, [r3, #0]
  46199. 8013aa8: 60fb str r3, [r7, #12]
  46200. 8013aaa: e001 b.n 8013ab0 <osMutexNew+0xe6>
  46201. } else {
  46202. name = NULL;
  46203. 8013aac: 2300 movs r3, #0
  46204. 8013aae: 60fb str r3, [r7, #12]
  46205. }
  46206. vQueueAddToRegistry (hMutex, name);
  46207. 8013ab0: 68f9 ldr r1, [r7, #12]
  46208. 8013ab2: 69f8 ldr r0, [r7, #28]
  46209. 8013ab4: f001 f9ea bl 8014e8c <vQueueAddToRegistry>
  46210. }
  46211. #endif
  46212. if ((hMutex != NULL) && (rmtx != 0U)) {
  46213. 8013ab8: 69fb ldr r3, [r7, #28]
  46214. 8013aba: 2b00 cmp r3, #0
  46215. 8013abc: d006 beq.n 8013acc <osMutexNew+0x102>
  46216. 8013abe: 697b ldr r3, [r7, #20]
  46217. 8013ac0: 2b00 cmp r3, #0
  46218. 8013ac2: d003 beq.n 8013acc <osMutexNew+0x102>
  46219. hMutex = (SemaphoreHandle_t)((uint32_t)hMutex | 1U);
  46220. 8013ac4: 69fb ldr r3, [r7, #28]
  46221. 8013ac6: f043 0301 orr.w r3, r3, #1
  46222. 8013aca: 61fb str r3, [r7, #28]
  46223. }
  46224. }
  46225. }
  46226. return ((osMutexId_t)hMutex);
  46227. 8013acc: 69fb ldr r3, [r7, #28]
  46228. }
  46229. 8013ace: 4618 mov r0, r3
  46230. 8013ad0: 3720 adds r7, #32
  46231. 8013ad2: 46bd mov sp, r7
  46232. 8013ad4: bd80 pop {r7, pc}
  46233. 08013ad6 <osMutexAcquire>:
  46234. osStatus_t osMutexAcquire (osMutexId_t mutex_id, uint32_t timeout) {
  46235. 8013ad6: b580 push {r7, lr}
  46236. 8013ad8: b086 sub sp, #24
  46237. 8013ada: af00 add r7, sp, #0
  46238. 8013adc: 6078 str r0, [r7, #4]
  46239. 8013ade: 6039 str r1, [r7, #0]
  46240. SemaphoreHandle_t hMutex;
  46241. osStatus_t stat;
  46242. uint32_t rmtx;
  46243. hMutex = (SemaphoreHandle_t)((uint32_t)mutex_id & ~1U);
  46244. 8013ae0: 687b ldr r3, [r7, #4]
  46245. 8013ae2: f023 0301 bic.w r3, r3, #1
  46246. 8013ae6: 613b str r3, [r7, #16]
  46247. rmtx = (uint32_t)mutex_id & 1U;
  46248. 8013ae8: 687b ldr r3, [r7, #4]
  46249. 8013aea: f003 0301 and.w r3, r3, #1
  46250. 8013aee: 60fb str r3, [r7, #12]
  46251. stat = osOK;
  46252. 8013af0: 2300 movs r3, #0
  46253. 8013af2: 617b str r3, [r7, #20]
  46254. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  46255. 8013af4: f3ef 8305 mrs r3, IPSR
  46256. 8013af8: 60bb str r3, [r7, #8]
  46257. return(result);
  46258. 8013afa: 68bb ldr r3, [r7, #8]
  46259. if (IS_IRQ()) {
  46260. 8013afc: 2b00 cmp r3, #0
  46261. 8013afe: d003 beq.n 8013b08 <osMutexAcquire+0x32>
  46262. stat = osErrorISR;
  46263. 8013b00: f06f 0305 mvn.w r3, #5
  46264. 8013b04: 617b str r3, [r7, #20]
  46265. 8013b06: e02c b.n 8013b62 <osMutexAcquire+0x8c>
  46266. }
  46267. else if (hMutex == NULL) {
  46268. 8013b08: 693b ldr r3, [r7, #16]
  46269. 8013b0a: 2b00 cmp r3, #0
  46270. 8013b0c: d103 bne.n 8013b16 <osMutexAcquire+0x40>
  46271. stat = osErrorParameter;
  46272. 8013b0e: f06f 0303 mvn.w r3, #3
  46273. 8013b12: 617b str r3, [r7, #20]
  46274. 8013b14: e025 b.n 8013b62 <osMutexAcquire+0x8c>
  46275. }
  46276. else {
  46277. if (rmtx != 0U) {
  46278. 8013b16: 68fb ldr r3, [r7, #12]
  46279. 8013b18: 2b00 cmp r3, #0
  46280. 8013b1a: d011 beq.n 8013b40 <osMutexAcquire+0x6a>
  46281. #if (configUSE_RECURSIVE_MUTEXES == 1)
  46282. if (xSemaphoreTakeRecursive (hMutex, timeout) != pdPASS) {
  46283. 8013b1c: 6839 ldr r1, [r7, #0]
  46284. 8013b1e: 6938 ldr r0, [r7, #16]
  46285. 8013b20: f000 fc41 bl 80143a6 <xQueueTakeMutexRecursive>
  46286. 8013b24: 4603 mov r3, r0
  46287. 8013b26: 2b01 cmp r3, #1
  46288. 8013b28: d01b beq.n 8013b62 <osMutexAcquire+0x8c>
  46289. if (timeout != 0U) {
  46290. 8013b2a: 683b ldr r3, [r7, #0]
  46291. 8013b2c: 2b00 cmp r3, #0
  46292. 8013b2e: d003 beq.n 8013b38 <osMutexAcquire+0x62>
  46293. stat = osErrorTimeout;
  46294. 8013b30: f06f 0301 mvn.w r3, #1
  46295. 8013b34: 617b str r3, [r7, #20]
  46296. 8013b36: e014 b.n 8013b62 <osMutexAcquire+0x8c>
  46297. } else {
  46298. stat = osErrorResource;
  46299. 8013b38: f06f 0302 mvn.w r3, #2
  46300. 8013b3c: 617b str r3, [r7, #20]
  46301. 8013b3e: e010 b.n 8013b62 <osMutexAcquire+0x8c>
  46302. }
  46303. }
  46304. #endif
  46305. }
  46306. else {
  46307. if (xSemaphoreTake (hMutex, timeout) != pdPASS) {
  46308. 8013b40: 6839 ldr r1, [r7, #0]
  46309. 8013b42: 6938 ldr r0, [r7, #16]
  46310. 8013b44: f000 fee8 bl 8014918 <xQueueSemaphoreTake>
  46311. 8013b48: 4603 mov r3, r0
  46312. 8013b4a: 2b01 cmp r3, #1
  46313. 8013b4c: d009 beq.n 8013b62 <osMutexAcquire+0x8c>
  46314. if (timeout != 0U) {
  46315. 8013b4e: 683b ldr r3, [r7, #0]
  46316. 8013b50: 2b00 cmp r3, #0
  46317. 8013b52: d003 beq.n 8013b5c <osMutexAcquire+0x86>
  46318. stat = osErrorTimeout;
  46319. 8013b54: f06f 0301 mvn.w r3, #1
  46320. 8013b58: 617b str r3, [r7, #20]
  46321. 8013b5a: e002 b.n 8013b62 <osMutexAcquire+0x8c>
  46322. } else {
  46323. stat = osErrorResource;
  46324. 8013b5c: f06f 0302 mvn.w r3, #2
  46325. 8013b60: 617b str r3, [r7, #20]
  46326. }
  46327. }
  46328. }
  46329. }
  46330. return (stat);
  46331. 8013b62: 697b ldr r3, [r7, #20]
  46332. }
  46333. 8013b64: 4618 mov r0, r3
  46334. 8013b66: 3718 adds r7, #24
  46335. 8013b68: 46bd mov sp, r7
  46336. 8013b6a: bd80 pop {r7, pc}
  46337. 08013b6c <osMutexRelease>:
  46338. osStatus_t osMutexRelease (osMutexId_t mutex_id) {
  46339. 8013b6c: b580 push {r7, lr}
  46340. 8013b6e: b086 sub sp, #24
  46341. 8013b70: af00 add r7, sp, #0
  46342. 8013b72: 6078 str r0, [r7, #4]
  46343. SemaphoreHandle_t hMutex;
  46344. osStatus_t stat;
  46345. uint32_t rmtx;
  46346. hMutex = (SemaphoreHandle_t)((uint32_t)mutex_id & ~1U);
  46347. 8013b74: 687b ldr r3, [r7, #4]
  46348. 8013b76: f023 0301 bic.w r3, r3, #1
  46349. 8013b7a: 613b str r3, [r7, #16]
  46350. rmtx = (uint32_t)mutex_id & 1U;
  46351. 8013b7c: 687b ldr r3, [r7, #4]
  46352. 8013b7e: f003 0301 and.w r3, r3, #1
  46353. 8013b82: 60fb str r3, [r7, #12]
  46354. stat = osOK;
  46355. 8013b84: 2300 movs r3, #0
  46356. 8013b86: 617b str r3, [r7, #20]
  46357. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  46358. 8013b88: f3ef 8305 mrs r3, IPSR
  46359. 8013b8c: 60bb str r3, [r7, #8]
  46360. return(result);
  46361. 8013b8e: 68bb ldr r3, [r7, #8]
  46362. if (IS_IRQ()) {
  46363. 8013b90: 2b00 cmp r3, #0
  46364. 8013b92: d003 beq.n 8013b9c <osMutexRelease+0x30>
  46365. stat = osErrorISR;
  46366. 8013b94: f06f 0305 mvn.w r3, #5
  46367. 8013b98: 617b str r3, [r7, #20]
  46368. 8013b9a: e01f b.n 8013bdc <osMutexRelease+0x70>
  46369. }
  46370. else if (hMutex == NULL) {
  46371. 8013b9c: 693b ldr r3, [r7, #16]
  46372. 8013b9e: 2b00 cmp r3, #0
  46373. 8013ba0: d103 bne.n 8013baa <osMutexRelease+0x3e>
  46374. stat = osErrorParameter;
  46375. 8013ba2: f06f 0303 mvn.w r3, #3
  46376. 8013ba6: 617b str r3, [r7, #20]
  46377. 8013ba8: e018 b.n 8013bdc <osMutexRelease+0x70>
  46378. }
  46379. else {
  46380. if (rmtx != 0U) {
  46381. 8013baa: 68fb ldr r3, [r7, #12]
  46382. 8013bac: 2b00 cmp r3, #0
  46383. 8013bae: d009 beq.n 8013bc4 <osMutexRelease+0x58>
  46384. #if (configUSE_RECURSIVE_MUTEXES == 1)
  46385. if (xSemaphoreGiveRecursive (hMutex) != pdPASS) {
  46386. 8013bb0: 6938 ldr r0, [r7, #16]
  46387. 8013bb2: f000 fbc3 bl 801433c <xQueueGiveMutexRecursive>
  46388. 8013bb6: 4603 mov r3, r0
  46389. 8013bb8: 2b01 cmp r3, #1
  46390. 8013bba: d00f beq.n 8013bdc <osMutexRelease+0x70>
  46391. stat = osErrorResource;
  46392. 8013bbc: f06f 0302 mvn.w r3, #2
  46393. 8013bc0: 617b str r3, [r7, #20]
  46394. 8013bc2: e00b b.n 8013bdc <osMutexRelease+0x70>
  46395. }
  46396. #endif
  46397. }
  46398. else {
  46399. if (xSemaphoreGive (hMutex) != pdPASS) {
  46400. 8013bc4: 2300 movs r3, #0
  46401. 8013bc6: 2200 movs r2, #0
  46402. 8013bc8: 2100 movs r1, #0
  46403. 8013bca: 6938 ldr r0, [r7, #16]
  46404. 8013bcc: f000 fc22 bl 8014414 <xQueueGenericSend>
  46405. 8013bd0: 4603 mov r3, r0
  46406. 8013bd2: 2b01 cmp r3, #1
  46407. 8013bd4: d002 beq.n 8013bdc <osMutexRelease+0x70>
  46408. stat = osErrorResource;
  46409. 8013bd6: f06f 0302 mvn.w r3, #2
  46410. 8013bda: 617b str r3, [r7, #20]
  46411. }
  46412. }
  46413. }
  46414. return (stat);
  46415. 8013bdc: 697b ldr r3, [r7, #20]
  46416. }
  46417. 8013bde: 4618 mov r0, r3
  46418. 8013be0: 3718 adds r7, #24
  46419. 8013be2: 46bd mov sp, r7
  46420. 8013be4: bd80 pop {r7, pc}
  46421. 08013be6 <osMessageQueueNew>:
  46422. return (stat);
  46423. }
  46424. /*---------------------------------------------------------------------------*/
  46425. osMessageQueueId_t osMessageQueueNew (uint32_t msg_count, uint32_t msg_size, const osMessageQueueAttr_t *attr) {
  46426. 8013be6: b580 push {r7, lr}
  46427. 8013be8: b08a sub sp, #40 @ 0x28
  46428. 8013bea: af02 add r7, sp, #8
  46429. 8013bec: 60f8 str r0, [r7, #12]
  46430. 8013bee: 60b9 str r1, [r7, #8]
  46431. 8013bf0: 607a str r2, [r7, #4]
  46432. int32_t mem;
  46433. #if (configQUEUE_REGISTRY_SIZE > 0)
  46434. const char *name;
  46435. #endif
  46436. hQueue = NULL;
  46437. 8013bf2: 2300 movs r3, #0
  46438. 8013bf4: 61fb str r3, [r7, #28]
  46439. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  46440. 8013bf6: f3ef 8305 mrs r3, IPSR
  46441. 8013bfa: 613b str r3, [r7, #16]
  46442. return(result);
  46443. 8013bfc: 693b ldr r3, [r7, #16]
  46444. if (!IS_IRQ() && (msg_count > 0U) && (msg_size > 0U)) {
  46445. 8013bfe: 2b00 cmp r3, #0
  46446. 8013c00: d15f bne.n 8013cc2 <osMessageQueueNew+0xdc>
  46447. 8013c02: 68fb ldr r3, [r7, #12]
  46448. 8013c04: 2b00 cmp r3, #0
  46449. 8013c06: d05c beq.n 8013cc2 <osMessageQueueNew+0xdc>
  46450. 8013c08: 68bb ldr r3, [r7, #8]
  46451. 8013c0a: 2b00 cmp r3, #0
  46452. 8013c0c: d059 beq.n 8013cc2 <osMessageQueueNew+0xdc>
  46453. mem = -1;
  46454. 8013c0e: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  46455. 8013c12: 61bb str r3, [r7, #24]
  46456. if (attr != NULL) {
  46457. 8013c14: 687b ldr r3, [r7, #4]
  46458. 8013c16: 2b00 cmp r3, #0
  46459. 8013c18: d029 beq.n 8013c6e <osMessageQueueNew+0x88>
  46460. if ((attr->cb_mem != NULL) && (attr->cb_size >= sizeof(StaticQueue_t)) &&
  46461. 8013c1a: 687b ldr r3, [r7, #4]
  46462. 8013c1c: 689b ldr r3, [r3, #8]
  46463. 8013c1e: 2b00 cmp r3, #0
  46464. 8013c20: d012 beq.n 8013c48 <osMessageQueueNew+0x62>
  46465. 8013c22: 687b ldr r3, [r7, #4]
  46466. 8013c24: 68db ldr r3, [r3, #12]
  46467. 8013c26: 2b4f cmp r3, #79 @ 0x4f
  46468. 8013c28: d90e bls.n 8013c48 <osMessageQueueNew+0x62>
  46469. (attr->mq_mem != NULL) && (attr->mq_size >= (msg_count * msg_size))) {
  46470. 8013c2a: 687b ldr r3, [r7, #4]
  46471. 8013c2c: 691b ldr r3, [r3, #16]
  46472. if ((attr->cb_mem != NULL) && (attr->cb_size >= sizeof(StaticQueue_t)) &&
  46473. 8013c2e: 2b00 cmp r3, #0
  46474. 8013c30: d00a beq.n 8013c48 <osMessageQueueNew+0x62>
  46475. (attr->mq_mem != NULL) && (attr->mq_size >= (msg_count * msg_size))) {
  46476. 8013c32: 687b ldr r3, [r7, #4]
  46477. 8013c34: 695a ldr r2, [r3, #20]
  46478. 8013c36: 68fb ldr r3, [r7, #12]
  46479. 8013c38: 68b9 ldr r1, [r7, #8]
  46480. 8013c3a: fb01 f303 mul.w r3, r1, r3
  46481. 8013c3e: 429a cmp r2, r3
  46482. 8013c40: d302 bcc.n 8013c48 <osMessageQueueNew+0x62>
  46483. mem = 1;
  46484. 8013c42: 2301 movs r3, #1
  46485. 8013c44: 61bb str r3, [r7, #24]
  46486. 8013c46: e014 b.n 8013c72 <osMessageQueueNew+0x8c>
  46487. }
  46488. else {
  46489. if ((attr->cb_mem == NULL) && (attr->cb_size == 0U) &&
  46490. 8013c48: 687b ldr r3, [r7, #4]
  46491. 8013c4a: 689b ldr r3, [r3, #8]
  46492. 8013c4c: 2b00 cmp r3, #0
  46493. 8013c4e: d110 bne.n 8013c72 <osMessageQueueNew+0x8c>
  46494. 8013c50: 687b ldr r3, [r7, #4]
  46495. 8013c52: 68db ldr r3, [r3, #12]
  46496. 8013c54: 2b00 cmp r3, #0
  46497. 8013c56: d10c bne.n 8013c72 <osMessageQueueNew+0x8c>
  46498. (attr->mq_mem == NULL) && (attr->mq_size == 0U)) {
  46499. 8013c58: 687b ldr r3, [r7, #4]
  46500. 8013c5a: 691b ldr r3, [r3, #16]
  46501. if ((attr->cb_mem == NULL) && (attr->cb_size == 0U) &&
  46502. 8013c5c: 2b00 cmp r3, #0
  46503. 8013c5e: d108 bne.n 8013c72 <osMessageQueueNew+0x8c>
  46504. (attr->mq_mem == NULL) && (attr->mq_size == 0U)) {
  46505. 8013c60: 687b ldr r3, [r7, #4]
  46506. 8013c62: 695b ldr r3, [r3, #20]
  46507. 8013c64: 2b00 cmp r3, #0
  46508. 8013c66: d104 bne.n 8013c72 <osMessageQueueNew+0x8c>
  46509. mem = 0;
  46510. 8013c68: 2300 movs r3, #0
  46511. 8013c6a: 61bb str r3, [r7, #24]
  46512. 8013c6c: e001 b.n 8013c72 <osMessageQueueNew+0x8c>
  46513. }
  46514. }
  46515. }
  46516. else {
  46517. mem = 0;
  46518. 8013c6e: 2300 movs r3, #0
  46519. 8013c70: 61bb str r3, [r7, #24]
  46520. }
  46521. if (mem == 1) {
  46522. 8013c72: 69bb ldr r3, [r7, #24]
  46523. 8013c74: 2b01 cmp r3, #1
  46524. 8013c76: d10b bne.n 8013c90 <osMessageQueueNew+0xaa>
  46525. #if (configSUPPORT_STATIC_ALLOCATION == 1)
  46526. hQueue = xQueueCreateStatic (msg_count, msg_size, attr->mq_mem, attr->cb_mem);
  46527. 8013c78: 687b ldr r3, [r7, #4]
  46528. 8013c7a: 691a ldr r2, [r3, #16]
  46529. 8013c7c: 687b ldr r3, [r7, #4]
  46530. 8013c7e: 689b ldr r3, [r3, #8]
  46531. 8013c80: 2100 movs r1, #0
  46532. 8013c82: 9100 str r1, [sp, #0]
  46533. 8013c84: 68b9 ldr r1, [r7, #8]
  46534. 8013c86: 68f8 ldr r0, [r7, #12]
  46535. 8013c88: f000 fa30 bl 80140ec <xQueueGenericCreateStatic>
  46536. 8013c8c: 61f8 str r0, [r7, #28]
  46537. 8013c8e: e008 b.n 8013ca2 <osMessageQueueNew+0xbc>
  46538. #endif
  46539. }
  46540. else {
  46541. if (mem == 0) {
  46542. 8013c90: 69bb ldr r3, [r7, #24]
  46543. 8013c92: 2b00 cmp r3, #0
  46544. 8013c94: d105 bne.n 8013ca2 <osMessageQueueNew+0xbc>
  46545. #if (configSUPPORT_DYNAMIC_ALLOCATION == 1)
  46546. hQueue = xQueueCreate (msg_count, msg_size);
  46547. 8013c96: 2200 movs r2, #0
  46548. 8013c98: 68b9 ldr r1, [r7, #8]
  46549. 8013c9a: 68f8 ldr r0, [r7, #12]
  46550. 8013c9c: f000 faa3 bl 80141e6 <xQueueGenericCreate>
  46551. 8013ca0: 61f8 str r0, [r7, #28]
  46552. #endif
  46553. }
  46554. }
  46555. #if (configQUEUE_REGISTRY_SIZE > 0)
  46556. if (hQueue != NULL) {
  46557. 8013ca2: 69fb ldr r3, [r7, #28]
  46558. 8013ca4: 2b00 cmp r3, #0
  46559. 8013ca6: d00c beq.n 8013cc2 <osMessageQueueNew+0xdc>
  46560. if (attr != NULL) {
  46561. 8013ca8: 687b ldr r3, [r7, #4]
  46562. 8013caa: 2b00 cmp r3, #0
  46563. 8013cac: d003 beq.n 8013cb6 <osMessageQueueNew+0xd0>
  46564. name = attr->name;
  46565. 8013cae: 687b ldr r3, [r7, #4]
  46566. 8013cb0: 681b ldr r3, [r3, #0]
  46567. 8013cb2: 617b str r3, [r7, #20]
  46568. 8013cb4: e001 b.n 8013cba <osMessageQueueNew+0xd4>
  46569. } else {
  46570. name = NULL;
  46571. 8013cb6: 2300 movs r3, #0
  46572. 8013cb8: 617b str r3, [r7, #20]
  46573. }
  46574. vQueueAddToRegistry (hQueue, name);
  46575. 8013cba: 6979 ldr r1, [r7, #20]
  46576. 8013cbc: 69f8 ldr r0, [r7, #28]
  46577. 8013cbe: f001 f8e5 bl 8014e8c <vQueueAddToRegistry>
  46578. }
  46579. #endif
  46580. }
  46581. return ((osMessageQueueId_t)hQueue);
  46582. 8013cc2: 69fb ldr r3, [r7, #28]
  46583. }
  46584. 8013cc4: 4618 mov r0, r3
  46585. 8013cc6: 3720 adds r7, #32
  46586. 8013cc8: 46bd mov sp, r7
  46587. 8013cca: bd80 pop {r7, pc}
  46588. 08013ccc <osMessageQueuePut>:
  46589. osStatus_t osMessageQueuePut (osMessageQueueId_t mq_id, const void *msg_ptr, uint8_t msg_prio, uint32_t timeout) {
  46590. 8013ccc: b580 push {r7, lr}
  46591. 8013cce: b088 sub sp, #32
  46592. 8013cd0: af00 add r7, sp, #0
  46593. 8013cd2: 60f8 str r0, [r7, #12]
  46594. 8013cd4: 60b9 str r1, [r7, #8]
  46595. 8013cd6: 603b str r3, [r7, #0]
  46596. 8013cd8: 4613 mov r3, r2
  46597. 8013cda: 71fb strb r3, [r7, #7]
  46598. QueueHandle_t hQueue = (QueueHandle_t)mq_id;
  46599. 8013cdc: 68fb ldr r3, [r7, #12]
  46600. 8013cde: 61bb str r3, [r7, #24]
  46601. osStatus_t stat;
  46602. BaseType_t yield;
  46603. (void)msg_prio; /* Message priority is ignored */
  46604. stat = osOK;
  46605. 8013ce0: 2300 movs r3, #0
  46606. 8013ce2: 61fb str r3, [r7, #28]
  46607. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  46608. 8013ce4: f3ef 8305 mrs r3, IPSR
  46609. 8013ce8: 617b str r3, [r7, #20]
  46610. return(result);
  46611. 8013cea: 697b ldr r3, [r7, #20]
  46612. if (IS_IRQ()) {
  46613. 8013cec: 2b00 cmp r3, #0
  46614. 8013cee: d028 beq.n 8013d42 <osMessageQueuePut+0x76>
  46615. if ((hQueue == NULL) || (msg_ptr == NULL) || (timeout != 0U)) {
  46616. 8013cf0: 69bb ldr r3, [r7, #24]
  46617. 8013cf2: 2b00 cmp r3, #0
  46618. 8013cf4: d005 beq.n 8013d02 <osMessageQueuePut+0x36>
  46619. 8013cf6: 68bb ldr r3, [r7, #8]
  46620. 8013cf8: 2b00 cmp r3, #0
  46621. 8013cfa: d002 beq.n 8013d02 <osMessageQueuePut+0x36>
  46622. 8013cfc: 683b ldr r3, [r7, #0]
  46623. 8013cfe: 2b00 cmp r3, #0
  46624. 8013d00: d003 beq.n 8013d0a <osMessageQueuePut+0x3e>
  46625. stat = osErrorParameter;
  46626. 8013d02: f06f 0303 mvn.w r3, #3
  46627. 8013d06: 61fb str r3, [r7, #28]
  46628. 8013d08: e038 b.n 8013d7c <osMessageQueuePut+0xb0>
  46629. }
  46630. else {
  46631. yield = pdFALSE;
  46632. 8013d0a: 2300 movs r3, #0
  46633. 8013d0c: 613b str r3, [r7, #16]
  46634. if (xQueueSendToBackFromISR (hQueue, msg_ptr, &yield) != pdTRUE) {
  46635. 8013d0e: f107 0210 add.w r2, r7, #16
  46636. 8013d12: 2300 movs r3, #0
  46637. 8013d14: 68b9 ldr r1, [r7, #8]
  46638. 8013d16: 69b8 ldr r0, [r7, #24]
  46639. 8013d18: f000 fc7e bl 8014618 <xQueueGenericSendFromISR>
  46640. 8013d1c: 4603 mov r3, r0
  46641. 8013d1e: 2b01 cmp r3, #1
  46642. 8013d20: d003 beq.n 8013d2a <osMessageQueuePut+0x5e>
  46643. stat = osErrorResource;
  46644. 8013d22: f06f 0302 mvn.w r3, #2
  46645. 8013d26: 61fb str r3, [r7, #28]
  46646. 8013d28: e028 b.n 8013d7c <osMessageQueuePut+0xb0>
  46647. } else {
  46648. portYIELD_FROM_ISR (yield);
  46649. 8013d2a: 693b ldr r3, [r7, #16]
  46650. 8013d2c: 2b00 cmp r3, #0
  46651. 8013d2e: d025 beq.n 8013d7c <osMessageQueuePut+0xb0>
  46652. 8013d30: 4b15 ldr r3, [pc, #84] @ (8013d88 <osMessageQueuePut+0xbc>)
  46653. 8013d32: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  46654. 8013d36: 601a str r2, [r3, #0]
  46655. 8013d38: f3bf 8f4f dsb sy
  46656. 8013d3c: f3bf 8f6f isb sy
  46657. 8013d40: e01c b.n 8013d7c <osMessageQueuePut+0xb0>
  46658. }
  46659. }
  46660. }
  46661. else {
  46662. if ((hQueue == NULL) || (msg_ptr == NULL)) {
  46663. 8013d42: 69bb ldr r3, [r7, #24]
  46664. 8013d44: 2b00 cmp r3, #0
  46665. 8013d46: d002 beq.n 8013d4e <osMessageQueuePut+0x82>
  46666. 8013d48: 68bb ldr r3, [r7, #8]
  46667. 8013d4a: 2b00 cmp r3, #0
  46668. 8013d4c: d103 bne.n 8013d56 <osMessageQueuePut+0x8a>
  46669. stat = osErrorParameter;
  46670. 8013d4e: f06f 0303 mvn.w r3, #3
  46671. 8013d52: 61fb str r3, [r7, #28]
  46672. 8013d54: e012 b.n 8013d7c <osMessageQueuePut+0xb0>
  46673. }
  46674. else {
  46675. if (xQueueSendToBack (hQueue, msg_ptr, (TickType_t)timeout) != pdPASS) {
  46676. 8013d56: 2300 movs r3, #0
  46677. 8013d58: 683a ldr r2, [r7, #0]
  46678. 8013d5a: 68b9 ldr r1, [r7, #8]
  46679. 8013d5c: 69b8 ldr r0, [r7, #24]
  46680. 8013d5e: f000 fb59 bl 8014414 <xQueueGenericSend>
  46681. 8013d62: 4603 mov r3, r0
  46682. 8013d64: 2b01 cmp r3, #1
  46683. 8013d66: d009 beq.n 8013d7c <osMessageQueuePut+0xb0>
  46684. if (timeout != 0U) {
  46685. 8013d68: 683b ldr r3, [r7, #0]
  46686. 8013d6a: 2b00 cmp r3, #0
  46687. 8013d6c: d003 beq.n 8013d76 <osMessageQueuePut+0xaa>
  46688. stat = osErrorTimeout;
  46689. 8013d6e: f06f 0301 mvn.w r3, #1
  46690. 8013d72: 61fb str r3, [r7, #28]
  46691. 8013d74: e002 b.n 8013d7c <osMessageQueuePut+0xb0>
  46692. } else {
  46693. stat = osErrorResource;
  46694. 8013d76: f06f 0302 mvn.w r3, #2
  46695. 8013d7a: 61fb str r3, [r7, #28]
  46696. }
  46697. }
  46698. }
  46699. }
  46700. return (stat);
  46701. 8013d7c: 69fb ldr r3, [r7, #28]
  46702. }
  46703. 8013d7e: 4618 mov r0, r3
  46704. 8013d80: 3720 adds r7, #32
  46705. 8013d82: 46bd mov sp, r7
  46706. 8013d84: bd80 pop {r7, pc}
  46707. 8013d86: bf00 nop
  46708. 8013d88: e000ed04 .word 0xe000ed04
  46709. 08013d8c <osMessageQueueGet>:
  46710. osStatus_t osMessageQueueGet (osMessageQueueId_t mq_id, void *msg_ptr, uint8_t *msg_prio, uint32_t timeout) {
  46711. 8013d8c: b580 push {r7, lr}
  46712. 8013d8e: b088 sub sp, #32
  46713. 8013d90: af00 add r7, sp, #0
  46714. 8013d92: 60f8 str r0, [r7, #12]
  46715. 8013d94: 60b9 str r1, [r7, #8]
  46716. 8013d96: 607a str r2, [r7, #4]
  46717. 8013d98: 603b str r3, [r7, #0]
  46718. QueueHandle_t hQueue = (QueueHandle_t)mq_id;
  46719. 8013d9a: 68fb ldr r3, [r7, #12]
  46720. 8013d9c: 61bb str r3, [r7, #24]
  46721. osStatus_t stat;
  46722. BaseType_t yield;
  46723. (void)msg_prio; /* Message priority is ignored */
  46724. stat = osOK;
  46725. 8013d9e: 2300 movs r3, #0
  46726. 8013da0: 61fb str r3, [r7, #28]
  46727. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  46728. 8013da2: f3ef 8305 mrs r3, IPSR
  46729. 8013da6: 617b str r3, [r7, #20]
  46730. return(result);
  46731. 8013da8: 697b ldr r3, [r7, #20]
  46732. if (IS_IRQ()) {
  46733. 8013daa: 2b00 cmp r3, #0
  46734. 8013dac: d028 beq.n 8013e00 <osMessageQueueGet+0x74>
  46735. if ((hQueue == NULL) || (msg_ptr == NULL) || (timeout != 0U)) {
  46736. 8013dae: 69bb ldr r3, [r7, #24]
  46737. 8013db0: 2b00 cmp r3, #0
  46738. 8013db2: d005 beq.n 8013dc0 <osMessageQueueGet+0x34>
  46739. 8013db4: 68bb ldr r3, [r7, #8]
  46740. 8013db6: 2b00 cmp r3, #0
  46741. 8013db8: d002 beq.n 8013dc0 <osMessageQueueGet+0x34>
  46742. 8013dba: 683b ldr r3, [r7, #0]
  46743. 8013dbc: 2b00 cmp r3, #0
  46744. 8013dbe: d003 beq.n 8013dc8 <osMessageQueueGet+0x3c>
  46745. stat = osErrorParameter;
  46746. 8013dc0: f06f 0303 mvn.w r3, #3
  46747. 8013dc4: 61fb str r3, [r7, #28]
  46748. 8013dc6: e037 b.n 8013e38 <osMessageQueueGet+0xac>
  46749. }
  46750. else {
  46751. yield = pdFALSE;
  46752. 8013dc8: 2300 movs r3, #0
  46753. 8013dca: 613b str r3, [r7, #16]
  46754. if (xQueueReceiveFromISR (hQueue, msg_ptr, &yield) != pdPASS) {
  46755. 8013dcc: f107 0310 add.w r3, r7, #16
  46756. 8013dd0: 461a mov r2, r3
  46757. 8013dd2: 68b9 ldr r1, [r7, #8]
  46758. 8013dd4: 69b8 ldr r0, [r7, #24]
  46759. 8013dd6: f000 feaf bl 8014b38 <xQueueReceiveFromISR>
  46760. 8013dda: 4603 mov r3, r0
  46761. 8013ddc: 2b01 cmp r3, #1
  46762. 8013dde: d003 beq.n 8013de8 <osMessageQueueGet+0x5c>
  46763. stat = osErrorResource;
  46764. 8013de0: f06f 0302 mvn.w r3, #2
  46765. 8013de4: 61fb str r3, [r7, #28]
  46766. 8013de6: e027 b.n 8013e38 <osMessageQueueGet+0xac>
  46767. } else {
  46768. portYIELD_FROM_ISR (yield);
  46769. 8013de8: 693b ldr r3, [r7, #16]
  46770. 8013dea: 2b00 cmp r3, #0
  46771. 8013dec: d024 beq.n 8013e38 <osMessageQueueGet+0xac>
  46772. 8013dee: 4b15 ldr r3, [pc, #84] @ (8013e44 <osMessageQueueGet+0xb8>)
  46773. 8013df0: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  46774. 8013df4: 601a str r2, [r3, #0]
  46775. 8013df6: f3bf 8f4f dsb sy
  46776. 8013dfa: f3bf 8f6f isb sy
  46777. 8013dfe: e01b b.n 8013e38 <osMessageQueueGet+0xac>
  46778. }
  46779. }
  46780. }
  46781. else {
  46782. if ((hQueue == NULL) || (msg_ptr == NULL)) {
  46783. 8013e00: 69bb ldr r3, [r7, #24]
  46784. 8013e02: 2b00 cmp r3, #0
  46785. 8013e04: d002 beq.n 8013e0c <osMessageQueueGet+0x80>
  46786. 8013e06: 68bb ldr r3, [r7, #8]
  46787. 8013e08: 2b00 cmp r3, #0
  46788. 8013e0a: d103 bne.n 8013e14 <osMessageQueueGet+0x88>
  46789. stat = osErrorParameter;
  46790. 8013e0c: f06f 0303 mvn.w r3, #3
  46791. 8013e10: 61fb str r3, [r7, #28]
  46792. 8013e12: e011 b.n 8013e38 <osMessageQueueGet+0xac>
  46793. }
  46794. else {
  46795. if (xQueueReceive (hQueue, msg_ptr, (TickType_t)timeout) != pdPASS) {
  46796. 8013e14: 683a ldr r2, [r7, #0]
  46797. 8013e16: 68b9 ldr r1, [r7, #8]
  46798. 8013e18: 69b8 ldr r0, [r7, #24]
  46799. 8013e1a: f000 fc9b bl 8014754 <xQueueReceive>
  46800. 8013e1e: 4603 mov r3, r0
  46801. 8013e20: 2b01 cmp r3, #1
  46802. 8013e22: d009 beq.n 8013e38 <osMessageQueueGet+0xac>
  46803. if (timeout != 0U) {
  46804. 8013e24: 683b ldr r3, [r7, #0]
  46805. 8013e26: 2b00 cmp r3, #0
  46806. 8013e28: d003 beq.n 8013e32 <osMessageQueueGet+0xa6>
  46807. stat = osErrorTimeout;
  46808. 8013e2a: f06f 0301 mvn.w r3, #1
  46809. 8013e2e: 61fb str r3, [r7, #28]
  46810. 8013e30: e002 b.n 8013e38 <osMessageQueueGet+0xac>
  46811. } else {
  46812. stat = osErrorResource;
  46813. 8013e32: f06f 0302 mvn.w r3, #2
  46814. 8013e36: 61fb str r3, [r7, #28]
  46815. }
  46816. }
  46817. }
  46818. }
  46819. return (stat);
  46820. 8013e38: 69fb ldr r3, [r7, #28]
  46821. }
  46822. 8013e3a: 4618 mov r0, r3
  46823. 8013e3c: 3720 adds r7, #32
  46824. 8013e3e: 46bd mov sp, r7
  46825. 8013e40: bd80 pop {r7, pc}
  46826. 8013e42: bf00 nop
  46827. 8013e44: e000ed04 .word 0xe000ed04
  46828. 08013e48 <vApplicationGetIdleTaskMemory>:
  46829. /*
  46830. vApplicationGetIdleTaskMemory gets called when configSUPPORT_STATIC_ALLOCATION
  46831. equals to 1 and is required for static memory allocation support.
  46832. */
  46833. __WEAK void vApplicationGetIdleTaskMemory (StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize) {
  46834. 8013e48: b480 push {r7}
  46835. 8013e4a: b085 sub sp, #20
  46836. 8013e4c: af00 add r7, sp, #0
  46837. 8013e4e: 60f8 str r0, [r7, #12]
  46838. 8013e50: 60b9 str r1, [r7, #8]
  46839. 8013e52: 607a str r2, [r7, #4]
  46840. /* Idle task control block and stack */
  46841. static StaticTask_t Idle_TCB;
  46842. static StackType_t Idle_Stack[configMINIMAL_STACK_SIZE];
  46843. *ppxIdleTaskTCBBuffer = &Idle_TCB;
  46844. 8013e54: 68fb ldr r3, [r7, #12]
  46845. 8013e56: 4a07 ldr r2, [pc, #28] @ (8013e74 <vApplicationGetIdleTaskMemory+0x2c>)
  46846. 8013e58: 601a str r2, [r3, #0]
  46847. *ppxIdleTaskStackBuffer = &Idle_Stack[0];
  46848. 8013e5a: 68bb ldr r3, [r7, #8]
  46849. 8013e5c: 4a06 ldr r2, [pc, #24] @ (8013e78 <vApplicationGetIdleTaskMemory+0x30>)
  46850. 8013e5e: 601a str r2, [r3, #0]
  46851. *pulIdleTaskStackSize = (uint32_t)configMINIMAL_STACK_SIZE;
  46852. 8013e60: 687b ldr r3, [r7, #4]
  46853. 8013e62: f44f 7200 mov.w r2, #512 @ 0x200
  46854. 8013e66: 601a str r2, [r3, #0]
  46855. }
  46856. 8013e68: bf00 nop
  46857. 8013e6a: 3714 adds r7, #20
  46858. 8013e6c: 46bd mov sp, r7
  46859. 8013e6e: f85d 7b04 ldr.w r7, [sp], #4
  46860. 8013e72: 4770 bx lr
  46861. 8013e74: 24000cb0 .word 0x24000cb0
  46862. 8013e78: 24000d58 .word 0x24000d58
  46863. 08013e7c <vApplicationGetTimerTaskMemory>:
  46864. /*
  46865. vApplicationGetTimerTaskMemory gets called when configSUPPORT_STATIC_ALLOCATION
  46866. equals to 1 and is required for static memory allocation support.
  46867. */
  46868. __WEAK void vApplicationGetTimerTaskMemory (StaticTask_t **ppxTimerTaskTCBBuffer, StackType_t **ppxTimerTaskStackBuffer, uint32_t *pulTimerTaskStackSize) {
  46869. 8013e7c: b480 push {r7}
  46870. 8013e7e: b085 sub sp, #20
  46871. 8013e80: af00 add r7, sp, #0
  46872. 8013e82: 60f8 str r0, [r7, #12]
  46873. 8013e84: 60b9 str r1, [r7, #8]
  46874. 8013e86: 607a str r2, [r7, #4]
  46875. /* Timer task control block and stack */
  46876. static StaticTask_t Timer_TCB;
  46877. static StackType_t Timer_Stack[configTIMER_TASK_STACK_DEPTH];
  46878. *ppxTimerTaskTCBBuffer = &Timer_TCB;
  46879. 8013e88: 68fb ldr r3, [r7, #12]
  46880. 8013e8a: 4a07 ldr r2, [pc, #28] @ (8013ea8 <vApplicationGetTimerTaskMemory+0x2c>)
  46881. 8013e8c: 601a str r2, [r3, #0]
  46882. *ppxTimerTaskStackBuffer = &Timer_Stack[0];
  46883. 8013e8e: 68bb ldr r3, [r7, #8]
  46884. 8013e90: 4a06 ldr r2, [pc, #24] @ (8013eac <vApplicationGetTimerTaskMemory+0x30>)
  46885. 8013e92: 601a str r2, [r3, #0]
  46886. *pulTimerTaskStackSize = (uint32_t)configTIMER_TASK_STACK_DEPTH;
  46887. 8013e94: 687b ldr r3, [r7, #4]
  46888. 8013e96: f44f 6280 mov.w r2, #1024 @ 0x400
  46889. 8013e9a: 601a str r2, [r3, #0]
  46890. }
  46891. 8013e9c: bf00 nop
  46892. 8013e9e: 3714 adds r7, #20
  46893. 8013ea0: 46bd mov sp, r7
  46894. 8013ea2: f85d 7b04 ldr.w r7, [sp], #4
  46895. 8013ea6: 4770 bx lr
  46896. 8013ea8: 24001558 .word 0x24001558
  46897. 8013eac: 24001600 .word 0x24001600
  46898. 08013eb0 <vListInitialise>:
  46899. /*-----------------------------------------------------------
  46900. * PUBLIC LIST API documented in list.h
  46901. *----------------------------------------------------------*/
  46902. void vListInitialise( List_t * const pxList )
  46903. {
  46904. 8013eb0: b480 push {r7}
  46905. 8013eb2: b083 sub sp, #12
  46906. 8013eb4: af00 add r7, sp, #0
  46907. 8013eb6: 6078 str r0, [r7, #4]
  46908. /* The list structure contains a list item which is used to mark the
  46909. end of the list. To initialise the list the list end is inserted
  46910. as the only list entry. */
  46911. pxList->pxIndex = ( ListItem_t * ) &( pxList->xListEnd ); /*lint !e826 !e740 !e9087 The mini list structure is used as the list end to save RAM. This is checked and valid. */
  46912. 8013eb8: 687b ldr r3, [r7, #4]
  46913. 8013eba: f103 0208 add.w r2, r3, #8
  46914. 8013ebe: 687b ldr r3, [r7, #4]
  46915. 8013ec0: 605a str r2, [r3, #4]
  46916. /* The list end value is the highest possible value in the list to
  46917. ensure it remains at the end of the list. */
  46918. pxList->xListEnd.xItemValue = portMAX_DELAY;
  46919. 8013ec2: 687b ldr r3, [r7, #4]
  46920. 8013ec4: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
  46921. 8013ec8: 609a str r2, [r3, #8]
  46922. /* The list end next and previous pointers point to itself so we know
  46923. when the list is empty. */
  46924. pxList->xListEnd.pxNext = ( ListItem_t * ) &( pxList->xListEnd ); /*lint !e826 !e740 !e9087 The mini list structure is used as the list end to save RAM. This is checked and valid. */
  46925. 8013eca: 687b ldr r3, [r7, #4]
  46926. 8013ecc: f103 0208 add.w r2, r3, #8
  46927. 8013ed0: 687b ldr r3, [r7, #4]
  46928. 8013ed2: 60da str r2, [r3, #12]
  46929. pxList->xListEnd.pxPrevious = ( ListItem_t * ) &( pxList->xListEnd );/*lint !e826 !e740 !e9087 The mini list structure is used as the list end to save RAM. This is checked and valid. */
  46930. 8013ed4: 687b ldr r3, [r7, #4]
  46931. 8013ed6: f103 0208 add.w r2, r3, #8
  46932. 8013eda: 687b ldr r3, [r7, #4]
  46933. 8013edc: 611a str r2, [r3, #16]
  46934. pxList->uxNumberOfItems = ( UBaseType_t ) 0U;
  46935. 8013ede: 687b ldr r3, [r7, #4]
  46936. 8013ee0: 2200 movs r2, #0
  46937. 8013ee2: 601a str r2, [r3, #0]
  46938. /* Write known values into the list if
  46939. configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
  46940. listSET_LIST_INTEGRITY_CHECK_1_VALUE( pxList );
  46941. listSET_LIST_INTEGRITY_CHECK_2_VALUE( pxList );
  46942. }
  46943. 8013ee4: bf00 nop
  46944. 8013ee6: 370c adds r7, #12
  46945. 8013ee8: 46bd mov sp, r7
  46946. 8013eea: f85d 7b04 ldr.w r7, [sp], #4
  46947. 8013eee: 4770 bx lr
  46948. 08013ef0 <vListInitialiseItem>:
  46949. /*-----------------------------------------------------------*/
  46950. void vListInitialiseItem( ListItem_t * const pxItem )
  46951. {
  46952. 8013ef0: b480 push {r7}
  46953. 8013ef2: b083 sub sp, #12
  46954. 8013ef4: af00 add r7, sp, #0
  46955. 8013ef6: 6078 str r0, [r7, #4]
  46956. /* Make sure the list item is not recorded as being on a list. */
  46957. pxItem->pxContainer = NULL;
  46958. 8013ef8: 687b ldr r3, [r7, #4]
  46959. 8013efa: 2200 movs r2, #0
  46960. 8013efc: 611a str r2, [r3, #16]
  46961. /* Write known values into the list item if
  46962. configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
  46963. listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem );
  46964. listSET_SECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem );
  46965. }
  46966. 8013efe: bf00 nop
  46967. 8013f00: 370c adds r7, #12
  46968. 8013f02: 46bd mov sp, r7
  46969. 8013f04: f85d 7b04 ldr.w r7, [sp], #4
  46970. 8013f08: 4770 bx lr
  46971. 08013f0a <vListInsertEnd>:
  46972. /*-----------------------------------------------------------*/
  46973. void vListInsertEnd( List_t * const pxList, ListItem_t * const pxNewListItem )
  46974. {
  46975. 8013f0a: b480 push {r7}
  46976. 8013f0c: b085 sub sp, #20
  46977. 8013f0e: af00 add r7, sp, #0
  46978. 8013f10: 6078 str r0, [r7, #4]
  46979. 8013f12: 6039 str r1, [r7, #0]
  46980. ListItem_t * const pxIndex = pxList->pxIndex;
  46981. 8013f14: 687b ldr r3, [r7, #4]
  46982. 8013f16: 685b ldr r3, [r3, #4]
  46983. 8013f18: 60fb str r3, [r7, #12]
  46984. listTEST_LIST_ITEM_INTEGRITY( pxNewListItem );
  46985. /* Insert a new list item into pxList, but rather than sort the list,
  46986. makes the new list item the last item to be removed by a call to
  46987. listGET_OWNER_OF_NEXT_ENTRY(). */
  46988. pxNewListItem->pxNext = pxIndex;
  46989. 8013f1a: 683b ldr r3, [r7, #0]
  46990. 8013f1c: 68fa ldr r2, [r7, #12]
  46991. 8013f1e: 605a str r2, [r3, #4]
  46992. pxNewListItem->pxPrevious = pxIndex->pxPrevious;
  46993. 8013f20: 68fb ldr r3, [r7, #12]
  46994. 8013f22: 689a ldr r2, [r3, #8]
  46995. 8013f24: 683b ldr r3, [r7, #0]
  46996. 8013f26: 609a str r2, [r3, #8]
  46997. /* Only used during decision coverage testing. */
  46998. mtCOVERAGE_TEST_DELAY();
  46999. pxIndex->pxPrevious->pxNext = pxNewListItem;
  47000. 8013f28: 68fb ldr r3, [r7, #12]
  47001. 8013f2a: 689b ldr r3, [r3, #8]
  47002. 8013f2c: 683a ldr r2, [r7, #0]
  47003. 8013f2e: 605a str r2, [r3, #4]
  47004. pxIndex->pxPrevious = pxNewListItem;
  47005. 8013f30: 68fb ldr r3, [r7, #12]
  47006. 8013f32: 683a ldr r2, [r7, #0]
  47007. 8013f34: 609a str r2, [r3, #8]
  47008. /* Remember which list the item is in. */
  47009. pxNewListItem->pxContainer = pxList;
  47010. 8013f36: 683b ldr r3, [r7, #0]
  47011. 8013f38: 687a ldr r2, [r7, #4]
  47012. 8013f3a: 611a str r2, [r3, #16]
  47013. ( pxList->uxNumberOfItems )++;
  47014. 8013f3c: 687b ldr r3, [r7, #4]
  47015. 8013f3e: 681b ldr r3, [r3, #0]
  47016. 8013f40: 1c5a adds r2, r3, #1
  47017. 8013f42: 687b ldr r3, [r7, #4]
  47018. 8013f44: 601a str r2, [r3, #0]
  47019. }
  47020. 8013f46: bf00 nop
  47021. 8013f48: 3714 adds r7, #20
  47022. 8013f4a: 46bd mov sp, r7
  47023. 8013f4c: f85d 7b04 ldr.w r7, [sp], #4
  47024. 8013f50: 4770 bx lr
  47025. 08013f52 <vListInsert>:
  47026. /*-----------------------------------------------------------*/
  47027. void vListInsert( List_t * const pxList, ListItem_t * const pxNewListItem )
  47028. {
  47029. 8013f52: b480 push {r7}
  47030. 8013f54: b085 sub sp, #20
  47031. 8013f56: af00 add r7, sp, #0
  47032. 8013f58: 6078 str r0, [r7, #4]
  47033. 8013f5a: 6039 str r1, [r7, #0]
  47034. ListItem_t *pxIterator;
  47035. const TickType_t xValueOfInsertion = pxNewListItem->xItemValue;
  47036. 8013f5c: 683b ldr r3, [r7, #0]
  47037. 8013f5e: 681b ldr r3, [r3, #0]
  47038. 8013f60: 60bb str r3, [r7, #8]
  47039. new list item should be placed after it. This ensures that TCBs which are
  47040. stored in ready lists (all of which have the same xItemValue value) get a
  47041. share of the CPU. However, if the xItemValue is the same as the back marker
  47042. the iteration loop below will not end. Therefore the value is checked
  47043. first, and the algorithm slightly modified if necessary. */
  47044. if( xValueOfInsertion == portMAX_DELAY )
  47045. 8013f62: 68bb ldr r3, [r7, #8]
  47046. 8013f64: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  47047. 8013f68: d103 bne.n 8013f72 <vListInsert+0x20>
  47048. {
  47049. pxIterator = pxList->xListEnd.pxPrevious;
  47050. 8013f6a: 687b ldr r3, [r7, #4]
  47051. 8013f6c: 691b ldr r3, [r3, #16]
  47052. 8013f6e: 60fb str r3, [r7, #12]
  47053. 8013f70: e00c b.n 8013f8c <vListInsert+0x3a>
  47054. 4) Using a queue or semaphore before it has been initialised or
  47055. before the scheduler has been started (are interrupts firing
  47056. before vTaskStartScheduler() has been called?).
  47057. **********************************************************************/
  47058. for( pxIterator = ( ListItem_t * ) &( pxList->xListEnd ); pxIterator->pxNext->xItemValue <= xValueOfInsertion; pxIterator = pxIterator->pxNext ) /*lint !e826 !e740 !e9087 The mini list structure is used as the list end to save RAM. This is checked and valid. *//*lint !e440 The iterator moves to a different value, not xValueOfInsertion. */
  47059. 8013f72: 687b ldr r3, [r7, #4]
  47060. 8013f74: 3308 adds r3, #8
  47061. 8013f76: 60fb str r3, [r7, #12]
  47062. 8013f78: e002 b.n 8013f80 <vListInsert+0x2e>
  47063. 8013f7a: 68fb ldr r3, [r7, #12]
  47064. 8013f7c: 685b ldr r3, [r3, #4]
  47065. 8013f7e: 60fb str r3, [r7, #12]
  47066. 8013f80: 68fb ldr r3, [r7, #12]
  47067. 8013f82: 685b ldr r3, [r3, #4]
  47068. 8013f84: 681b ldr r3, [r3, #0]
  47069. 8013f86: 68ba ldr r2, [r7, #8]
  47070. 8013f88: 429a cmp r2, r3
  47071. 8013f8a: d2f6 bcs.n 8013f7a <vListInsert+0x28>
  47072. /* There is nothing to do here, just iterating to the wanted
  47073. insertion position. */
  47074. }
  47075. }
  47076. pxNewListItem->pxNext = pxIterator->pxNext;
  47077. 8013f8c: 68fb ldr r3, [r7, #12]
  47078. 8013f8e: 685a ldr r2, [r3, #4]
  47079. 8013f90: 683b ldr r3, [r7, #0]
  47080. 8013f92: 605a str r2, [r3, #4]
  47081. pxNewListItem->pxNext->pxPrevious = pxNewListItem;
  47082. 8013f94: 683b ldr r3, [r7, #0]
  47083. 8013f96: 685b ldr r3, [r3, #4]
  47084. 8013f98: 683a ldr r2, [r7, #0]
  47085. 8013f9a: 609a str r2, [r3, #8]
  47086. pxNewListItem->pxPrevious = pxIterator;
  47087. 8013f9c: 683b ldr r3, [r7, #0]
  47088. 8013f9e: 68fa ldr r2, [r7, #12]
  47089. 8013fa0: 609a str r2, [r3, #8]
  47090. pxIterator->pxNext = pxNewListItem;
  47091. 8013fa2: 68fb ldr r3, [r7, #12]
  47092. 8013fa4: 683a ldr r2, [r7, #0]
  47093. 8013fa6: 605a str r2, [r3, #4]
  47094. /* Remember which list the item is in. This allows fast removal of the
  47095. item later. */
  47096. pxNewListItem->pxContainer = pxList;
  47097. 8013fa8: 683b ldr r3, [r7, #0]
  47098. 8013faa: 687a ldr r2, [r7, #4]
  47099. 8013fac: 611a str r2, [r3, #16]
  47100. ( pxList->uxNumberOfItems )++;
  47101. 8013fae: 687b ldr r3, [r7, #4]
  47102. 8013fb0: 681b ldr r3, [r3, #0]
  47103. 8013fb2: 1c5a adds r2, r3, #1
  47104. 8013fb4: 687b ldr r3, [r7, #4]
  47105. 8013fb6: 601a str r2, [r3, #0]
  47106. }
  47107. 8013fb8: bf00 nop
  47108. 8013fba: 3714 adds r7, #20
  47109. 8013fbc: 46bd mov sp, r7
  47110. 8013fbe: f85d 7b04 ldr.w r7, [sp], #4
  47111. 8013fc2: 4770 bx lr
  47112. 08013fc4 <uxListRemove>:
  47113. /*-----------------------------------------------------------*/
  47114. UBaseType_t uxListRemove( ListItem_t * const pxItemToRemove )
  47115. {
  47116. 8013fc4: b480 push {r7}
  47117. 8013fc6: b085 sub sp, #20
  47118. 8013fc8: af00 add r7, sp, #0
  47119. 8013fca: 6078 str r0, [r7, #4]
  47120. /* The list item knows which list it is in. Obtain the list from the list
  47121. item. */
  47122. List_t * const pxList = pxItemToRemove->pxContainer;
  47123. 8013fcc: 687b ldr r3, [r7, #4]
  47124. 8013fce: 691b ldr r3, [r3, #16]
  47125. 8013fd0: 60fb str r3, [r7, #12]
  47126. pxItemToRemove->pxNext->pxPrevious = pxItemToRemove->pxPrevious;
  47127. 8013fd2: 687b ldr r3, [r7, #4]
  47128. 8013fd4: 685b ldr r3, [r3, #4]
  47129. 8013fd6: 687a ldr r2, [r7, #4]
  47130. 8013fd8: 6892 ldr r2, [r2, #8]
  47131. 8013fda: 609a str r2, [r3, #8]
  47132. pxItemToRemove->pxPrevious->pxNext = pxItemToRemove->pxNext;
  47133. 8013fdc: 687b ldr r3, [r7, #4]
  47134. 8013fde: 689b ldr r3, [r3, #8]
  47135. 8013fe0: 687a ldr r2, [r7, #4]
  47136. 8013fe2: 6852 ldr r2, [r2, #4]
  47137. 8013fe4: 605a str r2, [r3, #4]
  47138. /* Only used during decision coverage testing. */
  47139. mtCOVERAGE_TEST_DELAY();
  47140. /* Make sure the index is left pointing to a valid item. */
  47141. if( pxList->pxIndex == pxItemToRemove )
  47142. 8013fe6: 68fb ldr r3, [r7, #12]
  47143. 8013fe8: 685b ldr r3, [r3, #4]
  47144. 8013fea: 687a ldr r2, [r7, #4]
  47145. 8013fec: 429a cmp r2, r3
  47146. 8013fee: d103 bne.n 8013ff8 <uxListRemove+0x34>
  47147. {
  47148. pxList->pxIndex = pxItemToRemove->pxPrevious;
  47149. 8013ff0: 687b ldr r3, [r7, #4]
  47150. 8013ff2: 689a ldr r2, [r3, #8]
  47151. 8013ff4: 68fb ldr r3, [r7, #12]
  47152. 8013ff6: 605a str r2, [r3, #4]
  47153. else
  47154. {
  47155. mtCOVERAGE_TEST_MARKER();
  47156. }
  47157. pxItemToRemove->pxContainer = NULL;
  47158. 8013ff8: 687b ldr r3, [r7, #4]
  47159. 8013ffa: 2200 movs r2, #0
  47160. 8013ffc: 611a str r2, [r3, #16]
  47161. ( pxList->uxNumberOfItems )--;
  47162. 8013ffe: 68fb ldr r3, [r7, #12]
  47163. 8014000: 681b ldr r3, [r3, #0]
  47164. 8014002: 1e5a subs r2, r3, #1
  47165. 8014004: 68fb ldr r3, [r7, #12]
  47166. 8014006: 601a str r2, [r3, #0]
  47167. return pxList->uxNumberOfItems;
  47168. 8014008: 68fb ldr r3, [r7, #12]
  47169. 801400a: 681b ldr r3, [r3, #0]
  47170. }
  47171. 801400c: 4618 mov r0, r3
  47172. 801400e: 3714 adds r7, #20
  47173. 8014010: 46bd mov sp, r7
  47174. 8014012: f85d 7b04 ldr.w r7, [sp], #4
  47175. 8014016: 4770 bx lr
  47176. 08014018 <xQueueGenericReset>:
  47177. } \
  47178. taskEXIT_CRITICAL()
  47179. /*-----------------------------------------------------------*/
  47180. BaseType_t xQueueGenericReset( QueueHandle_t xQueue, BaseType_t xNewQueue )
  47181. {
  47182. 8014018: b580 push {r7, lr}
  47183. 801401a: b084 sub sp, #16
  47184. 801401c: af00 add r7, sp, #0
  47185. 801401e: 6078 str r0, [r7, #4]
  47186. 8014020: 6039 str r1, [r7, #0]
  47187. Queue_t * const pxQueue = xQueue;
  47188. 8014022: 687b ldr r3, [r7, #4]
  47189. 8014024: 60fb str r3, [r7, #12]
  47190. configASSERT( pxQueue );
  47191. 8014026: 68fb ldr r3, [r7, #12]
  47192. 8014028: 2b00 cmp r3, #0
  47193. 801402a: d10b bne.n 8014044 <xQueueGenericReset+0x2c>
  47194. portFORCE_INLINE static void vPortRaiseBASEPRI( void )
  47195. {
  47196. uint32_t ulNewBASEPRI;
  47197. __asm volatile
  47198. 801402c: f04f 0350 mov.w r3, #80 @ 0x50
  47199. 8014030: f383 8811 msr BASEPRI, r3
  47200. 8014034: f3bf 8f6f isb sy
  47201. 8014038: f3bf 8f4f dsb sy
  47202. 801403c: 60bb str r3, [r7, #8]
  47203. " msr basepri, %0 \n" \
  47204. " isb \n" \
  47205. " dsb \n" \
  47206. :"=r" (ulNewBASEPRI) : "i" ( configMAX_SYSCALL_INTERRUPT_PRIORITY ) : "memory"
  47207. );
  47208. }
  47209. 801403e: bf00 nop
  47210. 8014040: bf00 nop
  47211. 8014042: e7fd b.n 8014040 <xQueueGenericReset+0x28>
  47212. taskENTER_CRITICAL();
  47213. 8014044: f003 f960 bl 8017308 <vPortEnterCritical>
  47214. {
  47215. pxQueue->u.xQueue.pcTail = pxQueue->pcHead + ( pxQueue->uxLength * pxQueue->uxItemSize ); /*lint !e9016 Pointer arithmetic allowed on char types, especially when it assists conveying intent. */
  47216. 8014048: 68fb ldr r3, [r7, #12]
  47217. 801404a: 681a ldr r2, [r3, #0]
  47218. 801404c: 68fb ldr r3, [r7, #12]
  47219. 801404e: 6bdb ldr r3, [r3, #60] @ 0x3c
  47220. 8014050: 68f9 ldr r1, [r7, #12]
  47221. 8014052: 6c09 ldr r1, [r1, #64] @ 0x40
  47222. 8014054: fb01 f303 mul.w r3, r1, r3
  47223. 8014058: 441a add r2, r3
  47224. 801405a: 68fb ldr r3, [r7, #12]
  47225. 801405c: 609a str r2, [r3, #8]
  47226. pxQueue->uxMessagesWaiting = ( UBaseType_t ) 0U;
  47227. 801405e: 68fb ldr r3, [r7, #12]
  47228. 8014060: 2200 movs r2, #0
  47229. 8014062: 639a str r2, [r3, #56] @ 0x38
  47230. pxQueue->pcWriteTo = pxQueue->pcHead;
  47231. 8014064: 68fb ldr r3, [r7, #12]
  47232. 8014066: 681a ldr r2, [r3, #0]
  47233. 8014068: 68fb ldr r3, [r7, #12]
  47234. 801406a: 605a str r2, [r3, #4]
  47235. pxQueue->u.xQueue.pcReadFrom = pxQueue->pcHead + ( ( pxQueue->uxLength - 1U ) * pxQueue->uxItemSize ); /*lint !e9016 Pointer arithmetic allowed on char types, especially when it assists conveying intent. */
  47236. 801406c: 68fb ldr r3, [r7, #12]
  47237. 801406e: 681a ldr r2, [r3, #0]
  47238. 8014070: 68fb ldr r3, [r7, #12]
  47239. 8014072: 6bdb ldr r3, [r3, #60] @ 0x3c
  47240. 8014074: 3b01 subs r3, #1
  47241. 8014076: 68f9 ldr r1, [r7, #12]
  47242. 8014078: 6c09 ldr r1, [r1, #64] @ 0x40
  47243. 801407a: fb01 f303 mul.w r3, r1, r3
  47244. 801407e: 441a add r2, r3
  47245. 8014080: 68fb ldr r3, [r7, #12]
  47246. 8014082: 60da str r2, [r3, #12]
  47247. pxQueue->cRxLock = queueUNLOCKED;
  47248. 8014084: 68fb ldr r3, [r7, #12]
  47249. 8014086: 22ff movs r2, #255 @ 0xff
  47250. 8014088: f883 2044 strb.w r2, [r3, #68] @ 0x44
  47251. pxQueue->cTxLock = queueUNLOCKED;
  47252. 801408c: 68fb ldr r3, [r7, #12]
  47253. 801408e: 22ff movs r2, #255 @ 0xff
  47254. 8014090: f883 2045 strb.w r2, [r3, #69] @ 0x45
  47255. if( xNewQueue == pdFALSE )
  47256. 8014094: 683b ldr r3, [r7, #0]
  47257. 8014096: 2b00 cmp r3, #0
  47258. 8014098: d114 bne.n 80140c4 <xQueueGenericReset+0xac>
  47259. /* If there are tasks blocked waiting to read from the queue, then
  47260. the tasks will remain blocked as after this function exits the queue
  47261. will still be empty. If there are tasks blocked waiting to write to
  47262. the queue, then one should be unblocked as after this function exits
  47263. it will be possible to write to it. */
  47264. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )
  47265. 801409a: 68fb ldr r3, [r7, #12]
  47266. 801409c: 691b ldr r3, [r3, #16]
  47267. 801409e: 2b00 cmp r3, #0
  47268. 80140a0: d01a beq.n 80140d8 <xQueueGenericReset+0xc0>
  47269. {
  47270. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE )
  47271. 80140a2: 68fb ldr r3, [r7, #12]
  47272. 80140a4: 3310 adds r3, #16
  47273. 80140a6: 4618 mov r0, r3
  47274. 80140a8: f001 fdac bl 8015c04 <xTaskRemoveFromEventList>
  47275. 80140ac: 4603 mov r3, r0
  47276. 80140ae: 2b00 cmp r3, #0
  47277. 80140b0: d012 beq.n 80140d8 <xQueueGenericReset+0xc0>
  47278. {
  47279. queueYIELD_IF_USING_PREEMPTION();
  47280. 80140b2: 4b0d ldr r3, [pc, #52] @ (80140e8 <xQueueGenericReset+0xd0>)
  47281. 80140b4: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  47282. 80140b8: 601a str r2, [r3, #0]
  47283. 80140ba: f3bf 8f4f dsb sy
  47284. 80140be: f3bf 8f6f isb sy
  47285. 80140c2: e009 b.n 80140d8 <xQueueGenericReset+0xc0>
  47286. }
  47287. }
  47288. else
  47289. {
  47290. /* Ensure the event queues start in the correct state. */
  47291. vListInitialise( &( pxQueue->xTasksWaitingToSend ) );
  47292. 80140c4: 68fb ldr r3, [r7, #12]
  47293. 80140c6: 3310 adds r3, #16
  47294. 80140c8: 4618 mov r0, r3
  47295. 80140ca: f7ff fef1 bl 8013eb0 <vListInitialise>
  47296. vListInitialise( &( pxQueue->xTasksWaitingToReceive ) );
  47297. 80140ce: 68fb ldr r3, [r7, #12]
  47298. 80140d0: 3324 adds r3, #36 @ 0x24
  47299. 80140d2: 4618 mov r0, r3
  47300. 80140d4: f7ff feec bl 8013eb0 <vListInitialise>
  47301. }
  47302. }
  47303. taskEXIT_CRITICAL();
  47304. 80140d8: f003 f948 bl 801736c <vPortExitCritical>
  47305. /* A value is returned for calling semantic consistency with previous
  47306. versions. */
  47307. return pdPASS;
  47308. 80140dc: 2301 movs r3, #1
  47309. }
  47310. 80140de: 4618 mov r0, r3
  47311. 80140e0: 3710 adds r7, #16
  47312. 80140e2: 46bd mov sp, r7
  47313. 80140e4: bd80 pop {r7, pc}
  47314. 80140e6: bf00 nop
  47315. 80140e8: e000ed04 .word 0xe000ed04
  47316. 080140ec <xQueueGenericCreateStatic>:
  47317. /*-----------------------------------------------------------*/
  47318. #if( configSUPPORT_STATIC_ALLOCATION == 1 )
  47319. QueueHandle_t xQueueGenericCreateStatic( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, uint8_t *pucQueueStorage, StaticQueue_t *pxStaticQueue, const uint8_t ucQueueType )
  47320. {
  47321. 80140ec: b580 push {r7, lr}
  47322. 80140ee: b08e sub sp, #56 @ 0x38
  47323. 80140f0: af02 add r7, sp, #8
  47324. 80140f2: 60f8 str r0, [r7, #12]
  47325. 80140f4: 60b9 str r1, [r7, #8]
  47326. 80140f6: 607a str r2, [r7, #4]
  47327. 80140f8: 603b str r3, [r7, #0]
  47328. Queue_t *pxNewQueue;
  47329. configASSERT( uxQueueLength > ( UBaseType_t ) 0 );
  47330. 80140fa: 68fb ldr r3, [r7, #12]
  47331. 80140fc: 2b00 cmp r3, #0
  47332. 80140fe: d10b bne.n 8014118 <xQueueGenericCreateStatic+0x2c>
  47333. __asm volatile
  47334. 8014100: f04f 0350 mov.w r3, #80 @ 0x50
  47335. 8014104: f383 8811 msr BASEPRI, r3
  47336. 8014108: f3bf 8f6f isb sy
  47337. 801410c: f3bf 8f4f dsb sy
  47338. 8014110: 62bb str r3, [r7, #40] @ 0x28
  47339. }
  47340. 8014112: bf00 nop
  47341. 8014114: bf00 nop
  47342. 8014116: e7fd b.n 8014114 <xQueueGenericCreateStatic+0x28>
  47343. /* The StaticQueue_t structure and the queue storage area must be
  47344. supplied. */
  47345. configASSERT( pxStaticQueue != NULL );
  47346. 8014118: 683b ldr r3, [r7, #0]
  47347. 801411a: 2b00 cmp r3, #0
  47348. 801411c: d10b bne.n 8014136 <xQueueGenericCreateStatic+0x4a>
  47349. __asm volatile
  47350. 801411e: f04f 0350 mov.w r3, #80 @ 0x50
  47351. 8014122: f383 8811 msr BASEPRI, r3
  47352. 8014126: f3bf 8f6f isb sy
  47353. 801412a: f3bf 8f4f dsb sy
  47354. 801412e: 627b str r3, [r7, #36] @ 0x24
  47355. }
  47356. 8014130: bf00 nop
  47357. 8014132: bf00 nop
  47358. 8014134: e7fd b.n 8014132 <xQueueGenericCreateStatic+0x46>
  47359. /* A queue storage area should be provided if the item size is not 0, and
  47360. should not be provided if the item size is 0. */
  47361. configASSERT( !( ( pucQueueStorage != NULL ) && ( uxItemSize == 0 ) ) );
  47362. 8014136: 687b ldr r3, [r7, #4]
  47363. 8014138: 2b00 cmp r3, #0
  47364. 801413a: d002 beq.n 8014142 <xQueueGenericCreateStatic+0x56>
  47365. 801413c: 68bb ldr r3, [r7, #8]
  47366. 801413e: 2b00 cmp r3, #0
  47367. 8014140: d001 beq.n 8014146 <xQueueGenericCreateStatic+0x5a>
  47368. 8014142: 2301 movs r3, #1
  47369. 8014144: e000 b.n 8014148 <xQueueGenericCreateStatic+0x5c>
  47370. 8014146: 2300 movs r3, #0
  47371. 8014148: 2b00 cmp r3, #0
  47372. 801414a: d10b bne.n 8014164 <xQueueGenericCreateStatic+0x78>
  47373. __asm volatile
  47374. 801414c: f04f 0350 mov.w r3, #80 @ 0x50
  47375. 8014150: f383 8811 msr BASEPRI, r3
  47376. 8014154: f3bf 8f6f isb sy
  47377. 8014158: f3bf 8f4f dsb sy
  47378. 801415c: 623b str r3, [r7, #32]
  47379. }
  47380. 801415e: bf00 nop
  47381. 8014160: bf00 nop
  47382. 8014162: e7fd b.n 8014160 <xQueueGenericCreateStatic+0x74>
  47383. configASSERT( !( ( pucQueueStorage == NULL ) && ( uxItemSize != 0 ) ) );
  47384. 8014164: 687b ldr r3, [r7, #4]
  47385. 8014166: 2b00 cmp r3, #0
  47386. 8014168: d102 bne.n 8014170 <xQueueGenericCreateStatic+0x84>
  47387. 801416a: 68bb ldr r3, [r7, #8]
  47388. 801416c: 2b00 cmp r3, #0
  47389. 801416e: d101 bne.n 8014174 <xQueueGenericCreateStatic+0x88>
  47390. 8014170: 2301 movs r3, #1
  47391. 8014172: e000 b.n 8014176 <xQueueGenericCreateStatic+0x8a>
  47392. 8014174: 2300 movs r3, #0
  47393. 8014176: 2b00 cmp r3, #0
  47394. 8014178: d10b bne.n 8014192 <xQueueGenericCreateStatic+0xa6>
  47395. __asm volatile
  47396. 801417a: f04f 0350 mov.w r3, #80 @ 0x50
  47397. 801417e: f383 8811 msr BASEPRI, r3
  47398. 8014182: f3bf 8f6f isb sy
  47399. 8014186: f3bf 8f4f dsb sy
  47400. 801418a: 61fb str r3, [r7, #28]
  47401. }
  47402. 801418c: bf00 nop
  47403. 801418e: bf00 nop
  47404. 8014190: e7fd b.n 801418e <xQueueGenericCreateStatic+0xa2>
  47405. #if( configASSERT_DEFINED == 1 )
  47406. {
  47407. /* Sanity check that the size of the structure used to declare a
  47408. variable of type StaticQueue_t or StaticSemaphore_t equals the size of
  47409. the real queue and semaphore structures. */
  47410. volatile size_t xSize = sizeof( StaticQueue_t );
  47411. 8014192: 2350 movs r3, #80 @ 0x50
  47412. 8014194: 617b str r3, [r7, #20]
  47413. configASSERT( xSize == sizeof( Queue_t ) );
  47414. 8014196: 697b ldr r3, [r7, #20]
  47415. 8014198: 2b50 cmp r3, #80 @ 0x50
  47416. 801419a: d00b beq.n 80141b4 <xQueueGenericCreateStatic+0xc8>
  47417. __asm volatile
  47418. 801419c: f04f 0350 mov.w r3, #80 @ 0x50
  47419. 80141a0: f383 8811 msr BASEPRI, r3
  47420. 80141a4: f3bf 8f6f isb sy
  47421. 80141a8: f3bf 8f4f dsb sy
  47422. 80141ac: 61bb str r3, [r7, #24]
  47423. }
  47424. 80141ae: bf00 nop
  47425. 80141b0: bf00 nop
  47426. 80141b2: e7fd b.n 80141b0 <xQueueGenericCreateStatic+0xc4>
  47427. ( void ) xSize; /* Keeps lint quiet when configASSERT() is not defined. */
  47428. 80141b4: 697b ldr r3, [r7, #20]
  47429. #endif /* configASSERT_DEFINED */
  47430. /* The address of a statically allocated queue was passed in, use it.
  47431. The address of a statically allocated storage area was also passed in
  47432. but is already set. */
  47433. pxNewQueue = ( Queue_t * ) pxStaticQueue; /*lint !e740 !e9087 Unusual cast is ok as the structures are designed to have the same alignment, and the size is checked by an assert. */
  47434. 80141b6: 683b ldr r3, [r7, #0]
  47435. 80141b8: 62fb str r3, [r7, #44] @ 0x2c
  47436. if( pxNewQueue != NULL )
  47437. 80141ba: 6afb ldr r3, [r7, #44] @ 0x2c
  47438. 80141bc: 2b00 cmp r3, #0
  47439. 80141be: d00d beq.n 80141dc <xQueueGenericCreateStatic+0xf0>
  47440. #if( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
  47441. {
  47442. /* Queues can be allocated wither statically or dynamically, so
  47443. note this queue was allocated statically in case the queue is
  47444. later deleted. */
  47445. pxNewQueue->ucStaticallyAllocated = pdTRUE;
  47446. 80141c0: 6afb ldr r3, [r7, #44] @ 0x2c
  47447. 80141c2: 2201 movs r2, #1
  47448. 80141c4: f883 2046 strb.w r2, [r3, #70] @ 0x46
  47449. }
  47450. #endif /* configSUPPORT_DYNAMIC_ALLOCATION */
  47451. prvInitialiseNewQueue( uxQueueLength, uxItemSize, pucQueueStorage, ucQueueType, pxNewQueue );
  47452. 80141c8: f897 2038 ldrb.w r2, [r7, #56] @ 0x38
  47453. 80141cc: 6afb ldr r3, [r7, #44] @ 0x2c
  47454. 80141ce: 9300 str r3, [sp, #0]
  47455. 80141d0: 4613 mov r3, r2
  47456. 80141d2: 687a ldr r2, [r7, #4]
  47457. 80141d4: 68b9 ldr r1, [r7, #8]
  47458. 80141d6: 68f8 ldr r0, [r7, #12]
  47459. 80141d8: f000 f840 bl 801425c <prvInitialiseNewQueue>
  47460. {
  47461. traceQUEUE_CREATE_FAILED( ucQueueType );
  47462. mtCOVERAGE_TEST_MARKER();
  47463. }
  47464. return pxNewQueue;
  47465. 80141dc: 6afb ldr r3, [r7, #44] @ 0x2c
  47466. }
  47467. 80141de: 4618 mov r0, r3
  47468. 80141e0: 3730 adds r7, #48 @ 0x30
  47469. 80141e2: 46bd mov sp, r7
  47470. 80141e4: bd80 pop {r7, pc}
  47471. 080141e6 <xQueueGenericCreate>:
  47472. /*-----------------------------------------------------------*/
  47473. #if( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
  47474. QueueHandle_t xQueueGenericCreate( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, const uint8_t ucQueueType )
  47475. {
  47476. 80141e6: b580 push {r7, lr}
  47477. 80141e8: b08a sub sp, #40 @ 0x28
  47478. 80141ea: af02 add r7, sp, #8
  47479. 80141ec: 60f8 str r0, [r7, #12]
  47480. 80141ee: 60b9 str r1, [r7, #8]
  47481. 80141f0: 4613 mov r3, r2
  47482. 80141f2: 71fb strb r3, [r7, #7]
  47483. Queue_t *pxNewQueue;
  47484. size_t xQueueSizeInBytes;
  47485. uint8_t *pucQueueStorage;
  47486. configASSERT( uxQueueLength > ( UBaseType_t ) 0 );
  47487. 80141f4: 68fb ldr r3, [r7, #12]
  47488. 80141f6: 2b00 cmp r3, #0
  47489. 80141f8: d10b bne.n 8014212 <xQueueGenericCreate+0x2c>
  47490. __asm volatile
  47491. 80141fa: f04f 0350 mov.w r3, #80 @ 0x50
  47492. 80141fe: f383 8811 msr BASEPRI, r3
  47493. 8014202: f3bf 8f6f isb sy
  47494. 8014206: f3bf 8f4f dsb sy
  47495. 801420a: 613b str r3, [r7, #16]
  47496. }
  47497. 801420c: bf00 nop
  47498. 801420e: bf00 nop
  47499. 8014210: e7fd b.n 801420e <xQueueGenericCreate+0x28>
  47500. /* Allocate enough space to hold the maximum number of items that
  47501. can be in the queue at any time. It is valid for uxItemSize to be
  47502. zero in the case the queue is used as a semaphore. */
  47503. xQueueSizeInBytes = ( size_t ) ( uxQueueLength * uxItemSize ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */
  47504. 8014212: 68fb ldr r3, [r7, #12]
  47505. 8014214: 68ba ldr r2, [r7, #8]
  47506. 8014216: fb02 f303 mul.w r3, r2, r3
  47507. 801421a: 61fb str r3, [r7, #28]
  47508. alignment requirements of the Queue_t structure - which in this case
  47509. is an int8_t *. Therefore, whenever the stack alignment requirements
  47510. are greater than or equal to the pointer to char requirements the cast
  47511. is safe. In other cases alignment requirements are not strict (one or
  47512. two bytes). */
  47513. pxNewQueue = ( Queue_t * ) pvPortMalloc( sizeof( Queue_t ) + xQueueSizeInBytes ); /*lint !e9087 !e9079 see comment above. */
  47514. 801421c: 69fb ldr r3, [r7, #28]
  47515. 801421e: 3350 adds r3, #80 @ 0x50
  47516. 8014220: 4618 mov r0, r3
  47517. 8014222: f003 f993 bl 801754c <pvPortMalloc>
  47518. 8014226: 61b8 str r0, [r7, #24]
  47519. if( pxNewQueue != NULL )
  47520. 8014228: 69bb ldr r3, [r7, #24]
  47521. 801422a: 2b00 cmp r3, #0
  47522. 801422c: d011 beq.n 8014252 <xQueueGenericCreate+0x6c>
  47523. {
  47524. /* Jump past the queue structure to find the location of the queue
  47525. storage area. */
  47526. pucQueueStorage = ( uint8_t * ) pxNewQueue;
  47527. 801422e: 69bb ldr r3, [r7, #24]
  47528. 8014230: 617b str r3, [r7, #20]
  47529. pucQueueStorage += sizeof( Queue_t ); /*lint !e9016 Pointer arithmetic allowed on char types, especially when it assists conveying intent. */
  47530. 8014232: 697b ldr r3, [r7, #20]
  47531. 8014234: 3350 adds r3, #80 @ 0x50
  47532. 8014236: 617b str r3, [r7, #20]
  47533. #if( configSUPPORT_STATIC_ALLOCATION == 1 )
  47534. {
  47535. /* Queues can be created either statically or dynamically, so
  47536. note this task was created dynamically in case it is later
  47537. deleted. */
  47538. pxNewQueue->ucStaticallyAllocated = pdFALSE;
  47539. 8014238: 69bb ldr r3, [r7, #24]
  47540. 801423a: 2200 movs r2, #0
  47541. 801423c: f883 2046 strb.w r2, [r3, #70] @ 0x46
  47542. }
  47543. #endif /* configSUPPORT_STATIC_ALLOCATION */
  47544. prvInitialiseNewQueue( uxQueueLength, uxItemSize, pucQueueStorage, ucQueueType, pxNewQueue );
  47545. 8014240: 79fa ldrb r2, [r7, #7]
  47546. 8014242: 69bb ldr r3, [r7, #24]
  47547. 8014244: 9300 str r3, [sp, #0]
  47548. 8014246: 4613 mov r3, r2
  47549. 8014248: 697a ldr r2, [r7, #20]
  47550. 801424a: 68b9 ldr r1, [r7, #8]
  47551. 801424c: 68f8 ldr r0, [r7, #12]
  47552. 801424e: f000 f805 bl 801425c <prvInitialiseNewQueue>
  47553. {
  47554. traceQUEUE_CREATE_FAILED( ucQueueType );
  47555. mtCOVERAGE_TEST_MARKER();
  47556. }
  47557. return pxNewQueue;
  47558. 8014252: 69bb ldr r3, [r7, #24]
  47559. }
  47560. 8014254: 4618 mov r0, r3
  47561. 8014256: 3720 adds r7, #32
  47562. 8014258: 46bd mov sp, r7
  47563. 801425a: bd80 pop {r7, pc}
  47564. 0801425c <prvInitialiseNewQueue>:
  47565. #endif /* configSUPPORT_STATIC_ALLOCATION */
  47566. /*-----------------------------------------------------------*/
  47567. static void prvInitialiseNewQueue( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, uint8_t *pucQueueStorage, const uint8_t ucQueueType, Queue_t *pxNewQueue )
  47568. {
  47569. 801425c: b580 push {r7, lr}
  47570. 801425e: b084 sub sp, #16
  47571. 8014260: af00 add r7, sp, #0
  47572. 8014262: 60f8 str r0, [r7, #12]
  47573. 8014264: 60b9 str r1, [r7, #8]
  47574. 8014266: 607a str r2, [r7, #4]
  47575. 8014268: 70fb strb r3, [r7, #3]
  47576. /* Remove compiler warnings about unused parameters should
  47577. configUSE_TRACE_FACILITY not be set to 1. */
  47578. ( void ) ucQueueType;
  47579. if( uxItemSize == ( UBaseType_t ) 0 )
  47580. 801426a: 68bb ldr r3, [r7, #8]
  47581. 801426c: 2b00 cmp r3, #0
  47582. 801426e: d103 bne.n 8014278 <prvInitialiseNewQueue+0x1c>
  47583. {
  47584. /* No RAM was allocated for the queue storage area, but PC head cannot
  47585. be set to NULL because NULL is used as a key to say the queue is used as
  47586. a mutex. Therefore just set pcHead to point to the queue as a benign
  47587. value that is known to be within the memory map. */
  47588. pxNewQueue->pcHead = ( int8_t * ) pxNewQueue;
  47589. 8014270: 69bb ldr r3, [r7, #24]
  47590. 8014272: 69ba ldr r2, [r7, #24]
  47591. 8014274: 601a str r2, [r3, #0]
  47592. 8014276: e002 b.n 801427e <prvInitialiseNewQueue+0x22>
  47593. }
  47594. else
  47595. {
  47596. /* Set the head to the start of the queue storage area. */
  47597. pxNewQueue->pcHead = ( int8_t * ) pucQueueStorage;
  47598. 8014278: 69bb ldr r3, [r7, #24]
  47599. 801427a: 687a ldr r2, [r7, #4]
  47600. 801427c: 601a str r2, [r3, #0]
  47601. }
  47602. /* Initialise the queue members as described where the queue type is
  47603. defined. */
  47604. pxNewQueue->uxLength = uxQueueLength;
  47605. 801427e: 69bb ldr r3, [r7, #24]
  47606. 8014280: 68fa ldr r2, [r7, #12]
  47607. 8014282: 63da str r2, [r3, #60] @ 0x3c
  47608. pxNewQueue->uxItemSize = uxItemSize;
  47609. 8014284: 69bb ldr r3, [r7, #24]
  47610. 8014286: 68ba ldr r2, [r7, #8]
  47611. 8014288: 641a str r2, [r3, #64] @ 0x40
  47612. ( void ) xQueueGenericReset( pxNewQueue, pdTRUE );
  47613. 801428a: 2101 movs r1, #1
  47614. 801428c: 69b8 ldr r0, [r7, #24]
  47615. 801428e: f7ff fec3 bl 8014018 <xQueueGenericReset>
  47616. #if ( configUSE_TRACE_FACILITY == 1 )
  47617. {
  47618. pxNewQueue->ucQueueType = ucQueueType;
  47619. 8014292: 69bb ldr r3, [r7, #24]
  47620. 8014294: 78fa ldrb r2, [r7, #3]
  47621. 8014296: f883 204c strb.w r2, [r3, #76] @ 0x4c
  47622. pxNewQueue->pxQueueSetContainer = NULL;
  47623. }
  47624. #endif /* configUSE_QUEUE_SETS */
  47625. traceQUEUE_CREATE( pxNewQueue );
  47626. }
  47627. 801429a: bf00 nop
  47628. 801429c: 3710 adds r7, #16
  47629. 801429e: 46bd mov sp, r7
  47630. 80142a0: bd80 pop {r7, pc}
  47631. 080142a2 <prvInitialiseMutex>:
  47632. /*-----------------------------------------------------------*/
  47633. #if( configUSE_MUTEXES == 1 )
  47634. static void prvInitialiseMutex( Queue_t *pxNewQueue )
  47635. {
  47636. 80142a2: b580 push {r7, lr}
  47637. 80142a4: b082 sub sp, #8
  47638. 80142a6: af00 add r7, sp, #0
  47639. 80142a8: 6078 str r0, [r7, #4]
  47640. if( pxNewQueue != NULL )
  47641. 80142aa: 687b ldr r3, [r7, #4]
  47642. 80142ac: 2b00 cmp r3, #0
  47643. 80142ae: d00e beq.n 80142ce <prvInitialiseMutex+0x2c>
  47644. {
  47645. /* The queue create function will set all the queue structure members
  47646. correctly for a generic queue, but this function is creating a
  47647. mutex. Overwrite those members that need to be set differently -
  47648. in particular the information required for priority inheritance. */
  47649. pxNewQueue->u.xSemaphore.xMutexHolder = NULL;
  47650. 80142b0: 687b ldr r3, [r7, #4]
  47651. 80142b2: 2200 movs r2, #0
  47652. 80142b4: 609a str r2, [r3, #8]
  47653. pxNewQueue->uxQueueType = queueQUEUE_IS_MUTEX;
  47654. 80142b6: 687b ldr r3, [r7, #4]
  47655. 80142b8: 2200 movs r2, #0
  47656. 80142ba: 601a str r2, [r3, #0]
  47657. /* In case this is a recursive mutex. */
  47658. pxNewQueue->u.xSemaphore.uxRecursiveCallCount = 0;
  47659. 80142bc: 687b ldr r3, [r7, #4]
  47660. 80142be: 2200 movs r2, #0
  47661. 80142c0: 60da str r2, [r3, #12]
  47662. traceCREATE_MUTEX( pxNewQueue );
  47663. /* Start with the semaphore in the expected state. */
  47664. ( void ) xQueueGenericSend( pxNewQueue, NULL, ( TickType_t ) 0U, queueSEND_TO_BACK );
  47665. 80142c2: 2300 movs r3, #0
  47666. 80142c4: 2200 movs r2, #0
  47667. 80142c6: 2100 movs r1, #0
  47668. 80142c8: 6878 ldr r0, [r7, #4]
  47669. 80142ca: f000 f8a3 bl 8014414 <xQueueGenericSend>
  47670. }
  47671. else
  47672. {
  47673. traceCREATE_MUTEX_FAILED();
  47674. }
  47675. }
  47676. 80142ce: bf00 nop
  47677. 80142d0: 3708 adds r7, #8
  47678. 80142d2: 46bd mov sp, r7
  47679. 80142d4: bd80 pop {r7, pc}
  47680. 080142d6 <xQueueCreateMutex>:
  47681. /*-----------------------------------------------------------*/
  47682. #if( ( configUSE_MUTEXES == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) )
  47683. QueueHandle_t xQueueCreateMutex( const uint8_t ucQueueType )
  47684. {
  47685. 80142d6: b580 push {r7, lr}
  47686. 80142d8: b086 sub sp, #24
  47687. 80142da: af00 add r7, sp, #0
  47688. 80142dc: 4603 mov r3, r0
  47689. 80142de: 71fb strb r3, [r7, #7]
  47690. QueueHandle_t xNewQueue;
  47691. const UBaseType_t uxMutexLength = ( UBaseType_t ) 1, uxMutexSize = ( UBaseType_t ) 0;
  47692. 80142e0: 2301 movs r3, #1
  47693. 80142e2: 617b str r3, [r7, #20]
  47694. 80142e4: 2300 movs r3, #0
  47695. 80142e6: 613b str r3, [r7, #16]
  47696. xNewQueue = xQueueGenericCreate( uxMutexLength, uxMutexSize, ucQueueType );
  47697. 80142e8: 79fb ldrb r3, [r7, #7]
  47698. 80142ea: 461a mov r2, r3
  47699. 80142ec: 6939 ldr r1, [r7, #16]
  47700. 80142ee: 6978 ldr r0, [r7, #20]
  47701. 80142f0: f7ff ff79 bl 80141e6 <xQueueGenericCreate>
  47702. 80142f4: 60f8 str r0, [r7, #12]
  47703. prvInitialiseMutex( ( Queue_t * ) xNewQueue );
  47704. 80142f6: 68f8 ldr r0, [r7, #12]
  47705. 80142f8: f7ff ffd3 bl 80142a2 <prvInitialiseMutex>
  47706. return xNewQueue;
  47707. 80142fc: 68fb ldr r3, [r7, #12]
  47708. }
  47709. 80142fe: 4618 mov r0, r3
  47710. 8014300: 3718 adds r7, #24
  47711. 8014302: 46bd mov sp, r7
  47712. 8014304: bd80 pop {r7, pc}
  47713. 08014306 <xQueueCreateMutexStatic>:
  47714. /*-----------------------------------------------------------*/
  47715. #if( ( configUSE_MUTEXES == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) )
  47716. QueueHandle_t xQueueCreateMutexStatic( const uint8_t ucQueueType, StaticQueue_t *pxStaticQueue )
  47717. {
  47718. 8014306: b580 push {r7, lr}
  47719. 8014308: b088 sub sp, #32
  47720. 801430a: af02 add r7, sp, #8
  47721. 801430c: 4603 mov r3, r0
  47722. 801430e: 6039 str r1, [r7, #0]
  47723. 8014310: 71fb strb r3, [r7, #7]
  47724. QueueHandle_t xNewQueue;
  47725. const UBaseType_t uxMutexLength = ( UBaseType_t ) 1, uxMutexSize = ( UBaseType_t ) 0;
  47726. 8014312: 2301 movs r3, #1
  47727. 8014314: 617b str r3, [r7, #20]
  47728. 8014316: 2300 movs r3, #0
  47729. 8014318: 613b str r3, [r7, #16]
  47730. /* Prevent compiler warnings about unused parameters if
  47731. configUSE_TRACE_FACILITY does not equal 1. */
  47732. ( void ) ucQueueType;
  47733. xNewQueue = xQueueGenericCreateStatic( uxMutexLength, uxMutexSize, NULL, pxStaticQueue, ucQueueType );
  47734. 801431a: 79fb ldrb r3, [r7, #7]
  47735. 801431c: 9300 str r3, [sp, #0]
  47736. 801431e: 683b ldr r3, [r7, #0]
  47737. 8014320: 2200 movs r2, #0
  47738. 8014322: 6939 ldr r1, [r7, #16]
  47739. 8014324: 6978 ldr r0, [r7, #20]
  47740. 8014326: f7ff fee1 bl 80140ec <xQueueGenericCreateStatic>
  47741. 801432a: 60f8 str r0, [r7, #12]
  47742. prvInitialiseMutex( ( Queue_t * ) xNewQueue );
  47743. 801432c: 68f8 ldr r0, [r7, #12]
  47744. 801432e: f7ff ffb8 bl 80142a2 <prvInitialiseMutex>
  47745. return xNewQueue;
  47746. 8014332: 68fb ldr r3, [r7, #12]
  47747. }
  47748. 8014334: 4618 mov r0, r3
  47749. 8014336: 3718 adds r7, #24
  47750. 8014338: 46bd mov sp, r7
  47751. 801433a: bd80 pop {r7, pc}
  47752. 0801433c <xQueueGiveMutexRecursive>:
  47753. /*-----------------------------------------------------------*/
  47754. #if ( configUSE_RECURSIVE_MUTEXES == 1 )
  47755. BaseType_t xQueueGiveMutexRecursive( QueueHandle_t xMutex )
  47756. {
  47757. 801433c: b590 push {r4, r7, lr}
  47758. 801433e: b087 sub sp, #28
  47759. 8014340: af00 add r7, sp, #0
  47760. 8014342: 6078 str r0, [r7, #4]
  47761. BaseType_t xReturn;
  47762. Queue_t * const pxMutex = ( Queue_t * ) xMutex;
  47763. 8014344: 687b ldr r3, [r7, #4]
  47764. 8014346: 613b str r3, [r7, #16]
  47765. configASSERT( pxMutex );
  47766. 8014348: 693b ldr r3, [r7, #16]
  47767. 801434a: 2b00 cmp r3, #0
  47768. 801434c: d10b bne.n 8014366 <xQueueGiveMutexRecursive+0x2a>
  47769. __asm volatile
  47770. 801434e: f04f 0350 mov.w r3, #80 @ 0x50
  47771. 8014352: f383 8811 msr BASEPRI, r3
  47772. 8014356: f3bf 8f6f isb sy
  47773. 801435a: f3bf 8f4f dsb sy
  47774. 801435e: 60fb str r3, [r7, #12]
  47775. }
  47776. 8014360: bf00 nop
  47777. 8014362: bf00 nop
  47778. 8014364: e7fd b.n 8014362 <xQueueGiveMutexRecursive+0x26>
  47779. change outside of this task. If this task does not hold the mutex then
  47780. pxMutexHolder can never coincidentally equal the tasks handle, and as
  47781. this is the only condition we are interested in it does not matter if
  47782. pxMutexHolder is accessed simultaneously by another task. Therefore no
  47783. mutual exclusion is required to test the pxMutexHolder variable. */
  47784. if( pxMutex->u.xSemaphore.xMutexHolder == xTaskGetCurrentTaskHandle() )
  47785. 8014366: 693b ldr r3, [r7, #16]
  47786. 8014368: 689c ldr r4, [r3, #8]
  47787. 801436a: f001 fe39 bl 8015fe0 <xTaskGetCurrentTaskHandle>
  47788. 801436e: 4603 mov r3, r0
  47789. 8014370: 429c cmp r4, r3
  47790. 8014372: d111 bne.n 8014398 <xQueueGiveMutexRecursive+0x5c>
  47791. /* uxRecursiveCallCount cannot be zero if xMutexHolder is equal to
  47792. the task handle, therefore no underflow check is required. Also,
  47793. uxRecursiveCallCount is only modified by the mutex holder, and as
  47794. there can only be one, no mutual exclusion is required to modify the
  47795. uxRecursiveCallCount member. */
  47796. ( pxMutex->u.xSemaphore.uxRecursiveCallCount )--;
  47797. 8014374: 693b ldr r3, [r7, #16]
  47798. 8014376: 68db ldr r3, [r3, #12]
  47799. 8014378: 1e5a subs r2, r3, #1
  47800. 801437a: 693b ldr r3, [r7, #16]
  47801. 801437c: 60da str r2, [r3, #12]
  47802. /* Has the recursive call count unwound to 0? */
  47803. if( pxMutex->u.xSemaphore.uxRecursiveCallCount == ( UBaseType_t ) 0 )
  47804. 801437e: 693b ldr r3, [r7, #16]
  47805. 8014380: 68db ldr r3, [r3, #12]
  47806. 8014382: 2b00 cmp r3, #0
  47807. 8014384: d105 bne.n 8014392 <xQueueGiveMutexRecursive+0x56>
  47808. {
  47809. /* Return the mutex. This will automatically unblock any other
  47810. task that might be waiting to access the mutex. */
  47811. ( void ) xQueueGenericSend( pxMutex, NULL, queueMUTEX_GIVE_BLOCK_TIME, queueSEND_TO_BACK );
  47812. 8014386: 2300 movs r3, #0
  47813. 8014388: 2200 movs r2, #0
  47814. 801438a: 2100 movs r1, #0
  47815. 801438c: 6938 ldr r0, [r7, #16]
  47816. 801438e: f000 f841 bl 8014414 <xQueueGenericSend>
  47817. else
  47818. {
  47819. mtCOVERAGE_TEST_MARKER();
  47820. }
  47821. xReturn = pdPASS;
  47822. 8014392: 2301 movs r3, #1
  47823. 8014394: 617b str r3, [r7, #20]
  47824. 8014396: e001 b.n 801439c <xQueueGiveMutexRecursive+0x60>
  47825. }
  47826. else
  47827. {
  47828. /* The mutex cannot be given because the calling task is not the
  47829. holder. */
  47830. xReturn = pdFAIL;
  47831. 8014398: 2300 movs r3, #0
  47832. 801439a: 617b str r3, [r7, #20]
  47833. traceGIVE_MUTEX_RECURSIVE_FAILED( pxMutex );
  47834. }
  47835. return xReturn;
  47836. 801439c: 697b ldr r3, [r7, #20]
  47837. }
  47838. 801439e: 4618 mov r0, r3
  47839. 80143a0: 371c adds r7, #28
  47840. 80143a2: 46bd mov sp, r7
  47841. 80143a4: bd90 pop {r4, r7, pc}
  47842. 080143a6 <xQueueTakeMutexRecursive>:
  47843. /*-----------------------------------------------------------*/
  47844. #if ( configUSE_RECURSIVE_MUTEXES == 1 )
  47845. BaseType_t xQueueTakeMutexRecursive( QueueHandle_t xMutex, TickType_t xTicksToWait )
  47846. {
  47847. 80143a6: b590 push {r4, r7, lr}
  47848. 80143a8: b087 sub sp, #28
  47849. 80143aa: af00 add r7, sp, #0
  47850. 80143ac: 6078 str r0, [r7, #4]
  47851. 80143ae: 6039 str r1, [r7, #0]
  47852. BaseType_t xReturn;
  47853. Queue_t * const pxMutex = ( Queue_t * ) xMutex;
  47854. 80143b0: 687b ldr r3, [r7, #4]
  47855. 80143b2: 613b str r3, [r7, #16]
  47856. configASSERT( pxMutex );
  47857. 80143b4: 693b ldr r3, [r7, #16]
  47858. 80143b6: 2b00 cmp r3, #0
  47859. 80143b8: d10b bne.n 80143d2 <xQueueTakeMutexRecursive+0x2c>
  47860. __asm volatile
  47861. 80143ba: f04f 0350 mov.w r3, #80 @ 0x50
  47862. 80143be: f383 8811 msr BASEPRI, r3
  47863. 80143c2: f3bf 8f6f isb sy
  47864. 80143c6: f3bf 8f4f dsb sy
  47865. 80143ca: 60fb str r3, [r7, #12]
  47866. }
  47867. 80143cc: bf00 nop
  47868. 80143ce: bf00 nop
  47869. 80143d0: e7fd b.n 80143ce <xQueueTakeMutexRecursive+0x28>
  47870. /* Comments regarding mutual exclusion as per those within
  47871. xQueueGiveMutexRecursive(). */
  47872. traceTAKE_MUTEX_RECURSIVE( pxMutex );
  47873. if( pxMutex->u.xSemaphore.xMutexHolder == xTaskGetCurrentTaskHandle() )
  47874. 80143d2: 693b ldr r3, [r7, #16]
  47875. 80143d4: 689c ldr r4, [r3, #8]
  47876. 80143d6: f001 fe03 bl 8015fe0 <xTaskGetCurrentTaskHandle>
  47877. 80143da: 4603 mov r3, r0
  47878. 80143dc: 429c cmp r4, r3
  47879. 80143de: d107 bne.n 80143f0 <xQueueTakeMutexRecursive+0x4a>
  47880. {
  47881. ( pxMutex->u.xSemaphore.uxRecursiveCallCount )++;
  47882. 80143e0: 693b ldr r3, [r7, #16]
  47883. 80143e2: 68db ldr r3, [r3, #12]
  47884. 80143e4: 1c5a adds r2, r3, #1
  47885. 80143e6: 693b ldr r3, [r7, #16]
  47886. 80143e8: 60da str r2, [r3, #12]
  47887. xReturn = pdPASS;
  47888. 80143ea: 2301 movs r3, #1
  47889. 80143ec: 617b str r3, [r7, #20]
  47890. 80143ee: e00c b.n 801440a <xQueueTakeMutexRecursive+0x64>
  47891. }
  47892. else
  47893. {
  47894. xReturn = xQueueSemaphoreTake( pxMutex, xTicksToWait );
  47895. 80143f0: 6839 ldr r1, [r7, #0]
  47896. 80143f2: 6938 ldr r0, [r7, #16]
  47897. 80143f4: f000 fa90 bl 8014918 <xQueueSemaphoreTake>
  47898. 80143f8: 6178 str r0, [r7, #20]
  47899. /* pdPASS will only be returned if the mutex was successfully
  47900. obtained. The calling task may have entered the Blocked state
  47901. before reaching here. */
  47902. if( xReturn != pdFAIL )
  47903. 80143fa: 697b ldr r3, [r7, #20]
  47904. 80143fc: 2b00 cmp r3, #0
  47905. 80143fe: d004 beq.n 801440a <xQueueTakeMutexRecursive+0x64>
  47906. {
  47907. ( pxMutex->u.xSemaphore.uxRecursiveCallCount )++;
  47908. 8014400: 693b ldr r3, [r7, #16]
  47909. 8014402: 68db ldr r3, [r3, #12]
  47910. 8014404: 1c5a adds r2, r3, #1
  47911. 8014406: 693b ldr r3, [r7, #16]
  47912. 8014408: 60da str r2, [r3, #12]
  47913. {
  47914. traceTAKE_MUTEX_RECURSIVE_FAILED( pxMutex );
  47915. }
  47916. }
  47917. return xReturn;
  47918. 801440a: 697b ldr r3, [r7, #20]
  47919. }
  47920. 801440c: 4618 mov r0, r3
  47921. 801440e: 371c adds r7, #28
  47922. 8014410: 46bd mov sp, r7
  47923. 8014412: bd90 pop {r4, r7, pc}
  47924. 08014414 <xQueueGenericSend>:
  47925. #endif /* ( ( configUSE_COUNTING_SEMAPHORES == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) */
  47926. /*-----------------------------------------------------------*/
  47927. BaseType_t xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemToQueue, TickType_t xTicksToWait, const BaseType_t xCopyPosition )
  47928. {
  47929. 8014414: b580 push {r7, lr}
  47930. 8014416: b08e sub sp, #56 @ 0x38
  47931. 8014418: af00 add r7, sp, #0
  47932. 801441a: 60f8 str r0, [r7, #12]
  47933. 801441c: 60b9 str r1, [r7, #8]
  47934. 801441e: 607a str r2, [r7, #4]
  47935. 8014420: 603b str r3, [r7, #0]
  47936. BaseType_t xEntryTimeSet = pdFALSE, xYieldRequired;
  47937. 8014422: 2300 movs r3, #0
  47938. 8014424: 637b str r3, [r7, #52] @ 0x34
  47939. TimeOut_t xTimeOut;
  47940. Queue_t * const pxQueue = xQueue;
  47941. 8014426: 68fb ldr r3, [r7, #12]
  47942. 8014428: 633b str r3, [r7, #48] @ 0x30
  47943. configASSERT( pxQueue );
  47944. 801442a: 6b3b ldr r3, [r7, #48] @ 0x30
  47945. 801442c: 2b00 cmp r3, #0
  47946. 801442e: d10b bne.n 8014448 <xQueueGenericSend+0x34>
  47947. __asm volatile
  47948. 8014430: f04f 0350 mov.w r3, #80 @ 0x50
  47949. 8014434: f383 8811 msr BASEPRI, r3
  47950. 8014438: f3bf 8f6f isb sy
  47951. 801443c: f3bf 8f4f dsb sy
  47952. 8014440: 62bb str r3, [r7, #40] @ 0x28
  47953. }
  47954. 8014442: bf00 nop
  47955. 8014444: bf00 nop
  47956. 8014446: e7fd b.n 8014444 <xQueueGenericSend+0x30>
  47957. configASSERT( !( ( pvItemToQueue == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) );
  47958. 8014448: 68bb ldr r3, [r7, #8]
  47959. 801444a: 2b00 cmp r3, #0
  47960. 801444c: d103 bne.n 8014456 <xQueueGenericSend+0x42>
  47961. 801444e: 6b3b ldr r3, [r7, #48] @ 0x30
  47962. 8014450: 6c1b ldr r3, [r3, #64] @ 0x40
  47963. 8014452: 2b00 cmp r3, #0
  47964. 8014454: d101 bne.n 801445a <xQueueGenericSend+0x46>
  47965. 8014456: 2301 movs r3, #1
  47966. 8014458: e000 b.n 801445c <xQueueGenericSend+0x48>
  47967. 801445a: 2300 movs r3, #0
  47968. 801445c: 2b00 cmp r3, #0
  47969. 801445e: d10b bne.n 8014478 <xQueueGenericSend+0x64>
  47970. __asm volatile
  47971. 8014460: f04f 0350 mov.w r3, #80 @ 0x50
  47972. 8014464: f383 8811 msr BASEPRI, r3
  47973. 8014468: f3bf 8f6f isb sy
  47974. 801446c: f3bf 8f4f dsb sy
  47975. 8014470: 627b str r3, [r7, #36] @ 0x24
  47976. }
  47977. 8014472: bf00 nop
  47978. 8014474: bf00 nop
  47979. 8014476: e7fd b.n 8014474 <xQueueGenericSend+0x60>
  47980. configASSERT( !( ( xCopyPosition == queueOVERWRITE ) && ( pxQueue->uxLength != 1 ) ) );
  47981. 8014478: 683b ldr r3, [r7, #0]
  47982. 801447a: 2b02 cmp r3, #2
  47983. 801447c: d103 bne.n 8014486 <xQueueGenericSend+0x72>
  47984. 801447e: 6b3b ldr r3, [r7, #48] @ 0x30
  47985. 8014480: 6bdb ldr r3, [r3, #60] @ 0x3c
  47986. 8014482: 2b01 cmp r3, #1
  47987. 8014484: d101 bne.n 801448a <xQueueGenericSend+0x76>
  47988. 8014486: 2301 movs r3, #1
  47989. 8014488: e000 b.n 801448c <xQueueGenericSend+0x78>
  47990. 801448a: 2300 movs r3, #0
  47991. 801448c: 2b00 cmp r3, #0
  47992. 801448e: d10b bne.n 80144a8 <xQueueGenericSend+0x94>
  47993. __asm volatile
  47994. 8014490: f04f 0350 mov.w r3, #80 @ 0x50
  47995. 8014494: f383 8811 msr BASEPRI, r3
  47996. 8014498: f3bf 8f6f isb sy
  47997. 801449c: f3bf 8f4f dsb sy
  47998. 80144a0: 623b str r3, [r7, #32]
  47999. }
  48000. 80144a2: bf00 nop
  48001. 80144a4: bf00 nop
  48002. 80144a6: e7fd b.n 80144a4 <xQueueGenericSend+0x90>
  48003. #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
  48004. {
  48005. configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );
  48006. 80144a8: f001 fdaa bl 8016000 <xTaskGetSchedulerState>
  48007. 80144ac: 4603 mov r3, r0
  48008. 80144ae: 2b00 cmp r3, #0
  48009. 80144b0: d102 bne.n 80144b8 <xQueueGenericSend+0xa4>
  48010. 80144b2: 687b ldr r3, [r7, #4]
  48011. 80144b4: 2b00 cmp r3, #0
  48012. 80144b6: d101 bne.n 80144bc <xQueueGenericSend+0xa8>
  48013. 80144b8: 2301 movs r3, #1
  48014. 80144ba: e000 b.n 80144be <xQueueGenericSend+0xaa>
  48015. 80144bc: 2300 movs r3, #0
  48016. 80144be: 2b00 cmp r3, #0
  48017. 80144c0: d10b bne.n 80144da <xQueueGenericSend+0xc6>
  48018. __asm volatile
  48019. 80144c2: f04f 0350 mov.w r3, #80 @ 0x50
  48020. 80144c6: f383 8811 msr BASEPRI, r3
  48021. 80144ca: f3bf 8f6f isb sy
  48022. 80144ce: f3bf 8f4f dsb sy
  48023. 80144d2: 61fb str r3, [r7, #28]
  48024. }
  48025. 80144d4: bf00 nop
  48026. 80144d6: bf00 nop
  48027. 80144d8: e7fd b.n 80144d6 <xQueueGenericSend+0xc2>
  48028. /*lint -save -e904 This function relaxes the coding standard somewhat to
  48029. allow return statements within the function itself. This is done in the
  48030. interest of execution time efficiency. */
  48031. for( ;; )
  48032. {
  48033. taskENTER_CRITICAL();
  48034. 80144da: f002 ff15 bl 8017308 <vPortEnterCritical>
  48035. {
  48036. /* Is there room on the queue now? The running task must be the
  48037. highest priority task wanting to access the queue. If the head item
  48038. in the queue is to be overwritten then it does not matter if the
  48039. queue is full. */
  48040. if( ( pxQueue->uxMessagesWaiting < pxQueue->uxLength ) || ( xCopyPosition == queueOVERWRITE ) )
  48041. 80144de: 6b3b ldr r3, [r7, #48] @ 0x30
  48042. 80144e0: 6b9a ldr r2, [r3, #56] @ 0x38
  48043. 80144e2: 6b3b ldr r3, [r7, #48] @ 0x30
  48044. 80144e4: 6bdb ldr r3, [r3, #60] @ 0x3c
  48045. 80144e6: 429a cmp r2, r3
  48046. 80144e8: d302 bcc.n 80144f0 <xQueueGenericSend+0xdc>
  48047. 80144ea: 683b ldr r3, [r7, #0]
  48048. 80144ec: 2b02 cmp r3, #2
  48049. 80144ee: d129 bne.n 8014544 <xQueueGenericSend+0x130>
  48050. }
  48051. }
  48052. }
  48053. #else /* configUSE_QUEUE_SETS */
  48054. {
  48055. xYieldRequired = prvCopyDataToQueue( pxQueue, pvItemToQueue, xCopyPosition );
  48056. 80144f0: 683a ldr r2, [r7, #0]
  48057. 80144f2: 68b9 ldr r1, [r7, #8]
  48058. 80144f4: 6b38 ldr r0, [r7, #48] @ 0x30
  48059. 80144f6: f000 fbb9 bl 8014c6c <prvCopyDataToQueue>
  48060. 80144fa: 62f8 str r0, [r7, #44] @ 0x2c
  48061. /* If there was a task waiting for data to arrive on the
  48062. queue then unblock it now. */
  48063. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )
  48064. 80144fc: 6b3b ldr r3, [r7, #48] @ 0x30
  48065. 80144fe: 6a5b ldr r3, [r3, #36] @ 0x24
  48066. 8014500: 2b00 cmp r3, #0
  48067. 8014502: d010 beq.n 8014526 <xQueueGenericSend+0x112>
  48068. {
  48069. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )
  48070. 8014504: 6b3b ldr r3, [r7, #48] @ 0x30
  48071. 8014506: 3324 adds r3, #36 @ 0x24
  48072. 8014508: 4618 mov r0, r3
  48073. 801450a: f001 fb7b bl 8015c04 <xTaskRemoveFromEventList>
  48074. 801450e: 4603 mov r3, r0
  48075. 8014510: 2b00 cmp r3, #0
  48076. 8014512: d013 beq.n 801453c <xQueueGenericSend+0x128>
  48077. {
  48078. /* The unblocked task has a priority higher than
  48079. our own so yield immediately. Yes it is ok to do
  48080. this from within the critical section - the kernel
  48081. takes care of that. */
  48082. queueYIELD_IF_USING_PREEMPTION();
  48083. 8014514: 4b3f ldr r3, [pc, #252] @ (8014614 <xQueueGenericSend+0x200>)
  48084. 8014516: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  48085. 801451a: 601a str r2, [r3, #0]
  48086. 801451c: f3bf 8f4f dsb sy
  48087. 8014520: f3bf 8f6f isb sy
  48088. 8014524: e00a b.n 801453c <xQueueGenericSend+0x128>
  48089. else
  48090. {
  48091. mtCOVERAGE_TEST_MARKER();
  48092. }
  48093. }
  48094. else if( xYieldRequired != pdFALSE )
  48095. 8014526: 6afb ldr r3, [r7, #44] @ 0x2c
  48096. 8014528: 2b00 cmp r3, #0
  48097. 801452a: d007 beq.n 801453c <xQueueGenericSend+0x128>
  48098. {
  48099. /* This path is a special case that will only get
  48100. executed if the task was holding multiple mutexes and
  48101. the mutexes were given back in an order that is
  48102. different to that in which they were taken. */
  48103. queueYIELD_IF_USING_PREEMPTION();
  48104. 801452c: 4b39 ldr r3, [pc, #228] @ (8014614 <xQueueGenericSend+0x200>)
  48105. 801452e: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  48106. 8014532: 601a str r2, [r3, #0]
  48107. 8014534: f3bf 8f4f dsb sy
  48108. 8014538: f3bf 8f6f isb sy
  48109. mtCOVERAGE_TEST_MARKER();
  48110. }
  48111. }
  48112. #endif /* configUSE_QUEUE_SETS */
  48113. taskEXIT_CRITICAL();
  48114. 801453c: f002 ff16 bl 801736c <vPortExitCritical>
  48115. return pdPASS;
  48116. 8014540: 2301 movs r3, #1
  48117. 8014542: e063 b.n 801460c <xQueueGenericSend+0x1f8>
  48118. }
  48119. else
  48120. {
  48121. if( xTicksToWait == ( TickType_t ) 0 )
  48122. 8014544: 687b ldr r3, [r7, #4]
  48123. 8014546: 2b00 cmp r3, #0
  48124. 8014548: d103 bne.n 8014552 <xQueueGenericSend+0x13e>
  48125. {
  48126. /* The queue was full and no block time is specified (or
  48127. the block time has expired) so leave now. */
  48128. taskEXIT_CRITICAL();
  48129. 801454a: f002 ff0f bl 801736c <vPortExitCritical>
  48130. /* Return to the original privilege level before exiting
  48131. the function. */
  48132. traceQUEUE_SEND_FAILED( pxQueue );
  48133. return errQUEUE_FULL;
  48134. 801454e: 2300 movs r3, #0
  48135. 8014550: e05c b.n 801460c <xQueueGenericSend+0x1f8>
  48136. }
  48137. else if( xEntryTimeSet == pdFALSE )
  48138. 8014552: 6b7b ldr r3, [r7, #52] @ 0x34
  48139. 8014554: 2b00 cmp r3, #0
  48140. 8014556: d106 bne.n 8014566 <xQueueGenericSend+0x152>
  48141. {
  48142. /* The queue was full and a block time was specified so
  48143. configure the timeout structure. */
  48144. vTaskInternalSetTimeOutState( &xTimeOut );
  48145. 8014558: f107 0314 add.w r3, r7, #20
  48146. 801455c: 4618 mov r0, r3
  48147. 801455e: f001 fbdd bl 8015d1c <vTaskInternalSetTimeOutState>
  48148. xEntryTimeSet = pdTRUE;
  48149. 8014562: 2301 movs r3, #1
  48150. 8014564: 637b str r3, [r7, #52] @ 0x34
  48151. /* Entry time was already set. */
  48152. mtCOVERAGE_TEST_MARKER();
  48153. }
  48154. }
  48155. }
  48156. taskEXIT_CRITICAL();
  48157. 8014566: f002 ff01 bl 801736c <vPortExitCritical>
  48158. /* Interrupts and other tasks can send to and receive from the queue
  48159. now the critical section has been exited. */
  48160. vTaskSuspendAll();
  48161. 801456a: f001 f90f bl 801578c <vTaskSuspendAll>
  48162. prvLockQueue( pxQueue );
  48163. 801456e: f002 fecb bl 8017308 <vPortEnterCritical>
  48164. 8014572: 6b3b ldr r3, [r7, #48] @ 0x30
  48165. 8014574: f893 3044 ldrb.w r3, [r3, #68] @ 0x44
  48166. 8014578: b25b sxtb r3, r3
  48167. 801457a: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  48168. 801457e: d103 bne.n 8014588 <xQueueGenericSend+0x174>
  48169. 8014580: 6b3b ldr r3, [r7, #48] @ 0x30
  48170. 8014582: 2200 movs r2, #0
  48171. 8014584: f883 2044 strb.w r2, [r3, #68] @ 0x44
  48172. 8014588: 6b3b ldr r3, [r7, #48] @ 0x30
  48173. 801458a: f893 3045 ldrb.w r3, [r3, #69] @ 0x45
  48174. 801458e: b25b sxtb r3, r3
  48175. 8014590: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  48176. 8014594: d103 bne.n 801459e <xQueueGenericSend+0x18a>
  48177. 8014596: 6b3b ldr r3, [r7, #48] @ 0x30
  48178. 8014598: 2200 movs r2, #0
  48179. 801459a: f883 2045 strb.w r2, [r3, #69] @ 0x45
  48180. 801459e: f002 fee5 bl 801736c <vPortExitCritical>
  48181. /* Update the timeout state to see if it has expired yet. */
  48182. if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE )
  48183. 80145a2: 1d3a adds r2, r7, #4
  48184. 80145a4: f107 0314 add.w r3, r7, #20
  48185. 80145a8: 4611 mov r1, r2
  48186. 80145aa: 4618 mov r0, r3
  48187. 80145ac: f001 fbcc bl 8015d48 <xTaskCheckForTimeOut>
  48188. 80145b0: 4603 mov r3, r0
  48189. 80145b2: 2b00 cmp r3, #0
  48190. 80145b4: d124 bne.n 8014600 <xQueueGenericSend+0x1ec>
  48191. {
  48192. if( prvIsQueueFull( pxQueue ) != pdFALSE )
  48193. 80145b6: 6b38 ldr r0, [r7, #48] @ 0x30
  48194. 80145b8: f000 fc50 bl 8014e5c <prvIsQueueFull>
  48195. 80145bc: 4603 mov r3, r0
  48196. 80145be: 2b00 cmp r3, #0
  48197. 80145c0: d018 beq.n 80145f4 <xQueueGenericSend+0x1e0>
  48198. {
  48199. traceBLOCKING_ON_QUEUE_SEND( pxQueue );
  48200. vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToSend ), xTicksToWait );
  48201. 80145c2: 6b3b ldr r3, [r7, #48] @ 0x30
  48202. 80145c4: 3310 adds r3, #16
  48203. 80145c6: 687a ldr r2, [r7, #4]
  48204. 80145c8: 4611 mov r1, r2
  48205. 80145ca: 4618 mov r0, r3
  48206. 80145cc: f001 fac8 bl 8015b60 <vTaskPlaceOnEventList>
  48207. /* Unlocking the queue means queue events can effect the
  48208. event list. It is possible that interrupts occurring now
  48209. remove this task from the event list again - but as the
  48210. scheduler is suspended the task will go onto the pending
  48211. ready last instead of the actual ready list. */
  48212. prvUnlockQueue( pxQueue );
  48213. 80145d0: 6b38 ldr r0, [r7, #48] @ 0x30
  48214. 80145d2: f000 fbdb bl 8014d8c <prvUnlockQueue>
  48215. /* Resuming the scheduler will move tasks from the pending
  48216. ready list into the ready list - so it is feasible that this
  48217. task is already in a ready list before it yields - in which
  48218. case the yield will not cause a context switch unless there
  48219. is also a higher priority task in the pending ready list. */
  48220. if( xTaskResumeAll() == pdFALSE )
  48221. 80145d6: f001 f8e7 bl 80157a8 <xTaskResumeAll>
  48222. 80145da: 4603 mov r3, r0
  48223. 80145dc: 2b00 cmp r3, #0
  48224. 80145de: f47f af7c bne.w 80144da <xQueueGenericSend+0xc6>
  48225. {
  48226. portYIELD_WITHIN_API();
  48227. 80145e2: 4b0c ldr r3, [pc, #48] @ (8014614 <xQueueGenericSend+0x200>)
  48228. 80145e4: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  48229. 80145e8: 601a str r2, [r3, #0]
  48230. 80145ea: f3bf 8f4f dsb sy
  48231. 80145ee: f3bf 8f6f isb sy
  48232. 80145f2: e772 b.n 80144da <xQueueGenericSend+0xc6>
  48233. }
  48234. }
  48235. else
  48236. {
  48237. /* Try again. */
  48238. prvUnlockQueue( pxQueue );
  48239. 80145f4: 6b38 ldr r0, [r7, #48] @ 0x30
  48240. 80145f6: f000 fbc9 bl 8014d8c <prvUnlockQueue>
  48241. ( void ) xTaskResumeAll();
  48242. 80145fa: f001 f8d5 bl 80157a8 <xTaskResumeAll>
  48243. 80145fe: e76c b.n 80144da <xQueueGenericSend+0xc6>
  48244. }
  48245. }
  48246. else
  48247. {
  48248. /* The timeout has expired. */
  48249. prvUnlockQueue( pxQueue );
  48250. 8014600: 6b38 ldr r0, [r7, #48] @ 0x30
  48251. 8014602: f000 fbc3 bl 8014d8c <prvUnlockQueue>
  48252. ( void ) xTaskResumeAll();
  48253. 8014606: f001 f8cf bl 80157a8 <xTaskResumeAll>
  48254. traceQUEUE_SEND_FAILED( pxQueue );
  48255. return errQUEUE_FULL;
  48256. 801460a: 2300 movs r3, #0
  48257. }
  48258. } /*lint -restore */
  48259. }
  48260. 801460c: 4618 mov r0, r3
  48261. 801460e: 3738 adds r7, #56 @ 0x38
  48262. 8014610: 46bd mov sp, r7
  48263. 8014612: bd80 pop {r7, pc}
  48264. 8014614: e000ed04 .word 0xe000ed04
  48265. 08014618 <xQueueGenericSendFromISR>:
  48266. /*-----------------------------------------------------------*/
  48267. BaseType_t xQueueGenericSendFromISR( QueueHandle_t xQueue, const void * const pvItemToQueue, BaseType_t * const pxHigherPriorityTaskWoken, const BaseType_t xCopyPosition )
  48268. {
  48269. 8014618: b580 push {r7, lr}
  48270. 801461a: b090 sub sp, #64 @ 0x40
  48271. 801461c: af00 add r7, sp, #0
  48272. 801461e: 60f8 str r0, [r7, #12]
  48273. 8014620: 60b9 str r1, [r7, #8]
  48274. 8014622: 607a str r2, [r7, #4]
  48275. 8014624: 603b str r3, [r7, #0]
  48276. BaseType_t xReturn;
  48277. UBaseType_t uxSavedInterruptStatus;
  48278. Queue_t * const pxQueue = xQueue;
  48279. 8014626: 68fb ldr r3, [r7, #12]
  48280. 8014628: 63bb str r3, [r7, #56] @ 0x38
  48281. configASSERT( pxQueue );
  48282. 801462a: 6bbb ldr r3, [r7, #56] @ 0x38
  48283. 801462c: 2b00 cmp r3, #0
  48284. 801462e: d10b bne.n 8014648 <xQueueGenericSendFromISR+0x30>
  48285. __asm volatile
  48286. 8014630: f04f 0350 mov.w r3, #80 @ 0x50
  48287. 8014634: f383 8811 msr BASEPRI, r3
  48288. 8014638: f3bf 8f6f isb sy
  48289. 801463c: f3bf 8f4f dsb sy
  48290. 8014640: 62bb str r3, [r7, #40] @ 0x28
  48291. }
  48292. 8014642: bf00 nop
  48293. 8014644: bf00 nop
  48294. 8014646: e7fd b.n 8014644 <xQueueGenericSendFromISR+0x2c>
  48295. configASSERT( !( ( pvItemToQueue == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) );
  48296. 8014648: 68bb ldr r3, [r7, #8]
  48297. 801464a: 2b00 cmp r3, #0
  48298. 801464c: d103 bne.n 8014656 <xQueueGenericSendFromISR+0x3e>
  48299. 801464e: 6bbb ldr r3, [r7, #56] @ 0x38
  48300. 8014650: 6c1b ldr r3, [r3, #64] @ 0x40
  48301. 8014652: 2b00 cmp r3, #0
  48302. 8014654: d101 bne.n 801465a <xQueueGenericSendFromISR+0x42>
  48303. 8014656: 2301 movs r3, #1
  48304. 8014658: e000 b.n 801465c <xQueueGenericSendFromISR+0x44>
  48305. 801465a: 2300 movs r3, #0
  48306. 801465c: 2b00 cmp r3, #0
  48307. 801465e: d10b bne.n 8014678 <xQueueGenericSendFromISR+0x60>
  48308. __asm volatile
  48309. 8014660: f04f 0350 mov.w r3, #80 @ 0x50
  48310. 8014664: f383 8811 msr BASEPRI, r3
  48311. 8014668: f3bf 8f6f isb sy
  48312. 801466c: f3bf 8f4f dsb sy
  48313. 8014670: 627b str r3, [r7, #36] @ 0x24
  48314. }
  48315. 8014672: bf00 nop
  48316. 8014674: bf00 nop
  48317. 8014676: e7fd b.n 8014674 <xQueueGenericSendFromISR+0x5c>
  48318. configASSERT( !( ( xCopyPosition == queueOVERWRITE ) && ( pxQueue->uxLength != 1 ) ) );
  48319. 8014678: 683b ldr r3, [r7, #0]
  48320. 801467a: 2b02 cmp r3, #2
  48321. 801467c: d103 bne.n 8014686 <xQueueGenericSendFromISR+0x6e>
  48322. 801467e: 6bbb ldr r3, [r7, #56] @ 0x38
  48323. 8014680: 6bdb ldr r3, [r3, #60] @ 0x3c
  48324. 8014682: 2b01 cmp r3, #1
  48325. 8014684: d101 bne.n 801468a <xQueueGenericSendFromISR+0x72>
  48326. 8014686: 2301 movs r3, #1
  48327. 8014688: e000 b.n 801468c <xQueueGenericSendFromISR+0x74>
  48328. 801468a: 2300 movs r3, #0
  48329. 801468c: 2b00 cmp r3, #0
  48330. 801468e: d10b bne.n 80146a8 <xQueueGenericSendFromISR+0x90>
  48331. __asm volatile
  48332. 8014690: f04f 0350 mov.w r3, #80 @ 0x50
  48333. 8014694: f383 8811 msr BASEPRI, r3
  48334. 8014698: f3bf 8f6f isb sy
  48335. 801469c: f3bf 8f4f dsb sy
  48336. 80146a0: 623b str r3, [r7, #32]
  48337. }
  48338. 80146a2: bf00 nop
  48339. 80146a4: bf00 nop
  48340. 80146a6: e7fd b.n 80146a4 <xQueueGenericSendFromISR+0x8c>
  48341. that have been assigned a priority at or (logically) below the maximum
  48342. system call interrupt priority. FreeRTOS maintains a separate interrupt
  48343. safe API to ensure interrupt entry is as fast and as simple as possible.
  48344. More information (albeit Cortex-M specific) is provided on the following
  48345. link: http://www.freertos.org/RTOS-Cortex-M3-M4.html */
  48346. portASSERT_IF_INTERRUPT_PRIORITY_INVALID();
  48347. 80146a8: f002 ff0e bl 80174c8 <vPortValidateInterruptPriority>
  48348. portFORCE_INLINE static uint32_t ulPortRaiseBASEPRI( void )
  48349. {
  48350. uint32_t ulOriginalBASEPRI, ulNewBASEPRI;
  48351. __asm volatile
  48352. 80146ac: f3ef 8211 mrs r2, BASEPRI
  48353. 80146b0: f04f 0350 mov.w r3, #80 @ 0x50
  48354. 80146b4: f383 8811 msr BASEPRI, r3
  48355. 80146b8: f3bf 8f6f isb sy
  48356. 80146bc: f3bf 8f4f dsb sy
  48357. 80146c0: 61fa str r2, [r7, #28]
  48358. 80146c2: 61bb str r3, [r7, #24]
  48359. :"=r" (ulOriginalBASEPRI), "=r" (ulNewBASEPRI) : "i" ( configMAX_SYSCALL_INTERRUPT_PRIORITY ) : "memory"
  48360. );
  48361. /* This return will not be reached but is necessary to prevent compiler
  48362. warnings. */
  48363. return ulOriginalBASEPRI;
  48364. 80146c4: 69fb ldr r3, [r7, #28]
  48365. /* Similar to xQueueGenericSend, except without blocking if there is no room
  48366. in the queue. Also don't directly wake a task that was blocked on a queue
  48367. read, instead return a flag to say whether a context switch is required or
  48368. not (i.e. has a task with a higher priority than us been woken by this
  48369. post). */
  48370. uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
  48371. 80146c6: 637b str r3, [r7, #52] @ 0x34
  48372. {
  48373. if( ( pxQueue->uxMessagesWaiting < pxQueue->uxLength ) || ( xCopyPosition == queueOVERWRITE ) )
  48374. 80146c8: 6bbb ldr r3, [r7, #56] @ 0x38
  48375. 80146ca: 6b9a ldr r2, [r3, #56] @ 0x38
  48376. 80146cc: 6bbb ldr r3, [r7, #56] @ 0x38
  48377. 80146ce: 6bdb ldr r3, [r3, #60] @ 0x3c
  48378. 80146d0: 429a cmp r2, r3
  48379. 80146d2: d302 bcc.n 80146da <xQueueGenericSendFromISR+0xc2>
  48380. 80146d4: 683b ldr r3, [r7, #0]
  48381. 80146d6: 2b02 cmp r3, #2
  48382. 80146d8: d12f bne.n 801473a <xQueueGenericSendFromISR+0x122>
  48383. {
  48384. const int8_t cTxLock = pxQueue->cTxLock;
  48385. 80146da: 6bbb ldr r3, [r7, #56] @ 0x38
  48386. 80146dc: f893 3045 ldrb.w r3, [r3, #69] @ 0x45
  48387. 80146e0: f887 3033 strb.w r3, [r7, #51] @ 0x33
  48388. const UBaseType_t uxPreviousMessagesWaiting = pxQueue->uxMessagesWaiting;
  48389. 80146e4: 6bbb ldr r3, [r7, #56] @ 0x38
  48390. 80146e6: 6b9b ldr r3, [r3, #56] @ 0x38
  48391. 80146e8: 62fb str r3, [r7, #44] @ 0x2c
  48392. /* Semaphores use xQueueGiveFromISR(), so pxQueue will not be a
  48393. semaphore or mutex. That means prvCopyDataToQueue() cannot result
  48394. in a task disinheriting a priority and prvCopyDataToQueue() can be
  48395. called here even though the disinherit function does not check if
  48396. the scheduler is suspended before accessing the ready lists. */
  48397. ( void ) prvCopyDataToQueue( pxQueue, pvItemToQueue, xCopyPosition );
  48398. 80146ea: 683a ldr r2, [r7, #0]
  48399. 80146ec: 68b9 ldr r1, [r7, #8]
  48400. 80146ee: 6bb8 ldr r0, [r7, #56] @ 0x38
  48401. 80146f0: f000 fabc bl 8014c6c <prvCopyDataToQueue>
  48402. /* The event list is not altered if the queue is locked. This will
  48403. be done when the queue is unlocked later. */
  48404. if( cTxLock == queueUNLOCKED )
  48405. 80146f4: f997 3033 ldrsb.w r3, [r7, #51] @ 0x33
  48406. 80146f8: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  48407. 80146fc: d112 bne.n 8014724 <xQueueGenericSendFromISR+0x10c>
  48408. }
  48409. }
  48410. }
  48411. #else /* configUSE_QUEUE_SETS */
  48412. {
  48413. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )
  48414. 80146fe: 6bbb ldr r3, [r7, #56] @ 0x38
  48415. 8014700: 6a5b ldr r3, [r3, #36] @ 0x24
  48416. 8014702: 2b00 cmp r3, #0
  48417. 8014704: d016 beq.n 8014734 <xQueueGenericSendFromISR+0x11c>
  48418. {
  48419. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )
  48420. 8014706: 6bbb ldr r3, [r7, #56] @ 0x38
  48421. 8014708: 3324 adds r3, #36 @ 0x24
  48422. 801470a: 4618 mov r0, r3
  48423. 801470c: f001 fa7a bl 8015c04 <xTaskRemoveFromEventList>
  48424. 8014710: 4603 mov r3, r0
  48425. 8014712: 2b00 cmp r3, #0
  48426. 8014714: d00e beq.n 8014734 <xQueueGenericSendFromISR+0x11c>
  48427. {
  48428. /* The task waiting has a higher priority so record that a
  48429. context switch is required. */
  48430. if( pxHigherPriorityTaskWoken != NULL )
  48431. 8014716: 687b ldr r3, [r7, #4]
  48432. 8014718: 2b00 cmp r3, #0
  48433. 801471a: d00b beq.n 8014734 <xQueueGenericSendFromISR+0x11c>
  48434. {
  48435. *pxHigherPriorityTaskWoken = pdTRUE;
  48436. 801471c: 687b ldr r3, [r7, #4]
  48437. 801471e: 2201 movs r2, #1
  48438. 8014720: 601a str r2, [r3, #0]
  48439. 8014722: e007 b.n 8014734 <xQueueGenericSendFromISR+0x11c>
  48440. }
  48441. else
  48442. {
  48443. /* Increment the lock count so the task that unlocks the queue
  48444. knows that data was posted while it was locked. */
  48445. pxQueue->cTxLock = ( int8_t ) ( cTxLock + 1 );
  48446. 8014724: f897 3033 ldrb.w r3, [r7, #51] @ 0x33
  48447. 8014728: 3301 adds r3, #1
  48448. 801472a: b2db uxtb r3, r3
  48449. 801472c: b25a sxtb r2, r3
  48450. 801472e: 6bbb ldr r3, [r7, #56] @ 0x38
  48451. 8014730: f883 2045 strb.w r2, [r3, #69] @ 0x45
  48452. }
  48453. xReturn = pdPASS;
  48454. 8014734: 2301 movs r3, #1
  48455. 8014736: 63fb str r3, [r7, #60] @ 0x3c
  48456. {
  48457. 8014738: e001 b.n 801473e <xQueueGenericSendFromISR+0x126>
  48458. }
  48459. else
  48460. {
  48461. traceQUEUE_SEND_FROM_ISR_FAILED( pxQueue );
  48462. xReturn = errQUEUE_FULL;
  48463. 801473a: 2300 movs r3, #0
  48464. 801473c: 63fb str r3, [r7, #60] @ 0x3c
  48465. 801473e: 6b7b ldr r3, [r7, #52] @ 0x34
  48466. 8014740: 617b str r3, [r7, #20]
  48467. }
  48468. /*-----------------------------------------------------------*/
  48469. portFORCE_INLINE static void vPortSetBASEPRI( uint32_t ulNewMaskValue )
  48470. {
  48471. __asm volatile
  48472. 8014742: 697b ldr r3, [r7, #20]
  48473. 8014744: f383 8811 msr BASEPRI, r3
  48474. (
  48475. " msr basepri, %0 " :: "r" ( ulNewMaskValue ) : "memory"
  48476. );
  48477. }
  48478. 8014748: bf00 nop
  48479. }
  48480. }
  48481. portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus );
  48482. return xReturn;
  48483. 801474a: 6bfb ldr r3, [r7, #60] @ 0x3c
  48484. }
  48485. 801474c: 4618 mov r0, r3
  48486. 801474e: 3740 adds r7, #64 @ 0x40
  48487. 8014750: 46bd mov sp, r7
  48488. 8014752: bd80 pop {r7, pc}
  48489. 08014754 <xQueueReceive>:
  48490. return xReturn;
  48491. }
  48492. /*-----------------------------------------------------------*/
  48493. BaseType_t xQueueReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait )
  48494. {
  48495. 8014754: b580 push {r7, lr}
  48496. 8014756: b08c sub sp, #48 @ 0x30
  48497. 8014758: af00 add r7, sp, #0
  48498. 801475a: 60f8 str r0, [r7, #12]
  48499. 801475c: 60b9 str r1, [r7, #8]
  48500. 801475e: 607a str r2, [r7, #4]
  48501. BaseType_t xEntryTimeSet = pdFALSE;
  48502. 8014760: 2300 movs r3, #0
  48503. 8014762: 62fb str r3, [r7, #44] @ 0x2c
  48504. TimeOut_t xTimeOut;
  48505. Queue_t * const pxQueue = xQueue;
  48506. 8014764: 68fb ldr r3, [r7, #12]
  48507. 8014766: 62bb str r3, [r7, #40] @ 0x28
  48508. /* Check the pointer is not NULL. */
  48509. configASSERT( ( pxQueue ) );
  48510. 8014768: 6abb ldr r3, [r7, #40] @ 0x28
  48511. 801476a: 2b00 cmp r3, #0
  48512. 801476c: d10b bne.n 8014786 <xQueueReceive+0x32>
  48513. __asm volatile
  48514. 801476e: f04f 0350 mov.w r3, #80 @ 0x50
  48515. 8014772: f383 8811 msr BASEPRI, r3
  48516. 8014776: f3bf 8f6f isb sy
  48517. 801477a: f3bf 8f4f dsb sy
  48518. 801477e: 623b str r3, [r7, #32]
  48519. }
  48520. 8014780: bf00 nop
  48521. 8014782: bf00 nop
  48522. 8014784: e7fd b.n 8014782 <xQueueReceive+0x2e>
  48523. /* The buffer into which data is received can only be NULL if the data size
  48524. is zero (so no data is copied into the buffer. */
  48525. configASSERT( !( ( ( pvBuffer ) == NULL ) && ( ( pxQueue )->uxItemSize != ( UBaseType_t ) 0U ) ) );
  48526. 8014786: 68bb ldr r3, [r7, #8]
  48527. 8014788: 2b00 cmp r3, #0
  48528. 801478a: d103 bne.n 8014794 <xQueueReceive+0x40>
  48529. 801478c: 6abb ldr r3, [r7, #40] @ 0x28
  48530. 801478e: 6c1b ldr r3, [r3, #64] @ 0x40
  48531. 8014790: 2b00 cmp r3, #0
  48532. 8014792: d101 bne.n 8014798 <xQueueReceive+0x44>
  48533. 8014794: 2301 movs r3, #1
  48534. 8014796: e000 b.n 801479a <xQueueReceive+0x46>
  48535. 8014798: 2300 movs r3, #0
  48536. 801479a: 2b00 cmp r3, #0
  48537. 801479c: d10b bne.n 80147b6 <xQueueReceive+0x62>
  48538. __asm volatile
  48539. 801479e: f04f 0350 mov.w r3, #80 @ 0x50
  48540. 80147a2: f383 8811 msr BASEPRI, r3
  48541. 80147a6: f3bf 8f6f isb sy
  48542. 80147aa: f3bf 8f4f dsb sy
  48543. 80147ae: 61fb str r3, [r7, #28]
  48544. }
  48545. 80147b0: bf00 nop
  48546. 80147b2: bf00 nop
  48547. 80147b4: e7fd b.n 80147b2 <xQueueReceive+0x5e>
  48548. /* Cannot block if the scheduler is suspended. */
  48549. #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
  48550. {
  48551. configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );
  48552. 80147b6: f001 fc23 bl 8016000 <xTaskGetSchedulerState>
  48553. 80147ba: 4603 mov r3, r0
  48554. 80147bc: 2b00 cmp r3, #0
  48555. 80147be: d102 bne.n 80147c6 <xQueueReceive+0x72>
  48556. 80147c0: 687b ldr r3, [r7, #4]
  48557. 80147c2: 2b00 cmp r3, #0
  48558. 80147c4: d101 bne.n 80147ca <xQueueReceive+0x76>
  48559. 80147c6: 2301 movs r3, #1
  48560. 80147c8: e000 b.n 80147cc <xQueueReceive+0x78>
  48561. 80147ca: 2300 movs r3, #0
  48562. 80147cc: 2b00 cmp r3, #0
  48563. 80147ce: d10b bne.n 80147e8 <xQueueReceive+0x94>
  48564. __asm volatile
  48565. 80147d0: f04f 0350 mov.w r3, #80 @ 0x50
  48566. 80147d4: f383 8811 msr BASEPRI, r3
  48567. 80147d8: f3bf 8f6f isb sy
  48568. 80147dc: f3bf 8f4f dsb sy
  48569. 80147e0: 61bb str r3, [r7, #24]
  48570. }
  48571. 80147e2: bf00 nop
  48572. 80147e4: bf00 nop
  48573. 80147e6: e7fd b.n 80147e4 <xQueueReceive+0x90>
  48574. /*lint -save -e904 This function relaxes the coding standard somewhat to
  48575. allow return statements within the function itself. This is done in the
  48576. interest of execution time efficiency. */
  48577. for( ;; )
  48578. {
  48579. taskENTER_CRITICAL();
  48580. 80147e8: f002 fd8e bl 8017308 <vPortEnterCritical>
  48581. {
  48582. const UBaseType_t uxMessagesWaiting = pxQueue->uxMessagesWaiting;
  48583. 80147ec: 6abb ldr r3, [r7, #40] @ 0x28
  48584. 80147ee: 6b9b ldr r3, [r3, #56] @ 0x38
  48585. 80147f0: 627b str r3, [r7, #36] @ 0x24
  48586. /* Is there data in the queue now? To be running the calling task
  48587. must be the highest priority task wanting to access the queue. */
  48588. if( uxMessagesWaiting > ( UBaseType_t ) 0 )
  48589. 80147f2: 6a7b ldr r3, [r7, #36] @ 0x24
  48590. 80147f4: 2b00 cmp r3, #0
  48591. 80147f6: d01f beq.n 8014838 <xQueueReceive+0xe4>
  48592. {
  48593. /* Data available, remove one item. */
  48594. prvCopyDataFromQueue( pxQueue, pvBuffer );
  48595. 80147f8: 68b9 ldr r1, [r7, #8]
  48596. 80147fa: 6ab8 ldr r0, [r7, #40] @ 0x28
  48597. 80147fc: f000 faa0 bl 8014d40 <prvCopyDataFromQueue>
  48598. traceQUEUE_RECEIVE( pxQueue );
  48599. pxQueue->uxMessagesWaiting = uxMessagesWaiting - ( UBaseType_t ) 1;
  48600. 8014800: 6a7b ldr r3, [r7, #36] @ 0x24
  48601. 8014802: 1e5a subs r2, r3, #1
  48602. 8014804: 6abb ldr r3, [r7, #40] @ 0x28
  48603. 8014806: 639a str r2, [r3, #56] @ 0x38
  48604. /* There is now space in the queue, were any tasks waiting to
  48605. post to the queue? If so, unblock the highest priority waiting
  48606. task. */
  48607. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )
  48608. 8014808: 6abb ldr r3, [r7, #40] @ 0x28
  48609. 801480a: 691b ldr r3, [r3, #16]
  48610. 801480c: 2b00 cmp r3, #0
  48611. 801480e: d00f beq.n 8014830 <xQueueReceive+0xdc>
  48612. {
  48613. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE )
  48614. 8014810: 6abb ldr r3, [r7, #40] @ 0x28
  48615. 8014812: 3310 adds r3, #16
  48616. 8014814: 4618 mov r0, r3
  48617. 8014816: f001 f9f5 bl 8015c04 <xTaskRemoveFromEventList>
  48618. 801481a: 4603 mov r3, r0
  48619. 801481c: 2b00 cmp r3, #0
  48620. 801481e: d007 beq.n 8014830 <xQueueReceive+0xdc>
  48621. {
  48622. queueYIELD_IF_USING_PREEMPTION();
  48623. 8014820: 4b3c ldr r3, [pc, #240] @ (8014914 <xQueueReceive+0x1c0>)
  48624. 8014822: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  48625. 8014826: 601a str r2, [r3, #0]
  48626. 8014828: f3bf 8f4f dsb sy
  48627. 801482c: f3bf 8f6f isb sy
  48628. else
  48629. {
  48630. mtCOVERAGE_TEST_MARKER();
  48631. }
  48632. taskEXIT_CRITICAL();
  48633. 8014830: f002 fd9c bl 801736c <vPortExitCritical>
  48634. return pdPASS;
  48635. 8014834: 2301 movs r3, #1
  48636. 8014836: e069 b.n 801490c <xQueueReceive+0x1b8>
  48637. }
  48638. else
  48639. {
  48640. if( xTicksToWait == ( TickType_t ) 0 )
  48641. 8014838: 687b ldr r3, [r7, #4]
  48642. 801483a: 2b00 cmp r3, #0
  48643. 801483c: d103 bne.n 8014846 <xQueueReceive+0xf2>
  48644. {
  48645. /* The queue was empty and no block time is specified (or
  48646. the block time has expired) so leave now. */
  48647. taskEXIT_CRITICAL();
  48648. 801483e: f002 fd95 bl 801736c <vPortExitCritical>
  48649. traceQUEUE_RECEIVE_FAILED( pxQueue );
  48650. return errQUEUE_EMPTY;
  48651. 8014842: 2300 movs r3, #0
  48652. 8014844: e062 b.n 801490c <xQueueReceive+0x1b8>
  48653. }
  48654. else if( xEntryTimeSet == pdFALSE )
  48655. 8014846: 6afb ldr r3, [r7, #44] @ 0x2c
  48656. 8014848: 2b00 cmp r3, #0
  48657. 801484a: d106 bne.n 801485a <xQueueReceive+0x106>
  48658. {
  48659. /* The queue was empty and a block time was specified so
  48660. configure the timeout structure. */
  48661. vTaskInternalSetTimeOutState( &xTimeOut );
  48662. 801484c: f107 0310 add.w r3, r7, #16
  48663. 8014850: 4618 mov r0, r3
  48664. 8014852: f001 fa63 bl 8015d1c <vTaskInternalSetTimeOutState>
  48665. xEntryTimeSet = pdTRUE;
  48666. 8014856: 2301 movs r3, #1
  48667. 8014858: 62fb str r3, [r7, #44] @ 0x2c
  48668. /* Entry time was already set. */
  48669. mtCOVERAGE_TEST_MARKER();
  48670. }
  48671. }
  48672. }
  48673. taskEXIT_CRITICAL();
  48674. 801485a: f002 fd87 bl 801736c <vPortExitCritical>
  48675. /* Interrupts and other tasks can send to and receive from the queue
  48676. now the critical section has been exited. */
  48677. vTaskSuspendAll();
  48678. 801485e: f000 ff95 bl 801578c <vTaskSuspendAll>
  48679. prvLockQueue( pxQueue );
  48680. 8014862: f002 fd51 bl 8017308 <vPortEnterCritical>
  48681. 8014866: 6abb ldr r3, [r7, #40] @ 0x28
  48682. 8014868: f893 3044 ldrb.w r3, [r3, #68] @ 0x44
  48683. 801486c: b25b sxtb r3, r3
  48684. 801486e: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  48685. 8014872: d103 bne.n 801487c <xQueueReceive+0x128>
  48686. 8014874: 6abb ldr r3, [r7, #40] @ 0x28
  48687. 8014876: 2200 movs r2, #0
  48688. 8014878: f883 2044 strb.w r2, [r3, #68] @ 0x44
  48689. 801487c: 6abb ldr r3, [r7, #40] @ 0x28
  48690. 801487e: f893 3045 ldrb.w r3, [r3, #69] @ 0x45
  48691. 8014882: b25b sxtb r3, r3
  48692. 8014884: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  48693. 8014888: d103 bne.n 8014892 <xQueueReceive+0x13e>
  48694. 801488a: 6abb ldr r3, [r7, #40] @ 0x28
  48695. 801488c: 2200 movs r2, #0
  48696. 801488e: f883 2045 strb.w r2, [r3, #69] @ 0x45
  48697. 8014892: f002 fd6b bl 801736c <vPortExitCritical>
  48698. /* Update the timeout state to see if it has expired yet. */
  48699. if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE )
  48700. 8014896: 1d3a adds r2, r7, #4
  48701. 8014898: f107 0310 add.w r3, r7, #16
  48702. 801489c: 4611 mov r1, r2
  48703. 801489e: 4618 mov r0, r3
  48704. 80148a0: f001 fa52 bl 8015d48 <xTaskCheckForTimeOut>
  48705. 80148a4: 4603 mov r3, r0
  48706. 80148a6: 2b00 cmp r3, #0
  48707. 80148a8: d123 bne.n 80148f2 <xQueueReceive+0x19e>
  48708. {
  48709. /* The timeout has not expired. If the queue is still empty place
  48710. the task on the list of tasks waiting to receive from the queue. */
  48711. if( prvIsQueueEmpty( pxQueue ) != pdFALSE )
  48712. 80148aa: 6ab8 ldr r0, [r7, #40] @ 0x28
  48713. 80148ac: f000 fac0 bl 8014e30 <prvIsQueueEmpty>
  48714. 80148b0: 4603 mov r3, r0
  48715. 80148b2: 2b00 cmp r3, #0
  48716. 80148b4: d017 beq.n 80148e6 <xQueueReceive+0x192>
  48717. {
  48718. traceBLOCKING_ON_QUEUE_RECEIVE( pxQueue );
  48719. vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait );
  48720. 80148b6: 6abb ldr r3, [r7, #40] @ 0x28
  48721. 80148b8: 3324 adds r3, #36 @ 0x24
  48722. 80148ba: 687a ldr r2, [r7, #4]
  48723. 80148bc: 4611 mov r1, r2
  48724. 80148be: 4618 mov r0, r3
  48725. 80148c0: f001 f94e bl 8015b60 <vTaskPlaceOnEventList>
  48726. prvUnlockQueue( pxQueue );
  48727. 80148c4: 6ab8 ldr r0, [r7, #40] @ 0x28
  48728. 80148c6: f000 fa61 bl 8014d8c <prvUnlockQueue>
  48729. if( xTaskResumeAll() == pdFALSE )
  48730. 80148ca: f000 ff6d bl 80157a8 <xTaskResumeAll>
  48731. 80148ce: 4603 mov r3, r0
  48732. 80148d0: 2b00 cmp r3, #0
  48733. 80148d2: d189 bne.n 80147e8 <xQueueReceive+0x94>
  48734. {
  48735. portYIELD_WITHIN_API();
  48736. 80148d4: 4b0f ldr r3, [pc, #60] @ (8014914 <xQueueReceive+0x1c0>)
  48737. 80148d6: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  48738. 80148da: 601a str r2, [r3, #0]
  48739. 80148dc: f3bf 8f4f dsb sy
  48740. 80148e0: f3bf 8f6f isb sy
  48741. 80148e4: e780 b.n 80147e8 <xQueueReceive+0x94>
  48742. }
  48743. else
  48744. {
  48745. /* The queue contains data again. Loop back to try and read the
  48746. data. */
  48747. prvUnlockQueue( pxQueue );
  48748. 80148e6: 6ab8 ldr r0, [r7, #40] @ 0x28
  48749. 80148e8: f000 fa50 bl 8014d8c <prvUnlockQueue>
  48750. ( void ) xTaskResumeAll();
  48751. 80148ec: f000 ff5c bl 80157a8 <xTaskResumeAll>
  48752. 80148f0: e77a b.n 80147e8 <xQueueReceive+0x94>
  48753. }
  48754. else
  48755. {
  48756. /* Timed out. If there is no data in the queue exit, otherwise loop
  48757. back and attempt to read the data. */
  48758. prvUnlockQueue( pxQueue );
  48759. 80148f2: 6ab8 ldr r0, [r7, #40] @ 0x28
  48760. 80148f4: f000 fa4a bl 8014d8c <prvUnlockQueue>
  48761. ( void ) xTaskResumeAll();
  48762. 80148f8: f000 ff56 bl 80157a8 <xTaskResumeAll>
  48763. if( prvIsQueueEmpty( pxQueue ) != pdFALSE )
  48764. 80148fc: 6ab8 ldr r0, [r7, #40] @ 0x28
  48765. 80148fe: f000 fa97 bl 8014e30 <prvIsQueueEmpty>
  48766. 8014902: 4603 mov r3, r0
  48767. 8014904: 2b00 cmp r3, #0
  48768. 8014906: f43f af6f beq.w 80147e8 <xQueueReceive+0x94>
  48769. {
  48770. traceQUEUE_RECEIVE_FAILED( pxQueue );
  48771. return errQUEUE_EMPTY;
  48772. 801490a: 2300 movs r3, #0
  48773. {
  48774. mtCOVERAGE_TEST_MARKER();
  48775. }
  48776. }
  48777. } /*lint -restore */
  48778. }
  48779. 801490c: 4618 mov r0, r3
  48780. 801490e: 3730 adds r7, #48 @ 0x30
  48781. 8014910: 46bd mov sp, r7
  48782. 8014912: bd80 pop {r7, pc}
  48783. 8014914: e000ed04 .word 0xe000ed04
  48784. 08014918 <xQueueSemaphoreTake>:
  48785. /*-----------------------------------------------------------*/
  48786. BaseType_t xQueueSemaphoreTake( QueueHandle_t xQueue, TickType_t xTicksToWait )
  48787. {
  48788. 8014918: b580 push {r7, lr}
  48789. 801491a: b08e sub sp, #56 @ 0x38
  48790. 801491c: af00 add r7, sp, #0
  48791. 801491e: 6078 str r0, [r7, #4]
  48792. 8014920: 6039 str r1, [r7, #0]
  48793. BaseType_t xEntryTimeSet = pdFALSE;
  48794. 8014922: 2300 movs r3, #0
  48795. 8014924: 637b str r3, [r7, #52] @ 0x34
  48796. TimeOut_t xTimeOut;
  48797. Queue_t * const pxQueue = xQueue;
  48798. 8014926: 687b ldr r3, [r7, #4]
  48799. 8014928: 62fb str r3, [r7, #44] @ 0x2c
  48800. #if( configUSE_MUTEXES == 1 )
  48801. BaseType_t xInheritanceOccurred = pdFALSE;
  48802. 801492a: 2300 movs r3, #0
  48803. 801492c: 633b str r3, [r7, #48] @ 0x30
  48804. #endif
  48805. /* Check the queue pointer is not NULL. */
  48806. configASSERT( ( pxQueue ) );
  48807. 801492e: 6afb ldr r3, [r7, #44] @ 0x2c
  48808. 8014930: 2b00 cmp r3, #0
  48809. 8014932: d10b bne.n 801494c <xQueueSemaphoreTake+0x34>
  48810. __asm volatile
  48811. 8014934: f04f 0350 mov.w r3, #80 @ 0x50
  48812. 8014938: f383 8811 msr BASEPRI, r3
  48813. 801493c: f3bf 8f6f isb sy
  48814. 8014940: f3bf 8f4f dsb sy
  48815. 8014944: 623b str r3, [r7, #32]
  48816. }
  48817. 8014946: bf00 nop
  48818. 8014948: bf00 nop
  48819. 801494a: e7fd b.n 8014948 <xQueueSemaphoreTake+0x30>
  48820. /* Check this really is a semaphore, in which case the item size will be
  48821. 0. */
  48822. configASSERT( pxQueue->uxItemSize == 0 );
  48823. 801494c: 6afb ldr r3, [r7, #44] @ 0x2c
  48824. 801494e: 6c1b ldr r3, [r3, #64] @ 0x40
  48825. 8014950: 2b00 cmp r3, #0
  48826. 8014952: d00b beq.n 801496c <xQueueSemaphoreTake+0x54>
  48827. __asm volatile
  48828. 8014954: f04f 0350 mov.w r3, #80 @ 0x50
  48829. 8014958: f383 8811 msr BASEPRI, r3
  48830. 801495c: f3bf 8f6f isb sy
  48831. 8014960: f3bf 8f4f dsb sy
  48832. 8014964: 61fb str r3, [r7, #28]
  48833. }
  48834. 8014966: bf00 nop
  48835. 8014968: bf00 nop
  48836. 801496a: e7fd b.n 8014968 <xQueueSemaphoreTake+0x50>
  48837. /* Cannot block if the scheduler is suspended. */
  48838. #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
  48839. {
  48840. configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );
  48841. 801496c: f001 fb48 bl 8016000 <xTaskGetSchedulerState>
  48842. 8014970: 4603 mov r3, r0
  48843. 8014972: 2b00 cmp r3, #0
  48844. 8014974: d102 bne.n 801497c <xQueueSemaphoreTake+0x64>
  48845. 8014976: 683b ldr r3, [r7, #0]
  48846. 8014978: 2b00 cmp r3, #0
  48847. 801497a: d101 bne.n 8014980 <xQueueSemaphoreTake+0x68>
  48848. 801497c: 2301 movs r3, #1
  48849. 801497e: e000 b.n 8014982 <xQueueSemaphoreTake+0x6a>
  48850. 8014980: 2300 movs r3, #0
  48851. 8014982: 2b00 cmp r3, #0
  48852. 8014984: d10b bne.n 801499e <xQueueSemaphoreTake+0x86>
  48853. __asm volatile
  48854. 8014986: f04f 0350 mov.w r3, #80 @ 0x50
  48855. 801498a: f383 8811 msr BASEPRI, r3
  48856. 801498e: f3bf 8f6f isb sy
  48857. 8014992: f3bf 8f4f dsb sy
  48858. 8014996: 61bb str r3, [r7, #24]
  48859. }
  48860. 8014998: bf00 nop
  48861. 801499a: bf00 nop
  48862. 801499c: e7fd b.n 801499a <xQueueSemaphoreTake+0x82>
  48863. /*lint -save -e904 This function relaxes the coding standard somewhat to allow return
  48864. statements within the function itself. This is done in the interest
  48865. of execution time efficiency. */
  48866. for( ;; )
  48867. {
  48868. taskENTER_CRITICAL();
  48869. 801499e: f002 fcb3 bl 8017308 <vPortEnterCritical>
  48870. {
  48871. /* Semaphores are queues with an item size of 0, and where the
  48872. number of messages in the queue is the semaphore's count value. */
  48873. const UBaseType_t uxSemaphoreCount = pxQueue->uxMessagesWaiting;
  48874. 80149a2: 6afb ldr r3, [r7, #44] @ 0x2c
  48875. 80149a4: 6b9b ldr r3, [r3, #56] @ 0x38
  48876. 80149a6: 62bb str r3, [r7, #40] @ 0x28
  48877. /* Is there data in the queue now? To be running the calling task
  48878. must be the highest priority task wanting to access the queue. */
  48879. if( uxSemaphoreCount > ( UBaseType_t ) 0 )
  48880. 80149a8: 6abb ldr r3, [r7, #40] @ 0x28
  48881. 80149aa: 2b00 cmp r3, #0
  48882. 80149ac: d024 beq.n 80149f8 <xQueueSemaphoreTake+0xe0>
  48883. {
  48884. traceQUEUE_RECEIVE( pxQueue );
  48885. /* Semaphores are queues with a data size of zero and where the
  48886. messages waiting is the semaphore's count. Reduce the count. */
  48887. pxQueue->uxMessagesWaiting = uxSemaphoreCount - ( UBaseType_t ) 1;
  48888. 80149ae: 6abb ldr r3, [r7, #40] @ 0x28
  48889. 80149b0: 1e5a subs r2, r3, #1
  48890. 80149b2: 6afb ldr r3, [r7, #44] @ 0x2c
  48891. 80149b4: 639a str r2, [r3, #56] @ 0x38
  48892. #if ( configUSE_MUTEXES == 1 )
  48893. {
  48894. if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX )
  48895. 80149b6: 6afb ldr r3, [r7, #44] @ 0x2c
  48896. 80149b8: 681b ldr r3, [r3, #0]
  48897. 80149ba: 2b00 cmp r3, #0
  48898. 80149bc: d104 bne.n 80149c8 <xQueueSemaphoreTake+0xb0>
  48899. {
  48900. /* Record the information required to implement
  48901. priority inheritance should it become necessary. */
  48902. pxQueue->u.xSemaphore.xMutexHolder = pvTaskIncrementMutexHeldCount();
  48903. 80149be: f001 fc99 bl 80162f4 <pvTaskIncrementMutexHeldCount>
  48904. 80149c2: 4602 mov r2, r0
  48905. 80149c4: 6afb ldr r3, [r7, #44] @ 0x2c
  48906. 80149c6: 609a str r2, [r3, #8]
  48907. }
  48908. #endif /* configUSE_MUTEXES */
  48909. /* Check to see if other tasks are blocked waiting to give the
  48910. semaphore, and if so, unblock the highest priority such task. */
  48911. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )
  48912. 80149c8: 6afb ldr r3, [r7, #44] @ 0x2c
  48913. 80149ca: 691b ldr r3, [r3, #16]
  48914. 80149cc: 2b00 cmp r3, #0
  48915. 80149ce: d00f beq.n 80149f0 <xQueueSemaphoreTake+0xd8>
  48916. {
  48917. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE )
  48918. 80149d0: 6afb ldr r3, [r7, #44] @ 0x2c
  48919. 80149d2: 3310 adds r3, #16
  48920. 80149d4: 4618 mov r0, r3
  48921. 80149d6: f001 f915 bl 8015c04 <xTaskRemoveFromEventList>
  48922. 80149da: 4603 mov r3, r0
  48923. 80149dc: 2b00 cmp r3, #0
  48924. 80149de: d007 beq.n 80149f0 <xQueueSemaphoreTake+0xd8>
  48925. {
  48926. queueYIELD_IF_USING_PREEMPTION();
  48927. 80149e0: 4b54 ldr r3, [pc, #336] @ (8014b34 <xQueueSemaphoreTake+0x21c>)
  48928. 80149e2: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  48929. 80149e6: 601a str r2, [r3, #0]
  48930. 80149e8: f3bf 8f4f dsb sy
  48931. 80149ec: f3bf 8f6f isb sy
  48932. else
  48933. {
  48934. mtCOVERAGE_TEST_MARKER();
  48935. }
  48936. taskEXIT_CRITICAL();
  48937. 80149f0: f002 fcbc bl 801736c <vPortExitCritical>
  48938. return pdPASS;
  48939. 80149f4: 2301 movs r3, #1
  48940. 80149f6: e098 b.n 8014b2a <xQueueSemaphoreTake+0x212>
  48941. }
  48942. else
  48943. {
  48944. if( xTicksToWait == ( TickType_t ) 0 )
  48945. 80149f8: 683b ldr r3, [r7, #0]
  48946. 80149fa: 2b00 cmp r3, #0
  48947. 80149fc: d112 bne.n 8014a24 <xQueueSemaphoreTake+0x10c>
  48948. /* For inheritance to have occurred there must have been an
  48949. initial timeout, and an adjusted timeout cannot become 0, as
  48950. if it were 0 the function would have exited. */
  48951. #if( configUSE_MUTEXES == 1 )
  48952. {
  48953. configASSERT( xInheritanceOccurred == pdFALSE );
  48954. 80149fe: 6b3b ldr r3, [r7, #48] @ 0x30
  48955. 8014a00: 2b00 cmp r3, #0
  48956. 8014a02: d00b beq.n 8014a1c <xQueueSemaphoreTake+0x104>
  48957. __asm volatile
  48958. 8014a04: f04f 0350 mov.w r3, #80 @ 0x50
  48959. 8014a08: f383 8811 msr BASEPRI, r3
  48960. 8014a0c: f3bf 8f6f isb sy
  48961. 8014a10: f3bf 8f4f dsb sy
  48962. 8014a14: 617b str r3, [r7, #20]
  48963. }
  48964. 8014a16: bf00 nop
  48965. 8014a18: bf00 nop
  48966. 8014a1a: e7fd b.n 8014a18 <xQueueSemaphoreTake+0x100>
  48967. }
  48968. #endif /* configUSE_MUTEXES */
  48969. /* The semaphore count was 0 and no block time is specified
  48970. (or the block time has expired) so exit now. */
  48971. taskEXIT_CRITICAL();
  48972. 8014a1c: f002 fca6 bl 801736c <vPortExitCritical>
  48973. traceQUEUE_RECEIVE_FAILED( pxQueue );
  48974. return errQUEUE_EMPTY;
  48975. 8014a20: 2300 movs r3, #0
  48976. 8014a22: e082 b.n 8014b2a <xQueueSemaphoreTake+0x212>
  48977. }
  48978. else if( xEntryTimeSet == pdFALSE )
  48979. 8014a24: 6b7b ldr r3, [r7, #52] @ 0x34
  48980. 8014a26: 2b00 cmp r3, #0
  48981. 8014a28: d106 bne.n 8014a38 <xQueueSemaphoreTake+0x120>
  48982. {
  48983. /* The semaphore count was 0 and a block time was specified
  48984. so configure the timeout structure ready to block. */
  48985. vTaskInternalSetTimeOutState( &xTimeOut );
  48986. 8014a2a: f107 030c add.w r3, r7, #12
  48987. 8014a2e: 4618 mov r0, r3
  48988. 8014a30: f001 f974 bl 8015d1c <vTaskInternalSetTimeOutState>
  48989. xEntryTimeSet = pdTRUE;
  48990. 8014a34: 2301 movs r3, #1
  48991. 8014a36: 637b str r3, [r7, #52] @ 0x34
  48992. /* Entry time was already set. */
  48993. mtCOVERAGE_TEST_MARKER();
  48994. }
  48995. }
  48996. }
  48997. taskEXIT_CRITICAL();
  48998. 8014a38: f002 fc98 bl 801736c <vPortExitCritical>
  48999. /* Interrupts and other tasks can give to and take from the semaphore
  49000. now the critical section has been exited. */
  49001. vTaskSuspendAll();
  49002. 8014a3c: f000 fea6 bl 801578c <vTaskSuspendAll>
  49003. prvLockQueue( pxQueue );
  49004. 8014a40: f002 fc62 bl 8017308 <vPortEnterCritical>
  49005. 8014a44: 6afb ldr r3, [r7, #44] @ 0x2c
  49006. 8014a46: f893 3044 ldrb.w r3, [r3, #68] @ 0x44
  49007. 8014a4a: b25b sxtb r3, r3
  49008. 8014a4c: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  49009. 8014a50: d103 bne.n 8014a5a <xQueueSemaphoreTake+0x142>
  49010. 8014a52: 6afb ldr r3, [r7, #44] @ 0x2c
  49011. 8014a54: 2200 movs r2, #0
  49012. 8014a56: f883 2044 strb.w r2, [r3, #68] @ 0x44
  49013. 8014a5a: 6afb ldr r3, [r7, #44] @ 0x2c
  49014. 8014a5c: f893 3045 ldrb.w r3, [r3, #69] @ 0x45
  49015. 8014a60: b25b sxtb r3, r3
  49016. 8014a62: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  49017. 8014a66: d103 bne.n 8014a70 <xQueueSemaphoreTake+0x158>
  49018. 8014a68: 6afb ldr r3, [r7, #44] @ 0x2c
  49019. 8014a6a: 2200 movs r2, #0
  49020. 8014a6c: f883 2045 strb.w r2, [r3, #69] @ 0x45
  49021. 8014a70: f002 fc7c bl 801736c <vPortExitCritical>
  49022. /* Update the timeout state to see if it has expired yet. */
  49023. if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE )
  49024. 8014a74: 463a mov r2, r7
  49025. 8014a76: f107 030c add.w r3, r7, #12
  49026. 8014a7a: 4611 mov r1, r2
  49027. 8014a7c: 4618 mov r0, r3
  49028. 8014a7e: f001 f963 bl 8015d48 <xTaskCheckForTimeOut>
  49029. 8014a82: 4603 mov r3, r0
  49030. 8014a84: 2b00 cmp r3, #0
  49031. 8014a86: d132 bne.n 8014aee <xQueueSemaphoreTake+0x1d6>
  49032. {
  49033. /* A block time is specified and not expired. If the semaphore
  49034. count is 0 then enter the Blocked state to wait for a semaphore to
  49035. become available. As semaphores are implemented with queues the
  49036. queue being empty is equivalent to the semaphore count being 0. */
  49037. if( prvIsQueueEmpty( pxQueue ) != pdFALSE )
  49038. 8014a88: 6af8 ldr r0, [r7, #44] @ 0x2c
  49039. 8014a8a: f000 f9d1 bl 8014e30 <prvIsQueueEmpty>
  49040. 8014a8e: 4603 mov r3, r0
  49041. 8014a90: 2b00 cmp r3, #0
  49042. 8014a92: d026 beq.n 8014ae2 <xQueueSemaphoreTake+0x1ca>
  49043. {
  49044. traceBLOCKING_ON_QUEUE_RECEIVE( pxQueue );
  49045. #if ( configUSE_MUTEXES == 1 )
  49046. {
  49047. if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX )
  49048. 8014a94: 6afb ldr r3, [r7, #44] @ 0x2c
  49049. 8014a96: 681b ldr r3, [r3, #0]
  49050. 8014a98: 2b00 cmp r3, #0
  49051. 8014a9a: d109 bne.n 8014ab0 <xQueueSemaphoreTake+0x198>
  49052. {
  49053. taskENTER_CRITICAL();
  49054. 8014a9c: f002 fc34 bl 8017308 <vPortEnterCritical>
  49055. {
  49056. xInheritanceOccurred = xTaskPriorityInherit( pxQueue->u.xSemaphore.xMutexHolder );
  49057. 8014aa0: 6afb ldr r3, [r7, #44] @ 0x2c
  49058. 8014aa2: 689b ldr r3, [r3, #8]
  49059. 8014aa4: 4618 mov r0, r3
  49060. 8014aa6: f001 fac9 bl 801603c <xTaskPriorityInherit>
  49061. 8014aaa: 6338 str r0, [r7, #48] @ 0x30
  49062. }
  49063. taskEXIT_CRITICAL();
  49064. 8014aac: f002 fc5e bl 801736c <vPortExitCritical>
  49065. mtCOVERAGE_TEST_MARKER();
  49066. }
  49067. }
  49068. #endif
  49069. vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait );
  49070. 8014ab0: 6afb ldr r3, [r7, #44] @ 0x2c
  49071. 8014ab2: 3324 adds r3, #36 @ 0x24
  49072. 8014ab4: 683a ldr r2, [r7, #0]
  49073. 8014ab6: 4611 mov r1, r2
  49074. 8014ab8: 4618 mov r0, r3
  49075. 8014aba: f001 f851 bl 8015b60 <vTaskPlaceOnEventList>
  49076. prvUnlockQueue( pxQueue );
  49077. 8014abe: 6af8 ldr r0, [r7, #44] @ 0x2c
  49078. 8014ac0: f000 f964 bl 8014d8c <prvUnlockQueue>
  49079. if( xTaskResumeAll() == pdFALSE )
  49080. 8014ac4: f000 fe70 bl 80157a8 <xTaskResumeAll>
  49081. 8014ac8: 4603 mov r3, r0
  49082. 8014aca: 2b00 cmp r3, #0
  49083. 8014acc: f47f af67 bne.w 801499e <xQueueSemaphoreTake+0x86>
  49084. {
  49085. portYIELD_WITHIN_API();
  49086. 8014ad0: 4b18 ldr r3, [pc, #96] @ (8014b34 <xQueueSemaphoreTake+0x21c>)
  49087. 8014ad2: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  49088. 8014ad6: 601a str r2, [r3, #0]
  49089. 8014ad8: f3bf 8f4f dsb sy
  49090. 8014adc: f3bf 8f6f isb sy
  49091. 8014ae0: e75d b.n 801499e <xQueueSemaphoreTake+0x86>
  49092. }
  49093. else
  49094. {
  49095. /* There was no timeout and the semaphore count was not 0, so
  49096. attempt to take the semaphore again. */
  49097. prvUnlockQueue( pxQueue );
  49098. 8014ae2: 6af8 ldr r0, [r7, #44] @ 0x2c
  49099. 8014ae4: f000 f952 bl 8014d8c <prvUnlockQueue>
  49100. ( void ) xTaskResumeAll();
  49101. 8014ae8: f000 fe5e bl 80157a8 <xTaskResumeAll>
  49102. 8014aec: e757 b.n 801499e <xQueueSemaphoreTake+0x86>
  49103. }
  49104. }
  49105. else
  49106. {
  49107. /* Timed out. */
  49108. prvUnlockQueue( pxQueue );
  49109. 8014aee: 6af8 ldr r0, [r7, #44] @ 0x2c
  49110. 8014af0: f000 f94c bl 8014d8c <prvUnlockQueue>
  49111. ( void ) xTaskResumeAll();
  49112. 8014af4: f000 fe58 bl 80157a8 <xTaskResumeAll>
  49113. /* If the semaphore count is 0 exit now as the timeout has
  49114. expired. Otherwise return to attempt to take the semaphore that is
  49115. known to be available. As semaphores are implemented by queues the
  49116. queue being empty is equivalent to the semaphore count being 0. */
  49117. if( prvIsQueueEmpty( pxQueue ) != pdFALSE )
  49118. 8014af8: 6af8 ldr r0, [r7, #44] @ 0x2c
  49119. 8014afa: f000 f999 bl 8014e30 <prvIsQueueEmpty>
  49120. 8014afe: 4603 mov r3, r0
  49121. 8014b00: 2b00 cmp r3, #0
  49122. 8014b02: f43f af4c beq.w 801499e <xQueueSemaphoreTake+0x86>
  49123. #if ( configUSE_MUTEXES == 1 )
  49124. {
  49125. /* xInheritanceOccurred could only have be set if
  49126. pxQueue->uxQueueType == queueQUEUE_IS_MUTEX so no need to
  49127. test the mutex type again to check it is actually a mutex. */
  49128. if( xInheritanceOccurred != pdFALSE )
  49129. 8014b06: 6b3b ldr r3, [r7, #48] @ 0x30
  49130. 8014b08: 2b00 cmp r3, #0
  49131. 8014b0a: d00d beq.n 8014b28 <xQueueSemaphoreTake+0x210>
  49132. {
  49133. taskENTER_CRITICAL();
  49134. 8014b0c: f002 fbfc bl 8017308 <vPortEnterCritical>
  49135. /* This task blocking on the mutex caused another
  49136. task to inherit this task's priority. Now this task
  49137. has timed out the priority should be disinherited
  49138. again, but only as low as the next highest priority
  49139. task that is waiting for the same mutex. */
  49140. uxHighestWaitingPriority = prvGetDisinheritPriorityAfterTimeout( pxQueue );
  49141. 8014b10: 6af8 ldr r0, [r7, #44] @ 0x2c
  49142. 8014b12: f000 f893 bl 8014c3c <prvGetDisinheritPriorityAfterTimeout>
  49143. 8014b16: 6278 str r0, [r7, #36] @ 0x24
  49144. vTaskPriorityDisinheritAfterTimeout( pxQueue->u.xSemaphore.xMutexHolder, uxHighestWaitingPriority );
  49145. 8014b18: 6afb ldr r3, [r7, #44] @ 0x2c
  49146. 8014b1a: 689b ldr r3, [r3, #8]
  49147. 8014b1c: 6a79 ldr r1, [r7, #36] @ 0x24
  49148. 8014b1e: 4618 mov r0, r3
  49149. 8014b20: f001 fb64 bl 80161ec <vTaskPriorityDisinheritAfterTimeout>
  49150. }
  49151. taskEXIT_CRITICAL();
  49152. 8014b24: f002 fc22 bl 801736c <vPortExitCritical>
  49153. }
  49154. }
  49155. #endif /* configUSE_MUTEXES */
  49156. traceQUEUE_RECEIVE_FAILED( pxQueue );
  49157. return errQUEUE_EMPTY;
  49158. 8014b28: 2300 movs r3, #0
  49159. {
  49160. mtCOVERAGE_TEST_MARKER();
  49161. }
  49162. }
  49163. } /*lint -restore */
  49164. }
  49165. 8014b2a: 4618 mov r0, r3
  49166. 8014b2c: 3738 adds r7, #56 @ 0x38
  49167. 8014b2e: 46bd mov sp, r7
  49168. 8014b30: bd80 pop {r7, pc}
  49169. 8014b32: bf00 nop
  49170. 8014b34: e000ed04 .word 0xe000ed04
  49171. 08014b38 <xQueueReceiveFromISR>:
  49172. } /*lint -restore */
  49173. }
  49174. /*-----------------------------------------------------------*/
  49175. BaseType_t xQueueReceiveFromISR( QueueHandle_t xQueue, void * const pvBuffer, BaseType_t * const pxHigherPriorityTaskWoken )
  49176. {
  49177. 8014b38: b580 push {r7, lr}
  49178. 8014b3a: b08e sub sp, #56 @ 0x38
  49179. 8014b3c: af00 add r7, sp, #0
  49180. 8014b3e: 60f8 str r0, [r7, #12]
  49181. 8014b40: 60b9 str r1, [r7, #8]
  49182. 8014b42: 607a str r2, [r7, #4]
  49183. BaseType_t xReturn;
  49184. UBaseType_t uxSavedInterruptStatus;
  49185. Queue_t * const pxQueue = xQueue;
  49186. 8014b44: 68fb ldr r3, [r7, #12]
  49187. 8014b46: 633b str r3, [r7, #48] @ 0x30
  49188. configASSERT( pxQueue );
  49189. 8014b48: 6b3b ldr r3, [r7, #48] @ 0x30
  49190. 8014b4a: 2b00 cmp r3, #0
  49191. 8014b4c: d10b bne.n 8014b66 <xQueueReceiveFromISR+0x2e>
  49192. __asm volatile
  49193. 8014b4e: f04f 0350 mov.w r3, #80 @ 0x50
  49194. 8014b52: f383 8811 msr BASEPRI, r3
  49195. 8014b56: f3bf 8f6f isb sy
  49196. 8014b5a: f3bf 8f4f dsb sy
  49197. 8014b5e: 623b str r3, [r7, #32]
  49198. }
  49199. 8014b60: bf00 nop
  49200. 8014b62: bf00 nop
  49201. 8014b64: e7fd b.n 8014b62 <xQueueReceiveFromISR+0x2a>
  49202. configASSERT( !( ( pvBuffer == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) );
  49203. 8014b66: 68bb ldr r3, [r7, #8]
  49204. 8014b68: 2b00 cmp r3, #0
  49205. 8014b6a: d103 bne.n 8014b74 <xQueueReceiveFromISR+0x3c>
  49206. 8014b6c: 6b3b ldr r3, [r7, #48] @ 0x30
  49207. 8014b6e: 6c1b ldr r3, [r3, #64] @ 0x40
  49208. 8014b70: 2b00 cmp r3, #0
  49209. 8014b72: d101 bne.n 8014b78 <xQueueReceiveFromISR+0x40>
  49210. 8014b74: 2301 movs r3, #1
  49211. 8014b76: e000 b.n 8014b7a <xQueueReceiveFromISR+0x42>
  49212. 8014b78: 2300 movs r3, #0
  49213. 8014b7a: 2b00 cmp r3, #0
  49214. 8014b7c: d10b bne.n 8014b96 <xQueueReceiveFromISR+0x5e>
  49215. __asm volatile
  49216. 8014b7e: f04f 0350 mov.w r3, #80 @ 0x50
  49217. 8014b82: f383 8811 msr BASEPRI, r3
  49218. 8014b86: f3bf 8f6f isb sy
  49219. 8014b8a: f3bf 8f4f dsb sy
  49220. 8014b8e: 61fb str r3, [r7, #28]
  49221. }
  49222. 8014b90: bf00 nop
  49223. 8014b92: bf00 nop
  49224. 8014b94: e7fd b.n 8014b92 <xQueueReceiveFromISR+0x5a>
  49225. that have been assigned a priority at or (logically) below the maximum
  49226. system call interrupt priority. FreeRTOS maintains a separate interrupt
  49227. safe API to ensure interrupt entry is as fast and as simple as possible.
  49228. More information (albeit Cortex-M specific) is provided on the following
  49229. link: http://www.freertos.org/RTOS-Cortex-M3-M4.html */
  49230. portASSERT_IF_INTERRUPT_PRIORITY_INVALID();
  49231. 8014b96: f002 fc97 bl 80174c8 <vPortValidateInterruptPriority>
  49232. __asm volatile
  49233. 8014b9a: f3ef 8211 mrs r2, BASEPRI
  49234. 8014b9e: f04f 0350 mov.w r3, #80 @ 0x50
  49235. 8014ba2: f383 8811 msr BASEPRI, r3
  49236. 8014ba6: f3bf 8f6f isb sy
  49237. 8014baa: f3bf 8f4f dsb sy
  49238. 8014bae: 61ba str r2, [r7, #24]
  49239. 8014bb0: 617b str r3, [r7, #20]
  49240. return ulOriginalBASEPRI;
  49241. 8014bb2: 69bb ldr r3, [r7, #24]
  49242. uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
  49243. 8014bb4: 62fb str r3, [r7, #44] @ 0x2c
  49244. {
  49245. const UBaseType_t uxMessagesWaiting = pxQueue->uxMessagesWaiting;
  49246. 8014bb6: 6b3b ldr r3, [r7, #48] @ 0x30
  49247. 8014bb8: 6b9b ldr r3, [r3, #56] @ 0x38
  49248. 8014bba: 62bb str r3, [r7, #40] @ 0x28
  49249. /* Cannot block in an ISR, so check there is data available. */
  49250. if( uxMessagesWaiting > ( UBaseType_t ) 0 )
  49251. 8014bbc: 6abb ldr r3, [r7, #40] @ 0x28
  49252. 8014bbe: 2b00 cmp r3, #0
  49253. 8014bc0: d02f beq.n 8014c22 <xQueueReceiveFromISR+0xea>
  49254. {
  49255. const int8_t cRxLock = pxQueue->cRxLock;
  49256. 8014bc2: 6b3b ldr r3, [r7, #48] @ 0x30
  49257. 8014bc4: f893 3044 ldrb.w r3, [r3, #68] @ 0x44
  49258. 8014bc8: f887 3027 strb.w r3, [r7, #39] @ 0x27
  49259. traceQUEUE_RECEIVE_FROM_ISR( pxQueue );
  49260. prvCopyDataFromQueue( pxQueue, pvBuffer );
  49261. 8014bcc: 68b9 ldr r1, [r7, #8]
  49262. 8014bce: 6b38 ldr r0, [r7, #48] @ 0x30
  49263. 8014bd0: f000 f8b6 bl 8014d40 <prvCopyDataFromQueue>
  49264. pxQueue->uxMessagesWaiting = uxMessagesWaiting - ( UBaseType_t ) 1;
  49265. 8014bd4: 6abb ldr r3, [r7, #40] @ 0x28
  49266. 8014bd6: 1e5a subs r2, r3, #1
  49267. 8014bd8: 6b3b ldr r3, [r7, #48] @ 0x30
  49268. 8014bda: 639a str r2, [r3, #56] @ 0x38
  49269. /* If the queue is locked the event list will not be modified.
  49270. Instead update the lock count so the task that unlocks the queue
  49271. will know that an ISR has removed data while the queue was
  49272. locked. */
  49273. if( cRxLock == queueUNLOCKED )
  49274. 8014bdc: f997 3027 ldrsb.w r3, [r7, #39] @ 0x27
  49275. 8014be0: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  49276. 8014be4: d112 bne.n 8014c0c <xQueueReceiveFromISR+0xd4>
  49277. {
  49278. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )
  49279. 8014be6: 6b3b ldr r3, [r7, #48] @ 0x30
  49280. 8014be8: 691b ldr r3, [r3, #16]
  49281. 8014bea: 2b00 cmp r3, #0
  49282. 8014bec: d016 beq.n 8014c1c <xQueueReceiveFromISR+0xe4>
  49283. {
  49284. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE )
  49285. 8014bee: 6b3b ldr r3, [r7, #48] @ 0x30
  49286. 8014bf0: 3310 adds r3, #16
  49287. 8014bf2: 4618 mov r0, r3
  49288. 8014bf4: f001 f806 bl 8015c04 <xTaskRemoveFromEventList>
  49289. 8014bf8: 4603 mov r3, r0
  49290. 8014bfa: 2b00 cmp r3, #0
  49291. 8014bfc: d00e beq.n 8014c1c <xQueueReceiveFromISR+0xe4>
  49292. {
  49293. /* The task waiting has a higher priority than us so
  49294. force a context switch. */
  49295. if( pxHigherPriorityTaskWoken != NULL )
  49296. 8014bfe: 687b ldr r3, [r7, #4]
  49297. 8014c00: 2b00 cmp r3, #0
  49298. 8014c02: d00b beq.n 8014c1c <xQueueReceiveFromISR+0xe4>
  49299. {
  49300. *pxHigherPriorityTaskWoken = pdTRUE;
  49301. 8014c04: 687b ldr r3, [r7, #4]
  49302. 8014c06: 2201 movs r2, #1
  49303. 8014c08: 601a str r2, [r3, #0]
  49304. 8014c0a: e007 b.n 8014c1c <xQueueReceiveFromISR+0xe4>
  49305. }
  49306. else
  49307. {
  49308. /* Increment the lock count so the task that unlocks the queue
  49309. knows that data was removed while it was locked. */
  49310. pxQueue->cRxLock = ( int8_t ) ( cRxLock + 1 );
  49311. 8014c0c: f897 3027 ldrb.w r3, [r7, #39] @ 0x27
  49312. 8014c10: 3301 adds r3, #1
  49313. 8014c12: b2db uxtb r3, r3
  49314. 8014c14: b25a sxtb r2, r3
  49315. 8014c16: 6b3b ldr r3, [r7, #48] @ 0x30
  49316. 8014c18: f883 2044 strb.w r2, [r3, #68] @ 0x44
  49317. }
  49318. xReturn = pdPASS;
  49319. 8014c1c: 2301 movs r3, #1
  49320. 8014c1e: 637b str r3, [r7, #52] @ 0x34
  49321. 8014c20: e001 b.n 8014c26 <xQueueReceiveFromISR+0xee>
  49322. }
  49323. else
  49324. {
  49325. xReturn = pdFAIL;
  49326. 8014c22: 2300 movs r3, #0
  49327. 8014c24: 637b str r3, [r7, #52] @ 0x34
  49328. 8014c26: 6afb ldr r3, [r7, #44] @ 0x2c
  49329. 8014c28: 613b str r3, [r7, #16]
  49330. __asm volatile
  49331. 8014c2a: 693b ldr r3, [r7, #16]
  49332. 8014c2c: f383 8811 msr BASEPRI, r3
  49333. }
  49334. 8014c30: bf00 nop
  49335. traceQUEUE_RECEIVE_FROM_ISR_FAILED( pxQueue );
  49336. }
  49337. }
  49338. portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus );
  49339. return xReturn;
  49340. 8014c32: 6b7b ldr r3, [r7, #52] @ 0x34
  49341. }
  49342. 8014c34: 4618 mov r0, r3
  49343. 8014c36: 3738 adds r7, #56 @ 0x38
  49344. 8014c38: 46bd mov sp, r7
  49345. 8014c3a: bd80 pop {r7, pc}
  49346. 08014c3c <prvGetDisinheritPriorityAfterTimeout>:
  49347. /*-----------------------------------------------------------*/
  49348. #if( configUSE_MUTEXES == 1 )
  49349. static UBaseType_t prvGetDisinheritPriorityAfterTimeout( const Queue_t * const pxQueue )
  49350. {
  49351. 8014c3c: b480 push {r7}
  49352. 8014c3e: b085 sub sp, #20
  49353. 8014c40: af00 add r7, sp, #0
  49354. 8014c42: 6078 str r0, [r7, #4]
  49355. priority, but the waiting task times out, then the holder should
  49356. disinherit the priority - but only down to the highest priority of any
  49357. other tasks that are waiting for the same mutex. For this purpose,
  49358. return the priority of the highest priority task that is waiting for the
  49359. mutex. */
  49360. if( listCURRENT_LIST_LENGTH( &( pxQueue->xTasksWaitingToReceive ) ) > 0U )
  49361. 8014c44: 687b ldr r3, [r7, #4]
  49362. 8014c46: 6a5b ldr r3, [r3, #36] @ 0x24
  49363. 8014c48: 2b00 cmp r3, #0
  49364. 8014c4a: d006 beq.n 8014c5a <prvGetDisinheritPriorityAfterTimeout+0x1e>
  49365. {
  49366. uxHighestPriorityOfWaitingTasks = ( UBaseType_t ) configMAX_PRIORITIES - ( UBaseType_t ) listGET_ITEM_VALUE_OF_HEAD_ENTRY( &( pxQueue->xTasksWaitingToReceive ) );
  49367. 8014c4c: 687b ldr r3, [r7, #4]
  49368. 8014c4e: 6b1b ldr r3, [r3, #48] @ 0x30
  49369. 8014c50: 681b ldr r3, [r3, #0]
  49370. 8014c52: f1c3 0338 rsb r3, r3, #56 @ 0x38
  49371. 8014c56: 60fb str r3, [r7, #12]
  49372. 8014c58: e001 b.n 8014c5e <prvGetDisinheritPriorityAfterTimeout+0x22>
  49373. }
  49374. else
  49375. {
  49376. uxHighestPriorityOfWaitingTasks = tskIDLE_PRIORITY;
  49377. 8014c5a: 2300 movs r3, #0
  49378. 8014c5c: 60fb str r3, [r7, #12]
  49379. }
  49380. return uxHighestPriorityOfWaitingTasks;
  49381. 8014c5e: 68fb ldr r3, [r7, #12]
  49382. }
  49383. 8014c60: 4618 mov r0, r3
  49384. 8014c62: 3714 adds r7, #20
  49385. 8014c64: 46bd mov sp, r7
  49386. 8014c66: f85d 7b04 ldr.w r7, [sp], #4
  49387. 8014c6a: 4770 bx lr
  49388. 08014c6c <prvCopyDataToQueue>:
  49389. #endif /* configUSE_MUTEXES */
  49390. /*-----------------------------------------------------------*/
  49391. static BaseType_t prvCopyDataToQueue( Queue_t * const pxQueue, const void *pvItemToQueue, const BaseType_t xPosition )
  49392. {
  49393. 8014c6c: b580 push {r7, lr}
  49394. 8014c6e: b086 sub sp, #24
  49395. 8014c70: af00 add r7, sp, #0
  49396. 8014c72: 60f8 str r0, [r7, #12]
  49397. 8014c74: 60b9 str r1, [r7, #8]
  49398. 8014c76: 607a str r2, [r7, #4]
  49399. BaseType_t xReturn = pdFALSE;
  49400. 8014c78: 2300 movs r3, #0
  49401. 8014c7a: 617b str r3, [r7, #20]
  49402. UBaseType_t uxMessagesWaiting;
  49403. /* This function is called from a critical section. */
  49404. uxMessagesWaiting = pxQueue->uxMessagesWaiting;
  49405. 8014c7c: 68fb ldr r3, [r7, #12]
  49406. 8014c7e: 6b9b ldr r3, [r3, #56] @ 0x38
  49407. 8014c80: 613b str r3, [r7, #16]
  49408. if( pxQueue->uxItemSize == ( UBaseType_t ) 0 )
  49409. 8014c82: 68fb ldr r3, [r7, #12]
  49410. 8014c84: 6c1b ldr r3, [r3, #64] @ 0x40
  49411. 8014c86: 2b00 cmp r3, #0
  49412. 8014c88: d10d bne.n 8014ca6 <prvCopyDataToQueue+0x3a>
  49413. {
  49414. #if ( configUSE_MUTEXES == 1 )
  49415. {
  49416. if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX )
  49417. 8014c8a: 68fb ldr r3, [r7, #12]
  49418. 8014c8c: 681b ldr r3, [r3, #0]
  49419. 8014c8e: 2b00 cmp r3, #0
  49420. 8014c90: d14d bne.n 8014d2e <prvCopyDataToQueue+0xc2>
  49421. {
  49422. /* The mutex is no longer being held. */
  49423. xReturn = xTaskPriorityDisinherit( pxQueue->u.xSemaphore.xMutexHolder );
  49424. 8014c92: 68fb ldr r3, [r7, #12]
  49425. 8014c94: 689b ldr r3, [r3, #8]
  49426. 8014c96: 4618 mov r0, r3
  49427. 8014c98: f001 fa38 bl 801610c <xTaskPriorityDisinherit>
  49428. 8014c9c: 6178 str r0, [r7, #20]
  49429. pxQueue->u.xSemaphore.xMutexHolder = NULL;
  49430. 8014c9e: 68fb ldr r3, [r7, #12]
  49431. 8014ca0: 2200 movs r2, #0
  49432. 8014ca2: 609a str r2, [r3, #8]
  49433. 8014ca4: e043 b.n 8014d2e <prvCopyDataToQueue+0xc2>
  49434. mtCOVERAGE_TEST_MARKER();
  49435. }
  49436. }
  49437. #endif /* configUSE_MUTEXES */
  49438. }
  49439. else if( xPosition == queueSEND_TO_BACK )
  49440. 8014ca6: 687b ldr r3, [r7, #4]
  49441. 8014ca8: 2b00 cmp r3, #0
  49442. 8014caa: d119 bne.n 8014ce0 <prvCopyDataToQueue+0x74>
  49443. {
  49444. ( void ) memcpy( ( void * ) pxQueue->pcWriteTo, pvItemToQueue, ( size_t ) pxQueue->uxItemSize ); /*lint !e961 !e418 !e9087 MISRA exception as the casts are only redundant for some ports, plus previous logic ensures a null pointer can only be passed to memcpy() if the copy size is 0. Cast to void required by function signature and safe as no alignment requirement and copy length specified in bytes. */
  49445. 8014cac: 68fb ldr r3, [r7, #12]
  49446. 8014cae: 6858 ldr r0, [r3, #4]
  49447. 8014cb0: 68fb ldr r3, [r7, #12]
  49448. 8014cb2: 6c1b ldr r3, [r3, #64] @ 0x40
  49449. 8014cb4: 461a mov r2, r3
  49450. 8014cb6: 68b9 ldr r1, [r7, #8]
  49451. 8014cb8: f003 f81f bl 8017cfa <memcpy>
  49452. pxQueue->pcWriteTo += pxQueue->uxItemSize; /*lint !e9016 Pointer arithmetic on char types ok, especially in this use case where it is the clearest way of conveying intent. */
  49453. 8014cbc: 68fb ldr r3, [r7, #12]
  49454. 8014cbe: 685a ldr r2, [r3, #4]
  49455. 8014cc0: 68fb ldr r3, [r7, #12]
  49456. 8014cc2: 6c1b ldr r3, [r3, #64] @ 0x40
  49457. 8014cc4: 441a add r2, r3
  49458. 8014cc6: 68fb ldr r3, [r7, #12]
  49459. 8014cc8: 605a str r2, [r3, #4]
  49460. if( pxQueue->pcWriteTo >= pxQueue->u.xQueue.pcTail ) /*lint !e946 MISRA exception justified as comparison of pointers is the cleanest solution. */
  49461. 8014cca: 68fb ldr r3, [r7, #12]
  49462. 8014ccc: 685a ldr r2, [r3, #4]
  49463. 8014cce: 68fb ldr r3, [r7, #12]
  49464. 8014cd0: 689b ldr r3, [r3, #8]
  49465. 8014cd2: 429a cmp r2, r3
  49466. 8014cd4: d32b bcc.n 8014d2e <prvCopyDataToQueue+0xc2>
  49467. {
  49468. pxQueue->pcWriteTo = pxQueue->pcHead;
  49469. 8014cd6: 68fb ldr r3, [r7, #12]
  49470. 8014cd8: 681a ldr r2, [r3, #0]
  49471. 8014cda: 68fb ldr r3, [r7, #12]
  49472. 8014cdc: 605a str r2, [r3, #4]
  49473. 8014cde: e026 b.n 8014d2e <prvCopyDataToQueue+0xc2>
  49474. mtCOVERAGE_TEST_MARKER();
  49475. }
  49476. }
  49477. else
  49478. {
  49479. ( void ) memcpy( ( void * ) pxQueue->u.xQueue.pcReadFrom, pvItemToQueue, ( size_t ) pxQueue->uxItemSize ); /*lint !e961 !e9087 !e418 MISRA exception as the casts are only redundant for some ports. Cast to void required by function signature and safe as no alignment requirement and copy length specified in bytes. Assert checks null pointer only used when length is 0. */
  49480. 8014ce0: 68fb ldr r3, [r7, #12]
  49481. 8014ce2: 68d8 ldr r0, [r3, #12]
  49482. 8014ce4: 68fb ldr r3, [r7, #12]
  49483. 8014ce6: 6c1b ldr r3, [r3, #64] @ 0x40
  49484. 8014ce8: 461a mov r2, r3
  49485. 8014cea: 68b9 ldr r1, [r7, #8]
  49486. 8014cec: f003 f805 bl 8017cfa <memcpy>
  49487. pxQueue->u.xQueue.pcReadFrom -= pxQueue->uxItemSize;
  49488. 8014cf0: 68fb ldr r3, [r7, #12]
  49489. 8014cf2: 68da ldr r2, [r3, #12]
  49490. 8014cf4: 68fb ldr r3, [r7, #12]
  49491. 8014cf6: 6c1b ldr r3, [r3, #64] @ 0x40
  49492. 8014cf8: 425b negs r3, r3
  49493. 8014cfa: 441a add r2, r3
  49494. 8014cfc: 68fb ldr r3, [r7, #12]
  49495. 8014cfe: 60da str r2, [r3, #12]
  49496. if( pxQueue->u.xQueue.pcReadFrom < pxQueue->pcHead ) /*lint !e946 MISRA exception justified as comparison of pointers is the cleanest solution. */
  49497. 8014d00: 68fb ldr r3, [r7, #12]
  49498. 8014d02: 68da ldr r2, [r3, #12]
  49499. 8014d04: 68fb ldr r3, [r7, #12]
  49500. 8014d06: 681b ldr r3, [r3, #0]
  49501. 8014d08: 429a cmp r2, r3
  49502. 8014d0a: d207 bcs.n 8014d1c <prvCopyDataToQueue+0xb0>
  49503. {
  49504. pxQueue->u.xQueue.pcReadFrom = ( pxQueue->u.xQueue.pcTail - pxQueue->uxItemSize );
  49505. 8014d0c: 68fb ldr r3, [r7, #12]
  49506. 8014d0e: 689a ldr r2, [r3, #8]
  49507. 8014d10: 68fb ldr r3, [r7, #12]
  49508. 8014d12: 6c1b ldr r3, [r3, #64] @ 0x40
  49509. 8014d14: 425b negs r3, r3
  49510. 8014d16: 441a add r2, r3
  49511. 8014d18: 68fb ldr r3, [r7, #12]
  49512. 8014d1a: 60da str r2, [r3, #12]
  49513. else
  49514. {
  49515. mtCOVERAGE_TEST_MARKER();
  49516. }
  49517. if( xPosition == queueOVERWRITE )
  49518. 8014d1c: 687b ldr r3, [r7, #4]
  49519. 8014d1e: 2b02 cmp r3, #2
  49520. 8014d20: d105 bne.n 8014d2e <prvCopyDataToQueue+0xc2>
  49521. {
  49522. if( uxMessagesWaiting > ( UBaseType_t ) 0 )
  49523. 8014d22: 693b ldr r3, [r7, #16]
  49524. 8014d24: 2b00 cmp r3, #0
  49525. 8014d26: d002 beq.n 8014d2e <prvCopyDataToQueue+0xc2>
  49526. {
  49527. /* An item is not being added but overwritten, so subtract
  49528. one from the recorded number of items in the queue so when
  49529. one is added again below the number of recorded items remains
  49530. correct. */
  49531. --uxMessagesWaiting;
  49532. 8014d28: 693b ldr r3, [r7, #16]
  49533. 8014d2a: 3b01 subs r3, #1
  49534. 8014d2c: 613b str r3, [r7, #16]
  49535. {
  49536. mtCOVERAGE_TEST_MARKER();
  49537. }
  49538. }
  49539. pxQueue->uxMessagesWaiting = uxMessagesWaiting + ( UBaseType_t ) 1;
  49540. 8014d2e: 693b ldr r3, [r7, #16]
  49541. 8014d30: 1c5a adds r2, r3, #1
  49542. 8014d32: 68fb ldr r3, [r7, #12]
  49543. 8014d34: 639a str r2, [r3, #56] @ 0x38
  49544. return xReturn;
  49545. 8014d36: 697b ldr r3, [r7, #20]
  49546. }
  49547. 8014d38: 4618 mov r0, r3
  49548. 8014d3a: 3718 adds r7, #24
  49549. 8014d3c: 46bd mov sp, r7
  49550. 8014d3e: bd80 pop {r7, pc}
  49551. 08014d40 <prvCopyDataFromQueue>:
  49552. /*-----------------------------------------------------------*/
  49553. static void prvCopyDataFromQueue( Queue_t * const pxQueue, void * const pvBuffer )
  49554. {
  49555. 8014d40: b580 push {r7, lr}
  49556. 8014d42: b082 sub sp, #8
  49557. 8014d44: af00 add r7, sp, #0
  49558. 8014d46: 6078 str r0, [r7, #4]
  49559. 8014d48: 6039 str r1, [r7, #0]
  49560. if( pxQueue->uxItemSize != ( UBaseType_t ) 0 )
  49561. 8014d4a: 687b ldr r3, [r7, #4]
  49562. 8014d4c: 6c1b ldr r3, [r3, #64] @ 0x40
  49563. 8014d4e: 2b00 cmp r3, #0
  49564. 8014d50: d018 beq.n 8014d84 <prvCopyDataFromQueue+0x44>
  49565. {
  49566. pxQueue->u.xQueue.pcReadFrom += pxQueue->uxItemSize; /*lint !e9016 Pointer arithmetic on char types ok, especially in this use case where it is the clearest way of conveying intent. */
  49567. 8014d52: 687b ldr r3, [r7, #4]
  49568. 8014d54: 68da ldr r2, [r3, #12]
  49569. 8014d56: 687b ldr r3, [r7, #4]
  49570. 8014d58: 6c1b ldr r3, [r3, #64] @ 0x40
  49571. 8014d5a: 441a add r2, r3
  49572. 8014d5c: 687b ldr r3, [r7, #4]
  49573. 8014d5e: 60da str r2, [r3, #12]
  49574. if( pxQueue->u.xQueue.pcReadFrom >= pxQueue->u.xQueue.pcTail ) /*lint !e946 MISRA exception justified as use of the relational operator is the cleanest solutions. */
  49575. 8014d60: 687b ldr r3, [r7, #4]
  49576. 8014d62: 68da ldr r2, [r3, #12]
  49577. 8014d64: 687b ldr r3, [r7, #4]
  49578. 8014d66: 689b ldr r3, [r3, #8]
  49579. 8014d68: 429a cmp r2, r3
  49580. 8014d6a: d303 bcc.n 8014d74 <prvCopyDataFromQueue+0x34>
  49581. {
  49582. pxQueue->u.xQueue.pcReadFrom = pxQueue->pcHead;
  49583. 8014d6c: 687b ldr r3, [r7, #4]
  49584. 8014d6e: 681a ldr r2, [r3, #0]
  49585. 8014d70: 687b ldr r3, [r7, #4]
  49586. 8014d72: 60da str r2, [r3, #12]
  49587. }
  49588. else
  49589. {
  49590. mtCOVERAGE_TEST_MARKER();
  49591. }
  49592. ( void ) memcpy( ( void * ) pvBuffer, ( void * ) pxQueue->u.xQueue.pcReadFrom, ( size_t ) pxQueue->uxItemSize ); /*lint !e961 !e418 !e9087 MISRA exception as the casts are only redundant for some ports. Also previous logic ensures a null pointer can only be passed to memcpy() when the count is 0. Cast to void required by function signature and safe as no alignment requirement and copy length specified in bytes. */
  49593. 8014d74: 687b ldr r3, [r7, #4]
  49594. 8014d76: 68d9 ldr r1, [r3, #12]
  49595. 8014d78: 687b ldr r3, [r7, #4]
  49596. 8014d7a: 6c1b ldr r3, [r3, #64] @ 0x40
  49597. 8014d7c: 461a mov r2, r3
  49598. 8014d7e: 6838 ldr r0, [r7, #0]
  49599. 8014d80: f002 ffbb bl 8017cfa <memcpy>
  49600. }
  49601. }
  49602. 8014d84: bf00 nop
  49603. 8014d86: 3708 adds r7, #8
  49604. 8014d88: 46bd mov sp, r7
  49605. 8014d8a: bd80 pop {r7, pc}
  49606. 08014d8c <prvUnlockQueue>:
  49607. /*-----------------------------------------------------------*/
  49608. static void prvUnlockQueue( Queue_t * const pxQueue )
  49609. {
  49610. 8014d8c: b580 push {r7, lr}
  49611. 8014d8e: b084 sub sp, #16
  49612. 8014d90: af00 add r7, sp, #0
  49613. 8014d92: 6078 str r0, [r7, #4]
  49614. /* The lock counts contains the number of extra data items placed or
  49615. removed from the queue while the queue was locked. When a queue is
  49616. locked items can be added or removed, but the event lists cannot be
  49617. updated. */
  49618. taskENTER_CRITICAL();
  49619. 8014d94: f002 fab8 bl 8017308 <vPortEnterCritical>
  49620. {
  49621. int8_t cTxLock = pxQueue->cTxLock;
  49622. 8014d98: 687b ldr r3, [r7, #4]
  49623. 8014d9a: f893 3045 ldrb.w r3, [r3, #69] @ 0x45
  49624. 8014d9e: 73fb strb r3, [r7, #15]
  49625. /* See if data was added to the queue while it was locked. */
  49626. while( cTxLock > queueLOCKED_UNMODIFIED )
  49627. 8014da0: e011 b.n 8014dc6 <prvUnlockQueue+0x3a>
  49628. }
  49629. #else /* configUSE_QUEUE_SETS */
  49630. {
  49631. /* Tasks that are removed from the event list will get added to
  49632. the pending ready list as the scheduler is still suspended. */
  49633. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )
  49634. 8014da2: 687b ldr r3, [r7, #4]
  49635. 8014da4: 6a5b ldr r3, [r3, #36] @ 0x24
  49636. 8014da6: 2b00 cmp r3, #0
  49637. 8014da8: d012 beq.n 8014dd0 <prvUnlockQueue+0x44>
  49638. {
  49639. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )
  49640. 8014daa: 687b ldr r3, [r7, #4]
  49641. 8014dac: 3324 adds r3, #36 @ 0x24
  49642. 8014dae: 4618 mov r0, r3
  49643. 8014db0: f000 ff28 bl 8015c04 <xTaskRemoveFromEventList>
  49644. 8014db4: 4603 mov r3, r0
  49645. 8014db6: 2b00 cmp r3, #0
  49646. 8014db8: d001 beq.n 8014dbe <prvUnlockQueue+0x32>
  49647. {
  49648. /* The task waiting has a higher priority so record that
  49649. a context switch is required. */
  49650. vTaskMissedYield();
  49651. 8014dba: f001 f829 bl 8015e10 <vTaskMissedYield>
  49652. break;
  49653. }
  49654. }
  49655. #endif /* configUSE_QUEUE_SETS */
  49656. --cTxLock;
  49657. 8014dbe: 7bfb ldrb r3, [r7, #15]
  49658. 8014dc0: 3b01 subs r3, #1
  49659. 8014dc2: b2db uxtb r3, r3
  49660. 8014dc4: 73fb strb r3, [r7, #15]
  49661. while( cTxLock > queueLOCKED_UNMODIFIED )
  49662. 8014dc6: f997 300f ldrsb.w r3, [r7, #15]
  49663. 8014dca: 2b00 cmp r3, #0
  49664. 8014dcc: dce9 bgt.n 8014da2 <prvUnlockQueue+0x16>
  49665. 8014dce: e000 b.n 8014dd2 <prvUnlockQueue+0x46>
  49666. break;
  49667. 8014dd0: bf00 nop
  49668. }
  49669. pxQueue->cTxLock = queueUNLOCKED;
  49670. 8014dd2: 687b ldr r3, [r7, #4]
  49671. 8014dd4: 22ff movs r2, #255 @ 0xff
  49672. 8014dd6: f883 2045 strb.w r2, [r3, #69] @ 0x45
  49673. }
  49674. taskEXIT_CRITICAL();
  49675. 8014dda: f002 fac7 bl 801736c <vPortExitCritical>
  49676. /* Do the same for the Rx lock. */
  49677. taskENTER_CRITICAL();
  49678. 8014dde: f002 fa93 bl 8017308 <vPortEnterCritical>
  49679. {
  49680. int8_t cRxLock = pxQueue->cRxLock;
  49681. 8014de2: 687b ldr r3, [r7, #4]
  49682. 8014de4: f893 3044 ldrb.w r3, [r3, #68] @ 0x44
  49683. 8014de8: 73bb strb r3, [r7, #14]
  49684. while( cRxLock > queueLOCKED_UNMODIFIED )
  49685. 8014dea: e011 b.n 8014e10 <prvUnlockQueue+0x84>
  49686. {
  49687. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )
  49688. 8014dec: 687b ldr r3, [r7, #4]
  49689. 8014dee: 691b ldr r3, [r3, #16]
  49690. 8014df0: 2b00 cmp r3, #0
  49691. 8014df2: d012 beq.n 8014e1a <prvUnlockQueue+0x8e>
  49692. {
  49693. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE )
  49694. 8014df4: 687b ldr r3, [r7, #4]
  49695. 8014df6: 3310 adds r3, #16
  49696. 8014df8: 4618 mov r0, r3
  49697. 8014dfa: f000 ff03 bl 8015c04 <xTaskRemoveFromEventList>
  49698. 8014dfe: 4603 mov r3, r0
  49699. 8014e00: 2b00 cmp r3, #0
  49700. 8014e02: d001 beq.n 8014e08 <prvUnlockQueue+0x7c>
  49701. {
  49702. vTaskMissedYield();
  49703. 8014e04: f001 f804 bl 8015e10 <vTaskMissedYield>
  49704. else
  49705. {
  49706. mtCOVERAGE_TEST_MARKER();
  49707. }
  49708. --cRxLock;
  49709. 8014e08: 7bbb ldrb r3, [r7, #14]
  49710. 8014e0a: 3b01 subs r3, #1
  49711. 8014e0c: b2db uxtb r3, r3
  49712. 8014e0e: 73bb strb r3, [r7, #14]
  49713. while( cRxLock > queueLOCKED_UNMODIFIED )
  49714. 8014e10: f997 300e ldrsb.w r3, [r7, #14]
  49715. 8014e14: 2b00 cmp r3, #0
  49716. 8014e16: dce9 bgt.n 8014dec <prvUnlockQueue+0x60>
  49717. 8014e18: e000 b.n 8014e1c <prvUnlockQueue+0x90>
  49718. }
  49719. else
  49720. {
  49721. break;
  49722. 8014e1a: bf00 nop
  49723. }
  49724. }
  49725. pxQueue->cRxLock = queueUNLOCKED;
  49726. 8014e1c: 687b ldr r3, [r7, #4]
  49727. 8014e1e: 22ff movs r2, #255 @ 0xff
  49728. 8014e20: f883 2044 strb.w r2, [r3, #68] @ 0x44
  49729. }
  49730. taskEXIT_CRITICAL();
  49731. 8014e24: f002 faa2 bl 801736c <vPortExitCritical>
  49732. }
  49733. 8014e28: bf00 nop
  49734. 8014e2a: 3710 adds r7, #16
  49735. 8014e2c: 46bd mov sp, r7
  49736. 8014e2e: bd80 pop {r7, pc}
  49737. 08014e30 <prvIsQueueEmpty>:
  49738. /*-----------------------------------------------------------*/
  49739. static BaseType_t prvIsQueueEmpty( const Queue_t *pxQueue )
  49740. {
  49741. 8014e30: b580 push {r7, lr}
  49742. 8014e32: b084 sub sp, #16
  49743. 8014e34: af00 add r7, sp, #0
  49744. 8014e36: 6078 str r0, [r7, #4]
  49745. BaseType_t xReturn;
  49746. taskENTER_CRITICAL();
  49747. 8014e38: f002 fa66 bl 8017308 <vPortEnterCritical>
  49748. {
  49749. if( pxQueue->uxMessagesWaiting == ( UBaseType_t ) 0 )
  49750. 8014e3c: 687b ldr r3, [r7, #4]
  49751. 8014e3e: 6b9b ldr r3, [r3, #56] @ 0x38
  49752. 8014e40: 2b00 cmp r3, #0
  49753. 8014e42: d102 bne.n 8014e4a <prvIsQueueEmpty+0x1a>
  49754. {
  49755. xReturn = pdTRUE;
  49756. 8014e44: 2301 movs r3, #1
  49757. 8014e46: 60fb str r3, [r7, #12]
  49758. 8014e48: e001 b.n 8014e4e <prvIsQueueEmpty+0x1e>
  49759. }
  49760. else
  49761. {
  49762. xReturn = pdFALSE;
  49763. 8014e4a: 2300 movs r3, #0
  49764. 8014e4c: 60fb str r3, [r7, #12]
  49765. }
  49766. }
  49767. taskEXIT_CRITICAL();
  49768. 8014e4e: f002 fa8d bl 801736c <vPortExitCritical>
  49769. return xReturn;
  49770. 8014e52: 68fb ldr r3, [r7, #12]
  49771. }
  49772. 8014e54: 4618 mov r0, r3
  49773. 8014e56: 3710 adds r7, #16
  49774. 8014e58: 46bd mov sp, r7
  49775. 8014e5a: bd80 pop {r7, pc}
  49776. 08014e5c <prvIsQueueFull>:
  49777. return xReturn;
  49778. } /*lint !e818 xQueue could not be pointer to const because it is a typedef. */
  49779. /*-----------------------------------------------------------*/
  49780. static BaseType_t prvIsQueueFull( const Queue_t *pxQueue )
  49781. {
  49782. 8014e5c: b580 push {r7, lr}
  49783. 8014e5e: b084 sub sp, #16
  49784. 8014e60: af00 add r7, sp, #0
  49785. 8014e62: 6078 str r0, [r7, #4]
  49786. BaseType_t xReturn;
  49787. taskENTER_CRITICAL();
  49788. 8014e64: f002 fa50 bl 8017308 <vPortEnterCritical>
  49789. {
  49790. if( pxQueue->uxMessagesWaiting == pxQueue->uxLength )
  49791. 8014e68: 687b ldr r3, [r7, #4]
  49792. 8014e6a: 6b9a ldr r2, [r3, #56] @ 0x38
  49793. 8014e6c: 687b ldr r3, [r7, #4]
  49794. 8014e6e: 6bdb ldr r3, [r3, #60] @ 0x3c
  49795. 8014e70: 429a cmp r2, r3
  49796. 8014e72: d102 bne.n 8014e7a <prvIsQueueFull+0x1e>
  49797. {
  49798. xReturn = pdTRUE;
  49799. 8014e74: 2301 movs r3, #1
  49800. 8014e76: 60fb str r3, [r7, #12]
  49801. 8014e78: e001 b.n 8014e7e <prvIsQueueFull+0x22>
  49802. }
  49803. else
  49804. {
  49805. xReturn = pdFALSE;
  49806. 8014e7a: 2300 movs r3, #0
  49807. 8014e7c: 60fb str r3, [r7, #12]
  49808. }
  49809. }
  49810. taskEXIT_CRITICAL();
  49811. 8014e7e: f002 fa75 bl 801736c <vPortExitCritical>
  49812. return xReturn;
  49813. 8014e82: 68fb ldr r3, [r7, #12]
  49814. }
  49815. 8014e84: 4618 mov r0, r3
  49816. 8014e86: 3710 adds r7, #16
  49817. 8014e88: 46bd mov sp, r7
  49818. 8014e8a: bd80 pop {r7, pc}
  49819. 08014e8c <vQueueAddToRegistry>:
  49820. /*-----------------------------------------------------------*/
  49821. #if ( configQUEUE_REGISTRY_SIZE > 0 )
  49822. void vQueueAddToRegistry( QueueHandle_t xQueue, const char *pcQueueName ) /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
  49823. {
  49824. 8014e8c: b480 push {r7}
  49825. 8014e8e: b085 sub sp, #20
  49826. 8014e90: af00 add r7, sp, #0
  49827. 8014e92: 6078 str r0, [r7, #4]
  49828. 8014e94: 6039 str r1, [r7, #0]
  49829. UBaseType_t ux;
  49830. /* See if there is an empty space in the registry. A NULL name denotes
  49831. a free slot. */
  49832. for( ux = ( UBaseType_t ) 0U; ux < ( UBaseType_t ) configQUEUE_REGISTRY_SIZE; ux++ )
  49833. 8014e96: 2300 movs r3, #0
  49834. 8014e98: 60fb str r3, [r7, #12]
  49835. 8014e9a: e014 b.n 8014ec6 <vQueueAddToRegistry+0x3a>
  49836. {
  49837. if( xQueueRegistry[ ux ].pcQueueName == NULL )
  49838. 8014e9c: 4a0f ldr r2, [pc, #60] @ (8014edc <vQueueAddToRegistry+0x50>)
  49839. 8014e9e: 68fb ldr r3, [r7, #12]
  49840. 8014ea0: f852 3033 ldr.w r3, [r2, r3, lsl #3]
  49841. 8014ea4: 2b00 cmp r3, #0
  49842. 8014ea6: d10b bne.n 8014ec0 <vQueueAddToRegistry+0x34>
  49843. {
  49844. /* Store the information on this queue. */
  49845. xQueueRegistry[ ux ].pcQueueName = pcQueueName;
  49846. 8014ea8: 490c ldr r1, [pc, #48] @ (8014edc <vQueueAddToRegistry+0x50>)
  49847. 8014eaa: 68fb ldr r3, [r7, #12]
  49848. 8014eac: 683a ldr r2, [r7, #0]
  49849. 8014eae: f841 2033 str.w r2, [r1, r3, lsl #3]
  49850. xQueueRegistry[ ux ].xHandle = xQueue;
  49851. 8014eb2: 4a0a ldr r2, [pc, #40] @ (8014edc <vQueueAddToRegistry+0x50>)
  49852. 8014eb4: 68fb ldr r3, [r7, #12]
  49853. 8014eb6: 00db lsls r3, r3, #3
  49854. 8014eb8: 4413 add r3, r2
  49855. 8014eba: 687a ldr r2, [r7, #4]
  49856. 8014ebc: 605a str r2, [r3, #4]
  49857. traceQUEUE_REGISTRY_ADD( xQueue, pcQueueName );
  49858. break;
  49859. 8014ebe: e006 b.n 8014ece <vQueueAddToRegistry+0x42>
  49860. for( ux = ( UBaseType_t ) 0U; ux < ( UBaseType_t ) configQUEUE_REGISTRY_SIZE; ux++ )
  49861. 8014ec0: 68fb ldr r3, [r7, #12]
  49862. 8014ec2: 3301 adds r3, #1
  49863. 8014ec4: 60fb str r3, [r7, #12]
  49864. 8014ec6: 68fb ldr r3, [r7, #12]
  49865. 8014ec8: 2b07 cmp r3, #7
  49866. 8014eca: d9e7 bls.n 8014e9c <vQueueAddToRegistry+0x10>
  49867. else
  49868. {
  49869. mtCOVERAGE_TEST_MARKER();
  49870. }
  49871. }
  49872. }
  49873. 8014ecc: bf00 nop
  49874. 8014ece: bf00 nop
  49875. 8014ed0: 3714 adds r7, #20
  49876. 8014ed2: 46bd mov sp, r7
  49877. 8014ed4: f85d 7b04 ldr.w r7, [sp], #4
  49878. 8014ed8: 4770 bx lr
  49879. 8014eda: bf00 nop
  49880. 8014edc: 24002600 .word 0x24002600
  49881. 08014ee0 <vQueueWaitForMessageRestricted>:
  49882. /*-----------------------------------------------------------*/
  49883. #if ( configUSE_TIMERS == 1 )
  49884. void vQueueWaitForMessageRestricted( QueueHandle_t xQueue, TickType_t xTicksToWait, const BaseType_t xWaitIndefinitely )
  49885. {
  49886. 8014ee0: b580 push {r7, lr}
  49887. 8014ee2: b086 sub sp, #24
  49888. 8014ee4: af00 add r7, sp, #0
  49889. 8014ee6: 60f8 str r0, [r7, #12]
  49890. 8014ee8: 60b9 str r1, [r7, #8]
  49891. 8014eea: 607a str r2, [r7, #4]
  49892. Queue_t * const pxQueue = xQueue;
  49893. 8014eec: 68fb ldr r3, [r7, #12]
  49894. 8014eee: 617b str r3, [r7, #20]
  49895. will not actually cause the task to block, just place it on a blocked
  49896. list. It will not block until the scheduler is unlocked - at which
  49897. time a yield will be performed. If an item is added to the queue while
  49898. the queue is locked, and the calling task blocks on the queue, then the
  49899. calling task will be immediately unblocked when the queue is unlocked. */
  49900. prvLockQueue( pxQueue );
  49901. 8014ef0: f002 fa0a bl 8017308 <vPortEnterCritical>
  49902. 8014ef4: 697b ldr r3, [r7, #20]
  49903. 8014ef6: f893 3044 ldrb.w r3, [r3, #68] @ 0x44
  49904. 8014efa: b25b sxtb r3, r3
  49905. 8014efc: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  49906. 8014f00: d103 bne.n 8014f0a <vQueueWaitForMessageRestricted+0x2a>
  49907. 8014f02: 697b ldr r3, [r7, #20]
  49908. 8014f04: 2200 movs r2, #0
  49909. 8014f06: f883 2044 strb.w r2, [r3, #68] @ 0x44
  49910. 8014f0a: 697b ldr r3, [r7, #20]
  49911. 8014f0c: f893 3045 ldrb.w r3, [r3, #69] @ 0x45
  49912. 8014f10: b25b sxtb r3, r3
  49913. 8014f12: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  49914. 8014f16: d103 bne.n 8014f20 <vQueueWaitForMessageRestricted+0x40>
  49915. 8014f18: 697b ldr r3, [r7, #20]
  49916. 8014f1a: 2200 movs r2, #0
  49917. 8014f1c: f883 2045 strb.w r2, [r3, #69] @ 0x45
  49918. 8014f20: f002 fa24 bl 801736c <vPortExitCritical>
  49919. if( pxQueue->uxMessagesWaiting == ( UBaseType_t ) 0U )
  49920. 8014f24: 697b ldr r3, [r7, #20]
  49921. 8014f26: 6b9b ldr r3, [r3, #56] @ 0x38
  49922. 8014f28: 2b00 cmp r3, #0
  49923. 8014f2a: d106 bne.n 8014f3a <vQueueWaitForMessageRestricted+0x5a>
  49924. {
  49925. /* There is nothing in the queue, block for the specified period. */
  49926. vTaskPlaceOnEventListRestricted( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait, xWaitIndefinitely );
  49927. 8014f2c: 697b ldr r3, [r7, #20]
  49928. 8014f2e: 3324 adds r3, #36 @ 0x24
  49929. 8014f30: 687a ldr r2, [r7, #4]
  49930. 8014f32: 68b9 ldr r1, [r7, #8]
  49931. 8014f34: 4618 mov r0, r3
  49932. 8014f36: f000 fe39 bl 8015bac <vTaskPlaceOnEventListRestricted>
  49933. }
  49934. else
  49935. {
  49936. mtCOVERAGE_TEST_MARKER();
  49937. }
  49938. prvUnlockQueue( pxQueue );
  49939. 8014f3a: 6978 ldr r0, [r7, #20]
  49940. 8014f3c: f7ff ff26 bl 8014d8c <prvUnlockQueue>
  49941. }
  49942. 8014f40: bf00 nop
  49943. 8014f42: 3718 adds r7, #24
  49944. 8014f44: 46bd mov sp, r7
  49945. 8014f46: bd80 pop {r7, pc}
  49946. 08014f48 <xStreamBufferSpacesAvailable>:
  49947. return xReturn;
  49948. }
  49949. /*-----------------------------------------------------------*/
  49950. size_t xStreamBufferSpacesAvailable( StreamBufferHandle_t xStreamBuffer )
  49951. {
  49952. 8014f48: b480 push {r7}
  49953. 8014f4a: b087 sub sp, #28
  49954. 8014f4c: af00 add r7, sp, #0
  49955. 8014f4e: 6078 str r0, [r7, #4]
  49956. const StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;
  49957. 8014f50: 687b ldr r3, [r7, #4]
  49958. 8014f52: 613b str r3, [r7, #16]
  49959. size_t xSpace;
  49960. configASSERT( pxStreamBuffer );
  49961. 8014f54: 693b ldr r3, [r7, #16]
  49962. 8014f56: 2b00 cmp r3, #0
  49963. 8014f58: d10b bne.n 8014f72 <xStreamBufferSpacesAvailable+0x2a>
  49964. __asm volatile
  49965. 8014f5a: f04f 0350 mov.w r3, #80 @ 0x50
  49966. 8014f5e: f383 8811 msr BASEPRI, r3
  49967. 8014f62: f3bf 8f6f isb sy
  49968. 8014f66: f3bf 8f4f dsb sy
  49969. 8014f6a: 60fb str r3, [r7, #12]
  49970. }
  49971. 8014f6c: bf00 nop
  49972. 8014f6e: bf00 nop
  49973. 8014f70: e7fd b.n 8014f6e <xStreamBufferSpacesAvailable+0x26>
  49974. xSpace = pxStreamBuffer->xLength + pxStreamBuffer->xTail;
  49975. 8014f72: 693b ldr r3, [r7, #16]
  49976. 8014f74: 689a ldr r2, [r3, #8]
  49977. 8014f76: 693b ldr r3, [r7, #16]
  49978. 8014f78: 681b ldr r3, [r3, #0]
  49979. 8014f7a: 4413 add r3, r2
  49980. 8014f7c: 617b str r3, [r7, #20]
  49981. xSpace -= pxStreamBuffer->xHead;
  49982. 8014f7e: 693b ldr r3, [r7, #16]
  49983. 8014f80: 685b ldr r3, [r3, #4]
  49984. 8014f82: 697a ldr r2, [r7, #20]
  49985. 8014f84: 1ad3 subs r3, r2, r3
  49986. 8014f86: 617b str r3, [r7, #20]
  49987. xSpace -= ( size_t ) 1;
  49988. 8014f88: 697b ldr r3, [r7, #20]
  49989. 8014f8a: 3b01 subs r3, #1
  49990. 8014f8c: 617b str r3, [r7, #20]
  49991. if( xSpace >= pxStreamBuffer->xLength )
  49992. 8014f8e: 693b ldr r3, [r7, #16]
  49993. 8014f90: 689b ldr r3, [r3, #8]
  49994. 8014f92: 697a ldr r2, [r7, #20]
  49995. 8014f94: 429a cmp r2, r3
  49996. 8014f96: d304 bcc.n 8014fa2 <xStreamBufferSpacesAvailable+0x5a>
  49997. {
  49998. xSpace -= pxStreamBuffer->xLength;
  49999. 8014f98: 693b ldr r3, [r7, #16]
  50000. 8014f9a: 689b ldr r3, [r3, #8]
  50001. 8014f9c: 697a ldr r2, [r7, #20]
  50002. 8014f9e: 1ad3 subs r3, r2, r3
  50003. 8014fa0: 617b str r3, [r7, #20]
  50004. else
  50005. {
  50006. mtCOVERAGE_TEST_MARKER();
  50007. }
  50008. return xSpace;
  50009. 8014fa2: 697b ldr r3, [r7, #20]
  50010. }
  50011. 8014fa4: 4618 mov r0, r3
  50012. 8014fa6: 371c adds r7, #28
  50013. 8014fa8: 46bd mov sp, r7
  50014. 8014faa: f85d 7b04 ldr.w r7, [sp], #4
  50015. 8014fae: 4770 bx lr
  50016. 08014fb0 <xStreamBufferSend>:
  50017. size_t xStreamBufferSend( StreamBufferHandle_t xStreamBuffer,
  50018. const void *pvTxData,
  50019. size_t xDataLengthBytes,
  50020. TickType_t xTicksToWait )
  50021. {
  50022. 8014fb0: b580 push {r7, lr}
  50023. 8014fb2: b090 sub sp, #64 @ 0x40
  50024. 8014fb4: af02 add r7, sp, #8
  50025. 8014fb6: 60f8 str r0, [r7, #12]
  50026. 8014fb8: 60b9 str r1, [r7, #8]
  50027. 8014fba: 607a str r2, [r7, #4]
  50028. 8014fbc: 603b str r3, [r7, #0]
  50029. StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;
  50030. 8014fbe: 68fb ldr r3, [r7, #12]
  50031. 8014fc0: 62fb str r3, [r7, #44] @ 0x2c
  50032. size_t xReturn, xSpace = 0;
  50033. 8014fc2: 2300 movs r3, #0
  50034. 8014fc4: 637b str r3, [r7, #52] @ 0x34
  50035. size_t xRequiredSpace = xDataLengthBytes;
  50036. 8014fc6: 687b ldr r3, [r7, #4]
  50037. 8014fc8: 633b str r3, [r7, #48] @ 0x30
  50038. TimeOut_t xTimeOut;
  50039. configASSERT( pvTxData );
  50040. 8014fca: 68bb ldr r3, [r7, #8]
  50041. 8014fcc: 2b00 cmp r3, #0
  50042. 8014fce: d10b bne.n 8014fe8 <xStreamBufferSend+0x38>
  50043. __asm volatile
  50044. 8014fd0: f04f 0350 mov.w r3, #80 @ 0x50
  50045. 8014fd4: f383 8811 msr BASEPRI, r3
  50046. 8014fd8: f3bf 8f6f isb sy
  50047. 8014fdc: f3bf 8f4f dsb sy
  50048. 8014fe0: 627b str r3, [r7, #36] @ 0x24
  50049. }
  50050. 8014fe2: bf00 nop
  50051. 8014fe4: bf00 nop
  50052. 8014fe6: e7fd b.n 8014fe4 <xStreamBufferSend+0x34>
  50053. configASSERT( pxStreamBuffer );
  50054. 8014fe8: 6afb ldr r3, [r7, #44] @ 0x2c
  50055. 8014fea: 2b00 cmp r3, #0
  50056. 8014fec: d10b bne.n 8015006 <xStreamBufferSend+0x56>
  50057. __asm volatile
  50058. 8014fee: f04f 0350 mov.w r3, #80 @ 0x50
  50059. 8014ff2: f383 8811 msr BASEPRI, r3
  50060. 8014ff6: f3bf 8f6f isb sy
  50061. 8014ffa: f3bf 8f4f dsb sy
  50062. 8014ffe: 623b str r3, [r7, #32]
  50063. }
  50064. 8015000: bf00 nop
  50065. 8015002: bf00 nop
  50066. 8015004: e7fd b.n 8015002 <xStreamBufferSend+0x52>
  50067. /* This send function is used to write to both message buffers and stream
  50068. buffers. If this is a message buffer then the space needed must be
  50069. increased by the amount of bytes needed to store the length of the
  50070. message. */
  50071. if( ( pxStreamBuffer->ucFlags & sbFLAGS_IS_MESSAGE_BUFFER ) != ( uint8_t ) 0 )
  50072. 8015006: 6afb ldr r3, [r7, #44] @ 0x2c
  50073. 8015008: 7f1b ldrb r3, [r3, #28]
  50074. 801500a: f003 0301 and.w r3, r3, #1
  50075. 801500e: 2b00 cmp r3, #0
  50076. 8015010: d012 beq.n 8015038 <xStreamBufferSend+0x88>
  50077. {
  50078. xRequiredSpace += sbBYTES_TO_STORE_MESSAGE_LENGTH;
  50079. 8015012: 6b3b ldr r3, [r7, #48] @ 0x30
  50080. 8015014: 3304 adds r3, #4
  50081. 8015016: 633b str r3, [r7, #48] @ 0x30
  50082. /* Overflow? */
  50083. configASSERT( xRequiredSpace > xDataLengthBytes );
  50084. 8015018: 6b3a ldr r2, [r7, #48] @ 0x30
  50085. 801501a: 687b ldr r3, [r7, #4]
  50086. 801501c: 429a cmp r2, r3
  50087. 801501e: d80b bhi.n 8015038 <xStreamBufferSend+0x88>
  50088. __asm volatile
  50089. 8015020: f04f 0350 mov.w r3, #80 @ 0x50
  50090. 8015024: f383 8811 msr BASEPRI, r3
  50091. 8015028: f3bf 8f6f isb sy
  50092. 801502c: f3bf 8f4f dsb sy
  50093. 8015030: 61fb str r3, [r7, #28]
  50094. }
  50095. 8015032: bf00 nop
  50096. 8015034: bf00 nop
  50097. 8015036: e7fd b.n 8015034 <xStreamBufferSend+0x84>
  50098. else
  50099. {
  50100. mtCOVERAGE_TEST_MARKER();
  50101. }
  50102. if( xTicksToWait != ( TickType_t ) 0 )
  50103. 8015038: 683b ldr r3, [r7, #0]
  50104. 801503a: 2b00 cmp r3, #0
  50105. 801503c: d03f beq.n 80150be <xStreamBufferSend+0x10e>
  50106. {
  50107. vTaskSetTimeOutState( &xTimeOut );
  50108. 801503e: f107 0310 add.w r3, r7, #16
  50109. 8015042: 4618 mov r0, r3
  50110. 8015044: f000 fe42 bl 8015ccc <vTaskSetTimeOutState>
  50111. do
  50112. {
  50113. /* Wait until the required number of bytes are free in the message
  50114. buffer. */
  50115. taskENTER_CRITICAL();
  50116. 8015048: f002 f95e bl 8017308 <vPortEnterCritical>
  50117. {
  50118. xSpace = xStreamBufferSpacesAvailable( pxStreamBuffer );
  50119. 801504c: 6af8 ldr r0, [r7, #44] @ 0x2c
  50120. 801504e: f7ff ff7b bl 8014f48 <xStreamBufferSpacesAvailable>
  50121. 8015052: 6378 str r0, [r7, #52] @ 0x34
  50122. if( xSpace < xRequiredSpace )
  50123. 8015054: 6b7a ldr r2, [r7, #52] @ 0x34
  50124. 8015056: 6b3b ldr r3, [r7, #48] @ 0x30
  50125. 8015058: 429a cmp r2, r3
  50126. 801505a: d218 bcs.n 801508e <xStreamBufferSend+0xde>
  50127. {
  50128. /* Clear notification state as going to wait for space. */
  50129. ( void ) xTaskNotifyStateClear( NULL );
  50130. 801505c: 2000 movs r0, #0
  50131. 801505e: f001 fb65 bl 801672c <xTaskNotifyStateClear>
  50132. /* Should only be one writer. */
  50133. configASSERT( pxStreamBuffer->xTaskWaitingToSend == NULL );
  50134. 8015062: 6afb ldr r3, [r7, #44] @ 0x2c
  50135. 8015064: 695b ldr r3, [r3, #20]
  50136. 8015066: 2b00 cmp r3, #0
  50137. 8015068: d00b beq.n 8015082 <xStreamBufferSend+0xd2>
  50138. __asm volatile
  50139. 801506a: f04f 0350 mov.w r3, #80 @ 0x50
  50140. 801506e: f383 8811 msr BASEPRI, r3
  50141. 8015072: f3bf 8f6f isb sy
  50142. 8015076: f3bf 8f4f dsb sy
  50143. 801507a: 61bb str r3, [r7, #24]
  50144. }
  50145. 801507c: bf00 nop
  50146. 801507e: bf00 nop
  50147. 8015080: e7fd b.n 801507e <xStreamBufferSend+0xce>
  50148. pxStreamBuffer->xTaskWaitingToSend = xTaskGetCurrentTaskHandle();
  50149. 8015082: f000 ffad bl 8015fe0 <xTaskGetCurrentTaskHandle>
  50150. 8015086: 4602 mov r2, r0
  50151. 8015088: 6afb ldr r3, [r7, #44] @ 0x2c
  50152. 801508a: 615a str r2, [r3, #20]
  50153. 801508c: e002 b.n 8015094 <xStreamBufferSend+0xe4>
  50154. }
  50155. else
  50156. {
  50157. taskEXIT_CRITICAL();
  50158. 801508e: f002 f96d bl 801736c <vPortExitCritical>
  50159. break;
  50160. 8015092: e014 b.n 80150be <xStreamBufferSend+0x10e>
  50161. }
  50162. }
  50163. taskEXIT_CRITICAL();
  50164. 8015094: f002 f96a bl 801736c <vPortExitCritical>
  50165. traceBLOCKING_ON_STREAM_BUFFER_SEND( xStreamBuffer );
  50166. ( void ) xTaskNotifyWait( ( uint32_t ) 0, ( uint32_t ) 0, NULL, xTicksToWait );
  50167. 8015098: 683b ldr r3, [r7, #0]
  50168. 801509a: 2200 movs r2, #0
  50169. 801509c: 2100 movs r1, #0
  50170. 801509e: 2000 movs r0, #0
  50171. 80150a0: f001 f93c bl 801631c <xTaskNotifyWait>
  50172. pxStreamBuffer->xTaskWaitingToSend = NULL;
  50173. 80150a4: 6afb ldr r3, [r7, #44] @ 0x2c
  50174. 80150a6: 2200 movs r2, #0
  50175. 80150a8: 615a str r2, [r3, #20]
  50176. } while( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE );
  50177. 80150aa: 463a mov r2, r7
  50178. 80150ac: f107 0310 add.w r3, r7, #16
  50179. 80150b0: 4611 mov r1, r2
  50180. 80150b2: 4618 mov r0, r3
  50181. 80150b4: f000 fe48 bl 8015d48 <xTaskCheckForTimeOut>
  50182. 80150b8: 4603 mov r3, r0
  50183. 80150ba: 2b00 cmp r3, #0
  50184. 80150bc: d0c4 beq.n 8015048 <xStreamBufferSend+0x98>
  50185. else
  50186. {
  50187. mtCOVERAGE_TEST_MARKER();
  50188. }
  50189. if( xSpace == ( size_t ) 0 )
  50190. 80150be: 6b7b ldr r3, [r7, #52] @ 0x34
  50191. 80150c0: 2b00 cmp r3, #0
  50192. 80150c2: d103 bne.n 80150cc <xStreamBufferSend+0x11c>
  50193. {
  50194. xSpace = xStreamBufferSpacesAvailable( pxStreamBuffer );
  50195. 80150c4: 6af8 ldr r0, [r7, #44] @ 0x2c
  50196. 80150c6: f7ff ff3f bl 8014f48 <xStreamBufferSpacesAvailable>
  50197. 80150ca: 6378 str r0, [r7, #52] @ 0x34
  50198. else
  50199. {
  50200. mtCOVERAGE_TEST_MARKER();
  50201. }
  50202. xReturn = prvWriteMessageToBuffer( pxStreamBuffer, pvTxData, xDataLengthBytes, xSpace, xRequiredSpace );
  50203. 80150cc: 6b3b ldr r3, [r7, #48] @ 0x30
  50204. 80150ce: 9300 str r3, [sp, #0]
  50205. 80150d0: 6b7b ldr r3, [r7, #52] @ 0x34
  50206. 80150d2: 687a ldr r2, [r7, #4]
  50207. 80150d4: 68b9 ldr r1, [r7, #8]
  50208. 80150d6: 6af8 ldr r0, [r7, #44] @ 0x2c
  50209. 80150d8: f000 f823 bl 8015122 <prvWriteMessageToBuffer>
  50210. 80150dc: 62b8 str r0, [r7, #40] @ 0x28
  50211. if( xReturn > ( size_t ) 0 )
  50212. 80150de: 6abb ldr r3, [r7, #40] @ 0x28
  50213. 80150e0: 2b00 cmp r3, #0
  50214. 80150e2: d019 beq.n 8015118 <xStreamBufferSend+0x168>
  50215. {
  50216. traceSTREAM_BUFFER_SEND( xStreamBuffer, xReturn );
  50217. /* Was a task waiting for the data? */
  50218. if( prvBytesInBuffer( pxStreamBuffer ) >= pxStreamBuffer->xTriggerLevelBytes )
  50219. 80150e4: 6af8 ldr r0, [r7, #44] @ 0x2c
  50220. 80150e6: f000 f8ce bl 8015286 <prvBytesInBuffer>
  50221. 80150ea: 4602 mov r2, r0
  50222. 80150ec: 6afb ldr r3, [r7, #44] @ 0x2c
  50223. 80150ee: 68db ldr r3, [r3, #12]
  50224. 80150f0: 429a cmp r2, r3
  50225. 80150f2: d311 bcc.n 8015118 <xStreamBufferSend+0x168>
  50226. {
  50227. sbSEND_COMPLETED( pxStreamBuffer );
  50228. 80150f4: f000 fb4a bl 801578c <vTaskSuspendAll>
  50229. 80150f8: 6afb ldr r3, [r7, #44] @ 0x2c
  50230. 80150fa: 691b ldr r3, [r3, #16]
  50231. 80150fc: 2b00 cmp r3, #0
  50232. 80150fe: d009 beq.n 8015114 <xStreamBufferSend+0x164>
  50233. 8015100: 6afb ldr r3, [r7, #44] @ 0x2c
  50234. 8015102: 6918 ldr r0, [r3, #16]
  50235. 8015104: 2300 movs r3, #0
  50236. 8015106: 2200 movs r2, #0
  50237. 8015108: 2100 movs r1, #0
  50238. 801510a: f001 f967 bl 80163dc <xTaskGenericNotify>
  50239. 801510e: 6afb ldr r3, [r7, #44] @ 0x2c
  50240. 8015110: 2200 movs r2, #0
  50241. 8015112: 611a str r2, [r3, #16]
  50242. 8015114: f000 fb48 bl 80157a8 <xTaskResumeAll>
  50243. {
  50244. mtCOVERAGE_TEST_MARKER();
  50245. traceSTREAM_BUFFER_SEND_FAILED( xStreamBuffer );
  50246. }
  50247. return xReturn;
  50248. 8015118: 6abb ldr r3, [r7, #40] @ 0x28
  50249. }
  50250. 801511a: 4618 mov r0, r3
  50251. 801511c: 3738 adds r7, #56 @ 0x38
  50252. 801511e: 46bd mov sp, r7
  50253. 8015120: bd80 pop {r7, pc}
  50254. 08015122 <prvWriteMessageToBuffer>:
  50255. static size_t prvWriteMessageToBuffer( StreamBuffer_t * const pxStreamBuffer,
  50256. const void * pvTxData,
  50257. size_t xDataLengthBytes,
  50258. size_t xSpace,
  50259. size_t xRequiredSpace )
  50260. {
  50261. 8015122: b580 push {r7, lr}
  50262. 8015124: b086 sub sp, #24
  50263. 8015126: af00 add r7, sp, #0
  50264. 8015128: 60f8 str r0, [r7, #12]
  50265. 801512a: 60b9 str r1, [r7, #8]
  50266. 801512c: 607a str r2, [r7, #4]
  50267. 801512e: 603b str r3, [r7, #0]
  50268. BaseType_t xShouldWrite;
  50269. size_t xReturn;
  50270. if( xSpace == ( size_t ) 0 )
  50271. 8015130: 683b ldr r3, [r7, #0]
  50272. 8015132: 2b00 cmp r3, #0
  50273. 8015134: d102 bne.n 801513c <prvWriteMessageToBuffer+0x1a>
  50274. {
  50275. /* Doesn't matter if this is a stream buffer or a message buffer, there
  50276. is no space to write. */
  50277. xShouldWrite = pdFALSE;
  50278. 8015136: 2300 movs r3, #0
  50279. 8015138: 617b str r3, [r7, #20]
  50280. 801513a: e01d b.n 8015178 <prvWriteMessageToBuffer+0x56>
  50281. }
  50282. else if( ( pxStreamBuffer->ucFlags & sbFLAGS_IS_MESSAGE_BUFFER ) == ( uint8_t ) 0 )
  50283. 801513c: 68fb ldr r3, [r7, #12]
  50284. 801513e: 7f1b ldrb r3, [r3, #28]
  50285. 8015140: f003 0301 and.w r3, r3, #1
  50286. 8015144: 2b00 cmp r3, #0
  50287. 8015146: d108 bne.n 801515a <prvWriteMessageToBuffer+0x38>
  50288. {
  50289. /* This is a stream buffer, as opposed to a message buffer, so writing a
  50290. stream of bytes rather than discrete messages. Write as many bytes as
  50291. possible. */
  50292. xShouldWrite = pdTRUE;
  50293. 8015148: 2301 movs r3, #1
  50294. 801514a: 617b str r3, [r7, #20]
  50295. xDataLengthBytes = configMIN( xDataLengthBytes, xSpace );
  50296. 801514c: 687a ldr r2, [r7, #4]
  50297. 801514e: 683b ldr r3, [r7, #0]
  50298. 8015150: 4293 cmp r3, r2
  50299. 8015152: bf28 it cs
  50300. 8015154: 4613 movcs r3, r2
  50301. 8015156: 607b str r3, [r7, #4]
  50302. 8015158: e00e b.n 8015178 <prvWriteMessageToBuffer+0x56>
  50303. }
  50304. else if( xSpace >= xRequiredSpace )
  50305. 801515a: 683a ldr r2, [r7, #0]
  50306. 801515c: 6a3b ldr r3, [r7, #32]
  50307. 801515e: 429a cmp r2, r3
  50308. 8015160: d308 bcc.n 8015174 <prvWriteMessageToBuffer+0x52>
  50309. {
  50310. /* This is a message buffer, as opposed to a stream buffer, and there
  50311. is enough space to write both the message length and the message itself
  50312. into the buffer. Start by writing the length of the data, the data
  50313. itself will be written later in this function. */
  50314. xShouldWrite = pdTRUE;
  50315. 8015162: 2301 movs r3, #1
  50316. 8015164: 617b str r3, [r7, #20]
  50317. ( void ) prvWriteBytesToBuffer( pxStreamBuffer, ( const uint8_t * ) &( xDataLengthBytes ), sbBYTES_TO_STORE_MESSAGE_LENGTH );
  50318. 8015166: 1d3b adds r3, r7, #4
  50319. 8015168: 2204 movs r2, #4
  50320. 801516a: 4619 mov r1, r3
  50321. 801516c: 68f8 ldr r0, [r7, #12]
  50322. 801516e: f000 f815 bl 801519c <prvWriteBytesToBuffer>
  50323. 8015172: e001 b.n 8015178 <prvWriteMessageToBuffer+0x56>
  50324. }
  50325. else
  50326. {
  50327. /* There is space available, but not enough space. */
  50328. xShouldWrite = pdFALSE;
  50329. 8015174: 2300 movs r3, #0
  50330. 8015176: 617b str r3, [r7, #20]
  50331. }
  50332. if( xShouldWrite != pdFALSE )
  50333. 8015178: 697b ldr r3, [r7, #20]
  50334. 801517a: 2b00 cmp r3, #0
  50335. 801517c: d007 beq.n 801518e <prvWriteMessageToBuffer+0x6c>
  50336. {
  50337. /* Writes the data itself. */
  50338. xReturn = prvWriteBytesToBuffer( pxStreamBuffer, ( const uint8_t * ) pvTxData, xDataLengthBytes ); /*lint !e9079 Storage buffer is implemented as uint8_t for ease of sizing, alighment and access. */
  50339. 801517e: 687b ldr r3, [r7, #4]
  50340. 8015180: 461a mov r2, r3
  50341. 8015182: 68b9 ldr r1, [r7, #8]
  50342. 8015184: 68f8 ldr r0, [r7, #12]
  50343. 8015186: f000 f809 bl 801519c <prvWriteBytesToBuffer>
  50344. 801518a: 6138 str r0, [r7, #16]
  50345. 801518c: e001 b.n 8015192 <prvWriteMessageToBuffer+0x70>
  50346. }
  50347. else
  50348. {
  50349. xReturn = 0;
  50350. 801518e: 2300 movs r3, #0
  50351. 8015190: 613b str r3, [r7, #16]
  50352. }
  50353. return xReturn;
  50354. 8015192: 693b ldr r3, [r7, #16]
  50355. }
  50356. 8015194: 4618 mov r0, r3
  50357. 8015196: 3718 adds r7, #24
  50358. 8015198: 46bd mov sp, r7
  50359. 801519a: bd80 pop {r7, pc}
  50360. 0801519c <prvWriteBytesToBuffer>:
  50361. return xReturn;
  50362. }
  50363. /*-----------------------------------------------------------*/
  50364. static size_t prvWriteBytesToBuffer( StreamBuffer_t * const pxStreamBuffer, const uint8_t *pucData, size_t xCount )
  50365. {
  50366. 801519c: b580 push {r7, lr}
  50367. 801519e: b08a sub sp, #40 @ 0x28
  50368. 80151a0: af00 add r7, sp, #0
  50369. 80151a2: 60f8 str r0, [r7, #12]
  50370. 80151a4: 60b9 str r1, [r7, #8]
  50371. 80151a6: 607a str r2, [r7, #4]
  50372. size_t xNextHead, xFirstLength;
  50373. configASSERT( xCount > ( size_t ) 0 );
  50374. 80151a8: 687b ldr r3, [r7, #4]
  50375. 80151aa: 2b00 cmp r3, #0
  50376. 80151ac: d10b bne.n 80151c6 <prvWriteBytesToBuffer+0x2a>
  50377. __asm volatile
  50378. 80151ae: f04f 0350 mov.w r3, #80 @ 0x50
  50379. 80151b2: f383 8811 msr BASEPRI, r3
  50380. 80151b6: f3bf 8f6f isb sy
  50381. 80151ba: f3bf 8f4f dsb sy
  50382. 80151be: 61fb str r3, [r7, #28]
  50383. }
  50384. 80151c0: bf00 nop
  50385. 80151c2: bf00 nop
  50386. 80151c4: e7fd b.n 80151c2 <prvWriteBytesToBuffer+0x26>
  50387. xNextHead = pxStreamBuffer->xHead;
  50388. 80151c6: 68fb ldr r3, [r7, #12]
  50389. 80151c8: 685b ldr r3, [r3, #4]
  50390. 80151ca: 627b str r3, [r7, #36] @ 0x24
  50391. /* Calculate the number of bytes that can be added in the first write -
  50392. which may be less than the total number of bytes that need to be added if
  50393. the buffer will wrap back to the beginning. */
  50394. xFirstLength = configMIN( pxStreamBuffer->xLength - xNextHead, xCount );
  50395. 80151cc: 68fb ldr r3, [r7, #12]
  50396. 80151ce: 689a ldr r2, [r3, #8]
  50397. 80151d0: 6a7b ldr r3, [r7, #36] @ 0x24
  50398. 80151d2: 1ad3 subs r3, r2, r3
  50399. 80151d4: 687a ldr r2, [r7, #4]
  50400. 80151d6: 4293 cmp r3, r2
  50401. 80151d8: bf28 it cs
  50402. 80151da: 4613 movcs r3, r2
  50403. 80151dc: 623b str r3, [r7, #32]
  50404. /* Write as many bytes as can be written in the first write. */
  50405. configASSERT( ( xNextHead + xFirstLength ) <= pxStreamBuffer->xLength );
  50406. 80151de: 6a7a ldr r2, [r7, #36] @ 0x24
  50407. 80151e0: 6a3b ldr r3, [r7, #32]
  50408. 80151e2: 441a add r2, r3
  50409. 80151e4: 68fb ldr r3, [r7, #12]
  50410. 80151e6: 689b ldr r3, [r3, #8]
  50411. 80151e8: 429a cmp r2, r3
  50412. 80151ea: d90b bls.n 8015204 <prvWriteBytesToBuffer+0x68>
  50413. __asm volatile
  50414. 80151ec: f04f 0350 mov.w r3, #80 @ 0x50
  50415. 80151f0: f383 8811 msr BASEPRI, r3
  50416. 80151f4: f3bf 8f6f isb sy
  50417. 80151f8: f3bf 8f4f dsb sy
  50418. 80151fc: 61bb str r3, [r7, #24]
  50419. }
  50420. 80151fe: bf00 nop
  50421. 8015200: bf00 nop
  50422. 8015202: e7fd b.n 8015200 <prvWriteBytesToBuffer+0x64>
  50423. ( void ) memcpy( ( void* ) ( &( pxStreamBuffer->pucBuffer[ xNextHead ] ) ), ( const void * ) pucData, xFirstLength ); /*lint !e9087 memcpy() requires void *. */
  50424. 8015204: 68fb ldr r3, [r7, #12]
  50425. 8015206: 699a ldr r2, [r3, #24]
  50426. 8015208: 6a7b ldr r3, [r7, #36] @ 0x24
  50427. 801520a: 4413 add r3, r2
  50428. 801520c: 6a3a ldr r2, [r7, #32]
  50429. 801520e: 68b9 ldr r1, [r7, #8]
  50430. 8015210: 4618 mov r0, r3
  50431. 8015212: f002 fd72 bl 8017cfa <memcpy>
  50432. /* If the number of bytes written was less than the number that could be
  50433. written in the first write... */
  50434. if( xCount > xFirstLength )
  50435. 8015216: 687a ldr r2, [r7, #4]
  50436. 8015218: 6a3b ldr r3, [r7, #32]
  50437. 801521a: 429a cmp r2, r3
  50438. 801521c: d91d bls.n 801525a <prvWriteBytesToBuffer+0xbe>
  50439. {
  50440. /* ...then write the remaining bytes to the start of the buffer. */
  50441. configASSERT( ( xCount - xFirstLength ) <= pxStreamBuffer->xLength );
  50442. 801521e: 687a ldr r2, [r7, #4]
  50443. 8015220: 6a3b ldr r3, [r7, #32]
  50444. 8015222: 1ad2 subs r2, r2, r3
  50445. 8015224: 68fb ldr r3, [r7, #12]
  50446. 8015226: 689b ldr r3, [r3, #8]
  50447. 8015228: 429a cmp r2, r3
  50448. 801522a: d90b bls.n 8015244 <prvWriteBytesToBuffer+0xa8>
  50449. __asm volatile
  50450. 801522c: f04f 0350 mov.w r3, #80 @ 0x50
  50451. 8015230: f383 8811 msr BASEPRI, r3
  50452. 8015234: f3bf 8f6f isb sy
  50453. 8015238: f3bf 8f4f dsb sy
  50454. 801523c: 617b str r3, [r7, #20]
  50455. }
  50456. 801523e: bf00 nop
  50457. 8015240: bf00 nop
  50458. 8015242: e7fd b.n 8015240 <prvWriteBytesToBuffer+0xa4>
  50459. ( void ) memcpy( ( void * ) pxStreamBuffer->pucBuffer, ( const void * ) &( pucData[ xFirstLength ] ), xCount - xFirstLength ); /*lint !e9087 memcpy() requires void *. */
  50460. 8015244: 68fb ldr r3, [r7, #12]
  50461. 8015246: 6998 ldr r0, [r3, #24]
  50462. 8015248: 68ba ldr r2, [r7, #8]
  50463. 801524a: 6a3b ldr r3, [r7, #32]
  50464. 801524c: 18d1 adds r1, r2, r3
  50465. 801524e: 687a ldr r2, [r7, #4]
  50466. 8015250: 6a3b ldr r3, [r7, #32]
  50467. 8015252: 1ad3 subs r3, r2, r3
  50468. 8015254: 461a mov r2, r3
  50469. 8015256: f002 fd50 bl 8017cfa <memcpy>
  50470. else
  50471. {
  50472. mtCOVERAGE_TEST_MARKER();
  50473. }
  50474. xNextHead += xCount;
  50475. 801525a: 6a7a ldr r2, [r7, #36] @ 0x24
  50476. 801525c: 687b ldr r3, [r7, #4]
  50477. 801525e: 4413 add r3, r2
  50478. 8015260: 627b str r3, [r7, #36] @ 0x24
  50479. if( xNextHead >= pxStreamBuffer->xLength )
  50480. 8015262: 68fb ldr r3, [r7, #12]
  50481. 8015264: 689b ldr r3, [r3, #8]
  50482. 8015266: 6a7a ldr r2, [r7, #36] @ 0x24
  50483. 8015268: 429a cmp r2, r3
  50484. 801526a: d304 bcc.n 8015276 <prvWriteBytesToBuffer+0xda>
  50485. {
  50486. xNextHead -= pxStreamBuffer->xLength;
  50487. 801526c: 68fb ldr r3, [r7, #12]
  50488. 801526e: 689b ldr r3, [r3, #8]
  50489. 8015270: 6a7a ldr r2, [r7, #36] @ 0x24
  50490. 8015272: 1ad3 subs r3, r2, r3
  50491. 8015274: 627b str r3, [r7, #36] @ 0x24
  50492. else
  50493. {
  50494. mtCOVERAGE_TEST_MARKER();
  50495. }
  50496. pxStreamBuffer->xHead = xNextHead;
  50497. 8015276: 68fb ldr r3, [r7, #12]
  50498. 8015278: 6a7a ldr r2, [r7, #36] @ 0x24
  50499. 801527a: 605a str r2, [r3, #4]
  50500. return xCount;
  50501. 801527c: 687b ldr r3, [r7, #4]
  50502. }
  50503. 801527e: 4618 mov r0, r3
  50504. 8015280: 3728 adds r7, #40 @ 0x28
  50505. 8015282: 46bd mov sp, r7
  50506. 8015284: bd80 pop {r7, pc}
  50507. 08015286 <prvBytesInBuffer>:
  50508. return xCount;
  50509. }
  50510. /*-----------------------------------------------------------*/
  50511. static size_t prvBytesInBuffer( const StreamBuffer_t * const pxStreamBuffer )
  50512. {
  50513. 8015286: b480 push {r7}
  50514. 8015288: b085 sub sp, #20
  50515. 801528a: af00 add r7, sp, #0
  50516. 801528c: 6078 str r0, [r7, #4]
  50517. /* Returns the distance between xTail and xHead. */
  50518. size_t xCount;
  50519. xCount = pxStreamBuffer->xLength + pxStreamBuffer->xHead;
  50520. 801528e: 687b ldr r3, [r7, #4]
  50521. 8015290: 689a ldr r2, [r3, #8]
  50522. 8015292: 687b ldr r3, [r7, #4]
  50523. 8015294: 685b ldr r3, [r3, #4]
  50524. 8015296: 4413 add r3, r2
  50525. 8015298: 60fb str r3, [r7, #12]
  50526. xCount -= pxStreamBuffer->xTail;
  50527. 801529a: 687b ldr r3, [r7, #4]
  50528. 801529c: 681b ldr r3, [r3, #0]
  50529. 801529e: 68fa ldr r2, [r7, #12]
  50530. 80152a0: 1ad3 subs r3, r2, r3
  50531. 80152a2: 60fb str r3, [r7, #12]
  50532. if ( xCount >= pxStreamBuffer->xLength )
  50533. 80152a4: 687b ldr r3, [r7, #4]
  50534. 80152a6: 689b ldr r3, [r3, #8]
  50535. 80152a8: 68fa ldr r2, [r7, #12]
  50536. 80152aa: 429a cmp r2, r3
  50537. 80152ac: d304 bcc.n 80152b8 <prvBytesInBuffer+0x32>
  50538. {
  50539. xCount -= pxStreamBuffer->xLength;
  50540. 80152ae: 687b ldr r3, [r7, #4]
  50541. 80152b0: 689b ldr r3, [r3, #8]
  50542. 80152b2: 68fa ldr r2, [r7, #12]
  50543. 80152b4: 1ad3 subs r3, r2, r3
  50544. 80152b6: 60fb str r3, [r7, #12]
  50545. else
  50546. {
  50547. mtCOVERAGE_TEST_MARKER();
  50548. }
  50549. return xCount;
  50550. 80152b8: 68fb ldr r3, [r7, #12]
  50551. }
  50552. 80152ba: 4618 mov r0, r3
  50553. 80152bc: 3714 adds r7, #20
  50554. 80152be: 46bd mov sp, r7
  50555. 80152c0: f85d 7b04 ldr.w r7, [sp], #4
  50556. 80152c4: 4770 bx lr
  50557. 080152c6 <xTaskCreateStatic>:
  50558. const uint32_t ulStackDepth,
  50559. void * const pvParameters,
  50560. UBaseType_t uxPriority,
  50561. StackType_t * const puxStackBuffer,
  50562. StaticTask_t * const pxTaskBuffer )
  50563. {
  50564. 80152c6: b580 push {r7, lr}
  50565. 80152c8: b08e sub sp, #56 @ 0x38
  50566. 80152ca: af04 add r7, sp, #16
  50567. 80152cc: 60f8 str r0, [r7, #12]
  50568. 80152ce: 60b9 str r1, [r7, #8]
  50569. 80152d0: 607a str r2, [r7, #4]
  50570. 80152d2: 603b str r3, [r7, #0]
  50571. TCB_t *pxNewTCB;
  50572. TaskHandle_t xReturn;
  50573. configASSERT( puxStackBuffer != NULL );
  50574. 80152d4: 6b7b ldr r3, [r7, #52] @ 0x34
  50575. 80152d6: 2b00 cmp r3, #0
  50576. 80152d8: d10b bne.n 80152f2 <xTaskCreateStatic+0x2c>
  50577. __asm volatile
  50578. 80152da: f04f 0350 mov.w r3, #80 @ 0x50
  50579. 80152de: f383 8811 msr BASEPRI, r3
  50580. 80152e2: f3bf 8f6f isb sy
  50581. 80152e6: f3bf 8f4f dsb sy
  50582. 80152ea: 623b str r3, [r7, #32]
  50583. }
  50584. 80152ec: bf00 nop
  50585. 80152ee: bf00 nop
  50586. 80152f0: e7fd b.n 80152ee <xTaskCreateStatic+0x28>
  50587. configASSERT( pxTaskBuffer != NULL );
  50588. 80152f2: 6bbb ldr r3, [r7, #56] @ 0x38
  50589. 80152f4: 2b00 cmp r3, #0
  50590. 80152f6: d10b bne.n 8015310 <xTaskCreateStatic+0x4a>
  50591. __asm volatile
  50592. 80152f8: f04f 0350 mov.w r3, #80 @ 0x50
  50593. 80152fc: f383 8811 msr BASEPRI, r3
  50594. 8015300: f3bf 8f6f isb sy
  50595. 8015304: f3bf 8f4f dsb sy
  50596. 8015308: 61fb str r3, [r7, #28]
  50597. }
  50598. 801530a: bf00 nop
  50599. 801530c: bf00 nop
  50600. 801530e: e7fd b.n 801530c <xTaskCreateStatic+0x46>
  50601. #if( configASSERT_DEFINED == 1 )
  50602. {
  50603. /* Sanity check that the size of the structure used to declare a
  50604. variable of type StaticTask_t equals the size of the real task
  50605. structure. */
  50606. volatile size_t xSize = sizeof( StaticTask_t );
  50607. 8015310: 23a8 movs r3, #168 @ 0xa8
  50608. 8015312: 613b str r3, [r7, #16]
  50609. configASSERT( xSize == sizeof( TCB_t ) );
  50610. 8015314: 693b ldr r3, [r7, #16]
  50611. 8015316: 2ba8 cmp r3, #168 @ 0xa8
  50612. 8015318: d00b beq.n 8015332 <xTaskCreateStatic+0x6c>
  50613. __asm volatile
  50614. 801531a: f04f 0350 mov.w r3, #80 @ 0x50
  50615. 801531e: f383 8811 msr BASEPRI, r3
  50616. 8015322: f3bf 8f6f isb sy
  50617. 8015326: f3bf 8f4f dsb sy
  50618. 801532a: 61bb str r3, [r7, #24]
  50619. }
  50620. 801532c: bf00 nop
  50621. 801532e: bf00 nop
  50622. 8015330: e7fd b.n 801532e <xTaskCreateStatic+0x68>
  50623. ( void ) xSize; /* Prevent lint warning when configASSERT() is not used. */
  50624. 8015332: 693b ldr r3, [r7, #16]
  50625. }
  50626. #endif /* configASSERT_DEFINED */
  50627. if( ( pxTaskBuffer != NULL ) && ( puxStackBuffer != NULL ) )
  50628. 8015334: 6bbb ldr r3, [r7, #56] @ 0x38
  50629. 8015336: 2b00 cmp r3, #0
  50630. 8015338: d01e beq.n 8015378 <xTaskCreateStatic+0xb2>
  50631. 801533a: 6b7b ldr r3, [r7, #52] @ 0x34
  50632. 801533c: 2b00 cmp r3, #0
  50633. 801533e: d01b beq.n 8015378 <xTaskCreateStatic+0xb2>
  50634. {
  50635. /* The memory used for the task's TCB and stack are passed into this
  50636. function - use them. */
  50637. pxNewTCB = ( TCB_t * ) pxTaskBuffer; /*lint !e740 !e9087 Unusual cast is ok as the structures are designed to have the same alignment, and the size is checked by an assert. */
  50638. 8015340: 6bbb ldr r3, [r7, #56] @ 0x38
  50639. 8015342: 627b str r3, [r7, #36] @ 0x24
  50640. pxNewTCB->pxStack = ( StackType_t * ) puxStackBuffer;
  50641. 8015344: 6a7b ldr r3, [r7, #36] @ 0x24
  50642. 8015346: 6b7a ldr r2, [r7, #52] @ 0x34
  50643. 8015348: 631a str r2, [r3, #48] @ 0x30
  50644. #if( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 ) /*lint !e731 !e9029 Macro has been consolidated for readability reasons. */
  50645. {
  50646. /* Tasks can be created statically or dynamically, so note this
  50647. task was created statically in case the task is later deleted. */
  50648. pxNewTCB->ucStaticallyAllocated = tskSTATICALLY_ALLOCATED_STACK_AND_TCB;
  50649. 801534a: 6a7b ldr r3, [r7, #36] @ 0x24
  50650. 801534c: 2202 movs r2, #2
  50651. 801534e: f883 20a5 strb.w r2, [r3, #165] @ 0xa5
  50652. }
  50653. #endif /* tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE */
  50654. prvInitialiseNewTask( pxTaskCode, pcName, ulStackDepth, pvParameters, uxPriority, &xReturn, pxNewTCB, NULL );
  50655. 8015352: 2300 movs r3, #0
  50656. 8015354: 9303 str r3, [sp, #12]
  50657. 8015356: 6a7b ldr r3, [r7, #36] @ 0x24
  50658. 8015358: 9302 str r3, [sp, #8]
  50659. 801535a: f107 0314 add.w r3, r7, #20
  50660. 801535e: 9301 str r3, [sp, #4]
  50661. 8015360: 6b3b ldr r3, [r7, #48] @ 0x30
  50662. 8015362: 9300 str r3, [sp, #0]
  50663. 8015364: 683b ldr r3, [r7, #0]
  50664. 8015366: 687a ldr r2, [r7, #4]
  50665. 8015368: 68b9 ldr r1, [r7, #8]
  50666. 801536a: 68f8 ldr r0, [r7, #12]
  50667. 801536c: f000 f850 bl 8015410 <prvInitialiseNewTask>
  50668. prvAddNewTaskToReadyList( pxNewTCB );
  50669. 8015370: 6a78 ldr r0, [r7, #36] @ 0x24
  50670. 8015372: f000 f8f5 bl 8015560 <prvAddNewTaskToReadyList>
  50671. 8015376: e001 b.n 801537c <xTaskCreateStatic+0xb6>
  50672. }
  50673. else
  50674. {
  50675. xReturn = NULL;
  50676. 8015378: 2300 movs r3, #0
  50677. 801537a: 617b str r3, [r7, #20]
  50678. }
  50679. return xReturn;
  50680. 801537c: 697b ldr r3, [r7, #20]
  50681. }
  50682. 801537e: 4618 mov r0, r3
  50683. 8015380: 3728 adds r7, #40 @ 0x28
  50684. 8015382: 46bd mov sp, r7
  50685. 8015384: bd80 pop {r7, pc}
  50686. 08015386 <xTaskCreate>:
  50687. const char * const pcName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
  50688. const configSTACK_DEPTH_TYPE usStackDepth,
  50689. void * const pvParameters,
  50690. UBaseType_t uxPriority,
  50691. TaskHandle_t * const pxCreatedTask )
  50692. {
  50693. 8015386: b580 push {r7, lr}
  50694. 8015388: b08c sub sp, #48 @ 0x30
  50695. 801538a: af04 add r7, sp, #16
  50696. 801538c: 60f8 str r0, [r7, #12]
  50697. 801538e: 60b9 str r1, [r7, #8]
  50698. 8015390: 603b str r3, [r7, #0]
  50699. 8015392: 4613 mov r3, r2
  50700. 8015394: 80fb strh r3, [r7, #6]
  50701. #else /* portSTACK_GROWTH */
  50702. {
  50703. StackType_t *pxStack;
  50704. /* Allocate space for the stack used by the task being created. */
  50705. pxStack = pvPortMalloc( ( ( ( size_t ) usStackDepth ) * sizeof( StackType_t ) ) ); /*lint !e9079 All values returned by pvPortMalloc() have at least the alignment required by the MCU's stack and this allocation is the stack. */
  50706. 8015396: 88fb ldrh r3, [r7, #6]
  50707. 8015398: 009b lsls r3, r3, #2
  50708. 801539a: 4618 mov r0, r3
  50709. 801539c: f002 f8d6 bl 801754c <pvPortMalloc>
  50710. 80153a0: 6178 str r0, [r7, #20]
  50711. if( pxStack != NULL )
  50712. 80153a2: 697b ldr r3, [r7, #20]
  50713. 80153a4: 2b00 cmp r3, #0
  50714. 80153a6: d00e beq.n 80153c6 <xTaskCreate+0x40>
  50715. {
  50716. /* Allocate space for the TCB. */
  50717. pxNewTCB = ( TCB_t * ) pvPortMalloc( sizeof( TCB_t ) ); /*lint !e9087 !e9079 All values returned by pvPortMalloc() have at least the alignment required by the MCU's stack, and the first member of TCB_t is always a pointer to the task's stack. */
  50718. 80153a8: 20a8 movs r0, #168 @ 0xa8
  50719. 80153aa: f002 f8cf bl 801754c <pvPortMalloc>
  50720. 80153ae: 61f8 str r0, [r7, #28]
  50721. if( pxNewTCB != NULL )
  50722. 80153b0: 69fb ldr r3, [r7, #28]
  50723. 80153b2: 2b00 cmp r3, #0
  50724. 80153b4: d003 beq.n 80153be <xTaskCreate+0x38>
  50725. {
  50726. /* Store the stack location in the TCB. */
  50727. pxNewTCB->pxStack = pxStack;
  50728. 80153b6: 69fb ldr r3, [r7, #28]
  50729. 80153b8: 697a ldr r2, [r7, #20]
  50730. 80153ba: 631a str r2, [r3, #48] @ 0x30
  50731. 80153bc: e005 b.n 80153ca <xTaskCreate+0x44>
  50732. }
  50733. else
  50734. {
  50735. /* The stack cannot be used as the TCB was not created. Free
  50736. it again. */
  50737. vPortFree( pxStack );
  50738. 80153be: 6978 ldr r0, [r7, #20]
  50739. 80153c0: f002 f992 bl 80176e8 <vPortFree>
  50740. 80153c4: e001 b.n 80153ca <xTaskCreate+0x44>
  50741. }
  50742. }
  50743. else
  50744. {
  50745. pxNewTCB = NULL;
  50746. 80153c6: 2300 movs r3, #0
  50747. 80153c8: 61fb str r3, [r7, #28]
  50748. }
  50749. }
  50750. #endif /* portSTACK_GROWTH */
  50751. if( pxNewTCB != NULL )
  50752. 80153ca: 69fb ldr r3, [r7, #28]
  50753. 80153cc: 2b00 cmp r3, #0
  50754. 80153ce: d017 beq.n 8015400 <xTaskCreate+0x7a>
  50755. {
  50756. #if( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 ) /*lint !e9029 !e731 Macro has been consolidated for readability reasons. */
  50757. {
  50758. /* Tasks can be created statically or dynamically, so note this
  50759. task was created dynamically in case it is later deleted. */
  50760. pxNewTCB->ucStaticallyAllocated = tskDYNAMICALLY_ALLOCATED_STACK_AND_TCB;
  50761. 80153d0: 69fb ldr r3, [r7, #28]
  50762. 80153d2: 2200 movs r2, #0
  50763. 80153d4: f883 20a5 strb.w r2, [r3, #165] @ 0xa5
  50764. }
  50765. #endif /* tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE */
  50766. prvInitialiseNewTask( pxTaskCode, pcName, ( uint32_t ) usStackDepth, pvParameters, uxPriority, pxCreatedTask, pxNewTCB, NULL );
  50767. 80153d8: 88fa ldrh r2, [r7, #6]
  50768. 80153da: 2300 movs r3, #0
  50769. 80153dc: 9303 str r3, [sp, #12]
  50770. 80153de: 69fb ldr r3, [r7, #28]
  50771. 80153e0: 9302 str r3, [sp, #8]
  50772. 80153e2: 6afb ldr r3, [r7, #44] @ 0x2c
  50773. 80153e4: 9301 str r3, [sp, #4]
  50774. 80153e6: 6abb ldr r3, [r7, #40] @ 0x28
  50775. 80153e8: 9300 str r3, [sp, #0]
  50776. 80153ea: 683b ldr r3, [r7, #0]
  50777. 80153ec: 68b9 ldr r1, [r7, #8]
  50778. 80153ee: 68f8 ldr r0, [r7, #12]
  50779. 80153f0: f000 f80e bl 8015410 <prvInitialiseNewTask>
  50780. prvAddNewTaskToReadyList( pxNewTCB );
  50781. 80153f4: 69f8 ldr r0, [r7, #28]
  50782. 80153f6: f000 f8b3 bl 8015560 <prvAddNewTaskToReadyList>
  50783. xReturn = pdPASS;
  50784. 80153fa: 2301 movs r3, #1
  50785. 80153fc: 61bb str r3, [r7, #24]
  50786. 80153fe: e002 b.n 8015406 <xTaskCreate+0x80>
  50787. }
  50788. else
  50789. {
  50790. xReturn = errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY;
  50791. 8015400: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  50792. 8015404: 61bb str r3, [r7, #24]
  50793. }
  50794. return xReturn;
  50795. 8015406: 69bb ldr r3, [r7, #24]
  50796. }
  50797. 8015408: 4618 mov r0, r3
  50798. 801540a: 3720 adds r7, #32
  50799. 801540c: 46bd mov sp, r7
  50800. 801540e: bd80 pop {r7, pc}
  50801. 08015410 <prvInitialiseNewTask>:
  50802. void * const pvParameters,
  50803. UBaseType_t uxPriority,
  50804. TaskHandle_t * const pxCreatedTask,
  50805. TCB_t *pxNewTCB,
  50806. const MemoryRegion_t * const xRegions )
  50807. {
  50808. 8015410: b580 push {r7, lr}
  50809. 8015412: b088 sub sp, #32
  50810. 8015414: af00 add r7, sp, #0
  50811. 8015416: 60f8 str r0, [r7, #12]
  50812. 8015418: 60b9 str r1, [r7, #8]
  50813. 801541a: 607a str r2, [r7, #4]
  50814. 801541c: 603b str r3, [r7, #0]
  50815. /* Avoid dependency on memset() if it is not required. */
  50816. #if( tskSET_NEW_STACKS_TO_KNOWN_VALUE == 1 )
  50817. {
  50818. /* Fill the stack with a known value to assist debugging. */
  50819. ( void ) memset( pxNewTCB->pxStack, ( int ) tskSTACK_FILL_BYTE, ( size_t ) ulStackDepth * sizeof( StackType_t ) );
  50820. 801541e: 6b3b ldr r3, [r7, #48] @ 0x30
  50821. 8015420: 6b18 ldr r0, [r3, #48] @ 0x30
  50822. 8015422: 687b ldr r3, [r7, #4]
  50823. 8015424: 009b lsls r3, r3, #2
  50824. 8015426: 461a mov r2, r3
  50825. 8015428: 21a5 movs r1, #165 @ 0xa5
  50826. 801542a: f002 fb94 bl 8017b56 <memset>
  50827. grows from high memory to low (as per the 80x86) or vice versa.
  50828. portSTACK_GROWTH is used to make the result positive or negative as required
  50829. by the port. */
  50830. #if( portSTACK_GROWTH < 0 )
  50831. {
  50832. pxTopOfStack = &( pxNewTCB->pxStack[ ulStackDepth - ( uint32_t ) 1 ] );
  50833. 801542e: 6b3b ldr r3, [r7, #48] @ 0x30
  50834. 8015430: 6b1a ldr r2, [r3, #48] @ 0x30
  50835. 8015432: 6879 ldr r1, [r7, #4]
  50836. 8015434: f06f 4340 mvn.w r3, #3221225472 @ 0xc0000000
  50837. 8015438: 440b add r3, r1
  50838. 801543a: 009b lsls r3, r3, #2
  50839. 801543c: 4413 add r3, r2
  50840. 801543e: 61bb str r3, [r7, #24]
  50841. pxTopOfStack = ( StackType_t * ) ( ( ( portPOINTER_SIZE_TYPE ) pxTopOfStack ) & ( ~( ( portPOINTER_SIZE_TYPE ) portBYTE_ALIGNMENT_MASK ) ) ); /*lint !e923 !e9033 !e9078 MISRA exception. Avoiding casts between pointers and integers is not practical. Size differences accounted for using portPOINTER_SIZE_TYPE type. Checked by assert(). */
  50842. 8015440: 69bb ldr r3, [r7, #24]
  50843. 8015442: f023 0307 bic.w r3, r3, #7
  50844. 8015446: 61bb str r3, [r7, #24]
  50845. /* Check the alignment of the calculated top of stack is correct. */
  50846. configASSERT( ( ( ( portPOINTER_SIZE_TYPE ) pxTopOfStack & ( portPOINTER_SIZE_TYPE ) portBYTE_ALIGNMENT_MASK ) == 0UL ) );
  50847. 8015448: 69bb ldr r3, [r7, #24]
  50848. 801544a: f003 0307 and.w r3, r3, #7
  50849. 801544e: 2b00 cmp r3, #0
  50850. 8015450: d00b beq.n 801546a <prvInitialiseNewTask+0x5a>
  50851. __asm volatile
  50852. 8015452: f04f 0350 mov.w r3, #80 @ 0x50
  50853. 8015456: f383 8811 msr BASEPRI, r3
  50854. 801545a: f3bf 8f6f isb sy
  50855. 801545e: f3bf 8f4f dsb sy
  50856. 8015462: 617b str r3, [r7, #20]
  50857. }
  50858. 8015464: bf00 nop
  50859. 8015466: bf00 nop
  50860. 8015468: e7fd b.n 8015466 <prvInitialiseNewTask+0x56>
  50861. pxNewTCB->pxEndOfStack = pxNewTCB->pxStack + ( ulStackDepth - ( uint32_t ) 1 );
  50862. }
  50863. #endif /* portSTACK_GROWTH */
  50864. /* Store the task name in the TCB. */
  50865. if( pcName != NULL )
  50866. 801546a: 68bb ldr r3, [r7, #8]
  50867. 801546c: 2b00 cmp r3, #0
  50868. 801546e: d01f beq.n 80154b0 <prvInitialiseNewTask+0xa0>
  50869. {
  50870. for( x = ( UBaseType_t ) 0; x < ( UBaseType_t ) configMAX_TASK_NAME_LEN; x++ )
  50871. 8015470: 2300 movs r3, #0
  50872. 8015472: 61fb str r3, [r7, #28]
  50873. 8015474: e012 b.n 801549c <prvInitialiseNewTask+0x8c>
  50874. {
  50875. pxNewTCB->pcTaskName[ x ] = pcName[ x ];
  50876. 8015476: 68ba ldr r2, [r7, #8]
  50877. 8015478: 69fb ldr r3, [r7, #28]
  50878. 801547a: 4413 add r3, r2
  50879. 801547c: 7819 ldrb r1, [r3, #0]
  50880. 801547e: 6b3a ldr r2, [r7, #48] @ 0x30
  50881. 8015480: 69fb ldr r3, [r7, #28]
  50882. 8015482: 4413 add r3, r2
  50883. 8015484: 3334 adds r3, #52 @ 0x34
  50884. 8015486: 460a mov r2, r1
  50885. 8015488: 701a strb r2, [r3, #0]
  50886. /* Don't copy all configMAX_TASK_NAME_LEN if the string is shorter than
  50887. configMAX_TASK_NAME_LEN characters just in case the memory after the
  50888. string is not accessible (extremely unlikely). */
  50889. if( pcName[ x ] == ( char ) 0x00 )
  50890. 801548a: 68ba ldr r2, [r7, #8]
  50891. 801548c: 69fb ldr r3, [r7, #28]
  50892. 801548e: 4413 add r3, r2
  50893. 8015490: 781b ldrb r3, [r3, #0]
  50894. 8015492: 2b00 cmp r3, #0
  50895. 8015494: d006 beq.n 80154a4 <prvInitialiseNewTask+0x94>
  50896. for( x = ( UBaseType_t ) 0; x < ( UBaseType_t ) configMAX_TASK_NAME_LEN; x++ )
  50897. 8015496: 69fb ldr r3, [r7, #28]
  50898. 8015498: 3301 adds r3, #1
  50899. 801549a: 61fb str r3, [r7, #28]
  50900. 801549c: 69fb ldr r3, [r7, #28]
  50901. 801549e: 2b0f cmp r3, #15
  50902. 80154a0: d9e9 bls.n 8015476 <prvInitialiseNewTask+0x66>
  50903. 80154a2: e000 b.n 80154a6 <prvInitialiseNewTask+0x96>
  50904. {
  50905. break;
  50906. 80154a4: bf00 nop
  50907. }
  50908. }
  50909. /* Ensure the name string is terminated in the case that the string length
  50910. was greater or equal to configMAX_TASK_NAME_LEN. */
  50911. pxNewTCB->pcTaskName[ configMAX_TASK_NAME_LEN - 1 ] = '\0';
  50912. 80154a6: 6b3b ldr r3, [r7, #48] @ 0x30
  50913. 80154a8: 2200 movs r2, #0
  50914. 80154aa: f883 2043 strb.w r2, [r3, #67] @ 0x43
  50915. 80154ae: e003 b.n 80154b8 <prvInitialiseNewTask+0xa8>
  50916. }
  50917. else
  50918. {
  50919. /* The task has not been given a name, so just ensure there is a NULL
  50920. terminator when it is read out. */
  50921. pxNewTCB->pcTaskName[ 0 ] = 0x00;
  50922. 80154b0: 6b3b ldr r3, [r7, #48] @ 0x30
  50923. 80154b2: 2200 movs r2, #0
  50924. 80154b4: f883 2034 strb.w r2, [r3, #52] @ 0x34
  50925. }
  50926. /* This is used as an array index so must ensure it's not too large. First
  50927. remove the privilege bit if one is present. */
  50928. if( uxPriority >= ( UBaseType_t ) configMAX_PRIORITIES )
  50929. 80154b8: 6abb ldr r3, [r7, #40] @ 0x28
  50930. 80154ba: 2b37 cmp r3, #55 @ 0x37
  50931. 80154bc: d901 bls.n 80154c2 <prvInitialiseNewTask+0xb2>
  50932. {
  50933. uxPriority = ( UBaseType_t ) configMAX_PRIORITIES - ( UBaseType_t ) 1U;
  50934. 80154be: 2337 movs r3, #55 @ 0x37
  50935. 80154c0: 62bb str r3, [r7, #40] @ 0x28
  50936. else
  50937. {
  50938. mtCOVERAGE_TEST_MARKER();
  50939. }
  50940. pxNewTCB->uxPriority = uxPriority;
  50941. 80154c2: 6b3b ldr r3, [r7, #48] @ 0x30
  50942. 80154c4: 6aba ldr r2, [r7, #40] @ 0x28
  50943. 80154c6: 62da str r2, [r3, #44] @ 0x2c
  50944. #if ( configUSE_MUTEXES == 1 )
  50945. {
  50946. pxNewTCB->uxBasePriority = uxPriority;
  50947. 80154c8: 6b3b ldr r3, [r7, #48] @ 0x30
  50948. 80154ca: 6aba ldr r2, [r7, #40] @ 0x28
  50949. 80154cc: 64da str r2, [r3, #76] @ 0x4c
  50950. pxNewTCB->uxMutexesHeld = 0;
  50951. 80154ce: 6b3b ldr r3, [r7, #48] @ 0x30
  50952. 80154d0: 2200 movs r2, #0
  50953. 80154d2: 651a str r2, [r3, #80] @ 0x50
  50954. }
  50955. #endif /* configUSE_MUTEXES */
  50956. vListInitialiseItem( &( pxNewTCB->xStateListItem ) );
  50957. 80154d4: 6b3b ldr r3, [r7, #48] @ 0x30
  50958. 80154d6: 3304 adds r3, #4
  50959. 80154d8: 4618 mov r0, r3
  50960. 80154da: f7fe fd09 bl 8013ef0 <vListInitialiseItem>
  50961. vListInitialiseItem( &( pxNewTCB->xEventListItem ) );
  50962. 80154de: 6b3b ldr r3, [r7, #48] @ 0x30
  50963. 80154e0: 3318 adds r3, #24
  50964. 80154e2: 4618 mov r0, r3
  50965. 80154e4: f7fe fd04 bl 8013ef0 <vListInitialiseItem>
  50966. /* Set the pxNewTCB as a link back from the ListItem_t. This is so we can get
  50967. back to the containing TCB from a generic item in a list. */
  50968. listSET_LIST_ITEM_OWNER( &( pxNewTCB->xStateListItem ), pxNewTCB );
  50969. 80154e8: 6b3b ldr r3, [r7, #48] @ 0x30
  50970. 80154ea: 6b3a ldr r2, [r7, #48] @ 0x30
  50971. 80154ec: 611a str r2, [r3, #16]
  50972. /* Event lists are always in priority order. */
  50973. listSET_LIST_ITEM_VALUE( &( pxNewTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) uxPriority ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */
  50974. 80154ee: 6abb ldr r3, [r7, #40] @ 0x28
  50975. 80154f0: f1c3 0238 rsb r2, r3, #56 @ 0x38
  50976. 80154f4: 6b3b ldr r3, [r7, #48] @ 0x30
  50977. 80154f6: 619a str r2, [r3, #24]
  50978. listSET_LIST_ITEM_OWNER( &( pxNewTCB->xEventListItem ), pxNewTCB );
  50979. 80154f8: 6b3b ldr r3, [r7, #48] @ 0x30
  50980. 80154fa: 6b3a ldr r2, [r7, #48] @ 0x30
  50981. 80154fc: 625a str r2, [r3, #36] @ 0x24
  50982. }
  50983. #endif
  50984. #if ( configUSE_TASK_NOTIFICATIONS == 1 )
  50985. {
  50986. pxNewTCB->ulNotifiedValue = 0;
  50987. 80154fe: 6b3b ldr r3, [r7, #48] @ 0x30
  50988. 8015500: 2200 movs r2, #0
  50989. 8015502: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  50990. pxNewTCB->ucNotifyState = taskNOT_WAITING_NOTIFICATION;
  50991. 8015506: 6b3b ldr r3, [r7, #48] @ 0x30
  50992. 8015508: 2200 movs r2, #0
  50993. 801550a: f883 20a4 strb.w r2, [r3, #164] @ 0xa4
  50994. #if ( configUSE_NEWLIB_REENTRANT == 1 )
  50995. {
  50996. /* Initialise this task's Newlib reent structure.
  50997. See the third party link http://www.nadler.com/embedded/newlibAndFreeRTOS.html
  50998. for additional information. */
  50999. _REENT_INIT_PTR( ( &( pxNewTCB->xNewLib_reent ) ) );
  51000. 801550e: 6b3b ldr r3, [r7, #48] @ 0x30
  51001. 8015510: 3354 adds r3, #84 @ 0x54
  51002. 8015512: 224c movs r2, #76 @ 0x4c
  51003. 8015514: 2100 movs r1, #0
  51004. 8015516: 4618 mov r0, r3
  51005. 8015518: f002 fb1d bl 8017b56 <memset>
  51006. 801551c: 6b3b ldr r3, [r7, #48] @ 0x30
  51007. 801551e: 4a0d ldr r2, [pc, #52] @ (8015554 <prvInitialiseNewTask+0x144>)
  51008. 8015520: 659a str r2, [r3, #88] @ 0x58
  51009. 8015522: 6b3b ldr r3, [r7, #48] @ 0x30
  51010. 8015524: 4a0c ldr r2, [pc, #48] @ (8015558 <prvInitialiseNewTask+0x148>)
  51011. 8015526: 65da str r2, [r3, #92] @ 0x5c
  51012. 8015528: 6b3b ldr r3, [r7, #48] @ 0x30
  51013. 801552a: 4a0c ldr r2, [pc, #48] @ (801555c <prvInitialiseNewTask+0x14c>)
  51014. 801552c: 661a str r2, [r3, #96] @ 0x60
  51015. }
  51016. #endif /* portSTACK_GROWTH */
  51017. }
  51018. #else /* portHAS_STACK_OVERFLOW_CHECKING */
  51019. {
  51020. pxNewTCB->pxTopOfStack = pxPortInitialiseStack( pxTopOfStack, pxTaskCode, pvParameters );
  51021. 801552e: 683a ldr r2, [r7, #0]
  51022. 8015530: 68f9 ldr r1, [r7, #12]
  51023. 8015532: 69b8 ldr r0, [r7, #24]
  51024. 8015534: f001 fdb8 bl 80170a8 <pxPortInitialiseStack>
  51025. 8015538: 4602 mov r2, r0
  51026. 801553a: 6b3b ldr r3, [r7, #48] @ 0x30
  51027. 801553c: 601a str r2, [r3, #0]
  51028. }
  51029. #endif /* portHAS_STACK_OVERFLOW_CHECKING */
  51030. }
  51031. #endif /* portUSING_MPU_WRAPPERS */
  51032. if( pxCreatedTask != NULL )
  51033. 801553e: 6afb ldr r3, [r7, #44] @ 0x2c
  51034. 8015540: 2b00 cmp r3, #0
  51035. 8015542: d002 beq.n 801554a <prvInitialiseNewTask+0x13a>
  51036. {
  51037. /* Pass the handle out in an anonymous way. The handle can be used to
  51038. change the created task's priority, delete the created task, etc.*/
  51039. *pxCreatedTask = ( TaskHandle_t ) pxNewTCB;
  51040. 8015544: 6afb ldr r3, [r7, #44] @ 0x2c
  51041. 8015546: 6b3a ldr r2, [r7, #48] @ 0x30
  51042. 8015548: 601a str r2, [r3, #0]
  51043. }
  51044. else
  51045. {
  51046. mtCOVERAGE_TEST_MARKER();
  51047. }
  51048. }
  51049. 801554a: bf00 nop
  51050. 801554c: 3720 adds r7, #32
  51051. 801554e: 46bd mov sp, r7
  51052. 8015550: bd80 pop {r7, pc}
  51053. 8015552: bf00 nop
  51054. 8015554: 24012c94 .word 0x24012c94
  51055. 8015558: 24012cfc .word 0x24012cfc
  51056. 801555c: 24012d64 .word 0x24012d64
  51057. 08015560 <prvAddNewTaskToReadyList>:
  51058. /*-----------------------------------------------------------*/
  51059. static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB )
  51060. {
  51061. 8015560: b580 push {r7, lr}
  51062. 8015562: b082 sub sp, #8
  51063. 8015564: af00 add r7, sp, #0
  51064. 8015566: 6078 str r0, [r7, #4]
  51065. /* Ensure interrupts don't access the task lists while the lists are being
  51066. updated. */
  51067. taskENTER_CRITICAL();
  51068. 8015568: f001 fece bl 8017308 <vPortEnterCritical>
  51069. {
  51070. uxCurrentNumberOfTasks++;
  51071. 801556c: 4b2d ldr r3, [pc, #180] @ (8015624 <prvAddNewTaskToReadyList+0xc4>)
  51072. 801556e: 681b ldr r3, [r3, #0]
  51073. 8015570: 3301 adds r3, #1
  51074. 8015572: 4a2c ldr r2, [pc, #176] @ (8015624 <prvAddNewTaskToReadyList+0xc4>)
  51075. 8015574: 6013 str r3, [r2, #0]
  51076. if( pxCurrentTCB == NULL )
  51077. 8015576: 4b2c ldr r3, [pc, #176] @ (8015628 <prvAddNewTaskToReadyList+0xc8>)
  51078. 8015578: 681b ldr r3, [r3, #0]
  51079. 801557a: 2b00 cmp r3, #0
  51080. 801557c: d109 bne.n 8015592 <prvAddNewTaskToReadyList+0x32>
  51081. {
  51082. /* There are no other tasks, or all the other tasks are in
  51083. the suspended state - make this the current task. */
  51084. pxCurrentTCB = pxNewTCB;
  51085. 801557e: 4a2a ldr r2, [pc, #168] @ (8015628 <prvAddNewTaskToReadyList+0xc8>)
  51086. 8015580: 687b ldr r3, [r7, #4]
  51087. 8015582: 6013 str r3, [r2, #0]
  51088. if( uxCurrentNumberOfTasks == ( UBaseType_t ) 1 )
  51089. 8015584: 4b27 ldr r3, [pc, #156] @ (8015624 <prvAddNewTaskToReadyList+0xc4>)
  51090. 8015586: 681b ldr r3, [r3, #0]
  51091. 8015588: 2b01 cmp r3, #1
  51092. 801558a: d110 bne.n 80155ae <prvAddNewTaskToReadyList+0x4e>
  51093. {
  51094. /* This is the first task to be created so do the preliminary
  51095. initialisation required. We will not recover if this call
  51096. fails, but we will report the failure. */
  51097. prvInitialiseTaskLists();
  51098. 801558c: f000 fc64 bl 8015e58 <prvInitialiseTaskLists>
  51099. 8015590: e00d b.n 80155ae <prvAddNewTaskToReadyList+0x4e>
  51100. else
  51101. {
  51102. /* If the scheduler is not already running, make this task the
  51103. current task if it is the highest priority task to be created
  51104. so far. */
  51105. if( xSchedulerRunning == pdFALSE )
  51106. 8015592: 4b26 ldr r3, [pc, #152] @ (801562c <prvAddNewTaskToReadyList+0xcc>)
  51107. 8015594: 681b ldr r3, [r3, #0]
  51108. 8015596: 2b00 cmp r3, #0
  51109. 8015598: d109 bne.n 80155ae <prvAddNewTaskToReadyList+0x4e>
  51110. {
  51111. if( pxCurrentTCB->uxPriority <= pxNewTCB->uxPriority )
  51112. 801559a: 4b23 ldr r3, [pc, #140] @ (8015628 <prvAddNewTaskToReadyList+0xc8>)
  51113. 801559c: 681b ldr r3, [r3, #0]
  51114. 801559e: 6ada ldr r2, [r3, #44] @ 0x2c
  51115. 80155a0: 687b ldr r3, [r7, #4]
  51116. 80155a2: 6adb ldr r3, [r3, #44] @ 0x2c
  51117. 80155a4: 429a cmp r2, r3
  51118. 80155a6: d802 bhi.n 80155ae <prvAddNewTaskToReadyList+0x4e>
  51119. {
  51120. pxCurrentTCB = pxNewTCB;
  51121. 80155a8: 4a1f ldr r2, [pc, #124] @ (8015628 <prvAddNewTaskToReadyList+0xc8>)
  51122. 80155aa: 687b ldr r3, [r7, #4]
  51123. 80155ac: 6013 str r3, [r2, #0]
  51124. {
  51125. mtCOVERAGE_TEST_MARKER();
  51126. }
  51127. }
  51128. uxTaskNumber++;
  51129. 80155ae: 4b20 ldr r3, [pc, #128] @ (8015630 <prvAddNewTaskToReadyList+0xd0>)
  51130. 80155b0: 681b ldr r3, [r3, #0]
  51131. 80155b2: 3301 adds r3, #1
  51132. 80155b4: 4a1e ldr r2, [pc, #120] @ (8015630 <prvAddNewTaskToReadyList+0xd0>)
  51133. 80155b6: 6013 str r3, [r2, #0]
  51134. #if ( configUSE_TRACE_FACILITY == 1 )
  51135. {
  51136. /* Add a counter into the TCB for tracing only. */
  51137. pxNewTCB->uxTCBNumber = uxTaskNumber;
  51138. 80155b8: 4b1d ldr r3, [pc, #116] @ (8015630 <prvAddNewTaskToReadyList+0xd0>)
  51139. 80155ba: 681a ldr r2, [r3, #0]
  51140. 80155bc: 687b ldr r3, [r7, #4]
  51141. 80155be: 645a str r2, [r3, #68] @ 0x44
  51142. }
  51143. #endif /* configUSE_TRACE_FACILITY */
  51144. traceTASK_CREATE( pxNewTCB );
  51145. prvAddTaskToReadyList( pxNewTCB );
  51146. 80155c0: 687b ldr r3, [r7, #4]
  51147. 80155c2: 6ada ldr r2, [r3, #44] @ 0x2c
  51148. 80155c4: 4b1b ldr r3, [pc, #108] @ (8015634 <prvAddNewTaskToReadyList+0xd4>)
  51149. 80155c6: 681b ldr r3, [r3, #0]
  51150. 80155c8: 429a cmp r2, r3
  51151. 80155ca: d903 bls.n 80155d4 <prvAddNewTaskToReadyList+0x74>
  51152. 80155cc: 687b ldr r3, [r7, #4]
  51153. 80155ce: 6adb ldr r3, [r3, #44] @ 0x2c
  51154. 80155d0: 4a18 ldr r2, [pc, #96] @ (8015634 <prvAddNewTaskToReadyList+0xd4>)
  51155. 80155d2: 6013 str r3, [r2, #0]
  51156. 80155d4: 687b ldr r3, [r7, #4]
  51157. 80155d6: 6ada ldr r2, [r3, #44] @ 0x2c
  51158. 80155d8: 4613 mov r3, r2
  51159. 80155da: 009b lsls r3, r3, #2
  51160. 80155dc: 4413 add r3, r2
  51161. 80155de: 009b lsls r3, r3, #2
  51162. 80155e0: 4a15 ldr r2, [pc, #84] @ (8015638 <prvAddNewTaskToReadyList+0xd8>)
  51163. 80155e2: 441a add r2, r3
  51164. 80155e4: 687b ldr r3, [r7, #4]
  51165. 80155e6: 3304 adds r3, #4
  51166. 80155e8: 4619 mov r1, r3
  51167. 80155ea: 4610 mov r0, r2
  51168. 80155ec: f7fe fc8d bl 8013f0a <vListInsertEnd>
  51169. portSETUP_TCB( pxNewTCB );
  51170. }
  51171. taskEXIT_CRITICAL();
  51172. 80155f0: f001 febc bl 801736c <vPortExitCritical>
  51173. if( xSchedulerRunning != pdFALSE )
  51174. 80155f4: 4b0d ldr r3, [pc, #52] @ (801562c <prvAddNewTaskToReadyList+0xcc>)
  51175. 80155f6: 681b ldr r3, [r3, #0]
  51176. 80155f8: 2b00 cmp r3, #0
  51177. 80155fa: d00e beq.n 801561a <prvAddNewTaskToReadyList+0xba>
  51178. {
  51179. /* If the created task is of a higher priority than the current task
  51180. then it should run now. */
  51181. if( pxCurrentTCB->uxPriority < pxNewTCB->uxPriority )
  51182. 80155fc: 4b0a ldr r3, [pc, #40] @ (8015628 <prvAddNewTaskToReadyList+0xc8>)
  51183. 80155fe: 681b ldr r3, [r3, #0]
  51184. 8015600: 6ada ldr r2, [r3, #44] @ 0x2c
  51185. 8015602: 687b ldr r3, [r7, #4]
  51186. 8015604: 6adb ldr r3, [r3, #44] @ 0x2c
  51187. 8015606: 429a cmp r2, r3
  51188. 8015608: d207 bcs.n 801561a <prvAddNewTaskToReadyList+0xba>
  51189. {
  51190. taskYIELD_IF_USING_PREEMPTION();
  51191. 801560a: 4b0c ldr r3, [pc, #48] @ (801563c <prvAddNewTaskToReadyList+0xdc>)
  51192. 801560c: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  51193. 8015610: 601a str r2, [r3, #0]
  51194. 8015612: f3bf 8f4f dsb sy
  51195. 8015616: f3bf 8f6f isb sy
  51196. }
  51197. else
  51198. {
  51199. mtCOVERAGE_TEST_MARKER();
  51200. }
  51201. }
  51202. 801561a: bf00 nop
  51203. 801561c: 3708 adds r7, #8
  51204. 801561e: 46bd mov sp, r7
  51205. 8015620: bd80 pop {r7, pc}
  51206. 8015622: bf00 nop
  51207. 8015624: 24002b14 .word 0x24002b14
  51208. 8015628: 24002640 .word 0x24002640
  51209. 801562c: 24002b20 .word 0x24002b20
  51210. 8015630: 24002b30 .word 0x24002b30
  51211. 8015634: 24002b1c .word 0x24002b1c
  51212. 8015638: 24002644 .word 0x24002644
  51213. 801563c: e000ed04 .word 0xe000ed04
  51214. 08015640 <vTaskDelay>:
  51215. /*-----------------------------------------------------------*/
  51216. #if ( INCLUDE_vTaskDelay == 1 )
  51217. void vTaskDelay( const TickType_t xTicksToDelay )
  51218. {
  51219. 8015640: b580 push {r7, lr}
  51220. 8015642: b084 sub sp, #16
  51221. 8015644: af00 add r7, sp, #0
  51222. 8015646: 6078 str r0, [r7, #4]
  51223. BaseType_t xAlreadyYielded = pdFALSE;
  51224. 8015648: 2300 movs r3, #0
  51225. 801564a: 60fb str r3, [r7, #12]
  51226. /* A delay time of zero just forces a reschedule. */
  51227. if( xTicksToDelay > ( TickType_t ) 0U )
  51228. 801564c: 687b ldr r3, [r7, #4]
  51229. 801564e: 2b00 cmp r3, #0
  51230. 8015650: d018 beq.n 8015684 <vTaskDelay+0x44>
  51231. {
  51232. configASSERT( uxSchedulerSuspended == 0 );
  51233. 8015652: 4b14 ldr r3, [pc, #80] @ (80156a4 <vTaskDelay+0x64>)
  51234. 8015654: 681b ldr r3, [r3, #0]
  51235. 8015656: 2b00 cmp r3, #0
  51236. 8015658: d00b beq.n 8015672 <vTaskDelay+0x32>
  51237. __asm volatile
  51238. 801565a: f04f 0350 mov.w r3, #80 @ 0x50
  51239. 801565e: f383 8811 msr BASEPRI, r3
  51240. 8015662: f3bf 8f6f isb sy
  51241. 8015666: f3bf 8f4f dsb sy
  51242. 801566a: 60bb str r3, [r7, #8]
  51243. }
  51244. 801566c: bf00 nop
  51245. 801566e: bf00 nop
  51246. 8015670: e7fd b.n 801566e <vTaskDelay+0x2e>
  51247. vTaskSuspendAll();
  51248. 8015672: f000 f88b bl 801578c <vTaskSuspendAll>
  51249. list or removed from the blocked list until the scheduler
  51250. is resumed.
  51251. This task cannot be in an event list as it is the currently
  51252. executing task. */
  51253. prvAddCurrentTaskToDelayedList( xTicksToDelay, pdFALSE );
  51254. 8015676: 2100 movs r1, #0
  51255. 8015678: 6878 ldr r0, [r7, #4]
  51256. 801567a: f001 f87d bl 8016778 <prvAddCurrentTaskToDelayedList>
  51257. }
  51258. xAlreadyYielded = xTaskResumeAll();
  51259. 801567e: f000 f893 bl 80157a8 <xTaskResumeAll>
  51260. 8015682: 60f8 str r0, [r7, #12]
  51261. mtCOVERAGE_TEST_MARKER();
  51262. }
  51263. /* Force a reschedule if xTaskResumeAll has not already done so, we may
  51264. have put ourselves to sleep. */
  51265. if( xAlreadyYielded == pdFALSE )
  51266. 8015684: 68fb ldr r3, [r7, #12]
  51267. 8015686: 2b00 cmp r3, #0
  51268. 8015688: d107 bne.n 801569a <vTaskDelay+0x5a>
  51269. {
  51270. portYIELD_WITHIN_API();
  51271. 801568a: 4b07 ldr r3, [pc, #28] @ (80156a8 <vTaskDelay+0x68>)
  51272. 801568c: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  51273. 8015690: 601a str r2, [r3, #0]
  51274. 8015692: f3bf 8f4f dsb sy
  51275. 8015696: f3bf 8f6f isb sy
  51276. }
  51277. else
  51278. {
  51279. mtCOVERAGE_TEST_MARKER();
  51280. }
  51281. }
  51282. 801569a: bf00 nop
  51283. 801569c: 3710 adds r7, #16
  51284. 801569e: 46bd mov sp, r7
  51285. 80156a0: bd80 pop {r7, pc}
  51286. 80156a2: bf00 nop
  51287. 80156a4: 24002b3c .word 0x24002b3c
  51288. 80156a8: e000ed04 .word 0xe000ed04
  51289. 080156ac <vTaskStartScheduler>:
  51290. #endif /* ( ( INCLUDE_xTaskResumeFromISR == 1 ) && ( INCLUDE_vTaskSuspend == 1 ) ) */
  51291. /*-----------------------------------------------------------*/
  51292. void vTaskStartScheduler( void )
  51293. {
  51294. 80156ac: b580 push {r7, lr}
  51295. 80156ae: b08a sub sp, #40 @ 0x28
  51296. 80156b0: af04 add r7, sp, #16
  51297. BaseType_t xReturn;
  51298. /* Add the idle task at the lowest priority. */
  51299. #if( configSUPPORT_STATIC_ALLOCATION == 1 )
  51300. {
  51301. StaticTask_t *pxIdleTaskTCBBuffer = NULL;
  51302. 80156b2: 2300 movs r3, #0
  51303. 80156b4: 60bb str r3, [r7, #8]
  51304. StackType_t *pxIdleTaskStackBuffer = NULL;
  51305. 80156b6: 2300 movs r3, #0
  51306. 80156b8: 607b str r3, [r7, #4]
  51307. uint32_t ulIdleTaskStackSize;
  51308. /* The Idle task is created using user provided RAM - obtain the
  51309. address of the RAM then create the idle task. */
  51310. vApplicationGetIdleTaskMemory( &pxIdleTaskTCBBuffer, &pxIdleTaskStackBuffer, &ulIdleTaskStackSize );
  51311. 80156ba: 463a mov r2, r7
  51312. 80156bc: 1d39 adds r1, r7, #4
  51313. 80156be: f107 0308 add.w r3, r7, #8
  51314. 80156c2: 4618 mov r0, r3
  51315. 80156c4: f7fe fbc0 bl 8013e48 <vApplicationGetIdleTaskMemory>
  51316. xIdleTaskHandle = xTaskCreateStatic( prvIdleTask,
  51317. 80156c8: 6839 ldr r1, [r7, #0]
  51318. 80156ca: 687b ldr r3, [r7, #4]
  51319. 80156cc: 68ba ldr r2, [r7, #8]
  51320. 80156ce: 9202 str r2, [sp, #8]
  51321. 80156d0: 9301 str r3, [sp, #4]
  51322. 80156d2: 2300 movs r3, #0
  51323. 80156d4: 9300 str r3, [sp, #0]
  51324. 80156d6: 2300 movs r3, #0
  51325. 80156d8: 460a mov r2, r1
  51326. 80156da: 4924 ldr r1, [pc, #144] @ (801576c <vTaskStartScheduler+0xc0>)
  51327. 80156dc: 4824 ldr r0, [pc, #144] @ (8015770 <vTaskStartScheduler+0xc4>)
  51328. 80156de: f7ff fdf2 bl 80152c6 <xTaskCreateStatic>
  51329. 80156e2: 4603 mov r3, r0
  51330. 80156e4: 4a23 ldr r2, [pc, #140] @ (8015774 <vTaskStartScheduler+0xc8>)
  51331. 80156e6: 6013 str r3, [r2, #0]
  51332. ( void * ) NULL, /*lint !e961. The cast is not redundant for all compilers. */
  51333. portPRIVILEGE_BIT, /* In effect ( tskIDLE_PRIORITY | portPRIVILEGE_BIT ), but tskIDLE_PRIORITY is zero. */
  51334. pxIdleTaskStackBuffer,
  51335. pxIdleTaskTCBBuffer ); /*lint !e961 MISRA exception, justified as it is not a redundant explicit cast to all supported compilers. */
  51336. if( xIdleTaskHandle != NULL )
  51337. 80156e8: 4b22 ldr r3, [pc, #136] @ (8015774 <vTaskStartScheduler+0xc8>)
  51338. 80156ea: 681b ldr r3, [r3, #0]
  51339. 80156ec: 2b00 cmp r3, #0
  51340. 80156ee: d002 beq.n 80156f6 <vTaskStartScheduler+0x4a>
  51341. {
  51342. xReturn = pdPASS;
  51343. 80156f0: 2301 movs r3, #1
  51344. 80156f2: 617b str r3, [r7, #20]
  51345. 80156f4: e001 b.n 80156fa <vTaskStartScheduler+0x4e>
  51346. }
  51347. else
  51348. {
  51349. xReturn = pdFAIL;
  51350. 80156f6: 2300 movs r3, #0
  51351. 80156f8: 617b str r3, [r7, #20]
  51352. }
  51353. #endif /* configSUPPORT_STATIC_ALLOCATION */
  51354. #if ( configUSE_TIMERS == 1 )
  51355. {
  51356. if( xReturn == pdPASS )
  51357. 80156fa: 697b ldr r3, [r7, #20]
  51358. 80156fc: 2b01 cmp r3, #1
  51359. 80156fe: d102 bne.n 8015706 <vTaskStartScheduler+0x5a>
  51360. {
  51361. xReturn = xTimerCreateTimerTask();
  51362. 8015700: f001 f88e bl 8016820 <xTimerCreateTimerTask>
  51363. 8015704: 6178 str r0, [r7, #20]
  51364. mtCOVERAGE_TEST_MARKER();
  51365. }
  51366. }
  51367. #endif /* configUSE_TIMERS */
  51368. if( xReturn == pdPASS )
  51369. 8015706: 697b ldr r3, [r7, #20]
  51370. 8015708: 2b01 cmp r3, #1
  51371. 801570a: d11b bne.n 8015744 <vTaskStartScheduler+0x98>
  51372. __asm volatile
  51373. 801570c: f04f 0350 mov.w r3, #80 @ 0x50
  51374. 8015710: f383 8811 msr BASEPRI, r3
  51375. 8015714: f3bf 8f6f isb sy
  51376. 8015718: f3bf 8f4f dsb sy
  51377. 801571c: 613b str r3, [r7, #16]
  51378. }
  51379. 801571e: bf00 nop
  51380. {
  51381. /* Switch Newlib's _impure_ptr variable to point to the _reent
  51382. structure specific to the task that will run first.
  51383. See the third party link http://www.nadler.com/embedded/newlibAndFreeRTOS.html
  51384. for additional information. */
  51385. _impure_ptr = &( pxCurrentTCB->xNewLib_reent );
  51386. 8015720: 4b15 ldr r3, [pc, #84] @ (8015778 <vTaskStartScheduler+0xcc>)
  51387. 8015722: 681b ldr r3, [r3, #0]
  51388. 8015724: 3354 adds r3, #84 @ 0x54
  51389. 8015726: 4a15 ldr r2, [pc, #84] @ (801577c <vTaskStartScheduler+0xd0>)
  51390. 8015728: 6013 str r3, [r2, #0]
  51391. }
  51392. #endif /* configUSE_NEWLIB_REENTRANT */
  51393. xNextTaskUnblockTime = portMAX_DELAY;
  51394. 801572a: 4b15 ldr r3, [pc, #84] @ (8015780 <vTaskStartScheduler+0xd4>)
  51395. 801572c: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
  51396. 8015730: 601a str r2, [r3, #0]
  51397. xSchedulerRunning = pdTRUE;
  51398. 8015732: 4b14 ldr r3, [pc, #80] @ (8015784 <vTaskStartScheduler+0xd8>)
  51399. 8015734: 2201 movs r2, #1
  51400. 8015736: 601a str r2, [r3, #0]
  51401. xTickCount = ( TickType_t ) configINITIAL_TICK_COUNT;
  51402. 8015738: 4b13 ldr r3, [pc, #76] @ (8015788 <vTaskStartScheduler+0xdc>)
  51403. 801573a: 2200 movs r2, #0
  51404. 801573c: 601a str r2, [r3, #0]
  51405. traceTASK_SWITCHED_IN();
  51406. /* Setting up the timer tick is hardware specific and thus in the
  51407. portable interface. */
  51408. if( xPortStartScheduler() != pdFALSE )
  51409. 801573e: f001 fd3f bl 80171c0 <xPortStartScheduler>
  51410. }
  51411. /* Prevent compiler warnings if INCLUDE_xTaskGetIdleTaskHandle is set to 0,
  51412. meaning xIdleTaskHandle is not used anywhere else. */
  51413. ( void ) xIdleTaskHandle;
  51414. }
  51415. 8015742: e00f b.n 8015764 <vTaskStartScheduler+0xb8>
  51416. configASSERT( xReturn != errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY );
  51417. 8015744: 697b ldr r3, [r7, #20]
  51418. 8015746: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  51419. 801574a: d10b bne.n 8015764 <vTaskStartScheduler+0xb8>
  51420. __asm volatile
  51421. 801574c: f04f 0350 mov.w r3, #80 @ 0x50
  51422. 8015750: f383 8811 msr BASEPRI, r3
  51423. 8015754: f3bf 8f6f isb sy
  51424. 8015758: f3bf 8f4f dsb sy
  51425. 801575c: 60fb str r3, [r7, #12]
  51426. }
  51427. 801575e: bf00 nop
  51428. 8015760: bf00 nop
  51429. 8015762: e7fd b.n 8015760 <vTaskStartScheduler+0xb4>
  51430. }
  51431. 8015764: bf00 nop
  51432. 8015766: 3718 adds r7, #24
  51433. 8015768: 46bd mov sp, r7
  51434. 801576a: bd80 pop {r7, pc}
  51435. 801576c: 0801894c .word 0x0801894c
  51436. 8015770: 08015e29 .word 0x08015e29
  51437. 8015774: 24002b38 .word 0x24002b38
  51438. 8015778: 24002640 .word 0x24002640
  51439. 801577c: 24000054 .word 0x24000054
  51440. 8015780: 24002b34 .word 0x24002b34
  51441. 8015784: 24002b20 .word 0x24002b20
  51442. 8015788: 24002b18 .word 0x24002b18
  51443. 0801578c <vTaskSuspendAll>:
  51444. vPortEndScheduler();
  51445. }
  51446. /*----------------------------------------------------------*/
  51447. void vTaskSuspendAll( void )
  51448. {
  51449. 801578c: b480 push {r7}
  51450. 801578e: af00 add r7, sp, #0
  51451. do not otherwise exhibit real time behaviour. */
  51452. portSOFTWARE_BARRIER();
  51453. /* The scheduler is suspended if uxSchedulerSuspended is non-zero. An increment
  51454. is used to allow calls to vTaskSuspendAll() to nest. */
  51455. ++uxSchedulerSuspended;
  51456. 8015790: 4b04 ldr r3, [pc, #16] @ (80157a4 <vTaskSuspendAll+0x18>)
  51457. 8015792: 681b ldr r3, [r3, #0]
  51458. 8015794: 3301 adds r3, #1
  51459. 8015796: 4a03 ldr r2, [pc, #12] @ (80157a4 <vTaskSuspendAll+0x18>)
  51460. 8015798: 6013 str r3, [r2, #0]
  51461. /* Enforces ordering for ports and optimised compilers that may otherwise place
  51462. the above increment elsewhere. */
  51463. portMEMORY_BARRIER();
  51464. }
  51465. 801579a: bf00 nop
  51466. 801579c: 46bd mov sp, r7
  51467. 801579e: f85d 7b04 ldr.w r7, [sp], #4
  51468. 80157a2: 4770 bx lr
  51469. 80157a4: 24002b3c .word 0x24002b3c
  51470. 080157a8 <xTaskResumeAll>:
  51471. #endif /* configUSE_TICKLESS_IDLE */
  51472. /*----------------------------------------------------------*/
  51473. BaseType_t xTaskResumeAll( void )
  51474. {
  51475. 80157a8: b580 push {r7, lr}
  51476. 80157aa: b084 sub sp, #16
  51477. 80157ac: af00 add r7, sp, #0
  51478. TCB_t *pxTCB = NULL;
  51479. 80157ae: 2300 movs r3, #0
  51480. 80157b0: 60fb str r3, [r7, #12]
  51481. BaseType_t xAlreadyYielded = pdFALSE;
  51482. 80157b2: 2300 movs r3, #0
  51483. 80157b4: 60bb str r3, [r7, #8]
  51484. /* If uxSchedulerSuspended is zero then this function does not match a
  51485. previous call to vTaskSuspendAll(). */
  51486. configASSERT( uxSchedulerSuspended );
  51487. 80157b6: 4b42 ldr r3, [pc, #264] @ (80158c0 <xTaskResumeAll+0x118>)
  51488. 80157b8: 681b ldr r3, [r3, #0]
  51489. 80157ba: 2b00 cmp r3, #0
  51490. 80157bc: d10b bne.n 80157d6 <xTaskResumeAll+0x2e>
  51491. __asm volatile
  51492. 80157be: f04f 0350 mov.w r3, #80 @ 0x50
  51493. 80157c2: f383 8811 msr BASEPRI, r3
  51494. 80157c6: f3bf 8f6f isb sy
  51495. 80157ca: f3bf 8f4f dsb sy
  51496. 80157ce: 603b str r3, [r7, #0]
  51497. }
  51498. 80157d0: bf00 nop
  51499. 80157d2: bf00 nop
  51500. 80157d4: e7fd b.n 80157d2 <xTaskResumeAll+0x2a>
  51501. /* It is possible that an ISR caused a task to be removed from an event
  51502. list while the scheduler was suspended. If this was the case then the
  51503. removed task will have been added to the xPendingReadyList. Once the
  51504. scheduler has been resumed it is safe to move all the pending ready
  51505. tasks from this list into their appropriate ready list. */
  51506. taskENTER_CRITICAL();
  51507. 80157d6: f001 fd97 bl 8017308 <vPortEnterCritical>
  51508. {
  51509. --uxSchedulerSuspended;
  51510. 80157da: 4b39 ldr r3, [pc, #228] @ (80158c0 <xTaskResumeAll+0x118>)
  51511. 80157dc: 681b ldr r3, [r3, #0]
  51512. 80157de: 3b01 subs r3, #1
  51513. 80157e0: 4a37 ldr r2, [pc, #220] @ (80158c0 <xTaskResumeAll+0x118>)
  51514. 80157e2: 6013 str r3, [r2, #0]
  51515. if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE )
  51516. 80157e4: 4b36 ldr r3, [pc, #216] @ (80158c0 <xTaskResumeAll+0x118>)
  51517. 80157e6: 681b ldr r3, [r3, #0]
  51518. 80157e8: 2b00 cmp r3, #0
  51519. 80157ea: d162 bne.n 80158b2 <xTaskResumeAll+0x10a>
  51520. {
  51521. if( uxCurrentNumberOfTasks > ( UBaseType_t ) 0U )
  51522. 80157ec: 4b35 ldr r3, [pc, #212] @ (80158c4 <xTaskResumeAll+0x11c>)
  51523. 80157ee: 681b ldr r3, [r3, #0]
  51524. 80157f0: 2b00 cmp r3, #0
  51525. 80157f2: d05e beq.n 80158b2 <xTaskResumeAll+0x10a>
  51526. {
  51527. /* Move any readied tasks from the pending list into the
  51528. appropriate ready list. */
  51529. while( listLIST_IS_EMPTY( &xPendingReadyList ) == pdFALSE )
  51530. 80157f4: e02f b.n 8015856 <xTaskResumeAll+0xae>
  51531. {
  51532. pxTCB = listGET_OWNER_OF_HEAD_ENTRY( ( &xPendingReadyList ) ); /*lint !e9079 void * is used as this macro is used with timers and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */
  51533. 80157f6: 4b34 ldr r3, [pc, #208] @ (80158c8 <xTaskResumeAll+0x120>)
  51534. 80157f8: 68db ldr r3, [r3, #12]
  51535. 80157fa: 68db ldr r3, [r3, #12]
  51536. 80157fc: 60fb str r3, [r7, #12]
  51537. ( void ) uxListRemove( &( pxTCB->xEventListItem ) );
  51538. 80157fe: 68fb ldr r3, [r7, #12]
  51539. 8015800: 3318 adds r3, #24
  51540. 8015802: 4618 mov r0, r3
  51541. 8015804: f7fe fbde bl 8013fc4 <uxListRemove>
  51542. ( void ) uxListRemove( &( pxTCB->xStateListItem ) );
  51543. 8015808: 68fb ldr r3, [r7, #12]
  51544. 801580a: 3304 adds r3, #4
  51545. 801580c: 4618 mov r0, r3
  51546. 801580e: f7fe fbd9 bl 8013fc4 <uxListRemove>
  51547. prvAddTaskToReadyList( pxTCB );
  51548. 8015812: 68fb ldr r3, [r7, #12]
  51549. 8015814: 6ada ldr r2, [r3, #44] @ 0x2c
  51550. 8015816: 4b2d ldr r3, [pc, #180] @ (80158cc <xTaskResumeAll+0x124>)
  51551. 8015818: 681b ldr r3, [r3, #0]
  51552. 801581a: 429a cmp r2, r3
  51553. 801581c: d903 bls.n 8015826 <xTaskResumeAll+0x7e>
  51554. 801581e: 68fb ldr r3, [r7, #12]
  51555. 8015820: 6adb ldr r3, [r3, #44] @ 0x2c
  51556. 8015822: 4a2a ldr r2, [pc, #168] @ (80158cc <xTaskResumeAll+0x124>)
  51557. 8015824: 6013 str r3, [r2, #0]
  51558. 8015826: 68fb ldr r3, [r7, #12]
  51559. 8015828: 6ada ldr r2, [r3, #44] @ 0x2c
  51560. 801582a: 4613 mov r3, r2
  51561. 801582c: 009b lsls r3, r3, #2
  51562. 801582e: 4413 add r3, r2
  51563. 8015830: 009b lsls r3, r3, #2
  51564. 8015832: 4a27 ldr r2, [pc, #156] @ (80158d0 <xTaskResumeAll+0x128>)
  51565. 8015834: 441a add r2, r3
  51566. 8015836: 68fb ldr r3, [r7, #12]
  51567. 8015838: 3304 adds r3, #4
  51568. 801583a: 4619 mov r1, r3
  51569. 801583c: 4610 mov r0, r2
  51570. 801583e: f7fe fb64 bl 8013f0a <vListInsertEnd>
  51571. /* If the moved task has a priority higher than the current
  51572. task then a yield must be performed. */
  51573. if( pxTCB->uxPriority >= pxCurrentTCB->uxPriority )
  51574. 8015842: 68fb ldr r3, [r7, #12]
  51575. 8015844: 6ada ldr r2, [r3, #44] @ 0x2c
  51576. 8015846: 4b23 ldr r3, [pc, #140] @ (80158d4 <xTaskResumeAll+0x12c>)
  51577. 8015848: 681b ldr r3, [r3, #0]
  51578. 801584a: 6adb ldr r3, [r3, #44] @ 0x2c
  51579. 801584c: 429a cmp r2, r3
  51580. 801584e: d302 bcc.n 8015856 <xTaskResumeAll+0xae>
  51581. {
  51582. xYieldPending = pdTRUE;
  51583. 8015850: 4b21 ldr r3, [pc, #132] @ (80158d8 <xTaskResumeAll+0x130>)
  51584. 8015852: 2201 movs r2, #1
  51585. 8015854: 601a str r2, [r3, #0]
  51586. while( listLIST_IS_EMPTY( &xPendingReadyList ) == pdFALSE )
  51587. 8015856: 4b1c ldr r3, [pc, #112] @ (80158c8 <xTaskResumeAll+0x120>)
  51588. 8015858: 681b ldr r3, [r3, #0]
  51589. 801585a: 2b00 cmp r3, #0
  51590. 801585c: d1cb bne.n 80157f6 <xTaskResumeAll+0x4e>
  51591. {
  51592. mtCOVERAGE_TEST_MARKER();
  51593. }
  51594. }
  51595. if( pxTCB != NULL )
  51596. 801585e: 68fb ldr r3, [r7, #12]
  51597. 8015860: 2b00 cmp r3, #0
  51598. 8015862: d001 beq.n 8015868 <xTaskResumeAll+0xc0>
  51599. which may have prevented the next unblock time from being
  51600. re-calculated, in which case re-calculate it now. Mainly
  51601. important for low power tickless implementations, where
  51602. this can prevent an unnecessary exit from low power
  51603. state. */
  51604. prvResetNextTaskUnblockTime();
  51605. 8015864: f000 fb9c bl 8015fa0 <prvResetNextTaskUnblockTime>
  51606. /* If any ticks occurred while the scheduler was suspended then
  51607. they should be processed now. This ensures the tick count does
  51608. not slip, and that any delayed tasks are resumed at the correct
  51609. time. */
  51610. {
  51611. TickType_t xPendedCounts = xPendedTicks; /* Non-volatile copy. */
  51612. 8015868: 4b1c ldr r3, [pc, #112] @ (80158dc <xTaskResumeAll+0x134>)
  51613. 801586a: 681b ldr r3, [r3, #0]
  51614. 801586c: 607b str r3, [r7, #4]
  51615. if( xPendedCounts > ( TickType_t ) 0U )
  51616. 801586e: 687b ldr r3, [r7, #4]
  51617. 8015870: 2b00 cmp r3, #0
  51618. 8015872: d010 beq.n 8015896 <xTaskResumeAll+0xee>
  51619. {
  51620. do
  51621. {
  51622. if( xTaskIncrementTick() != pdFALSE )
  51623. 8015874: f000 f846 bl 8015904 <xTaskIncrementTick>
  51624. 8015878: 4603 mov r3, r0
  51625. 801587a: 2b00 cmp r3, #0
  51626. 801587c: d002 beq.n 8015884 <xTaskResumeAll+0xdc>
  51627. {
  51628. xYieldPending = pdTRUE;
  51629. 801587e: 4b16 ldr r3, [pc, #88] @ (80158d8 <xTaskResumeAll+0x130>)
  51630. 8015880: 2201 movs r2, #1
  51631. 8015882: 601a str r2, [r3, #0]
  51632. }
  51633. else
  51634. {
  51635. mtCOVERAGE_TEST_MARKER();
  51636. }
  51637. --xPendedCounts;
  51638. 8015884: 687b ldr r3, [r7, #4]
  51639. 8015886: 3b01 subs r3, #1
  51640. 8015888: 607b str r3, [r7, #4]
  51641. } while( xPendedCounts > ( TickType_t ) 0U );
  51642. 801588a: 687b ldr r3, [r7, #4]
  51643. 801588c: 2b00 cmp r3, #0
  51644. 801588e: d1f1 bne.n 8015874 <xTaskResumeAll+0xcc>
  51645. xPendedTicks = 0;
  51646. 8015890: 4b12 ldr r3, [pc, #72] @ (80158dc <xTaskResumeAll+0x134>)
  51647. 8015892: 2200 movs r2, #0
  51648. 8015894: 601a str r2, [r3, #0]
  51649. {
  51650. mtCOVERAGE_TEST_MARKER();
  51651. }
  51652. }
  51653. if( xYieldPending != pdFALSE )
  51654. 8015896: 4b10 ldr r3, [pc, #64] @ (80158d8 <xTaskResumeAll+0x130>)
  51655. 8015898: 681b ldr r3, [r3, #0]
  51656. 801589a: 2b00 cmp r3, #0
  51657. 801589c: d009 beq.n 80158b2 <xTaskResumeAll+0x10a>
  51658. {
  51659. #if( configUSE_PREEMPTION != 0 )
  51660. {
  51661. xAlreadyYielded = pdTRUE;
  51662. 801589e: 2301 movs r3, #1
  51663. 80158a0: 60bb str r3, [r7, #8]
  51664. }
  51665. #endif
  51666. taskYIELD_IF_USING_PREEMPTION();
  51667. 80158a2: 4b0f ldr r3, [pc, #60] @ (80158e0 <xTaskResumeAll+0x138>)
  51668. 80158a4: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  51669. 80158a8: 601a str r2, [r3, #0]
  51670. 80158aa: f3bf 8f4f dsb sy
  51671. 80158ae: f3bf 8f6f isb sy
  51672. else
  51673. {
  51674. mtCOVERAGE_TEST_MARKER();
  51675. }
  51676. }
  51677. taskEXIT_CRITICAL();
  51678. 80158b2: f001 fd5b bl 801736c <vPortExitCritical>
  51679. return xAlreadyYielded;
  51680. 80158b6: 68bb ldr r3, [r7, #8]
  51681. }
  51682. 80158b8: 4618 mov r0, r3
  51683. 80158ba: 3710 adds r7, #16
  51684. 80158bc: 46bd mov sp, r7
  51685. 80158be: bd80 pop {r7, pc}
  51686. 80158c0: 24002b3c .word 0x24002b3c
  51687. 80158c4: 24002b14 .word 0x24002b14
  51688. 80158c8: 24002ad4 .word 0x24002ad4
  51689. 80158cc: 24002b1c .word 0x24002b1c
  51690. 80158d0: 24002644 .word 0x24002644
  51691. 80158d4: 24002640 .word 0x24002640
  51692. 80158d8: 24002b28 .word 0x24002b28
  51693. 80158dc: 24002b24 .word 0x24002b24
  51694. 80158e0: e000ed04 .word 0xe000ed04
  51695. 080158e4 <xTaskGetTickCount>:
  51696. /*-----------------------------------------------------------*/
  51697. TickType_t xTaskGetTickCount( void )
  51698. {
  51699. 80158e4: b480 push {r7}
  51700. 80158e6: b083 sub sp, #12
  51701. 80158e8: af00 add r7, sp, #0
  51702. TickType_t xTicks;
  51703. /* Critical section required if running on a 16 bit processor. */
  51704. portTICK_TYPE_ENTER_CRITICAL();
  51705. {
  51706. xTicks = xTickCount;
  51707. 80158ea: 4b05 ldr r3, [pc, #20] @ (8015900 <xTaskGetTickCount+0x1c>)
  51708. 80158ec: 681b ldr r3, [r3, #0]
  51709. 80158ee: 607b str r3, [r7, #4]
  51710. }
  51711. portTICK_TYPE_EXIT_CRITICAL();
  51712. return xTicks;
  51713. 80158f0: 687b ldr r3, [r7, #4]
  51714. }
  51715. 80158f2: 4618 mov r0, r3
  51716. 80158f4: 370c adds r7, #12
  51717. 80158f6: 46bd mov sp, r7
  51718. 80158f8: f85d 7b04 ldr.w r7, [sp], #4
  51719. 80158fc: 4770 bx lr
  51720. 80158fe: bf00 nop
  51721. 8015900: 24002b18 .word 0x24002b18
  51722. 08015904 <xTaskIncrementTick>:
  51723. #endif /* INCLUDE_xTaskAbortDelay */
  51724. /*----------------------------------------------------------*/
  51725. BaseType_t xTaskIncrementTick( void )
  51726. {
  51727. 8015904: b580 push {r7, lr}
  51728. 8015906: b086 sub sp, #24
  51729. 8015908: af00 add r7, sp, #0
  51730. TCB_t * pxTCB;
  51731. TickType_t xItemValue;
  51732. BaseType_t xSwitchRequired = pdFALSE;
  51733. 801590a: 2300 movs r3, #0
  51734. 801590c: 617b str r3, [r7, #20]
  51735. /* Called by the portable layer each time a tick interrupt occurs.
  51736. Increments the tick then checks to see if the new tick value will cause any
  51737. tasks to be unblocked. */
  51738. traceTASK_INCREMENT_TICK( xTickCount );
  51739. if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE )
  51740. 801590e: 4b4f ldr r3, [pc, #316] @ (8015a4c <xTaskIncrementTick+0x148>)
  51741. 8015910: 681b ldr r3, [r3, #0]
  51742. 8015912: 2b00 cmp r3, #0
  51743. 8015914: f040 8090 bne.w 8015a38 <xTaskIncrementTick+0x134>
  51744. {
  51745. /* Minor optimisation. The tick count cannot change in this
  51746. block. */
  51747. const TickType_t xConstTickCount = xTickCount + ( TickType_t ) 1;
  51748. 8015918: 4b4d ldr r3, [pc, #308] @ (8015a50 <xTaskIncrementTick+0x14c>)
  51749. 801591a: 681b ldr r3, [r3, #0]
  51750. 801591c: 3301 adds r3, #1
  51751. 801591e: 613b str r3, [r7, #16]
  51752. /* Increment the RTOS tick, switching the delayed and overflowed
  51753. delayed lists if it wraps to 0. */
  51754. xTickCount = xConstTickCount;
  51755. 8015920: 4a4b ldr r2, [pc, #300] @ (8015a50 <xTaskIncrementTick+0x14c>)
  51756. 8015922: 693b ldr r3, [r7, #16]
  51757. 8015924: 6013 str r3, [r2, #0]
  51758. if( xConstTickCount == ( TickType_t ) 0U ) /*lint !e774 'if' does not always evaluate to false as it is looking for an overflow. */
  51759. 8015926: 693b ldr r3, [r7, #16]
  51760. 8015928: 2b00 cmp r3, #0
  51761. 801592a: d121 bne.n 8015970 <xTaskIncrementTick+0x6c>
  51762. {
  51763. taskSWITCH_DELAYED_LISTS();
  51764. 801592c: 4b49 ldr r3, [pc, #292] @ (8015a54 <xTaskIncrementTick+0x150>)
  51765. 801592e: 681b ldr r3, [r3, #0]
  51766. 8015930: 681b ldr r3, [r3, #0]
  51767. 8015932: 2b00 cmp r3, #0
  51768. 8015934: d00b beq.n 801594e <xTaskIncrementTick+0x4a>
  51769. __asm volatile
  51770. 8015936: f04f 0350 mov.w r3, #80 @ 0x50
  51771. 801593a: f383 8811 msr BASEPRI, r3
  51772. 801593e: f3bf 8f6f isb sy
  51773. 8015942: f3bf 8f4f dsb sy
  51774. 8015946: 603b str r3, [r7, #0]
  51775. }
  51776. 8015948: bf00 nop
  51777. 801594a: bf00 nop
  51778. 801594c: e7fd b.n 801594a <xTaskIncrementTick+0x46>
  51779. 801594e: 4b41 ldr r3, [pc, #260] @ (8015a54 <xTaskIncrementTick+0x150>)
  51780. 8015950: 681b ldr r3, [r3, #0]
  51781. 8015952: 60fb str r3, [r7, #12]
  51782. 8015954: 4b40 ldr r3, [pc, #256] @ (8015a58 <xTaskIncrementTick+0x154>)
  51783. 8015956: 681b ldr r3, [r3, #0]
  51784. 8015958: 4a3e ldr r2, [pc, #248] @ (8015a54 <xTaskIncrementTick+0x150>)
  51785. 801595a: 6013 str r3, [r2, #0]
  51786. 801595c: 4a3e ldr r2, [pc, #248] @ (8015a58 <xTaskIncrementTick+0x154>)
  51787. 801595e: 68fb ldr r3, [r7, #12]
  51788. 8015960: 6013 str r3, [r2, #0]
  51789. 8015962: 4b3e ldr r3, [pc, #248] @ (8015a5c <xTaskIncrementTick+0x158>)
  51790. 8015964: 681b ldr r3, [r3, #0]
  51791. 8015966: 3301 adds r3, #1
  51792. 8015968: 4a3c ldr r2, [pc, #240] @ (8015a5c <xTaskIncrementTick+0x158>)
  51793. 801596a: 6013 str r3, [r2, #0]
  51794. 801596c: f000 fb18 bl 8015fa0 <prvResetNextTaskUnblockTime>
  51795. /* See if this tick has made a timeout expire. Tasks are stored in
  51796. the queue in the order of their wake time - meaning once one task
  51797. has been found whose block time has not expired there is no need to
  51798. look any further down the list. */
  51799. if( xConstTickCount >= xNextTaskUnblockTime )
  51800. 8015970: 4b3b ldr r3, [pc, #236] @ (8015a60 <xTaskIncrementTick+0x15c>)
  51801. 8015972: 681b ldr r3, [r3, #0]
  51802. 8015974: 693a ldr r2, [r7, #16]
  51803. 8015976: 429a cmp r2, r3
  51804. 8015978: d349 bcc.n 8015a0e <xTaskIncrementTick+0x10a>
  51805. {
  51806. for( ;; )
  51807. {
  51808. if( listLIST_IS_EMPTY( pxDelayedTaskList ) != pdFALSE )
  51809. 801597a: 4b36 ldr r3, [pc, #216] @ (8015a54 <xTaskIncrementTick+0x150>)
  51810. 801597c: 681b ldr r3, [r3, #0]
  51811. 801597e: 681b ldr r3, [r3, #0]
  51812. 8015980: 2b00 cmp r3, #0
  51813. 8015982: d104 bne.n 801598e <xTaskIncrementTick+0x8a>
  51814. /* The delayed list is empty. Set xNextTaskUnblockTime
  51815. to the maximum possible value so it is extremely
  51816. unlikely that the
  51817. if( xTickCount >= xNextTaskUnblockTime ) test will pass
  51818. next time through. */
  51819. xNextTaskUnblockTime = portMAX_DELAY; /*lint !e961 MISRA exception as the casts are only redundant for some ports. */
  51820. 8015984: 4b36 ldr r3, [pc, #216] @ (8015a60 <xTaskIncrementTick+0x15c>)
  51821. 8015986: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
  51822. 801598a: 601a str r2, [r3, #0]
  51823. break;
  51824. 801598c: e03f b.n 8015a0e <xTaskIncrementTick+0x10a>
  51825. {
  51826. /* The delayed list is not empty, get the value of the
  51827. item at the head of the delayed list. This is the time
  51828. at which the task at the head of the delayed list must
  51829. be removed from the Blocked state. */
  51830. pxTCB = listGET_OWNER_OF_HEAD_ENTRY( pxDelayedTaskList ); /*lint !e9079 void * is used as this macro is used with timers and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */
  51831. 801598e: 4b31 ldr r3, [pc, #196] @ (8015a54 <xTaskIncrementTick+0x150>)
  51832. 8015990: 681b ldr r3, [r3, #0]
  51833. 8015992: 68db ldr r3, [r3, #12]
  51834. 8015994: 68db ldr r3, [r3, #12]
  51835. 8015996: 60bb str r3, [r7, #8]
  51836. xItemValue = listGET_LIST_ITEM_VALUE( &( pxTCB->xStateListItem ) );
  51837. 8015998: 68bb ldr r3, [r7, #8]
  51838. 801599a: 685b ldr r3, [r3, #4]
  51839. 801599c: 607b str r3, [r7, #4]
  51840. if( xConstTickCount < xItemValue )
  51841. 801599e: 693a ldr r2, [r7, #16]
  51842. 80159a0: 687b ldr r3, [r7, #4]
  51843. 80159a2: 429a cmp r2, r3
  51844. 80159a4: d203 bcs.n 80159ae <xTaskIncrementTick+0xaa>
  51845. /* It is not time to unblock this item yet, but the
  51846. item value is the time at which the task at the head
  51847. of the blocked list must be removed from the Blocked
  51848. state - so record the item value in
  51849. xNextTaskUnblockTime. */
  51850. xNextTaskUnblockTime = xItemValue;
  51851. 80159a6: 4a2e ldr r2, [pc, #184] @ (8015a60 <xTaskIncrementTick+0x15c>)
  51852. 80159a8: 687b ldr r3, [r7, #4]
  51853. 80159aa: 6013 str r3, [r2, #0]
  51854. break; /*lint !e9011 Code structure here is deedmed easier to understand with multiple breaks. */
  51855. 80159ac: e02f b.n 8015a0e <xTaskIncrementTick+0x10a>
  51856. {
  51857. mtCOVERAGE_TEST_MARKER();
  51858. }
  51859. /* It is time to remove the item from the Blocked state. */
  51860. ( void ) uxListRemove( &( pxTCB->xStateListItem ) );
  51861. 80159ae: 68bb ldr r3, [r7, #8]
  51862. 80159b0: 3304 adds r3, #4
  51863. 80159b2: 4618 mov r0, r3
  51864. 80159b4: f7fe fb06 bl 8013fc4 <uxListRemove>
  51865. /* Is the task waiting on an event also? If so remove
  51866. it from the event list. */
  51867. if( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) != NULL )
  51868. 80159b8: 68bb ldr r3, [r7, #8]
  51869. 80159ba: 6a9b ldr r3, [r3, #40] @ 0x28
  51870. 80159bc: 2b00 cmp r3, #0
  51871. 80159be: d004 beq.n 80159ca <xTaskIncrementTick+0xc6>
  51872. {
  51873. ( void ) uxListRemove( &( pxTCB->xEventListItem ) );
  51874. 80159c0: 68bb ldr r3, [r7, #8]
  51875. 80159c2: 3318 adds r3, #24
  51876. 80159c4: 4618 mov r0, r3
  51877. 80159c6: f7fe fafd bl 8013fc4 <uxListRemove>
  51878. mtCOVERAGE_TEST_MARKER();
  51879. }
  51880. /* Place the unblocked task into the appropriate ready
  51881. list. */
  51882. prvAddTaskToReadyList( pxTCB );
  51883. 80159ca: 68bb ldr r3, [r7, #8]
  51884. 80159cc: 6ada ldr r2, [r3, #44] @ 0x2c
  51885. 80159ce: 4b25 ldr r3, [pc, #148] @ (8015a64 <xTaskIncrementTick+0x160>)
  51886. 80159d0: 681b ldr r3, [r3, #0]
  51887. 80159d2: 429a cmp r2, r3
  51888. 80159d4: d903 bls.n 80159de <xTaskIncrementTick+0xda>
  51889. 80159d6: 68bb ldr r3, [r7, #8]
  51890. 80159d8: 6adb ldr r3, [r3, #44] @ 0x2c
  51891. 80159da: 4a22 ldr r2, [pc, #136] @ (8015a64 <xTaskIncrementTick+0x160>)
  51892. 80159dc: 6013 str r3, [r2, #0]
  51893. 80159de: 68bb ldr r3, [r7, #8]
  51894. 80159e0: 6ada ldr r2, [r3, #44] @ 0x2c
  51895. 80159e2: 4613 mov r3, r2
  51896. 80159e4: 009b lsls r3, r3, #2
  51897. 80159e6: 4413 add r3, r2
  51898. 80159e8: 009b lsls r3, r3, #2
  51899. 80159ea: 4a1f ldr r2, [pc, #124] @ (8015a68 <xTaskIncrementTick+0x164>)
  51900. 80159ec: 441a add r2, r3
  51901. 80159ee: 68bb ldr r3, [r7, #8]
  51902. 80159f0: 3304 adds r3, #4
  51903. 80159f2: 4619 mov r1, r3
  51904. 80159f4: 4610 mov r0, r2
  51905. 80159f6: f7fe fa88 bl 8013f0a <vListInsertEnd>
  51906. {
  51907. /* Preemption is on, but a context switch should
  51908. only be performed if the unblocked task has a
  51909. priority that is equal to or higher than the
  51910. currently executing task. */
  51911. if( pxTCB->uxPriority >= pxCurrentTCB->uxPriority )
  51912. 80159fa: 68bb ldr r3, [r7, #8]
  51913. 80159fc: 6ada ldr r2, [r3, #44] @ 0x2c
  51914. 80159fe: 4b1b ldr r3, [pc, #108] @ (8015a6c <xTaskIncrementTick+0x168>)
  51915. 8015a00: 681b ldr r3, [r3, #0]
  51916. 8015a02: 6adb ldr r3, [r3, #44] @ 0x2c
  51917. 8015a04: 429a cmp r2, r3
  51918. 8015a06: d3b8 bcc.n 801597a <xTaskIncrementTick+0x76>
  51919. {
  51920. xSwitchRequired = pdTRUE;
  51921. 8015a08: 2301 movs r3, #1
  51922. 8015a0a: 617b str r3, [r7, #20]
  51923. if( listLIST_IS_EMPTY( pxDelayedTaskList ) != pdFALSE )
  51924. 8015a0c: e7b5 b.n 801597a <xTaskIncrementTick+0x76>
  51925. /* Tasks of equal priority to the currently running task will share
  51926. processing time (time slice) if preemption is on, and the application
  51927. writer has not explicitly turned time slicing off. */
  51928. #if ( ( configUSE_PREEMPTION == 1 ) && ( configUSE_TIME_SLICING == 1 ) )
  51929. {
  51930. if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ pxCurrentTCB->uxPriority ] ) ) > ( UBaseType_t ) 1 )
  51931. 8015a0e: 4b17 ldr r3, [pc, #92] @ (8015a6c <xTaskIncrementTick+0x168>)
  51932. 8015a10: 681b ldr r3, [r3, #0]
  51933. 8015a12: 6ada ldr r2, [r3, #44] @ 0x2c
  51934. 8015a14: 4914 ldr r1, [pc, #80] @ (8015a68 <xTaskIncrementTick+0x164>)
  51935. 8015a16: 4613 mov r3, r2
  51936. 8015a18: 009b lsls r3, r3, #2
  51937. 8015a1a: 4413 add r3, r2
  51938. 8015a1c: 009b lsls r3, r3, #2
  51939. 8015a1e: 440b add r3, r1
  51940. 8015a20: 681b ldr r3, [r3, #0]
  51941. 8015a22: 2b01 cmp r3, #1
  51942. 8015a24: d901 bls.n 8015a2a <xTaskIncrementTick+0x126>
  51943. {
  51944. xSwitchRequired = pdTRUE;
  51945. 8015a26: 2301 movs r3, #1
  51946. 8015a28: 617b str r3, [r7, #20]
  51947. }
  51948. #endif /* configUSE_TICK_HOOK */
  51949. #if ( configUSE_PREEMPTION == 1 )
  51950. {
  51951. if( xYieldPending != pdFALSE )
  51952. 8015a2a: 4b11 ldr r3, [pc, #68] @ (8015a70 <xTaskIncrementTick+0x16c>)
  51953. 8015a2c: 681b ldr r3, [r3, #0]
  51954. 8015a2e: 2b00 cmp r3, #0
  51955. 8015a30: d007 beq.n 8015a42 <xTaskIncrementTick+0x13e>
  51956. {
  51957. xSwitchRequired = pdTRUE;
  51958. 8015a32: 2301 movs r3, #1
  51959. 8015a34: 617b str r3, [r7, #20]
  51960. 8015a36: e004 b.n 8015a42 <xTaskIncrementTick+0x13e>
  51961. }
  51962. #endif /* configUSE_PREEMPTION */
  51963. }
  51964. else
  51965. {
  51966. ++xPendedTicks;
  51967. 8015a38: 4b0e ldr r3, [pc, #56] @ (8015a74 <xTaskIncrementTick+0x170>)
  51968. 8015a3a: 681b ldr r3, [r3, #0]
  51969. 8015a3c: 3301 adds r3, #1
  51970. 8015a3e: 4a0d ldr r2, [pc, #52] @ (8015a74 <xTaskIncrementTick+0x170>)
  51971. 8015a40: 6013 str r3, [r2, #0]
  51972. vApplicationTickHook();
  51973. }
  51974. #endif
  51975. }
  51976. return xSwitchRequired;
  51977. 8015a42: 697b ldr r3, [r7, #20]
  51978. }
  51979. 8015a44: 4618 mov r0, r3
  51980. 8015a46: 3718 adds r7, #24
  51981. 8015a48: 46bd mov sp, r7
  51982. 8015a4a: bd80 pop {r7, pc}
  51983. 8015a4c: 24002b3c .word 0x24002b3c
  51984. 8015a50: 24002b18 .word 0x24002b18
  51985. 8015a54: 24002acc .word 0x24002acc
  51986. 8015a58: 24002ad0 .word 0x24002ad0
  51987. 8015a5c: 24002b2c .word 0x24002b2c
  51988. 8015a60: 24002b34 .word 0x24002b34
  51989. 8015a64: 24002b1c .word 0x24002b1c
  51990. 8015a68: 24002644 .word 0x24002644
  51991. 8015a6c: 24002640 .word 0x24002640
  51992. 8015a70: 24002b28 .word 0x24002b28
  51993. 8015a74: 24002b24 .word 0x24002b24
  51994. 08015a78 <vTaskSwitchContext>:
  51995. #endif /* configUSE_APPLICATION_TASK_TAG */
  51996. /*-----------------------------------------------------------*/
  51997. void vTaskSwitchContext( void )
  51998. {
  51999. 8015a78: b580 push {r7, lr}
  52000. 8015a7a: b084 sub sp, #16
  52001. 8015a7c: af00 add r7, sp, #0
  52002. if( uxSchedulerSuspended != ( UBaseType_t ) pdFALSE )
  52003. 8015a7e: 4b32 ldr r3, [pc, #200] @ (8015b48 <vTaskSwitchContext+0xd0>)
  52004. 8015a80: 681b ldr r3, [r3, #0]
  52005. 8015a82: 2b00 cmp r3, #0
  52006. 8015a84: d003 beq.n 8015a8e <vTaskSwitchContext+0x16>
  52007. {
  52008. /* The scheduler is currently suspended - do not allow a context
  52009. switch. */
  52010. xYieldPending = pdTRUE;
  52011. 8015a86: 4b31 ldr r3, [pc, #196] @ (8015b4c <vTaskSwitchContext+0xd4>)
  52012. 8015a88: 2201 movs r2, #1
  52013. 8015a8a: 601a str r2, [r3, #0]
  52014. for additional information. */
  52015. _impure_ptr = &( pxCurrentTCB->xNewLib_reent );
  52016. }
  52017. #endif /* configUSE_NEWLIB_REENTRANT */
  52018. }
  52019. }
  52020. 8015a8c: e058 b.n 8015b40 <vTaskSwitchContext+0xc8>
  52021. xYieldPending = pdFALSE;
  52022. 8015a8e: 4b2f ldr r3, [pc, #188] @ (8015b4c <vTaskSwitchContext+0xd4>)
  52023. 8015a90: 2200 movs r2, #0
  52024. 8015a92: 601a str r2, [r3, #0]
  52025. taskCHECK_FOR_STACK_OVERFLOW();
  52026. 8015a94: 4b2e ldr r3, [pc, #184] @ (8015b50 <vTaskSwitchContext+0xd8>)
  52027. 8015a96: 681b ldr r3, [r3, #0]
  52028. 8015a98: 681a ldr r2, [r3, #0]
  52029. 8015a9a: 4b2d ldr r3, [pc, #180] @ (8015b50 <vTaskSwitchContext+0xd8>)
  52030. 8015a9c: 681b ldr r3, [r3, #0]
  52031. 8015a9e: 6b1b ldr r3, [r3, #48] @ 0x30
  52032. 8015aa0: 429a cmp r2, r3
  52033. 8015aa2: d808 bhi.n 8015ab6 <vTaskSwitchContext+0x3e>
  52034. 8015aa4: 4b2a ldr r3, [pc, #168] @ (8015b50 <vTaskSwitchContext+0xd8>)
  52035. 8015aa6: 681a ldr r2, [r3, #0]
  52036. 8015aa8: 4b29 ldr r3, [pc, #164] @ (8015b50 <vTaskSwitchContext+0xd8>)
  52037. 8015aaa: 681b ldr r3, [r3, #0]
  52038. 8015aac: 3334 adds r3, #52 @ 0x34
  52039. 8015aae: 4619 mov r1, r3
  52040. 8015ab0: 4610 mov r0, r2
  52041. 8015ab2: f7ea fddd bl 8000670 <vApplicationStackOverflowHook>
  52042. taskSELECT_HIGHEST_PRIORITY_TASK(); /*lint !e9079 void * is used as this macro is used with timers and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */
  52043. 8015ab6: 4b27 ldr r3, [pc, #156] @ (8015b54 <vTaskSwitchContext+0xdc>)
  52044. 8015ab8: 681b ldr r3, [r3, #0]
  52045. 8015aba: 60fb str r3, [r7, #12]
  52046. 8015abc: e011 b.n 8015ae2 <vTaskSwitchContext+0x6a>
  52047. 8015abe: 68fb ldr r3, [r7, #12]
  52048. 8015ac0: 2b00 cmp r3, #0
  52049. 8015ac2: d10b bne.n 8015adc <vTaskSwitchContext+0x64>
  52050. __asm volatile
  52051. 8015ac4: f04f 0350 mov.w r3, #80 @ 0x50
  52052. 8015ac8: f383 8811 msr BASEPRI, r3
  52053. 8015acc: f3bf 8f6f isb sy
  52054. 8015ad0: f3bf 8f4f dsb sy
  52055. 8015ad4: 607b str r3, [r7, #4]
  52056. }
  52057. 8015ad6: bf00 nop
  52058. 8015ad8: bf00 nop
  52059. 8015ada: e7fd b.n 8015ad8 <vTaskSwitchContext+0x60>
  52060. 8015adc: 68fb ldr r3, [r7, #12]
  52061. 8015ade: 3b01 subs r3, #1
  52062. 8015ae0: 60fb str r3, [r7, #12]
  52063. 8015ae2: 491d ldr r1, [pc, #116] @ (8015b58 <vTaskSwitchContext+0xe0>)
  52064. 8015ae4: 68fa ldr r2, [r7, #12]
  52065. 8015ae6: 4613 mov r3, r2
  52066. 8015ae8: 009b lsls r3, r3, #2
  52067. 8015aea: 4413 add r3, r2
  52068. 8015aec: 009b lsls r3, r3, #2
  52069. 8015aee: 440b add r3, r1
  52070. 8015af0: 681b ldr r3, [r3, #0]
  52071. 8015af2: 2b00 cmp r3, #0
  52072. 8015af4: d0e3 beq.n 8015abe <vTaskSwitchContext+0x46>
  52073. 8015af6: 68fa ldr r2, [r7, #12]
  52074. 8015af8: 4613 mov r3, r2
  52075. 8015afa: 009b lsls r3, r3, #2
  52076. 8015afc: 4413 add r3, r2
  52077. 8015afe: 009b lsls r3, r3, #2
  52078. 8015b00: 4a15 ldr r2, [pc, #84] @ (8015b58 <vTaskSwitchContext+0xe0>)
  52079. 8015b02: 4413 add r3, r2
  52080. 8015b04: 60bb str r3, [r7, #8]
  52081. 8015b06: 68bb ldr r3, [r7, #8]
  52082. 8015b08: 685b ldr r3, [r3, #4]
  52083. 8015b0a: 685a ldr r2, [r3, #4]
  52084. 8015b0c: 68bb ldr r3, [r7, #8]
  52085. 8015b0e: 605a str r2, [r3, #4]
  52086. 8015b10: 68bb ldr r3, [r7, #8]
  52087. 8015b12: 685a ldr r2, [r3, #4]
  52088. 8015b14: 68bb ldr r3, [r7, #8]
  52089. 8015b16: 3308 adds r3, #8
  52090. 8015b18: 429a cmp r2, r3
  52091. 8015b1a: d104 bne.n 8015b26 <vTaskSwitchContext+0xae>
  52092. 8015b1c: 68bb ldr r3, [r7, #8]
  52093. 8015b1e: 685b ldr r3, [r3, #4]
  52094. 8015b20: 685a ldr r2, [r3, #4]
  52095. 8015b22: 68bb ldr r3, [r7, #8]
  52096. 8015b24: 605a str r2, [r3, #4]
  52097. 8015b26: 68bb ldr r3, [r7, #8]
  52098. 8015b28: 685b ldr r3, [r3, #4]
  52099. 8015b2a: 68db ldr r3, [r3, #12]
  52100. 8015b2c: 4a08 ldr r2, [pc, #32] @ (8015b50 <vTaskSwitchContext+0xd8>)
  52101. 8015b2e: 6013 str r3, [r2, #0]
  52102. 8015b30: 4a08 ldr r2, [pc, #32] @ (8015b54 <vTaskSwitchContext+0xdc>)
  52103. 8015b32: 68fb ldr r3, [r7, #12]
  52104. 8015b34: 6013 str r3, [r2, #0]
  52105. _impure_ptr = &( pxCurrentTCB->xNewLib_reent );
  52106. 8015b36: 4b06 ldr r3, [pc, #24] @ (8015b50 <vTaskSwitchContext+0xd8>)
  52107. 8015b38: 681b ldr r3, [r3, #0]
  52108. 8015b3a: 3354 adds r3, #84 @ 0x54
  52109. 8015b3c: 4a07 ldr r2, [pc, #28] @ (8015b5c <vTaskSwitchContext+0xe4>)
  52110. 8015b3e: 6013 str r3, [r2, #0]
  52111. }
  52112. 8015b40: bf00 nop
  52113. 8015b42: 3710 adds r7, #16
  52114. 8015b44: 46bd mov sp, r7
  52115. 8015b46: bd80 pop {r7, pc}
  52116. 8015b48: 24002b3c .word 0x24002b3c
  52117. 8015b4c: 24002b28 .word 0x24002b28
  52118. 8015b50: 24002640 .word 0x24002640
  52119. 8015b54: 24002b1c .word 0x24002b1c
  52120. 8015b58: 24002644 .word 0x24002644
  52121. 8015b5c: 24000054 .word 0x24000054
  52122. 08015b60 <vTaskPlaceOnEventList>:
  52123. /*-----------------------------------------------------------*/
  52124. void vTaskPlaceOnEventList( List_t * const pxEventList, const TickType_t xTicksToWait )
  52125. {
  52126. 8015b60: b580 push {r7, lr}
  52127. 8015b62: b084 sub sp, #16
  52128. 8015b64: af00 add r7, sp, #0
  52129. 8015b66: 6078 str r0, [r7, #4]
  52130. 8015b68: 6039 str r1, [r7, #0]
  52131. configASSERT( pxEventList );
  52132. 8015b6a: 687b ldr r3, [r7, #4]
  52133. 8015b6c: 2b00 cmp r3, #0
  52134. 8015b6e: d10b bne.n 8015b88 <vTaskPlaceOnEventList+0x28>
  52135. __asm volatile
  52136. 8015b70: f04f 0350 mov.w r3, #80 @ 0x50
  52137. 8015b74: f383 8811 msr BASEPRI, r3
  52138. 8015b78: f3bf 8f6f isb sy
  52139. 8015b7c: f3bf 8f4f dsb sy
  52140. 8015b80: 60fb str r3, [r7, #12]
  52141. }
  52142. 8015b82: bf00 nop
  52143. 8015b84: bf00 nop
  52144. 8015b86: e7fd b.n 8015b84 <vTaskPlaceOnEventList+0x24>
  52145. /* Place the event list item of the TCB in the appropriate event list.
  52146. This is placed in the list in priority order so the highest priority task
  52147. is the first to be woken by the event. The queue that contains the event
  52148. list is locked, preventing simultaneous access from interrupts. */
  52149. vListInsert( pxEventList, &( pxCurrentTCB->xEventListItem ) );
  52150. 8015b88: 4b07 ldr r3, [pc, #28] @ (8015ba8 <vTaskPlaceOnEventList+0x48>)
  52151. 8015b8a: 681b ldr r3, [r3, #0]
  52152. 8015b8c: 3318 adds r3, #24
  52153. 8015b8e: 4619 mov r1, r3
  52154. 8015b90: 6878 ldr r0, [r7, #4]
  52155. 8015b92: f7fe f9de bl 8013f52 <vListInsert>
  52156. prvAddCurrentTaskToDelayedList( xTicksToWait, pdTRUE );
  52157. 8015b96: 2101 movs r1, #1
  52158. 8015b98: 6838 ldr r0, [r7, #0]
  52159. 8015b9a: f000 fded bl 8016778 <prvAddCurrentTaskToDelayedList>
  52160. }
  52161. 8015b9e: bf00 nop
  52162. 8015ba0: 3710 adds r7, #16
  52163. 8015ba2: 46bd mov sp, r7
  52164. 8015ba4: bd80 pop {r7, pc}
  52165. 8015ba6: bf00 nop
  52166. 8015ba8: 24002640 .word 0x24002640
  52167. 08015bac <vTaskPlaceOnEventListRestricted>:
  52168. /*-----------------------------------------------------------*/
  52169. #if( configUSE_TIMERS == 1 )
  52170. void vTaskPlaceOnEventListRestricted( List_t * const pxEventList, TickType_t xTicksToWait, const BaseType_t xWaitIndefinitely )
  52171. {
  52172. 8015bac: b580 push {r7, lr}
  52173. 8015bae: b086 sub sp, #24
  52174. 8015bb0: af00 add r7, sp, #0
  52175. 8015bb2: 60f8 str r0, [r7, #12]
  52176. 8015bb4: 60b9 str r1, [r7, #8]
  52177. 8015bb6: 607a str r2, [r7, #4]
  52178. configASSERT( pxEventList );
  52179. 8015bb8: 68fb ldr r3, [r7, #12]
  52180. 8015bba: 2b00 cmp r3, #0
  52181. 8015bbc: d10b bne.n 8015bd6 <vTaskPlaceOnEventListRestricted+0x2a>
  52182. __asm volatile
  52183. 8015bbe: f04f 0350 mov.w r3, #80 @ 0x50
  52184. 8015bc2: f383 8811 msr BASEPRI, r3
  52185. 8015bc6: f3bf 8f6f isb sy
  52186. 8015bca: f3bf 8f4f dsb sy
  52187. 8015bce: 617b str r3, [r7, #20]
  52188. }
  52189. 8015bd0: bf00 nop
  52190. 8015bd2: bf00 nop
  52191. 8015bd4: e7fd b.n 8015bd2 <vTaskPlaceOnEventListRestricted+0x26>
  52192. /* Place the event list item of the TCB in the appropriate event list.
  52193. In this case it is assume that this is the only task that is going to
  52194. be waiting on this event list, so the faster vListInsertEnd() function
  52195. can be used in place of vListInsert. */
  52196. vListInsertEnd( pxEventList, &( pxCurrentTCB->xEventListItem ) );
  52197. 8015bd6: 4b0a ldr r3, [pc, #40] @ (8015c00 <vTaskPlaceOnEventListRestricted+0x54>)
  52198. 8015bd8: 681b ldr r3, [r3, #0]
  52199. 8015bda: 3318 adds r3, #24
  52200. 8015bdc: 4619 mov r1, r3
  52201. 8015bde: 68f8 ldr r0, [r7, #12]
  52202. 8015be0: f7fe f993 bl 8013f0a <vListInsertEnd>
  52203. /* If the task should block indefinitely then set the block time to a
  52204. value that will be recognised as an indefinite delay inside the
  52205. prvAddCurrentTaskToDelayedList() function. */
  52206. if( xWaitIndefinitely != pdFALSE )
  52207. 8015be4: 687b ldr r3, [r7, #4]
  52208. 8015be6: 2b00 cmp r3, #0
  52209. 8015be8: d002 beq.n 8015bf0 <vTaskPlaceOnEventListRestricted+0x44>
  52210. {
  52211. xTicksToWait = portMAX_DELAY;
  52212. 8015bea: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  52213. 8015bee: 60bb str r3, [r7, #8]
  52214. }
  52215. traceTASK_DELAY_UNTIL( ( xTickCount + xTicksToWait ) );
  52216. prvAddCurrentTaskToDelayedList( xTicksToWait, xWaitIndefinitely );
  52217. 8015bf0: 6879 ldr r1, [r7, #4]
  52218. 8015bf2: 68b8 ldr r0, [r7, #8]
  52219. 8015bf4: f000 fdc0 bl 8016778 <prvAddCurrentTaskToDelayedList>
  52220. }
  52221. 8015bf8: bf00 nop
  52222. 8015bfa: 3718 adds r7, #24
  52223. 8015bfc: 46bd mov sp, r7
  52224. 8015bfe: bd80 pop {r7, pc}
  52225. 8015c00: 24002640 .word 0x24002640
  52226. 08015c04 <xTaskRemoveFromEventList>:
  52227. #endif /* configUSE_TIMERS */
  52228. /*-----------------------------------------------------------*/
  52229. BaseType_t xTaskRemoveFromEventList( const List_t * const pxEventList )
  52230. {
  52231. 8015c04: b580 push {r7, lr}
  52232. 8015c06: b086 sub sp, #24
  52233. 8015c08: af00 add r7, sp, #0
  52234. 8015c0a: 6078 str r0, [r7, #4]
  52235. get called - the lock count on the queue will get modified instead. This
  52236. means exclusive access to the event list is guaranteed here.
  52237. This function assumes that a check has already been made to ensure that
  52238. pxEventList is not empty. */
  52239. pxUnblockedTCB = listGET_OWNER_OF_HEAD_ENTRY( pxEventList ); /*lint !e9079 void * is used as this macro is used with timers and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */
  52240. 8015c0c: 687b ldr r3, [r7, #4]
  52241. 8015c0e: 68db ldr r3, [r3, #12]
  52242. 8015c10: 68db ldr r3, [r3, #12]
  52243. 8015c12: 613b str r3, [r7, #16]
  52244. configASSERT( pxUnblockedTCB );
  52245. 8015c14: 693b ldr r3, [r7, #16]
  52246. 8015c16: 2b00 cmp r3, #0
  52247. 8015c18: d10b bne.n 8015c32 <xTaskRemoveFromEventList+0x2e>
  52248. __asm volatile
  52249. 8015c1a: f04f 0350 mov.w r3, #80 @ 0x50
  52250. 8015c1e: f383 8811 msr BASEPRI, r3
  52251. 8015c22: f3bf 8f6f isb sy
  52252. 8015c26: f3bf 8f4f dsb sy
  52253. 8015c2a: 60fb str r3, [r7, #12]
  52254. }
  52255. 8015c2c: bf00 nop
  52256. 8015c2e: bf00 nop
  52257. 8015c30: e7fd b.n 8015c2e <xTaskRemoveFromEventList+0x2a>
  52258. ( void ) uxListRemove( &( pxUnblockedTCB->xEventListItem ) );
  52259. 8015c32: 693b ldr r3, [r7, #16]
  52260. 8015c34: 3318 adds r3, #24
  52261. 8015c36: 4618 mov r0, r3
  52262. 8015c38: f7fe f9c4 bl 8013fc4 <uxListRemove>
  52263. if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE )
  52264. 8015c3c: 4b1d ldr r3, [pc, #116] @ (8015cb4 <xTaskRemoveFromEventList+0xb0>)
  52265. 8015c3e: 681b ldr r3, [r3, #0]
  52266. 8015c40: 2b00 cmp r3, #0
  52267. 8015c42: d11d bne.n 8015c80 <xTaskRemoveFromEventList+0x7c>
  52268. {
  52269. ( void ) uxListRemove( &( pxUnblockedTCB->xStateListItem ) );
  52270. 8015c44: 693b ldr r3, [r7, #16]
  52271. 8015c46: 3304 adds r3, #4
  52272. 8015c48: 4618 mov r0, r3
  52273. 8015c4a: f7fe f9bb bl 8013fc4 <uxListRemove>
  52274. prvAddTaskToReadyList( pxUnblockedTCB );
  52275. 8015c4e: 693b ldr r3, [r7, #16]
  52276. 8015c50: 6ada ldr r2, [r3, #44] @ 0x2c
  52277. 8015c52: 4b19 ldr r3, [pc, #100] @ (8015cb8 <xTaskRemoveFromEventList+0xb4>)
  52278. 8015c54: 681b ldr r3, [r3, #0]
  52279. 8015c56: 429a cmp r2, r3
  52280. 8015c58: d903 bls.n 8015c62 <xTaskRemoveFromEventList+0x5e>
  52281. 8015c5a: 693b ldr r3, [r7, #16]
  52282. 8015c5c: 6adb ldr r3, [r3, #44] @ 0x2c
  52283. 8015c5e: 4a16 ldr r2, [pc, #88] @ (8015cb8 <xTaskRemoveFromEventList+0xb4>)
  52284. 8015c60: 6013 str r3, [r2, #0]
  52285. 8015c62: 693b ldr r3, [r7, #16]
  52286. 8015c64: 6ada ldr r2, [r3, #44] @ 0x2c
  52287. 8015c66: 4613 mov r3, r2
  52288. 8015c68: 009b lsls r3, r3, #2
  52289. 8015c6a: 4413 add r3, r2
  52290. 8015c6c: 009b lsls r3, r3, #2
  52291. 8015c6e: 4a13 ldr r2, [pc, #76] @ (8015cbc <xTaskRemoveFromEventList+0xb8>)
  52292. 8015c70: 441a add r2, r3
  52293. 8015c72: 693b ldr r3, [r7, #16]
  52294. 8015c74: 3304 adds r3, #4
  52295. 8015c76: 4619 mov r1, r3
  52296. 8015c78: 4610 mov r0, r2
  52297. 8015c7a: f7fe f946 bl 8013f0a <vListInsertEnd>
  52298. 8015c7e: e005 b.n 8015c8c <xTaskRemoveFromEventList+0x88>
  52299. }
  52300. else
  52301. {
  52302. /* The delayed and ready lists cannot be accessed, so hold this task
  52303. pending until the scheduler is resumed. */
  52304. vListInsertEnd( &( xPendingReadyList ), &( pxUnblockedTCB->xEventListItem ) );
  52305. 8015c80: 693b ldr r3, [r7, #16]
  52306. 8015c82: 3318 adds r3, #24
  52307. 8015c84: 4619 mov r1, r3
  52308. 8015c86: 480e ldr r0, [pc, #56] @ (8015cc0 <xTaskRemoveFromEventList+0xbc>)
  52309. 8015c88: f7fe f93f bl 8013f0a <vListInsertEnd>
  52310. }
  52311. if( pxUnblockedTCB->uxPriority > pxCurrentTCB->uxPriority )
  52312. 8015c8c: 693b ldr r3, [r7, #16]
  52313. 8015c8e: 6ada ldr r2, [r3, #44] @ 0x2c
  52314. 8015c90: 4b0c ldr r3, [pc, #48] @ (8015cc4 <xTaskRemoveFromEventList+0xc0>)
  52315. 8015c92: 681b ldr r3, [r3, #0]
  52316. 8015c94: 6adb ldr r3, [r3, #44] @ 0x2c
  52317. 8015c96: 429a cmp r2, r3
  52318. 8015c98: d905 bls.n 8015ca6 <xTaskRemoveFromEventList+0xa2>
  52319. {
  52320. /* Return true if the task removed from the event list has a higher
  52321. priority than the calling task. This allows the calling task to know if
  52322. it should force a context switch now. */
  52323. xReturn = pdTRUE;
  52324. 8015c9a: 2301 movs r3, #1
  52325. 8015c9c: 617b str r3, [r7, #20]
  52326. /* Mark that a yield is pending in case the user is not using the
  52327. "xHigherPriorityTaskWoken" parameter to an ISR safe FreeRTOS function. */
  52328. xYieldPending = pdTRUE;
  52329. 8015c9e: 4b0a ldr r3, [pc, #40] @ (8015cc8 <xTaskRemoveFromEventList+0xc4>)
  52330. 8015ca0: 2201 movs r2, #1
  52331. 8015ca2: 601a str r2, [r3, #0]
  52332. 8015ca4: e001 b.n 8015caa <xTaskRemoveFromEventList+0xa6>
  52333. }
  52334. else
  52335. {
  52336. xReturn = pdFALSE;
  52337. 8015ca6: 2300 movs r3, #0
  52338. 8015ca8: 617b str r3, [r7, #20]
  52339. }
  52340. return xReturn;
  52341. 8015caa: 697b ldr r3, [r7, #20]
  52342. }
  52343. 8015cac: 4618 mov r0, r3
  52344. 8015cae: 3718 adds r7, #24
  52345. 8015cb0: 46bd mov sp, r7
  52346. 8015cb2: bd80 pop {r7, pc}
  52347. 8015cb4: 24002b3c .word 0x24002b3c
  52348. 8015cb8: 24002b1c .word 0x24002b1c
  52349. 8015cbc: 24002644 .word 0x24002644
  52350. 8015cc0: 24002ad4 .word 0x24002ad4
  52351. 8015cc4: 24002640 .word 0x24002640
  52352. 8015cc8: 24002b28 .word 0x24002b28
  52353. 08015ccc <vTaskSetTimeOutState>:
  52354. }
  52355. }
  52356. /*-----------------------------------------------------------*/
  52357. void vTaskSetTimeOutState( TimeOut_t * const pxTimeOut )
  52358. {
  52359. 8015ccc: b580 push {r7, lr}
  52360. 8015cce: b084 sub sp, #16
  52361. 8015cd0: af00 add r7, sp, #0
  52362. 8015cd2: 6078 str r0, [r7, #4]
  52363. configASSERT( pxTimeOut );
  52364. 8015cd4: 687b ldr r3, [r7, #4]
  52365. 8015cd6: 2b00 cmp r3, #0
  52366. 8015cd8: d10b bne.n 8015cf2 <vTaskSetTimeOutState+0x26>
  52367. __asm volatile
  52368. 8015cda: f04f 0350 mov.w r3, #80 @ 0x50
  52369. 8015cde: f383 8811 msr BASEPRI, r3
  52370. 8015ce2: f3bf 8f6f isb sy
  52371. 8015ce6: f3bf 8f4f dsb sy
  52372. 8015cea: 60fb str r3, [r7, #12]
  52373. }
  52374. 8015cec: bf00 nop
  52375. 8015cee: bf00 nop
  52376. 8015cf0: e7fd b.n 8015cee <vTaskSetTimeOutState+0x22>
  52377. taskENTER_CRITICAL();
  52378. 8015cf2: f001 fb09 bl 8017308 <vPortEnterCritical>
  52379. {
  52380. pxTimeOut->xOverflowCount = xNumOfOverflows;
  52381. 8015cf6: 4b07 ldr r3, [pc, #28] @ (8015d14 <vTaskSetTimeOutState+0x48>)
  52382. 8015cf8: 681a ldr r2, [r3, #0]
  52383. 8015cfa: 687b ldr r3, [r7, #4]
  52384. 8015cfc: 601a str r2, [r3, #0]
  52385. pxTimeOut->xTimeOnEntering = xTickCount;
  52386. 8015cfe: 4b06 ldr r3, [pc, #24] @ (8015d18 <vTaskSetTimeOutState+0x4c>)
  52387. 8015d00: 681a ldr r2, [r3, #0]
  52388. 8015d02: 687b ldr r3, [r7, #4]
  52389. 8015d04: 605a str r2, [r3, #4]
  52390. }
  52391. taskEXIT_CRITICAL();
  52392. 8015d06: f001 fb31 bl 801736c <vPortExitCritical>
  52393. }
  52394. 8015d0a: bf00 nop
  52395. 8015d0c: 3710 adds r7, #16
  52396. 8015d0e: 46bd mov sp, r7
  52397. 8015d10: bd80 pop {r7, pc}
  52398. 8015d12: bf00 nop
  52399. 8015d14: 24002b2c .word 0x24002b2c
  52400. 8015d18: 24002b18 .word 0x24002b18
  52401. 08015d1c <vTaskInternalSetTimeOutState>:
  52402. /*-----------------------------------------------------------*/
  52403. void vTaskInternalSetTimeOutState( TimeOut_t * const pxTimeOut )
  52404. {
  52405. 8015d1c: b480 push {r7}
  52406. 8015d1e: b083 sub sp, #12
  52407. 8015d20: af00 add r7, sp, #0
  52408. 8015d22: 6078 str r0, [r7, #4]
  52409. /* For internal use only as it does not use a critical section. */
  52410. pxTimeOut->xOverflowCount = xNumOfOverflows;
  52411. 8015d24: 4b06 ldr r3, [pc, #24] @ (8015d40 <vTaskInternalSetTimeOutState+0x24>)
  52412. 8015d26: 681a ldr r2, [r3, #0]
  52413. 8015d28: 687b ldr r3, [r7, #4]
  52414. 8015d2a: 601a str r2, [r3, #0]
  52415. pxTimeOut->xTimeOnEntering = xTickCount;
  52416. 8015d2c: 4b05 ldr r3, [pc, #20] @ (8015d44 <vTaskInternalSetTimeOutState+0x28>)
  52417. 8015d2e: 681a ldr r2, [r3, #0]
  52418. 8015d30: 687b ldr r3, [r7, #4]
  52419. 8015d32: 605a str r2, [r3, #4]
  52420. }
  52421. 8015d34: bf00 nop
  52422. 8015d36: 370c adds r7, #12
  52423. 8015d38: 46bd mov sp, r7
  52424. 8015d3a: f85d 7b04 ldr.w r7, [sp], #4
  52425. 8015d3e: 4770 bx lr
  52426. 8015d40: 24002b2c .word 0x24002b2c
  52427. 8015d44: 24002b18 .word 0x24002b18
  52428. 08015d48 <xTaskCheckForTimeOut>:
  52429. /*-----------------------------------------------------------*/
  52430. BaseType_t xTaskCheckForTimeOut( TimeOut_t * const pxTimeOut, TickType_t * const pxTicksToWait )
  52431. {
  52432. 8015d48: b580 push {r7, lr}
  52433. 8015d4a: b088 sub sp, #32
  52434. 8015d4c: af00 add r7, sp, #0
  52435. 8015d4e: 6078 str r0, [r7, #4]
  52436. 8015d50: 6039 str r1, [r7, #0]
  52437. BaseType_t xReturn;
  52438. configASSERT( pxTimeOut );
  52439. 8015d52: 687b ldr r3, [r7, #4]
  52440. 8015d54: 2b00 cmp r3, #0
  52441. 8015d56: d10b bne.n 8015d70 <xTaskCheckForTimeOut+0x28>
  52442. __asm volatile
  52443. 8015d58: f04f 0350 mov.w r3, #80 @ 0x50
  52444. 8015d5c: f383 8811 msr BASEPRI, r3
  52445. 8015d60: f3bf 8f6f isb sy
  52446. 8015d64: f3bf 8f4f dsb sy
  52447. 8015d68: 613b str r3, [r7, #16]
  52448. }
  52449. 8015d6a: bf00 nop
  52450. 8015d6c: bf00 nop
  52451. 8015d6e: e7fd b.n 8015d6c <xTaskCheckForTimeOut+0x24>
  52452. configASSERT( pxTicksToWait );
  52453. 8015d70: 683b ldr r3, [r7, #0]
  52454. 8015d72: 2b00 cmp r3, #0
  52455. 8015d74: d10b bne.n 8015d8e <xTaskCheckForTimeOut+0x46>
  52456. __asm volatile
  52457. 8015d76: f04f 0350 mov.w r3, #80 @ 0x50
  52458. 8015d7a: f383 8811 msr BASEPRI, r3
  52459. 8015d7e: f3bf 8f6f isb sy
  52460. 8015d82: f3bf 8f4f dsb sy
  52461. 8015d86: 60fb str r3, [r7, #12]
  52462. }
  52463. 8015d88: bf00 nop
  52464. 8015d8a: bf00 nop
  52465. 8015d8c: e7fd b.n 8015d8a <xTaskCheckForTimeOut+0x42>
  52466. taskENTER_CRITICAL();
  52467. 8015d8e: f001 fabb bl 8017308 <vPortEnterCritical>
  52468. {
  52469. /* Minor optimisation. The tick count cannot change in this block. */
  52470. const TickType_t xConstTickCount = xTickCount;
  52471. 8015d92: 4b1d ldr r3, [pc, #116] @ (8015e08 <xTaskCheckForTimeOut+0xc0>)
  52472. 8015d94: 681b ldr r3, [r3, #0]
  52473. 8015d96: 61bb str r3, [r7, #24]
  52474. const TickType_t xElapsedTime = xConstTickCount - pxTimeOut->xTimeOnEntering;
  52475. 8015d98: 687b ldr r3, [r7, #4]
  52476. 8015d9a: 685b ldr r3, [r3, #4]
  52477. 8015d9c: 69ba ldr r2, [r7, #24]
  52478. 8015d9e: 1ad3 subs r3, r2, r3
  52479. 8015da0: 617b str r3, [r7, #20]
  52480. }
  52481. else
  52482. #endif
  52483. #if ( INCLUDE_vTaskSuspend == 1 )
  52484. if( *pxTicksToWait == portMAX_DELAY )
  52485. 8015da2: 683b ldr r3, [r7, #0]
  52486. 8015da4: 681b ldr r3, [r3, #0]
  52487. 8015da6: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  52488. 8015daa: d102 bne.n 8015db2 <xTaskCheckForTimeOut+0x6a>
  52489. {
  52490. /* If INCLUDE_vTaskSuspend is set to 1 and the block time
  52491. specified is the maximum block time then the task should block
  52492. indefinitely, and therefore never time out. */
  52493. xReturn = pdFALSE;
  52494. 8015dac: 2300 movs r3, #0
  52495. 8015dae: 61fb str r3, [r7, #28]
  52496. 8015db0: e023 b.n 8015dfa <xTaskCheckForTimeOut+0xb2>
  52497. }
  52498. else
  52499. #endif
  52500. if( ( xNumOfOverflows != pxTimeOut->xOverflowCount ) && ( xConstTickCount >= pxTimeOut->xTimeOnEntering ) ) /*lint !e525 Indentation preferred as is to make code within pre-processor directives clearer. */
  52501. 8015db2: 687b ldr r3, [r7, #4]
  52502. 8015db4: 681a ldr r2, [r3, #0]
  52503. 8015db6: 4b15 ldr r3, [pc, #84] @ (8015e0c <xTaskCheckForTimeOut+0xc4>)
  52504. 8015db8: 681b ldr r3, [r3, #0]
  52505. 8015dba: 429a cmp r2, r3
  52506. 8015dbc: d007 beq.n 8015dce <xTaskCheckForTimeOut+0x86>
  52507. 8015dbe: 687b ldr r3, [r7, #4]
  52508. 8015dc0: 685b ldr r3, [r3, #4]
  52509. 8015dc2: 69ba ldr r2, [r7, #24]
  52510. 8015dc4: 429a cmp r2, r3
  52511. 8015dc6: d302 bcc.n 8015dce <xTaskCheckForTimeOut+0x86>
  52512. /* The tick count is greater than the time at which
  52513. vTaskSetTimeout() was called, but has also overflowed since
  52514. vTaskSetTimeOut() was called. It must have wrapped all the way
  52515. around and gone past again. This passed since vTaskSetTimeout()
  52516. was called. */
  52517. xReturn = pdTRUE;
  52518. 8015dc8: 2301 movs r3, #1
  52519. 8015dca: 61fb str r3, [r7, #28]
  52520. 8015dcc: e015 b.n 8015dfa <xTaskCheckForTimeOut+0xb2>
  52521. }
  52522. else if( xElapsedTime < *pxTicksToWait ) /*lint !e961 Explicit casting is only redundant with some compilers, whereas others require it to prevent integer conversion errors. */
  52523. 8015dce: 683b ldr r3, [r7, #0]
  52524. 8015dd0: 681b ldr r3, [r3, #0]
  52525. 8015dd2: 697a ldr r2, [r7, #20]
  52526. 8015dd4: 429a cmp r2, r3
  52527. 8015dd6: d20b bcs.n 8015df0 <xTaskCheckForTimeOut+0xa8>
  52528. {
  52529. /* Not a genuine timeout. Adjust parameters for time remaining. */
  52530. *pxTicksToWait -= xElapsedTime;
  52531. 8015dd8: 683b ldr r3, [r7, #0]
  52532. 8015dda: 681a ldr r2, [r3, #0]
  52533. 8015ddc: 697b ldr r3, [r7, #20]
  52534. 8015dde: 1ad2 subs r2, r2, r3
  52535. 8015de0: 683b ldr r3, [r7, #0]
  52536. 8015de2: 601a str r2, [r3, #0]
  52537. vTaskInternalSetTimeOutState( pxTimeOut );
  52538. 8015de4: 6878 ldr r0, [r7, #4]
  52539. 8015de6: f7ff ff99 bl 8015d1c <vTaskInternalSetTimeOutState>
  52540. xReturn = pdFALSE;
  52541. 8015dea: 2300 movs r3, #0
  52542. 8015dec: 61fb str r3, [r7, #28]
  52543. 8015dee: e004 b.n 8015dfa <xTaskCheckForTimeOut+0xb2>
  52544. }
  52545. else
  52546. {
  52547. *pxTicksToWait = 0;
  52548. 8015df0: 683b ldr r3, [r7, #0]
  52549. 8015df2: 2200 movs r2, #0
  52550. 8015df4: 601a str r2, [r3, #0]
  52551. xReturn = pdTRUE;
  52552. 8015df6: 2301 movs r3, #1
  52553. 8015df8: 61fb str r3, [r7, #28]
  52554. }
  52555. }
  52556. taskEXIT_CRITICAL();
  52557. 8015dfa: f001 fab7 bl 801736c <vPortExitCritical>
  52558. return xReturn;
  52559. 8015dfe: 69fb ldr r3, [r7, #28]
  52560. }
  52561. 8015e00: 4618 mov r0, r3
  52562. 8015e02: 3720 adds r7, #32
  52563. 8015e04: 46bd mov sp, r7
  52564. 8015e06: bd80 pop {r7, pc}
  52565. 8015e08: 24002b18 .word 0x24002b18
  52566. 8015e0c: 24002b2c .word 0x24002b2c
  52567. 08015e10 <vTaskMissedYield>:
  52568. /*-----------------------------------------------------------*/
  52569. void vTaskMissedYield( void )
  52570. {
  52571. 8015e10: b480 push {r7}
  52572. 8015e12: af00 add r7, sp, #0
  52573. xYieldPending = pdTRUE;
  52574. 8015e14: 4b03 ldr r3, [pc, #12] @ (8015e24 <vTaskMissedYield+0x14>)
  52575. 8015e16: 2201 movs r2, #1
  52576. 8015e18: 601a str r2, [r3, #0]
  52577. }
  52578. 8015e1a: bf00 nop
  52579. 8015e1c: 46bd mov sp, r7
  52580. 8015e1e: f85d 7b04 ldr.w r7, [sp], #4
  52581. 8015e22: 4770 bx lr
  52582. 8015e24: 24002b28 .word 0x24002b28
  52583. 08015e28 <prvIdleTask>:
  52584. *
  52585. * void prvIdleTask( void *pvParameters );
  52586. *
  52587. */
  52588. static portTASK_FUNCTION( prvIdleTask, pvParameters )
  52589. {
  52590. 8015e28: b580 push {r7, lr}
  52591. 8015e2a: b082 sub sp, #8
  52592. 8015e2c: af00 add r7, sp, #0
  52593. 8015e2e: 6078 str r0, [r7, #4]
  52594. for( ;; )
  52595. {
  52596. /* See if any tasks have deleted themselves - if so then the idle task
  52597. is responsible for freeing the deleted task's TCB and stack. */
  52598. prvCheckTasksWaitingTermination();
  52599. 8015e30: f000 f852 bl 8015ed8 <prvCheckTasksWaitingTermination>
  52600. A critical region is not required here as we are just reading from
  52601. the list, and an occasional incorrect value will not matter. If
  52602. the ready list at the idle priority contains more than one task
  52603. then a task other than the idle task is ready to execute. */
  52604. if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ tskIDLE_PRIORITY ] ) ) > ( UBaseType_t ) 1 )
  52605. 8015e34: 4b06 ldr r3, [pc, #24] @ (8015e50 <prvIdleTask+0x28>)
  52606. 8015e36: 681b ldr r3, [r3, #0]
  52607. 8015e38: 2b01 cmp r3, #1
  52608. 8015e3a: d9f9 bls.n 8015e30 <prvIdleTask+0x8>
  52609. {
  52610. taskYIELD();
  52611. 8015e3c: 4b05 ldr r3, [pc, #20] @ (8015e54 <prvIdleTask+0x2c>)
  52612. 8015e3e: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  52613. 8015e42: 601a str r2, [r3, #0]
  52614. 8015e44: f3bf 8f4f dsb sy
  52615. 8015e48: f3bf 8f6f isb sy
  52616. prvCheckTasksWaitingTermination();
  52617. 8015e4c: e7f0 b.n 8015e30 <prvIdleTask+0x8>
  52618. 8015e4e: bf00 nop
  52619. 8015e50: 24002644 .word 0x24002644
  52620. 8015e54: e000ed04 .word 0xe000ed04
  52621. 08015e58 <prvInitialiseTaskLists>:
  52622. #endif /* portUSING_MPU_WRAPPERS */
  52623. /*-----------------------------------------------------------*/
  52624. static void prvInitialiseTaskLists( void )
  52625. {
  52626. 8015e58: b580 push {r7, lr}
  52627. 8015e5a: b082 sub sp, #8
  52628. 8015e5c: af00 add r7, sp, #0
  52629. UBaseType_t uxPriority;
  52630. for( uxPriority = ( UBaseType_t ) 0U; uxPriority < ( UBaseType_t ) configMAX_PRIORITIES; uxPriority++ )
  52631. 8015e5e: 2300 movs r3, #0
  52632. 8015e60: 607b str r3, [r7, #4]
  52633. 8015e62: e00c b.n 8015e7e <prvInitialiseTaskLists+0x26>
  52634. {
  52635. vListInitialise( &( pxReadyTasksLists[ uxPriority ] ) );
  52636. 8015e64: 687a ldr r2, [r7, #4]
  52637. 8015e66: 4613 mov r3, r2
  52638. 8015e68: 009b lsls r3, r3, #2
  52639. 8015e6a: 4413 add r3, r2
  52640. 8015e6c: 009b lsls r3, r3, #2
  52641. 8015e6e: 4a12 ldr r2, [pc, #72] @ (8015eb8 <prvInitialiseTaskLists+0x60>)
  52642. 8015e70: 4413 add r3, r2
  52643. 8015e72: 4618 mov r0, r3
  52644. 8015e74: f7fe f81c bl 8013eb0 <vListInitialise>
  52645. for( uxPriority = ( UBaseType_t ) 0U; uxPriority < ( UBaseType_t ) configMAX_PRIORITIES; uxPriority++ )
  52646. 8015e78: 687b ldr r3, [r7, #4]
  52647. 8015e7a: 3301 adds r3, #1
  52648. 8015e7c: 607b str r3, [r7, #4]
  52649. 8015e7e: 687b ldr r3, [r7, #4]
  52650. 8015e80: 2b37 cmp r3, #55 @ 0x37
  52651. 8015e82: d9ef bls.n 8015e64 <prvInitialiseTaskLists+0xc>
  52652. }
  52653. vListInitialise( &xDelayedTaskList1 );
  52654. 8015e84: 480d ldr r0, [pc, #52] @ (8015ebc <prvInitialiseTaskLists+0x64>)
  52655. 8015e86: f7fe f813 bl 8013eb0 <vListInitialise>
  52656. vListInitialise( &xDelayedTaskList2 );
  52657. 8015e8a: 480d ldr r0, [pc, #52] @ (8015ec0 <prvInitialiseTaskLists+0x68>)
  52658. 8015e8c: f7fe f810 bl 8013eb0 <vListInitialise>
  52659. vListInitialise( &xPendingReadyList );
  52660. 8015e90: 480c ldr r0, [pc, #48] @ (8015ec4 <prvInitialiseTaskLists+0x6c>)
  52661. 8015e92: f7fe f80d bl 8013eb0 <vListInitialise>
  52662. #if ( INCLUDE_vTaskDelete == 1 )
  52663. {
  52664. vListInitialise( &xTasksWaitingTermination );
  52665. 8015e96: 480c ldr r0, [pc, #48] @ (8015ec8 <prvInitialiseTaskLists+0x70>)
  52666. 8015e98: f7fe f80a bl 8013eb0 <vListInitialise>
  52667. }
  52668. #endif /* INCLUDE_vTaskDelete */
  52669. #if ( INCLUDE_vTaskSuspend == 1 )
  52670. {
  52671. vListInitialise( &xSuspendedTaskList );
  52672. 8015e9c: 480b ldr r0, [pc, #44] @ (8015ecc <prvInitialiseTaskLists+0x74>)
  52673. 8015e9e: f7fe f807 bl 8013eb0 <vListInitialise>
  52674. }
  52675. #endif /* INCLUDE_vTaskSuspend */
  52676. /* Start with pxDelayedTaskList using list1 and the pxOverflowDelayedTaskList
  52677. using list2. */
  52678. pxDelayedTaskList = &xDelayedTaskList1;
  52679. 8015ea2: 4b0b ldr r3, [pc, #44] @ (8015ed0 <prvInitialiseTaskLists+0x78>)
  52680. 8015ea4: 4a05 ldr r2, [pc, #20] @ (8015ebc <prvInitialiseTaskLists+0x64>)
  52681. 8015ea6: 601a str r2, [r3, #0]
  52682. pxOverflowDelayedTaskList = &xDelayedTaskList2;
  52683. 8015ea8: 4b0a ldr r3, [pc, #40] @ (8015ed4 <prvInitialiseTaskLists+0x7c>)
  52684. 8015eaa: 4a05 ldr r2, [pc, #20] @ (8015ec0 <prvInitialiseTaskLists+0x68>)
  52685. 8015eac: 601a str r2, [r3, #0]
  52686. }
  52687. 8015eae: bf00 nop
  52688. 8015eb0: 3708 adds r7, #8
  52689. 8015eb2: 46bd mov sp, r7
  52690. 8015eb4: bd80 pop {r7, pc}
  52691. 8015eb6: bf00 nop
  52692. 8015eb8: 24002644 .word 0x24002644
  52693. 8015ebc: 24002aa4 .word 0x24002aa4
  52694. 8015ec0: 24002ab8 .word 0x24002ab8
  52695. 8015ec4: 24002ad4 .word 0x24002ad4
  52696. 8015ec8: 24002ae8 .word 0x24002ae8
  52697. 8015ecc: 24002b00 .word 0x24002b00
  52698. 8015ed0: 24002acc .word 0x24002acc
  52699. 8015ed4: 24002ad0 .word 0x24002ad0
  52700. 08015ed8 <prvCheckTasksWaitingTermination>:
  52701. /*-----------------------------------------------------------*/
  52702. static void prvCheckTasksWaitingTermination( void )
  52703. {
  52704. 8015ed8: b580 push {r7, lr}
  52705. 8015eda: b082 sub sp, #8
  52706. 8015edc: af00 add r7, sp, #0
  52707. {
  52708. TCB_t *pxTCB;
  52709. /* uxDeletedTasksWaitingCleanUp is used to prevent taskENTER_CRITICAL()
  52710. being called too often in the idle task. */
  52711. while( uxDeletedTasksWaitingCleanUp > ( UBaseType_t ) 0U )
  52712. 8015ede: e019 b.n 8015f14 <prvCheckTasksWaitingTermination+0x3c>
  52713. {
  52714. taskENTER_CRITICAL();
  52715. 8015ee0: f001 fa12 bl 8017308 <vPortEnterCritical>
  52716. {
  52717. pxTCB = listGET_OWNER_OF_HEAD_ENTRY( ( &xTasksWaitingTermination ) ); /*lint !e9079 void * is used as this macro is used with timers and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */
  52718. 8015ee4: 4b10 ldr r3, [pc, #64] @ (8015f28 <prvCheckTasksWaitingTermination+0x50>)
  52719. 8015ee6: 68db ldr r3, [r3, #12]
  52720. 8015ee8: 68db ldr r3, [r3, #12]
  52721. 8015eea: 607b str r3, [r7, #4]
  52722. ( void ) uxListRemove( &( pxTCB->xStateListItem ) );
  52723. 8015eec: 687b ldr r3, [r7, #4]
  52724. 8015eee: 3304 adds r3, #4
  52725. 8015ef0: 4618 mov r0, r3
  52726. 8015ef2: f7fe f867 bl 8013fc4 <uxListRemove>
  52727. --uxCurrentNumberOfTasks;
  52728. 8015ef6: 4b0d ldr r3, [pc, #52] @ (8015f2c <prvCheckTasksWaitingTermination+0x54>)
  52729. 8015ef8: 681b ldr r3, [r3, #0]
  52730. 8015efa: 3b01 subs r3, #1
  52731. 8015efc: 4a0b ldr r2, [pc, #44] @ (8015f2c <prvCheckTasksWaitingTermination+0x54>)
  52732. 8015efe: 6013 str r3, [r2, #0]
  52733. --uxDeletedTasksWaitingCleanUp;
  52734. 8015f00: 4b0b ldr r3, [pc, #44] @ (8015f30 <prvCheckTasksWaitingTermination+0x58>)
  52735. 8015f02: 681b ldr r3, [r3, #0]
  52736. 8015f04: 3b01 subs r3, #1
  52737. 8015f06: 4a0a ldr r2, [pc, #40] @ (8015f30 <prvCheckTasksWaitingTermination+0x58>)
  52738. 8015f08: 6013 str r3, [r2, #0]
  52739. }
  52740. taskEXIT_CRITICAL();
  52741. 8015f0a: f001 fa2f bl 801736c <vPortExitCritical>
  52742. prvDeleteTCB( pxTCB );
  52743. 8015f0e: 6878 ldr r0, [r7, #4]
  52744. 8015f10: f000 f810 bl 8015f34 <prvDeleteTCB>
  52745. while( uxDeletedTasksWaitingCleanUp > ( UBaseType_t ) 0U )
  52746. 8015f14: 4b06 ldr r3, [pc, #24] @ (8015f30 <prvCheckTasksWaitingTermination+0x58>)
  52747. 8015f16: 681b ldr r3, [r3, #0]
  52748. 8015f18: 2b00 cmp r3, #0
  52749. 8015f1a: d1e1 bne.n 8015ee0 <prvCheckTasksWaitingTermination+0x8>
  52750. }
  52751. }
  52752. #endif /* INCLUDE_vTaskDelete */
  52753. }
  52754. 8015f1c: bf00 nop
  52755. 8015f1e: bf00 nop
  52756. 8015f20: 3708 adds r7, #8
  52757. 8015f22: 46bd mov sp, r7
  52758. 8015f24: bd80 pop {r7, pc}
  52759. 8015f26: bf00 nop
  52760. 8015f28: 24002ae8 .word 0x24002ae8
  52761. 8015f2c: 24002b14 .word 0x24002b14
  52762. 8015f30: 24002afc .word 0x24002afc
  52763. 08015f34 <prvDeleteTCB>:
  52764. /*-----------------------------------------------------------*/
  52765. #if ( INCLUDE_vTaskDelete == 1 )
  52766. static void prvDeleteTCB( TCB_t *pxTCB )
  52767. {
  52768. 8015f34: b580 push {r7, lr}
  52769. 8015f36: b084 sub sp, #16
  52770. 8015f38: af00 add r7, sp, #0
  52771. 8015f3a: 6078 str r0, [r7, #4]
  52772. to the task to free any memory allocated at the application level.
  52773. See the third party link http://www.nadler.com/embedded/newlibAndFreeRTOS.html
  52774. for additional information. */
  52775. #if ( configUSE_NEWLIB_REENTRANT == 1 )
  52776. {
  52777. _reclaim_reent( &( pxTCB->xNewLib_reent ) );
  52778. 8015f3c: 687b ldr r3, [r7, #4]
  52779. 8015f3e: 3354 adds r3, #84 @ 0x54
  52780. 8015f40: 4618 mov r0, r3
  52781. 8015f42: f001 fe21 bl 8017b88 <_reclaim_reent>
  52782. #elif( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 ) /*lint !e731 !e9029 Macro has been consolidated for readability reasons. */
  52783. {
  52784. /* The task could have been allocated statically or dynamically, so
  52785. check what was statically allocated before trying to free the
  52786. memory. */
  52787. if( pxTCB->ucStaticallyAllocated == tskDYNAMICALLY_ALLOCATED_STACK_AND_TCB )
  52788. 8015f46: 687b ldr r3, [r7, #4]
  52789. 8015f48: f893 30a5 ldrb.w r3, [r3, #165] @ 0xa5
  52790. 8015f4c: 2b00 cmp r3, #0
  52791. 8015f4e: d108 bne.n 8015f62 <prvDeleteTCB+0x2e>
  52792. {
  52793. /* Both the stack and TCB were allocated dynamically, so both
  52794. must be freed. */
  52795. vPortFree( pxTCB->pxStack );
  52796. 8015f50: 687b ldr r3, [r7, #4]
  52797. 8015f52: 6b1b ldr r3, [r3, #48] @ 0x30
  52798. 8015f54: 4618 mov r0, r3
  52799. 8015f56: f001 fbc7 bl 80176e8 <vPortFree>
  52800. vPortFree( pxTCB );
  52801. 8015f5a: 6878 ldr r0, [r7, #4]
  52802. 8015f5c: f001 fbc4 bl 80176e8 <vPortFree>
  52803. configASSERT( pxTCB->ucStaticallyAllocated == tskSTATICALLY_ALLOCATED_STACK_AND_TCB );
  52804. mtCOVERAGE_TEST_MARKER();
  52805. }
  52806. }
  52807. #endif /* configSUPPORT_DYNAMIC_ALLOCATION */
  52808. }
  52809. 8015f60: e019 b.n 8015f96 <prvDeleteTCB+0x62>
  52810. else if( pxTCB->ucStaticallyAllocated == tskSTATICALLY_ALLOCATED_STACK_ONLY )
  52811. 8015f62: 687b ldr r3, [r7, #4]
  52812. 8015f64: f893 30a5 ldrb.w r3, [r3, #165] @ 0xa5
  52813. 8015f68: 2b01 cmp r3, #1
  52814. 8015f6a: d103 bne.n 8015f74 <prvDeleteTCB+0x40>
  52815. vPortFree( pxTCB );
  52816. 8015f6c: 6878 ldr r0, [r7, #4]
  52817. 8015f6e: f001 fbbb bl 80176e8 <vPortFree>
  52818. }
  52819. 8015f72: e010 b.n 8015f96 <prvDeleteTCB+0x62>
  52820. configASSERT( pxTCB->ucStaticallyAllocated == tskSTATICALLY_ALLOCATED_STACK_AND_TCB );
  52821. 8015f74: 687b ldr r3, [r7, #4]
  52822. 8015f76: f893 30a5 ldrb.w r3, [r3, #165] @ 0xa5
  52823. 8015f7a: 2b02 cmp r3, #2
  52824. 8015f7c: d00b beq.n 8015f96 <prvDeleteTCB+0x62>
  52825. __asm volatile
  52826. 8015f7e: f04f 0350 mov.w r3, #80 @ 0x50
  52827. 8015f82: f383 8811 msr BASEPRI, r3
  52828. 8015f86: f3bf 8f6f isb sy
  52829. 8015f8a: f3bf 8f4f dsb sy
  52830. 8015f8e: 60fb str r3, [r7, #12]
  52831. }
  52832. 8015f90: bf00 nop
  52833. 8015f92: bf00 nop
  52834. 8015f94: e7fd b.n 8015f92 <prvDeleteTCB+0x5e>
  52835. }
  52836. 8015f96: bf00 nop
  52837. 8015f98: 3710 adds r7, #16
  52838. 8015f9a: 46bd mov sp, r7
  52839. 8015f9c: bd80 pop {r7, pc}
  52840. ...
  52841. 08015fa0 <prvResetNextTaskUnblockTime>:
  52842. #endif /* INCLUDE_vTaskDelete */
  52843. /*-----------------------------------------------------------*/
  52844. static void prvResetNextTaskUnblockTime( void )
  52845. {
  52846. 8015fa0: b480 push {r7}
  52847. 8015fa2: b083 sub sp, #12
  52848. 8015fa4: af00 add r7, sp, #0
  52849. TCB_t *pxTCB;
  52850. if( listLIST_IS_EMPTY( pxDelayedTaskList ) != pdFALSE )
  52851. 8015fa6: 4b0c ldr r3, [pc, #48] @ (8015fd8 <prvResetNextTaskUnblockTime+0x38>)
  52852. 8015fa8: 681b ldr r3, [r3, #0]
  52853. 8015faa: 681b ldr r3, [r3, #0]
  52854. 8015fac: 2b00 cmp r3, #0
  52855. 8015fae: d104 bne.n 8015fba <prvResetNextTaskUnblockTime+0x1a>
  52856. {
  52857. /* The new current delayed list is empty. Set xNextTaskUnblockTime to
  52858. the maximum possible value so it is extremely unlikely that the
  52859. if( xTickCount >= xNextTaskUnblockTime ) test will pass until
  52860. there is an item in the delayed list. */
  52861. xNextTaskUnblockTime = portMAX_DELAY;
  52862. 8015fb0: 4b0a ldr r3, [pc, #40] @ (8015fdc <prvResetNextTaskUnblockTime+0x3c>)
  52863. 8015fb2: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
  52864. 8015fb6: 601a str r2, [r3, #0]
  52865. which the task at the head of the delayed list should be removed
  52866. from the Blocked state. */
  52867. ( pxTCB ) = listGET_OWNER_OF_HEAD_ENTRY( pxDelayedTaskList ); /*lint !e9079 void * is used as this macro is used with timers and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */
  52868. xNextTaskUnblockTime = listGET_LIST_ITEM_VALUE( &( ( pxTCB )->xStateListItem ) );
  52869. }
  52870. }
  52871. 8015fb8: e008 b.n 8015fcc <prvResetNextTaskUnblockTime+0x2c>
  52872. ( pxTCB ) = listGET_OWNER_OF_HEAD_ENTRY( pxDelayedTaskList ); /*lint !e9079 void * is used as this macro is used with timers and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */
  52873. 8015fba: 4b07 ldr r3, [pc, #28] @ (8015fd8 <prvResetNextTaskUnblockTime+0x38>)
  52874. 8015fbc: 681b ldr r3, [r3, #0]
  52875. 8015fbe: 68db ldr r3, [r3, #12]
  52876. 8015fc0: 68db ldr r3, [r3, #12]
  52877. 8015fc2: 607b str r3, [r7, #4]
  52878. xNextTaskUnblockTime = listGET_LIST_ITEM_VALUE( &( ( pxTCB )->xStateListItem ) );
  52879. 8015fc4: 687b ldr r3, [r7, #4]
  52880. 8015fc6: 685b ldr r3, [r3, #4]
  52881. 8015fc8: 4a04 ldr r2, [pc, #16] @ (8015fdc <prvResetNextTaskUnblockTime+0x3c>)
  52882. 8015fca: 6013 str r3, [r2, #0]
  52883. }
  52884. 8015fcc: bf00 nop
  52885. 8015fce: 370c adds r7, #12
  52886. 8015fd0: 46bd mov sp, r7
  52887. 8015fd2: f85d 7b04 ldr.w r7, [sp], #4
  52888. 8015fd6: 4770 bx lr
  52889. 8015fd8: 24002acc .word 0x24002acc
  52890. 8015fdc: 24002b34 .word 0x24002b34
  52891. 08015fe0 <xTaskGetCurrentTaskHandle>:
  52892. /*-----------------------------------------------------------*/
  52893. #if ( ( INCLUDE_xTaskGetCurrentTaskHandle == 1 ) || ( configUSE_MUTEXES == 1 ) )
  52894. TaskHandle_t xTaskGetCurrentTaskHandle( void )
  52895. {
  52896. 8015fe0: b480 push {r7}
  52897. 8015fe2: b083 sub sp, #12
  52898. 8015fe4: af00 add r7, sp, #0
  52899. TaskHandle_t xReturn;
  52900. /* A critical section is not required as this is not called from
  52901. an interrupt and the current TCB will always be the same for any
  52902. individual execution thread. */
  52903. xReturn = pxCurrentTCB;
  52904. 8015fe6: 4b05 ldr r3, [pc, #20] @ (8015ffc <xTaskGetCurrentTaskHandle+0x1c>)
  52905. 8015fe8: 681b ldr r3, [r3, #0]
  52906. 8015fea: 607b str r3, [r7, #4]
  52907. return xReturn;
  52908. 8015fec: 687b ldr r3, [r7, #4]
  52909. }
  52910. 8015fee: 4618 mov r0, r3
  52911. 8015ff0: 370c adds r7, #12
  52912. 8015ff2: 46bd mov sp, r7
  52913. 8015ff4: f85d 7b04 ldr.w r7, [sp], #4
  52914. 8015ff8: 4770 bx lr
  52915. 8015ffa: bf00 nop
  52916. 8015ffc: 24002640 .word 0x24002640
  52917. 08016000 <xTaskGetSchedulerState>:
  52918. /*-----------------------------------------------------------*/
  52919. #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
  52920. BaseType_t xTaskGetSchedulerState( void )
  52921. {
  52922. 8016000: b480 push {r7}
  52923. 8016002: b083 sub sp, #12
  52924. 8016004: af00 add r7, sp, #0
  52925. BaseType_t xReturn;
  52926. if( xSchedulerRunning == pdFALSE )
  52927. 8016006: 4b0b ldr r3, [pc, #44] @ (8016034 <xTaskGetSchedulerState+0x34>)
  52928. 8016008: 681b ldr r3, [r3, #0]
  52929. 801600a: 2b00 cmp r3, #0
  52930. 801600c: d102 bne.n 8016014 <xTaskGetSchedulerState+0x14>
  52931. {
  52932. xReturn = taskSCHEDULER_NOT_STARTED;
  52933. 801600e: 2301 movs r3, #1
  52934. 8016010: 607b str r3, [r7, #4]
  52935. 8016012: e008 b.n 8016026 <xTaskGetSchedulerState+0x26>
  52936. }
  52937. else
  52938. {
  52939. if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE )
  52940. 8016014: 4b08 ldr r3, [pc, #32] @ (8016038 <xTaskGetSchedulerState+0x38>)
  52941. 8016016: 681b ldr r3, [r3, #0]
  52942. 8016018: 2b00 cmp r3, #0
  52943. 801601a: d102 bne.n 8016022 <xTaskGetSchedulerState+0x22>
  52944. {
  52945. xReturn = taskSCHEDULER_RUNNING;
  52946. 801601c: 2302 movs r3, #2
  52947. 801601e: 607b str r3, [r7, #4]
  52948. 8016020: e001 b.n 8016026 <xTaskGetSchedulerState+0x26>
  52949. }
  52950. else
  52951. {
  52952. xReturn = taskSCHEDULER_SUSPENDED;
  52953. 8016022: 2300 movs r3, #0
  52954. 8016024: 607b str r3, [r7, #4]
  52955. }
  52956. }
  52957. return xReturn;
  52958. 8016026: 687b ldr r3, [r7, #4]
  52959. }
  52960. 8016028: 4618 mov r0, r3
  52961. 801602a: 370c adds r7, #12
  52962. 801602c: 46bd mov sp, r7
  52963. 801602e: f85d 7b04 ldr.w r7, [sp], #4
  52964. 8016032: 4770 bx lr
  52965. 8016034: 24002b20 .word 0x24002b20
  52966. 8016038: 24002b3c .word 0x24002b3c
  52967. 0801603c <xTaskPriorityInherit>:
  52968. /*-----------------------------------------------------------*/
  52969. #if ( configUSE_MUTEXES == 1 )
  52970. BaseType_t xTaskPriorityInherit( TaskHandle_t const pxMutexHolder )
  52971. {
  52972. 801603c: b580 push {r7, lr}
  52973. 801603e: b084 sub sp, #16
  52974. 8016040: af00 add r7, sp, #0
  52975. 8016042: 6078 str r0, [r7, #4]
  52976. TCB_t * const pxMutexHolderTCB = pxMutexHolder;
  52977. 8016044: 687b ldr r3, [r7, #4]
  52978. 8016046: 60bb str r3, [r7, #8]
  52979. BaseType_t xReturn = pdFALSE;
  52980. 8016048: 2300 movs r3, #0
  52981. 801604a: 60fb str r3, [r7, #12]
  52982. /* If the mutex was given back by an interrupt while the queue was
  52983. locked then the mutex holder might now be NULL. _RB_ Is this still
  52984. needed as interrupts can no longer use mutexes? */
  52985. if( pxMutexHolder != NULL )
  52986. 801604c: 687b ldr r3, [r7, #4]
  52987. 801604e: 2b00 cmp r3, #0
  52988. 8016050: d051 beq.n 80160f6 <xTaskPriorityInherit+0xba>
  52989. {
  52990. /* If the holder of the mutex has a priority below the priority of
  52991. the task attempting to obtain the mutex then it will temporarily
  52992. inherit the priority of the task attempting to obtain the mutex. */
  52993. if( pxMutexHolderTCB->uxPriority < pxCurrentTCB->uxPriority )
  52994. 8016052: 68bb ldr r3, [r7, #8]
  52995. 8016054: 6ada ldr r2, [r3, #44] @ 0x2c
  52996. 8016056: 4b2a ldr r3, [pc, #168] @ (8016100 <xTaskPriorityInherit+0xc4>)
  52997. 8016058: 681b ldr r3, [r3, #0]
  52998. 801605a: 6adb ldr r3, [r3, #44] @ 0x2c
  52999. 801605c: 429a cmp r2, r3
  53000. 801605e: d241 bcs.n 80160e4 <xTaskPriorityInherit+0xa8>
  53001. {
  53002. /* Adjust the mutex holder state to account for its new
  53003. priority. Only reset the event list item value if the value is
  53004. not being used for anything else. */
  53005. if( ( listGET_LIST_ITEM_VALUE( &( pxMutexHolderTCB->xEventListItem ) ) & taskEVENT_LIST_ITEM_VALUE_IN_USE ) == 0UL )
  53006. 8016060: 68bb ldr r3, [r7, #8]
  53007. 8016062: 699b ldr r3, [r3, #24]
  53008. 8016064: 2b00 cmp r3, #0
  53009. 8016066: db06 blt.n 8016076 <xTaskPriorityInherit+0x3a>
  53010. {
  53011. listSET_LIST_ITEM_VALUE( &( pxMutexHolderTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) pxCurrentTCB->uxPriority ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */
  53012. 8016068: 4b25 ldr r3, [pc, #148] @ (8016100 <xTaskPriorityInherit+0xc4>)
  53013. 801606a: 681b ldr r3, [r3, #0]
  53014. 801606c: 6adb ldr r3, [r3, #44] @ 0x2c
  53015. 801606e: f1c3 0238 rsb r2, r3, #56 @ 0x38
  53016. 8016072: 68bb ldr r3, [r7, #8]
  53017. 8016074: 619a str r2, [r3, #24]
  53018. mtCOVERAGE_TEST_MARKER();
  53019. }
  53020. /* If the task being modified is in the ready state it will need
  53021. to be moved into a new list. */
  53022. if( listIS_CONTAINED_WITHIN( &( pxReadyTasksLists[ pxMutexHolderTCB->uxPriority ] ), &( pxMutexHolderTCB->xStateListItem ) ) != pdFALSE )
  53023. 8016076: 68bb ldr r3, [r7, #8]
  53024. 8016078: 6959 ldr r1, [r3, #20]
  53025. 801607a: 68bb ldr r3, [r7, #8]
  53026. 801607c: 6ada ldr r2, [r3, #44] @ 0x2c
  53027. 801607e: 4613 mov r3, r2
  53028. 8016080: 009b lsls r3, r3, #2
  53029. 8016082: 4413 add r3, r2
  53030. 8016084: 009b lsls r3, r3, #2
  53031. 8016086: 4a1f ldr r2, [pc, #124] @ (8016104 <xTaskPriorityInherit+0xc8>)
  53032. 8016088: 4413 add r3, r2
  53033. 801608a: 4299 cmp r1, r3
  53034. 801608c: d122 bne.n 80160d4 <xTaskPriorityInherit+0x98>
  53035. {
  53036. if( uxListRemove( &( pxMutexHolderTCB->xStateListItem ) ) == ( UBaseType_t ) 0 )
  53037. 801608e: 68bb ldr r3, [r7, #8]
  53038. 8016090: 3304 adds r3, #4
  53039. 8016092: 4618 mov r0, r3
  53040. 8016094: f7fd ff96 bl 8013fc4 <uxListRemove>
  53041. {
  53042. mtCOVERAGE_TEST_MARKER();
  53043. }
  53044. /* Inherit the priority before being moved into the new list. */
  53045. pxMutexHolderTCB->uxPriority = pxCurrentTCB->uxPriority;
  53046. 8016098: 4b19 ldr r3, [pc, #100] @ (8016100 <xTaskPriorityInherit+0xc4>)
  53047. 801609a: 681b ldr r3, [r3, #0]
  53048. 801609c: 6ada ldr r2, [r3, #44] @ 0x2c
  53049. 801609e: 68bb ldr r3, [r7, #8]
  53050. 80160a0: 62da str r2, [r3, #44] @ 0x2c
  53051. prvAddTaskToReadyList( pxMutexHolderTCB );
  53052. 80160a2: 68bb ldr r3, [r7, #8]
  53053. 80160a4: 6ada ldr r2, [r3, #44] @ 0x2c
  53054. 80160a6: 4b18 ldr r3, [pc, #96] @ (8016108 <xTaskPriorityInherit+0xcc>)
  53055. 80160a8: 681b ldr r3, [r3, #0]
  53056. 80160aa: 429a cmp r2, r3
  53057. 80160ac: d903 bls.n 80160b6 <xTaskPriorityInherit+0x7a>
  53058. 80160ae: 68bb ldr r3, [r7, #8]
  53059. 80160b0: 6adb ldr r3, [r3, #44] @ 0x2c
  53060. 80160b2: 4a15 ldr r2, [pc, #84] @ (8016108 <xTaskPriorityInherit+0xcc>)
  53061. 80160b4: 6013 str r3, [r2, #0]
  53062. 80160b6: 68bb ldr r3, [r7, #8]
  53063. 80160b8: 6ada ldr r2, [r3, #44] @ 0x2c
  53064. 80160ba: 4613 mov r3, r2
  53065. 80160bc: 009b lsls r3, r3, #2
  53066. 80160be: 4413 add r3, r2
  53067. 80160c0: 009b lsls r3, r3, #2
  53068. 80160c2: 4a10 ldr r2, [pc, #64] @ (8016104 <xTaskPriorityInherit+0xc8>)
  53069. 80160c4: 441a add r2, r3
  53070. 80160c6: 68bb ldr r3, [r7, #8]
  53071. 80160c8: 3304 adds r3, #4
  53072. 80160ca: 4619 mov r1, r3
  53073. 80160cc: 4610 mov r0, r2
  53074. 80160ce: f7fd ff1c bl 8013f0a <vListInsertEnd>
  53075. 80160d2: e004 b.n 80160de <xTaskPriorityInherit+0xa2>
  53076. }
  53077. else
  53078. {
  53079. /* Just inherit the priority. */
  53080. pxMutexHolderTCB->uxPriority = pxCurrentTCB->uxPriority;
  53081. 80160d4: 4b0a ldr r3, [pc, #40] @ (8016100 <xTaskPriorityInherit+0xc4>)
  53082. 80160d6: 681b ldr r3, [r3, #0]
  53083. 80160d8: 6ada ldr r2, [r3, #44] @ 0x2c
  53084. 80160da: 68bb ldr r3, [r7, #8]
  53085. 80160dc: 62da str r2, [r3, #44] @ 0x2c
  53086. }
  53087. traceTASK_PRIORITY_INHERIT( pxMutexHolderTCB, pxCurrentTCB->uxPriority );
  53088. /* Inheritance occurred. */
  53089. xReturn = pdTRUE;
  53090. 80160de: 2301 movs r3, #1
  53091. 80160e0: 60fb str r3, [r7, #12]
  53092. 80160e2: e008 b.n 80160f6 <xTaskPriorityInherit+0xba>
  53093. }
  53094. else
  53095. {
  53096. if( pxMutexHolderTCB->uxBasePriority < pxCurrentTCB->uxPriority )
  53097. 80160e4: 68bb ldr r3, [r7, #8]
  53098. 80160e6: 6cda ldr r2, [r3, #76] @ 0x4c
  53099. 80160e8: 4b05 ldr r3, [pc, #20] @ (8016100 <xTaskPriorityInherit+0xc4>)
  53100. 80160ea: 681b ldr r3, [r3, #0]
  53101. 80160ec: 6adb ldr r3, [r3, #44] @ 0x2c
  53102. 80160ee: 429a cmp r2, r3
  53103. 80160f0: d201 bcs.n 80160f6 <xTaskPriorityInherit+0xba>
  53104. current priority of the mutex holder is not lower than the
  53105. priority of the task attempting to take the mutex.
  53106. Therefore the mutex holder must have already inherited a
  53107. priority, but inheritance would have occurred if that had
  53108. not been the case. */
  53109. xReturn = pdTRUE;
  53110. 80160f2: 2301 movs r3, #1
  53111. 80160f4: 60fb str r3, [r7, #12]
  53112. else
  53113. {
  53114. mtCOVERAGE_TEST_MARKER();
  53115. }
  53116. return xReturn;
  53117. 80160f6: 68fb ldr r3, [r7, #12]
  53118. }
  53119. 80160f8: 4618 mov r0, r3
  53120. 80160fa: 3710 adds r7, #16
  53121. 80160fc: 46bd mov sp, r7
  53122. 80160fe: bd80 pop {r7, pc}
  53123. 8016100: 24002640 .word 0x24002640
  53124. 8016104: 24002644 .word 0x24002644
  53125. 8016108: 24002b1c .word 0x24002b1c
  53126. 0801610c <xTaskPriorityDisinherit>:
  53127. /*-----------------------------------------------------------*/
  53128. #if ( configUSE_MUTEXES == 1 )
  53129. BaseType_t xTaskPriorityDisinherit( TaskHandle_t const pxMutexHolder )
  53130. {
  53131. 801610c: b580 push {r7, lr}
  53132. 801610e: b086 sub sp, #24
  53133. 8016110: af00 add r7, sp, #0
  53134. 8016112: 6078 str r0, [r7, #4]
  53135. TCB_t * const pxTCB = pxMutexHolder;
  53136. 8016114: 687b ldr r3, [r7, #4]
  53137. 8016116: 613b str r3, [r7, #16]
  53138. BaseType_t xReturn = pdFALSE;
  53139. 8016118: 2300 movs r3, #0
  53140. 801611a: 617b str r3, [r7, #20]
  53141. if( pxMutexHolder != NULL )
  53142. 801611c: 687b ldr r3, [r7, #4]
  53143. 801611e: 2b00 cmp r3, #0
  53144. 8016120: d058 beq.n 80161d4 <xTaskPriorityDisinherit+0xc8>
  53145. {
  53146. /* A task can only have an inherited priority if it holds the mutex.
  53147. If the mutex is held by a task then it cannot be given from an
  53148. interrupt, and if a mutex is given by the holding task then it must
  53149. be the running state task. */
  53150. configASSERT( pxTCB == pxCurrentTCB );
  53151. 8016122: 4b2f ldr r3, [pc, #188] @ (80161e0 <xTaskPriorityDisinherit+0xd4>)
  53152. 8016124: 681b ldr r3, [r3, #0]
  53153. 8016126: 693a ldr r2, [r7, #16]
  53154. 8016128: 429a cmp r2, r3
  53155. 801612a: d00b beq.n 8016144 <xTaskPriorityDisinherit+0x38>
  53156. __asm volatile
  53157. 801612c: f04f 0350 mov.w r3, #80 @ 0x50
  53158. 8016130: f383 8811 msr BASEPRI, r3
  53159. 8016134: f3bf 8f6f isb sy
  53160. 8016138: f3bf 8f4f dsb sy
  53161. 801613c: 60fb str r3, [r7, #12]
  53162. }
  53163. 801613e: bf00 nop
  53164. 8016140: bf00 nop
  53165. 8016142: e7fd b.n 8016140 <xTaskPriorityDisinherit+0x34>
  53166. configASSERT( pxTCB->uxMutexesHeld );
  53167. 8016144: 693b ldr r3, [r7, #16]
  53168. 8016146: 6d1b ldr r3, [r3, #80] @ 0x50
  53169. 8016148: 2b00 cmp r3, #0
  53170. 801614a: d10b bne.n 8016164 <xTaskPriorityDisinherit+0x58>
  53171. __asm volatile
  53172. 801614c: f04f 0350 mov.w r3, #80 @ 0x50
  53173. 8016150: f383 8811 msr BASEPRI, r3
  53174. 8016154: f3bf 8f6f isb sy
  53175. 8016158: f3bf 8f4f dsb sy
  53176. 801615c: 60bb str r3, [r7, #8]
  53177. }
  53178. 801615e: bf00 nop
  53179. 8016160: bf00 nop
  53180. 8016162: e7fd b.n 8016160 <xTaskPriorityDisinherit+0x54>
  53181. ( pxTCB->uxMutexesHeld )--;
  53182. 8016164: 693b ldr r3, [r7, #16]
  53183. 8016166: 6d1b ldr r3, [r3, #80] @ 0x50
  53184. 8016168: 1e5a subs r2, r3, #1
  53185. 801616a: 693b ldr r3, [r7, #16]
  53186. 801616c: 651a str r2, [r3, #80] @ 0x50
  53187. /* Has the holder of the mutex inherited the priority of another
  53188. task? */
  53189. if( pxTCB->uxPriority != pxTCB->uxBasePriority )
  53190. 801616e: 693b ldr r3, [r7, #16]
  53191. 8016170: 6ada ldr r2, [r3, #44] @ 0x2c
  53192. 8016172: 693b ldr r3, [r7, #16]
  53193. 8016174: 6cdb ldr r3, [r3, #76] @ 0x4c
  53194. 8016176: 429a cmp r2, r3
  53195. 8016178: d02c beq.n 80161d4 <xTaskPriorityDisinherit+0xc8>
  53196. {
  53197. /* Only disinherit if no other mutexes are held. */
  53198. if( pxTCB->uxMutexesHeld == ( UBaseType_t ) 0 )
  53199. 801617a: 693b ldr r3, [r7, #16]
  53200. 801617c: 6d1b ldr r3, [r3, #80] @ 0x50
  53201. 801617e: 2b00 cmp r3, #0
  53202. 8016180: d128 bne.n 80161d4 <xTaskPriorityDisinherit+0xc8>
  53203. /* A task can only have an inherited priority if it holds
  53204. the mutex. If the mutex is held by a task then it cannot be
  53205. given from an interrupt, and if a mutex is given by the
  53206. holding task then it must be the running state task. Remove
  53207. the holding task from the ready/delayed list. */
  53208. if( uxListRemove( &( pxTCB->xStateListItem ) ) == ( UBaseType_t ) 0 )
  53209. 8016182: 693b ldr r3, [r7, #16]
  53210. 8016184: 3304 adds r3, #4
  53211. 8016186: 4618 mov r0, r3
  53212. 8016188: f7fd ff1c bl 8013fc4 <uxListRemove>
  53213. }
  53214. /* Disinherit the priority before adding the task into the
  53215. new ready list. */
  53216. traceTASK_PRIORITY_DISINHERIT( pxTCB, pxTCB->uxBasePriority );
  53217. pxTCB->uxPriority = pxTCB->uxBasePriority;
  53218. 801618c: 693b ldr r3, [r7, #16]
  53219. 801618e: 6cda ldr r2, [r3, #76] @ 0x4c
  53220. 8016190: 693b ldr r3, [r7, #16]
  53221. 8016192: 62da str r2, [r3, #44] @ 0x2c
  53222. /* Reset the event list item value. It cannot be in use for
  53223. any other purpose if this task is running, and it must be
  53224. running to give back the mutex. */
  53225. listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) pxTCB->uxPriority ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */
  53226. 8016194: 693b ldr r3, [r7, #16]
  53227. 8016196: 6adb ldr r3, [r3, #44] @ 0x2c
  53228. 8016198: f1c3 0238 rsb r2, r3, #56 @ 0x38
  53229. 801619c: 693b ldr r3, [r7, #16]
  53230. 801619e: 619a str r2, [r3, #24]
  53231. prvAddTaskToReadyList( pxTCB );
  53232. 80161a0: 693b ldr r3, [r7, #16]
  53233. 80161a2: 6ada ldr r2, [r3, #44] @ 0x2c
  53234. 80161a4: 4b0f ldr r3, [pc, #60] @ (80161e4 <xTaskPriorityDisinherit+0xd8>)
  53235. 80161a6: 681b ldr r3, [r3, #0]
  53236. 80161a8: 429a cmp r2, r3
  53237. 80161aa: d903 bls.n 80161b4 <xTaskPriorityDisinherit+0xa8>
  53238. 80161ac: 693b ldr r3, [r7, #16]
  53239. 80161ae: 6adb ldr r3, [r3, #44] @ 0x2c
  53240. 80161b0: 4a0c ldr r2, [pc, #48] @ (80161e4 <xTaskPriorityDisinherit+0xd8>)
  53241. 80161b2: 6013 str r3, [r2, #0]
  53242. 80161b4: 693b ldr r3, [r7, #16]
  53243. 80161b6: 6ada ldr r2, [r3, #44] @ 0x2c
  53244. 80161b8: 4613 mov r3, r2
  53245. 80161ba: 009b lsls r3, r3, #2
  53246. 80161bc: 4413 add r3, r2
  53247. 80161be: 009b lsls r3, r3, #2
  53248. 80161c0: 4a09 ldr r2, [pc, #36] @ (80161e8 <xTaskPriorityDisinherit+0xdc>)
  53249. 80161c2: 441a add r2, r3
  53250. 80161c4: 693b ldr r3, [r7, #16]
  53251. 80161c6: 3304 adds r3, #4
  53252. 80161c8: 4619 mov r1, r3
  53253. 80161ca: 4610 mov r0, r2
  53254. 80161cc: f7fd fe9d bl 8013f0a <vListInsertEnd>
  53255. in an order different to that in which they were taken.
  53256. If a context switch did not occur when the first mutex was
  53257. returned, even if a task was waiting on it, then a context
  53258. switch should occur when the last mutex is returned whether
  53259. a task is waiting on it or not. */
  53260. xReturn = pdTRUE;
  53261. 80161d0: 2301 movs r3, #1
  53262. 80161d2: 617b str r3, [r7, #20]
  53263. else
  53264. {
  53265. mtCOVERAGE_TEST_MARKER();
  53266. }
  53267. return xReturn;
  53268. 80161d4: 697b ldr r3, [r7, #20]
  53269. }
  53270. 80161d6: 4618 mov r0, r3
  53271. 80161d8: 3718 adds r7, #24
  53272. 80161da: 46bd mov sp, r7
  53273. 80161dc: bd80 pop {r7, pc}
  53274. 80161de: bf00 nop
  53275. 80161e0: 24002640 .word 0x24002640
  53276. 80161e4: 24002b1c .word 0x24002b1c
  53277. 80161e8: 24002644 .word 0x24002644
  53278. 080161ec <vTaskPriorityDisinheritAfterTimeout>:
  53279. /*-----------------------------------------------------------*/
  53280. #if ( configUSE_MUTEXES == 1 )
  53281. void vTaskPriorityDisinheritAfterTimeout( TaskHandle_t const pxMutexHolder, UBaseType_t uxHighestPriorityWaitingTask )
  53282. {
  53283. 80161ec: b580 push {r7, lr}
  53284. 80161ee: b088 sub sp, #32
  53285. 80161f0: af00 add r7, sp, #0
  53286. 80161f2: 6078 str r0, [r7, #4]
  53287. 80161f4: 6039 str r1, [r7, #0]
  53288. TCB_t * const pxTCB = pxMutexHolder;
  53289. 80161f6: 687b ldr r3, [r7, #4]
  53290. 80161f8: 61bb str r3, [r7, #24]
  53291. UBaseType_t uxPriorityUsedOnEntry, uxPriorityToUse;
  53292. const UBaseType_t uxOnlyOneMutexHeld = ( UBaseType_t ) 1;
  53293. 80161fa: 2301 movs r3, #1
  53294. 80161fc: 617b str r3, [r7, #20]
  53295. if( pxMutexHolder != NULL )
  53296. 80161fe: 687b ldr r3, [r7, #4]
  53297. 8016200: 2b00 cmp r3, #0
  53298. 8016202: d06c beq.n 80162de <vTaskPriorityDisinheritAfterTimeout+0xf2>
  53299. {
  53300. /* If pxMutexHolder is not NULL then the holder must hold at least
  53301. one mutex. */
  53302. configASSERT( pxTCB->uxMutexesHeld );
  53303. 8016204: 69bb ldr r3, [r7, #24]
  53304. 8016206: 6d1b ldr r3, [r3, #80] @ 0x50
  53305. 8016208: 2b00 cmp r3, #0
  53306. 801620a: d10b bne.n 8016224 <vTaskPriorityDisinheritAfterTimeout+0x38>
  53307. __asm volatile
  53308. 801620c: f04f 0350 mov.w r3, #80 @ 0x50
  53309. 8016210: f383 8811 msr BASEPRI, r3
  53310. 8016214: f3bf 8f6f isb sy
  53311. 8016218: f3bf 8f4f dsb sy
  53312. 801621c: 60fb str r3, [r7, #12]
  53313. }
  53314. 801621e: bf00 nop
  53315. 8016220: bf00 nop
  53316. 8016222: e7fd b.n 8016220 <vTaskPriorityDisinheritAfterTimeout+0x34>
  53317. /* Determine the priority to which the priority of the task that
  53318. holds the mutex should be set. This will be the greater of the
  53319. holding task's base priority and the priority of the highest
  53320. priority task that is waiting to obtain the mutex. */
  53321. if( pxTCB->uxBasePriority < uxHighestPriorityWaitingTask )
  53322. 8016224: 69bb ldr r3, [r7, #24]
  53323. 8016226: 6cdb ldr r3, [r3, #76] @ 0x4c
  53324. 8016228: 683a ldr r2, [r7, #0]
  53325. 801622a: 429a cmp r2, r3
  53326. 801622c: d902 bls.n 8016234 <vTaskPriorityDisinheritAfterTimeout+0x48>
  53327. {
  53328. uxPriorityToUse = uxHighestPriorityWaitingTask;
  53329. 801622e: 683b ldr r3, [r7, #0]
  53330. 8016230: 61fb str r3, [r7, #28]
  53331. 8016232: e002 b.n 801623a <vTaskPriorityDisinheritAfterTimeout+0x4e>
  53332. }
  53333. else
  53334. {
  53335. uxPriorityToUse = pxTCB->uxBasePriority;
  53336. 8016234: 69bb ldr r3, [r7, #24]
  53337. 8016236: 6cdb ldr r3, [r3, #76] @ 0x4c
  53338. 8016238: 61fb str r3, [r7, #28]
  53339. }
  53340. /* Does the priority need to change? */
  53341. if( pxTCB->uxPriority != uxPriorityToUse )
  53342. 801623a: 69bb ldr r3, [r7, #24]
  53343. 801623c: 6adb ldr r3, [r3, #44] @ 0x2c
  53344. 801623e: 69fa ldr r2, [r7, #28]
  53345. 8016240: 429a cmp r2, r3
  53346. 8016242: d04c beq.n 80162de <vTaskPriorityDisinheritAfterTimeout+0xf2>
  53347. {
  53348. /* Only disinherit if no other mutexes are held. This is a
  53349. simplification in the priority inheritance implementation. If
  53350. the task that holds the mutex is also holding other mutexes then
  53351. the other mutexes may have caused the priority inheritance. */
  53352. if( pxTCB->uxMutexesHeld == uxOnlyOneMutexHeld )
  53353. 8016244: 69bb ldr r3, [r7, #24]
  53354. 8016246: 6d1b ldr r3, [r3, #80] @ 0x50
  53355. 8016248: 697a ldr r2, [r7, #20]
  53356. 801624a: 429a cmp r2, r3
  53357. 801624c: d147 bne.n 80162de <vTaskPriorityDisinheritAfterTimeout+0xf2>
  53358. {
  53359. /* If a task has timed out because it already holds the
  53360. mutex it was trying to obtain then it cannot of inherited
  53361. its own priority. */
  53362. configASSERT( pxTCB != pxCurrentTCB );
  53363. 801624e: 4b26 ldr r3, [pc, #152] @ (80162e8 <vTaskPriorityDisinheritAfterTimeout+0xfc>)
  53364. 8016250: 681b ldr r3, [r3, #0]
  53365. 8016252: 69ba ldr r2, [r7, #24]
  53366. 8016254: 429a cmp r2, r3
  53367. 8016256: d10b bne.n 8016270 <vTaskPriorityDisinheritAfterTimeout+0x84>
  53368. __asm volatile
  53369. 8016258: f04f 0350 mov.w r3, #80 @ 0x50
  53370. 801625c: f383 8811 msr BASEPRI, r3
  53371. 8016260: f3bf 8f6f isb sy
  53372. 8016264: f3bf 8f4f dsb sy
  53373. 8016268: 60bb str r3, [r7, #8]
  53374. }
  53375. 801626a: bf00 nop
  53376. 801626c: bf00 nop
  53377. 801626e: e7fd b.n 801626c <vTaskPriorityDisinheritAfterTimeout+0x80>
  53378. /* Disinherit the priority, remembering the previous
  53379. priority to facilitate determining the subject task's
  53380. state. */
  53381. traceTASK_PRIORITY_DISINHERIT( pxTCB, pxTCB->uxBasePriority );
  53382. uxPriorityUsedOnEntry = pxTCB->uxPriority;
  53383. 8016270: 69bb ldr r3, [r7, #24]
  53384. 8016272: 6adb ldr r3, [r3, #44] @ 0x2c
  53385. 8016274: 613b str r3, [r7, #16]
  53386. pxTCB->uxPriority = uxPriorityToUse;
  53387. 8016276: 69bb ldr r3, [r7, #24]
  53388. 8016278: 69fa ldr r2, [r7, #28]
  53389. 801627a: 62da str r2, [r3, #44] @ 0x2c
  53390. /* Only reset the event list item value if the value is not
  53391. being used for anything else. */
  53392. if( ( listGET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ) ) & taskEVENT_LIST_ITEM_VALUE_IN_USE ) == 0UL )
  53393. 801627c: 69bb ldr r3, [r7, #24]
  53394. 801627e: 699b ldr r3, [r3, #24]
  53395. 8016280: 2b00 cmp r3, #0
  53396. 8016282: db04 blt.n 801628e <vTaskPriorityDisinheritAfterTimeout+0xa2>
  53397. {
  53398. listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) uxPriorityToUse ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */
  53399. 8016284: 69fb ldr r3, [r7, #28]
  53400. 8016286: f1c3 0238 rsb r2, r3, #56 @ 0x38
  53401. 801628a: 69bb ldr r3, [r7, #24]
  53402. 801628c: 619a str r2, [r3, #24]
  53403. then the task that holds the mutex could be in either the
  53404. Ready, Blocked or Suspended states. Only remove the task
  53405. from its current state list if it is in the Ready state as
  53406. the task's priority is going to change and there is one
  53407. Ready list per priority. */
  53408. if( listIS_CONTAINED_WITHIN( &( pxReadyTasksLists[ uxPriorityUsedOnEntry ] ), &( pxTCB->xStateListItem ) ) != pdFALSE )
  53409. 801628e: 69bb ldr r3, [r7, #24]
  53410. 8016290: 6959 ldr r1, [r3, #20]
  53411. 8016292: 693a ldr r2, [r7, #16]
  53412. 8016294: 4613 mov r3, r2
  53413. 8016296: 009b lsls r3, r3, #2
  53414. 8016298: 4413 add r3, r2
  53415. 801629a: 009b lsls r3, r3, #2
  53416. 801629c: 4a13 ldr r2, [pc, #76] @ (80162ec <vTaskPriorityDisinheritAfterTimeout+0x100>)
  53417. 801629e: 4413 add r3, r2
  53418. 80162a0: 4299 cmp r1, r3
  53419. 80162a2: d11c bne.n 80162de <vTaskPriorityDisinheritAfterTimeout+0xf2>
  53420. {
  53421. if( uxListRemove( &( pxTCB->xStateListItem ) ) == ( UBaseType_t ) 0 )
  53422. 80162a4: 69bb ldr r3, [r7, #24]
  53423. 80162a6: 3304 adds r3, #4
  53424. 80162a8: 4618 mov r0, r3
  53425. 80162aa: f7fd fe8b bl 8013fc4 <uxListRemove>
  53426. else
  53427. {
  53428. mtCOVERAGE_TEST_MARKER();
  53429. }
  53430. prvAddTaskToReadyList( pxTCB );
  53431. 80162ae: 69bb ldr r3, [r7, #24]
  53432. 80162b0: 6ada ldr r2, [r3, #44] @ 0x2c
  53433. 80162b2: 4b0f ldr r3, [pc, #60] @ (80162f0 <vTaskPriorityDisinheritAfterTimeout+0x104>)
  53434. 80162b4: 681b ldr r3, [r3, #0]
  53435. 80162b6: 429a cmp r2, r3
  53436. 80162b8: d903 bls.n 80162c2 <vTaskPriorityDisinheritAfterTimeout+0xd6>
  53437. 80162ba: 69bb ldr r3, [r7, #24]
  53438. 80162bc: 6adb ldr r3, [r3, #44] @ 0x2c
  53439. 80162be: 4a0c ldr r2, [pc, #48] @ (80162f0 <vTaskPriorityDisinheritAfterTimeout+0x104>)
  53440. 80162c0: 6013 str r3, [r2, #0]
  53441. 80162c2: 69bb ldr r3, [r7, #24]
  53442. 80162c4: 6ada ldr r2, [r3, #44] @ 0x2c
  53443. 80162c6: 4613 mov r3, r2
  53444. 80162c8: 009b lsls r3, r3, #2
  53445. 80162ca: 4413 add r3, r2
  53446. 80162cc: 009b lsls r3, r3, #2
  53447. 80162ce: 4a07 ldr r2, [pc, #28] @ (80162ec <vTaskPriorityDisinheritAfterTimeout+0x100>)
  53448. 80162d0: 441a add r2, r3
  53449. 80162d2: 69bb ldr r3, [r7, #24]
  53450. 80162d4: 3304 adds r3, #4
  53451. 80162d6: 4619 mov r1, r3
  53452. 80162d8: 4610 mov r0, r2
  53453. 80162da: f7fd fe16 bl 8013f0a <vListInsertEnd>
  53454. }
  53455. else
  53456. {
  53457. mtCOVERAGE_TEST_MARKER();
  53458. }
  53459. }
  53460. 80162de: bf00 nop
  53461. 80162e0: 3720 adds r7, #32
  53462. 80162e2: 46bd mov sp, r7
  53463. 80162e4: bd80 pop {r7, pc}
  53464. 80162e6: bf00 nop
  53465. 80162e8: 24002640 .word 0x24002640
  53466. 80162ec: 24002644 .word 0x24002644
  53467. 80162f0: 24002b1c .word 0x24002b1c
  53468. 080162f4 <pvTaskIncrementMutexHeldCount>:
  53469. /*-----------------------------------------------------------*/
  53470. #if ( configUSE_MUTEXES == 1 )
  53471. TaskHandle_t pvTaskIncrementMutexHeldCount( void )
  53472. {
  53473. 80162f4: b480 push {r7}
  53474. 80162f6: af00 add r7, sp, #0
  53475. /* If xSemaphoreCreateMutex() is called before any tasks have been created
  53476. then pxCurrentTCB will be NULL. */
  53477. if( pxCurrentTCB != NULL )
  53478. 80162f8: 4b07 ldr r3, [pc, #28] @ (8016318 <pvTaskIncrementMutexHeldCount+0x24>)
  53479. 80162fa: 681b ldr r3, [r3, #0]
  53480. 80162fc: 2b00 cmp r3, #0
  53481. 80162fe: d004 beq.n 801630a <pvTaskIncrementMutexHeldCount+0x16>
  53482. {
  53483. ( pxCurrentTCB->uxMutexesHeld )++;
  53484. 8016300: 4b05 ldr r3, [pc, #20] @ (8016318 <pvTaskIncrementMutexHeldCount+0x24>)
  53485. 8016302: 681b ldr r3, [r3, #0]
  53486. 8016304: 6d1a ldr r2, [r3, #80] @ 0x50
  53487. 8016306: 3201 adds r2, #1
  53488. 8016308: 651a str r2, [r3, #80] @ 0x50
  53489. }
  53490. return pxCurrentTCB;
  53491. 801630a: 4b03 ldr r3, [pc, #12] @ (8016318 <pvTaskIncrementMutexHeldCount+0x24>)
  53492. 801630c: 681b ldr r3, [r3, #0]
  53493. }
  53494. 801630e: 4618 mov r0, r3
  53495. 8016310: 46bd mov sp, r7
  53496. 8016312: f85d 7b04 ldr.w r7, [sp], #4
  53497. 8016316: 4770 bx lr
  53498. 8016318: 24002640 .word 0x24002640
  53499. 0801631c <xTaskNotifyWait>:
  53500. /*-----------------------------------------------------------*/
  53501. #if( configUSE_TASK_NOTIFICATIONS == 1 )
  53502. BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait )
  53503. {
  53504. 801631c: b580 push {r7, lr}
  53505. 801631e: b086 sub sp, #24
  53506. 8016320: af00 add r7, sp, #0
  53507. 8016322: 60f8 str r0, [r7, #12]
  53508. 8016324: 60b9 str r1, [r7, #8]
  53509. 8016326: 607a str r2, [r7, #4]
  53510. 8016328: 603b str r3, [r7, #0]
  53511. BaseType_t xReturn;
  53512. taskENTER_CRITICAL();
  53513. 801632a: f000 ffed bl 8017308 <vPortEnterCritical>
  53514. {
  53515. /* Only block if a notification is not already pending. */
  53516. if( pxCurrentTCB->ucNotifyState != taskNOTIFICATION_RECEIVED )
  53517. 801632e: 4b29 ldr r3, [pc, #164] @ (80163d4 <xTaskNotifyWait+0xb8>)
  53518. 8016330: 681b ldr r3, [r3, #0]
  53519. 8016332: f893 30a4 ldrb.w r3, [r3, #164] @ 0xa4
  53520. 8016336: b2db uxtb r3, r3
  53521. 8016338: 2b02 cmp r3, #2
  53522. 801633a: d01c beq.n 8016376 <xTaskNotifyWait+0x5a>
  53523. {
  53524. /* Clear bits in the task's notification value as bits may get
  53525. set by the notifying task or interrupt. This can be used to
  53526. clear the value to zero. */
  53527. pxCurrentTCB->ulNotifiedValue &= ~ulBitsToClearOnEntry;
  53528. 801633c: 4b25 ldr r3, [pc, #148] @ (80163d4 <xTaskNotifyWait+0xb8>)
  53529. 801633e: 681b ldr r3, [r3, #0]
  53530. 8016340: f8d3 10a0 ldr.w r1, [r3, #160] @ 0xa0
  53531. 8016344: 68fa ldr r2, [r7, #12]
  53532. 8016346: 43d2 mvns r2, r2
  53533. 8016348: 400a ands r2, r1
  53534. 801634a: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  53535. /* Mark this task as waiting for a notification. */
  53536. pxCurrentTCB->ucNotifyState = taskWAITING_NOTIFICATION;
  53537. 801634e: 4b21 ldr r3, [pc, #132] @ (80163d4 <xTaskNotifyWait+0xb8>)
  53538. 8016350: 681b ldr r3, [r3, #0]
  53539. 8016352: 2201 movs r2, #1
  53540. 8016354: f883 20a4 strb.w r2, [r3, #164] @ 0xa4
  53541. if( xTicksToWait > ( TickType_t ) 0 )
  53542. 8016358: 683b ldr r3, [r7, #0]
  53543. 801635a: 2b00 cmp r3, #0
  53544. 801635c: d00b beq.n 8016376 <xTaskNotifyWait+0x5a>
  53545. {
  53546. prvAddCurrentTaskToDelayedList( xTicksToWait, pdTRUE );
  53547. 801635e: 2101 movs r1, #1
  53548. 8016360: 6838 ldr r0, [r7, #0]
  53549. 8016362: f000 fa09 bl 8016778 <prvAddCurrentTaskToDelayedList>
  53550. /* All ports are written to allow a yield in a critical
  53551. section (some will yield immediately, others wait until the
  53552. critical section exits) - but it is not something that
  53553. application code should ever do. */
  53554. portYIELD_WITHIN_API();
  53555. 8016366: 4b1c ldr r3, [pc, #112] @ (80163d8 <xTaskNotifyWait+0xbc>)
  53556. 8016368: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  53557. 801636c: 601a str r2, [r3, #0]
  53558. 801636e: f3bf 8f4f dsb sy
  53559. 8016372: f3bf 8f6f isb sy
  53560. else
  53561. {
  53562. mtCOVERAGE_TEST_MARKER();
  53563. }
  53564. }
  53565. taskEXIT_CRITICAL();
  53566. 8016376: f000 fff9 bl 801736c <vPortExitCritical>
  53567. taskENTER_CRITICAL();
  53568. 801637a: f000 ffc5 bl 8017308 <vPortEnterCritical>
  53569. {
  53570. traceTASK_NOTIFY_WAIT();
  53571. if( pulNotificationValue != NULL )
  53572. 801637e: 687b ldr r3, [r7, #4]
  53573. 8016380: 2b00 cmp r3, #0
  53574. 8016382: d005 beq.n 8016390 <xTaskNotifyWait+0x74>
  53575. {
  53576. /* Output the current notification value, which may or may not
  53577. have changed. */
  53578. *pulNotificationValue = pxCurrentTCB->ulNotifiedValue;
  53579. 8016384: 4b13 ldr r3, [pc, #76] @ (80163d4 <xTaskNotifyWait+0xb8>)
  53580. 8016386: 681b ldr r3, [r3, #0]
  53581. 8016388: f8d3 20a0 ldr.w r2, [r3, #160] @ 0xa0
  53582. 801638c: 687b ldr r3, [r7, #4]
  53583. 801638e: 601a str r2, [r3, #0]
  53584. /* If ucNotifyValue is set then either the task never entered the
  53585. blocked state (because a notification was already pending) or the
  53586. task unblocked because of a notification. Otherwise the task
  53587. unblocked because of a timeout. */
  53588. if( pxCurrentTCB->ucNotifyState != taskNOTIFICATION_RECEIVED )
  53589. 8016390: 4b10 ldr r3, [pc, #64] @ (80163d4 <xTaskNotifyWait+0xb8>)
  53590. 8016392: 681b ldr r3, [r3, #0]
  53591. 8016394: f893 30a4 ldrb.w r3, [r3, #164] @ 0xa4
  53592. 8016398: b2db uxtb r3, r3
  53593. 801639a: 2b02 cmp r3, #2
  53594. 801639c: d002 beq.n 80163a4 <xTaskNotifyWait+0x88>
  53595. {
  53596. /* A notification was not received. */
  53597. xReturn = pdFALSE;
  53598. 801639e: 2300 movs r3, #0
  53599. 80163a0: 617b str r3, [r7, #20]
  53600. 80163a2: e00a b.n 80163ba <xTaskNotifyWait+0x9e>
  53601. }
  53602. else
  53603. {
  53604. /* A notification was already pending or a notification was
  53605. received while the task was waiting. */
  53606. pxCurrentTCB->ulNotifiedValue &= ~ulBitsToClearOnExit;
  53607. 80163a4: 4b0b ldr r3, [pc, #44] @ (80163d4 <xTaskNotifyWait+0xb8>)
  53608. 80163a6: 681b ldr r3, [r3, #0]
  53609. 80163a8: f8d3 10a0 ldr.w r1, [r3, #160] @ 0xa0
  53610. 80163ac: 68ba ldr r2, [r7, #8]
  53611. 80163ae: 43d2 mvns r2, r2
  53612. 80163b0: 400a ands r2, r1
  53613. 80163b2: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  53614. xReturn = pdTRUE;
  53615. 80163b6: 2301 movs r3, #1
  53616. 80163b8: 617b str r3, [r7, #20]
  53617. }
  53618. pxCurrentTCB->ucNotifyState = taskNOT_WAITING_NOTIFICATION;
  53619. 80163ba: 4b06 ldr r3, [pc, #24] @ (80163d4 <xTaskNotifyWait+0xb8>)
  53620. 80163bc: 681b ldr r3, [r3, #0]
  53621. 80163be: 2200 movs r2, #0
  53622. 80163c0: f883 20a4 strb.w r2, [r3, #164] @ 0xa4
  53623. }
  53624. taskEXIT_CRITICAL();
  53625. 80163c4: f000 ffd2 bl 801736c <vPortExitCritical>
  53626. return xReturn;
  53627. 80163c8: 697b ldr r3, [r7, #20]
  53628. }
  53629. 80163ca: 4618 mov r0, r3
  53630. 80163cc: 3718 adds r7, #24
  53631. 80163ce: 46bd mov sp, r7
  53632. 80163d0: bd80 pop {r7, pc}
  53633. 80163d2: bf00 nop
  53634. 80163d4: 24002640 .word 0x24002640
  53635. 80163d8: e000ed04 .word 0xe000ed04
  53636. 080163dc <xTaskGenericNotify>:
  53637. /*-----------------------------------------------------------*/
  53638. #if( configUSE_TASK_NOTIFICATIONS == 1 )
  53639. BaseType_t xTaskGenericNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue )
  53640. {
  53641. 80163dc: b580 push {r7, lr}
  53642. 80163de: b08a sub sp, #40 @ 0x28
  53643. 80163e0: af00 add r7, sp, #0
  53644. 80163e2: 60f8 str r0, [r7, #12]
  53645. 80163e4: 60b9 str r1, [r7, #8]
  53646. 80163e6: 603b str r3, [r7, #0]
  53647. 80163e8: 4613 mov r3, r2
  53648. 80163ea: 71fb strb r3, [r7, #7]
  53649. TCB_t * pxTCB;
  53650. BaseType_t xReturn = pdPASS;
  53651. 80163ec: 2301 movs r3, #1
  53652. 80163ee: 627b str r3, [r7, #36] @ 0x24
  53653. uint8_t ucOriginalNotifyState;
  53654. configASSERT( xTaskToNotify );
  53655. 80163f0: 68fb ldr r3, [r7, #12]
  53656. 80163f2: 2b00 cmp r3, #0
  53657. 80163f4: d10b bne.n 801640e <xTaskGenericNotify+0x32>
  53658. __asm volatile
  53659. 80163f6: f04f 0350 mov.w r3, #80 @ 0x50
  53660. 80163fa: f383 8811 msr BASEPRI, r3
  53661. 80163fe: f3bf 8f6f isb sy
  53662. 8016402: f3bf 8f4f dsb sy
  53663. 8016406: 61bb str r3, [r7, #24]
  53664. }
  53665. 8016408: bf00 nop
  53666. 801640a: bf00 nop
  53667. 801640c: e7fd b.n 801640a <xTaskGenericNotify+0x2e>
  53668. pxTCB = xTaskToNotify;
  53669. 801640e: 68fb ldr r3, [r7, #12]
  53670. 8016410: 623b str r3, [r7, #32]
  53671. taskENTER_CRITICAL();
  53672. 8016412: f000 ff79 bl 8017308 <vPortEnterCritical>
  53673. {
  53674. if( pulPreviousNotificationValue != NULL )
  53675. 8016416: 683b ldr r3, [r7, #0]
  53676. 8016418: 2b00 cmp r3, #0
  53677. 801641a: d004 beq.n 8016426 <xTaskGenericNotify+0x4a>
  53678. {
  53679. *pulPreviousNotificationValue = pxTCB->ulNotifiedValue;
  53680. 801641c: 6a3b ldr r3, [r7, #32]
  53681. 801641e: f8d3 20a0 ldr.w r2, [r3, #160] @ 0xa0
  53682. 8016422: 683b ldr r3, [r7, #0]
  53683. 8016424: 601a str r2, [r3, #0]
  53684. }
  53685. ucOriginalNotifyState = pxTCB->ucNotifyState;
  53686. 8016426: 6a3b ldr r3, [r7, #32]
  53687. 8016428: f893 30a4 ldrb.w r3, [r3, #164] @ 0xa4
  53688. 801642c: 77fb strb r3, [r7, #31]
  53689. pxTCB->ucNotifyState = taskNOTIFICATION_RECEIVED;
  53690. 801642e: 6a3b ldr r3, [r7, #32]
  53691. 8016430: 2202 movs r2, #2
  53692. 8016432: f883 20a4 strb.w r2, [r3, #164] @ 0xa4
  53693. switch( eAction )
  53694. 8016436: 79fb ldrb r3, [r7, #7]
  53695. 8016438: 2b04 cmp r3, #4
  53696. 801643a: d82e bhi.n 801649a <xTaskGenericNotify+0xbe>
  53697. 801643c: a201 add r2, pc, #4 @ (adr r2, 8016444 <xTaskGenericNotify+0x68>)
  53698. 801643e: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  53699. 8016442: bf00 nop
  53700. 8016444: 080164bf .word 0x080164bf
  53701. 8016448: 08016459 .word 0x08016459
  53702. 801644c: 0801646b .word 0x0801646b
  53703. 8016450: 0801647b .word 0x0801647b
  53704. 8016454: 08016485 .word 0x08016485
  53705. {
  53706. case eSetBits :
  53707. pxTCB->ulNotifiedValue |= ulValue;
  53708. 8016458: 6a3b ldr r3, [r7, #32]
  53709. 801645a: f8d3 20a0 ldr.w r2, [r3, #160] @ 0xa0
  53710. 801645e: 68bb ldr r3, [r7, #8]
  53711. 8016460: 431a orrs r2, r3
  53712. 8016462: 6a3b ldr r3, [r7, #32]
  53713. 8016464: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  53714. break;
  53715. 8016468: e02c b.n 80164c4 <xTaskGenericNotify+0xe8>
  53716. case eIncrement :
  53717. ( pxTCB->ulNotifiedValue )++;
  53718. 801646a: 6a3b ldr r3, [r7, #32]
  53719. 801646c: f8d3 30a0 ldr.w r3, [r3, #160] @ 0xa0
  53720. 8016470: 1c5a adds r2, r3, #1
  53721. 8016472: 6a3b ldr r3, [r7, #32]
  53722. 8016474: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  53723. break;
  53724. 8016478: e024 b.n 80164c4 <xTaskGenericNotify+0xe8>
  53725. case eSetValueWithOverwrite :
  53726. pxTCB->ulNotifiedValue = ulValue;
  53727. 801647a: 6a3b ldr r3, [r7, #32]
  53728. 801647c: 68ba ldr r2, [r7, #8]
  53729. 801647e: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  53730. break;
  53731. 8016482: e01f b.n 80164c4 <xTaskGenericNotify+0xe8>
  53732. case eSetValueWithoutOverwrite :
  53733. if( ucOriginalNotifyState != taskNOTIFICATION_RECEIVED )
  53734. 8016484: 7ffb ldrb r3, [r7, #31]
  53735. 8016486: 2b02 cmp r3, #2
  53736. 8016488: d004 beq.n 8016494 <xTaskGenericNotify+0xb8>
  53737. {
  53738. pxTCB->ulNotifiedValue = ulValue;
  53739. 801648a: 6a3b ldr r3, [r7, #32]
  53740. 801648c: 68ba ldr r2, [r7, #8]
  53741. 801648e: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  53742. else
  53743. {
  53744. /* The value could not be written to the task. */
  53745. xReturn = pdFAIL;
  53746. }
  53747. break;
  53748. 8016492: e017 b.n 80164c4 <xTaskGenericNotify+0xe8>
  53749. xReturn = pdFAIL;
  53750. 8016494: 2300 movs r3, #0
  53751. 8016496: 627b str r3, [r7, #36] @ 0x24
  53752. break;
  53753. 8016498: e014 b.n 80164c4 <xTaskGenericNotify+0xe8>
  53754. default:
  53755. /* Should not get here if all enums are handled.
  53756. Artificially force an assert by testing a value the
  53757. compiler can't assume is const. */
  53758. configASSERT( pxTCB->ulNotifiedValue == ~0UL );
  53759. 801649a: 6a3b ldr r3, [r7, #32]
  53760. 801649c: f8d3 30a0 ldr.w r3, [r3, #160] @ 0xa0
  53761. 80164a0: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  53762. 80164a4: d00d beq.n 80164c2 <xTaskGenericNotify+0xe6>
  53763. __asm volatile
  53764. 80164a6: f04f 0350 mov.w r3, #80 @ 0x50
  53765. 80164aa: f383 8811 msr BASEPRI, r3
  53766. 80164ae: f3bf 8f6f isb sy
  53767. 80164b2: f3bf 8f4f dsb sy
  53768. 80164b6: 617b str r3, [r7, #20]
  53769. }
  53770. 80164b8: bf00 nop
  53771. 80164ba: bf00 nop
  53772. 80164bc: e7fd b.n 80164ba <xTaskGenericNotify+0xde>
  53773. break;
  53774. 80164be: bf00 nop
  53775. 80164c0: e000 b.n 80164c4 <xTaskGenericNotify+0xe8>
  53776. break;
  53777. 80164c2: bf00 nop
  53778. traceTASK_NOTIFY();
  53779. /* If the task is in the blocked state specifically to wait for a
  53780. notification then unblock it now. */
  53781. if( ucOriginalNotifyState == taskWAITING_NOTIFICATION )
  53782. 80164c4: 7ffb ldrb r3, [r7, #31]
  53783. 80164c6: 2b01 cmp r3, #1
  53784. 80164c8: d13b bne.n 8016542 <xTaskGenericNotify+0x166>
  53785. {
  53786. ( void ) uxListRemove( &( pxTCB->xStateListItem ) );
  53787. 80164ca: 6a3b ldr r3, [r7, #32]
  53788. 80164cc: 3304 adds r3, #4
  53789. 80164ce: 4618 mov r0, r3
  53790. 80164d0: f7fd fd78 bl 8013fc4 <uxListRemove>
  53791. prvAddTaskToReadyList( pxTCB );
  53792. 80164d4: 6a3b ldr r3, [r7, #32]
  53793. 80164d6: 6ada ldr r2, [r3, #44] @ 0x2c
  53794. 80164d8: 4b1d ldr r3, [pc, #116] @ (8016550 <xTaskGenericNotify+0x174>)
  53795. 80164da: 681b ldr r3, [r3, #0]
  53796. 80164dc: 429a cmp r2, r3
  53797. 80164de: d903 bls.n 80164e8 <xTaskGenericNotify+0x10c>
  53798. 80164e0: 6a3b ldr r3, [r7, #32]
  53799. 80164e2: 6adb ldr r3, [r3, #44] @ 0x2c
  53800. 80164e4: 4a1a ldr r2, [pc, #104] @ (8016550 <xTaskGenericNotify+0x174>)
  53801. 80164e6: 6013 str r3, [r2, #0]
  53802. 80164e8: 6a3b ldr r3, [r7, #32]
  53803. 80164ea: 6ada ldr r2, [r3, #44] @ 0x2c
  53804. 80164ec: 4613 mov r3, r2
  53805. 80164ee: 009b lsls r3, r3, #2
  53806. 80164f0: 4413 add r3, r2
  53807. 80164f2: 009b lsls r3, r3, #2
  53808. 80164f4: 4a17 ldr r2, [pc, #92] @ (8016554 <xTaskGenericNotify+0x178>)
  53809. 80164f6: 441a add r2, r3
  53810. 80164f8: 6a3b ldr r3, [r7, #32]
  53811. 80164fa: 3304 adds r3, #4
  53812. 80164fc: 4619 mov r1, r3
  53813. 80164fe: 4610 mov r0, r2
  53814. 8016500: f7fd fd03 bl 8013f0a <vListInsertEnd>
  53815. /* The task should not have been on an event list. */
  53816. configASSERT( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) == NULL );
  53817. 8016504: 6a3b ldr r3, [r7, #32]
  53818. 8016506: 6a9b ldr r3, [r3, #40] @ 0x28
  53819. 8016508: 2b00 cmp r3, #0
  53820. 801650a: d00b beq.n 8016524 <xTaskGenericNotify+0x148>
  53821. __asm volatile
  53822. 801650c: f04f 0350 mov.w r3, #80 @ 0x50
  53823. 8016510: f383 8811 msr BASEPRI, r3
  53824. 8016514: f3bf 8f6f isb sy
  53825. 8016518: f3bf 8f4f dsb sy
  53826. 801651c: 613b str r3, [r7, #16]
  53827. }
  53828. 801651e: bf00 nop
  53829. 8016520: bf00 nop
  53830. 8016522: e7fd b.n 8016520 <xTaskGenericNotify+0x144>
  53831. earliest possible time. */
  53832. prvResetNextTaskUnblockTime();
  53833. }
  53834. #endif
  53835. if( pxTCB->uxPriority > pxCurrentTCB->uxPriority )
  53836. 8016524: 6a3b ldr r3, [r7, #32]
  53837. 8016526: 6ada ldr r2, [r3, #44] @ 0x2c
  53838. 8016528: 4b0b ldr r3, [pc, #44] @ (8016558 <xTaskGenericNotify+0x17c>)
  53839. 801652a: 681b ldr r3, [r3, #0]
  53840. 801652c: 6adb ldr r3, [r3, #44] @ 0x2c
  53841. 801652e: 429a cmp r2, r3
  53842. 8016530: d907 bls.n 8016542 <xTaskGenericNotify+0x166>
  53843. {
  53844. /* The notified task has a priority above the currently
  53845. executing task so a yield is required. */
  53846. taskYIELD_IF_USING_PREEMPTION();
  53847. 8016532: 4b0a ldr r3, [pc, #40] @ (801655c <xTaskGenericNotify+0x180>)
  53848. 8016534: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  53849. 8016538: 601a str r2, [r3, #0]
  53850. 801653a: f3bf 8f4f dsb sy
  53851. 801653e: f3bf 8f6f isb sy
  53852. else
  53853. {
  53854. mtCOVERAGE_TEST_MARKER();
  53855. }
  53856. }
  53857. taskEXIT_CRITICAL();
  53858. 8016542: f000 ff13 bl 801736c <vPortExitCritical>
  53859. return xReturn;
  53860. 8016546: 6a7b ldr r3, [r7, #36] @ 0x24
  53861. }
  53862. 8016548: 4618 mov r0, r3
  53863. 801654a: 3728 adds r7, #40 @ 0x28
  53864. 801654c: 46bd mov sp, r7
  53865. 801654e: bd80 pop {r7, pc}
  53866. 8016550: 24002b1c .word 0x24002b1c
  53867. 8016554: 24002644 .word 0x24002644
  53868. 8016558: 24002640 .word 0x24002640
  53869. 801655c: e000ed04 .word 0xe000ed04
  53870. 08016560 <xTaskGenericNotifyFromISR>:
  53871. /*-----------------------------------------------------------*/
  53872. #if( configUSE_TASK_NOTIFICATIONS == 1 )
  53873. BaseType_t xTaskGenericNotifyFromISR( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue, BaseType_t *pxHigherPriorityTaskWoken )
  53874. {
  53875. 8016560: b580 push {r7, lr}
  53876. 8016562: b08e sub sp, #56 @ 0x38
  53877. 8016564: af00 add r7, sp, #0
  53878. 8016566: 60f8 str r0, [r7, #12]
  53879. 8016568: 60b9 str r1, [r7, #8]
  53880. 801656a: 603b str r3, [r7, #0]
  53881. 801656c: 4613 mov r3, r2
  53882. 801656e: 71fb strb r3, [r7, #7]
  53883. TCB_t * pxTCB;
  53884. uint8_t ucOriginalNotifyState;
  53885. BaseType_t xReturn = pdPASS;
  53886. 8016570: 2301 movs r3, #1
  53887. 8016572: 637b str r3, [r7, #52] @ 0x34
  53888. UBaseType_t uxSavedInterruptStatus;
  53889. configASSERT( xTaskToNotify );
  53890. 8016574: 68fb ldr r3, [r7, #12]
  53891. 8016576: 2b00 cmp r3, #0
  53892. 8016578: d10b bne.n 8016592 <xTaskGenericNotifyFromISR+0x32>
  53893. __asm volatile
  53894. 801657a: f04f 0350 mov.w r3, #80 @ 0x50
  53895. 801657e: f383 8811 msr BASEPRI, r3
  53896. 8016582: f3bf 8f6f isb sy
  53897. 8016586: f3bf 8f4f dsb sy
  53898. 801658a: 627b str r3, [r7, #36] @ 0x24
  53899. }
  53900. 801658c: bf00 nop
  53901. 801658e: bf00 nop
  53902. 8016590: e7fd b.n 801658e <xTaskGenericNotifyFromISR+0x2e>
  53903. below the maximum system call interrupt priority. FreeRTOS maintains a
  53904. separate interrupt safe API to ensure interrupt entry is as fast and as
  53905. simple as possible. More information (albeit Cortex-M specific) is
  53906. provided on the following link:
  53907. http://www.freertos.org/RTOS-Cortex-M3-M4.html */
  53908. portASSERT_IF_INTERRUPT_PRIORITY_INVALID();
  53909. 8016592: f000 ff99 bl 80174c8 <vPortValidateInterruptPriority>
  53910. pxTCB = xTaskToNotify;
  53911. 8016596: 68fb ldr r3, [r7, #12]
  53912. 8016598: 633b str r3, [r7, #48] @ 0x30
  53913. __asm volatile
  53914. 801659a: f3ef 8211 mrs r2, BASEPRI
  53915. 801659e: f04f 0350 mov.w r3, #80 @ 0x50
  53916. 80165a2: f383 8811 msr BASEPRI, r3
  53917. 80165a6: f3bf 8f6f isb sy
  53918. 80165aa: f3bf 8f4f dsb sy
  53919. 80165ae: 623a str r2, [r7, #32]
  53920. 80165b0: 61fb str r3, [r7, #28]
  53921. return ulOriginalBASEPRI;
  53922. 80165b2: 6a3b ldr r3, [r7, #32]
  53923. uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
  53924. 80165b4: 62fb str r3, [r7, #44] @ 0x2c
  53925. {
  53926. if( pulPreviousNotificationValue != NULL )
  53927. 80165b6: 683b ldr r3, [r7, #0]
  53928. 80165b8: 2b00 cmp r3, #0
  53929. 80165ba: d004 beq.n 80165c6 <xTaskGenericNotifyFromISR+0x66>
  53930. {
  53931. *pulPreviousNotificationValue = pxTCB->ulNotifiedValue;
  53932. 80165bc: 6b3b ldr r3, [r7, #48] @ 0x30
  53933. 80165be: f8d3 20a0 ldr.w r2, [r3, #160] @ 0xa0
  53934. 80165c2: 683b ldr r3, [r7, #0]
  53935. 80165c4: 601a str r2, [r3, #0]
  53936. }
  53937. ucOriginalNotifyState = pxTCB->ucNotifyState;
  53938. 80165c6: 6b3b ldr r3, [r7, #48] @ 0x30
  53939. 80165c8: f893 30a4 ldrb.w r3, [r3, #164] @ 0xa4
  53940. 80165cc: f887 302b strb.w r3, [r7, #43] @ 0x2b
  53941. pxTCB->ucNotifyState = taskNOTIFICATION_RECEIVED;
  53942. 80165d0: 6b3b ldr r3, [r7, #48] @ 0x30
  53943. 80165d2: 2202 movs r2, #2
  53944. 80165d4: f883 20a4 strb.w r2, [r3, #164] @ 0xa4
  53945. switch( eAction )
  53946. 80165d8: 79fb ldrb r3, [r7, #7]
  53947. 80165da: 2b04 cmp r3, #4
  53948. 80165dc: d82e bhi.n 801663c <xTaskGenericNotifyFromISR+0xdc>
  53949. 80165de: a201 add r2, pc, #4 @ (adr r2, 80165e4 <xTaskGenericNotifyFromISR+0x84>)
  53950. 80165e0: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  53951. 80165e4: 08016661 .word 0x08016661
  53952. 80165e8: 080165f9 .word 0x080165f9
  53953. 80165ec: 0801660b .word 0x0801660b
  53954. 80165f0: 0801661b .word 0x0801661b
  53955. 80165f4: 08016625 .word 0x08016625
  53956. {
  53957. case eSetBits :
  53958. pxTCB->ulNotifiedValue |= ulValue;
  53959. 80165f8: 6b3b ldr r3, [r7, #48] @ 0x30
  53960. 80165fa: f8d3 20a0 ldr.w r2, [r3, #160] @ 0xa0
  53961. 80165fe: 68bb ldr r3, [r7, #8]
  53962. 8016600: 431a orrs r2, r3
  53963. 8016602: 6b3b ldr r3, [r7, #48] @ 0x30
  53964. 8016604: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  53965. break;
  53966. 8016608: e02d b.n 8016666 <xTaskGenericNotifyFromISR+0x106>
  53967. case eIncrement :
  53968. ( pxTCB->ulNotifiedValue )++;
  53969. 801660a: 6b3b ldr r3, [r7, #48] @ 0x30
  53970. 801660c: f8d3 30a0 ldr.w r3, [r3, #160] @ 0xa0
  53971. 8016610: 1c5a adds r2, r3, #1
  53972. 8016612: 6b3b ldr r3, [r7, #48] @ 0x30
  53973. 8016614: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  53974. break;
  53975. 8016618: e025 b.n 8016666 <xTaskGenericNotifyFromISR+0x106>
  53976. case eSetValueWithOverwrite :
  53977. pxTCB->ulNotifiedValue = ulValue;
  53978. 801661a: 6b3b ldr r3, [r7, #48] @ 0x30
  53979. 801661c: 68ba ldr r2, [r7, #8]
  53980. 801661e: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  53981. break;
  53982. 8016622: e020 b.n 8016666 <xTaskGenericNotifyFromISR+0x106>
  53983. case eSetValueWithoutOverwrite :
  53984. if( ucOriginalNotifyState != taskNOTIFICATION_RECEIVED )
  53985. 8016624: f897 302b ldrb.w r3, [r7, #43] @ 0x2b
  53986. 8016628: 2b02 cmp r3, #2
  53987. 801662a: d004 beq.n 8016636 <xTaskGenericNotifyFromISR+0xd6>
  53988. {
  53989. pxTCB->ulNotifiedValue = ulValue;
  53990. 801662c: 6b3b ldr r3, [r7, #48] @ 0x30
  53991. 801662e: 68ba ldr r2, [r7, #8]
  53992. 8016630: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  53993. else
  53994. {
  53995. /* The value could not be written to the task. */
  53996. xReturn = pdFAIL;
  53997. }
  53998. break;
  53999. 8016634: e017 b.n 8016666 <xTaskGenericNotifyFromISR+0x106>
  54000. xReturn = pdFAIL;
  54001. 8016636: 2300 movs r3, #0
  54002. 8016638: 637b str r3, [r7, #52] @ 0x34
  54003. break;
  54004. 801663a: e014 b.n 8016666 <xTaskGenericNotifyFromISR+0x106>
  54005. default:
  54006. /* Should not get here if all enums are handled.
  54007. Artificially force an assert by testing a value the
  54008. compiler can't assume is const. */
  54009. configASSERT( pxTCB->ulNotifiedValue == ~0UL );
  54010. 801663c: 6b3b ldr r3, [r7, #48] @ 0x30
  54011. 801663e: f8d3 30a0 ldr.w r3, [r3, #160] @ 0xa0
  54012. 8016642: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  54013. 8016646: d00d beq.n 8016664 <xTaskGenericNotifyFromISR+0x104>
  54014. __asm volatile
  54015. 8016648: f04f 0350 mov.w r3, #80 @ 0x50
  54016. 801664c: f383 8811 msr BASEPRI, r3
  54017. 8016650: f3bf 8f6f isb sy
  54018. 8016654: f3bf 8f4f dsb sy
  54019. 8016658: 61bb str r3, [r7, #24]
  54020. }
  54021. 801665a: bf00 nop
  54022. 801665c: bf00 nop
  54023. 801665e: e7fd b.n 801665c <xTaskGenericNotifyFromISR+0xfc>
  54024. break;
  54025. 8016660: bf00 nop
  54026. 8016662: e000 b.n 8016666 <xTaskGenericNotifyFromISR+0x106>
  54027. break;
  54028. 8016664: bf00 nop
  54029. traceTASK_NOTIFY_FROM_ISR();
  54030. /* If the task is in the blocked state specifically to wait for a
  54031. notification then unblock it now. */
  54032. if( ucOriginalNotifyState == taskWAITING_NOTIFICATION )
  54033. 8016666: f897 302b ldrb.w r3, [r7, #43] @ 0x2b
  54034. 801666a: 2b01 cmp r3, #1
  54035. 801666c: d147 bne.n 80166fe <xTaskGenericNotifyFromISR+0x19e>
  54036. {
  54037. /* The task should not have been on an event list. */
  54038. configASSERT( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) == NULL );
  54039. 801666e: 6b3b ldr r3, [r7, #48] @ 0x30
  54040. 8016670: 6a9b ldr r3, [r3, #40] @ 0x28
  54041. 8016672: 2b00 cmp r3, #0
  54042. 8016674: d00b beq.n 801668e <xTaskGenericNotifyFromISR+0x12e>
  54043. __asm volatile
  54044. 8016676: f04f 0350 mov.w r3, #80 @ 0x50
  54045. 801667a: f383 8811 msr BASEPRI, r3
  54046. 801667e: f3bf 8f6f isb sy
  54047. 8016682: f3bf 8f4f dsb sy
  54048. 8016686: 617b str r3, [r7, #20]
  54049. }
  54050. 8016688: bf00 nop
  54051. 801668a: bf00 nop
  54052. 801668c: e7fd b.n 801668a <xTaskGenericNotifyFromISR+0x12a>
  54053. if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE )
  54054. 801668e: 4b21 ldr r3, [pc, #132] @ (8016714 <xTaskGenericNotifyFromISR+0x1b4>)
  54055. 8016690: 681b ldr r3, [r3, #0]
  54056. 8016692: 2b00 cmp r3, #0
  54057. 8016694: d11d bne.n 80166d2 <xTaskGenericNotifyFromISR+0x172>
  54058. {
  54059. ( void ) uxListRemove( &( pxTCB->xStateListItem ) );
  54060. 8016696: 6b3b ldr r3, [r7, #48] @ 0x30
  54061. 8016698: 3304 adds r3, #4
  54062. 801669a: 4618 mov r0, r3
  54063. 801669c: f7fd fc92 bl 8013fc4 <uxListRemove>
  54064. prvAddTaskToReadyList( pxTCB );
  54065. 80166a0: 6b3b ldr r3, [r7, #48] @ 0x30
  54066. 80166a2: 6ada ldr r2, [r3, #44] @ 0x2c
  54067. 80166a4: 4b1c ldr r3, [pc, #112] @ (8016718 <xTaskGenericNotifyFromISR+0x1b8>)
  54068. 80166a6: 681b ldr r3, [r3, #0]
  54069. 80166a8: 429a cmp r2, r3
  54070. 80166aa: d903 bls.n 80166b4 <xTaskGenericNotifyFromISR+0x154>
  54071. 80166ac: 6b3b ldr r3, [r7, #48] @ 0x30
  54072. 80166ae: 6adb ldr r3, [r3, #44] @ 0x2c
  54073. 80166b0: 4a19 ldr r2, [pc, #100] @ (8016718 <xTaskGenericNotifyFromISR+0x1b8>)
  54074. 80166b2: 6013 str r3, [r2, #0]
  54075. 80166b4: 6b3b ldr r3, [r7, #48] @ 0x30
  54076. 80166b6: 6ada ldr r2, [r3, #44] @ 0x2c
  54077. 80166b8: 4613 mov r3, r2
  54078. 80166ba: 009b lsls r3, r3, #2
  54079. 80166bc: 4413 add r3, r2
  54080. 80166be: 009b lsls r3, r3, #2
  54081. 80166c0: 4a16 ldr r2, [pc, #88] @ (801671c <xTaskGenericNotifyFromISR+0x1bc>)
  54082. 80166c2: 441a add r2, r3
  54083. 80166c4: 6b3b ldr r3, [r7, #48] @ 0x30
  54084. 80166c6: 3304 adds r3, #4
  54085. 80166c8: 4619 mov r1, r3
  54086. 80166ca: 4610 mov r0, r2
  54087. 80166cc: f7fd fc1d bl 8013f0a <vListInsertEnd>
  54088. 80166d0: e005 b.n 80166de <xTaskGenericNotifyFromISR+0x17e>
  54089. }
  54090. else
  54091. {
  54092. /* The delayed and ready lists cannot be accessed, so hold
  54093. this task pending until the scheduler is resumed. */
  54094. vListInsertEnd( &( xPendingReadyList ), &( pxTCB->xEventListItem ) );
  54095. 80166d2: 6b3b ldr r3, [r7, #48] @ 0x30
  54096. 80166d4: 3318 adds r3, #24
  54097. 80166d6: 4619 mov r1, r3
  54098. 80166d8: 4811 ldr r0, [pc, #68] @ (8016720 <xTaskGenericNotifyFromISR+0x1c0>)
  54099. 80166da: f7fd fc16 bl 8013f0a <vListInsertEnd>
  54100. }
  54101. if( pxTCB->uxPriority > pxCurrentTCB->uxPriority )
  54102. 80166de: 6b3b ldr r3, [r7, #48] @ 0x30
  54103. 80166e0: 6ada ldr r2, [r3, #44] @ 0x2c
  54104. 80166e2: 4b10 ldr r3, [pc, #64] @ (8016724 <xTaskGenericNotifyFromISR+0x1c4>)
  54105. 80166e4: 681b ldr r3, [r3, #0]
  54106. 80166e6: 6adb ldr r3, [r3, #44] @ 0x2c
  54107. 80166e8: 429a cmp r2, r3
  54108. 80166ea: d908 bls.n 80166fe <xTaskGenericNotifyFromISR+0x19e>
  54109. {
  54110. /* The notified task has a priority above the currently
  54111. executing task so a yield is required. */
  54112. if( pxHigherPriorityTaskWoken != NULL )
  54113. 80166ec: 6c3b ldr r3, [r7, #64] @ 0x40
  54114. 80166ee: 2b00 cmp r3, #0
  54115. 80166f0: d002 beq.n 80166f8 <xTaskGenericNotifyFromISR+0x198>
  54116. {
  54117. *pxHigherPriorityTaskWoken = pdTRUE;
  54118. 80166f2: 6c3b ldr r3, [r7, #64] @ 0x40
  54119. 80166f4: 2201 movs r2, #1
  54120. 80166f6: 601a str r2, [r3, #0]
  54121. }
  54122. /* Mark that a yield is pending in case the user is not
  54123. using the "xHigherPriorityTaskWoken" parameter to an ISR
  54124. safe FreeRTOS function. */
  54125. xYieldPending = pdTRUE;
  54126. 80166f8: 4b0b ldr r3, [pc, #44] @ (8016728 <xTaskGenericNotifyFromISR+0x1c8>)
  54127. 80166fa: 2201 movs r2, #1
  54128. 80166fc: 601a str r2, [r3, #0]
  54129. 80166fe: 6afb ldr r3, [r7, #44] @ 0x2c
  54130. 8016700: 613b str r3, [r7, #16]
  54131. __asm volatile
  54132. 8016702: 693b ldr r3, [r7, #16]
  54133. 8016704: f383 8811 msr BASEPRI, r3
  54134. }
  54135. 8016708: bf00 nop
  54136. }
  54137. }
  54138. }
  54139. portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus );
  54140. return xReturn;
  54141. 801670a: 6b7b ldr r3, [r7, #52] @ 0x34
  54142. }
  54143. 801670c: 4618 mov r0, r3
  54144. 801670e: 3738 adds r7, #56 @ 0x38
  54145. 8016710: 46bd mov sp, r7
  54146. 8016712: bd80 pop {r7, pc}
  54147. 8016714: 24002b3c .word 0x24002b3c
  54148. 8016718: 24002b1c .word 0x24002b1c
  54149. 801671c: 24002644 .word 0x24002644
  54150. 8016720: 24002ad4 .word 0x24002ad4
  54151. 8016724: 24002640 .word 0x24002640
  54152. 8016728: 24002b28 .word 0x24002b28
  54153. 0801672c <xTaskNotifyStateClear>:
  54154. /*-----------------------------------------------------------*/
  54155. #if( configUSE_TASK_NOTIFICATIONS == 1 )
  54156. BaseType_t xTaskNotifyStateClear( TaskHandle_t xTask )
  54157. {
  54158. 801672c: b580 push {r7, lr}
  54159. 801672e: b084 sub sp, #16
  54160. 8016730: af00 add r7, sp, #0
  54161. 8016732: 6078 str r0, [r7, #4]
  54162. TCB_t *pxTCB;
  54163. BaseType_t xReturn;
  54164. /* If null is passed in here then it is the calling task that is having
  54165. its notification state cleared. */
  54166. pxTCB = prvGetTCBFromHandle( xTask );
  54167. 8016734: 687b ldr r3, [r7, #4]
  54168. 8016736: 2b00 cmp r3, #0
  54169. 8016738: d102 bne.n 8016740 <xTaskNotifyStateClear+0x14>
  54170. 801673a: 4b0e ldr r3, [pc, #56] @ (8016774 <xTaskNotifyStateClear+0x48>)
  54171. 801673c: 681b ldr r3, [r3, #0]
  54172. 801673e: e000 b.n 8016742 <xTaskNotifyStateClear+0x16>
  54173. 8016740: 687b ldr r3, [r7, #4]
  54174. 8016742: 60bb str r3, [r7, #8]
  54175. taskENTER_CRITICAL();
  54176. 8016744: f000 fde0 bl 8017308 <vPortEnterCritical>
  54177. {
  54178. if( pxTCB->ucNotifyState == taskNOTIFICATION_RECEIVED )
  54179. 8016748: 68bb ldr r3, [r7, #8]
  54180. 801674a: f893 30a4 ldrb.w r3, [r3, #164] @ 0xa4
  54181. 801674e: b2db uxtb r3, r3
  54182. 8016750: 2b02 cmp r3, #2
  54183. 8016752: d106 bne.n 8016762 <xTaskNotifyStateClear+0x36>
  54184. {
  54185. pxTCB->ucNotifyState = taskNOT_WAITING_NOTIFICATION;
  54186. 8016754: 68bb ldr r3, [r7, #8]
  54187. 8016756: 2200 movs r2, #0
  54188. 8016758: f883 20a4 strb.w r2, [r3, #164] @ 0xa4
  54189. xReturn = pdPASS;
  54190. 801675c: 2301 movs r3, #1
  54191. 801675e: 60fb str r3, [r7, #12]
  54192. 8016760: e001 b.n 8016766 <xTaskNotifyStateClear+0x3a>
  54193. }
  54194. else
  54195. {
  54196. xReturn = pdFAIL;
  54197. 8016762: 2300 movs r3, #0
  54198. 8016764: 60fb str r3, [r7, #12]
  54199. }
  54200. }
  54201. taskEXIT_CRITICAL();
  54202. 8016766: f000 fe01 bl 801736c <vPortExitCritical>
  54203. return xReturn;
  54204. 801676a: 68fb ldr r3, [r7, #12]
  54205. }
  54206. 801676c: 4618 mov r0, r3
  54207. 801676e: 3710 adds r7, #16
  54208. 8016770: 46bd mov sp, r7
  54209. 8016772: bd80 pop {r7, pc}
  54210. 8016774: 24002640 .word 0x24002640
  54211. 08016778 <prvAddCurrentTaskToDelayedList>:
  54212. #endif
  54213. /*-----------------------------------------------------------*/
  54214. static void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait, const BaseType_t xCanBlockIndefinitely )
  54215. {
  54216. 8016778: b580 push {r7, lr}
  54217. 801677a: b084 sub sp, #16
  54218. 801677c: af00 add r7, sp, #0
  54219. 801677e: 6078 str r0, [r7, #4]
  54220. 8016780: 6039 str r1, [r7, #0]
  54221. TickType_t xTimeToWake;
  54222. const TickType_t xConstTickCount = xTickCount;
  54223. 8016782: 4b21 ldr r3, [pc, #132] @ (8016808 <prvAddCurrentTaskToDelayedList+0x90>)
  54224. 8016784: 681b ldr r3, [r3, #0]
  54225. 8016786: 60fb str r3, [r7, #12]
  54226. }
  54227. #endif
  54228. /* Remove the task from the ready list before adding it to the blocked list
  54229. as the same list item is used for both lists. */
  54230. if( uxListRemove( &( pxCurrentTCB->xStateListItem ) ) == ( UBaseType_t ) 0 )
  54231. 8016788: 4b20 ldr r3, [pc, #128] @ (801680c <prvAddCurrentTaskToDelayedList+0x94>)
  54232. 801678a: 681b ldr r3, [r3, #0]
  54233. 801678c: 3304 adds r3, #4
  54234. 801678e: 4618 mov r0, r3
  54235. 8016790: f7fd fc18 bl 8013fc4 <uxListRemove>
  54236. mtCOVERAGE_TEST_MARKER();
  54237. }
  54238. #if ( INCLUDE_vTaskSuspend == 1 )
  54239. {
  54240. if( ( xTicksToWait == portMAX_DELAY ) && ( xCanBlockIndefinitely != pdFALSE ) )
  54241. 8016794: 687b ldr r3, [r7, #4]
  54242. 8016796: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  54243. 801679a: d10a bne.n 80167b2 <prvAddCurrentTaskToDelayedList+0x3a>
  54244. 801679c: 683b ldr r3, [r7, #0]
  54245. 801679e: 2b00 cmp r3, #0
  54246. 80167a0: d007 beq.n 80167b2 <prvAddCurrentTaskToDelayedList+0x3a>
  54247. {
  54248. /* Add the task to the suspended task list instead of a delayed task
  54249. list to ensure it is not woken by a timing event. It will block
  54250. indefinitely. */
  54251. vListInsertEnd( &xSuspendedTaskList, &( pxCurrentTCB->xStateListItem ) );
  54252. 80167a2: 4b1a ldr r3, [pc, #104] @ (801680c <prvAddCurrentTaskToDelayedList+0x94>)
  54253. 80167a4: 681b ldr r3, [r3, #0]
  54254. 80167a6: 3304 adds r3, #4
  54255. 80167a8: 4619 mov r1, r3
  54256. 80167aa: 4819 ldr r0, [pc, #100] @ (8016810 <prvAddCurrentTaskToDelayedList+0x98>)
  54257. 80167ac: f7fd fbad bl 8013f0a <vListInsertEnd>
  54258. /* Avoid compiler warning when INCLUDE_vTaskSuspend is not 1. */
  54259. ( void ) xCanBlockIndefinitely;
  54260. }
  54261. #endif /* INCLUDE_vTaskSuspend */
  54262. }
  54263. 80167b0: e026 b.n 8016800 <prvAddCurrentTaskToDelayedList+0x88>
  54264. xTimeToWake = xConstTickCount + xTicksToWait;
  54265. 80167b2: 68fa ldr r2, [r7, #12]
  54266. 80167b4: 687b ldr r3, [r7, #4]
  54267. 80167b6: 4413 add r3, r2
  54268. 80167b8: 60bb str r3, [r7, #8]
  54269. listSET_LIST_ITEM_VALUE( &( pxCurrentTCB->xStateListItem ), xTimeToWake );
  54270. 80167ba: 4b14 ldr r3, [pc, #80] @ (801680c <prvAddCurrentTaskToDelayedList+0x94>)
  54271. 80167bc: 681b ldr r3, [r3, #0]
  54272. 80167be: 68ba ldr r2, [r7, #8]
  54273. 80167c0: 605a str r2, [r3, #4]
  54274. if( xTimeToWake < xConstTickCount )
  54275. 80167c2: 68ba ldr r2, [r7, #8]
  54276. 80167c4: 68fb ldr r3, [r7, #12]
  54277. 80167c6: 429a cmp r2, r3
  54278. 80167c8: d209 bcs.n 80167de <prvAddCurrentTaskToDelayedList+0x66>
  54279. vListInsert( pxOverflowDelayedTaskList, &( pxCurrentTCB->xStateListItem ) );
  54280. 80167ca: 4b12 ldr r3, [pc, #72] @ (8016814 <prvAddCurrentTaskToDelayedList+0x9c>)
  54281. 80167cc: 681a ldr r2, [r3, #0]
  54282. 80167ce: 4b0f ldr r3, [pc, #60] @ (801680c <prvAddCurrentTaskToDelayedList+0x94>)
  54283. 80167d0: 681b ldr r3, [r3, #0]
  54284. 80167d2: 3304 adds r3, #4
  54285. 80167d4: 4619 mov r1, r3
  54286. 80167d6: 4610 mov r0, r2
  54287. 80167d8: f7fd fbbb bl 8013f52 <vListInsert>
  54288. }
  54289. 80167dc: e010 b.n 8016800 <prvAddCurrentTaskToDelayedList+0x88>
  54290. vListInsert( pxDelayedTaskList, &( pxCurrentTCB->xStateListItem ) );
  54291. 80167de: 4b0e ldr r3, [pc, #56] @ (8016818 <prvAddCurrentTaskToDelayedList+0xa0>)
  54292. 80167e0: 681a ldr r2, [r3, #0]
  54293. 80167e2: 4b0a ldr r3, [pc, #40] @ (801680c <prvAddCurrentTaskToDelayedList+0x94>)
  54294. 80167e4: 681b ldr r3, [r3, #0]
  54295. 80167e6: 3304 adds r3, #4
  54296. 80167e8: 4619 mov r1, r3
  54297. 80167ea: 4610 mov r0, r2
  54298. 80167ec: f7fd fbb1 bl 8013f52 <vListInsert>
  54299. if( xTimeToWake < xNextTaskUnblockTime )
  54300. 80167f0: 4b0a ldr r3, [pc, #40] @ (801681c <prvAddCurrentTaskToDelayedList+0xa4>)
  54301. 80167f2: 681b ldr r3, [r3, #0]
  54302. 80167f4: 68ba ldr r2, [r7, #8]
  54303. 80167f6: 429a cmp r2, r3
  54304. 80167f8: d202 bcs.n 8016800 <prvAddCurrentTaskToDelayedList+0x88>
  54305. xNextTaskUnblockTime = xTimeToWake;
  54306. 80167fa: 4a08 ldr r2, [pc, #32] @ (801681c <prvAddCurrentTaskToDelayedList+0xa4>)
  54307. 80167fc: 68bb ldr r3, [r7, #8]
  54308. 80167fe: 6013 str r3, [r2, #0]
  54309. }
  54310. 8016800: bf00 nop
  54311. 8016802: 3710 adds r7, #16
  54312. 8016804: 46bd mov sp, r7
  54313. 8016806: bd80 pop {r7, pc}
  54314. 8016808: 24002b18 .word 0x24002b18
  54315. 801680c: 24002640 .word 0x24002640
  54316. 8016810: 24002b00 .word 0x24002b00
  54317. 8016814: 24002ad0 .word 0x24002ad0
  54318. 8016818: 24002acc .word 0x24002acc
  54319. 801681c: 24002b34 .word 0x24002b34
  54320. 08016820 <xTimerCreateTimerTask>:
  54321. TimerCallbackFunction_t pxCallbackFunction,
  54322. Timer_t *pxNewTimer ) PRIVILEGED_FUNCTION;
  54323. /*-----------------------------------------------------------*/
  54324. BaseType_t xTimerCreateTimerTask( void )
  54325. {
  54326. 8016820: b580 push {r7, lr}
  54327. 8016822: b08a sub sp, #40 @ 0x28
  54328. 8016824: af04 add r7, sp, #16
  54329. BaseType_t xReturn = pdFAIL;
  54330. 8016826: 2300 movs r3, #0
  54331. 8016828: 617b str r3, [r7, #20]
  54332. /* This function is called when the scheduler is started if
  54333. configUSE_TIMERS is set to 1. Check that the infrastructure used by the
  54334. timer service task has been created/initialised. If timers have already
  54335. been created then the initialisation will already have been performed. */
  54336. prvCheckForValidListAndQueue();
  54337. 801682a: f000 fbb1 bl 8016f90 <prvCheckForValidListAndQueue>
  54338. if( xTimerQueue != NULL )
  54339. 801682e: 4b1d ldr r3, [pc, #116] @ (80168a4 <xTimerCreateTimerTask+0x84>)
  54340. 8016830: 681b ldr r3, [r3, #0]
  54341. 8016832: 2b00 cmp r3, #0
  54342. 8016834: d021 beq.n 801687a <xTimerCreateTimerTask+0x5a>
  54343. {
  54344. #if( configSUPPORT_STATIC_ALLOCATION == 1 )
  54345. {
  54346. StaticTask_t *pxTimerTaskTCBBuffer = NULL;
  54347. 8016836: 2300 movs r3, #0
  54348. 8016838: 60fb str r3, [r7, #12]
  54349. StackType_t *pxTimerTaskStackBuffer = NULL;
  54350. 801683a: 2300 movs r3, #0
  54351. 801683c: 60bb str r3, [r7, #8]
  54352. uint32_t ulTimerTaskStackSize;
  54353. vApplicationGetTimerTaskMemory( &pxTimerTaskTCBBuffer, &pxTimerTaskStackBuffer, &ulTimerTaskStackSize );
  54354. 801683e: 1d3a adds r2, r7, #4
  54355. 8016840: f107 0108 add.w r1, r7, #8
  54356. 8016844: f107 030c add.w r3, r7, #12
  54357. 8016848: 4618 mov r0, r3
  54358. 801684a: f7fd fb17 bl 8013e7c <vApplicationGetTimerTaskMemory>
  54359. xTimerTaskHandle = xTaskCreateStatic( prvTimerTask,
  54360. 801684e: 6879 ldr r1, [r7, #4]
  54361. 8016850: 68bb ldr r3, [r7, #8]
  54362. 8016852: 68fa ldr r2, [r7, #12]
  54363. 8016854: 9202 str r2, [sp, #8]
  54364. 8016856: 9301 str r3, [sp, #4]
  54365. 8016858: 2302 movs r3, #2
  54366. 801685a: 9300 str r3, [sp, #0]
  54367. 801685c: 2300 movs r3, #0
  54368. 801685e: 460a mov r2, r1
  54369. 8016860: 4911 ldr r1, [pc, #68] @ (80168a8 <xTimerCreateTimerTask+0x88>)
  54370. 8016862: 4812 ldr r0, [pc, #72] @ (80168ac <xTimerCreateTimerTask+0x8c>)
  54371. 8016864: f7fe fd2f bl 80152c6 <xTaskCreateStatic>
  54372. 8016868: 4603 mov r3, r0
  54373. 801686a: 4a11 ldr r2, [pc, #68] @ (80168b0 <xTimerCreateTimerTask+0x90>)
  54374. 801686c: 6013 str r3, [r2, #0]
  54375. NULL,
  54376. ( ( UBaseType_t ) configTIMER_TASK_PRIORITY ) | portPRIVILEGE_BIT,
  54377. pxTimerTaskStackBuffer,
  54378. pxTimerTaskTCBBuffer );
  54379. if( xTimerTaskHandle != NULL )
  54380. 801686e: 4b10 ldr r3, [pc, #64] @ (80168b0 <xTimerCreateTimerTask+0x90>)
  54381. 8016870: 681b ldr r3, [r3, #0]
  54382. 8016872: 2b00 cmp r3, #0
  54383. 8016874: d001 beq.n 801687a <xTimerCreateTimerTask+0x5a>
  54384. {
  54385. xReturn = pdPASS;
  54386. 8016876: 2301 movs r3, #1
  54387. 8016878: 617b str r3, [r7, #20]
  54388. else
  54389. {
  54390. mtCOVERAGE_TEST_MARKER();
  54391. }
  54392. configASSERT( xReturn );
  54393. 801687a: 697b ldr r3, [r7, #20]
  54394. 801687c: 2b00 cmp r3, #0
  54395. 801687e: d10b bne.n 8016898 <xTimerCreateTimerTask+0x78>
  54396. __asm volatile
  54397. 8016880: f04f 0350 mov.w r3, #80 @ 0x50
  54398. 8016884: f383 8811 msr BASEPRI, r3
  54399. 8016888: f3bf 8f6f isb sy
  54400. 801688c: f3bf 8f4f dsb sy
  54401. 8016890: 613b str r3, [r7, #16]
  54402. }
  54403. 8016892: bf00 nop
  54404. 8016894: bf00 nop
  54405. 8016896: e7fd b.n 8016894 <xTimerCreateTimerTask+0x74>
  54406. return xReturn;
  54407. 8016898: 697b ldr r3, [r7, #20]
  54408. }
  54409. 801689a: 4618 mov r0, r3
  54410. 801689c: 3718 adds r7, #24
  54411. 801689e: 46bd mov sp, r7
  54412. 80168a0: bd80 pop {r7, pc}
  54413. 80168a2: bf00 nop
  54414. 80168a4: 24002b70 .word 0x24002b70
  54415. 80168a8: 08018954 .word 0x08018954
  54416. 80168ac: 08016b29 .word 0x08016b29
  54417. 80168b0: 24002b74 .word 0x24002b74
  54418. 080168b4 <xTimerCreate>:
  54419. TimerHandle_t xTimerCreate( const char * const pcTimerName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
  54420. const TickType_t xTimerPeriodInTicks,
  54421. const UBaseType_t uxAutoReload,
  54422. void * const pvTimerID,
  54423. TimerCallbackFunction_t pxCallbackFunction )
  54424. {
  54425. 80168b4: b580 push {r7, lr}
  54426. 80168b6: b088 sub sp, #32
  54427. 80168b8: af02 add r7, sp, #8
  54428. 80168ba: 60f8 str r0, [r7, #12]
  54429. 80168bc: 60b9 str r1, [r7, #8]
  54430. 80168be: 607a str r2, [r7, #4]
  54431. 80168c0: 603b str r3, [r7, #0]
  54432. Timer_t *pxNewTimer;
  54433. pxNewTimer = ( Timer_t * ) pvPortMalloc( sizeof( Timer_t ) ); /*lint !e9087 !e9079 All values returned by pvPortMalloc() have at least the alignment required by the MCU's stack, and the first member of Timer_t is always a pointer to the timer's mame. */
  54434. 80168c2: 202c movs r0, #44 @ 0x2c
  54435. 80168c4: f000 fe42 bl 801754c <pvPortMalloc>
  54436. 80168c8: 6178 str r0, [r7, #20]
  54437. if( pxNewTimer != NULL )
  54438. 80168ca: 697b ldr r3, [r7, #20]
  54439. 80168cc: 2b00 cmp r3, #0
  54440. 80168ce: d00d beq.n 80168ec <xTimerCreate+0x38>
  54441. {
  54442. /* Status is thus far zero as the timer is not created statically
  54443. and has not been started. The auto-reload bit may get set in
  54444. prvInitialiseNewTimer. */
  54445. pxNewTimer->ucStatus = 0x00;
  54446. 80168d0: 697b ldr r3, [r7, #20]
  54447. 80168d2: 2200 movs r2, #0
  54448. 80168d4: f883 2028 strb.w r2, [r3, #40] @ 0x28
  54449. prvInitialiseNewTimer( pcTimerName, xTimerPeriodInTicks, uxAutoReload, pvTimerID, pxCallbackFunction, pxNewTimer );
  54450. 80168d8: 697b ldr r3, [r7, #20]
  54451. 80168da: 9301 str r3, [sp, #4]
  54452. 80168dc: 6a3b ldr r3, [r7, #32]
  54453. 80168de: 9300 str r3, [sp, #0]
  54454. 80168e0: 683b ldr r3, [r7, #0]
  54455. 80168e2: 687a ldr r2, [r7, #4]
  54456. 80168e4: 68b9 ldr r1, [r7, #8]
  54457. 80168e6: 68f8 ldr r0, [r7, #12]
  54458. 80168e8: f000 f845 bl 8016976 <prvInitialiseNewTimer>
  54459. }
  54460. return pxNewTimer;
  54461. 80168ec: 697b ldr r3, [r7, #20]
  54462. }
  54463. 80168ee: 4618 mov r0, r3
  54464. 80168f0: 3718 adds r7, #24
  54465. 80168f2: 46bd mov sp, r7
  54466. 80168f4: bd80 pop {r7, pc}
  54467. 080168f6 <xTimerCreateStatic>:
  54468. const TickType_t xTimerPeriodInTicks,
  54469. const UBaseType_t uxAutoReload,
  54470. void * const pvTimerID,
  54471. TimerCallbackFunction_t pxCallbackFunction,
  54472. StaticTimer_t *pxTimerBuffer )
  54473. {
  54474. 80168f6: b580 push {r7, lr}
  54475. 80168f8: b08a sub sp, #40 @ 0x28
  54476. 80168fa: af02 add r7, sp, #8
  54477. 80168fc: 60f8 str r0, [r7, #12]
  54478. 80168fe: 60b9 str r1, [r7, #8]
  54479. 8016900: 607a str r2, [r7, #4]
  54480. 8016902: 603b str r3, [r7, #0]
  54481. #if( configASSERT_DEFINED == 1 )
  54482. {
  54483. /* Sanity check that the size of the structure used to declare a
  54484. variable of type StaticTimer_t equals the size of the real timer
  54485. structure. */
  54486. volatile size_t xSize = sizeof( StaticTimer_t );
  54487. 8016904: 232c movs r3, #44 @ 0x2c
  54488. 8016906: 613b str r3, [r7, #16]
  54489. configASSERT( xSize == sizeof( Timer_t ) );
  54490. 8016908: 693b ldr r3, [r7, #16]
  54491. 801690a: 2b2c cmp r3, #44 @ 0x2c
  54492. 801690c: d00b beq.n 8016926 <xTimerCreateStatic+0x30>
  54493. __asm volatile
  54494. 801690e: f04f 0350 mov.w r3, #80 @ 0x50
  54495. 8016912: f383 8811 msr BASEPRI, r3
  54496. 8016916: f3bf 8f6f isb sy
  54497. 801691a: f3bf 8f4f dsb sy
  54498. 801691e: 61bb str r3, [r7, #24]
  54499. }
  54500. 8016920: bf00 nop
  54501. 8016922: bf00 nop
  54502. 8016924: e7fd b.n 8016922 <xTimerCreateStatic+0x2c>
  54503. ( void ) xSize; /* Keeps lint quiet when configASSERT() is not defined. */
  54504. 8016926: 693b ldr r3, [r7, #16]
  54505. }
  54506. #endif /* configASSERT_DEFINED */
  54507. /* A pointer to a StaticTimer_t structure MUST be provided, use it. */
  54508. configASSERT( pxTimerBuffer );
  54509. 8016928: 6afb ldr r3, [r7, #44] @ 0x2c
  54510. 801692a: 2b00 cmp r3, #0
  54511. 801692c: d10b bne.n 8016946 <xTimerCreateStatic+0x50>
  54512. __asm volatile
  54513. 801692e: f04f 0350 mov.w r3, #80 @ 0x50
  54514. 8016932: f383 8811 msr BASEPRI, r3
  54515. 8016936: f3bf 8f6f isb sy
  54516. 801693a: f3bf 8f4f dsb sy
  54517. 801693e: 617b str r3, [r7, #20]
  54518. }
  54519. 8016940: bf00 nop
  54520. 8016942: bf00 nop
  54521. 8016944: e7fd b.n 8016942 <xTimerCreateStatic+0x4c>
  54522. pxNewTimer = ( Timer_t * ) pxTimerBuffer; /*lint !e740 !e9087 StaticTimer_t is a pointer to a Timer_t, so guaranteed to be aligned and sized correctly (checked by an assert()), so this is safe. */
  54523. 8016946: 6afb ldr r3, [r7, #44] @ 0x2c
  54524. 8016948: 61fb str r3, [r7, #28]
  54525. if( pxNewTimer != NULL )
  54526. 801694a: 69fb ldr r3, [r7, #28]
  54527. 801694c: 2b00 cmp r3, #0
  54528. 801694e: d00d beq.n 801696c <xTimerCreateStatic+0x76>
  54529. {
  54530. /* Timers can be created statically or dynamically so note this
  54531. timer was created statically in case it is later deleted. The
  54532. auto-reload bit may get set in prvInitialiseNewTimer(). */
  54533. pxNewTimer->ucStatus = tmrSTATUS_IS_STATICALLY_ALLOCATED;
  54534. 8016950: 69fb ldr r3, [r7, #28]
  54535. 8016952: 2202 movs r2, #2
  54536. 8016954: f883 2028 strb.w r2, [r3, #40] @ 0x28
  54537. prvInitialiseNewTimer( pcTimerName, xTimerPeriodInTicks, uxAutoReload, pvTimerID, pxCallbackFunction, pxNewTimer );
  54538. 8016958: 69fb ldr r3, [r7, #28]
  54539. 801695a: 9301 str r3, [sp, #4]
  54540. 801695c: 6abb ldr r3, [r7, #40] @ 0x28
  54541. 801695e: 9300 str r3, [sp, #0]
  54542. 8016960: 683b ldr r3, [r7, #0]
  54543. 8016962: 687a ldr r2, [r7, #4]
  54544. 8016964: 68b9 ldr r1, [r7, #8]
  54545. 8016966: 68f8 ldr r0, [r7, #12]
  54546. 8016968: f000 f805 bl 8016976 <prvInitialiseNewTimer>
  54547. }
  54548. return pxNewTimer;
  54549. 801696c: 69fb ldr r3, [r7, #28]
  54550. }
  54551. 801696e: 4618 mov r0, r3
  54552. 8016970: 3720 adds r7, #32
  54553. 8016972: 46bd mov sp, r7
  54554. 8016974: bd80 pop {r7, pc}
  54555. 08016976 <prvInitialiseNewTimer>:
  54556. const TickType_t xTimerPeriodInTicks,
  54557. const UBaseType_t uxAutoReload,
  54558. void * const pvTimerID,
  54559. TimerCallbackFunction_t pxCallbackFunction,
  54560. Timer_t *pxNewTimer )
  54561. {
  54562. 8016976: b580 push {r7, lr}
  54563. 8016978: b086 sub sp, #24
  54564. 801697a: af00 add r7, sp, #0
  54565. 801697c: 60f8 str r0, [r7, #12]
  54566. 801697e: 60b9 str r1, [r7, #8]
  54567. 8016980: 607a str r2, [r7, #4]
  54568. 8016982: 603b str r3, [r7, #0]
  54569. /* 0 is not a valid value for xTimerPeriodInTicks. */
  54570. configASSERT( ( xTimerPeriodInTicks > 0 ) );
  54571. 8016984: 68bb ldr r3, [r7, #8]
  54572. 8016986: 2b00 cmp r3, #0
  54573. 8016988: d10b bne.n 80169a2 <prvInitialiseNewTimer+0x2c>
  54574. __asm volatile
  54575. 801698a: f04f 0350 mov.w r3, #80 @ 0x50
  54576. 801698e: f383 8811 msr BASEPRI, r3
  54577. 8016992: f3bf 8f6f isb sy
  54578. 8016996: f3bf 8f4f dsb sy
  54579. 801699a: 617b str r3, [r7, #20]
  54580. }
  54581. 801699c: bf00 nop
  54582. 801699e: bf00 nop
  54583. 80169a0: e7fd b.n 801699e <prvInitialiseNewTimer+0x28>
  54584. if( pxNewTimer != NULL )
  54585. 80169a2: 6a7b ldr r3, [r7, #36] @ 0x24
  54586. 80169a4: 2b00 cmp r3, #0
  54587. 80169a6: d01e beq.n 80169e6 <prvInitialiseNewTimer+0x70>
  54588. {
  54589. /* Ensure the infrastructure used by the timer service task has been
  54590. created/initialised. */
  54591. prvCheckForValidListAndQueue();
  54592. 80169a8: f000 faf2 bl 8016f90 <prvCheckForValidListAndQueue>
  54593. /* Initialise the timer structure members using the function
  54594. parameters. */
  54595. pxNewTimer->pcTimerName = pcTimerName;
  54596. 80169ac: 6a7b ldr r3, [r7, #36] @ 0x24
  54597. 80169ae: 68fa ldr r2, [r7, #12]
  54598. 80169b0: 601a str r2, [r3, #0]
  54599. pxNewTimer->xTimerPeriodInTicks = xTimerPeriodInTicks;
  54600. 80169b2: 6a7b ldr r3, [r7, #36] @ 0x24
  54601. 80169b4: 68ba ldr r2, [r7, #8]
  54602. 80169b6: 619a str r2, [r3, #24]
  54603. pxNewTimer->pvTimerID = pvTimerID;
  54604. 80169b8: 6a7b ldr r3, [r7, #36] @ 0x24
  54605. 80169ba: 683a ldr r2, [r7, #0]
  54606. 80169bc: 61da str r2, [r3, #28]
  54607. pxNewTimer->pxCallbackFunction = pxCallbackFunction;
  54608. 80169be: 6a7b ldr r3, [r7, #36] @ 0x24
  54609. 80169c0: 6a3a ldr r2, [r7, #32]
  54610. 80169c2: 621a str r2, [r3, #32]
  54611. vListInitialiseItem( &( pxNewTimer->xTimerListItem ) );
  54612. 80169c4: 6a7b ldr r3, [r7, #36] @ 0x24
  54613. 80169c6: 3304 adds r3, #4
  54614. 80169c8: 4618 mov r0, r3
  54615. 80169ca: f7fd fa91 bl 8013ef0 <vListInitialiseItem>
  54616. if( uxAutoReload != pdFALSE )
  54617. 80169ce: 687b ldr r3, [r7, #4]
  54618. 80169d0: 2b00 cmp r3, #0
  54619. 80169d2: d008 beq.n 80169e6 <prvInitialiseNewTimer+0x70>
  54620. {
  54621. pxNewTimer->ucStatus |= tmrSTATUS_IS_AUTORELOAD;
  54622. 80169d4: 6a7b ldr r3, [r7, #36] @ 0x24
  54623. 80169d6: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  54624. 80169da: f043 0304 orr.w r3, r3, #4
  54625. 80169de: b2da uxtb r2, r3
  54626. 80169e0: 6a7b ldr r3, [r7, #36] @ 0x24
  54627. 80169e2: f883 2028 strb.w r2, [r3, #40] @ 0x28
  54628. }
  54629. traceTIMER_CREATE( pxNewTimer );
  54630. }
  54631. }
  54632. 80169e6: bf00 nop
  54633. 80169e8: 3718 adds r7, #24
  54634. 80169ea: 46bd mov sp, r7
  54635. 80169ec: bd80 pop {r7, pc}
  54636. ...
  54637. 080169f0 <xTimerGenericCommand>:
  54638. /*-----------------------------------------------------------*/
  54639. BaseType_t xTimerGenericCommand( TimerHandle_t xTimer, const BaseType_t xCommandID, const TickType_t xOptionalValue, BaseType_t * const pxHigherPriorityTaskWoken, const TickType_t xTicksToWait )
  54640. {
  54641. 80169f0: b580 push {r7, lr}
  54642. 80169f2: b08a sub sp, #40 @ 0x28
  54643. 80169f4: af00 add r7, sp, #0
  54644. 80169f6: 60f8 str r0, [r7, #12]
  54645. 80169f8: 60b9 str r1, [r7, #8]
  54646. 80169fa: 607a str r2, [r7, #4]
  54647. 80169fc: 603b str r3, [r7, #0]
  54648. BaseType_t xReturn = pdFAIL;
  54649. 80169fe: 2300 movs r3, #0
  54650. 8016a00: 627b str r3, [r7, #36] @ 0x24
  54651. DaemonTaskMessage_t xMessage;
  54652. configASSERT( xTimer );
  54653. 8016a02: 68fb ldr r3, [r7, #12]
  54654. 8016a04: 2b00 cmp r3, #0
  54655. 8016a06: d10b bne.n 8016a20 <xTimerGenericCommand+0x30>
  54656. __asm volatile
  54657. 8016a08: f04f 0350 mov.w r3, #80 @ 0x50
  54658. 8016a0c: f383 8811 msr BASEPRI, r3
  54659. 8016a10: f3bf 8f6f isb sy
  54660. 8016a14: f3bf 8f4f dsb sy
  54661. 8016a18: 623b str r3, [r7, #32]
  54662. }
  54663. 8016a1a: bf00 nop
  54664. 8016a1c: bf00 nop
  54665. 8016a1e: e7fd b.n 8016a1c <xTimerGenericCommand+0x2c>
  54666. /* Send a message to the timer service task to perform a particular action
  54667. on a particular timer definition. */
  54668. if( xTimerQueue != NULL )
  54669. 8016a20: 4b19 ldr r3, [pc, #100] @ (8016a88 <xTimerGenericCommand+0x98>)
  54670. 8016a22: 681b ldr r3, [r3, #0]
  54671. 8016a24: 2b00 cmp r3, #0
  54672. 8016a26: d02a beq.n 8016a7e <xTimerGenericCommand+0x8e>
  54673. {
  54674. /* Send a command to the timer service task to start the xTimer timer. */
  54675. xMessage.xMessageID = xCommandID;
  54676. 8016a28: 68bb ldr r3, [r7, #8]
  54677. 8016a2a: 613b str r3, [r7, #16]
  54678. xMessage.u.xTimerParameters.xMessageValue = xOptionalValue;
  54679. 8016a2c: 687b ldr r3, [r7, #4]
  54680. 8016a2e: 617b str r3, [r7, #20]
  54681. xMessage.u.xTimerParameters.pxTimer = xTimer;
  54682. 8016a30: 68fb ldr r3, [r7, #12]
  54683. 8016a32: 61bb str r3, [r7, #24]
  54684. if( xCommandID < tmrFIRST_FROM_ISR_COMMAND )
  54685. 8016a34: 68bb ldr r3, [r7, #8]
  54686. 8016a36: 2b05 cmp r3, #5
  54687. 8016a38: dc18 bgt.n 8016a6c <xTimerGenericCommand+0x7c>
  54688. {
  54689. if( xTaskGetSchedulerState() == taskSCHEDULER_RUNNING )
  54690. 8016a3a: f7ff fae1 bl 8016000 <xTaskGetSchedulerState>
  54691. 8016a3e: 4603 mov r3, r0
  54692. 8016a40: 2b02 cmp r3, #2
  54693. 8016a42: d109 bne.n 8016a58 <xTimerGenericCommand+0x68>
  54694. {
  54695. xReturn = xQueueSendToBack( xTimerQueue, &xMessage, xTicksToWait );
  54696. 8016a44: 4b10 ldr r3, [pc, #64] @ (8016a88 <xTimerGenericCommand+0x98>)
  54697. 8016a46: 6818 ldr r0, [r3, #0]
  54698. 8016a48: f107 0110 add.w r1, r7, #16
  54699. 8016a4c: 2300 movs r3, #0
  54700. 8016a4e: 6b3a ldr r2, [r7, #48] @ 0x30
  54701. 8016a50: f7fd fce0 bl 8014414 <xQueueGenericSend>
  54702. 8016a54: 6278 str r0, [r7, #36] @ 0x24
  54703. 8016a56: e012 b.n 8016a7e <xTimerGenericCommand+0x8e>
  54704. }
  54705. else
  54706. {
  54707. xReturn = xQueueSendToBack( xTimerQueue, &xMessage, tmrNO_DELAY );
  54708. 8016a58: 4b0b ldr r3, [pc, #44] @ (8016a88 <xTimerGenericCommand+0x98>)
  54709. 8016a5a: 6818 ldr r0, [r3, #0]
  54710. 8016a5c: f107 0110 add.w r1, r7, #16
  54711. 8016a60: 2300 movs r3, #0
  54712. 8016a62: 2200 movs r2, #0
  54713. 8016a64: f7fd fcd6 bl 8014414 <xQueueGenericSend>
  54714. 8016a68: 6278 str r0, [r7, #36] @ 0x24
  54715. 8016a6a: e008 b.n 8016a7e <xTimerGenericCommand+0x8e>
  54716. }
  54717. }
  54718. else
  54719. {
  54720. xReturn = xQueueSendToBackFromISR( xTimerQueue, &xMessage, pxHigherPriorityTaskWoken );
  54721. 8016a6c: 4b06 ldr r3, [pc, #24] @ (8016a88 <xTimerGenericCommand+0x98>)
  54722. 8016a6e: 6818 ldr r0, [r3, #0]
  54723. 8016a70: f107 0110 add.w r1, r7, #16
  54724. 8016a74: 2300 movs r3, #0
  54725. 8016a76: 683a ldr r2, [r7, #0]
  54726. 8016a78: f7fd fdce bl 8014618 <xQueueGenericSendFromISR>
  54727. 8016a7c: 6278 str r0, [r7, #36] @ 0x24
  54728. else
  54729. {
  54730. mtCOVERAGE_TEST_MARKER();
  54731. }
  54732. return xReturn;
  54733. 8016a7e: 6a7b ldr r3, [r7, #36] @ 0x24
  54734. }
  54735. 8016a80: 4618 mov r0, r3
  54736. 8016a82: 3728 adds r7, #40 @ 0x28
  54737. 8016a84: 46bd mov sp, r7
  54738. 8016a86: bd80 pop {r7, pc}
  54739. 8016a88: 24002b70 .word 0x24002b70
  54740. 08016a8c <prvProcessExpiredTimer>:
  54741. return pxTimer->pcTimerName;
  54742. }
  54743. /*-----------------------------------------------------------*/
  54744. static void prvProcessExpiredTimer( const TickType_t xNextExpireTime, const TickType_t xTimeNow )
  54745. {
  54746. 8016a8c: b580 push {r7, lr}
  54747. 8016a8e: b088 sub sp, #32
  54748. 8016a90: af02 add r7, sp, #8
  54749. 8016a92: 6078 str r0, [r7, #4]
  54750. 8016a94: 6039 str r1, [r7, #0]
  54751. BaseType_t xResult;
  54752. Timer_t * const pxTimer = ( Timer_t * ) listGET_OWNER_OF_HEAD_ENTRY( pxCurrentTimerList ); /*lint !e9087 !e9079 void * is used as this macro is used with tasks and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */
  54753. 8016a96: 4b23 ldr r3, [pc, #140] @ (8016b24 <prvProcessExpiredTimer+0x98>)
  54754. 8016a98: 681b ldr r3, [r3, #0]
  54755. 8016a9a: 68db ldr r3, [r3, #12]
  54756. 8016a9c: 68db ldr r3, [r3, #12]
  54757. 8016a9e: 617b str r3, [r7, #20]
  54758. /* Remove the timer from the list of active timers. A check has already
  54759. been performed to ensure the list is not empty. */
  54760. ( void ) uxListRemove( &( pxTimer->xTimerListItem ) );
  54761. 8016aa0: 697b ldr r3, [r7, #20]
  54762. 8016aa2: 3304 adds r3, #4
  54763. 8016aa4: 4618 mov r0, r3
  54764. 8016aa6: f7fd fa8d bl 8013fc4 <uxListRemove>
  54765. traceTIMER_EXPIRED( pxTimer );
  54766. /* If the timer is an auto-reload timer then calculate the next
  54767. expiry time and re-insert the timer in the list of active timers. */
  54768. if( ( pxTimer->ucStatus & tmrSTATUS_IS_AUTORELOAD ) != 0 )
  54769. 8016aaa: 697b ldr r3, [r7, #20]
  54770. 8016aac: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  54771. 8016ab0: f003 0304 and.w r3, r3, #4
  54772. 8016ab4: 2b00 cmp r3, #0
  54773. 8016ab6: d023 beq.n 8016b00 <prvProcessExpiredTimer+0x74>
  54774. {
  54775. /* The timer is inserted into a list using a time relative to anything
  54776. other than the current time. It will therefore be inserted into the
  54777. correct list relative to the time this task thinks it is now. */
  54778. if( prvInsertTimerInActiveList( pxTimer, ( xNextExpireTime + pxTimer->xTimerPeriodInTicks ), xTimeNow, xNextExpireTime ) != pdFALSE )
  54779. 8016ab8: 697b ldr r3, [r7, #20]
  54780. 8016aba: 699a ldr r2, [r3, #24]
  54781. 8016abc: 687b ldr r3, [r7, #4]
  54782. 8016abe: 18d1 adds r1, r2, r3
  54783. 8016ac0: 687b ldr r3, [r7, #4]
  54784. 8016ac2: 683a ldr r2, [r7, #0]
  54785. 8016ac4: 6978 ldr r0, [r7, #20]
  54786. 8016ac6: f000 f8d5 bl 8016c74 <prvInsertTimerInActiveList>
  54787. 8016aca: 4603 mov r3, r0
  54788. 8016acc: 2b00 cmp r3, #0
  54789. 8016ace: d020 beq.n 8016b12 <prvProcessExpiredTimer+0x86>
  54790. {
  54791. /* The timer expired before it was added to the active timer
  54792. list. Reload it now. */
  54793. xResult = xTimerGenericCommand( pxTimer, tmrCOMMAND_START_DONT_TRACE, xNextExpireTime, NULL, tmrNO_DELAY );
  54794. 8016ad0: 2300 movs r3, #0
  54795. 8016ad2: 9300 str r3, [sp, #0]
  54796. 8016ad4: 2300 movs r3, #0
  54797. 8016ad6: 687a ldr r2, [r7, #4]
  54798. 8016ad8: 2100 movs r1, #0
  54799. 8016ada: 6978 ldr r0, [r7, #20]
  54800. 8016adc: f7ff ff88 bl 80169f0 <xTimerGenericCommand>
  54801. 8016ae0: 6138 str r0, [r7, #16]
  54802. configASSERT( xResult );
  54803. 8016ae2: 693b ldr r3, [r7, #16]
  54804. 8016ae4: 2b00 cmp r3, #0
  54805. 8016ae6: d114 bne.n 8016b12 <prvProcessExpiredTimer+0x86>
  54806. __asm volatile
  54807. 8016ae8: f04f 0350 mov.w r3, #80 @ 0x50
  54808. 8016aec: f383 8811 msr BASEPRI, r3
  54809. 8016af0: f3bf 8f6f isb sy
  54810. 8016af4: f3bf 8f4f dsb sy
  54811. 8016af8: 60fb str r3, [r7, #12]
  54812. }
  54813. 8016afa: bf00 nop
  54814. 8016afc: bf00 nop
  54815. 8016afe: e7fd b.n 8016afc <prvProcessExpiredTimer+0x70>
  54816. mtCOVERAGE_TEST_MARKER();
  54817. }
  54818. }
  54819. else
  54820. {
  54821. pxTimer->ucStatus &= ~tmrSTATUS_IS_ACTIVE;
  54822. 8016b00: 697b ldr r3, [r7, #20]
  54823. 8016b02: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  54824. 8016b06: f023 0301 bic.w r3, r3, #1
  54825. 8016b0a: b2da uxtb r2, r3
  54826. 8016b0c: 697b ldr r3, [r7, #20]
  54827. 8016b0e: f883 2028 strb.w r2, [r3, #40] @ 0x28
  54828. mtCOVERAGE_TEST_MARKER();
  54829. }
  54830. /* Call the timer callback. */
  54831. pxTimer->pxCallbackFunction( ( TimerHandle_t ) pxTimer );
  54832. 8016b12: 697b ldr r3, [r7, #20]
  54833. 8016b14: 6a1b ldr r3, [r3, #32]
  54834. 8016b16: 6978 ldr r0, [r7, #20]
  54835. 8016b18: 4798 blx r3
  54836. }
  54837. 8016b1a: bf00 nop
  54838. 8016b1c: 3718 adds r7, #24
  54839. 8016b1e: 46bd mov sp, r7
  54840. 8016b20: bd80 pop {r7, pc}
  54841. 8016b22: bf00 nop
  54842. 8016b24: 24002b68 .word 0x24002b68
  54843. 08016b28 <prvTimerTask>:
  54844. /*-----------------------------------------------------------*/
  54845. static portTASK_FUNCTION( prvTimerTask, pvParameters )
  54846. {
  54847. 8016b28: b580 push {r7, lr}
  54848. 8016b2a: b084 sub sp, #16
  54849. 8016b2c: af00 add r7, sp, #0
  54850. 8016b2e: 6078 str r0, [r7, #4]
  54851. for( ;; )
  54852. {
  54853. /* Query the timers list to see if it contains any timers, and if so,
  54854. obtain the time at which the next timer will expire. */
  54855. xNextExpireTime = prvGetNextExpireTime( &xListWasEmpty );
  54856. 8016b30: f107 0308 add.w r3, r7, #8
  54857. 8016b34: 4618 mov r0, r3
  54858. 8016b36: f000 f859 bl 8016bec <prvGetNextExpireTime>
  54859. 8016b3a: 60f8 str r0, [r7, #12]
  54860. /* If a timer has expired, process it. Otherwise, block this task
  54861. until either a timer does expire, or a command is received. */
  54862. prvProcessTimerOrBlockTask( xNextExpireTime, xListWasEmpty );
  54863. 8016b3c: 68bb ldr r3, [r7, #8]
  54864. 8016b3e: 4619 mov r1, r3
  54865. 8016b40: 68f8 ldr r0, [r7, #12]
  54866. 8016b42: f000 f805 bl 8016b50 <prvProcessTimerOrBlockTask>
  54867. /* Empty the command queue. */
  54868. prvProcessReceivedCommands();
  54869. 8016b46: f000 f8d7 bl 8016cf8 <prvProcessReceivedCommands>
  54870. xNextExpireTime = prvGetNextExpireTime( &xListWasEmpty );
  54871. 8016b4a: bf00 nop
  54872. 8016b4c: e7f0 b.n 8016b30 <prvTimerTask+0x8>
  54873. ...
  54874. 08016b50 <prvProcessTimerOrBlockTask>:
  54875. }
  54876. }
  54877. /*-----------------------------------------------------------*/
  54878. static void prvProcessTimerOrBlockTask( const TickType_t xNextExpireTime, BaseType_t xListWasEmpty )
  54879. {
  54880. 8016b50: b580 push {r7, lr}
  54881. 8016b52: b084 sub sp, #16
  54882. 8016b54: af00 add r7, sp, #0
  54883. 8016b56: 6078 str r0, [r7, #4]
  54884. 8016b58: 6039 str r1, [r7, #0]
  54885. TickType_t xTimeNow;
  54886. BaseType_t xTimerListsWereSwitched;
  54887. vTaskSuspendAll();
  54888. 8016b5a: f7fe fe17 bl 801578c <vTaskSuspendAll>
  54889. /* Obtain the time now to make an assessment as to whether the timer
  54890. has expired or not. If obtaining the time causes the lists to switch
  54891. then don't process this timer as any timers that remained in the list
  54892. when the lists were switched will have been processed within the
  54893. prvSampleTimeNow() function. */
  54894. xTimeNow = prvSampleTimeNow( &xTimerListsWereSwitched );
  54895. 8016b5e: f107 0308 add.w r3, r7, #8
  54896. 8016b62: 4618 mov r0, r3
  54897. 8016b64: f000 f866 bl 8016c34 <prvSampleTimeNow>
  54898. 8016b68: 60f8 str r0, [r7, #12]
  54899. if( xTimerListsWereSwitched == pdFALSE )
  54900. 8016b6a: 68bb ldr r3, [r7, #8]
  54901. 8016b6c: 2b00 cmp r3, #0
  54902. 8016b6e: d130 bne.n 8016bd2 <prvProcessTimerOrBlockTask+0x82>
  54903. {
  54904. /* The tick count has not overflowed, has the timer expired? */
  54905. if( ( xListWasEmpty == pdFALSE ) && ( xNextExpireTime <= xTimeNow ) )
  54906. 8016b70: 683b ldr r3, [r7, #0]
  54907. 8016b72: 2b00 cmp r3, #0
  54908. 8016b74: d10a bne.n 8016b8c <prvProcessTimerOrBlockTask+0x3c>
  54909. 8016b76: 687a ldr r2, [r7, #4]
  54910. 8016b78: 68fb ldr r3, [r7, #12]
  54911. 8016b7a: 429a cmp r2, r3
  54912. 8016b7c: d806 bhi.n 8016b8c <prvProcessTimerOrBlockTask+0x3c>
  54913. {
  54914. ( void ) xTaskResumeAll();
  54915. 8016b7e: f7fe fe13 bl 80157a8 <xTaskResumeAll>
  54916. prvProcessExpiredTimer( xNextExpireTime, xTimeNow );
  54917. 8016b82: 68f9 ldr r1, [r7, #12]
  54918. 8016b84: 6878 ldr r0, [r7, #4]
  54919. 8016b86: f7ff ff81 bl 8016a8c <prvProcessExpiredTimer>
  54920. else
  54921. {
  54922. ( void ) xTaskResumeAll();
  54923. }
  54924. }
  54925. }
  54926. 8016b8a: e024 b.n 8016bd6 <prvProcessTimerOrBlockTask+0x86>
  54927. if( xListWasEmpty != pdFALSE )
  54928. 8016b8c: 683b ldr r3, [r7, #0]
  54929. 8016b8e: 2b00 cmp r3, #0
  54930. 8016b90: d008 beq.n 8016ba4 <prvProcessTimerOrBlockTask+0x54>
  54931. xListWasEmpty = listLIST_IS_EMPTY( pxOverflowTimerList );
  54932. 8016b92: 4b13 ldr r3, [pc, #76] @ (8016be0 <prvProcessTimerOrBlockTask+0x90>)
  54933. 8016b94: 681b ldr r3, [r3, #0]
  54934. 8016b96: 681b ldr r3, [r3, #0]
  54935. 8016b98: 2b00 cmp r3, #0
  54936. 8016b9a: d101 bne.n 8016ba0 <prvProcessTimerOrBlockTask+0x50>
  54937. 8016b9c: 2301 movs r3, #1
  54938. 8016b9e: e000 b.n 8016ba2 <prvProcessTimerOrBlockTask+0x52>
  54939. 8016ba0: 2300 movs r3, #0
  54940. 8016ba2: 603b str r3, [r7, #0]
  54941. vQueueWaitForMessageRestricted( xTimerQueue, ( xNextExpireTime - xTimeNow ), xListWasEmpty );
  54942. 8016ba4: 4b0f ldr r3, [pc, #60] @ (8016be4 <prvProcessTimerOrBlockTask+0x94>)
  54943. 8016ba6: 6818 ldr r0, [r3, #0]
  54944. 8016ba8: 687a ldr r2, [r7, #4]
  54945. 8016baa: 68fb ldr r3, [r7, #12]
  54946. 8016bac: 1ad3 subs r3, r2, r3
  54947. 8016bae: 683a ldr r2, [r7, #0]
  54948. 8016bb0: 4619 mov r1, r3
  54949. 8016bb2: f7fe f995 bl 8014ee0 <vQueueWaitForMessageRestricted>
  54950. if( xTaskResumeAll() == pdFALSE )
  54951. 8016bb6: f7fe fdf7 bl 80157a8 <xTaskResumeAll>
  54952. 8016bba: 4603 mov r3, r0
  54953. 8016bbc: 2b00 cmp r3, #0
  54954. 8016bbe: d10a bne.n 8016bd6 <prvProcessTimerOrBlockTask+0x86>
  54955. portYIELD_WITHIN_API();
  54956. 8016bc0: 4b09 ldr r3, [pc, #36] @ (8016be8 <prvProcessTimerOrBlockTask+0x98>)
  54957. 8016bc2: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  54958. 8016bc6: 601a str r2, [r3, #0]
  54959. 8016bc8: f3bf 8f4f dsb sy
  54960. 8016bcc: f3bf 8f6f isb sy
  54961. }
  54962. 8016bd0: e001 b.n 8016bd6 <prvProcessTimerOrBlockTask+0x86>
  54963. ( void ) xTaskResumeAll();
  54964. 8016bd2: f7fe fde9 bl 80157a8 <xTaskResumeAll>
  54965. }
  54966. 8016bd6: bf00 nop
  54967. 8016bd8: 3710 adds r7, #16
  54968. 8016bda: 46bd mov sp, r7
  54969. 8016bdc: bd80 pop {r7, pc}
  54970. 8016bde: bf00 nop
  54971. 8016be0: 24002b6c .word 0x24002b6c
  54972. 8016be4: 24002b70 .word 0x24002b70
  54973. 8016be8: e000ed04 .word 0xe000ed04
  54974. 08016bec <prvGetNextExpireTime>:
  54975. /*-----------------------------------------------------------*/
  54976. static TickType_t prvGetNextExpireTime( BaseType_t * const pxListWasEmpty )
  54977. {
  54978. 8016bec: b480 push {r7}
  54979. 8016bee: b085 sub sp, #20
  54980. 8016bf0: af00 add r7, sp, #0
  54981. 8016bf2: 6078 str r0, [r7, #4]
  54982. the timer with the nearest expiry time will expire. If there are no
  54983. active timers then just set the next expire time to 0. That will cause
  54984. this task to unblock when the tick count overflows, at which point the
  54985. timer lists will be switched and the next expiry time can be
  54986. re-assessed. */
  54987. *pxListWasEmpty = listLIST_IS_EMPTY( pxCurrentTimerList );
  54988. 8016bf4: 4b0e ldr r3, [pc, #56] @ (8016c30 <prvGetNextExpireTime+0x44>)
  54989. 8016bf6: 681b ldr r3, [r3, #0]
  54990. 8016bf8: 681b ldr r3, [r3, #0]
  54991. 8016bfa: 2b00 cmp r3, #0
  54992. 8016bfc: d101 bne.n 8016c02 <prvGetNextExpireTime+0x16>
  54993. 8016bfe: 2201 movs r2, #1
  54994. 8016c00: e000 b.n 8016c04 <prvGetNextExpireTime+0x18>
  54995. 8016c02: 2200 movs r2, #0
  54996. 8016c04: 687b ldr r3, [r7, #4]
  54997. 8016c06: 601a str r2, [r3, #0]
  54998. if( *pxListWasEmpty == pdFALSE )
  54999. 8016c08: 687b ldr r3, [r7, #4]
  55000. 8016c0a: 681b ldr r3, [r3, #0]
  55001. 8016c0c: 2b00 cmp r3, #0
  55002. 8016c0e: d105 bne.n 8016c1c <prvGetNextExpireTime+0x30>
  55003. {
  55004. xNextExpireTime = listGET_ITEM_VALUE_OF_HEAD_ENTRY( pxCurrentTimerList );
  55005. 8016c10: 4b07 ldr r3, [pc, #28] @ (8016c30 <prvGetNextExpireTime+0x44>)
  55006. 8016c12: 681b ldr r3, [r3, #0]
  55007. 8016c14: 68db ldr r3, [r3, #12]
  55008. 8016c16: 681b ldr r3, [r3, #0]
  55009. 8016c18: 60fb str r3, [r7, #12]
  55010. 8016c1a: e001 b.n 8016c20 <prvGetNextExpireTime+0x34>
  55011. }
  55012. else
  55013. {
  55014. /* Ensure the task unblocks when the tick count rolls over. */
  55015. xNextExpireTime = ( TickType_t ) 0U;
  55016. 8016c1c: 2300 movs r3, #0
  55017. 8016c1e: 60fb str r3, [r7, #12]
  55018. }
  55019. return xNextExpireTime;
  55020. 8016c20: 68fb ldr r3, [r7, #12]
  55021. }
  55022. 8016c22: 4618 mov r0, r3
  55023. 8016c24: 3714 adds r7, #20
  55024. 8016c26: 46bd mov sp, r7
  55025. 8016c28: f85d 7b04 ldr.w r7, [sp], #4
  55026. 8016c2c: 4770 bx lr
  55027. 8016c2e: bf00 nop
  55028. 8016c30: 24002b68 .word 0x24002b68
  55029. 08016c34 <prvSampleTimeNow>:
  55030. /*-----------------------------------------------------------*/
  55031. static TickType_t prvSampleTimeNow( BaseType_t * const pxTimerListsWereSwitched )
  55032. {
  55033. 8016c34: b580 push {r7, lr}
  55034. 8016c36: b084 sub sp, #16
  55035. 8016c38: af00 add r7, sp, #0
  55036. 8016c3a: 6078 str r0, [r7, #4]
  55037. TickType_t xTimeNow;
  55038. PRIVILEGED_DATA static TickType_t xLastTime = ( TickType_t ) 0U; /*lint !e956 Variable is only accessible to one task. */
  55039. xTimeNow = xTaskGetTickCount();
  55040. 8016c3c: f7fe fe52 bl 80158e4 <xTaskGetTickCount>
  55041. 8016c40: 60f8 str r0, [r7, #12]
  55042. if( xTimeNow < xLastTime )
  55043. 8016c42: 4b0b ldr r3, [pc, #44] @ (8016c70 <prvSampleTimeNow+0x3c>)
  55044. 8016c44: 681b ldr r3, [r3, #0]
  55045. 8016c46: 68fa ldr r2, [r7, #12]
  55046. 8016c48: 429a cmp r2, r3
  55047. 8016c4a: d205 bcs.n 8016c58 <prvSampleTimeNow+0x24>
  55048. {
  55049. prvSwitchTimerLists();
  55050. 8016c4c: f000 f93a bl 8016ec4 <prvSwitchTimerLists>
  55051. *pxTimerListsWereSwitched = pdTRUE;
  55052. 8016c50: 687b ldr r3, [r7, #4]
  55053. 8016c52: 2201 movs r2, #1
  55054. 8016c54: 601a str r2, [r3, #0]
  55055. 8016c56: e002 b.n 8016c5e <prvSampleTimeNow+0x2a>
  55056. }
  55057. else
  55058. {
  55059. *pxTimerListsWereSwitched = pdFALSE;
  55060. 8016c58: 687b ldr r3, [r7, #4]
  55061. 8016c5a: 2200 movs r2, #0
  55062. 8016c5c: 601a str r2, [r3, #0]
  55063. }
  55064. xLastTime = xTimeNow;
  55065. 8016c5e: 4a04 ldr r2, [pc, #16] @ (8016c70 <prvSampleTimeNow+0x3c>)
  55066. 8016c60: 68fb ldr r3, [r7, #12]
  55067. 8016c62: 6013 str r3, [r2, #0]
  55068. return xTimeNow;
  55069. 8016c64: 68fb ldr r3, [r7, #12]
  55070. }
  55071. 8016c66: 4618 mov r0, r3
  55072. 8016c68: 3710 adds r7, #16
  55073. 8016c6a: 46bd mov sp, r7
  55074. 8016c6c: bd80 pop {r7, pc}
  55075. 8016c6e: bf00 nop
  55076. 8016c70: 24002b78 .word 0x24002b78
  55077. 08016c74 <prvInsertTimerInActiveList>:
  55078. /*-----------------------------------------------------------*/
  55079. static BaseType_t prvInsertTimerInActiveList( Timer_t * const pxTimer, const TickType_t xNextExpiryTime, const TickType_t xTimeNow, const TickType_t xCommandTime )
  55080. {
  55081. 8016c74: b580 push {r7, lr}
  55082. 8016c76: b086 sub sp, #24
  55083. 8016c78: af00 add r7, sp, #0
  55084. 8016c7a: 60f8 str r0, [r7, #12]
  55085. 8016c7c: 60b9 str r1, [r7, #8]
  55086. 8016c7e: 607a str r2, [r7, #4]
  55087. 8016c80: 603b str r3, [r7, #0]
  55088. BaseType_t xProcessTimerNow = pdFALSE;
  55089. 8016c82: 2300 movs r3, #0
  55090. 8016c84: 617b str r3, [r7, #20]
  55091. listSET_LIST_ITEM_VALUE( &( pxTimer->xTimerListItem ), xNextExpiryTime );
  55092. 8016c86: 68fb ldr r3, [r7, #12]
  55093. 8016c88: 68ba ldr r2, [r7, #8]
  55094. 8016c8a: 605a str r2, [r3, #4]
  55095. listSET_LIST_ITEM_OWNER( &( pxTimer->xTimerListItem ), pxTimer );
  55096. 8016c8c: 68fb ldr r3, [r7, #12]
  55097. 8016c8e: 68fa ldr r2, [r7, #12]
  55098. 8016c90: 611a str r2, [r3, #16]
  55099. if( xNextExpiryTime <= xTimeNow )
  55100. 8016c92: 68ba ldr r2, [r7, #8]
  55101. 8016c94: 687b ldr r3, [r7, #4]
  55102. 8016c96: 429a cmp r2, r3
  55103. 8016c98: d812 bhi.n 8016cc0 <prvInsertTimerInActiveList+0x4c>
  55104. {
  55105. /* Has the expiry time elapsed between the command to start/reset a
  55106. timer was issued, and the time the command was processed? */
  55107. if( ( ( TickType_t ) ( xTimeNow - xCommandTime ) ) >= pxTimer->xTimerPeriodInTicks ) /*lint !e961 MISRA exception as the casts are only redundant for some ports. */
  55108. 8016c9a: 687a ldr r2, [r7, #4]
  55109. 8016c9c: 683b ldr r3, [r7, #0]
  55110. 8016c9e: 1ad2 subs r2, r2, r3
  55111. 8016ca0: 68fb ldr r3, [r7, #12]
  55112. 8016ca2: 699b ldr r3, [r3, #24]
  55113. 8016ca4: 429a cmp r2, r3
  55114. 8016ca6: d302 bcc.n 8016cae <prvInsertTimerInActiveList+0x3a>
  55115. {
  55116. /* The time between a command being issued and the command being
  55117. processed actually exceeds the timers period. */
  55118. xProcessTimerNow = pdTRUE;
  55119. 8016ca8: 2301 movs r3, #1
  55120. 8016caa: 617b str r3, [r7, #20]
  55121. 8016cac: e01b b.n 8016ce6 <prvInsertTimerInActiveList+0x72>
  55122. }
  55123. else
  55124. {
  55125. vListInsert( pxOverflowTimerList, &( pxTimer->xTimerListItem ) );
  55126. 8016cae: 4b10 ldr r3, [pc, #64] @ (8016cf0 <prvInsertTimerInActiveList+0x7c>)
  55127. 8016cb0: 681a ldr r2, [r3, #0]
  55128. 8016cb2: 68fb ldr r3, [r7, #12]
  55129. 8016cb4: 3304 adds r3, #4
  55130. 8016cb6: 4619 mov r1, r3
  55131. 8016cb8: 4610 mov r0, r2
  55132. 8016cba: f7fd f94a bl 8013f52 <vListInsert>
  55133. 8016cbe: e012 b.n 8016ce6 <prvInsertTimerInActiveList+0x72>
  55134. }
  55135. }
  55136. else
  55137. {
  55138. if( ( xTimeNow < xCommandTime ) && ( xNextExpiryTime >= xCommandTime ) )
  55139. 8016cc0: 687a ldr r2, [r7, #4]
  55140. 8016cc2: 683b ldr r3, [r7, #0]
  55141. 8016cc4: 429a cmp r2, r3
  55142. 8016cc6: d206 bcs.n 8016cd6 <prvInsertTimerInActiveList+0x62>
  55143. 8016cc8: 68ba ldr r2, [r7, #8]
  55144. 8016cca: 683b ldr r3, [r7, #0]
  55145. 8016ccc: 429a cmp r2, r3
  55146. 8016cce: d302 bcc.n 8016cd6 <prvInsertTimerInActiveList+0x62>
  55147. {
  55148. /* If, since the command was issued, the tick count has overflowed
  55149. but the expiry time has not, then the timer must have already passed
  55150. its expiry time and should be processed immediately. */
  55151. xProcessTimerNow = pdTRUE;
  55152. 8016cd0: 2301 movs r3, #1
  55153. 8016cd2: 617b str r3, [r7, #20]
  55154. 8016cd4: e007 b.n 8016ce6 <prvInsertTimerInActiveList+0x72>
  55155. }
  55156. else
  55157. {
  55158. vListInsert( pxCurrentTimerList, &( pxTimer->xTimerListItem ) );
  55159. 8016cd6: 4b07 ldr r3, [pc, #28] @ (8016cf4 <prvInsertTimerInActiveList+0x80>)
  55160. 8016cd8: 681a ldr r2, [r3, #0]
  55161. 8016cda: 68fb ldr r3, [r7, #12]
  55162. 8016cdc: 3304 adds r3, #4
  55163. 8016cde: 4619 mov r1, r3
  55164. 8016ce0: 4610 mov r0, r2
  55165. 8016ce2: f7fd f936 bl 8013f52 <vListInsert>
  55166. }
  55167. }
  55168. return xProcessTimerNow;
  55169. 8016ce6: 697b ldr r3, [r7, #20]
  55170. }
  55171. 8016ce8: 4618 mov r0, r3
  55172. 8016cea: 3718 adds r7, #24
  55173. 8016cec: 46bd mov sp, r7
  55174. 8016cee: bd80 pop {r7, pc}
  55175. 8016cf0: 24002b6c .word 0x24002b6c
  55176. 8016cf4: 24002b68 .word 0x24002b68
  55177. 08016cf8 <prvProcessReceivedCommands>:
  55178. /*-----------------------------------------------------------*/
  55179. static void prvProcessReceivedCommands( void )
  55180. {
  55181. 8016cf8: b580 push {r7, lr}
  55182. 8016cfa: b08e sub sp, #56 @ 0x38
  55183. 8016cfc: af02 add r7, sp, #8
  55184. DaemonTaskMessage_t xMessage;
  55185. Timer_t *pxTimer;
  55186. BaseType_t xTimerListsWereSwitched, xResult;
  55187. TickType_t xTimeNow;
  55188. while( xQueueReceive( xTimerQueue, &xMessage, tmrNO_DELAY ) != pdFAIL ) /*lint !e603 xMessage does not have to be initialised as it is passed out, not in, and it is not used unless xQueueReceive() returns pdTRUE. */
  55189. 8016cfe: e0ce b.n 8016e9e <prvProcessReceivedCommands+0x1a6>
  55190. {
  55191. #if ( INCLUDE_xTimerPendFunctionCall == 1 )
  55192. {
  55193. /* Negative commands are pended function calls rather than timer
  55194. commands. */
  55195. if( xMessage.xMessageID < ( BaseType_t ) 0 )
  55196. 8016d00: 687b ldr r3, [r7, #4]
  55197. 8016d02: 2b00 cmp r3, #0
  55198. 8016d04: da19 bge.n 8016d3a <prvProcessReceivedCommands+0x42>
  55199. {
  55200. const CallbackParameters_t * const pxCallback = &( xMessage.u.xCallbackParameters );
  55201. 8016d06: 1d3b adds r3, r7, #4
  55202. 8016d08: 3304 adds r3, #4
  55203. 8016d0a: 62fb str r3, [r7, #44] @ 0x2c
  55204. /* The timer uses the xCallbackParameters member to request a
  55205. callback be executed. Check the callback is not NULL. */
  55206. configASSERT( pxCallback );
  55207. 8016d0c: 6afb ldr r3, [r7, #44] @ 0x2c
  55208. 8016d0e: 2b00 cmp r3, #0
  55209. 8016d10: d10b bne.n 8016d2a <prvProcessReceivedCommands+0x32>
  55210. __asm volatile
  55211. 8016d12: f04f 0350 mov.w r3, #80 @ 0x50
  55212. 8016d16: f383 8811 msr BASEPRI, r3
  55213. 8016d1a: f3bf 8f6f isb sy
  55214. 8016d1e: f3bf 8f4f dsb sy
  55215. 8016d22: 61fb str r3, [r7, #28]
  55216. }
  55217. 8016d24: bf00 nop
  55218. 8016d26: bf00 nop
  55219. 8016d28: e7fd b.n 8016d26 <prvProcessReceivedCommands+0x2e>
  55220. /* Call the function. */
  55221. pxCallback->pxCallbackFunction( pxCallback->pvParameter1, pxCallback->ulParameter2 );
  55222. 8016d2a: 6afb ldr r3, [r7, #44] @ 0x2c
  55223. 8016d2c: 681b ldr r3, [r3, #0]
  55224. 8016d2e: 6afa ldr r2, [r7, #44] @ 0x2c
  55225. 8016d30: 6850 ldr r0, [r2, #4]
  55226. 8016d32: 6afa ldr r2, [r7, #44] @ 0x2c
  55227. 8016d34: 6892 ldr r2, [r2, #8]
  55228. 8016d36: 4611 mov r1, r2
  55229. 8016d38: 4798 blx r3
  55230. }
  55231. #endif /* INCLUDE_xTimerPendFunctionCall */
  55232. /* Commands that are positive are timer commands rather than pended
  55233. function calls. */
  55234. if( xMessage.xMessageID >= ( BaseType_t ) 0 )
  55235. 8016d3a: 687b ldr r3, [r7, #4]
  55236. 8016d3c: 2b00 cmp r3, #0
  55237. 8016d3e: f2c0 80ae blt.w 8016e9e <prvProcessReceivedCommands+0x1a6>
  55238. {
  55239. /* The messages uses the xTimerParameters member to work on a
  55240. software timer. */
  55241. pxTimer = xMessage.u.xTimerParameters.pxTimer;
  55242. 8016d42: 68fb ldr r3, [r7, #12]
  55243. 8016d44: 62bb str r3, [r7, #40] @ 0x28
  55244. if( listIS_CONTAINED_WITHIN( NULL, &( pxTimer->xTimerListItem ) ) == pdFALSE ) /*lint !e961. The cast is only redundant when NULL is passed into the macro. */
  55245. 8016d46: 6abb ldr r3, [r7, #40] @ 0x28
  55246. 8016d48: 695b ldr r3, [r3, #20]
  55247. 8016d4a: 2b00 cmp r3, #0
  55248. 8016d4c: d004 beq.n 8016d58 <prvProcessReceivedCommands+0x60>
  55249. {
  55250. /* The timer is in a list, remove it. */
  55251. ( void ) uxListRemove( &( pxTimer->xTimerListItem ) );
  55252. 8016d4e: 6abb ldr r3, [r7, #40] @ 0x28
  55253. 8016d50: 3304 adds r3, #4
  55254. 8016d52: 4618 mov r0, r3
  55255. 8016d54: f7fd f936 bl 8013fc4 <uxListRemove>
  55256. it must be present in the function call. prvSampleTimeNow() must be
  55257. called after the message is received from xTimerQueue so there is no
  55258. possibility of a higher priority task adding a message to the message
  55259. queue with a time that is ahead of the timer daemon task (because it
  55260. pre-empted the timer daemon task after the xTimeNow value was set). */
  55261. xTimeNow = prvSampleTimeNow( &xTimerListsWereSwitched );
  55262. 8016d58: 463b mov r3, r7
  55263. 8016d5a: 4618 mov r0, r3
  55264. 8016d5c: f7ff ff6a bl 8016c34 <prvSampleTimeNow>
  55265. 8016d60: 6278 str r0, [r7, #36] @ 0x24
  55266. switch( xMessage.xMessageID )
  55267. 8016d62: 687b ldr r3, [r7, #4]
  55268. 8016d64: 2b09 cmp r3, #9
  55269. 8016d66: f200 8097 bhi.w 8016e98 <prvProcessReceivedCommands+0x1a0>
  55270. 8016d6a: a201 add r2, pc, #4 @ (adr r2, 8016d70 <prvProcessReceivedCommands+0x78>)
  55271. 8016d6c: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  55272. 8016d70: 08016d99 .word 0x08016d99
  55273. 8016d74: 08016d99 .word 0x08016d99
  55274. 8016d78: 08016d99 .word 0x08016d99
  55275. 8016d7c: 08016e0f .word 0x08016e0f
  55276. 8016d80: 08016e23 .word 0x08016e23
  55277. 8016d84: 08016e6f .word 0x08016e6f
  55278. 8016d88: 08016d99 .word 0x08016d99
  55279. 8016d8c: 08016d99 .word 0x08016d99
  55280. 8016d90: 08016e0f .word 0x08016e0f
  55281. 8016d94: 08016e23 .word 0x08016e23
  55282. case tmrCOMMAND_START_FROM_ISR :
  55283. case tmrCOMMAND_RESET :
  55284. case tmrCOMMAND_RESET_FROM_ISR :
  55285. case tmrCOMMAND_START_DONT_TRACE :
  55286. /* Start or restart a timer. */
  55287. pxTimer->ucStatus |= tmrSTATUS_IS_ACTIVE;
  55288. 8016d98: 6abb ldr r3, [r7, #40] @ 0x28
  55289. 8016d9a: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  55290. 8016d9e: f043 0301 orr.w r3, r3, #1
  55291. 8016da2: b2da uxtb r2, r3
  55292. 8016da4: 6abb ldr r3, [r7, #40] @ 0x28
  55293. 8016da6: f883 2028 strb.w r2, [r3, #40] @ 0x28
  55294. if( prvInsertTimerInActiveList( pxTimer, xMessage.u.xTimerParameters.xMessageValue + pxTimer->xTimerPeriodInTicks, xTimeNow, xMessage.u.xTimerParameters.xMessageValue ) != pdFALSE )
  55295. 8016daa: 68ba ldr r2, [r7, #8]
  55296. 8016dac: 6abb ldr r3, [r7, #40] @ 0x28
  55297. 8016dae: 699b ldr r3, [r3, #24]
  55298. 8016db0: 18d1 adds r1, r2, r3
  55299. 8016db2: 68bb ldr r3, [r7, #8]
  55300. 8016db4: 6a7a ldr r2, [r7, #36] @ 0x24
  55301. 8016db6: 6ab8 ldr r0, [r7, #40] @ 0x28
  55302. 8016db8: f7ff ff5c bl 8016c74 <prvInsertTimerInActiveList>
  55303. 8016dbc: 4603 mov r3, r0
  55304. 8016dbe: 2b00 cmp r3, #0
  55305. 8016dc0: d06c beq.n 8016e9c <prvProcessReceivedCommands+0x1a4>
  55306. {
  55307. /* The timer expired before it was added to the active
  55308. timer list. Process it now. */
  55309. pxTimer->pxCallbackFunction( ( TimerHandle_t ) pxTimer );
  55310. 8016dc2: 6abb ldr r3, [r7, #40] @ 0x28
  55311. 8016dc4: 6a1b ldr r3, [r3, #32]
  55312. 8016dc6: 6ab8 ldr r0, [r7, #40] @ 0x28
  55313. 8016dc8: 4798 blx r3
  55314. traceTIMER_EXPIRED( pxTimer );
  55315. if( ( pxTimer->ucStatus & tmrSTATUS_IS_AUTORELOAD ) != 0 )
  55316. 8016dca: 6abb ldr r3, [r7, #40] @ 0x28
  55317. 8016dcc: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  55318. 8016dd0: f003 0304 and.w r3, r3, #4
  55319. 8016dd4: 2b00 cmp r3, #0
  55320. 8016dd6: d061 beq.n 8016e9c <prvProcessReceivedCommands+0x1a4>
  55321. {
  55322. xResult = xTimerGenericCommand( pxTimer, tmrCOMMAND_START_DONT_TRACE, xMessage.u.xTimerParameters.xMessageValue + pxTimer->xTimerPeriodInTicks, NULL, tmrNO_DELAY );
  55323. 8016dd8: 68ba ldr r2, [r7, #8]
  55324. 8016dda: 6abb ldr r3, [r7, #40] @ 0x28
  55325. 8016ddc: 699b ldr r3, [r3, #24]
  55326. 8016dde: 441a add r2, r3
  55327. 8016de0: 2300 movs r3, #0
  55328. 8016de2: 9300 str r3, [sp, #0]
  55329. 8016de4: 2300 movs r3, #0
  55330. 8016de6: 2100 movs r1, #0
  55331. 8016de8: 6ab8 ldr r0, [r7, #40] @ 0x28
  55332. 8016dea: f7ff fe01 bl 80169f0 <xTimerGenericCommand>
  55333. 8016dee: 6238 str r0, [r7, #32]
  55334. configASSERT( xResult );
  55335. 8016df0: 6a3b ldr r3, [r7, #32]
  55336. 8016df2: 2b00 cmp r3, #0
  55337. 8016df4: d152 bne.n 8016e9c <prvProcessReceivedCommands+0x1a4>
  55338. __asm volatile
  55339. 8016df6: f04f 0350 mov.w r3, #80 @ 0x50
  55340. 8016dfa: f383 8811 msr BASEPRI, r3
  55341. 8016dfe: f3bf 8f6f isb sy
  55342. 8016e02: f3bf 8f4f dsb sy
  55343. 8016e06: 61bb str r3, [r7, #24]
  55344. }
  55345. 8016e08: bf00 nop
  55346. 8016e0a: bf00 nop
  55347. 8016e0c: e7fd b.n 8016e0a <prvProcessReceivedCommands+0x112>
  55348. break;
  55349. case tmrCOMMAND_STOP :
  55350. case tmrCOMMAND_STOP_FROM_ISR :
  55351. /* The timer has already been removed from the active list. */
  55352. pxTimer->ucStatus &= ~tmrSTATUS_IS_ACTIVE;
  55353. 8016e0e: 6abb ldr r3, [r7, #40] @ 0x28
  55354. 8016e10: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  55355. 8016e14: f023 0301 bic.w r3, r3, #1
  55356. 8016e18: b2da uxtb r2, r3
  55357. 8016e1a: 6abb ldr r3, [r7, #40] @ 0x28
  55358. 8016e1c: f883 2028 strb.w r2, [r3, #40] @ 0x28
  55359. break;
  55360. 8016e20: e03d b.n 8016e9e <prvProcessReceivedCommands+0x1a6>
  55361. case tmrCOMMAND_CHANGE_PERIOD :
  55362. case tmrCOMMAND_CHANGE_PERIOD_FROM_ISR :
  55363. pxTimer->ucStatus |= tmrSTATUS_IS_ACTIVE;
  55364. 8016e22: 6abb ldr r3, [r7, #40] @ 0x28
  55365. 8016e24: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  55366. 8016e28: f043 0301 orr.w r3, r3, #1
  55367. 8016e2c: b2da uxtb r2, r3
  55368. 8016e2e: 6abb ldr r3, [r7, #40] @ 0x28
  55369. 8016e30: f883 2028 strb.w r2, [r3, #40] @ 0x28
  55370. pxTimer->xTimerPeriodInTicks = xMessage.u.xTimerParameters.xMessageValue;
  55371. 8016e34: 68ba ldr r2, [r7, #8]
  55372. 8016e36: 6abb ldr r3, [r7, #40] @ 0x28
  55373. 8016e38: 619a str r2, [r3, #24]
  55374. configASSERT( ( pxTimer->xTimerPeriodInTicks > 0 ) );
  55375. 8016e3a: 6abb ldr r3, [r7, #40] @ 0x28
  55376. 8016e3c: 699b ldr r3, [r3, #24]
  55377. 8016e3e: 2b00 cmp r3, #0
  55378. 8016e40: d10b bne.n 8016e5a <prvProcessReceivedCommands+0x162>
  55379. __asm volatile
  55380. 8016e42: f04f 0350 mov.w r3, #80 @ 0x50
  55381. 8016e46: f383 8811 msr BASEPRI, r3
  55382. 8016e4a: f3bf 8f6f isb sy
  55383. 8016e4e: f3bf 8f4f dsb sy
  55384. 8016e52: 617b str r3, [r7, #20]
  55385. }
  55386. 8016e54: bf00 nop
  55387. 8016e56: bf00 nop
  55388. 8016e58: e7fd b.n 8016e56 <prvProcessReceivedCommands+0x15e>
  55389. be longer or shorter than the old one. The command time is
  55390. therefore set to the current time, and as the period cannot
  55391. be zero the next expiry time can only be in the future,
  55392. meaning (unlike for the xTimerStart() case above) there is
  55393. no fail case that needs to be handled here. */
  55394. ( void ) prvInsertTimerInActiveList( pxTimer, ( xTimeNow + pxTimer->xTimerPeriodInTicks ), xTimeNow, xTimeNow );
  55395. 8016e5a: 6abb ldr r3, [r7, #40] @ 0x28
  55396. 8016e5c: 699a ldr r2, [r3, #24]
  55397. 8016e5e: 6a7b ldr r3, [r7, #36] @ 0x24
  55398. 8016e60: 18d1 adds r1, r2, r3
  55399. 8016e62: 6a7b ldr r3, [r7, #36] @ 0x24
  55400. 8016e64: 6a7a ldr r2, [r7, #36] @ 0x24
  55401. 8016e66: 6ab8 ldr r0, [r7, #40] @ 0x28
  55402. 8016e68: f7ff ff04 bl 8016c74 <prvInsertTimerInActiveList>
  55403. break;
  55404. 8016e6c: e017 b.n 8016e9e <prvProcessReceivedCommands+0x1a6>
  55405. #if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
  55406. {
  55407. /* The timer has already been removed from the active list,
  55408. just free up the memory if the memory was dynamically
  55409. allocated. */
  55410. if( ( pxTimer->ucStatus & tmrSTATUS_IS_STATICALLY_ALLOCATED ) == ( uint8_t ) 0 )
  55411. 8016e6e: 6abb ldr r3, [r7, #40] @ 0x28
  55412. 8016e70: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  55413. 8016e74: f003 0302 and.w r3, r3, #2
  55414. 8016e78: 2b00 cmp r3, #0
  55415. 8016e7a: d103 bne.n 8016e84 <prvProcessReceivedCommands+0x18c>
  55416. {
  55417. vPortFree( pxTimer );
  55418. 8016e7c: 6ab8 ldr r0, [r7, #40] @ 0x28
  55419. 8016e7e: f000 fc33 bl 80176e8 <vPortFree>
  55420. no need to free the memory - just mark the timer as
  55421. "not active". */
  55422. pxTimer->ucStatus &= ~tmrSTATUS_IS_ACTIVE;
  55423. }
  55424. #endif /* configSUPPORT_DYNAMIC_ALLOCATION */
  55425. break;
  55426. 8016e82: e00c b.n 8016e9e <prvProcessReceivedCommands+0x1a6>
  55427. pxTimer->ucStatus &= ~tmrSTATUS_IS_ACTIVE;
  55428. 8016e84: 6abb ldr r3, [r7, #40] @ 0x28
  55429. 8016e86: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  55430. 8016e8a: f023 0301 bic.w r3, r3, #1
  55431. 8016e8e: b2da uxtb r2, r3
  55432. 8016e90: 6abb ldr r3, [r7, #40] @ 0x28
  55433. 8016e92: f883 2028 strb.w r2, [r3, #40] @ 0x28
  55434. break;
  55435. 8016e96: e002 b.n 8016e9e <prvProcessReceivedCommands+0x1a6>
  55436. default :
  55437. /* Don't expect to get here. */
  55438. break;
  55439. 8016e98: bf00 nop
  55440. 8016e9a: e000 b.n 8016e9e <prvProcessReceivedCommands+0x1a6>
  55441. break;
  55442. 8016e9c: bf00 nop
  55443. while( xQueueReceive( xTimerQueue, &xMessage, tmrNO_DELAY ) != pdFAIL ) /*lint !e603 xMessage does not have to be initialised as it is passed out, not in, and it is not used unless xQueueReceive() returns pdTRUE. */
  55444. 8016e9e: 4b08 ldr r3, [pc, #32] @ (8016ec0 <prvProcessReceivedCommands+0x1c8>)
  55445. 8016ea0: 681b ldr r3, [r3, #0]
  55446. 8016ea2: 1d39 adds r1, r7, #4
  55447. 8016ea4: 2200 movs r2, #0
  55448. 8016ea6: 4618 mov r0, r3
  55449. 8016ea8: f7fd fc54 bl 8014754 <xQueueReceive>
  55450. 8016eac: 4603 mov r3, r0
  55451. 8016eae: 2b00 cmp r3, #0
  55452. 8016eb0: f47f af26 bne.w 8016d00 <prvProcessReceivedCommands+0x8>
  55453. }
  55454. }
  55455. }
  55456. }
  55457. 8016eb4: bf00 nop
  55458. 8016eb6: bf00 nop
  55459. 8016eb8: 3730 adds r7, #48 @ 0x30
  55460. 8016eba: 46bd mov sp, r7
  55461. 8016ebc: bd80 pop {r7, pc}
  55462. 8016ebe: bf00 nop
  55463. 8016ec0: 24002b70 .word 0x24002b70
  55464. 08016ec4 <prvSwitchTimerLists>:
  55465. /*-----------------------------------------------------------*/
  55466. static void prvSwitchTimerLists( void )
  55467. {
  55468. 8016ec4: b580 push {r7, lr}
  55469. 8016ec6: b088 sub sp, #32
  55470. 8016ec8: af02 add r7, sp, #8
  55471. /* The tick count has overflowed. The timer lists must be switched.
  55472. If there are any timers still referenced from the current timer list
  55473. then they must have expired and should be processed before the lists
  55474. are switched. */
  55475. while( listLIST_IS_EMPTY( pxCurrentTimerList ) == pdFALSE )
  55476. 8016eca: e049 b.n 8016f60 <prvSwitchTimerLists+0x9c>
  55477. {
  55478. xNextExpireTime = listGET_ITEM_VALUE_OF_HEAD_ENTRY( pxCurrentTimerList );
  55479. 8016ecc: 4b2e ldr r3, [pc, #184] @ (8016f88 <prvSwitchTimerLists+0xc4>)
  55480. 8016ece: 681b ldr r3, [r3, #0]
  55481. 8016ed0: 68db ldr r3, [r3, #12]
  55482. 8016ed2: 681b ldr r3, [r3, #0]
  55483. 8016ed4: 613b str r3, [r7, #16]
  55484. /* Remove the timer from the list. */
  55485. pxTimer = ( Timer_t * ) listGET_OWNER_OF_HEAD_ENTRY( pxCurrentTimerList ); /*lint !e9087 !e9079 void * is used as this macro is used with tasks and co-routines too. Alignment is known to be fine as the type of the pointer stored and retrieved is the same. */
  55486. 8016ed6: 4b2c ldr r3, [pc, #176] @ (8016f88 <prvSwitchTimerLists+0xc4>)
  55487. 8016ed8: 681b ldr r3, [r3, #0]
  55488. 8016eda: 68db ldr r3, [r3, #12]
  55489. 8016edc: 68db ldr r3, [r3, #12]
  55490. 8016ede: 60fb str r3, [r7, #12]
  55491. ( void ) uxListRemove( &( pxTimer->xTimerListItem ) );
  55492. 8016ee0: 68fb ldr r3, [r7, #12]
  55493. 8016ee2: 3304 adds r3, #4
  55494. 8016ee4: 4618 mov r0, r3
  55495. 8016ee6: f7fd f86d bl 8013fc4 <uxListRemove>
  55496. traceTIMER_EXPIRED( pxTimer );
  55497. /* Execute its callback, then send a command to restart the timer if
  55498. it is an auto-reload timer. It cannot be restarted here as the lists
  55499. have not yet been switched. */
  55500. pxTimer->pxCallbackFunction( ( TimerHandle_t ) pxTimer );
  55501. 8016eea: 68fb ldr r3, [r7, #12]
  55502. 8016eec: 6a1b ldr r3, [r3, #32]
  55503. 8016eee: 68f8 ldr r0, [r7, #12]
  55504. 8016ef0: 4798 blx r3
  55505. if( ( pxTimer->ucStatus & tmrSTATUS_IS_AUTORELOAD ) != 0 )
  55506. 8016ef2: 68fb ldr r3, [r7, #12]
  55507. 8016ef4: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  55508. 8016ef8: f003 0304 and.w r3, r3, #4
  55509. 8016efc: 2b00 cmp r3, #0
  55510. 8016efe: d02f beq.n 8016f60 <prvSwitchTimerLists+0x9c>
  55511. the timer going into the same timer list then it has already expired
  55512. and the timer should be re-inserted into the current list so it is
  55513. processed again within this loop. Otherwise a command should be sent
  55514. to restart the timer to ensure it is only inserted into a list after
  55515. the lists have been swapped. */
  55516. xReloadTime = ( xNextExpireTime + pxTimer->xTimerPeriodInTicks );
  55517. 8016f00: 68fb ldr r3, [r7, #12]
  55518. 8016f02: 699b ldr r3, [r3, #24]
  55519. 8016f04: 693a ldr r2, [r7, #16]
  55520. 8016f06: 4413 add r3, r2
  55521. 8016f08: 60bb str r3, [r7, #8]
  55522. if( xReloadTime > xNextExpireTime )
  55523. 8016f0a: 68ba ldr r2, [r7, #8]
  55524. 8016f0c: 693b ldr r3, [r7, #16]
  55525. 8016f0e: 429a cmp r2, r3
  55526. 8016f10: d90e bls.n 8016f30 <prvSwitchTimerLists+0x6c>
  55527. {
  55528. listSET_LIST_ITEM_VALUE( &( pxTimer->xTimerListItem ), xReloadTime );
  55529. 8016f12: 68fb ldr r3, [r7, #12]
  55530. 8016f14: 68ba ldr r2, [r7, #8]
  55531. 8016f16: 605a str r2, [r3, #4]
  55532. listSET_LIST_ITEM_OWNER( &( pxTimer->xTimerListItem ), pxTimer );
  55533. 8016f18: 68fb ldr r3, [r7, #12]
  55534. 8016f1a: 68fa ldr r2, [r7, #12]
  55535. 8016f1c: 611a str r2, [r3, #16]
  55536. vListInsert( pxCurrentTimerList, &( pxTimer->xTimerListItem ) );
  55537. 8016f1e: 4b1a ldr r3, [pc, #104] @ (8016f88 <prvSwitchTimerLists+0xc4>)
  55538. 8016f20: 681a ldr r2, [r3, #0]
  55539. 8016f22: 68fb ldr r3, [r7, #12]
  55540. 8016f24: 3304 adds r3, #4
  55541. 8016f26: 4619 mov r1, r3
  55542. 8016f28: 4610 mov r0, r2
  55543. 8016f2a: f7fd f812 bl 8013f52 <vListInsert>
  55544. 8016f2e: e017 b.n 8016f60 <prvSwitchTimerLists+0x9c>
  55545. }
  55546. else
  55547. {
  55548. xResult = xTimerGenericCommand( pxTimer, tmrCOMMAND_START_DONT_TRACE, xNextExpireTime, NULL, tmrNO_DELAY );
  55549. 8016f30: 2300 movs r3, #0
  55550. 8016f32: 9300 str r3, [sp, #0]
  55551. 8016f34: 2300 movs r3, #0
  55552. 8016f36: 693a ldr r2, [r7, #16]
  55553. 8016f38: 2100 movs r1, #0
  55554. 8016f3a: 68f8 ldr r0, [r7, #12]
  55555. 8016f3c: f7ff fd58 bl 80169f0 <xTimerGenericCommand>
  55556. 8016f40: 6078 str r0, [r7, #4]
  55557. configASSERT( xResult );
  55558. 8016f42: 687b ldr r3, [r7, #4]
  55559. 8016f44: 2b00 cmp r3, #0
  55560. 8016f46: d10b bne.n 8016f60 <prvSwitchTimerLists+0x9c>
  55561. __asm volatile
  55562. 8016f48: f04f 0350 mov.w r3, #80 @ 0x50
  55563. 8016f4c: f383 8811 msr BASEPRI, r3
  55564. 8016f50: f3bf 8f6f isb sy
  55565. 8016f54: f3bf 8f4f dsb sy
  55566. 8016f58: 603b str r3, [r7, #0]
  55567. }
  55568. 8016f5a: bf00 nop
  55569. 8016f5c: bf00 nop
  55570. 8016f5e: e7fd b.n 8016f5c <prvSwitchTimerLists+0x98>
  55571. while( listLIST_IS_EMPTY( pxCurrentTimerList ) == pdFALSE )
  55572. 8016f60: 4b09 ldr r3, [pc, #36] @ (8016f88 <prvSwitchTimerLists+0xc4>)
  55573. 8016f62: 681b ldr r3, [r3, #0]
  55574. 8016f64: 681b ldr r3, [r3, #0]
  55575. 8016f66: 2b00 cmp r3, #0
  55576. 8016f68: d1b0 bne.n 8016ecc <prvSwitchTimerLists+0x8>
  55577. {
  55578. mtCOVERAGE_TEST_MARKER();
  55579. }
  55580. }
  55581. pxTemp = pxCurrentTimerList;
  55582. 8016f6a: 4b07 ldr r3, [pc, #28] @ (8016f88 <prvSwitchTimerLists+0xc4>)
  55583. 8016f6c: 681b ldr r3, [r3, #0]
  55584. 8016f6e: 617b str r3, [r7, #20]
  55585. pxCurrentTimerList = pxOverflowTimerList;
  55586. 8016f70: 4b06 ldr r3, [pc, #24] @ (8016f8c <prvSwitchTimerLists+0xc8>)
  55587. 8016f72: 681b ldr r3, [r3, #0]
  55588. 8016f74: 4a04 ldr r2, [pc, #16] @ (8016f88 <prvSwitchTimerLists+0xc4>)
  55589. 8016f76: 6013 str r3, [r2, #0]
  55590. pxOverflowTimerList = pxTemp;
  55591. 8016f78: 4a04 ldr r2, [pc, #16] @ (8016f8c <prvSwitchTimerLists+0xc8>)
  55592. 8016f7a: 697b ldr r3, [r7, #20]
  55593. 8016f7c: 6013 str r3, [r2, #0]
  55594. }
  55595. 8016f7e: bf00 nop
  55596. 8016f80: 3718 adds r7, #24
  55597. 8016f82: 46bd mov sp, r7
  55598. 8016f84: bd80 pop {r7, pc}
  55599. 8016f86: bf00 nop
  55600. 8016f88: 24002b68 .word 0x24002b68
  55601. 8016f8c: 24002b6c .word 0x24002b6c
  55602. 08016f90 <prvCheckForValidListAndQueue>:
  55603. /*-----------------------------------------------------------*/
  55604. static void prvCheckForValidListAndQueue( void )
  55605. {
  55606. 8016f90: b580 push {r7, lr}
  55607. 8016f92: b082 sub sp, #8
  55608. 8016f94: af02 add r7, sp, #8
  55609. /* Check that the list from which active timers are referenced, and the
  55610. queue used to communicate with the timer service, have been
  55611. initialised. */
  55612. taskENTER_CRITICAL();
  55613. 8016f96: f000 f9b7 bl 8017308 <vPortEnterCritical>
  55614. {
  55615. if( xTimerQueue == NULL )
  55616. 8016f9a: 4b15 ldr r3, [pc, #84] @ (8016ff0 <prvCheckForValidListAndQueue+0x60>)
  55617. 8016f9c: 681b ldr r3, [r3, #0]
  55618. 8016f9e: 2b00 cmp r3, #0
  55619. 8016fa0: d120 bne.n 8016fe4 <prvCheckForValidListAndQueue+0x54>
  55620. {
  55621. vListInitialise( &xActiveTimerList1 );
  55622. 8016fa2: 4814 ldr r0, [pc, #80] @ (8016ff4 <prvCheckForValidListAndQueue+0x64>)
  55623. 8016fa4: f7fc ff84 bl 8013eb0 <vListInitialise>
  55624. vListInitialise( &xActiveTimerList2 );
  55625. 8016fa8: 4813 ldr r0, [pc, #76] @ (8016ff8 <prvCheckForValidListAndQueue+0x68>)
  55626. 8016faa: f7fc ff81 bl 8013eb0 <vListInitialise>
  55627. pxCurrentTimerList = &xActiveTimerList1;
  55628. 8016fae: 4b13 ldr r3, [pc, #76] @ (8016ffc <prvCheckForValidListAndQueue+0x6c>)
  55629. 8016fb0: 4a10 ldr r2, [pc, #64] @ (8016ff4 <prvCheckForValidListAndQueue+0x64>)
  55630. 8016fb2: 601a str r2, [r3, #0]
  55631. pxOverflowTimerList = &xActiveTimerList2;
  55632. 8016fb4: 4b12 ldr r3, [pc, #72] @ (8017000 <prvCheckForValidListAndQueue+0x70>)
  55633. 8016fb6: 4a10 ldr r2, [pc, #64] @ (8016ff8 <prvCheckForValidListAndQueue+0x68>)
  55634. 8016fb8: 601a str r2, [r3, #0]
  55635. /* The timer queue is allocated statically in case
  55636. configSUPPORT_DYNAMIC_ALLOCATION is 0. */
  55637. static StaticQueue_t xStaticTimerQueue; /*lint !e956 Ok to declare in this manner to prevent additional conditional compilation guards in other locations. */
  55638. static uint8_t ucStaticTimerQueueStorage[ ( size_t ) configTIMER_QUEUE_LENGTH * sizeof( DaemonTaskMessage_t ) ]; /*lint !e956 Ok to declare in this manner to prevent additional conditional compilation guards in other locations. */
  55639. xTimerQueue = xQueueCreateStatic( ( UBaseType_t ) configTIMER_QUEUE_LENGTH, ( UBaseType_t ) sizeof( DaemonTaskMessage_t ), &( ucStaticTimerQueueStorage[ 0 ] ), &xStaticTimerQueue );
  55640. 8016fba: 2300 movs r3, #0
  55641. 8016fbc: 9300 str r3, [sp, #0]
  55642. 8016fbe: 4b11 ldr r3, [pc, #68] @ (8017004 <prvCheckForValidListAndQueue+0x74>)
  55643. 8016fc0: 4a11 ldr r2, [pc, #68] @ (8017008 <prvCheckForValidListAndQueue+0x78>)
  55644. 8016fc2: 2110 movs r1, #16
  55645. 8016fc4: 200a movs r0, #10
  55646. 8016fc6: f7fd f891 bl 80140ec <xQueueGenericCreateStatic>
  55647. 8016fca: 4603 mov r3, r0
  55648. 8016fcc: 4a08 ldr r2, [pc, #32] @ (8016ff0 <prvCheckForValidListAndQueue+0x60>)
  55649. 8016fce: 6013 str r3, [r2, #0]
  55650. }
  55651. #endif
  55652. #if ( configQUEUE_REGISTRY_SIZE > 0 )
  55653. {
  55654. if( xTimerQueue != NULL )
  55655. 8016fd0: 4b07 ldr r3, [pc, #28] @ (8016ff0 <prvCheckForValidListAndQueue+0x60>)
  55656. 8016fd2: 681b ldr r3, [r3, #0]
  55657. 8016fd4: 2b00 cmp r3, #0
  55658. 8016fd6: d005 beq.n 8016fe4 <prvCheckForValidListAndQueue+0x54>
  55659. {
  55660. vQueueAddToRegistry( xTimerQueue, "TmrQ" );
  55661. 8016fd8: 4b05 ldr r3, [pc, #20] @ (8016ff0 <prvCheckForValidListAndQueue+0x60>)
  55662. 8016fda: 681b ldr r3, [r3, #0]
  55663. 8016fdc: 490b ldr r1, [pc, #44] @ (801700c <prvCheckForValidListAndQueue+0x7c>)
  55664. 8016fde: 4618 mov r0, r3
  55665. 8016fe0: f7fd ff54 bl 8014e8c <vQueueAddToRegistry>
  55666. else
  55667. {
  55668. mtCOVERAGE_TEST_MARKER();
  55669. }
  55670. }
  55671. taskEXIT_CRITICAL();
  55672. 8016fe4: f000 f9c2 bl 801736c <vPortExitCritical>
  55673. }
  55674. 8016fe8: bf00 nop
  55675. 8016fea: 46bd mov sp, r7
  55676. 8016fec: bd80 pop {r7, pc}
  55677. 8016fee: bf00 nop
  55678. 8016ff0: 24002b70 .word 0x24002b70
  55679. 8016ff4: 24002b40 .word 0x24002b40
  55680. 8016ff8: 24002b54 .word 0x24002b54
  55681. 8016ffc: 24002b68 .word 0x24002b68
  55682. 8017000: 24002b6c .word 0x24002b6c
  55683. 8017004: 24002c1c .word 0x24002c1c
  55684. 8017008: 24002b7c .word 0x24002b7c
  55685. 801700c: 0801895c .word 0x0801895c
  55686. 08017010 <xTimerIsTimerActive>:
  55687. /*-----------------------------------------------------------*/
  55688. BaseType_t xTimerIsTimerActive( TimerHandle_t xTimer )
  55689. {
  55690. 8017010: b580 push {r7, lr}
  55691. 8017012: b086 sub sp, #24
  55692. 8017014: af00 add r7, sp, #0
  55693. 8017016: 6078 str r0, [r7, #4]
  55694. BaseType_t xReturn;
  55695. Timer_t *pxTimer = xTimer;
  55696. 8017018: 687b ldr r3, [r7, #4]
  55697. 801701a: 613b str r3, [r7, #16]
  55698. configASSERT( xTimer );
  55699. 801701c: 687b ldr r3, [r7, #4]
  55700. 801701e: 2b00 cmp r3, #0
  55701. 8017020: d10b bne.n 801703a <xTimerIsTimerActive+0x2a>
  55702. __asm volatile
  55703. 8017022: f04f 0350 mov.w r3, #80 @ 0x50
  55704. 8017026: f383 8811 msr BASEPRI, r3
  55705. 801702a: f3bf 8f6f isb sy
  55706. 801702e: f3bf 8f4f dsb sy
  55707. 8017032: 60fb str r3, [r7, #12]
  55708. }
  55709. 8017034: bf00 nop
  55710. 8017036: bf00 nop
  55711. 8017038: e7fd b.n 8017036 <xTimerIsTimerActive+0x26>
  55712. /* Is the timer in the list of active timers? */
  55713. taskENTER_CRITICAL();
  55714. 801703a: f000 f965 bl 8017308 <vPortEnterCritical>
  55715. {
  55716. if( ( pxTimer->ucStatus & tmrSTATUS_IS_ACTIVE ) == 0 )
  55717. 801703e: 693b ldr r3, [r7, #16]
  55718. 8017040: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  55719. 8017044: f003 0301 and.w r3, r3, #1
  55720. 8017048: 2b00 cmp r3, #0
  55721. 801704a: d102 bne.n 8017052 <xTimerIsTimerActive+0x42>
  55722. {
  55723. xReturn = pdFALSE;
  55724. 801704c: 2300 movs r3, #0
  55725. 801704e: 617b str r3, [r7, #20]
  55726. 8017050: e001 b.n 8017056 <xTimerIsTimerActive+0x46>
  55727. }
  55728. else
  55729. {
  55730. xReturn = pdTRUE;
  55731. 8017052: 2301 movs r3, #1
  55732. 8017054: 617b str r3, [r7, #20]
  55733. }
  55734. }
  55735. taskEXIT_CRITICAL();
  55736. 8017056: f000 f989 bl 801736c <vPortExitCritical>
  55737. return xReturn;
  55738. 801705a: 697b ldr r3, [r7, #20]
  55739. } /*lint !e818 Can't be pointer to const due to the typedef. */
  55740. 801705c: 4618 mov r0, r3
  55741. 801705e: 3718 adds r7, #24
  55742. 8017060: 46bd mov sp, r7
  55743. 8017062: bd80 pop {r7, pc}
  55744. 08017064 <pvTimerGetTimerID>:
  55745. /*-----------------------------------------------------------*/
  55746. void *pvTimerGetTimerID( const TimerHandle_t xTimer )
  55747. {
  55748. 8017064: b580 push {r7, lr}
  55749. 8017066: b086 sub sp, #24
  55750. 8017068: af00 add r7, sp, #0
  55751. 801706a: 6078 str r0, [r7, #4]
  55752. Timer_t * const pxTimer = xTimer;
  55753. 801706c: 687b ldr r3, [r7, #4]
  55754. 801706e: 617b str r3, [r7, #20]
  55755. void *pvReturn;
  55756. configASSERT( xTimer );
  55757. 8017070: 687b ldr r3, [r7, #4]
  55758. 8017072: 2b00 cmp r3, #0
  55759. 8017074: d10b bne.n 801708e <pvTimerGetTimerID+0x2a>
  55760. __asm volatile
  55761. 8017076: f04f 0350 mov.w r3, #80 @ 0x50
  55762. 801707a: f383 8811 msr BASEPRI, r3
  55763. 801707e: f3bf 8f6f isb sy
  55764. 8017082: f3bf 8f4f dsb sy
  55765. 8017086: 60fb str r3, [r7, #12]
  55766. }
  55767. 8017088: bf00 nop
  55768. 801708a: bf00 nop
  55769. 801708c: e7fd b.n 801708a <pvTimerGetTimerID+0x26>
  55770. taskENTER_CRITICAL();
  55771. 801708e: f000 f93b bl 8017308 <vPortEnterCritical>
  55772. {
  55773. pvReturn = pxTimer->pvTimerID;
  55774. 8017092: 697b ldr r3, [r7, #20]
  55775. 8017094: 69db ldr r3, [r3, #28]
  55776. 8017096: 613b str r3, [r7, #16]
  55777. }
  55778. taskEXIT_CRITICAL();
  55779. 8017098: f000 f968 bl 801736c <vPortExitCritical>
  55780. return pvReturn;
  55781. 801709c: 693b ldr r3, [r7, #16]
  55782. }
  55783. 801709e: 4618 mov r0, r3
  55784. 80170a0: 3718 adds r7, #24
  55785. 80170a2: 46bd mov sp, r7
  55786. 80170a4: bd80 pop {r7, pc}
  55787. ...
  55788. 080170a8 <pxPortInitialiseStack>:
  55789. /*
  55790. * See header file for description.
  55791. */
  55792. StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters )
  55793. {
  55794. 80170a8: b480 push {r7}
  55795. 80170aa: b085 sub sp, #20
  55796. 80170ac: af00 add r7, sp, #0
  55797. 80170ae: 60f8 str r0, [r7, #12]
  55798. 80170b0: 60b9 str r1, [r7, #8]
  55799. 80170b2: 607a str r2, [r7, #4]
  55800. /* Simulate the stack frame as it would be created by a context switch
  55801. interrupt. */
  55802. /* Offset added to account for the way the MCU uses the stack on entry/exit
  55803. of interrupts, and to ensure alignment. */
  55804. pxTopOfStack--;
  55805. 80170b4: 68fb ldr r3, [r7, #12]
  55806. 80170b6: 3b04 subs r3, #4
  55807. 80170b8: 60fb str r3, [r7, #12]
  55808. *pxTopOfStack = portINITIAL_XPSR; /* xPSR */
  55809. 80170ba: 68fb ldr r3, [r7, #12]
  55810. 80170bc: f04f 7280 mov.w r2, #16777216 @ 0x1000000
  55811. 80170c0: 601a str r2, [r3, #0]
  55812. pxTopOfStack--;
  55813. 80170c2: 68fb ldr r3, [r7, #12]
  55814. 80170c4: 3b04 subs r3, #4
  55815. 80170c6: 60fb str r3, [r7, #12]
  55816. *pxTopOfStack = ( ( StackType_t ) pxCode ) & portSTART_ADDRESS_MASK; /* PC */
  55817. 80170c8: 68bb ldr r3, [r7, #8]
  55818. 80170ca: f023 0201 bic.w r2, r3, #1
  55819. 80170ce: 68fb ldr r3, [r7, #12]
  55820. 80170d0: 601a str r2, [r3, #0]
  55821. pxTopOfStack--;
  55822. 80170d2: 68fb ldr r3, [r7, #12]
  55823. 80170d4: 3b04 subs r3, #4
  55824. 80170d6: 60fb str r3, [r7, #12]
  55825. *pxTopOfStack = ( StackType_t ) portTASK_RETURN_ADDRESS; /* LR */
  55826. 80170d8: 4a0c ldr r2, [pc, #48] @ (801710c <pxPortInitialiseStack+0x64>)
  55827. 80170da: 68fb ldr r3, [r7, #12]
  55828. 80170dc: 601a str r2, [r3, #0]
  55829. /* Save code space by skipping register initialisation. */
  55830. pxTopOfStack -= 5; /* R12, R3, R2 and R1. */
  55831. 80170de: 68fb ldr r3, [r7, #12]
  55832. 80170e0: 3b14 subs r3, #20
  55833. 80170e2: 60fb str r3, [r7, #12]
  55834. *pxTopOfStack = ( StackType_t ) pvParameters; /* R0 */
  55835. 80170e4: 687a ldr r2, [r7, #4]
  55836. 80170e6: 68fb ldr r3, [r7, #12]
  55837. 80170e8: 601a str r2, [r3, #0]
  55838. /* A save method is being used that requires each task to maintain its
  55839. own exec return value. */
  55840. pxTopOfStack--;
  55841. 80170ea: 68fb ldr r3, [r7, #12]
  55842. 80170ec: 3b04 subs r3, #4
  55843. 80170ee: 60fb str r3, [r7, #12]
  55844. *pxTopOfStack = portINITIAL_EXC_RETURN;
  55845. 80170f0: 68fb ldr r3, [r7, #12]
  55846. 80170f2: f06f 0202 mvn.w r2, #2
  55847. 80170f6: 601a str r2, [r3, #0]
  55848. pxTopOfStack -= 8; /* R11, R10, R9, R8, R7, R6, R5 and R4. */
  55849. 80170f8: 68fb ldr r3, [r7, #12]
  55850. 80170fa: 3b20 subs r3, #32
  55851. 80170fc: 60fb str r3, [r7, #12]
  55852. return pxTopOfStack;
  55853. 80170fe: 68fb ldr r3, [r7, #12]
  55854. }
  55855. 8017100: 4618 mov r0, r3
  55856. 8017102: 3714 adds r7, #20
  55857. 8017104: 46bd mov sp, r7
  55858. 8017106: f85d 7b04 ldr.w r7, [sp], #4
  55859. 801710a: 4770 bx lr
  55860. 801710c: 08017111 .word 0x08017111
  55861. 08017110 <prvTaskExitError>:
  55862. /*-----------------------------------------------------------*/
  55863. static void prvTaskExitError( void )
  55864. {
  55865. 8017110: b480 push {r7}
  55866. 8017112: b085 sub sp, #20
  55867. 8017114: af00 add r7, sp, #0
  55868. volatile uint32_t ulDummy = 0;
  55869. 8017116: 2300 movs r3, #0
  55870. 8017118: 607b str r3, [r7, #4]
  55871. its caller as there is nothing to return to. If a task wants to exit it
  55872. should instead call vTaskDelete( NULL ).
  55873. Artificially force an assert() to be triggered if configASSERT() is
  55874. defined, then stop here so application writers can catch the error. */
  55875. configASSERT( uxCriticalNesting == ~0UL );
  55876. 801711a: 4b13 ldr r3, [pc, #76] @ (8017168 <prvTaskExitError+0x58>)
  55877. 801711c: 681b ldr r3, [r3, #0]
  55878. 801711e: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  55879. 8017122: d00b beq.n 801713c <prvTaskExitError+0x2c>
  55880. __asm volatile
  55881. 8017124: f04f 0350 mov.w r3, #80 @ 0x50
  55882. 8017128: f383 8811 msr BASEPRI, r3
  55883. 801712c: f3bf 8f6f isb sy
  55884. 8017130: f3bf 8f4f dsb sy
  55885. 8017134: 60fb str r3, [r7, #12]
  55886. }
  55887. 8017136: bf00 nop
  55888. 8017138: bf00 nop
  55889. 801713a: e7fd b.n 8017138 <prvTaskExitError+0x28>
  55890. __asm volatile
  55891. 801713c: f04f 0350 mov.w r3, #80 @ 0x50
  55892. 8017140: f383 8811 msr BASEPRI, r3
  55893. 8017144: f3bf 8f6f isb sy
  55894. 8017148: f3bf 8f4f dsb sy
  55895. 801714c: 60bb str r3, [r7, #8]
  55896. }
  55897. 801714e: bf00 nop
  55898. portDISABLE_INTERRUPTS();
  55899. while( ulDummy == 0 )
  55900. 8017150: bf00 nop
  55901. 8017152: 687b ldr r3, [r7, #4]
  55902. 8017154: 2b00 cmp r3, #0
  55903. 8017156: d0fc beq.n 8017152 <prvTaskExitError+0x42>
  55904. about code appearing after this function is called - making ulDummy
  55905. volatile makes the compiler think the function could return and
  55906. therefore not output an 'unreachable code' warning for code that appears
  55907. after it. */
  55908. }
  55909. }
  55910. 8017158: bf00 nop
  55911. 801715a: bf00 nop
  55912. 801715c: 3714 adds r7, #20
  55913. 801715e: 46bd mov sp, r7
  55914. 8017160: f85d 7b04 ldr.w r7, [sp], #4
  55915. 8017164: 4770 bx lr
  55916. 8017166: bf00 nop
  55917. 8017168: 24000044 .word 0x24000044
  55918. 801716c: 00000000 .word 0x00000000
  55919. 08017170 <SVC_Handler>:
  55920. /*-----------------------------------------------------------*/
  55921. void vPortSVCHandler( void )
  55922. {
  55923. __asm volatile (
  55924. 8017170: 4b07 ldr r3, [pc, #28] @ (8017190 <pxCurrentTCBConst2>)
  55925. 8017172: 6819 ldr r1, [r3, #0]
  55926. 8017174: 6808 ldr r0, [r1, #0]
  55927. 8017176: e8b0 4ff0 ldmia.w r0!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
  55928. 801717a: f380 8809 msr PSP, r0
  55929. 801717e: f3bf 8f6f isb sy
  55930. 8017182: f04f 0000 mov.w r0, #0
  55931. 8017186: f380 8811 msr BASEPRI, r0
  55932. 801718a: 4770 bx lr
  55933. 801718c: f3af 8000 nop.w
  55934. 08017190 <pxCurrentTCBConst2>:
  55935. 8017190: 24002640 .word 0x24002640
  55936. " bx r14 \n"
  55937. " \n"
  55938. " .align 4 \n"
  55939. "pxCurrentTCBConst2: .word pxCurrentTCB \n"
  55940. );
  55941. }
  55942. 8017194: bf00 nop
  55943. 8017196: bf00 nop
  55944. 08017198 <prvPortStartFirstTask>:
  55945. {
  55946. /* Start the first task. This also clears the bit that indicates the FPU is
  55947. in use in case the FPU was used before the scheduler was started - which
  55948. would otherwise result in the unnecessary leaving of space in the SVC stack
  55949. for lazy saving of FPU registers. */
  55950. __asm volatile(
  55951. 8017198: 4808 ldr r0, [pc, #32] @ (80171bc <prvPortStartFirstTask+0x24>)
  55952. 801719a: 6800 ldr r0, [r0, #0]
  55953. 801719c: 6800 ldr r0, [r0, #0]
  55954. 801719e: f380 8808 msr MSP, r0
  55955. 80171a2: f04f 0000 mov.w r0, #0
  55956. 80171a6: f380 8814 msr CONTROL, r0
  55957. 80171aa: b662 cpsie i
  55958. 80171ac: b661 cpsie f
  55959. 80171ae: f3bf 8f4f dsb sy
  55960. 80171b2: f3bf 8f6f isb sy
  55961. 80171b6: df00 svc 0
  55962. 80171b8: bf00 nop
  55963. " dsb \n"
  55964. " isb \n"
  55965. " svc 0 \n" /* System call to start first task. */
  55966. " nop \n"
  55967. );
  55968. }
  55969. 80171ba: bf00 nop
  55970. 80171bc: e000ed08 .word 0xe000ed08
  55971. 080171c0 <xPortStartScheduler>:
  55972. /*
  55973. * See header file for description.
  55974. */
  55975. BaseType_t xPortStartScheduler( void )
  55976. {
  55977. 80171c0: b580 push {r7, lr}
  55978. 80171c2: b086 sub sp, #24
  55979. 80171c4: af00 add r7, sp, #0
  55980. configASSERT( configMAX_SYSCALL_INTERRUPT_PRIORITY );
  55981. /* This port can be used on all revisions of the Cortex-M7 core other than
  55982. the r0p1 parts. r0p1 parts should use the port from the
  55983. /source/portable/GCC/ARM_CM7/r0p1 directory. */
  55984. configASSERT( portCPUID != portCORTEX_M7_r0p1_ID );
  55985. 80171c6: 4b47 ldr r3, [pc, #284] @ (80172e4 <xPortStartScheduler+0x124>)
  55986. 80171c8: 681b ldr r3, [r3, #0]
  55987. 80171ca: 4a47 ldr r2, [pc, #284] @ (80172e8 <xPortStartScheduler+0x128>)
  55988. 80171cc: 4293 cmp r3, r2
  55989. 80171ce: d10b bne.n 80171e8 <xPortStartScheduler+0x28>
  55990. __asm volatile
  55991. 80171d0: f04f 0350 mov.w r3, #80 @ 0x50
  55992. 80171d4: f383 8811 msr BASEPRI, r3
  55993. 80171d8: f3bf 8f6f isb sy
  55994. 80171dc: f3bf 8f4f dsb sy
  55995. 80171e0: 613b str r3, [r7, #16]
  55996. }
  55997. 80171e2: bf00 nop
  55998. 80171e4: bf00 nop
  55999. 80171e6: e7fd b.n 80171e4 <xPortStartScheduler+0x24>
  56000. configASSERT( portCPUID != portCORTEX_M7_r0p0_ID );
  56001. 80171e8: 4b3e ldr r3, [pc, #248] @ (80172e4 <xPortStartScheduler+0x124>)
  56002. 80171ea: 681b ldr r3, [r3, #0]
  56003. 80171ec: 4a3f ldr r2, [pc, #252] @ (80172ec <xPortStartScheduler+0x12c>)
  56004. 80171ee: 4293 cmp r3, r2
  56005. 80171f0: d10b bne.n 801720a <xPortStartScheduler+0x4a>
  56006. __asm volatile
  56007. 80171f2: f04f 0350 mov.w r3, #80 @ 0x50
  56008. 80171f6: f383 8811 msr BASEPRI, r3
  56009. 80171fa: f3bf 8f6f isb sy
  56010. 80171fe: f3bf 8f4f dsb sy
  56011. 8017202: 60fb str r3, [r7, #12]
  56012. }
  56013. 8017204: bf00 nop
  56014. 8017206: bf00 nop
  56015. 8017208: e7fd b.n 8017206 <xPortStartScheduler+0x46>
  56016. #if( configASSERT_DEFINED == 1 )
  56017. {
  56018. volatile uint32_t ulOriginalPriority;
  56019. volatile uint8_t * const pucFirstUserPriorityRegister = ( volatile uint8_t * const ) ( portNVIC_IP_REGISTERS_OFFSET_16 + portFIRST_USER_INTERRUPT_NUMBER );
  56020. 801720a: 4b39 ldr r3, [pc, #228] @ (80172f0 <xPortStartScheduler+0x130>)
  56021. 801720c: 617b str r3, [r7, #20]
  56022. functions can be called. ISR safe functions are those that end in
  56023. "FromISR". FreeRTOS maintains separate thread and ISR API functions to
  56024. ensure interrupt entry is as fast and simple as possible.
  56025. Save the interrupt priority value that is about to be clobbered. */
  56026. ulOriginalPriority = *pucFirstUserPriorityRegister;
  56027. 801720e: 697b ldr r3, [r7, #20]
  56028. 8017210: 781b ldrb r3, [r3, #0]
  56029. 8017212: b2db uxtb r3, r3
  56030. 8017214: 607b str r3, [r7, #4]
  56031. /* Determine the number of priority bits available. First write to all
  56032. possible bits. */
  56033. *pucFirstUserPriorityRegister = portMAX_8_BIT_VALUE;
  56034. 8017216: 697b ldr r3, [r7, #20]
  56035. 8017218: 22ff movs r2, #255 @ 0xff
  56036. 801721a: 701a strb r2, [r3, #0]
  56037. /* Read the value back to see how many bits stuck. */
  56038. ucMaxPriorityValue = *pucFirstUserPriorityRegister;
  56039. 801721c: 697b ldr r3, [r7, #20]
  56040. 801721e: 781b ldrb r3, [r3, #0]
  56041. 8017220: b2db uxtb r3, r3
  56042. 8017222: 70fb strb r3, [r7, #3]
  56043. /* Use the same mask on the maximum system call priority. */
  56044. ucMaxSysCallPriority = configMAX_SYSCALL_INTERRUPT_PRIORITY & ucMaxPriorityValue;
  56045. 8017224: 78fb ldrb r3, [r7, #3]
  56046. 8017226: b2db uxtb r3, r3
  56047. 8017228: f003 0350 and.w r3, r3, #80 @ 0x50
  56048. 801722c: b2da uxtb r2, r3
  56049. 801722e: 4b31 ldr r3, [pc, #196] @ (80172f4 <xPortStartScheduler+0x134>)
  56050. 8017230: 701a strb r2, [r3, #0]
  56051. /* Calculate the maximum acceptable priority group value for the number
  56052. of bits read back. */
  56053. ulMaxPRIGROUPValue = portMAX_PRIGROUP_BITS;
  56054. 8017232: 4b31 ldr r3, [pc, #196] @ (80172f8 <xPortStartScheduler+0x138>)
  56055. 8017234: 2207 movs r2, #7
  56056. 8017236: 601a str r2, [r3, #0]
  56057. while( ( ucMaxPriorityValue & portTOP_BIT_OF_BYTE ) == portTOP_BIT_OF_BYTE )
  56058. 8017238: e009 b.n 801724e <xPortStartScheduler+0x8e>
  56059. {
  56060. ulMaxPRIGROUPValue--;
  56061. 801723a: 4b2f ldr r3, [pc, #188] @ (80172f8 <xPortStartScheduler+0x138>)
  56062. 801723c: 681b ldr r3, [r3, #0]
  56063. 801723e: 3b01 subs r3, #1
  56064. 8017240: 4a2d ldr r2, [pc, #180] @ (80172f8 <xPortStartScheduler+0x138>)
  56065. 8017242: 6013 str r3, [r2, #0]
  56066. ucMaxPriorityValue <<= ( uint8_t ) 0x01;
  56067. 8017244: 78fb ldrb r3, [r7, #3]
  56068. 8017246: b2db uxtb r3, r3
  56069. 8017248: 005b lsls r3, r3, #1
  56070. 801724a: b2db uxtb r3, r3
  56071. 801724c: 70fb strb r3, [r7, #3]
  56072. while( ( ucMaxPriorityValue & portTOP_BIT_OF_BYTE ) == portTOP_BIT_OF_BYTE )
  56073. 801724e: 78fb ldrb r3, [r7, #3]
  56074. 8017250: b2db uxtb r3, r3
  56075. 8017252: f003 0380 and.w r3, r3, #128 @ 0x80
  56076. 8017256: 2b80 cmp r3, #128 @ 0x80
  56077. 8017258: d0ef beq.n 801723a <xPortStartScheduler+0x7a>
  56078. #ifdef configPRIO_BITS
  56079. {
  56080. /* Check the FreeRTOS configuration that defines the number of
  56081. priority bits matches the number of priority bits actually queried
  56082. from the hardware. */
  56083. configASSERT( ( portMAX_PRIGROUP_BITS - ulMaxPRIGROUPValue ) == configPRIO_BITS );
  56084. 801725a: 4b27 ldr r3, [pc, #156] @ (80172f8 <xPortStartScheduler+0x138>)
  56085. 801725c: 681b ldr r3, [r3, #0]
  56086. 801725e: f1c3 0307 rsb r3, r3, #7
  56087. 8017262: 2b04 cmp r3, #4
  56088. 8017264: d00b beq.n 801727e <xPortStartScheduler+0xbe>
  56089. __asm volatile
  56090. 8017266: f04f 0350 mov.w r3, #80 @ 0x50
  56091. 801726a: f383 8811 msr BASEPRI, r3
  56092. 801726e: f3bf 8f6f isb sy
  56093. 8017272: f3bf 8f4f dsb sy
  56094. 8017276: 60bb str r3, [r7, #8]
  56095. }
  56096. 8017278: bf00 nop
  56097. 801727a: bf00 nop
  56098. 801727c: e7fd b.n 801727a <xPortStartScheduler+0xba>
  56099. }
  56100. #endif
  56101. /* Shift the priority group value back to its position within the AIRCR
  56102. register. */
  56103. ulMaxPRIGROUPValue <<= portPRIGROUP_SHIFT;
  56104. 801727e: 4b1e ldr r3, [pc, #120] @ (80172f8 <xPortStartScheduler+0x138>)
  56105. 8017280: 681b ldr r3, [r3, #0]
  56106. 8017282: 021b lsls r3, r3, #8
  56107. 8017284: 4a1c ldr r2, [pc, #112] @ (80172f8 <xPortStartScheduler+0x138>)
  56108. 8017286: 6013 str r3, [r2, #0]
  56109. ulMaxPRIGROUPValue &= portPRIORITY_GROUP_MASK;
  56110. 8017288: 4b1b ldr r3, [pc, #108] @ (80172f8 <xPortStartScheduler+0x138>)
  56111. 801728a: 681b ldr r3, [r3, #0]
  56112. 801728c: f403 63e0 and.w r3, r3, #1792 @ 0x700
  56113. 8017290: 4a19 ldr r2, [pc, #100] @ (80172f8 <xPortStartScheduler+0x138>)
  56114. 8017292: 6013 str r3, [r2, #0]
  56115. /* Restore the clobbered interrupt priority register to its original
  56116. value. */
  56117. *pucFirstUserPriorityRegister = ulOriginalPriority;
  56118. 8017294: 687b ldr r3, [r7, #4]
  56119. 8017296: b2da uxtb r2, r3
  56120. 8017298: 697b ldr r3, [r7, #20]
  56121. 801729a: 701a strb r2, [r3, #0]
  56122. }
  56123. #endif /* conifgASSERT_DEFINED */
  56124. /* Make PendSV and SysTick the lowest priority interrupts. */
  56125. portNVIC_SYSPRI2_REG |= portNVIC_PENDSV_PRI;
  56126. 801729c: 4b17 ldr r3, [pc, #92] @ (80172fc <xPortStartScheduler+0x13c>)
  56127. 801729e: 681b ldr r3, [r3, #0]
  56128. 80172a0: 4a16 ldr r2, [pc, #88] @ (80172fc <xPortStartScheduler+0x13c>)
  56129. 80172a2: f443 0370 orr.w r3, r3, #15728640 @ 0xf00000
  56130. 80172a6: 6013 str r3, [r2, #0]
  56131. portNVIC_SYSPRI2_REG |= portNVIC_SYSTICK_PRI;
  56132. 80172a8: 4b14 ldr r3, [pc, #80] @ (80172fc <xPortStartScheduler+0x13c>)
  56133. 80172aa: 681b ldr r3, [r3, #0]
  56134. 80172ac: 4a13 ldr r2, [pc, #76] @ (80172fc <xPortStartScheduler+0x13c>)
  56135. 80172ae: f043 4370 orr.w r3, r3, #4026531840 @ 0xf0000000
  56136. 80172b2: 6013 str r3, [r2, #0]
  56137. /* Start the timer that generates the tick ISR. Interrupts are disabled
  56138. here already. */
  56139. vPortSetupTimerInterrupt();
  56140. 80172b4: f000 f8da bl 801746c <vPortSetupTimerInterrupt>
  56141. /* Initialise the critical nesting count ready for the first task. */
  56142. uxCriticalNesting = 0;
  56143. 80172b8: 4b11 ldr r3, [pc, #68] @ (8017300 <xPortStartScheduler+0x140>)
  56144. 80172ba: 2200 movs r2, #0
  56145. 80172bc: 601a str r2, [r3, #0]
  56146. /* Ensure the VFP is enabled - it should be anyway. */
  56147. vPortEnableVFP();
  56148. 80172be: f000 f8f9 bl 80174b4 <vPortEnableVFP>
  56149. /* Lazy save always. */
  56150. *( portFPCCR ) |= portASPEN_AND_LSPEN_BITS;
  56151. 80172c2: 4b10 ldr r3, [pc, #64] @ (8017304 <xPortStartScheduler+0x144>)
  56152. 80172c4: 681b ldr r3, [r3, #0]
  56153. 80172c6: 4a0f ldr r2, [pc, #60] @ (8017304 <xPortStartScheduler+0x144>)
  56154. 80172c8: f043 4340 orr.w r3, r3, #3221225472 @ 0xc0000000
  56155. 80172cc: 6013 str r3, [r2, #0]
  56156. /* Start the first task. */
  56157. prvPortStartFirstTask();
  56158. 80172ce: f7ff ff63 bl 8017198 <prvPortStartFirstTask>
  56159. exit error function to prevent compiler warnings about a static function
  56160. not being called in the case that the application writer overrides this
  56161. functionality by defining configTASK_RETURN_ADDRESS. Call
  56162. vTaskSwitchContext() so link time optimisation does not remove the
  56163. symbol. */
  56164. vTaskSwitchContext();
  56165. 80172d2: f7fe fbd1 bl 8015a78 <vTaskSwitchContext>
  56166. prvTaskExitError();
  56167. 80172d6: f7ff ff1b bl 8017110 <prvTaskExitError>
  56168. /* Should not get here! */
  56169. return 0;
  56170. 80172da: 2300 movs r3, #0
  56171. }
  56172. 80172dc: 4618 mov r0, r3
  56173. 80172de: 3718 adds r7, #24
  56174. 80172e0: 46bd mov sp, r7
  56175. 80172e2: bd80 pop {r7, pc}
  56176. 80172e4: e000ed00 .word 0xe000ed00
  56177. 80172e8: 410fc271 .word 0x410fc271
  56178. 80172ec: 410fc270 .word 0x410fc270
  56179. 80172f0: e000e400 .word 0xe000e400
  56180. 80172f4: 24002c6c .word 0x24002c6c
  56181. 80172f8: 24002c70 .word 0x24002c70
  56182. 80172fc: e000ed20 .word 0xe000ed20
  56183. 8017300: 24000044 .word 0x24000044
  56184. 8017304: e000ef34 .word 0xe000ef34
  56185. 08017308 <vPortEnterCritical>:
  56186. configASSERT( uxCriticalNesting == 1000UL );
  56187. }
  56188. /*-----------------------------------------------------------*/
  56189. void vPortEnterCritical( void )
  56190. {
  56191. 8017308: b480 push {r7}
  56192. 801730a: b083 sub sp, #12
  56193. 801730c: af00 add r7, sp, #0
  56194. __asm volatile
  56195. 801730e: f04f 0350 mov.w r3, #80 @ 0x50
  56196. 8017312: f383 8811 msr BASEPRI, r3
  56197. 8017316: f3bf 8f6f isb sy
  56198. 801731a: f3bf 8f4f dsb sy
  56199. 801731e: 607b str r3, [r7, #4]
  56200. }
  56201. 8017320: bf00 nop
  56202. portDISABLE_INTERRUPTS();
  56203. uxCriticalNesting++;
  56204. 8017322: 4b10 ldr r3, [pc, #64] @ (8017364 <vPortEnterCritical+0x5c>)
  56205. 8017324: 681b ldr r3, [r3, #0]
  56206. 8017326: 3301 adds r3, #1
  56207. 8017328: 4a0e ldr r2, [pc, #56] @ (8017364 <vPortEnterCritical+0x5c>)
  56208. 801732a: 6013 str r3, [r2, #0]
  56209. /* This is not the interrupt safe version of the enter critical function so
  56210. assert() if it is being called from an interrupt context. Only API
  56211. functions that end in "FromISR" can be used in an interrupt. Only assert if
  56212. the critical nesting count is 1 to protect against recursive calls if the
  56213. assert function also uses a critical section. */
  56214. if( uxCriticalNesting == 1 )
  56215. 801732c: 4b0d ldr r3, [pc, #52] @ (8017364 <vPortEnterCritical+0x5c>)
  56216. 801732e: 681b ldr r3, [r3, #0]
  56217. 8017330: 2b01 cmp r3, #1
  56218. 8017332: d110 bne.n 8017356 <vPortEnterCritical+0x4e>
  56219. {
  56220. configASSERT( ( portNVIC_INT_CTRL_REG & portVECTACTIVE_MASK ) == 0 );
  56221. 8017334: 4b0c ldr r3, [pc, #48] @ (8017368 <vPortEnterCritical+0x60>)
  56222. 8017336: 681b ldr r3, [r3, #0]
  56223. 8017338: b2db uxtb r3, r3
  56224. 801733a: 2b00 cmp r3, #0
  56225. 801733c: d00b beq.n 8017356 <vPortEnterCritical+0x4e>
  56226. __asm volatile
  56227. 801733e: f04f 0350 mov.w r3, #80 @ 0x50
  56228. 8017342: f383 8811 msr BASEPRI, r3
  56229. 8017346: f3bf 8f6f isb sy
  56230. 801734a: f3bf 8f4f dsb sy
  56231. 801734e: 603b str r3, [r7, #0]
  56232. }
  56233. 8017350: bf00 nop
  56234. 8017352: bf00 nop
  56235. 8017354: e7fd b.n 8017352 <vPortEnterCritical+0x4a>
  56236. }
  56237. }
  56238. 8017356: bf00 nop
  56239. 8017358: 370c adds r7, #12
  56240. 801735a: 46bd mov sp, r7
  56241. 801735c: f85d 7b04 ldr.w r7, [sp], #4
  56242. 8017360: 4770 bx lr
  56243. 8017362: bf00 nop
  56244. 8017364: 24000044 .word 0x24000044
  56245. 8017368: e000ed04 .word 0xe000ed04
  56246. 0801736c <vPortExitCritical>:
  56247. /*-----------------------------------------------------------*/
  56248. void vPortExitCritical( void )
  56249. {
  56250. 801736c: b480 push {r7}
  56251. 801736e: b083 sub sp, #12
  56252. 8017370: af00 add r7, sp, #0
  56253. configASSERT( uxCriticalNesting );
  56254. 8017372: 4b12 ldr r3, [pc, #72] @ (80173bc <vPortExitCritical+0x50>)
  56255. 8017374: 681b ldr r3, [r3, #0]
  56256. 8017376: 2b00 cmp r3, #0
  56257. 8017378: d10b bne.n 8017392 <vPortExitCritical+0x26>
  56258. __asm volatile
  56259. 801737a: f04f 0350 mov.w r3, #80 @ 0x50
  56260. 801737e: f383 8811 msr BASEPRI, r3
  56261. 8017382: f3bf 8f6f isb sy
  56262. 8017386: f3bf 8f4f dsb sy
  56263. 801738a: 607b str r3, [r7, #4]
  56264. }
  56265. 801738c: bf00 nop
  56266. 801738e: bf00 nop
  56267. 8017390: e7fd b.n 801738e <vPortExitCritical+0x22>
  56268. uxCriticalNesting--;
  56269. 8017392: 4b0a ldr r3, [pc, #40] @ (80173bc <vPortExitCritical+0x50>)
  56270. 8017394: 681b ldr r3, [r3, #0]
  56271. 8017396: 3b01 subs r3, #1
  56272. 8017398: 4a08 ldr r2, [pc, #32] @ (80173bc <vPortExitCritical+0x50>)
  56273. 801739a: 6013 str r3, [r2, #0]
  56274. if( uxCriticalNesting == 0 )
  56275. 801739c: 4b07 ldr r3, [pc, #28] @ (80173bc <vPortExitCritical+0x50>)
  56276. 801739e: 681b ldr r3, [r3, #0]
  56277. 80173a0: 2b00 cmp r3, #0
  56278. 80173a2: d105 bne.n 80173b0 <vPortExitCritical+0x44>
  56279. 80173a4: 2300 movs r3, #0
  56280. 80173a6: 603b str r3, [r7, #0]
  56281. __asm volatile
  56282. 80173a8: 683b ldr r3, [r7, #0]
  56283. 80173aa: f383 8811 msr BASEPRI, r3
  56284. }
  56285. 80173ae: bf00 nop
  56286. {
  56287. portENABLE_INTERRUPTS();
  56288. }
  56289. }
  56290. 80173b0: bf00 nop
  56291. 80173b2: 370c adds r7, #12
  56292. 80173b4: 46bd mov sp, r7
  56293. 80173b6: f85d 7b04 ldr.w r7, [sp], #4
  56294. 80173ba: 4770 bx lr
  56295. 80173bc: 24000044 .word 0x24000044
  56296. 080173c0 <PendSV_Handler>:
  56297. void xPortPendSVHandler( void )
  56298. {
  56299. /* This is a naked function. */
  56300. __asm volatile
  56301. 80173c0: f3ef 8009 mrs r0, PSP
  56302. 80173c4: f3bf 8f6f isb sy
  56303. 80173c8: 4b15 ldr r3, [pc, #84] @ (8017420 <pxCurrentTCBConst>)
  56304. 80173ca: 681a ldr r2, [r3, #0]
  56305. 80173cc: f01e 0f10 tst.w lr, #16
  56306. 80173d0: bf08 it eq
  56307. 80173d2: ed20 8a10 vstmdbeq r0!, {s16-s31}
  56308. 80173d6: e920 4ff0 stmdb r0!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
  56309. 80173da: 6010 str r0, [r2, #0]
  56310. 80173dc: e92d 0009 stmdb sp!, {r0, r3}
  56311. 80173e0: f04f 0050 mov.w r0, #80 @ 0x50
  56312. 80173e4: f380 8811 msr BASEPRI, r0
  56313. 80173e8: f3bf 8f4f dsb sy
  56314. 80173ec: f3bf 8f6f isb sy
  56315. 80173f0: f7fe fb42 bl 8015a78 <vTaskSwitchContext>
  56316. 80173f4: f04f 0000 mov.w r0, #0
  56317. 80173f8: f380 8811 msr BASEPRI, r0
  56318. 80173fc: bc09 pop {r0, r3}
  56319. 80173fe: 6819 ldr r1, [r3, #0]
  56320. 8017400: 6808 ldr r0, [r1, #0]
  56321. 8017402: e8b0 4ff0 ldmia.w r0!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
  56322. 8017406: f01e 0f10 tst.w lr, #16
  56323. 801740a: bf08 it eq
  56324. 801740c: ecb0 8a10 vldmiaeq r0!, {s16-s31}
  56325. 8017410: f380 8809 msr PSP, r0
  56326. 8017414: f3bf 8f6f isb sy
  56327. 8017418: 4770 bx lr
  56328. 801741a: bf00 nop
  56329. 801741c: f3af 8000 nop.w
  56330. 08017420 <pxCurrentTCBConst>:
  56331. 8017420: 24002640 .word 0x24002640
  56332. " \n"
  56333. " .align 4 \n"
  56334. "pxCurrentTCBConst: .word pxCurrentTCB \n"
  56335. ::"i"(configMAX_SYSCALL_INTERRUPT_PRIORITY)
  56336. );
  56337. }
  56338. 8017424: bf00 nop
  56339. 8017426: bf00 nop
  56340. 08017428 <xPortSysTickHandler>:
  56341. /*-----------------------------------------------------------*/
  56342. void xPortSysTickHandler( void )
  56343. {
  56344. 8017428: b580 push {r7, lr}
  56345. 801742a: b082 sub sp, #8
  56346. 801742c: af00 add r7, sp, #0
  56347. __asm volatile
  56348. 801742e: f04f 0350 mov.w r3, #80 @ 0x50
  56349. 8017432: f383 8811 msr BASEPRI, r3
  56350. 8017436: f3bf 8f6f isb sy
  56351. 801743a: f3bf 8f4f dsb sy
  56352. 801743e: 607b str r3, [r7, #4]
  56353. }
  56354. 8017440: bf00 nop
  56355. save and then restore the interrupt mask value as its value is already
  56356. known. */
  56357. portDISABLE_INTERRUPTS();
  56358. {
  56359. /* Increment the RTOS tick. */
  56360. if( xTaskIncrementTick() != pdFALSE )
  56361. 8017442: f7fe fa5f bl 8015904 <xTaskIncrementTick>
  56362. 8017446: 4603 mov r3, r0
  56363. 8017448: 2b00 cmp r3, #0
  56364. 801744a: d003 beq.n 8017454 <xPortSysTickHandler+0x2c>
  56365. {
  56366. /* A context switch is required. Context switching is performed in
  56367. the PendSV interrupt. Pend the PendSV interrupt. */
  56368. portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT;
  56369. 801744c: 4b06 ldr r3, [pc, #24] @ (8017468 <xPortSysTickHandler+0x40>)
  56370. 801744e: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  56371. 8017452: 601a str r2, [r3, #0]
  56372. 8017454: 2300 movs r3, #0
  56373. 8017456: 603b str r3, [r7, #0]
  56374. __asm volatile
  56375. 8017458: 683b ldr r3, [r7, #0]
  56376. 801745a: f383 8811 msr BASEPRI, r3
  56377. }
  56378. 801745e: bf00 nop
  56379. }
  56380. }
  56381. portENABLE_INTERRUPTS();
  56382. }
  56383. 8017460: bf00 nop
  56384. 8017462: 3708 adds r7, #8
  56385. 8017464: 46bd mov sp, r7
  56386. 8017466: bd80 pop {r7, pc}
  56387. 8017468: e000ed04 .word 0xe000ed04
  56388. 0801746c <vPortSetupTimerInterrupt>:
  56389. /*
  56390. * Setup the systick timer to generate the tick interrupts at the required
  56391. * frequency.
  56392. */
  56393. __attribute__(( weak )) void vPortSetupTimerInterrupt( void )
  56394. {
  56395. 801746c: b480 push {r7}
  56396. 801746e: af00 add r7, sp, #0
  56397. ulStoppedTimerCompensation = portMISSED_COUNTS_FACTOR / ( configCPU_CLOCK_HZ / configSYSTICK_CLOCK_HZ );
  56398. }
  56399. #endif /* configUSE_TICKLESS_IDLE */
  56400. /* Stop and clear the SysTick. */
  56401. portNVIC_SYSTICK_CTRL_REG = 0UL;
  56402. 8017470: 4b0b ldr r3, [pc, #44] @ (80174a0 <vPortSetupTimerInterrupt+0x34>)
  56403. 8017472: 2200 movs r2, #0
  56404. 8017474: 601a str r2, [r3, #0]
  56405. portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL;
  56406. 8017476: 4b0b ldr r3, [pc, #44] @ (80174a4 <vPortSetupTimerInterrupt+0x38>)
  56407. 8017478: 2200 movs r2, #0
  56408. 801747a: 601a str r2, [r3, #0]
  56409. /* Configure SysTick to interrupt at the requested rate. */
  56410. portNVIC_SYSTICK_LOAD_REG = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL;
  56411. 801747c: 4b0a ldr r3, [pc, #40] @ (80174a8 <vPortSetupTimerInterrupt+0x3c>)
  56412. 801747e: 681b ldr r3, [r3, #0]
  56413. 8017480: 4a0a ldr r2, [pc, #40] @ (80174ac <vPortSetupTimerInterrupt+0x40>)
  56414. 8017482: fba2 2303 umull r2, r3, r2, r3
  56415. 8017486: 099b lsrs r3, r3, #6
  56416. 8017488: 4a09 ldr r2, [pc, #36] @ (80174b0 <vPortSetupTimerInterrupt+0x44>)
  56417. 801748a: 3b01 subs r3, #1
  56418. 801748c: 6013 str r3, [r2, #0]
  56419. portNVIC_SYSTICK_CTRL_REG = ( portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT );
  56420. 801748e: 4b04 ldr r3, [pc, #16] @ (80174a0 <vPortSetupTimerInterrupt+0x34>)
  56421. 8017490: 2207 movs r2, #7
  56422. 8017492: 601a str r2, [r3, #0]
  56423. }
  56424. 8017494: bf00 nop
  56425. 8017496: 46bd mov sp, r7
  56426. 8017498: f85d 7b04 ldr.w r7, [sp], #4
  56427. 801749c: 4770 bx lr
  56428. 801749e: bf00 nop
  56429. 80174a0: e000e010 .word 0xe000e010
  56430. 80174a4: e000e018 .word 0xe000e018
  56431. 80174a8: 24000034 .word 0x24000034
  56432. 80174ac: 10624dd3 .word 0x10624dd3
  56433. 80174b0: e000e014 .word 0xe000e014
  56434. 080174b4 <vPortEnableVFP>:
  56435. /*-----------------------------------------------------------*/
  56436. /* This is a naked function. */
  56437. static void vPortEnableVFP( void )
  56438. {
  56439. __asm volatile
  56440. 80174b4: f8df 000c ldr.w r0, [pc, #12] @ 80174c4 <vPortEnableVFP+0x10>
  56441. 80174b8: 6801 ldr r1, [r0, #0]
  56442. 80174ba: f441 0170 orr.w r1, r1, #15728640 @ 0xf00000
  56443. 80174be: 6001 str r1, [r0, #0]
  56444. 80174c0: 4770 bx lr
  56445. " \n"
  56446. " orr r1, r1, #( 0xf << 20 ) \n" /* Enable CP10 and CP11 coprocessors, then save back. */
  56447. " str r1, [r0] \n"
  56448. " bx r14 "
  56449. );
  56450. }
  56451. 80174c2: bf00 nop
  56452. 80174c4: e000ed88 .word 0xe000ed88
  56453. 080174c8 <vPortValidateInterruptPriority>:
  56454. /*-----------------------------------------------------------*/
  56455. #if( configASSERT_DEFINED == 1 )
  56456. void vPortValidateInterruptPriority( void )
  56457. {
  56458. 80174c8: b480 push {r7}
  56459. 80174ca: b085 sub sp, #20
  56460. 80174cc: af00 add r7, sp, #0
  56461. uint32_t ulCurrentInterrupt;
  56462. uint8_t ucCurrentPriority;
  56463. /* Obtain the number of the currently executing interrupt. */
  56464. __asm volatile( "mrs %0, ipsr" : "=r"( ulCurrentInterrupt ) :: "memory" );
  56465. 80174ce: f3ef 8305 mrs r3, IPSR
  56466. 80174d2: 60fb str r3, [r7, #12]
  56467. /* Is the interrupt number a user defined interrupt? */
  56468. if( ulCurrentInterrupt >= portFIRST_USER_INTERRUPT_NUMBER )
  56469. 80174d4: 68fb ldr r3, [r7, #12]
  56470. 80174d6: 2b0f cmp r3, #15
  56471. 80174d8: d915 bls.n 8017506 <vPortValidateInterruptPriority+0x3e>
  56472. {
  56473. /* Look up the interrupt's priority. */
  56474. ucCurrentPriority = pcInterruptPriorityRegisters[ ulCurrentInterrupt ];
  56475. 80174da: 4a18 ldr r2, [pc, #96] @ (801753c <vPortValidateInterruptPriority+0x74>)
  56476. 80174dc: 68fb ldr r3, [r7, #12]
  56477. 80174de: 4413 add r3, r2
  56478. 80174e0: 781b ldrb r3, [r3, #0]
  56479. 80174e2: 72fb strb r3, [r7, #11]
  56480. interrupt entry is as fast and simple as possible.
  56481. The following links provide detailed information:
  56482. http://www.freertos.org/RTOS-Cortex-M3-M4.html
  56483. http://www.freertos.org/FAQHelp.html */
  56484. configASSERT( ucCurrentPriority >= ucMaxSysCallPriority );
  56485. 80174e4: 4b16 ldr r3, [pc, #88] @ (8017540 <vPortValidateInterruptPriority+0x78>)
  56486. 80174e6: 781b ldrb r3, [r3, #0]
  56487. 80174e8: 7afa ldrb r2, [r7, #11]
  56488. 80174ea: 429a cmp r2, r3
  56489. 80174ec: d20b bcs.n 8017506 <vPortValidateInterruptPriority+0x3e>
  56490. __asm volatile
  56491. 80174ee: f04f 0350 mov.w r3, #80 @ 0x50
  56492. 80174f2: f383 8811 msr BASEPRI, r3
  56493. 80174f6: f3bf 8f6f isb sy
  56494. 80174fa: f3bf 8f4f dsb sy
  56495. 80174fe: 607b str r3, [r7, #4]
  56496. }
  56497. 8017500: bf00 nop
  56498. 8017502: bf00 nop
  56499. 8017504: e7fd b.n 8017502 <vPortValidateInterruptPriority+0x3a>
  56500. configuration then the correct setting can be achieved on all Cortex-M
  56501. devices by calling NVIC_SetPriorityGrouping( 0 ); before starting the
  56502. scheduler. Note however that some vendor specific peripheral libraries
  56503. assume a non-zero priority group setting, in which cases using a value
  56504. of zero will result in unpredictable behaviour. */
  56505. configASSERT( ( portAIRCR_REG & portPRIORITY_GROUP_MASK ) <= ulMaxPRIGROUPValue );
  56506. 8017506: 4b0f ldr r3, [pc, #60] @ (8017544 <vPortValidateInterruptPriority+0x7c>)
  56507. 8017508: 681b ldr r3, [r3, #0]
  56508. 801750a: f403 62e0 and.w r2, r3, #1792 @ 0x700
  56509. 801750e: 4b0e ldr r3, [pc, #56] @ (8017548 <vPortValidateInterruptPriority+0x80>)
  56510. 8017510: 681b ldr r3, [r3, #0]
  56511. 8017512: 429a cmp r2, r3
  56512. 8017514: d90b bls.n 801752e <vPortValidateInterruptPriority+0x66>
  56513. __asm volatile
  56514. 8017516: f04f 0350 mov.w r3, #80 @ 0x50
  56515. 801751a: f383 8811 msr BASEPRI, r3
  56516. 801751e: f3bf 8f6f isb sy
  56517. 8017522: f3bf 8f4f dsb sy
  56518. 8017526: 603b str r3, [r7, #0]
  56519. }
  56520. 8017528: bf00 nop
  56521. 801752a: bf00 nop
  56522. 801752c: e7fd b.n 801752a <vPortValidateInterruptPriority+0x62>
  56523. }
  56524. 801752e: bf00 nop
  56525. 8017530: 3714 adds r7, #20
  56526. 8017532: 46bd mov sp, r7
  56527. 8017534: f85d 7b04 ldr.w r7, [sp], #4
  56528. 8017538: 4770 bx lr
  56529. 801753a: bf00 nop
  56530. 801753c: e000e3f0 .word 0xe000e3f0
  56531. 8017540: 24002c6c .word 0x24002c6c
  56532. 8017544: e000ed0c .word 0xe000ed0c
  56533. 8017548: 24002c70 .word 0x24002c70
  56534. 0801754c <pvPortMalloc>:
  56535. static size_t xBlockAllocatedBit = 0;
  56536. /*-----------------------------------------------------------*/
  56537. void *pvPortMalloc( size_t xWantedSize )
  56538. {
  56539. 801754c: b580 push {r7, lr}
  56540. 801754e: b08a sub sp, #40 @ 0x28
  56541. 8017550: af00 add r7, sp, #0
  56542. 8017552: 6078 str r0, [r7, #4]
  56543. BlockLink_t *pxBlock, *pxPreviousBlock, *pxNewBlockLink;
  56544. void *pvReturn = NULL;
  56545. 8017554: 2300 movs r3, #0
  56546. 8017556: 61fb str r3, [r7, #28]
  56547. vTaskSuspendAll();
  56548. 8017558: f7fe f918 bl 801578c <vTaskSuspendAll>
  56549. {
  56550. /* If this is the first call to malloc then the heap will require
  56551. initialisation to setup the list of free blocks. */
  56552. if( pxEnd == NULL )
  56553. 801755c: 4b5c ldr r3, [pc, #368] @ (80176d0 <pvPortMalloc+0x184>)
  56554. 801755e: 681b ldr r3, [r3, #0]
  56555. 8017560: 2b00 cmp r3, #0
  56556. 8017562: d101 bne.n 8017568 <pvPortMalloc+0x1c>
  56557. {
  56558. prvHeapInit();
  56559. 8017564: f000 f924 bl 80177b0 <prvHeapInit>
  56560. /* Check the requested block size is not so large that the top bit is
  56561. set. The top bit of the block size member of the BlockLink_t structure
  56562. is used to determine who owns the block - the application or the
  56563. kernel, so it must be free. */
  56564. if( ( xWantedSize & xBlockAllocatedBit ) == 0 )
  56565. 8017568: 4b5a ldr r3, [pc, #360] @ (80176d4 <pvPortMalloc+0x188>)
  56566. 801756a: 681a ldr r2, [r3, #0]
  56567. 801756c: 687b ldr r3, [r7, #4]
  56568. 801756e: 4013 ands r3, r2
  56569. 8017570: 2b00 cmp r3, #0
  56570. 8017572: f040 8095 bne.w 80176a0 <pvPortMalloc+0x154>
  56571. {
  56572. /* The wanted size is increased so it can contain a BlockLink_t
  56573. structure in addition to the requested amount of bytes. */
  56574. if( xWantedSize > 0 )
  56575. 8017576: 687b ldr r3, [r7, #4]
  56576. 8017578: 2b00 cmp r3, #0
  56577. 801757a: d01e beq.n 80175ba <pvPortMalloc+0x6e>
  56578. {
  56579. xWantedSize += xHeapStructSize;
  56580. 801757c: 2208 movs r2, #8
  56581. 801757e: 687b ldr r3, [r7, #4]
  56582. 8017580: 4413 add r3, r2
  56583. 8017582: 607b str r3, [r7, #4]
  56584. /* Ensure that blocks are always aligned to the required number
  56585. of bytes. */
  56586. if( ( xWantedSize & portBYTE_ALIGNMENT_MASK ) != 0x00 )
  56587. 8017584: 687b ldr r3, [r7, #4]
  56588. 8017586: f003 0307 and.w r3, r3, #7
  56589. 801758a: 2b00 cmp r3, #0
  56590. 801758c: d015 beq.n 80175ba <pvPortMalloc+0x6e>
  56591. {
  56592. /* Byte alignment required. */
  56593. xWantedSize += ( portBYTE_ALIGNMENT - ( xWantedSize & portBYTE_ALIGNMENT_MASK ) );
  56594. 801758e: 687b ldr r3, [r7, #4]
  56595. 8017590: f023 0307 bic.w r3, r3, #7
  56596. 8017594: 3308 adds r3, #8
  56597. 8017596: 607b str r3, [r7, #4]
  56598. configASSERT( ( xWantedSize & portBYTE_ALIGNMENT_MASK ) == 0 );
  56599. 8017598: 687b ldr r3, [r7, #4]
  56600. 801759a: f003 0307 and.w r3, r3, #7
  56601. 801759e: 2b00 cmp r3, #0
  56602. 80175a0: d00b beq.n 80175ba <pvPortMalloc+0x6e>
  56603. __asm volatile
  56604. 80175a2: f04f 0350 mov.w r3, #80 @ 0x50
  56605. 80175a6: f383 8811 msr BASEPRI, r3
  56606. 80175aa: f3bf 8f6f isb sy
  56607. 80175ae: f3bf 8f4f dsb sy
  56608. 80175b2: 617b str r3, [r7, #20]
  56609. }
  56610. 80175b4: bf00 nop
  56611. 80175b6: bf00 nop
  56612. 80175b8: e7fd b.n 80175b6 <pvPortMalloc+0x6a>
  56613. else
  56614. {
  56615. mtCOVERAGE_TEST_MARKER();
  56616. }
  56617. if( ( xWantedSize > 0 ) && ( xWantedSize <= xFreeBytesRemaining ) )
  56618. 80175ba: 687b ldr r3, [r7, #4]
  56619. 80175bc: 2b00 cmp r3, #0
  56620. 80175be: d06f beq.n 80176a0 <pvPortMalloc+0x154>
  56621. 80175c0: 4b45 ldr r3, [pc, #276] @ (80176d8 <pvPortMalloc+0x18c>)
  56622. 80175c2: 681b ldr r3, [r3, #0]
  56623. 80175c4: 687a ldr r2, [r7, #4]
  56624. 80175c6: 429a cmp r2, r3
  56625. 80175c8: d86a bhi.n 80176a0 <pvPortMalloc+0x154>
  56626. {
  56627. /* Traverse the list from the start (lowest address) block until
  56628. one of adequate size is found. */
  56629. pxPreviousBlock = &xStart;
  56630. 80175ca: 4b44 ldr r3, [pc, #272] @ (80176dc <pvPortMalloc+0x190>)
  56631. 80175cc: 623b str r3, [r7, #32]
  56632. pxBlock = xStart.pxNextFreeBlock;
  56633. 80175ce: 4b43 ldr r3, [pc, #268] @ (80176dc <pvPortMalloc+0x190>)
  56634. 80175d0: 681b ldr r3, [r3, #0]
  56635. 80175d2: 627b str r3, [r7, #36] @ 0x24
  56636. while( ( pxBlock->xBlockSize < xWantedSize ) && ( pxBlock->pxNextFreeBlock != NULL ) )
  56637. 80175d4: e004 b.n 80175e0 <pvPortMalloc+0x94>
  56638. {
  56639. pxPreviousBlock = pxBlock;
  56640. 80175d6: 6a7b ldr r3, [r7, #36] @ 0x24
  56641. 80175d8: 623b str r3, [r7, #32]
  56642. pxBlock = pxBlock->pxNextFreeBlock;
  56643. 80175da: 6a7b ldr r3, [r7, #36] @ 0x24
  56644. 80175dc: 681b ldr r3, [r3, #0]
  56645. 80175de: 627b str r3, [r7, #36] @ 0x24
  56646. while( ( pxBlock->xBlockSize < xWantedSize ) && ( pxBlock->pxNextFreeBlock != NULL ) )
  56647. 80175e0: 6a7b ldr r3, [r7, #36] @ 0x24
  56648. 80175e2: 685b ldr r3, [r3, #4]
  56649. 80175e4: 687a ldr r2, [r7, #4]
  56650. 80175e6: 429a cmp r2, r3
  56651. 80175e8: d903 bls.n 80175f2 <pvPortMalloc+0xa6>
  56652. 80175ea: 6a7b ldr r3, [r7, #36] @ 0x24
  56653. 80175ec: 681b ldr r3, [r3, #0]
  56654. 80175ee: 2b00 cmp r3, #0
  56655. 80175f0: d1f1 bne.n 80175d6 <pvPortMalloc+0x8a>
  56656. }
  56657. /* If the end marker was reached then a block of adequate size
  56658. was not found. */
  56659. if( pxBlock != pxEnd )
  56660. 80175f2: 4b37 ldr r3, [pc, #220] @ (80176d0 <pvPortMalloc+0x184>)
  56661. 80175f4: 681b ldr r3, [r3, #0]
  56662. 80175f6: 6a7a ldr r2, [r7, #36] @ 0x24
  56663. 80175f8: 429a cmp r2, r3
  56664. 80175fa: d051 beq.n 80176a0 <pvPortMalloc+0x154>
  56665. {
  56666. /* Return the memory space pointed to - jumping over the
  56667. BlockLink_t structure at its start. */
  56668. pvReturn = ( void * ) ( ( ( uint8_t * ) pxPreviousBlock->pxNextFreeBlock ) + xHeapStructSize );
  56669. 80175fc: 6a3b ldr r3, [r7, #32]
  56670. 80175fe: 681b ldr r3, [r3, #0]
  56671. 8017600: 2208 movs r2, #8
  56672. 8017602: 4413 add r3, r2
  56673. 8017604: 61fb str r3, [r7, #28]
  56674. /* This block is being returned for use so must be taken out
  56675. of the list of free blocks. */
  56676. pxPreviousBlock->pxNextFreeBlock = pxBlock->pxNextFreeBlock;
  56677. 8017606: 6a7b ldr r3, [r7, #36] @ 0x24
  56678. 8017608: 681a ldr r2, [r3, #0]
  56679. 801760a: 6a3b ldr r3, [r7, #32]
  56680. 801760c: 601a str r2, [r3, #0]
  56681. /* If the block is larger than required it can be split into
  56682. two. */
  56683. if( ( pxBlock->xBlockSize - xWantedSize ) > heapMINIMUM_BLOCK_SIZE )
  56684. 801760e: 6a7b ldr r3, [r7, #36] @ 0x24
  56685. 8017610: 685a ldr r2, [r3, #4]
  56686. 8017612: 687b ldr r3, [r7, #4]
  56687. 8017614: 1ad2 subs r2, r2, r3
  56688. 8017616: 2308 movs r3, #8
  56689. 8017618: 005b lsls r3, r3, #1
  56690. 801761a: 429a cmp r2, r3
  56691. 801761c: d920 bls.n 8017660 <pvPortMalloc+0x114>
  56692. {
  56693. /* This block is to be split into two. Create a new
  56694. block following the number of bytes requested. The void
  56695. cast is used to prevent byte alignment warnings from the
  56696. compiler. */
  56697. pxNewBlockLink = ( void * ) ( ( ( uint8_t * ) pxBlock ) + xWantedSize );
  56698. 801761e: 6a7a ldr r2, [r7, #36] @ 0x24
  56699. 8017620: 687b ldr r3, [r7, #4]
  56700. 8017622: 4413 add r3, r2
  56701. 8017624: 61bb str r3, [r7, #24]
  56702. configASSERT( ( ( ( size_t ) pxNewBlockLink ) & portBYTE_ALIGNMENT_MASK ) == 0 );
  56703. 8017626: 69bb ldr r3, [r7, #24]
  56704. 8017628: f003 0307 and.w r3, r3, #7
  56705. 801762c: 2b00 cmp r3, #0
  56706. 801762e: d00b beq.n 8017648 <pvPortMalloc+0xfc>
  56707. __asm volatile
  56708. 8017630: f04f 0350 mov.w r3, #80 @ 0x50
  56709. 8017634: f383 8811 msr BASEPRI, r3
  56710. 8017638: f3bf 8f6f isb sy
  56711. 801763c: f3bf 8f4f dsb sy
  56712. 8017640: 613b str r3, [r7, #16]
  56713. }
  56714. 8017642: bf00 nop
  56715. 8017644: bf00 nop
  56716. 8017646: e7fd b.n 8017644 <pvPortMalloc+0xf8>
  56717. /* Calculate the sizes of two blocks split from the
  56718. single block. */
  56719. pxNewBlockLink->xBlockSize = pxBlock->xBlockSize - xWantedSize;
  56720. 8017648: 6a7b ldr r3, [r7, #36] @ 0x24
  56721. 801764a: 685a ldr r2, [r3, #4]
  56722. 801764c: 687b ldr r3, [r7, #4]
  56723. 801764e: 1ad2 subs r2, r2, r3
  56724. 8017650: 69bb ldr r3, [r7, #24]
  56725. 8017652: 605a str r2, [r3, #4]
  56726. pxBlock->xBlockSize = xWantedSize;
  56727. 8017654: 6a7b ldr r3, [r7, #36] @ 0x24
  56728. 8017656: 687a ldr r2, [r7, #4]
  56729. 8017658: 605a str r2, [r3, #4]
  56730. /* Insert the new block into the list of free blocks. */
  56731. prvInsertBlockIntoFreeList( pxNewBlockLink );
  56732. 801765a: 69b8 ldr r0, [r7, #24]
  56733. 801765c: f000 f90a bl 8017874 <prvInsertBlockIntoFreeList>
  56734. else
  56735. {
  56736. mtCOVERAGE_TEST_MARKER();
  56737. }
  56738. xFreeBytesRemaining -= pxBlock->xBlockSize;
  56739. 8017660: 4b1d ldr r3, [pc, #116] @ (80176d8 <pvPortMalloc+0x18c>)
  56740. 8017662: 681a ldr r2, [r3, #0]
  56741. 8017664: 6a7b ldr r3, [r7, #36] @ 0x24
  56742. 8017666: 685b ldr r3, [r3, #4]
  56743. 8017668: 1ad3 subs r3, r2, r3
  56744. 801766a: 4a1b ldr r2, [pc, #108] @ (80176d8 <pvPortMalloc+0x18c>)
  56745. 801766c: 6013 str r3, [r2, #0]
  56746. if( xFreeBytesRemaining < xMinimumEverFreeBytesRemaining )
  56747. 801766e: 4b1a ldr r3, [pc, #104] @ (80176d8 <pvPortMalloc+0x18c>)
  56748. 8017670: 681a ldr r2, [r3, #0]
  56749. 8017672: 4b1b ldr r3, [pc, #108] @ (80176e0 <pvPortMalloc+0x194>)
  56750. 8017674: 681b ldr r3, [r3, #0]
  56751. 8017676: 429a cmp r2, r3
  56752. 8017678: d203 bcs.n 8017682 <pvPortMalloc+0x136>
  56753. {
  56754. xMinimumEverFreeBytesRemaining = xFreeBytesRemaining;
  56755. 801767a: 4b17 ldr r3, [pc, #92] @ (80176d8 <pvPortMalloc+0x18c>)
  56756. 801767c: 681b ldr r3, [r3, #0]
  56757. 801767e: 4a18 ldr r2, [pc, #96] @ (80176e0 <pvPortMalloc+0x194>)
  56758. 8017680: 6013 str r3, [r2, #0]
  56759. mtCOVERAGE_TEST_MARKER();
  56760. }
  56761. /* The block is being returned - it is allocated and owned
  56762. by the application and has no "next" block. */
  56763. pxBlock->xBlockSize |= xBlockAllocatedBit;
  56764. 8017682: 6a7b ldr r3, [r7, #36] @ 0x24
  56765. 8017684: 685a ldr r2, [r3, #4]
  56766. 8017686: 4b13 ldr r3, [pc, #76] @ (80176d4 <pvPortMalloc+0x188>)
  56767. 8017688: 681b ldr r3, [r3, #0]
  56768. 801768a: 431a orrs r2, r3
  56769. 801768c: 6a7b ldr r3, [r7, #36] @ 0x24
  56770. 801768e: 605a str r2, [r3, #4]
  56771. pxBlock->pxNextFreeBlock = NULL;
  56772. 8017690: 6a7b ldr r3, [r7, #36] @ 0x24
  56773. 8017692: 2200 movs r2, #0
  56774. 8017694: 601a str r2, [r3, #0]
  56775. xNumberOfSuccessfulAllocations++;
  56776. 8017696: 4b13 ldr r3, [pc, #76] @ (80176e4 <pvPortMalloc+0x198>)
  56777. 8017698: 681b ldr r3, [r3, #0]
  56778. 801769a: 3301 adds r3, #1
  56779. 801769c: 4a11 ldr r2, [pc, #68] @ (80176e4 <pvPortMalloc+0x198>)
  56780. 801769e: 6013 str r3, [r2, #0]
  56781. mtCOVERAGE_TEST_MARKER();
  56782. }
  56783. traceMALLOC( pvReturn, xWantedSize );
  56784. }
  56785. ( void ) xTaskResumeAll();
  56786. 80176a0: f7fe f882 bl 80157a8 <xTaskResumeAll>
  56787. mtCOVERAGE_TEST_MARKER();
  56788. }
  56789. }
  56790. #endif
  56791. configASSERT( ( ( ( size_t ) pvReturn ) & ( size_t ) portBYTE_ALIGNMENT_MASK ) == 0 );
  56792. 80176a4: 69fb ldr r3, [r7, #28]
  56793. 80176a6: f003 0307 and.w r3, r3, #7
  56794. 80176aa: 2b00 cmp r3, #0
  56795. 80176ac: d00b beq.n 80176c6 <pvPortMalloc+0x17a>
  56796. __asm volatile
  56797. 80176ae: f04f 0350 mov.w r3, #80 @ 0x50
  56798. 80176b2: f383 8811 msr BASEPRI, r3
  56799. 80176b6: f3bf 8f6f isb sy
  56800. 80176ba: f3bf 8f4f dsb sy
  56801. 80176be: 60fb str r3, [r7, #12]
  56802. }
  56803. 80176c0: bf00 nop
  56804. 80176c2: bf00 nop
  56805. 80176c4: e7fd b.n 80176c2 <pvPortMalloc+0x176>
  56806. return pvReturn;
  56807. 80176c6: 69fb ldr r3, [r7, #28]
  56808. }
  56809. 80176c8: 4618 mov r0, r3
  56810. 80176ca: 3728 adds r7, #40 @ 0x28
  56811. 80176cc: 46bd mov sp, r7
  56812. 80176ce: bd80 pop {r7, pc}
  56813. 80176d0: 24012c7c .word 0x24012c7c
  56814. 80176d4: 24012c90 .word 0x24012c90
  56815. 80176d8: 24012c80 .word 0x24012c80
  56816. 80176dc: 24012c74 .word 0x24012c74
  56817. 80176e0: 24012c84 .word 0x24012c84
  56818. 80176e4: 24012c88 .word 0x24012c88
  56819. 080176e8 <vPortFree>:
  56820. /*-----------------------------------------------------------*/
  56821. void vPortFree( void *pv )
  56822. {
  56823. 80176e8: b580 push {r7, lr}
  56824. 80176ea: b086 sub sp, #24
  56825. 80176ec: af00 add r7, sp, #0
  56826. 80176ee: 6078 str r0, [r7, #4]
  56827. uint8_t *puc = ( uint8_t * ) pv;
  56828. 80176f0: 687b ldr r3, [r7, #4]
  56829. 80176f2: 617b str r3, [r7, #20]
  56830. BlockLink_t *pxLink;
  56831. if( pv != NULL )
  56832. 80176f4: 687b ldr r3, [r7, #4]
  56833. 80176f6: 2b00 cmp r3, #0
  56834. 80176f8: d04f beq.n 801779a <vPortFree+0xb2>
  56835. {
  56836. /* The memory being freed will have an BlockLink_t structure immediately
  56837. before it. */
  56838. puc -= xHeapStructSize;
  56839. 80176fa: 2308 movs r3, #8
  56840. 80176fc: 425b negs r3, r3
  56841. 80176fe: 697a ldr r2, [r7, #20]
  56842. 8017700: 4413 add r3, r2
  56843. 8017702: 617b str r3, [r7, #20]
  56844. /* This casting is to keep the compiler from issuing warnings. */
  56845. pxLink = ( void * ) puc;
  56846. 8017704: 697b ldr r3, [r7, #20]
  56847. 8017706: 613b str r3, [r7, #16]
  56848. /* Check the block is actually allocated. */
  56849. configASSERT( ( pxLink->xBlockSize & xBlockAllocatedBit ) != 0 );
  56850. 8017708: 693b ldr r3, [r7, #16]
  56851. 801770a: 685a ldr r2, [r3, #4]
  56852. 801770c: 4b25 ldr r3, [pc, #148] @ (80177a4 <vPortFree+0xbc>)
  56853. 801770e: 681b ldr r3, [r3, #0]
  56854. 8017710: 4013 ands r3, r2
  56855. 8017712: 2b00 cmp r3, #0
  56856. 8017714: d10b bne.n 801772e <vPortFree+0x46>
  56857. __asm volatile
  56858. 8017716: f04f 0350 mov.w r3, #80 @ 0x50
  56859. 801771a: f383 8811 msr BASEPRI, r3
  56860. 801771e: f3bf 8f6f isb sy
  56861. 8017722: f3bf 8f4f dsb sy
  56862. 8017726: 60fb str r3, [r7, #12]
  56863. }
  56864. 8017728: bf00 nop
  56865. 801772a: bf00 nop
  56866. 801772c: e7fd b.n 801772a <vPortFree+0x42>
  56867. configASSERT( pxLink->pxNextFreeBlock == NULL );
  56868. 801772e: 693b ldr r3, [r7, #16]
  56869. 8017730: 681b ldr r3, [r3, #0]
  56870. 8017732: 2b00 cmp r3, #0
  56871. 8017734: d00b beq.n 801774e <vPortFree+0x66>
  56872. __asm volatile
  56873. 8017736: f04f 0350 mov.w r3, #80 @ 0x50
  56874. 801773a: f383 8811 msr BASEPRI, r3
  56875. 801773e: f3bf 8f6f isb sy
  56876. 8017742: f3bf 8f4f dsb sy
  56877. 8017746: 60bb str r3, [r7, #8]
  56878. }
  56879. 8017748: bf00 nop
  56880. 801774a: bf00 nop
  56881. 801774c: e7fd b.n 801774a <vPortFree+0x62>
  56882. if( ( pxLink->xBlockSize & xBlockAllocatedBit ) != 0 )
  56883. 801774e: 693b ldr r3, [r7, #16]
  56884. 8017750: 685a ldr r2, [r3, #4]
  56885. 8017752: 4b14 ldr r3, [pc, #80] @ (80177a4 <vPortFree+0xbc>)
  56886. 8017754: 681b ldr r3, [r3, #0]
  56887. 8017756: 4013 ands r3, r2
  56888. 8017758: 2b00 cmp r3, #0
  56889. 801775a: d01e beq.n 801779a <vPortFree+0xb2>
  56890. {
  56891. if( pxLink->pxNextFreeBlock == NULL )
  56892. 801775c: 693b ldr r3, [r7, #16]
  56893. 801775e: 681b ldr r3, [r3, #0]
  56894. 8017760: 2b00 cmp r3, #0
  56895. 8017762: d11a bne.n 801779a <vPortFree+0xb2>
  56896. {
  56897. /* The block is being returned to the heap - it is no longer
  56898. allocated. */
  56899. pxLink->xBlockSize &= ~xBlockAllocatedBit;
  56900. 8017764: 693b ldr r3, [r7, #16]
  56901. 8017766: 685a ldr r2, [r3, #4]
  56902. 8017768: 4b0e ldr r3, [pc, #56] @ (80177a4 <vPortFree+0xbc>)
  56903. 801776a: 681b ldr r3, [r3, #0]
  56904. 801776c: 43db mvns r3, r3
  56905. 801776e: 401a ands r2, r3
  56906. 8017770: 693b ldr r3, [r7, #16]
  56907. 8017772: 605a str r2, [r3, #4]
  56908. vTaskSuspendAll();
  56909. 8017774: f7fe f80a bl 801578c <vTaskSuspendAll>
  56910. {
  56911. /* Add this block to the list of free blocks. */
  56912. xFreeBytesRemaining += pxLink->xBlockSize;
  56913. 8017778: 693b ldr r3, [r7, #16]
  56914. 801777a: 685a ldr r2, [r3, #4]
  56915. 801777c: 4b0a ldr r3, [pc, #40] @ (80177a8 <vPortFree+0xc0>)
  56916. 801777e: 681b ldr r3, [r3, #0]
  56917. 8017780: 4413 add r3, r2
  56918. 8017782: 4a09 ldr r2, [pc, #36] @ (80177a8 <vPortFree+0xc0>)
  56919. 8017784: 6013 str r3, [r2, #0]
  56920. traceFREE( pv, pxLink->xBlockSize );
  56921. prvInsertBlockIntoFreeList( ( ( BlockLink_t * ) pxLink ) );
  56922. 8017786: 6938 ldr r0, [r7, #16]
  56923. 8017788: f000 f874 bl 8017874 <prvInsertBlockIntoFreeList>
  56924. xNumberOfSuccessfulFrees++;
  56925. 801778c: 4b07 ldr r3, [pc, #28] @ (80177ac <vPortFree+0xc4>)
  56926. 801778e: 681b ldr r3, [r3, #0]
  56927. 8017790: 3301 adds r3, #1
  56928. 8017792: 4a06 ldr r2, [pc, #24] @ (80177ac <vPortFree+0xc4>)
  56929. 8017794: 6013 str r3, [r2, #0]
  56930. }
  56931. ( void ) xTaskResumeAll();
  56932. 8017796: f7fe f807 bl 80157a8 <xTaskResumeAll>
  56933. else
  56934. {
  56935. mtCOVERAGE_TEST_MARKER();
  56936. }
  56937. }
  56938. }
  56939. 801779a: bf00 nop
  56940. 801779c: 3718 adds r7, #24
  56941. 801779e: 46bd mov sp, r7
  56942. 80177a0: bd80 pop {r7, pc}
  56943. 80177a2: bf00 nop
  56944. 80177a4: 24012c90 .word 0x24012c90
  56945. 80177a8: 24012c80 .word 0x24012c80
  56946. 80177ac: 24012c8c .word 0x24012c8c
  56947. 080177b0 <prvHeapInit>:
  56948. /* This just exists to keep the linker quiet. */
  56949. }
  56950. /*-----------------------------------------------------------*/
  56951. static void prvHeapInit( void )
  56952. {
  56953. 80177b0: b480 push {r7}
  56954. 80177b2: b085 sub sp, #20
  56955. 80177b4: af00 add r7, sp, #0
  56956. BlockLink_t *pxFirstFreeBlock;
  56957. uint8_t *pucAlignedHeap;
  56958. size_t uxAddress;
  56959. size_t xTotalHeapSize = configTOTAL_HEAP_SIZE;
  56960. 80177b6: f44f 3380 mov.w r3, #65536 @ 0x10000
  56961. 80177ba: 60bb str r3, [r7, #8]
  56962. /* Ensure the heap starts on a correctly aligned boundary. */
  56963. uxAddress = ( size_t ) ucHeap;
  56964. 80177bc: 4b27 ldr r3, [pc, #156] @ (801785c <prvHeapInit+0xac>)
  56965. 80177be: 60fb str r3, [r7, #12]
  56966. if( ( uxAddress & portBYTE_ALIGNMENT_MASK ) != 0 )
  56967. 80177c0: 68fb ldr r3, [r7, #12]
  56968. 80177c2: f003 0307 and.w r3, r3, #7
  56969. 80177c6: 2b00 cmp r3, #0
  56970. 80177c8: d00c beq.n 80177e4 <prvHeapInit+0x34>
  56971. {
  56972. uxAddress += ( portBYTE_ALIGNMENT - 1 );
  56973. 80177ca: 68fb ldr r3, [r7, #12]
  56974. 80177cc: 3307 adds r3, #7
  56975. 80177ce: 60fb str r3, [r7, #12]
  56976. uxAddress &= ~( ( size_t ) portBYTE_ALIGNMENT_MASK );
  56977. 80177d0: 68fb ldr r3, [r7, #12]
  56978. 80177d2: f023 0307 bic.w r3, r3, #7
  56979. 80177d6: 60fb str r3, [r7, #12]
  56980. xTotalHeapSize -= uxAddress - ( size_t ) ucHeap;
  56981. 80177d8: 68ba ldr r2, [r7, #8]
  56982. 80177da: 68fb ldr r3, [r7, #12]
  56983. 80177dc: 1ad3 subs r3, r2, r3
  56984. 80177de: 4a1f ldr r2, [pc, #124] @ (801785c <prvHeapInit+0xac>)
  56985. 80177e0: 4413 add r3, r2
  56986. 80177e2: 60bb str r3, [r7, #8]
  56987. }
  56988. pucAlignedHeap = ( uint8_t * ) uxAddress;
  56989. 80177e4: 68fb ldr r3, [r7, #12]
  56990. 80177e6: 607b str r3, [r7, #4]
  56991. /* xStart is used to hold a pointer to the first item in the list of free
  56992. blocks. The void cast is used to prevent compiler warnings. */
  56993. xStart.pxNextFreeBlock = ( void * ) pucAlignedHeap;
  56994. 80177e8: 4a1d ldr r2, [pc, #116] @ (8017860 <prvHeapInit+0xb0>)
  56995. 80177ea: 687b ldr r3, [r7, #4]
  56996. 80177ec: 6013 str r3, [r2, #0]
  56997. xStart.xBlockSize = ( size_t ) 0;
  56998. 80177ee: 4b1c ldr r3, [pc, #112] @ (8017860 <prvHeapInit+0xb0>)
  56999. 80177f0: 2200 movs r2, #0
  57000. 80177f2: 605a str r2, [r3, #4]
  57001. /* pxEnd is used to mark the end of the list of free blocks and is inserted
  57002. at the end of the heap space. */
  57003. uxAddress = ( ( size_t ) pucAlignedHeap ) + xTotalHeapSize;
  57004. 80177f4: 687b ldr r3, [r7, #4]
  57005. 80177f6: 68ba ldr r2, [r7, #8]
  57006. 80177f8: 4413 add r3, r2
  57007. 80177fa: 60fb str r3, [r7, #12]
  57008. uxAddress -= xHeapStructSize;
  57009. 80177fc: 2208 movs r2, #8
  57010. 80177fe: 68fb ldr r3, [r7, #12]
  57011. 8017800: 1a9b subs r3, r3, r2
  57012. 8017802: 60fb str r3, [r7, #12]
  57013. uxAddress &= ~( ( size_t ) portBYTE_ALIGNMENT_MASK );
  57014. 8017804: 68fb ldr r3, [r7, #12]
  57015. 8017806: f023 0307 bic.w r3, r3, #7
  57016. 801780a: 60fb str r3, [r7, #12]
  57017. pxEnd = ( void * ) uxAddress;
  57018. 801780c: 68fb ldr r3, [r7, #12]
  57019. 801780e: 4a15 ldr r2, [pc, #84] @ (8017864 <prvHeapInit+0xb4>)
  57020. 8017810: 6013 str r3, [r2, #0]
  57021. pxEnd->xBlockSize = 0;
  57022. 8017812: 4b14 ldr r3, [pc, #80] @ (8017864 <prvHeapInit+0xb4>)
  57023. 8017814: 681b ldr r3, [r3, #0]
  57024. 8017816: 2200 movs r2, #0
  57025. 8017818: 605a str r2, [r3, #4]
  57026. pxEnd->pxNextFreeBlock = NULL;
  57027. 801781a: 4b12 ldr r3, [pc, #72] @ (8017864 <prvHeapInit+0xb4>)
  57028. 801781c: 681b ldr r3, [r3, #0]
  57029. 801781e: 2200 movs r2, #0
  57030. 8017820: 601a str r2, [r3, #0]
  57031. /* To start with there is a single free block that is sized to take up the
  57032. entire heap space, minus the space taken by pxEnd. */
  57033. pxFirstFreeBlock = ( void * ) pucAlignedHeap;
  57034. 8017822: 687b ldr r3, [r7, #4]
  57035. 8017824: 603b str r3, [r7, #0]
  57036. pxFirstFreeBlock->xBlockSize = uxAddress - ( size_t ) pxFirstFreeBlock;
  57037. 8017826: 683b ldr r3, [r7, #0]
  57038. 8017828: 68fa ldr r2, [r7, #12]
  57039. 801782a: 1ad2 subs r2, r2, r3
  57040. 801782c: 683b ldr r3, [r7, #0]
  57041. 801782e: 605a str r2, [r3, #4]
  57042. pxFirstFreeBlock->pxNextFreeBlock = pxEnd;
  57043. 8017830: 4b0c ldr r3, [pc, #48] @ (8017864 <prvHeapInit+0xb4>)
  57044. 8017832: 681a ldr r2, [r3, #0]
  57045. 8017834: 683b ldr r3, [r7, #0]
  57046. 8017836: 601a str r2, [r3, #0]
  57047. /* Only one block exists - and it covers the entire usable heap space. */
  57048. xMinimumEverFreeBytesRemaining = pxFirstFreeBlock->xBlockSize;
  57049. 8017838: 683b ldr r3, [r7, #0]
  57050. 801783a: 685b ldr r3, [r3, #4]
  57051. 801783c: 4a0a ldr r2, [pc, #40] @ (8017868 <prvHeapInit+0xb8>)
  57052. 801783e: 6013 str r3, [r2, #0]
  57053. xFreeBytesRemaining = pxFirstFreeBlock->xBlockSize;
  57054. 8017840: 683b ldr r3, [r7, #0]
  57055. 8017842: 685b ldr r3, [r3, #4]
  57056. 8017844: 4a09 ldr r2, [pc, #36] @ (801786c <prvHeapInit+0xbc>)
  57057. 8017846: 6013 str r3, [r2, #0]
  57058. /* Work out the position of the top bit in a size_t variable. */
  57059. xBlockAllocatedBit = ( ( size_t ) 1 ) << ( ( sizeof( size_t ) * heapBITS_PER_BYTE ) - 1 );
  57060. 8017848: 4b09 ldr r3, [pc, #36] @ (8017870 <prvHeapInit+0xc0>)
  57061. 801784a: f04f 4200 mov.w r2, #2147483648 @ 0x80000000
  57062. 801784e: 601a str r2, [r3, #0]
  57063. }
  57064. 8017850: bf00 nop
  57065. 8017852: 3714 adds r7, #20
  57066. 8017854: 46bd mov sp, r7
  57067. 8017856: f85d 7b04 ldr.w r7, [sp], #4
  57068. 801785a: 4770 bx lr
  57069. 801785c: 24002c74 .word 0x24002c74
  57070. 8017860: 24012c74 .word 0x24012c74
  57071. 8017864: 24012c7c .word 0x24012c7c
  57072. 8017868: 24012c84 .word 0x24012c84
  57073. 801786c: 24012c80 .word 0x24012c80
  57074. 8017870: 24012c90 .word 0x24012c90
  57075. 08017874 <prvInsertBlockIntoFreeList>:
  57076. /*-----------------------------------------------------------*/
  57077. static void prvInsertBlockIntoFreeList( BlockLink_t *pxBlockToInsert )
  57078. {
  57079. 8017874: b480 push {r7}
  57080. 8017876: b085 sub sp, #20
  57081. 8017878: af00 add r7, sp, #0
  57082. 801787a: 6078 str r0, [r7, #4]
  57083. BlockLink_t *pxIterator;
  57084. uint8_t *puc;
  57085. /* Iterate through the list until a block is found that has a higher address
  57086. than the block being inserted. */
  57087. for( pxIterator = &xStart; pxIterator->pxNextFreeBlock < pxBlockToInsert; pxIterator = pxIterator->pxNextFreeBlock )
  57088. 801787c: 4b28 ldr r3, [pc, #160] @ (8017920 <prvInsertBlockIntoFreeList+0xac>)
  57089. 801787e: 60fb str r3, [r7, #12]
  57090. 8017880: e002 b.n 8017888 <prvInsertBlockIntoFreeList+0x14>
  57091. 8017882: 68fb ldr r3, [r7, #12]
  57092. 8017884: 681b ldr r3, [r3, #0]
  57093. 8017886: 60fb str r3, [r7, #12]
  57094. 8017888: 68fb ldr r3, [r7, #12]
  57095. 801788a: 681b ldr r3, [r3, #0]
  57096. 801788c: 687a ldr r2, [r7, #4]
  57097. 801788e: 429a cmp r2, r3
  57098. 8017890: d8f7 bhi.n 8017882 <prvInsertBlockIntoFreeList+0xe>
  57099. /* Nothing to do here, just iterate to the right position. */
  57100. }
  57101. /* Do the block being inserted, and the block it is being inserted after
  57102. make a contiguous block of memory? */
  57103. puc = ( uint8_t * ) pxIterator;
  57104. 8017892: 68fb ldr r3, [r7, #12]
  57105. 8017894: 60bb str r3, [r7, #8]
  57106. if( ( puc + pxIterator->xBlockSize ) == ( uint8_t * ) pxBlockToInsert )
  57107. 8017896: 68fb ldr r3, [r7, #12]
  57108. 8017898: 685b ldr r3, [r3, #4]
  57109. 801789a: 68ba ldr r2, [r7, #8]
  57110. 801789c: 4413 add r3, r2
  57111. 801789e: 687a ldr r2, [r7, #4]
  57112. 80178a0: 429a cmp r2, r3
  57113. 80178a2: d108 bne.n 80178b6 <prvInsertBlockIntoFreeList+0x42>
  57114. {
  57115. pxIterator->xBlockSize += pxBlockToInsert->xBlockSize;
  57116. 80178a4: 68fb ldr r3, [r7, #12]
  57117. 80178a6: 685a ldr r2, [r3, #4]
  57118. 80178a8: 687b ldr r3, [r7, #4]
  57119. 80178aa: 685b ldr r3, [r3, #4]
  57120. 80178ac: 441a add r2, r3
  57121. 80178ae: 68fb ldr r3, [r7, #12]
  57122. 80178b0: 605a str r2, [r3, #4]
  57123. pxBlockToInsert = pxIterator;
  57124. 80178b2: 68fb ldr r3, [r7, #12]
  57125. 80178b4: 607b str r3, [r7, #4]
  57126. mtCOVERAGE_TEST_MARKER();
  57127. }
  57128. /* Do the block being inserted, and the block it is being inserted before
  57129. make a contiguous block of memory? */
  57130. puc = ( uint8_t * ) pxBlockToInsert;
  57131. 80178b6: 687b ldr r3, [r7, #4]
  57132. 80178b8: 60bb str r3, [r7, #8]
  57133. if( ( puc + pxBlockToInsert->xBlockSize ) == ( uint8_t * ) pxIterator->pxNextFreeBlock )
  57134. 80178ba: 687b ldr r3, [r7, #4]
  57135. 80178bc: 685b ldr r3, [r3, #4]
  57136. 80178be: 68ba ldr r2, [r7, #8]
  57137. 80178c0: 441a add r2, r3
  57138. 80178c2: 68fb ldr r3, [r7, #12]
  57139. 80178c4: 681b ldr r3, [r3, #0]
  57140. 80178c6: 429a cmp r2, r3
  57141. 80178c8: d118 bne.n 80178fc <prvInsertBlockIntoFreeList+0x88>
  57142. {
  57143. if( pxIterator->pxNextFreeBlock != pxEnd )
  57144. 80178ca: 68fb ldr r3, [r7, #12]
  57145. 80178cc: 681a ldr r2, [r3, #0]
  57146. 80178ce: 4b15 ldr r3, [pc, #84] @ (8017924 <prvInsertBlockIntoFreeList+0xb0>)
  57147. 80178d0: 681b ldr r3, [r3, #0]
  57148. 80178d2: 429a cmp r2, r3
  57149. 80178d4: d00d beq.n 80178f2 <prvInsertBlockIntoFreeList+0x7e>
  57150. {
  57151. /* Form one big block from the two blocks. */
  57152. pxBlockToInsert->xBlockSize += pxIterator->pxNextFreeBlock->xBlockSize;
  57153. 80178d6: 687b ldr r3, [r7, #4]
  57154. 80178d8: 685a ldr r2, [r3, #4]
  57155. 80178da: 68fb ldr r3, [r7, #12]
  57156. 80178dc: 681b ldr r3, [r3, #0]
  57157. 80178de: 685b ldr r3, [r3, #4]
  57158. 80178e0: 441a add r2, r3
  57159. 80178e2: 687b ldr r3, [r7, #4]
  57160. 80178e4: 605a str r2, [r3, #4]
  57161. pxBlockToInsert->pxNextFreeBlock = pxIterator->pxNextFreeBlock->pxNextFreeBlock;
  57162. 80178e6: 68fb ldr r3, [r7, #12]
  57163. 80178e8: 681b ldr r3, [r3, #0]
  57164. 80178ea: 681a ldr r2, [r3, #0]
  57165. 80178ec: 687b ldr r3, [r7, #4]
  57166. 80178ee: 601a str r2, [r3, #0]
  57167. 80178f0: e008 b.n 8017904 <prvInsertBlockIntoFreeList+0x90>
  57168. }
  57169. else
  57170. {
  57171. pxBlockToInsert->pxNextFreeBlock = pxEnd;
  57172. 80178f2: 4b0c ldr r3, [pc, #48] @ (8017924 <prvInsertBlockIntoFreeList+0xb0>)
  57173. 80178f4: 681a ldr r2, [r3, #0]
  57174. 80178f6: 687b ldr r3, [r7, #4]
  57175. 80178f8: 601a str r2, [r3, #0]
  57176. 80178fa: e003 b.n 8017904 <prvInsertBlockIntoFreeList+0x90>
  57177. }
  57178. }
  57179. else
  57180. {
  57181. pxBlockToInsert->pxNextFreeBlock = pxIterator->pxNextFreeBlock;
  57182. 80178fc: 68fb ldr r3, [r7, #12]
  57183. 80178fe: 681a ldr r2, [r3, #0]
  57184. 8017900: 687b ldr r3, [r7, #4]
  57185. 8017902: 601a str r2, [r3, #0]
  57186. /* If the block being inserted plugged a gab, so was merged with the block
  57187. before and the block after, then it's pxNextFreeBlock pointer will have
  57188. already been set, and should not be set here as that would make it point
  57189. to itself. */
  57190. if( pxIterator != pxBlockToInsert )
  57191. 8017904: 68fa ldr r2, [r7, #12]
  57192. 8017906: 687b ldr r3, [r7, #4]
  57193. 8017908: 429a cmp r2, r3
  57194. 801790a: d002 beq.n 8017912 <prvInsertBlockIntoFreeList+0x9e>
  57195. {
  57196. pxIterator->pxNextFreeBlock = pxBlockToInsert;
  57197. 801790c: 68fb ldr r3, [r7, #12]
  57198. 801790e: 687a ldr r2, [r7, #4]
  57199. 8017910: 601a str r2, [r3, #0]
  57200. }
  57201. else
  57202. {
  57203. mtCOVERAGE_TEST_MARKER();
  57204. }
  57205. }
  57206. 8017912: bf00 nop
  57207. 8017914: 3714 adds r7, #20
  57208. 8017916: 46bd mov sp, r7
  57209. 8017918: f85d 7b04 ldr.w r7, [sp], #4
  57210. 801791c: 4770 bx lr
  57211. 801791e: bf00 nop
  57212. 8017920: 24012c74 .word 0x24012c74
  57213. 8017924: 24012c7c .word 0x24012c7c
  57214. 08017928 <std>:
  57215. 8017928: 2300 movs r3, #0
  57216. 801792a: b510 push {r4, lr}
  57217. 801792c: 4604 mov r4, r0
  57218. 801792e: e9c0 3300 strd r3, r3, [r0]
  57219. 8017932: e9c0 3304 strd r3, r3, [r0, #16]
  57220. 8017936: 6083 str r3, [r0, #8]
  57221. 8017938: 8181 strh r1, [r0, #12]
  57222. 801793a: 6643 str r3, [r0, #100] @ 0x64
  57223. 801793c: 81c2 strh r2, [r0, #14]
  57224. 801793e: 6183 str r3, [r0, #24]
  57225. 8017940: 4619 mov r1, r3
  57226. 8017942: 2208 movs r2, #8
  57227. 8017944: 305c adds r0, #92 @ 0x5c
  57228. 8017946: f000 f906 bl 8017b56 <memset>
  57229. 801794a: 4b0d ldr r3, [pc, #52] @ (8017980 <std+0x58>)
  57230. 801794c: 6263 str r3, [r4, #36] @ 0x24
  57231. 801794e: 4b0d ldr r3, [pc, #52] @ (8017984 <std+0x5c>)
  57232. 8017950: 62a3 str r3, [r4, #40] @ 0x28
  57233. 8017952: 4b0d ldr r3, [pc, #52] @ (8017988 <std+0x60>)
  57234. 8017954: 62e3 str r3, [r4, #44] @ 0x2c
  57235. 8017956: 4b0d ldr r3, [pc, #52] @ (801798c <std+0x64>)
  57236. 8017958: 6323 str r3, [r4, #48] @ 0x30
  57237. 801795a: 4b0d ldr r3, [pc, #52] @ (8017990 <std+0x68>)
  57238. 801795c: 6224 str r4, [r4, #32]
  57239. 801795e: 429c cmp r4, r3
  57240. 8017960: d006 beq.n 8017970 <std+0x48>
  57241. 8017962: f103 0268 add.w r2, r3, #104 @ 0x68
  57242. 8017966: 4294 cmp r4, r2
  57243. 8017968: d002 beq.n 8017970 <std+0x48>
  57244. 801796a: 33d0 adds r3, #208 @ 0xd0
  57245. 801796c: 429c cmp r4, r3
  57246. 801796e: d105 bne.n 801797c <std+0x54>
  57247. 8017970: f104 0058 add.w r0, r4, #88 @ 0x58
  57248. 8017974: e8bd 4010 ldmia.w sp!, {r4, lr}
  57249. 8017978: f000 b9bc b.w 8017cf4 <__retarget_lock_init_recursive>
  57250. 801797c: bd10 pop {r4, pc}
  57251. 801797e: bf00 nop
  57252. 8017980: 08017ad1 .word 0x08017ad1
  57253. 8017984: 08017af3 .word 0x08017af3
  57254. 8017988: 08017b2b .word 0x08017b2b
  57255. 801798c: 08017b4f .word 0x08017b4f
  57256. 8017990: 24012c94 .word 0x24012c94
  57257. 08017994 <stdio_exit_handler>:
  57258. 8017994: 4a02 ldr r2, [pc, #8] @ (80179a0 <stdio_exit_handler+0xc>)
  57259. 8017996: 4903 ldr r1, [pc, #12] @ (80179a4 <stdio_exit_handler+0x10>)
  57260. 8017998: 4803 ldr r0, [pc, #12] @ (80179a8 <stdio_exit_handler+0x14>)
  57261. 801799a: f000 b869 b.w 8017a70 <_fwalk_sglue>
  57262. 801799e: bf00 nop
  57263. 80179a0: 24000048 .word 0x24000048
  57264. 80179a4: 080185b1 .word 0x080185b1
  57265. 80179a8: 24000058 .word 0x24000058
  57266. 080179ac <cleanup_stdio>:
  57267. 80179ac: 6841 ldr r1, [r0, #4]
  57268. 80179ae: 4b0c ldr r3, [pc, #48] @ (80179e0 <cleanup_stdio+0x34>)
  57269. 80179b0: 4299 cmp r1, r3
  57270. 80179b2: b510 push {r4, lr}
  57271. 80179b4: 4604 mov r4, r0
  57272. 80179b6: d001 beq.n 80179bc <cleanup_stdio+0x10>
  57273. 80179b8: f000 fdfa bl 80185b0 <_fflush_r>
  57274. 80179bc: 68a1 ldr r1, [r4, #8]
  57275. 80179be: 4b09 ldr r3, [pc, #36] @ (80179e4 <cleanup_stdio+0x38>)
  57276. 80179c0: 4299 cmp r1, r3
  57277. 80179c2: d002 beq.n 80179ca <cleanup_stdio+0x1e>
  57278. 80179c4: 4620 mov r0, r4
  57279. 80179c6: f000 fdf3 bl 80185b0 <_fflush_r>
  57280. 80179ca: 68e1 ldr r1, [r4, #12]
  57281. 80179cc: 4b06 ldr r3, [pc, #24] @ (80179e8 <cleanup_stdio+0x3c>)
  57282. 80179ce: 4299 cmp r1, r3
  57283. 80179d0: d004 beq.n 80179dc <cleanup_stdio+0x30>
  57284. 80179d2: 4620 mov r0, r4
  57285. 80179d4: e8bd 4010 ldmia.w sp!, {r4, lr}
  57286. 80179d8: f000 bdea b.w 80185b0 <_fflush_r>
  57287. 80179dc: bd10 pop {r4, pc}
  57288. 80179de: bf00 nop
  57289. 80179e0: 24012c94 .word 0x24012c94
  57290. 80179e4: 24012cfc .word 0x24012cfc
  57291. 80179e8: 24012d64 .word 0x24012d64
  57292. 080179ec <global_stdio_init.part.0>:
  57293. 80179ec: b510 push {r4, lr}
  57294. 80179ee: 4b0b ldr r3, [pc, #44] @ (8017a1c <global_stdio_init.part.0+0x30>)
  57295. 80179f0: 4c0b ldr r4, [pc, #44] @ (8017a20 <global_stdio_init.part.0+0x34>)
  57296. 80179f2: 4a0c ldr r2, [pc, #48] @ (8017a24 <global_stdio_init.part.0+0x38>)
  57297. 80179f4: 601a str r2, [r3, #0]
  57298. 80179f6: 4620 mov r0, r4
  57299. 80179f8: 2200 movs r2, #0
  57300. 80179fa: 2104 movs r1, #4
  57301. 80179fc: f7ff ff94 bl 8017928 <std>
  57302. 8017a00: f104 0068 add.w r0, r4, #104 @ 0x68
  57303. 8017a04: 2201 movs r2, #1
  57304. 8017a06: 2109 movs r1, #9
  57305. 8017a08: f7ff ff8e bl 8017928 <std>
  57306. 8017a0c: f104 00d0 add.w r0, r4, #208 @ 0xd0
  57307. 8017a10: 2202 movs r2, #2
  57308. 8017a12: e8bd 4010 ldmia.w sp!, {r4, lr}
  57309. 8017a16: 2112 movs r1, #18
  57310. 8017a18: f7ff bf86 b.w 8017928 <std>
  57311. 8017a1c: 24012dcc .word 0x24012dcc
  57312. 8017a20: 24012c94 .word 0x24012c94
  57313. 8017a24: 08017995 .word 0x08017995
  57314. 08017a28 <__sfp_lock_acquire>:
  57315. 8017a28: 4801 ldr r0, [pc, #4] @ (8017a30 <__sfp_lock_acquire+0x8>)
  57316. 8017a2a: f000 b964 b.w 8017cf6 <__retarget_lock_acquire_recursive>
  57317. 8017a2e: bf00 nop
  57318. 8017a30: 24012dd5 .word 0x24012dd5
  57319. 08017a34 <__sfp_lock_release>:
  57320. 8017a34: 4801 ldr r0, [pc, #4] @ (8017a3c <__sfp_lock_release+0x8>)
  57321. 8017a36: f000 b95f b.w 8017cf8 <__retarget_lock_release_recursive>
  57322. 8017a3a: bf00 nop
  57323. 8017a3c: 24012dd5 .word 0x24012dd5
  57324. 08017a40 <__sinit>:
  57325. 8017a40: b510 push {r4, lr}
  57326. 8017a42: 4604 mov r4, r0
  57327. 8017a44: f7ff fff0 bl 8017a28 <__sfp_lock_acquire>
  57328. 8017a48: 6a23 ldr r3, [r4, #32]
  57329. 8017a4a: b11b cbz r3, 8017a54 <__sinit+0x14>
  57330. 8017a4c: e8bd 4010 ldmia.w sp!, {r4, lr}
  57331. 8017a50: f7ff bff0 b.w 8017a34 <__sfp_lock_release>
  57332. 8017a54: 4b04 ldr r3, [pc, #16] @ (8017a68 <__sinit+0x28>)
  57333. 8017a56: 6223 str r3, [r4, #32]
  57334. 8017a58: 4b04 ldr r3, [pc, #16] @ (8017a6c <__sinit+0x2c>)
  57335. 8017a5a: 681b ldr r3, [r3, #0]
  57336. 8017a5c: 2b00 cmp r3, #0
  57337. 8017a5e: d1f5 bne.n 8017a4c <__sinit+0xc>
  57338. 8017a60: f7ff ffc4 bl 80179ec <global_stdio_init.part.0>
  57339. 8017a64: e7f2 b.n 8017a4c <__sinit+0xc>
  57340. 8017a66: bf00 nop
  57341. 8017a68: 080179ad .word 0x080179ad
  57342. 8017a6c: 24012dcc .word 0x24012dcc
  57343. 08017a70 <_fwalk_sglue>:
  57344. 8017a70: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr}
  57345. 8017a74: 4607 mov r7, r0
  57346. 8017a76: 4688 mov r8, r1
  57347. 8017a78: 4614 mov r4, r2
  57348. 8017a7a: 2600 movs r6, #0
  57349. 8017a7c: e9d4 9501 ldrd r9, r5, [r4, #4]
  57350. 8017a80: f1b9 0901 subs.w r9, r9, #1
  57351. 8017a84: d505 bpl.n 8017a92 <_fwalk_sglue+0x22>
  57352. 8017a86: 6824 ldr r4, [r4, #0]
  57353. 8017a88: 2c00 cmp r4, #0
  57354. 8017a8a: d1f7 bne.n 8017a7c <_fwalk_sglue+0xc>
  57355. 8017a8c: 4630 mov r0, r6
  57356. 8017a8e: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc}
  57357. 8017a92: 89ab ldrh r3, [r5, #12]
  57358. 8017a94: 2b01 cmp r3, #1
  57359. 8017a96: d907 bls.n 8017aa8 <_fwalk_sglue+0x38>
  57360. 8017a98: f9b5 300e ldrsh.w r3, [r5, #14]
  57361. 8017a9c: 3301 adds r3, #1
  57362. 8017a9e: d003 beq.n 8017aa8 <_fwalk_sglue+0x38>
  57363. 8017aa0: 4629 mov r1, r5
  57364. 8017aa2: 4638 mov r0, r7
  57365. 8017aa4: 47c0 blx r8
  57366. 8017aa6: 4306 orrs r6, r0
  57367. 8017aa8: 3568 adds r5, #104 @ 0x68
  57368. 8017aaa: e7e9 b.n 8017a80 <_fwalk_sglue+0x10>
  57369. 08017aac <iprintf>:
  57370. 8017aac: b40f push {r0, r1, r2, r3}
  57371. 8017aae: b507 push {r0, r1, r2, lr}
  57372. 8017ab0: 4906 ldr r1, [pc, #24] @ (8017acc <iprintf+0x20>)
  57373. 8017ab2: ab04 add r3, sp, #16
  57374. 8017ab4: 6808 ldr r0, [r1, #0]
  57375. 8017ab6: f853 2b04 ldr.w r2, [r3], #4
  57376. 8017aba: 6881 ldr r1, [r0, #8]
  57377. 8017abc: 9301 str r3, [sp, #4]
  57378. 8017abe: f000 fa4d bl 8017f5c <_vfiprintf_r>
  57379. 8017ac2: b003 add sp, #12
  57380. 8017ac4: f85d eb04 ldr.w lr, [sp], #4
  57381. 8017ac8: b004 add sp, #16
  57382. 8017aca: 4770 bx lr
  57383. 8017acc: 24000054 .word 0x24000054
  57384. 08017ad0 <__sread>:
  57385. 8017ad0: b510 push {r4, lr}
  57386. 8017ad2: 460c mov r4, r1
  57387. 8017ad4: f9b1 100e ldrsh.w r1, [r1, #14]
  57388. 8017ad8: f000 f8be bl 8017c58 <_read_r>
  57389. 8017adc: 2800 cmp r0, #0
  57390. 8017ade: bfab itete ge
  57391. 8017ae0: 6d63 ldrge r3, [r4, #84] @ 0x54
  57392. 8017ae2: 89a3 ldrhlt r3, [r4, #12]
  57393. 8017ae4: 181b addge r3, r3, r0
  57394. 8017ae6: f423 5380 biclt.w r3, r3, #4096 @ 0x1000
  57395. 8017aea: bfac ite ge
  57396. 8017aec: 6563 strge r3, [r4, #84] @ 0x54
  57397. 8017aee: 81a3 strhlt r3, [r4, #12]
  57398. 8017af0: bd10 pop {r4, pc}
  57399. 08017af2 <__swrite>:
  57400. 8017af2: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
  57401. 8017af6: 461f mov r7, r3
  57402. 8017af8: 898b ldrh r3, [r1, #12]
  57403. 8017afa: 05db lsls r3, r3, #23
  57404. 8017afc: 4605 mov r5, r0
  57405. 8017afe: 460c mov r4, r1
  57406. 8017b00: 4616 mov r6, r2
  57407. 8017b02: d505 bpl.n 8017b10 <__swrite+0x1e>
  57408. 8017b04: f9b1 100e ldrsh.w r1, [r1, #14]
  57409. 8017b08: 2302 movs r3, #2
  57410. 8017b0a: 2200 movs r2, #0
  57411. 8017b0c: f000 f892 bl 8017c34 <_lseek_r>
  57412. 8017b10: 89a3 ldrh r3, [r4, #12]
  57413. 8017b12: f9b4 100e ldrsh.w r1, [r4, #14]
  57414. 8017b16: f423 5380 bic.w r3, r3, #4096 @ 0x1000
  57415. 8017b1a: 81a3 strh r3, [r4, #12]
  57416. 8017b1c: 4632 mov r2, r6
  57417. 8017b1e: 463b mov r3, r7
  57418. 8017b20: 4628 mov r0, r5
  57419. 8017b22: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr}
  57420. 8017b26: f000 b8a9 b.w 8017c7c <_write_r>
  57421. 08017b2a <__sseek>:
  57422. 8017b2a: b510 push {r4, lr}
  57423. 8017b2c: 460c mov r4, r1
  57424. 8017b2e: f9b1 100e ldrsh.w r1, [r1, #14]
  57425. 8017b32: f000 f87f bl 8017c34 <_lseek_r>
  57426. 8017b36: 1c43 adds r3, r0, #1
  57427. 8017b38: 89a3 ldrh r3, [r4, #12]
  57428. 8017b3a: bf15 itete ne
  57429. 8017b3c: 6560 strne r0, [r4, #84] @ 0x54
  57430. 8017b3e: f423 5380 biceq.w r3, r3, #4096 @ 0x1000
  57431. 8017b42: f443 5380 orrne.w r3, r3, #4096 @ 0x1000
  57432. 8017b46: 81a3 strheq r3, [r4, #12]
  57433. 8017b48: bf18 it ne
  57434. 8017b4a: 81a3 strhne r3, [r4, #12]
  57435. 8017b4c: bd10 pop {r4, pc}
  57436. 08017b4e <__sclose>:
  57437. 8017b4e: f9b1 100e ldrsh.w r1, [r1, #14]
  57438. 8017b52: f000 b809 b.w 8017b68 <_close_r>
  57439. 08017b56 <memset>:
  57440. 8017b56: 4402 add r2, r0
  57441. 8017b58: 4603 mov r3, r0
  57442. 8017b5a: 4293 cmp r3, r2
  57443. 8017b5c: d100 bne.n 8017b60 <memset+0xa>
  57444. 8017b5e: 4770 bx lr
  57445. 8017b60: f803 1b01 strb.w r1, [r3], #1
  57446. 8017b64: e7f9 b.n 8017b5a <memset+0x4>
  57447. ...
  57448. 08017b68 <_close_r>:
  57449. 8017b68: b538 push {r3, r4, r5, lr}
  57450. 8017b6a: 4d06 ldr r5, [pc, #24] @ (8017b84 <_close_r+0x1c>)
  57451. 8017b6c: 2300 movs r3, #0
  57452. 8017b6e: 4604 mov r4, r0
  57453. 8017b70: 4608 mov r0, r1
  57454. 8017b72: 602b str r3, [r5, #0]
  57455. 8017b74: f7ec fa4b bl 800400e <_close>
  57456. 8017b78: 1c43 adds r3, r0, #1
  57457. 8017b7a: d102 bne.n 8017b82 <_close_r+0x1a>
  57458. 8017b7c: 682b ldr r3, [r5, #0]
  57459. 8017b7e: b103 cbz r3, 8017b82 <_close_r+0x1a>
  57460. 8017b80: 6023 str r3, [r4, #0]
  57461. 8017b82: bd38 pop {r3, r4, r5, pc}
  57462. 8017b84: 24012dd0 .word 0x24012dd0
  57463. 08017b88 <_reclaim_reent>:
  57464. 8017b88: 4b29 ldr r3, [pc, #164] @ (8017c30 <_reclaim_reent+0xa8>)
  57465. 8017b8a: 681b ldr r3, [r3, #0]
  57466. 8017b8c: 4283 cmp r3, r0
  57467. 8017b8e: b570 push {r4, r5, r6, lr}
  57468. 8017b90: 4604 mov r4, r0
  57469. 8017b92: d04b beq.n 8017c2c <_reclaim_reent+0xa4>
  57470. 8017b94: 69c3 ldr r3, [r0, #28]
  57471. 8017b96: b1ab cbz r3, 8017bc4 <_reclaim_reent+0x3c>
  57472. 8017b98: 68db ldr r3, [r3, #12]
  57473. 8017b9a: b16b cbz r3, 8017bb8 <_reclaim_reent+0x30>
  57474. 8017b9c: 2500 movs r5, #0
  57475. 8017b9e: 69e3 ldr r3, [r4, #28]
  57476. 8017ba0: 68db ldr r3, [r3, #12]
  57477. 8017ba2: 5959 ldr r1, [r3, r5]
  57478. 8017ba4: 2900 cmp r1, #0
  57479. 8017ba6: d13b bne.n 8017c20 <_reclaim_reent+0x98>
  57480. 8017ba8: 3504 adds r5, #4
  57481. 8017baa: 2d80 cmp r5, #128 @ 0x80
  57482. 8017bac: d1f7 bne.n 8017b9e <_reclaim_reent+0x16>
  57483. 8017bae: 69e3 ldr r3, [r4, #28]
  57484. 8017bb0: 4620 mov r0, r4
  57485. 8017bb2: 68d9 ldr r1, [r3, #12]
  57486. 8017bb4: f000 f8b0 bl 8017d18 <_free_r>
  57487. 8017bb8: 69e3 ldr r3, [r4, #28]
  57488. 8017bba: 6819 ldr r1, [r3, #0]
  57489. 8017bbc: b111 cbz r1, 8017bc4 <_reclaim_reent+0x3c>
  57490. 8017bbe: 4620 mov r0, r4
  57491. 8017bc0: f000 f8aa bl 8017d18 <_free_r>
  57492. 8017bc4: 6961 ldr r1, [r4, #20]
  57493. 8017bc6: b111 cbz r1, 8017bce <_reclaim_reent+0x46>
  57494. 8017bc8: 4620 mov r0, r4
  57495. 8017bca: f000 f8a5 bl 8017d18 <_free_r>
  57496. 8017bce: 69e1 ldr r1, [r4, #28]
  57497. 8017bd0: b111 cbz r1, 8017bd8 <_reclaim_reent+0x50>
  57498. 8017bd2: 4620 mov r0, r4
  57499. 8017bd4: f000 f8a0 bl 8017d18 <_free_r>
  57500. 8017bd8: 6b21 ldr r1, [r4, #48] @ 0x30
  57501. 8017bda: b111 cbz r1, 8017be2 <_reclaim_reent+0x5a>
  57502. 8017bdc: 4620 mov r0, r4
  57503. 8017bde: f000 f89b bl 8017d18 <_free_r>
  57504. 8017be2: 6b61 ldr r1, [r4, #52] @ 0x34
  57505. 8017be4: b111 cbz r1, 8017bec <_reclaim_reent+0x64>
  57506. 8017be6: 4620 mov r0, r4
  57507. 8017be8: f000 f896 bl 8017d18 <_free_r>
  57508. 8017bec: 6ba1 ldr r1, [r4, #56] @ 0x38
  57509. 8017bee: b111 cbz r1, 8017bf6 <_reclaim_reent+0x6e>
  57510. 8017bf0: 4620 mov r0, r4
  57511. 8017bf2: f000 f891 bl 8017d18 <_free_r>
  57512. 8017bf6: 6ca1 ldr r1, [r4, #72] @ 0x48
  57513. 8017bf8: b111 cbz r1, 8017c00 <_reclaim_reent+0x78>
  57514. 8017bfa: 4620 mov r0, r4
  57515. 8017bfc: f000 f88c bl 8017d18 <_free_r>
  57516. 8017c00: 6c61 ldr r1, [r4, #68] @ 0x44
  57517. 8017c02: b111 cbz r1, 8017c0a <_reclaim_reent+0x82>
  57518. 8017c04: 4620 mov r0, r4
  57519. 8017c06: f000 f887 bl 8017d18 <_free_r>
  57520. 8017c0a: 6ae1 ldr r1, [r4, #44] @ 0x2c
  57521. 8017c0c: b111 cbz r1, 8017c14 <_reclaim_reent+0x8c>
  57522. 8017c0e: 4620 mov r0, r4
  57523. 8017c10: f000 f882 bl 8017d18 <_free_r>
  57524. 8017c14: 6a23 ldr r3, [r4, #32]
  57525. 8017c16: b14b cbz r3, 8017c2c <_reclaim_reent+0xa4>
  57526. 8017c18: 4620 mov r0, r4
  57527. 8017c1a: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr}
  57528. 8017c1e: 4718 bx r3
  57529. 8017c20: 680e ldr r6, [r1, #0]
  57530. 8017c22: 4620 mov r0, r4
  57531. 8017c24: f000 f878 bl 8017d18 <_free_r>
  57532. 8017c28: 4631 mov r1, r6
  57533. 8017c2a: e7bb b.n 8017ba4 <_reclaim_reent+0x1c>
  57534. 8017c2c: bd70 pop {r4, r5, r6, pc}
  57535. 8017c2e: bf00 nop
  57536. 8017c30: 24000054 .word 0x24000054
  57537. 08017c34 <_lseek_r>:
  57538. 8017c34: b538 push {r3, r4, r5, lr}
  57539. 8017c36: 4d07 ldr r5, [pc, #28] @ (8017c54 <_lseek_r+0x20>)
  57540. 8017c38: 4604 mov r4, r0
  57541. 8017c3a: 4608 mov r0, r1
  57542. 8017c3c: 4611 mov r1, r2
  57543. 8017c3e: 2200 movs r2, #0
  57544. 8017c40: 602a str r2, [r5, #0]
  57545. 8017c42: 461a mov r2, r3
  57546. 8017c44: f7ec fa0a bl 800405c <_lseek>
  57547. 8017c48: 1c43 adds r3, r0, #1
  57548. 8017c4a: d102 bne.n 8017c52 <_lseek_r+0x1e>
  57549. 8017c4c: 682b ldr r3, [r5, #0]
  57550. 8017c4e: b103 cbz r3, 8017c52 <_lseek_r+0x1e>
  57551. 8017c50: 6023 str r3, [r4, #0]
  57552. 8017c52: bd38 pop {r3, r4, r5, pc}
  57553. 8017c54: 24012dd0 .word 0x24012dd0
  57554. 08017c58 <_read_r>:
  57555. 8017c58: b538 push {r3, r4, r5, lr}
  57556. 8017c5a: 4d07 ldr r5, [pc, #28] @ (8017c78 <_read_r+0x20>)
  57557. 8017c5c: 4604 mov r4, r0
  57558. 8017c5e: 4608 mov r0, r1
  57559. 8017c60: 4611 mov r1, r2
  57560. 8017c62: 2200 movs r2, #0
  57561. 8017c64: 602a str r2, [r5, #0]
  57562. 8017c66: 461a mov r2, r3
  57563. 8017c68: f7ec f998 bl 8003f9c <_read>
  57564. 8017c6c: 1c43 adds r3, r0, #1
  57565. 8017c6e: d102 bne.n 8017c76 <_read_r+0x1e>
  57566. 8017c70: 682b ldr r3, [r5, #0]
  57567. 8017c72: b103 cbz r3, 8017c76 <_read_r+0x1e>
  57568. 8017c74: 6023 str r3, [r4, #0]
  57569. 8017c76: bd38 pop {r3, r4, r5, pc}
  57570. 8017c78: 24012dd0 .word 0x24012dd0
  57571. 08017c7c <_write_r>:
  57572. 8017c7c: b538 push {r3, r4, r5, lr}
  57573. 8017c7e: 4d07 ldr r5, [pc, #28] @ (8017c9c <_write_r+0x20>)
  57574. 8017c80: 4604 mov r4, r0
  57575. 8017c82: 4608 mov r0, r1
  57576. 8017c84: 4611 mov r1, r2
  57577. 8017c86: 2200 movs r2, #0
  57578. 8017c88: 602a str r2, [r5, #0]
  57579. 8017c8a: 461a mov r2, r3
  57580. 8017c8c: f7ec f9a3 bl 8003fd6 <_write>
  57581. 8017c90: 1c43 adds r3, r0, #1
  57582. 8017c92: d102 bne.n 8017c9a <_write_r+0x1e>
  57583. 8017c94: 682b ldr r3, [r5, #0]
  57584. 8017c96: b103 cbz r3, 8017c9a <_write_r+0x1e>
  57585. 8017c98: 6023 str r3, [r4, #0]
  57586. 8017c9a: bd38 pop {r3, r4, r5, pc}
  57587. 8017c9c: 24012dd0 .word 0x24012dd0
  57588. 08017ca0 <__errno>:
  57589. 8017ca0: 4b01 ldr r3, [pc, #4] @ (8017ca8 <__errno+0x8>)
  57590. 8017ca2: 6818 ldr r0, [r3, #0]
  57591. 8017ca4: 4770 bx lr
  57592. 8017ca6: bf00 nop
  57593. 8017ca8: 24000054 .word 0x24000054
  57594. 08017cac <__libc_init_array>:
  57595. 8017cac: b570 push {r4, r5, r6, lr}
  57596. 8017cae: 4d0d ldr r5, [pc, #52] @ (8017ce4 <__libc_init_array+0x38>)
  57597. 8017cb0: 4c0d ldr r4, [pc, #52] @ (8017ce8 <__libc_init_array+0x3c>)
  57598. 8017cb2: 1b64 subs r4, r4, r5
  57599. 8017cb4: 10a4 asrs r4, r4, #2
  57600. 8017cb6: 2600 movs r6, #0
  57601. 8017cb8: 42a6 cmp r6, r4
  57602. 8017cba: d109 bne.n 8017cd0 <__libc_init_array+0x24>
  57603. 8017cbc: 4d0b ldr r5, [pc, #44] @ (8017cec <__libc_init_array+0x40>)
  57604. 8017cbe: 4c0c ldr r4, [pc, #48] @ (8017cf0 <__libc_init_array+0x44>)
  57605. 8017cc0: f000 fdc6 bl 8018850 <_init>
  57606. 8017cc4: 1b64 subs r4, r4, r5
  57607. 8017cc6: 10a4 asrs r4, r4, #2
  57608. 8017cc8: 2600 movs r6, #0
  57609. 8017cca: 42a6 cmp r6, r4
  57610. 8017ccc: d105 bne.n 8017cda <__libc_init_array+0x2e>
  57611. 8017cce: bd70 pop {r4, r5, r6, pc}
  57612. 8017cd0: f855 3b04 ldr.w r3, [r5], #4
  57613. 8017cd4: 4798 blx r3
  57614. 8017cd6: 3601 adds r6, #1
  57615. 8017cd8: e7ee b.n 8017cb8 <__libc_init_array+0xc>
  57616. 8017cda: f855 3b04 ldr.w r3, [r5], #4
  57617. 8017cde: 4798 blx r3
  57618. 8017ce0: 3601 adds r6, #1
  57619. 8017ce2: e7f2 b.n 8017cca <__libc_init_array+0x1e>
  57620. 8017ce4: 08018a44 .word 0x08018a44
  57621. 8017ce8: 08018a44 .word 0x08018a44
  57622. 8017cec: 08018a44 .word 0x08018a44
  57623. 8017cf0: 08018a48 .word 0x08018a48
  57624. 08017cf4 <__retarget_lock_init_recursive>:
  57625. 8017cf4: 4770 bx lr
  57626. 08017cf6 <__retarget_lock_acquire_recursive>:
  57627. 8017cf6: 4770 bx lr
  57628. 08017cf8 <__retarget_lock_release_recursive>:
  57629. 8017cf8: 4770 bx lr
  57630. 08017cfa <memcpy>:
  57631. 8017cfa: 440a add r2, r1
  57632. 8017cfc: 4291 cmp r1, r2
  57633. 8017cfe: f100 33ff add.w r3, r0, #4294967295 @ 0xffffffff
  57634. 8017d02: d100 bne.n 8017d06 <memcpy+0xc>
  57635. 8017d04: 4770 bx lr
  57636. 8017d06: b510 push {r4, lr}
  57637. 8017d08: f811 4b01 ldrb.w r4, [r1], #1
  57638. 8017d0c: f803 4f01 strb.w r4, [r3, #1]!
  57639. 8017d10: 4291 cmp r1, r2
  57640. 8017d12: d1f9 bne.n 8017d08 <memcpy+0xe>
  57641. 8017d14: bd10 pop {r4, pc}
  57642. ...
  57643. 08017d18 <_free_r>:
  57644. 8017d18: b538 push {r3, r4, r5, lr}
  57645. 8017d1a: 4605 mov r5, r0
  57646. 8017d1c: 2900 cmp r1, #0
  57647. 8017d1e: d041 beq.n 8017da4 <_free_r+0x8c>
  57648. 8017d20: f851 3c04 ldr.w r3, [r1, #-4]
  57649. 8017d24: 1f0c subs r4, r1, #4
  57650. 8017d26: 2b00 cmp r3, #0
  57651. 8017d28: bfb8 it lt
  57652. 8017d2a: 18e4 addlt r4, r4, r3
  57653. 8017d2c: f000 f8e0 bl 8017ef0 <__malloc_lock>
  57654. 8017d30: 4a1d ldr r2, [pc, #116] @ (8017da8 <_free_r+0x90>)
  57655. 8017d32: 6813 ldr r3, [r2, #0]
  57656. 8017d34: b933 cbnz r3, 8017d44 <_free_r+0x2c>
  57657. 8017d36: 6063 str r3, [r4, #4]
  57658. 8017d38: 6014 str r4, [r2, #0]
  57659. 8017d3a: 4628 mov r0, r5
  57660. 8017d3c: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr}
  57661. 8017d40: f000 b8dc b.w 8017efc <__malloc_unlock>
  57662. 8017d44: 42a3 cmp r3, r4
  57663. 8017d46: d908 bls.n 8017d5a <_free_r+0x42>
  57664. 8017d48: 6820 ldr r0, [r4, #0]
  57665. 8017d4a: 1821 adds r1, r4, r0
  57666. 8017d4c: 428b cmp r3, r1
  57667. 8017d4e: bf01 itttt eq
  57668. 8017d50: 6819 ldreq r1, [r3, #0]
  57669. 8017d52: 685b ldreq r3, [r3, #4]
  57670. 8017d54: 1809 addeq r1, r1, r0
  57671. 8017d56: 6021 streq r1, [r4, #0]
  57672. 8017d58: e7ed b.n 8017d36 <_free_r+0x1e>
  57673. 8017d5a: 461a mov r2, r3
  57674. 8017d5c: 685b ldr r3, [r3, #4]
  57675. 8017d5e: b10b cbz r3, 8017d64 <_free_r+0x4c>
  57676. 8017d60: 42a3 cmp r3, r4
  57677. 8017d62: d9fa bls.n 8017d5a <_free_r+0x42>
  57678. 8017d64: 6811 ldr r1, [r2, #0]
  57679. 8017d66: 1850 adds r0, r2, r1
  57680. 8017d68: 42a0 cmp r0, r4
  57681. 8017d6a: d10b bne.n 8017d84 <_free_r+0x6c>
  57682. 8017d6c: 6820 ldr r0, [r4, #0]
  57683. 8017d6e: 4401 add r1, r0
  57684. 8017d70: 1850 adds r0, r2, r1
  57685. 8017d72: 4283 cmp r3, r0
  57686. 8017d74: 6011 str r1, [r2, #0]
  57687. 8017d76: d1e0 bne.n 8017d3a <_free_r+0x22>
  57688. 8017d78: 6818 ldr r0, [r3, #0]
  57689. 8017d7a: 685b ldr r3, [r3, #4]
  57690. 8017d7c: 6053 str r3, [r2, #4]
  57691. 8017d7e: 4408 add r0, r1
  57692. 8017d80: 6010 str r0, [r2, #0]
  57693. 8017d82: e7da b.n 8017d3a <_free_r+0x22>
  57694. 8017d84: d902 bls.n 8017d8c <_free_r+0x74>
  57695. 8017d86: 230c movs r3, #12
  57696. 8017d88: 602b str r3, [r5, #0]
  57697. 8017d8a: e7d6 b.n 8017d3a <_free_r+0x22>
  57698. 8017d8c: 6820 ldr r0, [r4, #0]
  57699. 8017d8e: 1821 adds r1, r4, r0
  57700. 8017d90: 428b cmp r3, r1
  57701. 8017d92: bf04 itt eq
  57702. 8017d94: 6819 ldreq r1, [r3, #0]
  57703. 8017d96: 685b ldreq r3, [r3, #4]
  57704. 8017d98: 6063 str r3, [r4, #4]
  57705. 8017d9a: bf04 itt eq
  57706. 8017d9c: 1809 addeq r1, r1, r0
  57707. 8017d9e: 6021 streq r1, [r4, #0]
  57708. 8017da0: 6054 str r4, [r2, #4]
  57709. 8017da2: e7ca b.n 8017d3a <_free_r+0x22>
  57710. 8017da4: bd38 pop {r3, r4, r5, pc}
  57711. 8017da6: bf00 nop
  57712. 8017da8: 24012ddc .word 0x24012ddc
  57713. 08017dac <sbrk_aligned>:
  57714. 8017dac: b570 push {r4, r5, r6, lr}
  57715. 8017dae: 4e0f ldr r6, [pc, #60] @ (8017dec <sbrk_aligned+0x40>)
  57716. 8017db0: 460c mov r4, r1
  57717. 8017db2: 6831 ldr r1, [r6, #0]
  57718. 8017db4: 4605 mov r5, r0
  57719. 8017db6: b911 cbnz r1, 8017dbe <sbrk_aligned+0x12>
  57720. 8017db8: f000 fcb6 bl 8018728 <_sbrk_r>
  57721. 8017dbc: 6030 str r0, [r6, #0]
  57722. 8017dbe: 4621 mov r1, r4
  57723. 8017dc0: 4628 mov r0, r5
  57724. 8017dc2: f000 fcb1 bl 8018728 <_sbrk_r>
  57725. 8017dc6: 1c43 adds r3, r0, #1
  57726. 8017dc8: d103 bne.n 8017dd2 <sbrk_aligned+0x26>
  57727. 8017dca: f04f 34ff mov.w r4, #4294967295 @ 0xffffffff
  57728. 8017dce: 4620 mov r0, r4
  57729. 8017dd0: bd70 pop {r4, r5, r6, pc}
  57730. 8017dd2: 1cc4 adds r4, r0, #3
  57731. 8017dd4: f024 0403 bic.w r4, r4, #3
  57732. 8017dd8: 42a0 cmp r0, r4
  57733. 8017dda: d0f8 beq.n 8017dce <sbrk_aligned+0x22>
  57734. 8017ddc: 1a21 subs r1, r4, r0
  57735. 8017dde: 4628 mov r0, r5
  57736. 8017de0: f000 fca2 bl 8018728 <_sbrk_r>
  57737. 8017de4: 3001 adds r0, #1
  57738. 8017de6: d1f2 bne.n 8017dce <sbrk_aligned+0x22>
  57739. 8017de8: e7ef b.n 8017dca <sbrk_aligned+0x1e>
  57740. 8017dea: bf00 nop
  57741. 8017dec: 24012dd8 .word 0x24012dd8
  57742. 08017df0 <_malloc_r>:
  57743. 8017df0: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr}
  57744. 8017df4: 1ccd adds r5, r1, #3
  57745. 8017df6: f025 0503 bic.w r5, r5, #3
  57746. 8017dfa: 3508 adds r5, #8
  57747. 8017dfc: 2d0c cmp r5, #12
  57748. 8017dfe: bf38 it cc
  57749. 8017e00: 250c movcc r5, #12
  57750. 8017e02: 2d00 cmp r5, #0
  57751. 8017e04: 4606 mov r6, r0
  57752. 8017e06: db01 blt.n 8017e0c <_malloc_r+0x1c>
  57753. 8017e08: 42a9 cmp r1, r5
  57754. 8017e0a: d904 bls.n 8017e16 <_malloc_r+0x26>
  57755. 8017e0c: 230c movs r3, #12
  57756. 8017e0e: 6033 str r3, [r6, #0]
  57757. 8017e10: 2000 movs r0, #0
  57758. 8017e12: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc}
  57759. 8017e16: f8df 80d4 ldr.w r8, [pc, #212] @ 8017eec <_malloc_r+0xfc>
  57760. 8017e1a: f000 f869 bl 8017ef0 <__malloc_lock>
  57761. 8017e1e: f8d8 3000 ldr.w r3, [r8]
  57762. 8017e22: 461c mov r4, r3
  57763. 8017e24: bb44 cbnz r4, 8017e78 <_malloc_r+0x88>
  57764. 8017e26: 4629 mov r1, r5
  57765. 8017e28: 4630 mov r0, r6
  57766. 8017e2a: f7ff ffbf bl 8017dac <sbrk_aligned>
  57767. 8017e2e: 1c43 adds r3, r0, #1
  57768. 8017e30: 4604 mov r4, r0
  57769. 8017e32: d158 bne.n 8017ee6 <_malloc_r+0xf6>
  57770. 8017e34: f8d8 4000 ldr.w r4, [r8]
  57771. 8017e38: 4627 mov r7, r4
  57772. 8017e3a: 2f00 cmp r7, #0
  57773. 8017e3c: d143 bne.n 8017ec6 <_malloc_r+0xd6>
  57774. 8017e3e: 2c00 cmp r4, #0
  57775. 8017e40: d04b beq.n 8017eda <_malloc_r+0xea>
  57776. 8017e42: 6823 ldr r3, [r4, #0]
  57777. 8017e44: 4639 mov r1, r7
  57778. 8017e46: 4630 mov r0, r6
  57779. 8017e48: eb04 0903 add.w r9, r4, r3
  57780. 8017e4c: f000 fc6c bl 8018728 <_sbrk_r>
  57781. 8017e50: 4581 cmp r9, r0
  57782. 8017e52: d142 bne.n 8017eda <_malloc_r+0xea>
  57783. 8017e54: 6821 ldr r1, [r4, #0]
  57784. 8017e56: 1a6d subs r5, r5, r1
  57785. 8017e58: 4629 mov r1, r5
  57786. 8017e5a: 4630 mov r0, r6
  57787. 8017e5c: f7ff ffa6 bl 8017dac <sbrk_aligned>
  57788. 8017e60: 3001 adds r0, #1
  57789. 8017e62: d03a beq.n 8017eda <_malloc_r+0xea>
  57790. 8017e64: 6823 ldr r3, [r4, #0]
  57791. 8017e66: 442b add r3, r5
  57792. 8017e68: 6023 str r3, [r4, #0]
  57793. 8017e6a: f8d8 3000 ldr.w r3, [r8]
  57794. 8017e6e: 685a ldr r2, [r3, #4]
  57795. 8017e70: bb62 cbnz r2, 8017ecc <_malloc_r+0xdc>
  57796. 8017e72: f8c8 7000 str.w r7, [r8]
  57797. 8017e76: e00f b.n 8017e98 <_malloc_r+0xa8>
  57798. 8017e78: 6822 ldr r2, [r4, #0]
  57799. 8017e7a: 1b52 subs r2, r2, r5
  57800. 8017e7c: d420 bmi.n 8017ec0 <_malloc_r+0xd0>
  57801. 8017e7e: 2a0b cmp r2, #11
  57802. 8017e80: d917 bls.n 8017eb2 <_malloc_r+0xc2>
  57803. 8017e82: 1961 adds r1, r4, r5
  57804. 8017e84: 42a3 cmp r3, r4
  57805. 8017e86: 6025 str r5, [r4, #0]
  57806. 8017e88: bf18 it ne
  57807. 8017e8a: 6059 strne r1, [r3, #4]
  57808. 8017e8c: 6863 ldr r3, [r4, #4]
  57809. 8017e8e: bf08 it eq
  57810. 8017e90: f8c8 1000 streq.w r1, [r8]
  57811. 8017e94: 5162 str r2, [r4, r5]
  57812. 8017e96: 604b str r3, [r1, #4]
  57813. 8017e98: 4630 mov r0, r6
  57814. 8017e9a: f000 f82f bl 8017efc <__malloc_unlock>
  57815. 8017e9e: f104 000b add.w r0, r4, #11
  57816. 8017ea2: 1d23 adds r3, r4, #4
  57817. 8017ea4: f020 0007 bic.w r0, r0, #7
  57818. 8017ea8: 1ac2 subs r2, r0, r3
  57819. 8017eaa: bf1c itt ne
  57820. 8017eac: 1a1b subne r3, r3, r0
  57821. 8017eae: 50a3 strne r3, [r4, r2]
  57822. 8017eb0: e7af b.n 8017e12 <_malloc_r+0x22>
  57823. 8017eb2: 6862 ldr r2, [r4, #4]
  57824. 8017eb4: 42a3 cmp r3, r4
  57825. 8017eb6: bf0c ite eq
  57826. 8017eb8: f8c8 2000 streq.w r2, [r8]
  57827. 8017ebc: 605a strne r2, [r3, #4]
  57828. 8017ebe: e7eb b.n 8017e98 <_malloc_r+0xa8>
  57829. 8017ec0: 4623 mov r3, r4
  57830. 8017ec2: 6864 ldr r4, [r4, #4]
  57831. 8017ec4: e7ae b.n 8017e24 <_malloc_r+0x34>
  57832. 8017ec6: 463c mov r4, r7
  57833. 8017ec8: 687f ldr r7, [r7, #4]
  57834. 8017eca: e7b6 b.n 8017e3a <_malloc_r+0x4a>
  57835. 8017ecc: 461a mov r2, r3
  57836. 8017ece: 685b ldr r3, [r3, #4]
  57837. 8017ed0: 42a3 cmp r3, r4
  57838. 8017ed2: d1fb bne.n 8017ecc <_malloc_r+0xdc>
  57839. 8017ed4: 2300 movs r3, #0
  57840. 8017ed6: 6053 str r3, [r2, #4]
  57841. 8017ed8: e7de b.n 8017e98 <_malloc_r+0xa8>
  57842. 8017eda: 230c movs r3, #12
  57843. 8017edc: 6033 str r3, [r6, #0]
  57844. 8017ede: 4630 mov r0, r6
  57845. 8017ee0: f000 f80c bl 8017efc <__malloc_unlock>
  57846. 8017ee4: e794 b.n 8017e10 <_malloc_r+0x20>
  57847. 8017ee6: 6005 str r5, [r0, #0]
  57848. 8017ee8: e7d6 b.n 8017e98 <_malloc_r+0xa8>
  57849. 8017eea: bf00 nop
  57850. 8017eec: 24012ddc .word 0x24012ddc
  57851. 08017ef0 <__malloc_lock>:
  57852. 8017ef0: 4801 ldr r0, [pc, #4] @ (8017ef8 <__malloc_lock+0x8>)
  57853. 8017ef2: f7ff bf00 b.w 8017cf6 <__retarget_lock_acquire_recursive>
  57854. 8017ef6: bf00 nop
  57855. 8017ef8: 24012dd4 .word 0x24012dd4
  57856. 08017efc <__malloc_unlock>:
  57857. 8017efc: 4801 ldr r0, [pc, #4] @ (8017f04 <__malloc_unlock+0x8>)
  57858. 8017efe: f7ff befb b.w 8017cf8 <__retarget_lock_release_recursive>
  57859. 8017f02: bf00 nop
  57860. 8017f04: 24012dd4 .word 0x24012dd4
  57861. 08017f08 <__sfputc_r>:
  57862. 8017f08: 6893 ldr r3, [r2, #8]
  57863. 8017f0a: 3b01 subs r3, #1
  57864. 8017f0c: 2b00 cmp r3, #0
  57865. 8017f0e: b410 push {r4}
  57866. 8017f10: 6093 str r3, [r2, #8]
  57867. 8017f12: da08 bge.n 8017f26 <__sfputc_r+0x1e>
  57868. 8017f14: 6994 ldr r4, [r2, #24]
  57869. 8017f16: 42a3 cmp r3, r4
  57870. 8017f18: db01 blt.n 8017f1e <__sfputc_r+0x16>
  57871. 8017f1a: 290a cmp r1, #10
  57872. 8017f1c: d103 bne.n 8017f26 <__sfputc_r+0x1e>
  57873. 8017f1e: f85d 4b04 ldr.w r4, [sp], #4
  57874. 8017f22: f000 bb6d b.w 8018600 <__swbuf_r>
  57875. 8017f26: 6813 ldr r3, [r2, #0]
  57876. 8017f28: 1c58 adds r0, r3, #1
  57877. 8017f2a: 6010 str r0, [r2, #0]
  57878. 8017f2c: 7019 strb r1, [r3, #0]
  57879. 8017f2e: 4608 mov r0, r1
  57880. 8017f30: f85d 4b04 ldr.w r4, [sp], #4
  57881. 8017f34: 4770 bx lr
  57882. 08017f36 <__sfputs_r>:
  57883. 8017f36: b5f8 push {r3, r4, r5, r6, r7, lr}
  57884. 8017f38: 4606 mov r6, r0
  57885. 8017f3a: 460f mov r7, r1
  57886. 8017f3c: 4614 mov r4, r2
  57887. 8017f3e: 18d5 adds r5, r2, r3
  57888. 8017f40: 42ac cmp r4, r5
  57889. 8017f42: d101 bne.n 8017f48 <__sfputs_r+0x12>
  57890. 8017f44: 2000 movs r0, #0
  57891. 8017f46: e007 b.n 8017f58 <__sfputs_r+0x22>
  57892. 8017f48: f814 1b01 ldrb.w r1, [r4], #1
  57893. 8017f4c: 463a mov r2, r7
  57894. 8017f4e: 4630 mov r0, r6
  57895. 8017f50: f7ff ffda bl 8017f08 <__sfputc_r>
  57896. 8017f54: 1c43 adds r3, r0, #1
  57897. 8017f56: d1f3 bne.n 8017f40 <__sfputs_r+0xa>
  57898. 8017f58: bdf8 pop {r3, r4, r5, r6, r7, pc}
  57899. ...
  57900. 08017f5c <_vfiprintf_r>:
  57901. 8017f5c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
  57902. 8017f60: 460d mov r5, r1
  57903. 8017f62: b09d sub sp, #116 @ 0x74
  57904. 8017f64: 4614 mov r4, r2
  57905. 8017f66: 4698 mov r8, r3
  57906. 8017f68: 4606 mov r6, r0
  57907. 8017f6a: b118 cbz r0, 8017f74 <_vfiprintf_r+0x18>
  57908. 8017f6c: 6a03 ldr r3, [r0, #32]
  57909. 8017f6e: b90b cbnz r3, 8017f74 <_vfiprintf_r+0x18>
  57910. 8017f70: f7ff fd66 bl 8017a40 <__sinit>
  57911. 8017f74: 6e6b ldr r3, [r5, #100] @ 0x64
  57912. 8017f76: 07d9 lsls r1, r3, #31
  57913. 8017f78: d405 bmi.n 8017f86 <_vfiprintf_r+0x2a>
  57914. 8017f7a: 89ab ldrh r3, [r5, #12]
  57915. 8017f7c: 059a lsls r2, r3, #22
  57916. 8017f7e: d402 bmi.n 8017f86 <_vfiprintf_r+0x2a>
  57917. 8017f80: 6da8 ldr r0, [r5, #88] @ 0x58
  57918. 8017f82: f7ff feb8 bl 8017cf6 <__retarget_lock_acquire_recursive>
  57919. 8017f86: 89ab ldrh r3, [r5, #12]
  57920. 8017f88: 071b lsls r3, r3, #28
  57921. 8017f8a: d501 bpl.n 8017f90 <_vfiprintf_r+0x34>
  57922. 8017f8c: 692b ldr r3, [r5, #16]
  57923. 8017f8e: b99b cbnz r3, 8017fb8 <_vfiprintf_r+0x5c>
  57924. 8017f90: 4629 mov r1, r5
  57925. 8017f92: 4630 mov r0, r6
  57926. 8017f94: f000 fb72 bl 801867c <__swsetup_r>
  57927. 8017f98: b170 cbz r0, 8017fb8 <_vfiprintf_r+0x5c>
  57928. 8017f9a: 6e6b ldr r3, [r5, #100] @ 0x64
  57929. 8017f9c: 07dc lsls r4, r3, #31
  57930. 8017f9e: d504 bpl.n 8017faa <_vfiprintf_r+0x4e>
  57931. 8017fa0: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff
  57932. 8017fa4: b01d add sp, #116 @ 0x74
  57933. 8017fa6: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
  57934. 8017faa: 89ab ldrh r3, [r5, #12]
  57935. 8017fac: 0598 lsls r0, r3, #22
  57936. 8017fae: d4f7 bmi.n 8017fa0 <_vfiprintf_r+0x44>
  57937. 8017fb0: 6da8 ldr r0, [r5, #88] @ 0x58
  57938. 8017fb2: f7ff fea1 bl 8017cf8 <__retarget_lock_release_recursive>
  57939. 8017fb6: e7f3 b.n 8017fa0 <_vfiprintf_r+0x44>
  57940. 8017fb8: 2300 movs r3, #0
  57941. 8017fba: 9309 str r3, [sp, #36] @ 0x24
  57942. 8017fbc: 2320 movs r3, #32
  57943. 8017fbe: f88d 3029 strb.w r3, [sp, #41] @ 0x29
  57944. 8017fc2: f8cd 800c str.w r8, [sp, #12]
  57945. 8017fc6: 2330 movs r3, #48 @ 0x30
  57946. 8017fc8: f8df 81ac ldr.w r8, [pc, #428] @ 8018178 <_vfiprintf_r+0x21c>
  57947. 8017fcc: f88d 302a strb.w r3, [sp, #42] @ 0x2a
  57948. 8017fd0: f04f 0901 mov.w r9, #1
  57949. 8017fd4: 4623 mov r3, r4
  57950. 8017fd6: 469a mov sl, r3
  57951. 8017fd8: f813 2b01 ldrb.w r2, [r3], #1
  57952. 8017fdc: b10a cbz r2, 8017fe2 <_vfiprintf_r+0x86>
  57953. 8017fde: 2a25 cmp r2, #37 @ 0x25
  57954. 8017fe0: d1f9 bne.n 8017fd6 <_vfiprintf_r+0x7a>
  57955. 8017fe2: ebba 0b04 subs.w fp, sl, r4
  57956. 8017fe6: d00b beq.n 8018000 <_vfiprintf_r+0xa4>
  57957. 8017fe8: 465b mov r3, fp
  57958. 8017fea: 4622 mov r2, r4
  57959. 8017fec: 4629 mov r1, r5
  57960. 8017fee: 4630 mov r0, r6
  57961. 8017ff0: f7ff ffa1 bl 8017f36 <__sfputs_r>
  57962. 8017ff4: 3001 adds r0, #1
  57963. 8017ff6: f000 80a7 beq.w 8018148 <_vfiprintf_r+0x1ec>
  57964. 8017ffa: 9a09 ldr r2, [sp, #36] @ 0x24
  57965. 8017ffc: 445a add r2, fp
  57966. 8017ffe: 9209 str r2, [sp, #36] @ 0x24
  57967. 8018000: f89a 3000 ldrb.w r3, [sl]
  57968. 8018004: 2b00 cmp r3, #0
  57969. 8018006: f000 809f beq.w 8018148 <_vfiprintf_r+0x1ec>
  57970. 801800a: 2300 movs r3, #0
  57971. 801800c: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
  57972. 8018010: e9cd 2305 strd r2, r3, [sp, #20]
  57973. 8018014: f10a 0a01 add.w sl, sl, #1
  57974. 8018018: 9304 str r3, [sp, #16]
  57975. 801801a: 9307 str r3, [sp, #28]
  57976. 801801c: f88d 3053 strb.w r3, [sp, #83] @ 0x53
  57977. 8018020: 931a str r3, [sp, #104] @ 0x68
  57978. 8018022: 4654 mov r4, sl
  57979. 8018024: 2205 movs r2, #5
  57980. 8018026: f814 1b01 ldrb.w r1, [r4], #1
  57981. 801802a: 4853 ldr r0, [pc, #332] @ (8018178 <_vfiprintf_r+0x21c>)
  57982. 801802c: f7e8 f958 bl 80002e0 <memchr>
  57983. 8018030: 9a04 ldr r2, [sp, #16]
  57984. 8018032: b9d8 cbnz r0, 801806c <_vfiprintf_r+0x110>
  57985. 8018034: 06d1 lsls r1, r2, #27
  57986. 8018036: bf44 itt mi
  57987. 8018038: 2320 movmi r3, #32
  57988. 801803a: f88d 3053 strbmi.w r3, [sp, #83] @ 0x53
  57989. 801803e: 0713 lsls r3, r2, #28
  57990. 8018040: bf44 itt mi
  57991. 8018042: 232b movmi r3, #43 @ 0x2b
  57992. 8018044: f88d 3053 strbmi.w r3, [sp, #83] @ 0x53
  57993. 8018048: f89a 3000 ldrb.w r3, [sl]
  57994. 801804c: 2b2a cmp r3, #42 @ 0x2a
  57995. 801804e: d015 beq.n 801807c <_vfiprintf_r+0x120>
  57996. 8018050: 9a07 ldr r2, [sp, #28]
  57997. 8018052: 4654 mov r4, sl
  57998. 8018054: 2000 movs r0, #0
  57999. 8018056: f04f 0c0a mov.w ip, #10
  58000. 801805a: 4621 mov r1, r4
  58001. 801805c: f811 3b01 ldrb.w r3, [r1], #1
  58002. 8018060: 3b30 subs r3, #48 @ 0x30
  58003. 8018062: 2b09 cmp r3, #9
  58004. 8018064: d94b bls.n 80180fe <_vfiprintf_r+0x1a2>
  58005. 8018066: b1b0 cbz r0, 8018096 <_vfiprintf_r+0x13a>
  58006. 8018068: 9207 str r2, [sp, #28]
  58007. 801806a: e014 b.n 8018096 <_vfiprintf_r+0x13a>
  58008. 801806c: eba0 0308 sub.w r3, r0, r8
  58009. 8018070: fa09 f303 lsl.w r3, r9, r3
  58010. 8018074: 4313 orrs r3, r2
  58011. 8018076: 9304 str r3, [sp, #16]
  58012. 8018078: 46a2 mov sl, r4
  58013. 801807a: e7d2 b.n 8018022 <_vfiprintf_r+0xc6>
  58014. 801807c: 9b03 ldr r3, [sp, #12]
  58015. 801807e: 1d19 adds r1, r3, #4
  58016. 8018080: 681b ldr r3, [r3, #0]
  58017. 8018082: 9103 str r1, [sp, #12]
  58018. 8018084: 2b00 cmp r3, #0
  58019. 8018086: bfbb ittet lt
  58020. 8018088: 425b neglt r3, r3
  58021. 801808a: f042 0202 orrlt.w r2, r2, #2
  58022. 801808e: 9307 strge r3, [sp, #28]
  58023. 8018090: 9307 strlt r3, [sp, #28]
  58024. 8018092: bfb8 it lt
  58025. 8018094: 9204 strlt r2, [sp, #16]
  58026. 8018096: 7823 ldrb r3, [r4, #0]
  58027. 8018098: 2b2e cmp r3, #46 @ 0x2e
  58028. 801809a: d10a bne.n 80180b2 <_vfiprintf_r+0x156>
  58029. 801809c: 7863 ldrb r3, [r4, #1]
  58030. 801809e: 2b2a cmp r3, #42 @ 0x2a
  58031. 80180a0: d132 bne.n 8018108 <_vfiprintf_r+0x1ac>
  58032. 80180a2: 9b03 ldr r3, [sp, #12]
  58033. 80180a4: 1d1a adds r2, r3, #4
  58034. 80180a6: 681b ldr r3, [r3, #0]
  58035. 80180a8: 9203 str r2, [sp, #12]
  58036. 80180aa: ea43 73e3 orr.w r3, r3, r3, asr #31
  58037. 80180ae: 3402 adds r4, #2
  58038. 80180b0: 9305 str r3, [sp, #20]
  58039. 80180b2: f8df a0d4 ldr.w sl, [pc, #212] @ 8018188 <_vfiprintf_r+0x22c>
  58040. 80180b6: 7821 ldrb r1, [r4, #0]
  58041. 80180b8: 2203 movs r2, #3
  58042. 80180ba: 4650 mov r0, sl
  58043. 80180bc: f7e8 f910 bl 80002e0 <memchr>
  58044. 80180c0: b138 cbz r0, 80180d2 <_vfiprintf_r+0x176>
  58045. 80180c2: 9b04 ldr r3, [sp, #16]
  58046. 80180c4: eba0 000a sub.w r0, r0, sl
  58047. 80180c8: 2240 movs r2, #64 @ 0x40
  58048. 80180ca: 4082 lsls r2, r0
  58049. 80180cc: 4313 orrs r3, r2
  58050. 80180ce: 3401 adds r4, #1
  58051. 80180d0: 9304 str r3, [sp, #16]
  58052. 80180d2: f814 1b01 ldrb.w r1, [r4], #1
  58053. 80180d6: 4829 ldr r0, [pc, #164] @ (801817c <_vfiprintf_r+0x220>)
  58054. 80180d8: f88d 1028 strb.w r1, [sp, #40] @ 0x28
  58055. 80180dc: 2206 movs r2, #6
  58056. 80180de: f7e8 f8ff bl 80002e0 <memchr>
  58057. 80180e2: 2800 cmp r0, #0
  58058. 80180e4: d03f beq.n 8018166 <_vfiprintf_r+0x20a>
  58059. 80180e6: 4b26 ldr r3, [pc, #152] @ (8018180 <_vfiprintf_r+0x224>)
  58060. 80180e8: bb1b cbnz r3, 8018132 <_vfiprintf_r+0x1d6>
  58061. 80180ea: 9b03 ldr r3, [sp, #12]
  58062. 80180ec: 3307 adds r3, #7
  58063. 80180ee: f023 0307 bic.w r3, r3, #7
  58064. 80180f2: 3308 adds r3, #8
  58065. 80180f4: 9303 str r3, [sp, #12]
  58066. 80180f6: 9b09 ldr r3, [sp, #36] @ 0x24
  58067. 80180f8: 443b add r3, r7
  58068. 80180fa: 9309 str r3, [sp, #36] @ 0x24
  58069. 80180fc: e76a b.n 8017fd4 <_vfiprintf_r+0x78>
  58070. 80180fe: fb0c 3202 mla r2, ip, r2, r3
  58071. 8018102: 460c mov r4, r1
  58072. 8018104: 2001 movs r0, #1
  58073. 8018106: e7a8 b.n 801805a <_vfiprintf_r+0xfe>
  58074. 8018108: 2300 movs r3, #0
  58075. 801810a: 3401 adds r4, #1
  58076. 801810c: 9305 str r3, [sp, #20]
  58077. 801810e: 4619 mov r1, r3
  58078. 8018110: f04f 0c0a mov.w ip, #10
  58079. 8018114: 4620 mov r0, r4
  58080. 8018116: f810 2b01 ldrb.w r2, [r0], #1
  58081. 801811a: 3a30 subs r2, #48 @ 0x30
  58082. 801811c: 2a09 cmp r2, #9
  58083. 801811e: d903 bls.n 8018128 <_vfiprintf_r+0x1cc>
  58084. 8018120: 2b00 cmp r3, #0
  58085. 8018122: d0c6 beq.n 80180b2 <_vfiprintf_r+0x156>
  58086. 8018124: 9105 str r1, [sp, #20]
  58087. 8018126: e7c4 b.n 80180b2 <_vfiprintf_r+0x156>
  58088. 8018128: fb0c 2101 mla r1, ip, r1, r2
  58089. 801812c: 4604 mov r4, r0
  58090. 801812e: 2301 movs r3, #1
  58091. 8018130: e7f0 b.n 8018114 <_vfiprintf_r+0x1b8>
  58092. 8018132: ab03 add r3, sp, #12
  58093. 8018134: 9300 str r3, [sp, #0]
  58094. 8018136: 462a mov r2, r5
  58095. 8018138: 4b12 ldr r3, [pc, #72] @ (8018184 <_vfiprintf_r+0x228>)
  58096. 801813a: a904 add r1, sp, #16
  58097. 801813c: 4630 mov r0, r6
  58098. 801813e: f3af 8000 nop.w
  58099. 8018142: 4607 mov r7, r0
  58100. 8018144: 1c78 adds r0, r7, #1
  58101. 8018146: d1d6 bne.n 80180f6 <_vfiprintf_r+0x19a>
  58102. 8018148: 6e6b ldr r3, [r5, #100] @ 0x64
  58103. 801814a: 07d9 lsls r1, r3, #31
  58104. 801814c: d405 bmi.n 801815a <_vfiprintf_r+0x1fe>
  58105. 801814e: 89ab ldrh r3, [r5, #12]
  58106. 8018150: 059a lsls r2, r3, #22
  58107. 8018152: d402 bmi.n 801815a <_vfiprintf_r+0x1fe>
  58108. 8018154: 6da8 ldr r0, [r5, #88] @ 0x58
  58109. 8018156: f7ff fdcf bl 8017cf8 <__retarget_lock_release_recursive>
  58110. 801815a: 89ab ldrh r3, [r5, #12]
  58111. 801815c: 065b lsls r3, r3, #25
  58112. 801815e: f53f af1f bmi.w 8017fa0 <_vfiprintf_r+0x44>
  58113. 8018162: 9809 ldr r0, [sp, #36] @ 0x24
  58114. 8018164: e71e b.n 8017fa4 <_vfiprintf_r+0x48>
  58115. 8018166: ab03 add r3, sp, #12
  58116. 8018168: 9300 str r3, [sp, #0]
  58117. 801816a: 462a mov r2, r5
  58118. 801816c: 4b05 ldr r3, [pc, #20] @ (8018184 <_vfiprintf_r+0x228>)
  58119. 801816e: a904 add r1, sp, #16
  58120. 8018170: 4630 mov r0, r6
  58121. 8018172: f000 f879 bl 8018268 <_printf_i>
  58122. 8018176: e7e4 b.n 8018142 <_vfiprintf_r+0x1e6>
  58123. 8018178: 08018a08 .word 0x08018a08
  58124. 801817c: 08018a12 .word 0x08018a12
  58125. 8018180: 00000000 .word 0x00000000
  58126. 8018184: 08017f37 .word 0x08017f37
  58127. 8018188: 08018a0e .word 0x08018a0e
  58128. 0801818c <_printf_common>:
  58129. 801818c: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
  58130. 8018190: 4616 mov r6, r2
  58131. 8018192: 4698 mov r8, r3
  58132. 8018194: 688a ldr r2, [r1, #8]
  58133. 8018196: 690b ldr r3, [r1, #16]
  58134. 8018198: f8dd 9020 ldr.w r9, [sp, #32]
  58135. 801819c: 4293 cmp r3, r2
  58136. 801819e: bfb8 it lt
  58137. 80181a0: 4613 movlt r3, r2
  58138. 80181a2: 6033 str r3, [r6, #0]
  58139. 80181a4: f891 2043 ldrb.w r2, [r1, #67] @ 0x43
  58140. 80181a8: 4607 mov r7, r0
  58141. 80181aa: 460c mov r4, r1
  58142. 80181ac: b10a cbz r2, 80181b2 <_printf_common+0x26>
  58143. 80181ae: 3301 adds r3, #1
  58144. 80181b0: 6033 str r3, [r6, #0]
  58145. 80181b2: 6823 ldr r3, [r4, #0]
  58146. 80181b4: 0699 lsls r1, r3, #26
  58147. 80181b6: bf42 ittt mi
  58148. 80181b8: 6833 ldrmi r3, [r6, #0]
  58149. 80181ba: 3302 addmi r3, #2
  58150. 80181bc: 6033 strmi r3, [r6, #0]
  58151. 80181be: 6825 ldr r5, [r4, #0]
  58152. 80181c0: f015 0506 ands.w r5, r5, #6
  58153. 80181c4: d106 bne.n 80181d4 <_printf_common+0x48>
  58154. 80181c6: f104 0a19 add.w sl, r4, #25
  58155. 80181ca: 68e3 ldr r3, [r4, #12]
  58156. 80181cc: 6832 ldr r2, [r6, #0]
  58157. 80181ce: 1a9b subs r3, r3, r2
  58158. 80181d0: 42ab cmp r3, r5
  58159. 80181d2: dc26 bgt.n 8018222 <_printf_common+0x96>
  58160. 80181d4: f894 3043 ldrb.w r3, [r4, #67] @ 0x43
  58161. 80181d8: 6822 ldr r2, [r4, #0]
  58162. 80181da: 3b00 subs r3, #0
  58163. 80181dc: bf18 it ne
  58164. 80181de: 2301 movne r3, #1
  58165. 80181e0: 0692 lsls r2, r2, #26
  58166. 80181e2: d42b bmi.n 801823c <_printf_common+0xb0>
  58167. 80181e4: f104 0243 add.w r2, r4, #67 @ 0x43
  58168. 80181e8: 4641 mov r1, r8
  58169. 80181ea: 4638 mov r0, r7
  58170. 80181ec: 47c8 blx r9
  58171. 80181ee: 3001 adds r0, #1
  58172. 80181f0: d01e beq.n 8018230 <_printf_common+0xa4>
  58173. 80181f2: 6823 ldr r3, [r4, #0]
  58174. 80181f4: 6922 ldr r2, [r4, #16]
  58175. 80181f6: f003 0306 and.w r3, r3, #6
  58176. 80181fa: 2b04 cmp r3, #4
  58177. 80181fc: bf02 ittt eq
  58178. 80181fe: 68e5 ldreq r5, [r4, #12]
  58179. 8018200: 6833 ldreq r3, [r6, #0]
  58180. 8018202: 1aed subeq r5, r5, r3
  58181. 8018204: 68a3 ldr r3, [r4, #8]
  58182. 8018206: bf0c ite eq
  58183. 8018208: ea25 75e5 biceq.w r5, r5, r5, asr #31
  58184. 801820c: 2500 movne r5, #0
  58185. 801820e: 4293 cmp r3, r2
  58186. 8018210: bfc4 itt gt
  58187. 8018212: 1a9b subgt r3, r3, r2
  58188. 8018214: 18ed addgt r5, r5, r3
  58189. 8018216: 2600 movs r6, #0
  58190. 8018218: 341a adds r4, #26
  58191. 801821a: 42b5 cmp r5, r6
  58192. 801821c: d11a bne.n 8018254 <_printf_common+0xc8>
  58193. 801821e: 2000 movs r0, #0
  58194. 8018220: e008 b.n 8018234 <_printf_common+0xa8>
  58195. 8018222: 2301 movs r3, #1
  58196. 8018224: 4652 mov r2, sl
  58197. 8018226: 4641 mov r1, r8
  58198. 8018228: 4638 mov r0, r7
  58199. 801822a: 47c8 blx r9
  58200. 801822c: 3001 adds r0, #1
  58201. 801822e: d103 bne.n 8018238 <_printf_common+0xac>
  58202. 8018230: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff
  58203. 8018234: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
  58204. 8018238: 3501 adds r5, #1
  58205. 801823a: e7c6 b.n 80181ca <_printf_common+0x3e>
  58206. 801823c: 18e1 adds r1, r4, r3
  58207. 801823e: 1c5a adds r2, r3, #1
  58208. 8018240: 2030 movs r0, #48 @ 0x30
  58209. 8018242: f881 0043 strb.w r0, [r1, #67] @ 0x43
  58210. 8018246: 4422 add r2, r4
  58211. 8018248: f894 1045 ldrb.w r1, [r4, #69] @ 0x45
  58212. 801824c: f882 1043 strb.w r1, [r2, #67] @ 0x43
  58213. 8018250: 3302 adds r3, #2
  58214. 8018252: e7c7 b.n 80181e4 <_printf_common+0x58>
  58215. 8018254: 2301 movs r3, #1
  58216. 8018256: 4622 mov r2, r4
  58217. 8018258: 4641 mov r1, r8
  58218. 801825a: 4638 mov r0, r7
  58219. 801825c: 47c8 blx r9
  58220. 801825e: 3001 adds r0, #1
  58221. 8018260: d0e6 beq.n 8018230 <_printf_common+0xa4>
  58222. 8018262: 3601 adds r6, #1
  58223. 8018264: e7d9 b.n 801821a <_printf_common+0x8e>
  58224. ...
  58225. 08018268 <_printf_i>:
  58226. 8018268: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr}
  58227. 801826c: 7e0f ldrb r7, [r1, #24]
  58228. 801826e: 9e0c ldr r6, [sp, #48] @ 0x30
  58229. 8018270: 2f78 cmp r7, #120 @ 0x78
  58230. 8018272: 4691 mov r9, r2
  58231. 8018274: 4680 mov r8, r0
  58232. 8018276: 460c mov r4, r1
  58233. 8018278: 469a mov sl, r3
  58234. 801827a: f101 0243 add.w r2, r1, #67 @ 0x43
  58235. 801827e: d807 bhi.n 8018290 <_printf_i+0x28>
  58236. 8018280: 2f62 cmp r7, #98 @ 0x62
  58237. 8018282: d80a bhi.n 801829a <_printf_i+0x32>
  58238. 8018284: 2f00 cmp r7, #0
  58239. 8018286: f000 80d2 beq.w 801842e <_printf_i+0x1c6>
  58240. 801828a: 2f58 cmp r7, #88 @ 0x58
  58241. 801828c: f000 80b9 beq.w 8018402 <_printf_i+0x19a>
  58242. 8018290: f104 0642 add.w r6, r4, #66 @ 0x42
  58243. 8018294: f884 7042 strb.w r7, [r4, #66] @ 0x42
  58244. 8018298: e03a b.n 8018310 <_printf_i+0xa8>
  58245. 801829a: f1a7 0363 sub.w r3, r7, #99 @ 0x63
  58246. 801829e: 2b15 cmp r3, #21
  58247. 80182a0: d8f6 bhi.n 8018290 <_printf_i+0x28>
  58248. 80182a2: a101 add r1, pc, #4 @ (adr r1, 80182a8 <_printf_i+0x40>)
  58249. 80182a4: f851 f023 ldr.w pc, [r1, r3, lsl #2]
  58250. 80182a8: 08018301 .word 0x08018301
  58251. 80182ac: 08018315 .word 0x08018315
  58252. 80182b0: 08018291 .word 0x08018291
  58253. 80182b4: 08018291 .word 0x08018291
  58254. 80182b8: 08018291 .word 0x08018291
  58255. 80182bc: 08018291 .word 0x08018291
  58256. 80182c0: 08018315 .word 0x08018315
  58257. 80182c4: 08018291 .word 0x08018291
  58258. 80182c8: 08018291 .word 0x08018291
  58259. 80182cc: 08018291 .word 0x08018291
  58260. 80182d0: 08018291 .word 0x08018291
  58261. 80182d4: 08018415 .word 0x08018415
  58262. 80182d8: 0801833f .word 0x0801833f
  58263. 80182dc: 080183cf .word 0x080183cf
  58264. 80182e0: 08018291 .word 0x08018291
  58265. 80182e4: 08018291 .word 0x08018291
  58266. 80182e8: 08018437 .word 0x08018437
  58267. 80182ec: 08018291 .word 0x08018291
  58268. 80182f0: 0801833f .word 0x0801833f
  58269. 80182f4: 08018291 .word 0x08018291
  58270. 80182f8: 08018291 .word 0x08018291
  58271. 80182fc: 080183d7 .word 0x080183d7
  58272. 8018300: 6833 ldr r3, [r6, #0]
  58273. 8018302: 1d1a adds r2, r3, #4
  58274. 8018304: 681b ldr r3, [r3, #0]
  58275. 8018306: 6032 str r2, [r6, #0]
  58276. 8018308: f104 0642 add.w r6, r4, #66 @ 0x42
  58277. 801830c: f884 3042 strb.w r3, [r4, #66] @ 0x42
  58278. 8018310: 2301 movs r3, #1
  58279. 8018312: e09d b.n 8018450 <_printf_i+0x1e8>
  58280. 8018314: 6833 ldr r3, [r6, #0]
  58281. 8018316: 6820 ldr r0, [r4, #0]
  58282. 8018318: 1d19 adds r1, r3, #4
  58283. 801831a: 6031 str r1, [r6, #0]
  58284. 801831c: 0606 lsls r6, r0, #24
  58285. 801831e: d501 bpl.n 8018324 <_printf_i+0xbc>
  58286. 8018320: 681d ldr r5, [r3, #0]
  58287. 8018322: e003 b.n 801832c <_printf_i+0xc4>
  58288. 8018324: 0645 lsls r5, r0, #25
  58289. 8018326: d5fb bpl.n 8018320 <_printf_i+0xb8>
  58290. 8018328: f9b3 5000 ldrsh.w r5, [r3]
  58291. 801832c: 2d00 cmp r5, #0
  58292. 801832e: da03 bge.n 8018338 <_printf_i+0xd0>
  58293. 8018330: 232d movs r3, #45 @ 0x2d
  58294. 8018332: 426d negs r5, r5
  58295. 8018334: f884 3043 strb.w r3, [r4, #67] @ 0x43
  58296. 8018338: 4859 ldr r0, [pc, #356] @ (80184a0 <_printf_i+0x238>)
  58297. 801833a: 230a movs r3, #10
  58298. 801833c: e011 b.n 8018362 <_printf_i+0xfa>
  58299. 801833e: 6821 ldr r1, [r4, #0]
  58300. 8018340: 6833 ldr r3, [r6, #0]
  58301. 8018342: 0608 lsls r0, r1, #24
  58302. 8018344: f853 5b04 ldr.w r5, [r3], #4
  58303. 8018348: d402 bmi.n 8018350 <_printf_i+0xe8>
  58304. 801834a: 0649 lsls r1, r1, #25
  58305. 801834c: bf48 it mi
  58306. 801834e: b2ad uxthmi r5, r5
  58307. 8018350: 2f6f cmp r7, #111 @ 0x6f
  58308. 8018352: 4853 ldr r0, [pc, #332] @ (80184a0 <_printf_i+0x238>)
  58309. 8018354: 6033 str r3, [r6, #0]
  58310. 8018356: bf14 ite ne
  58311. 8018358: 230a movne r3, #10
  58312. 801835a: 2308 moveq r3, #8
  58313. 801835c: 2100 movs r1, #0
  58314. 801835e: f884 1043 strb.w r1, [r4, #67] @ 0x43
  58315. 8018362: 6866 ldr r6, [r4, #4]
  58316. 8018364: 60a6 str r6, [r4, #8]
  58317. 8018366: 2e00 cmp r6, #0
  58318. 8018368: bfa2 ittt ge
  58319. 801836a: 6821 ldrge r1, [r4, #0]
  58320. 801836c: f021 0104 bicge.w r1, r1, #4
  58321. 8018370: 6021 strge r1, [r4, #0]
  58322. 8018372: b90d cbnz r5, 8018378 <_printf_i+0x110>
  58323. 8018374: 2e00 cmp r6, #0
  58324. 8018376: d04b beq.n 8018410 <_printf_i+0x1a8>
  58325. 8018378: 4616 mov r6, r2
  58326. 801837a: fbb5 f1f3 udiv r1, r5, r3
  58327. 801837e: fb03 5711 mls r7, r3, r1, r5
  58328. 8018382: 5dc7 ldrb r7, [r0, r7]
  58329. 8018384: f806 7d01 strb.w r7, [r6, #-1]!
  58330. 8018388: 462f mov r7, r5
  58331. 801838a: 42bb cmp r3, r7
  58332. 801838c: 460d mov r5, r1
  58333. 801838e: d9f4 bls.n 801837a <_printf_i+0x112>
  58334. 8018390: 2b08 cmp r3, #8
  58335. 8018392: d10b bne.n 80183ac <_printf_i+0x144>
  58336. 8018394: 6823 ldr r3, [r4, #0]
  58337. 8018396: 07df lsls r7, r3, #31
  58338. 8018398: d508 bpl.n 80183ac <_printf_i+0x144>
  58339. 801839a: 6923 ldr r3, [r4, #16]
  58340. 801839c: 6861 ldr r1, [r4, #4]
  58341. 801839e: 4299 cmp r1, r3
  58342. 80183a0: bfde ittt le
  58343. 80183a2: 2330 movle r3, #48 @ 0x30
  58344. 80183a4: f806 3c01 strble.w r3, [r6, #-1]
  58345. 80183a8: f106 36ff addle.w r6, r6, #4294967295 @ 0xffffffff
  58346. 80183ac: 1b92 subs r2, r2, r6
  58347. 80183ae: 6122 str r2, [r4, #16]
  58348. 80183b0: f8cd a000 str.w sl, [sp]
  58349. 80183b4: 464b mov r3, r9
  58350. 80183b6: aa03 add r2, sp, #12
  58351. 80183b8: 4621 mov r1, r4
  58352. 80183ba: 4640 mov r0, r8
  58353. 80183bc: f7ff fee6 bl 801818c <_printf_common>
  58354. 80183c0: 3001 adds r0, #1
  58355. 80183c2: d14a bne.n 801845a <_printf_i+0x1f2>
  58356. 80183c4: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff
  58357. 80183c8: b004 add sp, #16
  58358. 80183ca: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
  58359. 80183ce: 6823 ldr r3, [r4, #0]
  58360. 80183d0: f043 0320 orr.w r3, r3, #32
  58361. 80183d4: 6023 str r3, [r4, #0]
  58362. 80183d6: 4833 ldr r0, [pc, #204] @ (80184a4 <_printf_i+0x23c>)
  58363. 80183d8: 2778 movs r7, #120 @ 0x78
  58364. 80183da: f884 7045 strb.w r7, [r4, #69] @ 0x45
  58365. 80183de: 6823 ldr r3, [r4, #0]
  58366. 80183e0: 6831 ldr r1, [r6, #0]
  58367. 80183e2: 061f lsls r7, r3, #24
  58368. 80183e4: f851 5b04 ldr.w r5, [r1], #4
  58369. 80183e8: d402 bmi.n 80183f0 <_printf_i+0x188>
  58370. 80183ea: 065f lsls r7, r3, #25
  58371. 80183ec: bf48 it mi
  58372. 80183ee: b2ad uxthmi r5, r5
  58373. 80183f0: 6031 str r1, [r6, #0]
  58374. 80183f2: 07d9 lsls r1, r3, #31
  58375. 80183f4: bf44 itt mi
  58376. 80183f6: f043 0320 orrmi.w r3, r3, #32
  58377. 80183fa: 6023 strmi r3, [r4, #0]
  58378. 80183fc: b11d cbz r5, 8018406 <_printf_i+0x19e>
  58379. 80183fe: 2310 movs r3, #16
  58380. 8018400: e7ac b.n 801835c <_printf_i+0xf4>
  58381. 8018402: 4827 ldr r0, [pc, #156] @ (80184a0 <_printf_i+0x238>)
  58382. 8018404: e7e9 b.n 80183da <_printf_i+0x172>
  58383. 8018406: 6823 ldr r3, [r4, #0]
  58384. 8018408: f023 0320 bic.w r3, r3, #32
  58385. 801840c: 6023 str r3, [r4, #0]
  58386. 801840e: e7f6 b.n 80183fe <_printf_i+0x196>
  58387. 8018410: 4616 mov r6, r2
  58388. 8018412: e7bd b.n 8018390 <_printf_i+0x128>
  58389. 8018414: 6833 ldr r3, [r6, #0]
  58390. 8018416: 6825 ldr r5, [r4, #0]
  58391. 8018418: 6961 ldr r1, [r4, #20]
  58392. 801841a: 1d18 adds r0, r3, #4
  58393. 801841c: 6030 str r0, [r6, #0]
  58394. 801841e: 062e lsls r6, r5, #24
  58395. 8018420: 681b ldr r3, [r3, #0]
  58396. 8018422: d501 bpl.n 8018428 <_printf_i+0x1c0>
  58397. 8018424: 6019 str r1, [r3, #0]
  58398. 8018426: e002 b.n 801842e <_printf_i+0x1c6>
  58399. 8018428: 0668 lsls r0, r5, #25
  58400. 801842a: d5fb bpl.n 8018424 <_printf_i+0x1bc>
  58401. 801842c: 8019 strh r1, [r3, #0]
  58402. 801842e: 2300 movs r3, #0
  58403. 8018430: 6123 str r3, [r4, #16]
  58404. 8018432: 4616 mov r6, r2
  58405. 8018434: e7bc b.n 80183b0 <_printf_i+0x148>
  58406. 8018436: 6833 ldr r3, [r6, #0]
  58407. 8018438: 1d1a adds r2, r3, #4
  58408. 801843a: 6032 str r2, [r6, #0]
  58409. 801843c: 681e ldr r6, [r3, #0]
  58410. 801843e: 6862 ldr r2, [r4, #4]
  58411. 8018440: 2100 movs r1, #0
  58412. 8018442: 4630 mov r0, r6
  58413. 8018444: f7e7 ff4c bl 80002e0 <memchr>
  58414. 8018448: b108 cbz r0, 801844e <_printf_i+0x1e6>
  58415. 801844a: 1b80 subs r0, r0, r6
  58416. 801844c: 6060 str r0, [r4, #4]
  58417. 801844e: 6863 ldr r3, [r4, #4]
  58418. 8018450: 6123 str r3, [r4, #16]
  58419. 8018452: 2300 movs r3, #0
  58420. 8018454: f884 3043 strb.w r3, [r4, #67] @ 0x43
  58421. 8018458: e7aa b.n 80183b0 <_printf_i+0x148>
  58422. 801845a: 6923 ldr r3, [r4, #16]
  58423. 801845c: 4632 mov r2, r6
  58424. 801845e: 4649 mov r1, r9
  58425. 8018460: 4640 mov r0, r8
  58426. 8018462: 47d0 blx sl
  58427. 8018464: 3001 adds r0, #1
  58428. 8018466: d0ad beq.n 80183c4 <_printf_i+0x15c>
  58429. 8018468: 6823 ldr r3, [r4, #0]
  58430. 801846a: 079b lsls r3, r3, #30
  58431. 801846c: d413 bmi.n 8018496 <_printf_i+0x22e>
  58432. 801846e: 68e0 ldr r0, [r4, #12]
  58433. 8018470: 9b03 ldr r3, [sp, #12]
  58434. 8018472: 4298 cmp r0, r3
  58435. 8018474: bfb8 it lt
  58436. 8018476: 4618 movlt r0, r3
  58437. 8018478: e7a6 b.n 80183c8 <_printf_i+0x160>
  58438. 801847a: 2301 movs r3, #1
  58439. 801847c: 4632 mov r2, r6
  58440. 801847e: 4649 mov r1, r9
  58441. 8018480: 4640 mov r0, r8
  58442. 8018482: 47d0 blx sl
  58443. 8018484: 3001 adds r0, #1
  58444. 8018486: d09d beq.n 80183c4 <_printf_i+0x15c>
  58445. 8018488: 3501 adds r5, #1
  58446. 801848a: 68e3 ldr r3, [r4, #12]
  58447. 801848c: 9903 ldr r1, [sp, #12]
  58448. 801848e: 1a5b subs r3, r3, r1
  58449. 8018490: 42ab cmp r3, r5
  58450. 8018492: dcf2 bgt.n 801847a <_printf_i+0x212>
  58451. 8018494: e7eb b.n 801846e <_printf_i+0x206>
  58452. 8018496: 2500 movs r5, #0
  58453. 8018498: f104 0619 add.w r6, r4, #25
  58454. 801849c: e7f5 b.n 801848a <_printf_i+0x222>
  58455. 801849e: bf00 nop
  58456. 80184a0: 08018a19 .word 0x08018a19
  58457. 80184a4: 08018a2a .word 0x08018a2a
  58458. 080184a8 <__sflush_r>:
  58459. 80184a8: f9b1 200c ldrsh.w r2, [r1, #12]
  58460. 80184ac: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
  58461. 80184b0: 0716 lsls r6, r2, #28
  58462. 80184b2: 4605 mov r5, r0
  58463. 80184b4: 460c mov r4, r1
  58464. 80184b6: d454 bmi.n 8018562 <__sflush_r+0xba>
  58465. 80184b8: 684b ldr r3, [r1, #4]
  58466. 80184ba: 2b00 cmp r3, #0
  58467. 80184bc: dc02 bgt.n 80184c4 <__sflush_r+0x1c>
  58468. 80184be: 6c0b ldr r3, [r1, #64] @ 0x40
  58469. 80184c0: 2b00 cmp r3, #0
  58470. 80184c2: dd48 ble.n 8018556 <__sflush_r+0xae>
  58471. 80184c4: 6ae6 ldr r6, [r4, #44] @ 0x2c
  58472. 80184c6: 2e00 cmp r6, #0
  58473. 80184c8: d045 beq.n 8018556 <__sflush_r+0xae>
  58474. 80184ca: 2300 movs r3, #0
  58475. 80184cc: f412 5280 ands.w r2, r2, #4096 @ 0x1000
  58476. 80184d0: 682f ldr r7, [r5, #0]
  58477. 80184d2: 6a21 ldr r1, [r4, #32]
  58478. 80184d4: 602b str r3, [r5, #0]
  58479. 80184d6: d030 beq.n 801853a <__sflush_r+0x92>
  58480. 80184d8: 6d62 ldr r2, [r4, #84] @ 0x54
  58481. 80184da: 89a3 ldrh r3, [r4, #12]
  58482. 80184dc: 0759 lsls r1, r3, #29
  58483. 80184de: d505 bpl.n 80184ec <__sflush_r+0x44>
  58484. 80184e0: 6863 ldr r3, [r4, #4]
  58485. 80184e2: 1ad2 subs r2, r2, r3
  58486. 80184e4: 6b63 ldr r3, [r4, #52] @ 0x34
  58487. 80184e6: b10b cbz r3, 80184ec <__sflush_r+0x44>
  58488. 80184e8: 6c23 ldr r3, [r4, #64] @ 0x40
  58489. 80184ea: 1ad2 subs r2, r2, r3
  58490. 80184ec: 2300 movs r3, #0
  58491. 80184ee: 6ae6 ldr r6, [r4, #44] @ 0x2c
  58492. 80184f0: 6a21 ldr r1, [r4, #32]
  58493. 80184f2: 4628 mov r0, r5
  58494. 80184f4: 47b0 blx r6
  58495. 80184f6: 1c43 adds r3, r0, #1
  58496. 80184f8: 89a3 ldrh r3, [r4, #12]
  58497. 80184fa: d106 bne.n 801850a <__sflush_r+0x62>
  58498. 80184fc: 6829 ldr r1, [r5, #0]
  58499. 80184fe: 291d cmp r1, #29
  58500. 8018500: d82b bhi.n 801855a <__sflush_r+0xb2>
  58501. 8018502: 4a2a ldr r2, [pc, #168] @ (80185ac <__sflush_r+0x104>)
  58502. 8018504: 410a asrs r2, r1
  58503. 8018506: 07d6 lsls r6, r2, #31
  58504. 8018508: d427 bmi.n 801855a <__sflush_r+0xb2>
  58505. 801850a: 2200 movs r2, #0
  58506. 801850c: 6062 str r2, [r4, #4]
  58507. 801850e: 04d9 lsls r1, r3, #19
  58508. 8018510: 6922 ldr r2, [r4, #16]
  58509. 8018512: 6022 str r2, [r4, #0]
  58510. 8018514: d504 bpl.n 8018520 <__sflush_r+0x78>
  58511. 8018516: 1c42 adds r2, r0, #1
  58512. 8018518: d101 bne.n 801851e <__sflush_r+0x76>
  58513. 801851a: 682b ldr r3, [r5, #0]
  58514. 801851c: b903 cbnz r3, 8018520 <__sflush_r+0x78>
  58515. 801851e: 6560 str r0, [r4, #84] @ 0x54
  58516. 8018520: 6b61 ldr r1, [r4, #52] @ 0x34
  58517. 8018522: 602f str r7, [r5, #0]
  58518. 8018524: b1b9 cbz r1, 8018556 <__sflush_r+0xae>
  58519. 8018526: f104 0344 add.w r3, r4, #68 @ 0x44
  58520. 801852a: 4299 cmp r1, r3
  58521. 801852c: d002 beq.n 8018534 <__sflush_r+0x8c>
  58522. 801852e: 4628 mov r0, r5
  58523. 8018530: f7ff fbf2 bl 8017d18 <_free_r>
  58524. 8018534: 2300 movs r3, #0
  58525. 8018536: 6363 str r3, [r4, #52] @ 0x34
  58526. 8018538: e00d b.n 8018556 <__sflush_r+0xae>
  58527. 801853a: 2301 movs r3, #1
  58528. 801853c: 4628 mov r0, r5
  58529. 801853e: 47b0 blx r6
  58530. 8018540: 4602 mov r2, r0
  58531. 8018542: 1c50 adds r0, r2, #1
  58532. 8018544: d1c9 bne.n 80184da <__sflush_r+0x32>
  58533. 8018546: 682b ldr r3, [r5, #0]
  58534. 8018548: 2b00 cmp r3, #0
  58535. 801854a: d0c6 beq.n 80184da <__sflush_r+0x32>
  58536. 801854c: 2b1d cmp r3, #29
  58537. 801854e: d001 beq.n 8018554 <__sflush_r+0xac>
  58538. 8018550: 2b16 cmp r3, #22
  58539. 8018552: d11e bne.n 8018592 <__sflush_r+0xea>
  58540. 8018554: 602f str r7, [r5, #0]
  58541. 8018556: 2000 movs r0, #0
  58542. 8018558: e022 b.n 80185a0 <__sflush_r+0xf8>
  58543. 801855a: f043 0340 orr.w r3, r3, #64 @ 0x40
  58544. 801855e: b21b sxth r3, r3
  58545. 8018560: e01b b.n 801859a <__sflush_r+0xf2>
  58546. 8018562: 690f ldr r7, [r1, #16]
  58547. 8018564: 2f00 cmp r7, #0
  58548. 8018566: d0f6 beq.n 8018556 <__sflush_r+0xae>
  58549. 8018568: 0793 lsls r3, r2, #30
  58550. 801856a: 680e ldr r6, [r1, #0]
  58551. 801856c: bf08 it eq
  58552. 801856e: 694b ldreq r3, [r1, #20]
  58553. 8018570: 600f str r7, [r1, #0]
  58554. 8018572: bf18 it ne
  58555. 8018574: 2300 movne r3, #0
  58556. 8018576: eba6 0807 sub.w r8, r6, r7
  58557. 801857a: 608b str r3, [r1, #8]
  58558. 801857c: f1b8 0f00 cmp.w r8, #0
  58559. 8018580: dde9 ble.n 8018556 <__sflush_r+0xae>
  58560. 8018582: 6a21 ldr r1, [r4, #32]
  58561. 8018584: 6aa6 ldr r6, [r4, #40] @ 0x28
  58562. 8018586: 4643 mov r3, r8
  58563. 8018588: 463a mov r2, r7
  58564. 801858a: 4628 mov r0, r5
  58565. 801858c: 47b0 blx r6
  58566. 801858e: 2800 cmp r0, #0
  58567. 8018590: dc08 bgt.n 80185a4 <__sflush_r+0xfc>
  58568. 8018592: f9b4 300c ldrsh.w r3, [r4, #12]
  58569. 8018596: f043 0340 orr.w r3, r3, #64 @ 0x40
  58570. 801859a: 81a3 strh r3, [r4, #12]
  58571. 801859c: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff
  58572. 80185a0: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
  58573. 80185a4: 4407 add r7, r0
  58574. 80185a6: eba8 0800 sub.w r8, r8, r0
  58575. 80185aa: e7e7 b.n 801857c <__sflush_r+0xd4>
  58576. 80185ac: dfbffffe .word 0xdfbffffe
  58577. 080185b0 <_fflush_r>:
  58578. 80185b0: b538 push {r3, r4, r5, lr}
  58579. 80185b2: 690b ldr r3, [r1, #16]
  58580. 80185b4: 4605 mov r5, r0
  58581. 80185b6: 460c mov r4, r1
  58582. 80185b8: b913 cbnz r3, 80185c0 <_fflush_r+0x10>
  58583. 80185ba: 2500 movs r5, #0
  58584. 80185bc: 4628 mov r0, r5
  58585. 80185be: bd38 pop {r3, r4, r5, pc}
  58586. 80185c0: b118 cbz r0, 80185ca <_fflush_r+0x1a>
  58587. 80185c2: 6a03 ldr r3, [r0, #32]
  58588. 80185c4: b90b cbnz r3, 80185ca <_fflush_r+0x1a>
  58589. 80185c6: f7ff fa3b bl 8017a40 <__sinit>
  58590. 80185ca: f9b4 300c ldrsh.w r3, [r4, #12]
  58591. 80185ce: 2b00 cmp r3, #0
  58592. 80185d0: d0f3 beq.n 80185ba <_fflush_r+0xa>
  58593. 80185d2: 6e62 ldr r2, [r4, #100] @ 0x64
  58594. 80185d4: 07d0 lsls r0, r2, #31
  58595. 80185d6: d404 bmi.n 80185e2 <_fflush_r+0x32>
  58596. 80185d8: 0599 lsls r1, r3, #22
  58597. 80185da: d402 bmi.n 80185e2 <_fflush_r+0x32>
  58598. 80185dc: 6da0 ldr r0, [r4, #88] @ 0x58
  58599. 80185de: f7ff fb8a bl 8017cf6 <__retarget_lock_acquire_recursive>
  58600. 80185e2: 4628 mov r0, r5
  58601. 80185e4: 4621 mov r1, r4
  58602. 80185e6: f7ff ff5f bl 80184a8 <__sflush_r>
  58603. 80185ea: 6e63 ldr r3, [r4, #100] @ 0x64
  58604. 80185ec: 07da lsls r2, r3, #31
  58605. 80185ee: 4605 mov r5, r0
  58606. 80185f0: d4e4 bmi.n 80185bc <_fflush_r+0xc>
  58607. 80185f2: 89a3 ldrh r3, [r4, #12]
  58608. 80185f4: 059b lsls r3, r3, #22
  58609. 80185f6: d4e1 bmi.n 80185bc <_fflush_r+0xc>
  58610. 80185f8: 6da0 ldr r0, [r4, #88] @ 0x58
  58611. 80185fa: f7ff fb7d bl 8017cf8 <__retarget_lock_release_recursive>
  58612. 80185fe: e7dd b.n 80185bc <_fflush_r+0xc>
  58613. 08018600 <__swbuf_r>:
  58614. 8018600: b5f8 push {r3, r4, r5, r6, r7, lr}
  58615. 8018602: 460e mov r6, r1
  58616. 8018604: 4614 mov r4, r2
  58617. 8018606: 4605 mov r5, r0
  58618. 8018608: b118 cbz r0, 8018612 <__swbuf_r+0x12>
  58619. 801860a: 6a03 ldr r3, [r0, #32]
  58620. 801860c: b90b cbnz r3, 8018612 <__swbuf_r+0x12>
  58621. 801860e: f7ff fa17 bl 8017a40 <__sinit>
  58622. 8018612: 69a3 ldr r3, [r4, #24]
  58623. 8018614: 60a3 str r3, [r4, #8]
  58624. 8018616: 89a3 ldrh r3, [r4, #12]
  58625. 8018618: 071a lsls r2, r3, #28
  58626. 801861a: d501 bpl.n 8018620 <__swbuf_r+0x20>
  58627. 801861c: 6923 ldr r3, [r4, #16]
  58628. 801861e: b943 cbnz r3, 8018632 <__swbuf_r+0x32>
  58629. 8018620: 4621 mov r1, r4
  58630. 8018622: 4628 mov r0, r5
  58631. 8018624: f000 f82a bl 801867c <__swsetup_r>
  58632. 8018628: b118 cbz r0, 8018632 <__swbuf_r+0x32>
  58633. 801862a: f04f 37ff mov.w r7, #4294967295 @ 0xffffffff
  58634. 801862e: 4638 mov r0, r7
  58635. 8018630: bdf8 pop {r3, r4, r5, r6, r7, pc}
  58636. 8018632: 6823 ldr r3, [r4, #0]
  58637. 8018634: 6922 ldr r2, [r4, #16]
  58638. 8018636: 1a98 subs r0, r3, r2
  58639. 8018638: 6963 ldr r3, [r4, #20]
  58640. 801863a: b2f6 uxtb r6, r6
  58641. 801863c: 4283 cmp r3, r0
  58642. 801863e: 4637 mov r7, r6
  58643. 8018640: dc05 bgt.n 801864e <__swbuf_r+0x4e>
  58644. 8018642: 4621 mov r1, r4
  58645. 8018644: 4628 mov r0, r5
  58646. 8018646: f7ff ffb3 bl 80185b0 <_fflush_r>
  58647. 801864a: 2800 cmp r0, #0
  58648. 801864c: d1ed bne.n 801862a <__swbuf_r+0x2a>
  58649. 801864e: 68a3 ldr r3, [r4, #8]
  58650. 8018650: 3b01 subs r3, #1
  58651. 8018652: 60a3 str r3, [r4, #8]
  58652. 8018654: 6823 ldr r3, [r4, #0]
  58653. 8018656: 1c5a adds r2, r3, #1
  58654. 8018658: 6022 str r2, [r4, #0]
  58655. 801865a: 701e strb r6, [r3, #0]
  58656. 801865c: 6962 ldr r2, [r4, #20]
  58657. 801865e: 1c43 adds r3, r0, #1
  58658. 8018660: 429a cmp r2, r3
  58659. 8018662: d004 beq.n 801866e <__swbuf_r+0x6e>
  58660. 8018664: 89a3 ldrh r3, [r4, #12]
  58661. 8018666: 07db lsls r3, r3, #31
  58662. 8018668: d5e1 bpl.n 801862e <__swbuf_r+0x2e>
  58663. 801866a: 2e0a cmp r6, #10
  58664. 801866c: d1df bne.n 801862e <__swbuf_r+0x2e>
  58665. 801866e: 4621 mov r1, r4
  58666. 8018670: 4628 mov r0, r5
  58667. 8018672: f7ff ff9d bl 80185b0 <_fflush_r>
  58668. 8018676: 2800 cmp r0, #0
  58669. 8018678: d0d9 beq.n 801862e <__swbuf_r+0x2e>
  58670. 801867a: e7d6 b.n 801862a <__swbuf_r+0x2a>
  58671. 0801867c <__swsetup_r>:
  58672. 801867c: b538 push {r3, r4, r5, lr}
  58673. 801867e: 4b29 ldr r3, [pc, #164] @ (8018724 <__swsetup_r+0xa8>)
  58674. 8018680: 4605 mov r5, r0
  58675. 8018682: 6818 ldr r0, [r3, #0]
  58676. 8018684: 460c mov r4, r1
  58677. 8018686: b118 cbz r0, 8018690 <__swsetup_r+0x14>
  58678. 8018688: 6a03 ldr r3, [r0, #32]
  58679. 801868a: b90b cbnz r3, 8018690 <__swsetup_r+0x14>
  58680. 801868c: f7ff f9d8 bl 8017a40 <__sinit>
  58681. 8018690: f9b4 300c ldrsh.w r3, [r4, #12]
  58682. 8018694: 0719 lsls r1, r3, #28
  58683. 8018696: d422 bmi.n 80186de <__swsetup_r+0x62>
  58684. 8018698: 06da lsls r2, r3, #27
  58685. 801869a: d407 bmi.n 80186ac <__swsetup_r+0x30>
  58686. 801869c: 2209 movs r2, #9
  58687. 801869e: 602a str r2, [r5, #0]
  58688. 80186a0: f043 0340 orr.w r3, r3, #64 @ 0x40
  58689. 80186a4: 81a3 strh r3, [r4, #12]
  58690. 80186a6: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff
  58691. 80186aa: e033 b.n 8018714 <__swsetup_r+0x98>
  58692. 80186ac: 0758 lsls r0, r3, #29
  58693. 80186ae: d512 bpl.n 80186d6 <__swsetup_r+0x5a>
  58694. 80186b0: 6b61 ldr r1, [r4, #52] @ 0x34
  58695. 80186b2: b141 cbz r1, 80186c6 <__swsetup_r+0x4a>
  58696. 80186b4: f104 0344 add.w r3, r4, #68 @ 0x44
  58697. 80186b8: 4299 cmp r1, r3
  58698. 80186ba: d002 beq.n 80186c2 <__swsetup_r+0x46>
  58699. 80186bc: 4628 mov r0, r5
  58700. 80186be: f7ff fb2b bl 8017d18 <_free_r>
  58701. 80186c2: 2300 movs r3, #0
  58702. 80186c4: 6363 str r3, [r4, #52] @ 0x34
  58703. 80186c6: 89a3 ldrh r3, [r4, #12]
  58704. 80186c8: f023 0324 bic.w r3, r3, #36 @ 0x24
  58705. 80186cc: 81a3 strh r3, [r4, #12]
  58706. 80186ce: 2300 movs r3, #0
  58707. 80186d0: 6063 str r3, [r4, #4]
  58708. 80186d2: 6923 ldr r3, [r4, #16]
  58709. 80186d4: 6023 str r3, [r4, #0]
  58710. 80186d6: 89a3 ldrh r3, [r4, #12]
  58711. 80186d8: f043 0308 orr.w r3, r3, #8
  58712. 80186dc: 81a3 strh r3, [r4, #12]
  58713. 80186de: 6923 ldr r3, [r4, #16]
  58714. 80186e0: b94b cbnz r3, 80186f6 <__swsetup_r+0x7a>
  58715. 80186e2: 89a3 ldrh r3, [r4, #12]
  58716. 80186e4: f403 7320 and.w r3, r3, #640 @ 0x280
  58717. 80186e8: f5b3 7f00 cmp.w r3, #512 @ 0x200
  58718. 80186ec: d003 beq.n 80186f6 <__swsetup_r+0x7a>
  58719. 80186ee: 4621 mov r1, r4
  58720. 80186f0: 4628 mov r0, r5
  58721. 80186f2: f000 f84f bl 8018794 <__smakebuf_r>
  58722. 80186f6: f9b4 300c ldrsh.w r3, [r4, #12]
  58723. 80186fa: f013 0201 ands.w r2, r3, #1
  58724. 80186fe: d00a beq.n 8018716 <__swsetup_r+0x9a>
  58725. 8018700: 2200 movs r2, #0
  58726. 8018702: 60a2 str r2, [r4, #8]
  58727. 8018704: 6962 ldr r2, [r4, #20]
  58728. 8018706: 4252 negs r2, r2
  58729. 8018708: 61a2 str r2, [r4, #24]
  58730. 801870a: 6922 ldr r2, [r4, #16]
  58731. 801870c: b942 cbnz r2, 8018720 <__swsetup_r+0xa4>
  58732. 801870e: f013 0080 ands.w r0, r3, #128 @ 0x80
  58733. 8018712: d1c5 bne.n 80186a0 <__swsetup_r+0x24>
  58734. 8018714: bd38 pop {r3, r4, r5, pc}
  58735. 8018716: 0799 lsls r1, r3, #30
  58736. 8018718: bf58 it pl
  58737. 801871a: 6962 ldrpl r2, [r4, #20]
  58738. 801871c: 60a2 str r2, [r4, #8]
  58739. 801871e: e7f4 b.n 801870a <__swsetup_r+0x8e>
  58740. 8018720: 2000 movs r0, #0
  58741. 8018722: e7f7 b.n 8018714 <__swsetup_r+0x98>
  58742. 8018724: 24000054 .word 0x24000054
  58743. 08018728 <_sbrk_r>:
  58744. 8018728: b538 push {r3, r4, r5, lr}
  58745. 801872a: 4d06 ldr r5, [pc, #24] @ (8018744 <_sbrk_r+0x1c>)
  58746. 801872c: 2300 movs r3, #0
  58747. 801872e: 4604 mov r4, r0
  58748. 8018730: 4608 mov r0, r1
  58749. 8018732: 602b str r3, [r5, #0]
  58750. 8018734: f7eb fca0 bl 8004078 <_sbrk>
  58751. 8018738: 1c43 adds r3, r0, #1
  58752. 801873a: d102 bne.n 8018742 <_sbrk_r+0x1a>
  58753. 801873c: 682b ldr r3, [r5, #0]
  58754. 801873e: b103 cbz r3, 8018742 <_sbrk_r+0x1a>
  58755. 8018740: 6023 str r3, [r4, #0]
  58756. 8018742: bd38 pop {r3, r4, r5, pc}
  58757. 8018744: 24012dd0 .word 0x24012dd0
  58758. 08018748 <__swhatbuf_r>:
  58759. 8018748: b570 push {r4, r5, r6, lr}
  58760. 801874a: 460c mov r4, r1
  58761. 801874c: f9b1 100e ldrsh.w r1, [r1, #14]
  58762. 8018750: 2900 cmp r1, #0
  58763. 8018752: b096 sub sp, #88 @ 0x58
  58764. 8018754: 4615 mov r5, r2
  58765. 8018756: 461e mov r6, r3
  58766. 8018758: da0d bge.n 8018776 <__swhatbuf_r+0x2e>
  58767. 801875a: 89a3 ldrh r3, [r4, #12]
  58768. 801875c: f013 0f80 tst.w r3, #128 @ 0x80
  58769. 8018760: f04f 0100 mov.w r1, #0
  58770. 8018764: bf14 ite ne
  58771. 8018766: 2340 movne r3, #64 @ 0x40
  58772. 8018768: f44f 6380 moveq.w r3, #1024 @ 0x400
  58773. 801876c: 2000 movs r0, #0
  58774. 801876e: 6031 str r1, [r6, #0]
  58775. 8018770: 602b str r3, [r5, #0]
  58776. 8018772: b016 add sp, #88 @ 0x58
  58777. 8018774: bd70 pop {r4, r5, r6, pc}
  58778. 8018776: 466a mov r2, sp
  58779. 8018778: f000 f848 bl 801880c <_fstat_r>
  58780. 801877c: 2800 cmp r0, #0
  58781. 801877e: dbec blt.n 801875a <__swhatbuf_r+0x12>
  58782. 8018780: 9901 ldr r1, [sp, #4]
  58783. 8018782: f401 4170 and.w r1, r1, #61440 @ 0xf000
  58784. 8018786: f5a1 5300 sub.w r3, r1, #8192 @ 0x2000
  58785. 801878a: 4259 negs r1, r3
  58786. 801878c: 4159 adcs r1, r3
  58787. 801878e: f44f 6380 mov.w r3, #1024 @ 0x400
  58788. 8018792: e7eb b.n 801876c <__swhatbuf_r+0x24>
  58789. 08018794 <__smakebuf_r>:
  58790. 8018794: 898b ldrh r3, [r1, #12]
  58791. 8018796: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr}
  58792. 8018798: 079d lsls r5, r3, #30
  58793. 801879a: 4606 mov r6, r0
  58794. 801879c: 460c mov r4, r1
  58795. 801879e: d507 bpl.n 80187b0 <__smakebuf_r+0x1c>
  58796. 80187a0: f104 0347 add.w r3, r4, #71 @ 0x47
  58797. 80187a4: 6023 str r3, [r4, #0]
  58798. 80187a6: 6123 str r3, [r4, #16]
  58799. 80187a8: 2301 movs r3, #1
  58800. 80187aa: 6163 str r3, [r4, #20]
  58801. 80187ac: b003 add sp, #12
  58802. 80187ae: bdf0 pop {r4, r5, r6, r7, pc}
  58803. 80187b0: ab01 add r3, sp, #4
  58804. 80187b2: 466a mov r2, sp
  58805. 80187b4: f7ff ffc8 bl 8018748 <__swhatbuf_r>
  58806. 80187b8: 9f00 ldr r7, [sp, #0]
  58807. 80187ba: 4605 mov r5, r0
  58808. 80187bc: 4639 mov r1, r7
  58809. 80187be: 4630 mov r0, r6
  58810. 80187c0: f7ff fb16 bl 8017df0 <_malloc_r>
  58811. 80187c4: b948 cbnz r0, 80187da <__smakebuf_r+0x46>
  58812. 80187c6: f9b4 300c ldrsh.w r3, [r4, #12]
  58813. 80187ca: 059a lsls r2, r3, #22
  58814. 80187cc: d4ee bmi.n 80187ac <__smakebuf_r+0x18>
  58815. 80187ce: f023 0303 bic.w r3, r3, #3
  58816. 80187d2: f043 0302 orr.w r3, r3, #2
  58817. 80187d6: 81a3 strh r3, [r4, #12]
  58818. 80187d8: e7e2 b.n 80187a0 <__smakebuf_r+0xc>
  58819. 80187da: 89a3 ldrh r3, [r4, #12]
  58820. 80187dc: 6020 str r0, [r4, #0]
  58821. 80187de: f043 0380 orr.w r3, r3, #128 @ 0x80
  58822. 80187e2: 81a3 strh r3, [r4, #12]
  58823. 80187e4: 9b01 ldr r3, [sp, #4]
  58824. 80187e6: e9c4 0704 strd r0, r7, [r4, #16]
  58825. 80187ea: b15b cbz r3, 8018804 <__smakebuf_r+0x70>
  58826. 80187ec: f9b4 100e ldrsh.w r1, [r4, #14]
  58827. 80187f0: 4630 mov r0, r6
  58828. 80187f2: f000 f81d bl 8018830 <_isatty_r>
  58829. 80187f6: b128 cbz r0, 8018804 <__smakebuf_r+0x70>
  58830. 80187f8: 89a3 ldrh r3, [r4, #12]
  58831. 80187fa: f023 0303 bic.w r3, r3, #3
  58832. 80187fe: f043 0301 orr.w r3, r3, #1
  58833. 8018802: 81a3 strh r3, [r4, #12]
  58834. 8018804: 89a3 ldrh r3, [r4, #12]
  58835. 8018806: 431d orrs r5, r3
  58836. 8018808: 81a5 strh r5, [r4, #12]
  58837. 801880a: e7cf b.n 80187ac <__smakebuf_r+0x18>
  58838. 0801880c <_fstat_r>:
  58839. 801880c: b538 push {r3, r4, r5, lr}
  58840. 801880e: 4d07 ldr r5, [pc, #28] @ (801882c <_fstat_r+0x20>)
  58841. 8018810: 2300 movs r3, #0
  58842. 8018812: 4604 mov r4, r0
  58843. 8018814: 4608 mov r0, r1
  58844. 8018816: 4611 mov r1, r2
  58845. 8018818: 602b str r3, [r5, #0]
  58846. 801881a: f7eb fc04 bl 8004026 <_fstat>
  58847. 801881e: 1c43 adds r3, r0, #1
  58848. 8018820: d102 bne.n 8018828 <_fstat_r+0x1c>
  58849. 8018822: 682b ldr r3, [r5, #0]
  58850. 8018824: b103 cbz r3, 8018828 <_fstat_r+0x1c>
  58851. 8018826: 6023 str r3, [r4, #0]
  58852. 8018828: bd38 pop {r3, r4, r5, pc}
  58853. 801882a: bf00 nop
  58854. 801882c: 24012dd0 .word 0x24012dd0
  58855. 08018830 <_isatty_r>:
  58856. 8018830: b538 push {r3, r4, r5, lr}
  58857. 8018832: 4d06 ldr r5, [pc, #24] @ (801884c <_isatty_r+0x1c>)
  58858. 8018834: 2300 movs r3, #0
  58859. 8018836: 4604 mov r4, r0
  58860. 8018838: 4608 mov r0, r1
  58861. 801883a: 602b str r3, [r5, #0]
  58862. 801883c: f7eb fc03 bl 8004046 <_isatty>
  58863. 8018840: 1c43 adds r3, r0, #1
  58864. 8018842: d102 bne.n 801884a <_isatty_r+0x1a>
  58865. 8018844: 682b ldr r3, [r5, #0]
  58866. 8018846: b103 cbz r3, 801884a <_isatty_r+0x1a>
  58867. 8018848: 6023 str r3, [r4, #0]
  58868. 801884a: bd38 pop {r3, r4, r5, pc}
  58869. 801884c: 24012dd0 .word 0x24012dd0
  58870. 08018850 <_init>:
  58871. 8018850: b5f8 push {r3, r4, r5, r6, r7, lr}
  58872. 8018852: bf00 nop
  58873. 8018854: bcf8 pop {r3, r4, r5, r6, r7}
  58874. 8018856: bc08 pop {r3}
  58875. 8018858: 469e mov lr, r3
  58876. 801885a: 4770 bx lr
  58877. 0801885c <_fini>:
  58878. 801885c: b5f8 push {r3, r4, r5, r6, r7, lr}
  58879. 801885e: bf00 nop
  58880. 8018860: bcf8 pop {r3, r4, r5, r6, r7}
  58881. 8018862: bc08 pop {r3}
  58882. 8018864: 469e mov lr, r3
  58883. 8018866: 4770 bx lr