OZE_Sensor.list 2.4 MB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841148421484314844148451484614847148481484914850148511485214853148541485514856148571485814859148601486114862148631486414865148661486714868148691487014871148721487314874148751487614877148781487914880148811488214883148841488514886148871488814889148901489114892148931489414895148961489714898148991490014901149021490314904149051490614907149081490914910149111491214913149141491514916149171491814919149201492114922149231492414925149261492714928149291493014931149321493314934149351493614937149381493914940149411494214943149441494514946149471494814949149501495114952149531495414955149561495714958149591496014961149621496314964149651496614967149681496914970149711497214973149741497514976149771497814979149801498114982149831498414985149861498714988149891499014991149921499314994149951499614997149981499915000150011500215003150041500515006150071500815009150101501115012150131501415015150161501715018150191502015021150221502315024150251502615027150281502915030150311503215033150341503515036150371503815039150401504115042150431504415045150461504715048150491505015051150521505315054150551505615057150581505915060150611506215063150641506515066150671506815069150701507115072150731507415075150761507715078150791508015081150821508315084150851508615087150881508915090150911509215093150941509515096150971509815099151001510115102151031510415105151061510715108151091511015111151121511315114151151511615117151181511915120151211512215123151241512515126151271512815129151301513115132151331513415135151361513715138151391514015141151421514315144151451514615147151481514915150151511515215153151541515515156151571515815159151601516115162151631516415165151661516715168151691517015171151721517315174151751517615177151781517915180151811518215183151841518515186151871518815189151901519115192151931519415195151961519715198151991520015201152021520315204152051520615207152081520915210152111521215213152141521515216152171521815219152201522115222152231522415225152261522715228152291523015231152321523315234152351523615237152381523915240152411524215243152441524515246152471524815249152501525115252152531525415255152561525715258152591526015261152621526315264152651526615267152681526915270152711527215273152741527515276152771527815279152801528115282152831528415285152861528715288152891529015291152921529315294152951529615297152981529915300153011530215303153041530515306153071530815309153101531115312153131531415315153161531715318153191532015321153221532315324153251532615327153281532915330153311533215333153341533515336153371533815339153401534115342153431534415345153461534715348153491535015351153521535315354153551535615357153581535915360153611536215363153641536515366153671536815369153701537115372153731537415375153761537715378153791538015381153821538315384153851538615387153881538915390153911539215393153941539515396153971539815399154001540115402154031540415405154061540715408154091541015411154121541315414154151541615417154181541915420154211542215423154241542515426154271542815429154301543115432154331543415435154361543715438154391544015441154421544315444154451544615447154481544915450154511545215453154541545515456154571545815459154601546115462154631546415465154661546715468154691547015471154721547315474154751547615477154781547915480154811548215483154841548515486154871548815489154901549115492154931549415495154961549715498154991550015501155021550315504155051550615507155081550915510155111551215513155141551515516155171551815519155201552115522155231552415525155261552715528155291553015531155321553315534155351553615537155381553915540155411554215543155441554515546155471554815549155501555115552155531555415555155561555715558155591556015561155621556315564155651556615567155681556915570155711557215573155741557515576155771557815579155801558115582155831558415585155861558715588155891559015591155921559315594155951559615597155981559915600156011560215603156041560515606156071560815609156101561115612156131561415615156161561715618156191562015621156221562315624156251562615627156281562915630156311563215633156341563515636156371563815639156401564115642156431564415645156461564715648156491565015651156521565315654156551565615657156581565915660156611566215663156641566515666156671566815669156701567115672156731567415675156761567715678156791568015681156821568315684156851568615687156881568915690156911569215693156941569515696156971569815699157001570115702157031570415705157061570715708157091571015711157121571315714157151571615717157181571915720157211572215723157241572515726157271572815729157301573115732157331573415735157361573715738157391574015741157421574315744157451574615747157481574915750157511575215753157541575515756157571575815759157601576115762157631576415765157661576715768157691577015771157721577315774157751577615777157781577915780157811578215783157841578515786157871578815789157901579115792157931579415795157961579715798157991580015801158021580315804158051580615807158081580915810158111581215813158141581515816158171581815819158201582115822158231582415825158261582715828158291583015831158321583315834158351583615837158381583915840158411584215843158441584515846158471584815849158501585115852158531585415855158561585715858158591586015861158621586315864158651586615867158681586915870158711587215873158741587515876158771587815879158801588115882158831588415885158861588715888158891589015891158921589315894158951589615897158981589915900159011590215903159041590515906159071590815909159101591115912159131591415915159161591715918159191592015921159221592315924159251592615927159281592915930159311593215933159341593515936159371593815939159401594115942159431594415945159461594715948159491595015951159521595315954159551595615957159581595915960159611596215963159641596515966159671596815969159701597115972159731597415975159761597715978159791598015981159821598315984159851598615987159881598915990159911599215993159941599515996159971599815999160001600116002160031600416005160061600716008160091601016011160121601316014160151601616017160181601916020160211602216023160241602516026160271602816029160301603116032160331603416035160361603716038160391604016041160421604316044160451604616047160481604916050160511605216053160541605516056160571605816059160601606116062160631606416065160661606716068160691607016071160721607316074160751607616077160781607916080160811608216083160841608516086160871608816089160901609116092160931609416095160961609716098160991610016101161021610316104161051610616107161081610916110161111611216113161141611516116161171611816119161201612116122161231612416125161261612716128161291613016131161321613316134161351613616137161381613916140161411614216143161441614516146161471614816149161501615116152161531615416155161561615716158161591616016161161621616316164161651616616167161681616916170161711617216173161741617516176161771617816179161801618116182161831618416185161861618716188161891619016191161921619316194161951619616197161981619916200162011620216203162041620516206162071620816209162101621116212162131621416215162161621716218162191622016221162221622316224162251622616227162281622916230162311623216233162341623516236162371623816239162401624116242162431624416245162461624716248162491625016251162521625316254162551625616257162581625916260162611626216263162641626516266162671626816269162701627116272162731627416275162761627716278162791628016281162821628316284162851628616287162881628916290162911629216293162941629516296162971629816299163001630116302163031630416305163061630716308163091631016311163121631316314163151631616317163181631916320163211632216323163241632516326163271632816329163301633116332163331633416335163361633716338163391634016341163421634316344163451634616347163481634916350163511635216353163541635516356163571635816359163601636116362163631636416365163661636716368163691637016371163721637316374163751637616377163781637916380163811638216383163841638516386163871638816389163901639116392163931639416395163961639716398163991640016401164021640316404164051640616407164081640916410164111641216413164141641516416164171641816419164201642116422164231642416425164261642716428164291643016431164321643316434164351643616437164381643916440164411644216443164441644516446164471644816449164501645116452164531645416455164561645716458164591646016461164621646316464164651646616467164681646916470164711647216473164741647516476164771647816479164801648116482164831648416485164861648716488164891649016491164921649316494164951649616497164981649916500165011650216503165041650516506165071650816509165101651116512165131651416515165161651716518165191652016521165221652316524165251652616527165281652916530165311653216533165341653516536165371653816539165401654116542165431654416545165461654716548165491655016551165521655316554165551655616557165581655916560165611656216563165641656516566165671656816569165701657116572165731657416575165761657716578165791658016581165821658316584165851658616587165881658916590165911659216593165941659516596165971659816599166001660116602166031660416605166061660716608166091661016611166121661316614166151661616617166181661916620166211662216623166241662516626166271662816629166301663116632166331663416635166361663716638166391664016641166421664316644166451664616647166481664916650166511665216653166541665516656166571665816659166601666116662166631666416665166661666716668166691667016671166721667316674166751667616677166781667916680166811668216683166841668516686166871668816689166901669116692166931669416695166961669716698166991670016701167021670316704167051670616707167081670916710167111671216713167141671516716167171671816719167201672116722167231672416725167261672716728167291673016731167321673316734167351673616737167381673916740167411674216743167441674516746167471674816749167501675116752167531675416755167561675716758167591676016761167621676316764167651676616767167681676916770167711677216773167741677516776167771677816779167801678116782167831678416785167861678716788167891679016791167921679316794167951679616797167981679916800168011680216803168041680516806168071680816809168101681116812168131681416815168161681716818168191682016821168221682316824168251682616827168281682916830168311683216833168341683516836168371683816839168401684116842168431684416845168461684716848168491685016851168521685316854168551685616857168581685916860168611686216863168641686516866168671686816869168701687116872168731687416875168761687716878168791688016881168821688316884168851688616887168881688916890168911689216893168941689516896168971689816899169001690116902169031690416905169061690716908169091691016911169121691316914169151691616917169181691916920169211692216923169241692516926169271692816929169301693116932169331693416935169361693716938169391694016941169421694316944169451694616947169481694916950169511695216953169541695516956169571695816959169601696116962169631696416965169661696716968169691697016971169721697316974169751697616977169781697916980169811698216983169841698516986169871698816989169901699116992169931699416995169961699716998169991700017001170021700317004170051700617007170081700917010170111701217013170141701517016170171701817019170201702117022170231702417025170261702717028170291703017031170321703317034170351703617037170381703917040170411704217043170441704517046170471704817049170501705117052170531705417055170561705717058170591706017061170621706317064170651706617067170681706917070170711707217073170741707517076170771707817079170801708117082170831708417085170861708717088170891709017091170921709317094170951709617097170981709917100171011710217103171041710517106171071710817109171101711117112171131711417115171161711717118171191712017121171221712317124171251712617127171281712917130171311713217133171341713517136171371713817139171401714117142171431714417145171461714717148171491715017151171521715317154171551715617157171581715917160171611716217163171641716517166171671716817169171701717117172171731717417175171761717717178171791718017181171821718317184171851718617187171881718917190171911719217193171941719517196171971719817199172001720117202172031720417205172061720717208172091721017211172121721317214172151721617217172181721917220172211722217223172241722517226172271722817229172301723117232172331723417235172361723717238172391724017241172421724317244172451724617247172481724917250172511725217253172541725517256172571725817259172601726117262172631726417265172661726717268172691727017271172721727317274172751727617277172781727917280172811728217283172841728517286172871728817289172901729117292172931729417295172961729717298172991730017301173021730317304173051730617307173081730917310173111731217313173141731517316173171731817319173201732117322173231732417325173261732717328173291733017331173321733317334173351733617337173381733917340173411734217343173441734517346173471734817349173501735117352173531735417355173561735717358173591736017361173621736317364173651736617367173681736917370173711737217373173741737517376173771737817379173801738117382173831738417385173861738717388173891739017391173921739317394173951739617397173981739917400174011740217403174041740517406174071740817409174101741117412174131741417415174161741717418174191742017421174221742317424174251742617427174281742917430174311743217433174341743517436174371743817439174401744117442174431744417445174461744717448174491745017451174521745317454174551745617457174581745917460174611746217463174641746517466174671746817469174701747117472174731747417475174761747717478174791748017481174821748317484174851748617487174881748917490174911749217493174941749517496174971749817499175001750117502175031750417505175061750717508175091751017511175121751317514175151751617517175181751917520175211752217523175241752517526175271752817529175301753117532175331753417535175361753717538175391754017541175421754317544175451754617547175481754917550175511755217553175541755517556175571755817559175601756117562175631756417565175661756717568175691757017571175721757317574175751757617577175781757917580175811758217583175841758517586175871758817589175901759117592175931759417595175961759717598175991760017601176021760317604176051760617607176081760917610176111761217613176141761517616176171761817619176201762117622176231762417625176261762717628176291763017631176321763317634176351763617637176381763917640176411764217643176441764517646176471764817649176501765117652176531765417655176561765717658176591766017661176621766317664176651766617667176681766917670176711767217673176741767517676176771767817679176801768117682176831768417685176861768717688176891769017691176921769317694176951769617697176981769917700177011770217703177041770517706177071770817709177101771117712177131771417715177161771717718177191772017721177221772317724177251772617727177281772917730177311773217733177341773517736177371773817739177401774117742177431774417745177461774717748177491775017751177521775317754177551775617757177581775917760177611776217763177641776517766177671776817769177701777117772177731777417775177761777717778177791778017781177821778317784177851778617787177881778917790177911779217793177941779517796177971779817799178001780117802178031780417805178061780717808178091781017811178121781317814178151781617817178181781917820178211782217823178241782517826178271782817829178301783117832178331783417835178361783717838178391784017841178421784317844178451784617847178481784917850178511785217853178541785517856178571785817859178601786117862178631786417865178661786717868178691787017871178721787317874178751787617877178781787917880178811788217883178841788517886178871788817889178901789117892178931789417895178961789717898178991790017901179021790317904179051790617907179081790917910179111791217913179141791517916179171791817919179201792117922179231792417925179261792717928179291793017931179321793317934179351793617937179381793917940179411794217943179441794517946179471794817949179501795117952179531795417955179561795717958179591796017961179621796317964179651796617967179681796917970179711797217973179741797517976179771797817979179801798117982179831798417985179861798717988179891799017991179921799317994179951799617997179981799918000180011800218003180041800518006180071800818009180101801118012180131801418015180161801718018180191802018021180221802318024180251802618027180281802918030180311803218033180341803518036180371803818039180401804118042180431804418045180461804718048180491805018051180521805318054180551805618057180581805918060180611806218063180641806518066180671806818069180701807118072180731807418075180761807718078180791808018081180821808318084180851808618087180881808918090180911809218093180941809518096180971809818099181001810118102181031810418105181061810718108181091811018111181121811318114181151811618117181181811918120181211812218123181241812518126181271812818129181301813118132181331813418135181361813718138181391814018141181421814318144181451814618147181481814918150181511815218153181541815518156181571815818159181601816118162181631816418165181661816718168181691817018171181721817318174181751817618177181781817918180181811818218183181841818518186181871818818189181901819118192181931819418195181961819718198181991820018201182021820318204182051820618207182081820918210182111821218213182141821518216182171821818219182201822118222182231822418225182261822718228182291823018231182321823318234182351823618237182381823918240182411824218243182441824518246182471824818249182501825118252182531825418255182561825718258182591826018261182621826318264182651826618267182681826918270182711827218273182741827518276182771827818279182801828118282182831828418285182861828718288182891829018291182921829318294182951829618297182981829918300183011830218303183041830518306183071830818309183101831118312183131831418315183161831718318183191832018321183221832318324183251832618327183281832918330183311833218333183341833518336183371833818339183401834118342183431834418345183461834718348183491835018351183521835318354183551835618357183581835918360183611836218363183641836518366183671836818369183701837118372183731837418375183761837718378183791838018381183821838318384183851838618387183881838918390183911839218393183941839518396183971839818399184001840118402184031840418405184061840718408184091841018411184121841318414184151841618417184181841918420184211842218423184241842518426184271842818429184301843118432184331843418435184361843718438184391844018441184421844318444184451844618447184481844918450184511845218453184541845518456184571845818459184601846118462184631846418465184661846718468184691847018471184721847318474184751847618477184781847918480184811848218483184841848518486184871848818489184901849118492184931849418495184961849718498184991850018501185021850318504185051850618507185081850918510185111851218513185141851518516185171851818519185201852118522185231852418525185261852718528185291853018531185321853318534185351853618537185381853918540185411854218543185441854518546185471854818549185501855118552185531855418555185561855718558185591856018561185621856318564185651856618567185681856918570185711857218573185741857518576185771857818579185801858118582185831858418585185861858718588185891859018591185921859318594185951859618597185981859918600186011860218603186041860518606186071860818609186101861118612186131861418615186161861718618186191862018621186221862318624186251862618627186281862918630186311863218633186341863518636186371863818639186401864118642186431864418645186461864718648186491865018651186521865318654186551865618657186581865918660186611866218663186641866518666186671866818669186701867118672186731867418675186761867718678186791868018681186821868318684186851868618687186881868918690186911869218693186941869518696186971869818699187001870118702187031870418705187061870718708187091871018711187121871318714187151871618717187181871918720187211872218723187241872518726187271872818729187301873118732187331873418735187361873718738187391874018741187421874318744187451874618747187481874918750187511875218753187541875518756187571875818759187601876118762187631876418765187661876718768187691877018771187721877318774187751877618777187781877918780187811878218783187841878518786187871878818789187901879118792187931879418795187961879718798187991880018801188021880318804188051880618807188081880918810188111881218813188141881518816188171881818819188201882118822188231882418825188261882718828188291883018831188321883318834188351883618837188381883918840188411884218843188441884518846188471884818849188501885118852188531885418855188561885718858188591886018861188621886318864188651886618867188681886918870188711887218873188741887518876188771887818879188801888118882188831888418885188861888718888188891889018891188921889318894188951889618897188981889918900189011890218903189041890518906189071890818909189101891118912189131891418915189161891718918189191892018921189221892318924189251892618927189281892918930189311893218933189341893518936189371893818939189401894118942189431894418945189461894718948189491895018951189521895318954189551895618957189581895918960189611896218963189641896518966189671896818969189701897118972189731897418975189761897718978189791898018981189821898318984189851898618987189881898918990189911899218993189941899518996189971899818999190001900119002190031900419005190061900719008190091901019011190121901319014190151901619017190181901919020190211902219023190241902519026190271902819029190301903119032190331903419035190361903719038190391904019041190421904319044190451904619047190481904919050190511905219053190541905519056190571905819059190601906119062190631906419065190661906719068190691907019071190721907319074190751907619077190781907919080190811908219083190841908519086190871908819089190901909119092190931909419095190961909719098190991910019101191021910319104191051910619107191081910919110191111911219113191141911519116191171911819119191201912119122191231912419125191261912719128191291913019131191321913319134191351913619137191381913919140191411914219143191441914519146191471914819149191501915119152191531915419155191561915719158191591916019161191621916319164191651916619167191681916919170191711917219173191741917519176191771917819179191801918119182191831918419185191861918719188191891919019191191921919319194191951919619197191981919919200192011920219203192041920519206192071920819209192101921119212192131921419215192161921719218192191922019221192221922319224192251922619227192281922919230192311923219233192341923519236192371923819239192401924119242192431924419245192461924719248192491925019251192521925319254192551925619257192581925919260192611926219263192641926519266192671926819269192701927119272192731927419275192761927719278192791928019281192821928319284192851928619287192881928919290192911929219293192941929519296192971929819299193001930119302193031930419305193061930719308193091931019311193121931319314193151931619317193181931919320193211932219323193241932519326193271932819329193301933119332193331933419335193361933719338193391934019341193421934319344193451934619347193481934919350193511935219353193541935519356193571935819359193601936119362193631936419365193661936719368193691937019371193721937319374193751937619377193781937919380193811938219383193841938519386193871938819389193901939119392193931939419395193961939719398193991940019401194021940319404194051940619407194081940919410194111941219413194141941519416194171941819419194201942119422194231942419425194261942719428194291943019431194321943319434194351943619437194381943919440194411944219443194441944519446194471944819449194501945119452194531945419455194561945719458194591946019461194621946319464194651946619467194681946919470194711947219473194741947519476194771947819479194801948119482194831948419485194861948719488194891949019491194921949319494194951949619497194981949919500195011950219503195041950519506195071950819509195101951119512195131951419515195161951719518195191952019521195221952319524195251952619527195281952919530195311953219533195341953519536195371953819539195401954119542195431954419545195461954719548195491955019551195521955319554195551955619557195581955919560195611956219563195641956519566195671956819569195701957119572195731957419575195761957719578195791958019581195821958319584195851958619587195881958919590195911959219593195941959519596195971959819599196001960119602196031960419605196061960719608196091961019611196121961319614196151961619617196181961919620196211962219623196241962519626196271962819629196301963119632196331963419635196361963719638196391964019641196421964319644196451964619647196481964919650196511965219653196541965519656196571965819659196601966119662196631966419665196661966719668196691967019671196721967319674196751967619677196781967919680196811968219683196841968519686196871968819689196901969119692196931969419695196961969719698196991970019701197021970319704197051970619707197081970919710197111971219713197141971519716197171971819719197201972119722197231972419725197261972719728197291973019731197321973319734197351973619737197381973919740197411974219743197441974519746197471974819749197501975119752197531975419755197561975719758197591976019761197621976319764197651976619767197681976919770197711977219773197741977519776197771977819779197801978119782197831978419785197861978719788197891979019791197921979319794197951979619797197981979919800198011980219803198041980519806198071980819809198101981119812198131981419815198161981719818198191982019821198221982319824198251982619827198281982919830198311983219833198341983519836198371983819839198401984119842198431984419845198461984719848198491985019851198521985319854198551985619857198581985919860198611986219863198641986519866198671986819869198701987119872198731987419875198761987719878198791988019881198821988319884198851988619887198881988919890198911989219893198941989519896198971989819899199001990119902199031990419905199061990719908199091991019911199121991319914199151991619917199181991919920199211992219923199241992519926199271992819929199301993119932199331993419935199361993719938199391994019941199421994319944199451994619947199481994919950199511995219953199541995519956199571995819959199601996119962199631996419965199661996719968199691997019971199721997319974199751997619977199781997919980199811998219983199841998519986199871998819989199901999119992199931999419995199961999719998199992000020001200022000320004200052000620007200082000920010200112001220013200142001520016200172001820019200202002120022200232002420025200262002720028200292003020031200322003320034200352003620037200382003920040200412004220043200442004520046200472004820049200502005120052200532005420055200562005720058200592006020061200622006320064200652006620067200682006920070200712007220073200742007520076200772007820079200802008120082200832008420085200862008720088200892009020091200922009320094200952009620097200982009920100201012010220103201042010520106201072010820109201102011120112201132011420115201162011720118201192012020121201222012320124201252012620127201282012920130201312013220133201342013520136201372013820139201402014120142201432014420145201462014720148201492015020151201522015320154201552015620157201582015920160201612016220163201642016520166201672016820169201702017120172201732017420175201762017720178201792018020181201822018320184201852018620187201882018920190201912019220193201942019520196201972019820199202002020120202202032020420205202062020720208202092021020211202122021320214202152021620217202182021920220202212022220223202242022520226202272022820229202302023120232202332023420235202362023720238202392024020241202422024320244202452024620247202482024920250202512025220253202542025520256202572025820259202602026120262202632026420265202662026720268202692027020271202722027320274202752027620277202782027920280202812028220283202842028520286202872028820289202902029120292202932029420295202962029720298202992030020301203022030320304203052030620307203082030920310203112031220313203142031520316203172031820319203202032120322203232032420325203262032720328203292033020331203322033320334203352033620337203382033920340203412034220343203442034520346203472034820349203502035120352203532035420355203562035720358203592036020361203622036320364203652036620367203682036920370203712037220373203742037520376203772037820379203802038120382203832038420385203862038720388203892039020391203922039320394203952039620397203982039920400204012040220403204042040520406204072040820409204102041120412204132041420415204162041720418204192042020421204222042320424204252042620427204282042920430204312043220433204342043520436204372043820439204402044120442204432044420445204462044720448204492045020451204522045320454204552045620457204582045920460204612046220463204642046520466204672046820469204702047120472204732047420475204762047720478204792048020481204822048320484204852048620487204882048920490204912049220493204942049520496204972049820499205002050120502205032050420505205062050720508205092051020511205122051320514205152051620517205182051920520205212052220523205242052520526205272052820529205302053120532205332053420535205362053720538205392054020541205422054320544205452054620547205482054920550205512055220553205542055520556205572055820559205602056120562205632056420565205662056720568205692057020571205722057320574205752057620577205782057920580205812058220583205842058520586205872058820589205902059120592205932059420595205962059720598205992060020601206022060320604206052060620607206082060920610206112061220613206142061520616206172061820619206202062120622206232062420625206262062720628206292063020631206322063320634206352063620637206382063920640206412064220643206442064520646206472064820649206502065120652206532065420655206562065720658206592066020661206622066320664206652066620667206682066920670206712067220673206742067520676206772067820679206802068120682206832068420685206862068720688206892069020691206922069320694206952069620697206982069920700207012070220703207042070520706207072070820709207102071120712207132071420715207162071720718207192072020721207222072320724207252072620727207282072920730207312073220733207342073520736207372073820739207402074120742207432074420745207462074720748207492075020751207522075320754207552075620757207582075920760207612076220763207642076520766207672076820769207702077120772207732077420775207762077720778207792078020781207822078320784207852078620787207882078920790207912079220793207942079520796207972079820799208002080120802208032080420805208062080720808208092081020811208122081320814208152081620817208182081920820208212082220823208242082520826208272082820829208302083120832208332083420835208362083720838208392084020841208422084320844208452084620847208482084920850208512085220853208542085520856208572085820859208602086120862208632086420865208662086720868208692087020871208722087320874208752087620877208782087920880208812088220883208842088520886208872088820889208902089120892208932089420895208962089720898208992090020901209022090320904209052090620907209082090920910209112091220913209142091520916209172091820919209202092120922209232092420925209262092720928209292093020931209322093320934209352093620937209382093920940209412094220943209442094520946209472094820949209502095120952209532095420955209562095720958209592096020961209622096320964209652096620967209682096920970209712097220973209742097520976209772097820979209802098120982209832098420985209862098720988209892099020991209922099320994209952099620997209982099921000210012100221003210042100521006210072100821009210102101121012210132101421015210162101721018210192102021021210222102321024210252102621027210282102921030210312103221033210342103521036210372103821039210402104121042210432104421045210462104721048210492105021051210522105321054210552105621057210582105921060210612106221063210642106521066210672106821069210702107121072210732107421075210762107721078210792108021081210822108321084210852108621087210882108921090210912109221093210942109521096210972109821099211002110121102211032110421105211062110721108211092111021111211122111321114211152111621117211182111921120211212112221123211242112521126211272112821129211302113121132211332113421135211362113721138211392114021141211422114321144211452114621147211482114921150211512115221153211542115521156211572115821159211602116121162211632116421165211662116721168211692117021171211722117321174211752117621177211782117921180211812118221183211842118521186211872118821189211902119121192211932119421195211962119721198211992120021201212022120321204212052120621207212082120921210212112121221213212142121521216212172121821219212202122121222212232122421225212262122721228212292123021231212322123321234212352123621237212382123921240212412124221243212442124521246212472124821249212502125121252212532125421255212562125721258212592126021261212622126321264212652126621267212682126921270212712127221273212742127521276212772127821279212802128121282212832128421285212862128721288212892129021291212922129321294212952129621297212982129921300213012130221303213042130521306213072130821309213102131121312213132131421315213162131721318213192132021321213222132321324213252132621327213282132921330213312133221333213342133521336213372133821339213402134121342213432134421345213462134721348213492135021351213522135321354213552135621357213582135921360213612136221363213642136521366213672136821369213702137121372213732137421375213762137721378213792138021381213822138321384213852138621387213882138921390213912139221393213942139521396213972139821399214002140121402214032140421405214062140721408214092141021411214122141321414214152141621417214182141921420214212142221423214242142521426214272142821429214302143121432214332143421435214362143721438214392144021441214422144321444214452144621447214482144921450214512145221453214542145521456214572145821459214602146121462214632146421465214662146721468214692147021471214722147321474214752147621477214782147921480214812148221483214842148521486214872148821489214902149121492214932149421495214962149721498214992150021501215022150321504215052150621507215082150921510215112151221513215142151521516215172151821519215202152121522215232152421525215262152721528215292153021531215322153321534215352153621537215382153921540215412154221543215442154521546215472154821549215502155121552215532155421555215562155721558215592156021561215622156321564215652156621567215682156921570215712157221573215742157521576215772157821579215802158121582215832158421585215862158721588215892159021591215922159321594215952159621597215982159921600216012160221603216042160521606216072160821609216102161121612216132161421615216162161721618216192162021621216222162321624216252162621627216282162921630216312163221633216342163521636216372163821639216402164121642216432164421645216462164721648216492165021651216522165321654216552165621657216582165921660216612166221663216642166521666216672166821669216702167121672216732167421675216762167721678216792168021681216822168321684216852168621687216882168921690216912169221693216942169521696216972169821699217002170121702217032170421705217062170721708217092171021711217122171321714217152171621717217182171921720217212172221723217242172521726217272172821729217302173121732217332173421735217362173721738217392174021741217422174321744217452174621747217482174921750217512175221753217542175521756217572175821759217602176121762217632176421765217662176721768217692177021771217722177321774217752177621777217782177921780217812178221783217842178521786217872178821789217902179121792217932179421795217962179721798217992180021801218022180321804218052180621807218082180921810218112181221813218142181521816218172181821819218202182121822218232182421825218262182721828218292183021831218322183321834218352183621837218382183921840218412184221843218442184521846218472184821849218502185121852218532185421855218562185721858218592186021861218622186321864218652186621867218682186921870218712187221873218742187521876218772187821879218802188121882218832188421885218862188721888218892189021891218922189321894218952189621897218982189921900219012190221903219042190521906219072190821909219102191121912219132191421915219162191721918219192192021921219222192321924219252192621927219282192921930219312193221933219342193521936219372193821939219402194121942219432194421945219462194721948219492195021951219522195321954219552195621957219582195921960219612196221963219642196521966219672196821969219702197121972219732197421975219762197721978219792198021981219822198321984219852198621987219882198921990219912199221993219942199521996219972199821999220002200122002220032200422005220062200722008220092201022011220122201322014220152201622017220182201922020220212202222023220242202522026220272202822029220302203122032220332203422035220362203722038220392204022041220422204322044220452204622047220482204922050220512205222053220542205522056220572205822059220602206122062220632206422065220662206722068220692207022071220722207322074220752207622077220782207922080220812208222083220842208522086220872208822089220902209122092220932209422095220962209722098220992210022101221022210322104221052210622107221082210922110221112211222113221142211522116221172211822119221202212122122221232212422125221262212722128221292213022131221322213322134221352213622137221382213922140221412214222143221442214522146221472214822149221502215122152221532215422155221562215722158221592216022161221622216322164221652216622167221682216922170221712217222173221742217522176221772217822179221802218122182221832218422185221862218722188221892219022191221922219322194221952219622197221982219922200222012220222203222042220522206222072220822209222102221122212222132221422215222162221722218222192222022221222222222322224222252222622227222282222922230222312223222233222342223522236222372223822239222402224122242222432224422245222462224722248222492225022251222522225322254222552225622257222582225922260222612226222263222642226522266222672226822269222702227122272222732227422275222762227722278222792228022281222822228322284222852228622287222882228922290222912229222293222942229522296222972229822299223002230122302223032230422305223062230722308223092231022311223122231322314223152231622317223182231922320223212232222323223242232522326223272232822329223302233122332223332233422335223362233722338223392234022341223422234322344223452234622347223482234922350223512235222353223542235522356223572235822359223602236122362223632236422365223662236722368223692237022371223722237322374223752237622377223782237922380223812238222383223842238522386223872238822389223902239122392223932239422395223962239722398223992240022401224022240322404224052240622407224082240922410224112241222413224142241522416224172241822419224202242122422224232242422425224262242722428224292243022431224322243322434224352243622437224382243922440224412244222443224442244522446224472244822449224502245122452224532245422455224562245722458224592246022461224622246322464224652246622467224682246922470224712247222473224742247522476224772247822479224802248122482224832248422485224862248722488224892249022491224922249322494224952249622497224982249922500225012250222503225042250522506225072250822509225102251122512225132251422515225162251722518225192252022521225222252322524225252252622527225282252922530225312253222533225342253522536225372253822539225402254122542225432254422545225462254722548225492255022551225522255322554225552255622557225582255922560225612256222563225642256522566225672256822569225702257122572225732257422575225762257722578225792258022581225822258322584225852258622587225882258922590225912259222593225942259522596225972259822599226002260122602226032260422605226062260722608226092261022611226122261322614226152261622617226182261922620226212262222623226242262522626226272262822629226302263122632226332263422635226362263722638226392264022641226422264322644226452264622647226482264922650226512265222653226542265522656226572265822659226602266122662226632266422665226662266722668226692267022671226722267322674226752267622677226782267922680226812268222683226842268522686226872268822689226902269122692226932269422695226962269722698226992270022701227022270322704227052270622707227082270922710227112271222713227142271522716227172271822719227202272122722227232272422725227262272722728227292273022731227322273322734227352273622737227382273922740227412274222743227442274522746227472274822749227502275122752227532275422755227562275722758227592276022761227622276322764227652276622767227682276922770227712277222773227742277522776227772277822779227802278122782227832278422785227862278722788227892279022791227922279322794227952279622797227982279922800228012280222803228042280522806228072280822809228102281122812228132281422815228162281722818228192282022821228222282322824228252282622827228282282922830228312283222833228342283522836228372283822839228402284122842228432284422845228462284722848228492285022851228522285322854228552285622857228582285922860228612286222863228642286522866228672286822869228702287122872228732287422875228762287722878228792288022881228822288322884228852288622887228882288922890228912289222893228942289522896228972289822899229002290122902229032290422905229062290722908229092291022911229122291322914229152291622917229182291922920229212292222923229242292522926229272292822929229302293122932229332293422935229362293722938229392294022941229422294322944229452294622947229482294922950229512295222953229542295522956229572295822959229602296122962229632296422965229662296722968229692297022971229722297322974229752297622977229782297922980229812298222983229842298522986229872298822989229902299122992229932299422995229962299722998229992300023001230022300323004230052300623007230082300923010230112301223013230142301523016230172301823019230202302123022230232302423025230262302723028230292303023031230322303323034230352303623037230382303923040230412304223043230442304523046230472304823049230502305123052230532305423055230562305723058230592306023061230622306323064230652306623067230682306923070230712307223073230742307523076230772307823079230802308123082230832308423085230862308723088230892309023091230922309323094230952309623097230982309923100231012310223103231042310523106231072310823109231102311123112231132311423115231162311723118231192312023121231222312323124231252312623127231282312923130231312313223133231342313523136231372313823139231402314123142231432314423145231462314723148231492315023151231522315323154231552315623157231582315923160231612316223163231642316523166231672316823169231702317123172231732317423175231762317723178231792318023181231822318323184231852318623187231882318923190231912319223193231942319523196231972319823199232002320123202232032320423205232062320723208232092321023211232122321323214232152321623217232182321923220232212322223223232242322523226232272322823229232302323123232232332323423235232362323723238232392324023241232422324323244232452324623247232482324923250232512325223253232542325523256232572325823259232602326123262232632326423265232662326723268232692327023271232722327323274232752327623277232782327923280232812328223283232842328523286232872328823289232902329123292232932329423295232962329723298232992330023301233022330323304233052330623307233082330923310233112331223313233142331523316233172331823319233202332123322233232332423325233262332723328233292333023331233322333323334233352333623337233382333923340233412334223343233442334523346233472334823349233502335123352233532335423355233562335723358233592336023361233622336323364233652336623367233682336923370233712337223373233742337523376233772337823379233802338123382233832338423385233862338723388233892339023391233922339323394233952339623397233982339923400234012340223403234042340523406234072340823409234102341123412234132341423415234162341723418234192342023421234222342323424234252342623427234282342923430234312343223433234342343523436234372343823439234402344123442234432344423445234462344723448234492345023451234522345323454234552345623457234582345923460234612346223463234642346523466234672346823469234702347123472234732347423475234762347723478234792348023481234822348323484234852348623487234882348923490234912349223493234942349523496234972349823499235002350123502235032350423505235062350723508235092351023511235122351323514235152351623517235182351923520235212352223523235242352523526235272352823529235302353123532235332353423535235362353723538235392354023541235422354323544235452354623547235482354923550235512355223553235542355523556235572355823559235602356123562235632356423565235662356723568235692357023571235722357323574235752357623577235782357923580235812358223583235842358523586235872358823589235902359123592235932359423595235962359723598235992360023601236022360323604236052360623607236082360923610236112361223613236142361523616236172361823619236202362123622236232362423625236262362723628236292363023631236322363323634236352363623637236382363923640236412364223643236442364523646236472364823649236502365123652236532365423655236562365723658236592366023661236622366323664236652366623667236682366923670236712367223673236742367523676236772367823679236802368123682236832368423685236862368723688236892369023691236922369323694236952369623697236982369923700237012370223703237042370523706237072370823709237102371123712237132371423715237162371723718237192372023721237222372323724237252372623727237282372923730237312373223733237342373523736237372373823739237402374123742237432374423745237462374723748237492375023751237522375323754237552375623757237582375923760237612376223763237642376523766237672376823769237702377123772237732377423775237762377723778237792378023781237822378323784237852378623787237882378923790237912379223793237942379523796237972379823799238002380123802238032380423805238062380723808238092381023811238122381323814238152381623817238182381923820238212382223823238242382523826238272382823829238302383123832238332383423835238362383723838238392384023841238422384323844238452384623847238482384923850238512385223853238542385523856238572385823859238602386123862238632386423865238662386723868238692387023871238722387323874238752387623877238782387923880238812388223883238842388523886238872388823889238902389123892238932389423895238962389723898238992390023901239022390323904239052390623907239082390923910239112391223913239142391523916239172391823919239202392123922239232392423925239262392723928239292393023931239322393323934239352393623937239382393923940239412394223943239442394523946239472394823949239502395123952239532395423955239562395723958239592396023961239622396323964239652396623967239682396923970239712397223973239742397523976239772397823979239802398123982239832398423985239862398723988239892399023991239922399323994239952399623997239982399924000240012400224003240042400524006240072400824009240102401124012240132401424015240162401724018240192402024021240222402324024240252402624027240282402924030240312403224033240342403524036240372403824039240402404124042240432404424045240462404724048240492405024051240522405324054240552405624057240582405924060240612406224063240642406524066240672406824069240702407124072240732407424075240762407724078240792408024081240822408324084240852408624087240882408924090240912409224093240942409524096240972409824099241002410124102241032410424105241062410724108241092411024111241122411324114241152411624117241182411924120241212412224123241242412524126241272412824129241302413124132241332413424135241362413724138241392414024141241422414324144241452414624147241482414924150241512415224153241542415524156241572415824159241602416124162241632416424165241662416724168241692417024171241722417324174241752417624177241782417924180241812418224183241842418524186241872418824189241902419124192241932419424195241962419724198241992420024201242022420324204242052420624207242082420924210242112421224213242142421524216242172421824219242202422124222242232422424225242262422724228242292423024231242322423324234242352423624237242382423924240242412424224243242442424524246242472424824249242502425124252242532425424255242562425724258242592426024261242622426324264242652426624267242682426924270242712427224273242742427524276242772427824279242802428124282242832428424285242862428724288242892429024291242922429324294242952429624297242982429924300243012430224303243042430524306243072430824309243102431124312243132431424315243162431724318243192432024321243222432324324243252432624327243282432924330243312433224333243342433524336243372433824339243402434124342243432434424345243462434724348243492435024351243522435324354243552435624357243582435924360243612436224363243642436524366243672436824369243702437124372243732437424375243762437724378243792438024381243822438324384243852438624387243882438924390243912439224393243942439524396243972439824399244002440124402244032440424405244062440724408244092441024411244122441324414244152441624417244182441924420244212442224423244242442524426244272442824429244302443124432244332443424435244362443724438244392444024441244422444324444244452444624447244482444924450244512445224453244542445524456244572445824459244602446124462244632446424465244662446724468244692447024471244722447324474244752447624477244782447924480244812448224483244842448524486244872448824489244902449124492244932449424495244962449724498244992450024501245022450324504245052450624507245082450924510245112451224513245142451524516245172451824519245202452124522245232452424525245262452724528245292453024531245322453324534245352453624537245382453924540245412454224543245442454524546245472454824549245502455124552245532455424555245562455724558245592456024561245622456324564245652456624567245682456924570245712457224573245742457524576245772457824579245802458124582245832458424585245862458724588245892459024591245922459324594245952459624597245982459924600246012460224603246042460524606246072460824609246102461124612246132461424615246162461724618246192462024621246222462324624246252462624627246282462924630246312463224633246342463524636246372463824639246402464124642246432464424645246462464724648246492465024651246522465324654246552465624657246582465924660246612466224663246642466524666246672466824669246702467124672246732467424675246762467724678246792468024681246822468324684246852468624687246882468924690246912469224693246942469524696246972469824699247002470124702247032470424705247062470724708247092471024711247122471324714247152471624717247182471924720247212472224723247242472524726247272472824729247302473124732247332473424735247362473724738247392474024741247422474324744247452474624747247482474924750247512475224753247542475524756247572475824759247602476124762247632476424765247662476724768247692477024771247722477324774247752477624777247782477924780247812478224783247842478524786247872478824789247902479124792247932479424795247962479724798247992480024801248022480324804248052480624807248082480924810248112481224813248142481524816248172481824819248202482124822248232482424825248262482724828248292483024831248322483324834248352483624837248382483924840248412484224843248442484524846248472484824849248502485124852248532485424855248562485724858248592486024861248622486324864248652486624867248682486924870248712487224873248742487524876248772487824879248802488124882248832488424885248862488724888248892489024891248922489324894248952489624897248982489924900249012490224903249042490524906249072490824909249102491124912249132491424915249162491724918249192492024921249222492324924249252492624927249282492924930249312493224933249342493524936249372493824939249402494124942249432494424945249462494724948249492495024951249522495324954249552495624957249582495924960249612496224963249642496524966249672496824969249702497124972249732497424975249762497724978249792498024981249822498324984249852498624987249882498924990249912499224993249942499524996249972499824999250002500125002250032500425005250062500725008250092501025011250122501325014250152501625017250182501925020250212502225023250242502525026250272502825029250302503125032250332503425035250362503725038250392504025041250422504325044250452504625047250482504925050250512505225053250542505525056250572505825059250602506125062250632506425065250662506725068250692507025071250722507325074250752507625077250782507925080250812508225083250842508525086250872508825089250902509125092250932509425095250962509725098250992510025101251022510325104251052510625107251082510925110251112511225113251142511525116251172511825119251202512125122251232512425125251262512725128251292513025131251322513325134251352513625137251382513925140251412514225143251442514525146251472514825149251502515125152251532515425155251562515725158251592516025161251622516325164251652516625167251682516925170251712517225173251742517525176251772517825179251802518125182251832518425185251862518725188251892519025191251922519325194251952519625197251982519925200252012520225203252042520525206252072520825209252102521125212252132521425215252162521725218252192522025221252222522325224252252522625227252282522925230252312523225233252342523525236252372523825239252402524125242252432524425245252462524725248252492525025251252522525325254252552525625257252582525925260252612526225263252642526525266252672526825269252702527125272252732527425275252762527725278252792528025281252822528325284252852528625287252882528925290252912529225293252942529525296252972529825299253002530125302253032530425305253062530725308253092531025311253122531325314253152531625317253182531925320253212532225323253242532525326253272532825329253302533125332253332533425335253362533725338253392534025341253422534325344253452534625347253482534925350253512535225353253542535525356253572535825359253602536125362253632536425365253662536725368253692537025371253722537325374253752537625377253782537925380253812538225383253842538525386253872538825389253902539125392253932539425395253962539725398253992540025401254022540325404254052540625407254082540925410254112541225413254142541525416254172541825419254202542125422254232542425425254262542725428254292543025431254322543325434254352543625437254382543925440254412544225443254442544525446254472544825449254502545125452254532545425455254562545725458254592546025461254622546325464254652546625467254682546925470254712547225473254742547525476254772547825479254802548125482254832548425485254862548725488254892549025491254922549325494254952549625497254982549925500255012550225503255042550525506255072550825509255102551125512255132551425515255162551725518255192552025521255222552325524255252552625527255282552925530255312553225533255342553525536255372553825539255402554125542255432554425545255462554725548255492555025551255522555325554255552555625557255582555925560255612556225563255642556525566255672556825569255702557125572255732557425575255762557725578255792558025581255822558325584255852558625587255882558925590255912559225593255942559525596255972559825599256002560125602256032560425605256062560725608256092561025611256122561325614256152561625617256182561925620256212562225623256242562525626256272562825629256302563125632256332563425635256362563725638256392564025641256422564325644256452564625647256482564925650256512565225653256542565525656256572565825659256602566125662256632566425665256662566725668256692567025671256722567325674256752567625677256782567925680256812568225683256842568525686256872568825689256902569125692256932569425695256962569725698256992570025701257022570325704257052570625707257082570925710257112571225713257142571525716257172571825719257202572125722257232572425725257262572725728257292573025731257322573325734257352573625737257382573925740257412574225743257442574525746257472574825749257502575125752257532575425755257562575725758257592576025761257622576325764257652576625767257682576925770257712577225773257742577525776257772577825779257802578125782257832578425785257862578725788257892579025791257922579325794257952579625797257982579925800258012580225803258042580525806258072580825809258102581125812258132581425815258162581725818258192582025821258222582325824258252582625827258282582925830258312583225833258342583525836258372583825839258402584125842258432584425845258462584725848258492585025851258522585325854258552585625857258582585925860258612586225863258642586525866258672586825869258702587125872258732587425875258762587725878258792588025881258822588325884258852588625887258882588925890258912589225893258942589525896258972589825899259002590125902259032590425905259062590725908259092591025911259122591325914259152591625917259182591925920259212592225923259242592525926259272592825929259302593125932259332593425935259362593725938259392594025941259422594325944259452594625947259482594925950259512595225953259542595525956259572595825959259602596125962259632596425965259662596725968259692597025971259722597325974259752597625977259782597925980259812598225983259842598525986259872598825989259902599125992259932599425995259962599725998259992600026001260022600326004260052600626007260082600926010260112601226013260142601526016260172601826019260202602126022260232602426025260262602726028260292603026031260322603326034260352603626037260382603926040260412604226043260442604526046260472604826049260502605126052260532605426055260562605726058260592606026061260622606326064260652606626067260682606926070260712607226073260742607526076260772607826079260802608126082260832608426085260862608726088260892609026091260922609326094260952609626097260982609926100261012610226103261042610526106261072610826109261102611126112261132611426115261162611726118261192612026121261222612326124261252612626127261282612926130261312613226133261342613526136261372613826139261402614126142261432614426145261462614726148261492615026151261522615326154261552615626157261582615926160261612616226163261642616526166261672616826169261702617126172261732617426175261762617726178261792618026181261822618326184261852618626187261882618926190261912619226193261942619526196261972619826199262002620126202262032620426205262062620726208262092621026211262122621326214262152621626217262182621926220262212622226223262242622526226262272622826229262302623126232262332623426235262362623726238262392624026241262422624326244262452624626247262482624926250262512625226253262542625526256262572625826259262602626126262262632626426265262662626726268262692627026271262722627326274262752627626277262782627926280262812628226283262842628526286262872628826289262902629126292262932629426295262962629726298262992630026301263022630326304263052630626307263082630926310263112631226313263142631526316263172631826319263202632126322263232632426325263262632726328263292633026331263322633326334263352633626337263382633926340263412634226343263442634526346263472634826349263502635126352263532635426355263562635726358263592636026361263622636326364263652636626367263682636926370263712637226373263742637526376263772637826379263802638126382263832638426385263862638726388263892639026391263922639326394263952639626397263982639926400264012640226403264042640526406264072640826409264102641126412264132641426415264162641726418264192642026421264222642326424264252642626427264282642926430264312643226433264342643526436264372643826439264402644126442264432644426445264462644726448264492645026451264522645326454264552645626457264582645926460264612646226463264642646526466264672646826469264702647126472264732647426475264762647726478264792648026481264822648326484264852648626487264882648926490264912649226493264942649526496264972649826499265002650126502265032650426505265062650726508265092651026511265122651326514265152651626517265182651926520265212652226523265242652526526265272652826529265302653126532265332653426535265362653726538265392654026541265422654326544265452654626547265482654926550265512655226553265542655526556265572655826559265602656126562265632656426565265662656726568265692657026571265722657326574265752657626577265782657926580265812658226583265842658526586265872658826589265902659126592265932659426595265962659726598265992660026601266022660326604266052660626607266082660926610266112661226613266142661526616266172661826619266202662126622266232662426625266262662726628266292663026631266322663326634266352663626637266382663926640266412664226643266442664526646266472664826649266502665126652266532665426655266562665726658266592666026661266622666326664266652666626667266682666926670266712667226673266742667526676266772667826679266802668126682266832668426685266862668726688266892669026691266922669326694266952669626697266982669926700267012670226703267042670526706267072670826709267102671126712267132671426715267162671726718267192672026721267222672326724267252672626727267282672926730267312673226733267342673526736267372673826739267402674126742267432674426745267462674726748267492675026751267522675326754267552675626757267582675926760267612676226763267642676526766267672676826769267702677126772267732677426775267762677726778267792678026781267822678326784267852678626787267882678926790267912679226793267942679526796267972679826799268002680126802268032680426805268062680726808268092681026811268122681326814268152681626817268182681926820268212682226823268242682526826268272682826829268302683126832268332683426835268362683726838268392684026841268422684326844268452684626847268482684926850268512685226853268542685526856268572685826859268602686126862268632686426865268662686726868268692687026871268722687326874268752687626877268782687926880268812688226883268842688526886268872688826889268902689126892268932689426895268962689726898268992690026901269022690326904269052690626907269082690926910269112691226913269142691526916269172691826919269202692126922269232692426925269262692726928269292693026931269322693326934269352693626937269382693926940269412694226943269442694526946269472694826949269502695126952269532695426955269562695726958269592696026961269622696326964269652696626967269682696926970269712697226973269742697526976269772697826979269802698126982269832698426985269862698726988269892699026991269922699326994269952699626997269982699927000270012700227003270042700527006270072700827009270102701127012270132701427015270162701727018270192702027021270222702327024270252702627027270282702927030270312703227033270342703527036270372703827039270402704127042270432704427045270462704727048270492705027051270522705327054270552705627057270582705927060270612706227063270642706527066270672706827069270702707127072270732707427075270762707727078270792708027081270822708327084270852708627087270882708927090270912709227093270942709527096270972709827099271002710127102271032710427105271062710727108271092711027111271122711327114271152711627117271182711927120271212712227123271242712527126271272712827129271302713127132271332713427135271362713727138271392714027141271422714327144271452714627147271482714927150271512715227153271542715527156271572715827159271602716127162271632716427165271662716727168271692717027171271722717327174271752717627177271782717927180271812718227183271842718527186271872718827189271902719127192271932719427195271962719727198271992720027201272022720327204272052720627207272082720927210272112721227213272142721527216272172721827219272202722127222272232722427225272262722727228272292723027231272322723327234272352723627237272382723927240272412724227243272442724527246272472724827249272502725127252272532725427255272562725727258272592726027261272622726327264272652726627267272682726927270272712727227273272742727527276272772727827279272802728127282272832728427285272862728727288272892729027291272922729327294272952729627297272982729927300273012730227303273042730527306273072730827309273102731127312273132731427315273162731727318273192732027321273222732327324273252732627327273282732927330273312733227333273342733527336273372733827339273402734127342273432734427345273462734727348273492735027351273522735327354273552735627357273582735927360273612736227363273642736527366273672736827369273702737127372273732737427375273762737727378273792738027381273822738327384273852738627387273882738927390273912739227393273942739527396273972739827399274002740127402274032740427405274062740727408274092741027411274122741327414274152741627417274182741927420274212742227423274242742527426274272742827429274302743127432274332743427435274362743727438274392744027441274422744327444274452744627447274482744927450274512745227453274542745527456274572745827459274602746127462274632746427465274662746727468274692747027471274722747327474274752747627477274782747927480274812748227483274842748527486274872748827489274902749127492274932749427495274962749727498274992750027501275022750327504275052750627507275082750927510275112751227513275142751527516275172751827519275202752127522275232752427525275262752727528275292753027531275322753327534275352753627537275382753927540275412754227543275442754527546275472754827549275502755127552275532755427555275562755727558275592756027561275622756327564275652756627567275682756927570275712757227573275742757527576275772757827579275802758127582275832758427585275862758727588275892759027591275922759327594275952759627597275982759927600276012760227603276042760527606276072760827609276102761127612276132761427615276162761727618276192762027621276222762327624276252762627627276282762927630276312763227633276342763527636276372763827639276402764127642276432764427645276462764727648276492765027651276522765327654276552765627657276582765927660276612766227663276642766527666276672766827669276702767127672276732767427675276762767727678276792768027681276822768327684276852768627687276882768927690276912769227693276942769527696276972769827699277002770127702277032770427705277062770727708277092771027711277122771327714277152771627717277182771927720277212772227723277242772527726277272772827729277302773127732277332773427735277362773727738277392774027741277422774327744277452774627747277482774927750277512775227753277542775527756277572775827759277602776127762277632776427765277662776727768277692777027771277722777327774277752777627777277782777927780277812778227783277842778527786277872778827789277902779127792277932779427795277962779727798277992780027801278022780327804278052780627807278082780927810278112781227813278142781527816278172781827819278202782127822278232782427825278262782727828278292783027831278322783327834278352783627837278382783927840278412784227843278442784527846278472784827849278502785127852278532785427855278562785727858278592786027861278622786327864278652786627867278682786927870278712787227873278742787527876278772787827879278802788127882278832788427885278862788727888278892789027891278922789327894278952789627897278982789927900279012790227903279042790527906279072790827909279102791127912279132791427915279162791727918279192792027921279222792327924279252792627927279282792927930279312793227933279342793527936279372793827939279402794127942279432794427945279462794727948279492795027951279522795327954279552795627957279582795927960279612796227963279642796527966279672796827969279702797127972279732797427975279762797727978279792798027981279822798327984279852798627987279882798927990279912799227993279942799527996279972799827999280002800128002280032800428005280062800728008280092801028011280122801328014280152801628017280182801928020280212802228023280242802528026280272802828029280302803128032280332803428035280362803728038280392804028041280422804328044280452804628047280482804928050280512805228053280542805528056280572805828059280602806128062280632806428065280662806728068280692807028071280722807328074280752807628077280782807928080280812808228083280842808528086280872808828089280902809128092280932809428095280962809728098280992810028101281022810328104281052810628107281082810928110281112811228113281142811528116281172811828119281202812128122281232812428125281262812728128281292813028131281322813328134281352813628137281382813928140281412814228143281442814528146281472814828149281502815128152281532815428155281562815728158281592816028161281622816328164281652816628167281682816928170281712817228173281742817528176281772817828179281802818128182281832818428185281862818728188281892819028191281922819328194281952819628197281982819928200282012820228203282042820528206282072820828209282102821128212282132821428215282162821728218282192822028221282222822328224282252822628227282282822928230282312823228233282342823528236282372823828239282402824128242282432824428245282462824728248282492825028251282522825328254282552825628257282582825928260282612826228263282642826528266282672826828269282702827128272282732827428275282762827728278282792828028281282822828328284282852828628287282882828928290282912829228293282942829528296282972829828299283002830128302283032830428305283062830728308283092831028311283122831328314283152831628317283182831928320283212832228323283242832528326283272832828329283302833128332283332833428335283362833728338283392834028341283422834328344283452834628347283482834928350283512835228353283542835528356283572835828359283602836128362283632836428365283662836728368283692837028371283722837328374283752837628377283782837928380283812838228383283842838528386283872838828389283902839128392283932839428395283962839728398283992840028401284022840328404284052840628407284082840928410284112841228413284142841528416284172841828419284202842128422284232842428425284262842728428284292843028431284322843328434284352843628437284382843928440284412844228443284442844528446284472844828449284502845128452284532845428455284562845728458284592846028461284622846328464284652846628467284682846928470284712847228473284742847528476284772847828479284802848128482284832848428485284862848728488284892849028491284922849328494284952849628497284982849928500285012850228503285042850528506285072850828509285102851128512285132851428515285162851728518285192852028521285222852328524285252852628527285282852928530285312853228533285342853528536285372853828539285402854128542285432854428545285462854728548285492855028551285522855328554285552855628557285582855928560285612856228563285642856528566285672856828569285702857128572285732857428575285762857728578285792858028581285822858328584285852858628587285882858928590285912859228593285942859528596285972859828599286002860128602286032860428605286062860728608286092861028611286122861328614286152861628617286182861928620286212862228623286242862528626286272862828629286302863128632286332863428635286362863728638286392864028641286422864328644286452864628647286482864928650286512865228653286542865528656286572865828659286602866128662286632866428665286662866728668286692867028671286722867328674286752867628677286782867928680286812868228683286842868528686286872868828689286902869128692286932869428695286962869728698286992870028701287022870328704287052870628707287082870928710287112871228713287142871528716287172871828719287202872128722287232872428725287262872728728287292873028731287322873328734287352873628737287382873928740287412874228743287442874528746287472874828749287502875128752287532875428755287562875728758287592876028761287622876328764287652876628767287682876928770287712877228773287742877528776287772877828779287802878128782287832878428785287862878728788287892879028791287922879328794287952879628797287982879928800288012880228803288042880528806288072880828809288102881128812288132881428815288162881728818288192882028821288222882328824288252882628827288282882928830288312883228833288342883528836288372883828839288402884128842288432884428845288462884728848288492885028851288522885328854288552885628857288582885928860288612886228863288642886528866288672886828869288702887128872288732887428875288762887728878288792888028881288822888328884288852888628887288882888928890288912889228893288942889528896288972889828899289002890128902289032890428905289062890728908289092891028911289122891328914289152891628917289182891928920289212892228923289242892528926289272892828929289302893128932289332893428935289362893728938289392894028941289422894328944289452894628947289482894928950289512895228953289542895528956289572895828959289602896128962289632896428965289662896728968289692897028971289722897328974289752897628977289782897928980289812898228983289842898528986289872898828989289902899128992289932899428995289962899728998289992900029001290022900329004290052900629007290082900929010290112901229013290142901529016290172901829019290202902129022290232902429025290262902729028290292903029031290322903329034290352903629037290382903929040290412904229043290442904529046290472904829049290502905129052290532905429055290562905729058290592906029061290622906329064290652906629067290682906929070290712907229073290742907529076290772907829079290802908129082290832908429085290862908729088290892909029091290922909329094290952909629097290982909929100291012910229103291042910529106291072910829109291102911129112291132911429115291162911729118291192912029121291222912329124291252912629127291282912929130291312913229133291342913529136291372913829139291402914129142291432914429145291462914729148291492915029151291522915329154291552915629157291582915929160291612916229163291642916529166291672916829169291702917129172291732917429175291762917729178291792918029181291822918329184291852918629187291882918929190291912919229193291942919529196291972919829199292002920129202292032920429205292062920729208292092921029211292122921329214292152921629217292182921929220292212922229223292242922529226292272922829229292302923129232292332923429235292362923729238292392924029241292422924329244292452924629247292482924929250292512925229253292542925529256292572925829259292602926129262292632926429265292662926729268292692927029271292722927329274292752927629277292782927929280292812928229283292842928529286292872928829289292902929129292292932929429295292962929729298292992930029301293022930329304293052930629307293082930929310293112931229313293142931529316293172931829319293202932129322293232932429325293262932729328293292933029331293322933329334293352933629337293382933929340293412934229343293442934529346293472934829349293502935129352293532935429355293562935729358293592936029361293622936329364293652936629367293682936929370293712937229373293742937529376293772937829379293802938129382293832938429385293862938729388293892939029391293922939329394293952939629397293982939929400294012940229403294042940529406294072940829409294102941129412294132941429415294162941729418294192942029421294222942329424294252942629427294282942929430294312943229433294342943529436294372943829439294402944129442294432944429445294462944729448294492945029451294522945329454294552945629457294582945929460294612946229463294642946529466294672946829469294702947129472294732947429475294762947729478294792948029481294822948329484294852948629487294882948929490294912949229493294942949529496294972949829499295002950129502295032950429505295062950729508295092951029511295122951329514295152951629517295182951929520295212952229523295242952529526295272952829529295302953129532295332953429535295362953729538295392954029541295422954329544295452954629547295482954929550295512955229553295542955529556295572955829559295602956129562295632956429565295662956729568295692957029571295722957329574295752957629577295782957929580295812958229583295842958529586295872958829589295902959129592295932959429595295962959729598295992960029601296022960329604296052960629607296082960929610296112961229613296142961529616296172961829619296202962129622296232962429625296262962729628296292963029631296322963329634296352963629637296382963929640296412964229643296442964529646296472964829649296502965129652296532965429655296562965729658296592966029661296622966329664296652966629667296682966929670296712967229673296742967529676296772967829679296802968129682296832968429685296862968729688296892969029691296922969329694296952969629697296982969929700297012970229703297042970529706297072970829709297102971129712297132971429715297162971729718297192972029721297222972329724297252972629727297282972929730297312973229733297342973529736297372973829739297402974129742297432974429745297462974729748297492975029751297522975329754297552975629757297582975929760297612976229763297642976529766297672976829769297702977129772297732977429775297762977729778297792978029781297822978329784297852978629787297882978929790297912979229793297942979529796297972979829799298002980129802298032980429805298062980729808298092981029811298122981329814298152981629817298182981929820298212982229823298242982529826298272982829829298302983129832298332983429835298362983729838298392984029841298422984329844298452984629847298482984929850298512985229853298542985529856298572985829859298602986129862298632986429865298662986729868298692987029871298722987329874298752987629877298782987929880298812988229883298842988529886298872988829889298902989129892298932989429895298962989729898298992990029901299022990329904299052990629907299082990929910299112991229913299142991529916299172991829919299202992129922299232992429925299262992729928299292993029931299322993329934299352993629937299382993929940299412994229943299442994529946299472994829949299502995129952299532995429955299562995729958299592996029961299622996329964299652996629967299682996929970299712997229973299742997529976299772997829979299802998129982299832998429985299862998729988299892999029991299922999329994299952999629997299982999930000300013000230003300043000530006300073000830009300103001130012300133001430015300163001730018300193002030021300223002330024300253002630027300283002930030300313003230033300343003530036300373003830039300403004130042300433004430045300463004730048300493005030051300523005330054300553005630057300583005930060300613006230063300643006530066300673006830069300703007130072300733007430075300763007730078300793008030081300823008330084300853008630087300883008930090300913009230093300943009530096300973009830099301003010130102301033010430105301063010730108301093011030111301123011330114301153011630117301183011930120301213012230123301243012530126301273012830129301303013130132301333013430135301363013730138301393014030141301423014330144301453014630147301483014930150301513015230153301543015530156301573015830159301603016130162301633016430165301663016730168301693017030171301723017330174301753017630177301783017930180301813018230183301843018530186301873018830189301903019130192301933019430195301963019730198301993020030201302023020330204302053020630207302083020930210302113021230213302143021530216302173021830219302203022130222302233022430225302263022730228302293023030231302323023330234302353023630237302383023930240302413024230243302443024530246302473024830249302503025130252302533025430255302563025730258302593026030261302623026330264302653026630267302683026930270302713027230273302743027530276302773027830279302803028130282302833028430285302863028730288302893029030291302923029330294302953029630297302983029930300303013030230303303043030530306303073030830309303103031130312303133031430315303163031730318303193032030321303223032330324303253032630327303283032930330303313033230333303343033530336303373033830339303403034130342303433034430345303463034730348303493035030351303523035330354303553035630357303583035930360303613036230363303643036530366303673036830369303703037130372303733037430375303763037730378303793038030381303823038330384303853038630387303883038930390303913039230393303943039530396303973039830399304003040130402304033040430405304063040730408304093041030411304123041330414304153041630417304183041930420304213042230423304243042530426304273042830429304303043130432304333043430435304363043730438304393044030441304423044330444304453044630447304483044930450304513045230453304543045530456304573045830459304603046130462304633046430465304663046730468304693047030471304723047330474304753047630477304783047930480304813048230483304843048530486304873048830489304903049130492304933049430495304963049730498304993050030501305023050330504305053050630507305083050930510305113051230513305143051530516305173051830519305203052130522305233052430525305263052730528305293053030531305323053330534305353053630537305383053930540305413054230543305443054530546305473054830549305503055130552305533055430555305563055730558305593056030561305623056330564305653056630567305683056930570305713057230573305743057530576305773057830579305803058130582305833058430585305863058730588305893059030591305923059330594305953059630597305983059930600306013060230603306043060530606306073060830609306103061130612306133061430615306163061730618306193062030621306223062330624306253062630627306283062930630306313063230633306343063530636306373063830639306403064130642306433064430645306463064730648306493065030651306523065330654306553065630657306583065930660306613066230663306643066530666306673066830669306703067130672306733067430675306763067730678306793068030681306823068330684306853068630687306883068930690306913069230693306943069530696306973069830699307003070130702307033070430705307063070730708307093071030711307123071330714307153071630717307183071930720307213072230723307243072530726307273072830729307303073130732307333073430735307363073730738307393074030741307423074330744307453074630747307483074930750307513075230753307543075530756307573075830759307603076130762307633076430765307663076730768307693077030771307723077330774307753077630777307783077930780307813078230783307843078530786307873078830789307903079130792307933079430795307963079730798307993080030801308023080330804308053080630807308083080930810308113081230813308143081530816308173081830819308203082130822308233082430825308263082730828308293083030831308323083330834308353083630837308383083930840308413084230843308443084530846308473084830849308503085130852308533085430855308563085730858308593086030861308623086330864308653086630867308683086930870308713087230873308743087530876308773087830879308803088130882308833088430885308863088730888308893089030891308923089330894308953089630897308983089930900309013090230903309043090530906309073090830909309103091130912309133091430915309163091730918309193092030921309223092330924309253092630927309283092930930309313093230933309343093530936309373093830939309403094130942309433094430945309463094730948309493095030951309523095330954309553095630957309583095930960309613096230963309643096530966309673096830969309703097130972309733097430975309763097730978309793098030981309823098330984309853098630987309883098930990309913099230993309943099530996309973099830999310003100131002310033100431005310063100731008310093101031011310123101331014310153101631017310183101931020310213102231023310243102531026310273102831029310303103131032310333103431035310363103731038310393104031041310423104331044310453104631047310483104931050310513105231053310543105531056310573105831059310603106131062310633106431065310663106731068310693107031071310723107331074310753107631077310783107931080310813108231083310843108531086310873108831089310903109131092310933109431095310963109731098310993110031101311023110331104311053110631107311083110931110311113111231113311143111531116311173111831119311203112131122311233112431125311263112731128311293113031131311323113331134311353113631137311383113931140311413114231143311443114531146311473114831149311503115131152311533115431155311563115731158311593116031161311623116331164311653116631167311683116931170311713117231173311743117531176311773117831179311803118131182311833118431185311863118731188311893119031191311923119331194311953119631197311983119931200312013120231203312043120531206312073120831209312103121131212312133121431215312163121731218312193122031221312223122331224312253122631227312283122931230312313123231233312343123531236312373123831239312403124131242312433124431245312463124731248312493125031251312523125331254312553125631257312583125931260312613126231263312643126531266312673126831269312703127131272312733127431275312763127731278312793128031281312823128331284312853128631287312883128931290312913129231293312943129531296312973129831299313003130131302313033130431305313063130731308313093131031311313123131331314313153131631317313183131931320313213132231323313243132531326313273132831329313303133131332313333133431335313363133731338313393134031341313423134331344313453134631347313483134931350313513135231353313543135531356313573135831359313603136131362313633136431365313663136731368313693137031371313723137331374313753137631377313783137931380313813138231383313843138531386313873138831389313903139131392313933139431395313963139731398313993140031401314023140331404314053140631407314083140931410314113141231413314143141531416314173141831419314203142131422314233142431425314263142731428314293143031431314323143331434314353143631437314383143931440314413144231443314443144531446314473144831449314503145131452314533145431455314563145731458314593146031461314623146331464314653146631467314683146931470314713147231473314743147531476314773147831479314803148131482314833148431485314863148731488314893149031491314923149331494314953149631497314983149931500315013150231503315043150531506315073150831509315103151131512315133151431515315163151731518315193152031521315223152331524315253152631527315283152931530315313153231533315343153531536315373153831539315403154131542315433154431545315463154731548315493155031551315523155331554315553155631557315583155931560315613156231563315643156531566315673156831569315703157131572315733157431575315763157731578315793158031581315823158331584315853158631587315883158931590315913159231593315943159531596315973159831599316003160131602316033160431605316063160731608316093161031611316123161331614316153161631617316183161931620316213162231623316243162531626316273162831629316303163131632316333163431635316363163731638316393164031641316423164331644316453164631647316483164931650316513165231653316543165531656316573165831659316603166131662316633166431665316663166731668316693167031671316723167331674316753167631677316783167931680316813168231683316843168531686316873168831689316903169131692316933169431695316963169731698316993170031701317023170331704317053170631707317083170931710317113171231713317143171531716317173171831719317203172131722317233172431725317263172731728317293173031731317323173331734317353173631737317383173931740317413174231743317443174531746317473174831749317503175131752317533175431755317563175731758317593176031761317623176331764317653176631767317683176931770317713177231773317743177531776317773177831779317803178131782317833178431785317863178731788317893179031791317923179331794317953179631797317983179931800318013180231803318043180531806318073180831809318103181131812318133181431815318163181731818318193182031821318223182331824318253182631827318283182931830318313183231833318343183531836318373183831839318403184131842318433184431845318463184731848318493185031851318523185331854318553185631857318583185931860318613186231863318643186531866318673186831869318703187131872318733187431875318763187731878318793188031881318823188331884318853188631887318883188931890318913189231893318943189531896318973189831899319003190131902319033190431905319063190731908319093191031911319123191331914319153191631917319183191931920319213192231923319243192531926319273192831929319303193131932319333193431935319363193731938319393194031941319423194331944319453194631947319483194931950319513195231953319543195531956319573195831959319603196131962319633196431965319663196731968319693197031971319723197331974319753197631977319783197931980319813198231983319843198531986319873198831989319903199131992319933199431995319963199731998319993200032001320023200332004320053200632007320083200932010320113201232013320143201532016320173201832019320203202132022320233202432025320263202732028320293203032031320323203332034320353203632037320383203932040320413204232043320443204532046320473204832049320503205132052320533205432055320563205732058320593206032061320623206332064320653206632067320683206932070320713207232073320743207532076320773207832079320803208132082320833208432085320863208732088320893209032091320923209332094320953209632097320983209932100321013210232103321043210532106321073210832109321103211132112321133211432115321163211732118321193212032121321223212332124321253212632127321283212932130321313213232133321343213532136321373213832139321403214132142321433214432145321463214732148321493215032151321523215332154321553215632157321583215932160321613216232163321643216532166321673216832169321703217132172321733217432175321763217732178321793218032181321823218332184321853218632187321883218932190321913219232193321943219532196321973219832199322003220132202322033220432205322063220732208322093221032211322123221332214322153221632217322183221932220322213222232223322243222532226322273222832229322303223132232322333223432235322363223732238322393224032241322423224332244322453224632247322483224932250322513225232253322543225532256322573225832259322603226132262322633226432265322663226732268322693227032271322723227332274322753227632277322783227932280322813228232283322843228532286322873228832289322903229132292322933229432295322963229732298322993230032301323023230332304323053230632307323083230932310323113231232313323143231532316323173231832319323203232132322323233232432325323263232732328323293233032331323323233332334323353233632337323383233932340323413234232343323443234532346323473234832349323503235132352323533235432355323563235732358323593236032361323623236332364323653236632367323683236932370323713237232373323743237532376323773237832379323803238132382323833238432385323863238732388323893239032391323923239332394323953239632397323983239932400324013240232403324043240532406324073240832409324103241132412324133241432415324163241732418324193242032421324223242332424324253242632427324283242932430324313243232433324343243532436324373243832439324403244132442324433244432445324463244732448324493245032451324523245332454324553245632457324583245932460324613246232463324643246532466324673246832469324703247132472324733247432475324763247732478324793248032481324823248332484324853248632487324883248932490324913249232493324943249532496324973249832499325003250132502325033250432505325063250732508325093251032511325123251332514325153251632517325183251932520325213252232523325243252532526325273252832529325303253132532325333253432535325363253732538325393254032541325423254332544325453254632547325483254932550325513255232553325543255532556325573255832559325603256132562325633256432565325663256732568325693257032571325723257332574325753257632577325783257932580325813258232583325843258532586325873258832589325903259132592325933259432595325963259732598325993260032601326023260332604326053260632607326083260932610326113261232613326143261532616326173261832619326203262132622326233262432625326263262732628326293263032631326323263332634326353263632637326383263932640326413264232643326443264532646326473264832649326503265132652326533265432655326563265732658326593266032661326623266332664326653266632667326683266932670326713267232673326743267532676326773267832679326803268132682326833268432685326863268732688326893269032691326923269332694326953269632697326983269932700327013270232703327043270532706327073270832709327103271132712327133271432715327163271732718327193272032721327223272332724327253272632727327283272932730327313273232733327343273532736327373273832739327403274132742327433274432745327463274732748327493275032751327523275332754327553275632757327583275932760327613276232763327643276532766327673276832769327703277132772327733277432775327763277732778327793278032781327823278332784327853278632787327883278932790327913279232793327943279532796327973279832799328003280132802328033280432805328063280732808328093281032811328123281332814328153281632817328183281932820328213282232823328243282532826328273282832829328303283132832328333283432835328363283732838328393284032841328423284332844328453284632847328483284932850328513285232853328543285532856328573285832859328603286132862328633286432865328663286732868328693287032871328723287332874328753287632877328783287932880328813288232883328843288532886328873288832889328903289132892328933289432895328963289732898328993290032901329023290332904329053290632907329083290932910329113291232913329143291532916329173291832919329203292132922329233292432925329263292732928329293293032931329323293332934329353293632937329383293932940329413294232943329443294532946329473294832949329503295132952329533295432955329563295732958329593296032961329623296332964329653296632967329683296932970329713297232973329743297532976329773297832979329803298132982329833298432985329863298732988329893299032991329923299332994329953299632997329983299933000330013300233003330043300533006330073300833009330103301133012330133301433015330163301733018330193302033021330223302333024330253302633027330283302933030330313303233033330343303533036330373303833039330403304133042330433304433045330463304733048330493305033051330523305333054330553305633057330583305933060330613306233063330643306533066330673306833069330703307133072330733307433075330763307733078330793308033081330823308333084330853308633087330883308933090330913309233093330943309533096330973309833099331003310133102331033310433105331063310733108331093311033111331123311333114331153311633117331183311933120331213312233123331243312533126331273312833129331303313133132331333313433135331363313733138331393314033141331423314333144331453314633147331483314933150331513315233153331543315533156331573315833159331603316133162331633316433165331663316733168331693317033171331723317333174331753317633177331783317933180331813318233183331843318533186331873318833189331903319133192331933319433195331963319733198331993320033201332023320333204332053320633207332083320933210332113321233213332143321533216332173321833219332203322133222332233322433225332263322733228332293323033231332323323333234332353323633237332383323933240332413324233243332443324533246332473324833249332503325133252332533325433255332563325733258332593326033261332623326333264332653326633267332683326933270332713327233273332743327533276332773327833279332803328133282332833328433285332863328733288332893329033291332923329333294332953329633297332983329933300333013330233303333043330533306333073330833309333103331133312333133331433315333163331733318333193332033321333223332333324333253332633327333283332933330333313333233333333343333533336333373333833339333403334133342333433334433345333463334733348333493335033351333523335333354333553335633357333583335933360333613336233363333643336533366333673336833369333703337133372333733337433375333763337733378333793338033381333823338333384333853338633387333883338933390333913339233393333943339533396333973339833399334003340133402334033340433405334063340733408334093341033411334123341333414334153341633417334183341933420334213342233423334243342533426334273342833429334303343133432334333343433435334363343733438334393344033441334423344333444334453344633447334483344933450334513345233453334543345533456334573345833459334603346133462334633346433465334663346733468334693347033471334723347333474334753347633477334783347933480334813348233483334843348533486334873348833489334903349133492334933349433495334963349733498334993350033501335023350333504335053350633507335083350933510335113351233513335143351533516335173351833519335203352133522335233352433525335263352733528335293353033531335323353333534335353353633537335383353933540335413354233543335443354533546335473354833549335503355133552335533355433555335563355733558335593356033561335623356333564335653356633567335683356933570335713357233573335743357533576335773357833579335803358133582335833358433585335863358733588335893359033591335923359333594335953359633597335983359933600336013360233603336043360533606336073360833609336103361133612336133361433615336163361733618336193362033621336223362333624336253362633627336283362933630336313363233633336343363533636336373363833639336403364133642336433364433645336463364733648336493365033651336523365333654336553365633657336583365933660336613366233663336643366533666336673366833669336703367133672336733367433675336763367733678336793368033681336823368333684336853368633687336883368933690336913369233693336943369533696336973369833699337003370133702337033370433705337063370733708337093371033711337123371333714337153371633717337183371933720337213372233723337243372533726337273372833729337303373133732337333373433735337363373733738337393374033741337423374333744337453374633747337483374933750337513375233753337543375533756337573375833759337603376133762337633376433765337663376733768337693377033771337723377333774337753377633777337783377933780337813378233783337843378533786337873378833789337903379133792337933379433795337963379733798337993380033801338023380333804338053380633807338083380933810338113381233813338143381533816338173381833819338203382133822338233382433825338263382733828338293383033831338323383333834338353383633837338383383933840338413384233843338443384533846338473384833849338503385133852338533385433855338563385733858338593386033861338623386333864338653386633867338683386933870338713387233873338743387533876338773387833879338803388133882338833388433885338863388733888338893389033891338923389333894338953389633897338983389933900339013390233903339043390533906339073390833909339103391133912339133391433915339163391733918339193392033921339223392333924339253392633927339283392933930339313393233933339343393533936339373393833939339403394133942339433394433945339463394733948339493395033951339523395333954339553395633957339583395933960339613396233963339643396533966339673396833969339703397133972339733397433975339763397733978339793398033981339823398333984339853398633987339883398933990339913399233993339943399533996339973399833999340003400134002340033400434005340063400734008340093401034011340123401334014340153401634017340183401934020340213402234023340243402534026340273402834029340303403134032340333403434035340363403734038340393404034041340423404334044340453404634047340483404934050340513405234053340543405534056340573405834059340603406134062340633406434065340663406734068340693407034071340723407334074340753407634077340783407934080340813408234083340843408534086340873408834089340903409134092340933409434095340963409734098340993410034101341023410334104341053410634107341083410934110341113411234113341143411534116341173411834119341203412134122341233412434125341263412734128341293413034131341323413334134341353413634137341383413934140341413414234143341443414534146341473414834149341503415134152341533415434155341563415734158341593416034161341623416334164341653416634167341683416934170341713417234173341743417534176341773417834179341803418134182341833418434185341863418734188341893419034191341923419334194341953419634197341983419934200342013420234203342043420534206342073420834209342103421134212342133421434215342163421734218342193422034221342223422334224342253422634227342283422934230342313423234233342343423534236342373423834239342403424134242342433424434245342463424734248342493425034251342523425334254342553425634257342583425934260342613426234263342643426534266342673426834269342703427134272342733427434275342763427734278342793428034281342823428334284342853428634287342883428934290342913429234293342943429534296342973429834299343003430134302343033430434305343063430734308343093431034311343123431334314343153431634317343183431934320343213432234323343243432534326343273432834329343303433134332343333433434335343363433734338343393434034341343423434334344343453434634347343483434934350343513435234353343543435534356343573435834359343603436134362343633436434365343663436734368343693437034371343723437334374343753437634377343783437934380343813438234383343843438534386343873438834389343903439134392343933439434395343963439734398343993440034401344023440334404344053440634407344083440934410344113441234413344143441534416344173441834419344203442134422344233442434425344263442734428344293443034431344323443334434344353443634437344383443934440344413444234443344443444534446344473444834449344503445134452344533445434455344563445734458344593446034461344623446334464344653446634467344683446934470344713447234473344743447534476344773447834479344803448134482344833448434485344863448734488344893449034491344923449334494344953449634497344983449934500345013450234503345043450534506345073450834509345103451134512345133451434515345163451734518345193452034521345223452334524345253452634527345283452934530345313453234533345343453534536345373453834539345403454134542345433454434545345463454734548345493455034551345523455334554345553455634557345583455934560345613456234563345643456534566345673456834569345703457134572345733457434575345763457734578345793458034581345823458334584345853458634587345883458934590345913459234593345943459534596345973459834599346003460134602346033460434605346063460734608346093461034611346123461334614346153461634617346183461934620346213462234623346243462534626346273462834629346303463134632346333463434635346363463734638346393464034641346423464334644346453464634647346483464934650346513465234653346543465534656346573465834659346603466134662346633466434665346663466734668346693467034671346723467334674346753467634677346783467934680346813468234683346843468534686346873468834689346903469134692346933469434695346963469734698346993470034701347023470334704347053470634707347083470934710347113471234713347143471534716347173471834719347203472134722347233472434725347263472734728347293473034731347323473334734347353473634737347383473934740347413474234743347443474534746347473474834749347503475134752347533475434755347563475734758347593476034761347623476334764347653476634767347683476934770347713477234773347743477534776347773477834779347803478134782347833478434785347863478734788347893479034791347923479334794347953479634797347983479934800348013480234803348043480534806348073480834809348103481134812348133481434815348163481734818348193482034821348223482334824348253482634827348283482934830348313483234833348343483534836348373483834839348403484134842348433484434845348463484734848348493485034851348523485334854348553485634857348583485934860348613486234863348643486534866348673486834869348703487134872348733487434875348763487734878348793488034881348823488334884348853488634887348883488934890348913489234893348943489534896348973489834899349003490134902349033490434905349063490734908349093491034911349123491334914349153491634917349183491934920349213492234923349243492534926349273492834929349303493134932349333493434935349363493734938349393494034941349423494334944349453494634947349483494934950349513495234953349543495534956349573495834959349603496134962349633496434965349663496734968349693497034971349723497334974349753497634977349783497934980349813498234983349843498534986349873498834989349903499134992349933499434995349963499734998349993500035001350023500335004350053500635007350083500935010350113501235013350143501535016350173501835019350203502135022350233502435025350263502735028350293503035031350323503335034350353503635037350383503935040350413504235043350443504535046350473504835049350503505135052350533505435055350563505735058350593506035061350623506335064350653506635067350683506935070350713507235073350743507535076350773507835079350803508135082350833508435085350863508735088350893509035091350923509335094350953509635097350983509935100351013510235103351043510535106351073510835109351103511135112351133511435115351163511735118351193512035121351223512335124351253512635127351283512935130351313513235133351343513535136351373513835139351403514135142351433514435145351463514735148351493515035151351523515335154351553515635157351583515935160351613516235163351643516535166351673516835169351703517135172351733517435175351763517735178351793518035181351823518335184351853518635187351883518935190351913519235193351943519535196351973519835199352003520135202352033520435205352063520735208352093521035211352123521335214352153521635217352183521935220352213522235223352243522535226352273522835229352303523135232352333523435235352363523735238352393524035241352423524335244352453524635247352483524935250352513525235253352543525535256352573525835259352603526135262352633526435265352663526735268352693527035271352723527335274352753527635277352783527935280352813528235283352843528535286352873528835289352903529135292352933529435295352963529735298352993530035301353023530335304353053530635307353083530935310353113531235313353143531535316353173531835319353203532135322353233532435325353263532735328353293533035331353323533335334353353533635337353383533935340353413534235343353443534535346353473534835349353503535135352353533535435355353563535735358353593536035361353623536335364353653536635367353683536935370353713537235373353743537535376353773537835379353803538135382353833538435385353863538735388353893539035391353923539335394353953539635397353983539935400354013540235403354043540535406354073540835409354103541135412354133541435415354163541735418354193542035421354223542335424354253542635427354283542935430354313543235433354343543535436354373543835439354403544135442354433544435445354463544735448354493545035451354523545335454354553545635457354583545935460354613546235463354643546535466354673546835469354703547135472354733547435475354763547735478354793548035481354823548335484354853548635487354883548935490354913549235493354943549535496354973549835499355003550135502355033550435505355063550735508355093551035511355123551335514355153551635517355183551935520355213552235523355243552535526355273552835529355303553135532355333553435535355363553735538355393554035541355423554335544355453554635547355483554935550355513555235553355543555535556355573555835559355603556135562355633556435565355663556735568355693557035571355723557335574355753557635577355783557935580355813558235583355843558535586355873558835589355903559135592355933559435595355963559735598355993560035601356023560335604356053560635607356083560935610356113561235613356143561535616356173561835619356203562135622356233562435625356263562735628356293563035631356323563335634356353563635637356383563935640356413564235643356443564535646356473564835649356503565135652356533565435655356563565735658356593566035661356623566335664356653566635667356683566935670356713567235673356743567535676356773567835679356803568135682356833568435685356863568735688356893569035691356923569335694356953569635697356983569935700357013570235703357043570535706357073570835709357103571135712357133571435715357163571735718357193572035721357223572335724357253572635727357283572935730357313573235733357343573535736357373573835739357403574135742357433574435745357463574735748357493575035751357523575335754357553575635757357583575935760357613576235763357643576535766357673576835769357703577135772357733577435775357763577735778357793578035781357823578335784357853578635787357883578935790357913579235793357943579535796357973579835799358003580135802358033580435805358063580735808358093581035811358123581335814358153581635817358183581935820358213582235823358243582535826358273582835829358303583135832358333583435835358363583735838358393584035841358423584335844358453584635847358483584935850358513585235853358543585535856358573585835859358603586135862358633586435865358663586735868358693587035871358723587335874358753587635877358783587935880358813588235883358843588535886358873588835889358903589135892358933589435895358963589735898358993590035901359023590335904359053590635907359083590935910359113591235913359143591535916359173591835919359203592135922359233592435925359263592735928359293593035931359323593335934359353593635937359383593935940359413594235943359443594535946359473594835949359503595135952359533595435955359563595735958359593596035961359623596335964359653596635967359683596935970359713597235973359743597535976359773597835979359803598135982359833598435985359863598735988359893599035991359923599335994359953599635997359983599936000360013600236003360043600536006360073600836009360103601136012360133601436015360163601736018360193602036021360223602336024360253602636027360283602936030360313603236033360343603536036360373603836039360403604136042360433604436045360463604736048360493605036051360523605336054360553605636057360583605936060360613606236063360643606536066360673606836069360703607136072360733607436075360763607736078360793608036081360823608336084360853608636087360883608936090360913609236093360943609536096360973609836099361003610136102361033610436105361063610736108361093611036111361123611336114361153611636117361183611936120361213612236123361243612536126361273612836129361303613136132361333613436135361363613736138361393614036141361423614336144361453614636147361483614936150361513615236153361543615536156361573615836159361603616136162361633616436165361663616736168361693617036171361723617336174361753617636177361783617936180361813618236183361843618536186361873618836189361903619136192361933619436195361963619736198361993620036201362023620336204362053620636207362083620936210362113621236213362143621536216362173621836219362203622136222362233622436225362263622736228362293623036231362323623336234362353623636237362383623936240362413624236243362443624536246362473624836249362503625136252362533625436255362563625736258362593626036261362623626336264362653626636267362683626936270362713627236273362743627536276362773627836279362803628136282362833628436285362863628736288362893629036291362923629336294362953629636297362983629936300363013630236303363043630536306363073630836309363103631136312363133631436315363163631736318363193632036321363223632336324363253632636327363283632936330363313633236333363343633536336363373633836339363403634136342363433634436345363463634736348363493635036351363523635336354363553635636357363583635936360363613636236363363643636536366363673636836369363703637136372363733637436375363763637736378363793638036381363823638336384363853638636387363883638936390363913639236393363943639536396363973639836399364003640136402364033640436405364063640736408364093641036411364123641336414364153641636417364183641936420364213642236423364243642536426364273642836429364303643136432364333643436435364363643736438364393644036441364423644336444364453644636447364483644936450364513645236453364543645536456364573645836459364603646136462364633646436465364663646736468364693647036471364723647336474364753647636477364783647936480364813648236483364843648536486364873648836489364903649136492364933649436495364963649736498364993650036501365023650336504365053650636507365083650936510365113651236513365143651536516365173651836519365203652136522365233652436525365263652736528365293653036531365323653336534365353653636537365383653936540365413654236543365443654536546365473654836549365503655136552365533655436555365563655736558365593656036561365623656336564365653656636567365683656936570365713657236573365743657536576365773657836579365803658136582365833658436585365863658736588365893659036591365923659336594365953659636597365983659936600366013660236603366043660536606366073660836609366103661136612366133661436615366163661736618366193662036621366223662336624366253662636627366283662936630366313663236633366343663536636366373663836639366403664136642366433664436645366463664736648366493665036651366523665336654366553665636657366583665936660366613666236663366643666536666366673666836669366703667136672366733667436675366763667736678366793668036681366823668336684366853668636687366883668936690366913669236693366943669536696366973669836699367003670136702367033670436705367063670736708367093671036711367123671336714367153671636717367183671936720367213672236723367243672536726367273672836729367303673136732367333673436735367363673736738367393674036741367423674336744367453674636747367483674936750367513675236753367543675536756367573675836759367603676136762367633676436765367663676736768367693677036771367723677336774367753677636777367783677936780367813678236783367843678536786367873678836789367903679136792367933679436795367963679736798367993680036801368023680336804368053680636807368083680936810368113681236813368143681536816368173681836819368203682136822368233682436825368263682736828368293683036831368323683336834368353683636837368383683936840368413684236843368443684536846368473684836849368503685136852368533685436855368563685736858368593686036861368623686336864368653686636867368683686936870368713687236873368743687536876368773687836879368803688136882368833688436885368863688736888368893689036891368923689336894368953689636897368983689936900369013690236903369043690536906369073690836909369103691136912369133691436915369163691736918369193692036921369223692336924369253692636927369283692936930369313693236933369343693536936369373693836939369403694136942369433694436945369463694736948369493695036951369523695336954369553695636957369583695936960369613696236963369643696536966369673696836969369703697136972369733697436975369763697736978369793698036981369823698336984369853698636987369883698936990369913699236993369943699536996369973699836999370003700137002370033700437005370063700737008370093701037011370123701337014370153701637017370183701937020370213702237023370243702537026370273702837029370303703137032370333703437035370363703737038370393704037041370423704337044370453704637047370483704937050370513705237053370543705537056370573705837059370603706137062370633706437065370663706737068370693707037071370723707337074370753707637077370783707937080370813708237083370843708537086370873708837089370903709137092370933709437095370963709737098370993710037101371023710337104371053710637107371083710937110371113711237113371143711537116371173711837119371203712137122371233712437125371263712737128371293713037131371323713337134371353713637137371383713937140371413714237143371443714537146371473714837149371503715137152371533715437155371563715737158371593716037161371623716337164371653716637167371683716937170371713717237173371743717537176371773717837179371803718137182371833718437185371863718737188371893719037191371923719337194371953719637197371983719937200372013720237203372043720537206372073720837209372103721137212372133721437215372163721737218372193722037221372223722337224372253722637227372283722937230372313723237233372343723537236372373723837239372403724137242372433724437245372463724737248372493725037251372523725337254372553725637257372583725937260372613726237263372643726537266372673726837269372703727137272372733727437275372763727737278372793728037281372823728337284372853728637287372883728937290372913729237293372943729537296372973729837299373003730137302373033730437305373063730737308373093731037311373123731337314373153731637317373183731937320373213732237323373243732537326373273732837329373303733137332373333733437335373363733737338373393734037341373423734337344373453734637347373483734937350373513735237353373543735537356373573735837359373603736137362373633736437365373663736737368373693737037371373723737337374373753737637377373783737937380373813738237383373843738537386373873738837389373903739137392373933739437395373963739737398373993740037401374023740337404374053740637407374083740937410374113741237413374143741537416374173741837419374203742137422374233742437425374263742737428374293743037431374323743337434374353743637437374383743937440374413744237443374443744537446374473744837449374503745137452374533745437455374563745737458374593746037461374623746337464374653746637467374683746937470374713747237473374743747537476374773747837479374803748137482374833748437485374863748737488374893749037491374923749337494374953749637497374983749937500375013750237503375043750537506375073750837509375103751137512375133751437515375163751737518375193752037521375223752337524375253752637527375283752937530375313753237533375343753537536375373753837539375403754137542375433754437545375463754737548375493755037551375523755337554375553755637557375583755937560375613756237563375643756537566375673756837569375703757137572375733757437575375763757737578375793758037581375823758337584375853758637587375883758937590375913759237593375943759537596375973759837599376003760137602376033760437605376063760737608376093761037611376123761337614376153761637617376183761937620376213762237623376243762537626376273762837629376303763137632376333763437635376363763737638376393764037641376423764337644376453764637647376483764937650376513765237653376543765537656376573765837659376603766137662376633766437665376663766737668376693767037671376723767337674376753767637677376783767937680376813768237683376843768537686376873768837689376903769137692376933769437695376963769737698376993770037701377023770337704377053770637707377083770937710377113771237713377143771537716377173771837719377203772137722377233772437725377263772737728377293773037731377323773337734377353773637737377383773937740377413774237743377443774537746377473774837749377503775137752377533775437755377563775737758377593776037761377623776337764377653776637767377683776937770377713777237773377743777537776377773777837779377803778137782377833778437785377863778737788377893779037791377923779337794377953779637797377983779937800378013780237803378043780537806378073780837809378103781137812378133781437815378163781737818378193782037821378223782337824378253782637827378283782937830378313783237833378343783537836378373783837839378403784137842378433784437845378463784737848378493785037851378523785337854378553785637857378583785937860378613786237863378643786537866378673786837869378703787137872378733787437875378763787737878378793788037881378823788337884378853788637887378883788937890378913789237893378943789537896378973789837899379003790137902379033790437905379063790737908379093791037911379123791337914379153791637917379183791937920379213792237923379243792537926379273792837929379303793137932379333793437935379363793737938379393794037941379423794337944379453794637947379483794937950379513795237953379543795537956379573795837959379603796137962379633796437965379663796737968379693797037971379723797337974379753797637977379783797937980379813798237983379843798537986379873798837989379903799137992379933799437995379963799737998379993800038001380023800338004380053800638007380083800938010380113801238013380143801538016380173801838019380203802138022380233802438025380263802738028380293803038031380323803338034380353803638037380383803938040380413804238043380443804538046380473804838049380503805138052380533805438055380563805738058380593806038061380623806338064380653806638067380683806938070380713807238073380743807538076380773807838079380803808138082380833808438085380863808738088380893809038091380923809338094380953809638097380983809938100381013810238103381043810538106381073810838109381103811138112381133811438115381163811738118381193812038121381223812338124381253812638127381283812938130381313813238133381343813538136381373813838139381403814138142381433814438145381463814738148381493815038151381523815338154381553815638157381583815938160381613816238163381643816538166381673816838169381703817138172381733817438175381763817738178381793818038181381823818338184381853818638187381883818938190381913819238193381943819538196381973819838199382003820138202382033820438205382063820738208382093821038211382123821338214382153821638217382183821938220382213822238223382243822538226382273822838229382303823138232382333823438235382363823738238382393824038241382423824338244382453824638247382483824938250382513825238253382543825538256382573825838259382603826138262382633826438265382663826738268382693827038271382723827338274382753827638277382783827938280382813828238283382843828538286382873828838289382903829138292382933829438295382963829738298382993830038301383023830338304383053830638307383083830938310383113831238313383143831538316383173831838319383203832138322383233832438325383263832738328383293833038331383323833338334383353833638337383383833938340383413834238343383443834538346383473834838349383503835138352383533835438355383563835738358383593836038361383623836338364383653836638367383683836938370383713837238373383743837538376383773837838379383803838138382383833838438385383863838738388383893839038391383923839338394383953839638397383983839938400384013840238403384043840538406384073840838409384103841138412384133841438415384163841738418384193842038421384223842338424384253842638427384283842938430384313843238433384343843538436384373843838439384403844138442384433844438445384463844738448384493845038451384523845338454384553845638457384583845938460384613846238463384643846538466384673846838469384703847138472384733847438475384763847738478384793848038481384823848338484384853848638487384883848938490384913849238493384943849538496384973849838499385003850138502385033850438505385063850738508385093851038511385123851338514385153851638517385183851938520385213852238523385243852538526385273852838529385303853138532385333853438535385363853738538385393854038541385423854338544385453854638547385483854938550385513855238553385543855538556385573855838559385603856138562385633856438565385663856738568385693857038571385723857338574385753857638577385783857938580385813858238583385843858538586385873858838589385903859138592385933859438595385963859738598385993860038601386023860338604386053860638607386083860938610386113861238613386143861538616386173861838619386203862138622386233862438625386263862738628386293863038631386323863338634386353863638637386383863938640386413864238643386443864538646386473864838649386503865138652386533865438655386563865738658386593866038661386623866338664386653866638667386683866938670386713867238673386743867538676386773867838679386803868138682386833868438685386863868738688386893869038691386923869338694386953869638697386983869938700387013870238703387043870538706387073870838709387103871138712387133871438715387163871738718387193872038721387223872338724387253872638727387283872938730387313873238733387343873538736387373873838739387403874138742387433874438745387463874738748387493875038751387523875338754387553875638757387583875938760387613876238763387643876538766387673876838769387703877138772387733877438775387763877738778387793878038781387823878338784387853878638787387883878938790387913879238793387943879538796387973879838799388003880138802388033880438805388063880738808388093881038811388123881338814388153881638817388183881938820388213882238823388243882538826388273882838829388303883138832388333883438835388363883738838388393884038841388423884338844388453884638847388483884938850388513885238853388543885538856388573885838859388603886138862388633886438865388663886738868388693887038871388723887338874388753887638877388783887938880388813888238883388843888538886388873888838889388903889138892388933889438895388963889738898388993890038901389023890338904389053890638907389083890938910389113891238913389143891538916389173891838919389203892138922389233892438925389263892738928389293893038931389323893338934389353893638937389383893938940389413894238943389443894538946389473894838949389503895138952389533895438955389563895738958389593896038961389623896338964389653896638967389683896938970389713897238973389743897538976389773897838979389803898138982389833898438985389863898738988389893899038991389923899338994389953899638997389983899939000390013900239003390043900539006390073900839009390103901139012390133901439015390163901739018390193902039021390223902339024390253902639027390283902939030390313903239033390343903539036390373903839039390403904139042390433904439045390463904739048390493905039051390523905339054390553905639057390583905939060390613906239063390643906539066390673906839069390703907139072390733907439075390763907739078390793908039081390823908339084390853908639087390883908939090390913909239093390943909539096390973909839099391003910139102391033910439105391063910739108391093911039111391123911339114391153911639117391183911939120391213912239123391243912539126391273912839129391303913139132391333913439135391363913739138391393914039141391423914339144391453914639147391483914939150391513915239153391543915539156391573915839159391603916139162391633916439165391663916739168391693917039171391723917339174391753917639177391783917939180391813918239183391843918539186391873918839189391903919139192391933919439195391963919739198391993920039201392023920339204392053920639207392083920939210392113921239213392143921539216392173921839219392203922139222392233922439225392263922739228392293923039231392323923339234392353923639237392383923939240392413924239243392443924539246392473924839249392503925139252392533925439255392563925739258392593926039261392623926339264392653926639267392683926939270392713927239273392743927539276392773927839279392803928139282392833928439285392863928739288392893929039291392923929339294392953929639297392983929939300393013930239303393043930539306393073930839309393103931139312393133931439315393163931739318393193932039321393223932339324393253932639327393283932939330393313933239333393343933539336393373933839339393403934139342393433934439345393463934739348393493935039351393523935339354393553935639357393583935939360393613936239363393643936539366393673936839369393703937139372393733937439375393763937739378393793938039381393823938339384393853938639387393883938939390393913939239393393943939539396393973939839399394003940139402394033940439405394063940739408394093941039411394123941339414394153941639417394183941939420394213942239423394243942539426394273942839429394303943139432394333943439435394363943739438394393944039441394423944339444394453944639447394483944939450394513945239453394543945539456394573945839459394603946139462394633946439465394663946739468394693947039471394723947339474394753947639477394783947939480394813948239483394843948539486394873948839489394903949139492394933949439495394963949739498394993950039501395023950339504395053950639507395083950939510395113951239513395143951539516395173951839519395203952139522395233952439525395263952739528395293953039531395323953339534395353953639537395383953939540395413954239543395443954539546395473954839549395503955139552395533955439555395563955739558395593956039561395623956339564395653956639567395683956939570395713957239573395743957539576395773957839579395803958139582395833958439585395863958739588395893959039591395923959339594395953959639597395983959939600396013960239603396043960539606396073960839609396103961139612396133961439615396163961739618396193962039621396223962339624396253962639627396283962939630396313963239633396343963539636396373963839639396403964139642396433964439645396463964739648396493965039651396523965339654396553965639657396583965939660396613966239663396643966539666396673966839669396703967139672396733967439675396763967739678396793968039681396823968339684396853968639687396883968939690396913969239693396943969539696396973969839699397003970139702397033970439705397063970739708397093971039711397123971339714397153971639717397183971939720397213972239723397243972539726397273972839729397303973139732397333973439735397363973739738397393974039741397423974339744397453974639747397483974939750397513975239753397543975539756397573975839759397603976139762397633976439765397663976739768397693977039771397723977339774397753977639777397783977939780397813978239783397843978539786397873978839789397903979139792397933979439795397963979739798397993980039801398023980339804398053980639807398083980939810398113981239813398143981539816398173981839819398203982139822398233982439825398263982739828398293983039831398323983339834398353983639837398383983939840398413984239843398443984539846398473984839849398503985139852398533985439855398563985739858398593986039861398623986339864398653986639867398683986939870398713987239873398743987539876398773987839879398803988139882398833988439885398863988739888398893989039891398923989339894398953989639897398983989939900399013990239903399043990539906399073990839909399103991139912399133991439915399163991739918399193992039921399223992339924399253992639927399283992939930399313993239933399343993539936399373993839939399403994139942399433994439945399463994739948399493995039951399523995339954399553995639957399583995939960399613996239963399643996539966399673996839969399703997139972399733997439975399763997739978399793998039981399823998339984399853998639987399883998939990399913999239993399943999539996399973999839999400004000140002400034000440005400064000740008400094001040011400124001340014400154001640017400184001940020400214002240023400244002540026400274002840029400304003140032400334003440035400364003740038400394004040041400424004340044400454004640047400484004940050400514005240053400544005540056400574005840059400604006140062400634006440065400664006740068400694007040071400724007340074400754007640077400784007940080400814008240083400844008540086400874008840089400904009140092400934009440095400964009740098400994010040101401024010340104401054010640107401084010940110401114011240113401144011540116401174011840119401204012140122401234012440125401264012740128401294013040131401324013340134401354013640137401384013940140401414014240143401444014540146401474014840149401504015140152401534015440155401564015740158401594016040161401624016340164401654016640167401684016940170401714017240173401744017540176401774017840179401804018140182401834018440185401864018740188401894019040191401924019340194401954019640197401984019940200402014020240203402044020540206402074020840209402104021140212402134021440215402164021740218402194022040221402224022340224402254022640227402284022940230402314023240233402344023540236402374023840239402404024140242402434024440245402464024740248402494025040251402524025340254402554025640257402584025940260402614026240263402644026540266402674026840269402704027140272402734027440275402764027740278402794028040281402824028340284402854028640287402884028940290402914029240293402944029540296402974029840299403004030140302403034030440305403064030740308403094031040311403124031340314403154031640317403184031940320403214032240323403244032540326403274032840329403304033140332403334033440335403364033740338403394034040341403424034340344403454034640347403484034940350403514035240353403544035540356403574035840359403604036140362403634036440365403664036740368403694037040371403724037340374403754037640377403784037940380403814038240383403844038540386403874038840389403904039140392403934039440395403964039740398403994040040401404024040340404404054040640407404084040940410404114041240413404144041540416404174041840419404204042140422404234042440425404264042740428404294043040431404324043340434404354043640437404384043940440404414044240443404444044540446404474044840449404504045140452404534045440455404564045740458404594046040461404624046340464404654046640467404684046940470404714047240473404744047540476404774047840479404804048140482404834048440485404864048740488404894049040491404924049340494404954049640497404984049940500405014050240503405044050540506405074050840509405104051140512405134051440515405164051740518405194052040521405224052340524405254052640527405284052940530405314053240533405344053540536405374053840539405404054140542405434054440545405464054740548405494055040551405524055340554405554055640557405584055940560405614056240563405644056540566405674056840569405704057140572405734057440575405764057740578405794058040581405824058340584405854058640587405884058940590405914059240593405944059540596405974059840599406004060140602406034060440605406064060740608406094061040611406124061340614406154061640617406184061940620406214062240623406244062540626406274062840629406304063140632406334063440635406364063740638406394064040641406424064340644406454064640647406484064940650406514065240653406544065540656406574065840659406604066140662406634066440665406664066740668406694067040671406724067340674406754067640677406784067940680406814068240683406844068540686406874068840689406904069140692406934069440695406964069740698406994070040701407024070340704407054070640707407084070940710407114071240713407144071540716407174071840719407204072140722407234072440725407264072740728407294073040731407324073340734407354073640737407384073940740407414074240743407444074540746407474074840749407504075140752407534075440755407564075740758407594076040761407624076340764407654076640767407684076940770407714077240773407744077540776407774077840779407804078140782407834078440785407864078740788407894079040791407924079340794407954079640797407984079940800408014080240803408044080540806408074080840809408104081140812408134081440815408164081740818408194082040821408224082340824408254082640827408284082940830408314083240833408344083540836408374083840839408404084140842408434084440845408464084740848408494085040851408524085340854408554085640857408584085940860408614086240863408644086540866408674086840869408704087140872408734087440875408764087740878408794088040881408824088340884408854088640887408884088940890408914089240893408944089540896408974089840899409004090140902409034090440905409064090740908409094091040911409124091340914409154091640917409184091940920409214092240923409244092540926409274092840929409304093140932409334093440935409364093740938409394094040941409424094340944409454094640947409484094940950409514095240953409544095540956409574095840959409604096140962409634096440965409664096740968409694097040971409724097340974409754097640977409784097940980409814098240983409844098540986409874098840989409904099140992409934099440995409964099740998409994100041001410024100341004410054100641007410084100941010410114101241013410144101541016410174101841019410204102141022410234102441025410264102741028410294103041031410324103341034410354103641037410384103941040410414104241043410444104541046410474104841049410504105141052410534105441055410564105741058410594106041061410624106341064410654106641067410684106941070410714107241073410744107541076410774107841079410804108141082410834108441085410864108741088410894109041091410924109341094410954109641097410984109941100411014110241103411044110541106411074110841109411104111141112411134111441115411164111741118411194112041121411224112341124411254112641127411284112941130411314113241133411344113541136411374113841139411404114141142411434114441145411464114741148411494115041151411524115341154411554115641157411584115941160411614116241163411644116541166411674116841169411704117141172411734117441175411764117741178411794118041181411824118341184411854118641187411884118941190411914119241193411944119541196411974119841199412004120141202412034120441205412064120741208412094121041211412124121341214412154121641217412184121941220412214122241223412244122541226412274122841229412304123141232412334123441235412364123741238412394124041241412424124341244412454124641247412484124941250412514125241253412544125541256412574125841259412604126141262412634126441265412664126741268412694127041271412724127341274412754127641277412784127941280412814128241283412844128541286412874128841289412904129141292412934129441295412964129741298412994130041301413024130341304413054130641307413084130941310413114131241313413144131541316413174131841319413204132141322413234132441325413264132741328413294133041331413324133341334413354133641337413384133941340413414134241343413444134541346413474134841349413504135141352413534135441355413564135741358413594136041361413624136341364413654136641367413684136941370413714137241373413744137541376413774137841379413804138141382413834138441385413864138741388413894139041391413924139341394413954139641397413984139941400414014140241403414044140541406414074140841409414104141141412414134141441415414164141741418414194142041421414224142341424414254142641427414284142941430414314143241433414344143541436414374143841439414404144141442414434144441445414464144741448414494145041451414524145341454414554145641457414584145941460414614146241463414644146541466414674146841469414704147141472414734147441475414764147741478414794148041481414824148341484414854148641487414884148941490414914149241493414944149541496414974149841499415004150141502415034150441505415064150741508415094151041511415124151341514415154151641517415184151941520415214152241523415244152541526415274152841529415304153141532415334153441535415364153741538415394154041541415424154341544415454154641547415484154941550415514155241553415544155541556415574155841559415604156141562415634156441565415664156741568415694157041571415724157341574415754157641577415784157941580415814158241583415844158541586415874158841589415904159141592415934159441595415964159741598415994160041601416024160341604416054160641607416084160941610416114161241613416144161541616416174161841619416204162141622416234162441625416264162741628416294163041631416324163341634416354163641637416384163941640416414164241643416444164541646416474164841649416504165141652416534165441655416564165741658416594166041661416624166341664416654166641667416684166941670416714167241673416744167541676416774167841679416804168141682416834168441685416864168741688416894169041691416924169341694416954169641697416984169941700417014170241703417044170541706417074170841709417104171141712417134171441715417164171741718417194172041721417224172341724417254172641727417284172941730417314173241733417344173541736417374173841739417404174141742417434174441745417464174741748417494175041751417524175341754417554175641757417584175941760417614176241763417644176541766417674176841769417704177141772417734177441775417764177741778417794178041781417824178341784417854178641787417884178941790417914179241793417944179541796417974179841799418004180141802418034180441805418064180741808418094181041811418124181341814418154181641817418184181941820418214182241823418244182541826418274182841829418304183141832418334183441835418364183741838418394184041841418424184341844418454184641847418484184941850418514185241853418544185541856418574185841859418604186141862418634186441865418664186741868418694187041871418724187341874418754187641877418784187941880418814188241883418844188541886418874188841889418904189141892418934189441895418964189741898418994190041901419024190341904419054190641907419084190941910419114191241913419144191541916419174191841919419204192141922419234192441925419264192741928419294193041931419324193341934419354193641937419384193941940419414194241943419444194541946419474194841949419504195141952419534195441955419564195741958419594196041961419624196341964419654196641967419684196941970419714197241973419744197541976419774197841979419804198141982419834198441985419864198741988419894199041991419924199341994419954199641997419984199942000420014200242003420044200542006420074200842009420104201142012420134201442015420164201742018420194202042021420224202342024420254202642027420284202942030420314203242033420344203542036420374203842039420404204142042420434204442045420464204742048420494205042051420524205342054420554205642057420584205942060420614206242063420644206542066420674206842069420704207142072420734207442075420764207742078420794208042081420824208342084420854208642087420884208942090420914209242093420944209542096420974209842099421004210142102421034210442105421064210742108421094211042111421124211342114421154211642117421184211942120421214212242123421244212542126421274212842129421304213142132421334213442135421364213742138421394214042141421424214342144421454214642147421484214942150421514215242153421544215542156421574215842159421604216142162421634216442165421664216742168421694217042171421724217342174421754217642177421784217942180421814218242183421844218542186421874218842189421904219142192421934219442195421964219742198421994220042201422024220342204422054220642207422084220942210422114221242213422144221542216422174221842219422204222142222422234222442225422264222742228422294223042231422324223342234422354223642237422384223942240422414224242243422444224542246422474224842249422504225142252422534225442255422564225742258422594226042261422624226342264422654226642267422684226942270422714227242273422744227542276422774227842279422804228142282422834228442285422864228742288422894229042291422924229342294422954229642297422984229942300423014230242303423044230542306423074230842309423104231142312423134231442315423164231742318423194232042321423224232342324423254232642327423284232942330423314233242333423344233542336423374233842339423404234142342423434234442345423464234742348423494235042351423524235342354423554235642357423584235942360423614236242363423644236542366423674236842369423704237142372423734237442375423764237742378423794238042381423824238342384423854238642387423884238942390423914239242393423944239542396423974239842399424004240142402424034240442405424064240742408424094241042411424124241342414424154241642417424184241942420424214242242423424244242542426424274242842429424304243142432424334243442435424364243742438424394244042441424424244342444424454244642447424484244942450424514245242453424544245542456424574245842459424604246142462424634246442465424664246742468424694247042471424724247342474424754247642477424784247942480424814248242483424844248542486424874248842489424904249142492424934249442495424964249742498424994250042501425024250342504425054250642507425084250942510425114251242513425144251542516425174251842519425204252142522425234252442525425264252742528425294253042531425324253342534425354253642537425384253942540425414254242543425444254542546425474254842549425504255142552425534255442555425564255742558425594256042561425624256342564425654256642567425684256942570425714257242573425744257542576425774257842579425804258142582425834258442585425864258742588425894259042591425924259342594425954259642597425984259942600426014260242603426044260542606426074260842609426104261142612426134261442615426164261742618426194262042621426224262342624426254262642627426284262942630426314263242633426344263542636426374263842639426404264142642426434264442645426464264742648426494265042651426524265342654426554265642657426584265942660426614266242663426644266542666426674266842669426704267142672426734267442675426764267742678426794268042681426824268342684426854268642687426884268942690426914269242693426944269542696426974269842699427004270142702427034270442705427064270742708427094271042711427124271342714427154271642717427184271942720427214272242723427244272542726427274272842729427304273142732427334273442735427364273742738427394274042741427424274342744427454274642747427484274942750427514275242753427544275542756427574275842759427604276142762427634276442765427664276742768427694277042771427724277342774427754277642777427784277942780427814278242783427844278542786427874278842789427904279142792427934279442795427964279742798427994280042801428024280342804428054280642807428084280942810428114281242813428144281542816428174281842819428204282142822428234282442825428264282742828428294283042831428324283342834428354283642837428384283942840428414284242843428444284542846428474284842849428504285142852428534285442855428564285742858428594286042861428624286342864428654286642867428684286942870428714287242873428744287542876428774287842879428804288142882428834288442885428864288742888428894289042891428924289342894428954289642897428984289942900429014290242903429044290542906429074290842909429104291142912429134291442915429164291742918429194292042921429224292342924429254292642927429284292942930429314293242933429344293542936429374293842939429404294142942429434294442945429464294742948429494295042951429524295342954429554295642957429584295942960429614296242963429644296542966429674296842969429704297142972429734297442975429764297742978429794298042981429824298342984429854298642987429884298942990429914299242993429944299542996429974299842999430004300143002430034300443005430064300743008430094301043011430124301343014430154301643017430184301943020430214302243023430244302543026430274302843029430304303143032430334303443035430364303743038430394304043041430424304343044430454304643047430484304943050430514305243053430544305543056430574305843059430604306143062430634306443065430664306743068430694307043071430724307343074430754307643077430784307943080430814308243083430844308543086430874308843089430904309143092430934309443095430964309743098430994310043101431024310343104431054310643107431084310943110431114311243113431144311543116431174311843119431204312143122431234312443125431264312743128431294313043131431324313343134431354313643137431384313943140431414314243143431444314543146431474314843149431504315143152431534315443155431564315743158431594316043161431624316343164431654316643167431684316943170431714317243173431744317543176431774317843179431804318143182431834318443185431864318743188431894319043191431924319343194431954319643197431984319943200432014320243203432044320543206432074320843209432104321143212432134321443215432164321743218432194322043221432224322343224432254322643227432284322943230432314323243233432344323543236432374323843239432404324143242432434324443245432464324743248432494325043251432524325343254432554325643257432584325943260432614326243263432644326543266432674326843269432704327143272432734327443275432764327743278432794328043281432824328343284432854328643287432884328943290432914329243293432944329543296432974329843299433004330143302433034330443305433064330743308433094331043311433124331343314433154331643317433184331943320433214332243323433244332543326433274332843329433304333143332433334333443335433364333743338433394334043341433424334343344433454334643347433484334943350433514335243353433544335543356433574335843359433604336143362433634336443365433664336743368433694337043371433724337343374433754337643377433784337943380433814338243383433844338543386433874338843389433904339143392433934339443395433964339743398433994340043401434024340343404434054340643407434084340943410434114341243413434144341543416434174341843419434204342143422434234342443425434264342743428434294343043431434324343343434434354343643437434384343943440434414344243443434444344543446434474344843449434504345143452434534345443455434564345743458434594346043461434624346343464434654346643467434684346943470434714347243473434744347543476434774347843479434804348143482434834348443485434864348743488434894349043491434924349343494434954349643497434984349943500435014350243503435044350543506435074350843509435104351143512435134351443515435164351743518435194352043521435224352343524435254352643527435284352943530435314353243533435344353543536435374353843539435404354143542435434354443545435464354743548435494355043551435524355343554435554355643557435584355943560435614356243563435644356543566435674356843569435704357143572435734357443575435764357743578435794358043581435824358343584435854358643587435884358943590435914359243593435944359543596435974359843599436004360143602436034360443605436064360743608436094361043611436124361343614436154361643617436184361943620436214362243623436244362543626436274362843629436304363143632436334363443635436364363743638436394364043641436424364343644436454364643647436484364943650436514365243653436544365543656436574365843659436604366143662436634366443665436664366743668436694367043671436724367343674436754367643677436784367943680436814368243683436844368543686436874368843689436904369143692436934369443695436964369743698436994370043701437024370343704437054370643707437084370943710437114371243713437144371543716437174371843719437204372143722437234372443725437264372743728437294373043731437324373343734437354373643737437384373943740437414374243743437444374543746437474374843749437504375143752437534375443755437564375743758437594376043761437624376343764437654376643767437684376943770437714377243773437744377543776437774377843779437804378143782437834378443785437864378743788437894379043791437924379343794437954379643797437984379943800438014380243803438044380543806438074380843809438104381143812438134381443815438164381743818438194382043821438224382343824438254382643827438284382943830438314383243833438344383543836438374383843839438404384143842438434384443845438464384743848438494385043851438524385343854438554385643857438584385943860438614386243863438644386543866438674386843869438704387143872438734387443875438764387743878438794388043881438824388343884438854388643887438884388943890438914389243893438944389543896438974389843899439004390143902439034390443905439064390743908439094391043911439124391343914439154391643917439184391943920439214392243923439244392543926439274392843929439304393143932439334393443935439364393743938439394394043941439424394343944439454394643947439484394943950439514395243953439544395543956439574395843959439604396143962439634396443965439664396743968439694397043971439724397343974439754397643977439784397943980439814398243983439844398543986439874398843989439904399143992439934399443995439964399743998439994400044001440024400344004440054400644007440084400944010440114401244013440144401544016440174401844019440204402144022440234402444025440264402744028440294403044031440324403344034440354403644037440384403944040440414404244043440444404544046440474404844049440504405144052440534405444055440564405744058440594406044061440624406344064440654406644067440684406944070440714407244073440744407544076440774407844079440804408144082440834408444085440864408744088440894409044091440924409344094440954409644097440984409944100441014410244103441044410544106441074410844109441104411144112441134411444115441164411744118441194412044121441224412344124441254412644127441284412944130441314413244133441344413544136441374413844139441404414144142441434414444145441464414744148441494415044151441524415344154441554415644157441584415944160441614416244163441644416544166441674416844169441704417144172441734417444175441764417744178441794418044181441824418344184441854418644187441884418944190441914419244193441944419544196441974419844199442004420144202442034420444205442064420744208442094421044211442124421344214442154421644217442184421944220442214422244223442244422544226442274422844229442304423144232442334423444235442364423744238442394424044241442424424344244442454424644247442484424944250442514425244253442544425544256442574425844259442604426144262442634426444265442664426744268442694427044271442724427344274442754427644277442784427944280442814428244283442844428544286442874428844289442904429144292442934429444295442964429744298442994430044301443024430344304443054430644307443084430944310443114431244313443144431544316443174431844319443204432144322443234432444325443264432744328443294433044331443324433344334443354433644337443384433944340443414434244343443444434544346443474434844349443504435144352443534435444355443564435744358443594436044361443624436344364443654436644367443684436944370443714437244373443744437544376443774437844379443804438144382443834438444385443864438744388443894439044391443924439344394443954439644397443984439944400444014440244403444044440544406444074440844409444104441144412444134441444415444164441744418444194442044421444224442344424444254442644427444284442944430444314443244433444344443544436444374443844439444404444144442444434444444445444464444744448444494445044451444524445344454444554445644457444584445944460444614446244463444644446544466444674446844469444704447144472444734447444475444764447744478444794448044481444824448344484444854448644487444884448944490444914449244493444944449544496444974449844499445004450144502445034450444505445064450744508445094451044511445124451344514445154451644517445184451944520445214452244523445244452544526445274452844529445304453144532445334453444535445364453744538445394454044541445424454344544445454454644547445484454944550445514455244553445544455544556445574455844559445604456144562445634456444565445664456744568445694457044571445724457344574445754457644577445784457944580445814458244583445844458544586445874458844589445904459144592445934459444595445964459744598445994460044601446024460344604446054460644607446084460944610446114461244613446144461544616446174461844619446204462144622446234462444625446264462744628446294463044631446324463344634446354463644637446384463944640446414464244643446444464544646446474464844649446504465144652446534465444655446564465744658446594466044661446624466344664446654466644667446684466944670446714467244673446744467544676446774467844679446804468144682446834468444685446864468744688446894469044691446924469344694446954469644697446984469944700447014470244703447044470544706447074470844709447104471144712447134471444715447164471744718447194472044721447224472344724447254472644727447284472944730447314473244733447344473544736447374473844739447404474144742447434474444745447464474744748447494475044751447524475344754447554475644757447584475944760447614476244763447644476544766447674476844769447704477144772447734477444775447764477744778447794478044781447824478344784447854478644787447884478944790447914479244793447944479544796447974479844799448004480144802448034480444805448064480744808448094481044811448124481344814448154481644817448184481944820448214482244823448244482544826448274482844829448304483144832448334483444835448364483744838448394484044841448424484344844448454484644847448484484944850448514485244853448544485544856448574485844859448604486144862448634486444865448664486744868448694487044871448724487344874448754487644877448784487944880448814488244883448844488544886448874488844889448904489144892448934489444895448964489744898448994490044901449024490344904449054490644907449084490944910449114491244913449144491544916449174491844919449204492144922449234492444925449264492744928449294493044931449324493344934449354493644937449384493944940449414494244943449444494544946449474494844949449504495144952449534495444955449564495744958449594496044961449624496344964449654496644967449684496944970449714497244973449744497544976449774497844979449804498144982449834498444985449864498744988449894499044991449924499344994449954499644997449984499945000450014500245003450044500545006450074500845009450104501145012450134501445015450164501745018450194502045021450224502345024450254502645027450284502945030450314503245033450344503545036450374503845039450404504145042450434504445045450464504745048450494505045051450524505345054450554505645057450584505945060450614506245063450644506545066450674506845069450704507145072450734507445075450764507745078450794508045081450824508345084450854508645087450884508945090450914509245093450944509545096450974509845099451004510145102451034510445105451064510745108451094511045111451124511345114451154511645117451184511945120451214512245123451244512545126451274512845129451304513145132451334513445135451364513745138451394514045141451424514345144451454514645147451484514945150451514515245153451544515545156451574515845159451604516145162451634516445165451664516745168451694517045171451724517345174451754517645177451784517945180451814518245183451844518545186451874518845189451904519145192451934519445195451964519745198451994520045201452024520345204452054520645207452084520945210452114521245213452144521545216452174521845219452204522145222452234522445225452264522745228452294523045231452324523345234452354523645237452384523945240452414524245243452444524545246452474524845249452504525145252452534525445255452564525745258452594526045261452624526345264452654526645267452684526945270452714527245273452744527545276452774527845279452804528145282452834528445285452864528745288452894529045291452924529345294452954529645297452984529945300453014530245303453044530545306453074530845309453104531145312453134531445315453164531745318453194532045321453224532345324453254532645327453284532945330453314533245333453344533545336453374533845339453404534145342453434534445345453464534745348453494535045351453524535345354453554535645357453584535945360453614536245363453644536545366453674536845369453704537145372453734537445375453764537745378453794538045381453824538345384453854538645387453884538945390453914539245393453944539545396453974539845399454004540145402454034540445405454064540745408454094541045411454124541345414454154541645417454184541945420454214542245423454244542545426454274542845429454304543145432454334543445435454364543745438454394544045441454424544345444454454544645447454484544945450454514545245453454544545545456454574545845459454604546145462454634546445465454664546745468454694547045471454724547345474454754547645477454784547945480454814548245483454844548545486454874548845489454904549145492454934549445495454964549745498454994550045501455024550345504455054550645507455084550945510455114551245513455144551545516455174551845519455204552145522455234552445525455264552745528455294553045531455324553345534455354553645537455384553945540455414554245543455444554545546455474554845549455504555145552455534555445555455564555745558455594556045561455624556345564455654556645567455684556945570455714557245573455744557545576455774557845579455804558145582455834558445585455864558745588455894559045591455924559345594455954559645597455984559945600456014560245603456044560545606456074560845609456104561145612456134561445615456164561745618456194562045621456224562345624456254562645627456284562945630456314563245633456344563545636456374563845639456404564145642456434564445645456464564745648456494565045651456524565345654456554565645657456584565945660456614566245663456644566545666456674566845669456704567145672456734567445675456764567745678456794568045681456824568345684456854568645687456884568945690456914569245693456944569545696456974569845699457004570145702457034570445705457064570745708457094571045711457124571345714457154571645717457184571945720457214572245723457244572545726457274572845729457304573145732457334573445735457364573745738457394574045741457424574345744457454574645747457484574945750457514575245753457544575545756457574575845759457604576145762457634576445765457664576745768457694577045771457724577345774457754577645777457784577945780457814578245783457844578545786457874578845789457904579145792457934579445795457964579745798457994580045801458024580345804458054580645807458084580945810458114581245813458144581545816458174581845819458204582145822458234582445825458264582745828458294583045831458324583345834458354583645837458384583945840458414584245843458444584545846458474584845849458504585145852458534585445855458564585745858458594586045861458624586345864458654586645867458684586945870458714587245873458744587545876458774587845879458804588145882458834588445885458864588745888458894589045891458924589345894458954589645897458984589945900459014590245903459044590545906459074590845909459104591145912459134591445915459164591745918459194592045921459224592345924459254592645927459284592945930459314593245933459344593545936459374593845939459404594145942459434594445945459464594745948459494595045951459524595345954459554595645957459584595945960459614596245963459644596545966459674596845969459704597145972459734597445975459764597745978459794598045981459824598345984459854598645987459884598945990459914599245993459944599545996459974599845999460004600146002460034600446005460064600746008460094601046011460124601346014460154601646017460184601946020460214602246023460244602546026460274602846029460304603146032460334603446035460364603746038460394604046041460424604346044460454604646047460484604946050460514605246053460544605546056460574605846059460604606146062460634606446065460664606746068460694607046071460724607346074460754607646077460784607946080460814608246083460844608546086460874608846089460904609146092460934609446095460964609746098460994610046101461024610346104461054610646107461084610946110461114611246113461144611546116461174611846119461204612146122461234612446125461264612746128461294613046131461324613346134461354613646137461384613946140461414614246143461444614546146461474614846149461504615146152461534615446155461564615746158461594616046161461624616346164461654616646167461684616946170461714617246173461744617546176461774617846179461804618146182461834618446185461864618746188461894619046191461924619346194461954619646197461984619946200462014620246203462044620546206462074620846209462104621146212462134621446215462164621746218462194622046221462224622346224462254622646227462284622946230462314623246233462344623546236462374623846239462404624146242462434624446245462464624746248462494625046251462524625346254462554625646257462584625946260462614626246263462644626546266462674626846269462704627146272462734627446275462764627746278462794628046281462824628346284462854628646287462884628946290462914629246293462944629546296462974629846299463004630146302463034630446305463064630746308463094631046311463124631346314463154631646317463184631946320463214632246323463244632546326463274632846329463304633146332463334633446335463364633746338463394634046341463424634346344463454634646347463484634946350463514635246353463544635546356463574635846359463604636146362463634636446365463664636746368463694637046371463724637346374463754637646377463784637946380463814638246383463844638546386463874638846389463904639146392463934639446395463964639746398463994640046401464024640346404464054640646407464084640946410464114641246413464144641546416464174641846419464204642146422464234642446425464264642746428464294643046431464324643346434464354643646437464384643946440464414644246443464444644546446464474644846449464504645146452464534645446455464564645746458464594646046461464624646346464464654646646467464684646946470464714647246473464744647546476464774647846479464804648146482464834648446485464864648746488464894649046491464924649346494464954649646497464984649946500465014650246503465044650546506465074650846509465104651146512465134651446515465164651746518465194652046521465224652346524465254652646527465284652946530465314653246533465344653546536465374653846539465404654146542465434654446545465464654746548465494655046551465524655346554465554655646557465584655946560465614656246563465644656546566465674656846569465704657146572465734657446575465764657746578465794658046581465824658346584465854658646587465884658946590465914659246593465944659546596465974659846599466004660146602466034660446605466064660746608466094661046611466124661346614466154661646617466184661946620466214662246623466244662546626466274662846629466304663146632466334663446635466364663746638466394664046641466424664346644466454664646647466484664946650466514665246653466544665546656466574665846659466604666146662466634666446665466664666746668466694667046671466724667346674466754667646677466784667946680466814668246683466844668546686466874668846689466904669146692466934669446695466964669746698466994670046701467024670346704467054670646707467084670946710467114671246713467144671546716467174671846719467204672146722467234672446725467264672746728467294673046731467324673346734467354673646737467384673946740467414674246743467444674546746467474674846749467504675146752467534675446755467564675746758467594676046761467624676346764467654676646767467684676946770467714677246773467744677546776467774677846779467804678146782467834678446785467864678746788467894679046791467924679346794467954679646797467984679946800468014680246803468044680546806468074680846809468104681146812468134681446815468164681746818468194682046821468224682346824468254682646827468284682946830468314683246833468344683546836468374683846839468404684146842468434684446845468464684746848468494685046851468524685346854468554685646857468584685946860468614686246863468644686546866468674686846869468704687146872468734687446875468764687746878468794688046881468824688346884468854688646887468884688946890468914689246893468944689546896468974689846899469004690146902469034690446905469064690746908469094691046911469124691346914469154691646917469184691946920469214692246923469244692546926469274692846929469304693146932469334693446935469364693746938469394694046941469424694346944469454694646947469484694946950469514695246953469544695546956469574695846959469604696146962469634696446965469664696746968469694697046971469724697346974469754697646977469784697946980469814698246983469844698546986469874698846989469904699146992469934699446995469964699746998469994700047001470024700347004470054700647007470084700947010470114701247013470144701547016470174701847019470204702147022470234702447025470264702747028470294703047031470324703347034470354703647037470384703947040470414704247043470444704547046470474704847049470504705147052470534705447055470564705747058470594706047061470624706347064470654706647067470684706947070470714707247073470744707547076470774707847079470804708147082470834708447085470864708747088470894709047091470924709347094470954709647097470984709947100471014710247103471044710547106471074710847109471104711147112471134711447115471164711747118471194712047121471224712347124471254712647127471284712947130471314713247133471344713547136471374713847139471404714147142471434714447145471464714747148471494715047151471524715347154471554715647157471584715947160471614716247163471644716547166471674716847169471704717147172471734717447175471764717747178471794718047181471824718347184471854718647187471884718947190471914719247193471944719547196471974719847199472004720147202472034720447205472064720747208472094721047211472124721347214472154721647217472184721947220472214722247223472244722547226472274722847229472304723147232472334723447235472364723747238472394724047241472424724347244472454724647247472484724947250472514725247253472544725547256472574725847259472604726147262472634726447265472664726747268472694727047271472724727347274472754727647277472784727947280472814728247283472844728547286472874728847289472904729147292472934729447295472964729747298472994730047301473024730347304473054730647307473084730947310473114731247313473144731547316473174731847319473204732147322473234732447325473264732747328473294733047331473324733347334473354733647337473384733947340473414734247343473444734547346473474734847349473504735147352473534735447355473564735747358473594736047361473624736347364473654736647367473684736947370473714737247373473744737547376473774737847379473804738147382473834738447385473864738747388473894739047391473924739347394473954739647397473984739947400474014740247403474044740547406474074740847409474104741147412474134741447415474164741747418474194742047421474224742347424474254742647427474284742947430474314743247433474344743547436474374743847439474404744147442474434744447445474464744747448474494745047451474524745347454474554745647457474584745947460474614746247463474644746547466474674746847469474704747147472474734747447475474764747747478474794748047481474824748347484474854748647487474884748947490474914749247493474944749547496474974749847499475004750147502475034750447505475064750747508475094751047511475124751347514475154751647517475184751947520475214752247523475244752547526475274752847529475304753147532475334753447535475364753747538475394754047541475424754347544475454754647547475484754947550475514755247553475544755547556475574755847559475604756147562475634756447565475664756747568475694757047571475724757347574475754757647577475784757947580475814758247583475844758547586475874758847589475904759147592475934759447595475964759747598475994760047601476024760347604476054760647607476084760947610476114761247613476144761547616476174761847619476204762147622476234762447625476264762747628476294763047631476324763347634476354763647637476384763947640476414764247643476444764547646476474764847649476504765147652476534765447655476564765747658476594766047661476624766347664476654766647667476684766947670476714767247673476744767547676476774767847679476804768147682476834768447685476864768747688476894769047691476924769347694476954769647697476984769947700477014770247703477044770547706477074770847709477104771147712477134771447715477164771747718477194772047721477224772347724477254772647727477284772947730477314773247733477344773547736477374773847739477404774147742477434774447745477464774747748477494775047751477524775347754477554775647757477584775947760477614776247763477644776547766477674776847769477704777147772477734777447775477764777747778477794778047781477824778347784477854778647787477884778947790477914779247793477944779547796477974779847799478004780147802478034780447805478064780747808478094781047811478124781347814478154781647817478184781947820478214782247823478244782547826478274782847829478304783147832478334783447835478364783747838478394784047841478424784347844478454784647847478484784947850478514785247853478544785547856478574785847859478604786147862478634786447865478664786747868478694787047871478724787347874478754787647877478784787947880478814788247883478844788547886478874788847889478904789147892478934789447895478964789747898478994790047901479024790347904479054790647907479084790947910479114791247913479144791547916479174791847919479204792147922479234792447925479264792747928479294793047931479324793347934479354793647937479384793947940479414794247943479444794547946479474794847949479504795147952479534795447955479564795747958479594796047961479624796347964479654796647967479684796947970479714797247973479744797547976479774797847979479804798147982479834798447985479864798747988479894799047991479924799347994479954799647997479984799948000480014800248003480044800548006480074800848009480104801148012480134801448015480164801748018480194802048021480224802348024480254802648027480284802948030480314803248033480344803548036480374803848039480404804148042480434804448045480464804748048480494805048051480524805348054480554805648057480584805948060480614806248063480644806548066480674806848069480704807148072480734807448075480764807748078480794808048081480824808348084480854808648087480884808948090480914809248093480944809548096480974809848099481004810148102481034810448105481064810748108481094811048111481124811348114481154811648117481184811948120481214812248123481244812548126481274812848129481304813148132481334813448135481364813748138481394814048141481424814348144481454814648147481484814948150481514815248153481544815548156481574815848159481604816148162481634816448165481664816748168481694817048171481724817348174481754817648177481784817948180481814818248183481844818548186481874818848189481904819148192481934819448195481964819748198481994820048201482024820348204482054820648207482084820948210482114821248213482144821548216482174821848219482204822148222482234822448225482264822748228482294823048231482324823348234482354823648237482384823948240482414824248243482444824548246482474824848249482504825148252482534825448255482564825748258482594826048261482624826348264482654826648267482684826948270482714827248273482744827548276482774827848279482804828148282482834828448285482864828748288482894829048291482924829348294482954829648297482984829948300483014830248303483044830548306483074830848309483104831148312483134831448315483164831748318483194832048321483224832348324483254832648327483284832948330483314833248333483344833548336483374833848339483404834148342483434834448345483464834748348483494835048351483524835348354483554835648357483584835948360483614836248363483644836548366483674836848369483704837148372483734837448375483764837748378483794838048381483824838348384483854838648387483884838948390483914839248393483944839548396483974839848399484004840148402484034840448405484064840748408484094841048411484124841348414484154841648417484184841948420484214842248423484244842548426484274842848429484304843148432484334843448435484364843748438484394844048441484424844348444484454844648447484484844948450484514845248453484544845548456484574845848459484604846148462484634846448465484664846748468484694847048471484724847348474484754847648477484784847948480484814848248483484844848548486484874848848489484904849148492484934849448495484964849748498484994850048501485024850348504485054850648507485084850948510485114851248513485144851548516485174851848519485204852148522485234852448525485264852748528485294853048531485324853348534485354853648537485384853948540485414854248543485444854548546485474854848549485504855148552485534855448555485564855748558485594856048561485624856348564485654856648567485684856948570485714857248573485744857548576485774857848579485804858148582485834858448585485864858748588485894859048591485924859348594485954859648597485984859948600486014860248603486044860548606486074860848609486104861148612486134861448615486164861748618486194862048621486224862348624486254862648627486284862948630486314863248633486344863548636486374863848639486404864148642486434864448645486464864748648486494865048651486524865348654486554865648657486584865948660486614866248663486644866548666486674866848669486704867148672486734867448675486764867748678486794868048681486824868348684486854868648687486884868948690486914869248693486944869548696486974869848699487004870148702487034870448705487064870748708487094871048711487124871348714487154871648717487184871948720487214872248723487244872548726487274872848729487304873148732487334873448735487364873748738487394874048741487424874348744487454874648747487484874948750487514875248753487544875548756487574875848759487604876148762487634876448765487664876748768487694877048771487724877348774487754877648777487784877948780487814878248783487844878548786487874878848789487904879148792487934879448795487964879748798487994880048801488024880348804488054880648807488084880948810488114881248813488144881548816488174881848819488204882148822488234882448825488264882748828488294883048831488324883348834488354883648837488384883948840488414884248843488444884548846488474884848849488504885148852488534885448855488564885748858488594886048861488624886348864488654886648867488684886948870488714887248873488744887548876488774887848879488804888148882488834888448885488864888748888488894889048891488924889348894488954889648897488984889948900489014890248903489044890548906489074890848909489104891148912489134891448915489164891748918489194892048921489224892348924489254892648927489284892948930489314893248933489344893548936489374893848939489404894148942489434894448945489464894748948489494895048951489524895348954489554895648957489584895948960489614896248963489644896548966489674896848969489704897148972489734897448975489764897748978489794898048981489824898348984489854898648987489884898948990489914899248993489944899548996489974899848999490004900149002490034900449005490064900749008490094901049011490124901349014490154901649017490184901949020490214902249023490244902549026490274902849029490304903149032490334903449035490364903749038490394904049041490424904349044490454904649047490484904949050490514905249053490544905549056490574905849059490604906149062490634906449065490664906749068490694907049071490724907349074490754907649077490784907949080490814908249083490844908549086490874908849089490904909149092490934909449095490964909749098490994910049101491024910349104491054910649107491084910949110491114911249113491144911549116491174911849119491204912149122491234912449125491264912749128491294913049131491324913349134491354913649137491384913949140491414914249143491444914549146491474914849149491504915149152491534915449155491564915749158491594916049161491624916349164491654916649167491684916949170491714917249173491744917549176491774917849179491804918149182491834918449185491864918749188491894919049191491924919349194491954919649197491984919949200492014920249203492044920549206492074920849209492104921149212492134921449215492164921749218492194922049221492224922349224492254922649227492284922949230492314923249233492344923549236492374923849239492404924149242492434924449245492464924749248492494925049251492524925349254492554925649257492584925949260492614926249263492644926549266492674926849269492704927149272492734927449275492764927749278492794928049281492824928349284492854928649287492884928949290492914929249293492944929549296492974929849299493004930149302493034930449305493064930749308493094931049311493124931349314493154931649317493184931949320493214932249323493244932549326493274932849329493304933149332493334933449335493364933749338493394934049341493424934349344493454934649347493484934949350493514935249353493544935549356493574935849359493604936149362493634936449365493664936749368493694937049371493724937349374493754937649377493784937949380493814938249383493844938549386493874938849389493904939149392493934939449395493964939749398493994940049401494024940349404494054940649407494084940949410494114941249413494144941549416494174941849419494204942149422494234942449425494264942749428494294943049431494324943349434494354943649437494384943949440494414944249443494444944549446494474944849449494504945149452494534945449455494564945749458494594946049461494624946349464494654946649467494684946949470494714947249473494744947549476494774947849479494804948149482494834948449485494864948749488494894949049491494924949349494494954949649497494984949949500495014950249503495044950549506495074950849509495104951149512495134951449515495164951749518495194952049521495224952349524495254952649527495284952949530495314953249533495344953549536495374953849539495404954149542495434954449545495464954749548495494955049551495524955349554495554955649557495584955949560495614956249563495644956549566495674956849569495704957149572495734957449575495764957749578495794958049581495824958349584495854958649587495884958949590495914959249593495944959549596495974959849599496004960149602496034960449605496064960749608496094961049611496124961349614496154961649617496184961949620496214962249623496244962549626496274962849629496304963149632496334963449635496364963749638496394964049641496424964349644496454964649647496484964949650496514965249653496544965549656496574965849659496604966149662496634966449665496664966749668496694967049671496724967349674496754967649677496784967949680496814968249683496844968549686496874968849689496904969149692496934969449695496964969749698496994970049701497024970349704497054970649707497084970949710497114971249713497144971549716497174971849719497204972149722497234972449725497264972749728497294973049731497324973349734497354973649737497384973949740497414974249743497444974549746497474974849749497504975149752497534975449755497564975749758497594976049761497624976349764497654976649767497684976949770497714977249773497744977549776497774977849779497804978149782497834978449785497864978749788497894979049791497924979349794497954979649797497984979949800498014980249803498044980549806498074980849809498104981149812498134981449815498164981749818498194982049821498224982349824498254982649827498284982949830498314983249833498344983549836498374983849839498404984149842498434984449845498464984749848498494985049851498524985349854498554985649857498584985949860498614986249863498644986549866498674986849869498704987149872498734987449875498764987749878498794988049881498824988349884498854988649887498884988949890498914989249893498944989549896498974989849899499004990149902499034990449905499064990749908499094991049911499124991349914499154991649917499184991949920499214992249923499244992549926499274992849929499304993149932499334993449935499364993749938499394994049941499424994349944499454994649947499484994949950499514995249953499544995549956499574995849959499604996149962499634996449965499664996749968499694997049971499724997349974499754997649977499784997949980499814998249983499844998549986499874998849989499904999149992499934999449995499964999749998499995000050001500025000350004500055000650007500085000950010500115001250013500145001550016500175001850019500205002150022500235002450025500265002750028500295003050031500325003350034500355003650037500385003950040500415004250043500445004550046500475004850049500505005150052500535005450055500565005750058500595006050061500625006350064500655006650067500685006950070500715007250073500745007550076500775007850079500805008150082500835008450085500865008750088500895009050091500925009350094500955009650097500985009950100501015010250103501045010550106501075010850109501105011150112501135011450115501165011750118501195012050121501225012350124501255012650127501285012950130501315013250133501345013550136501375013850139501405014150142501435014450145501465014750148501495015050151501525015350154501555015650157501585015950160501615016250163501645016550166501675016850169501705017150172501735017450175501765017750178501795018050181501825018350184501855018650187501885018950190501915019250193501945019550196501975019850199502005020150202502035020450205502065020750208502095021050211502125021350214502155021650217502185021950220502215022250223502245022550226502275022850229502305023150232502335023450235502365023750238502395024050241502425024350244502455024650247502485024950250502515025250253502545025550256502575025850259502605026150262502635026450265502665026750268502695027050271502725027350274502755027650277502785027950280502815028250283502845028550286502875028850289502905029150292502935029450295502965029750298502995030050301503025030350304503055030650307503085030950310503115031250313503145031550316503175031850319503205032150322503235032450325503265032750328503295033050331503325033350334503355033650337503385033950340503415034250343503445034550346503475034850349503505035150352503535035450355503565035750358503595036050361503625036350364503655036650367503685036950370503715037250373503745037550376503775037850379503805038150382503835038450385503865038750388503895039050391503925039350394503955039650397503985039950400504015040250403504045040550406504075040850409504105041150412504135041450415504165041750418504195042050421504225042350424504255042650427504285042950430504315043250433504345043550436504375043850439504405044150442504435044450445504465044750448504495045050451504525045350454504555045650457504585045950460504615046250463504645046550466504675046850469504705047150472504735047450475504765047750478504795048050481504825048350484504855048650487504885048950490504915049250493504945049550496504975049850499505005050150502505035050450505505065050750508505095051050511505125051350514505155051650517505185051950520505215052250523505245052550526505275052850529505305053150532505335053450535505365053750538505395054050541505425054350544505455054650547505485054950550505515055250553505545055550556505575055850559505605056150562505635056450565505665056750568505695057050571505725057350574505755057650577505785057950580505815058250583505845058550586505875058850589505905059150592505935059450595505965059750598505995060050601506025060350604506055060650607506085060950610506115061250613506145061550616506175061850619506205062150622506235062450625506265062750628506295063050631506325063350634506355063650637506385063950640506415064250643506445064550646506475064850649506505065150652506535065450655506565065750658506595066050661506625066350664506655066650667506685066950670506715067250673506745067550676506775067850679506805068150682506835068450685506865068750688506895069050691506925069350694506955069650697506985069950700507015070250703507045070550706507075070850709507105071150712507135071450715507165071750718507195072050721507225072350724507255072650727507285072950730507315073250733507345073550736507375073850739507405074150742507435074450745507465074750748507495075050751507525075350754507555075650757507585075950760507615076250763507645076550766507675076850769507705077150772507735077450775507765077750778507795078050781507825078350784507855078650787507885078950790507915079250793507945079550796507975079850799508005080150802508035080450805508065080750808508095081050811508125081350814508155081650817508185081950820508215082250823508245082550826508275082850829508305083150832508335083450835508365083750838508395084050841508425084350844508455084650847508485084950850508515085250853508545085550856508575085850859508605086150862508635086450865508665086750868508695087050871508725087350874508755087650877508785087950880508815088250883508845088550886508875088850889508905089150892508935089450895508965089750898508995090050901509025090350904509055090650907509085090950910509115091250913509145091550916509175091850919509205092150922509235092450925509265092750928509295093050931509325093350934509355093650937509385093950940509415094250943509445094550946509475094850949509505095150952509535095450955509565095750958509595096050961509625096350964509655096650967509685096950970509715097250973509745097550976509775097850979509805098150982509835098450985509865098750988509895099050991509925099350994509955099650997509985099951000510015100251003510045100551006510075100851009510105101151012510135101451015510165101751018510195102051021510225102351024510255102651027510285102951030510315103251033510345103551036510375103851039510405104151042510435104451045510465104751048510495105051051510525105351054510555105651057510585105951060510615106251063510645106551066510675106851069510705107151072510735107451075510765107751078510795108051081510825108351084510855108651087510885108951090510915109251093510945109551096510975109851099511005110151102511035110451105511065110751108511095111051111511125111351114511155111651117511185111951120511215112251123511245112551126511275112851129511305113151132511335113451135511365113751138511395114051141511425114351144511455114651147511485114951150511515115251153511545115551156511575115851159511605116151162511635116451165511665116751168511695117051171511725117351174511755117651177511785117951180511815118251183511845118551186511875118851189511905119151192511935119451195511965119751198511995120051201512025120351204512055120651207512085120951210512115121251213512145121551216512175121851219512205122151222512235122451225512265122751228512295123051231512325123351234512355123651237512385123951240512415124251243512445124551246512475124851249512505125151252512535125451255512565125751258512595126051261512625126351264512655126651267512685126951270512715127251273512745127551276512775127851279512805128151282512835128451285512865128751288512895129051291512925129351294512955129651297512985129951300513015130251303513045130551306513075130851309513105131151312513135131451315513165131751318513195132051321513225132351324513255132651327513285132951330513315133251333513345133551336513375133851339513405134151342513435134451345513465134751348513495135051351513525135351354513555135651357513585135951360513615136251363513645136551366513675136851369513705137151372513735137451375513765137751378513795138051381513825138351384513855138651387513885138951390513915139251393513945139551396513975139851399514005140151402514035140451405514065140751408514095141051411514125141351414514155141651417514185141951420514215142251423514245142551426514275142851429514305143151432514335143451435514365143751438514395144051441514425144351444514455144651447514485144951450514515145251453514545145551456514575145851459514605146151462514635146451465514665146751468514695147051471514725147351474514755147651477514785147951480514815148251483514845148551486514875148851489514905149151492514935149451495514965149751498514995150051501515025150351504515055150651507515085150951510515115151251513515145151551516515175151851519515205152151522515235152451525515265152751528515295153051531515325153351534515355153651537515385153951540515415154251543515445154551546515475154851549515505155151552515535155451555515565155751558515595156051561515625156351564515655156651567515685156951570515715157251573515745157551576515775157851579515805158151582515835158451585515865158751588515895159051591515925159351594515955159651597515985159951600516015160251603516045160551606516075160851609516105161151612516135161451615516165161751618516195162051621516225162351624516255162651627516285162951630516315163251633516345163551636516375163851639516405164151642516435164451645516465164751648516495165051651516525165351654516555165651657516585165951660516615166251663516645166551666516675166851669516705167151672516735167451675516765167751678516795168051681516825168351684516855168651687516885168951690516915169251693516945169551696516975169851699517005170151702517035170451705517065170751708517095171051711517125171351714517155171651717517185171951720517215172251723517245172551726517275172851729517305173151732517335173451735517365173751738517395174051741517425174351744517455174651747517485174951750517515175251753517545175551756517575175851759517605176151762517635176451765517665176751768517695177051771517725177351774517755177651777517785177951780517815178251783517845178551786517875178851789517905179151792517935179451795517965179751798517995180051801518025180351804518055180651807518085180951810518115181251813518145181551816518175181851819518205182151822518235182451825518265182751828518295183051831518325183351834518355183651837518385183951840518415184251843518445184551846518475184851849518505185151852518535185451855518565185751858518595186051861518625186351864518655186651867518685186951870518715187251873518745187551876518775187851879518805188151882518835188451885518865188751888518895189051891518925189351894518955189651897518985189951900519015190251903519045190551906519075190851909519105191151912519135191451915519165191751918519195192051921519225192351924519255192651927519285192951930519315193251933519345193551936519375193851939519405194151942519435194451945519465194751948519495195051951519525195351954519555195651957519585195951960519615196251963519645196551966519675196851969519705197151972519735197451975519765197751978519795198051981519825198351984519855198651987519885198951990519915199251993519945199551996519975199851999520005200152002520035200452005520065200752008520095201052011520125201352014520155201652017520185201952020520215202252023520245202552026520275202852029520305203152032520335203452035520365203752038520395204052041520425204352044520455204652047520485204952050520515205252053520545205552056520575205852059520605206152062520635206452065520665206752068520695207052071520725207352074520755207652077520785207952080520815208252083520845208552086520875208852089520905209152092520935209452095520965209752098520995210052101521025210352104521055210652107521085210952110521115211252113521145211552116521175211852119521205212152122521235212452125521265212752128521295213052131521325213352134521355213652137521385213952140521415214252143521445214552146521475214852149521505215152152521535215452155521565215752158521595216052161521625216352164521655216652167521685216952170521715217252173521745217552176521775217852179521805218152182521835218452185521865218752188521895219052191521925219352194521955219652197521985219952200522015220252203522045220552206522075220852209522105221152212522135221452215522165221752218522195222052221522225222352224522255222652227522285222952230522315223252233522345223552236522375223852239522405224152242522435224452245522465224752248522495225052251522525225352254522555225652257522585225952260522615226252263522645226552266522675226852269522705227152272522735227452275522765227752278522795228052281522825228352284522855228652287522885228952290522915229252293522945229552296522975229852299523005230152302523035230452305523065230752308523095231052311523125231352314523155231652317523185231952320523215232252323523245232552326523275232852329523305233152332523335233452335523365233752338523395234052341523425234352344523455234652347523485234952350523515235252353523545235552356523575235852359523605236152362523635236452365523665236752368523695237052371523725237352374523755237652377523785237952380523815238252383523845238552386523875238852389523905239152392523935239452395523965239752398523995240052401524025240352404524055240652407524085240952410524115241252413524145241552416524175241852419524205242152422524235242452425524265242752428524295243052431524325243352434524355243652437524385243952440524415244252443524445244552446524475244852449524505245152452524535245452455524565245752458524595246052461524625246352464524655246652467524685246952470524715247252473524745247552476524775247852479524805248152482524835248452485524865248752488524895249052491524925249352494524955249652497524985249952500525015250252503525045250552506525075250852509525105251152512525135251452515525165251752518525195252052521525225252352524525255252652527525285252952530525315253252533525345253552536525375253852539525405254152542525435254452545525465254752548525495255052551525525255352554525555255652557525585255952560525615256252563525645256552566525675256852569525705257152572525735257452575525765257752578525795258052581525825258352584525855258652587525885258952590525915259252593525945259552596525975259852599526005260152602526035260452605526065260752608526095261052611526125261352614526155261652617526185261952620526215262252623526245262552626526275262852629526305263152632526335263452635526365263752638526395264052641526425264352644526455264652647526485264952650526515265252653526545265552656526575265852659526605266152662526635266452665526665266752668526695267052671526725267352674526755267652677526785267952680526815268252683526845268552686526875268852689526905269152692526935269452695526965269752698526995270052701527025270352704527055270652707527085270952710527115271252713527145271552716527175271852719527205272152722527235272452725527265272752728527295273052731527325273352734527355273652737527385273952740527415274252743527445274552746527475274852749527505275152752527535275452755527565275752758527595276052761527625276352764527655276652767527685276952770527715277252773527745277552776527775277852779527805278152782527835278452785527865278752788527895279052791527925279352794527955279652797527985279952800528015280252803528045280552806528075280852809528105281152812528135281452815528165281752818528195282052821528225282352824528255282652827528285282952830528315283252833528345283552836528375283852839528405284152842528435284452845528465284752848528495285052851528525285352854528555285652857528585285952860528615286252863528645286552866528675286852869528705287152872528735287452875528765287752878528795288052881528825288352884528855288652887528885288952890528915289252893528945289552896528975289852899529005290152902529035290452905529065290752908529095291052911529125291352914529155291652917529185291952920529215292252923529245292552926529275292852929529305293152932529335293452935529365293752938529395294052941529425294352944529455294652947529485294952950529515295252953529545295552956529575295852959529605296152962529635296452965529665296752968529695297052971529725297352974529755297652977529785297952980529815298252983529845298552986529875298852989529905299152992529935299452995529965299752998529995300053001530025300353004530055300653007530085300953010530115301253013530145301553016530175301853019530205302153022530235302453025530265302753028530295303053031530325303353034530355303653037530385303953040530415304253043530445304553046530475304853049530505305153052530535305453055530565305753058530595306053061530625306353064530655306653067530685306953070530715307253073530745307553076530775307853079530805308153082530835308453085530865308753088530895309053091530925309353094530955309653097530985309953100531015310253103531045310553106531075310853109531105311153112531135311453115531165311753118531195312053121531225312353124531255312653127531285312953130531315313253133531345313553136531375313853139531405314153142531435314453145531465314753148531495315053151531525315353154531555315653157531585315953160531615316253163531645316553166531675316853169531705317153172531735317453175531765317753178531795318053181531825318353184531855318653187531885318953190531915319253193531945319553196531975319853199532005320153202532035320453205532065320753208532095321053211532125321353214532155321653217532185321953220532215322253223532245322553226532275322853229532305323153232532335323453235532365323753238532395324053241532425324353244532455324653247532485324953250532515325253253532545325553256532575325853259532605326153262532635326453265532665326753268532695327053271532725327353274532755327653277532785327953280532815328253283532845328553286532875328853289532905329153292532935329453295532965329753298532995330053301533025330353304533055330653307533085330953310533115331253313533145331553316533175331853319533205332153322533235332453325533265332753328533295333053331533325333353334533355333653337533385333953340533415334253343533445334553346533475334853349533505335153352533535335453355533565335753358533595336053361533625336353364533655336653367533685336953370533715337253373533745337553376533775337853379533805338153382533835338453385533865338753388533895339053391533925339353394533955339653397533985339953400534015340253403534045340553406534075340853409534105341153412534135341453415534165341753418534195342053421534225342353424534255342653427534285342953430534315343253433534345343553436534375343853439534405344153442534435344453445534465344753448534495345053451534525345353454534555345653457534585345953460534615346253463534645346553466534675346853469534705347153472534735347453475534765347753478534795348053481534825348353484534855348653487534885348953490534915349253493534945349553496534975349853499535005350153502535035350453505535065350753508535095351053511535125351353514535155351653517535185351953520535215352253523535245352553526535275352853529535305353153532535335353453535535365353753538535395354053541535425354353544535455354653547535485354953550535515355253553535545355553556535575355853559535605356153562535635356453565535665356753568535695357053571535725357353574535755357653577535785357953580535815358253583535845358553586535875358853589535905359153592535935359453595535965359753598535995360053601536025360353604536055360653607536085360953610536115361253613536145361553616536175361853619536205362153622536235362453625536265362753628536295363053631536325363353634536355363653637536385363953640536415364253643536445364553646536475364853649536505365153652536535365453655536565365753658536595366053661536625366353664536655366653667536685366953670536715367253673536745367553676536775367853679536805368153682536835368453685536865368753688536895369053691536925369353694536955369653697536985369953700537015370253703537045370553706537075370853709537105371153712537135371453715537165371753718537195372053721537225372353724537255372653727537285372953730537315373253733537345373553736537375373853739537405374153742537435374453745537465374753748537495375053751537525375353754537555375653757537585375953760537615376253763537645376553766537675376853769537705377153772537735377453775537765377753778537795378053781537825378353784537855378653787537885378953790537915379253793537945379553796537975379853799538005380153802538035380453805538065380753808538095381053811538125381353814538155381653817538185381953820538215382253823538245382553826538275382853829538305383153832538335383453835538365383753838538395384053841538425384353844538455384653847538485384953850538515385253853538545385553856538575385853859538605386153862538635386453865538665386753868538695387053871538725387353874538755387653877538785387953880538815388253883538845388553886538875388853889538905389153892538935389453895538965389753898538995390053901539025390353904539055390653907539085390953910539115391253913539145391553916539175391853919539205392153922539235392453925539265392753928539295393053931539325393353934539355393653937539385393953940539415394253943539445394553946539475394853949539505395153952539535395453955539565395753958539595396053961539625396353964539655396653967539685396953970539715397253973539745397553976539775397853979539805398153982539835398453985539865398753988539895399053991539925399353994539955399653997539985399954000540015400254003540045400554006540075400854009540105401154012540135401454015540165401754018540195402054021540225402354024540255402654027540285402954030540315403254033540345403554036540375403854039540405404154042540435404454045540465404754048540495405054051540525405354054540555405654057540585405954060540615406254063540645406554066540675406854069540705407154072540735407454075540765407754078540795408054081540825408354084540855408654087540885408954090540915409254093540945409554096540975409854099541005410154102541035410454105541065410754108541095411054111541125411354114541155411654117541185411954120541215412254123541245412554126541275412854129541305413154132541335413454135541365413754138541395414054141541425414354144541455414654147541485414954150541515415254153541545415554156541575415854159541605416154162541635416454165541665416754168541695417054171541725417354174541755417654177541785417954180541815418254183541845418554186541875418854189541905419154192541935419454195541965419754198541995420054201542025420354204542055420654207542085420954210542115421254213542145421554216542175421854219542205422154222542235422454225542265422754228542295423054231542325423354234542355423654237542385423954240542415424254243542445424554246542475424854249542505425154252542535425454255542565425754258542595426054261542625426354264542655426654267542685426954270542715427254273542745427554276542775427854279542805428154282542835428454285542865428754288542895429054291542925429354294542955429654297542985429954300543015430254303543045430554306543075430854309543105431154312543135431454315543165431754318543195432054321543225432354324543255432654327543285432954330543315433254333543345433554336543375433854339543405434154342543435434454345543465434754348543495435054351543525435354354543555435654357543585435954360543615436254363543645436554366543675436854369543705437154372543735437454375543765437754378543795438054381543825438354384543855438654387543885438954390543915439254393543945439554396543975439854399544005440154402544035440454405544065440754408544095441054411544125441354414544155441654417544185441954420544215442254423544245442554426544275442854429544305443154432544335443454435544365443754438544395444054441544425444354444544455444654447544485444954450544515445254453544545445554456544575445854459544605446154462544635446454465544665446754468544695447054471544725447354474544755447654477544785447954480544815448254483544845448554486544875448854489544905449154492544935449454495544965449754498544995450054501545025450354504545055450654507545085450954510545115451254513545145451554516545175451854519545205452154522545235452454525545265452754528545295453054531545325453354534545355453654537545385453954540545415454254543545445454554546545475454854549545505455154552545535455454555545565455754558545595456054561545625456354564545655456654567545685456954570545715457254573545745457554576545775457854579545805458154582545835458454585545865458754588545895459054591545925459354594545955459654597545985459954600546015460254603546045460554606546075460854609546105461154612546135461454615546165461754618546195462054621546225462354624546255462654627546285462954630546315463254633546345463554636546375463854639546405464154642546435464454645546465464754648546495465054651546525465354654546555465654657546585465954660546615466254663546645466554666546675466854669546705467154672546735467454675546765467754678546795468054681546825468354684546855468654687546885468954690546915469254693546945469554696546975469854699547005470154702547035470454705547065470754708547095471054711547125471354714547155471654717547185471954720547215472254723547245472554726547275472854729547305473154732547335473454735547365473754738547395474054741547425474354744547455474654747547485474954750547515475254753547545475554756547575475854759547605476154762547635476454765547665476754768547695477054771547725477354774547755477654777547785477954780547815478254783547845478554786547875478854789547905479154792547935479454795547965479754798547995480054801548025480354804548055480654807548085480954810548115481254813548145481554816548175481854819548205482154822548235482454825548265482754828548295483054831548325483354834548355483654837548385483954840548415484254843548445484554846548475484854849548505485154852548535485454855548565485754858548595486054861548625486354864548655486654867548685486954870548715487254873548745487554876548775487854879548805488154882548835488454885548865488754888548895489054891548925489354894548955489654897548985489954900549015490254903549045490554906549075490854909549105491154912549135491454915549165491754918549195492054921549225492354924549255492654927549285492954930549315493254933549345493554936549375493854939549405494154942549435494454945549465494754948549495495054951549525495354954549555495654957549585495954960549615496254963549645496554966549675496854969549705497154972549735497454975549765497754978549795498054981549825498354984549855498654987549885498954990549915499254993549945499554996549975499854999550005500155002550035500455005550065500755008550095501055011550125501355014550155501655017550185501955020550215502255023550245502555026550275502855029550305503155032550335503455035550365503755038550395504055041550425504355044550455504655047550485504955050550515505255053550545505555056550575505855059550605506155062550635506455065550665506755068550695507055071550725507355074550755507655077550785507955080550815508255083550845508555086550875508855089550905509155092550935509455095550965509755098550995510055101551025510355104551055510655107551085510955110551115511255113551145511555116551175511855119551205512155122551235512455125551265512755128551295513055131551325513355134551355513655137551385513955140551415514255143551445514555146551475514855149551505515155152551535515455155551565515755158551595516055161551625516355164551655516655167551685516955170551715517255173551745517555176551775517855179551805518155182551835518455185551865518755188551895519055191551925519355194551955519655197551985519955200552015520255203552045520555206552075520855209552105521155212552135521455215552165521755218552195522055221552225522355224552255522655227552285522955230552315523255233552345523555236552375523855239552405524155242552435524455245552465524755248552495525055251552525525355254552555525655257552585525955260552615526255263552645526555266552675526855269552705527155272552735527455275552765527755278552795528055281552825528355284552855528655287552885528955290552915529255293552945529555296552975529855299553005530155302553035530455305553065530755308553095531055311553125531355314553155531655317553185531955320553215532255323553245532555326553275532855329553305533155332553335533455335553365533755338553395534055341553425534355344553455534655347553485534955350553515535255353553545535555356553575535855359553605536155362553635536455365553665536755368553695537055371553725537355374553755537655377553785537955380553815538255383553845538555386553875538855389553905539155392553935539455395553965539755398553995540055401554025540355404554055540655407554085540955410554115541255413554145541555416554175541855419554205542155422554235542455425554265542755428554295543055431554325543355434554355543655437554385543955440554415544255443554445544555446554475544855449554505545155452554535545455455554565545755458554595546055461554625546355464554655546655467554685546955470554715547255473554745547555476554775547855479554805548155482554835548455485554865548755488554895549055491554925549355494554955549655497554985549955500555015550255503555045550555506555075550855509555105551155512555135551455515555165551755518555195552055521555225552355524555255552655527555285552955530555315553255533555345553555536555375553855539555405554155542555435554455545555465554755548555495555055551555525555355554555555555655557555585555955560555615556255563555645556555566555675556855569555705557155572555735557455575555765557755578555795558055581555825558355584555855558655587555885558955590555915559255593555945559555596555975559855599556005560155602556035560455605556065560755608556095561055611556125561355614556155561655617556185561955620556215562255623556245562555626556275562855629556305563155632556335563455635556365563755638556395564055641556425564355644556455564655647556485564955650556515565255653556545565555656556575565855659556605566155662556635566455665556665566755668556695567055671556725567355674556755567655677556785567955680556815568255683556845568555686556875568855689556905569155692556935569455695556965569755698556995570055701557025570355704557055570655707557085570955710557115571255713557145571555716557175571855719557205572155722557235572455725557265572755728557295573055731557325573355734557355573655737557385573955740557415574255743557445574555746557475574855749557505575155752557535575455755557565575755758557595576055761557625576355764557655576655767557685576955770557715577255773557745577555776557775577855779557805578155782557835578455785557865578755788557895579055791557925579355794557955579655797557985579955800558015580255803558045580555806558075580855809558105581155812558135581455815558165581755818558195582055821558225582355824558255582655827558285582955830558315583255833558345583555836558375583855839558405584155842558435584455845558465584755848558495585055851558525585355854558555585655857558585585955860558615586255863558645586555866558675586855869558705587155872558735587455875558765587755878558795588055881558825588355884558855588655887558885588955890558915589255893558945589555896558975589855899559005590155902559035590455905559065590755908559095591055911559125591355914559155591655917559185591955920559215592255923559245592555926559275592855929559305593155932559335593455935559365593755938559395594055941559425594355944559455594655947559485594955950559515595255953559545595555956559575595855959559605596155962559635596455965559665596755968559695597055971559725597355974559755597655977559785597955980559815598255983559845598555986559875598855989559905599155992559935599455995559965599755998559995600056001560025600356004560055600656007560085600956010560115601256013560145601556016560175601856019560205602156022560235602456025560265602756028560295603056031560325603356034560355603656037560385603956040560415604256043560445604556046560475604856049560505605156052560535605456055560565605756058560595606056061560625606356064560655606656067560685606956070560715607256073560745607556076560775607856079560805608156082560835608456085560865608756088560895609056091560925609356094560955609656097560985609956100561015610256103561045610556106561075610856109561105611156112561135611456115561165611756118561195612056121561225612356124561255612656127561285612956130561315613256133561345613556136561375613856139561405614156142561435614456145561465614756148561495615056151561525615356154561555615656157561585615956160561615616256163561645616556166561675616856169561705617156172561735617456175561765617756178561795618056181561825618356184561855618656187561885618956190561915619256193561945619556196561975619856199562005620156202562035620456205562065620756208562095621056211562125621356214562155621656217562185621956220562215622256223562245622556226562275622856229562305623156232562335623456235562365623756238562395624056241562425624356244562455624656247562485624956250562515625256253562545625556256562575625856259562605626156262562635626456265562665626756268562695627056271562725627356274562755627656277562785627956280562815628256283562845628556286562875628856289562905629156292562935629456295562965629756298562995630056301563025630356304563055630656307563085630956310563115631256313563145631556316563175631856319563205632156322563235632456325563265632756328563295633056331563325633356334563355633656337563385633956340563415634256343563445634556346563475634856349563505635156352563535635456355563565635756358563595636056361563625636356364563655636656367563685636956370563715637256373563745637556376563775637856379563805638156382563835638456385563865638756388563895639056391563925639356394563955639656397563985639956400564015640256403564045640556406564075640856409564105641156412564135641456415564165641756418564195642056421564225642356424564255642656427564285642956430564315643256433564345643556436564375643856439564405644156442564435644456445564465644756448564495645056451564525645356454564555645656457564585645956460564615646256463564645646556466564675646856469564705647156472564735647456475564765647756478564795648056481564825648356484564855648656487564885648956490564915649256493564945649556496564975649856499565005650156502565035650456505565065650756508565095651056511565125651356514565155651656517565185651956520565215652256523565245652556526565275652856529565305653156532565335653456535565365653756538565395654056541565425654356544565455654656547565485654956550565515655256553565545655556556565575655856559565605656156562565635656456565565665656756568565695657056571565725657356574565755657656577565785657956580565815658256583565845658556586565875658856589565905659156592565935659456595565965659756598565995660056601566025660356604566055660656607566085660956610566115661256613566145661556616566175661856619566205662156622566235662456625566265662756628566295663056631566325663356634566355663656637566385663956640566415664256643566445664556646566475664856649566505665156652566535665456655566565665756658566595666056661566625666356664566655666656667566685666956670566715667256673566745667556676566775667856679566805668156682566835668456685566865668756688566895669056691566925669356694566955669656697566985669956700567015670256703567045670556706567075670856709567105671156712567135671456715567165671756718567195672056721567225672356724567255672656727567285672956730567315673256733567345673556736567375673856739567405674156742567435674456745567465674756748567495675056751567525675356754567555675656757567585675956760567615676256763567645676556766567675676856769567705677156772567735677456775567765677756778567795678056781567825678356784567855678656787567885678956790567915679256793567945679556796567975679856799568005680156802568035680456805568065680756808568095681056811568125681356814568155681656817568185681956820568215682256823568245682556826568275682856829568305683156832568335683456835568365683756838568395684056841568425684356844568455684656847568485684956850568515685256853568545685556856568575685856859568605686156862568635686456865568665686756868568695687056871568725687356874568755687656877568785687956880568815688256883568845688556886568875688856889568905689156892568935689456895568965689756898568995690056901569025690356904569055690656907569085690956910569115691256913569145691556916569175691856919569205692156922569235692456925569265692756928569295693056931569325693356934569355693656937569385693956940569415694256943569445694556946569475694856949569505695156952569535695456955569565695756958569595696056961569625696356964569655696656967569685696956970569715697256973569745697556976569775697856979569805698156982569835698456985569865698756988569895699056991569925699356994569955699656997569985699957000570015700257003570045700557006570075700857009570105701157012570135701457015570165701757018570195702057021570225702357024570255702657027570285702957030570315703257033570345703557036570375703857039570405704157042570435704457045570465704757048570495705057051570525705357054570555705657057570585705957060570615706257063570645706557066570675706857069570705707157072570735707457075570765707757078570795708057081570825708357084570855708657087570885708957090570915709257093570945709557096570975709857099571005710157102571035710457105571065710757108571095711057111571125711357114571155711657117571185711957120571215712257123571245712557126571275712857129571305713157132571335713457135571365713757138571395714057141571425714357144571455714657147571485714957150571515715257153571545715557156571575715857159571605716157162571635716457165571665716757168571695717057171571725717357174571755717657177571785717957180571815718257183571845718557186571875718857189571905719157192571935719457195571965719757198571995720057201572025720357204572055720657207572085720957210572115721257213572145721557216572175721857219572205722157222572235722457225572265722757228572295723057231572325723357234572355723657237572385723957240572415724257243572445724557246572475724857249572505725157252572535725457255572565725757258572595726057261572625726357264572655726657267572685726957270572715727257273572745727557276572775727857279572805728157282572835728457285572865728757288572895729057291572925729357294572955729657297572985729957300573015730257303573045730557306573075730857309573105731157312573135731457315573165731757318573195732057321573225732357324573255732657327573285732957330573315733257333573345733557336573375733857339573405734157342573435734457345573465734757348573495735057351573525735357354573555735657357573585735957360573615736257363573645736557366573675736857369573705737157372573735737457375573765737757378573795738057381573825738357384573855738657387573885738957390573915739257393573945739557396573975739857399574005740157402574035740457405574065740757408574095741057411574125741357414574155741657417574185741957420574215742257423574245742557426574275742857429574305743157432574335743457435574365743757438574395744057441574425744357444574455744657447574485744957450574515745257453574545745557456574575745857459574605746157462574635746457465574665746757468574695747057471574725747357474574755747657477574785747957480574815748257483574845748557486574875748857489574905749157492574935749457495574965749757498574995750057501575025750357504575055750657507575085750957510575115751257513575145751557516575175751857519575205752157522575235752457525575265752757528575295753057531575325753357534575355753657537575385753957540575415754257543575445754557546575475754857549575505755157552575535755457555575565755757558575595756057561575625756357564575655756657567575685756957570575715757257573575745757557576575775757857579575805758157582575835758457585575865758757588575895759057591575925759357594575955759657597575985759957600576015760257603576045760557606576075760857609576105761157612576135761457615576165761757618576195762057621576225762357624576255762657627576285762957630576315763257633576345763557636576375763857639576405764157642576435764457645576465764757648576495765057651576525765357654576555765657657576585765957660576615766257663576645766557666576675766857669576705767157672576735767457675576765767757678576795768057681576825768357684576855768657687576885768957690576915769257693576945769557696576975769857699577005770157702577035770457705577065770757708577095771057711577125771357714577155771657717577185771957720577215772257723577245772557726577275772857729577305773157732577335773457735577365773757738577395774057741577425774357744577455774657747577485774957750577515775257753577545775557756577575775857759577605776157762577635776457765577665776757768577695777057771577725777357774577755777657777577785777957780577815778257783577845778557786577875778857789577905779157792577935779457795577965779757798577995780057801578025780357804578055780657807578085780957810578115781257813578145781557816578175781857819578205782157822578235782457825578265782757828578295783057831578325783357834578355783657837578385783957840578415784257843578445784557846578475784857849578505785157852578535785457855578565785757858578595786057861578625786357864578655786657867578685786957870578715787257873578745787557876578775787857879578805788157882578835788457885578865788757888578895789057891578925789357894578955789657897578985789957900579015790257903579045790557906579075790857909579105791157912579135791457915579165791757918579195792057921579225792357924579255792657927579285792957930579315793257933579345793557936579375793857939579405794157942579435794457945579465794757948579495795057951579525795357954579555795657957579585795957960579615796257963579645796557966579675796857969579705797157972579735797457975579765797757978579795798057981579825798357984579855798657987579885798957990579915799257993579945799557996579975799857999580005800158002580035800458005580065800758008580095801058011580125801358014580155801658017580185801958020580215802258023580245802558026580275802858029580305803158032580335803458035580365803758038580395804058041580425804358044580455804658047580485804958050580515805258053580545805558056580575805858059580605806158062580635806458065580665806758068580695807058071580725807358074580755807658077580785807958080580815808258083580845808558086580875808858089580905809158092580935809458095580965809758098580995810058101581025810358104581055810658107581085810958110581115811258113581145811558116581175811858119581205812158122581235812458125581265812758128581295813058131581325813358134581355813658137581385813958140581415814258143581445814558146581475814858149581505815158152581535815458155581565815758158581595816058161581625816358164581655816658167581685816958170581715817258173581745817558176581775817858179581805818158182581835818458185581865818758188581895819058191581925819358194581955819658197581985819958200582015820258203582045820558206582075820858209582105821158212582135821458215582165821758218582195822058221582225822358224582255822658227582285822958230582315823258233582345823558236582375823858239582405824158242582435824458245582465824758248582495825058251582525825358254582555825658257582585825958260582615826258263582645826558266582675826858269582705827158272582735827458275582765827758278582795828058281582825828358284582855828658287582885828958290582915829258293582945829558296582975829858299583005830158302583035830458305583065830758308583095831058311583125831358314583155831658317583185831958320583215832258323583245832558326583275832858329583305833158332583335833458335583365833758338583395834058341583425834358344583455834658347583485834958350583515835258353583545835558356583575835858359583605836158362583635836458365583665836758368583695837058371583725837358374583755837658377583785837958380583815838258383583845838558386583875838858389583905839158392583935839458395583965839758398583995840058401584025840358404584055840658407584085840958410584115841258413584145841558416584175841858419584205842158422584235842458425584265842758428584295843058431584325843358434584355843658437584385843958440584415844258443584445844558446584475844858449584505845158452584535845458455584565845758458584595846058461584625846358464584655846658467584685846958470584715847258473584745847558476584775847858479584805848158482584835848458485584865848758488584895849058491584925849358494584955849658497584985849958500585015850258503585045850558506585075850858509585105851158512585135851458515585165851758518585195852058521585225852358524585255852658527585285852958530585315853258533585345853558536585375853858539585405854158542585435854458545585465854758548585495855058551585525855358554585555855658557585585855958560585615856258563585645856558566585675856858569585705857158572585735857458575585765857758578585795858058581585825858358584585855858658587585885858958590585915859258593585945859558596585975859858599586005860158602586035860458605586065860758608586095861058611586125861358614586155861658617586185861958620586215862258623586245862558626586275862858629586305863158632586335863458635586365863758638586395864058641586425864358644586455864658647586485864958650586515865258653586545865558656586575865858659586605866158662586635866458665586665866758668586695867058671586725867358674586755867658677586785867958680586815868258683586845868558686586875868858689586905869158692586935869458695586965869758698586995870058701587025870358704587055870658707587085870958710587115871258713587145871558716587175871858719587205872158722587235872458725587265872758728587295873058731587325873358734587355873658737587385873958740587415874258743587445874558746587475874858749587505875158752587535875458755587565875758758587595876058761587625876358764587655876658767587685876958770587715877258773587745877558776587775877858779587805878158782587835878458785587865878758788587895879058791587925879358794587955879658797587985879958800588015880258803588045880558806588075880858809588105881158812588135881458815588165881758818588195882058821588225882358824588255882658827588285882958830588315883258833588345883558836588375883858839588405884158842588435884458845588465884758848588495885058851588525885358854588555885658857588585885958860588615886258863588645886558866588675886858869588705887158872588735887458875588765887758878588795888058881588825888358884588855888658887588885888958890588915889258893588945889558896588975889858899589005890158902589035890458905589065890758908589095891058911589125891358914589155891658917589185891958920589215892258923589245892558926589275892858929589305893158932589335893458935589365893758938589395894058941589425894358944589455894658947589485894958950589515895258953589545895558956589575895858959589605896158962589635896458965589665896758968589695897058971589725897358974589755897658977589785897958980589815898258983589845898558986589875898858989589905899158992589935899458995589965899758998589995900059001590025900359004590055900659007590085900959010590115901259013590145901559016590175901859019590205902159022590235902459025590265902759028590295903059031590325903359034590355903659037590385903959040590415904259043590445904559046590475904859049590505905159052590535905459055590565905759058590595906059061590625906359064590655906659067590685906959070590715907259073590745907559076590775907859079590805908159082590835908459085590865908759088590895909059091590925909359094590955909659097590985909959100591015910259103591045910559106591075910859109591105911159112591135911459115591165911759118591195912059121591225912359124591255912659127591285912959130591315913259133591345913559136591375913859139591405914159142591435914459145591465914759148591495915059151591525915359154591555915659157591585915959160591615916259163591645916559166591675916859169591705917159172591735917459175591765917759178591795918059181591825918359184591855918659187591885918959190591915919259193591945919559196591975919859199592005920159202592035920459205592065920759208592095921059211592125921359214592155921659217592185921959220592215922259223592245922559226592275922859229592305923159232592335923459235592365923759238592395924059241592425924359244592455924659247592485924959250592515925259253592545925559256592575925859259592605926159262592635926459265592665926759268592695927059271592725927359274592755927659277592785927959280592815928259283592845928559286592875928859289592905929159292592935929459295592965929759298592995930059301593025930359304593055930659307593085930959310593115931259313593145931559316593175931859319593205932159322593235932459325593265932759328593295933059331593325933359334593355933659337593385933959340593415934259343593445934559346593475934859349593505935159352593535935459355593565935759358593595936059361593625936359364593655936659367593685936959370593715937259373593745937559376593775937859379593805938159382593835938459385593865938759388593895939059391593925939359394593955939659397593985939959400594015940259403594045940559406594075940859409594105941159412594135941459415594165941759418594195942059421594225942359424594255942659427594285942959430594315943259433594345943559436594375943859439594405944159442594435944459445594465944759448594495945059451594525945359454594555945659457594585945959460594615946259463594645946559466594675946859469594705947159472594735947459475594765947759478594795948059481594825948359484594855948659487594885948959490594915949259493594945949559496594975949859499595005950159502595035950459505595065950759508595095951059511595125951359514595155951659517595185951959520595215952259523595245952559526595275952859529595305953159532595335953459535595365953759538595395954059541595425954359544595455954659547595485954959550595515955259553595545955559556595575955859559595605956159562595635956459565595665956759568595695957059571595725957359574595755957659577595785957959580595815958259583595845958559586595875958859589595905959159592595935959459595595965959759598595995960059601596025960359604596055960659607596085960959610596115961259613596145961559616596175961859619596205962159622596235962459625596265962759628596295963059631596325963359634596355963659637596385963959640596415964259643596445964559646596475964859649596505965159652596535965459655596565965759658596595966059661596625966359664596655966659667596685966959670596715967259673596745967559676596775967859679596805968159682596835968459685596865968759688596895969059691596925969359694596955969659697596985969959700597015970259703597045970559706597075970859709597105971159712597135971459715597165971759718597195972059721597225972359724597255972659727597285972959730597315973259733597345973559736597375973859739597405974159742597435974459745597465974759748597495975059751597525975359754597555975659757597585975959760597615976259763597645976559766597675976859769597705977159772597735977459775597765977759778597795978059781597825978359784597855978659787597885978959790597915979259793597945979559796597975979859799598005980159802598035980459805598065980759808598095981059811598125981359814598155981659817598185981959820598215982259823598245982559826598275982859829598305983159832598335983459835598365983759838598395984059841598425984359844598455984659847598485984959850598515985259853598545985559856598575985859859598605986159862598635986459865598665986759868598695987059871598725987359874598755987659877598785987959880598815988259883598845988559886598875988859889598905989159892598935989459895598965989759898598995990059901599025990359904599055990659907599085990959910599115991259913599145991559916599175991859919599205992159922599235992459925599265992759928599295993059931599325993359934599355993659937599385993959940599415994259943599445994559946599475994859949599505995159952599535995459955599565995759958599595996059961599625996359964599655996659967599685996959970599715997259973599745997559976599775997859979599805998159982599835998459985599865998759988599895999059991599925999359994599955999659997599985999960000600016000260003600046000560006600076000860009600106001160012600136001460015600166001760018600196002060021600226002360024600256002660027600286002960030600316003260033600346003560036600376003860039600406004160042600436004460045600466004760048600496005060051600526005360054600556005660057600586005960060600616006260063600646006560066600676006860069600706007160072600736007460075600766007760078600796008060081600826008360084600856008660087600886008960090600916009260093600946009560096600976009860099601006010160102601036010460105601066010760108601096011060111601126011360114601156011660117601186011960120601216012260123601246012560126601276012860129601306013160132601336013460135601366013760138601396014060141601426014360144601456014660147601486014960150601516015260153601546015560156601576015860159601606016160162601636016460165601666016760168601696017060171601726017360174601756017660177601786017960180601816018260183601846018560186601876018860189601906019160192601936019460195601966019760198601996020060201602026020360204602056020660207602086020960210602116021260213602146021560216602176021860219602206022160222602236022460225602266022760228602296023060231602326023360234602356023660237602386023960240602416024260243602446024560246602476024860249602506025160252602536025460255602566025760258602596026060261602626026360264602656026660267602686026960270602716027260273602746027560276602776027860279602806028160282602836028460285602866028760288602896029060291602926029360294602956029660297602986029960300603016030260303603046030560306603076030860309603106031160312603136031460315603166031760318603196032060321603226032360324603256032660327603286032960330603316033260333603346033560336603376033860339603406034160342603436034460345603466034760348603496035060351603526035360354603556035660357603586035960360603616036260363603646036560366603676036860369603706037160372603736037460375603766037760378603796038060381603826038360384603856038660387603886038960390603916039260393603946039560396603976039860399604006040160402604036040460405604066040760408604096041060411604126041360414604156041660417604186041960420604216042260423604246042560426604276042860429604306043160432604336043460435604366043760438604396044060441604426044360444604456044660447604486044960450604516045260453604546045560456604576045860459604606046160462604636046460465604666046760468604696047060471604726047360474604756047660477604786047960480604816048260483604846048560486604876048860489604906049160492604936049460495604966049760498604996050060501605026050360504605056050660507605086050960510605116051260513605146051560516605176051860519605206052160522605236052460525605266052760528605296053060531605326053360534605356053660537605386053960540605416054260543605446054560546605476054860549605506055160552605536055460555605566055760558605596056060561605626056360564605656056660567605686056960570605716057260573605746057560576605776057860579605806058160582605836058460585605866058760588605896059060591605926059360594605956059660597605986059960600606016060260603606046060560606606076060860609606106061160612606136061460615606166061760618606196062060621606226062360624606256062660627606286062960630606316063260633606346063560636606376063860639606406064160642606436064460645606466064760648606496065060651606526065360654606556065660657606586065960660606616066260663606646066560666606676066860669606706067160672606736067460675606766067760678606796068060681606826068360684606856068660687606886068960690606916069260693606946069560696606976069860699607006070160702607036070460705607066070760708607096071060711607126071360714607156071660717607186071960720607216072260723607246072560726607276072860729607306073160732607336073460735607366073760738607396074060741607426074360744607456074660747607486074960750607516075260753607546075560756607576075860759607606076160762607636076460765607666076760768607696077060771607726077360774607756077660777607786077960780607816078260783607846078560786607876078860789607906079160792607936079460795607966079760798607996080060801608026080360804608056080660807608086080960810608116081260813608146081560816608176081860819608206082160822608236082460825608266082760828608296083060831608326083360834608356083660837608386083960840608416084260843608446084560846608476084860849608506085160852608536085460855608566085760858608596086060861608626086360864608656086660867608686086960870608716087260873608746087560876608776087860879608806088160882608836088460885608866088760888608896089060891608926089360894608956089660897608986089960900609016090260903609046090560906609076090860909609106091160912609136091460915609166091760918609196092060921609226092360924609256092660927609286092960930609316093260933609346093560936609376093860939609406094160942609436094460945609466094760948609496095060951609526095360954609556095660957609586095960960609616096260963609646096560966609676096860969609706097160972609736097460975609766097760978609796098060981609826098360984609856098660987609886098960990609916099260993609946099560996609976099860999610006100161002610036100461005610066100761008610096101061011610126101361014610156101661017610186101961020610216102261023610246102561026610276102861029610306103161032610336103461035610366103761038610396104061041610426104361044610456104661047610486104961050610516105261053610546105561056610576105861059610606106161062610636106461065610666106761068610696107061071610726107361074610756107661077610786107961080610816108261083610846108561086610876108861089610906109161092610936109461095610966109761098610996110061101611026110361104611056110661107611086110961110611116111261113611146111561116611176111861119611206112161122611236112461125611266112761128611296113061131611326113361134611356113661137611386113961140611416114261143611446114561146611476114861149611506115161152611536115461155611566115761158611596116061161611626116361164611656116661167611686116961170611716117261173611746117561176611776117861179611806118161182611836118461185611866118761188611896119061191611926119361194611956119661197611986119961200612016120261203612046120561206612076120861209612106121161212612136121461215612166121761218612196122061221612226122361224612256122661227612286122961230612316123261233612346123561236612376123861239612406124161242612436124461245612466124761248612496125061251612526125361254612556125661257612586125961260612616126261263612646126561266612676126861269612706127161272612736127461275612766127761278612796128061281612826128361284612856128661287612886128961290612916129261293612946129561296612976129861299613006130161302613036130461305613066130761308613096131061311613126131361314613156131661317613186131961320613216132261323613246132561326613276132861329613306133161332613336133461335613366133761338613396134061341613426134361344613456134661347613486134961350613516135261353613546135561356613576135861359613606136161362613636136461365613666136761368613696137061371613726137361374613756137661377613786137961380613816138261383613846138561386613876138861389613906139161392613936139461395613966139761398613996140061401614026140361404614056140661407614086140961410614116141261413614146141561416614176141861419614206142161422614236142461425614266142761428614296143061431614326143361434614356143661437614386143961440614416144261443
  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 00018718 080002a0 080002a0 000012a0 2**4
  7. CONTENTS, ALLOC, LOAD, READONLY, CODE
  8. 2 .rodata 00000220 080189b8 080189b8 000199b8 2**2
  9. CONTENTS, ALLOC, LOAD, READONLY, DATA
  10. 3 .ARM 00000008 08018bd8 08018bd8 00019bd8 2**2
  11. CONTENTS, ALLOC, LOAD, READONLY, DATA
  12. 4 .init_array 00000004 08018be0 08018be0 00019be0 2**2
  13. CONTENTS, ALLOC, LOAD, READONLY, DATA
  14. 5 .fini_array 00000004 08018be4 08018be4 00019be4 2**2
  15. CONTENTS, ALLOC, LOAD, READONLY, DATA
  16. 6 .data 000000a4 24000000 08018be8 0001a000 2**2
  17. CONTENTS, ALLOC, LOAD, DATA
  18. 7 .bss 000130f4 240000c0 08018c8c 0001a0c0 2**5
  19. ALLOC
  20. 8 ._user_heap_stack 00000604 240131b4 08018c8c 0001a1b4 2**0
  21. ALLOC
  22. 9 .ARM.attributes 0000002e 00000000 00000000 0001a0a4 2**0
  23. CONTENTS, READONLY
  24. 10 .debug_info 000353b3 00000000 00000000 0001a0d2 2**0
  25. CONTENTS, READONLY, DEBUGGING, OCTETS
  26. 11 .debug_abbrev 000065d9 00000000 00000000 0004f485 2**0
  27. CONTENTS, READONLY, DEBUGGING, OCTETS
  28. 12 .debug_aranges 000024e8 00000000 00000000 00055a60 2**3
  29. CONTENTS, READONLY, DEBUGGING, OCTETS
  30. 13 .debug_macro 0003fa94 00000000 00000000 00057f48 2**0
  31. CONTENTS, READONLY, DEBUGGING, OCTETS
  32. 14 .debug_line 000318af 00000000 00000000 000979dc 2**0
  33. CONTENTS, READONLY, DEBUGGING, OCTETS
  34. 15 .debug_str 0018879d 00000000 00000000 000c928b 2**0
  35. CONTENTS, READONLY, DEBUGGING, OCTETS
  36. 16 .comment 00000043 00000000 00000000 00251a28 2**0
  37. CONTENTS, READONLY
  38. 17 .debug_rnglists 00001c67 00000000 00000000 00251a6b 2**0
  39. CONTENTS, READONLY, DEBUGGING, OCTETS
  40. 18 .debug_frame 0000a3a8 00000000 00000000 002536d4 2**2
  41. CONTENTS, READONLY, DEBUGGING, OCTETS
  42. 19 .debug_line_str 00000066 00000000 00000000 0025da7c 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: 080189a0 .word 0x080189a0
  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: 080189a0 .word 0x080189a0
  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 <__NVIC_SystemReset>:
  415. /**
  416. \brief System Reset
  417. \details Initiates a system reset request to reset the MCU.
  418. */
  419. __NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void)
  420. {
  421. 8000688: b480 push {r7}
  422. 800068a: af00 add r7, sp, #0
  423. \details Acts as a special kind of Data Memory Barrier.
  424. It completes when all explicit memory accesses before this instruction complete.
  425. */
  426. __STATIC_FORCEINLINE void __DSB(void)
  427. {
  428. __ASM volatile ("dsb 0xF":::"memory");
  429. 800068c: f3bf 8f4f dsb sy
  430. }
  431. 8000690: bf00 nop
  432. __DSB(); /* Ensure all outstanding memory accesses included
  433. buffered write are completed before reset */
  434. SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |
  435. (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |
  436. 8000692: 4b06 ldr r3, [pc, #24] @ (80006ac <__NVIC_SystemReset+0x24>)
  437. 8000694: 68db ldr r3, [r3, #12]
  438. 8000696: f403 62e0 and.w r2, r3, #1792 @ 0x700
  439. SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |
  440. 800069a: 4904 ldr r1, [pc, #16] @ (80006ac <__NVIC_SystemReset+0x24>)
  441. 800069c: 4b04 ldr r3, [pc, #16] @ (80006b0 <__NVIC_SystemReset+0x28>)
  442. 800069e: 4313 orrs r3, r2
  443. 80006a0: 60cb str r3, [r1, #12]
  444. __ASM volatile ("dsb 0xF":::"memory");
  445. 80006a2: f3bf 8f4f dsb sy
  446. }
  447. 80006a6: bf00 nop
  448. SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */
  449. __DSB(); /* Ensure completion of memory access */
  450. for(;;) /* wait until reset */
  451. {
  452. __NOP();
  453. 80006a8: bf00 nop
  454. 80006aa: e7fd b.n 80006a8 <__NVIC_SystemReset+0x20>
  455. 80006ac: e000ed00 .word 0xe000ed00
  456. 80006b0: 05fa0004 .word 0x05fa0004
  457. 080006b4 <ITM_SendChar>:
  458. \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted.
  459. \param [in] ch Character to transmit.
  460. \returns Character to transmit.
  461. */
  462. __STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch)
  463. {
  464. 80006b4: b480 push {r7}
  465. 80006b6: b083 sub sp, #12
  466. 80006b8: af00 add r7, sp, #0
  467. 80006ba: 6078 str r0, [r7, #4]
  468. if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */
  469. 80006bc: f04f 4360 mov.w r3, #3758096384 @ 0xe0000000
  470. 80006c0: f8d3 3e80 ldr.w r3, [r3, #3712] @ 0xe80
  471. 80006c4: f003 0301 and.w r3, r3, #1
  472. 80006c8: 2b00 cmp r3, #0
  473. 80006ca: d013 beq.n 80006f4 <ITM_SendChar+0x40>
  474. ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */
  475. 80006cc: f04f 4360 mov.w r3, #3758096384 @ 0xe0000000
  476. 80006d0: f8d3 3e00 ldr.w r3, [r3, #3584] @ 0xe00
  477. 80006d4: f003 0301 and.w r3, r3, #1
  478. if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */
  479. 80006d8: 2b00 cmp r3, #0
  480. 80006da: d00b beq.n 80006f4 <ITM_SendChar+0x40>
  481. {
  482. while (ITM->PORT[0U].u32 == 0UL)
  483. 80006dc: e000 b.n 80006e0 <ITM_SendChar+0x2c>
  484. {
  485. __NOP();
  486. 80006de: bf00 nop
  487. while (ITM->PORT[0U].u32 == 0UL)
  488. 80006e0: f04f 4360 mov.w r3, #3758096384 @ 0xe0000000
  489. 80006e4: 681b ldr r3, [r3, #0]
  490. 80006e6: 2b00 cmp r3, #0
  491. 80006e8: d0f9 beq.n 80006de <ITM_SendChar+0x2a>
  492. }
  493. ITM->PORT[0U].u8 = (uint8_t)ch;
  494. 80006ea: f04f 4360 mov.w r3, #3758096384 @ 0xe0000000
  495. 80006ee: 687a ldr r2, [r7, #4]
  496. 80006f0: b2d2 uxtb r2, r2
  497. 80006f2: 701a strb r2, [r3, #0]
  498. }
  499. return (ch);
  500. 80006f4: 687b ldr r3, [r7, #4]
  501. }
  502. 80006f6: 4618 mov r0, r3
  503. 80006f8: 370c adds r7, #12
  504. 80006fa: 46bd mov sp, r7
  505. 80006fc: f85d 7b04 ldr.w r7, [sp], #4
  506. 8000700: 4770 bx lr
  507. 08000702 <__io_putchar>:
  508. /* USER CODE END PFP */
  509. /* Private user code ---------------------------------------------------------*/
  510. /* USER CODE BEGIN 0 */
  511. int __io_putchar(int ch)
  512. {
  513. 8000702: b580 push {r7, lr}
  514. 8000704: b082 sub sp, #8
  515. 8000706: af00 add r7, sp, #0
  516. 8000708: 6078 str r0, [r7, #4]
  517. #if UART_TASK_LOGS
  518. // HAL_UART_Transmit(&huart8, (uint8_t *)&ch, 1, 0xFFFF); // Use UART8 as debug interface
  519. ITM_SendChar(ch); // Use SWV as debug interface
  520. 800070a: 687b ldr r3, [r7, #4]
  521. 800070c: 4618 mov r0, r3
  522. 800070e: f7ff ffd1 bl 80006b4 <ITM_SendChar>
  523. #endif
  524. return ch;
  525. 8000712: 687b ldr r3, [r7, #4]
  526. }
  527. 8000714: 4618 mov r0, r3
  528. 8000716: 3708 adds r7, #8
  529. 8000718: 46bd mov sp, r7
  530. 800071a: bd80 pop {r7, pc}
  531. 0800071c <HAL_GPIO_EXTI_Callback>:
  532. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
  533. {
  534. 800071c: b590 push {r4, r7, lr}
  535. 800071e: b085 sub sp, #20
  536. 8000720: af00 add r7, sp, #0
  537. 8000722: 4603 mov r3, r0
  538. 8000724: 80fb strh r3, [r7, #6]
  539. if((GPIO_Pin == GPIO_PIN_14) || (GPIO_Pin == GPIO_PIN_15))
  540. 8000726: 88fb ldrh r3, [r7, #6]
  541. 8000728: f5b3 4f80 cmp.w r3, #16384 @ 0x4000
  542. 800072c: d003 beq.n 8000736 <HAL_GPIO_EXTI_Callback+0x1a>
  543. 800072e: 88fb ldrh r3, [r7, #6]
  544. 8000730: f5b3 4f00 cmp.w r3, #32768 @ 0x8000
  545. 8000734: d11a bne.n 800076c <HAL_GPIO_EXTI_Callback+0x50>
  546. {
  547. uint32_t pinStates = ((HAL_GPIO_ReadPin(GPIOD, GPIO_PIN_15) << 1) | HAL_GPIO_ReadPin(GPIOD, GPIO_PIN_14)) & 0x3;
  548. 8000736: f44f 4100 mov.w r1, #32768 @ 0x8000
  549. 800073a: 481f ldr r0, [pc, #124] @ (80007b8 <HAL_GPIO_EXTI_Callback+0x9c>)
  550. 800073c: f00a fdc0 bl 800b2c0 <HAL_GPIO_ReadPin>
  551. 8000740: 4603 mov r3, r0
  552. 8000742: 005c lsls r4, r3, #1
  553. 8000744: f44f 4180 mov.w r1, #16384 @ 0x4000
  554. 8000748: 481b ldr r0, [pc, #108] @ (80007b8 <HAL_GPIO_EXTI_Callback+0x9c>)
  555. 800074a: f00a fdb9 bl 800b2c0 <HAL_GPIO_ReadPin>
  556. 800074e: 4603 mov r3, r0
  557. 8000750: 4323 orrs r3, r4
  558. 8000752: f003 0303 and.w r3, r3, #3
  559. 8000756: 60fb str r3, [r7, #12]
  560. osMessageQueuePut(encoderXTaskArg.dataQueue, &pinStates, 0, 0);
  561. 8000758: 4b18 ldr r3, [pc, #96] @ (80007bc <HAL_GPIO_EXTI_Callback+0xa0>)
  562. 800075a: 6918 ldr r0, [r3, #16]
  563. 800075c: f107 010c add.w r1, r7, #12
  564. 8000760: 2300 movs r3, #0
  565. 8000762: 2200 movs r2, #0
  566. 8000764: f013 fa5c bl 8013c20 <osMessageQueuePut>
  567. {
  568. 8000768: bf00 nop
  569. else if ((GPIO_Pin == GPIO_PIN_10) || (GPIO_Pin == GPIO_PIN_11))
  570. {
  571. uint32_t pinStates = ((HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_11) << 1) | HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_10)) & 0x3;
  572. osMessageQueuePut(encoderYTaskArg.dataQueue, &pinStates, 0, 0);
  573. }
  574. }
  575. 800076a: e020 b.n 80007ae <HAL_GPIO_EXTI_Callback+0x92>
  576. else if ((GPIO_Pin == GPIO_PIN_10) || (GPIO_Pin == GPIO_PIN_11))
  577. 800076c: 88fb ldrh r3, [r7, #6]
  578. 800076e: f5b3 6f80 cmp.w r3, #1024 @ 0x400
  579. 8000772: d003 beq.n 800077c <HAL_GPIO_EXTI_Callback+0x60>
  580. 8000774: 88fb ldrh r3, [r7, #6]
  581. 8000776: f5b3 6f00 cmp.w r3, #2048 @ 0x800
  582. 800077a: d118 bne.n 80007ae <HAL_GPIO_EXTI_Callback+0x92>
  583. uint32_t pinStates = ((HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_11) << 1) | HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_10)) & 0x3;
  584. 800077c: f44f 6100 mov.w r1, #2048 @ 0x800
  585. 8000780: 480f ldr r0, [pc, #60] @ (80007c0 <HAL_GPIO_EXTI_Callback+0xa4>)
  586. 8000782: f00a fd9d bl 800b2c0 <HAL_GPIO_ReadPin>
  587. 8000786: 4603 mov r3, r0
  588. 8000788: 005c lsls r4, r3, #1
  589. 800078a: f44f 6180 mov.w r1, #1024 @ 0x400
  590. 800078e: 480c ldr r0, [pc, #48] @ (80007c0 <HAL_GPIO_EXTI_Callback+0xa4>)
  591. 8000790: f00a fd96 bl 800b2c0 <HAL_GPIO_ReadPin>
  592. 8000794: 4603 mov r3, r0
  593. 8000796: 4323 orrs r3, r4
  594. 8000798: f003 0303 and.w r3, r3, #3
  595. 800079c: 60bb str r3, [r7, #8]
  596. osMessageQueuePut(encoderYTaskArg.dataQueue, &pinStates, 0, 0);
  597. 800079e: 4b09 ldr r3, [pc, #36] @ (80007c4 <HAL_GPIO_EXTI_Callback+0xa8>)
  598. 80007a0: 6918 ldr r0, [r3, #16]
  599. 80007a2: f107 0108 add.w r1, r7, #8
  600. 80007a6: 2300 movs r3, #0
  601. 80007a8: 2200 movs r2, #0
  602. 80007aa: f013 fa39 bl 8013c20 <osMessageQueuePut>
  603. }
  604. 80007ae: bf00 nop
  605. 80007b0: 3714 adds r7, #20
  606. 80007b2: 46bd mov sp, r7
  607. 80007b4: bd90 pop {r4, r7, pc}
  608. 80007b6: bf00 nop
  609. 80007b8: 58020c00 .word 0x58020c00
  610. 80007bc: 24000840 .word 0x24000840
  611. 80007c0: 58020400 .word 0x58020400
  612. 80007c4: 24000860 .word 0x24000860
  613. 080007c8 <main>:
  614. /**
  615. * @brief The application entry point.
  616. * @retval int
  617. */
  618. int main(void)
  619. {
  620. 80007c8: b580 push {r7, lr}
  621. 80007ca: b084 sub sp, #16
  622. 80007cc: af00 add r7, sp, #0
  623. /* USER CODE BEGIN 1 */
  624. /* USER CODE END 1 */
  625. /* MPU Configuration--------------------------------------------------------*/
  626. MPU_Config();
  627. 80007ce: f001 f977 bl 8001ac0 <MPU_Config>
  628. if (SCB->CCR & SCB_CCR_IC_Msk) return; /* return if ICache is already enabled */
  629. 80007d2: 4b5e ldr r3, [pc, #376] @ (800094c <main+0x184>)
  630. 80007d4: 695b ldr r3, [r3, #20]
  631. 80007d6: f403 3300 and.w r3, r3, #131072 @ 0x20000
  632. 80007da: 2b00 cmp r3, #0
  633. 80007dc: d11b bne.n 8000816 <main+0x4e>
  634. __ASM volatile ("dsb 0xF":::"memory");
  635. 80007de: f3bf 8f4f dsb sy
  636. }
  637. 80007e2: bf00 nop
  638. __ASM volatile ("isb 0xF":::"memory");
  639. 80007e4: f3bf 8f6f isb sy
  640. }
  641. 80007e8: bf00 nop
  642. SCB->ICIALLU = 0UL; /* invalidate I-Cache */
  643. 80007ea: 4b58 ldr r3, [pc, #352] @ (800094c <main+0x184>)
  644. 80007ec: 2200 movs r2, #0
  645. 80007ee: f8c3 2250 str.w r2, [r3, #592] @ 0x250
  646. __ASM volatile ("dsb 0xF":::"memory");
  647. 80007f2: f3bf 8f4f dsb sy
  648. }
  649. 80007f6: bf00 nop
  650. __ASM volatile ("isb 0xF":::"memory");
  651. 80007f8: f3bf 8f6f isb sy
  652. }
  653. 80007fc: bf00 nop
  654. SCB->CCR |= (uint32_t)SCB_CCR_IC_Msk; /* enable I-Cache */
  655. 80007fe: 4b53 ldr r3, [pc, #332] @ (800094c <main+0x184>)
  656. 8000800: 695b ldr r3, [r3, #20]
  657. 8000802: 4a52 ldr r2, [pc, #328] @ (800094c <main+0x184>)
  658. 8000804: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  659. 8000808: 6153 str r3, [r2, #20]
  660. __ASM volatile ("dsb 0xF":::"memory");
  661. 800080a: f3bf 8f4f dsb sy
  662. }
  663. 800080e: bf00 nop
  664. __ASM volatile ("isb 0xF":::"memory");
  665. 8000810: f3bf 8f6f isb sy
  666. }
  667. 8000814: e000 b.n 8000818 <main+0x50>
  668. if (SCB->CCR & SCB_CCR_IC_Msk) return; /* return if ICache is already enabled */
  669. 8000816: bf00 nop
  670. if (SCB->CCR & SCB_CCR_DC_Msk) return; /* return if DCache is already enabled */
  671. 8000818: 4b4c ldr r3, [pc, #304] @ (800094c <main+0x184>)
  672. 800081a: 695b ldr r3, [r3, #20]
  673. 800081c: f403 3380 and.w r3, r3, #65536 @ 0x10000
  674. 8000820: 2b00 cmp r3, #0
  675. 8000822: d138 bne.n 8000896 <main+0xce>
  676. SCB->CSSELR = 0U; /* select Level 1 data cache */
  677. 8000824: 4b49 ldr r3, [pc, #292] @ (800094c <main+0x184>)
  678. 8000826: 2200 movs r2, #0
  679. 8000828: f8c3 2084 str.w r2, [r3, #132] @ 0x84
  680. __ASM volatile ("dsb 0xF":::"memory");
  681. 800082c: f3bf 8f4f dsb sy
  682. }
  683. 8000830: bf00 nop
  684. ccsidr = SCB->CCSIDR;
  685. 8000832: 4b46 ldr r3, [pc, #280] @ (800094c <main+0x184>)
  686. 8000834: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  687. 8000838: 60fb str r3, [r7, #12]
  688. sets = (uint32_t)(CCSIDR_SETS(ccsidr));
  689. 800083a: 68fb ldr r3, [r7, #12]
  690. 800083c: 0b5b lsrs r3, r3, #13
  691. 800083e: f3c3 030e ubfx r3, r3, #0, #15
  692. 8000842: 60bb str r3, [r7, #8]
  693. ways = (uint32_t)(CCSIDR_WAYS(ccsidr));
  694. 8000844: 68fb ldr r3, [r7, #12]
  695. 8000846: 08db lsrs r3, r3, #3
  696. 8000848: f3c3 0309 ubfx r3, r3, #0, #10
  697. 800084c: 607b str r3, [r7, #4]
  698. SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) |
  699. 800084e: 68bb ldr r3, [r7, #8]
  700. 8000850: 015a lsls r2, r3, #5
  701. 8000852: f643 73e0 movw r3, #16352 @ 0x3fe0
  702. 8000856: 4013 ands r3, r2
  703. ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk) );
  704. 8000858: 687a ldr r2, [r7, #4]
  705. 800085a: 0792 lsls r2, r2, #30
  706. SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) |
  707. 800085c: 493b ldr r1, [pc, #236] @ (800094c <main+0x184>)
  708. 800085e: 4313 orrs r3, r2
  709. 8000860: f8c1 3260 str.w r3, [r1, #608] @ 0x260
  710. } while (ways-- != 0U);
  711. 8000864: 687b ldr r3, [r7, #4]
  712. 8000866: 1e5a subs r2, r3, #1
  713. 8000868: 607a str r2, [r7, #4]
  714. 800086a: 2b00 cmp r3, #0
  715. 800086c: d1ef bne.n 800084e <main+0x86>
  716. } while(sets-- != 0U);
  717. 800086e: 68bb ldr r3, [r7, #8]
  718. 8000870: 1e5a subs r2, r3, #1
  719. 8000872: 60ba str r2, [r7, #8]
  720. 8000874: 2b00 cmp r3, #0
  721. 8000876: d1e5 bne.n 8000844 <main+0x7c>
  722. __ASM volatile ("dsb 0xF":::"memory");
  723. 8000878: f3bf 8f4f dsb sy
  724. }
  725. 800087c: bf00 nop
  726. SCB->CCR |= (uint32_t)SCB_CCR_DC_Msk; /* enable D-Cache */
  727. 800087e: 4b33 ldr r3, [pc, #204] @ (800094c <main+0x184>)
  728. 8000880: 695b ldr r3, [r3, #20]
  729. 8000882: 4a32 ldr r2, [pc, #200] @ (800094c <main+0x184>)
  730. 8000884: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  731. 8000888: 6153 str r3, [r2, #20]
  732. __ASM volatile ("dsb 0xF":::"memory");
  733. 800088a: f3bf 8f4f dsb sy
  734. }
  735. 800088e: bf00 nop
  736. __ASM volatile ("isb 0xF":::"memory");
  737. 8000890: f3bf 8f6f isb sy
  738. }
  739. 8000894: e000 b.n 8000898 <main+0xd0>
  740. if (SCB->CCR & SCB_CCR_DC_Msk) return; /* return if DCache is already enabled */
  741. 8000896: bf00 nop
  742. SCB_EnableDCache();
  743. /* MCU Configuration--------------------------------------------------------*/
  744. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  745. HAL_Init();
  746. 8000898: f005 f93a bl 8005b10 <HAL_Init>
  747. /* USER CODE BEGIN Init */
  748. /* USER CODE END Init */
  749. /* Configure the system clock */
  750. SystemClock_Config();
  751. 800089c: f000 f876 bl 800098c <SystemClock_Config>
  752. /* Configure the peripherals common clocks */
  753. PeriphCommonClock_Config();
  754. 80008a0: f000 f8f2 bl 8000a88 <PeriphCommonClock_Config>
  755. /* USER CODE BEGIN SysInit */
  756. /* USER CODE END SysInit */
  757. /* Initialize all configured peripherals */
  758. MX_GPIO_Init();
  759. 80008a4: f000 fe62 bl 800156c <MX_GPIO_Init>
  760. MX_DMA_Init();
  761. 80008a8: f000 fe30 bl 800150c <MX_DMA_Init>
  762. MX_RNG_Init();
  763. 80008ac: f000 fbde bl 800106c <MX_RNG_Init>
  764. MX_USART1_UART_Init();
  765. 80008b0: f000 fddc bl 800146c <MX_USART1_UART_Init>
  766. MX_ADC1_Init();
  767. 80008b4: f000 f918 bl 8000ae8 <MX_ADC1_Init>
  768. MX_UART8_Init();
  769. 80008b8: f000 fd8c bl 80013d4 <MX_UART8_Init>
  770. MX_CRC_Init();
  771. 80008bc: f000 fb70 bl 8000fa0 <MX_CRC_Init>
  772. MX_ADC2_Init();
  773. 80008c0: f000 f9fc bl 8000cbc <MX_ADC2_Init>
  774. MX_ADC3_Init();
  775. 80008c4: f000 fa8e bl 8000de4 <MX_ADC3_Init>
  776. MX_TIM1_Init();
  777. 80008c8: f000 fbe6 bl 8001098 <MX_TIM1_Init>
  778. MX_TIM3_Init();
  779. 80008cc: f000 fc80 bl 80011d0 <MX_TIM3_Init>
  780. MX_DAC1_Init();
  781. 80008d0: f000 fb90 bl 8000ff4 <MX_DAC1_Init>
  782. MX_COMP1_Init();
  783. 80008d4: f000 fb36 bl 8000f44 <MX_COMP1_Init>
  784. MX_TIM8_Init();
  785. 80008d8: f000 fd26 bl 8001328 <MX_TIM8_Init>
  786. HAL_IWDG_Refresh(&hiwdg1);
  787. #endif
  788. /* USER CODE END 2 */
  789. /* Init scheduler */
  790. osKernelInitialize();
  791. 80008dc: f012 fe30 bl 8013540 <osKernelInitialize>
  792. /* add semaphores, ... */
  793. /* USER CODE END RTOS_SEMAPHORES */
  794. /* Create the timer(s) */
  795. /* creation of debugLedTimer */
  796. debugLedTimerHandle = osTimerNew(debugLedTimerCallback, osTimerOnce, NULL, &debugLedTimer_attributes);
  797. 80008e0: 4b1b ldr r3, [pc, #108] @ (8000950 <main+0x188>)
  798. 80008e2: 2200 movs r2, #0
  799. 80008e4: 2100 movs r1, #0
  800. 80008e6: 481b ldr r0, [pc, #108] @ (8000954 <main+0x18c>)
  801. 80008e8: f012 ff38 bl 801375c <osTimerNew>
  802. 80008ec: 4603 mov r3, r0
  803. 80008ee: 4a1a ldr r2, [pc, #104] @ (8000958 <main+0x190>)
  804. 80008f0: 6013 str r3, [r2, #0]
  805. /* creation of fanTimer */
  806. fanTimerHandle = osTimerNew(fanTimerCallback, osTimerOnce, NULL, &fanTimer_attributes);
  807. 80008f2: 4b1a ldr r3, [pc, #104] @ (800095c <main+0x194>)
  808. 80008f4: 2200 movs r2, #0
  809. 80008f6: 2100 movs r1, #0
  810. 80008f8: 4819 ldr r0, [pc, #100] @ (8000960 <main+0x198>)
  811. 80008fa: f012 ff2f bl 801375c <osTimerNew>
  812. 80008fe: 4603 mov r3, r0
  813. 8000900: 4a18 ldr r2, [pc, #96] @ (8000964 <main+0x19c>)
  814. 8000902: 6013 str r3, [r2, #0]
  815. /* creation of motorXTimer */
  816. motorXTimerHandle = osTimerNew(motorXTimerCallback, osTimerPeriodic, NULL, &motorXTimer_attributes);
  817. 8000904: 4b18 ldr r3, [pc, #96] @ (8000968 <main+0x1a0>)
  818. 8000906: 2200 movs r2, #0
  819. 8000908: 2101 movs r1, #1
  820. 800090a: 4818 ldr r0, [pc, #96] @ (800096c <main+0x1a4>)
  821. 800090c: f012 ff26 bl 801375c <osTimerNew>
  822. 8000910: 4603 mov r3, r0
  823. 8000912: 4a17 ldr r2, [pc, #92] @ (8000970 <main+0x1a8>)
  824. 8000914: 6013 str r3, [r2, #0]
  825. /* creation of motorYTimer */
  826. motorYTimerHandle = osTimerNew(motorYTimerCallback, osTimerPeriodic, NULL, &motorYTimer_attributes);
  827. 8000916: 4b17 ldr r3, [pc, #92] @ (8000974 <main+0x1ac>)
  828. 8000918: 2200 movs r2, #0
  829. 800091a: 2101 movs r1, #1
  830. 800091c: 4816 ldr r0, [pc, #88] @ (8000978 <main+0x1b0>)
  831. 800091e: f012 ff1d bl 801375c <osTimerNew>
  832. 8000922: 4603 mov r3, r0
  833. 8000924: 4a15 ldr r2, [pc, #84] @ (800097c <main+0x1b4>)
  834. 8000926: 6013 str r3, [r2, #0]
  835. /* add queues, ... */
  836. /* USER CODE END RTOS_QUEUES */
  837. /* Create the thread(s) */
  838. /* creation of defaultTask */
  839. defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes);
  840. 8000928: 4a15 ldr r2, [pc, #84] @ (8000980 <main+0x1b8>)
  841. 800092a: 2100 movs r1, #0
  842. 800092c: 4815 ldr r0, [pc, #84] @ (8000984 <main+0x1bc>)
  843. 800092e: f012 fe51 bl 80135d4 <osThreadNew>
  844. 8000932: 4603 mov r3, r0
  845. 8000934: 4a14 ldr r2, [pc, #80] @ (8000988 <main+0x1c0>)
  846. 8000936: 6013 str r3, [r2, #0]
  847. /* USER CODE BEGIN RTOS_THREADS */
  848. /* add threads, ... */
  849. #ifdef WATCHDOG_ENABLED
  850. HAL_IWDG_Refresh(&hiwdg1);
  851. #endif
  852. UartTasksInit();
  853. 8000938: f003 ffae bl 8004898 <UartTasksInit>
  854. #ifdef USER_MOCKS
  855. MockMeasurmetsTaskInit();
  856. #else
  857. MeasTasksInit();
  858. 800093c: f001 f94c bl 8001bd8 <MeasTasksInit>
  859. #endif
  860. PositionControlTaskInit();
  861. 8000940: f002 fc20 bl 8003184 <PositionControlTaskInit>
  862. /* USER CODE BEGIN RTOS_EVENTS */
  863. /* add events, ... */
  864. /* USER CODE END RTOS_EVENTS */
  865. /* Start scheduler */
  866. osKernelStart();
  867. 8000944: f012 fe20 bl 8013588 <osKernelStart>
  868. /* We should never get here as control is now taken by the scheduler */
  869. /* Infinite loop */
  870. /* USER CODE BEGIN WHILE */
  871. while (1)
  872. 8000948: bf00 nop
  873. 800094a: e7fd b.n 8000948 <main+0x180>
  874. 800094c: e000ed00 .word 0xe000ed00
  875. 8000950: 08018b1c .word 0x08018b1c
  876. 8000954: 08001a15 .word 0x08001a15
  877. 8000958: 2400065c .word 0x2400065c
  878. 800095c: 08018b2c .word 0x08018b2c
  879. 8000960: 08001a2d .word 0x08001a2d
  880. 8000964: 2400068c .word 0x2400068c
  881. 8000968: 08018b3c .word 0x08018b3c
  882. 800096c: 08001a49 .word 0x08001a49
  883. 8000970: 240006bc .word 0x240006bc
  884. 8000974: 08018b4c .word 0x08018b4c
  885. 8000978: 08001a85 .word 0x08001a85
  886. 800097c: 240006ec .word 0x240006ec
  887. 8000980: 08018af8 .word 0x08018af8
  888. 8000984: 080018e5 .word 0x080018e5
  889. 8000988: 24000658 .word 0x24000658
  890. 0800098c <SystemClock_Config>:
  891. /**
  892. * @brief System Clock Configuration
  893. * @retval None
  894. */
  895. void SystemClock_Config(void)
  896. {
  897. 800098c: b580 push {r7, lr}
  898. 800098e: b09c sub sp, #112 @ 0x70
  899. 8000990: af00 add r7, sp, #0
  900. RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  901. 8000992: f107 0324 add.w r3, r7, #36 @ 0x24
  902. 8000996: 224c movs r2, #76 @ 0x4c
  903. 8000998: 2100 movs r1, #0
  904. 800099a: 4618 mov r0, r3
  905. 800099c: f017 f976 bl 8017c8c <memset>
  906. RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  907. 80009a0: 1d3b adds r3, r7, #4
  908. 80009a2: 2220 movs r2, #32
  909. 80009a4: 2100 movs r1, #0
  910. 80009a6: 4618 mov r0, r3
  911. 80009a8: f017 f970 bl 8017c8c <memset>
  912. /** Supply configuration update enable
  913. */
  914. HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY);
  915. 80009ac: 2002 movs r0, #2
  916. 80009ae: f00a fd77 bl 800b4a0 <HAL_PWREx_ConfigSupply>
  917. /** Configure the main internal regulator output voltage
  918. */
  919. __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
  920. 80009b2: 2300 movs r3, #0
  921. 80009b4: 603b str r3, [r7, #0]
  922. 80009b6: 4b32 ldr r3, [pc, #200] @ (8000a80 <SystemClock_Config+0xf4>)
  923. 80009b8: 6adb ldr r3, [r3, #44] @ 0x2c
  924. 80009ba: 4a31 ldr r2, [pc, #196] @ (8000a80 <SystemClock_Config+0xf4>)
  925. 80009bc: f023 0301 bic.w r3, r3, #1
  926. 80009c0: 62d3 str r3, [r2, #44] @ 0x2c
  927. 80009c2: 4b2f ldr r3, [pc, #188] @ (8000a80 <SystemClock_Config+0xf4>)
  928. 80009c4: 6adb ldr r3, [r3, #44] @ 0x2c
  929. 80009c6: f003 0301 and.w r3, r3, #1
  930. 80009ca: 603b str r3, [r7, #0]
  931. 80009cc: 4b2d ldr r3, [pc, #180] @ (8000a84 <SystemClock_Config+0xf8>)
  932. 80009ce: 699b ldr r3, [r3, #24]
  933. 80009d0: 4a2c ldr r2, [pc, #176] @ (8000a84 <SystemClock_Config+0xf8>)
  934. 80009d2: f443 4340 orr.w r3, r3, #49152 @ 0xc000
  935. 80009d6: 6193 str r3, [r2, #24]
  936. 80009d8: 4b2a ldr r3, [pc, #168] @ (8000a84 <SystemClock_Config+0xf8>)
  937. 80009da: 699b ldr r3, [r3, #24]
  938. 80009dc: f403 4340 and.w r3, r3, #49152 @ 0xc000
  939. 80009e0: 603b str r3, [r7, #0]
  940. 80009e2: 683b ldr r3, [r7, #0]
  941. while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}
  942. 80009e4: bf00 nop
  943. 80009e6: 4b27 ldr r3, [pc, #156] @ (8000a84 <SystemClock_Config+0xf8>)
  944. 80009e8: 699b ldr r3, [r3, #24]
  945. 80009ea: f403 5300 and.w r3, r3, #8192 @ 0x2000
  946. 80009ee: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  947. 80009f2: d1f8 bne.n 80009e6 <SystemClock_Config+0x5a>
  948. /** Initializes the RCC Oscillators according to the specified parameters
  949. * in the RCC_OscInitTypeDef structure.
  950. */
  951. RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48|RCC_OSCILLATORTYPE_LSI
  952. 80009f4: 2329 movs r3, #41 @ 0x29
  953. 80009f6: 627b str r3, [r7, #36] @ 0x24
  954. |RCC_OSCILLATORTYPE_HSE;
  955. RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  956. 80009f8: f44f 3380 mov.w r3, #65536 @ 0x10000
  957. 80009fc: 62bb str r3, [r7, #40] @ 0x28
  958. RCC_OscInitStruct.LSIState = RCC_LSI_ON;
  959. 80009fe: 2301 movs r3, #1
  960. 8000a00: 63bb str r3, [r7, #56] @ 0x38
  961. RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
  962. 8000a02: 2301 movs r3, #1
  963. 8000a04: 63fb str r3, [r7, #60] @ 0x3c
  964. RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  965. 8000a06: 2302 movs r3, #2
  966. 8000a08: 64bb str r3, [r7, #72] @ 0x48
  967. RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  968. 8000a0a: 2302 movs r3, #2
  969. 8000a0c: 64fb str r3, [r7, #76] @ 0x4c
  970. RCC_OscInitStruct.PLL.PLLM = 5;
  971. 8000a0e: 2305 movs r3, #5
  972. 8000a10: 653b str r3, [r7, #80] @ 0x50
  973. RCC_OscInitStruct.PLL.PLLN = 160;
  974. 8000a12: 23a0 movs r3, #160 @ 0xa0
  975. 8000a14: 657b str r3, [r7, #84] @ 0x54
  976. RCC_OscInitStruct.PLL.PLLP = 2;
  977. 8000a16: 2302 movs r3, #2
  978. 8000a18: 65bb str r3, [r7, #88] @ 0x58
  979. RCC_OscInitStruct.PLL.PLLQ = 2;
  980. 8000a1a: 2302 movs r3, #2
  981. 8000a1c: 65fb str r3, [r7, #92] @ 0x5c
  982. RCC_OscInitStruct.PLL.PLLR = 2;
  983. 8000a1e: 2302 movs r3, #2
  984. 8000a20: 663b str r3, [r7, #96] @ 0x60
  985. RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2;
  986. 8000a22: 2308 movs r3, #8
  987. 8000a24: 667b str r3, [r7, #100] @ 0x64
  988. RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;
  989. 8000a26: 2300 movs r3, #0
  990. 8000a28: 66bb str r3, [r7, #104] @ 0x68
  991. RCC_OscInitStruct.PLL.PLLFRACN = 0;
  992. 8000a2a: 2300 movs r3, #0
  993. 8000a2c: 66fb str r3, [r7, #108] @ 0x6c
  994. if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  995. 8000a2e: f107 0324 add.w r3, r7, #36 @ 0x24
  996. 8000a32: 4618 mov r0, r3
  997. 8000a34: f00a fdf4 bl 800b620 <HAL_RCC_OscConfig>
  998. 8000a38: 4603 mov r3, r0
  999. 8000a3a: 2b00 cmp r3, #0
  1000. 8000a3c: d001 beq.n 8000a42 <SystemClock_Config+0xb6>
  1001. {
  1002. Error_Handler();
  1003. 8000a3e: f001 f8c5 bl 8001bcc <Error_Handler>
  1004. }
  1005. /** Initializes the CPU, AHB and APB buses clocks
  1006. */
  1007. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  1008. 8000a42: 233f movs r3, #63 @ 0x3f
  1009. 8000a44: 607b str r3, [r7, #4]
  1010. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2
  1011. |RCC_CLOCKTYPE_D3PCLK1|RCC_CLOCKTYPE_D1PCLK1;
  1012. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  1013. 8000a46: 2303 movs r3, #3
  1014. 8000a48: 60bb str r3, [r7, #8]
  1015. RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;
  1016. 8000a4a: 2300 movs r3, #0
  1017. 8000a4c: 60fb str r3, [r7, #12]
  1018. RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2;
  1019. 8000a4e: 2308 movs r3, #8
  1020. 8000a50: 613b str r3, [r7, #16]
  1021. RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2;
  1022. 8000a52: 2340 movs r3, #64 @ 0x40
  1023. 8000a54: 617b str r3, [r7, #20]
  1024. RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2;
  1025. 8000a56: 2340 movs r3, #64 @ 0x40
  1026. 8000a58: 61bb str r3, [r7, #24]
  1027. RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;
  1028. 8000a5a: f44f 6380 mov.w r3, #1024 @ 0x400
  1029. 8000a5e: 61fb str r3, [r7, #28]
  1030. RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;
  1031. 8000a60: 2340 movs r3, #64 @ 0x40
  1032. 8000a62: 623b str r3, [r7, #32]
  1033. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  1034. 8000a64: 1d3b adds r3, r7, #4
  1035. 8000a66: 2102 movs r1, #2
  1036. 8000a68: 4618 mov r0, r3
  1037. 8000a6a: f00b fa33 bl 800bed4 <HAL_RCC_ClockConfig>
  1038. 8000a6e: 4603 mov r3, r0
  1039. 8000a70: 2b00 cmp r3, #0
  1040. 8000a72: d001 beq.n 8000a78 <SystemClock_Config+0xec>
  1041. {
  1042. Error_Handler();
  1043. 8000a74: f001 f8aa bl 8001bcc <Error_Handler>
  1044. }
  1045. }
  1046. 8000a78: bf00 nop
  1047. 8000a7a: 3770 adds r7, #112 @ 0x70
  1048. 8000a7c: 46bd mov sp, r7
  1049. 8000a7e: bd80 pop {r7, pc}
  1050. 8000a80: 58000400 .word 0x58000400
  1051. 8000a84: 58024800 .word 0x58024800
  1052. 08000a88 <PeriphCommonClock_Config>:
  1053. /**
  1054. * @brief Peripherals Common Clock Configuration
  1055. * @retval None
  1056. */
  1057. void PeriphCommonClock_Config(void)
  1058. {
  1059. 8000a88: b580 push {r7, lr}
  1060. 8000a8a: b0b0 sub sp, #192 @ 0xc0
  1061. 8000a8c: af00 add r7, sp, #0
  1062. RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
  1063. 8000a8e: 463b mov r3, r7
  1064. 8000a90: 22c0 movs r2, #192 @ 0xc0
  1065. 8000a92: 2100 movs r1, #0
  1066. 8000a94: 4618 mov r0, r3
  1067. 8000a96: f017 f8f9 bl 8017c8c <memset>
  1068. /** Initializes the peripherals clock
  1069. */
  1070. PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_ADC;
  1071. 8000a9a: f44f 2200 mov.w r2, #524288 @ 0x80000
  1072. 8000a9e: f04f 0300 mov.w r3, #0
  1073. 8000aa2: e9c7 2300 strd r2, r3, [r7]
  1074. PeriphClkInitStruct.PLL2.PLL2M = 5;
  1075. 8000aa6: 2305 movs r3, #5
  1076. 8000aa8: 60bb str r3, [r7, #8]
  1077. PeriphClkInitStruct.PLL2.PLL2N = 52;
  1078. 8000aaa: 2334 movs r3, #52 @ 0x34
  1079. 8000aac: 60fb str r3, [r7, #12]
  1080. PeriphClkInitStruct.PLL2.PLL2P = 26;
  1081. 8000aae: 231a movs r3, #26
  1082. 8000ab0: 613b str r3, [r7, #16]
  1083. PeriphClkInitStruct.PLL2.PLL2Q = 2;
  1084. 8000ab2: 2302 movs r3, #2
  1085. 8000ab4: 617b str r3, [r7, #20]
  1086. PeriphClkInitStruct.PLL2.PLL2R = 2;
  1087. 8000ab6: 2302 movs r3, #2
  1088. 8000ab8: 61bb str r3, [r7, #24]
  1089. PeriphClkInitStruct.PLL2.PLL2RGE = RCC_PLL2VCIRANGE_2;
  1090. 8000aba: 2380 movs r3, #128 @ 0x80
  1091. 8000abc: 61fb str r3, [r7, #28]
  1092. PeriphClkInitStruct.PLL2.PLL2VCOSEL = RCC_PLL2VCOWIDE;
  1093. 8000abe: 2300 movs r3, #0
  1094. 8000ac0: 623b str r3, [r7, #32]
  1095. PeriphClkInitStruct.PLL2.PLL2FRACN = 0;
  1096. 8000ac2: 2300 movs r3, #0
  1097. 8000ac4: 627b str r3, [r7, #36] @ 0x24
  1098. PeriphClkInitStruct.AdcClockSelection = RCC_ADCCLKSOURCE_PLL2;
  1099. 8000ac6: 2300 movs r3, #0
  1100. 8000ac8: f8c7 30a4 str.w r3, [r7, #164] @ 0xa4
  1101. if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
  1102. 8000acc: 463b mov r3, r7
  1103. 8000ace: 4618 mov r0, r3
  1104. 8000ad0: f00b fdce bl 800c670 <HAL_RCCEx_PeriphCLKConfig>
  1105. 8000ad4: 4603 mov r3, r0
  1106. 8000ad6: 2b00 cmp r3, #0
  1107. 8000ad8: d001 beq.n 8000ade <PeriphCommonClock_Config+0x56>
  1108. {
  1109. Error_Handler();
  1110. 8000ada: f001 f877 bl 8001bcc <Error_Handler>
  1111. }
  1112. }
  1113. 8000ade: bf00 nop
  1114. 8000ae0: 37c0 adds r7, #192 @ 0xc0
  1115. 8000ae2: 46bd mov sp, r7
  1116. 8000ae4: bd80 pop {r7, pc}
  1117. ...
  1118. 08000ae8 <MX_ADC1_Init>:
  1119. * @brief ADC1 Initialization Function
  1120. * @param None
  1121. * @retval None
  1122. */
  1123. static void MX_ADC1_Init(void)
  1124. {
  1125. 8000ae8: b580 push {r7, lr}
  1126. 8000aea: b08a sub sp, #40 @ 0x28
  1127. 8000aec: af00 add r7, sp, #0
  1128. /* USER CODE BEGIN ADC1_Init 0 */
  1129. /* USER CODE END ADC1_Init 0 */
  1130. ADC_MultiModeTypeDef multimode = {0};
  1131. 8000aee: f107 031c add.w r3, r7, #28
  1132. 8000af2: 2200 movs r2, #0
  1133. 8000af4: 601a str r2, [r3, #0]
  1134. 8000af6: 605a str r2, [r3, #4]
  1135. 8000af8: 609a str r2, [r3, #8]
  1136. ADC_ChannelConfTypeDef sConfig = {0};
  1137. 8000afa: 463b mov r3, r7
  1138. 8000afc: 2200 movs r2, #0
  1139. 8000afe: 601a str r2, [r3, #0]
  1140. 8000b00: 605a str r2, [r3, #4]
  1141. 8000b02: 609a str r2, [r3, #8]
  1142. 8000b04: 60da str r2, [r3, #12]
  1143. 8000b06: 611a str r2, [r3, #16]
  1144. 8000b08: 615a str r2, [r3, #20]
  1145. 8000b0a: 619a str r2, [r3, #24]
  1146. /* USER CODE END ADC1_Init 1 */
  1147. /** Common config
  1148. */
  1149. hadc1.Instance = ADC1;
  1150. 8000b0c: 4b62 ldr r3, [pc, #392] @ (8000c98 <MX_ADC1_Init+0x1b0>)
  1151. 8000b0e: 4a63 ldr r2, [pc, #396] @ (8000c9c <MX_ADC1_Init+0x1b4>)
  1152. 8000b10: 601a str r2, [r3, #0]
  1153. hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
  1154. 8000b12: 4b61 ldr r3, [pc, #388] @ (8000c98 <MX_ADC1_Init+0x1b0>)
  1155. 8000b14: 2200 movs r2, #0
  1156. 8000b16: 605a str r2, [r3, #4]
  1157. hadc1.Init.Resolution = ADC_RESOLUTION_16B;
  1158. 8000b18: 4b5f ldr r3, [pc, #380] @ (8000c98 <MX_ADC1_Init+0x1b0>)
  1159. 8000b1a: 2200 movs r2, #0
  1160. 8000b1c: 609a str r2, [r3, #8]
  1161. hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
  1162. 8000b1e: 4b5e ldr r3, [pc, #376] @ (8000c98 <MX_ADC1_Init+0x1b0>)
  1163. 8000b20: 2201 movs r2, #1
  1164. 8000b22: 60da str r2, [r3, #12]
  1165. hadc1.Init.EOCSelection = ADC_EOC_SEQ_CONV;
  1166. 8000b24: 4b5c ldr r3, [pc, #368] @ (8000c98 <MX_ADC1_Init+0x1b0>)
  1167. 8000b26: 2208 movs r2, #8
  1168. 8000b28: 611a str r2, [r3, #16]
  1169. hadc1.Init.LowPowerAutoWait = DISABLE;
  1170. 8000b2a: 4b5b ldr r3, [pc, #364] @ (8000c98 <MX_ADC1_Init+0x1b0>)
  1171. 8000b2c: 2200 movs r2, #0
  1172. 8000b2e: 751a strb r2, [r3, #20]
  1173. hadc1.Init.ContinuousConvMode = ENABLE;
  1174. 8000b30: 4b59 ldr r3, [pc, #356] @ (8000c98 <MX_ADC1_Init+0x1b0>)
  1175. 8000b32: 2201 movs r2, #1
  1176. 8000b34: 755a strb r2, [r3, #21]
  1177. hadc1.Init.NbrOfConversion = 7;
  1178. 8000b36: 4b58 ldr r3, [pc, #352] @ (8000c98 <MX_ADC1_Init+0x1b0>)
  1179. 8000b38: 2207 movs r2, #7
  1180. 8000b3a: 619a str r2, [r3, #24]
  1181. hadc1.Init.DiscontinuousConvMode = DISABLE;
  1182. 8000b3c: 4b56 ldr r3, [pc, #344] @ (8000c98 <MX_ADC1_Init+0x1b0>)
  1183. 8000b3e: 2200 movs r2, #0
  1184. 8000b40: 771a strb r2, [r3, #28]
  1185. hadc1.Init.ExternalTrigConv = ADC_EXTERNALTRIG_T8_TRGO;
  1186. 8000b42: 4b55 ldr r3, [pc, #340] @ (8000c98 <MX_ADC1_Init+0x1b0>)
  1187. 8000b44: f44f 629c mov.w r2, #1248 @ 0x4e0
  1188. 8000b48: 625a str r2, [r3, #36] @ 0x24
  1189. hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING;
  1190. 8000b4a: 4b53 ldr r3, [pc, #332] @ (8000c98 <MX_ADC1_Init+0x1b0>)
  1191. 8000b4c: f44f 6280 mov.w r2, #1024 @ 0x400
  1192. 8000b50: 629a str r2, [r3, #40] @ 0x28
  1193. hadc1.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DMA_ONESHOT;
  1194. 8000b52: 4b51 ldr r3, [pc, #324] @ (8000c98 <MX_ADC1_Init+0x1b0>)
  1195. 8000b54: 2201 movs r2, #1
  1196. 8000b56: 62da str r2, [r3, #44] @ 0x2c
  1197. hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
  1198. 8000b58: 4b4f ldr r3, [pc, #316] @ (8000c98 <MX_ADC1_Init+0x1b0>)
  1199. 8000b5a: 2200 movs r2, #0
  1200. 8000b5c: 631a str r2, [r3, #48] @ 0x30
  1201. hadc1.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE;
  1202. 8000b5e: 4b4e ldr r3, [pc, #312] @ (8000c98 <MX_ADC1_Init+0x1b0>)
  1203. 8000b60: 2200 movs r2, #0
  1204. 8000b62: 635a str r2, [r3, #52] @ 0x34
  1205. hadc1.Init.OversamplingMode = DISABLE;
  1206. 8000b64: 4b4c ldr r3, [pc, #304] @ (8000c98 <MX_ADC1_Init+0x1b0>)
  1207. 8000b66: 2200 movs r2, #0
  1208. 8000b68: f883 2038 strb.w r2, [r3, #56] @ 0x38
  1209. if (HAL_ADC_Init(&hadc1) != HAL_OK)
  1210. 8000b6c: 484a ldr r0, [pc, #296] @ (8000c98 <MX_ADC1_Init+0x1b0>)
  1211. 8000b6e: f005 fa7f bl 8006070 <HAL_ADC_Init>
  1212. 8000b72: 4603 mov r3, r0
  1213. 8000b74: 2b00 cmp r3, #0
  1214. 8000b76: d001 beq.n 8000b7c <MX_ADC1_Init+0x94>
  1215. {
  1216. Error_Handler();
  1217. 8000b78: f001 f828 bl 8001bcc <Error_Handler>
  1218. }
  1219. /** Configure the ADC multi-mode
  1220. */
  1221. multimode.Mode = ADC_MODE_INDEPENDENT;
  1222. 8000b7c: 2300 movs r3, #0
  1223. 8000b7e: 61fb str r3, [r7, #28]
  1224. if (HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode) != HAL_OK)
  1225. 8000b80: f107 031c add.w r3, r7, #28
  1226. 8000b84: 4619 mov r1, r3
  1227. 8000b86: 4844 ldr r0, [pc, #272] @ (8000c98 <MX_ADC1_Init+0x1b0>)
  1228. 8000b88: f006 fb90 bl 80072ac <HAL_ADCEx_MultiModeConfigChannel>
  1229. 8000b8c: 4603 mov r3, r0
  1230. 8000b8e: 2b00 cmp r3, #0
  1231. 8000b90: d001 beq.n 8000b96 <MX_ADC1_Init+0xae>
  1232. {
  1233. Error_Handler();
  1234. 8000b92: f001 f81b bl 8001bcc <Error_Handler>
  1235. }
  1236. /** Configure Regular Channel
  1237. */
  1238. sConfig.Channel = ADC_CHANNEL_8;
  1239. 8000b96: 4b42 ldr r3, [pc, #264] @ (8000ca0 <MX_ADC1_Init+0x1b8>)
  1240. 8000b98: 603b str r3, [r7, #0]
  1241. sConfig.Rank = ADC_REGULAR_RANK_1;
  1242. 8000b9a: 2306 movs r3, #6
  1243. 8000b9c: 607b str r3, [r7, #4]
  1244. sConfig.SamplingTime = ADC_SAMPLETIME_387CYCLES_5;
  1245. 8000b9e: 2306 movs r3, #6
  1246. 8000ba0: 60bb str r3, [r7, #8]
  1247. sConfig.SingleDiff = ADC_SINGLE_ENDED;
  1248. 8000ba2: f240 73ff movw r3, #2047 @ 0x7ff
  1249. 8000ba6: 60fb str r3, [r7, #12]
  1250. sConfig.OffsetNumber = ADC_OFFSET_NONE;
  1251. 8000ba8: 2304 movs r3, #4
  1252. 8000baa: 613b str r3, [r7, #16]
  1253. sConfig.Offset = 0;
  1254. 8000bac: 2300 movs r3, #0
  1255. 8000bae: 617b str r3, [r7, #20]
  1256. sConfig.OffsetSignedSaturation = DISABLE;
  1257. 8000bb0: 2300 movs r3, #0
  1258. 8000bb2: 767b strb r3, [r7, #25]
  1259. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  1260. 8000bb4: 463b mov r3, r7
  1261. 8000bb6: 4619 mov r1, r3
  1262. 8000bb8: 4837 ldr r0, [pc, #220] @ (8000c98 <MX_ADC1_Init+0x1b0>)
  1263. 8000bba: f005 fcd3 bl 8006564 <HAL_ADC_ConfigChannel>
  1264. 8000bbe: 4603 mov r3, r0
  1265. 8000bc0: 2b00 cmp r3, #0
  1266. 8000bc2: d001 beq.n 8000bc8 <MX_ADC1_Init+0xe0>
  1267. {
  1268. Error_Handler();
  1269. 8000bc4: f001 f802 bl 8001bcc <Error_Handler>
  1270. }
  1271. /** Configure Regular Channel
  1272. */
  1273. sConfig.Channel = ADC_CHANNEL_7;
  1274. 8000bc8: 4b36 ldr r3, [pc, #216] @ (8000ca4 <MX_ADC1_Init+0x1bc>)
  1275. 8000bca: 603b str r3, [r7, #0]
  1276. sConfig.Rank = ADC_REGULAR_RANK_2;
  1277. 8000bcc: 230c movs r3, #12
  1278. 8000bce: 607b str r3, [r7, #4]
  1279. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  1280. 8000bd0: 463b mov r3, r7
  1281. 8000bd2: 4619 mov r1, r3
  1282. 8000bd4: 4830 ldr r0, [pc, #192] @ (8000c98 <MX_ADC1_Init+0x1b0>)
  1283. 8000bd6: f005 fcc5 bl 8006564 <HAL_ADC_ConfigChannel>
  1284. 8000bda: 4603 mov r3, r0
  1285. 8000bdc: 2b00 cmp r3, #0
  1286. 8000bde: d001 beq.n 8000be4 <MX_ADC1_Init+0xfc>
  1287. {
  1288. Error_Handler();
  1289. 8000be0: f000 fff4 bl 8001bcc <Error_Handler>
  1290. }
  1291. /** Configure Regular Channel
  1292. */
  1293. sConfig.Channel = ADC_CHANNEL_9;
  1294. 8000be4: 4b30 ldr r3, [pc, #192] @ (8000ca8 <MX_ADC1_Init+0x1c0>)
  1295. 8000be6: 603b str r3, [r7, #0]
  1296. sConfig.Rank = ADC_REGULAR_RANK_3;
  1297. 8000be8: 2312 movs r3, #18
  1298. 8000bea: 607b str r3, [r7, #4]
  1299. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  1300. 8000bec: 463b mov r3, r7
  1301. 8000bee: 4619 mov r1, r3
  1302. 8000bf0: 4829 ldr r0, [pc, #164] @ (8000c98 <MX_ADC1_Init+0x1b0>)
  1303. 8000bf2: f005 fcb7 bl 8006564 <HAL_ADC_ConfigChannel>
  1304. 8000bf6: 4603 mov r3, r0
  1305. 8000bf8: 2b00 cmp r3, #0
  1306. 8000bfa: d001 beq.n 8000c00 <MX_ADC1_Init+0x118>
  1307. {
  1308. Error_Handler();
  1309. 8000bfc: f000 ffe6 bl 8001bcc <Error_Handler>
  1310. }
  1311. /** Configure Regular Channel
  1312. */
  1313. sConfig.Channel = ADC_CHANNEL_16;
  1314. 8000c00: 4b2a ldr r3, [pc, #168] @ (8000cac <MX_ADC1_Init+0x1c4>)
  1315. 8000c02: 603b str r3, [r7, #0]
  1316. sConfig.Rank = ADC_REGULAR_RANK_4;
  1317. 8000c04: 2318 movs r3, #24
  1318. 8000c06: 607b str r3, [r7, #4]
  1319. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  1320. 8000c08: 463b mov r3, r7
  1321. 8000c0a: 4619 mov r1, r3
  1322. 8000c0c: 4822 ldr r0, [pc, #136] @ (8000c98 <MX_ADC1_Init+0x1b0>)
  1323. 8000c0e: f005 fca9 bl 8006564 <HAL_ADC_ConfigChannel>
  1324. 8000c12: 4603 mov r3, r0
  1325. 8000c14: 2b00 cmp r3, #0
  1326. 8000c16: d001 beq.n 8000c1c <MX_ADC1_Init+0x134>
  1327. {
  1328. Error_Handler();
  1329. 8000c18: f000 ffd8 bl 8001bcc <Error_Handler>
  1330. }
  1331. /** Configure Regular Channel
  1332. */
  1333. sConfig.Channel = ADC_CHANNEL_17;
  1334. 8000c1c: 4b24 ldr r3, [pc, #144] @ (8000cb0 <MX_ADC1_Init+0x1c8>)
  1335. 8000c1e: 603b str r3, [r7, #0]
  1336. sConfig.Rank = ADC_REGULAR_RANK_5;
  1337. 8000c20: f44f 7380 mov.w r3, #256 @ 0x100
  1338. 8000c24: 607b str r3, [r7, #4]
  1339. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  1340. 8000c26: 463b mov r3, r7
  1341. 8000c28: 4619 mov r1, r3
  1342. 8000c2a: 481b ldr r0, [pc, #108] @ (8000c98 <MX_ADC1_Init+0x1b0>)
  1343. 8000c2c: f005 fc9a bl 8006564 <HAL_ADC_ConfigChannel>
  1344. 8000c30: 4603 mov r3, r0
  1345. 8000c32: 2b00 cmp r3, #0
  1346. 8000c34: d001 beq.n 8000c3a <MX_ADC1_Init+0x152>
  1347. {
  1348. Error_Handler();
  1349. 8000c36: f000 ffc9 bl 8001bcc <Error_Handler>
  1350. }
  1351. /** Configure Regular Channel
  1352. */
  1353. sConfig.Channel = ADC_CHANNEL_14;
  1354. 8000c3a: 4b1e ldr r3, [pc, #120] @ (8000cb4 <MX_ADC1_Init+0x1cc>)
  1355. 8000c3c: 603b str r3, [r7, #0]
  1356. sConfig.Rank = ADC_REGULAR_RANK_6;
  1357. 8000c3e: f44f 7383 mov.w r3, #262 @ 0x106
  1358. 8000c42: 607b str r3, [r7, #4]
  1359. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  1360. 8000c44: 463b mov r3, r7
  1361. 8000c46: 4619 mov r1, r3
  1362. 8000c48: 4813 ldr r0, [pc, #76] @ (8000c98 <MX_ADC1_Init+0x1b0>)
  1363. 8000c4a: f005 fc8b bl 8006564 <HAL_ADC_ConfigChannel>
  1364. 8000c4e: 4603 mov r3, r0
  1365. 8000c50: 2b00 cmp r3, #0
  1366. 8000c52: d001 beq.n 8000c58 <MX_ADC1_Init+0x170>
  1367. {
  1368. Error_Handler();
  1369. 8000c54: f000 ffba bl 8001bcc <Error_Handler>
  1370. }
  1371. /** Configure Regular Channel
  1372. */
  1373. sConfig.Channel = ADC_CHANNEL_15;
  1374. 8000c58: 4b17 ldr r3, [pc, #92] @ (8000cb8 <MX_ADC1_Init+0x1d0>)
  1375. 8000c5a: 603b str r3, [r7, #0]
  1376. sConfig.Rank = ADC_REGULAR_RANK_7;
  1377. 8000c5c: f44f 7386 mov.w r3, #268 @ 0x10c
  1378. 8000c60: 607b str r3, [r7, #4]
  1379. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  1380. 8000c62: 463b mov r3, r7
  1381. 8000c64: 4619 mov r1, r3
  1382. 8000c66: 480c ldr r0, [pc, #48] @ (8000c98 <MX_ADC1_Init+0x1b0>)
  1383. 8000c68: f005 fc7c bl 8006564 <HAL_ADC_ConfigChannel>
  1384. 8000c6c: 4603 mov r3, r0
  1385. 8000c6e: 2b00 cmp r3, #0
  1386. 8000c70: d001 beq.n 8000c76 <MX_ADC1_Init+0x18e>
  1387. {
  1388. Error_Handler();
  1389. 8000c72: f000 ffab bl 8001bcc <Error_Handler>
  1390. }
  1391. /* USER CODE BEGIN ADC1_Init 2 */
  1392. if (HAL_ADCEx_Calibration_Start(&hadc1, ADC_CALIB_OFFSET_LINEARITY, ADC_SINGLE_ENDED) != HAL_OK)
  1393. 8000c76: f240 72ff movw r2, #2047 @ 0x7ff
  1394. 8000c7a: f04f 1101 mov.w r1, #65537 @ 0x10001
  1395. 8000c7e: 4806 ldr r0, [pc, #24] @ (8000c98 <MX_ADC1_Init+0x1b0>)
  1396. 8000c80: f006 fab0 bl 80071e4 <HAL_ADCEx_Calibration_Start>
  1397. 8000c84: 4603 mov r3, r0
  1398. 8000c86: 2b00 cmp r3, #0
  1399. 8000c88: d001 beq.n 8000c8e <MX_ADC1_Init+0x1a6>
  1400. {
  1401. Error_Handler();
  1402. 8000c8a: f000 ff9f bl 8001bcc <Error_Handler>
  1403. }
  1404. /* USER CODE END ADC1_Init 2 */
  1405. }
  1406. 8000c8e: bf00 nop
  1407. 8000c90: 3728 adds r7, #40 @ 0x28
  1408. 8000c92: 46bd mov sp, r7
  1409. 8000c94: bd80 pop {r7, pc}
  1410. 8000c96: bf00 nop
  1411. 8000c98: 24000140 .word 0x24000140
  1412. 8000c9c: 40022000 .word 0x40022000
  1413. 8000ca0: 21800100 .word 0x21800100
  1414. 8000ca4: 1d500080 .word 0x1d500080
  1415. 8000ca8: 25b00200 .word 0x25b00200
  1416. 8000cac: 43210000 .word 0x43210000
  1417. 8000cb0: 47520000 .word 0x47520000
  1418. 8000cb4: 3ac04000 .word 0x3ac04000
  1419. 8000cb8: 3ef08000 .word 0x3ef08000
  1420. 08000cbc <MX_ADC2_Init>:
  1421. * @brief ADC2 Initialization Function
  1422. * @param None
  1423. * @retval None
  1424. */
  1425. static void MX_ADC2_Init(void)
  1426. {
  1427. 8000cbc: b580 push {r7, lr}
  1428. 8000cbe: b088 sub sp, #32
  1429. 8000cc0: af00 add r7, sp, #0
  1430. /* USER CODE BEGIN ADC2_Init 0 */
  1431. /* USER CODE END ADC2_Init 0 */
  1432. ADC_ChannelConfTypeDef sConfig = {0};
  1433. 8000cc2: 1d3b adds r3, r7, #4
  1434. 8000cc4: 2200 movs r2, #0
  1435. 8000cc6: 601a str r2, [r3, #0]
  1436. 8000cc8: 605a str r2, [r3, #4]
  1437. 8000cca: 609a str r2, [r3, #8]
  1438. 8000ccc: 60da str r2, [r3, #12]
  1439. 8000cce: 611a str r2, [r3, #16]
  1440. 8000cd0: 615a str r2, [r3, #20]
  1441. 8000cd2: 619a str r2, [r3, #24]
  1442. /* USER CODE END ADC2_Init 1 */
  1443. /** Common config
  1444. */
  1445. hadc2.Instance = ADC2;
  1446. 8000cd4: 4b3e ldr r3, [pc, #248] @ (8000dd0 <MX_ADC2_Init+0x114>)
  1447. 8000cd6: 4a3f ldr r2, [pc, #252] @ (8000dd4 <MX_ADC2_Init+0x118>)
  1448. 8000cd8: 601a str r2, [r3, #0]
  1449. hadc2.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
  1450. 8000cda: 4b3d ldr r3, [pc, #244] @ (8000dd0 <MX_ADC2_Init+0x114>)
  1451. 8000cdc: 2200 movs r2, #0
  1452. 8000cde: 605a str r2, [r3, #4]
  1453. hadc2.Init.Resolution = ADC_RESOLUTION_16B;
  1454. 8000ce0: 4b3b ldr r3, [pc, #236] @ (8000dd0 <MX_ADC2_Init+0x114>)
  1455. 8000ce2: 2200 movs r2, #0
  1456. 8000ce4: 609a str r2, [r3, #8]
  1457. hadc2.Init.ScanConvMode = ADC_SCAN_ENABLE;
  1458. 8000ce6: 4b3a ldr r3, [pc, #232] @ (8000dd0 <MX_ADC2_Init+0x114>)
  1459. 8000ce8: 2201 movs r2, #1
  1460. 8000cea: 60da str r2, [r3, #12]
  1461. hadc2.Init.EOCSelection = ADC_EOC_SEQ_CONV;
  1462. 8000cec: 4b38 ldr r3, [pc, #224] @ (8000dd0 <MX_ADC2_Init+0x114>)
  1463. 8000cee: 2208 movs r2, #8
  1464. 8000cf0: 611a str r2, [r3, #16]
  1465. hadc2.Init.LowPowerAutoWait = DISABLE;
  1466. 8000cf2: 4b37 ldr r3, [pc, #220] @ (8000dd0 <MX_ADC2_Init+0x114>)
  1467. 8000cf4: 2200 movs r2, #0
  1468. 8000cf6: 751a strb r2, [r3, #20]
  1469. hadc2.Init.ContinuousConvMode = ENABLE;
  1470. 8000cf8: 4b35 ldr r3, [pc, #212] @ (8000dd0 <MX_ADC2_Init+0x114>)
  1471. 8000cfa: 2201 movs r2, #1
  1472. 8000cfc: 755a strb r2, [r3, #21]
  1473. hadc2.Init.NbrOfConversion = 3;
  1474. 8000cfe: 4b34 ldr r3, [pc, #208] @ (8000dd0 <MX_ADC2_Init+0x114>)
  1475. 8000d00: 2203 movs r2, #3
  1476. 8000d02: 619a str r2, [r3, #24]
  1477. hadc2.Init.DiscontinuousConvMode = DISABLE;
  1478. 8000d04: 4b32 ldr r3, [pc, #200] @ (8000dd0 <MX_ADC2_Init+0x114>)
  1479. 8000d06: 2200 movs r2, #0
  1480. 8000d08: 771a strb r2, [r3, #28]
  1481. hadc2.Init.ExternalTrigConv = ADC_EXTERNALTRIG_T8_TRGO;
  1482. 8000d0a: 4b31 ldr r3, [pc, #196] @ (8000dd0 <MX_ADC2_Init+0x114>)
  1483. 8000d0c: f44f 629c mov.w r2, #1248 @ 0x4e0
  1484. 8000d10: 625a str r2, [r3, #36] @ 0x24
  1485. hadc2.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING;
  1486. 8000d12: 4b2f ldr r3, [pc, #188] @ (8000dd0 <MX_ADC2_Init+0x114>)
  1487. 8000d14: f44f 6280 mov.w r2, #1024 @ 0x400
  1488. 8000d18: 629a str r2, [r3, #40] @ 0x28
  1489. hadc2.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DMA_ONESHOT;
  1490. 8000d1a: 4b2d ldr r3, [pc, #180] @ (8000dd0 <MX_ADC2_Init+0x114>)
  1491. 8000d1c: 2201 movs r2, #1
  1492. 8000d1e: 62da str r2, [r3, #44] @ 0x2c
  1493. hadc2.Init.Overrun = ADC_OVR_DATA_PRESERVED;
  1494. 8000d20: 4b2b ldr r3, [pc, #172] @ (8000dd0 <MX_ADC2_Init+0x114>)
  1495. 8000d22: 2200 movs r2, #0
  1496. 8000d24: 631a str r2, [r3, #48] @ 0x30
  1497. hadc2.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE;
  1498. 8000d26: 4b2a ldr r3, [pc, #168] @ (8000dd0 <MX_ADC2_Init+0x114>)
  1499. 8000d28: 2200 movs r2, #0
  1500. 8000d2a: 635a str r2, [r3, #52] @ 0x34
  1501. hadc2.Init.OversamplingMode = DISABLE;
  1502. 8000d2c: 4b28 ldr r3, [pc, #160] @ (8000dd0 <MX_ADC2_Init+0x114>)
  1503. 8000d2e: 2200 movs r2, #0
  1504. 8000d30: f883 2038 strb.w r2, [r3, #56] @ 0x38
  1505. if (HAL_ADC_Init(&hadc2) != HAL_OK)
  1506. 8000d34: 4826 ldr r0, [pc, #152] @ (8000dd0 <MX_ADC2_Init+0x114>)
  1507. 8000d36: f005 f99b bl 8006070 <HAL_ADC_Init>
  1508. 8000d3a: 4603 mov r3, r0
  1509. 8000d3c: 2b00 cmp r3, #0
  1510. 8000d3e: d001 beq.n 8000d44 <MX_ADC2_Init+0x88>
  1511. {
  1512. Error_Handler();
  1513. 8000d40: f000 ff44 bl 8001bcc <Error_Handler>
  1514. }
  1515. /** Configure Regular Channel
  1516. */
  1517. sConfig.Channel = ADC_CHANNEL_3;
  1518. 8000d44: 4b24 ldr r3, [pc, #144] @ (8000dd8 <MX_ADC2_Init+0x11c>)
  1519. 8000d46: 607b str r3, [r7, #4]
  1520. sConfig.Rank = ADC_REGULAR_RANK_1;
  1521. 8000d48: 2306 movs r3, #6
  1522. 8000d4a: 60bb str r3, [r7, #8]
  1523. sConfig.SamplingTime = ADC_SAMPLETIME_387CYCLES_5;
  1524. 8000d4c: 2306 movs r3, #6
  1525. 8000d4e: 60fb str r3, [r7, #12]
  1526. sConfig.SingleDiff = ADC_SINGLE_ENDED;
  1527. 8000d50: f240 73ff movw r3, #2047 @ 0x7ff
  1528. 8000d54: 613b str r3, [r7, #16]
  1529. sConfig.OffsetNumber = ADC_OFFSET_NONE;
  1530. 8000d56: 2304 movs r3, #4
  1531. 8000d58: 617b str r3, [r7, #20]
  1532. sConfig.Offset = 0;
  1533. 8000d5a: 2300 movs r3, #0
  1534. 8000d5c: 61bb str r3, [r7, #24]
  1535. sConfig.OffsetSignedSaturation = DISABLE;
  1536. 8000d5e: 2300 movs r3, #0
  1537. 8000d60: 777b strb r3, [r7, #29]
  1538. if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
  1539. 8000d62: 1d3b adds r3, r7, #4
  1540. 8000d64: 4619 mov r1, r3
  1541. 8000d66: 481a ldr r0, [pc, #104] @ (8000dd0 <MX_ADC2_Init+0x114>)
  1542. 8000d68: f005 fbfc bl 8006564 <HAL_ADC_ConfigChannel>
  1543. 8000d6c: 4603 mov r3, r0
  1544. 8000d6e: 2b00 cmp r3, #0
  1545. 8000d70: d001 beq.n 8000d76 <MX_ADC2_Init+0xba>
  1546. {
  1547. Error_Handler();
  1548. 8000d72: f000 ff2b bl 8001bcc <Error_Handler>
  1549. }
  1550. /** Configure Regular Channel
  1551. */
  1552. sConfig.Channel = ADC_CHANNEL_4;
  1553. 8000d76: 4b19 ldr r3, [pc, #100] @ (8000ddc <MX_ADC2_Init+0x120>)
  1554. 8000d78: 607b str r3, [r7, #4]
  1555. sConfig.Rank = ADC_REGULAR_RANK_2;
  1556. 8000d7a: 230c movs r3, #12
  1557. 8000d7c: 60bb str r3, [r7, #8]
  1558. if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
  1559. 8000d7e: 1d3b adds r3, r7, #4
  1560. 8000d80: 4619 mov r1, r3
  1561. 8000d82: 4813 ldr r0, [pc, #76] @ (8000dd0 <MX_ADC2_Init+0x114>)
  1562. 8000d84: f005 fbee bl 8006564 <HAL_ADC_ConfigChannel>
  1563. 8000d88: 4603 mov r3, r0
  1564. 8000d8a: 2b00 cmp r3, #0
  1565. 8000d8c: d001 beq.n 8000d92 <MX_ADC2_Init+0xd6>
  1566. {
  1567. Error_Handler();
  1568. 8000d8e: f000 ff1d bl 8001bcc <Error_Handler>
  1569. }
  1570. /** Configure Regular Channel
  1571. */
  1572. sConfig.Channel = ADC_CHANNEL_5;
  1573. 8000d92: 4b13 ldr r3, [pc, #76] @ (8000de0 <MX_ADC2_Init+0x124>)
  1574. 8000d94: 607b str r3, [r7, #4]
  1575. sConfig.Rank = ADC_REGULAR_RANK_3;
  1576. 8000d96: 2312 movs r3, #18
  1577. 8000d98: 60bb str r3, [r7, #8]
  1578. if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
  1579. 8000d9a: 1d3b adds r3, r7, #4
  1580. 8000d9c: 4619 mov r1, r3
  1581. 8000d9e: 480c ldr r0, [pc, #48] @ (8000dd0 <MX_ADC2_Init+0x114>)
  1582. 8000da0: f005 fbe0 bl 8006564 <HAL_ADC_ConfigChannel>
  1583. 8000da4: 4603 mov r3, r0
  1584. 8000da6: 2b00 cmp r3, #0
  1585. 8000da8: d001 beq.n 8000dae <MX_ADC2_Init+0xf2>
  1586. {
  1587. Error_Handler();
  1588. 8000daa: f000 ff0f bl 8001bcc <Error_Handler>
  1589. }
  1590. /* USER CODE BEGIN ADC2_Init 2 */
  1591. if (HAL_ADCEx_Calibration_Start(&hadc2, ADC_CALIB_OFFSET_LINEARITY, ADC_SINGLE_ENDED) != HAL_OK)
  1592. 8000dae: f240 72ff movw r2, #2047 @ 0x7ff
  1593. 8000db2: f04f 1101 mov.w r1, #65537 @ 0x10001
  1594. 8000db6: 4806 ldr r0, [pc, #24] @ (8000dd0 <MX_ADC2_Init+0x114>)
  1595. 8000db8: f006 fa14 bl 80071e4 <HAL_ADCEx_Calibration_Start>
  1596. 8000dbc: 4603 mov r3, r0
  1597. 8000dbe: 2b00 cmp r3, #0
  1598. 8000dc0: d001 beq.n 8000dc6 <MX_ADC2_Init+0x10a>
  1599. {
  1600. Error_Handler();
  1601. 8000dc2: f000 ff03 bl 8001bcc <Error_Handler>
  1602. }
  1603. /* USER CODE END ADC2_Init 2 */
  1604. }
  1605. 8000dc6: bf00 nop
  1606. 8000dc8: 3720 adds r7, #32
  1607. 8000dca: 46bd mov sp, r7
  1608. 8000dcc: bd80 pop {r7, pc}
  1609. 8000dce: bf00 nop
  1610. 8000dd0: 240001a4 .word 0x240001a4
  1611. 8000dd4: 40022100 .word 0x40022100
  1612. 8000dd8: 0c900008 .word 0x0c900008
  1613. 8000ddc: 10c00010 .word 0x10c00010
  1614. 8000de0: 14f00020 .word 0x14f00020
  1615. 08000de4 <MX_ADC3_Init>:
  1616. * @brief ADC3 Initialization Function
  1617. * @param None
  1618. * @retval None
  1619. */
  1620. static void MX_ADC3_Init(void)
  1621. {
  1622. 8000de4: b580 push {r7, lr}
  1623. 8000de6: b088 sub sp, #32
  1624. 8000de8: af00 add r7, sp, #0
  1625. /* USER CODE BEGIN ADC3_Init 0 */
  1626. /* USER CODE END ADC3_Init 0 */
  1627. ADC_ChannelConfTypeDef sConfig = {0};
  1628. 8000dea: 1d3b adds r3, r7, #4
  1629. 8000dec: 2200 movs r2, #0
  1630. 8000dee: 601a str r2, [r3, #0]
  1631. 8000df0: 605a str r2, [r3, #4]
  1632. 8000df2: 609a str r2, [r3, #8]
  1633. 8000df4: 60da str r2, [r3, #12]
  1634. 8000df6: 611a str r2, [r3, #16]
  1635. 8000df8: 615a str r2, [r3, #20]
  1636. 8000dfa: 619a str r2, [r3, #24]
  1637. /* USER CODE END ADC3_Init 1 */
  1638. /** Common config
  1639. */
  1640. hadc3.Instance = ADC3;
  1641. 8000dfc: 4b4b ldr r3, [pc, #300] @ (8000f2c <MX_ADC3_Init+0x148>)
  1642. 8000dfe: 4a4c ldr r2, [pc, #304] @ (8000f30 <MX_ADC3_Init+0x14c>)
  1643. 8000e00: 601a str r2, [r3, #0]
  1644. hadc3.Init.Resolution = ADC_RESOLUTION_16B;
  1645. 8000e02: 4b4a ldr r3, [pc, #296] @ (8000f2c <MX_ADC3_Init+0x148>)
  1646. 8000e04: 2200 movs r2, #0
  1647. 8000e06: 609a str r2, [r3, #8]
  1648. hadc3.Init.ScanConvMode = ADC_SCAN_ENABLE;
  1649. 8000e08: 4b48 ldr r3, [pc, #288] @ (8000f2c <MX_ADC3_Init+0x148>)
  1650. 8000e0a: 2201 movs r2, #1
  1651. 8000e0c: 60da str r2, [r3, #12]
  1652. hadc3.Init.EOCSelection = ADC_EOC_SEQ_CONV;
  1653. 8000e0e: 4b47 ldr r3, [pc, #284] @ (8000f2c <MX_ADC3_Init+0x148>)
  1654. 8000e10: 2208 movs r2, #8
  1655. 8000e12: 611a str r2, [r3, #16]
  1656. hadc3.Init.LowPowerAutoWait = DISABLE;
  1657. 8000e14: 4b45 ldr r3, [pc, #276] @ (8000f2c <MX_ADC3_Init+0x148>)
  1658. 8000e16: 2200 movs r2, #0
  1659. 8000e18: 751a strb r2, [r3, #20]
  1660. hadc3.Init.ContinuousConvMode = ENABLE;
  1661. 8000e1a: 4b44 ldr r3, [pc, #272] @ (8000f2c <MX_ADC3_Init+0x148>)
  1662. 8000e1c: 2201 movs r2, #1
  1663. 8000e1e: 755a strb r2, [r3, #21]
  1664. hadc3.Init.NbrOfConversion = 5;
  1665. 8000e20: 4b42 ldr r3, [pc, #264] @ (8000f2c <MX_ADC3_Init+0x148>)
  1666. 8000e22: 2205 movs r2, #5
  1667. 8000e24: 619a str r2, [r3, #24]
  1668. hadc3.Init.DiscontinuousConvMode = DISABLE;
  1669. 8000e26: 4b41 ldr r3, [pc, #260] @ (8000f2c <MX_ADC3_Init+0x148>)
  1670. 8000e28: 2200 movs r2, #0
  1671. 8000e2a: 771a strb r2, [r3, #28]
  1672. hadc3.Init.ExternalTrigConv = ADC_EXTERNALTRIG_T8_TRGO;
  1673. 8000e2c: 4b3f ldr r3, [pc, #252] @ (8000f2c <MX_ADC3_Init+0x148>)
  1674. 8000e2e: f44f 629c mov.w r2, #1248 @ 0x4e0
  1675. 8000e32: 625a str r2, [r3, #36] @ 0x24
  1676. hadc3.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING;
  1677. 8000e34: 4b3d ldr r3, [pc, #244] @ (8000f2c <MX_ADC3_Init+0x148>)
  1678. 8000e36: f44f 6280 mov.w r2, #1024 @ 0x400
  1679. 8000e3a: 629a str r2, [r3, #40] @ 0x28
  1680. hadc3.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DMA_ONESHOT;
  1681. 8000e3c: 4b3b ldr r3, [pc, #236] @ (8000f2c <MX_ADC3_Init+0x148>)
  1682. 8000e3e: 2201 movs r2, #1
  1683. 8000e40: 62da str r2, [r3, #44] @ 0x2c
  1684. hadc3.Init.Overrun = ADC_OVR_DATA_PRESERVED;
  1685. 8000e42: 4b3a ldr r3, [pc, #232] @ (8000f2c <MX_ADC3_Init+0x148>)
  1686. 8000e44: 2200 movs r2, #0
  1687. 8000e46: 631a str r2, [r3, #48] @ 0x30
  1688. hadc3.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE;
  1689. 8000e48: 4b38 ldr r3, [pc, #224] @ (8000f2c <MX_ADC3_Init+0x148>)
  1690. 8000e4a: 2200 movs r2, #0
  1691. 8000e4c: 635a str r2, [r3, #52] @ 0x34
  1692. hadc3.Init.OversamplingMode = DISABLE;
  1693. 8000e4e: 4b37 ldr r3, [pc, #220] @ (8000f2c <MX_ADC3_Init+0x148>)
  1694. 8000e50: 2200 movs r2, #0
  1695. 8000e52: f883 2038 strb.w r2, [r3, #56] @ 0x38
  1696. if (HAL_ADC_Init(&hadc3) != HAL_OK)
  1697. 8000e56: 4835 ldr r0, [pc, #212] @ (8000f2c <MX_ADC3_Init+0x148>)
  1698. 8000e58: f005 f90a bl 8006070 <HAL_ADC_Init>
  1699. 8000e5c: 4603 mov r3, r0
  1700. 8000e5e: 2b00 cmp r3, #0
  1701. 8000e60: d001 beq.n 8000e66 <MX_ADC3_Init+0x82>
  1702. {
  1703. Error_Handler();
  1704. 8000e62: f000 feb3 bl 8001bcc <Error_Handler>
  1705. }
  1706. /** Configure Regular Channel
  1707. */
  1708. sConfig.Channel = ADC_CHANNEL_0;
  1709. 8000e66: 2301 movs r3, #1
  1710. 8000e68: 607b str r3, [r7, #4]
  1711. sConfig.Rank = ADC_REGULAR_RANK_1;
  1712. 8000e6a: 2306 movs r3, #6
  1713. 8000e6c: 60bb str r3, [r7, #8]
  1714. sConfig.SamplingTime = ADC_SAMPLETIME_387CYCLES_5;
  1715. 8000e6e: 2306 movs r3, #6
  1716. 8000e70: 60fb str r3, [r7, #12]
  1717. sConfig.SingleDiff = ADC_SINGLE_ENDED;
  1718. 8000e72: f240 73ff movw r3, #2047 @ 0x7ff
  1719. 8000e76: 613b str r3, [r7, #16]
  1720. sConfig.OffsetNumber = ADC_OFFSET_NONE;
  1721. 8000e78: 2304 movs r3, #4
  1722. 8000e7a: 617b str r3, [r7, #20]
  1723. sConfig.Offset = 0;
  1724. 8000e7c: 2300 movs r3, #0
  1725. 8000e7e: 61bb str r3, [r7, #24]
  1726. sConfig.OffsetSignedSaturation = DISABLE;
  1727. 8000e80: 2300 movs r3, #0
  1728. 8000e82: 777b strb r3, [r7, #29]
  1729. if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
  1730. 8000e84: 1d3b adds r3, r7, #4
  1731. 8000e86: 4619 mov r1, r3
  1732. 8000e88: 4828 ldr r0, [pc, #160] @ (8000f2c <MX_ADC3_Init+0x148>)
  1733. 8000e8a: f005 fb6b bl 8006564 <HAL_ADC_ConfigChannel>
  1734. 8000e8e: 4603 mov r3, r0
  1735. 8000e90: 2b00 cmp r3, #0
  1736. 8000e92: d001 beq.n 8000e98 <MX_ADC3_Init+0xb4>
  1737. {
  1738. Error_Handler();
  1739. 8000e94: f000 fe9a bl 8001bcc <Error_Handler>
  1740. }
  1741. /** Configure Regular Channel
  1742. */
  1743. sConfig.Channel = ADC_CHANNEL_1;
  1744. 8000e98: 4b26 ldr r3, [pc, #152] @ (8000f34 <MX_ADC3_Init+0x150>)
  1745. 8000e9a: 607b str r3, [r7, #4]
  1746. sConfig.Rank = ADC_REGULAR_RANK_2;
  1747. 8000e9c: 230c movs r3, #12
  1748. 8000e9e: 60bb str r3, [r7, #8]
  1749. if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
  1750. 8000ea0: 1d3b adds r3, r7, #4
  1751. 8000ea2: 4619 mov r1, r3
  1752. 8000ea4: 4821 ldr r0, [pc, #132] @ (8000f2c <MX_ADC3_Init+0x148>)
  1753. 8000ea6: f005 fb5d bl 8006564 <HAL_ADC_ConfigChannel>
  1754. 8000eaa: 4603 mov r3, r0
  1755. 8000eac: 2b00 cmp r3, #0
  1756. 8000eae: d001 beq.n 8000eb4 <MX_ADC3_Init+0xd0>
  1757. {
  1758. Error_Handler();
  1759. 8000eb0: f000 fe8c bl 8001bcc <Error_Handler>
  1760. }
  1761. /** Configure Regular Channel
  1762. */
  1763. sConfig.Channel = ADC_CHANNEL_10;
  1764. 8000eb4: 4b20 ldr r3, [pc, #128] @ (8000f38 <MX_ADC3_Init+0x154>)
  1765. 8000eb6: 607b str r3, [r7, #4]
  1766. sConfig.Rank = ADC_REGULAR_RANK_3;
  1767. 8000eb8: 2312 movs r3, #18
  1768. 8000eba: 60bb str r3, [r7, #8]
  1769. if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
  1770. 8000ebc: 1d3b adds r3, r7, #4
  1771. 8000ebe: 4619 mov r1, r3
  1772. 8000ec0: 481a ldr r0, [pc, #104] @ (8000f2c <MX_ADC3_Init+0x148>)
  1773. 8000ec2: f005 fb4f bl 8006564 <HAL_ADC_ConfigChannel>
  1774. 8000ec6: 4603 mov r3, r0
  1775. 8000ec8: 2b00 cmp r3, #0
  1776. 8000eca: d001 beq.n 8000ed0 <MX_ADC3_Init+0xec>
  1777. {
  1778. Error_Handler();
  1779. 8000ecc: f000 fe7e bl 8001bcc <Error_Handler>
  1780. }
  1781. /** Configure Regular Channel
  1782. */
  1783. sConfig.Channel = ADC_CHANNEL_11;
  1784. 8000ed0: 4b1a ldr r3, [pc, #104] @ (8000f3c <MX_ADC3_Init+0x158>)
  1785. 8000ed2: 607b str r3, [r7, #4]
  1786. sConfig.Rank = ADC_REGULAR_RANK_4;
  1787. 8000ed4: 2318 movs r3, #24
  1788. 8000ed6: 60bb str r3, [r7, #8]
  1789. if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
  1790. 8000ed8: 1d3b adds r3, r7, #4
  1791. 8000eda: 4619 mov r1, r3
  1792. 8000edc: 4813 ldr r0, [pc, #76] @ (8000f2c <MX_ADC3_Init+0x148>)
  1793. 8000ede: f005 fb41 bl 8006564 <HAL_ADC_ConfigChannel>
  1794. 8000ee2: 4603 mov r3, r0
  1795. 8000ee4: 2b00 cmp r3, #0
  1796. 8000ee6: d001 beq.n 8000eec <MX_ADC3_Init+0x108>
  1797. {
  1798. Error_Handler();
  1799. 8000ee8: f000 fe70 bl 8001bcc <Error_Handler>
  1800. }
  1801. /** Configure Regular Channel
  1802. */
  1803. sConfig.Channel = ADC_CHANNEL_VREFINT;
  1804. 8000eec: 4b14 ldr r3, [pc, #80] @ (8000f40 <MX_ADC3_Init+0x15c>)
  1805. 8000eee: 607b str r3, [r7, #4]
  1806. sConfig.Rank = ADC_REGULAR_RANK_5;
  1807. 8000ef0: f44f 7380 mov.w r3, #256 @ 0x100
  1808. 8000ef4: 60bb str r3, [r7, #8]
  1809. if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
  1810. 8000ef6: 1d3b adds r3, r7, #4
  1811. 8000ef8: 4619 mov r1, r3
  1812. 8000efa: 480c ldr r0, [pc, #48] @ (8000f2c <MX_ADC3_Init+0x148>)
  1813. 8000efc: f005 fb32 bl 8006564 <HAL_ADC_ConfigChannel>
  1814. 8000f00: 4603 mov r3, r0
  1815. 8000f02: 2b00 cmp r3, #0
  1816. 8000f04: d001 beq.n 8000f0a <MX_ADC3_Init+0x126>
  1817. {
  1818. Error_Handler();
  1819. 8000f06: f000 fe61 bl 8001bcc <Error_Handler>
  1820. }
  1821. /* USER CODE BEGIN ADC3_Init 2 */
  1822. if (HAL_ADCEx_Calibration_Start(&hadc3, ADC_CALIB_OFFSET_LINEARITY, ADC_SINGLE_ENDED) != HAL_OK)
  1823. 8000f0a: f240 72ff movw r2, #2047 @ 0x7ff
  1824. 8000f0e: f04f 1101 mov.w r1, #65537 @ 0x10001
  1825. 8000f12: 4806 ldr r0, [pc, #24] @ (8000f2c <MX_ADC3_Init+0x148>)
  1826. 8000f14: f006 f966 bl 80071e4 <HAL_ADCEx_Calibration_Start>
  1827. 8000f18: 4603 mov r3, r0
  1828. 8000f1a: 2b00 cmp r3, #0
  1829. 8000f1c: d001 beq.n 8000f22 <MX_ADC3_Init+0x13e>
  1830. {
  1831. Error_Handler();
  1832. 8000f1e: f000 fe55 bl 8001bcc <Error_Handler>
  1833. }
  1834. /* USER CODE END ADC3_Init 2 */
  1835. }
  1836. 8000f22: bf00 nop
  1837. 8000f24: 3720 adds r7, #32
  1838. 8000f26: 46bd mov sp, r7
  1839. 8000f28: bd80 pop {r7, pc}
  1840. 8000f2a: bf00 nop
  1841. 8000f2c: 24000208 .word 0x24000208
  1842. 8000f30: 58026000 .word 0x58026000
  1843. 8000f34: 04300002 .word 0x04300002
  1844. 8000f38: 2a000400 .word 0x2a000400
  1845. 8000f3c: 2e300800 .word 0x2e300800
  1846. 8000f40: cfb80000 .word 0xcfb80000
  1847. 08000f44 <MX_COMP1_Init>:
  1848. * @brief COMP1 Initialization Function
  1849. * @param None
  1850. * @retval None
  1851. */
  1852. static void MX_COMP1_Init(void)
  1853. {
  1854. 8000f44: b580 push {r7, lr}
  1855. 8000f46: af00 add r7, sp, #0
  1856. /* USER CODE END COMP1_Init 0 */
  1857. /* USER CODE BEGIN COMP1_Init 1 */
  1858. /* USER CODE END COMP1_Init 1 */
  1859. hcomp1.Instance = COMP1;
  1860. 8000f48: 4b12 ldr r3, [pc, #72] @ (8000f94 <MX_COMP1_Init+0x50>)
  1861. 8000f4a: 4a13 ldr r2, [pc, #76] @ (8000f98 <MX_COMP1_Init+0x54>)
  1862. 8000f4c: 601a str r2, [r3, #0]
  1863. hcomp1.Init.InvertingInput = COMP_INPUT_MINUS_3_4VREFINT;
  1864. 8000f4e: 4b11 ldr r3, [pc, #68] @ (8000f94 <MX_COMP1_Init+0x50>)
  1865. 8000f50: 4a12 ldr r2, [pc, #72] @ (8000f9c <MX_COMP1_Init+0x58>)
  1866. 8000f52: 611a str r2, [r3, #16]
  1867. hcomp1.Init.NonInvertingInput = COMP_INPUT_PLUS_IO2;
  1868. 8000f54: 4b0f ldr r3, [pc, #60] @ (8000f94 <MX_COMP1_Init+0x50>)
  1869. 8000f56: f44f 1280 mov.w r2, #1048576 @ 0x100000
  1870. 8000f5a: 60da str r2, [r3, #12]
  1871. hcomp1.Init.OutputPol = COMP_OUTPUTPOL_NONINVERTED;
  1872. 8000f5c: 4b0d ldr r3, [pc, #52] @ (8000f94 <MX_COMP1_Init+0x50>)
  1873. 8000f5e: 2200 movs r2, #0
  1874. 8000f60: 619a str r2, [r3, #24]
  1875. hcomp1.Init.Hysteresis = COMP_HYSTERESIS_NONE;
  1876. 8000f62: 4b0c ldr r3, [pc, #48] @ (8000f94 <MX_COMP1_Init+0x50>)
  1877. 8000f64: 2200 movs r2, #0
  1878. 8000f66: 615a str r2, [r3, #20]
  1879. hcomp1.Init.BlankingSrce = COMP_BLANKINGSRC_NONE;
  1880. 8000f68: 4b0a ldr r3, [pc, #40] @ (8000f94 <MX_COMP1_Init+0x50>)
  1881. 8000f6a: 2200 movs r2, #0
  1882. 8000f6c: 61da str r2, [r3, #28]
  1883. hcomp1.Init.Mode = COMP_POWERMODE_HIGHSPEED;
  1884. 8000f6e: 4b09 ldr r3, [pc, #36] @ (8000f94 <MX_COMP1_Init+0x50>)
  1885. 8000f70: 2200 movs r2, #0
  1886. 8000f72: 609a str r2, [r3, #8]
  1887. hcomp1.Init.WindowMode = COMP_WINDOWMODE_DISABLE;
  1888. 8000f74: 4b07 ldr r3, [pc, #28] @ (8000f94 <MX_COMP1_Init+0x50>)
  1889. 8000f76: 2200 movs r2, #0
  1890. 8000f78: 605a str r2, [r3, #4]
  1891. hcomp1.Init.TriggerMode = COMP_TRIGGERMODE_NONE;
  1892. 8000f7a: 4b06 ldr r3, [pc, #24] @ (8000f94 <MX_COMP1_Init+0x50>)
  1893. 8000f7c: 2200 movs r2, #0
  1894. 8000f7e: 621a str r2, [r3, #32]
  1895. if (HAL_COMP_Init(&hcomp1) != HAL_OK)
  1896. 8000f80: 4804 ldr r0, [pc, #16] @ (8000f94 <MX_COMP1_Init+0x50>)
  1897. 8000f82: f006 fa71 bl 8007468 <HAL_COMP_Init>
  1898. 8000f86: 4603 mov r3, r0
  1899. 8000f88: 2b00 cmp r3, #0
  1900. 8000f8a: d001 beq.n 8000f90 <MX_COMP1_Init+0x4c>
  1901. {
  1902. Error_Handler();
  1903. 8000f8c: f000 fe1e bl 8001bcc <Error_Handler>
  1904. }
  1905. /* USER CODE BEGIN COMP1_Init 2 */
  1906. /* USER CODE END COMP1_Init 2 */
  1907. }
  1908. 8000f90: bf00 nop
  1909. 8000f92: bd80 pop {r7, pc}
  1910. 8000f94: 240003d4 .word 0x240003d4
  1911. 8000f98: 5800380c .word 0x5800380c
  1912. 8000f9c: 00020006 .word 0x00020006
  1913. 08000fa0 <MX_CRC_Init>:
  1914. * @brief CRC Initialization Function
  1915. * @param None
  1916. * @retval None
  1917. */
  1918. static void MX_CRC_Init(void)
  1919. {
  1920. 8000fa0: b580 push {r7, lr}
  1921. 8000fa2: af00 add r7, sp, #0
  1922. /* USER CODE END CRC_Init 0 */
  1923. /* USER CODE BEGIN CRC_Init 1 */
  1924. /* USER CODE END CRC_Init 1 */
  1925. hcrc.Instance = CRC;
  1926. 8000fa4: 4b11 ldr r3, [pc, #68] @ (8000fec <MX_CRC_Init+0x4c>)
  1927. 8000fa6: 4a12 ldr r2, [pc, #72] @ (8000ff0 <MX_CRC_Init+0x50>)
  1928. 8000fa8: 601a str r2, [r3, #0]
  1929. hcrc.Init.DefaultPolynomialUse = DEFAULT_POLYNOMIAL_DISABLE;
  1930. 8000faa: 4b10 ldr r3, [pc, #64] @ (8000fec <MX_CRC_Init+0x4c>)
  1931. 8000fac: 2201 movs r2, #1
  1932. 8000fae: 711a strb r2, [r3, #4]
  1933. hcrc.Init.DefaultInitValueUse = DEFAULT_INIT_VALUE_ENABLE;
  1934. 8000fb0: 4b0e ldr r3, [pc, #56] @ (8000fec <MX_CRC_Init+0x4c>)
  1935. 8000fb2: 2200 movs r2, #0
  1936. 8000fb4: 715a strb r2, [r3, #5]
  1937. hcrc.Init.GeneratingPolynomial = 4129;
  1938. 8000fb6: 4b0d ldr r3, [pc, #52] @ (8000fec <MX_CRC_Init+0x4c>)
  1939. 8000fb8: f241 0221 movw r2, #4129 @ 0x1021
  1940. 8000fbc: 609a str r2, [r3, #8]
  1941. hcrc.Init.CRCLength = CRC_POLYLENGTH_16B;
  1942. 8000fbe: 4b0b ldr r3, [pc, #44] @ (8000fec <MX_CRC_Init+0x4c>)
  1943. 8000fc0: 2208 movs r2, #8
  1944. 8000fc2: 60da str r2, [r3, #12]
  1945. hcrc.Init.InputDataInversionMode = CRC_INPUTDATA_INVERSION_NONE;
  1946. 8000fc4: 4b09 ldr r3, [pc, #36] @ (8000fec <MX_CRC_Init+0x4c>)
  1947. 8000fc6: 2200 movs r2, #0
  1948. 8000fc8: 615a str r2, [r3, #20]
  1949. hcrc.Init.OutputDataInversionMode = CRC_OUTPUTDATA_INVERSION_DISABLE;
  1950. 8000fca: 4b08 ldr r3, [pc, #32] @ (8000fec <MX_CRC_Init+0x4c>)
  1951. 8000fcc: 2200 movs r2, #0
  1952. 8000fce: 619a str r2, [r3, #24]
  1953. hcrc.InputDataFormat = CRC_INPUTDATA_FORMAT_BYTES;
  1954. 8000fd0: 4b06 ldr r3, [pc, #24] @ (8000fec <MX_CRC_Init+0x4c>)
  1955. 8000fd2: 2201 movs r2, #1
  1956. 8000fd4: 621a str r2, [r3, #32]
  1957. if (HAL_CRC_Init(&hcrc) != HAL_OK)
  1958. 8000fd6: 4805 ldr r0, [pc, #20] @ (8000fec <MX_CRC_Init+0x4c>)
  1959. 8000fd8: f006 fd30 bl 8007a3c <HAL_CRC_Init>
  1960. 8000fdc: 4603 mov r3, r0
  1961. 8000fde: 2b00 cmp r3, #0
  1962. 8000fe0: d001 beq.n 8000fe6 <MX_CRC_Init+0x46>
  1963. {
  1964. Error_Handler();
  1965. 8000fe2: f000 fdf3 bl 8001bcc <Error_Handler>
  1966. }
  1967. /* USER CODE BEGIN CRC_Init 2 */
  1968. /* USER CODE END CRC_Init 2 */
  1969. }
  1970. 8000fe6: bf00 nop
  1971. 8000fe8: bd80 pop {r7, pc}
  1972. 8000fea: bf00 nop
  1973. 8000fec: 24000400 .word 0x24000400
  1974. 8000ff0: 58024c00 .word 0x58024c00
  1975. 08000ff4 <MX_DAC1_Init>:
  1976. * @brief DAC1 Initialization Function
  1977. * @param None
  1978. * @retval None
  1979. */
  1980. static void MX_DAC1_Init(void)
  1981. {
  1982. 8000ff4: b580 push {r7, lr}
  1983. 8000ff6: b08a sub sp, #40 @ 0x28
  1984. 8000ff8: af00 add r7, sp, #0
  1985. /* USER CODE BEGIN DAC1_Init 0 */
  1986. /* USER CODE END DAC1_Init 0 */
  1987. DAC_ChannelConfTypeDef sConfig = {0};
  1988. 8000ffa: 1d3b adds r3, r7, #4
  1989. 8000ffc: 2224 movs r2, #36 @ 0x24
  1990. 8000ffe: 2100 movs r1, #0
  1991. 8001000: 4618 mov r0, r3
  1992. 8001002: f016 fe43 bl 8017c8c <memset>
  1993. /* USER CODE END DAC1_Init 1 */
  1994. /** DAC Initialization
  1995. */
  1996. hdac1.Instance = DAC1;
  1997. 8001006: 4b17 ldr r3, [pc, #92] @ (8001064 <MX_DAC1_Init+0x70>)
  1998. 8001008: 4a17 ldr r2, [pc, #92] @ (8001068 <MX_DAC1_Init+0x74>)
  1999. 800100a: 601a str r2, [r3, #0]
  2000. if (HAL_DAC_Init(&hdac1) != HAL_OK)
  2001. 800100c: 4815 ldr r0, [pc, #84] @ (8001064 <MX_DAC1_Init+0x70>)
  2002. 800100e: f006 ff1b bl 8007e48 <HAL_DAC_Init>
  2003. 8001012: 4603 mov r3, r0
  2004. 8001014: 2b00 cmp r3, #0
  2005. 8001016: d001 beq.n 800101c <MX_DAC1_Init+0x28>
  2006. {
  2007. Error_Handler();
  2008. 8001018: f000 fdd8 bl 8001bcc <Error_Handler>
  2009. }
  2010. /** DAC channel OUT1 config
  2011. */
  2012. sConfig.DAC_SampleAndHold = DAC_SAMPLEANDHOLD_DISABLE;
  2013. 800101c: 2300 movs r3, #0
  2014. 800101e: 607b str r3, [r7, #4]
  2015. sConfig.DAC_Trigger = DAC_TRIGGER_NONE;
  2016. 8001020: 2300 movs r3, #0
  2017. 8001022: 60bb str r3, [r7, #8]
  2018. sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;
  2019. 8001024: 2300 movs r3, #0
  2020. 8001026: 60fb str r3, [r7, #12]
  2021. sConfig.DAC_ConnectOnChipPeripheral = DAC_CHIPCONNECT_DISABLE;
  2022. 8001028: 2301 movs r3, #1
  2023. 800102a: 613b str r3, [r7, #16]
  2024. sConfig.DAC_UserTrimming = DAC_TRIMMING_FACTORY;
  2025. 800102c: 2300 movs r3, #0
  2026. 800102e: 617b str r3, [r7, #20]
  2027. if (HAL_DAC_ConfigChannel(&hdac1, &sConfig, DAC_CHANNEL_1) != HAL_OK)
  2028. 8001030: 1d3b adds r3, r7, #4
  2029. 8001032: 2200 movs r2, #0
  2030. 8001034: 4619 mov r1, r3
  2031. 8001036: 480b ldr r0, [pc, #44] @ (8001064 <MX_DAC1_Init+0x70>)
  2032. 8001038: f007 f80a bl 8008050 <HAL_DAC_ConfigChannel>
  2033. 800103c: 4603 mov r3, r0
  2034. 800103e: 2b00 cmp r3, #0
  2035. 8001040: d001 beq.n 8001046 <MX_DAC1_Init+0x52>
  2036. {
  2037. Error_Handler();
  2038. 8001042: f000 fdc3 bl 8001bcc <Error_Handler>
  2039. }
  2040. /** DAC channel OUT2 config
  2041. */
  2042. if (HAL_DAC_ConfigChannel(&hdac1, &sConfig, DAC_CHANNEL_2) != HAL_OK)
  2043. 8001046: 1d3b adds r3, r7, #4
  2044. 8001048: 2210 movs r2, #16
  2045. 800104a: 4619 mov r1, r3
  2046. 800104c: 4805 ldr r0, [pc, #20] @ (8001064 <MX_DAC1_Init+0x70>)
  2047. 800104e: f006 ffff bl 8008050 <HAL_DAC_ConfigChannel>
  2048. 8001052: 4603 mov r3, r0
  2049. 8001054: 2b00 cmp r3, #0
  2050. 8001056: d001 beq.n 800105c <MX_DAC1_Init+0x68>
  2051. {
  2052. Error_Handler();
  2053. 8001058: f000 fdb8 bl 8001bcc <Error_Handler>
  2054. }
  2055. /* USER CODE BEGIN DAC1_Init 2 */
  2056. /* USER CODE END DAC1_Init 2 */
  2057. }
  2058. 800105c: bf00 nop
  2059. 800105e: 3728 adds r7, #40 @ 0x28
  2060. 8001060: 46bd mov sp, r7
  2061. 8001062: bd80 pop {r7, pc}
  2062. 8001064: 24000424 .word 0x24000424
  2063. 8001068: 40007400 .word 0x40007400
  2064. 0800106c <MX_RNG_Init>:
  2065. * @brief RNG Initialization Function
  2066. * @param None
  2067. * @retval None
  2068. */
  2069. static void MX_RNG_Init(void)
  2070. {
  2071. 800106c: b580 push {r7, lr}
  2072. 800106e: af00 add r7, sp, #0
  2073. /* USER CODE END RNG_Init 0 */
  2074. /* USER CODE BEGIN RNG_Init 1 */
  2075. /* USER CODE END RNG_Init 1 */
  2076. hrng.Instance = RNG;
  2077. 8001070: 4b07 ldr r3, [pc, #28] @ (8001090 <MX_RNG_Init+0x24>)
  2078. 8001072: 4a08 ldr r2, [pc, #32] @ (8001094 <MX_RNG_Init+0x28>)
  2079. 8001074: 601a str r2, [r3, #0]
  2080. hrng.Init.ClockErrorDetection = RNG_CED_ENABLE;
  2081. 8001076: 4b06 ldr r3, [pc, #24] @ (8001090 <MX_RNG_Init+0x24>)
  2082. 8001078: 2200 movs r2, #0
  2083. 800107a: 605a str r2, [r3, #4]
  2084. if (HAL_RNG_Init(&hrng) != HAL_OK)
  2085. 800107c: 4804 ldr r0, [pc, #16] @ (8001090 <MX_RNG_Init+0x24>)
  2086. 800107e: f00d ffd9 bl 800f034 <HAL_RNG_Init>
  2087. 8001082: 4603 mov r3, r0
  2088. 8001084: 2b00 cmp r3, #0
  2089. 8001086: d001 beq.n 800108c <MX_RNG_Init+0x20>
  2090. {
  2091. Error_Handler();
  2092. 8001088: f000 fda0 bl 8001bcc <Error_Handler>
  2093. }
  2094. /* USER CODE BEGIN RNG_Init 2 */
  2095. /* USER CODE END RNG_Init 2 */
  2096. }
  2097. 800108c: bf00 nop
  2098. 800108e: bd80 pop {r7, pc}
  2099. 8001090: 24000438 .word 0x24000438
  2100. 8001094: 48021800 .word 0x48021800
  2101. 08001098 <MX_TIM1_Init>:
  2102. * @brief TIM1 Initialization Function
  2103. * @param None
  2104. * @retval None
  2105. */
  2106. static void MX_TIM1_Init(void)
  2107. {
  2108. 8001098: b5b0 push {r4, r5, r7, lr}
  2109. 800109a: b096 sub sp, #88 @ 0x58
  2110. 800109c: af00 add r7, sp, #0
  2111. /* USER CODE BEGIN TIM1_Init 0 */
  2112. /* USER CODE END TIM1_Init 0 */
  2113. TIM_MasterConfigTypeDef sMasterConfig = {0};
  2114. 800109e: f107 034c add.w r3, r7, #76 @ 0x4c
  2115. 80010a2: 2200 movs r2, #0
  2116. 80010a4: 601a str r2, [r3, #0]
  2117. 80010a6: 605a str r2, [r3, #4]
  2118. 80010a8: 609a str r2, [r3, #8]
  2119. TIM_OC_InitTypeDef sConfigOC = {0};
  2120. 80010aa: f107 0330 add.w r3, r7, #48 @ 0x30
  2121. 80010ae: 2200 movs r2, #0
  2122. 80010b0: 601a str r2, [r3, #0]
  2123. 80010b2: 605a str r2, [r3, #4]
  2124. 80010b4: 609a str r2, [r3, #8]
  2125. 80010b6: 60da str r2, [r3, #12]
  2126. 80010b8: 611a str r2, [r3, #16]
  2127. 80010ba: 615a str r2, [r3, #20]
  2128. 80010bc: 619a str r2, [r3, #24]
  2129. TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
  2130. 80010be: 1d3b adds r3, r7, #4
  2131. 80010c0: 222c movs r2, #44 @ 0x2c
  2132. 80010c2: 2100 movs r1, #0
  2133. 80010c4: 4618 mov r0, r3
  2134. 80010c6: f016 fde1 bl 8017c8c <memset>
  2135. /* USER CODE BEGIN TIM1_Init 1 */
  2136. /* USER CODE END TIM1_Init 1 */
  2137. htim1.Instance = TIM1;
  2138. 80010ca: 4b3e ldr r3, [pc, #248] @ (80011c4 <MX_TIM1_Init+0x12c>)
  2139. 80010cc: 4a3e ldr r2, [pc, #248] @ (80011c8 <MX_TIM1_Init+0x130>)
  2140. 80010ce: 601a str r2, [r3, #0]
  2141. htim1.Init.Prescaler = 199;
  2142. 80010d0: 4b3c ldr r3, [pc, #240] @ (80011c4 <MX_TIM1_Init+0x12c>)
  2143. 80010d2: 22c7 movs r2, #199 @ 0xc7
  2144. 80010d4: 605a str r2, [r3, #4]
  2145. htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
  2146. 80010d6: 4b3b ldr r3, [pc, #236] @ (80011c4 <MX_TIM1_Init+0x12c>)
  2147. 80010d8: 2200 movs r2, #0
  2148. 80010da: 609a str r2, [r3, #8]
  2149. htim1.Init.Period = 999;
  2150. 80010dc: 4b39 ldr r3, [pc, #228] @ (80011c4 <MX_TIM1_Init+0x12c>)
  2151. 80010de: f240 32e7 movw r2, #999 @ 0x3e7
  2152. 80010e2: 60da str r2, [r3, #12]
  2153. htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  2154. 80010e4: 4b37 ldr r3, [pc, #220] @ (80011c4 <MX_TIM1_Init+0x12c>)
  2155. 80010e6: 2200 movs r2, #0
  2156. 80010e8: 611a str r2, [r3, #16]
  2157. htim1.Init.RepetitionCounter = 0;
  2158. 80010ea: 4b36 ldr r3, [pc, #216] @ (80011c4 <MX_TIM1_Init+0x12c>)
  2159. 80010ec: 2200 movs r2, #0
  2160. 80010ee: 615a str r2, [r3, #20]
  2161. htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  2162. 80010f0: 4b34 ldr r3, [pc, #208] @ (80011c4 <MX_TIM1_Init+0x12c>)
  2163. 80010f2: 2280 movs r2, #128 @ 0x80
  2164. 80010f4: 619a str r2, [r3, #24]
  2165. if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
  2166. 80010f6: 4833 ldr r0, [pc, #204] @ (80011c4 <MX_TIM1_Init+0x12c>)
  2167. 80010f8: f00e f93e bl 800f378 <HAL_TIM_PWM_Init>
  2168. 80010fc: 4603 mov r3, r0
  2169. 80010fe: 2b00 cmp r3, #0
  2170. 8001100: d001 beq.n 8001106 <MX_TIM1_Init+0x6e>
  2171. {
  2172. Error_Handler();
  2173. 8001102: f000 fd63 bl 8001bcc <Error_Handler>
  2174. }
  2175. sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  2176. 8001106: 2300 movs r3, #0
  2177. 8001108: 64fb str r3, [r7, #76] @ 0x4c
  2178. sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
  2179. 800110a: 2300 movs r3, #0
  2180. 800110c: 653b str r3, [r7, #80] @ 0x50
  2181. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  2182. 800110e: 2300 movs r3, #0
  2183. 8001110: 657b str r3, [r7, #84] @ 0x54
  2184. if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
  2185. 8001112: f107 034c add.w r3, r7, #76 @ 0x4c
  2186. 8001116: 4619 mov r1, r3
  2187. 8001118: 482a ldr r0, [pc, #168] @ (80011c4 <MX_TIM1_Init+0x12c>)
  2188. 800111a: f00f fadf bl 80106dc <HAL_TIMEx_MasterConfigSynchronization>
  2189. 800111e: 4603 mov r3, r0
  2190. 8001120: 2b00 cmp r3, #0
  2191. 8001122: d001 beq.n 8001128 <MX_TIM1_Init+0x90>
  2192. {
  2193. Error_Handler();
  2194. 8001124: f000 fd52 bl 8001bcc <Error_Handler>
  2195. }
  2196. sConfigOC.OCMode = TIM_OCMODE_PWM1;
  2197. 8001128: 2360 movs r3, #96 @ 0x60
  2198. 800112a: 633b str r3, [r7, #48] @ 0x30
  2199. sConfigOC.Pulse = 99;
  2200. 800112c: 2363 movs r3, #99 @ 0x63
  2201. 800112e: 637b str r3, [r7, #52] @ 0x34
  2202. sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  2203. 8001130: 2300 movs r3, #0
  2204. 8001132: 63bb str r3, [r7, #56] @ 0x38
  2205. sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
  2206. 8001134: 2300 movs r3, #0
  2207. 8001136: 63fb str r3, [r7, #60] @ 0x3c
  2208. sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  2209. 8001138: 2300 movs r3, #0
  2210. 800113a: 643b str r3, [r7, #64] @ 0x40
  2211. sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
  2212. 800113c: 2300 movs r3, #0
  2213. 800113e: 647b str r3, [r7, #68] @ 0x44
  2214. sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
  2215. 8001140: 2300 movs r3, #0
  2216. 8001142: 64bb str r3, [r7, #72] @ 0x48
  2217. if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
  2218. 8001144: f107 0330 add.w r3, r7, #48 @ 0x30
  2219. 8001148: 2204 movs r2, #4
  2220. 800114a: 4619 mov r1, r3
  2221. 800114c: 481d ldr r0, [pc, #116] @ (80011c4 <MX_TIM1_Init+0x12c>)
  2222. 800114e: f00e fc17 bl 800f980 <HAL_TIM_PWM_ConfigChannel>
  2223. 8001152: 4603 mov r3, r0
  2224. 8001154: 2b00 cmp r3, #0
  2225. 8001156: d001 beq.n 800115c <MX_TIM1_Init+0xc4>
  2226. {
  2227. Error_Handler();
  2228. 8001158: f000 fd38 bl 8001bcc <Error_Handler>
  2229. }
  2230. sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
  2231. 800115c: 2300 movs r3, #0
  2232. 800115e: 607b str r3, [r7, #4]
  2233. sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
  2234. 8001160: 2300 movs r3, #0
  2235. 8001162: 60bb str r3, [r7, #8]
  2236. sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
  2237. 8001164: 2300 movs r3, #0
  2238. 8001166: 60fb str r3, [r7, #12]
  2239. sBreakDeadTimeConfig.DeadTime = 0;
  2240. 8001168: 2300 movs r3, #0
  2241. 800116a: 613b str r3, [r7, #16]
  2242. sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
  2243. 800116c: 2300 movs r3, #0
  2244. 800116e: 617b str r3, [r7, #20]
  2245. sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
  2246. 8001170: f44f 5300 mov.w r3, #8192 @ 0x2000
  2247. 8001174: 61bb str r3, [r7, #24]
  2248. sBreakDeadTimeConfig.BreakFilter = 0;
  2249. 8001176: 2300 movs r3, #0
  2250. 8001178: 61fb str r3, [r7, #28]
  2251. sBreakDeadTimeConfig.Break2State = TIM_BREAK2_DISABLE;
  2252. 800117a: 2300 movs r3, #0
  2253. 800117c: 623b str r3, [r7, #32]
  2254. sBreakDeadTimeConfig.Break2Polarity = TIM_BREAK2POLARITY_HIGH;
  2255. 800117e: f04f 7300 mov.w r3, #33554432 @ 0x2000000
  2256. 8001182: 627b str r3, [r7, #36] @ 0x24
  2257. sBreakDeadTimeConfig.Break2Filter = 0;
  2258. 8001184: 2300 movs r3, #0
  2259. 8001186: 62bb str r3, [r7, #40] @ 0x28
  2260. sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
  2261. 8001188: 2300 movs r3, #0
  2262. 800118a: 62fb str r3, [r7, #44] @ 0x2c
  2263. if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK)
  2264. 800118c: 1d3b adds r3, r7, #4
  2265. 800118e: 4619 mov r1, r3
  2266. 8001190: 480c ldr r0, [pc, #48] @ (80011c4 <MX_TIM1_Init+0x12c>)
  2267. 8001192: f00f fb31 bl 80107f8 <HAL_TIMEx_ConfigBreakDeadTime>
  2268. 8001196: 4603 mov r3, r0
  2269. 8001198: 2b00 cmp r3, #0
  2270. 800119a: d001 beq.n 80011a0 <MX_TIM1_Init+0x108>
  2271. {
  2272. Error_Handler();
  2273. 800119c: f000 fd16 bl 8001bcc <Error_Handler>
  2274. }
  2275. /* USER CODE BEGIN TIM1_Init 2 */
  2276. memcpy(&fanTimerConfigOC, &sConfigOC, sizeof(TIM_OC_InitTypeDef));
  2277. 80011a0: 4b0a ldr r3, [pc, #40] @ (80011cc <MX_TIM1_Init+0x134>)
  2278. 80011a2: 461d mov r5, r3
  2279. 80011a4: f107 0430 add.w r4, r7, #48 @ 0x30
  2280. 80011a8: cc0f ldmia r4!, {r0, r1, r2, r3}
  2281. 80011aa: c50f stmia r5!, {r0, r1, r2, r3}
  2282. 80011ac: e894 0007 ldmia.w r4, {r0, r1, r2}
  2283. 80011b0: e885 0007 stmia.w r5, {r0, r1, r2}
  2284. /* USER CODE END TIM1_Init 2 */
  2285. HAL_TIM_MspPostInit(&htim1);
  2286. 80011b4: 4803 ldr r0, [pc, #12] @ (80011c4 <MX_TIM1_Init+0x12c>)
  2287. 80011b6: f003 f815 bl 80041e4 <HAL_TIM_MspPostInit>
  2288. }
  2289. 80011ba: bf00 nop
  2290. 80011bc: 3758 adds r7, #88 @ 0x58
  2291. 80011be: 46bd mov sp, r7
  2292. 80011c0: bdb0 pop {r4, r5, r7, pc}
  2293. 80011c2: bf00 nop
  2294. 80011c4: 2400044c .word 0x2400044c
  2295. 80011c8: 40010000 .word 0x40010000
  2296. 80011cc: 2400071c .word 0x2400071c
  2297. 080011d0 <MX_TIM3_Init>:
  2298. * @brief TIM3 Initialization Function
  2299. * @param None
  2300. * @retval None
  2301. */
  2302. static void MX_TIM3_Init(void)
  2303. {
  2304. 80011d0: b5b0 push {r4, r5, r7, lr}
  2305. 80011d2: b08a sub sp, #40 @ 0x28
  2306. 80011d4: af00 add r7, sp, #0
  2307. /* USER CODE BEGIN TIM3_Init 0 */
  2308. /* USER CODE END TIM3_Init 0 */
  2309. TIM_MasterConfigTypeDef sMasterConfig = {0};
  2310. 80011d6: f107 031c add.w r3, r7, #28
  2311. 80011da: 2200 movs r2, #0
  2312. 80011dc: 601a str r2, [r3, #0]
  2313. 80011de: 605a str r2, [r3, #4]
  2314. 80011e0: 609a str r2, [r3, #8]
  2315. TIM_OC_InitTypeDef sConfigOC = {0};
  2316. 80011e2: 463b mov r3, r7
  2317. 80011e4: 2200 movs r2, #0
  2318. 80011e6: 601a str r2, [r3, #0]
  2319. 80011e8: 605a str r2, [r3, #4]
  2320. 80011ea: 609a str r2, [r3, #8]
  2321. 80011ec: 60da str r2, [r3, #12]
  2322. 80011ee: 611a str r2, [r3, #16]
  2323. 80011f0: 615a str r2, [r3, #20]
  2324. 80011f2: 619a str r2, [r3, #24]
  2325. /* USER CODE BEGIN TIM3_Init 1 */
  2326. /* USER CODE END TIM3_Init 1 */
  2327. htim3.Instance = TIM3;
  2328. 80011f4: 4b48 ldr r3, [pc, #288] @ (8001318 <MX_TIM3_Init+0x148>)
  2329. 80011f6: 4a49 ldr r2, [pc, #292] @ (800131c <MX_TIM3_Init+0x14c>)
  2330. 80011f8: 601a str r2, [r3, #0]
  2331. htim3.Init.Prescaler = 199;
  2332. 80011fa: 4b47 ldr r3, [pc, #284] @ (8001318 <MX_TIM3_Init+0x148>)
  2333. 80011fc: 22c7 movs r2, #199 @ 0xc7
  2334. 80011fe: 605a str r2, [r3, #4]
  2335. htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
  2336. 8001200: 4b45 ldr r3, [pc, #276] @ (8001318 <MX_TIM3_Init+0x148>)
  2337. 8001202: 2200 movs r2, #0
  2338. 8001204: 609a str r2, [r3, #8]
  2339. htim3.Init.Period = 999;
  2340. 8001206: 4b44 ldr r3, [pc, #272] @ (8001318 <MX_TIM3_Init+0x148>)
  2341. 8001208: f240 32e7 movw r2, #999 @ 0x3e7
  2342. 800120c: 60da str r2, [r3, #12]
  2343. htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  2344. 800120e: 4b42 ldr r3, [pc, #264] @ (8001318 <MX_TIM3_Init+0x148>)
  2345. 8001210: 2200 movs r2, #0
  2346. 8001212: 611a str r2, [r3, #16]
  2347. htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  2348. 8001214: 4b40 ldr r3, [pc, #256] @ (8001318 <MX_TIM3_Init+0x148>)
  2349. 8001216: 2280 movs r2, #128 @ 0x80
  2350. 8001218: 619a str r2, [r3, #24]
  2351. if (HAL_TIM_PWM_Init(&htim3) != HAL_OK)
  2352. 800121a: 483f ldr r0, [pc, #252] @ (8001318 <MX_TIM3_Init+0x148>)
  2353. 800121c: f00e f8ac bl 800f378 <HAL_TIM_PWM_Init>
  2354. 8001220: 4603 mov r3, r0
  2355. 8001222: 2b00 cmp r3, #0
  2356. 8001224: d001 beq.n 800122a <MX_TIM3_Init+0x5a>
  2357. {
  2358. Error_Handler();
  2359. 8001226: f000 fcd1 bl 8001bcc <Error_Handler>
  2360. }
  2361. sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  2362. 800122a: 2300 movs r3, #0
  2363. 800122c: 61fb str r3, [r7, #28]
  2364. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  2365. 800122e: 2300 movs r3, #0
  2366. 8001230: 627b str r3, [r7, #36] @ 0x24
  2367. if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
  2368. 8001232: f107 031c add.w r3, r7, #28
  2369. 8001236: 4619 mov r1, r3
  2370. 8001238: 4837 ldr r0, [pc, #220] @ (8001318 <MX_TIM3_Init+0x148>)
  2371. 800123a: f00f fa4f bl 80106dc <HAL_TIMEx_MasterConfigSynchronization>
  2372. 800123e: 4603 mov r3, r0
  2373. 8001240: 2b00 cmp r3, #0
  2374. 8001242: d001 beq.n 8001248 <MX_TIM3_Init+0x78>
  2375. {
  2376. Error_Handler();
  2377. 8001244: f000 fcc2 bl 8001bcc <Error_Handler>
  2378. }
  2379. sConfigOC.OCMode = TIM_OCMODE_COMBINED_PWM1;
  2380. 8001248: 4b35 ldr r3, [pc, #212] @ (8001320 <MX_TIM3_Init+0x150>)
  2381. 800124a: 603b str r3, [r7, #0]
  2382. sConfigOC.Pulse = 500;
  2383. 800124c: f44f 73fa mov.w r3, #500 @ 0x1f4
  2384. 8001250: 607b str r3, [r7, #4]
  2385. sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  2386. 8001252: 2300 movs r3, #0
  2387. 8001254: 60bb str r3, [r7, #8]
  2388. sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  2389. 8001256: 2300 movs r3, #0
  2390. 8001258: 613b str r3, [r7, #16]
  2391. if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
  2392. 800125a: 463b mov r3, r7
  2393. 800125c: 2200 movs r2, #0
  2394. 800125e: 4619 mov r1, r3
  2395. 8001260: 482d ldr r0, [pc, #180] @ (8001318 <MX_TIM3_Init+0x148>)
  2396. 8001262: f00e fb8d bl 800f980 <HAL_TIM_PWM_ConfigChannel>
  2397. 8001266: 4603 mov r3, r0
  2398. 8001268: 2b00 cmp r3, #0
  2399. 800126a: d001 beq.n 8001270 <MX_TIM3_Init+0xa0>
  2400. {
  2401. Error_Handler();
  2402. 800126c: f000 fcae bl 8001bcc <Error_Handler>
  2403. }
  2404. __HAL_TIM_DISABLE_OCxPRELOAD(&htim3, TIM_CHANNEL_1);
  2405. 8001270: 4b29 ldr r3, [pc, #164] @ (8001318 <MX_TIM3_Init+0x148>)
  2406. 8001272: 681b ldr r3, [r3, #0]
  2407. 8001274: 699a ldr r2, [r3, #24]
  2408. 8001276: 4b28 ldr r3, [pc, #160] @ (8001318 <MX_TIM3_Init+0x148>)
  2409. 8001278: 681b ldr r3, [r3, #0]
  2410. 800127a: f022 0208 bic.w r2, r2, #8
  2411. 800127e: 619a str r2, [r3, #24]
  2412. sConfigOC.OCMode = TIM_OCMODE_PWM1;
  2413. 8001280: 2360 movs r3, #96 @ 0x60
  2414. 8001282: 603b str r3, [r7, #0]
  2415. if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
  2416. 8001284: 463b mov r3, r7
  2417. 8001286: 2204 movs r2, #4
  2418. 8001288: 4619 mov r1, r3
  2419. 800128a: 4823 ldr r0, [pc, #140] @ (8001318 <MX_TIM3_Init+0x148>)
  2420. 800128c: f00e fb78 bl 800f980 <HAL_TIM_PWM_ConfigChannel>
  2421. 8001290: 4603 mov r3, r0
  2422. 8001292: 2b00 cmp r3, #0
  2423. 8001294: d001 beq.n 800129a <MX_TIM3_Init+0xca>
  2424. {
  2425. Error_Handler();
  2426. 8001296: f000 fc99 bl 8001bcc <Error_Handler>
  2427. }
  2428. __HAL_TIM_DISABLE_OCxPRELOAD(&htim3, TIM_CHANNEL_2);
  2429. 800129a: 4b1f ldr r3, [pc, #124] @ (8001318 <MX_TIM3_Init+0x148>)
  2430. 800129c: 681b ldr r3, [r3, #0]
  2431. 800129e: 699a ldr r2, [r3, #24]
  2432. 80012a0: 4b1d ldr r3, [pc, #116] @ (8001318 <MX_TIM3_Init+0x148>)
  2433. 80012a2: 681b ldr r3, [r3, #0]
  2434. 80012a4: f422 6200 bic.w r2, r2, #2048 @ 0x800
  2435. 80012a8: 619a str r2, [r3, #24]
  2436. if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
  2437. 80012aa: 463b mov r3, r7
  2438. 80012ac: 2208 movs r2, #8
  2439. 80012ae: 4619 mov r1, r3
  2440. 80012b0: 4819 ldr r0, [pc, #100] @ (8001318 <MX_TIM3_Init+0x148>)
  2441. 80012b2: f00e fb65 bl 800f980 <HAL_TIM_PWM_ConfigChannel>
  2442. 80012b6: 4603 mov r3, r0
  2443. 80012b8: 2b00 cmp r3, #0
  2444. 80012ba: d001 beq.n 80012c0 <MX_TIM3_Init+0xf0>
  2445. {
  2446. Error_Handler();
  2447. 80012bc: f000 fc86 bl 8001bcc <Error_Handler>
  2448. }
  2449. __HAL_TIM_DISABLE_OCxPRELOAD(&htim3, TIM_CHANNEL_3);
  2450. 80012c0: 4b15 ldr r3, [pc, #84] @ (8001318 <MX_TIM3_Init+0x148>)
  2451. 80012c2: 681b ldr r3, [r3, #0]
  2452. 80012c4: 69da ldr r2, [r3, #28]
  2453. 80012c6: 4b14 ldr r3, [pc, #80] @ (8001318 <MX_TIM3_Init+0x148>)
  2454. 80012c8: 681b ldr r3, [r3, #0]
  2455. 80012ca: f022 0208 bic.w r2, r2, #8
  2456. 80012ce: 61da str r2, [r3, #28]
  2457. if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
  2458. 80012d0: 463b mov r3, r7
  2459. 80012d2: 220c movs r2, #12
  2460. 80012d4: 4619 mov r1, r3
  2461. 80012d6: 4810 ldr r0, [pc, #64] @ (8001318 <MX_TIM3_Init+0x148>)
  2462. 80012d8: f00e fb52 bl 800f980 <HAL_TIM_PWM_ConfigChannel>
  2463. 80012dc: 4603 mov r3, r0
  2464. 80012de: 2b00 cmp r3, #0
  2465. 80012e0: d001 beq.n 80012e6 <MX_TIM3_Init+0x116>
  2466. {
  2467. Error_Handler();
  2468. 80012e2: f000 fc73 bl 8001bcc <Error_Handler>
  2469. }
  2470. __HAL_TIM_DISABLE_OCxPRELOAD(&htim3, TIM_CHANNEL_4);
  2471. 80012e6: 4b0c ldr r3, [pc, #48] @ (8001318 <MX_TIM3_Init+0x148>)
  2472. 80012e8: 681b ldr r3, [r3, #0]
  2473. 80012ea: 69da ldr r2, [r3, #28]
  2474. 80012ec: 4b0a ldr r3, [pc, #40] @ (8001318 <MX_TIM3_Init+0x148>)
  2475. 80012ee: 681b ldr r3, [r3, #0]
  2476. 80012f0: f422 6200 bic.w r2, r2, #2048 @ 0x800
  2477. 80012f4: 61da str r2, [r3, #28]
  2478. /* USER CODE BEGIN TIM3_Init 2 */
  2479. memcpy(&motorXYTimerConfigOC, &sConfigOC, sizeof(TIM_OC_InitTypeDef));
  2480. 80012f6: 4b0b ldr r3, [pc, #44] @ (8001324 <MX_TIM3_Init+0x154>)
  2481. 80012f8: 461d mov r5, r3
  2482. 80012fa: 463c mov r4, r7
  2483. 80012fc: cc0f ldmia r4!, {r0, r1, r2, r3}
  2484. 80012fe: c50f stmia r5!, {r0, r1, r2, r3}
  2485. 8001300: e894 0007 ldmia.w r4, {r0, r1, r2}
  2486. 8001304: e885 0007 stmia.w r5, {r0, r1, r2}
  2487. /* USER CODE END TIM3_Init 2 */
  2488. HAL_TIM_MspPostInit(&htim3);
  2489. 8001308: 4803 ldr r0, [pc, #12] @ (8001318 <MX_TIM3_Init+0x148>)
  2490. 800130a: f002 ff6b bl 80041e4 <HAL_TIM_MspPostInit>
  2491. }
  2492. 800130e: bf00 nop
  2493. 8001310: 3728 adds r7, #40 @ 0x28
  2494. 8001312: 46bd mov sp, r7
  2495. 8001314: bdb0 pop {r4, r5, r7, pc}
  2496. 8001316: bf00 nop
  2497. 8001318: 24000498 .word 0x24000498
  2498. 800131c: 40000400 .word 0x40000400
  2499. 8001320: 00010040 .word 0x00010040
  2500. 8001324: 24000738 .word 0x24000738
  2501. 08001328 <MX_TIM8_Init>:
  2502. * @brief TIM8 Initialization Function
  2503. * @param None
  2504. * @retval None
  2505. */
  2506. static void MX_TIM8_Init(void)
  2507. {
  2508. 8001328: b580 push {r7, lr}
  2509. 800132a: b088 sub sp, #32
  2510. 800132c: af00 add r7, sp, #0
  2511. /* USER CODE BEGIN TIM8_Init 0 */
  2512. /* USER CODE END TIM8_Init 0 */
  2513. TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  2514. 800132e: f107 0310 add.w r3, r7, #16
  2515. 8001332: 2200 movs r2, #0
  2516. 8001334: 601a str r2, [r3, #0]
  2517. 8001336: 605a str r2, [r3, #4]
  2518. 8001338: 609a str r2, [r3, #8]
  2519. 800133a: 60da str r2, [r3, #12]
  2520. TIM_MasterConfigTypeDef sMasterConfig = {0};
  2521. 800133c: 1d3b adds r3, r7, #4
  2522. 800133e: 2200 movs r2, #0
  2523. 8001340: 601a str r2, [r3, #0]
  2524. 8001342: 605a str r2, [r3, #4]
  2525. 8001344: 609a str r2, [r3, #8]
  2526. /* USER CODE BEGIN TIM8_Init 1 */
  2527. /* USER CODE END TIM8_Init 1 */
  2528. htim8.Instance = TIM8;
  2529. 8001346: 4b21 ldr r3, [pc, #132] @ (80013cc <MX_TIM8_Init+0xa4>)
  2530. 8001348: 4a21 ldr r2, [pc, #132] @ (80013d0 <MX_TIM8_Init+0xa8>)
  2531. 800134a: 601a str r2, [r3, #0]
  2532. htim8.Init.Prescaler = 9999;
  2533. 800134c: 4b1f ldr r3, [pc, #124] @ (80013cc <MX_TIM8_Init+0xa4>)
  2534. 800134e: f242 720f movw r2, #9999 @ 0x270f
  2535. 8001352: 605a str r2, [r3, #4]
  2536. htim8.Init.CounterMode = TIM_COUNTERMODE_UP;
  2537. 8001354: 4b1d ldr r3, [pc, #116] @ (80013cc <MX_TIM8_Init+0xa4>)
  2538. 8001356: 2200 movs r2, #0
  2539. 8001358: 609a str r2, [r3, #8]
  2540. htim8.Init.Period = 999;
  2541. 800135a: 4b1c ldr r3, [pc, #112] @ (80013cc <MX_TIM8_Init+0xa4>)
  2542. 800135c: f240 32e7 movw r2, #999 @ 0x3e7
  2543. 8001360: 60da str r2, [r3, #12]
  2544. htim8.Init.ClockDivision = TIM_CLOCKDIVISION_DIV2;
  2545. 8001362: 4b1a ldr r3, [pc, #104] @ (80013cc <MX_TIM8_Init+0xa4>)
  2546. 8001364: f44f 7280 mov.w r2, #256 @ 0x100
  2547. 8001368: 611a str r2, [r3, #16]
  2548. htim8.Init.RepetitionCounter = 0;
  2549. 800136a: 4b18 ldr r3, [pc, #96] @ (80013cc <MX_TIM8_Init+0xa4>)
  2550. 800136c: 2200 movs r2, #0
  2551. 800136e: 615a str r2, [r3, #20]
  2552. htim8.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  2553. 8001370: 4b16 ldr r3, [pc, #88] @ (80013cc <MX_TIM8_Init+0xa4>)
  2554. 8001372: 2280 movs r2, #128 @ 0x80
  2555. 8001374: 619a str r2, [r3, #24]
  2556. if (HAL_TIM_Base_Init(&htim8) != HAL_OK)
  2557. 8001376: 4815 ldr r0, [pc, #84] @ (80013cc <MX_TIM8_Init+0xa4>)
  2558. 8001378: f00d febe bl 800f0f8 <HAL_TIM_Base_Init>
  2559. 800137c: 4603 mov r3, r0
  2560. 800137e: 2b00 cmp r3, #0
  2561. 8001380: d001 beq.n 8001386 <MX_TIM8_Init+0x5e>
  2562. {
  2563. Error_Handler();
  2564. 8001382: f000 fc23 bl 8001bcc <Error_Handler>
  2565. }
  2566. sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  2567. 8001386: f44f 5380 mov.w r3, #4096 @ 0x1000
  2568. 800138a: 613b str r3, [r7, #16]
  2569. if (HAL_TIM_ConfigClockSource(&htim8, &sClockSourceConfig) != HAL_OK)
  2570. 800138c: f107 0310 add.w r3, r7, #16
  2571. 8001390: 4619 mov r1, r3
  2572. 8001392: 480e ldr r0, [pc, #56] @ (80013cc <MX_TIM8_Init+0xa4>)
  2573. 8001394: f00e fc08 bl 800fba8 <HAL_TIM_ConfigClockSource>
  2574. 8001398: 4603 mov r3, r0
  2575. 800139a: 2b00 cmp r3, #0
  2576. 800139c: d001 beq.n 80013a2 <MX_TIM8_Init+0x7a>
  2577. {
  2578. Error_Handler();
  2579. 800139e: f000 fc15 bl 8001bcc <Error_Handler>
  2580. }
  2581. sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;
  2582. 80013a2: 2320 movs r3, #32
  2583. 80013a4: 607b str r3, [r7, #4]
  2584. sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
  2585. 80013a6: 2300 movs r3, #0
  2586. 80013a8: 60bb str r3, [r7, #8]
  2587. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_ENABLE;
  2588. 80013aa: 2380 movs r3, #128 @ 0x80
  2589. 80013ac: 60fb str r3, [r7, #12]
  2590. if (HAL_TIMEx_MasterConfigSynchronization(&htim8, &sMasterConfig) != HAL_OK)
  2591. 80013ae: 1d3b adds r3, r7, #4
  2592. 80013b0: 4619 mov r1, r3
  2593. 80013b2: 4806 ldr r0, [pc, #24] @ (80013cc <MX_TIM8_Init+0xa4>)
  2594. 80013b4: f00f f992 bl 80106dc <HAL_TIMEx_MasterConfigSynchronization>
  2595. 80013b8: 4603 mov r3, r0
  2596. 80013ba: 2b00 cmp r3, #0
  2597. 80013bc: d001 beq.n 80013c2 <MX_TIM8_Init+0x9a>
  2598. {
  2599. Error_Handler();
  2600. 80013be: f000 fc05 bl 8001bcc <Error_Handler>
  2601. }
  2602. /* USER CODE BEGIN TIM8_Init 2 */
  2603. /* USER CODE END TIM8_Init 2 */
  2604. }
  2605. 80013c2: bf00 nop
  2606. 80013c4: 3720 adds r7, #32
  2607. 80013c6: 46bd mov sp, r7
  2608. 80013c8: bd80 pop {r7, pc}
  2609. 80013ca: bf00 nop
  2610. 80013cc: 240004e4 .word 0x240004e4
  2611. 80013d0: 40010400 .word 0x40010400
  2612. 080013d4 <MX_UART8_Init>:
  2613. * @brief UART8 Initialization Function
  2614. * @param None
  2615. * @retval None
  2616. */
  2617. static void MX_UART8_Init(void)
  2618. {
  2619. 80013d4: b580 push {r7, lr}
  2620. 80013d6: af00 add r7, sp, #0
  2621. /* USER CODE END UART8_Init 0 */
  2622. /* USER CODE BEGIN UART8_Init 1 */
  2623. /* USER CODE END UART8_Init 1 */
  2624. huart8.Instance = UART8;
  2625. 80013d8: 4b22 ldr r3, [pc, #136] @ (8001464 <MX_UART8_Init+0x90>)
  2626. 80013da: 4a23 ldr r2, [pc, #140] @ (8001468 <MX_UART8_Init+0x94>)
  2627. 80013dc: 601a str r2, [r3, #0]
  2628. huart8.Init.BaudRate = 115200;
  2629. 80013de: 4b21 ldr r3, [pc, #132] @ (8001464 <MX_UART8_Init+0x90>)
  2630. 80013e0: f44f 32e1 mov.w r2, #115200 @ 0x1c200
  2631. 80013e4: 605a str r2, [r3, #4]
  2632. huart8.Init.WordLength = UART_WORDLENGTH_8B;
  2633. 80013e6: 4b1f ldr r3, [pc, #124] @ (8001464 <MX_UART8_Init+0x90>)
  2634. 80013e8: 2200 movs r2, #0
  2635. 80013ea: 609a str r2, [r3, #8]
  2636. huart8.Init.StopBits = UART_STOPBITS_1;
  2637. 80013ec: 4b1d ldr r3, [pc, #116] @ (8001464 <MX_UART8_Init+0x90>)
  2638. 80013ee: 2200 movs r2, #0
  2639. 80013f0: 60da str r2, [r3, #12]
  2640. huart8.Init.Parity = UART_PARITY_NONE;
  2641. 80013f2: 4b1c ldr r3, [pc, #112] @ (8001464 <MX_UART8_Init+0x90>)
  2642. 80013f4: 2200 movs r2, #0
  2643. 80013f6: 611a str r2, [r3, #16]
  2644. huart8.Init.Mode = UART_MODE_TX_RX;
  2645. 80013f8: 4b1a ldr r3, [pc, #104] @ (8001464 <MX_UART8_Init+0x90>)
  2646. 80013fa: 220c movs r2, #12
  2647. 80013fc: 615a str r2, [r3, #20]
  2648. huart8.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  2649. 80013fe: 4b19 ldr r3, [pc, #100] @ (8001464 <MX_UART8_Init+0x90>)
  2650. 8001400: 2200 movs r2, #0
  2651. 8001402: 619a str r2, [r3, #24]
  2652. huart8.Init.OverSampling = UART_OVERSAMPLING_16;
  2653. 8001404: 4b17 ldr r3, [pc, #92] @ (8001464 <MX_UART8_Init+0x90>)
  2654. 8001406: 2200 movs r2, #0
  2655. 8001408: 61da str r2, [r3, #28]
  2656. huart8.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  2657. 800140a: 4b16 ldr r3, [pc, #88] @ (8001464 <MX_UART8_Init+0x90>)
  2658. 800140c: 2200 movs r2, #0
  2659. 800140e: 621a str r2, [r3, #32]
  2660. huart8.Init.ClockPrescaler = UART_PRESCALER_DIV1;
  2661. 8001410: 4b14 ldr r3, [pc, #80] @ (8001464 <MX_UART8_Init+0x90>)
  2662. 8001412: 2200 movs r2, #0
  2663. 8001414: 625a str r2, [r3, #36] @ 0x24
  2664. huart8.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  2665. 8001416: 4b13 ldr r3, [pc, #76] @ (8001464 <MX_UART8_Init+0x90>)
  2666. 8001418: 2200 movs r2, #0
  2667. 800141a: 629a str r2, [r3, #40] @ 0x28
  2668. if (HAL_UART_Init(&huart8) != HAL_OK)
  2669. 800141c: 4811 ldr r0, [pc, #68] @ (8001464 <MX_UART8_Init+0x90>)
  2670. 800141e: f00f fa87 bl 8010930 <HAL_UART_Init>
  2671. 8001422: 4603 mov r3, r0
  2672. 8001424: 2b00 cmp r3, #0
  2673. 8001426: d001 beq.n 800142c <MX_UART8_Init+0x58>
  2674. {
  2675. Error_Handler();
  2676. 8001428: f000 fbd0 bl 8001bcc <Error_Handler>
  2677. }
  2678. if (HAL_UARTEx_SetTxFifoThreshold(&huart8, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
  2679. 800142c: 2100 movs r1, #0
  2680. 800142e: 480d ldr r0, [pc, #52] @ (8001464 <MX_UART8_Init+0x90>)
  2681. 8001430: f011 ff27 bl 8013282 <HAL_UARTEx_SetTxFifoThreshold>
  2682. 8001434: 4603 mov r3, r0
  2683. 8001436: 2b00 cmp r3, #0
  2684. 8001438: d001 beq.n 800143e <MX_UART8_Init+0x6a>
  2685. {
  2686. Error_Handler();
  2687. 800143a: f000 fbc7 bl 8001bcc <Error_Handler>
  2688. }
  2689. if (HAL_UARTEx_SetRxFifoThreshold(&huart8, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
  2690. 800143e: 2100 movs r1, #0
  2691. 8001440: 4808 ldr r0, [pc, #32] @ (8001464 <MX_UART8_Init+0x90>)
  2692. 8001442: f011 ff5c bl 80132fe <HAL_UARTEx_SetRxFifoThreshold>
  2693. 8001446: 4603 mov r3, r0
  2694. 8001448: 2b00 cmp r3, #0
  2695. 800144a: d001 beq.n 8001450 <MX_UART8_Init+0x7c>
  2696. {
  2697. Error_Handler();
  2698. 800144c: f000 fbbe bl 8001bcc <Error_Handler>
  2699. }
  2700. if (HAL_UARTEx_DisableFifoMode(&huart8) != HAL_OK)
  2701. 8001450: 4804 ldr r0, [pc, #16] @ (8001464 <MX_UART8_Init+0x90>)
  2702. 8001452: f011 fedd bl 8013210 <HAL_UARTEx_DisableFifoMode>
  2703. 8001456: 4603 mov r3, r0
  2704. 8001458: 2b00 cmp r3, #0
  2705. 800145a: d001 beq.n 8001460 <MX_UART8_Init+0x8c>
  2706. {
  2707. Error_Handler();
  2708. 800145c: f000 fbb6 bl 8001bcc <Error_Handler>
  2709. }
  2710. /* USER CODE BEGIN UART8_Init 2 */
  2711. /* USER CODE END UART8_Init 2 */
  2712. }
  2713. 8001460: bf00 nop
  2714. 8001462: bd80 pop {r7, pc}
  2715. 8001464: 24000530 .word 0x24000530
  2716. 8001468: 40007c00 .word 0x40007c00
  2717. 0800146c <MX_USART1_UART_Init>:
  2718. * @brief USART1 Initialization Function
  2719. * @param None
  2720. * @retval None
  2721. */
  2722. static void MX_USART1_UART_Init(void)
  2723. {
  2724. 800146c: b580 push {r7, lr}
  2725. 800146e: af00 add r7, sp, #0
  2726. /* USER CODE END USART1_Init 0 */
  2727. /* USER CODE BEGIN USART1_Init 1 */
  2728. /* USER CODE END USART1_Init 1 */
  2729. huart1.Instance = USART1;
  2730. 8001470: 4b24 ldr r3, [pc, #144] @ (8001504 <MX_USART1_UART_Init+0x98>)
  2731. 8001472: 4a25 ldr r2, [pc, #148] @ (8001508 <MX_USART1_UART_Init+0x9c>)
  2732. 8001474: 601a str r2, [r3, #0]
  2733. huart1.Init.BaudRate = 115200;
  2734. 8001476: 4b23 ldr r3, [pc, #140] @ (8001504 <MX_USART1_UART_Init+0x98>)
  2735. 8001478: f44f 32e1 mov.w r2, #115200 @ 0x1c200
  2736. 800147c: 605a str r2, [r3, #4]
  2737. huart1.Init.WordLength = UART_WORDLENGTH_8B;
  2738. 800147e: 4b21 ldr r3, [pc, #132] @ (8001504 <MX_USART1_UART_Init+0x98>)
  2739. 8001480: 2200 movs r2, #0
  2740. 8001482: 609a str r2, [r3, #8]
  2741. huart1.Init.StopBits = UART_STOPBITS_1;
  2742. 8001484: 4b1f ldr r3, [pc, #124] @ (8001504 <MX_USART1_UART_Init+0x98>)
  2743. 8001486: 2200 movs r2, #0
  2744. 8001488: 60da str r2, [r3, #12]
  2745. huart1.Init.Parity = UART_PARITY_NONE;
  2746. 800148a: 4b1e ldr r3, [pc, #120] @ (8001504 <MX_USART1_UART_Init+0x98>)
  2747. 800148c: 2200 movs r2, #0
  2748. 800148e: 611a str r2, [r3, #16]
  2749. huart1.Init.Mode = UART_MODE_TX_RX;
  2750. 8001490: 4b1c ldr r3, [pc, #112] @ (8001504 <MX_USART1_UART_Init+0x98>)
  2751. 8001492: 220c movs r2, #12
  2752. 8001494: 615a str r2, [r3, #20]
  2753. huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  2754. 8001496: 4b1b ldr r3, [pc, #108] @ (8001504 <MX_USART1_UART_Init+0x98>)
  2755. 8001498: 2200 movs r2, #0
  2756. 800149a: 619a str r2, [r3, #24]
  2757. huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  2758. 800149c: 4b19 ldr r3, [pc, #100] @ (8001504 <MX_USART1_UART_Init+0x98>)
  2759. 800149e: 2200 movs r2, #0
  2760. 80014a0: 61da str r2, [r3, #28]
  2761. huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  2762. 80014a2: 4b18 ldr r3, [pc, #96] @ (8001504 <MX_USART1_UART_Init+0x98>)
  2763. 80014a4: 2200 movs r2, #0
  2764. 80014a6: 621a str r2, [r3, #32]
  2765. huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
  2766. 80014a8: 4b16 ldr r3, [pc, #88] @ (8001504 <MX_USART1_UART_Init+0x98>)
  2767. 80014aa: 2200 movs r2, #0
  2768. 80014ac: 625a str r2, [r3, #36] @ 0x24
  2769. huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_TXINVERT_INIT;
  2770. 80014ae: 4b15 ldr r3, [pc, #84] @ (8001504 <MX_USART1_UART_Init+0x98>)
  2771. 80014b0: 2201 movs r2, #1
  2772. 80014b2: 629a str r2, [r3, #40] @ 0x28
  2773. huart1.AdvancedInit.TxPinLevelInvert = UART_ADVFEATURE_TXINV_ENABLE;
  2774. 80014b4: 4b13 ldr r3, [pc, #76] @ (8001504 <MX_USART1_UART_Init+0x98>)
  2775. 80014b6: f44f 3200 mov.w r2, #131072 @ 0x20000
  2776. 80014ba: 62da str r2, [r3, #44] @ 0x2c
  2777. if (HAL_UART_Init(&huart1) != HAL_OK)
  2778. 80014bc: 4811 ldr r0, [pc, #68] @ (8001504 <MX_USART1_UART_Init+0x98>)
  2779. 80014be: f00f fa37 bl 8010930 <HAL_UART_Init>
  2780. 80014c2: 4603 mov r3, r0
  2781. 80014c4: 2b00 cmp r3, #0
  2782. 80014c6: d001 beq.n 80014cc <MX_USART1_UART_Init+0x60>
  2783. {
  2784. Error_Handler();
  2785. 80014c8: f000 fb80 bl 8001bcc <Error_Handler>
  2786. }
  2787. if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
  2788. 80014cc: 2100 movs r1, #0
  2789. 80014ce: 480d ldr r0, [pc, #52] @ (8001504 <MX_USART1_UART_Init+0x98>)
  2790. 80014d0: f011 fed7 bl 8013282 <HAL_UARTEx_SetTxFifoThreshold>
  2791. 80014d4: 4603 mov r3, r0
  2792. 80014d6: 2b00 cmp r3, #0
  2793. 80014d8: d001 beq.n 80014de <MX_USART1_UART_Init+0x72>
  2794. {
  2795. Error_Handler();
  2796. 80014da: f000 fb77 bl 8001bcc <Error_Handler>
  2797. }
  2798. if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
  2799. 80014de: 2100 movs r1, #0
  2800. 80014e0: 4808 ldr r0, [pc, #32] @ (8001504 <MX_USART1_UART_Init+0x98>)
  2801. 80014e2: f011 ff0c bl 80132fe <HAL_UARTEx_SetRxFifoThreshold>
  2802. 80014e6: 4603 mov r3, r0
  2803. 80014e8: 2b00 cmp r3, #0
  2804. 80014ea: d001 beq.n 80014f0 <MX_USART1_UART_Init+0x84>
  2805. {
  2806. Error_Handler();
  2807. 80014ec: f000 fb6e bl 8001bcc <Error_Handler>
  2808. }
  2809. if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
  2810. 80014f0: 4804 ldr r0, [pc, #16] @ (8001504 <MX_USART1_UART_Init+0x98>)
  2811. 80014f2: f011 fe8d bl 8013210 <HAL_UARTEx_DisableFifoMode>
  2812. 80014f6: 4603 mov r3, r0
  2813. 80014f8: 2b00 cmp r3, #0
  2814. 80014fa: d001 beq.n 8001500 <MX_USART1_UART_Init+0x94>
  2815. {
  2816. Error_Handler();
  2817. 80014fc: f000 fb66 bl 8001bcc <Error_Handler>
  2818. }
  2819. /* USER CODE BEGIN USART1_Init 2 */
  2820. /* USER CODE END USART1_Init 2 */
  2821. }
  2822. 8001500: bf00 nop
  2823. 8001502: bd80 pop {r7, pc}
  2824. 8001504: 240005c4 .word 0x240005c4
  2825. 8001508: 40011000 .word 0x40011000
  2826. 0800150c <MX_DMA_Init>:
  2827. /**
  2828. * Enable DMA controller clock
  2829. */
  2830. static void MX_DMA_Init(void)
  2831. {
  2832. 800150c: b580 push {r7, lr}
  2833. 800150e: b082 sub sp, #8
  2834. 8001510: af00 add r7, sp, #0
  2835. /* DMA controller clock enable */
  2836. __HAL_RCC_DMA1_CLK_ENABLE();
  2837. 8001512: 4b15 ldr r3, [pc, #84] @ (8001568 <MX_DMA_Init+0x5c>)
  2838. 8001514: f8d3 30d8 ldr.w r3, [r3, #216] @ 0xd8
  2839. 8001518: 4a13 ldr r2, [pc, #76] @ (8001568 <MX_DMA_Init+0x5c>)
  2840. 800151a: f043 0301 orr.w r3, r3, #1
  2841. 800151e: f8c2 30d8 str.w r3, [r2, #216] @ 0xd8
  2842. 8001522: 4b11 ldr r3, [pc, #68] @ (8001568 <MX_DMA_Init+0x5c>)
  2843. 8001524: f8d3 30d8 ldr.w r3, [r3, #216] @ 0xd8
  2844. 8001528: f003 0301 and.w r3, r3, #1
  2845. 800152c: 607b str r3, [r7, #4]
  2846. 800152e: 687b ldr r3, [r7, #4]
  2847. /* DMA interrupt init */
  2848. /* DMA1_Stream0_IRQn interrupt configuration */
  2849. HAL_NVIC_SetPriority(DMA1_Stream0_IRQn, 5, 0);
  2850. 8001530: 2200 movs r2, #0
  2851. 8001532: 2105 movs r1, #5
  2852. 8001534: 200b movs r0, #11
  2853. 8001536: f006 f9e1 bl 80078fc <HAL_NVIC_SetPriority>
  2854. HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn);
  2855. 800153a: 200b movs r0, #11
  2856. 800153c: f006 f9f8 bl 8007930 <HAL_NVIC_EnableIRQ>
  2857. /* DMA1_Stream1_IRQn interrupt configuration */
  2858. HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 5, 0);
  2859. 8001540: 2200 movs r2, #0
  2860. 8001542: 2105 movs r1, #5
  2861. 8001544: 200c movs r0, #12
  2862. 8001546: f006 f9d9 bl 80078fc <HAL_NVIC_SetPriority>
  2863. HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn);
  2864. 800154a: 200c movs r0, #12
  2865. 800154c: f006 f9f0 bl 8007930 <HAL_NVIC_EnableIRQ>
  2866. /* DMA1_Stream2_IRQn interrupt configuration */
  2867. HAL_NVIC_SetPriority(DMA1_Stream2_IRQn, 5, 0);
  2868. 8001550: 2200 movs r2, #0
  2869. 8001552: 2105 movs r1, #5
  2870. 8001554: 200d movs r0, #13
  2871. 8001556: f006 f9d1 bl 80078fc <HAL_NVIC_SetPriority>
  2872. HAL_NVIC_EnableIRQ(DMA1_Stream2_IRQn);
  2873. 800155a: 200d movs r0, #13
  2874. 800155c: f006 f9e8 bl 8007930 <HAL_NVIC_EnableIRQ>
  2875. }
  2876. 8001560: bf00 nop
  2877. 8001562: 3708 adds r7, #8
  2878. 8001564: 46bd mov sp, r7
  2879. 8001566: bd80 pop {r7, pc}
  2880. 8001568: 58024400 .word 0x58024400
  2881. 0800156c <MX_GPIO_Init>:
  2882. * @brief GPIO Initialization Function
  2883. * @param None
  2884. * @retval None
  2885. */
  2886. static void MX_GPIO_Init(void)
  2887. {
  2888. 800156c: b580 push {r7, lr}
  2889. 800156e: b08c sub sp, #48 @ 0x30
  2890. 8001570: af00 add r7, sp, #0
  2891. GPIO_InitTypeDef GPIO_InitStruct = {0};
  2892. 8001572: f107 031c add.w r3, r7, #28
  2893. 8001576: 2200 movs r2, #0
  2894. 8001578: 601a str r2, [r3, #0]
  2895. 800157a: 605a str r2, [r3, #4]
  2896. 800157c: 609a str r2, [r3, #8]
  2897. 800157e: 60da str r2, [r3, #12]
  2898. 8001580: 611a str r2, [r3, #16]
  2899. /* USER CODE BEGIN MX_GPIO_Init_1 */
  2900. /* USER CODE END MX_GPIO_Init_1 */
  2901. /* GPIO Ports Clock Enable */
  2902. __HAL_RCC_GPIOH_CLK_ENABLE();
  2903. 8001582: 4b5b ldr r3, [pc, #364] @ (80016f0 <MX_GPIO_Init+0x184>)
  2904. 8001584: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2905. 8001588: 4a59 ldr r2, [pc, #356] @ (80016f0 <MX_GPIO_Init+0x184>)
  2906. 800158a: f043 0380 orr.w r3, r3, #128 @ 0x80
  2907. 800158e: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  2908. 8001592: 4b57 ldr r3, [pc, #348] @ (80016f0 <MX_GPIO_Init+0x184>)
  2909. 8001594: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2910. 8001598: f003 0380 and.w r3, r3, #128 @ 0x80
  2911. 800159c: 61bb str r3, [r7, #24]
  2912. 800159e: 69bb ldr r3, [r7, #24]
  2913. __HAL_RCC_GPIOC_CLK_ENABLE();
  2914. 80015a0: 4b53 ldr r3, [pc, #332] @ (80016f0 <MX_GPIO_Init+0x184>)
  2915. 80015a2: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2916. 80015a6: 4a52 ldr r2, [pc, #328] @ (80016f0 <MX_GPIO_Init+0x184>)
  2917. 80015a8: f043 0304 orr.w r3, r3, #4
  2918. 80015ac: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  2919. 80015b0: 4b4f ldr r3, [pc, #316] @ (80016f0 <MX_GPIO_Init+0x184>)
  2920. 80015b2: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2921. 80015b6: f003 0304 and.w r3, r3, #4
  2922. 80015ba: 617b str r3, [r7, #20]
  2923. 80015bc: 697b ldr r3, [r7, #20]
  2924. __HAL_RCC_GPIOA_CLK_ENABLE();
  2925. 80015be: 4b4c ldr r3, [pc, #304] @ (80016f0 <MX_GPIO_Init+0x184>)
  2926. 80015c0: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2927. 80015c4: 4a4a ldr r2, [pc, #296] @ (80016f0 <MX_GPIO_Init+0x184>)
  2928. 80015c6: f043 0301 orr.w r3, r3, #1
  2929. 80015ca: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  2930. 80015ce: 4b48 ldr r3, [pc, #288] @ (80016f0 <MX_GPIO_Init+0x184>)
  2931. 80015d0: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2932. 80015d4: f003 0301 and.w r3, r3, #1
  2933. 80015d8: 613b str r3, [r7, #16]
  2934. 80015da: 693b ldr r3, [r7, #16]
  2935. __HAL_RCC_GPIOB_CLK_ENABLE();
  2936. 80015dc: 4b44 ldr r3, [pc, #272] @ (80016f0 <MX_GPIO_Init+0x184>)
  2937. 80015de: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2938. 80015e2: 4a43 ldr r2, [pc, #268] @ (80016f0 <MX_GPIO_Init+0x184>)
  2939. 80015e4: f043 0302 orr.w r3, r3, #2
  2940. 80015e8: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  2941. 80015ec: 4b40 ldr r3, [pc, #256] @ (80016f0 <MX_GPIO_Init+0x184>)
  2942. 80015ee: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2943. 80015f2: f003 0302 and.w r3, r3, #2
  2944. 80015f6: 60fb str r3, [r7, #12]
  2945. 80015f8: 68fb ldr r3, [r7, #12]
  2946. __HAL_RCC_GPIOE_CLK_ENABLE();
  2947. 80015fa: 4b3d ldr r3, [pc, #244] @ (80016f0 <MX_GPIO_Init+0x184>)
  2948. 80015fc: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2949. 8001600: 4a3b ldr r2, [pc, #236] @ (80016f0 <MX_GPIO_Init+0x184>)
  2950. 8001602: f043 0310 orr.w r3, r3, #16
  2951. 8001606: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  2952. 800160a: 4b39 ldr r3, [pc, #228] @ (80016f0 <MX_GPIO_Init+0x184>)
  2953. 800160c: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2954. 8001610: f003 0310 and.w r3, r3, #16
  2955. 8001614: 60bb str r3, [r7, #8]
  2956. 8001616: 68bb ldr r3, [r7, #8]
  2957. __HAL_RCC_GPIOD_CLK_ENABLE();
  2958. 8001618: 4b35 ldr r3, [pc, #212] @ (80016f0 <MX_GPIO_Init+0x184>)
  2959. 800161a: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2960. 800161e: 4a34 ldr r2, [pc, #208] @ (80016f0 <MX_GPIO_Init+0x184>)
  2961. 8001620: f043 0308 orr.w r3, r3, #8
  2962. 8001624: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  2963. 8001628: 4b31 ldr r3, [pc, #196] @ (80016f0 <MX_GPIO_Init+0x184>)
  2964. 800162a: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2965. 800162e: f003 0308 and.w r3, r3, #8
  2966. 8001632: 607b str r3, [r7, #4]
  2967. 8001634: 687b ldr r3, [r7, #4]
  2968. /*Configure GPIO pin Output Level */
  2969. HAL_GPIO_WritePin(GPIOE, GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10
  2970. 8001636: 2200 movs r2, #0
  2971. 8001638: f24e 7180 movw r1, #59264 @ 0xe780
  2972. 800163c: 482d ldr r0, [pc, #180] @ (80016f4 <MX_GPIO_Init+0x188>)
  2973. 800163e: f009 fe57 bl 800b2f0 <HAL_GPIO_WritePin>
  2974. |GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15, GPIO_PIN_RESET);
  2975. /*Configure GPIO pin Output Level */
  2976. HAL_GPIO_WritePin(GPIOD, GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7, GPIO_PIN_RESET);
  2977. 8001642: 2200 movs r2, #0
  2978. 8001644: 21f0 movs r1, #240 @ 0xf0
  2979. 8001646: 482c ldr r0, [pc, #176] @ (80016f8 <MX_GPIO_Init+0x18c>)
  2980. 8001648: f009 fe52 bl 800b2f0 <HAL_GPIO_WritePin>
  2981. /*Configure GPIO pins : PE7 PE8 PE9 PE10
  2982. PE13 PE14 PE15 */
  2983. GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10
  2984. 800164c: f24e 7380 movw r3, #59264 @ 0xe780
  2985. 8001650: 61fb str r3, [r7, #28]
  2986. |GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
  2987. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  2988. 8001652: 2301 movs r3, #1
  2989. 8001654: 623b str r3, [r7, #32]
  2990. GPIO_InitStruct.Pull = GPIO_NOPULL;
  2991. 8001656: 2300 movs r3, #0
  2992. 8001658: 627b str r3, [r7, #36] @ 0x24
  2993. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  2994. 800165a: 2300 movs r3, #0
  2995. 800165c: 62bb str r3, [r7, #40] @ 0x28
  2996. HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
  2997. 800165e: f107 031c add.w r3, r7, #28
  2998. 8001662: 4619 mov r1, r3
  2999. 8001664: 4823 ldr r0, [pc, #140] @ (80016f4 <MX_GPIO_Init+0x188>)
  3000. 8001666: f009 fc7b bl 800af60 <HAL_GPIO_Init>
  3001. /*Configure GPIO pins : PB10 PB11 */
  3002. GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11;
  3003. 800166a: f44f 6340 mov.w r3, #3072 @ 0xc00
  3004. 800166e: 61fb str r3, [r7, #28]
  3005. GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
  3006. 8001670: f44f 1344 mov.w r3, #3211264 @ 0x310000
  3007. 8001674: 623b str r3, [r7, #32]
  3008. GPIO_InitStruct.Pull = GPIO_NOPULL;
  3009. 8001676: 2300 movs r3, #0
  3010. 8001678: 627b str r3, [r7, #36] @ 0x24
  3011. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  3012. 800167a: f107 031c add.w r3, r7, #28
  3013. 800167e: 4619 mov r1, r3
  3014. 8001680: 481e ldr r0, [pc, #120] @ (80016fc <MX_GPIO_Init+0x190>)
  3015. 8001682: f009 fc6d bl 800af60 <HAL_GPIO_Init>
  3016. /*Configure GPIO pins : PD8 PD9 PD10 PD11
  3017. PD12 PD13 PD3 */
  3018. GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11
  3019. 8001686: f643 7308 movw r3, #16136 @ 0x3f08
  3020. 800168a: 61fb str r3, [r7, #28]
  3021. |GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_3;
  3022. GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  3023. 800168c: 2300 movs r3, #0
  3024. 800168e: 623b str r3, [r7, #32]
  3025. GPIO_InitStruct.Pull = GPIO_NOPULL;
  3026. 8001690: 2300 movs r3, #0
  3027. 8001692: 627b str r3, [r7, #36] @ 0x24
  3028. HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
  3029. 8001694: f107 031c add.w r3, r7, #28
  3030. 8001698: 4619 mov r1, r3
  3031. 800169a: 4817 ldr r0, [pc, #92] @ (80016f8 <MX_GPIO_Init+0x18c>)
  3032. 800169c: f009 fc60 bl 800af60 <HAL_GPIO_Init>
  3033. /*Configure GPIO pins : PD14 PD15 */
  3034. GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15;
  3035. 80016a0: f44f 4340 mov.w r3, #49152 @ 0xc000
  3036. 80016a4: 61fb str r3, [r7, #28]
  3037. GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
  3038. 80016a6: f44f 1344 mov.w r3, #3211264 @ 0x310000
  3039. 80016aa: 623b str r3, [r7, #32]
  3040. GPIO_InitStruct.Pull = GPIO_NOPULL;
  3041. 80016ac: 2300 movs r3, #0
  3042. 80016ae: 627b str r3, [r7, #36] @ 0x24
  3043. HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
  3044. 80016b0: f107 031c add.w r3, r7, #28
  3045. 80016b4: 4619 mov r1, r3
  3046. 80016b6: 4810 ldr r0, [pc, #64] @ (80016f8 <MX_GPIO_Init+0x18c>)
  3047. 80016b8: f009 fc52 bl 800af60 <HAL_GPIO_Init>
  3048. /*Configure GPIO pins : PD4 PD5 PD6 PD7 */
  3049. GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
  3050. 80016bc: 23f0 movs r3, #240 @ 0xf0
  3051. 80016be: 61fb str r3, [r7, #28]
  3052. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  3053. 80016c0: 2301 movs r3, #1
  3054. 80016c2: 623b str r3, [r7, #32]
  3055. GPIO_InitStruct.Pull = GPIO_NOPULL;
  3056. 80016c4: 2300 movs r3, #0
  3057. 80016c6: 627b str r3, [r7, #36] @ 0x24
  3058. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  3059. 80016c8: 2300 movs r3, #0
  3060. 80016ca: 62bb str r3, [r7, #40] @ 0x28
  3061. HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
  3062. 80016cc: f107 031c add.w r3, r7, #28
  3063. 80016d0: 4619 mov r1, r3
  3064. 80016d2: 4809 ldr r0, [pc, #36] @ (80016f8 <MX_GPIO_Init+0x18c>)
  3065. 80016d4: f009 fc44 bl 800af60 <HAL_GPIO_Init>
  3066. /* EXTI interrupt init*/
  3067. HAL_NVIC_SetPriority(EXTI15_10_IRQn, 5, 0);
  3068. 80016d8: 2200 movs r2, #0
  3069. 80016da: 2105 movs r1, #5
  3070. 80016dc: 2028 movs r0, #40 @ 0x28
  3071. 80016de: f006 f90d bl 80078fc <HAL_NVIC_SetPriority>
  3072. HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
  3073. 80016e2: 2028 movs r0, #40 @ 0x28
  3074. 80016e4: f006 f924 bl 8007930 <HAL_NVIC_EnableIRQ>
  3075. /* USER CODE BEGIN MX_GPIO_Init_2 */
  3076. /* USER CODE END MX_GPIO_Init_2 */
  3077. }
  3078. 80016e8: bf00 nop
  3079. 80016ea: 3730 adds r7, #48 @ 0x30
  3080. 80016ec: 46bd mov sp, r7
  3081. 80016ee: bd80 pop {r7, pc}
  3082. 80016f0: 58024400 .word 0x58024400
  3083. 80016f4: 58021000 .word 0x58021000
  3084. 80016f8: 58020c00 .word 0x58020c00
  3085. 80016fc: 58020400 .word 0x58020400
  3086. 08001700 <HAL_ADC_ConvCpltCallback>:
  3087. /* USER CODE BEGIN 4 */
  3088. void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)
  3089. {
  3090. 8001700: b580 push {r7, lr}
  3091. 8001702: b08e sub sp, #56 @ 0x38
  3092. 8001704: af00 add r7, sp, #0
  3093. 8001706: 6078 str r0, [r7, #4]
  3094. if(hadc->Instance == ADC1)
  3095. 8001708: 687b ldr r3, [r7, #4]
  3096. 800170a: 681b ldr r3, [r3, #0]
  3097. 800170c: 4a67 ldr r2, [pc, #412] @ (80018ac <HAL_ADC_ConvCpltCallback+0x1ac>)
  3098. 800170e: 4293 cmp r3, r2
  3099. 8001710: d13f bne.n 8001792 <HAL_ADC_ConvCpltCallback+0x92>
  3100. {
  3101. DbgLEDToggle(DBG_LED4);
  3102. 8001712: 2080 movs r0, #128 @ 0x80
  3103. 8001714: f001 fb26 bl 8002d64 <DbgLEDToggle>
  3104. SCB_InvalidateDCache_by_Addr((uint32_t*)(((uint32_t)adc1Data.adcDataBuffer) & ~(uint32_t)0x1F), __SCB_DCACHE_LINE_SIZE);
  3105. 8001718: 4b65 ldr r3, [pc, #404] @ (80018b0 <HAL_ADC_ConvCpltCallback+0x1b0>)
  3106. 800171a: f023 031f bic.w r3, r3, #31
  3107. 800171e: 637b str r3, [r7, #52] @ 0x34
  3108. 8001720: 2320 movs r3, #32
  3109. 8001722: 633b str r3, [r7, #48] @ 0x30
  3110. if ( dsize > 0 ) {
  3111. 8001724: 6b3b ldr r3, [r7, #48] @ 0x30
  3112. 8001726: 2b00 cmp r3, #0
  3113. 8001728: dd1d ble.n 8001766 <HAL_ADC_ConvCpltCallback+0x66>
  3114. int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U));
  3115. 800172a: 6b7b ldr r3, [r7, #52] @ 0x34
  3116. 800172c: f003 021f and.w r2, r3, #31
  3117. 8001730: 6b3b ldr r3, [r7, #48] @ 0x30
  3118. 8001732: 4413 add r3, r2
  3119. 8001734: 62fb str r3, [r7, #44] @ 0x2c
  3120. uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */;
  3121. 8001736: 6b7b ldr r3, [r7, #52] @ 0x34
  3122. 8001738: 62bb str r3, [r7, #40] @ 0x28
  3123. __ASM volatile ("dsb 0xF":::"memory");
  3124. 800173a: f3bf 8f4f dsb sy
  3125. }
  3126. 800173e: bf00 nop
  3127. SCB->DCIMVAC = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */
  3128. 8001740: 4a5c ldr r2, [pc, #368] @ (80018b4 <HAL_ADC_ConvCpltCallback+0x1b4>)
  3129. 8001742: 6abb ldr r3, [r7, #40] @ 0x28
  3130. 8001744: f8c2 325c str.w r3, [r2, #604] @ 0x25c
  3131. op_addr += __SCB_DCACHE_LINE_SIZE;
  3132. 8001748: 6abb ldr r3, [r7, #40] @ 0x28
  3133. 800174a: 3320 adds r3, #32
  3134. 800174c: 62bb str r3, [r7, #40] @ 0x28
  3135. op_size -= __SCB_DCACHE_LINE_SIZE;
  3136. 800174e: 6afb ldr r3, [r7, #44] @ 0x2c
  3137. 8001750: 3b20 subs r3, #32
  3138. 8001752: 62fb str r3, [r7, #44] @ 0x2c
  3139. } while ( op_size > 0 );
  3140. 8001754: 6afb ldr r3, [r7, #44] @ 0x2c
  3141. 8001756: 2b00 cmp r3, #0
  3142. 8001758: dcf2 bgt.n 8001740 <HAL_ADC_ConvCpltCallback+0x40>
  3143. __ASM volatile ("dsb 0xF":::"memory");
  3144. 800175a: f3bf 8f4f dsb sy
  3145. }
  3146. 800175e: bf00 nop
  3147. __ASM volatile ("isb 0xF":::"memory");
  3148. 8001760: f3bf 8f6f isb sy
  3149. }
  3150. 8001764: bf00 nop
  3151. }
  3152. 8001766: bf00 nop
  3153. if(adc1MeasDataQueue != NULL)
  3154. 8001768: 4b53 ldr r3, [pc, #332] @ (80018b8 <HAL_ADC_ConvCpltCallback+0x1b8>)
  3155. 800176a: 681b ldr r3, [r3, #0]
  3156. 800176c: 2b00 cmp r3, #0
  3157. 800176e: d006 beq.n 800177e <HAL_ADC_ConvCpltCallback+0x7e>
  3158. {
  3159. osMessageQueuePut(adc1MeasDataQueue, &adc1Data, 0, 0);
  3160. 8001770: 4b51 ldr r3, [pc, #324] @ (80018b8 <HAL_ADC_ConvCpltCallback+0x1b8>)
  3161. 8001772: 6818 ldr r0, [r3, #0]
  3162. 8001774: 2300 movs r3, #0
  3163. 8001776: 2200 movs r2, #0
  3164. 8001778: 494d ldr r1, [pc, #308] @ (80018b0 <HAL_ADC_ConvCpltCallback+0x1b0>)
  3165. 800177a: f012 fa51 bl 8013c20 <osMessageQueuePut>
  3166. }
  3167. if(HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc1Data.adcDataBuffer, ADC1LastData) != HAL_OK)
  3168. 800177e: 2207 movs r2, #7
  3169. 8001780: 494b ldr r1, [pc, #300] @ (80018b0 <HAL_ADC_ConvCpltCallback+0x1b0>)
  3170. 8001782: 484e ldr r0, [pc, #312] @ (80018bc <HAL_ADC_ConvCpltCallback+0x1bc>)
  3171. 8001784: f004 fe16 bl 80063b4 <HAL_ADC_Start_DMA>
  3172. 8001788: 4603 mov r3, r0
  3173. 800178a: 2b00 cmp r3, #0
  3174. 800178c: d001 beq.n 8001792 <HAL_ADC_ConvCpltCallback+0x92>
  3175. {
  3176. Error_Handler();
  3177. 800178e: f000 fa1d bl 8001bcc <Error_Handler>
  3178. }
  3179. }
  3180. if(hadc->Instance == ADC2)
  3181. 8001792: 687b ldr r3, [r7, #4]
  3182. 8001794: 681b ldr r3, [r3, #0]
  3183. 8001796: 4a4a ldr r2, [pc, #296] @ (80018c0 <HAL_ADC_ConvCpltCallback+0x1c0>)
  3184. 8001798: 4293 cmp r3, r2
  3185. 800179a: d13c bne.n 8001816 <HAL_ADC_ConvCpltCallback+0x116>
  3186. {
  3187. SCB_InvalidateDCache_by_Addr((uint32_t*)(((uint32_t)adc2Data.adcDataBuffer) & ~(uint32_t)0x1F), __SCB_DCACHE_LINE_SIZE);
  3188. 800179c: 4b49 ldr r3, [pc, #292] @ (80018c4 <HAL_ADC_ConvCpltCallback+0x1c4>)
  3189. 800179e: f023 031f bic.w r3, r3, #31
  3190. 80017a2: 627b str r3, [r7, #36] @ 0x24
  3191. 80017a4: 2320 movs r3, #32
  3192. 80017a6: 623b str r3, [r7, #32]
  3193. if ( dsize > 0 ) {
  3194. 80017a8: 6a3b ldr r3, [r7, #32]
  3195. 80017aa: 2b00 cmp r3, #0
  3196. 80017ac: dd1d ble.n 80017ea <HAL_ADC_ConvCpltCallback+0xea>
  3197. int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U));
  3198. 80017ae: 6a7b ldr r3, [r7, #36] @ 0x24
  3199. 80017b0: f003 021f and.w r2, r3, #31
  3200. 80017b4: 6a3b ldr r3, [r7, #32]
  3201. 80017b6: 4413 add r3, r2
  3202. 80017b8: 61fb str r3, [r7, #28]
  3203. uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */;
  3204. 80017ba: 6a7b ldr r3, [r7, #36] @ 0x24
  3205. 80017bc: 61bb str r3, [r7, #24]
  3206. __ASM volatile ("dsb 0xF":::"memory");
  3207. 80017be: f3bf 8f4f dsb sy
  3208. }
  3209. 80017c2: bf00 nop
  3210. SCB->DCIMVAC = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */
  3211. 80017c4: 4a3b ldr r2, [pc, #236] @ (80018b4 <HAL_ADC_ConvCpltCallback+0x1b4>)
  3212. 80017c6: 69bb ldr r3, [r7, #24]
  3213. 80017c8: f8c2 325c str.w r3, [r2, #604] @ 0x25c
  3214. op_addr += __SCB_DCACHE_LINE_SIZE;
  3215. 80017cc: 69bb ldr r3, [r7, #24]
  3216. 80017ce: 3320 adds r3, #32
  3217. 80017d0: 61bb str r3, [r7, #24]
  3218. op_size -= __SCB_DCACHE_LINE_SIZE;
  3219. 80017d2: 69fb ldr r3, [r7, #28]
  3220. 80017d4: 3b20 subs r3, #32
  3221. 80017d6: 61fb str r3, [r7, #28]
  3222. } while ( op_size > 0 );
  3223. 80017d8: 69fb ldr r3, [r7, #28]
  3224. 80017da: 2b00 cmp r3, #0
  3225. 80017dc: dcf2 bgt.n 80017c4 <HAL_ADC_ConvCpltCallback+0xc4>
  3226. __ASM volatile ("dsb 0xF":::"memory");
  3227. 80017de: f3bf 8f4f dsb sy
  3228. }
  3229. 80017e2: bf00 nop
  3230. __ASM volatile ("isb 0xF":::"memory");
  3231. 80017e4: f3bf 8f6f isb sy
  3232. }
  3233. 80017e8: bf00 nop
  3234. }
  3235. 80017ea: bf00 nop
  3236. if(adc2MeasDataQueue != NULL)
  3237. 80017ec: 4b36 ldr r3, [pc, #216] @ (80018c8 <HAL_ADC_ConvCpltCallback+0x1c8>)
  3238. 80017ee: 681b ldr r3, [r3, #0]
  3239. 80017f0: 2b00 cmp r3, #0
  3240. 80017f2: d006 beq.n 8001802 <HAL_ADC_ConvCpltCallback+0x102>
  3241. {
  3242. osMessageQueuePut(adc2MeasDataQueue, &adc2Data, 0, 0);
  3243. 80017f4: 4b34 ldr r3, [pc, #208] @ (80018c8 <HAL_ADC_ConvCpltCallback+0x1c8>)
  3244. 80017f6: 6818 ldr r0, [r3, #0]
  3245. 80017f8: 2300 movs r3, #0
  3246. 80017fa: 2200 movs r2, #0
  3247. 80017fc: 4931 ldr r1, [pc, #196] @ (80018c4 <HAL_ADC_ConvCpltCallback+0x1c4>)
  3248. 80017fe: f012 fa0f bl 8013c20 <osMessageQueuePut>
  3249. }
  3250. if(HAL_ADC_Start_DMA(&hadc2, (uint32_t *)adc2Data.adcDataBuffer, ADC2LastData) != HAL_OK)
  3251. 8001802: 2203 movs r2, #3
  3252. 8001804: 492f ldr r1, [pc, #188] @ (80018c4 <HAL_ADC_ConvCpltCallback+0x1c4>)
  3253. 8001806: 4831 ldr r0, [pc, #196] @ (80018cc <HAL_ADC_ConvCpltCallback+0x1cc>)
  3254. 8001808: f004 fdd4 bl 80063b4 <HAL_ADC_Start_DMA>
  3255. 800180c: 4603 mov r3, r0
  3256. 800180e: 2b00 cmp r3, #0
  3257. 8001810: d001 beq.n 8001816 <HAL_ADC_ConvCpltCallback+0x116>
  3258. {
  3259. Error_Handler();
  3260. 8001812: f000 f9db bl 8001bcc <Error_Handler>
  3261. }
  3262. }
  3263. if(hadc->Instance == ADC3)
  3264. 8001816: 687b ldr r3, [r7, #4]
  3265. 8001818: 681b ldr r3, [r3, #0]
  3266. 800181a: 4a2d ldr r2, [pc, #180] @ (80018d0 <HAL_ADC_ConvCpltCallback+0x1d0>)
  3267. 800181c: 4293 cmp r3, r2
  3268. 800181e: d13c bne.n 800189a <HAL_ADC_ConvCpltCallback+0x19a>
  3269. {
  3270. SCB_InvalidateDCache_by_Addr((uint32_t*)(((uint32_t)adc3Data.adcDataBuffer) & ~(uint32_t)0x1F), __SCB_DCACHE_LINE_SIZE);
  3271. 8001820: 4b2c ldr r3, [pc, #176] @ (80018d4 <HAL_ADC_ConvCpltCallback+0x1d4>)
  3272. 8001822: f023 031f bic.w r3, r3, #31
  3273. 8001826: 617b str r3, [r7, #20]
  3274. 8001828: 2320 movs r3, #32
  3275. 800182a: 613b str r3, [r7, #16]
  3276. if ( dsize > 0 ) {
  3277. 800182c: 693b ldr r3, [r7, #16]
  3278. 800182e: 2b00 cmp r3, #0
  3279. 8001830: dd1d ble.n 800186e <HAL_ADC_ConvCpltCallback+0x16e>
  3280. int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U));
  3281. 8001832: 697b ldr r3, [r7, #20]
  3282. 8001834: f003 021f and.w r2, r3, #31
  3283. 8001838: 693b ldr r3, [r7, #16]
  3284. 800183a: 4413 add r3, r2
  3285. 800183c: 60fb str r3, [r7, #12]
  3286. uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */;
  3287. 800183e: 697b ldr r3, [r7, #20]
  3288. 8001840: 60bb str r3, [r7, #8]
  3289. __ASM volatile ("dsb 0xF":::"memory");
  3290. 8001842: f3bf 8f4f dsb sy
  3291. }
  3292. 8001846: bf00 nop
  3293. SCB->DCIMVAC = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */
  3294. 8001848: 4a1a ldr r2, [pc, #104] @ (80018b4 <HAL_ADC_ConvCpltCallback+0x1b4>)
  3295. 800184a: 68bb ldr r3, [r7, #8]
  3296. 800184c: f8c2 325c str.w r3, [r2, #604] @ 0x25c
  3297. op_addr += __SCB_DCACHE_LINE_SIZE;
  3298. 8001850: 68bb ldr r3, [r7, #8]
  3299. 8001852: 3320 adds r3, #32
  3300. 8001854: 60bb str r3, [r7, #8]
  3301. op_size -= __SCB_DCACHE_LINE_SIZE;
  3302. 8001856: 68fb ldr r3, [r7, #12]
  3303. 8001858: 3b20 subs r3, #32
  3304. 800185a: 60fb str r3, [r7, #12]
  3305. } while ( op_size > 0 );
  3306. 800185c: 68fb ldr r3, [r7, #12]
  3307. 800185e: 2b00 cmp r3, #0
  3308. 8001860: dcf2 bgt.n 8001848 <HAL_ADC_ConvCpltCallback+0x148>
  3309. __ASM volatile ("dsb 0xF":::"memory");
  3310. 8001862: f3bf 8f4f dsb sy
  3311. }
  3312. 8001866: bf00 nop
  3313. __ASM volatile ("isb 0xF":::"memory");
  3314. 8001868: f3bf 8f6f isb sy
  3315. }
  3316. 800186c: bf00 nop
  3317. }
  3318. 800186e: bf00 nop
  3319. if(adc3MeasDataQueue != NULL)
  3320. 8001870: 4b19 ldr r3, [pc, #100] @ (80018d8 <HAL_ADC_ConvCpltCallback+0x1d8>)
  3321. 8001872: 681b ldr r3, [r3, #0]
  3322. 8001874: 2b00 cmp r3, #0
  3323. 8001876: d006 beq.n 8001886 <HAL_ADC_ConvCpltCallback+0x186>
  3324. {
  3325. osMessageQueuePut(adc3MeasDataQueue, &adc3Data, 0, 0);
  3326. 8001878: 4b17 ldr r3, [pc, #92] @ (80018d8 <HAL_ADC_ConvCpltCallback+0x1d8>)
  3327. 800187a: 6818 ldr r0, [r3, #0]
  3328. 800187c: 2300 movs r3, #0
  3329. 800187e: 2200 movs r2, #0
  3330. 8001880: 4914 ldr r1, [pc, #80] @ (80018d4 <HAL_ADC_ConvCpltCallback+0x1d4>)
  3331. 8001882: f012 f9cd bl 8013c20 <osMessageQueuePut>
  3332. }
  3333. if(HAL_ADC_Start_DMA(&hadc3, (uint32_t *)adc3Data.adcDataBuffer, ADC3LastData) != HAL_OK)
  3334. 8001886: 2205 movs r2, #5
  3335. 8001888: 4912 ldr r1, [pc, #72] @ (80018d4 <HAL_ADC_ConvCpltCallback+0x1d4>)
  3336. 800188a: 4814 ldr r0, [pc, #80] @ (80018dc <HAL_ADC_ConvCpltCallback+0x1dc>)
  3337. 800188c: f004 fd92 bl 80063b4 <HAL_ADC_Start_DMA>
  3338. 8001890: 4603 mov r3, r0
  3339. 8001892: 2b00 cmp r3, #0
  3340. 8001894: d001 beq.n 800189a <HAL_ADC_ConvCpltCallback+0x19a>
  3341. {
  3342. Error_Handler();
  3343. 8001896: f000 f999 bl 8001bcc <Error_Handler>
  3344. }
  3345. }osTimerStop (debugLedTimerHandle);
  3346. 800189a: 4b11 ldr r3, [pc, #68] @ (80018e0 <HAL_ADC_ConvCpltCallback+0x1e0>)
  3347. 800189c: 681b ldr r3, [r3, #0]
  3348. 800189e: 4618 mov r0, r3
  3349. 80018a0: f012 f806 bl 80138b0 <osTimerStop>
  3350. }
  3351. 80018a4: bf00 nop
  3352. 80018a6: 3738 adds r7, #56 @ 0x38
  3353. 80018a8: 46bd mov sp, r7
  3354. 80018aa: bd80 pop {r7, pc}
  3355. 80018ac: 40022000 .word 0x40022000
  3356. 80018b0: 240000e0 .word 0x240000e0
  3357. 80018b4: e000ed00 .word 0xe000ed00
  3358. 80018b8: 2400077c .word 0x2400077c
  3359. 80018bc: 24000140 .word 0x24000140
  3360. 80018c0: 40022100 .word 0x40022100
  3361. 80018c4: 24000100 .word 0x24000100
  3362. 80018c8: 24000780 .word 0x24000780
  3363. 80018cc: 240001a4 .word 0x240001a4
  3364. 80018d0: 58026000 .word 0x58026000
  3365. 80018d4: 24000120 .word 0x24000120
  3366. 80018d8: 24000784 .word 0x24000784
  3367. 80018dc: 24000208 .word 0x24000208
  3368. 80018e0: 2400065c .word 0x2400065c
  3369. 080018e4 <StartDefaultTask>:
  3370. * @param argument: Not used
  3371. * @retval None
  3372. */
  3373. /* USER CODE END Header_StartDefaultTask */
  3374. void StartDefaultTask(void *argument)
  3375. {
  3376. 80018e4: b580 push {r7, lr}
  3377. 80018e6: b082 sub sp, #8
  3378. 80018e8: af00 add r7, sp, #0
  3379. 80018ea: 6078 str r0, [r7, #4]
  3380. /* USER CODE BEGIN 5 */
  3381. #ifdef WATCHDOG_ENABLED
  3382. HAL_IWDG_Refresh(&hiwdg1);
  3383. #endif
  3384. SelectCurrentSensorGain(CurrentSensorL1, csGain3);
  3385. 80018ec: 2102 movs r1, #2
  3386. 80018ee: 2000 movs r0, #0
  3387. 80018f0: f001 fa56 bl 8002da0 <SelectCurrentSensorGain>
  3388. SelectCurrentSensorGain(CurrentSensorL2, csGain3);
  3389. 80018f4: 2102 movs r1, #2
  3390. 80018f6: 2001 movs r0, #1
  3391. 80018f8: f001 fa52 bl 8002da0 <SelectCurrentSensorGain>
  3392. SelectCurrentSensorGain(CurrentSensorL3, csGain3);
  3393. 80018fc: 2102 movs r1, #2
  3394. 80018fe: 2002 movs r0, #2
  3395. 8001900: f001 fa4e bl 8002da0 <SelectCurrentSensorGain>
  3396. EnableCurrentSensors();
  3397. 8001904: f001 fa40 bl 8002d88 <EnableCurrentSensors>
  3398. osDelay(pdMS_TO_TICKS(100));
  3399. 8001908: 2064 movs r0, #100 @ 0x64
  3400. 800190a: f011 fef6 bl 80136fa <osDelay>
  3401. #ifdef WATCHDOG_ENABLED
  3402. HAL_IWDG_Refresh(&hiwdg1);
  3403. #endif
  3404. if(HAL_TIM_Base_Start(&htim8) != HAL_OK)
  3405. 800190e: 4836 ldr r0, [pc, #216] @ (80019e8 <StartDefaultTask+0x104>)
  3406. 8001910: f00d fc4a bl 800f1a8 <HAL_TIM_Base_Start>
  3407. 8001914: 4603 mov r3, r0
  3408. 8001916: 2b00 cmp r3, #0
  3409. 8001918: d001 beq.n 800191e <StartDefaultTask+0x3a>
  3410. {
  3411. Error_Handler();
  3412. 800191a: f000 f957 bl 8001bcc <Error_Handler>
  3413. }
  3414. if(HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc1Data.adcDataBuffer, ADC1LastData) != HAL_OK)
  3415. 800191e: 2207 movs r2, #7
  3416. 8001920: 4932 ldr r1, [pc, #200] @ (80019ec <StartDefaultTask+0x108>)
  3417. 8001922: 4833 ldr r0, [pc, #204] @ (80019f0 <StartDefaultTask+0x10c>)
  3418. 8001924: f004 fd46 bl 80063b4 <HAL_ADC_Start_DMA>
  3419. 8001928: 4603 mov r3, r0
  3420. 800192a: 2b00 cmp r3, #0
  3421. 800192c: d001 beq.n 8001932 <StartDefaultTask+0x4e>
  3422. {
  3423. Error_Handler();
  3424. 800192e: f000 f94d bl 8001bcc <Error_Handler>
  3425. }
  3426. if(HAL_ADC_Start_DMA(&hadc2, (uint32_t *)adc2Data.adcDataBuffer, ADC2LastData) != HAL_OK)
  3427. 8001932: 2203 movs r2, #3
  3428. 8001934: 492f ldr r1, [pc, #188] @ (80019f4 <StartDefaultTask+0x110>)
  3429. 8001936: 4830 ldr r0, [pc, #192] @ (80019f8 <StartDefaultTask+0x114>)
  3430. 8001938: f004 fd3c bl 80063b4 <HAL_ADC_Start_DMA>
  3431. 800193c: 4603 mov r3, r0
  3432. 800193e: 2b00 cmp r3, #0
  3433. 8001940: d001 beq.n 8001946 <StartDefaultTask+0x62>
  3434. {
  3435. Error_Handler();
  3436. 8001942: f000 f943 bl 8001bcc <Error_Handler>
  3437. }
  3438. if(HAL_ADC_Start_DMA(&hadc3, (uint32_t *)adc3Data.adcDataBuffer, ADC3LastData) != HAL_OK)
  3439. 8001946: 2205 movs r2, #5
  3440. 8001948: 492c ldr r1, [pc, #176] @ (80019fc <StartDefaultTask+0x118>)
  3441. 800194a: 482d ldr r0, [pc, #180] @ (8001a00 <StartDefaultTask+0x11c>)
  3442. 800194c: f004 fd32 bl 80063b4 <HAL_ADC_Start_DMA>
  3443. 8001950: 4603 mov r3, r0
  3444. 8001952: 2b00 cmp r3, #0
  3445. 8001954: d001 beq.n 800195a <StartDefaultTask+0x76>
  3446. {
  3447. Error_Handler();
  3448. 8001956: f000 f939 bl 8001bcc <Error_Handler>
  3449. }
  3450. HAL_COMP_Start(&hcomp1);
  3451. 800195a: 482a ldr r0, [pc, #168] @ (8001a04 <StartDefaultTask+0x120>)
  3452. 800195c: f005 feae bl 80076bc <HAL_COMP_Start>
  3453. HAL_IWDG_Refresh(&hiwdg1);
  3454. #endif
  3455. /* Infinite loop */
  3456. for(;;)
  3457. {
  3458. osDelay(pdMS_TO_TICKS(100));
  3459. 8001960: 2064 movs r0, #100 @ 0x64
  3460. 8001962: f011 feca bl 80136fa <osDelay>
  3461. #ifdef WATCHDOG_ENABLED
  3462. HAL_IWDG_Refresh(&hiwdg1);
  3463. #endif
  3464. if(HAL_TIM_GetChannelState(&htim3, TIM_CHANNEL_1) == HAL_TIM_CHANNEL_STATE_READY &&
  3465. 8001966: 2100 movs r1, #0
  3466. 8001968: 4827 ldr r0, [pc, #156] @ (8001a08 <StartDefaultTask+0x124>)
  3467. 800196a: f00e fa3d bl 800fde8 <HAL_TIM_GetChannelState>
  3468. 800196e: 4603 mov r3, r0
  3469. 8001970: 2b01 cmp r3, #1
  3470. 8001972: d118 bne.n 80019a6 <StartDefaultTask+0xc2>
  3471. HAL_TIM_GetChannelState(&htim3, TIM_CHANNEL_2) == HAL_TIM_CHANNEL_STATE_READY)
  3472. 8001974: 2104 movs r1, #4
  3473. 8001976: 4824 ldr r0, [pc, #144] @ (8001a08 <StartDefaultTask+0x124>)
  3474. 8001978: f00e fa36 bl 800fde8 <HAL_TIM_GetChannelState>
  3475. 800197c: 4603 mov r3, r0
  3476. if(HAL_TIM_GetChannelState(&htim3, TIM_CHANNEL_1) == HAL_TIM_CHANNEL_STATE_READY &&
  3477. 800197e: 2b01 cmp r3, #1
  3478. 8001980: d111 bne.n 80019a6 <StartDefaultTask+0xc2>
  3479. {
  3480. if(osMutexAcquire(sensorsInfoMutex, osWaitForever) == osOK)
  3481. 8001982: 4b22 ldr r3, [pc, #136] @ (8001a0c <StartDefaultTask+0x128>)
  3482. 8001984: 681b ldr r3, [r3, #0]
  3483. 8001986: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  3484. 800198a: 4618 mov r0, r3
  3485. 800198c: f012 f84d bl 8013a2a <osMutexAcquire>
  3486. 8001990: 4603 mov r3, r0
  3487. 8001992: 2b00 cmp r3, #0
  3488. 8001994: d107 bne.n 80019a6 <StartDefaultTask+0xc2>
  3489. {
  3490. sensorsInfo.motorXStatus = 0;
  3491. 8001996: 4b1e ldr r3, [pc, #120] @ (8001a10 <StartDefaultTask+0x12c>)
  3492. 8001998: 2200 movs r2, #0
  3493. 800199a: 751a strb r2, [r3, #20]
  3494. osMutexRelease(sensorsInfoMutex);
  3495. 800199c: 4b1b ldr r3, [pc, #108] @ (8001a0c <StartDefaultTask+0x128>)
  3496. 800199e: 681b ldr r3, [r3, #0]
  3497. 80019a0: 4618 mov r0, r3
  3498. 80019a2: f012 f88d bl 8013ac0 <osMutexRelease>
  3499. }
  3500. }
  3501. if(HAL_TIM_GetChannelState(&htim3, TIM_CHANNEL_3) == HAL_TIM_CHANNEL_STATE_READY &&
  3502. 80019a6: 2108 movs r1, #8
  3503. 80019a8: 4817 ldr r0, [pc, #92] @ (8001a08 <StartDefaultTask+0x124>)
  3504. 80019aa: f00e fa1d bl 800fde8 <HAL_TIM_GetChannelState>
  3505. 80019ae: 4603 mov r3, r0
  3506. 80019b0: 2b01 cmp r3, #1
  3507. 80019b2: d1d5 bne.n 8001960 <StartDefaultTask+0x7c>
  3508. HAL_TIM_GetChannelState(&htim3, TIM_CHANNEL_4) == HAL_TIM_CHANNEL_STATE_READY)
  3509. 80019b4: 210c movs r1, #12
  3510. 80019b6: 4814 ldr r0, [pc, #80] @ (8001a08 <StartDefaultTask+0x124>)
  3511. 80019b8: f00e fa16 bl 800fde8 <HAL_TIM_GetChannelState>
  3512. 80019bc: 4603 mov r3, r0
  3513. if(HAL_TIM_GetChannelState(&htim3, TIM_CHANNEL_3) == HAL_TIM_CHANNEL_STATE_READY &&
  3514. 80019be: 2b01 cmp r3, #1
  3515. 80019c0: d1ce bne.n 8001960 <StartDefaultTask+0x7c>
  3516. {
  3517. if(osMutexAcquire(sensorsInfoMutex, osWaitForever) == osOK)
  3518. 80019c2: 4b12 ldr r3, [pc, #72] @ (8001a0c <StartDefaultTask+0x128>)
  3519. 80019c4: 681b ldr r3, [r3, #0]
  3520. 80019c6: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  3521. 80019ca: 4618 mov r0, r3
  3522. 80019cc: f012 f82d bl 8013a2a <osMutexAcquire>
  3523. 80019d0: 4603 mov r3, r0
  3524. 80019d2: 2b00 cmp r3, #0
  3525. 80019d4: d1c4 bne.n 8001960 <StartDefaultTask+0x7c>
  3526. {
  3527. sensorsInfo.motorYStatus = 0;
  3528. 80019d6: 4b0e ldr r3, [pc, #56] @ (8001a10 <StartDefaultTask+0x12c>)
  3529. 80019d8: 2200 movs r2, #0
  3530. 80019da: 755a strb r2, [r3, #21]
  3531. osMutexRelease(sensorsInfoMutex);
  3532. 80019dc: 4b0b ldr r3, [pc, #44] @ (8001a0c <StartDefaultTask+0x128>)
  3533. 80019de: 681b ldr r3, [r3, #0]
  3534. 80019e0: 4618 mov r0, r3
  3535. 80019e2: f012 f86d bl 8013ac0 <osMutexRelease>
  3536. osDelay(pdMS_TO_TICKS(100));
  3537. 80019e6: e7bb b.n 8001960 <StartDefaultTask+0x7c>
  3538. 80019e8: 240004e4 .word 0x240004e4
  3539. 80019ec: 240000e0 .word 0x240000e0
  3540. 80019f0: 24000140 .word 0x24000140
  3541. 80019f4: 24000100 .word 0x24000100
  3542. 80019f8: 240001a4 .word 0x240001a4
  3543. 80019fc: 24000120 .word 0x24000120
  3544. 8001a00: 24000208 .word 0x24000208
  3545. 8001a04: 240003d4 .word 0x240003d4
  3546. 8001a08: 24000498 .word 0x24000498
  3547. 8001a0c: 24000790 .word 0x24000790
  3548. 8001a10: 240007e0 .word 0x240007e0
  3549. 08001a14 <debugLedTimerCallback>:
  3550. /* USER CODE END 5 */
  3551. }
  3552. /* debugLedTimerCallback function */
  3553. void debugLedTimerCallback(void *argument)
  3554. {
  3555. 8001a14: b580 push {r7, lr}
  3556. 8001a16: b082 sub sp, #8
  3557. 8001a18: af00 add r7, sp, #0
  3558. 8001a1a: 6078 str r0, [r7, #4]
  3559. /* USER CODE BEGIN debugLedTimerCallback */
  3560. DbgLEDOff (DBG_LED1);
  3561. 8001a1c: 2010 movs r0, #16
  3562. 8001a1e: f001 f98f bl 8002d40 <DbgLEDOff>
  3563. /* USER CODE END debugLedTimerCallback */
  3564. }
  3565. 8001a22: bf00 nop
  3566. 8001a24: 3708 adds r7, #8
  3567. 8001a26: 46bd mov sp, r7
  3568. 8001a28: bd80 pop {r7, pc}
  3569. ...
  3570. 08001a2c <fanTimerCallback>:
  3571. /* fanTimerCallback function */
  3572. void fanTimerCallback(void *argument)
  3573. {
  3574. 8001a2c: b580 push {r7, lr}
  3575. 8001a2e: b082 sub sp, #8
  3576. 8001a30: af00 add r7, sp, #0
  3577. 8001a32: 6078 str r0, [r7, #4]
  3578. /* USER CODE BEGIN fanTimerCallback */
  3579. HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_2);
  3580. 8001a34: 2104 movs r1, #4
  3581. 8001a36: 4803 ldr r0, [pc, #12] @ (8001a44 <fanTimerCallback+0x18>)
  3582. 8001a38: f00d fe04 bl 800f644 <HAL_TIM_PWM_Stop>
  3583. /* USER CODE END fanTimerCallback */
  3584. }
  3585. 8001a3c: bf00 nop
  3586. 8001a3e: 3708 adds r7, #8
  3587. 8001a40: 46bd mov sp, r7
  3588. 8001a42: bd80 pop {r7, pc}
  3589. 8001a44: 2400044c .word 0x2400044c
  3590. 08001a48 <motorXTimerCallback>:
  3591. /* motorXTimerCallback function */
  3592. void motorXTimerCallback(void *argument)
  3593. {
  3594. 8001a48: b580 push {r7, lr}
  3595. 8001a4a: b084 sub sp, #16
  3596. 8001a4c: af02 add r7, sp, #8
  3597. 8001a4e: 6078 str r0, [r7, #4]
  3598. /* USER CODE BEGIN motorXTimerCallback */
  3599. MotorAction(&htim3, &motorXYTimerConfigOC, TIM_CHANNEL_1, TIM_CHANNEL_2, HiZ, 0);
  3600. 8001a50: 2300 movs r3, #0
  3601. 8001a52: 9301 str r3, [sp, #4]
  3602. 8001a54: 2300 movs r3, #0
  3603. 8001a56: 9300 str r3, [sp, #0]
  3604. 8001a58: 2304 movs r3, #4
  3605. 8001a5a: 2200 movs r2, #0
  3606. 8001a5c: 4907 ldr r1, [pc, #28] @ (8001a7c <motorXTimerCallback+0x34>)
  3607. 8001a5e: 4808 ldr r0, [pc, #32] @ (8001a80 <motorXTimerCallback+0x38>)
  3608. 8001a60: f001 fb23 bl 80030aa <MotorAction>
  3609. HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_1);
  3610. 8001a64: 2100 movs r1, #0
  3611. 8001a66: 4806 ldr r0, [pc, #24] @ (8001a80 <motorXTimerCallback+0x38>)
  3612. 8001a68: f00d fdec bl 800f644 <HAL_TIM_PWM_Stop>
  3613. HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_2);
  3614. 8001a6c: 2104 movs r1, #4
  3615. 8001a6e: 4804 ldr r0, [pc, #16] @ (8001a80 <motorXTimerCallback+0x38>)
  3616. 8001a70: f00d fde8 bl 800f644 <HAL_TIM_PWM_Stop>
  3617. /* USER CODE END motorXTimerCallback */
  3618. }
  3619. 8001a74: bf00 nop
  3620. 8001a76: 3708 adds r7, #8
  3621. 8001a78: 46bd mov sp, r7
  3622. 8001a7a: bd80 pop {r7, pc}
  3623. 8001a7c: 24000738 .word 0x24000738
  3624. 8001a80: 24000498 .word 0x24000498
  3625. 08001a84 <motorYTimerCallback>:
  3626. /* motorYTimerCallback function */
  3627. void motorYTimerCallback(void *argument)
  3628. {
  3629. 8001a84: b580 push {r7, lr}
  3630. 8001a86: b084 sub sp, #16
  3631. 8001a88: af02 add r7, sp, #8
  3632. 8001a8a: 6078 str r0, [r7, #4]
  3633. /* USER CODE BEGIN motorYTimerCallback */
  3634. MotorAction(&htim3, &motorXYTimerConfigOC, TIM_CHANNEL_3, TIM_CHANNEL_4, HiZ, 0);
  3635. 8001a8c: 2300 movs r3, #0
  3636. 8001a8e: 9301 str r3, [sp, #4]
  3637. 8001a90: 2300 movs r3, #0
  3638. 8001a92: 9300 str r3, [sp, #0]
  3639. 8001a94: 230c movs r3, #12
  3640. 8001a96: 2208 movs r2, #8
  3641. 8001a98: 4907 ldr r1, [pc, #28] @ (8001ab8 <motorYTimerCallback+0x34>)
  3642. 8001a9a: 4808 ldr r0, [pc, #32] @ (8001abc <motorYTimerCallback+0x38>)
  3643. 8001a9c: f001 fb05 bl 80030aa <MotorAction>
  3644. HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_3);
  3645. 8001aa0: 2108 movs r1, #8
  3646. 8001aa2: 4806 ldr r0, [pc, #24] @ (8001abc <motorYTimerCallback+0x38>)
  3647. 8001aa4: f00d fdce bl 800f644 <HAL_TIM_PWM_Stop>
  3648. HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_4);
  3649. 8001aa8: 210c movs r1, #12
  3650. 8001aaa: 4804 ldr r0, [pc, #16] @ (8001abc <motorYTimerCallback+0x38>)
  3651. 8001aac: f00d fdca bl 800f644 <HAL_TIM_PWM_Stop>
  3652. /* USER CODE END motorYTimerCallback */
  3653. }
  3654. 8001ab0: bf00 nop
  3655. 8001ab2: 3708 adds r7, #8
  3656. 8001ab4: 46bd mov sp, r7
  3657. 8001ab6: bd80 pop {r7, pc}
  3658. 8001ab8: 24000738 .word 0x24000738
  3659. 8001abc: 24000498 .word 0x24000498
  3660. 08001ac0 <MPU_Config>:
  3661. /* MPU Configuration */
  3662. void MPU_Config(void)
  3663. {
  3664. 8001ac0: b580 push {r7, lr}
  3665. 8001ac2: b084 sub sp, #16
  3666. 8001ac4: af00 add r7, sp, #0
  3667. MPU_Region_InitTypeDef MPU_InitStruct = {0};
  3668. 8001ac6: 463b mov r3, r7
  3669. 8001ac8: 2200 movs r2, #0
  3670. 8001aca: 601a str r2, [r3, #0]
  3671. 8001acc: 605a str r2, [r3, #4]
  3672. 8001ace: 609a str r2, [r3, #8]
  3673. 8001ad0: 60da str r2, [r3, #12]
  3674. /* Disables the MPU */
  3675. HAL_MPU_Disable();
  3676. 8001ad2: f005 ff3b bl 800794c <HAL_MPU_Disable>
  3677. /** Initializes and configures the Region and the memory to be protected
  3678. */
  3679. MPU_InitStruct.Enable = MPU_REGION_ENABLE;
  3680. 8001ad6: 2301 movs r3, #1
  3681. 8001ad8: 703b strb r3, [r7, #0]
  3682. MPU_InitStruct.Number = MPU_REGION_NUMBER0;
  3683. 8001ada: 2300 movs r3, #0
  3684. 8001adc: 707b strb r3, [r7, #1]
  3685. MPU_InitStruct.BaseAddress = 0x0;
  3686. 8001ade: 2300 movs r3, #0
  3687. 8001ae0: 607b str r3, [r7, #4]
  3688. MPU_InitStruct.Size = MPU_REGION_SIZE_4GB;
  3689. 8001ae2: 231f movs r3, #31
  3690. 8001ae4: 723b strb r3, [r7, #8]
  3691. MPU_InitStruct.SubRegionDisable = 0x87;
  3692. 8001ae6: 2387 movs r3, #135 @ 0x87
  3693. 8001ae8: 727b strb r3, [r7, #9]
  3694. MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
  3695. 8001aea: 2300 movs r3, #0
  3696. 8001aec: 72bb strb r3, [r7, #10]
  3697. MPU_InitStruct.AccessPermission = MPU_REGION_NO_ACCESS;
  3698. 8001aee: 2300 movs r3, #0
  3699. 8001af0: 72fb strb r3, [r7, #11]
  3700. MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_DISABLE;
  3701. 8001af2: 2301 movs r3, #1
  3702. 8001af4: 733b strb r3, [r7, #12]
  3703. MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;
  3704. 8001af6: 2301 movs r3, #1
  3705. 8001af8: 737b strb r3, [r7, #13]
  3706. MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
  3707. 8001afa: 2300 movs r3, #0
  3708. 8001afc: 73bb strb r3, [r7, #14]
  3709. MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
  3710. 8001afe: 2300 movs r3, #0
  3711. 8001b00: 73fb strb r3, [r7, #15]
  3712. HAL_MPU_ConfigRegion(&MPU_InitStruct);
  3713. 8001b02: 463b mov r3, r7
  3714. 8001b04: 4618 mov r0, r3
  3715. 8001b06: f005 ff59 bl 80079bc <HAL_MPU_ConfigRegion>
  3716. /** Initializes and configures the Region and the memory to be protected
  3717. */
  3718. MPU_InitStruct.Number = MPU_REGION_NUMBER1;
  3719. 8001b0a: 2301 movs r3, #1
  3720. 8001b0c: 707b strb r3, [r7, #1]
  3721. MPU_InitStruct.BaseAddress = 0x24020000;
  3722. 8001b0e: 4b13 ldr r3, [pc, #76] @ (8001b5c <MPU_Config+0x9c>)
  3723. 8001b10: 607b str r3, [r7, #4]
  3724. MPU_InitStruct.Size = MPU_REGION_SIZE_128KB;
  3725. 8001b12: 2310 movs r3, #16
  3726. 8001b14: 723b strb r3, [r7, #8]
  3727. MPU_InitStruct.SubRegionDisable = 0x0;
  3728. 8001b16: 2300 movs r3, #0
  3729. 8001b18: 727b strb r3, [r7, #9]
  3730. MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1;
  3731. 8001b1a: 2301 movs r3, #1
  3732. 8001b1c: 72bb strb r3, [r7, #10]
  3733. MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
  3734. 8001b1e: 2303 movs r3, #3
  3735. 8001b20: 72fb strb r3, [r7, #11]
  3736. MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
  3737. 8001b22: 2300 movs r3, #0
  3738. 8001b24: 737b strb r3, [r7, #13]
  3739. HAL_MPU_ConfigRegion(&MPU_InitStruct);
  3740. 8001b26: 463b mov r3, r7
  3741. 8001b28: 4618 mov r0, r3
  3742. 8001b2a: f005 ff47 bl 80079bc <HAL_MPU_ConfigRegion>
  3743. /** Initializes and configures the Region and the memory to be protected
  3744. */
  3745. MPU_InitStruct.Number = MPU_REGION_NUMBER2;
  3746. 8001b2e: 2302 movs r3, #2
  3747. 8001b30: 707b strb r3, [r7, #1]
  3748. MPU_InitStruct.BaseAddress = 0x24040000;
  3749. 8001b32: 4b0b ldr r3, [pc, #44] @ (8001b60 <MPU_Config+0xa0>)
  3750. 8001b34: 607b str r3, [r7, #4]
  3751. MPU_InitStruct.Size = MPU_REGION_SIZE_512B;
  3752. 8001b36: 2308 movs r3, #8
  3753. 8001b38: 723b strb r3, [r7, #8]
  3754. MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
  3755. 8001b3a: 2300 movs r3, #0
  3756. 8001b3c: 72bb strb r3, [r7, #10]
  3757. MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;
  3758. 8001b3e: 2301 movs r3, #1
  3759. 8001b40: 737b strb r3, [r7, #13]
  3760. MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE;
  3761. 8001b42: 2301 movs r3, #1
  3762. 8001b44: 73fb strb r3, [r7, #15]
  3763. HAL_MPU_ConfigRegion(&MPU_InitStruct);
  3764. 8001b46: 463b mov r3, r7
  3765. 8001b48: 4618 mov r0, r3
  3766. 8001b4a: f005 ff37 bl 80079bc <HAL_MPU_ConfigRegion>
  3767. /* Enables the MPU */
  3768. HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
  3769. 8001b4e: 2004 movs r0, #4
  3770. 8001b50: f005 ff14 bl 800797c <HAL_MPU_Enable>
  3771. }
  3772. 8001b54: bf00 nop
  3773. 8001b56: 3710 adds r7, #16
  3774. 8001b58: 46bd mov sp, r7
  3775. 8001b5a: bd80 pop {r7, pc}
  3776. 8001b5c: 24020000 .word 0x24020000
  3777. 8001b60: 24040000 .word 0x24040000
  3778. 08001b64 <HAL_TIM_PeriodElapsedCallback>:
  3779. * a global variable "uwTick" used as application time base.
  3780. * @param htim : TIM handle
  3781. * @retval None
  3782. */
  3783. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  3784. {
  3785. 8001b64: b580 push {r7, lr}
  3786. 8001b66: b082 sub sp, #8
  3787. 8001b68: af00 add r7, sp, #0
  3788. 8001b6a: 6078 str r0, [r7, #4]
  3789. /* USER CODE BEGIN Callback 0 */
  3790. /* USER CODE END Callback 0 */
  3791. if (htim->Instance == TIM6) {
  3792. 8001b6c: 687b ldr r3, [r7, #4]
  3793. 8001b6e: 681b ldr r3, [r3, #0]
  3794. 8001b70: 4a10 ldr r2, [pc, #64] @ (8001bb4 <HAL_TIM_PeriodElapsedCallback+0x50>)
  3795. 8001b72: 4293 cmp r3, r2
  3796. 8001b74: d102 bne.n 8001b7c <HAL_TIM_PeriodElapsedCallback+0x18>
  3797. HAL_IncTick();
  3798. 8001b76: f004 f807 bl 8005b88 <HAL_IncTick>
  3799. {
  3800. encoderYChannelA = 0;
  3801. encoderYChannelB = 0;
  3802. }
  3803. /* USER CODE END Callback 1 */
  3804. }
  3805. 8001b7a: e016 b.n 8001baa <HAL_TIM_PeriodElapsedCallback+0x46>
  3806. else if (htim->Instance == TIM4)
  3807. 8001b7c: 687b ldr r3, [r7, #4]
  3808. 8001b7e: 681b ldr r3, [r3, #0]
  3809. 8001b80: 4a0d ldr r2, [pc, #52] @ (8001bb8 <HAL_TIM_PeriodElapsedCallback+0x54>)
  3810. 8001b82: 4293 cmp r3, r2
  3811. 8001b84: d106 bne.n 8001b94 <HAL_TIM_PeriodElapsedCallback+0x30>
  3812. encoderXChannelA = 0;
  3813. 8001b86: 4b0d ldr r3, [pc, #52] @ (8001bbc <HAL_TIM_PeriodElapsedCallback+0x58>)
  3814. 8001b88: 2200 movs r2, #0
  3815. 8001b8a: 601a str r2, [r3, #0]
  3816. encoderXChannelB = 0;
  3817. 8001b8c: 4b0c ldr r3, [pc, #48] @ (8001bc0 <HAL_TIM_PeriodElapsedCallback+0x5c>)
  3818. 8001b8e: 2200 movs r2, #0
  3819. 8001b90: 601a str r2, [r3, #0]
  3820. }
  3821. 8001b92: e00a b.n 8001baa <HAL_TIM_PeriodElapsedCallback+0x46>
  3822. else if (htim->Instance == TIM2)
  3823. 8001b94: 687b ldr r3, [r7, #4]
  3824. 8001b96: 681b ldr r3, [r3, #0]
  3825. 8001b98: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  3826. 8001b9c: d105 bne.n 8001baa <HAL_TIM_PeriodElapsedCallback+0x46>
  3827. encoderYChannelA = 0;
  3828. 8001b9e: 4b09 ldr r3, [pc, #36] @ (8001bc4 <HAL_TIM_PeriodElapsedCallback+0x60>)
  3829. 8001ba0: 2200 movs r2, #0
  3830. 8001ba2: 601a str r2, [r3, #0]
  3831. encoderYChannelB = 0;
  3832. 8001ba4: 4b08 ldr r3, [pc, #32] @ (8001bc8 <HAL_TIM_PeriodElapsedCallback+0x64>)
  3833. 8001ba6: 2200 movs r2, #0
  3834. 8001ba8: 601a str r2, [r3, #0]
  3835. }
  3836. 8001baa: bf00 nop
  3837. 8001bac: 3708 adds r7, #8
  3838. 8001bae: 46bd mov sp, r7
  3839. 8001bb0: bd80 pop {r7, pc}
  3840. 8001bb2: bf00 nop
  3841. 8001bb4: 40001000 .word 0x40001000
  3842. 8001bb8: 40000800 .word 0x40000800
  3843. 8001bbc: 24000754 .word 0x24000754
  3844. 8001bc0: 24000758 .word 0x24000758
  3845. 8001bc4: 2400075c .word 0x2400075c
  3846. 8001bc8: 24000760 .word 0x24000760
  3847. 08001bcc <Error_Handler>:
  3848. /**
  3849. * @brief This function is executed in case of error occurrence.
  3850. * @retval None
  3851. */
  3852. void Error_Handler(void)
  3853. {
  3854. 8001bcc: b580 push {r7, lr}
  3855. 8001bce: af00 add r7, sp, #0
  3856. __ASM volatile ("cpsid i" : : : "memory");
  3857. 8001bd0: b672 cpsid i
  3858. }
  3859. 8001bd2: bf00 nop
  3860. /* USER CODE BEGIN Error_Handler_Debug */
  3861. /* User can add his own implementation to report the HAL error return state */
  3862. __disable_irq();
  3863. NVIC_SystemReset();
  3864. 8001bd4: f7fe fd58 bl 8000688 <__NVIC_SystemReset>
  3865. 08001bd8 <MeasTasksInit>:
  3866. extern TIM_OC_InitTypeDef motorXYTimerConfigOC;
  3867. extern osTimerId_t motorXTimerHandle;
  3868. extern osTimerId_t motorYTimerHandle;
  3869. void MeasTasksInit (void) {
  3870. 8001bd8: b590 push {r4, r7, lr}
  3871. 8001bda: b0b5 sub sp, #212 @ 0xd4
  3872. 8001bdc: af00 add r7, sp, #0
  3873. vRefmVMutex = osMutexNew (NULL);
  3874. 8001bde: 2000 movs r0, #0
  3875. 8001be0: f011 fe9d bl 801391e <osMutexNew>
  3876. 8001be4: 4603 mov r3, r0
  3877. 8001be6: 4a7e ldr r2, [pc, #504] @ (8001de0 <MeasTasksInit+0x208>)
  3878. 8001be8: 6013 str r3, [r2, #0]
  3879. resMeasurementsMutex = osMutexNew (NULL);
  3880. 8001bea: 2000 movs r0, #0
  3881. 8001bec: f011 fe97 bl 801391e <osMutexNew>
  3882. 8001bf0: 4603 mov r3, r0
  3883. 8001bf2: 4a7c ldr r2, [pc, #496] @ (8001de4 <MeasTasksInit+0x20c>)
  3884. 8001bf4: 6013 str r3, [r2, #0]
  3885. sensorsInfoMutex = osMutexNew (NULL);
  3886. 8001bf6: 2000 movs r0, #0
  3887. 8001bf8: f011 fe91 bl 801391e <osMutexNew>
  3888. 8001bfc: 4603 mov r3, r0
  3889. 8001bfe: 4a7a ldr r2, [pc, #488] @ (8001de8 <MeasTasksInit+0x210>)
  3890. 8001c00: 6013 str r3, [r2, #0]
  3891. ILxRefMutex = osMutexNew (NULL);
  3892. 8001c02: 2000 movs r0, #0
  3893. 8001c04: f011 fe8b bl 801391e <osMutexNew>
  3894. 8001c08: 4603 mov r3, r0
  3895. 8001c0a: 4a78 ldr r2, [pc, #480] @ (8001dec <MeasTasksInit+0x214>)
  3896. 8001c0c: 6013 str r3, [r2, #0]
  3897. adc1MeasDataQueue = osMessageQueueNew (8, sizeof (ADC1_Data), NULL);
  3898. 8001c0e: 2200 movs r2, #0
  3899. 8001c10: 2120 movs r1, #32
  3900. 8001c12: 2008 movs r0, #8
  3901. 8001c14: f011 ff91 bl 8013b3a <osMessageQueueNew>
  3902. 8001c18: 4603 mov r3, r0
  3903. 8001c1a: 4a75 ldr r2, [pc, #468] @ (8001df0 <MeasTasksInit+0x218>)
  3904. 8001c1c: 6013 str r3, [r2, #0]
  3905. adc2MeasDataQueue = osMessageQueueNew (8, sizeof (ADC2_Data), NULL);
  3906. 8001c1e: 2200 movs r2, #0
  3907. 8001c20: 2120 movs r1, #32
  3908. 8001c22: 2008 movs r0, #8
  3909. 8001c24: f011 ff89 bl 8013b3a <osMessageQueueNew>
  3910. 8001c28: 4603 mov r3, r0
  3911. 8001c2a: 4a72 ldr r2, [pc, #456] @ (8001df4 <MeasTasksInit+0x21c>)
  3912. 8001c2c: 6013 str r3, [r2, #0]
  3913. adc3MeasDataQueue = osMessageQueueNew (8, sizeof (ADC3_Data), NULL);
  3914. 8001c2e: 2200 movs r2, #0
  3915. 8001c30: 2120 movs r1, #32
  3916. 8001c32: 2008 movs r0, #8
  3917. 8001c34: f011 ff81 bl 8013b3a <osMessageQueueNew>
  3918. 8001c38: 4603 mov r3, r0
  3919. 8001c3a: 4a6f ldr r2, [pc, #444] @ (8001df8 <MeasTasksInit+0x220>)
  3920. 8001c3c: 6013 str r3, [r2, #0]
  3921. osThreadAttr_t osThreadAttradc1MeasTask = { 0 };
  3922. 8001c3e: f107 03ac add.w r3, r7, #172 @ 0xac
  3923. 8001c42: 2224 movs r2, #36 @ 0x24
  3924. 8001c44: 2100 movs r1, #0
  3925. 8001c46: 4618 mov r0, r3
  3926. 8001c48: f016 f820 bl 8017c8c <memset>
  3927. osThreadAttr_t osThreadAttradc2MeasTask = { 0 };
  3928. 8001c4c: f107 0388 add.w r3, r7, #136 @ 0x88
  3929. 8001c50: 2224 movs r2, #36 @ 0x24
  3930. 8001c52: 2100 movs r1, #0
  3931. 8001c54: 4618 mov r0, r3
  3932. 8001c56: f016 f819 bl 8017c8c <memset>
  3933. osThreadAttr_t osThreadAttradc3MeasTask = { 0 };
  3934. 8001c5a: f107 0364 add.w r3, r7, #100 @ 0x64
  3935. 8001c5e: 2224 movs r2, #36 @ 0x24
  3936. 8001c60: 2100 movs r1, #0
  3937. 8001c62: 4618 mov r0, r3
  3938. 8001c64: f016 f812 bl 8017c8c <memset>
  3939. osThreadAttradc1MeasTask.stack_size = configMINIMAL_STACK_SIZE * 2;
  3940. 8001c68: f44f 6380 mov.w r3, #1024 @ 0x400
  3941. 8001c6c: f8c7 30c0 str.w r3, [r7, #192] @ 0xc0
  3942. osThreadAttradc1MeasTask.priority = (osPriority_t)osPriorityRealtime;
  3943. 8001c70: 2330 movs r3, #48 @ 0x30
  3944. 8001c72: f8c7 30c4 str.w r3, [r7, #196] @ 0xc4
  3945. osThreadAttradc2MeasTask.stack_size = configMINIMAL_STACK_SIZE * 2;
  3946. 8001c76: f44f 6380 mov.w r3, #1024 @ 0x400
  3947. 8001c7a: f8c7 309c str.w r3, [r7, #156] @ 0x9c
  3948. osThreadAttradc2MeasTask.priority = (osPriority_t)osPriorityRealtime;
  3949. 8001c7e: 2330 movs r3, #48 @ 0x30
  3950. 8001c80: f8c7 30a0 str.w r3, [r7, #160] @ 0xa0
  3951. osThreadAttradc3MeasTask.stack_size = configMINIMAL_STACK_SIZE * 2;
  3952. 8001c84: f44f 6380 mov.w r3, #1024 @ 0x400
  3953. 8001c88: 67bb str r3, [r7, #120] @ 0x78
  3954. osThreadAttradc3MeasTask.priority = (osPriority_t)osPriorityNormal;
  3955. 8001c8a: 2318 movs r3, #24
  3956. 8001c8c: 67fb str r3, [r7, #124] @ 0x7c
  3957. adc1MeasTaskHandle = osThreadNew (ADC1MeasTask, NULL, &osThreadAttradc1MeasTask);
  3958. 8001c8e: f107 03ac add.w r3, r7, #172 @ 0xac
  3959. 8001c92: 461a mov r2, r3
  3960. 8001c94: 2100 movs r1, #0
  3961. 8001c96: 4859 ldr r0, [pc, #356] @ (8001dfc <MeasTasksInit+0x224>)
  3962. 8001c98: f011 fc9c bl 80135d4 <osThreadNew>
  3963. 8001c9c: 4603 mov r3, r0
  3964. 8001c9e: 4a58 ldr r2, [pc, #352] @ (8001e00 <MeasTasksInit+0x228>)
  3965. 8001ca0: 6013 str r3, [r2, #0]
  3966. adc2MeasTaskHandle = osThreadNew (ADC2MeasTask, NULL, &osThreadAttradc2MeasTask);
  3967. 8001ca2: f107 0388 add.w r3, r7, #136 @ 0x88
  3968. 8001ca6: 461a mov r2, r3
  3969. 8001ca8: 2100 movs r1, #0
  3970. 8001caa: 4856 ldr r0, [pc, #344] @ (8001e04 <MeasTasksInit+0x22c>)
  3971. 8001cac: f011 fc92 bl 80135d4 <osThreadNew>
  3972. 8001cb0: 4603 mov r3, r0
  3973. 8001cb2: 4a55 ldr r2, [pc, #340] @ (8001e08 <MeasTasksInit+0x230>)
  3974. 8001cb4: 6013 str r3, [r2, #0]
  3975. adc3MeasTaskHandle = osThreadNew (ADC3MeasTask, NULL, &osThreadAttradc3MeasTask);
  3976. 8001cb6: f107 0364 add.w r3, r7, #100 @ 0x64
  3977. 8001cba: 461a mov r2, r3
  3978. 8001cbc: 2100 movs r1, #0
  3979. 8001cbe: 4853 ldr r0, [pc, #332] @ (8001e0c <MeasTasksInit+0x234>)
  3980. 8001cc0: f011 fc88 bl 80135d4 <osThreadNew>
  3981. 8001cc4: 4603 mov r3, r0
  3982. 8001cc6: 4a52 ldr r2, [pc, #328] @ (8001e10 <MeasTasksInit+0x238>)
  3983. 8001cc8: 6013 str r3, [r2, #0]
  3984. osThreadAttr_t osThreadAttradc1LimiterSwitchTask = { 0 };
  3985. 8001cca: f107 0340 add.w r3, r7, #64 @ 0x40
  3986. 8001cce: 2224 movs r2, #36 @ 0x24
  3987. 8001cd0: 2100 movs r1, #0
  3988. 8001cd2: 4618 mov r0, r3
  3989. 8001cd4: f015 ffda bl 8017c8c <memset>
  3990. osThreadAttradc1LimiterSwitchTask.stack_size = configMINIMAL_STACK_SIZE * 2;
  3991. 8001cd8: f44f 6380 mov.w r3, #1024 @ 0x400
  3992. 8001cdc: 657b str r3, [r7, #84] @ 0x54
  3993. osThreadAttradc1LimiterSwitchTask.priority = (osPriority_t)osPriorityNormal;
  3994. 8001cde: 2318 movs r3, #24
  3995. 8001ce0: 65bb str r3, [r7, #88] @ 0x58
  3996. limiterSwitchTaskHandle = osThreadNew (LimiterSwitchTask, NULL, &osThreadAttradc1LimiterSwitchTask);
  3997. 8001ce2: f107 0340 add.w r3, r7, #64 @ 0x40
  3998. 8001ce6: 461a mov r2, r3
  3999. 8001ce8: 2100 movs r1, #0
  4000. 8001cea: 484a ldr r0, [pc, #296] @ (8001e14 <MeasTasksInit+0x23c>)
  4001. 8001cec: f011 fc72 bl 80135d4 <osThreadNew>
  4002. 8001cf0: 4603 mov r3, r0
  4003. 8001cf2: 4a49 ldr r2, [pc, #292] @ (8001e18 <MeasTasksInit+0x240>)
  4004. 8001cf4: 6013 str r3, [r2, #0]
  4005. encoderXTaskArg.dbgLed = DBG_LED2;
  4006. 8001cf6: 4b49 ldr r3, [pc, #292] @ (8001e1c <MeasTasksInit+0x244>)
  4007. 8001cf8: 2220 movs r2, #32
  4008. 8001cfa: 801a strh r2, [r3, #0]
  4009. encoderXTaskArg.pvEncoder = &(sensorsInfo.pvEncoderX);
  4010. 8001cfc: 4b47 ldr r3, [pc, #284] @ (8001e1c <MeasTasksInit+0x244>)
  4011. 8001cfe: 4a48 ldr r2, [pc, #288] @ (8001e20 <MeasTasksInit+0x248>)
  4012. 8001d00: 609a str r2, [r3, #8]
  4013. encoderXTaskArg.currentPosition = &(sensorsInfo.currentXPosition);
  4014. 8001d02: 4b46 ldr r3, [pc, #280] @ (8001e1c <MeasTasksInit+0x244>)
  4015. 8001d04: 4a47 ldr r2, [pc, #284] @ (8001e24 <MeasTasksInit+0x24c>)
  4016. 8001d06: 605a str r2, [r3, #4]
  4017. osMessageQueueAttr_t encoderMsgQueueAttr = { 0 };
  4018. 8001d08: f107 0328 add.w r3, r7, #40 @ 0x28
  4019. 8001d0c: 2200 movs r2, #0
  4020. 8001d0e: 601a str r2, [r3, #0]
  4021. 8001d10: 605a str r2, [r3, #4]
  4022. 8001d12: 609a str r2, [r3, #8]
  4023. 8001d14: 60da str r2, [r3, #12]
  4024. 8001d16: 611a str r2, [r3, #16]
  4025. 8001d18: 615a str r2, [r3, #20]
  4026. encoderXTaskArg.dataQueue = osMessageQueueNew (16, sizeof (uint32_t), &encoderMsgQueueAttr);
  4027. 8001d1a: f107 0328 add.w r3, r7, #40 @ 0x28
  4028. 8001d1e: 461a mov r2, r3
  4029. 8001d20: 2104 movs r1, #4
  4030. 8001d22: 2010 movs r0, #16
  4031. 8001d24: f011 ff09 bl 8013b3a <osMessageQueueNew>
  4032. 8001d28: 4603 mov r3, r0
  4033. 8001d2a: 4a3c ldr r2, [pc, #240] @ (8001e1c <MeasTasksInit+0x244>)
  4034. 8001d2c: 6113 str r3, [r2, #16]
  4035. encoderXTaskArg.initPinStates = ((HAL_GPIO_ReadPin(GPIOD, GPIO_PIN_15) << 1) | HAL_GPIO_ReadPin(GPIOD, GPIO_PIN_14)) & 0x3;
  4036. 8001d2e: f44f 4100 mov.w r1, #32768 @ 0x8000
  4037. 8001d32: 483d ldr r0, [pc, #244] @ (8001e28 <MeasTasksInit+0x250>)
  4038. 8001d34: f009 fac4 bl 800b2c0 <HAL_GPIO_ReadPin>
  4039. 8001d38: 4603 mov r3, r0
  4040. 8001d3a: 005c lsls r4, r3, #1
  4041. 8001d3c: f44f 4180 mov.w r1, #16384 @ 0x4000
  4042. 8001d40: 4839 ldr r0, [pc, #228] @ (8001e28 <MeasTasksInit+0x250>)
  4043. 8001d42: f009 fabd bl 800b2c0 <HAL_GPIO_ReadPin>
  4044. 8001d46: 4603 mov r3, r0
  4045. 8001d48: 4323 orrs r3, r4
  4046. 8001d4a: f003 0303 and.w r3, r3, #3
  4047. 8001d4e: 4a33 ldr r2, [pc, #204] @ (8001e1c <MeasTasksInit+0x244>)
  4048. 8001d50: 60d3 str r3, [r2, #12]
  4049. encoderYTaskArg.dbgLed = DBG_LED3;
  4050. 8001d52: 4b36 ldr r3, [pc, #216] @ (8001e2c <MeasTasksInit+0x254>)
  4051. 8001d54: 2240 movs r2, #64 @ 0x40
  4052. 8001d56: 801a strh r2, [r3, #0]
  4053. encoderYTaskArg.pvEncoder = &(sensorsInfo.pvEncoderY);
  4054. 8001d58: 4b34 ldr r3, [pc, #208] @ (8001e2c <MeasTasksInit+0x254>)
  4055. 8001d5a: 4a35 ldr r2, [pc, #212] @ (8001e30 <MeasTasksInit+0x258>)
  4056. 8001d5c: 609a str r2, [r3, #8]
  4057. encoderYTaskArg.currentPosition = &(sensorsInfo.currentYPosition);
  4058. 8001d5e: 4b33 ldr r3, [pc, #204] @ (8001e2c <MeasTasksInit+0x254>)
  4059. 8001d60: 4a34 ldr r2, [pc, #208] @ (8001e34 <MeasTasksInit+0x25c>)
  4060. 8001d62: 605a str r2, [r3, #4]
  4061. encoderYTaskArg.dataQueue = osMessageQueueNew (16, sizeof (uint32_t), &encoderMsgQueueAttr);
  4062. 8001d64: f107 0328 add.w r3, r7, #40 @ 0x28
  4063. 8001d68: 461a mov r2, r3
  4064. 8001d6a: 2104 movs r1, #4
  4065. 8001d6c: 2010 movs r0, #16
  4066. 8001d6e: f011 fee4 bl 8013b3a <osMessageQueueNew>
  4067. 8001d72: 4603 mov r3, r0
  4068. 8001d74: 4a2d ldr r2, [pc, #180] @ (8001e2c <MeasTasksInit+0x254>)
  4069. 8001d76: 6113 str r3, [r2, #16]
  4070. encoderYTaskArg.initPinStates = ((HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_11) << 1) | HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_10)) & 0x3;
  4071. 8001d78: f44f 6100 mov.w r1, #2048 @ 0x800
  4072. 8001d7c: 482e ldr r0, [pc, #184] @ (8001e38 <MeasTasksInit+0x260>)
  4073. 8001d7e: f009 fa9f bl 800b2c0 <HAL_GPIO_ReadPin>
  4074. 8001d82: 4603 mov r3, r0
  4075. 8001d84: 005c lsls r4, r3, #1
  4076. 8001d86: f44f 6180 mov.w r1, #1024 @ 0x400
  4077. 8001d8a: 482b ldr r0, [pc, #172] @ (8001e38 <MeasTasksInit+0x260>)
  4078. 8001d8c: f009 fa98 bl 800b2c0 <HAL_GPIO_ReadPin>
  4079. 8001d90: 4603 mov r3, r0
  4080. 8001d92: 4323 orrs r3, r4
  4081. 8001d94: f003 0303 and.w r3, r3, #3
  4082. 8001d98: 4a24 ldr r2, [pc, #144] @ (8001e2c <MeasTasksInit+0x254>)
  4083. 8001d9a: 60d3 str r3, [r2, #12]
  4084. osThreadAttr_t osThreadAttrEncoderTask = { 0 };
  4085. 8001d9c: 1d3b adds r3, r7, #4
  4086. 8001d9e: 2224 movs r2, #36 @ 0x24
  4087. 8001da0: 2100 movs r1, #0
  4088. 8001da2: 4618 mov r0, r3
  4089. 8001da4: f015 ff72 bl 8017c8c <memset>
  4090. osThreadAttrEncoderTask.stack_size = configMINIMAL_STACK_SIZE * 2;
  4091. 8001da8: f44f 6380 mov.w r3, #1024 @ 0x400
  4092. 8001dac: 61bb str r3, [r7, #24]
  4093. osThreadAttrEncoderTask.priority = (osPriority_t)osPriorityRealtime;
  4094. 8001dae: 2330 movs r3, #48 @ 0x30
  4095. 8001db0: 61fb str r3, [r7, #28]
  4096. encoderXTaskHandle = osThreadNew (EncoderTask, &encoderXTaskArg, &osThreadAttrEncoderTask);
  4097. 8001db2: 1d3b adds r3, r7, #4
  4098. 8001db4: 461a mov r2, r3
  4099. 8001db6: 4919 ldr r1, [pc, #100] @ (8001e1c <MeasTasksInit+0x244>)
  4100. 8001db8: 4820 ldr r0, [pc, #128] @ (8001e3c <MeasTasksInit+0x264>)
  4101. 8001dba: f011 fc0b bl 80135d4 <osThreadNew>
  4102. 8001dbe: 4603 mov r3, r0
  4103. 8001dc0: 4a1f ldr r2, [pc, #124] @ (8001e40 <MeasTasksInit+0x268>)
  4104. 8001dc2: 6013 str r3, [r2, #0]
  4105. encoderYTaskHandle = osThreadNew (EncoderTask, &encoderYTaskArg, &osThreadAttrEncoderTask);
  4106. 8001dc4: 1d3b adds r3, r7, #4
  4107. 8001dc6: 461a mov r2, r3
  4108. 8001dc8: 4918 ldr r1, [pc, #96] @ (8001e2c <MeasTasksInit+0x254>)
  4109. 8001dca: 481c ldr r0, [pc, #112] @ (8001e3c <MeasTasksInit+0x264>)
  4110. 8001dcc: f011 fc02 bl 80135d4 <osThreadNew>
  4111. 8001dd0: 4603 mov r3, r0
  4112. 8001dd2: 4a1c ldr r2, [pc, #112] @ (8001e44 <MeasTasksInit+0x26c>)
  4113. 8001dd4: 6013 str r3, [r2, #0]
  4114. }
  4115. 8001dd6: bf00 nop
  4116. 8001dd8: 37d4 adds r7, #212 @ 0xd4
  4117. 8001dda: 46bd mov sp, r7
  4118. 8001ddc: bd90 pop {r4, r7, pc}
  4119. 8001dde: bf00 nop
  4120. 8001de0: 24000788 .word 0x24000788
  4121. 8001de4: 2400078c .word 0x2400078c
  4122. 8001de8: 24000790 .word 0x24000790
  4123. 8001dec: 24000794 .word 0x24000794
  4124. 8001df0: 2400077c .word 0x2400077c
  4125. 8001df4: 24000780 .word 0x24000780
  4126. 8001df8: 24000784 .word 0x24000784
  4127. 8001dfc: 08001e49 .word 0x08001e49
  4128. 8001e00: 24000764 .word 0x24000764
  4129. 8001e04: 080021d1 .word 0x080021d1
  4130. 8001e08: 24000768 .word 0x24000768
  4131. 8001e0c: 080024d9 .word 0x080024d9
  4132. 8001e10: 2400076c .word 0x2400076c
  4133. 8001e14: 08002855 .word 0x08002855
  4134. 8001e18: 24000770 .word 0x24000770
  4135. 8001e1c: 24000840 .word 0x24000840
  4136. 8001e20: 240007ec .word 0x240007ec
  4137. 8001e24: 24000810 .word 0x24000810
  4138. 8001e28: 58020c00 .word 0x58020c00
  4139. 8001e2c: 24000860 .word 0x24000860
  4140. 8001e30: 240007f0 .word 0x240007f0
  4141. 8001e34: 24000814 .word 0x24000814
  4142. 8001e38: 58020400 .word 0x58020400
  4143. 8001e3c: 08002b61 .word 0x08002b61
  4144. 8001e40: 24000774 .word 0x24000774
  4145. 8001e44: 24000778 .word 0x24000778
  4146. 08001e48 <ADC1MeasTask>:
  4147. void ADC1MeasTask (void* arg) {
  4148. 8001e48: b580 push {r7, lr}
  4149. 8001e4a: b09a sub sp, #104 @ 0x68
  4150. 8001e4c: af00 add r7, sp, #0
  4151. 8001e4e: 6078 str r0, [r7, #4]
  4152. float circBuffer[VOLTAGES_COUNT][CIRC_BUFF_LEN] = { 0 };
  4153. 8001e50: f107 032c add.w r3, r7, #44 @ 0x2c
  4154. 8001e54: 2228 movs r2, #40 @ 0x28
  4155. 8001e56: 2100 movs r1, #0
  4156. 8001e58: 4618 mov r0, r3
  4157. 8001e5a: f015 ff17 bl 8017c8c <memset>
  4158. float rms[VOLTAGES_COUNT] = { 0 };
  4159. 8001e5e: f04f 0300 mov.w r3, #0
  4160. 8001e62: 62bb str r3, [r7, #40] @ 0x28
  4161. ;
  4162. ADC1_Data adcData = { 0 };
  4163. 8001e64: f107 0308 add.w r3, r7, #8
  4164. 8001e68: 2220 movs r2, #32
  4165. 8001e6a: 2100 movs r1, #0
  4166. 8001e6c: 4618 mov r0, r3
  4167. 8001e6e: f015 ff0d bl 8017c8c <memset>
  4168. uint32_t circBuffPos = 0;
  4169. 8001e72: 2300 movs r3, #0
  4170. 8001e74: 667b str r3, [r7, #100] @ 0x64
  4171. float gainCorrection = 1.0;
  4172. 8001e76: f04f 537e mov.w r3, #1065353216 @ 0x3f800000
  4173. 8001e7a: 663b str r3, [r7, #96] @ 0x60
  4174. while (pdTRUE) {
  4175. osMessageQueueGet (adc1MeasDataQueue, &adcData, 0, osWaitForever);
  4176. 8001e7c: 4bc8 ldr r3, [pc, #800] @ (80021a0 <ADC1MeasTask+0x358>)
  4177. 8001e7e: 6818 ldr r0, [r3, #0]
  4178. 8001e80: f107 0108 add.w r1, r7, #8
  4179. 8001e84: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  4180. 8001e88: 2200 movs r2, #0
  4181. 8001e8a: f011 ff29 bl 8013ce0 <osMessageQueueGet>
  4182. #ifdef GAIN_AUTO_CORRECTION
  4183. if (osMutexAcquire (vRefmVMutex, osWaitForever) == osOK) {
  4184. 8001e8e: 4bc5 ldr r3, [pc, #788] @ (80021a4 <ADC1MeasTask+0x35c>)
  4185. 8001e90: 681b ldr r3, [r3, #0]
  4186. 8001e92: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  4187. 8001e96: 4618 mov r0, r3
  4188. 8001e98: f011 fdc7 bl 8013a2a <osMutexAcquire>
  4189. 8001e9c: 4603 mov r3, r0
  4190. 8001e9e: 2b00 cmp r3, #0
  4191. 8001ea0: d10c bne.n 8001ebc <ADC1MeasTask+0x74>
  4192. gainCorrection = (float)vRefmV;
  4193. 8001ea2: 4bc1 ldr r3, [pc, #772] @ (80021a8 <ADC1MeasTask+0x360>)
  4194. 8001ea4: 681b ldr r3, [r3, #0]
  4195. 8001ea6: ee07 3a90 vmov s15, r3
  4196. 8001eaa: eef8 7a67 vcvt.f32.u32 s15, s15
  4197. 8001eae: edc7 7a18 vstr s15, [r7, #96] @ 0x60
  4198. osMutexRelease (vRefmVMutex);
  4199. 8001eb2: 4bbc ldr r3, [pc, #752] @ (80021a4 <ADC1MeasTask+0x35c>)
  4200. 8001eb4: 681b ldr r3, [r3, #0]
  4201. 8001eb6: 4618 mov r0, r3
  4202. 8001eb8: f011 fe02 bl 8013ac0 <osMutexRelease>
  4203. }
  4204. gainCorrection = gainCorrection / EXT_VREF_mV;
  4205. 8001ebc: ed97 7a18 vldr s14, [r7, #96] @ 0x60
  4206. 8001ec0: eddf 6aba vldr s13, [pc, #744] @ 80021ac <ADC1MeasTask+0x364>
  4207. 8001ec4: eec7 7a26 vdiv.f32 s15, s14, s13
  4208. 8001ec8: edc7 7a18 vstr s15, [r7, #96] @ 0x60
  4209. #endif
  4210. for (uint8_t i = 0; i < VOLTAGES_COUNT; i++) {
  4211. 8001ecc: 2300 movs r3, #0
  4212. 8001ece: f887 305f strb.w r3, [r7, #95] @ 0x5f
  4213. 8001ed2: e0e7 b.n 80020a4 <ADC1MeasTask+0x25c>
  4214. float val = adcData.adcDataBuffer[i] * deltaADC * U_CHANNEL_CONST * gainCorrection * U_MeasCorrectionData[i].gain + U_MeasCorrectionData[i].offset;
  4215. 8001ed4: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4216. 8001ed8: 005b lsls r3, r3, #1
  4217. 8001eda: 3368 adds r3, #104 @ 0x68
  4218. 8001edc: 443b add r3, r7
  4219. 8001ede: f833 3c60 ldrh.w r3, [r3, #-96]
  4220. 8001ee2: ee07 3a90 vmov s15, r3
  4221. 8001ee6: eeb8 7be7 vcvt.f64.s32 d7, s15
  4222. 8001eea: eeb0 6b08 vmov.f64 d6, #8 @ 0x40400000 3.0
  4223. 8001eee: ee27 6b06 vmul.f64 d6, d7, d6
  4224. 8001ef2: ed9f 5ba5 vldr d5, [pc, #660] @ 8002188 <ADC1MeasTask+0x340>
  4225. 8001ef6: ee86 7b05 vdiv.f64 d7, d6, d5
  4226. 8001efa: ed9f 6ba5 vldr d6, [pc, #660] @ 8002190 <ADC1MeasTask+0x348>
  4227. 8001efe: ee27 6b06 vmul.f64 d6, d7, d6
  4228. 8001f02: edd7 7a18 vldr s15, [r7, #96] @ 0x60
  4229. 8001f06: eeb7 7ae7 vcvt.f64.f32 d7, s15
  4230. 8001f0a: ee26 6b07 vmul.f64 d6, d6, d7
  4231. 8001f0e: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4232. 8001f12: 4aa7 ldr r2, [pc, #668] @ (80021b0 <ADC1MeasTask+0x368>)
  4233. 8001f14: 00db lsls r3, r3, #3
  4234. 8001f16: 4413 add r3, r2
  4235. 8001f18: edd3 7a00 vldr s15, [r3]
  4236. 8001f1c: eeb7 7ae7 vcvt.f64.f32 d7, s15
  4237. 8001f20: ee26 6b07 vmul.f64 d6, d6, d7
  4238. 8001f24: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4239. 8001f28: 4aa1 ldr r2, [pc, #644] @ (80021b0 <ADC1MeasTask+0x368>)
  4240. 8001f2a: 00db lsls r3, r3, #3
  4241. 8001f2c: 4413 add r3, r2
  4242. 8001f2e: 3304 adds r3, #4
  4243. 8001f30: edd3 7a00 vldr s15, [r3]
  4244. 8001f34: eeb7 7ae7 vcvt.f64.f32 d7, s15
  4245. 8001f38: ee36 7b07 vadd.f64 d7, d6, d7
  4246. 8001f3c: eef7 7bc7 vcvt.f32.f64 s15, d7
  4247. 8001f40: edc7 7a15 vstr s15, [r7, #84] @ 0x54
  4248. circBuffer[i][circBuffPos] = val;
  4249. 8001f44: f897 205f ldrb.w r2, [r7, #95] @ 0x5f
  4250. 8001f48: 4613 mov r3, r2
  4251. 8001f4a: 009b lsls r3, r3, #2
  4252. 8001f4c: 4413 add r3, r2
  4253. 8001f4e: 005b lsls r3, r3, #1
  4254. 8001f50: 6e7a ldr r2, [r7, #100] @ 0x64
  4255. 8001f52: 4413 add r3, r2
  4256. 8001f54: 009b lsls r3, r3, #2
  4257. 8001f56: 3368 adds r3, #104 @ 0x68
  4258. 8001f58: 443b add r3, r7
  4259. 8001f5a: 3b3c subs r3, #60 @ 0x3c
  4260. 8001f5c: 6d7a ldr r2, [r7, #84] @ 0x54
  4261. 8001f5e: 601a str r2, [r3, #0]
  4262. rms[i] = 0.0;
  4263. 8001f60: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4264. 8001f64: 009b lsls r3, r3, #2
  4265. 8001f66: 3368 adds r3, #104 @ 0x68
  4266. 8001f68: 443b add r3, r7
  4267. 8001f6a: 3b40 subs r3, #64 @ 0x40
  4268. 8001f6c: f04f 0200 mov.w r2, #0
  4269. 8001f70: 601a str r2, [r3, #0]
  4270. for (uint8_t c = 0; c < CIRC_BUFF_LEN; c++) {
  4271. 8001f72: 2300 movs r3, #0
  4272. 8001f74: f887 305e strb.w r3, [r7, #94] @ 0x5e
  4273. 8001f78: e025 b.n 8001fc6 <ADC1MeasTask+0x17e>
  4274. rms[i] += circBuffer[i][c];
  4275. 8001f7a: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4276. 8001f7e: 009b lsls r3, r3, #2
  4277. 8001f80: 3368 adds r3, #104 @ 0x68
  4278. 8001f82: 443b add r3, r7
  4279. 8001f84: 3b40 subs r3, #64 @ 0x40
  4280. 8001f86: ed93 7a00 vldr s14, [r3]
  4281. 8001f8a: f897 205f ldrb.w r2, [r7, #95] @ 0x5f
  4282. 8001f8e: f897 105e ldrb.w r1, [r7, #94] @ 0x5e
  4283. 8001f92: 4613 mov r3, r2
  4284. 8001f94: 009b lsls r3, r3, #2
  4285. 8001f96: 4413 add r3, r2
  4286. 8001f98: 005b lsls r3, r3, #1
  4287. 8001f9a: 440b add r3, r1
  4288. 8001f9c: 009b lsls r3, r3, #2
  4289. 8001f9e: 3368 adds r3, #104 @ 0x68
  4290. 8001fa0: 443b add r3, r7
  4291. 8001fa2: 3b3c subs r3, #60 @ 0x3c
  4292. 8001fa4: edd3 7a00 vldr s15, [r3]
  4293. 8001fa8: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4294. 8001fac: ee77 7a27 vadd.f32 s15, s14, s15
  4295. 8001fb0: 009b lsls r3, r3, #2
  4296. 8001fb2: 3368 adds r3, #104 @ 0x68
  4297. 8001fb4: 443b add r3, r7
  4298. 8001fb6: 3b40 subs r3, #64 @ 0x40
  4299. 8001fb8: edc3 7a00 vstr s15, [r3]
  4300. for (uint8_t c = 0; c < CIRC_BUFF_LEN; c++) {
  4301. 8001fbc: f897 305e ldrb.w r3, [r7, #94] @ 0x5e
  4302. 8001fc0: 3301 adds r3, #1
  4303. 8001fc2: f887 305e strb.w r3, [r7, #94] @ 0x5e
  4304. 8001fc6: f897 305e ldrb.w r3, [r7, #94] @ 0x5e
  4305. 8001fca: 2b09 cmp r3, #9
  4306. 8001fcc: d9d5 bls.n 8001f7a <ADC1MeasTask+0x132>
  4307. }
  4308. rms[i] = rms[i] / CIRC_BUFF_LEN;
  4309. 8001fce: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4310. 8001fd2: 009b lsls r3, r3, #2
  4311. 8001fd4: 3368 adds r3, #104 @ 0x68
  4312. 8001fd6: 443b add r3, r7
  4313. 8001fd8: 3b40 subs r3, #64 @ 0x40
  4314. 8001fda: ed93 7a00 vldr s14, [r3]
  4315. 8001fde: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4316. 8001fe2: eef2 6a04 vmov.f32 s13, #36 @ 0x41200000 10.0
  4317. 8001fe6: eec7 7a26 vdiv.f32 s15, s14, s13
  4318. 8001fea: 009b lsls r3, r3, #2
  4319. 8001fec: 3368 adds r3, #104 @ 0x68
  4320. 8001fee: 443b add r3, r7
  4321. 8001ff0: 3b40 subs r3, #64 @ 0x40
  4322. 8001ff2: edc3 7a00 vstr s15, [r3]
  4323. if (osMutexAcquire (resMeasurementsMutex, osWaitForever) == osOK) {
  4324. 8001ff6: 4b6f ldr r3, [pc, #444] @ (80021b4 <ADC1MeasTask+0x36c>)
  4325. 8001ff8: 681b ldr r3, [r3, #0]
  4326. 8001ffa: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  4327. 8001ffe: 4618 mov r0, r3
  4328. 8002000: f011 fd13 bl 8013a2a <osMutexAcquire>
  4329. 8002004: 4603 mov r3, r0
  4330. 8002006: 2b00 cmp r3, #0
  4331. 8002008: d147 bne.n 800209a <ADC1MeasTask+0x252>
  4332. if (fabs (resMeasurements.voltagePeak[i]) < fabs (val)) {
  4333. 800200a: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4334. 800200e: 4a6a ldr r2, [pc, #424] @ (80021b8 <ADC1MeasTask+0x370>)
  4335. 8002010: 3302 adds r3, #2
  4336. 8002012: 009b lsls r3, r3, #2
  4337. 8002014: 4413 add r3, r2
  4338. 8002016: 3304 adds r3, #4
  4339. 8002018: edd3 7a00 vldr s15, [r3]
  4340. 800201c: eeb0 7ae7 vabs.f32 s14, s15
  4341. 8002020: edd7 7a15 vldr s15, [r7, #84] @ 0x54
  4342. 8002024: eef0 7ae7 vabs.f32 s15, s15
  4343. 8002028: eeb4 7ae7 vcmpe.f32 s14, s15
  4344. 800202c: eef1 fa10 vmrs APSR_nzcv, fpscr
  4345. 8002030: d508 bpl.n 8002044 <ADC1MeasTask+0x1fc>
  4346. resMeasurements.voltagePeak[i] = val;
  4347. 8002032: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4348. 8002036: 4a60 ldr r2, [pc, #384] @ (80021b8 <ADC1MeasTask+0x370>)
  4349. 8002038: 3302 adds r3, #2
  4350. 800203a: 009b lsls r3, r3, #2
  4351. 800203c: 4413 add r3, r2
  4352. 800203e: 3304 adds r3, #4
  4353. 8002040: 6d7a ldr r2, [r7, #84] @ 0x54
  4354. 8002042: 601a str r2, [r3, #0]
  4355. }
  4356. resMeasurements.voltageRMS[i] = rms[i];
  4357. 8002044: f897 205f ldrb.w r2, [r7, #95] @ 0x5f
  4358. 8002048: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4359. 800204c: 0092 lsls r2, r2, #2
  4360. 800204e: 3268 adds r2, #104 @ 0x68
  4361. 8002050: 443a add r2, r7
  4362. 8002052: 3a40 subs r2, #64 @ 0x40
  4363. 8002054: 6812 ldr r2, [r2, #0]
  4364. 8002056: 4958 ldr r1, [pc, #352] @ (80021b8 <ADC1MeasTask+0x370>)
  4365. 8002058: 009b lsls r3, r3, #2
  4366. 800205a: 440b add r3, r1
  4367. 800205c: 601a str r2, [r3, #0]
  4368. resMeasurements.power[i] = resMeasurements.voltageRMS[i] * resMeasurements.currentRMS[i];
  4369. 800205e: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4370. 8002062: 4a55 ldr r2, [pc, #340] @ (80021b8 <ADC1MeasTask+0x370>)
  4371. 8002064: 009b lsls r3, r3, #2
  4372. 8002066: 4413 add r3, r2
  4373. 8002068: ed93 7a00 vldr s14, [r3]
  4374. 800206c: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4375. 8002070: 4a51 ldr r2, [pc, #324] @ (80021b8 <ADC1MeasTask+0x370>)
  4376. 8002072: 3306 adds r3, #6
  4377. 8002074: 009b lsls r3, r3, #2
  4378. 8002076: 4413 add r3, r2
  4379. 8002078: edd3 7a00 vldr s15, [r3]
  4380. 800207c: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4381. 8002080: ee67 7a27 vmul.f32 s15, s14, s15
  4382. 8002084: 4a4c ldr r2, [pc, #304] @ (80021b8 <ADC1MeasTask+0x370>)
  4383. 8002086: 330c adds r3, #12
  4384. 8002088: 009b lsls r3, r3, #2
  4385. 800208a: 4413 add r3, r2
  4386. 800208c: edc3 7a00 vstr s15, [r3]
  4387. osMutexRelease (resMeasurementsMutex);
  4388. 8002090: 4b48 ldr r3, [pc, #288] @ (80021b4 <ADC1MeasTask+0x36c>)
  4389. 8002092: 681b ldr r3, [r3, #0]
  4390. 8002094: 4618 mov r0, r3
  4391. 8002096: f011 fd13 bl 8013ac0 <osMutexRelease>
  4392. for (uint8_t i = 0; i < VOLTAGES_COUNT; i++) {
  4393. 800209a: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4394. 800209e: 3301 adds r3, #1
  4395. 80020a0: f887 305f strb.w r3, [r7, #95] @ 0x5f
  4396. 80020a4: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  4397. 80020a8: 2b00 cmp r3, #0
  4398. 80020aa: f43f af13 beq.w 8001ed4 <ADC1MeasTask+0x8c>
  4399. }
  4400. }
  4401. ++circBuffPos;
  4402. 80020ae: 6e7b ldr r3, [r7, #100] @ 0x64
  4403. 80020b0: 3301 adds r3, #1
  4404. 80020b2: 667b str r3, [r7, #100] @ 0x64
  4405. circBuffPos = circBuffPos % CIRC_BUFF_LEN;
  4406. 80020b4: 6e7a ldr r2, [r7, #100] @ 0x64
  4407. 80020b6: 4b41 ldr r3, [pc, #260] @ (80021bc <ADC1MeasTask+0x374>)
  4408. 80020b8: fba3 1302 umull r1, r3, r3, r2
  4409. 80020bc: 08d9 lsrs r1, r3, #3
  4410. 80020be: 460b mov r3, r1
  4411. 80020c0: 009b lsls r3, r3, #2
  4412. 80020c2: 440b add r3, r1
  4413. 80020c4: 005b lsls r3, r3, #1
  4414. 80020c6: 1ad3 subs r3, r2, r3
  4415. 80020c8: 667b str r3, [r7, #100] @ 0x64
  4416. if (osMutexAcquire (ILxRefMutex, osWaitForever) == osOK) {
  4417. 80020ca: 4b3d ldr r3, [pc, #244] @ (80021c0 <ADC1MeasTask+0x378>)
  4418. 80020cc: 681b ldr r3, [r3, #0]
  4419. 80020ce: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  4420. 80020d2: 4618 mov r0, r3
  4421. 80020d4: f011 fca9 bl 8013a2a <osMutexAcquire>
  4422. 80020d8: 4603 mov r3, r0
  4423. 80020da: 2b00 cmp r3, #0
  4424. 80020dc: d124 bne.n 8002128 <ADC1MeasTask+0x2e0>
  4425. uint8_t refIdx = 0;
  4426. 80020de: 2300 movs r3, #0
  4427. 80020e0: f887 305d strb.w r3, [r7, #93] @ 0x5d
  4428. for (uint8_t i = (uint8_t)IL1Ref; i <= (uint8_t)IL3Ref; i++) {
  4429. 80020e4: 2303 movs r3, #3
  4430. 80020e6: f887 305c strb.w r3, [r7, #92] @ 0x5c
  4431. 80020ea: e014 b.n 8002116 <ADC1MeasTask+0x2ce>
  4432. ILxRef[refIdx++] = adcData.adcDataBuffer[i];
  4433. 80020ec: f897 205c ldrb.w r2, [r7, #92] @ 0x5c
  4434. 80020f0: f897 305d ldrb.w r3, [r7, #93] @ 0x5d
  4435. 80020f4: 1c59 adds r1, r3, #1
  4436. 80020f6: f887 105d strb.w r1, [r7, #93] @ 0x5d
  4437. 80020fa: 4619 mov r1, r3
  4438. 80020fc: 0053 lsls r3, r2, #1
  4439. 80020fe: 3368 adds r3, #104 @ 0x68
  4440. 8002100: 443b add r3, r7
  4441. 8002102: f833 2c60 ldrh.w r2, [r3, #-96]
  4442. 8002106: 4b2f ldr r3, [pc, #188] @ (80021c4 <ADC1MeasTask+0x37c>)
  4443. 8002108: f823 2011 strh.w r2, [r3, r1, lsl #1]
  4444. for (uint8_t i = (uint8_t)IL1Ref; i <= (uint8_t)IL3Ref; i++) {
  4445. 800210c: f897 305c ldrb.w r3, [r7, #92] @ 0x5c
  4446. 8002110: 3301 adds r3, #1
  4447. 8002112: f887 305c strb.w r3, [r7, #92] @ 0x5c
  4448. 8002116: f897 305c ldrb.w r3, [r7, #92] @ 0x5c
  4449. 800211a: 2b05 cmp r3, #5
  4450. 800211c: d9e6 bls.n 80020ec <ADC1MeasTask+0x2a4>
  4451. }
  4452. osMutexRelease (ILxRefMutex);
  4453. 800211e: 4b28 ldr r3, [pc, #160] @ (80021c0 <ADC1MeasTask+0x378>)
  4454. 8002120: 681b ldr r3, [r3, #0]
  4455. 8002122: 4618 mov r0, r3
  4456. 8002124: f011 fccc bl 8013ac0 <osMutexRelease>
  4457. }
  4458. float fanFBVoltage = adcData.adcDataBuffer[FanFB] * deltaADC * -4.35 + 12;
  4459. 8002128: 8abb ldrh r3, [r7, #20]
  4460. 800212a: ee07 3a90 vmov s15, r3
  4461. 800212e: eeb8 7be7 vcvt.f64.s32 d7, s15
  4462. 8002132: eeb0 6b08 vmov.f64 d6, #8 @ 0x40400000 3.0
  4463. 8002136: ee27 6b06 vmul.f64 d6, d7, d6
  4464. 800213a: ed9f 5b13 vldr d5, [pc, #76] @ 8002188 <ADC1MeasTask+0x340>
  4465. 800213e: ee86 7b05 vdiv.f64 d7, d6, d5
  4466. 8002142: ed9f 6b15 vldr d6, [pc, #84] @ 8002198 <ADC1MeasTask+0x350>
  4467. 8002146: ee27 7b06 vmul.f64 d7, d7, d6
  4468. 800214a: eeb2 6b08 vmov.f64 d6, #40 @ 0x41400000 12.0
  4469. 800214e: ee37 7b06 vadd.f64 d7, d7, d6
  4470. 8002152: eef7 7bc7 vcvt.f32.f64 s15, d7
  4471. 8002156: edc7 7a16 vstr s15, [r7, #88] @ 0x58
  4472. if (osMutexAcquire (sensorsInfoMutex, osWaitForever) == osOK) {
  4473. 800215a: 4b1b ldr r3, [pc, #108] @ (80021c8 <ADC1MeasTask+0x380>)
  4474. 800215c: 681b ldr r3, [r3, #0]
  4475. 800215e: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  4476. 8002162: 4618 mov r0, r3
  4477. 8002164: f011 fc61 bl 8013a2a <osMutexAcquire>
  4478. 8002168: 4603 mov r3, r0
  4479. 800216a: 2b00 cmp r3, #0
  4480. 800216c: f47f ae86 bne.w 8001e7c <ADC1MeasTask+0x34>
  4481. sensorsInfo.fanVoltage = fanFBVoltage;
  4482. 8002170: 4a16 ldr r2, [pc, #88] @ (80021cc <ADC1MeasTask+0x384>)
  4483. 8002172: 6dbb ldr r3, [r7, #88] @ 0x58
  4484. 8002174: 6093 str r3, [r2, #8]
  4485. osMutexRelease (sensorsInfoMutex);
  4486. 8002176: 4b14 ldr r3, [pc, #80] @ (80021c8 <ADC1MeasTask+0x380>)
  4487. 8002178: 681b ldr r3, [r3, #0]
  4488. 800217a: 4618 mov r0, r3
  4489. 800217c: f011 fca0 bl 8013ac0 <osMutexRelease>
  4490. while (pdTRUE) {
  4491. 8002180: e67c b.n 8001e7c <ADC1MeasTask+0x34>
  4492. 8002182: bf00 nop
  4493. 8002184: f3af 8000 nop.w
  4494. 8002188: 00000000 .word 0x00000000
  4495. 800218c: 40efffe0 .word 0x40efffe0
  4496. 8002190: f5c28f5c .word 0xf5c28f5c
  4497. 8002194: 401e5c28 .word 0x401e5c28
  4498. 8002198: 66666666 .word 0x66666666
  4499. 800219c: c0116666 .word 0xc0116666
  4500. 80021a0: 2400077c .word 0x2400077c
  4501. 80021a4: 24000788 .word 0x24000788
  4502. 80021a8: 24000030 .word 0x24000030
  4503. 80021ac: 453b8000 .word 0x453b8000
  4504. 80021b0: 24000000 .word 0x24000000
  4505. 80021b4: 2400078c .word 0x2400078c
  4506. 80021b8: 240007a0 .word 0x240007a0
  4507. 80021bc: cccccccd .word 0xcccccccd
  4508. 80021c0: 24000794 .word 0x24000794
  4509. 80021c4: 24000820 .word 0x24000820
  4510. 80021c8: 24000790 .word 0x24000790
  4511. 80021cc: 240007e0 .word 0x240007e0
  4512. 080021d0 <ADC2MeasTask>:
  4513. }
  4514. }
  4515. }
  4516. void ADC2MeasTask (void* arg) {
  4517. 80021d0: b580 push {r7, lr}
  4518. 80021d2: b09c sub sp, #112 @ 0x70
  4519. 80021d4: af00 add r7, sp, #0
  4520. 80021d6: 6078 str r0, [r7, #4]
  4521. float circBuffer[CURRENTS_COUNT][CIRC_BUFF_LEN] = { 0 };
  4522. 80021d8: f107 0334 add.w r3, r7, #52 @ 0x34
  4523. 80021dc: 2228 movs r2, #40 @ 0x28
  4524. 80021de: 2100 movs r1, #0
  4525. 80021e0: 4618 mov r0, r3
  4526. 80021e2: f015 fd53 bl 8017c8c <memset>
  4527. float rms[CURRENTS_COUNT] = { 0 };
  4528. 80021e6: f04f 0300 mov.w r3, #0
  4529. 80021ea: 633b str r3, [r7, #48] @ 0x30
  4530. ADC2_Data adcData = { 0 };
  4531. 80021ec: f107 0310 add.w r3, r7, #16
  4532. 80021f0: 2220 movs r2, #32
  4533. 80021f2: 2100 movs r1, #0
  4534. 80021f4: 4618 mov r0, r3
  4535. 80021f6: f015 fd49 bl 8017c8c <memset>
  4536. uint32_t circBuffPos = 0;
  4537. 80021fa: 2300 movs r3, #0
  4538. 80021fc: 66fb str r3, [r7, #108] @ 0x6c
  4539. float gainCorrection = 1.0;
  4540. 80021fe: f04f 537e mov.w r3, #1065353216 @ 0x3f800000
  4541. 8002202: 66bb str r3, [r7, #104] @ 0x68
  4542. while (pdTRUE) {
  4543. osMessageQueueGet (adc2MeasDataQueue, &adcData, 0, osWaitForever);
  4544. 8002204: 4baa ldr r3, [pc, #680] @ (80024b0 <ADC2MeasTask+0x2e0>)
  4545. 8002206: 6818 ldr r0, [r3, #0]
  4546. 8002208: f107 0110 add.w r1, r7, #16
  4547. 800220c: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  4548. 8002210: 2200 movs r2, #0
  4549. 8002212: f011 fd65 bl 8013ce0 <osMessageQueueGet>
  4550. if (osMutexAcquire (vRefmVMutex, osWaitForever) == osOK) {
  4551. 8002216: 4ba7 ldr r3, [pc, #668] @ (80024b4 <ADC2MeasTask+0x2e4>)
  4552. 8002218: 681b ldr r3, [r3, #0]
  4553. 800221a: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  4554. 800221e: 4618 mov r0, r3
  4555. 8002220: f011 fc03 bl 8013a2a <osMutexAcquire>
  4556. 8002224: 4603 mov r3, r0
  4557. 8002226: 2b00 cmp r3, #0
  4558. 8002228: d10c bne.n 8002244 <ADC2MeasTask+0x74>
  4559. gainCorrection = (float)vRefmV;
  4560. 800222a: 4ba3 ldr r3, [pc, #652] @ (80024b8 <ADC2MeasTask+0x2e8>)
  4561. 800222c: 681b ldr r3, [r3, #0]
  4562. 800222e: ee07 3a90 vmov s15, r3
  4563. 8002232: eef8 7a67 vcvt.f32.u32 s15, s15
  4564. 8002236: edc7 7a1a vstr s15, [r7, #104] @ 0x68
  4565. osMutexRelease (vRefmVMutex);
  4566. 800223a: 4b9e ldr r3, [pc, #632] @ (80024b4 <ADC2MeasTask+0x2e4>)
  4567. 800223c: 681b ldr r3, [r3, #0]
  4568. 800223e: 4618 mov r0, r3
  4569. 8002240: f011 fc3e bl 8013ac0 <osMutexRelease>
  4570. }
  4571. gainCorrection = gainCorrection / EXT_VREF_mV;
  4572. 8002244: ed97 7a1a vldr s14, [r7, #104] @ 0x68
  4573. 8002248: eddf 6a9c vldr s13, [pc, #624] @ 80024bc <ADC2MeasTask+0x2ec>
  4574. 800224c: eec7 7a26 vdiv.f32 s15, s14, s13
  4575. 8002250: edc7 7a1a vstr s15, [r7, #104] @ 0x68
  4576. float ref[CURRENTS_COUNT] = { 0 };
  4577. 8002254: f04f 0300 mov.w r3, #0
  4578. 8002258: 60fb str r3, [r7, #12]
  4579. if (osMutexAcquire (ILxRefMutex, osWaitForever) == osOK) {
  4580. 800225a: 4b99 ldr r3, [pc, #612] @ (80024c0 <ADC2MeasTask+0x2f0>)
  4581. 800225c: 681b ldr r3, [r3, #0]
  4582. 800225e: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  4583. 8002262: 4618 mov r0, r3
  4584. 8002264: f011 fbe1 bl 8013a2a <osMutexAcquire>
  4585. 8002268: 4603 mov r3, r0
  4586. 800226a: 2b00 cmp r3, #0
  4587. 800226c: d122 bne.n 80022b4 <ADC2MeasTask+0xe4>
  4588. for (uint8_t i = 0; i < CURRENTS_COUNT; i++) {
  4589. 800226e: 2300 movs r3, #0
  4590. 8002270: f887 3067 strb.w r3, [r7, #103] @ 0x67
  4591. 8002274: e015 b.n 80022a2 <ADC2MeasTask+0xd2>
  4592. ref[i] = (float)ILxRef[i];
  4593. 8002276: f897 3067 ldrb.w r3, [r7, #103] @ 0x67
  4594. 800227a: 4a92 ldr r2, [pc, #584] @ (80024c4 <ADC2MeasTask+0x2f4>)
  4595. 800227c: f832 2013 ldrh.w r2, [r2, r3, lsl #1]
  4596. 8002280: f897 3067 ldrb.w r3, [r7, #103] @ 0x67
  4597. 8002284: ee07 2a90 vmov s15, r2
  4598. 8002288: eef8 7a67 vcvt.f32.u32 s15, s15
  4599. 800228c: 009b lsls r3, r3, #2
  4600. 800228e: 3370 adds r3, #112 @ 0x70
  4601. 8002290: 443b add r3, r7
  4602. 8002292: 3b64 subs r3, #100 @ 0x64
  4603. 8002294: edc3 7a00 vstr s15, [r3]
  4604. for (uint8_t i = 0; i < CURRENTS_COUNT; i++) {
  4605. 8002298: f897 3067 ldrb.w r3, [r7, #103] @ 0x67
  4606. 800229c: 3301 adds r3, #1
  4607. 800229e: f887 3067 strb.w r3, [r7, #103] @ 0x67
  4608. 80022a2: f897 3067 ldrb.w r3, [r7, #103] @ 0x67
  4609. 80022a6: 2b00 cmp r3, #0
  4610. 80022a8: d0e5 beq.n 8002276 <ADC2MeasTask+0xa6>
  4611. }
  4612. osMutexRelease (ILxRefMutex);
  4613. 80022aa: 4b85 ldr r3, [pc, #532] @ (80024c0 <ADC2MeasTask+0x2f0>)
  4614. 80022ac: 681b ldr r3, [r3, #0]
  4615. 80022ae: 4618 mov r0, r3
  4616. 80022b0: f011 fc06 bl 8013ac0 <osMutexRelease>
  4617. }
  4618. for (uint8_t i = 0; i < CURRENTS_COUNT; i++) {
  4619. 80022b4: 2300 movs r3, #0
  4620. 80022b6: f887 3066 strb.w r3, [r7, #102] @ 0x66
  4621. 80022ba: e0db b.n 8002474 <ADC2MeasTask+0x2a4>
  4622. float adcVal = (float)adcData.adcDataBuffer[i];
  4623. 80022bc: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  4624. 80022c0: 005b lsls r3, r3, #1
  4625. 80022c2: 3370 adds r3, #112 @ 0x70
  4626. 80022c4: 443b add r3, r7
  4627. 80022c6: f833 3c60 ldrh.w r3, [r3, #-96]
  4628. 80022ca: ee07 3a90 vmov s15, r3
  4629. 80022ce: eef8 7a67 vcvt.f32.u32 s15, s15
  4630. 80022d2: edc7 7a18 vstr s15, [r7, #96] @ 0x60
  4631. float val = (adcVal - ref[i]) * deltaADC * I_CHANNEL_CONST * gainCorrection * I_MeasCorrectionData[i].gain + I_MeasCorrectionData[i].offset;
  4632. 80022d6: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  4633. 80022da: 009b lsls r3, r3, #2
  4634. 80022dc: 3370 adds r3, #112 @ 0x70
  4635. 80022de: 443b add r3, r7
  4636. 80022e0: 3b64 subs r3, #100 @ 0x64
  4637. 80022e2: edd3 7a00 vldr s15, [r3]
  4638. 80022e6: ed97 7a18 vldr s14, [r7, #96] @ 0x60
  4639. 80022ea: ee77 7a67 vsub.f32 s15, s14, s15
  4640. 80022ee: eeb7 7ae7 vcvt.f64.f32 d7, s15
  4641. 80022f2: eeb0 6b08 vmov.f64 d6, #8 @ 0x40400000 3.0
  4642. 80022f6: ee27 6b06 vmul.f64 d6, d7, d6
  4643. 80022fa: ed9f 5b69 vldr d5, [pc, #420] @ 80024a0 <ADC2MeasTask+0x2d0>
  4644. 80022fe: ee86 7b05 vdiv.f64 d7, d6, d5
  4645. 8002302: ed9f 6b69 vldr d6, [pc, #420] @ 80024a8 <ADC2MeasTask+0x2d8>
  4646. 8002306: ee27 6b06 vmul.f64 d6, d7, d6
  4647. 800230a: edd7 7a1a vldr s15, [r7, #104] @ 0x68
  4648. 800230e: eeb7 7ae7 vcvt.f64.f32 d7, s15
  4649. 8002312: ee26 6b07 vmul.f64 d6, d6, d7
  4650. 8002316: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  4651. 800231a: 4a6b ldr r2, [pc, #428] @ (80024c8 <ADC2MeasTask+0x2f8>)
  4652. 800231c: 00db lsls r3, r3, #3
  4653. 800231e: 4413 add r3, r2
  4654. 8002320: edd3 7a00 vldr s15, [r3]
  4655. 8002324: eeb7 7ae7 vcvt.f64.f32 d7, s15
  4656. 8002328: ee26 6b07 vmul.f64 d6, d6, d7
  4657. 800232c: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  4658. 8002330: 4a65 ldr r2, [pc, #404] @ (80024c8 <ADC2MeasTask+0x2f8>)
  4659. 8002332: 00db lsls r3, r3, #3
  4660. 8002334: 4413 add r3, r2
  4661. 8002336: 3304 adds r3, #4
  4662. 8002338: edd3 7a00 vldr s15, [r3]
  4663. 800233c: eeb7 7ae7 vcvt.f64.f32 d7, s15
  4664. 8002340: ee36 7b07 vadd.f64 d7, d6, d7
  4665. 8002344: eef7 7bc7 vcvt.f32.f64 s15, d7
  4666. 8002348: edc7 7a17 vstr s15, [r7, #92] @ 0x5c
  4667. circBuffer[i][circBuffPos] = val;
  4668. 800234c: f897 2066 ldrb.w r2, [r7, #102] @ 0x66
  4669. 8002350: 4613 mov r3, r2
  4670. 8002352: 009b lsls r3, r3, #2
  4671. 8002354: 4413 add r3, r2
  4672. 8002356: 005b lsls r3, r3, #1
  4673. 8002358: 6efa ldr r2, [r7, #108] @ 0x6c
  4674. 800235a: 4413 add r3, r2
  4675. 800235c: 009b lsls r3, r3, #2
  4676. 800235e: 3370 adds r3, #112 @ 0x70
  4677. 8002360: 443b add r3, r7
  4678. 8002362: 3b3c subs r3, #60 @ 0x3c
  4679. 8002364: 6dfa ldr r2, [r7, #92] @ 0x5c
  4680. 8002366: 601a str r2, [r3, #0]
  4681. rms[i] = 0.0;
  4682. 8002368: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  4683. 800236c: 009b lsls r3, r3, #2
  4684. 800236e: 3370 adds r3, #112 @ 0x70
  4685. 8002370: 443b add r3, r7
  4686. 8002372: 3b40 subs r3, #64 @ 0x40
  4687. 8002374: f04f 0200 mov.w r2, #0
  4688. 8002378: 601a str r2, [r3, #0]
  4689. for (uint8_t c = 0; c < CIRC_BUFF_LEN; c++) {
  4690. 800237a: 2300 movs r3, #0
  4691. 800237c: f887 3065 strb.w r3, [r7, #101] @ 0x65
  4692. 8002380: e025 b.n 80023ce <ADC2MeasTask+0x1fe>
  4693. rms[i] += circBuffer[i][c];
  4694. 8002382: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  4695. 8002386: 009b lsls r3, r3, #2
  4696. 8002388: 3370 adds r3, #112 @ 0x70
  4697. 800238a: 443b add r3, r7
  4698. 800238c: 3b40 subs r3, #64 @ 0x40
  4699. 800238e: ed93 7a00 vldr s14, [r3]
  4700. 8002392: f897 2066 ldrb.w r2, [r7, #102] @ 0x66
  4701. 8002396: f897 1065 ldrb.w r1, [r7, #101] @ 0x65
  4702. 800239a: 4613 mov r3, r2
  4703. 800239c: 009b lsls r3, r3, #2
  4704. 800239e: 4413 add r3, r2
  4705. 80023a0: 005b lsls r3, r3, #1
  4706. 80023a2: 440b add r3, r1
  4707. 80023a4: 009b lsls r3, r3, #2
  4708. 80023a6: 3370 adds r3, #112 @ 0x70
  4709. 80023a8: 443b add r3, r7
  4710. 80023aa: 3b3c subs r3, #60 @ 0x3c
  4711. 80023ac: edd3 7a00 vldr s15, [r3]
  4712. 80023b0: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  4713. 80023b4: ee77 7a27 vadd.f32 s15, s14, s15
  4714. 80023b8: 009b lsls r3, r3, #2
  4715. 80023ba: 3370 adds r3, #112 @ 0x70
  4716. 80023bc: 443b add r3, r7
  4717. 80023be: 3b40 subs r3, #64 @ 0x40
  4718. 80023c0: edc3 7a00 vstr s15, [r3]
  4719. for (uint8_t c = 0; c < CIRC_BUFF_LEN; c++) {
  4720. 80023c4: f897 3065 ldrb.w r3, [r7, #101] @ 0x65
  4721. 80023c8: 3301 adds r3, #1
  4722. 80023ca: f887 3065 strb.w r3, [r7, #101] @ 0x65
  4723. 80023ce: f897 3065 ldrb.w r3, [r7, #101] @ 0x65
  4724. 80023d2: 2b09 cmp r3, #9
  4725. 80023d4: d9d5 bls.n 8002382 <ADC2MeasTask+0x1b2>
  4726. }
  4727. rms[i] = rms[i] / CIRC_BUFF_LEN;
  4728. 80023d6: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  4729. 80023da: 009b lsls r3, r3, #2
  4730. 80023dc: 3370 adds r3, #112 @ 0x70
  4731. 80023de: 443b add r3, r7
  4732. 80023e0: 3b40 subs r3, #64 @ 0x40
  4733. 80023e2: ed93 7a00 vldr s14, [r3]
  4734. 80023e6: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  4735. 80023ea: eef2 6a04 vmov.f32 s13, #36 @ 0x41200000 10.0
  4736. 80023ee: eec7 7a26 vdiv.f32 s15, s14, s13
  4737. 80023f2: 009b lsls r3, r3, #2
  4738. 80023f4: 3370 adds r3, #112 @ 0x70
  4739. 80023f6: 443b add r3, r7
  4740. 80023f8: 3b40 subs r3, #64 @ 0x40
  4741. 80023fa: edc3 7a00 vstr s15, [r3]
  4742. if (osMutexAcquire (resMeasurementsMutex, osWaitForever) == osOK) {
  4743. 80023fe: 4b33 ldr r3, [pc, #204] @ (80024cc <ADC2MeasTask+0x2fc>)
  4744. 8002400: 681b ldr r3, [r3, #0]
  4745. 8002402: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  4746. 8002406: 4618 mov r0, r3
  4747. 8002408: f011 fb0f bl 8013a2a <osMutexAcquire>
  4748. 800240c: 4603 mov r3, r0
  4749. 800240e: 2b00 cmp r3, #0
  4750. 8002410: d12b bne.n 800246a <ADC2MeasTask+0x29a>
  4751. if (resMeasurements.currentPeak[i] < val) {
  4752. 8002412: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  4753. 8002416: 4a2e ldr r2, [pc, #184] @ (80024d0 <ADC2MeasTask+0x300>)
  4754. 8002418: 3308 adds r3, #8
  4755. 800241a: 009b lsls r3, r3, #2
  4756. 800241c: 4413 add r3, r2
  4757. 800241e: 3304 adds r3, #4
  4758. 8002420: edd3 7a00 vldr s15, [r3]
  4759. 8002424: ed97 7a17 vldr s14, [r7, #92] @ 0x5c
  4760. 8002428: eeb4 7ae7 vcmpe.f32 s14, s15
  4761. 800242c: eef1 fa10 vmrs APSR_nzcv, fpscr
  4762. 8002430: dd08 ble.n 8002444 <ADC2MeasTask+0x274>
  4763. resMeasurements.currentPeak[i] = val;
  4764. 8002432: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  4765. 8002436: 4a26 ldr r2, [pc, #152] @ (80024d0 <ADC2MeasTask+0x300>)
  4766. 8002438: 3308 adds r3, #8
  4767. 800243a: 009b lsls r3, r3, #2
  4768. 800243c: 4413 add r3, r2
  4769. 800243e: 3304 adds r3, #4
  4770. 8002440: 6dfa ldr r2, [r7, #92] @ 0x5c
  4771. 8002442: 601a str r2, [r3, #0]
  4772. }
  4773. resMeasurements.currentRMS[i] = rms[i];
  4774. 8002444: f897 2066 ldrb.w r2, [r7, #102] @ 0x66
  4775. 8002448: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  4776. 800244c: 0092 lsls r2, r2, #2
  4777. 800244e: 3270 adds r2, #112 @ 0x70
  4778. 8002450: 443a add r2, r7
  4779. 8002452: 3a40 subs r2, #64 @ 0x40
  4780. 8002454: 6812 ldr r2, [r2, #0]
  4781. 8002456: 491e ldr r1, [pc, #120] @ (80024d0 <ADC2MeasTask+0x300>)
  4782. 8002458: 3306 adds r3, #6
  4783. 800245a: 009b lsls r3, r3, #2
  4784. 800245c: 440b add r3, r1
  4785. 800245e: 601a str r2, [r3, #0]
  4786. osMutexRelease (resMeasurementsMutex);
  4787. 8002460: 4b1a ldr r3, [pc, #104] @ (80024cc <ADC2MeasTask+0x2fc>)
  4788. 8002462: 681b ldr r3, [r3, #0]
  4789. 8002464: 4618 mov r0, r3
  4790. 8002466: f011 fb2b bl 8013ac0 <osMutexRelease>
  4791. for (uint8_t i = 0; i < CURRENTS_COUNT; i++) {
  4792. 800246a: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  4793. 800246e: 3301 adds r3, #1
  4794. 8002470: f887 3066 strb.w r3, [r7, #102] @ 0x66
  4795. 8002474: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  4796. 8002478: 2b00 cmp r3, #0
  4797. 800247a: f43f af1f beq.w 80022bc <ADC2MeasTask+0xec>
  4798. }
  4799. }
  4800. ++circBuffPos;
  4801. 800247e: 6efb ldr r3, [r7, #108] @ 0x6c
  4802. 8002480: 3301 adds r3, #1
  4803. 8002482: 66fb str r3, [r7, #108] @ 0x6c
  4804. circBuffPos = circBuffPos % CIRC_BUFF_LEN;
  4805. 8002484: 6efa ldr r2, [r7, #108] @ 0x6c
  4806. 8002486: 4b13 ldr r3, [pc, #76] @ (80024d4 <ADC2MeasTask+0x304>)
  4807. 8002488: fba3 1302 umull r1, r3, r3, r2
  4808. 800248c: 08d9 lsrs r1, r3, #3
  4809. 800248e: 460b mov r3, r1
  4810. 8002490: 009b lsls r3, r3, #2
  4811. 8002492: 440b add r3, r1
  4812. 8002494: 005b lsls r3, r3, #1
  4813. 8002496: 1ad3 subs r3, r2, r3
  4814. 8002498: 66fb str r3, [r7, #108] @ 0x6c
  4815. while (pdTRUE) {
  4816. 800249a: e6b3 b.n 8002204 <ADC2MeasTask+0x34>
  4817. 800249c: f3af 8000 nop.w
  4818. 80024a0: 00000000 .word 0x00000000
  4819. 80024a4: 40efffe0 .word 0x40efffe0
  4820. 80024a8: 83e425af .word 0x83e425af
  4821. 80024ac: 401e4d9e .word 0x401e4d9e
  4822. 80024b0: 24000780 .word 0x24000780
  4823. 80024b4: 24000788 .word 0x24000788
  4824. 80024b8: 24000030 .word 0x24000030
  4825. 80024bc: 453b8000 .word 0x453b8000
  4826. 80024c0: 24000794 .word 0x24000794
  4827. 80024c4: 24000820 .word 0x24000820
  4828. 80024c8: 24000018 .word 0x24000018
  4829. 80024cc: 2400078c .word 0x2400078c
  4830. 80024d0: 240007a0 .word 0x240007a0
  4831. 80024d4: cccccccd .word 0xcccccccd
  4832. 080024d8 <ADC3MeasTask>:
  4833. }
  4834. }
  4835. void ADC3MeasTask (void* arg) {
  4836. 80024d8: b580 push {r7, lr}
  4837. 80024da: b0bc sub sp, #240 @ 0xf0
  4838. 80024dc: af00 add r7, sp, #0
  4839. 80024de: 6078 str r0, [r7, #4]
  4840. float motorXSensCircBuffer[CIRC_BUFF_LEN] = { 0 };
  4841. 80024e0: f107 03a4 add.w r3, r7, #164 @ 0xa4
  4842. 80024e4: 2228 movs r2, #40 @ 0x28
  4843. 80024e6: 2100 movs r1, #0
  4844. 80024e8: 4618 mov r0, r3
  4845. 80024ea: f015 fbcf bl 8017c8c <memset>
  4846. float motorYSensCircBuffer[CIRC_BUFF_LEN] = { 0 };
  4847. 80024ee: f107 037c add.w r3, r7, #124 @ 0x7c
  4848. 80024f2: 2228 movs r2, #40 @ 0x28
  4849. 80024f4: 2100 movs r1, #0
  4850. 80024f6: 4618 mov r0, r3
  4851. 80024f8: f015 fbc8 bl 8017c8c <memset>
  4852. float pvT1CircBuffer[CIRC_BUFF_LEN] = { 0 };
  4853. 80024fc: f107 0354 add.w r3, r7, #84 @ 0x54
  4854. 8002500: 2228 movs r2, #40 @ 0x28
  4855. 8002502: 2100 movs r1, #0
  4856. 8002504: 4618 mov r0, r3
  4857. 8002506: f015 fbc1 bl 8017c8c <memset>
  4858. float pvT2CircBuffer[CIRC_BUFF_LEN] = { 0 };
  4859. 800250a: f107 032c add.w r3, r7, #44 @ 0x2c
  4860. 800250e: 2228 movs r2, #40 @ 0x28
  4861. 8002510: 2100 movs r1, #0
  4862. 8002512: 4618 mov r0, r3
  4863. 8002514: f015 fbba bl 8017c8c <memset>
  4864. uint32_t circBuffPos = 0;
  4865. 8002518: 2300 movs r3, #0
  4866. 800251a: f8c7 30ec str.w r3, [r7, #236] @ 0xec
  4867. ADC3_Data adcData = { 0 };
  4868. 800251e: f107 030c add.w r3, r7, #12
  4869. 8002522: 2220 movs r2, #32
  4870. 8002524: 2100 movs r1, #0
  4871. 8002526: 4618 mov r0, r3
  4872. 8002528: f015 fbb0 bl 8017c8c <memset>
  4873. while (pdTRUE) {
  4874. osMessageQueueGet (adc3MeasDataQueue, &adcData, 0, osWaitForever);
  4875. 800252c: 4bc2 ldr r3, [pc, #776] @ (8002838 <ADC3MeasTask+0x360>)
  4876. 800252e: 6818 ldr r0, [r3, #0]
  4877. 8002530: f107 010c add.w r1, r7, #12
  4878. 8002534: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  4879. 8002538: 2200 movs r2, #0
  4880. 800253a: f011 fbd1 bl 8013ce0 <osMessageQueueGet>
  4881. uint32_t vRef = __LL_ADC_CALC_VREFANALOG_VOLTAGE (adcData.adcDataBuffer[VrefInt], LL_ADC_RESOLUTION_16B);
  4882. 800253e: 4bbf ldr r3, [pc, #764] @ (800283c <ADC3MeasTask+0x364>)
  4883. 8002540: 881b ldrh r3, [r3, #0]
  4884. 8002542: 461a mov r2, r3
  4885. 8002544: f640 43e4 movw r3, #3300 @ 0xce4
  4886. 8002548: fb02 f303 mul.w r3, r2, r3
  4887. 800254c: 8aba ldrh r2, [r7, #20]
  4888. 800254e: fbb3 f3f2 udiv r3, r3, r2
  4889. 8002552: f8c7 30d4 str.w r3, [r7, #212] @ 0xd4
  4890. if (osMutexAcquire (vRefmVMutex, osWaitForever) == osOK) {
  4891. 8002556: 4bba ldr r3, [pc, #744] @ (8002840 <ADC3MeasTask+0x368>)
  4892. 8002558: 681b ldr r3, [r3, #0]
  4893. 800255a: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  4894. 800255e: 4618 mov r0, r3
  4895. 8002560: f011 fa63 bl 8013a2a <osMutexAcquire>
  4896. 8002564: 4603 mov r3, r0
  4897. 8002566: 2b00 cmp r3, #0
  4898. 8002568: d108 bne.n 800257c <ADC3MeasTask+0xa4>
  4899. vRefmV = vRef;
  4900. 800256a: 4ab6 ldr r2, [pc, #728] @ (8002844 <ADC3MeasTask+0x36c>)
  4901. 800256c: f8d7 30d4 ldr.w r3, [r7, #212] @ 0xd4
  4902. 8002570: 6013 str r3, [r2, #0]
  4903. osMutexRelease (vRefmVMutex);
  4904. 8002572: 4bb3 ldr r3, [pc, #716] @ (8002840 <ADC3MeasTask+0x368>)
  4905. 8002574: 681b ldr r3, [r3, #0]
  4906. 8002576: 4618 mov r0, r3
  4907. 8002578: f011 faa2 bl 8013ac0 <osMutexRelease>
  4908. }
  4909. float motorXCurrentSense = adcData.adcDataBuffer[motorXSense] * deltaADC * 10 / 8.33333;
  4910. 800257c: 8a3b ldrh r3, [r7, #16]
  4911. 800257e: ee07 3a90 vmov s15, r3
  4912. 8002582: eeb8 7be7 vcvt.f64.s32 d7, s15
  4913. 8002586: eeb0 6b08 vmov.f64 d6, #8 @ 0x40400000 3.0
  4914. 800258a: ee27 6b06 vmul.f64 d6, d7, d6
  4915. 800258e: ed9f 5ba2 vldr d5, [pc, #648] @ 8002818 <ADC3MeasTask+0x340>
  4916. 8002592: ee86 7b05 vdiv.f64 d7, d6, d5
  4917. 8002596: eeb2 6b04 vmov.f64 d6, #36 @ 0x41200000 10.0
  4918. 800259a: ee27 6b06 vmul.f64 d6, d7, d6
  4919. 800259e: ed9f 5ba0 vldr d5, [pc, #640] @ 8002820 <ADC3MeasTask+0x348>
  4920. 80025a2: ee86 7b05 vdiv.f64 d7, d6, d5
  4921. 80025a6: eef7 7bc7 vcvt.f32.f64 s15, d7
  4922. 80025aa: edc7 7a34 vstr s15, [r7, #208] @ 0xd0
  4923. float motorYCurrentSense = adcData.adcDataBuffer[motorYSense] * deltaADC * 10 / 8.33333;
  4924. 80025ae: 8a7b ldrh r3, [r7, #18]
  4925. 80025b0: ee07 3a90 vmov s15, r3
  4926. 80025b4: eeb8 7be7 vcvt.f64.s32 d7, s15
  4927. 80025b8: eeb0 6b08 vmov.f64 d6, #8 @ 0x40400000 3.0
  4928. 80025bc: ee27 6b06 vmul.f64 d6, d7, d6
  4929. 80025c0: ed9f 5b95 vldr d5, [pc, #596] @ 8002818 <ADC3MeasTask+0x340>
  4930. 80025c4: ee86 7b05 vdiv.f64 d7, d6, d5
  4931. 80025c8: eeb2 6b04 vmov.f64 d6, #36 @ 0x41200000 10.0
  4932. 80025cc: ee27 6b06 vmul.f64 d6, d7, d6
  4933. 80025d0: ed9f 5b93 vldr d5, [pc, #588] @ 8002820 <ADC3MeasTask+0x348>
  4934. 80025d4: ee86 7b05 vdiv.f64 d7, d6, d5
  4935. 80025d8: eef7 7bc7 vcvt.f32.f64 s15, d7
  4936. 80025dc: edc7 7a33 vstr s15, [r7, #204] @ 0xcc
  4937. motorXSensCircBuffer[circBuffPos] = motorXCurrentSense;
  4938. 80025e0: f8d7 30ec ldr.w r3, [r7, #236] @ 0xec
  4939. 80025e4: 009b lsls r3, r3, #2
  4940. 80025e6: 33f0 adds r3, #240 @ 0xf0
  4941. 80025e8: 443b add r3, r7
  4942. 80025ea: 3b4c subs r3, #76 @ 0x4c
  4943. 80025ec: f8d7 20d0 ldr.w r2, [r7, #208] @ 0xd0
  4944. 80025f0: 601a str r2, [r3, #0]
  4945. motorYSensCircBuffer[circBuffPos] = motorYCurrentSense;
  4946. 80025f2: f8d7 30ec ldr.w r3, [r7, #236] @ 0xec
  4947. 80025f6: 009b lsls r3, r3, #2
  4948. 80025f8: 33f0 adds r3, #240 @ 0xf0
  4949. 80025fa: 443b add r3, r7
  4950. 80025fc: 3b74 subs r3, #116 @ 0x74
  4951. 80025fe: f8d7 20cc ldr.w r2, [r7, #204] @ 0xcc
  4952. 8002602: 601a str r2, [r3, #0]
  4953. pvT1CircBuffer[circBuffPos] = adcData.adcDataBuffer[pvTemp1] * deltaADC * 45.33333333 - 63;
  4954. 8002604: 89bb ldrh r3, [r7, #12]
  4955. 8002606: ee07 3a90 vmov s15, r3
  4956. 800260a: eeb8 7be7 vcvt.f64.s32 d7, s15
  4957. 800260e: eeb0 6b08 vmov.f64 d6, #8 @ 0x40400000 3.0
  4958. 8002612: ee27 6b06 vmul.f64 d6, d7, d6
  4959. 8002616: ed9f 5b80 vldr d5, [pc, #512] @ 8002818 <ADC3MeasTask+0x340>
  4960. 800261a: ee86 7b05 vdiv.f64 d7, d6, d5
  4961. 800261e: ed9f 6b82 vldr d6, [pc, #520] @ 8002828 <ADC3MeasTask+0x350>
  4962. 8002622: ee27 7b06 vmul.f64 d7, d7, d6
  4963. 8002626: ed9f 6b82 vldr d6, [pc, #520] @ 8002830 <ADC3MeasTask+0x358>
  4964. 800262a: ee37 7b46 vsub.f64 d7, d7, d6
  4965. 800262e: eef7 7bc7 vcvt.f32.f64 s15, d7
  4966. 8002632: f8d7 30ec ldr.w r3, [r7, #236] @ 0xec
  4967. 8002636: 009b lsls r3, r3, #2
  4968. 8002638: 33f0 adds r3, #240 @ 0xf0
  4969. 800263a: 443b add r3, r7
  4970. 800263c: 3b9c subs r3, #156 @ 0x9c
  4971. 800263e: edc3 7a00 vstr s15, [r3]
  4972. pvT2CircBuffer[circBuffPos] = adcData.adcDataBuffer[pvTemp2] * deltaADC * 45.33333333 - 63;
  4973. 8002642: 89fb ldrh r3, [r7, #14]
  4974. 8002644: ee07 3a90 vmov s15, r3
  4975. 8002648: eeb8 7be7 vcvt.f64.s32 d7, s15
  4976. 800264c: eeb0 6b08 vmov.f64 d6, #8 @ 0x40400000 3.0
  4977. 8002650: ee27 6b06 vmul.f64 d6, d7, d6
  4978. 8002654: ed9f 5b70 vldr d5, [pc, #448] @ 8002818 <ADC3MeasTask+0x340>
  4979. 8002658: ee86 7b05 vdiv.f64 d7, d6, d5
  4980. 800265c: ed9f 6b72 vldr d6, [pc, #456] @ 8002828 <ADC3MeasTask+0x350>
  4981. 8002660: ee27 7b06 vmul.f64 d7, d7, d6
  4982. 8002664: ed9f 6b72 vldr d6, [pc, #456] @ 8002830 <ADC3MeasTask+0x358>
  4983. 8002668: ee37 7b46 vsub.f64 d7, d7, d6
  4984. 800266c: eef7 7bc7 vcvt.f32.f64 s15, d7
  4985. 8002670: f8d7 30ec ldr.w r3, [r7, #236] @ 0xec
  4986. 8002674: 009b lsls r3, r3, #2
  4987. 8002676: 33f0 adds r3, #240 @ 0xf0
  4988. 8002678: 443b add r3, r7
  4989. 800267a: 3bc4 subs r3, #196 @ 0xc4
  4990. 800267c: edc3 7a00 vstr s15, [r3]
  4991. float motorXAveCurrent = 0;
  4992. 8002680: f04f 0300 mov.w r3, #0
  4993. 8002684: f8c7 30e8 str.w r3, [r7, #232] @ 0xe8
  4994. float motorYAveCurrent = 0;
  4995. 8002688: f04f 0300 mov.w r3, #0
  4996. 800268c: f8c7 30e4 str.w r3, [r7, #228] @ 0xe4
  4997. float pvT1AveTemp = 0;
  4998. 8002690: f04f 0300 mov.w r3, #0
  4999. 8002694: f8c7 30e0 str.w r3, [r7, #224] @ 0xe0
  5000. float pvT2AveTemp = 0;
  5001. 8002698: f04f 0300 mov.w r3, #0
  5002. 800269c: f8c7 30dc str.w r3, [r7, #220] @ 0xdc
  5003. for (uint8_t i = 0; i < CIRC_BUFF_LEN; i++) {
  5004. 80026a0: 2300 movs r3, #0
  5005. 80026a2: f887 30db strb.w r3, [r7, #219] @ 0xdb
  5006. 80026a6: e03c b.n 8002722 <ADC3MeasTask+0x24a>
  5007. motorXAveCurrent += motorXSensCircBuffer[i];
  5008. 80026a8: f897 30db ldrb.w r3, [r7, #219] @ 0xdb
  5009. 80026ac: 009b lsls r3, r3, #2
  5010. 80026ae: 33f0 adds r3, #240 @ 0xf0
  5011. 80026b0: 443b add r3, r7
  5012. 80026b2: 3b4c subs r3, #76 @ 0x4c
  5013. 80026b4: edd3 7a00 vldr s15, [r3]
  5014. 80026b8: ed97 7a3a vldr s14, [r7, #232] @ 0xe8
  5015. 80026bc: ee77 7a27 vadd.f32 s15, s14, s15
  5016. 80026c0: edc7 7a3a vstr s15, [r7, #232] @ 0xe8
  5017. motorYAveCurrent += motorYSensCircBuffer[i];
  5018. 80026c4: f897 30db ldrb.w r3, [r7, #219] @ 0xdb
  5019. 80026c8: 009b lsls r3, r3, #2
  5020. 80026ca: 33f0 adds r3, #240 @ 0xf0
  5021. 80026cc: 443b add r3, r7
  5022. 80026ce: 3b74 subs r3, #116 @ 0x74
  5023. 80026d0: edd3 7a00 vldr s15, [r3]
  5024. 80026d4: ed97 7a39 vldr s14, [r7, #228] @ 0xe4
  5025. 80026d8: ee77 7a27 vadd.f32 s15, s14, s15
  5026. 80026dc: edc7 7a39 vstr s15, [r7, #228] @ 0xe4
  5027. #ifdef PV_BOARD
  5028. pvT1AveTemp += pvT1CircBuffer[i];
  5029. 80026e0: f897 30db ldrb.w r3, [r7, #219] @ 0xdb
  5030. 80026e4: 009b lsls r3, r3, #2
  5031. 80026e6: 33f0 adds r3, #240 @ 0xf0
  5032. 80026e8: 443b add r3, r7
  5033. 80026ea: 3b9c subs r3, #156 @ 0x9c
  5034. 80026ec: edd3 7a00 vldr s15, [r3]
  5035. 80026f0: ed97 7a38 vldr s14, [r7, #224] @ 0xe0
  5036. 80026f4: ee77 7a27 vadd.f32 s15, s14, s15
  5037. 80026f8: edc7 7a38 vstr s15, [r7, #224] @ 0xe0
  5038. pvT2AveTemp += pvT2CircBuffer[i];
  5039. 80026fc: f897 30db ldrb.w r3, [r7, #219] @ 0xdb
  5040. 8002700: 009b lsls r3, r3, #2
  5041. 8002702: 33f0 adds r3, #240 @ 0xf0
  5042. 8002704: 443b add r3, r7
  5043. 8002706: 3bc4 subs r3, #196 @ 0xc4
  5044. 8002708: edd3 7a00 vldr s15, [r3]
  5045. 800270c: ed97 7a37 vldr s14, [r7, #220] @ 0xdc
  5046. 8002710: ee77 7a27 vadd.f32 s15, s14, s15
  5047. 8002714: edc7 7a37 vstr s15, [r7, #220] @ 0xdc
  5048. for (uint8_t i = 0; i < CIRC_BUFF_LEN; i++) {
  5049. 8002718: f897 30db ldrb.w r3, [r7, #219] @ 0xdb
  5050. 800271c: 3301 adds r3, #1
  5051. 800271e: f887 30db strb.w r3, [r7, #219] @ 0xdb
  5052. 8002722: f897 30db ldrb.w r3, [r7, #219] @ 0xdb
  5053. 8002726: 2b09 cmp r3, #9
  5054. 8002728: d9be bls.n 80026a8 <ADC3MeasTask+0x1d0>
  5055. #endif
  5056. }
  5057. motorXAveCurrent /= CIRC_BUFF_LEN;
  5058. 800272a: ed97 7a3a vldr s14, [r7, #232] @ 0xe8
  5059. 800272e: eef2 6a04 vmov.f32 s13, #36 @ 0x41200000 10.0
  5060. 8002732: eec7 7a26 vdiv.f32 s15, s14, s13
  5061. 8002736: edc7 7a3a vstr s15, [r7, #232] @ 0xe8
  5062. motorYAveCurrent /= CIRC_BUFF_LEN;
  5063. 800273a: ed97 7a39 vldr s14, [r7, #228] @ 0xe4
  5064. 800273e: eef2 6a04 vmov.f32 s13, #36 @ 0x41200000 10.0
  5065. 8002742: eec7 7a26 vdiv.f32 s15, s14, s13
  5066. 8002746: edc7 7a39 vstr s15, [r7, #228] @ 0xe4
  5067. pvT1AveTemp /= CIRC_BUFF_LEN;
  5068. 800274a: ed97 7a38 vldr s14, [r7, #224] @ 0xe0
  5069. 800274e: eef2 6a04 vmov.f32 s13, #36 @ 0x41200000 10.0
  5070. 8002752: eec7 7a26 vdiv.f32 s15, s14, s13
  5071. 8002756: edc7 7a38 vstr s15, [r7, #224] @ 0xe0
  5072. pvT2AveTemp /= CIRC_BUFF_LEN;
  5073. 800275a: ed97 7a37 vldr s14, [r7, #220] @ 0xdc
  5074. 800275e: eef2 6a04 vmov.f32 s13, #36 @ 0x41200000 10.0
  5075. 8002762: eec7 7a26 vdiv.f32 s15, s14, s13
  5076. 8002766: edc7 7a37 vstr s15, [r7, #220] @ 0xdc
  5077. if (osMutexAcquire (sensorsInfoMutex, osWaitForever) == osOK) {
  5078. 800276a: 4b37 ldr r3, [pc, #220] @ (8002848 <ADC3MeasTask+0x370>)
  5079. 800276c: 681b ldr r3, [r3, #0]
  5080. 800276e: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  5081. 8002772: 4618 mov r0, r3
  5082. 8002774: f011 f959 bl 8013a2a <osMutexAcquire>
  5083. 8002778: 4603 mov r3, r0
  5084. 800277a: 2b00 cmp r3, #0
  5085. 800277c: d138 bne.n 80027f0 <ADC3MeasTask+0x318>
  5086. if (sensorsInfo.motorXStatus == 1) {
  5087. 800277e: 4b33 ldr r3, [pc, #204] @ (800284c <ADC3MeasTask+0x374>)
  5088. 8002780: 7d1b ldrb r3, [r3, #20]
  5089. 8002782: 2b01 cmp r3, #1
  5090. 8002784: d111 bne.n 80027aa <ADC3MeasTask+0x2d2>
  5091. sensorsInfo.motorXAveCurrent = motorXAveCurrent;
  5092. 8002786: 4a31 ldr r2, [pc, #196] @ (800284c <ADC3MeasTask+0x374>)
  5093. 8002788: f8d7 30e8 ldr.w r3, [r7, #232] @ 0xe8
  5094. 800278c: 6193 str r3, [r2, #24]
  5095. if (sensorsInfo.motorXPeakCurrent < motorXCurrentSense) {
  5096. 800278e: 4b2f ldr r3, [pc, #188] @ (800284c <ADC3MeasTask+0x374>)
  5097. 8002790: edd3 7a08 vldr s15, [r3, #32]
  5098. 8002794: ed97 7a34 vldr s14, [r7, #208] @ 0xd0
  5099. 8002798: eeb4 7ae7 vcmpe.f32 s14, s15
  5100. 800279c: eef1 fa10 vmrs APSR_nzcv, fpscr
  5101. 80027a0: dd03 ble.n 80027aa <ADC3MeasTask+0x2d2>
  5102. sensorsInfo.motorXPeakCurrent = motorXCurrentSense;
  5103. 80027a2: 4a2a ldr r2, [pc, #168] @ (800284c <ADC3MeasTask+0x374>)
  5104. 80027a4: f8d7 30d0 ldr.w r3, [r7, #208] @ 0xd0
  5105. 80027a8: 6213 str r3, [r2, #32]
  5106. }
  5107. }
  5108. if (sensorsInfo.motorYStatus == 1) {
  5109. 80027aa: 4b28 ldr r3, [pc, #160] @ (800284c <ADC3MeasTask+0x374>)
  5110. 80027ac: 7d5b ldrb r3, [r3, #21]
  5111. 80027ae: 2b01 cmp r3, #1
  5112. 80027b0: d111 bne.n 80027d6 <ADC3MeasTask+0x2fe>
  5113. sensorsInfo.motorYAveCurrent = motorYAveCurrent;
  5114. 80027b2: 4a26 ldr r2, [pc, #152] @ (800284c <ADC3MeasTask+0x374>)
  5115. 80027b4: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  5116. 80027b8: 61d3 str r3, [r2, #28]
  5117. if (sensorsInfo.motorYPeakCurrent < motorYCurrentSense) {
  5118. 80027ba: 4b24 ldr r3, [pc, #144] @ (800284c <ADC3MeasTask+0x374>)
  5119. 80027bc: edd3 7a09 vldr s15, [r3, #36] @ 0x24
  5120. 80027c0: ed97 7a33 vldr s14, [r7, #204] @ 0xcc
  5121. 80027c4: eeb4 7ae7 vcmpe.f32 s14, s15
  5122. 80027c8: eef1 fa10 vmrs APSR_nzcv, fpscr
  5123. 80027cc: dd03 ble.n 80027d6 <ADC3MeasTask+0x2fe>
  5124. sensorsInfo.motorYPeakCurrent = motorYCurrentSense;
  5125. 80027ce: 4a1f ldr r2, [pc, #124] @ (800284c <ADC3MeasTask+0x374>)
  5126. 80027d0: f8d7 30cc ldr.w r3, [r7, #204] @ 0xcc
  5127. 80027d4: 6253 str r3, [r2, #36] @ 0x24
  5128. }
  5129. }
  5130. sensorsInfo.pvTemperature[0] = pvT1AveTemp;
  5131. 80027d6: 4a1d ldr r2, [pc, #116] @ (800284c <ADC3MeasTask+0x374>)
  5132. 80027d8: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  5133. 80027dc: 6013 str r3, [r2, #0]
  5134. sensorsInfo.pvTemperature[1] = pvT2AveTemp;
  5135. 80027de: 4a1b ldr r2, [pc, #108] @ (800284c <ADC3MeasTask+0x374>)
  5136. 80027e0: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc
  5137. 80027e4: 6053 str r3, [r2, #4]
  5138. osMutexRelease (sensorsInfoMutex);
  5139. 80027e6: 4b18 ldr r3, [pc, #96] @ (8002848 <ADC3MeasTask+0x370>)
  5140. 80027e8: 681b ldr r3, [r3, #0]
  5141. 80027ea: 4618 mov r0, r3
  5142. 80027ec: f011 f968 bl 8013ac0 <osMutexRelease>
  5143. }
  5144. ++circBuffPos;
  5145. 80027f0: f8d7 30ec ldr.w r3, [r7, #236] @ 0xec
  5146. 80027f4: 3301 adds r3, #1
  5147. 80027f6: f8c7 30ec str.w r3, [r7, #236] @ 0xec
  5148. circBuffPos = circBuffPos % CIRC_BUFF_LEN;
  5149. 80027fa: f8d7 20ec ldr.w r2, [r7, #236] @ 0xec
  5150. 80027fe: 4b14 ldr r3, [pc, #80] @ (8002850 <ADC3MeasTask+0x378>)
  5151. 8002800: fba3 1302 umull r1, r3, r3, r2
  5152. 8002804: 08d9 lsrs r1, r3, #3
  5153. 8002806: 460b mov r3, r1
  5154. 8002808: 009b lsls r3, r3, #2
  5155. 800280a: 440b add r3, r1
  5156. 800280c: 005b lsls r3, r3, #1
  5157. 800280e: 1ad3 subs r3, r2, r3
  5158. 8002810: f8c7 30ec str.w r3, [r7, #236] @ 0xec
  5159. while (pdTRUE) {
  5160. 8002814: e68a b.n 800252c <ADC3MeasTask+0x54>
  5161. 8002816: bf00 nop
  5162. 8002818: 00000000 .word 0x00000000
  5163. 800281c: 40efffe0 .word 0x40efffe0
  5164. 8002820: 3ad18d26 .word 0x3ad18d26
  5165. 8002824: 4020aaaa .word 0x4020aaaa
  5166. 8002828: aaa38226 .word 0xaaa38226
  5167. 800282c: 4046aaaa .word 0x4046aaaa
  5168. 8002830: 00000000 .word 0x00000000
  5169. 8002834: 404f8000 .word 0x404f8000
  5170. 8002838: 24000784 .word 0x24000784
  5171. 800283c: 1ff1e860 .word 0x1ff1e860
  5172. 8002840: 24000788 .word 0x24000788
  5173. 8002844: 24000030 .word 0x24000030
  5174. 8002848: 24000790 .word 0x24000790
  5175. 800284c: 240007e0 .word 0x240007e0
  5176. 8002850: cccccccd .word 0xcccccccd
  5177. 08002854 <LimiterSwitchTask>:
  5178. }
  5179. }
  5180. void LimiterSwitchTask (void* arg) {
  5181. 8002854: b580 push {r7, lr}
  5182. 8002856: b08c sub sp, #48 @ 0x30
  5183. 8002858: af06 add r7, sp, #24
  5184. 800285a: 6078 str r0, [r7, #4]
  5185. uint8_t limitXSwitchDownPrevState = 0;
  5186. 800285c: 2300 movs r3, #0
  5187. 800285e: 75fb strb r3, [r7, #23]
  5188. uint8_t limitXSwitchCenterPrevState = 0;
  5189. 8002860: 2300 movs r3, #0
  5190. 8002862: 75bb strb r3, [r7, #22]
  5191. uint8_t limitXSwitchUpPrevState = 0;
  5192. 8002864: 2300 movs r3, #0
  5193. 8002866: 757b strb r3, [r7, #21]
  5194. uint8_t limitYSwitchDownPrevState = 0;
  5195. 8002868: 2300 movs r3, #0
  5196. 800286a: 753b strb r3, [r7, #20]
  5197. uint8_t limitYSwitchCenterPrevState = 0;
  5198. 800286c: 2300 movs r3, #0
  5199. 800286e: 74fb strb r3, [r7, #19]
  5200. uint8_t limitYSwitchUpPrevState = 0;
  5201. 8002870: 2300 movs r3, #0
  5202. 8002872: 74bb strb r3, [r7, #18]
  5203. uint8_t pinStates = 0;
  5204. 8002874: 2300 movs r3, #0
  5205. 8002876: 73fb strb r3, [r7, #15]
  5206. uint8_t limiterXTriggered = 0;
  5207. 8002878: 2300 movs r3, #0
  5208. 800287a: 747b strb r3, [r7, #17]
  5209. uint8_t limiterYTriggered = 0;
  5210. 800287c: 2300 movs r3, #0
  5211. 800287e: 743b strb r3, [r7, #16]
  5212. if (osMutexAcquire (sensorsInfoMutex, osWaitForever) == osOK) {
  5213. 8002880: 4bad ldr r3, [pc, #692] @ (8002b38 <LimiterSwitchTask+0x2e4>)
  5214. 8002882: 681b ldr r3, [r3, #0]
  5215. 8002884: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  5216. 8002888: 4618 mov r0, r3
  5217. 800288a: f011 f8ce bl 8013a2a <osMutexAcquire>
  5218. 800288e: 4603 mov r3, r0
  5219. 8002890: 2b00 cmp r3, #0
  5220. 8002892: d10c bne.n 80028ae <LimiterSwitchTask+0x5a>
  5221. sensorsInfo.positionXWeak = 1;
  5222. 8002894: 4ba9 ldr r3, [pc, #676] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5223. 8002896: 2201 movs r2, #1
  5224. 8002898: f883 2038 strb.w r2, [r3, #56] @ 0x38
  5225. sensorsInfo.positionYWeak = 1;
  5226. 800289c: 4ba7 ldr r3, [pc, #668] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5227. 800289e: 2201 movs r2, #1
  5228. 80028a0: f883 2039 strb.w r2, [r3, #57] @ 0x39
  5229. osMutexRelease (sensorsInfoMutex);
  5230. 80028a4: 4ba4 ldr r3, [pc, #656] @ (8002b38 <LimiterSwitchTask+0x2e4>)
  5231. 80028a6: 681b ldr r3, [r3, #0]
  5232. 80028a8: 4618 mov r0, r3
  5233. 80028aa: f011 f909 bl 8013ac0 <osMutexRelease>
  5234. }
  5235. while (pdTRUE) {
  5236. osDelay (pdMS_TO_TICKS (100));
  5237. 80028ae: 2064 movs r0, #100 @ 0x64
  5238. 80028b0: f010 ff23 bl 80136fa <osDelay>
  5239. if (osMutexAcquire (sensorsInfoMutex, osWaitForever) == osOK) {
  5240. 80028b4: 4ba0 ldr r3, [pc, #640] @ (8002b38 <LimiterSwitchTask+0x2e4>)
  5241. 80028b6: 681b ldr r3, [r3, #0]
  5242. 80028b8: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  5243. 80028bc: 4618 mov r0, r3
  5244. 80028be: f011 f8b4 bl 8013a2a <osMutexAcquire>
  5245. 80028c2: 4603 mov r3, r0
  5246. 80028c4: 2b00 cmp r3, #0
  5247. 80028c6: d1f2 bne.n 80028ae <LimiterSwitchTask+0x5a>
  5248. sensorsInfo.limitXSwitchDown = HAL_GPIO_ReadPin (GPIOD, GPIO_PIN_13);
  5249. 80028c8: f44f 5100 mov.w r1, #8192 @ 0x2000
  5250. 80028cc: 489c ldr r0, [pc, #624] @ (8002b40 <LimiterSwitchTask+0x2ec>)
  5251. 80028ce: f008 fcf7 bl 800b2c0 <HAL_GPIO_ReadPin>
  5252. 80028d2: 4603 mov r3, r0
  5253. 80028d4: 461a mov r2, r3
  5254. 80028d6: 4b99 ldr r3, [pc, #612] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5255. 80028d8: f883 2029 strb.w r2, [r3, #41] @ 0x29
  5256. pinStates = (limitXSwitchDownPrevState << 1) | sensorsInfo.limitXSwitchDown;
  5257. 80028dc: 7dfb ldrb r3, [r7, #23]
  5258. 80028de: 005b lsls r3, r3, #1
  5259. 80028e0: b25a sxtb r2, r3
  5260. 80028e2: 4b96 ldr r3, [pc, #600] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5261. 80028e4: f893 3029 ldrb.w r3, [r3, #41] @ 0x29
  5262. 80028e8: b25b sxtb r3, r3
  5263. 80028ea: 4313 orrs r3, r2
  5264. 80028ec: b25b sxtb r3, r3
  5265. 80028ee: 73fb strb r3, [r7, #15]
  5266. if ((pinStates & 0x3) == 0x1) {
  5267. 80028f0: 7bfb ldrb r3, [r7, #15]
  5268. 80028f2: f003 0303 and.w r3, r3, #3
  5269. 80028f6: 2b01 cmp r3, #1
  5270. 80028f8: d109 bne.n 800290e <LimiterSwitchTask+0xba>
  5271. limiterXTriggered = 1;
  5272. 80028fa: 2301 movs r3, #1
  5273. 80028fc: 747b strb r3, [r7, #17]
  5274. sensorsInfo.currentXPosition = 0;
  5275. 80028fe: 4b8f ldr r3, [pc, #572] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5276. 8002900: f04f 0200 mov.w r2, #0
  5277. 8002904: 631a str r2, [r3, #48] @ 0x30
  5278. sensorsInfo.positionXWeak = 0;
  5279. 8002906: 4b8d ldr r3, [pc, #564] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5280. 8002908: 2200 movs r2, #0
  5281. 800290a: f883 2038 strb.w r2, [r3, #56] @ 0x38
  5282. }
  5283. limitXSwitchDownPrevState = sensorsInfo.limitXSwitchDown;
  5284. 800290e: 4b8b ldr r3, [pc, #556] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5285. 8002910: f893 3029 ldrb.w r3, [r3, #41] @ 0x29
  5286. 8002914: 75fb strb r3, [r7, #23]
  5287. sensorsInfo.limitXSwitchUp = HAL_GPIO_ReadPin (GPIOD, GPIO_PIN_12);
  5288. 8002916: f44f 5180 mov.w r1, #4096 @ 0x1000
  5289. 800291a: 4889 ldr r0, [pc, #548] @ (8002b40 <LimiterSwitchTask+0x2ec>)
  5290. 800291c: f008 fcd0 bl 800b2c0 <HAL_GPIO_ReadPin>
  5291. 8002920: 4603 mov r3, r0
  5292. 8002922: 461a mov r2, r3
  5293. 8002924: 4b85 ldr r3, [pc, #532] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5294. 8002926: f883 2028 strb.w r2, [r3, #40] @ 0x28
  5295. pinStates = (limitXSwitchUpPrevState << 1) | sensorsInfo.limitXSwitchUp;
  5296. 800292a: 7d7b ldrb r3, [r7, #21]
  5297. 800292c: 005b lsls r3, r3, #1
  5298. 800292e: b25a sxtb r2, r3
  5299. 8002930: 4b82 ldr r3, [pc, #520] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5300. 8002932: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  5301. 8002936: b25b sxtb r3, r3
  5302. 8002938: 4313 orrs r3, r2
  5303. 800293a: b25b sxtb r3, r3
  5304. 800293c: 73fb strb r3, [r7, #15]
  5305. if ((pinStates & 0x3) == 0x1) {
  5306. 800293e: 7bfb ldrb r3, [r7, #15]
  5307. 8002940: f003 0303 and.w r3, r3, #3
  5308. 8002944: 2b01 cmp r3, #1
  5309. 8002946: d108 bne.n 800295a <LimiterSwitchTask+0x106>
  5310. limiterXTriggered = 1;
  5311. 8002948: 2301 movs r3, #1
  5312. 800294a: 747b strb r3, [r7, #17]
  5313. sensorsInfo.currentXPosition = 100;
  5314. 800294c: 4b7b ldr r3, [pc, #492] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5315. 800294e: 4a7d ldr r2, [pc, #500] @ (8002b44 <LimiterSwitchTask+0x2f0>)
  5316. 8002950: 631a str r2, [r3, #48] @ 0x30
  5317. sensorsInfo.positionXWeak = 0;
  5318. 8002952: 4b7a ldr r3, [pc, #488] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5319. 8002954: 2200 movs r2, #0
  5320. 8002956: f883 2038 strb.w r2, [r3, #56] @ 0x38
  5321. }
  5322. limitXSwitchUpPrevState = sensorsInfo.limitXSwitchUp;
  5323. 800295a: 4b78 ldr r3, [pc, #480] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5324. 800295c: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  5325. 8002960: 757b strb r3, [r7, #21]
  5326. sensorsInfo.limitXSwitchCenter = HAL_GPIO_ReadPin (GPIOD, GPIO_PIN_10);
  5327. 8002962: f44f 6180 mov.w r1, #1024 @ 0x400
  5328. 8002966: 4876 ldr r0, [pc, #472] @ (8002b40 <LimiterSwitchTask+0x2ec>)
  5329. 8002968: f008 fcaa bl 800b2c0 <HAL_GPIO_ReadPin>
  5330. 800296c: 4603 mov r3, r0
  5331. 800296e: 461a mov r2, r3
  5332. 8002970: 4b72 ldr r3, [pc, #456] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5333. 8002972: f883 202a strb.w r2, [r3, #42] @ 0x2a
  5334. pinStates = (limitXSwitchCenterPrevState << 1) | sensorsInfo.limitXSwitchCenter;
  5335. 8002976: 7dbb ldrb r3, [r7, #22]
  5336. 8002978: 005b lsls r3, r3, #1
  5337. 800297a: b25a sxtb r2, r3
  5338. 800297c: 4b6f ldr r3, [pc, #444] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5339. 800297e: f893 302a ldrb.w r3, [r3, #42] @ 0x2a
  5340. 8002982: b25b sxtb r3, r3
  5341. 8002984: 4313 orrs r3, r2
  5342. 8002986: b25b sxtb r3, r3
  5343. 8002988: 73fb strb r3, [r7, #15]
  5344. if ((pinStates & 0x3) == 0x1) {
  5345. 800298a: 7bfb ldrb r3, [r7, #15]
  5346. 800298c: f003 0303 and.w r3, r3, #3
  5347. 8002990: 2b01 cmp r3, #1
  5348. 8002992: d106 bne.n 80029a2 <LimiterSwitchTask+0x14e>
  5349. sensorsInfo.currentXPosition = AXE_X_MIDDLE_VALUE;
  5350. 8002994: 4b69 ldr r3, [pc, #420] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5351. 8002996: 4a6c ldr r2, [pc, #432] @ (8002b48 <LimiterSwitchTask+0x2f4>)
  5352. 8002998: 631a str r2, [r3, #48] @ 0x30
  5353. sensorsInfo.positionXWeak = 0;
  5354. 800299a: 4b68 ldr r3, [pc, #416] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5355. 800299c: 2200 movs r2, #0
  5356. 800299e: f883 2038 strb.w r2, [r3, #56] @ 0x38
  5357. }
  5358. limitXSwitchCenterPrevState = sensorsInfo.limitXSwitchCenter;
  5359. 80029a2: 4b66 ldr r3, [pc, #408] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5360. 80029a4: f893 302a ldrb.w r3, [r3, #42] @ 0x2a
  5361. 80029a8: 75bb strb r3, [r7, #22]
  5362. sensorsInfo.limitYSwitchDown = HAL_GPIO_ReadPin (GPIOD, GPIO_PIN_9);
  5363. 80029aa: f44f 7100 mov.w r1, #512 @ 0x200
  5364. 80029ae: 4864 ldr r0, [pc, #400] @ (8002b40 <LimiterSwitchTask+0x2ec>)
  5365. 80029b0: f008 fc86 bl 800b2c0 <HAL_GPIO_ReadPin>
  5366. 80029b4: 4603 mov r3, r0
  5367. 80029b6: 461a mov r2, r3
  5368. 80029b8: 4b60 ldr r3, [pc, #384] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5369. 80029ba: f883 202c strb.w r2, [r3, #44] @ 0x2c
  5370. pinStates = (limitYSwitchDownPrevState << 1) | sensorsInfo.limitYSwitchDown;
  5371. 80029be: 7d3b ldrb r3, [r7, #20]
  5372. 80029c0: 005b lsls r3, r3, #1
  5373. 80029c2: b25a sxtb r2, r3
  5374. 80029c4: 4b5d ldr r3, [pc, #372] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5375. 80029c6: f893 302c ldrb.w r3, [r3, #44] @ 0x2c
  5376. 80029ca: b25b sxtb r3, r3
  5377. 80029cc: 4313 orrs r3, r2
  5378. 80029ce: b25b sxtb r3, r3
  5379. 80029d0: 73fb strb r3, [r7, #15]
  5380. if ((pinStates & 0x3) == 0x1) {
  5381. 80029d2: 7bfb ldrb r3, [r7, #15]
  5382. 80029d4: f003 0303 and.w r3, r3, #3
  5383. 80029d8: 2b01 cmp r3, #1
  5384. 80029da: d109 bne.n 80029f0 <LimiterSwitchTask+0x19c>
  5385. limiterYTriggered = 1;
  5386. 80029dc: 2301 movs r3, #1
  5387. 80029de: 743b strb r3, [r7, #16]
  5388. sensorsInfo.currentYPosition = 0;
  5389. 80029e0: 4b56 ldr r3, [pc, #344] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5390. 80029e2: f04f 0200 mov.w r2, #0
  5391. 80029e6: 635a str r2, [r3, #52] @ 0x34
  5392. sensorsInfo.positionYWeak = 0;
  5393. 80029e8: 4b54 ldr r3, [pc, #336] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5394. 80029ea: 2200 movs r2, #0
  5395. 80029ec: f883 2039 strb.w r2, [r3, #57] @ 0x39
  5396. }
  5397. limitYSwitchDownPrevState = sensorsInfo.limitYSwitchDown;
  5398. 80029f0: 4b52 ldr r3, [pc, #328] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5399. 80029f2: f893 302c ldrb.w r3, [r3, #44] @ 0x2c
  5400. 80029f6: 753b strb r3, [r7, #20]
  5401. sensorsInfo.limitYSwitchUp = HAL_GPIO_ReadPin (GPIOD, GPIO_PIN_11);
  5402. 80029f8: f44f 6100 mov.w r1, #2048 @ 0x800
  5403. 80029fc: 4850 ldr r0, [pc, #320] @ (8002b40 <LimiterSwitchTask+0x2ec>)
  5404. 80029fe: f008 fc5f bl 800b2c0 <HAL_GPIO_ReadPin>
  5405. 8002a02: 4603 mov r3, r0
  5406. 8002a04: 461a mov r2, r3
  5407. 8002a06: 4b4d ldr r3, [pc, #308] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5408. 8002a08: f883 202b strb.w r2, [r3, #43] @ 0x2b
  5409. pinStates = (limitYSwitchUpPrevState << 1) | sensorsInfo.limitYSwitchUp;
  5410. 8002a0c: 7cbb ldrb r3, [r7, #18]
  5411. 8002a0e: 005b lsls r3, r3, #1
  5412. 8002a10: b25a sxtb r2, r3
  5413. 8002a12: 4b4a ldr r3, [pc, #296] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5414. 8002a14: f893 302b ldrb.w r3, [r3, #43] @ 0x2b
  5415. 8002a18: b25b sxtb r3, r3
  5416. 8002a1a: 4313 orrs r3, r2
  5417. 8002a1c: b25b sxtb r3, r3
  5418. 8002a1e: 73fb strb r3, [r7, #15]
  5419. if ((pinStates & 0x3) == 0x1) {
  5420. 8002a20: 7bfb ldrb r3, [r7, #15]
  5421. 8002a22: f003 0303 and.w r3, r3, #3
  5422. 8002a26: 2b01 cmp r3, #1
  5423. 8002a28: d108 bne.n 8002a3c <LimiterSwitchTask+0x1e8>
  5424. limiterYTriggered = 1;
  5425. 8002a2a: 2301 movs r3, #1
  5426. 8002a2c: 743b strb r3, [r7, #16]
  5427. sensorsInfo.currentYPosition = 100;
  5428. 8002a2e: 4b43 ldr r3, [pc, #268] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5429. 8002a30: 4a44 ldr r2, [pc, #272] @ (8002b44 <LimiterSwitchTask+0x2f0>)
  5430. 8002a32: 635a str r2, [r3, #52] @ 0x34
  5431. sensorsInfo.positionYWeak = 0;
  5432. 8002a34: 4b41 ldr r3, [pc, #260] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5433. 8002a36: 2200 movs r2, #0
  5434. 8002a38: f883 2039 strb.w r2, [r3, #57] @ 0x39
  5435. }
  5436. limitYSwitchUpPrevState = sensorsInfo.limitYSwitchUp;
  5437. 8002a3c: 4b3f ldr r3, [pc, #252] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5438. 8002a3e: f893 302b ldrb.w r3, [r3, #43] @ 0x2b
  5439. 8002a42: 74bb strb r3, [r7, #18]
  5440. sensorsInfo.limitYSwitchCenter = HAL_GPIO_ReadPin (GPIOD, GPIO_PIN_8);
  5441. 8002a44: f44f 7180 mov.w r1, #256 @ 0x100
  5442. 8002a48: 483d ldr r0, [pc, #244] @ (8002b40 <LimiterSwitchTask+0x2ec>)
  5443. 8002a4a: f008 fc39 bl 800b2c0 <HAL_GPIO_ReadPin>
  5444. 8002a4e: 4603 mov r3, r0
  5445. 8002a50: 461a mov r2, r3
  5446. 8002a52: 4b3a ldr r3, [pc, #232] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5447. 8002a54: f883 202d strb.w r2, [r3, #45] @ 0x2d
  5448. pinStates = (limitYSwitchCenterPrevState << 1) | sensorsInfo.limitYSwitchCenter;
  5449. 8002a58: 7cfb ldrb r3, [r7, #19]
  5450. 8002a5a: 005b lsls r3, r3, #1
  5451. 8002a5c: b25a sxtb r2, r3
  5452. 8002a5e: 4b37 ldr r3, [pc, #220] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5453. 8002a60: f893 302d ldrb.w r3, [r3, #45] @ 0x2d
  5454. 8002a64: b25b sxtb r3, r3
  5455. 8002a66: 4313 orrs r3, r2
  5456. 8002a68: b25b sxtb r3, r3
  5457. 8002a6a: 73fb strb r3, [r7, #15]
  5458. if ((pinStates & 0x3) == 0x1) {
  5459. 8002a6c: 7bfb ldrb r3, [r7, #15]
  5460. 8002a6e: f003 0303 and.w r3, r3, #3
  5461. 8002a72: 2b01 cmp r3, #1
  5462. 8002a74: d106 bne.n 8002a84 <LimiterSwitchTask+0x230>
  5463. sensorsInfo.currentYPosition = AXE_Y_MIDDLE_VALUE;
  5464. 8002a76: 4b31 ldr r3, [pc, #196] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5465. 8002a78: 4a33 ldr r2, [pc, #204] @ (8002b48 <LimiterSwitchTask+0x2f4>)
  5466. 8002a7a: 635a str r2, [r3, #52] @ 0x34
  5467. sensorsInfo.positionYWeak = 0;
  5468. 8002a7c: 4b2f ldr r3, [pc, #188] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5469. 8002a7e: 2200 movs r2, #0
  5470. 8002a80: f883 2039 strb.w r2, [r3, #57] @ 0x39
  5471. }
  5472. limitYSwitchCenterPrevState = sensorsInfo.limitYSwitchCenter;
  5473. 8002a84: 4b2d ldr r3, [pc, #180] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5474. 8002a86: f893 302d ldrb.w r3, [r3, #45] @ 0x2d
  5475. 8002a8a: 74fb strb r3, [r7, #19]
  5476. if (((sensorsInfo.limitXSwitchDown == 1) || (sensorsInfo.limitXSwitchUp == 1)) && (limiterXTriggered == 1)) {
  5477. 8002a8c: 4b2b ldr r3, [pc, #172] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5478. 8002a8e: f893 3029 ldrb.w r3, [r3, #41] @ 0x29
  5479. 8002a92: 2b01 cmp r3, #1
  5480. 8002a94: d004 beq.n 8002aa0 <LimiterSwitchTask+0x24c>
  5481. 8002a96: 4b29 ldr r3, [pc, #164] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5482. 8002a98: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  5483. 8002a9c: 2b01 cmp r3, #1
  5484. 8002a9e: d11b bne.n 8002ad8 <LimiterSwitchTask+0x284>
  5485. 8002aa0: 7c7b ldrb r3, [r7, #17]
  5486. 8002aa2: 2b01 cmp r3, #1
  5487. 8002aa4: d118 bne.n 8002ad8 <LimiterSwitchTask+0x284>
  5488. sensorsInfo.motorXStatus = MotorControl (&htim3, &motorXYTimerConfigOC, TIM_CHANNEL_1, TIM_CHANNEL_2, motorXTimerHandle, 0, 0, sensorsInfo.limitXSwitchUp, sensorsInfo.limitXSwitchDown);
  5489. 8002aa6: 4b29 ldr r3, [pc, #164] @ (8002b4c <LimiterSwitchTask+0x2f8>)
  5490. 8002aa8: 681b ldr r3, [r3, #0]
  5491. 8002aaa: 4a24 ldr r2, [pc, #144] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5492. 8002aac: f892 2028 ldrb.w r2, [r2, #40] @ 0x28
  5493. 8002ab0: 4922 ldr r1, [pc, #136] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5494. 8002ab2: f891 1029 ldrb.w r1, [r1, #41] @ 0x29
  5495. 8002ab6: 9104 str r1, [sp, #16]
  5496. 8002ab8: 9203 str r2, [sp, #12]
  5497. 8002aba: 2200 movs r2, #0
  5498. 8002abc: 9202 str r2, [sp, #8]
  5499. 8002abe: 2200 movs r2, #0
  5500. 8002ac0: 9201 str r2, [sp, #4]
  5501. 8002ac2: 9300 str r3, [sp, #0]
  5502. 8002ac4: 2304 movs r3, #4
  5503. 8002ac6: 2200 movs r2, #0
  5504. 8002ac8: 4921 ldr r1, [pc, #132] @ (8002b50 <LimiterSwitchTask+0x2fc>)
  5505. 8002aca: 4822 ldr r0, [pc, #136] @ (8002b54 <LimiterSwitchTask+0x300>)
  5506. 8002acc: f000 f9b4 bl 8002e38 <MotorControl>
  5507. 8002ad0: 4603 mov r3, r0
  5508. 8002ad2: 461a mov r2, r3
  5509. 8002ad4: 4b19 ldr r3, [pc, #100] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5510. 8002ad6: 751a strb r2, [r3, #20]
  5511. }
  5512. if (((sensorsInfo.limitYSwitchDown == 1) || (sensorsInfo.limitYSwitchUp == 1)) && (limiterYTriggered == 1)) {
  5513. 8002ad8: 4b18 ldr r3, [pc, #96] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5514. 8002ada: f893 302c ldrb.w r3, [r3, #44] @ 0x2c
  5515. 8002ade: 2b01 cmp r3, #1
  5516. 8002ae0: d004 beq.n 8002aec <LimiterSwitchTask+0x298>
  5517. 8002ae2: 4b16 ldr r3, [pc, #88] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5518. 8002ae4: f893 302b ldrb.w r3, [r3, #43] @ 0x2b
  5519. 8002ae8: 2b01 cmp r3, #1
  5520. 8002aea: d11b bne.n 8002b24 <LimiterSwitchTask+0x2d0>
  5521. 8002aec: 7c3b ldrb r3, [r7, #16]
  5522. 8002aee: 2b01 cmp r3, #1
  5523. 8002af0: d118 bne.n 8002b24 <LimiterSwitchTask+0x2d0>
  5524. sensorsInfo.motorYStatus = MotorControl (&htim3, &motorXYTimerConfigOC, TIM_CHANNEL_3, TIM_CHANNEL_4, motorYTimerHandle, 0, 0, sensorsInfo.limitYSwitchUp, sensorsInfo.limitYSwitchDown);
  5525. 8002af2: 4b19 ldr r3, [pc, #100] @ (8002b58 <LimiterSwitchTask+0x304>)
  5526. 8002af4: 681b ldr r3, [r3, #0]
  5527. 8002af6: 4a11 ldr r2, [pc, #68] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5528. 8002af8: f892 202b ldrb.w r2, [r2, #43] @ 0x2b
  5529. 8002afc: 490f ldr r1, [pc, #60] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5530. 8002afe: f891 102c ldrb.w r1, [r1, #44] @ 0x2c
  5531. 8002b02: 9104 str r1, [sp, #16]
  5532. 8002b04: 9203 str r2, [sp, #12]
  5533. 8002b06: 2200 movs r2, #0
  5534. 8002b08: 9202 str r2, [sp, #8]
  5535. 8002b0a: 2200 movs r2, #0
  5536. 8002b0c: 9201 str r2, [sp, #4]
  5537. 8002b0e: 9300 str r3, [sp, #0]
  5538. 8002b10: 230c movs r3, #12
  5539. 8002b12: 2208 movs r2, #8
  5540. 8002b14: 490e ldr r1, [pc, #56] @ (8002b50 <LimiterSwitchTask+0x2fc>)
  5541. 8002b16: 480f ldr r0, [pc, #60] @ (8002b54 <LimiterSwitchTask+0x300>)
  5542. 8002b18: f000 f98e bl 8002e38 <MotorControl>
  5543. 8002b1c: 4603 mov r3, r0
  5544. 8002b1e: 461a mov r2, r3
  5545. 8002b20: 4b06 ldr r3, [pc, #24] @ (8002b3c <LimiterSwitchTask+0x2e8>)
  5546. 8002b22: 755a strb r2, [r3, #21]
  5547. }
  5548. limiterXTriggered = 0;
  5549. 8002b24: 2300 movs r3, #0
  5550. 8002b26: 747b strb r3, [r7, #17]
  5551. limiterYTriggered = 0;
  5552. 8002b28: 2300 movs r3, #0
  5553. 8002b2a: 743b strb r3, [r7, #16]
  5554. osMutexRelease (sensorsInfoMutex);
  5555. 8002b2c: 4b02 ldr r3, [pc, #8] @ (8002b38 <LimiterSwitchTask+0x2e4>)
  5556. 8002b2e: 681b ldr r3, [r3, #0]
  5557. 8002b30: 4618 mov r0, r3
  5558. 8002b32: f010 ffc5 bl 8013ac0 <osMutexRelease>
  5559. osDelay (pdMS_TO_TICKS (100));
  5560. 8002b36: e6ba b.n 80028ae <LimiterSwitchTask+0x5a>
  5561. 8002b38: 24000790 .word 0x24000790
  5562. 8002b3c: 240007e0 .word 0x240007e0
  5563. 8002b40: 58020c00 .word 0x58020c00
  5564. 8002b44: 42c80000 .word 0x42c80000
  5565. 8002b48: 42480000 .word 0x42480000
  5566. 8002b4c: 240006bc .word 0x240006bc
  5567. 8002b50: 24000738 .word 0x24000738
  5568. 8002b54: 24000498 .word 0x24000498
  5569. 8002b58: 240006ec .word 0x240006ec
  5570. 8002b5c: 00000000 .word 0x00000000
  5571. 08002b60 <EncoderTask>:
  5572. }
  5573. }
  5574. }
  5575. void EncoderTask (void* arg) {
  5576. 8002b60: b590 push {r4, r7, lr}
  5577. 8002b62: b08b sub sp, #44 @ 0x2c
  5578. 8002b64: af00 add r7, sp, #0
  5579. 8002b66: 6078 str r0, [r7, #4]
  5580. // 01 11 10 00
  5581. const uint32_t encoderStates[4] = { 0x00, 0x01, 0x03, 0x02 };
  5582. 8002b68: 4b67 ldr r3, [pc, #412] @ (8002d08 <EncoderTask+0x1a8>)
  5583. 8002b6a: f107 040c add.w r4, r7, #12
  5584. 8002b6e: cb0f ldmia r3, {r0, r1, r2, r3}
  5585. 8002b70: e884 000f stmia.w r4, {r0, r1, r2, r3}
  5586. uint8_t step = 0;
  5587. 8002b74: 2300 movs r3, #0
  5588. 8002b76: f887 3027 strb.w r3, [r7, #39] @ 0x27
  5589. EncoderTaskArg* encoderTaskArg = (EncoderTaskArg*)arg;
  5590. 8002b7a: 687b ldr r3, [r7, #4]
  5591. 8002b7c: 61fb str r3, [r7, #28]
  5592. uint32_t pinStates = encoderTaskArg->initPinStates;
  5593. 8002b7e: 69fb ldr r3, [r7, #28]
  5594. 8002b80: 68db ldr r3, [r3, #12]
  5595. 8002b82: 60bb str r3, [r7, #8]
  5596. for (uint8_t i = 0; i < 4; i++) {
  5597. 8002b84: 2300 movs r3, #0
  5598. 8002b86: f887 3026 strb.w r3, [r7, #38] @ 0x26
  5599. 8002b8a: e014 b.n 8002bb6 <EncoderTask+0x56>
  5600. if (pinStates == encoderStates[i]) {
  5601. 8002b8c: f897 3026 ldrb.w r3, [r7, #38] @ 0x26
  5602. 8002b90: 009b lsls r3, r3, #2
  5603. 8002b92: 3328 adds r3, #40 @ 0x28
  5604. 8002b94: 443b add r3, r7
  5605. 8002b96: f853 2c1c ldr.w r2, [r3, #-28]
  5606. 8002b9a: 68bb ldr r3, [r7, #8]
  5607. 8002b9c: 429a cmp r2, r3
  5608. 8002b9e: d105 bne.n 8002bac <EncoderTask+0x4c>
  5609. step = i;
  5610. 8002ba0: f897 3026 ldrb.w r3, [r7, #38] @ 0x26
  5611. 8002ba4: f887 3027 strb.w r3, [r7, #39] @ 0x27
  5612. break;
  5613. 8002ba8: bf00 nop
  5614. 8002baa: e008 b.n 8002bbe <EncoderTask+0x5e>
  5615. for (uint8_t i = 0; i < 4; i++) {
  5616. 8002bac: f897 3026 ldrb.w r3, [r7, #38] @ 0x26
  5617. 8002bb0: 3301 adds r3, #1
  5618. 8002bb2: f887 3026 strb.w r3, [r7, #38] @ 0x26
  5619. 8002bb6: f897 3026 ldrb.w r3, [r7, #38] @ 0x26
  5620. 8002bba: 2b03 cmp r3, #3
  5621. 8002bbc: d9e6 bls.n 8002b8c <EncoderTask+0x2c>
  5622. }
  5623. }
  5624. while (pdTRUE) {
  5625. float encoderValue = *encoderTaskArg->pvEncoder;
  5626. 8002bbe: 69fb ldr r3, [r7, #28]
  5627. 8002bc0: 689b ldr r3, [r3, #8]
  5628. 8002bc2: 681b ldr r3, [r3, #0]
  5629. 8002bc4: 623b str r3, [r7, #32]
  5630. osMessageQueueGet (encoderTaskArg->dataQueue, &pinStates, 0, osWaitForever);
  5631. 8002bc6: 69fb ldr r3, [r7, #28]
  5632. 8002bc8: 6918 ldr r0, [r3, #16]
  5633. 8002bca: f107 0108 add.w r1, r7, #8
  5634. 8002bce: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  5635. 8002bd2: 2200 movs r2, #0
  5636. 8002bd4: f011 f884 bl 8013ce0 <osMessageQueueGet>
  5637. if (osMutexAcquire (sensorsInfoMutex, osWaitForever) == osOK) {
  5638. 8002bd8: 4b4c ldr r3, [pc, #304] @ (8002d0c <EncoderTask+0x1ac>)
  5639. 8002bda: 681b ldr r3, [r3, #0]
  5640. 8002bdc: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  5641. 8002be0: 4618 mov r0, r3
  5642. 8002be2: f010 ff22 bl 8013a2a <osMutexAcquire>
  5643. 8002be6: 4603 mov r3, r0
  5644. 8002be8: 2b00 cmp r3, #0
  5645. 8002bea: f040 8081 bne.w 8002cf0 <EncoderTask+0x190>
  5646. if (encoderStates[(step + 1) % 4] == pinStates) {
  5647. 8002bee: f897 3027 ldrb.w r3, [r7, #39] @ 0x27
  5648. 8002bf2: 3301 adds r3, #1
  5649. 8002bf4: 425a negs r2, r3
  5650. 8002bf6: f003 0303 and.w r3, r3, #3
  5651. 8002bfa: f002 0203 and.w r2, r2, #3
  5652. 8002bfe: bf58 it pl
  5653. 8002c00: 4253 negpl r3, r2
  5654. 8002c02: 009b lsls r3, r3, #2
  5655. 8002c04: 3328 adds r3, #40 @ 0x28
  5656. 8002c06: 443b add r3, r7
  5657. 8002c08: f853 2c1c ldr.w r2, [r3, #-28]
  5658. 8002c0c: 68bb ldr r3, [r7, #8]
  5659. 8002c0e: 429a cmp r2, r3
  5660. 8002c10: d111 bne.n 8002c36 <EncoderTask+0xd6>
  5661. step++;
  5662. 8002c12: f897 3027 ldrb.w r3, [r7, #39] @ 0x27
  5663. 8002c16: 3301 adds r3, #1
  5664. 8002c18: f887 3027 strb.w r3, [r7, #39] @ 0x27
  5665. encoderValue += 360.0 / ENCODER_X_IMP_PER_TURN;
  5666. 8002c1c: edd7 7a08 vldr s15, [r7, #32]
  5667. 8002c20: eeb7 7ae7 vcvt.f64.f32 d7, s15
  5668. 8002c24: ed9f 6b36 vldr d6, [pc, #216] @ 8002d00 <EncoderTask+0x1a0>
  5669. 8002c28: ee37 7b06 vadd.f64 d7, d7, d6
  5670. 8002c2c: eef7 7bc7 vcvt.f32.f64 s15, d7
  5671. 8002c30: edc7 7a08 vstr s15, [r7, #32]
  5672. 8002c34: e035 b.n 8002ca2 <EncoderTask+0x142>
  5673. // printf ("Forward\n");
  5674. } else if (encoderStates[(step - 1) % 4] == pinStates) {
  5675. 8002c36: f897 3027 ldrb.w r3, [r7, #39] @ 0x27
  5676. 8002c3a: 3b01 subs r3, #1
  5677. 8002c3c: 425a negs r2, r3
  5678. 8002c3e: f003 0303 and.w r3, r3, #3
  5679. 8002c42: f002 0203 and.w r2, r2, #3
  5680. 8002c46: bf58 it pl
  5681. 8002c48: 4253 negpl r3, r2
  5682. 8002c4a: 009b lsls r3, r3, #2
  5683. 8002c4c: 3328 adds r3, #40 @ 0x28
  5684. 8002c4e: 443b add r3, r7
  5685. 8002c50: f853 2c1c ldr.w r2, [r3, #-28]
  5686. 8002c54: 68bb ldr r3, [r7, #8]
  5687. 8002c56: 429a cmp r2, r3
  5688. 8002c58: d120 bne.n 8002c9c <EncoderTask+0x13c>
  5689. encoderValue -= 360.0 / ENCODER_X_IMP_PER_TURN;
  5690. 8002c5a: edd7 7a08 vldr s15, [r7, #32]
  5691. 8002c5e: eeb7 7ae7 vcvt.f64.f32 d7, s15
  5692. 8002c62: ed9f 6b27 vldr d6, [pc, #156] @ 8002d00 <EncoderTask+0x1a0>
  5693. 8002c66: ee37 7b46 vsub.f64 d7, d7, d6
  5694. 8002c6a: eef7 7bc7 vcvt.f32.f64 s15, d7
  5695. 8002c6e: edc7 7a08 vstr s15, [r7, #32]
  5696. if (encoderValue < 0) {
  5697. 8002c72: edd7 7a08 vldr s15, [r7, #32]
  5698. 8002c76: eef5 7ac0 vcmpe.f32 s15, #0.0
  5699. 8002c7a: eef1 fa10 vmrs APSR_nzcv, fpscr
  5700. 8002c7e: d507 bpl.n 8002c90 <EncoderTask+0x130>
  5701. encoderValue = 360.0 + encoderValue;
  5702. 8002c80: edd7 7a08 vldr s15, [r7, #32]
  5703. 8002c84: ed9f 7a22 vldr s14, [pc, #136] @ 8002d10 <EncoderTask+0x1b0>
  5704. 8002c88: ee77 7a87 vadd.f32 s15, s15, s14
  5705. 8002c8c: edc7 7a08 vstr s15, [r7, #32]
  5706. }
  5707. // printf ("Reverse\n");
  5708. step--;
  5709. 8002c90: f897 3027 ldrb.w r3, [r7, #39] @ 0x27
  5710. 8002c94: 3b01 subs r3, #1
  5711. 8002c96: f887 3027 strb.w r3, [r7, #39] @ 0x27
  5712. 8002c9a: e002 b.n 8002ca2 <EncoderTask+0x142>
  5713. } else {
  5714. printf ("Forbidden\n");
  5715. 8002c9c: 481d ldr r0, [pc, #116] @ (8002d14 <EncoderTask+0x1b4>)
  5716. 8002c9e: f014 ff15 bl 8017acc <puts>
  5717. }
  5718. step = step % 4;
  5719. 8002ca2: f897 3027 ldrb.w r3, [r7, #39] @ 0x27
  5720. 8002ca6: f003 0303 and.w r3, r3, #3
  5721. 8002caa: f887 3027 strb.w r3, [r7, #39] @ 0x27
  5722. *encoderTaskArg->pvEncoder = fmodf (encoderValue, 360.0);
  5723. 8002cae: 69fb ldr r3, [r7, #28]
  5724. 8002cb0: 689c ldr r4, [r3, #8]
  5725. 8002cb2: eddf 0a17 vldr s1, [pc, #92] @ 8002d10 <EncoderTask+0x1b0>
  5726. 8002cb6: ed97 0a08 vldr s0, [r7, #32]
  5727. 8002cba: f015 fdcf bl 801885c <fmodf>
  5728. 8002cbe: eef0 7a40 vmov.f32 s15, s0
  5729. 8002cc2: edc4 7a00 vstr s15, [r4]
  5730. *encoderTaskArg->currentPosition = 100 * (*encoderTaskArg->pvEncoder) / MAX_X_AXE_ANGLE;
  5731. 8002cc6: 69fb ldr r3, [r7, #28]
  5732. 8002cc8: 689b ldr r3, [r3, #8]
  5733. 8002cca: edd3 7a00 vldr s15, [r3]
  5734. 8002cce: ed9f 7a12 vldr s14, [pc, #72] @ 8002d18 <EncoderTask+0x1b8>
  5735. 8002cd2: ee27 7a87 vmul.f32 s14, s15, s14
  5736. 8002cd6: 69fb ldr r3, [r7, #28]
  5737. 8002cd8: 685b ldr r3, [r3, #4]
  5738. 8002cda: eddf 6a0d vldr s13, [pc, #52] @ 8002d10 <EncoderTask+0x1b0>
  5739. 8002cde: eec7 7a26 vdiv.f32 s15, s14, s13
  5740. 8002ce2: edc3 7a00 vstr s15, [r3]
  5741. osMutexRelease (sensorsInfoMutex);
  5742. 8002ce6: 4b09 ldr r3, [pc, #36] @ (8002d0c <EncoderTask+0x1ac>)
  5743. 8002ce8: 681b ldr r3, [r3, #0]
  5744. 8002cea: 4618 mov r0, r3
  5745. 8002cec: f010 fee8 bl 8013ac0 <osMutexRelease>
  5746. }
  5747. DbgLEDToggle (encoderTaskArg->dbgLed);
  5748. 8002cf0: 69fb ldr r3, [r7, #28]
  5749. 8002cf2: 881b ldrh r3, [r3, #0]
  5750. 8002cf4: b2db uxtb r3, r3
  5751. 8002cf6: 4618 mov r0, r3
  5752. 8002cf8: f000 f834 bl 8002d64 <DbgLEDToggle>
  5753. while (pdTRUE) {
  5754. 8002cfc: e75f b.n 8002bbe <EncoderTask+0x5e>
  5755. 8002cfe: bf00 nop
  5756. 8002d00: cccccccd .word 0xcccccccd
  5757. 8002d04: 3fdccccc .word 0x3fdccccc
  5758. 8002d08: 08018a04 .word 0x08018a04
  5759. 8002d0c: 24000790 .word 0x24000790
  5760. 8002d10: 43b40000 .word 0x43b40000
  5761. 8002d14: 080189f8 .word 0x080189f8
  5762. 8002d18: 42c80000 .word 0x42c80000
  5763. 08002d1c <DbgLEDOn>:
  5764. #include <stdlib.h>
  5765. #include "peripherial.h"
  5766. void DbgLEDOn (uint8_t ledNumber) {
  5767. 8002d1c: b580 push {r7, lr}
  5768. 8002d1e: b082 sub sp, #8
  5769. 8002d20: af00 add r7, sp, #0
  5770. 8002d22: 4603 mov r3, r0
  5771. 8002d24: 71fb strb r3, [r7, #7]
  5772. HAL_GPIO_WritePin (GPIOD, ledNumber, GPIO_PIN_SET);
  5773. 8002d26: 79fb ldrb r3, [r7, #7]
  5774. 8002d28: b29b uxth r3, r3
  5775. 8002d2a: 2201 movs r2, #1
  5776. 8002d2c: 4619 mov r1, r3
  5777. 8002d2e: 4803 ldr r0, [pc, #12] @ (8002d3c <DbgLEDOn+0x20>)
  5778. 8002d30: f008 fade bl 800b2f0 <HAL_GPIO_WritePin>
  5779. }
  5780. 8002d34: bf00 nop
  5781. 8002d36: 3708 adds r7, #8
  5782. 8002d38: 46bd mov sp, r7
  5783. 8002d3a: bd80 pop {r7, pc}
  5784. 8002d3c: 58020c00 .word 0x58020c00
  5785. 08002d40 <DbgLEDOff>:
  5786. void DbgLEDOff (uint8_t ledNumber) {
  5787. 8002d40: b580 push {r7, lr}
  5788. 8002d42: b082 sub sp, #8
  5789. 8002d44: af00 add r7, sp, #0
  5790. 8002d46: 4603 mov r3, r0
  5791. 8002d48: 71fb strb r3, [r7, #7]
  5792. HAL_GPIO_WritePin (GPIOD, ledNumber, GPIO_PIN_RESET);
  5793. 8002d4a: 79fb ldrb r3, [r7, #7]
  5794. 8002d4c: b29b uxth r3, r3
  5795. 8002d4e: 2200 movs r2, #0
  5796. 8002d50: 4619 mov r1, r3
  5797. 8002d52: 4803 ldr r0, [pc, #12] @ (8002d60 <DbgLEDOff+0x20>)
  5798. 8002d54: f008 facc bl 800b2f0 <HAL_GPIO_WritePin>
  5799. }
  5800. 8002d58: bf00 nop
  5801. 8002d5a: 3708 adds r7, #8
  5802. 8002d5c: 46bd mov sp, r7
  5803. 8002d5e: bd80 pop {r7, pc}
  5804. 8002d60: 58020c00 .word 0x58020c00
  5805. 08002d64 <DbgLEDToggle>:
  5806. void DbgLEDToggle (uint8_t ledNumber) {
  5807. 8002d64: b580 push {r7, lr}
  5808. 8002d66: b082 sub sp, #8
  5809. 8002d68: af00 add r7, sp, #0
  5810. 8002d6a: 4603 mov r3, r0
  5811. 8002d6c: 71fb strb r3, [r7, #7]
  5812. HAL_GPIO_TogglePin (GPIOD, ledNumber);
  5813. 8002d6e: 79fb ldrb r3, [r7, #7]
  5814. 8002d70: b29b uxth r3, r3
  5815. 8002d72: 4619 mov r1, r3
  5816. 8002d74: 4803 ldr r0, [pc, #12] @ (8002d84 <DbgLEDToggle+0x20>)
  5817. 8002d76: f008 fad4 bl 800b322 <HAL_GPIO_TogglePin>
  5818. }
  5819. 8002d7a: bf00 nop
  5820. 8002d7c: 3708 adds r7, #8
  5821. 8002d7e: 46bd mov sp, r7
  5822. 8002d80: bd80 pop {r7, pc}
  5823. 8002d82: bf00 nop
  5824. 8002d84: 58020c00 .word 0x58020c00
  5825. 08002d88 <EnableCurrentSensors>:
  5826. void EnableCurrentSensors (void) {
  5827. 8002d88: b580 push {r7, lr}
  5828. 8002d8a: af00 add r7, sp, #0
  5829. HAL_GPIO_WritePin (GPIOE, MCU_CS_PWR_EN, GPIO_PIN_SET);
  5830. 8002d8c: 2201 movs r2, #1
  5831. 8002d8e: f44f 4100 mov.w r1, #32768 @ 0x8000
  5832. 8002d92: 4802 ldr r0, [pc, #8] @ (8002d9c <EnableCurrentSensors+0x14>)
  5833. 8002d94: f008 faac bl 800b2f0 <HAL_GPIO_WritePin>
  5834. }
  5835. 8002d98: bf00 nop
  5836. 8002d9a: bd80 pop {r7, pc}
  5837. 8002d9c: 58021000 .word 0x58021000
  5838. 08002da0 <SelectCurrentSensorGain>:
  5839. void DisableCurrentSensors (void) {
  5840. HAL_GPIO_WritePin (GPIOE, MCU_CS_PWR_EN, GPIO_PIN_RESET);
  5841. }
  5842. void SelectCurrentSensorGain (CurrentSensor sensor, CurrentSensorGain gain) {
  5843. 8002da0: b580 push {r7, lr}
  5844. 8002da2: b084 sub sp, #16
  5845. 8002da4: af00 add r7, sp, #0
  5846. 8002da6: 4603 mov r3, r0
  5847. 8002da8: 460a mov r2, r1
  5848. 8002daa: 71fb strb r3, [r7, #7]
  5849. 8002dac: 4613 mov r3, r2
  5850. 8002dae: 71bb strb r3, [r7, #6]
  5851. uint8_t gpioOffset = 0;
  5852. 8002db0: 2300 movs r3, #0
  5853. 8002db2: 73fb strb r3, [r7, #15]
  5854. switch (sensor) {
  5855. 8002db4: 79fb ldrb r3, [r7, #7]
  5856. 8002db6: 2b02 cmp r3, #2
  5857. 8002db8: d00c beq.n 8002dd4 <SelectCurrentSensorGain+0x34>
  5858. 8002dba: 2b02 cmp r3, #2
  5859. 8002dbc: dc0d bgt.n 8002dda <SelectCurrentSensorGain+0x3a>
  5860. 8002dbe: 2b00 cmp r3, #0
  5861. 8002dc0: d002 beq.n 8002dc8 <SelectCurrentSensorGain+0x28>
  5862. 8002dc2: 2b01 cmp r3, #1
  5863. 8002dc4: d003 beq.n 8002dce <SelectCurrentSensorGain+0x2e>
  5864. case CurrentSensorL1: gpioOffset = CURRENT_SENSOR_L1_GPIO_OFFSET; break;
  5865. case CurrentSensorL2: gpioOffset = CURRENT_SENSOR_L2_GPIO_OFFSET; break;
  5866. case CurrentSensorL3: gpioOffset = CURRENT_SENSOR_L3_GPIO_OFFSET; break;
  5867. default: break;
  5868. 8002dc6: e008 b.n 8002dda <SelectCurrentSensorGain+0x3a>
  5869. case CurrentSensorL1: gpioOffset = CURRENT_SENSOR_L1_GPIO_OFFSET; break;
  5870. 8002dc8: 2307 movs r3, #7
  5871. 8002dca: 73fb strb r3, [r7, #15]
  5872. 8002dcc: e006 b.n 8002ddc <SelectCurrentSensorGain+0x3c>
  5873. case CurrentSensorL2: gpioOffset = CURRENT_SENSOR_L2_GPIO_OFFSET; break;
  5874. 8002dce: 2309 movs r3, #9
  5875. 8002dd0: 73fb strb r3, [r7, #15]
  5876. 8002dd2: e003 b.n 8002ddc <SelectCurrentSensorGain+0x3c>
  5877. case CurrentSensorL3: gpioOffset = CURRENT_SENSOR_L3_GPIO_OFFSET; break;
  5878. 8002dd4: 230d movs r3, #13
  5879. 8002dd6: 73fb strb r3, [r7, #15]
  5880. 8002dd8: e000 b.n 8002ddc <SelectCurrentSensorGain+0x3c>
  5881. default: break;
  5882. 8002dda: bf00 nop
  5883. }
  5884. if (gpioOffset > 0) {
  5885. 8002ddc: 7bfb ldrb r3, [r7, #15]
  5886. 8002dde: 2b00 cmp r3, #0
  5887. 8002de0: d023 beq.n 8002e2a <SelectCurrentSensorGain+0x8a>
  5888. uint16_t gain0Gpio = 1 << gpioOffset;
  5889. 8002de2: 7bfb ldrb r3, [r7, #15]
  5890. 8002de4: 2201 movs r2, #1
  5891. 8002de6: fa02 f303 lsl.w r3, r2, r3
  5892. 8002dea: 81bb strh r3, [r7, #12]
  5893. uint16_t gain1Gpio = 1 << (gpioOffset + 1);
  5894. 8002dec: 7bfb ldrb r3, [r7, #15]
  5895. 8002dee: 3301 adds r3, #1
  5896. 8002df0: 2201 movs r2, #1
  5897. 8002df2: fa02 f303 lsl.w r3, r2, r3
  5898. 8002df6: 817b strh r3, [r7, #10]
  5899. uint16_t gpioState = ((uint16_t)gain) & 0x0001;
  5900. 8002df8: 79bb ldrb r3, [r7, #6]
  5901. 8002dfa: b29b uxth r3, r3
  5902. 8002dfc: f003 0301 and.w r3, r3, #1
  5903. 8002e00: 813b strh r3, [r7, #8]
  5904. HAL_GPIO_WritePin (GPIOE, gain0Gpio, gpioState);
  5905. 8002e02: 893b ldrh r3, [r7, #8]
  5906. 8002e04: b2da uxtb r2, r3
  5907. 8002e06: 89bb ldrh r3, [r7, #12]
  5908. 8002e08: 4619 mov r1, r3
  5909. 8002e0a: 480a ldr r0, [pc, #40] @ (8002e34 <SelectCurrentSensorGain+0x94>)
  5910. 8002e0c: f008 fa70 bl 800b2f0 <HAL_GPIO_WritePin>
  5911. gpioState = (((uint16_t)gain) >> 1) & 0x0001;
  5912. 8002e10: 79bb ldrb r3, [r7, #6]
  5913. 8002e12: 085b lsrs r3, r3, #1
  5914. 8002e14: b2db uxtb r3, r3
  5915. 8002e16: f003 0301 and.w r3, r3, #1
  5916. 8002e1a: 813b strh r3, [r7, #8]
  5917. HAL_GPIO_WritePin (GPIOE, gain1Gpio, gpioState);
  5918. 8002e1c: 893b ldrh r3, [r7, #8]
  5919. 8002e1e: b2da uxtb r2, r3
  5920. 8002e20: 897b ldrh r3, [r7, #10]
  5921. 8002e22: 4619 mov r1, r3
  5922. 8002e24: 4803 ldr r0, [pc, #12] @ (8002e34 <SelectCurrentSensorGain+0x94>)
  5923. 8002e26: f008 fa63 bl 800b2f0 <HAL_GPIO_WritePin>
  5924. }
  5925. }
  5926. 8002e2a: bf00 nop
  5927. 8002e2c: 3710 adds r7, #16
  5928. 8002e2e: 46bd mov sp, r7
  5929. 8002e30: bd80 pop {r7, pc}
  5930. 8002e32: bf00 nop
  5931. 8002e34: 58021000 .word 0x58021000
  5932. 08002e38 <MotorControl>:
  5933. uint8_t
  5934. 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) {
  5935. 8002e38: b580 push {r7, lr}
  5936. 8002e3a: b088 sub sp, #32
  5937. 8002e3c: af02 add r7, sp, #8
  5938. 8002e3e: 60f8 str r0, [r7, #12]
  5939. 8002e40: 60b9 str r1, [r7, #8]
  5940. 8002e42: 4611 mov r1, r2
  5941. 8002e44: 461a mov r2, r3
  5942. 8002e46: 460b mov r3, r1
  5943. 8002e48: 71fb strb r3, [r7, #7]
  5944. 8002e4a: 4613 mov r3, r2
  5945. 8002e4c: 71bb strb r3, [r7, #6]
  5946. uint32_t motorStatus = 0;
  5947. 8002e4e: 2300 movs r3, #0
  5948. 8002e50: 617b str r3, [r7, #20]
  5949. MotorDriverState setMotorState = HiZ;
  5950. 8002e52: 2300 movs r3, #0
  5951. 8002e54: 74fb strb r3, [r7, #19]
  5952. HAL_TIM_PWM_Stop (htim, channel1);
  5953. 8002e56: 79fb ldrb r3, [r7, #7]
  5954. 8002e58: 4619 mov r1, r3
  5955. 8002e5a: 68f8 ldr r0, [r7, #12]
  5956. 8002e5c: f00c fbf2 bl 800f644 <HAL_TIM_PWM_Stop>
  5957. HAL_TIM_PWM_Stop (htim, channel2);
  5958. 8002e60: 79bb ldrb r3, [r7, #6]
  5959. 8002e62: 4619 mov r1, r3
  5960. 8002e64: 68f8 ldr r0, [r7, #12]
  5961. 8002e66: f00c fbed bl 800f644 <HAL_TIM_PWM_Stop>
  5962. if (motorTimerPeriod > 0) {
  5963. 8002e6a: 6abb ldr r3, [r7, #40] @ 0x28
  5964. 8002e6c: 2b00 cmp r3, #0
  5965. 8002e6e: f340 808c ble.w 8002f8a <MotorControl+0x152>
  5966. if (motorPWMPulse > 0) {
  5967. 8002e72: 6a7b ldr r3, [r7, #36] @ 0x24
  5968. 8002e74: 2b00 cmp r3, #0
  5969. 8002e76: dd2c ble.n 8002ed2 <MotorControl+0x9a>
  5970. // Forward
  5971. if (switchLimiterUpStat == 0) {
  5972. 8002e78: f897 302c ldrb.w r3, [r7, #44] @ 0x2c
  5973. 8002e7c: 2b00 cmp r3, #0
  5974. 8002e7e: d11d bne.n 8002ebc <MotorControl+0x84>
  5975. setMotorState = Forward;
  5976. 8002e80: 2301 movs r3, #1
  5977. 8002e82: 74fb strb r3, [r7, #19]
  5978. MotorAction (htim, motorTimerConfigOC, channel1, channel2, setMotorState, abs (motorPWMPulse) * 10);
  5979. 8002e84: 79f9 ldrb r1, [r7, #7]
  5980. 8002e86: 79b8 ldrb r0, [r7, #6]
  5981. 8002e88: 6a7b ldr r3, [r7, #36] @ 0x24
  5982. 8002e8a: ea83 72e3 eor.w r2, r3, r3, asr #31
  5983. 8002e8e: eba2 72e3 sub.w r2, r2, r3, asr #31
  5984. 8002e92: 4613 mov r3, r2
  5985. 8002e94: 009b lsls r3, r3, #2
  5986. 8002e96: 4413 add r3, r2
  5987. 8002e98: 005b lsls r3, r3, #1
  5988. 8002e9a: 9301 str r3, [sp, #4]
  5989. 8002e9c: 7cfb ldrb r3, [r7, #19]
  5990. 8002e9e: 9300 str r3, [sp, #0]
  5991. 8002ea0: 4603 mov r3, r0
  5992. 8002ea2: 460a mov r2, r1
  5993. 8002ea4: 68b9 ldr r1, [r7, #8]
  5994. 8002ea6: 68f8 ldr r0, [r7, #12]
  5995. 8002ea8: f000 f8ff bl 80030aa <MotorAction>
  5996. HAL_TIM_PWM_Start (htim, channel1);
  5997. 8002eac: 79fb ldrb r3, [r7, #7]
  5998. 8002eae: 4619 mov r1, r3
  5999. 8002eb0: 68f8 ldr r0, [r7, #12]
  6000. 8002eb2: f00c fab9 bl 800f428 <HAL_TIM_PWM_Start>
  6001. motorStatus = 1;
  6002. 8002eb6: 2301 movs r3, #1
  6003. 8002eb8: 617b str r3, [r7, #20]
  6004. 8002eba: e004 b.n 8002ec6 <MotorControl+0x8e>
  6005. } else {
  6006. HAL_TIM_PWM_Stop (htim, channel1);
  6007. 8002ebc: 79fb ldrb r3, [r7, #7]
  6008. 8002ebe: 4619 mov r1, r3
  6009. 8002ec0: 68f8 ldr r0, [r7, #12]
  6010. 8002ec2: f00c fbbf bl 800f644 <HAL_TIM_PWM_Stop>
  6011. }
  6012. HAL_TIM_PWM_Stop (htim, channel2);
  6013. 8002ec6: 79bb ldrb r3, [r7, #6]
  6014. 8002ec8: 4619 mov r1, r3
  6015. 8002eca: 68f8 ldr r0, [r7, #12]
  6016. 8002ecc: f00c fbba bl 800f644 <HAL_TIM_PWM_Stop>
  6017. 8002ed0: e051 b.n 8002f76 <MotorControl+0x13e>
  6018. } else if (motorPWMPulse < 0) {
  6019. 8002ed2: 6a7b ldr r3, [r7, #36] @ 0x24
  6020. 8002ed4: 2b00 cmp r3, #0
  6021. 8002ed6: da2c bge.n 8002f32 <MotorControl+0xfa>
  6022. // Reverse
  6023. if (switchLimiterDownStat == 0) {
  6024. 8002ed8: f897 3030 ldrb.w r3, [r7, #48] @ 0x30
  6025. 8002edc: 2b00 cmp r3, #0
  6026. 8002ede: d11d bne.n 8002f1c <MotorControl+0xe4>
  6027. setMotorState = Reverse;
  6028. 8002ee0: 2302 movs r3, #2
  6029. 8002ee2: 74fb strb r3, [r7, #19]
  6030. MotorAction (htim, motorTimerConfigOC, channel1, channel2, setMotorState, abs (motorPWMPulse) * 10);
  6031. 8002ee4: 79f9 ldrb r1, [r7, #7]
  6032. 8002ee6: 79b8 ldrb r0, [r7, #6]
  6033. 8002ee8: 6a7b ldr r3, [r7, #36] @ 0x24
  6034. 8002eea: ea83 72e3 eor.w r2, r3, r3, asr #31
  6035. 8002eee: eba2 72e3 sub.w r2, r2, r3, asr #31
  6036. 8002ef2: 4613 mov r3, r2
  6037. 8002ef4: 009b lsls r3, r3, #2
  6038. 8002ef6: 4413 add r3, r2
  6039. 8002ef8: 005b lsls r3, r3, #1
  6040. 8002efa: 9301 str r3, [sp, #4]
  6041. 8002efc: 7cfb ldrb r3, [r7, #19]
  6042. 8002efe: 9300 str r3, [sp, #0]
  6043. 8002f00: 4603 mov r3, r0
  6044. 8002f02: 460a mov r2, r1
  6045. 8002f04: 68b9 ldr r1, [r7, #8]
  6046. 8002f06: 68f8 ldr r0, [r7, #12]
  6047. 8002f08: f000 f8cf bl 80030aa <MotorAction>
  6048. HAL_TIM_PWM_Start (htim, channel2);
  6049. 8002f0c: 79bb ldrb r3, [r7, #6]
  6050. 8002f0e: 4619 mov r1, r3
  6051. 8002f10: 68f8 ldr r0, [r7, #12]
  6052. 8002f12: f00c fa89 bl 800f428 <HAL_TIM_PWM_Start>
  6053. motorStatus = 1;
  6054. 8002f16: 2301 movs r3, #1
  6055. 8002f18: 617b str r3, [r7, #20]
  6056. 8002f1a: e004 b.n 8002f26 <MotorControl+0xee>
  6057. } else {
  6058. HAL_TIM_PWM_Stop (htim, channel2);
  6059. 8002f1c: 79bb ldrb r3, [r7, #6]
  6060. 8002f1e: 4619 mov r1, r3
  6061. 8002f20: 68f8 ldr r0, [r7, #12]
  6062. 8002f22: f00c fb8f bl 800f644 <HAL_TIM_PWM_Stop>
  6063. }
  6064. HAL_TIM_PWM_Stop (htim, channel1);
  6065. 8002f26: 79fb ldrb r3, [r7, #7]
  6066. 8002f28: 4619 mov r1, r3
  6067. 8002f2a: 68f8 ldr r0, [r7, #12]
  6068. 8002f2c: f00c fb8a bl 800f644 <HAL_TIM_PWM_Stop>
  6069. 8002f30: e021 b.n 8002f76 <MotorControl+0x13e>
  6070. } else {
  6071. // Brake
  6072. setMotorState = Brake;
  6073. 8002f32: 2303 movs r3, #3
  6074. 8002f34: 74fb strb r3, [r7, #19]
  6075. MotorAction (htim, motorTimerConfigOC, channel1, channel2, setMotorState, abs (motorPWMPulse) * 10);
  6076. 8002f36: 79f9 ldrb r1, [r7, #7]
  6077. 8002f38: 79b8 ldrb r0, [r7, #6]
  6078. 8002f3a: 6a7b ldr r3, [r7, #36] @ 0x24
  6079. 8002f3c: ea83 72e3 eor.w r2, r3, r3, asr #31
  6080. 8002f40: eba2 72e3 sub.w r2, r2, r3, asr #31
  6081. 8002f44: 4613 mov r3, r2
  6082. 8002f46: 009b lsls r3, r3, #2
  6083. 8002f48: 4413 add r3, r2
  6084. 8002f4a: 005b lsls r3, r3, #1
  6085. 8002f4c: 9301 str r3, [sp, #4]
  6086. 8002f4e: 7cfb ldrb r3, [r7, #19]
  6087. 8002f50: 9300 str r3, [sp, #0]
  6088. 8002f52: 4603 mov r3, r0
  6089. 8002f54: 460a mov r2, r1
  6090. 8002f56: 68b9 ldr r1, [r7, #8]
  6091. 8002f58: 68f8 ldr r0, [r7, #12]
  6092. 8002f5a: f000 f8a6 bl 80030aa <MotorAction>
  6093. HAL_TIM_PWM_Start (htim, channel1);
  6094. 8002f5e: 79fb ldrb r3, [r7, #7]
  6095. 8002f60: 4619 mov r1, r3
  6096. 8002f62: 68f8 ldr r0, [r7, #12]
  6097. 8002f64: f00c fa60 bl 800f428 <HAL_TIM_PWM_Start>
  6098. HAL_TIM_PWM_Start (htim, channel2);
  6099. 8002f68: 79bb ldrb r3, [r7, #6]
  6100. 8002f6a: 4619 mov r1, r3
  6101. 8002f6c: 68f8 ldr r0, [r7, #12]
  6102. 8002f6e: f00c fa5b bl 800f428 <HAL_TIM_PWM_Start>
  6103. motorStatus = 0;
  6104. 8002f72: 2300 movs r3, #0
  6105. 8002f74: 617b str r3, [r7, #20]
  6106. }
  6107. osTimerStart (motorTimerHandle, motorTimerPeriod * 1000);
  6108. 8002f76: 6abb ldr r3, [r7, #40] @ 0x28
  6109. 8002f78: f44f 727a mov.w r2, #1000 @ 0x3e8
  6110. 8002f7c: fb02 f303 mul.w r3, r2, r3
  6111. 8002f80: 4619 mov r1, r3
  6112. 8002f82: 6a38 ldr r0, [r7, #32]
  6113. 8002f84: f010 fc66 bl 8013854 <osTimerStart>
  6114. 8002f88: e089 b.n 800309e <MotorControl+0x266>
  6115. } else if ((motorTimerPeriod == 0) && (motorPWMPulse == 0)) {
  6116. 8002f8a: 6abb ldr r3, [r7, #40] @ 0x28
  6117. 8002f8c: 2b00 cmp r3, #0
  6118. 8002f8e: d126 bne.n 8002fde <MotorControl+0x1a6>
  6119. 8002f90: 6a7b ldr r3, [r7, #36] @ 0x24
  6120. 8002f92: 2b00 cmp r3, #0
  6121. 8002f94: d123 bne.n 8002fde <MotorControl+0x1a6>
  6122. MotorAction (htim, motorTimerConfigOC, channel1, channel2, HiZ, abs (motorPWMPulse) * 10);
  6123. 8002f96: 79f9 ldrb r1, [r7, #7]
  6124. 8002f98: 79b8 ldrb r0, [r7, #6]
  6125. 8002f9a: 6a7b ldr r3, [r7, #36] @ 0x24
  6126. 8002f9c: ea83 72e3 eor.w r2, r3, r3, asr #31
  6127. 8002fa0: eba2 72e3 sub.w r2, r2, r3, asr #31
  6128. 8002fa4: 4613 mov r3, r2
  6129. 8002fa6: 009b lsls r3, r3, #2
  6130. 8002fa8: 4413 add r3, r2
  6131. 8002faa: 005b lsls r3, r3, #1
  6132. 8002fac: 9301 str r3, [sp, #4]
  6133. 8002fae: 2300 movs r3, #0
  6134. 8002fb0: 9300 str r3, [sp, #0]
  6135. 8002fb2: 4603 mov r3, r0
  6136. 8002fb4: 460a mov r2, r1
  6137. 8002fb6: 68b9 ldr r1, [r7, #8]
  6138. 8002fb8: 68f8 ldr r0, [r7, #12]
  6139. 8002fba: f000 f876 bl 80030aa <MotorAction>
  6140. HAL_TIM_PWM_Stop (htim, channel1);
  6141. 8002fbe: 79fb ldrb r3, [r7, #7]
  6142. 8002fc0: 4619 mov r1, r3
  6143. 8002fc2: 68f8 ldr r0, [r7, #12]
  6144. 8002fc4: f00c fb3e bl 800f644 <HAL_TIM_PWM_Stop>
  6145. HAL_TIM_PWM_Stop (htim, channel2);
  6146. 8002fc8: 79bb ldrb r3, [r7, #6]
  6147. 8002fca: 4619 mov r1, r3
  6148. 8002fcc: 68f8 ldr r0, [r7, #12]
  6149. 8002fce: f00c fb39 bl 800f644 <HAL_TIM_PWM_Stop>
  6150. osTimerStop (motorTimerHandle);
  6151. 8002fd2: 6a38 ldr r0, [r7, #32]
  6152. 8002fd4: f010 fc6c bl 80138b0 <osTimerStop>
  6153. motorStatus = 0;
  6154. 8002fd8: 2300 movs r3, #0
  6155. 8002fda: 617b str r3, [r7, #20]
  6156. 8002fdc: e05f b.n 800309e <MotorControl+0x266>
  6157. } else if (motorTimerPeriod == -1) {
  6158. 8002fde: 6abb ldr r3, [r7, #40] @ 0x28
  6159. 8002fe0: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  6160. 8002fe4: d15b bne.n 800309e <MotorControl+0x266>
  6161. if (motorPWMPulse > 0) {
  6162. 8002fe6: 6a7b ldr r3, [r7, #36] @ 0x24
  6163. 8002fe8: 2b00 cmp r3, #0
  6164. 8002fea: dd2c ble.n 8003046 <MotorControl+0x20e>
  6165. // Forward
  6166. if (switchLimiterUpStat == 0) {
  6167. 8002fec: f897 302c ldrb.w r3, [r7, #44] @ 0x2c
  6168. 8002ff0: 2b00 cmp r3, #0
  6169. 8002ff2: d11d bne.n 8003030 <MotorControl+0x1f8>
  6170. setMotorState = Forward;
  6171. 8002ff4: 2301 movs r3, #1
  6172. 8002ff6: 74fb strb r3, [r7, #19]
  6173. MotorAction (htim, motorTimerConfigOC, channel1, channel2, setMotorState, abs (motorPWMPulse) * 10);
  6174. 8002ff8: 79f9 ldrb r1, [r7, #7]
  6175. 8002ffa: 79b8 ldrb r0, [r7, #6]
  6176. 8002ffc: 6a7b ldr r3, [r7, #36] @ 0x24
  6177. 8002ffe: ea83 72e3 eor.w r2, r3, r3, asr #31
  6178. 8003002: eba2 72e3 sub.w r2, r2, r3, asr #31
  6179. 8003006: 4613 mov r3, r2
  6180. 8003008: 009b lsls r3, r3, #2
  6181. 800300a: 4413 add r3, r2
  6182. 800300c: 005b lsls r3, r3, #1
  6183. 800300e: 9301 str r3, [sp, #4]
  6184. 8003010: 7cfb ldrb r3, [r7, #19]
  6185. 8003012: 9300 str r3, [sp, #0]
  6186. 8003014: 4603 mov r3, r0
  6187. 8003016: 460a mov r2, r1
  6188. 8003018: 68b9 ldr r1, [r7, #8]
  6189. 800301a: 68f8 ldr r0, [r7, #12]
  6190. 800301c: f000 f845 bl 80030aa <MotorAction>
  6191. HAL_TIM_PWM_Start (htim, channel1);
  6192. 8003020: 79fb ldrb r3, [r7, #7]
  6193. 8003022: 4619 mov r1, r3
  6194. 8003024: 68f8 ldr r0, [r7, #12]
  6195. 8003026: f00c f9ff bl 800f428 <HAL_TIM_PWM_Start>
  6196. motorStatus = 1;
  6197. 800302a: 2301 movs r3, #1
  6198. 800302c: 617b str r3, [r7, #20]
  6199. 800302e: e004 b.n 800303a <MotorControl+0x202>
  6200. } else {
  6201. HAL_TIM_PWM_Stop (htim, channel1);
  6202. 8003030: 79fb ldrb r3, [r7, #7]
  6203. 8003032: 4619 mov r1, r3
  6204. 8003034: 68f8 ldr r0, [r7, #12]
  6205. 8003036: f00c fb05 bl 800f644 <HAL_TIM_PWM_Stop>
  6206. }
  6207. HAL_TIM_PWM_Stop (htim, channel2);
  6208. 800303a: 79bb ldrb r3, [r7, #6]
  6209. 800303c: 4619 mov r1, r3
  6210. 800303e: 68f8 ldr r0, [r7, #12]
  6211. 8003040: f00c fb00 bl 800f644 <HAL_TIM_PWM_Stop>
  6212. 8003044: e02b b.n 800309e <MotorControl+0x266>
  6213. } else {
  6214. // Reverse
  6215. if (switchLimiterDownStat == 0) {
  6216. 8003046: f897 3030 ldrb.w r3, [r7, #48] @ 0x30
  6217. 800304a: 2b00 cmp r3, #0
  6218. 800304c: d11d bne.n 800308a <MotorControl+0x252>
  6219. setMotorState = Reverse;
  6220. 800304e: 2302 movs r3, #2
  6221. 8003050: 74fb strb r3, [r7, #19]
  6222. MotorAction (htim, motorTimerConfigOC, channel1, channel2, setMotorState, abs (motorPWMPulse) * 10);
  6223. 8003052: 79f9 ldrb r1, [r7, #7]
  6224. 8003054: 79b8 ldrb r0, [r7, #6]
  6225. 8003056: 6a7b ldr r3, [r7, #36] @ 0x24
  6226. 8003058: ea83 72e3 eor.w r2, r3, r3, asr #31
  6227. 800305c: eba2 72e3 sub.w r2, r2, r3, asr #31
  6228. 8003060: 4613 mov r3, r2
  6229. 8003062: 009b lsls r3, r3, #2
  6230. 8003064: 4413 add r3, r2
  6231. 8003066: 005b lsls r3, r3, #1
  6232. 8003068: 9301 str r3, [sp, #4]
  6233. 800306a: 7cfb ldrb r3, [r7, #19]
  6234. 800306c: 9300 str r3, [sp, #0]
  6235. 800306e: 4603 mov r3, r0
  6236. 8003070: 460a mov r2, r1
  6237. 8003072: 68b9 ldr r1, [r7, #8]
  6238. 8003074: 68f8 ldr r0, [r7, #12]
  6239. 8003076: f000 f818 bl 80030aa <MotorAction>
  6240. HAL_TIM_PWM_Start (htim, channel2);
  6241. 800307a: 79bb ldrb r3, [r7, #6]
  6242. 800307c: 4619 mov r1, r3
  6243. 800307e: 68f8 ldr r0, [r7, #12]
  6244. 8003080: f00c f9d2 bl 800f428 <HAL_TIM_PWM_Start>
  6245. motorStatus = 1;
  6246. 8003084: 2301 movs r3, #1
  6247. 8003086: 617b str r3, [r7, #20]
  6248. 8003088: e004 b.n 8003094 <MotorControl+0x25c>
  6249. } else {
  6250. HAL_TIM_PWM_Stop (htim, channel2);
  6251. 800308a: 79bb ldrb r3, [r7, #6]
  6252. 800308c: 4619 mov r1, r3
  6253. 800308e: 68f8 ldr r0, [r7, #12]
  6254. 8003090: f00c fad8 bl 800f644 <HAL_TIM_PWM_Stop>
  6255. }
  6256. HAL_TIM_PWM_Stop (htim, channel1);
  6257. 8003094: 79fb ldrb r3, [r7, #7]
  6258. 8003096: 4619 mov r1, r3
  6259. 8003098: 68f8 ldr r0, [r7, #12]
  6260. 800309a: f00c fad3 bl 800f644 <HAL_TIM_PWM_Stop>
  6261. }
  6262. }
  6263. return motorStatus;
  6264. 800309e: 697b ldr r3, [r7, #20]
  6265. 80030a0: b2db uxtb r3, r3
  6266. }
  6267. 80030a2: 4618 mov r0, r3
  6268. 80030a4: 3718 adds r7, #24
  6269. 80030a6: 46bd mov sp, r7
  6270. 80030a8: bd80 pop {r7, pc}
  6271. 080030aa <MotorAction>:
  6272. void MotorAction (TIM_HandleTypeDef* tim, TIM_OC_InitTypeDef* timerConf, uint32_t channel1, uint32_t channel2, MotorDriverState setState, uint32_t pulse) {
  6273. 80030aa: b580 push {r7, lr}
  6274. 80030ac: b084 sub sp, #16
  6275. 80030ae: af00 add r7, sp, #0
  6276. 80030b0: 60f8 str r0, [r7, #12]
  6277. 80030b2: 60b9 str r1, [r7, #8]
  6278. 80030b4: 607a str r2, [r7, #4]
  6279. 80030b6: 603b str r3, [r7, #0]
  6280. timerConf->Pulse = pulse;
  6281. 80030b8: 68bb ldr r3, [r7, #8]
  6282. 80030ba: 69fa ldr r2, [r7, #28]
  6283. 80030bc: 605a str r2, [r3, #4]
  6284. switch (setState) {
  6285. 80030be: 7e3b ldrb r3, [r7, #24]
  6286. 80030c0: 2b02 cmp r3, #2
  6287. 80030c2: dc02 bgt.n 80030ca <MotorAction+0x20>
  6288. 80030c4: 2b00 cmp r3, #0
  6289. 80030c6: da03 bge.n 80030d0 <MotorAction+0x26>
  6290. 80030c8: e038 b.n 800313c <MotorAction+0x92>
  6291. 80030ca: 2b03 cmp r3, #3
  6292. 80030cc: d01b beq.n 8003106 <MotorAction+0x5c>
  6293. 80030ce: e035 b.n 800313c <MotorAction+0x92>
  6294. case Forward:
  6295. case Reverse:
  6296. case HiZ:
  6297. timerConf->OCPolarity = TIM_OCPOLARITY_HIGH;
  6298. 80030d0: 68bb ldr r3, [r7, #8]
  6299. 80030d2: 2200 movs r2, #0
  6300. 80030d4: 609a str r2, [r3, #8]
  6301. if (HAL_TIM_PWM_ConfigChannel (tim, timerConf, channel1) != HAL_OK) {
  6302. 80030d6: 687a ldr r2, [r7, #4]
  6303. 80030d8: 68b9 ldr r1, [r7, #8]
  6304. 80030da: 68f8 ldr r0, [r7, #12]
  6305. 80030dc: f00c fc50 bl 800f980 <HAL_TIM_PWM_ConfigChannel>
  6306. 80030e0: 4603 mov r3, r0
  6307. 80030e2: 2b00 cmp r3, #0
  6308. 80030e4: d001 beq.n 80030ea <MotorAction+0x40>
  6309. Error_Handler ();
  6310. 80030e6: f7fe fd71 bl 8001bcc <Error_Handler>
  6311. }
  6312. timerConf->OCPolarity = TIM_OCPOLARITY_HIGH;
  6313. 80030ea: 68bb ldr r3, [r7, #8]
  6314. 80030ec: 2200 movs r2, #0
  6315. 80030ee: 609a str r2, [r3, #8]
  6316. if (HAL_TIM_PWM_ConfigChannel (tim, timerConf, channel2) != HAL_OK) {
  6317. 80030f0: 683a ldr r2, [r7, #0]
  6318. 80030f2: 68b9 ldr r1, [r7, #8]
  6319. 80030f4: 68f8 ldr r0, [r7, #12]
  6320. 80030f6: f00c fc43 bl 800f980 <HAL_TIM_PWM_ConfigChannel>
  6321. 80030fa: 4603 mov r3, r0
  6322. 80030fc: 2b00 cmp r3, #0
  6323. 80030fe: d038 beq.n 8003172 <MotorAction+0xc8>
  6324. Error_Handler ();
  6325. 8003100: f7fe fd64 bl 8001bcc <Error_Handler>
  6326. }
  6327. break;
  6328. 8003104: e035 b.n 8003172 <MotorAction+0xc8>
  6329. case Brake:
  6330. timerConf->OCPolarity = TIM_OCPOLARITY_LOW;
  6331. 8003106: 68bb ldr r3, [r7, #8]
  6332. 8003108: 2202 movs r2, #2
  6333. 800310a: 609a str r2, [r3, #8]
  6334. if (HAL_TIM_PWM_ConfigChannel (tim, timerConf, channel1) != HAL_OK) {
  6335. 800310c: 687a ldr r2, [r7, #4]
  6336. 800310e: 68b9 ldr r1, [r7, #8]
  6337. 8003110: 68f8 ldr r0, [r7, #12]
  6338. 8003112: f00c fc35 bl 800f980 <HAL_TIM_PWM_ConfigChannel>
  6339. 8003116: 4603 mov r3, r0
  6340. 8003118: 2b00 cmp r3, #0
  6341. 800311a: d001 beq.n 8003120 <MotorAction+0x76>
  6342. Error_Handler ();
  6343. 800311c: f7fe fd56 bl 8001bcc <Error_Handler>
  6344. }
  6345. timerConf->OCPolarity = TIM_OCPOLARITY_LOW;
  6346. 8003120: 68bb ldr r3, [r7, #8]
  6347. 8003122: 2202 movs r2, #2
  6348. 8003124: 609a str r2, [r3, #8]
  6349. if (HAL_TIM_PWM_ConfigChannel (tim, timerConf, channel2) != HAL_OK) {
  6350. 8003126: 683a ldr r2, [r7, #0]
  6351. 8003128: 68b9 ldr r1, [r7, #8]
  6352. 800312a: 68f8 ldr r0, [r7, #12]
  6353. 800312c: f00c fc28 bl 800f980 <HAL_TIM_PWM_ConfigChannel>
  6354. 8003130: 4603 mov r3, r0
  6355. 8003132: 2b00 cmp r3, #0
  6356. 8003134: d01f beq.n 8003176 <MotorAction+0xcc>
  6357. Error_Handler ();
  6358. 8003136: f7fe fd49 bl 8001bcc <Error_Handler>
  6359. }
  6360. break;
  6361. 800313a: e01c b.n 8003176 <MotorAction+0xcc>
  6362. default:
  6363. timerConf->OCPolarity = TIM_OCPOLARITY_HIGH;
  6364. 800313c: 68bb ldr r3, [r7, #8]
  6365. 800313e: 2200 movs r2, #0
  6366. 8003140: 609a str r2, [r3, #8]
  6367. if (HAL_TIM_PWM_ConfigChannel (tim, timerConf, channel1) != HAL_OK) {
  6368. 8003142: 687a ldr r2, [r7, #4]
  6369. 8003144: 68b9 ldr r1, [r7, #8]
  6370. 8003146: 68f8 ldr r0, [r7, #12]
  6371. 8003148: f00c fc1a bl 800f980 <HAL_TIM_PWM_ConfigChannel>
  6372. 800314c: 4603 mov r3, r0
  6373. 800314e: 2b00 cmp r3, #0
  6374. 8003150: d001 beq.n 8003156 <MotorAction+0xac>
  6375. Error_Handler ();
  6376. 8003152: f7fe fd3b bl 8001bcc <Error_Handler>
  6377. }
  6378. timerConf->OCPolarity = TIM_OCPOLARITY_HIGH;
  6379. 8003156: 68bb ldr r3, [r7, #8]
  6380. 8003158: 2200 movs r2, #0
  6381. 800315a: 609a str r2, [r3, #8]
  6382. if (HAL_TIM_PWM_ConfigChannel (tim, timerConf, channel2) != HAL_OK) {
  6383. 800315c: 683a ldr r2, [r7, #0]
  6384. 800315e: 68b9 ldr r1, [r7, #8]
  6385. 8003160: 68f8 ldr r0, [r7, #12]
  6386. 8003162: f00c fc0d bl 800f980 <HAL_TIM_PWM_ConfigChannel>
  6387. 8003166: 4603 mov r3, r0
  6388. 8003168: 2b00 cmp r3, #0
  6389. 800316a: d006 beq.n 800317a <MotorAction+0xd0>
  6390. Error_Handler ();
  6391. 800316c: f7fe fd2e bl 8001bcc <Error_Handler>
  6392. }
  6393. break;
  6394. 8003170: e003 b.n 800317a <MotorAction+0xd0>
  6395. break;
  6396. 8003172: bf00 nop
  6397. 8003174: e002 b.n 800317c <MotorAction+0xd2>
  6398. break;
  6399. 8003176: bf00 nop
  6400. 8003178: e000 b.n 800317c <MotorAction+0xd2>
  6401. break;
  6402. 800317a: bf00 nop
  6403. }
  6404. }
  6405. 800317c: bf00 nop
  6406. 800317e: 3710 adds r7, #16
  6407. 8003180: 46bd mov sp, r7
  6408. 8003182: bd80 pop {r7, pc}
  6409. 08003184 <PositionControlTaskInit>:
  6410. extern osTimerId_t motorXTimerHandle;
  6411. extern osTimerId_t motorYTimerHandle;
  6412. extern TIM_HandleTypeDef htim3;
  6413. extern TIM_OC_InitTypeDef motorXYTimerConfigOC;
  6414. void PositionControlTaskInit (void) {
  6415. 8003184: b580 push {r7, lr}
  6416. 8003186: b08a sub sp, #40 @ 0x28
  6417. 8003188: af00 add r7, sp, #0
  6418. // positionSettingMutex = osMutexNew (NULL);
  6419. osThreadAttr_t osThreadAttrPositionControlTask = { 0 };
  6420. 800318a: 1d3b adds r3, r7, #4
  6421. 800318c: 2224 movs r2, #36 @ 0x24
  6422. 800318e: 2100 movs r1, #0
  6423. 8003190: 4618 mov r0, r3
  6424. 8003192: f014 fd7b bl 8017c8c <memset>
  6425. osThreadAttrPositionControlTask.stack_size = configMINIMAL_STACK_SIZE * 2;
  6426. 8003196: f44f 6380 mov.w r3, #1024 @ 0x400
  6427. 800319a: 61bb str r3, [r7, #24]
  6428. osThreadAttrPositionControlTask.priority = (osPriority_t)osPriorityNormal;
  6429. 800319c: 2318 movs r3, #24
  6430. 800319e: 61fb str r3, [r7, #28]
  6431. positionXControlTaskInitArg.channel1 = TIM_CHANNEL_1;
  6432. 80031a0: 4b3b ldr r3, [pc, #236] @ (8003290 <PositionControlTaskInit+0x10c>)
  6433. 80031a2: 2200 movs r2, #0
  6434. 80031a4: 721a strb r2, [r3, #8]
  6435. positionXControlTaskInitArg.channel2 = TIM_CHANNEL_2;
  6436. 80031a6: 4b3a ldr r3, [pc, #232] @ (8003290 <PositionControlTaskInit+0x10c>)
  6437. 80031a8: 2204 movs r2, #4
  6438. 80031aa: 725a strb r2, [r3, #9]
  6439. positionXControlTaskInitArg.htim = &htim3;
  6440. 80031ac: 4b38 ldr r3, [pc, #224] @ (8003290 <PositionControlTaskInit+0x10c>)
  6441. 80031ae: 4a39 ldr r2, [pc, #228] @ (8003294 <PositionControlTaskInit+0x110>)
  6442. 80031b0: 601a str r2, [r3, #0]
  6443. positionXControlTaskInitArg.motorTimerConfigOC = &motorXYTimerConfigOC;
  6444. 80031b2: 4b37 ldr r3, [pc, #220] @ (8003290 <PositionControlTaskInit+0x10c>)
  6445. 80031b4: 4a38 ldr r2, [pc, #224] @ (8003298 <PositionControlTaskInit+0x114>)
  6446. 80031b6: 605a str r2, [r3, #4]
  6447. positionXControlTaskInitArg.motorTimerHandle = motorXTimerHandle;
  6448. 80031b8: 4b38 ldr r3, [pc, #224] @ (800329c <PositionControlTaskInit+0x118>)
  6449. 80031ba: 681b ldr r3, [r3, #0]
  6450. 80031bc: 4a34 ldr r2, [pc, #208] @ (8003290 <PositionControlTaskInit+0x10c>)
  6451. 80031be: 60d3 str r3, [r2, #12]
  6452. positionXControlTaskInitArg.positionSettingQueue = osMessageQueueNew (16, sizeof (PositionControlTaskData), NULL);
  6453. 80031c0: 2200 movs r2, #0
  6454. 80031c2: 2104 movs r1, #4
  6455. 80031c4: 2010 movs r0, #16
  6456. 80031c6: f010 fcb8 bl 8013b3a <osMessageQueueNew>
  6457. 80031ca: 4603 mov r3, r0
  6458. 80031cc: 4a30 ldr r2, [pc, #192] @ (8003290 <PositionControlTaskInit+0x10c>)
  6459. 80031ce: 6113 str r3, [r2, #16]
  6460. positionXControlTaskInitArg.switchLimiterCenterStat = &(sensorsInfo.limitXSwitchCenter);
  6461. 80031d0: 4b2f ldr r3, [pc, #188] @ (8003290 <PositionControlTaskInit+0x10c>)
  6462. 80031d2: 4a33 ldr r2, [pc, #204] @ (80032a0 <PositionControlTaskInit+0x11c>)
  6463. 80031d4: 61da str r2, [r3, #28]
  6464. positionXControlTaskInitArg.switchLimiterUpStat = &(sensorsInfo.limitXSwitchUp);
  6465. 80031d6: 4b2e ldr r3, [pc, #184] @ (8003290 <PositionControlTaskInit+0x10c>)
  6466. 80031d8: 4a32 ldr r2, [pc, #200] @ (80032a4 <PositionControlTaskInit+0x120>)
  6467. 80031da: 615a str r2, [r3, #20]
  6468. positionXControlTaskInitArg.switchLimiterDownStat = &(sensorsInfo.limitXSwitchDown);
  6469. 80031dc: 4b2c ldr r3, [pc, #176] @ (8003290 <PositionControlTaskInit+0x10c>)
  6470. 80031de: 4a32 ldr r2, [pc, #200] @ (80032a8 <PositionControlTaskInit+0x124>)
  6471. 80031e0: 619a str r2, [r3, #24]
  6472. positionXControlTaskInitArg.currentPosition = &(sensorsInfo.currentXPosition);
  6473. 80031e2: 4b2b ldr r3, [pc, #172] @ (8003290 <PositionControlTaskInit+0x10c>)
  6474. 80031e4: 4a31 ldr r2, [pc, #196] @ (80032ac <PositionControlTaskInit+0x128>)
  6475. 80031e6: 621a str r2, [r3, #32]
  6476. positionXControlTaskInitArg.motorStatus = &(sensorsInfo.motorXStatus);
  6477. 80031e8: 4b29 ldr r3, [pc, #164] @ (8003290 <PositionControlTaskInit+0x10c>)
  6478. 80031ea: 4a31 ldr r2, [pc, #196] @ (80032b0 <PositionControlTaskInit+0x12c>)
  6479. 80031ec: 629a str r2, [r3, #40] @ 0x28
  6480. positionXControlTaskInitArg.motorPeakCurrent = &(sensorsInfo.motorXPeakCurrent);
  6481. 80031ee: 4b28 ldr r3, [pc, #160] @ (8003290 <PositionControlTaskInit+0x10c>)
  6482. 80031f0: 4a30 ldr r2, [pc, #192] @ (80032b4 <PositionControlTaskInit+0x130>)
  6483. 80031f2: 62da str r2, [r3, #44] @ 0x2c
  6484. positionXControlTaskInitArg.positionSetting = &positionXSetting;
  6485. 80031f4: 4b26 ldr r3, [pc, #152] @ (8003290 <PositionControlTaskInit+0x10c>)
  6486. 80031f6: 4a30 ldr r2, [pc, #192] @ (80032b8 <PositionControlTaskInit+0x134>)
  6487. 80031f8: 625a str r2, [r3, #36] @ 0x24
  6488. positionXControlTaskInitArg.axe = 'X';
  6489. 80031fa: 4b25 ldr r3, [pc, #148] @ (8003290 <PositionControlTaskInit+0x10c>)
  6490. 80031fc: 2258 movs r2, #88 @ 0x58
  6491. 80031fe: f883 2030 strb.w r2, [r3, #48] @ 0x30
  6492. positionYControlTaskInitArg.channel1 = TIM_CHANNEL_3;
  6493. 8003202: 4b2e ldr r3, [pc, #184] @ (80032bc <PositionControlTaskInit+0x138>)
  6494. 8003204: 2208 movs r2, #8
  6495. 8003206: 721a strb r2, [r3, #8]
  6496. positionYControlTaskInitArg.channel2 = TIM_CHANNEL_4;
  6497. 8003208: 4b2c ldr r3, [pc, #176] @ (80032bc <PositionControlTaskInit+0x138>)
  6498. 800320a: 220c movs r2, #12
  6499. 800320c: 725a strb r2, [r3, #9]
  6500. positionYControlTaskInitArg.htim = &htim3;
  6501. 800320e: 4b2b ldr r3, [pc, #172] @ (80032bc <PositionControlTaskInit+0x138>)
  6502. 8003210: 4a20 ldr r2, [pc, #128] @ (8003294 <PositionControlTaskInit+0x110>)
  6503. 8003212: 601a str r2, [r3, #0]
  6504. positionYControlTaskInitArg.motorTimerConfigOC = &motorXYTimerConfigOC;
  6505. 8003214: 4b29 ldr r3, [pc, #164] @ (80032bc <PositionControlTaskInit+0x138>)
  6506. 8003216: 4a20 ldr r2, [pc, #128] @ (8003298 <PositionControlTaskInit+0x114>)
  6507. 8003218: 605a str r2, [r3, #4]
  6508. positionYControlTaskInitArg.motorTimerHandle = motorYTimerHandle;
  6509. 800321a: 4b29 ldr r3, [pc, #164] @ (80032c0 <PositionControlTaskInit+0x13c>)
  6510. 800321c: 681b ldr r3, [r3, #0]
  6511. 800321e: 4a27 ldr r2, [pc, #156] @ (80032bc <PositionControlTaskInit+0x138>)
  6512. 8003220: 60d3 str r3, [r2, #12]
  6513. positionYControlTaskInitArg.positionSettingQueue = osMessageQueueNew (16, sizeof (PositionControlTaskData), NULL);
  6514. 8003222: 2200 movs r2, #0
  6515. 8003224: 2104 movs r1, #4
  6516. 8003226: 2010 movs r0, #16
  6517. 8003228: f010 fc87 bl 8013b3a <osMessageQueueNew>
  6518. 800322c: 4603 mov r3, r0
  6519. 800322e: 4a23 ldr r2, [pc, #140] @ (80032bc <PositionControlTaskInit+0x138>)
  6520. 8003230: 6113 str r3, [r2, #16]
  6521. positionYControlTaskInitArg.switchLimiterCenterStat = &(sensorsInfo.limitYSwitchCenter);
  6522. 8003232: 4b22 ldr r3, [pc, #136] @ (80032bc <PositionControlTaskInit+0x138>)
  6523. 8003234: 4a23 ldr r2, [pc, #140] @ (80032c4 <PositionControlTaskInit+0x140>)
  6524. 8003236: 61da str r2, [r3, #28]
  6525. positionYControlTaskInitArg.switchLimiterUpStat = &(sensorsInfo.limitYSwitchUp);
  6526. 8003238: 4b20 ldr r3, [pc, #128] @ (80032bc <PositionControlTaskInit+0x138>)
  6527. 800323a: 4a23 ldr r2, [pc, #140] @ (80032c8 <PositionControlTaskInit+0x144>)
  6528. 800323c: 615a str r2, [r3, #20]
  6529. positionYControlTaskInitArg.switchLimiterDownStat = &(sensorsInfo.limitYSwitchDown);
  6530. 800323e: 4b1f ldr r3, [pc, #124] @ (80032bc <PositionControlTaskInit+0x138>)
  6531. 8003240: 4a22 ldr r2, [pc, #136] @ (80032cc <PositionControlTaskInit+0x148>)
  6532. 8003242: 619a str r2, [r3, #24]
  6533. positionYControlTaskInitArg.currentPosition = &(sensorsInfo.currentYPosition);
  6534. 8003244: 4b1d ldr r3, [pc, #116] @ (80032bc <PositionControlTaskInit+0x138>)
  6535. 8003246: 4a22 ldr r2, [pc, #136] @ (80032d0 <PositionControlTaskInit+0x14c>)
  6536. 8003248: 621a str r2, [r3, #32]
  6537. positionYControlTaskInitArg.motorStatus = &(sensorsInfo.motorYStatus);
  6538. 800324a: 4b1c ldr r3, [pc, #112] @ (80032bc <PositionControlTaskInit+0x138>)
  6539. 800324c: 4a21 ldr r2, [pc, #132] @ (80032d4 <PositionControlTaskInit+0x150>)
  6540. 800324e: 629a str r2, [r3, #40] @ 0x28
  6541. positionYControlTaskInitArg.motorPeakCurrent = &(sensorsInfo.motorYPeakCurrent);
  6542. 8003250: 4b1a ldr r3, [pc, #104] @ (80032bc <PositionControlTaskInit+0x138>)
  6543. 8003252: 4a21 ldr r2, [pc, #132] @ (80032d8 <PositionControlTaskInit+0x154>)
  6544. 8003254: 62da str r2, [r3, #44] @ 0x2c
  6545. positionXControlTaskInitArg.positionSetting = &positionYSetting;
  6546. 8003256: 4b0e ldr r3, [pc, #56] @ (8003290 <PositionControlTaskInit+0x10c>)
  6547. 8003258: 4a20 ldr r2, [pc, #128] @ (80032dc <PositionControlTaskInit+0x158>)
  6548. 800325a: 625a str r2, [r3, #36] @ 0x24
  6549. positionYControlTaskInitArg.axe = 'Y';
  6550. 800325c: 4b17 ldr r3, [pc, #92] @ (80032bc <PositionControlTaskInit+0x138>)
  6551. 800325e: 2259 movs r2, #89 @ 0x59
  6552. 8003260: f883 2030 strb.w r2, [r3, #48] @ 0x30
  6553. positionXControlTaskHandle = osThreadNew (PositionControlTask, &positionXControlTaskInitArg, &osThreadAttrPositionControlTask);
  6554. 8003264: 1d3b adds r3, r7, #4
  6555. 8003266: 461a mov r2, r3
  6556. 8003268: 4909 ldr r1, [pc, #36] @ (8003290 <PositionControlTaskInit+0x10c>)
  6557. 800326a: 481d ldr r0, [pc, #116] @ (80032e0 <PositionControlTaskInit+0x15c>)
  6558. 800326c: f010 f9b2 bl 80135d4 <osThreadNew>
  6559. 8003270: 4603 mov r3, r0
  6560. 8003272: 4a1c ldr r2, [pc, #112] @ (80032e4 <PositionControlTaskInit+0x160>)
  6561. 8003274: 6013 str r3, [r2, #0]
  6562. positionYControlTaskHandle = osThreadNew (PositionControlTask, &positionYControlTaskInitArg, &osThreadAttrPositionControlTask);
  6563. 8003276: 1d3b adds r3, r7, #4
  6564. 8003278: 461a mov r2, r3
  6565. 800327a: 4910 ldr r1, [pc, #64] @ (80032bc <PositionControlTaskInit+0x138>)
  6566. 800327c: 4818 ldr r0, [pc, #96] @ (80032e0 <PositionControlTaskInit+0x15c>)
  6567. 800327e: f010 f9a9 bl 80135d4 <osThreadNew>
  6568. 8003282: 4603 mov r3, r0
  6569. 8003284: 4a18 ldr r2, [pc, #96] @ (80032e8 <PositionControlTaskInit+0x164>)
  6570. 8003286: 6013 str r3, [r2, #0]
  6571. }
  6572. 8003288: bf00 nop
  6573. 800328a: 3728 adds r7, #40 @ 0x28
  6574. 800328c: 46bd mov sp, r7
  6575. 800328e: bd80 pop {r7, pc}
  6576. 8003290: 240008c0 .word 0x240008c0
  6577. 8003294: 24000498 .word 0x24000498
  6578. 8003298: 24000738 .word 0x24000738
  6579. 800329c: 240006bc .word 0x240006bc
  6580. 80032a0: 2400080a .word 0x2400080a
  6581. 80032a4: 24000808 .word 0x24000808
  6582. 80032a8: 24000809 .word 0x24000809
  6583. 80032ac: 24000810 .word 0x24000810
  6584. 80032b0: 240007f4 .word 0x240007f4
  6585. 80032b4: 24000800 .word 0x24000800
  6586. 80032b8: 24000880 .word 0x24000880
  6587. 80032bc: 24000900 .word 0x24000900
  6588. 80032c0: 240006ec .word 0x240006ec
  6589. 80032c4: 2400080d .word 0x2400080d
  6590. 80032c8: 2400080b .word 0x2400080b
  6591. 80032cc: 2400080c .word 0x2400080c
  6592. 80032d0: 24000814 .word 0x24000814
  6593. 80032d4: 240007f5 .word 0x240007f5
  6594. 80032d8: 24000804 .word 0x24000804
  6595. 80032dc: 240008a0 .word 0x240008a0
  6596. 80032e0: 080032ed .word 0x080032ed
  6597. 80032e4: 240008a4 .word 0x240008a4
  6598. 80032e8: 240008a8 .word 0x240008a8
  6599. 080032ec <PositionControlTask>:
  6600. void PositionControlTask (void* argument) {
  6601. 80032ec: b5f0 push {r4, r5, r6, r7, lr}
  6602. 80032ee: b09f sub sp, #124 @ 0x7c
  6603. 80032f0: af06 add r7, sp, #24
  6604. 80032f2: 6078 str r0, [r7, #4]
  6605. 80032f4: f107 0360 add.w r3, r7, #96 @ 0x60
  6606. 80032f8: 3b58 subs r3, #88 @ 0x58
  6607. 80032fa: 331f adds r3, #31
  6608. 80032fc: 095b lsrs r3, r3, #5
  6609. 80032fe: 015c lsls r4, r3, #5
  6610. const int32_t PositionControlTaskTimeOut = 100;
  6611. 8003300: 2364 movs r3, #100 @ 0x64
  6612. 8003302: 643b str r3, [r7, #64] @ 0x40
  6613. PositionControlTaskInitArg* posCtrlTaskArg = (PositionControlTaskInitArg*)argument;
  6614. 8003304: 687b ldr r3, [r7, #4]
  6615. 8003306: 63fb str r3, [r7, #60] @ 0x3c
  6616. PositionControlTaskData posCtrlData __attribute__ ((aligned (32))) = { 0 };
  6617. 8003308: f04f 0300 mov.w r3, #0
  6618. 800330c: 6023 str r3, [r4, #0]
  6619. uint32_t motorStatus = 0;
  6620. 800330e: 2300 movs r3, #0
  6621. 8003310: 63bb str r3, [r7, #56] @ 0x38
  6622. osStatus_t queueSatus;
  6623. int32_t pwmValue = MOTOR_START_STOP_PWM_VALUE;
  6624. 8003312: 233c movs r3, #60 @ 0x3c
  6625. 8003314: 65fb str r3, [r7, #92] @ 0x5c
  6626. int32_t sign = 0;
  6627. 8003316: 2300 movs r3, #0
  6628. 8003318: 65bb str r3, [r7, #88] @ 0x58
  6629. MovementPhases movementPhase = idlePhase;
  6630. 800331a: 2300 movs r3, #0
  6631. 800331c: f887 3057 strb.w r3, [r7, #87] @ 0x57
  6632. float startPosition = 0;
  6633. 8003320: f04f 0300 mov.w r3, #0
  6634. 8003324: 653b str r3, [r7, #80] @ 0x50
  6635. float prevPosition = 0;
  6636. 8003326: f04f 0300 mov.w r3, #0
  6637. 800332a: 64fb str r3, [r7, #76] @ 0x4c
  6638. int32_t timeLeftMS = 0;
  6639. 800332c: 2300 movs r3, #0
  6640. 800332e: 64bb str r3, [r7, #72] @ 0x48
  6641. int32_t moveCmdTimeoutCounter = 0;
  6642. 8003330: 2300 movs r3, #0
  6643. 8003332: 647b str r3, [r7, #68] @ 0x44
  6644. while (pdTRUE) {
  6645. queueSatus = osMessageQueueGet (posCtrlTaskArg->positionSettingQueue, &posCtrlData, 0, pdMS_TO_TICKS (PositionControlTaskTimeOut));
  6646. 8003334: 6bfb ldr r3, [r7, #60] @ 0x3c
  6647. 8003336: 6918 ldr r0, [r3, #16]
  6648. 8003338: 6c3b ldr r3, [r7, #64] @ 0x40
  6649. 800333a: f44f 727a mov.w r2, #1000 @ 0x3e8
  6650. 800333e: fb02 f303 mul.w r3, r2, r3
  6651. 8003342: 4a86 ldr r2, [pc, #536] @ (800355c <PositionControlTask+0x270>)
  6652. 8003344: fba2 2303 umull r2, r3, r2, r3
  6653. 8003348: 099b lsrs r3, r3, #6
  6654. 800334a: 2200 movs r2, #0
  6655. 800334c: 4621 mov r1, r4
  6656. 800334e: f010 fcc7 bl 8013ce0 <osMessageQueueGet>
  6657. 8003352: 6378 str r0, [r7, #52] @ 0x34
  6658. if (queueSatus == osOK) {
  6659. 8003354: 6b7b ldr r3, [r7, #52] @ 0x34
  6660. 8003356: 2b00 cmp r3, #0
  6661. 8003358: d142 bne.n 80033e0 <PositionControlTask+0xf4>
  6662. if (osMutexAcquire (sensorsInfoMutex, osWaitForever) == osOK) {
  6663. 800335a: 4b81 ldr r3, [pc, #516] @ (8003560 <PositionControlTask+0x274>)
  6664. 800335c: 681b ldr r3, [r3, #0]
  6665. 800335e: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  6666. 8003362: 4618 mov r0, r3
  6667. 8003364: f010 fb61 bl 8013a2a <osMutexAcquire>
  6668. 8003368: 4603 mov r3, r0
  6669. 800336a: 2b00 cmp r3, #0
  6670. 800336c: d1e2 bne.n 8003334 <PositionControlTask+0x48>
  6671. float posDiff = posCtrlData.positionSettingValue - *posCtrlTaskArg->currentPosition;
  6672. 800336e: ed94 7a00 vldr s14, [r4]
  6673. 8003372: 6bfb ldr r3, [r7, #60] @ 0x3c
  6674. 8003374: 6a1b ldr r3, [r3, #32]
  6675. 8003376: edd3 7a00 vldr s15, [r3]
  6676. 800337a: ee77 7a67 vsub.f32 s15, s14, s15
  6677. 800337e: edc7 7a0b vstr s15, [r7, #44] @ 0x2c
  6678. if (posDiff != 0) {
  6679. 8003382: edd7 7a0b vldr s15, [r7, #44] @ 0x2c
  6680. 8003386: eef5 7a40 vcmp.f32 s15, #0.0
  6681. 800338a: eef1 fa10 vmrs APSR_nzcv, fpscr
  6682. 800338e: d01d beq.n 80033cc <PositionControlTask+0xe0>
  6683. sign = posDiff > 0 ? 1 : -1;
  6684. 8003390: edd7 7a0b vldr s15, [r7, #44] @ 0x2c
  6685. 8003394: eef5 7ac0 vcmpe.f32 s15, #0.0
  6686. 8003398: eef1 fa10 vmrs APSR_nzcv, fpscr
  6687. 800339c: dd01 ble.n 80033a2 <PositionControlTask+0xb6>
  6688. 800339e: 2301 movs r3, #1
  6689. 80033a0: e001 b.n 80033a6 <PositionControlTask+0xba>
  6690. 80033a2: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  6691. 80033a6: 65bb str r3, [r7, #88] @ 0x58
  6692. startPosition = *posCtrlTaskArg->currentPosition;
  6693. 80033a8: 6bfb ldr r3, [r7, #60] @ 0x3c
  6694. 80033aa: 6a1b ldr r3, [r3, #32]
  6695. 80033ac: 681b ldr r3, [r3, #0]
  6696. 80033ae: 653b str r3, [r7, #80] @ 0x50
  6697. movementPhase = startPhase;
  6698. 80033b0: 2301 movs r3, #1
  6699. 80033b2: f887 3057 strb.w r3, [r7, #87] @ 0x57
  6700. moveCmdTimeoutCounter = 0;
  6701. 80033b6: 2300 movs r3, #0
  6702. 80033b8: 647b str r3, [r7, #68] @ 0x44
  6703. timeLeftMS = 0;
  6704. 80033ba: 2300 movs r3, #0
  6705. 80033bc: 64bb str r3, [r7, #72] @ 0x48
  6706. #ifdef DBG_POSITION
  6707. printf ("Axe %c start phase\n", posCtrlTaskArg->axe);
  6708. 80033be: 6bfb ldr r3, [r7, #60] @ 0x3c
  6709. 80033c0: f893 3030 ldrb.w r3, [r3, #48] @ 0x30
  6710. 80033c4: 4619 mov r1, r3
  6711. 80033c6: 4867 ldr r0, [pc, #412] @ (8003564 <PositionControlTask+0x278>)
  6712. 80033c8: f014 fb18 bl 80179fc <iprintf>
  6713. #endif
  6714. }
  6715. osMutexRelease (sensorsInfoMutex);
  6716. 80033cc: 4b64 ldr r3, [pc, #400] @ (8003560 <PositionControlTask+0x274>)
  6717. 80033ce: 681b ldr r3, [r3, #0]
  6718. 80033d0: 4618 mov r0, r3
  6719. 80033d2: f010 fb75 bl 8013ac0 <osMutexRelease>
  6720. // if (osMutexAcquire (positionSettingMutex, osWaitForever) == osOK) {
  6721. *positionXControlTaskInitArg.positionSetting = posCtrlData.positionSettingValue;
  6722. 80033d6: 4b64 ldr r3, [pc, #400] @ (8003568 <PositionControlTask+0x27c>)
  6723. 80033d8: 6a5b ldr r3, [r3, #36] @ 0x24
  6724. 80033da: 6822 ldr r2, [r4, #0]
  6725. 80033dc: 601a str r2, [r3, #0]
  6726. 80033de: e7a9 b.n 8003334 <PositionControlTask+0x48>
  6727. // osMutexRelease (positionSettingMutex);
  6728. // }
  6729. }
  6730. } else if (queueSatus == osErrorTimeout) {
  6731. 80033e0: 6b7b ldr r3, [r7, #52] @ 0x34
  6732. 80033e2: f113 0f02 cmn.w r3, #2
  6733. 80033e6: d1a5 bne.n 8003334 <PositionControlTask+0x48>
  6734. if (osMutexAcquire (sensorsInfoMutex, osWaitForever) == osOK) {
  6735. 80033e8: 4b5d ldr r3, [pc, #372] @ (8003560 <PositionControlTask+0x274>)
  6736. 80033ea: 681b ldr r3, [r3, #0]
  6737. 80033ec: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  6738. 80033f0: 4618 mov r0, r3
  6739. 80033f2: f010 fb1a bl 8013a2a <osMutexAcquire>
  6740. 80033f6: 4603 mov r3, r0
  6741. 80033f8: 2b00 cmp r3, #0
  6742. 80033fa: d19b bne.n 8003334 <PositionControlTask+0x48>
  6743. if (((*posCtrlTaskArg->motorStatus != 0) && (movementPhase != idlePhase)) || (movementPhase == startPhase) ) {
  6744. 80033fc: 6bfb ldr r3, [r7, #60] @ 0x3c
  6745. 80033fe: 6a9b ldr r3, [r3, #40] @ 0x28
  6746. 8003400: 781b ldrb r3, [r3, #0]
  6747. 8003402: 2b00 cmp r3, #0
  6748. 8003404: d003 beq.n 800340e <PositionControlTask+0x122>
  6749. 8003406: f897 3057 ldrb.w r3, [r7, #87] @ 0x57
  6750. 800340a: 2b00 cmp r3, #0
  6751. 800340c: d104 bne.n 8003418 <PositionControlTask+0x12c>
  6752. 800340e: f897 3057 ldrb.w r3, [r7, #87] @ 0x57
  6753. 8003412: 2b01 cmp r3, #1
  6754. 8003414: f040 8208 bne.w 8003828 <PositionControlTask+0x53c>
  6755. if (((*posCtrlTaskArg->switchLimiterDownStat == 1) && (*posCtrlTaskArg->switchLimiterUpStat == 1)) ||
  6756. 8003418: 6bfb ldr r3, [r7, #60] @ 0x3c
  6757. 800341a: 699b ldr r3, [r3, #24]
  6758. 800341c: 781b ldrb r3, [r3, #0]
  6759. 800341e: 2b01 cmp r3, #1
  6760. 8003420: d104 bne.n 800342c <PositionControlTask+0x140>
  6761. 8003422: 6bfb ldr r3, [r7, #60] @ 0x3c
  6762. 8003424: 695b ldr r3, [r3, #20]
  6763. 8003426: 781b ldrb r3, [r3, #0]
  6764. 8003428: 2b01 cmp r3, #1
  6765. 800342a: d009 beq.n 8003440 <PositionControlTask+0x154>
  6766. ((*posCtrlTaskArg->switchLimiterUpStat == 1) && (*posCtrlTaskArg->switchLimiterCenterStat == 1))) {
  6767. 800342c: 6bfb ldr r3, [r7, #60] @ 0x3c
  6768. 800342e: 695b ldr r3, [r3, #20]
  6769. 8003430: 781b ldrb r3, [r3, #0]
  6770. if (((*posCtrlTaskArg->switchLimiterDownStat == 1) && (*posCtrlTaskArg->switchLimiterUpStat == 1)) ||
  6771. 8003432: 2b01 cmp r3, #1
  6772. 8003434: d132 bne.n 800349c <PositionControlTask+0x1b0>
  6773. ((*posCtrlTaskArg->switchLimiterUpStat == 1) && (*posCtrlTaskArg->switchLimiterCenterStat == 1))) {
  6774. 8003436: 6bfb ldr r3, [r7, #60] @ 0x3c
  6775. 8003438: 69db ldr r3, [r3, #28]
  6776. 800343a: 781b ldrb r3, [r3, #0]
  6777. 800343c: 2b01 cmp r3, #1
  6778. 800343e: d12d bne.n 800349c <PositionControlTask+0x1b0>
  6779. movementPhase = idlePhase;
  6780. 8003440: 2300 movs r3, #0
  6781. 8003442: f887 3057 strb.w r3, [r7, #87] @ 0x57
  6782. motorStatus = MotorControl (posCtrlTaskArg->htim, posCtrlTaskArg->motorTimerConfigOC, posCtrlTaskArg->channel1, posCtrlTaskArg->channel2, posCtrlTaskArg->motorTimerHandle, 0,
  6783. 8003446: 6bfb ldr r3, [r7, #60] @ 0x3c
  6784. 8003448: 6818 ldr r0, [r3, #0]
  6785. 800344a: 6bfb ldr r3, [r7, #60] @ 0x3c
  6786. 800344c: 685d ldr r5, [r3, #4]
  6787. 800344e: 6bfb ldr r3, [r7, #60] @ 0x3c
  6788. 8003450: 7a1e ldrb r6, [r3, #8]
  6789. 8003452: 6bfb ldr r3, [r7, #60] @ 0x3c
  6790. 8003454: f893 c009 ldrb.w ip, [r3, #9]
  6791. 8003458: 6bfb ldr r3, [r7, #60] @ 0x3c
  6792. 800345a: 68db ldr r3, [r3, #12]
  6793. 0, *posCtrlTaskArg->switchLimiterUpStat, *posCtrlTaskArg->switchLimiterDownStat);
  6794. 800345c: 6bfa ldr r2, [r7, #60] @ 0x3c
  6795. 800345e: 6952 ldr r2, [r2, #20]
  6796. motorStatus = MotorControl (posCtrlTaskArg->htim, posCtrlTaskArg->motorTimerConfigOC, posCtrlTaskArg->channel1, posCtrlTaskArg->channel2, posCtrlTaskArg->motorTimerHandle, 0,
  6797. 8003460: 7812 ldrb r2, [r2, #0]
  6798. 0, *posCtrlTaskArg->switchLimiterUpStat, *posCtrlTaskArg->switchLimiterDownStat);
  6799. 8003462: 6bf9 ldr r1, [r7, #60] @ 0x3c
  6800. 8003464: 6989 ldr r1, [r1, #24]
  6801. motorStatus = MotorControl (posCtrlTaskArg->htim, posCtrlTaskArg->motorTimerConfigOC, posCtrlTaskArg->channel1, posCtrlTaskArg->channel2, posCtrlTaskArg->motorTimerHandle, 0,
  6802. 8003466: 7809 ldrb r1, [r1, #0]
  6803. 8003468: 9104 str r1, [sp, #16]
  6804. 800346a: 9203 str r2, [sp, #12]
  6805. 800346c: 2200 movs r2, #0
  6806. 800346e: 9202 str r2, [sp, #8]
  6807. 8003470: 2200 movs r2, #0
  6808. 8003472: 9201 str r2, [sp, #4]
  6809. 8003474: 9300 str r3, [sp, #0]
  6810. 8003476: 4663 mov r3, ip
  6811. 8003478: 4632 mov r2, r6
  6812. 800347a: 4629 mov r1, r5
  6813. 800347c: f7ff fcdc bl 8002e38 <MotorControl>
  6814. 8003480: 4603 mov r3, r0
  6815. 8003482: 63bb str r3, [r7, #56] @ 0x38
  6816. *posCtrlTaskArg->motorStatus = motorStatus;
  6817. 8003484: 6bfb ldr r3, [r7, #60] @ 0x3c
  6818. 8003486: 6a9b ldr r3, [r3, #40] @ 0x28
  6819. 8003488: 6bba ldr r2, [r7, #56] @ 0x38
  6820. 800348a: b2d2 uxtb r2, r2
  6821. 800348c: 701a strb r2, [r3, #0]
  6822. #ifdef DBG_POSITION
  6823. printf ("Axe %c limiters wrong state - idle phase\n", posCtrlTaskArg->axe);
  6824. 800348e: 6bfb ldr r3, [r7, #60] @ 0x3c
  6825. 8003490: f893 3030 ldrb.w r3, [r3, #48] @ 0x30
  6826. 8003494: 4619 mov r1, r3
  6827. 8003496: 4835 ldr r0, [pc, #212] @ (800356c <PositionControlTask+0x280>)
  6828. 8003498: f014 fab0 bl 80179fc <iprintf>
  6829. #endif
  6830. }
  6831. timeLeftMS += PositionControlTaskTimeOut;
  6832. 800349c: 6cba ldr r2, [r7, #72] @ 0x48
  6833. 800349e: 6c3b ldr r3, [r7, #64] @ 0x40
  6834. 80034a0: 4413 add r3, r2
  6835. 80034a2: 64bb str r3, [r7, #72] @ 0x48
  6836. if (prevPosition == *posCtrlTaskArg->currentPosition) {
  6837. 80034a4: 6bfb ldr r3, [r7, #60] @ 0x3c
  6838. 80034a6: 6a1b ldr r3, [r3, #32]
  6839. 80034a8: edd3 7a00 vldr s15, [r3]
  6840. 80034ac: ed97 7a13 vldr s14, [r7, #76] @ 0x4c
  6841. 80034b0: eeb4 7a67 vcmp.f32 s14, s15
  6842. 80034b4: eef1 fa10 vmrs APSR_nzcv, fpscr
  6843. 80034b8: d104 bne.n 80034c4 <PositionControlTask+0x1d8>
  6844. moveCmdTimeoutCounter += PositionControlTaskTimeOut;
  6845. 80034ba: 6c7a ldr r2, [r7, #68] @ 0x44
  6846. 80034bc: 6c3b ldr r3, [r7, #64] @ 0x40
  6847. 80034be: 4413 add r3, r2
  6848. 80034c0: 647b str r3, [r7, #68] @ 0x44
  6849. 80034c2: e001 b.n 80034c8 <PositionControlTask+0x1dc>
  6850. } else {
  6851. moveCmdTimeoutCounter = 0;
  6852. 80034c4: 2300 movs r3, #0
  6853. 80034c6: 647b str r3, [r7, #68] @ 0x44
  6854. }
  6855. prevPosition = *posCtrlTaskArg->currentPosition;
  6856. 80034c8: 6bfb ldr r3, [r7, #60] @ 0x3c
  6857. 80034ca: 6a1b ldr r3, [r3, #32]
  6858. 80034cc: 681b ldr r3, [r3, #0]
  6859. 80034ce: 64fb str r3, [r7, #76] @ 0x4c
  6860. if (moveCmdTimeoutCounter > NO_MOVE_TIMEOUT_MS) {
  6861. 80034d0: 6c7b ldr r3, [r7, #68] @ 0x44
  6862. 80034d2: f241 3288 movw r2, #5000 @ 0x1388
  6863. 80034d6: 4293 cmp r3, r2
  6864. 80034d8: dd2d ble.n 8003536 <PositionControlTask+0x24a>
  6865. movementPhase = idlePhase;
  6866. 80034da: 2300 movs r3, #0
  6867. 80034dc: f887 3057 strb.w r3, [r7, #87] @ 0x57
  6868. motorStatus = MotorControl (posCtrlTaskArg->htim, posCtrlTaskArg->motorTimerConfigOC, posCtrlTaskArg->channel1, posCtrlTaskArg->channel2, posCtrlTaskArg->motorTimerHandle, 0,
  6869. 80034e0: 6bfb ldr r3, [r7, #60] @ 0x3c
  6870. 80034e2: 6818 ldr r0, [r3, #0]
  6871. 80034e4: 6bfb ldr r3, [r7, #60] @ 0x3c
  6872. 80034e6: 685d ldr r5, [r3, #4]
  6873. 80034e8: 6bfb ldr r3, [r7, #60] @ 0x3c
  6874. 80034ea: 7a1e ldrb r6, [r3, #8]
  6875. 80034ec: 6bfb ldr r3, [r7, #60] @ 0x3c
  6876. 80034ee: f893 c009 ldrb.w ip, [r3, #9]
  6877. 80034f2: 6bfb ldr r3, [r7, #60] @ 0x3c
  6878. 80034f4: 68db ldr r3, [r3, #12]
  6879. 0, *posCtrlTaskArg->switchLimiterUpStat, *posCtrlTaskArg->switchLimiterDownStat);
  6880. 80034f6: 6bfa ldr r2, [r7, #60] @ 0x3c
  6881. 80034f8: 6952 ldr r2, [r2, #20]
  6882. motorStatus = MotorControl (posCtrlTaskArg->htim, posCtrlTaskArg->motorTimerConfigOC, posCtrlTaskArg->channel1, posCtrlTaskArg->channel2, posCtrlTaskArg->motorTimerHandle, 0,
  6883. 80034fa: 7812 ldrb r2, [r2, #0]
  6884. 0, *posCtrlTaskArg->switchLimiterUpStat, *posCtrlTaskArg->switchLimiterDownStat);
  6885. 80034fc: 6bf9 ldr r1, [r7, #60] @ 0x3c
  6886. 80034fe: 6989 ldr r1, [r1, #24]
  6887. motorStatus = MotorControl (posCtrlTaskArg->htim, posCtrlTaskArg->motorTimerConfigOC, posCtrlTaskArg->channel1, posCtrlTaskArg->channel2, posCtrlTaskArg->motorTimerHandle, 0,
  6888. 8003500: 7809 ldrb r1, [r1, #0]
  6889. 8003502: 9104 str r1, [sp, #16]
  6890. 8003504: 9203 str r2, [sp, #12]
  6891. 8003506: 2200 movs r2, #0
  6892. 8003508: 9202 str r2, [sp, #8]
  6893. 800350a: 2200 movs r2, #0
  6894. 800350c: 9201 str r2, [sp, #4]
  6895. 800350e: 9300 str r3, [sp, #0]
  6896. 8003510: 4663 mov r3, ip
  6897. 8003512: 4632 mov r2, r6
  6898. 8003514: 4629 mov r1, r5
  6899. 8003516: f7ff fc8f bl 8002e38 <MotorControl>
  6900. 800351a: 4603 mov r3, r0
  6901. 800351c: 63bb str r3, [r7, #56] @ 0x38
  6902. *posCtrlTaskArg->motorStatus = motorStatus;
  6903. 800351e: 6bfb ldr r3, [r7, #60] @ 0x3c
  6904. 8003520: 6a9b ldr r3, [r3, #40] @ 0x28
  6905. 8003522: 6bba ldr r2, [r7, #56] @ 0x38
  6906. 8003524: b2d2 uxtb r2, r2
  6907. 8003526: 701a strb r2, [r3, #0]
  6908. #ifdef DBG_POSITION
  6909. printf ("Axe %c no movement idle phase\n", posCtrlTaskArg->axe);
  6910. 8003528: 6bfb ldr r3, [r7, #60] @ 0x3c
  6911. 800352a: f893 3030 ldrb.w r3, [r3, #48] @ 0x30
  6912. 800352e: 4619 mov r1, r3
  6913. 8003530: 480f ldr r0, [pc, #60] @ (8003570 <PositionControlTask+0x284>)
  6914. 8003532: f014 fa63 bl 80179fc <iprintf>
  6915. #endif
  6916. }
  6917. switch (movementPhase) {
  6918. 8003536: f897 3057 ldrb.w r3, [r7, #87] @ 0x57
  6919. 800353a: 3b01 subs r3, #1
  6920. 800353c: 2b04 cmp r3, #4
  6921. 800353e: f200 816b bhi.w 8003818 <PositionControlTask+0x52c>
  6922. 8003542: a201 add r2, pc, #4 @ (adr r2, 8003548 <PositionControlTask+0x25c>)
  6923. 8003544: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  6924. 8003548: 08003575 .word 0x08003575
  6925. 800354c: 0800360d .word 0x0800360d
  6926. 8003550: 080036a9 .word 0x080036a9
  6927. 8003554: 08003705 .word 0x08003705
  6928. 8003558: 08003777 .word 0x08003777
  6929. 800355c: 10624dd3 .word 0x10624dd3
  6930. 8003560: 24000790 .word 0x24000790
  6931. 8003564: 08018a14 .word 0x08018a14
  6932. 8003568: 240008c0 .word 0x240008c0
  6933. 800356c: 08018a28 .word 0x08018a28
  6934. 8003570: 08018a54 .word 0x08018a54
  6935. case startPhase:
  6936. motorStatus = MotorControl (posCtrlTaskArg->htim, posCtrlTaskArg->motorTimerConfigOC, posCtrlTaskArg->channel1, posCtrlTaskArg->channel2, posCtrlTaskArg->motorTimerHandle,
  6937. 8003574: 6bfb ldr r3, [r7, #60] @ 0x3c
  6938. 8003576: 681d ldr r5, [r3, #0]
  6939. 8003578: 6bfb ldr r3, [r7, #60] @ 0x3c
  6940. 800357a: 685e ldr r6, [r3, #4]
  6941. 800357c: 6bfb ldr r3, [r7, #60] @ 0x3c
  6942. 800357e: f893 c008 ldrb.w ip, [r3, #8]
  6943. 8003582: 6bfb ldr r3, [r7, #60] @ 0x3c
  6944. 8003584: f893 e009 ldrb.w lr, [r3, #9]
  6945. 8003588: 6bfb ldr r3, [r7, #60] @ 0x3c
  6946. 800358a: 68db ldr r3, [r3, #12]
  6947. 800358c: 6dba ldr r2, [r7, #88] @ 0x58
  6948. 800358e: 6df9 ldr r1, [r7, #92] @ 0x5c
  6949. 8003590: fb01 f202 mul.w r2, r1, r2
  6950. sign * pwmValue, -1, *posCtrlTaskArg->switchLimiterUpStat, *posCtrlTaskArg->switchLimiterDownStat);
  6951. 8003594: 6bf9 ldr r1, [r7, #60] @ 0x3c
  6952. 8003596: 6949 ldr r1, [r1, #20]
  6953. motorStatus = MotorControl (posCtrlTaskArg->htim, posCtrlTaskArg->motorTimerConfigOC, posCtrlTaskArg->channel1, posCtrlTaskArg->channel2, posCtrlTaskArg->motorTimerHandle,
  6954. 8003598: 7809 ldrb r1, [r1, #0]
  6955. sign * pwmValue, -1, *posCtrlTaskArg->switchLimiterUpStat, *posCtrlTaskArg->switchLimiterDownStat);
  6956. 800359a: 6bf8 ldr r0, [r7, #60] @ 0x3c
  6957. 800359c: 6980 ldr r0, [r0, #24]
  6958. motorStatus = MotorControl (posCtrlTaskArg->htim, posCtrlTaskArg->motorTimerConfigOC, posCtrlTaskArg->channel1, posCtrlTaskArg->channel2, posCtrlTaskArg->motorTimerHandle,
  6959. 800359e: 7800 ldrb r0, [r0, #0]
  6960. 80035a0: 9004 str r0, [sp, #16]
  6961. 80035a2: 9103 str r1, [sp, #12]
  6962. 80035a4: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  6963. 80035a8: 9102 str r1, [sp, #8]
  6964. 80035aa: 9201 str r2, [sp, #4]
  6965. 80035ac: 9300 str r3, [sp, #0]
  6966. 80035ae: 4673 mov r3, lr
  6967. 80035b0: 4662 mov r2, ip
  6968. 80035b2: 4631 mov r1, r6
  6969. 80035b4: 4628 mov r0, r5
  6970. 80035b6: f7ff fc3f bl 8002e38 <MotorControl>
  6971. 80035ba: 4603 mov r3, r0
  6972. 80035bc: 63bb str r3, [r7, #56] @ 0x38
  6973. *posCtrlTaskArg->motorStatus = motorStatus;
  6974. 80035be: 6bfb ldr r3, [r7, #60] @ 0x3c
  6975. 80035c0: 6a9b ldr r3, [r3, #40] @ 0x28
  6976. 80035c2: 6bba ldr r2, [r7, #56] @ 0x38
  6977. 80035c4: b2d2 uxtb r2, r2
  6978. 80035c6: 701a strb r2, [r3, #0]
  6979. if (motorStatus == 1) {
  6980. 80035c8: 6bbb ldr r3, [r7, #56] @ 0x38
  6981. 80035ca: 2b01 cmp r3, #1
  6982. 80035cc: d113 bne.n 80035f6 <PositionControlTask+0x30a>
  6983. *posCtrlTaskArg->motorPeakCurrent = 0.0;
  6984. 80035ce: 6bfb ldr r3, [r7, #60] @ 0x3c
  6985. 80035d0: 6adb ldr r3, [r3, #44] @ 0x2c
  6986. 80035d2: f04f 0200 mov.w r2, #0
  6987. 80035d6: 601a str r2, [r3, #0]
  6988. #ifdef DBG_POSITION
  6989. printf ("Axe %c speed up phase\n", posCtrlTaskArg->axe);
  6990. 80035d8: 6bfb ldr r3, [r7, #60] @ 0x3c
  6991. 80035da: f893 3030 ldrb.w r3, [r3, #48] @ 0x30
  6992. 80035de: 4619 mov r1, r3
  6993. 80035e0: 489e ldr r0, [pc, #632] @ (800385c <PositionControlTask+0x570>)
  6994. 80035e2: f014 fa0b bl 80179fc <iprintf>
  6995. #endif
  6996. movementPhase = speedUpPhase;
  6997. 80035e6: 2302 movs r3, #2
  6998. 80035e8: f887 3057 strb.w r3, [r7, #87] @ 0x57
  6999. timeLeftMS = 0;
  7000. 80035ec: 2300 movs r3, #0
  7001. 80035ee: 64bb str r3, [r7, #72] @ 0x48
  7002. moveCmdTimeoutCounter = 0;
  7003. 80035f0: 2300 movs r3, #0
  7004. 80035f2: 647b str r3, [r7, #68] @ 0x44
  7005. #ifdef DBG_POSITION
  7006. printf ("Axe %c idle phase\n", posCtrlTaskArg->axe);
  7007. #endif
  7008. }
  7009. break;
  7010. 80035f4: e117 b.n 8003826 <PositionControlTask+0x53a>
  7011. movementPhase = idlePhase;
  7012. 80035f6: 2300 movs r3, #0
  7013. 80035f8: f887 3057 strb.w r3, [r7, #87] @ 0x57
  7014. printf ("Axe %c idle phase\n", posCtrlTaskArg->axe);
  7015. 80035fc: 6bfb ldr r3, [r7, #60] @ 0x3c
  7016. 80035fe: f893 3030 ldrb.w r3, [r3, #48] @ 0x30
  7017. 8003602: 4619 mov r1, r3
  7018. 8003604: 4896 ldr r0, [pc, #600] @ (8003860 <PositionControlTask+0x574>)
  7019. 8003606: f014 f9f9 bl 80179fc <iprintf>
  7020. break;
  7021. 800360a: e10c b.n 8003826 <PositionControlTask+0x53a>
  7022. case speedUpPhase:
  7023. if ((abs (*posCtrlTaskArg->currentPosition - startPosition) >= ANGLE_RANGE_FOR_MOTOR_SPEED_LIMIT) || (timeLeftMS >= TIME_MS_FOR_MOTOR_SPEED_LIMIT)) {
  7024. 800360c: 6bfb ldr r3, [r7, #60] @ 0x3c
  7025. 800360e: 6a1b ldr r3, [r3, #32]
  7026. 8003610: ed93 7a00 vldr s14, [r3]
  7027. 8003614: edd7 7a14 vldr s15, [r7, #80] @ 0x50
  7028. 8003618: ee77 7a67 vsub.f32 s15, s14, s15
  7029. 800361c: eefd 7ae7 vcvt.s32.f32 s15, s15
  7030. 8003620: ee17 3a90 vmov r3, s15
  7031. 8003624: 2b00 cmp r3, #0
  7032. 8003626: bfb8 it lt
  7033. 8003628: 425b neglt r3, r3
  7034. 800362a: 2b04 cmp r3, #4
  7035. 800362c: dc05 bgt.n 800363a <PositionControlTask+0x34e>
  7036. 800362e: 6cbb ldr r3, [r7, #72] @ 0x48
  7037. 8003630: f241 3287 movw r2, #4999 @ 0x1387
  7038. 8003634: 4293 cmp r3, r2
  7039. 8003636: f340 80f1 ble.w 800381c <PositionControlTask+0x530>
  7040. pwmValue = MOTOR_HIGH_SPEED_PWM_VALUE;
  7041. 800363a: 2364 movs r3, #100 @ 0x64
  7042. 800363c: 65fb str r3, [r7, #92] @ 0x5c
  7043. motorStatus = MotorControl (posCtrlTaskArg->htim, posCtrlTaskArg->motorTimerConfigOC, posCtrlTaskArg->channel1, posCtrlTaskArg->channel2, posCtrlTaskArg->motorTimerHandle,
  7044. 800363e: 6bfb ldr r3, [r7, #60] @ 0x3c
  7045. 8003640: 681d ldr r5, [r3, #0]
  7046. 8003642: 6bfb ldr r3, [r7, #60] @ 0x3c
  7047. 8003644: 685e ldr r6, [r3, #4]
  7048. 8003646: 6bfb ldr r3, [r7, #60] @ 0x3c
  7049. 8003648: f893 c008 ldrb.w ip, [r3, #8]
  7050. 800364c: 6bfb ldr r3, [r7, #60] @ 0x3c
  7051. 800364e: f893 e009 ldrb.w lr, [r3, #9]
  7052. 8003652: 6bfb ldr r3, [r7, #60] @ 0x3c
  7053. 8003654: 68db ldr r3, [r3, #12]
  7054. 8003656: 6dba ldr r2, [r7, #88] @ 0x58
  7055. 8003658: 6df9 ldr r1, [r7, #92] @ 0x5c
  7056. 800365a: fb01 f202 mul.w r2, r1, r2
  7057. sign * pwmValue, -1, *posCtrlTaskArg->switchLimiterUpStat, *posCtrlTaskArg->switchLimiterDownStat);
  7058. 800365e: 6bf9 ldr r1, [r7, #60] @ 0x3c
  7059. 8003660: 6949 ldr r1, [r1, #20]
  7060. motorStatus = MotorControl (posCtrlTaskArg->htim, posCtrlTaskArg->motorTimerConfigOC, posCtrlTaskArg->channel1, posCtrlTaskArg->channel2, posCtrlTaskArg->motorTimerHandle,
  7061. 8003662: 7809 ldrb r1, [r1, #0]
  7062. sign * pwmValue, -1, *posCtrlTaskArg->switchLimiterUpStat, *posCtrlTaskArg->switchLimiterDownStat);
  7063. 8003664: 6bf8 ldr r0, [r7, #60] @ 0x3c
  7064. 8003666: 6980 ldr r0, [r0, #24]
  7065. motorStatus = MotorControl (posCtrlTaskArg->htim, posCtrlTaskArg->motorTimerConfigOC, posCtrlTaskArg->channel1, posCtrlTaskArg->channel2, posCtrlTaskArg->motorTimerHandle,
  7066. 8003668: 7800 ldrb r0, [r0, #0]
  7067. 800366a: 9004 str r0, [sp, #16]
  7068. 800366c: 9103 str r1, [sp, #12]
  7069. 800366e: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  7070. 8003672: 9102 str r1, [sp, #8]
  7071. 8003674: 9201 str r2, [sp, #4]
  7072. 8003676: 9300 str r3, [sp, #0]
  7073. 8003678: 4673 mov r3, lr
  7074. 800367a: 4662 mov r2, ip
  7075. 800367c: 4631 mov r1, r6
  7076. 800367e: 4628 mov r0, r5
  7077. 8003680: f7ff fbda bl 8002e38 <MotorControl>
  7078. 8003684: 4603 mov r3, r0
  7079. 8003686: 63bb str r3, [r7, #56] @ 0x38
  7080. *posCtrlTaskArg->motorStatus = motorStatus;
  7081. 8003688: 6bfb ldr r3, [r7, #60] @ 0x3c
  7082. 800368a: 6a9b ldr r3, [r3, #40] @ 0x28
  7083. 800368c: 6bba ldr r2, [r7, #56] @ 0x38
  7084. 800368e: b2d2 uxtb r2, r2
  7085. 8003690: 701a strb r2, [r3, #0]
  7086. movementPhase = movePhase;
  7087. 8003692: 2303 movs r3, #3
  7088. 8003694: f887 3057 strb.w r3, [r7, #87] @ 0x57
  7089. #ifdef DBG_POSITION
  7090. printf ("Axe %c move phase\n", posCtrlTaskArg->axe);
  7091. 8003698: 6bfb ldr r3, [r7, #60] @ 0x3c
  7092. 800369a: f893 3030 ldrb.w r3, [r3, #48] @ 0x30
  7093. 800369e: 4619 mov r1, r3
  7094. 80036a0: 4870 ldr r0, [pc, #448] @ (8003864 <PositionControlTask+0x578>)
  7095. 80036a2: f014 f9ab bl 80179fc <iprintf>
  7096. #endif
  7097. }
  7098. break;
  7099. 80036a6: e0b9 b.n 800381c <PositionControlTask+0x530>
  7100. case movePhase:
  7101. if (abs (*posCtrlTaskArg->currentPosition - *posCtrlTaskArg->positionSetting) <= ANGLE_RANGE_FOR_MOTOR_SPEED_LIMIT) {
  7102. 80036a8: 6bfb ldr r3, [r7, #60] @ 0x3c
  7103. 80036aa: 6a1b ldr r3, [r3, #32]
  7104. 80036ac: ed93 7a00 vldr s14, [r3]
  7105. 80036b0: 6bfb ldr r3, [r7, #60] @ 0x3c
  7106. 80036b2: 6a5b ldr r3, [r3, #36] @ 0x24
  7107. 80036b4: edd3 7a00 vldr s15, [r3]
  7108. 80036b8: ee77 7a67 vsub.f32 s15, s14, s15
  7109. 80036bc: eefd 7ae7 vcvt.s32.f32 s15, s15
  7110. 80036c0: ee17 3a90 vmov r3, s15
  7111. 80036c4: f113 0f05 cmn.w r3, #5
  7112. 80036c8: f2c0 80aa blt.w 8003820 <PositionControlTask+0x534>
  7113. 80036cc: 6bfb ldr r3, [r7, #60] @ 0x3c
  7114. 80036ce: 6a1b ldr r3, [r3, #32]
  7115. 80036d0: ed93 7a00 vldr s14, [r3]
  7116. 80036d4: 6bfb ldr r3, [r7, #60] @ 0x3c
  7117. 80036d6: 6a5b ldr r3, [r3, #36] @ 0x24
  7118. 80036d8: edd3 7a00 vldr s15, [r3]
  7119. 80036dc: ee77 7a67 vsub.f32 s15, s14, s15
  7120. 80036e0: eefd 7ae7 vcvt.s32.f32 s15, s15
  7121. 80036e4: ee17 3a90 vmov r3, s15
  7122. 80036e8: 2b05 cmp r3, #5
  7123. 80036ea: f300 8099 bgt.w 8003820 <PositionControlTask+0x534>
  7124. movementPhase = slowDownPhase;
  7125. 80036ee: 2304 movs r3, #4
  7126. 80036f0: f887 3057 strb.w r3, [r7, #87] @ 0x57
  7127. #ifdef DBG_POSITION
  7128. printf ("Axe %c slow down phase\n", posCtrlTaskArg->axe);
  7129. 80036f4: 6bfb ldr r3, [r7, #60] @ 0x3c
  7130. 80036f6: f893 3030 ldrb.w r3, [r3, #48] @ 0x30
  7131. 80036fa: 4619 mov r1, r3
  7132. 80036fc: 485a ldr r0, [pc, #360] @ (8003868 <PositionControlTask+0x57c>)
  7133. 80036fe: f014 f97d bl 80179fc <iprintf>
  7134. #endif
  7135. }
  7136. break;
  7137. 8003702: e08d b.n 8003820 <PositionControlTask+0x534>
  7138. case slowDownPhase:
  7139. pwmValue = MOTOR_START_STOP_PWM_VALUE;
  7140. 8003704: 233c movs r3, #60 @ 0x3c
  7141. 8003706: 65fb str r3, [r7, #92] @ 0x5c
  7142. motorStatus = MotorControl (posCtrlTaskArg->htim, posCtrlTaskArg->motorTimerConfigOC, posCtrlTaskArg->channel1, posCtrlTaskArg->channel2, posCtrlTaskArg->motorTimerHandle,
  7143. 8003708: 6bfb ldr r3, [r7, #60] @ 0x3c
  7144. 800370a: 681d ldr r5, [r3, #0]
  7145. 800370c: 6bfb ldr r3, [r7, #60] @ 0x3c
  7146. 800370e: 685e ldr r6, [r3, #4]
  7147. 8003710: 6bfb ldr r3, [r7, #60] @ 0x3c
  7148. 8003712: f893 c008 ldrb.w ip, [r3, #8]
  7149. 8003716: 6bfb ldr r3, [r7, #60] @ 0x3c
  7150. 8003718: f893 e009 ldrb.w lr, [r3, #9]
  7151. 800371c: 6bfb ldr r3, [r7, #60] @ 0x3c
  7152. 800371e: 68db ldr r3, [r3, #12]
  7153. 8003720: 6dba ldr r2, [r7, #88] @ 0x58
  7154. 8003722: 6df9 ldr r1, [r7, #92] @ 0x5c
  7155. 8003724: fb01 f202 mul.w r2, r1, r2
  7156. sign * pwmValue, -1, *posCtrlTaskArg->switchLimiterUpStat, *posCtrlTaskArg->switchLimiterDownStat);
  7157. 8003728: 6bf9 ldr r1, [r7, #60] @ 0x3c
  7158. 800372a: 6949 ldr r1, [r1, #20]
  7159. motorStatus = MotorControl (posCtrlTaskArg->htim, posCtrlTaskArg->motorTimerConfigOC, posCtrlTaskArg->channel1, posCtrlTaskArg->channel2, posCtrlTaskArg->motorTimerHandle,
  7160. 800372c: 7809 ldrb r1, [r1, #0]
  7161. sign * pwmValue, -1, *posCtrlTaskArg->switchLimiterUpStat, *posCtrlTaskArg->switchLimiterDownStat);
  7162. 800372e: 6bf8 ldr r0, [r7, #60] @ 0x3c
  7163. 8003730: 6980 ldr r0, [r0, #24]
  7164. motorStatus = MotorControl (posCtrlTaskArg->htim, posCtrlTaskArg->motorTimerConfigOC, posCtrlTaskArg->channel1, posCtrlTaskArg->channel2, posCtrlTaskArg->motorTimerHandle,
  7165. 8003732: 7800 ldrb r0, [r0, #0]
  7166. 8003734: 9004 str r0, [sp, #16]
  7167. 8003736: 9103 str r1, [sp, #12]
  7168. 8003738: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  7169. 800373c: 9102 str r1, [sp, #8]
  7170. 800373e: 9201 str r2, [sp, #4]
  7171. 8003740: 9300 str r3, [sp, #0]
  7172. 8003742: 4673 mov r3, lr
  7173. 8003744: 4662 mov r2, ip
  7174. 8003746: 4631 mov r1, r6
  7175. 8003748: 4628 mov r0, r5
  7176. 800374a: f7ff fb75 bl 8002e38 <MotorControl>
  7177. 800374e: 4603 mov r3, r0
  7178. 8003750: 63bb str r3, [r7, #56] @ 0x38
  7179. *posCtrlTaskArg->motorStatus = motorStatus;
  7180. 8003752: 6bfb ldr r3, [r7, #60] @ 0x3c
  7181. 8003754: 6a9b ldr r3, [r3, #40] @ 0x28
  7182. 8003756: 6bba ldr r2, [r7, #56] @ 0x38
  7183. 8003758: b2d2 uxtb r2, r2
  7184. 800375a: 701a strb r2, [r3, #0]
  7185. movementPhase = stopPhase;
  7186. 800375c: 2305 movs r3, #5
  7187. 800375e: f887 3057 strb.w r3, [r7, #87] @ 0x57
  7188. timeLeftMS = 0;
  7189. 8003762: 2300 movs r3, #0
  7190. 8003764: 64bb str r3, [r7, #72] @ 0x48
  7191. #ifdef DBG_POSITION
  7192. printf ("Axe %c stop phase\n", posCtrlTaskArg->axe);
  7193. 8003766: 6bfb ldr r3, [r7, #60] @ 0x3c
  7194. 8003768: f893 3030 ldrb.w r3, [r3, #48] @ 0x30
  7195. 800376c: 4619 mov r1, r3
  7196. 800376e: 483f ldr r0, [pc, #252] @ (800386c <PositionControlTask+0x580>)
  7197. 8003770: f014 f944 bl 80179fc <iprintf>
  7198. #endif
  7199. break;
  7200. 8003774: e057 b.n 8003826 <PositionControlTask+0x53a>
  7201. case stopPhase:
  7202. float posDiff = sign > 0 ? posCtrlData.positionSettingValue - *posCtrlTaskArg->currentPosition : *posCtrlTaskArg->currentPosition - posCtrlData.positionSettingValue;
  7203. 8003776: 6dbb ldr r3, [r7, #88] @ 0x58
  7204. 8003778: 2b00 cmp r3, #0
  7205. 800377a: dd08 ble.n 800378e <PositionControlTask+0x4a2>
  7206. 800377c: ed94 7a00 vldr s14, [r4]
  7207. 8003780: 6bfb ldr r3, [r7, #60] @ 0x3c
  7208. 8003782: 6a1b ldr r3, [r3, #32]
  7209. 8003784: edd3 7a00 vldr s15, [r3]
  7210. 8003788: ee77 7a67 vsub.f32 s15, s14, s15
  7211. 800378c: e007 b.n 800379e <PositionControlTask+0x4b2>
  7212. 800378e: 6bfb ldr r3, [r7, #60] @ 0x3c
  7213. 8003790: 6a1b ldr r3, [r3, #32]
  7214. 8003792: ed93 7a00 vldr s14, [r3]
  7215. 8003796: edd4 7a00 vldr s15, [r4]
  7216. 800379a: ee77 7a67 vsub.f32 s15, s14, s15
  7217. 800379e: edc7 7a0c vstr s15, [r7, #48] @ 0x30
  7218. if ((posDiff <= 0) || (timeLeftMS >= TIME_MS_FOR_MOTOR_SPEED_LIMIT)) {
  7219. 80037a2: edd7 7a0c vldr s15, [r7, #48] @ 0x30
  7220. 80037a6: eef5 7ac0 vcmpe.f32 s15, #0.0
  7221. 80037aa: eef1 fa10 vmrs APSR_nzcv, fpscr
  7222. 80037ae: d904 bls.n 80037ba <PositionControlTask+0x4ce>
  7223. 80037b0: 6cbb ldr r3, [r7, #72] @ 0x48
  7224. 80037b2: f241 3287 movw r2, #4999 @ 0x1387
  7225. 80037b6: 4293 cmp r3, r2
  7226. 80037b8: dd34 ble.n 8003824 <PositionControlTask+0x538>
  7227. motorStatus = MotorControl (posCtrlTaskArg->htim, posCtrlTaskArg->motorTimerConfigOC, posCtrlTaskArg->channel1, posCtrlTaskArg->channel2, posCtrlTaskArg->motorTimerHandle,
  7228. 80037ba: 6bfb ldr r3, [r7, #60] @ 0x3c
  7229. 80037bc: 6818 ldr r0, [r3, #0]
  7230. 80037be: 6bfb ldr r3, [r7, #60] @ 0x3c
  7231. 80037c0: 685d ldr r5, [r3, #4]
  7232. 80037c2: 6bfb ldr r3, [r7, #60] @ 0x3c
  7233. 80037c4: 7a1e ldrb r6, [r3, #8]
  7234. 80037c6: 6bfb ldr r3, [r7, #60] @ 0x3c
  7235. 80037c8: f893 c009 ldrb.w ip, [r3, #9]
  7236. 80037cc: 6bfb ldr r3, [r7, #60] @ 0x3c
  7237. 80037ce: 68db ldr r3, [r3, #12]
  7238. 0, 0, *posCtrlTaskArg->switchLimiterUpStat, *posCtrlTaskArg->switchLimiterDownStat);
  7239. 80037d0: 6bfa ldr r2, [r7, #60] @ 0x3c
  7240. 80037d2: 6952 ldr r2, [r2, #20]
  7241. motorStatus = MotorControl (posCtrlTaskArg->htim, posCtrlTaskArg->motorTimerConfigOC, posCtrlTaskArg->channel1, posCtrlTaskArg->channel2, posCtrlTaskArg->motorTimerHandle,
  7242. 80037d4: 7812 ldrb r2, [r2, #0]
  7243. 0, 0, *posCtrlTaskArg->switchLimiterUpStat, *posCtrlTaskArg->switchLimiterDownStat);
  7244. 80037d6: 6bf9 ldr r1, [r7, #60] @ 0x3c
  7245. 80037d8: 6989 ldr r1, [r1, #24]
  7246. motorStatus = MotorControl (posCtrlTaskArg->htim, posCtrlTaskArg->motorTimerConfigOC, posCtrlTaskArg->channel1, posCtrlTaskArg->channel2, posCtrlTaskArg->motorTimerHandle,
  7247. 80037da: 7809 ldrb r1, [r1, #0]
  7248. 80037dc: 9104 str r1, [sp, #16]
  7249. 80037de: 9203 str r2, [sp, #12]
  7250. 80037e0: 2200 movs r2, #0
  7251. 80037e2: 9202 str r2, [sp, #8]
  7252. 80037e4: 2200 movs r2, #0
  7253. 80037e6: 9201 str r2, [sp, #4]
  7254. 80037e8: 9300 str r3, [sp, #0]
  7255. 80037ea: 4663 mov r3, ip
  7256. 80037ec: 4632 mov r2, r6
  7257. 80037ee: 4629 mov r1, r5
  7258. 80037f0: f7ff fb22 bl 8002e38 <MotorControl>
  7259. 80037f4: 4603 mov r3, r0
  7260. 80037f6: 63bb str r3, [r7, #56] @ 0x38
  7261. *posCtrlTaskArg->motorStatus = motorStatus;
  7262. 80037f8: 6bfb ldr r3, [r7, #60] @ 0x3c
  7263. 80037fa: 6a9b ldr r3, [r3, #40] @ 0x28
  7264. 80037fc: 6bba ldr r2, [r7, #56] @ 0x38
  7265. 80037fe: b2d2 uxtb r2, r2
  7266. 8003800: 701a strb r2, [r3, #0]
  7267. movementPhase = idlePhase;
  7268. 8003802: 2300 movs r3, #0
  7269. 8003804: f887 3057 strb.w r3, [r7, #87] @ 0x57
  7270. #ifdef DBG_POSITION
  7271. printf ("Axe %c idle phase\n", posCtrlTaskArg->axe);
  7272. 8003808: 6bfb ldr r3, [r7, #60] @ 0x3c
  7273. 800380a: f893 3030 ldrb.w r3, [r3, #48] @ 0x30
  7274. 800380e: 4619 mov r1, r3
  7275. 8003810: 4813 ldr r0, [pc, #76] @ (8003860 <PositionControlTask+0x574>)
  7276. 8003812: f014 f8f3 bl 80179fc <iprintf>
  7277. #endif
  7278. }
  7279. break;
  7280. 8003816: e005 b.n 8003824 <PositionControlTask+0x538>
  7281. default: break;
  7282. 8003818: bf00 nop
  7283. 800381a: e018 b.n 800384e <PositionControlTask+0x562>
  7284. break;
  7285. 800381c: bf00 nop
  7286. 800381e: e016 b.n 800384e <PositionControlTask+0x562>
  7287. break;
  7288. 8003820: bf00 nop
  7289. 8003822: e014 b.n 800384e <PositionControlTask+0x562>
  7290. break;
  7291. 8003824: bf00 nop
  7292. switch (movementPhase) {
  7293. 8003826: e012 b.n 800384e <PositionControlTask+0x562>
  7294. }
  7295. } else {
  7296. if ((*posCtrlTaskArg->motorStatus == 0) && (movementPhase != idlePhase)) {
  7297. 8003828: 6bfb ldr r3, [r7, #60] @ 0x3c
  7298. 800382a: 6a9b ldr r3, [r3, #40] @ 0x28
  7299. 800382c: 781b ldrb r3, [r3, #0]
  7300. 800382e: 2b00 cmp r3, #0
  7301. 8003830: d10d bne.n 800384e <PositionControlTask+0x562>
  7302. 8003832: f897 3057 ldrb.w r3, [r7, #87] @ 0x57
  7303. 8003836: 2b00 cmp r3, #0
  7304. 8003838: d009 beq.n 800384e <PositionControlTask+0x562>
  7305. movementPhase = idlePhase;
  7306. 800383a: 2300 movs r3, #0
  7307. 800383c: f887 3057 strb.w r3, [r7, #87] @ 0x57
  7308. #ifdef DBG_POSITION
  7309. printf ("Axe %c idle phase\n", posCtrlTaskArg->axe);
  7310. 8003840: 6bfb ldr r3, [r7, #60] @ 0x3c
  7311. 8003842: f893 3030 ldrb.w r3, [r3, #48] @ 0x30
  7312. 8003846: 4619 mov r1, r3
  7313. 8003848: 4805 ldr r0, [pc, #20] @ (8003860 <PositionControlTask+0x574>)
  7314. 800384a: f014 f8d7 bl 80179fc <iprintf>
  7315. #endif
  7316. }
  7317. }
  7318. osMutexRelease (sensorsInfoMutex);
  7319. 800384e: 4b08 ldr r3, [pc, #32] @ (8003870 <PositionControlTask+0x584>)
  7320. 8003850: 681b ldr r3, [r3, #0]
  7321. 8003852: 4618 mov r0, r3
  7322. 8003854: f010 f934 bl 8013ac0 <osMutexRelease>
  7323. queueSatus = osMessageQueueGet (posCtrlTaskArg->positionSettingQueue, &posCtrlData, 0, pdMS_TO_TICKS (PositionControlTaskTimeOut));
  7324. 8003858: e56c b.n 8003334 <PositionControlTask+0x48>
  7325. 800385a: bf00 nop
  7326. 800385c: 08018a74 .word 0x08018a74
  7327. 8003860: 08018a8c .word 0x08018a8c
  7328. 8003864: 08018aa0 .word 0x08018aa0
  7329. 8003868: 08018ab4 .word 0x08018ab4
  7330. 800386c: 08018acc .word 0x08018acc
  7331. 8003870: 24000790 .word 0x24000790
  7332. 08003874 <WriteDataToBuffer>:
  7333. buff[newBuffPos++] = (uint8_t)((uData >> (i * 8)) & 0xFF);
  7334. }
  7335. *buffPos = newBuffPos;
  7336. }
  7337. void WriteDataToBuffer (uint8_t* buff, uint16_t* buffPos, void* data, uint8_t dataSize) {
  7338. 8003874: b480 push {r7}
  7339. 8003876: b089 sub sp, #36 @ 0x24
  7340. 8003878: af00 add r7, sp, #0
  7341. 800387a: 60f8 str r0, [r7, #12]
  7342. 800387c: 60b9 str r1, [r7, #8]
  7343. 800387e: 607a str r2, [r7, #4]
  7344. 8003880: 70fb strb r3, [r7, #3]
  7345. uint32_t* uDataPtr = data;
  7346. 8003882: 687b ldr r3, [r7, #4]
  7347. 8003884: 61bb str r3, [r7, #24]
  7348. uint32_t uData = *uDataPtr;
  7349. 8003886: 69bb ldr r3, [r7, #24]
  7350. 8003888: 681b ldr r3, [r3, #0]
  7351. 800388a: 617b str r3, [r7, #20]
  7352. uint8_t i = 0;
  7353. 800388c: 2300 movs r3, #0
  7354. 800388e: 77fb strb r3, [r7, #31]
  7355. uint8_t newBuffPos = *buffPos;
  7356. 8003890: 68bb ldr r3, [r7, #8]
  7357. 8003892: 881b ldrh r3, [r3, #0]
  7358. 8003894: 77bb strb r3, [r7, #30]
  7359. for (i = 0; i < dataSize; i++) {
  7360. 8003896: 2300 movs r3, #0
  7361. 8003898: 77fb strb r3, [r7, #31]
  7362. 800389a: e00e b.n 80038ba <WriteDataToBuffer+0x46>
  7363. buff[newBuffPos++] = (uint8_t)((uData >> (i * 8)) & 0xFF);
  7364. 800389c: 7ffb ldrb r3, [r7, #31]
  7365. 800389e: 00db lsls r3, r3, #3
  7366. 80038a0: 697a ldr r2, [r7, #20]
  7367. 80038a2: 40da lsrs r2, r3
  7368. 80038a4: 7fbb ldrb r3, [r7, #30]
  7369. 80038a6: 1c59 adds r1, r3, #1
  7370. 80038a8: 77b9 strb r1, [r7, #30]
  7371. 80038aa: 4619 mov r1, r3
  7372. 80038ac: 68fb ldr r3, [r7, #12]
  7373. 80038ae: 440b add r3, r1
  7374. 80038b0: b2d2 uxtb r2, r2
  7375. 80038b2: 701a strb r2, [r3, #0]
  7376. for (i = 0; i < dataSize; i++) {
  7377. 80038b4: 7ffb ldrb r3, [r7, #31]
  7378. 80038b6: 3301 adds r3, #1
  7379. 80038b8: 77fb strb r3, [r7, #31]
  7380. 80038ba: 7ffa ldrb r2, [r7, #31]
  7381. 80038bc: 78fb ldrb r3, [r7, #3]
  7382. 80038be: 429a cmp r2, r3
  7383. 80038c0: d3ec bcc.n 800389c <WriteDataToBuffer+0x28>
  7384. }
  7385. *buffPos = newBuffPos;
  7386. 80038c2: 7fbb ldrb r3, [r7, #30]
  7387. 80038c4: b29a uxth r2, r3
  7388. 80038c6: 68bb ldr r3, [r7, #8]
  7389. 80038c8: 801a strh r2, [r3, #0]
  7390. }
  7391. 80038ca: bf00 nop
  7392. 80038cc: 3724 adds r7, #36 @ 0x24
  7393. 80038ce: 46bd mov sp, r7
  7394. 80038d0: f85d 7b04 ldr.w r7, [sp], #4
  7395. 80038d4: 4770 bx lr
  7396. 080038d6 <ReadFloatFromBuffer>:
  7397. void ReadFloatFromBuffer(uint8_t* buff, uint16_t* buffPos, float* data)
  7398. {
  7399. 80038d6: b480 push {r7}
  7400. 80038d8: b087 sub sp, #28
  7401. 80038da: af00 add r7, sp, #0
  7402. 80038dc: 60f8 str r0, [r7, #12]
  7403. 80038de: 60b9 str r1, [r7, #8]
  7404. 80038e0: 607a str r2, [r7, #4]
  7405. uint32_t* word = (uint32_t *)data;
  7406. 80038e2: 687b ldr r3, [r7, #4]
  7407. 80038e4: 617b str r3, [r7, #20]
  7408. *word = CONVERT_BYTES_TO_WORD(&buff[*buffPos]);
  7409. 80038e6: 68bb ldr r3, [r7, #8]
  7410. 80038e8: 881b ldrh r3, [r3, #0]
  7411. 80038ea: 3303 adds r3, #3
  7412. 80038ec: 68fa ldr r2, [r7, #12]
  7413. 80038ee: 4413 add r3, r2
  7414. 80038f0: 781b ldrb r3, [r3, #0]
  7415. 80038f2: 061a lsls r2, r3, #24
  7416. 80038f4: 68bb ldr r3, [r7, #8]
  7417. 80038f6: 881b ldrh r3, [r3, #0]
  7418. 80038f8: 3302 adds r3, #2
  7419. 80038fa: 68f9 ldr r1, [r7, #12]
  7420. 80038fc: 440b add r3, r1
  7421. 80038fe: 781b ldrb r3, [r3, #0]
  7422. 8003900: 041b lsls r3, r3, #16
  7423. 8003902: 431a orrs r2, r3
  7424. 8003904: 68bb ldr r3, [r7, #8]
  7425. 8003906: 881b ldrh r3, [r3, #0]
  7426. 8003908: 3301 adds r3, #1
  7427. 800390a: 68f9 ldr r1, [r7, #12]
  7428. 800390c: 440b add r3, r1
  7429. 800390e: 781b ldrb r3, [r3, #0]
  7430. 8003910: 021b lsls r3, r3, #8
  7431. 8003912: 4313 orrs r3, r2
  7432. 8003914: 68ba ldr r2, [r7, #8]
  7433. 8003916: 8812 ldrh r2, [r2, #0]
  7434. 8003918: 4611 mov r1, r2
  7435. 800391a: 68fa ldr r2, [r7, #12]
  7436. 800391c: 440a add r2, r1
  7437. 800391e: 7812 ldrb r2, [r2, #0]
  7438. 8003920: 4313 orrs r3, r2
  7439. 8003922: 461a mov r2, r3
  7440. 8003924: 697b ldr r3, [r7, #20]
  7441. 8003926: 601a str r2, [r3, #0]
  7442. *buffPos += sizeof(float);
  7443. 8003928: 68bb ldr r3, [r7, #8]
  7444. 800392a: 881b ldrh r3, [r3, #0]
  7445. 800392c: 3304 adds r3, #4
  7446. 800392e: b29a uxth r2, r3
  7447. 8003930: 68bb ldr r3, [r7, #8]
  7448. 8003932: 801a strh r2, [r3, #0]
  7449. }
  7450. 8003934: bf00 nop
  7451. 8003936: 371c adds r7, #28
  7452. 8003938: 46bd mov sp, r7
  7453. 800393a: f85d 7b04 ldr.w r7, [sp], #4
  7454. 800393e: 4770 bx lr
  7455. 08003940 <ReadWordFromBufer>:
  7456. *data = CONVERT_BYTES_TO_SHORT_WORD(&buff[*buffPos]);
  7457. *buffPos += sizeof(uint16_t);
  7458. }
  7459. void ReadWordFromBufer(uint8_t* buff, uint16_t* buffPos, uint32_t* data)
  7460. {
  7461. 8003940: b480 push {r7}
  7462. 8003942: b085 sub sp, #20
  7463. 8003944: af00 add r7, sp, #0
  7464. 8003946: 60f8 str r0, [r7, #12]
  7465. 8003948: 60b9 str r1, [r7, #8]
  7466. 800394a: 607a str r2, [r7, #4]
  7467. *data = CONVERT_BYTES_TO_WORD(&buff[*buffPos]);
  7468. 800394c: 68bb ldr r3, [r7, #8]
  7469. 800394e: 881b ldrh r3, [r3, #0]
  7470. 8003950: 3303 adds r3, #3
  7471. 8003952: 68fa ldr r2, [r7, #12]
  7472. 8003954: 4413 add r3, r2
  7473. 8003956: 781b ldrb r3, [r3, #0]
  7474. 8003958: 061a lsls r2, r3, #24
  7475. 800395a: 68bb ldr r3, [r7, #8]
  7476. 800395c: 881b ldrh r3, [r3, #0]
  7477. 800395e: 3302 adds r3, #2
  7478. 8003960: 68f9 ldr r1, [r7, #12]
  7479. 8003962: 440b add r3, r1
  7480. 8003964: 781b ldrb r3, [r3, #0]
  7481. 8003966: 041b lsls r3, r3, #16
  7482. 8003968: 431a orrs r2, r3
  7483. 800396a: 68bb ldr r3, [r7, #8]
  7484. 800396c: 881b ldrh r3, [r3, #0]
  7485. 800396e: 3301 adds r3, #1
  7486. 8003970: 68f9 ldr r1, [r7, #12]
  7487. 8003972: 440b add r3, r1
  7488. 8003974: 781b ldrb r3, [r3, #0]
  7489. 8003976: 021b lsls r3, r3, #8
  7490. 8003978: 4313 orrs r3, r2
  7491. 800397a: 68ba ldr r2, [r7, #8]
  7492. 800397c: 8812 ldrh r2, [r2, #0]
  7493. 800397e: 4611 mov r1, r2
  7494. 8003980: 68fa ldr r2, [r7, #12]
  7495. 8003982: 440a add r2, r1
  7496. 8003984: 7812 ldrb r2, [r2, #0]
  7497. 8003986: 4313 orrs r3, r2
  7498. 8003988: 461a mov r2, r3
  7499. 800398a: 687b ldr r3, [r7, #4]
  7500. 800398c: 601a str r2, [r3, #0]
  7501. *buffPos += sizeof(uint32_t);
  7502. 800398e: 68bb ldr r3, [r7, #8]
  7503. 8003990: 881b ldrh r3, [r3, #0]
  7504. 8003992: 3304 adds r3, #4
  7505. 8003994: b29a uxth r2, r3
  7506. 8003996: 68bb ldr r3, [r7, #8]
  7507. 8003998: 801a strh r2, [r3, #0]
  7508. }
  7509. 800399a: bf00 nop
  7510. 800399c: 3714 adds r7, #20
  7511. 800399e: 46bd mov sp, r7
  7512. 80039a0: f85d 7b04 ldr.w r7, [sp], #4
  7513. 80039a4: 4770 bx lr
  7514. ...
  7515. 080039a8 <PrepareRespFrame>:
  7516. txBuffer[txBufferPos++] = GET_SHORT_WORD_SECOND_BYTE (crc);
  7517. return txBufferPos;
  7518. }
  7519. uint16_t PrepareRespFrame (uint8_t* txBuffer, uint16_t frameId, SerialProtocolCommands frameCommand, SerialProtocolRespStatus respStatus, uint8_t* dataBuffer, uint16_t dataLength) {
  7520. 80039a8: b580 push {r7, lr}
  7521. 80039aa: b084 sub sp, #16
  7522. 80039ac: af00 add r7, sp, #0
  7523. 80039ae: 6078 str r0, [r7, #4]
  7524. 80039b0: 4608 mov r0, r1
  7525. 80039b2: 4611 mov r1, r2
  7526. 80039b4: 461a mov r2, r3
  7527. 80039b6: 4603 mov r3, r0
  7528. 80039b8: 807b strh r3, [r7, #2]
  7529. 80039ba: 460b mov r3, r1
  7530. 80039bc: 707b strb r3, [r7, #1]
  7531. 80039be: 4613 mov r3, r2
  7532. 80039c0: 703b strb r3, [r7, #0]
  7533. uint16_t crc = 0;
  7534. 80039c2: 2300 movs r3, #0
  7535. 80039c4: 81bb strh r3, [r7, #12]
  7536. uint16_t txBufferPos = 0;
  7537. 80039c6: 2300 movs r3, #0
  7538. 80039c8: 81fb strh r3, [r7, #14]
  7539. uint16_t frameCmd = ((uint16_t)frameCommand) | 0x8000; // MSB set means response
  7540. 80039ca: 787b ldrb r3, [r7, #1]
  7541. 80039cc: b21a sxth r2, r3
  7542. 80039ce: 4b43 ldr r3, [pc, #268] @ (8003adc <PrepareRespFrame+0x134>)
  7543. 80039d0: 4313 orrs r3, r2
  7544. 80039d2: b21b sxth r3, r3
  7545. 80039d4: 817b strh r3, [r7, #10]
  7546. memset (txBuffer, 0x00, dataLength);
  7547. 80039d6: 8bbb ldrh r3, [r7, #28]
  7548. 80039d8: 461a mov r2, r3
  7549. 80039da: 2100 movs r1, #0
  7550. 80039dc: 6878 ldr r0, [r7, #4]
  7551. 80039de: f014 f955 bl 8017c8c <memset>
  7552. txBuffer[txBufferPos++] = FRAME_INDICATOR;
  7553. 80039e2: 89fb ldrh r3, [r7, #14]
  7554. 80039e4: 1c5a adds r2, r3, #1
  7555. 80039e6: 81fa strh r2, [r7, #14]
  7556. 80039e8: 461a mov r2, r3
  7557. 80039ea: 687b ldr r3, [r7, #4]
  7558. 80039ec: 4413 add r3, r2
  7559. 80039ee: 22aa movs r2, #170 @ 0xaa
  7560. 80039f0: 701a strb r2, [r3, #0]
  7561. txBuffer[txBufferPos++] = GET_SHORT_WORD_FIRST_BYTE (frameId);
  7562. 80039f2: 89fb ldrh r3, [r7, #14]
  7563. 80039f4: 1c5a adds r2, r3, #1
  7564. 80039f6: 81fa strh r2, [r7, #14]
  7565. 80039f8: 461a mov r2, r3
  7566. 80039fa: 687b ldr r3, [r7, #4]
  7567. 80039fc: 4413 add r3, r2
  7568. 80039fe: 887a ldrh r2, [r7, #2]
  7569. 8003a00: b2d2 uxtb r2, r2
  7570. 8003a02: 701a strb r2, [r3, #0]
  7571. txBuffer[txBufferPos++] = GET_SHORT_WORD_SECOND_BYTE (frameId);
  7572. 8003a04: 887b ldrh r3, [r7, #2]
  7573. 8003a06: 0a1b lsrs r3, r3, #8
  7574. 8003a08: b29a uxth r2, r3
  7575. 8003a0a: 89fb ldrh r3, [r7, #14]
  7576. 8003a0c: 1c59 adds r1, r3, #1
  7577. 8003a0e: 81f9 strh r1, [r7, #14]
  7578. 8003a10: 4619 mov r1, r3
  7579. 8003a12: 687b ldr r3, [r7, #4]
  7580. 8003a14: 440b add r3, r1
  7581. 8003a16: b2d2 uxtb r2, r2
  7582. 8003a18: 701a strb r2, [r3, #0]
  7583. txBuffer[txBufferPos++] = GET_SHORT_WORD_FIRST_BYTE (frameCmd);
  7584. 8003a1a: 89fb ldrh r3, [r7, #14]
  7585. 8003a1c: 1c5a adds r2, r3, #1
  7586. 8003a1e: 81fa strh r2, [r7, #14]
  7587. 8003a20: 461a mov r2, r3
  7588. 8003a22: 687b ldr r3, [r7, #4]
  7589. 8003a24: 4413 add r3, r2
  7590. 8003a26: 897a ldrh r2, [r7, #10]
  7591. 8003a28: b2d2 uxtb r2, r2
  7592. 8003a2a: 701a strb r2, [r3, #0]
  7593. txBuffer[txBufferPos++] = GET_SHORT_WORD_SECOND_BYTE (frameCmd);
  7594. 8003a2c: 897b ldrh r3, [r7, #10]
  7595. 8003a2e: 0a1b lsrs r3, r3, #8
  7596. 8003a30: b29a uxth r2, r3
  7597. 8003a32: 89fb ldrh r3, [r7, #14]
  7598. 8003a34: 1c59 adds r1, r3, #1
  7599. 8003a36: 81f9 strh r1, [r7, #14]
  7600. 8003a38: 4619 mov r1, r3
  7601. 8003a3a: 687b ldr r3, [r7, #4]
  7602. 8003a3c: 440b add r3, r1
  7603. 8003a3e: b2d2 uxtb r2, r2
  7604. 8003a40: 701a strb r2, [r3, #0]
  7605. txBuffer[txBufferPos++] = GET_SHORT_WORD_FIRST_BYTE (dataLength);
  7606. 8003a42: 89fb ldrh r3, [r7, #14]
  7607. 8003a44: 1c5a adds r2, r3, #1
  7608. 8003a46: 81fa strh r2, [r7, #14]
  7609. 8003a48: 461a mov r2, r3
  7610. 8003a4a: 687b ldr r3, [r7, #4]
  7611. 8003a4c: 4413 add r3, r2
  7612. 8003a4e: 8bba ldrh r2, [r7, #28]
  7613. 8003a50: b2d2 uxtb r2, r2
  7614. 8003a52: 701a strb r2, [r3, #0]
  7615. txBuffer[txBufferPos++] = GET_SHORT_WORD_SECOND_BYTE (dataLength);
  7616. 8003a54: 8bbb ldrh r3, [r7, #28]
  7617. 8003a56: 0a1b lsrs r3, r3, #8
  7618. 8003a58: b29a uxth r2, r3
  7619. 8003a5a: 89fb ldrh r3, [r7, #14]
  7620. 8003a5c: 1c59 adds r1, r3, #1
  7621. 8003a5e: 81f9 strh r1, [r7, #14]
  7622. 8003a60: 4619 mov r1, r3
  7623. 8003a62: 687b ldr r3, [r7, #4]
  7624. 8003a64: 440b add r3, r1
  7625. 8003a66: b2d2 uxtb r2, r2
  7626. 8003a68: 701a strb r2, [r3, #0]
  7627. txBuffer[txBufferPos++] = (uint8_t)respStatus;
  7628. 8003a6a: 89fb ldrh r3, [r7, #14]
  7629. 8003a6c: 1c5a adds r2, r3, #1
  7630. 8003a6e: 81fa strh r2, [r7, #14]
  7631. 8003a70: 461a mov r2, r3
  7632. 8003a72: 687b ldr r3, [r7, #4]
  7633. 8003a74: 4413 add r3, r2
  7634. 8003a76: 783a ldrb r2, [r7, #0]
  7635. 8003a78: 701a strb r2, [r3, #0]
  7636. if (dataLength > 0) {
  7637. 8003a7a: 8bbb ldrh r3, [r7, #28]
  7638. 8003a7c: 2b00 cmp r3, #0
  7639. 8003a7e: d00b beq.n 8003a98 <PrepareRespFrame+0xf0>
  7640. memcpy (&txBuffer[txBufferPos], dataBuffer, dataLength);
  7641. 8003a80: 89fb ldrh r3, [r7, #14]
  7642. 8003a82: 687a ldr r2, [r7, #4]
  7643. 8003a84: 4413 add r3, r2
  7644. 8003a86: 8bba ldrh r2, [r7, #28]
  7645. 8003a88: 69b9 ldr r1, [r7, #24]
  7646. 8003a8a: 4618 mov r0, r3
  7647. 8003a8c: f014 f9cf bl 8017e2e <memcpy>
  7648. txBufferPos += dataLength;
  7649. 8003a90: 89fa ldrh r2, [r7, #14]
  7650. 8003a92: 8bbb ldrh r3, [r7, #28]
  7651. 8003a94: 4413 add r3, r2
  7652. 8003a96: 81fb strh r3, [r7, #14]
  7653. }
  7654. crc = HAL_CRC_Calculate (&hcrc, (uint32_t*)txBuffer, txBufferPos);
  7655. 8003a98: 89fb ldrh r3, [r7, #14]
  7656. 8003a9a: 461a mov r2, r3
  7657. 8003a9c: 6879 ldr r1, [r7, #4]
  7658. 8003a9e: 4810 ldr r0, [pc, #64] @ (8003ae0 <PrepareRespFrame+0x138>)
  7659. 8003aa0: f004 f830 bl 8007b04 <HAL_CRC_Calculate>
  7660. 8003aa4: 4603 mov r3, r0
  7661. 8003aa6: 81bb strh r3, [r7, #12]
  7662. txBuffer[txBufferPos++] = GET_SHORT_WORD_FIRST_BYTE (crc);
  7663. 8003aa8: 89fb ldrh r3, [r7, #14]
  7664. 8003aaa: 1c5a adds r2, r3, #1
  7665. 8003aac: 81fa strh r2, [r7, #14]
  7666. 8003aae: 461a mov r2, r3
  7667. 8003ab0: 687b ldr r3, [r7, #4]
  7668. 8003ab2: 4413 add r3, r2
  7669. 8003ab4: 89ba ldrh r2, [r7, #12]
  7670. 8003ab6: b2d2 uxtb r2, r2
  7671. 8003ab8: 701a strb r2, [r3, #0]
  7672. txBuffer[txBufferPos++] = GET_SHORT_WORD_SECOND_BYTE (crc);
  7673. 8003aba: 89bb ldrh r3, [r7, #12]
  7674. 8003abc: 0a1b lsrs r3, r3, #8
  7675. 8003abe: b29a uxth r2, r3
  7676. 8003ac0: 89fb ldrh r3, [r7, #14]
  7677. 8003ac2: 1c59 adds r1, r3, #1
  7678. 8003ac4: 81f9 strh r1, [r7, #14]
  7679. 8003ac6: 4619 mov r1, r3
  7680. 8003ac8: 687b ldr r3, [r7, #4]
  7681. 8003aca: 440b add r3, r1
  7682. 8003acc: b2d2 uxtb r2, r2
  7683. 8003ace: 701a strb r2, [r3, #0]
  7684. return txBufferPos;
  7685. 8003ad0: 89fb ldrh r3, [r7, #14]
  7686. }
  7687. 8003ad2: 4618 mov r0, r3
  7688. 8003ad4: 3710 adds r7, #16
  7689. 8003ad6: 46bd mov sp, r7
  7690. 8003ad8: bd80 pop {r7, pc}
  7691. 8003ada: bf00 nop
  7692. 8003adc: ffff8000 .word 0xffff8000
  7693. 8003ae0: 24000400 .word 0x24000400
  7694. 08003ae4 <HAL_MspInit>:
  7695. void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
  7696. /**
  7697. * Initializes the Global MSP.
  7698. */
  7699. void HAL_MspInit(void)
  7700. {
  7701. 8003ae4: b580 push {r7, lr}
  7702. 8003ae6: b086 sub sp, #24
  7703. 8003ae8: af00 add r7, sp, #0
  7704. /* USER CODE BEGIN MspInit 0 */
  7705. /* USER CODE END MspInit 0 */
  7706. PWREx_AVDTypeDef sConfigAVD = {0};
  7707. 8003aea: f107 0310 add.w r3, r7, #16
  7708. 8003aee: 2200 movs r2, #0
  7709. 8003af0: 601a str r2, [r3, #0]
  7710. 8003af2: 605a str r2, [r3, #4]
  7711. PWR_PVDTypeDef sConfigPVD = {0};
  7712. 8003af4: f107 0308 add.w r3, r7, #8
  7713. 8003af8: 2200 movs r2, #0
  7714. 8003afa: 601a str r2, [r3, #0]
  7715. 8003afc: 605a str r2, [r3, #4]
  7716. __HAL_RCC_SYSCFG_CLK_ENABLE();
  7717. 8003afe: 4b26 ldr r3, [pc, #152] @ (8003b98 <HAL_MspInit+0xb4>)
  7718. 8003b00: f8d3 30f4 ldr.w r3, [r3, #244] @ 0xf4
  7719. 8003b04: 4a24 ldr r2, [pc, #144] @ (8003b98 <HAL_MspInit+0xb4>)
  7720. 8003b06: f043 0302 orr.w r3, r3, #2
  7721. 8003b0a: f8c2 30f4 str.w r3, [r2, #244] @ 0xf4
  7722. 8003b0e: 4b22 ldr r3, [pc, #136] @ (8003b98 <HAL_MspInit+0xb4>)
  7723. 8003b10: f8d3 30f4 ldr.w r3, [r3, #244] @ 0xf4
  7724. 8003b14: f003 0302 and.w r3, r3, #2
  7725. 8003b18: 607b str r3, [r7, #4]
  7726. 8003b1a: 687b ldr r3, [r7, #4]
  7727. /* System interrupt init*/
  7728. /* PendSV_IRQn interrupt configuration */
  7729. HAL_NVIC_SetPriority(PendSV_IRQn, 15, 0);
  7730. 8003b1c: 2200 movs r2, #0
  7731. 8003b1e: 210f movs r1, #15
  7732. 8003b20: f06f 0001 mvn.w r0, #1
  7733. 8003b24: f003 feea bl 80078fc <HAL_NVIC_SetPriority>
  7734. /* Peripheral interrupt init */
  7735. /* RCC_IRQn interrupt configuration */
  7736. HAL_NVIC_SetPriority(RCC_IRQn, 5, 0);
  7737. 8003b28: 2200 movs r2, #0
  7738. 8003b2a: 2105 movs r1, #5
  7739. 8003b2c: 2005 movs r0, #5
  7740. 8003b2e: f003 fee5 bl 80078fc <HAL_NVIC_SetPriority>
  7741. HAL_NVIC_EnableIRQ(RCC_IRQn);
  7742. 8003b32: 2005 movs r0, #5
  7743. 8003b34: f003 fefc bl 8007930 <HAL_NVIC_EnableIRQ>
  7744. /** AVD Configuration
  7745. */
  7746. sConfigAVD.AVDLevel = PWR_AVDLEVEL_3;
  7747. 8003b38: f44f 23c0 mov.w r3, #393216 @ 0x60000
  7748. 8003b3c: 613b str r3, [r7, #16]
  7749. sConfigAVD.Mode = PWR_AVD_MODE_NORMAL;
  7750. 8003b3e: 2300 movs r3, #0
  7751. 8003b40: 617b str r3, [r7, #20]
  7752. HAL_PWREx_ConfigAVD(&sConfigAVD);
  7753. 8003b42: f107 0310 add.w r3, r7, #16
  7754. 8003b46: 4618 mov r0, r3
  7755. 8003b48: f007 fce4 bl 800b514 <HAL_PWREx_ConfigAVD>
  7756. /** Enable the AVD Output
  7757. */
  7758. HAL_PWREx_EnableAVD();
  7759. 8003b4c: f007 fd58 bl 800b600 <HAL_PWREx_EnableAVD>
  7760. /** PVD Configuration
  7761. */
  7762. sConfigPVD.PVDLevel = PWR_PVDLEVEL_6;
  7763. 8003b50: 23c0 movs r3, #192 @ 0xc0
  7764. 8003b52: 60bb str r3, [r7, #8]
  7765. sConfigPVD.Mode = PWR_PVD_MODE_NORMAL;
  7766. 8003b54: 2300 movs r3, #0
  7767. 8003b56: 60fb str r3, [r7, #12]
  7768. HAL_PWR_ConfigPVD(&sConfigPVD);
  7769. 8003b58: f107 0308 add.w r3, r7, #8
  7770. 8003b5c: 4618 mov r0, r3
  7771. 8003b5e: f007 fc15 bl 800b38c <HAL_PWR_ConfigPVD>
  7772. /** Enable the PVD Output
  7773. */
  7774. HAL_PWR_EnablePVD();
  7775. 8003b62: f007 fc8d bl 800b480 <HAL_PWR_EnablePVD>
  7776. /** Enable the VREF clock
  7777. */
  7778. __HAL_RCC_VREF_CLK_ENABLE();
  7779. 8003b66: 4b0c ldr r3, [pc, #48] @ (8003b98 <HAL_MspInit+0xb4>)
  7780. 8003b68: f8d3 30f4 ldr.w r3, [r3, #244] @ 0xf4
  7781. 8003b6c: 4a0a ldr r2, [pc, #40] @ (8003b98 <HAL_MspInit+0xb4>)
  7782. 8003b6e: f443 4300 orr.w r3, r3, #32768 @ 0x8000
  7783. 8003b72: f8c2 30f4 str.w r3, [r2, #244] @ 0xf4
  7784. 8003b76: 4b08 ldr r3, [pc, #32] @ (8003b98 <HAL_MspInit+0xb4>)
  7785. 8003b78: f8d3 30f4 ldr.w r3, [r3, #244] @ 0xf4
  7786. 8003b7c: f403 4300 and.w r3, r3, #32768 @ 0x8000
  7787. 8003b80: 603b str r3, [r7, #0]
  7788. 8003b82: 683b ldr r3, [r7, #0]
  7789. /** Disable the Internal Voltage Reference buffer
  7790. */
  7791. HAL_SYSCFG_DisableVREFBUF();
  7792. 8003b84: f002 f840 bl 8005c08 <HAL_SYSCFG_DisableVREFBUF>
  7793. /** Configure the internal voltage reference buffer high impedance mode
  7794. */
  7795. HAL_SYSCFG_VREFBUF_HighImpedanceConfig(SYSCFG_VREFBUF_HIGH_IMPEDANCE_ENABLE);
  7796. 8003b88: 2002 movs r0, #2
  7797. 8003b8a: f002 f829 bl 8005be0 <HAL_SYSCFG_VREFBUF_HighImpedanceConfig>
  7798. /* USER CODE BEGIN MspInit 1 */
  7799. /* USER CODE END MspInit 1 */
  7800. }
  7801. 8003b8e: bf00 nop
  7802. 8003b90: 3718 adds r7, #24
  7803. 8003b92: 46bd mov sp, r7
  7804. 8003b94: bd80 pop {r7, pc}
  7805. 8003b96: bf00 nop
  7806. 8003b98: 58024400 .word 0x58024400
  7807. 08003b9c <HAL_ADC_MspInit>:
  7808. * This function configures the hardware resources used in this example
  7809. * @param hadc: ADC handle pointer
  7810. * @retval None
  7811. */
  7812. void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
  7813. {
  7814. 8003b9c: b580 push {r7, lr}
  7815. 8003b9e: b092 sub sp, #72 @ 0x48
  7816. 8003ba0: af00 add r7, sp, #0
  7817. 8003ba2: 6078 str r0, [r7, #4]
  7818. GPIO_InitTypeDef GPIO_InitStruct = {0};
  7819. 8003ba4: f107 0334 add.w r3, r7, #52 @ 0x34
  7820. 8003ba8: 2200 movs r2, #0
  7821. 8003baa: 601a str r2, [r3, #0]
  7822. 8003bac: 605a str r2, [r3, #4]
  7823. 8003bae: 609a str r2, [r3, #8]
  7824. 8003bb0: 60da str r2, [r3, #12]
  7825. 8003bb2: 611a str r2, [r3, #16]
  7826. if(hadc->Instance==ADC1)
  7827. 8003bb4: 687b ldr r3, [r7, #4]
  7828. 8003bb6: 681b ldr r3, [r3, #0]
  7829. 8003bb8: 4a9d ldr r2, [pc, #628] @ (8003e30 <HAL_ADC_MspInit+0x294>)
  7830. 8003bba: 4293 cmp r3, r2
  7831. 8003bbc: f040 8099 bne.w 8003cf2 <HAL_ADC_MspInit+0x156>
  7832. {
  7833. /* USER CODE BEGIN ADC1_MspInit 0 */
  7834. /* USER CODE END ADC1_MspInit 0 */
  7835. /* Peripheral clock enable */
  7836. HAL_RCC_ADC12_CLK_ENABLED++;
  7837. 8003bc0: 4b9c ldr r3, [pc, #624] @ (8003e34 <HAL_ADC_MspInit+0x298>)
  7838. 8003bc2: 681b ldr r3, [r3, #0]
  7839. 8003bc4: 3301 adds r3, #1
  7840. 8003bc6: 4a9b ldr r2, [pc, #620] @ (8003e34 <HAL_ADC_MspInit+0x298>)
  7841. 8003bc8: 6013 str r3, [r2, #0]
  7842. if(HAL_RCC_ADC12_CLK_ENABLED==1){
  7843. 8003bca: 4b9a ldr r3, [pc, #616] @ (8003e34 <HAL_ADC_MspInit+0x298>)
  7844. 8003bcc: 681b ldr r3, [r3, #0]
  7845. 8003bce: 2b01 cmp r3, #1
  7846. 8003bd0: d10e bne.n 8003bf0 <HAL_ADC_MspInit+0x54>
  7847. __HAL_RCC_ADC12_CLK_ENABLE();
  7848. 8003bd2: 4b99 ldr r3, [pc, #612] @ (8003e38 <HAL_ADC_MspInit+0x29c>)
  7849. 8003bd4: f8d3 30d8 ldr.w r3, [r3, #216] @ 0xd8
  7850. 8003bd8: 4a97 ldr r2, [pc, #604] @ (8003e38 <HAL_ADC_MspInit+0x29c>)
  7851. 8003bda: f043 0320 orr.w r3, r3, #32
  7852. 8003bde: f8c2 30d8 str.w r3, [r2, #216] @ 0xd8
  7853. 8003be2: 4b95 ldr r3, [pc, #596] @ (8003e38 <HAL_ADC_MspInit+0x29c>)
  7854. 8003be4: f8d3 30d8 ldr.w r3, [r3, #216] @ 0xd8
  7855. 8003be8: f003 0320 and.w r3, r3, #32
  7856. 8003bec: 633b str r3, [r7, #48] @ 0x30
  7857. 8003bee: 6b3b ldr r3, [r7, #48] @ 0x30
  7858. }
  7859. __HAL_RCC_GPIOA_CLK_ENABLE();
  7860. 8003bf0: 4b91 ldr r3, [pc, #580] @ (8003e38 <HAL_ADC_MspInit+0x29c>)
  7861. 8003bf2: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  7862. 8003bf6: 4a90 ldr r2, [pc, #576] @ (8003e38 <HAL_ADC_MspInit+0x29c>)
  7863. 8003bf8: f043 0301 orr.w r3, r3, #1
  7864. 8003bfc: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  7865. 8003c00: 4b8d ldr r3, [pc, #564] @ (8003e38 <HAL_ADC_MspInit+0x29c>)
  7866. 8003c02: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  7867. 8003c06: f003 0301 and.w r3, r3, #1
  7868. 8003c0a: 62fb str r3, [r7, #44] @ 0x2c
  7869. 8003c0c: 6afb ldr r3, [r7, #44] @ 0x2c
  7870. __HAL_RCC_GPIOC_CLK_ENABLE();
  7871. 8003c0e: 4b8a ldr r3, [pc, #552] @ (8003e38 <HAL_ADC_MspInit+0x29c>)
  7872. 8003c10: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  7873. 8003c14: 4a88 ldr r2, [pc, #544] @ (8003e38 <HAL_ADC_MspInit+0x29c>)
  7874. 8003c16: f043 0304 orr.w r3, r3, #4
  7875. 8003c1a: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  7876. 8003c1e: 4b86 ldr r3, [pc, #536] @ (8003e38 <HAL_ADC_MspInit+0x29c>)
  7877. 8003c20: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  7878. 8003c24: f003 0304 and.w r3, r3, #4
  7879. 8003c28: 62bb str r3, [r7, #40] @ 0x28
  7880. 8003c2a: 6abb ldr r3, [r7, #40] @ 0x28
  7881. __HAL_RCC_GPIOB_CLK_ENABLE();
  7882. 8003c2c: 4b82 ldr r3, [pc, #520] @ (8003e38 <HAL_ADC_MspInit+0x29c>)
  7883. 8003c2e: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  7884. 8003c32: 4a81 ldr r2, [pc, #516] @ (8003e38 <HAL_ADC_MspInit+0x29c>)
  7885. 8003c34: f043 0302 orr.w r3, r3, #2
  7886. 8003c38: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  7887. 8003c3c: 4b7e ldr r3, [pc, #504] @ (8003e38 <HAL_ADC_MspInit+0x29c>)
  7888. 8003c3e: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  7889. 8003c42: f003 0302 and.w r3, r3, #2
  7890. 8003c46: 627b str r3, [r7, #36] @ 0x24
  7891. 8003c48: 6a7b ldr r3, [r7, #36] @ 0x24
  7892. PA3 ------> ADC1_INP15
  7893. PA7 ------> ADC1_INP7
  7894. PC5 ------> ADC1_INP8
  7895. PB0 ------> ADC1_INP9
  7896. */
  7897. GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
  7898. 8003c4a: 238f movs r3, #143 @ 0x8f
  7899. 8003c4c: 637b str r3, [r7, #52] @ 0x34
  7900. |GPIO_PIN_7;
  7901. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  7902. 8003c4e: 2303 movs r3, #3
  7903. 8003c50: 63bb str r3, [r7, #56] @ 0x38
  7904. GPIO_InitStruct.Pull = GPIO_NOPULL;
  7905. 8003c52: 2300 movs r3, #0
  7906. 8003c54: 63fb str r3, [r7, #60] @ 0x3c
  7907. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  7908. 8003c56: f107 0334 add.w r3, r7, #52 @ 0x34
  7909. 8003c5a: 4619 mov r1, r3
  7910. 8003c5c: 4877 ldr r0, [pc, #476] @ (8003e3c <HAL_ADC_MspInit+0x2a0>)
  7911. 8003c5e: f007 f97f bl 800af60 <HAL_GPIO_Init>
  7912. GPIO_InitStruct.Pin = GPIO_PIN_5;
  7913. 8003c62: 2320 movs r3, #32
  7914. 8003c64: 637b str r3, [r7, #52] @ 0x34
  7915. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  7916. 8003c66: 2303 movs r3, #3
  7917. 8003c68: 63bb str r3, [r7, #56] @ 0x38
  7918. GPIO_InitStruct.Pull = GPIO_NOPULL;
  7919. 8003c6a: 2300 movs r3, #0
  7920. 8003c6c: 63fb str r3, [r7, #60] @ 0x3c
  7921. HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  7922. 8003c6e: f107 0334 add.w r3, r7, #52 @ 0x34
  7923. 8003c72: 4619 mov r1, r3
  7924. 8003c74: 4872 ldr r0, [pc, #456] @ (8003e40 <HAL_ADC_MspInit+0x2a4>)
  7925. 8003c76: f007 f973 bl 800af60 <HAL_GPIO_Init>
  7926. GPIO_InitStruct.Pin = GPIO_PIN_0;
  7927. 8003c7a: 2301 movs r3, #1
  7928. 8003c7c: 637b str r3, [r7, #52] @ 0x34
  7929. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  7930. 8003c7e: 2303 movs r3, #3
  7931. 8003c80: 63bb str r3, [r7, #56] @ 0x38
  7932. GPIO_InitStruct.Pull = GPIO_NOPULL;
  7933. 8003c82: 2300 movs r3, #0
  7934. 8003c84: 63fb str r3, [r7, #60] @ 0x3c
  7935. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  7936. 8003c86: f107 0334 add.w r3, r7, #52 @ 0x34
  7937. 8003c8a: 4619 mov r1, r3
  7938. 8003c8c: 486d ldr r0, [pc, #436] @ (8003e44 <HAL_ADC_MspInit+0x2a8>)
  7939. 8003c8e: f007 f967 bl 800af60 <HAL_GPIO_Init>
  7940. /* ADC1 DMA Init */
  7941. /* ADC1 Init */
  7942. hdma_adc1.Instance = DMA1_Stream0;
  7943. 8003c92: 4b6d ldr r3, [pc, #436] @ (8003e48 <HAL_ADC_MspInit+0x2ac>)
  7944. 8003c94: 4a6d ldr r2, [pc, #436] @ (8003e4c <HAL_ADC_MspInit+0x2b0>)
  7945. 8003c96: 601a str r2, [r3, #0]
  7946. hdma_adc1.Init.Request = DMA_REQUEST_ADC1;
  7947. 8003c98: 4b6b ldr r3, [pc, #428] @ (8003e48 <HAL_ADC_MspInit+0x2ac>)
  7948. 8003c9a: 2209 movs r2, #9
  7949. 8003c9c: 605a str r2, [r3, #4]
  7950. hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY;
  7951. 8003c9e: 4b6a ldr r3, [pc, #424] @ (8003e48 <HAL_ADC_MspInit+0x2ac>)
  7952. 8003ca0: 2200 movs r2, #0
  7953. 8003ca2: 609a str r2, [r3, #8]
  7954. hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE;
  7955. 8003ca4: 4b68 ldr r3, [pc, #416] @ (8003e48 <HAL_ADC_MspInit+0x2ac>)
  7956. 8003ca6: 2200 movs r2, #0
  7957. 8003ca8: 60da str r2, [r3, #12]
  7958. hdma_adc1.Init.MemInc = DMA_MINC_ENABLE;
  7959. 8003caa: 4b67 ldr r3, [pc, #412] @ (8003e48 <HAL_ADC_MspInit+0x2ac>)
  7960. 8003cac: f44f 6280 mov.w r2, #1024 @ 0x400
  7961. 8003cb0: 611a str r2, [r3, #16]
  7962. hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
  7963. 8003cb2: 4b65 ldr r3, [pc, #404] @ (8003e48 <HAL_ADC_MspInit+0x2ac>)
  7964. 8003cb4: f44f 6200 mov.w r2, #2048 @ 0x800
  7965. 8003cb8: 615a str r2, [r3, #20]
  7966. hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
  7967. 8003cba: 4b63 ldr r3, [pc, #396] @ (8003e48 <HAL_ADC_MspInit+0x2ac>)
  7968. 8003cbc: f44f 5200 mov.w r2, #8192 @ 0x2000
  7969. 8003cc0: 619a str r2, [r3, #24]
  7970. hdma_adc1.Init.Mode = DMA_NORMAL;
  7971. 8003cc2: 4b61 ldr r3, [pc, #388] @ (8003e48 <HAL_ADC_MspInit+0x2ac>)
  7972. 8003cc4: 2200 movs r2, #0
  7973. 8003cc6: 61da str r2, [r3, #28]
  7974. hdma_adc1.Init.Priority = DMA_PRIORITY_LOW;
  7975. 8003cc8: 4b5f ldr r3, [pc, #380] @ (8003e48 <HAL_ADC_MspInit+0x2ac>)
  7976. 8003cca: 2200 movs r2, #0
  7977. 8003ccc: 621a str r2, [r3, #32]
  7978. hdma_adc1.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
  7979. 8003cce: 4b5e ldr r3, [pc, #376] @ (8003e48 <HAL_ADC_MspInit+0x2ac>)
  7980. 8003cd0: 2200 movs r2, #0
  7981. 8003cd2: 625a str r2, [r3, #36] @ 0x24
  7982. if (HAL_DMA_Init(&hdma_adc1) != HAL_OK)
  7983. 8003cd4: 485c ldr r0, [pc, #368] @ (8003e48 <HAL_ADC_MspInit+0x2ac>)
  7984. 8003cd6: f004 fb07 bl 80082e8 <HAL_DMA_Init>
  7985. 8003cda: 4603 mov r3, r0
  7986. 8003cdc: 2b00 cmp r3, #0
  7987. 8003cde: d001 beq.n 8003ce4 <HAL_ADC_MspInit+0x148>
  7988. {
  7989. Error_Handler();
  7990. 8003ce0: f7fd ff74 bl 8001bcc <Error_Handler>
  7991. }
  7992. __HAL_LINKDMA(hadc,DMA_Handle,hdma_adc1);
  7993. 8003ce4: 687b ldr r3, [r7, #4]
  7994. 8003ce6: 4a58 ldr r2, [pc, #352] @ (8003e48 <HAL_ADC_MspInit+0x2ac>)
  7995. 8003ce8: 64da str r2, [r3, #76] @ 0x4c
  7996. 8003cea: 4a57 ldr r2, [pc, #348] @ (8003e48 <HAL_ADC_MspInit+0x2ac>)
  7997. 8003cec: 687b ldr r3, [r7, #4]
  7998. 8003cee: 6393 str r3, [r2, #56] @ 0x38
  7999. /* USER CODE BEGIN ADC3_MspInit 1 */
  8000. /* USER CODE END ADC3_MspInit 1 */
  8001. }
  8002. }
  8003. 8003cf0: e11e b.n 8003f30 <HAL_ADC_MspInit+0x394>
  8004. else if(hadc->Instance==ADC2)
  8005. 8003cf2: 687b ldr r3, [r7, #4]
  8006. 8003cf4: 681b ldr r3, [r3, #0]
  8007. 8003cf6: 4a56 ldr r2, [pc, #344] @ (8003e50 <HAL_ADC_MspInit+0x2b4>)
  8008. 8003cf8: 4293 cmp r3, r2
  8009. 8003cfa: f040 80af bne.w 8003e5c <HAL_ADC_MspInit+0x2c0>
  8010. HAL_RCC_ADC12_CLK_ENABLED++;
  8011. 8003cfe: 4b4d ldr r3, [pc, #308] @ (8003e34 <HAL_ADC_MspInit+0x298>)
  8012. 8003d00: 681b ldr r3, [r3, #0]
  8013. 8003d02: 3301 adds r3, #1
  8014. 8003d04: 4a4b ldr r2, [pc, #300] @ (8003e34 <HAL_ADC_MspInit+0x298>)
  8015. 8003d06: 6013 str r3, [r2, #0]
  8016. if(HAL_RCC_ADC12_CLK_ENABLED==1){
  8017. 8003d08: 4b4a ldr r3, [pc, #296] @ (8003e34 <HAL_ADC_MspInit+0x298>)
  8018. 8003d0a: 681b ldr r3, [r3, #0]
  8019. 8003d0c: 2b01 cmp r3, #1
  8020. 8003d0e: d10e bne.n 8003d2e <HAL_ADC_MspInit+0x192>
  8021. __HAL_RCC_ADC12_CLK_ENABLE();
  8022. 8003d10: 4b49 ldr r3, [pc, #292] @ (8003e38 <HAL_ADC_MspInit+0x29c>)
  8023. 8003d12: f8d3 30d8 ldr.w r3, [r3, #216] @ 0xd8
  8024. 8003d16: 4a48 ldr r2, [pc, #288] @ (8003e38 <HAL_ADC_MspInit+0x29c>)
  8025. 8003d18: f043 0320 orr.w r3, r3, #32
  8026. 8003d1c: f8c2 30d8 str.w r3, [r2, #216] @ 0xd8
  8027. 8003d20: 4b45 ldr r3, [pc, #276] @ (8003e38 <HAL_ADC_MspInit+0x29c>)
  8028. 8003d22: f8d3 30d8 ldr.w r3, [r3, #216] @ 0xd8
  8029. 8003d26: f003 0320 and.w r3, r3, #32
  8030. 8003d2a: 623b str r3, [r7, #32]
  8031. 8003d2c: 6a3b ldr r3, [r7, #32]
  8032. __HAL_RCC_GPIOA_CLK_ENABLE();
  8033. 8003d2e: 4b42 ldr r3, [pc, #264] @ (8003e38 <HAL_ADC_MspInit+0x29c>)
  8034. 8003d30: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  8035. 8003d34: 4a40 ldr r2, [pc, #256] @ (8003e38 <HAL_ADC_MspInit+0x29c>)
  8036. 8003d36: f043 0301 orr.w r3, r3, #1
  8037. 8003d3a: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  8038. 8003d3e: 4b3e ldr r3, [pc, #248] @ (8003e38 <HAL_ADC_MspInit+0x29c>)
  8039. 8003d40: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  8040. 8003d44: f003 0301 and.w r3, r3, #1
  8041. 8003d48: 61fb str r3, [r7, #28]
  8042. 8003d4a: 69fb ldr r3, [r7, #28]
  8043. __HAL_RCC_GPIOC_CLK_ENABLE();
  8044. 8003d4c: 4b3a ldr r3, [pc, #232] @ (8003e38 <HAL_ADC_MspInit+0x29c>)
  8045. 8003d4e: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  8046. 8003d52: 4a39 ldr r2, [pc, #228] @ (8003e38 <HAL_ADC_MspInit+0x29c>)
  8047. 8003d54: f043 0304 orr.w r3, r3, #4
  8048. 8003d58: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  8049. 8003d5c: 4b36 ldr r3, [pc, #216] @ (8003e38 <HAL_ADC_MspInit+0x29c>)
  8050. 8003d5e: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  8051. 8003d62: f003 0304 and.w r3, r3, #4
  8052. 8003d66: 61bb str r3, [r7, #24]
  8053. 8003d68: 69bb ldr r3, [r7, #24]
  8054. __HAL_RCC_GPIOB_CLK_ENABLE();
  8055. 8003d6a: 4b33 ldr r3, [pc, #204] @ (8003e38 <HAL_ADC_MspInit+0x29c>)
  8056. 8003d6c: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  8057. 8003d70: 4a31 ldr r2, [pc, #196] @ (8003e38 <HAL_ADC_MspInit+0x29c>)
  8058. 8003d72: f043 0302 orr.w r3, r3, #2
  8059. 8003d76: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  8060. 8003d7a: 4b2f ldr r3, [pc, #188] @ (8003e38 <HAL_ADC_MspInit+0x29c>)
  8061. 8003d7c: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  8062. 8003d80: f003 0302 and.w r3, r3, #2
  8063. 8003d84: 617b str r3, [r7, #20]
  8064. 8003d86: 697b ldr r3, [r7, #20]
  8065. GPIO_InitStruct.Pin = GPIO_PIN_6;
  8066. 8003d88: 2340 movs r3, #64 @ 0x40
  8067. 8003d8a: 637b str r3, [r7, #52] @ 0x34
  8068. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  8069. 8003d8c: 2303 movs r3, #3
  8070. 8003d8e: 63bb str r3, [r7, #56] @ 0x38
  8071. GPIO_InitStruct.Pull = GPIO_NOPULL;
  8072. 8003d90: 2300 movs r3, #0
  8073. 8003d92: 63fb str r3, [r7, #60] @ 0x3c
  8074. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  8075. 8003d94: f107 0334 add.w r3, r7, #52 @ 0x34
  8076. 8003d98: 4619 mov r1, r3
  8077. 8003d9a: 4828 ldr r0, [pc, #160] @ (8003e3c <HAL_ADC_MspInit+0x2a0>)
  8078. 8003d9c: f007 f8e0 bl 800af60 <HAL_GPIO_Init>
  8079. GPIO_InitStruct.Pin = GPIO_PIN_4;
  8080. 8003da0: 2310 movs r3, #16
  8081. 8003da2: 637b str r3, [r7, #52] @ 0x34
  8082. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  8083. 8003da4: 2303 movs r3, #3
  8084. 8003da6: 63bb str r3, [r7, #56] @ 0x38
  8085. GPIO_InitStruct.Pull = GPIO_NOPULL;
  8086. 8003da8: 2300 movs r3, #0
  8087. 8003daa: 63fb str r3, [r7, #60] @ 0x3c
  8088. HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  8089. 8003dac: f107 0334 add.w r3, r7, #52 @ 0x34
  8090. 8003db0: 4619 mov r1, r3
  8091. 8003db2: 4823 ldr r0, [pc, #140] @ (8003e40 <HAL_ADC_MspInit+0x2a4>)
  8092. 8003db4: f007 f8d4 bl 800af60 <HAL_GPIO_Init>
  8093. GPIO_InitStruct.Pin = GPIO_PIN_1;
  8094. 8003db8: 2302 movs r3, #2
  8095. 8003dba: 637b str r3, [r7, #52] @ 0x34
  8096. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  8097. 8003dbc: 2303 movs r3, #3
  8098. 8003dbe: 63bb str r3, [r7, #56] @ 0x38
  8099. GPIO_InitStruct.Pull = GPIO_NOPULL;
  8100. 8003dc0: 2300 movs r3, #0
  8101. 8003dc2: 63fb str r3, [r7, #60] @ 0x3c
  8102. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  8103. 8003dc4: f107 0334 add.w r3, r7, #52 @ 0x34
  8104. 8003dc8: 4619 mov r1, r3
  8105. 8003dca: 481e ldr r0, [pc, #120] @ (8003e44 <HAL_ADC_MspInit+0x2a8>)
  8106. 8003dcc: f007 f8c8 bl 800af60 <HAL_GPIO_Init>
  8107. hdma_adc2.Instance = DMA1_Stream1;
  8108. 8003dd0: 4b20 ldr r3, [pc, #128] @ (8003e54 <HAL_ADC_MspInit+0x2b8>)
  8109. 8003dd2: 4a21 ldr r2, [pc, #132] @ (8003e58 <HAL_ADC_MspInit+0x2bc>)
  8110. 8003dd4: 601a str r2, [r3, #0]
  8111. hdma_adc2.Init.Request = DMA_REQUEST_ADC2;
  8112. 8003dd6: 4b1f ldr r3, [pc, #124] @ (8003e54 <HAL_ADC_MspInit+0x2b8>)
  8113. 8003dd8: 220a movs r2, #10
  8114. 8003dda: 605a str r2, [r3, #4]
  8115. hdma_adc2.Init.Direction = DMA_PERIPH_TO_MEMORY;
  8116. 8003ddc: 4b1d ldr r3, [pc, #116] @ (8003e54 <HAL_ADC_MspInit+0x2b8>)
  8117. 8003dde: 2200 movs r2, #0
  8118. 8003de0: 609a str r2, [r3, #8]
  8119. hdma_adc2.Init.PeriphInc = DMA_PINC_DISABLE;
  8120. 8003de2: 4b1c ldr r3, [pc, #112] @ (8003e54 <HAL_ADC_MspInit+0x2b8>)
  8121. 8003de4: 2200 movs r2, #0
  8122. 8003de6: 60da str r2, [r3, #12]
  8123. hdma_adc2.Init.MemInc = DMA_MINC_ENABLE;
  8124. 8003de8: 4b1a ldr r3, [pc, #104] @ (8003e54 <HAL_ADC_MspInit+0x2b8>)
  8125. 8003dea: f44f 6280 mov.w r2, #1024 @ 0x400
  8126. 8003dee: 611a str r2, [r3, #16]
  8127. hdma_adc2.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
  8128. 8003df0: 4b18 ldr r3, [pc, #96] @ (8003e54 <HAL_ADC_MspInit+0x2b8>)
  8129. 8003df2: f44f 6200 mov.w r2, #2048 @ 0x800
  8130. 8003df6: 615a str r2, [r3, #20]
  8131. hdma_adc2.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
  8132. 8003df8: 4b16 ldr r3, [pc, #88] @ (8003e54 <HAL_ADC_MspInit+0x2b8>)
  8133. 8003dfa: f44f 5200 mov.w r2, #8192 @ 0x2000
  8134. 8003dfe: 619a str r2, [r3, #24]
  8135. hdma_adc2.Init.Mode = DMA_NORMAL;
  8136. 8003e00: 4b14 ldr r3, [pc, #80] @ (8003e54 <HAL_ADC_MspInit+0x2b8>)
  8137. 8003e02: 2200 movs r2, #0
  8138. 8003e04: 61da str r2, [r3, #28]
  8139. hdma_adc2.Init.Priority = DMA_PRIORITY_LOW;
  8140. 8003e06: 4b13 ldr r3, [pc, #76] @ (8003e54 <HAL_ADC_MspInit+0x2b8>)
  8141. 8003e08: 2200 movs r2, #0
  8142. 8003e0a: 621a str r2, [r3, #32]
  8143. hdma_adc2.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
  8144. 8003e0c: 4b11 ldr r3, [pc, #68] @ (8003e54 <HAL_ADC_MspInit+0x2b8>)
  8145. 8003e0e: 2200 movs r2, #0
  8146. 8003e10: 625a str r2, [r3, #36] @ 0x24
  8147. if (HAL_DMA_Init(&hdma_adc2) != HAL_OK)
  8148. 8003e12: 4810 ldr r0, [pc, #64] @ (8003e54 <HAL_ADC_MspInit+0x2b8>)
  8149. 8003e14: f004 fa68 bl 80082e8 <HAL_DMA_Init>
  8150. 8003e18: 4603 mov r3, r0
  8151. 8003e1a: 2b00 cmp r3, #0
  8152. 8003e1c: d001 beq.n 8003e22 <HAL_ADC_MspInit+0x286>
  8153. Error_Handler();
  8154. 8003e1e: f7fd fed5 bl 8001bcc <Error_Handler>
  8155. __HAL_LINKDMA(hadc,DMA_Handle,hdma_adc2);
  8156. 8003e22: 687b ldr r3, [r7, #4]
  8157. 8003e24: 4a0b ldr r2, [pc, #44] @ (8003e54 <HAL_ADC_MspInit+0x2b8>)
  8158. 8003e26: 64da str r2, [r3, #76] @ 0x4c
  8159. 8003e28: 4a0a ldr r2, [pc, #40] @ (8003e54 <HAL_ADC_MspInit+0x2b8>)
  8160. 8003e2a: 687b ldr r3, [r7, #4]
  8161. 8003e2c: 6393 str r3, [r2, #56] @ 0x38
  8162. }
  8163. 8003e2e: e07f b.n 8003f30 <HAL_ADC_MspInit+0x394>
  8164. 8003e30: 40022000 .word 0x40022000
  8165. 8003e34: 24000934 .word 0x24000934
  8166. 8003e38: 58024400 .word 0x58024400
  8167. 8003e3c: 58020000 .word 0x58020000
  8168. 8003e40: 58020800 .word 0x58020800
  8169. 8003e44: 58020400 .word 0x58020400
  8170. 8003e48: 2400026c .word 0x2400026c
  8171. 8003e4c: 40020010 .word 0x40020010
  8172. 8003e50: 40022100 .word 0x40022100
  8173. 8003e54: 240002e4 .word 0x240002e4
  8174. 8003e58: 40020028 .word 0x40020028
  8175. else if(hadc->Instance==ADC3)
  8176. 8003e5c: 687b ldr r3, [r7, #4]
  8177. 8003e5e: 681b ldr r3, [r3, #0]
  8178. 8003e60: 4a35 ldr r2, [pc, #212] @ (8003f38 <HAL_ADC_MspInit+0x39c>)
  8179. 8003e62: 4293 cmp r3, r2
  8180. 8003e64: d164 bne.n 8003f30 <HAL_ADC_MspInit+0x394>
  8181. __HAL_RCC_ADC3_CLK_ENABLE();
  8182. 8003e66: 4b35 ldr r3, [pc, #212] @ (8003f3c <HAL_ADC_MspInit+0x3a0>)
  8183. 8003e68: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  8184. 8003e6c: 4a33 ldr r2, [pc, #204] @ (8003f3c <HAL_ADC_MspInit+0x3a0>)
  8185. 8003e6e: f043 7380 orr.w r3, r3, #16777216 @ 0x1000000
  8186. 8003e72: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  8187. 8003e76: 4b31 ldr r3, [pc, #196] @ (8003f3c <HAL_ADC_MspInit+0x3a0>)
  8188. 8003e78: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  8189. 8003e7c: f003 7380 and.w r3, r3, #16777216 @ 0x1000000
  8190. 8003e80: 613b str r3, [r7, #16]
  8191. 8003e82: 693b ldr r3, [r7, #16]
  8192. __HAL_RCC_GPIOC_CLK_ENABLE();
  8193. 8003e84: 4b2d ldr r3, [pc, #180] @ (8003f3c <HAL_ADC_MspInit+0x3a0>)
  8194. 8003e86: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  8195. 8003e8a: 4a2c ldr r2, [pc, #176] @ (8003f3c <HAL_ADC_MspInit+0x3a0>)
  8196. 8003e8c: f043 0304 orr.w r3, r3, #4
  8197. 8003e90: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  8198. 8003e94: 4b29 ldr r3, [pc, #164] @ (8003f3c <HAL_ADC_MspInit+0x3a0>)
  8199. 8003e96: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  8200. 8003e9a: f003 0304 and.w r3, r3, #4
  8201. 8003e9e: 60fb str r3, [r7, #12]
  8202. 8003ea0: 68fb ldr r3, [r7, #12]
  8203. GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;
  8204. 8003ea2: 2303 movs r3, #3
  8205. 8003ea4: 637b str r3, [r7, #52] @ 0x34
  8206. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  8207. 8003ea6: 2303 movs r3, #3
  8208. 8003ea8: 63bb str r3, [r7, #56] @ 0x38
  8209. GPIO_InitStruct.Pull = GPIO_NOPULL;
  8210. 8003eaa: 2300 movs r3, #0
  8211. 8003eac: 63fb str r3, [r7, #60] @ 0x3c
  8212. HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  8213. 8003eae: f107 0334 add.w r3, r7, #52 @ 0x34
  8214. 8003eb2: 4619 mov r1, r3
  8215. 8003eb4: 4822 ldr r0, [pc, #136] @ (8003f40 <HAL_ADC_MspInit+0x3a4>)
  8216. 8003eb6: f007 f853 bl 800af60 <HAL_GPIO_Init>
  8217. HAL_SYSCFG_AnalogSwitchConfig(SYSCFG_SWITCH_PC2, SYSCFG_SWITCH_PC2_OPEN);
  8218. 8003eba: f04f 6180 mov.w r1, #67108864 @ 0x4000000
  8219. 8003ebe: f04f 6080 mov.w r0, #67108864 @ 0x4000000
  8220. 8003ec2: f001 feb1 bl 8005c28 <HAL_SYSCFG_AnalogSwitchConfig>
  8221. HAL_SYSCFG_AnalogSwitchConfig(SYSCFG_SWITCH_PC3, SYSCFG_SWITCH_PC3_OPEN);
  8222. 8003ec6: f04f 6100 mov.w r1, #134217728 @ 0x8000000
  8223. 8003eca: f04f 6000 mov.w r0, #134217728 @ 0x8000000
  8224. 8003ece: f001 feab bl 8005c28 <HAL_SYSCFG_AnalogSwitchConfig>
  8225. hdma_adc3.Instance = DMA1_Stream2;
  8226. 8003ed2: 4b1c ldr r3, [pc, #112] @ (8003f44 <HAL_ADC_MspInit+0x3a8>)
  8227. 8003ed4: 4a1c ldr r2, [pc, #112] @ (8003f48 <HAL_ADC_MspInit+0x3ac>)
  8228. 8003ed6: 601a str r2, [r3, #0]
  8229. hdma_adc3.Init.Request = DMA_REQUEST_ADC3;
  8230. 8003ed8: 4b1a ldr r3, [pc, #104] @ (8003f44 <HAL_ADC_MspInit+0x3a8>)
  8231. 8003eda: 2273 movs r2, #115 @ 0x73
  8232. 8003edc: 605a str r2, [r3, #4]
  8233. hdma_adc3.Init.Direction = DMA_PERIPH_TO_MEMORY;
  8234. 8003ede: 4b19 ldr r3, [pc, #100] @ (8003f44 <HAL_ADC_MspInit+0x3a8>)
  8235. 8003ee0: 2200 movs r2, #0
  8236. 8003ee2: 609a str r2, [r3, #8]
  8237. hdma_adc3.Init.PeriphInc = DMA_PINC_DISABLE;
  8238. 8003ee4: 4b17 ldr r3, [pc, #92] @ (8003f44 <HAL_ADC_MspInit+0x3a8>)
  8239. 8003ee6: 2200 movs r2, #0
  8240. 8003ee8: 60da str r2, [r3, #12]
  8241. hdma_adc3.Init.MemInc = DMA_MINC_ENABLE;
  8242. 8003eea: 4b16 ldr r3, [pc, #88] @ (8003f44 <HAL_ADC_MspInit+0x3a8>)
  8243. 8003eec: f44f 6280 mov.w r2, #1024 @ 0x400
  8244. 8003ef0: 611a str r2, [r3, #16]
  8245. hdma_adc3.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
  8246. 8003ef2: 4b14 ldr r3, [pc, #80] @ (8003f44 <HAL_ADC_MspInit+0x3a8>)
  8247. 8003ef4: f44f 6200 mov.w r2, #2048 @ 0x800
  8248. 8003ef8: 615a str r2, [r3, #20]
  8249. hdma_adc3.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
  8250. 8003efa: 4b12 ldr r3, [pc, #72] @ (8003f44 <HAL_ADC_MspInit+0x3a8>)
  8251. 8003efc: f44f 5200 mov.w r2, #8192 @ 0x2000
  8252. 8003f00: 619a str r2, [r3, #24]
  8253. hdma_adc3.Init.Mode = DMA_NORMAL;
  8254. 8003f02: 4b10 ldr r3, [pc, #64] @ (8003f44 <HAL_ADC_MspInit+0x3a8>)
  8255. 8003f04: 2200 movs r2, #0
  8256. 8003f06: 61da str r2, [r3, #28]
  8257. hdma_adc3.Init.Priority = DMA_PRIORITY_LOW;
  8258. 8003f08: 4b0e ldr r3, [pc, #56] @ (8003f44 <HAL_ADC_MspInit+0x3a8>)
  8259. 8003f0a: 2200 movs r2, #0
  8260. 8003f0c: 621a str r2, [r3, #32]
  8261. hdma_adc3.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
  8262. 8003f0e: 4b0d ldr r3, [pc, #52] @ (8003f44 <HAL_ADC_MspInit+0x3a8>)
  8263. 8003f10: 2200 movs r2, #0
  8264. 8003f12: 625a str r2, [r3, #36] @ 0x24
  8265. if (HAL_DMA_Init(&hdma_adc3) != HAL_OK)
  8266. 8003f14: 480b ldr r0, [pc, #44] @ (8003f44 <HAL_ADC_MspInit+0x3a8>)
  8267. 8003f16: f004 f9e7 bl 80082e8 <HAL_DMA_Init>
  8268. 8003f1a: 4603 mov r3, r0
  8269. 8003f1c: 2b00 cmp r3, #0
  8270. 8003f1e: d001 beq.n 8003f24 <HAL_ADC_MspInit+0x388>
  8271. Error_Handler();
  8272. 8003f20: f7fd fe54 bl 8001bcc <Error_Handler>
  8273. __HAL_LINKDMA(hadc,DMA_Handle,hdma_adc3);
  8274. 8003f24: 687b ldr r3, [r7, #4]
  8275. 8003f26: 4a07 ldr r2, [pc, #28] @ (8003f44 <HAL_ADC_MspInit+0x3a8>)
  8276. 8003f28: 64da str r2, [r3, #76] @ 0x4c
  8277. 8003f2a: 4a06 ldr r2, [pc, #24] @ (8003f44 <HAL_ADC_MspInit+0x3a8>)
  8278. 8003f2c: 687b ldr r3, [r7, #4]
  8279. 8003f2e: 6393 str r3, [r2, #56] @ 0x38
  8280. }
  8281. 8003f30: bf00 nop
  8282. 8003f32: 3748 adds r7, #72 @ 0x48
  8283. 8003f34: 46bd mov sp, r7
  8284. 8003f36: bd80 pop {r7, pc}
  8285. 8003f38: 58026000 .word 0x58026000
  8286. 8003f3c: 58024400 .word 0x58024400
  8287. 8003f40: 58020800 .word 0x58020800
  8288. 8003f44: 2400035c .word 0x2400035c
  8289. 8003f48: 40020040 .word 0x40020040
  8290. 08003f4c <HAL_COMP_MspInit>:
  8291. * This function configures the hardware resources used in this example
  8292. * @param hcomp: COMP handle pointer
  8293. * @retval None
  8294. */
  8295. void HAL_COMP_MspInit(COMP_HandleTypeDef* hcomp)
  8296. {
  8297. 8003f4c: b580 push {r7, lr}
  8298. 8003f4e: b08a sub sp, #40 @ 0x28
  8299. 8003f50: af00 add r7, sp, #0
  8300. 8003f52: 6078 str r0, [r7, #4]
  8301. GPIO_InitTypeDef GPIO_InitStruct = {0};
  8302. 8003f54: f107 0314 add.w r3, r7, #20
  8303. 8003f58: 2200 movs r2, #0
  8304. 8003f5a: 601a str r2, [r3, #0]
  8305. 8003f5c: 605a str r2, [r3, #4]
  8306. 8003f5e: 609a str r2, [r3, #8]
  8307. 8003f60: 60da str r2, [r3, #12]
  8308. 8003f62: 611a str r2, [r3, #16]
  8309. if(hcomp->Instance==COMP1)
  8310. 8003f64: 687b ldr r3, [r7, #4]
  8311. 8003f66: 681b ldr r3, [r3, #0]
  8312. 8003f68: 4a18 ldr r2, [pc, #96] @ (8003fcc <HAL_COMP_MspInit+0x80>)
  8313. 8003f6a: 4293 cmp r3, r2
  8314. 8003f6c: d129 bne.n 8003fc2 <HAL_COMP_MspInit+0x76>
  8315. {
  8316. /* USER CODE BEGIN COMP1_MspInit 0 */
  8317. /* USER CODE END COMP1_MspInit 0 */
  8318. /* Peripheral clock enable */
  8319. __HAL_RCC_COMP12_CLK_ENABLE();
  8320. 8003f6e: 4b18 ldr r3, [pc, #96] @ (8003fd0 <HAL_COMP_MspInit+0x84>)
  8321. 8003f70: f8d3 30f4 ldr.w r3, [r3, #244] @ 0xf4
  8322. 8003f74: 4a16 ldr r2, [pc, #88] @ (8003fd0 <HAL_COMP_MspInit+0x84>)
  8323. 8003f76: f443 4380 orr.w r3, r3, #16384 @ 0x4000
  8324. 8003f7a: f8c2 30f4 str.w r3, [r2, #244] @ 0xf4
  8325. 8003f7e: 4b14 ldr r3, [pc, #80] @ (8003fd0 <HAL_COMP_MspInit+0x84>)
  8326. 8003f80: f8d3 30f4 ldr.w r3, [r3, #244] @ 0xf4
  8327. 8003f84: f403 4380 and.w r3, r3, #16384 @ 0x4000
  8328. 8003f88: 613b str r3, [r7, #16]
  8329. 8003f8a: 693b ldr r3, [r7, #16]
  8330. __HAL_RCC_GPIOB_CLK_ENABLE();
  8331. 8003f8c: 4b10 ldr r3, [pc, #64] @ (8003fd0 <HAL_COMP_MspInit+0x84>)
  8332. 8003f8e: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  8333. 8003f92: 4a0f ldr r2, [pc, #60] @ (8003fd0 <HAL_COMP_MspInit+0x84>)
  8334. 8003f94: f043 0302 orr.w r3, r3, #2
  8335. 8003f98: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  8336. 8003f9c: 4b0c ldr r3, [pc, #48] @ (8003fd0 <HAL_COMP_MspInit+0x84>)
  8337. 8003f9e: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  8338. 8003fa2: f003 0302 and.w r3, r3, #2
  8339. 8003fa6: 60fb str r3, [r7, #12]
  8340. 8003fa8: 68fb ldr r3, [r7, #12]
  8341. /**COMP1 GPIO Configuration
  8342. PB2 ------> COMP1_INP
  8343. */
  8344. GPIO_InitStruct.Pin = GPIO_PIN_2;
  8345. 8003faa: 2304 movs r3, #4
  8346. 8003fac: 617b str r3, [r7, #20]
  8347. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  8348. 8003fae: 2303 movs r3, #3
  8349. 8003fb0: 61bb str r3, [r7, #24]
  8350. GPIO_InitStruct.Pull = GPIO_NOPULL;
  8351. 8003fb2: 2300 movs r3, #0
  8352. 8003fb4: 61fb str r3, [r7, #28]
  8353. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  8354. 8003fb6: f107 0314 add.w r3, r7, #20
  8355. 8003fba: 4619 mov r1, r3
  8356. 8003fbc: 4805 ldr r0, [pc, #20] @ (8003fd4 <HAL_COMP_MspInit+0x88>)
  8357. 8003fbe: f006 ffcf bl 800af60 <HAL_GPIO_Init>
  8358. /* USER CODE BEGIN COMP1_MspInit 1 */
  8359. /* USER CODE END COMP1_MspInit 1 */
  8360. }
  8361. }
  8362. 8003fc2: bf00 nop
  8363. 8003fc4: 3728 adds r7, #40 @ 0x28
  8364. 8003fc6: 46bd mov sp, r7
  8365. 8003fc8: bd80 pop {r7, pc}
  8366. 8003fca: bf00 nop
  8367. 8003fcc: 5800380c .word 0x5800380c
  8368. 8003fd0: 58024400 .word 0x58024400
  8369. 8003fd4: 58020400 .word 0x58020400
  8370. 08003fd8 <HAL_CRC_MspInit>:
  8371. * This function configures the hardware resources used in this example
  8372. * @param hcrc: CRC handle pointer
  8373. * @retval None
  8374. */
  8375. void HAL_CRC_MspInit(CRC_HandleTypeDef* hcrc)
  8376. {
  8377. 8003fd8: b480 push {r7}
  8378. 8003fda: b085 sub sp, #20
  8379. 8003fdc: af00 add r7, sp, #0
  8380. 8003fde: 6078 str r0, [r7, #4]
  8381. if(hcrc->Instance==CRC)
  8382. 8003fe0: 687b ldr r3, [r7, #4]
  8383. 8003fe2: 681b ldr r3, [r3, #0]
  8384. 8003fe4: 4a0b ldr r2, [pc, #44] @ (8004014 <HAL_CRC_MspInit+0x3c>)
  8385. 8003fe6: 4293 cmp r3, r2
  8386. 8003fe8: d10e bne.n 8004008 <HAL_CRC_MspInit+0x30>
  8387. {
  8388. /* USER CODE BEGIN CRC_MspInit 0 */
  8389. /* USER CODE END CRC_MspInit 0 */
  8390. /* Peripheral clock enable */
  8391. __HAL_RCC_CRC_CLK_ENABLE();
  8392. 8003fea: 4b0b ldr r3, [pc, #44] @ (8004018 <HAL_CRC_MspInit+0x40>)
  8393. 8003fec: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  8394. 8003ff0: 4a09 ldr r2, [pc, #36] @ (8004018 <HAL_CRC_MspInit+0x40>)
  8395. 8003ff2: f443 2300 orr.w r3, r3, #524288 @ 0x80000
  8396. 8003ff6: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  8397. 8003ffa: 4b07 ldr r3, [pc, #28] @ (8004018 <HAL_CRC_MspInit+0x40>)
  8398. 8003ffc: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  8399. 8004000: f403 2300 and.w r3, r3, #524288 @ 0x80000
  8400. 8004004: 60fb str r3, [r7, #12]
  8401. 8004006: 68fb ldr r3, [r7, #12]
  8402. /* USER CODE BEGIN CRC_MspInit 1 */
  8403. /* USER CODE END CRC_MspInit 1 */
  8404. }
  8405. }
  8406. 8004008: bf00 nop
  8407. 800400a: 3714 adds r7, #20
  8408. 800400c: 46bd mov sp, r7
  8409. 800400e: f85d 7b04 ldr.w r7, [sp], #4
  8410. 8004012: 4770 bx lr
  8411. 8004014: 58024c00 .word 0x58024c00
  8412. 8004018: 58024400 .word 0x58024400
  8413. 0800401c <HAL_DAC_MspInit>:
  8414. * This function configures the hardware resources used in this example
  8415. * @param hdac: DAC handle pointer
  8416. * @retval None
  8417. */
  8418. void HAL_DAC_MspInit(DAC_HandleTypeDef* hdac)
  8419. {
  8420. 800401c: b580 push {r7, lr}
  8421. 800401e: b08a sub sp, #40 @ 0x28
  8422. 8004020: af00 add r7, sp, #0
  8423. 8004022: 6078 str r0, [r7, #4]
  8424. GPIO_InitTypeDef GPIO_InitStruct = {0};
  8425. 8004024: f107 0314 add.w r3, r7, #20
  8426. 8004028: 2200 movs r2, #0
  8427. 800402a: 601a str r2, [r3, #0]
  8428. 800402c: 605a str r2, [r3, #4]
  8429. 800402e: 609a str r2, [r3, #8]
  8430. 8004030: 60da str r2, [r3, #12]
  8431. 8004032: 611a str r2, [r3, #16]
  8432. if(hdac->Instance==DAC1)
  8433. 8004034: 687b ldr r3, [r7, #4]
  8434. 8004036: 681b ldr r3, [r3, #0]
  8435. 8004038: 4a1c ldr r2, [pc, #112] @ (80040ac <HAL_DAC_MspInit+0x90>)
  8436. 800403a: 4293 cmp r3, r2
  8437. 800403c: d131 bne.n 80040a2 <HAL_DAC_MspInit+0x86>
  8438. {
  8439. /* USER CODE BEGIN DAC1_MspInit 0 */
  8440. /* USER CODE END DAC1_MspInit 0 */
  8441. /* Peripheral clock enable */
  8442. __HAL_RCC_DAC12_CLK_ENABLE();
  8443. 800403e: 4b1c ldr r3, [pc, #112] @ (80040b0 <HAL_DAC_MspInit+0x94>)
  8444. 8004040: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  8445. 8004044: 4a1a ldr r2, [pc, #104] @ (80040b0 <HAL_DAC_MspInit+0x94>)
  8446. 8004046: f043 5300 orr.w r3, r3, #536870912 @ 0x20000000
  8447. 800404a: f8c2 30e8 str.w r3, [r2, #232] @ 0xe8
  8448. 800404e: 4b18 ldr r3, [pc, #96] @ (80040b0 <HAL_DAC_MspInit+0x94>)
  8449. 8004050: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  8450. 8004054: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  8451. 8004058: 613b str r3, [r7, #16]
  8452. 800405a: 693b ldr r3, [r7, #16]
  8453. __HAL_RCC_GPIOA_CLK_ENABLE();
  8454. 800405c: 4b14 ldr r3, [pc, #80] @ (80040b0 <HAL_DAC_MspInit+0x94>)
  8455. 800405e: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  8456. 8004062: 4a13 ldr r2, [pc, #76] @ (80040b0 <HAL_DAC_MspInit+0x94>)
  8457. 8004064: f043 0301 orr.w r3, r3, #1
  8458. 8004068: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  8459. 800406c: 4b10 ldr r3, [pc, #64] @ (80040b0 <HAL_DAC_MspInit+0x94>)
  8460. 800406e: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  8461. 8004072: f003 0301 and.w r3, r3, #1
  8462. 8004076: 60fb str r3, [r7, #12]
  8463. 8004078: 68fb ldr r3, [r7, #12]
  8464. /**DAC1 GPIO Configuration
  8465. PA4 ------> DAC1_OUT1
  8466. PA5 ------> DAC1_OUT2
  8467. */
  8468. GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5;
  8469. 800407a: 2330 movs r3, #48 @ 0x30
  8470. 800407c: 617b str r3, [r7, #20]
  8471. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  8472. 800407e: 2303 movs r3, #3
  8473. 8004080: 61bb str r3, [r7, #24]
  8474. GPIO_InitStruct.Pull = GPIO_NOPULL;
  8475. 8004082: 2300 movs r3, #0
  8476. 8004084: 61fb str r3, [r7, #28]
  8477. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  8478. 8004086: f107 0314 add.w r3, r7, #20
  8479. 800408a: 4619 mov r1, r3
  8480. 800408c: 4809 ldr r0, [pc, #36] @ (80040b4 <HAL_DAC_MspInit+0x98>)
  8481. 800408e: f006 ff67 bl 800af60 <HAL_GPIO_Init>
  8482. /* DAC1 interrupt Init */
  8483. HAL_NVIC_SetPriority(TIM6_DAC_IRQn, 5, 0);
  8484. 8004092: 2200 movs r2, #0
  8485. 8004094: 2105 movs r1, #5
  8486. 8004096: 2036 movs r0, #54 @ 0x36
  8487. 8004098: f003 fc30 bl 80078fc <HAL_NVIC_SetPriority>
  8488. HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn);
  8489. 800409c: 2036 movs r0, #54 @ 0x36
  8490. 800409e: f003 fc47 bl 8007930 <HAL_NVIC_EnableIRQ>
  8491. /* USER CODE BEGIN DAC1_MspInit 1 */
  8492. /* USER CODE END DAC1_MspInit 1 */
  8493. }
  8494. }
  8495. 80040a2: bf00 nop
  8496. 80040a4: 3728 adds r7, #40 @ 0x28
  8497. 80040a6: 46bd mov sp, r7
  8498. 80040a8: bd80 pop {r7, pc}
  8499. 80040aa: bf00 nop
  8500. 80040ac: 40007400 .word 0x40007400
  8501. 80040b0: 58024400 .word 0x58024400
  8502. 80040b4: 58020000 .word 0x58020000
  8503. 080040b8 <HAL_RNG_MspInit>:
  8504. * This function configures the hardware resources used in this example
  8505. * @param hrng: RNG handle pointer
  8506. * @retval None
  8507. */
  8508. void HAL_RNG_MspInit(RNG_HandleTypeDef* hrng)
  8509. {
  8510. 80040b8: b580 push {r7, lr}
  8511. 80040ba: b0b4 sub sp, #208 @ 0xd0
  8512. 80040bc: af00 add r7, sp, #0
  8513. 80040be: 6078 str r0, [r7, #4]
  8514. RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
  8515. 80040c0: f107 0310 add.w r3, r7, #16
  8516. 80040c4: 22c0 movs r2, #192 @ 0xc0
  8517. 80040c6: 2100 movs r1, #0
  8518. 80040c8: 4618 mov r0, r3
  8519. 80040ca: f013 fddf bl 8017c8c <memset>
  8520. if(hrng->Instance==RNG)
  8521. 80040ce: 687b ldr r3, [r7, #4]
  8522. 80040d0: 681b ldr r3, [r3, #0]
  8523. 80040d2: 4a14 ldr r2, [pc, #80] @ (8004124 <HAL_RNG_MspInit+0x6c>)
  8524. 80040d4: 4293 cmp r3, r2
  8525. 80040d6: d121 bne.n 800411c <HAL_RNG_MspInit+0x64>
  8526. /* USER CODE END RNG_MspInit 0 */
  8527. /** Initializes the peripherals clock
  8528. */
  8529. PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RNG;
  8530. 80040d8: f44f 3200 mov.w r2, #131072 @ 0x20000
  8531. 80040dc: f04f 0300 mov.w r3, #0
  8532. 80040e0: e9c7 2304 strd r2, r3, [r7, #16]
  8533. PeriphClkInitStruct.RngClockSelection = RCC_RNGCLKSOURCE_HSI48;
  8534. 80040e4: 2300 movs r3, #0
  8535. 80040e6: f8c7 3090 str.w r3, [r7, #144] @ 0x90
  8536. if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
  8537. 80040ea: f107 0310 add.w r3, r7, #16
  8538. 80040ee: 4618 mov r0, r3
  8539. 80040f0: f008 fabe bl 800c670 <HAL_RCCEx_PeriphCLKConfig>
  8540. 80040f4: 4603 mov r3, r0
  8541. 80040f6: 2b00 cmp r3, #0
  8542. 80040f8: d001 beq.n 80040fe <HAL_RNG_MspInit+0x46>
  8543. {
  8544. Error_Handler();
  8545. 80040fa: f7fd fd67 bl 8001bcc <Error_Handler>
  8546. }
  8547. /* Peripheral clock enable */
  8548. __HAL_RCC_RNG_CLK_ENABLE();
  8549. 80040fe: 4b0a ldr r3, [pc, #40] @ (8004128 <HAL_RNG_MspInit+0x70>)
  8550. 8004100: f8d3 30dc ldr.w r3, [r3, #220] @ 0xdc
  8551. 8004104: 4a08 ldr r2, [pc, #32] @ (8004128 <HAL_RNG_MspInit+0x70>)
  8552. 8004106: f043 0340 orr.w r3, r3, #64 @ 0x40
  8553. 800410a: f8c2 30dc str.w r3, [r2, #220] @ 0xdc
  8554. 800410e: 4b06 ldr r3, [pc, #24] @ (8004128 <HAL_RNG_MspInit+0x70>)
  8555. 8004110: f8d3 30dc ldr.w r3, [r3, #220] @ 0xdc
  8556. 8004114: f003 0340 and.w r3, r3, #64 @ 0x40
  8557. 8004118: 60fb str r3, [r7, #12]
  8558. 800411a: 68fb ldr r3, [r7, #12]
  8559. /* USER CODE BEGIN RNG_MspInit 1 */
  8560. /* USER CODE END RNG_MspInit 1 */
  8561. }
  8562. }
  8563. 800411c: bf00 nop
  8564. 800411e: 37d0 adds r7, #208 @ 0xd0
  8565. 8004120: 46bd mov sp, r7
  8566. 8004122: bd80 pop {r7, pc}
  8567. 8004124: 48021800 .word 0x48021800
  8568. 8004128: 58024400 .word 0x58024400
  8569. 0800412c <HAL_TIM_PWM_MspInit>:
  8570. * This function configures the hardware resources used in this example
  8571. * @param htim_pwm: TIM_PWM handle pointer
  8572. * @retval None
  8573. */
  8574. void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* htim_pwm)
  8575. {
  8576. 800412c: b480 push {r7}
  8577. 800412e: b085 sub sp, #20
  8578. 8004130: af00 add r7, sp, #0
  8579. 8004132: 6078 str r0, [r7, #4]
  8580. if(htim_pwm->Instance==TIM1)
  8581. 8004134: 687b ldr r3, [r7, #4]
  8582. 8004136: 681b ldr r3, [r3, #0]
  8583. 8004138: 4a16 ldr r2, [pc, #88] @ (8004194 <HAL_TIM_PWM_MspInit+0x68>)
  8584. 800413a: 4293 cmp r3, r2
  8585. 800413c: d10f bne.n 800415e <HAL_TIM_PWM_MspInit+0x32>
  8586. {
  8587. /* USER CODE BEGIN TIM1_MspInit 0 */
  8588. /* USER CODE END TIM1_MspInit 0 */
  8589. /* Peripheral clock enable */
  8590. __HAL_RCC_TIM1_CLK_ENABLE();
  8591. 800413e: 4b16 ldr r3, [pc, #88] @ (8004198 <HAL_TIM_PWM_MspInit+0x6c>)
  8592. 8004140: f8d3 30f0 ldr.w r3, [r3, #240] @ 0xf0
  8593. 8004144: 4a14 ldr r2, [pc, #80] @ (8004198 <HAL_TIM_PWM_MspInit+0x6c>)
  8594. 8004146: f043 0301 orr.w r3, r3, #1
  8595. 800414a: f8c2 30f0 str.w r3, [r2, #240] @ 0xf0
  8596. 800414e: 4b12 ldr r3, [pc, #72] @ (8004198 <HAL_TIM_PWM_MspInit+0x6c>)
  8597. 8004150: f8d3 30f0 ldr.w r3, [r3, #240] @ 0xf0
  8598. 8004154: f003 0301 and.w r3, r3, #1
  8599. 8004158: 60fb str r3, [r7, #12]
  8600. 800415a: 68fb ldr r3, [r7, #12]
  8601. /* USER CODE BEGIN TIM3_MspInit 1 */
  8602. /* USER CODE END TIM3_MspInit 1 */
  8603. }
  8604. }
  8605. 800415c: e013 b.n 8004186 <HAL_TIM_PWM_MspInit+0x5a>
  8606. else if(htim_pwm->Instance==TIM3)
  8607. 800415e: 687b ldr r3, [r7, #4]
  8608. 8004160: 681b ldr r3, [r3, #0]
  8609. 8004162: 4a0e ldr r2, [pc, #56] @ (800419c <HAL_TIM_PWM_MspInit+0x70>)
  8610. 8004164: 4293 cmp r3, r2
  8611. 8004166: d10e bne.n 8004186 <HAL_TIM_PWM_MspInit+0x5a>
  8612. __HAL_RCC_TIM3_CLK_ENABLE();
  8613. 8004168: 4b0b ldr r3, [pc, #44] @ (8004198 <HAL_TIM_PWM_MspInit+0x6c>)
  8614. 800416a: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  8615. 800416e: 4a0a ldr r2, [pc, #40] @ (8004198 <HAL_TIM_PWM_MspInit+0x6c>)
  8616. 8004170: f043 0302 orr.w r3, r3, #2
  8617. 8004174: f8c2 30e8 str.w r3, [r2, #232] @ 0xe8
  8618. 8004178: 4b07 ldr r3, [pc, #28] @ (8004198 <HAL_TIM_PWM_MspInit+0x6c>)
  8619. 800417a: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  8620. 800417e: f003 0302 and.w r3, r3, #2
  8621. 8004182: 60bb str r3, [r7, #8]
  8622. 8004184: 68bb ldr r3, [r7, #8]
  8623. }
  8624. 8004186: bf00 nop
  8625. 8004188: 3714 adds r7, #20
  8626. 800418a: 46bd mov sp, r7
  8627. 800418c: f85d 7b04 ldr.w r7, [sp], #4
  8628. 8004190: 4770 bx lr
  8629. 8004192: bf00 nop
  8630. 8004194: 40010000 .word 0x40010000
  8631. 8004198: 58024400 .word 0x58024400
  8632. 800419c: 40000400 .word 0x40000400
  8633. 080041a0 <HAL_TIM_Base_MspInit>:
  8634. * This function configures the hardware resources used in this example
  8635. * @param htim_base: TIM_Base handle pointer
  8636. * @retval None
  8637. */
  8638. void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
  8639. {
  8640. 80041a0: b480 push {r7}
  8641. 80041a2: b085 sub sp, #20
  8642. 80041a4: af00 add r7, sp, #0
  8643. 80041a6: 6078 str r0, [r7, #4]
  8644. if(htim_base->Instance==TIM8)
  8645. 80041a8: 687b ldr r3, [r7, #4]
  8646. 80041aa: 681b ldr r3, [r3, #0]
  8647. 80041ac: 4a0b ldr r2, [pc, #44] @ (80041dc <HAL_TIM_Base_MspInit+0x3c>)
  8648. 80041ae: 4293 cmp r3, r2
  8649. 80041b0: d10e bne.n 80041d0 <HAL_TIM_Base_MspInit+0x30>
  8650. {
  8651. /* USER CODE BEGIN TIM8_MspInit 0 */
  8652. /* USER CODE END TIM8_MspInit 0 */
  8653. /* Peripheral clock enable */
  8654. __HAL_RCC_TIM8_CLK_ENABLE();
  8655. 80041b2: 4b0b ldr r3, [pc, #44] @ (80041e0 <HAL_TIM_Base_MspInit+0x40>)
  8656. 80041b4: f8d3 30f0 ldr.w r3, [r3, #240] @ 0xf0
  8657. 80041b8: 4a09 ldr r2, [pc, #36] @ (80041e0 <HAL_TIM_Base_MspInit+0x40>)
  8658. 80041ba: f043 0302 orr.w r3, r3, #2
  8659. 80041be: f8c2 30f0 str.w r3, [r2, #240] @ 0xf0
  8660. 80041c2: 4b07 ldr r3, [pc, #28] @ (80041e0 <HAL_TIM_Base_MspInit+0x40>)
  8661. 80041c4: f8d3 30f0 ldr.w r3, [r3, #240] @ 0xf0
  8662. 80041c8: f003 0302 and.w r3, r3, #2
  8663. 80041cc: 60fb str r3, [r7, #12]
  8664. 80041ce: 68fb ldr r3, [r7, #12]
  8665. /* USER CODE BEGIN TIM8_MspInit 1 */
  8666. /* USER CODE END TIM8_MspInit 1 */
  8667. }
  8668. }
  8669. 80041d0: bf00 nop
  8670. 80041d2: 3714 adds r7, #20
  8671. 80041d4: 46bd mov sp, r7
  8672. 80041d6: f85d 7b04 ldr.w r7, [sp], #4
  8673. 80041da: 4770 bx lr
  8674. 80041dc: 40010400 .word 0x40010400
  8675. 80041e0: 58024400 .word 0x58024400
  8676. 080041e4 <HAL_TIM_MspPostInit>:
  8677. void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim)
  8678. {
  8679. 80041e4: b580 push {r7, lr}
  8680. 80041e6: b08a sub sp, #40 @ 0x28
  8681. 80041e8: af00 add r7, sp, #0
  8682. 80041ea: 6078 str r0, [r7, #4]
  8683. GPIO_InitTypeDef GPIO_InitStruct = {0};
  8684. 80041ec: f107 0314 add.w r3, r7, #20
  8685. 80041f0: 2200 movs r2, #0
  8686. 80041f2: 601a str r2, [r3, #0]
  8687. 80041f4: 605a str r2, [r3, #4]
  8688. 80041f6: 609a str r2, [r3, #8]
  8689. 80041f8: 60da str r2, [r3, #12]
  8690. 80041fa: 611a str r2, [r3, #16]
  8691. if(htim->Instance==TIM1)
  8692. 80041fc: 687b ldr r3, [r7, #4]
  8693. 80041fe: 681b ldr r3, [r3, #0]
  8694. 8004200: 4a26 ldr r2, [pc, #152] @ (800429c <HAL_TIM_MspPostInit+0xb8>)
  8695. 8004202: 4293 cmp r3, r2
  8696. 8004204: d120 bne.n 8004248 <HAL_TIM_MspPostInit+0x64>
  8697. {
  8698. /* USER CODE BEGIN TIM1_MspPostInit 0 */
  8699. /* USER CODE END TIM1_MspPostInit 0 */
  8700. __HAL_RCC_GPIOA_CLK_ENABLE();
  8701. 8004206: 4b26 ldr r3, [pc, #152] @ (80042a0 <HAL_TIM_MspPostInit+0xbc>)
  8702. 8004208: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  8703. 800420c: 4a24 ldr r2, [pc, #144] @ (80042a0 <HAL_TIM_MspPostInit+0xbc>)
  8704. 800420e: f043 0301 orr.w r3, r3, #1
  8705. 8004212: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  8706. 8004216: 4b22 ldr r3, [pc, #136] @ (80042a0 <HAL_TIM_MspPostInit+0xbc>)
  8707. 8004218: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  8708. 800421c: f003 0301 and.w r3, r3, #1
  8709. 8004220: 613b str r3, [r7, #16]
  8710. 8004222: 693b ldr r3, [r7, #16]
  8711. /**TIM1 GPIO Configuration
  8712. PA9 ------> TIM1_CH2
  8713. */
  8714. GPIO_InitStruct.Pin = GPIO_PIN_9;
  8715. 8004224: f44f 7300 mov.w r3, #512 @ 0x200
  8716. 8004228: 617b str r3, [r7, #20]
  8717. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  8718. 800422a: 2302 movs r3, #2
  8719. 800422c: 61bb str r3, [r7, #24]
  8720. GPIO_InitStruct.Pull = GPIO_NOPULL;
  8721. 800422e: 2300 movs r3, #0
  8722. 8004230: 61fb str r3, [r7, #28]
  8723. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  8724. 8004232: 2300 movs r3, #0
  8725. 8004234: 623b str r3, [r7, #32]
  8726. GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
  8727. 8004236: 2301 movs r3, #1
  8728. 8004238: 627b str r3, [r7, #36] @ 0x24
  8729. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  8730. 800423a: f107 0314 add.w r3, r7, #20
  8731. 800423e: 4619 mov r1, r3
  8732. 8004240: 4818 ldr r0, [pc, #96] @ (80042a4 <HAL_TIM_MspPostInit+0xc0>)
  8733. 8004242: f006 fe8d bl 800af60 <HAL_GPIO_Init>
  8734. /* USER CODE BEGIN TIM3_MspPostInit 1 */
  8735. /* USER CODE END TIM3_MspPostInit 1 */
  8736. }
  8737. }
  8738. 8004246: e024 b.n 8004292 <HAL_TIM_MspPostInit+0xae>
  8739. else if(htim->Instance==TIM3)
  8740. 8004248: 687b ldr r3, [r7, #4]
  8741. 800424a: 681b ldr r3, [r3, #0]
  8742. 800424c: 4a16 ldr r2, [pc, #88] @ (80042a8 <HAL_TIM_MspPostInit+0xc4>)
  8743. 800424e: 4293 cmp r3, r2
  8744. 8004250: d11f bne.n 8004292 <HAL_TIM_MspPostInit+0xae>
  8745. __HAL_RCC_GPIOC_CLK_ENABLE();
  8746. 8004252: 4b13 ldr r3, [pc, #76] @ (80042a0 <HAL_TIM_MspPostInit+0xbc>)
  8747. 8004254: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  8748. 8004258: 4a11 ldr r2, [pc, #68] @ (80042a0 <HAL_TIM_MspPostInit+0xbc>)
  8749. 800425a: f043 0304 orr.w r3, r3, #4
  8750. 800425e: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  8751. 8004262: 4b0f ldr r3, [pc, #60] @ (80042a0 <HAL_TIM_MspPostInit+0xbc>)
  8752. 8004264: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  8753. 8004268: f003 0304 and.w r3, r3, #4
  8754. 800426c: 60fb str r3, [r7, #12]
  8755. 800426e: 68fb ldr r3, [r7, #12]
  8756. GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9;
  8757. 8004270: f44f 7370 mov.w r3, #960 @ 0x3c0
  8758. 8004274: 617b str r3, [r7, #20]
  8759. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  8760. 8004276: 2302 movs r3, #2
  8761. 8004278: 61bb str r3, [r7, #24]
  8762. GPIO_InitStruct.Pull = GPIO_NOPULL;
  8763. 800427a: 2300 movs r3, #0
  8764. 800427c: 61fb str r3, [r7, #28]
  8765. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
  8766. 800427e: 2301 movs r3, #1
  8767. 8004280: 623b str r3, [r7, #32]
  8768. GPIO_InitStruct.Alternate = GPIO_AF2_TIM3;
  8769. 8004282: 2302 movs r3, #2
  8770. 8004284: 627b str r3, [r7, #36] @ 0x24
  8771. HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  8772. 8004286: f107 0314 add.w r3, r7, #20
  8773. 800428a: 4619 mov r1, r3
  8774. 800428c: 4807 ldr r0, [pc, #28] @ (80042ac <HAL_TIM_MspPostInit+0xc8>)
  8775. 800428e: f006 fe67 bl 800af60 <HAL_GPIO_Init>
  8776. }
  8777. 8004292: bf00 nop
  8778. 8004294: 3728 adds r7, #40 @ 0x28
  8779. 8004296: 46bd mov sp, r7
  8780. 8004298: bd80 pop {r7, pc}
  8781. 800429a: bf00 nop
  8782. 800429c: 40010000 .word 0x40010000
  8783. 80042a0: 58024400 .word 0x58024400
  8784. 80042a4: 58020000 .word 0x58020000
  8785. 80042a8: 40000400 .word 0x40000400
  8786. 80042ac: 58020800 .word 0x58020800
  8787. 080042b0 <HAL_UART_MspInit>:
  8788. * This function configures the hardware resources used in this example
  8789. * @param huart: UART handle pointer
  8790. * @retval None
  8791. */
  8792. void HAL_UART_MspInit(UART_HandleTypeDef* huart)
  8793. {
  8794. 80042b0: b580 push {r7, lr}
  8795. 80042b2: b0bc sub sp, #240 @ 0xf0
  8796. 80042b4: af00 add r7, sp, #0
  8797. 80042b6: 6078 str r0, [r7, #4]
  8798. GPIO_InitTypeDef GPIO_InitStruct = {0};
  8799. 80042b8: f107 03dc add.w r3, r7, #220 @ 0xdc
  8800. 80042bc: 2200 movs r2, #0
  8801. 80042be: 601a str r2, [r3, #0]
  8802. 80042c0: 605a str r2, [r3, #4]
  8803. 80042c2: 609a str r2, [r3, #8]
  8804. 80042c4: 60da str r2, [r3, #12]
  8805. 80042c6: 611a str r2, [r3, #16]
  8806. RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
  8807. 80042c8: f107 0318 add.w r3, r7, #24
  8808. 80042cc: 22c0 movs r2, #192 @ 0xc0
  8809. 80042ce: 2100 movs r1, #0
  8810. 80042d0: 4618 mov r0, r3
  8811. 80042d2: f013 fcdb bl 8017c8c <memset>
  8812. if(huart->Instance==UART8)
  8813. 80042d6: 687b ldr r3, [r7, #4]
  8814. 80042d8: 681b ldr r3, [r3, #0]
  8815. 80042da: 4a55 ldr r2, [pc, #340] @ (8004430 <HAL_UART_MspInit+0x180>)
  8816. 80042dc: 4293 cmp r3, r2
  8817. 80042de: d14e bne.n 800437e <HAL_UART_MspInit+0xce>
  8818. /* USER CODE END UART8_MspInit 0 */
  8819. /** Initializes the peripherals clock
  8820. */
  8821. PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_UART8;
  8822. 80042e0: f04f 0202 mov.w r2, #2
  8823. 80042e4: f04f 0300 mov.w r3, #0
  8824. 80042e8: e9c7 2306 strd r2, r3, [r7, #24]
  8825. PeriphClkInitStruct.Usart234578ClockSelection = RCC_USART234578CLKSOURCE_D2PCLK1;
  8826. 80042ec: 2300 movs r3, #0
  8827. 80042ee: f8c7 3090 str.w r3, [r7, #144] @ 0x90
  8828. if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
  8829. 80042f2: f107 0318 add.w r3, r7, #24
  8830. 80042f6: 4618 mov r0, r3
  8831. 80042f8: f008 f9ba bl 800c670 <HAL_RCCEx_PeriphCLKConfig>
  8832. 80042fc: 4603 mov r3, r0
  8833. 80042fe: 2b00 cmp r3, #0
  8834. 8004300: d001 beq.n 8004306 <HAL_UART_MspInit+0x56>
  8835. {
  8836. Error_Handler();
  8837. 8004302: f7fd fc63 bl 8001bcc <Error_Handler>
  8838. }
  8839. /* Peripheral clock enable */
  8840. __HAL_RCC_UART8_CLK_ENABLE();
  8841. 8004306: 4b4b ldr r3, [pc, #300] @ (8004434 <HAL_UART_MspInit+0x184>)
  8842. 8004308: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  8843. 800430c: 4a49 ldr r2, [pc, #292] @ (8004434 <HAL_UART_MspInit+0x184>)
  8844. 800430e: f043 4300 orr.w r3, r3, #2147483648 @ 0x80000000
  8845. 8004312: f8c2 30e8 str.w r3, [r2, #232] @ 0xe8
  8846. 8004316: 4b47 ldr r3, [pc, #284] @ (8004434 <HAL_UART_MspInit+0x184>)
  8847. 8004318: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  8848. 800431c: f003 4300 and.w r3, r3, #2147483648 @ 0x80000000
  8849. 8004320: 617b str r3, [r7, #20]
  8850. 8004322: 697b ldr r3, [r7, #20]
  8851. __HAL_RCC_GPIOE_CLK_ENABLE();
  8852. 8004324: 4b43 ldr r3, [pc, #268] @ (8004434 <HAL_UART_MspInit+0x184>)
  8853. 8004326: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  8854. 800432a: 4a42 ldr r2, [pc, #264] @ (8004434 <HAL_UART_MspInit+0x184>)
  8855. 800432c: f043 0310 orr.w r3, r3, #16
  8856. 8004330: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  8857. 8004334: 4b3f ldr r3, [pc, #252] @ (8004434 <HAL_UART_MspInit+0x184>)
  8858. 8004336: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  8859. 800433a: f003 0310 and.w r3, r3, #16
  8860. 800433e: 613b str r3, [r7, #16]
  8861. 8004340: 693b ldr r3, [r7, #16]
  8862. /**UART8 GPIO Configuration
  8863. PE0 ------> UART8_RX
  8864. PE1 ------> UART8_TX
  8865. */
  8866. GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;
  8867. 8004342: 2303 movs r3, #3
  8868. 8004344: f8c7 30dc str.w r3, [r7, #220] @ 0xdc
  8869. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  8870. 8004348: 2302 movs r3, #2
  8871. 800434a: f8c7 30e0 str.w r3, [r7, #224] @ 0xe0
  8872. GPIO_InitStruct.Pull = GPIO_NOPULL;
  8873. 800434e: 2300 movs r3, #0
  8874. 8004350: f8c7 30e4 str.w r3, [r7, #228] @ 0xe4
  8875. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  8876. 8004354: 2300 movs r3, #0
  8877. 8004356: f8c7 30e8 str.w r3, [r7, #232] @ 0xe8
  8878. GPIO_InitStruct.Alternate = GPIO_AF8_UART8;
  8879. 800435a: 2308 movs r3, #8
  8880. 800435c: f8c7 30ec str.w r3, [r7, #236] @ 0xec
  8881. HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
  8882. 8004360: f107 03dc add.w r3, r7, #220 @ 0xdc
  8883. 8004364: 4619 mov r1, r3
  8884. 8004366: 4834 ldr r0, [pc, #208] @ (8004438 <HAL_UART_MspInit+0x188>)
  8885. 8004368: f006 fdfa bl 800af60 <HAL_GPIO_Init>
  8886. /* UART8 interrupt Init */
  8887. HAL_NVIC_SetPriority(UART8_IRQn, 5, 0);
  8888. 800436c: 2200 movs r2, #0
  8889. 800436e: 2105 movs r1, #5
  8890. 8004370: 2053 movs r0, #83 @ 0x53
  8891. 8004372: f003 fac3 bl 80078fc <HAL_NVIC_SetPriority>
  8892. HAL_NVIC_EnableIRQ(UART8_IRQn);
  8893. 8004376: 2053 movs r0, #83 @ 0x53
  8894. 8004378: f003 fada bl 8007930 <HAL_NVIC_EnableIRQ>
  8895. /* USER CODE BEGIN USART1_MspInit 1 */
  8896. /* USER CODE END USART1_MspInit 1 */
  8897. }
  8898. }
  8899. 800437c: e053 b.n 8004426 <HAL_UART_MspInit+0x176>
  8900. else if(huart->Instance==USART1)
  8901. 800437e: 687b ldr r3, [r7, #4]
  8902. 8004380: 681b ldr r3, [r3, #0]
  8903. 8004382: 4a2e ldr r2, [pc, #184] @ (800443c <HAL_UART_MspInit+0x18c>)
  8904. 8004384: 4293 cmp r3, r2
  8905. 8004386: d14e bne.n 8004426 <HAL_UART_MspInit+0x176>
  8906. PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART1;
  8907. 8004388: f04f 0201 mov.w r2, #1
  8908. 800438c: f04f 0300 mov.w r3, #0
  8909. 8004390: e9c7 2306 strd r2, r3, [r7, #24]
  8910. PeriphClkInitStruct.Usart16ClockSelection = RCC_USART16CLKSOURCE_D2PCLK2;
  8911. 8004394: 2300 movs r3, #0
  8912. 8004396: f8c7 3094 str.w r3, [r7, #148] @ 0x94
  8913. if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
  8914. 800439a: f107 0318 add.w r3, r7, #24
  8915. 800439e: 4618 mov r0, r3
  8916. 80043a0: f008 f966 bl 800c670 <HAL_RCCEx_PeriphCLKConfig>
  8917. 80043a4: 4603 mov r3, r0
  8918. 80043a6: 2b00 cmp r3, #0
  8919. 80043a8: d001 beq.n 80043ae <HAL_UART_MspInit+0xfe>
  8920. Error_Handler();
  8921. 80043aa: f7fd fc0f bl 8001bcc <Error_Handler>
  8922. __HAL_RCC_USART1_CLK_ENABLE();
  8923. 80043ae: 4b21 ldr r3, [pc, #132] @ (8004434 <HAL_UART_MspInit+0x184>)
  8924. 80043b0: f8d3 30f0 ldr.w r3, [r3, #240] @ 0xf0
  8925. 80043b4: 4a1f ldr r2, [pc, #124] @ (8004434 <HAL_UART_MspInit+0x184>)
  8926. 80043b6: f043 0310 orr.w r3, r3, #16
  8927. 80043ba: f8c2 30f0 str.w r3, [r2, #240] @ 0xf0
  8928. 80043be: 4b1d ldr r3, [pc, #116] @ (8004434 <HAL_UART_MspInit+0x184>)
  8929. 80043c0: f8d3 30f0 ldr.w r3, [r3, #240] @ 0xf0
  8930. 80043c4: f003 0310 and.w r3, r3, #16
  8931. 80043c8: 60fb str r3, [r7, #12]
  8932. 80043ca: 68fb ldr r3, [r7, #12]
  8933. __HAL_RCC_GPIOB_CLK_ENABLE();
  8934. 80043cc: 4b19 ldr r3, [pc, #100] @ (8004434 <HAL_UART_MspInit+0x184>)
  8935. 80043ce: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  8936. 80043d2: 4a18 ldr r2, [pc, #96] @ (8004434 <HAL_UART_MspInit+0x184>)
  8937. 80043d4: f043 0302 orr.w r3, r3, #2
  8938. 80043d8: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  8939. 80043dc: 4b15 ldr r3, [pc, #84] @ (8004434 <HAL_UART_MspInit+0x184>)
  8940. 80043de: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  8941. 80043e2: f003 0302 and.w r3, r3, #2
  8942. 80043e6: 60bb str r3, [r7, #8]
  8943. 80043e8: 68bb ldr r3, [r7, #8]
  8944. GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15;
  8945. 80043ea: f44f 4340 mov.w r3, #49152 @ 0xc000
  8946. 80043ee: f8c7 30dc str.w r3, [r7, #220] @ 0xdc
  8947. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  8948. 80043f2: 2302 movs r3, #2
  8949. 80043f4: f8c7 30e0 str.w r3, [r7, #224] @ 0xe0
  8950. GPIO_InitStruct.Pull = GPIO_NOPULL;
  8951. 80043f8: 2300 movs r3, #0
  8952. 80043fa: f8c7 30e4 str.w r3, [r7, #228] @ 0xe4
  8953. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  8954. 80043fe: 2300 movs r3, #0
  8955. 8004400: f8c7 30e8 str.w r3, [r7, #232] @ 0xe8
  8956. GPIO_InitStruct.Alternate = GPIO_AF4_USART1;
  8957. 8004404: 2304 movs r3, #4
  8958. 8004406: f8c7 30ec str.w r3, [r7, #236] @ 0xec
  8959. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  8960. 800440a: f107 03dc add.w r3, r7, #220 @ 0xdc
  8961. 800440e: 4619 mov r1, r3
  8962. 8004410: 480b ldr r0, [pc, #44] @ (8004440 <HAL_UART_MspInit+0x190>)
  8963. 8004412: f006 fda5 bl 800af60 <HAL_GPIO_Init>
  8964. HAL_NVIC_SetPriority(USART1_IRQn, 5, 0);
  8965. 8004416: 2200 movs r2, #0
  8966. 8004418: 2105 movs r1, #5
  8967. 800441a: 2025 movs r0, #37 @ 0x25
  8968. 800441c: f003 fa6e bl 80078fc <HAL_NVIC_SetPriority>
  8969. HAL_NVIC_EnableIRQ(USART1_IRQn);
  8970. 8004420: 2025 movs r0, #37 @ 0x25
  8971. 8004422: f003 fa85 bl 8007930 <HAL_NVIC_EnableIRQ>
  8972. }
  8973. 8004426: bf00 nop
  8974. 8004428: 37f0 adds r7, #240 @ 0xf0
  8975. 800442a: 46bd mov sp, r7
  8976. 800442c: bd80 pop {r7, pc}
  8977. 800442e: bf00 nop
  8978. 8004430: 40007c00 .word 0x40007c00
  8979. 8004434: 58024400 .word 0x58024400
  8980. 8004438: 58021000 .word 0x58021000
  8981. 800443c: 40011000 .word 0x40011000
  8982. 8004440: 58020400 .word 0x58020400
  8983. 08004444 <HAL_InitTick>:
  8984. * reset by HAL_Init() or at any time when clock is configured, by HAL_RCC_ClockConfig().
  8985. * @param TickPriority: Tick interrupt priority.
  8986. * @retval HAL status
  8987. */
  8988. HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
  8989. {
  8990. 8004444: b580 push {r7, lr}
  8991. 8004446: b090 sub sp, #64 @ 0x40
  8992. 8004448: af00 add r7, sp, #0
  8993. 800444a: 6078 str r0, [r7, #4]
  8994. uint32_t uwTimclock, uwAPB1Prescaler;
  8995. uint32_t uwPrescalerValue;
  8996. uint32_t pFLatency;
  8997. /*Configure the TIM6 IRQ priority */
  8998. if (TickPriority < (1UL << __NVIC_PRIO_BITS))
  8999. 800444c: 687b ldr r3, [r7, #4]
  9000. 800444e: 2b0f cmp r3, #15
  9001. 8004450: d827 bhi.n 80044a2 <HAL_InitTick+0x5e>
  9002. {
  9003. HAL_NVIC_SetPriority(TIM6_DAC_IRQn, TickPriority ,0U);
  9004. 8004452: 2200 movs r2, #0
  9005. 8004454: 6879 ldr r1, [r7, #4]
  9006. 8004456: 2036 movs r0, #54 @ 0x36
  9007. 8004458: f003 fa50 bl 80078fc <HAL_NVIC_SetPriority>
  9008. /* Enable the TIM6 global Interrupt */
  9009. HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn);
  9010. 800445c: 2036 movs r0, #54 @ 0x36
  9011. 800445e: f003 fa67 bl 8007930 <HAL_NVIC_EnableIRQ>
  9012. uwTickPrio = TickPriority;
  9013. 8004462: 4a29 ldr r2, [pc, #164] @ (8004508 <HAL_InitTick+0xc4>)
  9014. 8004464: 687b ldr r3, [r7, #4]
  9015. 8004466: 6013 str r3, [r2, #0]
  9016. {
  9017. return HAL_ERROR;
  9018. }
  9019. /* Enable TIM6 clock */
  9020. __HAL_RCC_TIM6_CLK_ENABLE();
  9021. 8004468: 4b28 ldr r3, [pc, #160] @ (800450c <HAL_InitTick+0xc8>)
  9022. 800446a: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  9023. 800446e: 4a27 ldr r2, [pc, #156] @ (800450c <HAL_InitTick+0xc8>)
  9024. 8004470: f043 0310 orr.w r3, r3, #16
  9025. 8004474: f8c2 30e8 str.w r3, [r2, #232] @ 0xe8
  9026. 8004478: 4b24 ldr r3, [pc, #144] @ (800450c <HAL_InitTick+0xc8>)
  9027. 800447a: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  9028. 800447e: f003 0310 and.w r3, r3, #16
  9029. 8004482: 60fb str r3, [r7, #12]
  9030. 8004484: 68fb ldr r3, [r7, #12]
  9031. /* Get clock configuration */
  9032. HAL_RCC_GetClockConfig(&clkconfig, &pFLatency);
  9033. 8004486: f107 0210 add.w r2, r7, #16
  9034. 800448a: f107 0314 add.w r3, r7, #20
  9035. 800448e: 4611 mov r1, r2
  9036. 8004490: 4618 mov r0, r3
  9037. 8004492: f008 f8ab bl 800c5ec <HAL_RCC_GetClockConfig>
  9038. /* Get APB1 prescaler */
  9039. uwAPB1Prescaler = clkconfig.APB1CLKDivider;
  9040. 8004496: 6abb ldr r3, [r7, #40] @ 0x28
  9041. 8004498: 63bb str r3, [r7, #56] @ 0x38
  9042. /* Compute TIM6 clock */
  9043. if (uwAPB1Prescaler == RCC_HCLK_DIV1)
  9044. 800449a: 6bbb ldr r3, [r7, #56] @ 0x38
  9045. 800449c: 2b00 cmp r3, #0
  9046. 800449e: d106 bne.n 80044ae <HAL_InitTick+0x6a>
  9047. 80044a0: e001 b.n 80044a6 <HAL_InitTick+0x62>
  9048. return HAL_ERROR;
  9049. 80044a2: 2301 movs r3, #1
  9050. 80044a4: e02b b.n 80044fe <HAL_InitTick+0xba>
  9051. {
  9052. uwTimclock = HAL_RCC_GetPCLK1Freq();
  9053. 80044a6: f008 f875 bl 800c594 <HAL_RCC_GetPCLK1Freq>
  9054. 80044aa: 63f8 str r0, [r7, #60] @ 0x3c
  9055. 80044ac: e004 b.n 80044b8 <HAL_InitTick+0x74>
  9056. }
  9057. else
  9058. {
  9059. uwTimclock = 2UL * HAL_RCC_GetPCLK1Freq();
  9060. 80044ae: f008 f871 bl 800c594 <HAL_RCC_GetPCLK1Freq>
  9061. 80044b2: 4603 mov r3, r0
  9062. 80044b4: 005b lsls r3, r3, #1
  9063. 80044b6: 63fb str r3, [r7, #60] @ 0x3c
  9064. }
  9065. /* Compute the prescaler value to have TIM6 counter clock equal to 1MHz */
  9066. uwPrescalerValue = (uint32_t) ((uwTimclock / 1000000U) - 1U);
  9067. 80044b8: 6bfb ldr r3, [r7, #60] @ 0x3c
  9068. 80044ba: 4a15 ldr r2, [pc, #84] @ (8004510 <HAL_InitTick+0xcc>)
  9069. 80044bc: fba2 2303 umull r2, r3, r2, r3
  9070. 80044c0: 0c9b lsrs r3, r3, #18
  9071. 80044c2: 3b01 subs r3, #1
  9072. 80044c4: 637b str r3, [r7, #52] @ 0x34
  9073. /* Initialize TIM6 */
  9074. htim6.Instance = TIM6;
  9075. 80044c6: 4b13 ldr r3, [pc, #76] @ (8004514 <HAL_InitTick+0xd0>)
  9076. 80044c8: 4a13 ldr r2, [pc, #76] @ (8004518 <HAL_InitTick+0xd4>)
  9077. 80044ca: 601a str r2, [r3, #0]
  9078. + Period = [(TIM6CLK/1000) - 1]. to have a (1/1000) s time base.
  9079. + Prescaler = (uwTimclock/1000000 - 1) to have a 1MHz counter clock.
  9080. + ClockDivision = 0
  9081. + Counter direction = Up
  9082. */
  9083. htim6.Init.Period = (1000000U / 1000U) - 1U;
  9084. 80044cc: 4b11 ldr r3, [pc, #68] @ (8004514 <HAL_InitTick+0xd0>)
  9085. 80044ce: f240 32e7 movw r2, #999 @ 0x3e7
  9086. 80044d2: 60da str r2, [r3, #12]
  9087. htim6.Init.Prescaler = uwPrescalerValue;
  9088. 80044d4: 4a0f ldr r2, [pc, #60] @ (8004514 <HAL_InitTick+0xd0>)
  9089. 80044d6: 6b7b ldr r3, [r7, #52] @ 0x34
  9090. 80044d8: 6053 str r3, [r2, #4]
  9091. htim6.Init.ClockDivision = 0;
  9092. 80044da: 4b0e ldr r3, [pc, #56] @ (8004514 <HAL_InitTick+0xd0>)
  9093. 80044dc: 2200 movs r2, #0
  9094. 80044de: 611a str r2, [r3, #16]
  9095. htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
  9096. 80044e0: 4b0c ldr r3, [pc, #48] @ (8004514 <HAL_InitTick+0xd0>)
  9097. 80044e2: 2200 movs r2, #0
  9098. 80044e4: 609a str r2, [r3, #8]
  9099. if(HAL_TIM_Base_Init(&htim6) == HAL_OK)
  9100. 80044e6: 480b ldr r0, [pc, #44] @ (8004514 <HAL_InitTick+0xd0>)
  9101. 80044e8: f00a fe06 bl 800f0f8 <HAL_TIM_Base_Init>
  9102. 80044ec: 4603 mov r3, r0
  9103. 80044ee: 2b00 cmp r3, #0
  9104. 80044f0: d104 bne.n 80044fc <HAL_InitTick+0xb8>
  9105. {
  9106. /* Start the TIM time Base generation in interrupt mode */
  9107. return HAL_TIM_Base_Start_IT(&htim6);
  9108. 80044f2: 4808 ldr r0, [pc, #32] @ (8004514 <HAL_InitTick+0xd0>)
  9109. 80044f4: f00a fec8 bl 800f288 <HAL_TIM_Base_Start_IT>
  9110. 80044f8: 4603 mov r3, r0
  9111. 80044fa: e000 b.n 80044fe <HAL_InitTick+0xba>
  9112. }
  9113. /* Return function status */
  9114. return HAL_ERROR;
  9115. 80044fc: 2301 movs r3, #1
  9116. }
  9117. 80044fe: 4618 mov r0, r3
  9118. 8004500: 3740 adds r7, #64 @ 0x40
  9119. 8004502: 46bd mov sp, r7
  9120. 8004504: bd80 pop {r7, pc}
  9121. 8004506: bf00 nop
  9122. 8004508: 2400003c .word 0x2400003c
  9123. 800450c: 58024400 .word 0x58024400
  9124. 8004510: 431bde83 .word 0x431bde83
  9125. 8004514: 24000938 .word 0x24000938
  9126. 8004518: 40001000 .word 0x40001000
  9127. 0800451c <NMI_Handler>:
  9128. /******************************************************************************/
  9129. /**
  9130. * @brief This function handles Non maskable interrupt.
  9131. */
  9132. void NMI_Handler(void)
  9133. {
  9134. 800451c: b480 push {r7}
  9135. 800451e: af00 add r7, sp, #0
  9136. /* USER CODE BEGIN NonMaskableInt_IRQn 0 */
  9137. /* USER CODE END NonMaskableInt_IRQn 0 */
  9138. /* USER CODE BEGIN NonMaskableInt_IRQn 1 */
  9139. while (1)
  9140. 8004520: bf00 nop
  9141. 8004522: e7fd b.n 8004520 <NMI_Handler+0x4>
  9142. 08004524 <HardFault_Handler>:
  9143. /**
  9144. * @brief This function handles Hard fault interrupt.
  9145. */
  9146. void HardFault_Handler(void)
  9147. {
  9148. 8004524: b480 push {r7}
  9149. 8004526: af00 add r7, sp, #0
  9150. /* USER CODE BEGIN HardFault_IRQn 0 */
  9151. /* USER CODE END HardFault_IRQn 0 */
  9152. while (1)
  9153. 8004528: bf00 nop
  9154. 800452a: e7fd b.n 8004528 <HardFault_Handler+0x4>
  9155. 0800452c <MemManage_Handler>:
  9156. /**
  9157. * @brief This function handles Memory management fault.
  9158. */
  9159. void MemManage_Handler(void)
  9160. {
  9161. 800452c: b480 push {r7}
  9162. 800452e: af00 add r7, sp, #0
  9163. /* USER CODE BEGIN MemoryManagement_IRQn 0 */
  9164. /* USER CODE END MemoryManagement_IRQn 0 */
  9165. while (1)
  9166. 8004530: bf00 nop
  9167. 8004532: e7fd b.n 8004530 <MemManage_Handler+0x4>
  9168. 08004534 <BusFault_Handler>:
  9169. /**
  9170. * @brief This function handles Pre-fetch fault, memory access fault.
  9171. */
  9172. void BusFault_Handler(void)
  9173. {
  9174. 8004534: b480 push {r7}
  9175. 8004536: af00 add r7, sp, #0
  9176. /* USER CODE BEGIN BusFault_IRQn 0 */
  9177. /* USER CODE END BusFault_IRQn 0 */
  9178. while (1)
  9179. 8004538: bf00 nop
  9180. 800453a: e7fd b.n 8004538 <BusFault_Handler+0x4>
  9181. 0800453c <UsageFault_Handler>:
  9182. /**
  9183. * @brief This function handles Undefined instruction or illegal state.
  9184. */
  9185. void UsageFault_Handler(void)
  9186. {
  9187. 800453c: b480 push {r7}
  9188. 800453e: af00 add r7, sp, #0
  9189. /* USER CODE BEGIN UsageFault_IRQn 0 */
  9190. /* USER CODE END UsageFault_IRQn 0 */
  9191. while (1)
  9192. 8004540: bf00 nop
  9193. 8004542: e7fd b.n 8004540 <UsageFault_Handler+0x4>
  9194. 08004544 <DebugMon_Handler>:
  9195. /**
  9196. * @brief This function handles Debug monitor.
  9197. */
  9198. void DebugMon_Handler(void)
  9199. {
  9200. 8004544: b480 push {r7}
  9201. 8004546: af00 add r7, sp, #0
  9202. /* USER CODE END DebugMonitor_IRQn 0 */
  9203. /* USER CODE BEGIN DebugMonitor_IRQn 1 */
  9204. /* USER CODE END DebugMonitor_IRQn 1 */
  9205. }
  9206. 8004548: bf00 nop
  9207. 800454a: 46bd mov sp, r7
  9208. 800454c: f85d 7b04 ldr.w r7, [sp], #4
  9209. 8004550: 4770 bx lr
  9210. 08004552 <RCC_IRQHandler>:
  9211. /**
  9212. * @brief This function handles RCC global interrupt.
  9213. */
  9214. void RCC_IRQHandler(void)
  9215. {
  9216. 8004552: b480 push {r7}
  9217. 8004554: af00 add r7, sp, #0
  9218. /* USER CODE END RCC_IRQn 0 */
  9219. /* USER CODE BEGIN RCC_IRQn 1 */
  9220. /* USER CODE END RCC_IRQn 1 */
  9221. }
  9222. 8004556: bf00 nop
  9223. 8004558: 46bd mov sp, r7
  9224. 800455a: f85d 7b04 ldr.w r7, [sp], #4
  9225. 800455e: 4770 bx lr
  9226. 08004560 <DMA1_Stream0_IRQHandler>:
  9227. /**
  9228. * @brief This function handles DMA1 stream0 global interrupt.
  9229. */
  9230. void DMA1_Stream0_IRQHandler(void)
  9231. {
  9232. 8004560: b580 push {r7, lr}
  9233. 8004562: af00 add r7, sp, #0
  9234. /* USER CODE BEGIN DMA1_Stream0_IRQn 0 */
  9235. /* USER CODE END DMA1_Stream0_IRQn 0 */
  9236. HAL_DMA_IRQHandler(&hdma_adc1);
  9237. 8004564: 4802 ldr r0, [pc, #8] @ (8004570 <DMA1_Stream0_IRQHandler+0x10>)
  9238. 8004566: f005 f9e9 bl 800993c <HAL_DMA_IRQHandler>
  9239. /* USER CODE BEGIN DMA1_Stream0_IRQn 1 */
  9240. /* USER CODE END DMA1_Stream0_IRQn 1 */
  9241. }
  9242. 800456a: bf00 nop
  9243. 800456c: bd80 pop {r7, pc}
  9244. 800456e: bf00 nop
  9245. 8004570: 2400026c .word 0x2400026c
  9246. 08004574 <DMA1_Stream1_IRQHandler>:
  9247. /**
  9248. * @brief This function handles DMA1 stream1 global interrupt.
  9249. */
  9250. void DMA1_Stream1_IRQHandler(void)
  9251. {
  9252. 8004574: b580 push {r7, lr}
  9253. 8004576: af00 add r7, sp, #0
  9254. /* USER CODE BEGIN DMA1_Stream1_IRQn 0 */
  9255. /* USER CODE END DMA1_Stream1_IRQn 0 */
  9256. HAL_DMA_IRQHandler(&hdma_adc2);
  9257. 8004578: 4802 ldr r0, [pc, #8] @ (8004584 <DMA1_Stream1_IRQHandler+0x10>)
  9258. 800457a: f005 f9df bl 800993c <HAL_DMA_IRQHandler>
  9259. /* USER CODE BEGIN DMA1_Stream1_IRQn 1 */
  9260. /* USER CODE END DMA1_Stream1_IRQn 1 */
  9261. }
  9262. 800457e: bf00 nop
  9263. 8004580: bd80 pop {r7, pc}
  9264. 8004582: bf00 nop
  9265. 8004584: 240002e4 .word 0x240002e4
  9266. 08004588 <DMA1_Stream2_IRQHandler>:
  9267. /**
  9268. * @brief This function handles DMA1 stream2 global interrupt.
  9269. */
  9270. void DMA1_Stream2_IRQHandler(void)
  9271. {
  9272. 8004588: b580 push {r7, lr}
  9273. 800458a: af00 add r7, sp, #0
  9274. /* USER CODE BEGIN DMA1_Stream2_IRQn 0 */
  9275. /* USER CODE END DMA1_Stream2_IRQn 0 */
  9276. HAL_DMA_IRQHandler(&hdma_adc3);
  9277. 800458c: 4802 ldr r0, [pc, #8] @ (8004598 <DMA1_Stream2_IRQHandler+0x10>)
  9278. 800458e: f005 f9d5 bl 800993c <HAL_DMA_IRQHandler>
  9279. /* USER CODE BEGIN DMA1_Stream2_IRQn 1 */
  9280. /* USER CODE END DMA1_Stream2_IRQn 1 */
  9281. }
  9282. 8004592: bf00 nop
  9283. 8004594: bd80 pop {r7, pc}
  9284. 8004596: bf00 nop
  9285. 8004598: 2400035c .word 0x2400035c
  9286. 0800459c <USART1_IRQHandler>:
  9287. /**
  9288. * @brief This function handles USART1 global interrupt.
  9289. */
  9290. void USART1_IRQHandler(void)
  9291. {
  9292. 800459c: b580 push {r7, lr}
  9293. 800459e: af00 add r7, sp, #0
  9294. /* USER CODE BEGIN USART1_IRQn 0 */
  9295. /* USER CODE END USART1_IRQn 0 */
  9296. HAL_UART_IRQHandler(&huart1);
  9297. 80045a0: 4802 ldr r0, [pc, #8] @ (80045ac <USART1_IRQHandler+0x10>)
  9298. 80045a2: f00c faa9 bl 8010af8 <HAL_UART_IRQHandler>
  9299. /* USER CODE BEGIN USART1_IRQn 1 */
  9300. /* USER CODE END USART1_IRQn 1 */
  9301. }
  9302. 80045a6: bf00 nop
  9303. 80045a8: bd80 pop {r7, pc}
  9304. 80045aa: bf00 nop
  9305. 80045ac: 240005c4 .word 0x240005c4
  9306. 080045b0 <EXTI15_10_IRQHandler>:
  9307. /**
  9308. * @brief This function handles EXTI line[15:10] interrupts.
  9309. */
  9310. void EXTI15_10_IRQHandler(void)
  9311. {
  9312. 80045b0: b580 push {r7, lr}
  9313. 80045b2: af00 add r7, sp, #0
  9314. /* USER CODE BEGIN EXTI15_10_IRQn 0 */
  9315. /* USER CODE END EXTI15_10_IRQn 0 */
  9316. HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_10);
  9317. 80045b4: f44f 6080 mov.w r0, #1024 @ 0x400
  9318. 80045b8: f006 fecd bl 800b356 <HAL_GPIO_EXTI_IRQHandler>
  9319. HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_11);
  9320. 80045bc: f44f 6000 mov.w r0, #2048 @ 0x800
  9321. 80045c0: f006 fec9 bl 800b356 <HAL_GPIO_EXTI_IRQHandler>
  9322. HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_14);
  9323. 80045c4: f44f 4080 mov.w r0, #16384 @ 0x4000
  9324. 80045c8: f006 fec5 bl 800b356 <HAL_GPIO_EXTI_IRQHandler>
  9325. HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_15);
  9326. 80045cc: f44f 4000 mov.w r0, #32768 @ 0x8000
  9327. 80045d0: f006 fec1 bl 800b356 <HAL_GPIO_EXTI_IRQHandler>
  9328. /* USER CODE BEGIN EXTI15_10_IRQn 1 */
  9329. /* USER CODE END EXTI15_10_IRQn 1 */
  9330. }
  9331. 80045d4: bf00 nop
  9332. 80045d6: bd80 pop {r7, pc}
  9333. 080045d8 <TIM6_DAC_IRQHandler>:
  9334. /**
  9335. * @brief This function handles TIM6 global interrupt, DAC1_CH1 and DAC1_CH2 underrun error interrupts.
  9336. */
  9337. void TIM6_DAC_IRQHandler(void)
  9338. {
  9339. 80045d8: b580 push {r7, lr}
  9340. 80045da: af00 add r7, sp, #0
  9341. /* USER CODE BEGIN TIM6_DAC_IRQn 0 */
  9342. /* USER CODE END TIM6_DAC_IRQn 0 */
  9343. if (hdac1.State != HAL_DAC_STATE_RESET) {
  9344. 80045dc: 4b06 ldr r3, [pc, #24] @ (80045f8 <TIM6_DAC_IRQHandler+0x20>)
  9345. 80045de: 791b ldrb r3, [r3, #4]
  9346. 80045e0: b2db uxtb r3, r3
  9347. 80045e2: 2b00 cmp r3, #0
  9348. 80045e4: d002 beq.n 80045ec <TIM6_DAC_IRQHandler+0x14>
  9349. HAL_DAC_IRQHandler(&hdac1);
  9350. 80045e6: 4804 ldr r0, [pc, #16] @ (80045f8 <TIM6_DAC_IRQHandler+0x20>)
  9351. 80045e8: f003 fca7 bl 8007f3a <HAL_DAC_IRQHandler>
  9352. }
  9353. HAL_TIM_IRQHandler(&htim6);
  9354. 80045ec: 4803 ldr r0, [pc, #12] @ (80045fc <TIM6_DAC_IRQHandler+0x24>)
  9355. 80045ee: f00b f8bf bl 800f770 <HAL_TIM_IRQHandler>
  9356. /* USER CODE BEGIN TIM6_DAC_IRQn 1 */
  9357. /* USER CODE END TIM6_DAC_IRQn 1 */
  9358. }
  9359. 80045f2: bf00 nop
  9360. 80045f4: bd80 pop {r7, pc}
  9361. 80045f6: bf00 nop
  9362. 80045f8: 24000424 .word 0x24000424
  9363. 80045fc: 24000938 .word 0x24000938
  9364. 08004600 <UART8_IRQHandler>:
  9365. /**
  9366. * @brief This function handles UART8 global interrupt.
  9367. */
  9368. void UART8_IRQHandler(void)
  9369. {
  9370. 8004600: b580 push {r7, lr}
  9371. 8004602: af00 add r7, sp, #0
  9372. /* USER CODE BEGIN UART8_IRQn 0 */
  9373. /* USER CODE END UART8_IRQn 0 */
  9374. HAL_UART_IRQHandler(&huart8);
  9375. 8004604: 4802 ldr r0, [pc, #8] @ (8004610 <UART8_IRQHandler+0x10>)
  9376. 8004606: f00c fa77 bl 8010af8 <HAL_UART_IRQHandler>
  9377. /* USER CODE BEGIN UART8_IRQn 1 */
  9378. /* USER CODE END UART8_IRQn 1 */
  9379. }
  9380. 800460a: bf00 nop
  9381. 800460c: bd80 pop {r7, pc}
  9382. 800460e: bf00 nop
  9383. 8004610: 24000530 .word 0x24000530
  9384. 08004614 <_read>:
  9385. _kill(status, -1);
  9386. while (1) {} /* Make sure we hang here */
  9387. }
  9388. __attribute__((weak)) int _read(int file, char *ptr, int len)
  9389. {
  9390. 8004614: b580 push {r7, lr}
  9391. 8004616: b086 sub sp, #24
  9392. 8004618: af00 add r7, sp, #0
  9393. 800461a: 60f8 str r0, [r7, #12]
  9394. 800461c: 60b9 str r1, [r7, #8]
  9395. 800461e: 607a str r2, [r7, #4]
  9396. (void)file;
  9397. int DataIdx;
  9398. for (DataIdx = 0; DataIdx < len; DataIdx++)
  9399. 8004620: 2300 movs r3, #0
  9400. 8004622: 617b str r3, [r7, #20]
  9401. 8004624: e00a b.n 800463c <_read+0x28>
  9402. {
  9403. *ptr++ = __io_getchar();
  9404. 8004626: f3af 8000 nop.w
  9405. 800462a: 4601 mov r1, r0
  9406. 800462c: 68bb ldr r3, [r7, #8]
  9407. 800462e: 1c5a adds r2, r3, #1
  9408. 8004630: 60ba str r2, [r7, #8]
  9409. 8004632: b2ca uxtb r2, r1
  9410. 8004634: 701a strb r2, [r3, #0]
  9411. for (DataIdx = 0; DataIdx < len; DataIdx++)
  9412. 8004636: 697b ldr r3, [r7, #20]
  9413. 8004638: 3301 adds r3, #1
  9414. 800463a: 617b str r3, [r7, #20]
  9415. 800463c: 697a ldr r2, [r7, #20]
  9416. 800463e: 687b ldr r3, [r7, #4]
  9417. 8004640: 429a cmp r2, r3
  9418. 8004642: dbf0 blt.n 8004626 <_read+0x12>
  9419. }
  9420. return len;
  9421. 8004644: 687b ldr r3, [r7, #4]
  9422. }
  9423. 8004646: 4618 mov r0, r3
  9424. 8004648: 3718 adds r7, #24
  9425. 800464a: 46bd mov sp, r7
  9426. 800464c: bd80 pop {r7, pc}
  9427. 0800464e <_write>:
  9428. __attribute__((weak)) int _write(int file, char *ptr, int len)
  9429. {
  9430. 800464e: b580 push {r7, lr}
  9431. 8004650: b086 sub sp, #24
  9432. 8004652: af00 add r7, sp, #0
  9433. 8004654: 60f8 str r0, [r7, #12]
  9434. 8004656: 60b9 str r1, [r7, #8]
  9435. 8004658: 607a str r2, [r7, #4]
  9436. (void)file;
  9437. int DataIdx;
  9438. for (DataIdx = 0; DataIdx < len; DataIdx++)
  9439. 800465a: 2300 movs r3, #0
  9440. 800465c: 617b str r3, [r7, #20]
  9441. 800465e: e009 b.n 8004674 <_write+0x26>
  9442. {
  9443. __io_putchar(*ptr++);
  9444. 8004660: 68bb ldr r3, [r7, #8]
  9445. 8004662: 1c5a adds r2, r3, #1
  9446. 8004664: 60ba str r2, [r7, #8]
  9447. 8004666: 781b ldrb r3, [r3, #0]
  9448. 8004668: 4618 mov r0, r3
  9449. 800466a: f7fc f84a bl 8000702 <__io_putchar>
  9450. for (DataIdx = 0; DataIdx < len; DataIdx++)
  9451. 800466e: 697b ldr r3, [r7, #20]
  9452. 8004670: 3301 adds r3, #1
  9453. 8004672: 617b str r3, [r7, #20]
  9454. 8004674: 697a ldr r2, [r7, #20]
  9455. 8004676: 687b ldr r3, [r7, #4]
  9456. 8004678: 429a cmp r2, r3
  9457. 800467a: dbf1 blt.n 8004660 <_write+0x12>
  9458. }
  9459. return len;
  9460. 800467c: 687b ldr r3, [r7, #4]
  9461. }
  9462. 800467e: 4618 mov r0, r3
  9463. 8004680: 3718 adds r7, #24
  9464. 8004682: 46bd mov sp, r7
  9465. 8004684: bd80 pop {r7, pc}
  9466. 08004686 <_close>:
  9467. int _close(int file)
  9468. {
  9469. 8004686: b480 push {r7}
  9470. 8004688: b083 sub sp, #12
  9471. 800468a: af00 add r7, sp, #0
  9472. 800468c: 6078 str r0, [r7, #4]
  9473. (void)file;
  9474. return -1;
  9475. 800468e: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  9476. }
  9477. 8004692: 4618 mov r0, r3
  9478. 8004694: 370c adds r7, #12
  9479. 8004696: 46bd mov sp, r7
  9480. 8004698: f85d 7b04 ldr.w r7, [sp], #4
  9481. 800469c: 4770 bx lr
  9482. 0800469e <_fstat>:
  9483. int _fstat(int file, struct stat *st)
  9484. {
  9485. 800469e: b480 push {r7}
  9486. 80046a0: b083 sub sp, #12
  9487. 80046a2: af00 add r7, sp, #0
  9488. 80046a4: 6078 str r0, [r7, #4]
  9489. 80046a6: 6039 str r1, [r7, #0]
  9490. (void)file;
  9491. st->st_mode = S_IFCHR;
  9492. 80046a8: 683b ldr r3, [r7, #0]
  9493. 80046aa: f44f 5200 mov.w r2, #8192 @ 0x2000
  9494. 80046ae: 605a str r2, [r3, #4]
  9495. return 0;
  9496. 80046b0: 2300 movs r3, #0
  9497. }
  9498. 80046b2: 4618 mov r0, r3
  9499. 80046b4: 370c adds r7, #12
  9500. 80046b6: 46bd mov sp, r7
  9501. 80046b8: f85d 7b04 ldr.w r7, [sp], #4
  9502. 80046bc: 4770 bx lr
  9503. 080046be <_isatty>:
  9504. int _isatty(int file)
  9505. {
  9506. 80046be: b480 push {r7}
  9507. 80046c0: b083 sub sp, #12
  9508. 80046c2: af00 add r7, sp, #0
  9509. 80046c4: 6078 str r0, [r7, #4]
  9510. (void)file;
  9511. return 1;
  9512. 80046c6: 2301 movs r3, #1
  9513. }
  9514. 80046c8: 4618 mov r0, r3
  9515. 80046ca: 370c adds r7, #12
  9516. 80046cc: 46bd mov sp, r7
  9517. 80046ce: f85d 7b04 ldr.w r7, [sp], #4
  9518. 80046d2: 4770 bx lr
  9519. 080046d4 <_lseek>:
  9520. int _lseek(int file, int ptr, int dir)
  9521. {
  9522. 80046d4: b480 push {r7}
  9523. 80046d6: b085 sub sp, #20
  9524. 80046d8: af00 add r7, sp, #0
  9525. 80046da: 60f8 str r0, [r7, #12]
  9526. 80046dc: 60b9 str r1, [r7, #8]
  9527. 80046de: 607a str r2, [r7, #4]
  9528. (void)file;
  9529. (void)ptr;
  9530. (void)dir;
  9531. return 0;
  9532. 80046e0: 2300 movs r3, #0
  9533. }
  9534. 80046e2: 4618 mov r0, r3
  9535. 80046e4: 3714 adds r7, #20
  9536. 80046e6: 46bd mov sp, r7
  9537. 80046e8: f85d 7b04 ldr.w r7, [sp], #4
  9538. 80046ec: 4770 bx lr
  9539. ...
  9540. 080046f0 <_sbrk>:
  9541. *
  9542. * @param incr Memory size
  9543. * @return Pointer to allocated memory
  9544. */
  9545. void *_sbrk(ptrdiff_t incr)
  9546. {
  9547. 80046f0: b580 push {r7, lr}
  9548. 80046f2: b086 sub sp, #24
  9549. 80046f4: af00 add r7, sp, #0
  9550. 80046f6: 6078 str r0, [r7, #4]
  9551. extern uint8_t _end; /* Symbol defined in the linker script */
  9552. extern uint8_t _estack; /* Symbol defined in the linker script */
  9553. extern uint32_t _Min_Stack_Size; /* Symbol defined in the linker script */
  9554. const uint32_t stack_limit = (uint32_t)&_estack - (uint32_t)&_Min_Stack_Size;
  9555. 80046f8: 4a14 ldr r2, [pc, #80] @ (800474c <_sbrk+0x5c>)
  9556. 80046fa: 4b15 ldr r3, [pc, #84] @ (8004750 <_sbrk+0x60>)
  9557. 80046fc: 1ad3 subs r3, r2, r3
  9558. 80046fe: 617b str r3, [r7, #20]
  9559. const uint8_t *max_heap = (uint8_t *)stack_limit;
  9560. 8004700: 697b ldr r3, [r7, #20]
  9561. 8004702: 613b str r3, [r7, #16]
  9562. uint8_t *prev_heap_end;
  9563. /* Initialize heap end at first call */
  9564. if (NULL == __sbrk_heap_end)
  9565. 8004704: 4b13 ldr r3, [pc, #76] @ (8004754 <_sbrk+0x64>)
  9566. 8004706: 681b ldr r3, [r3, #0]
  9567. 8004708: 2b00 cmp r3, #0
  9568. 800470a: d102 bne.n 8004712 <_sbrk+0x22>
  9569. {
  9570. __sbrk_heap_end = &_end;
  9571. 800470c: 4b11 ldr r3, [pc, #68] @ (8004754 <_sbrk+0x64>)
  9572. 800470e: 4a12 ldr r2, [pc, #72] @ (8004758 <_sbrk+0x68>)
  9573. 8004710: 601a str r2, [r3, #0]
  9574. }
  9575. /* Protect heap from growing into the reserved MSP stack */
  9576. if (__sbrk_heap_end + incr > max_heap)
  9577. 8004712: 4b10 ldr r3, [pc, #64] @ (8004754 <_sbrk+0x64>)
  9578. 8004714: 681a ldr r2, [r3, #0]
  9579. 8004716: 687b ldr r3, [r7, #4]
  9580. 8004718: 4413 add r3, r2
  9581. 800471a: 693a ldr r2, [r7, #16]
  9582. 800471c: 429a cmp r2, r3
  9583. 800471e: d207 bcs.n 8004730 <_sbrk+0x40>
  9584. {
  9585. errno = ENOMEM;
  9586. 8004720: f013 fb58 bl 8017dd4 <__errno>
  9587. 8004724: 4603 mov r3, r0
  9588. 8004726: 220c movs r2, #12
  9589. 8004728: 601a str r2, [r3, #0]
  9590. return (void *)-1;
  9591. 800472a: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  9592. 800472e: e009 b.n 8004744 <_sbrk+0x54>
  9593. }
  9594. prev_heap_end = __sbrk_heap_end;
  9595. 8004730: 4b08 ldr r3, [pc, #32] @ (8004754 <_sbrk+0x64>)
  9596. 8004732: 681b ldr r3, [r3, #0]
  9597. 8004734: 60fb str r3, [r7, #12]
  9598. __sbrk_heap_end += incr;
  9599. 8004736: 4b07 ldr r3, [pc, #28] @ (8004754 <_sbrk+0x64>)
  9600. 8004738: 681a ldr r2, [r3, #0]
  9601. 800473a: 687b ldr r3, [r7, #4]
  9602. 800473c: 4413 add r3, r2
  9603. 800473e: 4a05 ldr r2, [pc, #20] @ (8004754 <_sbrk+0x64>)
  9604. 8004740: 6013 str r3, [r2, #0]
  9605. return (void *)prev_heap_end;
  9606. 8004742: 68fb ldr r3, [r7, #12]
  9607. }
  9608. 8004744: 4618 mov r0, r3
  9609. 8004746: 3718 adds r7, #24
  9610. 8004748: 46bd mov sp, r7
  9611. 800474a: bd80 pop {r7, pc}
  9612. 800474c: 24060000 .word 0x24060000
  9613. 8004750: 00000400 .word 0x00000400
  9614. 8004754: 24000984 .word 0x24000984
  9615. 8004758: 240131b8 .word 0x240131b8
  9616. 0800475c <SystemInit>:
  9617. * configuration.
  9618. * @param None
  9619. * @retval None
  9620. */
  9621. void SystemInit (void)
  9622. {
  9623. 800475c: b480 push {r7}
  9624. 800475e: af00 add r7, sp, #0
  9625. __IO uint32_t tmpreg;
  9626. #endif /* DATA_IN_D2_SRAM */
  9627. /* FPU settings ------------------------------------------------------------*/
  9628. #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
  9629. SCB->CPACR |= ((3UL << (10*2))|(3UL << (11*2))); /* set CP10 and CP11 Full Access */
  9630. 8004760: 4b37 ldr r3, [pc, #220] @ (8004840 <SystemInit+0xe4>)
  9631. 8004762: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  9632. 8004766: 4a36 ldr r2, [pc, #216] @ (8004840 <SystemInit+0xe4>)
  9633. 8004768: f443 0370 orr.w r3, r3, #15728640 @ 0xf00000
  9634. 800476c: f8c2 3088 str.w r3, [r2, #136] @ 0x88
  9635. #endif
  9636. /* Reset the RCC clock configuration to the default reset state ------------*/
  9637. /* Increasing the CPU frequency */
  9638. if(FLASH_LATENCY_DEFAULT > (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY)))
  9639. 8004770: 4b34 ldr r3, [pc, #208] @ (8004844 <SystemInit+0xe8>)
  9640. 8004772: 681b ldr r3, [r3, #0]
  9641. 8004774: f003 030f and.w r3, r3, #15
  9642. 8004778: 2b06 cmp r3, #6
  9643. 800477a: d807 bhi.n 800478c <SystemInit+0x30>
  9644. {
  9645. /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
  9646. MODIFY_REG(FLASH->ACR, FLASH_ACR_LATENCY, (uint32_t)(FLASH_LATENCY_DEFAULT));
  9647. 800477c: 4b31 ldr r3, [pc, #196] @ (8004844 <SystemInit+0xe8>)
  9648. 800477e: 681b ldr r3, [r3, #0]
  9649. 8004780: f023 030f bic.w r3, r3, #15
  9650. 8004784: 4a2f ldr r2, [pc, #188] @ (8004844 <SystemInit+0xe8>)
  9651. 8004786: f043 0307 orr.w r3, r3, #7
  9652. 800478a: 6013 str r3, [r2, #0]
  9653. }
  9654. /* Set HSION bit */
  9655. RCC->CR |= RCC_CR_HSION;
  9656. 800478c: 4b2e ldr r3, [pc, #184] @ (8004848 <SystemInit+0xec>)
  9657. 800478e: 681b ldr r3, [r3, #0]
  9658. 8004790: 4a2d ldr r2, [pc, #180] @ (8004848 <SystemInit+0xec>)
  9659. 8004792: f043 0301 orr.w r3, r3, #1
  9660. 8004796: 6013 str r3, [r2, #0]
  9661. /* Reset CFGR register */
  9662. RCC->CFGR = 0x00000000;
  9663. 8004798: 4b2b ldr r3, [pc, #172] @ (8004848 <SystemInit+0xec>)
  9664. 800479a: 2200 movs r2, #0
  9665. 800479c: 611a str r2, [r3, #16]
  9666. /* Reset HSEON, HSECSSON, CSION, HSI48ON, CSIKERON, PLL1ON, PLL2ON and PLL3ON bits */
  9667. RCC->CR &= 0xEAF6ED7FU;
  9668. 800479e: 4b2a ldr r3, [pc, #168] @ (8004848 <SystemInit+0xec>)
  9669. 80047a0: 681a ldr r2, [r3, #0]
  9670. 80047a2: 4929 ldr r1, [pc, #164] @ (8004848 <SystemInit+0xec>)
  9671. 80047a4: 4b29 ldr r3, [pc, #164] @ (800484c <SystemInit+0xf0>)
  9672. 80047a6: 4013 ands r3, r2
  9673. 80047a8: 600b str r3, [r1, #0]
  9674. /* Decreasing the number of wait states because of lower CPU frequency */
  9675. if(FLASH_LATENCY_DEFAULT < (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY)))
  9676. 80047aa: 4b26 ldr r3, [pc, #152] @ (8004844 <SystemInit+0xe8>)
  9677. 80047ac: 681b ldr r3, [r3, #0]
  9678. 80047ae: f003 0308 and.w r3, r3, #8
  9679. 80047b2: 2b00 cmp r3, #0
  9680. 80047b4: d007 beq.n 80047c6 <SystemInit+0x6a>
  9681. {
  9682. /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
  9683. MODIFY_REG(FLASH->ACR, FLASH_ACR_LATENCY, (uint32_t)(FLASH_LATENCY_DEFAULT));
  9684. 80047b6: 4b23 ldr r3, [pc, #140] @ (8004844 <SystemInit+0xe8>)
  9685. 80047b8: 681b ldr r3, [r3, #0]
  9686. 80047ba: f023 030f bic.w r3, r3, #15
  9687. 80047be: 4a21 ldr r2, [pc, #132] @ (8004844 <SystemInit+0xe8>)
  9688. 80047c0: f043 0307 orr.w r3, r3, #7
  9689. 80047c4: 6013 str r3, [r2, #0]
  9690. }
  9691. #if defined(D3_SRAM_BASE)
  9692. /* Reset D1CFGR register */
  9693. RCC->D1CFGR = 0x00000000;
  9694. 80047c6: 4b20 ldr r3, [pc, #128] @ (8004848 <SystemInit+0xec>)
  9695. 80047c8: 2200 movs r2, #0
  9696. 80047ca: 619a str r2, [r3, #24]
  9697. /* Reset D2CFGR register */
  9698. RCC->D2CFGR = 0x00000000;
  9699. 80047cc: 4b1e ldr r3, [pc, #120] @ (8004848 <SystemInit+0xec>)
  9700. 80047ce: 2200 movs r2, #0
  9701. 80047d0: 61da str r2, [r3, #28]
  9702. /* Reset D3CFGR register */
  9703. RCC->D3CFGR = 0x00000000;
  9704. 80047d2: 4b1d ldr r3, [pc, #116] @ (8004848 <SystemInit+0xec>)
  9705. 80047d4: 2200 movs r2, #0
  9706. 80047d6: 621a str r2, [r3, #32]
  9707. /* Reset SRDCFGR register */
  9708. RCC->SRDCFGR = 0x00000000;
  9709. #endif
  9710. /* Reset PLLCKSELR register */
  9711. RCC->PLLCKSELR = 0x02020200;
  9712. 80047d8: 4b1b ldr r3, [pc, #108] @ (8004848 <SystemInit+0xec>)
  9713. 80047da: 4a1d ldr r2, [pc, #116] @ (8004850 <SystemInit+0xf4>)
  9714. 80047dc: 629a str r2, [r3, #40] @ 0x28
  9715. /* Reset PLLCFGR register */
  9716. RCC->PLLCFGR = 0x01FF0000;
  9717. 80047de: 4b1a ldr r3, [pc, #104] @ (8004848 <SystemInit+0xec>)
  9718. 80047e0: 4a1c ldr r2, [pc, #112] @ (8004854 <SystemInit+0xf8>)
  9719. 80047e2: 62da str r2, [r3, #44] @ 0x2c
  9720. /* Reset PLL1DIVR register */
  9721. RCC->PLL1DIVR = 0x01010280;
  9722. 80047e4: 4b18 ldr r3, [pc, #96] @ (8004848 <SystemInit+0xec>)
  9723. 80047e6: 4a1c ldr r2, [pc, #112] @ (8004858 <SystemInit+0xfc>)
  9724. 80047e8: 631a str r2, [r3, #48] @ 0x30
  9725. /* Reset PLL1FRACR register */
  9726. RCC->PLL1FRACR = 0x00000000;
  9727. 80047ea: 4b17 ldr r3, [pc, #92] @ (8004848 <SystemInit+0xec>)
  9728. 80047ec: 2200 movs r2, #0
  9729. 80047ee: 635a str r2, [r3, #52] @ 0x34
  9730. /* Reset PLL2DIVR register */
  9731. RCC->PLL2DIVR = 0x01010280;
  9732. 80047f0: 4b15 ldr r3, [pc, #84] @ (8004848 <SystemInit+0xec>)
  9733. 80047f2: 4a19 ldr r2, [pc, #100] @ (8004858 <SystemInit+0xfc>)
  9734. 80047f4: 639a str r2, [r3, #56] @ 0x38
  9735. /* Reset PLL2FRACR register */
  9736. RCC->PLL2FRACR = 0x00000000;
  9737. 80047f6: 4b14 ldr r3, [pc, #80] @ (8004848 <SystemInit+0xec>)
  9738. 80047f8: 2200 movs r2, #0
  9739. 80047fa: 63da str r2, [r3, #60] @ 0x3c
  9740. /* Reset PLL3DIVR register */
  9741. RCC->PLL3DIVR = 0x01010280;
  9742. 80047fc: 4b12 ldr r3, [pc, #72] @ (8004848 <SystemInit+0xec>)
  9743. 80047fe: 4a16 ldr r2, [pc, #88] @ (8004858 <SystemInit+0xfc>)
  9744. 8004800: 641a str r2, [r3, #64] @ 0x40
  9745. /* Reset PLL3FRACR register */
  9746. RCC->PLL3FRACR = 0x00000000;
  9747. 8004802: 4b11 ldr r3, [pc, #68] @ (8004848 <SystemInit+0xec>)
  9748. 8004804: 2200 movs r2, #0
  9749. 8004806: 645a str r2, [r3, #68] @ 0x44
  9750. /* Reset HSEBYP bit */
  9751. RCC->CR &= 0xFFFBFFFFU;
  9752. 8004808: 4b0f ldr r3, [pc, #60] @ (8004848 <SystemInit+0xec>)
  9753. 800480a: 681b ldr r3, [r3, #0]
  9754. 800480c: 4a0e ldr r2, [pc, #56] @ (8004848 <SystemInit+0xec>)
  9755. 800480e: f423 2380 bic.w r3, r3, #262144 @ 0x40000
  9756. 8004812: 6013 str r3, [r2, #0]
  9757. /* Disable all interrupts */
  9758. RCC->CIER = 0x00000000;
  9759. 8004814: 4b0c ldr r3, [pc, #48] @ (8004848 <SystemInit+0xec>)
  9760. 8004816: 2200 movs r2, #0
  9761. 8004818: 661a str r2, [r3, #96] @ 0x60
  9762. #if (STM32H7_DEV_ID == 0x450UL)
  9763. /* dual core CM7 or single core line */
  9764. if((DBGMCU->IDCODE & 0xFFFF0000U) < 0x20000000U)
  9765. 800481a: 4b10 ldr r3, [pc, #64] @ (800485c <SystemInit+0x100>)
  9766. 800481c: 681a ldr r2, [r3, #0]
  9767. 800481e: 4b10 ldr r3, [pc, #64] @ (8004860 <SystemInit+0x104>)
  9768. 8004820: 4013 ands r3, r2
  9769. 8004822: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  9770. 8004826: d202 bcs.n 800482e <SystemInit+0xd2>
  9771. {
  9772. /* if stm32h7 revY*/
  9773. /* Change the switch matrix read issuing capability to 1 for the AXI SRAM target (Target 7) */
  9774. *((__IO uint32_t*)0x51008108) = 0x000000001U;
  9775. 8004828: 4b0e ldr r3, [pc, #56] @ (8004864 <SystemInit+0x108>)
  9776. 800482a: 2201 movs r2, #1
  9777. 800482c: 601a str r2, [r3, #0]
  9778. /*
  9779. * Disable the FMC bank1 (enabled after reset).
  9780. * This, prevents CPU speculation access on this bank which blocks the use of FMC during
  9781. * 24us. During this time the others FMC master (such as LTDC) cannot use it!
  9782. */
  9783. FMC_Bank1_R->BTCR[0] = 0x000030D2;
  9784. 800482e: 4b0e ldr r3, [pc, #56] @ (8004868 <SystemInit+0x10c>)
  9785. 8004830: f243 02d2 movw r2, #12498 @ 0x30d2
  9786. 8004834: 601a str r2, [r3, #0]
  9787. #if defined(USER_VECT_TAB_ADDRESS)
  9788. SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal D1 AXI-RAM or in Internal FLASH */
  9789. #endif /* USER_VECT_TAB_ADDRESS */
  9790. #endif /*DUAL_CORE && CORE_CM4*/
  9791. }
  9792. 8004836: bf00 nop
  9793. 8004838: 46bd mov sp, r7
  9794. 800483a: f85d 7b04 ldr.w r7, [sp], #4
  9795. 800483e: 4770 bx lr
  9796. 8004840: e000ed00 .word 0xe000ed00
  9797. 8004844: 52002000 .word 0x52002000
  9798. 8004848: 58024400 .word 0x58024400
  9799. 800484c: eaf6ed7f .word 0xeaf6ed7f
  9800. 8004850: 02020200 .word 0x02020200
  9801. 8004854: 01ff0000 .word 0x01ff0000
  9802. 8004858: 01010280 .word 0x01010280
  9803. 800485c: 5c001000 .word 0x5c001000
  9804. 8004860: ffff0000 .word 0xffff0000
  9805. 8004864: 51008108 .word 0x51008108
  9806. 8004868: 52004000 .word 0x52004000
  9807. 0800486c <__NVIC_SystemReset>:
  9808. {
  9809. 800486c: b480 push {r7}
  9810. 800486e: af00 add r7, sp, #0
  9811. __ASM volatile ("dsb 0xF":::"memory");
  9812. 8004870: f3bf 8f4f dsb sy
  9813. }
  9814. 8004874: bf00 nop
  9815. (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |
  9816. 8004876: 4b06 ldr r3, [pc, #24] @ (8004890 <__NVIC_SystemReset+0x24>)
  9817. 8004878: 68db ldr r3, [r3, #12]
  9818. 800487a: f403 62e0 and.w r2, r3, #1792 @ 0x700
  9819. SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |
  9820. 800487e: 4904 ldr r1, [pc, #16] @ (8004890 <__NVIC_SystemReset+0x24>)
  9821. 8004880: 4b04 ldr r3, [pc, #16] @ (8004894 <__NVIC_SystemReset+0x28>)
  9822. 8004882: 4313 orrs r3, r2
  9823. 8004884: 60cb str r3, [r1, #12]
  9824. __ASM volatile ("dsb 0xF":::"memory");
  9825. 8004886: f3bf 8f4f dsb sy
  9826. }
  9827. 800488a: bf00 nop
  9828. __NOP();
  9829. 800488c: bf00 nop
  9830. 800488e: e7fd b.n 800488c <__NVIC_SystemReset+0x20>
  9831. 8004890: e000ed00 .word 0xe000ed00
  9832. 8004894: 05fa0004 .word 0x05fa0004
  9833. 08004898 <UartTasksInit>:
  9834. uint8_t outputDataBuffer[OUTPUT_DATA_BUFF_SIZE];
  9835. uint16_t outputDataBufferPos = 0;
  9836. extern RNG_HandleTypeDef hrng;
  9837. void UartTasksInit (void) {
  9838. 8004898: b580 push {r7, lr}
  9839. 800489a: af00 add r7, sp, #0
  9840. uart1TaskData.uartRxBuffer = uart1RxBuffer;
  9841. 800489c: 4b24 ldr r3, [pc, #144] @ (8004930 <UartTasksInit+0x98>)
  9842. 800489e: 4a25 ldr r2, [pc, #148] @ (8004934 <UartTasksInit+0x9c>)
  9843. 80048a0: 601a str r2, [r3, #0]
  9844. uart1TaskData.uartRxBufferLen = UART1_RX_BUFF_SIZE;
  9845. 80048a2: 4b23 ldr r3, [pc, #140] @ (8004930 <UartTasksInit+0x98>)
  9846. 80048a4: f44f 7280 mov.w r2, #256 @ 0x100
  9847. 80048a8: 809a strh r2, [r3, #4]
  9848. uart1TaskData.uartTxBuffer = uart1TxBuffer;
  9849. 80048aa: 4b21 ldr r3, [pc, #132] @ (8004930 <UartTasksInit+0x98>)
  9850. 80048ac: 4a22 ldr r2, [pc, #136] @ (8004938 <UartTasksInit+0xa0>)
  9851. 80048ae: 609a str r2, [r3, #8]
  9852. uart1TaskData.uartRxBufferLen = UART1_TX_BUFF_SIZE;
  9853. 80048b0: 4b1f ldr r3, [pc, #124] @ (8004930 <UartTasksInit+0x98>)
  9854. 80048b2: f44f 7280 mov.w r2, #256 @ 0x100
  9855. 80048b6: 809a strh r2, [r3, #4]
  9856. uart1TaskData.frameData = uart1TaskFrameData;
  9857. 80048b8: 4b1d ldr r3, [pc, #116] @ (8004930 <UartTasksInit+0x98>)
  9858. 80048ba: 4a20 ldr r2, [pc, #128] @ (800493c <UartTasksInit+0xa4>)
  9859. 80048bc: 611a str r2, [r3, #16]
  9860. uart1TaskData.frameDataLen = UART1_RX_BUFF_SIZE;
  9861. 80048be: 4b1c ldr r3, [pc, #112] @ (8004930 <UartTasksInit+0x98>)
  9862. 80048c0: f44f 7280 mov.w r2, #256 @ 0x100
  9863. 80048c4: 829a strh r2, [r3, #20]
  9864. uart1TaskData.huart = &huart1;
  9865. 80048c6: 4b1a ldr r3, [pc, #104] @ (8004930 <UartTasksInit+0x98>)
  9866. 80048c8: 4a1d ldr r2, [pc, #116] @ (8004940 <UartTasksInit+0xa8>)
  9867. 80048ca: 631a str r2, [r3, #48] @ 0x30
  9868. uart1TaskData.uartNumber = 1;
  9869. 80048cc: 4b18 ldr r3, [pc, #96] @ (8004930 <UartTasksInit+0x98>)
  9870. 80048ce: 2201 movs r2, #1
  9871. 80048d0: f883 2034 strb.w r2, [r3, #52] @ 0x34
  9872. uart1TaskData.processDataCb = Uart1ReceivedDataProcessCallback;
  9873. 80048d4: 4b16 ldr r3, [pc, #88] @ (8004930 <UartTasksInit+0x98>)
  9874. 80048d6: 4a1b ldr r2, [pc, #108] @ (8004944 <UartTasksInit+0xac>)
  9875. 80048d8: 629a str r2, [r3, #40] @ 0x28
  9876. uart1TaskData.processRxDataMsgBuffer = NULL;
  9877. 80048da: 4b15 ldr r3, [pc, #84] @ (8004930 <UartTasksInit+0x98>)
  9878. 80048dc: 2200 movs r2, #0
  9879. 80048de: 625a str r2, [r3, #36] @ 0x24
  9880. uart8TaskData.uartRxBuffer = uart8RxBuffer;
  9881. 80048e0: 4b19 ldr r3, [pc, #100] @ (8004948 <UartTasksInit+0xb0>)
  9882. 80048e2: 4a1a ldr r2, [pc, #104] @ (800494c <UartTasksInit+0xb4>)
  9883. 80048e4: 601a str r2, [r3, #0]
  9884. uart8TaskData.uartRxBufferLen = UART8_RX_BUFF_SIZE;
  9885. 80048e6: 4b18 ldr r3, [pc, #96] @ (8004948 <UartTasksInit+0xb0>)
  9886. 80048e8: f44f 7280 mov.w r2, #256 @ 0x100
  9887. 80048ec: 809a strh r2, [r3, #4]
  9888. uart8TaskData.uartTxBuffer = uart8TxBuffer;
  9889. 80048ee: 4b16 ldr r3, [pc, #88] @ (8004948 <UartTasksInit+0xb0>)
  9890. 80048f0: 4a17 ldr r2, [pc, #92] @ (8004950 <UartTasksInit+0xb8>)
  9891. 80048f2: 609a str r2, [r3, #8]
  9892. uart8TaskData.uartRxBufferLen = UART8_TX_BUFF_SIZE;
  9893. 80048f4: 4b14 ldr r3, [pc, #80] @ (8004948 <UartTasksInit+0xb0>)
  9894. 80048f6: f44f 7280 mov.w r2, #256 @ 0x100
  9895. 80048fa: 809a strh r2, [r3, #4]
  9896. uart8TaskData.frameData = uart8TaskFrameData;
  9897. 80048fc: 4b12 ldr r3, [pc, #72] @ (8004948 <UartTasksInit+0xb0>)
  9898. 80048fe: 4a15 ldr r2, [pc, #84] @ (8004954 <UartTasksInit+0xbc>)
  9899. 8004900: 611a str r2, [r3, #16]
  9900. uart8TaskData.frameDataLen = UART8_RX_BUFF_SIZE;
  9901. 8004902: 4b11 ldr r3, [pc, #68] @ (8004948 <UartTasksInit+0xb0>)
  9902. 8004904: f44f 7280 mov.w r2, #256 @ 0x100
  9903. 8004908: 829a strh r2, [r3, #20]
  9904. uart8TaskData.huart = &huart8;
  9905. 800490a: 4b0f ldr r3, [pc, #60] @ (8004948 <UartTasksInit+0xb0>)
  9906. 800490c: 4a12 ldr r2, [pc, #72] @ (8004958 <UartTasksInit+0xc0>)
  9907. 800490e: 631a str r2, [r3, #48] @ 0x30
  9908. uart8TaskData.uartNumber = 8;
  9909. 8004910: 4b0d ldr r3, [pc, #52] @ (8004948 <UartTasksInit+0xb0>)
  9910. 8004912: 2208 movs r2, #8
  9911. 8004914: f883 2034 strb.w r2, [r3, #52] @ 0x34
  9912. uart8TaskData.processDataCb = Uart8ReceivedDataProcessCallback;
  9913. 8004918: 4b0b ldr r3, [pc, #44] @ (8004948 <UartTasksInit+0xb0>)
  9914. 800491a: 4a10 ldr r2, [pc, #64] @ (800495c <UartTasksInit+0xc4>)
  9915. 800491c: 629a str r2, [r3, #40] @ 0x28
  9916. uart8TaskData.processRxDataMsgBuffer = NULL;
  9917. 800491e: 4b0a ldr r3, [pc, #40] @ (8004948 <UartTasksInit+0xb0>)
  9918. 8004920: 2200 movs r2, #0
  9919. 8004922: 625a str r2, [r3, #36] @ 0x24
  9920. #ifdef USE_UART8_INSTEAD_UART1
  9921. UartTaskCreate (&uart8TaskData);
  9922. 8004924: 4808 ldr r0, [pc, #32] @ (8004948 <UartTasksInit+0xb0>)
  9923. 8004926: f000 f81b bl 8004960 <UartTaskCreate>
  9924. #else
  9925. UartTaskCreate (&uart1TaskData);
  9926. #endif
  9927. }
  9928. 800492a: bf00 nop
  9929. 800492c: bd80 pop {r7, pc}
  9930. 800492e: bf00 nop
  9931. 8004930: 24000f88 .word 0x24000f88
  9932. 8004934: 24000988 .word 0x24000988
  9933. 8004938: 24000a88 .word 0x24000a88
  9934. 800493c: 24000b88 .word 0x24000b88
  9935. 8004940: 240005c4 .word 0x240005c4
  9936. 8004944: 08005009 .word 0x08005009
  9937. 8004948: 24000fc0 .word 0x24000fc0
  9938. 800494c: 24000c88 .word 0x24000c88
  9939. 8004950: 24000d88 .word 0x24000d88
  9940. 8004954: 24000e88 .word 0x24000e88
  9941. 8004958: 24000530 .word 0x24000530
  9942. 800495c: 08004fed .word 0x08004fed
  9943. 08004960 <UartTaskCreate>:
  9944. void UartTaskCreate (UartTaskData* uartTaskData) {
  9945. 8004960: b580 push {r7, lr}
  9946. 8004962: b08c sub sp, #48 @ 0x30
  9947. 8004964: af00 add r7, sp, #0
  9948. 8004966: 6078 str r0, [r7, #4]
  9949. osThreadAttr_t osThreadAttrRxUart = { 0 };
  9950. 8004968: f107 030c add.w r3, r7, #12
  9951. 800496c: 2224 movs r2, #36 @ 0x24
  9952. 800496e: 2100 movs r1, #0
  9953. 8004970: 4618 mov r0, r3
  9954. 8004972: f013 f98b bl 8017c8c <memset>
  9955. osThreadAttrRxUart.stack_size = configMINIMAL_STACK_SIZE * 2;
  9956. 8004976: f44f 6380 mov.w r3, #1024 @ 0x400
  9957. 800497a: 623b str r3, [r7, #32]
  9958. osThreadAttrRxUart.priority = (osPriority_t)osPriorityHigh;
  9959. 800497c: 2328 movs r3, #40 @ 0x28
  9960. 800497e: 627b str r3, [r7, #36] @ 0x24
  9961. uartTaskData->uartRecieveTaskHandle = osThreadNew (UartRxTask, uartTaskData, &osThreadAttrRxUart);
  9962. 8004980: f107 030c add.w r3, r7, #12
  9963. 8004984: 461a mov r2, r3
  9964. 8004986: 6879 ldr r1, [r7, #4]
  9965. 8004988: 4804 ldr r0, [pc, #16] @ (800499c <UartTaskCreate+0x3c>)
  9966. 800498a: f00e fe23 bl 80135d4 <osThreadNew>
  9967. 800498e: 4602 mov r2, r0
  9968. 8004990: 687b ldr r3, [r7, #4]
  9969. 8004992: 619a str r2, [r3, #24]
  9970. }
  9971. 8004994: bf00 nop
  9972. 8004996: 3730 adds r7, #48 @ 0x30
  9973. 8004998: 46bd mov sp, r7
  9974. 800499a: bd80 pop {r7, pc}
  9975. 800499c: 08004ab5 .word 0x08004ab5
  9976. 080049a0 <HAL_UART_RxCpltCallback>:
  9977. void HAL_UART_RxCpltCallback (UART_HandleTypeDef* huart) {
  9978. 80049a0: b480 push {r7}
  9979. 80049a2: b083 sub sp, #12
  9980. 80049a4: af00 add r7, sp, #0
  9981. 80049a6: 6078 str r0, [r7, #4]
  9982. }
  9983. 80049a8: bf00 nop
  9984. 80049aa: 370c adds r7, #12
  9985. 80049ac: 46bd mov sp, r7
  9986. 80049ae: f85d 7b04 ldr.w r7, [sp], #4
  9987. 80049b2: 4770 bx lr
  9988. 080049b4 <HAL_UARTEx_RxEventCallback>:
  9989. void HAL_UARTEx_RxEventCallback (UART_HandleTypeDef* huart, uint16_t Size) {
  9990. 80049b4: b580 push {r7, lr}
  9991. 80049b6: b082 sub sp, #8
  9992. 80049b8: af00 add r7, sp, #0
  9993. 80049ba: 6078 str r0, [r7, #4]
  9994. 80049bc: 460b mov r3, r1
  9995. 80049be: 807b strh r3, [r7, #2]
  9996. if (huart->Instance == USART1) {
  9997. 80049c0: 687b ldr r3, [r7, #4]
  9998. 80049c2: 681b ldr r3, [r3, #0]
  9999. 80049c4: 4a0c ldr r2, [pc, #48] @ (80049f8 <HAL_UARTEx_RxEventCallback+0x44>)
  10000. 80049c6: 4293 cmp r3, r2
  10001. 80049c8: d106 bne.n 80049d8 <HAL_UARTEx_RxEventCallback+0x24>
  10002. HandleUartRxCallback (&uart1TaskData, huart, Size);
  10003. 80049ca: 887b ldrh r3, [r7, #2]
  10004. 80049cc: 461a mov r2, r3
  10005. 80049ce: 6879 ldr r1, [r7, #4]
  10006. 80049d0: 480a ldr r0, [pc, #40] @ (80049fc <HAL_UARTEx_RxEventCallback+0x48>)
  10007. 80049d2: f000 f823 bl 8004a1c <HandleUartRxCallback>
  10008. } else if (huart->Instance == UART8) {
  10009. HandleUartRxCallback (&uart8TaskData, huart, Size);
  10010. }
  10011. }
  10012. 80049d6: e00a b.n 80049ee <HAL_UARTEx_RxEventCallback+0x3a>
  10013. } else if (huart->Instance == UART8) {
  10014. 80049d8: 687b ldr r3, [r7, #4]
  10015. 80049da: 681b ldr r3, [r3, #0]
  10016. 80049dc: 4a08 ldr r2, [pc, #32] @ (8004a00 <HAL_UARTEx_RxEventCallback+0x4c>)
  10017. 80049de: 4293 cmp r3, r2
  10018. 80049e0: d105 bne.n 80049ee <HAL_UARTEx_RxEventCallback+0x3a>
  10019. HandleUartRxCallback (&uart8TaskData, huart, Size);
  10020. 80049e2: 887b ldrh r3, [r7, #2]
  10021. 80049e4: 461a mov r2, r3
  10022. 80049e6: 6879 ldr r1, [r7, #4]
  10023. 80049e8: 4806 ldr r0, [pc, #24] @ (8004a04 <HAL_UARTEx_RxEventCallback+0x50>)
  10024. 80049ea: f000 f817 bl 8004a1c <HandleUartRxCallback>
  10025. }
  10026. 80049ee: bf00 nop
  10027. 80049f0: 3708 adds r7, #8
  10028. 80049f2: 46bd mov sp, r7
  10029. 80049f4: bd80 pop {r7, pc}
  10030. 80049f6: bf00 nop
  10031. 80049f8: 40011000 .word 0x40011000
  10032. 80049fc: 24000f88 .word 0x24000f88
  10033. 8004a00: 40007c00 .word 0x40007c00
  10034. 8004a04: 24000fc0 .word 0x24000fc0
  10035. 08004a08 <HAL_UART_TxCpltCallback>:
  10036. void HAL_UART_TxCpltCallback (UART_HandleTypeDef* huart) {
  10037. 8004a08: b480 push {r7}
  10038. 8004a0a: b083 sub sp, #12
  10039. 8004a0c: af00 add r7, sp, #0
  10040. 8004a0e: 6078 str r0, [r7, #4]
  10041. if (huart->Instance == UART8) {
  10042. }
  10043. }
  10044. 8004a10: bf00 nop
  10045. 8004a12: 370c adds r7, #12
  10046. 8004a14: 46bd mov sp, r7
  10047. 8004a16: f85d 7b04 ldr.w r7, [sp], #4
  10048. 8004a1a: 4770 bx lr
  10049. 08004a1c <HandleUartRxCallback>:
  10050. void HandleUartRxCallback (UartTaskData* uartTaskData, UART_HandleTypeDef* huart, uint16_t Size) {
  10051. 8004a1c: b580 push {r7, lr}
  10052. 8004a1e: b088 sub sp, #32
  10053. 8004a20: af02 add r7, sp, #8
  10054. 8004a22: 60f8 str r0, [r7, #12]
  10055. 8004a24: 60b9 str r1, [r7, #8]
  10056. 8004a26: 4613 mov r3, r2
  10057. 8004a28: 80fb strh r3, [r7, #6]
  10058. BaseType_t pxHigherPriorityTaskWoken = pdFALSE;
  10059. 8004a2a: 2300 movs r3, #0
  10060. 8004a2c: 617b str r3, [r7, #20]
  10061. osMutexAcquire (uartTaskData->rxDataBufferMutex, osWaitForever);
  10062. 8004a2e: 68fb ldr r3, [r7, #12]
  10063. 8004a30: 6a1b ldr r3, [r3, #32]
  10064. 8004a32: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  10065. 8004a36: 4618 mov r0, r3
  10066. 8004a38: f00e fff7 bl 8013a2a <osMutexAcquire>
  10067. memcpy (&(uartTaskData->frameData[uartTaskData->frameBytesCount]), uartTaskData->uartRxBuffer, Size);
  10068. 8004a3c: 68fb ldr r3, [r7, #12]
  10069. 8004a3e: 691b ldr r3, [r3, #16]
  10070. 8004a40: 68fa ldr r2, [r7, #12]
  10071. 8004a42: 8ad2 ldrh r2, [r2, #22]
  10072. 8004a44: 1898 adds r0, r3, r2
  10073. 8004a46: 68fb ldr r3, [r7, #12]
  10074. 8004a48: 681b ldr r3, [r3, #0]
  10075. 8004a4a: 88fa ldrh r2, [r7, #6]
  10076. 8004a4c: 4619 mov r1, r3
  10077. 8004a4e: f013 f9ee bl 8017e2e <memcpy>
  10078. uartTaskData->frameBytesCount += Size;
  10079. 8004a52: 68fb ldr r3, [r7, #12]
  10080. 8004a54: 8ada ldrh r2, [r3, #22]
  10081. 8004a56: 88fb ldrh r3, [r7, #6]
  10082. 8004a58: 4413 add r3, r2
  10083. 8004a5a: b29a uxth r2, r3
  10084. 8004a5c: 68fb ldr r3, [r7, #12]
  10085. 8004a5e: 82da strh r2, [r3, #22]
  10086. osMutexRelease (uartTaskData->rxDataBufferMutex);
  10087. 8004a60: 68fb ldr r3, [r7, #12]
  10088. 8004a62: 6a1b ldr r3, [r3, #32]
  10089. 8004a64: 4618 mov r0, r3
  10090. 8004a66: f00f f82b bl 8013ac0 <osMutexRelease>
  10091. xTaskNotifyFromISR (uartTaskData->uartRecieveTaskHandle, Size, eSetValueWithOverwrite, &pxHigherPriorityTaskWoken);
  10092. 8004a6a: 68fb ldr r3, [r7, #12]
  10093. 8004a6c: 6998 ldr r0, [r3, #24]
  10094. 8004a6e: 88f9 ldrh r1, [r7, #6]
  10095. 8004a70: f107 0314 add.w r3, r7, #20
  10096. 8004a74: 9300 str r3, [sp, #0]
  10097. 8004a76: 2300 movs r3, #0
  10098. 8004a78: 2203 movs r2, #3
  10099. 8004a7a: f011 fd1b bl 80164b4 <xTaskGenericNotifyFromISR>
  10100. HAL_UARTEx_ReceiveToIdle_IT (uartTaskData->huart, uartTaskData->uartRxBuffer, uartTaskData->uartRxBufferLen);
  10101. 8004a7e: 68fb ldr r3, [r7, #12]
  10102. 8004a80: 6b18 ldr r0, [r3, #48] @ 0x30
  10103. 8004a82: 68fb ldr r3, [r7, #12]
  10104. 8004a84: 6819 ldr r1, [r3, #0]
  10105. 8004a86: 68fb ldr r3, [r7, #12]
  10106. 8004a88: 889b ldrh r3, [r3, #4]
  10107. 8004a8a: 461a mov r2, r3
  10108. 8004a8c: f00e fc75 bl 801337a <HAL_UARTEx_ReceiveToIdle_IT>
  10109. portEND_SWITCHING_ISR (pxHigherPriorityTaskWoken);
  10110. 8004a90: 697b ldr r3, [r7, #20]
  10111. 8004a92: 2b00 cmp r3, #0
  10112. 8004a94: d007 beq.n 8004aa6 <HandleUartRxCallback+0x8a>
  10113. 8004a96: 4b06 ldr r3, [pc, #24] @ (8004ab0 <HandleUartRxCallback+0x94>)
  10114. 8004a98: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  10115. 8004a9c: 601a str r2, [r3, #0]
  10116. 8004a9e: f3bf 8f4f dsb sy
  10117. 8004aa2: f3bf 8f6f isb sy
  10118. }
  10119. 8004aa6: bf00 nop
  10120. 8004aa8: 3718 adds r7, #24
  10121. 8004aaa: 46bd mov sp, r7
  10122. 8004aac: bd80 pop {r7, pc}
  10123. 8004aae: bf00 nop
  10124. 8004ab0: e000ed04 .word 0xe000ed04
  10125. 08004ab4 <UartRxTask>:
  10126. void UartRxTask (void* argument) {
  10127. 8004ab4: b580 push {r7, lr}
  10128. 8004ab6: b0d2 sub sp, #328 @ 0x148
  10129. 8004ab8: af02 add r7, sp, #8
  10130. 8004aba: f507 73a0 add.w r3, r7, #320 @ 0x140
  10131. 8004abe: f5a3 739e sub.w r3, r3, #316 @ 0x13c
  10132. 8004ac2: 6018 str r0, [r3, #0]
  10133. UartTaskData* uartTaskData = (UartTaskData*)argument;
  10134. 8004ac4: f507 73a0 add.w r3, r7, #320 @ 0x140
  10135. 8004ac8: f5a3 739e sub.w r3, r3, #316 @ 0x13c
  10136. 8004acc: 681b ldr r3, [r3, #0]
  10137. 8004ace: f8c7 312c str.w r3, [r7, #300] @ 0x12c
  10138. SerialProtocolFrameData spFrameData = { 0 };
  10139. 8004ad2: f507 73a0 add.w r3, r7, #320 @ 0x140
  10140. 8004ad6: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  10141. 8004ada: 4618 mov r0, r3
  10142. 8004adc: f44f 7386 mov.w r3, #268 @ 0x10c
  10143. 8004ae0: 461a mov r2, r3
  10144. 8004ae2: 2100 movs r1, #0
  10145. 8004ae4: f013 f8d2 bl 8017c8c <memset>
  10146. uint32_t bytesRec = 0;
  10147. 8004ae8: f507 73a0 add.w r3, r7, #320 @ 0x140
  10148. 8004aec: f5a3 739a sub.w r3, r3, #308 @ 0x134
  10149. 8004af0: 2200 movs r2, #0
  10150. 8004af2: 601a str r2, [r3, #0]
  10151. uint32_t crc = 0;
  10152. 8004af4: 2300 movs r3, #0
  10153. 8004af6: f8c7 3128 str.w r3, [r7, #296] @ 0x128
  10154. uint16_t frameCommandRaw = 0x0000;
  10155. 8004afa: 2300 movs r3, #0
  10156. 8004afc: f8a7 3126 strh.w r3, [r7, #294] @ 0x126
  10157. uint16_t frameBytesCount = 0;
  10158. 8004b00: 2300 movs r3, #0
  10159. 8004b02: f8a7 3124 strh.w r3, [r7, #292] @ 0x124
  10160. uint16_t frameCrc = 0;
  10161. 8004b06: 2300 movs r3, #0
  10162. 8004b08: f8a7 3122 strh.w r3, [r7, #290] @ 0x122
  10163. uint16_t frameTotalLength = 0;
  10164. 8004b0c: 2300 movs r3, #0
  10165. 8004b0e: f8a7 313e strh.w r3, [r7, #318] @ 0x13e
  10166. uint16_t dataToSend = 0;
  10167. 8004b12: 2300 movs r3, #0
  10168. 8004b14: f8a7 313c strh.w r3, [r7, #316] @ 0x13c
  10169. portBASE_TYPE crcPass = pdFAIL;
  10170. 8004b18: 2300 movs r3, #0
  10171. 8004b1a: f8c7 3138 str.w r3, [r7, #312] @ 0x138
  10172. portBASE_TYPE proceed = pdFALSE;
  10173. 8004b1e: 2300 movs r3, #0
  10174. 8004b20: f8c7 3134 str.w r3, [r7, #308] @ 0x134
  10175. portBASE_TYPE frameTimeout = pdFAIL;
  10176. 8004b24: 2300 movs r3, #0
  10177. 8004b26: f8c7 311c str.w r3, [r7, #284] @ 0x11c
  10178. enum SerialReceiverStates receverState = srWaitForHeader;
  10179. 8004b2a: 2300 movs r3, #0
  10180. 8004b2c: f887 3133 strb.w r3, [r7, #307] @ 0x133
  10181. uartTaskData->rxDataBufferMutex = osMutexNew (NULL);
  10182. 8004b30: 2000 movs r0, #0
  10183. 8004b32: f00e fef4 bl 801391e <osMutexNew>
  10184. 8004b36: 4602 mov r2, r0
  10185. 8004b38: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10186. 8004b3c: 621a str r2, [r3, #32]
  10187. HAL_UARTEx_ReceiveToIdle_IT (uartTaskData->huart, uartTaskData->uartRxBuffer, uartTaskData->uartRxBufferLen);
  10188. 8004b3e: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10189. 8004b42: 6b18 ldr r0, [r3, #48] @ 0x30
  10190. 8004b44: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10191. 8004b48: 6819 ldr r1, [r3, #0]
  10192. 8004b4a: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10193. 8004b4e: 889b ldrh r3, [r3, #4]
  10194. 8004b50: 461a mov r2, r3
  10195. 8004b52: f00e fc12 bl 801337a <HAL_UARTEx_ReceiveToIdle_IT>
  10196. while (pdTRUE) {
  10197. frameTimeout = !(xTaskNotifyWait (0, 0, &bytesRec, pdMS_TO_TICKS (FRAME_TIMEOUT_MS)));
  10198. 8004b56: f107 020c add.w r2, r7, #12
  10199. 8004b5a: f44f 63fa mov.w r3, #2000 @ 0x7d0
  10200. 8004b5e: 2100 movs r1, #0
  10201. 8004b60: 2000 movs r0, #0
  10202. 8004b62: f011 fb85 bl 8016270 <xTaskNotifyWait>
  10203. 8004b66: 4603 mov r3, r0
  10204. 8004b68: 2b00 cmp r3, #0
  10205. 8004b6a: bf0c ite eq
  10206. 8004b6c: 2301 moveq r3, #1
  10207. 8004b6e: 2300 movne r3, #0
  10208. 8004b70: b2db uxtb r3, r3
  10209. 8004b72: f8c7 311c str.w r3, [r7, #284] @ 0x11c
  10210. osMutexAcquire (uartTaskData->rxDataBufferMutex, osWaitForever);
  10211. 8004b76: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10212. 8004b7a: 6a1b ldr r3, [r3, #32]
  10213. 8004b7c: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  10214. 8004b80: 4618 mov r0, r3
  10215. 8004b82: f00e ff52 bl 8013a2a <osMutexAcquire>
  10216. frameBytesCount = uartTaskData->frameBytesCount;
  10217. 8004b86: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10218. 8004b8a: 8adb ldrh r3, [r3, #22]
  10219. 8004b8c: f8a7 3124 strh.w r3, [r7, #292] @ 0x124
  10220. osMutexRelease (uartTaskData->rxDataBufferMutex);
  10221. 8004b90: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10222. 8004b94: 6a1b ldr r3, [r3, #32]
  10223. 8004b96: 4618 mov r0, r3
  10224. 8004b98: f00e ff92 bl 8013ac0 <osMutexRelease>
  10225. if ((frameTimeout == pdTRUE) && (frameBytesCount > 0)) {
  10226. 8004b9c: f8d7 311c ldr.w r3, [r7, #284] @ 0x11c
  10227. 8004ba0: 2b01 cmp r3, #1
  10228. 8004ba2: d10a bne.n 8004bba <UartRxTask+0x106>
  10229. 8004ba4: f8b7 3124 ldrh.w r3, [r7, #292] @ 0x124
  10230. 8004ba8: 2b00 cmp r3, #0
  10231. 8004baa: d006 beq.n 8004bba <UartRxTask+0x106>
  10232. receverState = srFail;
  10233. 8004bac: 2304 movs r3, #4
  10234. 8004bae: f887 3133 strb.w r3, [r7, #307] @ 0x133
  10235. proceed = pdTRUE;
  10236. 8004bb2: 2301 movs r3, #1
  10237. 8004bb4: f8c7 3134 str.w r3, [r7, #308] @ 0x134
  10238. 8004bb8: e01b b.n 8004bf2 <UartRxTask+0x13e>
  10239. } else {
  10240. if (frameTimeout == pdFALSE) {
  10241. 8004bba: f8d7 311c ldr.w r3, [r7, #284] @ 0x11c
  10242. 8004bbe: 2b00 cmp r3, #0
  10243. 8004bc0: d103 bne.n 8004bca <UartRxTask+0x116>
  10244. proceed = pdTRUE;
  10245. 8004bc2: 2301 movs r3, #1
  10246. 8004bc4: f8c7 3134 str.w r3, [r7, #308] @ 0x134
  10247. 8004bc8: e206 b.n 8004fd8 <UartRxTask+0x524>
  10248. #ifdef SERIAL_PROTOCOL_DBG
  10249. printf ("Uart%d: RX bytes received: %ld\n", uartTaskData->uartNumber, bytesRec);
  10250. #endif
  10251. } else {
  10252. if (uartTaskData->huart->RxState == HAL_UART_STATE_READY) {
  10253. 8004bca: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10254. 8004bce: 6b1b ldr r3, [r3, #48] @ 0x30
  10255. 8004bd0: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c
  10256. 8004bd4: 2b20 cmp r3, #32
  10257. 8004bd6: f040 81ff bne.w 8004fd8 <UartRxTask+0x524>
  10258. HAL_UARTEx_ReceiveToIdle_IT (uartTaskData->huart, uartTaskData->uartRxBuffer, uartTaskData->uartRxBufferLen);
  10259. 8004bda: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10260. 8004bde: 6b18 ldr r0, [r3, #48] @ 0x30
  10261. 8004be0: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10262. 8004be4: 6819 ldr r1, [r3, #0]
  10263. 8004be6: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10264. 8004bea: 889b ldrh r3, [r3, #4]
  10265. 8004bec: 461a mov r2, r3
  10266. 8004bee: f00e fbc4 bl 801337a <HAL_UARTEx_ReceiveToIdle_IT>
  10267. }
  10268. }
  10269. }
  10270. while (proceed) {
  10271. 8004bf2: e1f1 b.n 8004fd8 <UartRxTask+0x524>
  10272. switch (receverState) {
  10273. 8004bf4: f897 3133 ldrb.w r3, [r7, #307] @ 0x133
  10274. 8004bf8: 2b04 cmp r3, #4
  10275. 8004bfa: f200 81c8 bhi.w 8004f8e <UartRxTask+0x4da>
  10276. 8004bfe: a201 add r2, pc, #4 @ (adr r2, 8004c04 <UartRxTask+0x150>)
  10277. 8004c00: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  10278. 8004c04: 08004c19 .word 0x08004c19
  10279. 8004c08: 08004d7b .word 0x08004d7b
  10280. 8004c0c: 08004d5f .word 0x08004d5f
  10281. 8004c10: 08004e0b .word 0x08004e0b
  10282. 8004c14: 08004eb7 .word 0x08004eb7
  10283. case srWaitForHeader:
  10284. osMutexAcquire (uartTaskData->rxDataBufferMutex, osWaitForever);
  10285. 8004c18: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10286. 8004c1c: 6a1b ldr r3, [r3, #32]
  10287. 8004c1e: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  10288. 8004c22: 4618 mov r0, r3
  10289. 8004c24: f00e ff01 bl 8013a2a <osMutexAcquire>
  10290. if (uartTaskData->frameData[0] == FRAME_INDICATOR) {
  10291. 8004c28: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10292. 8004c2c: 691b ldr r3, [r3, #16]
  10293. 8004c2e: 781b ldrb r3, [r3, #0]
  10294. 8004c30: 2baa cmp r3, #170 @ 0xaa
  10295. 8004c32: f040 8082 bne.w 8004d3a <UartRxTask+0x286>
  10296. if (frameBytesCount > FRAME_ID_LENGTH) {
  10297. 8004c36: f8b7 3124 ldrh.w r3, [r7, #292] @ 0x124
  10298. 8004c3a: 2b02 cmp r3, #2
  10299. 8004c3c: d914 bls.n 8004c68 <UartRxTask+0x1b4>
  10300. spFrameData.frameHeader.frameId =
  10301. CONVERT_BYTES_TO_SHORT_WORD (&(uartTaskData->frameData[FRAME_HEADER_LENGTH - FRAME_RESP_STAT_LENGTH - FRAME_DATALEN_LENGTH - FRAME_ID_LENGTH - FRAME_COMMAND_LENGTH]));
  10302. 8004c3e: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10303. 8004c42: 691b ldr r3, [r3, #16]
  10304. 8004c44: 3302 adds r3, #2
  10305. 8004c46: 781b ldrb r3, [r3, #0]
  10306. 8004c48: 021b lsls r3, r3, #8
  10307. 8004c4a: b21a sxth r2, r3
  10308. 8004c4c: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10309. 8004c50: 691b ldr r3, [r3, #16]
  10310. 8004c52: 3301 adds r3, #1
  10311. 8004c54: 781b ldrb r3, [r3, #0]
  10312. 8004c56: b21b sxth r3, r3
  10313. 8004c58: 4313 orrs r3, r2
  10314. 8004c5a: b21b sxth r3, r3
  10315. 8004c5c: b29a uxth r2, r3
  10316. spFrameData.frameHeader.frameId =
  10317. 8004c5e: f507 73a0 add.w r3, r7, #320 @ 0x140
  10318. 8004c62: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  10319. 8004c66: 801a strh r2, [r3, #0]
  10320. }
  10321. if (frameBytesCount > FRAME_ID_LENGTH + FRAME_COMMAND_LENGTH) {
  10322. 8004c68: f8b7 3124 ldrh.w r3, [r7, #292] @ 0x124
  10323. 8004c6c: 2b04 cmp r3, #4
  10324. 8004c6e: d923 bls.n 8004cb8 <UartRxTask+0x204>
  10325. frameCommandRaw = CONVERT_BYTES_TO_SHORT_WORD (&(uartTaskData->frameData[FRAME_HEADER_LENGTH - FRAME_RESP_STAT_LENGTH - FRAME_DATALEN_LENGTH - FRAME_COMMAND_LENGTH]));
  10326. 8004c70: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10327. 8004c74: 691b ldr r3, [r3, #16]
  10328. 8004c76: 3304 adds r3, #4
  10329. 8004c78: 781b ldrb r3, [r3, #0]
  10330. 8004c7a: 021b lsls r3, r3, #8
  10331. 8004c7c: b21a sxth r2, r3
  10332. 8004c7e: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10333. 8004c82: 691b ldr r3, [r3, #16]
  10334. 8004c84: 3303 adds r3, #3
  10335. 8004c86: 781b ldrb r3, [r3, #0]
  10336. 8004c88: b21b sxth r3, r3
  10337. 8004c8a: 4313 orrs r3, r2
  10338. 8004c8c: b21b sxth r3, r3
  10339. 8004c8e: f8a7 3126 strh.w r3, [r7, #294] @ 0x126
  10340. spFrameData.frameHeader.frameCommand = (SerialProtocolCommands)(frameCommandRaw & 0x7FFF);
  10341. 8004c92: f8b7 3126 ldrh.w r3, [r7, #294] @ 0x126
  10342. 8004c96: b2da uxtb r2, r3
  10343. 8004c98: f507 73a0 add.w r3, r7, #320 @ 0x140
  10344. 8004c9c: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  10345. 8004ca0: 709a strb r2, [r3, #2]
  10346. spFrameData.frameHeader.isResponseFrame = (frameCommandRaw & 0x8000) != 0 ? pdTRUE : pdFALSE;
  10347. 8004ca2: f9b7 3126 ldrsh.w r3, [r7, #294] @ 0x126
  10348. 8004ca6: 13db asrs r3, r3, #15
  10349. 8004ca8: b21b sxth r3, r3
  10350. 8004caa: f003 0201 and.w r2, r3, #1
  10351. 8004cae: f507 73a0 add.w r3, r7, #320 @ 0x140
  10352. 8004cb2: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  10353. 8004cb6: 609a str r2, [r3, #8]
  10354. }
  10355. if ((frameBytesCount > FRAME_ID_LENGTH + FRAME_COMMAND_LENGTH + FRAME_RESP_STAT_LENGTH) && ((spFrameData.frameHeader.frameCommand & 0x8000) != 0)) {
  10356. 8004cb8: f8b7 3124 ldrh.w r3, [r7, #292] @ 0x124
  10357. 8004cbc: 2b05 cmp r3, #5
  10358. 8004cbe: d913 bls.n 8004ce8 <UartRxTask+0x234>
  10359. 8004cc0: f507 73a0 add.w r3, r7, #320 @ 0x140
  10360. 8004cc4: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  10361. 8004cc8: 789b ldrb r3, [r3, #2]
  10362. 8004cca: f403 4300 and.w r3, r3, #32768 @ 0x8000
  10363. 8004cce: 2b00 cmp r3, #0
  10364. 8004cd0: d00a beq.n 8004ce8 <UartRxTask+0x234>
  10365. spFrameData.frameHeader.respStatus = (SerialProtocolRespStatus)(uartTaskData->frameData[FRAME_ID_LENGTH + FRAME_COMMAND_LENGTH + FRAME_RESP_STAT_LENGTH]);
  10366. 8004cd2: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10367. 8004cd6: 691b ldr r3, [r3, #16]
  10368. 8004cd8: 3305 adds r3, #5
  10369. 8004cda: 781b ldrb r3, [r3, #0]
  10370. 8004cdc: b25a sxtb r2, r3
  10371. 8004cde: f507 73a0 add.w r3, r7, #320 @ 0x140
  10372. 8004ce2: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  10373. 8004ce6: 70da strb r2, [r3, #3]
  10374. }
  10375. if (frameBytesCount >= FRAME_HEADER_LENGTH) {
  10376. 8004ce8: f8b7 3124 ldrh.w r3, [r7, #292] @ 0x124
  10377. 8004cec: 2b07 cmp r3, #7
  10378. 8004cee: d920 bls.n 8004d32 <UartRxTask+0x27e>
  10379. spFrameData.frameHeader.frameDataLength = CONVERT_BYTES_TO_SHORT_WORD (&(uartTaskData->frameData[FRAME_HEADER_LENGTH - FRAME_RESP_STAT_LENGTH - FRAME_DATALEN_LENGTH]));
  10380. 8004cf0: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10381. 8004cf4: 691b ldr r3, [r3, #16]
  10382. 8004cf6: 3306 adds r3, #6
  10383. 8004cf8: 781b ldrb r3, [r3, #0]
  10384. 8004cfa: 021b lsls r3, r3, #8
  10385. 8004cfc: b21a sxth r2, r3
  10386. 8004cfe: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10387. 8004d02: 691b ldr r3, [r3, #16]
  10388. 8004d04: 3305 adds r3, #5
  10389. 8004d06: 781b ldrb r3, [r3, #0]
  10390. 8004d08: b21b sxth r3, r3
  10391. 8004d0a: 4313 orrs r3, r2
  10392. 8004d0c: b21b sxth r3, r3
  10393. 8004d0e: b29a uxth r2, r3
  10394. 8004d10: f507 73a0 add.w r3, r7, #320 @ 0x140
  10395. 8004d14: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  10396. 8004d18: 809a strh r2, [r3, #4]
  10397. frameTotalLength = FRAME_HEADER_LENGTH + spFrameData.frameHeader.frameDataLength + FRAME_CRC_LENGTH;
  10398. 8004d1a: f507 73a0 add.w r3, r7, #320 @ 0x140
  10399. 8004d1e: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  10400. 8004d22: 889b ldrh r3, [r3, #4]
  10401. 8004d24: 330a adds r3, #10
  10402. 8004d26: f8a7 313e strh.w r3, [r7, #318] @ 0x13e
  10403. receverState = srRecieveData;
  10404. 8004d2a: 2302 movs r3, #2
  10405. 8004d2c: f887 3133 strb.w r3, [r7, #307] @ 0x133
  10406. 8004d30: e00e b.n 8004d50 <UartRxTask+0x29c>
  10407. } else {
  10408. proceed = pdFALSE;
  10409. 8004d32: 2300 movs r3, #0
  10410. 8004d34: f8c7 3134 str.w r3, [r7, #308] @ 0x134
  10411. 8004d38: e00a b.n 8004d50 <UartRxTask+0x29c>
  10412. }
  10413. } else {
  10414. if (frameBytesCount > 0) {
  10415. 8004d3a: f8b7 3124 ldrh.w r3, [r7, #292] @ 0x124
  10416. 8004d3e: 2b00 cmp r3, #0
  10417. 8004d40: d003 beq.n 8004d4a <UartRxTask+0x296>
  10418. receverState = srFail;
  10419. 8004d42: 2304 movs r3, #4
  10420. 8004d44: f887 3133 strb.w r3, [r7, #307] @ 0x133
  10421. 8004d48: e002 b.n 8004d50 <UartRxTask+0x29c>
  10422. } else {
  10423. proceed = pdFALSE;
  10424. 8004d4a: 2300 movs r3, #0
  10425. 8004d4c: f8c7 3134 str.w r3, [r7, #308] @ 0x134
  10426. }
  10427. }
  10428. osMutexRelease (uartTaskData->rxDataBufferMutex);
  10429. 8004d50: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10430. 8004d54: 6a1b ldr r3, [r3, #32]
  10431. 8004d56: 4618 mov r0, r3
  10432. 8004d58: f00e feb2 bl 8013ac0 <osMutexRelease>
  10433. break;
  10434. 8004d5c: e13c b.n 8004fd8 <UartRxTask+0x524>
  10435. case srRecieveData:
  10436. if (frameBytesCount >= frameTotalLength) {
  10437. 8004d5e: f8b7 2124 ldrh.w r2, [r7, #292] @ 0x124
  10438. 8004d62: f8b7 313e ldrh.w r3, [r7, #318] @ 0x13e
  10439. 8004d66: 429a cmp r2, r3
  10440. 8004d68: d303 bcc.n 8004d72 <UartRxTask+0x2be>
  10441. receverState = srCheckCrc;
  10442. 8004d6a: 2301 movs r3, #1
  10443. 8004d6c: f887 3133 strb.w r3, [r7, #307] @ 0x133
  10444. } else {
  10445. proceed = pdFALSE;
  10446. }
  10447. break;
  10448. 8004d70: e132 b.n 8004fd8 <UartRxTask+0x524>
  10449. proceed = pdFALSE;
  10450. 8004d72: 2300 movs r3, #0
  10451. 8004d74: f8c7 3134 str.w r3, [r7, #308] @ 0x134
  10452. break;
  10453. 8004d78: e12e b.n 8004fd8 <UartRxTask+0x524>
  10454. case srCheckCrc:
  10455. osMutexAcquire (uartTaskData->rxDataBufferMutex, osWaitForever);
  10456. 8004d7a: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10457. 8004d7e: 6a1b ldr r3, [r3, #32]
  10458. 8004d80: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  10459. 8004d84: 4618 mov r0, r3
  10460. 8004d86: f00e fe50 bl 8013a2a <osMutexAcquire>
  10461. frameCrc = CONVERT_BYTES_TO_SHORT_WORD (&(uartTaskData->frameData[frameTotalLength - FRAME_CRC_LENGTH]));
  10462. 8004d8a: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10463. 8004d8e: 691a ldr r2, [r3, #16]
  10464. 8004d90: f8b7 313e ldrh.w r3, [r7, #318] @ 0x13e
  10465. 8004d94: 3b01 subs r3, #1
  10466. 8004d96: 4413 add r3, r2
  10467. 8004d98: 781b ldrb r3, [r3, #0]
  10468. 8004d9a: 021b lsls r3, r3, #8
  10469. 8004d9c: b21a sxth r2, r3
  10470. 8004d9e: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10471. 8004da2: 6919 ldr r1, [r3, #16]
  10472. 8004da4: f8b7 313e ldrh.w r3, [r7, #318] @ 0x13e
  10473. 8004da8: 3b02 subs r3, #2
  10474. 8004daa: 440b add r3, r1
  10475. 8004dac: 781b ldrb r3, [r3, #0]
  10476. 8004dae: b21b sxth r3, r3
  10477. 8004db0: 4313 orrs r3, r2
  10478. 8004db2: b21b sxth r3, r3
  10479. 8004db4: f8a7 3122 strh.w r3, [r7, #290] @ 0x122
  10480. crc = HAL_CRC_Calculate (&hcrc, (uint32_t*)(uartTaskData->frameData), frameTotalLength - FRAME_CRC_LENGTH);
  10481. 8004db8: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10482. 8004dbc: 6919 ldr r1, [r3, #16]
  10483. 8004dbe: f8b7 313e ldrh.w r3, [r7, #318] @ 0x13e
  10484. 8004dc2: 3b02 subs r3, #2
  10485. 8004dc4: 461a mov r2, r3
  10486. 8004dc6: 4887 ldr r0, [pc, #540] @ (8004fe4 <UartRxTask+0x530>)
  10487. 8004dc8: f002 fe9c bl 8007b04 <HAL_CRC_Calculate>
  10488. 8004dcc: f8c7 0128 str.w r0, [r7, #296] @ 0x128
  10489. osMutexRelease (uartTaskData->rxDataBufferMutex);
  10490. 8004dd0: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10491. 8004dd4: 6a1b ldr r3, [r3, #32]
  10492. 8004dd6: 4618 mov r0, r3
  10493. 8004dd8: f00e fe72 bl 8013ac0 <osMutexRelease>
  10494. crcPass = frameCrc == crc;
  10495. 8004ddc: f8b7 3122 ldrh.w r3, [r7, #290] @ 0x122
  10496. 8004de0: f8d7 2128 ldr.w r2, [r7, #296] @ 0x128
  10497. 8004de4: 429a cmp r2, r3
  10498. 8004de6: bf0c ite eq
  10499. 8004de8: 2301 moveq r3, #1
  10500. 8004dea: 2300 movne r3, #0
  10501. 8004dec: b2db uxtb r3, r3
  10502. 8004dee: f8c7 3138 str.w r3, [r7, #312] @ 0x138
  10503. if (crcPass) {
  10504. 8004df2: f8d7 3138 ldr.w r3, [r7, #312] @ 0x138
  10505. 8004df6: 2b00 cmp r3, #0
  10506. 8004df8: d003 beq.n 8004e02 <UartRxTask+0x34e>
  10507. #ifdef SERIAL_PROTOCOL_DBG
  10508. printf ("Uart%d: Frame CRC PASS\n", uartTaskData->uartNumber);
  10509. #endif
  10510. receverState = srExecuteCmd;
  10511. 8004dfa: 2303 movs r3, #3
  10512. 8004dfc: f887 3133 strb.w r3, [r7, #307] @ 0x133
  10513. } else {
  10514. receverState = srFail;
  10515. }
  10516. break;
  10517. 8004e00: e0ea b.n 8004fd8 <UartRxTask+0x524>
  10518. receverState = srFail;
  10519. 8004e02: 2304 movs r3, #4
  10520. 8004e04: f887 3133 strb.w r3, [r7, #307] @ 0x133
  10521. break;
  10522. 8004e08: e0e6 b.n 8004fd8 <UartRxTask+0x524>
  10523. case srExecuteCmd:
  10524. if ((uartTaskData->processDataCb != NULL) || (uartTaskData->processRxDataMsgBuffer != NULL)) {
  10525. 8004e0a: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10526. 8004e0e: 6a9b ldr r3, [r3, #40] @ 0x28
  10527. 8004e10: 2b00 cmp r3, #0
  10528. 8004e12: d104 bne.n 8004e1e <UartRxTask+0x36a>
  10529. 8004e14: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10530. 8004e18: 6a5b ldr r3, [r3, #36] @ 0x24
  10531. 8004e1a: 2b00 cmp r3, #0
  10532. 8004e1c: d01e beq.n 8004e5c <UartRxTask+0x3a8>
  10533. osMutexAcquire (uartTaskData->rxDataBufferMutex, osWaitForever);
  10534. 8004e1e: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10535. 8004e22: 6a1b ldr r3, [r3, #32]
  10536. 8004e24: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  10537. 8004e28: 4618 mov r0, r3
  10538. 8004e2a: f00e fdfe bl 8013a2a <osMutexAcquire>
  10539. memcpy (spFrameData.dataBuffer, &(uartTaskData->frameData[FRAME_HEADER_LENGTH]), spFrameData.frameHeader.frameDataLength);
  10540. 8004e2e: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10541. 8004e32: 691b ldr r3, [r3, #16]
  10542. 8004e34: f103 0108 add.w r1, r3, #8
  10543. 8004e38: f507 73a0 add.w r3, r7, #320 @ 0x140
  10544. 8004e3c: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  10545. 8004e40: 889b ldrh r3, [r3, #4]
  10546. 8004e42: 461a mov r2, r3
  10547. 8004e44: f107 0310 add.w r3, r7, #16
  10548. 8004e48: 330c adds r3, #12
  10549. 8004e4a: 4618 mov r0, r3
  10550. 8004e4c: f012 ffef bl 8017e2e <memcpy>
  10551. osMutexRelease (uartTaskData->rxDataBufferMutex);
  10552. 8004e50: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10553. 8004e54: 6a1b ldr r3, [r3, #32]
  10554. 8004e56: 4618 mov r0, r3
  10555. 8004e58: f00e fe32 bl 8013ac0 <osMutexRelease>
  10556. }
  10557. if (uartTaskData->processRxDataMsgBuffer != NULL) {
  10558. 8004e5c: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10559. 8004e60: 6a5b ldr r3, [r3, #36] @ 0x24
  10560. 8004e62: 2b00 cmp r3, #0
  10561. 8004e64: d015 beq.n 8004e92 <UartRxTask+0x3de>
  10562. if (xMessageBufferSend (uartTaskData->processRxDataMsgBuffer, &spFrameData, sizeof (SerialProtocolFrameHeader) + spFrameData.frameHeader.frameDataLength, pdMS_TO_TICKS (200)) == pdFALSE) {
  10563. 8004e66: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10564. 8004e6a: 6a58 ldr r0, [r3, #36] @ 0x24
  10565. 8004e6c: f507 73a0 add.w r3, r7, #320 @ 0x140
  10566. 8004e70: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  10567. 8004e74: 889b ldrh r3, [r3, #4]
  10568. 8004e76: f103 020c add.w r2, r3, #12
  10569. 8004e7a: f107 0110 add.w r1, r7, #16
  10570. 8004e7e: 23c8 movs r3, #200 @ 0xc8
  10571. 8004e80: f010 f840 bl 8014f04 <xStreamBufferSend>
  10572. 8004e84: 4603 mov r3, r0
  10573. 8004e86: 2b00 cmp r3, #0
  10574. 8004e88: d103 bne.n 8004e92 <UartRxTask+0x3de>
  10575. receverState = srFail;
  10576. 8004e8a: 2304 movs r3, #4
  10577. 8004e8c: f887 3133 strb.w r3, [r7, #307] @ 0x133
  10578. break;
  10579. 8004e90: e0a2 b.n 8004fd8 <UartRxTask+0x524>
  10580. }
  10581. }
  10582. if (uartTaskData->processDataCb != NULL) {
  10583. 8004e92: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10584. 8004e96: 6a9b ldr r3, [r3, #40] @ 0x28
  10585. 8004e98: 2b00 cmp r3, #0
  10586. 8004e9a: d008 beq.n 8004eae <UartRxTask+0x3fa>
  10587. uartTaskData->processDataCb (uartTaskData, &spFrameData);
  10588. 8004e9c: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10589. 8004ea0: 6a9b ldr r3, [r3, #40] @ 0x28
  10590. 8004ea2: f107 0210 add.w r2, r7, #16
  10591. 8004ea6: 4611 mov r1, r2
  10592. 8004ea8: f8d7 012c ldr.w r0, [r7, #300] @ 0x12c
  10593. 8004eac: 4798 blx r3
  10594. }
  10595. receverState = srFinish;
  10596. 8004eae: 2305 movs r3, #5
  10597. 8004eb0: f887 3133 strb.w r3, [r7, #307] @ 0x133
  10598. break;
  10599. 8004eb4: e090 b.n 8004fd8 <UartRxTask+0x524>
  10600. case srFail:
  10601. dataToSend = 0;
  10602. 8004eb6: 2300 movs r3, #0
  10603. 8004eb8: f8a7 313c strh.w r3, [r7, #316] @ 0x13c
  10604. if ((frameTimeout == pdTRUE) && (frameBytesCount > 2)) {
  10605. 8004ebc: f8d7 311c ldr.w r3, [r7, #284] @ 0x11c
  10606. 8004ec0: 2b01 cmp r3, #1
  10607. 8004ec2: d11c bne.n 8004efe <UartRxTask+0x44a>
  10608. 8004ec4: f8b7 3124 ldrh.w r3, [r7, #292] @ 0x124
  10609. 8004ec8: 2b02 cmp r3, #2
  10610. 8004eca: d918 bls.n 8004efe <UartRxTask+0x44a>
  10611. dataToSend = PrepareRespFrame (uartTaskData->uartTxBuffer, spFrameData.frameHeader.frameId, spFrameData.frameHeader.frameCommand, spTimeout, NULL, 0);
  10612. 8004ecc: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10613. 8004ed0: 6898 ldr r0, [r3, #8]
  10614. 8004ed2: f507 73a0 add.w r3, r7, #320 @ 0x140
  10615. 8004ed6: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  10616. 8004eda: 8819 ldrh r1, [r3, #0]
  10617. 8004edc: f507 73a0 add.w r3, r7, #320 @ 0x140
  10618. 8004ee0: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  10619. 8004ee4: 789a ldrb r2, [r3, #2]
  10620. 8004ee6: 2300 movs r3, #0
  10621. 8004ee8: 9301 str r3, [sp, #4]
  10622. 8004eea: 2300 movs r3, #0
  10623. 8004eec: 9300 str r3, [sp, #0]
  10624. 8004eee: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  10625. 8004ef2: f7fe fd59 bl 80039a8 <PrepareRespFrame>
  10626. 8004ef6: 4603 mov r3, r0
  10627. 8004ef8: f8a7 313c strh.w r3, [r7, #316] @ 0x13c
  10628. 8004efc: e034 b.n 8004f68 <UartRxTask+0x4b4>
  10629. #ifdef SERIAL_PROTOCOL_DBG
  10630. printf ("Uart%d: RX data receiver timeout!\n", uartTaskData->uartNumber);
  10631. #endif
  10632. } else if (!crcPass) {
  10633. 8004efe: f8d7 3138 ldr.w r3, [r7, #312] @ 0x138
  10634. 8004f02: 2b00 cmp r3, #0
  10635. 8004f04: d118 bne.n 8004f38 <UartRxTask+0x484>
  10636. dataToSend = PrepareRespFrame (uartTaskData->uartTxBuffer, spFrameData.frameHeader.frameId, spFrameData.frameHeader.frameCommand, spCrcFail, NULL, 0);
  10637. 8004f06: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10638. 8004f0a: 6898 ldr r0, [r3, #8]
  10639. 8004f0c: f507 73a0 add.w r3, r7, #320 @ 0x140
  10640. 8004f10: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  10641. 8004f14: 8819 ldrh r1, [r3, #0]
  10642. 8004f16: f507 73a0 add.w r3, r7, #320 @ 0x140
  10643. 8004f1a: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  10644. 8004f1e: 789a ldrb r2, [r3, #2]
  10645. 8004f20: 2300 movs r3, #0
  10646. 8004f22: 9301 str r3, [sp, #4]
  10647. 8004f24: 2300 movs r3, #0
  10648. 8004f26: 9300 str r3, [sp, #0]
  10649. 8004f28: f06f 0301 mvn.w r3, #1
  10650. 8004f2c: f7fe fd3c bl 80039a8 <PrepareRespFrame>
  10651. 8004f30: 4603 mov r3, r0
  10652. 8004f32: f8a7 313c strh.w r3, [r7, #316] @ 0x13c
  10653. 8004f36: e017 b.n 8004f68 <UartRxTask+0x4b4>
  10654. #ifdef SERIAL_PROTOCOL_DBG
  10655. printf ("Uart%d: Frame CRC FAIL\n", uartTaskData->uartNumber);
  10656. #endif
  10657. } else {
  10658. dataToSend = PrepareRespFrame (uartTaskData->uartTxBuffer, spFrameData.frameHeader.frameId, spFrameData.frameHeader.frameCommand, spInternalError, NULL, 0);
  10659. 8004f38: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10660. 8004f3c: 6898 ldr r0, [r3, #8]
  10661. 8004f3e: f507 73a0 add.w r3, r7, #320 @ 0x140
  10662. 8004f42: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  10663. 8004f46: 8819 ldrh r1, [r3, #0]
  10664. 8004f48: f507 73a0 add.w r3, r7, #320 @ 0x140
  10665. 8004f4c: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  10666. 8004f50: 789a ldrb r2, [r3, #2]
  10667. 8004f52: 2300 movs r3, #0
  10668. 8004f54: 9301 str r3, [sp, #4]
  10669. 8004f56: 2300 movs r3, #0
  10670. 8004f58: 9300 str r3, [sp, #0]
  10671. 8004f5a: f06f 0303 mvn.w r3, #3
  10672. 8004f5e: f7fe fd23 bl 80039a8 <PrepareRespFrame>
  10673. 8004f62: 4603 mov r3, r0
  10674. 8004f64: f8a7 313c strh.w r3, [r7, #316] @ 0x13c
  10675. }
  10676. if (dataToSend > 0) {
  10677. 8004f68: f8b7 313c ldrh.w r3, [r7, #316] @ 0x13c
  10678. 8004f6c: 2b00 cmp r3, #0
  10679. 8004f6e: d00a beq.n 8004f86 <UartRxTask+0x4d2>
  10680. HAL_UART_Transmit_IT (uartTaskData->huart, uartTaskData->uartTxBuffer, dataToSend);
  10681. 8004f70: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10682. 8004f74: 6b18 ldr r0, [r3, #48] @ 0x30
  10683. 8004f76: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10684. 8004f7a: 689b ldr r3, [r3, #8]
  10685. 8004f7c: f8b7 213c ldrh.w r2, [r7, #316] @ 0x13c
  10686. 8004f80: 4619 mov r1, r3
  10687. 8004f82: f00b fd25 bl 80109d0 <HAL_UART_Transmit_IT>
  10688. }
  10689. #ifdef SERIAL_PROTOCOL_DBG
  10690. printf ("Uart%d: TX bytes sent: %d\n", dataToSend, uartTaskData->uartNumber);
  10691. #endif
  10692. receverState = srFinish;
  10693. 8004f86: 2305 movs r3, #5
  10694. 8004f88: f887 3133 strb.w r3, [r7, #307] @ 0x133
  10695. break;
  10696. 8004f8c: e024 b.n 8004fd8 <UartRxTask+0x524>
  10697. case srFinish:
  10698. default:
  10699. osMutexAcquire (uartTaskData->rxDataBufferMutex, osWaitForever);
  10700. 8004f8e: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10701. 8004f92: 6a1b ldr r3, [r3, #32]
  10702. 8004f94: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  10703. 8004f98: 4618 mov r0, r3
  10704. 8004f9a: f00e fd46 bl 8013a2a <osMutexAcquire>
  10705. uartTaskData->frameBytesCount = 0;
  10706. 8004f9e: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10707. 8004fa2: 2200 movs r2, #0
  10708. 8004fa4: 82da strh r2, [r3, #22]
  10709. osMutexRelease (uartTaskData->rxDataBufferMutex);
  10710. 8004fa6: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  10711. 8004faa: 6a1b ldr r3, [r3, #32]
  10712. 8004fac: 4618 mov r0, r3
  10713. 8004fae: f00e fd87 bl 8013ac0 <osMutexRelease>
  10714. spFrameData.frameHeader.frameCommand = spUnknown;
  10715. 8004fb2: f507 73a0 add.w r3, r7, #320 @ 0x140
  10716. 8004fb6: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  10717. 8004fba: 2212 movs r2, #18
  10718. 8004fbc: 709a strb r2, [r3, #2]
  10719. frameTotalLength = 0;
  10720. 8004fbe: 2300 movs r3, #0
  10721. 8004fc0: f8a7 313e strh.w r3, [r7, #318] @ 0x13e
  10722. outputDataBufferPos = 0;
  10723. 8004fc4: 4b08 ldr r3, [pc, #32] @ (8004fe8 <UartRxTask+0x534>)
  10724. 8004fc6: 2200 movs r2, #0
  10725. 8004fc8: 801a strh r2, [r3, #0]
  10726. receverState = srWaitForHeader;
  10727. 8004fca: 2300 movs r3, #0
  10728. 8004fcc: f887 3133 strb.w r3, [r7, #307] @ 0x133
  10729. proceed = pdFALSE;
  10730. 8004fd0: 2300 movs r3, #0
  10731. 8004fd2: f8c7 3134 str.w r3, [r7, #308] @ 0x134
  10732. break;
  10733. 8004fd6: bf00 nop
  10734. while (proceed) {
  10735. 8004fd8: f8d7 3134 ldr.w r3, [r7, #308] @ 0x134
  10736. 8004fdc: 2b00 cmp r3, #0
  10737. 8004fde: f47f ae09 bne.w 8004bf4 <UartRxTask+0x140>
  10738. frameTimeout = !(xTaskNotifyWait (0, 0, &bytesRec, pdMS_TO_TICKS (FRAME_TIMEOUT_MS)));
  10739. 8004fe2: e5b8 b.n 8004b56 <UartRxTask+0xa2>
  10740. 8004fe4: 24000400 .word 0x24000400
  10741. 8004fe8: 24001078 .word 0x24001078
  10742. 08004fec <Uart8ReceivedDataProcessCallback>:
  10743. }
  10744. }
  10745. }
  10746. }
  10747. void Uart8ReceivedDataProcessCallback (void* arg, SerialProtocolFrameData* spFrameData) {
  10748. 8004fec: b580 push {r7, lr}
  10749. 8004fee: b082 sub sp, #8
  10750. 8004ff0: af00 add r7, sp, #0
  10751. 8004ff2: 6078 str r0, [r7, #4]
  10752. 8004ff4: 6039 str r1, [r7, #0]
  10753. Uart1ReceivedDataProcessCallback (arg, spFrameData);
  10754. 8004ff6: 6839 ldr r1, [r7, #0]
  10755. 8004ff8: 6878 ldr r0, [r7, #4]
  10756. 8004ffa: f000 f805 bl 8005008 <Uart1ReceivedDataProcessCallback>
  10757. }
  10758. 8004ffe: bf00 nop
  10759. 8005000: 3708 adds r7, #8
  10760. 8005002: 46bd mov sp, r7
  10761. 8005004: bd80 pop {r7, pc}
  10762. ...
  10763. 08005008 <Uart1ReceivedDataProcessCallback>:
  10764. void Uart1ReceivedDataProcessCallback (void* arg, SerialProtocolFrameData* spFrameData) {
  10765. 8005008: b590 push {r4, r7, lr}
  10766. 800500a: b0ab sub sp, #172 @ 0xac
  10767. 800500c: af06 add r7, sp, #24
  10768. 800500e: 6078 str r0, [r7, #4]
  10769. 8005010: 6039 str r1, [r7, #0]
  10770. 8005012: f107 0390 add.w r3, r7, #144 @ 0x90
  10771. 8005016: 3b88 subs r3, #136 @ 0x88
  10772. 8005018: 331f adds r3, #31
  10773. 800501a: 095b lsrs r3, r3, #5
  10774. 800501c: 015c lsls r4, r3, #5
  10775. UartTaskData* uartTaskData = (UartTaskData*)arg;
  10776. 800501e: 687b ldr r3, [r7, #4]
  10777. 8005020: 66fb str r3, [r7, #108] @ 0x6c
  10778. uint16_t dataToSend = 0;
  10779. 8005022: 2300 movs r3, #0
  10780. 8005024: f8a7 306a strh.w r3, [r7, #106] @ 0x6a
  10781. outputDataBufferPos = 0;
  10782. 8005028: 4bba ldr r3, [pc, #744] @ (8005314 <Uart1ReceivedDataProcessCallback+0x30c>)
  10783. 800502a: 2200 movs r2, #0
  10784. 800502c: 801a strh r2, [r3, #0]
  10785. uint16_t inputDataBufferPos = 0;
  10786. 800502e: 2300 movs r3, #0
  10787. 8005030: f8a7 3054 strh.w r3, [r7, #84] @ 0x54
  10788. SerialProtocolRespStatus respStatus = spUnknownCommand;
  10789. 8005034: 23fd movs r3, #253 @ 0xfd
  10790. 8005036: f887 308f strb.w r3, [r7, #143] @ 0x8f
  10791. switch (spFrameData->frameHeader.frameCommand) {
  10792. 800503a: 683b ldr r3, [r7, #0]
  10793. 800503c: 789b ldrb r3, [r3, #2]
  10794. 800503e: 2b11 cmp r3, #17
  10795. 8005040: f200 8504 bhi.w 8005a4c <Uart1ReceivedDataProcessCallback+0xa44>
  10796. 8005044: a201 add r2, pc, #4 @ (adr r2, 800504c <Uart1ReceivedDataProcessCallback+0x44>)
  10797. 8005046: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  10798. 800504a: bf00 nop
  10799. 800504c: 08005095 .word 0x08005095
  10800. 8005050: 080051a5 .word 0x080051a5
  10801. 8005054: 08005391 .word 0x08005391
  10802. 8005058: 0800544d .word 0x0800544d
  10803. 800505c: 080054ef .word 0x080054ef
  10804. 8005060: 0800560d .word 0x0800560d
  10805. 8005064: 08005695 .word 0x08005695
  10806. 8005068: 08005591 .word 0x08005591
  10807. 800506c: 080056eb .word 0x080056eb
  10808. 8005070: 0800575d .word 0x0800575d
  10809. 8005074: 080057a9 .word 0x080057a9
  10810. 8005078: 080057f5 .word 0x080057f5
  10811. 800507c: 08005857 .word 0x08005857
  10812. 8005080: 080058bb .word 0x080058bb
  10813. 8005084: 0800591d .word 0x0800591d
  10814. 8005088: 08005981 .word 0x08005981
  10815. 800508c: 080059a5 .word 0x080059a5
  10816. 8005090: 080059f9 .word 0x080059f9
  10817. case spGetElectricalMeasurments:
  10818. if (osMutexAcquire (resMeasurementsMutex, osWaitForever) == osOK) {
  10819. 8005094: 4ba0 ldr r3, [pc, #640] @ (8005318 <Uart1ReceivedDataProcessCallback+0x310>)
  10820. 8005096: 681b ldr r3, [r3, #0]
  10821. 8005098: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  10822. 800509c: 4618 mov r0, r3
  10823. 800509e: f00e fcc4 bl 8013a2a <osMutexAcquire>
  10824. 80050a2: 4603 mov r3, r0
  10825. 80050a4: 2b00 cmp r3, #0
  10826. 80050a6: d178 bne.n 800519a <Uart1ReceivedDataProcessCallback+0x192>
  10827. for (int i = 0; i < 3; i++) {
  10828. 80050a8: 2300 movs r3, #0
  10829. 80050aa: f8c7 3088 str.w r3, [r7, #136] @ 0x88
  10830. 80050ae: e00e b.n 80050ce <Uart1ReceivedDataProcessCallback+0xc6>
  10831. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &resMeasurements.voltageRMS[i], sizeof (float));
  10832. 80050b0: f8d7 3088 ldr.w r3, [r7, #136] @ 0x88
  10833. 80050b4: 009b lsls r3, r3, #2
  10834. 80050b6: 4a99 ldr r2, [pc, #612] @ (800531c <Uart1ReceivedDataProcessCallback+0x314>)
  10835. 80050b8: 441a add r2, r3
  10836. 80050ba: 2304 movs r3, #4
  10837. 80050bc: 4995 ldr r1, [pc, #596] @ (8005314 <Uart1ReceivedDataProcessCallback+0x30c>)
  10838. 80050be: 4898 ldr r0, [pc, #608] @ (8005320 <Uart1ReceivedDataProcessCallback+0x318>)
  10839. 80050c0: f7fe fbd8 bl 8003874 <WriteDataToBuffer>
  10840. for (int i = 0; i < 3; i++) {
  10841. 80050c4: f8d7 3088 ldr.w r3, [r7, #136] @ 0x88
  10842. 80050c8: 3301 adds r3, #1
  10843. 80050ca: f8c7 3088 str.w r3, [r7, #136] @ 0x88
  10844. 80050ce: f8d7 3088 ldr.w r3, [r7, #136] @ 0x88
  10845. 80050d2: 2b02 cmp r3, #2
  10846. 80050d4: ddec ble.n 80050b0 <Uart1ReceivedDataProcessCallback+0xa8>
  10847. }
  10848. for (int i = 0; i < 3; i++) {
  10849. 80050d6: 2300 movs r3, #0
  10850. 80050d8: f8c7 3084 str.w r3, [r7, #132] @ 0x84
  10851. 80050dc: e010 b.n 8005100 <Uart1ReceivedDataProcessCallback+0xf8>
  10852. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &resMeasurements.voltagePeak[i], sizeof (float));
  10853. 80050de: f8d7 3084 ldr.w r3, [r7, #132] @ 0x84
  10854. 80050e2: 3302 adds r3, #2
  10855. 80050e4: 009b lsls r3, r3, #2
  10856. 80050e6: 4a8d ldr r2, [pc, #564] @ (800531c <Uart1ReceivedDataProcessCallback+0x314>)
  10857. 80050e8: 4413 add r3, r2
  10858. 80050ea: 1d1a adds r2, r3, #4
  10859. 80050ec: 2304 movs r3, #4
  10860. 80050ee: 4989 ldr r1, [pc, #548] @ (8005314 <Uart1ReceivedDataProcessCallback+0x30c>)
  10861. 80050f0: 488b ldr r0, [pc, #556] @ (8005320 <Uart1ReceivedDataProcessCallback+0x318>)
  10862. 80050f2: f7fe fbbf bl 8003874 <WriteDataToBuffer>
  10863. for (int i = 0; i < 3; i++) {
  10864. 80050f6: f8d7 3084 ldr.w r3, [r7, #132] @ 0x84
  10865. 80050fa: 3301 adds r3, #1
  10866. 80050fc: f8c7 3084 str.w r3, [r7, #132] @ 0x84
  10867. 8005100: f8d7 3084 ldr.w r3, [r7, #132] @ 0x84
  10868. 8005104: 2b02 cmp r3, #2
  10869. 8005106: ddea ble.n 80050de <Uart1ReceivedDataProcessCallback+0xd6>
  10870. }
  10871. for (int i = 0; i < 3; i++) {
  10872. 8005108: 2300 movs r3, #0
  10873. 800510a: f8c7 3080 str.w r3, [r7, #128] @ 0x80
  10874. 800510e: e00f b.n 8005130 <Uart1ReceivedDataProcessCallback+0x128>
  10875. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &resMeasurements.currentRMS[i], sizeof (float));
  10876. 8005110: f8d7 3080 ldr.w r3, [r7, #128] @ 0x80
  10877. 8005114: 3306 adds r3, #6
  10878. 8005116: 009b lsls r3, r3, #2
  10879. 8005118: 4a80 ldr r2, [pc, #512] @ (800531c <Uart1ReceivedDataProcessCallback+0x314>)
  10880. 800511a: 441a add r2, r3
  10881. 800511c: 2304 movs r3, #4
  10882. 800511e: 497d ldr r1, [pc, #500] @ (8005314 <Uart1ReceivedDataProcessCallback+0x30c>)
  10883. 8005120: 487f ldr r0, [pc, #508] @ (8005320 <Uart1ReceivedDataProcessCallback+0x318>)
  10884. 8005122: f7fe fba7 bl 8003874 <WriteDataToBuffer>
  10885. for (int i = 0; i < 3; i++) {
  10886. 8005126: f8d7 3080 ldr.w r3, [r7, #128] @ 0x80
  10887. 800512a: 3301 adds r3, #1
  10888. 800512c: f8c7 3080 str.w r3, [r7, #128] @ 0x80
  10889. 8005130: f8d7 3080 ldr.w r3, [r7, #128] @ 0x80
  10890. 8005134: 2b02 cmp r3, #2
  10891. 8005136: ddeb ble.n 8005110 <Uart1ReceivedDataProcessCallback+0x108>
  10892. }
  10893. for (int i = 0; i < 3; i++) {
  10894. 8005138: 2300 movs r3, #0
  10895. 800513a: 67fb str r3, [r7, #124] @ 0x7c
  10896. 800513c: e00d b.n 800515a <Uart1ReceivedDataProcessCallback+0x152>
  10897. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &resMeasurements.currentPeak[i], sizeof (float));
  10898. 800513e: 6ffb ldr r3, [r7, #124] @ 0x7c
  10899. 8005140: 3308 adds r3, #8
  10900. 8005142: 009b lsls r3, r3, #2
  10901. 8005144: 4a75 ldr r2, [pc, #468] @ (800531c <Uart1ReceivedDataProcessCallback+0x314>)
  10902. 8005146: 4413 add r3, r2
  10903. 8005148: 1d1a adds r2, r3, #4
  10904. 800514a: 2304 movs r3, #4
  10905. 800514c: 4971 ldr r1, [pc, #452] @ (8005314 <Uart1ReceivedDataProcessCallback+0x30c>)
  10906. 800514e: 4874 ldr r0, [pc, #464] @ (8005320 <Uart1ReceivedDataProcessCallback+0x318>)
  10907. 8005150: f7fe fb90 bl 8003874 <WriteDataToBuffer>
  10908. for (int i = 0; i < 3; i++) {
  10909. 8005154: 6ffb ldr r3, [r7, #124] @ 0x7c
  10910. 8005156: 3301 adds r3, #1
  10911. 8005158: 67fb str r3, [r7, #124] @ 0x7c
  10912. 800515a: 6ffb ldr r3, [r7, #124] @ 0x7c
  10913. 800515c: 2b02 cmp r3, #2
  10914. 800515e: ddee ble.n 800513e <Uart1ReceivedDataProcessCallback+0x136>
  10915. }
  10916. for (int i = 0; i < 3; i++) {
  10917. 8005160: 2300 movs r3, #0
  10918. 8005162: 67bb str r3, [r7, #120] @ 0x78
  10919. 8005164: e00c b.n 8005180 <Uart1ReceivedDataProcessCallback+0x178>
  10920. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &resMeasurements.power[i], sizeof (float));
  10921. 8005166: 6fbb ldr r3, [r7, #120] @ 0x78
  10922. 8005168: 330c adds r3, #12
  10923. 800516a: 009b lsls r3, r3, #2
  10924. 800516c: 4a6b ldr r2, [pc, #428] @ (800531c <Uart1ReceivedDataProcessCallback+0x314>)
  10925. 800516e: 441a add r2, r3
  10926. 8005170: 2304 movs r3, #4
  10927. 8005172: 4968 ldr r1, [pc, #416] @ (8005314 <Uart1ReceivedDataProcessCallback+0x30c>)
  10928. 8005174: 486a ldr r0, [pc, #424] @ (8005320 <Uart1ReceivedDataProcessCallback+0x318>)
  10929. 8005176: f7fe fb7d bl 8003874 <WriteDataToBuffer>
  10930. for (int i = 0; i < 3; i++) {
  10931. 800517a: 6fbb ldr r3, [r7, #120] @ 0x78
  10932. 800517c: 3301 adds r3, #1
  10933. 800517e: 67bb str r3, [r7, #120] @ 0x78
  10934. 8005180: 6fbb ldr r3, [r7, #120] @ 0x78
  10935. 8005182: 2b02 cmp r3, #2
  10936. 8005184: ddef ble.n 8005166 <Uart1ReceivedDataProcessCallback+0x15e>
  10937. }
  10938. osMutexRelease (resMeasurementsMutex);
  10939. 8005186: 4b64 ldr r3, [pc, #400] @ (8005318 <Uart1ReceivedDataProcessCallback+0x310>)
  10940. 8005188: 681b ldr r3, [r3, #0]
  10941. 800518a: 4618 mov r0, r3
  10942. 800518c: f00e fc98 bl 8013ac0 <osMutexRelease>
  10943. respStatus = spOK;
  10944. 8005190: 2300 movs r3, #0
  10945. 8005192: f887 308f strb.w r3, [r7, #143] @ 0x8f
  10946. } else {
  10947. respStatus = spInternalError;
  10948. }
  10949. break;
  10950. 8005196: f000 bc60 b.w 8005a5a <Uart1ReceivedDataProcessCallback+0xa52>
  10951. respStatus = spInternalError;
  10952. 800519a: 23fc movs r3, #252 @ 0xfc
  10953. 800519c: f887 308f strb.w r3, [r7, #143] @ 0x8f
  10954. break;
  10955. 80051a0: f000 bc5b b.w 8005a5a <Uart1ReceivedDataProcessCallback+0xa52>
  10956. case spGetSensorMeasurments:
  10957. if (osMutexAcquire (sensorsInfoMutex, osWaitForever) == osOK) {
  10958. 80051a4: 4b5f ldr r3, [pc, #380] @ (8005324 <Uart1ReceivedDataProcessCallback+0x31c>)
  10959. 80051a6: 681b ldr r3, [r3, #0]
  10960. 80051a8: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  10961. 80051ac: 4618 mov r0, r3
  10962. 80051ae: f00e fc3c bl 8013a2a <osMutexAcquire>
  10963. 80051b2: 4603 mov r3, r0
  10964. 80051b4: 2b00 cmp r3, #0
  10965. 80051b6: f040 80e7 bne.w 8005388 <Uart1ReceivedDataProcessCallback+0x380>
  10966. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.pvTemperature[0], sizeof (float));
  10967. 80051ba: 2304 movs r3, #4
  10968. 80051bc: 4a5a ldr r2, [pc, #360] @ (8005328 <Uart1ReceivedDataProcessCallback+0x320>)
  10969. 80051be: 4955 ldr r1, [pc, #340] @ (8005314 <Uart1ReceivedDataProcessCallback+0x30c>)
  10970. 80051c0: 4857 ldr r0, [pc, #348] @ (8005320 <Uart1ReceivedDataProcessCallback+0x318>)
  10971. 80051c2: f7fe fb57 bl 8003874 <WriteDataToBuffer>
  10972. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.pvTemperature[1], sizeof (float));
  10973. 80051c6: 2304 movs r3, #4
  10974. 80051c8: 4a58 ldr r2, [pc, #352] @ (800532c <Uart1ReceivedDataProcessCallback+0x324>)
  10975. 80051ca: 4952 ldr r1, [pc, #328] @ (8005314 <Uart1ReceivedDataProcessCallback+0x30c>)
  10976. 80051cc: 4854 ldr r0, [pc, #336] @ (8005320 <Uart1ReceivedDataProcessCallback+0x318>)
  10977. 80051ce: f7fe fb51 bl 8003874 <WriteDataToBuffer>
  10978. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.fanVoltage, sizeof (float));
  10979. 80051d2: 2304 movs r3, #4
  10980. 80051d4: 4a56 ldr r2, [pc, #344] @ (8005330 <Uart1ReceivedDataProcessCallback+0x328>)
  10981. 80051d6: 494f ldr r1, [pc, #316] @ (8005314 <Uart1ReceivedDataProcessCallback+0x30c>)
  10982. 80051d8: 4851 ldr r0, [pc, #324] @ (8005320 <Uart1ReceivedDataProcessCallback+0x318>)
  10983. 80051da: f7fe fb4b bl 8003874 <WriteDataToBuffer>
  10984. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.pvEncoderX, sizeof (float));
  10985. 80051de: 2304 movs r3, #4
  10986. 80051e0: 4a54 ldr r2, [pc, #336] @ (8005334 <Uart1ReceivedDataProcessCallback+0x32c>)
  10987. 80051e2: 494c ldr r1, [pc, #304] @ (8005314 <Uart1ReceivedDataProcessCallback+0x30c>)
  10988. 80051e4: 484e ldr r0, [pc, #312] @ (8005320 <Uart1ReceivedDataProcessCallback+0x318>)
  10989. 80051e6: f7fe fb45 bl 8003874 <WriteDataToBuffer>
  10990. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.pvEncoderY, sizeof (float));
  10991. 80051ea: 2304 movs r3, #4
  10992. 80051ec: 4a52 ldr r2, [pc, #328] @ (8005338 <Uart1ReceivedDataProcessCallback+0x330>)
  10993. 80051ee: 4949 ldr r1, [pc, #292] @ (8005314 <Uart1ReceivedDataProcessCallback+0x30c>)
  10994. 80051f0: 484b ldr r0, [pc, #300] @ (8005320 <Uart1ReceivedDataProcessCallback+0x318>)
  10995. 80051f2: f7fe fb3f bl 8003874 <WriteDataToBuffer>
  10996. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.motorXStatus, sizeof (uint8_t));
  10997. 80051f6: 2301 movs r3, #1
  10998. 80051f8: 4a50 ldr r2, [pc, #320] @ (800533c <Uart1ReceivedDataProcessCallback+0x334>)
  10999. 80051fa: 4946 ldr r1, [pc, #280] @ (8005314 <Uart1ReceivedDataProcessCallback+0x30c>)
  11000. 80051fc: 4848 ldr r0, [pc, #288] @ (8005320 <Uart1ReceivedDataProcessCallback+0x318>)
  11001. 80051fe: f7fe fb39 bl 8003874 <WriteDataToBuffer>
  11002. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.motorYStatus, sizeof (uint8_t));
  11003. 8005202: 2301 movs r3, #1
  11004. 8005204: 4a4e ldr r2, [pc, #312] @ (8005340 <Uart1ReceivedDataProcessCallback+0x338>)
  11005. 8005206: 4943 ldr r1, [pc, #268] @ (8005314 <Uart1ReceivedDataProcessCallback+0x30c>)
  11006. 8005208: 4845 ldr r0, [pc, #276] @ (8005320 <Uart1ReceivedDataProcessCallback+0x318>)
  11007. 800520a: f7fe fb33 bl 8003874 <WriteDataToBuffer>
  11008. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.motorXAveCurrent, sizeof (float));
  11009. 800520e: 2304 movs r3, #4
  11010. 8005210: 4a4c ldr r2, [pc, #304] @ (8005344 <Uart1ReceivedDataProcessCallback+0x33c>)
  11011. 8005212: 4940 ldr r1, [pc, #256] @ (8005314 <Uart1ReceivedDataProcessCallback+0x30c>)
  11012. 8005214: 4842 ldr r0, [pc, #264] @ (8005320 <Uart1ReceivedDataProcessCallback+0x318>)
  11013. 8005216: f7fe fb2d bl 8003874 <WriteDataToBuffer>
  11014. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.motorYAveCurrent, sizeof (float));
  11015. 800521a: 2304 movs r3, #4
  11016. 800521c: 4a4a ldr r2, [pc, #296] @ (8005348 <Uart1ReceivedDataProcessCallback+0x340>)
  11017. 800521e: 493d ldr r1, [pc, #244] @ (8005314 <Uart1ReceivedDataProcessCallback+0x30c>)
  11018. 8005220: 483f ldr r0, [pc, #252] @ (8005320 <Uart1ReceivedDataProcessCallback+0x318>)
  11019. 8005222: f7fe fb27 bl 8003874 <WriteDataToBuffer>
  11020. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.motorXPeakCurrent, sizeof (float));
  11021. 8005226: 2304 movs r3, #4
  11022. 8005228: 4a48 ldr r2, [pc, #288] @ (800534c <Uart1ReceivedDataProcessCallback+0x344>)
  11023. 800522a: 493a ldr r1, [pc, #232] @ (8005314 <Uart1ReceivedDataProcessCallback+0x30c>)
  11024. 800522c: 483c ldr r0, [pc, #240] @ (8005320 <Uart1ReceivedDataProcessCallback+0x318>)
  11025. 800522e: f7fe fb21 bl 8003874 <WriteDataToBuffer>
  11026. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.motorYPeakCurrent, sizeof (float));
  11027. 8005232: 2304 movs r3, #4
  11028. 8005234: 4a46 ldr r2, [pc, #280] @ (8005350 <Uart1ReceivedDataProcessCallback+0x348>)
  11029. 8005236: 4937 ldr r1, [pc, #220] @ (8005314 <Uart1ReceivedDataProcessCallback+0x30c>)
  11030. 8005238: 4839 ldr r0, [pc, #228] @ (8005320 <Uart1ReceivedDataProcessCallback+0x318>)
  11031. 800523a: f7fe fb1b bl 8003874 <WriteDataToBuffer>
  11032. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.limitXSwitchUp, sizeof (uint8_t));
  11033. 800523e: 2301 movs r3, #1
  11034. 8005240: 4a44 ldr r2, [pc, #272] @ (8005354 <Uart1ReceivedDataProcessCallback+0x34c>)
  11035. 8005242: 4934 ldr r1, [pc, #208] @ (8005314 <Uart1ReceivedDataProcessCallback+0x30c>)
  11036. 8005244: 4836 ldr r0, [pc, #216] @ (8005320 <Uart1ReceivedDataProcessCallback+0x318>)
  11037. 8005246: f7fe fb15 bl 8003874 <WriteDataToBuffer>
  11038. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.limitXSwitchDown, sizeof (uint8_t));
  11039. 800524a: 2301 movs r3, #1
  11040. 800524c: 4a42 ldr r2, [pc, #264] @ (8005358 <Uart1ReceivedDataProcessCallback+0x350>)
  11041. 800524e: 4931 ldr r1, [pc, #196] @ (8005314 <Uart1ReceivedDataProcessCallback+0x30c>)
  11042. 8005250: 4833 ldr r0, [pc, #204] @ (8005320 <Uart1ReceivedDataProcessCallback+0x318>)
  11043. 8005252: f7fe fb0f bl 8003874 <WriteDataToBuffer>
  11044. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.limitXSwitchCenter, sizeof (uint8_t));
  11045. 8005256: 2301 movs r3, #1
  11046. 8005258: 4a40 ldr r2, [pc, #256] @ (800535c <Uart1ReceivedDataProcessCallback+0x354>)
  11047. 800525a: 492e ldr r1, [pc, #184] @ (8005314 <Uart1ReceivedDataProcessCallback+0x30c>)
  11048. 800525c: 4830 ldr r0, [pc, #192] @ (8005320 <Uart1ReceivedDataProcessCallback+0x318>)
  11049. 800525e: f7fe fb09 bl 8003874 <WriteDataToBuffer>
  11050. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.limitYSwitchUp, sizeof (uint8_t));
  11051. 8005262: 2301 movs r3, #1
  11052. 8005264: 4a3e ldr r2, [pc, #248] @ (8005360 <Uart1ReceivedDataProcessCallback+0x358>)
  11053. 8005266: 492b ldr r1, [pc, #172] @ (8005314 <Uart1ReceivedDataProcessCallback+0x30c>)
  11054. 8005268: 482d ldr r0, [pc, #180] @ (8005320 <Uart1ReceivedDataProcessCallback+0x318>)
  11055. 800526a: f7fe fb03 bl 8003874 <WriteDataToBuffer>
  11056. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.limitYSwitchDown, sizeof (uint8_t));
  11057. 800526e: 2301 movs r3, #1
  11058. 8005270: 4a3c ldr r2, [pc, #240] @ (8005364 <Uart1ReceivedDataProcessCallback+0x35c>)
  11059. 8005272: 4928 ldr r1, [pc, #160] @ (8005314 <Uart1ReceivedDataProcessCallback+0x30c>)
  11060. 8005274: 482a ldr r0, [pc, #168] @ (8005320 <Uart1ReceivedDataProcessCallback+0x318>)
  11061. 8005276: f7fe fafd bl 8003874 <WriteDataToBuffer>
  11062. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.limitYSwitchCenter, sizeof (uint8_t));
  11063. 800527a: 2301 movs r3, #1
  11064. 800527c: 4a3a ldr r2, [pc, #232] @ (8005368 <Uart1ReceivedDataProcessCallback+0x360>)
  11065. 800527e: 4925 ldr r1, [pc, #148] @ (8005314 <Uart1ReceivedDataProcessCallback+0x30c>)
  11066. 8005280: 4827 ldr r0, [pc, #156] @ (8005320 <Uart1ReceivedDataProcessCallback+0x318>)
  11067. 8005282: f7fe faf7 bl 8003874 <WriteDataToBuffer>
  11068. uint8_t comparatorOutput = HAL_COMP_GetOutputLevel (&hcomp1) == COMP_OUTPUT_LEVEL_HIGH ? 1 : 0;
  11069. 8005286: 4839 ldr r0, [pc, #228] @ (800536c <Uart1ReceivedDataProcessCallback+0x364>)
  11070. 8005288: f002 fa62 bl 8007750 <HAL_COMP_GetOutputLevel>
  11071. 800528c: 4603 mov r3, r0
  11072. 800528e: 2b01 cmp r3, #1
  11073. 8005290: bf0c ite eq
  11074. 8005292: 2301 moveq r3, #1
  11075. 8005294: 2300 movne r3, #0
  11076. 8005296: b2db uxtb r3, r3
  11077. 8005298: f887 3057 strb.w r3, [r7, #87] @ 0x57
  11078. sensorsInfo.powerSupplyFailMask = ~((comparatorOutput << 1) | HAL_GPIO_ReadPin (GPIOD, GPIO_PIN_3)) & 0x01;
  11079. 800529c: f897 3057 ldrb.w r3, [r7, #87] @ 0x57
  11080. 80052a0: 005c lsls r4, r3, #1
  11081. 80052a2: 2108 movs r1, #8
  11082. 80052a4: 4832 ldr r0, [pc, #200] @ (8005370 <Uart1ReceivedDataProcessCallback+0x368>)
  11083. 80052a6: f006 f80b bl 800b2c0 <HAL_GPIO_ReadPin>
  11084. 80052aa: 4603 mov r3, r0
  11085. 80052ac: 4323 orrs r3, r4
  11086. 80052ae: f003 0301 and.w r3, r3, #1
  11087. 80052b2: 2b00 cmp r3, #0
  11088. 80052b4: bf0c ite eq
  11089. 80052b6: 2301 moveq r3, #1
  11090. 80052b8: 2300 movne r3, #0
  11091. 80052ba: b2db uxtb r3, r3
  11092. 80052bc: 461a mov r2, r3
  11093. 80052be: 4b1a ldr r3, [pc, #104] @ (8005328 <Uart1ReceivedDataProcessCallback+0x320>)
  11094. 80052c0: f883 202e strb.w r2, [r3, #46] @ 0x2e
  11095. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.powerSupplyFailMask, sizeof (uint8_t));
  11096. 80052c4: 2301 movs r3, #1
  11097. 80052c6: 4a2b ldr r2, [pc, #172] @ (8005374 <Uart1ReceivedDataProcessCallback+0x36c>)
  11098. 80052c8: 4912 ldr r1, [pc, #72] @ (8005314 <Uart1ReceivedDataProcessCallback+0x30c>)
  11099. 80052ca: 4815 ldr r0, [pc, #84] @ (8005320 <Uart1ReceivedDataProcessCallback+0x318>)
  11100. 80052cc: f7fe fad2 bl 8003874 <WriteDataToBuffer>
  11101. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.currentXPosition, sizeof (float));
  11102. 80052d0: 2304 movs r3, #4
  11103. 80052d2: 4a29 ldr r2, [pc, #164] @ (8005378 <Uart1ReceivedDataProcessCallback+0x370>)
  11104. 80052d4: 490f ldr r1, [pc, #60] @ (8005314 <Uart1ReceivedDataProcessCallback+0x30c>)
  11105. 80052d6: 4812 ldr r0, [pc, #72] @ (8005320 <Uart1ReceivedDataProcessCallback+0x318>)
  11106. 80052d8: f7fe facc bl 8003874 <WriteDataToBuffer>
  11107. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.currentYPosition, sizeof (float));
  11108. 80052dc: 2304 movs r3, #4
  11109. 80052de: 4a27 ldr r2, [pc, #156] @ (800537c <Uart1ReceivedDataProcessCallback+0x374>)
  11110. 80052e0: 490c ldr r1, [pc, #48] @ (8005314 <Uart1ReceivedDataProcessCallback+0x30c>)
  11111. 80052e2: 480f ldr r0, [pc, #60] @ (8005320 <Uart1ReceivedDataProcessCallback+0x318>)
  11112. 80052e4: f7fe fac6 bl 8003874 <WriteDataToBuffer>
  11113. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.positionXWeak, sizeof (uint8_t));
  11114. 80052e8: 2301 movs r3, #1
  11115. 80052ea: 4a25 ldr r2, [pc, #148] @ (8005380 <Uart1ReceivedDataProcessCallback+0x378>)
  11116. 80052ec: 4909 ldr r1, [pc, #36] @ (8005314 <Uart1ReceivedDataProcessCallback+0x30c>)
  11117. 80052ee: 480c ldr r0, [pc, #48] @ (8005320 <Uart1ReceivedDataProcessCallback+0x318>)
  11118. 80052f0: f7fe fac0 bl 8003874 <WriteDataToBuffer>
  11119. WriteDataToBuffer (outputDataBuffer, &outputDataBufferPos, &sensorsInfo.positionYWeak, sizeof (uint8_t));
  11120. 80052f4: 2301 movs r3, #1
  11121. 80052f6: 4a23 ldr r2, [pc, #140] @ (8005384 <Uart1ReceivedDataProcessCallback+0x37c>)
  11122. 80052f8: 4906 ldr r1, [pc, #24] @ (8005314 <Uart1ReceivedDataProcessCallback+0x30c>)
  11123. 80052fa: 4809 ldr r0, [pc, #36] @ (8005320 <Uart1ReceivedDataProcessCallback+0x318>)
  11124. 80052fc: f7fe faba bl 8003874 <WriteDataToBuffer>
  11125. osMutexRelease (sensorsInfoMutex);
  11126. 8005300: 4b08 ldr r3, [pc, #32] @ (8005324 <Uart1ReceivedDataProcessCallback+0x31c>)
  11127. 8005302: 681b ldr r3, [r3, #0]
  11128. 8005304: 4618 mov r0, r3
  11129. 8005306: f00e fbdb bl 8013ac0 <osMutexRelease>
  11130. respStatus = spOK;
  11131. 800530a: 2300 movs r3, #0
  11132. 800530c: f887 308f strb.w r3, [r7, #143] @ 0x8f
  11133. } else {
  11134. respStatus = spInternalError;
  11135. }
  11136. break;
  11137. 8005310: e3a3 b.n 8005a5a <Uart1ReceivedDataProcessCallback+0xa52>
  11138. 8005312: bf00 nop
  11139. 8005314: 24001078 .word 0x24001078
  11140. 8005318: 2400078c .word 0x2400078c
  11141. 800531c: 240007a0 .word 0x240007a0
  11142. 8005320: 24000ff8 .word 0x24000ff8
  11143. 8005324: 24000790 .word 0x24000790
  11144. 8005328: 240007e0 .word 0x240007e0
  11145. 800532c: 240007e4 .word 0x240007e4
  11146. 8005330: 240007e8 .word 0x240007e8
  11147. 8005334: 240007ec .word 0x240007ec
  11148. 8005338: 240007f0 .word 0x240007f0
  11149. 800533c: 240007f4 .word 0x240007f4
  11150. 8005340: 240007f5 .word 0x240007f5
  11151. 8005344: 240007f8 .word 0x240007f8
  11152. 8005348: 240007fc .word 0x240007fc
  11153. 800534c: 24000800 .word 0x24000800
  11154. 8005350: 24000804 .word 0x24000804
  11155. 8005354: 24000808 .word 0x24000808
  11156. 8005358: 24000809 .word 0x24000809
  11157. 800535c: 2400080a .word 0x2400080a
  11158. 8005360: 2400080b .word 0x2400080b
  11159. 8005364: 2400080c .word 0x2400080c
  11160. 8005368: 2400080d .word 0x2400080d
  11161. 800536c: 240003d4 .word 0x240003d4
  11162. 8005370: 58020c00 .word 0x58020c00
  11163. 8005374: 2400080e .word 0x2400080e
  11164. 8005378: 24000810 .word 0x24000810
  11165. 800537c: 24000814 .word 0x24000814
  11166. 8005380: 24000818 .word 0x24000818
  11167. 8005384: 24000819 .word 0x24000819
  11168. respStatus = spInternalError;
  11169. 8005388: 23fc movs r3, #252 @ 0xfc
  11170. 800538a: f887 308f strb.w r3, [r7, #143] @ 0x8f
  11171. break;
  11172. 800538e: e364 b.n 8005a5a <Uart1ReceivedDataProcessCallback+0xa52>
  11173. case spSetFanSpeed:
  11174. osTimerStop (fanTimerHandle);
  11175. 8005390: 4bb4 ldr r3, [pc, #720] @ (8005664 <Uart1ReceivedDataProcessCallback+0x65c>)
  11176. 8005392: 681b ldr r3, [r3, #0]
  11177. 8005394: 4618 mov r0, r3
  11178. 8005396: f00e fa8b bl 80138b0 <osTimerStop>
  11179. int32_t fanTimerPeriod = 0;
  11180. 800539a: 2300 movs r3, #0
  11181. 800539c: 653b str r3, [r7, #80] @ 0x50
  11182. uint32_t pulse = 0;
  11183. 800539e: 2300 movs r3, #0
  11184. 80053a0: 64fb str r3, [r7, #76] @ 0x4c
  11185. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, &pulse);
  11186. 80053a2: 683b ldr r3, [r7, #0]
  11187. 80053a4: 330c adds r3, #12
  11188. 80053a6: f107 024c add.w r2, r7, #76 @ 0x4c
  11189. 80053aa: f107 0154 add.w r1, r7, #84 @ 0x54
  11190. 80053ae: 4618 mov r0, r3
  11191. 80053b0: f7fe fac6 bl 8003940 <ReadWordFromBufer>
  11192. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, (uint32_t*)&fanTimerPeriod);
  11193. 80053b4: 683b ldr r3, [r7, #0]
  11194. 80053b6: 330c adds r3, #12
  11195. 80053b8: f107 0250 add.w r2, r7, #80 @ 0x50
  11196. 80053bc: f107 0154 add.w r1, r7, #84 @ 0x54
  11197. 80053c0: 4618 mov r0, r3
  11198. 80053c2: f7fe fabd bl 8003940 <ReadWordFromBufer>
  11199. fanTimerConfigOC.Pulse = pulse * 10;
  11200. 80053c6: 6cfa ldr r2, [r7, #76] @ 0x4c
  11201. 80053c8: 4613 mov r3, r2
  11202. 80053ca: 009b lsls r3, r3, #2
  11203. 80053cc: 4413 add r3, r2
  11204. 80053ce: 005b lsls r3, r3, #1
  11205. 80053d0: 461a mov r2, r3
  11206. 80053d2: 4ba5 ldr r3, [pc, #660] @ (8005668 <Uart1ReceivedDataProcessCallback+0x660>)
  11207. 80053d4: 605a str r2, [r3, #4]
  11208. if (HAL_TIM_PWM_ConfigChannel (&htim1, &fanTimerConfigOC, TIM_CHANNEL_2) != HAL_OK) {
  11209. 80053d6: 2204 movs r2, #4
  11210. 80053d8: 49a3 ldr r1, [pc, #652] @ (8005668 <Uart1ReceivedDataProcessCallback+0x660>)
  11211. 80053da: 48a4 ldr r0, [pc, #656] @ (800566c <Uart1ReceivedDataProcessCallback+0x664>)
  11212. 80053dc: f00a fad0 bl 800f980 <HAL_TIM_PWM_ConfigChannel>
  11213. 80053e0: 4603 mov r3, r0
  11214. 80053e2: 2b00 cmp r3, #0
  11215. 80053e4: d001 beq.n 80053ea <Uart1ReceivedDataProcessCallback+0x3e2>
  11216. Error_Handler ();
  11217. 80053e6: f7fc fbf1 bl 8001bcc <Error_Handler>
  11218. }
  11219. if (fanTimerPeriod > 0) {
  11220. 80053ea: 6d3b ldr r3, [r7, #80] @ 0x50
  11221. 80053ec: 2b00 cmp r3, #0
  11222. 80053ee: dd0f ble.n 8005410 <Uart1ReceivedDataProcessCallback+0x408>
  11223. osTimerStart (fanTimerHandle, fanTimerPeriod * 1000);
  11224. 80053f0: 4b9c ldr r3, [pc, #624] @ (8005664 <Uart1ReceivedDataProcessCallback+0x65c>)
  11225. 80053f2: 681a ldr r2, [r3, #0]
  11226. 80053f4: 6d3b ldr r3, [r7, #80] @ 0x50
  11227. 80053f6: f44f 717a mov.w r1, #1000 @ 0x3e8
  11228. 80053fa: fb01 f303 mul.w r3, r1, r3
  11229. 80053fe: 4619 mov r1, r3
  11230. 8005400: 4610 mov r0, r2
  11231. 8005402: f00e fa27 bl 8013854 <osTimerStart>
  11232. HAL_TIM_PWM_Start (&htim1, TIM_CHANNEL_2);
  11233. 8005406: 2104 movs r1, #4
  11234. 8005408: 4898 ldr r0, [pc, #608] @ (800566c <Uart1ReceivedDataProcessCallback+0x664>)
  11235. 800540a: f00a f80d bl 800f428 <HAL_TIM_PWM_Start>
  11236. 800540e: e019 b.n 8005444 <Uart1ReceivedDataProcessCallback+0x43c>
  11237. } else if (fanTimerPeriod == 0) {
  11238. 8005410: 6d3b ldr r3, [r7, #80] @ 0x50
  11239. 8005412: 2b00 cmp r3, #0
  11240. 8005414: d109 bne.n 800542a <Uart1ReceivedDataProcessCallback+0x422>
  11241. osTimerStop (fanTimerHandle);
  11242. 8005416: 4b93 ldr r3, [pc, #588] @ (8005664 <Uart1ReceivedDataProcessCallback+0x65c>)
  11243. 8005418: 681b ldr r3, [r3, #0]
  11244. 800541a: 4618 mov r0, r3
  11245. 800541c: f00e fa48 bl 80138b0 <osTimerStop>
  11246. HAL_TIM_PWM_Stop (&htim1, TIM_CHANNEL_2);
  11247. 8005420: 2104 movs r1, #4
  11248. 8005422: 4892 ldr r0, [pc, #584] @ (800566c <Uart1ReceivedDataProcessCallback+0x664>)
  11249. 8005424: f00a f90e bl 800f644 <HAL_TIM_PWM_Stop>
  11250. 8005428: e00c b.n 8005444 <Uart1ReceivedDataProcessCallback+0x43c>
  11251. } else if (fanTimerPeriod == -1) {
  11252. 800542a: 6d3b ldr r3, [r7, #80] @ 0x50
  11253. 800542c: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  11254. 8005430: d108 bne.n 8005444 <Uart1ReceivedDataProcessCallback+0x43c>
  11255. osTimerStop (fanTimerHandle);
  11256. 8005432: 4b8c ldr r3, [pc, #560] @ (8005664 <Uart1ReceivedDataProcessCallback+0x65c>)
  11257. 8005434: 681b ldr r3, [r3, #0]
  11258. 8005436: 4618 mov r0, r3
  11259. 8005438: f00e fa3a bl 80138b0 <osTimerStop>
  11260. HAL_TIM_PWM_Start (&htim1, TIM_CHANNEL_2);
  11261. 800543c: 2104 movs r1, #4
  11262. 800543e: 488b ldr r0, [pc, #556] @ (800566c <Uart1ReceivedDataProcessCallback+0x664>)
  11263. 8005440: f009 fff2 bl 800f428 <HAL_TIM_PWM_Start>
  11264. }
  11265. respStatus = spOK;
  11266. 8005444: 2300 movs r3, #0
  11267. 8005446: f887 308f strb.w r3, [r7, #143] @ 0x8f
  11268. break;
  11269. 800544a: e306 b.n 8005a5a <Uart1ReceivedDataProcessCallback+0xa52>
  11270. case spSetMotorXOn:
  11271. int32_t motorXPWMPulse = 0;
  11272. 800544c: 2300 movs r3, #0
  11273. 800544e: 64bb str r3, [r7, #72] @ 0x48
  11274. int32_t motorXTimerPeriod = 0;
  11275. 8005450: 2300 movs r3, #0
  11276. 8005452: 647b str r3, [r7, #68] @ 0x44
  11277. uint32_t motorXStatus = 0;
  11278. 8005454: 2300 movs r3, #0
  11279. 8005456: 65bb str r3, [r7, #88] @ 0x58
  11280. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, (uint32_t*)&motorXPWMPulse);
  11281. 8005458: 683b ldr r3, [r7, #0]
  11282. 800545a: 330c adds r3, #12
  11283. 800545c: f107 0248 add.w r2, r7, #72 @ 0x48
  11284. 8005460: f107 0154 add.w r1, r7, #84 @ 0x54
  11285. 8005464: 4618 mov r0, r3
  11286. 8005466: f7fe fa6b bl 8003940 <ReadWordFromBufer>
  11287. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, (uint32_t*)&motorXTimerPeriod);
  11288. 800546a: 683b ldr r3, [r7, #0]
  11289. 800546c: 330c adds r3, #12
  11290. 800546e: f107 0244 add.w r2, r7, #68 @ 0x44
  11291. 8005472: f107 0154 add.w r1, r7, #84 @ 0x54
  11292. 8005476: 4618 mov r0, r3
  11293. 8005478: f7fe fa62 bl 8003940 <ReadWordFromBufer>
  11294. if (osMutexAcquire (sensorsInfoMutex, osWaitForever) == osOK) {
  11295. 800547c: 4b7c ldr r3, [pc, #496] @ (8005670 <Uart1ReceivedDataProcessCallback+0x668>)
  11296. 800547e: 681b ldr r3, [r3, #0]
  11297. 8005480: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  11298. 8005484: 4618 mov r0, r3
  11299. 8005486: f00e fad0 bl 8013a2a <osMutexAcquire>
  11300. 800548a: 4603 mov r3, r0
  11301. 800548c: 2b00 cmp r3, #0
  11302. 800548e: d12a bne.n 80054e6 <Uart1ReceivedDataProcessCallback+0x4de>
  11303. motorXStatus =
  11304. MotorControl (&htim3, &motorXYTimerConfigOC, TIM_CHANNEL_1, TIM_CHANNEL_2, motorXTimerHandle, motorXPWMPulse, motorXTimerPeriod, sensorsInfo.limitXSwitchUp, sensorsInfo.limitXSwitchDown);
  11305. 8005490: 4b78 ldr r3, [pc, #480] @ (8005674 <Uart1ReceivedDataProcessCallback+0x66c>)
  11306. 8005492: 681b ldr r3, [r3, #0]
  11307. 8005494: 6cba ldr r2, [r7, #72] @ 0x48
  11308. 8005496: 6c79 ldr r1, [r7, #68] @ 0x44
  11309. 8005498: 4877 ldr r0, [pc, #476] @ (8005678 <Uart1ReceivedDataProcessCallback+0x670>)
  11310. 800549a: f890 0028 ldrb.w r0, [r0, #40] @ 0x28
  11311. 800549e: 4c76 ldr r4, [pc, #472] @ (8005678 <Uart1ReceivedDataProcessCallback+0x670>)
  11312. 80054a0: f894 4029 ldrb.w r4, [r4, #41] @ 0x29
  11313. 80054a4: 9404 str r4, [sp, #16]
  11314. 80054a6: 9003 str r0, [sp, #12]
  11315. 80054a8: 9102 str r1, [sp, #8]
  11316. 80054aa: 9201 str r2, [sp, #4]
  11317. 80054ac: 9300 str r3, [sp, #0]
  11318. 80054ae: 2304 movs r3, #4
  11319. 80054b0: 2200 movs r2, #0
  11320. 80054b2: 4972 ldr r1, [pc, #456] @ (800567c <Uart1ReceivedDataProcessCallback+0x674>)
  11321. 80054b4: 4872 ldr r0, [pc, #456] @ (8005680 <Uart1ReceivedDataProcessCallback+0x678>)
  11322. 80054b6: f7fd fcbf bl 8002e38 <MotorControl>
  11323. 80054ba: 4603 mov r3, r0
  11324. motorXStatus =
  11325. 80054bc: 65bb str r3, [r7, #88] @ 0x58
  11326. sensorsInfo.motorXStatus = motorXStatus;
  11327. 80054be: 6dbb ldr r3, [r7, #88] @ 0x58
  11328. 80054c0: b2da uxtb r2, r3
  11329. 80054c2: 4b6d ldr r3, [pc, #436] @ (8005678 <Uart1ReceivedDataProcessCallback+0x670>)
  11330. 80054c4: 751a strb r2, [r3, #20]
  11331. if (motorXStatus == 1) {
  11332. 80054c6: 6dbb ldr r3, [r7, #88] @ 0x58
  11333. 80054c8: 2b01 cmp r3, #1
  11334. 80054ca: d103 bne.n 80054d4 <Uart1ReceivedDataProcessCallback+0x4cc>
  11335. sensorsInfo.motorXPeakCurrent = 0.0;
  11336. 80054cc: 4b6a ldr r3, [pc, #424] @ (8005678 <Uart1ReceivedDataProcessCallback+0x670>)
  11337. 80054ce: f04f 0200 mov.w r2, #0
  11338. 80054d2: 621a str r2, [r3, #32]
  11339. }
  11340. osMutexRelease (sensorsInfoMutex);
  11341. 80054d4: 4b66 ldr r3, [pc, #408] @ (8005670 <Uart1ReceivedDataProcessCallback+0x668>)
  11342. 80054d6: 681b ldr r3, [r3, #0]
  11343. 80054d8: 4618 mov r0, r3
  11344. 80054da: f00e faf1 bl 8013ac0 <osMutexRelease>
  11345. respStatus = spOK;
  11346. 80054de: 2300 movs r3, #0
  11347. 80054e0: f887 308f strb.w r3, [r7, #143] @ 0x8f
  11348. } else {
  11349. respStatus = spInternalError;
  11350. }
  11351. break;
  11352. 80054e4: e2b9 b.n 8005a5a <Uart1ReceivedDataProcessCallback+0xa52>
  11353. respStatus = spInternalError;
  11354. 80054e6: 23fc movs r3, #252 @ 0xfc
  11355. 80054e8: f887 308f strb.w r3, [r7, #143] @ 0x8f
  11356. break;
  11357. 80054ec: e2b5 b.n 8005a5a <Uart1ReceivedDataProcessCallback+0xa52>
  11358. case spSetMotorYOn:
  11359. int32_t motorYPWMPulse = 0;
  11360. 80054ee: 2300 movs r3, #0
  11361. 80054f0: 643b str r3, [r7, #64] @ 0x40
  11362. int32_t motorYTimerPeriod = 0;
  11363. 80054f2: 2300 movs r3, #0
  11364. 80054f4: 63fb str r3, [r7, #60] @ 0x3c
  11365. uint32_t motorYStatus = 0;
  11366. 80054f6: 2300 movs r3, #0
  11367. 80054f8: 65fb str r3, [r7, #92] @ 0x5c
  11368. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, (uint32_t*)&motorYPWMPulse);
  11369. 80054fa: 683b ldr r3, [r7, #0]
  11370. 80054fc: 330c adds r3, #12
  11371. 80054fe: f107 0240 add.w r2, r7, #64 @ 0x40
  11372. 8005502: f107 0154 add.w r1, r7, #84 @ 0x54
  11373. 8005506: 4618 mov r0, r3
  11374. 8005508: f7fe fa1a bl 8003940 <ReadWordFromBufer>
  11375. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, (uint32_t*)&motorYTimerPeriod);
  11376. 800550c: 683b ldr r3, [r7, #0]
  11377. 800550e: 330c adds r3, #12
  11378. 8005510: f107 023c add.w r2, r7, #60 @ 0x3c
  11379. 8005514: f107 0154 add.w r1, r7, #84 @ 0x54
  11380. 8005518: 4618 mov r0, r3
  11381. 800551a: f7fe fa11 bl 8003940 <ReadWordFromBufer>
  11382. if (osMutexAcquire (sensorsInfoMutex, osWaitForever) == osOK) {
  11383. 800551e: 4b54 ldr r3, [pc, #336] @ (8005670 <Uart1ReceivedDataProcessCallback+0x668>)
  11384. 8005520: 681b ldr r3, [r3, #0]
  11385. 8005522: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  11386. 8005526: 4618 mov r0, r3
  11387. 8005528: f00e fa7f bl 8013a2a <osMutexAcquire>
  11388. 800552c: 4603 mov r3, r0
  11389. 800552e: 2b00 cmp r3, #0
  11390. 8005530: d12a bne.n 8005588 <Uart1ReceivedDataProcessCallback+0x580>
  11391. motorYStatus =
  11392. MotorControl (&htim3, &motorXYTimerConfigOC, TIM_CHANNEL_3, TIM_CHANNEL_4, motorYTimerHandle, motorYPWMPulse, motorYTimerPeriod, sensorsInfo.limitYSwitchUp, sensorsInfo.limitYSwitchDown);
  11393. 8005532: 4b54 ldr r3, [pc, #336] @ (8005684 <Uart1ReceivedDataProcessCallback+0x67c>)
  11394. 8005534: 681b ldr r3, [r3, #0]
  11395. 8005536: 6c3a ldr r2, [r7, #64] @ 0x40
  11396. 8005538: 6bf9 ldr r1, [r7, #60] @ 0x3c
  11397. 800553a: 484f ldr r0, [pc, #316] @ (8005678 <Uart1ReceivedDataProcessCallback+0x670>)
  11398. 800553c: f890 002b ldrb.w r0, [r0, #43] @ 0x2b
  11399. 8005540: 4c4d ldr r4, [pc, #308] @ (8005678 <Uart1ReceivedDataProcessCallback+0x670>)
  11400. 8005542: f894 402c ldrb.w r4, [r4, #44] @ 0x2c
  11401. 8005546: 9404 str r4, [sp, #16]
  11402. 8005548: 9003 str r0, [sp, #12]
  11403. 800554a: 9102 str r1, [sp, #8]
  11404. 800554c: 9201 str r2, [sp, #4]
  11405. 800554e: 9300 str r3, [sp, #0]
  11406. 8005550: 230c movs r3, #12
  11407. 8005552: 2208 movs r2, #8
  11408. 8005554: 4949 ldr r1, [pc, #292] @ (800567c <Uart1ReceivedDataProcessCallback+0x674>)
  11409. 8005556: 484a ldr r0, [pc, #296] @ (8005680 <Uart1ReceivedDataProcessCallback+0x678>)
  11410. 8005558: f7fd fc6e bl 8002e38 <MotorControl>
  11411. 800555c: 4603 mov r3, r0
  11412. motorYStatus =
  11413. 800555e: 65fb str r3, [r7, #92] @ 0x5c
  11414. sensorsInfo.motorYStatus = motorYStatus;
  11415. 8005560: 6dfb ldr r3, [r7, #92] @ 0x5c
  11416. 8005562: b2da uxtb r2, r3
  11417. 8005564: 4b44 ldr r3, [pc, #272] @ (8005678 <Uart1ReceivedDataProcessCallback+0x670>)
  11418. 8005566: 755a strb r2, [r3, #21]
  11419. if (motorYStatus == 1) {
  11420. 8005568: 6dfb ldr r3, [r7, #92] @ 0x5c
  11421. 800556a: 2b01 cmp r3, #1
  11422. 800556c: d103 bne.n 8005576 <Uart1ReceivedDataProcessCallback+0x56e>
  11423. sensorsInfo.motorYPeakCurrent = 0.0;
  11424. 800556e: 4b42 ldr r3, [pc, #264] @ (8005678 <Uart1ReceivedDataProcessCallback+0x670>)
  11425. 8005570: f04f 0200 mov.w r2, #0
  11426. 8005574: 625a str r2, [r3, #36] @ 0x24
  11427. }
  11428. osMutexRelease (sensorsInfoMutex);
  11429. 8005576: 4b3e ldr r3, [pc, #248] @ (8005670 <Uart1ReceivedDataProcessCallback+0x668>)
  11430. 8005578: 681b ldr r3, [r3, #0]
  11431. 800557a: 4618 mov r0, r3
  11432. 800557c: f00e faa0 bl 8013ac0 <osMutexRelease>
  11433. respStatus = spOK;
  11434. 8005580: 2300 movs r3, #0
  11435. 8005582: f887 308f strb.w r3, [r7, #143] @ 0x8f
  11436. } else {
  11437. respStatus = spInternalError;
  11438. }
  11439. break;
  11440. 8005586: e268 b.n 8005a5a <Uart1ReceivedDataProcessCallback+0xa52>
  11441. respStatus = spInternalError;
  11442. 8005588: 23fc movs r3, #252 @ 0xfc
  11443. 800558a: f887 308f strb.w r3, [r7, #143] @ 0x8f
  11444. break;
  11445. 800558e: e264 b.n 8005a5a <Uart1ReceivedDataProcessCallback+0xa52>
  11446. case spSetDiodeOn:
  11447. osTimerStop (debugLedTimerHandle);
  11448. 8005590: 4b3d ldr r3, [pc, #244] @ (8005688 <Uart1ReceivedDataProcessCallback+0x680>)
  11449. 8005592: 681b ldr r3, [r3, #0]
  11450. 8005594: 4618 mov r0, r3
  11451. 8005596: f00e f98b bl 80138b0 <osTimerStop>
  11452. int32_t dbgLedTimerPeriod = 0;
  11453. 800559a: 2300 movs r3, #0
  11454. 800559c: 63bb str r3, [r7, #56] @ 0x38
  11455. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, (uint32_t*)&dbgLedTimerPeriod);
  11456. 800559e: 683b ldr r3, [r7, #0]
  11457. 80055a0: 330c adds r3, #12
  11458. 80055a2: f107 0238 add.w r2, r7, #56 @ 0x38
  11459. 80055a6: f107 0154 add.w r1, r7, #84 @ 0x54
  11460. 80055aa: 4618 mov r0, r3
  11461. 80055ac: f7fe f9c8 bl 8003940 <ReadWordFromBufer>
  11462. if (dbgLedTimerPeriod > 0) {
  11463. 80055b0: 6bbb ldr r3, [r7, #56] @ 0x38
  11464. 80055b2: 2b00 cmp r3, #0
  11465. 80055b4: dd0e ble.n 80055d4 <Uart1ReceivedDataProcessCallback+0x5cc>
  11466. osTimerStart (debugLedTimerHandle, dbgLedTimerPeriod * 1000);
  11467. 80055b6: 4b34 ldr r3, [pc, #208] @ (8005688 <Uart1ReceivedDataProcessCallback+0x680>)
  11468. 80055b8: 681a ldr r2, [r3, #0]
  11469. 80055ba: 6bbb ldr r3, [r7, #56] @ 0x38
  11470. 80055bc: f44f 717a mov.w r1, #1000 @ 0x3e8
  11471. 80055c0: fb01 f303 mul.w r3, r1, r3
  11472. 80055c4: 4619 mov r1, r3
  11473. 80055c6: 4610 mov r0, r2
  11474. 80055c8: f00e f944 bl 8013854 <osTimerStart>
  11475. DbgLEDOn (DBG_LED1);
  11476. 80055cc: 2010 movs r0, #16
  11477. 80055ce: f7fd fba5 bl 8002d1c <DbgLEDOn>
  11478. 80055d2: e017 b.n 8005604 <Uart1ReceivedDataProcessCallback+0x5fc>
  11479. } else if (dbgLedTimerPeriod == 0) {
  11480. 80055d4: 6bbb ldr r3, [r7, #56] @ 0x38
  11481. 80055d6: 2b00 cmp r3, #0
  11482. 80055d8: d108 bne.n 80055ec <Uart1ReceivedDataProcessCallback+0x5e4>
  11483. osTimerStop (debugLedTimerHandle);
  11484. 80055da: 4b2b ldr r3, [pc, #172] @ (8005688 <Uart1ReceivedDataProcessCallback+0x680>)
  11485. 80055dc: 681b ldr r3, [r3, #0]
  11486. 80055de: 4618 mov r0, r3
  11487. 80055e0: f00e f966 bl 80138b0 <osTimerStop>
  11488. DbgLEDOff (DBG_LED1);
  11489. 80055e4: 2010 movs r0, #16
  11490. 80055e6: f7fd fbab bl 8002d40 <DbgLEDOff>
  11491. 80055ea: e00b b.n 8005604 <Uart1ReceivedDataProcessCallback+0x5fc>
  11492. } else if (dbgLedTimerPeriod == -1) {
  11493. 80055ec: 6bbb ldr r3, [r7, #56] @ 0x38
  11494. 80055ee: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  11495. 80055f2: d107 bne.n 8005604 <Uart1ReceivedDataProcessCallback+0x5fc>
  11496. osTimerStop (debugLedTimerHandle);
  11497. 80055f4: 4b24 ldr r3, [pc, #144] @ (8005688 <Uart1ReceivedDataProcessCallback+0x680>)
  11498. 80055f6: 681b ldr r3, [r3, #0]
  11499. 80055f8: 4618 mov r0, r3
  11500. 80055fa: f00e f959 bl 80138b0 <osTimerStop>
  11501. DbgLEDOn (DBG_LED1);
  11502. 80055fe: 2010 movs r0, #16
  11503. 8005600: f7fd fb8c bl 8002d1c <DbgLEDOn>
  11504. }
  11505. respStatus = spOK;
  11506. 8005604: 2300 movs r3, #0
  11507. 8005606: f887 308f strb.w r3, [r7, #143] @ 0x8f
  11508. break;
  11509. 800560a: e226 b.n 8005a5a <Uart1ReceivedDataProcessCallback+0xa52>
  11510. case spSetmotorXMaxCurrent:
  11511. float motorXMaxCurrent = 0;
  11512. 800560c: f04f 0300 mov.w r3, #0
  11513. 8005610: 637b str r3, [r7, #52] @ 0x34
  11514. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, (uint32_t*)&motorXMaxCurrent);
  11515. 8005612: 683b ldr r3, [r7, #0]
  11516. 8005614: 330c adds r3, #12
  11517. 8005616: f107 0234 add.w r2, r7, #52 @ 0x34
  11518. 800561a: f107 0154 add.w r1, r7, #84 @ 0x54
  11519. 800561e: 4618 mov r0, r3
  11520. 8005620: f7fe f98e bl 8003940 <ReadWordFromBufer>
  11521. uint32_t dacDataCh1 = (uint32_t)(4095 * motorXMaxCurrent / (EXT_VREF_mV * 0.001));
  11522. 8005624: edd7 7a0d vldr s15, [r7, #52] @ 0x34
  11523. 8005628: ed9f 7a19 vldr s14, [pc, #100] @ 8005690 <Uart1ReceivedDataProcessCallback+0x688>
  11524. 800562c: ee67 7a87 vmul.f32 s15, s15, s14
  11525. 8005630: eeb7 6ae7 vcvt.f64.f32 d6, s15
  11526. 8005634: eeb0 5b08 vmov.f64 d5, #8 @ 0x40400000 3.0
  11527. 8005638: ee86 7b05 vdiv.f64 d7, d6, d5
  11528. 800563c: eefc 7bc7 vcvt.u32.f64 s15, d7
  11529. 8005640: ee17 3a90 vmov r3, s15
  11530. 8005644: 663b str r3, [r7, #96] @ 0x60
  11531. HAL_DAC_SetValue (&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, dacDataCh1);
  11532. 8005646: 6e3b ldr r3, [r7, #96] @ 0x60
  11533. 8005648: 2200 movs r2, #0
  11534. 800564a: 2100 movs r1, #0
  11535. 800564c: 480f ldr r0, [pc, #60] @ (800568c <Uart1ReceivedDataProcessCallback+0x684>)
  11536. 800564e: f002 fcca bl 8007fe6 <HAL_DAC_SetValue>
  11537. HAL_DAC_Start (&hdac1, DAC_CHANNEL_1);
  11538. 8005652: 2100 movs r1, #0
  11539. 8005654: 480d ldr r0, [pc, #52] @ (800568c <Uart1ReceivedDataProcessCallback+0x684>)
  11540. 8005656: f002 fc19 bl 8007e8c <HAL_DAC_Start>
  11541. respStatus = spOK;
  11542. 800565a: 2300 movs r3, #0
  11543. 800565c: f887 308f strb.w r3, [r7, #143] @ 0x8f
  11544. break;
  11545. 8005660: e1fb b.n 8005a5a <Uart1ReceivedDataProcessCallback+0xa52>
  11546. 8005662: bf00 nop
  11547. 8005664: 2400068c .word 0x2400068c
  11548. 8005668: 2400071c .word 0x2400071c
  11549. 800566c: 2400044c .word 0x2400044c
  11550. 8005670: 24000790 .word 0x24000790
  11551. 8005674: 240006bc .word 0x240006bc
  11552. 8005678: 240007e0 .word 0x240007e0
  11553. 800567c: 24000738 .word 0x24000738
  11554. 8005680: 24000498 .word 0x24000498
  11555. 8005684: 240006ec .word 0x240006ec
  11556. 8005688: 2400065c .word 0x2400065c
  11557. 800568c: 24000424 .word 0x24000424
  11558. 8005690: 457ff000 .word 0x457ff000
  11559. case spSetmotorYMaxCurrent:
  11560. float motorYMaxCurrent = 0;
  11561. 8005694: f04f 0300 mov.w r3, #0
  11562. 8005698: 633b str r3, [r7, #48] @ 0x30
  11563. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, (uint32_t*)&motorYMaxCurrent);
  11564. 800569a: 683b ldr r3, [r7, #0]
  11565. 800569c: 330c adds r3, #12
  11566. 800569e: f107 0230 add.w r2, r7, #48 @ 0x30
  11567. 80056a2: f107 0154 add.w r1, r7, #84 @ 0x54
  11568. 80056a6: 4618 mov r0, r3
  11569. 80056a8: f7fe f94a bl 8003940 <ReadWordFromBufer>
  11570. uint32_t dacDataCh2 = (uint32_t)(4095 * motorYMaxCurrent / (EXT_VREF_mV * 0.001));
  11571. 80056ac: edd7 7a0c vldr s15, [r7, #48] @ 0x30
  11572. 80056b0: ed1f 7a09 vldr s14, [pc, #-36] @ 8005690 <Uart1ReceivedDataProcessCallback+0x688>
  11573. 80056b4: ee67 7a87 vmul.f32 s15, s15, s14
  11574. 80056b8: eeb7 6ae7 vcvt.f64.f32 d6, s15
  11575. 80056bc: eeb0 5b08 vmov.f64 d5, #8 @ 0x40400000 3.0
  11576. 80056c0: ee86 7b05 vdiv.f64 d7, d6, d5
  11577. 80056c4: eefc 7bc7 vcvt.u32.f64 s15, d7
  11578. 80056c8: ee17 3a90 vmov r3, s15
  11579. 80056cc: 667b str r3, [r7, #100] @ 0x64
  11580. HAL_DAC_SetValue (&hdac1, DAC_CHANNEL_2, DAC_ALIGN_12B_R, dacDataCh2);
  11581. 80056ce: 6e7b ldr r3, [r7, #100] @ 0x64
  11582. 80056d0: 2200 movs r2, #0
  11583. 80056d2: 2110 movs r1, #16
  11584. 80056d4: 48ac ldr r0, [pc, #688] @ (8005988 <Uart1ReceivedDataProcessCallback+0x980>)
  11585. 80056d6: f002 fc86 bl 8007fe6 <HAL_DAC_SetValue>
  11586. HAL_DAC_Start (&hdac1, DAC_CHANNEL_2);
  11587. 80056da: 2110 movs r1, #16
  11588. 80056dc: 48aa ldr r0, [pc, #680] @ (8005988 <Uart1ReceivedDataProcessCallback+0x980>)
  11589. 80056de: f002 fbd5 bl 8007e8c <HAL_DAC_Start>
  11590. respStatus = spOK;
  11591. 80056e2: 2300 movs r3, #0
  11592. 80056e4: f887 308f strb.w r3, [r7, #143] @ 0x8f
  11593. break;
  11594. 80056e8: e1b7 b.n 8005a5a <Uart1ReceivedDataProcessCallback+0xa52>
  11595. case spClearPeakMeasurments:
  11596. if (osMutexAcquire (resMeasurementsMutex, osWaitForever) == osOK) {
  11597. 80056ea: 4ba8 ldr r3, [pc, #672] @ (800598c <Uart1ReceivedDataProcessCallback+0x984>)
  11598. 80056ec: 681b ldr r3, [r3, #0]
  11599. 80056ee: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  11600. 80056f2: 4618 mov r0, r3
  11601. 80056f4: f00e f999 bl 8013a2a <osMutexAcquire>
  11602. 80056f8: 4603 mov r3, r0
  11603. 80056fa: 2b00 cmp r3, #0
  11604. 80056fc: d12a bne.n 8005754 <Uart1ReceivedDataProcessCallback+0x74c>
  11605. for (int i = 0; i < 3; i++) {
  11606. 80056fe: 2300 movs r3, #0
  11607. 8005700: 677b str r3, [r7, #116] @ 0x74
  11608. 8005702: e01b b.n 800573c <Uart1ReceivedDataProcessCallback+0x734>
  11609. resMeasurements.voltagePeak[i] = resMeasurements.voltageRMS[i];
  11610. 8005704: 4aa2 ldr r2, [pc, #648] @ (8005990 <Uart1ReceivedDataProcessCallback+0x988>)
  11611. 8005706: 6f7b ldr r3, [r7, #116] @ 0x74
  11612. 8005708: 009b lsls r3, r3, #2
  11613. 800570a: 4413 add r3, r2
  11614. 800570c: 681a ldr r2, [r3, #0]
  11615. 800570e: 49a0 ldr r1, [pc, #640] @ (8005990 <Uart1ReceivedDataProcessCallback+0x988>)
  11616. 8005710: 6f7b ldr r3, [r7, #116] @ 0x74
  11617. 8005712: 3302 adds r3, #2
  11618. 8005714: 009b lsls r3, r3, #2
  11619. 8005716: 440b add r3, r1
  11620. 8005718: 3304 adds r3, #4
  11621. 800571a: 601a str r2, [r3, #0]
  11622. resMeasurements.currentPeak[i] = resMeasurements.currentRMS[i];
  11623. 800571c: 4a9c ldr r2, [pc, #624] @ (8005990 <Uart1ReceivedDataProcessCallback+0x988>)
  11624. 800571e: 6f7b ldr r3, [r7, #116] @ 0x74
  11625. 8005720: 3306 adds r3, #6
  11626. 8005722: 009b lsls r3, r3, #2
  11627. 8005724: 4413 add r3, r2
  11628. 8005726: 681a ldr r2, [r3, #0]
  11629. 8005728: 4999 ldr r1, [pc, #612] @ (8005990 <Uart1ReceivedDataProcessCallback+0x988>)
  11630. 800572a: 6f7b ldr r3, [r7, #116] @ 0x74
  11631. 800572c: 3308 adds r3, #8
  11632. 800572e: 009b lsls r3, r3, #2
  11633. 8005730: 440b add r3, r1
  11634. 8005732: 3304 adds r3, #4
  11635. 8005734: 601a str r2, [r3, #0]
  11636. for (int i = 0; i < 3; i++) {
  11637. 8005736: 6f7b ldr r3, [r7, #116] @ 0x74
  11638. 8005738: 3301 adds r3, #1
  11639. 800573a: 677b str r3, [r7, #116] @ 0x74
  11640. 800573c: 6f7b ldr r3, [r7, #116] @ 0x74
  11641. 800573e: 2b02 cmp r3, #2
  11642. 8005740: dde0 ble.n 8005704 <Uart1ReceivedDataProcessCallback+0x6fc>
  11643. }
  11644. osMutexRelease (resMeasurementsMutex);
  11645. 8005742: 4b92 ldr r3, [pc, #584] @ (800598c <Uart1ReceivedDataProcessCallback+0x984>)
  11646. 8005744: 681b ldr r3, [r3, #0]
  11647. 8005746: 4618 mov r0, r3
  11648. 8005748: f00e f9ba bl 8013ac0 <osMutexRelease>
  11649. respStatus = spOK;
  11650. 800574c: 2300 movs r3, #0
  11651. 800574e: f887 308f strb.w r3, [r7, #143] @ 0x8f
  11652. } else {
  11653. respStatus = spInternalError;
  11654. }
  11655. break;
  11656. 8005752: e182 b.n 8005a5a <Uart1ReceivedDataProcessCallback+0xa52>
  11657. respStatus = spInternalError;
  11658. 8005754: 23fc movs r3, #252 @ 0xfc
  11659. 8005756: f887 308f strb.w r3, [r7, #143] @ 0x8f
  11660. break;
  11661. 800575a: e17e b.n 8005a5a <Uart1ReceivedDataProcessCallback+0xa52>
  11662. case spSetEncoderXValue:
  11663. float enocoderXValue = 0;
  11664. 800575c: f04f 0300 mov.w r3, #0
  11665. 8005760: 62fb str r3, [r7, #44] @ 0x2c
  11666. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, (uint32_t*)&enocoderXValue);
  11667. 8005762: 683b ldr r3, [r7, #0]
  11668. 8005764: 330c adds r3, #12
  11669. 8005766: f107 022c add.w r2, r7, #44 @ 0x2c
  11670. 800576a: f107 0154 add.w r1, r7, #84 @ 0x54
  11671. 800576e: 4618 mov r0, r3
  11672. 8005770: f7fe f8e6 bl 8003940 <ReadWordFromBufer>
  11673. if (osMutexAcquire (sensorsInfoMutex, osWaitForever) == osOK) {
  11674. 8005774: 4b87 ldr r3, [pc, #540] @ (8005994 <Uart1ReceivedDataProcessCallback+0x98c>)
  11675. 8005776: 681b ldr r3, [r3, #0]
  11676. 8005778: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  11677. 800577c: 4618 mov r0, r3
  11678. 800577e: f00e f954 bl 8013a2a <osMutexAcquire>
  11679. 8005782: 4603 mov r3, r0
  11680. 8005784: 2b00 cmp r3, #0
  11681. 8005786: d10b bne.n 80057a0 <Uart1ReceivedDataProcessCallback+0x798>
  11682. sensorsInfo.pvEncoderX = enocoderXValue;
  11683. 8005788: 6afb ldr r3, [r7, #44] @ 0x2c
  11684. 800578a: 4a83 ldr r2, [pc, #524] @ (8005998 <Uart1ReceivedDataProcessCallback+0x990>)
  11685. 800578c: 60d3 str r3, [r2, #12]
  11686. osMutexRelease (sensorsInfoMutex);
  11687. 800578e: 4b81 ldr r3, [pc, #516] @ (8005994 <Uart1ReceivedDataProcessCallback+0x98c>)
  11688. 8005790: 681b ldr r3, [r3, #0]
  11689. 8005792: 4618 mov r0, r3
  11690. 8005794: f00e f994 bl 8013ac0 <osMutexRelease>
  11691. respStatus = spOK;
  11692. 8005798: 2300 movs r3, #0
  11693. 800579a: f887 308f strb.w r3, [r7, #143] @ 0x8f
  11694. } else {
  11695. respStatus = spInternalError;
  11696. }
  11697. break;
  11698. 800579e: e15c b.n 8005a5a <Uart1ReceivedDataProcessCallback+0xa52>
  11699. respStatus = spInternalError;
  11700. 80057a0: 23fc movs r3, #252 @ 0xfc
  11701. 80057a2: f887 308f strb.w r3, [r7, #143] @ 0x8f
  11702. break;
  11703. 80057a6: e158 b.n 8005a5a <Uart1ReceivedDataProcessCallback+0xa52>
  11704. case spSetEncoderYValue:
  11705. float enocoderYValue = 0;
  11706. 80057a8: f04f 0300 mov.w r3, #0
  11707. 80057ac: 62bb str r3, [r7, #40] @ 0x28
  11708. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, (uint32_t*)&enocoderYValue);
  11709. 80057ae: 683b ldr r3, [r7, #0]
  11710. 80057b0: 330c adds r3, #12
  11711. 80057b2: f107 0228 add.w r2, r7, #40 @ 0x28
  11712. 80057b6: f107 0154 add.w r1, r7, #84 @ 0x54
  11713. 80057ba: 4618 mov r0, r3
  11714. 80057bc: f7fe f8c0 bl 8003940 <ReadWordFromBufer>
  11715. if (osMutexAcquire (sensorsInfoMutex, osWaitForever) == osOK) {
  11716. 80057c0: 4b74 ldr r3, [pc, #464] @ (8005994 <Uart1ReceivedDataProcessCallback+0x98c>)
  11717. 80057c2: 681b ldr r3, [r3, #0]
  11718. 80057c4: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  11719. 80057c8: 4618 mov r0, r3
  11720. 80057ca: f00e f92e bl 8013a2a <osMutexAcquire>
  11721. 80057ce: 4603 mov r3, r0
  11722. 80057d0: 2b00 cmp r3, #0
  11723. 80057d2: d10b bne.n 80057ec <Uart1ReceivedDataProcessCallback+0x7e4>
  11724. sensorsInfo.pvEncoderY = enocoderYValue;
  11725. 80057d4: 6abb ldr r3, [r7, #40] @ 0x28
  11726. 80057d6: 4a70 ldr r2, [pc, #448] @ (8005998 <Uart1ReceivedDataProcessCallback+0x990>)
  11727. 80057d8: 6113 str r3, [r2, #16]
  11728. osMutexRelease (sensorsInfoMutex);
  11729. 80057da: 4b6e ldr r3, [pc, #440] @ (8005994 <Uart1ReceivedDataProcessCallback+0x98c>)
  11730. 80057dc: 681b ldr r3, [r3, #0]
  11731. 80057de: 4618 mov r0, r3
  11732. 80057e0: f00e f96e bl 8013ac0 <osMutexRelease>
  11733. respStatus = spOK;
  11734. 80057e4: 2300 movs r3, #0
  11735. 80057e6: f887 308f strb.w r3, [r7, #143] @ 0x8f
  11736. } else {
  11737. respStatus = spInternalError;
  11738. }
  11739. break;
  11740. 80057ea: e136 b.n 8005a5a <Uart1ReceivedDataProcessCallback+0xa52>
  11741. respStatus = spInternalError;
  11742. 80057ec: 23fc movs r3, #252 @ 0xfc
  11743. 80057ee: f887 308f strb.w r3, [r7, #143] @ 0x8f
  11744. break;
  11745. 80057f2: e132 b.n 8005a5a <Uart1ReceivedDataProcessCallback+0xa52>
  11746. case spSetVoltageMeasGains:
  11747. if (osMutexAcquire (resMeasurementsMutex, osWaitForever) == osOK) {
  11748. 80057f4: 4b65 ldr r3, [pc, #404] @ (800598c <Uart1ReceivedDataProcessCallback+0x984>)
  11749. 80057f6: 681b ldr r3, [r3, #0]
  11750. 80057f8: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  11751. 80057fc: 4618 mov r0, r3
  11752. 80057fe: f00e f914 bl 8013a2a <osMutexAcquire>
  11753. 8005802: 4603 mov r3, r0
  11754. 8005804: 2b00 cmp r3, #0
  11755. 8005806: d122 bne.n 800584e <Uart1ReceivedDataProcessCallback+0x846>
  11756. for (uint8_t i = 0; i < 3; i++) {
  11757. 8005808: 2300 movs r3, #0
  11758. 800580a: f887 3073 strb.w r3, [r7, #115] @ 0x73
  11759. 800580e: e011 b.n 8005834 <Uart1ReceivedDataProcessCallback+0x82c>
  11760. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, (uint32_t*)&U_MeasCorrectionData[i].gain);
  11761. 8005810: 683b ldr r3, [r7, #0]
  11762. 8005812: f103 000c add.w r0, r3, #12
  11763. 8005816: f897 3073 ldrb.w r3, [r7, #115] @ 0x73
  11764. 800581a: 00db lsls r3, r3, #3
  11765. 800581c: 4a5f ldr r2, [pc, #380] @ (800599c <Uart1ReceivedDataProcessCallback+0x994>)
  11766. 800581e: 441a add r2, r3
  11767. 8005820: f107 0354 add.w r3, r7, #84 @ 0x54
  11768. 8005824: 4619 mov r1, r3
  11769. 8005826: f7fe f88b bl 8003940 <ReadWordFromBufer>
  11770. for (uint8_t i = 0; i < 3; i++) {
  11771. 800582a: f897 3073 ldrb.w r3, [r7, #115] @ 0x73
  11772. 800582e: 3301 adds r3, #1
  11773. 8005830: f887 3073 strb.w r3, [r7, #115] @ 0x73
  11774. 8005834: f897 3073 ldrb.w r3, [r7, #115] @ 0x73
  11775. 8005838: 2b02 cmp r3, #2
  11776. 800583a: d9e9 bls.n 8005810 <Uart1ReceivedDataProcessCallback+0x808>
  11777. }
  11778. osMutexRelease (resMeasurementsMutex);
  11779. 800583c: 4b53 ldr r3, [pc, #332] @ (800598c <Uart1ReceivedDataProcessCallback+0x984>)
  11780. 800583e: 681b ldr r3, [r3, #0]
  11781. 8005840: 4618 mov r0, r3
  11782. 8005842: f00e f93d bl 8013ac0 <osMutexRelease>
  11783. respStatus = spOK;
  11784. 8005846: 2300 movs r3, #0
  11785. 8005848: f887 308f strb.w r3, [r7, #143] @ 0x8f
  11786. } else {
  11787. respStatus = spInternalError;
  11788. }
  11789. break;
  11790. 800584c: e105 b.n 8005a5a <Uart1ReceivedDataProcessCallback+0xa52>
  11791. respStatus = spInternalError;
  11792. 800584e: 23fc movs r3, #252 @ 0xfc
  11793. 8005850: f887 308f strb.w r3, [r7, #143] @ 0x8f
  11794. break;
  11795. 8005854: e101 b.n 8005a5a <Uart1ReceivedDataProcessCallback+0xa52>
  11796. case spSetVoltageMeasOffsets:
  11797. if (osMutexAcquire (resMeasurementsMutex, osWaitForever) == osOK) {
  11798. 8005856: 4b4d ldr r3, [pc, #308] @ (800598c <Uart1ReceivedDataProcessCallback+0x984>)
  11799. 8005858: 681b ldr r3, [r3, #0]
  11800. 800585a: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  11801. 800585e: 4618 mov r0, r3
  11802. 8005860: f00e f8e3 bl 8013a2a <osMutexAcquire>
  11803. 8005864: 4603 mov r3, r0
  11804. 8005866: 2b00 cmp r3, #0
  11805. 8005868: d123 bne.n 80058b2 <Uart1ReceivedDataProcessCallback+0x8aa>
  11806. for (uint8_t i = 0; i < 3; i++) {
  11807. 800586a: 2300 movs r3, #0
  11808. 800586c: f887 3072 strb.w r3, [r7, #114] @ 0x72
  11809. 8005870: e012 b.n 8005898 <Uart1ReceivedDataProcessCallback+0x890>
  11810. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, (uint32_t*)&U_MeasCorrectionData[i].offset);
  11811. 8005872: 683b ldr r3, [r7, #0]
  11812. 8005874: f103 000c add.w r0, r3, #12
  11813. 8005878: f897 3072 ldrb.w r3, [r7, #114] @ 0x72
  11814. 800587c: 00db lsls r3, r3, #3
  11815. 800587e: 4a47 ldr r2, [pc, #284] @ (800599c <Uart1ReceivedDataProcessCallback+0x994>)
  11816. 8005880: 4413 add r3, r2
  11817. 8005882: 1d1a adds r2, r3, #4
  11818. 8005884: f107 0354 add.w r3, r7, #84 @ 0x54
  11819. 8005888: 4619 mov r1, r3
  11820. 800588a: f7fe f859 bl 8003940 <ReadWordFromBufer>
  11821. for (uint8_t i = 0; i < 3; i++) {
  11822. 800588e: f897 3072 ldrb.w r3, [r7, #114] @ 0x72
  11823. 8005892: 3301 adds r3, #1
  11824. 8005894: f887 3072 strb.w r3, [r7, #114] @ 0x72
  11825. 8005898: f897 3072 ldrb.w r3, [r7, #114] @ 0x72
  11826. 800589c: 2b02 cmp r3, #2
  11827. 800589e: d9e8 bls.n 8005872 <Uart1ReceivedDataProcessCallback+0x86a>
  11828. }
  11829. osMutexRelease (resMeasurementsMutex);
  11830. 80058a0: 4b3a ldr r3, [pc, #232] @ (800598c <Uart1ReceivedDataProcessCallback+0x984>)
  11831. 80058a2: 681b ldr r3, [r3, #0]
  11832. 80058a4: 4618 mov r0, r3
  11833. 80058a6: f00e f90b bl 8013ac0 <osMutexRelease>
  11834. respStatus = spOK;
  11835. 80058aa: 2300 movs r3, #0
  11836. 80058ac: f887 308f strb.w r3, [r7, #143] @ 0x8f
  11837. } else {
  11838. respStatus = spInternalError;
  11839. }
  11840. break;
  11841. 80058b0: e0d3 b.n 8005a5a <Uart1ReceivedDataProcessCallback+0xa52>
  11842. respStatus = spInternalError;
  11843. 80058b2: 23fc movs r3, #252 @ 0xfc
  11844. 80058b4: f887 308f strb.w r3, [r7, #143] @ 0x8f
  11845. break;
  11846. 80058b8: e0cf b.n 8005a5a <Uart1ReceivedDataProcessCallback+0xa52>
  11847. case spSetCurrentMeasGains:
  11848. if (osMutexAcquire (resMeasurementsMutex, osWaitForever) == osOK) {
  11849. 80058ba: 4b34 ldr r3, [pc, #208] @ (800598c <Uart1ReceivedDataProcessCallback+0x984>)
  11850. 80058bc: 681b ldr r3, [r3, #0]
  11851. 80058be: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  11852. 80058c2: 4618 mov r0, r3
  11853. 80058c4: f00e f8b1 bl 8013a2a <osMutexAcquire>
  11854. 80058c8: 4603 mov r3, r0
  11855. 80058ca: 2b00 cmp r3, #0
  11856. 80058cc: d122 bne.n 8005914 <Uart1ReceivedDataProcessCallback+0x90c>
  11857. for (uint8_t i = 0; i < 3; i++) {
  11858. 80058ce: 2300 movs r3, #0
  11859. 80058d0: f887 3071 strb.w r3, [r7, #113] @ 0x71
  11860. 80058d4: e011 b.n 80058fa <Uart1ReceivedDataProcessCallback+0x8f2>
  11861. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, (uint32_t*)&I_MeasCorrectionData[i].gain);
  11862. 80058d6: 683b ldr r3, [r7, #0]
  11863. 80058d8: f103 000c add.w r0, r3, #12
  11864. 80058dc: f897 3071 ldrb.w r3, [r7, #113] @ 0x71
  11865. 80058e0: 00db lsls r3, r3, #3
  11866. 80058e2: 4a2f ldr r2, [pc, #188] @ (80059a0 <Uart1ReceivedDataProcessCallback+0x998>)
  11867. 80058e4: 441a add r2, r3
  11868. 80058e6: f107 0354 add.w r3, r7, #84 @ 0x54
  11869. 80058ea: 4619 mov r1, r3
  11870. 80058ec: f7fe f828 bl 8003940 <ReadWordFromBufer>
  11871. for (uint8_t i = 0; i < 3; i++) {
  11872. 80058f0: f897 3071 ldrb.w r3, [r7, #113] @ 0x71
  11873. 80058f4: 3301 adds r3, #1
  11874. 80058f6: f887 3071 strb.w r3, [r7, #113] @ 0x71
  11875. 80058fa: f897 3071 ldrb.w r3, [r7, #113] @ 0x71
  11876. 80058fe: 2b02 cmp r3, #2
  11877. 8005900: d9e9 bls.n 80058d6 <Uart1ReceivedDataProcessCallback+0x8ce>
  11878. }
  11879. osMutexRelease (resMeasurementsMutex);
  11880. 8005902: 4b22 ldr r3, [pc, #136] @ (800598c <Uart1ReceivedDataProcessCallback+0x984>)
  11881. 8005904: 681b ldr r3, [r3, #0]
  11882. 8005906: 4618 mov r0, r3
  11883. 8005908: f00e f8da bl 8013ac0 <osMutexRelease>
  11884. respStatus = spOK;
  11885. 800590c: 2300 movs r3, #0
  11886. 800590e: f887 308f strb.w r3, [r7, #143] @ 0x8f
  11887. } else {
  11888. respStatus = spInternalError;
  11889. }
  11890. break;
  11891. 8005912: e0a2 b.n 8005a5a <Uart1ReceivedDataProcessCallback+0xa52>
  11892. respStatus = spInternalError;
  11893. 8005914: 23fc movs r3, #252 @ 0xfc
  11894. 8005916: f887 308f strb.w r3, [r7, #143] @ 0x8f
  11895. break;
  11896. 800591a: e09e b.n 8005a5a <Uart1ReceivedDataProcessCallback+0xa52>
  11897. case spSetCurrentMeasOffsets:
  11898. if (osMutexAcquire (resMeasurementsMutex, osWaitForever) == osOK) {
  11899. 800591c: 4b1b ldr r3, [pc, #108] @ (800598c <Uart1ReceivedDataProcessCallback+0x984>)
  11900. 800591e: 681b ldr r3, [r3, #0]
  11901. 8005920: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  11902. 8005924: 4618 mov r0, r3
  11903. 8005926: f00e f880 bl 8013a2a <osMutexAcquire>
  11904. 800592a: 4603 mov r3, r0
  11905. 800592c: 2b00 cmp r3, #0
  11906. 800592e: d123 bne.n 8005978 <Uart1ReceivedDataProcessCallback+0x970>
  11907. for (uint8_t i = 0; i < 3; i++) {
  11908. 8005930: 2300 movs r3, #0
  11909. 8005932: f887 3070 strb.w r3, [r7, #112] @ 0x70
  11910. 8005936: e012 b.n 800595e <Uart1ReceivedDataProcessCallback+0x956>
  11911. ReadWordFromBufer (spFrameData->dataBuffer, &inputDataBufferPos, (uint32_t*)&I_MeasCorrectionData[i].offset);
  11912. 8005938: 683b ldr r3, [r7, #0]
  11913. 800593a: f103 000c add.w r0, r3, #12
  11914. 800593e: f897 3070 ldrb.w r3, [r7, #112] @ 0x70
  11915. 8005942: 00db lsls r3, r3, #3
  11916. 8005944: 4a16 ldr r2, [pc, #88] @ (80059a0 <Uart1ReceivedDataProcessCallback+0x998>)
  11917. 8005946: 4413 add r3, r2
  11918. 8005948: 1d1a adds r2, r3, #4
  11919. 800594a: f107 0354 add.w r3, r7, #84 @ 0x54
  11920. 800594e: 4619 mov r1, r3
  11921. 8005950: f7fd fff6 bl 8003940 <ReadWordFromBufer>
  11922. for (uint8_t i = 0; i < 3; i++) {
  11923. 8005954: f897 3070 ldrb.w r3, [r7, #112] @ 0x70
  11924. 8005958: 3301 adds r3, #1
  11925. 800595a: f887 3070 strb.w r3, [r7, #112] @ 0x70
  11926. 800595e: f897 3070 ldrb.w r3, [r7, #112] @ 0x70
  11927. 8005962: 2b02 cmp r3, #2
  11928. 8005964: d9e8 bls.n 8005938 <Uart1ReceivedDataProcessCallback+0x930>
  11929. }
  11930. osMutexRelease (resMeasurementsMutex);
  11931. 8005966: 4b09 ldr r3, [pc, #36] @ (800598c <Uart1ReceivedDataProcessCallback+0x984>)
  11932. 8005968: 681b ldr r3, [r3, #0]
  11933. 800596a: 4618 mov r0, r3
  11934. 800596c: f00e f8a8 bl 8013ac0 <osMutexRelease>
  11935. respStatus = spOK;
  11936. 8005970: 2300 movs r3, #0
  11937. 8005972: f887 308f strb.w r3, [r7, #143] @ 0x8f
  11938. } else {
  11939. respStatus = spInternalError;
  11940. }
  11941. break;
  11942. 8005976: e070 b.n 8005a5a <Uart1ReceivedDataProcessCallback+0xa52>
  11943. respStatus = spInternalError;
  11944. 8005978: 23fc movs r3, #252 @ 0xfc
  11945. 800597a: f887 308f strb.w r3, [r7, #143] @ 0x8f
  11946. break;
  11947. 800597e: e06c b.n 8005a5a <Uart1ReceivedDataProcessCallback+0xa52>
  11948. __ASM volatile ("cpsid i" : : : "memory");
  11949. 8005980: b672 cpsid i
  11950. }
  11951. 8005982: bf00 nop
  11952. case spResetSystem:
  11953. __disable_irq();
  11954. NVIC_SystemReset();
  11955. 8005984: f7fe ff72 bl 800486c <__NVIC_SystemReset>
  11956. 8005988: 24000424 .word 0x24000424
  11957. 800598c: 2400078c .word 0x2400078c
  11958. 8005990: 240007a0 .word 0x240007a0
  11959. 8005994: 24000790 .word 0x24000790
  11960. 8005998: 240007e0 .word 0x240007e0
  11961. 800599c: 24000000 .word 0x24000000
  11962. 80059a0: 24000018 .word 0x24000018
  11963. break;
  11964. case spSetPositonX:
  11965. PositionControlTaskData posXData __attribute__ ((aligned (32))) = { 0 };
  11966. 80059a4: f04f 0300 mov.w r3, #0
  11967. 80059a8: 6023 str r3, [r4, #0]
  11968. if (osMutexAcquire (sensorsInfoMutex, osWaitForever) == osOK) {
  11969. 80059aa: 4b3e ldr r3, [pc, #248] @ (8005aa4 <Uart1ReceivedDataProcessCallback+0xa9c>)
  11970. 80059ac: 681b ldr r3, [r3, #0]
  11971. 80059ae: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  11972. 80059b2: 4618 mov r0, r3
  11973. 80059b4: f00e f839 bl 8013a2a <osMutexAcquire>
  11974. 80059b8: 4603 mov r3, r0
  11975. 80059ba: 2b00 cmp r3, #0
  11976. 80059bc: d108 bne.n 80059d0 <Uart1ReceivedDataProcessCallback+0x9c8>
  11977. sensorsInfo.positionXWeak = 1;
  11978. 80059be: 4b3a ldr r3, [pc, #232] @ (8005aa8 <Uart1ReceivedDataProcessCallback+0xaa0>)
  11979. 80059c0: 2201 movs r2, #1
  11980. 80059c2: f883 2038 strb.w r2, [r3, #56] @ 0x38
  11981. osMutexRelease (sensorsInfoMutex);
  11982. 80059c6: 4b37 ldr r3, [pc, #220] @ (8005aa4 <Uart1ReceivedDataProcessCallback+0xa9c>)
  11983. 80059c8: 681b ldr r3, [r3, #0]
  11984. 80059ca: 4618 mov r0, r3
  11985. 80059cc: f00e f878 bl 8013ac0 <osMutexRelease>
  11986. }
  11987. if (positionXControlTaskInitArg.positionSettingQueue != NULL)
  11988. 80059d0: 4b36 ldr r3, [pc, #216] @ (8005aac <Uart1ReceivedDataProcessCallback+0xaa4>)
  11989. 80059d2: 691b ldr r3, [r3, #16]
  11990. 80059d4: 2b00 cmp r3, #0
  11991. 80059d6: d03d beq.n 8005a54 <Uart1ReceivedDataProcessCallback+0xa4c>
  11992. {
  11993. ReadFloatFromBuffer(spFrameData->dataBuffer, &inputDataBufferPos, &posXData.positionSettingValue);
  11994. 80059d8: 683b ldr r3, [r7, #0]
  11995. 80059da: 330c adds r3, #12
  11996. 80059dc: f107 0154 add.w r1, r7, #84 @ 0x54
  11997. 80059e0: 4622 mov r2, r4
  11998. 80059e2: 4618 mov r0, r3
  11999. 80059e4: f7fd ff77 bl 80038d6 <ReadFloatFromBuffer>
  12000. osMessageQueuePut(positionXControlTaskInitArg.positionSettingQueue, &posXData, 0, 0);
  12001. 80059e8: 4b30 ldr r3, [pc, #192] @ (8005aac <Uart1ReceivedDataProcessCallback+0xaa4>)
  12002. 80059ea: 6918 ldr r0, [r3, #16]
  12003. 80059ec: 2300 movs r3, #0
  12004. 80059ee: 2200 movs r2, #0
  12005. 80059f0: 4621 mov r1, r4
  12006. 80059f2: f00e f915 bl 8013c20 <osMessageQueuePut>
  12007. }
  12008. break;
  12009. 80059f6: e02d b.n 8005a54 <Uart1ReceivedDataProcessCallback+0xa4c>
  12010. case spSetPositonY:
  12011. if (osMutexAcquire (sensorsInfoMutex, osWaitForever) == osOK) {
  12012. 80059f8: 4b2a ldr r3, [pc, #168] @ (8005aa4 <Uart1ReceivedDataProcessCallback+0xa9c>)
  12013. 80059fa: 681b ldr r3, [r3, #0]
  12014. 80059fc: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  12015. 8005a00: 4618 mov r0, r3
  12016. 8005a02: f00e f812 bl 8013a2a <osMutexAcquire>
  12017. 8005a06: 4603 mov r3, r0
  12018. 8005a08: 2b00 cmp r3, #0
  12019. 8005a0a: d108 bne.n 8005a1e <Uart1ReceivedDataProcessCallback+0xa16>
  12020. sensorsInfo.positionYWeak = 1;
  12021. 8005a0c: 4b26 ldr r3, [pc, #152] @ (8005aa8 <Uart1ReceivedDataProcessCallback+0xaa0>)
  12022. 8005a0e: 2201 movs r2, #1
  12023. 8005a10: f883 2039 strb.w r2, [r3, #57] @ 0x39
  12024. osMutexRelease (sensorsInfoMutex);
  12025. 8005a14: 4b23 ldr r3, [pc, #140] @ (8005aa4 <Uart1ReceivedDataProcessCallback+0xa9c>)
  12026. 8005a16: 681b ldr r3, [r3, #0]
  12027. 8005a18: 4618 mov r0, r3
  12028. 8005a1a: f00e f851 bl 8013ac0 <osMutexRelease>
  12029. }
  12030. PositionControlTaskData posYData __attribute__ ((aligned (32))) = { 0 };
  12031. 8005a1e: f04f 0300 mov.w r3, #0
  12032. 8005a22: 6023 str r3, [r4, #0]
  12033. if (positionYControlTaskInitArg.positionSettingQueue != NULL)
  12034. 8005a24: 4b22 ldr r3, [pc, #136] @ (8005ab0 <Uart1ReceivedDataProcessCallback+0xaa8>)
  12035. 8005a26: 691b ldr r3, [r3, #16]
  12036. 8005a28: 2b00 cmp r3, #0
  12037. 8005a2a: d015 beq.n 8005a58 <Uart1ReceivedDataProcessCallback+0xa50>
  12038. {
  12039. ReadFloatFromBuffer(spFrameData->dataBuffer, &inputDataBufferPos, &posYData.positionSettingValue);
  12040. 8005a2c: 683b ldr r3, [r7, #0]
  12041. 8005a2e: 330c adds r3, #12
  12042. 8005a30: f107 0154 add.w r1, r7, #84 @ 0x54
  12043. 8005a34: 4622 mov r2, r4
  12044. 8005a36: 4618 mov r0, r3
  12045. 8005a38: f7fd ff4d bl 80038d6 <ReadFloatFromBuffer>
  12046. osMessageQueuePut(positionYControlTaskInitArg.positionSettingQueue, &posYData, 0, 0);
  12047. 8005a3c: 4b1c ldr r3, [pc, #112] @ (8005ab0 <Uart1ReceivedDataProcessCallback+0xaa8>)
  12048. 8005a3e: 6918 ldr r0, [r3, #16]
  12049. 8005a40: 2300 movs r3, #0
  12050. 8005a42: 2200 movs r2, #0
  12051. 8005a44: 4621 mov r1, r4
  12052. 8005a46: f00e f8eb bl 8013c20 <osMessageQueuePut>
  12053. }
  12054. break;
  12055. 8005a4a: e005 b.n 8005a58 <Uart1ReceivedDataProcessCallback+0xa50>
  12056. default: respStatus = spUnknownCommand; break;
  12057. 8005a4c: 23fd movs r3, #253 @ 0xfd
  12058. 8005a4e: f887 308f strb.w r3, [r7, #143] @ 0x8f
  12059. 8005a52: e002 b.n 8005a5a <Uart1ReceivedDataProcessCallback+0xa52>
  12060. break;
  12061. 8005a54: bf00 nop
  12062. 8005a56: e000 b.n 8005a5a <Uart1ReceivedDataProcessCallback+0xa52>
  12063. break;
  12064. 8005a58: bf00 nop
  12065. }
  12066. dataToSend = PrepareRespFrame (uartTaskData->uartTxBuffer, spFrameData->frameHeader.frameId, spFrameData->frameHeader.frameCommand, respStatus, outputDataBuffer, outputDataBufferPos);
  12067. 8005a5a: 6efb ldr r3, [r7, #108] @ 0x6c
  12068. 8005a5c: 6898 ldr r0, [r3, #8]
  12069. 8005a5e: 683b ldr r3, [r7, #0]
  12070. 8005a60: 8819 ldrh r1, [r3, #0]
  12071. 8005a62: 683b ldr r3, [r7, #0]
  12072. 8005a64: 789a ldrb r2, [r3, #2]
  12073. 8005a66: 4b13 ldr r3, [pc, #76] @ (8005ab4 <Uart1ReceivedDataProcessCallback+0xaac>)
  12074. 8005a68: 881b ldrh r3, [r3, #0]
  12075. 8005a6a: f997 408f ldrsb.w r4, [r7, #143] @ 0x8f
  12076. 8005a6e: 9301 str r3, [sp, #4]
  12077. 8005a70: 4b11 ldr r3, [pc, #68] @ (8005ab8 <Uart1ReceivedDataProcessCallback+0xab0>)
  12078. 8005a72: 9300 str r3, [sp, #0]
  12079. 8005a74: 4623 mov r3, r4
  12080. 8005a76: f7fd ff97 bl 80039a8 <PrepareRespFrame>
  12081. 8005a7a: 4603 mov r3, r0
  12082. 8005a7c: f8a7 306a strh.w r3, [r7, #106] @ 0x6a
  12083. if (dataToSend > 0) {
  12084. 8005a80: f8b7 306a ldrh.w r3, [r7, #106] @ 0x6a
  12085. 8005a84: 2b00 cmp r3, #0
  12086. 8005a86: d008 beq.n 8005a9a <Uart1ReceivedDataProcessCallback+0xa92>
  12087. HAL_UART_Transmit_IT (uartTaskData->huart, uartTaskData->uartTxBuffer, dataToSend);
  12088. 8005a88: 6efb ldr r3, [r7, #108] @ 0x6c
  12089. 8005a8a: 6b18 ldr r0, [r3, #48] @ 0x30
  12090. 8005a8c: 6efb ldr r3, [r7, #108] @ 0x6c
  12091. 8005a8e: 689b ldr r3, [r3, #8]
  12092. 8005a90: f8b7 206a ldrh.w r2, [r7, #106] @ 0x6a
  12093. 8005a94: 4619 mov r1, r3
  12094. 8005a96: f00a ff9b bl 80109d0 <HAL_UART_Transmit_IT>
  12095. }
  12096. #ifdef SERIAL_PROTOCOL_DBG
  12097. printf ("Uart%d: TX bytes sent: %d\n", uartTaskData->uartNumber, dataToSend);
  12098. #endif
  12099. }
  12100. 8005a9a: bf00 nop
  12101. 8005a9c: 3794 adds r7, #148 @ 0x94
  12102. 8005a9e: 46bd mov sp, r7
  12103. 8005aa0: bd90 pop {r4, r7, pc}
  12104. 8005aa2: bf00 nop
  12105. 8005aa4: 24000790 .word 0x24000790
  12106. 8005aa8: 240007e0 .word 0x240007e0
  12107. 8005aac: 240008c0 .word 0x240008c0
  12108. 8005ab0: 24000900 .word 0x24000900
  12109. 8005ab4: 24001078 .word 0x24001078
  12110. 8005ab8: 24000ff8 .word 0x24000ff8
  12111. 08005abc <Reset_Handler>:
  12112. .section .text.Reset_Handler
  12113. .weak Reset_Handler
  12114. .type Reset_Handler, %function
  12115. Reset_Handler:
  12116. ldr sp, =_estack /* set stack pointer */
  12117. 8005abc: f8df d034 ldr.w sp, [pc, #52] @ 8005af4 <LoopFillZerobss+0xe>
  12118. /* Call the clock system initialization function.*/
  12119. bl SystemInit
  12120. 8005ac0: f7fe fe4c bl 800475c <SystemInit>
  12121. /* Copy the data segment initializers from flash to SRAM */
  12122. ldr r0, =_sdata
  12123. 8005ac4: 480c ldr r0, [pc, #48] @ (8005af8 <LoopFillZerobss+0x12>)
  12124. ldr r1, =_edata
  12125. 8005ac6: 490d ldr r1, [pc, #52] @ (8005afc <LoopFillZerobss+0x16>)
  12126. ldr r2, =_sidata
  12127. 8005ac8: 4a0d ldr r2, [pc, #52] @ (8005b00 <LoopFillZerobss+0x1a>)
  12128. movs r3, #0
  12129. 8005aca: 2300 movs r3, #0
  12130. b LoopCopyDataInit
  12131. 8005acc: e002 b.n 8005ad4 <LoopCopyDataInit>
  12132. 08005ace <CopyDataInit>:
  12133. CopyDataInit:
  12134. ldr r4, [r2, r3]
  12135. 8005ace: 58d4 ldr r4, [r2, r3]
  12136. str r4, [r0, r3]
  12137. 8005ad0: 50c4 str r4, [r0, r3]
  12138. adds r3, r3, #4
  12139. 8005ad2: 3304 adds r3, #4
  12140. 08005ad4 <LoopCopyDataInit>:
  12141. LoopCopyDataInit:
  12142. adds r4, r0, r3
  12143. 8005ad4: 18c4 adds r4, r0, r3
  12144. cmp r4, r1
  12145. 8005ad6: 428c cmp r4, r1
  12146. bcc CopyDataInit
  12147. 8005ad8: d3f9 bcc.n 8005ace <CopyDataInit>
  12148. /* Zero fill the bss segment. */
  12149. ldr r2, =_sbss
  12150. 8005ada: 4a0a ldr r2, [pc, #40] @ (8005b04 <LoopFillZerobss+0x1e>)
  12151. ldr r4, =_ebss
  12152. 8005adc: 4c0a ldr r4, [pc, #40] @ (8005b08 <LoopFillZerobss+0x22>)
  12153. movs r3, #0
  12154. 8005ade: 2300 movs r3, #0
  12155. b LoopFillZerobss
  12156. 8005ae0: e001 b.n 8005ae6 <LoopFillZerobss>
  12157. 08005ae2 <FillZerobss>:
  12158. FillZerobss:
  12159. str r3, [r2]
  12160. 8005ae2: 6013 str r3, [r2, #0]
  12161. adds r2, r2, #4
  12162. 8005ae4: 3204 adds r2, #4
  12163. 08005ae6 <LoopFillZerobss>:
  12164. LoopFillZerobss:
  12165. cmp r2, r4
  12166. 8005ae6: 42a2 cmp r2, r4
  12167. bcc FillZerobss
  12168. 8005ae8: d3fb bcc.n 8005ae2 <FillZerobss>
  12169. /* Call static constructors */
  12170. bl __libc_init_array
  12171. 8005aea: f012 f979 bl 8017de0 <__libc_init_array>
  12172. /* Call the application's entry point.*/
  12173. bl main
  12174. 8005aee: f7fa fe6b bl 80007c8 <main>
  12175. bx lr
  12176. 8005af2: 4770 bx lr
  12177. ldr sp, =_estack /* set stack pointer */
  12178. 8005af4: 24060000 .word 0x24060000
  12179. ldr r0, =_sdata
  12180. 8005af8: 24000000 .word 0x24000000
  12181. ldr r1, =_edata
  12182. 8005afc: 240000a4 .word 0x240000a4
  12183. ldr r2, =_sidata
  12184. 8005b00: 08018be8 .word 0x08018be8
  12185. ldr r2, =_sbss
  12186. 8005b04: 240000c0 .word 0x240000c0
  12187. ldr r4, =_ebss
  12188. 8005b08: 240131b4 .word 0x240131b4
  12189. 08005b0c <ADC3_IRQHandler>:
  12190. * @retval None
  12191. */
  12192. .section .text.Default_Handler,"ax",%progbits
  12193. Default_Handler:
  12194. Infinite_Loop:
  12195. b Infinite_Loop
  12196. 8005b0c: e7fe b.n 8005b0c <ADC3_IRQHandler>
  12197. ...
  12198. 08005b10 <HAL_Init>:
  12199. * need to ensure that the SysTick time base is always set to 1 millisecond
  12200. * to have correct HAL operation.
  12201. * @retval HAL status
  12202. */
  12203. HAL_StatusTypeDef HAL_Init(void)
  12204. {
  12205. 8005b10: b580 push {r7, lr}
  12206. 8005b12: b082 sub sp, #8
  12207. 8005b14: af00 add r7, sp, #0
  12208. __HAL_ART_CONFIG_BASE_ADDRESS(0x08100000UL); /* Configure the Cortex-M4 ART Base address to the Flash Bank 2 : */
  12209. __HAL_ART_ENABLE(); /* Enable the Cortex-M4 ART */
  12210. #endif /* DUAL_CORE && CORE_CM4 */
  12211. /* Set Interrupt Group Priority */
  12212. HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
  12213. 8005b16: 2003 movs r0, #3
  12214. 8005b18: f001 fee5 bl 80078e6 <HAL_NVIC_SetPriorityGrouping>
  12215. /* Update the SystemCoreClock global variable */
  12216. #if defined(RCC_D1CFGR_D1CPRE)
  12217. common_system_clock = HAL_RCC_GetSysClockFreq() >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_D1CPRE)>> RCC_D1CFGR_D1CPRE_Pos]) & 0x1FU);
  12218. 8005b1c: f006 fb90 bl 800c240 <HAL_RCC_GetSysClockFreq>
  12219. 8005b20: 4602 mov r2, r0
  12220. 8005b22: 4b15 ldr r3, [pc, #84] @ (8005b78 <HAL_Init+0x68>)
  12221. 8005b24: 699b ldr r3, [r3, #24]
  12222. 8005b26: 0a1b lsrs r3, r3, #8
  12223. 8005b28: f003 030f and.w r3, r3, #15
  12224. 8005b2c: 4913 ldr r1, [pc, #76] @ (8005b7c <HAL_Init+0x6c>)
  12225. 8005b2e: 5ccb ldrb r3, [r1, r3]
  12226. 8005b30: f003 031f and.w r3, r3, #31
  12227. 8005b34: fa22 f303 lsr.w r3, r2, r3
  12228. 8005b38: 607b str r3, [r7, #4]
  12229. common_system_clock = HAL_RCC_GetSysClockFreq() >> ((D1CorePrescTable[(RCC->CDCFGR1 & RCC_CDCFGR1_CDCPRE)>> RCC_CDCFGR1_CDCPRE_Pos]) & 0x1FU);
  12230. #endif
  12231. /* Update the SystemD2Clock global variable */
  12232. #if defined(RCC_D1CFGR_HPRE)
  12233. SystemD2Clock = (common_system_clock >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_HPRE)>> RCC_D1CFGR_HPRE_Pos]) & 0x1FU));
  12234. 8005b3a: 4b0f ldr r3, [pc, #60] @ (8005b78 <HAL_Init+0x68>)
  12235. 8005b3c: 699b ldr r3, [r3, #24]
  12236. 8005b3e: f003 030f and.w r3, r3, #15
  12237. 8005b42: 4a0e ldr r2, [pc, #56] @ (8005b7c <HAL_Init+0x6c>)
  12238. 8005b44: 5cd3 ldrb r3, [r2, r3]
  12239. 8005b46: f003 031f and.w r3, r3, #31
  12240. 8005b4a: 687a ldr r2, [r7, #4]
  12241. 8005b4c: fa22 f303 lsr.w r3, r2, r3
  12242. 8005b50: 4a0b ldr r2, [pc, #44] @ (8005b80 <HAL_Init+0x70>)
  12243. 8005b52: 6013 str r3, [r2, #0]
  12244. #endif
  12245. #if defined(DUAL_CORE) && defined(CORE_CM4)
  12246. SystemCoreClock = SystemD2Clock;
  12247. #else
  12248. SystemCoreClock = common_system_clock;
  12249. 8005b54: 4a0b ldr r2, [pc, #44] @ (8005b84 <HAL_Init+0x74>)
  12250. 8005b56: 687b ldr r3, [r7, #4]
  12251. 8005b58: 6013 str r3, [r2, #0]
  12252. #endif /* DUAL_CORE && CORE_CM4 */
  12253. /* Use systick as time base source and configure 1ms tick (default clock after Reset is HSI) */
  12254. if(HAL_InitTick(TICK_INT_PRIORITY) != HAL_OK)
  12255. 8005b5a: 2005 movs r0, #5
  12256. 8005b5c: f7fe fc72 bl 8004444 <HAL_InitTick>
  12257. 8005b60: 4603 mov r3, r0
  12258. 8005b62: 2b00 cmp r3, #0
  12259. 8005b64: d001 beq.n 8005b6a <HAL_Init+0x5a>
  12260. {
  12261. return HAL_ERROR;
  12262. 8005b66: 2301 movs r3, #1
  12263. 8005b68: e002 b.n 8005b70 <HAL_Init+0x60>
  12264. }
  12265. /* Init the low level hardware */
  12266. HAL_MspInit();
  12267. 8005b6a: f7fd ffbb bl 8003ae4 <HAL_MspInit>
  12268. /* Return function status */
  12269. return HAL_OK;
  12270. 8005b6e: 2300 movs r3, #0
  12271. }
  12272. 8005b70: 4618 mov r0, r3
  12273. 8005b72: 3708 adds r7, #8
  12274. 8005b74: 46bd mov sp, r7
  12275. 8005b76: bd80 pop {r7, pc}
  12276. 8005b78: 58024400 .word 0x58024400
  12277. 8005b7c: 08018b5c .word 0x08018b5c
  12278. 8005b80: 24000038 .word 0x24000038
  12279. 8005b84: 24000034 .word 0x24000034
  12280. 08005b88 <HAL_IncTick>:
  12281. * @note This function is declared as __weak to be overwritten in case of other
  12282. * implementations in user file.
  12283. * @retval None
  12284. */
  12285. __weak void HAL_IncTick(void)
  12286. {
  12287. 8005b88: b480 push {r7}
  12288. 8005b8a: af00 add r7, sp, #0
  12289. uwTick += (uint32_t)uwTickFreq;
  12290. 8005b8c: 4b06 ldr r3, [pc, #24] @ (8005ba8 <HAL_IncTick+0x20>)
  12291. 8005b8e: 781b ldrb r3, [r3, #0]
  12292. 8005b90: 461a mov r2, r3
  12293. 8005b92: 4b06 ldr r3, [pc, #24] @ (8005bac <HAL_IncTick+0x24>)
  12294. 8005b94: 681b ldr r3, [r3, #0]
  12295. 8005b96: 4413 add r3, r2
  12296. 8005b98: 4a04 ldr r2, [pc, #16] @ (8005bac <HAL_IncTick+0x24>)
  12297. 8005b9a: 6013 str r3, [r2, #0]
  12298. }
  12299. 8005b9c: bf00 nop
  12300. 8005b9e: 46bd mov sp, r7
  12301. 8005ba0: f85d 7b04 ldr.w r7, [sp], #4
  12302. 8005ba4: 4770 bx lr
  12303. 8005ba6: bf00 nop
  12304. 8005ba8: 24000040 .word 0x24000040
  12305. 8005bac: 2400107c .word 0x2400107c
  12306. 08005bb0 <HAL_GetTick>:
  12307. * @note This function is declared as __weak to be overwritten in case of other
  12308. * implementations in user file.
  12309. * @retval tick value
  12310. */
  12311. __weak uint32_t HAL_GetTick(void)
  12312. {
  12313. 8005bb0: b480 push {r7}
  12314. 8005bb2: af00 add r7, sp, #0
  12315. return uwTick;
  12316. 8005bb4: 4b03 ldr r3, [pc, #12] @ (8005bc4 <HAL_GetTick+0x14>)
  12317. 8005bb6: 681b ldr r3, [r3, #0]
  12318. }
  12319. 8005bb8: 4618 mov r0, r3
  12320. 8005bba: 46bd mov sp, r7
  12321. 8005bbc: f85d 7b04 ldr.w r7, [sp], #4
  12322. 8005bc0: 4770 bx lr
  12323. 8005bc2: bf00 nop
  12324. 8005bc4: 2400107c .word 0x2400107c
  12325. 08005bc8 <HAL_GetREVID>:
  12326. /**
  12327. * @brief Returns the device revision identifier.
  12328. * @retval Device revision identifier
  12329. */
  12330. uint32_t HAL_GetREVID(void)
  12331. {
  12332. 8005bc8: b480 push {r7}
  12333. 8005bca: af00 add r7, sp, #0
  12334. return((DBGMCU->IDCODE) >> 16);
  12335. 8005bcc: 4b03 ldr r3, [pc, #12] @ (8005bdc <HAL_GetREVID+0x14>)
  12336. 8005bce: 681b ldr r3, [r3, #0]
  12337. 8005bd0: 0c1b lsrs r3, r3, #16
  12338. }
  12339. 8005bd2: 4618 mov r0, r3
  12340. 8005bd4: 46bd mov sp, r7
  12341. 8005bd6: f85d 7b04 ldr.w r7, [sp], #4
  12342. 8005bda: 4770 bx lr
  12343. 8005bdc: 5c001000 .word 0x5c001000
  12344. 08005be0 <HAL_SYSCFG_VREFBUF_HighImpedanceConfig>:
  12345. * @arg SYSCFG_VREFBUF_HIGH_IMPEDANCE_DISABLE: VREF+ pin is internally connect to VREFINT output.
  12346. * @arg SYSCFG_VREFBUF_HIGH_IMPEDANCE_ENABLE: VREF+ pin is high impedance.
  12347. * @retval None
  12348. */
  12349. void HAL_SYSCFG_VREFBUF_HighImpedanceConfig(uint32_t Mode)
  12350. {
  12351. 8005be0: b480 push {r7}
  12352. 8005be2: b083 sub sp, #12
  12353. 8005be4: af00 add r7, sp, #0
  12354. 8005be6: 6078 str r0, [r7, #4]
  12355. /* Check the parameters */
  12356. assert_param(IS_SYSCFG_VREFBUF_HIGH_IMPEDANCE(Mode));
  12357. MODIFY_REG(VREFBUF->CSR, VREFBUF_CSR_HIZ, Mode);
  12358. 8005be8: 4b06 ldr r3, [pc, #24] @ (8005c04 <HAL_SYSCFG_VREFBUF_HighImpedanceConfig+0x24>)
  12359. 8005bea: 681b ldr r3, [r3, #0]
  12360. 8005bec: f023 0202 bic.w r2, r3, #2
  12361. 8005bf0: 4904 ldr r1, [pc, #16] @ (8005c04 <HAL_SYSCFG_VREFBUF_HighImpedanceConfig+0x24>)
  12362. 8005bf2: 687b ldr r3, [r7, #4]
  12363. 8005bf4: 4313 orrs r3, r2
  12364. 8005bf6: 600b str r3, [r1, #0]
  12365. }
  12366. 8005bf8: bf00 nop
  12367. 8005bfa: 370c adds r7, #12
  12368. 8005bfc: 46bd mov sp, r7
  12369. 8005bfe: f85d 7b04 ldr.w r7, [sp], #4
  12370. 8005c02: 4770 bx lr
  12371. 8005c04: 58003c00 .word 0x58003c00
  12372. 08005c08 <HAL_SYSCFG_DisableVREFBUF>:
  12373. * @brief Disable the Internal Voltage Reference buffer (VREFBUF).
  12374. *
  12375. * @retval None
  12376. */
  12377. void HAL_SYSCFG_DisableVREFBUF(void)
  12378. {
  12379. 8005c08: b480 push {r7}
  12380. 8005c0a: af00 add r7, sp, #0
  12381. CLEAR_BIT(VREFBUF->CSR, VREFBUF_CSR_ENVR);
  12382. 8005c0c: 4b05 ldr r3, [pc, #20] @ (8005c24 <HAL_SYSCFG_DisableVREFBUF+0x1c>)
  12383. 8005c0e: 681b ldr r3, [r3, #0]
  12384. 8005c10: 4a04 ldr r2, [pc, #16] @ (8005c24 <HAL_SYSCFG_DisableVREFBUF+0x1c>)
  12385. 8005c12: f023 0301 bic.w r3, r3, #1
  12386. 8005c16: 6013 str r3, [r2, #0]
  12387. }
  12388. 8005c18: bf00 nop
  12389. 8005c1a: 46bd mov sp, r7
  12390. 8005c1c: f85d 7b04 ldr.w r7, [sp], #4
  12391. 8005c20: 4770 bx lr
  12392. 8005c22: bf00 nop
  12393. 8005c24: 58003c00 .word 0x58003c00
  12394. 08005c28 <HAL_SYSCFG_AnalogSwitchConfig>:
  12395. * @arg SYSCFG_SWITCH_PC3_CLOSE
  12396. * @retval None
  12397. */
  12398. void HAL_SYSCFG_AnalogSwitchConfig(uint32_t SYSCFG_AnalogSwitch , uint32_t SYSCFG_SwitchState )
  12399. {
  12400. 8005c28: b480 push {r7}
  12401. 8005c2a: b083 sub sp, #12
  12402. 8005c2c: af00 add r7, sp, #0
  12403. 8005c2e: 6078 str r0, [r7, #4]
  12404. 8005c30: 6039 str r1, [r7, #0]
  12405. /* Check the parameter */
  12406. assert_param(IS_SYSCFG_ANALOG_SWITCH(SYSCFG_AnalogSwitch));
  12407. assert_param(IS_SYSCFG_SWITCH_STATE(SYSCFG_SwitchState));
  12408. MODIFY_REG(SYSCFG->PMCR, (uint32_t) SYSCFG_AnalogSwitch, (uint32_t)(SYSCFG_SwitchState));
  12409. 8005c32: 4b07 ldr r3, [pc, #28] @ (8005c50 <HAL_SYSCFG_AnalogSwitchConfig+0x28>)
  12410. 8005c34: 685a ldr r2, [r3, #4]
  12411. 8005c36: 687b ldr r3, [r7, #4]
  12412. 8005c38: 43db mvns r3, r3
  12413. 8005c3a: 401a ands r2, r3
  12414. 8005c3c: 4904 ldr r1, [pc, #16] @ (8005c50 <HAL_SYSCFG_AnalogSwitchConfig+0x28>)
  12415. 8005c3e: 683b ldr r3, [r7, #0]
  12416. 8005c40: 4313 orrs r3, r2
  12417. 8005c42: 604b str r3, [r1, #4]
  12418. }
  12419. 8005c44: bf00 nop
  12420. 8005c46: 370c adds r7, #12
  12421. 8005c48: 46bd mov sp, r7
  12422. 8005c4a: f85d 7b04 ldr.w r7, [sp], #4
  12423. 8005c4e: 4770 bx lr
  12424. 8005c50: 58000400 .word 0x58000400
  12425. 08005c54 <LL_ADC_SetCommonClock>:
  12426. * @arg @ref LL_ADC_CLOCK_ASYNC_DIV128
  12427. * @arg @ref LL_ADC_CLOCK_ASYNC_DIV256
  12428. * @retval None
  12429. */
  12430. __STATIC_INLINE void LL_ADC_SetCommonClock(ADC_Common_TypeDef *ADCxy_COMMON, uint32_t CommonClock)
  12431. {
  12432. 8005c54: b480 push {r7}
  12433. 8005c56: b083 sub sp, #12
  12434. 8005c58: af00 add r7, sp, #0
  12435. 8005c5a: 6078 str r0, [r7, #4]
  12436. 8005c5c: 6039 str r1, [r7, #0]
  12437. MODIFY_REG(ADCxy_COMMON->CCR, ADC_CCR_CKMODE | ADC_CCR_PRESC, CommonClock);
  12438. 8005c5e: 687b ldr r3, [r7, #4]
  12439. 8005c60: 689b ldr r3, [r3, #8]
  12440. 8005c62: f423 127c bic.w r2, r3, #4128768 @ 0x3f0000
  12441. 8005c66: 683b ldr r3, [r7, #0]
  12442. 8005c68: 431a orrs r2, r3
  12443. 8005c6a: 687b ldr r3, [r7, #4]
  12444. 8005c6c: 609a str r2, [r3, #8]
  12445. }
  12446. 8005c6e: bf00 nop
  12447. 8005c70: 370c adds r7, #12
  12448. 8005c72: 46bd mov sp, r7
  12449. 8005c74: f85d 7b04 ldr.w r7, [sp], #4
  12450. 8005c78: 4770 bx lr
  12451. 08005c7a <LL_ADC_SetCommonPathInternalCh>:
  12452. * @arg @ref LL_ADC_PATH_INTERNAL_TEMPSENSOR
  12453. * @arg @ref LL_ADC_PATH_INTERNAL_VBAT
  12454. * @retval None
  12455. */
  12456. __STATIC_INLINE void LL_ADC_SetCommonPathInternalCh(ADC_Common_TypeDef *ADCxy_COMMON, uint32_t PathInternal)
  12457. {
  12458. 8005c7a: b480 push {r7}
  12459. 8005c7c: b083 sub sp, #12
  12460. 8005c7e: af00 add r7, sp, #0
  12461. 8005c80: 6078 str r0, [r7, #4]
  12462. 8005c82: 6039 str r1, [r7, #0]
  12463. MODIFY_REG(ADCxy_COMMON->CCR, ADC_CCR_VREFEN | ADC_CCR_TSEN | ADC_CCR_VBATEN, PathInternal);
  12464. 8005c84: 687b ldr r3, [r7, #4]
  12465. 8005c86: 689b ldr r3, [r3, #8]
  12466. 8005c88: f023 72e0 bic.w r2, r3, #29360128 @ 0x1c00000
  12467. 8005c8c: 683b ldr r3, [r7, #0]
  12468. 8005c8e: 431a orrs r2, r3
  12469. 8005c90: 687b ldr r3, [r7, #4]
  12470. 8005c92: 609a str r2, [r3, #8]
  12471. }
  12472. 8005c94: bf00 nop
  12473. 8005c96: 370c adds r7, #12
  12474. 8005c98: 46bd mov sp, r7
  12475. 8005c9a: f85d 7b04 ldr.w r7, [sp], #4
  12476. 8005c9e: 4770 bx lr
  12477. 08005ca0 <LL_ADC_GetCommonPathInternalCh>:
  12478. * @arg @ref LL_ADC_PATH_INTERNAL_VREFINT
  12479. * @arg @ref LL_ADC_PATH_INTERNAL_TEMPSENSOR
  12480. * @arg @ref LL_ADC_PATH_INTERNAL_VBAT
  12481. */
  12482. __STATIC_INLINE uint32_t LL_ADC_GetCommonPathInternalCh(ADC_Common_TypeDef *ADCxy_COMMON)
  12483. {
  12484. 8005ca0: b480 push {r7}
  12485. 8005ca2: b083 sub sp, #12
  12486. 8005ca4: af00 add r7, sp, #0
  12487. 8005ca6: 6078 str r0, [r7, #4]
  12488. return (uint32_t)(READ_BIT(ADCxy_COMMON->CCR, ADC_CCR_VREFEN | ADC_CCR_TSEN | ADC_CCR_VBATEN));
  12489. 8005ca8: 687b ldr r3, [r7, #4]
  12490. 8005caa: 689b ldr r3, [r3, #8]
  12491. 8005cac: f003 73e0 and.w r3, r3, #29360128 @ 0x1c00000
  12492. }
  12493. 8005cb0: 4618 mov r0, r3
  12494. 8005cb2: 370c adds r7, #12
  12495. 8005cb4: 46bd mov sp, r7
  12496. 8005cb6: f85d 7b04 ldr.w r7, [sp], #4
  12497. 8005cba: 4770 bx lr
  12498. 08005cbc <LL_ADC_SetOffset>:
  12499. * Other channels are slow channels (conversion rate: refer to reference manual).
  12500. * @param OffsetLevel Value between Min_Data=0x000 and Max_Data=0x3FFFFFF
  12501. * @retval None
  12502. */
  12503. __STATIC_INLINE void LL_ADC_SetOffset(ADC_TypeDef *ADCx, uint32_t Offsety, uint32_t Channel, uint32_t OffsetLevel)
  12504. {
  12505. 8005cbc: b480 push {r7}
  12506. 8005cbe: b087 sub sp, #28
  12507. 8005cc0: af00 add r7, sp, #0
  12508. 8005cc2: 60f8 str r0, [r7, #12]
  12509. 8005cc4: 60b9 str r1, [r7, #8]
  12510. 8005cc6: 607a str r2, [r7, #4]
  12511. 8005cc8: 603b str r3, [r7, #0]
  12512. __IO uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->OFR1, Offsety);
  12513. 8005cca: 68fb ldr r3, [r7, #12]
  12514. 8005ccc: 3360 adds r3, #96 @ 0x60
  12515. 8005cce: 461a mov r2, r3
  12516. 8005cd0: 68bb ldr r3, [r7, #8]
  12517. 8005cd2: 009b lsls r3, r3, #2
  12518. 8005cd4: 4413 add r3, r2
  12519. 8005cd6: 617b str r3, [r7, #20]
  12520. ADC3_OFR1_OFFSET1_EN | (Channel & ADC_CHANNEL_ID_NUMBER_MASK) | OffsetLevel);
  12521. }
  12522. else
  12523. #endif /* ADC_VER_V5_V90 */
  12524. {
  12525. MODIFY_REG(*preg,
  12526. 8005cd8: 697b ldr r3, [r7, #20]
  12527. 8005cda: 681b ldr r3, [r3, #0]
  12528. 8005cdc: f003 4200 and.w r2, r3, #2147483648 @ 0x80000000
  12529. 8005ce0: 687b ldr r3, [r7, #4]
  12530. 8005ce2: f003 41f8 and.w r1, r3, #2080374784 @ 0x7c000000
  12531. 8005ce6: 683b ldr r3, [r7, #0]
  12532. 8005ce8: 430b orrs r3, r1
  12533. 8005cea: 431a orrs r2, r3
  12534. 8005cec: 697b ldr r3, [r7, #20]
  12535. 8005cee: 601a str r2, [r3, #0]
  12536. ADC_OFR1_OFFSET1_CH | ADC_OFR1_OFFSET1,
  12537. (Channel & ADC_CHANNEL_ID_NUMBER_MASK) | OffsetLevel);
  12538. }
  12539. }
  12540. 8005cf0: bf00 nop
  12541. 8005cf2: 371c adds r7, #28
  12542. 8005cf4: 46bd mov sp, r7
  12543. 8005cf6: f85d 7b04 ldr.w r7, [sp], #4
  12544. 8005cfa: 4770 bx lr
  12545. 08005cfc <LL_ADC_SetDataRightShift>:
  12546. * @arg @ref LL_ADC_OFFSET_RSHIFT_ENABLE
  12547. * @arg @ref LL_ADC_OFFSET_RSHIFT_DISABLE
  12548. * @retval Returned None
  12549. */
  12550. __STATIC_INLINE void LL_ADC_SetDataRightShift(ADC_TypeDef *ADCx, uint32_t Offsety, uint32_t RigthShift)
  12551. {
  12552. 8005cfc: b480 push {r7}
  12553. 8005cfe: b085 sub sp, #20
  12554. 8005d00: af00 add r7, sp, #0
  12555. 8005d02: 60f8 str r0, [r7, #12]
  12556. 8005d04: 60b9 str r1, [r7, #8]
  12557. 8005d06: 607a str r2, [r7, #4]
  12558. MODIFY_REG(ADCx->CFGR2, (ADC_CFGR2_RSHIFT1 | ADC_CFGR2_RSHIFT2 | ADC_CFGR2_RSHIFT3 | ADC_CFGR2_RSHIFT4), RigthShift << (Offsety & 0x1FUL));
  12559. 8005d08: 68fb ldr r3, [r7, #12]
  12560. 8005d0a: 691b ldr r3, [r3, #16]
  12561. 8005d0c: f423 42f0 bic.w r2, r3, #30720 @ 0x7800
  12562. 8005d10: 68bb ldr r3, [r7, #8]
  12563. 8005d12: f003 031f and.w r3, r3, #31
  12564. 8005d16: 6879 ldr r1, [r7, #4]
  12565. 8005d18: fa01 f303 lsl.w r3, r1, r3
  12566. 8005d1c: 431a orrs r2, r3
  12567. 8005d1e: 68fb ldr r3, [r7, #12]
  12568. 8005d20: 611a str r2, [r3, #16]
  12569. }
  12570. 8005d22: bf00 nop
  12571. 8005d24: 3714 adds r7, #20
  12572. 8005d26: 46bd mov sp, r7
  12573. 8005d28: f85d 7b04 ldr.w r7, [sp], #4
  12574. 8005d2c: 4770 bx lr
  12575. 08005d2e <LL_ADC_SetOffsetSignedSaturation>:
  12576. * @arg @ref LL_ADC_OFFSET_SIGNED_SATURATION_ENABLE
  12577. * @arg @ref LL_ADC_OFFSET_SIGNED_SATURATION_DISABLE
  12578. * @retval Returned None
  12579. */
  12580. __STATIC_INLINE void LL_ADC_SetOffsetSignedSaturation(ADC_TypeDef *ADCx, uint32_t Offsety, uint32_t OffsetSignedSaturation)
  12581. {
  12582. 8005d2e: b480 push {r7}
  12583. 8005d30: b087 sub sp, #28
  12584. 8005d32: af00 add r7, sp, #0
  12585. 8005d34: 60f8 str r0, [r7, #12]
  12586. 8005d36: 60b9 str r1, [r7, #8]
  12587. 8005d38: 607a str r2, [r7, #4]
  12588. /* Function not available on this instance */
  12589. }
  12590. else
  12591. #endif /* ADC_VER_V5_V90 */
  12592. {
  12593. __IO uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->OFR1, Offsety);
  12594. 8005d3a: 68fb ldr r3, [r7, #12]
  12595. 8005d3c: 3360 adds r3, #96 @ 0x60
  12596. 8005d3e: 461a mov r2, r3
  12597. 8005d40: 68bb ldr r3, [r7, #8]
  12598. 8005d42: 009b lsls r3, r3, #2
  12599. 8005d44: 4413 add r3, r2
  12600. 8005d46: 617b str r3, [r7, #20]
  12601. MODIFY_REG(*preg, ADC_OFR1_SSATE, OffsetSignedSaturation);
  12602. 8005d48: 697b ldr r3, [r7, #20]
  12603. 8005d4a: 681b ldr r3, [r3, #0]
  12604. 8005d4c: f023 4200 bic.w r2, r3, #2147483648 @ 0x80000000
  12605. 8005d50: 687b ldr r3, [r7, #4]
  12606. 8005d52: 431a orrs r2, r3
  12607. 8005d54: 697b ldr r3, [r7, #20]
  12608. 8005d56: 601a str r2, [r3, #0]
  12609. }
  12610. }
  12611. 8005d58: bf00 nop
  12612. 8005d5a: 371c adds r7, #28
  12613. 8005d5c: 46bd mov sp, r7
  12614. 8005d5e: f85d 7b04 ldr.w r7, [sp], #4
  12615. 8005d62: 4770 bx lr
  12616. 08005d64 <LL_ADC_REG_IsTriggerSourceSWStart>:
  12617. * @param ADCx ADC instance
  12618. * @retval Value "0" if trigger source external trigger
  12619. * Value "1" if trigger source SW start.
  12620. */
  12621. __STATIC_INLINE uint32_t LL_ADC_REG_IsTriggerSourceSWStart(ADC_TypeDef *ADCx)
  12622. {
  12623. 8005d64: b480 push {r7}
  12624. 8005d66: b083 sub sp, #12
  12625. 8005d68: af00 add r7, sp, #0
  12626. 8005d6a: 6078 str r0, [r7, #4]
  12627. return ((READ_BIT(ADCx->CFGR, ADC_CFGR_EXTEN) == (LL_ADC_REG_TRIG_SOFTWARE & ADC_CFGR_EXTEN)) ? 1UL : 0UL);
  12628. 8005d6c: 687b ldr r3, [r7, #4]
  12629. 8005d6e: 68db ldr r3, [r3, #12]
  12630. 8005d70: f403 6340 and.w r3, r3, #3072 @ 0xc00
  12631. 8005d74: 2b00 cmp r3, #0
  12632. 8005d76: d101 bne.n 8005d7c <LL_ADC_REG_IsTriggerSourceSWStart+0x18>
  12633. 8005d78: 2301 movs r3, #1
  12634. 8005d7a: e000 b.n 8005d7e <LL_ADC_REG_IsTriggerSourceSWStart+0x1a>
  12635. 8005d7c: 2300 movs r3, #0
  12636. }
  12637. 8005d7e: 4618 mov r0, r3
  12638. 8005d80: 370c adds r7, #12
  12639. 8005d82: 46bd mov sp, r7
  12640. 8005d84: f85d 7b04 ldr.w r7, [sp], #4
  12641. 8005d88: 4770 bx lr
  12642. 08005d8a <LL_ADC_REG_SetSequencerRanks>:
  12643. * (3) On STM32H7, fast channel (0.125 us for 14-bit resolution (ADC conversion rate up to 8 Ms/s)).
  12644. * Other channels are slow channels (conversion rate: refer to reference manual).
  12645. * @retval None
  12646. */
  12647. __STATIC_INLINE void LL_ADC_REG_SetSequencerRanks(ADC_TypeDef *ADCx, uint32_t Rank, uint32_t Channel)
  12648. {
  12649. 8005d8a: b480 push {r7}
  12650. 8005d8c: b087 sub sp, #28
  12651. 8005d8e: af00 add r7, sp, #0
  12652. 8005d90: 60f8 str r0, [r7, #12]
  12653. 8005d92: 60b9 str r1, [r7, #8]
  12654. 8005d94: 607a str r2, [r7, #4]
  12655. /* Set bits with content of parameter "Channel" with bits position */
  12656. /* in register and register position depending on parameter "Rank". */
  12657. /* Parameters "Rank" and "Channel" are used with masks because containing */
  12658. /* other bits reserved for other purpose. */
  12659. __IO uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->SQR1, ((Rank & ADC_REG_SQRX_REGOFFSET_MASK) >> ADC_SQRX_REGOFFSET_POS));
  12660. 8005d96: 68fb ldr r3, [r7, #12]
  12661. 8005d98: 3330 adds r3, #48 @ 0x30
  12662. 8005d9a: 461a mov r2, r3
  12663. 8005d9c: 68bb ldr r3, [r7, #8]
  12664. 8005d9e: 0a1b lsrs r3, r3, #8
  12665. 8005da0: 009b lsls r3, r3, #2
  12666. 8005da2: f003 030c and.w r3, r3, #12
  12667. 8005da6: 4413 add r3, r2
  12668. 8005da8: 617b str r3, [r7, #20]
  12669. MODIFY_REG(*preg,
  12670. 8005daa: 697b ldr r3, [r7, #20]
  12671. 8005dac: 681a ldr r2, [r3, #0]
  12672. 8005dae: 68bb ldr r3, [r7, #8]
  12673. 8005db0: f003 031f and.w r3, r3, #31
  12674. 8005db4: 211f movs r1, #31
  12675. 8005db6: fa01 f303 lsl.w r3, r1, r3
  12676. 8005dba: 43db mvns r3, r3
  12677. 8005dbc: 401a ands r2, r3
  12678. 8005dbe: 687b ldr r3, [r7, #4]
  12679. 8005dc0: 0e9b lsrs r3, r3, #26
  12680. 8005dc2: f003 011f and.w r1, r3, #31
  12681. 8005dc6: 68bb ldr r3, [r7, #8]
  12682. 8005dc8: f003 031f and.w r3, r3, #31
  12683. 8005dcc: fa01 f303 lsl.w r3, r1, r3
  12684. 8005dd0: 431a orrs r2, r3
  12685. 8005dd2: 697b ldr r3, [r7, #20]
  12686. 8005dd4: 601a str r2, [r3, #0]
  12687. ADC_CHANNEL_ID_NUMBER_MASK_POSBIT0 << (Rank & ADC_REG_RANK_ID_SQRX_MASK),
  12688. ((Channel & ADC_CHANNEL_ID_NUMBER_MASK) >> ADC_CHANNEL_ID_NUMBER_BITOFFSET_POS) << (Rank & ADC_REG_RANK_ID_SQRX_MASK));
  12689. }
  12690. 8005dd6: bf00 nop
  12691. 8005dd8: 371c adds r7, #28
  12692. 8005dda: 46bd mov sp, r7
  12693. 8005ddc: f85d 7b04 ldr.w r7, [sp], #4
  12694. 8005de0: 4770 bx lr
  12695. 08005de2 <LL_ADC_REG_SetDataTransferMode>:
  12696. * @param ADCx ADC instance
  12697. * @param DataTransferMode Select Data Management configuration
  12698. * @retval None
  12699. */
  12700. __STATIC_INLINE void LL_ADC_REG_SetDataTransferMode(ADC_TypeDef *ADCx, uint32_t DataTransferMode)
  12701. {
  12702. 8005de2: b480 push {r7}
  12703. 8005de4: b083 sub sp, #12
  12704. 8005de6: af00 add r7, sp, #0
  12705. 8005de8: 6078 str r0, [r7, #4]
  12706. 8005dea: 6039 str r1, [r7, #0]
  12707. MODIFY_REG(ADCx->CFGR, ADC_CFGR_DMNGT, DataTransferMode);
  12708. 8005dec: 687b ldr r3, [r7, #4]
  12709. 8005dee: 68db ldr r3, [r3, #12]
  12710. 8005df0: f023 0203 bic.w r2, r3, #3
  12711. 8005df4: 683b ldr r3, [r7, #0]
  12712. 8005df6: 431a orrs r2, r3
  12713. 8005df8: 687b ldr r3, [r7, #4]
  12714. 8005dfa: 60da str r2, [r3, #12]
  12715. }
  12716. 8005dfc: bf00 nop
  12717. 8005dfe: 370c adds r7, #12
  12718. 8005e00: 46bd mov sp, r7
  12719. 8005e02: f85d 7b04 ldr.w r7, [sp], #4
  12720. 8005e06: 4770 bx lr
  12721. 08005e08 <LL_ADC_SetChannelSamplingTime>:
  12722. * @arg @ref LL_ADC_SAMPLINGTIME_387CYCLES_5
  12723. * @arg @ref LL_ADC_SAMPLINGTIME_810CYCLES_5
  12724. * @retval None
  12725. */
  12726. __STATIC_INLINE void LL_ADC_SetChannelSamplingTime(ADC_TypeDef *ADCx, uint32_t Channel, uint32_t SamplingTime)
  12727. {
  12728. 8005e08: b480 push {r7}
  12729. 8005e0a: b087 sub sp, #28
  12730. 8005e0c: af00 add r7, sp, #0
  12731. 8005e0e: 60f8 str r0, [r7, #12]
  12732. 8005e10: 60b9 str r1, [r7, #8]
  12733. 8005e12: 607a str r2, [r7, #4]
  12734. /* Set bits with content of parameter "SamplingTime" with bits position */
  12735. /* in register and register position depending on parameter "Channel". */
  12736. /* Parameter "Channel" is used with masks because containing */
  12737. /* other bits reserved for other purpose. */
  12738. __IO uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->SMPR1, ((Channel & ADC_CHANNEL_SMPRX_REGOFFSET_MASK) >> ADC_SMPRX_REGOFFSET_POS));
  12739. 8005e14: 68fb ldr r3, [r7, #12]
  12740. 8005e16: 3314 adds r3, #20
  12741. 8005e18: 461a mov r2, r3
  12742. 8005e1a: 68bb ldr r3, [r7, #8]
  12743. 8005e1c: 0e5b lsrs r3, r3, #25
  12744. 8005e1e: 009b lsls r3, r3, #2
  12745. 8005e20: f003 0304 and.w r3, r3, #4
  12746. 8005e24: 4413 add r3, r2
  12747. 8005e26: 617b str r3, [r7, #20]
  12748. MODIFY_REG(*preg,
  12749. 8005e28: 697b ldr r3, [r7, #20]
  12750. 8005e2a: 681a ldr r2, [r3, #0]
  12751. 8005e2c: 68bb ldr r3, [r7, #8]
  12752. 8005e2e: 0d1b lsrs r3, r3, #20
  12753. 8005e30: f003 031f and.w r3, r3, #31
  12754. 8005e34: 2107 movs r1, #7
  12755. 8005e36: fa01 f303 lsl.w r3, r1, r3
  12756. 8005e3a: 43db mvns r3, r3
  12757. 8005e3c: 401a ands r2, r3
  12758. 8005e3e: 68bb ldr r3, [r7, #8]
  12759. 8005e40: 0d1b lsrs r3, r3, #20
  12760. 8005e42: f003 031f and.w r3, r3, #31
  12761. 8005e46: 6879 ldr r1, [r7, #4]
  12762. 8005e48: fa01 f303 lsl.w r3, r1, r3
  12763. 8005e4c: 431a orrs r2, r3
  12764. 8005e4e: 697b ldr r3, [r7, #20]
  12765. 8005e50: 601a str r2, [r3, #0]
  12766. ADC_SMPR1_SMP0 << ((Channel & ADC_CHANNEL_SMPx_BITOFFSET_MASK) >> ADC_CHANNEL_SMPx_BITOFFSET_POS),
  12767. SamplingTime << ((Channel & ADC_CHANNEL_SMPx_BITOFFSET_MASK) >> ADC_CHANNEL_SMPx_BITOFFSET_POS));
  12768. }
  12769. 8005e52: bf00 nop
  12770. 8005e54: 371c adds r7, #28
  12771. 8005e56: 46bd mov sp, r7
  12772. 8005e58: f85d 7b04 ldr.w r7, [sp], #4
  12773. 8005e5c: 4770 bx lr
  12774. ...
  12775. 08005e60 <LL_ADC_SetChannelSingleDiff>:
  12776. * @arg @ref LL_ADC_SINGLE_ENDED
  12777. * @arg @ref LL_ADC_DIFFERENTIAL_ENDED
  12778. * @retval None
  12779. */
  12780. __STATIC_INLINE void LL_ADC_SetChannelSingleDiff(ADC_TypeDef *ADCx, uint32_t Channel, uint32_t SingleDiff)
  12781. {
  12782. 8005e60: b480 push {r7}
  12783. 8005e62: b085 sub sp, #20
  12784. 8005e64: af00 add r7, sp, #0
  12785. 8005e66: 60f8 str r0, [r7, #12]
  12786. 8005e68: 60b9 str r1, [r7, #8]
  12787. 8005e6a: 607a str r2, [r7, #4]
  12788. }
  12789. #else /* ADC_VER_V5_V90 */
  12790. /* Bits of channels in single or differential mode are set only for */
  12791. /* differential mode (for single mode, mask of bits allowed to be set is */
  12792. /* shifted out of range of bits of channels in single or differential mode. */
  12793. MODIFY_REG(ADCx->DIFSEL,
  12794. 8005e6c: 68fb ldr r3, [r7, #12]
  12795. 8005e6e: f8d3 20c0 ldr.w r2, [r3, #192] @ 0xc0
  12796. 8005e72: 68bb ldr r3, [r7, #8]
  12797. 8005e74: f3c3 0313 ubfx r3, r3, #0, #20
  12798. 8005e78: 43db mvns r3, r3
  12799. 8005e7a: 401a ands r2, r3
  12800. 8005e7c: 687b ldr r3, [r7, #4]
  12801. 8005e7e: f003 0318 and.w r3, r3, #24
  12802. 8005e82: 4908 ldr r1, [pc, #32] @ (8005ea4 <LL_ADC_SetChannelSingleDiff+0x44>)
  12803. 8005e84: 40d9 lsrs r1, r3
  12804. 8005e86: 68bb ldr r3, [r7, #8]
  12805. 8005e88: 400b ands r3, r1
  12806. 8005e8a: f3c3 0313 ubfx r3, r3, #0, #20
  12807. 8005e8e: 431a orrs r2, r3
  12808. 8005e90: 68fb ldr r3, [r7, #12]
  12809. 8005e92: f8c3 20c0 str.w r2, [r3, #192] @ 0xc0
  12810. Channel & ADC_SINGLEDIFF_CHANNEL_MASK,
  12811. (Channel & ADC_SINGLEDIFF_CHANNEL_MASK) & (ADC_DIFSEL_DIFSEL >> (SingleDiff & ADC_SINGLEDIFF_CHANNEL_SHIFT_MASK)));
  12812. #endif /* ADC_VER_V5_V90 */
  12813. }
  12814. 8005e96: bf00 nop
  12815. 8005e98: 3714 adds r7, #20
  12816. 8005e9a: 46bd mov sp, r7
  12817. 8005e9c: f85d 7b04 ldr.w r7, [sp], #4
  12818. 8005ea0: 4770 bx lr
  12819. 8005ea2: bf00 nop
  12820. 8005ea4: 000fffff .word 0x000fffff
  12821. 08005ea8 <LL_ADC_GetMultimode>:
  12822. * @arg @ref LL_ADC_MULTI_DUAL_REG_SIM_INJ_SIM
  12823. * @arg @ref LL_ADC_MULTI_DUAL_REG_SIM_INJ_ALT
  12824. * @arg @ref LL_ADC_MULTI_DUAL_REG_INT_INJ_SIM
  12825. */
  12826. __STATIC_INLINE uint32_t LL_ADC_GetMultimode(ADC_Common_TypeDef *ADCxy_COMMON)
  12827. {
  12828. 8005ea8: b480 push {r7}
  12829. 8005eaa: b083 sub sp, #12
  12830. 8005eac: af00 add r7, sp, #0
  12831. 8005eae: 6078 str r0, [r7, #4]
  12832. return (uint32_t)(READ_BIT(ADCxy_COMMON->CCR, ADC_CCR_DUAL));
  12833. 8005eb0: 687b ldr r3, [r7, #4]
  12834. 8005eb2: 689b ldr r3, [r3, #8]
  12835. 8005eb4: f003 031f and.w r3, r3, #31
  12836. }
  12837. 8005eb8: 4618 mov r0, r3
  12838. 8005eba: 370c adds r7, #12
  12839. 8005ebc: 46bd mov sp, r7
  12840. 8005ebe: f85d 7b04 ldr.w r7, [sp], #4
  12841. 8005ec2: 4770 bx lr
  12842. 08005ec4 <LL_ADC_DisableDeepPowerDown>:
  12843. * @rmtoll CR DEEPPWD LL_ADC_DisableDeepPowerDown
  12844. * @param ADCx ADC instance
  12845. * @retval None
  12846. */
  12847. __STATIC_INLINE void LL_ADC_DisableDeepPowerDown(ADC_TypeDef *ADCx)
  12848. {
  12849. 8005ec4: b480 push {r7}
  12850. 8005ec6: b083 sub sp, #12
  12851. 8005ec8: af00 add r7, sp, #0
  12852. 8005eca: 6078 str r0, [r7, #4]
  12853. /* Note: Write register with some additional bits forced to state reset */
  12854. /* instead of modifying only the selected bit for this function, */
  12855. /* to not interfere with bits with HW property "rs". */
  12856. CLEAR_BIT(ADCx->CR, (ADC_CR_DEEPPWD | ADC_CR_BITS_PROPERTY_RS));
  12857. 8005ecc: 687b ldr r3, [r7, #4]
  12858. 8005ece: 689a ldr r2, [r3, #8]
  12859. 8005ed0: 4b04 ldr r3, [pc, #16] @ (8005ee4 <LL_ADC_DisableDeepPowerDown+0x20>)
  12860. 8005ed2: 4013 ands r3, r2
  12861. 8005ed4: 687a ldr r2, [r7, #4]
  12862. 8005ed6: 6093 str r3, [r2, #8]
  12863. }
  12864. 8005ed8: bf00 nop
  12865. 8005eda: 370c adds r7, #12
  12866. 8005edc: 46bd mov sp, r7
  12867. 8005ede: f85d 7b04 ldr.w r7, [sp], #4
  12868. 8005ee2: 4770 bx lr
  12869. 8005ee4: 5fffffc0 .word 0x5fffffc0
  12870. 08005ee8 <LL_ADC_IsDeepPowerDownEnabled>:
  12871. * @rmtoll CR DEEPPWD LL_ADC_IsDeepPowerDownEnabled
  12872. * @param ADCx ADC instance
  12873. * @retval 0: deep power down is disabled, 1: deep power down is enabled.
  12874. */
  12875. __STATIC_INLINE uint32_t LL_ADC_IsDeepPowerDownEnabled(ADC_TypeDef *ADCx)
  12876. {
  12877. 8005ee8: b480 push {r7}
  12878. 8005eea: b083 sub sp, #12
  12879. 8005eec: af00 add r7, sp, #0
  12880. 8005eee: 6078 str r0, [r7, #4]
  12881. return ((READ_BIT(ADCx->CR, ADC_CR_DEEPPWD) == (ADC_CR_DEEPPWD)) ? 1UL : 0UL);
  12882. 8005ef0: 687b ldr r3, [r7, #4]
  12883. 8005ef2: 689b ldr r3, [r3, #8]
  12884. 8005ef4: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  12885. 8005ef8: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  12886. 8005efc: d101 bne.n 8005f02 <LL_ADC_IsDeepPowerDownEnabled+0x1a>
  12887. 8005efe: 2301 movs r3, #1
  12888. 8005f00: e000 b.n 8005f04 <LL_ADC_IsDeepPowerDownEnabled+0x1c>
  12889. 8005f02: 2300 movs r3, #0
  12890. }
  12891. 8005f04: 4618 mov r0, r3
  12892. 8005f06: 370c adds r7, #12
  12893. 8005f08: 46bd mov sp, r7
  12894. 8005f0a: f85d 7b04 ldr.w r7, [sp], #4
  12895. 8005f0e: 4770 bx lr
  12896. 08005f10 <LL_ADC_EnableInternalRegulator>:
  12897. * @rmtoll CR ADVREGEN LL_ADC_EnableInternalRegulator
  12898. * @param ADCx ADC instance
  12899. * @retval None
  12900. */
  12901. __STATIC_INLINE void LL_ADC_EnableInternalRegulator(ADC_TypeDef *ADCx)
  12902. {
  12903. 8005f10: b480 push {r7}
  12904. 8005f12: b083 sub sp, #12
  12905. 8005f14: af00 add r7, sp, #0
  12906. 8005f16: 6078 str r0, [r7, #4]
  12907. /* Note: Write register with some additional bits forced to state reset */
  12908. /* instead of modifying only the selected bit for this function, */
  12909. /* to not interfere with bits with HW property "rs". */
  12910. MODIFY_REG(ADCx->CR,
  12911. 8005f18: 687b ldr r3, [r7, #4]
  12912. 8005f1a: 689a ldr r2, [r3, #8]
  12913. 8005f1c: 4b05 ldr r3, [pc, #20] @ (8005f34 <LL_ADC_EnableInternalRegulator+0x24>)
  12914. 8005f1e: 4013 ands r3, r2
  12915. 8005f20: f043 5280 orr.w r2, r3, #268435456 @ 0x10000000
  12916. 8005f24: 687b ldr r3, [r7, #4]
  12917. 8005f26: 609a str r2, [r3, #8]
  12918. ADC_CR_BITS_PROPERTY_RS,
  12919. ADC_CR_ADVREGEN);
  12920. }
  12921. 8005f28: bf00 nop
  12922. 8005f2a: 370c adds r7, #12
  12923. 8005f2c: 46bd mov sp, r7
  12924. 8005f2e: f85d 7b04 ldr.w r7, [sp], #4
  12925. 8005f32: 4770 bx lr
  12926. 8005f34: 6fffffc0 .word 0x6fffffc0
  12927. 08005f38 <LL_ADC_IsInternalRegulatorEnabled>:
  12928. * @rmtoll CR ADVREGEN LL_ADC_IsInternalRegulatorEnabled
  12929. * @param ADCx ADC instance
  12930. * @retval 0: internal regulator is disabled, 1: internal regulator is enabled.
  12931. */
  12932. __STATIC_INLINE uint32_t LL_ADC_IsInternalRegulatorEnabled(ADC_TypeDef *ADCx)
  12933. {
  12934. 8005f38: b480 push {r7}
  12935. 8005f3a: b083 sub sp, #12
  12936. 8005f3c: af00 add r7, sp, #0
  12937. 8005f3e: 6078 str r0, [r7, #4]
  12938. return ((READ_BIT(ADCx->CR, ADC_CR_ADVREGEN) == (ADC_CR_ADVREGEN)) ? 1UL : 0UL);
  12939. 8005f40: 687b ldr r3, [r7, #4]
  12940. 8005f42: 689b ldr r3, [r3, #8]
  12941. 8005f44: f003 5380 and.w r3, r3, #268435456 @ 0x10000000
  12942. 8005f48: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  12943. 8005f4c: d101 bne.n 8005f52 <LL_ADC_IsInternalRegulatorEnabled+0x1a>
  12944. 8005f4e: 2301 movs r3, #1
  12945. 8005f50: e000 b.n 8005f54 <LL_ADC_IsInternalRegulatorEnabled+0x1c>
  12946. 8005f52: 2300 movs r3, #0
  12947. }
  12948. 8005f54: 4618 mov r0, r3
  12949. 8005f56: 370c adds r7, #12
  12950. 8005f58: 46bd mov sp, r7
  12951. 8005f5a: f85d 7b04 ldr.w r7, [sp], #4
  12952. 8005f5e: 4770 bx lr
  12953. 08005f60 <LL_ADC_Enable>:
  12954. * @rmtoll CR ADEN LL_ADC_Enable
  12955. * @param ADCx ADC instance
  12956. * @retval None
  12957. */
  12958. __STATIC_INLINE void LL_ADC_Enable(ADC_TypeDef *ADCx)
  12959. {
  12960. 8005f60: b480 push {r7}
  12961. 8005f62: b083 sub sp, #12
  12962. 8005f64: af00 add r7, sp, #0
  12963. 8005f66: 6078 str r0, [r7, #4]
  12964. /* Note: Write register with some additional bits forced to state reset */
  12965. /* instead of modifying only the selected bit for this function, */
  12966. /* to not interfere with bits with HW property "rs". */
  12967. MODIFY_REG(ADCx->CR,
  12968. 8005f68: 687b ldr r3, [r7, #4]
  12969. 8005f6a: 689a ldr r2, [r3, #8]
  12970. 8005f6c: 4b05 ldr r3, [pc, #20] @ (8005f84 <LL_ADC_Enable+0x24>)
  12971. 8005f6e: 4013 ands r3, r2
  12972. 8005f70: f043 0201 orr.w r2, r3, #1
  12973. 8005f74: 687b ldr r3, [r7, #4]
  12974. 8005f76: 609a str r2, [r3, #8]
  12975. ADC_CR_BITS_PROPERTY_RS,
  12976. ADC_CR_ADEN);
  12977. }
  12978. 8005f78: bf00 nop
  12979. 8005f7a: 370c adds r7, #12
  12980. 8005f7c: 46bd mov sp, r7
  12981. 8005f7e: f85d 7b04 ldr.w r7, [sp], #4
  12982. 8005f82: 4770 bx lr
  12983. 8005f84: 7fffffc0 .word 0x7fffffc0
  12984. 08005f88 <LL_ADC_Disable>:
  12985. * @rmtoll CR ADDIS LL_ADC_Disable
  12986. * @param ADCx ADC instance
  12987. * @retval None
  12988. */
  12989. __STATIC_INLINE void LL_ADC_Disable(ADC_TypeDef *ADCx)
  12990. {
  12991. 8005f88: b480 push {r7}
  12992. 8005f8a: b083 sub sp, #12
  12993. 8005f8c: af00 add r7, sp, #0
  12994. 8005f8e: 6078 str r0, [r7, #4]
  12995. /* Note: Write register with some additional bits forced to state reset */
  12996. /* instead of modifying only the selected bit for this function, */
  12997. /* to not interfere with bits with HW property "rs". */
  12998. MODIFY_REG(ADCx->CR,
  12999. 8005f90: 687b ldr r3, [r7, #4]
  13000. 8005f92: 689a ldr r2, [r3, #8]
  13001. 8005f94: 4b05 ldr r3, [pc, #20] @ (8005fac <LL_ADC_Disable+0x24>)
  13002. 8005f96: 4013 ands r3, r2
  13003. 8005f98: f043 0202 orr.w r2, r3, #2
  13004. 8005f9c: 687b ldr r3, [r7, #4]
  13005. 8005f9e: 609a str r2, [r3, #8]
  13006. ADC_CR_BITS_PROPERTY_RS,
  13007. ADC_CR_ADDIS);
  13008. }
  13009. 8005fa0: bf00 nop
  13010. 8005fa2: 370c adds r7, #12
  13011. 8005fa4: 46bd mov sp, r7
  13012. 8005fa6: f85d 7b04 ldr.w r7, [sp], #4
  13013. 8005faa: 4770 bx lr
  13014. 8005fac: 7fffffc0 .word 0x7fffffc0
  13015. 08005fb0 <LL_ADC_IsEnabled>:
  13016. * @rmtoll CR ADEN LL_ADC_IsEnabled
  13017. * @param ADCx ADC instance
  13018. * @retval 0: ADC is disabled, 1: ADC is enabled.
  13019. */
  13020. __STATIC_INLINE uint32_t LL_ADC_IsEnabled(ADC_TypeDef *ADCx)
  13021. {
  13022. 8005fb0: b480 push {r7}
  13023. 8005fb2: b083 sub sp, #12
  13024. 8005fb4: af00 add r7, sp, #0
  13025. 8005fb6: 6078 str r0, [r7, #4]
  13026. return ((READ_BIT(ADCx->CR, ADC_CR_ADEN) == (ADC_CR_ADEN)) ? 1UL : 0UL);
  13027. 8005fb8: 687b ldr r3, [r7, #4]
  13028. 8005fba: 689b ldr r3, [r3, #8]
  13029. 8005fbc: f003 0301 and.w r3, r3, #1
  13030. 8005fc0: 2b01 cmp r3, #1
  13031. 8005fc2: d101 bne.n 8005fc8 <LL_ADC_IsEnabled+0x18>
  13032. 8005fc4: 2301 movs r3, #1
  13033. 8005fc6: e000 b.n 8005fca <LL_ADC_IsEnabled+0x1a>
  13034. 8005fc8: 2300 movs r3, #0
  13035. }
  13036. 8005fca: 4618 mov r0, r3
  13037. 8005fcc: 370c adds r7, #12
  13038. 8005fce: 46bd mov sp, r7
  13039. 8005fd0: f85d 7b04 ldr.w r7, [sp], #4
  13040. 8005fd4: 4770 bx lr
  13041. 08005fd6 <LL_ADC_IsDisableOngoing>:
  13042. * @rmtoll CR ADDIS LL_ADC_IsDisableOngoing
  13043. * @param ADCx ADC instance
  13044. * @retval 0: no ADC disable command on going.
  13045. */
  13046. __STATIC_INLINE uint32_t LL_ADC_IsDisableOngoing(ADC_TypeDef *ADCx)
  13047. {
  13048. 8005fd6: b480 push {r7}
  13049. 8005fd8: b083 sub sp, #12
  13050. 8005fda: af00 add r7, sp, #0
  13051. 8005fdc: 6078 str r0, [r7, #4]
  13052. return ((READ_BIT(ADCx->CR, ADC_CR_ADDIS) == (ADC_CR_ADDIS)) ? 1UL : 0UL);
  13053. 8005fde: 687b ldr r3, [r7, #4]
  13054. 8005fe0: 689b ldr r3, [r3, #8]
  13055. 8005fe2: f003 0302 and.w r3, r3, #2
  13056. 8005fe6: 2b02 cmp r3, #2
  13057. 8005fe8: d101 bne.n 8005fee <LL_ADC_IsDisableOngoing+0x18>
  13058. 8005fea: 2301 movs r3, #1
  13059. 8005fec: e000 b.n 8005ff0 <LL_ADC_IsDisableOngoing+0x1a>
  13060. 8005fee: 2300 movs r3, #0
  13061. }
  13062. 8005ff0: 4618 mov r0, r3
  13063. 8005ff2: 370c adds r7, #12
  13064. 8005ff4: 46bd mov sp, r7
  13065. 8005ff6: f85d 7b04 ldr.w r7, [sp], #4
  13066. 8005ffa: 4770 bx lr
  13067. 08005ffc <LL_ADC_REG_StartConversion>:
  13068. * @rmtoll CR ADSTART LL_ADC_REG_StartConversion
  13069. * @param ADCx ADC instance
  13070. * @retval None
  13071. */
  13072. __STATIC_INLINE void LL_ADC_REG_StartConversion(ADC_TypeDef *ADCx)
  13073. {
  13074. 8005ffc: b480 push {r7}
  13075. 8005ffe: b083 sub sp, #12
  13076. 8006000: af00 add r7, sp, #0
  13077. 8006002: 6078 str r0, [r7, #4]
  13078. /* Note: Write register with some additional bits forced to state reset */
  13079. /* instead of modifying only the selected bit for this function, */
  13080. /* to not interfere with bits with HW property "rs". */
  13081. MODIFY_REG(ADCx->CR,
  13082. 8006004: 687b ldr r3, [r7, #4]
  13083. 8006006: 689a ldr r2, [r3, #8]
  13084. 8006008: 4b05 ldr r3, [pc, #20] @ (8006020 <LL_ADC_REG_StartConversion+0x24>)
  13085. 800600a: 4013 ands r3, r2
  13086. 800600c: f043 0204 orr.w r2, r3, #4
  13087. 8006010: 687b ldr r3, [r7, #4]
  13088. 8006012: 609a str r2, [r3, #8]
  13089. ADC_CR_BITS_PROPERTY_RS,
  13090. ADC_CR_ADSTART);
  13091. }
  13092. 8006014: bf00 nop
  13093. 8006016: 370c adds r7, #12
  13094. 8006018: 46bd mov sp, r7
  13095. 800601a: f85d 7b04 ldr.w r7, [sp], #4
  13096. 800601e: 4770 bx lr
  13097. 8006020: 7fffffc0 .word 0x7fffffc0
  13098. 08006024 <LL_ADC_REG_IsConversionOngoing>:
  13099. * @rmtoll CR ADSTART LL_ADC_REG_IsConversionOngoing
  13100. * @param ADCx ADC instance
  13101. * @retval 0: no conversion is on going on ADC group regular.
  13102. */
  13103. __STATIC_INLINE uint32_t LL_ADC_REG_IsConversionOngoing(ADC_TypeDef *ADCx)
  13104. {
  13105. 8006024: b480 push {r7}
  13106. 8006026: b083 sub sp, #12
  13107. 8006028: af00 add r7, sp, #0
  13108. 800602a: 6078 str r0, [r7, #4]
  13109. return ((READ_BIT(ADCx->CR, ADC_CR_ADSTART) == (ADC_CR_ADSTART)) ? 1UL : 0UL);
  13110. 800602c: 687b ldr r3, [r7, #4]
  13111. 800602e: 689b ldr r3, [r3, #8]
  13112. 8006030: f003 0304 and.w r3, r3, #4
  13113. 8006034: 2b04 cmp r3, #4
  13114. 8006036: d101 bne.n 800603c <LL_ADC_REG_IsConversionOngoing+0x18>
  13115. 8006038: 2301 movs r3, #1
  13116. 800603a: e000 b.n 800603e <LL_ADC_REG_IsConversionOngoing+0x1a>
  13117. 800603c: 2300 movs r3, #0
  13118. }
  13119. 800603e: 4618 mov r0, r3
  13120. 8006040: 370c adds r7, #12
  13121. 8006042: 46bd mov sp, r7
  13122. 8006044: f85d 7b04 ldr.w r7, [sp], #4
  13123. 8006048: 4770 bx lr
  13124. 0800604a <LL_ADC_INJ_IsConversionOngoing>:
  13125. * @rmtoll CR JADSTART LL_ADC_INJ_IsConversionOngoing
  13126. * @param ADCx ADC instance
  13127. * @retval 0: no conversion is on going on ADC group injected.
  13128. */
  13129. __STATIC_INLINE uint32_t LL_ADC_INJ_IsConversionOngoing(ADC_TypeDef *ADCx)
  13130. {
  13131. 800604a: b480 push {r7}
  13132. 800604c: b083 sub sp, #12
  13133. 800604e: af00 add r7, sp, #0
  13134. 8006050: 6078 str r0, [r7, #4]
  13135. return ((READ_BIT(ADCx->CR, ADC_CR_JADSTART) == (ADC_CR_JADSTART)) ? 1UL : 0UL);
  13136. 8006052: 687b ldr r3, [r7, #4]
  13137. 8006054: 689b ldr r3, [r3, #8]
  13138. 8006056: f003 0308 and.w r3, r3, #8
  13139. 800605a: 2b08 cmp r3, #8
  13140. 800605c: d101 bne.n 8006062 <LL_ADC_INJ_IsConversionOngoing+0x18>
  13141. 800605e: 2301 movs r3, #1
  13142. 8006060: e000 b.n 8006064 <LL_ADC_INJ_IsConversionOngoing+0x1a>
  13143. 8006062: 2300 movs r3, #0
  13144. }
  13145. 8006064: 4618 mov r0, r3
  13146. 8006066: 370c adds r7, #12
  13147. 8006068: 46bd mov sp, r7
  13148. 800606a: f85d 7b04 ldr.w r7, [sp], #4
  13149. 800606e: 4770 bx lr
  13150. 08006070 <HAL_ADC_Init>:
  13151. * without disabling the other ADCs.
  13152. * @param hadc ADC handle
  13153. * @retval HAL status
  13154. */
  13155. HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef *hadc)
  13156. {
  13157. 8006070: b590 push {r4, r7, lr}
  13158. 8006072: b089 sub sp, #36 @ 0x24
  13159. 8006074: af00 add r7, sp, #0
  13160. 8006076: 6078 str r0, [r7, #4]
  13161. HAL_StatusTypeDef tmp_hal_status = HAL_OK;
  13162. 8006078: 2300 movs r3, #0
  13163. 800607a: 77fb strb r3, [r7, #31]
  13164. uint32_t tmpCFGR;
  13165. uint32_t tmp_adc_reg_is_conversion_on_going;
  13166. __IO uint32_t wait_loop_index = 0UL;
  13167. 800607c: 2300 movs r3, #0
  13168. 800607e: 60bb str r3, [r7, #8]
  13169. uint32_t tmp_adc_is_conversion_on_going_regular;
  13170. uint32_t tmp_adc_is_conversion_on_going_injected;
  13171. /* Check ADC handle */
  13172. if (hadc == NULL)
  13173. 8006080: 687b ldr r3, [r7, #4]
  13174. 8006082: 2b00 cmp r3, #0
  13175. 8006084: d101 bne.n 800608a <HAL_ADC_Init+0x1a>
  13176. {
  13177. return HAL_ERROR;
  13178. 8006086: 2301 movs r3, #1
  13179. 8006088: e18f b.n 80063aa <HAL_ADC_Init+0x33a>
  13180. assert_param(IS_ADC_EOC_SELECTION(hadc->Init.EOCSelection));
  13181. assert_param(IS_ADC_OVERRUN(hadc->Init.Overrun));
  13182. assert_param(IS_FUNCTIONAL_STATE(hadc->Init.LowPowerAutoWait));
  13183. assert_param(IS_FUNCTIONAL_STATE(hadc->Init.OversamplingMode));
  13184. if (hadc->Init.ScanConvMode != ADC_SCAN_DISABLE)
  13185. 800608a: 687b ldr r3, [r7, #4]
  13186. 800608c: 68db ldr r3, [r3, #12]
  13187. 800608e: 2b00 cmp r3, #0
  13188. /* DISCEN and CONT bits cannot be set at the same time */
  13189. assert_param(!((hadc->Init.DiscontinuousConvMode == ENABLE) && (hadc->Init.ContinuousConvMode == ENABLE)));
  13190. /* Actions performed only if ADC is coming from state reset: */
  13191. /* - Initialization of ADC MSP */
  13192. if (hadc->State == HAL_ADC_STATE_RESET)
  13193. 8006090: 687b ldr r3, [r7, #4]
  13194. 8006092: 6d5b ldr r3, [r3, #84] @ 0x54
  13195. 8006094: 2b00 cmp r3, #0
  13196. 8006096: d109 bne.n 80060ac <HAL_ADC_Init+0x3c>
  13197. /* Init the low level hardware */
  13198. hadc->MspInitCallback(hadc);
  13199. #else
  13200. /* Init the low level hardware */
  13201. HAL_ADC_MspInit(hadc);
  13202. 8006098: 6878 ldr r0, [r7, #4]
  13203. 800609a: f7fd fd7f bl 8003b9c <HAL_ADC_MspInit>
  13204. #endif /* USE_HAL_ADC_REGISTER_CALLBACKS */
  13205. /* Set ADC error code to none */
  13206. ADC_CLEAR_ERRORCODE(hadc);
  13207. 800609e: 687b ldr r3, [r7, #4]
  13208. 80060a0: 2200 movs r2, #0
  13209. 80060a2: 659a str r2, [r3, #88] @ 0x58
  13210. /* Initialize Lock */
  13211. hadc->Lock = HAL_UNLOCKED;
  13212. 80060a4: 687b ldr r3, [r7, #4]
  13213. 80060a6: 2200 movs r2, #0
  13214. 80060a8: f883 2050 strb.w r2, [r3, #80] @ 0x50
  13215. }
  13216. /* - Exit from deep-power-down mode and ADC voltage regulator enable */
  13217. if (LL_ADC_IsDeepPowerDownEnabled(hadc->Instance) != 0UL)
  13218. 80060ac: 687b ldr r3, [r7, #4]
  13219. 80060ae: 681b ldr r3, [r3, #0]
  13220. 80060b0: 4618 mov r0, r3
  13221. 80060b2: f7ff ff19 bl 8005ee8 <LL_ADC_IsDeepPowerDownEnabled>
  13222. 80060b6: 4603 mov r3, r0
  13223. 80060b8: 2b00 cmp r3, #0
  13224. 80060ba: d004 beq.n 80060c6 <HAL_ADC_Init+0x56>
  13225. {
  13226. /* Disable ADC deep power down mode */
  13227. LL_ADC_DisableDeepPowerDown(hadc->Instance);
  13228. 80060bc: 687b ldr r3, [r7, #4]
  13229. 80060be: 681b ldr r3, [r3, #0]
  13230. 80060c0: 4618 mov r0, r3
  13231. 80060c2: f7ff feff bl 8005ec4 <LL_ADC_DisableDeepPowerDown>
  13232. /* System was in deep power down mode, calibration must
  13233. be relaunched or a previously saved calibration factor
  13234. re-applied once the ADC voltage regulator is enabled */
  13235. }
  13236. if (LL_ADC_IsInternalRegulatorEnabled(hadc->Instance) == 0UL)
  13237. 80060c6: 687b ldr r3, [r7, #4]
  13238. 80060c8: 681b ldr r3, [r3, #0]
  13239. 80060ca: 4618 mov r0, r3
  13240. 80060cc: f7ff ff34 bl 8005f38 <LL_ADC_IsInternalRegulatorEnabled>
  13241. 80060d0: 4603 mov r3, r0
  13242. 80060d2: 2b00 cmp r3, #0
  13243. 80060d4: d114 bne.n 8006100 <HAL_ADC_Init+0x90>
  13244. {
  13245. /* Enable ADC internal voltage regulator */
  13246. LL_ADC_EnableInternalRegulator(hadc->Instance);
  13247. 80060d6: 687b ldr r3, [r7, #4]
  13248. 80060d8: 681b ldr r3, [r3, #0]
  13249. 80060da: 4618 mov r0, r3
  13250. 80060dc: f7ff ff18 bl 8005f10 <LL_ADC_EnableInternalRegulator>
  13251. /* Note: Variable divided by 2 to compensate partially */
  13252. /* CPU processing cycles, scaling in us split to not */
  13253. /* exceed 32 bits register capacity and handle low frequency. */
  13254. wait_loop_index = ((LL_ADC_DELAY_INTERNAL_REGUL_STAB_US / 10UL) * ((SystemCoreClock / (100000UL * 2UL)) + 1UL));
  13255. 80060e0: 4b87 ldr r3, [pc, #540] @ (8006300 <HAL_ADC_Init+0x290>)
  13256. 80060e2: 681b ldr r3, [r3, #0]
  13257. 80060e4: 099b lsrs r3, r3, #6
  13258. 80060e6: 4a87 ldr r2, [pc, #540] @ (8006304 <HAL_ADC_Init+0x294>)
  13259. 80060e8: fba2 2303 umull r2, r3, r2, r3
  13260. 80060ec: 099b lsrs r3, r3, #6
  13261. 80060ee: 3301 adds r3, #1
  13262. 80060f0: 60bb str r3, [r7, #8]
  13263. while (wait_loop_index != 0UL)
  13264. 80060f2: e002 b.n 80060fa <HAL_ADC_Init+0x8a>
  13265. {
  13266. wait_loop_index--;
  13267. 80060f4: 68bb ldr r3, [r7, #8]
  13268. 80060f6: 3b01 subs r3, #1
  13269. 80060f8: 60bb str r3, [r7, #8]
  13270. while (wait_loop_index != 0UL)
  13271. 80060fa: 68bb ldr r3, [r7, #8]
  13272. 80060fc: 2b00 cmp r3, #0
  13273. 80060fe: d1f9 bne.n 80060f4 <HAL_ADC_Init+0x84>
  13274. }
  13275. /* Verification that ADC voltage regulator is correctly enabled, whether */
  13276. /* or not ADC is coming from state reset (if any potential problem of */
  13277. /* clocking, voltage regulator would not be enabled). */
  13278. if (LL_ADC_IsInternalRegulatorEnabled(hadc->Instance) == 0UL)
  13279. 8006100: 687b ldr r3, [r7, #4]
  13280. 8006102: 681b ldr r3, [r3, #0]
  13281. 8006104: 4618 mov r0, r3
  13282. 8006106: f7ff ff17 bl 8005f38 <LL_ADC_IsInternalRegulatorEnabled>
  13283. 800610a: 4603 mov r3, r0
  13284. 800610c: 2b00 cmp r3, #0
  13285. 800610e: d10d bne.n 800612c <HAL_ADC_Init+0xbc>
  13286. {
  13287. /* Update ADC state machine to error */
  13288. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
  13289. 8006110: 687b ldr r3, [r7, #4]
  13290. 8006112: 6d5b ldr r3, [r3, #84] @ 0x54
  13291. 8006114: f043 0210 orr.w r2, r3, #16
  13292. 8006118: 687b ldr r3, [r7, #4]
  13293. 800611a: 655a str r2, [r3, #84] @ 0x54
  13294. /* Set ADC error code to ADC peripheral internal error */
  13295. SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);
  13296. 800611c: 687b ldr r3, [r7, #4]
  13297. 800611e: 6d9b ldr r3, [r3, #88] @ 0x58
  13298. 8006120: f043 0201 orr.w r2, r3, #1
  13299. 8006124: 687b ldr r3, [r7, #4]
  13300. 8006126: 659a str r2, [r3, #88] @ 0x58
  13301. tmp_hal_status = HAL_ERROR;
  13302. 8006128: 2301 movs r3, #1
  13303. 800612a: 77fb strb r3, [r7, #31]
  13304. /* Configuration of ADC parameters if previous preliminary actions are */
  13305. /* correctly completed and if there is no conversion on going on regular */
  13306. /* group (ADC may already be enabled at this point if HAL_ADC_Init() is */
  13307. /* called to update a parameter on the fly). */
  13308. tmp_adc_reg_is_conversion_on_going = LL_ADC_REG_IsConversionOngoing(hadc->Instance);
  13309. 800612c: 687b ldr r3, [r7, #4]
  13310. 800612e: 681b ldr r3, [r3, #0]
  13311. 8006130: 4618 mov r0, r3
  13312. 8006132: f7ff ff77 bl 8006024 <LL_ADC_REG_IsConversionOngoing>
  13313. 8006136: 6178 str r0, [r7, #20]
  13314. if (((hadc->State & HAL_ADC_STATE_ERROR_INTERNAL) == 0UL)
  13315. 8006138: 687b ldr r3, [r7, #4]
  13316. 800613a: 6d5b ldr r3, [r3, #84] @ 0x54
  13317. 800613c: f003 0310 and.w r3, r3, #16
  13318. 8006140: 2b00 cmp r3, #0
  13319. 8006142: f040 8129 bne.w 8006398 <HAL_ADC_Init+0x328>
  13320. && (tmp_adc_reg_is_conversion_on_going == 0UL)
  13321. 8006146: 697b ldr r3, [r7, #20]
  13322. 8006148: 2b00 cmp r3, #0
  13323. 800614a: f040 8125 bne.w 8006398 <HAL_ADC_Init+0x328>
  13324. )
  13325. {
  13326. /* Set ADC state */
  13327. ADC_STATE_CLR_SET(hadc->State,
  13328. 800614e: 687b ldr r3, [r7, #4]
  13329. 8006150: 6d5b ldr r3, [r3, #84] @ 0x54
  13330. 8006152: f423 7381 bic.w r3, r3, #258 @ 0x102
  13331. 8006156: f043 0202 orr.w r2, r3, #2
  13332. 800615a: 687b ldr r3, [r7, #4]
  13333. 800615c: 655a str r2, [r3, #84] @ 0x54
  13334. /* Configuration of common ADC parameters */
  13335. /* Parameters update conditioned to ADC state: */
  13336. /* Parameters that can be updated only when ADC is disabled: */
  13337. /* - clock configuration */
  13338. if (LL_ADC_IsEnabled(hadc->Instance) == 0UL)
  13339. 800615e: 687b ldr r3, [r7, #4]
  13340. 8006160: 681b ldr r3, [r3, #0]
  13341. 8006162: 4618 mov r0, r3
  13342. 8006164: f7ff ff24 bl 8005fb0 <LL_ADC_IsEnabled>
  13343. 8006168: 4603 mov r3, r0
  13344. 800616a: 2b00 cmp r3, #0
  13345. 800616c: d136 bne.n 80061dc <HAL_ADC_Init+0x16c>
  13346. {
  13347. if (__LL_ADC_IS_ENABLED_ALL_COMMON_INSTANCE(__LL_ADC_COMMON_INSTANCE(hadc->Instance)) == 0UL)
  13348. 800616e: 687b ldr r3, [r7, #4]
  13349. 8006170: 681b ldr r3, [r3, #0]
  13350. 8006172: 4a65 ldr r2, [pc, #404] @ (8006308 <HAL_ADC_Init+0x298>)
  13351. 8006174: 4293 cmp r3, r2
  13352. 8006176: d004 beq.n 8006182 <HAL_ADC_Init+0x112>
  13353. 8006178: 687b ldr r3, [r7, #4]
  13354. 800617a: 681b ldr r3, [r3, #0]
  13355. 800617c: 4a63 ldr r2, [pc, #396] @ (800630c <HAL_ADC_Init+0x29c>)
  13356. 800617e: 4293 cmp r3, r2
  13357. 8006180: d10e bne.n 80061a0 <HAL_ADC_Init+0x130>
  13358. 8006182: 4861 ldr r0, [pc, #388] @ (8006308 <HAL_ADC_Init+0x298>)
  13359. 8006184: f7ff ff14 bl 8005fb0 <LL_ADC_IsEnabled>
  13360. 8006188: 4604 mov r4, r0
  13361. 800618a: 4860 ldr r0, [pc, #384] @ (800630c <HAL_ADC_Init+0x29c>)
  13362. 800618c: f7ff ff10 bl 8005fb0 <LL_ADC_IsEnabled>
  13363. 8006190: 4603 mov r3, r0
  13364. 8006192: 4323 orrs r3, r4
  13365. 8006194: 2b00 cmp r3, #0
  13366. 8006196: bf0c ite eq
  13367. 8006198: 2301 moveq r3, #1
  13368. 800619a: 2300 movne r3, #0
  13369. 800619c: b2db uxtb r3, r3
  13370. 800619e: e008 b.n 80061b2 <HAL_ADC_Init+0x142>
  13371. 80061a0: 485b ldr r0, [pc, #364] @ (8006310 <HAL_ADC_Init+0x2a0>)
  13372. 80061a2: f7ff ff05 bl 8005fb0 <LL_ADC_IsEnabled>
  13373. 80061a6: 4603 mov r3, r0
  13374. 80061a8: 2b00 cmp r3, #0
  13375. 80061aa: bf0c ite eq
  13376. 80061ac: 2301 moveq r3, #1
  13377. 80061ae: 2300 movne r3, #0
  13378. 80061b0: b2db uxtb r3, r3
  13379. 80061b2: 2b00 cmp r3, #0
  13380. 80061b4: d012 beq.n 80061dc <HAL_ADC_Init+0x16c>
  13381. /* parameters: MDMA, DMACFG, DELAY, DUAL (set by API */
  13382. /* HAL_ADCEx_MultiModeConfigChannel() ) */
  13383. /* - internal measurement paths: Vbat, temperature sensor, Vref */
  13384. /* (set into HAL_ADC_ConfigChannel() or */
  13385. /* HAL_ADCEx_InjectedConfigChannel() ) */
  13386. LL_ADC_SetCommonClock(__LL_ADC_COMMON_INSTANCE(hadc->Instance), hadc->Init.ClockPrescaler);
  13387. 80061b6: 687b ldr r3, [r7, #4]
  13388. 80061b8: 681b ldr r3, [r3, #0]
  13389. 80061ba: 4a53 ldr r2, [pc, #332] @ (8006308 <HAL_ADC_Init+0x298>)
  13390. 80061bc: 4293 cmp r3, r2
  13391. 80061be: d004 beq.n 80061ca <HAL_ADC_Init+0x15a>
  13392. 80061c0: 687b ldr r3, [r7, #4]
  13393. 80061c2: 681b ldr r3, [r3, #0]
  13394. 80061c4: 4a51 ldr r2, [pc, #324] @ (800630c <HAL_ADC_Init+0x29c>)
  13395. 80061c6: 4293 cmp r3, r2
  13396. 80061c8: d101 bne.n 80061ce <HAL_ADC_Init+0x15e>
  13397. 80061ca: 4a52 ldr r2, [pc, #328] @ (8006314 <HAL_ADC_Init+0x2a4>)
  13398. 80061cc: e000 b.n 80061d0 <HAL_ADC_Init+0x160>
  13399. 80061ce: 4a52 ldr r2, [pc, #328] @ (8006318 <HAL_ADC_Init+0x2a8>)
  13400. 80061d0: 687b ldr r3, [r7, #4]
  13401. 80061d2: 685b ldr r3, [r3, #4]
  13402. 80061d4: 4619 mov r1, r3
  13403. 80061d6: 4610 mov r0, r2
  13404. 80061d8: f7ff fd3c bl 8005c54 <LL_ADC_SetCommonClock>
  13405. ADC_CFGR_REG_DISCONTINUOUS((uint32_t)hadc->Init.DiscontinuousConvMode));
  13406. }
  13407. #else
  13408. if ((HAL_GetREVID() > REV_ID_Y) && (ADC_RESOLUTION_8B == hadc->Init.Resolution))
  13409. 80061dc: f7ff fcf4 bl 8005bc8 <HAL_GetREVID>
  13410. 80061e0: 4603 mov r3, r0
  13411. 80061e2: f241 0203 movw r2, #4099 @ 0x1003
  13412. 80061e6: 4293 cmp r3, r2
  13413. 80061e8: d914 bls.n 8006214 <HAL_ADC_Init+0x1a4>
  13414. 80061ea: 687b ldr r3, [r7, #4]
  13415. 80061ec: 689b ldr r3, [r3, #8]
  13416. 80061ee: 2b10 cmp r3, #16
  13417. 80061f0: d110 bne.n 8006214 <HAL_ADC_Init+0x1a4>
  13418. {
  13419. /* for STM32H7 silicon rev.B and above , ADC_CFGR_RES value for 8bits resolution is : b111 */
  13420. tmpCFGR = (ADC_CFGR_CONTINUOUS((uint32_t)hadc->Init.ContinuousConvMode) |
  13421. 80061f2: 687b ldr r3, [r7, #4]
  13422. 80061f4: 7d5b ldrb r3, [r3, #21]
  13423. 80061f6: 035a lsls r2, r3, #13
  13424. hadc->Init.Overrun |
  13425. 80061f8: 687b ldr r3, [r7, #4]
  13426. 80061fa: 6b1b ldr r3, [r3, #48] @ 0x30
  13427. tmpCFGR = (ADC_CFGR_CONTINUOUS((uint32_t)hadc->Init.ContinuousConvMode) |
  13428. 80061fc: 431a orrs r2, r3
  13429. hadc->Init.Resolution | (ADC_CFGR_RES_1 | ADC_CFGR_RES_0) |
  13430. 80061fe: 687b ldr r3, [r7, #4]
  13431. 8006200: 689b ldr r3, [r3, #8]
  13432. hadc->Init.Overrun |
  13433. 8006202: 431a orrs r2, r3
  13434. ADC_CFGR_REG_DISCONTINUOUS((uint32_t)hadc->Init.DiscontinuousConvMode));
  13435. 8006204: 687b ldr r3, [r7, #4]
  13436. 8006206: 7f1b ldrb r3, [r3, #28]
  13437. 8006208: 041b lsls r3, r3, #16
  13438. hadc->Init.Resolution | (ADC_CFGR_RES_1 | ADC_CFGR_RES_0) |
  13439. 800620a: 4313 orrs r3, r2
  13440. tmpCFGR = (ADC_CFGR_CONTINUOUS((uint32_t)hadc->Init.ContinuousConvMode) |
  13441. 800620c: f043 030c orr.w r3, r3, #12
  13442. 8006210: 61bb str r3, [r7, #24]
  13443. 8006212: e00d b.n 8006230 <HAL_ADC_Init+0x1c0>
  13444. }
  13445. else
  13446. {
  13447. tmpCFGR = (ADC_CFGR_CONTINUOUS((uint32_t)hadc->Init.ContinuousConvMode) |
  13448. 8006214: 687b ldr r3, [r7, #4]
  13449. 8006216: 7d5b ldrb r3, [r3, #21]
  13450. 8006218: 035a lsls r2, r3, #13
  13451. hadc->Init.Overrun |
  13452. 800621a: 687b ldr r3, [r7, #4]
  13453. 800621c: 6b1b ldr r3, [r3, #48] @ 0x30
  13454. tmpCFGR = (ADC_CFGR_CONTINUOUS((uint32_t)hadc->Init.ContinuousConvMode) |
  13455. 800621e: 431a orrs r2, r3
  13456. hadc->Init.Resolution |
  13457. 8006220: 687b ldr r3, [r7, #4]
  13458. 8006222: 689b ldr r3, [r3, #8]
  13459. hadc->Init.Overrun |
  13460. 8006224: 431a orrs r2, r3
  13461. ADC_CFGR_REG_DISCONTINUOUS((uint32_t)hadc->Init.DiscontinuousConvMode));
  13462. 8006226: 687b ldr r3, [r7, #4]
  13463. 8006228: 7f1b ldrb r3, [r3, #28]
  13464. 800622a: 041b lsls r3, r3, #16
  13465. tmpCFGR = (ADC_CFGR_CONTINUOUS((uint32_t)hadc->Init.ContinuousConvMode) |
  13466. 800622c: 4313 orrs r3, r2
  13467. 800622e: 61bb str r3, [r7, #24]
  13468. }
  13469. #endif /* ADC_VER_V5_3 */
  13470. if (hadc->Init.DiscontinuousConvMode == ENABLE)
  13471. 8006230: 687b ldr r3, [r7, #4]
  13472. 8006232: 7f1b ldrb r3, [r3, #28]
  13473. 8006234: 2b01 cmp r3, #1
  13474. 8006236: d106 bne.n 8006246 <HAL_ADC_Init+0x1d6>
  13475. {
  13476. tmpCFGR |= ADC_CFGR_DISCONTINUOUS_NUM(hadc->Init.NbrOfDiscConversion);
  13477. 8006238: 687b ldr r3, [r7, #4]
  13478. 800623a: 6a1b ldr r3, [r3, #32]
  13479. 800623c: 3b01 subs r3, #1
  13480. 800623e: 045b lsls r3, r3, #17
  13481. 8006240: 69ba ldr r2, [r7, #24]
  13482. 8006242: 4313 orrs r3, r2
  13483. 8006244: 61bb str r3, [r7, #24]
  13484. /* Enable external trigger if trigger selection is different of software */
  13485. /* start. */
  13486. /* Note: This configuration keeps the hardware feature of parameter */
  13487. /* ExternalTrigConvEdge "trigger edge none" equivalent to */
  13488. /* software start. */
  13489. if (hadc->Init.ExternalTrigConv != ADC_SOFTWARE_START)
  13490. 8006246: 687b ldr r3, [r7, #4]
  13491. 8006248: 6a5b ldr r3, [r3, #36] @ 0x24
  13492. 800624a: 2b00 cmp r3, #0
  13493. 800624c: d009 beq.n 8006262 <HAL_ADC_Init+0x1f2>
  13494. {
  13495. tmpCFGR |= ((hadc->Init.ExternalTrigConv & ADC_CFGR_EXTSEL)
  13496. 800624e: 687b ldr r3, [r7, #4]
  13497. 8006250: 6a5b ldr r3, [r3, #36] @ 0x24
  13498. 8006252: f403 7278 and.w r2, r3, #992 @ 0x3e0
  13499. | hadc->Init.ExternalTrigConvEdge
  13500. 8006256: 687b ldr r3, [r7, #4]
  13501. 8006258: 6a9b ldr r3, [r3, #40] @ 0x28
  13502. 800625a: 4313 orrs r3, r2
  13503. tmpCFGR |= ((hadc->Init.ExternalTrigConv & ADC_CFGR_EXTSEL)
  13504. 800625c: 69ba ldr r2, [r7, #24]
  13505. 800625e: 4313 orrs r3, r2
  13506. 8006260: 61bb str r3, [r7, #24]
  13507. /* Update Configuration Register CFGR */
  13508. MODIFY_REG(hadc->Instance->CFGR, ADC_CFGR_FIELDS_1, tmpCFGR);
  13509. }
  13510. #else
  13511. /* Update Configuration Register CFGR */
  13512. MODIFY_REG(hadc->Instance->CFGR, ADC_CFGR_FIELDS_1, tmpCFGR);
  13513. 8006262: 687b ldr r3, [r7, #4]
  13514. 8006264: 681b ldr r3, [r3, #0]
  13515. 8006266: 68da ldr r2, [r3, #12]
  13516. 8006268: 4b2c ldr r3, [pc, #176] @ (800631c <HAL_ADC_Init+0x2ac>)
  13517. 800626a: 4013 ands r3, r2
  13518. 800626c: 687a ldr r2, [r7, #4]
  13519. 800626e: 6812 ldr r2, [r2, #0]
  13520. 8006270: 69b9 ldr r1, [r7, #24]
  13521. 8006272: 430b orrs r3, r1
  13522. 8006274: 60d3 str r3, [r2, #12]
  13523. /* Parameters that can be updated when ADC is disabled or enabled without */
  13524. /* conversion on going on regular and injected groups: */
  13525. /* - Conversion data management Init.ConversionDataManagement */
  13526. /* - LowPowerAutoWait feature Init.LowPowerAutoWait */
  13527. /* - Oversampling parameters Init.Oversampling */
  13528. tmp_adc_is_conversion_on_going_regular = LL_ADC_REG_IsConversionOngoing(hadc->Instance);
  13529. 8006276: 687b ldr r3, [r7, #4]
  13530. 8006278: 681b ldr r3, [r3, #0]
  13531. 800627a: 4618 mov r0, r3
  13532. 800627c: f7ff fed2 bl 8006024 <LL_ADC_REG_IsConversionOngoing>
  13533. 8006280: 6138 str r0, [r7, #16]
  13534. tmp_adc_is_conversion_on_going_injected = LL_ADC_INJ_IsConversionOngoing(hadc->Instance);
  13535. 8006282: 687b ldr r3, [r7, #4]
  13536. 8006284: 681b ldr r3, [r3, #0]
  13537. 8006286: 4618 mov r0, r3
  13538. 8006288: f7ff fedf bl 800604a <LL_ADC_INJ_IsConversionOngoing>
  13539. 800628c: 60f8 str r0, [r7, #12]
  13540. if ((tmp_adc_is_conversion_on_going_regular == 0UL)
  13541. 800628e: 693b ldr r3, [r7, #16]
  13542. 8006290: 2b00 cmp r3, #0
  13543. 8006292: d15f bne.n 8006354 <HAL_ADC_Init+0x2e4>
  13544. && (tmp_adc_is_conversion_on_going_injected == 0UL)
  13545. 8006294: 68fb ldr r3, [r7, #12]
  13546. 8006296: 2b00 cmp r3, #0
  13547. 8006298: d15c bne.n 8006354 <HAL_ADC_Init+0x2e4>
  13548. ADC_CFGR_AUTOWAIT((uint32_t)hadc->Init.LowPowerAutoWait) |
  13549. ADC_CFGR_DMACONTREQ((uint32_t)hadc->Init.ConversionDataManagement));
  13550. }
  13551. #else
  13552. tmpCFGR = (
  13553. ADC_CFGR_AUTOWAIT((uint32_t)hadc->Init.LowPowerAutoWait) |
  13554. 800629a: 687b ldr r3, [r7, #4]
  13555. 800629c: 7d1b ldrb r3, [r3, #20]
  13556. 800629e: 039a lsls r2, r3, #14
  13557. ADC_CFGR_DMACONTREQ((uint32_t)hadc->Init.ConversionDataManagement));
  13558. 80062a0: 687b ldr r3, [r7, #4]
  13559. 80062a2: 6adb ldr r3, [r3, #44] @ 0x2c
  13560. tmpCFGR = (
  13561. 80062a4: 4313 orrs r3, r2
  13562. 80062a6: 61bb str r3, [r7, #24]
  13563. #endif
  13564. MODIFY_REG(hadc->Instance->CFGR, ADC_CFGR_FIELDS_2, tmpCFGR);
  13565. 80062a8: 687b ldr r3, [r7, #4]
  13566. 80062aa: 681b ldr r3, [r3, #0]
  13567. 80062ac: 68da ldr r2, [r3, #12]
  13568. 80062ae: 4b1c ldr r3, [pc, #112] @ (8006320 <HAL_ADC_Init+0x2b0>)
  13569. 80062b0: 4013 ands r3, r2
  13570. 80062b2: 687a ldr r2, [r7, #4]
  13571. 80062b4: 6812 ldr r2, [r2, #0]
  13572. 80062b6: 69b9 ldr r1, [r7, #24]
  13573. 80062b8: 430b orrs r3, r1
  13574. 80062ba: 60d3 str r3, [r2, #12]
  13575. if (hadc->Init.OversamplingMode == ENABLE)
  13576. 80062bc: 687b ldr r3, [r7, #4]
  13577. 80062be: f893 3038 ldrb.w r3, [r3, #56] @ 0x38
  13578. 80062c2: 2b01 cmp r3, #1
  13579. 80062c4: d130 bne.n 8006328 <HAL_ADC_Init+0x2b8>
  13580. #endif
  13581. assert_param(IS_ADC_RIGHT_BIT_SHIFT(hadc->Init.Oversampling.RightBitShift));
  13582. assert_param(IS_ADC_TRIGGERED_OVERSAMPLING_MODE(hadc->Init.Oversampling.TriggeredMode));
  13583. assert_param(IS_ADC_REGOVERSAMPLING_MODE(hadc->Init.Oversampling.OversamplingStopReset));
  13584. if ((hadc->Init.ExternalTrigConv == ADC_SOFTWARE_START)
  13585. 80062c6: 687b ldr r3, [r7, #4]
  13586. 80062c8: 6a5b ldr r3, [r3, #36] @ 0x24
  13587. 80062ca: 2b00 cmp r3, #0
  13588. /* - Oversampling Ratio */
  13589. /* - Right bit shift */
  13590. /* - Left bit shift */
  13591. /* - Triggered mode */
  13592. /* - Oversampling mode (continued/resumed) */
  13593. MODIFY_REG(hadc->Instance->CFGR2, ADC_CFGR2_FIELDS,
  13594. 80062cc: 687b ldr r3, [r7, #4]
  13595. 80062ce: 681b ldr r3, [r3, #0]
  13596. 80062d0: 691a ldr r2, [r3, #16]
  13597. 80062d2: 4b14 ldr r3, [pc, #80] @ (8006324 <HAL_ADC_Init+0x2b4>)
  13598. 80062d4: 4013 ands r3, r2
  13599. 80062d6: 687a ldr r2, [r7, #4]
  13600. 80062d8: 6bd2 ldr r2, [r2, #60] @ 0x3c
  13601. 80062da: 3a01 subs r2, #1
  13602. 80062dc: 0411 lsls r1, r2, #16
  13603. 80062de: 687a ldr r2, [r7, #4]
  13604. 80062e0: 6c12 ldr r2, [r2, #64] @ 0x40
  13605. 80062e2: 4311 orrs r1, r2
  13606. 80062e4: 687a ldr r2, [r7, #4]
  13607. 80062e6: 6c52 ldr r2, [r2, #68] @ 0x44
  13608. 80062e8: 4311 orrs r1, r2
  13609. 80062ea: 687a ldr r2, [r7, #4]
  13610. 80062ec: 6c92 ldr r2, [r2, #72] @ 0x48
  13611. 80062ee: 430a orrs r2, r1
  13612. 80062f0: 431a orrs r2, r3
  13613. 80062f2: 687b ldr r3, [r7, #4]
  13614. 80062f4: 681b ldr r3, [r3, #0]
  13615. 80062f6: f042 0201 orr.w r2, r2, #1
  13616. 80062fa: 611a str r2, [r3, #16]
  13617. 80062fc: e01c b.n 8006338 <HAL_ADC_Init+0x2c8>
  13618. 80062fe: bf00 nop
  13619. 8006300: 24000034 .word 0x24000034
  13620. 8006304: 053e2d63 .word 0x053e2d63
  13621. 8006308: 40022000 .word 0x40022000
  13622. 800630c: 40022100 .word 0x40022100
  13623. 8006310: 58026000 .word 0x58026000
  13624. 8006314: 40022300 .word 0x40022300
  13625. 8006318: 58026300 .word 0x58026300
  13626. 800631c: fff0c003 .word 0xfff0c003
  13627. 8006320: ffffbffc .word 0xffffbffc
  13628. 8006324: fc00f81e .word 0xfc00f81e
  13629. }
  13630. else
  13631. {
  13632. /* Disable ADC oversampling scope on ADC group regular */
  13633. CLEAR_BIT(hadc->Instance->CFGR2, ADC_CFGR2_ROVSE);
  13634. 8006328: 687b ldr r3, [r7, #4]
  13635. 800632a: 681b ldr r3, [r3, #0]
  13636. 800632c: 691a ldr r2, [r3, #16]
  13637. 800632e: 687b ldr r3, [r7, #4]
  13638. 8006330: 681b ldr r3, [r3, #0]
  13639. 8006332: f022 0201 bic.w r2, r2, #1
  13640. 8006336: 611a str r2, [r3, #16]
  13641. }
  13642. /* Set the LeftShift parameter: it is applied to the final result with or without oversampling */
  13643. MODIFY_REG(hadc->Instance->CFGR2, ADC_CFGR2_LSHIFT, hadc->Init.LeftBitShift);
  13644. 8006338: 687b ldr r3, [r7, #4]
  13645. 800633a: 681b ldr r3, [r3, #0]
  13646. 800633c: 691b ldr r3, [r3, #16]
  13647. 800633e: f023 4170 bic.w r1, r3, #4026531840 @ 0xf0000000
  13648. 8006342: 687b ldr r3, [r7, #4]
  13649. 8006344: 6b5a ldr r2, [r3, #52] @ 0x34
  13650. 8006346: 687b ldr r3, [r7, #4]
  13651. 8006348: 681b ldr r3, [r3, #0]
  13652. 800634a: 430a orrs r2, r1
  13653. 800634c: 611a str r2, [r3, #16]
  13654. /* Configure the BOOST Mode */
  13655. ADC_ConfigureBoostMode(hadc);
  13656. }
  13657. #else
  13658. /* Configure the BOOST Mode */
  13659. ADC_ConfigureBoostMode(hadc);
  13660. 800634e: 6878 ldr r0, [r7, #4]
  13661. 8006350: f000 fde2 bl 8006f18 <ADC_ConfigureBoostMode>
  13662. /* Note: Scan mode is not present by hardware on this device, but */
  13663. /* emulated by software for alignment over all STM32 devices. */
  13664. /* - if scan mode is enabled, regular channels sequence length is set to */
  13665. /* parameter "NbrOfConversion". */
  13666. if (hadc->Init.ScanConvMode == ADC_SCAN_ENABLE)
  13667. 8006354: 687b ldr r3, [r7, #4]
  13668. 8006356: 68db ldr r3, [r3, #12]
  13669. 8006358: 2b01 cmp r3, #1
  13670. 800635a: d10c bne.n 8006376 <HAL_ADC_Init+0x306>
  13671. {
  13672. /* Set number of ranks in regular group sequencer */
  13673. MODIFY_REG(hadc->Instance->SQR1, ADC_SQR1_L, (hadc->Init.NbrOfConversion - (uint8_t)1));
  13674. 800635c: 687b ldr r3, [r7, #4]
  13675. 800635e: 681b ldr r3, [r3, #0]
  13676. 8006360: 6b1b ldr r3, [r3, #48] @ 0x30
  13677. 8006362: f023 010f bic.w r1, r3, #15
  13678. 8006366: 687b ldr r3, [r7, #4]
  13679. 8006368: 699b ldr r3, [r3, #24]
  13680. 800636a: 1e5a subs r2, r3, #1
  13681. 800636c: 687b ldr r3, [r7, #4]
  13682. 800636e: 681b ldr r3, [r3, #0]
  13683. 8006370: 430a orrs r2, r1
  13684. 8006372: 631a str r2, [r3, #48] @ 0x30
  13685. 8006374: e007 b.n 8006386 <HAL_ADC_Init+0x316>
  13686. }
  13687. else
  13688. {
  13689. CLEAR_BIT(hadc->Instance->SQR1, ADC_SQR1_L);
  13690. 8006376: 687b ldr r3, [r7, #4]
  13691. 8006378: 681b ldr r3, [r3, #0]
  13692. 800637a: 6b1a ldr r2, [r3, #48] @ 0x30
  13693. 800637c: 687b ldr r3, [r7, #4]
  13694. 800637e: 681b ldr r3, [r3, #0]
  13695. 8006380: f022 020f bic.w r2, r2, #15
  13696. 8006384: 631a str r2, [r3, #48] @ 0x30
  13697. }
  13698. /* Initialize the ADC state */
  13699. /* Clear HAL_ADC_STATE_BUSY_INTERNAL bit, set HAL_ADC_STATE_READY bit */
  13700. ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_BUSY_INTERNAL, HAL_ADC_STATE_READY);
  13701. 8006386: 687b ldr r3, [r7, #4]
  13702. 8006388: 6d5b ldr r3, [r3, #84] @ 0x54
  13703. 800638a: f023 0303 bic.w r3, r3, #3
  13704. 800638e: f043 0201 orr.w r2, r3, #1
  13705. 8006392: 687b ldr r3, [r7, #4]
  13706. 8006394: 655a str r2, [r3, #84] @ 0x54
  13707. 8006396: e007 b.n 80063a8 <HAL_ADC_Init+0x338>
  13708. }
  13709. else
  13710. {
  13711. /* Update ADC state machine to error */
  13712. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
  13713. 8006398: 687b ldr r3, [r7, #4]
  13714. 800639a: 6d5b ldr r3, [r3, #84] @ 0x54
  13715. 800639c: f043 0210 orr.w r2, r3, #16
  13716. 80063a0: 687b ldr r3, [r7, #4]
  13717. 80063a2: 655a str r2, [r3, #84] @ 0x54
  13718. tmp_hal_status = HAL_ERROR;
  13719. 80063a4: 2301 movs r3, #1
  13720. 80063a6: 77fb strb r3, [r7, #31]
  13721. }
  13722. /* Return function status */
  13723. return tmp_hal_status;
  13724. 80063a8: 7ffb ldrb r3, [r7, #31]
  13725. }
  13726. 80063aa: 4618 mov r0, r3
  13727. 80063ac: 3724 adds r7, #36 @ 0x24
  13728. 80063ae: 46bd mov sp, r7
  13729. 80063b0: bd90 pop {r4, r7, pc}
  13730. 80063b2: bf00 nop
  13731. 080063b4 <HAL_ADC_Start_DMA>:
  13732. * @param pData Destination Buffer address.
  13733. * @param Length Number of data to be transferred from ADC peripheral to memory
  13734. * @retval HAL status.
  13735. */
  13736. HAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef *hadc, uint32_t *pData, uint32_t Length)
  13737. {
  13738. 80063b4: b580 push {r7, lr}
  13739. 80063b6: b086 sub sp, #24
  13740. 80063b8: af00 add r7, sp, #0
  13741. 80063ba: 60f8 str r0, [r7, #12]
  13742. 80063bc: 60b9 str r1, [r7, #8]
  13743. 80063be: 607a str r2, [r7, #4]
  13744. HAL_StatusTypeDef tmp_hal_status;
  13745. uint32_t tmp_multimode_config = LL_ADC_GetMultimode(__LL_ADC_COMMON_INSTANCE(hadc->Instance));
  13746. 80063c0: 68fb ldr r3, [r7, #12]
  13747. 80063c2: 681b ldr r3, [r3, #0]
  13748. 80063c4: 4a55 ldr r2, [pc, #340] @ (800651c <HAL_ADC_Start_DMA+0x168>)
  13749. 80063c6: 4293 cmp r3, r2
  13750. 80063c8: d004 beq.n 80063d4 <HAL_ADC_Start_DMA+0x20>
  13751. 80063ca: 68fb ldr r3, [r7, #12]
  13752. 80063cc: 681b ldr r3, [r3, #0]
  13753. 80063ce: 4a54 ldr r2, [pc, #336] @ (8006520 <HAL_ADC_Start_DMA+0x16c>)
  13754. 80063d0: 4293 cmp r3, r2
  13755. 80063d2: d101 bne.n 80063d8 <HAL_ADC_Start_DMA+0x24>
  13756. 80063d4: 4b53 ldr r3, [pc, #332] @ (8006524 <HAL_ADC_Start_DMA+0x170>)
  13757. 80063d6: e000 b.n 80063da <HAL_ADC_Start_DMA+0x26>
  13758. 80063d8: 4b53 ldr r3, [pc, #332] @ (8006528 <HAL_ADC_Start_DMA+0x174>)
  13759. 80063da: 4618 mov r0, r3
  13760. 80063dc: f7ff fd64 bl 8005ea8 <LL_ADC_GetMultimode>
  13761. 80063e0: 6138 str r0, [r7, #16]
  13762. /* Check the parameters */
  13763. assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
  13764. /* Perform ADC enable and conversion start if no conversion is on going */
  13765. if (LL_ADC_REG_IsConversionOngoing(hadc->Instance) == 0UL)
  13766. 80063e2: 68fb ldr r3, [r7, #12]
  13767. 80063e4: 681b ldr r3, [r3, #0]
  13768. 80063e6: 4618 mov r0, r3
  13769. 80063e8: f7ff fe1c bl 8006024 <LL_ADC_REG_IsConversionOngoing>
  13770. 80063ec: 4603 mov r3, r0
  13771. 80063ee: 2b00 cmp r3, #0
  13772. 80063f0: f040 808c bne.w 800650c <HAL_ADC_Start_DMA+0x158>
  13773. {
  13774. /* Process locked */
  13775. __HAL_LOCK(hadc);
  13776. 80063f4: 68fb ldr r3, [r7, #12]
  13777. 80063f6: f893 3050 ldrb.w r3, [r3, #80] @ 0x50
  13778. 80063fa: 2b01 cmp r3, #1
  13779. 80063fc: d101 bne.n 8006402 <HAL_ADC_Start_DMA+0x4e>
  13780. 80063fe: 2302 movs r3, #2
  13781. 8006400: e087 b.n 8006512 <HAL_ADC_Start_DMA+0x15e>
  13782. 8006402: 68fb ldr r3, [r7, #12]
  13783. 8006404: 2201 movs r2, #1
  13784. 8006406: f883 2050 strb.w r2, [r3, #80] @ 0x50
  13785. /* Ensure that multimode regular conversions are not enabled. */
  13786. /* Otherwise, dedicated API HAL_ADCEx_MultiModeStart_DMA() must be used. */
  13787. if ((tmp_multimode_config == LL_ADC_MULTI_INDEPENDENT)
  13788. 800640a: 693b ldr r3, [r7, #16]
  13789. 800640c: 2b00 cmp r3, #0
  13790. 800640e: d005 beq.n 800641c <HAL_ADC_Start_DMA+0x68>
  13791. || (tmp_multimode_config == LL_ADC_MULTI_DUAL_INJ_SIMULT)
  13792. 8006410: 693b ldr r3, [r7, #16]
  13793. 8006412: 2b05 cmp r3, #5
  13794. 8006414: d002 beq.n 800641c <HAL_ADC_Start_DMA+0x68>
  13795. || (tmp_multimode_config == LL_ADC_MULTI_DUAL_INJ_ALTERN)
  13796. 8006416: 693b ldr r3, [r7, #16]
  13797. 8006418: 2b09 cmp r3, #9
  13798. 800641a: d170 bne.n 80064fe <HAL_ADC_Start_DMA+0x14a>
  13799. )
  13800. {
  13801. /* Enable the ADC peripheral */
  13802. tmp_hal_status = ADC_Enable(hadc);
  13803. 800641c: 68f8 ldr r0, [r7, #12]
  13804. 800641e: f000 fbfd bl 8006c1c <ADC_Enable>
  13805. 8006422: 4603 mov r3, r0
  13806. 8006424: 75fb strb r3, [r7, #23]
  13807. /* Start conversion if ADC is effectively enabled */
  13808. if (tmp_hal_status == HAL_OK)
  13809. 8006426: 7dfb ldrb r3, [r7, #23]
  13810. 8006428: 2b00 cmp r3, #0
  13811. 800642a: d163 bne.n 80064f4 <HAL_ADC_Start_DMA+0x140>
  13812. {
  13813. /* Set ADC state */
  13814. /* - Clear state bitfield related to regular group conversion results */
  13815. /* - Set state bitfield related to regular operation */
  13816. ADC_STATE_CLR_SET(hadc->State,
  13817. 800642c: 68fb ldr r3, [r7, #12]
  13818. 800642e: 6d5a ldr r2, [r3, #84] @ 0x54
  13819. 8006430: 4b3e ldr r3, [pc, #248] @ (800652c <HAL_ADC_Start_DMA+0x178>)
  13820. 8006432: 4013 ands r3, r2
  13821. 8006434: f443 7280 orr.w r2, r3, #256 @ 0x100
  13822. 8006438: 68fb ldr r3, [r7, #12]
  13823. 800643a: 655a str r2, [r3, #84] @ 0x54
  13824. HAL_ADC_STATE_REG_BUSY);
  13825. /* Reset HAL_ADC_STATE_MULTIMODE_SLAVE bit
  13826. - if ADC instance is master or if multimode feature is not available
  13827. - if multimode setting is disabled (ADC instance slave in independent mode) */
  13828. if ((__LL_ADC_MULTI_INSTANCE_MASTER(hadc->Instance) == hadc->Instance)
  13829. 800643c: 68fb ldr r3, [r7, #12]
  13830. 800643e: 681b ldr r3, [r3, #0]
  13831. 8006440: 4a37 ldr r2, [pc, #220] @ (8006520 <HAL_ADC_Start_DMA+0x16c>)
  13832. 8006442: 4293 cmp r3, r2
  13833. 8006444: d002 beq.n 800644c <HAL_ADC_Start_DMA+0x98>
  13834. 8006446: 68fb ldr r3, [r7, #12]
  13835. 8006448: 681b ldr r3, [r3, #0]
  13836. 800644a: e000 b.n 800644e <HAL_ADC_Start_DMA+0x9a>
  13837. 800644c: 4b33 ldr r3, [pc, #204] @ (800651c <HAL_ADC_Start_DMA+0x168>)
  13838. 800644e: 68fa ldr r2, [r7, #12]
  13839. 8006450: 6812 ldr r2, [r2, #0]
  13840. 8006452: 4293 cmp r3, r2
  13841. 8006454: d002 beq.n 800645c <HAL_ADC_Start_DMA+0xa8>
  13842. || (tmp_multimode_config == LL_ADC_MULTI_INDEPENDENT)
  13843. 8006456: 693b ldr r3, [r7, #16]
  13844. 8006458: 2b00 cmp r3, #0
  13845. 800645a: d105 bne.n 8006468 <HAL_ADC_Start_DMA+0xb4>
  13846. )
  13847. {
  13848. CLEAR_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);
  13849. 800645c: 68fb ldr r3, [r7, #12]
  13850. 800645e: 6d5b ldr r3, [r3, #84] @ 0x54
  13851. 8006460: f423 1280 bic.w r2, r3, #1048576 @ 0x100000
  13852. 8006464: 68fb ldr r3, [r7, #12]
  13853. 8006466: 655a str r2, [r3, #84] @ 0x54
  13854. }
  13855. /* Check if a conversion is on going on ADC group injected */
  13856. if ((hadc->State & HAL_ADC_STATE_INJ_BUSY) != 0UL)
  13857. 8006468: 68fb ldr r3, [r7, #12]
  13858. 800646a: 6d5b ldr r3, [r3, #84] @ 0x54
  13859. 800646c: f403 5380 and.w r3, r3, #4096 @ 0x1000
  13860. 8006470: 2b00 cmp r3, #0
  13861. 8006472: d006 beq.n 8006482 <HAL_ADC_Start_DMA+0xce>
  13862. {
  13863. /* Reset ADC error code fields related to regular conversions only */
  13864. CLEAR_BIT(hadc->ErrorCode, (HAL_ADC_ERROR_OVR | HAL_ADC_ERROR_DMA));
  13865. 8006474: 68fb ldr r3, [r7, #12]
  13866. 8006476: 6d9b ldr r3, [r3, #88] @ 0x58
  13867. 8006478: f023 0206 bic.w r2, r3, #6
  13868. 800647c: 68fb ldr r3, [r7, #12]
  13869. 800647e: 659a str r2, [r3, #88] @ 0x58
  13870. 8006480: e002 b.n 8006488 <HAL_ADC_Start_DMA+0xd4>
  13871. }
  13872. else
  13873. {
  13874. /* Reset all ADC error code fields */
  13875. ADC_CLEAR_ERRORCODE(hadc);
  13876. 8006482: 68fb ldr r3, [r7, #12]
  13877. 8006484: 2200 movs r2, #0
  13878. 8006486: 659a str r2, [r3, #88] @ 0x58
  13879. }
  13880. /* Set the DMA transfer complete callback */
  13881. hadc->DMA_Handle->XferCpltCallback = ADC_DMAConvCplt;
  13882. 8006488: 68fb ldr r3, [r7, #12]
  13883. 800648a: 6cdb ldr r3, [r3, #76] @ 0x4c
  13884. 800648c: 4a28 ldr r2, [pc, #160] @ (8006530 <HAL_ADC_Start_DMA+0x17c>)
  13885. 800648e: 63da str r2, [r3, #60] @ 0x3c
  13886. /* Set the DMA half transfer complete callback */
  13887. hadc->DMA_Handle->XferHalfCpltCallback = ADC_DMAHalfConvCplt;
  13888. 8006490: 68fb ldr r3, [r7, #12]
  13889. 8006492: 6cdb ldr r3, [r3, #76] @ 0x4c
  13890. 8006494: 4a27 ldr r2, [pc, #156] @ (8006534 <HAL_ADC_Start_DMA+0x180>)
  13891. 8006496: 641a str r2, [r3, #64] @ 0x40
  13892. /* Set the DMA error callback */
  13893. hadc->DMA_Handle->XferErrorCallback = ADC_DMAError;
  13894. 8006498: 68fb ldr r3, [r7, #12]
  13895. 800649a: 6cdb ldr r3, [r3, #76] @ 0x4c
  13896. 800649c: 4a26 ldr r2, [pc, #152] @ (8006538 <HAL_ADC_Start_DMA+0x184>)
  13897. 800649e: 64da str r2, [r3, #76] @ 0x4c
  13898. /* ADC start (in case of SW start): */
  13899. /* Clear regular group conversion flag and overrun flag */
  13900. /* (To ensure of no unknown state from potential previous ADC */
  13901. /* operations) */
  13902. __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_EOC | ADC_FLAG_EOS | ADC_FLAG_OVR));
  13903. 80064a0: 68fb ldr r3, [r7, #12]
  13904. 80064a2: 681b ldr r3, [r3, #0]
  13905. 80064a4: 221c movs r2, #28
  13906. 80064a6: 601a str r2, [r3, #0]
  13907. /* Process unlocked */
  13908. /* Unlock before starting ADC conversions: in case of potential */
  13909. /* interruption, to let the process to ADC IRQ Handler. */
  13910. __HAL_UNLOCK(hadc);
  13911. 80064a8: 68fb ldr r3, [r7, #12]
  13912. 80064aa: 2200 movs r2, #0
  13913. 80064ac: f883 2050 strb.w r2, [r3, #80] @ 0x50
  13914. /* With DMA, overrun event is always considered as an error even if
  13915. hadc->Init.Overrun is set to ADC_OVR_DATA_OVERWRITTEN. Therefore,
  13916. ADC_IT_OVR is enabled. */
  13917. __HAL_ADC_ENABLE_IT(hadc, ADC_IT_OVR);
  13918. 80064b0: 68fb ldr r3, [r7, #12]
  13919. 80064b2: 681b ldr r3, [r3, #0]
  13920. 80064b4: 685a ldr r2, [r3, #4]
  13921. 80064b6: 68fb ldr r3, [r7, #12]
  13922. 80064b8: 681b ldr r3, [r3, #0]
  13923. 80064ba: f042 0210 orr.w r2, r2, #16
  13924. 80064be: 605a str r2, [r3, #4]
  13925. {
  13926. LL_ADC_REG_SetDataTransferMode(hadc->Instance, ADC_CFGR_DMACONTREQ((uint32_t)hadc->Init.ConversionDataManagement));
  13927. }
  13928. #else
  13929. LL_ADC_REG_SetDataTransferMode(hadc->Instance, (uint32_t)hadc->Init.ConversionDataManagement);
  13930. 80064c0: 68fb ldr r3, [r7, #12]
  13931. 80064c2: 681a ldr r2, [r3, #0]
  13932. 80064c4: 68fb ldr r3, [r7, #12]
  13933. 80064c6: 6adb ldr r3, [r3, #44] @ 0x2c
  13934. 80064c8: 4619 mov r1, r3
  13935. 80064ca: 4610 mov r0, r2
  13936. 80064cc: f7ff fc89 bl 8005de2 <LL_ADC_REG_SetDataTransferMode>
  13937. #endif
  13938. /* Start the DMA channel */
  13939. tmp_hal_status = HAL_DMA_Start_IT(hadc->DMA_Handle, (uint32_t)&hadc->Instance->DR, (uint32_t)pData, Length);
  13940. 80064d0: 68fb ldr r3, [r7, #12]
  13941. 80064d2: 6cd8 ldr r0, [r3, #76] @ 0x4c
  13942. 80064d4: 68fb ldr r3, [r7, #12]
  13943. 80064d6: 681b ldr r3, [r3, #0]
  13944. 80064d8: 3340 adds r3, #64 @ 0x40
  13945. 80064da: 4619 mov r1, r3
  13946. 80064dc: 68ba ldr r2, [r7, #8]
  13947. 80064de: 687b ldr r3, [r7, #4]
  13948. 80064e0: f002 fa5e bl 80089a0 <HAL_DMA_Start_IT>
  13949. 80064e4: 4603 mov r3, r0
  13950. 80064e6: 75fb strb r3, [r7, #23]
  13951. /* Enable conversion of regular group. */
  13952. /* If software start has been selected, conversion starts immediately. */
  13953. /* If external trigger has been selected, conversion will start at next */
  13954. /* trigger event. */
  13955. /* Start ADC group regular conversion */
  13956. LL_ADC_REG_StartConversion(hadc->Instance);
  13957. 80064e8: 68fb ldr r3, [r7, #12]
  13958. 80064ea: 681b ldr r3, [r3, #0]
  13959. 80064ec: 4618 mov r0, r3
  13960. 80064ee: f7ff fd85 bl 8005ffc <LL_ADC_REG_StartConversion>
  13961. if (tmp_hal_status == HAL_OK)
  13962. 80064f2: e00d b.n 8006510 <HAL_ADC_Start_DMA+0x15c>
  13963. }
  13964. else
  13965. {
  13966. /* Process unlocked */
  13967. __HAL_UNLOCK(hadc);
  13968. 80064f4: 68fb ldr r3, [r7, #12]
  13969. 80064f6: 2200 movs r2, #0
  13970. 80064f8: f883 2050 strb.w r2, [r3, #80] @ 0x50
  13971. if (tmp_hal_status == HAL_OK)
  13972. 80064fc: e008 b.n 8006510 <HAL_ADC_Start_DMA+0x15c>
  13973. }
  13974. }
  13975. else
  13976. {
  13977. tmp_hal_status = HAL_ERROR;
  13978. 80064fe: 2301 movs r3, #1
  13979. 8006500: 75fb strb r3, [r7, #23]
  13980. /* Process unlocked */
  13981. __HAL_UNLOCK(hadc);
  13982. 8006502: 68fb ldr r3, [r7, #12]
  13983. 8006504: 2200 movs r2, #0
  13984. 8006506: f883 2050 strb.w r2, [r3, #80] @ 0x50
  13985. 800650a: e001 b.n 8006510 <HAL_ADC_Start_DMA+0x15c>
  13986. }
  13987. }
  13988. else
  13989. {
  13990. tmp_hal_status = HAL_BUSY;
  13991. 800650c: 2302 movs r3, #2
  13992. 800650e: 75fb strb r3, [r7, #23]
  13993. }
  13994. /* Return function status */
  13995. return tmp_hal_status;
  13996. 8006510: 7dfb ldrb r3, [r7, #23]
  13997. }
  13998. 8006512: 4618 mov r0, r3
  13999. 8006514: 3718 adds r7, #24
  14000. 8006516: 46bd mov sp, r7
  14001. 8006518: bd80 pop {r7, pc}
  14002. 800651a: bf00 nop
  14003. 800651c: 40022000 .word 0x40022000
  14004. 8006520: 40022100 .word 0x40022100
  14005. 8006524: 40022300 .word 0x40022300
  14006. 8006528: 58026300 .word 0x58026300
  14007. 800652c: fffff0fe .word 0xfffff0fe
  14008. 8006530: 08006def .word 0x08006def
  14009. 8006534: 08006ec7 .word 0x08006ec7
  14010. 8006538: 08006ee3 .word 0x08006ee3
  14011. 0800653c <HAL_ADC_ConvHalfCpltCallback>:
  14012. * @brief Conversion DMA half-transfer callback in non-blocking mode.
  14013. * @param hadc ADC handle
  14014. * @retval None
  14015. */
  14016. __weak void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef *hadc)
  14017. {
  14018. 800653c: b480 push {r7}
  14019. 800653e: b083 sub sp, #12
  14020. 8006540: af00 add r7, sp, #0
  14021. 8006542: 6078 str r0, [r7, #4]
  14022. UNUSED(hadc);
  14023. /* NOTE : This function should not be modified. When the callback is needed,
  14024. function HAL_ADC_ConvHalfCpltCallback must be implemented in the user file.
  14025. */
  14026. }
  14027. 8006544: bf00 nop
  14028. 8006546: 370c adds r7, #12
  14029. 8006548: 46bd mov sp, r7
  14030. 800654a: f85d 7b04 ldr.w r7, [sp], #4
  14031. 800654e: 4770 bx lr
  14032. 08006550 <HAL_ADC_ErrorCallback>:
  14033. * (this function is also clearing overrun flag)
  14034. * @param hadc ADC handle
  14035. * @retval None
  14036. */
  14037. __weak void HAL_ADC_ErrorCallback(ADC_HandleTypeDef *hadc)
  14038. {
  14039. 8006550: b480 push {r7}
  14040. 8006552: b083 sub sp, #12
  14041. 8006554: af00 add r7, sp, #0
  14042. 8006556: 6078 str r0, [r7, #4]
  14043. UNUSED(hadc);
  14044. /* NOTE : This function should not be modified. When the callback is needed,
  14045. function HAL_ADC_ErrorCallback must be implemented in the user file.
  14046. */
  14047. }
  14048. 8006558: bf00 nop
  14049. 800655a: 370c adds r7, #12
  14050. 800655c: 46bd mov sp, r7
  14051. 800655e: f85d 7b04 ldr.w r7, [sp], #4
  14052. 8006562: 4770 bx lr
  14053. 08006564 <HAL_ADC_ConfigChannel>:
  14054. * @param hadc ADC handle
  14055. * @param sConfig Structure of ADC channel assigned to ADC group regular.
  14056. * @retval HAL status
  14057. */
  14058. HAL_StatusTypeDef HAL_ADC_ConfigChannel(ADC_HandleTypeDef *hadc, ADC_ChannelConfTypeDef *sConfig)
  14059. {
  14060. 8006564: b590 push {r4, r7, lr}
  14061. 8006566: b0a1 sub sp, #132 @ 0x84
  14062. 8006568: af00 add r7, sp, #0
  14063. 800656a: 6078 str r0, [r7, #4]
  14064. 800656c: 6039 str r1, [r7, #0]
  14065. HAL_StatusTypeDef tmp_hal_status = HAL_OK;
  14066. 800656e: 2300 movs r3, #0
  14067. 8006570: f887 307f strb.w r3, [r7, #127] @ 0x7f
  14068. uint32_t tmpOffsetShifted;
  14069. uint32_t tmp_config_internal_channel;
  14070. __IO uint32_t wait_loop_index = 0;
  14071. 8006574: 2300 movs r3, #0
  14072. 8006576: 60bb str r3, [r7, #8]
  14073. /* if ROVSE is set, the value of the OFFSETy_EN bit in ADCx_OFRy register is
  14074. ignored (considered as reset) */
  14075. assert_param(!((sConfig->OffsetNumber != ADC_OFFSET_NONE) && (hadc->Init.OversamplingMode == ENABLE)));
  14076. /* Verification of channel number */
  14077. if (sConfig->SingleDiff != ADC_DIFFERENTIAL_ENDED)
  14078. 8006578: 683b ldr r3, [r7, #0]
  14079. 800657a: 68db ldr r3, [r3, #12]
  14080. 800657c: 4a65 ldr r2, [pc, #404] @ (8006714 <HAL_ADC_ConfigChannel+0x1b0>)
  14081. 800657e: 4293 cmp r3, r2
  14082. }
  14083. #endif
  14084. }
  14085. /* Process locked */
  14086. __HAL_LOCK(hadc);
  14087. 8006580: 687b ldr r3, [r7, #4]
  14088. 8006582: f893 3050 ldrb.w r3, [r3, #80] @ 0x50
  14089. 8006586: 2b01 cmp r3, #1
  14090. 8006588: d101 bne.n 800658e <HAL_ADC_ConfigChannel+0x2a>
  14091. 800658a: 2302 movs r3, #2
  14092. 800658c: e32e b.n 8006bec <HAL_ADC_ConfigChannel+0x688>
  14093. 800658e: 687b ldr r3, [r7, #4]
  14094. 8006590: 2201 movs r2, #1
  14095. 8006592: f883 2050 strb.w r2, [r3, #80] @ 0x50
  14096. /* Parameters update conditioned to ADC state: */
  14097. /* Parameters that can be updated when ADC is disabled or enabled without */
  14098. /* conversion on going on regular group: */
  14099. /* - Channel number */
  14100. /* - Channel rank */
  14101. if (LL_ADC_REG_IsConversionOngoing(hadc->Instance) == 0UL)
  14102. 8006596: 687b ldr r3, [r7, #4]
  14103. 8006598: 681b ldr r3, [r3, #0]
  14104. 800659a: 4618 mov r0, r3
  14105. 800659c: f7ff fd42 bl 8006024 <LL_ADC_REG_IsConversionOngoing>
  14106. 80065a0: 4603 mov r3, r0
  14107. 80065a2: 2b00 cmp r3, #0
  14108. 80065a4: f040 8313 bne.w 8006bce <HAL_ADC_ConfigChannel+0x66a>
  14109. {
  14110. if (!(__LL_ADC_IS_CHANNEL_INTERNAL(sConfig->Channel)))
  14111. 80065a8: 683b ldr r3, [r7, #0]
  14112. 80065aa: 681b ldr r3, [r3, #0]
  14113. 80065ac: 2b00 cmp r3, #0
  14114. 80065ae: db2c blt.n 800660a <HAL_ADC_ConfigChannel+0xa6>
  14115. /* ADC channels preselection */
  14116. hadc->Instance->PCSEL_RES0 |= (1UL << (__LL_ADC_CHANNEL_TO_DECIMAL_NB((uint32_t)sConfig->Channel) & 0x1FUL));
  14117. }
  14118. #else
  14119. /* ADC channels preselection */
  14120. hadc->Instance->PCSEL |= (1UL << (__LL_ADC_CHANNEL_TO_DECIMAL_NB((uint32_t)sConfig->Channel) & 0x1FUL));
  14121. 80065b0: 683b ldr r3, [r7, #0]
  14122. 80065b2: 681b ldr r3, [r3, #0]
  14123. 80065b4: f3c3 0313 ubfx r3, r3, #0, #20
  14124. 80065b8: 2b00 cmp r3, #0
  14125. 80065ba: d108 bne.n 80065ce <HAL_ADC_ConfigChannel+0x6a>
  14126. 80065bc: 683b ldr r3, [r7, #0]
  14127. 80065be: 681b ldr r3, [r3, #0]
  14128. 80065c0: 0e9b lsrs r3, r3, #26
  14129. 80065c2: f003 031f and.w r3, r3, #31
  14130. 80065c6: 2201 movs r2, #1
  14131. 80065c8: fa02 f303 lsl.w r3, r2, r3
  14132. 80065cc: e016 b.n 80065fc <HAL_ADC_ConfigChannel+0x98>
  14133. 80065ce: 683b ldr r3, [r7, #0]
  14134. 80065d0: 681b ldr r3, [r3, #0]
  14135. 80065d2: 667b str r3, [r7, #100] @ 0x64
  14136. uint32_t result;
  14137. #if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \
  14138. (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \
  14139. (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) )
  14140. __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
  14141. 80065d4: 6e7b ldr r3, [r7, #100] @ 0x64
  14142. 80065d6: fa93 f3a3 rbit r3, r3
  14143. 80065da: 663b str r3, [r7, #96] @ 0x60
  14144. result |= value & 1U;
  14145. s--;
  14146. }
  14147. result <<= s; /* shift when v's highest bits are zero */
  14148. #endif
  14149. return result;
  14150. 80065dc: 6e3b ldr r3, [r7, #96] @ 0x60
  14151. 80065de: 66bb str r3, [r7, #104] @ 0x68
  14152. optimisations using the logic "value was passed to __builtin_clz, so it
  14153. is non-zero".
  14154. ARM GCC 7.3 and possibly earlier will optimise this test away, leaving a
  14155. single CLZ instruction.
  14156. */
  14157. if (value == 0U)
  14158. 80065e0: 6ebb ldr r3, [r7, #104] @ 0x68
  14159. 80065e2: 2b00 cmp r3, #0
  14160. 80065e4: d101 bne.n 80065ea <HAL_ADC_ConfigChannel+0x86>
  14161. {
  14162. return 32U;
  14163. 80065e6: 2320 movs r3, #32
  14164. 80065e8: e003 b.n 80065f2 <HAL_ADC_ConfigChannel+0x8e>
  14165. }
  14166. return __builtin_clz(value);
  14167. 80065ea: 6ebb ldr r3, [r7, #104] @ 0x68
  14168. 80065ec: fab3 f383 clz r3, r3
  14169. 80065f0: b2db uxtb r3, r3
  14170. 80065f2: f003 031f and.w r3, r3, #31
  14171. 80065f6: 2201 movs r2, #1
  14172. 80065f8: fa02 f303 lsl.w r3, r2, r3
  14173. 80065fc: 687a ldr r2, [r7, #4]
  14174. 80065fe: 6812 ldr r2, [r2, #0]
  14175. 8006600: 69d1 ldr r1, [r2, #28]
  14176. 8006602: 687a ldr r2, [r7, #4]
  14177. 8006604: 6812 ldr r2, [r2, #0]
  14178. 8006606: 430b orrs r3, r1
  14179. 8006608: 61d3 str r3, [r2, #28]
  14180. #endif /* ADC_VER_V5_V90 */
  14181. }
  14182. /* Set ADC group regular sequence: channel on the selected scan sequence rank */
  14183. LL_ADC_REG_SetSequencerRanks(hadc->Instance, sConfig->Rank, sConfig->Channel);
  14184. 800660a: 687b ldr r3, [r7, #4]
  14185. 800660c: 6818 ldr r0, [r3, #0]
  14186. 800660e: 683b ldr r3, [r7, #0]
  14187. 8006610: 6859 ldr r1, [r3, #4]
  14188. 8006612: 683b ldr r3, [r7, #0]
  14189. 8006614: 681b ldr r3, [r3, #0]
  14190. 8006616: 461a mov r2, r3
  14191. 8006618: f7ff fbb7 bl 8005d8a <LL_ADC_REG_SetSequencerRanks>
  14192. /* Parameters update conditioned to ADC state: */
  14193. /* Parameters that can be updated when ADC is disabled or enabled without */
  14194. /* conversion on going on regular group: */
  14195. /* - Channel sampling time */
  14196. /* - Channel offset */
  14197. tmp_adc_is_conversion_on_going_regular = LL_ADC_REG_IsConversionOngoing(hadc->Instance);
  14198. 800661c: 687b ldr r3, [r7, #4]
  14199. 800661e: 681b ldr r3, [r3, #0]
  14200. 8006620: 4618 mov r0, r3
  14201. 8006622: f7ff fcff bl 8006024 <LL_ADC_REG_IsConversionOngoing>
  14202. 8006626: 67b8 str r0, [r7, #120] @ 0x78
  14203. tmp_adc_is_conversion_on_going_injected = LL_ADC_INJ_IsConversionOngoing(hadc->Instance);
  14204. 8006628: 687b ldr r3, [r7, #4]
  14205. 800662a: 681b ldr r3, [r3, #0]
  14206. 800662c: 4618 mov r0, r3
  14207. 800662e: f7ff fd0c bl 800604a <LL_ADC_INJ_IsConversionOngoing>
  14208. 8006632: 6778 str r0, [r7, #116] @ 0x74
  14209. if ((tmp_adc_is_conversion_on_going_regular == 0UL)
  14210. 8006634: 6fbb ldr r3, [r7, #120] @ 0x78
  14211. 8006636: 2b00 cmp r3, #0
  14212. 8006638: f040 80b8 bne.w 80067ac <HAL_ADC_ConfigChannel+0x248>
  14213. && (tmp_adc_is_conversion_on_going_injected == 0UL)
  14214. 800663c: 6f7b ldr r3, [r7, #116] @ 0x74
  14215. 800663e: 2b00 cmp r3, #0
  14216. 8006640: f040 80b4 bne.w 80067ac <HAL_ADC_ConfigChannel+0x248>
  14217. )
  14218. {
  14219. /* Set sampling time of the selected ADC channel */
  14220. LL_ADC_SetChannelSamplingTime(hadc->Instance, sConfig->Channel, sConfig->SamplingTime);
  14221. 8006644: 687b ldr r3, [r7, #4]
  14222. 8006646: 6818 ldr r0, [r3, #0]
  14223. 8006648: 683b ldr r3, [r7, #0]
  14224. 800664a: 6819 ldr r1, [r3, #0]
  14225. 800664c: 683b ldr r3, [r7, #0]
  14226. 800664e: 689b ldr r3, [r3, #8]
  14227. 8006650: 461a mov r2, r3
  14228. 8006652: f7ff fbd9 bl 8005e08 <LL_ADC_SetChannelSamplingTime>
  14229. tmpOffsetShifted = ADC3_OFFSET_SHIFT_RESOLUTION(hadc, (uint32_t)sConfig->Offset);
  14230. }
  14231. else
  14232. #endif /* ADC_VER_V5_V90 */
  14233. {
  14234. tmpOffsetShifted = ADC_OFFSET_SHIFT_RESOLUTION(hadc, (uint32_t)sConfig->Offset);
  14235. 8006656: 4b30 ldr r3, [pc, #192] @ (8006718 <HAL_ADC_ConfigChannel+0x1b4>)
  14236. 8006658: 681b ldr r3, [r3, #0]
  14237. 800665a: f003 4370 and.w r3, r3, #4026531840 @ 0xf0000000
  14238. 800665e: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  14239. 8006662: d10b bne.n 800667c <HAL_ADC_ConfigChannel+0x118>
  14240. 8006664: 683b ldr r3, [r7, #0]
  14241. 8006666: 695a ldr r2, [r3, #20]
  14242. 8006668: 687b ldr r3, [r7, #4]
  14243. 800666a: 681b ldr r3, [r3, #0]
  14244. 800666c: 68db ldr r3, [r3, #12]
  14245. 800666e: 089b lsrs r3, r3, #2
  14246. 8006670: f003 0307 and.w r3, r3, #7
  14247. 8006674: 005b lsls r3, r3, #1
  14248. 8006676: fa02 f303 lsl.w r3, r2, r3
  14249. 800667a: e01d b.n 80066b8 <HAL_ADC_ConfigChannel+0x154>
  14250. 800667c: 687b ldr r3, [r7, #4]
  14251. 800667e: 681b ldr r3, [r3, #0]
  14252. 8006680: 68db ldr r3, [r3, #12]
  14253. 8006682: f003 0310 and.w r3, r3, #16
  14254. 8006686: 2b00 cmp r3, #0
  14255. 8006688: d10b bne.n 80066a2 <HAL_ADC_ConfigChannel+0x13e>
  14256. 800668a: 683b ldr r3, [r7, #0]
  14257. 800668c: 695a ldr r2, [r3, #20]
  14258. 800668e: 687b ldr r3, [r7, #4]
  14259. 8006690: 681b ldr r3, [r3, #0]
  14260. 8006692: 68db ldr r3, [r3, #12]
  14261. 8006694: 089b lsrs r3, r3, #2
  14262. 8006696: f003 0307 and.w r3, r3, #7
  14263. 800669a: 005b lsls r3, r3, #1
  14264. 800669c: fa02 f303 lsl.w r3, r2, r3
  14265. 80066a0: e00a b.n 80066b8 <HAL_ADC_ConfigChannel+0x154>
  14266. 80066a2: 683b ldr r3, [r7, #0]
  14267. 80066a4: 695a ldr r2, [r3, #20]
  14268. 80066a6: 687b ldr r3, [r7, #4]
  14269. 80066a8: 681b ldr r3, [r3, #0]
  14270. 80066aa: 68db ldr r3, [r3, #12]
  14271. 80066ac: 089b lsrs r3, r3, #2
  14272. 80066ae: f003 0304 and.w r3, r3, #4
  14273. 80066b2: 005b lsls r3, r3, #1
  14274. 80066b4: fa02 f303 lsl.w r3, r2, r3
  14275. 80066b8: 673b str r3, [r7, #112] @ 0x70
  14276. }
  14277. if (sConfig->OffsetNumber != ADC_OFFSET_NONE)
  14278. 80066ba: 683b ldr r3, [r7, #0]
  14279. 80066bc: 691b ldr r3, [r3, #16]
  14280. 80066be: 2b04 cmp r3, #4
  14281. 80066c0: d02c beq.n 800671c <HAL_ADC_ConfigChannel+0x1b8>
  14282. {
  14283. /* Set ADC selected offset number */
  14284. LL_ADC_SetOffset(hadc->Instance, sConfig->OffsetNumber, sConfig->Channel, tmpOffsetShifted);
  14285. 80066c2: 687b ldr r3, [r7, #4]
  14286. 80066c4: 6818 ldr r0, [r3, #0]
  14287. 80066c6: 683b ldr r3, [r7, #0]
  14288. 80066c8: 6919 ldr r1, [r3, #16]
  14289. 80066ca: 683b ldr r3, [r7, #0]
  14290. 80066cc: 681a ldr r2, [r3, #0]
  14291. 80066ce: 6f3b ldr r3, [r7, #112] @ 0x70
  14292. 80066d0: f7ff faf4 bl 8005cbc <LL_ADC_SetOffset>
  14293. else
  14294. #endif /* ADC_VER_V5_V90 */
  14295. {
  14296. assert_param(IS_FUNCTIONAL_STATE(sConfig->OffsetSignedSaturation));
  14297. /* Set ADC selected offset signed saturation */
  14298. LL_ADC_SetOffsetSignedSaturation(hadc->Instance, sConfig->OffsetNumber, (sConfig->OffsetSignedSaturation == ENABLE) ? LL_ADC_OFFSET_SIGNED_SATURATION_ENABLE : LL_ADC_OFFSET_SIGNED_SATURATION_DISABLE);
  14299. 80066d4: 687b ldr r3, [r7, #4]
  14300. 80066d6: 6818 ldr r0, [r3, #0]
  14301. 80066d8: 683b ldr r3, [r7, #0]
  14302. 80066da: 6919 ldr r1, [r3, #16]
  14303. 80066dc: 683b ldr r3, [r7, #0]
  14304. 80066de: 7e5b ldrb r3, [r3, #25]
  14305. 80066e0: 2b01 cmp r3, #1
  14306. 80066e2: d102 bne.n 80066ea <HAL_ADC_ConfigChannel+0x186>
  14307. 80066e4: f04f 4300 mov.w r3, #2147483648 @ 0x80000000
  14308. 80066e8: e000 b.n 80066ec <HAL_ADC_ConfigChannel+0x188>
  14309. 80066ea: 2300 movs r3, #0
  14310. 80066ec: 461a mov r2, r3
  14311. 80066ee: f7ff fb1e bl 8005d2e <LL_ADC_SetOffsetSignedSaturation>
  14312. assert_param(IS_FUNCTIONAL_STATE(sConfig->OffsetRightShift));
  14313. /* Set ADC selected offset right shift */
  14314. LL_ADC_SetDataRightShift(hadc->Instance, sConfig->OffsetNumber, (sConfig->OffsetRightShift == ENABLE) ? LL_ADC_OFFSET_RSHIFT_ENABLE : LL_ADC_OFFSET_RSHIFT_DISABLE);
  14315. 80066f2: 687b ldr r3, [r7, #4]
  14316. 80066f4: 6818 ldr r0, [r3, #0]
  14317. 80066f6: 683b ldr r3, [r7, #0]
  14318. 80066f8: 6919 ldr r1, [r3, #16]
  14319. 80066fa: 683b ldr r3, [r7, #0]
  14320. 80066fc: 7e1b ldrb r3, [r3, #24]
  14321. 80066fe: 2b01 cmp r3, #1
  14322. 8006700: d102 bne.n 8006708 <HAL_ADC_ConfigChannel+0x1a4>
  14323. 8006702: f44f 6300 mov.w r3, #2048 @ 0x800
  14324. 8006706: e000 b.n 800670a <HAL_ADC_ConfigChannel+0x1a6>
  14325. 8006708: 2300 movs r3, #0
  14326. 800670a: 461a mov r2, r3
  14327. 800670c: f7ff faf6 bl 8005cfc <LL_ADC_SetDataRightShift>
  14328. 8006710: e04c b.n 80067ac <HAL_ADC_ConfigChannel+0x248>
  14329. 8006712: bf00 nop
  14330. 8006714: 47ff0000 .word 0x47ff0000
  14331. 8006718: 5c001000 .word 0x5c001000
  14332. }
  14333. }
  14334. else
  14335. #endif /* ADC_VER_V5_V90 */
  14336. {
  14337. if (((hadc->Instance->OFR1) & ADC_OFR1_OFFSET1_CH) == ADC_OFR_CHANNEL(sConfig->Channel))
  14338. 800671c: 687b ldr r3, [r7, #4]
  14339. 800671e: 681b ldr r3, [r3, #0]
  14340. 8006720: 6e1b ldr r3, [r3, #96] @ 0x60
  14341. 8006722: f003 42f8 and.w r2, r3, #2080374784 @ 0x7c000000
  14342. 8006726: 683b ldr r3, [r7, #0]
  14343. 8006728: 681b ldr r3, [r3, #0]
  14344. 800672a: 069b lsls r3, r3, #26
  14345. 800672c: 429a cmp r2, r3
  14346. 800672e: d107 bne.n 8006740 <HAL_ADC_ConfigChannel+0x1dc>
  14347. {
  14348. CLEAR_BIT(hadc->Instance->OFR1, ADC_OFR1_SSATE);
  14349. 8006730: 687b ldr r3, [r7, #4]
  14350. 8006732: 681b ldr r3, [r3, #0]
  14351. 8006734: 6e1a ldr r2, [r3, #96] @ 0x60
  14352. 8006736: 687b ldr r3, [r7, #4]
  14353. 8006738: 681b ldr r3, [r3, #0]
  14354. 800673a: f022 4200 bic.w r2, r2, #2147483648 @ 0x80000000
  14355. 800673e: 661a str r2, [r3, #96] @ 0x60
  14356. }
  14357. if (((hadc->Instance->OFR2) & ADC_OFR2_OFFSET2_CH) == ADC_OFR_CHANNEL(sConfig->Channel))
  14358. 8006740: 687b ldr r3, [r7, #4]
  14359. 8006742: 681b ldr r3, [r3, #0]
  14360. 8006744: 6e5b ldr r3, [r3, #100] @ 0x64
  14361. 8006746: f003 42f8 and.w r2, r3, #2080374784 @ 0x7c000000
  14362. 800674a: 683b ldr r3, [r7, #0]
  14363. 800674c: 681b ldr r3, [r3, #0]
  14364. 800674e: 069b lsls r3, r3, #26
  14365. 8006750: 429a cmp r2, r3
  14366. 8006752: d107 bne.n 8006764 <HAL_ADC_ConfigChannel+0x200>
  14367. {
  14368. CLEAR_BIT(hadc->Instance->OFR2, ADC_OFR2_SSATE);
  14369. 8006754: 687b ldr r3, [r7, #4]
  14370. 8006756: 681b ldr r3, [r3, #0]
  14371. 8006758: 6e5a ldr r2, [r3, #100] @ 0x64
  14372. 800675a: 687b ldr r3, [r7, #4]
  14373. 800675c: 681b ldr r3, [r3, #0]
  14374. 800675e: f022 4200 bic.w r2, r2, #2147483648 @ 0x80000000
  14375. 8006762: 665a str r2, [r3, #100] @ 0x64
  14376. }
  14377. if (((hadc->Instance->OFR3) & ADC_OFR3_OFFSET3_CH) == ADC_OFR_CHANNEL(sConfig->Channel))
  14378. 8006764: 687b ldr r3, [r7, #4]
  14379. 8006766: 681b ldr r3, [r3, #0]
  14380. 8006768: 6e9b ldr r3, [r3, #104] @ 0x68
  14381. 800676a: f003 42f8 and.w r2, r3, #2080374784 @ 0x7c000000
  14382. 800676e: 683b ldr r3, [r7, #0]
  14383. 8006770: 681b ldr r3, [r3, #0]
  14384. 8006772: 069b lsls r3, r3, #26
  14385. 8006774: 429a cmp r2, r3
  14386. 8006776: d107 bne.n 8006788 <HAL_ADC_ConfigChannel+0x224>
  14387. {
  14388. CLEAR_BIT(hadc->Instance->OFR3, ADC_OFR3_SSATE);
  14389. 8006778: 687b ldr r3, [r7, #4]
  14390. 800677a: 681b ldr r3, [r3, #0]
  14391. 800677c: 6e9a ldr r2, [r3, #104] @ 0x68
  14392. 800677e: 687b ldr r3, [r7, #4]
  14393. 8006780: 681b ldr r3, [r3, #0]
  14394. 8006782: f022 4200 bic.w r2, r2, #2147483648 @ 0x80000000
  14395. 8006786: 669a str r2, [r3, #104] @ 0x68
  14396. }
  14397. if (((hadc->Instance->OFR4) & ADC_OFR4_OFFSET4_CH) == ADC_OFR_CHANNEL(sConfig->Channel))
  14398. 8006788: 687b ldr r3, [r7, #4]
  14399. 800678a: 681b ldr r3, [r3, #0]
  14400. 800678c: 6edb ldr r3, [r3, #108] @ 0x6c
  14401. 800678e: f003 42f8 and.w r2, r3, #2080374784 @ 0x7c000000
  14402. 8006792: 683b ldr r3, [r7, #0]
  14403. 8006794: 681b ldr r3, [r3, #0]
  14404. 8006796: 069b lsls r3, r3, #26
  14405. 8006798: 429a cmp r2, r3
  14406. 800679a: d107 bne.n 80067ac <HAL_ADC_ConfigChannel+0x248>
  14407. {
  14408. CLEAR_BIT(hadc->Instance->OFR4, ADC_OFR4_SSATE);
  14409. 800679c: 687b ldr r3, [r7, #4]
  14410. 800679e: 681b ldr r3, [r3, #0]
  14411. 80067a0: 6eda ldr r2, [r3, #108] @ 0x6c
  14412. 80067a2: 687b ldr r3, [r7, #4]
  14413. 80067a4: 681b ldr r3, [r3, #0]
  14414. 80067a6: f022 4200 bic.w r2, r2, #2147483648 @ 0x80000000
  14415. 80067aa: 66da str r2, [r3, #108] @ 0x6c
  14416. /* Parameters update conditioned to ADC state: */
  14417. /* Parameters that can be updated only when ADC is disabled: */
  14418. /* - Single or differential mode */
  14419. /* - Internal measurement channels: Vbat/VrefInt/TempSensor */
  14420. if (LL_ADC_IsEnabled(hadc->Instance) == 0UL)
  14421. 80067ac: 687b ldr r3, [r7, #4]
  14422. 80067ae: 681b ldr r3, [r3, #0]
  14423. 80067b0: 4618 mov r0, r3
  14424. 80067b2: f7ff fbfd bl 8005fb0 <LL_ADC_IsEnabled>
  14425. 80067b6: 4603 mov r3, r0
  14426. 80067b8: 2b00 cmp r3, #0
  14427. 80067ba: f040 8211 bne.w 8006be0 <HAL_ADC_ConfigChannel+0x67c>
  14428. {
  14429. /* Set mode single-ended or differential input of the selected ADC channel */
  14430. LL_ADC_SetChannelSingleDiff(hadc->Instance, sConfig->Channel, sConfig->SingleDiff);
  14431. 80067be: 687b ldr r3, [r7, #4]
  14432. 80067c0: 6818 ldr r0, [r3, #0]
  14433. 80067c2: 683b ldr r3, [r7, #0]
  14434. 80067c4: 6819 ldr r1, [r3, #0]
  14435. 80067c6: 683b ldr r3, [r7, #0]
  14436. 80067c8: 68db ldr r3, [r3, #12]
  14437. 80067ca: 461a mov r2, r3
  14438. 80067cc: f7ff fb48 bl 8005e60 <LL_ADC_SetChannelSingleDiff>
  14439. /* Configuration of differential mode */
  14440. if (sConfig->SingleDiff == ADC_DIFFERENTIAL_ENDED)
  14441. 80067d0: 683b ldr r3, [r7, #0]
  14442. 80067d2: 68db ldr r3, [r3, #12]
  14443. 80067d4: 4aa1 ldr r2, [pc, #644] @ (8006a5c <HAL_ADC_ConfigChannel+0x4f8>)
  14444. 80067d6: 4293 cmp r3, r2
  14445. 80067d8: f040 812e bne.w 8006a38 <HAL_ADC_ConfigChannel+0x4d4>
  14446. {
  14447. /* Set sampling time of the selected ADC channel */
  14448. /* Note: ADC channel number masked with value "0x1F" to ensure shift value within 32 bits range */
  14449. LL_ADC_SetChannelSamplingTime(hadc->Instance,
  14450. 80067dc: 687b ldr r3, [r7, #4]
  14451. 80067de: 6818 ldr r0, [r3, #0]
  14452. (uint32_t)(__LL_ADC_DECIMAL_NB_TO_CHANNEL((__LL_ADC_CHANNEL_TO_DECIMAL_NB((uint32_t)sConfig->Channel) + 1UL) & 0x1FUL)),
  14453. 80067e0: 683b ldr r3, [r7, #0]
  14454. 80067e2: 681b ldr r3, [r3, #0]
  14455. 80067e4: f3c3 0313 ubfx r3, r3, #0, #20
  14456. 80067e8: 2b00 cmp r3, #0
  14457. 80067ea: d10b bne.n 8006804 <HAL_ADC_ConfigChannel+0x2a0>
  14458. 80067ec: 683b ldr r3, [r7, #0]
  14459. 80067ee: 681b ldr r3, [r3, #0]
  14460. 80067f0: 0e9b lsrs r3, r3, #26
  14461. 80067f2: 3301 adds r3, #1
  14462. 80067f4: f003 031f and.w r3, r3, #31
  14463. 80067f8: 2b09 cmp r3, #9
  14464. 80067fa: bf94 ite ls
  14465. 80067fc: 2301 movls r3, #1
  14466. 80067fe: 2300 movhi r3, #0
  14467. 8006800: b2db uxtb r3, r3
  14468. 8006802: e019 b.n 8006838 <HAL_ADC_ConfigChannel+0x2d4>
  14469. 8006804: 683b ldr r3, [r7, #0]
  14470. 8006806: 681b ldr r3, [r3, #0]
  14471. 8006808: 65bb str r3, [r7, #88] @ 0x58
  14472. __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
  14473. 800680a: 6dbb ldr r3, [r7, #88] @ 0x58
  14474. 800680c: fa93 f3a3 rbit r3, r3
  14475. 8006810: 657b str r3, [r7, #84] @ 0x54
  14476. return result;
  14477. 8006812: 6d7b ldr r3, [r7, #84] @ 0x54
  14478. 8006814: 65fb str r3, [r7, #92] @ 0x5c
  14479. if (value == 0U)
  14480. 8006816: 6dfb ldr r3, [r7, #92] @ 0x5c
  14481. 8006818: 2b00 cmp r3, #0
  14482. 800681a: d101 bne.n 8006820 <HAL_ADC_ConfigChannel+0x2bc>
  14483. return 32U;
  14484. 800681c: 2320 movs r3, #32
  14485. 800681e: e003 b.n 8006828 <HAL_ADC_ConfigChannel+0x2c4>
  14486. return __builtin_clz(value);
  14487. 8006820: 6dfb ldr r3, [r7, #92] @ 0x5c
  14488. 8006822: fab3 f383 clz r3, r3
  14489. 8006826: b2db uxtb r3, r3
  14490. 8006828: 3301 adds r3, #1
  14491. 800682a: f003 031f and.w r3, r3, #31
  14492. 800682e: 2b09 cmp r3, #9
  14493. 8006830: bf94 ite ls
  14494. 8006832: 2301 movls r3, #1
  14495. 8006834: 2300 movhi r3, #0
  14496. 8006836: b2db uxtb r3, r3
  14497. LL_ADC_SetChannelSamplingTime(hadc->Instance,
  14498. 8006838: 2b00 cmp r3, #0
  14499. 800683a: d079 beq.n 8006930 <HAL_ADC_ConfigChannel+0x3cc>
  14500. (uint32_t)(__LL_ADC_DECIMAL_NB_TO_CHANNEL((__LL_ADC_CHANNEL_TO_DECIMAL_NB((uint32_t)sConfig->Channel) + 1UL) & 0x1FUL)),
  14501. 800683c: 683b ldr r3, [r7, #0]
  14502. 800683e: 681b ldr r3, [r3, #0]
  14503. 8006840: f3c3 0313 ubfx r3, r3, #0, #20
  14504. 8006844: 2b00 cmp r3, #0
  14505. 8006846: d107 bne.n 8006858 <HAL_ADC_ConfigChannel+0x2f4>
  14506. 8006848: 683b ldr r3, [r7, #0]
  14507. 800684a: 681b ldr r3, [r3, #0]
  14508. 800684c: 0e9b lsrs r3, r3, #26
  14509. 800684e: 3301 adds r3, #1
  14510. 8006850: 069b lsls r3, r3, #26
  14511. 8006852: f003 42f8 and.w r2, r3, #2080374784 @ 0x7c000000
  14512. 8006856: e015 b.n 8006884 <HAL_ADC_ConfigChannel+0x320>
  14513. 8006858: 683b ldr r3, [r7, #0]
  14514. 800685a: 681b ldr r3, [r3, #0]
  14515. 800685c: 64fb str r3, [r7, #76] @ 0x4c
  14516. __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
  14517. 800685e: 6cfb ldr r3, [r7, #76] @ 0x4c
  14518. 8006860: fa93 f3a3 rbit r3, r3
  14519. 8006864: 64bb str r3, [r7, #72] @ 0x48
  14520. return result;
  14521. 8006866: 6cbb ldr r3, [r7, #72] @ 0x48
  14522. 8006868: 653b str r3, [r7, #80] @ 0x50
  14523. if (value == 0U)
  14524. 800686a: 6d3b ldr r3, [r7, #80] @ 0x50
  14525. 800686c: 2b00 cmp r3, #0
  14526. 800686e: d101 bne.n 8006874 <HAL_ADC_ConfigChannel+0x310>
  14527. return 32U;
  14528. 8006870: 2320 movs r3, #32
  14529. 8006872: e003 b.n 800687c <HAL_ADC_ConfigChannel+0x318>
  14530. return __builtin_clz(value);
  14531. 8006874: 6d3b ldr r3, [r7, #80] @ 0x50
  14532. 8006876: fab3 f383 clz r3, r3
  14533. 800687a: b2db uxtb r3, r3
  14534. 800687c: 3301 adds r3, #1
  14535. 800687e: 069b lsls r3, r3, #26
  14536. 8006880: f003 42f8 and.w r2, r3, #2080374784 @ 0x7c000000
  14537. 8006884: 683b ldr r3, [r7, #0]
  14538. 8006886: 681b ldr r3, [r3, #0]
  14539. 8006888: f3c3 0313 ubfx r3, r3, #0, #20
  14540. 800688c: 2b00 cmp r3, #0
  14541. 800688e: d109 bne.n 80068a4 <HAL_ADC_ConfigChannel+0x340>
  14542. 8006890: 683b ldr r3, [r7, #0]
  14543. 8006892: 681b ldr r3, [r3, #0]
  14544. 8006894: 0e9b lsrs r3, r3, #26
  14545. 8006896: 3301 adds r3, #1
  14546. 8006898: f003 031f and.w r3, r3, #31
  14547. 800689c: 2101 movs r1, #1
  14548. 800689e: fa01 f303 lsl.w r3, r1, r3
  14549. 80068a2: e017 b.n 80068d4 <HAL_ADC_ConfigChannel+0x370>
  14550. 80068a4: 683b ldr r3, [r7, #0]
  14551. 80068a6: 681b ldr r3, [r3, #0]
  14552. 80068a8: 643b str r3, [r7, #64] @ 0x40
  14553. __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
  14554. 80068aa: 6c3b ldr r3, [r7, #64] @ 0x40
  14555. 80068ac: fa93 f3a3 rbit r3, r3
  14556. 80068b0: 63fb str r3, [r7, #60] @ 0x3c
  14557. return result;
  14558. 80068b2: 6bfb ldr r3, [r7, #60] @ 0x3c
  14559. 80068b4: 647b str r3, [r7, #68] @ 0x44
  14560. if (value == 0U)
  14561. 80068b6: 6c7b ldr r3, [r7, #68] @ 0x44
  14562. 80068b8: 2b00 cmp r3, #0
  14563. 80068ba: d101 bne.n 80068c0 <HAL_ADC_ConfigChannel+0x35c>
  14564. return 32U;
  14565. 80068bc: 2320 movs r3, #32
  14566. 80068be: e003 b.n 80068c8 <HAL_ADC_ConfigChannel+0x364>
  14567. return __builtin_clz(value);
  14568. 80068c0: 6c7b ldr r3, [r7, #68] @ 0x44
  14569. 80068c2: fab3 f383 clz r3, r3
  14570. 80068c6: b2db uxtb r3, r3
  14571. 80068c8: 3301 adds r3, #1
  14572. 80068ca: f003 031f and.w r3, r3, #31
  14573. 80068ce: 2101 movs r1, #1
  14574. 80068d0: fa01 f303 lsl.w r3, r1, r3
  14575. 80068d4: ea42 0103 orr.w r1, r2, r3
  14576. 80068d8: 683b ldr r3, [r7, #0]
  14577. 80068da: 681b ldr r3, [r3, #0]
  14578. 80068dc: f3c3 0313 ubfx r3, r3, #0, #20
  14579. 80068e0: 2b00 cmp r3, #0
  14580. 80068e2: d10a bne.n 80068fa <HAL_ADC_ConfigChannel+0x396>
  14581. 80068e4: 683b ldr r3, [r7, #0]
  14582. 80068e6: 681b ldr r3, [r3, #0]
  14583. 80068e8: 0e9b lsrs r3, r3, #26
  14584. 80068ea: 3301 adds r3, #1
  14585. 80068ec: f003 021f and.w r2, r3, #31
  14586. 80068f0: 4613 mov r3, r2
  14587. 80068f2: 005b lsls r3, r3, #1
  14588. 80068f4: 4413 add r3, r2
  14589. 80068f6: 051b lsls r3, r3, #20
  14590. 80068f8: e018 b.n 800692c <HAL_ADC_ConfigChannel+0x3c8>
  14591. 80068fa: 683b ldr r3, [r7, #0]
  14592. 80068fc: 681b ldr r3, [r3, #0]
  14593. 80068fe: 637b str r3, [r7, #52] @ 0x34
  14594. __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
  14595. 8006900: 6b7b ldr r3, [r7, #52] @ 0x34
  14596. 8006902: fa93 f3a3 rbit r3, r3
  14597. 8006906: 633b str r3, [r7, #48] @ 0x30
  14598. return result;
  14599. 8006908: 6b3b ldr r3, [r7, #48] @ 0x30
  14600. 800690a: 63bb str r3, [r7, #56] @ 0x38
  14601. if (value == 0U)
  14602. 800690c: 6bbb ldr r3, [r7, #56] @ 0x38
  14603. 800690e: 2b00 cmp r3, #0
  14604. 8006910: d101 bne.n 8006916 <HAL_ADC_ConfigChannel+0x3b2>
  14605. return 32U;
  14606. 8006912: 2320 movs r3, #32
  14607. 8006914: e003 b.n 800691e <HAL_ADC_ConfigChannel+0x3ba>
  14608. return __builtin_clz(value);
  14609. 8006916: 6bbb ldr r3, [r7, #56] @ 0x38
  14610. 8006918: fab3 f383 clz r3, r3
  14611. 800691c: b2db uxtb r3, r3
  14612. 800691e: 3301 adds r3, #1
  14613. 8006920: f003 021f and.w r2, r3, #31
  14614. 8006924: 4613 mov r3, r2
  14615. 8006926: 005b lsls r3, r3, #1
  14616. 8006928: 4413 add r3, r2
  14617. 800692a: 051b lsls r3, r3, #20
  14618. LL_ADC_SetChannelSamplingTime(hadc->Instance,
  14619. 800692c: 430b orrs r3, r1
  14620. 800692e: e07e b.n 8006a2e <HAL_ADC_ConfigChannel+0x4ca>
  14621. (uint32_t)(__LL_ADC_DECIMAL_NB_TO_CHANNEL((__LL_ADC_CHANNEL_TO_DECIMAL_NB((uint32_t)sConfig->Channel) + 1UL) & 0x1FUL)),
  14622. 8006930: 683b ldr r3, [r7, #0]
  14623. 8006932: 681b ldr r3, [r3, #0]
  14624. 8006934: f3c3 0313 ubfx r3, r3, #0, #20
  14625. 8006938: 2b00 cmp r3, #0
  14626. 800693a: d107 bne.n 800694c <HAL_ADC_ConfigChannel+0x3e8>
  14627. 800693c: 683b ldr r3, [r7, #0]
  14628. 800693e: 681b ldr r3, [r3, #0]
  14629. 8006940: 0e9b lsrs r3, r3, #26
  14630. 8006942: 3301 adds r3, #1
  14631. 8006944: 069b lsls r3, r3, #26
  14632. 8006946: f003 42f8 and.w r2, r3, #2080374784 @ 0x7c000000
  14633. 800694a: e015 b.n 8006978 <HAL_ADC_ConfigChannel+0x414>
  14634. 800694c: 683b ldr r3, [r7, #0]
  14635. 800694e: 681b ldr r3, [r3, #0]
  14636. 8006950: 62bb str r3, [r7, #40] @ 0x28
  14637. __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
  14638. 8006952: 6abb ldr r3, [r7, #40] @ 0x28
  14639. 8006954: fa93 f3a3 rbit r3, r3
  14640. 8006958: 627b str r3, [r7, #36] @ 0x24
  14641. return result;
  14642. 800695a: 6a7b ldr r3, [r7, #36] @ 0x24
  14643. 800695c: 62fb str r3, [r7, #44] @ 0x2c
  14644. if (value == 0U)
  14645. 800695e: 6afb ldr r3, [r7, #44] @ 0x2c
  14646. 8006960: 2b00 cmp r3, #0
  14647. 8006962: d101 bne.n 8006968 <HAL_ADC_ConfigChannel+0x404>
  14648. return 32U;
  14649. 8006964: 2320 movs r3, #32
  14650. 8006966: e003 b.n 8006970 <HAL_ADC_ConfigChannel+0x40c>
  14651. return __builtin_clz(value);
  14652. 8006968: 6afb ldr r3, [r7, #44] @ 0x2c
  14653. 800696a: fab3 f383 clz r3, r3
  14654. 800696e: b2db uxtb r3, r3
  14655. 8006970: 3301 adds r3, #1
  14656. 8006972: 069b lsls r3, r3, #26
  14657. 8006974: f003 42f8 and.w r2, r3, #2080374784 @ 0x7c000000
  14658. 8006978: 683b ldr r3, [r7, #0]
  14659. 800697a: 681b ldr r3, [r3, #0]
  14660. 800697c: f3c3 0313 ubfx r3, r3, #0, #20
  14661. 8006980: 2b00 cmp r3, #0
  14662. 8006982: d109 bne.n 8006998 <HAL_ADC_ConfigChannel+0x434>
  14663. 8006984: 683b ldr r3, [r7, #0]
  14664. 8006986: 681b ldr r3, [r3, #0]
  14665. 8006988: 0e9b lsrs r3, r3, #26
  14666. 800698a: 3301 adds r3, #1
  14667. 800698c: f003 031f and.w r3, r3, #31
  14668. 8006990: 2101 movs r1, #1
  14669. 8006992: fa01 f303 lsl.w r3, r1, r3
  14670. 8006996: e017 b.n 80069c8 <HAL_ADC_ConfigChannel+0x464>
  14671. 8006998: 683b ldr r3, [r7, #0]
  14672. 800699a: 681b ldr r3, [r3, #0]
  14673. 800699c: 61fb str r3, [r7, #28]
  14674. __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
  14675. 800699e: 69fb ldr r3, [r7, #28]
  14676. 80069a0: fa93 f3a3 rbit r3, r3
  14677. 80069a4: 61bb str r3, [r7, #24]
  14678. return result;
  14679. 80069a6: 69bb ldr r3, [r7, #24]
  14680. 80069a8: 623b str r3, [r7, #32]
  14681. if (value == 0U)
  14682. 80069aa: 6a3b ldr r3, [r7, #32]
  14683. 80069ac: 2b00 cmp r3, #0
  14684. 80069ae: d101 bne.n 80069b4 <HAL_ADC_ConfigChannel+0x450>
  14685. return 32U;
  14686. 80069b0: 2320 movs r3, #32
  14687. 80069b2: e003 b.n 80069bc <HAL_ADC_ConfigChannel+0x458>
  14688. return __builtin_clz(value);
  14689. 80069b4: 6a3b ldr r3, [r7, #32]
  14690. 80069b6: fab3 f383 clz r3, r3
  14691. 80069ba: b2db uxtb r3, r3
  14692. 80069bc: 3301 adds r3, #1
  14693. 80069be: f003 031f and.w r3, r3, #31
  14694. 80069c2: 2101 movs r1, #1
  14695. 80069c4: fa01 f303 lsl.w r3, r1, r3
  14696. 80069c8: ea42 0103 orr.w r1, r2, r3
  14697. 80069cc: 683b ldr r3, [r7, #0]
  14698. 80069ce: 681b ldr r3, [r3, #0]
  14699. 80069d0: f3c3 0313 ubfx r3, r3, #0, #20
  14700. 80069d4: 2b00 cmp r3, #0
  14701. 80069d6: d10d bne.n 80069f4 <HAL_ADC_ConfigChannel+0x490>
  14702. 80069d8: 683b ldr r3, [r7, #0]
  14703. 80069da: 681b ldr r3, [r3, #0]
  14704. 80069dc: 0e9b lsrs r3, r3, #26
  14705. 80069de: 3301 adds r3, #1
  14706. 80069e0: f003 021f and.w r2, r3, #31
  14707. 80069e4: 4613 mov r3, r2
  14708. 80069e6: 005b lsls r3, r3, #1
  14709. 80069e8: 4413 add r3, r2
  14710. 80069ea: 3b1e subs r3, #30
  14711. 80069ec: 051b lsls r3, r3, #20
  14712. 80069ee: f043 7300 orr.w r3, r3, #33554432 @ 0x2000000
  14713. 80069f2: e01b b.n 8006a2c <HAL_ADC_ConfigChannel+0x4c8>
  14714. 80069f4: 683b ldr r3, [r7, #0]
  14715. 80069f6: 681b ldr r3, [r3, #0]
  14716. 80069f8: 613b str r3, [r7, #16]
  14717. __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
  14718. 80069fa: 693b ldr r3, [r7, #16]
  14719. 80069fc: fa93 f3a3 rbit r3, r3
  14720. 8006a00: 60fb str r3, [r7, #12]
  14721. return result;
  14722. 8006a02: 68fb ldr r3, [r7, #12]
  14723. 8006a04: 617b str r3, [r7, #20]
  14724. if (value == 0U)
  14725. 8006a06: 697b ldr r3, [r7, #20]
  14726. 8006a08: 2b00 cmp r3, #0
  14727. 8006a0a: d101 bne.n 8006a10 <HAL_ADC_ConfigChannel+0x4ac>
  14728. return 32U;
  14729. 8006a0c: 2320 movs r3, #32
  14730. 8006a0e: e003 b.n 8006a18 <HAL_ADC_ConfigChannel+0x4b4>
  14731. return __builtin_clz(value);
  14732. 8006a10: 697b ldr r3, [r7, #20]
  14733. 8006a12: fab3 f383 clz r3, r3
  14734. 8006a16: b2db uxtb r3, r3
  14735. 8006a18: 3301 adds r3, #1
  14736. 8006a1a: f003 021f and.w r2, r3, #31
  14737. 8006a1e: 4613 mov r3, r2
  14738. 8006a20: 005b lsls r3, r3, #1
  14739. 8006a22: 4413 add r3, r2
  14740. 8006a24: 3b1e subs r3, #30
  14741. 8006a26: 051b lsls r3, r3, #20
  14742. 8006a28: f043 7300 orr.w r3, r3, #33554432 @ 0x2000000
  14743. LL_ADC_SetChannelSamplingTime(hadc->Instance,
  14744. 8006a2c: 430b orrs r3, r1
  14745. 8006a2e: 683a ldr r2, [r7, #0]
  14746. 8006a30: 6892 ldr r2, [r2, #8]
  14747. 8006a32: 4619 mov r1, r3
  14748. 8006a34: f7ff f9e8 bl 8005e08 <LL_ADC_SetChannelSamplingTime>
  14749. /* If internal channel selected, enable dedicated internal buffers and */
  14750. /* paths. */
  14751. /* Note: these internal measurement paths can be disabled using */
  14752. /* HAL_ADC_DeInit(). */
  14753. if (__LL_ADC_IS_CHANNEL_INTERNAL(sConfig->Channel))
  14754. 8006a38: 683b ldr r3, [r7, #0]
  14755. 8006a3a: 681b ldr r3, [r3, #0]
  14756. 8006a3c: 2b00 cmp r3, #0
  14757. 8006a3e: f280 80cf bge.w 8006be0 <HAL_ADC_ConfigChannel+0x67c>
  14758. {
  14759. /* Configuration of common ADC parameters */
  14760. tmp_config_internal_channel = LL_ADC_GetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance));
  14761. 8006a42: 687b ldr r3, [r7, #4]
  14762. 8006a44: 681b ldr r3, [r3, #0]
  14763. 8006a46: 4a06 ldr r2, [pc, #24] @ (8006a60 <HAL_ADC_ConfigChannel+0x4fc>)
  14764. 8006a48: 4293 cmp r3, r2
  14765. 8006a4a: d004 beq.n 8006a56 <HAL_ADC_ConfigChannel+0x4f2>
  14766. 8006a4c: 687b ldr r3, [r7, #4]
  14767. 8006a4e: 681b ldr r3, [r3, #0]
  14768. 8006a50: 4a04 ldr r2, [pc, #16] @ (8006a64 <HAL_ADC_ConfigChannel+0x500>)
  14769. 8006a52: 4293 cmp r3, r2
  14770. 8006a54: d10a bne.n 8006a6c <HAL_ADC_ConfigChannel+0x508>
  14771. 8006a56: 4b04 ldr r3, [pc, #16] @ (8006a68 <HAL_ADC_ConfigChannel+0x504>)
  14772. 8006a58: e009 b.n 8006a6e <HAL_ADC_ConfigChannel+0x50a>
  14773. 8006a5a: bf00 nop
  14774. 8006a5c: 47ff0000 .word 0x47ff0000
  14775. 8006a60: 40022000 .word 0x40022000
  14776. 8006a64: 40022100 .word 0x40022100
  14777. 8006a68: 40022300 .word 0x40022300
  14778. 8006a6c: 4b61 ldr r3, [pc, #388] @ (8006bf4 <HAL_ADC_ConfigChannel+0x690>)
  14779. 8006a6e: 4618 mov r0, r3
  14780. 8006a70: f7ff f916 bl 8005ca0 <LL_ADC_GetCommonPathInternalCh>
  14781. 8006a74: 66f8 str r0, [r7, #108] @ 0x6c
  14782. /* Software is allowed to change common parameters only when all ADCs */
  14783. /* of the common group are disabled. */
  14784. if (__LL_ADC_IS_ENABLED_ALL_COMMON_INSTANCE(__LL_ADC_COMMON_INSTANCE(hadc->Instance)) == 0UL)
  14785. 8006a76: 687b ldr r3, [r7, #4]
  14786. 8006a78: 681b ldr r3, [r3, #0]
  14787. 8006a7a: 4a5f ldr r2, [pc, #380] @ (8006bf8 <HAL_ADC_ConfigChannel+0x694>)
  14788. 8006a7c: 4293 cmp r3, r2
  14789. 8006a7e: d004 beq.n 8006a8a <HAL_ADC_ConfigChannel+0x526>
  14790. 8006a80: 687b ldr r3, [r7, #4]
  14791. 8006a82: 681b ldr r3, [r3, #0]
  14792. 8006a84: 4a5d ldr r2, [pc, #372] @ (8006bfc <HAL_ADC_ConfigChannel+0x698>)
  14793. 8006a86: 4293 cmp r3, r2
  14794. 8006a88: d10e bne.n 8006aa8 <HAL_ADC_ConfigChannel+0x544>
  14795. 8006a8a: 485b ldr r0, [pc, #364] @ (8006bf8 <HAL_ADC_ConfigChannel+0x694>)
  14796. 8006a8c: f7ff fa90 bl 8005fb0 <LL_ADC_IsEnabled>
  14797. 8006a90: 4604 mov r4, r0
  14798. 8006a92: 485a ldr r0, [pc, #360] @ (8006bfc <HAL_ADC_ConfigChannel+0x698>)
  14799. 8006a94: f7ff fa8c bl 8005fb0 <LL_ADC_IsEnabled>
  14800. 8006a98: 4603 mov r3, r0
  14801. 8006a9a: 4323 orrs r3, r4
  14802. 8006a9c: 2b00 cmp r3, #0
  14803. 8006a9e: bf0c ite eq
  14804. 8006aa0: 2301 moveq r3, #1
  14805. 8006aa2: 2300 movne r3, #0
  14806. 8006aa4: b2db uxtb r3, r3
  14807. 8006aa6: e008 b.n 8006aba <HAL_ADC_ConfigChannel+0x556>
  14808. 8006aa8: 4855 ldr r0, [pc, #340] @ (8006c00 <HAL_ADC_ConfigChannel+0x69c>)
  14809. 8006aaa: f7ff fa81 bl 8005fb0 <LL_ADC_IsEnabled>
  14810. 8006aae: 4603 mov r3, r0
  14811. 8006ab0: 2b00 cmp r3, #0
  14812. 8006ab2: bf0c ite eq
  14813. 8006ab4: 2301 moveq r3, #1
  14814. 8006ab6: 2300 movne r3, #0
  14815. 8006ab8: b2db uxtb r3, r3
  14816. 8006aba: 2b00 cmp r3, #0
  14817. 8006abc: d07d beq.n 8006bba <HAL_ADC_ConfigChannel+0x656>
  14818. {
  14819. /* If the requested internal measurement path has already been enabled, */
  14820. /* bypass the configuration processing. */
  14821. if ((sConfig->Channel == ADC_CHANNEL_TEMPSENSOR) && ((tmp_config_internal_channel & LL_ADC_PATH_INTERNAL_TEMPSENSOR) == 0UL))
  14822. 8006abe: 683b ldr r3, [r7, #0]
  14823. 8006ac0: 681b ldr r3, [r3, #0]
  14824. 8006ac2: 4a50 ldr r2, [pc, #320] @ (8006c04 <HAL_ADC_ConfigChannel+0x6a0>)
  14825. 8006ac4: 4293 cmp r3, r2
  14826. 8006ac6: d130 bne.n 8006b2a <HAL_ADC_ConfigChannel+0x5c6>
  14827. 8006ac8: 6efb ldr r3, [r7, #108] @ 0x6c
  14828. 8006aca: f403 0300 and.w r3, r3, #8388608 @ 0x800000
  14829. 8006ace: 2b00 cmp r3, #0
  14830. 8006ad0: d12b bne.n 8006b2a <HAL_ADC_ConfigChannel+0x5c6>
  14831. {
  14832. if (ADC_TEMPERATURE_SENSOR_INSTANCE(hadc))
  14833. 8006ad2: 687b ldr r3, [r7, #4]
  14834. 8006ad4: 681b ldr r3, [r3, #0]
  14835. 8006ad6: 4a4a ldr r2, [pc, #296] @ (8006c00 <HAL_ADC_ConfigChannel+0x69c>)
  14836. 8006ad8: 4293 cmp r3, r2
  14837. 8006ada: f040 8081 bne.w 8006be0 <HAL_ADC_ConfigChannel+0x67c>
  14838. {
  14839. LL_ADC_SetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance), LL_ADC_PATH_INTERNAL_TEMPSENSOR | tmp_config_internal_channel);
  14840. 8006ade: 687b ldr r3, [r7, #4]
  14841. 8006ae0: 681b ldr r3, [r3, #0]
  14842. 8006ae2: 4a45 ldr r2, [pc, #276] @ (8006bf8 <HAL_ADC_ConfigChannel+0x694>)
  14843. 8006ae4: 4293 cmp r3, r2
  14844. 8006ae6: d004 beq.n 8006af2 <HAL_ADC_ConfigChannel+0x58e>
  14845. 8006ae8: 687b ldr r3, [r7, #4]
  14846. 8006aea: 681b ldr r3, [r3, #0]
  14847. 8006aec: 4a43 ldr r2, [pc, #268] @ (8006bfc <HAL_ADC_ConfigChannel+0x698>)
  14848. 8006aee: 4293 cmp r3, r2
  14849. 8006af0: d101 bne.n 8006af6 <HAL_ADC_ConfigChannel+0x592>
  14850. 8006af2: 4a45 ldr r2, [pc, #276] @ (8006c08 <HAL_ADC_ConfigChannel+0x6a4>)
  14851. 8006af4: e000 b.n 8006af8 <HAL_ADC_ConfigChannel+0x594>
  14852. 8006af6: 4a3f ldr r2, [pc, #252] @ (8006bf4 <HAL_ADC_ConfigChannel+0x690>)
  14853. 8006af8: 6efb ldr r3, [r7, #108] @ 0x6c
  14854. 8006afa: f443 0300 orr.w r3, r3, #8388608 @ 0x800000
  14855. 8006afe: 4619 mov r1, r3
  14856. 8006b00: 4610 mov r0, r2
  14857. 8006b02: f7ff f8ba bl 8005c7a <LL_ADC_SetCommonPathInternalCh>
  14858. /* Delay for temperature sensor stabilization time */
  14859. /* Wait loop initialization and execution */
  14860. /* Note: Variable divided by 2 to compensate partially */
  14861. /* CPU processing cycles, scaling in us split to not */
  14862. /* exceed 32 bits register capacity and handle low frequency. */
  14863. wait_loop_index = ((LL_ADC_DELAY_TEMPSENSOR_STAB_US / 10UL) * ((SystemCoreClock / (100000UL * 2UL)) + 1UL));
  14864. 8006b06: 4b41 ldr r3, [pc, #260] @ (8006c0c <HAL_ADC_ConfigChannel+0x6a8>)
  14865. 8006b08: 681b ldr r3, [r3, #0]
  14866. 8006b0a: 099b lsrs r3, r3, #6
  14867. 8006b0c: 4a40 ldr r2, [pc, #256] @ (8006c10 <HAL_ADC_ConfigChannel+0x6ac>)
  14868. 8006b0e: fba2 2303 umull r2, r3, r2, r3
  14869. 8006b12: 099b lsrs r3, r3, #6
  14870. 8006b14: 3301 adds r3, #1
  14871. 8006b16: 005b lsls r3, r3, #1
  14872. 8006b18: 60bb str r3, [r7, #8]
  14873. while (wait_loop_index != 0UL)
  14874. 8006b1a: e002 b.n 8006b22 <HAL_ADC_ConfigChannel+0x5be>
  14875. {
  14876. wait_loop_index--;
  14877. 8006b1c: 68bb ldr r3, [r7, #8]
  14878. 8006b1e: 3b01 subs r3, #1
  14879. 8006b20: 60bb str r3, [r7, #8]
  14880. while (wait_loop_index != 0UL)
  14881. 8006b22: 68bb ldr r3, [r7, #8]
  14882. 8006b24: 2b00 cmp r3, #0
  14883. 8006b26: d1f9 bne.n 8006b1c <HAL_ADC_ConfigChannel+0x5b8>
  14884. if (ADC_TEMPERATURE_SENSOR_INSTANCE(hadc))
  14885. 8006b28: e05a b.n 8006be0 <HAL_ADC_ConfigChannel+0x67c>
  14886. }
  14887. }
  14888. }
  14889. else if ((sConfig->Channel == ADC_CHANNEL_VBAT) && ((tmp_config_internal_channel & LL_ADC_PATH_INTERNAL_VBAT) == 0UL))
  14890. 8006b2a: 683b ldr r3, [r7, #0]
  14891. 8006b2c: 681b ldr r3, [r3, #0]
  14892. 8006b2e: 4a39 ldr r2, [pc, #228] @ (8006c14 <HAL_ADC_ConfigChannel+0x6b0>)
  14893. 8006b30: 4293 cmp r3, r2
  14894. 8006b32: d11e bne.n 8006b72 <HAL_ADC_ConfigChannel+0x60e>
  14895. 8006b34: 6efb ldr r3, [r7, #108] @ 0x6c
  14896. 8006b36: f003 7380 and.w r3, r3, #16777216 @ 0x1000000
  14897. 8006b3a: 2b00 cmp r3, #0
  14898. 8006b3c: d119 bne.n 8006b72 <HAL_ADC_ConfigChannel+0x60e>
  14899. {
  14900. if (ADC_BATTERY_VOLTAGE_INSTANCE(hadc))
  14901. 8006b3e: 687b ldr r3, [r7, #4]
  14902. 8006b40: 681b ldr r3, [r3, #0]
  14903. 8006b42: 4a2f ldr r2, [pc, #188] @ (8006c00 <HAL_ADC_ConfigChannel+0x69c>)
  14904. 8006b44: 4293 cmp r3, r2
  14905. 8006b46: d14b bne.n 8006be0 <HAL_ADC_ConfigChannel+0x67c>
  14906. {
  14907. LL_ADC_SetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance), LL_ADC_PATH_INTERNAL_VBAT | tmp_config_internal_channel);
  14908. 8006b48: 687b ldr r3, [r7, #4]
  14909. 8006b4a: 681b ldr r3, [r3, #0]
  14910. 8006b4c: 4a2a ldr r2, [pc, #168] @ (8006bf8 <HAL_ADC_ConfigChannel+0x694>)
  14911. 8006b4e: 4293 cmp r3, r2
  14912. 8006b50: d004 beq.n 8006b5c <HAL_ADC_ConfigChannel+0x5f8>
  14913. 8006b52: 687b ldr r3, [r7, #4]
  14914. 8006b54: 681b ldr r3, [r3, #0]
  14915. 8006b56: 4a29 ldr r2, [pc, #164] @ (8006bfc <HAL_ADC_ConfigChannel+0x698>)
  14916. 8006b58: 4293 cmp r3, r2
  14917. 8006b5a: d101 bne.n 8006b60 <HAL_ADC_ConfigChannel+0x5fc>
  14918. 8006b5c: 4a2a ldr r2, [pc, #168] @ (8006c08 <HAL_ADC_ConfigChannel+0x6a4>)
  14919. 8006b5e: e000 b.n 8006b62 <HAL_ADC_ConfigChannel+0x5fe>
  14920. 8006b60: 4a24 ldr r2, [pc, #144] @ (8006bf4 <HAL_ADC_ConfigChannel+0x690>)
  14921. 8006b62: 6efb ldr r3, [r7, #108] @ 0x6c
  14922. 8006b64: f043 7380 orr.w r3, r3, #16777216 @ 0x1000000
  14923. 8006b68: 4619 mov r1, r3
  14924. 8006b6a: 4610 mov r0, r2
  14925. 8006b6c: f7ff f885 bl 8005c7a <LL_ADC_SetCommonPathInternalCh>
  14926. if (ADC_BATTERY_VOLTAGE_INSTANCE(hadc))
  14927. 8006b70: e036 b.n 8006be0 <HAL_ADC_ConfigChannel+0x67c>
  14928. }
  14929. }
  14930. else if ((sConfig->Channel == ADC_CHANNEL_VREFINT) && ((tmp_config_internal_channel & LL_ADC_PATH_INTERNAL_VREFINT) == 0UL))
  14931. 8006b72: 683b ldr r3, [r7, #0]
  14932. 8006b74: 681b ldr r3, [r3, #0]
  14933. 8006b76: 4a28 ldr r2, [pc, #160] @ (8006c18 <HAL_ADC_ConfigChannel+0x6b4>)
  14934. 8006b78: 4293 cmp r3, r2
  14935. 8006b7a: d131 bne.n 8006be0 <HAL_ADC_ConfigChannel+0x67c>
  14936. 8006b7c: 6efb ldr r3, [r7, #108] @ 0x6c
  14937. 8006b7e: f403 0380 and.w r3, r3, #4194304 @ 0x400000
  14938. 8006b82: 2b00 cmp r3, #0
  14939. 8006b84: d12c bne.n 8006be0 <HAL_ADC_ConfigChannel+0x67c>
  14940. {
  14941. if (ADC_VREFINT_INSTANCE(hadc))
  14942. 8006b86: 687b ldr r3, [r7, #4]
  14943. 8006b88: 681b ldr r3, [r3, #0]
  14944. 8006b8a: 4a1d ldr r2, [pc, #116] @ (8006c00 <HAL_ADC_ConfigChannel+0x69c>)
  14945. 8006b8c: 4293 cmp r3, r2
  14946. 8006b8e: d127 bne.n 8006be0 <HAL_ADC_ConfigChannel+0x67c>
  14947. {
  14948. LL_ADC_SetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance), LL_ADC_PATH_INTERNAL_VREFINT | tmp_config_internal_channel);
  14949. 8006b90: 687b ldr r3, [r7, #4]
  14950. 8006b92: 681b ldr r3, [r3, #0]
  14951. 8006b94: 4a18 ldr r2, [pc, #96] @ (8006bf8 <HAL_ADC_ConfigChannel+0x694>)
  14952. 8006b96: 4293 cmp r3, r2
  14953. 8006b98: d004 beq.n 8006ba4 <HAL_ADC_ConfigChannel+0x640>
  14954. 8006b9a: 687b ldr r3, [r7, #4]
  14955. 8006b9c: 681b ldr r3, [r3, #0]
  14956. 8006b9e: 4a17 ldr r2, [pc, #92] @ (8006bfc <HAL_ADC_ConfigChannel+0x698>)
  14957. 8006ba0: 4293 cmp r3, r2
  14958. 8006ba2: d101 bne.n 8006ba8 <HAL_ADC_ConfigChannel+0x644>
  14959. 8006ba4: 4a18 ldr r2, [pc, #96] @ (8006c08 <HAL_ADC_ConfigChannel+0x6a4>)
  14960. 8006ba6: e000 b.n 8006baa <HAL_ADC_ConfigChannel+0x646>
  14961. 8006ba8: 4a12 ldr r2, [pc, #72] @ (8006bf4 <HAL_ADC_ConfigChannel+0x690>)
  14962. 8006baa: 6efb ldr r3, [r7, #108] @ 0x6c
  14963. 8006bac: f443 0380 orr.w r3, r3, #4194304 @ 0x400000
  14964. 8006bb0: 4619 mov r1, r3
  14965. 8006bb2: 4610 mov r0, r2
  14966. 8006bb4: f7ff f861 bl 8005c7a <LL_ADC_SetCommonPathInternalCh>
  14967. 8006bb8: e012 b.n 8006be0 <HAL_ADC_ConfigChannel+0x67c>
  14968. /* enabled and other ADC of the common group are enabled, internal */
  14969. /* measurement paths cannot be enabled. */
  14970. else
  14971. {
  14972. /* Update ADC state machine to error */
  14973. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);
  14974. 8006bba: 687b ldr r3, [r7, #4]
  14975. 8006bbc: 6d5b ldr r3, [r3, #84] @ 0x54
  14976. 8006bbe: f043 0220 orr.w r2, r3, #32
  14977. 8006bc2: 687b ldr r3, [r7, #4]
  14978. 8006bc4: 655a str r2, [r3, #84] @ 0x54
  14979. tmp_hal_status = HAL_ERROR;
  14980. 8006bc6: 2301 movs r3, #1
  14981. 8006bc8: f887 307f strb.w r3, [r7, #127] @ 0x7f
  14982. 8006bcc: e008 b.n 8006be0 <HAL_ADC_ConfigChannel+0x67c>
  14983. /* channel could be done on neither of the channel configuration structure */
  14984. /* parameters. */
  14985. else
  14986. {
  14987. /* Update ADC state machine to error */
  14988. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);
  14989. 8006bce: 687b ldr r3, [r7, #4]
  14990. 8006bd0: 6d5b ldr r3, [r3, #84] @ 0x54
  14991. 8006bd2: f043 0220 orr.w r2, r3, #32
  14992. 8006bd6: 687b ldr r3, [r7, #4]
  14993. 8006bd8: 655a str r2, [r3, #84] @ 0x54
  14994. tmp_hal_status = HAL_ERROR;
  14995. 8006bda: 2301 movs r3, #1
  14996. 8006bdc: f887 307f strb.w r3, [r7, #127] @ 0x7f
  14997. }
  14998. /* Process unlocked */
  14999. __HAL_UNLOCK(hadc);
  15000. 8006be0: 687b ldr r3, [r7, #4]
  15001. 8006be2: 2200 movs r2, #0
  15002. 8006be4: f883 2050 strb.w r2, [r3, #80] @ 0x50
  15003. /* Return function status */
  15004. return tmp_hal_status;
  15005. 8006be8: f897 307f ldrb.w r3, [r7, #127] @ 0x7f
  15006. }
  15007. 8006bec: 4618 mov r0, r3
  15008. 8006bee: 3784 adds r7, #132 @ 0x84
  15009. 8006bf0: 46bd mov sp, r7
  15010. 8006bf2: bd90 pop {r4, r7, pc}
  15011. 8006bf4: 58026300 .word 0x58026300
  15012. 8006bf8: 40022000 .word 0x40022000
  15013. 8006bfc: 40022100 .word 0x40022100
  15014. 8006c00: 58026000 .word 0x58026000
  15015. 8006c04: cb840000 .word 0xcb840000
  15016. 8006c08: 40022300 .word 0x40022300
  15017. 8006c0c: 24000034 .word 0x24000034
  15018. 8006c10: 053e2d63 .word 0x053e2d63
  15019. 8006c14: c7520000 .word 0xc7520000
  15020. 8006c18: cfb80000 .word 0xcfb80000
  15021. 08006c1c <ADC_Enable>:
  15022. * and voltage regulator must be enabled (done into HAL_ADC_Init()).
  15023. * @param hadc ADC handle
  15024. * @retval HAL status.
  15025. */
  15026. HAL_StatusTypeDef ADC_Enable(ADC_HandleTypeDef *hadc)
  15027. {
  15028. 8006c1c: b580 push {r7, lr}
  15029. 8006c1e: b084 sub sp, #16
  15030. 8006c20: af00 add r7, sp, #0
  15031. 8006c22: 6078 str r0, [r7, #4]
  15032. /* ADC enable and wait for ADC ready (in case of ADC is disabled or */
  15033. /* enabling phase not yet completed: flag ADC ready not yet set). */
  15034. /* Timeout implemented to not be stuck if ADC cannot be enabled (possible */
  15035. /* causes: ADC clock not running, ...). */
  15036. if (LL_ADC_IsEnabled(hadc->Instance) == 0UL)
  15037. 8006c24: 687b ldr r3, [r7, #4]
  15038. 8006c26: 681b ldr r3, [r3, #0]
  15039. 8006c28: 4618 mov r0, r3
  15040. 8006c2a: f7ff f9c1 bl 8005fb0 <LL_ADC_IsEnabled>
  15041. 8006c2e: 4603 mov r3, r0
  15042. 8006c30: 2b00 cmp r3, #0
  15043. 8006c32: d16e bne.n 8006d12 <ADC_Enable+0xf6>
  15044. {
  15045. /* Check if conditions to enable the ADC are fulfilled */
  15046. 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)
  15047. 8006c34: 687b ldr r3, [r7, #4]
  15048. 8006c36: 681b ldr r3, [r3, #0]
  15049. 8006c38: 689a ldr r2, [r3, #8]
  15050. 8006c3a: 4b38 ldr r3, [pc, #224] @ (8006d1c <ADC_Enable+0x100>)
  15051. 8006c3c: 4013 ands r3, r2
  15052. 8006c3e: 2b00 cmp r3, #0
  15053. 8006c40: d00d beq.n 8006c5e <ADC_Enable+0x42>
  15054. {
  15055. /* Update ADC state machine to error */
  15056. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
  15057. 8006c42: 687b ldr r3, [r7, #4]
  15058. 8006c44: 6d5b ldr r3, [r3, #84] @ 0x54
  15059. 8006c46: f043 0210 orr.w r2, r3, #16
  15060. 8006c4a: 687b ldr r3, [r7, #4]
  15061. 8006c4c: 655a str r2, [r3, #84] @ 0x54
  15062. /* Set ADC error code to ADC peripheral internal error */
  15063. SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);
  15064. 8006c4e: 687b ldr r3, [r7, #4]
  15065. 8006c50: 6d9b ldr r3, [r3, #88] @ 0x58
  15066. 8006c52: f043 0201 orr.w r2, r3, #1
  15067. 8006c56: 687b ldr r3, [r7, #4]
  15068. 8006c58: 659a str r2, [r3, #88] @ 0x58
  15069. return HAL_ERROR;
  15070. 8006c5a: 2301 movs r3, #1
  15071. 8006c5c: e05a b.n 8006d14 <ADC_Enable+0xf8>
  15072. }
  15073. /* Enable the ADC peripheral */
  15074. LL_ADC_Enable(hadc->Instance);
  15075. 8006c5e: 687b ldr r3, [r7, #4]
  15076. 8006c60: 681b ldr r3, [r3, #0]
  15077. 8006c62: 4618 mov r0, r3
  15078. 8006c64: f7ff f97c bl 8005f60 <LL_ADC_Enable>
  15079. /* Wait for ADC effectively enabled */
  15080. tickstart = HAL_GetTick();
  15081. 8006c68: f7fe ffa2 bl 8005bb0 <HAL_GetTick>
  15082. 8006c6c: 60f8 str r0, [r7, #12]
  15083. /* Poll for ADC ready flag raised except case of multimode enabled
  15084. and ADC slave selected. */
  15085. uint32_t tmp_multimode_config = LL_ADC_GetMultimode(__LL_ADC_COMMON_INSTANCE(hadc->Instance));
  15086. 8006c6e: 687b ldr r3, [r7, #4]
  15087. 8006c70: 681b ldr r3, [r3, #0]
  15088. 8006c72: 4a2b ldr r2, [pc, #172] @ (8006d20 <ADC_Enable+0x104>)
  15089. 8006c74: 4293 cmp r3, r2
  15090. 8006c76: d004 beq.n 8006c82 <ADC_Enable+0x66>
  15091. 8006c78: 687b ldr r3, [r7, #4]
  15092. 8006c7a: 681b ldr r3, [r3, #0]
  15093. 8006c7c: 4a29 ldr r2, [pc, #164] @ (8006d24 <ADC_Enable+0x108>)
  15094. 8006c7e: 4293 cmp r3, r2
  15095. 8006c80: d101 bne.n 8006c86 <ADC_Enable+0x6a>
  15096. 8006c82: 4b29 ldr r3, [pc, #164] @ (8006d28 <ADC_Enable+0x10c>)
  15097. 8006c84: e000 b.n 8006c88 <ADC_Enable+0x6c>
  15098. 8006c86: 4b29 ldr r3, [pc, #164] @ (8006d2c <ADC_Enable+0x110>)
  15099. 8006c88: 4618 mov r0, r3
  15100. 8006c8a: f7ff f90d bl 8005ea8 <LL_ADC_GetMultimode>
  15101. 8006c8e: 60b8 str r0, [r7, #8]
  15102. if ((__LL_ADC_MULTI_INSTANCE_MASTER(hadc->Instance) == hadc->Instance)
  15103. 8006c90: 687b ldr r3, [r7, #4]
  15104. 8006c92: 681b ldr r3, [r3, #0]
  15105. 8006c94: 4a23 ldr r2, [pc, #140] @ (8006d24 <ADC_Enable+0x108>)
  15106. 8006c96: 4293 cmp r3, r2
  15107. 8006c98: d002 beq.n 8006ca0 <ADC_Enable+0x84>
  15108. 8006c9a: 687b ldr r3, [r7, #4]
  15109. 8006c9c: 681b ldr r3, [r3, #0]
  15110. 8006c9e: e000 b.n 8006ca2 <ADC_Enable+0x86>
  15111. 8006ca0: 4b1f ldr r3, [pc, #124] @ (8006d20 <ADC_Enable+0x104>)
  15112. 8006ca2: 687a ldr r2, [r7, #4]
  15113. 8006ca4: 6812 ldr r2, [r2, #0]
  15114. 8006ca6: 4293 cmp r3, r2
  15115. 8006ca8: d02c beq.n 8006d04 <ADC_Enable+0xe8>
  15116. || (tmp_multimode_config == LL_ADC_MULTI_INDEPENDENT)
  15117. 8006caa: 68bb ldr r3, [r7, #8]
  15118. 8006cac: 2b00 cmp r3, #0
  15119. 8006cae: d130 bne.n 8006d12 <ADC_Enable+0xf6>
  15120. )
  15121. {
  15122. while (__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_RDY) == 0UL)
  15123. 8006cb0: e028 b.n 8006d04 <ADC_Enable+0xe8>
  15124. The workaround is to continue setting ADEN until ADRDY is becomes 1.
  15125. Additionally, ADC_ENABLE_TIMEOUT is defined to encompass this
  15126. 4 ADC clock cycle duration */
  15127. /* Note: Test of ADC enabled required due to hardware constraint to */
  15128. /* not enable ADC if already enabled. */
  15129. if (LL_ADC_IsEnabled(hadc->Instance) == 0UL)
  15130. 8006cb2: 687b ldr r3, [r7, #4]
  15131. 8006cb4: 681b ldr r3, [r3, #0]
  15132. 8006cb6: 4618 mov r0, r3
  15133. 8006cb8: f7ff f97a bl 8005fb0 <LL_ADC_IsEnabled>
  15134. 8006cbc: 4603 mov r3, r0
  15135. 8006cbe: 2b00 cmp r3, #0
  15136. 8006cc0: d104 bne.n 8006ccc <ADC_Enable+0xb0>
  15137. {
  15138. LL_ADC_Enable(hadc->Instance);
  15139. 8006cc2: 687b ldr r3, [r7, #4]
  15140. 8006cc4: 681b ldr r3, [r3, #0]
  15141. 8006cc6: 4618 mov r0, r3
  15142. 8006cc8: f7ff f94a bl 8005f60 <LL_ADC_Enable>
  15143. }
  15144. if ((HAL_GetTick() - tickstart) > ADC_ENABLE_TIMEOUT)
  15145. 8006ccc: f7fe ff70 bl 8005bb0 <HAL_GetTick>
  15146. 8006cd0: 4602 mov r2, r0
  15147. 8006cd2: 68fb ldr r3, [r7, #12]
  15148. 8006cd4: 1ad3 subs r3, r2, r3
  15149. 8006cd6: 2b02 cmp r3, #2
  15150. 8006cd8: d914 bls.n 8006d04 <ADC_Enable+0xe8>
  15151. {
  15152. /* New check to avoid false timeout detection in case of preemption */
  15153. if (__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_RDY) == 0UL)
  15154. 8006cda: 687b ldr r3, [r7, #4]
  15155. 8006cdc: 681b ldr r3, [r3, #0]
  15156. 8006cde: 681b ldr r3, [r3, #0]
  15157. 8006ce0: f003 0301 and.w r3, r3, #1
  15158. 8006ce4: 2b01 cmp r3, #1
  15159. 8006ce6: d00d beq.n 8006d04 <ADC_Enable+0xe8>
  15160. {
  15161. /* Update ADC state machine to error */
  15162. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
  15163. 8006ce8: 687b ldr r3, [r7, #4]
  15164. 8006cea: 6d5b ldr r3, [r3, #84] @ 0x54
  15165. 8006cec: f043 0210 orr.w r2, r3, #16
  15166. 8006cf0: 687b ldr r3, [r7, #4]
  15167. 8006cf2: 655a str r2, [r3, #84] @ 0x54
  15168. /* Set ADC error code to ADC peripheral internal error */
  15169. SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);
  15170. 8006cf4: 687b ldr r3, [r7, #4]
  15171. 8006cf6: 6d9b ldr r3, [r3, #88] @ 0x58
  15172. 8006cf8: f043 0201 orr.w r2, r3, #1
  15173. 8006cfc: 687b ldr r3, [r7, #4]
  15174. 8006cfe: 659a str r2, [r3, #88] @ 0x58
  15175. return HAL_ERROR;
  15176. 8006d00: 2301 movs r3, #1
  15177. 8006d02: e007 b.n 8006d14 <ADC_Enable+0xf8>
  15178. while (__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_RDY) == 0UL)
  15179. 8006d04: 687b ldr r3, [r7, #4]
  15180. 8006d06: 681b ldr r3, [r3, #0]
  15181. 8006d08: 681b ldr r3, [r3, #0]
  15182. 8006d0a: f003 0301 and.w r3, r3, #1
  15183. 8006d0e: 2b01 cmp r3, #1
  15184. 8006d10: d1cf bne.n 8006cb2 <ADC_Enable+0x96>
  15185. }
  15186. }
  15187. }
  15188. /* Return HAL status */
  15189. return HAL_OK;
  15190. 8006d12: 2300 movs r3, #0
  15191. }
  15192. 8006d14: 4618 mov r0, r3
  15193. 8006d16: 3710 adds r7, #16
  15194. 8006d18: 46bd mov sp, r7
  15195. 8006d1a: bd80 pop {r7, pc}
  15196. 8006d1c: 8000003f .word 0x8000003f
  15197. 8006d20: 40022000 .word 0x40022000
  15198. 8006d24: 40022100 .word 0x40022100
  15199. 8006d28: 40022300 .word 0x40022300
  15200. 8006d2c: 58026300 .word 0x58026300
  15201. 08006d30 <ADC_Disable>:
  15202. * stopped.
  15203. * @param hadc ADC handle
  15204. * @retval HAL status.
  15205. */
  15206. HAL_StatusTypeDef ADC_Disable(ADC_HandleTypeDef *hadc)
  15207. {
  15208. 8006d30: b580 push {r7, lr}
  15209. 8006d32: b084 sub sp, #16
  15210. 8006d34: af00 add r7, sp, #0
  15211. 8006d36: 6078 str r0, [r7, #4]
  15212. uint32_t tickstart;
  15213. const uint32_t tmp_adc_is_disable_on_going = LL_ADC_IsDisableOngoing(hadc->Instance);
  15214. 8006d38: 687b ldr r3, [r7, #4]
  15215. 8006d3a: 681b ldr r3, [r3, #0]
  15216. 8006d3c: 4618 mov r0, r3
  15217. 8006d3e: f7ff f94a bl 8005fd6 <LL_ADC_IsDisableOngoing>
  15218. 8006d42: 60f8 str r0, [r7, #12]
  15219. /* Verification if ADC is not already disabled: */
  15220. /* Note: forbidden to disable ADC (set bit ADC_CR_ADDIS) if ADC is already */
  15221. /* disabled. */
  15222. if ((LL_ADC_IsEnabled(hadc->Instance) != 0UL)
  15223. 8006d44: 687b ldr r3, [r7, #4]
  15224. 8006d46: 681b ldr r3, [r3, #0]
  15225. 8006d48: 4618 mov r0, r3
  15226. 8006d4a: f7ff f931 bl 8005fb0 <LL_ADC_IsEnabled>
  15227. 8006d4e: 4603 mov r3, r0
  15228. 8006d50: 2b00 cmp r3, #0
  15229. 8006d52: d047 beq.n 8006de4 <ADC_Disable+0xb4>
  15230. && (tmp_adc_is_disable_on_going == 0UL)
  15231. 8006d54: 68fb ldr r3, [r7, #12]
  15232. 8006d56: 2b00 cmp r3, #0
  15233. 8006d58: d144 bne.n 8006de4 <ADC_Disable+0xb4>
  15234. )
  15235. {
  15236. /* Check if conditions to disable the ADC are fulfilled */
  15237. if ((hadc->Instance->CR & (ADC_CR_JADSTART | ADC_CR_ADSTART | ADC_CR_ADEN)) == ADC_CR_ADEN)
  15238. 8006d5a: 687b ldr r3, [r7, #4]
  15239. 8006d5c: 681b ldr r3, [r3, #0]
  15240. 8006d5e: 689b ldr r3, [r3, #8]
  15241. 8006d60: f003 030d and.w r3, r3, #13
  15242. 8006d64: 2b01 cmp r3, #1
  15243. 8006d66: d10c bne.n 8006d82 <ADC_Disable+0x52>
  15244. {
  15245. /* Disable the ADC peripheral */
  15246. LL_ADC_Disable(hadc->Instance);
  15247. 8006d68: 687b ldr r3, [r7, #4]
  15248. 8006d6a: 681b ldr r3, [r3, #0]
  15249. 8006d6c: 4618 mov r0, r3
  15250. 8006d6e: f7ff f90b bl 8005f88 <LL_ADC_Disable>
  15251. __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_EOSMP | ADC_FLAG_RDY));
  15252. 8006d72: 687b ldr r3, [r7, #4]
  15253. 8006d74: 681b ldr r3, [r3, #0]
  15254. 8006d76: 2203 movs r2, #3
  15255. 8006d78: 601a str r2, [r3, #0]
  15256. return HAL_ERROR;
  15257. }
  15258. /* Wait for ADC effectively disabled */
  15259. /* Get tick count */
  15260. tickstart = HAL_GetTick();
  15261. 8006d7a: f7fe ff19 bl 8005bb0 <HAL_GetTick>
  15262. 8006d7e: 60b8 str r0, [r7, #8]
  15263. while ((hadc->Instance->CR & ADC_CR_ADEN) != 0UL)
  15264. 8006d80: e029 b.n 8006dd6 <ADC_Disable+0xa6>
  15265. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
  15266. 8006d82: 687b ldr r3, [r7, #4]
  15267. 8006d84: 6d5b ldr r3, [r3, #84] @ 0x54
  15268. 8006d86: f043 0210 orr.w r2, r3, #16
  15269. 8006d8a: 687b ldr r3, [r7, #4]
  15270. 8006d8c: 655a str r2, [r3, #84] @ 0x54
  15271. SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);
  15272. 8006d8e: 687b ldr r3, [r7, #4]
  15273. 8006d90: 6d9b ldr r3, [r3, #88] @ 0x58
  15274. 8006d92: f043 0201 orr.w r2, r3, #1
  15275. 8006d96: 687b ldr r3, [r7, #4]
  15276. 8006d98: 659a str r2, [r3, #88] @ 0x58
  15277. return HAL_ERROR;
  15278. 8006d9a: 2301 movs r3, #1
  15279. 8006d9c: e023 b.n 8006de6 <ADC_Disable+0xb6>
  15280. {
  15281. if ((HAL_GetTick() - tickstart) > ADC_DISABLE_TIMEOUT)
  15282. 8006d9e: f7fe ff07 bl 8005bb0 <HAL_GetTick>
  15283. 8006da2: 4602 mov r2, r0
  15284. 8006da4: 68bb ldr r3, [r7, #8]
  15285. 8006da6: 1ad3 subs r3, r2, r3
  15286. 8006da8: 2b02 cmp r3, #2
  15287. 8006daa: d914 bls.n 8006dd6 <ADC_Disable+0xa6>
  15288. {
  15289. /* New check to avoid false timeout detection in case of preemption */
  15290. if ((hadc->Instance->CR & ADC_CR_ADEN) != 0UL)
  15291. 8006dac: 687b ldr r3, [r7, #4]
  15292. 8006dae: 681b ldr r3, [r3, #0]
  15293. 8006db0: 689b ldr r3, [r3, #8]
  15294. 8006db2: f003 0301 and.w r3, r3, #1
  15295. 8006db6: 2b00 cmp r3, #0
  15296. 8006db8: d00d beq.n 8006dd6 <ADC_Disable+0xa6>
  15297. {
  15298. /* Update ADC state machine to error */
  15299. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
  15300. 8006dba: 687b ldr r3, [r7, #4]
  15301. 8006dbc: 6d5b ldr r3, [r3, #84] @ 0x54
  15302. 8006dbe: f043 0210 orr.w r2, r3, #16
  15303. 8006dc2: 687b ldr r3, [r7, #4]
  15304. 8006dc4: 655a str r2, [r3, #84] @ 0x54
  15305. /* Set ADC error code to ADC peripheral internal error */
  15306. SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);
  15307. 8006dc6: 687b ldr r3, [r7, #4]
  15308. 8006dc8: 6d9b ldr r3, [r3, #88] @ 0x58
  15309. 8006dca: f043 0201 orr.w r2, r3, #1
  15310. 8006dce: 687b ldr r3, [r7, #4]
  15311. 8006dd0: 659a str r2, [r3, #88] @ 0x58
  15312. return HAL_ERROR;
  15313. 8006dd2: 2301 movs r3, #1
  15314. 8006dd4: e007 b.n 8006de6 <ADC_Disable+0xb6>
  15315. while ((hadc->Instance->CR & ADC_CR_ADEN) != 0UL)
  15316. 8006dd6: 687b ldr r3, [r7, #4]
  15317. 8006dd8: 681b ldr r3, [r3, #0]
  15318. 8006dda: 689b ldr r3, [r3, #8]
  15319. 8006ddc: f003 0301 and.w r3, r3, #1
  15320. 8006de0: 2b00 cmp r3, #0
  15321. 8006de2: d1dc bne.n 8006d9e <ADC_Disable+0x6e>
  15322. }
  15323. }
  15324. }
  15325. /* Return HAL status */
  15326. return HAL_OK;
  15327. 8006de4: 2300 movs r3, #0
  15328. }
  15329. 8006de6: 4618 mov r0, r3
  15330. 8006de8: 3710 adds r7, #16
  15331. 8006dea: 46bd mov sp, r7
  15332. 8006dec: bd80 pop {r7, pc}
  15333. 08006dee <ADC_DMAConvCplt>:
  15334. * @brief DMA transfer complete callback.
  15335. * @param hdma pointer to DMA handle.
  15336. * @retval None
  15337. */
  15338. void ADC_DMAConvCplt(DMA_HandleTypeDef *hdma)
  15339. {
  15340. 8006dee: b580 push {r7, lr}
  15341. 8006df0: b084 sub sp, #16
  15342. 8006df2: af00 add r7, sp, #0
  15343. 8006df4: 6078 str r0, [r7, #4]
  15344. /* Retrieve ADC handle corresponding to current DMA handle */
  15345. ADC_HandleTypeDef *hadc = (ADC_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
  15346. 8006df6: 687b ldr r3, [r7, #4]
  15347. 8006df8: 6b9b ldr r3, [r3, #56] @ 0x38
  15348. 8006dfa: 60fb str r3, [r7, #12]
  15349. /* Update state machine on conversion status if not in error state */
  15350. if ((hadc->State & (HAL_ADC_STATE_ERROR_INTERNAL | HAL_ADC_STATE_ERROR_DMA)) == 0UL)
  15351. 8006dfc: 68fb ldr r3, [r7, #12]
  15352. 8006dfe: 6d5b ldr r3, [r3, #84] @ 0x54
  15353. 8006e00: f003 0350 and.w r3, r3, #80 @ 0x50
  15354. 8006e04: 2b00 cmp r3, #0
  15355. 8006e06: d14b bne.n 8006ea0 <ADC_DMAConvCplt+0xb2>
  15356. {
  15357. /* Set ADC state */
  15358. SET_BIT(hadc->State, HAL_ADC_STATE_REG_EOC);
  15359. 8006e08: 68fb ldr r3, [r7, #12]
  15360. 8006e0a: 6d5b ldr r3, [r3, #84] @ 0x54
  15361. 8006e0c: f443 7200 orr.w r2, r3, #512 @ 0x200
  15362. 8006e10: 68fb ldr r3, [r7, #12]
  15363. 8006e12: 655a str r2, [r3, #84] @ 0x54
  15364. /* Determine whether any further conversion upcoming on group regular */
  15365. /* by external trigger, continuous mode or scan sequence on going */
  15366. /* to disable interruption. */
  15367. /* Is it the end of the regular sequence ? */
  15368. if ((hadc->Instance->ISR & ADC_FLAG_EOS) != 0UL)
  15369. 8006e14: 68fb ldr r3, [r7, #12]
  15370. 8006e16: 681b ldr r3, [r3, #0]
  15371. 8006e18: 681b ldr r3, [r3, #0]
  15372. 8006e1a: f003 0308 and.w r3, r3, #8
  15373. 8006e1e: 2b00 cmp r3, #0
  15374. 8006e20: d021 beq.n 8006e66 <ADC_DMAConvCplt+0x78>
  15375. {
  15376. /* Are conversions software-triggered ? */
  15377. if (LL_ADC_REG_IsTriggerSourceSWStart(hadc->Instance) != 0UL)
  15378. 8006e22: 68fb ldr r3, [r7, #12]
  15379. 8006e24: 681b ldr r3, [r3, #0]
  15380. 8006e26: 4618 mov r0, r3
  15381. 8006e28: f7fe ff9c bl 8005d64 <LL_ADC_REG_IsTriggerSourceSWStart>
  15382. 8006e2c: 4603 mov r3, r0
  15383. 8006e2e: 2b00 cmp r3, #0
  15384. 8006e30: d032 beq.n 8006e98 <ADC_DMAConvCplt+0xaa>
  15385. {
  15386. /* Is CONT bit set ? */
  15387. if (READ_BIT(hadc->Instance->CFGR, ADC_CFGR_CONT) == 0UL)
  15388. 8006e32: 68fb ldr r3, [r7, #12]
  15389. 8006e34: 681b ldr r3, [r3, #0]
  15390. 8006e36: 68db ldr r3, [r3, #12]
  15391. 8006e38: f403 5300 and.w r3, r3, #8192 @ 0x2000
  15392. 8006e3c: 2b00 cmp r3, #0
  15393. 8006e3e: d12b bne.n 8006e98 <ADC_DMAConvCplt+0xaa>
  15394. {
  15395. /* CONT bit is not set, no more conversions expected */
  15396. CLEAR_BIT(hadc->State, HAL_ADC_STATE_REG_BUSY);
  15397. 8006e40: 68fb ldr r3, [r7, #12]
  15398. 8006e42: 6d5b ldr r3, [r3, #84] @ 0x54
  15399. 8006e44: f423 7280 bic.w r2, r3, #256 @ 0x100
  15400. 8006e48: 68fb ldr r3, [r7, #12]
  15401. 8006e4a: 655a str r2, [r3, #84] @ 0x54
  15402. if ((hadc->State & HAL_ADC_STATE_INJ_BUSY) == 0UL)
  15403. 8006e4c: 68fb ldr r3, [r7, #12]
  15404. 8006e4e: 6d5b ldr r3, [r3, #84] @ 0x54
  15405. 8006e50: f403 5380 and.w r3, r3, #4096 @ 0x1000
  15406. 8006e54: 2b00 cmp r3, #0
  15407. 8006e56: d11f bne.n 8006e98 <ADC_DMAConvCplt+0xaa>
  15408. {
  15409. SET_BIT(hadc->State, HAL_ADC_STATE_READY);
  15410. 8006e58: 68fb ldr r3, [r7, #12]
  15411. 8006e5a: 6d5b ldr r3, [r3, #84] @ 0x54
  15412. 8006e5c: f043 0201 orr.w r2, r3, #1
  15413. 8006e60: 68fb ldr r3, [r7, #12]
  15414. 8006e62: 655a str r2, [r3, #84] @ 0x54
  15415. 8006e64: e018 b.n 8006e98 <ADC_DMAConvCplt+0xaa>
  15416. }
  15417. else
  15418. {
  15419. /* DMA End of Transfer interrupt was triggered but conversions sequence
  15420. is not over. If DMACFG is set to 0, conversions are stopped. */
  15421. if (READ_BIT(hadc->Instance->CFGR, ADC_CFGR_DMNGT) == 0UL)
  15422. 8006e66: 68fb ldr r3, [r7, #12]
  15423. 8006e68: 681b ldr r3, [r3, #0]
  15424. 8006e6a: 68db ldr r3, [r3, #12]
  15425. 8006e6c: f003 0303 and.w r3, r3, #3
  15426. 8006e70: 2b00 cmp r3, #0
  15427. 8006e72: d111 bne.n 8006e98 <ADC_DMAConvCplt+0xaa>
  15428. {
  15429. /* DMACFG bit is not set, conversions are stopped. */
  15430. CLEAR_BIT(hadc->State, HAL_ADC_STATE_REG_BUSY);
  15431. 8006e74: 68fb ldr r3, [r7, #12]
  15432. 8006e76: 6d5b ldr r3, [r3, #84] @ 0x54
  15433. 8006e78: f423 7280 bic.w r2, r3, #256 @ 0x100
  15434. 8006e7c: 68fb ldr r3, [r7, #12]
  15435. 8006e7e: 655a str r2, [r3, #84] @ 0x54
  15436. if ((hadc->State & HAL_ADC_STATE_INJ_BUSY) == 0UL)
  15437. 8006e80: 68fb ldr r3, [r7, #12]
  15438. 8006e82: 6d5b ldr r3, [r3, #84] @ 0x54
  15439. 8006e84: f403 5380 and.w r3, r3, #4096 @ 0x1000
  15440. 8006e88: 2b00 cmp r3, #0
  15441. 8006e8a: d105 bne.n 8006e98 <ADC_DMAConvCplt+0xaa>
  15442. {
  15443. SET_BIT(hadc->State, HAL_ADC_STATE_READY);
  15444. 8006e8c: 68fb ldr r3, [r7, #12]
  15445. 8006e8e: 6d5b ldr r3, [r3, #84] @ 0x54
  15446. 8006e90: f043 0201 orr.w r2, r3, #1
  15447. 8006e94: 68fb ldr r3, [r7, #12]
  15448. 8006e96: 655a str r2, [r3, #84] @ 0x54
  15449. /* Conversion complete callback */
  15450. #if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)
  15451. hadc->ConvCpltCallback(hadc);
  15452. #else
  15453. HAL_ADC_ConvCpltCallback(hadc);
  15454. 8006e98: 68f8 ldr r0, [r7, #12]
  15455. 8006e9a: f7fa fc31 bl 8001700 <HAL_ADC_ConvCpltCallback>
  15456. {
  15457. /* Call ADC DMA error callback */
  15458. hadc->DMA_Handle->XferErrorCallback(hdma);
  15459. }
  15460. }
  15461. }
  15462. 8006e9e: e00e b.n 8006ebe <ADC_DMAConvCplt+0xd0>
  15463. if ((hadc->State & HAL_ADC_STATE_ERROR_INTERNAL) != 0UL)
  15464. 8006ea0: 68fb ldr r3, [r7, #12]
  15465. 8006ea2: 6d5b ldr r3, [r3, #84] @ 0x54
  15466. 8006ea4: f003 0310 and.w r3, r3, #16
  15467. 8006ea8: 2b00 cmp r3, #0
  15468. 8006eaa: d003 beq.n 8006eb4 <ADC_DMAConvCplt+0xc6>
  15469. HAL_ADC_ErrorCallback(hadc);
  15470. 8006eac: 68f8 ldr r0, [r7, #12]
  15471. 8006eae: f7ff fb4f bl 8006550 <HAL_ADC_ErrorCallback>
  15472. }
  15473. 8006eb2: e004 b.n 8006ebe <ADC_DMAConvCplt+0xd0>
  15474. hadc->DMA_Handle->XferErrorCallback(hdma);
  15475. 8006eb4: 68fb ldr r3, [r7, #12]
  15476. 8006eb6: 6cdb ldr r3, [r3, #76] @ 0x4c
  15477. 8006eb8: 6cdb ldr r3, [r3, #76] @ 0x4c
  15478. 8006eba: 6878 ldr r0, [r7, #4]
  15479. 8006ebc: 4798 blx r3
  15480. }
  15481. 8006ebe: bf00 nop
  15482. 8006ec0: 3710 adds r7, #16
  15483. 8006ec2: 46bd mov sp, r7
  15484. 8006ec4: bd80 pop {r7, pc}
  15485. 08006ec6 <ADC_DMAHalfConvCplt>:
  15486. * @brief DMA half transfer complete callback.
  15487. * @param hdma pointer to DMA handle.
  15488. * @retval None
  15489. */
  15490. void ADC_DMAHalfConvCplt(DMA_HandleTypeDef *hdma)
  15491. {
  15492. 8006ec6: b580 push {r7, lr}
  15493. 8006ec8: b084 sub sp, #16
  15494. 8006eca: af00 add r7, sp, #0
  15495. 8006ecc: 6078 str r0, [r7, #4]
  15496. /* Retrieve ADC handle corresponding to current DMA handle */
  15497. ADC_HandleTypeDef *hadc = (ADC_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
  15498. 8006ece: 687b ldr r3, [r7, #4]
  15499. 8006ed0: 6b9b ldr r3, [r3, #56] @ 0x38
  15500. 8006ed2: 60fb str r3, [r7, #12]
  15501. /* Half conversion callback */
  15502. #if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)
  15503. hadc->ConvHalfCpltCallback(hadc);
  15504. #else
  15505. HAL_ADC_ConvHalfCpltCallback(hadc);
  15506. 8006ed4: 68f8 ldr r0, [r7, #12]
  15507. 8006ed6: f7ff fb31 bl 800653c <HAL_ADC_ConvHalfCpltCallback>
  15508. #endif /* USE_HAL_ADC_REGISTER_CALLBACKS */
  15509. }
  15510. 8006eda: bf00 nop
  15511. 8006edc: 3710 adds r7, #16
  15512. 8006ede: 46bd mov sp, r7
  15513. 8006ee0: bd80 pop {r7, pc}
  15514. 08006ee2 <ADC_DMAError>:
  15515. * @brief DMA error callback.
  15516. * @param hdma pointer to DMA handle.
  15517. * @retval None
  15518. */
  15519. void ADC_DMAError(DMA_HandleTypeDef *hdma)
  15520. {
  15521. 8006ee2: b580 push {r7, lr}
  15522. 8006ee4: b084 sub sp, #16
  15523. 8006ee6: af00 add r7, sp, #0
  15524. 8006ee8: 6078 str r0, [r7, #4]
  15525. /* Retrieve ADC handle corresponding to current DMA handle */
  15526. ADC_HandleTypeDef *hadc = (ADC_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
  15527. 8006eea: 687b ldr r3, [r7, #4]
  15528. 8006eec: 6b9b ldr r3, [r3, #56] @ 0x38
  15529. 8006eee: 60fb str r3, [r7, #12]
  15530. /* Set ADC state */
  15531. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_DMA);
  15532. 8006ef0: 68fb ldr r3, [r7, #12]
  15533. 8006ef2: 6d5b ldr r3, [r3, #84] @ 0x54
  15534. 8006ef4: f043 0240 orr.w r2, r3, #64 @ 0x40
  15535. 8006ef8: 68fb ldr r3, [r7, #12]
  15536. 8006efa: 655a str r2, [r3, #84] @ 0x54
  15537. /* Set ADC error code to DMA error */
  15538. SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_DMA);
  15539. 8006efc: 68fb ldr r3, [r7, #12]
  15540. 8006efe: 6d9b ldr r3, [r3, #88] @ 0x58
  15541. 8006f00: f043 0204 orr.w r2, r3, #4
  15542. 8006f04: 68fb ldr r3, [r7, #12]
  15543. 8006f06: 659a str r2, [r3, #88] @ 0x58
  15544. /* Error callback */
  15545. #if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)
  15546. hadc->ErrorCallback(hadc);
  15547. #else
  15548. HAL_ADC_ErrorCallback(hadc);
  15549. 8006f08: 68f8 ldr r0, [r7, #12]
  15550. 8006f0a: f7ff fb21 bl 8006550 <HAL_ADC_ErrorCallback>
  15551. #endif /* USE_HAL_ADC_REGISTER_CALLBACKS */
  15552. }
  15553. 8006f0e: bf00 nop
  15554. 8006f10: 3710 adds r7, #16
  15555. 8006f12: 46bd mov sp, r7
  15556. 8006f14: bd80 pop {r7, pc}
  15557. ...
  15558. 08006f18 <ADC_ConfigureBoostMode>:
  15559. * stopped.
  15560. * @param hadc ADC handle
  15561. * @retval None.
  15562. */
  15563. void ADC_ConfigureBoostMode(ADC_HandleTypeDef *hadc)
  15564. {
  15565. 8006f18: b580 push {r7, lr}
  15566. 8006f1a: b084 sub sp, #16
  15567. 8006f1c: af00 add r7, sp, #0
  15568. 8006f1e: 6078 str r0, [r7, #4]
  15569. uint32_t freq;
  15570. if (ADC_IS_SYNCHRONOUS_CLOCK_MODE(hadc))
  15571. 8006f20: 687b ldr r3, [r7, #4]
  15572. 8006f22: 681b ldr r3, [r3, #0]
  15573. 8006f24: 4a7a ldr r2, [pc, #488] @ (8007110 <ADC_ConfigureBoostMode+0x1f8>)
  15574. 8006f26: 4293 cmp r3, r2
  15575. 8006f28: d004 beq.n 8006f34 <ADC_ConfigureBoostMode+0x1c>
  15576. 8006f2a: 687b ldr r3, [r7, #4]
  15577. 8006f2c: 681b ldr r3, [r3, #0]
  15578. 8006f2e: 4a79 ldr r2, [pc, #484] @ (8007114 <ADC_ConfigureBoostMode+0x1fc>)
  15579. 8006f30: 4293 cmp r3, r2
  15580. 8006f32: d109 bne.n 8006f48 <ADC_ConfigureBoostMode+0x30>
  15581. 8006f34: 4b78 ldr r3, [pc, #480] @ (8007118 <ADC_ConfigureBoostMode+0x200>)
  15582. 8006f36: 689b ldr r3, [r3, #8]
  15583. 8006f38: f403 3340 and.w r3, r3, #196608 @ 0x30000
  15584. 8006f3c: 2b00 cmp r3, #0
  15585. 8006f3e: bf14 ite ne
  15586. 8006f40: 2301 movne r3, #1
  15587. 8006f42: 2300 moveq r3, #0
  15588. 8006f44: b2db uxtb r3, r3
  15589. 8006f46: e008 b.n 8006f5a <ADC_ConfigureBoostMode+0x42>
  15590. 8006f48: 4b74 ldr r3, [pc, #464] @ (800711c <ADC_ConfigureBoostMode+0x204>)
  15591. 8006f4a: 689b ldr r3, [r3, #8]
  15592. 8006f4c: f403 3340 and.w r3, r3, #196608 @ 0x30000
  15593. 8006f50: 2b00 cmp r3, #0
  15594. 8006f52: bf14 ite ne
  15595. 8006f54: 2301 movne r3, #1
  15596. 8006f56: 2300 moveq r3, #0
  15597. 8006f58: b2db uxtb r3, r3
  15598. 8006f5a: 2b00 cmp r3, #0
  15599. 8006f5c: d01c beq.n 8006f98 <ADC_ConfigureBoostMode+0x80>
  15600. {
  15601. freq = HAL_RCC_GetHCLKFreq();
  15602. 8006f5e: f005 fae9 bl 800c534 <HAL_RCC_GetHCLKFreq>
  15603. 8006f62: 60f8 str r0, [r7, #12]
  15604. switch (hadc->Init.ClockPrescaler)
  15605. 8006f64: 687b ldr r3, [r7, #4]
  15606. 8006f66: 685b ldr r3, [r3, #4]
  15607. 8006f68: f5b3 3f40 cmp.w r3, #196608 @ 0x30000
  15608. 8006f6c: d010 beq.n 8006f90 <ADC_ConfigureBoostMode+0x78>
  15609. 8006f6e: f5b3 3f40 cmp.w r3, #196608 @ 0x30000
  15610. 8006f72: d873 bhi.n 800705c <ADC_ConfigureBoostMode+0x144>
  15611. 8006f74: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  15612. 8006f78: d002 beq.n 8006f80 <ADC_ConfigureBoostMode+0x68>
  15613. 8006f7a: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  15614. 8006f7e: d16d bne.n 800705c <ADC_ConfigureBoostMode+0x144>
  15615. {
  15616. case ADC_CLOCK_SYNC_PCLK_DIV1:
  15617. case ADC_CLOCK_SYNC_PCLK_DIV2:
  15618. freq /= (hadc->Init.ClockPrescaler >> ADC_CCR_CKMODE_Pos);
  15619. 8006f80: 687b ldr r3, [r7, #4]
  15620. 8006f82: 685b ldr r3, [r3, #4]
  15621. 8006f84: 0c1b lsrs r3, r3, #16
  15622. 8006f86: 68fa ldr r2, [r7, #12]
  15623. 8006f88: fbb2 f3f3 udiv r3, r2, r3
  15624. 8006f8c: 60fb str r3, [r7, #12]
  15625. break;
  15626. 8006f8e: e068 b.n 8007062 <ADC_ConfigureBoostMode+0x14a>
  15627. case ADC_CLOCK_SYNC_PCLK_DIV4:
  15628. freq /= 4UL;
  15629. 8006f90: 68fb ldr r3, [r7, #12]
  15630. 8006f92: 089b lsrs r3, r3, #2
  15631. 8006f94: 60fb str r3, [r7, #12]
  15632. break;
  15633. 8006f96: e064 b.n 8007062 <ADC_ConfigureBoostMode+0x14a>
  15634. break;
  15635. }
  15636. }
  15637. else
  15638. {
  15639. freq = HAL_RCCEx_GetPeriphCLKFreq(RCC_PERIPHCLK_ADC);
  15640. 8006f98: f44f 2000 mov.w r0, #524288 @ 0x80000
  15641. 8006f9c: f04f 0100 mov.w r1, #0
  15642. 8006fa0: f006 fd54 bl 800da4c <HAL_RCCEx_GetPeriphCLKFreq>
  15643. 8006fa4: 60f8 str r0, [r7, #12]
  15644. switch (hadc->Init.ClockPrescaler)
  15645. 8006fa6: 687b ldr r3, [r7, #4]
  15646. 8006fa8: 685b ldr r3, [r3, #4]
  15647. 8006faa: f5b3 1f30 cmp.w r3, #2883584 @ 0x2c0000
  15648. 8006fae: d051 beq.n 8007054 <ADC_ConfigureBoostMode+0x13c>
  15649. 8006fb0: f5b3 1f30 cmp.w r3, #2883584 @ 0x2c0000
  15650. 8006fb4: d854 bhi.n 8007060 <ADC_ConfigureBoostMode+0x148>
  15651. 8006fb6: f5b3 1f20 cmp.w r3, #2621440 @ 0x280000
  15652. 8006fba: d047 beq.n 800704c <ADC_ConfigureBoostMode+0x134>
  15653. 8006fbc: f5b3 1f20 cmp.w r3, #2621440 @ 0x280000
  15654. 8006fc0: d84e bhi.n 8007060 <ADC_ConfigureBoostMode+0x148>
  15655. 8006fc2: f5b3 1f10 cmp.w r3, #2359296 @ 0x240000
  15656. 8006fc6: d03d beq.n 8007044 <ADC_ConfigureBoostMode+0x12c>
  15657. 8006fc8: f5b3 1f10 cmp.w r3, #2359296 @ 0x240000
  15658. 8006fcc: d848 bhi.n 8007060 <ADC_ConfigureBoostMode+0x148>
  15659. 8006fce: f5b3 1f00 cmp.w r3, #2097152 @ 0x200000
  15660. 8006fd2: d033 beq.n 800703c <ADC_ConfigureBoostMode+0x124>
  15661. 8006fd4: f5b3 1f00 cmp.w r3, #2097152 @ 0x200000
  15662. 8006fd8: d842 bhi.n 8007060 <ADC_ConfigureBoostMode+0x148>
  15663. 8006fda: f5b3 1fe0 cmp.w r3, #1835008 @ 0x1c0000
  15664. 8006fde: d029 beq.n 8007034 <ADC_ConfigureBoostMode+0x11c>
  15665. 8006fe0: f5b3 1fe0 cmp.w r3, #1835008 @ 0x1c0000
  15666. 8006fe4: d83c bhi.n 8007060 <ADC_ConfigureBoostMode+0x148>
  15667. 8006fe6: f5b3 1fc0 cmp.w r3, #1572864 @ 0x180000
  15668. 8006fea: d01a beq.n 8007022 <ADC_ConfigureBoostMode+0x10a>
  15669. 8006fec: f5b3 1fc0 cmp.w r3, #1572864 @ 0x180000
  15670. 8006ff0: d836 bhi.n 8007060 <ADC_ConfigureBoostMode+0x148>
  15671. 8006ff2: f5b3 1fa0 cmp.w r3, #1310720 @ 0x140000
  15672. 8006ff6: d014 beq.n 8007022 <ADC_ConfigureBoostMode+0x10a>
  15673. 8006ff8: f5b3 1fa0 cmp.w r3, #1310720 @ 0x140000
  15674. 8006ffc: d830 bhi.n 8007060 <ADC_ConfigureBoostMode+0x148>
  15675. 8006ffe: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
  15676. 8007002: d00e beq.n 8007022 <ADC_ConfigureBoostMode+0x10a>
  15677. 8007004: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
  15678. 8007008: d82a bhi.n 8007060 <ADC_ConfigureBoostMode+0x148>
  15679. 800700a: f5b3 2f40 cmp.w r3, #786432 @ 0xc0000
  15680. 800700e: d008 beq.n 8007022 <ADC_ConfigureBoostMode+0x10a>
  15681. 8007010: f5b3 2f40 cmp.w r3, #786432 @ 0xc0000
  15682. 8007014: d824 bhi.n 8007060 <ADC_ConfigureBoostMode+0x148>
  15683. 8007016: f5b3 2f80 cmp.w r3, #262144 @ 0x40000
  15684. 800701a: d002 beq.n 8007022 <ADC_ConfigureBoostMode+0x10a>
  15685. 800701c: f5b3 2f00 cmp.w r3, #524288 @ 0x80000
  15686. 8007020: d11e bne.n 8007060 <ADC_ConfigureBoostMode+0x148>
  15687. case ADC_CLOCK_ASYNC_DIV4:
  15688. case ADC_CLOCK_ASYNC_DIV6:
  15689. case ADC_CLOCK_ASYNC_DIV8:
  15690. case ADC_CLOCK_ASYNC_DIV10:
  15691. case ADC_CLOCK_ASYNC_DIV12:
  15692. freq /= ((hadc->Init.ClockPrescaler >> ADC_CCR_PRESC_Pos) << 1UL);
  15693. 8007022: 687b ldr r3, [r7, #4]
  15694. 8007024: 685b ldr r3, [r3, #4]
  15695. 8007026: 0c9b lsrs r3, r3, #18
  15696. 8007028: 005b lsls r3, r3, #1
  15697. 800702a: 68fa ldr r2, [r7, #12]
  15698. 800702c: fbb2 f3f3 udiv r3, r2, r3
  15699. 8007030: 60fb str r3, [r7, #12]
  15700. break;
  15701. 8007032: e016 b.n 8007062 <ADC_ConfigureBoostMode+0x14a>
  15702. case ADC_CLOCK_ASYNC_DIV16:
  15703. freq /= 16UL;
  15704. 8007034: 68fb ldr r3, [r7, #12]
  15705. 8007036: 091b lsrs r3, r3, #4
  15706. 8007038: 60fb str r3, [r7, #12]
  15707. break;
  15708. 800703a: e012 b.n 8007062 <ADC_ConfigureBoostMode+0x14a>
  15709. case ADC_CLOCK_ASYNC_DIV32:
  15710. freq /= 32UL;
  15711. 800703c: 68fb ldr r3, [r7, #12]
  15712. 800703e: 095b lsrs r3, r3, #5
  15713. 8007040: 60fb str r3, [r7, #12]
  15714. break;
  15715. 8007042: e00e b.n 8007062 <ADC_ConfigureBoostMode+0x14a>
  15716. case ADC_CLOCK_ASYNC_DIV64:
  15717. freq /= 64UL;
  15718. 8007044: 68fb ldr r3, [r7, #12]
  15719. 8007046: 099b lsrs r3, r3, #6
  15720. 8007048: 60fb str r3, [r7, #12]
  15721. break;
  15722. 800704a: e00a b.n 8007062 <ADC_ConfigureBoostMode+0x14a>
  15723. case ADC_CLOCK_ASYNC_DIV128:
  15724. freq /= 128UL;
  15725. 800704c: 68fb ldr r3, [r7, #12]
  15726. 800704e: 09db lsrs r3, r3, #7
  15727. 8007050: 60fb str r3, [r7, #12]
  15728. break;
  15729. 8007052: e006 b.n 8007062 <ADC_ConfigureBoostMode+0x14a>
  15730. case ADC_CLOCK_ASYNC_DIV256:
  15731. freq /= 256UL;
  15732. 8007054: 68fb ldr r3, [r7, #12]
  15733. 8007056: 0a1b lsrs r3, r3, #8
  15734. 8007058: 60fb str r3, [r7, #12]
  15735. break;
  15736. 800705a: e002 b.n 8007062 <ADC_ConfigureBoostMode+0x14a>
  15737. break;
  15738. 800705c: bf00 nop
  15739. 800705e: e000 b.n 8007062 <ADC_ConfigureBoostMode+0x14a>
  15740. default:
  15741. break;
  15742. 8007060: bf00 nop
  15743. else /* if(freq > 25000000UL) */
  15744. {
  15745. MODIFY_REG(hadc->Instance->CR, ADC_CR_BOOST, ADC_CR_BOOST_1 | ADC_CR_BOOST_0);
  15746. }
  15747. #else
  15748. if (HAL_GetREVID() <= REV_ID_Y) /* STM32H7 silicon Rev.Y */
  15749. 8007062: f7fe fdb1 bl 8005bc8 <HAL_GetREVID>
  15750. 8007066: 4603 mov r3, r0
  15751. 8007068: f241 0203 movw r2, #4099 @ 0x1003
  15752. 800706c: 4293 cmp r3, r2
  15753. 800706e: d815 bhi.n 800709c <ADC_ConfigureBoostMode+0x184>
  15754. {
  15755. if (freq > 20000000UL)
  15756. 8007070: 68fb ldr r3, [r7, #12]
  15757. 8007072: 4a2b ldr r2, [pc, #172] @ (8007120 <ADC_ConfigureBoostMode+0x208>)
  15758. 8007074: 4293 cmp r3, r2
  15759. 8007076: d908 bls.n 800708a <ADC_ConfigureBoostMode+0x172>
  15760. {
  15761. SET_BIT(hadc->Instance->CR, ADC_CR_BOOST_0);
  15762. 8007078: 687b ldr r3, [r7, #4]
  15763. 800707a: 681b ldr r3, [r3, #0]
  15764. 800707c: 689a ldr r2, [r3, #8]
  15765. 800707e: 687b ldr r3, [r7, #4]
  15766. 8007080: 681b ldr r3, [r3, #0]
  15767. 8007082: f442 7280 orr.w r2, r2, #256 @ 0x100
  15768. 8007086: 609a str r2, [r3, #8]
  15769. {
  15770. MODIFY_REG(hadc->Instance->CR, ADC_CR_BOOST, ADC_CR_BOOST_1 | ADC_CR_BOOST_0);
  15771. }
  15772. }
  15773. #endif /* ADC_VER_V5_3 */
  15774. }
  15775. 8007088: e03e b.n 8007108 <ADC_ConfigureBoostMode+0x1f0>
  15776. CLEAR_BIT(hadc->Instance->CR, ADC_CR_BOOST_0);
  15777. 800708a: 687b ldr r3, [r7, #4]
  15778. 800708c: 681b ldr r3, [r3, #0]
  15779. 800708e: 689a ldr r2, [r3, #8]
  15780. 8007090: 687b ldr r3, [r7, #4]
  15781. 8007092: 681b ldr r3, [r3, #0]
  15782. 8007094: f422 7280 bic.w r2, r2, #256 @ 0x100
  15783. 8007098: 609a str r2, [r3, #8]
  15784. }
  15785. 800709a: e035 b.n 8007108 <ADC_ConfigureBoostMode+0x1f0>
  15786. freq /= 2U; /* divider by 2 for Rev.V */
  15787. 800709c: 68fb ldr r3, [r7, #12]
  15788. 800709e: 085b lsrs r3, r3, #1
  15789. 80070a0: 60fb str r3, [r7, #12]
  15790. if (freq <= 6250000UL)
  15791. 80070a2: 68fb ldr r3, [r7, #12]
  15792. 80070a4: 4a1f ldr r2, [pc, #124] @ (8007124 <ADC_ConfigureBoostMode+0x20c>)
  15793. 80070a6: 4293 cmp r3, r2
  15794. 80070a8: d808 bhi.n 80070bc <ADC_ConfigureBoostMode+0x1a4>
  15795. MODIFY_REG(hadc->Instance->CR, ADC_CR_BOOST, 0UL);
  15796. 80070aa: 687b ldr r3, [r7, #4]
  15797. 80070ac: 681b ldr r3, [r3, #0]
  15798. 80070ae: 689a ldr r2, [r3, #8]
  15799. 80070b0: 687b ldr r3, [r7, #4]
  15800. 80070b2: 681b ldr r3, [r3, #0]
  15801. 80070b4: f422 7240 bic.w r2, r2, #768 @ 0x300
  15802. 80070b8: 609a str r2, [r3, #8]
  15803. }
  15804. 80070ba: e025 b.n 8007108 <ADC_ConfigureBoostMode+0x1f0>
  15805. else if (freq <= 12500000UL)
  15806. 80070bc: 68fb ldr r3, [r7, #12]
  15807. 80070be: 4a1a ldr r2, [pc, #104] @ (8007128 <ADC_ConfigureBoostMode+0x210>)
  15808. 80070c0: 4293 cmp r3, r2
  15809. 80070c2: d80a bhi.n 80070da <ADC_ConfigureBoostMode+0x1c2>
  15810. MODIFY_REG(hadc->Instance->CR, ADC_CR_BOOST, ADC_CR_BOOST_0);
  15811. 80070c4: 687b ldr r3, [r7, #4]
  15812. 80070c6: 681b ldr r3, [r3, #0]
  15813. 80070c8: 689b ldr r3, [r3, #8]
  15814. 80070ca: f423 7240 bic.w r2, r3, #768 @ 0x300
  15815. 80070ce: 687b ldr r3, [r7, #4]
  15816. 80070d0: 681b ldr r3, [r3, #0]
  15817. 80070d2: f442 7280 orr.w r2, r2, #256 @ 0x100
  15818. 80070d6: 609a str r2, [r3, #8]
  15819. }
  15820. 80070d8: e016 b.n 8007108 <ADC_ConfigureBoostMode+0x1f0>
  15821. else if (freq <= 25000000UL)
  15822. 80070da: 68fb ldr r3, [r7, #12]
  15823. 80070dc: 4a13 ldr r2, [pc, #76] @ (800712c <ADC_ConfigureBoostMode+0x214>)
  15824. 80070de: 4293 cmp r3, r2
  15825. 80070e0: d80a bhi.n 80070f8 <ADC_ConfigureBoostMode+0x1e0>
  15826. MODIFY_REG(hadc->Instance->CR, ADC_CR_BOOST, ADC_CR_BOOST_1);
  15827. 80070e2: 687b ldr r3, [r7, #4]
  15828. 80070e4: 681b ldr r3, [r3, #0]
  15829. 80070e6: 689b ldr r3, [r3, #8]
  15830. 80070e8: f423 7240 bic.w r2, r3, #768 @ 0x300
  15831. 80070ec: 687b ldr r3, [r7, #4]
  15832. 80070ee: 681b ldr r3, [r3, #0]
  15833. 80070f0: f442 7200 orr.w r2, r2, #512 @ 0x200
  15834. 80070f4: 609a str r2, [r3, #8]
  15835. }
  15836. 80070f6: e007 b.n 8007108 <ADC_ConfigureBoostMode+0x1f0>
  15837. MODIFY_REG(hadc->Instance->CR, ADC_CR_BOOST, ADC_CR_BOOST_1 | ADC_CR_BOOST_0);
  15838. 80070f8: 687b ldr r3, [r7, #4]
  15839. 80070fa: 681b ldr r3, [r3, #0]
  15840. 80070fc: 689a ldr r2, [r3, #8]
  15841. 80070fe: 687b ldr r3, [r7, #4]
  15842. 8007100: 681b ldr r3, [r3, #0]
  15843. 8007102: f442 7240 orr.w r2, r2, #768 @ 0x300
  15844. 8007106: 609a str r2, [r3, #8]
  15845. }
  15846. 8007108: bf00 nop
  15847. 800710a: 3710 adds r7, #16
  15848. 800710c: 46bd mov sp, r7
  15849. 800710e: bd80 pop {r7, pc}
  15850. 8007110: 40022000 .word 0x40022000
  15851. 8007114: 40022100 .word 0x40022100
  15852. 8007118: 40022300 .word 0x40022300
  15853. 800711c: 58026300 .word 0x58026300
  15854. 8007120: 01312d00 .word 0x01312d00
  15855. 8007124: 005f5e10 .word 0x005f5e10
  15856. 8007128: 00bebc20 .word 0x00bebc20
  15857. 800712c: 017d7840 .word 0x017d7840
  15858. 08007130 <LL_ADC_IsEnabled>:
  15859. {
  15860. 8007130: b480 push {r7}
  15861. 8007132: b083 sub sp, #12
  15862. 8007134: af00 add r7, sp, #0
  15863. 8007136: 6078 str r0, [r7, #4]
  15864. return ((READ_BIT(ADCx->CR, ADC_CR_ADEN) == (ADC_CR_ADEN)) ? 1UL : 0UL);
  15865. 8007138: 687b ldr r3, [r7, #4]
  15866. 800713a: 689b ldr r3, [r3, #8]
  15867. 800713c: f003 0301 and.w r3, r3, #1
  15868. 8007140: 2b01 cmp r3, #1
  15869. 8007142: d101 bne.n 8007148 <LL_ADC_IsEnabled+0x18>
  15870. 8007144: 2301 movs r3, #1
  15871. 8007146: e000 b.n 800714a <LL_ADC_IsEnabled+0x1a>
  15872. 8007148: 2300 movs r3, #0
  15873. }
  15874. 800714a: 4618 mov r0, r3
  15875. 800714c: 370c adds r7, #12
  15876. 800714e: 46bd mov sp, r7
  15877. 8007150: f85d 7b04 ldr.w r7, [sp], #4
  15878. 8007154: 4770 bx lr
  15879. ...
  15880. 08007158 <LL_ADC_StartCalibration>:
  15881. {
  15882. 8007158: b480 push {r7}
  15883. 800715a: b085 sub sp, #20
  15884. 800715c: af00 add r7, sp, #0
  15885. 800715e: 60f8 str r0, [r7, #12]
  15886. 8007160: 60b9 str r1, [r7, #8]
  15887. 8007162: 607a str r2, [r7, #4]
  15888. MODIFY_REG(ADCx->CR,
  15889. 8007164: 68fb ldr r3, [r7, #12]
  15890. 8007166: 689a ldr r2, [r3, #8]
  15891. 8007168: 4b09 ldr r3, [pc, #36] @ (8007190 <LL_ADC_StartCalibration+0x38>)
  15892. 800716a: 4013 ands r3, r2
  15893. 800716c: 68ba ldr r2, [r7, #8]
  15894. 800716e: f402 3180 and.w r1, r2, #65536 @ 0x10000
  15895. 8007172: 687a ldr r2, [r7, #4]
  15896. 8007174: f002 4280 and.w r2, r2, #1073741824 @ 0x40000000
  15897. 8007178: 430a orrs r2, r1
  15898. 800717a: 4313 orrs r3, r2
  15899. 800717c: f043 4200 orr.w r2, r3, #2147483648 @ 0x80000000
  15900. 8007180: 68fb ldr r3, [r7, #12]
  15901. 8007182: 609a str r2, [r3, #8]
  15902. }
  15903. 8007184: bf00 nop
  15904. 8007186: 3714 adds r7, #20
  15905. 8007188: 46bd mov sp, r7
  15906. 800718a: f85d 7b04 ldr.w r7, [sp], #4
  15907. 800718e: 4770 bx lr
  15908. 8007190: 3ffeffc0 .word 0x3ffeffc0
  15909. 08007194 <LL_ADC_IsCalibrationOnGoing>:
  15910. {
  15911. 8007194: b480 push {r7}
  15912. 8007196: b083 sub sp, #12
  15913. 8007198: af00 add r7, sp, #0
  15914. 800719a: 6078 str r0, [r7, #4]
  15915. return ((READ_BIT(ADCx->CR, ADC_CR_ADCAL) == (ADC_CR_ADCAL)) ? 1UL : 0UL);
  15916. 800719c: 687b ldr r3, [r7, #4]
  15917. 800719e: 689b ldr r3, [r3, #8]
  15918. 80071a0: f003 4300 and.w r3, r3, #2147483648 @ 0x80000000
  15919. 80071a4: f1b3 4f00 cmp.w r3, #2147483648 @ 0x80000000
  15920. 80071a8: d101 bne.n 80071ae <LL_ADC_IsCalibrationOnGoing+0x1a>
  15921. 80071aa: 2301 movs r3, #1
  15922. 80071ac: e000 b.n 80071b0 <LL_ADC_IsCalibrationOnGoing+0x1c>
  15923. 80071ae: 2300 movs r3, #0
  15924. }
  15925. 80071b0: 4618 mov r0, r3
  15926. 80071b2: 370c adds r7, #12
  15927. 80071b4: 46bd mov sp, r7
  15928. 80071b6: f85d 7b04 ldr.w r7, [sp], #4
  15929. 80071ba: 4770 bx lr
  15930. 080071bc <LL_ADC_REG_IsConversionOngoing>:
  15931. {
  15932. 80071bc: b480 push {r7}
  15933. 80071be: b083 sub sp, #12
  15934. 80071c0: af00 add r7, sp, #0
  15935. 80071c2: 6078 str r0, [r7, #4]
  15936. return ((READ_BIT(ADCx->CR, ADC_CR_ADSTART) == (ADC_CR_ADSTART)) ? 1UL : 0UL);
  15937. 80071c4: 687b ldr r3, [r7, #4]
  15938. 80071c6: 689b ldr r3, [r3, #8]
  15939. 80071c8: f003 0304 and.w r3, r3, #4
  15940. 80071cc: 2b04 cmp r3, #4
  15941. 80071ce: d101 bne.n 80071d4 <LL_ADC_REG_IsConversionOngoing+0x18>
  15942. 80071d0: 2301 movs r3, #1
  15943. 80071d2: e000 b.n 80071d6 <LL_ADC_REG_IsConversionOngoing+0x1a>
  15944. 80071d4: 2300 movs r3, #0
  15945. }
  15946. 80071d6: 4618 mov r0, r3
  15947. 80071d8: 370c adds r7, #12
  15948. 80071da: 46bd mov sp, r7
  15949. 80071dc: f85d 7b04 ldr.w r7, [sp], #4
  15950. 80071e0: 4770 bx lr
  15951. ...
  15952. 080071e4 <HAL_ADCEx_Calibration_Start>:
  15953. * @arg @ref ADC_SINGLE_ENDED Channel in mode input single ended
  15954. * @arg @ref ADC_DIFFERENTIAL_ENDED Channel in mode input differential ended
  15955. * @retval HAL status
  15956. */
  15957. HAL_StatusTypeDef HAL_ADCEx_Calibration_Start(ADC_HandleTypeDef *hadc, uint32_t CalibrationMode, uint32_t SingleDiff)
  15958. {
  15959. 80071e4: b580 push {r7, lr}
  15960. 80071e6: b086 sub sp, #24
  15961. 80071e8: af00 add r7, sp, #0
  15962. 80071ea: 60f8 str r0, [r7, #12]
  15963. 80071ec: 60b9 str r1, [r7, #8]
  15964. 80071ee: 607a str r2, [r7, #4]
  15965. HAL_StatusTypeDef tmp_hal_status;
  15966. __IO uint32_t wait_loop_index = 0UL;
  15967. 80071f0: 2300 movs r3, #0
  15968. 80071f2: 613b str r3, [r7, #16]
  15969. /* Check the parameters */
  15970. assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
  15971. assert_param(IS_ADC_SINGLE_DIFFERENTIAL(SingleDiff));
  15972. /* Process locked */
  15973. __HAL_LOCK(hadc);
  15974. 80071f4: 68fb ldr r3, [r7, #12]
  15975. 80071f6: f893 3050 ldrb.w r3, [r3, #80] @ 0x50
  15976. 80071fa: 2b01 cmp r3, #1
  15977. 80071fc: d101 bne.n 8007202 <HAL_ADCEx_Calibration_Start+0x1e>
  15978. 80071fe: 2302 movs r3, #2
  15979. 8007200: e04c b.n 800729c <HAL_ADCEx_Calibration_Start+0xb8>
  15980. 8007202: 68fb ldr r3, [r7, #12]
  15981. 8007204: 2201 movs r2, #1
  15982. 8007206: f883 2050 strb.w r2, [r3, #80] @ 0x50
  15983. /* Calibration prerequisite: ADC must be disabled. */
  15984. /* Disable the ADC (if not already disabled) */
  15985. tmp_hal_status = ADC_Disable(hadc);
  15986. 800720a: 68f8 ldr r0, [r7, #12]
  15987. 800720c: f7ff fd90 bl 8006d30 <ADC_Disable>
  15988. 8007210: 4603 mov r3, r0
  15989. 8007212: 75fb strb r3, [r7, #23]
  15990. /* Check if ADC is effectively disabled */
  15991. if (tmp_hal_status == HAL_OK)
  15992. 8007214: 7dfb ldrb r3, [r7, #23]
  15993. 8007216: 2b00 cmp r3, #0
  15994. 8007218: d135 bne.n 8007286 <HAL_ADCEx_Calibration_Start+0xa2>
  15995. {
  15996. /* Set ADC state */
  15997. ADC_STATE_CLR_SET(hadc->State,
  15998. 800721a: 68fb ldr r3, [r7, #12]
  15999. 800721c: 6d5a ldr r2, [r3, #84] @ 0x54
  16000. 800721e: 4b21 ldr r3, [pc, #132] @ (80072a4 <HAL_ADCEx_Calibration_Start+0xc0>)
  16001. 8007220: 4013 ands r3, r2
  16002. 8007222: f043 0202 orr.w r2, r3, #2
  16003. 8007226: 68fb ldr r3, [r7, #12]
  16004. 8007228: 655a str r2, [r3, #84] @ 0x54
  16005. HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY,
  16006. HAL_ADC_STATE_BUSY_INTERNAL);
  16007. /* Start ADC calibration in mode single-ended or differential */
  16008. LL_ADC_StartCalibration(hadc->Instance, CalibrationMode, SingleDiff);
  16009. 800722a: 68fb ldr r3, [r7, #12]
  16010. 800722c: 681b ldr r3, [r3, #0]
  16011. 800722e: 687a ldr r2, [r7, #4]
  16012. 8007230: 68b9 ldr r1, [r7, #8]
  16013. 8007232: 4618 mov r0, r3
  16014. 8007234: f7ff ff90 bl 8007158 <LL_ADC_StartCalibration>
  16015. /* Wait for calibration completion */
  16016. while (LL_ADC_IsCalibrationOnGoing(hadc->Instance) != 0UL)
  16017. 8007238: e014 b.n 8007264 <HAL_ADCEx_Calibration_Start+0x80>
  16018. {
  16019. wait_loop_index++;
  16020. 800723a: 693b ldr r3, [r7, #16]
  16021. 800723c: 3301 adds r3, #1
  16022. 800723e: 613b str r3, [r7, #16]
  16023. if (wait_loop_index >= ADC_CALIBRATION_TIMEOUT)
  16024. 8007240: 693b ldr r3, [r7, #16]
  16025. 8007242: 4a19 ldr r2, [pc, #100] @ (80072a8 <HAL_ADCEx_Calibration_Start+0xc4>)
  16026. 8007244: 4293 cmp r3, r2
  16027. 8007246: d30d bcc.n 8007264 <HAL_ADCEx_Calibration_Start+0x80>
  16028. {
  16029. /* Update ADC state machine to error */
  16030. ADC_STATE_CLR_SET(hadc->State,
  16031. 8007248: 68fb ldr r3, [r7, #12]
  16032. 800724a: 6d5b ldr r3, [r3, #84] @ 0x54
  16033. 800724c: f023 0312 bic.w r3, r3, #18
  16034. 8007250: f043 0210 orr.w r2, r3, #16
  16035. 8007254: 68fb ldr r3, [r7, #12]
  16036. 8007256: 655a str r2, [r3, #84] @ 0x54
  16037. HAL_ADC_STATE_BUSY_INTERNAL,
  16038. HAL_ADC_STATE_ERROR_INTERNAL);
  16039. /* Process unlocked */
  16040. __HAL_UNLOCK(hadc);
  16041. 8007258: 68fb ldr r3, [r7, #12]
  16042. 800725a: 2200 movs r2, #0
  16043. 800725c: f883 2050 strb.w r2, [r3, #80] @ 0x50
  16044. return HAL_ERROR;
  16045. 8007260: 2301 movs r3, #1
  16046. 8007262: e01b b.n 800729c <HAL_ADCEx_Calibration_Start+0xb8>
  16047. while (LL_ADC_IsCalibrationOnGoing(hadc->Instance) != 0UL)
  16048. 8007264: 68fb ldr r3, [r7, #12]
  16049. 8007266: 681b ldr r3, [r3, #0]
  16050. 8007268: 4618 mov r0, r3
  16051. 800726a: f7ff ff93 bl 8007194 <LL_ADC_IsCalibrationOnGoing>
  16052. 800726e: 4603 mov r3, r0
  16053. 8007270: 2b00 cmp r3, #0
  16054. 8007272: d1e2 bne.n 800723a <HAL_ADCEx_Calibration_Start+0x56>
  16055. }
  16056. }
  16057. /* Set ADC state */
  16058. ADC_STATE_CLR_SET(hadc->State,
  16059. 8007274: 68fb ldr r3, [r7, #12]
  16060. 8007276: 6d5b ldr r3, [r3, #84] @ 0x54
  16061. 8007278: f023 0303 bic.w r3, r3, #3
  16062. 800727c: f043 0201 orr.w r2, r3, #1
  16063. 8007280: 68fb ldr r3, [r7, #12]
  16064. 8007282: 655a str r2, [r3, #84] @ 0x54
  16065. 8007284: e005 b.n 8007292 <HAL_ADCEx_Calibration_Start+0xae>
  16066. HAL_ADC_STATE_BUSY_INTERNAL,
  16067. HAL_ADC_STATE_READY);
  16068. }
  16069. else
  16070. {
  16071. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
  16072. 8007286: 68fb ldr r3, [r7, #12]
  16073. 8007288: 6d5b ldr r3, [r3, #84] @ 0x54
  16074. 800728a: f043 0210 orr.w r2, r3, #16
  16075. 800728e: 68fb ldr r3, [r7, #12]
  16076. 8007290: 655a str r2, [r3, #84] @ 0x54
  16077. /* Note: No need to update variable "tmp_hal_status" here: already set */
  16078. /* to state "HAL_ERROR" by function disabling the ADC. */
  16079. }
  16080. /* Process unlocked */
  16081. __HAL_UNLOCK(hadc);
  16082. 8007292: 68fb ldr r3, [r7, #12]
  16083. 8007294: 2200 movs r2, #0
  16084. 8007296: f883 2050 strb.w r2, [r3, #80] @ 0x50
  16085. /* Return function status */
  16086. return tmp_hal_status;
  16087. 800729a: 7dfb ldrb r3, [r7, #23]
  16088. }
  16089. 800729c: 4618 mov r0, r3
  16090. 800729e: 3718 adds r7, #24
  16091. 80072a0: 46bd mov sp, r7
  16092. 80072a2: bd80 pop {r7, pc}
  16093. 80072a4: ffffeefd .word 0xffffeefd
  16094. 80072a8: 25c3f800 .word 0x25c3f800
  16095. 080072ac <HAL_ADCEx_MultiModeConfigChannel>:
  16096. * @param hadc Master ADC handle
  16097. * @param multimode Structure of ADC multimode configuration
  16098. * @retval HAL status
  16099. */
  16100. HAL_StatusTypeDef HAL_ADCEx_MultiModeConfigChannel(ADC_HandleTypeDef *hadc, ADC_MultiModeTypeDef *multimode)
  16101. {
  16102. 80072ac: b590 push {r4, r7, lr}
  16103. 80072ae: b09f sub sp, #124 @ 0x7c
  16104. 80072b0: af00 add r7, sp, #0
  16105. 80072b2: 6078 str r0, [r7, #4]
  16106. 80072b4: 6039 str r1, [r7, #0]
  16107. HAL_StatusTypeDef tmp_hal_status = HAL_OK;
  16108. 80072b6: 2300 movs r3, #0
  16109. 80072b8: f887 3077 strb.w r3, [r7, #119] @ 0x77
  16110. assert_param(IS_ADC_DUAL_DATA_MODE(multimode->DualModeData));
  16111. assert_param(IS_ADC_SAMPLING_DELAY(multimode->TwoSamplingDelay));
  16112. }
  16113. /* Process locked */
  16114. __HAL_LOCK(hadc);
  16115. 80072bc: 687b ldr r3, [r7, #4]
  16116. 80072be: f893 3050 ldrb.w r3, [r3, #80] @ 0x50
  16117. 80072c2: 2b01 cmp r3, #1
  16118. 80072c4: d101 bne.n 80072ca <HAL_ADCEx_MultiModeConfigChannel+0x1e>
  16119. 80072c6: 2302 movs r3, #2
  16120. 80072c8: e0be b.n 8007448 <HAL_ADCEx_MultiModeConfigChannel+0x19c>
  16121. 80072ca: 687b ldr r3, [r7, #4]
  16122. 80072cc: 2201 movs r2, #1
  16123. 80072ce: f883 2050 strb.w r2, [r3, #80] @ 0x50
  16124. tmphadcSlave.State = HAL_ADC_STATE_RESET;
  16125. 80072d2: 2300 movs r3, #0
  16126. 80072d4: 65fb str r3, [r7, #92] @ 0x5c
  16127. tmphadcSlave.ErrorCode = HAL_ADC_ERROR_NONE;
  16128. 80072d6: 2300 movs r3, #0
  16129. 80072d8: 663b str r3, [r7, #96] @ 0x60
  16130. ADC_MULTI_SLAVE(hadc, &tmphadcSlave);
  16131. 80072da: 687b ldr r3, [r7, #4]
  16132. 80072dc: 681b ldr r3, [r3, #0]
  16133. 80072de: 4a5c ldr r2, [pc, #368] @ (8007450 <HAL_ADCEx_MultiModeConfigChannel+0x1a4>)
  16134. 80072e0: 4293 cmp r3, r2
  16135. 80072e2: d102 bne.n 80072ea <HAL_ADCEx_MultiModeConfigChannel+0x3e>
  16136. 80072e4: 4b5b ldr r3, [pc, #364] @ (8007454 <HAL_ADCEx_MultiModeConfigChannel+0x1a8>)
  16137. 80072e6: 60bb str r3, [r7, #8]
  16138. 80072e8: e001 b.n 80072ee <HAL_ADCEx_MultiModeConfigChannel+0x42>
  16139. 80072ea: 2300 movs r3, #0
  16140. 80072ec: 60bb str r3, [r7, #8]
  16141. if (tmphadcSlave.Instance == NULL)
  16142. 80072ee: 68bb ldr r3, [r7, #8]
  16143. 80072f0: 2b00 cmp r3, #0
  16144. 80072f2: d10b bne.n 800730c <HAL_ADCEx_MultiModeConfigChannel+0x60>
  16145. {
  16146. /* Update ADC state machine to error */
  16147. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);
  16148. 80072f4: 687b ldr r3, [r7, #4]
  16149. 80072f6: 6d5b ldr r3, [r3, #84] @ 0x54
  16150. 80072f8: f043 0220 orr.w r2, r3, #32
  16151. 80072fc: 687b ldr r3, [r7, #4]
  16152. 80072fe: 655a str r2, [r3, #84] @ 0x54
  16153. /* Process unlocked */
  16154. __HAL_UNLOCK(hadc);
  16155. 8007300: 687b ldr r3, [r7, #4]
  16156. 8007302: 2200 movs r2, #0
  16157. 8007304: f883 2050 strb.w r2, [r3, #80] @ 0x50
  16158. return HAL_ERROR;
  16159. 8007308: 2301 movs r3, #1
  16160. 800730a: e09d b.n 8007448 <HAL_ADCEx_MultiModeConfigChannel+0x19c>
  16161. /* Parameters update conditioned to ADC state: */
  16162. /* Parameters that can be updated when ADC is disabled or enabled without */
  16163. /* conversion on going on regular group: */
  16164. /* - Multimode DATA Format configuration */
  16165. tmphadcSlave_conversion_on_going = LL_ADC_REG_IsConversionOngoing((&tmphadcSlave)->Instance);
  16166. 800730c: 68bb ldr r3, [r7, #8]
  16167. 800730e: 4618 mov r0, r3
  16168. 8007310: f7ff ff54 bl 80071bc <LL_ADC_REG_IsConversionOngoing>
  16169. 8007314: 6738 str r0, [r7, #112] @ 0x70
  16170. if ((LL_ADC_REG_IsConversionOngoing(hadc->Instance) == 0UL)
  16171. 8007316: 687b ldr r3, [r7, #4]
  16172. 8007318: 681b ldr r3, [r3, #0]
  16173. 800731a: 4618 mov r0, r3
  16174. 800731c: f7ff ff4e bl 80071bc <LL_ADC_REG_IsConversionOngoing>
  16175. 8007320: 4603 mov r3, r0
  16176. 8007322: 2b00 cmp r3, #0
  16177. 8007324: d17f bne.n 8007426 <HAL_ADCEx_MultiModeConfigChannel+0x17a>
  16178. && (tmphadcSlave_conversion_on_going == 0UL))
  16179. 8007326: 6f3b ldr r3, [r7, #112] @ 0x70
  16180. 8007328: 2b00 cmp r3, #0
  16181. 800732a: d17c bne.n 8007426 <HAL_ADCEx_MultiModeConfigChannel+0x17a>
  16182. {
  16183. /* Pointer to the common control register */
  16184. tmpADC_Common = __LL_ADC_COMMON_INSTANCE(hadc->Instance);
  16185. 800732c: 687b ldr r3, [r7, #4]
  16186. 800732e: 681b ldr r3, [r3, #0]
  16187. 8007330: 4a47 ldr r2, [pc, #284] @ (8007450 <HAL_ADCEx_MultiModeConfigChannel+0x1a4>)
  16188. 8007332: 4293 cmp r3, r2
  16189. 8007334: d004 beq.n 8007340 <HAL_ADCEx_MultiModeConfigChannel+0x94>
  16190. 8007336: 687b ldr r3, [r7, #4]
  16191. 8007338: 681b ldr r3, [r3, #0]
  16192. 800733a: 4a46 ldr r2, [pc, #280] @ (8007454 <HAL_ADCEx_MultiModeConfigChannel+0x1a8>)
  16193. 800733c: 4293 cmp r3, r2
  16194. 800733e: d101 bne.n 8007344 <HAL_ADCEx_MultiModeConfigChannel+0x98>
  16195. 8007340: 4b45 ldr r3, [pc, #276] @ (8007458 <HAL_ADCEx_MultiModeConfigChannel+0x1ac>)
  16196. 8007342: e000 b.n 8007346 <HAL_ADCEx_MultiModeConfigChannel+0x9a>
  16197. 8007344: 4b45 ldr r3, [pc, #276] @ (800745c <HAL_ADCEx_MultiModeConfigChannel+0x1b0>)
  16198. 8007346: 66fb str r3, [r7, #108] @ 0x6c
  16199. /* If multimode is selected, configure all multimode parameters. */
  16200. /* Otherwise, reset multimode parameters (can be used in case of */
  16201. /* transition from multimode to independent mode). */
  16202. if (multimode->Mode != ADC_MODE_INDEPENDENT)
  16203. 8007348: 683b ldr r3, [r7, #0]
  16204. 800734a: 681b ldr r3, [r3, #0]
  16205. 800734c: 2b00 cmp r3, #0
  16206. 800734e: d039 beq.n 80073c4 <HAL_ADCEx_MultiModeConfigChannel+0x118>
  16207. {
  16208. MODIFY_REG(tmpADC_Common->CCR, ADC_CCR_DAMDF, multimode->DualModeData);
  16209. 8007350: 6efb ldr r3, [r7, #108] @ 0x6c
  16210. 8007352: 689b ldr r3, [r3, #8]
  16211. 8007354: f423 4240 bic.w r2, r3, #49152 @ 0xc000
  16212. 8007358: 683b ldr r3, [r7, #0]
  16213. 800735a: 685b ldr r3, [r3, #4]
  16214. 800735c: 431a orrs r2, r3
  16215. 800735e: 6efb ldr r3, [r7, #108] @ 0x6c
  16216. 8007360: 609a str r2, [r3, #8]
  16217. /* from 1 to 8 clock cycles for 12 bits */
  16218. /* from 1 to 6 clock cycles for 10 and 8 bits */
  16219. /* If a higher delay is selected, it will be clipped to maximum delay */
  16220. /* range */
  16221. if (__LL_ADC_IS_ENABLED_ALL_COMMON_INSTANCE(__LL_ADC_COMMON_INSTANCE(hadc->Instance)) == 0UL)
  16222. 8007362: 687b ldr r3, [r7, #4]
  16223. 8007364: 681b ldr r3, [r3, #0]
  16224. 8007366: 4a3a ldr r2, [pc, #232] @ (8007450 <HAL_ADCEx_MultiModeConfigChannel+0x1a4>)
  16225. 8007368: 4293 cmp r3, r2
  16226. 800736a: d004 beq.n 8007376 <HAL_ADCEx_MultiModeConfigChannel+0xca>
  16227. 800736c: 687b ldr r3, [r7, #4]
  16228. 800736e: 681b ldr r3, [r3, #0]
  16229. 8007370: 4a38 ldr r2, [pc, #224] @ (8007454 <HAL_ADCEx_MultiModeConfigChannel+0x1a8>)
  16230. 8007372: 4293 cmp r3, r2
  16231. 8007374: d10e bne.n 8007394 <HAL_ADCEx_MultiModeConfigChannel+0xe8>
  16232. 8007376: 4836 ldr r0, [pc, #216] @ (8007450 <HAL_ADCEx_MultiModeConfigChannel+0x1a4>)
  16233. 8007378: f7ff feda bl 8007130 <LL_ADC_IsEnabled>
  16234. 800737c: 4604 mov r4, r0
  16235. 800737e: 4835 ldr r0, [pc, #212] @ (8007454 <HAL_ADCEx_MultiModeConfigChannel+0x1a8>)
  16236. 8007380: f7ff fed6 bl 8007130 <LL_ADC_IsEnabled>
  16237. 8007384: 4603 mov r3, r0
  16238. 8007386: 4323 orrs r3, r4
  16239. 8007388: 2b00 cmp r3, #0
  16240. 800738a: bf0c ite eq
  16241. 800738c: 2301 moveq r3, #1
  16242. 800738e: 2300 movne r3, #0
  16243. 8007390: b2db uxtb r3, r3
  16244. 8007392: e008 b.n 80073a6 <HAL_ADCEx_MultiModeConfigChannel+0xfa>
  16245. 8007394: 4832 ldr r0, [pc, #200] @ (8007460 <HAL_ADCEx_MultiModeConfigChannel+0x1b4>)
  16246. 8007396: f7ff fecb bl 8007130 <LL_ADC_IsEnabled>
  16247. 800739a: 4603 mov r3, r0
  16248. 800739c: 2b00 cmp r3, #0
  16249. 800739e: bf0c ite eq
  16250. 80073a0: 2301 moveq r3, #1
  16251. 80073a2: 2300 movne r3, #0
  16252. 80073a4: b2db uxtb r3, r3
  16253. 80073a6: 2b00 cmp r3, #0
  16254. 80073a8: d047 beq.n 800743a <HAL_ADCEx_MultiModeConfigChannel+0x18e>
  16255. {
  16256. MODIFY_REG(tmpADC_Common->CCR,
  16257. 80073aa: 6efb ldr r3, [r7, #108] @ 0x6c
  16258. 80073ac: 689a ldr r2, [r3, #8]
  16259. 80073ae: 4b2d ldr r3, [pc, #180] @ (8007464 <HAL_ADCEx_MultiModeConfigChannel+0x1b8>)
  16260. 80073b0: 4013 ands r3, r2
  16261. 80073b2: 683a ldr r2, [r7, #0]
  16262. 80073b4: 6811 ldr r1, [r2, #0]
  16263. 80073b6: 683a ldr r2, [r7, #0]
  16264. 80073b8: 6892 ldr r2, [r2, #8]
  16265. 80073ba: 430a orrs r2, r1
  16266. 80073bc: 431a orrs r2, r3
  16267. 80073be: 6efb ldr r3, [r7, #108] @ 0x6c
  16268. 80073c0: 609a str r2, [r3, #8]
  16269. if (multimode->Mode != ADC_MODE_INDEPENDENT)
  16270. 80073c2: e03a b.n 800743a <HAL_ADCEx_MultiModeConfigChannel+0x18e>
  16271. );
  16272. }
  16273. }
  16274. else /* ADC_MODE_INDEPENDENT */
  16275. {
  16276. CLEAR_BIT(tmpADC_Common->CCR, ADC_CCR_DAMDF);
  16277. 80073c4: 6efb ldr r3, [r7, #108] @ 0x6c
  16278. 80073c6: 689b ldr r3, [r3, #8]
  16279. 80073c8: f423 4240 bic.w r2, r3, #49152 @ 0xc000
  16280. 80073cc: 6efb ldr r3, [r7, #108] @ 0x6c
  16281. 80073ce: 609a str r2, [r3, #8]
  16282. /* Parameters that can be updated only when ADC is disabled: */
  16283. /* - Multimode mode selection */
  16284. /* - Multimode delay */
  16285. if (__LL_ADC_IS_ENABLED_ALL_COMMON_INSTANCE(__LL_ADC_COMMON_INSTANCE(hadc->Instance)) == 0UL)
  16286. 80073d0: 687b ldr r3, [r7, #4]
  16287. 80073d2: 681b ldr r3, [r3, #0]
  16288. 80073d4: 4a1e ldr r2, [pc, #120] @ (8007450 <HAL_ADCEx_MultiModeConfigChannel+0x1a4>)
  16289. 80073d6: 4293 cmp r3, r2
  16290. 80073d8: d004 beq.n 80073e4 <HAL_ADCEx_MultiModeConfigChannel+0x138>
  16291. 80073da: 687b ldr r3, [r7, #4]
  16292. 80073dc: 681b ldr r3, [r3, #0]
  16293. 80073de: 4a1d ldr r2, [pc, #116] @ (8007454 <HAL_ADCEx_MultiModeConfigChannel+0x1a8>)
  16294. 80073e0: 4293 cmp r3, r2
  16295. 80073e2: d10e bne.n 8007402 <HAL_ADCEx_MultiModeConfigChannel+0x156>
  16296. 80073e4: 481a ldr r0, [pc, #104] @ (8007450 <HAL_ADCEx_MultiModeConfigChannel+0x1a4>)
  16297. 80073e6: f7ff fea3 bl 8007130 <LL_ADC_IsEnabled>
  16298. 80073ea: 4604 mov r4, r0
  16299. 80073ec: 4819 ldr r0, [pc, #100] @ (8007454 <HAL_ADCEx_MultiModeConfigChannel+0x1a8>)
  16300. 80073ee: f7ff fe9f bl 8007130 <LL_ADC_IsEnabled>
  16301. 80073f2: 4603 mov r3, r0
  16302. 80073f4: 4323 orrs r3, r4
  16303. 80073f6: 2b00 cmp r3, #0
  16304. 80073f8: bf0c ite eq
  16305. 80073fa: 2301 moveq r3, #1
  16306. 80073fc: 2300 movne r3, #0
  16307. 80073fe: b2db uxtb r3, r3
  16308. 8007400: e008 b.n 8007414 <HAL_ADCEx_MultiModeConfigChannel+0x168>
  16309. 8007402: 4817 ldr r0, [pc, #92] @ (8007460 <HAL_ADCEx_MultiModeConfigChannel+0x1b4>)
  16310. 8007404: f7ff fe94 bl 8007130 <LL_ADC_IsEnabled>
  16311. 8007408: 4603 mov r3, r0
  16312. 800740a: 2b00 cmp r3, #0
  16313. 800740c: bf0c ite eq
  16314. 800740e: 2301 moveq r3, #1
  16315. 8007410: 2300 movne r3, #0
  16316. 8007412: b2db uxtb r3, r3
  16317. 8007414: 2b00 cmp r3, #0
  16318. 8007416: d010 beq.n 800743a <HAL_ADCEx_MultiModeConfigChannel+0x18e>
  16319. {
  16320. CLEAR_BIT(tmpADC_Common->CCR, ADC_CCR_DUAL | ADC_CCR_DELAY);
  16321. 8007418: 6efb ldr r3, [r7, #108] @ 0x6c
  16322. 800741a: 689a ldr r2, [r3, #8]
  16323. 800741c: 4b11 ldr r3, [pc, #68] @ (8007464 <HAL_ADCEx_MultiModeConfigChannel+0x1b8>)
  16324. 800741e: 4013 ands r3, r2
  16325. 8007420: 6efa ldr r2, [r7, #108] @ 0x6c
  16326. 8007422: 6093 str r3, [r2, #8]
  16327. if (multimode->Mode != ADC_MODE_INDEPENDENT)
  16328. 8007424: e009 b.n 800743a <HAL_ADCEx_MultiModeConfigChannel+0x18e>
  16329. /* If one of the ADC sharing the same common group is enabled, no update */
  16330. /* could be done on neither of the multimode structure parameters. */
  16331. else
  16332. {
  16333. /* Update ADC state machine to error */
  16334. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);
  16335. 8007426: 687b ldr r3, [r7, #4]
  16336. 8007428: 6d5b ldr r3, [r3, #84] @ 0x54
  16337. 800742a: f043 0220 orr.w r2, r3, #32
  16338. 800742e: 687b ldr r3, [r7, #4]
  16339. 8007430: 655a str r2, [r3, #84] @ 0x54
  16340. tmp_hal_status = HAL_ERROR;
  16341. 8007432: 2301 movs r3, #1
  16342. 8007434: f887 3077 strb.w r3, [r7, #119] @ 0x77
  16343. 8007438: e000 b.n 800743c <HAL_ADCEx_MultiModeConfigChannel+0x190>
  16344. if (multimode->Mode != ADC_MODE_INDEPENDENT)
  16345. 800743a: bf00 nop
  16346. }
  16347. /* Process unlocked */
  16348. __HAL_UNLOCK(hadc);
  16349. 800743c: 687b ldr r3, [r7, #4]
  16350. 800743e: 2200 movs r2, #0
  16351. 8007440: f883 2050 strb.w r2, [r3, #80] @ 0x50
  16352. /* Return function status */
  16353. return tmp_hal_status;
  16354. 8007444: f897 3077 ldrb.w r3, [r7, #119] @ 0x77
  16355. }
  16356. 8007448: 4618 mov r0, r3
  16357. 800744a: 377c adds r7, #124 @ 0x7c
  16358. 800744c: 46bd mov sp, r7
  16359. 800744e: bd90 pop {r4, r7, pc}
  16360. 8007450: 40022000 .word 0x40022000
  16361. 8007454: 40022100 .word 0x40022100
  16362. 8007458: 40022300 .word 0x40022300
  16363. 800745c: 58026300 .word 0x58026300
  16364. 8007460: 58026000 .word 0x58026000
  16365. 8007464: fffff0e0 .word 0xfffff0e0
  16366. 08007468 <HAL_COMP_Init>:
  16367. * To unlock the configuration, perform a system reset.
  16368. * @param hcomp COMP handle
  16369. * @retval HAL status
  16370. */
  16371. HAL_StatusTypeDef HAL_COMP_Init(COMP_HandleTypeDef *hcomp)
  16372. {
  16373. 8007468: b580 push {r7, lr}
  16374. 800746a: b088 sub sp, #32
  16375. 800746c: af00 add r7, sp, #0
  16376. 800746e: 6078 str r0, [r7, #4]
  16377. uint32_t tmp_csr ;
  16378. uint32_t exti_line ;
  16379. uint32_t comp_voltage_scaler_initialized; /* Value "0" is comparator voltage scaler is not initialized */
  16380. __IO uint32_t wait_loop_index = 0UL;
  16381. 8007470: 2300 movs r3, #0
  16382. 8007472: 60fb str r3, [r7, #12]
  16383. HAL_StatusTypeDef status = HAL_OK;
  16384. 8007474: 2300 movs r3, #0
  16385. 8007476: 77fb strb r3, [r7, #31]
  16386. /* Check the COMP handle allocation and lock status */
  16387. if(hcomp == NULL)
  16388. 8007478: 687b ldr r3, [r7, #4]
  16389. 800747a: 2b00 cmp r3, #0
  16390. 800747c: d102 bne.n 8007484 <HAL_COMP_Init+0x1c>
  16391. {
  16392. status = HAL_ERROR;
  16393. 800747e: 2301 movs r3, #1
  16394. 8007480: 77fb strb r3, [r7, #31]
  16395. 8007482: e10e b.n 80076a2 <HAL_COMP_Init+0x23a>
  16396. }
  16397. else if(__HAL_COMP_IS_LOCKED(hcomp))
  16398. 8007484: 687b ldr r3, [r7, #4]
  16399. 8007486: 681b ldr r3, [r3, #0]
  16400. 8007488: 681b ldr r3, [r3, #0]
  16401. 800748a: f003 4300 and.w r3, r3, #2147483648 @ 0x80000000
  16402. 800748e: f1b3 4f00 cmp.w r3, #2147483648 @ 0x80000000
  16403. 8007492: d102 bne.n 800749a <HAL_COMP_Init+0x32>
  16404. {
  16405. status = HAL_ERROR;
  16406. 8007494: 2301 movs r3, #1
  16407. 8007496: 77fb strb r3, [r7, #31]
  16408. 8007498: e103 b.n 80076a2 <HAL_COMP_Init+0x23a>
  16409. assert_param(IS_COMP_HYSTERESIS(hcomp->Init.Hysteresis));
  16410. assert_param(IS_COMP_BLANKINGSRCE(hcomp->Init.BlankingSrce));
  16411. assert_param(IS_COMP_TRIGGERMODE(hcomp->Init.TriggerMode));
  16412. assert_param(IS_COMP_WINDOWMODE(hcomp->Init.WindowMode));
  16413. if(hcomp->State == HAL_COMP_STATE_RESET)
  16414. 800749a: 687b ldr r3, [r7, #4]
  16415. 800749c: f893 3025 ldrb.w r3, [r3, #37] @ 0x25
  16416. 80074a0: b2db uxtb r3, r3
  16417. 80074a2: 2b00 cmp r3, #0
  16418. 80074a4: d109 bne.n 80074ba <HAL_COMP_Init+0x52>
  16419. {
  16420. /* Allocate lock resource and initialize it */
  16421. hcomp->Lock = HAL_UNLOCKED;
  16422. 80074a6: 687b ldr r3, [r7, #4]
  16423. 80074a8: 2200 movs r2, #0
  16424. 80074aa: f883 2024 strb.w r2, [r3, #36] @ 0x24
  16425. /* Set COMP error code to none */
  16426. COMP_CLEAR_ERRORCODE(hcomp);
  16427. 80074ae: 687b ldr r3, [r7, #4]
  16428. 80074b0: 2200 movs r2, #0
  16429. 80074b2: 629a str r2, [r3, #40] @ 0x28
  16430. /* Init the low level hardware */
  16431. hcomp->MspInitCallback(hcomp);
  16432. #else
  16433. /* Init the low level hardware */
  16434. HAL_COMP_MspInit(hcomp);
  16435. 80074b4: 6878 ldr r0, [r7, #4]
  16436. 80074b6: f7fc fd49 bl 8003f4c <HAL_COMP_MspInit>
  16437. #endif /* USE_HAL_COMP_REGISTER_CALLBACKS */
  16438. }
  16439. /* Memorize voltage scaler state before initialization */
  16440. comp_voltage_scaler_initialized = READ_BIT(hcomp->Instance->CFGR, COMP_CFGRx_SCALEN);
  16441. 80074ba: 687b ldr r3, [r7, #4]
  16442. 80074bc: 681b ldr r3, [r3, #0]
  16443. 80074be: 681b ldr r3, [r3, #0]
  16444. 80074c0: f003 0304 and.w r3, r3, #4
  16445. 80074c4: 61bb str r3, [r7, #24]
  16446. /* Set BLANKING bits according to hcomp->Init.BlankingSrce value */
  16447. /* Set HYST bits according to hcomp->Init.Hysteresis value */
  16448. /* Set POLARITY bit according to hcomp->Init.OutputPol value */
  16449. /* Set POWERMODE bits according to hcomp->Init.Mode value */
  16450. tmp_csr = (hcomp->Init.InvertingInput | \
  16451. 80074c6: 687b ldr r3, [r7, #4]
  16452. 80074c8: 691a ldr r2, [r3, #16]
  16453. hcomp->Init.NonInvertingInput | \
  16454. 80074ca: 687b ldr r3, [r7, #4]
  16455. 80074cc: 68db ldr r3, [r3, #12]
  16456. tmp_csr = (hcomp->Init.InvertingInput | \
  16457. 80074ce: 431a orrs r2, r3
  16458. hcomp->Init.BlankingSrce | \
  16459. 80074d0: 687b ldr r3, [r7, #4]
  16460. 80074d2: 69db ldr r3, [r3, #28]
  16461. hcomp->Init.NonInvertingInput | \
  16462. 80074d4: 431a orrs r2, r3
  16463. hcomp->Init.Hysteresis | \
  16464. 80074d6: 687b ldr r3, [r7, #4]
  16465. 80074d8: 695b ldr r3, [r3, #20]
  16466. hcomp->Init.BlankingSrce | \
  16467. 80074da: 431a orrs r2, r3
  16468. hcomp->Init.OutputPol | \
  16469. 80074dc: 687b ldr r3, [r7, #4]
  16470. 80074de: 699b ldr r3, [r3, #24]
  16471. hcomp->Init.Hysteresis | \
  16472. 80074e0: 431a orrs r2, r3
  16473. hcomp->Init.Mode );
  16474. 80074e2: 687b ldr r3, [r7, #4]
  16475. 80074e4: 689b ldr r3, [r3, #8]
  16476. tmp_csr = (hcomp->Init.InvertingInput | \
  16477. 80074e6: 4313 orrs r3, r2
  16478. 80074e8: 617b str r3, [r7, #20]
  16479. COMP_CFGRx_INP2SEL | COMP_CFGRx_WINMODE | COMP_CFGRx_POLARITY | COMP_CFGRx_HYST |
  16480. COMP_CFGRx_BLANKING | COMP_CFGRx_BRGEN | COMP_CFGRx_SCALEN,
  16481. tmp_csr
  16482. );
  16483. #else
  16484. MODIFY_REG(hcomp->Instance->CFGR,
  16485. 80074ea: 687b ldr r3, [r7, #4]
  16486. 80074ec: 681b ldr r3, [r3, #0]
  16487. 80074ee: 681a ldr r2, [r3, #0]
  16488. 80074f0: 4b6e ldr r3, [pc, #440] @ (80076ac <HAL_COMP_Init+0x244>)
  16489. 80074f2: 4013 ands r3, r2
  16490. 80074f4: 687a ldr r2, [r7, #4]
  16491. 80074f6: 6812 ldr r2, [r2, #0]
  16492. 80074f8: 6979 ldr r1, [r7, #20]
  16493. 80074fa: 430b orrs r3, r1
  16494. 80074fc: 6013 str r3, [r2, #0]
  16495. #endif
  16496. /* Set window mode */
  16497. /* Note: Window mode bit is located into 1 out of the 2 pairs of COMP */
  16498. /* instances. Therefore, this function can update another COMP */
  16499. /* instance that the one currently selected. */
  16500. if(hcomp->Init.WindowMode == COMP_WINDOWMODE_COMP1_INPUT_PLUS_COMMON)
  16501. 80074fe: 687b ldr r3, [r7, #4]
  16502. 8007500: 685b ldr r3, [r3, #4]
  16503. 8007502: 2b10 cmp r3, #16
  16504. 8007504: d108 bne.n 8007518 <HAL_COMP_Init+0xb0>
  16505. {
  16506. SET_BIT(hcomp->Instance->CFGR, COMP_CFGRx_WINMODE);
  16507. 8007506: 687b ldr r3, [r7, #4]
  16508. 8007508: 681b ldr r3, [r3, #0]
  16509. 800750a: 681a ldr r2, [r3, #0]
  16510. 800750c: 687b ldr r3, [r7, #4]
  16511. 800750e: 681b ldr r3, [r3, #0]
  16512. 8007510: f042 0210 orr.w r2, r2, #16
  16513. 8007514: 601a str r2, [r3, #0]
  16514. 8007516: e007 b.n 8007528 <HAL_COMP_Init+0xc0>
  16515. }
  16516. else
  16517. {
  16518. CLEAR_BIT(hcomp->Instance->CFGR, COMP_CFGRx_WINMODE);
  16519. 8007518: 687b ldr r3, [r7, #4]
  16520. 800751a: 681b ldr r3, [r3, #0]
  16521. 800751c: 681a ldr r2, [r3, #0]
  16522. 800751e: 687b ldr r3, [r7, #4]
  16523. 8007520: 681b ldr r3, [r3, #0]
  16524. 8007522: f022 0210 bic.w r2, r2, #16
  16525. 8007526: 601a str r2, [r3, #0]
  16526. }
  16527. /* Delay for COMP scaler bridge voltage stabilization */
  16528. /* Apply the delay if voltage scaler bridge is enabled for the first time */
  16529. if ((READ_BIT(hcomp->Instance->CFGR, COMP_CFGRx_SCALEN) != 0UL) &&
  16530. 8007528: 687b ldr r3, [r7, #4]
  16531. 800752a: 681b ldr r3, [r3, #0]
  16532. 800752c: 681b ldr r3, [r3, #0]
  16533. 800752e: f003 0304 and.w r3, r3, #4
  16534. 8007532: 2b00 cmp r3, #0
  16535. 8007534: d016 beq.n 8007564 <HAL_COMP_Init+0xfc>
  16536. 8007536: 69bb ldr r3, [r7, #24]
  16537. 8007538: 2b00 cmp r3, #0
  16538. 800753a: d013 beq.n 8007564 <HAL_COMP_Init+0xfc>
  16539. {
  16540. /* Wait loop initialization and execution */
  16541. /* Note: Variable divided by 2 to compensate partially */
  16542. /* CPU processing cycles.*/
  16543. wait_loop_index = ((COMP_DELAY_VOLTAGE_SCALER_STAB_US / 10UL) * ((SystemCoreClock / (100000UL * 2UL)) + 1UL));
  16544. 800753c: 4b5c ldr r3, [pc, #368] @ (80076b0 <HAL_COMP_Init+0x248>)
  16545. 800753e: 681b ldr r3, [r3, #0]
  16546. 8007540: 099b lsrs r3, r3, #6
  16547. 8007542: 4a5c ldr r2, [pc, #368] @ (80076b4 <HAL_COMP_Init+0x24c>)
  16548. 8007544: fba2 2303 umull r2, r3, r2, r3
  16549. 8007548: 099b lsrs r3, r3, #6
  16550. 800754a: 1c5a adds r2, r3, #1
  16551. 800754c: 4613 mov r3, r2
  16552. 800754e: 009b lsls r3, r3, #2
  16553. 8007550: 4413 add r3, r2
  16554. 8007552: 009b lsls r3, r3, #2
  16555. 8007554: 60fb str r3, [r7, #12]
  16556. while(wait_loop_index != 0UL)
  16557. 8007556: e002 b.n 800755e <HAL_COMP_Init+0xf6>
  16558. {
  16559. wait_loop_index --;
  16560. 8007558: 68fb ldr r3, [r7, #12]
  16561. 800755a: 3b01 subs r3, #1
  16562. 800755c: 60fb str r3, [r7, #12]
  16563. while(wait_loop_index != 0UL)
  16564. 800755e: 68fb ldr r3, [r7, #12]
  16565. 8007560: 2b00 cmp r3, #0
  16566. 8007562: d1f9 bne.n 8007558 <HAL_COMP_Init+0xf0>
  16567. }
  16568. }
  16569. /* Get the EXTI line corresponding to the selected COMP instance */
  16570. exti_line = COMP_GET_EXTI_LINE(hcomp->Instance);
  16571. 8007564: 687b ldr r3, [r7, #4]
  16572. 8007566: 681b ldr r3, [r3, #0]
  16573. 8007568: 4a53 ldr r2, [pc, #332] @ (80076b8 <HAL_COMP_Init+0x250>)
  16574. 800756a: 4293 cmp r3, r2
  16575. 800756c: d102 bne.n 8007574 <HAL_COMP_Init+0x10c>
  16576. 800756e: f44f 1380 mov.w r3, #1048576 @ 0x100000
  16577. 8007572: e001 b.n 8007578 <HAL_COMP_Init+0x110>
  16578. 8007574: f44f 1300 mov.w r3, #2097152 @ 0x200000
  16579. 8007578: 613b str r3, [r7, #16]
  16580. /* Manage EXTI settings */
  16581. if((hcomp->Init.TriggerMode & (COMP_EXTI_IT | COMP_EXTI_EVENT)) != 0UL)
  16582. 800757a: 687b ldr r3, [r7, #4]
  16583. 800757c: 6a1b ldr r3, [r3, #32]
  16584. 800757e: f003 0303 and.w r3, r3, #3
  16585. 8007582: 2b00 cmp r3, #0
  16586. 8007584: d06d beq.n 8007662 <HAL_COMP_Init+0x1fa>
  16587. {
  16588. /* Configure EXTI rising edge */
  16589. if((hcomp->Init.TriggerMode & COMP_EXTI_RISING) != 0UL)
  16590. 8007586: 687b ldr r3, [r7, #4]
  16591. 8007588: 6a1b ldr r3, [r3, #32]
  16592. 800758a: f003 0310 and.w r3, r3, #16
  16593. 800758e: 2b00 cmp r3, #0
  16594. 8007590: d008 beq.n 80075a4 <HAL_COMP_Init+0x13c>
  16595. {
  16596. SET_BIT(EXTI->RTSR1, exti_line);
  16597. 8007592: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  16598. 8007596: 681a ldr r2, [r3, #0]
  16599. 8007598: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
  16600. 800759c: 693b ldr r3, [r7, #16]
  16601. 800759e: 4313 orrs r3, r2
  16602. 80075a0: 600b str r3, [r1, #0]
  16603. 80075a2: e008 b.n 80075b6 <HAL_COMP_Init+0x14e>
  16604. }
  16605. else
  16606. {
  16607. CLEAR_BIT(EXTI->RTSR1, exti_line);
  16608. 80075a4: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  16609. 80075a8: 681a ldr r2, [r3, #0]
  16610. 80075aa: 693b ldr r3, [r7, #16]
  16611. 80075ac: 43db mvns r3, r3
  16612. 80075ae: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
  16613. 80075b2: 4013 ands r3, r2
  16614. 80075b4: 600b str r3, [r1, #0]
  16615. }
  16616. /* Configure EXTI falling edge */
  16617. if((hcomp->Init.TriggerMode & COMP_EXTI_FALLING) != 0UL)
  16618. 80075b6: 687b ldr r3, [r7, #4]
  16619. 80075b8: 6a1b ldr r3, [r3, #32]
  16620. 80075ba: f003 0320 and.w r3, r3, #32
  16621. 80075be: 2b00 cmp r3, #0
  16622. 80075c0: d008 beq.n 80075d4 <HAL_COMP_Init+0x16c>
  16623. {
  16624. SET_BIT(EXTI->FTSR1, exti_line);
  16625. 80075c2: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  16626. 80075c6: 685a ldr r2, [r3, #4]
  16627. 80075c8: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
  16628. 80075cc: 693b ldr r3, [r7, #16]
  16629. 80075ce: 4313 orrs r3, r2
  16630. 80075d0: 604b str r3, [r1, #4]
  16631. 80075d2: e008 b.n 80075e6 <HAL_COMP_Init+0x17e>
  16632. }
  16633. else
  16634. {
  16635. CLEAR_BIT(EXTI->FTSR1, exti_line);
  16636. 80075d4: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  16637. 80075d8: 685a ldr r2, [r3, #4]
  16638. 80075da: 693b ldr r3, [r7, #16]
  16639. 80075dc: 43db mvns r3, r3
  16640. 80075de: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
  16641. 80075e2: 4013 ands r3, r2
  16642. 80075e4: 604b str r3, [r1, #4]
  16643. }
  16644. #if !defined (CORE_CM4)
  16645. /* Clear COMP EXTI pending bit (if any) */
  16646. WRITE_REG(EXTI->PR1, exti_line);
  16647. 80075e6: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  16648. 80075ea: 693b ldr r3, [r7, #16]
  16649. 80075ec: f8c2 3088 str.w r3, [r2, #136] @ 0x88
  16650. /* Configure EXTI event mode */
  16651. if((hcomp->Init.TriggerMode & COMP_EXTI_EVENT) != 0UL)
  16652. 80075f0: 687b ldr r3, [r7, #4]
  16653. 80075f2: 6a1b ldr r3, [r3, #32]
  16654. 80075f4: f003 0302 and.w r3, r3, #2
  16655. 80075f8: 2b00 cmp r3, #0
  16656. 80075fa: d00a beq.n 8007612 <HAL_COMP_Init+0x1aa>
  16657. {
  16658. SET_BIT(EXTI->EMR1, exti_line);
  16659. 80075fc: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  16660. 8007600: f8d3 2084 ldr.w r2, [r3, #132] @ 0x84
  16661. 8007604: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
  16662. 8007608: 693b ldr r3, [r7, #16]
  16663. 800760a: 4313 orrs r3, r2
  16664. 800760c: f8c1 3084 str.w r3, [r1, #132] @ 0x84
  16665. 8007610: e00a b.n 8007628 <HAL_COMP_Init+0x1c0>
  16666. }
  16667. else
  16668. {
  16669. CLEAR_BIT(EXTI->EMR1, exti_line);
  16670. 8007612: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  16671. 8007616: f8d3 2084 ldr.w r2, [r3, #132] @ 0x84
  16672. 800761a: 693b ldr r3, [r7, #16]
  16673. 800761c: 43db mvns r3, r3
  16674. 800761e: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
  16675. 8007622: 4013 ands r3, r2
  16676. 8007624: f8c1 3084 str.w r3, [r1, #132] @ 0x84
  16677. }
  16678. /* Configure EXTI interrupt mode */
  16679. if((hcomp->Init.TriggerMode & COMP_EXTI_IT) != 0UL)
  16680. 8007628: 687b ldr r3, [r7, #4]
  16681. 800762a: 6a1b ldr r3, [r3, #32]
  16682. 800762c: f003 0301 and.w r3, r3, #1
  16683. 8007630: 2b00 cmp r3, #0
  16684. 8007632: d00a beq.n 800764a <HAL_COMP_Init+0x1e2>
  16685. {
  16686. SET_BIT(EXTI->IMR1, exti_line);
  16687. 8007634: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  16688. 8007638: f8d3 2080 ldr.w r2, [r3, #128] @ 0x80
  16689. 800763c: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
  16690. 8007640: 693b ldr r3, [r7, #16]
  16691. 8007642: 4313 orrs r3, r2
  16692. 8007644: f8c1 3080 str.w r3, [r1, #128] @ 0x80
  16693. 8007648: e021 b.n 800768e <HAL_COMP_Init+0x226>
  16694. }
  16695. else
  16696. {
  16697. CLEAR_BIT(EXTI->IMR1, exti_line);
  16698. 800764a: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  16699. 800764e: f8d3 2080 ldr.w r2, [r3, #128] @ 0x80
  16700. 8007652: 693b ldr r3, [r7, #16]
  16701. 8007654: 43db mvns r3, r3
  16702. 8007656: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
  16703. 800765a: 4013 ands r3, r2
  16704. 800765c: f8c1 3080 str.w r3, [r1, #128] @ 0x80
  16705. 8007660: e015 b.n 800768e <HAL_COMP_Init+0x226>
  16706. }
  16707. }
  16708. else
  16709. {
  16710. /* Disable EXTI event mode */
  16711. CLEAR_BIT(EXTI->EMR1, exti_line);
  16712. 8007662: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  16713. 8007666: f8d3 2084 ldr.w r2, [r3, #132] @ 0x84
  16714. 800766a: 693b ldr r3, [r7, #16]
  16715. 800766c: 43db mvns r3, r3
  16716. 800766e: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
  16717. 8007672: 4013 ands r3, r2
  16718. 8007674: f8c1 3084 str.w r3, [r1, #132] @ 0x84
  16719. /* Disable EXTI interrupt mode */
  16720. CLEAR_BIT(EXTI->IMR1, exti_line);
  16721. 8007678: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  16722. 800767c: f8d3 2080 ldr.w r2, [r3, #128] @ 0x80
  16723. 8007680: 693b ldr r3, [r7, #16]
  16724. 8007682: 43db mvns r3, r3
  16725. 8007684: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
  16726. 8007688: 4013 ands r3, r2
  16727. 800768a: f8c1 3080 str.w r3, [r1, #128] @ 0x80
  16728. }
  16729. #endif
  16730. /* Set HAL COMP handle state */
  16731. /* Note: Transition from state reset to state ready, */
  16732. /* otherwise (coming from state ready or busy) no state update. */
  16733. if (hcomp->State == HAL_COMP_STATE_RESET)
  16734. 800768e: 687b ldr r3, [r7, #4]
  16735. 8007690: f893 3025 ldrb.w r3, [r3, #37] @ 0x25
  16736. 8007694: b2db uxtb r3, r3
  16737. 8007696: 2b00 cmp r3, #0
  16738. 8007698: d103 bne.n 80076a2 <HAL_COMP_Init+0x23a>
  16739. {
  16740. hcomp->State = HAL_COMP_STATE_READY;
  16741. 800769a: 687b ldr r3, [r7, #4]
  16742. 800769c: 2201 movs r2, #1
  16743. 800769e: f883 2025 strb.w r2, [r3, #37] @ 0x25
  16744. }
  16745. }
  16746. return status;
  16747. 80076a2: 7ffb ldrb r3, [r7, #31]
  16748. }
  16749. 80076a4: 4618 mov r0, r3
  16750. 80076a6: 3720 adds r7, #32
  16751. 80076a8: 46bd mov sp, r7
  16752. 80076aa: bd80 pop {r7, pc}
  16753. 80076ac: f0e8cce1 .word 0xf0e8cce1
  16754. 80076b0: 24000034 .word 0x24000034
  16755. 80076b4: 053e2d63 .word 0x053e2d63
  16756. 80076b8: 5800380c .word 0x5800380c
  16757. 080076bc <HAL_COMP_Start>:
  16758. * @brief Start the comparator.
  16759. * @param hcomp COMP handle
  16760. * @retval HAL status
  16761. */
  16762. HAL_StatusTypeDef HAL_COMP_Start(COMP_HandleTypeDef *hcomp)
  16763. {
  16764. 80076bc: b480 push {r7}
  16765. 80076be: b085 sub sp, #20
  16766. 80076c0: af00 add r7, sp, #0
  16767. 80076c2: 6078 str r0, [r7, #4]
  16768. __IO uint32_t wait_loop_index = 0UL;
  16769. 80076c4: 2300 movs r3, #0
  16770. 80076c6: 60bb str r3, [r7, #8]
  16771. HAL_StatusTypeDef status = HAL_OK;
  16772. 80076c8: 2300 movs r3, #0
  16773. 80076ca: 73fb strb r3, [r7, #15]
  16774. /* Check the COMP handle allocation and lock status */
  16775. if(hcomp == NULL)
  16776. 80076cc: 687b ldr r3, [r7, #4]
  16777. 80076ce: 2b00 cmp r3, #0
  16778. 80076d0: d102 bne.n 80076d8 <HAL_COMP_Start+0x1c>
  16779. {
  16780. status = HAL_ERROR;
  16781. 80076d2: 2301 movs r3, #1
  16782. 80076d4: 73fb strb r3, [r7, #15]
  16783. 80076d6: e030 b.n 800773a <HAL_COMP_Start+0x7e>
  16784. }
  16785. else if(__HAL_COMP_IS_LOCKED(hcomp))
  16786. 80076d8: 687b ldr r3, [r7, #4]
  16787. 80076da: 681b ldr r3, [r3, #0]
  16788. 80076dc: 681b ldr r3, [r3, #0]
  16789. 80076de: f003 4300 and.w r3, r3, #2147483648 @ 0x80000000
  16790. 80076e2: f1b3 4f00 cmp.w r3, #2147483648 @ 0x80000000
  16791. 80076e6: d102 bne.n 80076ee <HAL_COMP_Start+0x32>
  16792. {
  16793. status = HAL_ERROR;
  16794. 80076e8: 2301 movs r3, #1
  16795. 80076ea: 73fb strb r3, [r7, #15]
  16796. 80076ec: e025 b.n 800773a <HAL_COMP_Start+0x7e>
  16797. else
  16798. {
  16799. /* Check the parameter */
  16800. assert_param(IS_COMP_ALL_INSTANCE(hcomp->Instance));
  16801. if(hcomp->State == HAL_COMP_STATE_READY)
  16802. 80076ee: 687b ldr r3, [r7, #4]
  16803. 80076f0: f893 3025 ldrb.w r3, [r3, #37] @ 0x25
  16804. 80076f4: b2db uxtb r3, r3
  16805. 80076f6: 2b01 cmp r3, #1
  16806. 80076f8: d11d bne.n 8007736 <HAL_COMP_Start+0x7a>
  16807. {
  16808. /* Enable the selected comparator */
  16809. SET_BIT(hcomp->Instance->CFGR, COMP_CFGRx_EN);
  16810. 80076fa: 687b ldr r3, [r7, #4]
  16811. 80076fc: 681b ldr r3, [r3, #0]
  16812. 80076fe: 681a ldr r2, [r3, #0]
  16813. 8007700: 687b ldr r3, [r7, #4]
  16814. 8007702: 681b ldr r3, [r3, #0]
  16815. 8007704: f042 0201 orr.w r2, r2, #1
  16816. 8007708: 601a str r2, [r3, #0]
  16817. /* Set HAL COMP handle state */
  16818. hcomp->State = HAL_COMP_STATE_BUSY;
  16819. 800770a: 687b ldr r3, [r7, #4]
  16820. 800770c: 2202 movs r2, #2
  16821. 800770e: f883 2025 strb.w r2, [r3, #37] @ 0x25
  16822. /* Delay for COMP startup time */
  16823. /* Wait loop initialization and execution */
  16824. /* Note: Variable divided by 2 to compensate partially */
  16825. /* CPU processing cycles. */
  16826. wait_loop_index = ((COMP_DELAY_STARTUP_US / 10UL) * ((SystemCoreClock / (100000UL * 2UL)) + 1UL));
  16827. 8007712: 4b0d ldr r3, [pc, #52] @ (8007748 <HAL_COMP_Start+0x8c>)
  16828. 8007714: 681b ldr r3, [r3, #0]
  16829. 8007716: 099b lsrs r3, r3, #6
  16830. 8007718: 4a0c ldr r2, [pc, #48] @ (800774c <HAL_COMP_Start+0x90>)
  16831. 800771a: fba2 2303 umull r2, r3, r2, r3
  16832. 800771e: 099b lsrs r3, r3, #6
  16833. 8007720: 3301 adds r3, #1
  16834. 8007722: 00db lsls r3, r3, #3
  16835. 8007724: 60bb str r3, [r7, #8]
  16836. while(wait_loop_index != 0UL)
  16837. 8007726: e002 b.n 800772e <HAL_COMP_Start+0x72>
  16838. {
  16839. wait_loop_index--;
  16840. 8007728: 68bb ldr r3, [r7, #8]
  16841. 800772a: 3b01 subs r3, #1
  16842. 800772c: 60bb str r3, [r7, #8]
  16843. while(wait_loop_index != 0UL)
  16844. 800772e: 68bb ldr r3, [r7, #8]
  16845. 8007730: 2b00 cmp r3, #0
  16846. 8007732: d1f9 bne.n 8007728 <HAL_COMP_Start+0x6c>
  16847. 8007734: e001 b.n 800773a <HAL_COMP_Start+0x7e>
  16848. }
  16849. }
  16850. else
  16851. {
  16852. status = HAL_ERROR;
  16853. 8007736: 2301 movs r3, #1
  16854. 8007738: 73fb strb r3, [r7, #15]
  16855. }
  16856. }
  16857. return status;
  16858. 800773a: 7bfb ldrb r3, [r7, #15]
  16859. }
  16860. 800773c: 4618 mov r0, r3
  16861. 800773e: 3714 adds r7, #20
  16862. 8007740: 46bd mov sp, r7
  16863. 8007742: f85d 7b04 ldr.w r7, [sp], #4
  16864. 8007746: 4770 bx lr
  16865. 8007748: 24000034 .word 0x24000034
  16866. 800774c: 053e2d63 .word 0x053e2d63
  16867. 08007750 <HAL_COMP_GetOutputLevel>:
  16868. * @arg @ref COMP_OUTPUT_LEVEL_LOW
  16869. * @arg @ref COMP_OUTPUT_LEVEL_HIGH
  16870. *
  16871. */
  16872. uint32_t HAL_COMP_GetOutputLevel(COMP_HandleTypeDef *hcomp)
  16873. {
  16874. 8007750: b480 push {r7}
  16875. 8007752: b083 sub sp, #12
  16876. 8007754: af00 add r7, sp, #0
  16877. 8007756: 6078 str r0, [r7, #4]
  16878. /* Check the parameter */
  16879. assert_param(IS_COMP_ALL_INSTANCE(hcomp->Instance));
  16880. if (hcomp->Instance == COMP1)
  16881. 8007758: 687b ldr r3, [r7, #4]
  16882. 800775a: 681b ldr r3, [r3, #0]
  16883. 800775c: 4a09 ldr r2, [pc, #36] @ (8007784 <HAL_COMP_GetOutputLevel+0x34>)
  16884. 800775e: 4293 cmp r3, r2
  16885. 8007760: d104 bne.n 800776c <HAL_COMP_GetOutputLevel+0x1c>
  16886. {
  16887. return (uint32_t)(READ_BIT(COMP12->SR, COMP_SR_C1VAL));
  16888. 8007762: 4b09 ldr r3, [pc, #36] @ (8007788 <HAL_COMP_GetOutputLevel+0x38>)
  16889. 8007764: 681b ldr r3, [r3, #0]
  16890. 8007766: f003 0301 and.w r3, r3, #1
  16891. 800776a: e004 b.n 8007776 <HAL_COMP_GetOutputLevel+0x26>
  16892. }
  16893. else
  16894. {
  16895. return (uint32_t)((READ_BIT(COMP12->SR, COMP_SR_C2VAL))>> 1UL);
  16896. 800776c: 4b06 ldr r3, [pc, #24] @ (8007788 <HAL_COMP_GetOutputLevel+0x38>)
  16897. 800776e: 681b ldr r3, [r3, #0]
  16898. 8007770: 085b lsrs r3, r3, #1
  16899. 8007772: f003 0301 and.w r3, r3, #1
  16900. }
  16901. }
  16902. 8007776: 4618 mov r0, r3
  16903. 8007778: 370c adds r7, #12
  16904. 800777a: 46bd mov sp, r7
  16905. 800777c: f85d 7b04 ldr.w r7, [sp], #4
  16906. 8007780: 4770 bx lr
  16907. 8007782: bf00 nop
  16908. 8007784: 5800380c .word 0x5800380c
  16909. 8007788: 58003800 .word 0x58003800
  16910. 0800778c <__NVIC_SetPriorityGrouping>:
  16911. {
  16912. 800778c: b480 push {r7}
  16913. 800778e: b085 sub sp, #20
  16914. 8007790: af00 add r7, sp, #0
  16915. 8007792: 6078 str r0, [r7, #4]
  16916. uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */
  16917. 8007794: 687b ldr r3, [r7, #4]
  16918. 8007796: f003 0307 and.w r3, r3, #7
  16919. 800779a: 60fb str r3, [r7, #12]
  16920. reg_value = SCB->AIRCR; /* read old register configuration */
  16921. 800779c: 4b0b ldr r3, [pc, #44] @ (80077cc <__NVIC_SetPriorityGrouping+0x40>)
  16922. 800779e: 68db ldr r3, [r3, #12]
  16923. 80077a0: 60bb str r3, [r7, #8]
  16924. reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */
  16925. 80077a2: 68ba ldr r2, [r7, #8]
  16926. 80077a4: f64f 03ff movw r3, #63743 @ 0xf8ff
  16927. 80077a8: 4013 ands r3, r2
  16928. 80077aa: 60bb str r3, [r7, #8]
  16929. (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */
  16930. 80077ac: 68fb ldr r3, [r7, #12]
  16931. 80077ae: 021a lsls r2, r3, #8
  16932. ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |
  16933. 80077b0: 68bb ldr r3, [r7, #8]
  16934. 80077b2: 431a orrs r2, r3
  16935. reg_value = (reg_value |
  16936. 80077b4: 4b06 ldr r3, [pc, #24] @ (80077d0 <__NVIC_SetPriorityGrouping+0x44>)
  16937. 80077b6: 4313 orrs r3, r2
  16938. 80077b8: 60bb str r3, [r7, #8]
  16939. SCB->AIRCR = reg_value;
  16940. 80077ba: 4a04 ldr r2, [pc, #16] @ (80077cc <__NVIC_SetPriorityGrouping+0x40>)
  16941. 80077bc: 68bb ldr r3, [r7, #8]
  16942. 80077be: 60d3 str r3, [r2, #12]
  16943. }
  16944. 80077c0: bf00 nop
  16945. 80077c2: 3714 adds r7, #20
  16946. 80077c4: 46bd mov sp, r7
  16947. 80077c6: f85d 7b04 ldr.w r7, [sp], #4
  16948. 80077ca: 4770 bx lr
  16949. 80077cc: e000ed00 .word 0xe000ed00
  16950. 80077d0: 05fa0000 .word 0x05fa0000
  16951. 080077d4 <__NVIC_GetPriorityGrouping>:
  16952. {
  16953. 80077d4: b480 push {r7}
  16954. 80077d6: af00 add r7, sp, #0
  16955. return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos));
  16956. 80077d8: 4b04 ldr r3, [pc, #16] @ (80077ec <__NVIC_GetPriorityGrouping+0x18>)
  16957. 80077da: 68db ldr r3, [r3, #12]
  16958. 80077dc: 0a1b lsrs r3, r3, #8
  16959. 80077de: f003 0307 and.w r3, r3, #7
  16960. }
  16961. 80077e2: 4618 mov r0, r3
  16962. 80077e4: 46bd mov sp, r7
  16963. 80077e6: f85d 7b04 ldr.w r7, [sp], #4
  16964. 80077ea: 4770 bx lr
  16965. 80077ec: e000ed00 .word 0xe000ed00
  16966. 080077f0 <__NVIC_EnableIRQ>:
  16967. {
  16968. 80077f0: b480 push {r7}
  16969. 80077f2: b083 sub sp, #12
  16970. 80077f4: af00 add r7, sp, #0
  16971. 80077f6: 4603 mov r3, r0
  16972. 80077f8: 80fb strh r3, [r7, #6]
  16973. if ((int32_t)(IRQn) >= 0)
  16974. 80077fa: f9b7 3006 ldrsh.w r3, [r7, #6]
  16975. 80077fe: 2b00 cmp r3, #0
  16976. 8007800: db0b blt.n 800781a <__NVIC_EnableIRQ+0x2a>
  16977. NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
  16978. 8007802: 88fb ldrh r3, [r7, #6]
  16979. 8007804: f003 021f and.w r2, r3, #31
  16980. 8007808: 4907 ldr r1, [pc, #28] @ (8007828 <__NVIC_EnableIRQ+0x38>)
  16981. 800780a: f9b7 3006 ldrsh.w r3, [r7, #6]
  16982. 800780e: 095b lsrs r3, r3, #5
  16983. 8007810: 2001 movs r0, #1
  16984. 8007812: fa00 f202 lsl.w r2, r0, r2
  16985. 8007816: f841 2023 str.w r2, [r1, r3, lsl #2]
  16986. }
  16987. 800781a: bf00 nop
  16988. 800781c: 370c adds r7, #12
  16989. 800781e: 46bd mov sp, r7
  16990. 8007820: f85d 7b04 ldr.w r7, [sp], #4
  16991. 8007824: 4770 bx lr
  16992. 8007826: bf00 nop
  16993. 8007828: e000e100 .word 0xe000e100
  16994. 0800782c <__NVIC_SetPriority>:
  16995. {
  16996. 800782c: b480 push {r7}
  16997. 800782e: b083 sub sp, #12
  16998. 8007830: af00 add r7, sp, #0
  16999. 8007832: 4603 mov r3, r0
  17000. 8007834: 6039 str r1, [r7, #0]
  17001. 8007836: 80fb strh r3, [r7, #6]
  17002. if ((int32_t)(IRQn) >= 0)
  17003. 8007838: f9b7 3006 ldrsh.w r3, [r7, #6]
  17004. 800783c: 2b00 cmp r3, #0
  17005. 800783e: db0a blt.n 8007856 <__NVIC_SetPriority+0x2a>
  17006. NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
  17007. 8007840: 683b ldr r3, [r7, #0]
  17008. 8007842: b2da uxtb r2, r3
  17009. 8007844: 490c ldr r1, [pc, #48] @ (8007878 <__NVIC_SetPriority+0x4c>)
  17010. 8007846: f9b7 3006 ldrsh.w r3, [r7, #6]
  17011. 800784a: 0112 lsls r2, r2, #4
  17012. 800784c: b2d2 uxtb r2, r2
  17013. 800784e: 440b add r3, r1
  17014. 8007850: f883 2300 strb.w r2, [r3, #768] @ 0x300
  17015. }
  17016. 8007854: e00a b.n 800786c <__NVIC_SetPriority+0x40>
  17017. SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
  17018. 8007856: 683b ldr r3, [r7, #0]
  17019. 8007858: b2da uxtb r2, r3
  17020. 800785a: 4908 ldr r1, [pc, #32] @ (800787c <__NVIC_SetPriority+0x50>)
  17021. 800785c: 88fb ldrh r3, [r7, #6]
  17022. 800785e: f003 030f and.w r3, r3, #15
  17023. 8007862: 3b04 subs r3, #4
  17024. 8007864: 0112 lsls r2, r2, #4
  17025. 8007866: b2d2 uxtb r2, r2
  17026. 8007868: 440b add r3, r1
  17027. 800786a: 761a strb r2, [r3, #24]
  17028. }
  17029. 800786c: bf00 nop
  17030. 800786e: 370c adds r7, #12
  17031. 8007870: 46bd mov sp, r7
  17032. 8007872: f85d 7b04 ldr.w r7, [sp], #4
  17033. 8007876: 4770 bx lr
  17034. 8007878: e000e100 .word 0xe000e100
  17035. 800787c: e000ed00 .word 0xe000ed00
  17036. 08007880 <NVIC_EncodePriority>:
  17037. {
  17038. 8007880: b480 push {r7}
  17039. 8007882: b089 sub sp, #36 @ 0x24
  17040. 8007884: af00 add r7, sp, #0
  17041. 8007886: 60f8 str r0, [r7, #12]
  17042. 8007888: 60b9 str r1, [r7, #8]
  17043. 800788a: 607a str r2, [r7, #4]
  17044. uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */
  17045. 800788c: 68fb ldr r3, [r7, #12]
  17046. 800788e: f003 0307 and.w r3, r3, #7
  17047. 8007892: 61fb str r3, [r7, #28]
  17048. PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);
  17049. 8007894: 69fb ldr r3, [r7, #28]
  17050. 8007896: f1c3 0307 rsb r3, r3, #7
  17051. 800789a: 2b04 cmp r3, #4
  17052. 800789c: bf28 it cs
  17053. 800789e: 2304 movcs r3, #4
  17054. 80078a0: 61bb str r3, [r7, #24]
  17055. SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));
  17056. 80078a2: 69fb ldr r3, [r7, #28]
  17057. 80078a4: 3304 adds r3, #4
  17058. 80078a6: 2b06 cmp r3, #6
  17059. 80078a8: d902 bls.n 80078b0 <NVIC_EncodePriority+0x30>
  17060. 80078aa: 69fb ldr r3, [r7, #28]
  17061. 80078ac: 3b03 subs r3, #3
  17062. 80078ae: e000 b.n 80078b2 <NVIC_EncodePriority+0x32>
  17063. 80078b0: 2300 movs r3, #0
  17064. 80078b2: 617b str r3, [r7, #20]
  17065. ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) |
  17066. 80078b4: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
  17067. 80078b8: 69bb ldr r3, [r7, #24]
  17068. 80078ba: fa02 f303 lsl.w r3, r2, r3
  17069. 80078be: 43da mvns r2, r3
  17070. 80078c0: 68bb ldr r3, [r7, #8]
  17071. 80078c2: 401a ands r2, r3
  17072. 80078c4: 697b ldr r3, [r7, #20]
  17073. 80078c6: 409a lsls r2, r3
  17074. ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL)))
  17075. 80078c8: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  17076. 80078cc: 697b ldr r3, [r7, #20]
  17077. 80078ce: fa01 f303 lsl.w r3, r1, r3
  17078. 80078d2: 43d9 mvns r1, r3
  17079. 80078d4: 687b ldr r3, [r7, #4]
  17080. 80078d6: 400b ands r3, r1
  17081. ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) |
  17082. 80078d8: 4313 orrs r3, r2
  17083. }
  17084. 80078da: 4618 mov r0, r3
  17085. 80078dc: 3724 adds r7, #36 @ 0x24
  17086. 80078de: 46bd mov sp, r7
  17087. 80078e0: f85d 7b04 ldr.w r7, [sp], #4
  17088. 80078e4: 4770 bx lr
  17089. 080078e6 <HAL_NVIC_SetPriorityGrouping>:
  17090. * @note When the NVIC_PriorityGroup_0 is selected, IRQ preemption is no more possible.
  17091. * The pending IRQ priority will be managed only by the subpriority.
  17092. * @retval None
  17093. */
  17094. void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup)
  17095. {
  17096. 80078e6: b580 push {r7, lr}
  17097. 80078e8: b082 sub sp, #8
  17098. 80078ea: af00 add r7, sp, #0
  17099. 80078ec: 6078 str r0, [r7, #4]
  17100. /* Check the parameters */
  17101. assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup));
  17102. /* Set the PRIGROUP[10:8] bits according to the PriorityGroup parameter value */
  17103. NVIC_SetPriorityGrouping(PriorityGroup);
  17104. 80078ee: 6878 ldr r0, [r7, #4]
  17105. 80078f0: f7ff ff4c bl 800778c <__NVIC_SetPriorityGrouping>
  17106. }
  17107. 80078f4: bf00 nop
  17108. 80078f6: 3708 adds r7, #8
  17109. 80078f8: 46bd mov sp, r7
  17110. 80078fa: bd80 pop {r7, pc}
  17111. 080078fc <HAL_NVIC_SetPriority>:
  17112. * This parameter can be a value between 0 and 15
  17113. * A lower priority value indicates a higher priority.
  17114. * @retval None
  17115. */
  17116. void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority)
  17117. {
  17118. 80078fc: b580 push {r7, lr}
  17119. 80078fe: b086 sub sp, #24
  17120. 8007900: af00 add r7, sp, #0
  17121. 8007902: 4603 mov r3, r0
  17122. 8007904: 60b9 str r1, [r7, #8]
  17123. 8007906: 607a str r2, [r7, #4]
  17124. 8007908: 81fb strh r3, [r7, #14]
  17125. /* Check the parameters */
  17126. assert_param(IS_NVIC_SUB_PRIORITY(SubPriority));
  17127. assert_param(IS_NVIC_PREEMPTION_PRIORITY(PreemptPriority));
  17128. prioritygroup = NVIC_GetPriorityGrouping();
  17129. 800790a: f7ff ff63 bl 80077d4 <__NVIC_GetPriorityGrouping>
  17130. 800790e: 6178 str r0, [r7, #20]
  17131. NVIC_SetPriority(IRQn, NVIC_EncodePriority(prioritygroup, PreemptPriority, SubPriority));
  17132. 8007910: 687a ldr r2, [r7, #4]
  17133. 8007912: 68b9 ldr r1, [r7, #8]
  17134. 8007914: 6978 ldr r0, [r7, #20]
  17135. 8007916: f7ff ffb3 bl 8007880 <NVIC_EncodePriority>
  17136. 800791a: 4602 mov r2, r0
  17137. 800791c: f9b7 300e ldrsh.w r3, [r7, #14]
  17138. 8007920: 4611 mov r1, r2
  17139. 8007922: 4618 mov r0, r3
  17140. 8007924: f7ff ff82 bl 800782c <__NVIC_SetPriority>
  17141. }
  17142. 8007928: bf00 nop
  17143. 800792a: 3718 adds r7, #24
  17144. 800792c: 46bd mov sp, r7
  17145. 800792e: bd80 pop {r7, pc}
  17146. 08007930 <HAL_NVIC_EnableIRQ>:
  17147. * This parameter can be an enumerator of IRQn_Type enumeration
  17148. * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32h7xxxx.h))
  17149. * @retval None
  17150. */
  17151. void HAL_NVIC_EnableIRQ(IRQn_Type IRQn)
  17152. {
  17153. 8007930: b580 push {r7, lr}
  17154. 8007932: b082 sub sp, #8
  17155. 8007934: af00 add r7, sp, #0
  17156. 8007936: 4603 mov r3, r0
  17157. 8007938: 80fb strh r3, [r7, #6]
  17158. /* Check the parameters */
  17159. assert_param(IS_NVIC_DEVICE_IRQ(IRQn));
  17160. /* Enable interrupt */
  17161. NVIC_EnableIRQ(IRQn);
  17162. 800793a: f9b7 3006 ldrsh.w r3, [r7, #6]
  17163. 800793e: 4618 mov r0, r3
  17164. 8007940: f7ff ff56 bl 80077f0 <__NVIC_EnableIRQ>
  17165. }
  17166. 8007944: bf00 nop
  17167. 8007946: 3708 adds r7, #8
  17168. 8007948: 46bd mov sp, r7
  17169. 800794a: bd80 pop {r7, pc}
  17170. 0800794c <HAL_MPU_Disable>:
  17171. /**
  17172. * @brief Disables the MPU
  17173. * @retval None
  17174. */
  17175. void HAL_MPU_Disable(void)
  17176. {
  17177. 800794c: b480 push {r7}
  17178. 800794e: af00 add r7, sp, #0
  17179. __ASM volatile ("dmb 0xF":::"memory");
  17180. 8007950: f3bf 8f5f dmb sy
  17181. }
  17182. 8007954: bf00 nop
  17183. /* Make sure outstanding transfers are done */
  17184. __DMB();
  17185. /* Disable fault exceptions */
  17186. SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk;
  17187. 8007956: 4b07 ldr r3, [pc, #28] @ (8007974 <HAL_MPU_Disable+0x28>)
  17188. 8007958: 6a5b ldr r3, [r3, #36] @ 0x24
  17189. 800795a: 4a06 ldr r2, [pc, #24] @ (8007974 <HAL_MPU_Disable+0x28>)
  17190. 800795c: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  17191. 8007960: 6253 str r3, [r2, #36] @ 0x24
  17192. /* Disable the MPU and clear the control register*/
  17193. MPU->CTRL = 0;
  17194. 8007962: 4b05 ldr r3, [pc, #20] @ (8007978 <HAL_MPU_Disable+0x2c>)
  17195. 8007964: 2200 movs r2, #0
  17196. 8007966: 605a str r2, [r3, #4]
  17197. }
  17198. 8007968: bf00 nop
  17199. 800796a: 46bd mov sp, r7
  17200. 800796c: f85d 7b04 ldr.w r7, [sp], #4
  17201. 8007970: 4770 bx lr
  17202. 8007972: bf00 nop
  17203. 8007974: e000ed00 .word 0xe000ed00
  17204. 8007978: e000ed90 .word 0xe000ed90
  17205. 0800797c <HAL_MPU_Enable>:
  17206. * @arg MPU_PRIVILEGED_DEFAULT
  17207. * @arg MPU_HFNMI_PRIVDEF
  17208. * @retval None
  17209. */
  17210. void HAL_MPU_Enable(uint32_t MPU_Control)
  17211. {
  17212. 800797c: b480 push {r7}
  17213. 800797e: b083 sub sp, #12
  17214. 8007980: af00 add r7, sp, #0
  17215. 8007982: 6078 str r0, [r7, #4]
  17216. /* Enable the MPU */
  17217. MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk;
  17218. 8007984: 4a0b ldr r2, [pc, #44] @ (80079b4 <HAL_MPU_Enable+0x38>)
  17219. 8007986: 687b ldr r3, [r7, #4]
  17220. 8007988: f043 0301 orr.w r3, r3, #1
  17221. 800798c: 6053 str r3, [r2, #4]
  17222. /* Enable fault exceptions */
  17223. SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk;
  17224. 800798e: 4b0a ldr r3, [pc, #40] @ (80079b8 <HAL_MPU_Enable+0x3c>)
  17225. 8007990: 6a5b ldr r3, [r3, #36] @ 0x24
  17226. 8007992: 4a09 ldr r2, [pc, #36] @ (80079b8 <HAL_MPU_Enable+0x3c>)
  17227. 8007994: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  17228. 8007998: 6253 str r3, [r2, #36] @ 0x24
  17229. __ASM volatile ("dsb 0xF":::"memory");
  17230. 800799a: f3bf 8f4f dsb sy
  17231. }
  17232. 800799e: bf00 nop
  17233. __ASM volatile ("isb 0xF":::"memory");
  17234. 80079a0: f3bf 8f6f isb sy
  17235. }
  17236. 80079a4: bf00 nop
  17237. /* Ensure MPU setting take effects */
  17238. __DSB();
  17239. __ISB();
  17240. }
  17241. 80079a6: bf00 nop
  17242. 80079a8: 370c adds r7, #12
  17243. 80079aa: 46bd mov sp, r7
  17244. 80079ac: f85d 7b04 ldr.w r7, [sp], #4
  17245. 80079b0: 4770 bx lr
  17246. 80079b2: bf00 nop
  17247. 80079b4: e000ed90 .word 0xe000ed90
  17248. 80079b8: e000ed00 .word 0xe000ed00
  17249. 080079bc <HAL_MPU_ConfigRegion>:
  17250. * @param MPU_Init Pointer to a MPU_Region_InitTypeDef structure that contains
  17251. * the initialization and configuration information.
  17252. * @retval None
  17253. */
  17254. void HAL_MPU_ConfigRegion(MPU_Region_InitTypeDef *MPU_Init)
  17255. {
  17256. 80079bc: b480 push {r7}
  17257. 80079be: b083 sub sp, #12
  17258. 80079c0: af00 add r7, sp, #0
  17259. 80079c2: 6078 str r0, [r7, #4]
  17260. assert_param(IS_MPU_ACCESS_BUFFERABLE(MPU_Init->IsBufferable));
  17261. assert_param(IS_MPU_SUB_REGION_DISABLE(MPU_Init->SubRegionDisable));
  17262. assert_param(IS_MPU_REGION_SIZE(MPU_Init->Size));
  17263. /* Set the Region number */
  17264. MPU->RNR = MPU_Init->Number;
  17265. 80079c4: 687b ldr r3, [r7, #4]
  17266. 80079c6: 785a ldrb r2, [r3, #1]
  17267. 80079c8: 4b1b ldr r3, [pc, #108] @ (8007a38 <HAL_MPU_ConfigRegion+0x7c>)
  17268. 80079ca: 609a str r2, [r3, #8]
  17269. /* Disable the Region */
  17270. CLEAR_BIT(MPU->RASR, MPU_RASR_ENABLE_Msk);
  17271. 80079cc: 4b1a ldr r3, [pc, #104] @ (8007a38 <HAL_MPU_ConfigRegion+0x7c>)
  17272. 80079ce: 691b ldr r3, [r3, #16]
  17273. 80079d0: 4a19 ldr r2, [pc, #100] @ (8007a38 <HAL_MPU_ConfigRegion+0x7c>)
  17274. 80079d2: f023 0301 bic.w r3, r3, #1
  17275. 80079d6: 6113 str r3, [r2, #16]
  17276. /* Apply configuration */
  17277. MPU->RBAR = MPU_Init->BaseAddress;
  17278. 80079d8: 4a17 ldr r2, [pc, #92] @ (8007a38 <HAL_MPU_ConfigRegion+0x7c>)
  17279. 80079da: 687b ldr r3, [r7, #4]
  17280. 80079dc: 685b ldr r3, [r3, #4]
  17281. 80079de: 60d3 str r3, [r2, #12]
  17282. MPU->RASR = ((uint32_t)MPU_Init->DisableExec << MPU_RASR_XN_Pos) |
  17283. 80079e0: 687b ldr r3, [r7, #4]
  17284. 80079e2: 7b1b ldrb r3, [r3, #12]
  17285. 80079e4: 071a lsls r2, r3, #28
  17286. ((uint32_t)MPU_Init->AccessPermission << MPU_RASR_AP_Pos) |
  17287. 80079e6: 687b ldr r3, [r7, #4]
  17288. 80079e8: 7adb ldrb r3, [r3, #11]
  17289. 80079ea: 061b lsls r3, r3, #24
  17290. MPU->RASR = ((uint32_t)MPU_Init->DisableExec << MPU_RASR_XN_Pos) |
  17291. 80079ec: 431a orrs r2, r3
  17292. ((uint32_t)MPU_Init->TypeExtField << MPU_RASR_TEX_Pos) |
  17293. 80079ee: 687b ldr r3, [r7, #4]
  17294. 80079f0: 7a9b ldrb r3, [r3, #10]
  17295. 80079f2: 04db lsls r3, r3, #19
  17296. ((uint32_t)MPU_Init->AccessPermission << MPU_RASR_AP_Pos) |
  17297. 80079f4: 431a orrs r2, r3
  17298. ((uint32_t)MPU_Init->IsShareable << MPU_RASR_S_Pos) |
  17299. 80079f6: 687b ldr r3, [r7, #4]
  17300. 80079f8: 7b5b ldrb r3, [r3, #13]
  17301. 80079fa: 049b lsls r3, r3, #18
  17302. ((uint32_t)MPU_Init->TypeExtField << MPU_RASR_TEX_Pos) |
  17303. 80079fc: 431a orrs r2, r3
  17304. ((uint32_t)MPU_Init->IsCacheable << MPU_RASR_C_Pos) |
  17305. 80079fe: 687b ldr r3, [r7, #4]
  17306. 8007a00: 7b9b ldrb r3, [r3, #14]
  17307. 8007a02: 045b lsls r3, r3, #17
  17308. ((uint32_t)MPU_Init->IsShareable << MPU_RASR_S_Pos) |
  17309. 8007a04: 431a orrs r2, r3
  17310. ((uint32_t)MPU_Init->IsBufferable << MPU_RASR_B_Pos) |
  17311. 8007a06: 687b ldr r3, [r7, #4]
  17312. 8007a08: 7bdb ldrb r3, [r3, #15]
  17313. 8007a0a: 041b lsls r3, r3, #16
  17314. ((uint32_t)MPU_Init->IsCacheable << MPU_RASR_C_Pos) |
  17315. 8007a0c: 431a orrs r2, r3
  17316. ((uint32_t)MPU_Init->SubRegionDisable << MPU_RASR_SRD_Pos) |
  17317. 8007a0e: 687b ldr r3, [r7, #4]
  17318. 8007a10: 7a5b ldrb r3, [r3, #9]
  17319. 8007a12: 021b lsls r3, r3, #8
  17320. ((uint32_t)MPU_Init->IsBufferable << MPU_RASR_B_Pos) |
  17321. 8007a14: 431a orrs r2, r3
  17322. ((uint32_t)MPU_Init->Size << MPU_RASR_SIZE_Pos) |
  17323. 8007a16: 687b ldr r3, [r7, #4]
  17324. 8007a18: 7a1b ldrb r3, [r3, #8]
  17325. 8007a1a: 005b lsls r3, r3, #1
  17326. ((uint32_t)MPU_Init->SubRegionDisable << MPU_RASR_SRD_Pos) |
  17327. 8007a1c: 4313 orrs r3, r2
  17328. ((uint32_t)MPU_Init->Enable << MPU_RASR_ENABLE_Pos);
  17329. 8007a1e: 687a ldr r2, [r7, #4]
  17330. 8007a20: 7812 ldrb r2, [r2, #0]
  17331. 8007a22: 4611 mov r1, r2
  17332. MPU->RASR = ((uint32_t)MPU_Init->DisableExec << MPU_RASR_XN_Pos) |
  17333. 8007a24: 4a04 ldr r2, [pc, #16] @ (8007a38 <HAL_MPU_ConfigRegion+0x7c>)
  17334. ((uint32_t)MPU_Init->Size << MPU_RASR_SIZE_Pos) |
  17335. 8007a26: 430b orrs r3, r1
  17336. MPU->RASR = ((uint32_t)MPU_Init->DisableExec << MPU_RASR_XN_Pos) |
  17337. 8007a28: 6113 str r3, [r2, #16]
  17338. }
  17339. 8007a2a: bf00 nop
  17340. 8007a2c: 370c adds r7, #12
  17341. 8007a2e: 46bd mov sp, r7
  17342. 8007a30: f85d 7b04 ldr.w r7, [sp], #4
  17343. 8007a34: 4770 bx lr
  17344. 8007a36: bf00 nop
  17345. 8007a38: e000ed90 .word 0xe000ed90
  17346. 08007a3c <HAL_CRC_Init>:
  17347. * parameters in the CRC_InitTypeDef and create the associated handle.
  17348. * @param hcrc CRC handle
  17349. * @retval HAL status
  17350. */
  17351. HAL_StatusTypeDef HAL_CRC_Init(CRC_HandleTypeDef *hcrc)
  17352. {
  17353. 8007a3c: b580 push {r7, lr}
  17354. 8007a3e: b082 sub sp, #8
  17355. 8007a40: af00 add r7, sp, #0
  17356. 8007a42: 6078 str r0, [r7, #4]
  17357. /* Check the CRC handle allocation */
  17358. if (hcrc == NULL)
  17359. 8007a44: 687b ldr r3, [r7, #4]
  17360. 8007a46: 2b00 cmp r3, #0
  17361. 8007a48: d101 bne.n 8007a4e <HAL_CRC_Init+0x12>
  17362. {
  17363. return HAL_ERROR;
  17364. 8007a4a: 2301 movs r3, #1
  17365. 8007a4c: e054 b.n 8007af8 <HAL_CRC_Init+0xbc>
  17366. }
  17367. /* Check the parameters */
  17368. assert_param(IS_CRC_ALL_INSTANCE(hcrc->Instance));
  17369. if (hcrc->State == HAL_CRC_STATE_RESET)
  17370. 8007a4e: 687b ldr r3, [r7, #4]
  17371. 8007a50: 7f5b ldrb r3, [r3, #29]
  17372. 8007a52: b2db uxtb r3, r3
  17373. 8007a54: 2b00 cmp r3, #0
  17374. 8007a56: d105 bne.n 8007a64 <HAL_CRC_Init+0x28>
  17375. {
  17376. /* Allocate lock resource and initialize it */
  17377. hcrc->Lock = HAL_UNLOCKED;
  17378. 8007a58: 687b ldr r3, [r7, #4]
  17379. 8007a5a: 2200 movs r2, #0
  17380. 8007a5c: 771a strb r2, [r3, #28]
  17381. /* Init the low level hardware */
  17382. HAL_CRC_MspInit(hcrc);
  17383. 8007a5e: 6878 ldr r0, [r7, #4]
  17384. 8007a60: f7fc faba bl 8003fd8 <HAL_CRC_MspInit>
  17385. }
  17386. hcrc->State = HAL_CRC_STATE_BUSY;
  17387. 8007a64: 687b ldr r3, [r7, #4]
  17388. 8007a66: 2202 movs r2, #2
  17389. 8007a68: 775a strb r2, [r3, #29]
  17390. /* check whether or not non-default generating polynomial has been
  17391. * picked up by user */
  17392. assert_param(IS_DEFAULT_POLYNOMIAL(hcrc->Init.DefaultPolynomialUse));
  17393. if (hcrc->Init.DefaultPolynomialUse == DEFAULT_POLYNOMIAL_ENABLE)
  17394. 8007a6a: 687b ldr r3, [r7, #4]
  17395. 8007a6c: 791b ldrb r3, [r3, #4]
  17396. 8007a6e: 2b00 cmp r3, #0
  17397. 8007a70: d10c bne.n 8007a8c <HAL_CRC_Init+0x50>
  17398. {
  17399. /* initialize peripheral with default generating polynomial */
  17400. WRITE_REG(hcrc->Instance->POL, DEFAULT_CRC32_POLY);
  17401. 8007a72: 687b ldr r3, [r7, #4]
  17402. 8007a74: 681b ldr r3, [r3, #0]
  17403. 8007a76: 4a22 ldr r2, [pc, #136] @ (8007b00 <HAL_CRC_Init+0xc4>)
  17404. 8007a78: 615a str r2, [r3, #20]
  17405. MODIFY_REG(hcrc->Instance->CR, CRC_CR_POLYSIZE, CRC_POLYLENGTH_32B);
  17406. 8007a7a: 687b ldr r3, [r7, #4]
  17407. 8007a7c: 681b ldr r3, [r3, #0]
  17408. 8007a7e: 689a ldr r2, [r3, #8]
  17409. 8007a80: 687b ldr r3, [r7, #4]
  17410. 8007a82: 681b ldr r3, [r3, #0]
  17411. 8007a84: f022 0218 bic.w r2, r2, #24
  17412. 8007a88: 609a str r2, [r3, #8]
  17413. 8007a8a: e00c b.n 8007aa6 <HAL_CRC_Init+0x6a>
  17414. }
  17415. else
  17416. {
  17417. /* initialize CRC peripheral with generating polynomial defined by user */
  17418. if (HAL_CRCEx_Polynomial_Set(hcrc, hcrc->Init.GeneratingPolynomial, hcrc->Init.CRCLength) != HAL_OK)
  17419. 8007a8c: 687b ldr r3, [r7, #4]
  17420. 8007a8e: 6899 ldr r1, [r3, #8]
  17421. 8007a90: 687b ldr r3, [r7, #4]
  17422. 8007a92: 68db ldr r3, [r3, #12]
  17423. 8007a94: 461a mov r2, r3
  17424. 8007a96: 6878 ldr r0, [r7, #4]
  17425. 8007a98: f000 f948 bl 8007d2c <HAL_CRCEx_Polynomial_Set>
  17426. 8007a9c: 4603 mov r3, r0
  17427. 8007a9e: 2b00 cmp r3, #0
  17428. 8007aa0: d001 beq.n 8007aa6 <HAL_CRC_Init+0x6a>
  17429. {
  17430. return HAL_ERROR;
  17431. 8007aa2: 2301 movs r3, #1
  17432. 8007aa4: e028 b.n 8007af8 <HAL_CRC_Init+0xbc>
  17433. }
  17434. /* check whether or not non-default CRC initial value has been
  17435. * picked up by user */
  17436. assert_param(IS_DEFAULT_INIT_VALUE(hcrc->Init.DefaultInitValueUse));
  17437. if (hcrc->Init.DefaultInitValueUse == DEFAULT_INIT_VALUE_ENABLE)
  17438. 8007aa6: 687b ldr r3, [r7, #4]
  17439. 8007aa8: 795b ldrb r3, [r3, #5]
  17440. 8007aaa: 2b00 cmp r3, #0
  17441. 8007aac: d105 bne.n 8007aba <HAL_CRC_Init+0x7e>
  17442. {
  17443. WRITE_REG(hcrc->Instance->INIT, DEFAULT_CRC_INITVALUE);
  17444. 8007aae: 687b ldr r3, [r7, #4]
  17445. 8007ab0: 681b ldr r3, [r3, #0]
  17446. 8007ab2: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
  17447. 8007ab6: 611a str r2, [r3, #16]
  17448. 8007ab8: e004 b.n 8007ac4 <HAL_CRC_Init+0x88>
  17449. }
  17450. else
  17451. {
  17452. WRITE_REG(hcrc->Instance->INIT, hcrc->Init.InitValue);
  17453. 8007aba: 687b ldr r3, [r7, #4]
  17454. 8007abc: 681b ldr r3, [r3, #0]
  17455. 8007abe: 687a ldr r2, [r7, #4]
  17456. 8007ac0: 6912 ldr r2, [r2, #16]
  17457. 8007ac2: 611a str r2, [r3, #16]
  17458. }
  17459. /* set input data inversion mode */
  17460. assert_param(IS_CRC_INPUTDATA_INVERSION_MODE(hcrc->Init.InputDataInversionMode));
  17461. MODIFY_REG(hcrc->Instance->CR, CRC_CR_REV_IN, hcrc->Init.InputDataInversionMode);
  17462. 8007ac4: 687b ldr r3, [r7, #4]
  17463. 8007ac6: 681b ldr r3, [r3, #0]
  17464. 8007ac8: 689b ldr r3, [r3, #8]
  17465. 8007aca: f023 0160 bic.w r1, r3, #96 @ 0x60
  17466. 8007ace: 687b ldr r3, [r7, #4]
  17467. 8007ad0: 695a ldr r2, [r3, #20]
  17468. 8007ad2: 687b ldr r3, [r7, #4]
  17469. 8007ad4: 681b ldr r3, [r3, #0]
  17470. 8007ad6: 430a orrs r2, r1
  17471. 8007ad8: 609a str r2, [r3, #8]
  17472. /* set output data inversion mode */
  17473. assert_param(IS_CRC_OUTPUTDATA_INVERSION_MODE(hcrc->Init.OutputDataInversionMode));
  17474. MODIFY_REG(hcrc->Instance->CR, CRC_CR_REV_OUT, hcrc->Init.OutputDataInversionMode);
  17475. 8007ada: 687b ldr r3, [r7, #4]
  17476. 8007adc: 681b ldr r3, [r3, #0]
  17477. 8007ade: 689b ldr r3, [r3, #8]
  17478. 8007ae0: f023 0180 bic.w r1, r3, #128 @ 0x80
  17479. 8007ae4: 687b ldr r3, [r7, #4]
  17480. 8007ae6: 699a ldr r2, [r3, #24]
  17481. 8007ae8: 687b ldr r3, [r7, #4]
  17482. 8007aea: 681b ldr r3, [r3, #0]
  17483. 8007aec: 430a orrs r2, r1
  17484. 8007aee: 609a str r2, [r3, #8]
  17485. /* makes sure the input data format (bytes, halfwords or words stream)
  17486. * is properly specified by user */
  17487. assert_param(IS_CRC_INPUTDATA_FORMAT(hcrc->InputDataFormat));
  17488. /* Change CRC peripheral state */
  17489. hcrc->State = HAL_CRC_STATE_READY;
  17490. 8007af0: 687b ldr r3, [r7, #4]
  17491. 8007af2: 2201 movs r2, #1
  17492. 8007af4: 775a strb r2, [r3, #29]
  17493. /* Return function status */
  17494. return HAL_OK;
  17495. 8007af6: 2300 movs r3, #0
  17496. }
  17497. 8007af8: 4618 mov r0, r3
  17498. 8007afa: 3708 adds r7, #8
  17499. 8007afc: 46bd mov sp, r7
  17500. 8007afe: bd80 pop {r7, pc}
  17501. 8007b00: 04c11db7 .word 0x04c11db7
  17502. 08007b04 <HAL_CRC_Calculate>:
  17503. * and the API will internally adjust its input data processing based on the
  17504. * handle field hcrc->InputDataFormat.
  17505. * @retval uint32_t CRC (returned value LSBs for CRC shorter than 32 bits)
  17506. */
  17507. uint32_t HAL_CRC_Calculate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength)
  17508. {
  17509. 8007b04: b580 push {r7, lr}
  17510. 8007b06: b086 sub sp, #24
  17511. 8007b08: af00 add r7, sp, #0
  17512. 8007b0a: 60f8 str r0, [r7, #12]
  17513. 8007b0c: 60b9 str r1, [r7, #8]
  17514. 8007b0e: 607a str r2, [r7, #4]
  17515. uint32_t index; /* CRC input data buffer index */
  17516. uint32_t temp = 0U; /* CRC output (read from hcrc->Instance->DR register) */
  17517. 8007b10: 2300 movs r3, #0
  17518. 8007b12: 613b str r3, [r7, #16]
  17519. /* Change CRC peripheral state */
  17520. hcrc->State = HAL_CRC_STATE_BUSY;
  17521. 8007b14: 68fb ldr r3, [r7, #12]
  17522. 8007b16: 2202 movs r2, #2
  17523. 8007b18: 775a strb r2, [r3, #29]
  17524. /* Reset CRC Calculation Unit (hcrc->Instance->INIT is
  17525. * written in hcrc->Instance->DR) */
  17526. __HAL_CRC_DR_RESET(hcrc);
  17527. 8007b1a: 68fb ldr r3, [r7, #12]
  17528. 8007b1c: 681b ldr r3, [r3, #0]
  17529. 8007b1e: 689a ldr r2, [r3, #8]
  17530. 8007b20: 68fb ldr r3, [r7, #12]
  17531. 8007b22: 681b ldr r3, [r3, #0]
  17532. 8007b24: f042 0201 orr.w r2, r2, #1
  17533. 8007b28: 609a str r2, [r3, #8]
  17534. switch (hcrc->InputDataFormat)
  17535. 8007b2a: 68fb ldr r3, [r7, #12]
  17536. 8007b2c: 6a1b ldr r3, [r3, #32]
  17537. 8007b2e: 2b03 cmp r3, #3
  17538. 8007b30: d006 beq.n 8007b40 <HAL_CRC_Calculate+0x3c>
  17539. 8007b32: 2b03 cmp r3, #3
  17540. 8007b34: d829 bhi.n 8007b8a <HAL_CRC_Calculate+0x86>
  17541. 8007b36: 2b01 cmp r3, #1
  17542. 8007b38: d019 beq.n 8007b6e <HAL_CRC_Calculate+0x6a>
  17543. 8007b3a: 2b02 cmp r3, #2
  17544. 8007b3c: d01e beq.n 8007b7c <HAL_CRC_Calculate+0x78>
  17545. /* Specific 16-bit input data handling */
  17546. temp = CRC_Handle_16(hcrc, (uint16_t *)(void *)pBuffer, BufferLength); /* Derogation MisraC2012 R.11.5 */
  17547. break;
  17548. default:
  17549. break;
  17550. 8007b3e: e024 b.n 8007b8a <HAL_CRC_Calculate+0x86>
  17551. for (index = 0U; index < BufferLength; index++)
  17552. 8007b40: 2300 movs r3, #0
  17553. 8007b42: 617b str r3, [r7, #20]
  17554. 8007b44: e00a b.n 8007b5c <HAL_CRC_Calculate+0x58>
  17555. hcrc->Instance->DR = pBuffer[index];
  17556. 8007b46: 697b ldr r3, [r7, #20]
  17557. 8007b48: 009b lsls r3, r3, #2
  17558. 8007b4a: 68ba ldr r2, [r7, #8]
  17559. 8007b4c: 441a add r2, r3
  17560. 8007b4e: 68fb ldr r3, [r7, #12]
  17561. 8007b50: 681b ldr r3, [r3, #0]
  17562. 8007b52: 6812 ldr r2, [r2, #0]
  17563. 8007b54: 601a str r2, [r3, #0]
  17564. for (index = 0U; index < BufferLength; index++)
  17565. 8007b56: 697b ldr r3, [r7, #20]
  17566. 8007b58: 3301 adds r3, #1
  17567. 8007b5a: 617b str r3, [r7, #20]
  17568. 8007b5c: 697a ldr r2, [r7, #20]
  17569. 8007b5e: 687b ldr r3, [r7, #4]
  17570. 8007b60: 429a cmp r2, r3
  17571. 8007b62: d3f0 bcc.n 8007b46 <HAL_CRC_Calculate+0x42>
  17572. temp = hcrc->Instance->DR;
  17573. 8007b64: 68fb ldr r3, [r7, #12]
  17574. 8007b66: 681b ldr r3, [r3, #0]
  17575. 8007b68: 681b ldr r3, [r3, #0]
  17576. 8007b6a: 613b str r3, [r7, #16]
  17577. break;
  17578. 8007b6c: e00e b.n 8007b8c <HAL_CRC_Calculate+0x88>
  17579. temp = CRC_Handle_8(hcrc, (uint8_t *)pBuffer, BufferLength);
  17580. 8007b6e: 687a ldr r2, [r7, #4]
  17581. 8007b70: 68b9 ldr r1, [r7, #8]
  17582. 8007b72: 68f8 ldr r0, [r7, #12]
  17583. 8007b74: f000 f812 bl 8007b9c <CRC_Handle_8>
  17584. 8007b78: 6138 str r0, [r7, #16]
  17585. break;
  17586. 8007b7a: e007 b.n 8007b8c <HAL_CRC_Calculate+0x88>
  17587. temp = CRC_Handle_16(hcrc, (uint16_t *)(void *)pBuffer, BufferLength); /* Derogation MisraC2012 R.11.5 */
  17588. 8007b7c: 687a ldr r2, [r7, #4]
  17589. 8007b7e: 68b9 ldr r1, [r7, #8]
  17590. 8007b80: 68f8 ldr r0, [r7, #12]
  17591. 8007b82: f000 f899 bl 8007cb8 <CRC_Handle_16>
  17592. 8007b86: 6138 str r0, [r7, #16]
  17593. break;
  17594. 8007b88: e000 b.n 8007b8c <HAL_CRC_Calculate+0x88>
  17595. break;
  17596. 8007b8a: bf00 nop
  17597. }
  17598. /* Change CRC peripheral state */
  17599. hcrc->State = HAL_CRC_STATE_READY;
  17600. 8007b8c: 68fb ldr r3, [r7, #12]
  17601. 8007b8e: 2201 movs r2, #1
  17602. 8007b90: 775a strb r2, [r3, #29]
  17603. /* Return the CRC computed value */
  17604. return temp;
  17605. 8007b92: 693b ldr r3, [r7, #16]
  17606. }
  17607. 8007b94: 4618 mov r0, r3
  17608. 8007b96: 3718 adds r7, #24
  17609. 8007b98: 46bd mov sp, r7
  17610. 8007b9a: bd80 pop {r7, pc}
  17611. 08007b9c <CRC_Handle_8>:
  17612. * @param pBuffer pointer to the input data buffer
  17613. * @param BufferLength input data buffer length
  17614. * @retval uint32_t CRC (returned value LSBs for CRC shorter than 32 bits)
  17615. */
  17616. static uint32_t CRC_Handle_8(CRC_HandleTypeDef *hcrc, uint8_t pBuffer[], uint32_t BufferLength)
  17617. {
  17618. 8007b9c: b480 push {r7}
  17619. 8007b9e: b089 sub sp, #36 @ 0x24
  17620. 8007ba0: af00 add r7, sp, #0
  17621. 8007ba2: 60f8 str r0, [r7, #12]
  17622. 8007ba4: 60b9 str r1, [r7, #8]
  17623. 8007ba6: 607a str r2, [r7, #4]
  17624. __IO uint16_t *pReg;
  17625. /* Processing time optimization: 4 bytes are entered in a row with a single word write,
  17626. * last bytes must be carefully fed to the CRC calculator to ensure a correct type
  17627. * handling by the peripheral */
  17628. for (i = 0U; i < (BufferLength / 4U); i++)
  17629. 8007ba8: 2300 movs r3, #0
  17630. 8007baa: 61fb str r3, [r7, #28]
  17631. 8007bac: e023 b.n 8007bf6 <CRC_Handle_8+0x5a>
  17632. {
  17633. hcrc->Instance->DR = ((uint32_t)pBuffer[4U * i] << 24U) | \
  17634. 8007bae: 69fb ldr r3, [r7, #28]
  17635. 8007bb0: 009b lsls r3, r3, #2
  17636. 8007bb2: 68ba ldr r2, [r7, #8]
  17637. 8007bb4: 4413 add r3, r2
  17638. 8007bb6: 781b ldrb r3, [r3, #0]
  17639. 8007bb8: 061a lsls r2, r3, #24
  17640. ((uint32_t)pBuffer[(4U * i) + 1U] << 16U) | \
  17641. 8007bba: 69fb ldr r3, [r7, #28]
  17642. 8007bbc: 009b lsls r3, r3, #2
  17643. 8007bbe: 3301 adds r3, #1
  17644. 8007bc0: 68b9 ldr r1, [r7, #8]
  17645. 8007bc2: 440b add r3, r1
  17646. 8007bc4: 781b ldrb r3, [r3, #0]
  17647. 8007bc6: 041b lsls r3, r3, #16
  17648. hcrc->Instance->DR = ((uint32_t)pBuffer[4U * i] << 24U) | \
  17649. 8007bc8: 431a orrs r2, r3
  17650. ((uint32_t)pBuffer[(4U * i) + 2U] << 8U) | \
  17651. 8007bca: 69fb ldr r3, [r7, #28]
  17652. 8007bcc: 009b lsls r3, r3, #2
  17653. 8007bce: 3302 adds r3, #2
  17654. 8007bd0: 68b9 ldr r1, [r7, #8]
  17655. 8007bd2: 440b add r3, r1
  17656. 8007bd4: 781b ldrb r3, [r3, #0]
  17657. 8007bd6: 021b lsls r3, r3, #8
  17658. ((uint32_t)pBuffer[(4U * i) + 1U] << 16U) | \
  17659. 8007bd8: 431a orrs r2, r3
  17660. (uint32_t)pBuffer[(4U * i) + 3U];
  17661. 8007bda: 69fb ldr r3, [r7, #28]
  17662. 8007bdc: 009b lsls r3, r3, #2
  17663. 8007bde: 3303 adds r3, #3
  17664. 8007be0: 68b9 ldr r1, [r7, #8]
  17665. 8007be2: 440b add r3, r1
  17666. 8007be4: 781b ldrb r3, [r3, #0]
  17667. 8007be6: 4619 mov r1, r3
  17668. hcrc->Instance->DR = ((uint32_t)pBuffer[4U * i] << 24U) | \
  17669. 8007be8: 68fb ldr r3, [r7, #12]
  17670. 8007bea: 681b ldr r3, [r3, #0]
  17671. ((uint32_t)pBuffer[(4U * i) + 2U] << 8U) | \
  17672. 8007bec: 430a orrs r2, r1
  17673. hcrc->Instance->DR = ((uint32_t)pBuffer[4U * i] << 24U) | \
  17674. 8007bee: 601a str r2, [r3, #0]
  17675. for (i = 0U; i < (BufferLength / 4U); i++)
  17676. 8007bf0: 69fb ldr r3, [r7, #28]
  17677. 8007bf2: 3301 adds r3, #1
  17678. 8007bf4: 61fb str r3, [r7, #28]
  17679. 8007bf6: 687b ldr r3, [r7, #4]
  17680. 8007bf8: 089b lsrs r3, r3, #2
  17681. 8007bfa: 69fa ldr r2, [r7, #28]
  17682. 8007bfc: 429a cmp r2, r3
  17683. 8007bfe: d3d6 bcc.n 8007bae <CRC_Handle_8+0x12>
  17684. }
  17685. /* last bytes specific handling */
  17686. if ((BufferLength % 4U) != 0U)
  17687. 8007c00: 687b ldr r3, [r7, #4]
  17688. 8007c02: f003 0303 and.w r3, r3, #3
  17689. 8007c06: 2b00 cmp r3, #0
  17690. 8007c08: d04d beq.n 8007ca6 <CRC_Handle_8+0x10a>
  17691. {
  17692. if ((BufferLength % 4U) == 1U)
  17693. 8007c0a: 687b ldr r3, [r7, #4]
  17694. 8007c0c: f003 0303 and.w r3, r3, #3
  17695. 8007c10: 2b01 cmp r3, #1
  17696. 8007c12: d107 bne.n 8007c24 <CRC_Handle_8+0x88>
  17697. {
  17698. *(__IO uint8_t *)(__IO void *)(&hcrc->Instance->DR) = pBuffer[4U * i]; /* Derogation MisraC2012 R.11.5 */
  17699. 8007c14: 69fb ldr r3, [r7, #28]
  17700. 8007c16: 009b lsls r3, r3, #2
  17701. 8007c18: 68ba ldr r2, [r7, #8]
  17702. 8007c1a: 4413 add r3, r2
  17703. 8007c1c: 68fa ldr r2, [r7, #12]
  17704. 8007c1e: 6812 ldr r2, [r2, #0]
  17705. 8007c20: 781b ldrb r3, [r3, #0]
  17706. 8007c22: 7013 strb r3, [r2, #0]
  17707. }
  17708. if ((BufferLength % 4U) == 2U)
  17709. 8007c24: 687b ldr r3, [r7, #4]
  17710. 8007c26: f003 0303 and.w r3, r3, #3
  17711. 8007c2a: 2b02 cmp r3, #2
  17712. 8007c2c: d116 bne.n 8007c5c <CRC_Handle_8+0xc0>
  17713. {
  17714. data = ((uint16_t)(pBuffer[4U * i]) << 8U) | (uint16_t)pBuffer[(4U * i) + 1U];
  17715. 8007c2e: 69fb ldr r3, [r7, #28]
  17716. 8007c30: 009b lsls r3, r3, #2
  17717. 8007c32: 68ba ldr r2, [r7, #8]
  17718. 8007c34: 4413 add r3, r2
  17719. 8007c36: 781b ldrb r3, [r3, #0]
  17720. 8007c38: 021b lsls r3, r3, #8
  17721. 8007c3a: b21a sxth r2, r3
  17722. 8007c3c: 69fb ldr r3, [r7, #28]
  17723. 8007c3e: 009b lsls r3, r3, #2
  17724. 8007c40: 3301 adds r3, #1
  17725. 8007c42: 68b9 ldr r1, [r7, #8]
  17726. 8007c44: 440b add r3, r1
  17727. 8007c46: 781b ldrb r3, [r3, #0]
  17728. 8007c48: b21b sxth r3, r3
  17729. 8007c4a: 4313 orrs r3, r2
  17730. 8007c4c: b21b sxth r3, r3
  17731. 8007c4e: 837b strh r3, [r7, #26]
  17732. pReg = (__IO uint16_t *)(__IO void *)(&hcrc->Instance->DR); /* Derogation MisraC2012 R.11.5 */
  17733. 8007c50: 68fb ldr r3, [r7, #12]
  17734. 8007c52: 681b ldr r3, [r3, #0]
  17735. 8007c54: 617b str r3, [r7, #20]
  17736. *pReg = data;
  17737. 8007c56: 697b ldr r3, [r7, #20]
  17738. 8007c58: 8b7a ldrh r2, [r7, #26]
  17739. 8007c5a: 801a strh r2, [r3, #0]
  17740. }
  17741. if ((BufferLength % 4U) == 3U)
  17742. 8007c5c: 687b ldr r3, [r7, #4]
  17743. 8007c5e: f003 0303 and.w r3, r3, #3
  17744. 8007c62: 2b03 cmp r3, #3
  17745. 8007c64: d11f bne.n 8007ca6 <CRC_Handle_8+0x10a>
  17746. {
  17747. data = ((uint16_t)(pBuffer[4U * i]) << 8U) | (uint16_t)pBuffer[(4U * i) + 1U];
  17748. 8007c66: 69fb ldr r3, [r7, #28]
  17749. 8007c68: 009b lsls r3, r3, #2
  17750. 8007c6a: 68ba ldr r2, [r7, #8]
  17751. 8007c6c: 4413 add r3, r2
  17752. 8007c6e: 781b ldrb r3, [r3, #0]
  17753. 8007c70: 021b lsls r3, r3, #8
  17754. 8007c72: b21a sxth r2, r3
  17755. 8007c74: 69fb ldr r3, [r7, #28]
  17756. 8007c76: 009b lsls r3, r3, #2
  17757. 8007c78: 3301 adds r3, #1
  17758. 8007c7a: 68b9 ldr r1, [r7, #8]
  17759. 8007c7c: 440b add r3, r1
  17760. 8007c7e: 781b ldrb r3, [r3, #0]
  17761. 8007c80: b21b sxth r3, r3
  17762. 8007c82: 4313 orrs r3, r2
  17763. 8007c84: b21b sxth r3, r3
  17764. 8007c86: 837b strh r3, [r7, #26]
  17765. pReg = (__IO uint16_t *)(__IO void *)(&hcrc->Instance->DR); /* Derogation MisraC2012 R.11.5 */
  17766. 8007c88: 68fb ldr r3, [r7, #12]
  17767. 8007c8a: 681b ldr r3, [r3, #0]
  17768. 8007c8c: 617b str r3, [r7, #20]
  17769. *pReg = data;
  17770. 8007c8e: 697b ldr r3, [r7, #20]
  17771. 8007c90: 8b7a ldrh r2, [r7, #26]
  17772. 8007c92: 801a strh r2, [r3, #0]
  17773. *(__IO uint8_t *)(__IO void *)(&hcrc->Instance->DR) = pBuffer[(4U * i) + 2U]; /* Derogation MisraC2012 R.11.5 */
  17774. 8007c94: 69fb ldr r3, [r7, #28]
  17775. 8007c96: 009b lsls r3, r3, #2
  17776. 8007c98: 3302 adds r3, #2
  17777. 8007c9a: 68ba ldr r2, [r7, #8]
  17778. 8007c9c: 4413 add r3, r2
  17779. 8007c9e: 68fa ldr r2, [r7, #12]
  17780. 8007ca0: 6812 ldr r2, [r2, #0]
  17781. 8007ca2: 781b ldrb r3, [r3, #0]
  17782. 8007ca4: 7013 strb r3, [r2, #0]
  17783. }
  17784. }
  17785. /* Return the CRC computed value */
  17786. return hcrc->Instance->DR;
  17787. 8007ca6: 68fb ldr r3, [r7, #12]
  17788. 8007ca8: 681b ldr r3, [r3, #0]
  17789. 8007caa: 681b ldr r3, [r3, #0]
  17790. }
  17791. 8007cac: 4618 mov r0, r3
  17792. 8007cae: 3724 adds r7, #36 @ 0x24
  17793. 8007cb0: 46bd mov sp, r7
  17794. 8007cb2: f85d 7b04 ldr.w r7, [sp], #4
  17795. 8007cb6: 4770 bx lr
  17796. 08007cb8 <CRC_Handle_16>:
  17797. * @param pBuffer pointer to the input data buffer
  17798. * @param BufferLength input data buffer length
  17799. * @retval uint32_t CRC (returned value LSBs for CRC shorter than 32 bits)
  17800. */
  17801. static uint32_t CRC_Handle_16(CRC_HandleTypeDef *hcrc, uint16_t pBuffer[], uint32_t BufferLength)
  17802. {
  17803. 8007cb8: b480 push {r7}
  17804. 8007cba: b087 sub sp, #28
  17805. 8007cbc: af00 add r7, sp, #0
  17806. 8007cbe: 60f8 str r0, [r7, #12]
  17807. 8007cc0: 60b9 str r1, [r7, #8]
  17808. 8007cc2: 607a str r2, [r7, #4]
  17809. __IO uint16_t *pReg;
  17810. /* Processing time optimization: 2 HalfWords are entered in a row with a single word write,
  17811. * in case of odd length, last HalfWord must be carefully fed to the CRC calculator to ensure
  17812. * a correct type handling by the peripheral */
  17813. for (i = 0U; i < (BufferLength / 2U); i++)
  17814. 8007cc4: 2300 movs r3, #0
  17815. 8007cc6: 617b str r3, [r7, #20]
  17816. 8007cc8: e013 b.n 8007cf2 <CRC_Handle_16+0x3a>
  17817. {
  17818. hcrc->Instance->DR = ((uint32_t)pBuffer[2U * i] << 16U) | (uint32_t)pBuffer[(2U * i) + 1U];
  17819. 8007cca: 697b ldr r3, [r7, #20]
  17820. 8007ccc: 009b lsls r3, r3, #2
  17821. 8007cce: 68ba ldr r2, [r7, #8]
  17822. 8007cd0: 4413 add r3, r2
  17823. 8007cd2: 881b ldrh r3, [r3, #0]
  17824. 8007cd4: 041a lsls r2, r3, #16
  17825. 8007cd6: 697b ldr r3, [r7, #20]
  17826. 8007cd8: 009b lsls r3, r3, #2
  17827. 8007cda: 3302 adds r3, #2
  17828. 8007cdc: 68b9 ldr r1, [r7, #8]
  17829. 8007cde: 440b add r3, r1
  17830. 8007ce0: 881b ldrh r3, [r3, #0]
  17831. 8007ce2: 4619 mov r1, r3
  17832. 8007ce4: 68fb ldr r3, [r7, #12]
  17833. 8007ce6: 681b ldr r3, [r3, #0]
  17834. 8007ce8: 430a orrs r2, r1
  17835. 8007cea: 601a str r2, [r3, #0]
  17836. for (i = 0U; i < (BufferLength / 2U); i++)
  17837. 8007cec: 697b ldr r3, [r7, #20]
  17838. 8007cee: 3301 adds r3, #1
  17839. 8007cf0: 617b str r3, [r7, #20]
  17840. 8007cf2: 687b ldr r3, [r7, #4]
  17841. 8007cf4: 085b lsrs r3, r3, #1
  17842. 8007cf6: 697a ldr r2, [r7, #20]
  17843. 8007cf8: 429a cmp r2, r3
  17844. 8007cfa: d3e6 bcc.n 8007cca <CRC_Handle_16+0x12>
  17845. }
  17846. if ((BufferLength % 2U) != 0U)
  17847. 8007cfc: 687b ldr r3, [r7, #4]
  17848. 8007cfe: f003 0301 and.w r3, r3, #1
  17849. 8007d02: 2b00 cmp r3, #0
  17850. 8007d04: d009 beq.n 8007d1a <CRC_Handle_16+0x62>
  17851. {
  17852. pReg = (__IO uint16_t *)(__IO void *)(&hcrc->Instance->DR); /* Derogation MisraC2012 R.11.5 */
  17853. 8007d06: 68fb ldr r3, [r7, #12]
  17854. 8007d08: 681b ldr r3, [r3, #0]
  17855. 8007d0a: 613b str r3, [r7, #16]
  17856. *pReg = pBuffer[2U * i];
  17857. 8007d0c: 697b ldr r3, [r7, #20]
  17858. 8007d0e: 009b lsls r3, r3, #2
  17859. 8007d10: 68ba ldr r2, [r7, #8]
  17860. 8007d12: 4413 add r3, r2
  17861. 8007d14: 881a ldrh r2, [r3, #0]
  17862. 8007d16: 693b ldr r3, [r7, #16]
  17863. 8007d18: 801a strh r2, [r3, #0]
  17864. }
  17865. /* Return the CRC computed value */
  17866. return hcrc->Instance->DR;
  17867. 8007d1a: 68fb ldr r3, [r7, #12]
  17868. 8007d1c: 681b ldr r3, [r3, #0]
  17869. 8007d1e: 681b ldr r3, [r3, #0]
  17870. }
  17871. 8007d20: 4618 mov r0, r3
  17872. 8007d22: 371c adds r7, #28
  17873. 8007d24: 46bd mov sp, r7
  17874. 8007d26: f85d 7b04 ldr.w r7, [sp], #4
  17875. 8007d2a: 4770 bx lr
  17876. 08007d2c <HAL_CRCEx_Polynomial_Set>:
  17877. * @arg @ref CRC_POLYLENGTH_16B 16-bit long CRC (generating polynomial of degree 16)
  17878. * @arg @ref CRC_POLYLENGTH_32B 32-bit long CRC (generating polynomial of degree 32)
  17879. * @retval HAL status
  17880. */
  17881. HAL_StatusTypeDef HAL_CRCEx_Polynomial_Set(CRC_HandleTypeDef *hcrc, uint32_t Pol, uint32_t PolyLength)
  17882. {
  17883. 8007d2c: b480 push {r7}
  17884. 8007d2e: b087 sub sp, #28
  17885. 8007d30: af00 add r7, sp, #0
  17886. 8007d32: 60f8 str r0, [r7, #12]
  17887. 8007d34: 60b9 str r1, [r7, #8]
  17888. 8007d36: 607a str r2, [r7, #4]
  17889. HAL_StatusTypeDef status = HAL_OK;
  17890. 8007d38: 2300 movs r3, #0
  17891. 8007d3a: 75fb strb r3, [r7, #23]
  17892. uint32_t msb = 31U; /* polynomial degree is 32 at most, so msb is initialized to max value */
  17893. 8007d3c: 231f movs r3, #31
  17894. 8007d3e: 613b str r3, [r7, #16]
  17895. /* Check the parameters */
  17896. assert_param(IS_CRC_POL_LENGTH(PolyLength));
  17897. /* Ensure that the generating polynomial is odd */
  17898. if ((Pol & (uint32_t)(0x1U)) == 0U)
  17899. 8007d40: 68bb ldr r3, [r7, #8]
  17900. 8007d42: f003 0301 and.w r3, r3, #1
  17901. 8007d46: 2b00 cmp r3, #0
  17902. 8007d48: d102 bne.n 8007d50 <HAL_CRCEx_Polynomial_Set+0x24>
  17903. {
  17904. status = HAL_ERROR;
  17905. 8007d4a: 2301 movs r3, #1
  17906. 8007d4c: 75fb strb r3, [r7, #23]
  17907. 8007d4e: e063 b.n 8007e18 <HAL_CRCEx_Polynomial_Set+0xec>
  17908. * definition. HAL_ERROR is reported if Pol degree is
  17909. * larger than that indicated by PolyLength.
  17910. * Look for MSB position: msb will contain the degree of
  17911. * the second to the largest polynomial member. E.g., for
  17912. * X^7 + X^6 + X^5 + X^2 + 1, msb = 6. */
  17913. while ((msb-- > 0U) && ((Pol & ((uint32_t)(0x1U) << (msb & 0x1FU))) == 0U))
  17914. 8007d50: bf00 nop
  17915. 8007d52: 693b ldr r3, [r7, #16]
  17916. 8007d54: 1e5a subs r2, r3, #1
  17917. 8007d56: 613a str r2, [r7, #16]
  17918. 8007d58: 2b00 cmp r3, #0
  17919. 8007d5a: d009 beq.n 8007d70 <HAL_CRCEx_Polynomial_Set+0x44>
  17920. 8007d5c: 693b ldr r3, [r7, #16]
  17921. 8007d5e: f003 031f and.w r3, r3, #31
  17922. 8007d62: 68ba ldr r2, [r7, #8]
  17923. 8007d64: fa22 f303 lsr.w r3, r2, r3
  17924. 8007d68: f003 0301 and.w r3, r3, #1
  17925. 8007d6c: 2b00 cmp r3, #0
  17926. 8007d6e: d0f0 beq.n 8007d52 <HAL_CRCEx_Polynomial_Set+0x26>
  17927. {
  17928. }
  17929. switch (PolyLength)
  17930. 8007d70: 687b ldr r3, [r7, #4]
  17931. 8007d72: 2b18 cmp r3, #24
  17932. 8007d74: d846 bhi.n 8007e04 <HAL_CRCEx_Polynomial_Set+0xd8>
  17933. 8007d76: a201 add r2, pc, #4 @ (adr r2, 8007d7c <HAL_CRCEx_Polynomial_Set+0x50>)
  17934. 8007d78: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  17935. 8007d7c: 08007e0b .word 0x08007e0b
  17936. 8007d80: 08007e05 .word 0x08007e05
  17937. 8007d84: 08007e05 .word 0x08007e05
  17938. 8007d88: 08007e05 .word 0x08007e05
  17939. 8007d8c: 08007e05 .word 0x08007e05
  17940. 8007d90: 08007e05 .word 0x08007e05
  17941. 8007d94: 08007e05 .word 0x08007e05
  17942. 8007d98: 08007e05 .word 0x08007e05
  17943. 8007d9c: 08007df9 .word 0x08007df9
  17944. 8007da0: 08007e05 .word 0x08007e05
  17945. 8007da4: 08007e05 .word 0x08007e05
  17946. 8007da8: 08007e05 .word 0x08007e05
  17947. 8007dac: 08007e05 .word 0x08007e05
  17948. 8007db0: 08007e05 .word 0x08007e05
  17949. 8007db4: 08007e05 .word 0x08007e05
  17950. 8007db8: 08007e05 .word 0x08007e05
  17951. 8007dbc: 08007ded .word 0x08007ded
  17952. 8007dc0: 08007e05 .word 0x08007e05
  17953. 8007dc4: 08007e05 .word 0x08007e05
  17954. 8007dc8: 08007e05 .word 0x08007e05
  17955. 8007dcc: 08007e05 .word 0x08007e05
  17956. 8007dd0: 08007e05 .word 0x08007e05
  17957. 8007dd4: 08007e05 .word 0x08007e05
  17958. 8007dd8: 08007e05 .word 0x08007e05
  17959. 8007ddc: 08007de1 .word 0x08007de1
  17960. {
  17961. case CRC_POLYLENGTH_7B:
  17962. if (msb >= HAL_CRC_LENGTH_7B)
  17963. 8007de0: 693b ldr r3, [r7, #16]
  17964. 8007de2: 2b06 cmp r3, #6
  17965. 8007de4: d913 bls.n 8007e0e <HAL_CRCEx_Polynomial_Set+0xe2>
  17966. {
  17967. status = HAL_ERROR;
  17968. 8007de6: 2301 movs r3, #1
  17969. 8007de8: 75fb strb r3, [r7, #23]
  17970. }
  17971. break;
  17972. 8007dea: e010 b.n 8007e0e <HAL_CRCEx_Polynomial_Set+0xe2>
  17973. case CRC_POLYLENGTH_8B:
  17974. if (msb >= HAL_CRC_LENGTH_8B)
  17975. 8007dec: 693b ldr r3, [r7, #16]
  17976. 8007dee: 2b07 cmp r3, #7
  17977. 8007df0: d90f bls.n 8007e12 <HAL_CRCEx_Polynomial_Set+0xe6>
  17978. {
  17979. status = HAL_ERROR;
  17980. 8007df2: 2301 movs r3, #1
  17981. 8007df4: 75fb strb r3, [r7, #23]
  17982. }
  17983. break;
  17984. 8007df6: e00c b.n 8007e12 <HAL_CRCEx_Polynomial_Set+0xe6>
  17985. case CRC_POLYLENGTH_16B:
  17986. if (msb >= HAL_CRC_LENGTH_16B)
  17987. 8007df8: 693b ldr r3, [r7, #16]
  17988. 8007dfa: 2b0f cmp r3, #15
  17989. 8007dfc: d90b bls.n 8007e16 <HAL_CRCEx_Polynomial_Set+0xea>
  17990. {
  17991. status = HAL_ERROR;
  17992. 8007dfe: 2301 movs r3, #1
  17993. 8007e00: 75fb strb r3, [r7, #23]
  17994. }
  17995. break;
  17996. 8007e02: e008 b.n 8007e16 <HAL_CRCEx_Polynomial_Set+0xea>
  17997. case CRC_POLYLENGTH_32B:
  17998. /* no polynomial definition vs. polynomial length issue possible */
  17999. break;
  18000. default:
  18001. status = HAL_ERROR;
  18002. 8007e04: 2301 movs r3, #1
  18003. 8007e06: 75fb strb r3, [r7, #23]
  18004. break;
  18005. 8007e08: e006 b.n 8007e18 <HAL_CRCEx_Polynomial_Set+0xec>
  18006. break;
  18007. 8007e0a: bf00 nop
  18008. 8007e0c: e004 b.n 8007e18 <HAL_CRCEx_Polynomial_Set+0xec>
  18009. break;
  18010. 8007e0e: bf00 nop
  18011. 8007e10: e002 b.n 8007e18 <HAL_CRCEx_Polynomial_Set+0xec>
  18012. break;
  18013. 8007e12: bf00 nop
  18014. 8007e14: e000 b.n 8007e18 <HAL_CRCEx_Polynomial_Set+0xec>
  18015. break;
  18016. 8007e16: bf00 nop
  18017. }
  18018. }
  18019. if (status == HAL_OK)
  18020. 8007e18: 7dfb ldrb r3, [r7, #23]
  18021. 8007e1a: 2b00 cmp r3, #0
  18022. 8007e1c: d10d bne.n 8007e3a <HAL_CRCEx_Polynomial_Set+0x10e>
  18023. {
  18024. /* set generating polynomial */
  18025. WRITE_REG(hcrc->Instance->POL, Pol);
  18026. 8007e1e: 68fb ldr r3, [r7, #12]
  18027. 8007e20: 681b ldr r3, [r3, #0]
  18028. 8007e22: 68ba ldr r2, [r7, #8]
  18029. 8007e24: 615a str r2, [r3, #20]
  18030. /* set generating polynomial size */
  18031. MODIFY_REG(hcrc->Instance->CR, CRC_CR_POLYSIZE, PolyLength);
  18032. 8007e26: 68fb ldr r3, [r7, #12]
  18033. 8007e28: 681b ldr r3, [r3, #0]
  18034. 8007e2a: 689b ldr r3, [r3, #8]
  18035. 8007e2c: f023 0118 bic.w r1, r3, #24
  18036. 8007e30: 68fb ldr r3, [r7, #12]
  18037. 8007e32: 681b ldr r3, [r3, #0]
  18038. 8007e34: 687a ldr r2, [r7, #4]
  18039. 8007e36: 430a orrs r2, r1
  18040. 8007e38: 609a str r2, [r3, #8]
  18041. }
  18042. /* Return function status */
  18043. return status;
  18044. 8007e3a: 7dfb ldrb r3, [r7, #23]
  18045. }
  18046. 8007e3c: 4618 mov r0, r3
  18047. 8007e3e: 371c adds r7, #28
  18048. 8007e40: 46bd mov sp, r7
  18049. 8007e42: f85d 7b04 ldr.w r7, [sp], #4
  18050. 8007e46: 4770 bx lr
  18051. 08007e48 <HAL_DAC_Init>:
  18052. * @param hdac pointer to a DAC_HandleTypeDef structure that contains
  18053. * the configuration information for the specified DAC.
  18054. * @retval HAL status
  18055. */
  18056. HAL_StatusTypeDef HAL_DAC_Init(DAC_HandleTypeDef *hdac)
  18057. {
  18058. 8007e48: b580 push {r7, lr}
  18059. 8007e4a: b082 sub sp, #8
  18060. 8007e4c: af00 add r7, sp, #0
  18061. 8007e4e: 6078 str r0, [r7, #4]
  18062. /* Check the DAC peripheral handle */
  18063. if (hdac == NULL)
  18064. 8007e50: 687b ldr r3, [r7, #4]
  18065. 8007e52: 2b00 cmp r3, #0
  18066. 8007e54: d101 bne.n 8007e5a <HAL_DAC_Init+0x12>
  18067. {
  18068. return HAL_ERROR;
  18069. 8007e56: 2301 movs r3, #1
  18070. 8007e58: e014 b.n 8007e84 <HAL_DAC_Init+0x3c>
  18071. }
  18072. /* Check the parameters */
  18073. assert_param(IS_DAC_ALL_INSTANCE(hdac->Instance));
  18074. if (hdac->State == HAL_DAC_STATE_RESET)
  18075. 8007e5a: 687b ldr r3, [r7, #4]
  18076. 8007e5c: 791b ldrb r3, [r3, #4]
  18077. 8007e5e: b2db uxtb r3, r3
  18078. 8007e60: 2b00 cmp r3, #0
  18079. 8007e62: d105 bne.n 8007e70 <HAL_DAC_Init+0x28>
  18080. hdac->MspInitCallback = HAL_DAC_MspInit;
  18081. }
  18082. #endif /* USE_HAL_DAC_REGISTER_CALLBACKS */
  18083. /* Allocate lock resource and initialize it */
  18084. hdac->Lock = HAL_UNLOCKED;
  18085. 8007e64: 687b ldr r3, [r7, #4]
  18086. 8007e66: 2200 movs r2, #0
  18087. 8007e68: 715a strb r2, [r3, #5]
  18088. #if (USE_HAL_DAC_REGISTER_CALLBACKS == 1)
  18089. /* Init the low level hardware */
  18090. hdac->MspInitCallback(hdac);
  18091. #else
  18092. /* Init the low level hardware */
  18093. HAL_DAC_MspInit(hdac);
  18094. 8007e6a: 6878 ldr r0, [r7, #4]
  18095. 8007e6c: f7fc f8d6 bl 800401c <HAL_DAC_MspInit>
  18096. #endif /* USE_HAL_DAC_REGISTER_CALLBACKS */
  18097. }
  18098. /* Initialize the DAC state*/
  18099. hdac->State = HAL_DAC_STATE_BUSY;
  18100. 8007e70: 687b ldr r3, [r7, #4]
  18101. 8007e72: 2202 movs r2, #2
  18102. 8007e74: 711a strb r2, [r3, #4]
  18103. /* Set DAC error code to none */
  18104. hdac->ErrorCode = HAL_DAC_ERROR_NONE;
  18105. 8007e76: 687b ldr r3, [r7, #4]
  18106. 8007e78: 2200 movs r2, #0
  18107. 8007e7a: 611a str r2, [r3, #16]
  18108. /* Initialize the DAC state*/
  18109. hdac->State = HAL_DAC_STATE_READY;
  18110. 8007e7c: 687b ldr r3, [r7, #4]
  18111. 8007e7e: 2201 movs r2, #1
  18112. 8007e80: 711a strb r2, [r3, #4]
  18113. /* Return function status */
  18114. return HAL_OK;
  18115. 8007e82: 2300 movs r3, #0
  18116. }
  18117. 8007e84: 4618 mov r0, r3
  18118. 8007e86: 3708 adds r7, #8
  18119. 8007e88: 46bd mov sp, r7
  18120. 8007e8a: bd80 pop {r7, pc}
  18121. 08007e8c <HAL_DAC_Start>:
  18122. * @arg DAC_CHANNEL_1: DAC Channel1 selected
  18123. * @arg DAC_CHANNEL_2: DAC Channel2 selected
  18124. * @retval HAL status
  18125. */
  18126. HAL_StatusTypeDef HAL_DAC_Start(DAC_HandleTypeDef *hdac, uint32_t Channel)
  18127. {
  18128. 8007e8c: b480 push {r7}
  18129. 8007e8e: b083 sub sp, #12
  18130. 8007e90: af00 add r7, sp, #0
  18131. 8007e92: 6078 str r0, [r7, #4]
  18132. 8007e94: 6039 str r1, [r7, #0]
  18133. /* Check the DAC peripheral handle */
  18134. if (hdac == NULL)
  18135. 8007e96: 687b ldr r3, [r7, #4]
  18136. 8007e98: 2b00 cmp r3, #0
  18137. 8007e9a: d101 bne.n 8007ea0 <HAL_DAC_Start+0x14>
  18138. {
  18139. return HAL_ERROR;
  18140. 8007e9c: 2301 movs r3, #1
  18141. 8007e9e: e046 b.n 8007f2e <HAL_DAC_Start+0xa2>
  18142. /* Check the parameters */
  18143. assert_param(IS_DAC_CHANNEL(Channel));
  18144. /* Process locked */
  18145. __HAL_LOCK(hdac);
  18146. 8007ea0: 687b ldr r3, [r7, #4]
  18147. 8007ea2: 795b ldrb r3, [r3, #5]
  18148. 8007ea4: 2b01 cmp r3, #1
  18149. 8007ea6: d101 bne.n 8007eac <HAL_DAC_Start+0x20>
  18150. 8007ea8: 2302 movs r3, #2
  18151. 8007eaa: e040 b.n 8007f2e <HAL_DAC_Start+0xa2>
  18152. 8007eac: 687b ldr r3, [r7, #4]
  18153. 8007eae: 2201 movs r2, #1
  18154. 8007eb0: 715a strb r2, [r3, #5]
  18155. /* Change DAC state */
  18156. hdac->State = HAL_DAC_STATE_BUSY;
  18157. 8007eb2: 687b ldr r3, [r7, #4]
  18158. 8007eb4: 2202 movs r2, #2
  18159. 8007eb6: 711a strb r2, [r3, #4]
  18160. /* Enable the Peripheral */
  18161. __HAL_DAC_ENABLE(hdac, Channel);
  18162. 8007eb8: 687b ldr r3, [r7, #4]
  18163. 8007eba: 681b ldr r3, [r3, #0]
  18164. 8007ebc: 6819 ldr r1, [r3, #0]
  18165. 8007ebe: 683b ldr r3, [r7, #0]
  18166. 8007ec0: f003 0310 and.w r3, r3, #16
  18167. 8007ec4: 2201 movs r2, #1
  18168. 8007ec6: 409a lsls r2, r3
  18169. 8007ec8: 687b ldr r3, [r7, #4]
  18170. 8007eca: 681b ldr r3, [r3, #0]
  18171. 8007ecc: 430a orrs r2, r1
  18172. 8007ece: 601a str r2, [r3, #0]
  18173. if (Channel == DAC_CHANNEL_1)
  18174. 8007ed0: 683b ldr r3, [r7, #0]
  18175. 8007ed2: 2b00 cmp r3, #0
  18176. 8007ed4: d10f bne.n 8007ef6 <HAL_DAC_Start+0x6a>
  18177. {
  18178. /* Check if software trigger enabled */
  18179. if ((hdac->Instance->CR & (DAC_CR_TEN1 | DAC_CR_TSEL1)) == DAC_TRIGGER_SOFTWARE)
  18180. 8007ed6: 687b ldr r3, [r7, #4]
  18181. 8007ed8: 681b ldr r3, [r3, #0]
  18182. 8007eda: 681b ldr r3, [r3, #0]
  18183. 8007edc: f003 033e and.w r3, r3, #62 @ 0x3e
  18184. 8007ee0: 2b02 cmp r3, #2
  18185. 8007ee2: d11d bne.n 8007f20 <HAL_DAC_Start+0x94>
  18186. {
  18187. /* Enable the selected DAC software conversion */
  18188. SET_BIT(hdac->Instance->SWTRIGR, DAC_SWTRIGR_SWTRIG1);
  18189. 8007ee4: 687b ldr r3, [r7, #4]
  18190. 8007ee6: 681b ldr r3, [r3, #0]
  18191. 8007ee8: 685a ldr r2, [r3, #4]
  18192. 8007eea: 687b ldr r3, [r7, #4]
  18193. 8007eec: 681b ldr r3, [r3, #0]
  18194. 8007eee: f042 0201 orr.w r2, r2, #1
  18195. 8007ef2: 605a str r2, [r3, #4]
  18196. 8007ef4: e014 b.n 8007f20 <HAL_DAC_Start+0x94>
  18197. }
  18198. else
  18199. {
  18200. /* Check if software trigger enabled */
  18201. if ((hdac->Instance->CR & (DAC_CR_TEN2 | DAC_CR_TSEL2)) == (DAC_TRIGGER_SOFTWARE << (Channel & 0x10UL)))
  18202. 8007ef6: 687b ldr r3, [r7, #4]
  18203. 8007ef8: 681b ldr r3, [r3, #0]
  18204. 8007efa: 681b ldr r3, [r3, #0]
  18205. 8007efc: f403 1278 and.w r2, r3, #4063232 @ 0x3e0000
  18206. 8007f00: 683b ldr r3, [r7, #0]
  18207. 8007f02: f003 0310 and.w r3, r3, #16
  18208. 8007f06: 2102 movs r1, #2
  18209. 8007f08: fa01 f303 lsl.w r3, r1, r3
  18210. 8007f0c: 429a cmp r2, r3
  18211. 8007f0e: d107 bne.n 8007f20 <HAL_DAC_Start+0x94>
  18212. {
  18213. /* Enable the selected DAC software conversion*/
  18214. SET_BIT(hdac->Instance->SWTRIGR, DAC_SWTRIGR_SWTRIG2);
  18215. 8007f10: 687b ldr r3, [r7, #4]
  18216. 8007f12: 681b ldr r3, [r3, #0]
  18217. 8007f14: 685a ldr r2, [r3, #4]
  18218. 8007f16: 687b ldr r3, [r7, #4]
  18219. 8007f18: 681b ldr r3, [r3, #0]
  18220. 8007f1a: f042 0202 orr.w r2, r2, #2
  18221. 8007f1e: 605a str r2, [r3, #4]
  18222. }
  18223. }
  18224. /* Change DAC state */
  18225. hdac->State = HAL_DAC_STATE_READY;
  18226. 8007f20: 687b ldr r3, [r7, #4]
  18227. 8007f22: 2201 movs r2, #1
  18228. 8007f24: 711a strb r2, [r3, #4]
  18229. /* Process unlocked */
  18230. __HAL_UNLOCK(hdac);
  18231. 8007f26: 687b ldr r3, [r7, #4]
  18232. 8007f28: 2200 movs r2, #0
  18233. 8007f2a: 715a strb r2, [r3, #5]
  18234. /* Return function status */
  18235. return HAL_OK;
  18236. 8007f2c: 2300 movs r3, #0
  18237. }
  18238. 8007f2e: 4618 mov r0, r3
  18239. 8007f30: 370c adds r7, #12
  18240. 8007f32: 46bd mov sp, r7
  18241. 8007f34: f85d 7b04 ldr.w r7, [sp], #4
  18242. 8007f38: 4770 bx lr
  18243. 08007f3a <HAL_DAC_IRQHandler>:
  18244. * @param hdac pointer to a DAC_HandleTypeDef structure that contains
  18245. * the configuration information for the specified DAC.
  18246. * @retval None
  18247. */
  18248. void HAL_DAC_IRQHandler(DAC_HandleTypeDef *hdac)
  18249. {
  18250. 8007f3a: b580 push {r7, lr}
  18251. 8007f3c: b084 sub sp, #16
  18252. 8007f3e: af00 add r7, sp, #0
  18253. 8007f40: 6078 str r0, [r7, #4]
  18254. uint32_t itsource = hdac->Instance->CR;
  18255. 8007f42: 687b ldr r3, [r7, #4]
  18256. 8007f44: 681b ldr r3, [r3, #0]
  18257. 8007f46: 681b ldr r3, [r3, #0]
  18258. 8007f48: 60fb str r3, [r7, #12]
  18259. uint32_t itflag = hdac->Instance->SR;
  18260. 8007f4a: 687b ldr r3, [r7, #4]
  18261. 8007f4c: 681b ldr r3, [r3, #0]
  18262. 8007f4e: 6b5b ldr r3, [r3, #52] @ 0x34
  18263. 8007f50: 60bb str r3, [r7, #8]
  18264. if ((itsource & DAC_IT_DMAUDR1) == DAC_IT_DMAUDR1)
  18265. 8007f52: 68fb ldr r3, [r7, #12]
  18266. 8007f54: f403 5300 and.w r3, r3, #8192 @ 0x2000
  18267. 8007f58: 2b00 cmp r3, #0
  18268. 8007f5a: d01d beq.n 8007f98 <HAL_DAC_IRQHandler+0x5e>
  18269. {
  18270. /* Check underrun flag of DAC channel 1 */
  18271. if ((itflag & DAC_FLAG_DMAUDR1) == DAC_FLAG_DMAUDR1)
  18272. 8007f5c: 68bb ldr r3, [r7, #8]
  18273. 8007f5e: f403 5300 and.w r3, r3, #8192 @ 0x2000
  18274. 8007f62: 2b00 cmp r3, #0
  18275. 8007f64: d018 beq.n 8007f98 <HAL_DAC_IRQHandler+0x5e>
  18276. {
  18277. /* Change DAC state to error state */
  18278. hdac->State = HAL_DAC_STATE_ERROR;
  18279. 8007f66: 687b ldr r3, [r7, #4]
  18280. 8007f68: 2204 movs r2, #4
  18281. 8007f6a: 711a strb r2, [r3, #4]
  18282. /* Set DAC error code to channel1 DMA underrun error */
  18283. SET_BIT(hdac->ErrorCode, HAL_DAC_ERROR_DMAUNDERRUNCH1);
  18284. 8007f6c: 687b ldr r3, [r7, #4]
  18285. 8007f6e: 691b ldr r3, [r3, #16]
  18286. 8007f70: f043 0201 orr.w r2, r3, #1
  18287. 8007f74: 687b ldr r3, [r7, #4]
  18288. 8007f76: 611a str r2, [r3, #16]
  18289. /* Clear the underrun flag */
  18290. __HAL_DAC_CLEAR_FLAG(hdac, DAC_FLAG_DMAUDR1);
  18291. 8007f78: 687b ldr r3, [r7, #4]
  18292. 8007f7a: 681b ldr r3, [r3, #0]
  18293. 8007f7c: f44f 5200 mov.w r2, #8192 @ 0x2000
  18294. 8007f80: 635a str r2, [r3, #52] @ 0x34
  18295. /* Disable the selected DAC channel1 DMA request */
  18296. __HAL_DAC_DISABLE_IT(hdac, DAC_CR_DMAEN1);
  18297. 8007f82: 687b ldr r3, [r7, #4]
  18298. 8007f84: 681b ldr r3, [r3, #0]
  18299. 8007f86: 681a ldr r2, [r3, #0]
  18300. 8007f88: 687b ldr r3, [r7, #4]
  18301. 8007f8a: 681b ldr r3, [r3, #0]
  18302. 8007f8c: f422 5280 bic.w r2, r2, #4096 @ 0x1000
  18303. 8007f90: 601a str r2, [r3, #0]
  18304. /* Error callback */
  18305. #if (USE_HAL_DAC_REGISTER_CALLBACKS == 1)
  18306. hdac->DMAUnderrunCallbackCh1(hdac);
  18307. #else
  18308. HAL_DAC_DMAUnderrunCallbackCh1(hdac);
  18309. 8007f92: 6878 ldr r0, [r7, #4]
  18310. 8007f94: f000 f851 bl 800803a <HAL_DAC_DMAUnderrunCallbackCh1>
  18311. #endif /* USE_HAL_DAC_REGISTER_CALLBACKS */
  18312. }
  18313. }
  18314. if ((itsource & DAC_IT_DMAUDR2) == DAC_IT_DMAUDR2)
  18315. 8007f98: 68fb ldr r3, [r7, #12]
  18316. 8007f9a: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  18317. 8007f9e: 2b00 cmp r3, #0
  18318. 8007fa0: d01d beq.n 8007fde <HAL_DAC_IRQHandler+0xa4>
  18319. {
  18320. /* Check underrun flag of DAC channel 2 */
  18321. if ((itflag & DAC_FLAG_DMAUDR2) == DAC_FLAG_DMAUDR2)
  18322. 8007fa2: 68bb ldr r3, [r7, #8]
  18323. 8007fa4: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  18324. 8007fa8: 2b00 cmp r3, #0
  18325. 8007faa: d018 beq.n 8007fde <HAL_DAC_IRQHandler+0xa4>
  18326. {
  18327. /* Change DAC state to error state */
  18328. hdac->State = HAL_DAC_STATE_ERROR;
  18329. 8007fac: 687b ldr r3, [r7, #4]
  18330. 8007fae: 2204 movs r2, #4
  18331. 8007fb0: 711a strb r2, [r3, #4]
  18332. /* Set DAC error code to channel2 DMA underrun error */
  18333. SET_BIT(hdac->ErrorCode, HAL_DAC_ERROR_DMAUNDERRUNCH2);
  18334. 8007fb2: 687b ldr r3, [r7, #4]
  18335. 8007fb4: 691b ldr r3, [r3, #16]
  18336. 8007fb6: f043 0202 orr.w r2, r3, #2
  18337. 8007fba: 687b ldr r3, [r7, #4]
  18338. 8007fbc: 611a str r2, [r3, #16]
  18339. /* Clear the underrun flag */
  18340. __HAL_DAC_CLEAR_FLAG(hdac, DAC_FLAG_DMAUDR2);
  18341. 8007fbe: 687b ldr r3, [r7, #4]
  18342. 8007fc0: 681b ldr r3, [r3, #0]
  18343. 8007fc2: f04f 5200 mov.w r2, #536870912 @ 0x20000000
  18344. 8007fc6: 635a str r2, [r3, #52] @ 0x34
  18345. /* Disable the selected DAC channel2 DMA request */
  18346. __HAL_DAC_DISABLE_IT(hdac, DAC_CR_DMAEN2);
  18347. 8007fc8: 687b ldr r3, [r7, #4]
  18348. 8007fca: 681b ldr r3, [r3, #0]
  18349. 8007fcc: 681a ldr r2, [r3, #0]
  18350. 8007fce: 687b ldr r3, [r7, #4]
  18351. 8007fd0: 681b ldr r3, [r3, #0]
  18352. 8007fd2: f022 5280 bic.w r2, r2, #268435456 @ 0x10000000
  18353. 8007fd6: 601a str r2, [r3, #0]
  18354. /* Error callback */
  18355. #if (USE_HAL_DAC_REGISTER_CALLBACKS == 1)
  18356. hdac->DMAUnderrunCallbackCh2(hdac);
  18357. #else
  18358. HAL_DACEx_DMAUnderrunCallbackCh2(hdac);
  18359. 8007fd8: 6878 ldr r0, [r7, #4]
  18360. 8007fda: f000 f97b bl 80082d4 <HAL_DACEx_DMAUnderrunCallbackCh2>
  18361. #endif /* USE_HAL_DAC_REGISTER_CALLBACKS */
  18362. }
  18363. }
  18364. }
  18365. 8007fde: bf00 nop
  18366. 8007fe0: 3710 adds r7, #16
  18367. 8007fe2: 46bd mov sp, r7
  18368. 8007fe4: bd80 pop {r7, pc}
  18369. 08007fe6 <HAL_DAC_SetValue>:
  18370. * @arg DAC_ALIGN_12B_R: 12bit right data alignment selected
  18371. * @param Data Data to be loaded in the selected data holding register.
  18372. * @retval HAL status
  18373. */
  18374. HAL_StatusTypeDef HAL_DAC_SetValue(DAC_HandleTypeDef *hdac, uint32_t Channel, uint32_t Alignment, uint32_t Data)
  18375. {
  18376. 8007fe6: b480 push {r7}
  18377. 8007fe8: b087 sub sp, #28
  18378. 8007fea: af00 add r7, sp, #0
  18379. 8007fec: 60f8 str r0, [r7, #12]
  18380. 8007fee: 60b9 str r1, [r7, #8]
  18381. 8007ff0: 607a str r2, [r7, #4]
  18382. 8007ff2: 603b str r3, [r7, #0]
  18383. __IO uint32_t tmp = 0UL;
  18384. 8007ff4: 2300 movs r3, #0
  18385. 8007ff6: 617b str r3, [r7, #20]
  18386. /* Check the DAC peripheral handle */
  18387. if (hdac == NULL)
  18388. 8007ff8: 68fb ldr r3, [r7, #12]
  18389. 8007ffa: 2b00 cmp r3, #0
  18390. 8007ffc: d101 bne.n 8008002 <HAL_DAC_SetValue+0x1c>
  18391. {
  18392. return HAL_ERROR;
  18393. 8007ffe: 2301 movs r3, #1
  18394. 8008000: e015 b.n 800802e <HAL_DAC_SetValue+0x48>
  18395. /* Check the parameters */
  18396. assert_param(IS_DAC_CHANNEL(Channel));
  18397. assert_param(IS_DAC_ALIGN(Alignment));
  18398. assert_param(IS_DAC_DATA(Data));
  18399. tmp = (uint32_t)hdac->Instance;
  18400. 8008002: 68fb ldr r3, [r7, #12]
  18401. 8008004: 681b ldr r3, [r3, #0]
  18402. 8008006: 617b str r3, [r7, #20]
  18403. if (Channel == DAC_CHANNEL_1)
  18404. 8008008: 68bb ldr r3, [r7, #8]
  18405. 800800a: 2b00 cmp r3, #0
  18406. 800800c: d105 bne.n 800801a <HAL_DAC_SetValue+0x34>
  18407. {
  18408. tmp += DAC_DHR12R1_ALIGNMENT(Alignment);
  18409. 800800e: 697a ldr r2, [r7, #20]
  18410. 8008010: 687b ldr r3, [r7, #4]
  18411. 8008012: 4413 add r3, r2
  18412. 8008014: 3308 adds r3, #8
  18413. 8008016: 617b str r3, [r7, #20]
  18414. 8008018: e004 b.n 8008024 <HAL_DAC_SetValue+0x3e>
  18415. }
  18416. else
  18417. {
  18418. tmp += DAC_DHR12R2_ALIGNMENT(Alignment);
  18419. 800801a: 697a ldr r2, [r7, #20]
  18420. 800801c: 687b ldr r3, [r7, #4]
  18421. 800801e: 4413 add r3, r2
  18422. 8008020: 3314 adds r3, #20
  18423. 8008022: 617b str r3, [r7, #20]
  18424. }
  18425. /* Set the DAC channel selected data holding register */
  18426. *(__IO uint32_t *) tmp = Data;
  18427. 8008024: 697b ldr r3, [r7, #20]
  18428. 8008026: 461a mov r2, r3
  18429. 8008028: 683b ldr r3, [r7, #0]
  18430. 800802a: 6013 str r3, [r2, #0]
  18431. /* Return function status */
  18432. return HAL_OK;
  18433. 800802c: 2300 movs r3, #0
  18434. }
  18435. 800802e: 4618 mov r0, r3
  18436. 8008030: 371c adds r7, #28
  18437. 8008032: 46bd mov sp, r7
  18438. 8008034: f85d 7b04 ldr.w r7, [sp], #4
  18439. 8008038: 4770 bx lr
  18440. 0800803a <HAL_DAC_DMAUnderrunCallbackCh1>:
  18441. * @param hdac pointer to a DAC_HandleTypeDef structure that contains
  18442. * the configuration information for the specified DAC.
  18443. * @retval None
  18444. */
  18445. __weak void HAL_DAC_DMAUnderrunCallbackCh1(DAC_HandleTypeDef *hdac)
  18446. {
  18447. 800803a: b480 push {r7}
  18448. 800803c: b083 sub sp, #12
  18449. 800803e: af00 add r7, sp, #0
  18450. 8008040: 6078 str r0, [r7, #4]
  18451. UNUSED(hdac);
  18452. /* NOTE : This function should not be modified, when the callback is needed,
  18453. the HAL_DAC_DMAUnderrunCallbackCh1 could be implemented in the user file
  18454. */
  18455. }
  18456. 8008042: bf00 nop
  18457. 8008044: 370c adds r7, #12
  18458. 8008046: 46bd mov sp, r7
  18459. 8008048: f85d 7b04 ldr.w r7, [sp], #4
  18460. 800804c: 4770 bx lr
  18461. ...
  18462. 08008050 <HAL_DAC_ConfigChannel>:
  18463. * @arg DAC_CHANNEL_2: DAC Channel2 selected
  18464. * @retval HAL status
  18465. */
  18466. HAL_StatusTypeDef HAL_DAC_ConfigChannel(DAC_HandleTypeDef *hdac,
  18467. const DAC_ChannelConfTypeDef *sConfig, uint32_t Channel)
  18468. {
  18469. 8008050: b580 push {r7, lr}
  18470. 8008052: b08a sub sp, #40 @ 0x28
  18471. 8008054: af00 add r7, sp, #0
  18472. 8008056: 60f8 str r0, [r7, #12]
  18473. 8008058: 60b9 str r1, [r7, #8]
  18474. 800805a: 607a str r2, [r7, #4]
  18475. HAL_StatusTypeDef status = HAL_OK;
  18476. 800805c: 2300 movs r3, #0
  18477. 800805e: f887 3023 strb.w r3, [r7, #35] @ 0x23
  18478. uint32_t tmpreg2;
  18479. uint32_t tickstart;
  18480. uint32_t connectOnChip;
  18481. /* Check the DAC peripheral handle and channel configuration struct */
  18482. if ((hdac == NULL) || (sConfig == NULL))
  18483. 8008062: 68fb ldr r3, [r7, #12]
  18484. 8008064: 2b00 cmp r3, #0
  18485. 8008066: d002 beq.n 800806e <HAL_DAC_ConfigChannel+0x1e>
  18486. 8008068: 68bb ldr r3, [r7, #8]
  18487. 800806a: 2b00 cmp r3, #0
  18488. 800806c: d101 bne.n 8008072 <HAL_DAC_ConfigChannel+0x22>
  18489. {
  18490. return HAL_ERROR;
  18491. 800806e: 2301 movs r3, #1
  18492. 8008070: e12a b.n 80082c8 <HAL_DAC_ConfigChannel+0x278>
  18493. assert_param(IS_DAC_REFRESHTIME(sConfig->DAC_SampleAndHoldConfig.DAC_RefreshTime));
  18494. }
  18495. assert_param(IS_DAC_CHANNEL(Channel));
  18496. /* Process locked */
  18497. __HAL_LOCK(hdac);
  18498. 8008072: 68fb ldr r3, [r7, #12]
  18499. 8008074: 795b ldrb r3, [r3, #5]
  18500. 8008076: 2b01 cmp r3, #1
  18501. 8008078: d101 bne.n 800807e <HAL_DAC_ConfigChannel+0x2e>
  18502. 800807a: 2302 movs r3, #2
  18503. 800807c: e124 b.n 80082c8 <HAL_DAC_ConfigChannel+0x278>
  18504. 800807e: 68fb ldr r3, [r7, #12]
  18505. 8008080: 2201 movs r2, #1
  18506. 8008082: 715a strb r2, [r3, #5]
  18507. /* Change DAC state */
  18508. hdac->State = HAL_DAC_STATE_BUSY;
  18509. 8008084: 68fb ldr r3, [r7, #12]
  18510. 8008086: 2202 movs r2, #2
  18511. 8008088: 711a strb r2, [r3, #4]
  18512. /* Sample and hold configuration */
  18513. if (sConfig->DAC_SampleAndHold == DAC_SAMPLEANDHOLD_ENABLE)
  18514. 800808a: 68bb ldr r3, [r7, #8]
  18515. 800808c: 681b ldr r3, [r3, #0]
  18516. 800808e: 2b04 cmp r3, #4
  18517. 8008090: d17a bne.n 8008188 <HAL_DAC_ConfigChannel+0x138>
  18518. {
  18519. /* Get timeout */
  18520. tickstart = HAL_GetTick();
  18521. 8008092: f7fd fd8d bl 8005bb0 <HAL_GetTick>
  18522. 8008096: 61f8 str r0, [r7, #28]
  18523. if (Channel == DAC_CHANNEL_1)
  18524. 8008098: 687b ldr r3, [r7, #4]
  18525. 800809a: 2b00 cmp r3, #0
  18526. 800809c: d13d bne.n 800811a <HAL_DAC_ConfigChannel+0xca>
  18527. {
  18528. /* SHSR1 can be written when BWST1 is cleared */
  18529. while (((hdac->Instance->SR) & DAC_SR_BWST1) != 0UL)
  18530. 800809e: e018 b.n 80080d2 <HAL_DAC_ConfigChannel+0x82>
  18531. {
  18532. /* Check for the Timeout */
  18533. if ((HAL_GetTick() - tickstart) > TIMEOUT_DAC_CALIBCONFIG)
  18534. 80080a0: f7fd fd86 bl 8005bb0 <HAL_GetTick>
  18535. 80080a4: 4602 mov r2, r0
  18536. 80080a6: 69fb ldr r3, [r7, #28]
  18537. 80080a8: 1ad3 subs r3, r2, r3
  18538. 80080aa: 2b01 cmp r3, #1
  18539. 80080ac: d911 bls.n 80080d2 <HAL_DAC_ConfigChannel+0x82>
  18540. {
  18541. /* New check to avoid false timeout detection in case of preemption */
  18542. if (((hdac->Instance->SR) & DAC_SR_BWST1) != 0UL)
  18543. 80080ae: 68fb ldr r3, [r7, #12]
  18544. 80080b0: 681b ldr r3, [r3, #0]
  18545. 80080b2: 6b5a ldr r2, [r3, #52] @ 0x34
  18546. 80080b4: 4b86 ldr r3, [pc, #536] @ (80082d0 <HAL_DAC_ConfigChannel+0x280>)
  18547. 80080b6: 4013 ands r3, r2
  18548. 80080b8: 2b00 cmp r3, #0
  18549. 80080ba: d00a beq.n 80080d2 <HAL_DAC_ConfigChannel+0x82>
  18550. {
  18551. /* Update error code */
  18552. SET_BIT(hdac->ErrorCode, HAL_DAC_ERROR_TIMEOUT);
  18553. 80080bc: 68fb ldr r3, [r7, #12]
  18554. 80080be: 691b ldr r3, [r3, #16]
  18555. 80080c0: f043 0208 orr.w r2, r3, #8
  18556. 80080c4: 68fb ldr r3, [r7, #12]
  18557. 80080c6: 611a str r2, [r3, #16]
  18558. /* Change the DMA state */
  18559. hdac->State = HAL_DAC_STATE_TIMEOUT;
  18560. 80080c8: 68fb ldr r3, [r7, #12]
  18561. 80080ca: 2203 movs r2, #3
  18562. 80080cc: 711a strb r2, [r3, #4]
  18563. return HAL_TIMEOUT;
  18564. 80080ce: 2303 movs r3, #3
  18565. 80080d0: e0fa b.n 80082c8 <HAL_DAC_ConfigChannel+0x278>
  18566. while (((hdac->Instance->SR) & DAC_SR_BWST1) != 0UL)
  18567. 80080d2: 68fb ldr r3, [r7, #12]
  18568. 80080d4: 681b ldr r3, [r3, #0]
  18569. 80080d6: 6b5a ldr r2, [r3, #52] @ 0x34
  18570. 80080d8: 4b7d ldr r3, [pc, #500] @ (80082d0 <HAL_DAC_ConfigChannel+0x280>)
  18571. 80080da: 4013 ands r3, r2
  18572. 80080dc: 2b00 cmp r3, #0
  18573. 80080de: d1df bne.n 80080a0 <HAL_DAC_ConfigChannel+0x50>
  18574. }
  18575. }
  18576. }
  18577. hdac->Instance->SHSR1 = sConfig->DAC_SampleAndHoldConfig.DAC_SampleTime;
  18578. 80080e0: 68fb ldr r3, [r7, #12]
  18579. 80080e2: 681b ldr r3, [r3, #0]
  18580. 80080e4: 68ba ldr r2, [r7, #8]
  18581. 80080e6: 6992 ldr r2, [r2, #24]
  18582. 80080e8: 641a str r2, [r3, #64] @ 0x40
  18583. 80080ea: e020 b.n 800812e <HAL_DAC_ConfigChannel+0xde>
  18584. {
  18585. /* SHSR2 can be written when BWST2 is cleared */
  18586. while (((hdac->Instance->SR) & DAC_SR_BWST2) != 0UL)
  18587. {
  18588. /* Check for the Timeout */
  18589. if ((HAL_GetTick() - tickstart) > TIMEOUT_DAC_CALIBCONFIG)
  18590. 80080ec: f7fd fd60 bl 8005bb0 <HAL_GetTick>
  18591. 80080f0: 4602 mov r2, r0
  18592. 80080f2: 69fb ldr r3, [r7, #28]
  18593. 80080f4: 1ad3 subs r3, r2, r3
  18594. 80080f6: 2b01 cmp r3, #1
  18595. 80080f8: d90f bls.n 800811a <HAL_DAC_ConfigChannel+0xca>
  18596. {
  18597. /* New check to avoid false timeout detection in case of preemption */
  18598. if (((hdac->Instance->SR) & DAC_SR_BWST2) != 0UL)
  18599. 80080fa: 68fb ldr r3, [r7, #12]
  18600. 80080fc: 681b ldr r3, [r3, #0]
  18601. 80080fe: 6b5b ldr r3, [r3, #52] @ 0x34
  18602. 8008100: 2b00 cmp r3, #0
  18603. 8008102: da0a bge.n 800811a <HAL_DAC_ConfigChannel+0xca>
  18604. {
  18605. /* Update error code */
  18606. SET_BIT(hdac->ErrorCode, HAL_DAC_ERROR_TIMEOUT);
  18607. 8008104: 68fb ldr r3, [r7, #12]
  18608. 8008106: 691b ldr r3, [r3, #16]
  18609. 8008108: f043 0208 orr.w r2, r3, #8
  18610. 800810c: 68fb ldr r3, [r7, #12]
  18611. 800810e: 611a str r2, [r3, #16]
  18612. /* Change the DMA state */
  18613. hdac->State = HAL_DAC_STATE_TIMEOUT;
  18614. 8008110: 68fb ldr r3, [r7, #12]
  18615. 8008112: 2203 movs r2, #3
  18616. 8008114: 711a strb r2, [r3, #4]
  18617. return HAL_TIMEOUT;
  18618. 8008116: 2303 movs r3, #3
  18619. 8008118: e0d6 b.n 80082c8 <HAL_DAC_ConfigChannel+0x278>
  18620. while (((hdac->Instance->SR) & DAC_SR_BWST2) != 0UL)
  18621. 800811a: 68fb ldr r3, [r7, #12]
  18622. 800811c: 681b ldr r3, [r3, #0]
  18623. 800811e: 6b5b ldr r3, [r3, #52] @ 0x34
  18624. 8008120: 2b00 cmp r3, #0
  18625. 8008122: dbe3 blt.n 80080ec <HAL_DAC_ConfigChannel+0x9c>
  18626. }
  18627. }
  18628. }
  18629. hdac->Instance->SHSR2 = sConfig->DAC_SampleAndHoldConfig.DAC_SampleTime;
  18630. 8008124: 68fb ldr r3, [r7, #12]
  18631. 8008126: 681b ldr r3, [r3, #0]
  18632. 8008128: 68ba ldr r2, [r7, #8]
  18633. 800812a: 6992 ldr r2, [r2, #24]
  18634. 800812c: 645a str r2, [r3, #68] @ 0x44
  18635. }
  18636. /* HoldTime */
  18637. MODIFY_REG(hdac->Instance->SHHR, DAC_SHHR_THOLD1 << (Channel & 0x10UL),
  18638. 800812e: 68fb ldr r3, [r7, #12]
  18639. 8008130: 681b ldr r3, [r3, #0]
  18640. 8008132: 6c9a ldr r2, [r3, #72] @ 0x48
  18641. 8008134: 687b ldr r3, [r7, #4]
  18642. 8008136: f003 0310 and.w r3, r3, #16
  18643. 800813a: f240 31ff movw r1, #1023 @ 0x3ff
  18644. 800813e: fa01 f303 lsl.w r3, r1, r3
  18645. 8008142: 43db mvns r3, r3
  18646. 8008144: ea02 0103 and.w r1, r2, r3
  18647. 8008148: 68bb ldr r3, [r7, #8]
  18648. 800814a: 69da ldr r2, [r3, #28]
  18649. 800814c: 687b ldr r3, [r7, #4]
  18650. 800814e: f003 0310 and.w r3, r3, #16
  18651. 8008152: 409a lsls r2, r3
  18652. 8008154: 68fb ldr r3, [r7, #12]
  18653. 8008156: 681b ldr r3, [r3, #0]
  18654. 8008158: 430a orrs r2, r1
  18655. 800815a: 649a str r2, [r3, #72] @ 0x48
  18656. (sConfig->DAC_SampleAndHoldConfig.DAC_HoldTime) << (Channel & 0x10UL));
  18657. /* RefreshTime */
  18658. MODIFY_REG(hdac->Instance->SHRR, DAC_SHRR_TREFRESH1 << (Channel & 0x10UL),
  18659. 800815c: 68fb ldr r3, [r7, #12]
  18660. 800815e: 681b ldr r3, [r3, #0]
  18661. 8008160: 6cda ldr r2, [r3, #76] @ 0x4c
  18662. 8008162: 687b ldr r3, [r7, #4]
  18663. 8008164: f003 0310 and.w r3, r3, #16
  18664. 8008168: 21ff movs r1, #255 @ 0xff
  18665. 800816a: fa01 f303 lsl.w r3, r1, r3
  18666. 800816e: 43db mvns r3, r3
  18667. 8008170: ea02 0103 and.w r1, r2, r3
  18668. 8008174: 68bb ldr r3, [r7, #8]
  18669. 8008176: 6a1a ldr r2, [r3, #32]
  18670. 8008178: 687b ldr r3, [r7, #4]
  18671. 800817a: f003 0310 and.w r3, r3, #16
  18672. 800817e: 409a lsls r2, r3
  18673. 8008180: 68fb ldr r3, [r7, #12]
  18674. 8008182: 681b ldr r3, [r3, #0]
  18675. 8008184: 430a orrs r2, r1
  18676. 8008186: 64da str r2, [r3, #76] @ 0x4c
  18677. (sConfig->DAC_SampleAndHoldConfig.DAC_RefreshTime) << (Channel & 0x10UL));
  18678. }
  18679. if (sConfig->DAC_UserTrimming == DAC_TRIMMING_USER)
  18680. 8008188: 68bb ldr r3, [r7, #8]
  18681. 800818a: 691b ldr r3, [r3, #16]
  18682. 800818c: 2b01 cmp r3, #1
  18683. 800818e: d11d bne.n 80081cc <HAL_DAC_ConfigChannel+0x17c>
  18684. /* USER TRIMMING */
  18685. {
  18686. /* Get the DAC CCR value */
  18687. tmpreg1 = hdac->Instance->CCR;
  18688. 8008190: 68fb ldr r3, [r7, #12]
  18689. 8008192: 681b ldr r3, [r3, #0]
  18690. 8008194: 6b9b ldr r3, [r3, #56] @ 0x38
  18691. 8008196: 61bb str r3, [r7, #24]
  18692. /* Clear trimming value */
  18693. tmpreg1 &= ~(((uint32_t)(DAC_CCR_OTRIM1)) << (Channel & 0x10UL));
  18694. 8008198: 687b ldr r3, [r7, #4]
  18695. 800819a: f003 0310 and.w r3, r3, #16
  18696. 800819e: 221f movs r2, #31
  18697. 80081a0: fa02 f303 lsl.w r3, r2, r3
  18698. 80081a4: 43db mvns r3, r3
  18699. 80081a6: 69ba ldr r2, [r7, #24]
  18700. 80081a8: 4013 ands r3, r2
  18701. 80081aa: 61bb str r3, [r7, #24]
  18702. /* Configure for the selected trimming offset */
  18703. tmpreg2 = sConfig->DAC_TrimmingValue;
  18704. 80081ac: 68bb ldr r3, [r7, #8]
  18705. 80081ae: 695b ldr r3, [r3, #20]
  18706. 80081b0: 617b str r3, [r7, #20]
  18707. /* Calculate CCR register value depending on DAC_Channel */
  18708. tmpreg1 |= tmpreg2 << (Channel & 0x10UL);
  18709. 80081b2: 687b ldr r3, [r7, #4]
  18710. 80081b4: f003 0310 and.w r3, r3, #16
  18711. 80081b8: 697a ldr r2, [r7, #20]
  18712. 80081ba: fa02 f303 lsl.w r3, r2, r3
  18713. 80081be: 69ba ldr r2, [r7, #24]
  18714. 80081c0: 4313 orrs r3, r2
  18715. 80081c2: 61bb str r3, [r7, #24]
  18716. /* Write to DAC CCR */
  18717. hdac->Instance->CCR = tmpreg1;
  18718. 80081c4: 68fb ldr r3, [r7, #12]
  18719. 80081c6: 681b ldr r3, [r3, #0]
  18720. 80081c8: 69ba ldr r2, [r7, #24]
  18721. 80081ca: 639a str r2, [r3, #56] @ 0x38
  18722. }
  18723. /* else factory trimming is used (factory setting are available at reset)*/
  18724. /* SW Nothing has nothing to do */
  18725. /* Get the DAC MCR value */
  18726. tmpreg1 = hdac->Instance->MCR;
  18727. 80081cc: 68fb ldr r3, [r7, #12]
  18728. 80081ce: 681b ldr r3, [r3, #0]
  18729. 80081d0: 6bdb ldr r3, [r3, #60] @ 0x3c
  18730. 80081d2: 61bb str r3, [r7, #24]
  18731. /* Clear DAC_MCR_MODEx bits */
  18732. tmpreg1 &= ~(((uint32_t)(DAC_MCR_MODE1)) << (Channel & 0x10UL));
  18733. 80081d4: 687b ldr r3, [r7, #4]
  18734. 80081d6: f003 0310 and.w r3, r3, #16
  18735. 80081da: 2207 movs r2, #7
  18736. 80081dc: fa02 f303 lsl.w r3, r2, r3
  18737. 80081e0: 43db mvns r3, r3
  18738. 80081e2: 69ba ldr r2, [r7, #24]
  18739. 80081e4: 4013 ands r3, r2
  18740. 80081e6: 61bb str r3, [r7, #24]
  18741. /* Configure for the selected DAC channel: mode, buffer output & on chip peripheral connect */
  18742. if (sConfig->DAC_ConnectOnChipPeripheral == DAC_CHIPCONNECT_EXTERNAL)
  18743. 80081e8: 68bb ldr r3, [r7, #8]
  18744. 80081ea: 68db ldr r3, [r3, #12]
  18745. 80081ec: 2b01 cmp r3, #1
  18746. 80081ee: d102 bne.n 80081f6 <HAL_DAC_ConfigChannel+0x1a6>
  18747. {
  18748. connectOnChip = 0x00000000UL;
  18749. 80081f0: 2300 movs r3, #0
  18750. 80081f2: 627b str r3, [r7, #36] @ 0x24
  18751. 80081f4: e00f b.n 8008216 <HAL_DAC_ConfigChannel+0x1c6>
  18752. }
  18753. else if (sConfig->DAC_ConnectOnChipPeripheral == DAC_CHIPCONNECT_INTERNAL)
  18754. 80081f6: 68bb ldr r3, [r7, #8]
  18755. 80081f8: 68db ldr r3, [r3, #12]
  18756. 80081fa: 2b02 cmp r3, #2
  18757. 80081fc: d102 bne.n 8008204 <HAL_DAC_ConfigChannel+0x1b4>
  18758. {
  18759. connectOnChip = DAC_MCR_MODE1_0;
  18760. 80081fe: 2301 movs r3, #1
  18761. 8008200: 627b str r3, [r7, #36] @ 0x24
  18762. 8008202: e008 b.n 8008216 <HAL_DAC_ConfigChannel+0x1c6>
  18763. }
  18764. else /* (sConfig->DAC_ConnectOnChipPeripheral == DAC_CHIPCONNECT_BOTH) */
  18765. {
  18766. if (sConfig->DAC_OutputBuffer == DAC_OUTPUTBUFFER_ENABLE)
  18767. 8008204: 68bb ldr r3, [r7, #8]
  18768. 8008206: 689b ldr r3, [r3, #8]
  18769. 8008208: 2b00 cmp r3, #0
  18770. 800820a: d102 bne.n 8008212 <HAL_DAC_ConfigChannel+0x1c2>
  18771. {
  18772. connectOnChip = DAC_MCR_MODE1_0;
  18773. 800820c: 2301 movs r3, #1
  18774. 800820e: 627b str r3, [r7, #36] @ 0x24
  18775. 8008210: e001 b.n 8008216 <HAL_DAC_ConfigChannel+0x1c6>
  18776. }
  18777. else
  18778. {
  18779. connectOnChip = 0x00000000UL;
  18780. 8008212: 2300 movs r3, #0
  18781. 8008214: 627b str r3, [r7, #36] @ 0x24
  18782. }
  18783. }
  18784. tmpreg2 = (sConfig->DAC_SampleAndHold | sConfig->DAC_OutputBuffer | connectOnChip);
  18785. 8008216: 68bb ldr r3, [r7, #8]
  18786. 8008218: 681a ldr r2, [r3, #0]
  18787. 800821a: 68bb ldr r3, [r7, #8]
  18788. 800821c: 689b ldr r3, [r3, #8]
  18789. 800821e: 4313 orrs r3, r2
  18790. 8008220: 6a7a ldr r2, [r7, #36] @ 0x24
  18791. 8008222: 4313 orrs r3, r2
  18792. 8008224: 617b str r3, [r7, #20]
  18793. /* Calculate MCR register value depending on DAC_Channel */
  18794. tmpreg1 |= tmpreg2 << (Channel & 0x10UL);
  18795. 8008226: 687b ldr r3, [r7, #4]
  18796. 8008228: f003 0310 and.w r3, r3, #16
  18797. 800822c: 697a ldr r2, [r7, #20]
  18798. 800822e: fa02 f303 lsl.w r3, r2, r3
  18799. 8008232: 69ba ldr r2, [r7, #24]
  18800. 8008234: 4313 orrs r3, r2
  18801. 8008236: 61bb str r3, [r7, #24]
  18802. /* Write to DAC MCR */
  18803. hdac->Instance->MCR = tmpreg1;
  18804. 8008238: 68fb ldr r3, [r7, #12]
  18805. 800823a: 681b ldr r3, [r3, #0]
  18806. 800823c: 69ba ldr r2, [r7, #24]
  18807. 800823e: 63da str r2, [r3, #60] @ 0x3c
  18808. /* DAC in normal operating mode hence clear DAC_CR_CENx bit */
  18809. CLEAR_BIT(hdac->Instance->CR, DAC_CR_CEN1 << (Channel & 0x10UL));
  18810. 8008240: 68fb ldr r3, [r7, #12]
  18811. 8008242: 681b ldr r3, [r3, #0]
  18812. 8008244: 6819 ldr r1, [r3, #0]
  18813. 8008246: 687b ldr r3, [r7, #4]
  18814. 8008248: f003 0310 and.w r3, r3, #16
  18815. 800824c: f44f 4280 mov.w r2, #16384 @ 0x4000
  18816. 8008250: fa02 f303 lsl.w r3, r2, r3
  18817. 8008254: 43da mvns r2, r3
  18818. 8008256: 68fb ldr r3, [r7, #12]
  18819. 8008258: 681b ldr r3, [r3, #0]
  18820. 800825a: 400a ands r2, r1
  18821. 800825c: 601a str r2, [r3, #0]
  18822. /* Get the DAC CR value */
  18823. tmpreg1 = hdac->Instance->CR;
  18824. 800825e: 68fb ldr r3, [r7, #12]
  18825. 8008260: 681b ldr r3, [r3, #0]
  18826. 8008262: 681b ldr r3, [r3, #0]
  18827. 8008264: 61bb str r3, [r7, #24]
  18828. /* Clear TENx, TSELx, WAVEx and MAMPx bits */
  18829. tmpreg1 &= ~(((uint32_t)(DAC_CR_MAMP1 | DAC_CR_WAVE1 | DAC_CR_TSEL1 | DAC_CR_TEN1)) << (Channel & 0x10UL));
  18830. 8008266: 687b ldr r3, [r7, #4]
  18831. 8008268: f003 0310 and.w r3, r3, #16
  18832. 800826c: f640 72fe movw r2, #4094 @ 0xffe
  18833. 8008270: fa02 f303 lsl.w r3, r2, r3
  18834. 8008274: 43db mvns r3, r3
  18835. 8008276: 69ba ldr r2, [r7, #24]
  18836. 8008278: 4013 ands r3, r2
  18837. 800827a: 61bb str r3, [r7, #24]
  18838. /* Configure for the selected DAC channel: trigger */
  18839. /* Set TSELx and TENx bits according to DAC_Trigger value */
  18840. tmpreg2 = sConfig->DAC_Trigger;
  18841. 800827c: 68bb ldr r3, [r7, #8]
  18842. 800827e: 685b ldr r3, [r3, #4]
  18843. 8008280: 617b str r3, [r7, #20]
  18844. /* Calculate CR register value depending on DAC_Channel */
  18845. tmpreg1 |= tmpreg2 << (Channel & 0x10UL);
  18846. 8008282: 687b ldr r3, [r7, #4]
  18847. 8008284: f003 0310 and.w r3, r3, #16
  18848. 8008288: 697a ldr r2, [r7, #20]
  18849. 800828a: fa02 f303 lsl.w r3, r2, r3
  18850. 800828e: 69ba ldr r2, [r7, #24]
  18851. 8008290: 4313 orrs r3, r2
  18852. 8008292: 61bb str r3, [r7, #24]
  18853. /* Write to DAC CR */
  18854. hdac->Instance->CR = tmpreg1;
  18855. 8008294: 68fb ldr r3, [r7, #12]
  18856. 8008296: 681b ldr r3, [r3, #0]
  18857. 8008298: 69ba ldr r2, [r7, #24]
  18858. 800829a: 601a str r2, [r3, #0]
  18859. /* Disable wave generation */
  18860. CLEAR_BIT(hdac->Instance->CR, (DAC_CR_WAVE1 << (Channel & 0x10UL)));
  18861. 800829c: 68fb ldr r3, [r7, #12]
  18862. 800829e: 681b ldr r3, [r3, #0]
  18863. 80082a0: 6819 ldr r1, [r3, #0]
  18864. 80082a2: 687b ldr r3, [r7, #4]
  18865. 80082a4: f003 0310 and.w r3, r3, #16
  18866. 80082a8: 22c0 movs r2, #192 @ 0xc0
  18867. 80082aa: fa02 f303 lsl.w r3, r2, r3
  18868. 80082ae: 43da mvns r2, r3
  18869. 80082b0: 68fb ldr r3, [r7, #12]
  18870. 80082b2: 681b ldr r3, [r3, #0]
  18871. 80082b4: 400a ands r2, r1
  18872. 80082b6: 601a str r2, [r3, #0]
  18873. /* Change DAC state */
  18874. hdac->State = HAL_DAC_STATE_READY;
  18875. 80082b8: 68fb ldr r3, [r7, #12]
  18876. 80082ba: 2201 movs r2, #1
  18877. 80082bc: 711a strb r2, [r3, #4]
  18878. /* Process unlocked */
  18879. __HAL_UNLOCK(hdac);
  18880. 80082be: 68fb ldr r3, [r7, #12]
  18881. 80082c0: 2200 movs r2, #0
  18882. 80082c2: 715a strb r2, [r3, #5]
  18883. /* Return function status */
  18884. return status;
  18885. 80082c4: f897 3023 ldrb.w r3, [r7, #35] @ 0x23
  18886. }
  18887. 80082c8: 4618 mov r0, r3
  18888. 80082ca: 3728 adds r7, #40 @ 0x28
  18889. 80082cc: 46bd mov sp, r7
  18890. 80082ce: bd80 pop {r7, pc}
  18891. 80082d0: 20008000 .word 0x20008000
  18892. 080082d4 <HAL_DACEx_DMAUnderrunCallbackCh2>:
  18893. * @param hdac pointer to a DAC_HandleTypeDef structure that contains
  18894. * the configuration information for the specified DAC.
  18895. * @retval None
  18896. */
  18897. __weak void HAL_DACEx_DMAUnderrunCallbackCh2(DAC_HandleTypeDef *hdac)
  18898. {
  18899. 80082d4: b480 push {r7}
  18900. 80082d6: b083 sub sp, #12
  18901. 80082d8: af00 add r7, sp, #0
  18902. 80082da: 6078 str r0, [r7, #4]
  18903. UNUSED(hdac);
  18904. /* NOTE : This function should not be modified, when the callback is needed,
  18905. the HAL_DACEx_DMAUnderrunCallbackCh2 could be implemented in the user file
  18906. */
  18907. }
  18908. 80082dc: bf00 nop
  18909. 80082de: 370c adds r7, #12
  18910. 80082e0: 46bd mov sp, r7
  18911. 80082e2: f85d 7b04 ldr.w r7, [sp], #4
  18912. 80082e6: 4770 bx lr
  18913. 080082e8 <HAL_DMA_Init>:
  18914. * @param hdma: Pointer to a DMA_HandleTypeDef structure that contains
  18915. * the configuration information for the specified DMA Stream.
  18916. * @retval HAL status
  18917. */
  18918. HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma)
  18919. {
  18920. 80082e8: b580 push {r7, lr}
  18921. 80082ea: b086 sub sp, #24
  18922. 80082ec: af00 add r7, sp, #0
  18923. 80082ee: 6078 str r0, [r7, #4]
  18924. uint32_t registerValue;
  18925. uint32_t tickstart = HAL_GetTick();
  18926. 80082f0: f7fd fc5e bl 8005bb0 <HAL_GetTick>
  18927. 80082f4: 6138 str r0, [r7, #16]
  18928. DMA_Base_Registers *regs_dma;
  18929. BDMA_Base_Registers *regs_bdma;
  18930. /* Check the DMA peripheral handle */
  18931. if(hdma == NULL)
  18932. 80082f6: 687b ldr r3, [r7, #4]
  18933. 80082f8: 2b00 cmp r3, #0
  18934. 80082fa: d101 bne.n 8008300 <HAL_DMA_Init+0x18>
  18935. {
  18936. return HAL_ERROR;
  18937. 80082fc: 2301 movs r3, #1
  18938. 80082fe: e316 b.n 800892e <HAL_DMA_Init+0x646>
  18939. assert_param(IS_DMA_PERIPHERAL_DATA_SIZE(hdma->Init.PeriphDataAlignment));
  18940. assert_param(IS_DMA_MEMORY_DATA_SIZE(hdma->Init.MemDataAlignment));
  18941. assert_param(IS_DMA_MODE(hdma->Init.Mode));
  18942. assert_param(IS_DMA_PRIORITY(hdma->Init.Priority));
  18943. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  18944. 8008300: 687b ldr r3, [r7, #4]
  18945. 8008302: 681b ldr r3, [r3, #0]
  18946. 8008304: 4a66 ldr r2, [pc, #408] @ (80084a0 <HAL_DMA_Init+0x1b8>)
  18947. 8008306: 4293 cmp r3, r2
  18948. 8008308: d04a beq.n 80083a0 <HAL_DMA_Init+0xb8>
  18949. 800830a: 687b ldr r3, [r7, #4]
  18950. 800830c: 681b ldr r3, [r3, #0]
  18951. 800830e: 4a65 ldr r2, [pc, #404] @ (80084a4 <HAL_DMA_Init+0x1bc>)
  18952. 8008310: 4293 cmp r3, r2
  18953. 8008312: d045 beq.n 80083a0 <HAL_DMA_Init+0xb8>
  18954. 8008314: 687b ldr r3, [r7, #4]
  18955. 8008316: 681b ldr r3, [r3, #0]
  18956. 8008318: 4a63 ldr r2, [pc, #396] @ (80084a8 <HAL_DMA_Init+0x1c0>)
  18957. 800831a: 4293 cmp r3, r2
  18958. 800831c: d040 beq.n 80083a0 <HAL_DMA_Init+0xb8>
  18959. 800831e: 687b ldr r3, [r7, #4]
  18960. 8008320: 681b ldr r3, [r3, #0]
  18961. 8008322: 4a62 ldr r2, [pc, #392] @ (80084ac <HAL_DMA_Init+0x1c4>)
  18962. 8008324: 4293 cmp r3, r2
  18963. 8008326: d03b beq.n 80083a0 <HAL_DMA_Init+0xb8>
  18964. 8008328: 687b ldr r3, [r7, #4]
  18965. 800832a: 681b ldr r3, [r3, #0]
  18966. 800832c: 4a60 ldr r2, [pc, #384] @ (80084b0 <HAL_DMA_Init+0x1c8>)
  18967. 800832e: 4293 cmp r3, r2
  18968. 8008330: d036 beq.n 80083a0 <HAL_DMA_Init+0xb8>
  18969. 8008332: 687b ldr r3, [r7, #4]
  18970. 8008334: 681b ldr r3, [r3, #0]
  18971. 8008336: 4a5f ldr r2, [pc, #380] @ (80084b4 <HAL_DMA_Init+0x1cc>)
  18972. 8008338: 4293 cmp r3, r2
  18973. 800833a: d031 beq.n 80083a0 <HAL_DMA_Init+0xb8>
  18974. 800833c: 687b ldr r3, [r7, #4]
  18975. 800833e: 681b ldr r3, [r3, #0]
  18976. 8008340: 4a5d ldr r2, [pc, #372] @ (80084b8 <HAL_DMA_Init+0x1d0>)
  18977. 8008342: 4293 cmp r3, r2
  18978. 8008344: d02c beq.n 80083a0 <HAL_DMA_Init+0xb8>
  18979. 8008346: 687b ldr r3, [r7, #4]
  18980. 8008348: 681b ldr r3, [r3, #0]
  18981. 800834a: 4a5c ldr r2, [pc, #368] @ (80084bc <HAL_DMA_Init+0x1d4>)
  18982. 800834c: 4293 cmp r3, r2
  18983. 800834e: d027 beq.n 80083a0 <HAL_DMA_Init+0xb8>
  18984. 8008350: 687b ldr r3, [r7, #4]
  18985. 8008352: 681b ldr r3, [r3, #0]
  18986. 8008354: 4a5a ldr r2, [pc, #360] @ (80084c0 <HAL_DMA_Init+0x1d8>)
  18987. 8008356: 4293 cmp r3, r2
  18988. 8008358: d022 beq.n 80083a0 <HAL_DMA_Init+0xb8>
  18989. 800835a: 687b ldr r3, [r7, #4]
  18990. 800835c: 681b ldr r3, [r3, #0]
  18991. 800835e: 4a59 ldr r2, [pc, #356] @ (80084c4 <HAL_DMA_Init+0x1dc>)
  18992. 8008360: 4293 cmp r3, r2
  18993. 8008362: d01d beq.n 80083a0 <HAL_DMA_Init+0xb8>
  18994. 8008364: 687b ldr r3, [r7, #4]
  18995. 8008366: 681b ldr r3, [r3, #0]
  18996. 8008368: 4a57 ldr r2, [pc, #348] @ (80084c8 <HAL_DMA_Init+0x1e0>)
  18997. 800836a: 4293 cmp r3, r2
  18998. 800836c: d018 beq.n 80083a0 <HAL_DMA_Init+0xb8>
  18999. 800836e: 687b ldr r3, [r7, #4]
  19000. 8008370: 681b ldr r3, [r3, #0]
  19001. 8008372: 4a56 ldr r2, [pc, #344] @ (80084cc <HAL_DMA_Init+0x1e4>)
  19002. 8008374: 4293 cmp r3, r2
  19003. 8008376: d013 beq.n 80083a0 <HAL_DMA_Init+0xb8>
  19004. 8008378: 687b ldr r3, [r7, #4]
  19005. 800837a: 681b ldr r3, [r3, #0]
  19006. 800837c: 4a54 ldr r2, [pc, #336] @ (80084d0 <HAL_DMA_Init+0x1e8>)
  19007. 800837e: 4293 cmp r3, r2
  19008. 8008380: d00e beq.n 80083a0 <HAL_DMA_Init+0xb8>
  19009. 8008382: 687b ldr r3, [r7, #4]
  19010. 8008384: 681b ldr r3, [r3, #0]
  19011. 8008386: 4a53 ldr r2, [pc, #332] @ (80084d4 <HAL_DMA_Init+0x1ec>)
  19012. 8008388: 4293 cmp r3, r2
  19013. 800838a: d009 beq.n 80083a0 <HAL_DMA_Init+0xb8>
  19014. 800838c: 687b ldr r3, [r7, #4]
  19015. 800838e: 681b ldr r3, [r3, #0]
  19016. 8008390: 4a51 ldr r2, [pc, #324] @ (80084d8 <HAL_DMA_Init+0x1f0>)
  19017. 8008392: 4293 cmp r3, r2
  19018. 8008394: d004 beq.n 80083a0 <HAL_DMA_Init+0xb8>
  19019. 8008396: 687b ldr r3, [r7, #4]
  19020. 8008398: 681b ldr r3, [r3, #0]
  19021. 800839a: 4a50 ldr r2, [pc, #320] @ (80084dc <HAL_DMA_Init+0x1f4>)
  19022. 800839c: 4293 cmp r3, r2
  19023. 800839e: d101 bne.n 80083a4 <HAL_DMA_Init+0xbc>
  19024. 80083a0: 2301 movs r3, #1
  19025. 80083a2: e000 b.n 80083a6 <HAL_DMA_Init+0xbe>
  19026. 80083a4: 2300 movs r3, #0
  19027. 80083a6: 2b00 cmp r3, #0
  19028. 80083a8: f000 813b beq.w 8008622 <HAL_DMA_Init+0x33a>
  19029. assert_param(IS_DMA_MEMORY_BURST(hdma->Init.MemBurst));
  19030. assert_param(IS_DMA_PERIPHERAL_BURST(hdma->Init.PeriphBurst));
  19031. }
  19032. /* Change DMA peripheral state */
  19033. hdma->State = HAL_DMA_STATE_BUSY;
  19034. 80083ac: 687b ldr r3, [r7, #4]
  19035. 80083ae: 2202 movs r2, #2
  19036. 80083b0: f883 2035 strb.w r2, [r3, #53] @ 0x35
  19037. /* Allocate lock resource */
  19038. __HAL_UNLOCK(hdma);
  19039. 80083b4: 687b ldr r3, [r7, #4]
  19040. 80083b6: 2200 movs r2, #0
  19041. 80083b8: f883 2034 strb.w r2, [r3, #52] @ 0x34
  19042. /* Disable the peripheral */
  19043. __HAL_DMA_DISABLE(hdma);
  19044. 80083bc: 687b ldr r3, [r7, #4]
  19045. 80083be: 681b ldr r3, [r3, #0]
  19046. 80083c0: 4a37 ldr r2, [pc, #220] @ (80084a0 <HAL_DMA_Init+0x1b8>)
  19047. 80083c2: 4293 cmp r3, r2
  19048. 80083c4: d04a beq.n 800845c <HAL_DMA_Init+0x174>
  19049. 80083c6: 687b ldr r3, [r7, #4]
  19050. 80083c8: 681b ldr r3, [r3, #0]
  19051. 80083ca: 4a36 ldr r2, [pc, #216] @ (80084a4 <HAL_DMA_Init+0x1bc>)
  19052. 80083cc: 4293 cmp r3, r2
  19053. 80083ce: d045 beq.n 800845c <HAL_DMA_Init+0x174>
  19054. 80083d0: 687b ldr r3, [r7, #4]
  19055. 80083d2: 681b ldr r3, [r3, #0]
  19056. 80083d4: 4a34 ldr r2, [pc, #208] @ (80084a8 <HAL_DMA_Init+0x1c0>)
  19057. 80083d6: 4293 cmp r3, r2
  19058. 80083d8: d040 beq.n 800845c <HAL_DMA_Init+0x174>
  19059. 80083da: 687b ldr r3, [r7, #4]
  19060. 80083dc: 681b ldr r3, [r3, #0]
  19061. 80083de: 4a33 ldr r2, [pc, #204] @ (80084ac <HAL_DMA_Init+0x1c4>)
  19062. 80083e0: 4293 cmp r3, r2
  19063. 80083e2: d03b beq.n 800845c <HAL_DMA_Init+0x174>
  19064. 80083e4: 687b ldr r3, [r7, #4]
  19065. 80083e6: 681b ldr r3, [r3, #0]
  19066. 80083e8: 4a31 ldr r2, [pc, #196] @ (80084b0 <HAL_DMA_Init+0x1c8>)
  19067. 80083ea: 4293 cmp r3, r2
  19068. 80083ec: d036 beq.n 800845c <HAL_DMA_Init+0x174>
  19069. 80083ee: 687b ldr r3, [r7, #4]
  19070. 80083f0: 681b ldr r3, [r3, #0]
  19071. 80083f2: 4a30 ldr r2, [pc, #192] @ (80084b4 <HAL_DMA_Init+0x1cc>)
  19072. 80083f4: 4293 cmp r3, r2
  19073. 80083f6: d031 beq.n 800845c <HAL_DMA_Init+0x174>
  19074. 80083f8: 687b ldr r3, [r7, #4]
  19075. 80083fa: 681b ldr r3, [r3, #0]
  19076. 80083fc: 4a2e ldr r2, [pc, #184] @ (80084b8 <HAL_DMA_Init+0x1d0>)
  19077. 80083fe: 4293 cmp r3, r2
  19078. 8008400: d02c beq.n 800845c <HAL_DMA_Init+0x174>
  19079. 8008402: 687b ldr r3, [r7, #4]
  19080. 8008404: 681b ldr r3, [r3, #0]
  19081. 8008406: 4a2d ldr r2, [pc, #180] @ (80084bc <HAL_DMA_Init+0x1d4>)
  19082. 8008408: 4293 cmp r3, r2
  19083. 800840a: d027 beq.n 800845c <HAL_DMA_Init+0x174>
  19084. 800840c: 687b ldr r3, [r7, #4]
  19085. 800840e: 681b ldr r3, [r3, #0]
  19086. 8008410: 4a2b ldr r2, [pc, #172] @ (80084c0 <HAL_DMA_Init+0x1d8>)
  19087. 8008412: 4293 cmp r3, r2
  19088. 8008414: d022 beq.n 800845c <HAL_DMA_Init+0x174>
  19089. 8008416: 687b ldr r3, [r7, #4]
  19090. 8008418: 681b ldr r3, [r3, #0]
  19091. 800841a: 4a2a ldr r2, [pc, #168] @ (80084c4 <HAL_DMA_Init+0x1dc>)
  19092. 800841c: 4293 cmp r3, r2
  19093. 800841e: d01d beq.n 800845c <HAL_DMA_Init+0x174>
  19094. 8008420: 687b ldr r3, [r7, #4]
  19095. 8008422: 681b ldr r3, [r3, #0]
  19096. 8008424: 4a28 ldr r2, [pc, #160] @ (80084c8 <HAL_DMA_Init+0x1e0>)
  19097. 8008426: 4293 cmp r3, r2
  19098. 8008428: d018 beq.n 800845c <HAL_DMA_Init+0x174>
  19099. 800842a: 687b ldr r3, [r7, #4]
  19100. 800842c: 681b ldr r3, [r3, #0]
  19101. 800842e: 4a27 ldr r2, [pc, #156] @ (80084cc <HAL_DMA_Init+0x1e4>)
  19102. 8008430: 4293 cmp r3, r2
  19103. 8008432: d013 beq.n 800845c <HAL_DMA_Init+0x174>
  19104. 8008434: 687b ldr r3, [r7, #4]
  19105. 8008436: 681b ldr r3, [r3, #0]
  19106. 8008438: 4a25 ldr r2, [pc, #148] @ (80084d0 <HAL_DMA_Init+0x1e8>)
  19107. 800843a: 4293 cmp r3, r2
  19108. 800843c: d00e beq.n 800845c <HAL_DMA_Init+0x174>
  19109. 800843e: 687b ldr r3, [r7, #4]
  19110. 8008440: 681b ldr r3, [r3, #0]
  19111. 8008442: 4a24 ldr r2, [pc, #144] @ (80084d4 <HAL_DMA_Init+0x1ec>)
  19112. 8008444: 4293 cmp r3, r2
  19113. 8008446: d009 beq.n 800845c <HAL_DMA_Init+0x174>
  19114. 8008448: 687b ldr r3, [r7, #4]
  19115. 800844a: 681b ldr r3, [r3, #0]
  19116. 800844c: 4a22 ldr r2, [pc, #136] @ (80084d8 <HAL_DMA_Init+0x1f0>)
  19117. 800844e: 4293 cmp r3, r2
  19118. 8008450: d004 beq.n 800845c <HAL_DMA_Init+0x174>
  19119. 8008452: 687b ldr r3, [r7, #4]
  19120. 8008454: 681b ldr r3, [r3, #0]
  19121. 8008456: 4a21 ldr r2, [pc, #132] @ (80084dc <HAL_DMA_Init+0x1f4>)
  19122. 8008458: 4293 cmp r3, r2
  19123. 800845a: d108 bne.n 800846e <HAL_DMA_Init+0x186>
  19124. 800845c: 687b ldr r3, [r7, #4]
  19125. 800845e: 681b ldr r3, [r3, #0]
  19126. 8008460: 681a ldr r2, [r3, #0]
  19127. 8008462: 687b ldr r3, [r7, #4]
  19128. 8008464: 681b ldr r3, [r3, #0]
  19129. 8008466: f022 0201 bic.w r2, r2, #1
  19130. 800846a: 601a str r2, [r3, #0]
  19131. 800846c: e007 b.n 800847e <HAL_DMA_Init+0x196>
  19132. 800846e: 687b ldr r3, [r7, #4]
  19133. 8008470: 681b ldr r3, [r3, #0]
  19134. 8008472: 681a ldr r2, [r3, #0]
  19135. 8008474: 687b ldr r3, [r7, #4]
  19136. 8008476: 681b ldr r3, [r3, #0]
  19137. 8008478: f022 0201 bic.w r2, r2, #1
  19138. 800847c: 601a str r2, [r3, #0]
  19139. /* Check if the DMA Stream is effectively disabled */
  19140. while((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_EN) != 0U)
  19141. 800847e: e02f b.n 80084e0 <HAL_DMA_Init+0x1f8>
  19142. {
  19143. /* Check for the Timeout */
  19144. if((HAL_GetTick() - tickstart ) > HAL_TIMEOUT_DMA_ABORT)
  19145. 8008480: f7fd fb96 bl 8005bb0 <HAL_GetTick>
  19146. 8008484: 4602 mov r2, r0
  19147. 8008486: 693b ldr r3, [r7, #16]
  19148. 8008488: 1ad3 subs r3, r2, r3
  19149. 800848a: 2b05 cmp r3, #5
  19150. 800848c: d928 bls.n 80084e0 <HAL_DMA_Init+0x1f8>
  19151. {
  19152. /* Update error code */
  19153. hdma->ErrorCode = HAL_DMA_ERROR_TIMEOUT;
  19154. 800848e: 687b ldr r3, [r7, #4]
  19155. 8008490: 2220 movs r2, #32
  19156. 8008492: 655a str r2, [r3, #84] @ 0x54
  19157. /* Change the DMA state */
  19158. hdma->State = HAL_DMA_STATE_ERROR;
  19159. 8008494: 687b ldr r3, [r7, #4]
  19160. 8008496: 2203 movs r2, #3
  19161. 8008498: f883 2035 strb.w r2, [r3, #53] @ 0x35
  19162. return HAL_ERROR;
  19163. 800849c: 2301 movs r3, #1
  19164. 800849e: e246 b.n 800892e <HAL_DMA_Init+0x646>
  19165. 80084a0: 40020010 .word 0x40020010
  19166. 80084a4: 40020028 .word 0x40020028
  19167. 80084a8: 40020040 .word 0x40020040
  19168. 80084ac: 40020058 .word 0x40020058
  19169. 80084b0: 40020070 .word 0x40020070
  19170. 80084b4: 40020088 .word 0x40020088
  19171. 80084b8: 400200a0 .word 0x400200a0
  19172. 80084bc: 400200b8 .word 0x400200b8
  19173. 80084c0: 40020410 .word 0x40020410
  19174. 80084c4: 40020428 .word 0x40020428
  19175. 80084c8: 40020440 .word 0x40020440
  19176. 80084cc: 40020458 .word 0x40020458
  19177. 80084d0: 40020470 .word 0x40020470
  19178. 80084d4: 40020488 .word 0x40020488
  19179. 80084d8: 400204a0 .word 0x400204a0
  19180. 80084dc: 400204b8 .word 0x400204b8
  19181. while((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_EN) != 0U)
  19182. 80084e0: 687b ldr r3, [r7, #4]
  19183. 80084e2: 681b ldr r3, [r3, #0]
  19184. 80084e4: 681b ldr r3, [r3, #0]
  19185. 80084e6: f003 0301 and.w r3, r3, #1
  19186. 80084ea: 2b00 cmp r3, #0
  19187. 80084ec: d1c8 bne.n 8008480 <HAL_DMA_Init+0x198>
  19188. }
  19189. }
  19190. /* Get the CR register value */
  19191. registerValue = ((DMA_Stream_TypeDef *)hdma->Instance)->CR;
  19192. 80084ee: 687b ldr r3, [r7, #4]
  19193. 80084f0: 681b ldr r3, [r3, #0]
  19194. 80084f2: 681b ldr r3, [r3, #0]
  19195. 80084f4: 617b str r3, [r7, #20]
  19196. /* Clear CHSEL, MBURST, PBURST, PL, MSIZE, PSIZE, MINC, PINC, CIRC, DIR, CT and DBM bits */
  19197. registerValue &= ((uint32_t)~(DMA_SxCR_MBURST | DMA_SxCR_PBURST | \
  19198. 80084f6: 697a ldr r2, [r7, #20]
  19199. 80084f8: 4b83 ldr r3, [pc, #524] @ (8008708 <HAL_DMA_Init+0x420>)
  19200. 80084fa: 4013 ands r3, r2
  19201. 80084fc: 617b str r3, [r7, #20]
  19202. DMA_SxCR_PL | DMA_SxCR_MSIZE | DMA_SxCR_PSIZE | \
  19203. DMA_SxCR_MINC | DMA_SxCR_PINC | DMA_SxCR_CIRC | \
  19204. DMA_SxCR_DIR | DMA_SxCR_CT | DMA_SxCR_DBM));
  19205. /* Prepare the DMA Stream configuration */
  19206. registerValue |= hdma->Init.Direction |
  19207. 80084fe: 687b ldr r3, [r7, #4]
  19208. 8008500: 689a ldr r2, [r3, #8]
  19209. hdma->Init.PeriphInc | hdma->Init.MemInc |
  19210. 8008502: 687b ldr r3, [r7, #4]
  19211. 8008504: 68db ldr r3, [r3, #12]
  19212. registerValue |= hdma->Init.Direction |
  19213. 8008506: 431a orrs r2, r3
  19214. hdma->Init.PeriphInc | hdma->Init.MemInc |
  19215. 8008508: 687b ldr r3, [r7, #4]
  19216. 800850a: 691b ldr r3, [r3, #16]
  19217. 800850c: 431a orrs r2, r3
  19218. hdma->Init.PeriphDataAlignment | hdma->Init.MemDataAlignment |
  19219. 800850e: 687b ldr r3, [r7, #4]
  19220. 8008510: 695b ldr r3, [r3, #20]
  19221. hdma->Init.PeriphInc | hdma->Init.MemInc |
  19222. 8008512: 431a orrs r2, r3
  19223. hdma->Init.PeriphDataAlignment | hdma->Init.MemDataAlignment |
  19224. 8008514: 687b ldr r3, [r7, #4]
  19225. 8008516: 699b ldr r3, [r3, #24]
  19226. 8008518: 431a orrs r2, r3
  19227. hdma->Init.Mode | hdma->Init.Priority;
  19228. 800851a: 687b ldr r3, [r7, #4]
  19229. 800851c: 69db ldr r3, [r3, #28]
  19230. hdma->Init.PeriphDataAlignment | hdma->Init.MemDataAlignment |
  19231. 800851e: 431a orrs r2, r3
  19232. hdma->Init.Mode | hdma->Init.Priority;
  19233. 8008520: 687b ldr r3, [r7, #4]
  19234. 8008522: 6a1b ldr r3, [r3, #32]
  19235. 8008524: 4313 orrs r3, r2
  19236. registerValue |= hdma->Init.Direction |
  19237. 8008526: 697a ldr r2, [r7, #20]
  19238. 8008528: 4313 orrs r3, r2
  19239. 800852a: 617b str r3, [r7, #20]
  19240. /* the Memory burst and peripheral burst are not used when the FIFO is disabled */
  19241. if(hdma->Init.FIFOMode == DMA_FIFOMODE_ENABLE)
  19242. 800852c: 687b ldr r3, [r7, #4]
  19243. 800852e: 6a5b ldr r3, [r3, #36] @ 0x24
  19244. 8008530: 2b04 cmp r3, #4
  19245. 8008532: d107 bne.n 8008544 <HAL_DMA_Init+0x25c>
  19246. {
  19247. /* Get memory burst and peripheral burst */
  19248. registerValue |= hdma->Init.MemBurst | hdma->Init.PeriphBurst;
  19249. 8008534: 687b ldr r3, [r7, #4]
  19250. 8008536: 6ada ldr r2, [r3, #44] @ 0x2c
  19251. 8008538: 687b ldr r3, [r7, #4]
  19252. 800853a: 6b1b ldr r3, [r3, #48] @ 0x30
  19253. 800853c: 4313 orrs r3, r2
  19254. 800853e: 697a ldr r2, [r7, #20]
  19255. 8008540: 4313 orrs r3, r2
  19256. 8008542: 617b str r3, [r7, #20]
  19257. }
  19258. /* Work around for Errata 2.22: UART/USART- DMA transfer lock: DMA stream could be
  19259. lock when transferring data to/from USART/UART */
  19260. #if (STM32H7_DEV_ID == 0x450UL)
  19261. if((DBGMCU->IDCODE & 0xFFFF0000U) >= 0x20000000U)
  19262. 8008544: 4b71 ldr r3, [pc, #452] @ (800870c <HAL_DMA_Init+0x424>)
  19263. 8008546: 681a ldr r2, [r3, #0]
  19264. 8008548: 4b71 ldr r3, [pc, #452] @ (8008710 <HAL_DMA_Init+0x428>)
  19265. 800854a: 4013 ands r3, r2
  19266. 800854c: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  19267. 8008550: d328 bcc.n 80085a4 <HAL_DMA_Init+0x2bc>
  19268. {
  19269. #endif /* STM32H7_DEV_ID == 0x450UL */
  19270. if(IS_DMA_UART_USART_REQUEST(hdma->Init.Request) != 0U)
  19271. 8008552: 687b ldr r3, [r7, #4]
  19272. 8008554: 685b ldr r3, [r3, #4]
  19273. 8008556: 2b28 cmp r3, #40 @ 0x28
  19274. 8008558: d903 bls.n 8008562 <HAL_DMA_Init+0x27a>
  19275. 800855a: 687b ldr r3, [r7, #4]
  19276. 800855c: 685b ldr r3, [r3, #4]
  19277. 800855e: 2b2e cmp r3, #46 @ 0x2e
  19278. 8008560: d917 bls.n 8008592 <HAL_DMA_Init+0x2aa>
  19279. 8008562: 687b ldr r3, [r7, #4]
  19280. 8008564: 685b ldr r3, [r3, #4]
  19281. 8008566: 2b3e cmp r3, #62 @ 0x3e
  19282. 8008568: d903 bls.n 8008572 <HAL_DMA_Init+0x28a>
  19283. 800856a: 687b ldr r3, [r7, #4]
  19284. 800856c: 685b ldr r3, [r3, #4]
  19285. 800856e: 2b42 cmp r3, #66 @ 0x42
  19286. 8008570: d90f bls.n 8008592 <HAL_DMA_Init+0x2aa>
  19287. 8008572: 687b ldr r3, [r7, #4]
  19288. 8008574: 685b ldr r3, [r3, #4]
  19289. 8008576: 2b46 cmp r3, #70 @ 0x46
  19290. 8008578: d903 bls.n 8008582 <HAL_DMA_Init+0x29a>
  19291. 800857a: 687b ldr r3, [r7, #4]
  19292. 800857c: 685b ldr r3, [r3, #4]
  19293. 800857e: 2b48 cmp r3, #72 @ 0x48
  19294. 8008580: d907 bls.n 8008592 <HAL_DMA_Init+0x2aa>
  19295. 8008582: 687b ldr r3, [r7, #4]
  19296. 8008584: 685b ldr r3, [r3, #4]
  19297. 8008586: 2b4e cmp r3, #78 @ 0x4e
  19298. 8008588: d905 bls.n 8008596 <HAL_DMA_Init+0x2ae>
  19299. 800858a: 687b ldr r3, [r7, #4]
  19300. 800858c: 685b ldr r3, [r3, #4]
  19301. 800858e: 2b52 cmp r3, #82 @ 0x52
  19302. 8008590: d801 bhi.n 8008596 <HAL_DMA_Init+0x2ae>
  19303. 8008592: 2301 movs r3, #1
  19304. 8008594: e000 b.n 8008598 <HAL_DMA_Init+0x2b0>
  19305. 8008596: 2300 movs r3, #0
  19306. 8008598: 2b00 cmp r3, #0
  19307. 800859a: d003 beq.n 80085a4 <HAL_DMA_Init+0x2bc>
  19308. {
  19309. registerValue |= DMA_SxCR_TRBUFF;
  19310. 800859c: 697b ldr r3, [r7, #20]
  19311. 800859e: f443 1380 orr.w r3, r3, #1048576 @ 0x100000
  19312. 80085a2: 617b str r3, [r7, #20]
  19313. #if (STM32H7_DEV_ID == 0x450UL)
  19314. }
  19315. #endif /* STM32H7_DEV_ID == 0x450UL */
  19316. /* Write to DMA Stream CR register */
  19317. ((DMA_Stream_TypeDef *)hdma->Instance)->CR = registerValue;
  19318. 80085a4: 687b ldr r3, [r7, #4]
  19319. 80085a6: 681b ldr r3, [r3, #0]
  19320. 80085a8: 697a ldr r2, [r7, #20]
  19321. 80085aa: 601a str r2, [r3, #0]
  19322. /* Get the FCR register value */
  19323. registerValue = ((DMA_Stream_TypeDef *)hdma->Instance)->FCR;
  19324. 80085ac: 687b ldr r3, [r7, #4]
  19325. 80085ae: 681b ldr r3, [r3, #0]
  19326. 80085b0: 695b ldr r3, [r3, #20]
  19327. 80085b2: 617b str r3, [r7, #20]
  19328. /* Clear Direct mode and FIFO threshold bits */
  19329. registerValue &= (uint32_t)~(DMA_SxFCR_DMDIS | DMA_SxFCR_FTH);
  19330. 80085b4: 697b ldr r3, [r7, #20]
  19331. 80085b6: f023 0307 bic.w r3, r3, #7
  19332. 80085ba: 617b str r3, [r7, #20]
  19333. /* Prepare the DMA Stream FIFO configuration */
  19334. registerValue |= hdma->Init.FIFOMode;
  19335. 80085bc: 687b ldr r3, [r7, #4]
  19336. 80085be: 6a5b ldr r3, [r3, #36] @ 0x24
  19337. 80085c0: 697a ldr r2, [r7, #20]
  19338. 80085c2: 4313 orrs r3, r2
  19339. 80085c4: 617b str r3, [r7, #20]
  19340. /* the FIFO threshold is not used when the FIFO mode is disabled */
  19341. if(hdma->Init.FIFOMode == DMA_FIFOMODE_ENABLE)
  19342. 80085c6: 687b ldr r3, [r7, #4]
  19343. 80085c8: 6a5b ldr r3, [r3, #36] @ 0x24
  19344. 80085ca: 2b04 cmp r3, #4
  19345. 80085cc: d117 bne.n 80085fe <HAL_DMA_Init+0x316>
  19346. {
  19347. /* Get the FIFO threshold */
  19348. registerValue |= hdma->Init.FIFOThreshold;
  19349. 80085ce: 687b ldr r3, [r7, #4]
  19350. 80085d0: 6a9b ldr r3, [r3, #40] @ 0x28
  19351. 80085d2: 697a ldr r2, [r7, #20]
  19352. 80085d4: 4313 orrs r3, r2
  19353. 80085d6: 617b str r3, [r7, #20]
  19354. /* Check compatibility between FIFO threshold level and size of the memory burst */
  19355. /* for INCR4, INCR8, INCR16 */
  19356. if(hdma->Init.MemBurst != DMA_MBURST_SINGLE)
  19357. 80085d8: 687b ldr r3, [r7, #4]
  19358. 80085da: 6adb ldr r3, [r3, #44] @ 0x2c
  19359. 80085dc: 2b00 cmp r3, #0
  19360. 80085de: d00e beq.n 80085fe <HAL_DMA_Init+0x316>
  19361. {
  19362. if (DMA_CheckFifoParam(hdma) != HAL_OK)
  19363. 80085e0: 6878 ldr r0, [r7, #4]
  19364. 80085e2: f002 fb33 bl 800ac4c <DMA_CheckFifoParam>
  19365. 80085e6: 4603 mov r3, r0
  19366. 80085e8: 2b00 cmp r3, #0
  19367. 80085ea: d008 beq.n 80085fe <HAL_DMA_Init+0x316>
  19368. {
  19369. /* Update error code */
  19370. hdma->ErrorCode = HAL_DMA_ERROR_PARAM;
  19371. 80085ec: 687b ldr r3, [r7, #4]
  19372. 80085ee: 2240 movs r2, #64 @ 0x40
  19373. 80085f0: 655a str r2, [r3, #84] @ 0x54
  19374. /* Change the DMA state */
  19375. hdma->State = HAL_DMA_STATE_READY;
  19376. 80085f2: 687b ldr r3, [r7, #4]
  19377. 80085f4: 2201 movs r2, #1
  19378. 80085f6: f883 2035 strb.w r2, [r3, #53] @ 0x35
  19379. return HAL_ERROR;
  19380. 80085fa: 2301 movs r3, #1
  19381. 80085fc: e197 b.n 800892e <HAL_DMA_Init+0x646>
  19382. }
  19383. }
  19384. }
  19385. /* Write to DMA Stream FCR */
  19386. ((DMA_Stream_TypeDef *)hdma->Instance)->FCR = registerValue;
  19387. 80085fe: 687b ldr r3, [r7, #4]
  19388. 8008600: 681b ldr r3, [r3, #0]
  19389. 8008602: 697a ldr r2, [r7, #20]
  19390. 8008604: 615a str r2, [r3, #20]
  19391. /* Initialize StreamBaseAddress and StreamIndex parameters to be used to calculate
  19392. DMA steam Base Address needed by HAL_DMA_IRQHandler() and HAL_DMA_PollForTransfer() */
  19393. regs_dma = (DMA_Base_Registers *)DMA_CalcBaseAndBitshift(hdma);
  19394. 8008606: 6878 ldr r0, [r7, #4]
  19395. 8008608: f002 fa6e bl 800aae8 <DMA_CalcBaseAndBitshift>
  19396. 800860c: 4603 mov r3, r0
  19397. 800860e: 60bb str r3, [r7, #8]
  19398. /* Clear all interrupt flags */
  19399. regs_dma->IFCR = 0x3FUL << (hdma->StreamIndex & 0x1FU);
  19400. 8008610: 687b ldr r3, [r7, #4]
  19401. 8008612: 6ddb ldr r3, [r3, #92] @ 0x5c
  19402. 8008614: f003 031f and.w r3, r3, #31
  19403. 8008618: 223f movs r2, #63 @ 0x3f
  19404. 800861a: 409a lsls r2, r3
  19405. 800861c: 68bb ldr r3, [r7, #8]
  19406. 800861e: 609a str r2, [r3, #8]
  19407. 8008620: e0cd b.n 80087be <HAL_DMA_Init+0x4d6>
  19408. }
  19409. else if(IS_BDMA_CHANNEL_INSTANCE(hdma->Instance) != 0U) /* BDMA instance(s) */
  19410. 8008622: 687b ldr r3, [r7, #4]
  19411. 8008624: 681b ldr r3, [r3, #0]
  19412. 8008626: 4a3b ldr r2, [pc, #236] @ (8008714 <HAL_DMA_Init+0x42c>)
  19413. 8008628: 4293 cmp r3, r2
  19414. 800862a: d022 beq.n 8008672 <HAL_DMA_Init+0x38a>
  19415. 800862c: 687b ldr r3, [r7, #4]
  19416. 800862e: 681b ldr r3, [r3, #0]
  19417. 8008630: 4a39 ldr r2, [pc, #228] @ (8008718 <HAL_DMA_Init+0x430>)
  19418. 8008632: 4293 cmp r3, r2
  19419. 8008634: d01d beq.n 8008672 <HAL_DMA_Init+0x38a>
  19420. 8008636: 687b ldr r3, [r7, #4]
  19421. 8008638: 681b ldr r3, [r3, #0]
  19422. 800863a: 4a38 ldr r2, [pc, #224] @ (800871c <HAL_DMA_Init+0x434>)
  19423. 800863c: 4293 cmp r3, r2
  19424. 800863e: d018 beq.n 8008672 <HAL_DMA_Init+0x38a>
  19425. 8008640: 687b ldr r3, [r7, #4]
  19426. 8008642: 681b ldr r3, [r3, #0]
  19427. 8008644: 4a36 ldr r2, [pc, #216] @ (8008720 <HAL_DMA_Init+0x438>)
  19428. 8008646: 4293 cmp r3, r2
  19429. 8008648: d013 beq.n 8008672 <HAL_DMA_Init+0x38a>
  19430. 800864a: 687b ldr r3, [r7, #4]
  19431. 800864c: 681b ldr r3, [r3, #0]
  19432. 800864e: 4a35 ldr r2, [pc, #212] @ (8008724 <HAL_DMA_Init+0x43c>)
  19433. 8008650: 4293 cmp r3, r2
  19434. 8008652: d00e beq.n 8008672 <HAL_DMA_Init+0x38a>
  19435. 8008654: 687b ldr r3, [r7, #4]
  19436. 8008656: 681b ldr r3, [r3, #0]
  19437. 8008658: 4a33 ldr r2, [pc, #204] @ (8008728 <HAL_DMA_Init+0x440>)
  19438. 800865a: 4293 cmp r3, r2
  19439. 800865c: d009 beq.n 8008672 <HAL_DMA_Init+0x38a>
  19440. 800865e: 687b ldr r3, [r7, #4]
  19441. 8008660: 681b ldr r3, [r3, #0]
  19442. 8008662: 4a32 ldr r2, [pc, #200] @ (800872c <HAL_DMA_Init+0x444>)
  19443. 8008664: 4293 cmp r3, r2
  19444. 8008666: d004 beq.n 8008672 <HAL_DMA_Init+0x38a>
  19445. 8008668: 687b ldr r3, [r7, #4]
  19446. 800866a: 681b ldr r3, [r3, #0]
  19447. 800866c: 4a30 ldr r2, [pc, #192] @ (8008730 <HAL_DMA_Init+0x448>)
  19448. 800866e: 4293 cmp r3, r2
  19449. 8008670: d101 bne.n 8008676 <HAL_DMA_Init+0x38e>
  19450. 8008672: 2301 movs r3, #1
  19451. 8008674: e000 b.n 8008678 <HAL_DMA_Init+0x390>
  19452. 8008676: 2300 movs r3, #0
  19453. 8008678: 2b00 cmp r3, #0
  19454. 800867a: f000 8097 beq.w 80087ac <HAL_DMA_Init+0x4c4>
  19455. {
  19456. if(IS_BDMA_CHANNEL_DMAMUX_INSTANCE(hdma->Instance) != 0U)
  19457. 800867e: 687b ldr r3, [r7, #4]
  19458. 8008680: 681b ldr r3, [r3, #0]
  19459. 8008682: 4a24 ldr r2, [pc, #144] @ (8008714 <HAL_DMA_Init+0x42c>)
  19460. 8008684: 4293 cmp r3, r2
  19461. 8008686: d021 beq.n 80086cc <HAL_DMA_Init+0x3e4>
  19462. 8008688: 687b ldr r3, [r7, #4]
  19463. 800868a: 681b ldr r3, [r3, #0]
  19464. 800868c: 4a22 ldr r2, [pc, #136] @ (8008718 <HAL_DMA_Init+0x430>)
  19465. 800868e: 4293 cmp r3, r2
  19466. 8008690: d01c beq.n 80086cc <HAL_DMA_Init+0x3e4>
  19467. 8008692: 687b ldr r3, [r7, #4]
  19468. 8008694: 681b ldr r3, [r3, #0]
  19469. 8008696: 4a21 ldr r2, [pc, #132] @ (800871c <HAL_DMA_Init+0x434>)
  19470. 8008698: 4293 cmp r3, r2
  19471. 800869a: d017 beq.n 80086cc <HAL_DMA_Init+0x3e4>
  19472. 800869c: 687b ldr r3, [r7, #4]
  19473. 800869e: 681b ldr r3, [r3, #0]
  19474. 80086a0: 4a1f ldr r2, [pc, #124] @ (8008720 <HAL_DMA_Init+0x438>)
  19475. 80086a2: 4293 cmp r3, r2
  19476. 80086a4: d012 beq.n 80086cc <HAL_DMA_Init+0x3e4>
  19477. 80086a6: 687b ldr r3, [r7, #4]
  19478. 80086a8: 681b ldr r3, [r3, #0]
  19479. 80086aa: 4a1e ldr r2, [pc, #120] @ (8008724 <HAL_DMA_Init+0x43c>)
  19480. 80086ac: 4293 cmp r3, r2
  19481. 80086ae: d00d beq.n 80086cc <HAL_DMA_Init+0x3e4>
  19482. 80086b0: 687b ldr r3, [r7, #4]
  19483. 80086b2: 681b ldr r3, [r3, #0]
  19484. 80086b4: 4a1c ldr r2, [pc, #112] @ (8008728 <HAL_DMA_Init+0x440>)
  19485. 80086b6: 4293 cmp r3, r2
  19486. 80086b8: d008 beq.n 80086cc <HAL_DMA_Init+0x3e4>
  19487. 80086ba: 687b ldr r3, [r7, #4]
  19488. 80086bc: 681b ldr r3, [r3, #0]
  19489. 80086be: 4a1b ldr r2, [pc, #108] @ (800872c <HAL_DMA_Init+0x444>)
  19490. 80086c0: 4293 cmp r3, r2
  19491. 80086c2: d003 beq.n 80086cc <HAL_DMA_Init+0x3e4>
  19492. 80086c4: 687b ldr r3, [r7, #4]
  19493. 80086c6: 681b ldr r3, [r3, #0]
  19494. 80086c8: 4a19 ldr r2, [pc, #100] @ (8008730 <HAL_DMA_Init+0x448>)
  19495. 80086ca: 4293 cmp r3, r2
  19496. /* Check the request parameter */
  19497. assert_param(IS_BDMA_REQUEST(hdma->Init.Request));
  19498. }
  19499. /* Change DMA peripheral state */
  19500. hdma->State = HAL_DMA_STATE_BUSY;
  19501. 80086cc: 687b ldr r3, [r7, #4]
  19502. 80086ce: 2202 movs r2, #2
  19503. 80086d0: f883 2035 strb.w r2, [r3, #53] @ 0x35
  19504. /* Allocate lock resource */
  19505. __HAL_UNLOCK(hdma);
  19506. 80086d4: 687b ldr r3, [r7, #4]
  19507. 80086d6: 2200 movs r2, #0
  19508. 80086d8: f883 2034 strb.w r2, [r3, #52] @ 0x34
  19509. /* Get the CR register value */
  19510. registerValue = ((BDMA_Channel_TypeDef *)hdma->Instance)->CCR;
  19511. 80086dc: 687b ldr r3, [r7, #4]
  19512. 80086de: 681b ldr r3, [r3, #0]
  19513. 80086e0: 681b ldr r3, [r3, #0]
  19514. 80086e2: 617b str r3, [r7, #20]
  19515. /* Clear PL, MSIZE, PSIZE, MINC, PINC, CIRC, DIR, MEM2MEM, DBM and CT bits */
  19516. registerValue &= ((uint32_t)~(BDMA_CCR_PL | BDMA_CCR_MSIZE | BDMA_CCR_PSIZE | \
  19517. 80086e4: 697a ldr r2, [r7, #20]
  19518. 80086e6: 4b13 ldr r3, [pc, #76] @ (8008734 <HAL_DMA_Init+0x44c>)
  19519. 80086e8: 4013 ands r3, r2
  19520. 80086ea: 617b str r3, [r7, #20]
  19521. BDMA_CCR_MINC | BDMA_CCR_PINC | BDMA_CCR_CIRC | \
  19522. BDMA_CCR_DIR | BDMA_CCR_MEM2MEM | BDMA_CCR_DBM | \
  19523. BDMA_CCR_CT));
  19524. /* Prepare the DMA Channel configuration */
  19525. registerValue |= DMA_TO_BDMA_DIRECTION(hdma->Init.Direction) |
  19526. 80086ec: 687b ldr r3, [r7, #4]
  19527. 80086ee: 689b ldr r3, [r3, #8]
  19528. 80086f0: 2b40 cmp r3, #64 @ 0x40
  19529. 80086f2: d021 beq.n 8008738 <HAL_DMA_Init+0x450>
  19530. 80086f4: 687b ldr r3, [r7, #4]
  19531. 80086f6: 689b ldr r3, [r3, #8]
  19532. 80086f8: 2b80 cmp r3, #128 @ 0x80
  19533. 80086fa: d102 bne.n 8008702 <HAL_DMA_Init+0x41a>
  19534. 80086fc: f44f 4380 mov.w r3, #16384 @ 0x4000
  19535. 8008700: e01b b.n 800873a <HAL_DMA_Init+0x452>
  19536. 8008702: 2300 movs r3, #0
  19537. 8008704: e019 b.n 800873a <HAL_DMA_Init+0x452>
  19538. 8008706: bf00 nop
  19539. 8008708: fe10803f .word 0xfe10803f
  19540. 800870c: 5c001000 .word 0x5c001000
  19541. 8008710: ffff0000 .word 0xffff0000
  19542. 8008714: 58025408 .word 0x58025408
  19543. 8008718: 5802541c .word 0x5802541c
  19544. 800871c: 58025430 .word 0x58025430
  19545. 8008720: 58025444 .word 0x58025444
  19546. 8008724: 58025458 .word 0x58025458
  19547. 8008728: 5802546c .word 0x5802546c
  19548. 800872c: 58025480 .word 0x58025480
  19549. 8008730: 58025494 .word 0x58025494
  19550. 8008734: fffe000f .word 0xfffe000f
  19551. 8008738: 2310 movs r3, #16
  19552. DMA_TO_BDMA_PERIPHERAL_INC(hdma->Init.PeriphInc) |
  19553. 800873a: 687a ldr r2, [r7, #4]
  19554. 800873c: 68d2 ldr r2, [r2, #12]
  19555. 800873e: 08d2 lsrs r2, r2, #3
  19556. registerValue |= DMA_TO_BDMA_DIRECTION(hdma->Init.Direction) |
  19557. 8008740: 431a orrs r2, r3
  19558. DMA_TO_BDMA_MEMORY_INC(hdma->Init.MemInc) |
  19559. 8008742: 687b ldr r3, [r7, #4]
  19560. 8008744: 691b ldr r3, [r3, #16]
  19561. 8008746: 08db lsrs r3, r3, #3
  19562. DMA_TO_BDMA_PERIPHERAL_INC(hdma->Init.PeriphInc) |
  19563. 8008748: 431a orrs r2, r3
  19564. DMA_TO_BDMA_PDATA_SIZE(hdma->Init.PeriphDataAlignment) |
  19565. 800874a: 687b ldr r3, [r7, #4]
  19566. 800874c: 695b ldr r3, [r3, #20]
  19567. 800874e: 08db lsrs r3, r3, #3
  19568. DMA_TO_BDMA_MEMORY_INC(hdma->Init.MemInc) |
  19569. 8008750: 431a orrs r2, r3
  19570. DMA_TO_BDMA_MDATA_SIZE(hdma->Init.MemDataAlignment) |
  19571. 8008752: 687b ldr r3, [r7, #4]
  19572. 8008754: 699b ldr r3, [r3, #24]
  19573. 8008756: 08db lsrs r3, r3, #3
  19574. DMA_TO_BDMA_PDATA_SIZE(hdma->Init.PeriphDataAlignment) |
  19575. 8008758: 431a orrs r2, r3
  19576. DMA_TO_BDMA_MODE(hdma->Init.Mode) |
  19577. 800875a: 687b ldr r3, [r7, #4]
  19578. 800875c: 69db ldr r3, [r3, #28]
  19579. 800875e: 08db lsrs r3, r3, #3
  19580. DMA_TO_BDMA_MDATA_SIZE(hdma->Init.MemDataAlignment) |
  19581. 8008760: 431a orrs r2, r3
  19582. DMA_TO_BDMA_PRIORITY(hdma->Init.Priority);
  19583. 8008762: 687b ldr r3, [r7, #4]
  19584. 8008764: 6a1b ldr r3, [r3, #32]
  19585. 8008766: 091b lsrs r3, r3, #4
  19586. DMA_TO_BDMA_MODE(hdma->Init.Mode) |
  19587. 8008768: 4313 orrs r3, r2
  19588. registerValue |= DMA_TO_BDMA_DIRECTION(hdma->Init.Direction) |
  19589. 800876a: 697a ldr r2, [r7, #20]
  19590. 800876c: 4313 orrs r3, r2
  19591. 800876e: 617b str r3, [r7, #20]
  19592. /* Write to DMA Channel CR register */
  19593. ((BDMA_Channel_TypeDef *)hdma->Instance)->CCR = registerValue;
  19594. 8008770: 687b ldr r3, [r7, #4]
  19595. 8008772: 681b ldr r3, [r3, #0]
  19596. 8008774: 697a ldr r2, [r7, #20]
  19597. 8008776: 601a str r2, [r3, #0]
  19598. /* calculation of the channel index */
  19599. hdma->StreamIndex = (((uint32_t)((uint32_t*)hdma->Instance) - (uint32_t)BDMA_Channel0) / ((uint32_t)BDMA_Channel1 - (uint32_t)BDMA_Channel0)) << 2U;
  19600. 8008778: 687b ldr r3, [r7, #4]
  19601. 800877a: 681b ldr r3, [r3, #0]
  19602. 800877c: 461a mov r2, r3
  19603. 800877e: 4b6e ldr r3, [pc, #440] @ (8008938 <HAL_DMA_Init+0x650>)
  19604. 8008780: 4413 add r3, r2
  19605. 8008782: 4a6e ldr r2, [pc, #440] @ (800893c <HAL_DMA_Init+0x654>)
  19606. 8008784: fba2 2303 umull r2, r3, r2, r3
  19607. 8008788: 091b lsrs r3, r3, #4
  19608. 800878a: 009a lsls r2, r3, #2
  19609. 800878c: 687b ldr r3, [r7, #4]
  19610. 800878e: 65da str r2, [r3, #92] @ 0x5c
  19611. /* Initialize StreamBaseAddress and StreamIndex parameters to be used to calculate
  19612. DMA steam Base Address needed by HAL_DMA_IRQHandler() and HAL_DMA_PollForTransfer() */
  19613. regs_bdma = (BDMA_Base_Registers *)DMA_CalcBaseAndBitshift(hdma);
  19614. 8008790: 6878 ldr r0, [r7, #4]
  19615. 8008792: f002 f9a9 bl 800aae8 <DMA_CalcBaseAndBitshift>
  19616. 8008796: 4603 mov r3, r0
  19617. 8008798: 60fb str r3, [r7, #12]
  19618. /* Clear all interrupt flags */
  19619. regs_bdma->IFCR = ((BDMA_IFCR_CGIF0) << (hdma->StreamIndex & 0x1FU));
  19620. 800879a: 687b ldr r3, [r7, #4]
  19621. 800879c: 6ddb ldr r3, [r3, #92] @ 0x5c
  19622. 800879e: f003 031f and.w r3, r3, #31
  19623. 80087a2: 2201 movs r2, #1
  19624. 80087a4: 409a lsls r2, r3
  19625. 80087a6: 68fb ldr r3, [r7, #12]
  19626. 80087a8: 605a str r2, [r3, #4]
  19627. 80087aa: e008 b.n 80087be <HAL_DMA_Init+0x4d6>
  19628. }
  19629. else
  19630. {
  19631. hdma->ErrorCode = HAL_DMA_ERROR_PARAM;
  19632. 80087ac: 687b ldr r3, [r7, #4]
  19633. 80087ae: 2240 movs r2, #64 @ 0x40
  19634. 80087b0: 655a str r2, [r3, #84] @ 0x54
  19635. hdma->State = HAL_DMA_STATE_ERROR;
  19636. 80087b2: 687b ldr r3, [r7, #4]
  19637. 80087b4: 2203 movs r2, #3
  19638. 80087b6: f883 2035 strb.w r2, [r3, #53] @ 0x35
  19639. return HAL_ERROR;
  19640. 80087ba: 2301 movs r3, #1
  19641. 80087bc: e0b7 b.n 800892e <HAL_DMA_Init+0x646>
  19642. }
  19643. if(IS_DMA_DMAMUX_ALL_INSTANCE(hdma->Instance) != 0U) /* No DMAMUX available for BDMA1 */
  19644. 80087be: 687b ldr r3, [r7, #4]
  19645. 80087c0: 681b ldr r3, [r3, #0]
  19646. 80087c2: 4a5f ldr r2, [pc, #380] @ (8008940 <HAL_DMA_Init+0x658>)
  19647. 80087c4: 4293 cmp r3, r2
  19648. 80087c6: d072 beq.n 80088ae <HAL_DMA_Init+0x5c6>
  19649. 80087c8: 687b ldr r3, [r7, #4]
  19650. 80087ca: 681b ldr r3, [r3, #0]
  19651. 80087cc: 4a5d ldr r2, [pc, #372] @ (8008944 <HAL_DMA_Init+0x65c>)
  19652. 80087ce: 4293 cmp r3, r2
  19653. 80087d0: d06d beq.n 80088ae <HAL_DMA_Init+0x5c6>
  19654. 80087d2: 687b ldr r3, [r7, #4]
  19655. 80087d4: 681b ldr r3, [r3, #0]
  19656. 80087d6: 4a5c ldr r2, [pc, #368] @ (8008948 <HAL_DMA_Init+0x660>)
  19657. 80087d8: 4293 cmp r3, r2
  19658. 80087da: d068 beq.n 80088ae <HAL_DMA_Init+0x5c6>
  19659. 80087dc: 687b ldr r3, [r7, #4]
  19660. 80087de: 681b ldr r3, [r3, #0]
  19661. 80087e0: 4a5a ldr r2, [pc, #360] @ (800894c <HAL_DMA_Init+0x664>)
  19662. 80087e2: 4293 cmp r3, r2
  19663. 80087e4: d063 beq.n 80088ae <HAL_DMA_Init+0x5c6>
  19664. 80087e6: 687b ldr r3, [r7, #4]
  19665. 80087e8: 681b ldr r3, [r3, #0]
  19666. 80087ea: 4a59 ldr r2, [pc, #356] @ (8008950 <HAL_DMA_Init+0x668>)
  19667. 80087ec: 4293 cmp r3, r2
  19668. 80087ee: d05e beq.n 80088ae <HAL_DMA_Init+0x5c6>
  19669. 80087f0: 687b ldr r3, [r7, #4]
  19670. 80087f2: 681b ldr r3, [r3, #0]
  19671. 80087f4: 4a57 ldr r2, [pc, #348] @ (8008954 <HAL_DMA_Init+0x66c>)
  19672. 80087f6: 4293 cmp r3, r2
  19673. 80087f8: d059 beq.n 80088ae <HAL_DMA_Init+0x5c6>
  19674. 80087fa: 687b ldr r3, [r7, #4]
  19675. 80087fc: 681b ldr r3, [r3, #0]
  19676. 80087fe: 4a56 ldr r2, [pc, #344] @ (8008958 <HAL_DMA_Init+0x670>)
  19677. 8008800: 4293 cmp r3, r2
  19678. 8008802: d054 beq.n 80088ae <HAL_DMA_Init+0x5c6>
  19679. 8008804: 687b ldr r3, [r7, #4]
  19680. 8008806: 681b ldr r3, [r3, #0]
  19681. 8008808: 4a54 ldr r2, [pc, #336] @ (800895c <HAL_DMA_Init+0x674>)
  19682. 800880a: 4293 cmp r3, r2
  19683. 800880c: d04f beq.n 80088ae <HAL_DMA_Init+0x5c6>
  19684. 800880e: 687b ldr r3, [r7, #4]
  19685. 8008810: 681b ldr r3, [r3, #0]
  19686. 8008812: 4a53 ldr r2, [pc, #332] @ (8008960 <HAL_DMA_Init+0x678>)
  19687. 8008814: 4293 cmp r3, r2
  19688. 8008816: d04a beq.n 80088ae <HAL_DMA_Init+0x5c6>
  19689. 8008818: 687b ldr r3, [r7, #4]
  19690. 800881a: 681b ldr r3, [r3, #0]
  19691. 800881c: 4a51 ldr r2, [pc, #324] @ (8008964 <HAL_DMA_Init+0x67c>)
  19692. 800881e: 4293 cmp r3, r2
  19693. 8008820: d045 beq.n 80088ae <HAL_DMA_Init+0x5c6>
  19694. 8008822: 687b ldr r3, [r7, #4]
  19695. 8008824: 681b ldr r3, [r3, #0]
  19696. 8008826: 4a50 ldr r2, [pc, #320] @ (8008968 <HAL_DMA_Init+0x680>)
  19697. 8008828: 4293 cmp r3, r2
  19698. 800882a: d040 beq.n 80088ae <HAL_DMA_Init+0x5c6>
  19699. 800882c: 687b ldr r3, [r7, #4]
  19700. 800882e: 681b ldr r3, [r3, #0]
  19701. 8008830: 4a4e ldr r2, [pc, #312] @ (800896c <HAL_DMA_Init+0x684>)
  19702. 8008832: 4293 cmp r3, r2
  19703. 8008834: d03b beq.n 80088ae <HAL_DMA_Init+0x5c6>
  19704. 8008836: 687b ldr r3, [r7, #4]
  19705. 8008838: 681b ldr r3, [r3, #0]
  19706. 800883a: 4a4d ldr r2, [pc, #308] @ (8008970 <HAL_DMA_Init+0x688>)
  19707. 800883c: 4293 cmp r3, r2
  19708. 800883e: d036 beq.n 80088ae <HAL_DMA_Init+0x5c6>
  19709. 8008840: 687b ldr r3, [r7, #4]
  19710. 8008842: 681b ldr r3, [r3, #0]
  19711. 8008844: 4a4b ldr r2, [pc, #300] @ (8008974 <HAL_DMA_Init+0x68c>)
  19712. 8008846: 4293 cmp r3, r2
  19713. 8008848: d031 beq.n 80088ae <HAL_DMA_Init+0x5c6>
  19714. 800884a: 687b ldr r3, [r7, #4]
  19715. 800884c: 681b ldr r3, [r3, #0]
  19716. 800884e: 4a4a ldr r2, [pc, #296] @ (8008978 <HAL_DMA_Init+0x690>)
  19717. 8008850: 4293 cmp r3, r2
  19718. 8008852: d02c beq.n 80088ae <HAL_DMA_Init+0x5c6>
  19719. 8008854: 687b ldr r3, [r7, #4]
  19720. 8008856: 681b ldr r3, [r3, #0]
  19721. 8008858: 4a48 ldr r2, [pc, #288] @ (800897c <HAL_DMA_Init+0x694>)
  19722. 800885a: 4293 cmp r3, r2
  19723. 800885c: d027 beq.n 80088ae <HAL_DMA_Init+0x5c6>
  19724. 800885e: 687b ldr r3, [r7, #4]
  19725. 8008860: 681b ldr r3, [r3, #0]
  19726. 8008862: 4a47 ldr r2, [pc, #284] @ (8008980 <HAL_DMA_Init+0x698>)
  19727. 8008864: 4293 cmp r3, r2
  19728. 8008866: d022 beq.n 80088ae <HAL_DMA_Init+0x5c6>
  19729. 8008868: 687b ldr r3, [r7, #4]
  19730. 800886a: 681b ldr r3, [r3, #0]
  19731. 800886c: 4a45 ldr r2, [pc, #276] @ (8008984 <HAL_DMA_Init+0x69c>)
  19732. 800886e: 4293 cmp r3, r2
  19733. 8008870: d01d beq.n 80088ae <HAL_DMA_Init+0x5c6>
  19734. 8008872: 687b ldr r3, [r7, #4]
  19735. 8008874: 681b ldr r3, [r3, #0]
  19736. 8008876: 4a44 ldr r2, [pc, #272] @ (8008988 <HAL_DMA_Init+0x6a0>)
  19737. 8008878: 4293 cmp r3, r2
  19738. 800887a: d018 beq.n 80088ae <HAL_DMA_Init+0x5c6>
  19739. 800887c: 687b ldr r3, [r7, #4]
  19740. 800887e: 681b ldr r3, [r3, #0]
  19741. 8008880: 4a42 ldr r2, [pc, #264] @ (800898c <HAL_DMA_Init+0x6a4>)
  19742. 8008882: 4293 cmp r3, r2
  19743. 8008884: d013 beq.n 80088ae <HAL_DMA_Init+0x5c6>
  19744. 8008886: 687b ldr r3, [r7, #4]
  19745. 8008888: 681b ldr r3, [r3, #0]
  19746. 800888a: 4a41 ldr r2, [pc, #260] @ (8008990 <HAL_DMA_Init+0x6a8>)
  19747. 800888c: 4293 cmp r3, r2
  19748. 800888e: d00e beq.n 80088ae <HAL_DMA_Init+0x5c6>
  19749. 8008890: 687b ldr r3, [r7, #4]
  19750. 8008892: 681b ldr r3, [r3, #0]
  19751. 8008894: 4a3f ldr r2, [pc, #252] @ (8008994 <HAL_DMA_Init+0x6ac>)
  19752. 8008896: 4293 cmp r3, r2
  19753. 8008898: d009 beq.n 80088ae <HAL_DMA_Init+0x5c6>
  19754. 800889a: 687b ldr r3, [r7, #4]
  19755. 800889c: 681b ldr r3, [r3, #0]
  19756. 800889e: 4a3e ldr r2, [pc, #248] @ (8008998 <HAL_DMA_Init+0x6b0>)
  19757. 80088a0: 4293 cmp r3, r2
  19758. 80088a2: d004 beq.n 80088ae <HAL_DMA_Init+0x5c6>
  19759. 80088a4: 687b ldr r3, [r7, #4]
  19760. 80088a6: 681b ldr r3, [r3, #0]
  19761. 80088a8: 4a3c ldr r2, [pc, #240] @ (800899c <HAL_DMA_Init+0x6b4>)
  19762. 80088aa: 4293 cmp r3, r2
  19763. 80088ac: d101 bne.n 80088b2 <HAL_DMA_Init+0x5ca>
  19764. 80088ae: 2301 movs r3, #1
  19765. 80088b0: e000 b.n 80088b4 <HAL_DMA_Init+0x5cc>
  19766. 80088b2: 2300 movs r3, #0
  19767. 80088b4: 2b00 cmp r3, #0
  19768. 80088b6: d032 beq.n 800891e <HAL_DMA_Init+0x636>
  19769. {
  19770. /* Initialize parameters for DMAMUX channel :
  19771. DMAmuxChannel, DMAmuxChannelStatus and DMAmuxChannelStatusMask
  19772. */
  19773. DMA_CalcDMAMUXChannelBaseAndMask(hdma);
  19774. 80088b8: 6878 ldr r0, [r7, #4]
  19775. 80088ba: f002 fa43 bl 800ad44 <DMA_CalcDMAMUXChannelBaseAndMask>
  19776. if(hdma->Init.Direction == DMA_MEMORY_TO_MEMORY)
  19777. 80088be: 687b ldr r3, [r7, #4]
  19778. 80088c0: 689b ldr r3, [r3, #8]
  19779. 80088c2: 2b80 cmp r3, #128 @ 0x80
  19780. 80088c4: d102 bne.n 80088cc <HAL_DMA_Init+0x5e4>
  19781. {
  19782. /* if memory to memory force the request to 0*/
  19783. hdma->Init.Request = DMA_REQUEST_MEM2MEM;
  19784. 80088c6: 687b ldr r3, [r7, #4]
  19785. 80088c8: 2200 movs r2, #0
  19786. 80088ca: 605a str r2, [r3, #4]
  19787. }
  19788. /* Set peripheral request to DMAMUX channel */
  19789. hdma->DMAmuxChannel->CCR = (hdma->Init.Request & DMAMUX_CxCR_DMAREQ_ID);
  19790. 80088cc: 687b ldr r3, [r7, #4]
  19791. 80088ce: 685a ldr r2, [r3, #4]
  19792. 80088d0: 687b ldr r3, [r7, #4]
  19793. 80088d2: 6e1b ldr r3, [r3, #96] @ 0x60
  19794. 80088d4: b2d2 uxtb r2, r2
  19795. 80088d6: 601a str r2, [r3, #0]
  19796. /* Clear the DMAMUX synchro overrun flag */
  19797. hdma->DMAmuxChannelStatus->CFR = hdma->DMAmuxChannelStatusMask;
  19798. 80088d8: 687b ldr r3, [r7, #4]
  19799. 80088da: 6e5b ldr r3, [r3, #100] @ 0x64
  19800. 80088dc: 687a ldr r2, [r7, #4]
  19801. 80088de: 6e92 ldr r2, [r2, #104] @ 0x68
  19802. 80088e0: 605a str r2, [r3, #4]
  19803. /* Initialize parameters for DMAMUX request generator :
  19804. if the DMA request is DMA_REQUEST_GENERATOR0 to DMA_REQUEST_GENERATOR7
  19805. */
  19806. if((hdma->Init.Request >= DMA_REQUEST_GENERATOR0) && (hdma->Init.Request <= DMA_REQUEST_GENERATOR7))
  19807. 80088e2: 687b ldr r3, [r7, #4]
  19808. 80088e4: 685b ldr r3, [r3, #4]
  19809. 80088e6: 2b00 cmp r3, #0
  19810. 80088e8: d010 beq.n 800890c <HAL_DMA_Init+0x624>
  19811. 80088ea: 687b ldr r3, [r7, #4]
  19812. 80088ec: 685b ldr r3, [r3, #4]
  19813. 80088ee: 2b08 cmp r3, #8
  19814. 80088f0: d80c bhi.n 800890c <HAL_DMA_Init+0x624>
  19815. {
  19816. /* Initialize parameters for DMAMUX request generator :
  19817. DMAmuxRequestGen, DMAmuxRequestGenStatus and DMAmuxRequestGenStatusMask */
  19818. DMA_CalcDMAMUXRequestGenBaseAndMask(hdma);
  19819. 80088f2: 6878 ldr r0, [r7, #4]
  19820. 80088f4: f002 fac0 bl 800ae78 <DMA_CalcDMAMUXRequestGenBaseAndMask>
  19821. /* Reset the DMAMUX request generator register */
  19822. hdma->DMAmuxRequestGen->RGCR = 0U;
  19823. 80088f8: 687b ldr r3, [r7, #4]
  19824. 80088fa: 6edb ldr r3, [r3, #108] @ 0x6c
  19825. 80088fc: 2200 movs r2, #0
  19826. 80088fe: 601a str r2, [r3, #0]
  19827. /* Clear the DMAMUX request generator overrun flag */
  19828. hdma->DMAmuxRequestGenStatus->RGCFR = hdma->DMAmuxRequestGenStatusMask;
  19829. 8008900: 687b ldr r3, [r7, #4]
  19830. 8008902: 6f1b ldr r3, [r3, #112] @ 0x70
  19831. 8008904: 687a ldr r2, [r7, #4]
  19832. 8008906: 6f52 ldr r2, [r2, #116] @ 0x74
  19833. 8008908: 605a str r2, [r3, #4]
  19834. 800890a: e008 b.n 800891e <HAL_DMA_Init+0x636>
  19835. }
  19836. else
  19837. {
  19838. hdma->DMAmuxRequestGen = 0U;
  19839. 800890c: 687b ldr r3, [r7, #4]
  19840. 800890e: 2200 movs r2, #0
  19841. 8008910: 66da str r2, [r3, #108] @ 0x6c
  19842. hdma->DMAmuxRequestGenStatus = 0U;
  19843. 8008912: 687b ldr r3, [r7, #4]
  19844. 8008914: 2200 movs r2, #0
  19845. 8008916: 671a str r2, [r3, #112] @ 0x70
  19846. hdma->DMAmuxRequestGenStatusMask = 0U;
  19847. 8008918: 687b ldr r3, [r7, #4]
  19848. 800891a: 2200 movs r2, #0
  19849. 800891c: 675a str r2, [r3, #116] @ 0x74
  19850. }
  19851. }
  19852. /* Initialize the error code */
  19853. hdma->ErrorCode = HAL_DMA_ERROR_NONE;
  19854. 800891e: 687b ldr r3, [r7, #4]
  19855. 8008920: 2200 movs r2, #0
  19856. 8008922: 655a str r2, [r3, #84] @ 0x54
  19857. /* Initialize the DMA state */
  19858. hdma->State = HAL_DMA_STATE_READY;
  19859. 8008924: 687b ldr r3, [r7, #4]
  19860. 8008926: 2201 movs r2, #1
  19861. 8008928: f883 2035 strb.w r2, [r3, #53] @ 0x35
  19862. return HAL_OK;
  19863. 800892c: 2300 movs r3, #0
  19864. }
  19865. 800892e: 4618 mov r0, r3
  19866. 8008930: 3718 adds r7, #24
  19867. 8008932: 46bd mov sp, r7
  19868. 8008934: bd80 pop {r7, pc}
  19869. 8008936: bf00 nop
  19870. 8008938: a7fdabf8 .word 0xa7fdabf8
  19871. 800893c: cccccccd .word 0xcccccccd
  19872. 8008940: 40020010 .word 0x40020010
  19873. 8008944: 40020028 .word 0x40020028
  19874. 8008948: 40020040 .word 0x40020040
  19875. 800894c: 40020058 .word 0x40020058
  19876. 8008950: 40020070 .word 0x40020070
  19877. 8008954: 40020088 .word 0x40020088
  19878. 8008958: 400200a0 .word 0x400200a0
  19879. 800895c: 400200b8 .word 0x400200b8
  19880. 8008960: 40020410 .word 0x40020410
  19881. 8008964: 40020428 .word 0x40020428
  19882. 8008968: 40020440 .word 0x40020440
  19883. 800896c: 40020458 .word 0x40020458
  19884. 8008970: 40020470 .word 0x40020470
  19885. 8008974: 40020488 .word 0x40020488
  19886. 8008978: 400204a0 .word 0x400204a0
  19887. 800897c: 400204b8 .word 0x400204b8
  19888. 8008980: 58025408 .word 0x58025408
  19889. 8008984: 5802541c .word 0x5802541c
  19890. 8008988: 58025430 .word 0x58025430
  19891. 800898c: 58025444 .word 0x58025444
  19892. 8008990: 58025458 .word 0x58025458
  19893. 8008994: 5802546c .word 0x5802546c
  19894. 8008998: 58025480 .word 0x58025480
  19895. 800899c: 58025494 .word 0x58025494
  19896. 080089a0 <HAL_DMA_Start_IT>:
  19897. * @param DstAddress: The destination memory Buffer address
  19898. * @param DataLength: The length of data to be transferred from source to destination
  19899. * @retval HAL status
  19900. */
  19901. HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
  19902. {
  19903. 80089a0: b580 push {r7, lr}
  19904. 80089a2: b086 sub sp, #24
  19905. 80089a4: af00 add r7, sp, #0
  19906. 80089a6: 60f8 str r0, [r7, #12]
  19907. 80089a8: 60b9 str r1, [r7, #8]
  19908. 80089aa: 607a str r2, [r7, #4]
  19909. 80089ac: 603b str r3, [r7, #0]
  19910. HAL_StatusTypeDef status = HAL_OK;
  19911. 80089ae: 2300 movs r3, #0
  19912. 80089b0: 75fb strb r3, [r7, #23]
  19913. /* Check the parameters */
  19914. assert_param(IS_DMA_BUFFER_SIZE(DataLength));
  19915. /* Check the DMA peripheral handle */
  19916. if(hdma == NULL)
  19917. 80089b2: 68fb ldr r3, [r7, #12]
  19918. 80089b4: 2b00 cmp r3, #0
  19919. 80089b6: d101 bne.n 80089bc <HAL_DMA_Start_IT+0x1c>
  19920. {
  19921. return HAL_ERROR;
  19922. 80089b8: 2301 movs r3, #1
  19923. 80089ba: e226 b.n 8008e0a <HAL_DMA_Start_IT+0x46a>
  19924. }
  19925. /* Process locked */
  19926. __HAL_LOCK(hdma);
  19927. 80089bc: 68fb ldr r3, [r7, #12]
  19928. 80089be: f893 3034 ldrb.w r3, [r3, #52] @ 0x34
  19929. 80089c2: 2b01 cmp r3, #1
  19930. 80089c4: d101 bne.n 80089ca <HAL_DMA_Start_IT+0x2a>
  19931. 80089c6: 2302 movs r3, #2
  19932. 80089c8: e21f b.n 8008e0a <HAL_DMA_Start_IT+0x46a>
  19933. 80089ca: 68fb ldr r3, [r7, #12]
  19934. 80089cc: 2201 movs r2, #1
  19935. 80089ce: f883 2034 strb.w r2, [r3, #52] @ 0x34
  19936. if(HAL_DMA_STATE_READY == hdma->State)
  19937. 80089d2: 68fb ldr r3, [r7, #12]
  19938. 80089d4: f893 3035 ldrb.w r3, [r3, #53] @ 0x35
  19939. 80089d8: b2db uxtb r3, r3
  19940. 80089da: 2b01 cmp r3, #1
  19941. 80089dc: f040 820a bne.w 8008df4 <HAL_DMA_Start_IT+0x454>
  19942. {
  19943. /* Change DMA peripheral state */
  19944. hdma->State = HAL_DMA_STATE_BUSY;
  19945. 80089e0: 68fb ldr r3, [r7, #12]
  19946. 80089e2: 2202 movs r2, #2
  19947. 80089e4: f883 2035 strb.w r2, [r3, #53] @ 0x35
  19948. /* Initialize the error code */
  19949. hdma->ErrorCode = HAL_DMA_ERROR_NONE;
  19950. 80089e8: 68fb ldr r3, [r7, #12]
  19951. 80089ea: 2200 movs r2, #0
  19952. 80089ec: 655a str r2, [r3, #84] @ 0x54
  19953. /* Disable the peripheral */
  19954. __HAL_DMA_DISABLE(hdma);
  19955. 80089ee: 68fb ldr r3, [r7, #12]
  19956. 80089f0: 681b ldr r3, [r3, #0]
  19957. 80089f2: 4a68 ldr r2, [pc, #416] @ (8008b94 <HAL_DMA_Start_IT+0x1f4>)
  19958. 80089f4: 4293 cmp r3, r2
  19959. 80089f6: d04a beq.n 8008a8e <HAL_DMA_Start_IT+0xee>
  19960. 80089f8: 68fb ldr r3, [r7, #12]
  19961. 80089fa: 681b ldr r3, [r3, #0]
  19962. 80089fc: 4a66 ldr r2, [pc, #408] @ (8008b98 <HAL_DMA_Start_IT+0x1f8>)
  19963. 80089fe: 4293 cmp r3, r2
  19964. 8008a00: d045 beq.n 8008a8e <HAL_DMA_Start_IT+0xee>
  19965. 8008a02: 68fb ldr r3, [r7, #12]
  19966. 8008a04: 681b ldr r3, [r3, #0]
  19967. 8008a06: 4a65 ldr r2, [pc, #404] @ (8008b9c <HAL_DMA_Start_IT+0x1fc>)
  19968. 8008a08: 4293 cmp r3, r2
  19969. 8008a0a: d040 beq.n 8008a8e <HAL_DMA_Start_IT+0xee>
  19970. 8008a0c: 68fb ldr r3, [r7, #12]
  19971. 8008a0e: 681b ldr r3, [r3, #0]
  19972. 8008a10: 4a63 ldr r2, [pc, #396] @ (8008ba0 <HAL_DMA_Start_IT+0x200>)
  19973. 8008a12: 4293 cmp r3, r2
  19974. 8008a14: d03b beq.n 8008a8e <HAL_DMA_Start_IT+0xee>
  19975. 8008a16: 68fb ldr r3, [r7, #12]
  19976. 8008a18: 681b ldr r3, [r3, #0]
  19977. 8008a1a: 4a62 ldr r2, [pc, #392] @ (8008ba4 <HAL_DMA_Start_IT+0x204>)
  19978. 8008a1c: 4293 cmp r3, r2
  19979. 8008a1e: d036 beq.n 8008a8e <HAL_DMA_Start_IT+0xee>
  19980. 8008a20: 68fb ldr r3, [r7, #12]
  19981. 8008a22: 681b ldr r3, [r3, #0]
  19982. 8008a24: 4a60 ldr r2, [pc, #384] @ (8008ba8 <HAL_DMA_Start_IT+0x208>)
  19983. 8008a26: 4293 cmp r3, r2
  19984. 8008a28: d031 beq.n 8008a8e <HAL_DMA_Start_IT+0xee>
  19985. 8008a2a: 68fb ldr r3, [r7, #12]
  19986. 8008a2c: 681b ldr r3, [r3, #0]
  19987. 8008a2e: 4a5f ldr r2, [pc, #380] @ (8008bac <HAL_DMA_Start_IT+0x20c>)
  19988. 8008a30: 4293 cmp r3, r2
  19989. 8008a32: d02c beq.n 8008a8e <HAL_DMA_Start_IT+0xee>
  19990. 8008a34: 68fb ldr r3, [r7, #12]
  19991. 8008a36: 681b ldr r3, [r3, #0]
  19992. 8008a38: 4a5d ldr r2, [pc, #372] @ (8008bb0 <HAL_DMA_Start_IT+0x210>)
  19993. 8008a3a: 4293 cmp r3, r2
  19994. 8008a3c: d027 beq.n 8008a8e <HAL_DMA_Start_IT+0xee>
  19995. 8008a3e: 68fb ldr r3, [r7, #12]
  19996. 8008a40: 681b ldr r3, [r3, #0]
  19997. 8008a42: 4a5c ldr r2, [pc, #368] @ (8008bb4 <HAL_DMA_Start_IT+0x214>)
  19998. 8008a44: 4293 cmp r3, r2
  19999. 8008a46: d022 beq.n 8008a8e <HAL_DMA_Start_IT+0xee>
  20000. 8008a48: 68fb ldr r3, [r7, #12]
  20001. 8008a4a: 681b ldr r3, [r3, #0]
  20002. 8008a4c: 4a5a ldr r2, [pc, #360] @ (8008bb8 <HAL_DMA_Start_IT+0x218>)
  20003. 8008a4e: 4293 cmp r3, r2
  20004. 8008a50: d01d beq.n 8008a8e <HAL_DMA_Start_IT+0xee>
  20005. 8008a52: 68fb ldr r3, [r7, #12]
  20006. 8008a54: 681b ldr r3, [r3, #0]
  20007. 8008a56: 4a59 ldr r2, [pc, #356] @ (8008bbc <HAL_DMA_Start_IT+0x21c>)
  20008. 8008a58: 4293 cmp r3, r2
  20009. 8008a5a: d018 beq.n 8008a8e <HAL_DMA_Start_IT+0xee>
  20010. 8008a5c: 68fb ldr r3, [r7, #12]
  20011. 8008a5e: 681b ldr r3, [r3, #0]
  20012. 8008a60: 4a57 ldr r2, [pc, #348] @ (8008bc0 <HAL_DMA_Start_IT+0x220>)
  20013. 8008a62: 4293 cmp r3, r2
  20014. 8008a64: d013 beq.n 8008a8e <HAL_DMA_Start_IT+0xee>
  20015. 8008a66: 68fb ldr r3, [r7, #12]
  20016. 8008a68: 681b ldr r3, [r3, #0]
  20017. 8008a6a: 4a56 ldr r2, [pc, #344] @ (8008bc4 <HAL_DMA_Start_IT+0x224>)
  20018. 8008a6c: 4293 cmp r3, r2
  20019. 8008a6e: d00e beq.n 8008a8e <HAL_DMA_Start_IT+0xee>
  20020. 8008a70: 68fb ldr r3, [r7, #12]
  20021. 8008a72: 681b ldr r3, [r3, #0]
  20022. 8008a74: 4a54 ldr r2, [pc, #336] @ (8008bc8 <HAL_DMA_Start_IT+0x228>)
  20023. 8008a76: 4293 cmp r3, r2
  20024. 8008a78: d009 beq.n 8008a8e <HAL_DMA_Start_IT+0xee>
  20025. 8008a7a: 68fb ldr r3, [r7, #12]
  20026. 8008a7c: 681b ldr r3, [r3, #0]
  20027. 8008a7e: 4a53 ldr r2, [pc, #332] @ (8008bcc <HAL_DMA_Start_IT+0x22c>)
  20028. 8008a80: 4293 cmp r3, r2
  20029. 8008a82: d004 beq.n 8008a8e <HAL_DMA_Start_IT+0xee>
  20030. 8008a84: 68fb ldr r3, [r7, #12]
  20031. 8008a86: 681b ldr r3, [r3, #0]
  20032. 8008a88: 4a51 ldr r2, [pc, #324] @ (8008bd0 <HAL_DMA_Start_IT+0x230>)
  20033. 8008a8a: 4293 cmp r3, r2
  20034. 8008a8c: d108 bne.n 8008aa0 <HAL_DMA_Start_IT+0x100>
  20035. 8008a8e: 68fb ldr r3, [r7, #12]
  20036. 8008a90: 681b ldr r3, [r3, #0]
  20037. 8008a92: 681a ldr r2, [r3, #0]
  20038. 8008a94: 68fb ldr r3, [r7, #12]
  20039. 8008a96: 681b ldr r3, [r3, #0]
  20040. 8008a98: f022 0201 bic.w r2, r2, #1
  20041. 8008a9c: 601a str r2, [r3, #0]
  20042. 8008a9e: e007 b.n 8008ab0 <HAL_DMA_Start_IT+0x110>
  20043. 8008aa0: 68fb ldr r3, [r7, #12]
  20044. 8008aa2: 681b ldr r3, [r3, #0]
  20045. 8008aa4: 681a ldr r2, [r3, #0]
  20046. 8008aa6: 68fb ldr r3, [r7, #12]
  20047. 8008aa8: 681b ldr r3, [r3, #0]
  20048. 8008aaa: f022 0201 bic.w r2, r2, #1
  20049. 8008aae: 601a str r2, [r3, #0]
  20050. /* Configure the source, destination address and the data length */
  20051. DMA_SetConfig(hdma, SrcAddress, DstAddress, DataLength);
  20052. 8008ab0: 683b ldr r3, [r7, #0]
  20053. 8008ab2: 687a ldr r2, [r7, #4]
  20054. 8008ab4: 68b9 ldr r1, [r7, #8]
  20055. 8008ab6: 68f8 ldr r0, [r7, #12]
  20056. 8008ab8: f001 fe6a bl 800a790 <DMA_SetConfig>
  20057. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  20058. 8008abc: 68fb ldr r3, [r7, #12]
  20059. 8008abe: 681b ldr r3, [r3, #0]
  20060. 8008ac0: 4a34 ldr r2, [pc, #208] @ (8008b94 <HAL_DMA_Start_IT+0x1f4>)
  20061. 8008ac2: 4293 cmp r3, r2
  20062. 8008ac4: d04a beq.n 8008b5c <HAL_DMA_Start_IT+0x1bc>
  20063. 8008ac6: 68fb ldr r3, [r7, #12]
  20064. 8008ac8: 681b ldr r3, [r3, #0]
  20065. 8008aca: 4a33 ldr r2, [pc, #204] @ (8008b98 <HAL_DMA_Start_IT+0x1f8>)
  20066. 8008acc: 4293 cmp r3, r2
  20067. 8008ace: d045 beq.n 8008b5c <HAL_DMA_Start_IT+0x1bc>
  20068. 8008ad0: 68fb ldr r3, [r7, #12]
  20069. 8008ad2: 681b ldr r3, [r3, #0]
  20070. 8008ad4: 4a31 ldr r2, [pc, #196] @ (8008b9c <HAL_DMA_Start_IT+0x1fc>)
  20071. 8008ad6: 4293 cmp r3, r2
  20072. 8008ad8: d040 beq.n 8008b5c <HAL_DMA_Start_IT+0x1bc>
  20073. 8008ada: 68fb ldr r3, [r7, #12]
  20074. 8008adc: 681b ldr r3, [r3, #0]
  20075. 8008ade: 4a30 ldr r2, [pc, #192] @ (8008ba0 <HAL_DMA_Start_IT+0x200>)
  20076. 8008ae0: 4293 cmp r3, r2
  20077. 8008ae2: d03b beq.n 8008b5c <HAL_DMA_Start_IT+0x1bc>
  20078. 8008ae4: 68fb ldr r3, [r7, #12]
  20079. 8008ae6: 681b ldr r3, [r3, #0]
  20080. 8008ae8: 4a2e ldr r2, [pc, #184] @ (8008ba4 <HAL_DMA_Start_IT+0x204>)
  20081. 8008aea: 4293 cmp r3, r2
  20082. 8008aec: d036 beq.n 8008b5c <HAL_DMA_Start_IT+0x1bc>
  20083. 8008aee: 68fb ldr r3, [r7, #12]
  20084. 8008af0: 681b ldr r3, [r3, #0]
  20085. 8008af2: 4a2d ldr r2, [pc, #180] @ (8008ba8 <HAL_DMA_Start_IT+0x208>)
  20086. 8008af4: 4293 cmp r3, r2
  20087. 8008af6: d031 beq.n 8008b5c <HAL_DMA_Start_IT+0x1bc>
  20088. 8008af8: 68fb ldr r3, [r7, #12]
  20089. 8008afa: 681b ldr r3, [r3, #0]
  20090. 8008afc: 4a2b ldr r2, [pc, #172] @ (8008bac <HAL_DMA_Start_IT+0x20c>)
  20091. 8008afe: 4293 cmp r3, r2
  20092. 8008b00: d02c beq.n 8008b5c <HAL_DMA_Start_IT+0x1bc>
  20093. 8008b02: 68fb ldr r3, [r7, #12]
  20094. 8008b04: 681b ldr r3, [r3, #0]
  20095. 8008b06: 4a2a ldr r2, [pc, #168] @ (8008bb0 <HAL_DMA_Start_IT+0x210>)
  20096. 8008b08: 4293 cmp r3, r2
  20097. 8008b0a: d027 beq.n 8008b5c <HAL_DMA_Start_IT+0x1bc>
  20098. 8008b0c: 68fb ldr r3, [r7, #12]
  20099. 8008b0e: 681b ldr r3, [r3, #0]
  20100. 8008b10: 4a28 ldr r2, [pc, #160] @ (8008bb4 <HAL_DMA_Start_IT+0x214>)
  20101. 8008b12: 4293 cmp r3, r2
  20102. 8008b14: d022 beq.n 8008b5c <HAL_DMA_Start_IT+0x1bc>
  20103. 8008b16: 68fb ldr r3, [r7, #12]
  20104. 8008b18: 681b ldr r3, [r3, #0]
  20105. 8008b1a: 4a27 ldr r2, [pc, #156] @ (8008bb8 <HAL_DMA_Start_IT+0x218>)
  20106. 8008b1c: 4293 cmp r3, r2
  20107. 8008b1e: d01d beq.n 8008b5c <HAL_DMA_Start_IT+0x1bc>
  20108. 8008b20: 68fb ldr r3, [r7, #12]
  20109. 8008b22: 681b ldr r3, [r3, #0]
  20110. 8008b24: 4a25 ldr r2, [pc, #148] @ (8008bbc <HAL_DMA_Start_IT+0x21c>)
  20111. 8008b26: 4293 cmp r3, r2
  20112. 8008b28: d018 beq.n 8008b5c <HAL_DMA_Start_IT+0x1bc>
  20113. 8008b2a: 68fb ldr r3, [r7, #12]
  20114. 8008b2c: 681b ldr r3, [r3, #0]
  20115. 8008b2e: 4a24 ldr r2, [pc, #144] @ (8008bc0 <HAL_DMA_Start_IT+0x220>)
  20116. 8008b30: 4293 cmp r3, r2
  20117. 8008b32: d013 beq.n 8008b5c <HAL_DMA_Start_IT+0x1bc>
  20118. 8008b34: 68fb ldr r3, [r7, #12]
  20119. 8008b36: 681b ldr r3, [r3, #0]
  20120. 8008b38: 4a22 ldr r2, [pc, #136] @ (8008bc4 <HAL_DMA_Start_IT+0x224>)
  20121. 8008b3a: 4293 cmp r3, r2
  20122. 8008b3c: d00e beq.n 8008b5c <HAL_DMA_Start_IT+0x1bc>
  20123. 8008b3e: 68fb ldr r3, [r7, #12]
  20124. 8008b40: 681b ldr r3, [r3, #0]
  20125. 8008b42: 4a21 ldr r2, [pc, #132] @ (8008bc8 <HAL_DMA_Start_IT+0x228>)
  20126. 8008b44: 4293 cmp r3, r2
  20127. 8008b46: d009 beq.n 8008b5c <HAL_DMA_Start_IT+0x1bc>
  20128. 8008b48: 68fb ldr r3, [r7, #12]
  20129. 8008b4a: 681b ldr r3, [r3, #0]
  20130. 8008b4c: 4a1f ldr r2, [pc, #124] @ (8008bcc <HAL_DMA_Start_IT+0x22c>)
  20131. 8008b4e: 4293 cmp r3, r2
  20132. 8008b50: d004 beq.n 8008b5c <HAL_DMA_Start_IT+0x1bc>
  20133. 8008b52: 68fb ldr r3, [r7, #12]
  20134. 8008b54: 681b ldr r3, [r3, #0]
  20135. 8008b56: 4a1e ldr r2, [pc, #120] @ (8008bd0 <HAL_DMA_Start_IT+0x230>)
  20136. 8008b58: 4293 cmp r3, r2
  20137. 8008b5a: d101 bne.n 8008b60 <HAL_DMA_Start_IT+0x1c0>
  20138. 8008b5c: 2301 movs r3, #1
  20139. 8008b5e: e000 b.n 8008b62 <HAL_DMA_Start_IT+0x1c2>
  20140. 8008b60: 2300 movs r3, #0
  20141. 8008b62: 2b00 cmp r3, #0
  20142. 8008b64: d036 beq.n 8008bd4 <HAL_DMA_Start_IT+0x234>
  20143. {
  20144. /* Enable Common interrupts*/
  20145. 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));
  20146. 8008b66: 68fb ldr r3, [r7, #12]
  20147. 8008b68: 681b ldr r3, [r3, #0]
  20148. 8008b6a: 681b ldr r3, [r3, #0]
  20149. 8008b6c: f023 021e bic.w r2, r3, #30
  20150. 8008b70: 68fb ldr r3, [r7, #12]
  20151. 8008b72: 681b ldr r3, [r3, #0]
  20152. 8008b74: f042 0216 orr.w r2, r2, #22
  20153. 8008b78: 601a str r2, [r3, #0]
  20154. if(hdma->XferHalfCpltCallback != NULL)
  20155. 8008b7a: 68fb ldr r3, [r7, #12]
  20156. 8008b7c: 6c1b ldr r3, [r3, #64] @ 0x40
  20157. 8008b7e: 2b00 cmp r3, #0
  20158. 8008b80: d03e beq.n 8008c00 <HAL_DMA_Start_IT+0x260>
  20159. {
  20160. /* Enable Half Transfer IT if corresponding Callback is set */
  20161. ((DMA_Stream_TypeDef *)hdma->Instance)->CR |= DMA_IT_HT;
  20162. 8008b82: 68fb ldr r3, [r7, #12]
  20163. 8008b84: 681b ldr r3, [r3, #0]
  20164. 8008b86: 681a ldr r2, [r3, #0]
  20165. 8008b88: 68fb ldr r3, [r7, #12]
  20166. 8008b8a: 681b ldr r3, [r3, #0]
  20167. 8008b8c: f042 0208 orr.w r2, r2, #8
  20168. 8008b90: 601a str r2, [r3, #0]
  20169. 8008b92: e035 b.n 8008c00 <HAL_DMA_Start_IT+0x260>
  20170. 8008b94: 40020010 .word 0x40020010
  20171. 8008b98: 40020028 .word 0x40020028
  20172. 8008b9c: 40020040 .word 0x40020040
  20173. 8008ba0: 40020058 .word 0x40020058
  20174. 8008ba4: 40020070 .word 0x40020070
  20175. 8008ba8: 40020088 .word 0x40020088
  20176. 8008bac: 400200a0 .word 0x400200a0
  20177. 8008bb0: 400200b8 .word 0x400200b8
  20178. 8008bb4: 40020410 .word 0x40020410
  20179. 8008bb8: 40020428 .word 0x40020428
  20180. 8008bbc: 40020440 .word 0x40020440
  20181. 8008bc0: 40020458 .word 0x40020458
  20182. 8008bc4: 40020470 .word 0x40020470
  20183. 8008bc8: 40020488 .word 0x40020488
  20184. 8008bcc: 400204a0 .word 0x400204a0
  20185. 8008bd0: 400204b8 .word 0x400204b8
  20186. }
  20187. }
  20188. else /* BDMA channel */
  20189. {
  20190. /* Enable Common interrupts */
  20191. MODIFY_REG(((BDMA_Channel_TypeDef *)hdma->Instance)->CCR, (BDMA_CCR_TCIE | BDMA_CCR_HTIE | BDMA_CCR_TEIE), (BDMA_CCR_TCIE | BDMA_CCR_TEIE));
  20192. 8008bd4: 68fb ldr r3, [r7, #12]
  20193. 8008bd6: 681b ldr r3, [r3, #0]
  20194. 8008bd8: 681b ldr r3, [r3, #0]
  20195. 8008bda: f023 020e bic.w r2, r3, #14
  20196. 8008bde: 68fb ldr r3, [r7, #12]
  20197. 8008be0: 681b ldr r3, [r3, #0]
  20198. 8008be2: f042 020a orr.w r2, r2, #10
  20199. 8008be6: 601a str r2, [r3, #0]
  20200. if(hdma->XferHalfCpltCallback != NULL)
  20201. 8008be8: 68fb ldr r3, [r7, #12]
  20202. 8008bea: 6c1b ldr r3, [r3, #64] @ 0x40
  20203. 8008bec: 2b00 cmp r3, #0
  20204. 8008bee: d007 beq.n 8008c00 <HAL_DMA_Start_IT+0x260>
  20205. {
  20206. /*Enable Half Transfer IT if corresponding Callback is set */
  20207. ((BDMA_Channel_TypeDef *)hdma->Instance)->CCR |= BDMA_CCR_HTIE;
  20208. 8008bf0: 68fb ldr r3, [r7, #12]
  20209. 8008bf2: 681b ldr r3, [r3, #0]
  20210. 8008bf4: 681a ldr r2, [r3, #0]
  20211. 8008bf6: 68fb ldr r3, [r7, #12]
  20212. 8008bf8: 681b ldr r3, [r3, #0]
  20213. 8008bfa: f042 0204 orr.w r2, r2, #4
  20214. 8008bfe: 601a str r2, [r3, #0]
  20215. }
  20216. }
  20217. if(IS_DMA_DMAMUX_ALL_INSTANCE(hdma->Instance) != 0U) /* No DMAMUX available for BDMA1 */
  20218. 8008c00: 68fb ldr r3, [r7, #12]
  20219. 8008c02: 681b ldr r3, [r3, #0]
  20220. 8008c04: 4a83 ldr r2, [pc, #524] @ (8008e14 <HAL_DMA_Start_IT+0x474>)
  20221. 8008c06: 4293 cmp r3, r2
  20222. 8008c08: d072 beq.n 8008cf0 <HAL_DMA_Start_IT+0x350>
  20223. 8008c0a: 68fb ldr r3, [r7, #12]
  20224. 8008c0c: 681b ldr r3, [r3, #0]
  20225. 8008c0e: 4a82 ldr r2, [pc, #520] @ (8008e18 <HAL_DMA_Start_IT+0x478>)
  20226. 8008c10: 4293 cmp r3, r2
  20227. 8008c12: d06d beq.n 8008cf0 <HAL_DMA_Start_IT+0x350>
  20228. 8008c14: 68fb ldr r3, [r7, #12]
  20229. 8008c16: 681b ldr r3, [r3, #0]
  20230. 8008c18: 4a80 ldr r2, [pc, #512] @ (8008e1c <HAL_DMA_Start_IT+0x47c>)
  20231. 8008c1a: 4293 cmp r3, r2
  20232. 8008c1c: d068 beq.n 8008cf0 <HAL_DMA_Start_IT+0x350>
  20233. 8008c1e: 68fb ldr r3, [r7, #12]
  20234. 8008c20: 681b ldr r3, [r3, #0]
  20235. 8008c22: 4a7f ldr r2, [pc, #508] @ (8008e20 <HAL_DMA_Start_IT+0x480>)
  20236. 8008c24: 4293 cmp r3, r2
  20237. 8008c26: d063 beq.n 8008cf0 <HAL_DMA_Start_IT+0x350>
  20238. 8008c28: 68fb ldr r3, [r7, #12]
  20239. 8008c2a: 681b ldr r3, [r3, #0]
  20240. 8008c2c: 4a7d ldr r2, [pc, #500] @ (8008e24 <HAL_DMA_Start_IT+0x484>)
  20241. 8008c2e: 4293 cmp r3, r2
  20242. 8008c30: d05e beq.n 8008cf0 <HAL_DMA_Start_IT+0x350>
  20243. 8008c32: 68fb ldr r3, [r7, #12]
  20244. 8008c34: 681b ldr r3, [r3, #0]
  20245. 8008c36: 4a7c ldr r2, [pc, #496] @ (8008e28 <HAL_DMA_Start_IT+0x488>)
  20246. 8008c38: 4293 cmp r3, r2
  20247. 8008c3a: d059 beq.n 8008cf0 <HAL_DMA_Start_IT+0x350>
  20248. 8008c3c: 68fb ldr r3, [r7, #12]
  20249. 8008c3e: 681b ldr r3, [r3, #0]
  20250. 8008c40: 4a7a ldr r2, [pc, #488] @ (8008e2c <HAL_DMA_Start_IT+0x48c>)
  20251. 8008c42: 4293 cmp r3, r2
  20252. 8008c44: d054 beq.n 8008cf0 <HAL_DMA_Start_IT+0x350>
  20253. 8008c46: 68fb ldr r3, [r7, #12]
  20254. 8008c48: 681b ldr r3, [r3, #0]
  20255. 8008c4a: 4a79 ldr r2, [pc, #484] @ (8008e30 <HAL_DMA_Start_IT+0x490>)
  20256. 8008c4c: 4293 cmp r3, r2
  20257. 8008c4e: d04f beq.n 8008cf0 <HAL_DMA_Start_IT+0x350>
  20258. 8008c50: 68fb ldr r3, [r7, #12]
  20259. 8008c52: 681b ldr r3, [r3, #0]
  20260. 8008c54: 4a77 ldr r2, [pc, #476] @ (8008e34 <HAL_DMA_Start_IT+0x494>)
  20261. 8008c56: 4293 cmp r3, r2
  20262. 8008c58: d04a beq.n 8008cf0 <HAL_DMA_Start_IT+0x350>
  20263. 8008c5a: 68fb ldr r3, [r7, #12]
  20264. 8008c5c: 681b ldr r3, [r3, #0]
  20265. 8008c5e: 4a76 ldr r2, [pc, #472] @ (8008e38 <HAL_DMA_Start_IT+0x498>)
  20266. 8008c60: 4293 cmp r3, r2
  20267. 8008c62: d045 beq.n 8008cf0 <HAL_DMA_Start_IT+0x350>
  20268. 8008c64: 68fb ldr r3, [r7, #12]
  20269. 8008c66: 681b ldr r3, [r3, #0]
  20270. 8008c68: 4a74 ldr r2, [pc, #464] @ (8008e3c <HAL_DMA_Start_IT+0x49c>)
  20271. 8008c6a: 4293 cmp r3, r2
  20272. 8008c6c: d040 beq.n 8008cf0 <HAL_DMA_Start_IT+0x350>
  20273. 8008c6e: 68fb ldr r3, [r7, #12]
  20274. 8008c70: 681b ldr r3, [r3, #0]
  20275. 8008c72: 4a73 ldr r2, [pc, #460] @ (8008e40 <HAL_DMA_Start_IT+0x4a0>)
  20276. 8008c74: 4293 cmp r3, r2
  20277. 8008c76: d03b beq.n 8008cf0 <HAL_DMA_Start_IT+0x350>
  20278. 8008c78: 68fb ldr r3, [r7, #12]
  20279. 8008c7a: 681b ldr r3, [r3, #0]
  20280. 8008c7c: 4a71 ldr r2, [pc, #452] @ (8008e44 <HAL_DMA_Start_IT+0x4a4>)
  20281. 8008c7e: 4293 cmp r3, r2
  20282. 8008c80: d036 beq.n 8008cf0 <HAL_DMA_Start_IT+0x350>
  20283. 8008c82: 68fb ldr r3, [r7, #12]
  20284. 8008c84: 681b ldr r3, [r3, #0]
  20285. 8008c86: 4a70 ldr r2, [pc, #448] @ (8008e48 <HAL_DMA_Start_IT+0x4a8>)
  20286. 8008c88: 4293 cmp r3, r2
  20287. 8008c8a: d031 beq.n 8008cf0 <HAL_DMA_Start_IT+0x350>
  20288. 8008c8c: 68fb ldr r3, [r7, #12]
  20289. 8008c8e: 681b ldr r3, [r3, #0]
  20290. 8008c90: 4a6e ldr r2, [pc, #440] @ (8008e4c <HAL_DMA_Start_IT+0x4ac>)
  20291. 8008c92: 4293 cmp r3, r2
  20292. 8008c94: d02c beq.n 8008cf0 <HAL_DMA_Start_IT+0x350>
  20293. 8008c96: 68fb ldr r3, [r7, #12]
  20294. 8008c98: 681b ldr r3, [r3, #0]
  20295. 8008c9a: 4a6d ldr r2, [pc, #436] @ (8008e50 <HAL_DMA_Start_IT+0x4b0>)
  20296. 8008c9c: 4293 cmp r3, r2
  20297. 8008c9e: d027 beq.n 8008cf0 <HAL_DMA_Start_IT+0x350>
  20298. 8008ca0: 68fb ldr r3, [r7, #12]
  20299. 8008ca2: 681b ldr r3, [r3, #0]
  20300. 8008ca4: 4a6b ldr r2, [pc, #428] @ (8008e54 <HAL_DMA_Start_IT+0x4b4>)
  20301. 8008ca6: 4293 cmp r3, r2
  20302. 8008ca8: d022 beq.n 8008cf0 <HAL_DMA_Start_IT+0x350>
  20303. 8008caa: 68fb ldr r3, [r7, #12]
  20304. 8008cac: 681b ldr r3, [r3, #0]
  20305. 8008cae: 4a6a ldr r2, [pc, #424] @ (8008e58 <HAL_DMA_Start_IT+0x4b8>)
  20306. 8008cb0: 4293 cmp r3, r2
  20307. 8008cb2: d01d beq.n 8008cf0 <HAL_DMA_Start_IT+0x350>
  20308. 8008cb4: 68fb ldr r3, [r7, #12]
  20309. 8008cb6: 681b ldr r3, [r3, #0]
  20310. 8008cb8: 4a68 ldr r2, [pc, #416] @ (8008e5c <HAL_DMA_Start_IT+0x4bc>)
  20311. 8008cba: 4293 cmp r3, r2
  20312. 8008cbc: d018 beq.n 8008cf0 <HAL_DMA_Start_IT+0x350>
  20313. 8008cbe: 68fb ldr r3, [r7, #12]
  20314. 8008cc0: 681b ldr r3, [r3, #0]
  20315. 8008cc2: 4a67 ldr r2, [pc, #412] @ (8008e60 <HAL_DMA_Start_IT+0x4c0>)
  20316. 8008cc4: 4293 cmp r3, r2
  20317. 8008cc6: d013 beq.n 8008cf0 <HAL_DMA_Start_IT+0x350>
  20318. 8008cc8: 68fb ldr r3, [r7, #12]
  20319. 8008cca: 681b ldr r3, [r3, #0]
  20320. 8008ccc: 4a65 ldr r2, [pc, #404] @ (8008e64 <HAL_DMA_Start_IT+0x4c4>)
  20321. 8008cce: 4293 cmp r3, r2
  20322. 8008cd0: d00e beq.n 8008cf0 <HAL_DMA_Start_IT+0x350>
  20323. 8008cd2: 68fb ldr r3, [r7, #12]
  20324. 8008cd4: 681b ldr r3, [r3, #0]
  20325. 8008cd6: 4a64 ldr r2, [pc, #400] @ (8008e68 <HAL_DMA_Start_IT+0x4c8>)
  20326. 8008cd8: 4293 cmp r3, r2
  20327. 8008cda: d009 beq.n 8008cf0 <HAL_DMA_Start_IT+0x350>
  20328. 8008cdc: 68fb ldr r3, [r7, #12]
  20329. 8008cde: 681b ldr r3, [r3, #0]
  20330. 8008ce0: 4a62 ldr r2, [pc, #392] @ (8008e6c <HAL_DMA_Start_IT+0x4cc>)
  20331. 8008ce2: 4293 cmp r3, r2
  20332. 8008ce4: d004 beq.n 8008cf0 <HAL_DMA_Start_IT+0x350>
  20333. 8008ce6: 68fb ldr r3, [r7, #12]
  20334. 8008ce8: 681b ldr r3, [r3, #0]
  20335. 8008cea: 4a61 ldr r2, [pc, #388] @ (8008e70 <HAL_DMA_Start_IT+0x4d0>)
  20336. 8008cec: 4293 cmp r3, r2
  20337. 8008cee: d101 bne.n 8008cf4 <HAL_DMA_Start_IT+0x354>
  20338. 8008cf0: 2301 movs r3, #1
  20339. 8008cf2: e000 b.n 8008cf6 <HAL_DMA_Start_IT+0x356>
  20340. 8008cf4: 2300 movs r3, #0
  20341. 8008cf6: 2b00 cmp r3, #0
  20342. 8008cf8: d01a beq.n 8008d30 <HAL_DMA_Start_IT+0x390>
  20343. {
  20344. /* Check if DMAMUX Synchronization is enabled */
  20345. if((hdma->DMAmuxChannel->CCR & DMAMUX_CxCR_SE) != 0U)
  20346. 8008cfa: 68fb ldr r3, [r7, #12]
  20347. 8008cfc: 6e1b ldr r3, [r3, #96] @ 0x60
  20348. 8008cfe: 681b ldr r3, [r3, #0]
  20349. 8008d00: f403 3380 and.w r3, r3, #65536 @ 0x10000
  20350. 8008d04: 2b00 cmp r3, #0
  20351. 8008d06: d007 beq.n 8008d18 <HAL_DMA_Start_IT+0x378>
  20352. {
  20353. /* Enable DMAMUX sync overrun IT*/
  20354. hdma->DMAmuxChannel->CCR |= DMAMUX_CxCR_SOIE;
  20355. 8008d08: 68fb ldr r3, [r7, #12]
  20356. 8008d0a: 6e1b ldr r3, [r3, #96] @ 0x60
  20357. 8008d0c: 681a ldr r2, [r3, #0]
  20358. 8008d0e: 68fb ldr r3, [r7, #12]
  20359. 8008d10: 6e1b ldr r3, [r3, #96] @ 0x60
  20360. 8008d12: f442 7280 orr.w r2, r2, #256 @ 0x100
  20361. 8008d16: 601a str r2, [r3, #0]
  20362. }
  20363. if(hdma->DMAmuxRequestGen != 0U)
  20364. 8008d18: 68fb ldr r3, [r7, #12]
  20365. 8008d1a: 6edb ldr r3, [r3, #108] @ 0x6c
  20366. 8008d1c: 2b00 cmp r3, #0
  20367. 8008d1e: d007 beq.n 8008d30 <HAL_DMA_Start_IT+0x390>
  20368. {
  20369. /* if using DMAMUX request generator, enable the DMAMUX request generator overrun IT*/
  20370. /* enable the request gen overrun IT */
  20371. hdma->DMAmuxRequestGen->RGCR |= DMAMUX_RGxCR_OIE;
  20372. 8008d20: 68fb ldr r3, [r7, #12]
  20373. 8008d22: 6edb ldr r3, [r3, #108] @ 0x6c
  20374. 8008d24: 681a ldr r2, [r3, #0]
  20375. 8008d26: 68fb ldr r3, [r7, #12]
  20376. 8008d28: 6edb ldr r3, [r3, #108] @ 0x6c
  20377. 8008d2a: f442 7280 orr.w r2, r2, #256 @ 0x100
  20378. 8008d2e: 601a str r2, [r3, #0]
  20379. }
  20380. }
  20381. /* Enable the Peripheral */
  20382. __HAL_DMA_ENABLE(hdma);
  20383. 8008d30: 68fb ldr r3, [r7, #12]
  20384. 8008d32: 681b ldr r3, [r3, #0]
  20385. 8008d34: 4a37 ldr r2, [pc, #220] @ (8008e14 <HAL_DMA_Start_IT+0x474>)
  20386. 8008d36: 4293 cmp r3, r2
  20387. 8008d38: d04a beq.n 8008dd0 <HAL_DMA_Start_IT+0x430>
  20388. 8008d3a: 68fb ldr r3, [r7, #12]
  20389. 8008d3c: 681b ldr r3, [r3, #0]
  20390. 8008d3e: 4a36 ldr r2, [pc, #216] @ (8008e18 <HAL_DMA_Start_IT+0x478>)
  20391. 8008d40: 4293 cmp r3, r2
  20392. 8008d42: d045 beq.n 8008dd0 <HAL_DMA_Start_IT+0x430>
  20393. 8008d44: 68fb ldr r3, [r7, #12]
  20394. 8008d46: 681b ldr r3, [r3, #0]
  20395. 8008d48: 4a34 ldr r2, [pc, #208] @ (8008e1c <HAL_DMA_Start_IT+0x47c>)
  20396. 8008d4a: 4293 cmp r3, r2
  20397. 8008d4c: d040 beq.n 8008dd0 <HAL_DMA_Start_IT+0x430>
  20398. 8008d4e: 68fb ldr r3, [r7, #12]
  20399. 8008d50: 681b ldr r3, [r3, #0]
  20400. 8008d52: 4a33 ldr r2, [pc, #204] @ (8008e20 <HAL_DMA_Start_IT+0x480>)
  20401. 8008d54: 4293 cmp r3, r2
  20402. 8008d56: d03b beq.n 8008dd0 <HAL_DMA_Start_IT+0x430>
  20403. 8008d58: 68fb ldr r3, [r7, #12]
  20404. 8008d5a: 681b ldr r3, [r3, #0]
  20405. 8008d5c: 4a31 ldr r2, [pc, #196] @ (8008e24 <HAL_DMA_Start_IT+0x484>)
  20406. 8008d5e: 4293 cmp r3, r2
  20407. 8008d60: d036 beq.n 8008dd0 <HAL_DMA_Start_IT+0x430>
  20408. 8008d62: 68fb ldr r3, [r7, #12]
  20409. 8008d64: 681b ldr r3, [r3, #0]
  20410. 8008d66: 4a30 ldr r2, [pc, #192] @ (8008e28 <HAL_DMA_Start_IT+0x488>)
  20411. 8008d68: 4293 cmp r3, r2
  20412. 8008d6a: d031 beq.n 8008dd0 <HAL_DMA_Start_IT+0x430>
  20413. 8008d6c: 68fb ldr r3, [r7, #12]
  20414. 8008d6e: 681b ldr r3, [r3, #0]
  20415. 8008d70: 4a2e ldr r2, [pc, #184] @ (8008e2c <HAL_DMA_Start_IT+0x48c>)
  20416. 8008d72: 4293 cmp r3, r2
  20417. 8008d74: d02c beq.n 8008dd0 <HAL_DMA_Start_IT+0x430>
  20418. 8008d76: 68fb ldr r3, [r7, #12]
  20419. 8008d78: 681b ldr r3, [r3, #0]
  20420. 8008d7a: 4a2d ldr r2, [pc, #180] @ (8008e30 <HAL_DMA_Start_IT+0x490>)
  20421. 8008d7c: 4293 cmp r3, r2
  20422. 8008d7e: d027 beq.n 8008dd0 <HAL_DMA_Start_IT+0x430>
  20423. 8008d80: 68fb ldr r3, [r7, #12]
  20424. 8008d82: 681b ldr r3, [r3, #0]
  20425. 8008d84: 4a2b ldr r2, [pc, #172] @ (8008e34 <HAL_DMA_Start_IT+0x494>)
  20426. 8008d86: 4293 cmp r3, r2
  20427. 8008d88: d022 beq.n 8008dd0 <HAL_DMA_Start_IT+0x430>
  20428. 8008d8a: 68fb ldr r3, [r7, #12]
  20429. 8008d8c: 681b ldr r3, [r3, #0]
  20430. 8008d8e: 4a2a ldr r2, [pc, #168] @ (8008e38 <HAL_DMA_Start_IT+0x498>)
  20431. 8008d90: 4293 cmp r3, r2
  20432. 8008d92: d01d beq.n 8008dd0 <HAL_DMA_Start_IT+0x430>
  20433. 8008d94: 68fb ldr r3, [r7, #12]
  20434. 8008d96: 681b ldr r3, [r3, #0]
  20435. 8008d98: 4a28 ldr r2, [pc, #160] @ (8008e3c <HAL_DMA_Start_IT+0x49c>)
  20436. 8008d9a: 4293 cmp r3, r2
  20437. 8008d9c: d018 beq.n 8008dd0 <HAL_DMA_Start_IT+0x430>
  20438. 8008d9e: 68fb ldr r3, [r7, #12]
  20439. 8008da0: 681b ldr r3, [r3, #0]
  20440. 8008da2: 4a27 ldr r2, [pc, #156] @ (8008e40 <HAL_DMA_Start_IT+0x4a0>)
  20441. 8008da4: 4293 cmp r3, r2
  20442. 8008da6: d013 beq.n 8008dd0 <HAL_DMA_Start_IT+0x430>
  20443. 8008da8: 68fb ldr r3, [r7, #12]
  20444. 8008daa: 681b ldr r3, [r3, #0]
  20445. 8008dac: 4a25 ldr r2, [pc, #148] @ (8008e44 <HAL_DMA_Start_IT+0x4a4>)
  20446. 8008dae: 4293 cmp r3, r2
  20447. 8008db0: d00e beq.n 8008dd0 <HAL_DMA_Start_IT+0x430>
  20448. 8008db2: 68fb ldr r3, [r7, #12]
  20449. 8008db4: 681b ldr r3, [r3, #0]
  20450. 8008db6: 4a24 ldr r2, [pc, #144] @ (8008e48 <HAL_DMA_Start_IT+0x4a8>)
  20451. 8008db8: 4293 cmp r3, r2
  20452. 8008dba: d009 beq.n 8008dd0 <HAL_DMA_Start_IT+0x430>
  20453. 8008dbc: 68fb ldr r3, [r7, #12]
  20454. 8008dbe: 681b ldr r3, [r3, #0]
  20455. 8008dc0: 4a22 ldr r2, [pc, #136] @ (8008e4c <HAL_DMA_Start_IT+0x4ac>)
  20456. 8008dc2: 4293 cmp r3, r2
  20457. 8008dc4: d004 beq.n 8008dd0 <HAL_DMA_Start_IT+0x430>
  20458. 8008dc6: 68fb ldr r3, [r7, #12]
  20459. 8008dc8: 681b ldr r3, [r3, #0]
  20460. 8008dca: 4a21 ldr r2, [pc, #132] @ (8008e50 <HAL_DMA_Start_IT+0x4b0>)
  20461. 8008dcc: 4293 cmp r3, r2
  20462. 8008dce: d108 bne.n 8008de2 <HAL_DMA_Start_IT+0x442>
  20463. 8008dd0: 68fb ldr r3, [r7, #12]
  20464. 8008dd2: 681b ldr r3, [r3, #0]
  20465. 8008dd4: 681a ldr r2, [r3, #0]
  20466. 8008dd6: 68fb ldr r3, [r7, #12]
  20467. 8008dd8: 681b ldr r3, [r3, #0]
  20468. 8008dda: f042 0201 orr.w r2, r2, #1
  20469. 8008dde: 601a str r2, [r3, #0]
  20470. 8008de0: e012 b.n 8008e08 <HAL_DMA_Start_IT+0x468>
  20471. 8008de2: 68fb ldr r3, [r7, #12]
  20472. 8008de4: 681b ldr r3, [r3, #0]
  20473. 8008de6: 681a ldr r2, [r3, #0]
  20474. 8008de8: 68fb ldr r3, [r7, #12]
  20475. 8008dea: 681b ldr r3, [r3, #0]
  20476. 8008dec: f042 0201 orr.w r2, r2, #1
  20477. 8008df0: 601a str r2, [r3, #0]
  20478. 8008df2: e009 b.n 8008e08 <HAL_DMA_Start_IT+0x468>
  20479. }
  20480. else
  20481. {
  20482. /* Set the error code to busy */
  20483. hdma->ErrorCode = HAL_DMA_ERROR_BUSY;
  20484. 8008df4: 68fb ldr r3, [r7, #12]
  20485. 8008df6: f44f 6200 mov.w r2, #2048 @ 0x800
  20486. 8008dfa: 655a str r2, [r3, #84] @ 0x54
  20487. /* Process unlocked */
  20488. __HAL_UNLOCK(hdma);
  20489. 8008dfc: 68fb ldr r3, [r7, #12]
  20490. 8008dfe: 2200 movs r2, #0
  20491. 8008e00: f883 2034 strb.w r2, [r3, #52] @ 0x34
  20492. /* Return error status */
  20493. status = HAL_ERROR;
  20494. 8008e04: 2301 movs r3, #1
  20495. 8008e06: 75fb strb r3, [r7, #23]
  20496. }
  20497. return status;
  20498. 8008e08: 7dfb ldrb r3, [r7, #23]
  20499. }
  20500. 8008e0a: 4618 mov r0, r3
  20501. 8008e0c: 3718 adds r7, #24
  20502. 8008e0e: 46bd mov sp, r7
  20503. 8008e10: bd80 pop {r7, pc}
  20504. 8008e12: bf00 nop
  20505. 8008e14: 40020010 .word 0x40020010
  20506. 8008e18: 40020028 .word 0x40020028
  20507. 8008e1c: 40020040 .word 0x40020040
  20508. 8008e20: 40020058 .word 0x40020058
  20509. 8008e24: 40020070 .word 0x40020070
  20510. 8008e28: 40020088 .word 0x40020088
  20511. 8008e2c: 400200a0 .word 0x400200a0
  20512. 8008e30: 400200b8 .word 0x400200b8
  20513. 8008e34: 40020410 .word 0x40020410
  20514. 8008e38: 40020428 .word 0x40020428
  20515. 8008e3c: 40020440 .word 0x40020440
  20516. 8008e40: 40020458 .word 0x40020458
  20517. 8008e44: 40020470 .word 0x40020470
  20518. 8008e48: 40020488 .word 0x40020488
  20519. 8008e4c: 400204a0 .word 0x400204a0
  20520. 8008e50: 400204b8 .word 0x400204b8
  20521. 8008e54: 58025408 .word 0x58025408
  20522. 8008e58: 5802541c .word 0x5802541c
  20523. 8008e5c: 58025430 .word 0x58025430
  20524. 8008e60: 58025444 .word 0x58025444
  20525. 8008e64: 58025458 .word 0x58025458
  20526. 8008e68: 5802546c .word 0x5802546c
  20527. 8008e6c: 58025480 .word 0x58025480
  20528. 8008e70: 58025494 .word 0x58025494
  20529. 08008e74 <HAL_DMA_Abort>:
  20530. * and the Stream will be effectively disabled only after the transfer of
  20531. * this single data is finished.
  20532. * @retval HAL status
  20533. */
  20534. HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma)
  20535. {
  20536. 8008e74: b580 push {r7, lr}
  20537. 8008e76: b086 sub sp, #24
  20538. 8008e78: af00 add r7, sp, #0
  20539. 8008e7a: 6078 str r0, [r7, #4]
  20540. /* calculate DMA base and stream number */
  20541. DMA_Base_Registers *regs_dma;
  20542. BDMA_Base_Registers *regs_bdma;
  20543. const __IO uint32_t *enableRegister;
  20544. uint32_t tickstart = HAL_GetTick();
  20545. 8008e7c: f7fc fe98 bl 8005bb0 <HAL_GetTick>
  20546. 8008e80: 6138 str r0, [r7, #16]
  20547. /* Check the DMA peripheral handle */
  20548. if(hdma == NULL)
  20549. 8008e82: 687b ldr r3, [r7, #4]
  20550. 8008e84: 2b00 cmp r3, #0
  20551. 8008e86: d101 bne.n 8008e8c <HAL_DMA_Abort+0x18>
  20552. {
  20553. return HAL_ERROR;
  20554. 8008e88: 2301 movs r3, #1
  20555. 8008e8a: e2dc b.n 8009446 <HAL_DMA_Abort+0x5d2>
  20556. }
  20557. /* Check the DMA peripheral state */
  20558. if(hdma->State != HAL_DMA_STATE_BUSY)
  20559. 8008e8c: 687b ldr r3, [r7, #4]
  20560. 8008e8e: f893 3035 ldrb.w r3, [r3, #53] @ 0x35
  20561. 8008e92: b2db uxtb r3, r3
  20562. 8008e94: 2b02 cmp r3, #2
  20563. 8008e96: d008 beq.n 8008eaa <HAL_DMA_Abort+0x36>
  20564. {
  20565. hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER;
  20566. 8008e98: 687b ldr r3, [r7, #4]
  20567. 8008e9a: 2280 movs r2, #128 @ 0x80
  20568. 8008e9c: 655a str r2, [r3, #84] @ 0x54
  20569. /* Process Unlocked */
  20570. __HAL_UNLOCK(hdma);
  20571. 8008e9e: 687b ldr r3, [r7, #4]
  20572. 8008ea0: 2200 movs r2, #0
  20573. 8008ea2: f883 2034 strb.w r2, [r3, #52] @ 0x34
  20574. return HAL_ERROR;
  20575. 8008ea6: 2301 movs r3, #1
  20576. 8008ea8: e2cd b.n 8009446 <HAL_DMA_Abort+0x5d2>
  20577. }
  20578. else
  20579. {
  20580. /* Disable all the transfer interrupts */
  20581. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  20582. 8008eaa: 687b ldr r3, [r7, #4]
  20583. 8008eac: 681b ldr r3, [r3, #0]
  20584. 8008eae: 4a76 ldr r2, [pc, #472] @ (8009088 <HAL_DMA_Abort+0x214>)
  20585. 8008eb0: 4293 cmp r3, r2
  20586. 8008eb2: d04a beq.n 8008f4a <HAL_DMA_Abort+0xd6>
  20587. 8008eb4: 687b ldr r3, [r7, #4]
  20588. 8008eb6: 681b ldr r3, [r3, #0]
  20589. 8008eb8: 4a74 ldr r2, [pc, #464] @ (800908c <HAL_DMA_Abort+0x218>)
  20590. 8008eba: 4293 cmp r3, r2
  20591. 8008ebc: d045 beq.n 8008f4a <HAL_DMA_Abort+0xd6>
  20592. 8008ebe: 687b ldr r3, [r7, #4]
  20593. 8008ec0: 681b ldr r3, [r3, #0]
  20594. 8008ec2: 4a73 ldr r2, [pc, #460] @ (8009090 <HAL_DMA_Abort+0x21c>)
  20595. 8008ec4: 4293 cmp r3, r2
  20596. 8008ec6: d040 beq.n 8008f4a <HAL_DMA_Abort+0xd6>
  20597. 8008ec8: 687b ldr r3, [r7, #4]
  20598. 8008eca: 681b ldr r3, [r3, #0]
  20599. 8008ecc: 4a71 ldr r2, [pc, #452] @ (8009094 <HAL_DMA_Abort+0x220>)
  20600. 8008ece: 4293 cmp r3, r2
  20601. 8008ed0: d03b beq.n 8008f4a <HAL_DMA_Abort+0xd6>
  20602. 8008ed2: 687b ldr r3, [r7, #4]
  20603. 8008ed4: 681b ldr r3, [r3, #0]
  20604. 8008ed6: 4a70 ldr r2, [pc, #448] @ (8009098 <HAL_DMA_Abort+0x224>)
  20605. 8008ed8: 4293 cmp r3, r2
  20606. 8008eda: d036 beq.n 8008f4a <HAL_DMA_Abort+0xd6>
  20607. 8008edc: 687b ldr r3, [r7, #4]
  20608. 8008ede: 681b ldr r3, [r3, #0]
  20609. 8008ee0: 4a6e ldr r2, [pc, #440] @ (800909c <HAL_DMA_Abort+0x228>)
  20610. 8008ee2: 4293 cmp r3, r2
  20611. 8008ee4: d031 beq.n 8008f4a <HAL_DMA_Abort+0xd6>
  20612. 8008ee6: 687b ldr r3, [r7, #4]
  20613. 8008ee8: 681b ldr r3, [r3, #0]
  20614. 8008eea: 4a6d ldr r2, [pc, #436] @ (80090a0 <HAL_DMA_Abort+0x22c>)
  20615. 8008eec: 4293 cmp r3, r2
  20616. 8008eee: d02c beq.n 8008f4a <HAL_DMA_Abort+0xd6>
  20617. 8008ef0: 687b ldr r3, [r7, #4]
  20618. 8008ef2: 681b ldr r3, [r3, #0]
  20619. 8008ef4: 4a6b ldr r2, [pc, #428] @ (80090a4 <HAL_DMA_Abort+0x230>)
  20620. 8008ef6: 4293 cmp r3, r2
  20621. 8008ef8: d027 beq.n 8008f4a <HAL_DMA_Abort+0xd6>
  20622. 8008efa: 687b ldr r3, [r7, #4]
  20623. 8008efc: 681b ldr r3, [r3, #0]
  20624. 8008efe: 4a6a ldr r2, [pc, #424] @ (80090a8 <HAL_DMA_Abort+0x234>)
  20625. 8008f00: 4293 cmp r3, r2
  20626. 8008f02: d022 beq.n 8008f4a <HAL_DMA_Abort+0xd6>
  20627. 8008f04: 687b ldr r3, [r7, #4]
  20628. 8008f06: 681b ldr r3, [r3, #0]
  20629. 8008f08: 4a68 ldr r2, [pc, #416] @ (80090ac <HAL_DMA_Abort+0x238>)
  20630. 8008f0a: 4293 cmp r3, r2
  20631. 8008f0c: d01d beq.n 8008f4a <HAL_DMA_Abort+0xd6>
  20632. 8008f0e: 687b ldr r3, [r7, #4]
  20633. 8008f10: 681b ldr r3, [r3, #0]
  20634. 8008f12: 4a67 ldr r2, [pc, #412] @ (80090b0 <HAL_DMA_Abort+0x23c>)
  20635. 8008f14: 4293 cmp r3, r2
  20636. 8008f16: d018 beq.n 8008f4a <HAL_DMA_Abort+0xd6>
  20637. 8008f18: 687b ldr r3, [r7, #4]
  20638. 8008f1a: 681b ldr r3, [r3, #0]
  20639. 8008f1c: 4a65 ldr r2, [pc, #404] @ (80090b4 <HAL_DMA_Abort+0x240>)
  20640. 8008f1e: 4293 cmp r3, r2
  20641. 8008f20: d013 beq.n 8008f4a <HAL_DMA_Abort+0xd6>
  20642. 8008f22: 687b ldr r3, [r7, #4]
  20643. 8008f24: 681b ldr r3, [r3, #0]
  20644. 8008f26: 4a64 ldr r2, [pc, #400] @ (80090b8 <HAL_DMA_Abort+0x244>)
  20645. 8008f28: 4293 cmp r3, r2
  20646. 8008f2a: d00e beq.n 8008f4a <HAL_DMA_Abort+0xd6>
  20647. 8008f2c: 687b ldr r3, [r7, #4]
  20648. 8008f2e: 681b ldr r3, [r3, #0]
  20649. 8008f30: 4a62 ldr r2, [pc, #392] @ (80090bc <HAL_DMA_Abort+0x248>)
  20650. 8008f32: 4293 cmp r3, r2
  20651. 8008f34: d009 beq.n 8008f4a <HAL_DMA_Abort+0xd6>
  20652. 8008f36: 687b ldr r3, [r7, #4]
  20653. 8008f38: 681b ldr r3, [r3, #0]
  20654. 8008f3a: 4a61 ldr r2, [pc, #388] @ (80090c0 <HAL_DMA_Abort+0x24c>)
  20655. 8008f3c: 4293 cmp r3, r2
  20656. 8008f3e: d004 beq.n 8008f4a <HAL_DMA_Abort+0xd6>
  20657. 8008f40: 687b ldr r3, [r7, #4]
  20658. 8008f42: 681b ldr r3, [r3, #0]
  20659. 8008f44: 4a5f ldr r2, [pc, #380] @ (80090c4 <HAL_DMA_Abort+0x250>)
  20660. 8008f46: 4293 cmp r3, r2
  20661. 8008f48: d101 bne.n 8008f4e <HAL_DMA_Abort+0xda>
  20662. 8008f4a: 2301 movs r3, #1
  20663. 8008f4c: e000 b.n 8008f50 <HAL_DMA_Abort+0xdc>
  20664. 8008f4e: 2300 movs r3, #0
  20665. 8008f50: 2b00 cmp r3, #0
  20666. 8008f52: d013 beq.n 8008f7c <HAL_DMA_Abort+0x108>
  20667. {
  20668. /* Disable DMA All Interrupts */
  20669. ((DMA_Stream_TypeDef *)hdma->Instance)->CR &= ~(DMA_IT_TC | DMA_IT_TE | DMA_IT_DME | DMA_IT_HT);
  20670. 8008f54: 687b ldr r3, [r7, #4]
  20671. 8008f56: 681b ldr r3, [r3, #0]
  20672. 8008f58: 681a ldr r2, [r3, #0]
  20673. 8008f5a: 687b ldr r3, [r7, #4]
  20674. 8008f5c: 681b ldr r3, [r3, #0]
  20675. 8008f5e: f022 021e bic.w r2, r2, #30
  20676. 8008f62: 601a str r2, [r3, #0]
  20677. ((DMA_Stream_TypeDef *)hdma->Instance)->FCR &= ~(DMA_IT_FE);
  20678. 8008f64: 687b ldr r3, [r7, #4]
  20679. 8008f66: 681b ldr r3, [r3, #0]
  20680. 8008f68: 695a ldr r2, [r3, #20]
  20681. 8008f6a: 687b ldr r3, [r7, #4]
  20682. 8008f6c: 681b ldr r3, [r3, #0]
  20683. 8008f6e: f022 0280 bic.w r2, r2, #128 @ 0x80
  20684. 8008f72: 615a str r2, [r3, #20]
  20685. enableRegister = (__IO uint32_t *)(&(((DMA_Stream_TypeDef *)hdma->Instance)->CR));
  20686. 8008f74: 687b ldr r3, [r7, #4]
  20687. 8008f76: 681b ldr r3, [r3, #0]
  20688. 8008f78: 617b str r3, [r7, #20]
  20689. 8008f7a: e00a b.n 8008f92 <HAL_DMA_Abort+0x11e>
  20690. }
  20691. else /* BDMA channel */
  20692. {
  20693. /* Disable DMA All Interrupts */
  20694. ((BDMA_Channel_TypeDef *)hdma->Instance)->CCR &= ~(BDMA_CCR_TCIE | BDMA_CCR_HTIE | BDMA_CCR_TEIE);
  20695. 8008f7c: 687b ldr r3, [r7, #4]
  20696. 8008f7e: 681b ldr r3, [r3, #0]
  20697. 8008f80: 681a ldr r2, [r3, #0]
  20698. 8008f82: 687b ldr r3, [r7, #4]
  20699. 8008f84: 681b ldr r3, [r3, #0]
  20700. 8008f86: f022 020e bic.w r2, r2, #14
  20701. 8008f8a: 601a str r2, [r3, #0]
  20702. enableRegister = (__IO uint32_t *)(&(((BDMA_Channel_TypeDef *)hdma->Instance)->CCR));
  20703. 8008f8c: 687b ldr r3, [r7, #4]
  20704. 8008f8e: 681b ldr r3, [r3, #0]
  20705. 8008f90: 617b str r3, [r7, #20]
  20706. }
  20707. if(IS_DMA_DMAMUX_ALL_INSTANCE(hdma->Instance) != 0U) /* No DMAMUX available for BDMA1 */
  20708. 8008f92: 687b ldr r3, [r7, #4]
  20709. 8008f94: 681b ldr r3, [r3, #0]
  20710. 8008f96: 4a3c ldr r2, [pc, #240] @ (8009088 <HAL_DMA_Abort+0x214>)
  20711. 8008f98: 4293 cmp r3, r2
  20712. 8008f9a: d072 beq.n 8009082 <HAL_DMA_Abort+0x20e>
  20713. 8008f9c: 687b ldr r3, [r7, #4]
  20714. 8008f9e: 681b ldr r3, [r3, #0]
  20715. 8008fa0: 4a3a ldr r2, [pc, #232] @ (800908c <HAL_DMA_Abort+0x218>)
  20716. 8008fa2: 4293 cmp r3, r2
  20717. 8008fa4: d06d beq.n 8009082 <HAL_DMA_Abort+0x20e>
  20718. 8008fa6: 687b ldr r3, [r7, #4]
  20719. 8008fa8: 681b ldr r3, [r3, #0]
  20720. 8008faa: 4a39 ldr r2, [pc, #228] @ (8009090 <HAL_DMA_Abort+0x21c>)
  20721. 8008fac: 4293 cmp r3, r2
  20722. 8008fae: d068 beq.n 8009082 <HAL_DMA_Abort+0x20e>
  20723. 8008fb0: 687b ldr r3, [r7, #4]
  20724. 8008fb2: 681b ldr r3, [r3, #0]
  20725. 8008fb4: 4a37 ldr r2, [pc, #220] @ (8009094 <HAL_DMA_Abort+0x220>)
  20726. 8008fb6: 4293 cmp r3, r2
  20727. 8008fb8: d063 beq.n 8009082 <HAL_DMA_Abort+0x20e>
  20728. 8008fba: 687b ldr r3, [r7, #4]
  20729. 8008fbc: 681b ldr r3, [r3, #0]
  20730. 8008fbe: 4a36 ldr r2, [pc, #216] @ (8009098 <HAL_DMA_Abort+0x224>)
  20731. 8008fc0: 4293 cmp r3, r2
  20732. 8008fc2: d05e beq.n 8009082 <HAL_DMA_Abort+0x20e>
  20733. 8008fc4: 687b ldr r3, [r7, #4]
  20734. 8008fc6: 681b ldr r3, [r3, #0]
  20735. 8008fc8: 4a34 ldr r2, [pc, #208] @ (800909c <HAL_DMA_Abort+0x228>)
  20736. 8008fca: 4293 cmp r3, r2
  20737. 8008fcc: d059 beq.n 8009082 <HAL_DMA_Abort+0x20e>
  20738. 8008fce: 687b ldr r3, [r7, #4]
  20739. 8008fd0: 681b ldr r3, [r3, #0]
  20740. 8008fd2: 4a33 ldr r2, [pc, #204] @ (80090a0 <HAL_DMA_Abort+0x22c>)
  20741. 8008fd4: 4293 cmp r3, r2
  20742. 8008fd6: d054 beq.n 8009082 <HAL_DMA_Abort+0x20e>
  20743. 8008fd8: 687b ldr r3, [r7, #4]
  20744. 8008fda: 681b ldr r3, [r3, #0]
  20745. 8008fdc: 4a31 ldr r2, [pc, #196] @ (80090a4 <HAL_DMA_Abort+0x230>)
  20746. 8008fde: 4293 cmp r3, r2
  20747. 8008fe0: d04f beq.n 8009082 <HAL_DMA_Abort+0x20e>
  20748. 8008fe2: 687b ldr r3, [r7, #4]
  20749. 8008fe4: 681b ldr r3, [r3, #0]
  20750. 8008fe6: 4a30 ldr r2, [pc, #192] @ (80090a8 <HAL_DMA_Abort+0x234>)
  20751. 8008fe8: 4293 cmp r3, r2
  20752. 8008fea: d04a beq.n 8009082 <HAL_DMA_Abort+0x20e>
  20753. 8008fec: 687b ldr r3, [r7, #4]
  20754. 8008fee: 681b ldr r3, [r3, #0]
  20755. 8008ff0: 4a2e ldr r2, [pc, #184] @ (80090ac <HAL_DMA_Abort+0x238>)
  20756. 8008ff2: 4293 cmp r3, r2
  20757. 8008ff4: d045 beq.n 8009082 <HAL_DMA_Abort+0x20e>
  20758. 8008ff6: 687b ldr r3, [r7, #4]
  20759. 8008ff8: 681b ldr r3, [r3, #0]
  20760. 8008ffa: 4a2d ldr r2, [pc, #180] @ (80090b0 <HAL_DMA_Abort+0x23c>)
  20761. 8008ffc: 4293 cmp r3, r2
  20762. 8008ffe: d040 beq.n 8009082 <HAL_DMA_Abort+0x20e>
  20763. 8009000: 687b ldr r3, [r7, #4]
  20764. 8009002: 681b ldr r3, [r3, #0]
  20765. 8009004: 4a2b ldr r2, [pc, #172] @ (80090b4 <HAL_DMA_Abort+0x240>)
  20766. 8009006: 4293 cmp r3, r2
  20767. 8009008: d03b beq.n 8009082 <HAL_DMA_Abort+0x20e>
  20768. 800900a: 687b ldr r3, [r7, #4]
  20769. 800900c: 681b ldr r3, [r3, #0]
  20770. 800900e: 4a2a ldr r2, [pc, #168] @ (80090b8 <HAL_DMA_Abort+0x244>)
  20771. 8009010: 4293 cmp r3, r2
  20772. 8009012: d036 beq.n 8009082 <HAL_DMA_Abort+0x20e>
  20773. 8009014: 687b ldr r3, [r7, #4]
  20774. 8009016: 681b ldr r3, [r3, #0]
  20775. 8009018: 4a28 ldr r2, [pc, #160] @ (80090bc <HAL_DMA_Abort+0x248>)
  20776. 800901a: 4293 cmp r3, r2
  20777. 800901c: d031 beq.n 8009082 <HAL_DMA_Abort+0x20e>
  20778. 800901e: 687b ldr r3, [r7, #4]
  20779. 8009020: 681b ldr r3, [r3, #0]
  20780. 8009022: 4a27 ldr r2, [pc, #156] @ (80090c0 <HAL_DMA_Abort+0x24c>)
  20781. 8009024: 4293 cmp r3, r2
  20782. 8009026: d02c beq.n 8009082 <HAL_DMA_Abort+0x20e>
  20783. 8009028: 687b ldr r3, [r7, #4]
  20784. 800902a: 681b ldr r3, [r3, #0]
  20785. 800902c: 4a25 ldr r2, [pc, #148] @ (80090c4 <HAL_DMA_Abort+0x250>)
  20786. 800902e: 4293 cmp r3, r2
  20787. 8009030: d027 beq.n 8009082 <HAL_DMA_Abort+0x20e>
  20788. 8009032: 687b ldr r3, [r7, #4]
  20789. 8009034: 681b ldr r3, [r3, #0]
  20790. 8009036: 4a24 ldr r2, [pc, #144] @ (80090c8 <HAL_DMA_Abort+0x254>)
  20791. 8009038: 4293 cmp r3, r2
  20792. 800903a: d022 beq.n 8009082 <HAL_DMA_Abort+0x20e>
  20793. 800903c: 687b ldr r3, [r7, #4]
  20794. 800903e: 681b ldr r3, [r3, #0]
  20795. 8009040: 4a22 ldr r2, [pc, #136] @ (80090cc <HAL_DMA_Abort+0x258>)
  20796. 8009042: 4293 cmp r3, r2
  20797. 8009044: d01d beq.n 8009082 <HAL_DMA_Abort+0x20e>
  20798. 8009046: 687b ldr r3, [r7, #4]
  20799. 8009048: 681b ldr r3, [r3, #0]
  20800. 800904a: 4a21 ldr r2, [pc, #132] @ (80090d0 <HAL_DMA_Abort+0x25c>)
  20801. 800904c: 4293 cmp r3, r2
  20802. 800904e: d018 beq.n 8009082 <HAL_DMA_Abort+0x20e>
  20803. 8009050: 687b ldr r3, [r7, #4]
  20804. 8009052: 681b ldr r3, [r3, #0]
  20805. 8009054: 4a1f ldr r2, [pc, #124] @ (80090d4 <HAL_DMA_Abort+0x260>)
  20806. 8009056: 4293 cmp r3, r2
  20807. 8009058: d013 beq.n 8009082 <HAL_DMA_Abort+0x20e>
  20808. 800905a: 687b ldr r3, [r7, #4]
  20809. 800905c: 681b ldr r3, [r3, #0]
  20810. 800905e: 4a1e ldr r2, [pc, #120] @ (80090d8 <HAL_DMA_Abort+0x264>)
  20811. 8009060: 4293 cmp r3, r2
  20812. 8009062: d00e beq.n 8009082 <HAL_DMA_Abort+0x20e>
  20813. 8009064: 687b ldr r3, [r7, #4]
  20814. 8009066: 681b ldr r3, [r3, #0]
  20815. 8009068: 4a1c ldr r2, [pc, #112] @ (80090dc <HAL_DMA_Abort+0x268>)
  20816. 800906a: 4293 cmp r3, r2
  20817. 800906c: d009 beq.n 8009082 <HAL_DMA_Abort+0x20e>
  20818. 800906e: 687b ldr r3, [r7, #4]
  20819. 8009070: 681b ldr r3, [r3, #0]
  20820. 8009072: 4a1b ldr r2, [pc, #108] @ (80090e0 <HAL_DMA_Abort+0x26c>)
  20821. 8009074: 4293 cmp r3, r2
  20822. 8009076: d004 beq.n 8009082 <HAL_DMA_Abort+0x20e>
  20823. 8009078: 687b ldr r3, [r7, #4]
  20824. 800907a: 681b ldr r3, [r3, #0]
  20825. 800907c: 4a19 ldr r2, [pc, #100] @ (80090e4 <HAL_DMA_Abort+0x270>)
  20826. 800907e: 4293 cmp r3, r2
  20827. 8009080: d132 bne.n 80090e8 <HAL_DMA_Abort+0x274>
  20828. 8009082: 2301 movs r3, #1
  20829. 8009084: e031 b.n 80090ea <HAL_DMA_Abort+0x276>
  20830. 8009086: bf00 nop
  20831. 8009088: 40020010 .word 0x40020010
  20832. 800908c: 40020028 .word 0x40020028
  20833. 8009090: 40020040 .word 0x40020040
  20834. 8009094: 40020058 .word 0x40020058
  20835. 8009098: 40020070 .word 0x40020070
  20836. 800909c: 40020088 .word 0x40020088
  20837. 80090a0: 400200a0 .word 0x400200a0
  20838. 80090a4: 400200b8 .word 0x400200b8
  20839. 80090a8: 40020410 .word 0x40020410
  20840. 80090ac: 40020428 .word 0x40020428
  20841. 80090b0: 40020440 .word 0x40020440
  20842. 80090b4: 40020458 .word 0x40020458
  20843. 80090b8: 40020470 .word 0x40020470
  20844. 80090bc: 40020488 .word 0x40020488
  20845. 80090c0: 400204a0 .word 0x400204a0
  20846. 80090c4: 400204b8 .word 0x400204b8
  20847. 80090c8: 58025408 .word 0x58025408
  20848. 80090cc: 5802541c .word 0x5802541c
  20849. 80090d0: 58025430 .word 0x58025430
  20850. 80090d4: 58025444 .word 0x58025444
  20851. 80090d8: 58025458 .word 0x58025458
  20852. 80090dc: 5802546c .word 0x5802546c
  20853. 80090e0: 58025480 .word 0x58025480
  20854. 80090e4: 58025494 .word 0x58025494
  20855. 80090e8: 2300 movs r3, #0
  20856. 80090ea: 2b00 cmp r3, #0
  20857. 80090ec: d007 beq.n 80090fe <HAL_DMA_Abort+0x28a>
  20858. {
  20859. /* disable the DMAMUX sync overrun IT */
  20860. hdma->DMAmuxChannel->CCR &= ~DMAMUX_CxCR_SOIE;
  20861. 80090ee: 687b ldr r3, [r7, #4]
  20862. 80090f0: 6e1b ldr r3, [r3, #96] @ 0x60
  20863. 80090f2: 681a ldr r2, [r3, #0]
  20864. 80090f4: 687b ldr r3, [r7, #4]
  20865. 80090f6: 6e1b ldr r3, [r3, #96] @ 0x60
  20866. 80090f8: f422 7280 bic.w r2, r2, #256 @ 0x100
  20867. 80090fc: 601a str r2, [r3, #0]
  20868. }
  20869. /* Disable the stream */
  20870. __HAL_DMA_DISABLE(hdma);
  20871. 80090fe: 687b ldr r3, [r7, #4]
  20872. 8009100: 681b ldr r3, [r3, #0]
  20873. 8009102: 4a6d ldr r2, [pc, #436] @ (80092b8 <HAL_DMA_Abort+0x444>)
  20874. 8009104: 4293 cmp r3, r2
  20875. 8009106: d04a beq.n 800919e <HAL_DMA_Abort+0x32a>
  20876. 8009108: 687b ldr r3, [r7, #4]
  20877. 800910a: 681b ldr r3, [r3, #0]
  20878. 800910c: 4a6b ldr r2, [pc, #428] @ (80092bc <HAL_DMA_Abort+0x448>)
  20879. 800910e: 4293 cmp r3, r2
  20880. 8009110: d045 beq.n 800919e <HAL_DMA_Abort+0x32a>
  20881. 8009112: 687b ldr r3, [r7, #4]
  20882. 8009114: 681b ldr r3, [r3, #0]
  20883. 8009116: 4a6a ldr r2, [pc, #424] @ (80092c0 <HAL_DMA_Abort+0x44c>)
  20884. 8009118: 4293 cmp r3, r2
  20885. 800911a: d040 beq.n 800919e <HAL_DMA_Abort+0x32a>
  20886. 800911c: 687b ldr r3, [r7, #4]
  20887. 800911e: 681b ldr r3, [r3, #0]
  20888. 8009120: 4a68 ldr r2, [pc, #416] @ (80092c4 <HAL_DMA_Abort+0x450>)
  20889. 8009122: 4293 cmp r3, r2
  20890. 8009124: d03b beq.n 800919e <HAL_DMA_Abort+0x32a>
  20891. 8009126: 687b ldr r3, [r7, #4]
  20892. 8009128: 681b ldr r3, [r3, #0]
  20893. 800912a: 4a67 ldr r2, [pc, #412] @ (80092c8 <HAL_DMA_Abort+0x454>)
  20894. 800912c: 4293 cmp r3, r2
  20895. 800912e: d036 beq.n 800919e <HAL_DMA_Abort+0x32a>
  20896. 8009130: 687b ldr r3, [r7, #4]
  20897. 8009132: 681b ldr r3, [r3, #0]
  20898. 8009134: 4a65 ldr r2, [pc, #404] @ (80092cc <HAL_DMA_Abort+0x458>)
  20899. 8009136: 4293 cmp r3, r2
  20900. 8009138: d031 beq.n 800919e <HAL_DMA_Abort+0x32a>
  20901. 800913a: 687b ldr r3, [r7, #4]
  20902. 800913c: 681b ldr r3, [r3, #0]
  20903. 800913e: 4a64 ldr r2, [pc, #400] @ (80092d0 <HAL_DMA_Abort+0x45c>)
  20904. 8009140: 4293 cmp r3, r2
  20905. 8009142: d02c beq.n 800919e <HAL_DMA_Abort+0x32a>
  20906. 8009144: 687b ldr r3, [r7, #4]
  20907. 8009146: 681b ldr r3, [r3, #0]
  20908. 8009148: 4a62 ldr r2, [pc, #392] @ (80092d4 <HAL_DMA_Abort+0x460>)
  20909. 800914a: 4293 cmp r3, r2
  20910. 800914c: d027 beq.n 800919e <HAL_DMA_Abort+0x32a>
  20911. 800914e: 687b ldr r3, [r7, #4]
  20912. 8009150: 681b ldr r3, [r3, #0]
  20913. 8009152: 4a61 ldr r2, [pc, #388] @ (80092d8 <HAL_DMA_Abort+0x464>)
  20914. 8009154: 4293 cmp r3, r2
  20915. 8009156: d022 beq.n 800919e <HAL_DMA_Abort+0x32a>
  20916. 8009158: 687b ldr r3, [r7, #4]
  20917. 800915a: 681b ldr r3, [r3, #0]
  20918. 800915c: 4a5f ldr r2, [pc, #380] @ (80092dc <HAL_DMA_Abort+0x468>)
  20919. 800915e: 4293 cmp r3, r2
  20920. 8009160: d01d beq.n 800919e <HAL_DMA_Abort+0x32a>
  20921. 8009162: 687b ldr r3, [r7, #4]
  20922. 8009164: 681b ldr r3, [r3, #0]
  20923. 8009166: 4a5e ldr r2, [pc, #376] @ (80092e0 <HAL_DMA_Abort+0x46c>)
  20924. 8009168: 4293 cmp r3, r2
  20925. 800916a: d018 beq.n 800919e <HAL_DMA_Abort+0x32a>
  20926. 800916c: 687b ldr r3, [r7, #4]
  20927. 800916e: 681b ldr r3, [r3, #0]
  20928. 8009170: 4a5c ldr r2, [pc, #368] @ (80092e4 <HAL_DMA_Abort+0x470>)
  20929. 8009172: 4293 cmp r3, r2
  20930. 8009174: d013 beq.n 800919e <HAL_DMA_Abort+0x32a>
  20931. 8009176: 687b ldr r3, [r7, #4]
  20932. 8009178: 681b ldr r3, [r3, #0]
  20933. 800917a: 4a5b ldr r2, [pc, #364] @ (80092e8 <HAL_DMA_Abort+0x474>)
  20934. 800917c: 4293 cmp r3, r2
  20935. 800917e: d00e beq.n 800919e <HAL_DMA_Abort+0x32a>
  20936. 8009180: 687b ldr r3, [r7, #4]
  20937. 8009182: 681b ldr r3, [r3, #0]
  20938. 8009184: 4a59 ldr r2, [pc, #356] @ (80092ec <HAL_DMA_Abort+0x478>)
  20939. 8009186: 4293 cmp r3, r2
  20940. 8009188: d009 beq.n 800919e <HAL_DMA_Abort+0x32a>
  20941. 800918a: 687b ldr r3, [r7, #4]
  20942. 800918c: 681b ldr r3, [r3, #0]
  20943. 800918e: 4a58 ldr r2, [pc, #352] @ (80092f0 <HAL_DMA_Abort+0x47c>)
  20944. 8009190: 4293 cmp r3, r2
  20945. 8009192: d004 beq.n 800919e <HAL_DMA_Abort+0x32a>
  20946. 8009194: 687b ldr r3, [r7, #4]
  20947. 8009196: 681b ldr r3, [r3, #0]
  20948. 8009198: 4a56 ldr r2, [pc, #344] @ (80092f4 <HAL_DMA_Abort+0x480>)
  20949. 800919a: 4293 cmp r3, r2
  20950. 800919c: d108 bne.n 80091b0 <HAL_DMA_Abort+0x33c>
  20951. 800919e: 687b ldr r3, [r7, #4]
  20952. 80091a0: 681b ldr r3, [r3, #0]
  20953. 80091a2: 681a ldr r2, [r3, #0]
  20954. 80091a4: 687b ldr r3, [r7, #4]
  20955. 80091a6: 681b ldr r3, [r3, #0]
  20956. 80091a8: f022 0201 bic.w r2, r2, #1
  20957. 80091ac: 601a str r2, [r3, #0]
  20958. 80091ae: e007 b.n 80091c0 <HAL_DMA_Abort+0x34c>
  20959. 80091b0: 687b ldr r3, [r7, #4]
  20960. 80091b2: 681b ldr r3, [r3, #0]
  20961. 80091b4: 681a ldr r2, [r3, #0]
  20962. 80091b6: 687b ldr r3, [r7, #4]
  20963. 80091b8: 681b ldr r3, [r3, #0]
  20964. 80091ba: f022 0201 bic.w r2, r2, #1
  20965. 80091be: 601a str r2, [r3, #0]
  20966. /* Check if the DMA Stream is effectively disabled */
  20967. while(((*enableRegister) & DMA_SxCR_EN) != 0U)
  20968. 80091c0: e013 b.n 80091ea <HAL_DMA_Abort+0x376>
  20969. {
  20970. /* Check for the Timeout */
  20971. if((HAL_GetTick() - tickstart ) > HAL_TIMEOUT_DMA_ABORT)
  20972. 80091c2: f7fc fcf5 bl 8005bb0 <HAL_GetTick>
  20973. 80091c6: 4602 mov r2, r0
  20974. 80091c8: 693b ldr r3, [r7, #16]
  20975. 80091ca: 1ad3 subs r3, r2, r3
  20976. 80091cc: 2b05 cmp r3, #5
  20977. 80091ce: d90c bls.n 80091ea <HAL_DMA_Abort+0x376>
  20978. {
  20979. /* Update error code */
  20980. hdma->ErrorCode = HAL_DMA_ERROR_TIMEOUT;
  20981. 80091d0: 687b ldr r3, [r7, #4]
  20982. 80091d2: 2220 movs r2, #32
  20983. 80091d4: 655a str r2, [r3, #84] @ 0x54
  20984. /* Change the DMA state */
  20985. hdma->State = HAL_DMA_STATE_ERROR;
  20986. 80091d6: 687b ldr r3, [r7, #4]
  20987. 80091d8: 2203 movs r2, #3
  20988. 80091da: f883 2035 strb.w r2, [r3, #53] @ 0x35
  20989. /* Process Unlocked */
  20990. __HAL_UNLOCK(hdma);
  20991. 80091de: 687b ldr r3, [r7, #4]
  20992. 80091e0: 2200 movs r2, #0
  20993. 80091e2: f883 2034 strb.w r2, [r3, #52] @ 0x34
  20994. return HAL_ERROR;
  20995. 80091e6: 2301 movs r3, #1
  20996. 80091e8: e12d b.n 8009446 <HAL_DMA_Abort+0x5d2>
  20997. while(((*enableRegister) & DMA_SxCR_EN) != 0U)
  20998. 80091ea: 697b ldr r3, [r7, #20]
  20999. 80091ec: 681b ldr r3, [r3, #0]
  21000. 80091ee: f003 0301 and.w r3, r3, #1
  21001. 80091f2: 2b00 cmp r3, #0
  21002. 80091f4: d1e5 bne.n 80091c2 <HAL_DMA_Abort+0x34e>
  21003. }
  21004. }
  21005. /* Clear all interrupt flags at correct offset within the register */
  21006. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  21007. 80091f6: 687b ldr r3, [r7, #4]
  21008. 80091f8: 681b ldr r3, [r3, #0]
  21009. 80091fa: 4a2f ldr r2, [pc, #188] @ (80092b8 <HAL_DMA_Abort+0x444>)
  21010. 80091fc: 4293 cmp r3, r2
  21011. 80091fe: d04a beq.n 8009296 <HAL_DMA_Abort+0x422>
  21012. 8009200: 687b ldr r3, [r7, #4]
  21013. 8009202: 681b ldr r3, [r3, #0]
  21014. 8009204: 4a2d ldr r2, [pc, #180] @ (80092bc <HAL_DMA_Abort+0x448>)
  21015. 8009206: 4293 cmp r3, r2
  21016. 8009208: d045 beq.n 8009296 <HAL_DMA_Abort+0x422>
  21017. 800920a: 687b ldr r3, [r7, #4]
  21018. 800920c: 681b ldr r3, [r3, #0]
  21019. 800920e: 4a2c ldr r2, [pc, #176] @ (80092c0 <HAL_DMA_Abort+0x44c>)
  21020. 8009210: 4293 cmp r3, r2
  21021. 8009212: d040 beq.n 8009296 <HAL_DMA_Abort+0x422>
  21022. 8009214: 687b ldr r3, [r7, #4]
  21023. 8009216: 681b ldr r3, [r3, #0]
  21024. 8009218: 4a2a ldr r2, [pc, #168] @ (80092c4 <HAL_DMA_Abort+0x450>)
  21025. 800921a: 4293 cmp r3, r2
  21026. 800921c: d03b beq.n 8009296 <HAL_DMA_Abort+0x422>
  21027. 800921e: 687b ldr r3, [r7, #4]
  21028. 8009220: 681b ldr r3, [r3, #0]
  21029. 8009222: 4a29 ldr r2, [pc, #164] @ (80092c8 <HAL_DMA_Abort+0x454>)
  21030. 8009224: 4293 cmp r3, r2
  21031. 8009226: d036 beq.n 8009296 <HAL_DMA_Abort+0x422>
  21032. 8009228: 687b ldr r3, [r7, #4]
  21033. 800922a: 681b ldr r3, [r3, #0]
  21034. 800922c: 4a27 ldr r2, [pc, #156] @ (80092cc <HAL_DMA_Abort+0x458>)
  21035. 800922e: 4293 cmp r3, r2
  21036. 8009230: d031 beq.n 8009296 <HAL_DMA_Abort+0x422>
  21037. 8009232: 687b ldr r3, [r7, #4]
  21038. 8009234: 681b ldr r3, [r3, #0]
  21039. 8009236: 4a26 ldr r2, [pc, #152] @ (80092d0 <HAL_DMA_Abort+0x45c>)
  21040. 8009238: 4293 cmp r3, r2
  21041. 800923a: d02c beq.n 8009296 <HAL_DMA_Abort+0x422>
  21042. 800923c: 687b ldr r3, [r7, #4]
  21043. 800923e: 681b ldr r3, [r3, #0]
  21044. 8009240: 4a24 ldr r2, [pc, #144] @ (80092d4 <HAL_DMA_Abort+0x460>)
  21045. 8009242: 4293 cmp r3, r2
  21046. 8009244: d027 beq.n 8009296 <HAL_DMA_Abort+0x422>
  21047. 8009246: 687b ldr r3, [r7, #4]
  21048. 8009248: 681b ldr r3, [r3, #0]
  21049. 800924a: 4a23 ldr r2, [pc, #140] @ (80092d8 <HAL_DMA_Abort+0x464>)
  21050. 800924c: 4293 cmp r3, r2
  21051. 800924e: d022 beq.n 8009296 <HAL_DMA_Abort+0x422>
  21052. 8009250: 687b ldr r3, [r7, #4]
  21053. 8009252: 681b ldr r3, [r3, #0]
  21054. 8009254: 4a21 ldr r2, [pc, #132] @ (80092dc <HAL_DMA_Abort+0x468>)
  21055. 8009256: 4293 cmp r3, r2
  21056. 8009258: d01d beq.n 8009296 <HAL_DMA_Abort+0x422>
  21057. 800925a: 687b ldr r3, [r7, #4]
  21058. 800925c: 681b ldr r3, [r3, #0]
  21059. 800925e: 4a20 ldr r2, [pc, #128] @ (80092e0 <HAL_DMA_Abort+0x46c>)
  21060. 8009260: 4293 cmp r3, r2
  21061. 8009262: d018 beq.n 8009296 <HAL_DMA_Abort+0x422>
  21062. 8009264: 687b ldr r3, [r7, #4]
  21063. 8009266: 681b ldr r3, [r3, #0]
  21064. 8009268: 4a1e ldr r2, [pc, #120] @ (80092e4 <HAL_DMA_Abort+0x470>)
  21065. 800926a: 4293 cmp r3, r2
  21066. 800926c: d013 beq.n 8009296 <HAL_DMA_Abort+0x422>
  21067. 800926e: 687b ldr r3, [r7, #4]
  21068. 8009270: 681b ldr r3, [r3, #0]
  21069. 8009272: 4a1d ldr r2, [pc, #116] @ (80092e8 <HAL_DMA_Abort+0x474>)
  21070. 8009274: 4293 cmp r3, r2
  21071. 8009276: d00e beq.n 8009296 <HAL_DMA_Abort+0x422>
  21072. 8009278: 687b ldr r3, [r7, #4]
  21073. 800927a: 681b ldr r3, [r3, #0]
  21074. 800927c: 4a1b ldr r2, [pc, #108] @ (80092ec <HAL_DMA_Abort+0x478>)
  21075. 800927e: 4293 cmp r3, r2
  21076. 8009280: d009 beq.n 8009296 <HAL_DMA_Abort+0x422>
  21077. 8009282: 687b ldr r3, [r7, #4]
  21078. 8009284: 681b ldr r3, [r3, #0]
  21079. 8009286: 4a1a ldr r2, [pc, #104] @ (80092f0 <HAL_DMA_Abort+0x47c>)
  21080. 8009288: 4293 cmp r3, r2
  21081. 800928a: d004 beq.n 8009296 <HAL_DMA_Abort+0x422>
  21082. 800928c: 687b ldr r3, [r7, #4]
  21083. 800928e: 681b ldr r3, [r3, #0]
  21084. 8009290: 4a18 ldr r2, [pc, #96] @ (80092f4 <HAL_DMA_Abort+0x480>)
  21085. 8009292: 4293 cmp r3, r2
  21086. 8009294: d101 bne.n 800929a <HAL_DMA_Abort+0x426>
  21087. 8009296: 2301 movs r3, #1
  21088. 8009298: e000 b.n 800929c <HAL_DMA_Abort+0x428>
  21089. 800929a: 2300 movs r3, #0
  21090. 800929c: 2b00 cmp r3, #0
  21091. 800929e: d02b beq.n 80092f8 <HAL_DMA_Abort+0x484>
  21092. {
  21093. regs_dma = (DMA_Base_Registers *)hdma->StreamBaseAddress;
  21094. 80092a0: 687b ldr r3, [r7, #4]
  21095. 80092a2: 6d9b ldr r3, [r3, #88] @ 0x58
  21096. 80092a4: 60bb str r3, [r7, #8]
  21097. regs_dma->IFCR = 0x3FUL << (hdma->StreamIndex & 0x1FU);
  21098. 80092a6: 687b ldr r3, [r7, #4]
  21099. 80092a8: 6ddb ldr r3, [r3, #92] @ 0x5c
  21100. 80092aa: f003 031f and.w r3, r3, #31
  21101. 80092ae: 223f movs r2, #63 @ 0x3f
  21102. 80092b0: 409a lsls r2, r3
  21103. 80092b2: 68bb ldr r3, [r7, #8]
  21104. 80092b4: 609a str r2, [r3, #8]
  21105. 80092b6: e02a b.n 800930e <HAL_DMA_Abort+0x49a>
  21106. 80092b8: 40020010 .word 0x40020010
  21107. 80092bc: 40020028 .word 0x40020028
  21108. 80092c0: 40020040 .word 0x40020040
  21109. 80092c4: 40020058 .word 0x40020058
  21110. 80092c8: 40020070 .word 0x40020070
  21111. 80092cc: 40020088 .word 0x40020088
  21112. 80092d0: 400200a0 .word 0x400200a0
  21113. 80092d4: 400200b8 .word 0x400200b8
  21114. 80092d8: 40020410 .word 0x40020410
  21115. 80092dc: 40020428 .word 0x40020428
  21116. 80092e0: 40020440 .word 0x40020440
  21117. 80092e4: 40020458 .word 0x40020458
  21118. 80092e8: 40020470 .word 0x40020470
  21119. 80092ec: 40020488 .word 0x40020488
  21120. 80092f0: 400204a0 .word 0x400204a0
  21121. 80092f4: 400204b8 .word 0x400204b8
  21122. }
  21123. else /* BDMA channel */
  21124. {
  21125. regs_bdma = (BDMA_Base_Registers *)hdma->StreamBaseAddress;
  21126. 80092f8: 687b ldr r3, [r7, #4]
  21127. 80092fa: 6d9b ldr r3, [r3, #88] @ 0x58
  21128. 80092fc: 60fb str r3, [r7, #12]
  21129. regs_bdma->IFCR = ((BDMA_IFCR_CGIF0) << (hdma->StreamIndex & 0x1FU));
  21130. 80092fe: 687b ldr r3, [r7, #4]
  21131. 8009300: 6ddb ldr r3, [r3, #92] @ 0x5c
  21132. 8009302: f003 031f and.w r3, r3, #31
  21133. 8009306: 2201 movs r2, #1
  21134. 8009308: 409a lsls r2, r3
  21135. 800930a: 68fb ldr r3, [r7, #12]
  21136. 800930c: 605a str r2, [r3, #4]
  21137. }
  21138. if(IS_DMA_DMAMUX_ALL_INSTANCE(hdma->Instance) != 0U) /* No DMAMUX available for BDMA1 */
  21139. 800930e: 687b ldr r3, [r7, #4]
  21140. 8009310: 681b ldr r3, [r3, #0]
  21141. 8009312: 4a4f ldr r2, [pc, #316] @ (8009450 <HAL_DMA_Abort+0x5dc>)
  21142. 8009314: 4293 cmp r3, r2
  21143. 8009316: d072 beq.n 80093fe <HAL_DMA_Abort+0x58a>
  21144. 8009318: 687b ldr r3, [r7, #4]
  21145. 800931a: 681b ldr r3, [r3, #0]
  21146. 800931c: 4a4d ldr r2, [pc, #308] @ (8009454 <HAL_DMA_Abort+0x5e0>)
  21147. 800931e: 4293 cmp r3, r2
  21148. 8009320: d06d beq.n 80093fe <HAL_DMA_Abort+0x58a>
  21149. 8009322: 687b ldr r3, [r7, #4]
  21150. 8009324: 681b ldr r3, [r3, #0]
  21151. 8009326: 4a4c ldr r2, [pc, #304] @ (8009458 <HAL_DMA_Abort+0x5e4>)
  21152. 8009328: 4293 cmp r3, r2
  21153. 800932a: d068 beq.n 80093fe <HAL_DMA_Abort+0x58a>
  21154. 800932c: 687b ldr r3, [r7, #4]
  21155. 800932e: 681b ldr r3, [r3, #0]
  21156. 8009330: 4a4a ldr r2, [pc, #296] @ (800945c <HAL_DMA_Abort+0x5e8>)
  21157. 8009332: 4293 cmp r3, r2
  21158. 8009334: d063 beq.n 80093fe <HAL_DMA_Abort+0x58a>
  21159. 8009336: 687b ldr r3, [r7, #4]
  21160. 8009338: 681b ldr r3, [r3, #0]
  21161. 800933a: 4a49 ldr r2, [pc, #292] @ (8009460 <HAL_DMA_Abort+0x5ec>)
  21162. 800933c: 4293 cmp r3, r2
  21163. 800933e: d05e beq.n 80093fe <HAL_DMA_Abort+0x58a>
  21164. 8009340: 687b ldr r3, [r7, #4]
  21165. 8009342: 681b ldr r3, [r3, #0]
  21166. 8009344: 4a47 ldr r2, [pc, #284] @ (8009464 <HAL_DMA_Abort+0x5f0>)
  21167. 8009346: 4293 cmp r3, r2
  21168. 8009348: d059 beq.n 80093fe <HAL_DMA_Abort+0x58a>
  21169. 800934a: 687b ldr r3, [r7, #4]
  21170. 800934c: 681b ldr r3, [r3, #0]
  21171. 800934e: 4a46 ldr r2, [pc, #280] @ (8009468 <HAL_DMA_Abort+0x5f4>)
  21172. 8009350: 4293 cmp r3, r2
  21173. 8009352: d054 beq.n 80093fe <HAL_DMA_Abort+0x58a>
  21174. 8009354: 687b ldr r3, [r7, #4]
  21175. 8009356: 681b ldr r3, [r3, #0]
  21176. 8009358: 4a44 ldr r2, [pc, #272] @ (800946c <HAL_DMA_Abort+0x5f8>)
  21177. 800935a: 4293 cmp r3, r2
  21178. 800935c: d04f beq.n 80093fe <HAL_DMA_Abort+0x58a>
  21179. 800935e: 687b ldr r3, [r7, #4]
  21180. 8009360: 681b ldr r3, [r3, #0]
  21181. 8009362: 4a43 ldr r2, [pc, #268] @ (8009470 <HAL_DMA_Abort+0x5fc>)
  21182. 8009364: 4293 cmp r3, r2
  21183. 8009366: d04a beq.n 80093fe <HAL_DMA_Abort+0x58a>
  21184. 8009368: 687b ldr r3, [r7, #4]
  21185. 800936a: 681b ldr r3, [r3, #0]
  21186. 800936c: 4a41 ldr r2, [pc, #260] @ (8009474 <HAL_DMA_Abort+0x600>)
  21187. 800936e: 4293 cmp r3, r2
  21188. 8009370: d045 beq.n 80093fe <HAL_DMA_Abort+0x58a>
  21189. 8009372: 687b ldr r3, [r7, #4]
  21190. 8009374: 681b ldr r3, [r3, #0]
  21191. 8009376: 4a40 ldr r2, [pc, #256] @ (8009478 <HAL_DMA_Abort+0x604>)
  21192. 8009378: 4293 cmp r3, r2
  21193. 800937a: d040 beq.n 80093fe <HAL_DMA_Abort+0x58a>
  21194. 800937c: 687b ldr r3, [r7, #4]
  21195. 800937e: 681b ldr r3, [r3, #0]
  21196. 8009380: 4a3e ldr r2, [pc, #248] @ (800947c <HAL_DMA_Abort+0x608>)
  21197. 8009382: 4293 cmp r3, r2
  21198. 8009384: d03b beq.n 80093fe <HAL_DMA_Abort+0x58a>
  21199. 8009386: 687b ldr r3, [r7, #4]
  21200. 8009388: 681b ldr r3, [r3, #0]
  21201. 800938a: 4a3d ldr r2, [pc, #244] @ (8009480 <HAL_DMA_Abort+0x60c>)
  21202. 800938c: 4293 cmp r3, r2
  21203. 800938e: d036 beq.n 80093fe <HAL_DMA_Abort+0x58a>
  21204. 8009390: 687b ldr r3, [r7, #4]
  21205. 8009392: 681b ldr r3, [r3, #0]
  21206. 8009394: 4a3b ldr r2, [pc, #236] @ (8009484 <HAL_DMA_Abort+0x610>)
  21207. 8009396: 4293 cmp r3, r2
  21208. 8009398: d031 beq.n 80093fe <HAL_DMA_Abort+0x58a>
  21209. 800939a: 687b ldr r3, [r7, #4]
  21210. 800939c: 681b ldr r3, [r3, #0]
  21211. 800939e: 4a3a ldr r2, [pc, #232] @ (8009488 <HAL_DMA_Abort+0x614>)
  21212. 80093a0: 4293 cmp r3, r2
  21213. 80093a2: d02c beq.n 80093fe <HAL_DMA_Abort+0x58a>
  21214. 80093a4: 687b ldr r3, [r7, #4]
  21215. 80093a6: 681b ldr r3, [r3, #0]
  21216. 80093a8: 4a38 ldr r2, [pc, #224] @ (800948c <HAL_DMA_Abort+0x618>)
  21217. 80093aa: 4293 cmp r3, r2
  21218. 80093ac: d027 beq.n 80093fe <HAL_DMA_Abort+0x58a>
  21219. 80093ae: 687b ldr r3, [r7, #4]
  21220. 80093b0: 681b ldr r3, [r3, #0]
  21221. 80093b2: 4a37 ldr r2, [pc, #220] @ (8009490 <HAL_DMA_Abort+0x61c>)
  21222. 80093b4: 4293 cmp r3, r2
  21223. 80093b6: d022 beq.n 80093fe <HAL_DMA_Abort+0x58a>
  21224. 80093b8: 687b ldr r3, [r7, #4]
  21225. 80093ba: 681b ldr r3, [r3, #0]
  21226. 80093bc: 4a35 ldr r2, [pc, #212] @ (8009494 <HAL_DMA_Abort+0x620>)
  21227. 80093be: 4293 cmp r3, r2
  21228. 80093c0: d01d beq.n 80093fe <HAL_DMA_Abort+0x58a>
  21229. 80093c2: 687b ldr r3, [r7, #4]
  21230. 80093c4: 681b ldr r3, [r3, #0]
  21231. 80093c6: 4a34 ldr r2, [pc, #208] @ (8009498 <HAL_DMA_Abort+0x624>)
  21232. 80093c8: 4293 cmp r3, r2
  21233. 80093ca: d018 beq.n 80093fe <HAL_DMA_Abort+0x58a>
  21234. 80093cc: 687b ldr r3, [r7, #4]
  21235. 80093ce: 681b ldr r3, [r3, #0]
  21236. 80093d0: 4a32 ldr r2, [pc, #200] @ (800949c <HAL_DMA_Abort+0x628>)
  21237. 80093d2: 4293 cmp r3, r2
  21238. 80093d4: d013 beq.n 80093fe <HAL_DMA_Abort+0x58a>
  21239. 80093d6: 687b ldr r3, [r7, #4]
  21240. 80093d8: 681b ldr r3, [r3, #0]
  21241. 80093da: 4a31 ldr r2, [pc, #196] @ (80094a0 <HAL_DMA_Abort+0x62c>)
  21242. 80093dc: 4293 cmp r3, r2
  21243. 80093de: d00e beq.n 80093fe <HAL_DMA_Abort+0x58a>
  21244. 80093e0: 687b ldr r3, [r7, #4]
  21245. 80093e2: 681b ldr r3, [r3, #0]
  21246. 80093e4: 4a2f ldr r2, [pc, #188] @ (80094a4 <HAL_DMA_Abort+0x630>)
  21247. 80093e6: 4293 cmp r3, r2
  21248. 80093e8: d009 beq.n 80093fe <HAL_DMA_Abort+0x58a>
  21249. 80093ea: 687b ldr r3, [r7, #4]
  21250. 80093ec: 681b ldr r3, [r3, #0]
  21251. 80093ee: 4a2e ldr r2, [pc, #184] @ (80094a8 <HAL_DMA_Abort+0x634>)
  21252. 80093f0: 4293 cmp r3, r2
  21253. 80093f2: d004 beq.n 80093fe <HAL_DMA_Abort+0x58a>
  21254. 80093f4: 687b ldr r3, [r7, #4]
  21255. 80093f6: 681b ldr r3, [r3, #0]
  21256. 80093f8: 4a2c ldr r2, [pc, #176] @ (80094ac <HAL_DMA_Abort+0x638>)
  21257. 80093fa: 4293 cmp r3, r2
  21258. 80093fc: d101 bne.n 8009402 <HAL_DMA_Abort+0x58e>
  21259. 80093fe: 2301 movs r3, #1
  21260. 8009400: e000 b.n 8009404 <HAL_DMA_Abort+0x590>
  21261. 8009402: 2300 movs r3, #0
  21262. 8009404: 2b00 cmp r3, #0
  21263. 8009406: d015 beq.n 8009434 <HAL_DMA_Abort+0x5c0>
  21264. {
  21265. /* Clear the DMAMUX synchro overrun flag */
  21266. hdma->DMAmuxChannelStatus->CFR = hdma->DMAmuxChannelStatusMask;
  21267. 8009408: 687b ldr r3, [r7, #4]
  21268. 800940a: 6e5b ldr r3, [r3, #100] @ 0x64
  21269. 800940c: 687a ldr r2, [r7, #4]
  21270. 800940e: 6e92 ldr r2, [r2, #104] @ 0x68
  21271. 8009410: 605a str r2, [r3, #4]
  21272. if(hdma->DMAmuxRequestGen != 0U)
  21273. 8009412: 687b ldr r3, [r7, #4]
  21274. 8009414: 6edb ldr r3, [r3, #108] @ 0x6c
  21275. 8009416: 2b00 cmp r3, #0
  21276. 8009418: d00c beq.n 8009434 <HAL_DMA_Abort+0x5c0>
  21277. {
  21278. /* if using DMAMUX request generator, disable the DMAMUX request generator overrun IT */
  21279. /* disable the request gen overrun IT */
  21280. hdma->DMAmuxRequestGen->RGCR &= ~DMAMUX_RGxCR_OIE;
  21281. 800941a: 687b ldr r3, [r7, #4]
  21282. 800941c: 6edb ldr r3, [r3, #108] @ 0x6c
  21283. 800941e: 681a ldr r2, [r3, #0]
  21284. 8009420: 687b ldr r3, [r7, #4]
  21285. 8009422: 6edb ldr r3, [r3, #108] @ 0x6c
  21286. 8009424: f422 7280 bic.w r2, r2, #256 @ 0x100
  21287. 8009428: 601a str r2, [r3, #0]
  21288. /* Clear the DMAMUX request generator overrun flag */
  21289. hdma->DMAmuxRequestGenStatus->RGCFR = hdma->DMAmuxRequestGenStatusMask;
  21290. 800942a: 687b ldr r3, [r7, #4]
  21291. 800942c: 6f1b ldr r3, [r3, #112] @ 0x70
  21292. 800942e: 687a ldr r2, [r7, #4]
  21293. 8009430: 6f52 ldr r2, [r2, #116] @ 0x74
  21294. 8009432: 605a str r2, [r3, #4]
  21295. }
  21296. }
  21297. /* Change the DMA state */
  21298. hdma->State = HAL_DMA_STATE_READY;
  21299. 8009434: 687b ldr r3, [r7, #4]
  21300. 8009436: 2201 movs r2, #1
  21301. 8009438: f883 2035 strb.w r2, [r3, #53] @ 0x35
  21302. /* Process Unlocked */
  21303. __HAL_UNLOCK(hdma);
  21304. 800943c: 687b ldr r3, [r7, #4]
  21305. 800943e: 2200 movs r2, #0
  21306. 8009440: f883 2034 strb.w r2, [r3, #52] @ 0x34
  21307. }
  21308. return HAL_OK;
  21309. 8009444: 2300 movs r3, #0
  21310. }
  21311. 8009446: 4618 mov r0, r3
  21312. 8009448: 3718 adds r7, #24
  21313. 800944a: 46bd mov sp, r7
  21314. 800944c: bd80 pop {r7, pc}
  21315. 800944e: bf00 nop
  21316. 8009450: 40020010 .word 0x40020010
  21317. 8009454: 40020028 .word 0x40020028
  21318. 8009458: 40020040 .word 0x40020040
  21319. 800945c: 40020058 .word 0x40020058
  21320. 8009460: 40020070 .word 0x40020070
  21321. 8009464: 40020088 .word 0x40020088
  21322. 8009468: 400200a0 .word 0x400200a0
  21323. 800946c: 400200b8 .word 0x400200b8
  21324. 8009470: 40020410 .word 0x40020410
  21325. 8009474: 40020428 .word 0x40020428
  21326. 8009478: 40020440 .word 0x40020440
  21327. 800947c: 40020458 .word 0x40020458
  21328. 8009480: 40020470 .word 0x40020470
  21329. 8009484: 40020488 .word 0x40020488
  21330. 8009488: 400204a0 .word 0x400204a0
  21331. 800948c: 400204b8 .word 0x400204b8
  21332. 8009490: 58025408 .word 0x58025408
  21333. 8009494: 5802541c .word 0x5802541c
  21334. 8009498: 58025430 .word 0x58025430
  21335. 800949c: 58025444 .word 0x58025444
  21336. 80094a0: 58025458 .word 0x58025458
  21337. 80094a4: 5802546c .word 0x5802546c
  21338. 80094a8: 58025480 .word 0x58025480
  21339. 80094ac: 58025494 .word 0x58025494
  21340. 080094b0 <HAL_DMA_Abort_IT>:
  21341. * @param hdma : pointer to a DMA_HandleTypeDef structure that contains
  21342. * the configuration information for the specified DMA Stream.
  21343. * @retval HAL status
  21344. */
  21345. HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma)
  21346. {
  21347. 80094b0: b580 push {r7, lr}
  21348. 80094b2: b084 sub sp, #16
  21349. 80094b4: af00 add r7, sp, #0
  21350. 80094b6: 6078 str r0, [r7, #4]
  21351. BDMA_Base_Registers *regs_bdma;
  21352. /* Check the DMA peripheral handle */
  21353. if(hdma == NULL)
  21354. 80094b8: 687b ldr r3, [r7, #4]
  21355. 80094ba: 2b00 cmp r3, #0
  21356. 80094bc: d101 bne.n 80094c2 <HAL_DMA_Abort_IT+0x12>
  21357. {
  21358. return HAL_ERROR;
  21359. 80094be: 2301 movs r3, #1
  21360. 80094c0: e237 b.n 8009932 <HAL_DMA_Abort_IT+0x482>
  21361. }
  21362. if(hdma->State != HAL_DMA_STATE_BUSY)
  21363. 80094c2: 687b ldr r3, [r7, #4]
  21364. 80094c4: f893 3035 ldrb.w r3, [r3, #53] @ 0x35
  21365. 80094c8: b2db uxtb r3, r3
  21366. 80094ca: 2b02 cmp r3, #2
  21367. 80094cc: d004 beq.n 80094d8 <HAL_DMA_Abort_IT+0x28>
  21368. {
  21369. hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER;
  21370. 80094ce: 687b ldr r3, [r7, #4]
  21371. 80094d0: 2280 movs r2, #128 @ 0x80
  21372. 80094d2: 655a str r2, [r3, #84] @ 0x54
  21373. return HAL_ERROR;
  21374. 80094d4: 2301 movs r3, #1
  21375. 80094d6: e22c b.n 8009932 <HAL_DMA_Abort_IT+0x482>
  21376. }
  21377. else
  21378. {
  21379. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  21380. 80094d8: 687b ldr r3, [r7, #4]
  21381. 80094da: 681b ldr r3, [r3, #0]
  21382. 80094dc: 4a5c ldr r2, [pc, #368] @ (8009650 <HAL_DMA_Abort_IT+0x1a0>)
  21383. 80094de: 4293 cmp r3, r2
  21384. 80094e0: d04a beq.n 8009578 <HAL_DMA_Abort_IT+0xc8>
  21385. 80094e2: 687b ldr r3, [r7, #4]
  21386. 80094e4: 681b ldr r3, [r3, #0]
  21387. 80094e6: 4a5b ldr r2, [pc, #364] @ (8009654 <HAL_DMA_Abort_IT+0x1a4>)
  21388. 80094e8: 4293 cmp r3, r2
  21389. 80094ea: d045 beq.n 8009578 <HAL_DMA_Abort_IT+0xc8>
  21390. 80094ec: 687b ldr r3, [r7, #4]
  21391. 80094ee: 681b ldr r3, [r3, #0]
  21392. 80094f0: 4a59 ldr r2, [pc, #356] @ (8009658 <HAL_DMA_Abort_IT+0x1a8>)
  21393. 80094f2: 4293 cmp r3, r2
  21394. 80094f4: d040 beq.n 8009578 <HAL_DMA_Abort_IT+0xc8>
  21395. 80094f6: 687b ldr r3, [r7, #4]
  21396. 80094f8: 681b ldr r3, [r3, #0]
  21397. 80094fa: 4a58 ldr r2, [pc, #352] @ (800965c <HAL_DMA_Abort_IT+0x1ac>)
  21398. 80094fc: 4293 cmp r3, r2
  21399. 80094fe: d03b beq.n 8009578 <HAL_DMA_Abort_IT+0xc8>
  21400. 8009500: 687b ldr r3, [r7, #4]
  21401. 8009502: 681b ldr r3, [r3, #0]
  21402. 8009504: 4a56 ldr r2, [pc, #344] @ (8009660 <HAL_DMA_Abort_IT+0x1b0>)
  21403. 8009506: 4293 cmp r3, r2
  21404. 8009508: d036 beq.n 8009578 <HAL_DMA_Abort_IT+0xc8>
  21405. 800950a: 687b ldr r3, [r7, #4]
  21406. 800950c: 681b ldr r3, [r3, #0]
  21407. 800950e: 4a55 ldr r2, [pc, #340] @ (8009664 <HAL_DMA_Abort_IT+0x1b4>)
  21408. 8009510: 4293 cmp r3, r2
  21409. 8009512: d031 beq.n 8009578 <HAL_DMA_Abort_IT+0xc8>
  21410. 8009514: 687b ldr r3, [r7, #4]
  21411. 8009516: 681b ldr r3, [r3, #0]
  21412. 8009518: 4a53 ldr r2, [pc, #332] @ (8009668 <HAL_DMA_Abort_IT+0x1b8>)
  21413. 800951a: 4293 cmp r3, r2
  21414. 800951c: d02c beq.n 8009578 <HAL_DMA_Abort_IT+0xc8>
  21415. 800951e: 687b ldr r3, [r7, #4]
  21416. 8009520: 681b ldr r3, [r3, #0]
  21417. 8009522: 4a52 ldr r2, [pc, #328] @ (800966c <HAL_DMA_Abort_IT+0x1bc>)
  21418. 8009524: 4293 cmp r3, r2
  21419. 8009526: d027 beq.n 8009578 <HAL_DMA_Abort_IT+0xc8>
  21420. 8009528: 687b ldr r3, [r7, #4]
  21421. 800952a: 681b ldr r3, [r3, #0]
  21422. 800952c: 4a50 ldr r2, [pc, #320] @ (8009670 <HAL_DMA_Abort_IT+0x1c0>)
  21423. 800952e: 4293 cmp r3, r2
  21424. 8009530: d022 beq.n 8009578 <HAL_DMA_Abort_IT+0xc8>
  21425. 8009532: 687b ldr r3, [r7, #4]
  21426. 8009534: 681b ldr r3, [r3, #0]
  21427. 8009536: 4a4f ldr r2, [pc, #316] @ (8009674 <HAL_DMA_Abort_IT+0x1c4>)
  21428. 8009538: 4293 cmp r3, r2
  21429. 800953a: d01d beq.n 8009578 <HAL_DMA_Abort_IT+0xc8>
  21430. 800953c: 687b ldr r3, [r7, #4]
  21431. 800953e: 681b ldr r3, [r3, #0]
  21432. 8009540: 4a4d ldr r2, [pc, #308] @ (8009678 <HAL_DMA_Abort_IT+0x1c8>)
  21433. 8009542: 4293 cmp r3, r2
  21434. 8009544: d018 beq.n 8009578 <HAL_DMA_Abort_IT+0xc8>
  21435. 8009546: 687b ldr r3, [r7, #4]
  21436. 8009548: 681b ldr r3, [r3, #0]
  21437. 800954a: 4a4c ldr r2, [pc, #304] @ (800967c <HAL_DMA_Abort_IT+0x1cc>)
  21438. 800954c: 4293 cmp r3, r2
  21439. 800954e: d013 beq.n 8009578 <HAL_DMA_Abort_IT+0xc8>
  21440. 8009550: 687b ldr r3, [r7, #4]
  21441. 8009552: 681b ldr r3, [r3, #0]
  21442. 8009554: 4a4a ldr r2, [pc, #296] @ (8009680 <HAL_DMA_Abort_IT+0x1d0>)
  21443. 8009556: 4293 cmp r3, r2
  21444. 8009558: d00e beq.n 8009578 <HAL_DMA_Abort_IT+0xc8>
  21445. 800955a: 687b ldr r3, [r7, #4]
  21446. 800955c: 681b ldr r3, [r3, #0]
  21447. 800955e: 4a49 ldr r2, [pc, #292] @ (8009684 <HAL_DMA_Abort_IT+0x1d4>)
  21448. 8009560: 4293 cmp r3, r2
  21449. 8009562: d009 beq.n 8009578 <HAL_DMA_Abort_IT+0xc8>
  21450. 8009564: 687b ldr r3, [r7, #4]
  21451. 8009566: 681b ldr r3, [r3, #0]
  21452. 8009568: 4a47 ldr r2, [pc, #284] @ (8009688 <HAL_DMA_Abort_IT+0x1d8>)
  21453. 800956a: 4293 cmp r3, r2
  21454. 800956c: d004 beq.n 8009578 <HAL_DMA_Abort_IT+0xc8>
  21455. 800956e: 687b ldr r3, [r7, #4]
  21456. 8009570: 681b ldr r3, [r3, #0]
  21457. 8009572: 4a46 ldr r2, [pc, #280] @ (800968c <HAL_DMA_Abort_IT+0x1dc>)
  21458. 8009574: 4293 cmp r3, r2
  21459. 8009576: d101 bne.n 800957c <HAL_DMA_Abort_IT+0xcc>
  21460. 8009578: 2301 movs r3, #1
  21461. 800957a: e000 b.n 800957e <HAL_DMA_Abort_IT+0xce>
  21462. 800957c: 2300 movs r3, #0
  21463. 800957e: 2b00 cmp r3, #0
  21464. 8009580: f000 8086 beq.w 8009690 <HAL_DMA_Abort_IT+0x1e0>
  21465. {
  21466. /* Set Abort State */
  21467. hdma->State = HAL_DMA_STATE_ABORT;
  21468. 8009584: 687b ldr r3, [r7, #4]
  21469. 8009586: 2204 movs r2, #4
  21470. 8009588: f883 2035 strb.w r2, [r3, #53] @ 0x35
  21471. /* Disable the stream */
  21472. __HAL_DMA_DISABLE(hdma);
  21473. 800958c: 687b ldr r3, [r7, #4]
  21474. 800958e: 681b ldr r3, [r3, #0]
  21475. 8009590: 4a2f ldr r2, [pc, #188] @ (8009650 <HAL_DMA_Abort_IT+0x1a0>)
  21476. 8009592: 4293 cmp r3, r2
  21477. 8009594: d04a beq.n 800962c <HAL_DMA_Abort_IT+0x17c>
  21478. 8009596: 687b ldr r3, [r7, #4]
  21479. 8009598: 681b ldr r3, [r3, #0]
  21480. 800959a: 4a2e ldr r2, [pc, #184] @ (8009654 <HAL_DMA_Abort_IT+0x1a4>)
  21481. 800959c: 4293 cmp r3, r2
  21482. 800959e: d045 beq.n 800962c <HAL_DMA_Abort_IT+0x17c>
  21483. 80095a0: 687b ldr r3, [r7, #4]
  21484. 80095a2: 681b ldr r3, [r3, #0]
  21485. 80095a4: 4a2c ldr r2, [pc, #176] @ (8009658 <HAL_DMA_Abort_IT+0x1a8>)
  21486. 80095a6: 4293 cmp r3, r2
  21487. 80095a8: d040 beq.n 800962c <HAL_DMA_Abort_IT+0x17c>
  21488. 80095aa: 687b ldr r3, [r7, #4]
  21489. 80095ac: 681b ldr r3, [r3, #0]
  21490. 80095ae: 4a2b ldr r2, [pc, #172] @ (800965c <HAL_DMA_Abort_IT+0x1ac>)
  21491. 80095b0: 4293 cmp r3, r2
  21492. 80095b2: d03b beq.n 800962c <HAL_DMA_Abort_IT+0x17c>
  21493. 80095b4: 687b ldr r3, [r7, #4]
  21494. 80095b6: 681b ldr r3, [r3, #0]
  21495. 80095b8: 4a29 ldr r2, [pc, #164] @ (8009660 <HAL_DMA_Abort_IT+0x1b0>)
  21496. 80095ba: 4293 cmp r3, r2
  21497. 80095bc: d036 beq.n 800962c <HAL_DMA_Abort_IT+0x17c>
  21498. 80095be: 687b ldr r3, [r7, #4]
  21499. 80095c0: 681b ldr r3, [r3, #0]
  21500. 80095c2: 4a28 ldr r2, [pc, #160] @ (8009664 <HAL_DMA_Abort_IT+0x1b4>)
  21501. 80095c4: 4293 cmp r3, r2
  21502. 80095c6: d031 beq.n 800962c <HAL_DMA_Abort_IT+0x17c>
  21503. 80095c8: 687b ldr r3, [r7, #4]
  21504. 80095ca: 681b ldr r3, [r3, #0]
  21505. 80095cc: 4a26 ldr r2, [pc, #152] @ (8009668 <HAL_DMA_Abort_IT+0x1b8>)
  21506. 80095ce: 4293 cmp r3, r2
  21507. 80095d0: d02c beq.n 800962c <HAL_DMA_Abort_IT+0x17c>
  21508. 80095d2: 687b ldr r3, [r7, #4]
  21509. 80095d4: 681b ldr r3, [r3, #0]
  21510. 80095d6: 4a25 ldr r2, [pc, #148] @ (800966c <HAL_DMA_Abort_IT+0x1bc>)
  21511. 80095d8: 4293 cmp r3, r2
  21512. 80095da: d027 beq.n 800962c <HAL_DMA_Abort_IT+0x17c>
  21513. 80095dc: 687b ldr r3, [r7, #4]
  21514. 80095de: 681b ldr r3, [r3, #0]
  21515. 80095e0: 4a23 ldr r2, [pc, #140] @ (8009670 <HAL_DMA_Abort_IT+0x1c0>)
  21516. 80095e2: 4293 cmp r3, r2
  21517. 80095e4: d022 beq.n 800962c <HAL_DMA_Abort_IT+0x17c>
  21518. 80095e6: 687b ldr r3, [r7, #4]
  21519. 80095e8: 681b ldr r3, [r3, #0]
  21520. 80095ea: 4a22 ldr r2, [pc, #136] @ (8009674 <HAL_DMA_Abort_IT+0x1c4>)
  21521. 80095ec: 4293 cmp r3, r2
  21522. 80095ee: d01d beq.n 800962c <HAL_DMA_Abort_IT+0x17c>
  21523. 80095f0: 687b ldr r3, [r7, #4]
  21524. 80095f2: 681b ldr r3, [r3, #0]
  21525. 80095f4: 4a20 ldr r2, [pc, #128] @ (8009678 <HAL_DMA_Abort_IT+0x1c8>)
  21526. 80095f6: 4293 cmp r3, r2
  21527. 80095f8: d018 beq.n 800962c <HAL_DMA_Abort_IT+0x17c>
  21528. 80095fa: 687b ldr r3, [r7, #4]
  21529. 80095fc: 681b ldr r3, [r3, #0]
  21530. 80095fe: 4a1f ldr r2, [pc, #124] @ (800967c <HAL_DMA_Abort_IT+0x1cc>)
  21531. 8009600: 4293 cmp r3, r2
  21532. 8009602: d013 beq.n 800962c <HAL_DMA_Abort_IT+0x17c>
  21533. 8009604: 687b ldr r3, [r7, #4]
  21534. 8009606: 681b ldr r3, [r3, #0]
  21535. 8009608: 4a1d ldr r2, [pc, #116] @ (8009680 <HAL_DMA_Abort_IT+0x1d0>)
  21536. 800960a: 4293 cmp r3, r2
  21537. 800960c: d00e beq.n 800962c <HAL_DMA_Abort_IT+0x17c>
  21538. 800960e: 687b ldr r3, [r7, #4]
  21539. 8009610: 681b ldr r3, [r3, #0]
  21540. 8009612: 4a1c ldr r2, [pc, #112] @ (8009684 <HAL_DMA_Abort_IT+0x1d4>)
  21541. 8009614: 4293 cmp r3, r2
  21542. 8009616: d009 beq.n 800962c <HAL_DMA_Abort_IT+0x17c>
  21543. 8009618: 687b ldr r3, [r7, #4]
  21544. 800961a: 681b ldr r3, [r3, #0]
  21545. 800961c: 4a1a ldr r2, [pc, #104] @ (8009688 <HAL_DMA_Abort_IT+0x1d8>)
  21546. 800961e: 4293 cmp r3, r2
  21547. 8009620: d004 beq.n 800962c <HAL_DMA_Abort_IT+0x17c>
  21548. 8009622: 687b ldr r3, [r7, #4]
  21549. 8009624: 681b ldr r3, [r3, #0]
  21550. 8009626: 4a19 ldr r2, [pc, #100] @ (800968c <HAL_DMA_Abort_IT+0x1dc>)
  21551. 8009628: 4293 cmp r3, r2
  21552. 800962a: d108 bne.n 800963e <HAL_DMA_Abort_IT+0x18e>
  21553. 800962c: 687b ldr r3, [r7, #4]
  21554. 800962e: 681b ldr r3, [r3, #0]
  21555. 8009630: 681a ldr r2, [r3, #0]
  21556. 8009632: 687b ldr r3, [r7, #4]
  21557. 8009634: 681b ldr r3, [r3, #0]
  21558. 8009636: f022 0201 bic.w r2, r2, #1
  21559. 800963a: 601a str r2, [r3, #0]
  21560. 800963c: e178 b.n 8009930 <HAL_DMA_Abort_IT+0x480>
  21561. 800963e: 687b ldr r3, [r7, #4]
  21562. 8009640: 681b ldr r3, [r3, #0]
  21563. 8009642: 681a ldr r2, [r3, #0]
  21564. 8009644: 687b ldr r3, [r7, #4]
  21565. 8009646: 681b ldr r3, [r3, #0]
  21566. 8009648: f022 0201 bic.w r2, r2, #1
  21567. 800964c: 601a str r2, [r3, #0]
  21568. 800964e: e16f b.n 8009930 <HAL_DMA_Abort_IT+0x480>
  21569. 8009650: 40020010 .word 0x40020010
  21570. 8009654: 40020028 .word 0x40020028
  21571. 8009658: 40020040 .word 0x40020040
  21572. 800965c: 40020058 .word 0x40020058
  21573. 8009660: 40020070 .word 0x40020070
  21574. 8009664: 40020088 .word 0x40020088
  21575. 8009668: 400200a0 .word 0x400200a0
  21576. 800966c: 400200b8 .word 0x400200b8
  21577. 8009670: 40020410 .word 0x40020410
  21578. 8009674: 40020428 .word 0x40020428
  21579. 8009678: 40020440 .word 0x40020440
  21580. 800967c: 40020458 .word 0x40020458
  21581. 8009680: 40020470 .word 0x40020470
  21582. 8009684: 40020488 .word 0x40020488
  21583. 8009688: 400204a0 .word 0x400204a0
  21584. 800968c: 400204b8 .word 0x400204b8
  21585. }
  21586. else /* BDMA channel */
  21587. {
  21588. /* Disable DMA All Interrupts */
  21589. ((BDMA_Channel_TypeDef *)hdma->Instance)->CCR &= ~(BDMA_CCR_TCIE | BDMA_CCR_HTIE | BDMA_CCR_TEIE);
  21590. 8009690: 687b ldr r3, [r7, #4]
  21591. 8009692: 681b ldr r3, [r3, #0]
  21592. 8009694: 681a ldr r2, [r3, #0]
  21593. 8009696: 687b ldr r3, [r7, #4]
  21594. 8009698: 681b ldr r3, [r3, #0]
  21595. 800969a: f022 020e bic.w r2, r2, #14
  21596. 800969e: 601a str r2, [r3, #0]
  21597. /* Disable the channel */
  21598. __HAL_DMA_DISABLE(hdma);
  21599. 80096a0: 687b ldr r3, [r7, #4]
  21600. 80096a2: 681b ldr r3, [r3, #0]
  21601. 80096a4: 4a6c ldr r2, [pc, #432] @ (8009858 <HAL_DMA_Abort_IT+0x3a8>)
  21602. 80096a6: 4293 cmp r3, r2
  21603. 80096a8: d04a beq.n 8009740 <HAL_DMA_Abort_IT+0x290>
  21604. 80096aa: 687b ldr r3, [r7, #4]
  21605. 80096ac: 681b ldr r3, [r3, #0]
  21606. 80096ae: 4a6b ldr r2, [pc, #428] @ (800985c <HAL_DMA_Abort_IT+0x3ac>)
  21607. 80096b0: 4293 cmp r3, r2
  21608. 80096b2: d045 beq.n 8009740 <HAL_DMA_Abort_IT+0x290>
  21609. 80096b4: 687b ldr r3, [r7, #4]
  21610. 80096b6: 681b ldr r3, [r3, #0]
  21611. 80096b8: 4a69 ldr r2, [pc, #420] @ (8009860 <HAL_DMA_Abort_IT+0x3b0>)
  21612. 80096ba: 4293 cmp r3, r2
  21613. 80096bc: d040 beq.n 8009740 <HAL_DMA_Abort_IT+0x290>
  21614. 80096be: 687b ldr r3, [r7, #4]
  21615. 80096c0: 681b ldr r3, [r3, #0]
  21616. 80096c2: 4a68 ldr r2, [pc, #416] @ (8009864 <HAL_DMA_Abort_IT+0x3b4>)
  21617. 80096c4: 4293 cmp r3, r2
  21618. 80096c6: d03b beq.n 8009740 <HAL_DMA_Abort_IT+0x290>
  21619. 80096c8: 687b ldr r3, [r7, #4]
  21620. 80096ca: 681b ldr r3, [r3, #0]
  21621. 80096cc: 4a66 ldr r2, [pc, #408] @ (8009868 <HAL_DMA_Abort_IT+0x3b8>)
  21622. 80096ce: 4293 cmp r3, r2
  21623. 80096d0: d036 beq.n 8009740 <HAL_DMA_Abort_IT+0x290>
  21624. 80096d2: 687b ldr r3, [r7, #4]
  21625. 80096d4: 681b ldr r3, [r3, #0]
  21626. 80096d6: 4a65 ldr r2, [pc, #404] @ (800986c <HAL_DMA_Abort_IT+0x3bc>)
  21627. 80096d8: 4293 cmp r3, r2
  21628. 80096da: d031 beq.n 8009740 <HAL_DMA_Abort_IT+0x290>
  21629. 80096dc: 687b ldr r3, [r7, #4]
  21630. 80096de: 681b ldr r3, [r3, #0]
  21631. 80096e0: 4a63 ldr r2, [pc, #396] @ (8009870 <HAL_DMA_Abort_IT+0x3c0>)
  21632. 80096e2: 4293 cmp r3, r2
  21633. 80096e4: d02c beq.n 8009740 <HAL_DMA_Abort_IT+0x290>
  21634. 80096e6: 687b ldr r3, [r7, #4]
  21635. 80096e8: 681b ldr r3, [r3, #0]
  21636. 80096ea: 4a62 ldr r2, [pc, #392] @ (8009874 <HAL_DMA_Abort_IT+0x3c4>)
  21637. 80096ec: 4293 cmp r3, r2
  21638. 80096ee: d027 beq.n 8009740 <HAL_DMA_Abort_IT+0x290>
  21639. 80096f0: 687b ldr r3, [r7, #4]
  21640. 80096f2: 681b ldr r3, [r3, #0]
  21641. 80096f4: 4a60 ldr r2, [pc, #384] @ (8009878 <HAL_DMA_Abort_IT+0x3c8>)
  21642. 80096f6: 4293 cmp r3, r2
  21643. 80096f8: d022 beq.n 8009740 <HAL_DMA_Abort_IT+0x290>
  21644. 80096fa: 687b ldr r3, [r7, #4]
  21645. 80096fc: 681b ldr r3, [r3, #0]
  21646. 80096fe: 4a5f ldr r2, [pc, #380] @ (800987c <HAL_DMA_Abort_IT+0x3cc>)
  21647. 8009700: 4293 cmp r3, r2
  21648. 8009702: d01d beq.n 8009740 <HAL_DMA_Abort_IT+0x290>
  21649. 8009704: 687b ldr r3, [r7, #4]
  21650. 8009706: 681b ldr r3, [r3, #0]
  21651. 8009708: 4a5d ldr r2, [pc, #372] @ (8009880 <HAL_DMA_Abort_IT+0x3d0>)
  21652. 800970a: 4293 cmp r3, r2
  21653. 800970c: d018 beq.n 8009740 <HAL_DMA_Abort_IT+0x290>
  21654. 800970e: 687b ldr r3, [r7, #4]
  21655. 8009710: 681b ldr r3, [r3, #0]
  21656. 8009712: 4a5c ldr r2, [pc, #368] @ (8009884 <HAL_DMA_Abort_IT+0x3d4>)
  21657. 8009714: 4293 cmp r3, r2
  21658. 8009716: d013 beq.n 8009740 <HAL_DMA_Abort_IT+0x290>
  21659. 8009718: 687b ldr r3, [r7, #4]
  21660. 800971a: 681b ldr r3, [r3, #0]
  21661. 800971c: 4a5a ldr r2, [pc, #360] @ (8009888 <HAL_DMA_Abort_IT+0x3d8>)
  21662. 800971e: 4293 cmp r3, r2
  21663. 8009720: d00e beq.n 8009740 <HAL_DMA_Abort_IT+0x290>
  21664. 8009722: 687b ldr r3, [r7, #4]
  21665. 8009724: 681b ldr r3, [r3, #0]
  21666. 8009726: 4a59 ldr r2, [pc, #356] @ (800988c <HAL_DMA_Abort_IT+0x3dc>)
  21667. 8009728: 4293 cmp r3, r2
  21668. 800972a: d009 beq.n 8009740 <HAL_DMA_Abort_IT+0x290>
  21669. 800972c: 687b ldr r3, [r7, #4]
  21670. 800972e: 681b ldr r3, [r3, #0]
  21671. 8009730: 4a57 ldr r2, [pc, #348] @ (8009890 <HAL_DMA_Abort_IT+0x3e0>)
  21672. 8009732: 4293 cmp r3, r2
  21673. 8009734: d004 beq.n 8009740 <HAL_DMA_Abort_IT+0x290>
  21674. 8009736: 687b ldr r3, [r7, #4]
  21675. 8009738: 681b ldr r3, [r3, #0]
  21676. 800973a: 4a56 ldr r2, [pc, #344] @ (8009894 <HAL_DMA_Abort_IT+0x3e4>)
  21677. 800973c: 4293 cmp r3, r2
  21678. 800973e: d108 bne.n 8009752 <HAL_DMA_Abort_IT+0x2a2>
  21679. 8009740: 687b ldr r3, [r7, #4]
  21680. 8009742: 681b ldr r3, [r3, #0]
  21681. 8009744: 681a ldr r2, [r3, #0]
  21682. 8009746: 687b ldr r3, [r7, #4]
  21683. 8009748: 681b ldr r3, [r3, #0]
  21684. 800974a: f022 0201 bic.w r2, r2, #1
  21685. 800974e: 601a str r2, [r3, #0]
  21686. 8009750: e007 b.n 8009762 <HAL_DMA_Abort_IT+0x2b2>
  21687. 8009752: 687b ldr r3, [r7, #4]
  21688. 8009754: 681b ldr r3, [r3, #0]
  21689. 8009756: 681a ldr r2, [r3, #0]
  21690. 8009758: 687b ldr r3, [r7, #4]
  21691. 800975a: 681b ldr r3, [r3, #0]
  21692. 800975c: f022 0201 bic.w r2, r2, #1
  21693. 8009760: 601a str r2, [r3, #0]
  21694. if(IS_DMA_DMAMUX_ALL_INSTANCE(hdma->Instance) != 0U) /* No DMAMUX available for BDMA1 */
  21695. 8009762: 687b ldr r3, [r7, #4]
  21696. 8009764: 681b ldr r3, [r3, #0]
  21697. 8009766: 4a3c ldr r2, [pc, #240] @ (8009858 <HAL_DMA_Abort_IT+0x3a8>)
  21698. 8009768: 4293 cmp r3, r2
  21699. 800976a: d072 beq.n 8009852 <HAL_DMA_Abort_IT+0x3a2>
  21700. 800976c: 687b ldr r3, [r7, #4]
  21701. 800976e: 681b ldr r3, [r3, #0]
  21702. 8009770: 4a3a ldr r2, [pc, #232] @ (800985c <HAL_DMA_Abort_IT+0x3ac>)
  21703. 8009772: 4293 cmp r3, r2
  21704. 8009774: d06d beq.n 8009852 <HAL_DMA_Abort_IT+0x3a2>
  21705. 8009776: 687b ldr r3, [r7, #4]
  21706. 8009778: 681b ldr r3, [r3, #0]
  21707. 800977a: 4a39 ldr r2, [pc, #228] @ (8009860 <HAL_DMA_Abort_IT+0x3b0>)
  21708. 800977c: 4293 cmp r3, r2
  21709. 800977e: d068 beq.n 8009852 <HAL_DMA_Abort_IT+0x3a2>
  21710. 8009780: 687b ldr r3, [r7, #4]
  21711. 8009782: 681b ldr r3, [r3, #0]
  21712. 8009784: 4a37 ldr r2, [pc, #220] @ (8009864 <HAL_DMA_Abort_IT+0x3b4>)
  21713. 8009786: 4293 cmp r3, r2
  21714. 8009788: d063 beq.n 8009852 <HAL_DMA_Abort_IT+0x3a2>
  21715. 800978a: 687b ldr r3, [r7, #4]
  21716. 800978c: 681b ldr r3, [r3, #0]
  21717. 800978e: 4a36 ldr r2, [pc, #216] @ (8009868 <HAL_DMA_Abort_IT+0x3b8>)
  21718. 8009790: 4293 cmp r3, r2
  21719. 8009792: d05e beq.n 8009852 <HAL_DMA_Abort_IT+0x3a2>
  21720. 8009794: 687b ldr r3, [r7, #4]
  21721. 8009796: 681b ldr r3, [r3, #0]
  21722. 8009798: 4a34 ldr r2, [pc, #208] @ (800986c <HAL_DMA_Abort_IT+0x3bc>)
  21723. 800979a: 4293 cmp r3, r2
  21724. 800979c: d059 beq.n 8009852 <HAL_DMA_Abort_IT+0x3a2>
  21725. 800979e: 687b ldr r3, [r7, #4]
  21726. 80097a0: 681b ldr r3, [r3, #0]
  21727. 80097a2: 4a33 ldr r2, [pc, #204] @ (8009870 <HAL_DMA_Abort_IT+0x3c0>)
  21728. 80097a4: 4293 cmp r3, r2
  21729. 80097a6: d054 beq.n 8009852 <HAL_DMA_Abort_IT+0x3a2>
  21730. 80097a8: 687b ldr r3, [r7, #4]
  21731. 80097aa: 681b ldr r3, [r3, #0]
  21732. 80097ac: 4a31 ldr r2, [pc, #196] @ (8009874 <HAL_DMA_Abort_IT+0x3c4>)
  21733. 80097ae: 4293 cmp r3, r2
  21734. 80097b0: d04f beq.n 8009852 <HAL_DMA_Abort_IT+0x3a2>
  21735. 80097b2: 687b ldr r3, [r7, #4]
  21736. 80097b4: 681b ldr r3, [r3, #0]
  21737. 80097b6: 4a30 ldr r2, [pc, #192] @ (8009878 <HAL_DMA_Abort_IT+0x3c8>)
  21738. 80097b8: 4293 cmp r3, r2
  21739. 80097ba: d04a beq.n 8009852 <HAL_DMA_Abort_IT+0x3a2>
  21740. 80097bc: 687b ldr r3, [r7, #4]
  21741. 80097be: 681b ldr r3, [r3, #0]
  21742. 80097c0: 4a2e ldr r2, [pc, #184] @ (800987c <HAL_DMA_Abort_IT+0x3cc>)
  21743. 80097c2: 4293 cmp r3, r2
  21744. 80097c4: d045 beq.n 8009852 <HAL_DMA_Abort_IT+0x3a2>
  21745. 80097c6: 687b ldr r3, [r7, #4]
  21746. 80097c8: 681b ldr r3, [r3, #0]
  21747. 80097ca: 4a2d ldr r2, [pc, #180] @ (8009880 <HAL_DMA_Abort_IT+0x3d0>)
  21748. 80097cc: 4293 cmp r3, r2
  21749. 80097ce: d040 beq.n 8009852 <HAL_DMA_Abort_IT+0x3a2>
  21750. 80097d0: 687b ldr r3, [r7, #4]
  21751. 80097d2: 681b ldr r3, [r3, #0]
  21752. 80097d4: 4a2b ldr r2, [pc, #172] @ (8009884 <HAL_DMA_Abort_IT+0x3d4>)
  21753. 80097d6: 4293 cmp r3, r2
  21754. 80097d8: d03b beq.n 8009852 <HAL_DMA_Abort_IT+0x3a2>
  21755. 80097da: 687b ldr r3, [r7, #4]
  21756. 80097dc: 681b ldr r3, [r3, #0]
  21757. 80097de: 4a2a ldr r2, [pc, #168] @ (8009888 <HAL_DMA_Abort_IT+0x3d8>)
  21758. 80097e0: 4293 cmp r3, r2
  21759. 80097e2: d036 beq.n 8009852 <HAL_DMA_Abort_IT+0x3a2>
  21760. 80097e4: 687b ldr r3, [r7, #4]
  21761. 80097e6: 681b ldr r3, [r3, #0]
  21762. 80097e8: 4a28 ldr r2, [pc, #160] @ (800988c <HAL_DMA_Abort_IT+0x3dc>)
  21763. 80097ea: 4293 cmp r3, r2
  21764. 80097ec: d031 beq.n 8009852 <HAL_DMA_Abort_IT+0x3a2>
  21765. 80097ee: 687b ldr r3, [r7, #4]
  21766. 80097f0: 681b ldr r3, [r3, #0]
  21767. 80097f2: 4a27 ldr r2, [pc, #156] @ (8009890 <HAL_DMA_Abort_IT+0x3e0>)
  21768. 80097f4: 4293 cmp r3, r2
  21769. 80097f6: d02c beq.n 8009852 <HAL_DMA_Abort_IT+0x3a2>
  21770. 80097f8: 687b ldr r3, [r7, #4]
  21771. 80097fa: 681b ldr r3, [r3, #0]
  21772. 80097fc: 4a25 ldr r2, [pc, #148] @ (8009894 <HAL_DMA_Abort_IT+0x3e4>)
  21773. 80097fe: 4293 cmp r3, r2
  21774. 8009800: d027 beq.n 8009852 <HAL_DMA_Abort_IT+0x3a2>
  21775. 8009802: 687b ldr r3, [r7, #4]
  21776. 8009804: 681b ldr r3, [r3, #0]
  21777. 8009806: 4a24 ldr r2, [pc, #144] @ (8009898 <HAL_DMA_Abort_IT+0x3e8>)
  21778. 8009808: 4293 cmp r3, r2
  21779. 800980a: d022 beq.n 8009852 <HAL_DMA_Abort_IT+0x3a2>
  21780. 800980c: 687b ldr r3, [r7, #4]
  21781. 800980e: 681b ldr r3, [r3, #0]
  21782. 8009810: 4a22 ldr r2, [pc, #136] @ (800989c <HAL_DMA_Abort_IT+0x3ec>)
  21783. 8009812: 4293 cmp r3, r2
  21784. 8009814: d01d beq.n 8009852 <HAL_DMA_Abort_IT+0x3a2>
  21785. 8009816: 687b ldr r3, [r7, #4]
  21786. 8009818: 681b ldr r3, [r3, #0]
  21787. 800981a: 4a21 ldr r2, [pc, #132] @ (80098a0 <HAL_DMA_Abort_IT+0x3f0>)
  21788. 800981c: 4293 cmp r3, r2
  21789. 800981e: d018 beq.n 8009852 <HAL_DMA_Abort_IT+0x3a2>
  21790. 8009820: 687b ldr r3, [r7, #4]
  21791. 8009822: 681b ldr r3, [r3, #0]
  21792. 8009824: 4a1f ldr r2, [pc, #124] @ (80098a4 <HAL_DMA_Abort_IT+0x3f4>)
  21793. 8009826: 4293 cmp r3, r2
  21794. 8009828: d013 beq.n 8009852 <HAL_DMA_Abort_IT+0x3a2>
  21795. 800982a: 687b ldr r3, [r7, #4]
  21796. 800982c: 681b ldr r3, [r3, #0]
  21797. 800982e: 4a1e ldr r2, [pc, #120] @ (80098a8 <HAL_DMA_Abort_IT+0x3f8>)
  21798. 8009830: 4293 cmp r3, r2
  21799. 8009832: d00e beq.n 8009852 <HAL_DMA_Abort_IT+0x3a2>
  21800. 8009834: 687b ldr r3, [r7, #4]
  21801. 8009836: 681b ldr r3, [r3, #0]
  21802. 8009838: 4a1c ldr r2, [pc, #112] @ (80098ac <HAL_DMA_Abort_IT+0x3fc>)
  21803. 800983a: 4293 cmp r3, r2
  21804. 800983c: d009 beq.n 8009852 <HAL_DMA_Abort_IT+0x3a2>
  21805. 800983e: 687b ldr r3, [r7, #4]
  21806. 8009840: 681b ldr r3, [r3, #0]
  21807. 8009842: 4a1b ldr r2, [pc, #108] @ (80098b0 <HAL_DMA_Abort_IT+0x400>)
  21808. 8009844: 4293 cmp r3, r2
  21809. 8009846: d004 beq.n 8009852 <HAL_DMA_Abort_IT+0x3a2>
  21810. 8009848: 687b ldr r3, [r7, #4]
  21811. 800984a: 681b ldr r3, [r3, #0]
  21812. 800984c: 4a19 ldr r2, [pc, #100] @ (80098b4 <HAL_DMA_Abort_IT+0x404>)
  21813. 800984e: 4293 cmp r3, r2
  21814. 8009850: d132 bne.n 80098b8 <HAL_DMA_Abort_IT+0x408>
  21815. 8009852: 2301 movs r3, #1
  21816. 8009854: e031 b.n 80098ba <HAL_DMA_Abort_IT+0x40a>
  21817. 8009856: bf00 nop
  21818. 8009858: 40020010 .word 0x40020010
  21819. 800985c: 40020028 .word 0x40020028
  21820. 8009860: 40020040 .word 0x40020040
  21821. 8009864: 40020058 .word 0x40020058
  21822. 8009868: 40020070 .word 0x40020070
  21823. 800986c: 40020088 .word 0x40020088
  21824. 8009870: 400200a0 .word 0x400200a0
  21825. 8009874: 400200b8 .word 0x400200b8
  21826. 8009878: 40020410 .word 0x40020410
  21827. 800987c: 40020428 .word 0x40020428
  21828. 8009880: 40020440 .word 0x40020440
  21829. 8009884: 40020458 .word 0x40020458
  21830. 8009888: 40020470 .word 0x40020470
  21831. 800988c: 40020488 .word 0x40020488
  21832. 8009890: 400204a0 .word 0x400204a0
  21833. 8009894: 400204b8 .word 0x400204b8
  21834. 8009898: 58025408 .word 0x58025408
  21835. 800989c: 5802541c .word 0x5802541c
  21836. 80098a0: 58025430 .word 0x58025430
  21837. 80098a4: 58025444 .word 0x58025444
  21838. 80098a8: 58025458 .word 0x58025458
  21839. 80098ac: 5802546c .word 0x5802546c
  21840. 80098b0: 58025480 .word 0x58025480
  21841. 80098b4: 58025494 .word 0x58025494
  21842. 80098b8: 2300 movs r3, #0
  21843. 80098ba: 2b00 cmp r3, #0
  21844. 80098bc: d028 beq.n 8009910 <HAL_DMA_Abort_IT+0x460>
  21845. {
  21846. /* disable the DMAMUX sync overrun IT */
  21847. hdma->DMAmuxChannel->CCR &= ~DMAMUX_CxCR_SOIE;
  21848. 80098be: 687b ldr r3, [r7, #4]
  21849. 80098c0: 6e1b ldr r3, [r3, #96] @ 0x60
  21850. 80098c2: 681a ldr r2, [r3, #0]
  21851. 80098c4: 687b ldr r3, [r7, #4]
  21852. 80098c6: 6e1b ldr r3, [r3, #96] @ 0x60
  21853. 80098c8: f422 7280 bic.w r2, r2, #256 @ 0x100
  21854. 80098cc: 601a str r2, [r3, #0]
  21855. /* Clear all flags */
  21856. regs_bdma = (BDMA_Base_Registers *)hdma->StreamBaseAddress;
  21857. 80098ce: 687b ldr r3, [r7, #4]
  21858. 80098d0: 6d9b ldr r3, [r3, #88] @ 0x58
  21859. 80098d2: 60fb str r3, [r7, #12]
  21860. regs_bdma->IFCR = ((BDMA_IFCR_CGIF0) << (hdma->StreamIndex & 0x1FU));
  21861. 80098d4: 687b ldr r3, [r7, #4]
  21862. 80098d6: 6ddb ldr r3, [r3, #92] @ 0x5c
  21863. 80098d8: f003 031f and.w r3, r3, #31
  21864. 80098dc: 2201 movs r2, #1
  21865. 80098de: 409a lsls r2, r3
  21866. 80098e0: 68fb ldr r3, [r7, #12]
  21867. 80098e2: 605a str r2, [r3, #4]
  21868. /* Clear the DMAMUX synchro overrun flag */
  21869. hdma->DMAmuxChannelStatus->CFR = hdma->DMAmuxChannelStatusMask;
  21870. 80098e4: 687b ldr r3, [r7, #4]
  21871. 80098e6: 6e5b ldr r3, [r3, #100] @ 0x64
  21872. 80098e8: 687a ldr r2, [r7, #4]
  21873. 80098ea: 6e92 ldr r2, [r2, #104] @ 0x68
  21874. 80098ec: 605a str r2, [r3, #4]
  21875. if(hdma->DMAmuxRequestGen != 0U)
  21876. 80098ee: 687b ldr r3, [r7, #4]
  21877. 80098f0: 6edb ldr r3, [r3, #108] @ 0x6c
  21878. 80098f2: 2b00 cmp r3, #0
  21879. 80098f4: d00c beq.n 8009910 <HAL_DMA_Abort_IT+0x460>
  21880. {
  21881. /* if using DMAMUX request generator, disable the DMAMUX request generator overrun IT*/
  21882. /* disable the request gen overrun IT */
  21883. hdma->DMAmuxRequestGen->RGCR &= ~DMAMUX_RGxCR_OIE;
  21884. 80098f6: 687b ldr r3, [r7, #4]
  21885. 80098f8: 6edb ldr r3, [r3, #108] @ 0x6c
  21886. 80098fa: 681a ldr r2, [r3, #0]
  21887. 80098fc: 687b ldr r3, [r7, #4]
  21888. 80098fe: 6edb ldr r3, [r3, #108] @ 0x6c
  21889. 8009900: f422 7280 bic.w r2, r2, #256 @ 0x100
  21890. 8009904: 601a str r2, [r3, #0]
  21891. /* Clear the DMAMUX request generator overrun flag */
  21892. hdma->DMAmuxRequestGenStatus->RGCFR = hdma->DMAmuxRequestGenStatusMask;
  21893. 8009906: 687b ldr r3, [r7, #4]
  21894. 8009908: 6f1b ldr r3, [r3, #112] @ 0x70
  21895. 800990a: 687a ldr r2, [r7, #4]
  21896. 800990c: 6f52 ldr r2, [r2, #116] @ 0x74
  21897. 800990e: 605a str r2, [r3, #4]
  21898. }
  21899. }
  21900. /* Change the DMA state */
  21901. hdma->State = HAL_DMA_STATE_READY;
  21902. 8009910: 687b ldr r3, [r7, #4]
  21903. 8009912: 2201 movs r2, #1
  21904. 8009914: f883 2035 strb.w r2, [r3, #53] @ 0x35
  21905. /* Process Unlocked */
  21906. __HAL_UNLOCK(hdma);
  21907. 8009918: 687b ldr r3, [r7, #4]
  21908. 800991a: 2200 movs r2, #0
  21909. 800991c: f883 2034 strb.w r2, [r3, #52] @ 0x34
  21910. /* Call User Abort callback */
  21911. if(hdma->XferAbortCallback != NULL)
  21912. 8009920: 687b ldr r3, [r7, #4]
  21913. 8009922: 6d1b ldr r3, [r3, #80] @ 0x50
  21914. 8009924: 2b00 cmp r3, #0
  21915. 8009926: d003 beq.n 8009930 <HAL_DMA_Abort_IT+0x480>
  21916. {
  21917. hdma->XferAbortCallback(hdma);
  21918. 8009928: 687b ldr r3, [r7, #4]
  21919. 800992a: 6d1b ldr r3, [r3, #80] @ 0x50
  21920. 800992c: 6878 ldr r0, [r7, #4]
  21921. 800992e: 4798 blx r3
  21922. }
  21923. }
  21924. }
  21925. return HAL_OK;
  21926. 8009930: 2300 movs r3, #0
  21927. }
  21928. 8009932: 4618 mov r0, r3
  21929. 8009934: 3710 adds r7, #16
  21930. 8009936: 46bd mov sp, r7
  21931. 8009938: bd80 pop {r7, pc}
  21932. 800993a: bf00 nop
  21933. 0800993c <HAL_DMA_IRQHandler>:
  21934. * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
  21935. * the configuration information for the specified DMA Stream.
  21936. * @retval None
  21937. */
  21938. void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma)
  21939. {
  21940. 800993c: b580 push {r7, lr}
  21941. 800993e: b08a sub sp, #40 @ 0x28
  21942. 8009940: af00 add r7, sp, #0
  21943. 8009942: 6078 str r0, [r7, #4]
  21944. uint32_t tmpisr_dma, tmpisr_bdma;
  21945. uint32_t ccr_reg;
  21946. __IO uint32_t count = 0U;
  21947. 8009944: 2300 movs r3, #0
  21948. 8009946: 60fb str r3, [r7, #12]
  21949. uint32_t timeout = SystemCoreClock / 9600U;
  21950. 8009948: 4b67 ldr r3, [pc, #412] @ (8009ae8 <HAL_DMA_IRQHandler+0x1ac>)
  21951. 800994a: 681b ldr r3, [r3, #0]
  21952. 800994c: 4a67 ldr r2, [pc, #412] @ (8009aec <HAL_DMA_IRQHandler+0x1b0>)
  21953. 800994e: fba2 2303 umull r2, r3, r2, r3
  21954. 8009952: 0a9b lsrs r3, r3, #10
  21955. 8009954: 627b str r3, [r7, #36] @ 0x24
  21956. /* calculate DMA base and stream number */
  21957. DMA_Base_Registers *regs_dma = (DMA_Base_Registers *)hdma->StreamBaseAddress;
  21958. 8009956: 687b ldr r3, [r7, #4]
  21959. 8009958: 6d9b ldr r3, [r3, #88] @ 0x58
  21960. 800995a: 623b str r3, [r7, #32]
  21961. BDMA_Base_Registers *regs_bdma = (BDMA_Base_Registers *)hdma->StreamBaseAddress;
  21962. 800995c: 687b ldr r3, [r7, #4]
  21963. 800995e: 6d9b ldr r3, [r3, #88] @ 0x58
  21964. 8009960: 61fb str r3, [r7, #28]
  21965. tmpisr_dma = regs_dma->ISR;
  21966. 8009962: 6a3b ldr r3, [r7, #32]
  21967. 8009964: 681b ldr r3, [r3, #0]
  21968. 8009966: 61bb str r3, [r7, #24]
  21969. tmpisr_bdma = regs_bdma->ISR;
  21970. 8009968: 69fb ldr r3, [r7, #28]
  21971. 800996a: 681b ldr r3, [r3, #0]
  21972. 800996c: 617b str r3, [r7, #20]
  21973. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  21974. 800996e: 687b ldr r3, [r7, #4]
  21975. 8009970: 681b ldr r3, [r3, #0]
  21976. 8009972: 4a5f ldr r2, [pc, #380] @ (8009af0 <HAL_DMA_IRQHandler+0x1b4>)
  21977. 8009974: 4293 cmp r3, r2
  21978. 8009976: d04a beq.n 8009a0e <HAL_DMA_IRQHandler+0xd2>
  21979. 8009978: 687b ldr r3, [r7, #4]
  21980. 800997a: 681b ldr r3, [r3, #0]
  21981. 800997c: 4a5d ldr r2, [pc, #372] @ (8009af4 <HAL_DMA_IRQHandler+0x1b8>)
  21982. 800997e: 4293 cmp r3, r2
  21983. 8009980: d045 beq.n 8009a0e <HAL_DMA_IRQHandler+0xd2>
  21984. 8009982: 687b ldr r3, [r7, #4]
  21985. 8009984: 681b ldr r3, [r3, #0]
  21986. 8009986: 4a5c ldr r2, [pc, #368] @ (8009af8 <HAL_DMA_IRQHandler+0x1bc>)
  21987. 8009988: 4293 cmp r3, r2
  21988. 800998a: d040 beq.n 8009a0e <HAL_DMA_IRQHandler+0xd2>
  21989. 800998c: 687b ldr r3, [r7, #4]
  21990. 800998e: 681b ldr r3, [r3, #0]
  21991. 8009990: 4a5a ldr r2, [pc, #360] @ (8009afc <HAL_DMA_IRQHandler+0x1c0>)
  21992. 8009992: 4293 cmp r3, r2
  21993. 8009994: d03b beq.n 8009a0e <HAL_DMA_IRQHandler+0xd2>
  21994. 8009996: 687b ldr r3, [r7, #4]
  21995. 8009998: 681b ldr r3, [r3, #0]
  21996. 800999a: 4a59 ldr r2, [pc, #356] @ (8009b00 <HAL_DMA_IRQHandler+0x1c4>)
  21997. 800999c: 4293 cmp r3, r2
  21998. 800999e: d036 beq.n 8009a0e <HAL_DMA_IRQHandler+0xd2>
  21999. 80099a0: 687b ldr r3, [r7, #4]
  22000. 80099a2: 681b ldr r3, [r3, #0]
  22001. 80099a4: 4a57 ldr r2, [pc, #348] @ (8009b04 <HAL_DMA_IRQHandler+0x1c8>)
  22002. 80099a6: 4293 cmp r3, r2
  22003. 80099a8: d031 beq.n 8009a0e <HAL_DMA_IRQHandler+0xd2>
  22004. 80099aa: 687b ldr r3, [r7, #4]
  22005. 80099ac: 681b ldr r3, [r3, #0]
  22006. 80099ae: 4a56 ldr r2, [pc, #344] @ (8009b08 <HAL_DMA_IRQHandler+0x1cc>)
  22007. 80099b0: 4293 cmp r3, r2
  22008. 80099b2: d02c beq.n 8009a0e <HAL_DMA_IRQHandler+0xd2>
  22009. 80099b4: 687b ldr r3, [r7, #4]
  22010. 80099b6: 681b ldr r3, [r3, #0]
  22011. 80099b8: 4a54 ldr r2, [pc, #336] @ (8009b0c <HAL_DMA_IRQHandler+0x1d0>)
  22012. 80099ba: 4293 cmp r3, r2
  22013. 80099bc: d027 beq.n 8009a0e <HAL_DMA_IRQHandler+0xd2>
  22014. 80099be: 687b ldr r3, [r7, #4]
  22015. 80099c0: 681b ldr r3, [r3, #0]
  22016. 80099c2: 4a53 ldr r2, [pc, #332] @ (8009b10 <HAL_DMA_IRQHandler+0x1d4>)
  22017. 80099c4: 4293 cmp r3, r2
  22018. 80099c6: d022 beq.n 8009a0e <HAL_DMA_IRQHandler+0xd2>
  22019. 80099c8: 687b ldr r3, [r7, #4]
  22020. 80099ca: 681b ldr r3, [r3, #0]
  22021. 80099cc: 4a51 ldr r2, [pc, #324] @ (8009b14 <HAL_DMA_IRQHandler+0x1d8>)
  22022. 80099ce: 4293 cmp r3, r2
  22023. 80099d0: d01d beq.n 8009a0e <HAL_DMA_IRQHandler+0xd2>
  22024. 80099d2: 687b ldr r3, [r7, #4]
  22025. 80099d4: 681b ldr r3, [r3, #0]
  22026. 80099d6: 4a50 ldr r2, [pc, #320] @ (8009b18 <HAL_DMA_IRQHandler+0x1dc>)
  22027. 80099d8: 4293 cmp r3, r2
  22028. 80099da: d018 beq.n 8009a0e <HAL_DMA_IRQHandler+0xd2>
  22029. 80099dc: 687b ldr r3, [r7, #4]
  22030. 80099de: 681b ldr r3, [r3, #0]
  22031. 80099e0: 4a4e ldr r2, [pc, #312] @ (8009b1c <HAL_DMA_IRQHandler+0x1e0>)
  22032. 80099e2: 4293 cmp r3, r2
  22033. 80099e4: d013 beq.n 8009a0e <HAL_DMA_IRQHandler+0xd2>
  22034. 80099e6: 687b ldr r3, [r7, #4]
  22035. 80099e8: 681b ldr r3, [r3, #0]
  22036. 80099ea: 4a4d ldr r2, [pc, #308] @ (8009b20 <HAL_DMA_IRQHandler+0x1e4>)
  22037. 80099ec: 4293 cmp r3, r2
  22038. 80099ee: d00e beq.n 8009a0e <HAL_DMA_IRQHandler+0xd2>
  22039. 80099f0: 687b ldr r3, [r7, #4]
  22040. 80099f2: 681b ldr r3, [r3, #0]
  22041. 80099f4: 4a4b ldr r2, [pc, #300] @ (8009b24 <HAL_DMA_IRQHandler+0x1e8>)
  22042. 80099f6: 4293 cmp r3, r2
  22043. 80099f8: d009 beq.n 8009a0e <HAL_DMA_IRQHandler+0xd2>
  22044. 80099fa: 687b ldr r3, [r7, #4]
  22045. 80099fc: 681b ldr r3, [r3, #0]
  22046. 80099fe: 4a4a ldr r2, [pc, #296] @ (8009b28 <HAL_DMA_IRQHandler+0x1ec>)
  22047. 8009a00: 4293 cmp r3, r2
  22048. 8009a02: d004 beq.n 8009a0e <HAL_DMA_IRQHandler+0xd2>
  22049. 8009a04: 687b ldr r3, [r7, #4]
  22050. 8009a06: 681b ldr r3, [r3, #0]
  22051. 8009a08: 4a48 ldr r2, [pc, #288] @ (8009b2c <HAL_DMA_IRQHandler+0x1f0>)
  22052. 8009a0a: 4293 cmp r3, r2
  22053. 8009a0c: d101 bne.n 8009a12 <HAL_DMA_IRQHandler+0xd6>
  22054. 8009a0e: 2301 movs r3, #1
  22055. 8009a10: e000 b.n 8009a14 <HAL_DMA_IRQHandler+0xd8>
  22056. 8009a12: 2300 movs r3, #0
  22057. 8009a14: 2b00 cmp r3, #0
  22058. 8009a16: f000 842b beq.w 800a270 <HAL_DMA_IRQHandler+0x934>
  22059. {
  22060. /* Transfer Error Interrupt management ***************************************/
  22061. if ((tmpisr_dma & (DMA_FLAG_TEIF0_4 << (hdma->StreamIndex & 0x1FU))) != 0U)
  22062. 8009a1a: 687b ldr r3, [r7, #4]
  22063. 8009a1c: 6ddb ldr r3, [r3, #92] @ 0x5c
  22064. 8009a1e: f003 031f and.w r3, r3, #31
  22065. 8009a22: 2208 movs r2, #8
  22066. 8009a24: 409a lsls r2, r3
  22067. 8009a26: 69bb ldr r3, [r7, #24]
  22068. 8009a28: 4013 ands r3, r2
  22069. 8009a2a: 2b00 cmp r3, #0
  22070. 8009a2c: f000 80a2 beq.w 8009b74 <HAL_DMA_IRQHandler+0x238>
  22071. {
  22072. if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_TE) != 0U)
  22073. 8009a30: 687b ldr r3, [r7, #4]
  22074. 8009a32: 681b ldr r3, [r3, #0]
  22075. 8009a34: 4a2e ldr r2, [pc, #184] @ (8009af0 <HAL_DMA_IRQHandler+0x1b4>)
  22076. 8009a36: 4293 cmp r3, r2
  22077. 8009a38: d04a beq.n 8009ad0 <HAL_DMA_IRQHandler+0x194>
  22078. 8009a3a: 687b ldr r3, [r7, #4]
  22079. 8009a3c: 681b ldr r3, [r3, #0]
  22080. 8009a3e: 4a2d ldr r2, [pc, #180] @ (8009af4 <HAL_DMA_IRQHandler+0x1b8>)
  22081. 8009a40: 4293 cmp r3, r2
  22082. 8009a42: d045 beq.n 8009ad0 <HAL_DMA_IRQHandler+0x194>
  22083. 8009a44: 687b ldr r3, [r7, #4]
  22084. 8009a46: 681b ldr r3, [r3, #0]
  22085. 8009a48: 4a2b ldr r2, [pc, #172] @ (8009af8 <HAL_DMA_IRQHandler+0x1bc>)
  22086. 8009a4a: 4293 cmp r3, r2
  22087. 8009a4c: d040 beq.n 8009ad0 <HAL_DMA_IRQHandler+0x194>
  22088. 8009a4e: 687b ldr r3, [r7, #4]
  22089. 8009a50: 681b ldr r3, [r3, #0]
  22090. 8009a52: 4a2a ldr r2, [pc, #168] @ (8009afc <HAL_DMA_IRQHandler+0x1c0>)
  22091. 8009a54: 4293 cmp r3, r2
  22092. 8009a56: d03b beq.n 8009ad0 <HAL_DMA_IRQHandler+0x194>
  22093. 8009a58: 687b ldr r3, [r7, #4]
  22094. 8009a5a: 681b ldr r3, [r3, #0]
  22095. 8009a5c: 4a28 ldr r2, [pc, #160] @ (8009b00 <HAL_DMA_IRQHandler+0x1c4>)
  22096. 8009a5e: 4293 cmp r3, r2
  22097. 8009a60: d036 beq.n 8009ad0 <HAL_DMA_IRQHandler+0x194>
  22098. 8009a62: 687b ldr r3, [r7, #4]
  22099. 8009a64: 681b ldr r3, [r3, #0]
  22100. 8009a66: 4a27 ldr r2, [pc, #156] @ (8009b04 <HAL_DMA_IRQHandler+0x1c8>)
  22101. 8009a68: 4293 cmp r3, r2
  22102. 8009a6a: d031 beq.n 8009ad0 <HAL_DMA_IRQHandler+0x194>
  22103. 8009a6c: 687b ldr r3, [r7, #4]
  22104. 8009a6e: 681b ldr r3, [r3, #0]
  22105. 8009a70: 4a25 ldr r2, [pc, #148] @ (8009b08 <HAL_DMA_IRQHandler+0x1cc>)
  22106. 8009a72: 4293 cmp r3, r2
  22107. 8009a74: d02c beq.n 8009ad0 <HAL_DMA_IRQHandler+0x194>
  22108. 8009a76: 687b ldr r3, [r7, #4]
  22109. 8009a78: 681b ldr r3, [r3, #0]
  22110. 8009a7a: 4a24 ldr r2, [pc, #144] @ (8009b0c <HAL_DMA_IRQHandler+0x1d0>)
  22111. 8009a7c: 4293 cmp r3, r2
  22112. 8009a7e: d027 beq.n 8009ad0 <HAL_DMA_IRQHandler+0x194>
  22113. 8009a80: 687b ldr r3, [r7, #4]
  22114. 8009a82: 681b ldr r3, [r3, #0]
  22115. 8009a84: 4a22 ldr r2, [pc, #136] @ (8009b10 <HAL_DMA_IRQHandler+0x1d4>)
  22116. 8009a86: 4293 cmp r3, r2
  22117. 8009a88: d022 beq.n 8009ad0 <HAL_DMA_IRQHandler+0x194>
  22118. 8009a8a: 687b ldr r3, [r7, #4]
  22119. 8009a8c: 681b ldr r3, [r3, #0]
  22120. 8009a8e: 4a21 ldr r2, [pc, #132] @ (8009b14 <HAL_DMA_IRQHandler+0x1d8>)
  22121. 8009a90: 4293 cmp r3, r2
  22122. 8009a92: d01d beq.n 8009ad0 <HAL_DMA_IRQHandler+0x194>
  22123. 8009a94: 687b ldr r3, [r7, #4]
  22124. 8009a96: 681b ldr r3, [r3, #0]
  22125. 8009a98: 4a1f ldr r2, [pc, #124] @ (8009b18 <HAL_DMA_IRQHandler+0x1dc>)
  22126. 8009a9a: 4293 cmp r3, r2
  22127. 8009a9c: d018 beq.n 8009ad0 <HAL_DMA_IRQHandler+0x194>
  22128. 8009a9e: 687b ldr r3, [r7, #4]
  22129. 8009aa0: 681b ldr r3, [r3, #0]
  22130. 8009aa2: 4a1e ldr r2, [pc, #120] @ (8009b1c <HAL_DMA_IRQHandler+0x1e0>)
  22131. 8009aa4: 4293 cmp r3, r2
  22132. 8009aa6: d013 beq.n 8009ad0 <HAL_DMA_IRQHandler+0x194>
  22133. 8009aa8: 687b ldr r3, [r7, #4]
  22134. 8009aaa: 681b ldr r3, [r3, #0]
  22135. 8009aac: 4a1c ldr r2, [pc, #112] @ (8009b20 <HAL_DMA_IRQHandler+0x1e4>)
  22136. 8009aae: 4293 cmp r3, r2
  22137. 8009ab0: d00e beq.n 8009ad0 <HAL_DMA_IRQHandler+0x194>
  22138. 8009ab2: 687b ldr r3, [r7, #4]
  22139. 8009ab4: 681b ldr r3, [r3, #0]
  22140. 8009ab6: 4a1b ldr r2, [pc, #108] @ (8009b24 <HAL_DMA_IRQHandler+0x1e8>)
  22141. 8009ab8: 4293 cmp r3, r2
  22142. 8009aba: d009 beq.n 8009ad0 <HAL_DMA_IRQHandler+0x194>
  22143. 8009abc: 687b ldr r3, [r7, #4]
  22144. 8009abe: 681b ldr r3, [r3, #0]
  22145. 8009ac0: 4a19 ldr r2, [pc, #100] @ (8009b28 <HAL_DMA_IRQHandler+0x1ec>)
  22146. 8009ac2: 4293 cmp r3, r2
  22147. 8009ac4: d004 beq.n 8009ad0 <HAL_DMA_IRQHandler+0x194>
  22148. 8009ac6: 687b ldr r3, [r7, #4]
  22149. 8009ac8: 681b ldr r3, [r3, #0]
  22150. 8009aca: 4a18 ldr r2, [pc, #96] @ (8009b2c <HAL_DMA_IRQHandler+0x1f0>)
  22151. 8009acc: 4293 cmp r3, r2
  22152. 8009ace: d12f bne.n 8009b30 <HAL_DMA_IRQHandler+0x1f4>
  22153. 8009ad0: 687b ldr r3, [r7, #4]
  22154. 8009ad2: 681b ldr r3, [r3, #0]
  22155. 8009ad4: 681b ldr r3, [r3, #0]
  22156. 8009ad6: f003 0304 and.w r3, r3, #4
  22157. 8009ada: 2b00 cmp r3, #0
  22158. 8009adc: bf14 ite ne
  22159. 8009ade: 2301 movne r3, #1
  22160. 8009ae0: 2300 moveq r3, #0
  22161. 8009ae2: b2db uxtb r3, r3
  22162. 8009ae4: e02e b.n 8009b44 <HAL_DMA_IRQHandler+0x208>
  22163. 8009ae6: bf00 nop
  22164. 8009ae8: 24000034 .word 0x24000034
  22165. 8009aec: 1b4e81b5 .word 0x1b4e81b5
  22166. 8009af0: 40020010 .word 0x40020010
  22167. 8009af4: 40020028 .word 0x40020028
  22168. 8009af8: 40020040 .word 0x40020040
  22169. 8009afc: 40020058 .word 0x40020058
  22170. 8009b00: 40020070 .word 0x40020070
  22171. 8009b04: 40020088 .word 0x40020088
  22172. 8009b08: 400200a0 .word 0x400200a0
  22173. 8009b0c: 400200b8 .word 0x400200b8
  22174. 8009b10: 40020410 .word 0x40020410
  22175. 8009b14: 40020428 .word 0x40020428
  22176. 8009b18: 40020440 .word 0x40020440
  22177. 8009b1c: 40020458 .word 0x40020458
  22178. 8009b20: 40020470 .word 0x40020470
  22179. 8009b24: 40020488 .word 0x40020488
  22180. 8009b28: 400204a0 .word 0x400204a0
  22181. 8009b2c: 400204b8 .word 0x400204b8
  22182. 8009b30: 687b ldr r3, [r7, #4]
  22183. 8009b32: 681b ldr r3, [r3, #0]
  22184. 8009b34: 681b ldr r3, [r3, #0]
  22185. 8009b36: f003 0308 and.w r3, r3, #8
  22186. 8009b3a: 2b00 cmp r3, #0
  22187. 8009b3c: bf14 ite ne
  22188. 8009b3e: 2301 movne r3, #1
  22189. 8009b40: 2300 moveq r3, #0
  22190. 8009b42: b2db uxtb r3, r3
  22191. 8009b44: 2b00 cmp r3, #0
  22192. 8009b46: d015 beq.n 8009b74 <HAL_DMA_IRQHandler+0x238>
  22193. {
  22194. /* Disable the transfer error interrupt */
  22195. ((DMA_Stream_TypeDef *)hdma->Instance)->CR &= ~(DMA_IT_TE);
  22196. 8009b48: 687b ldr r3, [r7, #4]
  22197. 8009b4a: 681b ldr r3, [r3, #0]
  22198. 8009b4c: 681a ldr r2, [r3, #0]
  22199. 8009b4e: 687b ldr r3, [r7, #4]
  22200. 8009b50: 681b ldr r3, [r3, #0]
  22201. 8009b52: f022 0204 bic.w r2, r2, #4
  22202. 8009b56: 601a str r2, [r3, #0]
  22203. /* Clear the transfer error flag */
  22204. regs_dma->IFCR = DMA_FLAG_TEIF0_4 << (hdma->StreamIndex & 0x1FU);
  22205. 8009b58: 687b ldr r3, [r7, #4]
  22206. 8009b5a: 6ddb ldr r3, [r3, #92] @ 0x5c
  22207. 8009b5c: f003 031f and.w r3, r3, #31
  22208. 8009b60: 2208 movs r2, #8
  22209. 8009b62: 409a lsls r2, r3
  22210. 8009b64: 6a3b ldr r3, [r7, #32]
  22211. 8009b66: 609a str r2, [r3, #8]
  22212. /* Update error code */
  22213. hdma->ErrorCode |= HAL_DMA_ERROR_TE;
  22214. 8009b68: 687b ldr r3, [r7, #4]
  22215. 8009b6a: 6d5b ldr r3, [r3, #84] @ 0x54
  22216. 8009b6c: f043 0201 orr.w r2, r3, #1
  22217. 8009b70: 687b ldr r3, [r7, #4]
  22218. 8009b72: 655a str r2, [r3, #84] @ 0x54
  22219. }
  22220. }
  22221. /* FIFO Error Interrupt management ******************************************/
  22222. if ((tmpisr_dma & (DMA_FLAG_FEIF0_4 << (hdma->StreamIndex & 0x1FU))) != 0U)
  22223. 8009b74: 687b ldr r3, [r7, #4]
  22224. 8009b76: 6ddb ldr r3, [r3, #92] @ 0x5c
  22225. 8009b78: f003 031f and.w r3, r3, #31
  22226. 8009b7c: 69ba ldr r2, [r7, #24]
  22227. 8009b7e: fa22 f303 lsr.w r3, r2, r3
  22228. 8009b82: f003 0301 and.w r3, r3, #1
  22229. 8009b86: 2b00 cmp r3, #0
  22230. 8009b88: d06e beq.n 8009c68 <HAL_DMA_IRQHandler+0x32c>
  22231. {
  22232. if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_FE) != 0U)
  22233. 8009b8a: 687b ldr r3, [r7, #4]
  22234. 8009b8c: 681b ldr r3, [r3, #0]
  22235. 8009b8e: 4a69 ldr r2, [pc, #420] @ (8009d34 <HAL_DMA_IRQHandler+0x3f8>)
  22236. 8009b90: 4293 cmp r3, r2
  22237. 8009b92: d04a beq.n 8009c2a <HAL_DMA_IRQHandler+0x2ee>
  22238. 8009b94: 687b ldr r3, [r7, #4]
  22239. 8009b96: 681b ldr r3, [r3, #0]
  22240. 8009b98: 4a67 ldr r2, [pc, #412] @ (8009d38 <HAL_DMA_IRQHandler+0x3fc>)
  22241. 8009b9a: 4293 cmp r3, r2
  22242. 8009b9c: d045 beq.n 8009c2a <HAL_DMA_IRQHandler+0x2ee>
  22243. 8009b9e: 687b ldr r3, [r7, #4]
  22244. 8009ba0: 681b ldr r3, [r3, #0]
  22245. 8009ba2: 4a66 ldr r2, [pc, #408] @ (8009d3c <HAL_DMA_IRQHandler+0x400>)
  22246. 8009ba4: 4293 cmp r3, r2
  22247. 8009ba6: d040 beq.n 8009c2a <HAL_DMA_IRQHandler+0x2ee>
  22248. 8009ba8: 687b ldr r3, [r7, #4]
  22249. 8009baa: 681b ldr r3, [r3, #0]
  22250. 8009bac: 4a64 ldr r2, [pc, #400] @ (8009d40 <HAL_DMA_IRQHandler+0x404>)
  22251. 8009bae: 4293 cmp r3, r2
  22252. 8009bb0: d03b beq.n 8009c2a <HAL_DMA_IRQHandler+0x2ee>
  22253. 8009bb2: 687b ldr r3, [r7, #4]
  22254. 8009bb4: 681b ldr r3, [r3, #0]
  22255. 8009bb6: 4a63 ldr r2, [pc, #396] @ (8009d44 <HAL_DMA_IRQHandler+0x408>)
  22256. 8009bb8: 4293 cmp r3, r2
  22257. 8009bba: d036 beq.n 8009c2a <HAL_DMA_IRQHandler+0x2ee>
  22258. 8009bbc: 687b ldr r3, [r7, #4]
  22259. 8009bbe: 681b ldr r3, [r3, #0]
  22260. 8009bc0: 4a61 ldr r2, [pc, #388] @ (8009d48 <HAL_DMA_IRQHandler+0x40c>)
  22261. 8009bc2: 4293 cmp r3, r2
  22262. 8009bc4: d031 beq.n 8009c2a <HAL_DMA_IRQHandler+0x2ee>
  22263. 8009bc6: 687b ldr r3, [r7, #4]
  22264. 8009bc8: 681b ldr r3, [r3, #0]
  22265. 8009bca: 4a60 ldr r2, [pc, #384] @ (8009d4c <HAL_DMA_IRQHandler+0x410>)
  22266. 8009bcc: 4293 cmp r3, r2
  22267. 8009bce: d02c beq.n 8009c2a <HAL_DMA_IRQHandler+0x2ee>
  22268. 8009bd0: 687b ldr r3, [r7, #4]
  22269. 8009bd2: 681b ldr r3, [r3, #0]
  22270. 8009bd4: 4a5e ldr r2, [pc, #376] @ (8009d50 <HAL_DMA_IRQHandler+0x414>)
  22271. 8009bd6: 4293 cmp r3, r2
  22272. 8009bd8: d027 beq.n 8009c2a <HAL_DMA_IRQHandler+0x2ee>
  22273. 8009bda: 687b ldr r3, [r7, #4]
  22274. 8009bdc: 681b ldr r3, [r3, #0]
  22275. 8009bde: 4a5d ldr r2, [pc, #372] @ (8009d54 <HAL_DMA_IRQHandler+0x418>)
  22276. 8009be0: 4293 cmp r3, r2
  22277. 8009be2: d022 beq.n 8009c2a <HAL_DMA_IRQHandler+0x2ee>
  22278. 8009be4: 687b ldr r3, [r7, #4]
  22279. 8009be6: 681b ldr r3, [r3, #0]
  22280. 8009be8: 4a5b ldr r2, [pc, #364] @ (8009d58 <HAL_DMA_IRQHandler+0x41c>)
  22281. 8009bea: 4293 cmp r3, r2
  22282. 8009bec: d01d beq.n 8009c2a <HAL_DMA_IRQHandler+0x2ee>
  22283. 8009bee: 687b ldr r3, [r7, #4]
  22284. 8009bf0: 681b ldr r3, [r3, #0]
  22285. 8009bf2: 4a5a ldr r2, [pc, #360] @ (8009d5c <HAL_DMA_IRQHandler+0x420>)
  22286. 8009bf4: 4293 cmp r3, r2
  22287. 8009bf6: d018 beq.n 8009c2a <HAL_DMA_IRQHandler+0x2ee>
  22288. 8009bf8: 687b ldr r3, [r7, #4]
  22289. 8009bfa: 681b ldr r3, [r3, #0]
  22290. 8009bfc: 4a58 ldr r2, [pc, #352] @ (8009d60 <HAL_DMA_IRQHandler+0x424>)
  22291. 8009bfe: 4293 cmp r3, r2
  22292. 8009c00: d013 beq.n 8009c2a <HAL_DMA_IRQHandler+0x2ee>
  22293. 8009c02: 687b ldr r3, [r7, #4]
  22294. 8009c04: 681b ldr r3, [r3, #0]
  22295. 8009c06: 4a57 ldr r2, [pc, #348] @ (8009d64 <HAL_DMA_IRQHandler+0x428>)
  22296. 8009c08: 4293 cmp r3, r2
  22297. 8009c0a: d00e beq.n 8009c2a <HAL_DMA_IRQHandler+0x2ee>
  22298. 8009c0c: 687b ldr r3, [r7, #4]
  22299. 8009c0e: 681b ldr r3, [r3, #0]
  22300. 8009c10: 4a55 ldr r2, [pc, #340] @ (8009d68 <HAL_DMA_IRQHandler+0x42c>)
  22301. 8009c12: 4293 cmp r3, r2
  22302. 8009c14: d009 beq.n 8009c2a <HAL_DMA_IRQHandler+0x2ee>
  22303. 8009c16: 687b ldr r3, [r7, #4]
  22304. 8009c18: 681b ldr r3, [r3, #0]
  22305. 8009c1a: 4a54 ldr r2, [pc, #336] @ (8009d6c <HAL_DMA_IRQHandler+0x430>)
  22306. 8009c1c: 4293 cmp r3, r2
  22307. 8009c1e: d004 beq.n 8009c2a <HAL_DMA_IRQHandler+0x2ee>
  22308. 8009c20: 687b ldr r3, [r7, #4]
  22309. 8009c22: 681b ldr r3, [r3, #0]
  22310. 8009c24: 4a52 ldr r2, [pc, #328] @ (8009d70 <HAL_DMA_IRQHandler+0x434>)
  22311. 8009c26: 4293 cmp r3, r2
  22312. 8009c28: d10a bne.n 8009c40 <HAL_DMA_IRQHandler+0x304>
  22313. 8009c2a: 687b ldr r3, [r7, #4]
  22314. 8009c2c: 681b ldr r3, [r3, #0]
  22315. 8009c2e: 695b ldr r3, [r3, #20]
  22316. 8009c30: f003 0380 and.w r3, r3, #128 @ 0x80
  22317. 8009c34: 2b00 cmp r3, #0
  22318. 8009c36: bf14 ite ne
  22319. 8009c38: 2301 movne r3, #1
  22320. 8009c3a: 2300 moveq r3, #0
  22321. 8009c3c: b2db uxtb r3, r3
  22322. 8009c3e: e003 b.n 8009c48 <HAL_DMA_IRQHandler+0x30c>
  22323. 8009c40: 687b ldr r3, [r7, #4]
  22324. 8009c42: 681b ldr r3, [r3, #0]
  22325. 8009c44: 681b ldr r3, [r3, #0]
  22326. 8009c46: 2300 movs r3, #0
  22327. 8009c48: 2b00 cmp r3, #0
  22328. 8009c4a: d00d beq.n 8009c68 <HAL_DMA_IRQHandler+0x32c>
  22329. {
  22330. /* Clear the FIFO error flag */
  22331. regs_dma->IFCR = DMA_FLAG_FEIF0_4 << (hdma->StreamIndex & 0x1FU);
  22332. 8009c4c: 687b ldr r3, [r7, #4]
  22333. 8009c4e: 6ddb ldr r3, [r3, #92] @ 0x5c
  22334. 8009c50: f003 031f and.w r3, r3, #31
  22335. 8009c54: 2201 movs r2, #1
  22336. 8009c56: 409a lsls r2, r3
  22337. 8009c58: 6a3b ldr r3, [r7, #32]
  22338. 8009c5a: 609a str r2, [r3, #8]
  22339. /* Update error code */
  22340. hdma->ErrorCode |= HAL_DMA_ERROR_FE;
  22341. 8009c5c: 687b ldr r3, [r7, #4]
  22342. 8009c5e: 6d5b ldr r3, [r3, #84] @ 0x54
  22343. 8009c60: f043 0202 orr.w r2, r3, #2
  22344. 8009c64: 687b ldr r3, [r7, #4]
  22345. 8009c66: 655a str r2, [r3, #84] @ 0x54
  22346. }
  22347. }
  22348. /* Direct Mode Error Interrupt management ***********************************/
  22349. if ((tmpisr_dma & (DMA_FLAG_DMEIF0_4 << (hdma->StreamIndex & 0x1FU))) != 0U)
  22350. 8009c68: 687b ldr r3, [r7, #4]
  22351. 8009c6a: 6ddb ldr r3, [r3, #92] @ 0x5c
  22352. 8009c6c: f003 031f and.w r3, r3, #31
  22353. 8009c70: 2204 movs r2, #4
  22354. 8009c72: 409a lsls r2, r3
  22355. 8009c74: 69bb ldr r3, [r7, #24]
  22356. 8009c76: 4013 ands r3, r2
  22357. 8009c78: 2b00 cmp r3, #0
  22358. 8009c7a: f000 808f beq.w 8009d9c <HAL_DMA_IRQHandler+0x460>
  22359. {
  22360. if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_DME) != 0U)
  22361. 8009c7e: 687b ldr r3, [r7, #4]
  22362. 8009c80: 681b ldr r3, [r3, #0]
  22363. 8009c82: 4a2c ldr r2, [pc, #176] @ (8009d34 <HAL_DMA_IRQHandler+0x3f8>)
  22364. 8009c84: 4293 cmp r3, r2
  22365. 8009c86: d04a beq.n 8009d1e <HAL_DMA_IRQHandler+0x3e2>
  22366. 8009c88: 687b ldr r3, [r7, #4]
  22367. 8009c8a: 681b ldr r3, [r3, #0]
  22368. 8009c8c: 4a2a ldr r2, [pc, #168] @ (8009d38 <HAL_DMA_IRQHandler+0x3fc>)
  22369. 8009c8e: 4293 cmp r3, r2
  22370. 8009c90: d045 beq.n 8009d1e <HAL_DMA_IRQHandler+0x3e2>
  22371. 8009c92: 687b ldr r3, [r7, #4]
  22372. 8009c94: 681b ldr r3, [r3, #0]
  22373. 8009c96: 4a29 ldr r2, [pc, #164] @ (8009d3c <HAL_DMA_IRQHandler+0x400>)
  22374. 8009c98: 4293 cmp r3, r2
  22375. 8009c9a: d040 beq.n 8009d1e <HAL_DMA_IRQHandler+0x3e2>
  22376. 8009c9c: 687b ldr r3, [r7, #4]
  22377. 8009c9e: 681b ldr r3, [r3, #0]
  22378. 8009ca0: 4a27 ldr r2, [pc, #156] @ (8009d40 <HAL_DMA_IRQHandler+0x404>)
  22379. 8009ca2: 4293 cmp r3, r2
  22380. 8009ca4: d03b beq.n 8009d1e <HAL_DMA_IRQHandler+0x3e2>
  22381. 8009ca6: 687b ldr r3, [r7, #4]
  22382. 8009ca8: 681b ldr r3, [r3, #0]
  22383. 8009caa: 4a26 ldr r2, [pc, #152] @ (8009d44 <HAL_DMA_IRQHandler+0x408>)
  22384. 8009cac: 4293 cmp r3, r2
  22385. 8009cae: d036 beq.n 8009d1e <HAL_DMA_IRQHandler+0x3e2>
  22386. 8009cb0: 687b ldr r3, [r7, #4]
  22387. 8009cb2: 681b ldr r3, [r3, #0]
  22388. 8009cb4: 4a24 ldr r2, [pc, #144] @ (8009d48 <HAL_DMA_IRQHandler+0x40c>)
  22389. 8009cb6: 4293 cmp r3, r2
  22390. 8009cb8: d031 beq.n 8009d1e <HAL_DMA_IRQHandler+0x3e2>
  22391. 8009cba: 687b ldr r3, [r7, #4]
  22392. 8009cbc: 681b ldr r3, [r3, #0]
  22393. 8009cbe: 4a23 ldr r2, [pc, #140] @ (8009d4c <HAL_DMA_IRQHandler+0x410>)
  22394. 8009cc0: 4293 cmp r3, r2
  22395. 8009cc2: d02c beq.n 8009d1e <HAL_DMA_IRQHandler+0x3e2>
  22396. 8009cc4: 687b ldr r3, [r7, #4]
  22397. 8009cc6: 681b ldr r3, [r3, #0]
  22398. 8009cc8: 4a21 ldr r2, [pc, #132] @ (8009d50 <HAL_DMA_IRQHandler+0x414>)
  22399. 8009cca: 4293 cmp r3, r2
  22400. 8009ccc: d027 beq.n 8009d1e <HAL_DMA_IRQHandler+0x3e2>
  22401. 8009cce: 687b ldr r3, [r7, #4]
  22402. 8009cd0: 681b ldr r3, [r3, #0]
  22403. 8009cd2: 4a20 ldr r2, [pc, #128] @ (8009d54 <HAL_DMA_IRQHandler+0x418>)
  22404. 8009cd4: 4293 cmp r3, r2
  22405. 8009cd6: d022 beq.n 8009d1e <HAL_DMA_IRQHandler+0x3e2>
  22406. 8009cd8: 687b ldr r3, [r7, #4]
  22407. 8009cda: 681b ldr r3, [r3, #0]
  22408. 8009cdc: 4a1e ldr r2, [pc, #120] @ (8009d58 <HAL_DMA_IRQHandler+0x41c>)
  22409. 8009cde: 4293 cmp r3, r2
  22410. 8009ce0: d01d beq.n 8009d1e <HAL_DMA_IRQHandler+0x3e2>
  22411. 8009ce2: 687b ldr r3, [r7, #4]
  22412. 8009ce4: 681b ldr r3, [r3, #0]
  22413. 8009ce6: 4a1d ldr r2, [pc, #116] @ (8009d5c <HAL_DMA_IRQHandler+0x420>)
  22414. 8009ce8: 4293 cmp r3, r2
  22415. 8009cea: d018 beq.n 8009d1e <HAL_DMA_IRQHandler+0x3e2>
  22416. 8009cec: 687b ldr r3, [r7, #4]
  22417. 8009cee: 681b ldr r3, [r3, #0]
  22418. 8009cf0: 4a1b ldr r2, [pc, #108] @ (8009d60 <HAL_DMA_IRQHandler+0x424>)
  22419. 8009cf2: 4293 cmp r3, r2
  22420. 8009cf4: d013 beq.n 8009d1e <HAL_DMA_IRQHandler+0x3e2>
  22421. 8009cf6: 687b ldr r3, [r7, #4]
  22422. 8009cf8: 681b ldr r3, [r3, #0]
  22423. 8009cfa: 4a1a ldr r2, [pc, #104] @ (8009d64 <HAL_DMA_IRQHandler+0x428>)
  22424. 8009cfc: 4293 cmp r3, r2
  22425. 8009cfe: d00e beq.n 8009d1e <HAL_DMA_IRQHandler+0x3e2>
  22426. 8009d00: 687b ldr r3, [r7, #4]
  22427. 8009d02: 681b ldr r3, [r3, #0]
  22428. 8009d04: 4a18 ldr r2, [pc, #96] @ (8009d68 <HAL_DMA_IRQHandler+0x42c>)
  22429. 8009d06: 4293 cmp r3, r2
  22430. 8009d08: d009 beq.n 8009d1e <HAL_DMA_IRQHandler+0x3e2>
  22431. 8009d0a: 687b ldr r3, [r7, #4]
  22432. 8009d0c: 681b ldr r3, [r3, #0]
  22433. 8009d0e: 4a17 ldr r2, [pc, #92] @ (8009d6c <HAL_DMA_IRQHandler+0x430>)
  22434. 8009d10: 4293 cmp r3, r2
  22435. 8009d12: d004 beq.n 8009d1e <HAL_DMA_IRQHandler+0x3e2>
  22436. 8009d14: 687b ldr r3, [r7, #4]
  22437. 8009d16: 681b ldr r3, [r3, #0]
  22438. 8009d18: 4a15 ldr r2, [pc, #84] @ (8009d70 <HAL_DMA_IRQHandler+0x434>)
  22439. 8009d1a: 4293 cmp r3, r2
  22440. 8009d1c: d12a bne.n 8009d74 <HAL_DMA_IRQHandler+0x438>
  22441. 8009d1e: 687b ldr r3, [r7, #4]
  22442. 8009d20: 681b ldr r3, [r3, #0]
  22443. 8009d22: 681b ldr r3, [r3, #0]
  22444. 8009d24: f003 0302 and.w r3, r3, #2
  22445. 8009d28: 2b00 cmp r3, #0
  22446. 8009d2a: bf14 ite ne
  22447. 8009d2c: 2301 movne r3, #1
  22448. 8009d2e: 2300 moveq r3, #0
  22449. 8009d30: b2db uxtb r3, r3
  22450. 8009d32: e023 b.n 8009d7c <HAL_DMA_IRQHandler+0x440>
  22451. 8009d34: 40020010 .word 0x40020010
  22452. 8009d38: 40020028 .word 0x40020028
  22453. 8009d3c: 40020040 .word 0x40020040
  22454. 8009d40: 40020058 .word 0x40020058
  22455. 8009d44: 40020070 .word 0x40020070
  22456. 8009d48: 40020088 .word 0x40020088
  22457. 8009d4c: 400200a0 .word 0x400200a0
  22458. 8009d50: 400200b8 .word 0x400200b8
  22459. 8009d54: 40020410 .word 0x40020410
  22460. 8009d58: 40020428 .word 0x40020428
  22461. 8009d5c: 40020440 .word 0x40020440
  22462. 8009d60: 40020458 .word 0x40020458
  22463. 8009d64: 40020470 .word 0x40020470
  22464. 8009d68: 40020488 .word 0x40020488
  22465. 8009d6c: 400204a0 .word 0x400204a0
  22466. 8009d70: 400204b8 .word 0x400204b8
  22467. 8009d74: 687b ldr r3, [r7, #4]
  22468. 8009d76: 681b ldr r3, [r3, #0]
  22469. 8009d78: 681b ldr r3, [r3, #0]
  22470. 8009d7a: 2300 movs r3, #0
  22471. 8009d7c: 2b00 cmp r3, #0
  22472. 8009d7e: d00d beq.n 8009d9c <HAL_DMA_IRQHandler+0x460>
  22473. {
  22474. /* Clear the direct mode error flag */
  22475. regs_dma->IFCR = DMA_FLAG_DMEIF0_4 << (hdma->StreamIndex & 0x1FU);
  22476. 8009d80: 687b ldr r3, [r7, #4]
  22477. 8009d82: 6ddb ldr r3, [r3, #92] @ 0x5c
  22478. 8009d84: f003 031f and.w r3, r3, #31
  22479. 8009d88: 2204 movs r2, #4
  22480. 8009d8a: 409a lsls r2, r3
  22481. 8009d8c: 6a3b ldr r3, [r7, #32]
  22482. 8009d8e: 609a str r2, [r3, #8]
  22483. /* Update error code */
  22484. hdma->ErrorCode |= HAL_DMA_ERROR_DME;
  22485. 8009d90: 687b ldr r3, [r7, #4]
  22486. 8009d92: 6d5b ldr r3, [r3, #84] @ 0x54
  22487. 8009d94: f043 0204 orr.w r2, r3, #4
  22488. 8009d98: 687b ldr r3, [r7, #4]
  22489. 8009d9a: 655a str r2, [r3, #84] @ 0x54
  22490. }
  22491. }
  22492. /* Half Transfer Complete Interrupt management ******************************/
  22493. if ((tmpisr_dma & (DMA_FLAG_HTIF0_4 << (hdma->StreamIndex & 0x1FU))) != 0U)
  22494. 8009d9c: 687b ldr r3, [r7, #4]
  22495. 8009d9e: 6ddb ldr r3, [r3, #92] @ 0x5c
  22496. 8009da0: f003 031f and.w r3, r3, #31
  22497. 8009da4: 2210 movs r2, #16
  22498. 8009da6: 409a lsls r2, r3
  22499. 8009da8: 69bb ldr r3, [r7, #24]
  22500. 8009daa: 4013 ands r3, r2
  22501. 8009dac: 2b00 cmp r3, #0
  22502. 8009dae: f000 80a6 beq.w 8009efe <HAL_DMA_IRQHandler+0x5c2>
  22503. {
  22504. if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_HT) != 0U)
  22505. 8009db2: 687b ldr r3, [r7, #4]
  22506. 8009db4: 681b ldr r3, [r3, #0]
  22507. 8009db6: 4a85 ldr r2, [pc, #532] @ (8009fcc <HAL_DMA_IRQHandler+0x690>)
  22508. 8009db8: 4293 cmp r3, r2
  22509. 8009dba: d04a beq.n 8009e52 <HAL_DMA_IRQHandler+0x516>
  22510. 8009dbc: 687b ldr r3, [r7, #4]
  22511. 8009dbe: 681b ldr r3, [r3, #0]
  22512. 8009dc0: 4a83 ldr r2, [pc, #524] @ (8009fd0 <HAL_DMA_IRQHandler+0x694>)
  22513. 8009dc2: 4293 cmp r3, r2
  22514. 8009dc4: d045 beq.n 8009e52 <HAL_DMA_IRQHandler+0x516>
  22515. 8009dc6: 687b ldr r3, [r7, #4]
  22516. 8009dc8: 681b ldr r3, [r3, #0]
  22517. 8009dca: 4a82 ldr r2, [pc, #520] @ (8009fd4 <HAL_DMA_IRQHandler+0x698>)
  22518. 8009dcc: 4293 cmp r3, r2
  22519. 8009dce: d040 beq.n 8009e52 <HAL_DMA_IRQHandler+0x516>
  22520. 8009dd0: 687b ldr r3, [r7, #4]
  22521. 8009dd2: 681b ldr r3, [r3, #0]
  22522. 8009dd4: 4a80 ldr r2, [pc, #512] @ (8009fd8 <HAL_DMA_IRQHandler+0x69c>)
  22523. 8009dd6: 4293 cmp r3, r2
  22524. 8009dd8: d03b beq.n 8009e52 <HAL_DMA_IRQHandler+0x516>
  22525. 8009dda: 687b ldr r3, [r7, #4]
  22526. 8009ddc: 681b ldr r3, [r3, #0]
  22527. 8009dde: 4a7f ldr r2, [pc, #508] @ (8009fdc <HAL_DMA_IRQHandler+0x6a0>)
  22528. 8009de0: 4293 cmp r3, r2
  22529. 8009de2: d036 beq.n 8009e52 <HAL_DMA_IRQHandler+0x516>
  22530. 8009de4: 687b ldr r3, [r7, #4]
  22531. 8009de6: 681b ldr r3, [r3, #0]
  22532. 8009de8: 4a7d ldr r2, [pc, #500] @ (8009fe0 <HAL_DMA_IRQHandler+0x6a4>)
  22533. 8009dea: 4293 cmp r3, r2
  22534. 8009dec: d031 beq.n 8009e52 <HAL_DMA_IRQHandler+0x516>
  22535. 8009dee: 687b ldr r3, [r7, #4]
  22536. 8009df0: 681b ldr r3, [r3, #0]
  22537. 8009df2: 4a7c ldr r2, [pc, #496] @ (8009fe4 <HAL_DMA_IRQHandler+0x6a8>)
  22538. 8009df4: 4293 cmp r3, r2
  22539. 8009df6: d02c beq.n 8009e52 <HAL_DMA_IRQHandler+0x516>
  22540. 8009df8: 687b ldr r3, [r7, #4]
  22541. 8009dfa: 681b ldr r3, [r3, #0]
  22542. 8009dfc: 4a7a ldr r2, [pc, #488] @ (8009fe8 <HAL_DMA_IRQHandler+0x6ac>)
  22543. 8009dfe: 4293 cmp r3, r2
  22544. 8009e00: d027 beq.n 8009e52 <HAL_DMA_IRQHandler+0x516>
  22545. 8009e02: 687b ldr r3, [r7, #4]
  22546. 8009e04: 681b ldr r3, [r3, #0]
  22547. 8009e06: 4a79 ldr r2, [pc, #484] @ (8009fec <HAL_DMA_IRQHandler+0x6b0>)
  22548. 8009e08: 4293 cmp r3, r2
  22549. 8009e0a: d022 beq.n 8009e52 <HAL_DMA_IRQHandler+0x516>
  22550. 8009e0c: 687b ldr r3, [r7, #4]
  22551. 8009e0e: 681b ldr r3, [r3, #0]
  22552. 8009e10: 4a77 ldr r2, [pc, #476] @ (8009ff0 <HAL_DMA_IRQHandler+0x6b4>)
  22553. 8009e12: 4293 cmp r3, r2
  22554. 8009e14: d01d beq.n 8009e52 <HAL_DMA_IRQHandler+0x516>
  22555. 8009e16: 687b ldr r3, [r7, #4]
  22556. 8009e18: 681b ldr r3, [r3, #0]
  22557. 8009e1a: 4a76 ldr r2, [pc, #472] @ (8009ff4 <HAL_DMA_IRQHandler+0x6b8>)
  22558. 8009e1c: 4293 cmp r3, r2
  22559. 8009e1e: d018 beq.n 8009e52 <HAL_DMA_IRQHandler+0x516>
  22560. 8009e20: 687b ldr r3, [r7, #4]
  22561. 8009e22: 681b ldr r3, [r3, #0]
  22562. 8009e24: 4a74 ldr r2, [pc, #464] @ (8009ff8 <HAL_DMA_IRQHandler+0x6bc>)
  22563. 8009e26: 4293 cmp r3, r2
  22564. 8009e28: d013 beq.n 8009e52 <HAL_DMA_IRQHandler+0x516>
  22565. 8009e2a: 687b ldr r3, [r7, #4]
  22566. 8009e2c: 681b ldr r3, [r3, #0]
  22567. 8009e2e: 4a73 ldr r2, [pc, #460] @ (8009ffc <HAL_DMA_IRQHandler+0x6c0>)
  22568. 8009e30: 4293 cmp r3, r2
  22569. 8009e32: d00e beq.n 8009e52 <HAL_DMA_IRQHandler+0x516>
  22570. 8009e34: 687b ldr r3, [r7, #4]
  22571. 8009e36: 681b ldr r3, [r3, #0]
  22572. 8009e38: 4a71 ldr r2, [pc, #452] @ (800a000 <HAL_DMA_IRQHandler+0x6c4>)
  22573. 8009e3a: 4293 cmp r3, r2
  22574. 8009e3c: d009 beq.n 8009e52 <HAL_DMA_IRQHandler+0x516>
  22575. 8009e3e: 687b ldr r3, [r7, #4]
  22576. 8009e40: 681b ldr r3, [r3, #0]
  22577. 8009e42: 4a70 ldr r2, [pc, #448] @ (800a004 <HAL_DMA_IRQHandler+0x6c8>)
  22578. 8009e44: 4293 cmp r3, r2
  22579. 8009e46: d004 beq.n 8009e52 <HAL_DMA_IRQHandler+0x516>
  22580. 8009e48: 687b ldr r3, [r7, #4]
  22581. 8009e4a: 681b ldr r3, [r3, #0]
  22582. 8009e4c: 4a6e ldr r2, [pc, #440] @ (800a008 <HAL_DMA_IRQHandler+0x6cc>)
  22583. 8009e4e: 4293 cmp r3, r2
  22584. 8009e50: d10a bne.n 8009e68 <HAL_DMA_IRQHandler+0x52c>
  22585. 8009e52: 687b ldr r3, [r7, #4]
  22586. 8009e54: 681b ldr r3, [r3, #0]
  22587. 8009e56: 681b ldr r3, [r3, #0]
  22588. 8009e58: f003 0308 and.w r3, r3, #8
  22589. 8009e5c: 2b00 cmp r3, #0
  22590. 8009e5e: bf14 ite ne
  22591. 8009e60: 2301 movne r3, #1
  22592. 8009e62: 2300 moveq r3, #0
  22593. 8009e64: b2db uxtb r3, r3
  22594. 8009e66: e009 b.n 8009e7c <HAL_DMA_IRQHandler+0x540>
  22595. 8009e68: 687b ldr r3, [r7, #4]
  22596. 8009e6a: 681b ldr r3, [r3, #0]
  22597. 8009e6c: 681b ldr r3, [r3, #0]
  22598. 8009e6e: f003 0304 and.w r3, r3, #4
  22599. 8009e72: 2b00 cmp r3, #0
  22600. 8009e74: bf14 ite ne
  22601. 8009e76: 2301 movne r3, #1
  22602. 8009e78: 2300 moveq r3, #0
  22603. 8009e7a: b2db uxtb r3, r3
  22604. 8009e7c: 2b00 cmp r3, #0
  22605. 8009e7e: d03e beq.n 8009efe <HAL_DMA_IRQHandler+0x5c2>
  22606. {
  22607. /* Clear the half transfer complete flag */
  22608. regs_dma->IFCR = DMA_FLAG_HTIF0_4 << (hdma->StreamIndex & 0x1FU);
  22609. 8009e80: 687b ldr r3, [r7, #4]
  22610. 8009e82: 6ddb ldr r3, [r3, #92] @ 0x5c
  22611. 8009e84: f003 031f and.w r3, r3, #31
  22612. 8009e88: 2210 movs r2, #16
  22613. 8009e8a: 409a lsls r2, r3
  22614. 8009e8c: 6a3b ldr r3, [r7, #32]
  22615. 8009e8e: 609a str r2, [r3, #8]
  22616. /* Multi_Buffering mode enabled */
  22617. if(((((DMA_Stream_TypeDef *)hdma->Instance)->CR) & (uint32_t)(DMA_SxCR_DBM)) != 0U)
  22618. 8009e90: 687b ldr r3, [r7, #4]
  22619. 8009e92: 681b ldr r3, [r3, #0]
  22620. 8009e94: 681b ldr r3, [r3, #0]
  22621. 8009e96: f403 2380 and.w r3, r3, #262144 @ 0x40000
  22622. 8009e9a: 2b00 cmp r3, #0
  22623. 8009e9c: d018 beq.n 8009ed0 <HAL_DMA_IRQHandler+0x594>
  22624. {
  22625. /* Current memory buffer used is Memory 0 */
  22626. if((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_CT) == 0U)
  22627. 8009e9e: 687b ldr r3, [r7, #4]
  22628. 8009ea0: 681b ldr r3, [r3, #0]
  22629. 8009ea2: 681b ldr r3, [r3, #0]
  22630. 8009ea4: f403 2300 and.w r3, r3, #524288 @ 0x80000
  22631. 8009ea8: 2b00 cmp r3, #0
  22632. 8009eaa: d108 bne.n 8009ebe <HAL_DMA_IRQHandler+0x582>
  22633. {
  22634. if(hdma->XferHalfCpltCallback != NULL)
  22635. 8009eac: 687b ldr r3, [r7, #4]
  22636. 8009eae: 6c1b ldr r3, [r3, #64] @ 0x40
  22637. 8009eb0: 2b00 cmp r3, #0
  22638. 8009eb2: d024 beq.n 8009efe <HAL_DMA_IRQHandler+0x5c2>
  22639. {
  22640. /* Half transfer callback */
  22641. hdma->XferHalfCpltCallback(hdma);
  22642. 8009eb4: 687b ldr r3, [r7, #4]
  22643. 8009eb6: 6c1b ldr r3, [r3, #64] @ 0x40
  22644. 8009eb8: 6878 ldr r0, [r7, #4]
  22645. 8009eba: 4798 blx r3
  22646. 8009ebc: e01f b.n 8009efe <HAL_DMA_IRQHandler+0x5c2>
  22647. }
  22648. }
  22649. /* Current memory buffer used is Memory 1 */
  22650. else
  22651. {
  22652. if(hdma->XferM1HalfCpltCallback != NULL)
  22653. 8009ebe: 687b ldr r3, [r7, #4]
  22654. 8009ec0: 6c9b ldr r3, [r3, #72] @ 0x48
  22655. 8009ec2: 2b00 cmp r3, #0
  22656. 8009ec4: d01b beq.n 8009efe <HAL_DMA_IRQHandler+0x5c2>
  22657. {
  22658. /* Half transfer callback */
  22659. hdma->XferM1HalfCpltCallback(hdma);
  22660. 8009ec6: 687b ldr r3, [r7, #4]
  22661. 8009ec8: 6c9b ldr r3, [r3, #72] @ 0x48
  22662. 8009eca: 6878 ldr r0, [r7, #4]
  22663. 8009ecc: 4798 blx r3
  22664. 8009ece: e016 b.n 8009efe <HAL_DMA_IRQHandler+0x5c2>
  22665. }
  22666. }
  22667. else
  22668. {
  22669. /* Disable the half transfer interrupt if the DMA mode is not CIRCULAR */
  22670. if((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_CIRC) == 0U)
  22671. 8009ed0: 687b ldr r3, [r7, #4]
  22672. 8009ed2: 681b ldr r3, [r3, #0]
  22673. 8009ed4: 681b ldr r3, [r3, #0]
  22674. 8009ed6: f403 7380 and.w r3, r3, #256 @ 0x100
  22675. 8009eda: 2b00 cmp r3, #0
  22676. 8009edc: d107 bne.n 8009eee <HAL_DMA_IRQHandler+0x5b2>
  22677. {
  22678. /* Disable the half transfer interrupt */
  22679. ((DMA_Stream_TypeDef *)hdma->Instance)->CR &= ~(DMA_IT_HT);
  22680. 8009ede: 687b ldr r3, [r7, #4]
  22681. 8009ee0: 681b ldr r3, [r3, #0]
  22682. 8009ee2: 681a ldr r2, [r3, #0]
  22683. 8009ee4: 687b ldr r3, [r7, #4]
  22684. 8009ee6: 681b ldr r3, [r3, #0]
  22685. 8009ee8: f022 0208 bic.w r2, r2, #8
  22686. 8009eec: 601a str r2, [r3, #0]
  22687. }
  22688. if(hdma->XferHalfCpltCallback != NULL)
  22689. 8009eee: 687b ldr r3, [r7, #4]
  22690. 8009ef0: 6c1b ldr r3, [r3, #64] @ 0x40
  22691. 8009ef2: 2b00 cmp r3, #0
  22692. 8009ef4: d003 beq.n 8009efe <HAL_DMA_IRQHandler+0x5c2>
  22693. {
  22694. /* Half transfer callback */
  22695. hdma->XferHalfCpltCallback(hdma);
  22696. 8009ef6: 687b ldr r3, [r7, #4]
  22697. 8009ef8: 6c1b ldr r3, [r3, #64] @ 0x40
  22698. 8009efa: 6878 ldr r0, [r7, #4]
  22699. 8009efc: 4798 blx r3
  22700. }
  22701. }
  22702. }
  22703. }
  22704. /* Transfer Complete Interrupt management ***********************************/
  22705. if ((tmpisr_dma & (DMA_FLAG_TCIF0_4 << (hdma->StreamIndex & 0x1FU))) != 0U)
  22706. 8009efe: 687b ldr r3, [r7, #4]
  22707. 8009f00: 6ddb ldr r3, [r3, #92] @ 0x5c
  22708. 8009f02: f003 031f and.w r3, r3, #31
  22709. 8009f06: 2220 movs r2, #32
  22710. 8009f08: 409a lsls r2, r3
  22711. 8009f0a: 69bb ldr r3, [r7, #24]
  22712. 8009f0c: 4013 ands r3, r2
  22713. 8009f0e: 2b00 cmp r3, #0
  22714. 8009f10: f000 8110 beq.w 800a134 <HAL_DMA_IRQHandler+0x7f8>
  22715. {
  22716. if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_TC) != 0U)
  22717. 8009f14: 687b ldr r3, [r7, #4]
  22718. 8009f16: 681b ldr r3, [r3, #0]
  22719. 8009f18: 4a2c ldr r2, [pc, #176] @ (8009fcc <HAL_DMA_IRQHandler+0x690>)
  22720. 8009f1a: 4293 cmp r3, r2
  22721. 8009f1c: d04a beq.n 8009fb4 <HAL_DMA_IRQHandler+0x678>
  22722. 8009f1e: 687b ldr r3, [r7, #4]
  22723. 8009f20: 681b ldr r3, [r3, #0]
  22724. 8009f22: 4a2b ldr r2, [pc, #172] @ (8009fd0 <HAL_DMA_IRQHandler+0x694>)
  22725. 8009f24: 4293 cmp r3, r2
  22726. 8009f26: d045 beq.n 8009fb4 <HAL_DMA_IRQHandler+0x678>
  22727. 8009f28: 687b ldr r3, [r7, #4]
  22728. 8009f2a: 681b ldr r3, [r3, #0]
  22729. 8009f2c: 4a29 ldr r2, [pc, #164] @ (8009fd4 <HAL_DMA_IRQHandler+0x698>)
  22730. 8009f2e: 4293 cmp r3, r2
  22731. 8009f30: d040 beq.n 8009fb4 <HAL_DMA_IRQHandler+0x678>
  22732. 8009f32: 687b ldr r3, [r7, #4]
  22733. 8009f34: 681b ldr r3, [r3, #0]
  22734. 8009f36: 4a28 ldr r2, [pc, #160] @ (8009fd8 <HAL_DMA_IRQHandler+0x69c>)
  22735. 8009f38: 4293 cmp r3, r2
  22736. 8009f3a: d03b beq.n 8009fb4 <HAL_DMA_IRQHandler+0x678>
  22737. 8009f3c: 687b ldr r3, [r7, #4]
  22738. 8009f3e: 681b ldr r3, [r3, #0]
  22739. 8009f40: 4a26 ldr r2, [pc, #152] @ (8009fdc <HAL_DMA_IRQHandler+0x6a0>)
  22740. 8009f42: 4293 cmp r3, r2
  22741. 8009f44: d036 beq.n 8009fb4 <HAL_DMA_IRQHandler+0x678>
  22742. 8009f46: 687b ldr r3, [r7, #4]
  22743. 8009f48: 681b ldr r3, [r3, #0]
  22744. 8009f4a: 4a25 ldr r2, [pc, #148] @ (8009fe0 <HAL_DMA_IRQHandler+0x6a4>)
  22745. 8009f4c: 4293 cmp r3, r2
  22746. 8009f4e: d031 beq.n 8009fb4 <HAL_DMA_IRQHandler+0x678>
  22747. 8009f50: 687b ldr r3, [r7, #4]
  22748. 8009f52: 681b ldr r3, [r3, #0]
  22749. 8009f54: 4a23 ldr r2, [pc, #140] @ (8009fe4 <HAL_DMA_IRQHandler+0x6a8>)
  22750. 8009f56: 4293 cmp r3, r2
  22751. 8009f58: d02c beq.n 8009fb4 <HAL_DMA_IRQHandler+0x678>
  22752. 8009f5a: 687b ldr r3, [r7, #4]
  22753. 8009f5c: 681b ldr r3, [r3, #0]
  22754. 8009f5e: 4a22 ldr r2, [pc, #136] @ (8009fe8 <HAL_DMA_IRQHandler+0x6ac>)
  22755. 8009f60: 4293 cmp r3, r2
  22756. 8009f62: d027 beq.n 8009fb4 <HAL_DMA_IRQHandler+0x678>
  22757. 8009f64: 687b ldr r3, [r7, #4]
  22758. 8009f66: 681b ldr r3, [r3, #0]
  22759. 8009f68: 4a20 ldr r2, [pc, #128] @ (8009fec <HAL_DMA_IRQHandler+0x6b0>)
  22760. 8009f6a: 4293 cmp r3, r2
  22761. 8009f6c: d022 beq.n 8009fb4 <HAL_DMA_IRQHandler+0x678>
  22762. 8009f6e: 687b ldr r3, [r7, #4]
  22763. 8009f70: 681b ldr r3, [r3, #0]
  22764. 8009f72: 4a1f ldr r2, [pc, #124] @ (8009ff0 <HAL_DMA_IRQHandler+0x6b4>)
  22765. 8009f74: 4293 cmp r3, r2
  22766. 8009f76: d01d beq.n 8009fb4 <HAL_DMA_IRQHandler+0x678>
  22767. 8009f78: 687b ldr r3, [r7, #4]
  22768. 8009f7a: 681b ldr r3, [r3, #0]
  22769. 8009f7c: 4a1d ldr r2, [pc, #116] @ (8009ff4 <HAL_DMA_IRQHandler+0x6b8>)
  22770. 8009f7e: 4293 cmp r3, r2
  22771. 8009f80: d018 beq.n 8009fb4 <HAL_DMA_IRQHandler+0x678>
  22772. 8009f82: 687b ldr r3, [r7, #4]
  22773. 8009f84: 681b ldr r3, [r3, #0]
  22774. 8009f86: 4a1c ldr r2, [pc, #112] @ (8009ff8 <HAL_DMA_IRQHandler+0x6bc>)
  22775. 8009f88: 4293 cmp r3, r2
  22776. 8009f8a: d013 beq.n 8009fb4 <HAL_DMA_IRQHandler+0x678>
  22777. 8009f8c: 687b ldr r3, [r7, #4]
  22778. 8009f8e: 681b ldr r3, [r3, #0]
  22779. 8009f90: 4a1a ldr r2, [pc, #104] @ (8009ffc <HAL_DMA_IRQHandler+0x6c0>)
  22780. 8009f92: 4293 cmp r3, r2
  22781. 8009f94: d00e beq.n 8009fb4 <HAL_DMA_IRQHandler+0x678>
  22782. 8009f96: 687b ldr r3, [r7, #4]
  22783. 8009f98: 681b ldr r3, [r3, #0]
  22784. 8009f9a: 4a19 ldr r2, [pc, #100] @ (800a000 <HAL_DMA_IRQHandler+0x6c4>)
  22785. 8009f9c: 4293 cmp r3, r2
  22786. 8009f9e: d009 beq.n 8009fb4 <HAL_DMA_IRQHandler+0x678>
  22787. 8009fa0: 687b ldr r3, [r7, #4]
  22788. 8009fa2: 681b ldr r3, [r3, #0]
  22789. 8009fa4: 4a17 ldr r2, [pc, #92] @ (800a004 <HAL_DMA_IRQHandler+0x6c8>)
  22790. 8009fa6: 4293 cmp r3, r2
  22791. 8009fa8: d004 beq.n 8009fb4 <HAL_DMA_IRQHandler+0x678>
  22792. 8009faa: 687b ldr r3, [r7, #4]
  22793. 8009fac: 681b ldr r3, [r3, #0]
  22794. 8009fae: 4a16 ldr r2, [pc, #88] @ (800a008 <HAL_DMA_IRQHandler+0x6cc>)
  22795. 8009fb0: 4293 cmp r3, r2
  22796. 8009fb2: d12b bne.n 800a00c <HAL_DMA_IRQHandler+0x6d0>
  22797. 8009fb4: 687b ldr r3, [r7, #4]
  22798. 8009fb6: 681b ldr r3, [r3, #0]
  22799. 8009fb8: 681b ldr r3, [r3, #0]
  22800. 8009fba: f003 0310 and.w r3, r3, #16
  22801. 8009fbe: 2b00 cmp r3, #0
  22802. 8009fc0: bf14 ite ne
  22803. 8009fc2: 2301 movne r3, #1
  22804. 8009fc4: 2300 moveq r3, #0
  22805. 8009fc6: b2db uxtb r3, r3
  22806. 8009fc8: e02a b.n 800a020 <HAL_DMA_IRQHandler+0x6e4>
  22807. 8009fca: bf00 nop
  22808. 8009fcc: 40020010 .word 0x40020010
  22809. 8009fd0: 40020028 .word 0x40020028
  22810. 8009fd4: 40020040 .word 0x40020040
  22811. 8009fd8: 40020058 .word 0x40020058
  22812. 8009fdc: 40020070 .word 0x40020070
  22813. 8009fe0: 40020088 .word 0x40020088
  22814. 8009fe4: 400200a0 .word 0x400200a0
  22815. 8009fe8: 400200b8 .word 0x400200b8
  22816. 8009fec: 40020410 .word 0x40020410
  22817. 8009ff0: 40020428 .word 0x40020428
  22818. 8009ff4: 40020440 .word 0x40020440
  22819. 8009ff8: 40020458 .word 0x40020458
  22820. 8009ffc: 40020470 .word 0x40020470
  22821. 800a000: 40020488 .word 0x40020488
  22822. 800a004: 400204a0 .word 0x400204a0
  22823. 800a008: 400204b8 .word 0x400204b8
  22824. 800a00c: 687b ldr r3, [r7, #4]
  22825. 800a00e: 681b ldr r3, [r3, #0]
  22826. 800a010: 681b ldr r3, [r3, #0]
  22827. 800a012: f003 0302 and.w r3, r3, #2
  22828. 800a016: 2b00 cmp r3, #0
  22829. 800a018: bf14 ite ne
  22830. 800a01a: 2301 movne r3, #1
  22831. 800a01c: 2300 moveq r3, #0
  22832. 800a01e: b2db uxtb r3, r3
  22833. 800a020: 2b00 cmp r3, #0
  22834. 800a022: f000 8087 beq.w 800a134 <HAL_DMA_IRQHandler+0x7f8>
  22835. {
  22836. /* Clear the transfer complete flag */
  22837. regs_dma->IFCR = DMA_FLAG_TCIF0_4 << (hdma->StreamIndex & 0x1FU);
  22838. 800a026: 687b ldr r3, [r7, #4]
  22839. 800a028: 6ddb ldr r3, [r3, #92] @ 0x5c
  22840. 800a02a: f003 031f and.w r3, r3, #31
  22841. 800a02e: 2220 movs r2, #32
  22842. 800a030: 409a lsls r2, r3
  22843. 800a032: 6a3b ldr r3, [r7, #32]
  22844. 800a034: 609a str r2, [r3, #8]
  22845. if(HAL_DMA_STATE_ABORT == hdma->State)
  22846. 800a036: 687b ldr r3, [r7, #4]
  22847. 800a038: f893 3035 ldrb.w r3, [r3, #53] @ 0x35
  22848. 800a03c: b2db uxtb r3, r3
  22849. 800a03e: 2b04 cmp r3, #4
  22850. 800a040: d139 bne.n 800a0b6 <HAL_DMA_IRQHandler+0x77a>
  22851. {
  22852. /* Disable all the transfer interrupts */
  22853. ((DMA_Stream_TypeDef *)hdma->Instance)->CR &= ~(DMA_IT_TC | DMA_IT_TE | DMA_IT_DME);
  22854. 800a042: 687b ldr r3, [r7, #4]
  22855. 800a044: 681b ldr r3, [r3, #0]
  22856. 800a046: 681a ldr r2, [r3, #0]
  22857. 800a048: 687b ldr r3, [r7, #4]
  22858. 800a04a: 681b ldr r3, [r3, #0]
  22859. 800a04c: f022 0216 bic.w r2, r2, #22
  22860. 800a050: 601a str r2, [r3, #0]
  22861. ((DMA_Stream_TypeDef *)hdma->Instance)->FCR &= ~(DMA_IT_FE);
  22862. 800a052: 687b ldr r3, [r7, #4]
  22863. 800a054: 681b ldr r3, [r3, #0]
  22864. 800a056: 695a ldr r2, [r3, #20]
  22865. 800a058: 687b ldr r3, [r7, #4]
  22866. 800a05a: 681b ldr r3, [r3, #0]
  22867. 800a05c: f022 0280 bic.w r2, r2, #128 @ 0x80
  22868. 800a060: 615a str r2, [r3, #20]
  22869. if((hdma->XferHalfCpltCallback != NULL) || (hdma->XferM1HalfCpltCallback != NULL))
  22870. 800a062: 687b ldr r3, [r7, #4]
  22871. 800a064: 6c1b ldr r3, [r3, #64] @ 0x40
  22872. 800a066: 2b00 cmp r3, #0
  22873. 800a068: d103 bne.n 800a072 <HAL_DMA_IRQHandler+0x736>
  22874. 800a06a: 687b ldr r3, [r7, #4]
  22875. 800a06c: 6c9b ldr r3, [r3, #72] @ 0x48
  22876. 800a06e: 2b00 cmp r3, #0
  22877. 800a070: d007 beq.n 800a082 <HAL_DMA_IRQHandler+0x746>
  22878. {
  22879. ((DMA_Stream_TypeDef *)hdma->Instance)->CR &= ~(DMA_IT_HT);
  22880. 800a072: 687b ldr r3, [r7, #4]
  22881. 800a074: 681b ldr r3, [r3, #0]
  22882. 800a076: 681a ldr r2, [r3, #0]
  22883. 800a078: 687b ldr r3, [r7, #4]
  22884. 800a07a: 681b ldr r3, [r3, #0]
  22885. 800a07c: f022 0208 bic.w r2, r2, #8
  22886. 800a080: 601a str r2, [r3, #0]
  22887. }
  22888. /* Clear all interrupt flags at correct offset within the register */
  22889. regs_dma->IFCR = 0x3FUL << (hdma->StreamIndex & 0x1FU);
  22890. 800a082: 687b ldr r3, [r7, #4]
  22891. 800a084: 6ddb ldr r3, [r3, #92] @ 0x5c
  22892. 800a086: f003 031f and.w r3, r3, #31
  22893. 800a08a: 223f movs r2, #63 @ 0x3f
  22894. 800a08c: 409a lsls r2, r3
  22895. 800a08e: 6a3b ldr r3, [r7, #32]
  22896. 800a090: 609a str r2, [r3, #8]
  22897. /* Change the DMA state */
  22898. hdma->State = HAL_DMA_STATE_READY;
  22899. 800a092: 687b ldr r3, [r7, #4]
  22900. 800a094: 2201 movs r2, #1
  22901. 800a096: f883 2035 strb.w r2, [r3, #53] @ 0x35
  22902. /* Process Unlocked */
  22903. __HAL_UNLOCK(hdma);
  22904. 800a09a: 687b ldr r3, [r7, #4]
  22905. 800a09c: 2200 movs r2, #0
  22906. 800a09e: f883 2034 strb.w r2, [r3, #52] @ 0x34
  22907. if(hdma->XferAbortCallback != NULL)
  22908. 800a0a2: 687b ldr r3, [r7, #4]
  22909. 800a0a4: 6d1b ldr r3, [r3, #80] @ 0x50
  22910. 800a0a6: 2b00 cmp r3, #0
  22911. 800a0a8: f000 834a beq.w 800a740 <HAL_DMA_IRQHandler+0xe04>
  22912. {
  22913. hdma->XferAbortCallback(hdma);
  22914. 800a0ac: 687b ldr r3, [r7, #4]
  22915. 800a0ae: 6d1b ldr r3, [r3, #80] @ 0x50
  22916. 800a0b0: 6878 ldr r0, [r7, #4]
  22917. 800a0b2: 4798 blx r3
  22918. }
  22919. return;
  22920. 800a0b4: e344 b.n 800a740 <HAL_DMA_IRQHandler+0xe04>
  22921. }
  22922. if(((((DMA_Stream_TypeDef *)hdma->Instance)->CR) & (uint32_t)(DMA_SxCR_DBM)) != 0U)
  22923. 800a0b6: 687b ldr r3, [r7, #4]
  22924. 800a0b8: 681b ldr r3, [r3, #0]
  22925. 800a0ba: 681b ldr r3, [r3, #0]
  22926. 800a0bc: f403 2380 and.w r3, r3, #262144 @ 0x40000
  22927. 800a0c0: 2b00 cmp r3, #0
  22928. 800a0c2: d018 beq.n 800a0f6 <HAL_DMA_IRQHandler+0x7ba>
  22929. {
  22930. /* Current memory buffer used is Memory 0 */
  22931. if((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_CT) == 0U)
  22932. 800a0c4: 687b ldr r3, [r7, #4]
  22933. 800a0c6: 681b ldr r3, [r3, #0]
  22934. 800a0c8: 681b ldr r3, [r3, #0]
  22935. 800a0ca: f403 2300 and.w r3, r3, #524288 @ 0x80000
  22936. 800a0ce: 2b00 cmp r3, #0
  22937. 800a0d0: d108 bne.n 800a0e4 <HAL_DMA_IRQHandler+0x7a8>
  22938. {
  22939. if(hdma->XferM1CpltCallback != NULL)
  22940. 800a0d2: 687b ldr r3, [r7, #4]
  22941. 800a0d4: 6c5b ldr r3, [r3, #68] @ 0x44
  22942. 800a0d6: 2b00 cmp r3, #0
  22943. 800a0d8: d02c beq.n 800a134 <HAL_DMA_IRQHandler+0x7f8>
  22944. {
  22945. /* Transfer complete Callback for memory1 */
  22946. hdma->XferM1CpltCallback(hdma);
  22947. 800a0da: 687b ldr r3, [r7, #4]
  22948. 800a0dc: 6c5b ldr r3, [r3, #68] @ 0x44
  22949. 800a0de: 6878 ldr r0, [r7, #4]
  22950. 800a0e0: 4798 blx r3
  22951. 800a0e2: e027 b.n 800a134 <HAL_DMA_IRQHandler+0x7f8>
  22952. }
  22953. }
  22954. /* Current memory buffer used is Memory 1 */
  22955. else
  22956. {
  22957. if(hdma->XferCpltCallback != NULL)
  22958. 800a0e4: 687b ldr r3, [r7, #4]
  22959. 800a0e6: 6bdb ldr r3, [r3, #60] @ 0x3c
  22960. 800a0e8: 2b00 cmp r3, #0
  22961. 800a0ea: d023 beq.n 800a134 <HAL_DMA_IRQHandler+0x7f8>
  22962. {
  22963. /* Transfer complete Callback for memory0 */
  22964. hdma->XferCpltCallback(hdma);
  22965. 800a0ec: 687b ldr r3, [r7, #4]
  22966. 800a0ee: 6bdb ldr r3, [r3, #60] @ 0x3c
  22967. 800a0f0: 6878 ldr r0, [r7, #4]
  22968. 800a0f2: 4798 blx r3
  22969. 800a0f4: e01e b.n 800a134 <HAL_DMA_IRQHandler+0x7f8>
  22970. }
  22971. }
  22972. /* Disable the transfer complete interrupt if the DMA mode is not CIRCULAR */
  22973. else
  22974. {
  22975. if((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_CIRC) == 0U)
  22976. 800a0f6: 687b ldr r3, [r7, #4]
  22977. 800a0f8: 681b ldr r3, [r3, #0]
  22978. 800a0fa: 681b ldr r3, [r3, #0]
  22979. 800a0fc: f403 7380 and.w r3, r3, #256 @ 0x100
  22980. 800a100: 2b00 cmp r3, #0
  22981. 800a102: d10f bne.n 800a124 <HAL_DMA_IRQHandler+0x7e8>
  22982. {
  22983. /* Disable the transfer complete interrupt */
  22984. ((DMA_Stream_TypeDef *)hdma->Instance)->CR &= ~(DMA_IT_TC);
  22985. 800a104: 687b ldr r3, [r7, #4]
  22986. 800a106: 681b ldr r3, [r3, #0]
  22987. 800a108: 681a ldr r2, [r3, #0]
  22988. 800a10a: 687b ldr r3, [r7, #4]
  22989. 800a10c: 681b ldr r3, [r3, #0]
  22990. 800a10e: f022 0210 bic.w r2, r2, #16
  22991. 800a112: 601a str r2, [r3, #0]
  22992. /* Change the DMA state */
  22993. hdma->State = HAL_DMA_STATE_READY;
  22994. 800a114: 687b ldr r3, [r7, #4]
  22995. 800a116: 2201 movs r2, #1
  22996. 800a118: f883 2035 strb.w r2, [r3, #53] @ 0x35
  22997. /* Process Unlocked */
  22998. __HAL_UNLOCK(hdma);
  22999. 800a11c: 687b ldr r3, [r7, #4]
  23000. 800a11e: 2200 movs r2, #0
  23001. 800a120: f883 2034 strb.w r2, [r3, #52] @ 0x34
  23002. }
  23003. if(hdma->XferCpltCallback != NULL)
  23004. 800a124: 687b ldr r3, [r7, #4]
  23005. 800a126: 6bdb ldr r3, [r3, #60] @ 0x3c
  23006. 800a128: 2b00 cmp r3, #0
  23007. 800a12a: d003 beq.n 800a134 <HAL_DMA_IRQHandler+0x7f8>
  23008. {
  23009. /* Transfer complete callback */
  23010. hdma->XferCpltCallback(hdma);
  23011. 800a12c: 687b ldr r3, [r7, #4]
  23012. 800a12e: 6bdb ldr r3, [r3, #60] @ 0x3c
  23013. 800a130: 6878 ldr r0, [r7, #4]
  23014. 800a132: 4798 blx r3
  23015. }
  23016. }
  23017. }
  23018. /* manage error case */
  23019. if(hdma->ErrorCode != HAL_DMA_ERROR_NONE)
  23020. 800a134: 687b ldr r3, [r7, #4]
  23021. 800a136: 6d5b ldr r3, [r3, #84] @ 0x54
  23022. 800a138: 2b00 cmp r3, #0
  23023. 800a13a: f000 8306 beq.w 800a74a <HAL_DMA_IRQHandler+0xe0e>
  23024. {
  23025. if((hdma->ErrorCode & HAL_DMA_ERROR_TE) != 0U)
  23026. 800a13e: 687b ldr r3, [r7, #4]
  23027. 800a140: 6d5b ldr r3, [r3, #84] @ 0x54
  23028. 800a142: f003 0301 and.w r3, r3, #1
  23029. 800a146: 2b00 cmp r3, #0
  23030. 800a148: f000 8088 beq.w 800a25c <HAL_DMA_IRQHandler+0x920>
  23031. {
  23032. hdma->State = HAL_DMA_STATE_ABORT;
  23033. 800a14c: 687b ldr r3, [r7, #4]
  23034. 800a14e: 2204 movs r2, #4
  23035. 800a150: f883 2035 strb.w r2, [r3, #53] @ 0x35
  23036. /* Disable the stream */
  23037. __HAL_DMA_DISABLE(hdma);
  23038. 800a154: 687b ldr r3, [r7, #4]
  23039. 800a156: 681b ldr r3, [r3, #0]
  23040. 800a158: 4a7a ldr r2, [pc, #488] @ (800a344 <HAL_DMA_IRQHandler+0xa08>)
  23041. 800a15a: 4293 cmp r3, r2
  23042. 800a15c: d04a beq.n 800a1f4 <HAL_DMA_IRQHandler+0x8b8>
  23043. 800a15e: 687b ldr r3, [r7, #4]
  23044. 800a160: 681b ldr r3, [r3, #0]
  23045. 800a162: 4a79 ldr r2, [pc, #484] @ (800a348 <HAL_DMA_IRQHandler+0xa0c>)
  23046. 800a164: 4293 cmp r3, r2
  23047. 800a166: d045 beq.n 800a1f4 <HAL_DMA_IRQHandler+0x8b8>
  23048. 800a168: 687b ldr r3, [r7, #4]
  23049. 800a16a: 681b ldr r3, [r3, #0]
  23050. 800a16c: 4a77 ldr r2, [pc, #476] @ (800a34c <HAL_DMA_IRQHandler+0xa10>)
  23051. 800a16e: 4293 cmp r3, r2
  23052. 800a170: d040 beq.n 800a1f4 <HAL_DMA_IRQHandler+0x8b8>
  23053. 800a172: 687b ldr r3, [r7, #4]
  23054. 800a174: 681b ldr r3, [r3, #0]
  23055. 800a176: 4a76 ldr r2, [pc, #472] @ (800a350 <HAL_DMA_IRQHandler+0xa14>)
  23056. 800a178: 4293 cmp r3, r2
  23057. 800a17a: d03b beq.n 800a1f4 <HAL_DMA_IRQHandler+0x8b8>
  23058. 800a17c: 687b ldr r3, [r7, #4]
  23059. 800a17e: 681b ldr r3, [r3, #0]
  23060. 800a180: 4a74 ldr r2, [pc, #464] @ (800a354 <HAL_DMA_IRQHandler+0xa18>)
  23061. 800a182: 4293 cmp r3, r2
  23062. 800a184: d036 beq.n 800a1f4 <HAL_DMA_IRQHandler+0x8b8>
  23063. 800a186: 687b ldr r3, [r7, #4]
  23064. 800a188: 681b ldr r3, [r3, #0]
  23065. 800a18a: 4a73 ldr r2, [pc, #460] @ (800a358 <HAL_DMA_IRQHandler+0xa1c>)
  23066. 800a18c: 4293 cmp r3, r2
  23067. 800a18e: d031 beq.n 800a1f4 <HAL_DMA_IRQHandler+0x8b8>
  23068. 800a190: 687b ldr r3, [r7, #4]
  23069. 800a192: 681b ldr r3, [r3, #0]
  23070. 800a194: 4a71 ldr r2, [pc, #452] @ (800a35c <HAL_DMA_IRQHandler+0xa20>)
  23071. 800a196: 4293 cmp r3, r2
  23072. 800a198: d02c beq.n 800a1f4 <HAL_DMA_IRQHandler+0x8b8>
  23073. 800a19a: 687b ldr r3, [r7, #4]
  23074. 800a19c: 681b ldr r3, [r3, #0]
  23075. 800a19e: 4a70 ldr r2, [pc, #448] @ (800a360 <HAL_DMA_IRQHandler+0xa24>)
  23076. 800a1a0: 4293 cmp r3, r2
  23077. 800a1a2: d027 beq.n 800a1f4 <HAL_DMA_IRQHandler+0x8b8>
  23078. 800a1a4: 687b ldr r3, [r7, #4]
  23079. 800a1a6: 681b ldr r3, [r3, #0]
  23080. 800a1a8: 4a6e ldr r2, [pc, #440] @ (800a364 <HAL_DMA_IRQHandler+0xa28>)
  23081. 800a1aa: 4293 cmp r3, r2
  23082. 800a1ac: d022 beq.n 800a1f4 <HAL_DMA_IRQHandler+0x8b8>
  23083. 800a1ae: 687b ldr r3, [r7, #4]
  23084. 800a1b0: 681b ldr r3, [r3, #0]
  23085. 800a1b2: 4a6d ldr r2, [pc, #436] @ (800a368 <HAL_DMA_IRQHandler+0xa2c>)
  23086. 800a1b4: 4293 cmp r3, r2
  23087. 800a1b6: d01d beq.n 800a1f4 <HAL_DMA_IRQHandler+0x8b8>
  23088. 800a1b8: 687b ldr r3, [r7, #4]
  23089. 800a1ba: 681b ldr r3, [r3, #0]
  23090. 800a1bc: 4a6b ldr r2, [pc, #428] @ (800a36c <HAL_DMA_IRQHandler+0xa30>)
  23091. 800a1be: 4293 cmp r3, r2
  23092. 800a1c0: d018 beq.n 800a1f4 <HAL_DMA_IRQHandler+0x8b8>
  23093. 800a1c2: 687b ldr r3, [r7, #4]
  23094. 800a1c4: 681b ldr r3, [r3, #0]
  23095. 800a1c6: 4a6a ldr r2, [pc, #424] @ (800a370 <HAL_DMA_IRQHandler+0xa34>)
  23096. 800a1c8: 4293 cmp r3, r2
  23097. 800a1ca: d013 beq.n 800a1f4 <HAL_DMA_IRQHandler+0x8b8>
  23098. 800a1cc: 687b ldr r3, [r7, #4]
  23099. 800a1ce: 681b ldr r3, [r3, #0]
  23100. 800a1d0: 4a68 ldr r2, [pc, #416] @ (800a374 <HAL_DMA_IRQHandler+0xa38>)
  23101. 800a1d2: 4293 cmp r3, r2
  23102. 800a1d4: d00e beq.n 800a1f4 <HAL_DMA_IRQHandler+0x8b8>
  23103. 800a1d6: 687b ldr r3, [r7, #4]
  23104. 800a1d8: 681b ldr r3, [r3, #0]
  23105. 800a1da: 4a67 ldr r2, [pc, #412] @ (800a378 <HAL_DMA_IRQHandler+0xa3c>)
  23106. 800a1dc: 4293 cmp r3, r2
  23107. 800a1de: d009 beq.n 800a1f4 <HAL_DMA_IRQHandler+0x8b8>
  23108. 800a1e0: 687b ldr r3, [r7, #4]
  23109. 800a1e2: 681b ldr r3, [r3, #0]
  23110. 800a1e4: 4a65 ldr r2, [pc, #404] @ (800a37c <HAL_DMA_IRQHandler+0xa40>)
  23111. 800a1e6: 4293 cmp r3, r2
  23112. 800a1e8: d004 beq.n 800a1f4 <HAL_DMA_IRQHandler+0x8b8>
  23113. 800a1ea: 687b ldr r3, [r7, #4]
  23114. 800a1ec: 681b ldr r3, [r3, #0]
  23115. 800a1ee: 4a64 ldr r2, [pc, #400] @ (800a380 <HAL_DMA_IRQHandler+0xa44>)
  23116. 800a1f0: 4293 cmp r3, r2
  23117. 800a1f2: d108 bne.n 800a206 <HAL_DMA_IRQHandler+0x8ca>
  23118. 800a1f4: 687b ldr r3, [r7, #4]
  23119. 800a1f6: 681b ldr r3, [r3, #0]
  23120. 800a1f8: 681a ldr r2, [r3, #0]
  23121. 800a1fa: 687b ldr r3, [r7, #4]
  23122. 800a1fc: 681b ldr r3, [r3, #0]
  23123. 800a1fe: f022 0201 bic.w r2, r2, #1
  23124. 800a202: 601a str r2, [r3, #0]
  23125. 800a204: e007 b.n 800a216 <HAL_DMA_IRQHandler+0x8da>
  23126. 800a206: 687b ldr r3, [r7, #4]
  23127. 800a208: 681b ldr r3, [r3, #0]
  23128. 800a20a: 681a ldr r2, [r3, #0]
  23129. 800a20c: 687b ldr r3, [r7, #4]
  23130. 800a20e: 681b ldr r3, [r3, #0]
  23131. 800a210: f022 0201 bic.w r2, r2, #1
  23132. 800a214: 601a str r2, [r3, #0]
  23133. do
  23134. {
  23135. if (++count > timeout)
  23136. 800a216: 68fb ldr r3, [r7, #12]
  23137. 800a218: 3301 adds r3, #1
  23138. 800a21a: 60fb str r3, [r7, #12]
  23139. 800a21c: 6a7a ldr r2, [r7, #36] @ 0x24
  23140. 800a21e: 429a cmp r2, r3
  23141. 800a220: d307 bcc.n 800a232 <HAL_DMA_IRQHandler+0x8f6>
  23142. {
  23143. break;
  23144. }
  23145. }
  23146. while((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_EN) != 0U);
  23147. 800a222: 687b ldr r3, [r7, #4]
  23148. 800a224: 681b ldr r3, [r3, #0]
  23149. 800a226: 681b ldr r3, [r3, #0]
  23150. 800a228: f003 0301 and.w r3, r3, #1
  23151. 800a22c: 2b00 cmp r3, #0
  23152. 800a22e: d1f2 bne.n 800a216 <HAL_DMA_IRQHandler+0x8da>
  23153. 800a230: e000 b.n 800a234 <HAL_DMA_IRQHandler+0x8f8>
  23154. break;
  23155. 800a232: bf00 nop
  23156. if((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_EN) != 0U)
  23157. 800a234: 687b ldr r3, [r7, #4]
  23158. 800a236: 681b ldr r3, [r3, #0]
  23159. 800a238: 681b ldr r3, [r3, #0]
  23160. 800a23a: f003 0301 and.w r3, r3, #1
  23161. 800a23e: 2b00 cmp r3, #0
  23162. 800a240: d004 beq.n 800a24c <HAL_DMA_IRQHandler+0x910>
  23163. {
  23164. /* Change the DMA state to error if DMA disable fails */
  23165. hdma->State = HAL_DMA_STATE_ERROR;
  23166. 800a242: 687b ldr r3, [r7, #4]
  23167. 800a244: 2203 movs r2, #3
  23168. 800a246: f883 2035 strb.w r2, [r3, #53] @ 0x35
  23169. 800a24a: e003 b.n 800a254 <HAL_DMA_IRQHandler+0x918>
  23170. }
  23171. else
  23172. {
  23173. /* Change the DMA state to Ready if DMA disable success */
  23174. hdma->State = HAL_DMA_STATE_READY;
  23175. 800a24c: 687b ldr r3, [r7, #4]
  23176. 800a24e: 2201 movs r2, #1
  23177. 800a250: f883 2035 strb.w r2, [r3, #53] @ 0x35
  23178. }
  23179. /* Process Unlocked */
  23180. __HAL_UNLOCK(hdma);
  23181. 800a254: 687b ldr r3, [r7, #4]
  23182. 800a256: 2200 movs r2, #0
  23183. 800a258: f883 2034 strb.w r2, [r3, #52] @ 0x34
  23184. }
  23185. if(hdma->XferErrorCallback != NULL)
  23186. 800a25c: 687b ldr r3, [r7, #4]
  23187. 800a25e: 6cdb ldr r3, [r3, #76] @ 0x4c
  23188. 800a260: 2b00 cmp r3, #0
  23189. 800a262: f000 8272 beq.w 800a74a <HAL_DMA_IRQHandler+0xe0e>
  23190. {
  23191. /* Transfer error callback */
  23192. hdma->XferErrorCallback(hdma);
  23193. 800a266: 687b ldr r3, [r7, #4]
  23194. 800a268: 6cdb ldr r3, [r3, #76] @ 0x4c
  23195. 800a26a: 6878 ldr r0, [r7, #4]
  23196. 800a26c: 4798 blx r3
  23197. 800a26e: e26c b.n 800a74a <HAL_DMA_IRQHandler+0xe0e>
  23198. }
  23199. }
  23200. }
  23201. else if(IS_BDMA_CHANNEL_INSTANCE(hdma->Instance) != 0U) /* BDMA instance(s) */
  23202. 800a270: 687b ldr r3, [r7, #4]
  23203. 800a272: 681b ldr r3, [r3, #0]
  23204. 800a274: 4a43 ldr r2, [pc, #268] @ (800a384 <HAL_DMA_IRQHandler+0xa48>)
  23205. 800a276: 4293 cmp r3, r2
  23206. 800a278: d022 beq.n 800a2c0 <HAL_DMA_IRQHandler+0x984>
  23207. 800a27a: 687b ldr r3, [r7, #4]
  23208. 800a27c: 681b ldr r3, [r3, #0]
  23209. 800a27e: 4a42 ldr r2, [pc, #264] @ (800a388 <HAL_DMA_IRQHandler+0xa4c>)
  23210. 800a280: 4293 cmp r3, r2
  23211. 800a282: d01d beq.n 800a2c0 <HAL_DMA_IRQHandler+0x984>
  23212. 800a284: 687b ldr r3, [r7, #4]
  23213. 800a286: 681b ldr r3, [r3, #0]
  23214. 800a288: 4a40 ldr r2, [pc, #256] @ (800a38c <HAL_DMA_IRQHandler+0xa50>)
  23215. 800a28a: 4293 cmp r3, r2
  23216. 800a28c: d018 beq.n 800a2c0 <HAL_DMA_IRQHandler+0x984>
  23217. 800a28e: 687b ldr r3, [r7, #4]
  23218. 800a290: 681b ldr r3, [r3, #0]
  23219. 800a292: 4a3f ldr r2, [pc, #252] @ (800a390 <HAL_DMA_IRQHandler+0xa54>)
  23220. 800a294: 4293 cmp r3, r2
  23221. 800a296: d013 beq.n 800a2c0 <HAL_DMA_IRQHandler+0x984>
  23222. 800a298: 687b ldr r3, [r7, #4]
  23223. 800a29a: 681b ldr r3, [r3, #0]
  23224. 800a29c: 4a3d ldr r2, [pc, #244] @ (800a394 <HAL_DMA_IRQHandler+0xa58>)
  23225. 800a29e: 4293 cmp r3, r2
  23226. 800a2a0: d00e beq.n 800a2c0 <HAL_DMA_IRQHandler+0x984>
  23227. 800a2a2: 687b ldr r3, [r7, #4]
  23228. 800a2a4: 681b ldr r3, [r3, #0]
  23229. 800a2a6: 4a3c ldr r2, [pc, #240] @ (800a398 <HAL_DMA_IRQHandler+0xa5c>)
  23230. 800a2a8: 4293 cmp r3, r2
  23231. 800a2aa: d009 beq.n 800a2c0 <HAL_DMA_IRQHandler+0x984>
  23232. 800a2ac: 687b ldr r3, [r7, #4]
  23233. 800a2ae: 681b ldr r3, [r3, #0]
  23234. 800a2b0: 4a3a ldr r2, [pc, #232] @ (800a39c <HAL_DMA_IRQHandler+0xa60>)
  23235. 800a2b2: 4293 cmp r3, r2
  23236. 800a2b4: d004 beq.n 800a2c0 <HAL_DMA_IRQHandler+0x984>
  23237. 800a2b6: 687b ldr r3, [r7, #4]
  23238. 800a2b8: 681b ldr r3, [r3, #0]
  23239. 800a2ba: 4a39 ldr r2, [pc, #228] @ (800a3a0 <HAL_DMA_IRQHandler+0xa64>)
  23240. 800a2bc: 4293 cmp r3, r2
  23241. 800a2be: d101 bne.n 800a2c4 <HAL_DMA_IRQHandler+0x988>
  23242. 800a2c0: 2301 movs r3, #1
  23243. 800a2c2: e000 b.n 800a2c6 <HAL_DMA_IRQHandler+0x98a>
  23244. 800a2c4: 2300 movs r3, #0
  23245. 800a2c6: 2b00 cmp r3, #0
  23246. 800a2c8: f000 823f beq.w 800a74a <HAL_DMA_IRQHandler+0xe0e>
  23247. {
  23248. ccr_reg = (((BDMA_Channel_TypeDef *)hdma->Instance)->CCR);
  23249. 800a2cc: 687b ldr r3, [r7, #4]
  23250. 800a2ce: 681b ldr r3, [r3, #0]
  23251. 800a2d0: 681b ldr r3, [r3, #0]
  23252. 800a2d2: 613b str r3, [r7, #16]
  23253. /* Half Transfer Complete Interrupt management ******************************/
  23254. if (((tmpisr_bdma & (BDMA_FLAG_HT0 << (hdma->StreamIndex & 0x1FU))) != 0U) && ((ccr_reg & BDMA_CCR_HTIE) != 0U))
  23255. 800a2d4: 687b ldr r3, [r7, #4]
  23256. 800a2d6: 6ddb ldr r3, [r3, #92] @ 0x5c
  23257. 800a2d8: f003 031f and.w r3, r3, #31
  23258. 800a2dc: 2204 movs r2, #4
  23259. 800a2de: 409a lsls r2, r3
  23260. 800a2e0: 697b ldr r3, [r7, #20]
  23261. 800a2e2: 4013 ands r3, r2
  23262. 800a2e4: 2b00 cmp r3, #0
  23263. 800a2e6: f000 80cd beq.w 800a484 <HAL_DMA_IRQHandler+0xb48>
  23264. 800a2ea: 693b ldr r3, [r7, #16]
  23265. 800a2ec: f003 0304 and.w r3, r3, #4
  23266. 800a2f0: 2b00 cmp r3, #0
  23267. 800a2f2: f000 80c7 beq.w 800a484 <HAL_DMA_IRQHandler+0xb48>
  23268. {
  23269. /* Clear the half transfer complete flag */
  23270. regs_bdma->IFCR = (BDMA_ISR_HTIF0 << (hdma->StreamIndex & 0x1FU));
  23271. 800a2f6: 687b ldr r3, [r7, #4]
  23272. 800a2f8: 6ddb ldr r3, [r3, #92] @ 0x5c
  23273. 800a2fa: f003 031f and.w r3, r3, #31
  23274. 800a2fe: 2204 movs r2, #4
  23275. 800a300: 409a lsls r2, r3
  23276. 800a302: 69fb ldr r3, [r7, #28]
  23277. 800a304: 605a str r2, [r3, #4]
  23278. /* Disable the transfer complete interrupt if the DMA mode is Double Buffering */
  23279. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  23280. 800a306: 693b ldr r3, [r7, #16]
  23281. 800a308: f403 4300 and.w r3, r3, #32768 @ 0x8000
  23282. 800a30c: 2b00 cmp r3, #0
  23283. 800a30e: d049 beq.n 800a3a4 <HAL_DMA_IRQHandler+0xa68>
  23284. {
  23285. /* Current memory buffer used is Memory 0 */
  23286. if((ccr_reg & BDMA_CCR_CT) == 0U)
  23287. 800a310: 693b ldr r3, [r7, #16]
  23288. 800a312: f403 3380 and.w r3, r3, #65536 @ 0x10000
  23289. 800a316: 2b00 cmp r3, #0
  23290. 800a318: d109 bne.n 800a32e <HAL_DMA_IRQHandler+0x9f2>
  23291. {
  23292. if(hdma->XferM1HalfCpltCallback != NULL)
  23293. 800a31a: 687b ldr r3, [r7, #4]
  23294. 800a31c: 6c9b ldr r3, [r3, #72] @ 0x48
  23295. 800a31e: 2b00 cmp r3, #0
  23296. 800a320: f000 8210 beq.w 800a744 <HAL_DMA_IRQHandler+0xe08>
  23297. {
  23298. /* Half transfer Callback for Memory 1 */
  23299. hdma->XferM1HalfCpltCallback(hdma);
  23300. 800a324: 687b ldr r3, [r7, #4]
  23301. 800a326: 6c9b ldr r3, [r3, #72] @ 0x48
  23302. 800a328: 6878 ldr r0, [r7, #4]
  23303. 800a32a: 4798 blx r3
  23304. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  23305. 800a32c: e20a b.n 800a744 <HAL_DMA_IRQHandler+0xe08>
  23306. }
  23307. }
  23308. /* Current memory buffer used is Memory 1 */
  23309. else
  23310. {
  23311. if(hdma->XferHalfCpltCallback != NULL)
  23312. 800a32e: 687b ldr r3, [r7, #4]
  23313. 800a330: 6c1b ldr r3, [r3, #64] @ 0x40
  23314. 800a332: 2b00 cmp r3, #0
  23315. 800a334: f000 8206 beq.w 800a744 <HAL_DMA_IRQHandler+0xe08>
  23316. {
  23317. /* Half transfer Callback for Memory 0 */
  23318. hdma->XferHalfCpltCallback(hdma);
  23319. 800a338: 687b ldr r3, [r7, #4]
  23320. 800a33a: 6c1b ldr r3, [r3, #64] @ 0x40
  23321. 800a33c: 6878 ldr r0, [r7, #4]
  23322. 800a33e: 4798 blx r3
  23323. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  23324. 800a340: e200 b.n 800a744 <HAL_DMA_IRQHandler+0xe08>
  23325. 800a342: bf00 nop
  23326. 800a344: 40020010 .word 0x40020010
  23327. 800a348: 40020028 .word 0x40020028
  23328. 800a34c: 40020040 .word 0x40020040
  23329. 800a350: 40020058 .word 0x40020058
  23330. 800a354: 40020070 .word 0x40020070
  23331. 800a358: 40020088 .word 0x40020088
  23332. 800a35c: 400200a0 .word 0x400200a0
  23333. 800a360: 400200b8 .word 0x400200b8
  23334. 800a364: 40020410 .word 0x40020410
  23335. 800a368: 40020428 .word 0x40020428
  23336. 800a36c: 40020440 .word 0x40020440
  23337. 800a370: 40020458 .word 0x40020458
  23338. 800a374: 40020470 .word 0x40020470
  23339. 800a378: 40020488 .word 0x40020488
  23340. 800a37c: 400204a0 .word 0x400204a0
  23341. 800a380: 400204b8 .word 0x400204b8
  23342. 800a384: 58025408 .word 0x58025408
  23343. 800a388: 5802541c .word 0x5802541c
  23344. 800a38c: 58025430 .word 0x58025430
  23345. 800a390: 58025444 .word 0x58025444
  23346. 800a394: 58025458 .word 0x58025458
  23347. 800a398: 5802546c .word 0x5802546c
  23348. 800a39c: 58025480 .word 0x58025480
  23349. 800a3a0: 58025494 .word 0x58025494
  23350. }
  23351. }
  23352. }
  23353. else
  23354. {
  23355. if((ccr_reg & BDMA_CCR_CIRC) == 0U)
  23356. 800a3a4: 693b ldr r3, [r7, #16]
  23357. 800a3a6: f003 0320 and.w r3, r3, #32
  23358. 800a3aa: 2b00 cmp r3, #0
  23359. 800a3ac: d160 bne.n 800a470 <HAL_DMA_IRQHandler+0xb34>
  23360. {
  23361. /* Disable the half transfer interrupt */
  23362. __HAL_DMA_DISABLE_IT(hdma, DMA_IT_HT);
  23363. 800a3ae: 687b ldr r3, [r7, #4]
  23364. 800a3b0: 681b ldr r3, [r3, #0]
  23365. 800a3b2: 4a7f ldr r2, [pc, #508] @ (800a5b0 <HAL_DMA_IRQHandler+0xc74>)
  23366. 800a3b4: 4293 cmp r3, r2
  23367. 800a3b6: d04a beq.n 800a44e <HAL_DMA_IRQHandler+0xb12>
  23368. 800a3b8: 687b ldr r3, [r7, #4]
  23369. 800a3ba: 681b ldr r3, [r3, #0]
  23370. 800a3bc: 4a7d ldr r2, [pc, #500] @ (800a5b4 <HAL_DMA_IRQHandler+0xc78>)
  23371. 800a3be: 4293 cmp r3, r2
  23372. 800a3c0: d045 beq.n 800a44e <HAL_DMA_IRQHandler+0xb12>
  23373. 800a3c2: 687b ldr r3, [r7, #4]
  23374. 800a3c4: 681b ldr r3, [r3, #0]
  23375. 800a3c6: 4a7c ldr r2, [pc, #496] @ (800a5b8 <HAL_DMA_IRQHandler+0xc7c>)
  23376. 800a3c8: 4293 cmp r3, r2
  23377. 800a3ca: d040 beq.n 800a44e <HAL_DMA_IRQHandler+0xb12>
  23378. 800a3cc: 687b ldr r3, [r7, #4]
  23379. 800a3ce: 681b ldr r3, [r3, #0]
  23380. 800a3d0: 4a7a ldr r2, [pc, #488] @ (800a5bc <HAL_DMA_IRQHandler+0xc80>)
  23381. 800a3d2: 4293 cmp r3, r2
  23382. 800a3d4: d03b beq.n 800a44e <HAL_DMA_IRQHandler+0xb12>
  23383. 800a3d6: 687b ldr r3, [r7, #4]
  23384. 800a3d8: 681b ldr r3, [r3, #0]
  23385. 800a3da: 4a79 ldr r2, [pc, #484] @ (800a5c0 <HAL_DMA_IRQHandler+0xc84>)
  23386. 800a3dc: 4293 cmp r3, r2
  23387. 800a3de: d036 beq.n 800a44e <HAL_DMA_IRQHandler+0xb12>
  23388. 800a3e0: 687b ldr r3, [r7, #4]
  23389. 800a3e2: 681b ldr r3, [r3, #0]
  23390. 800a3e4: 4a77 ldr r2, [pc, #476] @ (800a5c4 <HAL_DMA_IRQHandler+0xc88>)
  23391. 800a3e6: 4293 cmp r3, r2
  23392. 800a3e8: d031 beq.n 800a44e <HAL_DMA_IRQHandler+0xb12>
  23393. 800a3ea: 687b ldr r3, [r7, #4]
  23394. 800a3ec: 681b ldr r3, [r3, #0]
  23395. 800a3ee: 4a76 ldr r2, [pc, #472] @ (800a5c8 <HAL_DMA_IRQHandler+0xc8c>)
  23396. 800a3f0: 4293 cmp r3, r2
  23397. 800a3f2: d02c beq.n 800a44e <HAL_DMA_IRQHandler+0xb12>
  23398. 800a3f4: 687b ldr r3, [r7, #4]
  23399. 800a3f6: 681b ldr r3, [r3, #0]
  23400. 800a3f8: 4a74 ldr r2, [pc, #464] @ (800a5cc <HAL_DMA_IRQHandler+0xc90>)
  23401. 800a3fa: 4293 cmp r3, r2
  23402. 800a3fc: d027 beq.n 800a44e <HAL_DMA_IRQHandler+0xb12>
  23403. 800a3fe: 687b ldr r3, [r7, #4]
  23404. 800a400: 681b ldr r3, [r3, #0]
  23405. 800a402: 4a73 ldr r2, [pc, #460] @ (800a5d0 <HAL_DMA_IRQHandler+0xc94>)
  23406. 800a404: 4293 cmp r3, r2
  23407. 800a406: d022 beq.n 800a44e <HAL_DMA_IRQHandler+0xb12>
  23408. 800a408: 687b ldr r3, [r7, #4]
  23409. 800a40a: 681b ldr r3, [r3, #0]
  23410. 800a40c: 4a71 ldr r2, [pc, #452] @ (800a5d4 <HAL_DMA_IRQHandler+0xc98>)
  23411. 800a40e: 4293 cmp r3, r2
  23412. 800a410: d01d beq.n 800a44e <HAL_DMA_IRQHandler+0xb12>
  23413. 800a412: 687b ldr r3, [r7, #4]
  23414. 800a414: 681b ldr r3, [r3, #0]
  23415. 800a416: 4a70 ldr r2, [pc, #448] @ (800a5d8 <HAL_DMA_IRQHandler+0xc9c>)
  23416. 800a418: 4293 cmp r3, r2
  23417. 800a41a: d018 beq.n 800a44e <HAL_DMA_IRQHandler+0xb12>
  23418. 800a41c: 687b ldr r3, [r7, #4]
  23419. 800a41e: 681b ldr r3, [r3, #0]
  23420. 800a420: 4a6e ldr r2, [pc, #440] @ (800a5dc <HAL_DMA_IRQHandler+0xca0>)
  23421. 800a422: 4293 cmp r3, r2
  23422. 800a424: d013 beq.n 800a44e <HAL_DMA_IRQHandler+0xb12>
  23423. 800a426: 687b ldr r3, [r7, #4]
  23424. 800a428: 681b ldr r3, [r3, #0]
  23425. 800a42a: 4a6d ldr r2, [pc, #436] @ (800a5e0 <HAL_DMA_IRQHandler+0xca4>)
  23426. 800a42c: 4293 cmp r3, r2
  23427. 800a42e: d00e beq.n 800a44e <HAL_DMA_IRQHandler+0xb12>
  23428. 800a430: 687b ldr r3, [r7, #4]
  23429. 800a432: 681b ldr r3, [r3, #0]
  23430. 800a434: 4a6b ldr r2, [pc, #428] @ (800a5e4 <HAL_DMA_IRQHandler+0xca8>)
  23431. 800a436: 4293 cmp r3, r2
  23432. 800a438: d009 beq.n 800a44e <HAL_DMA_IRQHandler+0xb12>
  23433. 800a43a: 687b ldr r3, [r7, #4]
  23434. 800a43c: 681b ldr r3, [r3, #0]
  23435. 800a43e: 4a6a ldr r2, [pc, #424] @ (800a5e8 <HAL_DMA_IRQHandler+0xcac>)
  23436. 800a440: 4293 cmp r3, r2
  23437. 800a442: d004 beq.n 800a44e <HAL_DMA_IRQHandler+0xb12>
  23438. 800a444: 687b ldr r3, [r7, #4]
  23439. 800a446: 681b ldr r3, [r3, #0]
  23440. 800a448: 4a68 ldr r2, [pc, #416] @ (800a5ec <HAL_DMA_IRQHandler+0xcb0>)
  23441. 800a44a: 4293 cmp r3, r2
  23442. 800a44c: d108 bne.n 800a460 <HAL_DMA_IRQHandler+0xb24>
  23443. 800a44e: 687b ldr r3, [r7, #4]
  23444. 800a450: 681b ldr r3, [r3, #0]
  23445. 800a452: 681a ldr r2, [r3, #0]
  23446. 800a454: 687b ldr r3, [r7, #4]
  23447. 800a456: 681b ldr r3, [r3, #0]
  23448. 800a458: f022 0208 bic.w r2, r2, #8
  23449. 800a45c: 601a str r2, [r3, #0]
  23450. 800a45e: e007 b.n 800a470 <HAL_DMA_IRQHandler+0xb34>
  23451. 800a460: 687b ldr r3, [r7, #4]
  23452. 800a462: 681b ldr r3, [r3, #0]
  23453. 800a464: 681a ldr r2, [r3, #0]
  23454. 800a466: 687b ldr r3, [r7, #4]
  23455. 800a468: 681b ldr r3, [r3, #0]
  23456. 800a46a: f022 0204 bic.w r2, r2, #4
  23457. 800a46e: 601a str r2, [r3, #0]
  23458. }
  23459. /* DMA peripheral state is not updated in Half Transfer */
  23460. /* but in Transfer Complete case */
  23461. if(hdma->XferHalfCpltCallback != NULL)
  23462. 800a470: 687b ldr r3, [r7, #4]
  23463. 800a472: 6c1b ldr r3, [r3, #64] @ 0x40
  23464. 800a474: 2b00 cmp r3, #0
  23465. 800a476: f000 8165 beq.w 800a744 <HAL_DMA_IRQHandler+0xe08>
  23466. {
  23467. /* Half transfer callback */
  23468. hdma->XferHalfCpltCallback(hdma);
  23469. 800a47a: 687b ldr r3, [r7, #4]
  23470. 800a47c: 6c1b ldr r3, [r3, #64] @ 0x40
  23471. 800a47e: 6878 ldr r0, [r7, #4]
  23472. 800a480: 4798 blx r3
  23473. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  23474. 800a482: e15f b.n 800a744 <HAL_DMA_IRQHandler+0xe08>
  23475. }
  23476. }
  23477. }
  23478. /* Transfer Complete Interrupt management ***********************************/
  23479. else if (((tmpisr_bdma & (BDMA_FLAG_TC0 << (hdma->StreamIndex & 0x1FU))) != 0U) && ((ccr_reg & BDMA_CCR_TCIE) != 0U))
  23480. 800a484: 687b ldr r3, [r7, #4]
  23481. 800a486: 6ddb ldr r3, [r3, #92] @ 0x5c
  23482. 800a488: f003 031f and.w r3, r3, #31
  23483. 800a48c: 2202 movs r2, #2
  23484. 800a48e: 409a lsls r2, r3
  23485. 800a490: 697b ldr r3, [r7, #20]
  23486. 800a492: 4013 ands r3, r2
  23487. 800a494: 2b00 cmp r3, #0
  23488. 800a496: f000 80c5 beq.w 800a624 <HAL_DMA_IRQHandler+0xce8>
  23489. 800a49a: 693b ldr r3, [r7, #16]
  23490. 800a49c: f003 0302 and.w r3, r3, #2
  23491. 800a4a0: 2b00 cmp r3, #0
  23492. 800a4a2: f000 80bf beq.w 800a624 <HAL_DMA_IRQHandler+0xce8>
  23493. {
  23494. /* Clear the transfer complete flag */
  23495. regs_bdma->IFCR = (BDMA_ISR_TCIF0) << (hdma->StreamIndex & 0x1FU);
  23496. 800a4a6: 687b ldr r3, [r7, #4]
  23497. 800a4a8: 6ddb ldr r3, [r3, #92] @ 0x5c
  23498. 800a4aa: f003 031f and.w r3, r3, #31
  23499. 800a4ae: 2202 movs r2, #2
  23500. 800a4b0: 409a lsls r2, r3
  23501. 800a4b2: 69fb ldr r3, [r7, #28]
  23502. 800a4b4: 605a str r2, [r3, #4]
  23503. /* Disable the transfer complete interrupt if the DMA mode is Double Buffering */
  23504. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  23505. 800a4b6: 693b ldr r3, [r7, #16]
  23506. 800a4b8: f403 4300 and.w r3, r3, #32768 @ 0x8000
  23507. 800a4bc: 2b00 cmp r3, #0
  23508. 800a4be: d018 beq.n 800a4f2 <HAL_DMA_IRQHandler+0xbb6>
  23509. {
  23510. /* Current memory buffer used is Memory 0 */
  23511. if((ccr_reg & BDMA_CCR_CT) == 0U)
  23512. 800a4c0: 693b ldr r3, [r7, #16]
  23513. 800a4c2: f403 3380 and.w r3, r3, #65536 @ 0x10000
  23514. 800a4c6: 2b00 cmp r3, #0
  23515. 800a4c8: d109 bne.n 800a4de <HAL_DMA_IRQHandler+0xba2>
  23516. {
  23517. if(hdma->XferM1CpltCallback != NULL)
  23518. 800a4ca: 687b ldr r3, [r7, #4]
  23519. 800a4cc: 6c5b ldr r3, [r3, #68] @ 0x44
  23520. 800a4ce: 2b00 cmp r3, #0
  23521. 800a4d0: f000 813a beq.w 800a748 <HAL_DMA_IRQHandler+0xe0c>
  23522. {
  23523. /* Transfer complete Callback for Memory 1 */
  23524. hdma->XferM1CpltCallback(hdma);
  23525. 800a4d4: 687b ldr r3, [r7, #4]
  23526. 800a4d6: 6c5b ldr r3, [r3, #68] @ 0x44
  23527. 800a4d8: 6878 ldr r0, [r7, #4]
  23528. 800a4da: 4798 blx r3
  23529. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  23530. 800a4dc: e134 b.n 800a748 <HAL_DMA_IRQHandler+0xe0c>
  23531. }
  23532. }
  23533. /* Current memory buffer used is Memory 1 */
  23534. else
  23535. {
  23536. if(hdma->XferCpltCallback != NULL)
  23537. 800a4de: 687b ldr r3, [r7, #4]
  23538. 800a4e0: 6bdb ldr r3, [r3, #60] @ 0x3c
  23539. 800a4e2: 2b00 cmp r3, #0
  23540. 800a4e4: f000 8130 beq.w 800a748 <HAL_DMA_IRQHandler+0xe0c>
  23541. {
  23542. /* Transfer complete Callback for Memory 0 */
  23543. hdma->XferCpltCallback(hdma);
  23544. 800a4e8: 687b ldr r3, [r7, #4]
  23545. 800a4ea: 6bdb ldr r3, [r3, #60] @ 0x3c
  23546. 800a4ec: 6878 ldr r0, [r7, #4]
  23547. 800a4ee: 4798 blx r3
  23548. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  23549. 800a4f0: e12a b.n 800a748 <HAL_DMA_IRQHandler+0xe0c>
  23550. }
  23551. }
  23552. }
  23553. else
  23554. {
  23555. if((ccr_reg & BDMA_CCR_CIRC) == 0U)
  23556. 800a4f2: 693b ldr r3, [r7, #16]
  23557. 800a4f4: f003 0320 and.w r3, r3, #32
  23558. 800a4f8: 2b00 cmp r3, #0
  23559. 800a4fa: f040 8089 bne.w 800a610 <HAL_DMA_IRQHandler+0xcd4>
  23560. {
  23561. /* Disable the transfer complete and error interrupt, if the DMA mode is not CIRCULAR */
  23562. __HAL_DMA_DISABLE_IT(hdma, DMA_IT_TE | DMA_IT_TC);
  23563. 800a4fe: 687b ldr r3, [r7, #4]
  23564. 800a500: 681b ldr r3, [r3, #0]
  23565. 800a502: 4a2b ldr r2, [pc, #172] @ (800a5b0 <HAL_DMA_IRQHandler+0xc74>)
  23566. 800a504: 4293 cmp r3, r2
  23567. 800a506: d04a beq.n 800a59e <HAL_DMA_IRQHandler+0xc62>
  23568. 800a508: 687b ldr r3, [r7, #4]
  23569. 800a50a: 681b ldr r3, [r3, #0]
  23570. 800a50c: 4a29 ldr r2, [pc, #164] @ (800a5b4 <HAL_DMA_IRQHandler+0xc78>)
  23571. 800a50e: 4293 cmp r3, r2
  23572. 800a510: d045 beq.n 800a59e <HAL_DMA_IRQHandler+0xc62>
  23573. 800a512: 687b ldr r3, [r7, #4]
  23574. 800a514: 681b ldr r3, [r3, #0]
  23575. 800a516: 4a28 ldr r2, [pc, #160] @ (800a5b8 <HAL_DMA_IRQHandler+0xc7c>)
  23576. 800a518: 4293 cmp r3, r2
  23577. 800a51a: d040 beq.n 800a59e <HAL_DMA_IRQHandler+0xc62>
  23578. 800a51c: 687b ldr r3, [r7, #4]
  23579. 800a51e: 681b ldr r3, [r3, #0]
  23580. 800a520: 4a26 ldr r2, [pc, #152] @ (800a5bc <HAL_DMA_IRQHandler+0xc80>)
  23581. 800a522: 4293 cmp r3, r2
  23582. 800a524: d03b beq.n 800a59e <HAL_DMA_IRQHandler+0xc62>
  23583. 800a526: 687b ldr r3, [r7, #4]
  23584. 800a528: 681b ldr r3, [r3, #0]
  23585. 800a52a: 4a25 ldr r2, [pc, #148] @ (800a5c0 <HAL_DMA_IRQHandler+0xc84>)
  23586. 800a52c: 4293 cmp r3, r2
  23587. 800a52e: d036 beq.n 800a59e <HAL_DMA_IRQHandler+0xc62>
  23588. 800a530: 687b ldr r3, [r7, #4]
  23589. 800a532: 681b ldr r3, [r3, #0]
  23590. 800a534: 4a23 ldr r2, [pc, #140] @ (800a5c4 <HAL_DMA_IRQHandler+0xc88>)
  23591. 800a536: 4293 cmp r3, r2
  23592. 800a538: d031 beq.n 800a59e <HAL_DMA_IRQHandler+0xc62>
  23593. 800a53a: 687b ldr r3, [r7, #4]
  23594. 800a53c: 681b ldr r3, [r3, #0]
  23595. 800a53e: 4a22 ldr r2, [pc, #136] @ (800a5c8 <HAL_DMA_IRQHandler+0xc8c>)
  23596. 800a540: 4293 cmp r3, r2
  23597. 800a542: d02c beq.n 800a59e <HAL_DMA_IRQHandler+0xc62>
  23598. 800a544: 687b ldr r3, [r7, #4]
  23599. 800a546: 681b ldr r3, [r3, #0]
  23600. 800a548: 4a20 ldr r2, [pc, #128] @ (800a5cc <HAL_DMA_IRQHandler+0xc90>)
  23601. 800a54a: 4293 cmp r3, r2
  23602. 800a54c: d027 beq.n 800a59e <HAL_DMA_IRQHandler+0xc62>
  23603. 800a54e: 687b ldr r3, [r7, #4]
  23604. 800a550: 681b ldr r3, [r3, #0]
  23605. 800a552: 4a1f ldr r2, [pc, #124] @ (800a5d0 <HAL_DMA_IRQHandler+0xc94>)
  23606. 800a554: 4293 cmp r3, r2
  23607. 800a556: d022 beq.n 800a59e <HAL_DMA_IRQHandler+0xc62>
  23608. 800a558: 687b ldr r3, [r7, #4]
  23609. 800a55a: 681b ldr r3, [r3, #0]
  23610. 800a55c: 4a1d ldr r2, [pc, #116] @ (800a5d4 <HAL_DMA_IRQHandler+0xc98>)
  23611. 800a55e: 4293 cmp r3, r2
  23612. 800a560: d01d beq.n 800a59e <HAL_DMA_IRQHandler+0xc62>
  23613. 800a562: 687b ldr r3, [r7, #4]
  23614. 800a564: 681b ldr r3, [r3, #0]
  23615. 800a566: 4a1c ldr r2, [pc, #112] @ (800a5d8 <HAL_DMA_IRQHandler+0xc9c>)
  23616. 800a568: 4293 cmp r3, r2
  23617. 800a56a: d018 beq.n 800a59e <HAL_DMA_IRQHandler+0xc62>
  23618. 800a56c: 687b ldr r3, [r7, #4]
  23619. 800a56e: 681b ldr r3, [r3, #0]
  23620. 800a570: 4a1a ldr r2, [pc, #104] @ (800a5dc <HAL_DMA_IRQHandler+0xca0>)
  23621. 800a572: 4293 cmp r3, r2
  23622. 800a574: d013 beq.n 800a59e <HAL_DMA_IRQHandler+0xc62>
  23623. 800a576: 687b ldr r3, [r7, #4]
  23624. 800a578: 681b ldr r3, [r3, #0]
  23625. 800a57a: 4a19 ldr r2, [pc, #100] @ (800a5e0 <HAL_DMA_IRQHandler+0xca4>)
  23626. 800a57c: 4293 cmp r3, r2
  23627. 800a57e: d00e beq.n 800a59e <HAL_DMA_IRQHandler+0xc62>
  23628. 800a580: 687b ldr r3, [r7, #4]
  23629. 800a582: 681b ldr r3, [r3, #0]
  23630. 800a584: 4a17 ldr r2, [pc, #92] @ (800a5e4 <HAL_DMA_IRQHandler+0xca8>)
  23631. 800a586: 4293 cmp r3, r2
  23632. 800a588: d009 beq.n 800a59e <HAL_DMA_IRQHandler+0xc62>
  23633. 800a58a: 687b ldr r3, [r7, #4]
  23634. 800a58c: 681b ldr r3, [r3, #0]
  23635. 800a58e: 4a16 ldr r2, [pc, #88] @ (800a5e8 <HAL_DMA_IRQHandler+0xcac>)
  23636. 800a590: 4293 cmp r3, r2
  23637. 800a592: d004 beq.n 800a59e <HAL_DMA_IRQHandler+0xc62>
  23638. 800a594: 687b ldr r3, [r7, #4]
  23639. 800a596: 681b ldr r3, [r3, #0]
  23640. 800a598: 4a14 ldr r2, [pc, #80] @ (800a5ec <HAL_DMA_IRQHandler+0xcb0>)
  23641. 800a59a: 4293 cmp r3, r2
  23642. 800a59c: d128 bne.n 800a5f0 <HAL_DMA_IRQHandler+0xcb4>
  23643. 800a59e: 687b ldr r3, [r7, #4]
  23644. 800a5a0: 681b ldr r3, [r3, #0]
  23645. 800a5a2: 681a ldr r2, [r3, #0]
  23646. 800a5a4: 687b ldr r3, [r7, #4]
  23647. 800a5a6: 681b ldr r3, [r3, #0]
  23648. 800a5a8: f022 0214 bic.w r2, r2, #20
  23649. 800a5ac: 601a str r2, [r3, #0]
  23650. 800a5ae: e027 b.n 800a600 <HAL_DMA_IRQHandler+0xcc4>
  23651. 800a5b0: 40020010 .word 0x40020010
  23652. 800a5b4: 40020028 .word 0x40020028
  23653. 800a5b8: 40020040 .word 0x40020040
  23654. 800a5bc: 40020058 .word 0x40020058
  23655. 800a5c0: 40020070 .word 0x40020070
  23656. 800a5c4: 40020088 .word 0x40020088
  23657. 800a5c8: 400200a0 .word 0x400200a0
  23658. 800a5cc: 400200b8 .word 0x400200b8
  23659. 800a5d0: 40020410 .word 0x40020410
  23660. 800a5d4: 40020428 .word 0x40020428
  23661. 800a5d8: 40020440 .word 0x40020440
  23662. 800a5dc: 40020458 .word 0x40020458
  23663. 800a5e0: 40020470 .word 0x40020470
  23664. 800a5e4: 40020488 .word 0x40020488
  23665. 800a5e8: 400204a0 .word 0x400204a0
  23666. 800a5ec: 400204b8 .word 0x400204b8
  23667. 800a5f0: 687b ldr r3, [r7, #4]
  23668. 800a5f2: 681b ldr r3, [r3, #0]
  23669. 800a5f4: 681a ldr r2, [r3, #0]
  23670. 800a5f6: 687b ldr r3, [r7, #4]
  23671. 800a5f8: 681b ldr r3, [r3, #0]
  23672. 800a5fa: f022 020a bic.w r2, r2, #10
  23673. 800a5fe: 601a str r2, [r3, #0]
  23674. /* Change the DMA state */
  23675. hdma->State = HAL_DMA_STATE_READY;
  23676. 800a600: 687b ldr r3, [r7, #4]
  23677. 800a602: 2201 movs r2, #1
  23678. 800a604: f883 2035 strb.w r2, [r3, #53] @ 0x35
  23679. /* Process Unlocked */
  23680. __HAL_UNLOCK(hdma);
  23681. 800a608: 687b ldr r3, [r7, #4]
  23682. 800a60a: 2200 movs r2, #0
  23683. 800a60c: f883 2034 strb.w r2, [r3, #52] @ 0x34
  23684. }
  23685. if(hdma->XferCpltCallback != NULL)
  23686. 800a610: 687b ldr r3, [r7, #4]
  23687. 800a612: 6bdb ldr r3, [r3, #60] @ 0x3c
  23688. 800a614: 2b00 cmp r3, #0
  23689. 800a616: f000 8097 beq.w 800a748 <HAL_DMA_IRQHandler+0xe0c>
  23690. {
  23691. /* Transfer complete callback */
  23692. hdma->XferCpltCallback(hdma);
  23693. 800a61a: 687b ldr r3, [r7, #4]
  23694. 800a61c: 6bdb ldr r3, [r3, #60] @ 0x3c
  23695. 800a61e: 6878 ldr r0, [r7, #4]
  23696. 800a620: 4798 blx r3
  23697. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  23698. 800a622: e091 b.n 800a748 <HAL_DMA_IRQHandler+0xe0c>
  23699. }
  23700. }
  23701. }
  23702. /* Transfer Error Interrupt management **************************************/
  23703. else if (((tmpisr_bdma & (BDMA_FLAG_TE0 << (hdma->StreamIndex & 0x1FU))) != 0U) && ((ccr_reg & BDMA_CCR_TEIE) != 0U))
  23704. 800a624: 687b ldr r3, [r7, #4]
  23705. 800a626: 6ddb ldr r3, [r3, #92] @ 0x5c
  23706. 800a628: f003 031f and.w r3, r3, #31
  23707. 800a62c: 2208 movs r2, #8
  23708. 800a62e: 409a lsls r2, r3
  23709. 800a630: 697b ldr r3, [r7, #20]
  23710. 800a632: 4013 ands r3, r2
  23711. 800a634: 2b00 cmp r3, #0
  23712. 800a636: f000 8088 beq.w 800a74a <HAL_DMA_IRQHandler+0xe0e>
  23713. 800a63a: 693b ldr r3, [r7, #16]
  23714. 800a63c: f003 0308 and.w r3, r3, #8
  23715. 800a640: 2b00 cmp r3, #0
  23716. 800a642: f000 8082 beq.w 800a74a <HAL_DMA_IRQHandler+0xe0e>
  23717. {
  23718. /* When a DMA transfer error occurs */
  23719. /* A hardware clear of its EN bits is performed */
  23720. /* Disable ALL DMA IT */
  23721. __HAL_DMA_DISABLE_IT(hdma, (DMA_IT_TC | DMA_IT_HT | DMA_IT_TE));
  23722. 800a646: 687b ldr r3, [r7, #4]
  23723. 800a648: 681b ldr r3, [r3, #0]
  23724. 800a64a: 4a41 ldr r2, [pc, #260] @ (800a750 <HAL_DMA_IRQHandler+0xe14>)
  23725. 800a64c: 4293 cmp r3, r2
  23726. 800a64e: d04a beq.n 800a6e6 <HAL_DMA_IRQHandler+0xdaa>
  23727. 800a650: 687b ldr r3, [r7, #4]
  23728. 800a652: 681b ldr r3, [r3, #0]
  23729. 800a654: 4a3f ldr r2, [pc, #252] @ (800a754 <HAL_DMA_IRQHandler+0xe18>)
  23730. 800a656: 4293 cmp r3, r2
  23731. 800a658: d045 beq.n 800a6e6 <HAL_DMA_IRQHandler+0xdaa>
  23732. 800a65a: 687b ldr r3, [r7, #4]
  23733. 800a65c: 681b ldr r3, [r3, #0]
  23734. 800a65e: 4a3e ldr r2, [pc, #248] @ (800a758 <HAL_DMA_IRQHandler+0xe1c>)
  23735. 800a660: 4293 cmp r3, r2
  23736. 800a662: d040 beq.n 800a6e6 <HAL_DMA_IRQHandler+0xdaa>
  23737. 800a664: 687b ldr r3, [r7, #4]
  23738. 800a666: 681b ldr r3, [r3, #0]
  23739. 800a668: 4a3c ldr r2, [pc, #240] @ (800a75c <HAL_DMA_IRQHandler+0xe20>)
  23740. 800a66a: 4293 cmp r3, r2
  23741. 800a66c: d03b beq.n 800a6e6 <HAL_DMA_IRQHandler+0xdaa>
  23742. 800a66e: 687b ldr r3, [r7, #4]
  23743. 800a670: 681b ldr r3, [r3, #0]
  23744. 800a672: 4a3b ldr r2, [pc, #236] @ (800a760 <HAL_DMA_IRQHandler+0xe24>)
  23745. 800a674: 4293 cmp r3, r2
  23746. 800a676: d036 beq.n 800a6e6 <HAL_DMA_IRQHandler+0xdaa>
  23747. 800a678: 687b ldr r3, [r7, #4]
  23748. 800a67a: 681b ldr r3, [r3, #0]
  23749. 800a67c: 4a39 ldr r2, [pc, #228] @ (800a764 <HAL_DMA_IRQHandler+0xe28>)
  23750. 800a67e: 4293 cmp r3, r2
  23751. 800a680: d031 beq.n 800a6e6 <HAL_DMA_IRQHandler+0xdaa>
  23752. 800a682: 687b ldr r3, [r7, #4]
  23753. 800a684: 681b ldr r3, [r3, #0]
  23754. 800a686: 4a38 ldr r2, [pc, #224] @ (800a768 <HAL_DMA_IRQHandler+0xe2c>)
  23755. 800a688: 4293 cmp r3, r2
  23756. 800a68a: d02c beq.n 800a6e6 <HAL_DMA_IRQHandler+0xdaa>
  23757. 800a68c: 687b ldr r3, [r7, #4]
  23758. 800a68e: 681b ldr r3, [r3, #0]
  23759. 800a690: 4a36 ldr r2, [pc, #216] @ (800a76c <HAL_DMA_IRQHandler+0xe30>)
  23760. 800a692: 4293 cmp r3, r2
  23761. 800a694: d027 beq.n 800a6e6 <HAL_DMA_IRQHandler+0xdaa>
  23762. 800a696: 687b ldr r3, [r7, #4]
  23763. 800a698: 681b ldr r3, [r3, #0]
  23764. 800a69a: 4a35 ldr r2, [pc, #212] @ (800a770 <HAL_DMA_IRQHandler+0xe34>)
  23765. 800a69c: 4293 cmp r3, r2
  23766. 800a69e: d022 beq.n 800a6e6 <HAL_DMA_IRQHandler+0xdaa>
  23767. 800a6a0: 687b ldr r3, [r7, #4]
  23768. 800a6a2: 681b ldr r3, [r3, #0]
  23769. 800a6a4: 4a33 ldr r2, [pc, #204] @ (800a774 <HAL_DMA_IRQHandler+0xe38>)
  23770. 800a6a6: 4293 cmp r3, r2
  23771. 800a6a8: d01d beq.n 800a6e6 <HAL_DMA_IRQHandler+0xdaa>
  23772. 800a6aa: 687b ldr r3, [r7, #4]
  23773. 800a6ac: 681b ldr r3, [r3, #0]
  23774. 800a6ae: 4a32 ldr r2, [pc, #200] @ (800a778 <HAL_DMA_IRQHandler+0xe3c>)
  23775. 800a6b0: 4293 cmp r3, r2
  23776. 800a6b2: d018 beq.n 800a6e6 <HAL_DMA_IRQHandler+0xdaa>
  23777. 800a6b4: 687b ldr r3, [r7, #4]
  23778. 800a6b6: 681b ldr r3, [r3, #0]
  23779. 800a6b8: 4a30 ldr r2, [pc, #192] @ (800a77c <HAL_DMA_IRQHandler+0xe40>)
  23780. 800a6ba: 4293 cmp r3, r2
  23781. 800a6bc: d013 beq.n 800a6e6 <HAL_DMA_IRQHandler+0xdaa>
  23782. 800a6be: 687b ldr r3, [r7, #4]
  23783. 800a6c0: 681b ldr r3, [r3, #0]
  23784. 800a6c2: 4a2f ldr r2, [pc, #188] @ (800a780 <HAL_DMA_IRQHandler+0xe44>)
  23785. 800a6c4: 4293 cmp r3, r2
  23786. 800a6c6: d00e beq.n 800a6e6 <HAL_DMA_IRQHandler+0xdaa>
  23787. 800a6c8: 687b ldr r3, [r7, #4]
  23788. 800a6ca: 681b ldr r3, [r3, #0]
  23789. 800a6cc: 4a2d ldr r2, [pc, #180] @ (800a784 <HAL_DMA_IRQHandler+0xe48>)
  23790. 800a6ce: 4293 cmp r3, r2
  23791. 800a6d0: d009 beq.n 800a6e6 <HAL_DMA_IRQHandler+0xdaa>
  23792. 800a6d2: 687b ldr r3, [r7, #4]
  23793. 800a6d4: 681b ldr r3, [r3, #0]
  23794. 800a6d6: 4a2c ldr r2, [pc, #176] @ (800a788 <HAL_DMA_IRQHandler+0xe4c>)
  23795. 800a6d8: 4293 cmp r3, r2
  23796. 800a6da: d004 beq.n 800a6e6 <HAL_DMA_IRQHandler+0xdaa>
  23797. 800a6dc: 687b ldr r3, [r7, #4]
  23798. 800a6de: 681b ldr r3, [r3, #0]
  23799. 800a6e0: 4a2a ldr r2, [pc, #168] @ (800a78c <HAL_DMA_IRQHandler+0xe50>)
  23800. 800a6e2: 4293 cmp r3, r2
  23801. 800a6e4: d108 bne.n 800a6f8 <HAL_DMA_IRQHandler+0xdbc>
  23802. 800a6e6: 687b ldr r3, [r7, #4]
  23803. 800a6e8: 681b ldr r3, [r3, #0]
  23804. 800a6ea: 681a ldr r2, [r3, #0]
  23805. 800a6ec: 687b ldr r3, [r7, #4]
  23806. 800a6ee: 681b ldr r3, [r3, #0]
  23807. 800a6f0: f022 021c bic.w r2, r2, #28
  23808. 800a6f4: 601a str r2, [r3, #0]
  23809. 800a6f6: e007 b.n 800a708 <HAL_DMA_IRQHandler+0xdcc>
  23810. 800a6f8: 687b ldr r3, [r7, #4]
  23811. 800a6fa: 681b ldr r3, [r3, #0]
  23812. 800a6fc: 681a ldr r2, [r3, #0]
  23813. 800a6fe: 687b ldr r3, [r7, #4]
  23814. 800a700: 681b ldr r3, [r3, #0]
  23815. 800a702: f022 020e bic.w r2, r2, #14
  23816. 800a706: 601a str r2, [r3, #0]
  23817. /* Clear all flags */
  23818. regs_bdma->IFCR = (BDMA_ISR_GIF0) << (hdma->StreamIndex & 0x1FU);
  23819. 800a708: 687b ldr r3, [r7, #4]
  23820. 800a70a: 6ddb ldr r3, [r3, #92] @ 0x5c
  23821. 800a70c: f003 031f and.w r3, r3, #31
  23822. 800a710: 2201 movs r2, #1
  23823. 800a712: 409a lsls r2, r3
  23824. 800a714: 69fb ldr r3, [r7, #28]
  23825. 800a716: 605a str r2, [r3, #4]
  23826. /* Update error code */
  23827. hdma->ErrorCode = HAL_DMA_ERROR_TE;
  23828. 800a718: 687b ldr r3, [r7, #4]
  23829. 800a71a: 2201 movs r2, #1
  23830. 800a71c: 655a str r2, [r3, #84] @ 0x54
  23831. /* Change the DMA state */
  23832. hdma->State = HAL_DMA_STATE_READY;
  23833. 800a71e: 687b ldr r3, [r7, #4]
  23834. 800a720: 2201 movs r2, #1
  23835. 800a722: f883 2035 strb.w r2, [r3, #53] @ 0x35
  23836. /* Process Unlocked */
  23837. __HAL_UNLOCK(hdma);
  23838. 800a726: 687b ldr r3, [r7, #4]
  23839. 800a728: 2200 movs r2, #0
  23840. 800a72a: f883 2034 strb.w r2, [r3, #52] @ 0x34
  23841. if (hdma->XferErrorCallback != NULL)
  23842. 800a72e: 687b ldr r3, [r7, #4]
  23843. 800a730: 6cdb ldr r3, [r3, #76] @ 0x4c
  23844. 800a732: 2b00 cmp r3, #0
  23845. 800a734: d009 beq.n 800a74a <HAL_DMA_IRQHandler+0xe0e>
  23846. {
  23847. /* Transfer error callback */
  23848. hdma->XferErrorCallback(hdma);
  23849. 800a736: 687b ldr r3, [r7, #4]
  23850. 800a738: 6cdb ldr r3, [r3, #76] @ 0x4c
  23851. 800a73a: 6878 ldr r0, [r7, #4]
  23852. 800a73c: 4798 blx r3
  23853. 800a73e: e004 b.n 800a74a <HAL_DMA_IRQHandler+0xe0e>
  23854. return;
  23855. 800a740: bf00 nop
  23856. 800a742: e002 b.n 800a74a <HAL_DMA_IRQHandler+0xe0e>
  23857. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  23858. 800a744: bf00 nop
  23859. 800a746: e000 b.n 800a74a <HAL_DMA_IRQHandler+0xe0e>
  23860. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  23861. 800a748: bf00 nop
  23862. }
  23863. else
  23864. {
  23865. /* Nothing To Do */
  23866. }
  23867. }
  23868. 800a74a: 3728 adds r7, #40 @ 0x28
  23869. 800a74c: 46bd mov sp, r7
  23870. 800a74e: bd80 pop {r7, pc}
  23871. 800a750: 40020010 .word 0x40020010
  23872. 800a754: 40020028 .word 0x40020028
  23873. 800a758: 40020040 .word 0x40020040
  23874. 800a75c: 40020058 .word 0x40020058
  23875. 800a760: 40020070 .word 0x40020070
  23876. 800a764: 40020088 .word 0x40020088
  23877. 800a768: 400200a0 .word 0x400200a0
  23878. 800a76c: 400200b8 .word 0x400200b8
  23879. 800a770: 40020410 .word 0x40020410
  23880. 800a774: 40020428 .word 0x40020428
  23881. 800a778: 40020440 .word 0x40020440
  23882. 800a77c: 40020458 .word 0x40020458
  23883. 800a780: 40020470 .word 0x40020470
  23884. 800a784: 40020488 .word 0x40020488
  23885. 800a788: 400204a0 .word 0x400204a0
  23886. 800a78c: 400204b8 .word 0x400204b8
  23887. 0800a790 <DMA_SetConfig>:
  23888. * @param DstAddress: The destination memory Buffer address
  23889. * @param DataLength: The length of data to be transferred from source to destination
  23890. * @retval None
  23891. */
  23892. static void DMA_SetConfig(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
  23893. {
  23894. 800a790: b480 push {r7}
  23895. 800a792: b087 sub sp, #28
  23896. 800a794: af00 add r7, sp, #0
  23897. 800a796: 60f8 str r0, [r7, #12]
  23898. 800a798: 60b9 str r1, [r7, #8]
  23899. 800a79a: 607a str r2, [r7, #4]
  23900. 800a79c: 603b str r3, [r7, #0]
  23901. /* calculate DMA base and stream number */
  23902. DMA_Base_Registers *regs_dma = (DMA_Base_Registers *)hdma->StreamBaseAddress;
  23903. 800a79e: 68fb ldr r3, [r7, #12]
  23904. 800a7a0: 6d9b ldr r3, [r3, #88] @ 0x58
  23905. 800a7a2: 617b str r3, [r7, #20]
  23906. BDMA_Base_Registers *regs_bdma = (BDMA_Base_Registers *)hdma->StreamBaseAddress;
  23907. 800a7a4: 68fb ldr r3, [r7, #12]
  23908. 800a7a6: 6d9b ldr r3, [r3, #88] @ 0x58
  23909. 800a7a8: 613b str r3, [r7, #16]
  23910. if(IS_DMA_DMAMUX_ALL_INSTANCE(hdma->Instance) != 0U) /* No DMAMUX available for BDMA1 */
  23911. 800a7aa: 68fb ldr r3, [r7, #12]
  23912. 800a7ac: 681b ldr r3, [r3, #0]
  23913. 800a7ae: 4a7f ldr r2, [pc, #508] @ (800a9ac <DMA_SetConfig+0x21c>)
  23914. 800a7b0: 4293 cmp r3, r2
  23915. 800a7b2: d072 beq.n 800a89a <DMA_SetConfig+0x10a>
  23916. 800a7b4: 68fb ldr r3, [r7, #12]
  23917. 800a7b6: 681b ldr r3, [r3, #0]
  23918. 800a7b8: 4a7d ldr r2, [pc, #500] @ (800a9b0 <DMA_SetConfig+0x220>)
  23919. 800a7ba: 4293 cmp r3, r2
  23920. 800a7bc: d06d beq.n 800a89a <DMA_SetConfig+0x10a>
  23921. 800a7be: 68fb ldr r3, [r7, #12]
  23922. 800a7c0: 681b ldr r3, [r3, #0]
  23923. 800a7c2: 4a7c ldr r2, [pc, #496] @ (800a9b4 <DMA_SetConfig+0x224>)
  23924. 800a7c4: 4293 cmp r3, r2
  23925. 800a7c6: d068 beq.n 800a89a <DMA_SetConfig+0x10a>
  23926. 800a7c8: 68fb ldr r3, [r7, #12]
  23927. 800a7ca: 681b ldr r3, [r3, #0]
  23928. 800a7cc: 4a7a ldr r2, [pc, #488] @ (800a9b8 <DMA_SetConfig+0x228>)
  23929. 800a7ce: 4293 cmp r3, r2
  23930. 800a7d0: d063 beq.n 800a89a <DMA_SetConfig+0x10a>
  23931. 800a7d2: 68fb ldr r3, [r7, #12]
  23932. 800a7d4: 681b ldr r3, [r3, #0]
  23933. 800a7d6: 4a79 ldr r2, [pc, #484] @ (800a9bc <DMA_SetConfig+0x22c>)
  23934. 800a7d8: 4293 cmp r3, r2
  23935. 800a7da: d05e beq.n 800a89a <DMA_SetConfig+0x10a>
  23936. 800a7dc: 68fb ldr r3, [r7, #12]
  23937. 800a7de: 681b ldr r3, [r3, #0]
  23938. 800a7e0: 4a77 ldr r2, [pc, #476] @ (800a9c0 <DMA_SetConfig+0x230>)
  23939. 800a7e2: 4293 cmp r3, r2
  23940. 800a7e4: d059 beq.n 800a89a <DMA_SetConfig+0x10a>
  23941. 800a7e6: 68fb ldr r3, [r7, #12]
  23942. 800a7e8: 681b ldr r3, [r3, #0]
  23943. 800a7ea: 4a76 ldr r2, [pc, #472] @ (800a9c4 <DMA_SetConfig+0x234>)
  23944. 800a7ec: 4293 cmp r3, r2
  23945. 800a7ee: d054 beq.n 800a89a <DMA_SetConfig+0x10a>
  23946. 800a7f0: 68fb ldr r3, [r7, #12]
  23947. 800a7f2: 681b ldr r3, [r3, #0]
  23948. 800a7f4: 4a74 ldr r2, [pc, #464] @ (800a9c8 <DMA_SetConfig+0x238>)
  23949. 800a7f6: 4293 cmp r3, r2
  23950. 800a7f8: d04f beq.n 800a89a <DMA_SetConfig+0x10a>
  23951. 800a7fa: 68fb ldr r3, [r7, #12]
  23952. 800a7fc: 681b ldr r3, [r3, #0]
  23953. 800a7fe: 4a73 ldr r2, [pc, #460] @ (800a9cc <DMA_SetConfig+0x23c>)
  23954. 800a800: 4293 cmp r3, r2
  23955. 800a802: d04a beq.n 800a89a <DMA_SetConfig+0x10a>
  23956. 800a804: 68fb ldr r3, [r7, #12]
  23957. 800a806: 681b ldr r3, [r3, #0]
  23958. 800a808: 4a71 ldr r2, [pc, #452] @ (800a9d0 <DMA_SetConfig+0x240>)
  23959. 800a80a: 4293 cmp r3, r2
  23960. 800a80c: d045 beq.n 800a89a <DMA_SetConfig+0x10a>
  23961. 800a80e: 68fb ldr r3, [r7, #12]
  23962. 800a810: 681b ldr r3, [r3, #0]
  23963. 800a812: 4a70 ldr r2, [pc, #448] @ (800a9d4 <DMA_SetConfig+0x244>)
  23964. 800a814: 4293 cmp r3, r2
  23965. 800a816: d040 beq.n 800a89a <DMA_SetConfig+0x10a>
  23966. 800a818: 68fb ldr r3, [r7, #12]
  23967. 800a81a: 681b ldr r3, [r3, #0]
  23968. 800a81c: 4a6e ldr r2, [pc, #440] @ (800a9d8 <DMA_SetConfig+0x248>)
  23969. 800a81e: 4293 cmp r3, r2
  23970. 800a820: d03b beq.n 800a89a <DMA_SetConfig+0x10a>
  23971. 800a822: 68fb ldr r3, [r7, #12]
  23972. 800a824: 681b ldr r3, [r3, #0]
  23973. 800a826: 4a6d ldr r2, [pc, #436] @ (800a9dc <DMA_SetConfig+0x24c>)
  23974. 800a828: 4293 cmp r3, r2
  23975. 800a82a: d036 beq.n 800a89a <DMA_SetConfig+0x10a>
  23976. 800a82c: 68fb ldr r3, [r7, #12]
  23977. 800a82e: 681b ldr r3, [r3, #0]
  23978. 800a830: 4a6b ldr r2, [pc, #428] @ (800a9e0 <DMA_SetConfig+0x250>)
  23979. 800a832: 4293 cmp r3, r2
  23980. 800a834: d031 beq.n 800a89a <DMA_SetConfig+0x10a>
  23981. 800a836: 68fb ldr r3, [r7, #12]
  23982. 800a838: 681b ldr r3, [r3, #0]
  23983. 800a83a: 4a6a ldr r2, [pc, #424] @ (800a9e4 <DMA_SetConfig+0x254>)
  23984. 800a83c: 4293 cmp r3, r2
  23985. 800a83e: d02c beq.n 800a89a <DMA_SetConfig+0x10a>
  23986. 800a840: 68fb ldr r3, [r7, #12]
  23987. 800a842: 681b ldr r3, [r3, #0]
  23988. 800a844: 4a68 ldr r2, [pc, #416] @ (800a9e8 <DMA_SetConfig+0x258>)
  23989. 800a846: 4293 cmp r3, r2
  23990. 800a848: d027 beq.n 800a89a <DMA_SetConfig+0x10a>
  23991. 800a84a: 68fb ldr r3, [r7, #12]
  23992. 800a84c: 681b ldr r3, [r3, #0]
  23993. 800a84e: 4a67 ldr r2, [pc, #412] @ (800a9ec <DMA_SetConfig+0x25c>)
  23994. 800a850: 4293 cmp r3, r2
  23995. 800a852: d022 beq.n 800a89a <DMA_SetConfig+0x10a>
  23996. 800a854: 68fb ldr r3, [r7, #12]
  23997. 800a856: 681b ldr r3, [r3, #0]
  23998. 800a858: 4a65 ldr r2, [pc, #404] @ (800a9f0 <DMA_SetConfig+0x260>)
  23999. 800a85a: 4293 cmp r3, r2
  24000. 800a85c: d01d beq.n 800a89a <DMA_SetConfig+0x10a>
  24001. 800a85e: 68fb ldr r3, [r7, #12]
  24002. 800a860: 681b ldr r3, [r3, #0]
  24003. 800a862: 4a64 ldr r2, [pc, #400] @ (800a9f4 <DMA_SetConfig+0x264>)
  24004. 800a864: 4293 cmp r3, r2
  24005. 800a866: d018 beq.n 800a89a <DMA_SetConfig+0x10a>
  24006. 800a868: 68fb ldr r3, [r7, #12]
  24007. 800a86a: 681b ldr r3, [r3, #0]
  24008. 800a86c: 4a62 ldr r2, [pc, #392] @ (800a9f8 <DMA_SetConfig+0x268>)
  24009. 800a86e: 4293 cmp r3, r2
  24010. 800a870: d013 beq.n 800a89a <DMA_SetConfig+0x10a>
  24011. 800a872: 68fb ldr r3, [r7, #12]
  24012. 800a874: 681b ldr r3, [r3, #0]
  24013. 800a876: 4a61 ldr r2, [pc, #388] @ (800a9fc <DMA_SetConfig+0x26c>)
  24014. 800a878: 4293 cmp r3, r2
  24015. 800a87a: d00e beq.n 800a89a <DMA_SetConfig+0x10a>
  24016. 800a87c: 68fb ldr r3, [r7, #12]
  24017. 800a87e: 681b ldr r3, [r3, #0]
  24018. 800a880: 4a5f ldr r2, [pc, #380] @ (800aa00 <DMA_SetConfig+0x270>)
  24019. 800a882: 4293 cmp r3, r2
  24020. 800a884: d009 beq.n 800a89a <DMA_SetConfig+0x10a>
  24021. 800a886: 68fb ldr r3, [r7, #12]
  24022. 800a888: 681b ldr r3, [r3, #0]
  24023. 800a88a: 4a5e ldr r2, [pc, #376] @ (800aa04 <DMA_SetConfig+0x274>)
  24024. 800a88c: 4293 cmp r3, r2
  24025. 800a88e: d004 beq.n 800a89a <DMA_SetConfig+0x10a>
  24026. 800a890: 68fb ldr r3, [r7, #12]
  24027. 800a892: 681b ldr r3, [r3, #0]
  24028. 800a894: 4a5c ldr r2, [pc, #368] @ (800aa08 <DMA_SetConfig+0x278>)
  24029. 800a896: 4293 cmp r3, r2
  24030. 800a898: d101 bne.n 800a89e <DMA_SetConfig+0x10e>
  24031. 800a89a: 2301 movs r3, #1
  24032. 800a89c: e000 b.n 800a8a0 <DMA_SetConfig+0x110>
  24033. 800a89e: 2300 movs r3, #0
  24034. 800a8a0: 2b00 cmp r3, #0
  24035. 800a8a2: d00d beq.n 800a8c0 <DMA_SetConfig+0x130>
  24036. {
  24037. /* Clear the DMAMUX synchro overrun flag */
  24038. hdma->DMAmuxChannelStatus->CFR = hdma->DMAmuxChannelStatusMask;
  24039. 800a8a4: 68fb ldr r3, [r7, #12]
  24040. 800a8a6: 6e5b ldr r3, [r3, #100] @ 0x64
  24041. 800a8a8: 68fa ldr r2, [r7, #12]
  24042. 800a8aa: 6e92 ldr r2, [r2, #104] @ 0x68
  24043. 800a8ac: 605a str r2, [r3, #4]
  24044. if(hdma->DMAmuxRequestGen != 0U)
  24045. 800a8ae: 68fb ldr r3, [r7, #12]
  24046. 800a8b0: 6edb ldr r3, [r3, #108] @ 0x6c
  24047. 800a8b2: 2b00 cmp r3, #0
  24048. 800a8b4: d004 beq.n 800a8c0 <DMA_SetConfig+0x130>
  24049. {
  24050. /* Clear the DMAMUX request generator overrun flag */
  24051. hdma->DMAmuxRequestGenStatus->RGCFR = hdma->DMAmuxRequestGenStatusMask;
  24052. 800a8b6: 68fb ldr r3, [r7, #12]
  24053. 800a8b8: 6f1b ldr r3, [r3, #112] @ 0x70
  24054. 800a8ba: 68fa ldr r2, [r7, #12]
  24055. 800a8bc: 6f52 ldr r2, [r2, #116] @ 0x74
  24056. 800a8be: 605a str r2, [r3, #4]
  24057. }
  24058. }
  24059. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  24060. 800a8c0: 68fb ldr r3, [r7, #12]
  24061. 800a8c2: 681b ldr r3, [r3, #0]
  24062. 800a8c4: 4a39 ldr r2, [pc, #228] @ (800a9ac <DMA_SetConfig+0x21c>)
  24063. 800a8c6: 4293 cmp r3, r2
  24064. 800a8c8: d04a beq.n 800a960 <DMA_SetConfig+0x1d0>
  24065. 800a8ca: 68fb ldr r3, [r7, #12]
  24066. 800a8cc: 681b ldr r3, [r3, #0]
  24067. 800a8ce: 4a38 ldr r2, [pc, #224] @ (800a9b0 <DMA_SetConfig+0x220>)
  24068. 800a8d0: 4293 cmp r3, r2
  24069. 800a8d2: d045 beq.n 800a960 <DMA_SetConfig+0x1d0>
  24070. 800a8d4: 68fb ldr r3, [r7, #12]
  24071. 800a8d6: 681b ldr r3, [r3, #0]
  24072. 800a8d8: 4a36 ldr r2, [pc, #216] @ (800a9b4 <DMA_SetConfig+0x224>)
  24073. 800a8da: 4293 cmp r3, r2
  24074. 800a8dc: d040 beq.n 800a960 <DMA_SetConfig+0x1d0>
  24075. 800a8de: 68fb ldr r3, [r7, #12]
  24076. 800a8e0: 681b ldr r3, [r3, #0]
  24077. 800a8e2: 4a35 ldr r2, [pc, #212] @ (800a9b8 <DMA_SetConfig+0x228>)
  24078. 800a8e4: 4293 cmp r3, r2
  24079. 800a8e6: d03b beq.n 800a960 <DMA_SetConfig+0x1d0>
  24080. 800a8e8: 68fb ldr r3, [r7, #12]
  24081. 800a8ea: 681b ldr r3, [r3, #0]
  24082. 800a8ec: 4a33 ldr r2, [pc, #204] @ (800a9bc <DMA_SetConfig+0x22c>)
  24083. 800a8ee: 4293 cmp r3, r2
  24084. 800a8f0: d036 beq.n 800a960 <DMA_SetConfig+0x1d0>
  24085. 800a8f2: 68fb ldr r3, [r7, #12]
  24086. 800a8f4: 681b ldr r3, [r3, #0]
  24087. 800a8f6: 4a32 ldr r2, [pc, #200] @ (800a9c0 <DMA_SetConfig+0x230>)
  24088. 800a8f8: 4293 cmp r3, r2
  24089. 800a8fa: d031 beq.n 800a960 <DMA_SetConfig+0x1d0>
  24090. 800a8fc: 68fb ldr r3, [r7, #12]
  24091. 800a8fe: 681b ldr r3, [r3, #0]
  24092. 800a900: 4a30 ldr r2, [pc, #192] @ (800a9c4 <DMA_SetConfig+0x234>)
  24093. 800a902: 4293 cmp r3, r2
  24094. 800a904: d02c beq.n 800a960 <DMA_SetConfig+0x1d0>
  24095. 800a906: 68fb ldr r3, [r7, #12]
  24096. 800a908: 681b ldr r3, [r3, #0]
  24097. 800a90a: 4a2f ldr r2, [pc, #188] @ (800a9c8 <DMA_SetConfig+0x238>)
  24098. 800a90c: 4293 cmp r3, r2
  24099. 800a90e: d027 beq.n 800a960 <DMA_SetConfig+0x1d0>
  24100. 800a910: 68fb ldr r3, [r7, #12]
  24101. 800a912: 681b ldr r3, [r3, #0]
  24102. 800a914: 4a2d ldr r2, [pc, #180] @ (800a9cc <DMA_SetConfig+0x23c>)
  24103. 800a916: 4293 cmp r3, r2
  24104. 800a918: d022 beq.n 800a960 <DMA_SetConfig+0x1d0>
  24105. 800a91a: 68fb ldr r3, [r7, #12]
  24106. 800a91c: 681b ldr r3, [r3, #0]
  24107. 800a91e: 4a2c ldr r2, [pc, #176] @ (800a9d0 <DMA_SetConfig+0x240>)
  24108. 800a920: 4293 cmp r3, r2
  24109. 800a922: d01d beq.n 800a960 <DMA_SetConfig+0x1d0>
  24110. 800a924: 68fb ldr r3, [r7, #12]
  24111. 800a926: 681b ldr r3, [r3, #0]
  24112. 800a928: 4a2a ldr r2, [pc, #168] @ (800a9d4 <DMA_SetConfig+0x244>)
  24113. 800a92a: 4293 cmp r3, r2
  24114. 800a92c: d018 beq.n 800a960 <DMA_SetConfig+0x1d0>
  24115. 800a92e: 68fb ldr r3, [r7, #12]
  24116. 800a930: 681b ldr r3, [r3, #0]
  24117. 800a932: 4a29 ldr r2, [pc, #164] @ (800a9d8 <DMA_SetConfig+0x248>)
  24118. 800a934: 4293 cmp r3, r2
  24119. 800a936: d013 beq.n 800a960 <DMA_SetConfig+0x1d0>
  24120. 800a938: 68fb ldr r3, [r7, #12]
  24121. 800a93a: 681b ldr r3, [r3, #0]
  24122. 800a93c: 4a27 ldr r2, [pc, #156] @ (800a9dc <DMA_SetConfig+0x24c>)
  24123. 800a93e: 4293 cmp r3, r2
  24124. 800a940: d00e beq.n 800a960 <DMA_SetConfig+0x1d0>
  24125. 800a942: 68fb ldr r3, [r7, #12]
  24126. 800a944: 681b ldr r3, [r3, #0]
  24127. 800a946: 4a26 ldr r2, [pc, #152] @ (800a9e0 <DMA_SetConfig+0x250>)
  24128. 800a948: 4293 cmp r3, r2
  24129. 800a94a: d009 beq.n 800a960 <DMA_SetConfig+0x1d0>
  24130. 800a94c: 68fb ldr r3, [r7, #12]
  24131. 800a94e: 681b ldr r3, [r3, #0]
  24132. 800a950: 4a24 ldr r2, [pc, #144] @ (800a9e4 <DMA_SetConfig+0x254>)
  24133. 800a952: 4293 cmp r3, r2
  24134. 800a954: d004 beq.n 800a960 <DMA_SetConfig+0x1d0>
  24135. 800a956: 68fb ldr r3, [r7, #12]
  24136. 800a958: 681b ldr r3, [r3, #0]
  24137. 800a95a: 4a23 ldr r2, [pc, #140] @ (800a9e8 <DMA_SetConfig+0x258>)
  24138. 800a95c: 4293 cmp r3, r2
  24139. 800a95e: d101 bne.n 800a964 <DMA_SetConfig+0x1d4>
  24140. 800a960: 2301 movs r3, #1
  24141. 800a962: e000 b.n 800a966 <DMA_SetConfig+0x1d6>
  24142. 800a964: 2300 movs r3, #0
  24143. 800a966: 2b00 cmp r3, #0
  24144. 800a968: d059 beq.n 800aa1e <DMA_SetConfig+0x28e>
  24145. {
  24146. /* Clear all interrupt flags at correct offset within the register */
  24147. regs_dma->IFCR = 0x3FUL << (hdma->StreamIndex & 0x1FU);
  24148. 800a96a: 68fb ldr r3, [r7, #12]
  24149. 800a96c: 6ddb ldr r3, [r3, #92] @ 0x5c
  24150. 800a96e: f003 031f and.w r3, r3, #31
  24151. 800a972: 223f movs r2, #63 @ 0x3f
  24152. 800a974: 409a lsls r2, r3
  24153. 800a976: 697b ldr r3, [r7, #20]
  24154. 800a978: 609a str r2, [r3, #8]
  24155. /* Clear DBM bit */
  24156. ((DMA_Stream_TypeDef *)hdma->Instance)->CR &= (uint32_t)(~DMA_SxCR_DBM);
  24157. 800a97a: 68fb ldr r3, [r7, #12]
  24158. 800a97c: 681b ldr r3, [r3, #0]
  24159. 800a97e: 681a ldr r2, [r3, #0]
  24160. 800a980: 68fb ldr r3, [r7, #12]
  24161. 800a982: 681b ldr r3, [r3, #0]
  24162. 800a984: f422 2280 bic.w r2, r2, #262144 @ 0x40000
  24163. 800a988: 601a str r2, [r3, #0]
  24164. /* Configure DMA Stream data length */
  24165. ((DMA_Stream_TypeDef *)hdma->Instance)->NDTR = DataLength;
  24166. 800a98a: 68fb ldr r3, [r7, #12]
  24167. 800a98c: 681b ldr r3, [r3, #0]
  24168. 800a98e: 683a ldr r2, [r7, #0]
  24169. 800a990: 605a str r2, [r3, #4]
  24170. /* Peripheral to Memory */
  24171. if((hdma->Init.Direction) == DMA_MEMORY_TO_PERIPH)
  24172. 800a992: 68fb ldr r3, [r7, #12]
  24173. 800a994: 689b ldr r3, [r3, #8]
  24174. 800a996: 2b40 cmp r3, #64 @ 0x40
  24175. 800a998: d138 bne.n 800aa0c <DMA_SetConfig+0x27c>
  24176. {
  24177. /* Configure DMA Stream destination address */
  24178. ((DMA_Stream_TypeDef *)hdma->Instance)->PAR = DstAddress;
  24179. 800a99a: 68fb ldr r3, [r7, #12]
  24180. 800a99c: 681b ldr r3, [r3, #0]
  24181. 800a99e: 687a ldr r2, [r7, #4]
  24182. 800a9a0: 609a str r2, [r3, #8]
  24183. /* Configure DMA Stream source address */
  24184. ((DMA_Stream_TypeDef *)hdma->Instance)->M0AR = SrcAddress;
  24185. 800a9a2: 68fb ldr r3, [r7, #12]
  24186. 800a9a4: 681b ldr r3, [r3, #0]
  24187. 800a9a6: 68ba ldr r2, [r7, #8]
  24188. 800a9a8: 60da str r2, [r3, #12]
  24189. }
  24190. else
  24191. {
  24192. /* Nothing To Do */
  24193. }
  24194. }
  24195. 800a9aa: e086 b.n 800aaba <DMA_SetConfig+0x32a>
  24196. 800a9ac: 40020010 .word 0x40020010
  24197. 800a9b0: 40020028 .word 0x40020028
  24198. 800a9b4: 40020040 .word 0x40020040
  24199. 800a9b8: 40020058 .word 0x40020058
  24200. 800a9bc: 40020070 .word 0x40020070
  24201. 800a9c0: 40020088 .word 0x40020088
  24202. 800a9c4: 400200a0 .word 0x400200a0
  24203. 800a9c8: 400200b8 .word 0x400200b8
  24204. 800a9cc: 40020410 .word 0x40020410
  24205. 800a9d0: 40020428 .word 0x40020428
  24206. 800a9d4: 40020440 .word 0x40020440
  24207. 800a9d8: 40020458 .word 0x40020458
  24208. 800a9dc: 40020470 .word 0x40020470
  24209. 800a9e0: 40020488 .word 0x40020488
  24210. 800a9e4: 400204a0 .word 0x400204a0
  24211. 800a9e8: 400204b8 .word 0x400204b8
  24212. 800a9ec: 58025408 .word 0x58025408
  24213. 800a9f0: 5802541c .word 0x5802541c
  24214. 800a9f4: 58025430 .word 0x58025430
  24215. 800a9f8: 58025444 .word 0x58025444
  24216. 800a9fc: 58025458 .word 0x58025458
  24217. 800aa00: 5802546c .word 0x5802546c
  24218. 800aa04: 58025480 .word 0x58025480
  24219. 800aa08: 58025494 .word 0x58025494
  24220. ((DMA_Stream_TypeDef *)hdma->Instance)->PAR = SrcAddress;
  24221. 800aa0c: 68fb ldr r3, [r7, #12]
  24222. 800aa0e: 681b ldr r3, [r3, #0]
  24223. 800aa10: 68ba ldr r2, [r7, #8]
  24224. 800aa12: 609a str r2, [r3, #8]
  24225. ((DMA_Stream_TypeDef *)hdma->Instance)->M0AR = DstAddress;
  24226. 800aa14: 68fb ldr r3, [r7, #12]
  24227. 800aa16: 681b ldr r3, [r3, #0]
  24228. 800aa18: 687a ldr r2, [r7, #4]
  24229. 800aa1a: 60da str r2, [r3, #12]
  24230. }
  24231. 800aa1c: e04d b.n 800aaba <DMA_SetConfig+0x32a>
  24232. else if(IS_BDMA_CHANNEL_INSTANCE(hdma->Instance) != 0U) /* BDMA instance(s) */
  24233. 800aa1e: 68fb ldr r3, [r7, #12]
  24234. 800aa20: 681b ldr r3, [r3, #0]
  24235. 800aa22: 4a29 ldr r2, [pc, #164] @ (800aac8 <DMA_SetConfig+0x338>)
  24236. 800aa24: 4293 cmp r3, r2
  24237. 800aa26: d022 beq.n 800aa6e <DMA_SetConfig+0x2de>
  24238. 800aa28: 68fb ldr r3, [r7, #12]
  24239. 800aa2a: 681b ldr r3, [r3, #0]
  24240. 800aa2c: 4a27 ldr r2, [pc, #156] @ (800aacc <DMA_SetConfig+0x33c>)
  24241. 800aa2e: 4293 cmp r3, r2
  24242. 800aa30: d01d beq.n 800aa6e <DMA_SetConfig+0x2de>
  24243. 800aa32: 68fb ldr r3, [r7, #12]
  24244. 800aa34: 681b ldr r3, [r3, #0]
  24245. 800aa36: 4a26 ldr r2, [pc, #152] @ (800aad0 <DMA_SetConfig+0x340>)
  24246. 800aa38: 4293 cmp r3, r2
  24247. 800aa3a: d018 beq.n 800aa6e <DMA_SetConfig+0x2de>
  24248. 800aa3c: 68fb ldr r3, [r7, #12]
  24249. 800aa3e: 681b ldr r3, [r3, #0]
  24250. 800aa40: 4a24 ldr r2, [pc, #144] @ (800aad4 <DMA_SetConfig+0x344>)
  24251. 800aa42: 4293 cmp r3, r2
  24252. 800aa44: d013 beq.n 800aa6e <DMA_SetConfig+0x2de>
  24253. 800aa46: 68fb ldr r3, [r7, #12]
  24254. 800aa48: 681b ldr r3, [r3, #0]
  24255. 800aa4a: 4a23 ldr r2, [pc, #140] @ (800aad8 <DMA_SetConfig+0x348>)
  24256. 800aa4c: 4293 cmp r3, r2
  24257. 800aa4e: d00e beq.n 800aa6e <DMA_SetConfig+0x2de>
  24258. 800aa50: 68fb ldr r3, [r7, #12]
  24259. 800aa52: 681b ldr r3, [r3, #0]
  24260. 800aa54: 4a21 ldr r2, [pc, #132] @ (800aadc <DMA_SetConfig+0x34c>)
  24261. 800aa56: 4293 cmp r3, r2
  24262. 800aa58: d009 beq.n 800aa6e <DMA_SetConfig+0x2de>
  24263. 800aa5a: 68fb ldr r3, [r7, #12]
  24264. 800aa5c: 681b ldr r3, [r3, #0]
  24265. 800aa5e: 4a20 ldr r2, [pc, #128] @ (800aae0 <DMA_SetConfig+0x350>)
  24266. 800aa60: 4293 cmp r3, r2
  24267. 800aa62: d004 beq.n 800aa6e <DMA_SetConfig+0x2de>
  24268. 800aa64: 68fb ldr r3, [r7, #12]
  24269. 800aa66: 681b ldr r3, [r3, #0]
  24270. 800aa68: 4a1e ldr r2, [pc, #120] @ (800aae4 <DMA_SetConfig+0x354>)
  24271. 800aa6a: 4293 cmp r3, r2
  24272. 800aa6c: d101 bne.n 800aa72 <DMA_SetConfig+0x2e2>
  24273. 800aa6e: 2301 movs r3, #1
  24274. 800aa70: e000 b.n 800aa74 <DMA_SetConfig+0x2e4>
  24275. 800aa72: 2300 movs r3, #0
  24276. 800aa74: 2b00 cmp r3, #0
  24277. 800aa76: d020 beq.n 800aaba <DMA_SetConfig+0x32a>
  24278. regs_bdma->IFCR = (BDMA_ISR_GIF0) << (hdma->StreamIndex & 0x1FU);
  24279. 800aa78: 68fb ldr r3, [r7, #12]
  24280. 800aa7a: 6ddb ldr r3, [r3, #92] @ 0x5c
  24281. 800aa7c: f003 031f and.w r3, r3, #31
  24282. 800aa80: 2201 movs r2, #1
  24283. 800aa82: 409a lsls r2, r3
  24284. 800aa84: 693b ldr r3, [r7, #16]
  24285. 800aa86: 605a str r2, [r3, #4]
  24286. ((BDMA_Channel_TypeDef *)hdma->Instance)->CNDTR = DataLength;
  24287. 800aa88: 68fb ldr r3, [r7, #12]
  24288. 800aa8a: 681b ldr r3, [r3, #0]
  24289. 800aa8c: 683a ldr r2, [r7, #0]
  24290. 800aa8e: 605a str r2, [r3, #4]
  24291. if((hdma->Init.Direction) == DMA_MEMORY_TO_PERIPH)
  24292. 800aa90: 68fb ldr r3, [r7, #12]
  24293. 800aa92: 689b ldr r3, [r3, #8]
  24294. 800aa94: 2b40 cmp r3, #64 @ 0x40
  24295. 800aa96: d108 bne.n 800aaaa <DMA_SetConfig+0x31a>
  24296. ((BDMA_Channel_TypeDef *)hdma->Instance)->CPAR = DstAddress;
  24297. 800aa98: 68fb ldr r3, [r7, #12]
  24298. 800aa9a: 681b ldr r3, [r3, #0]
  24299. 800aa9c: 687a ldr r2, [r7, #4]
  24300. 800aa9e: 609a str r2, [r3, #8]
  24301. ((BDMA_Channel_TypeDef *)hdma->Instance)->CM0AR = SrcAddress;
  24302. 800aaa0: 68fb ldr r3, [r7, #12]
  24303. 800aaa2: 681b ldr r3, [r3, #0]
  24304. 800aaa4: 68ba ldr r2, [r7, #8]
  24305. 800aaa6: 60da str r2, [r3, #12]
  24306. }
  24307. 800aaa8: e007 b.n 800aaba <DMA_SetConfig+0x32a>
  24308. ((BDMA_Channel_TypeDef *)hdma->Instance)->CPAR = SrcAddress;
  24309. 800aaaa: 68fb ldr r3, [r7, #12]
  24310. 800aaac: 681b ldr r3, [r3, #0]
  24311. 800aaae: 68ba ldr r2, [r7, #8]
  24312. 800aab0: 609a str r2, [r3, #8]
  24313. ((BDMA_Channel_TypeDef *)hdma->Instance)->CM0AR = DstAddress;
  24314. 800aab2: 68fb ldr r3, [r7, #12]
  24315. 800aab4: 681b ldr r3, [r3, #0]
  24316. 800aab6: 687a ldr r2, [r7, #4]
  24317. 800aab8: 60da str r2, [r3, #12]
  24318. }
  24319. 800aaba: bf00 nop
  24320. 800aabc: 371c adds r7, #28
  24321. 800aabe: 46bd mov sp, r7
  24322. 800aac0: f85d 7b04 ldr.w r7, [sp], #4
  24323. 800aac4: 4770 bx lr
  24324. 800aac6: bf00 nop
  24325. 800aac8: 58025408 .word 0x58025408
  24326. 800aacc: 5802541c .word 0x5802541c
  24327. 800aad0: 58025430 .word 0x58025430
  24328. 800aad4: 58025444 .word 0x58025444
  24329. 800aad8: 58025458 .word 0x58025458
  24330. 800aadc: 5802546c .word 0x5802546c
  24331. 800aae0: 58025480 .word 0x58025480
  24332. 800aae4: 58025494 .word 0x58025494
  24333. 0800aae8 <DMA_CalcBaseAndBitshift>:
  24334. * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
  24335. * the configuration information for the specified DMA Stream.
  24336. * @retval Stream base address
  24337. */
  24338. static uint32_t DMA_CalcBaseAndBitshift(DMA_HandleTypeDef *hdma)
  24339. {
  24340. 800aae8: b480 push {r7}
  24341. 800aaea: b085 sub sp, #20
  24342. 800aaec: af00 add r7, sp, #0
  24343. 800aaee: 6078 str r0, [r7, #4]
  24344. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  24345. 800aaf0: 687b ldr r3, [r7, #4]
  24346. 800aaf2: 681b ldr r3, [r3, #0]
  24347. 800aaf4: 4a42 ldr r2, [pc, #264] @ (800ac00 <DMA_CalcBaseAndBitshift+0x118>)
  24348. 800aaf6: 4293 cmp r3, r2
  24349. 800aaf8: d04a beq.n 800ab90 <DMA_CalcBaseAndBitshift+0xa8>
  24350. 800aafa: 687b ldr r3, [r7, #4]
  24351. 800aafc: 681b ldr r3, [r3, #0]
  24352. 800aafe: 4a41 ldr r2, [pc, #260] @ (800ac04 <DMA_CalcBaseAndBitshift+0x11c>)
  24353. 800ab00: 4293 cmp r3, r2
  24354. 800ab02: d045 beq.n 800ab90 <DMA_CalcBaseAndBitshift+0xa8>
  24355. 800ab04: 687b ldr r3, [r7, #4]
  24356. 800ab06: 681b ldr r3, [r3, #0]
  24357. 800ab08: 4a3f ldr r2, [pc, #252] @ (800ac08 <DMA_CalcBaseAndBitshift+0x120>)
  24358. 800ab0a: 4293 cmp r3, r2
  24359. 800ab0c: d040 beq.n 800ab90 <DMA_CalcBaseAndBitshift+0xa8>
  24360. 800ab0e: 687b ldr r3, [r7, #4]
  24361. 800ab10: 681b ldr r3, [r3, #0]
  24362. 800ab12: 4a3e ldr r2, [pc, #248] @ (800ac0c <DMA_CalcBaseAndBitshift+0x124>)
  24363. 800ab14: 4293 cmp r3, r2
  24364. 800ab16: d03b beq.n 800ab90 <DMA_CalcBaseAndBitshift+0xa8>
  24365. 800ab18: 687b ldr r3, [r7, #4]
  24366. 800ab1a: 681b ldr r3, [r3, #0]
  24367. 800ab1c: 4a3c ldr r2, [pc, #240] @ (800ac10 <DMA_CalcBaseAndBitshift+0x128>)
  24368. 800ab1e: 4293 cmp r3, r2
  24369. 800ab20: d036 beq.n 800ab90 <DMA_CalcBaseAndBitshift+0xa8>
  24370. 800ab22: 687b ldr r3, [r7, #4]
  24371. 800ab24: 681b ldr r3, [r3, #0]
  24372. 800ab26: 4a3b ldr r2, [pc, #236] @ (800ac14 <DMA_CalcBaseAndBitshift+0x12c>)
  24373. 800ab28: 4293 cmp r3, r2
  24374. 800ab2a: d031 beq.n 800ab90 <DMA_CalcBaseAndBitshift+0xa8>
  24375. 800ab2c: 687b ldr r3, [r7, #4]
  24376. 800ab2e: 681b ldr r3, [r3, #0]
  24377. 800ab30: 4a39 ldr r2, [pc, #228] @ (800ac18 <DMA_CalcBaseAndBitshift+0x130>)
  24378. 800ab32: 4293 cmp r3, r2
  24379. 800ab34: d02c beq.n 800ab90 <DMA_CalcBaseAndBitshift+0xa8>
  24380. 800ab36: 687b ldr r3, [r7, #4]
  24381. 800ab38: 681b ldr r3, [r3, #0]
  24382. 800ab3a: 4a38 ldr r2, [pc, #224] @ (800ac1c <DMA_CalcBaseAndBitshift+0x134>)
  24383. 800ab3c: 4293 cmp r3, r2
  24384. 800ab3e: d027 beq.n 800ab90 <DMA_CalcBaseAndBitshift+0xa8>
  24385. 800ab40: 687b ldr r3, [r7, #4]
  24386. 800ab42: 681b ldr r3, [r3, #0]
  24387. 800ab44: 4a36 ldr r2, [pc, #216] @ (800ac20 <DMA_CalcBaseAndBitshift+0x138>)
  24388. 800ab46: 4293 cmp r3, r2
  24389. 800ab48: d022 beq.n 800ab90 <DMA_CalcBaseAndBitshift+0xa8>
  24390. 800ab4a: 687b ldr r3, [r7, #4]
  24391. 800ab4c: 681b ldr r3, [r3, #0]
  24392. 800ab4e: 4a35 ldr r2, [pc, #212] @ (800ac24 <DMA_CalcBaseAndBitshift+0x13c>)
  24393. 800ab50: 4293 cmp r3, r2
  24394. 800ab52: d01d beq.n 800ab90 <DMA_CalcBaseAndBitshift+0xa8>
  24395. 800ab54: 687b ldr r3, [r7, #4]
  24396. 800ab56: 681b ldr r3, [r3, #0]
  24397. 800ab58: 4a33 ldr r2, [pc, #204] @ (800ac28 <DMA_CalcBaseAndBitshift+0x140>)
  24398. 800ab5a: 4293 cmp r3, r2
  24399. 800ab5c: d018 beq.n 800ab90 <DMA_CalcBaseAndBitshift+0xa8>
  24400. 800ab5e: 687b ldr r3, [r7, #4]
  24401. 800ab60: 681b ldr r3, [r3, #0]
  24402. 800ab62: 4a32 ldr r2, [pc, #200] @ (800ac2c <DMA_CalcBaseAndBitshift+0x144>)
  24403. 800ab64: 4293 cmp r3, r2
  24404. 800ab66: d013 beq.n 800ab90 <DMA_CalcBaseAndBitshift+0xa8>
  24405. 800ab68: 687b ldr r3, [r7, #4]
  24406. 800ab6a: 681b ldr r3, [r3, #0]
  24407. 800ab6c: 4a30 ldr r2, [pc, #192] @ (800ac30 <DMA_CalcBaseAndBitshift+0x148>)
  24408. 800ab6e: 4293 cmp r3, r2
  24409. 800ab70: d00e beq.n 800ab90 <DMA_CalcBaseAndBitshift+0xa8>
  24410. 800ab72: 687b ldr r3, [r7, #4]
  24411. 800ab74: 681b ldr r3, [r3, #0]
  24412. 800ab76: 4a2f ldr r2, [pc, #188] @ (800ac34 <DMA_CalcBaseAndBitshift+0x14c>)
  24413. 800ab78: 4293 cmp r3, r2
  24414. 800ab7a: d009 beq.n 800ab90 <DMA_CalcBaseAndBitshift+0xa8>
  24415. 800ab7c: 687b ldr r3, [r7, #4]
  24416. 800ab7e: 681b ldr r3, [r3, #0]
  24417. 800ab80: 4a2d ldr r2, [pc, #180] @ (800ac38 <DMA_CalcBaseAndBitshift+0x150>)
  24418. 800ab82: 4293 cmp r3, r2
  24419. 800ab84: d004 beq.n 800ab90 <DMA_CalcBaseAndBitshift+0xa8>
  24420. 800ab86: 687b ldr r3, [r7, #4]
  24421. 800ab88: 681b ldr r3, [r3, #0]
  24422. 800ab8a: 4a2c ldr r2, [pc, #176] @ (800ac3c <DMA_CalcBaseAndBitshift+0x154>)
  24423. 800ab8c: 4293 cmp r3, r2
  24424. 800ab8e: d101 bne.n 800ab94 <DMA_CalcBaseAndBitshift+0xac>
  24425. 800ab90: 2301 movs r3, #1
  24426. 800ab92: e000 b.n 800ab96 <DMA_CalcBaseAndBitshift+0xae>
  24427. 800ab94: 2300 movs r3, #0
  24428. 800ab96: 2b00 cmp r3, #0
  24429. 800ab98: d024 beq.n 800abe4 <DMA_CalcBaseAndBitshift+0xfc>
  24430. {
  24431. uint32_t stream_number = (((uint32_t)((uint32_t*)hdma->Instance) & 0xFFU) - 16U) / 24U;
  24432. 800ab9a: 687b ldr r3, [r7, #4]
  24433. 800ab9c: 681b ldr r3, [r3, #0]
  24434. 800ab9e: b2db uxtb r3, r3
  24435. 800aba0: 3b10 subs r3, #16
  24436. 800aba2: 4a27 ldr r2, [pc, #156] @ (800ac40 <DMA_CalcBaseAndBitshift+0x158>)
  24437. 800aba4: fba2 2303 umull r2, r3, r2, r3
  24438. 800aba8: 091b lsrs r3, r3, #4
  24439. 800abaa: 60fb str r3, [r7, #12]
  24440. /* lookup table for necessary bitshift of flags within status registers */
  24441. static const uint8_t flagBitshiftOffset[8U] = {0U, 6U, 16U, 22U, 0U, 6U, 16U, 22U};
  24442. hdma->StreamIndex = flagBitshiftOffset[stream_number & 0x7U];
  24443. 800abac: 68fb ldr r3, [r7, #12]
  24444. 800abae: f003 0307 and.w r3, r3, #7
  24445. 800abb2: 4a24 ldr r2, [pc, #144] @ (800ac44 <DMA_CalcBaseAndBitshift+0x15c>)
  24446. 800abb4: 5cd3 ldrb r3, [r2, r3]
  24447. 800abb6: 461a mov r2, r3
  24448. 800abb8: 687b ldr r3, [r7, #4]
  24449. 800abba: 65da str r2, [r3, #92] @ 0x5c
  24450. if (stream_number > 3U)
  24451. 800abbc: 68fb ldr r3, [r7, #12]
  24452. 800abbe: 2b03 cmp r3, #3
  24453. 800abc0: d908 bls.n 800abd4 <DMA_CalcBaseAndBitshift+0xec>
  24454. {
  24455. /* return pointer to HISR and HIFCR */
  24456. hdma->StreamBaseAddress = (((uint32_t)((uint32_t*)hdma->Instance) & (uint32_t)(~0x3FFU)) + 4U);
  24457. 800abc2: 687b ldr r3, [r7, #4]
  24458. 800abc4: 681b ldr r3, [r3, #0]
  24459. 800abc6: 461a mov r2, r3
  24460. 800abc8: 4b1f ldr r3, [pc, #124] @ (800ac48 <DMA_CalcBaseAndBitshift+0x160>)
  24461. 800abca: 4013 ands r3, r2
  24462. 800abcc: 1d1a adds r2, r3, #4
  24463. 800abce: 687b ldr r3, [r7, #4]
  24464. 800abd0: 659a str r2, [r3, #88] @ 0x58
  24465. 800abd2: e00d b.n 800abf0 <DMA_CalcBaseAndBitshift+0x108>
  24466. }
  24467. else
  24468. {
  24469. /* return pointer to LISR and LIFCR */
  24470. hdma->StreamBaseAddress = ((uint32_t)((uint32_t*)hdma->Instance) & (uint32_t)(~0x3FFU));
  24471. 800abd4: 687b ldr r3, [r7, #4]
  24472. 800abd6: 681b ldr r3, [r3, #0]
  24473. 800abd8: 461a mov r2, r3
  24474. 800abda: 4b1b ldr r3, [pc, #108] @ (800ac48 <DMA_CalcBaseAndBitshift+0x160>)
  24475. 800abdc: 4013 ands r3, r2
  24476. 800abde: 687a ldr r2, [r7, #4]
  24477. 800abe0: 6593 str r3, [r2, #88] @ 0x58
  24478. 800abe2: e005 b.n 800abf0 <DMA_CalcBaseAndBitshift+0x108>
  24479. }
  24480. }
  24481. else /* BDMA instance(s) */
  24482. {
  24483. /* return pointer to ISR and IFCR */
  24484. hdma->StreamBaseAddress = ((uint32_t)((uint32_t*)hdma->Instance) & (uint32_t)(~0xFFU));
  24485. 800abe4: 687b ldr r3, [r7, #4]
  24486. 800abe6: 681b ldr r3, [r3, #0]
  24487. 800abe8: f023 02ff bic.w r2, r3, #255 @ 0xff
  24488. 800abec: 687b ldr r3, [r7, #4]
  24489. 800abee: 659a str r2, [r3, #88] @ 0x58
  24490. }
  24491. return hdma->StreamBaseAddress;
  24492. 800abf0: 687b ldr r3, [r7, #4]
  24493. 800abf2: 6d9b ldr r3, [r3, #88] @ 0x58
  24494. }
  24495. 800abf4: 4618 mov r0, r3
  24496. 800abf6: 3714 adds r7, #20
  24497. 800abf8: 46bd mov sp, r7
  24498. 800abfa: f85d 7b04 ldr.w r7, [sp], #4
  24499. 800abfe: 4770 bx lr
  24500. 800ac00: 40020010 .word 0x40020010
  24501. 800ac04: 40020028 .word 0x40020028
  24502. 800ac08: 40020040 .word 0x40020040
  24503. 800ac0c: 40020058 .word 0x40020058
  24504. 800ac10: 40020070 .word 0x40020070
  24505. 800ac14: 40020088 .word 0x40020088
  24506. 800ac18: 400200a0 .word 0x400200a0
  24507. 800ac1c: 400200b8 .word 0x400200b8
  24508. 800ac20: 40020410 .word 0x40020410
  24509. 800ac24: 40020428 .word 0x40020428
  24510. 800ac28: 40020440 .word 0x40020440
  24511. 800ac2c: 40020458 .word 0x40020458
  24512. 800ac30: 40020470 .word 0x40020470
  24513. 800ac34: 40020488 .word 0x40020488
  24514. 800ac38: 400204a0 .word 0x400204a0
  24515. 800ac3c: 400204b8 .word 0x400204b8
  24516. 800ac40: aaaaaaab .word 0xaaaaaaab
  24517. 800ac44: 08018b6c .word 0x08018b6c
  24518. 800ac48: fffffc00 .word 0xfffffc00
  24519. 0800ac4c <DMA_CheckFifoParam>:
  24520. * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
  24521. * the configuration information for the specified DMA Stream.
  24522. * @retval HAL status
  24523. */
  24524. static HAL_StatusTypeDef DMA_CheckFifoParam(DMA_HandleTypeDef *hdma)
  24525. {
  24526. 800ac4c: b480 push {r7}
  24527. 800ac4e: b085 sub sp, #20
  24528. 800ac50: af00 add r7, sp, #0
  24529. 800ac52: 6078 str r0, [r7, #4]
  24530. HAL_StatusTypeDef status = HAL_OK;
  24531. 800ac54: 2300 movs r3, #0
  24532. 800ac56: 73fb strb r3, [r7, #15]
  24533. /* Memory Data size equal to Byte */
  24534. if (hdma->Init.MemDataAlignment == DMA_MDATAALIGN_BYTE)
  24535. 800ac58: 687b ldr r3, [r7, #4]
  24536. 800ac5a: 699b ldr r3, [r3, #24]
  24537. 800ac5c: 2b00 cmp r3, #0
  24538. 800ac5e: d120 bne.n 800aca2 <DMA_CheckFifoParam+0x56>
  24539. {
  24540. switch (hdma->Init.FIFOThreshold)
  24541. 800ac60: 687b ldr r3, [r7, #4]
  24542. 800ac62: 6a9b ldr r3, [r3, #40] @ 0x28
  24543. 800ac64: 2b03 cmp r3, #3
  24544. 800ac66: d858 bhi.n 800ad1a <DMA_CheckFifoParam+0xce>
  24545. 800ac68: a201 add r2, pc, #4 @ (adr r2, 800ac70 <DMA_CheckFifoParam+0x24>)
  24546. 800ac6a: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  24547. 800ac6e: bf00 nop
  24548. 800ac70: 0800ac81 .word 0x0800ac81
  24549. 800ac74: 0800ac93 .word 0x0800ac93
  24550. 800ac78: 0800ac81 .word 0x0800ac81
  24551. 800ac7c: 0800ad1b .word 0x0800ad1b
  24552. {
  24553. case DMA_FIFO_THRESHOLD_1QUARTERFULL:
  24554. case DMA_FIFO_THRESHOLD_3QUARTERSFULL:
  24555. if ((hdma->Init.MemBurst & DMA_SxCR_MBURST_1) == DMA_SxCR_MBURST_1)
  24556. 800ac80: 687b ldr r3, [r7, #4]
  24557. 800ac82: 6adb ldr r3, [r3, #44] @ 0x2c
  24558. 800ac84: f003 7380 and.w r3, r3, #16777216 @ 0x1000000
  24559. 800ac88: 2b00 cmp r3, #0
  24560. 800ac8a: d048 beq.n 800ad1e <DMA_CheckFifoParam+0xd2>
  24561. {
  24562. status = HAL_ERROR;
  24563. 800ac8c: 2301 movs r3, #1
  24564. 800ac8e: 73fb strb r3, [r7, #15]
  24565. }
  24566. break;
  24567. 800ac90: e045 b.n 800ad1e <DMA_CheckFifoParam+0xd2>
  24568. case DMA_FIFO_THRESHOLD_HALFFULL:
  24569. if (hdma->Init.MemBurst == DMA_MBURST_INC16)
  24570. 800ac92: 687b ldr r3, [r7, #4]
  24571. 800ac94: 6adb ldr r3, [r3, #44] @ 0x2c
  24572. 800ac96: f1b3 7fc0 cmp.w r3, #25165824 @ 0x1800000
  24573. 800ac9a: d142 bne.n 800ad22 <DMA_CheckFifoParam+0xd6>
  24574. {
  24575. status = HAL_ERROR;
  24576. 800ac9c: 2301 movs r3, #1
  24577. 800ac9e: 73fb strb r3, [r7, #15]
  24578. }
  24579. break;
  24580. 800aca0: e03f b.n 800ad22 <DMA_CheckFifoParam+0xd6>
  24581. break;
  24582. }
  24583. }
  24584. /* Memory Data size equal to Half-Word */
  24585. else if (hdma->Init.MemDataAlignment == DMA_MDATAALIGN_HALFWORD)
  24586. 800aca2: 687b ldr r3, [r7, #4]
  24587. 800aca4: 699b ldr r3, [r3, #24]
  24588. 800aca6: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  24589. 800acaa: d123 bne.n 800acf4 <DMA_CheckFifoParam+0xa8>
  24590. {
  24591. switch (hdma->Init.FIFOThreshold)
  24592. 800acac: 687b ldr r3, [r7, #4]
  24593. 800acae: 6a9b ldr r3, [r3, #40] @ 0x28
  24594. 800acb0: 2b03 cmp r3, #3
  24595. 800acb2: d838 bhi.n 800ad26 <DMA_CheckFifoParam+0xda>
  24596. 800acb4: a201 add r2, pc, #4 @ (adr r2, 800acbc <DMA_CheckFifoParam+0x70>)
  24597. 800acb6: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  24598. 800acba: bf00 nop
  24599. 800acbc: 0800accd .word 0x0800accd
  24600. 800acc0: 0800acd3 .word 0x0800acd3
  24601. 800acc4: 0800accd .word 0x0800accd
  24602. 800acc8: 0800ace5 .word 0x0800ace5
  24603. {
  24604. case DMA_FIFO_THRESHOLD_1QUARTERFULL:
  24605. case DMA_FIFO_THRESHOLD_3QUARTERSFULL:
  24606. status = HAL_ERROR;
  24607. 800accc: 2301 movs r3, #1
  24608. 800acce: 73fb strb r3, [r7, #15]
  24609. break;
  24610. 800acd0: e030 b.n 800ad34 <DMA_CheckFifoParam+0xe8>
  24611. case DMA_FIFO_THRESHOLD_HALFFULL:
  24612. if ((hdma->Init.MemBurst & DMA_SxCR_MBURST_1) == DMA_SxCR_MBURST_1)
  24613. 800acd2: 687b ldr r3, [r7, #4]
  24614. 800acd4: 6adb ldr r3, [r3, #44] @ 0x2c
  24615. 800acd6: f003 7380 and.w r3, r3, #16777216 @ 0x1000000
  24616. 800acda: 2b00 cmp r3, #0
  24617. 800acdc: d025 beq.n 800ad2a <DMA_CheckFifoParam+0xde>
  24618. {
  24619. status = HAL_ERROR;
  24620. 800acde: 2301 movs r3, #1
  24621. 800ace0: 73fb strb r3, [r7, #15]
  24622. }
  24623. break;
  24624. 800ace2: e022 b.n 800ad2a <DMA_CheckFifoParam+0xde>
  24625. case DMA_FIFO_THRESHOLD_FULL:
  24626. if (hdma->Init.MemBurst == DMA_MBURST_INC16)
  24627. 800ace4: 687b ldr r3, [r7, #4]
  24628. 800ace6: 6adb ldr r3, [r3, #44] @ 0x2c
  24629. 800ace8: f1b3 7fc0 cmp.w r3, #25165824 @ 0x1800000
  24630. 800acec: d11f bne.n 800ad2e <DMA_CheckFifoParam+0xe2>
  24631. {
  24632. status = HAL_ERROR;
  24633. 800acee: 2301 movs r3, #1
  24634. 800acf0: 73fb strb r3, [r7, #15]
  24635. }
  24636. break;
  24637. 800acf2: e01c b.n 800ad2e <DMA_CheckFifoParam+0xe2>
  24638. }
  24639. /* Memory Data size equal to Word */
  24640. else
  24641. {
  24642. switch (hdma->Init.FIFOThreshold)
  24643. 800acf4: 687b ldr r3, [r7, #4]
  24644. 800acf6: 6a9b ldr r3, [r3, #40] @ 0x28
  24645. 800acf8: 2b02 cmp r3, #2
  24646. 800acfa: d902 bls.n 800ad02 <DMA_CheckFifoParam+0xb6>
  24647. 800acfc: 2b03 cmp r3, #3
  24648. 800acfe: d003 beq.n 800ad08 <DMA_CheckFifoParam+0xbc>
  24649. status = HAL_ERROR;
  24650. }
  24651. break;
  24652. default:
  24653. break;
  24654. 800ad00: e018 b.n 800ad34 <DMA_CheckFifoParam+0xe8>
  24655. status = HAL_ERROR;
  24656. 800ad02: 2301 movs r3, #1
  24657. 800ad04: 73fb strb r3, [r7, #15]
  24658. break;
  24659. 800ad06: e015 b.n 800ad34 <DMA_CheckFifoParam+0xe8>
  24660. if ((hdma->Init.MemBurst & DMA_SxCR_MBURST_1) == DMA_SxCR_MBURST_1)
  24661. 800ad08: 687b ldr r3, [r7, #4]
  24662. 800ad0a: 6adb ldr r3, [r3, #44] @ 0x2c
  24663. 800ad0c: f003 7380 and.w r3, r3, #16777216 @ 0x1000000
  24664. 800ad10: 2b00 cmp r3, #0
  24665. 800ad12: d00e beq.n 800ad32 <DMA_CheckFifoParam+0xe6>
  24666. status = HAL_ERROR;
  24667. 800ad14: 2301 movs r3, #1
  24668. 800ad16: 73fb strb r3, [r7, #15]
  24669. break;
  24670. 800ad18: e00b b.n 800ad32 <DMA_CheckFifoParam+0xe6>
  24671. break;
  24672. 800ad1a: bf00 nop
  24673. 800ad1c: e00a b.n 800ad34 <DMA_CheckFifoParam+0xe8>
  24674. break;
  24675. 800ad1e: bf00 nop
  24676. 800ad20: e008 b.n 800ad34 <DMA_CheckFifoParam+0xe8>
  24677. break;
  24678. 800ad22: bf00 nop
  24679. 800ad24: e006 b.n 800ad34 <DMA_CheckFifoParam+0xe8>
  24680. break;
  24681. 800ad26: bf00 nop
  24682. 800ad28: e004 b.n 800ad34 <DMA_CheckFifoParam+0xe8>
  24683. break;
  24684. 800ad2a: bf00 nop
  24685. 800ad2c: e002 b.n 800ad34 <DMA_CheckFifoParam+0xe8>
  24686. break;
  24687. 800ad2e: bf00 nop
  24688. 800ad30: e000 b.n 800ad34 <DMA_CheckFifoParam+0xe8>
  24689. break;
  24690. 800ad32: bf00 nop
  24691. }
  24692. }
  24693. return status;
  24694. 800ad34: 7bfb ldrb r3, [r7, #15]
  24695. }
  24696. 800ad36: 4618 mov r0, r3
  24697. 800ad38: 3714 adds r7, #20
  24698. 800ad3a: 46bd mov sp, r7
  24699. 800ad3c: f85d 7b04 ldr.w r7, [sp], #4
  24700. 800ad40: 4770 bx lr
  24701. 800ad42: bf00 nop
  24702. 0800ad44 <DMA_CalcDMAMUXChannelBaseAndMask>:
  24703. * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
  24704. * the configuration information for the specified DMA Stream.
  24705. * @retval HAL status
  24706. */
  24707. static void DMA_CalcDMAMUXChannelBaseAndMask(DMA_HandleTypeDef *hdma)
  24708. {
  24709. 800ad44: b480 push {r7}
  24710. 800ad46: b085 sub sp, #20
  24711. 800ad48: af00 add r7, sp, #0
  24712. 800ad4a: 6078 str r0, [r7, #4]
  24713. uint32_t stream_number;
  24714. uint32_t stream_baseaddress = (uint32_t)((uint32_t*)hdma->Instance);
  24715. 800ad4c: 687b ldr r3, [r7, #4]
  24716. 800ad4e: 681b ldr r3, [r3, #0]
  24717. 800ad50: 60bb str r3, [r7, #8]
  24718. if(IS_BDMA_CHANNEL_DMAMUX_INSTANCE(hdma->Instance) != 0U)
  24719. 800ad52: 687b ldr r3, [r7, #4]
  24720. 800ad54: 681b ldr r3, [r3, #0]
  24721. 800ad56: 4a38 ldr r2, [pc, #224] @ (800ae38 <DMA_CalcDMAMUXChannelBaseAndMask+0xf4>)
  24722. 800ad58: 4293 cmp r3, r2
  24723. 800ad5a: d022 beq.n 800ada2 <DMA_CalcDMAMUXChannelBaseAndMask+0x5e>
  24724. 800ad5c: 687b ldr r3, [r7, #4]
  24725. 800ad5e: 681b ldr r3, [r3, #0]
  24726. 800ad60: 4a36 ldr r2, [pc, #216] @ (800ae3c <DMA_CalcDMAMUXChannelBaseAndMask+0xf8>)
  24727. 800ad62: 4293 cmp r3, r2
  24728. 800ad64: d01d beq.n 800ada2 <DMA_CalcDMAMUXChannelBaseAndMask+0x5e>
  24729. 800ad66: 687b ldr r3, [r7, #4]
  24730. 800ad68: 681b ldr r3, [r3, #0]
  24731. 800ad6a: 4a35 ldr r2, [pc, #212] @ (800ae40 <DMA_CalcDMAMUXChannelBaseAndMask+0xfc>)
  24732. 800ad6c: 4293 cmp r3, r2
  24733. 800ad6e: d018 beq.n 800ada2 <DMA_CalcDMAMUXChannelBaseAndMask+0x5e>
  24734. 800ad70: 687b ldr r3, [r7, #4]
  24735. 800ad72: 681b ldr r3, [r3, #0]
  24736. 800ad74: 4a33 ldr r2, [pc, #204] @ (800ae44 <DMA_CalcDMAMUXChannelBaseAndMask+0x100>)
  24737. 800ad76: 4293 cmp r3, r2
  24738. 800ad78: d013 beq.n 800ada2 <DMA_CalcDMAMUXChannelBaseAndMask+0x5e>
  24739. 800ad7a: 687b ldr r3, [r7, #4]
  24740. 800ad7c: 681b ldr r3, [r3, #0]
  24741. 800ad7e: 4a32 ldr r2, [pc, #200] @ (800ae48 <DMA_CalcDMAMUXChannelBaseAndMask+0x104>)
  24742. 800ad80: 4293 cmp r3, r2
  24743. 800ad82: d00e beq.n 800ada2 <DMA_CalcDMAMUXChannelBaseAndMask+0x5e>
  24744. 800ad84: 687b ldr r3, [r7, #4]
  24745. 800ad86: 681b ldr r3, [r3, #0]
  24746. 800ad88: 4a30 ldr r2, [pc, #192] @ (800ae4c <DMA_CalcDMAMUXChannelBaseAndMask+0x108>)
  24747. 800ad8a: 4293 cmp r3, r2
  24748. 800ad8c: d009 beq.n 800ada2 <DMA_CalcDMAMUXChannelBaseAndMask+0x5e>
  24749. 800ad8e: 687b ldr r3, [r7, #4]
  24750. 800ad90: 681b ldr r3, [r3, #0]
  24751. 800ad92: 4a2f ldr r2, [pc, #188] @ (800ae50 <DMA_CalcDMAMUXChannelBaseAndMask+0x10c>)
  24752. 800ad94: 4293 cmp r3, r2
  24753. 800ad96: d004 beq.n 800ada2 <DMA_CalcDMAMUXChannelBaseAndMask+0x5e>
  24754. 800ad98: 687b ldr r3, [r7, #4]
  24755. 800ad9a: 681b ldr r3, [r3, #0]
  24756. 800ad9c: 4a2d ldr r2, [pc, #180] @ (800ae54 <DMA_CalcDMAMUXChannelBaseAndMask+0x110>)
  24757. 800ad9e: 4293 cmp r3, r2
  24758. 800ada0: d101 bne.n 800ada6 <DMA_CalcDMAMUXChannelBaseAndMask+0x62>
  24759. 800ada2: 2301 movs r3, #1
  24760. 800ada4: e000 b.n 800ada8 <DMA_CalcDMAMUXChannelBaseAndMask+0x64>
  24761. 800ada6: 2300 movs r3, #0
  24762. 800ada8: 2b00 cmp r3, #0
  24763. 800adaa: d01a beq.n 800ade2 <DMA_CalcDMAMUXChannelBaseAndMask+0x9e>
  24764. {
  24765. /* BDMA Channels are connected to DMAMUX2 channels */
  24766. stream_number = (((uint32_t)((uint32_t*)hdma->Instance) & 0xFFU) - 8U) / 20U;
  24767. 800adac: 687b ldr r3, [r7, #4]
  24768. 800adae: 681b ldr r3, [r3, #0]
  24769. 800adb0: b2db uxtb r3, r3
  24770. 800adb2: 3b08 subs r3, #8
  24771. 800adb4: 4a28 ldr r2, [pc, #160] @ (800ae58 <DMA_CalcDMAMUXChannelBaseAndMask+0x114>)
  24772. 800adb6: fba2 2303 umull r2, r3, r2, r3
  24773. 800adba: 091b lsrs r3, r3, #4
  24774. 800adbc: 60fb str r3, [r7, #12]
  24775. hdma->DMAmuxChannel = (DMAMUX_Channel_TypeDef *)((uint32_t)(((uint32_t)DMAMUX2_Channel0) + (stream_number * 4U)));
  24776. 800adbe: 68fa ldr r2, [r7, #12]
  24777. 800adc0: 4b26 ldr r3, [pc, #152] @ (800ae5c <DMA_CalcDMAMUXChannelBaseAndMask+0x118>)
  24778. 800adc2: 4413 add r3, r2
  24779. 800adc4: 009b lsls r3, r3, #2
  24780. 800adc6: 461a mov r2, r3
  24781. 800adc8: 687b ldr r3, [r7, #4]
  24782. 800adca: 661a str r2, [r3, #96] @ 0x60
  24783. hdma->DMAmuxChannelStatus = DMAMUX2_ChannelStatus;
  24784. 800adcc: 687b ldr r3, [r7, #4]
  24785. 800adce: 4a24 ldr r2, [pc, #144] @ (800ae60 <DMA_CalcDMAMUXChannelBaseAndMask+0x11c>)
  24786. 800add0: 665a str r2, [r3, #100] @ 0x64
  24787. hdma->DMAmuxChannelStatusMask = 1UL << (stream_number & 0x1FU);
  24788. 800add2: 68fb ldr r3, [r7, #12]
  24789. 800add4: f003 031f and.w r3, r3, #31
  24790. 800add8: 2201 movs r2, #1
  24791. 800adda: 409a lsls r2, r3
  24792. 800addc: 687b ldr r3, [r7, #4]
  24793. 800adde: 669a str r2, [r3, #104] @ 0x68
  24794. }
  24795. hdma->DMAmuxChannel = (DMAMUX_Channel_TypeDef *)((uint32_t)(((uint32_t)DMAMUX1_Channel0) + (stream_number * 4U)));
  24796. hdma->DMAmuxChannelStatus = DMAMUX1_ChannelStatus;
  24797. hdma->DMAmuxChannelStatusMask = 1UL << (stream_number & 0x1FU);
  24798. }
  24799. }
  24800. 800ade0: e024 b.n 800ae2c <DMA_CalcDMAMUXChannelBaseAndMask+0xe8>
  24801. stream_number = (((uint32_t)((uint32_t*)hdma->Instance) & 0xFFU) - 16U) / 24U;
  24802. 800ade2: 687b ldr r3, [r7, #4]
  24803. 800ade4: 681b ldr r3, [r3, #0]
  24804. 800ade6: b2db uxtb r3, r3
  24805. 800ade8: 3b10 subs r3, #16
  24806. 800adea: 4a1e ldr r2, [pc, #120] @ (800ae64 <DMA_CalcDMAMUXChannelBaseAndMask+0x120>)
  24807. 800adec: fba2 2303 umull r2, r3, r2, r3
  24808. 800adf0: 091b lsrs r3, r3, #4
  24809. 800adf2: 60fb str r3, [r7, #12]
  24810. if((stream_baseaddress <= ((uint32_t)DMA2_Stream7) ) && \
  24811. 800adf4: 68bb ldr r3, [r7, #8]
  24812. 800adf6: 4a1c ldr r2, [pc, #112] @ (800ae68 <DMA_CalcDMAMUXChannelBaseAndMask+0x124>)
  24813. 800adf8: 4293 cmp r3, r2
  24814. 800adfa: d806 bhi.n 800ae0a <DMA_CalcDMAMUXChannelBaseAndMask+0xc6>
  24815. 800adfc: 68bb ldr r3, [r7, #8]
  24816. 800adfe: 4a1b ldr r2, [pc, #108] @ (800ae6c <DMA_CalcDMAMUXChannelBaseAndMask+0x128>)
  24817. 800ae00: 4293 cmp r3, r2
  24818. 800ae02: d902 bls.n 800ae0a <DMA_CalcDMAMUXChannelBaseAndMask+0xc6>
  24819. stream_number += 8U;
  24820. 800ae04: 68fb ldr r3, [r7, #12]
  24821. 800ae06: 3308 adds r3, #8
  24822. 800ae08: 60fb str r3, [r7, #12]
  24823. hdma->DMAmuxChannel = (DMAMUX_Channel_TypeDef *)((uint32_t)(((uint32_t)DMAMUX1_Channel0) + (stream_number * 4U)));
  24824. 800ae0a: 68fa ldr r2, [r7, #12]
  24825. 800ae0c: 4b18 ldr r3, [pc, #96] @ (800ae70 <DMA_CalcDMAMUXChannelBaseAndMask+0x12c>)
  24826. 800ae0e: 4413 add r3, r2
  24827. 800ae10: 009b lsls r3, r3, #2
  24828. 800ae12: 461a mov r2, r3
  24829. 800ae14: 687b ldr r3, [r7, #4]
  24830. 800ae16: 661a str r2, [r3, #96] @ 0x60
  24831. hdma->DMAmuxChannelStatus = DMAMUX1_ChannelStatus;
  24832. 800ae18: 687b ldr r3, [r7, #4]
  24833. 800ae1a: 4a16 ldr r2, [pc, #88] @ (800ae74 <DMA_CalcDMAMUXChannelBaseAndMask+0x130>)
  24834. 800ae1c: 665a str r2, [r3, #100] @ 0x64
  24835. hdma->DMAmuxChannelStatusMask = 1UL << (stream_number & 0x1FU);
  24836. 800ae1e: 68fb ldr r3, [r7, #12]
  24837. 800ae20: f003 031f and.w r3, r3, #31
  24838. 800ae24: 2201 movs r2, #1
  24839. 800ae26: 409a lsls r2, r3
  24840. 800ae28: 687b ldr r3, [r7, #4]
  24841. 800ae2a: 669a str r2, [r3, #104] @ 0x68
  24842. }
  24843. 800ae2c: bf00 nop
  24844. 800ae2e: 3714 adds r7, #20
  24845. 800ae30: 46bd mov sp, r7
  24846. 800ae32: f85d 7b04 ldr.w r7, [sp], #4
  24847. 800ae36: 4770 bx lr
  24848. 800ae38: 58025408 .word 0x58025408
  24849. 800ae3c: 5802541c .word 0x5802541c
  24850. 800ae40: 58025430 .word 0x58025430
  24851. 800ae44: 58025444 .word 0x58025444
  24852. 800ae48: 58025458 .word 0x58025458
  24853. 800ae4c: 5802546c .word 0x5802546c
  24854. 800ae50: 58025480 .word 0x58025480
  24855. 800ae54: 58025494 .word 0x58025494
  24856. 800ae58: cccccccd .word 0xcccccccd
  24857. 800ae5c: 16009600 .word 0x16009600
  24858. 800ae60: 58025880 .word 0x58025880
  24859. 800ae64: aaaaaaab .word 0xaaaaaaab
  24860. 800ae68: 400204b8 .word 0x400204b8
  24861. 800ae6c: 4002040f .word 0x4002040f
  24862. 800ae70: 10008200 .word 0x10008200
  24863. 800ae74: 40020880 .word 0x40020880
  24864. 0800ae78 <DMA_CalcDMAMUXRequestGenBaseAndMask>:
  24865. * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
  24866. * the configuration information for the specified DMA Stream.
  24867. * @retval HAL status
  24868. */
  24869. static void DMA_CalcDMAMUXRequestGenBaseAndMask(DMA_HandleTypeDef *hdma)
  24870. {
  24871. 800ae78: b480 push {r7}
  24872. 800ae7a: b085 sub sp, #20
  24873. 800ae7c: af00 add r7, sp, #0
  24874. 800ae7e: 6078 str r0, [r7, #4]
  24875. uint32_t request = hdma->Init.Request & DMAMUX_CxCR_DMAREQ_ID;
  24876. 800ae80: 687b ldr r3, [r7, #4]
  24877. 800ae82: 685b ldr r3, [r3, #4]
  24878. 800ae84: b2db uxtb r3, r3
  24879. 800ae86: 60fb str r3, [r7, #12]
  24880. if((request >= DMA_REQUEST_GENERATOR0) && (request <= DMA_REQUEST_GENERATOR7))
  24881. 800ae88: 68fb ldr r3, [r7, #12]
  24882. 800ae8a: 2b00 cmp r3, #0
  24883. 800ae8c: d04a beq.n 800af24 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xac>
  24884. 800ae8e: 68fb ldr r3, [r7, #12]
  24885. 800ae90: 2b08 cmp r3, #8
  24886. 800ae92: d847 bhi.n 800af24 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xac>
  24887. {
  24888. if(IS_BDMA_CHANNEL_DMAMUX_INSTANCE(hdma->Instance) != 0U)
  24889. 800ae94: 687b ldr r3, [r7, #4]
  24890. 800ae96: 681b ldr r3, [r3, #0]
  24891. 800ae98: 4a25 ldr r2, [pc, #148] @ (800af30 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xb8>)
  24892. 800ae9a: 4293 cmp r3, r2
  24893. 800ae9c: d022 beq.n 800aee4 <DMA_CalcDMAMUXRequestGenBaseAndMask+0x6c>
  24894. 800ae9e: 687b ldr r3, [r7, #4]
  24895. 800aea0: 681b ldr r3, [r3, #0]
  24896. 800aea2: 4a24 ldr r2, [pc, #144] @ (800af34 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xbc>)
  24897. 800aea4: 4293 cmp r3, r2
  24898. 800aea6: d01d beq.n 800aee4 <DMA_CalcDMAMUXRequestGenBaseAndMask+0x6c>
  24899. 800aea8: 687b ldr r3, [r7, #4]
  24900. 800aeaa: 681b ldr r3, [r3, #0]
  24901. 800aeac: 4a22 ldr r2, [pc, #136] @ (800af38 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xc0>)
  24902. 800aeae: 4293 cmp r3, r2
  24903. 800aeb0: d018 beq.n 800aee4 <DMA_CalcDMAMUXRequestGenBaseAndMask+0x6c>
  24904. 800aeb2: 687b ldr r3, [r7, #4]
  24905. 800aeb4: 681b ldr r3, [r3, #0]
  24906. 800aeb6: 4a21 ldr r2, [pc, #132] @ (800af3c <DMA_CalcDMAMUXRequestGenBaseAndMask+0xc4>)
  24907. 800aeb8: 4293 cmp r3, r2
  24908. 800aeba: d013 beq.n 800aee4 <DMA_CalcDMAMUXRequestGenBaseAndMask+0x6c>
  24909. 800aebc: 687b ldr r3, [r7, #4]
  24910. 800aebe: 681b ldr r3, [r3, #0]
  24911. 800aec0: 4a1f ldr r2, [pc, #124] @ (800af40 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xc8>)
  24912. 800aec2: 4293 cmp r3, r2
  24913. 800aec4: d00e beq.n 800aee4 <DMA_CalcDMAMUXRequestGenBaseAndMask+0x6c>
  24914. 800aec6: 687b ldr r3, [r7, #4]
  24915. 800aec8: 681b ldr r3, [r3, #0]
  24916. 800aeca: 4a1e ldr r2, [pc, #120] @ (800af44 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xcc>)
  24917. 800aecc: 4293 cmp r3, r2
  24918. 800aece: d009 beq.n 800aee4 <DMA_CalcDMAMUXRequestGenBaseAndMask+0x6c>
  24919. 800aed0: 687b ldr r3, [r7, #4]
  24920. 800aed2: 681b ldr r3, [r3, #0]
  24921. 800aed4: 4a1c ldr r2, [pc, #112] @ (800af48 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xd0>)
  24922. 800aed6: 4293 cmp r3, r2
  24923. 800aed8: d004 beq.n 800aee4 <DMA_CalcDMAMUXRequestGenBaseAndMask+0x6c>
  24924. 800aeda: 687b ldr r3, [r7, #4]
  24925. 800aedc: 681b ldr r3, [r3, #0]
  24926. 800aede: 4a1b ldr r2, [pc, #108] @ (800af4c <DMA_CalcDMAMUXRequestGenBaseAndMask+0xd4>)
  24927. 800aee0: 4293 cmp r3, r2
  24928. 800aee2: d101 bne.n 800aee8 <DMA_CalcDMAMUXRequestGenBaseAndMask+0x70>
  24929. 800aee4: 2301 movs r3, #1
  24930. 800aee6: e000 b.n 800aeea <DMA_CalcDMAMUXRequestGenBaseAndMask+0x72>
  24931. 800aee8: 2300 movs r3, #0
  24932. 800aeea: 2b00 cmp r3, #0
  24933. 800aeec: d00a beq.n 800af04 <DMA_CalcDMAMUXRequestGenBaseAndMask+0x8c>
  24934. {
  24935. /* BDMA Channels are connected to DMAMUX2 request generator blocks */
  24936. hdma->DMAmuxRequestGen = (DMAMUX_RequestGen_TypeDef *)((uint32_t)(((uint32_t)DMAMUX2_RequestGenerator0) + ((request - 1U) * 4U)));
  24937. 800aeee: 68fa ldr r2, [r7, #12]
  24938. 800aef0: 4b17 ldr r3, [pc, #92] @ (800af50 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xd8>)
  24939. 800aef2: 4413 add r3, r2
  24940. 800aef4: 009b lsls r3, r3, #2
  24941. 800aef6: 461a mov r2, r3
  24942. 800aef8: 687b ldr r3, [r7, #4]
  24943. 800aefa: 66da str r2, [r3, #108] @ 0x6c
  24944. hdma->DMAmuxRequestGenStatus = DMAMUX2_RequestGenStatus;
  24945. 800aefc: 687b ldr r3, [r7, #4]
  24946. 800aefe: 4a15 ldr r2, [pc, #84] @ (800af54 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xdc>)
  24947. 800af00: 671a str r2, [r3, #112] @ 0x70
  24948. 800af02: e009 b.n 800af18 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xa0>
  24949. }
  24950. else
  24951. {
  24952. /* DMA1 and DMA2 Streams use DMAMUX1 request generator blocks */
  24953. hdma->DMAmuxRequestGen = (DMAMUX_RequestGen_TypeDef *)((uint32_t)(((uint32_t)DMAMUX1_RequestGenerator0) + ((request - 1U) * 4U)));
  24954. 800af04: 68fa ldr r2, [r7, #12]
  24955. 800af06: 4b14 ldr r3, [pc, #80] @ (800af58 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xe0>)
  24956. 800af08: 4413 add r3, r2
  24957. 800af0a: 009b lsls r3, r3, #2
  24958. 800af0c: 461a mov r2, r3
  24959. 800af0e: 687b ldr r3, [r7, #4]
  24960. 800af10: 66da str r2, [r3, #108] @ 0x6c
  24961. hdma->DMAmuxRequestGenStatus = DMAMUX1_RequestGenStatus;
  24962. 800af12: 687b ldr r3, [r7, #4]
  24963. 800af14: 4a11 ldr r2, [pc, #68] @ (800af5c <DMA_CalcDMAMUXRequestGenBaseAndMask+0xe4>)
  24964. 800af16: 671a str r2, [r3, #112] @ 0x70
  24965. }
  24966. hdma->DMAmuxRequestGenStatusMask = 1UL << (request - 1U);
  24967. 800af18: 68fb ldr r3, [r7, #12]
  24968. 800af1a: 3b01 subs r3, #1
  24969. 800af1c: 2201 movs r2, #1
  24970. 800af1e: 409a lsls r2, r3
  24971. 800af20: 687b ldr r3, [r7, #4]
  24972. 800af22: 675a str r2, [r3, #116] @ 0x74
  24973. }
  24974. }
  24975. 800af24: bf00 nop
  24976. 800af26: 3714 adds r7, #20
  24977. 800af28: 46bd mov sp, r7
  24978. 800af2a: f85d 7b04 ldr.w r7, [sp], #4
  24979. 800af2e: 4770 bx lr
  24980. 800af30: 58025408 .word 0x58025408
  24981. 800af34: 5802541c .word 0x5802541c
  24982. 800af38: 58025430 .word 0x58025430
  24983. 800af3c: 58025444 .word 0x58025444
  24984. 800af40: 58025458 .word 0x58025458
  24985. 800af44: 5802546c .word 0x5802546c
  24986. 800af48: 58025480 .word 0x58025480
  24987. 800af4c: 58025494 .word 0x58025494
  24988. 800af50: 1600963f .word 0x1600963f
  24989. 800af54: 58025940 .word 0x58025940
  24990. 800af58: 1000823f .word 0x1000823f
  24991. 800af5c: 40020940 .word 0x40020940
  24992. 0800af60 <HAL_GPIO_Init>:
  24993. * @param GPIO_Init: pointer to a GPIO_InitTypeDef structure that contains
  24994. * the configuration information for the specified GPIO peripheral.
  24995. * @retval None
  24996. */
  24997. void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)
  24998. {
  24999. 800af60: b480 push {r7}
  25000. 800af62: b089 sub sp, #36 @ 0x24
  25001. 800af64: af00 add r7, sp, #0
  25002. 800af66: 6078 str r0, [r7, #4]
  25003. 800af68: 6039 str r1, [r7, #0]
  25004. uint32_t position = 0x00U;
  25005. 800af6a: 2300 movs r3, #0
  25006. 800af6c: 61fb str r3, [r7, #28]
  25007. EXTI_Core_TypeDef *EXTI_CurrentCPU;
  25008. #if defined(DUAL_CORE) && defined(CORE_CM4)
  25009. EXTI_CurrentCPU = EXTI_D2; /* EXTI for CM4 CPU */
  25010. #else
  25011. EXTI_CurrentCPU = EXTI_D1; /* EXTI for CM7 CPU */
  25012. 800af6e: 4b89 ldr r3, [pc, #548] @ (800b194 <HAL_GPIO_Init+0x234>)
  25013. 800af70: 617b str r3, [r7, #20]
  25014. assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));
  25015. assert_param(IS_GPIO_PIN(GPIO_Init->Pin));
  25016. assert_param(IS_GPIO_MODE(GPIO_Init->Mode));
  25017. /* Configure the port pins */
  25018. while (((GPIO_Init->Pin) >> position) != 0x00U)
  25019. 800af72: e194 b.n 800b29e <HAL_GPIO_Init+0x33e>
  25020. {
  25021. /* Get current io position */
  25022. iocurrent = (GPIO_Init->Pin) & (1UL << position);
  25023. 800af74: 683b ldr r3, [r7, #0]
  25024. 800af76: 681a ldr r2, [r3, #0]
  25025. 800af78: 2101 movs r1, #1
  25026. 800af7a: 69fb ldr r3, [r7, #28]
  25027. 800af7c: fa01 f303 lsl.w r3, r1, r3
  25028. 800af80: 4013 ands r3, r2
  25029. 800af82: 613b str r3, [r7, #16]
  25030. if (iocurrent != 0x00U)
  25031. 800af84: 693b ldr r3, [r7, #16]
  25032. 800af86: 2b00 cmp r3, #0
  25033. 800af88: f000 8186 beq.w 800b298 <HAL_GPIO_Init+0x338>
  25034. {
  25035. /*--------------------- GPIO Mode Configuration ------------------------*/
  25036. /* In case of Output or Alternate function mode selection */
  25037. if (((GPIO_Init->Mode & GPIO_MODE) == MODE_OUTPUT) || ((GPIO_Init->Mode & GPIO_MODE) == MODE_AF))
  25038. 800af8c: 683b ldr r3, [r7, #0]
  25039. 800af8e: 685b ldr r3, [r3, #4]
  25040. 800af90: f003 0303 and.w r3, r3, #3
  25041. 800af94: 2b01 cmp r3, #1
  25042. 800af96: d005 beq.n 800afa4 <HAL_GPIO_Init+0x44>
  25043. 800af98: 683b ldr r3, [r7, #0]
  25044. 800af9a: 685b ldr r3, [r3, #4]
  25045. 800af9c: f003 0303 and.w r3, r3, #3
  25046. 800afa0: 2b02 cmp r3, #2
  25047. 800afa2: d130 bne.n 800b006 <HAL_GPIO_Init+0xa6>
  25048. {
  25049. /* Check the Speed parameter */
  25050. assert_param(IS_GPIO_SPEED(GPIO_Init->Speed));
  25051. /* Configure the IO Speed */
  25052. temp = GPIOx->OSPEEDR;
  25053. 800afa4: 687b ldr r3, [r7, #4]
  25054. 800afa6: 689b ldr r3, [r3, #8]
  25055. 800afa8: 61bb str r3, [r7, #24]
  25056. temp &= ~(GPIO_OSPEEDR_OSPEED0 << (position * 2U));
  25057. 800afaa: 69fb ldr r3, [r7, #28]
  25058. 800afac: 005b lsls r3, r3, #1
  25059. 800afae: 2203 movs r2, #3
  25060. 800afb0: fa02 f303 lsl.w r3, r2, r3
  25061. 800afb4: 43db mvns r3, r3
  25062. 800afb6: 69ba ldr r2, [r7, #24]
  25063. 800afb8: 4013 ands r3, r2
  25064. 800afba: 61bb str r3, [r7, #24]
  25065. temp |= (GPIO_Init->Speed << (position * 2U));
  25066. 800afbc: 683b ldr r3, [r7, #0]
  25067. 800afbe: 68da ldr r2, [r3, #12]
  25068. 800afc0: 69fb ldr r3, [r7, #28]
  25069. 800afc2: 005b lsls r3, r3, #1
  25070. 800afc4: fa02 f303 lsl.w r3, r2, r3
  25071. 800afc8: 69ba ldr r2, [r7, #24]
  25072. 800afca: 4313 orrs r3, r2
  25073. 800afcc: 61bb str r3, [r7, #24]
  25074. GPIOx->OSPEEDR = temp;
  25075. 800afce: 687b ldr r3, [r7, #4]
  25076. 800afd0: 69ba ldr r2, [r7, #24]
  25077. 800afd2: 609a str r2, [r3, #8]
  25078. /* Configure the IO Output Type */
  25079. temp = GPIOx->OTYPER;
  25080. 800afd4: 687b ldr r3, [r7, #4]
  25081. 800afd6: 685b ldr r3, [r3, #4]
  25082. 800afd8: 61bb str r3, [r7, #24]
  25083. temp &= ~(GPIO_OTYPER_OT0 << position) ;
  25084. 800afda: 2201 movs r2, #1
  25085. 800afdc: 69fb ldr r3, [r7, #28]
  25086. 800afde: fa02 f303 lsl.w r3, r2, r3
  25087. 800afe2: 43db mvns r3, r3
  25088. 800afe4: 69ba ldr r2, [r7, #24]
  25089. 800afe6: 4013 ands r3, r2
  25090. 800afe8: 61bb str r3, [r7, #24]
  25091. temp |= (((GPIO_Init->Mode & OUTPUT_TYPE) >> OUTPUT_TYPE_Pos) << position);
  25092. 800afea: 683b ldr r3, [r7, #0]
  25093. 800afec: 685b ldr r3, [r3, #4]
  25094. 800afee: 091b lsrs r3, r3, #4
  25095. 800aff0: f003 0201 and.w r2, r3, #1
  25096. 800aff4: 69fb ldr r3, [r7, #28]
  25097. 800aff6: fa02 f303 lsl.w r3, r2, r3
  25098. 800affa: 69ba ldr r2, [r7, #24]
  25099. 800affc: 4313 orrs r3, r2
  25100. 800affe: 61bb str r3, [r7, #24]
  25101. GPIOx->OTYPER = temp;
  25102. 800b000: 687b ldr r3, [r7, #4]
  25103. 800b002: 69ba ldr r2, [r7, #24]
  25104. 800b004: 605a str r2, [r3, #4]
  25105. }
  25106. if ((GPIO_Init->Mode & GPIO_MODE) != MODE_ANALOG)
  25107. 800b006: 683b ldr r3, [r7, #0]
  25108. 800b008: 685b ldr r3, [r3, #4]
  25109. 800b00a: f003 0303 and.w r3, r3, #3
  25110. 800b00e: 2b03 cmp r3, #3
  25111. 800b010: d017 beq.n 800b042 <HAL_GPIO_Init+0xe2>
  25112. {
  25113. /* Check the Pull parameter */
  25114. assert_param(IS_GPIO_PULL(GPIO_Init->Pull));
  25115. /* Activate the Pull-up or Pull down resistor for the current IO */
  25116. temp = GPIOx->PUPDR;
  25117. 800b012: 687b ldr r3, [r7, #4]
  25118. 800b014: 68db ldr r3, [r3, #12]
  25119. 800b016: 61bb str r3, [r7, #24]
  25120. temp &= ~(GPIO_PUPDR_PUPD0 << (position * 2U));
  25121. 800b018: 69fb ldr r3, [r7, #28]
  25122. 800b01a: 005b lsls r3, r3, #1
  25123. 800b01c: 2203 movs r2, #3
  25124. 800b01e: fa02 f303 lsl.w r3, r2, r3
  25125. 800b022: 43db mvns r3, r3
  25126. 800b024: 69ba ldr r2, [r7, #24]
  25127. 800b026: 4013 ands r3, r2
  25128. 800b028: 61bb str r3, [r7, #24]
  25129. temp |= ((GPIO_Init->Pull) << (position * 2U));
  25130. 800b02a: 683b ldr r3, [r7, #0]
  25131. 800b02c: 689a ldr r2, [r3, #8]
  25132. 800b02e: 69fb ldr r3, [r7, #28]
  25133. 800b030: 005b lsls r3, r3, #1
  25134. 800b032: fa02 f303 lsl.w r3, r2, r3
  25135. 800b036: 69ba ldr r2, [r7, #24]
  25136. 800b038: 4313 orrs r3, r2
  25137. 800b03a: 61bb str r3, [r7, #24]
  25138. GPIOx->PUPDR = temp;
  25139. 800b03c: 687b ldr r3, [r7, #4]
  25140. 800b03e: 69ba ldr r2, [r7, #24]
  25141. 800b040: 60da str r2, [r3, #12]
  25142. }
  25143. /* In case of Alternate function mode selection */
  25144. if ((GPIO_Init->Mode & GPIO_MODE) == MODE_AF)
  25145. 800b042: 683b ldr r3, [r7, #0]
  25146. 800b044: 685b ldr r3, [r3, #4]
  25147. 800b046: f003 0303 and.w r3, r3, #3
  25148. 800b04a: 2b02 cmp r3, #2
  25149. 800b04c: d123 bne.n 800b096 <HAL_GPIO_Init+0x136>
  25150. /* Check the Alternate function parameters */
  25151. assert_param(IS_GPIO_AF_INSTANCE(GPIOx));
  25152. assert_param(IS_GPIO_AF(GPIO_Init->Alternate));
  25153. /* Configure Alternate function mapped with the current IO */
  25154. temp = GPIOx->AFR[position >> 3U];
  25155. 800b04e: 69fb ldr r3, [r7, #28]
  25156. 800b050: 08da lsrs r2, r3, #3
  25157. 800b052: 687b ldr r3, [r7, #4]
  25158. 800b054: 3208 adds r2, #8
  25159. 800b056: f853 3022 ldr.w r3, [r3, r2, lsl #2]
  25160. 800b05a: 61bb str r3, [r7, #24]
  25161. temp &= ~(0xFU << ((position & 0x07U) * 4U));
  25162. 800b05c: 69fb ldr r3, [r7, #28]
  25163. 800b05e: f003 0307 and.w r3, r3, #7
  25164. 800b062: 009b lsls r3, r3, #2
  25165. 800b064: 220f movs r2, #15
  25166. 800b066: fa02 f303 lsl.w r3, r2, r3
  25167. 800b06a: 43db mvns r3, r3
  25168. 800b06c: 69ba ldr r2, [r7, #24]
  25169. 800b06e: 4013 ands r3, r2
  25170. 800b070: 61bb str r3, [r7, #24]
  25171. temp |= ((GPIO_Init->Alternate) << ((position & 0x07U) * 4U));
  25172. 800b072: 683b ldr r3, [r7, #0]
  25173. 800b074: 691a ldr r2, [r3, #16]
  25174. 800b076: 69fb ldr r3, [r7, #28]
  25175. 800b078: f003 0307 and.w r3, r3, #7
  25176. 800b07c: 009b lsls r3, r3, #2
  25177. 800b07e: fa02 f303 lsl.w r3, r2, r3
  25178. 800b082: 69ba ldr r2, [r7, #24]
  25179. 800b084: 4313 orrs r3, r2
  25180. 800b086: 61bb str r3, [r7, #24]
  25181. GPIOx->AFR[position >> 3U] = temp;
  25182. 800b088: 69fb ldr r3, [r7, #28]
  25183. 800b08a: 08da lsrs r2, r3, #3
  25184. 800b08c: 687b ldr r3, [r7, #4]
  25185. 800b08e: 3208 adds r2, #8
  25186. 800b090: 69b9 ldr r1, [r7, #24]
  25187. 800b092: f843 1022 str.w r1, [r3, r2, lsl #2]
  25188. }
  25189. /* Configure IO Direction mode (Input, Output, Alternate or Analog) */
  25190. temp = GPIOx->MODER;
  25191. 800b096: 687b ldr r3, [r7, #4]
  25192. 800b098: 681b ldr r3, [r3, #0]
  25193. 800b09a: 61bb str r3, [r7, #24]
  25194. temp &= ~(GPIO_MODER_MODE0 << (position * 2U));
  25195. 800b09c: 69fb ldr r3, [r7, #28]
  25196. 800b09e: 005b lsls r3, r3, #1
  25197. 800b0a0: 2203 movs r2, #3
  25198. 800b0a2: fa02 f303 lsl.w r3, r2, r3
  25199. 800b0a6: 43db mvns r3, r3
  25200. 800b0a8: 69ba ldr r2, [r7, #24]
  25201. 800b0aa: 4013 ands r3, r2
  25202. 800b0ac: 61bb str r3, [r7, #24]
  25203. temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2U));
  25204. 800b0ae: 683b ldr r3, [r7, #0]
  25205. 800b0b0: 685b ldr r3, [r3, #4]
  25206. 800b0b2: f003 0203 and.w r2, r3, #3
  25207. 800b0b6: 69fb ldr r3, [r7, #28]
  25208. 800b0b8: 005b lsls r3, r3, #1
  25209. 800b0ba: fa02 f303 lsl.w r3, r2, r3
  25210. 800b0be: 69ba ldr r2, [r7, #24]
  25211. 800b0c0: 4313 orrs r3, r2
  25212. 800b0c2: 61bb str r3, [r7, #24]
  25213. GPIOx->MODER = temp;
  25214. 800b0c4: 687b ldr r3, [r7, #4]
  25215. 800b0c6: 69ba ldr r2, [r7, #24]
  25216. 800b0c8: 601a str r2, [r3, #0]
  25217. /*--------------------- EXTI Mode Configuration ------------------------*/
  25218. /* Configure the External Interrupt or event for the current IO */
  25219. if ((GPIO_Init->Mode & EXTI_MODE) != 0x00U)
  25220. 800b0ca: 683b ldr r3, [r7, #0]
  25221. 800b0cc: 685b ldr r3, [r3, #4]
  25222. 800b0ce: f403 3340 and.w r3, r3, #196608 @ 0x30000
  25223. 800b0d2: 2b00 cmp r3, #0
  25224. 800b0d4: f000 80e0 beq.w 800b298 <HAL_GPIO_Init+0x338>
  25225. {
  25226. /* Enable SYSCFG Clock */
  25227. __HAL_RCC_SYSCFG_CLK_ENABLE();
  25228. 800b0d8: 4b2f ldr r3, [pc, #188] @ (800b198 <HAL_GPIO_Init+0x238>)
  25229. 800b0da: f8d3 30f4 ldr.w r3, [r3, #244] @ 0xf4
  25230. 800b0de: 4a2e ldr r2, [pc, #184] @ (800b198 <HAL_GPIO_Init+0x238>)
  25231. 800b0e0: f043 0302 orr.w r3, r3, #2
  25232. 800b0e4: f8c2 30f4 str.w r3, [r2, #244] @ 0xf4
  25233. 800b0e8: 4b2b ldr r3, [pc, #172] @ (800b198 <HAL_GPIO_Init+0x238>)
  25234. 800b0ea: f8d3 30f4 ldr.w r3, [r3, #244] @ 0xf4
  25235. 800b0ee: f003 0302 and.w r3, r3, #2
  25236. 800b0f2: 60fb str r3, [r7, #12]
  25237. 800b0f4: 68fb ldr r3, [r7, #12]
  25238. temp = SYSCFG->EXTICR[position >> 2U];
  25239. 800b0f6: 4a29 ldr r2, [pc, #164] @ (800b19c <HAL_GPIO_Init+0x23c>)
  25240. 800b0f8: 69fb ldr r3, [r7, #28]
  25241. 800b0fa: 089b lsrs r3, r3, #2
  25242. 800b0fc: 3302 adds r3, #2
  25243. 800b0fe: f852 3023 ldr.w r3, [r2, r3, lsl #2]
  25244. 800b102: 61bb str r3, [r7, #24]
  25245. temp &= ~(0x0FUL << (4U * (position & 0x03U)));
  25246. 800b104: 69fb ldr r3, [r7, #28]
  25247. 800b106: f003 0303 and.w r3, r3, #3
  25248. 800b10a: 009b lsls r3, r3, #2
  25249. 800b10c: 220f movs r2, #15
  25250. 800b10e: fa02 f303 lsl.w r3, r2, r3
  25251. 800b112: 43db mvns r3, r3
  25252. 800b114: 69ba ldr r2, [r7, #24]
  25253. 800b116: 4013 ands r3, r2
  25254. 800b118: 61bb str r3, [r7, #24]
  25255. temp |= (GPIO_GET_INDEX(GPIOx) << (4U * (position & 0x03U)));
  25256. 800b11a: 687b ldr r3, [r7, #4]
  25257. 800b11c: 4a20 ldr r2, [pc, #128] @ (800b1a0 <HAL_GPIO_Init+0x240>)
  25258. 800b11e: 4293 cmp r3, r2
  25259. 800b120: d052 beq.n 800b1c8 <HAL_GPIO_Init+0x268>
  25260. 800b122: 687b ldr r3, [r7, #4]
  25261. 800b124: 4a1f ldr r2, [pc, #124] @ (800b1a4 <HAL_GPIO_Init+0x244>)
  25262. 800b126: 4293 cmp r3, r2
  25263. 800b128: d031 beq.n 800b18e <HAL_GPIO_Init+0x22e>
  25264. 800b12a: 687b ldr r3, [r7, #4]
  25265. 800b12c: 4a1e ldr r2, [pc, #120] @ (800b1a8 <HAL_GPIO_Init+0x248>)
  25266. 800b12e: 4293 cmp r3, r2
  25267. 800b130: d02b beq.n 800b18a <HAL_GPIO_Init+0x22a>
  25268. 800b132: 687b ldr r3, [r7, #4]
  25269. 800b134: 4a1d ldr r2, [pc, #116] @ (800b1ac <HAL_GPIO_Init+0x24c>)
  25270. 800b136: 4293 cmp r3, r2
  25271. 800b138: d025 beq.n 800b186 <HAL_GPIO_Init+0x226>
  25272. 800b13a: 687b ldr r3, [r7, #4]
  25273. 800b13c: 4a1c ldr r2, [pc, #112] @ (800b1b0 <HAL_GPIO_Init+0x250>)
  25274. 800b13e: 4293 cmp r3, r2
  25275. 800b140: d01f beq.n 800b182 <HAL_GPIO_Init+0x222>
  25276. 800b142: 687b ldr r3, [r7, #4]
  25277. 800b144: 4a1b ldr r2, [pc, #108] @ (800b1b4 <HAL_GPIO_Init+0x254>)
  25278. 800b146: 4293 cmp r3, r2
  25279. 800b148: d019 beq.n 800b17e <HAL_GPIO_Init+0x21e>
  25280. 800b14a: 687b ldr r3, [r7, #4]
  25281. 800b14c: 4a1a ldr r2, [pc, #104] @ (800b1b8 <HAL_GPIO_Init+0x258>)
  25282. 800b14e: 4293 cmp r3, r2
  25283. 800b150: d013 beq.n 800b17a <HAL_GPIO_Init+0x21a>
  25284. 800b152: 687b ldr r3, [r7, #4]
  25285. 800b154: 4a19 ldr r2, [pc, #100] @ (800b1bc <HAL_GPIO_Init+0x25c>)
  25286. 800b156: 4293 cmp r3, r2
  25287. 800b158: d00d beq.n 800b176 <HAL_GPIO_Init+0x216>
  25288. 800b15a: 687b ldr r3, [r7, #4]
  25289. 800b15c: 4a18 ldr r2, [pc, #96] @ (800b1c0 <HAL_GPIO_Init+0x260>)
  25290. 800b15e: 4293 cmp r3, r2
  25291. 800b160: d007 beq.n 800b172 <HAL_GPIO_Init+0x212>
  25292. 800b162: 687b ldr r3, [r7, #4]
  25293. 800b164: 4a17 ldr r2, [pc, #92] @ (800b1c4 <HAL_GPIO_Init+0x264>)
  25294. 800b166: 4293 cmp r3, r2
  25295. 800b168: d101 bne.n 800b16e <HAL_GPIO_Init+0x20e>
  25296. 800b16a: 2309 movs r3, #9
  25297. 800b16c: e02d b.n 800b1ca <HAL_GPIO_Init+0x26a>
  25298. 800b16e: 230a movs r3, #10
  25299. 800b170: e02b b.n 800b1ca <HAL_GPIO_Init+0x26a>
  25300. 800b172: 2308 movs r3, #8
  25301. 800b174: e029 b.n 800b1ca <HAL_GPIO_Init+0x26a>
  25302. 800b176: 2307 movs r3, #7
  25303. 800b178: e027 b.n 800b1ca <HAL_GPIO_Init+0x26a>
  25304. 800b17a: 2306 movs r3, #6
  25305. 800b17c: e025 b.n 800b1ca <HAL_GPIO_Init+0x26a>
  25306. 800b17e: 2305 movs r3, #5
  25307. 800b180: e023 b.n 800b1ca <HAL_GPIO_Init+0x26a>
  25308. 800b182: 2304 movs r3, #4
  25309. 800b184: e021 b.n 800b1ca <HAL_GPIO_Init+0x26a>
  25310. 800b186: 2303 movs r3, #3
  25311. 800b188: e01f b.n 800b1ca <HAL_GPIO_Init+0x26a>
  25312. 800b18a: 2302 movs r3, #2
  25313. 800b18c: e01d b.n 800b1ca <HAL_GPIO_Init+0x26a>
  25314. 800b18e: 2301 movs r3, #1
  25315. 800b190: e01b b.n 800b1ca <HAL_GPIO_Init+0x26a>
  25316. 800b192: bf00 nop
  25317. 800b194: 58000080 .word 0x58000080
  25318. 800b198: 58024400 .word 0x58024400
  25319. 800b19c: 58000400 .word 0x58000400
  25320. 800b1a0: 58020000 .word 0x58020000
  25321. 800b1a4: 58020400 .word 0x58020400
  25322. 800b1a8: 58020800 .word 0x58020800
  25323. 800b1ac: 58020c00 .word 0x58020c00
  25324. 800b1b0: 58021000 .word 0x58021000
  25325. 800b1b4: 58021400 .word 0x58021400
  25326. 800b1b8: 58021800 .word 0x58021800
  25327. 800b1bc: 58021c00 .word 0x58021c00
  25328. 800b1c0: 58022000 .word 0x58022000
  25329. 800b1c4: 58022400 .word 0x58022400
  25330. 800b1c8: 2300 movs r3, #0
  25331. 800b1ca: 69fa ldr r2, [r7, #28]
  25332. 800b1cc: f002 0203 and.w r2, r2, #3
  25333. 800b1d0: 0092 lsls r2, r2, #2
  25334. 800b1d2: 4093 lsls r3, r2
  25335. 800b1d4: 69ba ldr r2, [r7, #24]
  25336. 800b1d6: 4313 orrs r3, r2
  25337. 800b1d8: 61bb str r3, [r7, #24]
  25338. SYSCFG->EXTICR[position >> 2U] = temp;
  25339. 800b1da: 4938 ldr r1, [pc, #224] @ (800b2bc <HAL_GPIO_Init+0x35c>)
  25340. 800b1dc: 69fb ldr r3, [r7, #28]
  25341. 800b1de: 089b lsrs r3, r3, #2
  25342. 800b1e0: 3302 adds r3, #2
  25343. 800b1e2: 69ba ldr r2, [r7, #24]
  25344. 800b1e4: f841 2023 str.w r2, [r1, r3, lsl #2]
  25345. /* Clear Rising Falling edge configuration */
  25346. temp = EXTI->RTSR1;
  25347. 800b1e8: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  25348. 800b1ec: 681b ldr r3, [r3, #0]
  25349. 800b1ee: 61bb str r3, [r7, #24]
  25350. temp &= ~(iocurrent);
  25351. 800b1f0: 693b ldr r3, [r7, #16]
  25352. 800b1f2: 43db mvns r3, r3
  25353. 800b1f4: 69ba ldr r2, [r7, #24]
  25354. 800b1f6: 4013 ands r3, r2
  25355. 800b1f8: 61bb str r3, [r7, #24]
  25356. if ((GPIO_Init->Mode & TRIGGER_RISING) != 0x00U)
  25357. 800b1fa: 683b ldr r3, [r7, #0]
  25358. 800b1fc: 685b ldr r3, [r3, #4]
  25359. 800b1fe: f403 1380 and.w r3, r3, #1048576 @ 0x100000
  25360. 800b202: 2b00 cmp r3, #0
  25361. 800b204: d003 beq.n 800b20e <HAL_GPIO_Init+0x2ae>
  25362. {
  25363. temp |= iocurrent;
  25364. 800b206: 69ba ldr r2, [r7, #24]
  25365. 800b208: 693b ldr r3, [r7, #16]
  25366. 800b20a: 4313 orrs r3, r2
  25367. 800b20c: 61bb str r3, [r7, #24]
  25368. }
  25369. EXTI->RTSR1 = temp;
  25370. 800b20e: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  25371. 800b212: 69bb ldr r3, [r7, #24]
  25372. 800b214: 6013 str r3, [r2, #0]
  25373. temp = EXTI->FTSR1;
  25374. 800b216: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  25375. 800b21a: 685b ldr r3, [r3, #4]
  25376. 800b21c: 61bb str r3, [r7, #24]
  25377. temp &= ~(iocurrent);
  25378. 800b21e: 693b ldr r3, [r7, #16]
  25379. 800b220: 43db mvns r3, r3
  25380. 800b222: 69ba ldr r2, [r7, #24]
  25381. 800b224: 4013 ands r3, r2
  25382. 800b226: 61bb str r3, [r7, #24]
  25383. if ((GPIO_Init->Mode & TRIGGER_FALLING) != 0x00U)
  25384. 800b228: 683b ldr r3, [r7, #0]
  25385. 800b22a: 685b ldr r3, [r3, #4]
  25386. 800b22c: f403 1300 and.w r3, r3, #2097152 @ 0x200000
  25387. 800b230: 2b00 cmp r3, #0
  25388. 800b232: d003 beq.n 800b23c <HAL_GPIO_Init+0x2dc>
  25389. {
  25390. temp |= iocurrent;
  25391. 800b234: 69ba ldr r2, [r7, #24]
  25392. 800b236: 693b ldr r3, [r7, #16]
  25393. 800b238: 4313 orrs r3, r2
  25394. 800b23a: 61bb str r3, [r7, #24]
  25395. }
  25396. EXTI->FTSR1 = temp;
  25397. 800b23c: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  25398. 800b240: 69bb ldr r3, [r7, #24]
  25399. 800b242: 6053 str r3, [r2, #4]
  25400. temp = EXTI_CurrentCPU->EMR1;
  25401. 800b244: 697b ldr r3, [r7, #20]
  25402. 800b246: 685b ldr r3, [r3, #4]
  25403. 800b248: 61bb str r3, [r7, #24]
  25404. temp &= ~(iocurrent);
  25405. 800b24a: 693b ldr r3, [r7, #16]
  25406. 800b24c: 43db mvns r3, r3
  25407. 800b24e: 69ba ldr r2, [r7, #24]
  25408. 800b250: 4013 ands r3, r2
  25409. 800b252: 61bb str r3, [r7, #24]
  25410. if ((GPIO_Init->Mode & EXTI_EVT) != 0x00U)
  25411. 800b254: 683b ldr r3, [r7, #0]
  25412. 800b256: 685b ldr r3, [r3, #4]
  25413. 800b258: f403 3300 and.w r3, r3, #131072 @ 0x20000
  25414. 800b25c: 2b00 cmp r3, #0
  25415. 800b25e: d003 beq.n 800b268 <HAL_GPIO_Init+0x308>
  25416. {
  25417. temp |= iocurrent;
  25418. 800b260: 69ba ldr r2, [r7, #24]
  25419. 800b262: 693b ldr r3, [r7, #16]
  25420. 800b264: 4313 orrs r3, r2
  25421. 800b266: 61bb str r3, [r7, #24]
  25422. }
  25423. EXTI_CurrentCPU->EMR1 = temp;
  25424. 800b268: 697b ldr r3, [r7, #20]
  25425. 800b26a: 69ba ldr r2, [r7, #24]
  25426. 800b26c: 605a str r2, [r3, #4]
  25427. /* Clear EXTI line configuration */
  25428. temp = EXTI_CurrentCPU->IMR1;
  25429. 800b26e: 697b ldr r3, [r7, #20]
  25430. 800b270: 681b ldr r3, [r3, #0]
  25431. 800b272: 61bb str r3, [r7, #24]
  25432. temp &= ~(iocurrent);
  25433. 800b274: 693b ldr r3, [r7, #16]
  25434. 800b276: 43db mvns r3, r3
  25435. 800b278: 69ba ldr r2, [r7, #24]
  25436. 800b27a: 4013 ands r3, r2
  25437. 800b27c: 61bb str r3, [r7, #24]
  25438. if ((GPIO_Init->Mode & EXTI_IT) != 0x00U)
  25439. 800b27e: 683b ldr r3, [r7, #0]
  25440. 800b280: 685b ldr r3, [r3, #4]
  25441. 800b282: f403 3380 and.w r3, r3, #65536 @ 0x10000
  25442. 800b286: 2b00 cmp r3, #0
  25443. 800b288: d003 beq.n 800b292 <HAL_GPIO_Init+0x332>
  25444. {
  25445. temp |= iocurrent;
  25446. 800b28a: 69ba ldr r2, [r7, #24]
  25447. 800b28c: 693b ldr r3, [r7, #16]
  25448. 800b28e: 4313 orrs r3, r2
  25449. 800b290: 61bb str r3, [r7, #24]
  25450. }
  25451. EXTI_CurrentCPU->IMR1 = temp;
  25452. 800b292: 697b ldr r3, [r7, #20]
  25453. 800b294: 69ba ldr r2, [r7, #24]
  25454. 800b296: 601a str r2, [r3, #0]
  25455. }
  25456. }
  25457. position++;
  25458. 800b298: 69fb ldr r3, [r7, #28]
  25459. 800b29a: 3301 adds r3, #1
  25460. 800b29c: 61fb str r3, [r7, #28]
  25461. while (((GPIO_Init->Pin) >> position) != 0x00U)
  25462. 800b29e: 683b ldr r3, [r7, #0]
  25463. 800b2a0: 681a ldr r2, [r3, #0]
  25464. 800b2a2: 69fb ldr r3, [r7, #28]
  25465. 800b2a4: fa22 f303 lsr.w r3, r2, r3
  25466. 800b2a8: 2b00 cmp r3, #0
  25467. 800b2aa: f47f ae63 bne.w 800af74 <HAL_GPIO_Init+0x14>
  25468. }
  25469. }
  25470. 800b2ae: bf00 nop
  25471. 800b2b0: bf00 nop
  25472. 800b2b2: 3724 adds r7, #36 @ 0x24
  25473. 800b2b4: 46bd mov sp, r7
  25474. 800b2b6: f85d 7b04 ldr.w r7, [sp], #4
  25475. 800b2ba: 4770 bx lr
  25476. 800b2bc: 58000400 .word 0x58000400
  25477. 0800b2c0 <HAL_GPIO_ReadPin>:
  25478. * @param GPIO_Pin: specifies the port bit to read.
  25479. * This parameter can be GPIO_PIN_x where x can be (0..15).
  25480. * @retval The input port pin value.
  25481. */
  25482. GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
  25483. {
  25484. 800b2c0: b480 push {r7}
  25485. 800b2c2: b085 sub sp, #20
  25486. 800b2c4: af00 add r7, sp, #0
  25487. 800b2c6: 6078 str r0, [r7, #4]
  25488. 800b2c8: 460b mov r3, r1
  25489. 800b2ca: 807b strh r3, [r7, #2]
  25490. GPIO_PinState bitstatus;
  25491. /* Check the parameters */
  25492. assert_param(IS_GPIO_PIN(GPIO_Pin));
  25493. if ((GPIOx->IDR & GPIO_Pin) != 0x00U)
  25494. 800b2cc: 687b ldr r3, [r7, #4]
  25495. 800b2ce: 691a ldr r2, [r3, #16]
  25496. 800b2d0: 887b ldrh r3, [r7, #2]
  25497. 800b2d2: 4013 ands r3, r2
  25498. 800b2d4: 2b00 cmp r3, #0
  25499. 800b2d6: d002 beq.n 800b2de <HAL_GPIO_ReadPin+0x1e>
  25500. {
  25501. bitstatus = GPIO_PIN_SET;
  25502. 800b2d8: 2301 movs r3, #1
  25503. 800b2da: 73fb strb r3, [r7, #15]
  25504. 800b2dc: e001 b.n 800b2e2 <HAL_GPIO_ReadPin+0x22>
  25505. }
  25506. else
  25507. {
  25508. bitstatus = GPIO_PIN_RESET;
  25509. 800b2de: 2300 movs r3, #0
  25510. 800b2e0: 73fb strb r3, [r7, #15]
  25511. }
  25512. return bitstatus;
  25513. 800b2e2: 7bfb ldrb r3, [r7, #15]
  25514. }
  25515. 800b2e4: 4618 mov r0, r3
  25516. 800b2e6: 3714 adds r7, #20
  25517. 800b2e8: 46bd mov sp, r7
  25518. 800b2ea: f85d 7b04 ldr.w r7, [sp], #4
  25519. 800b2ee: 4770 bx lr
  25520. 0800b2f0 <HAL_GPIO_WritePin>:
  25521. * @arg GPIO_PIN_RESET: to clear the port pin
  25522. * @arg GPIO_PIN_SET: to set the port pin
  25523. * @retval None
  25524. */
  25525. void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
  25526. {
  25527. 800b2f0: b480 push {r7}
  25528. 800b2f2: b083 sub sp, #12
  25529. 800b2f4: af00 add r7, sp, #0
  25530. 800b2f6: 6078 str r0, [r7, #4]
  25531. 800b2f8: 460b mov r3, r1
  25532. 800b2fa: 807b strh r3, [r7, #2]
  25533. 800b2fc: 4613 mov r3, r2
  25534. 800b2fe: 707b strb r3, [r7, #1]
  25535. /* Check the parameters */
  25536. assert_param(IS_GPIO_PIN(GPIO_Pin));
  25537. assert_param(IS_GPIO_PIN_ACTION(PinState));
  25538. if (PinState != GPIO_PIN_RESET)
  25539. 800b300: 787b ldrb r3, [r7, #1]
  25540. 800b302: 2b00 cmp r3, #0
  25541. 800b304: d003 beq.n 800b30e <HAL_GPIO_WritePin+0x1e>
  25542. {
  25543. GPIOx->BSRR = GPIO_Pin;
  25544. 800b306: 887a ldrh r2, [r7, #2]
  25545. 800b308: 687b ldr r3, [r7, #4]
  25546. 800b30a: 619a str r2, [r3, #24]
  25547. }
  25548. else
  25549. {
  25550. GPIOx->BSRR = (uint32_t)GPIO_Pin << GPIO_NUMBER;
  25551. }
  25552. }
  25553. 800b30c: e003 b.n 800b316 <HAL_GPIO_WritePin+0x26>
  25554. GPIOx->BSRR = (uint32_t)GPIO_Pin << GPIO_NUMBER;
  25555. 800b30e: 887b ldrh r3, [r7, #2]
  25556. 800b310: 041a lsls r2, r3, #16
  25557. 800b312: 687b ldr r3, [r7, #4]
  25558. 800b314: 619a str r2, [r3, #24]
  25559. }
  25560. 800b316: bf00 nop
  25561. 800b318: 370c adds r7, #12
  25562. 800b31a: 46bd mov sp, r7
  25563. 800b31c: f85d 7b04 ldr.w r7, [sp], #4
  25564. 800b320: 4770 bx lr
  25565. 0800b322 <HAL_GPIO_TogglePin>:
  25566. * @param GPIOx: Where x can be (A..K) to select the GPIO peripheral.
  25567. * @param GPIO_Pin: Specifies the pins to be toggled.
  25568. * @retval None
  25569. */
  25570. void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
  25571. {
  25572. 800b322: b480 push {r7}
  25573. 800b324: b085 sub sp, #20
  25574. 800b326: af00 add r7, sp, #0
  25575. 800b328: 6078 str r0, [r7, #4]
  25576. 800b32a: 460b mov r3, r1
  25577. 800b32c: 807b strh r3, [r7, #2]
  25578. /* Check the parameters */
  25579. assert_param(IS_GPIO_PIN(GPIO_Pin));
  25580. /* get current Output Data Register value */
  25581. odr = GPIOx->ODR;
  25582. 800b32e: 687b ldr r3, [r7, #4]
  25583. 800b330: 695b ldr r3, [r3, #20]
  25584. 800b332: 60fb str r3, [r7, #12]
  25585. /* Set selected pins that were at low level, and reset ones that were high */
  25586. GPIOx->BSRR = ((odr & GPIO_Pin) << GPIO_NUMBER) | (~odr & GPIO_Pin);
  25587. 800b334: 887a ldrh r2, [r7, #2]
  25588. 800b336: 68fb ldr r3, [r7, #12]
  25589. 800b338: 4013 ands r3, r2
  25590. 800b33a: 041a lsls r2, r3, #16
  25591. 800b33c: 68fb ldr r3, [r7, #12]
  25592. 800b33e: 43d9 mvns r1, r3
  25593. 800b340: 887b ldrh r3, [r7, #2]
  25594. 800b342: 400b ands r3, r1
  25595. 800b344: 431a orrs r2, r3
  25596. 800b346: 687b ldr r3, [r7, #4]
  25597. 800b348: 619a str r2, [r3, #24]
  25598. }
  25599. 800b34a: bf00 nop
  25600. 800b34c: 3714 adds r7, #20
  25601. 800b34e: 46bd mov sp, r7
  25602. 800b350: f85d 7b04 ldr.w r7, [sp], #4
  25603. 800b354: 4770 bx lr
  25604. 0800b356 <HAL_GPIO_EXTI_IRQHandler>:
  25605. * @brief Handle EXTI interrupt request.
  25606. * @param GPIO_Pin: Specifies the port pin connected to corresponding EXTI line.
  25607. * @retval None
  25608. */
  25609. void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)
  25610. {
  25611. 800b356: b580 push {r7, lr}
  25612. 800b358: b082 sub sp, #8
  25613. 800b35a: af00 add r7, sp, #0
  25614. 800b35c: 4603 mov r3, r0
  25615. 800b35e: 80fb strh r3, [r7, #6]
  25616. __HAL_GPIO_EXTID2_CLEAR_IT(GPIO_Pin);
  25617. HAL_GPIO_EXTI_Callback(GPIO_Pin);
  25618. }
  25619. #else
  25620. /* EXTI line interrupt detected */
  25621. if (__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != 0x00U)
  25622. 800b360: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  25623. 800b364: f8d3 2088 ldr.w r2, [r3, #136] @ 0x88
  25624. 800b368: 88fb ldrh r3, [r7, #6]
  25625. 800b36a: 4013 ands r3, r2
  25626. 800b36c: 2b00 cmp r3, #0
  25627. 800b36e: d008 beq.n 800b382 <HAL_GPIO_EXTI_IRQHandler+0x2c>
  25628. {
  25629. __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
  25630. 800b370: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  25631. 800b374: 88fb ldrh r3, [r7, #6]
  25632. 800b376: f8c2 3088 str.w r3, [r2, #136] @ 0x88
  25633. HAL_GPIO_EXTI_Callback(GPIO_Pin);
  25634. 800b37a: 88fb ldrh r3, [r7, #6]
  25635. 800b37c: 4618 mov r0, r3
  25636. 800b37e: f7f5 f9cd bl 800071c <HAL_GPIO_EXTI_Callback>
  25637. }
  25638. #endif
  25639. }
  25640. 800b382: bf00 nop
  25641. 800b384: 3708 adds r7, #8
  25642. 800b386: 46bd mov sp, r7
  25643. 800b388: bd80 pop {r7, pc}
  25644. ...
  25645. 0800b38c <HAL_PWR_ConfigPVD>:
  25646. * driver. All combination are allowed: wake up only Cortex-M7, wake up
  25647. * only Cortex-M4 or wake up Cortex-M7 and Cortex-M4.
  25648. * @retval None.
  25649. */
  25650. void HAL_PWR_ConfigPVD (PWR_PVDTypeDef *sConfigPVD)
  25651. {
  25652. 800b38c: b480 push {r7}
  25653. 800b38e: b083 sub sp, #12
  25654. 800b390: af00 add r7, sp, #0
  25655. 800b392: 6078 str r0, [r7, #4]
  25656. /* Check the PVD configuration parameter */
  25657. if (sConfigPVD == NULL)
  25658. 800b394: 687b ldr r3, [r7, #4]
  25659. 800b396: 2b00 cmp r3, #0
  25660. 800b398: d069 beq.n 800b46e <HAL_PWR_ConfigPVD+0xe2>
  25661. /* Check the parameters */
  25662. assert_param (IS_PWR_PVD_LEVEL (sConfigPVD->PVDLevel));
  25663. assert_param (IS_PWR_PVD_MODE (sConfigPVD->Mode));
  25664. /* Set PLS[7:5] bits according to PVDLevel value */
  25665. MODIFY_REG (PWR->CR1, PWR_CR1_PLS, sConfigPVD->PVDLevel);
  25666. 800b39a: 4b38 ldr r3, [pc, #224] @ (800b47c <HAL_PWR_ConfigPVD+0xf0>)
  25667. 800b39c: 681b ldr r3, [r3, #0]
  25668. 800b39e: f023 02e0 bic.w r2, r3, #224 @ 0xe0
  25669. 800b3a2: 687b ldr r3, [r7, #4]
  25670. 800b3a4: 681b ldr r3, [r3, #0]
  25671. 800b3a6: 4935 ldr r1, [pc, #212] @ (800b47c <HAL_PWR_ConfigPVD+0xf0>)
  25672. 800b3a8: 4313 orrs r3, r2
  25673. 800b3aa: 600b str r3, [r1, #0]
  25674. /* Clear previous config */
  25675. #if !defined (DUAL_CORE)
  25676. __HAL_PWR_PVD_EXTI_DISABLE_EVENT ();
  25677. 800b3ac: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  25678. 800b3b0: f8d3 3084 ldr.w r3, [r3, #132] @ 0x84
  25679. 800b3b4: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  25680. 800b3b8: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  25681. 800b3bc: f8c2 3084 str.w r3, [r2, #132] @ 0x84
  25682. __HAL_PWR_PVD_EXTI_DISABLE_IT ();
  25683. 800b3c0: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  25684. 800b3c4: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  25685. 800b3c8: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  25686. 800b3cc: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  25687. 800b3d0: f8c2 3080 str.w r3, [r2, #128] @ 0x80
  25688. #endif /* !defined (DUAL_CORE) */
  25689. __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE ();
  25690. 800b3d4: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  25691. 800b3d8: 681b ldr r3, [r3, #0]
  25692. 800b3da: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  25693. 800b3de: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  25694. 800b3e2: 6013 str r3, [r2, #0]
  25695. __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE ();
  25696. 800b3e4: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  25697. 800b3e8: 685b ldr r3, [r3, #4]
  25698. 800b3ea: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  25699. 800b3ee: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  25700. 800b3f2: 6053 str r3, [r2, #4]
  25701. #if !defined (DUAL_CORE)
  25702. /* Interrupt mode configuration */
  25703. if ((sConfigPVD->Mode & PVD_MODE_IT) == PVD_MODE_IT)
  25704. 800b3f4: 687b ldr r3, [r7, #4]
  25705. 800b3f6: 685b ldr r3, [r3, #4]
  25706. 800b3f8: f403 3380 and.w r3, r3, #65536 @ 0x10000
  25707. 800b3fc: 2b00 cmp r3, #0
  25708. 800b3fe: d009 beq.n 800b414 <HAL_PWR_ConfigPVD+0x88>
  25709. {
  25710. __HAL_PWR_PVD_EXTI_ENABLE_IT ();
  25711. 800b400: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  25712. 800b404: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  25713. 800b408: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  25714. 800b40c: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  25715. 800b410: f8c2 3080 str.w r3, [r2, #128] @ 0x80
  25716. }
  25717. /* Event mode configuration */
  25718. if ((sConfigPVD->Mode & PVD_MODE_EVT) == PVD_MODE_EVT)
  25719. 800b414: 687b ldr r3, [r7, #4]
  25720. 800b416: 685b ldr r3, [r3, #4]
  25721. 800b418: f403 3300 and.w r3, r3, #131072 @ 0x20000
  25722. 800b41c: 2b00 cmp r3, #0
  25723. 800b41e: d009 beq.n 800b434 <HAL_PWR_ConfigPVD+0xa8>
  25724. {
  25725. __HAL_PWR_PVD_EXTI_ENABLE_EVENT ();
  25726. 800b420: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  25727. 800b424: f8d3 3084 ldr.w r3, [r3, #132] @ 0x84
  25728. 800b428: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  25729. 800b42c: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  25730. 800b430: f8c2 3084 str.w r3, [r2, #132] @ 0x84
  25731. }
  25732. #endif /* !defined (DUAL_CORE) */
  25733. /* Rising edge configuration */
  25734. if ((sConfigPVD->Mode & PVD_RISING_EDGE) == PVD_RISING_EDGE)
  25735. 800b434: 687b ldr r3, [r7, #4]
  25736. 800b436: 685b ldr r3, [r3, #4]
  25737. 800b438: f003 0301 and.w r3, r3, #1
  25738. 800b43c: 2b00 cmp r3, #0
  25739. 800b43e: d007 beq.n 800b450 <HAL_PWR_ConfigPVD+0xc4>
  25740. {
  25741. __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE ();
  25742. 800b440: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  25743. 800b444: 681b ldr r3, [r3, #0]
  25744. 800b446: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  25745. 800b44a: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  25746. 800b44e: 6013 str r3, [r2, #0]
  25747. }
  25748. /* Falling edge configuration */
  25749. if ((sConfigPVD->Mode & PVD_FALLING_EDGE) == PVD_FALLING_EDGE)
  25750. 800b450: 687b ldr r3, [r7, #4]
  25751. 800b452: 685b ldr r3, [r3, #4]
  25752. 800b454: f003 0302 and.w r3, r3, #2
  25753. 800b458: 2b00 cmp r3, #0
  25754. 800b45a: d009 beq.n 800b470 <HAL_PWR_ConfigPVD+0xe4>
  25755. {
  25756. __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE ();
  25757. 800b45c: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  25758. 800b460: 685b ldr r3, [r3, #4]
  25759. 800b462: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  25760. 800b466: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  25761. 800b46a: 6053 str r3, [r2, #4]
  25762. 800b46c: e000 b.n 800b470 <HAL_PWR_ConfigPVD+0xe4>
  25763. return;
  25764. 800b46e: bf00 nop
  25765. }
  25766. }
  25767. 800b470: 370c adds r7, #12
  25768. 800b472: 46bd mov sp, r7
  25769. 800b474: f85d 7b04 ldr.w r7, [sp], #4
  25770. 800b478: 4770 bx lr
  25771. 800b47a: bf00 nop
  25772. 800b47c: 58024800 .word 0x58024800
  25773. 0800b480 <HAL_PWR_EnablePVD>:
  25774. /**
  25775. * @brief Enable the Programmable Voltage Detector (PVD).
  25776. * @retval None.
  25777. */
  25778. void HAL_PWR_EnablePVD (void)
  25779. {
  25780. 800b480: b480 push {r7}
  25781. 800b482: af00 add r7, sp, #0
  25782. /* Enable the power voltage detector */
  25783. SET_BIT (PWR->CR1, PWR_CR1_PVDEN);
  25784. 800b484: 4b05 ldr r3, [pc, #20] @ (800b49c <HAL_PWR_EnablePVD+0x1c>)
  25785. 800b486: 681b ldr r3, [r3, #0]
  25786. 800b488: 4a04 ldr r2, [pc, #16] @ (800b49c <HAL_PWR_EnablePVD+0x1c>)
  25787. 800b48a: f043 0310 orr.w r3, r3, #16
  25788. 800b48e: 6013 str r3, [r2, #0]
  25789. }
  25790. 800b490: bf00 nop
  25791. 800b492: 46bd mov sp, r7
  25792. 800b494: f85d 7b04 ldr.w r7, [sp], #4
  25793. 800b498: 4770 bx lr
  25794. 800b49a: bf00 nop
  25795. 800b49c: 58024800 .word 0x58024800
  25796. 0800b4a0 <HAL_PWREx_ConfigSupply>:
  25797. * PWR_SMPS_2V5_SUPPLIES_EXT are used only for lines that supports SMPS
  25798. * regulator.
  25799. * @retval HAL status.
  25800. */
  25801. HAL_StatusTypeDef HAL_PWREx_ConfigSupply (uint32_t SupplySource)
  25802. {
  25803. 800b4a0: b580 push {r7, lr}
  25804. 800b4a2: b084 sub sp, #16
  25805. 800b4a4: af00 add r7, sp, #0
  25806. 800b4a6: 6078 str r0, [r7, #4]
  25807. /* Check the parameters */
  25808. assert_param (IS_PWR_SUPPLY (SupplySource));
  25809. /* Check if supply source was configured */
  25810. #if defined (PWR_FLAG_SCUEN)
  25811. if (__HAL_PWR_GET_FLAG (PWR_FLAG_SCUEN) == 0U)
  25812. 800b4a8: 4b19 ldr r3, [pc, #100] @ (800b510 <HAL_PWREx_ConfigSupply+0x70>)
  25813. 800b4aa: 68db ldr r3, [r3, #12]
  25814. 800b4ac: f003 0304 and.w r3, r3, #4
  25815. 800b4b0: 2b04 cmp r3, #4
  25816. 800b4b2: d00a beq.n 800b4ca <HAL_PWREx_ConfigSupply+0x2a>
  25817. #else
  25818. if ((PWR->CR3 & (PWR_CR3_SMPSEN | PWR_CR3_LDOEN | PWR_CR3_BYPASS)) != (PWR_CR3_SMPSEN | PWR_CR3_LDOEN))
  25819. #endif /* defined (PWR_FLAG_SCUEN) */
  25820. {
  25821. /* Check supply configuration */
  25822. if ((PWR->CR3 & PWR_SUPPLY_CONFIG_MASK) != SupplySource)
  25823. 800b4b4: 4b16 ldr r3, [pc, #88] @ (800b510 <HAL_PWREx_ConfigSupply+0x70>)
  25824. 800b4b6: 68db ldr r3, [r3, #12]
  25825. 800b4b8: f003 0307 and.w r3, r3, #7
  25826. 800b4bc: 687a ldr r2, [r7, #4]
  25827. 800b4be: 429a cmp r2, r3
  25828. 800b4c0: d001 beq.n 800b4c6 <HAL_PWREx_ConfigSupply+0x26>
  25829. {
  25830. /* Supply configuration update locked, can't apply a new supply config */
  25831. return HAL_ERROR;
  25832. 800b4c2: 2301 movs r3, #1
  25833. 800b4c4: e01f b.n 800b506 <HAL_PWREx_ConfigSupply+0x66>
  25834. else
  25835. {
  25836. /* Supply configuration update locked, but new supply configuration
  25837. matches with old supply configuration : nothing to do
  25838. */
  25839. return HAL_OK;
  25840. 800b4c6: 2300 movs r3, #0
  25841. 800b4c8: e01d b.n 800b506 <HAL_PWREx_ConfigSupply+0x66>
  25842. }
  25843. }
  25844. /* Set the power supply configuration */
  25845. MODIFY_REG (PWR->CR3, PWR_SUPPLY_CONFIG_MASK, SupplySource);
  25846. 800b4ca: 4b11 ldr r3, [pc, #68] @ (800b510 <HAL_PWREx_ConfigSupply+0x70>)
  25847. 800b4cc: 68db ldr r3, [r3, #12]
  25848. 800b4ce: f023 0207 bic.w r2, r3, #7
  25849. 800b4d2: 490f ldr r1, [pc, #60] @ (800b510 <HAL_PWREx_ConfigSupply+0x70>)
  25850. 800b4d4: 687b ldr r3, [r7, #4]
  25851. 800b4d6: 4313 orrs r3, r2
  25852. 800b4d8: 60cb str r3, [r1, #12]
  25853. /* Get tick */
  25854. tickstart = HAL_GetTick ();
  25855. 800b4da: f7fa fb69 bl 8005bb0 <HAL_GetTick>
  25856. 800b4de: 60f8 str r0, [r7, #12]
  25857. /* Wait till voltage level flag is set */
  25858. while (__HAL_PWR_GET_FLAG (PWR_FLAG_ACTVOSRDY) == 0U)
  25859. 800b4e0: e009 b.n 800b4f6 <HAL_PWREx_ConfigSupply+0x56>
  25860. {
  25861. if ((HAL_GetTick () - tickstart) > PWR_FLAG_SETTING_DELAY)
  25862. 800b4e2: f7fa fb65 bl 8005bb0 <HAL_GetTick>
  25863. 800b4e6: 4602 mov r2, r0
  25864. 800b4e8: 68fb ldr r3, [r7, #12]
  25865. 800b4ea: 1ad3 subs r3, r2, r3
  25866. 800b4ec: f5b3 7f7a cmp.w r3, #1000 @ 0x3e8
  25867. 800b4f0: d901 bls.n 800b4f6 <HAL_PWREx_ConfigSupply+0x56>
  25868. {
  25869. return HAL_ERROR;
  25870. 800b4f2: 2301 movs r3, #1
  25871. 800b4f4: e007 b.n 800b506 <HAL_PWREx_ConfigSupply+0x66>
  25872. while (__HAL_PWR_GET_FLAG (PWR_FLAG_ACTVOSRDY) == 0U)
  25873. 800b4f6: 4b06 ldr r3, [pc, #24] @ (800b510 <HAL_PWREx_ConfigSupply+0x70>)
  25874. 800b4f8: 685b ldr r3, [r3, #4]
  25875. 800b4fa: f403 5300 and.w r3, r3, #8192 @ 0x2000
  25876. 800b4fe: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  25877. 800b502: d1ee bne.n 800b4e2 <HAL_PWREx_ConfigSupply+0x42>
  25878. }
  25879. }
  25880. }
  25881. #endif /* defined (SMPS) */
  25882. return HAL_OK;
  25883. 800b504: 2300 movs r3, #0
  25884. }
  25885. 800b506: 4618 mov r0, r3
  25886. 800b508: 3710 adds r7, #16
  25887. 800b50a: 46bd mov sp, r7
  25888. 800b50c: bd80 pop {r7, pc}
  25889. 800b50e: bf00 nop
  25890. 800b510: 58024800 .word 0x58024800
  25891. 0800b514 <HAL_PWREx_ConfigAVD>:
  25892. * driver. All combination are allowed: wake up only Cortex-M7, wake up
  25893. * only Cortex-M4 and wake up Cortex-M7 and Cortex-M4.
  25894. * @retval None.
  25895. */
  25896. void HAL_PWREx_ConfigAVD (PWREx_AVDTypeDef *sConfigAVD)
  25897. {
  25898. 800b514: b480 push {r7}
  25899. 800b516: b083 sub sp, #12
  25900. 800b518: af00 add r7, sp, #0
  25901. 800b51a: 6078 str r0, [r7, #4]
  25902. /* Check the parameters */
  25903. assert_param (IS_PWR_AVD_LEVEL (sConfigAVD->AVDLevel));
  25904. assert_param (IS_PWR_AVD_MODE (sConfigAVD->Mode));
  25905. /* Set the ALS[18:17] bits according to AVDLevel value */
  25906. MODIFY_REG (PWR->CR1, PWR_CR1_ALS, sConfigAVD->AVDLevel);
  25907. 800b51c: 4b37 ldr r3, [pc, #220] @ (800b5fc <HAL_PWREx_ConfigAVD+0xe8>)
  25908. 800b51e: 681b ldr r3, [r3, #0]
  25909. 800b520: f423 22c0 bic.w r2, r3, #393216 @ 0x60000
  25910. 800b524: 687b ldr r3, [r7, #4]
  25911. 800b526: 681b ldr r3, [r3, #0]
  25912. 800b528: 4934 ldr r1, [pc, #208] @ (800b5fc <HAL_PWREx_ConfigAVD+0xe8>)
  25913. 800b52a: 4313 orrs r3, r2
  25914. 800b52c: 600b str r3, [r1, #0]
  25915. /* Clear any previous config */
  25916. #if !defined (DUAL_CORE)
  25917. __HAL_PWR_AVD_EXTI_DISABLE_EVENT ();
  25918. 800b52e: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  25919. 800b532: f8d3 3084 ldr.w r3, [r3, #132] @ 0x84
  25920. 800b536: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  25921. 800b53a: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  25922. 800b53e: f8c2 3084 str.w r3, [r2, #132] @ 0x84
  25923. __HAL_PWR_AVD_EXTI_DISABLE_IT ();
  25924. 800b542: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  25925. 800b546: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  25926. 800b54a: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  25927. 800b54e: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  25928. 800b552: f8c2 3080 str.w r3, [r2, #128] @ 0x80
  25929. #endif /* !defined (DUAL_CORE) */
  25930. __HAL_PWR_AVD_EXTI_DISABLE_RISING_EDGE ();
  25931. 800b556: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  25932. 800b55a: 681b ldr r3, [r3, #0]
  25933. 800b55c: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  25934. 800b560: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  25935. 800b564: 6013 str r3, [r2, #0]
  25936. __HAL_PWR_AVD_EXTI_DISABLE_FALLING_EDGE ();
  25937. 800b566: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  25938. 800b56a: 685b ldr r3, [r3, #4]
  25939. 800b56c: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  25940. 800b570: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  25941. 800b574: 6053 str r3, [r2, #4]
  25942. #if !defined (DUAL_CORE)
  25943. /* Configure the interrupt mode */
  25944. if ((sConfigAVD->Mode & AVD_MODE_IT) == AVD_MODE_IT)
  25945. 800b576: 687b ldr r3, [r7, #4]
  25946. 800b578: 685b ldr r3, [r3, #4]
  25947. 800b57a: f403 3380 and.w r3, r3, #65536 @ 0x10000
  25948. 800b57e: 2b00 cmp r3, #0
  25949. 800b580: d009 beq.n 800b596 <HAL_PWREx_ConfigAVD+0x82>
  25950. {
  25951. __HAL_PWR_AVD_EXTI_ENABLE_IT ();
  25952. 800b582: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  25953. 800b586: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  25954. 800b58a: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  25955. 800b58e: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  25956. 800b592: f8c2 3080 str.w r3, [r2, #128] @ 0x80
  25957. }
  25958. /* Configure the event mode */
  25959. if ((sConfigAVD->Mode & AVD_MODE_EVT) == AVD_MODE_EVT)
  25960. 800b596: 687b ldr r3, [r7, #4]
  25961. 800b598: 685b ldr r3, [r3, #4]
  25962. 800b59a: f403 3300 and.w r3, r3, #131072 @ 0x20000
  25963. 800b59e: 2b00 cmp r3, #0
  25964. 800b5a0: d009 beq.n 800b5b6 <HAL_PWREx_ConfigAVD+0xa2>
  25965. {
  25966. __HAL_PWR_AVD_EXTI_ENABLE_EVENT ();
  25967. 800b5a2: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  25968. 800b5a6: f8d3 3084 ldr.w r3, [r3, #132] @ 0x84
  25969. 800b5aa: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  25970. 800b5ae: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  25971. 800b5b2: f8c2 3084 str.w r3, [r2, #132] @ 0x84
  25972. }
  25973. #endif /* !defined (DUAL_CORE) */
  25974. /* Rising edge configuration */
  25975. if ((sConfigAVD->Mode & AVD_RISING_EDGE) == AVD_RISING_EDGE)
  25976. 800b5b6: 687b ldr r3, [r7, #4]
  25977. 800b5b8: 685b ldr r3, [r3, #4]
  25978. 800b5ba: f003 0301 and.w r3, r3, #1
  25979. 800b5be: 2b00 cmp r3, #0
  25980. 800b5c0: d007 beq.n 800b5d2 <HAL_PWREx_ConfigAVD+0xbe>
  25981. {
  25982. __HAL_PWR_AVD_EXTI_ENABLE_RISING_EDGE ();
  25983. 800b5c2: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  25984. 800b5c6: 681b ldr r3, [r3, #0]
  25985. 800b5c8: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  25986. 800b5cc: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  25987. 800b5d0: 6013 str r3, [r2, #0]
  25988. }
  25989. /* Falling edge configuration */
  25990. if ((sConfigAVD->Mode & AVD_FALLING_EDGE) == AVD_FALLING_EDGE)
  25991. 800b5d2: 687b ldr r3, [r7, #4]
  25992. 800b5d4: 685b ldr r3, [r3, #4]
  25993. 800b5d6: f003 0302 and.w r3, r3, #2
  25994. 800b5da: 2b00 cmp r3, #0
  25995. 800b5dc: d007 beq.n 800b5ee <HAL_PWREx_ConfigAVD+0xda>
  25996. {
  25997. __HAL_PWR_AVD_EXTI_ENABLE_FALLING_EDGE ();
  25998. 800b5de: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  25999. 800b5e2: 685b ldr r3, [r3, #4]
  26000. 800b5e4: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  26001. 800b5e8: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  26002. 800b5ec: 6053 str r3, [r2, #4]
  26003. }
  26004. }
  26005. 800b5ee: bf00 nop
  26006. 800b5f0: 370c adds r7, #12
  26007. 800b5f2: 46bd mov sp, r7
  26008. 800b5f4: f85d 7b04 ldr.w r7, [sp], #4
  26009. 800b5f8: 4770 bx lr
  26010. 800b5fa: bf00 nop
  26011. 800b5fc: 58024800 .word 0x58024800
  26012. 0800b600 <HAL_PWREx_EnableAVD>:
  26013. /**
  26014. * @brief Enable the Analog Voltage Detector (AVD).
  26015. * @retval None.
  26016. */
  26017. void HAL_PWREx_EnableAVD (void)
  26018. {
  26019. 800b600: b480 push {r7}
  26020. 800b602: af00 add r7, sp, #0
  26021. /* Enable the Analog Voltage Detector */
  26022. SET_BIT (PWR->CR1, PWR_CR1_AVDEN);
  26023. 800b604: 4b05 ldr r3, [pc, #20] @ (800b61c <HAL_PWREx_EnableAVD+0x1c>)
  26024. 800b606: 681b ldr r3, [r3, #0]
  26025. 800b608: 4a04 ldr r2, [pc, #16] @ (800b61c <HAL_PWREx_EnableAVD+0x1c>)
  26026. 800b60a: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  26027. 800b60e: 6013 str r3, [r2, #0]
  26028. }
  26029. 800b610: bf00 nop
  26030. 800b612: 46bd mov sp, r7
  26031. 800b614: f85d 7b04 ldr.w r7, [sp], #4
  26032. 800b618: 4770 bx lr
  26033. 800b61a: bf00 nop
  26034. 800b61c: 58024800 .word 0x58024800
  26035. 0800b620 <HAL_RCC_OscConfig>:
  26036. * supported by this function. User should request a transition to HSE Off
  26037. * first and then HSE On or HSE Bypass.
  26038. * @retval HAL status
  26039. */
  26040. __weak HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
  26041. {
  26042. 800b620: b580 push {r7, lr}
  26043. 800b622: b08c sub sp, #48 @ 0x30
  26044. 800b624: af00 add r7, sp, #0
  26045. 800b626: 6078 str r0, [r7, #4]
  26046. uint32_t tickstart;
  26047. uint32_t temp1_pllckcfg, temp2_pllckcfg;
  26048. /* Check Null pointer */
  26049. if (RCC_OscInitStruct == NULL)
  26050. 800b628: 687b ldr r3, [r7, #4]
  26051. 800b62a: 2b00 cmp r3, #0
  26052. 800b62c: d102 bne.n 800b634 <HAL_RCC_OscConfig+0x14>
  26053. {
  26054. return HAL_ERROR;
  26055. 800b62e: 2301 movs r3, #1
  26056. 800b630: f000 bc48 b.w 800bec4 <HAL_RCC_OscConfig+0x8a4>
  26057. }
  26058. /* Check the parameters */
  26059. assert_param(IS_RCC_OSCILLATORTYPE(RCC_OscInitStruct->OscillatorType));
  26060. /*------------------------------- HSE Configuration ------------------------*/
  26061. if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE)
  26062. 800b634: 687b ldr r3, [r7, #4]
  26063. 800b636: 681b ldr r3, [r3, #0]
  26064. 800b638: f003 0301 and.w r3, r3, #1
  26065. 800b63c: 2b00 cmp r3, #0
  26066. 800b63e: f000 8088 beq.w 800b752 <HAL_RCC_OscConfig+0x132>
  26067. {
  26068. /* Check the parameters */
  26069. assert_param(IS_RCC_HSE(RCC_OscInitStruct->HSEState));
  26070. const uint32_t temp_sysclksrc = __HAL_RCC_GET_SYSCLK_SOURCE();
  26071. 800b642: 4b99 ldr r3, [pc, #612] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26072. 800b644: 691b ldr r3, [r3, #16]
  26073. 800b646: f003 0338 and.w r3, r3, #56 @ 0x38
  26074. 800b64a: 62fb str r3, [r7, #44] @ 0x2c
  26075. const uint32_t temp_pllckselr = RCC->PLLCKSELR;
  26076. 800b64c: 4b96 ldr r3, [pc, #600] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26077. 800b64e: 6a9b ldr r3, [r3, #40] @ 0x28
  26078. 800b650: 62bb str r3, [r7, #40] @ 0x28
  26079. /* When the HSE is used as system clock or clock source for PLL in these cases HSE will not disabled */
  26080. if ((temp_sysclksrc == RCC_CFGR_SWS_HSE) || ((temp_sysclksrc == RCC_CFGR_SWS_PLL1) && ((temp_pllckselr & RCC_PLLCKSELR_PLLSRC) == RCC_PLLCKSELR_PLLSRC_HSE)))
  26081. 800b652: 6afb ldr r3, [r7, #44] @ 0x2c
  26082. 800b654: 2b10 cmp r3, #16
  26083. 800b656: d007 beq.n 800b668 <HAL_RCC_OscConfig+0x48>
  26084. 800b658: 6afb ldr r3, [r7, #44] @ 0x2c
  26085. 800b65a: 2b18 cmp r3, #24
  26086. 800b65c: d111 bne.n 800b682 <HAL_RCC_OscConfig+0x62>
  26087. 800b65e: 6abb ldr r3, [r7, #40] @ 0x28
  26088. 800b660: f003 0303 and.w r3, r3, #3
  26089. 800b664: 2b02 cmp r3, #2
  26090. 800b666: d10c bne.n 800b682 <HAL_RCC_OscConfig+0x62>
  26091. {
  26092. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != 0U) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF))
  26093. 800b668: 4b8f ldr r3, [pc, #572] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26094. 800b66a: 681b ldr r3, [r3, #0]
  26095. 800b66c: f403 3300 and.w r3, r3, #131072 @ 0x20000
  26096. 800b670: 2b00 cmp r3, #0
  26097. 800b672: d06d beq.n 800b750 <HAL_RCC_OscConfig+0x130>
  26098. 800b674: 687b ldr r3, [r7, #4]
  26099. 800b676: 685b ldr r3, [r3, #4]
  26100. 800b678: 2b00 cmp r3, #0
  26101. 800b67a: d169 bne.n 800b750 <HAL_RCC_OscConfig+0x130>
  26102. {
  26103. return HAL_ERROR;
  26104. 800b67c: 2301 movs r3, #1
  26105. 800b67e: f000 bc21 b.w 800bec4 <HAL_RCC_OscConfig+0x8a4>
  26106. }
  26107. }
  26108. else
  26109. {
  26110. /* Set the new HSE configuration ---------------------------------------*/
  26111. __HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState);
  26112. 800b682: 687b ldr r3, [r7, #4]
  26113. 800b684: 685b ldr r3, [r3, #4]
  26114. 800b686: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  26115. 800b68a: d106 bne.n 800b69a <HAL_RCC_OscConfig+0x7a>
  26116. 800b68c: 4b86 ldr r3, [pc, #536] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26117. 800b68e: 681b ldr r3, [r3, #0]
  26118. 800b690: 4a85 ldr r2, [pc, #532] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26119. 800b692: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  26120. 800b696: 6013 str r3, [r2, #0]
  26121. 800b698: e02e b.n 800b6f8 <HAL_RCC_OscConfig+0xd8>
  26122. 800b69a: 687b ldr r3, [r7, #4]
  26123. 800b69c: 685b ldr r3, [r3, #4]
  26124. 800b69e: 2b00 cmp r3, #0
  26125. 800b6a0: d10c bne.n 800b6bc <HAL_RCC_OscConfig+0x9c>
  26126. 800b6a2: 4b81 ldr r3, [pc, #516] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26127. 800b6a4: 681b ldr r3, [r3, #0]
  26128. 800b6a6: 4a80 ldr r2, [pc, #512] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26129. 800b6a8: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  26130. 800b6ac: 6013 str r3, [r2, #0]
  26131. 800b6ae: 4b7e ldr r3, [pc, #504] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26132. 800b6b0: 681b ldr r3, [r3, #0]
  26133. 800b6b2: 4a7d ldr r2, [pc, #500] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26134. 800b6b4: f423 2380 bic.w r3, r3, #262144 @ 0x40000
  26135. 800b6b8: 6013 str r3, [r2, #0]
  26136. 800b6ba: e01d b.n 800b6f8 <HAL_RCC_OscConfig+0xd8>
  26137. 800b6bc: 687b ldr r3, [r7, #4]
  26138. 800b6be: 685b ldr r3, [r3, #4]
  26139. 800b6c0: f5b3 2fa0 cmp.w r3, #327680 @ 0x50000
  26140. 800b6c4: d10c bne.n 800b6e0 <HAL_RCC_OscConfig+0xc0>
  26141. 800b6c6: 4b78 ldr r3, [pc, #480] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26142. 800b6c8: 681b ldr r3, [r3, #0]
  26143. 800b6ca: 4a77 ldr r2, [pc, #476] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26144. 800b6cc: f443 2380 orr.w r3, r3, #262144 @ 0x40000
  26145. 800b6d0: 6013 str r3, [r2, #0]
  26146. 800b6d2: 4b75 ldr r3, [pc, #468] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26147. 800b6d4: 681b ldr r3, [r3, #0]
  26148. 800b6d6: 4a74 ldr r2, [pc, #464] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26149. 800b6d8: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  26150. 800b6dc: 6013 str r3, [r2, #0]
  26151. 800b6de: e00b b.n 800b6f8 <HAL_RCC_OscConfig+0xd8>
  26152. 800b6e0: 4b71 ldr r3, [pc, #452] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26153. 800b6e2: 681b ldr r3, [r3, #0]
  26154. 800b6e4: 4a70 ldr r2, [pc, #448] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26155. 800b6e6: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  26156. 800b6ea: 6013 str r3, [r2, #0]
  26157. 800b6ec: 4b6e ldr r3, [pc, #440] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26158. 800b6ee: 681b ldr r3, [r3, #0]
  26159. 800b6f0: 4a6d ldr r2, [pc, #436] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26160. 800b6f2: f423 2380 bic.w r3, r3, #262144 @ 0x40000
  26161. 800b6f6: 6013 str r3, [r2, #0]
  26162. /* Check the HSE State */
  26163. if (RCC_OscInitStruct->HSEState != RCC_HSE_OFF)
  26164. 800b6f8: 687b ldr r3, [r7, #4]
  26165. 800b6fa: 685b ldr r3, [r3, #4]
  26166. 800b6fc: 2b00 cmp r3, #0
  26167. 800b6fe: d013 beq.n 800b728 <HAL_RCC_OscConfig+0x108>
  26168. {
  26169. /* Get Start Tick*/
  26170. tickstart = HAL_GetTick();
  26171. 800b700: f7fa fa56 bl 8005bb0 <HAL_GetTick>
  26172. 800b704: 6278 str r0, [r7, #36] @ 0x24
  26173. /* Wait till HSE is ready */
  26174. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == 0U)
  26175. 800b706: e008 b.n 800b71a <HAL_RCC_OscConfig+0xfa>
  26176. {
  26177. if ((uint32_t)(HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE)
  26178. 800b708: f7fa fa52 bl 8005bb0 <HAL_GetTick>
  26179. 800b70c: 4602 mov r2, r0
  26180. 800b70e: 6a7b ldr r3, [r7, #36] @ 0x24
  26181. 800b710: 1ad3 subs r3, r2, r3
  26182. 800b712: 2b64 cmp r3, #100 @ 0x64
  26183. 800b714: d901 bls.n 800b71a <HAL_RCC_OscConfig+0xfa>
  26184. {
  26185. return HAL_TIMEOUT;
  26186. 800b716: 2303 movs r3, #3
  26187. 800b718: e3d4 b.n 800bec4 <HAL_RCC_OscConfig+0x8a4>
  26188. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == 0U)
  26189. 800b71a: 4b63 ldr r3, [pc, #396] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26190. 800b71c: 681b ldr r3, [r3, #0]
  26191. 800b71e: f403 3300 and.w r3, r3, #131072 @ 0x20000
  26192. 800b722: 2b00 cmp r3, #0
  26193. 800b724: d0f0 beq.n 800b708 <HAL_RCC_OscConfig+0xe8>
  26194. 800b726: e014 b.n 800b752 <HAL_RCC_OscConfig+0x132>
  26195. }
  26196. }
  26197. else
  26198. {
  26199. /* Get Start Tick*/
  26200. tickstart = HAL_GetTick();
  26201. 800b728: f7fa fa42 bl 8005bb0 <HAL_GetTick>
  26202. 800b72c: 6278 str r0, [r7, #36] @ 0x24
  26203. /* Wait till HSE is disabled */
  26204. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != 0U)
  26205. 800b72e: e008 b.n 800b742 <HAL_RCC_OscConfig+0x122>
  26206. {
  26207. if ((uint32_t)(HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE)
  26208. 800b730: f7fa fa3e bl 8005bb0 <HAL_GetTick>
  26209. 800b734: 4602 mov r2, r0
  26210. 800b736: 6a7b ldr r3, [r7, #36] @ 0x24
  26211. 800b738: 1ad3 subs r3, r2, r3
  26212. 800b73a: 2b64 cmp r3, #100 @ 0x64
  26213. 800b73c: d901 bls.n 800b742 <HAL_RCC_OscConfig+0x122>
  26214. {
  26215. return HAL_TIMEOUT;
  26216. 800b73e: 2303 movs r3, #3
  26217. 800b740: e3c0 b.n 800bec4 <HAL_RCC_OscConfig+0x8a4>
  26218. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != 0U)
  26219. 800b742: 4b59 ldr r3, [pc, #356] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26220. 800b744: 681b ldr r3, [r3, #0]
  26221. 800b746: f403 3300 and.w r3, r3, #131072 @ 0x20000
  26222. 800b74a: 2b00 cmp r3, #0
  26223. 800b74c: d1f0 bne.n 800b730 <HAL_RCC_OscConfig+0x110>
  26224. 800b74e: e000 b.n 800b752 <HAL_RCC_OscConfig+0x132>
  26225. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != 0U) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF))
  26226. 800b750: bf00 nop
  26227. }
  26228. }
  26229. }
  26230. }
  26231. /*----------------------------- HSI Configuration --------------------------*/
  26232. if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI)
  26233. 800b752: 687b ldr r3, [r7, #4]
  26234. 800b754: 681b ldr r3, [r3, #0]
  26235. 800b756: f003 0302 and.w r3, r3, #2
  26236. 800b75a: 2b00 cmp r3, #0
  26237. 800b75c: f000 80ca beq.w 800b8f4 <HAL_RCC_OscConfig+0x2d4>
  26238. /* Check the parameters */
  26239. assert_param(IS_RCC_HSI(RCC_OscInitStruct->HSIState));
  26240. assert_param(IS_RCC_HSICALIBRATION_VALUE(RCC_OscInitStruct->HSICalibrationValue));
  26241. /* When the HSI is used as system clock it will not be disabled */
  26242. const uint32_t temp_sysclksrc = __HAL_RCC_GET_SYSCLK_SOURCE();
  26243. 800b760: 4b51 ldr r3, [pc, #324] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26244. 800b762: 691b ldr r3, [r3, #16]
  26245. 800b764: f003 0338 and.w r3, r3, #56 @ 0x38
  26246. 800b768: 623b str r3, [r7, #32]
  26247. const uint32_t temp_pllckselr = RCC->PLLCKSELR;
  26248. 800b76a: 4b4f ldr r3, [pc, #316] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26249. 800b76c: 6a9b ldr r3, [r3, #40] @ 0x28
  26250. 800b76e: 61fb str r3, [r7, #28]
  26251. if ((temp_sysclksrc == RCC_CFGR_SWS_HSI) || ((temp_sysclksrc == RCC_CFGR_SWS_PLL1) && ((temp_pllckselr & RCC_PLLCKSELR_PLLSRC) == RCC_PLLCKSELR_PLLSRC_HSI)))
  26252. 800b770: 6a3b ldr r3, [r7, #32]
  26253. 800b772: 2b00 cmp r3, #0
  26254. 800b774: d007 beq.n 800b786 <HAL_RCC_OscConfig+0x166>
  26255. 800b776: 6a3b ldr r3, [r7, #32]
  26256. 800b778: 2b18 cmp r3, #24
  26257. 800b77a: d156 bne.n 800b82a <HAL_RCC_OscConfig+0x20a>
  26258. 800b77c: 69fb ldr r3, [r7, #28]
  26259. 800b77e: f003 0303 and.w r3, r3, #3
  26260. 800b782: 2b00 cmp r3, #0
  26261. 800b784: d151 bne.n 800b82a <HAL_RCC_OscConfig+0x20a>
  26262. {
  26263. /* When HSI is used as system clock it will not be disabled */
  26264. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != 0U) && (RCC_OscInitStruct->HSIState == RCC_HSI_OFF))
  26265. 800b786: 4b48 ldr r3, [pc, #288] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26266. 800b788: 681b ldr r3, [r3, #0]
  26267. 800b78a: f003 0304 and.w r3, r3, #4
  26268. 800b78e: 2b00 cmp r3, #0
  26269. 800b790: d005 beq.n 800b79e <HAL_RCC_OscConfig+0x17e>
  26270. 800b792: 687b ldr r3, [r7, #4]
  26271. 800b794: 68db ldr r3, [r3, #12]
  26272. 800b796: 2b00 cmp r3, #0
  26273. 800b798: d101 bne.n 800b79e <HAL_RCC_OscConfig+0x17e>
  26274. {
  26275. return HAL_ERROR;
  26276. 800b79a: 2301 movs r3, #1
  26277. 800b79c: e392 b.n 800bec4 <HAL_RCC_OscConfig+0x8a4>
  26278. }
  26279. /* Otherwise, only HSI division and calibration are allowed */
  26280. else
  26281. {
  26282. /* Enable the Internal High Speed oscillator (HSI, HSIDIV2, HSIDIV4, or HSIDIV8) */
  26283. __HAL_RCC_HSI_CONFIG(RCC_OscInitStruct->HSIState);
  26284. 800b79e: 4b42 ldr r3, [pc, #264] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26285. 800b7a0: 681b ldr r3, [r3, #0]
  26286. 800b7a2: f023 0219 bic.w r2, r3, #25
  26287. 800b7a6: 687b ldr r3, [r7, #4]
  26288. 800b7a8: 68db ldr r3, [r3, #12]
  26289. 800b7aa: 493f ldr r1, [pc, #252] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26290. 800b7ac: 4313 orrs r3, r2
  26291. 800b7ae: 600b str r3, [r1, #0]
  26292. /* Get Start Tick*/
  26293. tickstart = HAL_GetTick();
  26294. 800b7b0: f7fa f9fe bl 8005bb0 <HAL_GetTick>
  26295. 800b7b4: 6278 str r0, [r7, #36] @ 0x24
  26296. /* Wait till HSI is ready */
  26297. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == 0U)
  26298. 800b7b6: e008 b.n 800b7ca <HAL_RCC_OscConfig+0x1aa>
  26299. {
  26300. if ((uint32_t)(HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE)
  26301. 800b7b8: f7fa f9fa bl 8005bb0 <HAL_GetTick>
  26302. 800b7bc: 4602 mov r2, r0
  26303. 800b7be: 6a7b ldr r3, [r7, #36] @ 0x24
  26304. 800b7c0: 1ad3 subs r3, r2, r3
  26305. 800b7c2: 2b02 cmp r3, #2
  26306. 800b7c4: d901 bls.n 800b7ca <HAL_RCC_OscConfig+0x1aa>
  26307. {
  26308. return HAL_TIMEOUT;
  26309. 800b7c6: 2303 movs r3, #3
  26310. 800b7c8: e37c b.n 800bec4 <HAL_RCC_OscConfig+0x8a4>
  26311. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == 0U)
  26312. 800b7ca: 4b37 ldr r3, [pc, #220] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26313. 800b7cc: 681b ldr r3, [r3, #0]
  26314. 800b7ce: f003 0304 and.w r3, r3, #4
  26315. 800b7d2: 2b00 cmp r3, #0
  26316. 800b7d4: d0f0 beq.n 800b7b8 <HAL_RCC_OscConfig+0x198>
  26317. }
  26318. }
  26319. /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/
  26320. __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue);
  26321. 800b7d6: f7fa f9f7 bl 8005bc8 <HAL_GetREVID>
  26322. 800b7da: 4603 mov r3, r0
  26323. 800b7dc: f241 0203 movw r2, #4099 @ 0x1003
  26324. 800b7e0: 4293 cmp r3, r2
  26325. 800b7e2: d817 bhi.n 800b814 <HAL_RCC_OscConfig+0x1f4>
  26326. 800b7e4: 687b ldr r3, [r7, #4]
  26327. 800b7e6: 691b ldr r3, [r3, #16]
  26328. 800b7e8: 2b40 cmp r3, #64 @ 0x40
  26329. 800b7ea: d108 bne.n 800b7fe <HAL_RCC_OscConfig+0x1de>
  26330. 800b7ec: 4b2e ldr r3, [pc, #184] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26331. 800b7ee: 685b ldr r3, [r3, #4]
  26332. 800b7f0: f423 337c bic.w r3, r3, #258048 @ 0x3f000
  26333. 800b7f4: 4a2c ldr r2, [pc, #176] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26334. 800b7f6: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  26335. 800b7fa: 6053 str r3, [r2, #4]
  26336. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != 0U) && (RCC_OscInitStruct->HSIState == RCC_HSI_OFF))
  26337. 800b7fc: e07a b.n 800b8f4 <HAL_RCC_OscConfig+0x2d4>
  26338. __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue);
  26339. 800b7fe: 4b2a ldr r3, [pc, #168] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26340. 800b800: 685b ldr r3, [r3, #4]
  26341. 800b802: f423 327c bic.w r2, r3, #258048 @ 0x3f000
  26342. 800b806: 687b ldr r3, [r7, #4]
  26343. 800b808: 691b ldr r3, [r3, #16]
  26344. 800b80a: 031b lsls r3, r3, #12
  26345. 800b80c: 4926 ldr r1, [pc, #152] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26346. 800b80e: 4313 orrs r3, r2
  26347. 800b810: 604b str r3, [r1, #4]
  26348. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != 0U) && (RCC_OscInitStruct->HSIState == RCC_HSI_OFF))
  26349. 800b812: e06f b.n 800b8f4 <HAL_RCC_OscConfig+0x2d4>
  26350. __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue);
  26351. 800b814: 4b24 ldr r3, [pc, #144] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26352. 800b816: 685b ldr r3, [r3, #4]
  26353. 800b818: f023 42fe bic.w r2, r3, #2130706432 @ 0x7f000000
  26354. 800b81c: 687b ldr r3, [r7, #4]
  26355. 800b81e: 691b ldr r3, [r3, #16]
  26356. 800b820: 061b lsls r3, r3, #24
  26357. 800b822: 4921 ldr r1, [pc, #132] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26358. 800b824: 4313 orrs r3, r2
  26359. 800b826: 604b str r3, [r1, #4]
  26360. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != 0U) && (RCC_OscInitStruct->HSIState == RCC_HSI_OFF))
  26361. 800b828: e064 b.n 800b8f4 <HAL_RCC_OscConfig+0x2d4>
  26362. }
  26363. else
  26364. {
  26365. /* Check the HSI State */
  26366. if ((RCC_OscInitStruct->HSIState) != RCC_HSI_OFF)
  26367. 800b82a: 687b ldr r3, [r7, #4]
  26368. 800b82c: 68db ldr r3, [r3, #12]
  26369. 800b82e: 2b00 cmp r3, #0
  26370. 800b830: d047 beq.n 800b8c2 <HAL_RCC_OscConfig+0x2a2>
  26371. {
  26372. /* Enable the Internal High Speed oscillator (HSI, HSIDIV2,HSIDIV4, or HSIDIV8) */
  26373. __HAL_RCC_HSI_CONFIG(RCC_OscInitStruct->HSIState);
  26374. 800b832: 4b1d ldr r3, [pc, #116] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26375. 800b834: 681b ldr r3, [r3, #0]
  26376. 800b836: f023 0219 bic.w r2, r3, #25
  26377. 800b83a: 687b ldr r3, [r7, #4]
  26378. 800b83c: 68db ldr r3, [r3, #12]
  26379. 800b83e: 491a ldr r1, [pc, #104] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26380. 800b840: 4313 orrs r3, r2
  26381. 800b842: 600b str r3, [r1, #0]
  26382. /* Get Start Tick*/
  26383. tickstart = HAL_GetTick();
  26384. 800b844: f7fa f9b4 bl 8005bb0 <HAL_GetTick>
  26385. 800b848: 6278 str r0, [r7, #36] @ 0x24
  26386. /* Wait till HSI is ready */
  26387. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == 0U)
  26388. 800b84a: e008 b.n 800b85e <HAL_RCC_OscConfig+0x23e>
  26389. {
  26390. if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE)
  26391. 800b84c: f7fa f9b0 bl 8005bb0 <HAL_GetTick>
  26392. 800b850: 4602 mov r2, r0
  26393. 800b852: 6a7b ldr r3, [r7, #36] @ 0x24
  26394. 800b854: 1ad3 subs r3, r2, r3
  26395. 800b856: 2b02 cmp r3, #2
  26396. 800b858: d901 bls.n 800b85e <HAL_RCC_OscConfig+0x23e>
  26397. {
  26398. return HAL_TIMEOUT;
  26399. 800b85a: 2303 movs r3, #3
  26400. 800b85c: e332 b.n 800bec4 <HAL_RCC_OscConfig+0x8a4>
  26401. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == 0U)
  26402. 800b85e: 4b12 ldr r3, [pc, #72] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26403. 800b860: 681b ldr r3, [r3, #0]
  26404. 800b862: f003 0304 and.w r3, r3, #4
  26405. 800b866: 2b00 cmp r3, #0
  26406. 800b868: d0f0 beq.n 800b84c <HAL_RCC_OscConfig+0x22c>
  26407. }
  26408. }
  26409. /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/
  26410. __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue);
  26411. 800b86a: f7fa f9ad bl 8005bc8 <HAL_GetREVID>
  26412. 800b86e: 4603 mov r3, r0
  26413. 800b870: f241 0203 movw r2, #4099 @ 0x1003
  26414. 800b874: 4293 cmp r3, r2
  26415. 800b876: d819 bhi.n 800b8ac <HAL_RCC_OscConfig+0x28c>
  26416. 800b878: 687b ldr r3, [r7, #4]
  26417. 800b87a: 691b ldr r3, [r3, #16]
  26418. 800b87c: 2b40 cmp r3, #64 @ 0x40
  26419. 800b87e: d108 bne.n 800b892 <HAL_RCC_OscConfig+0x272>
  26420. 800b880: 4b09 ldr r3, [pc, #36] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26421. 800b882: 685b ldr r3, [r3, #4]
  26422. 800b884: f423 337c bic.w r3, r3, #258048 @ 0x3f000
  26423. 800b888: 4a07 ldr r2, [pc, #28] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26424. 800b88a: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  26425. 800b88e: 6053 str r3, [r2, #4]
  26426. 800b890: e030 b.n 800b8f4 <HAL_RCC_OscConfig+0x2d4>
  26427. 800b892: 4b05 ldr r3, [pc, #20] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26428. 800b894: 685b ldr r3, [r3, #4]
  26429. 800b896: f423 327c bic.w r2, r3, #258048 @ 0x3f000
  26430. 800b89a: 687b ldr r3, [r7, #4]
  26431. 800b89c: 691b ldr r3, [r3, #16]
  26432. 800b89e: 031b lsls r3, r3, #12
  26433. 800b8a0: 4901 ldr r1, [pc, #4] @ (800b8a8 <HAL_RCC_OscConfig+0x288>)
  26434. 800b8a2: 4313 orrs r3, r2
  26435. 800b8a4: 604b str r3, [r1, #4]
  26436. 800b8a6: e025 b.n 800b8f4 <HAL_RCC_OscConfig+0x2d4>
  26437. 800b8a8: 58024400 .word 0x58024400
  26438. 800b8ac: 4b9a ldr r3, [pc, #616] @ (800bb18 <HAL_RCC_OscConfig+0x4f8>)
  26439. 800b8ae: 685b ldr r3, [r3, #4]
  26440. 800b8b0: f023 42fe bic.w r2, r3, #2130706432 @ 0x7f000000
  26441. 800b8b4: 687b ldr r3, [r7, #4]
  26442. 800b8b6: 691b ldr r3, [r3, #16]
  26443. 800b8b8: 061b lsls r3, r3, #24
  26444. 800b8ba: 4997 ldr r1, [pc, #604] @ (800bb18 <HAL_RCC_OscConfig+0x4f8>)
  26445. 800b8bc: 4313 orrs r3, r2
  26446. 800b8be: 604b str r3, [r1, #4]
  26447. 800b8c0: e018 b.n 800b8f4 <HAL_RCC_OscConfig+0x2d4>
  26448. }
  26449. else
  26450. {
  26451. /* Disable the Internal High Speed oscillator (HSI). */
  26452. __HAL_RCC_HSI_DISABLE();
  26453. 800b8c2: 4b95 ldr r3, [pc, #596] @ (800bb18 <HAL_RCC_OscConfig+0x4f8>)
  26454. 800b8c4: 681b ldr r3, [r3, #0]
  26455. 800b8c6: 4a94 ldr r2, [pc, #592] @ (800bb18 <HAL_RCC_OscConfig+0x4f8>)
  26456. 800b8c8: f023 0301 bic.w r3, r3, #1
  26457. 800b8cc: 6013 str r3, [r2, #0]
  26458. /* Get Start Tick*/
  26459. tickstart = HAL_GetTick();
  26460. 800b8ce: f7fa f96f bl 8005bb0 <HAL_GetTick>
  26461. 800b8d2: 6278 str r0, [r7, #36] @ 0x24
  26462. /* Wait till HSI is disabled */
  26463. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != 0U)
  26464. 800b8d4: e008 b.n 800b8e8 <HAL_RCC_OscConfig+0x2c8>
  26465. {
  26466. if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE)
  26467. 800b8d6: f7fa f96b bl 8005bb0 <HAL_GetTick>
  26468. 800b8da: 4602 mov r2, r0
  26469. 800b8dc: 6a7b ldr r3, [r7, #36] @ 0x24
  26470. 800b8de: 1ad3 subs r3, r2, r3
  26471. 800b8e0: 2b02 cmp r3, #2
  26472. 800b8e2: d901 bls.n 800b8e8 <HAL_RCC_OscConfig+0x2c8>
  26473. {
  26474. return HAL_TIMEOUT;
  26475. 800b8e4: 2303 movs r3, #3
  26476. 800b8e6: e2ed b.n 800bec4 <HAL_RCC_OscConfig+0x8a4>
  26477. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != 0U)
  26478. 800b8e8: 4b8b ldr r3, [pc, #556] @ (800bb18 <HAL_RCC_OscConfig+0x4f8>)
  26479. 800b8ea: 681b ldr r3, [r3, #0]
  26480. 800b8ec: f003 0304 and.w r3, r3, #4
  26481. 800b8f0: 2b00 cmp r3, #0
  26482. 800b8f2: d1f0 bne.n 800b8d6 <HAL_RCC_OscConfig+0x2b6>
  26483. }
  26484. }
  26485. }
  26486. }
  26487. /*----------------------------- CSI Configuration --------------------------*/
  26488. if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_CSI) == RCC_OSCILLATORTYPE_CSI)
  26489. 800b8f4: 687b ldr r3, [r7, #4]
  26490. 800b8f6: 681b ldr r3, [r3, #0]
  26491. 800b8f8: f003 0310 and.w r3, r3, #16
  26492. 800b8fc: 2b00 cmp r3, #0
  26493. 800b8fe: f000 80a9 beq.w 800ba54 <HAL_RCC_OscConfig+0x434>
  26494. /* Check the parameters */
  26495. assert_param(IS_RCC_CSI(RCC_OscInitStruct->CSIState));
  26496. assert_param(IS_RCC_CSICALIBRATION_VALUE(RCC_OscInitStruct->CSICalibrationValue));
  26497. /* When the CSI is used as system clock it will not disabled */
  26498. const uint32_t temp_sysclksrc = __HAL_RCC_GET_SYSCLK_SOURCE();
  26499. 800b902: 4b85 ldr r3, [pc, #532] @ (800bb18 <HAL_RCC_OscConfig+0x4f8>)
  26500. 800b904: 691b ldr r3, [r3, #16]
  26501. 800b906: f003 0338 and.w r3, r3, #56 @ 0x38
  26502. 800b90a: 61bb str r3, [r7, #24]
  26503. const uint32_t temp_pllckselr = RCC->PLLCKSELR;
  26504. 800b90c: 4b82 ldr r3, [pc, #520] @ (800bb18 <HAL_RCC_OscConfig+0x4f8>)
  26505. 800b90e: 6a9b ldr r3, [r3, #40] @ 0x28
  26506. 800b910: 617b str r3, [r7, #20]
  26507. if ((temp_sysclksrc == RCC_CFGR_SWS_CSI) || ((temp_sysclksrc == RCC_CFGR_SWS_PLL1) && ((temp_pllckselr & RCC_PLLCKSELR_PLLSRC) == RCC_PLLCKSELR_PLLSRC_CSI)))
  26508. 800b912: 69bb ldr r3, [r7, #24]
  26509. 800b914: 2b08 cmp r3, #8
  26510. 800b916: d007 beq.n 800b928 <HAL_RCC_OscConfig+0x308>
  26511. 800b918: 69bb ldr r3, [r7, #24]
  26512. 800b91a: 2b18 cmp r3, #24
  26513. 800b91c: d13a bne.n 800b994 <HAL_RCC_OscConfig+0x374>
  26514. 800b91e: 697b ldr r3, [r7, #20]
  26515. 800b920: f003 0303 and.w r3, r3, #3
  26516. 800b924: 2b01 cmp r3, #1
  26517. 800b926: d135 bne.n 800b994 <HAL_RCC_OscConfig+0x374>
  26518. {
  26519. /* When CSI is used as system clock it will not disabled */
  26520. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) != 0U) && (RCC_OscInitStruct->CSIState != RCC_CSI_ON))
  26521. 800b928: 4b7b ldr r3, [pc, #492] @ (800bb18 <HAL_RCC_OscConfig+0x4f8>)
  26522. 800b92a: 681b ldr r3, [r3, #0]
  26523. 800b92c: f403 7380 and.w r3, r3, #256 @ 0x100
  26524. 800b930: 2b00 cmp r3, #0
  26525. 800b932: d005 beq.n 800b940 <HAL_RCC_OscConfig+0x320>
  26526. 800b934: 687b ldr r3, [r7, #4]
  26527. 800b936: 69db ldr r3, [r3, #28]
  26528. 800b938: 2b80 cmp r3, #128 @ 0x80
  26529. 800b93a: d001 beq.n 800b940 <HAL_RCC_OscConfig+0x320>
  26530. {
  26531. return HAL_ERROR;
  26532. 800b93c: 2301 movs r3, #1
  26533. 800b93e: e2c1 b.n 800bec4 <HAL_RCC_OscConfig+0x8a4>
  26534. }
  26535. /* Otherwise, just the calibration is allowed */
  26536. else
  26537. {
  26538. /* Adjusts the Internal High Speed oscillator (CSI) calibration value.*/
  26539. __HAL_RCC_CSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->CSICalibrationValue);
  26540. 800b940: f7fa f942 bl 8005bc8 <HAL_GetREVID>
  26541. 800b944: 4603 mov r3, r0
  26542. 800b946: f241 0203 movw r2, #4099 @ 0x1003
  26543. 800b94a: 4293 cmp r3, r2
  26544. 800b94c: d817 bhi.n 800b97e <HAL_RCC_OscConfig+0x35e>
  26545. 800b94e: 687b ldr r3, [r7, #4]
  26546. 800b950: 6a1b ldr r3, [r3, #32]
  26547. 800b952: 2b20 cmp r3, #32
  26548. 800b954: d108 bne.n 800b968 <HAL_RCC_OscConfig+0x348>
  26549. 800b956: 4b70 ldr r3, [pc, #448] @ (800bb18 <HAL_RCC_OscConfig+0x4f8>)
  26550. 800b958: 685b ldr r3, [r3, #4]
  26551. 800b95a: f023 43f8 bic.w r3, r3, #2080374784 @ 0x7c000000
  26552. 800b95e: 4a6e ldr r2, [pc, #440] @ (800bb18 <HAL_RCC_OscConfig+0x4f8>)
  26553. 800b960: f043 4380 orr.w r3, r3, #1073741824 @ 0x40000000
  26554. 800b964: 6053 str r3, [r2, #4]
  26555. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) != 0U) && (RCC_OscInitStruct->CSIState != RCC_CSI_ON))
  26556. 800b966: e075 b.n 800ba54 <HAL_RCC_OscConfig+0x434>
  26557. __HAL_RCC_CSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->CSICalibrationValue);
  26558. 800b968: 4b6b ldr r3, [pc, #428] @ (800bb18 <HAL_RCC_OscConfig+0x4f8>)
  26559. 800b96a: 685b ldr r3, [r3, #4]
  26560. 800b96c: f023 42f8 bic.w r2, r3, #2080374784 @ 0x7c000000
  26561. 800b970: 687b ldr r3, [r7, #4]
  26562. 800b972: 6a1b ldr r3, [r3, #32]
  26563. 800b974: 069b lsls r3, r3, #26
  26564. 800b976: 4968 ldr r1, [pc, #416] @ (800bb18 <HAL_RCC_OscConfig+0x4f8>)
  26565. 800b978: 4313 orrs r3, r2
  26566. 800b97a: 604b str r3, [r1, #4]
  26567. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) != 0U) && (RCC_OscInitStruct->CSIState != RCC_CSI_ON))
  26568. 800b97c: e06a b.n 800ba54 <HAL_RCC_OscConfig+0x434>
  26569. __HAL_RCC_CSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->CSICalibrationValue);
  26570. 800b97e: 4b66 ldr r3, [pc, #408] @ (800bb18 <HAL_RCC_OscConfig+0x4f8>)
  26571. 800b980: 68db ldr r3, [r3, #12]
  26572. 800b982: f023 527c bic.w r2, r3, #1056964608 @ 0x3f000000
  26573. 800b986: 687b ldr r3, [r7, #4]
  26574. 800b988: 6a1b ldr r3, [r3, #32]
  26575. 800b98a: 061b lsls r3, r3, #24
  26576. 800b98c: 4962 ldr r1, [pc, #392] @ (800bb18 <HAL_RCC_OscConfig+0x4f8>)
  26577. 800b98e: 4313 orrs r3, r2
  26578. 800b990: 60cb str r3, [r1, #12]
  26579. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) != 0U) && (RCC_OscInitStruct->CSIState != RCC_CSI_ON))
  26580. 800b992: e05f b.n 800ba54 <HAL_RCC_OscConfig+0x434>
  26581. }
  26582. }
  26583. else
  26584. {
  26585. /* Check the CSI State */
  26586. if ((RCC_OscInitStruct->CSIState) != RCC_CSI_OFF)
  26587. 800b994: 687b ldr r3, [r7, #4]
  26588. 800b996: 69db ldr r3, [r3, #28]
  26589. 800b998: 2b00 cmp r3, #0
  26590. 800b99a: d042 beq.n 800ba22 <HAL_RCC_OscConfig+0x402>
  26591. {
  26592. /* Enable the Internal High Speed oscillator (CSI). */
  26593. __HAL_RCC_CSI_ENABLE();
  26594. 800b99c: 4b5e ldr r3, [pc, #376] @ (800bb18 <HAL_RCC_OscConfig+0x4f8>)
  26595. 800b99e: 681b ldr r3, [r3, #0]
  26596. 800b9a0: 4a5d ldr r2, [pc, #372] @ (800bb18 <HAL_RCC_OscConfig+0x4f8>)
  26597. 800b9a2: f043 0380 orr.w r3, r3, #128 @ 0x80
  26598. 800b9a6: 6013 str r3, [r2, #0]
  26599. /* Get Start Tick*/
  26600. tickstart = HAL_GetTick();
  26601. 800b9a8: f7fa f902 bl 8005bb0 <HAL_GetTick>
  26602. 800b9ac: 6278 str r0, [r7, #36] @ 0x24
  26603. /* Wait till CSI is ready */
  26604. while (__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) == 0U)
  26605. 800b9ae: e008 b.n 800b9c2 <HAL_RCC_OscConfig+0x3a2>
  26606. {
  26607. if ((HAL_GetTick() - tickstart) > CSI_TIMEOUT_VALUE)
  26608. 800b9b0: f7fa f8fe bl 8005bb0 <HAL_GetTick>
  26609. 800b9b4: 4602 mov r2, r0
  26610. 800b9b6: 6a7b ldr r3, [r7, #36] @ 0x24
  26611. 800b9b8: 1ad3 subs r3, r2, r3
  26612. 800b9ba: 2b02 cmp r3, #2
  26613. 800b9bc: d901 bls.n 800b9c2 <HAL_RCC_OscConfig+0x3a2>
  26614. {
  26615. return HAL_TIMEOUT;
  26616. 800b9be: 2303 movs r3, #3
  26617. 800b9c0: e280 b.n 800bec4 <HAL_RCC_OscConfig+0x8a4>
  26618. while (__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) == 0U)
  26619. 800b9c2: 4b55 ldr r3, [pc, #340] @ (800bb18 <HAL_RCC_OscConfig+0x4f8>)
  26620. 800b9c4: 681b ldr r3, [r3, #0]
  26621. 800b9c6: f403 7380 and.w r3, r3, #256 @ 0x100
  26622. 800b9ca: 2b00 cmp r3, #0
  26623. 800b9cc: d0f0 beq.n 800b9b0 <HAL_RCC_OscConfig+0x390>
  26624. }
  26625. }
  26626. /* Adjusts the Internal High Speed oscillator (CSI) calibration value.*/
  26627. __HAL_RCC_CSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->CSICalibrationValue);
  26628. 800b9ce: f7fa f8fb bl 8005bc8 <HAL_GetREVID>
  26629. 800b9d2: 4603 mov r3, r0
  26630. 800b9d4: f241 0203 movw r2, #4099 @ 0x1003
  26631. 800b9d8: 4293 cmp r3, r2
  26632. 800b9da: d817 bhi.n 800ba0c <HAL_RCC_OscConfig+0x3ec>
  26633. 800b9dc: 687b ldr r3, [r7, #4]
  26634. 800b9de: 6a1b ldr r3, [r3, #32]
  26635. 800b9e0: 2b20 cmp r3, #32
  26636. 800b9e2: d108 bne.n 800b9f6 <HAL_RCC_OscConfig+0x3d6>
  26637. 800b9e4: 4b4c ldr r3, [pc, #304] @ (800bb18 <HAL_RCC_OscConfig+0x4f8>)
  26638. 800b9e6: 685b ldr r3, [r3, #4]
  26639. 800b9e8: f023 43f8 bic.w r3, r3, #2080374784 @ 0x7c000000
  26640. 800b9ec: 4a4a ldr r2, [pc, #296] @ (800bb18 <HAL_RCC_OscConfig+0x4f8>)
  26641. 800b9ee: f043 4380 orr.w r3, r3, #1073741824 @ 0x40000000
  26642. 800b9f2: 6053 str r3, [r2, #4]
  26643. 800b9f4: e02e b.n 800ba54 <HAL_RCC_OscConfig+0x434>
  26644. 800b9f6: 4b48 ldr r3, [pc, #288] @ (800bb18 <HAL_RCC_OscConfig+0x4f8>)
  26645. 800b9f8: 685b ldr r3, [r3, #4]
  26646. 800b9fa: f023 42f8 bic.w r2, r3, #2080374784 @ 0x7c000000
  26647. 800b9fe: 687b ldr r3, [r7, #4]
  26648. 800ba00: 6a1b ldr r3, [r3, #32]
  26649. 800ba02: 069b lsls r3, r3, #26
  26650. 800ba04: 4944 ldr r1, [pc, #272] @ (800bb18 <HAL_RCC_OscConfig+0x4f8>)
  26651. 800ba06: 4313 orrs r3, r2
  26652. 800ba08: 604b str r3, [r1, #4]
  26653. 800ba0a: e023 b.n 800ba54 <HAL_RCC_OscConfig+0x434>
  26654. 800ba0c: 4b42 ldr r3, [pc, #264] @ (800bb18 <HAL_RCC_OscConfig+0x4f8>)
  26655. 800ba0e: 68db ldr r3, [r3, #12]
  26656. 800ba10: f023 527c bic.w r2, r3, #1056964608 @ 0x3f000000
  26657. 800ba14: 687b ldr r3, [r7, #4]
  26658. 800ba16: 6a1b ldr r3, [r3, #32]
  26659. 800ba18: 061b lsls r3, r3, #24
  26660. 800ba1a: 493f ldr r1, [pc, #252] @ (800bb18 <HAL_RCC_OscConfig+0x4f8>)
  26661. 800ba1c: 4313 orrs r3, r2
  26662. 800ba1e: 60cb str r3, [r1, #12]
  26663. 800ba20: e018 b.n 800ba54 <HAL_RCC_OscConfig+0x434>
  26664. }
  26665. else
  26666. {
  26667. /* Disable the Internal High Speed oscillator (CSI). */
  26668. __HAL_RCC_CSI_DISABLE();
  26669. 800ba22: 4b3d ldr r3, [pc, #244] @ (800bb18 <HAL_RCC_OscConfig+0x4f8>)
  26670. 800ba24: 681b ldr r3, [r3, #0]
  26671. 800ba26: 4a3c ldr r2, [pc, #240] @ (800bb18 <HAL_RCC_OscConfig+0x4f8>)
  26672. 800ba28: f023 0380 bic.w r3, r3, #128 @ 0x80
  26673. 800ba2c: 6013 str r3, [r2, #0]
  26674. /* Get Start Tick*/
  26675. tickstart = HAL_GetTick();
  26676. 800ba2e: f7fa f8bf bl 8005bb0 <HAL_GetTick>
  26677. 800ba32: 6278 str r0, [r7, #36] @ 0x24
  26678. /* Wait till CSI is disabled */
  26679. while (__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) != 0U)
  26680. 800ba34: e008 b.n 800ba48 <HAL_RCC_OscConfig+0x428>
  26681. {
  26682. if ((HAL_GetTick() - tickstart) > CSI_TIMEOUT_VALUE)
  26683. 800ba36: f7fa f8bb bl 8005bb0 <HAL_GetTick>
  26684. 800ba3a: 4602 mov r2, r0
  26685. 800ba3c: 6a7b ldr r3, [r7, #36] @ 0x24
  26686. 800ba3e: 1ad3 subs r3, r2, r3
  26687. 800ba40: 2b02 cmp r3, #2
  26688. 800ba42: d901 bls.n 800ba48 <HAL_RCC_OscConfig+0x428>
  26689. {
  26690. return HAL_TIMEOUT;
  26691. 800ba44: 2303 movs r3, #3
  26692. 800ba46: e23d b.n 800bec4 <HAL_RCC_OscConfig+0x8a4>
  26693. while (__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) != 0U)
  26694. 800ba48: 4b33 ldr r3, [pc, #204] @ (800bb18 <HAL_RCC_OscConfig+0x4f8>)
  26695. 800ba4a: 681b ldr r3, [r3, #0]
  26696. 800ba4c: f403 7380 and.w r3, r3, #256 @ 0x100
  26697. 800ba50: 2b00 cmp r3, #0
  26698. 800ba52: d1f0 bne.n 800ba36 <HAL_RCC_OscConfig+0x416>
  26699. }
  26700. }
  26701. }
  26702. }
  26703. /*------------------------------ LSI Configuration -------------------------*/
  26704. if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI)
  26705. 800ba54: 687b ldr r3, [r7, #4]
  26706. 800ba56: 681b ldr r3, [r3, #0]
  26707. 800ba58: f003 0308 and.w r3, r3, #8
  26708. 800ba5c: 2b00 cmp r3, #0
  26709. 800ba5e: d036 beq.n 800bace <HAL_RCC_OscConfig+0x4ae>
  26710. {
  26711. /* Check the parameters */
  26712. assert_param(IS_RCC_LSI(RCC_OscInitStruct->LSIState));
  26713. /* Check the LSI State */
  26714. if ((RCC_OscInitStruct->LSIState) != RCC_LSI_OFF)
  26715. 800ba60: 687b ldr r3, [r7, #4]
  26716. 800ba62: 695b ldr r3, [r3, #20]
  26717. 800ba64: 2b00 cmp r3, #0
  26718. 800ba66: d019 beq.n 800ba9c <HAL_RCC_OscConfig+0x47c>
  26719. {
  26720. /* Enable the Internal Low Speed oscillator (LSI). */
  26721. __HAL_RCC_LSI_ENABLE();
  26722. 800ba68: 4b2b ldr r3, [pc, #172] @ (800bb18 <HAL_RCC_OscConfig+0x4f8>)
  26723. 800ba6a: 6f5b ldr r3, [r3, #116] @ 0x74
  26724. 800ba6c: 4a2a ldr r2, [pc, #168] @ (800bb18 <HAL_RCC_OscConfig+0x4f8>)
  26725. 800ba6e: f043 0301 orr.w r3, r3, #1
  26726. 800ba72: 6753 str r3, [r2, #116] @ 0x74
  26727. /* Get Start Tick*/
  26728. tickstart = HAL_GetTick();
  26729. 800ba74: f7fa f89c bl 8005bb0 <HAL_GetTick>
  26730. 800ba78: 6278 str r0, [r7, #36] @ 0x24
  26731. /* Wait till LSI is ready */
  26732. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == 0U)
  26733. 800ba7a: e008 b.n 800ba8e <HAL_RCC_OscConfig+0x46e>
  26734. {
  26735. if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE)
  26736. 800ba7c: f7fa f898 bl 8005bb0 <HAL_GetTick>
  26737. 800ba80: 4602 mov r2, r0
  26738. 800ba82: 6a7b ldr r3, [r7, #36] @ 0x24
  26739. 800ba84: 1ad3 subs r3, r2, r3
  26740. 800ba86: 2b02 cmp r3, #2
  26741. 800ba88: d901 bls.n 800ba8e <HAL_RCC_OscConfig+0x46e>
  26742. {
  26743. return HAL_TIMEOUT;
  26744. 800ba8a: 2303 movs r3, #3
  26745. 800ba8c: e21a b.n 800bec4 <HAL_RCC_OscConfig+0x8a4>
  26746. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == 0U)
  26747. 800ba8e: 4b22 ldr r3, [pc, #136] @ (800bb18 <HAL_RCC_OscConfig+0x4f8>)
  26748. 800ba90: 6f5b ldr r3, [r3, #116] @ 0x74
  26749. 800ba92: f003 0302 and.w r3, r3, #2
  26750. 800ba96: 2b00 cmp r3, #0
  26751. 800ba98: d0f0 beq.n 800ba7c <HAL_RCC_OscConfig+0x45c>
  26752. 800ba9a: e018 b.n 800bace <HAL_RCC_OscConfig+0x4ae>
  26753. }
  26754. }
  26755. else
  26756. {
  26757. /* Disable the Internal Low Speed oscillator (LSI). */
  26758. __HAL_RCC_LSI_DISABLE();
  26759. 800ba9c: 4b1e ldr r3, [pc, #120] @ (800bb18 <HAL_RCC_OscConfig+0x4f8>)
  26760. 800ba9e: 6f5b ldr r3, [r3, #116] @ 0x74
  26761. 800baa0: 4a1d ldr r2, [pc, #116] @ (800bb18 <HAL_RCC_OscConfig+0x4f8>)
  26762. 800baa2: f023 0301 bic.w r3, r3, #1
  26763. 800baa6: 6753 str r3, [r2, #116] @ 0x74
  26764. /* Get Start Tick*/
  26765. tickstart = HAL_GetTick();
  26766. 800baa8: f7fa f882 bl 8005bb0 <HAL_GetTick>
  26767. 800baac: 6278 str r0, [r7, #36] @ 0x24
  26768. /* Wait till LSI is ready */
  26769. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != 0U)
  26770. 800baae: e008 b.n 800bac2 <HAL_RCC_OscConfig+0x4a2>
  26771. {
  26772. if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE)
  26773. 800bab0: f7fa f87e bl 8005bb0 <HAL_GetTick>
  26774. 800bab4: 4602 mov r2, r0
  26775. 800bab6: 6a7b ldr r3, [r7, #36] @ 0x24
  26776. 800bab8: 1ad3 subs r3, r2, r3
  26777. 800baba: 2b02 cmp r3, #2
  26778. 800babc: d901 bls.n 800bac2 <HAL_RCC_OscConfig+0x4a2>
  26779. {
  26780. return HAL_TIMEOUT;
  26781. 800babe: 2303 movs r3, #3
  26782. 800bac0: e200 b.n 800bec4 <HAL_RCC_OscConfig+0x8a4>
  26783. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != 0U)
  26784. 800bac2: 4b15 ldr r3, [pc, #84] @ (800bb18 <HAL_RCC_OscConfig+0x4f8>)
  26785. 800bac4: 6f5b ldr r3, [r3, #116] @ 0x74
  26786. 800bac6: f003 0302 and.w r3, r3, #2
  26787. 800baca: 2b00 cmp r3, #0
  26788. 800bacc: d1f0 bne.n 800bab0 <HAL_RCC_OscConfig+0x490>
  26789. }
  26790. }
  26791. }
  26792. /*------------------------------ HSI48 Configuration -------------------------*/
  26793. if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI48) == RCC_OSCILLATORTYPE_HSI48)
  26794. 800bace: 687b ldr r3, [r7, #4]
  26795. 800bad0: 681b ldr r3, [r3, #0]
  26796. 800bad2: f003 0320 and.w r3, r3, #32
  26797. 800bad6: 2b00 cmp r3, #0
  26798. 800bad8: d039 beq.n 800bb4e <HAL_RCC_OscConfig+0x52e>
  26799. {
  26800. /* Check the parameters */
  26801. assert_param(IS_RCC_HSI48(RCC_OscInitStruct->HSI48State));
  26802. /* Check the HSI48 State */
  26803. if ((RCC_OscInitStruct->HSI48State) != RCC_HSI48_OFF)
  26804. 800bada: 687b ldr r3, [r7, #4]
  26805. 800badc: 699b ldr r3, [r3, #24]
  26806. 800bade: 2b00 cmp r3, #0
  26807. 800bae0: d01c beq.n 800bb1c <HAL_RCC_OscConfig+0x4fc>
  26808. {
  26809. /* Enable the Internal Low Speed oscillator (HSI48). */
  26810. __HAL_RCC_HSI48_ENABLE();
  26811. 800bae2: 4b0d ldr r3, [pc, #52] @ (800bb18 <HAL_RCC_OscConfig+0x4f8>)
  26812. 800bae4: 681b ldr r3, [r3, #0]
  26813. 800bae6: 4a0c ldr r2, [pc, #48] @ (800bb18 <HAL_RCC_OscConfig+0x4f8>)
  26814. 800bae8: f443 5380 orr.w r3, r3, #4096 @ 0x1000
  26815. 800baec: 6013 str r3, [r2, #0]
  26816. /* Get time-out */
  26817. tickstart = HAL_GetTick();
  26818. 800baee: f7fa f85f bl 8005bb0 <HAL_GetTick>
  26819. 800baf2: 6278 str r0, [r7, #36] @ 0x24
  26820. /* Wait till HSI48 is ready */
  26821. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSI48RDY) == 0U)
  26822. 800baf4: e008 b.n 800bb08 <HAL_RCC_OscConfig+0x4e8>
  26823. {
  26824. if ((HAL_GetTick() - tickstart) > HSI48_TIMEOUT_VALUE)
  26825. 800baf6: f7fa f85b bl 8005bb0 <HAL_GetTick>
  26826. 800bafa: 4602 mov r2, r0
  26827. 800bafc: 6a7b ldr r3, [r7, #36] @ 0x24
  26828. 800bafe: 1ad3 subs r3, r2, r3
  26829. 800bb00: 2b02 cmp r3, #2
  26830. 800bb02: d901 bls.n 800bb08 <HAL_RCC_OscConfig+0x4e8>
  26831. {
  26832. return HAL_TIMEOUT;
  26833. 800bb04: 2303 movs r3, #3
  26834. 800bb06: e1dd b.n 800bec4 <HAL_RCC_OscConfig+0x8a4>
  26835. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSI48RDY) == 0U)
  26836. 800bb08: 4b03 ldr r3, [pc, #12] @ (800bb18 <HAL_RCC_OscConfig+0x4f8>)
  26837. 800bb0a: 681b ldr r3, [r3, #0]
  26838. 800bb0c: f403 5300 and.w r3, r3, #8192 @ 0x2000
  26839. 800bb10: 2b00 cmp r3, #0
  26840. 800bb12: d0f0 beq.n 800baf6 <HAL_RCC_OscConfig+0x4d6>
  26841. 800bb14: e01b b.n 800bb4e <HAL_RCC_OscConfig+0x52e>
  26842. 800bb16: bf00 nop
  26843. 800bb18: 58024400 .word 0x58024400
  26844. }
  26845. }
  26846. else
  26847. {
  26848. /* Disable the Internal Low Speed oscillator (HSI48). */
  26849. __HAL_RCC_HSI48_DISABLE();
  26850. 800bb1c: 4b9b ldr r3, [pc, #620] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  26851. 800bb1e: 681b ldr r3, [r3, #0]
  26852. 800bb20: 4a9a ldr r2, [pc, #616] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  26853. 800bb22: f423 5380 bic.w r3, r3, #4096 @ 0x1000
  26854. 800bb26: 6013 str r3, [r2, #0]
  26855. /* Get time-out */
  26856. tickstart = HAL_GetTick();
  26857. 800bb28: f7fa f842 bl 8005bb0 <HAL_GetTick>
  26858. 800bb2c: 6278 str r0, [r7, #36] @ 0x24
  26859. /* Wait till HSI48 is ready */
  26860. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSI48RDY) != 0U)
  26861. 800bb2e: e008 b.n 800bb42 <HAL_RCC_OscConfig+0x522>
  26862. {
  26863. if ((HAL_GetTick() - tickstart) > HSI48_TIMEOUT_VALUE)
  26864. 800bb30: f7fa f83e bl 8005bb0 <HAL_GetTick>
  26865. 800bb34: 4602 mov r2, r0
  26866. 800bb36: 6a7b ldr r3, [r7, #36] @ 0x24
  26867. 800bb38: 1ad3 subs r3, r2, r3
  26868. 800bb3a: 2b02 cmp r3, #2
  26869. 800bb3c: d901 bls.n 800bb42 <HAL_RCC_OscConfig+0x522>
  26870. {
  26871. return HAL_TIMEOUT;
  26872. 800bb3e: 2303 movs r3, #3
  26873. 800bb40: e1c0 b.n 800bec4 <HAL_RCC_OscConfig+0x8a4>
  26874. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSI48RDY) != 0U)
  26875. 800bb42: 4b92 ldr r3, [pc, #584] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  26876. 800bb44: 681b ldr r3, [r3, #0]
  26877. 800bb46: f403 5300 and.w r3, r3, #8192 @ 0x2000
  26878. 800bb4a: 2b00 cmp r3, #0
  26879. 800bb4c: d1f0 bne.n 800bb30 <HAL_RCC_OscConfig+0x510>
  26880. }
  26881. }
  26882. }
  26883. }
  26884. /*------------------------------ LSE Configuration -------------------------*/
  26885. if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE)
  26886. 800bb4e: 687b ldr r3, [r7, #4]
  26887. 800bb50: 681b ldr r3, [r3, #0]
  26888. 800bb52: f003 0304 and.w r3, r3, #4
  26889. 800bb56: 2b00 cmp r3, #0
  26890. 800bb58: f000 8081 beq.w 800bc5e <HAL_RCC_OscConfig+0x63e>
  26891. {
  26892. /* Check the parameters */
  26893. assert_param(IS_RCC_LSE(RCC_OscInitStruct->LSEState));
  26894. /* Enable write access to Backup domain */
  26895. PWR->CR1 |= PWR_CR1_DBP;
  26896. 800bb5c: 4b8c ldr r3, [pc, #560] @ (800bd90 <HAL_RCC_OscConfig+0x770>)
  26897. 800bb5e: 681b ldr r3, [r3, #0]
  26898. 800bb60: 4a8b ldr r2, [pc, #556] @ (800bd90 <HAL_RCC_OscConfig+0x770>)
  26899. 800bb62: f443 7380 orr.w r3, r3, #256 @ 0x100
  26900. 800bb66: 6013 str r3, [r2, #0]
  26901. /* Wait for Backup domain Write protection disable */
  26902. tickstart = HAL_GetTick();
  26903. 800bb68: f7fa f822 bl 8005bb0 <HAL_GetTick>
  26904. 800bb6c: 6278 str r0, [r7, #36] @ 0x24
  26905. while ((PWR->CR1 & PWR_CR1_DBP) == 0U)
  26906. 800bb6e: e008 b.n 800bb82 <HAL_RCC_OscConfig+0x562>
  26907. {
  26908. if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE)
  26909. 800bb70: f7fa f81e bl 8005bb0 <HAL_GetTick>
  26910. 800bb74: 4602 mov r2, r0
  26911. 800bb76: 6a7b ldr r3, [r7, #36] @ 0x24
  26912. 800bb78: 1ad3 subs r3, r2, r3
  26913. 800bb7a: 2b64 cmp r3, #100 @ 0x64
  26914. 800bb7c: d901 bls.n 800bb82 <HAL_RCC_OscConfig+0x562>
  26915. {
  26916. return HAL_TIMEOUT;
  26917. 800bb7e: 2303 movs r3, #3
  26918. 800bb80: e1a0 b.n 800bec4 <HAL_RCC_OscConfig+0x8a4>
  26919. while ((PWR->CR1 & PWR_CR1_DBP) == 0U)
  26920. 800bb82: 4b83 ldr r3, [pc, #524] @ (800bd90 <HAL_RCC_OscConfig+0x770>)
  26921. 800bb84: 681b ldr r3, [r3, #0]
  26922. 800bb86: f403 7380 and.w r3, r3, #256 @ 0x100
  26923. 800bb8a: 2b00 cmp r3, #0
  26924. 800bb8c: d0f0 beq.n 800bb70 <HAL_RCC_OscConfig+0x550>
  26925. }
  26926. }
  26927. /* Set the new LSE configuration -----------------------------------------*/
  26928. __HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState);
  26929. 800bb8e: 687b ldr r3, [r7, #4]
  26930. 800bb90: 689b ldr r3, [r3, #8]
  26931. 800bb92: 2b01 cmp r3, #1
  26932. 800bb94: d106 bne.n 800bba4 <HAL_RCC_OscConfig+0x584>
  26933. 800bb96: 4b7d ldr r3, [pc, #500] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  26934. 800bb98: 6f1b ldr r3, [r3, #112] @ 0x70
  26935. 800bb9a: 4a7c ldr r2, [pc, #496] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  26936. 800bb9c: f043 0301 orr.w r3, r3, #1
  26937. 800bba0: 6713 str r3, [r2, #112] @ 0x70
  26938. 800bba2: e02d b.n 800bc00 <HAL_RCC_OscConfig+0x5e0>
  26939. 800bba4: 687b ldr r3, [r7, #4]
  26940. 800bba6: 689b ldr r3, [r3, #8]
  26941. 800bba8: 2b00 cmp r3, #0
  26942. 800bbaa: d10c bne.n 800bbc6 <HAL_RCC_OscConfig+0x5a6>
  26943. 800bbac: 4b77 ldr r3, [pc, #476] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  26944. 800bbae: 6f1b ldr r3, [r3, #112] @ 0x70
  26945. 800bbb0: 4a76 ldr r2, [pc, #472] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  26946. 800bbb2: f023 0301 bic.w r3, r3, #1
  26947. 800bbb6: 6713 str r3, [r2, #112] @ 0x70
  26948. 800bbb8: 4b74 ldr r3, [pc, #464] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  26949. 800bbba: 6f1b ldr r3, [r3, #112] @ 0x70
  26950. 800bbbc: 4a73 ldr r2, [pc, #460] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  26951. 800bbbe: f023 0304 bic.w r3, r3, #4
  26952. 800bbc2: 6713 str r3, [r2, #112] @ 0x70
  26953. 800bbc4: e01c b.n 800bc00 <HAL_RCC_OscConfig+0x5e0>
  26954. 800bbc6: 687b ldr r3, [r7, #4]
  26955. 800bbc8: 689b ldr r3, [r3, #8]
  26956. 800bbca: 2b05 cmp r3, #5
  26957. 800bbcc: d10c bne.n 800bbe8 <HAL_RCC_OscConfig+0x5c8>
  26958. 800bbce: 4b6f ldr r3, [pc, #444] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  26959. 800bbd0: 6f1b ldr r3, [r3, #112] @ 0x70
  26960. 800bbd2: 4a6e ldr r2, [pc, #440] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  26961. 800bbd4: f043 0304 orr.w r3, r3, #4
  26962. 800bbd8: 6713 str r3, [r2, #112] @ 0x70
  26963. 800bbda: 4b6c ldr r3, [pc, #432] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  26964. 800bbdc: 6f1b ldr r3, [r3, #112] @ 0x70
  26965. 800bbde: 4a6b ldr r2, [pc, #428] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  26966. 800bbe0: f043 0301 orr.w r3, r3, #1
  26967. 800bbe4: 6713 str r3, [r2, #112] @ 0x70
  26968. 800bbe6: e00b b.n 800bc00 <HAL_RCC_OscConfig+0x5e0>
  26969. 800bbe8: 4b68 ldr r3, [pc, #416] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  26970. 800bbea: 6f1b ldr r3, [r3, #112] @ 0x70
  26971. 800bbec: 4a67 ldr r2, [pc, #412] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  26972. 800bbee: f023 0301 bic.w r3, r3, #1
  26973. 800bbf2: 6713 str r3, [r2, #112] @ 0x70
  26974. 800bbf4: 4b65 ldr r3, [pc, #404] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  26975. 800bbf6: 6f1b ldr r3, [r3, #112] @ 0x70
  26976. 800bbf8: 4a64 ldr r2, [pc, #400] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  26977. 800bbfa: f023 0304 bic.w r3, r3, #4
  26978. 800bbfe: 6713 str r3, [r2, #112] @ 0x70
  26979. /* Check the LSE State */
  26980. if ((RCC_OscInitStruct->LSEState) != RCC_LSE_OFF)
  26981. 800bc00: 687b ldr r3, [r7, #4]
  26982. 800bc02: 689b ldr r3, [r3, #8]
  26983. 800bc04: 2b00 cmp r3, #0
  26984. 800bc06: d015 beq.n 800bc34 <HAL_RCC_OscConfig+0x614>
  26985. {
  26986. /* Get Start Tick*/
  26987. tickstart = HAL_GetTick();
  26988. 800bc08: f7f9 ffd2 bl 8005bb0 <HAL_GetTick>
  26989. 800bc0c: 6278 str r0, [r7, #36] @ 0x24
  26990. /* Wait till LSE is ready */
  26991. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == 0U)
  26992. 800bc0e: e00a b.n 800bc26 <HAL_RCC_OscConfig+0x606>
  26993. {
  26994. if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
  26995. 800bc10: f7f9 ffce bl 8005bb0 <HAL_GetTick>
  26996. 800bc14: 4602 mov r2, r0
  26997. 800bc16: 6a7b ldr r3, [r7, #36] @ 0x24
  26998. 800bc18: 1ad3 subs r3, r2, r3
  26999. 800bc1a: f241 3288 movw r2, #5000 @ 0x1388
  27000. 800bc1e: 4293 cmp r3, r2
  27001. 800bc20: d901 bls.n 800bc26 <HAL_RCC_OscConfig+0x606>
  27002. {
  27003. return HAL_TIMEOUT;
  27004. 800bc22: 2303 movs r3, #3
  27005. 800bc24: e14e b.n 800bec4 <HAL_RCC_OscConfig+0x8a4>
  27006. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == 0U)
  27007. 800bc26: 4b59 ldr r3, [pc, #356] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  27008. 800bc28: 6f1b ldr r3, [r3, #112] @ 0x70
  27009. 800bc2a: f003 0302 and.w r3, r3, #2
  27010. 800bc2e: 2b00 cmp r3, #0
  27011. 800bc30: d0ee beq.n 800bc10 <HAL_RCC_OscConfig+0x5f0>
  27012. 800bc32: e014 b.n 800bc5e <HAL_RCC_OscConfig+0x63e>
  27013. }
  27014. }
  27015. else
  27016. {
  27017. /* Get Start Tick*/
  27018. tickstart = HAL_GetTick();
  27019. 800bc34: f7f9 ffbc bl 8005bb0 <HAL_GetTick>
  27020. 800bc38: 6278 str r0, [r7, #36] @ 0x24
  27021. /* Wait till LSE is disabled */
  27022. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != 0U)
  27023. 800bc3a: e00a b.n 800bc52 <HAL_RCC_OscConfig+0x632>
  27024. {
  27025. if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
  27026. 800bc3c: f7f9 ffb8 bl 8005bb0 <HAL_GetTick>
  27027. 800bc40: 4602 mov r2, r0
  27028. 800bc42: 6a7b ldr r3, [r7, #36] @ 0x24
  27029. 800bc44: 1ad3 subs r3, r2, r3
  27030. 800bc46: f241 3288 movw r2, #5000 @ 0x1388
  27031. 800bc4a: 4293 cmp r3, r2
  27032. 800bc4c: d901 bls.n 800bc52 <HAL_RCC_OscConfig+0x632>
  27033. {
  27034. return HAL_TIMEOUT;
  27035. 800bc4e: 2303 movs r3, #3
  27036. 800bc50: e138 b.n 800bec4 <HAL_RCC_OscConfig+0x8a4>
  27037. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != 0U)
  27038. 800bc52: 4b4e ldr r3, [pc, #312] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  27039. 800bc54: 6f1b ldr r3, [r3, #112] @ 0x70
  27040. 800bc56: f003 0302 and.w r3, r3, #2
  27041. 800bc5a: 2b00 cmp r3, #0
  27042. 800bc5c: d1ee bne.n 800bc3c <HAL_RCC_OscConfig+0x61c>
  27043. }
  27044. }
  27045. /*-------------------------------- PLL Configuration -----------------------*/
  27046. /* Check the parameters */
  27047. assert_param(IS_RCC_PLL(RCC_OscInitStruct->PLL.PLLState));
  27048. if ((RCC_OscInitStruct->PLL.PLLState) != RCC_PLL_NONE)
  27049. 800bc5e: 687b ldr r3, [r7, #4]
  27050. 800bc60: 6a5b ldr r3, [r3, #36] @ 0x24
  27051. 800bc62: 2b00 cmp r3, #0
  27052. 800bc64: f000 812d beq.w 800bec2 <HAL_RCC_OscConfig+0x8a2>
  27053. {
  27054. /* Check if the PLL is used as system clock or not */
  27055. if (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_CFGR_SWS_PLL1)
  27056. 800bc68: 4b48 ldr r3, [pc, #288] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  27057. 800bc6a: 691b ldr r3, [r3, #16]
  27058. 800bc6c: f003 0338 and.w r3, r3, #56 @ 0x38
  27059. 800bc70: 2b18 cmp r3, #24
  27060. 800bc72: f000 80bd beq.w 800bdf0 <HAL_RCC_OscConfig+0x7d0>
  27061. {
  27062. if ((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON)
  27063. 800bc76: 687b ldr r3, [r7, #4]
  27064. 800bc78: 6a5b ldr r3, [r3, #36] @ 0x24
  27065. 800bc7a: 2b02 cmp r3, #2
  27066. 800bc7c: f040 809e bne.w 800bdbc <HAL_RCC_OscConfig+0x79c>
  27067. assert_param(IS_RCC_PLLQ_VALUE(RCC_OscInitStruct->PLL.PLLQ));
  27068. assert_param(IS_RCC_PLLR_VALUE(RCC_OscInitStruct->PLL.PLLR));
  27069. assert_param(IS_RCC_PLLFRACN_VALUE(RCC_OscInitStruct->PLL.PLLFRACN));
  27070. /* Disable the main PLL. */
  27071. __HAL_RCC_PLL_DISABLE();
  27072. 800bc80: 4b42 ldr r3, [pc, #264] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  27073. 800bc82: 681b ldr r3, [r3, #0]
  27074. 800bc84: 4a41 ldr r2, [pc, #260] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  27075. 800bc86: f023 7380 bic.w r3, r3, #16777216 @ 0x1000000
  27076. 800bc8a: 6013 str r3, [r2, #0]
  27077. /* Get Start Tick*/
  27078. tickstart = HAL_GetTick();
  27079. 800bc8c: f7f9 ff90 bl 8005bb0 <HAL_GetTick>
  27080. 800bc90: 6278 str r0, [r7, #36] @ 0x24
  27081. /* Wait till PLL is disabled */
  27082. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != 0U)
  27083. 800bc92: e008 b.n 800bca6 <HAL_RCC_OscConfig+0x686>
  27084. {
  27085. if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
  27086. 800bc94: f7f9 ff8c bl 8005bb0 <HAL_GetTick>
  27087. 800bc98: 4602 mov r2, r0
  27088. 800bc9a: 6a7b ldr r3, [r7, #36] @ 0x24
  27089. 800bc9c: 1ad3 subs r3, r2, r3
  27090. 800bc9e: 2b02 cmp r3, #2
  27091. 800bca0: d901 bls.n 800bca6 <HAL_RCC_OscConfig+0x686>
  27092. {
  27093. return HAL_TIMEOUT;
  27094. 800bca2: 2303 movs r3, #3
  27095. 800bca4: e10e b.n 800bec4 <HAL_RCC_OscConfig+0x8a4>
  27096. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != 0U)
  27097. 800bca6: 4b39 ldr r3, [pc, #228] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  27098. 800bca8: 681b ldr r3, [r3, #0]
  27099. 800bcaa: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  27100. 800bcae: 2b00 cmp r3, #0
  27101. 800bcb0: d1f0 bne.n 800bc94 <HAL_RCC_OscConfig+0x674>
  27102. }
  27103. }
  27104. /* Configure the main PLL clock source, multiplication and division factors. */
  27105. __HAL_RCC_PLL_CONFIG(RCC_OscInitStruct->PLL.PLLSource,
  27106. 800bcb2: 4b36 ldr r3, [pc, #216] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  27107. 800bcb4: 6a9a ldr r2, [r3, #40] @ 0x28
  27108. 800bcb6: 4b37 ldr r3, [pc, #220] @ (800bd94 <HAL_RCC_OscConfig+0x774>)
  27109. 800bcb8: 4013 ands r3, r2
  27110. 800bcba: 687a ldr r2, [r7, #4]
  27111. 800bcbc: 6a91 ldr r1, [r2, #40] @ 0x28
  27112. 800bcbe: 687a ldr r2, [r7, #4]
  27113. 800bcc0: 6ad2 ldr r2, [r2, #44] @ 0x2c
  27114. 800bcc2: 0112 lsls r2, r2, #4
  27115. 800bcc4: 430a orrs r2, r1
  27116. 800bcc6: 4931 ldr r1, [pc, #196] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  27117. 800bcc8: 4313 orrs r3, r2
  27118. 800bcca: 628b str r3, [r1, #40] @ 0x28
  27119. 800bccc: 687b ldr r3, [r7, #4]
  27120. 800bcce: 6b1b ldr r3, [r3, #48] @ 0x30
  27121. 800bcd0: 3b01 subs r3, #1
  27122. 800bcd2: f3c3 0208 ubfx r2, r3, #0, #9
  27123. 800bcd6: 687b ldr r3, [r7, #4]
  27124. 800bcd8: 6b5b ldr r3, [r3, #52] @ 0x34
  27125. 800bcda: 3b01 subs r3, #1
  27126. 800bcdc: 025b lsls r3, r3, #9
  27127. 800bcde: b29b uxth r3, r3
  27128. 800bce0: 431a orrs r2, r3
  27129. 800bce2: 687b ldr r3, [r7, #4]
  27130. 800bce4: 6b9b ldr r3, [r3, #56] @ 0x38
  27131. 800bce6: 3b01 subs r3, #1
  27132. 800bce8: 041b lsls r3, r3, #16
  27133. 800bcea: f403 03fe and.w r3, r3, #8323072 @ 0x7f0000
  27134. 800bcee: 431a orrs r2, r3
  27135. 800bcf0: 687b ldr r3, [r7, #4]
  27136. 800bcf2: 6bdb ldr r3, [r3, #60] @ 0x3c
  27137. 800bcf4: 3b01 subs r3, #1
  27138. 800bcf6: 061b lsls r3, r3, #24
  27139. 800bcf8: f003 43fe and.w r3, r3, #2130706432 @ 0x7f000000
  27140. 800bcfc: 4923 ldr r1, [pc, #140] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  27141. 800bcfe: 4313 orrs r3, r2
  27142. 800bd00: 630b str r3, [r1, #48] @ 0x30
  27143. RCC_OscInitStruct->PLL.PLLP,
  27144. RCC_OscInitStruct->PLL.PLLQ,
  27145. RCC_OscInitStruct->PLL.PLLR);
  27146. /* Disable PLLFRACN . */
  27147. __HAL_RCC_PLLFRACN_DISABLE();
  27148. 800bd02: 4b22 ldr r3, [pc, #136] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  27149. 800bd04: 6adb ldr r3, [r3, #44] @ 0x2c
  27150. 800bd06: 4a21 ldr r2, [pc, #132] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  27151. 800bd08: f023 0301 bic.w r3, r3, #1
  27152. 800bd0c: 62d3 str r3, [r2, #44] @ 0x2c
  27153. /* Configure PLL PLL1FRACN */
  27154. __HAL_RCC_PLLFRACN_CONFIG(RCC_OscInitStruct->PLL.PLLFRACN);
  27155. 800bd0e: 4b1f ldr r3, [pc, #124] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  27156. 800bd10: 6b5a ldr r2, [r3, #52] @ 0x34
  27157. 800bd12: 4b21 ldr r3, [pc, #132] @ (800bd98 <HAL_RCC_OscConfig+0x778>)
  27158. 800bd14: 4013 ands r3, r2
  27159. 800bd16: 687a ldr r2, [r7, #4]
  27160. 800bd18: 6c92 ldr r2, [r2, #72] @ 0x48
  27161. 800bd1a: 00d2 lsls r2, r2, #3
  27162. 800bd1c: 491b ldr r1, [pc, #108] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  27163. 800bd1e: 4313 orrs r3, r2
  27164. 800bd20: 634b str r3, [r1, #52] @ 0x34
  27165. /* Select PLL1 input reference frequency range: VCI */
  27166. __HAL_RCC_PLL_VCIRANGE(RCC_OscInitStruct->PLL.PLLRGE) ;
  27167. 800bd22: 4b1a ldr r3, [pc, #104] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  27168. 800bd24: 6adb ldr r3, [r3, #44] @ 0x2c
  27169. 800bd26: f023 020c bic.w r2, r3, #12
  27170. 800bd2a: 687b ldr r3, [r7, #4]
  27171. 800bd2c: 6c1b ldr r3, [r3, #64] @ 0x40
  27172. 800bd2e: 4917 ldr r1, [pc, #92] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  27173. 800bd30: 4313 orrs r3, r2
  27174. 800bd32: 62cb str r3, [r1, #44] @ 0x2c
  27175. /* Select PLL1 output frequency range : VCO */
  27176. __HAL_RCC_PLL_VCORANGE(RCC_OscInitStruct->PLL.PLLVCOSEL) ;
  27177. 800bd34: 4b15 ldr r3, [pc, #84] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  27178. 800bd36: 6adb ldr r3, [r3, #44] @ 0x2c
  27179. 800bd38: f023 0202 bic.w r2, r3, #2
  27180. 800bd3c: 687b ldr r3, [r7, #4]
  27181. 800bd3e: 6c5b ldr r3, [r3, #68] @ 0x44
  27182. 800bd40: 4912 ldr r1, [pc, #72] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  27183. 800bd42: 4313 orrs r3, r2
  27184. 800bd44: 62cb str r3, [r1, #44] @ 0x2c
  27185. /* Enable PLL System Clock output. */
  27186. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVP);
  27187. 800bd46: 4b11 ldr r3, [pc, #68] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  27188. 800bd48: 6adb ldr r3, [r3, #44] @ 0x2c
  27189. 800bd4a: 4a10 ldr r2, [pc, #64] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  27190. 800bd4c: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  27191. 800bd50: 62d3 str r3, [r2, #44] @ 0x2c
  27192. /* Enable PLL1Q Clock output. */
  27193. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  27194. 800bd52: 4b0e ldr r3, [pc, #56] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  27195. 800bd54: 6adb ldr r3, [r3, #44] @ 0x2c
  27196. 800bd56: 4a0d ldr r2, [pc, #52] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  27197. 800bd58: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  27198. 800bd5c: 62d3 str r3, [r2, #44] @ 0x2c
  27199. /* Enable PLL1R Clock output. */
  27200. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVR);
  27201. 800bd5e: 4b0b ldr r3, [pc, #44] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  27202. 800bd60: 6adb ldr r3, [r3, #44] @ 0x2c
  27203. 800bd62: 4a0a ldr r2, [pc, #40] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  27204. 800bd64: f443 2380 orr.w r3, r3, #262144 @ 0x40000
  27205. 800bd68: 62d3 str r3, [r2, #44] @ 0x2c
  27206. /* Enable PLL1FRACN . */
  27207. __HAL_RCC_PLLFRACN_ENABLE();
  27208. 800bd6a: 4b08 ldr r3, [pc, #32] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  27209. 800bd6c: 6adb ldr r3, [r3, #44] @ 0x2c
  27210. 800bd6e: 4a07 ldr r2, [pc, #28] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  27211. 800bd70: f043 0301 orr.w r3, r3, #1
  27212. 800bd74: 62d3 str r3, [r2, #44] @ 0x2c
  27213. /* Enable the main PLL. */
  27214. __HAL_RCC_PLL_ENABLE();
  27215. 800bd76: 4b05 ldr r3, [pc, #20] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  27216. 800bd78: 681b ldr r3, [r3, #0]
  27217. 800bd7a: 4a04 ldr r2, [pc, #16] @ (800bd8c <HAL_RCC_OscConfig+0x76c>)
  27218. 800bd7c: f043 7380 orr.w r3, r3, #16777216 @ 0x1000000
  27219. 800bd80: 6013 str r3, [r2, #0]
  27220. /* Get Start Tick*/
  27221. tickstart = HAL_GetTick();
  27222. 800bd82: f7f9 ff15 bl 8005bb0 <HAL_GetTick>
  27223. 800bd86: 6278 str r0, [r7, #36] @ 0x24
  27224. /* Wait till PLL is ready */
  27225. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == 0U)
  27226. 800bd88: e011 b.n 800bdae <HAL_RCC_OscConfig+0x78e>
  27227. 800bd8a: bf00 nop
  27228. 800bd8c: 58024400 .word 0x58024400
  27229. 800bd90: 58024800 .word 0x58024800
  27230. 800bd94: fffffc0c .word 0xfffffc0c
  27231. 800bd98: ffff0007 .word 0xffff0007
  27232. {
  27233. if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
  27234. 800bd9c: f7f9 ff08 bl 8005bb0 <HAL_GetTick>
  27235. 800bda0: 4602 mov r2, r0
  27236. 800bda2: 6a7b ldr r3, [r7, #36] @ 0x24
  27237. 800bda4: 1ad3 subs r3, r2, r3
  27238. 800bda6: 2b02 cmp r3, #2
  27239. 800bda8: d901 bls.n 800bdae <HAL_RCC_OscConfig+0x78e>
  27240. {
  27241. return HAL_TIMEOUT;
  27242. 800bdaa: 2303 movs r3, #3
  27243. 800bdac: e08a b.n 800bec4 <HAL_RCC_OscConfig+0x8a4>
  27244. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == 0U)
  27245. 800bdae: 4b47 ldr r3, [pc, #284] @ (800becc <HAL_RCC_OscConfig+0x8ac>)
  27246. 800bdb0: 681b ldr r3, [r3, #0]
  27247. 800bdb2: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  27248. 800bdb6: 2b00 cmp r3, #0
  27249. 800bdb8: d0f0 beq.n 800bd9c <HAL_RCC_OscConfig+0x77c>
  27250. 800bdba: e082 b.n 800bec2 <HAL_RCC_OscConfig+0x8a2>
  27251. }
  27252. }
  27253. else
  27254. {
  27255. /* Disable the main PLL. */
  27256. __HAL_RCC_PLL_DISABLE();
  27257. 800bdbc: 4b43 ldr r3, [pc, #268] @ (800becc <HAL_RCC_OscConfig+0x8ac>)
  27258. 800bdbe: 681b ldr r3, [r3, #0]
  27259. 800bdc0: 4a42 ldr r2, [pc, #264] @ (800becc <HAL_RCC_OscConfig+0x8ac>)
  27260. 800bdc2: f023 7380 bic.w r3, r3, #16777216 @ 0x1000000
  27261. 800bdc6: 6013 str r3, [r2, #0]
  27262. /* Get Start Tick*/
  27263. tickstart = HAL_GetTick();
  27264. 800bdc8: f7f9 fef2 bl 8005bb0 <HAL_GetTick>
  27265. 800bdcc: 6278 str r0, [r7, #36] @ 0x24
  27266. /* Wait till PLL is disabled */
  27267. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != 0U)
  27268. 800bdce: e008 b.n 800bde2 <HAL_RCC_OscConfig+0x7c2>
  27269. {
  27270. if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
  27271. 800bdd0: f7f9 feee bl 8005bb0 <HAL_GetTick>
  27272. 800bdd4: 4602 mov r2, r0
  27273. 800bdd6: 6a7b ldr r3, [r7, #36] @ 0x24
  27274. 800bdd8: 1ad3 subs r3, r2, r3
  27275. 800bdda: 2b02 cmp r3, #2
  27276. 800bddc: d901 bls.n 800bde2 <HAL_RCC_OscConfig+0x7c2>
  27277. {
  27278. return HAL_TIMEOUT;
  27279. 800bdde: 2303 movs r3, #3
  27280. 800bde0: e070 b.n 800bec4 <HAL_RCC_OscConfig+0x8a4>
  27281. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != 0U)
  27282. 800bde2: 4b3a ldr r3, [pc, #232] @ (800becc <HAL_RCC_OscConfig+0x8ac>)
  27283. 800bde4: 681b ldr r3, [r3, #0]
  27284. 800bde6: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  27285. 800bdea: 2b00 cmp r3, #0
  27286. 800bdec: d1f0 bne.n 800bdd0 <HAL_RCC_OscConfig+0x7b0>
  27287. 800bdee: e068 b.n 800bec2 <HAL_RCC_OscConfig+0x8a2>
  27288. }
  27289. }
  27290. else
  27291. {
  27292. /* Do not return HAL_ERROR if request repeats the current configuration */
  27293. temp1_pllckcfg = RCC->PLLCKSELR;
  27294. 800bdf0: 4b36 ldr r3, [pc, #216] @ (800becc <HAL_RCC_OscConfig+0x8ac>)
  27295. 800bdf2: 6a9b ldr r3, [r3, #40] @ 0x28
  27296. 800bdf4: 613b str r3, [r7, #16]
  27297. temp2_pllckcfg = RCC->PLL1DIVR;
  27298. 800bdf6: 4b35 ldr r3, [pc, #212] @ (800becc <HAL_RCC_OscConfig+0x8ac>)
  27299. 800bdf8: 6b1b ldr r3, [r3, #48] @ 0x30
  27300. 800bdfa: 60fb str r3, [r7, #12]
  27301. if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) ||
  27302. 800bdfc: 687b ldr r3, [r7, #4]
  27303. 800bdfe: 6a5b ldr r3, [r3, #36] @ 0x24
  27304. 800be00: 2b01 cmp r3, #1
  27305. 800be02: d031 beq.n 800be68 <HAL_RCC_OscConfig+0x848>
  27306. (READ_BIT(temp1_pllckcfg, RCC_PLLCKSELR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) ||
  27307. 800be04: 693b ldr r3, [r7, #16]
  27308. 800be06: f003 0203 and.w r2, r3, #3
  27309. 800be0a: 687b ldr r3, [r7, #4]
  27310. 800be0c: 6a9b ldr r3, [r3, #40] @ 0x28
  27311. if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) ||
  27312. 800be0e: 429a cmp r2, r3
  27313. 800be10: d12a bne.n 800be68 <HAL_RCC_OscConfig+0x848>
  27314. ((READ_BIT(temp1_pllckcfg, RCC_PLLCKSELR_DIVM1) >> RCC_PLLCKSELR_DIVM1_Pos) != RCC_OscInitStruct->PLL.PLLM) ||
  27315. 800be12: 693b ldr r3, [r7, #16]
  27316. 800be14: 091b lsrs r3, r3, #4
  27317. 800be16: f003 023f and.w r2, r3, #63 @ 0x3f
  27318. 800be1a: 687b ldr r3, [r7, #4]
  27319. 800be1c: 6adb ldr r3, [r3, #44] @ 0x2c
  27320. (READ_BIT(temp1_pllckcfg, RCC_PLLCKSELR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) ||
  27321. 800be1e: 429a cmp r2, r3
  27322. 800be20: d122 bne.n 800be68 <HAL_RCC_OscConfig+0x848>
  27323. (READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_N1) != (RCC_OscInitStruct->PLL.PLLN - 1U)) ||
  27324. 800be22: 68fb ldr r3, [r7, #12]
  27325. 800be24: f3c3 0208 ubfx r2, r3, #0, #9
  27326. 800be28: 687b ldr r3, [r7, #4]
  27327. 800be2a: 6b1b ldr r3, [r3, #48] @ 0x30
  27328. 800be2c: 3b01 subs r3, #1
  27329. ((READ_BIT(temp1_pllckcfg, RCC_PLLCKSELR_DIVM1) >> RCC_PLLCKSELR_DIVM1_Pos) != RCC_OscInitStruct->PLL.PLLM) ||
  27330. 800be2e: 429a cmp r2, r3
  27331. 800be30: d11a bne.n 800be68 <HAL_RCC_OscConfig+0x848>
  27332. ((READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_P1) >> RCC_PLL1DIVR_P1_Pos) != (RCC_OscInitStruct->PLL.PLLP - 1U)) ||
  27333. 800be32: 68fb ldr r3, [r7, #12]
  27334. 800be34: 0a5b lsrs r3, r3, #9
  27335. 800be36: f003 027f and.w r2, r3, #127 @ 0x7f
  27336. 800be3a: 687b ldr r3, [r7, #4]
  27337. 800be3c: 6b5b ldr r3, [r3, #52] @ 0x34
  27338. 800be3e: 3b01 subs r3, #1
  27339. (READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_N1) != (RCC_OscInitStruct->PLL.PLLN - 1U)) ||
  27340. 800be40: 429a cmp r2, r3
  27341. 800be42: d111 bne.n 800be68 <HAL_RCC_OscConfig+0x848>
  27342. ((READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_Q1) >> RCC_PLL1DIVR_Q1_Pos) != (RCC_OscInitStruct->PLL.PLLQ - 1U)) ||
  27343. 800be44: 68fb ldr r3, [r7, #12]
  27344. 800be46: 0c1b lsrs r3, r3, #16
  27345. 800be48: f003 027f and.w r2, r3, #127 @ 0x7f
  27346. 800be4c: 687b ldr r3, [r7, #4]
  27347. 800be4e: 6b9b ldr r3, [r3, #56] @ 0x38
  27348. 800be50: 3b01 subs r3, #1
  27349. ((READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_P1) >> RCC_PLL1DIVR_P1_Pos) != (RCC_OscInitStruct->PLL.PLLP - 1U)) ||
  27350. 800be52: 429a cmp r2, r3
  27351. 800be54: d108 bne.n 800be68 <HAL_RCC_OscConfig+0x848>
  27352. ((READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_R1) >> RCC_PLL1DIVR_R1_Pos) != (RCC_OscInitStruct->PLL.PLLR - 1U)))
  27353. 800be56: 68fb ldr r3, [r7, #12]
  27354. 800be58: 0e1b lsrs r3, r3, #24
  27355. 800be5a: f003 027f and.w r2, r3, #127 @ 0x7f
  27356. 800be5e: 687b ldr r3, [r7, #4]
  27357. 800be60: 6bdb ldr r3, [r3, #60] @ 0x3c
  27358. 800be62: 3b01 subs r3, #1
  27359. ((READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_Q1) >> RCC_PLL1DIVR_Q1_Pos) != (RCC_OscInitStruct->PLL.PLLQ - 1U)) ||
  27360. 800be64: 429a cmp r2, r3
  27361. 800be66: d001 beq.n 800be6c <HAL_RCC_OscConfig+0x84c>
  27362. {
  27363. return HAL_ERROR;
  27364. 800be68: 2301 movs r3, #1
  27365. 800be6a: e02b b.n 800bec4 <HAL_RCC_OscConfig+0x8a4>
  27366. }
  27367. else
  27368. {
  27369. /* Check if only fractional part needs to be updated */
  27370. temp1_pllckcfg = ((RCC->PLL1FRACR & RCC_PLL1FRACR_FRACN1) >> RCC_PLL1FRACR_FRACN1_Pos);
  27371. 800be6c: 4b17 ldr r3, [pc, #92] @ (800becc <HAL_RCC_OscConfig+0x8ac>)
  27372. 800be6e: 6b5b ldr r3, [r3, #52] @ 0x34
  27373. 800be70: 08db lsrs r3, r3, #3
  27374. 800be72: f3c3 030c ubfx r3, r3, #0, #13
  27375. 800be76: 613b str r3, [r7, #16]
  27376. if (RCC_OscInitStruct->PLL.PLLFRACN != temp1_pllckcfg)
  27377. 800be78: 687b ldr r3, [r7, #4]
  27378. 800be7a: 6c9b ldr r3, [r3, #72] @ 0x48
  27379. 800be7c: 693a ldr r2, [r7, #16]
  27380. 800be7e: 429a cmp r2, r3
  27381. 800be80: d01f beq.n 800bec2 <HAL_RCC_OscConfig+0x8a2>
  27382. {
  27383. assert_param(IS_RCC_PLLFRACN_VALUE(RCC_OscInitStruct->PLL.PLLFRACN));
  27384. /* Disable PLL1FRACEN */
  27385. __HAL_RCC_PLLFRACN_DISABLE();
  27386. 800be82: 4b12 ldr r3, [pc, #72] @ (800becc <HAL_RCC_OscConfig+0x8ac>)
  27387. 800be84: 6adb ldr r3, [r3, #44] @ 0x2c
  27388. 800be86: 4a11 ldr r2, [pc, #68] @ (800becc <HAL_RCC_OscConfig+0x8ac>)
  27389. 800be88: f023 0301 bic.w r3, r3, #1
  27390. 800be8c: 62d3 str r3, [r2, #44] @ 0x2c
  27391. /* Get Start Tick*/
  27392. tickstart = HAL_GetTick();
  27393. 800be8e: f7f9 fe8f bl 8005bb0 <HAL_GetTick>
  27394. 800be92: 6278 str r0, [r7, #36] @ 0x24
  27395. /* Wait at least 2 CK_REF (PLL input source divided by M) period to make sure next latched value will be taken into account. */
  27396. while ((HAL_GetTick() - tickstart) < PLL_FRAC_TIMEOUT_VALUE)
  27397. 800be94: bf00 nop
  27398. 800be96: f7f9 fe8b bl 8005bb0 <HAL_GetTick>
  27399. 800be9a: 4602 mov r2, r0
  27400. 800be9c: 6a7b ldr r3, [r7, #36] @ 0x24
  27401. 800be9e: 4293 cmp r3, r2
  27402. 800bea0: d0f9 beq.n 800be96 <HAL_RCC_OscConfig+0x876>
  27403. {
  27404. }
  27405. /* Configure PLL1 PLL1FRACN */
  27406. __HAL_RCC_PLLFRACN_CONFIG(RCC_OscInitStruct->PLL.PLLFRACN);
  27407. 800bea2: 4b0a ldr r3, [pc, #40] @ (800becc <HAL_RCC_OscConfig+0x8ac>)
  27408. 800bea4: 6b5a ldr r2, [r3, #52] @ 0x34
  27409. 800bea6: 4b0a ldr r3, [pc, #40] @ (800bed0 <HAL_RCC_OscConfig+0x8b0>)
  27410. 800bea8: 4013 ands r3, r2
  27411. 800beaa: 687a ldr r2, [r7, #4]
  27412. 800beac: 6c92 ldr r2, [r2, #72] @ 0x48
  27413. 800beae: 00d2 lsls r2, r2, #3
  27414. 800beb0: 4906 ldr r1, [pc, #24] @ (800becc <HAL_RCC_OscConfig+0x8ac>)
  27415. 800beb2: 4313 orrs r3, r2
  27416. 800beb4: 634b str r3, [r1, #52] @ 0x34
  27417. /* Enable PLL1FRACEN to latch new value. */
  27418. __HAL_RCC_PLLFRACN_ENABLE();
  27419. 800beb6: 4b05 ldr r3, [pc, #20] @ (800becc <HAL_RCC_OscConfig+0x8ac>)
  27420. 800beb8: 6adb ldr r3, [r3, #44] @ 0x2c
  27421. 800beba: 4a04 ldr r2, [pc, #16] @ (800becc <HAL_RCC_OscConfig+0x8ac>)
  27422. 800bebc: f043 0301 orr.w r3, r3, #1
  27423. 800bec0: 62d3 str r3, [r2, #44] @ 0x2c
  27424. }
  27425. }
  27426. }
  27427. }
  27428. return HAL_OK;
  27429. 800bec2: 2300 movs r3, #0
  27430. }
  27431. 800bec4: 4618 mov r0, r3
  27432. 800bec6: 3730 adds r7, #48 @ 0x30
  27433. 800bec8: 46bd mov sp, r7
  27434. 800beca: bd80 pop {r7, pc}
  27435. 800becc: 58024400 .word 0x58024400
  27436. 800bed0: ffff0007 .word 0xffff0007
  27437. 0800bed4 <HAL_RCC_ClockConfig>:
  27438. * D1CPRE[3:0] bits to ensure that Domain1 core clock not exceed the maximum allowed frequency
  27439. * (for more details refer to section above "Initialization/de-initialization functions")
  27440. * @retval None
  27441. */
  27442. HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency)
  27443. {
  27444. 800bed4: b580 push {r7, lr}
  27445. 800bed6: b086 sub sp, #24
  27446. 800bed8: af00 add r7, sp, #0
  27447. 800beda: 6078 str r0, [r7, #4]
  27448. 800bedc: 6039 str r1, [r7, #0]
  27449. HAL_StatusTypeDef halstatus;
  27450. uint32_t tickstart;
  27451. uint32_t common_system_clock;
  27452. /* Check Null pointer */
  27453. if (RCC_ClkInitStruct == NULL)
  27454. 800bede: 687b ldr r3, [r7, #4]
  27455. 800bee0: 2b00 cmp r3, #0
  27456. 800bee2: d101 bne.n 800bee8 <HAL_RCC_ClockConfig+0x14>
  27457. {
  27458. return HAL_ERROR;
  27459. 800bee4: 2301 movs r3, #1
  27460. 800bee6: e19c b.n 800c222 <HAL_RCC_ClockConfig+0x34e>
  27461. /* To correctly read data from FLASH memory, the number of wait states (LATENCY)
  27462. must be correctly programmed according to the frequency of the CPU clock
  27463. (HCLK) and the supply voltage of the device. */
  27464. /* Increasing the CPU frequency */
  27465. if (FLatency > __HAL_FLASH_GET_LATENCY())
  27466. 800bee8: 4b8a ldr r3, [pc, #552] @ (800c114 <HAL_RCC_ClockConfig+0x240>)
  27467. 800beea: 681b ldr r3, [r3, #0]
  27468. 800beec: f003 030f and.w r3, r3, #15
  27469. 800bef0: 683a ldr r2, [r7, #0]
  27470. 800bef2: 429a cmp r2, r3
  27471. 800bef4: d910 bls.n 800bf18 <HAL_RCC_ClockConfig+0x44>
  27472. {
  27473. /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
  27474. __HAL_FLASH_SET_LATENCY(FLatency);
  27475. 800bef6: 4b87 ldr r3, [pc, #540] @ (800c114 <HAL_RCC_ClockConfig+0x240>)
  27476. 800bef8: 681b ldr r3, [r3, #0]
  27477. 800befa: f023 020f bic.w r2, r3, #15
  27478. 800befe: 4985 ldr r1, [pc, #532] @ (800c114 <HAL_RCC_ClockConfig+0x240>)
  27479. 800bf00: 683b ldr r3, [r7, #0]
  27480. 800bf02: 4313 orrs r3, r2
  27481. 800bf04: 600b str r3, [r1, #0]
  27482. /* Check that the new number of wait states is taken into account to access the Flash
  27483. memory by reading the FLASH_ACR register */
  27484. if (__HAL_FLASH_GET_LATENCY() != FLatency)
  27485. 800bf06: 4b83 ldr r3, [pc, #524] @ (800c114 <HAL_RCC_ClockConfig+0x240>)
  27486. 800bf08: 681b ldr r3, [r3, #0]
  27487. 800bf0a: f003 030f and.w r3, r3, #15
  27488. 800bf0e: 683a ldr r2, [r7, #0]
  27489. 800bf10: 429a cmp r2, r3
  27490. 800bf12: d001 beq.n 800bf18 <HAL_RCC_ClockConfig+0x44>
  27491. {
  27492. return HAL_ERROR;
  27493. 800bf14: 2301 movs r3, #1
  27494. 800bf16: e184 b.n 800c222 <HAL_RCC_ClockConfig+0x34e>
  27495. }
  27496. /* Increasing the BUS frequency divider */
  27497. /*-------------------------- D1PCLK1/CDPCLK1 Configuration ---------------------------*/
  27498. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_D1PCLK1) == RCC_CLOCKTYPE_D1PCLK1)
  27499. 800bf18: 687b ldr r3, [r7, #4]
  27500. 800bf1a: 681b ldr r3, [r3, #0]
  27501. 800bf1c: f003 0304 and.w r3, r3, #4
  27502. 800bf20: 2b00 cmp r3, #0
  27503. 800bf22: d010 beq.n 800bf46 <HAL_RCC_ClockConfig+0x72>
  27504. {
  27505. #if defined (RCC_D1CFGR_D1PPRE)
  27506. if ((RCC_ClkInitStruct->APB3CLKDivider) > (RCC->D1CFGR & RCC_D1CFGR_D1PPRE))
  27507. 800bf24: 687b ldr r3, [r7, #4]
  27508. 800bf26: 691a ldr r2, [r3, #16]
  27509. 800bf28: 4b7b ldr r3, [pc, #492] @ (800c118 <HAL_RCC_ClockConfig+0x244>)
  27510. 800bf2a: 699b ldr r3, [r3, #24]
  27511. 800bf2c: f003 0370 and.w r3, r3, #112 @ 0x70
  27512. 800bf30: 429a cmp r2, r3
  27513. 800bf32: d908 bls.n 800bf46 <HAL_RCC_ClockConfig+0x72>
  27514. {
  27515. assert_param(IS_RCC_D1PCLK1(RCC_ClkInitStruct->APB3CLKDivider));
  27516. MODIFY_REG(RCC->D1CFGR, RCC_D1CFGR_D1PPRE, RCC_ClkInitStruct->APB3CLKDivider);
  27517. 800bf34: 4b78 ldr r3, [pc, #480] @ (800c118 <HAL_RCC_ClockConfig+0x244>)
  27518. 800bf36: 699b ldr r3, [r3, #24]
  27519. 800bf38: f023 0270 bic.w r2, r3, #112 @ 0x70
  27520. 800bf3c: 687b ldr r3, [r7, #4]
  27521. 800bf3e: 691b ldr r3, [r3, #16]
  27522. 800bf40: 4975 ldr r1, [pc, #468] @ (800c118 <HAL_RCC_ClockConfig+0x244>)
  27523. 800bf42: 4313 orrs r3, r2
  27524. 800bf44: 618b str r3, [r1, #24]
  27525. }
  27526. #endif
  27527. }
  27528. /*-------------------------- PCLK1 Configuration ---------------------------*/
  27529. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
  27530. 800bf46: 687b ldr r3, [r7, #4]
  27531. 800bf48: 681b ldr r3, [r3, #0]
  27532. 800bf4a: f003 0308 and.w r3, r3, #8
  27533. 800bf4e: 2b00 cmp r3, #0
  27534. 800bf50: d010 beq.n 800bf74 <HAL_RCC_ClockConfig+0xa0>
  27535. {
  27536. #if defined (RCC_D2CFGR_D2PPRE1)
  27537. if ((RCC_ClkInitStruct->APB1CLKDivider) > (RCC->D2CFGR & RCC_D2CFGR_D2PPRE1))
  27538. 800bf52: 687b ldr r3, [r7, #4]
  27539. 800bf54: 695a ldr r2, [r3, #20]
  27540. 800bf56: 4b70 ldr r3, [pc, #448] @ (800c118 <HAL_RCC_ClockConfig+0x244>)
  27541. 800bf58: 69db ldr r3, [r3, #28]
  27542. 800bf5a: f003 0370 and.w r3, r3, #112 @ 0x70
  27543. 800bf5e: 429a cmp r2, r3
  27544. 800bf60: d908 bls.n 800bf74 <HAL_RCC_ClockConfig+0xa0>
  27545. {
  27546. assert_param(IS_RCC_PCLK1(RCC_ClkInitStruct->APB1CLKDivider));
  27547. MODIFY_REG(RCC->D2CFGR, RCC_D2CFGR_D2PPRE1, (RCC_ClkInitStruct->APB1CLKDivider));
  27548. 800bf62: 4b6d ldr r3, [pc, #436] @ (800c118 <HAL_RCC_ClockConfig+0x244>)
  27549. 800bf64: 69db ldr r3, [r3, #28]
  27550. 800bf66: f023 0270 bic.w r2, r3, #112 @ 0x70
  27551. 800bf6a: 687b ldr r3, [r7, #4]
  27552. 800bf6c: 695b ldr r3, [r3, #20]
  27553. 800bf6e: 496a ldr r1, [pc, #424] @ (800c118 <HAL_RCC_ClockConfig+0x244>)
  27554. 800bf70: 4313 orrs r3, r2
  27555. 800bf72: 61cb str r3, [r1, #28]
  27556. MODIFY_REG(RCC->CDCFGR2, RCC_CDCFGR2_CDPPRE1, (RCC_ClkInitStruct->APB1CLKDivider));
  27557. }
  27558. #endif
  27559. }
  27560. /*-------------------------- PCLK2 Configuration ---------------------------*/
  27561. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
  27562. 800bf74: 687b ldr r3, [r7, #4]
  27563. 800bf76: 681b ldr r3, [r3, #0]
  27564. 800bf78: f003 0310 and.w r3, r3, #16
  27565. 800bf7c: 2b00 cmp r3, #0
  27566. 800bf7e: d010 beq.n 800bfa2 <HAL_RCC_ClockConfig+0xce>
  27567. {
  27568. #if defined(RCC_D2CFGR_D2PPRE2)
  27569. if ((RCC_ClkInitStruct->APB2CLKDivider) > (RCC->D2CFGR & RCC_D2CFGR_D2PPRE2))
  27570. 800bf80: 687b ldr r3, [r7, #4]
  27571. 800bf82: 699a ldr r2, [r3, #24]
  27572. 800bf84: 4b64 ldr r3, [pc, #400] @ (800c118 <HAL_RCC_ClockConfig+0x244>)
  27573. 800bf86: 69db ldr r3, [r3, #28]
  27574. 800bf88: f403 63e0 and.w r3, r3, #1792 @ 0x700
  27575. 800bf8c: 429a cmp r2, r3
  27576. 800bf8e: d908 bls.n 800bfa2 <HAL_RCC_ClockConfig+0xce>
  27577. {
  27578. assert_param(IS_RCC_PCLK2(RCC_ClkInitStruct->APB2CLKDivider));
  27579. MODIFY_REG(RCC->D2CFGR, RCC_D2CFGR_D2PPRE2, (RCC_ClkInitStruct->APB2CLKDivider));
  27580. 800bf90: 4b61 ldr r3, [pc, #388] @ (800c118 <HAL_RCC_ClockConfig+0x244>)
  27581. 800bf92: 69db ldr r3, [r3, #28]
  27582. 800bf94: f423 62e0 bic.w r2, r3, #1792 @ 0x700
  27583. 800bf98: 687b ldr r3, [r7, #4]
  27584. 800bf9a: 699b ldr r3, [r3, #24]
  27585. 800bf9c: 495e ldr r1, [pc, #376] @ (800c118 <HAL_RCC_ClockConfig+0x244>)
  27586. 800bf9e: 4313 orrs r3, r2
  27587. 800bfa0: 61cb str r3, [r1, #28]
  27588. }
  27589. #endif
  27590. }
  27591. /*-------------------------- D3PCLK1 Configuration ---------------------------*/
  27592. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_D3PCLK1) == RCC_CLOCKTYPE_D3PCLK1)
  27593. 800bfa2: 687b ldr r3, [r7, #4]
  27594. 800bfa4: 681b ldr r3, [r3, #0]
  27595. 800bfa6: f003 0320 and.w r3, r3, #32
  27596. 800bfaa: 2b00 cmp r3, #0
  27597. 800bfac: d010 beq.n 800bfd0 <HAL_RCC_ClockConfig+0xfc>
  27598. {
  27599. #if defined(RCC_D3CFGR_D3PPRE)
  27600. if ((RCC_ClkInitStruct->APB4CLKDivider) > (RCC->D3CFGR & RCC_D3CFGR_D3PPRE))
  27601. 800bfae: 687b ldr r3, [r7, #4]
  27602. 800bfb0: 69da ldr r2, [r3, #28]
  27603. 800bfb2: 4b59 ldr r3, [pc, #356] @ (800c118 <HAL_RCC_ClockConfig+0x244>)
  27604. 800bfb4: 6a1b ldr r3, [r3, #32]
  27605. 800bfb6: f003 0370 and.w r3, r3, #112 @ 0x70
  27606. 800bfba: 429a cmp r2, r3
  27607. 800bfbc: d908 bls.n 800bfd0 <HAL_RCC_ClockConfig+0xfc>
  27608. {
  27609. assert_param(IS_RCC_D3PCLK1(RCC_ClkInitStruct->APB4CLKDivider));
  27610. MODIFY_REG(RCC->D3CFGR, RCC_D3CFGR_D3PPRE, (RCC_ClkInitStruct->APB4CLKDivider));
  27611. 800bfbe: 4b56 ldr r3, [pc, #344] @ (800c118 <HAL_RCC_ClockConfig+0x244>)
  27612. 800bfc0: 6a1b ldr r3, [r3, #32]
  27613. 800bfc2: f023 0270 bic.w r2, r3, #112 @ 0x70
  27614. 800bfc6: 687b ldr r3, [r7, #4]
  27615. 800bfc8: 69db ldr r3, [r3, #28]
  27616. 800bfca: 4953 ldr r1, [pc, #332] @ (800c118 <HAL_RCC_ClockConfig+0x244>)
  27617. 800bfcc: 4313 orrs r3, r2
  27618. 800bfce: 620b str r3, [r1, #32]
  27619. }
  27620. #endif
  27621. }
  27622. /*-------------------------- HCLK Configuration --------------------------*/
  27623. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK)
  27624. 800bfd0: 687b ldr r3, [r7, #4]
  27625. 800bfd2: 681b ldr r3, [r3, #0]
  27626. 800bfd4: f003 0302 and.w r3, r3, #2
  27627. 800bfd8: 2b00 cmp r3, #0
  27628. 800bfda: d010 beq.n 800bffe <HAL_RCC_ClockConfig+0x12a>
  27629. {
  27630. #if defined (RCC_D1CFGR_HPRE)
  27631. if ((RCC_ClkInitStruct->AHBCLKDivider) > (RCC->D1CFGR & RCC_D1CFGR_HPRE))
  27632. 800bfdc: 687b ldr r3, [r7, #4]
  27633. 800bfde: 68da ldr r2, [r3, #12]
  27634. 800bfe0: 4b4d ldr r3, [pc, #308] @ (800c118 <HAL_RCC_ClockConfig+0x244>)
  27635. 800bfe2: 699b ldr r3, [r3, #24]
  27636. 800bfe4: f003 030f and.w r3, r3, #15
  27637. 800bfe8: 429a cmp r2, r3
  27638. 800bfea: d908 bls.n 800bffe <HAL_RCC_ClockConfig+0x12a>
  27639. {
  27640. /* Set the new HCLK clock divider */
  27641. assert_param(IS_RCC_HCLK(RCC_ClkInitStruct->AHBCLKDivider));
  27642. MODIFY_REG(RCC->D1CFGR, RCC_D1CFGR_HPRE, RCC_ClkInitStruct->AHBCLKDivider);
  27643. 800bfec: 4b4a ldr r3, [pc, #296] @ (800c118 <HAL_RCC_ClockConfig+0x244>)
  27644. 800bfee: 699b ldr r3, [r3, #24]
  27645. 800bff0: f023 020f bic.w r2, r3, #15
  27646. 800bff4: 687b ldr r3, [r7, #4]
  27647. 800bff6: 68db ldr r3, [r3, #12]
  27648. 800bff8: 4947 ldr r1, [pc, #284] @ (800c118 <HAL_RCC_ClockConfig+0x244>)
  27649. 800bffa: 4313 orrs r3, r2
  27650. 800bffc: 618b str r3, [r1, #24]
  27651. }
  27652. #endif
  27653. }
  27654. /*------------------------- SYSCLK Configuration -------------------------*/
  27655. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK)
  27656. 800bffe: 687b ldr r3, [r7, #4]
  27657. 800c000: 681b ldr r3, [r3, #0]
  27658. 800c002: f003 0301 and.w r3, r3, #1
  27659. 800c006: 2b00 cmp r3, #0
  27660. 800c008: d055 beq.n 800c0b6 <HAL_RCC_ClockConfig+0x1e2>
  27661. {
  27662. assert_param(IS_RCC_SYSCLK(RCC_ClkInitStruct->SYSCLKDivider));
  27663. assert_param(IS_RCC_SYSCLKSOURCE(RCC_ClkInitStruct->SYSCLKSource));
  27664. #if defined(RCC_D1CFGR_D1CPRE)
  27665. MODIFY_REG(RCC->D1CFGR, RCC_D1CFGR_D1CPRE, RCC_ClkInitStruct->SYSCLKDivider);
  27666. 800c00a: 4b43 ldr r3, [pc, #268] @ (800c118 <HAL_RCC_ClockConfig+0x244>)
  27667. 800c00c: 699b ldr r3, [r3, #24]
  27668. 800c00e: f423 6270 bic.w r2, r3, #3840 @ 0xf00
  27669. 800c012: 687b ldr r3, [r7, #4]
  27670. 800c014: 689b ldr r3, [r3, #8]
  27671. 800c016: 4940 ldr r1, [pc, #256] @ (800c118 <HAL_RCC_ClockConfig+0x244>)
  27672. 800c018: 4313 orrs r3, r2
  27673. 800c01a: 618b str r3, [r1, #24]
  27674. #else
  27675. MODIFY_REG(RCC->CDCFGR1, RCC_CDCFGR1_CDCPRE, RCC_ClkInitStruct->SYSCLKDivider);
  27676. #endif
  27677. /* HSE is selected as System Clock Source */
  27678. if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE)
  27679. 800c01c: 687b ldr r3, [r7, #4]
  27680. 800c01e: 685b ldr r3, [r3, #4]
  27681. 800c020: 2b02 cmp r3, #2
  27682. 800c022: d107 bne.n 800c034 <HAL_RCC_ClockConfig+0x160>
  27683. {
  27684. /* Check the HSE ready flag */
  27685. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == 0U)
  27686. 800c024: 4b3c ldr r3, [pc, #240] @ (800c118 <HAL_RCC_ClockConfig+0x244>)
  27687. 800c026: 681b ldr r3, [r3, #0]
  27688. 800c028: f403 3300 and.w r3, r3, #131072 @ 0x20000
  27689. 800c02c: 2b00 cmp r3, #0
  27690. 800c02e: d121 bne.n 800c074 <HAL_RCC_ClockConfig+0x1a0>
  27691. {
  27692. return HAL_ERROR;
  27693. 800c030: 2301 movs r3, #1
  27694. 800c032: e0f6 b.n 800c222 <HAL_RCC_ClockConfig+0x34e>
  27695. }
  27696. }
  27697. /* PLL is selected as System Clock Source */
  27698. else if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK)
  27699. 800c034: 687b ldr r3, [r7, #4]
  27700. 800c036: 685b ldr r3, [r3, #4]
  27701. 800c038: 2b03 cmp r3, #3
  27702. 800c03a: d107 bne.n 800c04c <HAL_RCC_ClockConfig+0x178>
  27703. {
  27704. /* Check the PLL ready flag */
  27705. if (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == 0U)
  27706. 800c03c: 4b36 ldr r3, [pc, #216] @ (800c118 <HAL_RCC_ClockConfig+0x244>)
  27707. 800c03e: 681b ldr r3, [r3, #0]
  27708. 800c040: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  27709. 800c044: 2b00 cmp r3, #0
  27710. 800c046: d115 bne.n 800c074 <HAL_RCC_ClockConfig+0x1a0>
  27711. {
  27712. return HAL_ERROR;
  27713. 800c048: 2301 movs r3, #1
  27714. 800c04a: e0ea b.n 800c222 <HAL_RCC_ClockConfig+0x34e>
  27715. }
  27716. }
  27717. /* CSI is selected as System Clock Source */
  27718. else if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_CSI)
  27719. 800c04c: 687b ldr r3, [r7, #4]
  27720. 800c04e: 685b ldr r3, [r3, #4]
  27721. 800c050: 2b01 cmp r3, #1
  27722. 800c052: d107 bne.n 800c064 <HAL_RCC_ClockConfig+0x190>
  27723. {
  27724. /* Check the PLL ready flag */
  27725. if (__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) == 0U)
  27726. 800c054: 4b30 ldr r3, [pc, #192] @ (800c118 <HAL_RCC_ClockConfig+0x244>)
  27727. 800c056: 681b ldr r3, [r3, #0]
  27728. 800c058: f403 7380 and.w r3, r3, #256 @ 0x100
  27729. 800c05c: 2b00 cmp r3, #0
  27730. 800c05e: d109 bne.n 800c074 <HAL_RCC_ClockConfig+0x1a0>
  27731. {
  27732. return HAL_ERROR;
  27733. 800c060: 2301 movs r3, #1
  27734. 800c062: e0de b.n 800c222 <HAL_RCC_ClockConfig+0x34e>
  27735. }
  27736. /* HSI is selected as System Clock Source */
  27737. else
  27738. {
  27739. /* Check the HSI ready flag */
  27740. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == 0U)
  27741. 800c064: 4b2c ldr r3, [pc, #176] @ (800c118 <HAL_RCC_ClockConfig+0x244>)
  27742. 800c066: 681b ldr r3, [r3, #0]
  27743. 800c068: f003 0304 and.w r3, r3, #4
  27744. 800c06c: 2b00 cmp r3, #0
  27745. 800c06e: d101 bne.n 800c074 <HAL_RCC_ClockConfig+0x1a0>
  27746. {
  27747. return HAL_ERROR;
  27748. 800c070: 2301 movs r3, #1
  27749. 800c072: e0d6 b.n 800c222 <HAL_RCC_ClockConfig+0x34e>
  27750. }
  27751. }
  27752. MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, RCC_ClkInitStruct->SYSCLKSource);
  27753. 800c074: 4b28 ldr r3, [pc, #160] @ (800c118 <HAL_RCC_ClockConfig+0x244>)
  27754. 800c076: 691b ldr r3, [r3, #16]
  27755. 800c078: f023 0207 bic.w r2, r3, #7
  27756. 800c07c: 687b ldr r3, [r7, #4]
  27757. 800c07e: 685b ldr r3, [r3, #4]
  27758. 800c080: 4925 ldr r1, [pc, #148] @ (800c118 <HAL_RCC_ClockConfig+0x244>)
  27759. 800c082: 4313 orrs r3, r2
  27760. 800c084: 610b str r3, [r1, #16]
  27761. /* Get Start Tick*/
  27762. tickstart = HAL_GetTick();
  27763. 800c086: f7f9 fd93 bl 8005bb0 <HAL_GetTick>
  27764. 800c08a: 6178 str r0, [r7, #20]
  27765. while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos))
  27766. 800c08c: e00a b.n 800c0a4 <HAL_RCC_ClockConfig+0x1d0>
  27767. {
  27768. if ((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE)
  27769. 800c08e: f7f9 fd8f bl 8005bb0 <HAL_GetTick>
  27770. 800c092: 4602 mov r2, r0
  27771. 800c094: 697b ldr r3, [r7, #20]
  27772. 800c096: 1ad3 subs r3, r2, r3
  27773. 800c098: f241 3288 movw r2, #5000 @ 0x1388
  27774. 800c09c: 4293 cmp r3, r2
  27775. 800c09e: d901 bls.n 800c0a4 <HAL_RCC_ClockConfig+0x1d0>
  27776. {
  27777. return HAL_TIMEOUT;
  27778. 800c0a0: 2303 movs r3, #3
  27779. 800c0a2: e0be b.n 800c222 <HAL_RCC_ClockConfig+0x34e>
  27780. while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos))
  27781. 800c0a4: 4b1c ldr r3, [pc, #112] @ (800c118 <HAL_RCC_ClockConfig+0x244>)
  27782. 800c0a6: 691b ldr r3, [r3, #16]
  27783. 800c0a8: f003 0238 and.w r2, r3, #56 @ 0x38
  27784. 800c0ac: 687b ldr r3, [r7, #4]
  27785. 800c0ae: 685b ldr r3, [r3, #4]
  27786. 800c0b0: 00db lsls r3, r3, #3
  27787. 800c0b2: 429a cmp r2, r3
  27788. 800c0b4: d1eb bne.n 800c08e <HAL_RCC_ClockConfig+0x1ba>
  27789. }
  27790. /* Decreasing the BUS frequency divider */
  27791. /*-------------------------- HCLK Configuration --------------------------*/
  27792. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK)
  27793. 800c0b6: 687b ldr r3, [r7, #4]
  27794. 800c0b8: 681b ldr r3, [r3, #0]
  27795. 800c0ba: f003 0302 and.w r3, r3, #2
  27796. 800c0be: 2b00 cmp r3, #0
  27797. 800c0c0: d010 beq.n 800c0e4 <HAL_RCC_ClockConfig+0x210>
  27798. {
  27799. #if defined(RCC_D1CFGR_HPRE)
  27800. if ((RCC_ClkInitStruct->AHBCLKDivider) < (RCC->D1CFGR & RCC_D1CFGR_HPRE))
  27801. 800c0c2: 687b ldr r3, [r7, #4]
  27802. 800c0c4: 68da ldr r2, [r3, #12]
  27803. 800c0c6: 4b14 ldr r3, [pc, #80] @ (800c118 <HAL_RCC_ClockConfig+0x244>)
  27804. 800c0c8: 699b ldr r3, [r3, #24]
  27805. 800c0ca: f003 030f and.w r3, r3, #15
  27806. 800c0ce: 429a cmp r2, r3
  27807. 800c0d0: d208 bcs.n 800c0e4 <HAL_RCC_ClockConfig+0x210>
  27808. {
  27809. /* Set the new HCLK clock divider */
  27810. assert_param(IS_RCC_HCLK(RCC_ClkInitStruct->AHBCLKDivider));
  27811. MODIFY_REG(RCC->D1CFGR, RCC_D1CFGR_HPRE, RCC_ClkInitStruct->AHBCLKDivider);
  27812. 800c0d2: 4b11 ldr r3, [pc, #68] @ (800c118 <HAL_RCC_ClockConfig+0x244>)
  27813. 800c0d4: 699b ldr r3, [r3, #24]
  27814. 800c0d6: f023 020f bic.w r2, r3, #15
  27815. 800c0da: 687b ldr r3, [r7, #4]
  27816. 800c0dc: 68db ldr r3, [r3, #12]
  27817. 800c0de: 490e ldr r1, [pc, #56] @ (800c118 <HAL_RCC_ClockConfig+0x244>)
  27818. 800c0e0: 4313 orrs r3, r2
  27819. 800c0e2: 618b str r3, [r1, #24]
  27820. }
  27821. #endif
  27822. }
  27823. /* Decreasing the number of wait states because of lower CPU frequency */
  27824. if (FLatency < __HAL_FLASH_GET_LATENCY())
  27825. 800c0e4: 4b0b ldr r3, [pc, #44] @ (800c114 <HAL_RCC_ClockConfig+0x240>)
  27826. 800c0e6: 681b ldr r3, [r3, #0]
  27827. 800c0e8: f003 030f and.w r3, r3, #15
  27828. 800c0ec: 683a ldr r2, [r7, #0]
  27829. 800c0ee: 429a cmp r2, r3
  27830. 800c0f0: d214 bcs.n 800c11c <HAL_RCC_ClockConfig+0x248>
  27831. {
  27832. /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
  27833. __HAL_FLASH_SET_LATENCY(FLatency);
  27834. 800c0f2: 4b08 ldr r3, [pc, #32] @ (800c114 <HAL_RCC_ClockConfig+0x240>)
  27835. 800c0f4: 681b ldr r3, [r3, #0]
  27836. 800c0f6: f023 020f bic.w r2, r3, #15
  27837. 800c0fa: 4906 ldr r1, [pc, #24] @ (800c114 <HAL_RCC_ClockConfig+0x240>)
  27838. 800c0fc: 683b ldr r3, [r7, #0]
  27839. 800c0fe: 4313 orrs r3, r2
  27840. 800c100: 600b str r3, [r1, #0]
  27841. /* Check that the new number of wait states is taken into account to access the Flash
  27842. memory by reading the FLASH_ACR register */
  27843. if (__HAL_FLASH_GET_LATENCY() != FLatency)
  27844. 800c102: 4b04 ldr r3, [pc, #16] @ (800c114 <HAL_RCC_ClockConfig+0x240>)
  27845. 800c104: 681b ldr r3, [r3, #0]
  27846. 800c106: f003 030f and.w r3, r3, #15
  27847. 800c10a: 683a ldr r2, [r7, #0]
  27848. 800c10c: 429a cmp r2, r3
  27849. 800c10e: d005 beq.n 800c11c <HAL_RCC_ClockConfig+0x248>
  27850. {
  27851. return HAL_ERROR;
  27852. 800c110: 2301 movs r3, #1
  27853. 800c112: e086 b.n 800c222 <HAL_RCC_ClockConfig+0x34e>
  27854. 800c114: 52002000 .word 0x52002000
  27855. 800c118: 58024400 .word 0x58024400
  27856. }
  27857. }
  27858. /*-------------------------- D1PCLK1/CDPCLK Configuration ---------------------------*/
  27859. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_D1PCLK1) == RCC_CLOCKTYPE_D1PCLK1)
  27860. 800c11c: 687b ldr r3, [r7, #4]
  27861. 800c11e: 681b ldr r3, [r3, #0]
  27862. 800c120: f003 0304 and.w r3, r3, #4
  27863. 800c124: 2b00 cmp r3, #0
  27864. 800c126: d010 beq.n 800c14a <HAL_RCC_ClockConfig+0x276>
  27865. {
  27866. #if defined(RCC_D1CFGR_D1PPRE)
  27867. if ((RCC_ClkInitStruct->APB3CLKDivider) < (RCC->D1CFGR & RCC_D1CFGR_D1PPRE))
  27868. 800c128: 687b ldr r3, [r7, #4]
  27869. 800c12a: 691a ldr r2, [r3, #16]
  27870. 800c12c: 4b3f ldr r3, [pc, #252] @ (800c22c <HAL_RCC_ClockConfig+0x358>)
  27871. 800c12e: 699b ldr r3, [r3, #24]
  27872. 800c130: f003 0370 and.w r3, r3, #112 @ 0x70
  27873. 800c134: 429a cmp r2, r3
  27874. 800c136: d208 bcs.n 800c14a <HAL_RCC_ClockConfig+0x276>
  27875. {
  27876. assert_param(IS_RCC_D1PCLK1(RCC_ClkInitStruct->APB3CLKDivider));
  27877. MODIFY_REG(RCC->D1CFGR, RCC_D1CFGR_D1PPRE, RCC_ClkInitStruct->APB3CLKDivider);
  27878. 800c138: 4b3c ldr r3, [pc, #240] @ (800c22c <HAL_RCC_ClockConfig+0x358>)
  27879. 800c13a: 699b ldr r3, [r3, #24]
  27880. 800c13c: f023 0270 bic.w r2, r3, #112 @ 0x70
  27881. 800c140: 687b ldr r3, [r7, #4]
  27882. 800c142: 691b ldr r3, [r3, #16]
  27883. 800c144: 4939 ldr r1, [pc, #228] @ (800c22c <HAL_RCC_ClockConfig+0x358>)
  27884. 800c146: 4313 orrs r3, r2
  27885. 800c148: 618b str r3, [r1, #24]
  27886. }
  27887. #endif
  27888. }
  27889. /*-------------------------- PCLK1 Configuration ---------------------------*/
  27890. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
  27891. 800c14a: 687b ldr r3, [r7, #4]
  27892. 800c14c: 681b ldr r3, [r3, #0]
  27893. 800c14e: f003 0308 and.w r3, r3, #8
  27894. 800c152: 2b00 cmp r3, #0
  27895. 800c154: d010 beq.n 800c178 <HAL_RCC_ClockConfig+0x2a4>
  27896. {
  27897. #if defined(RCC_D2CFGR_D2PPRE1)
  27898. if ((RCC_ClkInitStruct->APB1CLKDivider) < (RCC->D2CFGR & RCC_D2CFGR_D2PPRE1))
  27899. 800c156: 687b ldr r3, [r7, #4]
  27900. 800c158: 695a ldr r2, [r3, #20]
  27901. 800c15a: 4b34 ldr r3, [pc, #208] @ (800c22c <HAL_RCC_ClockConfig+0x358>)
  27902. 800c15c: 69db ldr r3, [r3, #28]
  27903. 800c15e: f003 0370 and.w r3, r3, #112 @ 0x70
  27904. 800c162: 429a cmp r2, r3
  27905. 800c164: d208 bcs.n 800c178 <HAL_RCC_ClockConfig+0x2a4>
  27906. {
  27907. assert_param(IS_RCC_PCLK1(RCC_ClkInitStruct->APB1CLKDivider));
  27908. MODIFY_REG(RCC->D2CFGR, RCC_D2CFGR_D2PPRE1, (RCC_ClkInitStruct->APB1CLKDivider));
  27909. 800c166: 4b31 ldr r3, [pc, #196] @ (800c22c <HAL_RCC_ClockConfig+0x358>)
  27910. 800c168: 69db ldr r3, [r3, #28]
  27911. 800c16a: f023 0270 bic.w r2, r3, #112 @ 0x70
  27912. 800c16e: 687b ldr r3, [r7, #4]
  27913. 800c170: 695b ldr r3, [r3, #20]
  27914. 800c172: 492e ldr r1, [pc, #184] @ (800c22c <HAL_RCC_ClockConfig+0x358>)
  27915. 800c174: 4313 orrs r3, r2
  27916. 800c176: 61cb str r3, [r1, #28]
  27917. }
  27918. #endif
  27919. }
  27920. /*-------------------------- PCLK2 Configuration ---------------------------*/
  27921. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
  27922. 800c178: 687b ldr r3, [r7, #4]
  27923. 800c17a: 681b ldr r3, [r3, #0]
  27924. 800c17c: f003 0310 and.w r3, r3, #16
  27925. 800c180: 2b00 cmp r3, #0
  27926. 800c182: d010 beq.n 800c1a6 <HAL_RCC_ClockConfig+0x2d2>
  27927. {
  27928. #if defined (RCC_D2CFGR_D2PPRE2)
  27929. if ((RCC_ClkInitStruct->APB2CLKDivider) < (RCC->D2CFGR & RCC_D2CFGR_D2PPRE2))
  27930. 800c184: 687b ldr r3, [r7, #4]
  27931. 800c186: 699a ldr r2, [r3, #24]
  27932. 800c188: 4b28 ldr r3, [pc, #160] @ (800c22c <HAL_RCC_ClockConfig+0x358>)
  27933. 800c18a: 69db ldr r3, [r3, #28]
  27934. 800c18c: f403 63e0 and.w r3, r3, #1792 @ 0x700
  27935. 800c190: 429a cmp r2, r3
  27936. 800c192: d208 bcs.n 800c1a6 <HAL_RCC_ClockConfig+0x2d2>
  27937. {
  27938. assert_param(IS_RCC_PCLK2(RCC_ClkInitStruct->APB2CLKDivider));
  27939. MODIFY_REG(RCC->D2CFGR, RCC_D2CFGR_D2PPRE2, (RCC_ClkInitStruct->APB2CLKDivider));
  27940. 800c194: 4b25 ldr r3, [pc, #148] @ (800c22c <HAL_RCC_ClockConfig+0x358>)
  27941. 800c196: 69db ldr r3, [r3, #28]
  27942. 800c198: f423 62e0 bic.w r2, r3, #1792 @ 0x700
  27943. 800c19c: 687b ldr r3, [r7, #4]
  27944. 800c19e: 699b ldr r3, [r3, #24]
  27945. 800c1a0: 4922 ldr r1, [pc, #136] @ (800c22c <HAL_RCC_ClockConfig+0x358>)
  27946. 800c1a2: 4313 orrs r3, r2
  27947. 800c1a4: 61cb str r3, [r1, #28]
  27948. }
  27949. #endif
  27950. }
  27951. /*-------------------------- D3PCLK1/SRDPCLK1 Configuration ---------------------------*/
  27952. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_D3PCLK1) == RCC_CLOCKTYPE_D3PCLK1)
  27953. 800c1a6: 687b ldr r3, [r7, #4]
  27954. 800c1a8: 681b ldr r3, [r3, #0]
  27955. 800c1aa: f003 0320 and.w r3, r3, #32
  27956. 800c1ae: 2b00 cmp r3, #0
  27957. 800c1b0: d010 beq.n 800c1d4 <HAL_RCC_ClockConfig+0x300>
  27958. {
  27959. #if defined(RCC_D3CFGR_D3PPRE)
  27960. if ((RCC_ClkInitStruct->APB4CLKDivider) < (RCC->D3CFGR & RCC_D3CFGR_D3PPRE))
  27961. 800c1b2: 687b ldr r3, [r7, #4]
  27962. 800c1b4: 69da ldr r2, [r3, #28]
  27963. 800c1b6: 4b1d ldr r3, [pc, #116] @ (800c22c <HAL_RCC_ClockConfig+0x358>)
  27964. 800c1b8: 6a1b ldr r3, [r3, #32]
  27965. 800c1ba: f003 0370 and.w r3, r3, #112 @ 0x70
  27966. 800c1be: 429a cmp r2, r3
  27967. 800c1c0: d208 bcs.n 800c1d4 <HAL_RCC_ClockConfig+0x300>
  27968. {
  27969. assert_param(IS_RCC_D3PCLK1(RCC_ClkInitStruct->APB4CLKDivider));
  27970. MODIFY_REG(RCC->D3CFGR, RCC_D3CFGR_D3PPRE, (RCC_ClkInitStruct->APB4CLKDivider));
  27971. 800c1c2: 4b1a ldr r3, [pc, #104] @ (800c22c <HAL_RCC_ClockConfig+0x358>)
  27972. 800c1c4: 6a1b ldr r3, [r3, #32]
  27973. 800c1c6: f023 0270 bic.w r2, r3, #112 @ 0x70
  27974. 800c1ca: 687b ldr r3, [r7, #4]
  27975. 800c1cc: 69db ldr r3, [r3, #28]
  27976. 800c1ce: 4917 ldr r1, [pc, #92] @ (800c22c <HAL_RCC_ClockConfig+0x358>)
  27977. 800c1d0: 4313 orrs r3, r2
  27978. 800c1d2: 620b str r3, [r1, #32]
  27979. #endif
  27980. }
  27981. /* Update the SystemCoreClock global variable */
  27982. #if defined(RCC_D1CFGR_D1CPRE)
  27983. common_system_clock = HAL_RCC_GetSysClockFreq() >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_D1CPRE) >> RCC_D1CFGR_D1CPRE_Pos]) & 0x1FU);
  27984. 800c1d4: f000 f834 bl 800c240 <HAL_RCC_GetSysClockFreq>
  27985. 800c1d8: 4602 mov r2, r0
  27986. 800c1da: 4b14 ldr r3, [pc, #80] @ (800c22c <HAL_RCC_ClockConfig+0x358>)
  27987. 800c1dc: 699b ldr r3, [r3, #24]
  27988. 800c1de: 0a1b lsrs r3, r3, #8
  27989. 800c1e0: f003 030f and.w r3, r3, #15
  27990. 800c1e4: 4912 ldr r1, [pc, #72] @ (800c230 <HAL_RCC_ClockConfig+0x35c>)
  27991. 800c1e6: 5ccb ldrb r3, [r1, r3]
  27992. 800c1e8: f003 031f and.w r3, r3, #31
  27993. 800c1ec: fa22 f303 lsr.w r3, r2, r3
  27994. 800c1f0: 613b str r3, [r7, #16]
  27995. #else
  27996. common_system_clock = HAL_RCC_GetSysClockFreq() >> ((D1CorePrescTable[(RCC->CDCFGR1 & RCC_CDCFGR1_CDCPRE) >> RCC_CDCFGR1_CDCPRE_Pos]) & 0x1FU);
  27997. #endif
  27998. #if defined(RCC_D1CFGR_HPRE)
  27999. SystemD2Clock = (common_system_clock >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_HPRE) >> RCC_D1CFGR_HPRE_Pos]) & 0x1FU));
  28000. 800c1f2: 4b0e ldr r3, [pc, #56] @ (800c22c <HAL_RCC_ClockConfig+0x358>)
  28001. 800c1f4: 699b ldr r3, [r3, #24]
  28002. 800c1f6: f003 030f and.w r3, r3, #15
  28003. 800c1fa: 4a0d ldr r2, [pc, #52] @ (800c230 <HAL_RCC_ClockConfig+0x35c>)
  28004. 800c1fc: 5cd3 ldrb r3, [r2, r3]
  28005. 800c1fe: f003 031f and.w r3, r3, #31
  28006. 800c202: 693a ldr r2, [r7, #16]
  28007. 800c204: fa22 f303 lsr.w r3, r2, r3
  28008. 800c208: 4a0a ldr r2, [pc, #40] @ (800c234 <HAL_RCC_ClockConfig+0x360>)
  28009. 800c20a: 6013 str r3, [r2, #0]
  28010. #endif
  28011. #if defined(DUAL_CORE) && defined(CORE_CM4)
  28012. SystemCoreClock = SystemD2Clock;
  28013. #else
  28014. SystemCoreClock = common_system_clock;
  28015. 800c20c: 4a0a ldr r2, [pc, #40] @ (800c238 <HAL_RCC_ClockConfig+0x364>)
  28016. 800c20e: 693b ldr r3, [r7, #16]
  28017. 800c210: 6013 str r3, [r2, #0]
  28018. #endif /* DUAL_CORE && CORE_CM4 */
  28019. /* Configure the source of time base considering new system clocks settings*/
  28020. halstatus = HAL_InitTick(uwTickPrio);
  28021. 800c212: 4b0a ldr r3, [pc, #40] @ (800c23c <HAL_RCC_ClockConfig+0x368>)
  28022. 800c214: 681b ldr r3, [r3, #0]
  28023. 800c216: 4618 mov r0, r3
  28024. 800c218: f7f8 f914 bl 8004444 <HAL_InitTick>
  28025. 800c21c: 4603 mov r3, r0
  28026. 800c21e: 73fb strb r3, [r7, #15]
  28027. return halstatus;
  28028. 800c220: 7bfb ldrb r3, [r7, #15]
  28029. }
  28030. 800c222: 4618 mov r0, r3
  28031. 800c224: 3718 adds r7, #24
  28032. 800c226: 46bd mov sp, r7
  28033. 800c228: bd80 pop {r7, pc}
  28034. 800c22a: bf00 nop
  28035. 800c22c: 58024400 .word 0x58024400
  28036. 800c230: 08018b5c .word 0x08018b5c
  28037. 800c234: 24000038 .word 0x24000038
  28038. 800c238: 24000034 .word 0x24000034
  28039. 800c23c: 2400003c .word 0x2400003c
  28040. 0800c240 <HAL_RCC_GetSysClockFreq>:
  28041. *
  28042. *
  28043. * @retval SYSCLK frequency
  28044. */
  28045. uint32_t HAL_RCC_GetSysClockFreq(void)
  28046. {
  28047. 800c240: b480 push {r7}
  28048. 800c242: b089 sub sp, #36 @ 0x24
  28049. 800c244: af00 add r7, sp, #0
  28050. float_t fracn1, pllvco;
  28051. uint32_t sysclockfreq;
  28052. /* Get SYSCLK source -------------------------------------------------------*/
  28053. switch (RCC->CFGR & RCC_CFGR_SWS)
  28054. 800c246: 4bb3 ldr r3, [pc, #716] @ (800c514 <HAL_RCC_GetSysClockFreq+0x2d4>)
  28055. 800c248: 691b ldr r3, [r3, #16]
  28056. 800c24a: f003 0338 and.w r3, r3, #56 @ 0x38
  28057. 800c24e: 2b18 cmp r3, #24
  28058. 800c250: f200 8155 bhi.w 800c4fe <HAL_RCC_GetSysClockFreq+0x2be>
  28059. 800c254: a201 add r2, pc, #4 @ (adr r2, 800c25c <HAL_RCC_GetSysClockFreq+0x1c>)
  28060. 800c256: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  28061. 800c25a: bf00 nop
  28062. 800c25c: 0800c2c1 .word 0x0800c2c1
  28063. 800c260: 0800c4ff .word 0x0800c4ff
  28064. 800c264: 0800c4ff .word 0x0800c4ff
  28065. 800c268: 0800c4ff .word 0x0800c4ff
  28066. 800c26c: 0800c4ff .word 0x0800c4ff
  28067. 800c270: 0800c4ff .word 0x0800c4ff
  28068. 800c274: 0800c4ff .word 0x0800c4ff
  28069. 800c278: 0800c4ff .word 0x0800c4ff
  28070. 800c27c: 0800c2e7 .word 0x0800c2e7
  28071. 800c280: 0800c4ff .word 0x0800c4ff
  28072. 800c284: 0800c4ff .word 0x0800c4ff
  28073. 800c288: 0800c4ff .word 0x0800c4ff
  28074. 800c28c: 0800c4ff .word 0x0800c4ff
  28075. 800c290: 0800c4ff .word 0x0800c4ff
  28076. 800c294: 0800c4ff .word 0x0800c4ff
  28077. 800c298: 0800c4ff .word 0x0800c4ff
  28078. 800c29c: 0800c2ed .word 0x0800c2ed
  28079. 800c2a0: 0800c4ff .word 0x0800c4ff
  28080. 800c2a4: 0800c4ff .word 0x0800c4ff
  28081. 800c2a8: 0800c4ff .word 0x0800c4ff
  28082. 800c2ac: 0800c4ff .word 0x0800c4ff
  28083. 800c2b0: 0800c4ff .word 0x0800c4ff
  28084. 800c2b4: 0800c4ff .word 0x0800c4ff
  28085. 800c2b8: 0800c4ff .word 0x0800c4ff
  28086. 800c2bc: 0800c2f3 .word 0x0800c2f3
  28087. {
  28088. case RCC_CFGR_SWS_HSI: /* HSI used as system clock source */
  28089. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  28090. 800c2c0: 4b94 ldr r3, [pc, #592] @ (800c514 <HAL_RCC_GetSysClockFreq+0x2d4>)
  28091. 800c2c2: 681b ldr r3, [r3, #0]
  28092. 800c2c4: f003 0320 and.w r3, r3, #32
  28093. 800c2c8: 2b00 cmp r3, #0
  28094. 800c2ca: d009 beq.n 800c2e0 <HAL_RCC_GetSysClockFreq+0xa0>
  28095. {
  28096. sysclockfreq = (uint32_t)(HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  28097. 800c2cc: 4b91 ldr r3, [pc, #580] @ (800c514 <HAL_RCC_GetSysClockFreq+0x2d4>)
  28098. 800c2ce: 681b ldr r3, [r3, #0]
  28099. 800c2d0: 08db lsrs r3, r3, #3
  28100. 800c2d2: f003 0303 and.w r3, r3, #3
  28101. 800c2d6: 4a90 ldr r2, [pc, #576] @ (800c518 <HAL_RCC_GetSysClockFreq+0x2d8>)
  28102. 800c2d8: fa22 f303 lsr.w r3, r2, r3
  28103. 800c2dc: 61bb str r3, [r7, #24]
  28104. else
  28105. {
  28106. sysclockfreq = (uint32_t) HSI_VALUE;
  28107. }
  28108. break;
  28109. 800c2de: e111 b.n 800c504 <HAL_RCC_GetSysClockFreq+0x2c4>
  28110. sysclockfreq = (uint32_t) HSI_VALUE;
  28111. 800c2e0: 4b8d ldr r3, [pc, #564] @ (800c518 <HAL_RCC_GetSysClockFreq+0x2d8>)
  28112. 800c2e2: 61bb str r3, [r7, #24]
  28113. break;
  28114. 800c2e4: e10e b.n 800c504 <HAL_RCC_GetSysClockFreq+0x2c4>
  28115. case RCC_CFGR_SWS_CSI: /* CSI used as system clock source */
  28116. sysclockfreq = CSI_VALUE;
  28117. 800c2e6: 4b8d ldr r3, [pc, #564] @ (800c51c <HAL_RCC_GetSysClockFreq+0x2dc>)
  28118. 800c2e8: 61bb str r3, [r7, #24]
  28119. break;
  28120. 800c2ea: e10b b.n 800c504 <HAL_RCC_GetSysClockFreq+0x2c4>
  28121. case RCC_CFGR_SWS_HSE: /* HSE used as system clock source */
  28122. sysclockfreq = HSE_VALUE;
  28123. 800c2ec: 4b8c ldr r3, [pc, #560] @ (800c520 <HAL_RCC_GetSysClockFreq+0x2e0>)
  28124. 800c2ee: 61bb str r3, [r7, #24]
  28125. break;
  28126. 800c2f0: e108 b.n 800c504 <HAL_RCC_GetSysClockFreq+0x2c4>
  28127. case RCC_CFGR_SWS_PLL1: /* PLL1 used as system clock source */
  28128. /* PLL_VCO = (HSE_VALUE or HSI_VALUE or CSI_VALUE/ PLLM) * PLLN
  28129. SYSCLK = PLL_VCO / PLLR
  28130. */
  28131. pllsource = (RCC->PLLCKSELR & RCC_PLLCKSELR_PLLSRC);
  28132. 800c2f2: 4b88 ldr r3, [pc, #544] @ (800c514 <HAL_RCC_GetSysClockFreq+0x2d4>)
  28133. 800c2f4: 6a9b ldr r3, [r3, #40] @ 0x28
  28134. 800c2f6: f003 0303 and.w r3, r3, #3
  28135. 800c2fa: 617b str r3, [r7, #20]
  28136. pllm = ((RCC->PLLCKSELR & RCC_PLLCKSELR_DIVM1) >> 4) ;
  28137. 800c2fc: 4b85 ldr r3, [pc, #532] @ (800c514 <HAL_RCC_GetSysClockFreq+0x2d4>)
  28138. 800c2fe: 6a9b ldr r3, [r3, #40] @ 0x28
  28139. 800c300: 091b lsrs r3, r3, #4
  28140. 800c302: f003 033f and.w r3, r3, #63 @ 0x3f
  28141. 800c306: 613b str r3, [r7, #16]
  28142. pllfracen = ((RCC-> PLLCFGR & RCC_PLLCFGR_PLL1FRACEN) >> RCC_PLLCFGR_PLL1FRACEN_Pos);
  28143. 800c308: 4b82 ldr r3, [pc, #520] @ (800c514 <HAL_RCC_GetSysClockFreq+0x2d4>)
  28144. 800c30a: 6adb ldr r3, [r3, #44] @ 0x2c
  28145. 800c30c: f003 0301 and.w r3, r3, #1
  28146. 800c310: 60fb str r3, [r7, #12]
  28147. fracn1 = (float_t)(uint32_t)(pllfracen * ((RCC->PLL1FRACR & RCC_PLL1FRACR_FRACN1) >> 3));
  28148. 800c312: 4b80 ldr r3, [pc, #512] @ (800c514 <HAL_RCC_GetSysClockFreq+0x2d4>)
  28149. 800c314: 6b5b ldr r3, [r3, #52] @ 0x34
  28150. 800c316: 08db lsrs r3, r3, #3
  28151. 800c318: f3c3 030c ubfx r3, r3, #0, #13
  28152. 800c31c: 68fa ldr r2, [r7, #12]
  28153. 800c31e: fb02 f303 mul.w r3, r2, r3
  28154. 800c322: ee07 3a90 vmov s15, r3
  28155. 800c326: eef8 7a67 vcvt.f32.u32 s15, s15
  28156. 800c32a: edc7 7a02 vstr s15, [r7, #8]
  28157. if (pllm != 0U)
  28158. 800c32e: 693b ldr r3, [r7, #16]
  28159. 800c330: 2b00 cmp r3, #0
  28160. 800c332: f000 80e1 beq.w 800c4f8 <HAL_RCC_GetSysClockFreq+0x2b8>
  28161. 800c336: 697b ldr r3, [r7, #20]
  28162. 800c338: 2b02 cmp r3, #2
  28163. 800c33a: f000 8083 beq.w 800c444 <HAL_RCC_GetSysClockFreq+0x204>
  28164. 800c33e: 697b ldr r3, [r7, #20]
  28165. 800c340: 2b02 cmp r3, #2
  28166. 800c342: f200 80a1 bhi.w 800c488 <HAL_RCC_GetSysClockFreq+0x248>
  28167. 800c346: 697b ldr r3, [r7, #20]
  28168. 800c348: 2b00 cmp r3, #0
  28169. 800c34a: d003 beq.n 800c354 <HAL_RCC_GetSysClockFreq+0x114>
  28170. 800c34c: 697b ldr r3, [r7, #20]
  28171. 800c34e: 2b01 cmp r3, #1
  28172. 800c350: d056 beq.n 800c400 <HAL_RCC_GetSysClockFreq+0x1c0>
  28173. 800c352: e099 b.n 800c488 <HAL_RCC_GetSysClockFreq+0x248>
  28174. {
  28175. switch (pllsource)
  28176. {
  28177. case RCC_PLLSOURCE_HSI: /* HSI used as PLL clock source */
  28178. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  28179. 800c354: 4b6f ldr r3, [pc, #444] @ (800c514 <HAL_RCC_GetSysClockFreq+0x2d4>)
  28180. 800c356: 681b ldr r3, [r3, #0]
  28181. 800c358: f003 0320 and.w r3, r3, #32
  28182. 800c35c: 2b00 cmp r3, #0
  28183. 800c35e: d02d beq.n 800c3bc <HAL_RCC_GetSysClockFreq+0x17c>
  28184. {
  28185. hsivalue = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  28186. 800c360: 4b6c ldr r3, [pc, #432] @ (800c514 <HAL_RCC_GetSysClockFreq+0x2d4>)
  28187. 800c362: 681b ldr r3, [r3, #0]
  28188. 800c364: 08db lsrs r3, r3, #3
  28189. 800c366: f003 0303 and.w r3, r3, #3
  28190. 800c36a: 4a6b ldr r2, [pc, #428] @ (800c518 <HAL_RCC_GetSysClockFreq+0x2d8>)
  28191. 800c36c: fa22 f303 lsr.w r3, r2, r3
  28192. 800c370: 607b str r3, [r7, #4]
  28193. pllvco = ((float_t)hsivalue / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  28194. 800c372: 687b ldr r3, [r7, #4]
  28195. 800c374: ee07 3a90 vmov s15, r3
  28196. 800c378: eef8 6a67 vcvt.f32.u32 s13, s15
  28197. 800c37c: 693b ldr r3, [r7, #16]
  28198. 800c37e: ee07 3a90 vmov s15, r3
  28199. 800c382: eef8 7a67 vcvt.f32.u32 s15, s15
  28200. 800c386: ee86 7aa7 vdiv.f32 s14, s13, s15
  28201. 800c38a: 4b62 ldr r3, [pc, #392] @ (800c514 <HAL_RCC_GetSysClockFreq+0x2d4>)
  28202. 800c38c: 6b1b ldr r3, [r3, #48] @ 0x30
  28203. 800c38e: f3c3 0308 ubfx r3, r3, #0, #9
  28204. 800c392: ee07 3a90 vmov s15, r3
  28205. 800c396: eef8 6a67 vcvt.f32.u32 s13, s15
  28206. 800c39a: ed97 6a02 vldr s12, [r7, #8]
  28207. 800c39e: eddf 5a61 vldr s11, [pc, #388] @ 800c524 <HAL_RCC_GetSysClockFreq+0x2e4>
  28208. 800c3a2: eec6 7a25 vdiv.f32 s15, s12, s11
  28209. 800c3a6: ee76 7aa7 vadd.f32 s15, s13, s15
  28210. 800c3aa: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  28211. 800c3ae: ee77 7aa6 vadd.f32 s15, s15, s13
  28212. 800c3b2: ee67 7a27 vmul.f32 s15, s14, s15
  28213. 800c3b6: edc7 7a07 vstr s15, [r7, #28]
  28214. }
  28215. else
  28216. {
  28217. pllvco = ((float_t)HSI_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  28218. }
  28219. break;
  28220. 800c3ba: e087 b.n 800c4cc <HAL_RCC_GetSysClockFreq+0x28c>
  28221. pllvco = ((float_t)HSI_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  28222. 800c3bc: 693b ldr r3, [r7, #16]
  28223. 800c3be: ee07 3a90 vmov s15, r3
  28224. 800c3c2: eef8 7a67 vcvt.f32.u32 s15, s15
  28225. 800c3c6: eddf 6a58 vldr s13, [pc, #352] @ 800c528 <HAL_RCC_GetSysClockFreq+0x2e8>
  28226. 800c3ca: ee86 7aa7 vdiv.f32 s14, s13, s15
  28227. 800c3ce: 4b51 ldr r3, [pc, #324] @ (800c514 <HAL_RCC_GetSysClockFreq+0x2d4>)
  28228. 800c3d0: 6b1b ldr r3, [r3, #48] @ 0x30
  28229. 800c3d2: f3c3 0308 ubfx r3, r3, #0, #9
  28230. 800c3d6: ee07 3a90 vmov s15, r3
  28231. 800c3da: eef8 6a67 vcvt.f32.u32 s13, s15
  28232. 800c3de: ed97 6a02 vldr s12, [r7, #8]
  28233. 800c3e2: eddf 5a50 vldr s11, [pc, #320] @ 800c524 <HAL_RCC_GetSysClockFreq+0x2e4>
  28234. 800c3e6: eec6 7a25 vdiv.f32 s15, s12, s11
  28235. 800c3ea: ee76 7aa7 vadd.f32 s15, s13, s15
  28236. 800c3ee: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  28237. 800c3f2: ee77 7aa6 vadd.f32 s15, s15, s13
  28238. 800c3f6: ee67 7a27 vmul.f32 s15, s14, s15
  28239. 800c3fa: edc7 7a07 vstr s15, [r7, #28]
  28240. break;
  28241. 800c3fe: e065 b.n 800c4cc <HAL_RCC_GetSysClockFreq+0x28c>
  28242. case RCC_PLLSOURCE_CSI: /* CSI used as PLL clock source */
  28243. pllvco = ((float_t)CSI_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  28244. 800c400: 693b ldr r3, [r7, #16]
  28245. 800c402: ee07 3a90 vmov s15, r3
  28246. 800c406: eef8 7a67 vcvt.f32.u32 s15, s15
  28247. 800c40a: eddf 6a48 vldr s13, [pc, #288] @ 800c52c <HAL_RCC_GetSysClockFreq+0x2ec>
  28248. 800c40e: ee86 7aa7 vdiv.f32 s14, s13, s15
  28249. 800c412: 4b40 ldr r3, [pc, #256] @ (800c514 <HAL_RCC_GetSysClockFreq+0x2d4>)
  28250. 800c414: 6b1b ldr r3, [r3, #48] @ 0x30
  28251. 800c416: f3c3 0308 ubfx r3, r3, #0, #9
  28252. 800c41a: ee07 3a90 vmov s15, r3
  28253. 800c41e: eef8 6a67 vcvt.f32.u32 s13, s15
  28254. 800c422: ed97 6a02 vldr s12, [r7, #8]
  28255. 800c426: eddf 5a3f vldr s11, [pc, #252] @ 800c524 <HAL_RCC_GetSysClockFreq+0x2e4>
  28256. 800c42a: eec6 7a25 vdiv.f32 s15, s12, s11
  28257. 800c42e: ee76 7aa7 vadd.f32 s15, s13, s15
  28258. 800c432: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  28259. 800c436: ee77 7aa6 vadd.f32 s15, s15, s13
  28260. 800c43a: ee67 7a27 vmul.f32 s15, s14, s15
  28261. 800c43e: edc7 7a07 vstr s15, [r7, #28]
  28262. break;
  28263. 800c442: e043 b.n 800c4cc <HAL_RCC_GetSysClockFreq+0x28c>
  28264. case RCC_PLLSOURCE_HSE: /* HSE used as PLL clock source */
  28265. pllvco = ((float_t)HSE_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  28266. 800c444: 693b ldr r3, [r7, #16]
  28267. 800c446: ee07 3a90 vmov s15, r3
  28268. 800c44a: eef8 7a67 vcvt.f32.u32 s15, s15
  28269. 800c44e: eddf 6a38 vldr s13, [pc, #224] @ 800c530 <HAL_RCC_GetSysClockFreq+0x2f0>
  28270. 800c452: ee86 7aa7 vdiv.f32 s14, s13, s15
  28271. 800c456: 4b2f ldr r3, [pc, #188] @ (800c514 <HAL_RCC_GetSysClockFreq+0x2d4>)
  28272. 800c458: 6b1b ldr r3, [r3, #48] @ 0x30
  28273. 800c45a: f3c3 0308 ubfx r3, r3, #0, #9
  28274. 800c45e: ee07 3a90 vmov s15, r3
  28275. 800c462: eef8 6a67 vcvt.f32.u32 s13, s15
  28276. 800c466: ed97 6a02 vldr s12, [r7, #8]
  28277. 800c46a: eddf 5a2e vldr s11, [pc, #184] @ 800c524 <HAL_RCC_GetSysClockFreq+0x2e4>
  28278. 800c46e: eec6 7a25 vdiv.f32 s15, s12, s11
  28279. 800c472: ee76 7aa7 vadd.f32 s15, s13, s15
  28280. 800c476: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  28281. 800c47a: ee77 7aa6 vadd.f32 s15, s15, s13
  28282. 800c47e: ee67 7a27 vmul.f32 s15, s14, s15
  28283. 800c482: edc7 7a07 vstr s15, [r7, #28]
  28284. break;
  28285. 800c486: e021 b.n 800c4cc <HAL_RCC_GetSysClockFreq+0x28c>
  28286. default:
  28287. pllvco = ((float_t)CSI_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  28288. 800c488: 693b ldr r3, [r7, #16]
  28289. 800c48a: ee07 3a90 vmov s15, r3
  28290. 800c48e: eef8 7a67 vcvt.f32.u32 s15, s15
  28291. 800c492: eddf 6a26 vldr s13, [pc, #152] @ 800c52c <HAL_RCC_GetSysClockFreq+0x2ec>
  28292. 800c496: ee86 7aa7 vdiv.f32 s14, s13, s15
  28293. 800c49a: 4b1e ldr r3, [pc, #120] @ (800c514 <HAL_RCC_GetSysClockFreq+0x2d4>)
  28294. 800c49c: 6b1b ldr r3, [r3, #48] @ 0x30
  28295. 800c49e: f3c3 0308 ubfx r3, r3, #0, #9
  28296. 800c4a2: ee07 3a90 vmov s15, r3
  28297. 800c4a6: eef8 6a67 vcvt.f32.u32 s13, s15
  28298. 800c4aa: ed97 6a02 vldr s12, [r7, #8]
  28299. 800c4ae: eddf 5a1d vldr s11, [pc, #116] @ 800c524 <HAL_RCC_GetSysClockFreq+0x2e4>
  28300. 800c4b2: eec6 7a25 vdiv.f32 s15, s12, s11
  28301. 800c4b6: ee76 7aa7 vadd.f32 s15, s13, s15
  28302. 800c4ba: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  28303. 800c4be: ee77 7aa6 vadd.f32 s15, s15, s13
  28304. 800c4c2: ee67 7a27 vmul.f32 s15, s14, s15
  28305. 800c4c6: edc7 7a07 vstr s15, [r7, #28]
  28306. break;
  28307. 800c4ca: bf00 nop
  28308. }
  28309. pllp = (((RCC->PLL1DIVR & RCC_PLL1DIVR_P1) >> 9) + 1U) ;
  28310. 800c4cc: 4b11 ldr r3, [pc, #68] @ (800c514 <HAL_RCC_GetSysClockFreq+0x2d4>)
  28311. 800c4ce: 6b1b ldr r3, [r3, #48] @ 0x30
  28312. 800c4d0: 0a5b lsrs r3, r3, #9
  28313. 800c4d2: f003 037f and.w r3, r3, #127 @ 0x7f
  28314. 800c4d6: 3301 adds r3, #1
  28315. 800c4d8: 603b str r3, [r7, #0]
  28316. sysclockfreq = (uint32_t)(float_t)(pllvco / (float_t)pllp);
  28317. 800c4da: 683b ldr r3, [r7, #0]
  28318. 800c4dc: ee07 3a90 vmov s15, r3
  28319. 800c4e0: eeb8 7a67 vcvt.f32.u32 s14, s15
  28320. 800c4e4: edd7 6a07 vldr s13, [r7, #28]
  28321. 800c4e8: eec6 7a87 vdiv.f32 s15, s13, s14
  28322. 800c4ec: eefc 7ae7 vcvt.u32.f32 s15, s15
  28323. 800c4f0: ee17 3a90 vmov r3, s15
  28324. 800c4f4: 61bb str r3, [r7, #24]
  28325. }
  28326. else
  28327. {
  28328. sysclockfreq = 0U;
  28329. }
  28330. break;
  28331. 800c4f6: e005 b.n 800c504 <HAL_RCC_GetSysClockFreq+0x2c4>
  28332. sysclockfreq = 0U;
  28333. 800c4f8: 2300 movs r3, #0
  28334. 800c4fa: 61bb str r3, [r7, #24]
  28335. break;
  28336. 800c4fc: e002 b.n 800c504 <HAL_RCC_GetSysClockFreq+0x2c4>
  28337. default:
  28338. sysclockfreq = CSI_VALUE;
  28339. 800c4fe: 4b07 ldr r3, [pc, #28] @ (800c51c <HAL_RCC_GetSysClockFreq+0x2dc>)
  28340. 800c500: 61bb str r3, [r7, #24]
  28341. break;
  28342. 800c502: bf00 nop
  28343. }
  28344. return sysclockfreq;
  28345. 800c504: 69bb ldr r3, [r7, #24]
  28346. }
  28347. 800c506: 4618 mov r0, r3
  28348. 800c508: 3724 adds r7, #36 @ 0x24
  28349. 800c50a: 46bd mov sp, r7
  28350. 800c50c: f85d 7b04 ldr.w r7, [sp], #4
  28351. 800c510: 4770 bx lr
  28352. 800c512: bf00 nop
  28353. 800c514: 58024400 .word 0x58024400
  28354. 800c518: 03d09000 .word 0x03d09000
  28355. 800c51c: 003d0900 .word 0x003d0900
  28356. 800c520: 017d7840 .word 0x017d7840
  28357. 800c524: 46000000 .word 0x46000000
  28358. 800c528: 4c742400 .word 0x4c742400
  28359. 800c52c: 4a742400 .word 0x4a742400
  28360. 800c530: 4bbebc20 .word 0x4bbebc20
  28361. 0800c534 <HAL_RCC_GetHCLKFreq>:
  28362. * @note The SystemD2Clock CMSIS variable is used to store System domain2 Clock Frequency
  28363. * and updated within this function
  28364. * @retval HCLK frequency
  28365. */
  28366. uint32_t HAL_RCC_GetHCLKFreq(void)
  28367. {
  28368. 800c534: b580 push {r7, lr}
  28369. 800c536: b082 sub sp, #8
  28370. 800c538: af00 add r7, sp, #0
  28371. uint32_t common_system_clock;
  28372. #if defined(RCC_D1CFGR_D1CPRE)
  28373. common_system_clock = HAL_RCC_GetSysClockFreq() >> (D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_D1CPRE) >> RCC_D1CFGR_D1CPRE_Pos] & 0x1FU);
  28374. 800c53a: f7ff fe81 bl 800c240 <HAL_RCC_GetSysClockFreq>
  28375. 800c53e: 4602 mov r2, r0
  28376. 800c540: 4b10 ldr r3, [pc, #64] @ (800c584 <HAL_RCC_GetHCLKFreq+0x50>)
  28377. 800c542: 699b ldr r3, [r3, #24]
  28378. 800c544: 0a1b lsrs r3, r3, #8
  28379. 800c546: f003 030f and.w r3, r3, #15
  28380. 800c54a: 490f ldr r1, [pc, #60] @ (800c588 <HAL_RCC_GetHCLKFreq+0x54>)
  28381. 800c54c: 5ccb ldrb r3, [r1, r3]
  28382. 800c54e: f003 031f and.w r3, r3, #31
  28383. 800c552: fa22 f303 lsr.w r3, r2, r3
  28384. 800c556: 607b str r3, [r7, #4]
  28385. #else
  28386. common_system_clock = HAL_RCC_GetSysClockFreq() >> (D1CorePrescTable[(RCC->CDCFGR1 & RCC_CDCFGR1_CDCPRE) >> RCC_CDCFGR1_CDCPRE_Pos] & 0x1FU);
  28387. #endif
  28388. #if defined(RCC_D1CFGR_HPRE)
  28389. SystemD2Clock = (common_system_clock >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_HPRE) >> RCC_D1CFGR_HPRE_Pos]) & 0x1FU));
  28390. 800c558: 4b0a ldr r3, [pc, #40] @ (800c584 <HAL_RCC_GetHCLKFreq+0x50>)
  28391. 800c55a: 699b ldr r3, [r3, #24]
  28392. 800c55c: f003 030f and.w r3, r3, #15
  28393. 800c560: 4a09 ldr r2, [pc, #36] @ (800c588 <HAL_RCC_GetHCLKFreq+0x54>)
  28394. 800c562: 5cd3 ldrb r3, [r2, r3]
  28395. 800c564: f003 031f and.w r3, r3, #31
  28396. 800c568: 687a ldr r2, [r7, #4]
  28397. 800c56a: fa22 f303 lsr.w r3, r2, r3
  28398. 800c56e: 4a07 ldr r2, [pc, #28] @ (800c58c <HAL_RCC_GetHCLKFreq+0x58>)
  28399. 800c570: 6013 str r3, [r2, #0]
  28400. #endif
  28401. #if defined(DUAL_CORE) && defined(CORE_CM4)
  28402. SystemCoreClock = SystemD2Clock;
  28403. #else
  28404. SystemCoreClock = common_system_clock;
  28405. 800c572: 4a07 ldr r2, [pc, #28] @ (800c590 <HAL_RCC_GetHCLKFreq+0x5c>)
  28406. 800c574: 687b ldr r3, [r7, #4]
  28407. 800c576: 6013 str r3, [r2, #0]
  28408. #endif /* DUAL_CORE && CORE_CM4 */
  28409. return SystemD2Clock;
  28410. 800c578: 4b04 ldr r3, [pc, #16] @ (800c58c <HAL_RCC_GetHCLKFreq+0x58>)
  28411. 800c57a: 681b ldr r3, [r3, #0]
  28412. }
  28413. 800c57c: 4618 mov r0, r3
  28414. 800c57e: 3708 adds r7, #8
  28415. 800c580: 46bd mov sp, r7
  28416. 800c582: bd80 pop {r7, pc}
  28417. 800c584: 58024400 .word 0x58024400
  28418. 800c588: 08018b5c .word 0x08018b5c
  28419. 800c58c: 24000038 .word 0x24000038
  28420. 800c590: 24000034 .word 0x24000034
  28421. 0800c594 <HAL_RCC_GetPCLK1Freq>:
  28422. * @note Each time PCLK1 changes, this function must be called to update the
  28423. * right PCLK1 value. Otherwise, any configuration based on this function will be incorrect.
  28424. * @retval PCLK1 frequency
  28425. */
  28426. uint32_t HAL_RCC_GetPCLK1Freq(void)
  28427. {
  28428. 800c594: b580 push {r7, lr}
  28429. 800c596: af00 add r7, sp, #0
  28430. #if defined (RCC_D2CFGR_D2PPRE1)
  28431. /* Get HCLK source and Compute PCLK1 frequency ---------------------------*/
  28432. return (HAL_RCC_GetHCLKFreq() >> ((D1CorePrescTable[(RCC->D2CFGR & RCC_D2CFGR_D2PPRE1) >> RCC_D2CFGR_D2PPRE1_Pos]) & 0x1FU));
  28433. 800c598: f7ff ffcc bl 800c534 <HAL_RCC_GetHCLKFreq>
  28434. 800c59c: 4602 mov r2, r0
  28435. 800c59e: 4b06 ldr r3, [pc, #24] @ (800c5b8 <HAL_RCC_GetPCLK1Freq+0x24>)
  28436. 800c5a0: 69db ldr r3, [r3, #28]
  28437. 800c5a2: 091b lsrs r3, r3, #4
  28438. 800c5a4: f003 0307 and.w r3, r3, #7
  28439. 800c5a8: 4904 ldr r1, [pc, #16] @ (800c5bc <HAL_RCC_GetPCLK1Freq+0x28>)
  28440. 800c5aa: 5ccb ldrb r3, [r1, r3]
  28441. 800c5ac: f003 031f and.w r3, r3, #31
  28442. 800c5b0: fa22 f303 lsr.w r3, r2, r3
  28443. #else
  28444. /* Get HCLK source and Compute PCLK1 frequency ---------------------------*/
  28445. return (HAL_RCC_GetHCLKFreq() >> ((D1CorePrescTable[(RCC->CDCFGR2 & RCC_CDCFGR2_CDPPRE1) >> RCC_CDCFGR2_CDPPRE1_Pos]) & 0x1FU));
  28446. #endif
  28447. }
  28448. 800c5b4: 4618 mov r0, r3
  28449. 800c5b6: bd80 pop {r7, pc}
  28450. 800c5b8: 58024400 .word 0x58024400
  28451. 800c5bc: 08018b5c .word 0x08018b5c
  28452. 0800c5c0 <HAL_RCC_GetPCLK2Freq>:
  28453. * @note Each time PCLK2 changes, this function must be called to update the
  28454. * right PCLK2 value. Otherwise, any configuration based on this function will be incorrect.
  28455. * @retval PCLK1 frequency
  28456. */
  28457. uint32_t HAL_RCC_GetPCLK2Freq(void)
  28458. {
  28459. 800c5c0: b580 push {r7, lr}
  28460. 800c5c2: af00 add r7, sp, #0
  28461. /* Get HCLK source and Compute PCLK1 frequency ---------------------------*/
  28462. #if defined(RCC_D2CFGR_D2PPRE2)
  28463. return (HAL_RCC_GetHCLKFreq() >> ((D1CorePrescTable[(RCC->D2CFGR & RCC_D2CFGR_D2PPRE2) >> RCC_D2CFGR_D2PPRE2_Pos]) & 0x1FU));
  28464. 800c5c4: f7ff ffb6 bl 800c534 <HAL_RCC_GetHCLKFreq>
  28465. 800c5c8: 4602 mov r2, r0
  28466. 800c5ca: 4b06 ldr r3, [pc, #24] @ (800c5e4 <HAL_RCC_GetPCLK2Freq+0x24>)
  28467. 800c5cc: 69db ldr r3, [r3, #28]
  28468. 800c5ce: 0a1b lsrs r3, r3, #8
  28469. 800c5d0: f003 0307 and.w r3, r3, #7
  28470. 800c5d4: 4904 ldr r1, [pc, #16] @ (800c5e8 <HAL_RCC_GetPCLK2Freq+0x28>)
  28471. 800c5d6: 5ccb ldrb r3, [r1, r3]
  28472. 800c5d8: f003 031f and.w r3, r3, #31
  28473. 800c5dc: fa22 f303 lsr.w r3, r2, r3
  28474. #else
  28475. return (HAL_RCC_GetHCLKFreq() >> ((D1CorePrescTable[(RCC->CDCFGR2 & RCC_CDCFGR2_CDPPRE2) >> RCC_CDCFGR2_CDPPRE2_Pos]) & 0x1FU));
  28476. #endif
  28477. }
  28478. 800c5e0: 4618 mov r0, r3
  28479. 800c5e2: bd80 pop {r7, pc}
  28480. 800c5e4: 58024400 .word 0x58024400
  28481. 800c5e8: 08018b5c .word 0x08018b5c
  28482. 0800c5ec <HAL_RCC_GetClockConfig>:
  28483. * will be configured.
  28484. * @param pFLatency: Pointer on the Flash Latency.
  28485. * @retval None
  28486. */
  28487. void HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t *pFLatency)
  28488. {
  28489. 800c5ec: b480 push {r7}
  28490. 800c5ee: b083 sub sp, #12
  28491. 800c5f0: af00 add r7, sp, #0
  28492. 800c5f2: 6078 str r0, [r7, #4]
  28493. 800c5f4: 6039 str r1, [r7, #0]
  28494. /* Set all possible values for the Clock type parameter --------------------*/
  28495. RCC_ClkInitStruct->ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_D1PCLK1 | RCC_CLOCKTYPE_PCLK1 |
  28496. 800c5f6: 687b ldr r3, [r7, #4]
  28497. 800c5f8: 223f movs r2, #63 @ 0x3f
  28498. 800c5fa: 601a str r2, [r3, #0]
  28499. RCC_CLOCKTYPE_PCLK2 | RCC_CLOCKTYPE_D3PCLK1 ;
  28500. /* Get the SYSCLK configuration --------------------------------------------*/
  28501. RCC_ClkInitStruct->SYSCLKSource = (uint32_t)(RCC->CFGR & RCC_CFGR_SW);
  28502. 800c5fc: 4b1a ldr r3, [pc, #104] @ (800c668 <HAL_RCC_GetClockConfig+0x7c>)
  28503. 800c5fe: 691b ldr r3, [r3, #16]
  28504. 800c600: f003 0207 and.w r2, r3, #7
  28505. 800c604: 687b ldr r3, [r7, #4]
  28506. 800c606: 605a str r2, [r3, #4]
  28507. #if defined(RCC_D1CFGR_D1CPRE)
  28508. /* Get the SYSCLK configuration ----------------------------------------------*/
  28509. RCC_ClkInitStruct->SYSCLKDivider = (uint32_t)(RCC->D1CFGR & RCC_D1CFGR_D1CPRE);
  28510. 800c608: 4b17 ldr r3, [pc, #92] @ (800c668 <HAL_RCC_GetClockConfig+0x7c>)
  28511. 800c60a: 699b ldr r3, [r3, #24]
  28512. 800c60c: f403 6270 and.w r2, r3, #3840 @ 0xf00
  28513. 800c610: 687b ldr r3, [r7, #4]
  28514. 800c612: 609a str r2, [r3, #8]
  28515. /* Get the D1HCLK configuration ----------------------------------------------*/
  28516. RCC_ClkInitStruct->AHBCLKDivider = (uint32_t)(RCC->D1CFGR & RCC_D1CFGR_HPRE);
  28517. 800c614: 4b14 ldr r3, [pc, #80] @ (800c668 <HAL_RCC_GetClockConfig+0x7c>)
  28518. 800c616: 699b ldr r3, [r3, #24]
  28519. 800c618: f003 020f and.w r2, r3, #15
  28520. 800c61c: 687b ldr r3, [r7, #4]
  28521. 800c61e: 60da str r2, [r3, #12]
  28522. /* Get the APB3 configuration ----------------------------------------------*/
  28523. RCC_ClkInitStruct->APB3CLKDivider = (uint32_t)(RCC->D1CFGR & RCC_D1CFGR_D1PPRE);
  28524. 800c620: 4b11 ldr r3, [pc, #68] @ (800c668 <HAL_RCC_GetClockConfig+0x7c>)
  28525. 800c622: 699b ldr r3, [r3, #24]
  28526. 800c624: f003 0270 and.w r2, r3, #112 @ 0x70
  28527. 800c628: 687b ldr r3, [r7, #4]
  28528. 800c62a: 611a str r2, [r3, #16]
  28529. /* Get the APB1 configuration ----------------------------------------------*/
  28530. RCC_ClkInitStruct->APB1CLKDivider = (uint32_t)(RCC->D2CFGR & RCC_D2CFGR_D2PPRE1);
  28531. 800c62c: 4b0e ldr r3, [pc, #56] @ (800c668 <HAL_RCC_GetClockConfig+0x7c>)
  28532. 800c62e: 69db ldr r3, [r3, #28]
  28533. 800c630: f003 0270 and.w r2, r3, #112 @ 0x70
  28534. 800c634: 687b ldr r3, [r7, #4]
  28535. 800c636: 615a str r2, [r3, #20]
  28536. /* Get the APB2 configuration ----------------------------------------------*/
  28537. RCC_ClkInitStruct->APB2CLKDivider = (uint32_t)(RCC->D2CFGR & RCC_D2CFGR_D2PPRE2);
  28538. 800c638: 4b0b ldr r3, [pc, #44] @ (800c668 <HAL_RCC_GetClockConfig+0x7c>)
  28539. 800c63a: 69db ldr r3, [r3, #28]
  28540. 800c63c: f403 62e0 and.w r2, r3, #1792 @ 0x700
  28541. 800c640: 687b ldr r3, [r7, #4]
  28542. 800c642: 619a str r2, [r3, #24]
  28543. /* Get the APB4 configuration ----------------------------------------------*/
  28544. RCC_ClkInitStruct->APB4CLKDivider = (uint32_t)(RCC->D3CFGR & RCC_D3CFGR_D3PPRE);
  28545. 800c644: 4b08 ldr r3, [pc, #32] @ (800c668 <HAL_RCC_GetClockConfig+0x7c>)
  28546. 800c646: 6a1b ldr r3, [r3, #32]
  28547. 800c648: f003 0270 and.w r2, r3, #112 @ 0x70
  28548. 800c64c: 687b ldr r3, [r7, #4]
  28549. 800c64e: 61da str r2, [r3, #28]
  28550. /* Get the APB4 configuration ----------------------------------------------*/
  28551. RCC_ClkInitStruct->APB4CLKDivider = (uint32_t)(RCC->SRDCFGR & RCC_SRDCFGR_SRDPPRE);
  28552. #endif
  28553. /* Get the Flash Wait State (Latency) configuration ------------------------*/
  28554. *pFLatency = (uint32_t)(FLASH->ACR & FLASH_ACR_LATENCY);
  28555. 800c650: 4b06 ldr r3, [pc, #24] @ (800c66c <HAL_RCC_GetClockConfig+0x80>)
  28556. 800c652: 681b ldr r3, [r3, #0]
  28557. 800c654: f003 020f and.w r2, r3, #15
  28558. 800c658: 683b ldr r3, [r7, #0]
  28559. 800c65a: 601a str r2, [r3, #0]
  28560. }
  28561. 800c65c: bf00 nop
  28562. 800c65e: 370c adds r7, #12
  28563. 800c660: 46bd mov sp, r7
  28564. 800c662: f85d 7b04 ldr.w r7, [sp], #4
  28565. 800c666: 4770 bx lr
  28566. 800c668: 58024400 .word 0x58024400
  28567. 800c66c: 52002000 .word 0x52002000
  28568. 0800c670 <HAL_RCCEx_PeriphCLKConfig>:
  28569. * (*) : Available on some STM32H7 lines only.
  28570. *
  28571. * @retval HAL status
  28572. */
  28573. HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit)
  28574. {
  28575. 800c670: e92d 4fb0 stmdb sp!, {r4, r5, r7, r8, r9, sl, fp, lr}
  28576. 800c674: b0c8 sub sp, #288 @ 0x120
  28577. 800c676: af00 add r7, sp, #0
  28578. 800c678: f8c7 010c str.w r0, [r7, #268] @ 0x10c
  28579. uint32_t tmpreg;
  28580. uint32_t tickstart;
  28581. HAL_StatusTypeDef ret = HAL_OK; /* Intermediate status */
  28582. 800c67c: 2300 movs r3, #0
  28583. 800c67e: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28584. HAL_StatusTypeDef status = HAL_OK; /* Final status */
  28585. 800c682: 2300 movs r3, #0
  28586. 800c684: f887 311e strb.w r3, [r7, #286] @ 0x11e
  28587. /*---------------------------- SPDIFRX configuration -------------------------------*/
  28588. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SPDIFRX) == RCC_PERIPHCLK_SPDIFRX)
  28589. 800c688: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28590. 800c68c: e9d3 2300 ldrd r2, r3, [r3]
  28591. 800c690: f002 6400 and.w r4, r2, #134217728 @ 0x8000000
  28592. 800c694: 2500 movs r5, #0
  28593. 800c696: ea54 0305 orrs.w r3, r4, r5
  28594. 800c69a: d049 beq.n 800c730 <HAL_RCCEx_PeriphCLKConfig+0xc0>
  28595. {
  28596. switch (PeriphClkInit->SpdifrxClockSelection)
  28597. 800c69c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28598. 800c6a0: 6e9b ldr r3, [r3, #104] @ 0x68
  28599. 800c6a2: f5b3 1f40 cmp.w r3, #3145728 @ 0x300000
  28600. 800c6a6: d02f beq.n 800c708 <HAL_RCCEx_PeriphCLKConfig+0x98>
  28601. 800c6a8: f5b3 1f40 cmp.w r3, #3145728 @ 0x300000
  28602. 800c6ac: d828 bhi.n 800c700 <HAL_RCCEx_PeriphCLKConfig+0x90>
  28603. 800c6ae: f5b3 1f00 cmp.w r3, #2097152 @ 0x200000
  28604. 800c6b2: d01a beq.n 800c6ea <HAL_RCCEx_PeriphCLKConfig+0x7a>
  28605. 800c6b4: f5b3 1f00 cmp.w r3, #2097152 @ 0x200000
  28606. 800c6b8: d822 bhi.n 800c700 <HAL_RCCEx_PeriphCLKConfig+0x90>
  28607. 800c6ba: 2b00 cmp r3, #0
  28608. 800c6bc: d003 beq.n 800c6c6 <HAL_RCCEx_PeriphCLKConfig+0x56>
  28609. 800c6be: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
  28610. 800c6c2: d007 beq.n 800c6d4 <HAL_RCCEx_PeriphCLKConfig+0x64>
  28611. 800c6c4: e01c b.n 800c700 <HAL_RCCEx_PeriphCLKConfig+0x90>
  28612. {
  28613. case RCC_SPDIFRXCLKSOURCE_PLL: /* PLL is used as clock source for SPDIFRX*/
  28614. /* Enable PLL1Q Clock output generated form System PLL . */
  28615. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  28616. 800c6c6: 4bb8 ldr r3, [pc, #736] @ (800c9a8 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  28617. 800c6c8: 6adb ldr r3, [r3, #44] @ 0x2c
  28618. 800c6ca: 4ab7 ldr r2, [pc, #732] @ (800c9a8 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  28619. 800c6cc: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  28620. 800c6d0: 62d3 str r3, [r2, #44] @ 0x2c
  28621. /* SPDIFRX clock source configuration done later after clock selection check */
  28622. break;
  28623. 800c6d2: e01a b.n 800c70a <HAL_RCCEx_PeriphCLKConfig+0x9a>
  28624. case RCC_SPDIFRXCLKSOURCE_PLL2: /* PLL2 is used as clock source for SPDIFRX*/
  28625. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_R_UPDATE);
  28626. 800c6d4: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28627. 800c6d8: 3308 adds r3, #8
  28628. 800c6da: 2102 movs r1, #2
  28629. 800c6dc: 4618 mov r0, r3
  28630. 800c6de: f002 fb45 bl 800ed6c <RCCEx_PLL2_Config>
  28631. 800c6e2: 4603 mov r3, r0
  28632. 800c6e4: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28633. /* SPDIFRX clock source configuration done later after clock selection check */
  28634. break;
  28635. 800c6e8: e00f b.n 800c70a <HAL_RCCEx_PeriphCLKConfig+0x9a>
  28636. case RCC_SPDIFRXCLKSOURCE_PLL3: /* PLL3 is used as clock source for SPDIFRX*/
  28637. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE);
  28638. 800c6ea: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28639. 800c6ee: 3328 adds r3, #40 @ 0x28
  28640. 800c6f0: 2102 movs r1, #2
  28641. 800c6f2: 4618 mov r0, r3
  28642. 800c6f4: f002 fbec bl 800eed0 <RCCEx_PLL3_Config>
  28643. 800c6f8: 4603 mov r3, r0
  28644. 800c6fa: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28645. /* SPDIFRX clock source configuration done later after clock selection check */
  28646. break;
  28647. 800c6fe: e004 b.n 800c70a <HAL_RCCEx_PeriphCLKConfig+0x9a>
  28648. /* Internal OSC clock is used as source of SPDIFRX clock*/
  28649. /* SPDIFRX clock source configuration done later after clock selection check */
  28650. break;
  28651. default:
  28652. ret = HAL_ERROR;
  28653. 800c700: 2301 movs r3, #1
  28654. 800c702: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28655. break;
  28656. 800c706: e000 b.n 800c70a <HAL_RCCEx_PeriphCLKConfig+0x9a>
  28657. break;
  28658. 800c708: bf00 nop
  28659. }
  28660. if (ret == HAL_OK)
  28661. 800c70a: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28662. 800c70e: 2b00 cmp r3, #0
  28663. 800c710: d10a bne.n 800c728 <HAL_RCCEx_PeriphCLKConfig+0xb8>
  28664. {
  28665. /* Set the source of SPDIFRX clock*/
  28666. __HAL_RCC_SPDIFRX_CONFIG(PeriphClkInit->SpdifrxClockSelection);
  28667. 800c712: 4ba5 ldr r3, [pc, #660] @ (800c9a8 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  28668. 800c714: 6d1b ldr r3, [r3, #80] @ 0x50
  28669. 800c716: f423 1140 bic.w r1, r3, #3145728 @ 0x300000
  28670. 800c71a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28671. 800c71e: 6e9b ldr r3, [r3, #104] @ 0x68
  28672. 800c720: 4aa1 ldr r2, [pc, #644] @ (800c9a8 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  28673. 800c722: 430b orrs r3, r1
  28674. 800c724: 6513 str r3, [r2, #80] @ 0x50
  28675. 800c726: e003 b.n 800c730 <HAL_RCCEx_PeriphCLKConfig+0xc0>
  28676. }
  28677. else
  28678. {
  28679. /* set overall return value */
  28680. status = ret;
  28681. 800c728: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28682. 800c72c: f887 311e strb.w r3, [r7, #286] @ 0x11e
  28683. }
  28684. }
  28685. /*---------------------------- SAI1 configuration -------------------------------*/
  28686. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI1) == RCC_PERIPHCLK_SAI1)
  28687. 800c730: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28688. 800c734: e9d3 2300 ldrd r2, r3, [r3]
  28689. 800c738: f402 7880 and.w r8, r2, #256 @ 0x100
  28690. 800c73c: f04f 0900 mov.w r9, #0
  28691. 800c740: ea58 0309 orrs.w r3, r8, r9
  28692. 800c744: d047 beq.n 800c7d6 <HAL_RCCEx_PeriphCLKConfig+0x166>
  28693. {
  28694. switch (PeriphClkInit->Sai1ClockSelection)
  28695. 800c746: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28696. 800c74a: 6d9b ldr r3, [r3, #88] @ 0x58
  28697. 800c74c: 2b04 cmp r3, #4
  28698. 800c74e: d82a bhi.n 800c7a6 <HAL_RCCEx_PeriphCLKConfig+0x136>
  28699. 800c750: a201 add r2, pc, #4 @ (adr r2, 800c758 <HAL_RCCEx_PeriphCLKConfig+0xe8>)
  28700. 800c752: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  28701. 800c756: bf00 nop
  28702. 800c758: 0800c76d .word 0x0800c76d
  28703. 800c75c: 0800c77b .word 0x0800c77b
  28704. 800c760: 0800c791 .word 0x0800c791
  28705. 800c764: 0800c7af .word 0x0800c7af
  28706. 800c768: 0800c7af .word 0x0800c7af
  28707. {
  28708. case RCC_SAI1CLKSOURCE_PLL: /* PLL is used as clock source for SAI1*/
  28709. /* Enable SAI Clock output generated form System PLL . */
  28710. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  28711. 800c76c: 4b8e ldr r3, [pc, #568] @ (800c9a8 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  28712. 800c76e: 6adb ldr r3, [r3, #44] @ 0x2c
  28713. 800c770: 4a8d ldr r2, [pc, #564] @ (800c9a8 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  28714. 800c772: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  28715. 800c776: 62d3 str r3, [r2, #44] @ 0x2c
  28716. /* SAI1 clock source configuration done later after clock selection check */
  28717. break;
  28718. 800c778: e01a b.n 800c7b0 <HAL_RCCEx_PeriphCLKConfig+0x140>
  28719. case RCC_SAI1CLKSOURCE_PLL2: /* PLL2 is used as clock source for SAI1*/
  28720. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  28721. 800c77a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28722. 800c77e: 3308 adds r3, #8
  28723. 800c780: 2100 movs r1, #0
  28724. 800c782: 4618 mov r0, r3
  28725. 800c784: f002 faf2 bl 800ed6c <RCCEx_PLL2_Config>
  28726. 800c788: 4603 mov r3, r0
  28727. 800c78a: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28728. /* SAI1 clock source configuration done later after clock selection check */
  28729. break;
  28730. 800c78e: e00f b.n 800c7b0 <HAL_RCCEx_PeriphCLKConfig+0x140>
  28731. case RCC_SAI1CLKSOURCE_PLL3: /* PLL3 is used as clock source for SAI1*/
  28732. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
  28733. 800c790: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28734. 800c794: 3328 adds r3, #40 @ 0x28
  28735. 800c796: 2100 movs r1, #0
  28736. 800c798: 4618 mov r0, r3
  28737. 800c79a: f002 fb99 bl 800eed0 <RCCEx_PLL3_Config>
  28738. 800c79e: 4603 mov r3, r0
  28739. 800c7a0: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28740. /* SAI1 clock source configuration done later after clock selection check */
  28741. break;
  28742. 800c7a4: e004 b.n 800c7b0 <HAL_RCCEx_PeriphCLKConfig+0x140>
  28743. /* HSI, HSE, or CSI oscillator is used as source of SAI1 clock */
  28744. /* SAI1 clock source configuration done later after clock selection check */
  28745. break;
  28746. default:
  28747. ret = HAL_ERROR;
  28748. 800c7a6: 2301 movs r3, #1
  28749. 800c7a8: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28750. break;
  28751. 800c7ac: e000 b.n 800c7b0 <HAL_RCCEx_PeriphCLKConfig+0x140>
  28752. break;
  28753. 800c7ae: bf00 nop
  28754. }
  28755. if (ret == HAL_OK)
  28756. 800c7b0: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28757. 800c7b4: 2b00 cmp r3, #0
  28758. 800c7b6: d10a bne.n 800c7ce <HAL_RCCEx_PeriphCLKConfig+0x15e>
  28759. {
  28760. /* Set the source of SAI1 clock*/
  28761. __HAL_RCC_SAI1_CONFIG(PeriphClkInit->Sai1ClockSelection);
  28762. 800c7b8: 4b7b ldr r3, [pc, #492] @ (800c9a8 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  28763. 800c7ba: 6d1b ldr r3, [r3, #80] @ 0x50
  28764. 800c7bc: f023 0107 bic.w r1, r3, #7
  28765. 800c7c0: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28766. 800c7c4: 6d9b ldr r3, [r3, #88] @ 0x58
  28767. 800c7c6: 4a78 ldr r2, [pc, #480] @ (800c9a8 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  28768. 800c7c8: 430b orrs r3, r1
  28769. 800c7ca: 6513 str r3, [r2, #80] @ 0x50
  28770. 800c7cc: e003 b.n 800c7d6 <HAL_RCCEx_PeriphCLKConfig+0x166>
  28771. }
  28772. else
  28773. {
  28774. /* set overall return value */
  28775. status = ret;
  28776. 800c7ce: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28777. 800c7d2: f887 311e strb.w r3, [r7, #286] @ 0x11e
  28778. }
  28779. }
  28780. #if defined(SAI3)
  28781. /*---------------------------- SAI2/3 configuration -------------------------------*/
  28782. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI23) == RCC_PERIPHCLK_SAI23)
  28783. 800c7d6: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28784. 800c7da: e9d3 2300 ldrd r2, r3, [r3]
  28785. 800c7de: f402 7a00 and.w sl, r2, #512 @ 0x200
  28786. 800c7e2: f04f 0b00 mov.w fp, #0
  28787. 800c7e6: ea5a 030b orrs.w r3, sl, fp
  28788. 800c7ea: d04c beq.n 800c886 <HAL_RCCEx_PeriphCLKConfig+0x216>
  28789. {
  28790. switch (PeriphClkInit->Sai23ClockSelection)
  28791. 800c7ec: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28792. 800c7f0: 6ddb ldr r3, [r3, #92] @ 0x5c
  28793. 800c7f2: f5b3 7f80 cmp.w r3, #256 @ 0x100
  28794. 800c7f6: d030 beq.n 800c85a <HAL_RCCEx_PeriphCLKConfig+0x1ea>
  28795. 800c7f8: f5b3 7f80 cmp.w r3, #256 @ 0x100
  28796. 800c7fc: d829 bhi.n 800c852 <HAL_RCCEx_PeriphCLKConfig+0x1e2>
  28797. 800c7fe: 2bc0 cmp r3, #192 @ 0xc0
  28798. 800c800: d02d beq.n 800c85e <HAL_RCCEx_PeriphCLKConfig+0x1ee>
  28799. 800c802: 2bc0 cmp r3, #192 @ 0xc0
  28800. 800c804: d825 bhi.n 800c852 <HAL_RCCEx_PeriphCLKConfig+0x1e2>
  28801. 800c806: 2b80 cmp r3, #128 @ 0x80
  28802. 800c808: d018 beq.n 800c83c <HAL_RCCEx_PeriphCLKConfig+0x1cc>
  28803. 800c80a: 2b80 cmp r3, #128 @ 0x80
  28804. 800c80c: d821 bhi.n 800c852 <HAL_RCCEx_PeriphCLKConfig+0x1e2>
  28805. 800c80e: 2b00 cmp r3, #0
  28806. 800c810: d002 beq.n 800c818 <HAL_RCCEx_PeriphCLKConfig+0x1a8>
  28807. 800c812: 2b40 cmp r3, #64 @ 0x40
  28808. 800c814: d007 beq.n 800c826 <HAL_RCCEx_PeriphCLKConfig+0x1b6>
  28809. 800c816: e01c b.n 800c852 <HAL_RCCEx_PeriphCLKConfig+0x1e2>
  28810. {
  28811. case RCC_SAI23CLKSOURCE_PLL: /* PLL is used as clock source for SAI2/3 */
  28812. /* Enable SAI Clock output generated form System PLL . */
  28813. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  28814. 800c818: 4b63 ldr r3, [pc, #396] @ (800c9a8 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  28815. 800c81a: 6adb ldr r3, [r3, #44] @ 0x2c
  28816. 800c81c: 4a62 ldr r2, [pc, #392] @ (800c9a8 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  28817. 800c81e: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  28818. 800c822: 62d3 str r3, [r2, #44] @ 0x2c
  28819. /* SAI2/3 clock source configuration done later after clock selection check */
  28820. break;
  28821. 800c824: e01c b.n 800c860 <HAL_RCCEx_PeriphCLKConfig+0x1f0>
  28822. case RCC_SAI23CLKSOURCE_PLL2: /* PLL2 is used as clock source for SAI2/3 */
  28823. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  28824. 800c826: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28825. 800c82a: 3308 adds r3, #8
  28826. 800c82c: 2100 movs r1, #0
  28827. 800c82e: 4618 mov r0, r3
  28828. 800c830: f002 fa9c bl 800ed6c <RCCEx_PLL2_Config>
  28829. 800c834: 4603 mov r3, r0
  28830. 800c836: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28831. /* SAI2/3 clock source configuration done later after clock selection check */
  28832. break;
  28833. 800c83a: e011 b.n 800c860 <HAL_RCCEx_PeriphCLKConfig+0x1f0>
  28834. case RCC_SAI23CLKSOURCE_PLL3: /* PLL3 is used as clock source for SAI2/3 */
  28835. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
  28836. 800c83c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28837. 800c840: 3328 adds r3, #40 @ 0x28
  28838. 800c842: 2100 movs r1, #0
  28839. 800c844: 4618 mov r0, r3
  28840. 800c846: f002 fb43 bl 800eed0 <RCCEx_PLL3_Config>
  28841. 800c84a: 4603 mov r3, r0
  28842. 800c84c: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28843. /* SAI2/3 clock source configuration done later after clock selection check */
  28844. break;
  28845. 800c850: e006 b.n 800c860 <HAL_RCCEx_PeriphCLKConfig+0x1f0>
  28846. /* HSI, HSE, or CSI oscillator is used as source of SAI2/3 clock */
  28847. /* SAI2/3 clock source configuration done later after clock selection check */
  28848. break;
  28849. default:
  28850. ret = HAL_ERROR;
  28851. 800c852: 2301 movs r3, #1
  28852. 800c854: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28853. break;
  28854. 800c858: e002 b.n 800c860 <HAL_RCCEx_PeriphCLKConfig+0x1f0>
  28855. break;
  28856. 800c85a: bf00 nop
  28857. 800c85c: e000 b.n 800c860 <HAL_RCCEx_PeriphCLKConfig+0x1f0>
  28858. break;
  28859. 800c85e: bf00 nop
  28860. }
  28861. if (ret == HAL_OK)
  28862. 800c860: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28863. 800c864: 2b00 cmp r3, #0
  28864. 800c866: d10a bne.n 800c87e <HAL_RCCEx_PeriphCLKConfig+0x20e>
  28865. {
  28866. /* Set the source of SAI2/3 clock*/
  28867. __HAL_RCC_SAI23_CONFIG(PeriphClkInit->Sai23ClockSelection);
  28868. 800c868: 4b4f ldr r3, [pc, #316] @ (800c9a8 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  28869. 800c86a: 6d1b ldr r3, [r3, #80] @ 0x50
  28870. 800c86c: f423 71e0 bic.w r1, r3, #448 @ 0x1c0
  28871. 800c870: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28872. 800c874: 6ddb ldr r3, [r3, #92] @ 0x5c
  28873. 800c876: 4a4c ldr r2, [pc, #304] @ (800c9a8 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  28874. 800c878: 430b orrs r3, r1
  28875. 800c87a: 6513 str r3, [r2, #80] @ 0x50
  28876. 800c87c: e003 b.n 800c886 <HAL_RCCEx_PeriphCLKConfig+0x216>
  28877. }
  28878. else
  28879. {
  28880. /* set overall return value */
  28881. status = ret;
  28882. 800c87e: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28883. 800c882: f887 311e strb.w r3, [r7, #286] @ 0x11e
  28884. }
  28885. #endif /*SAI2B*/
  28886. #if defined(SAI4)
  28887. /*---------------------------- SAI4A configuration -------------------------------*/
  28888. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI4A) == RCC_PERIPHCLK_SAI4A)
  28889. 800c886: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28890. 800c88a: e9d3 2300 ldrd r2, r3, [r3]
  28891. 800c88e: f402 6380 and.w r3, r2, #1024 @ 0x400
  28892. 800c892: f8c7 3100 str.w r3, [r7, #256] @ 0x100
  28893. 800c896: 2300 movs r3, #0
  28894. 800c898: f8c7 3104 str.w r3, [r7, #260] @ 0x104
  28895. 800c89c: e9d7 1240 ldrd r1, r2, [r7, #256] @ 0x100
  28896. 800c8a0: 460b mov r3, r1
  28897. 800c8a2: 4313 orrs r3, r2
  28898. 800c8a4: d053 beq.n 800c94e <HAL_RCCEx_PeriphCLKConfig+0x2de>
  28899. {
  28900. switch (PeriphClkInit->Sai4AClockSelection)
  28901. 800c8a6: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28902. 800c8aa: f8d3 30a8 ldr.w r3, [r3, #168] @ 0xa8
  28903. 800c8ae: f5b3 0f00 cmp.w r3, #8388608 @ 0x800000
  28904. 800c8b2: d035 beq.n 800c920 <HAL_RCCEx_PeriphCLKConfig+0x2b0>
  28905. 800c8b4: f5b3 0f00 cmp.w r3, #8388608 @ 0x800000
  28906. 800c8b8: d82e bhi.n 800c918 <HAL_RCCEx_PeriphCLKConfig+0x2a8>
  28907. 800c8ba: f5b3 0fc0 cmp.w r3, #6291456 @ 0x600000
  28908. 800c8be: d031 beq.n 800c924 <HAL_RCCEx_PeriphCLKConfig+0x2b4>
  28909. 800c8c0: f5b3 0fc0 cmp.w r3, #6291456 @ 0x600000
  28910. 800c8c4: d828 bhi.n 800c918 <HAL_RCCEx_PeriphCLKConfig+0x2a8>
  28911. 800c8c6: f5b3 0f80 cmp.w r3, #4194304 @ 0x400000
  28912. 800c8ca: d01a beq.n 800c902 <HAL_RCCEx_PeriphCLKConfig+0x292>
  28913. 800c8cc: f5b3 0f80 cmp.w r3, #4194304 @ 0x400000
  28914. 800c8d0: d822 bhi.n 800c918 <HAL_RCCEx_PeriphCLKConfig+0x2a8>
  28915. 800c8d2: 2b00 cmp r3, #0
  28916. 800c8d4: d003 beq.n 800c8de <HAL_RCCEx_PeriphCLKConfig+0x26e>
  28917. 800c8d6: f5b3 1f00 cmp.w r3, #2097152 @ 0x200000
  28918. 800c8da: d007 beq.n 800c8ec <HAL_RCCEx_PeriphCLKConfig+0x27c>
  28919. 800c8dc: e01c b.n 800c918 <HAL_RCCEx_PeriphCLKConfig+0x2a8>
  28920. {
  28921. case RCC_SAI4ACLKSOURCE_PLL: /* PLL is used as clock source for SAI2*/
  28922. /* Enable SAI Clock output generated form System PLL . */
  28923. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  28924. 800c8de: 4b32 ldr r3, [pc, #200] @ (800c9a8 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  28925. 800c8e0: 6adb ldr r3, [r3, #44] @ 0x2c
  28926. 800c8e2: 4a31 ldr r2, [pc, #196] @ (800c9a8 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  28927. 800c8e4: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  28928. 800c8e8: 62d3 str r3, [r2, #44] @ 0x2c
  28929. /* SAI1 clock source configuration done later after clock selection check */
  28930. break;
  28931. 800c8ea: e01c b.n 800c926 <HAL_RCCEx_PeriphCLKConfig+0x2b6>
  28932. case RCC_SAI4ACLKSOURCE_PLL2: /* PLL2 is used as clock source for SAI2*/
  28933. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  28934. 800c8ec: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28935. 800c8f0: 3308 adds r3, #8
  28936. 800c8f2: 2100 movs r1, #0
  28937. 800c8f4: 4618 mov r0, r3
  28938. 800c8f6: f002 fa39 bl 800ed6c <RCCEx_PLL2_Config>
  28939. 800c8fa: 4603 mov r3, r0
  28940. 800c8fc: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28941. /* SAI2 clock source configuration done later after clock selection check */
  28942. break;
  28943. 800c900: e011 b.n 800c926 <HAL_RCCEx_PeriphCLKConfig+0x2b6>
  28944. case RCC_SAI4ACLKSOURCE_PLL3: /* PLL3 is used as clock source for SAI2*/
  28945. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
  28946. 800c902: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28947. 800c906: 3328 adds r3, #40 @ 0x28
  28948. 800c908: 2100 movs r1, #0
  28949. 800c90a: 4618 mov r0, r3
  28950. 800c90c: f002 fae0 bl 800eed0 <RCCEx_PLL3_Config>
  28951. 800c910: 4603 mov r3, r0
  28952. 800c912: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28953. /* SAI1 clock source configuration done later after clock selection check */
  28954. break;
  28955. 800c916: e006 b.n 800c926 <HAL_RCCEx_PeriphCLKConfig+0x2b6>
  28956. /* SAI4A clock source configuration done later after clock selection check */
  28957. break;
  28958. #endif /* RCC_VER_3_0 */
  28959. default:
  28960. ret = HAL_ERROR;
  28961. 800c918: 2301 movs r3, #1
  28962. 800c91a: f887 311f strb.w r3, [r7, #287] @ 0x11f
  28963. break;
  28964. 800c91e: e002 b.n 800c926 <HAL_RCCEx_PeriphCLKConfig+0x2b6>
  28965. break;
  28966. 800c920: bf00 nop
  28967. 800c922: e000 b.n 800c926 <HAL_RCCEx_PeriphCLKConfig+0x2b6>
  28968. break;
  28969. 800c924: bf00 nop
  28970. }
  28971. if (ret == HAL_OK)
  28972. 800c926: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28973. 800c92a: 2b00 cmp r3, #0
  28974. 800c92c: d10b bne.n 800c946 <HAL_RCCEx_PeriphCLKConfig+0x2d6>
  28975. {
  28976. /* Set the source of SAI4A clock*/
  28977. __HAL_RCC_SAI4A_CONFIG(PeriphClkInit->Sai4AClockSelection);
  28978. 800c92e: 4b1e ldr r3, [pc, #120] @ (800c9a8 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  28979. 800c930: 6d9b ldr r3, [r3, #88] @ 0x58
  28980. 800c932: f423 0160 bic.w r1, r3, #14680064 @ 0xe00000
  28981. 800c936: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28982. 800c93a: f8d3 30a8 ldr.w r3, [r3, #168] @ 0xa8
  28983. 800c93e: 4a1a ldr r2, [pc, #104] @ (800c9a8 <HAL_RCCEx_PeriphCLKConfig+0x338>)
  28984. 800c940: 430b orrs r3, r1
  28985. 800c942: 6593 str r3, [r2, #88] @ 0x58
  28986. 800c944: e003 b.n 800c94e <HAL_RCCEx_PeriphCLKConfig+0x2de>
  28987. }
  28988. else
  28989. {
  28990. /* set overall return value */
  28991. status = ret;
  28992. 800c946: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  28993. 800c94a: f887 311e strb.w r3, [r7, #286] @ 0x11e
  28994. }
  28995. }
  28996. /*---------------------------- SAI4B configuration -------------------------------*/
  28997. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI4B) == RCC_PERIPHCLK_SAI4B)
  28998. 800c94e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  28999. 800c952: e9d3 2300 ldrd r2, r3, [r3]
  29000. 800c956: f402 6300 and.w r3, r2, #2048 @ 0x800
  29001. 800c95a: f8c7 30f8 str.w r3, [r7, #248] @ 0xf8
  29002. 800c95e: 2300 movs r3, #0
  29003. 800c960: f8c7 30fc str.w r3, [r7, #252] @ 0xfc
  29004. 800c964: e9d7 123e ldrd r1, r2, [r7, #248] @ 0xf8
  29005. 800c968: 460b mov r3, r1
  29006. 800c96a: 4313 orrs r3, r2
  29007. 800c96c: d056 beq.n 800ca1c <HAL_RCCEx_PeriphCLKConfig+0x3ac>
  29008. {
  29009. switch (PeriphClkInit->Sai4BClockSelection)
  29010. 800c96e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29011. 800c972: f8d3 30ac ldr.w r3, [r3, #172] @ 0xac
  29012. 800c976: f1b3 6f80 cmp.w r3, #67108864 @ 0x4000000
  29013. 800c97a: d038 beq.n 800c9ee <HAL_RCCEx_PeriphCLKConfig+0x37e>
  29014. 800c97c: f1b3 6f80 cmp.w r3, #67108864 @ 0x4000000
  29015. 800c980: d831 bhi.n 800c9e6 <HAL_RCCEx_PeriphCLKConfig+0x376>
  29016. 800c982: f1b3 7f40 cmp.w r3, #50331648 @ 0x3000000
  29017. 800c986: d034 beq.n 800c9f2 <HAL_RCCEx_PeriphCLKConfig+0x382>
  29018. 800c988: f1b3 7f40 cmp.w r3, #50331648 @ 0x3000000
  29019. 800c98c: d82b bhi.n 800c9e6 <HAL_RCCEx_PeriphCLKConfig+0x376>
  29020. 800c98e: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  29021. 800c992: d01d beq.n 800c9d0 <HAL_RCCEx_PeriphCLKConfig+0x360>
  29022. 800c994: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  29023. 800c998: d825 bhi.n 800c9e6 <HAL_RCCEx_PeriphCLKConfig+0x376>
  29024. 800c99a: 2b00 cmp r3, #0
  29025. 800c99c: d006 beq.n 800c9ac <HAL_RCCEx_PeriphCLKConfig+0x33c>
  29026. 800c99e: f1b3 7f80 cmp.w r3, #16777216 @ 0x1000000
  29027. 800c9a2: d00a beq.n 800c9ba <HAL_RCCEx_PeriphCLKConfig+0x34a>
  29028. 800c9a4: e01f b.n 800c9e6 <HAL_RCCEx_PeriphCLKConfig+0x376>
  29029. 800c9a6: bf00 nop
  29030. 800c9a8: 58024400 .word 0x58024400
  29031. {
  29032. case RCC_SAI4BCLKSOURCE_PLL: /* PLL is used as clock source for SAI2*/
  29033. /* Enable SAI Clock output generated form System PLL . */
  29034. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  29035. 800c9ac: 4ba2 ldr r3, [pc, #648] @ (800cc38 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  29036. 800c9ae: 6adb ldr r3, [r3, #44] @ 0x2c
  29037. 800c9b0: 4aa1 ldr r2, [pc, #644] @ (800cc38 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  29038. 800c9b2: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  29039. 800c9b6: 62d3 str r3, [r2, #44] @ 0x2c
  29040. /* SAI1 clock source configuration done later after clock selection check */
  29041. break;
  29042. 800c9b8: e01c b.n 800c9f4 <HAL_RCCEx_PeriphCLKConfig+0x384>
  29043. case RCC_SAI4BCLKSOURCE_PLL2: /* PLL2 is used as clock source for SAI2*/
  29044. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  29045. 800c9ba: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29046. 800c9be: 3308 adds r3, #8
  29047. 800c9c0: 2100 movs r1, #0
  29048. 800c9c2: 4618 mov r0, r3
  29049. 800c9c4: f002 f9d2 bl 800ed6c <RCCEx_PLL2_Config>
  29050. 800c9c8: 4603 mov r3, r0
  29051. 800c9ca: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29052. /* SAI2 clock source configuration done later after clock selection check */
  29053. break;
  29054. 800c9ce: e011 b.n 800c9f4 <HAL_RCCEx_PeriphCLKConfig+0x384>
  29055. case RCC_SAI4BCLKSOURCE_PLL3: /* PLL3 is used as clock source for SAI2*/
  29056. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
  29057. 800c9d0: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29058. 800c9d4: 3328 adds r3, #40 @ 0x28
  29059. 800c9d6: 2100 movs r1, #0
  29060. 800c9d8: 4618 mov r0, r3
  29061. 800c9da: f002 fa79 bl 800eed0 <RCCEx_PLL3_Config>
  29062. 800c9de: 4603 mov r3, r0
  29063. 800c9e0: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29064. /* SAI1 clock source configuration done later after clock selection check */
  29065. break;
  29066. 800c9e4: e006 b.n 800c9f4 <HAL_RCCEx_PeriphCLKConfig+0x384>
  29067. /* SAI4B clock source configuration done later after clock selection check */
  29068. break;
  29069. #endif /* RCC_VER_3_0 */
  29070. default:
  29071. ret = HAL_ERROR;
  29072. 800c9e6: 2301 movs r3, #1
  29073. 800c9e8: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29074. break;
  29075. 800c9ec: e002 b.n 800c9f4 <HAL_RCCEx_PeriphCLKConfig+0x384>
  29076. break;
  29077. 800c9ee: bf00 nop
  29078. 800c9f0: e000 b.n 800c9f4 <HAL_RCCEx_PeriphCLKConfig+0x384>
  29079. break;
  29080. 800c9f2: bf00 nop
  29081. }
  29082. if (ret == HAL_OK)
  29083. 800c9f4: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29084. 800c9f8: 2b00 cmp r3, #0
  29085. 800c9fa: d10b bne.n 800ca14 <HAL_RCCEx_PeriphCLKConfig+0x3a4>
  29086. {
  29087. /* Set the source of SAI4B clock*/
  29088. __HAL_RCC_SAI4B_CONFIG(PeriphClkInit->Sai4BClockSelection);
  29089. 800c9fc: 4b8e ldr r3, [pc, #568] @ (800cc38 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  29090. 800c9fe: 6d9b ldr r3, [r3, #88] @ 0x58
  29091. 800ca00: f023 61e0 bic.w r1, r3, #117440512 @ 0x7000000
  29092. 800ca04: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29093. 800ca08: f8d3 30ac ldr.w r3, [r3, #172] @ 0xac
  29094. 800ca0c: 4a8a ldr r2, [pc, #552] @ (800cc38 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  29095. 800ca0e: 430b orrs r3, r1
  29096. 800ca10: 6593 str r3, [r2, #88] @ 0x58
  29097. 800ca12: e003 b.n 800ca1c <HAL_RCCEx_PeriphCLKConfig+0x3ac>
  29098. }
  29099. else
  29100. {
  29101. /* set overall return value */
  29102. status = ret;
  29103. 800ca14: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29104. 800ca18: f887 311e strb.w r3, [r7, #286] @ 0x11e
  29105. }
  29106. #endif /*SAI4*/
  29107. #if defined(QUADSPI)
  29108. /*---------------------------- QSPI configuration -------------------------------*/
  29109. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_QSPI) == RCC_PERIPHCLK_QSPI)
  29110. 800ca1c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29111. 800ca20: e9d3 2300 ldrd r2, r3, [r3]
  29112. 800ca24: f002 7300 and.w r3, r2, #33554432 @ 0x2000000
  29113. 800ca28: f8c7 30f0 str.w r3, [r7, #240] @ 0xf0
  29114. 800ca2c: 2300 movs r3, #0
  29115. 800ca2e: f8c7 30f4 str.w r3, [r7, #244] @ 0xf4
  29116. 800ca32: e9d7 123c ldrd r1, r2, [r7, #240] @ 0xf0
  29117. 800ca36: 460b mov r3, r1
  29118. 800ca38: 4313 orrs r3, r2
  29119. 800ca3a: d03a beq.n 800cab2 <HAL_RCCEx_PeriphCLKConfig+0x442>
  29120. {
  29121. switch (PeriphClkInit->QspiClockSelection)
  29122. 800ca3c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29123. 800ca40: 6cdb ldr r3, [r3, #76] @ 0x4c
  29124. 800ca42: 2b30 cmp r3, #48 @ 0x30
  29125. 800ca44: d01f beq.n 800ca86 <HAL_RCCEx_PeriphCLKConfig+0x416>
  29126. 800ca46: 2b30 cmp r3, #48 @ 0x30
  29127. 800ca48: d819 bhi.n 800ca7e <HAL_RCCEx_PeriphCLKConfig+0x40e>
  29128. 800ca4a: 2b20 cmp r3, #32
  29129. 800ca4c: d00c beq.n 800ca68 <HAL_RCCEx_PeriphCLKConfig+0x3f8>
  29130. 800ca4e: 2b20 cmp r3, #32
  29131. 800ca50: d815 bhi.n 800ca7e <HAL_RCCEx_PeriphCLKConfig+0x40e>
  29132. 800ca52: 2b00 cmp r3, #0
  29133. 800ca54: d019 beq.n 800ca8a <HAL_RCCEx_PeriphCLKConfig+0x41a>
  29134. 800ca56: 2b10 cmp r3, #16
  29135. 800ca58: d111 bne.n 800ca7e <HAL_RCCEx_PeriphCLKConfig+0x40e>
  29136. {
  29137. case RCC_QSPICLKSOURCE_PLL: /* PLL is used as clock source for QSPI*/
  29138. /* Enable QSPI Clock output generated form System PLL . */
  29139. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  29140. 800ca5a: 4b77 ldr r3, [pc, #476] @ (800cc38 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  29141. 800ca5c: 6adb ldr r3, [r3, #44] @ 0x2c
  29142. 800ca5e: 4a76 ldr r2, [pc, #472] @ (800cc38 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  29143. 800ca60: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  29144. 800ca64: 62d3 str r3, [r2, #44] @ 0x2c
  29145. /* QSPI clock source configuration done later after clock selection check */
  29146. break;
  29147. 800ca66: e011 b.n 800ca8c <HAL_RCCEx_PeriphCLKConfig+0x41c>
  29148. case RCC_QSPICLKSOURCE_PLL2: /* PLL2 is used as clock source for QSPI*/
  29149. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_R_UPDATE);
  29150. 800ca68: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29151. 800ca6c: 3308 adds r3, #8
  29152. 800ca6e: 2102 movs r1, #2
  29153. 800ca70: 4618 mov r0, r3
  29154. 800ca72: f002 f97b bl 800ed6c <RCCEx_PLL2_Config>
  29155. 800ca76: 4603 mov r3, r0
  29156. 800ca78: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29157. /* QSPI clock source configuration done later after clock selection check */
  29158. break;
  29159. 800ca7c: e006 b.n 800ca8c <HAL_RCCEx_PeriphCLKConfig+0x41c>
  29160. case RCC_QSPICLKSOURCE_D1HCLK:
  29161. /* Domain1 HCLK clock selected as QSPI kernel peripheral clock */
  29162. break;
  29163. default:
  29164. ret = HAL_ERROR;
  29165. 800ca7e: 2301 movs r3, #1
  29166. 800ca80: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29167. break;
  29168. 800ca84: e002 b.n 800ca8c <HAL_RCCEx_PeriphCLKConfig+0x41c>
  29169. break;
  29170. 800ca86: bf00 nop
  29171. 800ca88: e000 b.n 800ca8c <HAL_RCCEx_PeriphCLKConfig+0x41c>
  29172. break;
  29173. 800ca8a: bf00 nop
  29174. }
  29175. if (ret == HAL_OK)
  29176. 800ca8c: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29177. 800ca90: 2b00 cmp r3, #0
  29178. 800ca92: d10a bne.n 800caaa <HAL_RCCEx_PeriphCLKConfig+0x43a>
  29179. {
  29180. /* Set the source of QSPI clock*/
  29181. __HAL_RCC_QSPI_CONFIG(PeriphClkInit->QspiClockSelection);
  29182. 800ca94: 4b68 ldr r3, [pc, #416] @ (800cc38 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  29183. 800ca96: 6cdb ldr r3, [r3, #76] @ 0x4c
  29184. 800ca98: f023 0130 bic.w r1, r3, #48 @ 0x30
  29185. 800ca9c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29186. 800caa0: 6cdb ldr r3, [r3, #76] @ 0x4c
  29187. 800caa2: 4a65 ldr r2, [pc, #404] @ (800cc38 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  29188. 800caa4: 430b orrs r3, r1
  29189. 800caa6: 64d3 str r3, [r2, #76] @ 0x4c
  29190. 800caa8: e003 b.n 800cab2 <HAL_RCCEx_PeriphCLKConfig+0x442>
  29191. }
  29192. else
  29193. {
  29194. /* set overall return value */
  29195. status = ret;
  29196. 800caaa: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29197. 800caae: f887 311e strb.w r3, [r7, #286] @ 0x11e
  29198. }
  29199. }
  29200. #endif /*OCTOSPI*/
  29201. /*---------------------------- SPI1/2/3 configuration -------------------------------*/
  29202. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SPI123) == RCC_PERIPHCLK_SPI123)
  29203. 800cab2: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29204. 800cab6: e9d3 2300 ldrd r2, r3, [r3]
  29205. 800caba: f402 5380 and.w r3, r2, #4096 @ 0x1000
  29206. 800cabe: f8c7 30e8 str.w r3, [r7, #232] @ 0xe8
  29207. 800cac2: 2300 movs r3, #0
  29208. 800cac4: f8c7 30ec str.w r3, [r7, #236] @ 0xec
  29209. 800cac8: e9d7 123a ldrd r1, r2, [r7, #232] @ 0xe8
  29210. 800cacc: 460b mov r3, r1
  29211. 800cace: 4313 orrs r3, r2
  29212. 800cad0: d051 beq.n 800cb76 <HAL_RCCEx_PeriphCLKConfig+0x506>
  29213. {
  29214. switch (PeriphClkInit->Spi123ClockSelection)
  29215. 800cad2: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29216. 800cad6: 6e1b ldr r3, [r3, #96] @ 0x60
  29217. 800cad8: f5b3 4f80 cmp.w r3, #16384 @ 0x4000
  29218. 800cadc: d035 beq.n 800cb4a <HAL_RCCEx_PeriphCLKConfig+0x4da>
  29219. 800cade: f5b3 4f80 cmp.w r3, #16384 @ 0x4000
  29220. 800cae2: d82e bhi.n 800cb42 <HAL_RCCEx_PeriphCLKConfig+0x4d2>
  29221. 800cae4: f5b3 5f40 cmp.w r3, #12288 @ 0x3000
  29222. 800cae8: d031 beq.n 800cb4e <HAL_RCCEx_PeriphCLKConfig+0x4de>
  29223. 800caea: f5b3 5f40 cmp.w r3, #12288 @ 0x3000
  29224. 800caee: d828 bhi.n 800cb42 <HAL_RCCEx_PeriphCLKConfig+0x4d2>
  29225. 800caf0: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  29226. 800caf4: d01a beq.n 800cb2c <HAL_RCCEx_PeriphCLKConfig+0x4bc>
  29227. 800caf6: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  29228. 800cafa: d822 bhi.n 800cb42 <HAL_RCCEx_PeriphCLKConfig+0x4d2>
  29229. 800cafc: 2b00 cmp r3, #0
  29230. 800cafe: d003 beq.n 800cb08 <HAL_RCCEx_PeriphCLKConfig+0x498>
  29231. 800cb00: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  29232. 800cb04: d007 beq.n 800cb16 <HAL_RCCEx_PeriphCLKConfig+0x4a6>
  29233. 800cb06: e01c b.n 800cb42 <HAL_RCCEx_PeriphCLKConfig+0x4d2>
  29234. {
  29235. case RCC_SPI123CLKSOURCE_PLL: /* PLL is used as clock source for SPI1/2/3 */
  29236. /* Enable SPI Clock output generated form System PLL . */
  29237. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  29238. 800cb08: 4b4b ldr r3, [pc, #300] @ (800cc38 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  29239. 800cb0a: 6adb ldr r3, [r3, #44] @ 0x2c
  29240. 800cb0c: 4a4a ldr r2, [pc, #296] @ (800cc38 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  29241. 800cb0e: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  29242. 800cb12: 62d3 str r3, [r2, #44] @ 0x2c
  29243. /* SPI1/2/3 clock source configuration done later after clock selection check */
  29244. break;
  29245. 800cb14: e01c b.n 800cb50 <HAL_RCCEx_PeriphCLKConfig+0x4e0>
  29246. case RCC_SPI123CLKSOURCE_PLL2: /* PLL2 is used as clock source for SPI1/2/3 */
  29247. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  29248. 800cb16: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29249. 800cb1a: 3308 adds r3, #8
  29250. 800cb1c: 2100 movs r1, #0
  29251. 800cb1e: 4618 mov r0, r3
  29252. 800cb20: f002 f924 bl 800ed6c <RCCEx_PLL2_Config>
  29253. 800cb24: 4603 mov r3, r0
  29254. 800cb26: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29255. /* SPI1/2/3 clock source configuration done later after clock selection check */
  29256. break;
  29257. 800cb2a: e011 b.n 800cb50 <HAL_RCCEx_PeriphCLKConfig+0x4e0>
  29258. case RCC_SPI123CLKSOURCE_PLL3: /* PLL3 is used as clock source for SPI1/2/3 */
  29259. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
  29260. 800cb2c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29261. 800cb30: 3328 adds r3, #40 @ 0x28
  29262. 800cb32: 2100 movs r1, #0
  29263. 800cb34: 4618 mov r0, r3
  29264. 800cb36: f002 f9cb bl 800eed0 <RCCEx_PLL3_Config>
  29265. 800cb3a: 4603 mov r3, r0
  29266. 800cb3c: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29267. /* SPI1/2/3 clock source configuration done later after clock selection check */
  29268. break;
  29269. 800cb40: e006 b.n 800cb50 <HAL_RCCEx_PeriphCLKConfig+0x4e0>
  29270. /* HSI, HSE, or CSI oscillator is used as source of SPI1/2/3 clock */
  29271. /* SPI1/2/3 clock source configuration done later after clock selection check */
  29272. break;
  29273. default:
  29274. ret = HAL_ERROR;
  29275. 800cb42: 2301 movs r3, #1
  29276. 800cb44: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29277. break;
  29278. 800cb48: e002 b.n 800cb50 <HAL_RCCEx_PeriphCLKConfig+0x4e0>
  29279. break;
  29280. 800cb4a: bf00 nop
  29281. 800cb4c: e000 b.n 800cb50 <HAL_RCCEx_PeriphCLKConfig+0x4e0>
  29282. break;
  29283. 800cb4e: bf00 nop
  29284. }
  29285. if (ret == HAL_OK)
  29286. 800cb50: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29287. 800cb54: 2b00 cmp r3, #0
  29288. 800cb56: d10a bne.n 800cb6e <HAL_RCCEx_PeriphCLKConfig+0x4fe>
  29289. {
  29290. /* Set the source of SPI1/2/3 clock*/
  29291. __HAL_RCC_SPI123_CONFIG(PeriphClkInit->Spi123ClockSelection);
  29292. 800cb58: 4b37 ldr r3, [pc, #220] @ (800cc38 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  29293. 800cb5a: 6d1b ldr r3, [r3, #80] @ 0x50
  29294. 800cb5c: f423 41e0 bic.w r1, r3, #28672 @ 0x7000
  29295. 800cb60: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29296. 800cb64: 6e1b ldr r3, [r3, #96] @ 0x60
  29297. 800cb66: 4a34 ldr r2, [pc, #208] @ (800cc38 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  29298. 800cb68: 430b orrs r3, r1
  29299. 800cb6a: 6513 str r3, [r2, #80] @ 0x50
  29300. 800cb6c: e003 b.n 800cb76 <HAL_RCCEx_PeriphCLKConfig+0x506>
  29301. }
  29302. else
  29303. {
  29304. /* set overall return value */
  29305. status = ret;
  29306. 800cb6e: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29307. 800cb72: f887 311e strb.w r3, [r7, #286] @ 0x11e
  29308. }
  29309. }
  29310. /*---------------------------- SPI4/5 configuration -------------------------------*/
  29311. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SPI45) == RCC_PERIPHCLK_SPI45)
  29312. 800cb76: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29313. 800cb7a: e9d3 2300 ldrd r2, r3, [r3]
  29314. 800cb7e: f402 5300 and.w r3, r2, #8192 @ 0x2000
  29315. 800cb82: f8c7 30e0 str.w r3, [r7, #224] @ 0xe0
  29316. 800cb86: 2300 movs r3, #0
  29317. 800cb88: f8c7 30e4 str.w r3, [r7, #228] @ 0xe4
  29318. 800cb8c: e9d7 1238 ldrd r1, r2, [r7, #224] @ 0xe0
  29319. 800cb90: 460b mov r3, r1
  29320. 800cb92: 4313 orrs r3, r2
  29321. 800cb94: d056 beq.n 800cc44 <HAL_RCCEx_PeriphCLKConfig+0x5d4>
  29322. {
  29323. switch (PeriphClkInit->Spi45ClockSelection)
  29324. 800cb96: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29325. 800cb9a: 6e5b ldr r3, [r3, #100] @ 0x64
  29326. 800cb9c: f5b3 2fa0 cmp.w r3, #327680 @ 0x50000
  29327. 800cba0: d033 beq.n 800cc0a <HAL_RCCEx_PeriphCLKConfig+0x59a>
  29328. 800cba2: f5b3 2fa0 cmp.w r3, #327680 @ 0x50000
  29329. 800cba6: d82c bhi.n 800cc02 <HAL_RCCEx_PeriphCLKConfig+0x592>
  29330. 800cba8: f5b3 2f80 cmp.w r3, #262144 @ 0x40000
  29331. 800cbac: d02f beq.n 800cc0e <HAL_RCCEx_PeriphCLKConfig+0x59e>
  29332. 800cbae: f5b3 2f80 cmp.w r3, #262144 @ 0x40000
  29333. 800cbb2: d826 bhi.n 800cc02 <HAL_RCCEx_PeriphCLKConfig+0x592>
  29334. 800cbb4: f5b3 3f40 cmp.w r3, #196608 @ 0x30000
  29335. 800cbb8: d02b beq.n 800cc12 <HAL_RCCEx_PeriphCLKConfig+0x5a2>
  29336. 800cbba: f5b3 3f40 cmp.w r3, #196608 @ 0x30000
  29337. 800cbbe: d820 bhi.n 800cc02 <HAL_RCCEx_PeriphCLKConfig+0x592>
  29338. 800cbc0: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  29339. 800cbc4: d012 beq.n 800cbec <HAL_RCCEx_PeriphCLKConfig+0x57c>
  29340. 800cbc6: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  29341. 800cbca: d81a bhi.n 800cc02 <HAL_RCCEx_PeriphCLKConfig+0x592>
  29342. 800cbcc: 2b00 cmp r3, #0
  29343. 800cbce: d022 beq.n 800cc16 <HAL_RCCEx_PeriphCLKConfig+0x5a6>
  29344. 800cbd0: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  29345. 800cbd4: d115 bne.n 800cc02 <HAL_RCCEx_PeriphCLKConfig+0x592>
  29346. /* SPI4/5 clock source configuration done later after clock selection check */
  29347. break;
  29348. case RCC_SPI45CLKSOURCE_PLL2: /* PLL2 is used as clock source for SPI4/5 */
  29349. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
  29350. 800cbd6: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29351. 800cbda: 3308 adds r3, #8
  29352. 800cbdc: 2101 movs r1, #1
  29353. 800cbde: 4618 mov r0, r3
  29354. 800cbe0: f002 f8c4 bl 800ed6c <RCCEx_PLL2_Config>
  29355. 800cbe4: 4603 mov r3, r0
  29356. 800cbe6: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29357. /* SPI4/5 clock source configuration done later after clock selection check */
  29358. break;
  29359. 800cbea: e015 b.n 800cc18 <HAL_RCCEx_PeriphCLKConfig+0x5a8>
  29360. case RCC_SPI45CLKSOURCE_PLL3: /* PLL3 is used as clock source for SPI4/5 */
  29361. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
  29362. 800cbec: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29363. 800cbf0: 3328 adds r3, #40 @ 0x28
  29364. 800cbf2: 2101 movs r1, #1
  29365. 800cbf4: 4618 mov r0, r3
  29366. 800cbf6: f002 f96b bl 800eed0 <RCCEx_PLL3_Config>
  29367. 800cbfa: 4603 mov r3, r0
  29368. 800cbfc: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29369. /* SPI4/5 clock source configuration done later after clock selection check */
  29370. break;
  29371. 800cc00: e00a b.n 800cc18 <HAL_RCCEx_PeriphCLKConfig+0x5a8>
  29372. /* HSE, oscillator is used as source of SPI4/5 clock */
  29373. /* SPI4/5 clock source configuration done later after clock selection check */
  29374. break;
  29375. default:
  29376. ret = HAL_ERROR;
  29377. 800cc02: 2301 movs r3, #1
  29378. 800cc04: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29379. break;
  29380. 800cc08: e006 b.n 800cc18 <HAL_RCCEx_PeriphCLKConfig+0x5a8>
  29381. break;
  29382. 800cc0a: bf00 nop
  29383. 800cc0c: e004 b.n 800cc18 <HAL_RCCEx_PeriphCLKConfig+0x5a8>
  29384. break;
  29385. 800cc0e: bf00 nop
  29386. 800cc10: e002 b.n 800cc18 <HAL_RCCEx_PeriphCLKConfig+0x5a8>
  29387. break;
  29388. 800cc12: bf00 nop
  29389. 800cc14: e000 b.n 800cc18 <HAL_RCCEx_PeriphCLKConfig+0x5a8>
  29390. break;
  29391. 800cc16: bf00 nop
  29392. }
  29393. if (ret == HAL_OK)
  29394. 800cc18: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29395. 800cc1c: 2b00 cmp r3, #0
  29396. 800cc1e: d10d bne.n 800cc3c <HAL_RCCEx_PeriphCLKConfig+0x5cc>
  29397. {
  29398. /* Set the source of SPI4/5 clock*/
  29399. __HAL_RCC_SPI45_CONFIG(PeriphClkInit->Spi45ClockSelection);
  29400. 800cc20: 4b05 ldr r3, [pc, #20] @ (800cc38 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  29401. 800cc22: 6d1b ldr r3, [r3, #80] @ 0x50
  29402. 800cc24: f423 21e0 bic.w r1, r3, #458752 @ 0x70000
  29403. 800cc28: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29404. 800cc2c: 6e5b ldr r3, [r3, #100] @ 0x64
  29405. 800cc2e: 4a02 ldr r2, [pc, #8] @ (800cc38 <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  29406. 800cc30: 430b orrs r3, r1
  29407. 800cc32: 6513 str r3, [r2, #80] @ 0x50
  29408. 800cc34: e006 b.n 800cc44 <HAL_RCCEx_PeriphCLKConfig+0x5d4>
  29409. 800cc36: bf00 nop
  29410. 800cc38: 58024400 .word 0x58024400
  29411. }
  29412. else
  29413. {
  29414. /* set overall return value */
  29415. status = ret;
  29416. 800cc3c: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29417. 800cc40: f887 311e strb.w r3, [r7, #286] @ 0x11e
  29418. }
  29419. }
  29420. /*---------------------------- SPI6 configuration -------------------------------*/
  29421. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SPI6) == RCC_PERIPHCLK_SPI6)
  29422. 800cc44: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29423. 800cc48: e9d3 2300 ldrd r2, r3, [r3]
  29424. 800cc4c: f402 4380 and.w r3, r2, #16384 @ 0x4000
  29425. 800cc50: f8c7 30d8 str.w r3, [r7, #216] @ 0xd8
  29426. 800cc54: 2300 movs r3, #0
  29427. 800cc56: f8c7 30dc str.w r3, [r7, #220] @ 0xdc
  29428. 800cc5a: e9d7 1236 ldrd r1, r2, [r7, #216] @ 0xd8
  29429. 800cc5e: 460b mov r3, r1
  29430. 800cc60: 4313 orrs r3, r2
  29431. 800cc62: d055 beq.n 800cd10 <HAL_RCCEx_PeriphCLKConfig+0x6a0>
  29432. {
  29433. switch (PeriphClkInit->Spi6ClockSelection)
  29434. 800cc64: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29435. 800cc68: f8d3 30b0 ldr.w r3, [r3, #176] @ 0xb0
  29436. 800cc6c: f1b3 4fa0 cmp.w r3, #1342177280 @ 0x50000000
  29437. 800cc70: d033 beq.n 800ccda <HAL_RCCEx_PeriphCLKConfig+0x66a>
  29438. 800cc72: f1b3 4fa0 cmp.w r3, #1342177280 @ 0x50000000
  29439. 800cc76: d82c bhi.n 800ccd2 <HAL_RCCEx_PeriphCLKConfig+0x662>
  29440. 800cc78: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  29441. 800cc7c: d02f beq.n 800ccde <HAL_RCCEx_PeriphCLKConfig+0x66e>
  29442. 800cc7e: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  29443. 800cc82: d826 bhi.n 800ccd2 <HAL_RCCEx_PeriphCLKConfig+0x662>
  29444. 800cc84: f1b3 5f40 cmp.w r3, #805306368 @ 0x30000000
  29445. 800cc88: d02b beq.n 800cce2 <HAL_RCCEx_PeriphCLKConfig+0x672>
  29446. 800cc8a: f1b3 5f40 cmp.w r3, #805306368 @ 0x30000000
  29447. 800cc8e: d820 bhi.n 800ccd2 <HAL_RCCEx_PeriphCLKConfig+0x662>
  29448. 800cc90: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  29449. 800cc94: d012 beq.n 800ccbc <HAL_RCCEx_PeriphCLKConfig+0x64c>
  29450. 800cc96: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  29451. 800cc9a: d81a bhi.n 800ccd2 <HAL_RCCEx_PeriphCLKConfig+0x662>
  29452. 800cc9c: 2b00 cmp r3, #0
  29453. 800cc9e: d022 beq.n 800cce6 <HAL_RCCEx_PeriphCLKConfig+0x676>
  29454. 800cca0: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  29455. 800cca4: d115 bne.n 800ccd2 <HAL_RCCEx_PeriphCLKConfig+0x662>
  29456. /* SPI6 clock source configuration done later after clock selection check */
  29457. break;
  29458. case RCC_SPI6CLKSOURCE_PLL2: /* PLL2 is used as clock source for SPI6*/
  29459. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
  29460. 800cca6: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29461. 800ccaa: 3308 adds r3, #8
  29462. 800ccac: 2101 movs r1, #1
  29463. 800ccae: 4618 mov r0, r3
  29464. 800ccb0: f002 f85c bl 800ed6c <RCCEx_PLL2_Config>
  29465. 800ccb4: 4603 mov r3, r0
  29466. 800ccb6: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29467. /* SPI6 clock source configuration done later after clock selection check */
  29468. break;
  29469. 800ccba: e015 b.n 800cce8 <HAL_RCCEx_PeriphCLKConfig+0x678>
  29470. case RCC_SPI6CLKSOURCE_PLL3: /* PLL3 is used as clock source for SPI6*/
  29471. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
  29472. 800ccbc: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29473. 800ccc0: 3328 adds r3, #40 @ 0x28
  29474. 800ccc2: 2101 movs r1, #1
  29475. 800ccc4: 4618 mov r0, r3
  29476. 800ccc6: f002 f903 bl 800eed0 <RCCEx_PLL3_Config>
  29477. 800ccca: 4603 mov r3, r0
  29478. 800cccc: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29479. /* SPI6 clock source configuration done later after clock selection check */
  29480. break;
  29481. 800ccd0: e00a b.n 800cce8 <HAL_RCCEx_PeriphCLKConfig+0x678>
  29482. /* SPI6 clock source configuration done later after clock selection check */
  29483. break;
  29484. #endif
  29485. default:
  29486. ret = HAL_ERROR;
  29487. 800ccd2: 2301 movs r3, #1
  29488. 800ccd4: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29489. break;
  29490. 800ccd8: e006 b.n 800cce8 <HAL_RCCEx_PeriphCLKConfig+0x678>
  29491. break;
  29492. 800ccda: bf00 nop
  29493. 800ccdc: e004 b.n 800cce8 <HAL_RCCEx_PeriphCLKConfig+0x678>
  29494. break;
  29495. 800ccde: bf00 nop
  29496. 800cce0: e002 b.n 800cce8 <HAL_RCCEx_PeriphCLKConfig+0x678>
  29497. break;
  29498. 800cce2: bf00 nop
  29499. 800cce4: e000 b.n 800cce8 <HAL_RCCEx_PeriphCLKConfig+0x678>
  29500. break;
  29501. 800cce6: bf00 nop
  29502. }
  29503. if (ret == HAL_OK)
  29504. 800cce8: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29505. 800ccec: 2b00 cmp r3, #0
  29506. 800ccee: d10b bne.n 800cd08 <HAL_RCCEx_PeriphCLKConfig+0x698>
  29507. {
  29508. /* Set the source of SPI6 clock*/
  29509. __HAL_RCC_SPI6_CONFIG(PeriphClkInit->Spi6ClockSelection);
  29510. 800ccf0: 4ba3 ldr r3, [pc, #652] @ (800cf80 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  29511. 800ccf2: 6d9b ldr r3, [r3, #88] @ 0x58
  29512. 800ccf4: f023 41e0 bic.w r1, r3, #1879048192 @ 0x70000000
  29513. 800ccf8: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29514. 800ccfc: f8d3 30b0 ldr.w r3, [r3, #176] @ 0xb0
  29515. 800cd00: 4a9f ldr r2, [pc, #636] @ (800cf80 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  29516. 800cd02: 430b orrs r3, r1
  29517. 800cd04: 6593 str r3, [r2, #88] @ 0x58
  29518. 800cd06: e003 b.n 800cd10 <HAL_RCCEx_PeriphCLKConfig+0x6a0>
  29519. }
  29520. else
  29521. {
  29522. /* set overall return value */
  29523. status = ret;
  29524. 800cd08: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29525. 800cd0c: f887 311e strb.w r3, [r7, #286] @ 0x11e
  29526. }
  29527. #endif /*DSI*/
  29528. #if defined(FDCAN1) || defined(FDCAN2)
  29529. /*---------------------------- FDCAN configuration -------------------------------*/
  29530. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_FDCAN) == RCC_PERIPHCLK_FDCAN)
  29531. 800cd10: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29532. 800cd14: e9d3 2300 ldrd r2, r3, [r3]
  29533. 800cd18: f402 4300 and.w r3, r2, #32768 @ 0x8000
  29534. 800cd1c: f8c7 30d0 str.w r3, [r7, #208] @ 0xd0
  29535. 800cd20: 2300 movs r3, #0
  29536. 800cd22: f8c7 30d4 str.w r3, [r7, #212] @ 0xd4
  29537. 800cd26: e9d7 1234 ldrd r1, r2, [r7, #208] @ 0xd0
  29538. 800cd2a: 460b mov r3, r1
  29539. 800cd2c: 4313 orrs r3, r2
  29540. 800cd2e: d037 beq.n 800cda0 <HAL_RCCEx_PeriphCLKConfig+0x730>
  29541. {
  29542. switch (PeriphClkInit->FdcanClockSelection)
  29543. 800cd30: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29544. 800cd34: 6f1b ldr r3, [r3, #112] @ 0x70
  29545. 800cd36: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  29546. 800cd3a: d00e beq.n 800cd5a <HAL_RCCEx_PeriphCLKConfig+0x6ea>
  29547. 800cd3c: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  29548. 800cd40: d816 bhi.n 800cd70 <HAL_RCCEx_PeriphCLKConfig+0x700>
  29549. 800cd42: 2b00 cmp r3, #0
  29550. 800cd44: d018 beq.n 800cd78 <HAL_RCCEx_PeriphCLKConfig+0x708>
  29551. 800cd46: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  29552. 800cd4a: d111 bne.n 800cd70 <HAL_RCCEx_PeriphCLKConfig+0x700>
  29553. {
  29554. case RCC_FDCANCLKSOURCE_PLL: /* PLL is used as clock source for FDCAN*/
  29555. /* Enable FDCAN Clock output generated form System PLL . */
  29556. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  29557. 800cd4c: 4b8c ldr r3, [pc, #560] @ (800cf80 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  29558. 800cd4e: 6adb ldr r3, [r3, #44] @ 0x2c
  29559. 800cd50: 4a8b ldr r2, [pc, #556] @ (800cf80 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  29560. 800cd52: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  29561. 800cd56: 62d3 str r3, [r2, #44] @ 0x2c
  29562. /* FDCAN clock source configuration done later after clock selection check */
  29563. break;
  29564. 800cd58: e00f b.n 800cd7a <HAL_RCCEx_PeriphCLKConfig+0x70a>
  29565. case RCC_FDCANCLKSOURCE_PLL2: /* PLL2 is used as clock source for FDCAN*/
  29566. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
  29567. 800cd5a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29568. 800cd5e: 3308 adds r3, #8
  29569. 800cd60: 2101 movs r1, #1
  29570. 800cd62: 4618 mov r0, r3
  29571. 800cd64: f002 f802 bl 800ed6c <RCCEx_PLL2_Config>
  29572. 800cd68: 4603 mov r3, r0
  29573. 800cd6a: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29574. /* FDCAN clock source configuration done later after clock selection check */
  29575. break;
  29576. 800cd6e: e004 b.n 800cd7a <HAL_RCCEx_PeriphCLKConfig+0x70a>
  29577. /* HSE is used as clock source for FDCAN*/
  29578. /* FDCAN clock source configuration done later after clock selection check */
  29579. break;
  29580. default:
  29581. ret = HAL_ERROR;
  29582. 800cd70: 2301 movs r3, #1
  29583. 800cd72: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29584. break;
  29585. 800cd76: e000 b.n 800cd7a <HAL_RCCEx_PeriphCLKConfig+0x70a>
  29586. break;
  29587. 800cd78: bf00 nop
  29588. }
  29589. if (ret == HAL_OK)
  29590. 800cd7a: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29591. 800cd7e: 2b00 cmp r3, #0
  29592. 800cd80: d10a bne.n 800cd98 <HAL_RCCEx_PeriphCLKConfig+0x728>
  29593. {
  29594. /* Set the source of FDCAN clock*/
  29595. __HAL_RCC_FDCAN_CONFIG(PeriphClkInit->FdcanClockSelection);
  29596. 800cd82: 4b7f ldr r3, [pc, #508] @ (800cf80 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  29597. 800cd84: 6d1b ldr r3, [r3, #80] @ 0x50
  29598. 800cd86: f023 5140 bic.w r1, r3, #805306368 @ 0x30000000
  29599. 800cd8a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29600. 800cd8e: 6f1b ldr r3, [r3, #112] @ 0x70
  29601. 800cd90: 4a7b ldr r2, [pc, #492] @ (800cf80 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  29602. 800cd92: 430b orrs r3, r1
  29603. 800cd94: 6513 str r3, [r2, #80] @ 0x50
  29604. 800cd96: e003 b.n 800cda0 <HAL_RCCEx_PeriphCLKConfig+0x730>
  29605. }
  29606. else
  29607. {
  29608. /* set overall return value */
  29609. status = ret;
  29610. 800cd98: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29611. 800cd9c: f887 311e strb.w r3, [r7, #286] @ 0x11e
  29612. }
  29613. }
  29614. #endif /*FDCAN1 || FDCAN2*/
  29615. /*---------------------------- FMC configuration -------------------------------*/
  29616. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_FMC) == RCC_PERIPHCLK_FMC)
  29617. 800cda0: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29618. 800cda4: e9d3 2300 ldrd r2, r3, [r3]
  29619. 800cda8: f002 7380 and.w r3, r2, #16777216 @ 0x1000000
  29620. 800cdac: f8c7 30c8 str.w r3, [r7, #200] @ 0xc8
  29621. 800cdb0: 2300 movs r3, #0
  29622. 800cdb2: f8c7 30cc str.w r3, [r7, #204] @ 0xcc
  29623. 800cdb6: e9d7 1232 ldrd r1, r2, [r7, #200] @ 0xc8
  29624. 800cdba: 460b mov r3, r1
  29625. 800cdbc: 4313 orrs r3, r2
  29626. 800cdbe: d039 beq.n 800ce34 <HAL_RCCEx_PeriphCLKConfig+0x7c4>
  29627. {
  29628. switch (PeriphClkInit->FmcClockSelection)
  29629. 800cdc0: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29630. 800cdc4: 6c9b ldr r3, [r3, #72] @ 0x48
  29631. 800cdc6: 2b03 cmp r3, #3
  29632. 800cdc8: d81c bhi.n 800ce04 <HAL_RCCEx_PeriphCLKConfig+0x794>
  29633. 800cdca: a201 add r2, pc, #4 @ (adr r2, 800cdd0 <HAL_RCCEx_PeriphCLKConfig+0x760>)
  29634. 800cdcc: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  29635. 800cdd0: 0800ce0d .word 0x0800ce0d
  29636. 800cdd4: 0800cde1 .word 0x0800cde1
  29637. 800cdd8: 0800cdef .word 0x0800cdef
  29638. 800cddc: 0800ce0d .word 0x0800ce0d
  29639. {
  29640. case RCC_FMCCLKSOURCE_PLL: /* PLL is used as clock source for FMC*/
  29641. /* Enable FMC Clock output generated form System PLL . */
  29642. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  29643. 800cde0: 4b67 ldr r3, [pc, #412] @ (800cf80 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  29644. 800cde2: 6adb ldr r3, [r3, #44] @ 0x2c
  29645. 800cde4: 4a66 ldr r2, [pc, #408] @ (800cf80 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  29646. 800cde6: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  29647. 800cdea: 62d3 str r3, [r2, #44] @ 0x2c
  29648. /* FMC clock source configuration done later after clock selection check */
  29649. break;
  29650. 800cdec: e00f b.n 800ce0e <HAL_RCCEx_PeriphCLKConfig+0x79e>
  29651. case RCC_FMCCLKSOURCE_PLL2: /* PLL2 is used as clock source for FMC*/
  29652. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_R_UPDATE);
  29653. 800cdee: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29654. 800cdf2: 3308 adds r3, #8
  29655. 800cdf4: 2102 movs r1, #2
  29656. 800cdf6: 4618 mov r0, r3
  29657. 800cdf8: f001 ffb8 bl 800ed6c <RCCEx_PLL2_Config>
  29658. 800cdfc: 4603 mov r3, r0
  29659. 800cdfe: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29660. /* FMC clock source configuration done later after clock selection check */
  29661. break;
  29662. 800ce02: e004 b.n 800ce0e <HAL_RCCEx_PeriphCLKConfig+0x79e>
  29663. case RCC_FMCCLKSOURCE_HCLK:
  29664. /* D1/CD HCLK clock selected as FMC kernel peripheral clock */
  29665. break;
  29666. default:
  29667. ret = HAL_ERROR;
  29668. 800ce04: 2301 movs r3, #1
  29669. 800ce06: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29670. break;
  29671. 800ce0a: e000 b.n 800ce0e <HAL_RCCEx_PeriphCLKConfig+0x79e>
  29672. break;
  29673. 800ce0c: bf00 nop
  29674. }
  29675. if (ret == HAL_OK)
  29676. 800ce0e: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29677. 800ce12: 2b00 cmp r3, #0
  29678. 800ce14: d10a bne.n 800ce2c <HAL_RCCEx_PeriphCLKConfig+0x7bc>
  29679. {
  29680. /* Set the source of FMC clock*/
  29681. __HAL_RCC_FMC_CONFIG(PeriphClkInit->FmcClockSelection);
  29682. 800ce16: 4b5a ldr r3, [pc, #360] @ (800cf80 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  29683. 800ce18: 6cdb ldr r3, [r3, #76] @ 0x4c
  29684. 800ce1a: f023 0103 bic.w r1, r3, #3
  29685. 800ce1e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29686. 800ce22: 6c9b ldr r3, [r3, #72] @ 0x48
  29687. 800ce24: 4a56 ldr r2, [pc, #344] @ (800cf80 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  29688. 800ce26: 430b orrs r3, r1
  29689. 800ce28: 64d3 str r3, [r2, #76] @ 0x4c
  29690. 800ce2a: e003 b.n 800ce34 <HAL_RCCEx_PeriphCLKConfig+0x7c4>
  29691. }
  29692. else
  29693. {
  29694. /* set overall return value */
  29695. status = ret;
  29696. 800ce2c: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29697. 800ce30: f887 311e strb.w r3, [r7, #286] @ 0x11e
  29698. }
  29699. }
  29700. /*---------------------------- RTC configuration -------------------------------*/
  29701. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC)
  29702. 800ce34: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29703. 800ce38: e9d3 2300 ldrd r2, r3, [r3]
  29704. 800ce3c: f402 0380 and.w r3, r2, #4194304 @ 0x400000
  29705. 800ce40: f8c7 30c0 str.w r3, [r7, #192] @ 0xc0
  29706. 800ce44: 2300 movs r3, #0
  29707. 800ce46: f8c7 30c4 str.w r3, [r7, #196] @ 0xc4
  29708. 800ce4a: e9d7 1230 ldrd r1, r2, [r7, #192] @ 0xc0
  29709. 800ce4e: 460b mov r3, r1
  29710. 800ce50: 4313 orrs r3, r2
  29711. 800ce52: f000 809f beq.w 800cf94 <HAL_RCCEx_PeriphCLKConfig+0x924>
  29712. {
  29713. /* check for RTC Parameters used to output RTCCLK */
  29714. assert_param(IS_RCC_RTCCLKSOURCE(PeriphClkInit->RTCClockSelection));
  29715. /* Enable write access to Backup domain */
  29716. SET_BIT(PWR->CR1, PWR_CR1_DBP);
  29717. 800ce56: 4b4b ldr r3, [pc, #300] @ (800cf84 <HAL_RCCEx_PeriphCLKConfig+0x914>)
  29718. 800ce58: 681b ldr r3, [r3, #0]
  29719. 800ce5a: 4a4a ldr r2, [pc, #296] @ (800cf84 <HAL_RCCEx_PeriphCLKConfig+0x914>)
  29720. 800ce5c: f443 7380 orr.w r3, r3, #256 @ 0x100
  29721. 800ce60: 6013 str r3, [r2, #0]
  29722. /* Wait for Backup domain Write protection disable */
  29723. tickstart = HAL_GetTick();
  29724. 800ce62: f7f8 fea5 bl 8005bb0 <HAL_GetTick>
  29725. 800ce66: f8c7 0118 str.w r0, [r7, #280] @ 0x118
  29726. while ((PWR->CR1 & PWR_CR1_DBP) == 0U)
  29727. 800ce6a: e00b b.n 800ce84 <HAL_RCCEx_PeriphCLKConfig+0x814>
  29728. {
  29729. if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE)
  29730. 800ce6c: f7f8 fea0 bl 8005bb0 <HAL_GetTick>
  29731. 800ce70: 4602 mov r2, r0
  29732. 800ce72: f8d7 3118 ldr.w r3, [r7, #280] @ 0x118
  29733. 800ce76: 1ad3 subs r3, r2, r3
  29734. 800ce78: 2b64 cmp r3, #100 @ 0x64
  29735. 800ce7a: d903 bls.n 800ce84 <HAL_RCCEx_PeriphCLKConfig+0x814>
  29736. {
  29737. ret = HAL_TIMEOUT;
  29738. 800ce7c: 2303 movs r3, #3
  29739. 800ce7e: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29740. break;
  29741. 800ce82: e005 b.n 800ce90 <HAL_RCCEx_PeriphCLKConfig+0x820>
  29742. while ((PWR->CR1 & PWR_CR1_DBP) == 0U)
  29743. 800ce84: 4b3f ldr r3, [pc, #252] @ (800cf84 <HAL_RCCEx_PeriphCLKConfig+0x914>)
  29744. 800ce86: 681b ldr r3, [r3, #0]
  29745. 800ce88: f403 7380 and.w r3, r3, #256 @ 0x100
  29746. 800ce8c: 2b00 cmp r3, #0
  29747. 800ce8e: d0ed beq.n 800ce6c <HAL_RCCEx_PeriphCLKConfig+0x7fc>
  29748. }
  29749. }
  29750. if (ret == HAL_OK)
  29751. 800ce90: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29752. 800ce94: 2b00 cmp r3, #0
  29753. 800ce96: d179 bne.n 800cf8c <HAL_RCCEx_PeriphCLKConfig+0x91c>
  29754. {
  29755. /* Reset the Backup domain only if the RTC Clock source selection is modified */
  29756. if ((RCC->BDCR & RCC_BDCR_RTCSEL) != (PeriphClkInit->RTCClockSelection & RCC_BDCR_RTCSEL))
  29757. 800ce98: 4b39 ldr r3, [pc, #228] @ (800cf80 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  29758. 800ce9a: 6f1a ldr r2, [r3, #112] @ 0x70
  29759. 800ce9c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29760. 800cea0: f8d3 30b4 ldr.w r3, [r3, #180] @ 0xb4
  29761. 800cea4: 4053 eors r3, r2
  29762. 800cea6: f403 7340 and.w r3, r3, #768 @ 0x300
  29763. 800ceaa: 2b00 cmp r3, #0
  29764. 800ceac: d015 beq.n 800ceda <HAL_RCCEx_PeriphCLKConfig+0x86a>
  29765. {
  29766. /* Store the content of BDCR register before the reset of Backup Domain */
  29767. tmpreg = (RCC->BDCR & ~(RCC_BDCR_RTCSEL));
  29768. 800ceae: 4b34 ldr r3, [pc, #208] @ (800cf80 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  29769. 800ceb0: 6f1b ldr r3, [r3, #112] @ 0x70
  29770. 800ceb2: f423 7340 bic.w r3, r3, #768 @ 0x300
  29771. 800ceb6: f8c7 3114 str.w r3, [r7, #276] @ 0x114
  29772. /* RTC Clock selection can be changed only if the Backup Domain is reset */
  29773. __HAL_RCC_BACKUPRESET_FORCE();
  29774. 800ceba: 4b31 ldr r3, [pc, #196] @ (800cf80 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  29775. 800cebc: 6f1b ldr r3, [r3, #112] @ 0x70
  29776. 800cebe: 4a30 ldr r2, [pc, #192] @ (800cf80 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  29777. 800cec0: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  29778. 800cec4: 6713 str r3, [r2, #112] @ 0x70
  29779. __HAL_RCC_BACKUPRESET_RELEASE();
  29780. 800cec6: 4b2e ldr r3, [pc, #184] @ (800cf80 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  29781. 800cec8: 6f1b ldr r3, [r3, #112] @ 0x70
  29782. 800ceca: 4a2d ldr r2, [pc, #180] @ (800cf80 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  29783. 800cecc: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  29784. 800ced0: 6713 str r3, [r2, #112] @ 0x70
  29785. /* Restore the Content of BDCR register */
  29786. RCC->BDCR = tmpreg;
  29787. 800ced2: 4a2b ldr r2, [pc, #172] @ (800cf80 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  29788. 800ced4: f8d7 3114 ldr.w r3, [r7, #276] @ 0x114
  29789. 800ced8: 6713 str r3, [r2, #112] @ 0x70
  29790. }
  29791. /* If LSE is selected as RTC clock source (and enabled prior to Backup Domain reset), wait for LSE reactivation */
  29792. if (PeriphClkInit->RTCClockSelection == RCC_RTCCLKSOURCE_LSE)
  29793. 800ceda: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29794. 800cede: f8d3 30b4 ldr.w r3, [r3, #180] @ 0xb4
  29795. 800cee2: f5b3 7f80 cmp.w r3, #256 @ 0x100
  29796. 800cee6: d118 bne.n 800cf1a <HAL_RCCEx_PeriphCLKConfig+0x8aa>
  29797. {
  29798. /* Get Start Tick*/
  29799. tickstart = HAL_GetTick();
  29800. 800cee8: f7f8 fe62 bl 8005bb0 <HAL_GetTick>
  29801. 800ceec: f8c7 0118 str.w r0, [r7, #280] @ 0x118
  29802. /* Wait till LSE is ready */
  29803. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == 0U)
  29804. 800cef0: e00d b.n 800cf0e <HAL_RCCEx_PeriphCLKConfig+0x89e>
  29805. {
  29806. if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
  29807. 800cef2: f7f8 fe5d bl 8005bb0 <HAL_GetTick>
  29808. 800cef6: 4602 mov r2, r0
  29809. 800cef8: f8d7 3118 ldr.w r3, [r7, #280] @ 0x118
  29810. 800cefc: 1ad2 subs r2, r2, r3
  29811. 800cefe: f241 3388 movw r3, #5000 @ 0x1388
  29812. 800cf02: 429a cmp r2, r3
  29813. 800cf04: d903 bls.n 800cf0e <HAL_RCCEx_PeriphCLKConfig+0x89e>
  29814. {
  29815. ret = HAL_TIMEOUT;
  29816. 800cf06: 2303 movs r3, #3
  29817. 800cf08: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29818. break;
  29819. 800cf0c: e005 b.n 800cf1a <HAL_RCCEx_PeriphCLKConfig+0x8aa>
  29820. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == 0U)
  29821. 800cf0e: 4b1c ldr r3, [pc, #112] @ (800cf80 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  29822. 800cf10: 6f1b ldr r3, [r3, #112] @ 0x70
  29823. 800cf12: f003 0302 and.w r3, r3, #2
  29824. 800cf16: 2b00 cmp r3, #0
  29825. 800cf18: d0eb beq.n 800cef2 <HAL_RCCEx_PeriphCLKConfig+0x882>
  29826. }
  29827. }
  29828. }
  29829. if (ret == HAL_OK)
  29830. 800cf1a: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29831. 800cf1e: 2b00 cmp r3, #0
  29832. 800cf20: d129 bne.n 800cf76 <HAL_RCCEx_PeriphCLKConfig+0x906>
  29833. {
  29834. __HAL_RCC_RTC_CONFIG(PeriphClkInit->RTCClockSelection);
  29835. 800cf22: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29836. 800cf26: f8d3 30b4 ldr.w r3, [r3, #180] @ 0xb4
  29837. 800cf2a: f403 7340 and.w r3, r3, #768 @ 0x300
  29838. 800cf2e: f5b3 7f40 cmp.w r3, #768 @ 0x300
  29839. 800cf32: d10e bne.n 800cf52 <HAL_RCCEx_PeriphCLKConfig+0x8e2>
  29840. 800cf34: 4b12 ldr r3, [pc, #72] @ (800cf80 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  29841. 800cf36: 691b ldr r3, [r3, #16]
  29842. 800cf38: f423 517c bic.w r1, r3, #16128 @ 0x3f00
  29843. 800cf3c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29844. 800cf40: f8d3 30b4 ldr.w r3, [r3, #180] @ 0xb4
  29845. 800cf44: 091a lsrs r2, r3, #4
  29846. 800cf46: 4b10 ldr r3, [pc, #64] @ (800cf88 <HAL_RCCEx_PeriphCLKConfig+0x918>)
  29847. 800cf48: 4013 ands r3, r2
  29848. 800cf4a: 4a0d ldr r2, [pc, #52] @ (800cf80 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  29849. 800cf4c: 430b orrs r3, r1
  29850. 800cf4e: 6113 str r3, [r2, #16]
  29851. 800cf50: e005 b.n 800cf5e <HAL_RCCEx_PeriphCLKConfig+0x8ee>
  29852. 800cf52: 4b0b ldr r3, [pc, #44] @ (800cf80 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  29853. 800cf54: 691b ldr r3, [r3, #16]
  29854. 800cf56: 4a0a ldr r2, [pc, #40] @ (800cf80 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  29855. 800cf58: f423 537c bic.w r3, r3, #16128 @ 0x3f00
  29856. 800cf5c: 6113 str r3, [r2, #16]
  29857. 800cf5e: 4b08 ldr r3, [pc, #32] @ (800cf80 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  29858. 800cf60: 6f19 ldr r1, [r3, #112] @ 0x70
  29859. 800cf62: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29860. 800cf66: f8d3 30b4 ldr.w r3, [r3, #180] @ 0xb4
  29861. 800cf6a: f3c3 030b ubfx r3, r3, #0, #12
  29862. 800cf6e: 4a04 ldr r2, [pc, #16] @ (800cf80 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  29863. 800cf70: 430b orrs r3, r1
  29864. 800cf72: 6713 str r3, [r2, #112] @ 0x70
  29865. 800cf74: e00e b.n 800cf94 <HAL_RCCEx_PeriphCLKConfig+0x924>
  29866. }
  29867. else
  29868. {
  29869. /* set overall return value */
  29870. status = ret;
  29871. 800cf76: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29872. 800cf7a: f887 311e strb.w r3, [r7, #286] @ 0x11e
  29873. 800cf7e: e009 b.n 800cf94 <HAL_RCCEx_PeriphCLKConfig+0x924>
  29874. 800cf80: 58024400 .word 0x58024400
  29875. 800cf84: 58024800 .word 0x58024800
  29876. 800cf88: 00ffffcf .word 0x00ffffcf
  29877. }
  29878. }
  29879. else
  29880. {
  29881. /* set overall return value */
  29882. status = ret;
  29883. 800cf8c: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29884. 800cf90: f887 311e strb.w r3, [r7, #286] @ 0x11e
  29885. }
  29886. }
  29887. /*-------------------------- USART1/6 configuration --------------------------*/
  29888. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USART16) == RCC_PERIPHCLK_USART16)
  29889. 800cf94: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29890. 800cf98: e9d3 2300 ldrd r2, r3, [r3]
  29891. 800cf9c: f002 0301 and.w r3, r2, #1
  29892. 800cfa0: f8c7 30b8 str.w r3, [r7, #184] @ 0xb8
  29893. 800cfa4: 2300 movs r3, #0
  29894. 800cfa6: f8c7 30bc str.w r3, [r7, #188] @ 0xbc
  29895. 800cfaa: e9d7 122e ldrd r1, r2, [r7, #184] @ 0xb8
  29896. 800cfae: 460b mov r3, r1
  29897. 800cfb0: 4313 orrs r3, r2
  29898. 800cfb2: f000 8089 beq.w 800d0c8 <HAL_RCCEx_PeriphCLKConfig+0xa58>
  29899. {
  29900. switch (PeriphClkInit->Usart16ClockSelection)
  29901. 800cfb6: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29902. 800cfba: 6fdb ldr r3, [r3, #124] @ 0x7c
  29903. 800cfbc: 2b28 cmp r3, #40 @ 0x28
  29904. 800cfbe: d86b bhi.n 800d098 <HAL_RCCEx_PeriphCLKConfig+0xa28>
  29905. 800cfc0: a201 add r2, pc, #4 @ (adr r2, 800cfc8 <HAL_RCCEx_PeriphCLKConfig+0x958>)
  29906. 800cfc2: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  29907. 800cfc6: bf00 nop
  29908. 800cfc8: 0800d0a1 .word 0x0800d0a1
  29909. 800cfcc: 0800d099 .word 0x0800d099
  29910. 800cfd0: 0800d099 .word 0x0800d099
  29911. 800cfd4: 0800d099 .word 0x0800d099
  29912. 800cfd8: 0800d099 .word 0x0800d099
  29913. 800cfdc: 0800d099 .word 0x0800d099
  29914. 800cfe0: 0800d099 .word 0x0800d099
  29915. 800cfe4: 0800d099 .word 0x0800d099
  29916. 800cfe8: 0800d06d .word 0x0800d06d
  29917. 800cfec: 0800d099 .word 0x0800d099
  29918. 800cff0: 0800d099 .word 0x0800d099
  29919. 800cff4: 0800d099 .word 0x0800d099
  29920. 800cff8: 0800d099 .word 0x0800d099
  29921. 800cffc: 0800d099 .word 0x0800d099
  29922. 800d000: 0800d099 .word 0x0800d099
  29923. 800d004: 0800d099 .word 0x0800d099
  29924. 800d008: 0800d083 .word 0x0800d083
  29925. 800d00c: 0800d099 .word 0x0800d099
  29926. 800d010: 0800d099 .word 0x0800d099
  29927. 800d014: 0800d099 .word 0x0800d099
  29928. 800d018: 0800d099 .word 0x0800d099
  29929. 800d01c: 0800d099 .word 0x0800d099
  29930. 800d020: 0800d099 .word 0x0800d099
  29931. 800d024: 0800d099 .word 0x0800d099
  29932. 800d028: 0800d0a1 .word 0x0800d0a1
  29933. 800d02c: 0800d099 .word 0x0800d099
  29934. 800d030: 0800d099 .word 0x0800d099
  29935. 800d034: 0800d099 .word 0x0800d099
  29936. 800d038: 0800d099 .word 0x0800d099
  29937. 800d03c: 0800d099 .word 0x0800d099
  29938. 800d040: 0800d099 .word 0x0800d099
  29939. 800d044: 0800d099 .word 0x0800d099
  29940. 800d048: 0800d0a1 .word 0x0800d0a1
  29941. 800d04c: 0800d099 .word 0x0800d099
  29942. 800d050: 0800d099 .word 0x0800d099
  29943. 800d054: 0800d099 .word 0x0800d099
  29944. 800d058: 0800d099 .word 0x0800d099
  29945. 800d05c: 0800d099 .word 0x0800d099
  29946. 800d060: 0800d099 .word 0x0800d099
  29947. 800d064: 0800d099 .word 0x0800d099
  29948. 800d068: 0800d0a1 .word 0x0800d0a1
  29949. case RCC_USART16CLKSOURCE_PCLK2: /* CD/D2 PCLK2 as clock source for USART1/6 */
  29950. /* USART1/6 clock source configuration done later after clock selection check */
  29951. break;
  29952. case RCC_USART16CLKSOURCE_PLL2: /* PLL2 is used as clock source for USART1/6 */
  29953. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
  29954. 800d06c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29955. 800d070: 3308 adds r3, #8
  29956. 800d072: 2101 movs r1, #1
  29957. 800d074: 4618 mov r0, r3
  29958. 800d076: f001 fe79 bl 800ed6c <RCCEx_PLL2_Config>
  29959. 800d07a: 4603 mov r3, r0
  29960. 800d07c: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29961. /* USART1/6 clock source configuration done later after clock selection check */
  29962. break;
  29963. 800d080: e00f b.n 800d0a2 <HAL_RCCEx_PeriphCLKConfig+0xa32>
  29964. case RCC_USART16CLKSOURCE_PLL3: /* PLL3 is used as clock source for USART1/6 */
  29965. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
  29966. 800d082: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29967. 800d086: 3328 adds r3, #40 @ 0x28
  29968. 800d088: 2101 movs r1, #1
  29969. 800d08a: 4618 mov r0, r3
  29970. 800d08c: f001 ff20 bl 800eed0 <RCCEx_PLL3_Config>
  29971. 800d090: 4603 mov r3, r0
  29972. 800d092: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29973. /* USART1/6 clock source configuration done later after clock selection check */
  29974. break;
  29975. 800d096: e004 b.n 800d0a2 <HAL_RCCEx_PeriphCLKConfig+0xa32>
  29976. /* LSE, oscillator is used as source of USART1/6 clock */
  29977. /* USART1/6 clock source configuration done later after clock selection check */
  29978. break;
  29979. default:
  29980. ret = HAL_ERROR;
  29981. 800d098: 2301 movs r3, #1
  29982. 800d09a: f887 311f strb.w r3, [r7, #287] @ 0x11f
  29983. break;
  29984. 800d09e: e000 b.n 800d0a2 <HAL_RCCEx_PeriphCLKConfig+0xa32>
  29985. break;
  29986. 800d0a0: bf00 nop
  29987. }
  29988. if (ret == HAL_OK)
  29989. 800d0a2: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  29990. 800d0a6: 2b00 cmp r3, #0
  29991. 800d0a8: d10a bne.n 800d0c0 <HAL_RCCEx_PeriphCLKConfig+0xa50>
  29992. {
  29993. /* Set the source of USART1/6 clock */
  29994. __HAL_RCC_USART16_CONFIG(PeriphClkInit->Usart16ClockSelection);
  29995. 800d0aa: 4bbf ldr r3, [pc, #764] @ (800d3a8 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  29996. 800d0ac: 6d5b ldr r3, [r3, #84] @ 0x54
  29997. 800d0ae: f023 0138 bic.w r1, r3, #56 @ 0x38
  29998. 800d0b2: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  29999. 800d0b6: 6fdb ldr r3, [r3, #124] @ 0x7c
  30000. 800d0b8: 4abb ldr r2, [pc, #748] @ (800d3a8 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  30001. 800d0ba: 430b orrs r3, r1
  30002. 800d0bc: 6553 str r3, [r2, #84] @ 0x54
  30003. 800d0be: e003 b.n 800d0c8 <HAL_RCCEx_PeriphCLKConfig+0xa58>
  30004. }
  30005. else
  30006. {
  30007. /* set overall return value */
  30008. status = ret;
  30009. 800d0c0: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  30010. 800d0c4: f887 311e strb.w r3, [r7, #286] @ 0x11e
  30011. }
  30012. }
  30013. /*-------------------------- USART2/3/4/5/7/8 Configuration --------------------------*/
  30014. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USART234578) == RCC_PERIPHCLK_USART234578)
  30015. 800d0c8: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30016. 800d0cc: e9d3 2300 ldrd r2, r3, [r3]
  30017. 800d0d0: f002 0302 and.w r3, r2, #2
  30018. 800d0d4: f8c7 30b0 str.w r3, [r7, #176] @ 0xb0
  30019. 800d0d8: 2300 movs r3, #0
  30020. 800d0da: f8c7 30b4 str.w r3, [r7, #180] @ 0xb4
  30021. 800d0de: e9d7 122c ldrd r1, r2, [r7, #176] @ 0xb0
  30022. 800d0e2: 460b mov r3, r1
  30023. 800d0e4: 4313 orrs r3, r2
  30024. 800d0e6: d041 beq.n 800d16c <HAL_RCCEx_PeriphCLKConfig+0xafc>
  30025. {
  30026. switch (PeriphClkInit->Usart234578ClockSelection)
  30027. 800d0e8: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30028. 800d0ec: 6f9b ldr r3, [r3, #120] @ 0x78
  30029. 800d0ee: 2b05 cmp r3, #5
  30030. 800d0f0: d824 bhi.n 800d13c <HAL_RCCEx_PeriphCLKConfig+0xacc>
  30031. 800d0f2: a201 add r2, pc, #4 @ (adr r2, 800d0f8 <HAL_RCCEx_PeriphCLKConfig+0xa88>)
  30032. 800d0f4: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  30033. 800d0f8: 0800d145 .word 0x0800d145
  30034. 800d0fc: 0800d111 .word 0x0800d111
  30035. 800d100: 0800d127 .word 0x0800d127
  30036. 800d104: 0800d145 .word 0x0800d145
  30037. 800d108: 0800d145 .word 0x0800d145
  30038. 800d10c: 0800d145 .word 0x0800d145
  30039. case RCC_USART234578CLKSOURCE_PCLK1: /* CD/D2 PCLK1 as clock source for USART2/3/4/5/7/8 */
  30040. /* USART2/3/4/5/7/8 clock source configuration done later after clock selection check */
  30041. break;
  30042. case RCC_USART234578CLKSOURCE_PLL2: /* PLL2 is used as clock source for USART2/3/4/5/7/8 */
  30043. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
  30044. 800d110: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30045. 800d114: 3308 adds r3, #8
  30046. 800d116: 2101 movs r1, #1
  30047. 800d118: 4618 mov r0, r3
  30048. 800d11a: f001 fe27 bl 800ed6c <RCCEx_PLL2_Config>
  30049. 800d11e: 4603 mov r3, r0
  30050. 800d120: f887 311f strb.w r3, [r7, #287] @ 0x11f
  30051. /* USART2/3/4/5/7/8 clock source configuration done later after clock selection check */
  30052. break;
  30053. 800d124: e00f b.n 800d146 <HAL_RCCEx_PeriphCLKConfig+0xad6>
  30054. case RCC_USART234578CLKSOURCE_PLL3: /* PLL3 is used as clock source for USART2/3/4/5/7/8 */
  30055. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
  30056. 800d126: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30057. 800d12a: 3328 adds r3, #40 @ 0x28
  30058. 800d12c: 2101 movs r1, #1
  30059. 800d12e: 4618 mov r0, r3
  30060. 800d130: f001 fece bl 800eed0 <RCCEx_PLL3_Config>
  30061. 800d134: 4603 mov r3, r0
  30062. 800d136: f887 311f strb.w r3, [r7, #287] @ 0x11f
  30063. /* USART2/3/4/5/7/8 clock source configuration done later after clock selection check */
  30064. break;
  30065. 800d13a: e004 b.n 800d146 <HAL_RCCEx_PeriphCLKConfig+0xad6>
  30066. /* LSE, oscillator is used as source of USART2/3/4/5/7/8 clock */
  30067. /* USART2/3/4/5/7/8 clock source configuration done later after clock selection check */
  30068. break;
  30069. default:
  30070. ret = HAL_ERROR;
  30071. 800d13c: 2301 movs r3, #1
  30072. 800d13e: f887 311f strb.w r3, [r7, #287] @ 0x11f
  30073. break;
  30074. 800d142: e000 b.n 800d146 <HAL_RCCEx_PeriphCLKConfig+0xad6>
  30075. break;
  30076. 800d144: bf00 nop
  30077. }
  30078. if (ret == HAL_OK)
  30079. 800d146: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  30080. 800d14a: 2b00 cmp r3, #0
  30081. 800d14c: d10a bne.n 800d164 <HAL_RCCEx_PeriphCLKConfig+0xaf4>
  30082. {
  30083. /* Set the source of USART2/3/4/5/7/8 clock */
  30084. __HAL_RCC_USART234578_CONFIG(PeriphClkInit->Usart234578ClockSelection);
  30085. 800d14e: 4b96 ldr r3, [pc, #600] @ (800d3a8 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  30086. 800d150: 6d5b ldr r3, [r3, #84] @ 0x54
  30087. 800d152: f023 0107 bic.w r1, r3, #7
  30088. 800d156: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30089. 800d15a: 6f9b ldr r3, [r3, #120] @ 0x78
  30090. 800d15c: 4a92 ldr r2, [pc, #584] @ (800d3a8 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  30091. 800d15e: 430b orrs r3, r1
  30092. 800d160: 6553 str r3, [r2, #84] @ 0x54
  30093. 800d162: e003 b.n 800d16c <HAL_RCCEx_PeriphCLKConfig+0xafc>
  30094. }
  30095. else
  30096. {
  30097. /* set overall return value */
  30098. status = ret;
  30099. 800d164: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  30100. 800d168: f887 311e strb.w r3, [r7, #286] @ 0x11e
  30101. }
  30102. }
  30103. /*-------------------------- LPUART1 Configuration -------------------------*/
  30104. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPUART1) == RCC_PERIPHCLK_LPUART1)
  30105. 800d16c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30106. 800d170: e9d3 2300 ldrd r2, r3, [r3]
  30107. 800d174: f002 0304 and.w r3, r2, #4
  30108. 800d178: f8c7 30a8 str.w r3, [r7, #168] @ 0xa8
  30109. 800d17c: 2300 movs r3, #0
  30110. 800d17e: f8c7 30ac str.w r3, [r7, #172] @ 0xac
  30111. 800d182: e9d7 122a ldrd r1, r2, [r7, #168] @ 0xa8
  30112. 800d186: 460b mov r3, r1
  30113. 800d188: 4313 orrs r3, r2
  30114. 800d18a: d044 beq.n 800d216 <HAL_RCCEx_PeriphCLKConfig+0xba6>
  30115. {
  30116. switch (PeriphClkInit->Lpuart1ClockSelection)
  30117. 800d18c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30118. 800d190: f8d3 3094 ldr.w r3, [r3, #148] @ 0x94
  30119. 800d194: 2b05 cmp r3, #5
  30120. 800d196: d825 bhi.n 800d1e4 <HAL_RCCEx_PeriphCLKConfig+0xb74>
  30121. 800d198: a201 add r2, pc, #4 @ (adr r2, 800d1a0 <HAL_RCCEx_PeriphCLKConfig+0xb30>)
  30122. 800d19a: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  30123. 800d19e: bf00 nop
  30124. 800d1a0: 0800d1ed .word 0x0800d1ed
  30125. 800d1a4: 0800d1b9 .word 0x0800d1b9
  30126. 800d1a8: 0800d1cf .word 0x0800d1cf
  30127. 800d1ac: 0800d1ed .word 0x0800d1ed
  30128. 800d1b0: 0800d1ed .word 0x0800d1ed
  30129. 800d1b4: 0800d1ed .word 0x0800d1ed
  30130. case RCC_LPUART1CLKSOURCE_PCLK4: /* SRD/D3 PCLK1 (PCLK4) as clock source for LPUART1 */
  30131. /* LPUART1 clock source configuration done later after clock selection check */
  30132. break;
  30133. case RCC_LPUART1CLKSOURCE_PLL2: /* PLL2 is used as clock source for LPUART1 */
  30134. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
  30135. 800d1b8: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30136. 800d1bc: 3308 adds r3, #8
  30137. 800d1be: 2101 movs r1, #1
  30138. 800d1c0: 4618 mov r0, r3
  30139. 800d1c2: f001 fdd3 bl 800ed6c <RCCEx_PLL2_Config>
  30140. 800d1c6: 4603 mov r3, r0
  30141. 800d1c8: f887 311f strb.w r3, [r7, #287] @ 0x11f
  30142. /* LPUART1 clock source configuration done later after clock selection check */
  30143. break;
  30144. 800d1cc: e00f b.n 800d1ee <HAL_RCCEx_PeriphCLKConfig+0xb7e>
  30145. case RCC_LPUART1CLKSOURCE_PLL3: /* PLL3 is used as clock source for LPUART1 */
  30146. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
  30147. 800d1ce: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30148. 800d1d2: 3328 adds r3, #40 @ 0x28
  30149. 800d1d4: 2101 movs r1, #1
  30150. 800d1d6: 4618 mov r0, r3
  30151. 800d1d8: f001 fe7a bl 800eed0 <RCCEx_PLL3_Config>
  30152. 800d1dc: 4603 mov r3, r0
  30153. 800d1de: f887 311f strb.w r3, [r7, #287] @ 0x11f
  30154. /* LPUART1 clock source configuration done later after clock selection check */
  30155. break;
  30156. 800d1e2: e004 b.n 800d1ee <HAL_RCCEx_PeriphCLKConfig+0xb7e>
  30157. /* LSE, oscillator is used as source of LPUART1 clock */
  30158. /* LPUART1 clock source configuration done later after clock selection check */
  30159. break;
  30160. default:
  30161. ret = HAL_ERROR;
  30162. 800d1e4: 2301 movs r3, #1
  30163. 800d1e6: f887 311f strb.w r3, [r7, #287] @ 0x11f
  30164. break;
  30165. 800d1ea: e000 b.n 800d1ee <HAL_RCCEx_PeriphCLKConfig+0xb7e>
  30166. break;
  30167. 800d1ec: bf00 nop
  30168. }
  30169. if (ret == HAL_OK)
  30170. 800d1ee: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  30171. 800d1f2: 2b00 cmp r3, #0
  30172. 800d1f4: d10b bne.n 800d20e <HAL_RCCEx_PeriphCLKConfig+0xb9e>
  30173. {
  30174. /* Set the source of LPUART1 clock */
  30175. __HAL_RCC_LPUART1_CONFIG(PeriphClkInit->Lpuart1ClockSelection);
  30176. 800d1f6: 4b6c ldr r3, [pc, #432] @ (800d3a8 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  30177. 800d1f8: 6d9b ldr r3, [r3, #88] @ 0x58
  30178. 800d1fa: f023 0107 bic.w r1, r3, #7
  30179. 800d1fe: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30180. 800d202: f8d3 3094 ldr.w r3, [r3, #148] @ 0x94
  30181. 800d206: 4a68 ldr r2, [pc, #416] @ (800d3a8 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  30182. 800d208: 430b orrs r3, r1
  30183. 800d20a: 6593 str r3, [r2, #88] @ 0x58
  30184. 800d20c: e003 b.n 800d216 <HAL_RCCEx_PeriphCLKConfig+0xba6>
  30185. }
  30186. else
  30187. {
  30188. /* set overall return value */
  30189. status = ret;
  30190. 800d20e: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  30191. 800d212: f887 311e strb.w r3, [r7, #286] @ 0x11e
  30192. }
  30193. }
  30194. /*---------------------------- LPTIM1 configuration -------------------------------*/
  30195. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPTIM1) == RCC_PERIPHCLK_LPTIM1)
  30196. 800d216: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30197. 800d21a: e9d3 2300 ldrd r2, r3, [r3]
  30198. 800d21e: f002 0320 and.w r3, r2, #32
  30199. 800d222: f8c7 30a0 str.w r3, [r7, #160] @ 0xa0
  30200. 800d226: 2300 movs r3, #0
  30201. 800d228: f8c7 30a4 str.w r3, [r7, #164] @ 0xa4
  30202. 800d22c: e9d7 1228 ldrd r1, r2, [r7, #160] @ 0xa0
  30203. 800d230: 460b mov r3, r1
  30204. 800d232: 4313 orrs r3, r2
  30205. 800d234: d055 beq.n 800d2e2 <HAL_RCCEx_PeriphCLKConfig+0xc72>
  30206. {
  30207. switch (PeriphClkInit->Lptim1ClockSelection)
  30208. 800d236: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30209. 800d23a: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  30210. 800d23e: f1b3 4fa0 cmp.w r3, #1342177280 @ 0x50000000
  30211. 800d242: d033 beq.n 800d2ac <HAL_RCCEx_PeriphCLKConfig+0xc3c>
  30212. 800d244: f1b3 4fa0 cmp.w r3, #1342177280 @ 0x50000000
  30213. 800d248: d82c bhi.n 800d2a4 <HAL_RCCEx_PeriphCLKConfig+0xc34>
  30214. 800d24a: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  30215. 800d24e: d02f beq.n 800d2b0 <HAL_RCCEx_PeriphCLKConfig+0xc40>
  30216. 800d250: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  30217. 800d254: d826 bhi.n 800d2a4 <HAL_RCCEx_PeriphCLKConfig+0xc34>
  30218. 800d256: f1b3 5f40 cmp.w r3, #805306368 @ 0x30000000
  30219. 800d25a: d02b beq.n 800d2b4 <HAL_RCCEx_PeriphCLKConfig+0xc44>
  30220. 800d25c: f1b3 5f40 cmp.w r3, #805306368 @ 0x30000000
  30221. 800d260: d820 bhi.n 800d2a4 <HAL_RCCEx_PeriphCLKConfig+0xc34>
  30222. 800d262: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  30223. 800d266: d012 beq.n 800d28e <HAL_RCCEx_PeriphCLKConfig+0xc1e>
  30224. 800d268: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  30225. 800d26c: d81a bhi.n 800d2a4 <HAL_RCCEx_PeriphCLKConfig+0xc34>
  30226. 800d26e: 2b00 cmp r3, #0
  30227. 800d270: d022 beq.n 800d2b8 <HAL_RCCEx_PeriphCLKConfig+0xc48>
  30228. 800d272: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  30229. 800d276: d115 bne.n 800d2a4 <HAL_RCCEx_PeriphCLKConfig+0xc34>
  30230. /* LPTIM1 clock source configuration done later after clock selection check */
  30231. break;
  30232. case RCC_LPTIM1CLKSOURCE_PLL2: /* PLL2 is used as clock source for LPTIM1*/
  30233. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  30234. 800d278: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30235. 800d27c: 3308 adds r3, #8
  30236. 800d27e: 2100 movs r1, #0
  30237. 800d280: 4618 mov r0, r3
  30238. 800d282: f001 fd73 bl 800ed6c <RCCEx_PLL2_Config>
  30239. 800d286: 4603 mov r3, r0
  30240. 800d288: f887 311f strb.w r3, [r7, #287] @ 0x11f
  30241. /* LPTIM1 clock source configuration done later after clock selection check */
  30242. break;
  30243. 800d28c: e015 b.n 800d2ba <HAL_RCCEx_PeriphCLKConfig+0xc4a>
  30244. case RCC_LPTIM1CLKSOURCE_PLL3: /* PLL3 is used as clock source for LPTIM1*/
  30245. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE);
  30246. 800d28e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30247. 800d292: 3328 adds r3, #40 @ 0x28
  30248. 800d294: 2102 movs r1, #2
  30249. 800d296: 4618 mov r0, r3
  30250. 800d298: f001 fe1a bl 800eed0 <RCCEx_PLL3_Config>
  30251. 800d29c: 4603 mov r3, r0
  30252. 800d29e: f887 311f strb.w r3, [r7, #287] @ 0x11f
  30253. /* LPTIM1 clock source configuration done later after clock selection check */
  30254. break;
  30255. 800d2a2: e00a b.n 800d2ba <HAL_RCCEx_PeriphCLKConfig+0xc4a>
  30256. /* HSI, HSE, or CSI oscillator is used as source of LPTIM1 clock */
  30257. /* LPTIM1 clock source configuration done later after clock selection check */
  30258. break;
  30259. default:
  30260. ret = HAL_ERROR;
  30261. 800d2a4: 2301 movs r3, #1
  30262. 800d2a6: f887 311f strb.w r3, [r7, #287] @ 0x11f
  30263. break;
  30264. 800d2aa: e006 b.n 800d2ba <HAL_RCCEx_PeriphCLKConfig+0xc4a>
  30265. break;
  30266. 800d2ac: bf00 nop
  30267. 800d2ae: e004 b.n 800d2ba <HAL_RCCEx_PeriphCLKConfig+0xc4a>
  30268. break;
  30269. 800d2b0: bf00 nop
  30270. 800d2b2: e002 b.n 800d2ba <HAL_RCCEx_PeriphCLKConfig+0xc4a>
  30271. break;
  30272. 800d2b4: bf00 nop
  30273. 800d2b6: e000 b.n 800d2ba <HAL_RCCEx_PeriphCLKConfig+0xc4a>
  30274. break;
  30275. 800d2b8: bf00 nop
  30276. }
  30277. if (ret == HAL_OK)
  30278. 800d2ba: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  30279. 800d2be: 2b00 cmp r3, #0
  30280. 800d2c0: d10b bne.n 800d2da <HAL_RCCEx_PeriphCLKConfig+0xc6a>
  30281. {
  30282. /* Set the source of LPTIM1 clock*/
  30283. __HAL_RCC_LPTIM1_CONFIG(PeriphClkInit->Lptim1ClockSelection);
  30284. 800d2c2: 4b39 ldr r3, [pc, #228] @ (800d3a8 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  30285. 800d2c4: 6d5b ldr r3, [r3, #84] @ 0x54
  30286. 800d2c6: f023 41e0 bic.w r1, r3, #1879048192 @ 0x70000000
  30287. 800d2ca: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30288. 800d2ce: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  30289. 800d2d2: 4a35 ldr r2, [pc, #212] @ (800d3a8 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  30290. 800d2d4: 430b orrs r3, r1
  30291. 800d2d6: 6553 str r3, [r2, #84] @ 0x54
  30292. 800d2d8: e003 b.n 800d2e2 <HAL_RCCEx_PeriphCLKConfig+0xc72>
  30293. }
  30294. else
  30295. {
  30296. /* set overall return value */
  30297. status = ret;
  30298. 800d2da: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  30299. 800d2de: f887 311e strb.w r3, [r7, #286] @ 0x11e
  30300. }
  30301. }
  30302. /*---------------------------- LPTIM2 configuration -------------------------------*/
  30303. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPTIM2) == RCC_PERIPHCLK_LPTIM2)
  30304. 800d2e2: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30305. 800d2e6: e9d3 2300 ldrd r2, r3, [r3]
  30306. 800d2ea: f002 0340 and.w r3, r2, #64 @ 0x40
  30307. 800d2ee: f8c7 3098 str.w r3, [r7, #152] @ 0x98
  30308. 800d2f2: 2300 movs r3, #0
  30309. 800d2f4: f8c7 309c str.w r3, [r7, #156] @ 0x9c
  30310. 800d2f8: e9d7 1226 ldrd r1, r2, [r7, #152] @ 0x98
  30311. 800d2fc: 460b mov r3, r1
  30312. 800d2fe: 4313 orrs r3, r2
  30313. 800d300: d058 beq.n 800d3b4 <HAL_RCCEx_PeriphCLKConfig+0xd44>
  30314. {
  30315. switch (PeriphClkInit->Lptim2ClockSelection)
  30316. 800d302: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30317. 800d306: f8d3 309c ldr.w r3, [r3, #156] @ 0x9c
  30318. 800d30a: f5b3 5fa0 cmp.w r3, #5120 @ 0x1400
  30319. 800d30e: d033 beq.n 800d378 <HAL_RCCEx_PeriphCLKConfig+0xd08>
  30320. 800d310: f5b3 5fa0 cmp.w r3, #5120 @ 0x1400
  30321. 800d314: d82c bhi.n 800d370 <HAL_RCCEx_PeriphCLKConfig+0xd00>
  30322. 800d316: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  30323. 800d31a: d02f beq.n 800d37c <HAL_RCCEx_PeriphCLKConfig+0xd0c>
  30324. 800d31c: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  30325. 800d320: d826 bhi.n 800d370 <HAL_RCCEx_PeriphCLKConfig+0xd00>
  30326. 800d322: f5b3 6f40 cmp.w r3, #3072 @ 0xc00
  30327. 800d326: d02b beq.n 800d380 <HAL_RCCEx_PeriphCLKConfig+0xd10>
  30328. 800d328: f5b3 6f40 cmp.w r3, #3072 @ 0xc00
  30329. 800d32c: d820 bhi.n 800d370 <HAL_RCCEx_PeriphCLKConfig+0xd00>
  30330. 800d32e: f5b3 6f00 cmp.w r3, #2048 @ 0x800
  30331. 800d332: d012 beq.n 800d35a <HAL_RCCEx_PeriphCLKConfig+0xcea>
  30332. 800d334: f5b3 6f00 cmp.w r3, #2048 @ 0x800
  30333. 800d338: d81a bhi.n 800d370 <HAL_RCCEx_PeriphCLKConfig+0xd00>
  30334. 800d33a: 2b00 cmp r3, #0
  30335. 800d33c: d022 beq.n 800d384 <HAL_RCCEx_PeriphCLKConfig+0xd14>
  30336. 800d33e: f5b3 6f80 cmp.w r3, #1024 @ 0x400
  30337. 800d342: d115 bne.n 800d370 <HAL_RCCEx_PeriphCLKConfig+0xd00>
  30338. /* LPTIM2 clock source configuration done later after clock selection check */
  30339. break;
  30340. case RCC_LPTIM2CLKSOURCE_PLL2: /* PLL2 is used as clock source for LPTIM2*/
  30341. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  30342. 800d344: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30343. 800d348: 3308 adds r3, #8
  30344. 800d34a: 2100 movs r1, #0
  30345. 800d34c: 4618 mov r0, r3
  30346. 800d34e: f001 fd0d bl 800ed6c <RCCEx_PLL2_Config>
  30347. 800d352: 4603 mov r3, r0
  30348. 800d354: f887 311f strb.w r3, [r7, #287] @ 0x11f
  30349. /* LPTIM2 clock source configuration done later after clock selection check */
  30350. break;
  30351. 800d358: e015 b.n 800d386 <HAL_RCCEx_PeriphCLKConfig+0xd16>
  30352. case RCC_LPTIM2CLKSOURCE_PLL3: /* PLL3 is used as clock source for LPTIM2*/
  30353. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE);
  30354. 800d35a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30355. 800d35e: 3328 adds r3, #40 @ 0x28
  30356. 800d360: 2102 movs r1, #2
  30357. 800d362: 4618 mov r0, r3
  30358. 800d364: f001 fdb4 bl 800eed0 <RCCEx_PLL3_Config>
  30359. 800d368: 4603 mov r3, r0
  30360. 800d36a: f887 311f strb.w r3, [r7, #287] @ 0x11f
  30361. /* LPTIM2 clock source configuration done later after clock selection check */
  30362. break;
  30363. 800d36e: e00a b.n 800d386 <HAL_RCCEx_PeriphCLKConfig+0xd16>
  30364. /* HSI, HSE, or CSI oscillator is used as source of LPTIM2 clock */
  30365. /* LPTIM2 clock source configuration done later after clock selection check */
  30366. break;
  30367. default:
  30368. ret = HAL_ERROR;
  30369. 800d370: 2301 movs r3, #1
  30370. 800d372: f887 311f strb.w r3, [r7, #287] @ 0x11f
  30371. break;
  30372. 800d376: e006 b.n 800d386 <HAL_RCCEx_PeriphCLKConfig+0xd16>
  30373. break;
  30374. 800d378: bf00 nop
  30375. 800d37a: e004 b.n 800d386 <HAL_RCCEx_PeriphCLKConfig+0xd16>
  30376. break;
  30377. 800d37c: bf00 nop
  30378. 800d37e: e002 b.n 800d386 <HAL_RCCEx_PeriphCLKConfig+0xd16>
  30379. break;
  30380. 800d380: bf00 nop
  30381. 800d382: e000 b.n 800d386 <HAL_RCCEx_PeriphCLKConfig+0xd16>
  30382. break;
  30383. 800d384: bf00 nop
  30384. }
  30385. if (ret == HAL_OK)
  30386. 800d386: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  30387. 800d38a: 2b00 cmp r3, #0
  30388. 800d38c: d10e bne.n 800d3ac <HAL_RCCEx_PeriphCLKConfig+0xd3c>
  30389. {
  30390. /* Set the source of LPTIM2 clock*/
  30391. __HAL_RCC_LPTIM2_CONFIG(PeriphClkInit->Lptim2ClockSelection);
  30392. 800d38e: 4b06 ldr r3, [pc, #24] @ (800d3a8 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  30393. 800d390: 6d9b ldr r3, [r3, #88] @ 0x58
  30394. 800d392: f423 51e0 bic.w r1, r3, #7168 @ 0x1c00
  30395. 800d396: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30396. 800d39a: f8d3 309c ldr.w r3, [r3, #156] @ 0x9c
  30397. 800d39e: 4a02 ldr r2, [pc, #8] @ (800d3a8 <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  30398. 800d3a0: 430b orrs r3, r1
  30399. 800d3a2: 6593 str r3, [r2, #88] @ 0x58
  30400. 800d3a4: e006 b.n 800d3b4 <HAL_RCCEx_PeriphCLKConfig+0xd44>
  30401. 800d3a6: bf00 nop
  30402. 800d3a8: 58024400 .word 0x58024400
  30403. }
  30404. else
  30405. {
  30406. /* set overall return value */
  30407. status = ret;
  30408. 800d3ac: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  30409. 800d3b0: f887 311e strb.w r3, [r7, #286] @ 0x11e
  30410. }
  30411. }
  30412. /*---------------------------- LPTIM345 configuration -------------------------------*/
  30413. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPTIM345) == RCC_PERIPHCLK_LPTIM345)
  30414. 800d3b4: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30415. 800d3b8: e9d3 2300 ldrd r2, r3, [r3]
  30416. 800d3bc: f002 0380 and.w r3, r2, #128 @ 0x80
  30417. 800d3c0: f8c7 3090 str.w r3, [r7, #144] @ 0x90
  30418. 800d3c4: 2300 movs r3, #0
  30419. 800d3c6: f8c7 3094 str.w r3, [r7, #148] @ 0x94
  30420. 800d3ca: e9d7 1224 ldrd r1, r2, [r7, #144] @ 0x90
  30421. 800d3ce: 460b mov r3, r1
  30422. 800d3d0: 4313 orrs r3, r2
  30423. 800d3d2: d055 beq.n 800d480 <HAL_RCCEx_PeriphCLKConfig+0xe10>
  30424. {
  30425. switch (PeriphClkInit->Lptim345ClockSelection)
  30426. 800d3d4: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30427. 800d3d8: f8d3 30a0 ldr.w r3, [r3, #160] @ 0xa0
  30428. 800d3dc: f5b3 4f20 cmp.w r3, #40960 @ 0xa000
  30429. 800d3e0: d033 beq.n 800d44a <HAL_RCCEx_PeriphCLKConfig+0xdda>
  30430. 800d3e2: f5b3 4f20 cmp.w r3, #40960 @ 0xa000
  30431. 800d3e6: d82c bhi.n 800d442 <HAL_RCCEx_PeriphCLKConfig+0xdd2>
  30432. 800d3e8: f5b3 4f00 cmp.w r3, #32768 @ 0x8000
  30433. 800d3ec: d02f beq.n 800d44e <HAL_RCCEx_PeriphCLKConfig+0xdde>
  30434. 800d3ee: f5b3 4f00 cmp.w r3, #32768 @ 0x8000
  30435. 800d3f2: d826 bhi.n 800d442 <HAL_RCCEx_PeriphCLKConfig+0xdd2>
  30436. 800d3f4: f5b3 4fc0 cmp.w r3, #24576 @ 0x6000
  30437. 800d3f8: d02b beq.n 800d452 <HAL_RCCEx_PeriphCLKConfig+0xde2>
  30438. 800d3fa: f5b3 4fc0 cmp.w r3, #24576 @ 0x6000
  30439. 800d3fe: d820 bhi.n 800d442 <HAL_RCCEx_PeriphCLKConfig+0xdd2>
  30440. 800d400: f5b3 4f80 cmp.w r3, #16384 @ 0x4000
  30441. 800d404: d012 beq.n 800d42c <HAL_RCCEx_PeriphCLKConfig+0xdbc>
  30442. 800d406: f5b3 4f80 cmp.w r3, #16384 @ 0x4000
  30443. 800d40a: d81a bhi.n 800d442 <HAL_RCCEx_PeriphCLKConfig+0xdd2>
  30444. 800d40c: 2b00 cmp r3, #0
  30445. 800d40e: d022 beq.n 800d456 <HAL_RCCEx_PeriphCLKConfig+0xde6>
  30446. 800d410: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  30447. 800d414: d115 bne.n 800d442 <HAL_RCCEx_PeriphCLKConfig+0xdd2>
  30448. case RCC_LPTIM345CLKSOURCE_PCLK4: /* SRD/D3 PCLK1 (PCLK4) as clock source for LPTIM3/4/5 */
  30449. /* LPTIM3/4/5 clock source configuration done later after clock selection check */
  30450. break;
  30451. case RCC_LPTIM345CLKSOURCE_PLL2: /* PLL2 is used as clock source for LPTIM3/4/5 */
  30452. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  30453. 800d416: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30454. 800d41a: 3308 adds r3, #8
  30455. 800d41c: 2100 movs r1, #0
  30456. 800d41e: 4618 mov r0, r3
  30457. 800d420: f001 fca4 bl 800ed6c <RCCEx_PLL2_Config>
  30458. 800d424: 4603 mov r3, r0
  30459. 800d426: f887 311f strb.w r3, [r7, #287] @ 0x11f
  30460. /* LPTIM3/4/5 clock source configuration done later after clock selection check */
  30461. break;
  30462. 800d42a: e015 b.n 800d458 <HAL_RCCEx_PeriphCLKConfig+0xde8>
  30463. case RCC_LPTIM345CLKSOURCE_PLL3: /* PLL3 is used as clock source for LPTIM3/4/5 */
  30464. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE);
  30465. 800d42c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30466. 800d430: 3328 adds r3, #40 @ 0x28
  30467. 800d432: 2102 movs r1, #2
  30468. 800d434: 4618 mov r0, r3
  30469. 800d436: f001 fd4b bl 800eed0 <RCCEx_PLL3_Config>
  30470. 800d43a: 4603 mov r3, r0
  30471. 800d43c: f887 311f strb.w r3, [r7, #287] @ 0x11f
  30472. /* LPTIM3/4/5 clock source configuration done later after clock selection check */
  30473. break;
  30474. 800d440: e00a b.n 800d458 <HAL_RCCEx_PeriphCLKConfig+0xde8>
  30475. /* HSI, HSE, or CSI oscillator is used as source of LPTIM3/4/5 clock */
  30476. /* LPTIM3/4/5 clock source configuration done later after clock selection check */
  30477. break;
  30478. default:
  30479. ret = HAL_ERROR;
  30480. 800d442: 2301 movs r3, #1
  30481. 800d444: f887 311f strb.w r3, [r7, #287] @ 0x11f
  30482. break;
  30483. 800d448: e006 b.n 800d458 <HAL_RCCEx_PeriphCLKConfig+0xde8>
  30484. break;
  30485. 800d44a: bf00 nop
  30486. 800d44c: e004 b.n 800d458 <HAL_RCCEx_PeriphCLKConfig+0xde8>
  30487. break;
  30488. 800d44e: bf00 nop
  30489. 800d450: e002 b.n 800d458 <HAL_RCCEx_PeriphCLKConfig+0xde8>
  30490. break;
  30491. 800d452: bf00 nop
  30492. 800d454: e000 b.n 800d458 <HAL_RCCEx_PeriphCLKConfig+0xde8>
  30493. break;
  30494. 800d456: bf00 nop
  30495. }
  30496. if (ret == HAL_OK)
  30497. 800d458: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  30498. 800d45c: 2b00 cmp r3, #0
  30499. 800d45e: d10b bne.n 800d478 <HAL_RCCEx_PeriphCLKConfig+0xe08>
  30500. {
  30501. /* Set the source of LPTIM3/4/5 clock */
  30502. __HAL_RCC_LPTIM345_CONFIG(PeriphClkInit->Lptim345ClockSelection);
  30503. 800d460: 4bbb ldr r3, [pc, #748] @ (800d750 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  30504. 800d462: 6d9b ldr r3, [r3, #88] @ 0x58
  30505. 800d464: f423 4160 bic.w r1, r3, #57344 @ 0xe000
  30506. 800d468: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30507. 800d46c: f8d3 30a0 ldr.w r3, [r3, #160] @ 0xa0
  30508. 800d470: 4ab7 ldr r2, [pc, #732] @ (800d750 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  30509. 800d472: 430b orrs r3, r1
  30510. 800d474: 6593 str r3, [r2, #88] @ 0x58
  30511. 800d476: e003 b.n 800d480 <HAL_RCCEx_PeriphCLKConfig+0xe10>
  30512. }
  30513. else
  30514. {
  30515. /* set overall return value */
  30516. status = ret;
  30517. 800d478: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  30518. 800d47c: f887 311e strb.w r3, [r7, #286] @ 0x11e
  30519. __HAL_RCC_I2C1235_CONFIG(PeriphClkInit->I2c1235ClockSelection);
  30520. }
  30521. #else
  30522. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2C123) == RCC_PERIPHCLK_I2C123)
  30523. 800d480: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30524. 800d484: e9d3 2300 ldrd r2, r3, [r3]
  30525. 800d488: f002 0308 and.w r3, r2, #8
  30526. 800d48c: f8c7 3088 str.w r3, [r7, #136] @ 0x88
  30527. 800d490: 2300 movs r3, #0
  30528. 800d492: f8c7 308c str.w r3, [r7, #140] @ 0x8c
  30529. 800d496: e9d7 1222 ldrd r1, r2, [r7, #136] @ 0x88
  30530. 800d49a: 460b mov r3, r1
  30531. 800d49c: 4313 orrs r3, r2
  30532. 800d49e: d01e beq.n 800d4de <HAL_RCCEx_PeriphCLKConfig+0xe6e>
  30533. {
  30534. /* Check the parameters */
  30535. assert_param(IS_RCC_I2C123CLKSOURCE(PeriphClkInit->I2c123ClockSelection));
  30536. if ((PeriphClkInit->I2c123ClockSelection) == RCC_I2C123CLKSOURCE_PLL3)
  30537. 800d4a0: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30538. 800d4a4: f8d3 3084 ldr.w r3, [r3, #132] @ 0x84
  30539. 800d4a8: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  30540. 800d4ac: d10c bne.n 800d4c8 <HAL_RCCEx_PeriphCLKConfig+0xe58>
  30541. {
  30542. if (RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE) != HAL_OK)
  30543. 800d4ae: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30544. 800d4b2: 3328 adds r3, #40 @ 0x28
  30545. 800d4b4: 2102 movs r1, #2
  30546. 800d4b6: 4618 mov r0, r3
  30547. 800d4b8: f001 fd0a bl 800eed0 <RCCEx_PLL3_Config>
  30548. 800d4bc: 4603 mov r3, r0
  30549. 800d4be: 2b00 cmp r3, #0
  30550. 800d4c0: d002 beq.n 800d4c8 <HAL_RCCEx_PeriphCLKConfig+0xe58>
  30551. {
  30552. status = HAL_ERROR;
  30553. 800d4c2: 2301 movs r3, #1
  30554. 800d4c4: f887 311e strb.w r3, [r7, #286] @ 0x11e
  30555. }
  30556. }
  30557. __HAL_RCC_I2C123_CONFIG(PeriphClkInit->I2c123ClockSelection);
  30558. 800d4c8: 4ba1 ldr r3, [pc, #644] @ (800d750 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  30559. 800d4ca: 6d5b ldr r3, [r3, #84] @ 0x54
  30560. 800d4cc: f423 5140 bic.w r1, r3, #12288 @ 0x3000
  30561. 800d4d0: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30562. 800d4d4: f8d3 3084 ldr.w r3, [r3, #132] @ 0x84
  30563. 800d4d8: 4a9d ldr r2, [pc, #628] @ (800d750 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  30564. 800d4da: 430b orrs r3, r1
  30565. 800d4dc: 6553 str r3, [r2, #84] @ 0x54
  30566. }
  30567. #endif /* I2C5 */
  30568. /*------------------------------ I2C4 Configuration ------------------------*/
  30569. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2C4) == RCC_PERIPHCLK_I2C4)
  30570. 800d4de: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30571. 800d4e2: e9d3 2300 ldrd r2, r3, [r3]
  30572. 800d4e6: f002 0310 and.w r3, r2, #16
  30573. 800d4ea: f8c7 3080 str.w r3, [r7, #128] @ 0x80
  30574. 800d4ee: 2300 movs r3, #0
  30575. 800d4f0: f8c7 3084 str.w r3, [r7, #132] @ 0x84
  30576. 800d4f4: e9d7 1220 ldrd r1, r2, [r7, #128] @ 0x80
  30577. 800d4f8: 460b mov r3, r1
  30578. 800d4fa: 4313 orrs r3, r2
  30579. 800d4fc: d01e beq.n 800d53c <HAL_RCCEx_PeriphCLKConfig+0xecc>
  30580. {
  30581. /* Check the parameters */
  30582. assert_param(IS_RCC_I2C4CLKSOURCE(PeriphClkInit->I2c4ClockSelection));
  30583. if ((PeriphClkInit->I2c4ClockSelection) == RCC_I2C4CLKSOURCE_PLL3)
  30584. 800d4fe: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30585. 800d502: f8d3 3098 ldr.w r3, [r3, #152] @ 0x98
  30586. 800d506: f5b3 7f80 cmp.w r3, #256 @ 0x100
  30587. 800d50a: d10c bne.n 800d526 <HAL_RCCEx_PeriphCLKConfig+0xeb6>
  30588. {
  30589. if (RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE) != HAL_OK)
  30590. 800d50c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30591. 800d510: 3328 adds r3, #40 @ 0x28
  30592. 800d512: 2102 movs r1, #2
  30593. 800d514: 4618 mov r0, r3
  30594. 800d516: f001 fcdb bl 800eed0 <RCCEx_PLL3_Config>
  30595. 800d51a: 4603 mov r3, r0
  30596. 800d51c: 2b00 cmp r3, #0
  30597. 800d51e: d002 beq.n 800d526 <HAL_RCCEx_PeriphCLKConfig+0xeb6>
  30598. {
  30599. status = HAL_ERROR;
  30600. 800d520: 2301 movs r3, #1
  30601. 800d522: f887 311e strb.w r3, [r7, #286] @ 0x11e
  30602. }
  30603. }
  30604. __HAL_RCC_I2C4_CONFIG(PeriphClkInit->I2c4ClockSelection);
  30605. 800d526: 4b8a ldr r3, [pc, #552] @ (800d750 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  30606. 800d528: 6d9b ldr r3, [r3, #88] @ 0x58
  30607. 800d52a: f423 7140 bic.w r1, r3, #768 @ 0x300
  30608. 800d52e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30609. 800d532: f8d3 3098 ldr.w r3, [r3, #152] @ 0x98
  30610. 800d536: 4a86 ldr r2, [pc, #536] @ (800d750 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  30611. 800d538: 430b orrs r3, r1
  30612. 800d53a: 6593 str r3, [r2, #88] @ 0x58
  30613. }
  30614. /*---------------------------- ADC configuration -------------------------------*/
  30615. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC)
  30616. 800d53c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30617. 800d540: e9d3 2300 ldrd r2, r3, [r3]
  30618. 800d544: f402 2300 and.w r3, r2, #524288 @ 0x80000
  30619. 800d548: 67bb str r3, [r7, #120] @ 0x78
  30620. 800d54a: 2300 movs r3, #0
  30621. 800d54c: 67fb str r3, [r7, #124] @ 0x7c
  30622. 800d54e: e9d7 121e ldrd r1, r2, [r7, #120] @ 0x78
  30623. 800d552: 460b mov r3, r1
  30624. 800d554: 4313 orrs r3, r2
  30625. 800d556: d03e beq.n 800d5d6 <HAL_RCCEx_PeriphCLKConfig+0xf66>
  30626. {
  30627. switch (PeriphClkInit->AdcClockSelection)
  30628. 800d558: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30629. 800d55c: f8d3 30a4 ldr.w r3, [r3, #164] @ 0xa4
  30630. 800d560: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  30631. 800d564: d022 beq.n 800d5ac <HAL_RCCEx_PeriphCLKConfig+0xf3c>
  30632. 800d566: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  30633. 800d56a: d81b bhi.n 800d5a4 <HAL_RCCEx_PeriphCLKConfig+0xf34>
  30634. 800d56c: 2b00 cmp r3, #0
  30635. 800d56e: d003 beq.n 800d578 <HAL_RCCEx_PeriphCLKConfig+0xf08>
  30636. 800d570: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  30637. 800d574: d00b beq.n 800d58e <HAL_RCCEx_PeriphCLKConfig+0xf1e>
  30638. 800d576: e015 b.n 800d5a4 <HAL_RCCEx_PeriphCLKConfig+0xf34>
  30639. {
  30640. case RCC_ADCCLKSOURCE_PLL2: /* PLL2 is used as clock source for ADC*/
  30641. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  30642. 800d578: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30643. 800d57c: 3308 adds r3, #8
  30644. 800d57e: 2100 movs r1, #0
  30645. 800d580: 4618 mov r0, r3
  30646. 800d582: f001 fbf3 bl 800ed6c <RCCEx_PLL2_Config>
  30647. 800d586: 4603 mov r3, r0
  30648. 800d588: f887 311f strb.w r3, [r7, #287] @ 0x11f
  30649. /* ADC clock source configuration done later after clock selection check */
  30650. break;
  30651. 800d58c: e00f b.n 800d5ae <HAL_RCCEx_PeriphCLKConfig+0xf3e>
  30652. case RCC_ADCCLKSOURCE_PLL3: /* PLL3 is used as clock source for ADC*/
  30653. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE);
  30654. 800d58e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30655. 800d592: 3328 adds r3, #40 @ 0x28
  30656. 800d594: 2102 movs r1, #2
  30657. 800d596: 4618 mov r0, r3
  30658. 800d598: f001 fc9a bl 800eed0 <RCCEx_PLL3_Config>
  30659. 800d59c: 4603 mov r3, r0
  30660. 800d59e: f887 311f strb.w r3, [r7, #287] @ 0x11f
  30661. /* ADC clock source configuration done later after clock selection check */
  30662. break;
  30663. 800d5a2: e004 b.n 800d5ae <HAL_RCCEx_PeriphCLKConfig+0xf3e>
  30664. /* HSI, HSE, or CSI oscillator is used as source of ADC clock */
  30665. /* ADC clock source configuration done later after clock selection check */
  30666. break;
  30667. default:
  30668. ret = HAL_ERROR;
  30669. 800d5a4: 2301 movs r3, #1
  30670. 800d5a6: f887 311f strb.w r3, [r7, #287] @ 0x11f
  30671. break;
  30672. 800d5aa: e000 b.n 800d5ae <HAL_RCCEx_PeriphCLKConfig+0xf3e>
  30673. break;
  30674. 800d5ac: bf00 nop
  30675. }
  30676. if (ret == HAL_OK)
  30677. 800d5ae: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  30678. 800d5b2: 2b00 cmp r3, #0
  30679. 800d5b4: d10b bne.n 800d5ce <HAL_RCCEx_PeriphCLKConfig+0xf5e>
  30680. {
  30681. /* Set the source of ADC clock*/
  30682. __HAL_RCC_ADC_CONFIG(PeriphClkInit->AdcClockSelection);
  30683. 800d5b6: 4b66 ldr r3, [pc, #408] @ (800d750 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  30684. 800d5b8: 6d9b ldr r3, [r3, #88] @ 0x58
  30685. 800d5ba: f423 3140 bic.w r1, r3, #196608 @ 0x30000
  30686. 800d5be: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30687. 800d5c2: f8d3 30a4 ldr.w r3, [r3, #164] @ 0xa4
  30688. 800d5c6: 4a62 ldr r2, [pc, #392] @ (800d750 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  30689. 800d5c8: 430b orrs r3, r1
  30690. 800d5ca: 6593 str r3, [r2, #88] @ 0x58
  30691. 800d5cc: e003 b.n 800d5d6 <HAL_RCCEx_PeriphCLKConfig+0xf66>
  30692. }
  30693. else
  30694. {
  30695. /* set overall return value */
  30696. status = ret;
  30697. 800d5ce: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  30698. 800d5d2: f887 311e strb.w r3, [r7, #286] @ 0x11e
  30699. }
  30700. }
  30701. /*------------------------------ USB Configuration -------------------------*/
  30702. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB)
  30703. 800d5d6: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30704. 800d5da: e9d3 2300 ldrd r2, r3, [r3]
  30705. 800d5de: f402 2380 and.w r3, r2, #262144 @ 0x40000
  30706. 800d5e2: 673b str r3, [r7, #112] @ 0x70
  30707. 800d5e4: 2300 movs r3, #0
  30708. 800d5e6: 677b str r3, [r7, #116] @ 0x74
  30709. 800d5e8: e9d7 121c ldrd r1, r2, [r7, #112] @ 0x70
  30710. 800d5ec: 460b mov r3, r1
  30711. 800d5ee: 4313 orrs r3, r2
  30712. 800d5f0: d03b beq.n 800d66a <HAL_RCCEx_PeriphCLKConfig+0xffa>
  30713. {
  30714. switch (PeriphClkInit->UsbClockSelection)
  30715. 800d5f2: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30716. 800d5f6: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  30717. 800d5fa: f5b3 1f40 cmp.w r3, #3145728 @ 0x300000
  30718. 800d5fe: d01f beq.n 800d640 <HAL_RCCEx_PeriphCLKConfig+0xfd0>
  30719. 800d600: f5b3 1f40 cmp.w r3, #3145728 @ 0x300000
  30720. 800d604: d818 bhi.n 800d638 <HAL_RCCEx_PeriphCLKConfig+0xfc8>
  30721. 800d606: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
  30722. 800d60a: d003 beq.n 800d614 <HAL_RCCEx_PeriphCLKConfig+0xfa4>
  30723. 800d60c: f5b3 1f00 cmp.w r3, #2097152 @ 0x200000
  30724. 800d610: d007 beq.n 800d622 <HAL_RCCEx_PeriphCLKConfig+0xfb2>
  30725. 800d612: e011 b.n 800d638 <HAL_RCCEx_PeriphCLKConfig+0xfc8>
  30726. {
  30727. case RCC_USBCLKSOURCE_PLL: /* PLL is used as clock source for USB*/
  30728. /* Enable USB Clock output generated form System USB . */
  30729. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  30730. 800d614: 4b4e ldr r3, [pc, #312] @ (800d750 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  30731. 800d616: 6adb ldr r3, [r3, #44] @ 0x2c
  30732. 800d618: 4a4d ldr r2, [pc, #308] @ (800d750 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  30733. 800d61a: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  30734. 800d61e: 62d3 str r3, [r2, #44] @ 0x2c
  30735. /* USB clock source configuration done later after clock selection check */
  30736. break;
  30737. 800d620: e00f b.n 800d642 <HAL_RCCEx_PeriphCLKConfig+0xfd2>
  30738. case RCC_USBCLKSOURCE_PLL3: /* PLL3 is used as clock source for USB*/
  30739. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
  30740. 800d622: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30741. 800d626: 3328 adds r3, #40 @ 0x28
  30742. 800d628: 2101 movs r1, #1
  30743. 800d62a: 4618 mov r0, r3
  30744. 800d62c: f001 fc50 bl 800eed0 <RCCEx_PLL3_Config>
  30745. 800d630: 4603 mov r3, r0
  30746. 800d632: f887 311f strb.w r3, [r7, #287] @ 0x11f
  30747. /* USB clock source configuration done later after clock selection check */
  30748. break;
  30749. 800d636: e004 b.n 800d642 <HAL_RCCEx_PeriphCLKConfig+0xfd2>
  30750. /* HSI48 oscillator is used as source of USB clock */
  30751. /* USB clock source configuration done later after clock selection check */
  30752. break;
  30753. default:
  30754. ret = HAL_ERROR;
  30755. 800d638: 2301 movs r3, #1
  30756. 800d63a: f887 311f strb.w r3, [r7, #287] @ 0x11f
  30757. break;
  30758. 800d63e: e000 b.n 800d642 <HAL_RCCEx_PeriphCLKConfig+0xfd2>
  30759. break;
  30760. 800d640: bf00 nop
  30761. }
  30762. if (ret == HAL_OK)
  30763. 800d642: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  30764. 800d646: 2b00 cmp r3, #0
  30765. 800d648: d10b bne.n 800d662 <HAL_RCCEx_PeriphCLKConfig+0xff2>
  30766. {
  30767. /* Set the source of USB clock*/
  30768. __HAL_RCC_USB_CONFIG(PeriphClkInit->UsbClockSelection);
  30769. 800d64a: 4b41 ldr r3, [pc, #260] @ (800d750 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  30770. 800d64c: 6d5b ldr r3, [r3, #84] @ 0x54
  30771. 800d64e: f423 1140 bic.w r1, r3, #3145728 @ 0x300000
  30772. 800d652: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30773. 800d656: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  30774. 800d65a: 4a3d ldr r2, [pc, #244] @ (800d750 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  30775. 800d65c: 430b orrs r3, r1
  30776. 800d65e: 6553 str r3, [r2, #84] @ 0x54
  30777. 800d660: e003 b.n 800d66a <HAL_RCCEx_PeriphCLKConfig+0xffa>
  30778. }
  30779. else
  30780. {
  30781. /* set overall return value */
  30782. status = ret;
  30783. 800d662: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  30784. 800d666: f887 311e strb.w r3, [r7, #286] @ 0x11e
  30785. }
  30786. }
  30787. /*------------------------------------- SDMMC Configuration ------------------------------------*/
  30788. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SDMMC) == RCC_PERIPHCLK_SDMMC)
  30789. 800d66a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30790. 800d66e: e9d3 2300 ldrd r2, r3, [r3]
  30791. 800d672: f402 3380 and.w r3, r2, #65536 @ 0x10000
  30792. 800d676: 66bb str r3, [r7, #104] @ 0x68
  30793. 800d678: 2300 movs r3, #0
  30794. 800d67a: 66fb str r3, [r7, #108] @ 0x6c
  30795. 800d67c: e9d7 121a ldrd r1, r2, [r7, #104] @ 0x68
  30796. 800d680: 460b mov r3, r1
  30797. 800d682: 4313 orrs r3, r2
  30798. 800d684: d031 beq.n 800d6ea <HAL_RCCEx_PeriphCLKConfig+0x107a>
  30799. {
  30800. /* Check the parameters */
  30801. assert_param(IS_RCC_SDMMC(PeriphClkInit->SdmmcClockSelection));
  30802. switch (PeriphClkInit->SdmmcClockSelection)
  30803. 800d686: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30804. 800d68a: 6d1b ldr r3, [r3, #80] @ 0x50
  30805. 800d68c: 2b00 cmp r3, #0
  30806. 800d68e: d003 beq.n 800d698 <HAL_RCCEx_PeriphCLKConfig+0x1028>
  30807. 800d690: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  30808. 800d694: d007 beq.n 800d6a6 <HAL_RCCEx_PeriphCLKConfig+0x1036>
  30809. 800d696: e011 b.n 800d6bc <HAL_RCCEx_PeriphCLKConfig+0x104c>
  30810. {
  30811. case RCC_SDMMCCLKSOURCE_PLL: /* PLL is used as clock source for SDMMC*/
  30812. /* Enable SDMMC Clock output generated form System PLL . */
  30813. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  30814. 800d698: 4b2d ldr r3, [pc, #180] @ (800d750 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  30815. 800d69a: 6adb ldr r3, [r3, #44] @ 0x2c
  30816. 800d69c: 4a2c ldr r2, [pc, #176] @ (800d750 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  30817. 800d69e: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  30818. 800d6a2: 62d3 str r3, [r2, #44] @ 0x2c
  30819. /* SDMMC clock source configuration done later after clock selection check */
  30820. break;
  30821. 800d6a4: e00e b.n 800d6c4 <HAL_RCCEx_PeriphCLKConfig+0x1054>
  30822. case RCC_SDMMCCLKSOURCE_PLL2: /* PLL2 is used as clock source for SDMMC*/
  30823. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_R_UPDATE);
  30824. 800d6a6: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30825. 800d6aa: 3308 adds r3, #8
  30826. 800d6ac: 2102 movs r1, #2
  30827. 800d6ae: 4618 mov r0, r3
  30828. 800d6b0: f001 fb5c bl 800ed6c <RCCEx_PLL2_Config>
  30829. 800d6b4: 4603 mov r3, r0
  30830. 800d6b6: f887 311f strb.w r3, [r7, #287] @ 0x11f
  30831. /* SDMMC clock source configuration done later after clock selection check */
  30832. break;
  30833. 800d6ba: e003 b.n 800d6c4 <HAL_RCCEx_PeriphCLKConfig+0x1054>
  30834. default:
  30835. ret = HAL_ERROR;
  30836. 800d6bc: 2301 movs r3, #1
  30837. 800d6be: f887 311f strb.w r3, [r7, #287] @ 0x11f
  30838. break;
  30839. 800d6c2: bf00 nop
  30840. }
  30841. if (ret == HAL_OK)
  30842. 800d6c4: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  30843. 800d6c8: 2b00 cmp r3, #0
  30844. 800d6ca: d10a bne.n 800d6e2 <HAL_RCCEx_PeriphCLKConfig+0x1072>
  30845. {
  30846. /* Set the source of SDMMC clock*/
  30847. __HAL_RCC_SDMMC_CONFIG(PeriphClkInit->SdmmcClockSelection);
  30848. 800d6cc: 4b20 ldr r3, [pc, #128] @ (800d750 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  30849. 800d6ce: 6cdb ldr r3, [r3, #76] @ 0x4c
  30850. 800d6d0: f423 3180 bic.w r1, r3, #65536 @ 0x10000
  30851. 800d6d4: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30852. 800d6d8: 6d1b ldr r3, [r3, #80] @ 0x50
  30853. 800d6da: 4a1d ldr r2, [pc, #116] @ (800d750 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  30854. 800d6dc: 430b orrs r3, r1
  30855. 800d6de: 64d3 str r3, [r2, #76] @ 0x4c
  30856. 800d6e0: e003 b.n 800d6ea <HAL_RCCEx_PeriphCLKConfig+0x107a>
  30857. }
  30858. else
  30859. {
  30860. /* set overall return value */
  30861. status = ret;
  30862. 800d6e2: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  30863. 800d6e6: f887 311e strb.w r3, [r7, #286] @ 0x11e
  30864. }
  30865. }
  30866. #endif /* LTDC */
  30867. /*------------------------------ RNG Configuration -------------------------*/
  30868. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RNG) == RCC_PERIPHCLK_RNG)
  30869. 800d6ea: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30870. 800d6ee: e9d3 2300 ldrd r2, r3, [r3]
  30871. 800d6f2: f402 3300 and.w r3, r2, #131072 @ 0x20000
  30872. 800d6f6: 663b str r3, [r7, #96] @ 0x60
  30873. 800d6f8: 2300 movs r3, #0
  30874. 800d6fa: 667b str r3, [r7, #100] @ 0x64
  30875. 800d6fc: e9d7 1218 ldrd r1, r2, [r7, #96] @ 0x60
  30876. 800d700: 460b mov r3, r1
  30877. 800d702: 4313 orrs r3, r2
  30878. 800d704: d03b beq.n 800d77e <HAL_RCCEx_PeriphCLKConfig+0x110e>
  30879. {
  30880. switch (PeriphClkInit->RngClockSelection)
  30881. 800d706: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30882. 800d70a: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  30883. 800d70e: f5b3 7f40 cmp.w r3, #768 @ 0x300
  30884. 800d712: d018 beq.n 800d746 <HAL_RCCEx_PeriphCLKConfig+0x10d6>
  30885. 800d714: f5b3 7f40 cmp.w r3, #768 @ 0x300
  30886. 800d718: d811 bhi.n 800d73e <HAL_RCCEx_PeriphCLKConfig+0x10ce>
  30887. 800d71a: f5b3 7f00 cmp.w r3, #512 @ 0x200
  30888. 800d71e: d014 beq.n 800d74a <HAL_RCCEx_PeriphCLKConfig+0x10da>
  30889. 800d720: f5b3 7f00 cmp.w r3, #512 @ 0x200
  30890. 800d724: d80b bhi.n 800d73e <HAL_RCCEx_PeriphCLKConfig+0x10ce>
  30891. 800d726: 2b00 cmp r3, #0
  30892. 800d728: d014 beq.n 800d754 <HAL_RCCEx_PeriphCLKConfig+0x10e4>
  30893. 800d72a: f5b3 7f80 cmp.w r3, #256 @ 0x100
  30894. 800d72e: d106 bne.n 800d73e <HAL_RCCEx_PeriphCLKConfig+0x10ce>
  30895. {
  30896. case RCC_RNGCLKSOURCE_PLL: /* PLL is used as clock source for RNG*/
  30897. /* Enable RNG Clock output generated form System RNG . */
  30898. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  30899. 800d730: 4b07 ldr r3, [pc, #28] @ (800d750 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  30900. 800d732: 6adb ldr r3, [r3, #44] @ 0x2c
  30901. 800d734: 4a06 ldr r2, [pc, #24] @ (800d750 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  30902. 800d736: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  30903. 800d73a: 62d3 str r3, [r2, #44] @ 0x2c
  30904. /* RNG clock source configuration done later after clock selection check */
  30905. break;
  30906. 800d73c: e00b b.n 800d756 <HAL_RCCEx_PeriphCLKConfig+0x10e6>
  30907. /* HSI48 oscillator is used as source of RNG clock */
  30908. /* RNG clock source configuration done later after clock selection check */
  30909. break;
  30910. default:
  30911. ret = HAL_ERROR;
  30912. 800d73e: 2301 movs r3, #1
  30913. 800d740: f887 311f strb.w r3, [r7, #287] @ 0x11f
  30914. break;
  30915. 800d744: e007 b.n 800d756 <HAL_RCCEx_PeriphCLKConfig+0x10e6>
  30916. break;
  30917. 800d746: bf00 nop
  30918. 800d748: e005 b.n 800d756 <HAL_RCCEx_PeriphCLKConfig+0x10e6>
  30919. break;
  30920. 800d74a: bf00 nop
  30921. 800d74c: e003 b.n 800d756 <HAL_RCCEx_PeriphCLKConfig+0x10e6>
  30922. 800d74e: bf00 nop
  30923. 800d750: 58024400 .word 0x58024400
  30924. break;
  30925. 800d754: bf00 nop
  30926. }
  30927. if (ret == HAL_OK)
  30928. 800d756: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  30929. 800d75a: 2b00 cmp r3, #0
  30930. 800d75c: d10b bne.n 800d776 <HAL_RCCEx_PeriphCLKConfig+0x1106>
  30931. {
  30932. /* Set the source of RNG clock*/
  30933. __HAL_RCC_RNG_CONFIG(PeriphClkInit->RngClockSelection);
  30934. 800d75e: 4bba ldr r3, [pc, #744] @ (800da48 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  30935. 800d760: 6d5b ldr r3, [r3, #84] @ 0x54
  30936. 800d762: f423 7140 bic.w r1, r3, #768 @ 0x300
  30937. 800d766: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30938. 800d76a: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  30939. 800d76e: 4ab6 ldr r2, [pc, #728] @ (800da48 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  30940. 800d770: 430b orrs r3, r1
  30941. 800d772: 6553 str r3, [r2, #84] @ 0x54
  30942. 800d774: e003 b.n 800d77e <HAL_RCCEx_PeriphCLKConfig+0x110e>
  30943. }
  30944. else
  30945. {
  30946. /* set overall return value */
  30947. status = ret;
  30948. 800d776: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  30949. 800d77a: f887 311e strb.w r3, [r7, #286] @ 0x11e
  30950. }
  30951. }
  30952. /*------------------------------ SWPMI1 Configuration ------------------------*/
  30953. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SWPMI1) == RCC_PERIPHCLK_SWPMI1)
  30954. 800d77e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30955. 800d782: e9d3 2300 ldrd r2, r3, [r3]
  30956. 800d786: f402 1380 and.w r3, r2, #1048576 @ 0x100000
  30957. 800d78a: 65bb str r3, [r7, #88] @ 0x58
  30958. 800d78c: 2300 movs r3, #0
  30959. 800d78e: 65fb str r3, [r7, #92] @ 0x5c
  30960. 800d790: e9d7 1216 ldrd r1, r2, [r7, #88] @ 0x58
  30961. 800d794: 460b mov r3, r1
  30962. 800d796: 4313 orrs r3, r2
  30963. 800d798: d009 beq.n 800d7ae <HAL_RCCEx_PeriphCLKConfig+0x113e>
  30964. {
  30965. /* Check the parameters */
  30966. assert_param(IS_RCC_SWPMI1CLKSOURCE(PeriphClkInit->Swpmi1ClockSelection));
  30967. /* Configure the SWPMI1 interface clock source */
  30968. __HAL_RCC_SWPMI1_CONFIG(PeriphClkInit->Swpmi1ClockSelection);
  30969. 800d79a: 4bab ldr r3, [pc, #684] @ (800da48 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  30970. 800d79c: 6d1b ldr r3, [r3, #80] @ 0x50
  30971. 800d79e: f023 4100 bic.w r1, r3, #2147483648 @ 0x80000000
  30972. 800d7a2: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30973. 800d7a6: 6f5b ldr r3, [r3, #116] @ 0x74
  30974. 800d7a8: 4aa7 ldr r2, [pc, #668] @ (800da48 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  30975. 800d7aa: 430b orrs r3, r1
  30976. 800d7ac: 6513 str r3, [r2, #80] @ 0x50
  30977. }
  30978. #if defined(HRTIM1)
  30979. /*------------------------------ HRTIM1 clock Configuration ----------------*/
  30980. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_HRTIM1) == RCC_PERIPHCLK_HRTIM1)
  30981. 800d7ae: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  30982. 800d7b2: e9d3 2300 ldrd r2, r3, [r3]
  30983. 800d7b6: f002 5380 and.w r3, r2, #268435456 @ 0x10000000
  30984. 800d7ba: 653b str r3, [r7, #80] @ 0x50
  30985. 800d7bc: 2300 movs r3, #0
  30986. 800d7be: 657b str r3, [r7, #84] @ 0x54
  30987. 800d7c0: e9d7 1214 ldrd r1, r2, [r7, #80] @ 0x50
  30988. 800d7c4: 460b mov r3, r1
  30989. 800d7c6: 4313 orrs r3, r2
  30990. 800d7c8: d00a beq.n 800d7e0 <HAL_RCCEx_PeriphCLKConfig+0x1170>
  30991. {
  30992. /* Check the parameters */
  30993. assert_param(IS_RCC_HRTIM1CLKSOURCE(PeriphClkInit->Hrtim1ClockSelection));
  30994. /* Configure the HRTIM1 clock source */
  30995. __HAL_RCC_HRTIM1_CONFIG(PeriphClkInit->Hrtim1ClockSelection);
  30996. 800d7ca: 4b9f ldr r3, [pc, #636] @ (800da48 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  30997. 800d7cc: 691b ldr r3, [r3, #16]
  30998. 800d7ce: f423 4180 bic.w r1, r3, #16384 @ 0x4000
  30999. 800d7d2: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  31000. 800d7d6: f8d3 30b8 ldr.w r3, [r3, #184] @ 0xb8
  31001. 800d7da: 4a9b ldr r2, [pc, #620] @ (800da48 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  31002. 800d7dc: 430b orrs r3, r1
  31003. 800d7de: 6113 str r3, [r2, #16]
  31004. }
  31005. #endif /*HRTIM1*/
  31006. /*------------------------------ DFSDM1 Configuration ------------------------*/
  31007. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_DFSDM1) == RCC_PERIPHCLK_DFSDM1)
  31008. 800d7e0: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  31009. 800d7e4: e9d3 2300 ldrd r2, r3, [r3]
  31010. 800d7e8: f402 1300 and.w r3, r2, #2097152 @ 0x200000
  31011. 800d7ec: 64bb str r3, [r7, #72] @ 0x48
  31012. 800d7ee: 2300 movs r3, #0
  31013. 800d7f0: 64fb str r3, [r7, #76] @ 0x4c
  31014. 800d7f2: e9d7 1212 ldrd r1, r2, [r7, #72] @ 0x48
  31015. 800d7f6: 460b mov r3, r1
  31016. 800d7f8: 4313 orrs r3, r2
  31017. 800d7fa: d009 beq.n 800d810 <HAL_RCCEx_PeriphCLKConfig+0x11a0>
  31018. {
  31019. /* Check the parameters */
  31020. assert_param(IS_RCC_DFSDM1CLKSOURCE(PeriphClkInit->Dfsdm1ClockSelection));
  31021. /* Configure the DFSDM1 interface clock source */
  31022. __HAL_RCC_DFSDM1_CONFIG(PeriphClkInit->Dfsdm1ClockSelection);
  31023. 800d7fc: 4b92 ldr r3, [pc, #584] @ (800da48 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  31024. 800d7fe: 6d1b ldr r3, [r3, #80] @ 0x50
  31025. 800d800: f023 7180 bic.w r1, r3, #16777216 @ 0x1000000
  31026. 800d804: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  31027. 800d808: 6edb ldr r3, [r3, #108] @ 0x6c
  31028. 800d80a: 4a8f ldr r2, [pc, #572] @ (800da48 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  31029. 800d80c: 430b orrs r3, r1
  31030. 800d80e: 6513 str r3, [r2, #80] @ 0x50
  31031. __HAL_RCC_DFSDM2_CONFIG(PeriphClkInit->Dfsdm2ClockSelection);
  31032. }
  31033. #endif /* DFSDM2 */
  31034. /*------------------------------------ TIM configuration --------------------------------------*/
  31035. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM) == RCC_PERIPHCLK_TIM)
  31036. 800d810: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  31037. 800d814: e9d3 2300 ldrd r2, r3, [r3]
  31038. 800d818: f002 4380 and.w r3, r2, #1073741824 @ 0x40000000
  31039. 800d81c: 643b str r3, [r7, #64] @ 0x40
  31040. 800d81e: 2300 movs r3, #0
  31041. 800d820: 647b str r3, [r7, #68] @ 0x44
  31042. 800d822: e9d7 1210 ldrd r1, r2, [r7, #64] @ 0x40
  31043. 800d826: 460b mov r3, r1
  31044. 800d828: 4313 orrs r3, r2
  31045. 800d82a: d00e beq.n 800d84a <HAL_RCCEx_PeriphCLKConfig+0x11da>
  31046. {
  31047. /* Check the parameters */
  31048. assert_param(IS_RCC_TIMPRES(PeriphClkInit->TIMPresSelection));
  31049. /* Configure Timer Prescaler */
  31050. __HAL_RCC_TIMCLKPRESCALER(PeriphClkInit->TIMPresSelection);
  31051. 800d82c: 4b86 ldr r3, [pc, #536] @ (800da48 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  31052. 800d82e: 691b ldr r3, [r3, #16]
  31053. 800d830: 4a85 ldr r2, [pc, #532] @ (800da48 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  31054. 800d832: f423 4300 bic.w r3, r3, #32768 @ 0x8000
  31055. 800d836: 6113 str r3, [r2, #16]
  31056. 800d838: 4b83 ldr r3, [pc, #524] @ (800da48 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  31057. 800d83a: 6919 ldr r1, [r3, #16]
  31058. 800d83c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  31059. 800d840: f8d3 30bc ldr.w r3, [r3, #188] @ 0xbc
  31060. 800d844: 4a80 ldr r2, [pc, #512] @ (800da48 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  31061. 800d846: 430b orrs r3, r1
  31062. 800d848: 6113 str r3, [r2, #16]
  31063. }
  31064. /*------------------------------------ CKPER configuration --------------------------------------*/
  31065. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_CKPER) == RCC_PERIPHCLK_CKPER)
  31066. 800d84a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  31067. 800d84e: e9d3 2300 ldrd r2, r3, [r3]
  31068. 800d852: f002 4300 and.w r3, r2, #2147483648 @ 0x80000000
  31069. 800d856: 63bb str r3, [r7, #56] @ 0x38
  31070. 800d858: 2300 movs r3, #0
  31071. 800d85a: 63fb str r3, [r7, #60] @ 0x3c
  31072. 800d85c: e9d7 120e ldrd r1, r2, [r7, #56] @ 0x38
  31073. 800d860: 460b mov r3, r1
  31074. 800d862: 4313 orrs r3, r2
  31075. 800d864: d009 beq.n 800d87a <HAL_RCCEx_PeriphCLKConfig+0x120a>
  31076. {
  31077. /* Check the parameters */
  31078. assert_param(IS_RCC_CLKPSOURCE(PeriphClkInit->CkperClockSelection));
  31079. /* Configure the CKPER clock source */
  31080. __HAL_RCC_CLKP_CONFIG(PeriphClkInit->CkperClockSelection);
  31081. 800d866: 4b78 ldr r3, [pc, #480] @ (800da48 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  31082. 800d868: 6cdb ldr r3, [r3, #76] @ 0x4c
  31083. 800d86a: f023 5140 bic.w r1, r3, #805306368 @ 0x30000000
  31084. 800d86e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  31085. 800d872: 6d5b ldr r3, [r3, #84] @ 0x54
  31086. 800d874: 4a74 ldr r2, [pc, #464] @ (800da48 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  31087. 800d876: 430b orrs r3, r1
  31088. 800d878: 64d3 str r3, [r2, #76] @ 0x4c
  31089. }
  31090. /*------------------------------ CEC Configuration ------------------------*/
  31091. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_CEC) == RCC_PERIPHCLK_CEC)
  31092. 800d87a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  31093. 800d87e: e9d3 2300 ldrd r2, r3, [r3]
  31094. 800d882: f402 0300 and.w r3, r2, #8388608 @ 0x800000
  31095. 800d886: 633b str r3, [r7, #48] @ 0x30
  31096. 800d888: 2300 movs r3, #0
  31097. 800d88a: 637b str r3, [r7, #52] @ 0x34
  31098. 800d88c: e9d7 120c ldrd r1, r2, [r7, #48] @ 0x30
  31099. 800d890: 460b mov r3, r1
  31100. 800d892: 4313 orrs r3, r2
  31101. 800d894: d00a beq.n 800d8ac <HAL_RCCEx_PeriphCLKConfig+0x123c>
  31102. {
  31103. /* Check the parameters */
  31104. assert_param(IS_RCC_CECCLKSOURCE(PeriphClkInit->CecClockSelection));
  31105. /* Configure the CEC interface clock source */
  31106. __HAL_RCC_CEC_CONFIG(PeriphClkInit->CecClockSelection);
  31107. 800d896: 4b6c ldr r3, [pc, #432] @ (800da48 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  31108. 800d898: 6d5b ldr r3, [r3, #84] @ 0x54
  31109. 800d89a: f423 0140 bic.w r1, r3, #12582912 @ 0xc00000
  31110. 800d89e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  31111. 800d8a2: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c
  31112. 800d8a6: 4a68 ldr r2, [pc, #416] @ (800da48 <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  31113. 800d8a8: 430b orrs r3, r1
  31114. 800d8aa: 6553 str r3, [r2, #84] @ 0x54
  31115. }
  31116. /*---------------------------- PLL2 configuration -------------------------------*/
  31117. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLL2_DIVP) == RCC_PERIPHCLK_PLL2_DIVP)
  31118. 800d8ac: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  31119. 800d8b0: e9d3 2300 ldrd r2, r3, [r3]
  31120. 800d8b4: 2100 movs r1, #0
  31121. 800d8b6: 62b9 str r1, [r7, #40] @ 0x28
  31122. 800d8b8: f003 0301 and.w r3, r3, #1
  31123. 800d8bc: 62fb str r3, [r7, #44] @ 0x2c
  31124. 800d8be: e9d7 120a ldrd r1, r2, [r7, #40] @ 0x28
  31125. 800d8c2: 460b mov r3, r1
  31126. 800d8c4: 4313 orrs r3, r2
  31127. 800d8c6: d011 beq.n 800d8ec <HAL_RCCEx_PeriphCLKConfig+0x127c>
  31128. {
  31129. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  31130. 800d8c8: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  31131. 800d8cc: 3308 adds r3, #8
  31132. 800d8ce: 2100 movs r1, #0
  31133. 800d8d0: 4618 mov r0, r3
  31134. 800d8d2: f001 fa4b bl 800ed6c <RCCEx_PLL2_Config>
  31135. 800d8d6: 4603 mov r3, r0
  31136. 800d8d8: f887 311f strb.w r3, [r7, #287] @ 0x11f
  31137. if (ret == HAL_OK)
  31138. 800d8dc: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  31139. 800d8e0: 2b00 cmp r3, #0
  31140. 800d8e2: d003 beq.n 800d8ec <HAL_RCCEx_PeriphCLKConfig+0x127c>
  31141. /*Nothing to do*/
  31142. }
  31143. else
  31144. {
  31145. /* set overall return value */
  31146. status = ret;
  31147. 800d8e4: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  31148. 800d8e8: f887 311e strb.w r3, [r7, #286] @ 0x11e
  31149. }
  31150. }
  31151. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLL2_DIVQ) == RCC_PERIPHCLK_PLL2_DIVQ)
  31152. 800d8ec: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  31153. 800d8f0: e9d3 2300 ldrd r2, r3, [r3]
  31154. 800d8f4: 2100 movs r1, #0
  31155. 800d8f6: 6239 str r1, [r7, #32]
  31156. 800d8f8: f003 0302 and.w r3, r3, #2
  31157. 800d8fc: 627b str r3, [r7, #36] @ 0x24
  31158. 800d8fe: e9d7 1208 ldrd r1, r2, [r7, #32]
  31159. 800d902: 460b mov r3, r1
  31160. 800d904: 4313 orrs r3, r2
  31161. 800d906: d011 beq.n 800d92c <HAL_RCCEx_PeriphCLKConfig+0x12bc>
  31162. {
  31163. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
  31164. 800d908: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  31165. 800d90c: 3308 adds r3, #8
  31166. 800d90e: 2101 movs r1, #1
  31167. 800d910: 4618 mov r0, r3
  31168. 800d912: f001 fa2b bl 800ed6c <RCCEx_PLL2_Config>
  31169. 800d916: 4603 mov r3, r0
  31170. 800d918: f887 311f strb.w r3, [r7, #287] @ 0x11f
  31171. if (ret == HAL_OK)
  31172. 800d91c: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  31173. 800d920: 2b00 cmp r3, #0
  31174. 800d922: d003 beq.n 800d92c <HAL_RCCEx_PeriphCLKConfig+0x12bc>
  31175. /*Nothing to do*/
  31176. }
  31177. else
  31178. {
  31179. /* set overall return value */
  31180. status = ret;
  31181. 800d924: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  31182. 800d928: f887 311e strb.w r3, [r7, #286] @ 0x11e
  31183. }
  31184. }
  31185. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLL2_DIVR) == RCC_PERIPHCLK_PLL2_DIVR)
  31186. 800d92c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  31187. 800d930: e9d3 2300 ldrd r2, r3, [r3]
  31188. 800d934: 2100 movs r1, #0
  31189. 800d936: 61b9 str r1, [r7, #24]
  31190. 800d938: f003 0304 and.w r3, r3, #4
  31191. 800d93c: 61fb str r3, [r7, #28]
  31192. 800d93e: e9d7 1206 ldrd r1, r2, [r7, #24]
  31193. 800d942: 460b mov r3, r1
  31194. 800d944: 4313 orrs r3, r2
  31195. 800d946: d011 beq.n 800d96c <HAL_RCCEx_PeriphCLKConfig+0x12fc>
  31196. {
  31197. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_R_UPDATE);
  31198. 800d948: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  31199. 800d94c: 3308 adds r3, #8
  31200. 800d94e: 2102 movs r1, #2
  31201. 800d950: 4618 mov r0, r3
  31202. 800d952: f001 fa0b bl 800ed6c <RCCEx_PLL2_Config>
  31203. 800d956: 4603 mov r3, r0
  31204. 800d958: f887 311f strb.w r3, [r7, #287] @ 0x11f
  31205. if (ret == HAL_OK)
  31206. 800d95c: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  31207. 800d960: 2b00 cmp r3, #0
  31208. 800d962: d003 beq.n 800d96c <HAL_RCCEx_PeriphCLKConfig+0x12fc>
  31209. /*Nothing to do*/
  31210. }
  31211. else
  31212. {
  31213. /* set overall return value */
  31214. status = ret;
  31215. 800d964: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  31216. 800d968: f887 311e strb.w r3, [r7, #286] @ 0x11e
  31217. }
  31218. }
  31219. /*---------------------------- PLL3 configuration -------------------------------*/
  31220. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLL3_DIVP) == RCC_PERIPHCLK_PLL3_DIVP)
  31221. 800d96c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  31222. 800d970: e9d3 2300 ldrd r2, r3, [r3]
  31223. 800d974: 2100 movs r1, #0
  31224. 800d976: 6139 str r1, [r7, #16]
  31225. 800d978: f003 0308 and.w r3, r3, #8
  31226. 800d97c: 617b str r3, [r7, #20]
  31227. 800d97e: e9d7 1204 ldrd r1, r2, [r7, #16]
  31228. 800d982: 460b mov r3, r1
  31229. 800d984: 4313 orrs r3, r2
  31230. 800d986: d011 beq.n 800d9ac <HAL_RCCEx_PeriphCLKConfig+0x133c>
  31231. {
  31232. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
  31233. 800d988: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  31234. 800d98c: 3328 adds r3, #40 @ 0x28
  31235. 800d98e: 2100 movs r1, #0
  31236. 800d990: 4618 mov r0, r3
  31237. 800d992: f001 fa9d bl 800eed0 <RCCEx_PLL3_Config>
  31238. 800d996: 4603 mov r3, r0
  31239. 800d998: f887 311f strb.w r3, [r7, #287] @ 0x11f
  31240. if (ret == HAL_OK)
  31241. 800d99c: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  31242. 800d9a0: 2b00 cmp r3, #0
  31243. 800d9a2: d003 beq.n 800d9ac <HAL_RCCEx_PeriphCLKConfig+0x133c>
  31244. /*Nothing to do*/
  31245. }
  31246. else
  31247. {
  31248. /* set overall return value */
  31249. status = ret;
  31250. 800d9a4: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  31251. 800d9a8: f887 311e strb.w r3, [r7, #286] @ 0x11e
  31252. }
  31253. }
  31254. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLL3_DIVQ) == RCC_PERIPHCLK_PLL3_DIVQ)
  31255. 800d9ac: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  31256. 800d9b0: e9d3 2300 ldrd r2, r3, [r3]
  31257. 800d9b4: 2100 movs r1, #0
  31258. 800d9b6: 60b9 str r1, [r7, #8]
  31259. 800d9b8: f003 0310 and.w r3, r3, #16
  31260. 800d9bc: 60fb str r3, [r7, #12]
  31261. 800d9be: e9d7 1202 ldrd r1, r2, [r7, #8]
  31262. 800d9c2: 460b mov r3, r1
  31263. 800d9c4: 4313 orrs r3, r2
  31264. 800d9c6: d011 beq.n 800d9ec <HAL_RCCEx_PeriphCLKConfig+0x137c>
  31265. {
  31266. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
  31267. 800d9c8: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  31268. 800d9cc: 3328 adds r3, #40 @ 0x28
  31269. 800d9ce: 2101 movs r1, #1
  31270. 800d9d0: 4618 mov r0, r3
  31271. 800d9d2: f001 fa7d bl 800eed0 <RCCEx_PLL3_Config>
  31272. 800d9d6: 4603 mov r3, r0
  31273. 800d9d8: f887 311f strb.w r3, [r7, #287] @ 0x11f
  31274. if (ret == HAL_OK)
  31275. 800d9dc: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  31276. 800d9e0: 2b00 cmp r3, #0
  31277. 800d9e2: d003 beq.n 800d9ec <HAL_RCCEx_PeriphCLKConfig+0x137c>
  31278. /*Nothing to do*/
  31279. }
  31280. else
  31281. {
  31282. /* set overall return value */
  31283. status = ret;
  31284. 800d9e4: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  31285. 800d9e8: f887 311e strb.w r3, [r7, #286] @ 0x11e
  31286. }
  31287. }
  31288. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLL3_DIVR) == RCC_PERIPHCLK_PLL3_DIVR)
  31289. 800d9ec: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  31290. 800d9f0: e9d3 2300 ldrd r2, r3, [r3]
  31291. 800d9f4: 2100 movs r1, #0
  31292. 800d9f6: 6039 str r1, [r7, #0]
  31293. 800d9f8: f003 0320 and.w r3, r3, #32
  31294. 800d9fc: 607b str r3, [r7, #4]
  31295. 800d9fe: e9d7 1200 ldrd r1, r2, [r7]
  31296. 800da02: 460b mov r3, r1
  31297. 800da04: 4313 orrs r3, r2
  31298. 800da06: d011 beq.n 800da2c <HAL_RCCEx_PeriphCLKConfig+0x13bc>
  31299. {
  31300. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE);
  31301. 800da08: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  31302. 800da0c: 3328 adds r3, #40 @ 0x28
  31303. 800da0e: 2102 movs r1, #2
  31304. 800da10: 4618 mov r0, r3
  31305. 800da12: f001 fa5d bl 800eed0 <RCCEx_PLL3_Config>
  31306. 800da16: 4603 mov r3, r0
  31307. 800da18: f887 311f strb.w r3, [r7, #287] @ 0x11f
  31308. if (ret == HAL_OK)
  31309. 800da1c: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  31310. 800da20: 2b00 cmp r3, #0
  31311. 800da22: d003 beq.n 800da2c <HAL_RCCEx_PeriphCLKConfig+0x13bc>
  31312. /*Nothing to do*/
  31313. }
  31314. else
  31315. {
  31316. /* set overall return value */
  31317. status = ret;
  31318. 800da24: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  31319. 800da28: f887 311e strb.w r3, [r7, #286] @ 0x11e
  31320. }
  31321. }
  31322. if (status == HAL_OK)
  31323. 800da2c: f897 311e ldrb.w r3, [r7, #286] @ 0x11e
  31324. 800da30: 2b00 cmp r3, #0
  31325. 800da32: d101 bne.n 800da38 <HAL_RCCEx_PeriphCLKConfig+0x13c8>
  31326. {
  31327. return HAL_OK;
  31328. 800da34: 2300 movs r3, #0
  31329. 800da36: e000 b.n 800da3a <HAL_RCCEx_PeriphCLKConfig+0x13ca>
  31330. }
  31331. return HAL_ERROR;
  31332. 800da38: 2301 movs r3, #1
  31333. }
  31334. 800da3a: 4618 mov r0, r3
  31335. 800da3c: f507 7790 add.w r7, r7, #288 @ 0x120
  31336. 800da40: 46bd mov sp, r7
  31337. 800da42: e8bd 8fb0 ldmia.w sp!, {r4, r5, r7, r8, r9, sl, fp, pc}
  31338. 800da46: bf00 nop
  31339. 800da48: 58024400 .word 0x58024400
  31340. 0800da4c <HAL_RCCEx_GetPeriphCLKFreq>:
  31341. * @retval Frequency in KHz
  31342. *
  31343. * (*) : Available on some STM32H7 lines only.
  31344. */
  31345. uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint64_t PeriphClk)
  31346. {
  31347. 800da4c: b580 push {r7, lr}
  31348. 800da4e: b090 sub sp, #64 @ 0x40
  31349. 800da50: af00 add r7, sp, #0
  31350. 800da52: e9c7 0100 strd r0, r1, [r7]
  31351. /* This variable is used to store the SAI and CKP clock source */
  31352. uint32_t saiclocksource;
  31353. uint32_t ckpclocksource;
  31354. uint32_t srcclk;
  31355. if (PeriphClk == RCC_PERIPHCLK_SAI1)
  31356. 800da56: e9d7 2300 ldrd r2, r3, [r7]
  31357. 800da5a: f5a2 7180 sub.w r1, r2, #256 @ 0x100
  31358. 800da5e: 430b orrs r3, r1
  31359. 800da60: f040 8094 bne.w 800db8c <HAL_RCCEx_GetPeriphCLKFreq+0x140>
  31360. {
  31361. saiclocksource = __HAL_RCC_GET_SAI1_SOURCE();
  31362. 800da64: 4b9e ldr r3, [pc, #632] @ (800dce0 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  31363. 800da66: 6d1b ldr r3, [r3, #80] @ 0x50
  31364. 800da68: f003 0307 and.w r3, r3, #7
  31365. 800da6c: 633b str r3, [r7, #48] @ 0x30
  31366. switch (saiclocksource)
  31367. 800da6e: 6b3b ldr r3, [r7, #48] @ 0x30
  31368. 800da70: 2b04 cmp r3, #4
  31369. 800da72: f200 8087 bhi.w 800db84 <HAL_RCCEx_GetPeriphCLKFreq+0x138>
  31370. 800da76: a201 add r2, pc, #4 @ (adr r2, 800da7c <HAL_RCCEx_GetPeriphCLKFreq+0x30>)
  31371. 800da78: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  31372. 800da7c: 0800da91 .word 0x0800da91
  31373. 800da80: 0800dab9 .word 0x0800dab9
  31374. 800da84: 0800dae1 .word 0x0800dae1
  31375. 800da88: 0800db7d .word 0x0800db7d
  31376. 800da8c: 0800db09 .word 0x0800db09
  31377. {
  31378. case RCC_SAI1CLKSOURCE_PLL: /* PLL1 is the clock source for SAI1 */
  31379. {
  31380. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
  31381. 800da90: 4b93 ldr r3, [pc, #588] @ (800dce0 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  31382. 800da92: 681b ldr r3, [r3, #0]
  31383. 800da94: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  31384. 800da98: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  31385. 800da9c: d108 bne.n 800dab0 <HAL_RCCEx_GetPeriphCLKFreq+0x64>
  31386. {
  31387. HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
  31388. 800da9e: f107 0324 add.w r3, r7, #36 @ 0x24
  31389. 800daa2: 4618 mov r0, r3
  31390. 800daa4: f001 f810 bl 800eac8 <HAL_RCCEx_GetPLL1ClockFreq>
  31391. frequency = pll1_clocks.PLL1_Q_Frequency;
  31392. 800daa8: 6abb ldr r3, [r7, #40] @ 0x28
  31393. 800daaa: 63fb str r3, [r7, #60] @ 0x3c
  31394. }
  31395. else
  31396. {
  31397. frequency = 0;
  31398. }
  31399. break;
  31400. 800daac: f000 bd45 b.w 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31401. frequency = 0;
  31402. 800dab0: 2300 movs r3, #0
  31403. 800dab2: 63fb str r3, [r7, #60] @ 0x3c
  31404. break;
  31405. 800dab4: f000 bd41 b.w 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31406. }
  31407. case RCC_SAI1CLKSOURCE_PLL2: /* PLL2 is the clock source for SAI1 */
  31408. {
  31409. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  31410. 800dab8: 4b89 ldr r3, [pc, #548] @ (800dce0 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  31411. 800daba: 681b ldr r3, [r3, #0]
  31412. 800dabc: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  31413. 800dac0: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  31414. 800dac4: d108 bne.n 800dad8 <HAL_RCCEx_GetPeriphCLKFreq+0x8c>
  31415. {
  31416. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  31417. 800dac6: f107 0318 add.w r3, r7, #24
  31418. 800daca: 4618 mov r0, r3
  31419. 800dacc: f000 fd54 bl 800e578 <HAL_RCCEx_GetPLL2ClockFreq>
  31420. frequency = pll2_clocks.PLL2_P_Frequency;
  31421. 800dad0: 69bb ldr r3, [r7, #24]
  31422. 800dad2: 63fb str r3, [r7, #60] @ 0x3c
  31423. }
  31424. else
  31425. {
  31426. frequency = 0;
  31427. }
  31428. break;
  31429. 800dad4: f000 bd31 b.w 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31430. frequency = 0;
  31431. 800dad8: 2300 movs r3, #0
  31432. 800dada: 63fb str r3, [r7, #60] @ 0x3c
  31433. break;
  31434. 800dadc: f000 bd2d b.w 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31435. }
  31436. case RCC_SAI1CLKSOURCE_PLL3: /* PLL3 is the clock source for SAI1 */
  31437. {
  31438. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
  31439. 800dae0: 4b7f ldr r3, [pc, #508] @ (800dce0 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  31440. 800dae2: 681b ldr r3, [r3, #0]
  31441. 800dae4: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  31442. 800dae8: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  31443. 800daec: d108 bne.n 800db00 <HAL_RCCEx_GetPeriphCLKFreq+0xb4>
  31444. {
  31445. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  31446. 800daee: f107 030c add.w r3, r7, #12
  31447. 800daf2: 4618 mov r0, r3
  31448. 800daf4: f000 fe94 bl 800e820 <HAL_RCCEx_GetPLL3ClockFreq>
  31449. frequency = pll3_clocks.PLL3_P_Frequency;
  31450. 800daf8: 68fb ldr r3, [r7, #12]
  31451. 800dafa: 63fb str r3, [r7, #60] @ 0x3c
  31452. }
  31453. else
  31454. {
  31455. frequency = 0;
  31456. }
  31457. break;
  31458. 800dafc: f000 bd1d b.w 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31459. frequency = 0;
  31460. 800db00: 2300 movs r3, #0
  31461. 800db02: 63fb str r3, [r7, #60] @ 0x3c
  31462. break;
  31463. 800db04: f000 bd19 b.w 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31464. }
  31465. case RCC_SAI1CLKSOURCE_CLKP: /* CKPER is the clock source for SAI1*/
  31466. {
  31467. ckpclocksource = __HAL_RCC_GET_CLKP_SOURCE();
  31468. 800db08: 4b75 ldr r3, [pc, #468] @ (800dce0 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  31469. 800db0a: 6cdb ldr r3, [r3, #76] @ 0x4c
  31470. 800db0c: f003 5340 and.w r3, r3, #805306368 @ 0x30000000
  31471. 800db10: 637b str r3, [r7, #52] @ 0x34
  31472. if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSI))
  31473. 800db12: 4b73 ldr r3, [pc, #460] @ (800dce0 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  31474. 800db14: 681b ldr r3, [r3, #0]
  31475. 800db16: f003 0304 and.w r3, r3, #4
  31476. 800db1a: 2b04 cmp r3, #4
  31477. 800db1c: d10c bne.n 800db38 <HAL_RCCEx_GetPeriphCLKFreq+0xec>
  31478. 800db1e: 6b7b ldr r3, [r7, #52] @ 0x34
  31479. 800db20: 2b00 cmp r3, #0
  31480. 800db22: d109 bne.n 800db38 <HAL_RCCEx_GetPeriphCLKFreq+0xec>
  31481. {
  31482. /* In Case the CKPER Source is HSI */
  31483. frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  31484. 800db24: 4b6e ldr r3, [pc, #440] @ (800dce0 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  31485. 800db26: 681b ldr r3, [r3, #0]
  31486. 800db28: 08db lsrs r3, r3, #3
  31487. 800db2a: f003 0303 and.w r3, r3, #3
  31488. 800db2e: 4a6d ldr r2, [pc, #436] @ (800dce4 <HAL_RCCEx_GetPeriphCLKFreq+0x298>)
  31489. 800db30: fa22 f303 lsr.w r3, r2, r3
  31490. 800db34: 63fb str r3, [r7, #60] @ 0x3c
  31491. 800db36: e01f b.n 800db78 <HAL_RCCEx_GetPeriphCLKFreq+0x12c>
  31492. }
  31493. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_CSI))
  31494. 800db38: 4b69 ldr r3, [pc, #420] @ (800dce0 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  31495. 800db3a: 681b ldr r3, [r3, #0]
  31496. 800db3c: f403 7380 and.w r3, r3, #256 @ 0x100
  31497. 800db40: f5b3 7f80 cmp.w r3, #256 @ 0x100
  31498. 800db44: d106 bne.n 800db54 <HAL_RCCEx_GetPeriphCLKFreq+0x108>
  31499. 800db46: 6b7b ldr r3, [r7, #52] @ 0x34
  31500. 800db48: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  31501. 800db4c: d102 bne.n 800db54 <HAL_RCCEx_GetPeriphCLKFreq+0x108>
  31502. {
  31503. /* In Case the CKPER Source is CSI */
  31504. frequency = CSI_VALUE;
  31505. 800db4e: 4b66 ldr r3, [pc, #408] @ (800dce8 <HAL_RCCEx_GetPeriphCLKFreq+0x29c>)
  31506. 800db50: 63fb str r3, [r7, #60] @ 0x3c
  31507. 800db52: e011 b.n 800db78 <HAL_RCCEx_GetPeriphCLKFreq+0x12c>
  31508. }
  31509. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSE))
  31510. 800db54: 4b62 ldr r3, [pc, #392] @ (800dce0 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  31511. 800db56: 681b ldr r3, [r3, #0]
  31512. 800db58: f403 3300 and.w r3, r3, #131072 @ 0x20000
  31513. 800db5c: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  31514. 800db60: d106 bne.n 800db70 <HAL_RCCEx_GetPeriphCLKFreq+0x124>
  31515. 800db62: 6b7b ldr r3, [r7, #52] @ 0x34
  31516. 800db64: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  31517. 800db68: d102 bne.n 800db70 <HAL_RCCEx_GetPeriphCLKFreq+0x124>
  31518. {
  31519. /* In Case the CKPER Source is HSE */
  31520. frequency = HSE_VALUE;
  31521. 800db6a: 4b60 ldr r3, [pc, #384] @ (800dcec <HAL_RCCEx_GetPeriphCLKFreq+0x2a0>)
  31522. 800db6c: 63fb str r3, [r7, #60] @ 0x3c
  31523. 800db6e: e003 b.n 800db78 <HAL_RCCEx_GetPeriphCLKFreq+0x12c>
  31524. }
  31525. else
  31526. {
  31527. /* In Case the CKPER is disabled*/
  31528. frequency = 0;
  31529. 800db70: 2300 movs r3, #0
  31530. 800db72: 63fb str r3, [r7, #60] @ 0x3c
  31531. }
  31532. break;
  31533. 800db74: f000 bce1 b.w 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31534. 800db78: f000 bcdf b.w 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31535. }
  31536. case (RCC_SAI1CLKSOURCE_PIN): /* External clock is the clock source for SAI1 */
  31537. {
  31538. frequency = EXTERNAL_CLOCK_VALUE;
  31539. 800db7c: 4b5c ldr r3, [pc, #368] @ (800dcf0 <HAL_RCCEx_GetPeriphCLKFreq+0x2a4>)
  31540. 800db7e: 63fb str r3, [r7, #60] @ 0x3c
  31541. break;
  31542. 800db80: f000 bcdb b.w 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31543. }
  31544. default :
  31545. {
  31546. frequency = 0;
  31547. 800db84: 2300 movs r3, #0
  31548. 800db86: 63fb str r3, [r7, #60] @ 0x3c
  31549. break;
  31550. 800db88: f000 bcd7 b.w 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31551. }
  31552. }
  31553. }
  31554. #if defined(SAI3)
  31555. else if (PeriphClk == RCC_PERIPHCLK_SAI23)
  31556. 800db8c: e9d7 2300 ldrd r2, r3, [r7]
  31557. 800db90: f5a2 7100 sub.w r1, r2, #512 @ 0x200
  31558. 800db94: 430b orrs r3, r1
  31559. 800db96: f040 80ad bne.w 800dcf4 <HAL_RCCEx_GetPeriphCLKFreq+0x2a8>
  31560. {
  31561. saiclocksource = __HAL_RCC_GET_SAI23_SOURCE();
  31562. 800db9a: 4b51 ldr r3, [pc, #324] @ (800dce0 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  31563. 800db9c: 6d1b ldr r3, [r3, #80] @ 0x50
  31564. 800db9e: f403 73e0 and.w r3, r3, #448 @ 0x1c0
  31565. 800dba2: 633b str r3, [r7, #48] @ 0x30
  31566. switch (saiclocksource)
  31567. 800dba4: 6b3b ldr r3, [r7, #48] @ 0x30
  31568. 800dba6: f5b3 7f80 cmp.w r3, #256 @ 0x100
  31569. 800dbaa: d056 beq.n 800dc5a <HAL_RCCEx_GetPeriphCLKFreq+0x20e>
  31570. 800dbac: 6b3b ldr r3, [r7, #48] @ 0x30
  31571. 800dbae: f5b3 7f80 cmp.w r3, #256 @ 0x100
  31572. 800dbb2: f200 8090 bhi.w 800dcd6 <HAL_RCCEx_GetPeriphCLKFreq+0x28a>
  31573. 800dbb6: 6b3b ldr r3, [r7, #48] @ 0x30
  31574. 800dbb8: 2bc0 cmp r3, #192 @ 0xc0
  31575. 800dbba: f000 8088 beq.w 800dcce <HAL_RCCEx_GetPeriphCLKFreq+0x282>
  31576. 800dbbe: 6b3b ldr r3, [r7, #48] @ 0x30
  31577. 800dbc0: 2bc0 cmp r3, #192 @ 0xc0
  31578. 800dbc2: f200 8088 bhi.w 800dcd6 <HAL_RCCEx_GetPeriphCLKFreq+0x28a>
  31579. 800dbc6: 6b3b ldr r3, [r7, #48] @ 0x30
  31580. 800dbc8: 2b80 cmp r3, #128 @ 0x80
  31581. 800dbca: d032 beq.n 800dc32 <HAL_RCCEx_GetPeriphCLKFreq+0x1e6>
  31582. 800dbcc: 6b3b ldr r3, [r7, #48] @ 0x30
  31583. 800dbce: 2b80 cmp r3, #128 @ 0x80
  31584. 800dbd0: f200 8081 bhi.w 800dcd6 <HAL_RCCEx_GetPeriphCLKFreq+0x28a>
  31585. 800dbd4: 6b3b ldr r3, [r7, #48] @ 0x30
  31586. 800dbd6: 2b00 cmp r3, #0
  31587. 800dbd8: d003 beq.n 800dbe2 <HAL_RCCEx_GetPeriphCLKFreq+0x196>
  31588. 800dbda: 6b3b ldr r3, [r7, #48] @ 0x30
  31589. 800dbdc: 2b40 cmp r3, #64 @ 0x40
  31590. 800dbde: d014 beq.n 800dc0a <HAL_RCCEx_GetPeriphCLKFreq+0x1be>
  31591. 800dbe0: e079 b.n 800dcd6 <HAL_RCCEx_GetPeriphCLKFreq+0x28a>
  31592. {
  31593. case RCC_SAI23CLKSOURCE_PLL: /* PLL1 is the clock source for SAI2/3 */
  31594. {
  31595. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
  31596. 800dbe2: 4b3f ldr r3, [pc, #252] @ (800dce0 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  31597. 800dbe4: 681b ldr r3, [r3, #0]
  31598. 800dbe6: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  31599. 800dbea: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  31600. 800dbee: d108 bne.n 800dc02 <HAL_RCCEx_GetPeriphCLKFreq+0x1b6>
  31601. {
  31602. HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
  31603. 800dbf0: f107 0324 add.w r3, r7, #36 @ 0x24
  31604. 800dbf4: 4618 mov r0, r3
  31605. 800dbf6: f000 ff67 bl 800eac8 <HAL_RCCEx_GetPLL1ClockFreq>
  31606. frequency = pll1_clocks.PLL1_Q_Frequency;
  31607. 800dbfa: 6abb ldr r3, [r7, #40] @ 0x28
  31608. 800dbfc: 63fb str r3, [r7, #60] @ 0x3c
  31609. }
  31610. else
  31611. {
  31612. frequency = 0;
  31613. }
  31614. break;
  31615. 800dbfe: f000 bc9c b.w 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31616. frequency = 0;
  31617. 800dc02: 2300 movs r3, #0
  31618. 800dc04: 63fb str r3, [r7, #60] @ 0x3c
  31619. break;
  31620. 800dc06: f000 bc98 b.w 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31621. }
  31622. case RCC_SAI23CLKSOURCE_PLL2: /* PLL2 is the clock source for SAI2/3 */
  31623. {
  31624. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  31625. 800dc0a: 4b35 ldr r3, [pc, #212] @ (800dce0 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  31626. 800dc0c: 681b ldr r3, [r3, #0]
  31627. 800dc0e: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  31628. 800dc12: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  31629. 800dc16: d108 bne.n 800dc2a <HAL_RCCEx_GetPeriphCLKFreq+0x1de>
  31630. {
  31631. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  31632. 800dc18: f107 0318 add.w r3, r7, #24
  31633. 800dc1c: 4618 mov r0, r3
  31634. 800dc1e: f000 fcab bl 800e578 <HAL_RCCEx_GetPLL2ClockFreq>
  31635. frequency = pll2_clocks.PLL2_P_Frequency;
  31636. 800dc22: 69bb ldr r3, [r7, #24]
  31637. 800dc24: 63fb str r3, [r7, #60] @ 0x3c
  31638. }
  31639. else
  31640. {
  31641. frequency = 0;
  31642. }
  31643. break;
  31644. 800dc26: f000 bc88 b.w 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31645. frequency = 0;
  31646. 800dc2a: 2300 movs r3, #0
  31647. 800dc2c: 63fb str r3, [r7, #60] @ 0x3c
  31648. break;
  31649. 800dc2e: f000 bc84 b.w 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31650. }
  31651. case RCC_SAI23CLKSOURCE_PLL3: /* PLL3 is the clock source for SAI2/3 */
  31652. {
  31653. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
  31654. 800dc32: 4b2b ldr r3, [pc, #172] @ (800dce0 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  31655. 800dc34: 681b ldr r3, [r3, #0]
  31656. 800dc36: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  31657. 800dc3a: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  31658. 800dc3e: d108 bne.n 800dc52 <HAL_RCCEx_GetPeriphCLKFreq+0x206>
  31659. {
  31660. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  31661. 800dc40: f107 030c add.w r3, r7, #12
  31662. 800dc44: 4618 mov r0, r3
  31663. 800dc46: f000 fdeb bl 800e820 <HAL_RCCEx_GetPLL3ClockFreq>
  31664. frequency = pll3_clocks.PLL3_P_Frequency;
  31665. 800dc4a: 68fb ldr r3, [r7, #12]
  31666. 800dc4c: 63fb str r3, [r7, #60] @ 0x3c
  31667. }
  31668. else
  31669. {
  31670. frequency = 0;
  31671. }
  31672. break;
  31673. 800dc4e: f000 bc74 b.w 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31674. frequency = 0;
  31675. 800dc52: 2300 movs r3, #0
  31676. 800dc54: 63fb str r3, [r7, #60] @ 0x3c
  31677. break;
  31678. 800dc56: f000 bc70 b.w 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31679. }
  31680. case RCC_SAI23CLKSOURCE_CLKP: /* CKPER is the clock source for SAI2/3 */
  31681. {
  31682. ckpclocksource = __HAL_RCC_GET_CLKP_SOURCE();
  31683. 800dc5a: 4b21 ldr r3, [pc, #132] @ (800dce0 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  31684. 800dc5c: 6cdb ldr r3, [r3, #76] @ 0x4c
  31685. 800dc5e: f003 5340 and.w r3, r3, #805306368 @ 0x30000000
  31686. 800dc62: 637b str r3, [r7, #52] @ 0x34
  31687. if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSI))
  31688. 800dc64: 4b1e ldr r3, [pc, #120] @ (800dce0 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  31689. 800dc66: 681b ldr r3, [r3, #0]
  31690. 800dc68: f003 0304 and.w r3, r3, #4
  31691. 800dc6c: 2b04 cmp r3, #4
  31692. 800dc6e: d10c bne.n 800dc8a <HAL_RCCEx_GetPeriphCLKFreq+0x23e>
  31693. 800dc70: 6b7b ldr r3, [r7, #52] @ 0x34
  31694. 800dc72: 2b00 cmp r3, #0
  31695. 800dc74: d109 bne.n 800dc8a <HAL_RCCEx_GetPeriphCLKFreq+0x23e>
  31696. {
  31697. /* In Case the CKPER Source is HSI */
  31698. frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  31699. 800dc76: 4b1a ldr r3, [pc, #104] @ (800dce0 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  31700. 800dc78: 681b ldr r3, [r3, #0]
  31701. 800dc7a: 08db lsrs r3, r3, #3
  31702. 800dc7c: f003 0303 and.w r3, r3, #3
  31703. 800dc80: 4a18 ldr r2, [pc, #96] @ (800dce4 <HAL_RCCEx_GetPeriphCLKFreq+0x298>)
  31704. 800dc82: fa22 f303 lsr.w r3, r2, r3
  31705. 800dc86: 63fb str r3, [r7, #60] @ 0x3c
  31706. 800dc88: e01f b.n 800dcca <HAL_RCCEx_GetPeriphCLKFreq+0x27e>
  31707. }
  31708. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_CSI))
  31709. 800dc8a: 4b15 ldr r3, [pc, #84] @ (800dce0 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  31710. 800dc8c: 681b ldr r3, [r3, #0]
  31711. 800dc8e: f403 7380 and.w r3, r3, #256 @ 0x100
  31712. 800dc92: f5b3 7f80 cmp.w r3, #256 @ 0x100
  31713. 800dc96: d106 bne.n 800dca6 <HAL_RCCEx_GetPeriphCLKFreq+0x25a>
  31714. 800dc98: 6b7b ldr r3, [r7, #52] @ 0x34
  31715. 800dc9a: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  31716. 800dc9e: d102 bne.n 800dca6 <HAL_RCCEx_GetPeriphCLKFreq+0x25a>
  31717. {
  31718. /* In Case the CKPER Source is CSI */
  31719. frequency = CSI_VALUE;
  31720. 800dca0: 4b11 ldr r3, [pc, #68] @ (800dce8 <HAL_RCCEx_GetPeriphCLKFreq+0x29c>)
  31721. 800dca2: 63fb str r3, [r7, #60] @ 0x3c
  31722. 800dca4: e011 b.n 800dcca <HAL_RCCEx_GetPeriphCLKFreq+0x27e>
  31723. }
  31724. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSE))
  31725. 800dca6: 4b0e ldr r3, [pc, #56] @ (800dce0 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  31726. 800dca8: 681b ldr r3, [r3, #0]
  31727. 800dcaa: f403 3300 and.w r3, r3, #131072 @ 0x20000
  31728. 800dcae: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  31729. 800dcb2: d106 bne.n 800dcc2 <HAL_RCCEx_GetPeriphCLKFreq+0x276>
  31730. 800dcb4: 6b7b ldr r3, [r7, #52] @ 0x34
  31731. 800dcb6: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  31732. 800dcba: d102 bne.n 800dcc2 <HAL_RCCEx_GetPeriphCLKFreq+0x276>
  31733. {
  31734. /* In Case the CKPER Source is HSE */
  31735. frequency = HSE_VALUE;
  31736. 800dcbc: 4b0b ldr r3, [pc, #44] @ (800dcec <HAL_RCCEx_GetPeriphCLKFreq+0x2a0>)
  31737. 800dcbe: 63fb str r3, [r7, #60] @ 0x3c
  31738. 800dcc0: e003 b.n 800dcca <HAL_RCCEx_GetPeriphCLKFreq+0x27e>
  31739. }
  31740. else
  31741. {
  31742. /* In Case the CKPER is disabled*/
  31743. frequency = 0;
  31744. 800dcc2: 2300 movs r3, #0
  31745. 800dcc4: 63fb str r3, [r7, #60] @ 0x3c
  31746. }
  31747. break;
  31748. 800dcc6: f000 bc38 b.w 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31749. 800dcca: f000 bc36 b.w 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31750. }
  31751. case (RCC_SAI23CLKSOURCE_PIN): /* External clock is the clock source for SAI2/3 */
  31752. {
  31753. frequency = EXTERNAL_CLOCK_VALUE;
  31754. 800dcce: 4b08 ldr r3, [pc, #32] @ (800dcf0 <HAL_RCCEx_GetPeriphCLKFreq+0x2a4>)
  31755. 800dcd0: 63fb str r3, [r7, #60] @ 0x3c
  31756. break;
  31757. 800dcd2: f000 bc32 b.w 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31758. }
  31759. default :
  31760. {
  31761. frequency = 0;
  31762. 800dcd6: 2300 movs r3, #0
  31763. 800dcd8: 63fb str r3, [r7, #60] @ 0x3c
  31764. break;
  31765. 800dcda: f000 bc2e b.w 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31766. 800dcde: bf00 nop
  31767. 800dce0: 58024400 .word 0x58024400
  31768. 800dce4: 03d09000 .word 0x03d09000
  31769. 800dce8: 003d0900 .word 0x003d0900
  31770. 800dcec: 017d7840 .word 0x017d7840
  31771. 800dcf0: 00bb8000 .word 0x00bb8000
  31772. }
  31773. }
  31774. #endif
  31775. #if defined(SAI4)
  31776. else if (PeriphClk == RCC_PERIPHCLK_SAI4A)
  31777. 800dcf4: e9d7 2300 ldrd r2, r3, [r7]
  31778. 800dcf8: f5a2 6180 sub.w r1, r2, #1024 @ 0x400
  31779. 800dcfc: 430b orrs r3, r1
  31780. 800dcfe: f040 809c bne.w 800de3a <HAL_RCCEx_GetPeriphCLKFreq+0x3ee>
  31781. {
  31782. saiclocksource = __HAL_RCC_GET_SAI4A_SOURCE();
  31783. 800dd02: 4b9e ldr r3, [pc, #632] @ (800df7c <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  31784. 800dd04: 6d9b ldr r3, [r3, #88] @ 0x58
  31785. 800dd06: f403 0360 and.w r3, r3, #14680064 @ 0xe00000
  31786. 800dd0a: 633b str r3, [r7, #48] @ 0x30
  31787. switch (saiclocksource)
  31788. 800dd0c: 6b3b ldr r3, [r7, #48] @ 0x30
  31789. 800dd0e: f5b3 0f00 cmp.w r3, #8388608 @ 0x800000
  31790. 800dd12: d054 beq.n 800ddbe <HAL_RCCEx_GetPeriphCLKFreq+0x372>
  31791. 800dd14: 6b3b ldr r3, [r7, #48] @ 0x30
  31792. 800dd16: f5b3 0f00 cmp.w r3, #8388608 @ 0x800000
  31793. 800dd1a: f200 808b bhi.w 800de34 <HAL_RCCEx_GetPeriphCLKFreq+0x3e8>
  31794. 800dd1e: 6b3b ldr r3, [r7, #48] @ 0x30
  31795. 800dd20: f5b3 0fc0 cmp.w r3, #6291456 @ 0x600000
  31796. 800dd24: f000 8083 beq.w 800de2e <HAL_RCCEx_GetPeriphCLKFreq+0x3e2>
  31797. 800dd28: 6b3b ldr r3, [r7, #48] @ 0x30
  31798. 800dd2a: f5b3 0fc0 cmp.w r3, #6291456 @ 0x600000
  31799. 800dd2e: f200 8081 bhi.w 800de34 <HAL_RCCEx_GetPeriphCLKFreq+0x3e8>
  31800. 800dd32: 6b3b ldr r3, [r7, #48] @ 0x30
  31801. 800dd34: f5b3 0f80 cmp.w r3, #4194304 @ 0x400000
  31802. 800dd38: d02f beq.n 800dd9a <HAL_RCCEx_GetPeriphCLKFreq+0x34e>
  31803. 800dd3a: 6b3b ldr r3, [r7, #48] @ 0x30
  31804. 800dd3c: f5b3 0f80 cmp.w r3, #4194304 @ 0x400000
  31805. 800dd40: d878 bhi.n 800de34 <HAL_RCCEx_GetPeriphCLKFreq+0x3e8>
  31806. 800dd42: 6b3b ldr r3, [r7, #48] @ 0x30
  31807. 800dd44: 2b00 cmp r3, #0
  31808. 800dd46: d004 beq.n 800dd52 <HAL_RCCEx_GetPeriphCLKFreq+0x306>
  31809. 800dd48: 6b3b ldr r3, [r7, #48] @ 0x30
  31810. 800dd4a: f5b3 1f00 cmp.w r3, #2097152 @ 0x200000
  31811. 800dd4e: d012 beq.n 800dd76 <HAL_RCCEx_GetPeriphCLKFreq+0x32a>
  31812. 800dd50: e070 b.n 800de34 <HAL_RCCEx_GetPeriphCLKFreq+0x3e8>
  31813. {
  31814. case RCC_SAI4ACLKSOURCE_PLL: /* PLL1 is the clock source for SAI4A */
  31815. {
  31816. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
  31817. 800dd52: 4b8a ldr r3, [pc, #552] @ (800df7c <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  31818. 800dd54: 681b ldr r3, [r3, #0]
  31819. 800dd56: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  31820. 800dd5a: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  31821. 800dd5e: d107 bne.n 800dd70 <HAL_RCCEx_GetPeriphCLKFreq+0x324>
  31822. {
  31823. HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
  31824. 800dd60: f107 0324 add.w r3, r7, #36 @ 0x24
  31825. 800dd64: 4618 mov r0, r3
  31826. 800dd66: f000 feaf bl 800eac8 <HAL_RCCEx_GetPLL1ClockFreq>
  31827. frequency = pll1_clocks.PLL1_Q_Frequency;
  31828. 800dd6a: 6abb ldr r3, [r7, #40] @ 0x28
  31829. 800dd6c: 63fb str r3, [r7, #60] @ 0x3c
  31830. }
  31831. else
  31832. {
  31833. frequency = 0;
  31834. }
  31835. break;
  31836. 800dd6e: e3e4 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31837. frequency = 0;
  31838. 800dd70: 2300 movs r3, #0
  31839. 800dd72: 63fb str r3, [r7, #60] @ 0x3c
  31840. break;
  31841. 800dd74: e3e1 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31842. }
  31843. case RCC_SAI4ACLKSOURCE_PLL2: /* PLLI2 is the clock source for SAI4A */
  31844. {
  31845. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  31846. 800dd76: 4b81 ldr r3, [pc, #516] @ (800df7c <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  31847. 800dd78: 681b ldr r3, [r3, #0]
  31848. 800dd7a: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  31849. 800dd7e: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  31850. 800dd82: d107 bne.n 800dd94 <HAL_RCCEx_GetPeriphCLKFreq+0x348>
  31851. {
  31852. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  31853. 800dd84: f107 0318 add.w r3, r7, #24
  31854. 800dd88: 4618 mov r0, r3
  31855. 800dd8a: f000 fbf5 bl 800e578 <HAL_RCCEx_GetPLL2ClockFreq>
  31856. frequency = pll2_clocks.PLL2_P_Frequency;
  31857. 800dd8e: 69bb ldr r3, [r7, #24]
  31858. 800dd90: 63fb str r3, [r7, #60] @ 0x3c
  31859. }
  31860. else
  31861. {
  31862. frequency = 0;
  31863. }
  31864. break;
  31865. 800dd92: e3d2 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31866. frequency = 0;
  31867. 800dd94: 2300 movs r3, #0
  31868. 800dd96: 63fb str r3, [r7, #60] @ 0x3c
  31869. break;
  31870. 800dd98: e3cf b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31871. }
  31872. case RCC_SAI4ACLKSOURCE_PLL3: /* PLLI3 is the clock source for SAI4A */
  31873. {
  31874. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
  31875. 800dd9a: 4b78 ldr r3, [pc, #480] @ (800df7c <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  31876. 800dd9c: 681b ldr r3, [r3, #0]
  31877. 800dd9e: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  31878. 800dda2: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  31879. 800dda6: d107 bne.n 800ddb8 <HAL_RCCEx_GetPeriphCLKFreq+0x36c>
  31880. {
  31881. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  31882. 800dda8: f107 030c add.w r3, r7, #12
  31883. 800ddac: 4618 mov r0, r3
  31884. 800ddae: f000 fd37 bl 800e820 <HAL_RCCEx_GetPLL3ClockFreq>
  31885. frequency = pll3_clocks.PLL3_P_Frequency;
  31886. 800ddb2: 68fb ldr r3, [r7, #12]
  31887. 800ddb4: 63fb str r3, [r7, #60] @ 0x3c
  31888. }
  31889. else
  31890. {
  31891. frequency = 0;
  31892. }
  31893. break;
  31894. 800ddb6: e3c0 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31895. frequency = 0;
  31896. 800ddb8: 2300 movs r3, #0
  31897. 800ddba: 63fb str r3, [r7, #60] @ 0x3c
  31898. break;
  31899. 800ddbc: e3bd b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31900. }
  31901. case RCC_SAI4ACLKSOURCE_CLKP: /* CKPER is the clock source for SAI4A*/
  31902. {
  31903. ckpclocksource = __HAL_RCC_GET_CLKP_SOURCE();
  31904. 800ddbe: 4b6f ldr r3, [pc, #444] @ (800df7c <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  31905. 800ddc0: 6cdb ldr r3, [r3, #76] @ 0x4c
  31906. 800ddc2: f003 5340 and.w r3, r3, #805306368 @ 0x30000000
  31907. 800ddc6: 637b str r3, [r7, #52] @ 0x34
  31908. if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSI))
  31909. 800ddc8: 4b6c ldr r3, [pc, #432] @ (800df7c <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  31910. 800ddca: 681b ldr r3, [r3, #0]
  31911. 800ddcc: f003 0304 and.w r3, r3, #4
  31912. 800ddd0: 2b04 cmp r3, #4
  31913. 800ddd2: d10c bne.n 800ddee <HAL_RCCEx_GetPeriphCLKFreq+0x3a2>
  31914. 800ddd4: 6b7b ldr r3, [r7, #52] @ 0x34
  31915. 800ddd6: 2b00 cmp r3, #0
  31916. 800ddd8: d109 bne.n 800ddee <HAL_RCCEx_GetPeriphCLKFreq+0x3a2>
  31917. {
  31918. /* In Case the CKPER Source is HSI */
  31919. frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  31920. 800ddda: 4b68 ldr r3, [pc, #416] @ (800df7c <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  31921. 800dddc: 681b ldr r3, [r3, #0]
  31922. 800ddde: 08db lsrs r3, r3, #3
  31923. 800dde0: f003 0303 and.w r3, r3, #3
  31924. 800dde4: 4a66 ldr r2, [pc, #408] @ (800df80 <HAL_RCCEx_GetPeriphCLKFreq+0x534>)
  31925. 800dde6: fa22 f303 lsr.w r3, r2, r3
  31926. 800ddea: 63fb str r3, [r7, #60] @ 0x3c
  31927. 800ddec: e01e b.n 800de2c <HAL_RCCEx_GetPeriphCLKFreq+0x3e0>
  31928. }
  31929. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_CSI))
  31930. 800ddee: 4b63 ldr r3, [pc, #396] @ (800df7c <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  31931. 800ddf0: 681b ldr r3, [r3, #0]
  31932. 800ddf2: f403 7380 and.w r3, r3, #256 @ 0x100
  31933. 800ddf6: f5b3 7f80 cmp.w r3, #256 @ 0x100
  31934. 800ddfa: d106 bne.n 800de0a <HAL_RCCEx_GetPeriphCLKFreq+0x3be>
  31935. 800ddfc: 6b7b ldr r3, [r7, #52] @ 0x34
  31936. 800ddfe: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  31937. 800de02: d102 bne.n 800de0a <HAL_RCCEx_GetPeriphCLKFreq+0x3be>
  31938. {
  31939. /* In Case the CKPER Source is CSI */
  31940. frequency = CSI_VALUE;
  31941. 800de04: 4b5f ldr r3, [pc, #380] @ (800df84 <HAL_RCCEx_GetPeriphCLKFreq+0x538>)
  31942. 800de06: 63fb str r3, [r7, #60] @ 0x3c
  31943. 800de08: e010 b.n 800de2c <HAL_RCCEx_GetPeriphCLKFreq+0x3e0>
  31944. }
  31945. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSE))
  31946. 800de0a: 4b5c ldr r3, [pc, #368] @ (800df7c <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  31947. 800de0c: 681b ldr r3, [r3, #0]
  31948. 800de0e: f403 3300 and.w r3, r3, #131072 @ 0x20000
  31949. 800de12: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  31950. 800de16: d106 bne.n 800de26 <HAL_RCCEx_GetPeriphCLKFreq+0x3da>
  31951. 800de18: 6b7b ldr r3, [r7, #52] @ 0x34
  31952. 800de1a: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  31953. 800de1e: d102 bne.n 800de26 <HAL_RCCEx_GetPeriphCLKFreq+0x3da>
  31954. {
  31955. /* In Case the CKPER Source is HSE */
  31956. frequency = HSE_VALUE;
  31957. 800de20: 4b59 ldr r3, [pc, #356] @ (800df88 <HAL_RCCEx_GetPeriphCLKFreq+0x53c>)
  31958. 800de22: 63fb str r3, [r7, #60] @ 0x3c
  31959. 800de24: e002 b.n 800de2c <HAL_RCCEx_GetPeriphCLKFreq+0x3e0>
  31960. }
  31961. else
  31962. {
  31963. /* In Case the CKPER is disabled*/
  31964. frequency = 0;
  31965. 800de26: 2300 movs r3, #0
  31966. 800de28: 63fb str r3, [r7, #60] @ 0x3c
  31967. }
  31968. break;
  31969. 800de2a: e386 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31970. 800de2c: e385 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31971. }
  31972. case RCC_SAI4ACLKSOURCE_PIN: /* External clock is the clock source for SAI4A */
  31973. {
  31974. frequency = EXTERNAL_CLOCK_VALUE;
  31975. 800de2e: 4b57 ldr r3, [pc, #348] @ (800df8c <HAL_RCCEx_GetPeriphCLKFreq+0x540>)
  31976. 800de30: 63fb str r3, [r7, #60] @ 0x3c
  31977. break;
  31978. 800de32: e382 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31979. }
  31980. default :
  31981. {
  31982. frequency = 0;
  31983. 800de34: 2300 movs r3, #0
  31984. 800de36: 63fb str r3, [r7, #60] @ 0x3c
  31985. break;
  31986. 800de38: e37f b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  31987. }
  31988. }
  31989. }
  31990. else if (PeriphClk == RCC_PERIPHCLK_SAI4B)
  31991. 800de3a: e9d7 2300 ldrd r2, r3, [r7]
  31992. 800de3e: f5a2 6100 sub.w r1, r2, #2048 @ 0x800
  31993. 800de42: 430b orrs r3, r1
  31994. 800de44: f040 80a7 bne.w 800df96 <HAL_RCCEx_GetPeriphCLKFreq+0x54a>
  31995. {
  31996. saiclocksource = __HAL_RCC_GET_SAI4B_SOURCE();
  31997. 800de48: 4b4c ldr r3, [pc, #304] @ (800df7c <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  31998. 800de4a: 6d9b ldr r3, [r3, #88] @ 0x58
  31999. 800de4c: f003 63e0 and.w r3, r3, #117440512 @ 0x7000000
  32000. 800de50: 633b str r3, [r7, #48] @ 0x30
  32001. switch (saiclocksource)
  32002. 800de52: 6b3b ldr r3, [r7, #48] @ 0x30
  32003. 800de54: f1b3 6f80 cmp.w r3, #67108864 @ 0x4000000
  32004. 800de58: d055 beq.n 800df06 <HAL_RCCEx_GetPeriphCLKFreq+0x4ba>
  32005. 800de5a: 6b3b ldr r3, [r7, #48] @ 0x30
  32006. 800de5c: f1b3 6f80 cmp.w r3, #67108864 @ 0x4000000
  32007. 800de60: f200 8096 bhi.w 800df90 <HAL_RCCEx_GetPeriphCLKFreq+0x544>
  32008. 800de64: 6b3b ldr r3, [r7, #48] @ 0x30
  32009. 800de66: f1b3 7f40 cmp.w r3, #50331648 @ 0x3000000
  32010. 800de6a: f000 8084 beq.w 800df76 <HAL_RCCEx_GetPeriphCLKFreq+0x52a>
  32011. 800de6e: 6b3b ldr r3, [r7, #48] @ 0x30
  32012. 800de70: f1b3 7f40 cmp.w r3, #50331648 @ 0x3000000
  32013. 800de74: f200 808c bhi.w 800df90 <HAL_RCCEx_GetPeriphCLKFreq+0x544>
  32014. 800de78: 6b3b ldr r3, [r7, #48] @ 0x30
  32015. 800de7a: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  32016. 800de7e: d030 beq.n 800dee2 <HAL_RCCEx_GetPeriphCLKFreq+0x496>
  32017. 800de80: 6b3b ldr r3, [r7, #48] @ 0x30
  32018. 800de82: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  32019. 800de86: f200 8083 bhi.w 800df90 <HAL_RCCEx_GetPeriphCLKFreq+0x544>
  32020. 800de8a: 6b3b ldr r3, [r7, #48] @ 0x30
  32021. 800de8c: 2b00 cmp r3, #0
  32022. 800de8e: d004 beq.n 800de9a <HAL_RCCEx_GetPeriphCLKFreq+0x44e>
  32023. 800de90: 6b3b ldr r3, [r7, #48] @ 0x30
  32024. 800de92: f1b3 7f80 cmp.w r3, #16777216 @ 0x1000000
  32025. 800de96: d012 beq.n 800debe <HAL_RCCEx_GetPeriphCLKFreq+0x472>
  32026. 800de98: e07a b.n 800df90 <HAL_RCCEx_GetPeriphCLKFreq+0x544>
  32027. {
  32028. case RCC_SAI4BCLKSOURCE_PLL: /* PLL1 is the clock source for SAI4B */
  32029. {
  32030. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
  32031. 800de9a: 4b38 ldr r3, [pc, #224] @ (800df7c <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  32032. 800de9c: 681b ldr r3, [r3, #0]
  32033. 800de9e: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  32034. 800dea2: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  32035. 800dea6: d107 bne.n 800deb8 <HAL_RCCEx_GetPeriphCLKFreq+0x46c>
  32036. {
  32037. HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
  32038. 800dea8: f107 0324 add.w r3, r7, #36 @ 0x24
  32039. 800deac: 4618 mov r0, r3
  32040. 800deae: f000 fe0b bl 800eac8 <HAL_RCCEx_GetPLL1ClockFreq>
  32041. frequency = pll1_clocks.PLL1_Q_Frequency;
  32042. 800deb2: 6abb ldr r3, [r7, #40] @ 0x28
  32043. 800deb4: 63fb str r3, [r7, #60] @ 0x3c
  32044. }
  32045. else
  32046. {
  32047. frequency = 0;
  32048. }
  32049. break;
  32050. 800deb6: e340 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32051. frequency = 0;
  32052. 800deb8: 2300 movs r3, #0
  32053. 800deba: 63fb str r3, [r7, #60] @ 0x3c
  32054. break;
  32055. 800debc: e33d b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32056. }
  32057. case RCC_SAI4BCLKSOURCE_PLL2: /* PLLI2 is the clock source for SAI4B */
  32058. {
  32059. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  32060. 800debe: 4b2f ldr r3, [pc, #188] @ (800df7c <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  32061. 800dec0: 681b ldr r3, [r3, #0]
  32062. 800dec2: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  32063. 800dec6: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  32064. 800deca: d107 bne.n 800dedc <HAL_RCCEx_GetPeriphCLKFreq+0x490>
  32065. {
  32066. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  32067. 800decc: f107 0318 add.w r3, r7, #24
  32068. 800ded0: 4618 mov r0, r3
  32069. 800ded2: f000 fb51 bl 800e578 <HAL_RCCEx_GetPLL2ClockFreq>
  32070. frequency = pll2_clocks.PLL2_P_Frequency;
  32071. 800ded6: 69bb ldr r3, [r7, #24]
  32072. 800ded8: 63fb str r3, [r7, #60] @ 0x3c
  32073. }
  32074. else
  32075. {
  32076. frequency = 0;
  32077. }
  32078. break;
  32079. 800deda: e32e b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32080. frequency = 0;
  32081. 800dedc: 2300 movs r3, #0
  32082. 800dede: 63fb str r3, [r7, #60] @ 0x3c
  32083. break;
  32084. 800dee0: e32b b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32085. }
  32086. case RCC_SAI4BCLKSOURCE_PLL3: /* PLLI3 is the clock source for SAI4B */
  32087. {
  32088. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
  32089. 800dee2: 4b26 ldr r3, [pc, #152] @ (800df7c <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  32090. 800dee4: 681b ldr r3, [r3, #0]
  32091. 800dee6: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  32092. 800deea: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  32093. 800deee: d107 bne.n 800df00 <HAL_RCCEx_GetPeriphCLKFreq+0x4b4>
  32094. {
  32095. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  32096. 800def0: f107 030c add.w r3, r7, #12
  32097. 800def4: 4618 mov r0, r3
  32098. 800def6: f000 fc93 bl 800e820 <HAL_RCCEx_GetPLL3ClockFreq>
  32099. frequency = pll3_clocks.PLL3_P_Frequency;
  32100. 800defa: 68fb ldr r3, [r7, #12]
  32101. 800defc: 63fb str r3, [r7, #60] @ 0x3c
  32102. }
  32103. else
  32104. {
  32105. frequency = 0;
  32106. }
  32107. break;
  32108. 800defe: e31c b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32109. frequency = 0;
  32110. 800df00: 2300 movs r3, #0
  32111. 800df02: 63fb str r3, [r7, #60] @ 0x3c
  32112. break;
  32113. 800df04: e319 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32114. }
  32115. case RCC_SAI4BCLKSOURCE_CLKP: /* CKPER is the clock source for SAI4B*/
  32116. {
  32117. ckpclocksource = __HAL_RCC_GET_CLKP_SOURCE();
  32118. 800df06: 4b1d ldr r3, [pc, #116] @ (800df7c <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  32119. 800df08: 6cdb ldr r3, [r3, #76] @ 0x4c
  32120. 800df0a: f003 5340 and.w r3, r3, #805306368 @ 0x30000000
  32121. 800df0e: 637b str r3, [r7, #52] @ 0x34
  32122. if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSI))
  32123. 800df10: 4b1a ldr r3, [pc, #104] @ (800df7c <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  32124. 800df12: 681b ldr r3, [r3, #0]
  32125. 800df14: f003 0304 and.w r3, r3, #4
  32126. 800df18: 2b04 cmp r3, #4
  32127. 800df1a: d10c bne.n 800df36 <HAL_RCCEx_GetPeriphCLKFreq+0x4ea>
  32128. 800df1c: 6b7b ldr r3, [r7, #52] @ 0x34
  32129. 800df1e: 2b00 cmp r3, #0
  32130. 800df20: d109 bne.n 800df36 <HAL_RCCEx_GetPeriphCLKFreq+0x4ea>
  32131. {
  32132. /* In Case the CKPER Source is HSI */
  32133. frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  32134. 800df22: 4b16 ldr r3, [pc, #88] @ (800df7c <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  32135. 800df24: 681b ldr r3, [r3, #0]
  32136. 800df26: 08db lsrs r3, r3, #3
  32137. 800df28: f003 0303 and.w r3, r3, #3
  32138. 800df2c: 4a14 ldr r2, [pc, #80] @ (800df80 <HAL_RCCEx_GetPeriphCLKFreq+0x534>)
  32139. 800df2e: fa22 f303 lsr.w r3, r2, r3
  32140. 800df32: 63fb str r3, [r7, #60] @ 0x3c
  32141. 800df34: e01e b.n 800df74 <HAL_RCCEx_GetPeriphCLKFreq+0x528>
  32142. }
  32143. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_CSI))
  32144. 800df36: 4b11 ldr r3, [pc, #68] @ (800df7c <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  32145. 800df38: 681b ldr r3, [r3, #0]
  32146. 800df3a: f403 7380 and.w r3, r3, #256 @ 0x100
  32147. 800df3e: f5b3 7f80 cmp.w r3, #256 @ 0x100
  32148. 800df42: d106 bne.n 800df52 <HAL_RCCEx_GetPeriphCLKFreq+0x506>
  32149. 800df44: 6b7b ldr r3, [r7, #52] @ 0x34
  32150. 800df46: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  32151. 800df4a: d102 bne.n 800df52 <HAL_RCCEx_GetPeriphCLKFreq+0x506>
  32152. {
  32153. /* In Case the CKPER Source is CSI */
  32154. frequency = CSI_VALUE;
  32155. 800df4c: 4b0d ldr r3, [pc, #52] @ (800df84 <HAL_RCCEx_GetPeriphCLKFreq+0x538>)
  32156. 800df4e: 63fb str r3, [r7, #60] @ 0x3c
  32157. 800df50: e010 b.n 800df74 <HAL_RCCEx_GetPeriphCLKFreq+0x528>
  32158. }
  32159. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSE))
  32160. 800df52: 4b0a ldr r3, [pc, #40] @ (800df7c <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  32161. 800df54: 681b ldr r3, [r3, #0]
  32162. 800df56: f403 3300 and.w r3, r3, #131072 @ 0x20000
  32163. 800df5a: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  32164. 800df5e: d106 bne.n 800df6e <HAL_RCCEx_GetPeriphCLKFreq+0x522>
  32165. 800df60: 6b7b ldr r3, [r7, #52] @ 0x34
  32166. 800df62: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  32167. 800df66: d102 bne.n 800df6e <HAL_RCCEx_GetPeriphCLKFreq+0x522>
  32168. {
  32169. /* In Case the CKPER Source is HSE */
  32170. frequency = HSE_VALUE;
  32171. 800df68: 4b07 ldr r3, [pc, #28] @ (800df88 <HAL_RCCEx_GetPeriphCLKFreq+0x53c>)
  32172. 800df6a: 63fb str r3, [r7, #60] @ 0x3c
  32173. 800df6c: e002 b.n 800df74 <HAL_RCCEx_GetPeriphCLKFreq+0x528>
  32174. }
  32175. else
  32176. {
  32177. /* In Case the CKPER is disabled*/
  32178. frequency = 0;
  32179. 800df6e: 2300 movs r3, #0
  32180. 800df70: 63fb str r3, [r7, #60] @ 0x3c
  32181. }
  32182. break;
  32183. 800df72: e2e2 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32184. 800df74: e2e1 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32185. }
  32186. case RCC_SAI4BCLKSOURCE_PIN: /* External clock is the clock source for SAI4B */
  32187. {
  32188. frequency = EXTERNAL_CLOCK_VALUE;
  32189. 800df76: 4b05 ldr r3, [pc, #20] @ (800df8c <HAL_RCCEx_GetPeriphCLKFreq+0x540>)
  32190. 800df78: 63fb str r3, [r7, #60] @ 0x3c
  32191. break;
  32192. 800df7a: e2de b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32193. 800df7c: 58024400 .word 0x58024400
  32194. 800df80: 03d09000 .word 0x03d09000
  32195. 800df84: 003d0900 .word 0x003d0900
  32196. 800df88: 017d7840 .word 0x017d7840
  32197. 800df8c: 00bb8000 .word 0x00bb8000
  32198. }
  32199. default :
  32200. {
  32201. frequency = 0;
  32202. 800df90: 2300 movs r3, #0
  32203. 800df92: 63fb str r3, [r7, #60] @ 0x3c
  32204. break;
  32205. 800df94: e2d1 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32206. }
  32207. }
  32208. }
  32209. #endif /*SAI4*/
  32210. else if (PeriphClk == RCC_PERIPHCLK_SPI123)
  32211. 800df96: e9d7 2300 ldrd r2, r3, [r7]
  32212. 800df9a: f5a2 5180 sub.w r1, r2, #4096 @ 0x1000
  32213. 800df9e: 430b orrs r3, r1
  32214. 800dfa0: f040 809c bne.w 800e0dc <HAL_RCCEx_GetPeriphCLKFreq+0x690>
  32215. {
  32216. /* Get SPI1/2/3 clock source */
  32217. srcclk = __HAL_RCC_GET_SPI123_SOURCE();
  32218. 800dfa4: 4b93 ldr r3, [pc, #588] @ (800e1f4 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  32219. 800dfa6: 6d1b ldr r3, [r3, #80] @ 0x50
  32220. 800dfa8: f403 43e0 and.w r3, r3, #28672 @ 0x7000
  32221. 800dfac: 63bb str r3, [r7, #56] @ 0x38
  32222. switch (srcclk)
  32223. 800dfae: 6bbb ldr r3, [r7, #56] @ 0x38
  32224. 800dfb0: f5b3 4f80 cmp.w r3, #16384 @ 0x4000
  32225. 800dfb4: d054 beq.n 800e060 <HAL_RCCEx_GetPeriphCLKFreq+0x614>
  32226. 800dfb6: 6bbb ldr r3, [r7, #56] @ 0x38
  32227. 800dfb8: f5b3 4f80 cmp.w r3, #16384 @ 0x4000
  32228. 800dfbc: f200 808b bhi.w 800e0d6 <HAL_RCCEx_GetPeriphCLKFreq+0x68a>
  32229. 800dfc0: 6bbb ldr r3, [r7, #56] @ 0x38
  32230. 800dfc2: f5b3 5f40 cmp.w r3, #12288 @ 0x3000
  32231. 800dfc6: f000 8083 beq.w 800e0d0 <HAL_RCCEx_GetPeriphCLKFreq+0x684>
  32232. 800dfca: 6bbb ldr r3, [r7, #56] @ 0x38
  32233. 800dfcc: f5b3 5f40 cmp.w r3, #12288 @ 0x3000
  32234. 800dfd0: f200 8081 bhi.w 800e0d6 <HAL_RCCEx_GetPeriphCLKFreq+0x68a>
  32235. 800dfd4: 6bbb ldr r3, [r7, #56] @ 0x38
  32236. 800dfd6: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  32237. 800dfda: d02f beq.n 800e03c <HAL_RCCEx_GetPeriphCLKFreq+0x5f0>
  32238. 800dfdc: 6bbb ldr r3, [r7, #56] @ 0x38
  32239. 800dfde: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  32240. 800dfe2: d878 bhi.n 800e0d6 <HAL_RCCEx_GetPeriphCLKFreq+0x68a>
  32241. 800dfe4: 6bbb ldr r3, [r7, #56] @ 0x38
  32242. 800dfe6: 2b00 cmp r3, #0
  32243. 800dfe8: d004 beq.n 800dff4 <HAL_RCCEx_GetPeriphCLKFreq+0x5a8>
  32244. 800dfea: 6bbb ldr r3, [r7, #56] @ 0x38
  32245. 800dfec: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  32246. 800dff0: d012 beq.n 800e018 <HAL_RCCEx_GetPeriphCLKFreq+0x5cc>
  32247. 800dff2: e070 b.n 800e0d6 <HAL_RCCEx_GetPeriphCLKFreq+0x68a>
  32248. {
  32249. case RCC_SPI123CLKSOURCE_PLL: /* PLL1 is the clock source for SPI123 */
  32250. {
  32251. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
  32252. 800dff4: 4b7f ldr r3, [pc, #508] @ (800e1f4 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  32253. 800dff6: 681b ldr r3, [r3, #0]
  32254. 800dff8: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  32255. 800dffc: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  32256. 800e000: d107 bne.n 800e012 <HAL_RCCEx_GetPeriphCLKFreq+0x5c6>
  32257. {
  32258. HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
  32259. 800e002: f107 0324 add.w r3, r7, #36 @ 0x24
  32260. 800e006: 4618 mov r0, r3
  32261. 800e008: f000 fd5e bl 800eac8 <HAL_RCCEx_GetPLL1ClockFreq>
  32262. frequency = pll1_clocks.PLL1_Q_Frequency;
  32263. 800e00c: 6abb ldr r3, [r7, #40] @ 0x28
  32264. 800e00e: 63fb str r3, [r7, #60] @ 0x3c
  32265. }
  32266. else
  32267. {
  32268. frequency = 0;
  32269. }
  32270. break;
  32271. 800e010: e293 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32272. frequency = 0;
  32273. 800e012: 2300 movs r3, #0
  32274. 800e014: 63fb str r3, [r7, #60] @ 0x3c
  32275. break;
  32276. 800e016: e290 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32277. }
  32278. case RCC_SPI123CLKSOURCE_PLL2: /* PLL2 is the clock source for SPI123 */
  32279. {
  32280. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  32281. 800e018: 4b76 ldr r3, [pc, #472] @ (800e1f4 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  32282. 800e01a: 681b ldr r3, [r3, #0]
  32283. 800e01c: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  32284. 800e020: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  32285. 800e024: d107 bne.n 800e036 <HAL_RCCEx_GetPeriphCLKFreq+0x5ea>
  32286. {
  32287. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  32288. 800e026: f107 0318 add.w r3, r7, #24
  32289. 800e02a: 4618 mov r0, r3
  32290. 800e02c: f000 faa4 bl 800e578 <HAL_RCCEx_GetPLL2ClockFreq>
  32291. frequency = pll2_clocks.PLL2_P_Frequency;
  32292. 800e030: 69bb ldr r3, [r7, #24]
  32293. 800e032: 63fb str r3, [r7, #60] @ 0x3c
  32294. }
  32295. else
  32296. {
  32297. frequency = 0;
  32298. }
  32299. break;
  32300. 800e034: e281 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32301. frequency = 0;
  32302. 800e036: 2300 movs r3, #0
  32303. 800e038: 63fb str r3, [r7, #60] @ 0x3c
  32304. break;
  32305. 800e03a: e27e b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32306. }
  32307. case RCC_SPI123CLKSOURCE_PLL3: /* PLL3 is the clock source for SPI123 */
  32308. {
  32309. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
  32310. 800e03c: 4b6d ldr r3, [pc, #436] @ (800e1f4 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  32311. 800e03e: 681b ldr r3, [r3, #0]
  32312. 800e040: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  32313. 800e044: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  32314. 800e048: d107 bne.n 800e05a <HAL_RCCEx_GetPeriphCLKFreq+0x60e>
  32315. {
  32316. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  32317. 800e04a: f107 030c add.w r3, r7, #12
  32318. 800e04e: 4618 mov r0, r3
  32319. 800e050: f000 fbe6 bl 800e820 <HAL_RCCEx_GetPLL3ClockFreq>
  32320. frequency = pll3_clocks.PLL3_P_Frequency;
  32321. 800e054: 68fb ldr r3, [r7, #12]
  32322. 800e056: 63fb str r3, [r7, #60] @ 0x3c
  32323. }
  32324. else
  32325. {
  32326. frequency = 0;
  32327. }
  32328. break;
  32329. 800e058: e26f b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32330. frequency = 0;
  32331. 800e05a: 2300 movs r3, #0
  32332. 800e05c: 63fb str r3, [r7, #60] @ 0x3c
  32333. break;
  32334. 800e05e: e26c b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32335. }
  32336. case RCC_SPI123CLKSOURCE_CLKP: /* CKPER is the clock source for SPI123 */
  32337. {
  32338. ckpclocksource = __HAL_RCC_GET_CLKP_SOURCE();
  32339. 800e060: 4b64 ldr r3, [pc, #400] @ (800e1f4 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  32340. 800e062: 6cdb ldr r3, [r3, #76] @ 0x4c
  32341. 800e064: f003 5340 and.w r3, r3, #805306368 @ 0x30000000
  32342. 800e068: 637b str r3, [r7, #52] @ 0x34
  32343. if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSI))
  32344. 800e06a: 4b62 ldr r3, [pc, #392] @ (800e1f4 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  32345. 800e06c: 681b ldr r3, [r3, #0]
  32346. 800e06e: f003 0304 and.w r3, r3, #4
  32347. 800e072: 2b04 cmp r3, #4
  32348. 800e074: d10c bne.n 800e090 <HAL_RCCEx_GetPeriphCLKFreq+0x644>
  32349. 800e076: 6b7b ldr r3, [r7, #52] @ 0x34
  32350. 800e078: 2b00 cmp r3, #0
  32351. 800e07a: d109 bne.n 800e090 <HAL_RCCEx_GetPeriphCLKFreq+0x644>
  32352. {
  32353. /* In Case the CKPER Source is HSI */
  32354. frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  32355. 800e07c: 4b5d ldr r3, [pc, #372] @ (800e1f4 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  32356. 800e07e: 681b ldr r3, [r3, #0]
  32357. 800e080: 08db lsrs r3, r3, #3
  32358. 800e082: f003 0303 and.w r3, r3, #3
  32359. 800e086: 4a5c ldr r2, [pc, #368] @ (800e1f8 <HAL_RCCEx_GetPeriphCLKFreq+0x7ac>)
  32360. 800e088: fa22 f303 lsr.w r3, r2, r3
  32361. 800e08c: 63fb str r3, [r7, #60] @ 0x3c
  32362. 800e08e: e01e b.n 800e0ce <HAL_RCCEx_GetPeriphCLKFreq+0x682>
  32363. }
  32364. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_CSI))
  32365. 800e090: 4b58 ldr r3, [pc, #352] @ (800e1f4 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  32366. 800e092: 681b ldr r3, [r3, #0]
  32367. 800e094: f403 7380 and.w r3, r3, #256 @ 0x100
  32368. 800e098: f5b3 7f80 cmp.w r3, #256 @ 0x100
  32369. 800e09c: d106 bne.n 800e0ac <HAL_RCCEx_GetPeriphCLKFreq+0x660>
  32370. 800e09e: 6b7b ldr r3, [r7, #52] @ 0x34
  32371. 800e0a0: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  32372. 800e0a4: d102 bne.n 800e0ac <HAL_RCCEx_GetPeriphCLKFreq+0x660>
  32373. {
  32374. /* In Case the CKPER Source is CSI */
  32375. frequency = CSI_VALUE;
  32376. 800e0a6: 4b55 ldr r3, [pc, #340] @ (800e1fc <HAL_RCCEx_GetPeriphCLKFreq+0x7b0>)
  32377. 800e0a8: 63fb str r3, [r7, #60] @ 0x3c
  32378. 800e0aa: e010 b.n 800e0ce <HAL_RCCEx_GetPeriphCLKFreq+0x682>
  32379. }
  32380. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSE))
  32381. 800e0ac: 4b51 ldr r3, [pc, #324] @ (800e1f4 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  32382. 800e0ae: 681b ldr r3, [r3, #0]
  32383. 800e0b0: f403 3300 and.w r3, r3, #131072 @ 0x20000
  32384. 800e0b4: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  32385. 800e0b8: d106 bne.n 800e0c8 <HAL_RCCEx_GetPeriphCLKFreq+0x67c>
  32386. 800e0ba: 6b7b ldr r3, [r7, #52] @ 0x34
  32387. 800e0bc: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  32388. 800e0c0: d102 bne.n 800e0c8 <HAL_RCCEx_GetPeriphCLKFreq+0x67c>
  32389. {
  32390. /* In Case the CKPER Source is HSE */
  32391. frequency = HSE_VALUE;
  32392. 800e0c2: 4b4f ldr r3, [pc, #316] @ (800e200 <HAL_RCCEx_GetPeriphCLKFreq+0x7b4>)
  32393. 800e0c4: 63fb str r3, [r7, #60] @ 0x3c
  32394. 800e0c6: e002 b.n 800e0ce <HAL_RCCEx_GetPeriphCLKFreq+0x682>
  32395. }
  32396. else
  32397. {
  32398. /* In Case the CKPER is disabled*/
  32399. frequency = 0;
  32400. 800e0c8: 2300 movs r3, #0
  32401. 800e0ca: 63fb str r3, [r7, #60] @ 0x3c
  32402. }
  32403. break;
  32404. 800e0cc: e235 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32405. 800e0ce: e234 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32406. }
  32407. case (RCC_SPI123CLKSOURCE_PIN): /* External clock is the clock source for I2S */
  32408. {
  32409. frequency = EXTERNAL_CLOCK_VALUE;
  32410. 800e0d0: 4b4c ldr r3, [pc, #304] @ (800e204 <HAL_RCCEx_GetPeriphCLKFreq+0x7b8>)
  32411. 800e0d2: 63fb str r3, [r7, #60] @ 0x3c
  32412. break;
  32413. 800e0d4: e231 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32414. }
  32415. default :
  32416. {
  32417. frequency = 0;
  32418. 800e0d6: 2300 movs r3, #0
  32419. 800e0d8: 63fb str r3, [r7, #60] @ 0x3c
  32420. break;
  32421. 800e0da: e22e b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32422. }
  32423. }
  32424. }
  32425. else if (PeriphClk == RCC_PERIPHCLK_SPI45)
  32426. 800e0dc: e9d7 2300 ldrd r2, r3, [r7]
  32427. 800e0e0: f5a2 5100 sub.w r1, r2, #8192 @ 0x2000
  32428. 800e0e4: 430b orrs r3, r1
  32429. 800e0e6: f040 808f bne.w 800e208 <HAL_RCCEx_GetPeriphCLKFreq+0x7bc>
  32430. {
  32431. /* Get SPI45 clock source */
  32432. srcclk = __HAL_RCC_GET_SPI45_SOURCE();
  32433. 800e0ea: 4b42 ldr r3, [pc, #264] @ (800e1f4 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  32434. 800e0ec: 6d1b ldr r3, [r3, #80] @ 0x50
  32435. 800e0ee: f403 23e0 and.w r3, r3, #458752 @ 0x70000
  32436. 800e0f2: 63bb str r3, [r7, #56] @ 0x38
  32437. switch (srcclk)
  32438. 800e0f4: 6bbb ldr r3, [r7, #56] @ 0x38
  32439. 800e0f6: f5b3 2fa0 cmp.w r3, #327680 @ 0x50000
  32440. 800e0fa: d06b beq.n 800e1d4 <HAL_RCCEx_GetPeriphCLKFreq+0x788>
  32441. 800e0fc: 6bbb ldr r3, [r7, #56] @ 0x38
  32442. 800e0fe: f5b3 2fa0 cmp.w r3, #327680 @ 0x50000
  32443. 800e102: d874 bhi.n 800e1ee <HAL_RCCEx_GetPeriphCLKFreq+0x7a2>
  32444. 800e104: 6bbb ldr r3, [r7, #56] @ 0x38
  32445. 800e106: f5b3 2f80 cmp.w r3, #262144 @ 0x40000
  32446. 800e10a: d056 beq.n 800e1ba <HAL_RCCEx_GetPeriphCLKFreq+0x76e>
  32447. 800e10c: 6bbb ldr r3, [r7, #56] @ 0x38
  32448. 800e10e: f5b3 2f80 cmp.w r3, #262144 @ 0x40000
  32449. 800e112: d86c bhi.n 800e1ee <HAL_RCCEx_GetPeriphCLKFreq+0x7a2>
  32450. 800e114: 6bbb ldr r3, [r7, #56] @ 0x38
  32451. 800e116: f5b3 3f40 cmp.w r3, #196608 @ 0x30000
  32452. 800e11a: d03b beq.n 800e194 <HAL_RCCEx_GetPeriphCLKFreq+0x748>
  32453. 800e11c: 6bbb ldr r3, [r7, #56] @ 0x38
  32454. 800e11e: f5b3 3f40 cmp.w r3, #196608 @ 0x30000
  32455. 800e122: d864 bhi.n 800e1ee <HAL_RCCEx_GetPeriphCLKFreq+0x7a2>
  32456. 800e124: 6bbb ldr r3, [r7, #56] @ 0x38
  32457. 800e126: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  32458. 800e12a: d021 beq.n 800e170 <HAL_RCCEx_GetPeriphCLKFreq+0x724>
  32459. 800e12c: 6bbb ldr r3, [r7, #56] @ 0x38
  32460. 800e12e: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  32461. 800e132: d85c bhi.n 800e1ee <HAL_RCCEx_GetPeriphCLKFreq+0x7a2>
  32462. 800e134: 6bbb ldr r3, [r7, #56] @ 0x38
  32463. 800e136: 2b00 cmp r3, #0
  32464. 800e138: d004 beq.n 800e144 <HAL_RCCEx_GetPeriphCLKFreq+0x6f8>
  32465. 800e13a: 6bbb ldr r3, [r7, #56] @ 0x38
  32466. 800e13c: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  32467. 800e140: d004 beq.n 800e14c <HAL_RCCEx_GetPeriphCLKFreq+0x700>
  32468. 800e142: e054 b.n 800e1ee <HAL_RCCEx_GetPeriphCLKFreq+0x7a2>
  32469. {
  32470. case RCC_SPI45CLKSOURCE_PCLK2: /* CD/D2 PCLK2 is the clock source for SPI4/5 */
  32471. {
  32472. frequency = HAL_RCC_GetPCLK1Freq();
  32473. 800e144: f7fe fa26 bl 800c594 <HAL_RCC_GetPCLK1Freq>
  32474. 800e148: 63f8 str r0, [r7, #60] @ 0x3c
  32475. break;
  32476. 800e14a: e1f6 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32477. }
  32478. case RCC_SPI45CLKSOURCE_PLL2: /* PLL2 is the clock source for SPI45 */
  32479. {
  32480. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  32481. 800e14c: 4b29 ldr r3, [pc, #164] @ (800e1f4 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  32482. 800e14e: 681b ldr r3, [r3, #0]
  32483. 800e150: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  32484. 800e154: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  32485. 800e158: d107 bne.n 800e16a <HAL_RCCEx_GetPeriphCLKFreq+0x71e>
  32486. {
  32487. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  32488. 800e15a: f107 0318 add.w r3, r7, #24
  32489. 800e15e: 4618 mov r0, r3
  32490. 800e160: f000 fa0a bl 800e578 <HAL_RCCEx_GetPLL2ClockFreq>
  32491. frequency = pll2_clocks.PLL2_Q_Frequency;
  32492. 800e164: 69fb ldr r3, [r7, #28]
  32493. 800e166: 63fb str r3, [r7, #60] @ 0x3c
  32494. }
  32495. else
  32496. {
  32497. frequency = 0;
  32498. }
  32499. break;
  32500. 800e168: e1e7 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32501. frequency = 0;
  32502. 800e16a: 2300 movs r3, #0
  32503. 800e16c: 63fb str r3, [r7, #60] @ 0x3c
  32504. break;
  32505. 800e16e: e1e4 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32506. }
  32507. case RCC_SPI45CLKSOURCE_PLL3: /* PLL3 is the clock source for SPI45 */
  32508. {
  32509. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
  32510. 800e170: 4b20 ldr r3, [pc, #128] @ (800e1f4 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  32511. 800e172: 681b ldr r3, [r3, #0]
  32512. 800e174: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  32513. 800e178: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  32514. 800e17c: d107 bne.n 800e18e <HAL_RCCEx_GetPeriphCLKFreq+0x742>
  32515. {
  32516. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  32517. 800e17e: f107 030c add.w r3, r7, #12
  32518. 800e182: 4618 mov r0, r3
  32519. 800e184: f000 fb4c bl 800e820 <HAL_RCCEx_GetPLL3ClockFreq>
  32520. frequency = pll3_clocks.PLL3_Q_Frequency;
  32521. 800e188: 693b ldr r3, [r7, #16]
  32522. 800e18a: 63fb str r3, [r7, #60] @ 0x3c
  32523. }
  32524. else
  32525. {
  32526. frequency = 0;
  32527. }
  32528. break;
  32529. 800e18c: e1d5 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32530. frequency = 0;
  32531. 800e18e: 2300 movs r3, #0
  32532. 800e190: 63fb str r3, [r7, #60] @ 0x3c
  32533. break;
  32534. 800e192: e1d2 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32535. }
  32536. case RCC_SPI45CLKSOURCE_HSI: /* HSI is the clock source for SPI45 */
  32537. {
  32538. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY))
  32539. 800e194: 4b17 ldr r3, [pc, #92] @ (800e1f4 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  32540. 800e196: 681b ldr r3, [r3, #0]
  32541. 800e198: f003 0304 and.w r3, r3, #4
  32542. 800e19c: 2b04 cmp r3, #4
  32543. 800e19e: d109 bne.n 800e1b4 <HAL_RCCEx_GetPeriphCLKFreq+0x768>
  32544. {
  32545. frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  32546. 800e1a0: 4b14 ldr r3, [pc, #80] @ (800e1f4 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  32547. 800e1a2: 681b ldr r3, [r3, #0]
  32548. 800e1a4: 08db lsrs r3, r3, #3
  32549. 800e1a6: f003 0303 and.w r3, r3, #3
  32550. 800e1aa: 4a13 ldr r2, [pc, #76] @ (800e1f8 <HAL_RCCEx_GetPeriphCLKFreq+0x7ac>)
  32551. 800e1ac: fa22 f303 lsr.w r3, r2, r3
  32552. 800e1b0: 63fb str r3, [r7, #60] @ 0x3c
  32553. }
  32554. else
  32555. {
  32556. frequency = 0;
  32557. }
  32558. break;
  32559. 800e1b2: e1c2 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32560. frequency = 0;
  32561. 800e1b4: 2300 movs r3, #0
  32562. 800e1b6: 63fb str r3, [r7, #60] @ 0x3c
  32563. break;
  32564. 800e1b8: e1bf b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32565. }
  32566. case RCC_SPI45CLKSOURCE_CSI: /* CSI is the clock source for SPI45 */
  32567. {
  32568. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY))
  32569. 800e1ba: 4b0e ldr r3, [pc, #56] @ (800e1f4 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  32570. 800e1bc: 681b ldr r3, [r3, #0]
  32571. 800e1be: f403 7380 and.w r3, r3, #256 @ 0x100
  32572. 800e1c2: f5b3 7f80 cmp.w r3, #256 @ 0x100
  32573. 800e1c6: d102 bne.n 800e1ce <HAL_RCCEx_GetPeriphCLKFreq+0x782>
  32574. {
  32575. frequency = CSI_VALUE;
  32576. 800e1c8: 4b0c ldr r3, [pc, #48] @ (800e1fc <HAL_RCCEx_GetPeriphCLKFreq+0x7b0>)
  32577. 800e1ca: 63fb str r3, [r7, #60] @ 0x3c
  32578. }
  32579. else
  32580. {
  32581. frequency = 0;
  32582. }
  32583. break;
  32584. 800e1cc: e1b5 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32585. frequency = 0;
  32586. 800e1ce: 2300 movs r3, #0
  32587. 800e1d0: 63fb str r3, [r7, #60] @ 0x3c
  32588. break;
  32589. 800e1d2: e1b2 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32590. }
  32591. case RCC_SPI45CLKSOURCE_HSE: /* HSE is the clock source for SPI45 */
  32592. {
  32593. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY))
  32594. 800e1d4: 4b07 ldr r3, [pc, #28] @ (800e1f4 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  32595. 800e1d6: 681b ldr r3, [r3, #0]
  32596. 800e1d8: f403 3300 and.w r3, r3, #131072 @ 0x20000
  32597. 800e1dc: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  32598. 800e1e0: d102 bne.n 800e1e8 <HAL_RCCEx_GetPeriphCLKFreq+0x79c>
  32599. {
  32600. frequency = HSE_VALUE;
  32601. 800e1e2: 4b07 ldr r3, [pc, #28] @ (800e200 <HAL_RCCEx_GetPeriphCLKFreq+0x7b4>)
  32602. 800e1e4: 63fb str r3, [r7, #60] @ 0x3c
  32603. }
  32604. else
  32605. {
  32606. frequency = 0;
  32607. }
  32608. break;
  32609. 800e1e6: e1a8 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32610. frequency = 0;
  32611. 800e1e8: 2300 movs r3, #0
  32612. 800e1ea: 63fb str r3, [r7, #60] @ 0x3c
  32613. break;
  32614. 800e1ec: e1a5 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32615. }
  32616. default :
  32617. {
  32618. frequency = 0;
  32619. 800e1ee: 2300 movs r3, #0
  32620. 800e1f0: 63fb str r3, [r7, #60] @ 0x3c
  32621. break;
  32622. 800e1f2: e1a2 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32623. 800e1f4: 58024400 .word 0x58024400
  32624. 800e1f8: 03d09000 .word 0x03d09000
  32625. 800e1fc: 003d0900 .word 0x003d0900
  32626. 800e200: 017d7840 .word 0x017d7840
  32627. 800e204: 00bb8000 .word 0x00bb8000
  32628. }
  32629. }
  32630. }
  32631. else if (PeriphClk == RCC_PERIPHCLK_ADC)
  32632. 800e208: e9d7 2300 ldrd r2, r3, [r7]
  32633. 800e20c: f5a2 2100 sub.w r1, r2, #524288 @ 0x80000
  32634. 800e210: 430b orrs r3, r1
  32635. 800e212: d173 bne.n 800e2fc <HAL_RCCEx_GetPeriphCLKFreq+0x8b0>
  32636. {
  32637. /* Get ADC clock source */
  32638. srcclk = __HAL_RCC_GET_ADC_SOURCE();
  32639. 800e214: 4b9c ldr r3, [pc, #624] @ (800e488 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  32640. 800e216: 6d9b ldr r3, [r3, #88] @ 0x58
  32641. 800e218: f403 3340 and.w r3, r3, #196608 @ 0x30000
  32642. 800e21c: 63bb str r3, [r7, #56] @ 0x38
  32643. switch (srcclk)
  32644. 800e21e: 6bbb ldr r3, [r7, #56] @ 0x38
  32645. 800e220: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  32646. 800e224: d02f beq.n 800e286 <HAL_RCCEx_GetPeriphCLKFreq+0x83a>
  32647. 800e226: 6bbb ldr r3, [r7, #56] @ 0x38
  32648. 800e228: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  32649. 800e22c: d863 bhi.n 800e2f6 <HAL_RCCEx_GetPeriphCLKFreq+0x8aa>
  32650. 800e22e: 6bbb ldr r3, [r7, #56] @ 0x38
  32651. 800e230: 2b00 cmp r3, #0
  32652. 800e232: d004 beq.n 800e23e <HAL_RCCEx_GetPeriphCLKFreq+0x7f2>
  32653. 800e234: 6bbb ldr r3, [r7, #56] @ 0x38
  32654. 800e236: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  32655. 800e23a: d012 beq.n 800e262 <HAL_RCCEx_GetPeriphCLKFreq+0x816>
  32656. 800e23c: e05b b.n 800e2f6 <HAL_RCCEx_GetPeriphCLKFreq+0x8aa>
  32657. {
  32658. case RCC_ADCCLKSOURCE_PLL2:
  32659. {
  32660. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  32661. 800e23e: 4b92 ldr r3, [pc, #584] @ (800e488 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  32662. 800e240: 681b ldr r3, [r3, #0]
  32663. 800e242: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  32664. 800e246: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  32665. 800e24a: d107 bne.n 800e25c <HAL_RCCEx_GetPeriphCLKFreq+0x810>
  32666. {
  32667. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  32668. 800e24c: f107 0318 add.w r3, r7, #24
  32669. 800e250: 4618 mov r0, r3
  32670. 800e252: f000 f991 bl 800e578 <HAL_RCCEx_GetPLL2ClockFreq>
  32671. frequency = pll2_clocks.PLL2_P_Frequency;
  32672. 800e256: 69bb ldr r3, [r7, #24]
  32673. 800e258: 63fb str r3, [r7, #60] @ 0x3c
  32674. }
  32675. else
  32676. {
  32677. frequency = 0;
  32678. }
  32679. break;
  32680. 800e25a: e16e b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32681. frequency = 0;
  32682. 800e25c: 2300 movs r3, #0
  32683. 800e25e: 63fb str r3, [r7, #60] @ 0x3c
  32684. break;
  32685. 800e260: e16b b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32686. }
  32687. case RCC_ADCCLKSOURCE_PLL3:
  32688. {
  32689. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
  32690. 800e262: 4b89 ldr r3, [pc, #548] @ (800e488 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  32691. 800e264: 681b ldr r3, [r3, #0]
  32692. 800e266: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  32693. 800e26a: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  32694. 800e26e: d107 bne.n 800e280 <HAL_RCCEx_GetPeriphCLKFreq+0x834>
  32695. {
  32696. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  32697. 800e270: f107 030c add.w r3, r7, #12
  32698. 800e274: 4618 mov r0, r3
  32699. 800e276: f000 fad3 bl 800e820 <HAL_RCCEx_GetPLL3ClockFreq>
  32700. frequency = pll3_clocks.PLL3_R_Frequency;
  32701. 800e27a: 697b ldr r3, [r7, #20]
  32702. 800e27c: 63fb str r3, [r7, #60] @ 0x3c
  32703. }
  32704. else
  32705. {
  32706. frequency = 0;
  32707. }
  32708. break;
  32709. 800e27e: e15c b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32710. frequency = 0;
  32711. 800e280: 2300 movs r3, #0
  32712. 800e282: 63fb str r3, [r7, #60] @ 0x3c
  32713. break;
  32714. 800e284: e159 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32715. }
  32716. case RCC_ADCCLKSOURCE_CLKP:
  32717. {
  32718. ckpclocksource = __HAL_RCC_GET_CLKP_SOURCE();
  32719. 800e286: 4b80 ldr r3, [pc, #512] @ (800e488 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  32720. 800e288: 6cdb ldr r3, [r3, #76] @ 0x4c
  32721. 800e28a: f003 5340 and.w r3, r3, #805306368 @ 0x30000000
  32722. 800e28e: 637b str r3, [r7, #52] @ 0x34
  32723. if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSI))
  32724. 800e290: 4b7d ldr r3, [pc, #500] @ (800e488 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  32725. 800e292: 681b ldr r3, [r3, #0]
  32726. 800e294: f003 0304 and.w r3, r3, #4
  32727. 800e298: 2b04 cmp r3, #4
  32728. 800e29a: d10c bne.n 800e2b6 <HAL_RCCEx_GetPeriphCLKFreq+0x86a>
  32729. 800e29c: 6b7b ldr r3, [r7, #52] @ 0x34
  32730. 800e29e: 2b00 cmp r3, #0
  32731. 800e2a0: d109 bne.n 800e2b6 <HAL_RCCEx_GetPeriphCLKFreq+0x86a>
  32732. {
  32733. /* In Case the CKPER Source is HSI */
  32734. frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  32735. 800e2a2: 4b79 ldr r3, [pc, #484] @ (800e488 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  32736. 800e2a4: 681b ldr r3, [r3, #0]
  32737. 800e2a6: 08db lsrs r3, r3, #3
  32738. 800e2a8: f003 0303 and.w r3, r3, #3
  32739. 800e2ac: 4a77 ldr r2, [pc, #476] @ (800e48c <HAL_RCCEx_GetPeriphCLKFreq+0xa40>)
  32740. 800e2ae: fa22 f303 lsr.w r3, r2, r3
  32741. 800e2b2: 63fb str r3, [r7, #60] @ 0x3c
  32742. 800e2b4: e01e b.n 800e2f4 <HAL_RCCEx_GetPeriphCLKFreq+0x8a8>
  32743. }
  32744. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_CSI))
  32745. 800e2b6: 4b74 ldr r3, [pc, #464] @ (800e488 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  32746. 800e2b8: 681b ldr r3, [r3, #0]
  32747. 800e2ba: f403 7380 and.w r3, r3, #256 @ 0x100
  32748. 800e2be: f5b3 7f80 cmp.w r3, #256 @ 0x100
  32749. 800e2c2: d106 bne.n 800e2d2 <HAL_RCCEx_GetPeriphCLKFreq+0x886>
  32750. 800e2c4: 6b7b ldr r3, [r7, #52] @ 0x34
  32751. 800e2c6: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  32752. 800e2ca: d102 bne.n 800e2d2 <HAL_RCCEx_GetPeriphCLKFreq+0x886>
  32753. {
  32754. /* In Case the CKPER Source is CSI */
  32755. frequency = CSI_VALUE;
  32756. 800e2cc: 4b70 ldr r3, [pc, #448] @ (800e490 <HAL_RCCEx_GetPeriphCLKFreq+0xa44>)
  32757. 800e2ce: 63fb str r3, [r7, #60] @ 0x3c
  32758. 800e2d0: e010 b.n 800e2f4 <HAL_RCCEx_GetPeriphCLKFreq+0x8a8>
  32759. }
  32760. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSE))
  32761. 800e2d2: 4b6d ldr r3, [pc, #436] @ (800e488 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  32762. 800e2d4: 681b ldr r3, [r3, #0]
  32763. 800e2d6: f403 3300 and.w r3, r3, #131072 @ 0x20000
  32764. 800e2da: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  32765. 800e2de: d106 bne.n 800e2ee <HAL_RCCEx_GetPeriphCLKFreq+0x8a2>
  32766. 800e2e0: 6b7b ldr r3, [r7, #52] @ 0x34
  32767. 800e2e2: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  32768. 800e2e6: d102 bne.n 800e2ee <HAL_RCCEx_GetPeriphCLKFreq+0x8a2>
  32769. {
  32770. /* In Case the CKPER Source is HSE */
  32771. frequency = HSE_VALUE;
  32772. 800e2e8: 4b6a ldr r3, [pc, #424] @ (800e494 <HAL_RCCEx_GetPeriphCLKFreq+0xa48>)
  32773. 800e2ea: 63fb str r3, [r7, #60] @ 0x3c
  32774. 800e2ec: e002 b.n 800e2f4 <HAL_RCCEx_GetPeriphCLKFreq+0x8a8>
  32775. }
  32776. else
  32777. {
  32778. /* In Case the CKPER is disabled*/
  32779. frequency = 0;
  32780. 800e2ee: 2300 movs r3, #0
  32781. 800e2f0: 63fb str r3, [r7, #60] @ 0x3c
  32782. }
  32783. break;
  32784. 800e2f2: e122 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32785. 800e2f4: e121 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32786. }
  32787. default :
  32788. {
  32789. frequency = 0;
  32790. 800e2f6: 2300 movs r3, #0
  32791. 800e2f8: 63fb str r3, [r7, #60] @ 0x3c
  32792. break;
  32793. 800e2fa: e11e b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32794. }
  32795. }
  32796. }
  32797. else if (PeriphClk == RCC_PERIPHCLK_SDMMC)
  32798. 800e2fc: e9d7 2300 ldrd r2, r3, [r7]
  32799. 800e300: f5a2 3180 sub.w r1, r2, #65536 @ 0x10000
  32800. 800e304: 430b orrs r3, r1
  32801. 800e306: d133 bne.n 800e370 <HAL_RCCEx_GetPeriphCLKFreq+0x924>
  32802. {
  32803. /* Get SDMMC clock source */
  32804. srcclk = __HAL_RCC_GET_SDMMC_SOURCE();
  32805. 800e308: 4b5f ldr r3, [pc, #380] @ (800e488 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  32806. 800e30a: 6cdb ldr r3, [r3, #76] @ 0x4c
  32807. 800e30c: f403 3380 and.w r3, r3, #65536 @ 0x10000
  32808. 800e310: 63bb str r3, [r7, #56] @ 0x38
  32809. switch (srcclk)
  32810. 800e312: 6bbb ldr r3, [r7, #56] @ 0x38
  32811. 800e314: 2b00 cmp r3, #0
  32812. 800e316: d004 beq.n 800e322 <HAL_RCCEx_GetPeriphCLKFreq+0x8d6>
  32813. 800e318: 6bbb ldr r3, [r7, #56] @ 0x38
  32814. 800e31a: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  32815. 800e31e: d012 beq.n 800e346 <HAL_RCCEx_GetPeriphCLKFreq+0x8fa>
  32816. 800e320: e023 b.n 800e36a <HAL_RCCEx_GetPeriphCLKFreq+0x91e>
  32817. {
  32818. case RCC_SDMMCCLKSOURCE_PLL: /* PLL1 is the clock source for SDMMC */
  32819. {
  32820. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
  32821. 800e322: 4b59 ldr r3, [pc, #356] @ (800e488 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  32822. 800e324: 681b ldr r3, [r3, #0]
  32823. 800e326: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  32824. 800e32a: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  32825. 800e32e: d107 bne.n 800e340 <HAL_RCCEx_GetPeriphCLKFreq+0x8f4>
  32826. {
  32827. HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
  32828. 800e330: f107 0324 add.w r3, r7, #36 @ 0x24
  32829. 800e334: 4618 mov r0, r3
  32830. 800e336: f000 fbc7 bl 800eac8 <HAL_RCCEx_GetPLL1ClockFreq>
  32831. frequency = pll1_clocks.PLL1_Q_Frequency;
  32832. 800e33a: 6abb ldr r3, [r7, #40] @ 0x28
  32833. 800e33c: 63fb str r3, [r7, #60] @ 0x3c
  32834. }
  32835. else
  32836. {
  32837. frequency = 0;
  32838. }
  32839. break;
  32840. 800e33e: e0fc b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32841. frequency = 0;
  32842. 800e340: 2300 movs r3, #0
  32843. 800e342: 63fb str r3, [r7, #60] @ 0x3c
  32844. break;
  32845. 800e344: e0f9 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32846. }
  32847. case RCC_SDMMCCLKSOURCE_PLL2: /* PLL2 is the clock source for SDMMC */
  32848. {
  32849. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  32850. 800e346: 4b50 ldr r3, [pc, #320] @ (800e488 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  32851. 800e348: 681b ldr r3, [r3, #0]
  32852. 800e34a: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  32853. 800e34e: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  32854. 800e352: d107 bne.n 800e364 <HAL_RCCEx_GetPeriphCLKFreq+0x918>
  32855. {
  32856. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  32857. 800e354: f107 0318 add.w r3, r7, #24
  32858. 800e358: 4618 mov r0, r3
  32859. 800e35a: f000 f90d bl 800e578 <HAL_RCCEx_GetPLL2ClockFreq>
  32860. frequency = pll2_clocks.PLL2_R_Frequency;
  32861. 800e35e: 6a3b ldr r3, [r7, #32]
  32862. 800e360: 63fb str r3, [r7, #60] @ 0x3c
  32863. }
  32864. else
  32865. {
  32866. frequency = 0;
  32867. }
  32868. break;
  32869. 800e362: e0ea b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32870. frequency = 0;
  32871. 800e364: 2300 movs r3, #0
  32872. 800e366: 63fb str r3, [r7, #60] @ 0x3c
  32873. break;
  32874. 800e368: e0e7 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32875. }
  32876. default :
  32877. {
  32878. frequency = 0;
  32879. 800e36a: 2300 movs r3, #0
  32880. 800e36c: 63fb str r3, [r7, #60] @ 0x3c
  32881. break;
  32882. 800e36e: e0e4 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32883. }
  32884. }
  32885. }
  32886. else if (PeriphClk == RCC_PERIPHCLK_SPI6)
  32887. 800e370: e9d7 2300 ldrd r2, r3, [r7]
  32888. 800e374: f5a2 4180 sub.w r1, r2, #16384 @ 0x4000
  32889. 800e378: 430b orrs r3, r1
  32890. 800e37a: f040 808d bne.w 800e498 <HAL_RCCEx_GetPeriphCLKFreq+0xa4c>
  32891. {
  32892. /* Get SPI6 clock source */
  32893. srcclk = __HAL_RCC_GET_SPI6_SOURCE();
  32894. 800e37e: 4b42 ldr r3, [pc, #264] @ (800e488 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  32895. 800e380: 6d9b ldr r3, [r3, #88] @ 0x58
  32896. 800e382: f003 43e0 and.w r3, r3, #1879048192 @ 0x70000000
  32897. 800e386: 63bb str r3, [r7, #56] @ 0x38
  32898. switch (srcclk)
  32899. 800e388: 6bbb ldr r3, [r7, #56] @ 0x38
  32900. 800e38a: f1b3 4fa0 cmp.w r3, #1342177280 @ 0x50000000
  32901. 800e38e: d06b beq.n 800e468 <HAL_RCCEx_GetPeriphCLKFreq+0xa1c>
  32902. 800e390: 6bbb ldr r3, [r7, #56] @ 0x38
  32903. 800e392: f1b3 4fa0 cmp.w r3, #1342177280 @ 0x50000000
  32904. 800e396: d874 bhi.n 800e482 <HAL_RCCEx_GetPeriphCLKFreq+0xa36>
  32905. 800e398: 6bbb ldr r3, [r7, #56] @ 0x38
  32906. 800e39a: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  32907. 800e39e: d056 beq.n 800e44e <HAL_RCCEx_GetPeriphCLKFreq+0xa02>
  32908. 800e3a0: 6bbb ldr r3, [r7, #56] @ 0x38
  32909. 800e3a2: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  32910. 800e3a6: d86c bhi.n 800e482 <HAL_RCCEx_GetPeriphCLKFreq+0xa36>
  32911. 800e3a8: 6bbb ldr r3, [r7, #56] @ 0x38
  32912. 800e3aa: f1b3 5f40 cmp.w r3, #805306368 @ 0x30000000
  32913. 800e3ae: d03b beq.n 800e428 <HAL_RCCEx_GetPeriphCLKFreq+0x9dc>
  32914. 800e3b0: 6bbb ldr r3, [r7, #56] @ 0x38
  32915. 800e3b2: f1b3 5f40 cmp.w r3, #805306368 @ 0x30000000
  32916. 800e3b6: d864 bhi.n 800e482 <HAL_RCCEx_GetPeriphCLKFreq+0xa36>
  32917. 800e3b8: 6bbb ldr r3, [r7, #56] @ 0x38
  32918. 800e3ba: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  32919. 800e3be: d021 beq.n 800e404 <HAL_RCCEx_GetPeriphCLKFreq+0x9b8>
  32920. 800e3c0: 6bbb ldr r3, [r7, #56] @ 0x38
  32921. 800e3c2: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  32922. 800e3c6: d85c bhi.n 800e482 <HAL_RCCEx_GetPeriphCLKFreq+0xa36>
  32923. 800e3c8: 6bbb ldr r3, [r7, #56] @ 0x38
  32924. 800e3ca: 2b00 cmp r3, #0
  32925. 800e3cc: d004 beq.n 800e3d8 <HAL_RCCEx_GetPeriphCLKFreq+0x98c>
  32926. 800e3ce: 6bbb ldr r3, [r7, #56] @ 0x38
  32927. 800e3d0: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  32928. 800e3d4: d004 beq.n 800e3e0 <HAL_RCCEx_GetPeriphCLKFreq+0x994>
  32929. 800e3d6: e054 b.n 800e482 <HAL_RCCEx_GetPeriphCLKFreq+0xa36>
  32930. {
  32931. case RCC_SPI6CLKSOURCE_D3PCLK1: /* D3PCLK1 (PCLK4) is the clock source for SPI6 */
  32932. {
  32933. frequency = HAL_RCCEx_GetD3PCLK1Freq();
  32934. 800e3d8: f000 f8b8 bl 800e54c <HAL_RCCEx_GetD3PCLK1Freq>
  32935. 800e3dc: 63f8 str r0, [r7, #60] @ 0x3c
  32936. break;
  32937. 800e3de: e0ac b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32938. }
  32939. case RCC_SPI6CLKSOURCE_PLL2: /* PLL2 is the clock source for SPI6 */
  32940. {
  32941. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  32942. 800e3e0: 4b29 ldr r3, [pc, #164] @ (800e488 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  32943. 800e3e2: 681b ldr r3, [r3, #0]
  32944. 800e3e4: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  32945. 800e3e8: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  32946. 800e3ec: d107 bne.n 800e3fe <HAL_RCCEx_GetPeriphCLKFreq+0x9b2>
  32947. {
  32948. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  32949. 800e3ee: f107 0318 add.w r3, r7, #24
  32950. 800e3f2: 4618 mov r0, r3
  32951. 800e3f4: f000 f8c0 bl 800e578 <HAL_RCCEx_GetPLL2ClockFreq>
  32952. frequency = pll2_clocks.PLL2_Q_Frequency;
  32953. 800e3f8: 69fb ldr r3, [r7, #28]
  32954. 800e3fa: 63fb str r3, [r7, #60] @ 0x3c
  32955. }
  32956. else
  32957. {
  32958. frequency = 0;
  32959. }
  32960. break;
  32961. 800e3fc: e09d b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32962. frequency = 0;
  32963. 800e3fe: 2300 movs r3, #0
  32964. 800e400: 63fb str r3, [r7, #60] @ 0x3c
  32965. break;
  32966. 800e402: e09a b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32967. }
  32968. case RCC_SPI6CLKSOURCE_PLL3: /* PLL3 is the clock source for SPI6 */
  32969. {
  32970. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
  32971. 800e404: 4b20 ldr r3, [pc, #128] @ (800e488 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  32972. 800e406: 681b ldr r3, [r3, #0]
  32973. 800e408: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  32974. 800e40c: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  32975. 800e410: d107 bne.n 800e422 <HAL_RCCEx_GetPeriphCLKFreq+0x9d6>
  32976. {
  32977. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  32978. 800e412: f107 030c add.w r3, r7, #12
  32979. 800e416: 4618 mov r0, r3
  32980. 800e418: f000 fa02 bl 800e820 <HAL_RCCEx_GetPLL3ClockFreq>
  32981. frequency = pll3_clocks.PLL3_Q_Frequency;
  32982. 800e41c: 693b ldr r3, [r7, #16]
  32983. 800e41e: 63fb str r3, [r7, #60] @ 0x3c
  32984. }
  32985. else
  32986. {
  32987. frequency = 0;
  32988. }
  32989. break;
  32990. 800e420: e08b b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32991. frequency = 0;
  32992. 800e422: 2300 movs r3, #0
  32993. 800e424: 63fb str r3, [r7, #60] @ 0x3c
  32994. break;
  32995. 800e426: e088 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  32996. }
  32997. case RCC_SPI6CLKSOURCE_HSI: /* HSI is the clock source for SPI6 */
  32998. {
  32999. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY))
  33000. 800e428: 4b17 ldr r3, [pc, #92] @ (800e488 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  33001. 800e42a: 681b ldr r3, [r3, #0]
  33002. 800e42c: f003 0304 and.w r3, r3, #4
  33003. 800e430: 2b04 cmp r3, #4
  33004. 800e432: d109 bne.n 800e448 <HAL_RCCEx_GetPeriphCLKFreq+0x9fc>
  33005. {
  33006. frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  33007. 800e434: 4b14 ldr r3, [pc, #80] @ (800e488 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  33008. 800e436: 681b ldr r3, [r3, #0]
  33009. 800e438: 08db lsrs r3, r3, #3
  33010. 800e43a: f003 0303 and.w r3, r3, #3
  33011. 800e43e: 4a13 ldr r2, [pc, #76] @ (800e48c <HAL_RCCEx_GetPeriphCLKFreq+0xa40>)
  33012. 800e440: fa22 f303 lsr.w r3, r2, r3
  33013. 800e444: 63fb str r3, [r7, #60] @ 0x3c
  33014. }
  33015. else
  33016. {
  33017. frequency = 0;
  33018. }
  33019. break;
  33020. 800e446: e078 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  33021. frequency = 0;
  33022. 800e448: 2300 movs r3, #0
  33023. 800e44a: 63fb str r3, [r7, #60] @ 0x3c
  33024. break;
  33025. 800e44c: e075 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  33026. }
  33027. case RCC_SPI6CLKSOURCE_CSI: /* CSI is the clock source for SPI6 */
  33028. {
  33029. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY))
  33030. 800e44e: 4b0e ldr r3, [pc, #56] @ (800e488 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  33031. 800e450: 681b ldr r3, [r3, #0]
  33032. 800e452: f403 7380 and.w r3, r3, #256 @ 0x100
  33033. 800e456: f5b3 7f80 cmp.w r3, #256 @ 0x100
  33034. 800e45a: d102 bne.n 800e462 <HAL_RCCEx_GetPeriphCLKFreq+0xa16>
  33035. {
  33036. frequency = CSI_VALUE;
  33037. 800e45c: 4b0c ldr r3, [pc, #48] @ (800e490 <HAL_RCCEx_GetPeriphCLKFreq+0xa44>)
  33038. 800e45e: 63fb str r3, [r7, #60] @ 0x3c
  33039. }
  33040. else
  33041. {
  33042. frequency = 0;
  33043. }
  33044. break;
  33045. 800e460: e06b b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  33046. frequency = 0;
  33047. 800e462: 2300 movs r3, #0
  33048. 800e464: 63fb str r3, [r7, #60] @ 0x3c
  33049. break;
  33050. 800e466: e068 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  33051. }
  33052. case RCC_SPI6CLKSOURCE_HSE: /* HSE is the clock source for SPI6 */
  33053. {
  33054. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY))
  33055. 800e468: 4b07 ldr r3, [pc, #28] @ (800e488 <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  33056. 800e46a: 681b ldr r3, [r3, #0]
  33057. 800e46c: f403 3300 and.w r3, r3, #131072 @ 0x20000
  33058. 800e470: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  33059. 800e474: d102 bne.n 800e47c <HAL_RCCEx_GetPeriphCLKFreq+0xa30>
  33060. {
  33061. frequency = HSE_VALUE;
  33062. 800e476: 4b07 ldr r3, [pc, #28] @ (800e494 <HAL_RCCEx_GetPeriphCLKFreq+0xa48>)
  33063. 800e478: 63fb str r3, [r7, #60] @ 0x3c
  33064. }
  33065. else
  33066. {
  33067. frequency = 0;
  33068. }
  33069. break;
  33070. 800e47a: e05e b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  33071. frequency = 0;
  33072. 800e47c: 2300 movs r3, #0
  33073. 800e47e: 63fb str r3, [r7, #60] @ 0x3c
  33074. break;
  33075. 800e480: e05b b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  33076. break;
  33077. }
  33078. #endif /* RCC_SPI6CLKSOURCE_PIN */
  33079. default :
  33080. {
  33081. frequency = 0;
  33082. 800e482: 2300 movs r3, #0
  33083. 800e484: 63fb str r3, [r7, #60] @ 0x3c
  33084. break;
  33085. 800e486: e058 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  33086. 800e488: 58024400 .word 0x58024400
  33087. 800e48c: 03d09000 .word 0x03d09000
  33088. 800e490: 003d0900 .word 0x003d0900
  33089. 800e494: 017d7840 .word 0x017d7840
  33090. }
  33091. }
  33092. }
  33093. else if (PeriphClk == RCC_PERIPHCLK_FDCAN)
  33094. 800e498: e9d7 2300 ldrd r2, r3, [r7]
  33095. 800e49c: f5a2 4100 sub.w r1, r2, #32768 @ 0x8000
  33096. 800e4a0: 430b orrs r3, r1
  33097. 800e4a2: d148 bne.n 800e536 <HAL_RCCEx_GetPeriphCLKFreq+0xaea>
  33098. {
  33099. /* Get FDCAN clock source */
  33100. srcclk = __HAL_RCC_GET_FDCAN_SOURCE();
  33101. 800e4a4: 4b27 ldr r3, [pc, #156] @ (800e544 <HAL_RCCEx_GetPeriphCLKFreq+0xaf8>)
  33102. 800e4a6: 6d1b ldr r3, [r3, #80] @ 0x50
  33103. 800e4a8: f003 5340 and.w r3, r3, #805306368 @ 0x30000000
  33104. 800e4ac: 63bb str r3, [r7, #56] @ 0x38
  33105. switch (srcclk)
  33106. 800e4ae: 6bbb ldr r3, [r7, #56] @ 0x38
  33107. 800e4b0: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  33108. 800e4b4: d02a beq.n 800e50c <HAL_RCCEx_GetPeriphCLKFreq+0xac0>
  33109. 800e4b6: 6bbb ldr r3, [r7, #56] @ 0x38
  33110. 800e4b8: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  33111. 800e4bc: d838 bhi.n 800e530 <HAL_RCCEx_GetPeriphCLKFreq+0xae4>
  33112. 800e4be: 6bbb ldr r3, [r7, #56] @ 0x38
  33113. 800e4c0: 2b00 cmp r3, #0
  33114. 800e4c2: d004 beq.n 800e4ce <HAL_RCCEx_GetPeriphCLKFreq+0xa82>
  33115. 800e4c4: 6bbb ldr r3, [r7, #56] @ 0x38
  33116. 800e4c6: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  33117. 800e4ca: d00d beq.n 800e4e8 <HAL_RCCEx_GetPeriphCLKFreq+0xa9c>
  33118. 800e4cc: e030 b.n 800e530 <HAL_RCCEx_GetPeriphCLKFreq+0xae4>
  33119. {
  33120. case RCC_FDCANCLKSOURCE_HSE: /* HSE is the clock source for FDCAN */
  33121. {
  33122. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY))
  33123. 800e4ce: 4b1d ldr r3, [pc, #116] @ (800e544 <HAL_RCCEx_GetPeriphCLKFreq+0xaf8>)
  33124. 800e4d0: 681b ldr r3, [r3, #0]
  33125. 800e4d2: f403 3300 and.w r3, r3, #131072 @ 0x20000
  33126. 800e4d6: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  33127. 800e4da: d102 bne.n 800e4e2 <HAL_RCCEx_GetPeriphCLKFreq+0xa96>
  33128. {
  33129. frequency = HSE_VALUE;
  33130. 800e4dc: 4b1a ldr r3, [pc, #104] @ (800e548 <HAL_RCCEx_GetPeriphCLKFreq+0xafc>)
  33131. 800e4de: 63fb str r3, [r7, #60] @ 0x3c
  33132. }
  33133. else
  33134. {
  33135. frequency = 0;
  33136. }
  33137. break;
  33138. 800e4e0: e02b b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  33139. frequency = 0;
  33140. 800e4e2: 2300 movs r3, #0
  33141. 800e4e4: 63fb str r3, [r7, #60] @ 0x3c
  33142. break;
  33143. 800e4e6: e028 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  33144. }
  33145. case RCC_FDCANCLKSOURCE_PLL: /* PLL is the clock source for FDCAN */
  33146. {
  33147. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
  33148. 800e4e8: 4b16 ldr r3, [pc, #88] @ (800e544 <HAL_RCCEx_GetPeriphCLKFreq+0xaf8>)
  33149. 800e4ea: 681b ldr r3, [r3, #0]
  33150. 800e4ec: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  33151. 800e4f0: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  33152. 800e4f4: d107 bne.n 800e506 <HAL_RCCEx_GetPeriphCLKFreq+0xaba>
  33153. {
  33154. HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
  33155. 800e4f6: f107 0324 add.w r3, r7, #36 @ 0x24
  33156. 800e4fa: 4618 mov r0, r3
  33157. 800e4fc: f000 fae4 bl 800eac8 <HAL_RCCEx_GetPLL1ClockFreq>
  33158. frequency = pll1_clocks.PLL1_Q_Frequency;
  33159. 800e500: 6abb ldr r3, [r7, #40] @ 0x28
  33160. 800e502: 63fb str r3, [r7, #60] @ 0x3c
  33161. }
  33162. else
  33163. {
  33164. frequency = 0;
  33165. }
  33166. break;
  33167. 800e504: e019 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  33168. frequency = 0;
  33169. 800e506: 2300 movs r3, #0
  33170. 800e508: 63fb str r3, [r7, #60] @ 0x3c
  33171. break;
  33172. 800e50a: e016 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  33173. }
  33174. case RCC_FDCANCLKSOURCE_PLL2: /* PLL2 is the clock source for FDCAN */
  33175. {
  33176. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  33177. 800e50c: 4b0d ldr r3, [pc, #52] @ (800e544 <HAL_RCCEx_GetPeriphCLKFreq+0xaf8>)
  33178. 800e50e: 681b ldr r3, [r3, #0]
  33179. 800e510: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  33180. 800e514: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  33181. 800e518: d107 bne.n 800e52a <HAL_RCCEx_GetPeriphCLKFreq+0xade>
  33182. {
  33183. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  33184. 800e51a: f107 0318 add.w r3, r7, #24
  33185. 800e51e: 4618 mov r0, r3
  33186. 800e520: f000 f82a bl 800e578 <HAL_RCCEx_GetPLL2ClockFreq>
  33187. frequency = pll2_clocks.PLL2_Q_Frequency;
  33188. 800e524: 69fb ldr r3, [r7, #28]
  33189. 800e526: 63fb str r3, [r7, #60] @ 0x3c
  33190. }
  33191. else
  33192. {
  33193. frequency = 0;
  33194. }
  33195. break;
  33196. 800e528: e007 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  33197. frequency = 0;
  33198. 800e52a: 2300 movs r3, #0
  33199. 800e52c: 63fb str r3, [r7, #60] @ 0x3c
  33200. break;
  33201. 800e52e: e004 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  33202. }
  33203. default :
  33204. {
  33205. frequency = 0;
  33206. 800e530: 2300 movs r3, #0
  33207. 800e532: 63fb str r3, [r7, #60] @ 0x3c
  33208. break;
  33209. 800e534: e001 b.n 800e53a <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  33210. }
  33211. }
  33212. }
  33213. else
  33214. {
  33215. frequency = 0;
  33216. 800e536: 2300 movs r3, #0
  33217. 800e538: 63fb str r3, [r7, #60] @ 0x3c
  33218. }
  33219. return frequency;
  33220. 800e53a: 6bfb ldr r3, [r7, #60] @ 0x3c
  33221. }
  33222. 800e53c: 4618 mov r0, r3
  33223. 800e53e: 3740 adds r7, #64 @ 0x40
  33224. 800e540: 46bd mov sp, r7
  33225. 800e542: bd80 pop {r7, pc}
  33226. 800e544: 58024400 .word 0x58024400
  33227. 800e548: 017d7840 .word 0x017d7840
  33228. 0800e54c <HAL_RCCEx_GetD3PCLK1Freq>:
  33229. * @note Each time D3PCLK1 changes, this function must be called to update the
  33230. * right D3PCLK1 value. Otherwise, any configuration based on this function will be incorrect.
  33231. * @retval D3PCLK1 frequency
  33232. */
  33233. uint32_t HAL_RCCEx_GetD3PCLK1Freq(void)
  33234. {
  33235. 800e54c: b580 push {r7, lr}
  33236. 800e54e: af00 add r7, sp, #0
  33237. #if defined(RCC_D3CFGR_D3PPRE)
  33238. /* Get HCLK source and Compute D3PCLK1 frequency ---------------------------*/
  33239. return (HAL_RCC_GetHCLKFreq() >> (D1CorePrescTable[(RCC->D3CFGR & RCC_D3CFGR_D3PPRE) >> RCC_D3CFGR_D3PPRE_Pos] & 0x1FU));
  33240. 800e550: f7fd fff0 bl 800c534 <HAL_RCC_GetHCLKFreq>
  33241. 800e554: 4602 mov r2, r0
  33242. 800e556: 4b06 ldr r3, [pc, #24] @ (800e570 <HAL_RCCEx_GetD3PCLK1Freq+0x24>)
  33243. 800e558: 6a1b ldr r3, [r3, #32]
  33244. 800e55a: 091b lsrs r3, r3, #4
  33245. 800e55c: f003 0307 and.w r3, r3, #7
  33246. 800e560: 4904 ldr r1, [pc, #16] @ (800e574 <HAL_RCCEx_GetD3PCLK1Freq+0x28>)
  33247. 800e562: 5ccb ldrb r3, [r1, r3]
  33248. 800e564: f003 031f and.w r3, r3, #31
  33249. 800e568: fa22 f303 lsr.w r3, r2, r3
  33250. #else
  33251. /* Get HCLK source and Compute D3PCLK1 frequency ---------------------------*/
  33252. return (HAL_RCC_GetHCLKFreq() >> (D1CorePrescTable[(RCC->SRDCFGR & RCC_SRDCFGR_SRDPPRE) >> RCC_SRDCFGR_SRDPPRE_Pos] & 0x1FU));
  33253. #endif
  33254. }
  33255. 800e56c: 4618 mov r0, r3
  33256. 800e56e: bd80 pop {r7, pc}
  33257. 800e570: 58024400 .word 0x58024400
  33258. 800e574: 08018b5c .word 0x08018b5c
  33259. 0800e578 <HAL_RCCEx_GetPLL2ClockFreq>:
  33260. * right PLL2CLK value. Otherwise, any configuration based on this function will be incorrect.
  33261. * @param PLL2_Clocks structure.
  33262. * @retval None
  33263. */
  33264. void HAL_RCCEx_GetPLL2ClockFreq(PLL2_ClocksTypeDef *PLL2_Clocks)
  33265. {
  33266. 800e578: b480 push {r7}
  33267. 800e57a: b089 sub sp, #36 @ 0x24
  33268. 800e57c: af00 add r7, sp, #0
  33269. 800e57e: 6078 str r0, [r7, #4]
  33270. float_t fracn2, pll2vco;
  33271. /* PLL_VCO = (HSE_VALUE or HSI_VALUE or CSI_VALUE/ PLL2M) * PLL2N
  33272. PLL2xCLK = PLL2_VCO / PLL2x
  33273. */
  33274. pllsource = (RCC->PLLCKSELR & RCC_PLLCKSELR_PLLSRC);
  33275. 800e580: 4ba1 ldr r3, [pc, #644] @ (800e808 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  33276. 800e582: 6a9b ldr r3, [r3, #40] @ 0x28
  33277. 800e584: f003 0303 and.w r3, r3, #3
  33278. 800e588: 61bb str r3, [r7, #24]
  33279. pll2m = ((RCC->PLLCKSELR & RCC_PLLCKSELR_DIVM2) >> 12);
  33280. 800e58a: 4b9f ldr r3, [pc, #636] @ (800e808 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  33281. 800e58c: 6a9b ldr r3, [r3, #40] @ 0x28
  33282. 800e58e: 0b1b lsrs r3, r3, #12
  33283. 800e590: f003 033f and.w r3, r3, #63 @ 0x3f
  33284. 800e594: 617b str r3, [r7, #20]
  33285. pll2fracen = (RCC->PLLCFGR & RCC_PLLCFGR_PLL2FRACEN) >> RCC_PLLCFGR_PLL2FRACEN_Pos;
  33286. 800e596: 4b9c ldr r3, [pc, #624] @ (800e808 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  33287. 800e598: 6adb ldr r3, [r3, #44] @ 0x2c
  33288. 800e59a: 091b lsrs r3, r3, #4
  33289. 800e59c: f003 0301 and.w r3, r3, #1
  33290. 800e5a0: 613b str r3, [r7, #16]
  33291. fracn2 = (float_t)(uint32_t)(pll2fracen * ((RCC->PLL2FRACR & RCC_PLL2FRACR_FRACN2) >> 3));
  33292. 800e5a2: 4b99 ldr r3, [pc, #612] @ (800e808 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  33293. 800e5a4: 6bdb ldr r3, [r3, #60] @ 0x3c
  33294. 800e5a6: 08db lsrs r3, r3, #3
  33295. 800e5a8: f3c3 030c ubfx r3, r3, #0, #13
  33296. 800e5ac: 693a ldr r2, [r7, #16]
  33297. 800e5ae: fb02 f303 mul.w r3, r2, r3
  33298. 800e5b2: ee07 3a90 vmov s15, r3
  33299. 800e5b6: eef8 7a67 vcvt.f32.u32 s15, s15
  33300. 800e5ba: edc7 7a03 vstr s15, [r7, #12]
  33301. if (pll2m != 0U)
  33302. 800e5be: 697b ldr r3, [r7, #20]
  33303. 800e5c0: 2b00 cmp r3, #0
  33304. 800e5c2: f000 8111 beq.w 800e7e8 <HAL_RCCEx_GetPLL2ClockFreq+0x270>
  33305. {
  33306. switch (pllsource)
  33307. 800e5c6: 69bb ldr r3, [r7, #24]
  33308. 800e5c8: 2b02 cmp r3, #2
  33309. 800e5ca: f000 8083 beq.w 800e6d4 <HAL_RCCEx_GetPLL2ClockFreq+0x15c>
  33310. 800e5ce: 69bb ldr r3, [r7, #24]
  33311. 800e5d0: 2b02 cmp r3, #2
  33312. 800e5d2: f200 80a1 bhi.w 800e718 <HAL_RCCEx_GetPLL2ClockFreq+0x1a0>
  33313. 800e5d6: 69bb ldr r3, [r7, #24]
  33314. 800e5d8: 2b00 cmp r3, #0
  33315. 800e5da: d003 beq.n 800e5e4 <HAL_RCCEx_GetPLL2ClockFreq+0x6c>
  33316. 800e5dc: 69bb ldr r3, [r7, #24]
  33317. 800e5de: 2b01 cmp r3, #1
  33318. 800e5e0: d056 beq.n 800e690 <HAL_RCCEx_GetPLL2ClockFreq+0x118>
  33319. 800e5e2: e099 b.n 800e718 <HAL_RCCEx_GetPLL2ClockFreq+0x1a0>
  33320. {
  33321. case RCC_PLLSOURCE_HSI: /* HSI used as PLL clock source */
  33322. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  33323. 800e5e4: 4b88 ldr r3, [pc, #544] @ (800e808 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  33324. 800e5e6: 681b ldr r3, [r3, #0]
  33325. 800e5e8: f003 0320 and.w r3, r3, #32
  33326. 800e5ec: 2b00 cmp r3, #0
  33327. 800e5ee: d02d beq.n 800e64c <HAL_RCCEx_GetPLL2ClockFreq+0xd4>
  33328. {
  33329. hsivalue = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  33330. 800e5f0: 4b85 ldr r3, [pc, #532] @ (800e808 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  33331. 800e5f2: 681b ldr r3, [r3, #0]
  33332. 800e5f4: 08db lsrs r3, r3, #3
  33333. 800e5f6: f003 0303 and.w r3, r3, #3
  33334. 800e5fa: 4a84 ldr r2, [pc, #528] @ (800e80c <HAL_RCCEx_GetPLL2ClockFreq+0x294>)
  33335. 800e5fc: fa22 f303 lsr.w r3, r2, r3
  33336. 800e600: 60bb str r3, [r7, #8]
  33337. pll2vco = ((float_t)hsivalue / (float_t)pll2m) * ((float_t)(uint32_t)(RCC->PLL2DIVR & RCC_PLL2DIVR_N2) + (fracn2 / (float_t)0x2000) + (float_t)1);
  33338. 800e602: 68bb ldr r3, [r7, #8]
  33339. 800e604: ee07 3a90 vmov s15, r3
  33340. 800e608: eef8 6a67 vcvt.f32.u32 s13, s15
  33341. 800e60c: 697b ldr r3, [r7, #20]
  33342. 800e60e: ee07 3a90 vmov s15, r3
  33343. 800e612: eef8 7a67 vcvt.f32.u32 s15, s15
  33344. 800e616: ee86 7aa7 vdiv.f32 s14, s13, s15
  33345. 800e61a: 4b7b ldr r3, [pc, #492] @ (800e808 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  33346. 800e61c: 6b9b ldr r3, [r3, #56] @ 0x38
  33347. 800e61e: f3c3 0308 ubfx r3, r3, #0, #9
  33348. 800e622: ee07 3a90 vmov s15, r3
  33349. 800e626: eef8 6a67 vcvt.f32.u32 s13, s15
  33350. 800e62a: ed97 6a03 vldr s12, [r7, #12]
  33351. 800e62e: eddf 5a78 vldr s11, [pc, #480] @ 800e810 <HAL_RCCEx_GetPLL2ClockFreq+0x298>
  33352. 800e632: eec6 7a25 vdiv.f32 s15, s12, s11
  33353. 800e636: ee76 7aa7 vadd.f32 s15, s13, s15
  33354. 800e63a: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  33355. 800e63e: ee77 7aa6 vadd.f32 s15, s15, s13
  33356. 800e642: ee67 7a27 vmul.f32 s15, s14, s15
  33357. 800e646: edc7 7a07 vstr s15, [r7, #28]
  33358. }
  33359. else
  33360. {
  33361. pll2vco = ((float_t)HSI_VALUE / (float_t)pll2m) * ((float_t)(uint32_t)(RCC->PLL2DIVR & RCC_PLL2DIVR_N2) + (fracn2 / (float_t)0x2000) + (float_t)1);
  33362. }
  33363. break;
  33364. 800e64a: e087 b.n 800e75c <HAL_RCCEx_GetPLL2ClockFreq+0x1e4>
  33365. pll2vco = ((float_t)HSI_VALUE / (float_t)pll2m) * ((float_t)(uint32_t)(RCC->PLL2DIVR & RCC_PLL2DIVR_N2) + (fracn2 / (float_t)0x2000) + (float_t)1);
  33366. 800e64c: 697b ldr r3, [r7, #20]
  33367. 800e64e: ee07 3a90 vmov s15, r3
  33368. 800e652: eef8 7a67 vcvt.f32.u32 s15, s15
  33369. 800e656: eddf 6a6f vldr s13, [pc, #444] @ 800e814 <HAL_RCCEx_GetPLL2ClockFreq+0x29c>
  33370. 800e65a: ee86 7aa7 vdiv.f32 s14, s13, s15
  33371. 800e65e: 4b6a ldr r3, [pc, #424] @ (800e808 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  33372. 800e660: 6b9b ldr r3, [r3, #56] @ 0x38
  33373. 800e662: f3c3 0308 ubfx r3, r3, #0, #9
  33374. 800e666: ee07 3a90 vmov s15, r3
  33375. 800e66a: eef8 6a67 vcvt.f32.u32 s13, s15
  33376. 800e66e: ed97 6a03 vldr s12, [r7, #12]
  33377. 800e672: eddf 5a67 vldr s11, [pc, #412] @ 800e810 <HAL_RCCEx_GetPLL2ClockFreq+0x298>
  33378. 800e676: eec6 7a25 vdiv.f32 s15, s12, s11
  33379. 800e67a: ee76 7aa7 vadd.f32 s15, s13, s15
  33380. 800e67e: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  33381. 800e682: ee77 7aa6 vadd.f32 s15, s15, s13
  33382. 800e686: ee67 7a27 vmul.f32 s15, s14, s15
  33383. 800e68a: edc7 7a07 vstr s15, [r7, #28]
  33384. break;
  33385. 800e68e: e065 b.n 800e75c <HAL_RCCEx_GetPLL2ClockFreq+0x1e4>
  33386. case RCC_PLLSOURCE_CSI: /* CSI used as PLL clock source */
  33387. pll2vco = ((float_t)CSI_VALUE / (float_t)pll2m) * ((float_t)(uint32_t)(RCC->PLL2DIVR & RCC_PLL2DIVR_N2) + (fracn2 / (float_t)0x2000) + (float_t)1);
  33388. 800e690: 697b ldr r3, [r7, #20]
  33389. 800e692: ee07 3a90 vmov s15, r3
  33390. 800e696: eef8 7a67 vcvt.f32.u32 s15, s15
  33391. 800e69a: eddf 6a5f vldr s13, [pc, #380] @ 800e818 <HAL_RCCEx_GetPLL2ClockFreq+0x2a0>
  33392. 800e69e: ee86 7aa7 vdiv.f32 s14, s13, s15
  33393. 800e6a2: 4b59 ldr r3, [pc, #356] @ (800e808 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  33394. 800e6a4: 6b9b ldr r3, [r3, #56] @ 0x38
  33395. 800e6a6: f3c3 0308 ubfx r3, r3, #0, #9
  33396. 800e6aa: ee07 3a90 vmov s15, r3
  33397. 800e6ae: eef8 6a67 vcvt.f32.u32 s13, s15
  33398. 800e6b2: ed97 6a03 vldr s12, [r7, #12]
  33399. 800e6b6: eddf 5a56 vldr s11, [pc, #344] @ 800e810 <HAL_RCCEx_GetPLL2ClockFreq+0x298>
  33400. 800e6ba: eec6 7a25 vdiv.f32 s15, s12, s11
  33401. 800e6be: ee76 7aa7 vadd.f32 s15, s13, s15
  33402. 800e6c2: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  33403. 800e6c6: ee77 7aa6 vadd.f32 s15, s15, s13
  33404. 800e6ca: ee67 7a27 vmul.f32 s15, s14, s15
  33405. 800e6ce: edc7 7a07 vstr s15, [r7, #28]
  33406. break;
  33407. 800e6d2: e043 b.n 800e75c <HAL_RCCEx_GetPLL2ClockFreq+0x1e4>
  33408. case RCC_PLLSOURCE_HSE: /* HSE used as PLL clock source */
  33409. pll2vco = ((float_t)HSE_VALUE / (float_t)pll2m) * ((float_t)(uint32_t)(RCC->PLL2DIVR & RCC_PLL2DIVR_N2) + (fracn2 / (float_t)0x2000) + (float_t)1);
  33410. 800e6d4: 697b ldr r3, [r7, #20]
  33411. 800e6d6: ee07 3a90 vmov s15, r3
  33412. 800e6da: eef8 7a67 vcvt.f32.u32 s15, s15
  33413. 800e6de: eddf 6a4f vldr s13, [pc, #316] @ 800e81c <HAL_RCCEx_GetPLL2ClockFreq+0x2a4>
  33414. 800e6e2: ee86 7aa7 vdiv.f32 s14, s13, s15
  33415. 800e6e6: 4b48 ldr r3, [pc, #288] @ (800e808 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  33416. 800e6e8: 6b9b ldr r3, [r3, #56] @ 0x38
  33417. 800e6ea: f3c3 0308 ubfx r3, r3, #0, #9
  33418. 800e6ee: ee07 3a90 vmov s15, r3
  33419. 800e6f2: eef8 6a67 vcvt.f32.u32 s13, s15
  33420. 800e6f6: ed97 6a03 vldr s12, [r7, #12]
  33421. 800e6fa: eddf 5a45 vldr s11, [pc, #276] @ 800e810 <HAL_RCCEx_GetPLL2ClockFreq+0x298>
  33422. 800e6fe: eec6 7a25 vdiv.f32 s15, s12, s11
  33423. 800e702: ee76 7aa7 vadd.f32 s15, s13, s15
  33424. 800e706: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  33425. 800e70a: ee77 7aa6 vadd.f32 s15, s15, s13
  33426. 800e70e: ee67 7a27 vmul.f32 s15, s14, s15
  33427. 800e712: edc7 7a07 vstr s15, [r7, #28]
  33428. break;
  33429. 800e716: e021 b.n 800e75c <HAL_RCCEx_GetPLL2ClockFreq+0x1e4>
  33430. default:
  33431. pll2vco = ((float_t)CSI_VALUE / (float_t)pll2m) * ((float_t)(uint32_t)(RCC->PLL2DIVR & RCC_PLL2DIVR_N2) + (fracn2 / (float_t)0x2000) + (float_t)1);
  33432. 800e718: 697b ldr r3, [r7, #20]
  33433. 800e71a: ee07 3a90 vmov s15, r3
  33434. 800e71e: eef8 7a67 vcvt.f32.u32 s15, s15
  33435. 800e722: eddf 6a3d vldr s13, [pc, #244] @ 800e818 <HAL_RCCEx_GetPLL2ClockFreq+0x2a0>
  33436. 800e726: ee86 7aa7 vdiv.f32 s14, s13, s15
  33437. 800e72a: 4b37 ldr r3, [pc, #220] @ (800e808 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  33438. 800e72c: 6b9b ldr r3, [r3, #56] @ 0x38
  33439. 800e72e: f3c3 0308 ubfx r3, r3, #0, #9
  33440. 800e732: ee07 3a90 vmov s15, r3
  33441. 800e736: eef8 6a67 vcvt.f32.u32 s13, s15
  33442. 800e73a: ed97 6a03 vldr s12, [r7, #12]
  33443. 800e73e: eddf 5a34 vldr s11, [pc, #208] @ 800e810 <HAL_RCCEx_GetPLL2ClockFreq+0x298>
  33444. 800e742: eec6 7a25 vdiv.f32 s15, s12, s11
  33445. 800e746: ee76 7aa7 vadd.f32 s15, s13, s15
  33446. 800e74a: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  33447. 800e74e: ee77 7aa6 vadd.f32 s15, s15, s13
  33448. 800e752: ee67 7a27 vmul.f32 s15, s14, s15
  33449. 800e756: edc7 7a07 vstr s15, [r7, #28]
  33450. break;
  33451. 800e75a: bf00 nop
  33452. }
  33453. PLL2_Clocks->PLL2_P_Frequency = (uint32_t)(float_t)(pll2vco / ((float_t)(uint32_t)((RCC->PLL2DIVR & RCC_PLL2DIVR_P2) >> 9) + (float_t)1)) ;
  33454. 800e75c: 4b2a ldr r3, [pc, #168] @ (800e808 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  33455. 800e75e: 6b9b ldr r3, [r3, #56] @ 0x38
  33456. 800e760: 0a5b lsrs r3, r3, #9
  33457. 800e762: f003 037f and.w r3, r3, #127 @ 0x7f
  33458. 800e766: ee07 3a90 vmov s15, r3
  33459. 800e76a: eef8 7a67 vcvt.f32.u32 s15, s15
  33460. 800e76e: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  33461. 800e772: ee37 7a87 vadd.f32 s14, s15, s14
  33462. 800e776: edd7 6a07 vldr s13, [r7, #28]
  33463. 800e77a: eec6 7a87 vdiv.f32 s15, s13, s14
  33464. 800e77e: eefc 7ae7 vcvt.u32.f32 s15, s15
  33465. 800e782: ee17 2a90 vmov r2, s15
  33466. 800e786: 687b ldr r3, [r7, #4]
  33467. 800e788: 601a str r2, [r3, #0]
  33468. PLL2_Clocks->PLL2_Q_Frequency = (uint32_t)(float_t)(pll2vco / ((float_t)(uint32_t)((RCC->PLL2DIVR & RCC_PLL2DIVR_Q2) >> 16) + (float_t)1)) ;
  33469. 800e78a: 4b1f ldr r3, [pc, #124] @ (800e808 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  33470. 800e78c: 6b9b ldr r3, [r3, #56] @ 0x38
  33471. 800e78e: 0c1b lsrs r3, r3, #16
  33472. 800e790: f003 037f and.w r3, r3, #127 @ 0x7f
  33473. 800e794: ee07 3a90 vmov s15, r3
  33474. 800e798: eef8 7a67 vcvt.f32.u32 s15, s15
  33475. 800e79c: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  33476. 800e7a0: ee37 7a87 vadd.f32 s14, s15, s14
  33477. 800e7a4: edd7 6a07 vldr s13, [r7, #28]
  33478. 800e7a8: eec6 7a87 vdiv.f32 s15, s13, s14
  33479. 800e7ac: eefc 7ae7 vcvt.u32.f32 s15, s15
  33480. 800e7b0: ee17 2a90 vmov r2, s15
  33481. 800e7b4: 687b ldr r3, [r7, #4]
  33482. 800e7b6: 605a str r2, [r3, #4]
  33483. PLL2_Clocks->PLL2_R_Frequency = (uint32_t)(float_t)(pll2vco / ((float_t)(uint32_t)((RCC->PLL2DIVR & RCC_PLL2DIVR_R2) >> 24) + (float_t)1)) ;
  33484. 800e7b8: 4b13 ldr r3, [pc, #76] @ (800e808 <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  33485. 800e7ba: 6b9b ldr r3, [r3, #56] @ 0x38
  33486. 800e7bc: 0e1b lsrs r3, r3, #24
  33487. 800e7be: f003 037f and.w r3, r3, #127 @ 0x7f
  33488. 800e7c2: ee07 3a90 vmov s15, r3
  33489. 800e7c6: eef8 7a67 vcvt.f32.u32 s15, s15
  33490. 800e7ca: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  33491. 800e7ce: ee37 7a87 vadd.f32 s14, s15, s14
  33492. 800e7d2: edd7 6a07 vldr s13, [r7, #28]
  33493. 800e7d6: eec6 7a87 vdiv.f32 s15, s13, s14
  33494. 800e7da: eefc 7ae7 vcvt.u32.f32 s15, s15
  33495. 800e7de: ee17 2a90 vmov r2, s15
  33496. 800e7e2: 687b ldr r3, [r7, #4]
  33497. 800e7e4: 609a str r2, [r3, #8]
  33498. {
  33499. PLL2_Clocks->PLL2_P_Frequency = 0U;
  33500. PLL2_Clocks->PLL2_Q_Frequency = 0U;
  33501. PLL2_Clocks->PLL2_R_Frequency = 0U;
  33502. }
  33503. }
  33504. 800e7e6: e008 b.n 800e7fa <HAL_RCCEx_GetPLL2ClockFreq+0x282>
  33505. PLL2_Clocks->PLL2_P_Frequency = 0U;
  33506. 800e7e8: 687b ldr r3, [r7, #4]
  33507. 800e7ea: 2200 movs r2, #0
  33508. 800e7ec: 601a str r2, [r3, #0]
  33509. PLL2_Clocks->PLL2_Q_Frequency = 0U;
  33510. 800e7ee: 687b ldr r3, [r7, #4]
  33511. 800e7f0: 2200 movs r2, #0
  33512. 800e7f2: 605a str r2, [r3, #4]
  33513. PLL2_Clocks->PLL2_R_Frequency = 0U;
  33514. 800e7f4: 687b ldr r3, [r7, #4]
  33515. 800e7f6: 2200 movs r2, #0
  33516. 800e7f8: 609a str r2, [r3, #8]
  33517. }
  33518. 800e7fa: bf00 nop
  33519. 800e7fc: 3724 adds r7, #36 @ 0x24
  33520. 800e7fe: 46bd mov sp, r7
  33521. 800e800: f85d 7b04 ldr.w r7, [sp], #4
  33522. 800e804: 4770 bx lr
  33523. 800e806: bf00 nop
  33524. 800e808: 58024400 .word 0x58024400
  33525. 800e80c: 03d09000 .word 0x03d09000
  33526. 800e810: 46000000 .word 0x46000000
  33527. 800e814: 4c742400 .word 0x4c742400
  33528. 800e818: 4a742400 .word 0x4a742400
  33529. 800e81c: 4bbebc20 .word 0x4bbebc20
  33530. 0800e820 <HAL_RCCEx_GetPLL3ClockFreq>:
  33531. * right PLL3CLK value. Otherwise, any configuration based on this function will be incorrect.
  33532. * @param PLL3_Clocks structure.
  33533. * @retval None
  33534. */
  33535. void HAL_RCCEx_GetPLL3ClockFreq(PLL3_ClocksTypeDef *PLL3_Clocks)
  33536. {
  33537. 800e820: b480 push {r7}
  33538. 800e822: b089 sub sp, #36 @ 0x24
  33539. 800e824: af00 add r7, sp, #0
  33540. 800e826: 6078 str r0, [r7, #4]
  33541. float_t fracn3, pll3vco;
  33542. /* PLL3_VCO = (HSE_VALUE or HSI_VALUE or CSI_VALUE/ PLL3M) * PLL3N
  33543. PLL3xCLK = PLL3_VCO / PLLxR
  33544. */
  33545. pllsource = (RCC->PLLCKSELR & RCC_PLLCKSELR_PLLSRC);
  33546. 800e828: 4ba1 ldr r3, [pc, #644] @ (800eab0 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  33547. 800e82a: 6a9b ldr r3, [r3, #40] @ 0x28
  33548. 800e82c: f003 0303 and.w r3, r3, #3
  33549. 800e830: 61bb str r3, [r7, #24]
  33550. pll3m = ((RCC->PLLCKSELR & RCC_PLLCKSELR_DIVM3) >> 20) ;
  33551. 800e832: 4b9f ldr r3, [pc, #636] @ (800eab0 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  33552. 800e834: 6a9b ldr r3, [r3, #40] @ 0x28
  33553. 800e836: 0d1b lsrs r3, r3, #20
  33554. 800e838: f003 033f and.w r3, r3, #63 @ 0x3f
  33555. 800e83c: 617b str r3, [r7, #20]
  33556. pll3fracen = (RCC->PLLCFGR & RCC_PLLCFGR_PLL3FRACEN) >> RCC_PLLCFGR_PLL3FRACEN_Pos;
  33557. 800e83e: 4b9c ldr r3, [pc, #624] @ (800eab0 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  33558. 800e840: 6adb ldr r3, [r3, #44] @ 0x2c
  33559. 800e842: 0a1b lsrs r3, r3, #8
  33560. 800e844: f003 0301 and.w r3, r3, #1
  33561. 800e848: 613b str r3, [r7, #16]
  33562. fracn3 = (float_t)(uint32_t)(pll3fracen * ((RCC->PLL3FRACR & RCC_PLL3FRACR_FRACN3) >> 3));
  33563. 800e84a: 4b99 ldr r3, [pc, #612] @ (800eab0 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  33564. 800e84c: 6c5b ldr r3, [r3, #68] @ 0x44
  33565. 800e84e: 08db lsrs r3, r3, #3
  33566. 800e850: f3c3 030c ubfx r3, r3, #0, #13
  33567. 800e854: 693a ldr r2, [r7, #16]
  33568. 800e856: fb02 f303 mul.w r3, r2, r3
  33569. 800e85a: ee07 3a90 vmov s15, r3
  33570. 800e85e: eef8 7a67 vcvt.f32.u32 s15, s15
  33571. 800e862: edc7 7a03 vstr s15, [r7, #12]
  33572. if (pll3m != 0U)
  33573. 800e866: 697b ldr r3, [r7, #20]
  33574. 800e868: 2b00 cmp r3, #0
  33575. 800e86a: f000 8111 beq.w 800ea90 <HAL_RCCEx_GetPLL3ClockFreq+0x270>
  33576. {
  33577. switch (pllsource)
  33578. 800e86e: 69bb ldr r3, [r7, #24]
  33579. 800e870: 2b02 cmp r3, #2
  33580. 800e872: f000 8083 beq.w 800e97c <HAL_RCCEx_GetPLL3ClockFreq+0x15c>
  33581. 800e876: 69bb ldr r3, [r7, #24]
  33582. 800e878: 2b02 cmp r3, #2
  33583. 800e87a: f200 80a1 bhi.w 800e9c0 <HAL_RCCEx_GetPLL3ClockFreq+0x1a0>
  33584. 800e87e: 69bb ldr r3, [r7, #24]
  33585. 800e880: 2b00 cmp r3, #0
  33586. 800e882: d003 beq.n 800e88c <HAL_RCCEx_GetPLL3ClockFreq+0x6c>
  33587. 800e884: 69bb ldr r3, [r7, #24]
  33588. 800e886: 2b01 cmp r3, #1
  33589. 800e888: d056 beq.n 800e938 <HAL_RCCEx_GetPLL3ClockFreq+0x118>
  33590. 800e88a: e099 b.n 800e9c0 <HAL_RCCEx_GetPLL3ClockFreq+0x1a0>
  33591. {
  33592. case RCC_PLLSOURCE_HSI: /* HSI used as PLL clock source */
  33593. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  33594. 800e88c: 4b88 ldr r3, [pc, #544] @ (800eab0 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  33595. 800e88e: 681b ldr r3, [r3, #0]
  33596. 800e890: f003 0320 and.w r3, r3, #32
  33597. 800e894: 2b00 cmp r3, #0
  33598. 800e896: d02d beq.n 800e8f4 <HAL_RCCEx_GetPLL3ClockFreq+0xd4>
  33599. {
  33600. hsivalue = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  33601. 800e898: 4b85 ldr r3, [pc, #532] @ (800eab0 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  33602. 800e89a: 681b ldr r3, [r3, #0]
  33603. 800e89c: 08db lsrs r3, r3, #3
  33604. 800e89e: f003 0303 and.w r3, r3, #3
  33605. 800e8a2: 4a84 ldr r2, [pc, #528] @ (800eab4 <HAL_RCCEx_GetPLL3ClockFreq+0x294>)
  33606. 800e8a4: fa22 f303 lsr.w r3, r2, r3
  33607. 800e8a8: 60bb str r3, [r7, #8]
  33608. pll3vco = ((float_t)hsivalue / (float_t)pll3m) * ((float_t)(uint32_t)(RCC->PLL3DIVR & RCC_PLL3DIVR_N3) + (fracn3 / (float_t)0x2000) + (float_t)1);
  33609. 800e8aa: 68bb ldr r3, [r7, #8]
  33610. 800e8ac: ee07 3a90 vmov s15, r3
  33611. 800e8b0: eef8 6a67 vcvt.f32.u32 s13, s15
  33612. 800e8b4: 697b ldr r3, [r7, #20]
  33613. 800e8b6: ee07 3a90 vmov s15, r3
  33614. 800e8ba: eef8 7a67 vcvt.f32.u32 s15, s15
  33615. 800e8be: ee86 7aa7 vdiv.f32 s14, s13, s15
  33616. 800e8c2: 4b7b ldr r3, [pc, #492] @ (800eab0 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  33617. 800e8c4: 6c1b ldr r3, [r3, #64] @ 0x40
  33618. 800e8c6: f3c3 0308 ubfx r3, r3, #0, #9
  33619. 800e8ca: ee07 3a90 vmov s15, r3
  33620. 800e8ce: eef8 6a67 vcvt.f32.u32 s13, s15
  33621. 800e8d2: ed97 6a03 vldr s12, [r7, #12]
  33622. 800e8d6: eddf 5a78 vldr s11, [pc, #480] @ 800eab8 <HAL_RCCEx_GetPLL3ClockFreq+0x298>
  33623. 800e8da: eec6 7a25 vdiv.f32 s15, s12, s11
  33624. 800e8de: ee76 7aa7 vadd.f32 s15, s13, s15
  33625. 800e8e2: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  33626. 800e8e6: ee77 7aa6 vadd.f32 s15, s15, s13
  33627. 800e8ea: ee67 7a27 vmul.f32 s15, s14, s15
  33628. 800e8ee: edc7 7a07 vstr s15, [r7, #28]
  33629. }
  33630. else
  33631. {
  33632. pll3vco = ((float_t)HSI_VALUE / (float_t)pll3m) * ((float_t)(uint32_t)(RCC->PLL3DIVR & RCC_PLL3DIVR_N3) + (fracn3 / (float_t)0x2000) + (float_t)1);
  33633. }
  33634. break;
  33635. 800e8f2: e087 b.n 800ea04 <HAL_RCCEx_GetPLL3ClockFreq+0x1e4>
  33636. pll3vco = ((float_t)HSI_VALUE / (float_t)pll3m) * ((float_t)(uint32_t)(RCC->PLL3DIVR & RCC_PLL3DIVR_N3) + (fracn3 / (float_t)0x2000) + (float_t)1);
  33637. 800e8f4: 697b ldr r3, [r7, #20]
  33638. 800e8f6: ee07 3a90 vmov s15, r3
  33639. 800e8fa: eef8 7a67 vcvt.f32.u32 s15, s15
  33640. 800e8fe: eddf 6a6f vldr s13, [pc, #444] @ 800eabc <HAL_RCCEx_GetPLL3ClockFreq+0x29c>
  33641. 800e902: ee86 7aa7 vdiv.f32 s14, s13, s15
  33642. 800e906: 4b6a ldr r3, [pc, #424] @ (800eab0 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  33643. 800e908: 6c1b ldr r3, [r3, #64] @ 0x40
  33644. 800e90a: f3c3 0308 ubfx r3, r3, #0, #9
  33645. 800e90e: ee07 3a90 vmov s15, r3
  33646. 800e912: eef8 6a67 vcvt.f32.u32 s13, s15
  33647. 800e916: ed97 6a03 vldr s12, [r7, #12]
  33648. 800e91a: eddf 5a67 vldr s11, [pc, #412] @ 800eab8 <HAL_RCCEx_GetPLL3ClockFreq+0x298>
  33649. 800e91e: eec6 7a25 vdiv.f32 s15, s12, s11
  33650. 800e922: ee76 7aa7 vadd.f32 s15, s13, s15
  33651. 800e926: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  33652. 800e92a: ee77 7aa6 vadd.f32 s15, s15, s13
  33653. 800e92e: ee67 7a27 vmul.f32 s15, s14, s15
  33654. 800e932: edc7 7a07 vstr s15, [r7, #28]
  33655. break;
  33656. 800e936: e065 b.n 800ea04 <HAL_RCCEx_GetPLL3ClockFreq+0x1e4>
  33657. case RCC_PLLSOURCE_CSI: /* CSI used as PLL clock source */
  33658. pll3vco = ((float_t)CSI_VALUE / (float_t)pll3m) * ((float_t)(uint32_t)(RCC->PLL3DIVR & RCC_PLL3DIVR_N3) + (fracn3 / (float_t)0x2000) + (float_t)1);
  33659. 800e938: 697b ldr r3, [r7, #20]
  33660. 800e93a: ee07 3a90 vmov s15, r3
  33661. 800e93e: eef8 7a67 vcvt.f32.u32 s15, s15
  33662. 800e942: eddf 6a5f vldr s13, [pc, #380] @ 800eac0 <HAL_RCCEx_GetPLL3ClockFreq+0x2a0>
  33663. 800e946: ee86 7aa7 vdiv.f32 s14, s13, s15
  33664. 800e94a: 4b59 ldr r3, [pc, #356] @ (800eab0 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  33665. 800e94c: 6c1b ldr r3, [r3, #64] @ 0x40
  33666. 800e94e: f3c3 0308 ubfx r3, r3, #0, #9
  33667. 800e952: ee07 3a90 vmov s15, r3
  33668. 800e956: eef8 6a67 vcvt.f32.u32 s13, s15
  33669. 800e95a: ed97 6a03 vldr s12, [r7, #12]
  33670. 800e95e: eddf 5a56 vldr s11, [pc, #344] @ 800eab8 <HAL_RCCEx_GetPLL3ClockFreq+0x298>
  33671. 800e962: eec6 7a25 vdiv.f32 s15, s12, s11
  33672. 800e966: ee76 7aa7 vadd.f32 s15, s13, s15
  33673. 800e96a: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  33674. 800e96e: ee77 7aa6 vadd.f32 s15, s15, s13
  33675. 800e972: ee67 7a27 vmul.f32 s15, s14, s15
  33676. 800e976: edc7 7a07 vstr s15, [r7, #28]
  33677. break;
  33678. 800e97a: e043 b.n 800ea04 <HAL_RCCEx_GetPLL3ClockFreq+0x1e4>
  33679. case RCC_PLLSOURCE_HSE: /* HSE used as PLL clock source */
  33680. pll3vco = ((float_t)HSE_VALUE / (float_t)pll3m) * ((float_t)(uint32_t)(RCC->PLL3DIVR & RCC_PLL3DIVR_N3) + (fracn3 / (float_t)0x2000) + (float_t)1);
  33681. 800e97c: 697b ldr r3, [r7, #20]
  33682. 800e97e: ee07 3a90 vmov s15, r3
  33683. 800e982: eef8 7a67 vcvt.f32.u32 s15, s15
  33684. 800e986: eddf 6a4f vldr s13, [pc, #316] @ 800eac4 <HAL_RCCEx_GetPLL3ClockFreq+0x2a4>
  33685. 800e98a: ee86 7aa7 vdiv.f32 s14, s13, s15
  33686. 800e98e: 4b48 ldr r3, [pc, #288] @ (800eab0 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  33687. 800e990: 6c1b ldr r3, [r3, #64] @ 0x40
  33688. 800e992: f3c3 0308 ubfx r3, r3, #0, #9
  33689. 800e996: ee07 3a90 vmov s15, r3
  33690. 800e99a: eef8 6a67 vcvt.f32.u32 s13, s15
  33691. 800e99e: ed97 6a03 vldr s12, [r7, #12]
  33692. 800e9a2: eddf 5a45 vldr s11, [pc, #276] @ 800eab8 <HAL_RCCEx_GetPLL3ClockFreq+0x298>
  33693. 800e9a6: eec6 7a25 vdiv.f32 s15, s12, s11
  33694. 800e9aa: ee76 7aa7 vadd.f32 s15, s13, s15
  33695. 800e9ae: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  33696. 800e9b2: ee77 7aa6 vadd.f32 s15, s15, s13
  33697. 800e9b6: ee67 7a27 vmul.f32 s15, s14, s15
  33698. 800e9ba: edc7 7a07 vstr s15, [r7, #28]
  33699. break;
  33700. 800e9be: e021 b.n 800ea04 <HAL_RCCEx_GetPLL3ClockFreq+0x1e4>
  33701. default:
  33702. pll3vco = ((float_t)CSI_VALUE / (float_t)pll3m) * ((float_t)(uint32_t)(RCC->PLL3DIVR & RCC_PLL3DIVR_N3) + (fracn3 / (float_t)0x2000) + (float_t)1);
  33703. 800e9c0: 697b ldr r3, [r7, #20]
  33704. 800e9c2: ee07 3a90 vmov s15, r3
  33705. 800e9c6: eef8 7a67 vcvt.f32.u32 s15, s15
  33706. 800e9ca: eddf 6a3d vldr s13, [pc, #244] @ 800eac0 <HAL_RCCEx_GetPLL3ClockFreq+0x2a0>
  33707. 800e9ce: ee86 7aa7 vdiv.f32 s14, s13, s15
  33708. 800e9d2: 4b37 ldr r3, [pc, #220] @ (800eab0 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  33709. 800e9d4: 6c1b ldr r3, [r3, #64] @ 0x40
  33710. 800e9d6: f3c3 0308 ubfx r3, r3, #0, #9
  33711. 800e9da: ee07 3a90 vmov s15, r3
  33712. 800e9de: eef8 6a67 vcvt.f32.u32 s13, s15
  33713. 800e9e2: ed97 6a03 vldr s12, [r7, #12]
  33714. 800e9e6: eddf 5a34 vldr s11, [pc, #208] @ 800eab8 <HAL_RCCEx_GetPLL3ClockFreq+0x298>
  33715. 800e9ea: eec6 7a25 vdiv.f32 s15, s12, s11
  33716. 800e9ee: ee76 7aa7 vadd.f32 s15, s13, s15
  33717. 800e9f2: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  33718. 800e9f6: ee77 7aa6 vadd.f32 s15, s15, s13
  33719. 800e9fa: ee67 7a27 vmul.f32 s15, s14, s15
  33720. 800e9fe: edc7 7a07 vstr s15, [r7, #28]
  33721. break;
  33722. 800ea02: bf00 nop
  33723. }
  33724. PLL3_Clocks->PLL3_P_Frequency = (uint32_t)(float_t)(pll3vco / ((float_t)(uint32_t)((RCC->PLL3DIVR & RCC_PLL3DIVR_P3) >> 9) + (float_t)1)) ;
  33725. 800ea04: 4b2a ldr r3, [pc, #168] @ (800eab0 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  33726. 800ea06: 6c1b ldr r3, [r3, #64] @ 0x40
  33727. 800ea08: 0a5b lsrs r3, r3, #9
  33728. 800ea0a: f003 037f and.w r3, r3, #127 @ 0x7f
  33729. 800ea0e: ee07 3a90 vmov s15, r3
  33730. 800ea12: eef8 7a67 vcvt.f32.u32 s15, s15
  33731. 800ea16: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  33732. 800ea1a: ee37 7a87 vadd.f32 s14, s15, s14
  33733. 800ea1e: edd7 6a07 vldr s13, [r7, #28]
  33734. 800ea22: eec6 7a87 vdiv.f32 s15, s13, s14
  33735. 800ea26: eefc 7ae7 vcvt.u32.f32 s15, s15
  33736. 800ea2a: ee17 2a90 vmov r2, s15
  33737. 800ea2e: 687b ldr r3, [r7, #4]
  33738. 800ea30: 601a str r2, [r3, #0]
  33739. PLL3_Clocks->PLL3_Q_Frequency = (uint32_t)(float_t)(pll3vco / ((float_t)(uint32_t)((RCC->PLL3DIVR & RCC_PLL3DIVR_Q3) >> 16) + (float_t)1)) ;
  33740. 800ea32: 4b1f ldr r3, [pc, #124] @ (800eab0 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  33741. 800ea34: 6c1b ldr r3, [r3, #64] @ 0x40
  33742. 800ea36: 0c1b lsrs r3, r3, #16
  33743. 800ea38: f003 037f and.w r3, r3, #127 @ 0x7f
  33744. 800ea3c: ee07 3a90 vmov s15, r3
  33745. 800ea40: eef8 7a67 vcvt.f32.u32 s15, s15
  33746. 800ea44: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  33747. 800ea48: ee37 7a87 vadd.f32 s14, s15, s14
  33748. 800ea4c: edd7 6a07 vldr s13, [r7, #28]
  33749. 800ea50: eec6 7a87 vdiv.f32 s15, s13, s14
  33750. 800ea54: eefc 7ae7 vcvt.u32.f32 s15, s15
  33751. 800ea58: ee17 2a90 vmov r2, s15
  33752. 800ea5c: 687b ldr r3, [r7, #4]
  33753. 800ea5e: 605a str r2, [r3, #4]
  33754. PLL3_Clocks->PLL3_R_Frequency = (uint32_t)(float_t)(pll3vco / ((float_t)(uint32_t)((RCC->PLL3DIVR & RCC_PLL3DIVR_R3) >> 24) + (float_t)1)) ;
  33755. 800ea60: 4b13 ldr r3, [pc, #76] @ (800eab0 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  33756. 800ea62: 6c1b ldr r3, [r3, #64] @ 0x40
  33757. 800ea64: 0e1b lsrs r3, r3, #24
  33758. 800ea66: f003 037f and.w r3, r3, #127 @ 0x7f
  33759. 800ea6a: ee07 3a90 vmov s15, r3
  33760. 800ea6e: eef8 7a67 vcvt.f32.u32 s15, s15
  33761. 800ea72: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  33762. 800ea76: ee37 7a87 vadd.f32 s14, s15, s14
  33763. 800ea7a: edd7 6a07 vldr s13, [r7, #28]
  33764. 800ea7e: eec6 7a87 vdiv.f32 s15, s13, s14
  33765. 800ea82: eefc 7ae7 vcvt.u32.f32 s15, s15
  33766. 800ea86: ee17 2a90 vmov r2, s15
  33767. 800ea8a: 687b ldr r3, [r7, #4]
  33768. 800ea8c: 609a str r2, [r3, #8]
  33769. PLL3_Clocks->PLL3_P_Frequency = 0U;
  33770. PLL3_Clocks->PLL3_Q_Frequency = 0U;
  33771. PLL3_Clocks->PLL3_R_Frequency = 0U;
  33772. }
  33773. }
  33774. 800ea8e: e008 b.n 800eaa2 <HAL_RCCEx_GetPLL3ClockFreq+0x282>
  33775. PLL3_Clocks->PLL3_P_Frequency = 0U;
  33776. 800ea90: 687b ldr r3, [r7, #4]
  33777. 800ea92: 2200 movs r2, #0
  33778. 800ea94: 601a str r2, [r3, #0]
  33779. PLL3_Clocks->PLL3_Q_Frequency = 0U;
  33780. 800ea96: 687b ldr r3, [r7, #4]
  33781. 800ea98: 2200 movs r2, #0
  33782. 800ea9a: 605a str r2, [r3, #4]
  33783. PLL3_Clocks->PLL3_R_Frequency = 0U;
  33784. 800ea9c: 687b ldr r3, [r7, #4]
  33785. 800ea9e: 2200 movs r2, #0
  33786. 800eaa0: 609a str r2, [r3, #8]
  33787. }
  33788. 800eaa2: bf00 nop
  33789. 800eaa4: 3724 adds r7, #36 @ 0x24
  33790. 800eaa6: 46bd mov sp, r7
  33791. 800eaa8: f85d 7b04 ldr.w r7, [sp], #4
  33792. 800eaac: 4770 bx lr
  33793. 800eaae: bf00 nop
  33794. 800eab0: 58024400 .word 0x58024400
  33795. 800eab4: 03d09000 .word 0x03d09000
  33796. 800eab8: 46000000 .word 0x46000000
  33797. 800eabc: 4c742400 .word 0x4c742400
  33798. 800eac0: 4a742400 .word 0x4a742400
  33799. 800eac4: 4bbebc20 .word 0x4bbebc20
  33800. 0800eac8 <HAL_RCCEx_GetPLL1ClockFreq>:
  33801. * right PLL1CLK value. Otherwise, any configuration based on this function will be incorrect.
  33802. * @param PLL1_Clocks structure.
  33803. * @retval None
  33804. */
  33805. void HAL_RCCEx_GetPLL1ClockFreq(PLL1_ClocksTypeDef *PLL1_Clocks)
  33806. {
  33807. 800eac8: b480 push {r7}
  33808. 800eaca: b089 sub sp, #36 @ 0x24
  33809. 800eacc: af00 add r7, sp, #0
  33810. 800eace: 6078 str r0, [r7, #4]
  33811. uint32_t pllsource, pll1m, pll1fracen, hsivalue;
  33812. float_t fracn1, pll1vco;
  33813. pllsource = (RCC->PLLCKSELR & RCC_PLLCKSELR_PLLSRC);
  33814. 800ead0: 4ba0 ldr r3, [pc, #640] @ (800ed54 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  33815. 800ead2: 6a9b ldr r3, [r3, #40] @ 0x28
  33816. 800ead4: f003 0303 and.w r3, r3, #3
  33817. 800ead8: 61bb str r3, [r7, #24]
  33818. pll1m = ((RCC->PLLCKSELR & RCC_PLLCKSELR_DIVM1) >> 4);
  33819. 800eada: 4b9e ldr r3, [pc, #632] @ (800ed54 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  33820. 800eadc: 6a9b ldr r3, [r3, #40] @ 0x28
  33821. 800eade: 091b lsrs r3, r3, #4
  33822. 800eae0: f003 033f and.w r3, r3, #63 @ 0x3f
  33823. 800eae4: 617b str r3, [r7, #20]
  33824. pll1fracen = RCC->PLLCFGR & RCC_PLLCFGR_PLL1FRACEN;
  33825. 800eae6: 4b9b ldr r3, [pc, #620] @ (800ed54 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  33826. 800eae8: 6adb ldr r3, [r3, #44] @ 0x2c
  33827. 800eaea: f003 0301 and.w r3, r3, #1
  33828. 800eaee: 613b str r3, [r7, #16]
  33829. fracn1 = (float_t)(uint32_t)(pll1fracen * ((RCC->PLL1FRACR & RCC_PLL1FRACR_FRACN1) >> 3));
  33830. 800eaf0: 4b98 ldr r3, [pc, #608] @ (800ed54 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  33831. 800eaf2: 6b5b ldr r3, [r3, #52] @ 0x34
  33832. 800eaf4: 08db lsrs r3, r3, #3
  33833. 800eaf6: f3c3 030c ubfx r3, r3, #0, #13
  33834. 800eafa: 693a ldr r2, [r7, #16]
  33835. 800eafc: fb02 f303 mul.w r3, r2, r3
  33836. 800eb00: ee07 3a90 vmov s15, r3
  33837. 800eb04: eef8 7a67 vcvt.f32.u32 s15, s15
  33838. 800eb08: edc7 7a03 vstr s15, [r7, #12]
  33839. if (pll1m != 0U)
  33840. 800eb0c: 697b ldr r3, [r7, #20]
  33841. 800eb0e: 2b00 cmp r3, #0
  33842. 800eb10: f000 8111 beq.w 800ed36 <HAL_RCCEx_GetPLL1ClockFreq+0x26e>
  33843. {
  33844. switch (pllsource)
  33845. 800eb14: 69bb ldr r3, [r7, #24]
  33846. 800eb16: 2b02 cmp r3, #2
  33847. 800eb18: f000 8083 beq.w 800ec22 <HAL_RCCEx_GetPLL1ClockFreq+0x15a>
  33848. 800eb1c: 69bb ldr r3, [r7, #24]
  33849. 800eb1e: 2b02 cmp r3, #2
  33850. 800eb20: f200 80a1 bhi.w 800ec66 <HAL_RCCEx_GetPLL1ClockFreq+0x19e>
  33851. 800eb24: 69bb ldr r3, [r7, #24]
  33852. 800eb26: 2b00 cmp r3, #0
  33853. 800eb28: d003 beq.n 800eb32 <HAL_RCCEx_GetPLL1ClockFreq+0x6a>
  33854. 800eb2a: 69bb ldr r3, [r7, #24]
  33855. 800eb2c: 2b01 cmp r3, #1
  33856. 800eb2e: d056 beq.n 800ebde <HAL_RCCEx_GetPLL1ClockFreq+0x116>
  33857. 800eb30: e099 b.n 800ec66 <HAL_RCCEx_GetPLL1ClockFreq+0x19e>
  33858. {
  33859. case RCC_PLLSOURCE_HSI: /* HSI used as PLL clock source */
  33860. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  33861. 800eb32: 4b88 ldr r3, [pc, #544] @ (800ed54 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  33862. 800eb34: 681b ldr r3, [r3, #0]
  33863. 800eb36: f003 0320 and.w r3, r3, #32
  33864. 800eb3a: 2b00 cmp r3, #0
  33865. 800eb3c: d02d beq.n 800eb9a <HAL_RCCEx_GetPLL1ClockFreq+0xd2>
  33866. {
  33867. hsivalue = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  33868. 800eb3e: 4b85 ldr r3, [pc, #532] @ (800ed54 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  33869. 800eb40: 681b ldr r3, [r3, #0]
  33870. 800eb42: 08db lsrs r3, r3, #3
  33871. 800eb44: f003 0303 and.w r3, r3, #3
  33872. 800eb48: 4a83 ldr r2, [pc, #524] @ (800ed58 <HAL_RCCEx_GetPLL1ClockFreq+0x290>)
  33873. 800eb4a: fa22 f303 lsr.w r3, r2, r3
  33874. 800eb4e: 60bb str r3, [r7, #8]
  33875. pll1vco = ((float_t)hsivalue / (float_t)pll1m) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  33876. 800eb50: 68bb ldr r3, [r7, #8]
  33877. 800eb52: ee07 3a90 vmov s15, r3
  33878. 800eb56: eef8 6a67 vcvt.f32.u32 s13, s15
  33879. 800eb5a: 697b ldr r3, [r7, #20]
  33880. 800eb5c: ee07 3a90 vmov s15, r3
  33881. 800eb60: eef8 7a67 vcvt.f32.u32 s15, s15
  33882. 800eb64: ee86 7aa7 vdiv.f32 s14, s13, s15
  33883. 800eb68: 4b7a ldr r3, [pc, #488] @ (800ed54 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  33884. 800eb6a: 6b1b ldr r3, [r3, #48] @ 0x30
  33885. 800eb6c: f3c3 0308 ubfx r3, r3, #0, #9
  33886. 800eb70: ee07 3a90 vmov s15, r3
  33887. 800eb74: eef8 6a67 vcvt.f32.u32 s13, s15
  33888. 800eb78: ed97 6a03 vldr s12, [r7, #12]
  33889. 800eb7c: eddf 5a77 vldr s11, [pc, #476] @ 800ed5c <HAL_RCCEx_GetPLL1ClockFreq+0x294>
  33890. 800eb80: eec6 7a25 vdiv.f32 s15, s12, s11
  33891. 800eb84: ee76 7aa7 vadd.f32 s15, s13, s15
  33892. 800eb88: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  33893. 800eb8c: ee77 7aa6 vadd.f32 s15, s15, s13
  33894. 800eb90: ee67 7a27 vmul.f32 s15, s14, s15
  33895. 800eb94: edc7 7a07 vstr s15, [r7, #28]
  33896. }
  33897. else
  33898. {
  33899. pll1vco = ((float_t)HSI_VALUE / (float_t)pll1m) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  33900. }
  33901. break;
  33902. 800eb98: e087 b.n 800ecaa <HAL_RCCEx_GetPLL1ClockFreq+0x1e2>
  33903. pll1vco = ((float_t)HSI_VALUE / (float_t)pll1m) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  33904. 800eb9a: 697b ldr r3, [r7, #20]
  33905. 800eb9c: ee07 3a90 vmov s15, r3
  33906. 800eba0: eef8 7a67 vcvt.f32.u32 s15, s15
  33907. 800eba4: eddf 6a6e vldr s13, [pc, #440] @ 800ed60 <HAL_RCCEx_GetPLL1ClockFreq+0x298>
  33908. 800eba8: ee86 7aa7 vdiv.f32 s14, s13, s15
  33909. 800ebac: 4b69 ldr r3, [pc, #420] @ (800ed54 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  33910. 800ebae: 6b1b ldr r3, [r3, #48] @ 0x30
  33911. 800ebb0: f3c3 0308 ubfx r3, r3, #0, #9
  33912. 800ebb4: ee07 3a90 vmov s15, r3
  33913. 800ebb8: eef8 6a67 vcvt.f32.u32 s13, s15
  33914. 800ebbc: ed97 6a03 vldr s12, [r7, #12]
  33915. 800ebc0: eddf 5a66 vldr s11, [pc, #408] @ 800ed5c <HAL_RCCEx_GetPLL1ClockFreq+0x294>
  33916. 800ebc4: eec6 7a25 vdiv.f32 s15, s12, s11
  33917. 800ebc8: ee76 7aa7 vadd.f32 s15, s13, s15
  33918. 800ebcc: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  33919. 800ebd0: ee77 7aa6 vadd.f32 s15, s15, s13
  33920. 800ebd4: ee67 7a27 vmul.f32 s15, s14, s15
  33921. 800ebd8: edc7 7a07 vstr s15, [r7, #28]
  33922. break;
  33923. 800ebdc: e065 b.n 800ecaa <HAL_RCCEx_GetPLL1ClockFreq+0x1e2>
  33924. case RCC_PLLSOURCE_CSI: /* CSI used as PLL clock source */
  33925. pll1vco = ((float_t)CSI_VALUE / (float_t)pll1m) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  33926. 800ebde: 697b ldr r3, [r7, #20]
  33927. 800ebe0: ee07 3a90 vmov s15, r3
  33928. 800ebe4: eef8 7a67 vcvt.f32.u32 s15, s15
  33929. 800ebe8: eddf 6a5e vldr s13, [pc, #376] @ 800ed64 <HAL_RCCEx_GetPLL1ClockFreq+0x29c>
  33930. 800ebec: ee86 7aa7 vdiv.f32 s14, s13, s15
  33931. 800ebf0: 4b58 ldr r3, [pc, #352] @ (800ed54 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  33932. 800ebf2: 6b1b ldr r3, [r3, #48] @ 0x30
  33933. 800ebf4: f3c3 0308 ubfx r3, r3, #0, #9
  33934. 800ebf8: ee07 3a90 vmov s15, r3
  33935. 800ebfc: eef8 6a67 vcvt.f32.u32 s13, s15
  33936. 800ec00: ed97 6a03 vldr s12, [r7, #12]
  33937. 800ec04: eddf 5a55 vldr s11, [pc, #340] @ 800ed5c <HAL_RCCEx_GetPLL1ClockFreq+0x294>
  33938. 800ec08: eec6 7a25 vdiv.f32 s15, s12, s11
  33939. 800ec0c: ee76 7aa7 vadd.f32 s15, s13, s15
  33940. 800ec10: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  33941. 800ec14: ee77 7aa6 vadd.f32 s15, s15, s13
  33942. 800ec18: ee67 7a27 vmul.f32 s15, s14, s15
  33943. 800ec1c: edc7 7a07 vstr s15, [r7, #28]
  33944. break;
  33945. 800ec20: e043 b.n 800ecaa <HAL_RCCEx_GetPLL1ClockFreq+0x1e2>
  33946. case RCC_PLLSOURCE_HSE: /* HSE used as PLL clock source */
  33947. pll1vco = ((float_t)HSE_VALUE / (float_t)pll1m) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  33948. 800ec22: 697b ldr r3, [r7, #20]
  33949. 800ec24: ee07 3a90 vmov s15, r3
  33950. 800ec28: eef8 7a67 vcvt.f32.u32 s15, s15
  33951. 800ec2c: eddf 6a4e vldr s13, [pc, #312] @ 800ed68 <HAL_RCCEx_GetPLL1ClockFreq+0x2a0>
  33952. 800ec30: ee86 7aa7 vdiv.f32 s14, s13, s15
  33953. 800ec34: 4b47 ldr r3, [pc, #284] @ (800ed54 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  33954. 800ec36: 6b1b ldr r3, [r3, #48] @ 0x30
  33955. 800ec38: f3c3 0308 ubfx r3, r3, #0, #9
  33956. 800ec3c: ee07 3a90 vmov s15, r3
  33957. 800ec40: eef8 6a67 vcvt.f32.u32 s13, s15
  33958. 800ec44: ed97 6a03 vldr s12, [r7, #12]
  33959. 800ec48: eddf 5a44 vldr s11, [pc, #272] @ 800ed5c <HAL_RCCEx_GetPLL1ClockFreq+0x294>
  33960. 800ec4c: eec6 7a25 vdiv.f32 s15, s12, s11
  33961. 800ec50: ee76 7aa7 vadd.f32 s15, s13, s15
  33962. 800ec54: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  33963. 800ec58: ee77 7aa6 vadd.f32 s15, s15, s13
  33964. 800ec5c: ee67 7a27 vmul.f32 s15, s14, s15
  33965. 800ec60: edc7 7a07 vstr s15, [r7, #28]
  33966. break;
  33967. 800ec64: e021 b.n 800ecaa <HAL_RCCEx_GetPLL1ClockFreq+0x1e2>
  33968. default:
  33969. pll1vco = ((float_t)HSI_VALUE / (float_t)pll1m) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  33970. 800ec66: 697b ldr r3, [r7, #20]
  33971. 800ec68: ee07 3a90 vmov s15, r3
  33972. 800ec6c: eef8 7a67 vcvt.f32.u32 s15, s15
  33973. 800ec70: eddf 6a3b vldr s13, [pc, #236] @ 800ed60 <HAL_RCCEx_GetPLL1ClockFreq+0x298>
  33974. 800ec74: ee86 7aa7 vdiv.f32 s14, s13, s15
  33975. 800ec78: 4b36 ldr r3, [pc, #216] @ (800ed54 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  33976. 800ec7a: 6b1b ldr r3, [r3, #48] @ 0x30
  33977. 800ec7c: f3c3 0308 ubfx r3, r3, #0, #9
  33978. 800ec80: ee07 3a90 vmov s15, r3
  33979. 800ec84: eef8 6a67 vcvt.f32.u32 s13, s15
  33980. 800ec88: ed97 6a03 vldr s12, [r7, #12]
  33981. 800ec8c: eddf 5a33 vldr s11, [pc, #204] @ 800ed5c <HAL_RCCEx_GetPLL1ClockFreq+0x294>
  33982. 800ec90: eec6 7a25 vdiv.f32 s15, s12, s11
  33983. 800ec94: ee76 7aa7 vadd.f32 s15, s13, s15
  33984. 800ec98: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  33985. 800ec9c: ee77 7aa6 vadd.f32 s15, s15, s13
  33986. 800eca0: ee67 7a27 vmul.f32 s15, s14, s15
  33987. 800eca4: edc7 7a07 vstr s15, [r7, #28]
  33988. break;
  33989. 800eca8: bf00 nop
  33990. }
  33991. PLL1_Clocks->PLL1_P_Frequency = (uint32_t)(float_t)(pll1vco / ((float_t)(uint32_t)((RCC->PLL1DIVR & RCC_PLL1DIVR_P1) >> 9) + (float_t)1)) ;
  33992. 800ecaa: 4b2a ldr r3, [pc, #168] @ (800ed54 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  33993. 800ecac: 6b1b ldr r3, [r3, #48] @ 0x30
  33994. 800ecae: 0a5b lsrs r3, r3, #9
  33995. 800ecb0: f003 037f and.w r3, r3, #127 @ 0x7f
  33996. 800ecb4: ee07 3a90 vmov s15, r3
  33997. 800ecb8: eef8 7a67 vcvt.f32.u32 s15, s15
  33998. 800ecbc: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  33999. 800ecc0: ee37 7a87 vadd.f32 s14, s15, s14
  34000. 800ecc4: edd7 6a07 vldr s13, [r7, #28]
  34001. 800ecc8: eec6 7a87 vdiv.f32 s15, s13, s14
  34002. 800eccc: eefc 7ae7 vcvt.u32.f32 s15, s15
  34003. 800ecd0: ee17 2a90 vmov r2, s15
  34004. 800ecd4: 687b ldr r3, [r7, #4]
  34005. 800ecd6: 601a str r2, [r3, #0]
  34006. PLL1_Clocks->PLL1_Q_Frequency = (uint32_t)(float_t)(pll1vco / ((float_t)(uint32_t)((RCC->PLL1DIVR & RCC_PLL1DIVR_Q1) >> 16) + (float_t)1)) ;
  34007. 800ecd8: 4b1e ldr r3, [pc, #120] @ (800ed54 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  34008. 800ecda: 6b1b ldr r3, [r3, #48] @ 0x30
  34009. 800ecdc: 0c1b lsrs r3, r3, #16
  34010. 800ecde: f003 037f and.w r3, r3, #127 @ 0x7f
  34011. 800ece2: ee07 3a90 vmov s15, r3
  34012. 800ece6: eef8 7a67 vcvt.f32.u32 s15, s15
  34013. 800ecea: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  34014. 800ecee: ee37 7a87 vadd.f32 s14, s15, s14
  34015. 800ecf2: edd7 6a07 vldr s13, [r7, #28]
  34016. 800ecf6: eec6 7a87 vdiv.f32 s15, s13, s14
  34017. 800ecfa: eefc 7ae7 vcvt.u32.f32 s15, s15
  34018. 800ecfe: ee17 2a90 vmov r2, s15
  34019. 800ed02: 687b ldr r3, [r7, #4]
  34020. 800ed04: 605a str r2, [r3, #4]
  34021. PLL1_Clocks->PLL1_R_Frequency = (uint32_t)(float_t)(pll1vco / ((float_t)(uint32_t)((RCC->PLL1DIVR & RCC_PLL1DIVR_R1) >> 24) + (float_t)1)) ;
  34022. 800ed06: 4b13 ldr r3, [pc, #76] @ (800ed54 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  34023. 800ed08: 6b1b ldr r3, [r3, #48] @ 0x30
  34024. 800ed0a: 0e1b lsrs r3, r3, #24
  34025. 800ed0c: f003 037f and.w r3, r3, #127 @ 0x7f
  34026. 800ed10: ee07 3a90 vmov s15, r3
  34027. 800ed14: eef8 7a67 vcvt.f32.u32 s15, s15
  34028. 800ed18: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  34029. 800ed1c: ee37 7a87 vadd.f32 s14, s15, s14
  34030. 800ed20: edd7 6a07 vldr s13, [r7, #28]
  34031. 800ed24: eec6 7a87 vdiv.f32 s15, s13, s14
  34032. 800ed28: eefc 7ae7 vcvt.u32.f32 s15, s15
  34033. 800ed2c: ee17 2a90 vmov r2, s15
  34034. 800ed30: 687b ldr r3, [r7, #4]
  34035. 800ed32: 609a str r2, [r3, #8]
  34036. PLL1_Clocks->PLL1_P_Frequency = 0U;
  34037. PLL1_Clocks->PLL1_Q_Frequency = 0U;
  34038. PLL1_Clocks->PLL1_R_Frequency = 0U;
  34039. }
  34040. }
  34041. 800ed34: e008 b.n 800ed48 <HAL_RCCEx_GetPLL1ClockFreq+0x280>
  34042. PLL1_Clocks->PLL1_P_Frequency = 0U;
  34043. 800ed36: 687b ldr r3, [r7, #4]
  34044. 800ed38: 2200 movs r2, #0
  34045. 800ed3a: 601a str r2, [r3, #0]
  34046. PLL1_Clocks->PLL1_Q_Frequency = 0U;
  34047. 800ed3c: 687b ldr r3, [r7, #4]
  34048. 800ed3e: 2200 movs r2, #0
  34049. 800ed40: 605a str r2, [r3, #4]
  34050. PLL1_Clocks->PLL1_R_Frequency = 0U;
  34051. 800ed42: 687b ldr r3, [r7, #4]
  34052. 800ed44: 2200 movs r2, #0
  34053. 800ed46: 609a str r2, [r3, #8]
  34054. }
  34055. 800ed48: bf00 nop
  34056. 800ed4a: 3724 adds r7, #36 @ 0x24
  34057. 800ed4c: 46bd mov sp, r7
  34058. 800ed4e: f85d 7b04 ldr.w r7, [sp], #4
  34059. 800ed52: 4770 bx lr
  34060. 800ed54: 58024400 .word 0x58024400
  34061. 800ed58: 03d09000 .word 0x03d09000
  34062. 800ed5c: 46000000 .word 0x46000000
  34063. 800ed60: 4c742400 .word 0x4c742400
  34064. 800ed64: 4a742400 .word 0x4a742400
  34065. 800ed68: 4bbebc20 .word 0x4bbebc20
  34066. 0800ed6c <RCCEx_PLL2_Config>:
  34067. * @note PLL2 is temporary disabled to apply new parameters
  34068. *
  34069. * @retval HAL status
  34070. */
  34071. static HAL_StatusTypeDef RCCEx_PLL2_Config(RCC_PLL2InitTypeDef *pll2, uint32_t Divider)
  34072. {
  34073. 800ed6c: b580 push {r7, lr}
  34074. 800ed6e: b084 sub sp, #16
  34075. 800ed70: af00 add r7, sp, #0
  34076. 800ed72: 6078 str r0, [r7, #4]
  34077. 800ed74: 6039 str r1, [r7, #0]
  34078. uint32_t tickstart;
  34079. HAL_StatusTypeDef status = HAL_OK;
  34080. 800ed76: 2300 movs r3, #0
  34081. 800ed78: 73fb strb r3, [r7, #15]
  34082. assert_param(IS_RCC_PLL2RGE_VALUE(pll2->PLL2RGE));
  34083. assert_param(IS_RCC_PLL2VCO_VALUE(pll2->PLL2VCOSEL));
  34084. assert_param(IS_RCC_PLLFRACN_VALUE(pll2->PLL2FRACN));
  34085. /* Check that PLL2 OSC clock source is already set */
  34086. if (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_NONE)
  34087. 800ed7a: 4b53 ldr r3, [pc, #332] @ (800eec8 <RCCEx_PLL2_Config+0x15c>)
  34088. 800ed7c: 6a9b ldr r3, [r3, #40] @ 0x28
  34089. 800ed7e: f003 0303 and.w r3, r3, #3
  34090. 800ed82: 2b03 cmp r3, #3
  34091. 800ed84: d101 bne.n 800ed8a <RCCEx_PLL2_Config+0x1e>
  34092. {
  34093. return HAL_ERROR;
  34094. 800ed86: 2301 movs r3, #1
  34095. 800ed88: e099 b.n 800eebe <RCCEx_PLL2_Config+0x152>
  34096. else
  34097. {
  34098. /* Disable PLL2. */
  34099. __HAL_RCC_PLL2_DISABLE();
  34100. 800ed8a: 4b4f ldr r3, [pc, #316] @ (800eec8 <RCCEx_PLL2_Config+0x15c>)
  34101. 800ed8c: 681b ldr r3, [r3, #0]
  34102. 800ed8e: 4a4e ldr r2, [pc, #312] @ (800eec8 <RCCEx_PLL2_Config+0x15c>)
  34103. 800ed90: f023 6380 bic.w r3, r3, #67108864 @ 0x4000000
  34104. 800ed94: 6013 str r3, [r2, #0]
  34105. /* Get Start Tick*/
  34106. tickstart = HAL_GetTick();
  34107. 800ed96: f7f6 ff0b bl 8005bb0 <HAL_GetTick>
  34108. 800ed9a: 60b8 str r0, [r7, #8]
  34109. /* Wait till PLL is disabled */
  34110. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != 0U)
  34111. 800ed9c: e008 b.n 800edb0 <RCCEx_PLL2_Config+0x44>
  34112. {
  34113. if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE)
  34114. 800ed9e: f7f6 ff07 bl 8005bb0 <HAL_GetTick>
  34115. 800eda2: 4602 mov r2, r0
  34116. 800eda4: 68bb ldr r3, [r7, #8]
  34117. 800eda6: 1ad3 subs r3, r2, r3
  34118. 800eda8: 2b02 cmp r3, #2
  34119. 800edaa: d901 bls.n 800edb0 <RCCEx_PLL2_Config+0x44>
  34120. {
  34121. return HAL_TIMEOUT;
  34122. 800edac: 2303 movs r3, #3
  34123. 800edae: e086 b.n 800eebe <RCCEx_PLL2_Config+0x152>
  34124. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != 0U)
  34125. 800edb0: 4b45 ldr r3, [pc, #276] @ (800eec8 <RCCEx_PLL2_Config+0x15c>)
  34126. 800edb2: 681b ldr r3, [r3, #0]
  34127. 800edb4: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  34128. 800edb8: 2b00 cmp r3, #0
  34129. 800edba: d1f0 bne.n 800ed9e <RCCEx_PLL2_Config+0x32>
  34130. }
  34131. }
  34132. /* Configure PLL2 multiplication and division factors. */
  34133. __HAL_RCC_PLL2_CONFIG(pll2->PLL2M,
  34134. 800edbc: 4b42 ldr r3, [pc, #264] @ (800eec8 <RCCEx_PLL2_Config+0x15c>)
  34135. 800edbe: 6a9b ldr r3, [r3, #40] @ 0x28
  34136. 800edc0: f423 327c bic.w r2, r3, #258048 @ 0x3f000
  34137. 800edc4: 687b ldr r3, [r7, #4]
  34138. 800edc6: 681b ldr r3, [r3, #0]
  34139. 800edc8: 031b lsls r3, r3, #12
  34140. 800edca: 493f ldr r1, [pc, #252] @ (800eec8 <RCCEx_PLL2_Config+0x15c>)
  34141. 800edcc: 4313 orrs r3, r2
  34142. 800edce: 628b str r3, [r1, #40] @ 0x28
  34143. 800edd0: 687b ldr r3, [r7, #4]
  34144. 800edd2: 685b ldr r3, [r3, #4]
  34145. 800edd4: 3b01 subs r3, #1
  34146. 800edd6: f3c3 0208 ubfx r2, r3, #0, #9
  34147. 800edda: 687b ldr r3, [r7, #4]
  34148. 800eddc: 689b ldr r3, [r3, #8]
  34149. 800edde: 3b01 subs r3, #1
  34150. 800ede0: 025b lsls r3, r3, #9
  34151. 800ede2: b29b uxth r3, r3
  34152. 800ede4: 431a orrs r2, r3
  34153. 800ede6: 687b ldr r3, [r7, #4]
  34154. 800ede8: 68db ldr r3, [r3, #12]
  34155. 800edea: 3b01 subs r3, #1
  34156. 800edec: 041b lsls r3, r3, #16
  34157. 800edee: f403 03fe and.w r3, r3, #8323072 @ 0x7f0000
  34158. 800edf2: 431a orrs r2, r3
  34159. 800edf4: 687b ldr r3, [r7, #4]
  34160. 800edf6: 691b ldr r3, [r3, #16]
  34161. 800edf8: 3b01 subs r3, #1
  34162. 800edfa: 061b lsls r3, r3, #24
  34163. 800edfc: f003 43fe and.w r3, r3, #2130706432 @ 0x7f000000
  34164. 800ee00: 4931 ldr r1, [pc, #196] @ (800eec8 <RCCEx_PLL2_Config+0x15c>)
  34165. 800ee02: 4313 orrs r3, r2
  34166. 800ee04: 638b str r3, [r1, #56] @ 0x38
  34167. pll2->PLL2P,
  34168. pll2->PLL2Q,
  34169. pll2->PLL2R);
  34170. /* Select PLL2 input reference frequency range: VCI */
  34171. __HAL_RCC_PLL2_VCIRANGE(pll2->PLL2RGE) ;
  34172. 800ee06: 4b30 ldr r3, [pc, #192] @ (800eec8 <RCCEx_PLL2_Config+0x15c>)
  34173. 800ee08: 6adb ldr r3, [r3, #44] @ 0x2c
  34174. 800ee0a: f023 02c0 bic.w r2, r3, #192 @ 0xc0
  34175. 800ee0e: 687b ldr r3, [r7, #4]
  34176. 800ee10: 695b ldr r3, [r3, #20]
  34177. 800ee12: 492d ldr r1, [pc, #180] @ (800eec8 <RCCEx_PLL2_Config+0x15c>)
  34178. 800ee14: 4313 orrs r3, r2
  34179. 800ee16: 62cb str r3, [r1, #44] @ 0x2c
  34180. /* Select PLL2 output frequency range : VCO */
  34181. __HAL_RCC_PLL2_VCORANGE(pll2->PLL2VCOSEL) ;
  34182. 800ee18: 4b2b ldr r3, [pc, #172] @ (800eec8 <RCCEx_PLL2_Config+0x15c>)
  34183. 800ee1a: 6adb ldr r3, [r3, #44] @ 0x2c
  34184. 800ee1c: f023 0220 bic.w r2, r3, #32
  34185. 800ee20: 687b ldr r3, [r7, #4]
  34186. 800ee22: 699b ldr r3, [r3, #24]
  34187. 800ee24: 4928 ldr r1, [pc, #160] @ (800eec8 <RCCEx_PLL2_Config+0x15c>)
  34188. 800ee26: 4313 orrs r3, r2
  34189. 800ee28: 62cb str r3, [r1, #44] @ 0x2c
  34190. /* Disable PLL2FRACN . */
  34191. __HAL_RCC_PLL2FRACN_DISABLE();
  34192. 800ee2a: 4b27 ldr r3, [pc, #156] @ (800eec8 <RCCEx_PLL2_Config+0x15c>)
  34193. 800ee2c: 6adb ldr r3, [r3, #44] @ 0x2c
  34194. 800ee2e: 4a26 ldr r2, [pc, #152] @ (800eec8 <RCCEx_PLL2_Config+0x15c>)
  34195. 800ee30: f023 0310 bic.w r3, r3, #16
  34196. 800ee34: 62d3 str r3, [r2, #44] @ 0x2c
  34197. /* Configures PLL2 clock Fractional Part Of The Multiplication Factor */
  34198. __HAL_RCC_PLL2FRACN_CONFIG(pll2->PLL2FRACN);
  34199. 800ee36: 4b24 ldr r3, [pc, #144] @ (800eec8 <RCCEx_PLL2_Config+0x15c>)
  34200. 800ee38: 6bda ldr r2, [r3, #60] @ 0x3c
  34201. 800ee3a: 4b24 ldr r3, [pc, #144] @ (800eecc <RCCEx_PLL2_Config+0x160>)
  34202. 800ee3c: 4013 ands r3, r2
  34203. 800ee3e: 687a ldr r2, [r7, #4]
  34204. 800ee40: 69d2 ldr r2, [r2, #28]
  34205. 800ee42: 00d2 lsls r2, r2, #3
  34206. 800ee44: 4920 ldr r1, [pc, #128] @ (800eec8 <RCCEx_PLL2_Config+0x15c>)
  34207. 800ee46: 4313 orrs r3, r2
  34208. 800ee48: 63cb str r3, [r1, #60] @ 0x3c
  34209. /* Enable PLL2FRACN . */
  34210. __HAL_RCC_PLL2FRACN_ENABLE();
  34211. 800ee4a: 4b1f ldr r3, [pc, #124] @ (800eec8 <RCCEx_PLL2_Config+0x15c>)
  34212. 800ee4c: 6adb ldr r3, [r3, #44] @ 0x2c
  34213. 800ee4e: 4a1e ldr r2, [pc, #120] @ (800eec8 <RCCEx_PLL2_Config+0x15c>)
  34214. 800ee50: f043 0310 orr.w r3, r3, #16
  34215. 800ee54: 62d3 str r3, [r2, #44] @ 0x2c
  34216. /* Enable the PLL2 clock output */
  34217. if (Divider == DIVIDER_P_UPDATE)
  34218. 800ee56: 683b ldr r3, [r7, #0]
  34219. 800ee58: 2b00 cmp r3, #0
  34220. 800ee5a: d106 bne.n 800ee6a <RCCEx_PLL2_Config+0xfe>
  34221. {
  34222. __HAL_RCC_PLL2CLKOUT_ENABLE(RCC_PLL2_DIVP);
  34223. 800ee5c: 4b1a ldr r3, [pc, #104] @ (800eec8 <RCCEx_PLL2_Config+0x15c>)
  34224. 800ee5e: 6adb ldr r3, [r3, #44] @ 0x2c
  34225. 800ee60: 4a19 ldr r2, [pc, #100] @ (800eec8 <RCCEx_PLL2_Config+0x15c>)
  34226. 800ee62: f443 2300 orr.w r3, r3, #524288 @ 0x80000
  34227. 800ee66: 62d3 str r3, [r2, #44] @ 0x2c
  34228. 800ee68: e00f b.n 800ee8a <RCCEx_PLL2_Config+0x11e>
  34229. }
  34230. else if (Divider == DIVIDER_Q_UPDATE)
  34231. 800ee6a: 683b ldr r3, [r7, #0]
  34232. 800ee6c: 2b01 cmp r3, #1
  34233. 800ee6e: d106 bne.n 800ee7e <RCCEx_PLL2_Config+0x112>
  34234. {
  34235. __HAL_RCC_PLL2CLKOUT_ENABLE(RCC_PLL2_DIVQ);
  34236. 800ee70: 4b15 ldr r3, [pc, #84] @ (800eec8 <RCCEx_PLL2_Config+0x15c>)
  34237. 800ee72: 6adb ldr r3, [r3, #44] @ 0x2c
  34238. 800ee74: 4a14 ldr r2, [pc, #80] @ (800eec8 <RCCEx_PLL2_Config+0x15c>)
  34239. 800ee76: f443 1380 orr.w r3, r3, #1048576 @ 0x100000
  34240. 800ee7a: 62d3 str r3, [r2, #44] @ 0x2c
  34241. 800ee7c: e005 b.n 800ee8a <RCCEx_PLL2_Config+0x11e>
  34242. }
  34243. else
  34244. {
  34245. __HAL_RCC_PLL2CLKOUT_ENABLE(RCC_PLL2_DIVR);
  34246. 800ee7e: 4b12 ldr r3, [pc, #72] @ (800eec8 <RCCEx_PLL2_Config+0x15c>)
  34247. 800ee80: 6adb ldr r3, [r3, #44] @ 0x2c
  34248. 800ee82: 4a11 ldr r2, [pc, #68] @ (800eec8 <RCCEx_PLL2_Config+0x15c>)
  34249. 800ee84: f443 1300 orr.w r3, r3, #2097152 @ 0x200000
  34250. 800ee88: 62d3 str r3, [r2, #44] @ 0x2c
  34251. }
  34252. /* Enable PLL2. */
  34253. __HAL_RCC_PLL2_ENABLE();
  34254. 800ee8a: 4b0f ldr r3, [pc, #60] @ (800eec8 <RCCEx_PLL2_Config+0x15c>)
  34255. 800ee8c: 681b ldr r3, [r3, #0]
  34256. 800ee8e: 4a0e ldr r2, [pc, #56] @ (800eec8 <RCCEx_PLL2_Config+0x15c>)
  34257. 800ee90: f043 6380 orr.w r3, r3, #67108864 @ 0x4000000
  34258. 800ee94: 6013 str r3, [r2, #0]
  34259. /* Get Start Tick*/
  34260. tickstart = HAL_GetTick();
  34261. 800ee96: f7f6 fe8b bl 8005bb0 <HAL_GetTick>
  34262. 800ee9a: 60b8 str r0, [r7, #8]
  34263. /* Wait till PLL2 is ready */
  34264. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) == 0U)
  34265. 800ee9c: e008 b.n 800eeb0 <RCCEx_PLL2_Config+0x144>
  34266. {
  34267. if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE)
  34268. 800ee9e: f7f6 fe87 bl 8005bb0 <HAL_GetTick>
  34269. 800eea2: 4602 mov r2, r0
  34270. 800eea4: 68bb ldr r3, [r7, #8]
  34271. 800eea6: 1ad3 subs r3, r2, r3
  34272. 800eea8: 2b02 cmp r3, #2
  34273. 800eeaa: d901 bls.n 800eeb0 <RCCEx_PLL2_Config+0x144>
  34274. {
  34275. return HAL_TIMEOUT;
  34276. 800eeac: 2303 movs r3, #3
  34277. 800eeae: e006 b.n 800eebe <RCCEx_PLL2_Config+0x152>
  34278. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) == 0U)
  34279. 800eeb0: 4b05 ldr r3, [pc, #20] @ (800eec8 <RCCEx_PLL2_Config+0x15c>)
  34280. 800eeb2: 681b ldr r3, [r3, #0]
  34281. 800eeb4: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  34282. 800eeb8: 2b00 cmp r3, #0
  34283. 800eeba: d0f0 beq.n 800ee9e <RCCEx_PLL2_Config+0x132>
  34284. }
  34285. }
  34286. return status;
  34287. 800eebc: 7bfb ldrb r3, [r7, #15]
  34288. }
  34289. 800eebe: 4618 mov r0, r3
  34290. 800eec0: 3710 adds r7, #16
  34291. 800eec2: 46bd mov sp, r7
  34292. 800eec4: bd80 pop {r7, pc}
  34293. 800eec6: bf00 nop
  34294. 800eec8: 58024400 .word 0x58024400
  34295. 800eecc: ffff0007 .word 0xffff0007
  34296. 0800eed0 <RCCEx_PLL3_Config>:
  34297. * @note PLL3 is temporary disabled to apply new parameters
  34298. *
  34299. * @retval HAL status
  34300. */
  34301. static HAL_StatusTypeDef RCCEx_PLL3_Config(RCC_PLL3InitTypeDef *pll3, uint32_t Divider)
  34302. {
  34303. 800eed0: b580 push {r7, lr}
  34304. 800eed2: b084 sub sp, #16
  34305. 800eed4: af00 add r7, sp, #0
  34306. 800eed6: 6078 str r0, [r7, #4]
  34307. 800eed8: 6039 str r1, [r7, #0]
  34308. uint32_t tickstart;
  34309. HAL_StatusTypeDef status = HAL_OK;
  34310. 800eeda: 2300 movs r3, #0
  34311. 800eedc: 73fb strb r3, [r7, #15]
  34312. assert_param(IS_RCC_PLL3RGE_VALUE(pll3->PLL3RGE));
  34313. assert_param(IS_RCC_PLL3VCO_VALUE(pll3->PLL3VCOSEL));
  34314. assert_param(IS_RCC_PLLFRACN_VALUE(pll3->PLL3FRACN));
  34315. /* Check that PLL3 OSC clock source is already set */
  34316. if (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_NONE)
  34317. 800eede: 4b53 ldr r3, [pc, #332] @ (800f02c <RCCEx_PLL3_Config+0x15c>)
  34318. 800eee0: 6a9b ldr r3, [r3, #40] @ 0x28
  34319. 800eee2: f003 0303 and.w r3, r3, #3
  34320. 800eee6: 2b03 cmp r3, #3
  34321. 800eee8: d101 bne.n 800eeee <RCCEx_PLL3_Config+0x1e>
  34322. {
  34323. return HAL_ERROR;
  34324. 800eeea: 2301 movs r3, #1
  34325. 800eeec: e099 b.n 800f022 <RCCEx_PLL3_Config+0x152>
  34326. else
  34327. {
  34328. /* Disable PLL3. */
  34329. __HAL_RCC_PLL3_DISABLE();
  34330. 800eeee: 4b4f ldr r3, [pc, #316] @ (800f02c <RCCEx_PLL3_Config+0x15c>)
  34331. 800eef0: 681b ldr r3, [r3, #0]
  34332. 800eef2: 4a4e ldr r2, [pc, #312] @ (800f02c <RCCEx_PLL3_Config+0x15c>)
  34333. 800eef4: f023 5380 bic.w r3, r3, #268435456 @ 0x10000000
  34334. 800eef8: 6013 str r3, [r2, #0]
  34335. /* Get Start Tick*/
  34336. tickstart = HAL_GetTick();
  34337. 800eefa: f7f6 fe59 bl 8005bb0 <HAL_GetTick>
  34338. 800eefe: 60b8 str r0, [r7, #8]
  34339. /* Wait till PLL3 is ready */
  34340. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL3RDY) != 0U)
  34341. 800ef00: e008 b.n 800ef14 <RCCEx_PLL3_Config+0x44>
  34342. {
  34343. if ((HAL_GetTick() - tickstart) > PLL3_TIMEOUT_VALUE)
  34344. 800ef02: f7f6 fe55 bl 8005bb0 <HAL_GetTick>
  34345. 800ef06: 4602 mov r2, r0
  34346. 800ef08: 68bb ldr r3, [r7, #8]
  34347. 800ef0a: 1ad3 subs r3, r2, r3
  34348. 800ef0c: 2b02 cmp r3, #2
  34349. 800ef0e: d901 bls.n 800ef14 <RCCEx_PLL3_Config+0x44>
  34350. {
  34351. return HAL_TIMEOUT;
  34352. 800ef10: 2303 movs r3, #3
  34353. 800ef12: e086 b.n 800f022 <RCCEx_PLL3_Config+0x152>
  34354. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL3RDY) != 0U)
  34355. 800ef14: 4b45 ldr r3, [pc, #276] @ (800f02c <RCCEx_PLL3_Config+0x15c>)
  34356. 800ef16: 681b ldr r3, [r3, #0]
  34357. 800ef18: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  34358. 800ef1c: 2b00 cmp r3, #0
  34359. 800ef1e: d1f0 bne.n 800ef02 <RCCEx_PLL3_Config+0x32>
  34360. }
  34361. }
  34362. /* Configure the PLL3 multiplication and division factors. */
  34363. __HAL_RCC_PLL3_CONFIG(pll3->PLL3M,
  34364. 800ef20: 4b42 ldr r3, [pc, #264] @ (800f02c <RCCEx_PLL3_Config+0x15c>)
  34365. 800ef22: 6a9b ldr r3, [r3, #40] @ 0x28
  34366. 800ef24: f023 727c bic.w r2, r3, #66060288 @ 0x3f00000
  34367. 800ef28: 687b ldr r3, [r7, #4]
  34368. 800ef2a: 681b ldr r3, [r3, #0]
  34369. 800ef2c: 051b lsls r3, r3, #20
  34370. 800ef2e: 493f ldr r1, [pc, #252] @ (800f02c <RCCEx_PLL3_Config+0x15c>)
  34371. 800ef30: 4313 orrs r3, r2
  34372. 800ef32: 628b str r3, [r1, #40] @ 0x28
  34373. 800ef34: 687b ldr r3, [r7, #4]
  34374. 800ef36: 685b ldr r3, [r3, #4]
  34375. 800ef38: 3b01 subs r3, #1
  34376. 800ef3a: f3c3 0208 ubfx r2, r3, #0, #9
  34377. 800ef3e: 687b ldr r3, [r7, #4]
  34378. 800ef40: 689b ldr r3, [r3, #8]
  34379. 800ef42: 3b01 subs r3, #1
  34380. 800ef44: 025b lsls r3, r3, #9
  34381. 800ef46: b29b uxth r3, r3
  34382. 800ef48: 431a orrs r2, r3
  34383. 800ef4a: 687b ldr r3, [r7, #4]
  34384. 800ef4c: 68db ldr r3, [r3, #12]
  34385. 800ef4e: 3b01 subs r3, #1
  34386. 800ef50: 041b lsls r3, r3, #16
  34387. 800ef52: f403 03fe and.w r3, r3, #8323072 @ 0x7f0000
  34388. 800ef56: 431a orrs r2, r3
  34389. 800ef58: 687b ldr r3, [r7, #4]
  34390. 800ef5a: 691b ldr r3, [r3, #16]
  34391. 800ef5c: 3b01 subs r3, #1
  34392. 800ef5e: 061b lsls r3, r3, #24
  34393. 800ef60: f003 43fe and.w r3, r3, #2130706432 @ 0x7f000000
  34394. 800ef64: 4931 ldr r1, [pc, #196] @ (800f02c <RCCEx_PLL3_Config+0x15c>)
  34395. 800ef66: 4313 orrs r3, r2
  34396. 800ef68: 640b str r3, [r1, #64] @ 0x40
  34397. pll3->PLL3P,
  34398. pll3->PLL3Q,
  34399. pll3->PLL3R);
  34400. /* Select PLL3 input reference frequency range: VCI */
  34401. __HAL_RCC_PLL3_VCIRANGE(pll3->PLL3RGE) ;
  34402. 800ef6a: 4b30 ldr r3, [pc, #192] @ (800f02c <RCCEx_PLL3_Config+0x15c>)
  34403. 800ef6c: 6adb ldr r3, [r3, #44] @ 0x2c
  34404. 800ef6e: f423 6240 bic.w r2, r3, #3072 @ 0xc00
  34405. 800ef72: 687b ldr r3, [r7, #4]
  34406. 800ef74: 695b ldr r3, [r3, #20]
  34407. 800ef76: 492d ldr r1, [pc, #180] @ (800f02c <RCCEx_PLL3_Config+0x15c>)
  34408. 800ef78: 4313 orrs r3, r2
  34409. 800ef7a: 62cb str r3, [r1, #44] @ 0x2c
  34410. /* Select PLL3 output frequency range : VCO */
  34411. __HAL_RCC_PLL3_VCORANGE(pll3->PLL3VCOSEL) ;
  34412. 800ef7c: 4b2b ldr r3, [pc, #172] @ (800f02c <RCCEx_PLL3_Config+0x15c>)
  34413. 800ef7e: 6adb ldr r3, [r3, #44] @ 0x2c
  34414. 800ef80: f423 7200 bic.w r2, r3, #512 @ 0x200
  34415. 800ef84: 687b ldr r3, [r7, #4]
  34416. 800ef86: 699b ldr r3, [r3, #24]
  34417. 800ef88: 4928 ldr r1, [pc, #160] @ (800f02c <RCCEx_PLL3_Config+0x15c>)
  34418. 800ef8a: 4313 orrs r3, r2
  34419. 800ef8c: 62cb str r3, [r1, #44] @ 0x2c
  34420. /* Disable PLL3FRACN . */
  34421. __HAL_RCC_PLL3FRACN_DISABLE();
  34422. 800ef8e: 4b27 ldr r3, [pc, #156] @ (800f02c <RCCEx_PLL3_Config+0x15c>)
  34423. 800ef90: 6adb ldr r3, [r3, #44] @ 0x2c
  34424. 800ef92: 4a26 ldr r2, [pc, #152] @ (800f02c <RCCEx_PLL3_Config+0x15c>)
  34425. 800ef94: f423 7380 bic.w r3, r3, #256 @ 0x100
  34426. 800ef98: 62d3 str r3, [r2, #44] @ 0x2c
  34427. /* Configures PLL3 clock Fractional Part Of The Multiplication Factor */
  34428. __HAL_RCC_PLL3FRACN_CONFIG(pll3->PLL3FRACN);
  34429. 800ef9a: 4b24 ldr r3, [pc, #144] @ (800f02c <RCCEx_PLL3_Config+0x15c>)
  34430. 800ef9c: 6c5a ldr r2, [r3, #68] @ 0x44
  34431. 800ef9e: 4b24 ldr r3, [pc, #144] @ (800f030 <RCCEx_PLL3_Config+0x160>)
  34432. 800efa0: 4013 ands r3, r2
  34433. 800efa2: 687a ldr r2, [r7, #4]
  34434. 800efa4: 69d2 ldr r2, [r2, #28]
  34435. 800efa6: 00d2 lsls r2, r2, #3
  34436. 800efa8: 4920 ldr r1, [pc, #128] @ (800f02c <RCCEx_PLL3_Config+0x15c>)
  34437. 800efaa: 4313 orrs r3, r2
  34438. 800efac: 644b str r3, [r1, #68] @ 0x44
  34439. /* Enable PLL3FRACN . */
  34440. __HAL_RCC_PLL3FRACN_ENABLE();
  34441. 800efae: 4b1f ldr r3, [pc, #124] @ (800f02c <RCCEx_PLL3_Config+0x15c>)
  34442. 800efb0: 6adb ldr r3, [r3, #44] @ 0x2c
  34443. 800efb2: 4a1e ldr r2, [pc, #120] @ (800f02c <RCCEx_PLL3_Config+0x15c>)
  34444. 800efb4: f443 7380 orr.w r3, r3, #256 @ 0x100
  34445. 800efb8: 62d3 str r3, [r2, #44] @ 0x2c
  34446. /* Enable the PLL3 clock output */
  34447. if (Divider == DIVIDER_P_UPDATE)
  34448. 800efba: 683b ldr r3, [r7, #0]
  34449. 800efbc: 2b00 cmp r3, #0
  34450. 800efbe: d106 bne.n 800efce <RCCEx_PLL3_Config+0xfe>
  34451. {
  34452. __HAL_RCC_PLL3CLKOUT_ENABLE(RCC_PLL3_DIVP);
  34453. 800efc0: 4b1a ldr r3, [pc, #104] @ (800f02c <RCCEx_PLL3_Config+0x15c>)
  34454. 800efc2: 6adb ldr r3, [r3, #44] @ 0x2c
  34455. 800efc4: 4a19 ldr r2, [pc, #100] @ (800f02c <RCCEx_PLL3_Config+0x15c>)
  34456. 800efc6: f443 0380 orr.w r3, r3, #4194304 @ 0x400000
  34457. 800efca: 62d3 str r3, [r2, #44] @ 0x2c
  34458. 800efcc: e00f b.n 800efee <RCCEx_PLL3_Config+0x11e>
  34459. }
  34460. else if (Divider == DIVIDER_Q_UPDATE)
  34461. 800efce: 683b ldr r3, [r7, #0]
  34462. 800efd0: 2b01 cmp r3, #1
  34463. 800efd2: d106 bne.n 800efe2 <RCCEx_PLL3_Config+0x112>
  34464. {
  34465. __HAL_RCC_PLL3CLKOUT_ENABLE(RCC_PLL3_DIVQ);
  34466. 800efd4: 4b15 ldr r3, [pc, #84] @ (800f02c <RCCEx_PLL3_Config+0x15c>)
  34467. 800efd6: 6adb ldr r3, [r3, #44] @ 0x2c
  34468. 800efd8: 4a14 ldr r2, [pc, #80] @ (800f02c <RCCEx_PLL3_Config+0x15c>)
  34469. 800efda: f443 0300 orr.w r3, r3, #8388608 @ 0x800000
  34470. 800efde: 62d3 str r3, [r2, #44] @ 0x2c
  34471. 800efe0: e005 b.n 800efee <RCCEx_PLL3_Config+0x11e>
  34472. }
  34473. else
  34474. {
  34475. __HAL_RCC_PLL3CLKOUT_ENABLE(RCC_PLL3_DIVR);
  34476. 800efe2: 4b12 ldr r3, [pc, #72] @ (800f02c <RCCEx_PLL3_Config+0x15c>)
  34477. 800efe4: 6adb ldr r3, [r3, #44] @ 0x2c
  34478. 800efe6: 4a11 ldr r2, [pc, #68] @ (800f02c <RCCEx_PLL3_Config+0x15c>)
  34479. 800efe8: f043 7380 orr.w r3, r3, #16777216 @ 0x1000000
  34480. 800efec: 62d3 str r3, [r2, #44] @ 0x2c
  34481. }
  34482. /* Enable PLL3. */
  34483. __HAL_RCC_PLL3_ENABLE();
  34484. 800efee: 4b0f ldr r3, [pc, #60] @ (800f02c <RCCEx_PLL3_Config+0x15c>)
  34485. 800eff0: 681b ldr r3, [r3, #0]
  34486. 800eff2: 4a0e ldr r2, [pc, #56] @ (800f02c <RCCEx_PLL3_Config+0x15c>)
  34487. 800eff4: f043 5380 orr.w r3, r3, #268435456 @ 0x10000000
  34488. 800eff8: 6013 str r3, [r2, #0]
  34489. /* Get Start Tick*/
  34490. tickstart = HAL_GetTick();
  34491. 800effa: f7f6 fdd9 bl 8005bb0 <HAL_GetTick>
  34492. 800effe: 60b8 str r0, [r7, #8]
  34493. /* Wait till PLL3 is ready */
  34494. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL3RDY) == 0U)
  34495. 800f000: e008 b.n 800f014 <RCCEx_PLL3_Config+0x144>
  34496. {
  34497. if ((HAL_GetTick() - tickstart) > PLL3_TIMEOUT_VALUE)
  34498. 800f002: f7f6 fdd5 bl 8005bb0 <HAL_GetTick>
  34499. 800f006: 4602 mov r2, r0
  34500. 800f008: 68bb ldr r3, [r7, #8]
  34501. 800f00a: 1ad3 subs r3, r2, r3
  34502. 800f00c: 2b02 cmp r3, #2
  34503. 800f00e: d901 bls.n 800f014 <RCCEx_PLL3_Config+0x144>
  34504. {
  34505. return HAL_TIMEOUT;
  34506. 800f010: 2303 movs r3, #3
  34507. 800f012: e006 b.n 800f022 <RCCEx_PLL3_Config+0x152>
  34508. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL3RDY) == 0U)
  34509. 800f014: 4b05 ldr r3, [pc, #20] @ (800f02c <RCCEx_PLL3_Config+0x15c>)
  34510. 800f016: 681b ldr r3, [r3, #0]
  34511. 800f018: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  34512. 800f01c: 2b00 cmp r3, #0
  34513. 800f01e: d0f0 beq.n 800f002 <RCCEx_PLL3_Config+0x132>
  34514. }
  34515. }
  34516. return status;
  34517. 800f020: 7bfb ldrb r3, [r7, #15]
  34518. }
  34519. 800f022: 4618 mov r0, r3
  34520. 800f024: 3710 adds r7, #16
  34521. 800f026: 46bd mov sp, r7
  34522. 800f028: bd80 pop {r7, pc}
  34523. 800f02a: bf00 nop
  34524. 800f02c: 58024400 .word 0x58024400
  34525. 800f030: ffff0007 .word 0xffff0007
  34526. 0800f034 <HAL_RNG_Init>:
  34527. * @param hrng pointer to a RNG_HandleTypeDef structure that contains
  34528. * the configuration information for RNG.
  34529. * @retval HAL status
  34530. */
  34531. HAL_StatusTypeDef HAL_RNG_Init(RNG_HandleTypeDef *hrng)
  34532. {
  34533. 800f034: b580 push {r7, lr}
  34534. 800f036: b084 sub sp, #16
  34535. 800f038: af00 add r7, sp, #0
  34536. 800f03a: 6078 str r0, [r7, #4]
  34537. uint32_t tickstart;
  34538. /* Check the RNG handle allocation */
  34539. if (hrng == NULL)
  34540. 800f03c: 687b ldr r3, [r7, #4]
  34541. 800f03e: 2b00 cmp r3, #0
  34542. 800f040: d101 bne.n 800f046 <HAL_RNG_Init+0x12>
  34543. {
  34544. return HAL_ERROR;
  34545. 800f042: 2301 movs r3, #1
  34546. 800f044: e054 b.n 800f0f0 <HAL_RNG_Init+0xbc>
  34547. /* Init the low level hardware */
  34548. hrng->MspInitCallback(hrng);
  34549. }
  34550. #else
  34551. if (hrng->State == HAL_RNG_STATE_RESET)
  34552. 800f046: 687b ldr r3, [r7, #4]
  34553. 800f048: 7a5b ldrb r3, [r3, #9]
  34554. 800f04a: b2db uxtb r3, r3
  34555. 800f04c: 2b00 cmp r3, #0
  34556. 800f04e: d105 bne.n 800f05c <HAL_RNG_Init+0x28>
  34557. {
  34558. /* Allocate lock resource and initialize it */
  34559. hrng->Lock = HAL_UNLOCKED;
  34560. 800f050: 687b ldr r3, [r7, #4]
  34561. 800f052: 2200 movs r2, #0
  34562. 800f054: 721a strb r2, [r3, #8]
  34563. /* Init the low level hardware */
  34564. HAL_RNG_MspInit(hrng);
  34565. 800f056: 6878 ldr r0, [r7, #4]
  34566. 800f058: f7f5 f82e bl 80040b8 <HAL_RNG_MspInit>
  34567. }
  34568. #endif /* USE_HAL_RNG_REGISTER_CALLBACKS */
  34569. /* Change RNG peripheral state */
  34570. hrng->State = HAL_RNG_STATE_BUSY;
  34571. 800f05c: 687b ldr r3, [r7, #4]
  34572. 800f05e: 2202 movs r2, #2
  34573. 800f060: 725a strb r2, [r3, #9]
  34574. }
  34575. }
  34576. }
  34577. #else
  34578. /* Clock Error Detection Configuration */
  34579. MODIFY_REG(hrng->Instance->CR, RNG_CR_CED, hrng->Init.ClockErrorDetection);
  34580. 800f062: 687b ldr r3, [r7, #4]
  34581. 800f064: 681b ldr r3, [r3, #0]
  34582. 800f066: 681b ldr r3, [r3, #0]
  34583. 800f068: f023 0120 bic.w r1, r3, #32
  34584. 800f06c: 687b ldr r3, [r7, #4]
  34585. 800f06e: 685a ldr r2, [r3, #4]
  34586. 800f070: 687b ldr r3, [r7, #4]
  34587. 800f072: 681b ldr r3, [r3, #0]
  34588. 800f074: 430a orrs r2, r1
  34589. 800f076: 601a str r2, [r3, #0]
  34590. #endif /* RNG_CR_CONDRST */
  34591. /* Enable the RNG Peripheral */
  34592. __HAL_RNG_ENABLE(hrng);
  34593. 800f078: 687b ldr r3, [r7, #4]
  34594. 800f07a: 681b ldr r3, [r3, #0]
  34595. 800f07c: 681a ldr r2, [r3, #0]
  34596. 800f07e: 687b ldr r3, [r7, #4]
  34597. 800f080: 681b ldr r3, [r3, #0]
  34598. 800f082: f042 0204 orr.w r2, r2, #4
  34599. 800f086: 601a str r2, [r3, #0]
  34600. /* verify that no seed error */
  34601. if (__HAL_RNG_GET_IT(hrng, RNG_IT_SEI) != RESET)
  34602. 800f088: 687b ldr r3, [r7, #4]
  34603. 800f08a: 681b ldr r3, [r3, #0]
  34604. 800f08c: 685b ldr r3, [r3, #4]
  34605. 800f08e: f003 0340 and.w r3, r3, #64 @ 0x40
  34606. 800f092: 2b40 cmp r3, #64 @ 0x40
  34607. 800f094: d104 bne.n 800f0a0 <HAL_RNG_Init+0x6c>
  34608. {
  34609. hrng->State = HAL_RNG_STATE_ERROR;
  34610. 800f096: 687b ldr r3, [r7, #4]
  34611. 800f098: 2204 movs r2, #4
  34612. 800f09a: 725a strb r2, [r3, #9]
  34613. return HAL_ERROR;
  34614. 800f09c: 2301 movs r3, #1
  34615. 800f09e: e027 b.n 800f0f0 <HAL_RNG_Init+0xbc>
  34616. }
  34617. /* Get tick */
  34618. tickstart = HAL_GetTick();
  34619. 800f0a0: f7f6 fd86 bl 8005bb0 <HAL_GetTick>
  34620. 800f0a4: 60f8 str r0, [r7, #12]
  34621. /* Check if data register contains valid random data */
  34622. while (__HAL_RNG_GET_FLAG(hrng, RNG_FLAG_SECS) != RESET)
  34623. 800f0a6: e015 b.n 800f0d4 <HAL_RNG_Init+0xa0>
  34624. {
  34625. if ((HAL_GetTick() - tickstart) > RNG_TIMEOUT_VALUE)
  34626. 800f0a8: f7f6 fd82 bl 8005bb0 <HAL_GetTick>
  34627. 800f0ac: 4602 mov r2, r0
  34628. 800f0ae: 68fb ldr r3, [r7, #12]
  34629. 800f0b0: 1ad3 subs r3, r2, r3
  34630. 800f0b2: 2b02 cmp r3, #2
  34631. 800f0b4: d90e bls.n 800f0d4 <HAL_RNG_Init+0xa0>
  34632. {
  34633. /* New check to avoid false timeout detection in case of preemption */
  34634. if (__HAL_RNG_GET_FLAG(hrng, RNG_FLAG_SECS) != RESET)
  34635. 800f0b6: 687b ldr r3, [r7, #4]
  34636. 800f0b8: 681b ldr r3, [r3, #0]
  34637. 800f0ba: 685b ldr r3, [r3, #4]
  34638. 800f0bc: f003 0304 and.w r3, r3, #4
  34639. 800f0c0: 2b04 cmp r3, #4
  34640. 800f0c2: d107 bne.n 800f0d4 <HAL_RNG_Init+0xa0>
  34641. {
  34642. hrng->State = HAL_RNG_STATE_ERROR;
  34643. 800f0c4: 687b ldr r3, [r7, #4]
  34644. 800f0c6: 2204 movs r2, #4
  34645. 800f0c8: 725a strb r2, [r3, #9]
  34646. hrng->ErrorCode = HAL_RNG_ERROR_TIMEOUT;
  34647. 800f0ca: 687b ldr r3, [r7, #4]
  34648. 800f0cc: 2202 movs r2, #2
  34649. 800f0ce: 60da str r2, [r3, #12]
  34650. return HAL_ERROR;
  34651. 800f0d0: 2301 movs r3, #1
  34652. 800f0d2: e00d b.n 800f0f0 <HAL_RNG_Init+0xbc>
  34653. while (__HAL_RNG_GET_FLAG(hrng, RNG_FLAG_SECS) != RESET)
  34654. 800f0d4: 687b ldr r3, [r7, #4]
  34655. 800f0d6: 681b ldr r3, [r3, #0]
  34656. 800f0d8: 685b ldr r3, [r3, #4]
  34657. 800f0da: f003 0304 and.w r3, r3, #4
  34658. 800f0de: 2b04 cmp r3, #4
  34659. 800f0e0: d0e2 beq.n 800f0a8 <HAL_RNG_Init+0x74>
  34660. }
  34661. }
  34662. }
  34663. /* Initialize the RNG state */
  34664. hrng->State = HAL_RNG_STATE_READY;
  34665. 800f0e2: 687b ldr r3, [r7, #4]
  34666. 800f0e4: 2201 movs r2, #1
  34667. 800f0e6: 725a strb r2, [r3, #9]
  34668. /* Initialise the error code */
  34669. hrng->ErrorCode = HAL_RNG_ERROR_NONE;
  34670. 800f0e8: 687b ldr r3, [r7, #4]
  34671. 800f0ea: 2200 movs r2, #0
  34672. 800f0ec: 60da str r2, [r3, #12]
  34673. /* Return function status */
  34674. return HAL_OK;
  34675. 800f0ee: 2300 movs r3, #0
  34676. }
  34677. 800f0f0: 4618 mov r0, r3
  34678. 800f0f2: 3710 adds r7, #16
  34679. 800f0f4: 46bd mov sp, r7
  34680. 800f0f6: bd80 pop {r7, pc}
  34681. 0800f0f8 <HAL_TIM_Base_Init>:
  34682. * Ex: call @ref HAL_TIM_Base_DeInit() before HAL_TIM_Base_Init()
  34683. * @param htim TIM Base handle
  34684. * @retval HAL status
  34685. */
  34686. HAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim)
  34687. {
  34688. 800f0f8: b580 push {r7, lr}
  34689. 800f0fa: b082 sub sp, #8
  34690. 800f0fc: af00 add r7, sp, #0
  34691. 800f0fe: 6078 str r0, [r7, #4]
  34692. /* Check the TIM handle allocation */
  34693. if (htim == NULL)
  34694. 800f100: 687b ldr r3, [r7, #4]
  34695. 800f102: 2b00 cmp r3, #0
  34696. 800f104: d101 bne.n 800f10a <HAL_TIM_Base_Init+0x12>
  34697. {
  34698. return HAL_ERROR;
  34699. 800f106: 2301 movs r3, #1
  34700. 800f108: e049 b.n 800f19e <HAL_TIM_Base_Init+0xa6>
  34701. assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));
  34702. assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));
  34703. assert_param(IS_TIM_PERIOD(htim, htim->Init.Period));
  34704. assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));
  34705. if (htim->State == HAL_TIM_STATE_RESET)
  34706. 800f10a: 687b ldr r3, [r7, #4]
  34707. 800f10c: f893 303d ldrb.w r3, [r3, #61] @ 0x3d
  34708. 800f110: b2db uxtb r3, r3
  34709. 800f112: 2b00 cmp r3, #0
  34710. 800f114: d106 bne.n 800f124 <HAL_TIM_Base_Init+0x2c>
  34711. {
  34712. /* Allocate lock resource and initialize it */
  34713. htim->Lock = HAL_UNLOCKED;
  34714. 800f116: 687b ldr r3, [r7, #4]
  34715. 800f118: 2200 movs r2, #0
  34716. 800f11a: f883 203c strb.w r2, [r3, #60] @ 0x3c
  34717. }
  34718. /* Init the low level hardware : GPIO, CLOCK, NVIC */
  34719. htim->Base_MspInitCallback(htim);
  34720. #else
  34721. /* Init the low level hardware : GPIO, CLOCK, NVIC */
  34722. HAL_TIM_Base_MspInit(htim);
  34723. 800f11e: 6878 ldr r0, [r7, #4]
  34724. 800f120: f7f5 f83e bl 80041a0 <HAL_TIM_Base_MspInit>
  34725. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  34726. }
  34727. /* Set the TIM state */
  34728. htim->State = HAL_TIM_STATE_BUSY;
  34729. 800f124: 687b ldr r3, [r7, #4]
  34730. 800f126: 2202 movs r2, #2
  34731. 800f128: f883 203d strb.w r2, [r3, #61] @ 0x3d
  34732. /* Set the Time Base configuration */
  34733. TIM_Base_SetConfig(htim->Instance, &htim->Init);
  34734. 800f12c: 687b ldr r3, [r7, #4]
  34735. 800f12e: 681a ldr r2, [r3, #0]
  34736. 800f130: 687b ldr r3, [r7, #4]
  34737. 800f132: 3304 adds r3, #4
  34738. 800f134: 4619 mov r1, r3
  34739. 800f136: 4610 mov r0, r2
  34740. 800f138: f000 fe90 bl 800fe5c <TIM_Base_SetConfig>
  34741. /* Initialize the DMA burst operation state */
  34742. htim->DMABurstState = HAL_DMA_BURST_STATE_READY;
  34743. 800f13c: 687b ldr r3, [r7, #4]
  34744. 800f13e: 2201 movs r2, #1
  34745. 800f140: f883 2048 strb.w r2, [r3, #72] @ 0x48
  34746. /* Initialize the TIM channels state */
  34747. TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);
  34748. 800f144: 687b ldr r3, [r7, #4]
  34749. 800f146: 2201 movs r2, #1
  34750. 800f148: f883 203e strb.w r2, [r3, #62] @ 0x3e
  34751. 800f14c: 687b ldr r3, [r7, #4]
  34752. 800f14e: 2201 movs r2, #1
  34753. 800f150: f883 203f strb.w r2, [r3, #63] @ 0x3f
  34754. 800f154: 687b ldr r3, [r7, #4]
  34755. 800f156: 2201 movs r2, #1
  34756. 800f158: f883 2040 strb.w r2, [r3, #64] @ 0x40
  34757. 800f15c: 687b ldr r3, [r7, #4]
  34758. 800f15e: 2201 movs r2, #1
  34759. 800f160: f883 2041 strb.w r2, [r3, #65] @ 0x41
  34760. 800f164: 687b ldr r3, [r7, #4]
  34761. 800f166: 2201 movs r2, #1
  34762. 800f168: f883 2042 strb.w r2, [r3, #66] @ 0x42
  34763. 800f16c: 687b ldr r3, [r7, #4]
  34764. 800f16e: 2201 movs r2, #1
  34765. 800f170: f883 2043 strb.w r2, [r3, #67] @ 0x43
  34766. TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);
  34767. 800f174: 687b ldr r3, [r7, #4]
  34768. 800f176: 2201 movs r2, #1
  34769. 800f178: f883 2044 strb.w r2, [r3, #68] @ 0x44
  34770. 800f17c: 687b ldr r3, [r7, #4]
  34771. 800f17e: 2201 movs r2, #1
  34772. 800f180: f883 2045 strb.w r2, [r3, #69] @ 0x45
  34773. 800f184: 687b ldr r3, [r7, #4]
  34774. 800f186: 2201 movs r2, #1
  34775. 800f188: f883 2046 strb.w r2, [r3, #70] @ 0x46
  34776. 800f18c: 687b ldr r3, [r7, #4]
  34777. 800f18e: 2201 movs r2, #1
  34778. 800f190: f883 2047 strb.w r2, [r3, #71] @ 0x47
  34779. /* Initialize the TIM state*/
  34780. htim->State = HAL_TIM_STATE_READY;
  34781. 800f194: 687b ldr r3, [r7, #4]
  34782. 800f196: 2201 movs r2, #1
  34783. 800f198: f883 203d strb.w r2, [r3, #61] @ 0x3d
  34784. return HAL_OK;
  34785. 800f19c: 2300 movs r3, #0
  34786. }
  34787. 800f19e: 4618 mov r0, r3
  34788. 800f1a0: 3708 adds r7, #8
  34789. 800f1a2: 46bd mov sp, r7
  34790. 800f1a4: bd80 pop {r7, pc}
  34791. ...
  34792. 0800f1a8 <HAL_TIM_Base_Start>:
  34793. * @brief Starts the TIM Base generation.
  34794. * @param htim TIM Base handle
  34795. * @retval HAL status
  34796. */
  34797. HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim)
  34798. {
  34799. 800f1a8: b480 push {r7}
  34800. 800f1aa: b085 sub sp, #20
  34801. 800f1ac: af00 add r7, sp, #0
  34802. 800f1ae: 6078 str r0, [r7, #4]
  34803. /* Check the parameters */
  34804. assert_param(IS_TIM_INSTANCE(htim->Instance));
  34805. /* Check the TIM state */
  34806. if (htim->State != HAL_TIM_STATE_READY)
  34807. 800f1b0: 687b ldr r3, [r7, #4]
  34808. 800f1b2: f893 303d ldrb.w r3, [r3, #61] @ 0x3d
  34809. 800f1b6: b2db uxtb r3, r3
  34810. 800f1b8: 2b01 cmp r3, #1
  34811. 800f1ba: d001 beq.n 800f1c0 <HAL_TIM_Base_Start+0x18>
  34812. {
  34813. return HAL_ERROR;
  34814. 800f1bc: 2301 movs r3, #1
  34815. 800f1be: e04c b.n 800f25a <HAL_TIM_Base_Start+0xb2>
  34816. }
  34817. /* Set the TIM state */
  34818. htim->State = HAL_TIM_STATE_BUSY;
  34819. 800f1c0: 687b ldr r3, [r7, #4]
  34820. 800f1c2: 2202 movs r2, #2
  34821. 800f1c4: f883 203d strb.w r2, [r3, #61] @ 0x3d
  34822. /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */
  34823. if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
  34824. 800f1c8: 687b ldr r3, [r7, #4]
  34825. 800f1ca: 681b ldr r3, [r3, #0]
  34826. 800f1cc: 4a26 ldr r2, [pc, #152] @ (800f268 <HAL_TIM_Base_Start+0xc0>)
  34827. 800f1ce: 4293 cmp r3, r2
  34828. 800f1d0: d022 beq.n 800f218 <HAL_TIM_Base_Start+0x70>
  34829. 800f1d2: 687b ldr r3, [r7, #4]
  34830. 800f1d4: 681b ldr r3, [r3, #0]
  34831. 800f1d6: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  34832. 800f1da: d01d beq.n 800f218 <HAL_TIM_Base_Start+0x70>
  34833. 800f1dc: 687b ldr r3, [r7, #4]
  34834. 800f1de: 681b ldr r3, [r3, #0]
  34835. 800f1e0: 4a22 ldr r2, [pc, #136] @ (800f26c <HAL_TIM_Base_Start+0xc4>)
  34836. 800f1e2: 4293 cmp r3, r2
  34837. 800f1e4: d018 beq.n 800f218 <HAL_TIM_Base_Start+0x70>
  34838. 800f1e6: 687b ldr r3, [r7, #4]
  34839. 800f1e8: 681b ldr r3, [r3, #0]
  34840. 800f1ea: 4a21 ldr r2, [pc, #132] @ (800f270 <HAL_TIM_Base_Start+0xc8>)
  34841. 800f1ec: 4293 cmp r3, r2
  34842. 800f1ee: d013 beq.n 800f218 <HAL_TIM_Base_Start+0x70>
  34843. 800f1f0: 687b ldr r3, [r7, #4]
  34844. 800f1f2: 681b ldr r3, [r3, #0]
  34845. 800f1f4: 4a1f ldr r2, [pc, #124] @ (800f274 <HAL_TIM_Base_Start+0xcc>)
  34846. 800f1f6: 4293 cmp r3, r2
  34847. 800f1f8: d00e beq.n 800f218 <HAL_TIM_Base_Start+0x70>
  34848. 800f1fa: 687b ldr r3, [r7, #4]
  34849. 800f1fc: 681b ldr r3, [r3, #0]
  34850. 800f1fe: 4a1e ldr r2, [pc, #120] @ (800f278 <HAL_TIM_Base_Start+0xd0>)
  34851. 800f200: 4293 cmp r3, r2
  34852. 800f202: d009 beq.n 800f218 <HAL_TIM_Base_Start+0x70>
  34853. 800f204: 687b ldr r3, [r7, #4]
  34854. 800f206: 681b ldr r3, [r3, #0]
  34855. 800f208: 4a1c ldr r2, [pc, #112] @ (800f27c <HAL_TIM_Base_Start+0xd4>)
  34856. 800f20a: 4293 cmp r3, r2
  34857. 800f20c: d004 beq.n 800f218 <HAL_TIM_Base_Start+0x70>
  34858. 800f20e: 687b ldr r3, [r7, #4]
  34859. 800f210: 681b ldr r3, [r3, #0]
  34860. 800f212: 4a1b ldr r2, [pc, #108] @ (800f280 <HAL_TIM_Base_Start+0xd8>)
  34861. 800f214: 4293 cmp r3, r2
  34862. 800f216: d115 bne.n 800f244 <HAL_TIM_Base_Start+0x9c>
  34863. {
  34864. tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
  34865. 800f218: 687b ldr r3, [r7, #4]
  34866. 800f21a: 681b ldr r3, [r3, #0]
  34867. 800f21c: 689a ldr r2, [r3, #8]
  34868. 800f21e: 4b19 ldr r3, [pc, #100] @ (800f284 <HAL_TIM_Base_Start+0xdc>)
  34869. 800f220: 4013 ands r3, r2
  34870. 800f222: 60fb str r3, [r7, #12]
  34871. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  34872. 800f224: 68fb ldr r3, [r7, #12]
  34873. 800f226: 2b06 cmp r3, #6
  34874. 800f228: d015 beq.n 800f256 <HAL_TIM_Base_Start+0xae>
  34875. 800f22a: 68fb ldr r3, [r7, #12]
  34876. 800f22c: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  34877. 800f230: d011 beq.n 800f256 <HAL_TIM_Base_Start+0xae>
  34878. {
  34879. __HAL_TIM_ENABLE(htim);
  34880. 800f232: 687b ldr r3, [r7, #4]
  34881. 800f234: 681b ldr r3, [r3, #0]
  34882. 800f236: 681a ldr r2, [r3, #0]
  34883. 800f238: 687b ldr r3, [r7, #4]
  34884. 800f23a: 681b ldr r3, [r3, #0]
  34885. 800f23c: f042 0201 orr.w r2, r2, #1
  34886. 800f240: 601a str r2, [r3, #0]
  34887. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  34888. 800f242: e008 b.n 800f256 <HAL_TIM_Base_Start+0xae>
  34889. }
  34890. }
  34891. else
  34892. {
  34893. __HAL_TIM_ENABLE(htim);
  34894. 800f244: 687b ldr r3, [r7, #4]
  34895. 800f246: 681b ldr r3, [r3, #0]
  34896. 800f248: 681a ldr r2, [r3, #0]
  34897. 800f24a: 687b ldr r3, [r7, #4]
  34898. 800f24c: 681b ldr r3, [r3, #0]
  34899. 800f24e: f042 0201 orr.w r2, r2, #1
  34900. 800f252: 601a str r2, [r3, #0]
  34901. 800f254: e000 b.n 800f258 <HAL_TIM_Base_Start+0xb0>
  34902. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  34903. 800f256: bf00 nop
  34904. }
  34905. /* Return function status */
  34906. return HAL_OK;
  34907. 800f258: 2300 movs r3, #0
  34908. }
  34909. 800f25a: 4618 mov r0, r3
  34910. 800f25c: 3714 adds r7, #20
  34911. 800f25e: 46bd mov sp, r7
  34912. 800f260: f85d 7b04 ldr.w r7, [sp], #4
  34913. 800f264: 4770 bx lr
  34914. 800f266: bf00 nop
  34915. 800f268: 40010000 .word 0x40010000
  34916. 800f26c: 40000400 .word 0x40000400
  34917. 800f270: 40000800 .word 0x40000800
  34918. 800f274: 40000c00 .word 0x40000c00
  34919. 800f278: 40010400 .word 0x40010400
  34920. 800f27c: 40001800 .word 0x40001800
  34921. 800f280: 40014000 .word 0x40014000
  34922. 800f284: 00010007 .word 0x00010007
  34923. 0800f288 <HAL_TIM_Base_Start_IT>:
  34924. * @brief Starts the TIM Base generation in interrupt mode.
  34925. * @param htim TIM Base handle
  34926. * @retval HAL status
  34927. */
  34928. HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim)
  34929. {
  34930. 800f288: b480 push {r7}
  34931. 800f28a: b085 sub sp, #20
  34932. 800f28c: af00 add r7, sp, #0
  34933. 800f28e: 6078 str r0, [r7, #4]
  34934. /* Check the parameters */
  34935. assert_param(IS_TIM_INSTANCE(htim->Instance));
  34936. /* Check the TIM state */
  34937. if (htim->State != HAL_TIM_STATE_READY)
  34938. 800f290: 687b ldr r3, [r7, #4]
  34939. 800f292: f893 303d ldrb.w r3, [r3, #61] @ 0x3d
  34940. 800f296: b2db uxtb r3, r3
  34941. 800f298: 2b01 cmp r3, #1
  34942. 800f29a: d001 beq.n 800f2a0 <HAL_TIM_Base_Start_IT+0x18>
  34943. {
  34944. return HAL_ERROR;
  34945. 800f29c: 2301 movs r3, #1
  34946. 800f29e: e054 b.n 800f34a <HAL_TIM_Base_Start_IT+0xc2>
  34947. }
  34948. /* Set the TIM state */
  34949. htim->State = HAL_TIM_STATE_BUSY;
  34950. 800f2a0: 687b ldr r3, [r7, #4]
  34951. 800f2a2: 2202 movs r2, #2
  34952. 800f2a4: f883 203d strb.w r2, [r3, #61] @ 0x3d
  34953. /* Enable the TIM Update interrupt */
  34954. __HAL_TIM_ENABLE_IT(htim, TIM_IT_UPDATE);
  34955. 800f2a8: 687b ldr r3, [r7, #4]
  34956. 800f2aa: 681b ldr r3, [r3, #0]
  34957. 800f2ac: 68da ldr r2, [r3, #12]
  34958. 800f2ae: 687b ldr r3, [r7, #4]
  34959. 800f2b0: 681b ldr r3, [r3, #0]
  34960. 800f2b2: f042 0201 orr.w r2, r2, #1
  34961. 800f2b6: 60da str r2, [r3, #12]
  34962. /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */
  34963. if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
  34964. 800f2b8: 687b ldr r3, [r7, #4]
  34965. 800f2ba: 681b ldr r3, [r3, #0]
  34966. 800f2bc: 4a26 ldr r2, [pc, #152] @ (800f358 <HAL_TIM_Base_Start_IT+0xd0>)
  34967. 800f2be: 4293 cmp r3, r2
  34968. 800f2c0: d022 beq.n 800f308 <HAL_TIM_Base_Start_IT+0x80>
  34969. 800f2c2: 687b ldr r3, [r7, #4]
  34970. 800f2c4: 681b ldr r3, [r3, #0]
  34971. 800f2c6: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  34972. 800f2ca: d01d beq.n 800f308 <HAL_TIM_Base_Start_IT+0x80>
  34973. 800f2cc: 687b ldr r3, [r7, #4]
  34974. 800f2ce: 681b ldr r3, [r3, #0]
  34975. 800f2d0: 4a22 ldr r2, [pc, #136] @ (800f35c <HAL_TIM_Base_Start_IT+0xd4>)
  34976. 800f2d2: 4293 cmp r3, r2
  34977. 800f2d4: d018 beq.n 800f308 <HAL_TIM_Base_Start_IT+0x80>
  34978. 800f2d6: 687b ldr r3, [r7, #4]
  34979. 800f2d8: 681b ldr r3, [r3, #0]
  34980. 800f2da: 4a21 ldr r2, [pc, #132] @ (800f360 <HAL_TIM_Base_Start_IT+0xd8>)
  34981. 800f2dc: 4293 cmp r3, r2
  34982. 800f2de: d013 beq.n 800f308 <HAL_TIM_Base_Start_IT+0x80>
  34983. 800f2e0: 687b ldr r3, [r7, #4]
  34984. 800f2e2: 681b ldr r3, [r3, #0]
  34985. 800f2e4: 4a1f ldr r2, [pc, #124] @ (800f364 <HAL_TIM_Base_Start_IT+0xdc>)
  34986. 800f2e6: 4293 cmp r3, r2
  34987. 800f2e8: d00e beq.n 800f308 <HAL_TIM_Base_Start_IT+0x80>
  34988. 800f2ea: 687b ldr r3, [r7, #4]
  34989. 800f2ec: 681b ldr r3, [r3, #0]
  34990. 800f2ee: 4a1e ldr r2, [pc, #120] @ (800f368 <HAL_TIM_Base_Start_IT+0xe0>)
  34991. 800f2f0: 4293 cmp r3, r2
  34992. 800f2f2: d009 beq.n 800f308 <HAL_TIM_Base_Start_IT+0x80>
  34993. 800f2f4: 687b ldr r3, [r7, #4]
  34994. 800f2f6: 681b ldr r3, [r3, #0]
  34995. 800f2f8: 4a1c ldr r2, [pc, #112] @ (800f36c <HAL_TIM_Base_Start_IT+0xe4>)
  34996. 800f2fa: 4293 cmp r3, r2
  34997. 800f2fc: d004 beq.n 800f308 <HAL_TIM_Base_Start_IT+0x80>
  34998. 800f2fe: 687b ldr r3, [r7, #4]
  34999. 800f300: 681b ldr r3, [r3, #0]
  35000. 800f302: 4a1b ldr r2, [pc, #108] @ (800f370 <HAL_TIM_Base_Start_IT+0xe8>)
  35001. 800f304: 4293 cmp r3, r2
  35002. 800f306: d115 bne.n 800f334 <HAL_TIM_Base_Start_IT+0xac>
  35003. {
  35004. tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
  35005. 800f308: 687b ldr r3, [r7, #4]
  35006. 800f30a: 681b ldr r3, [r3, #0]
  35007. 800f30c: 689a ldr r2, [r3, #8]
  35008. 800f30e: 4b19 ldr r3, [pc, #100] @ (800f374 <HAL_TIM_Base_Start_IT+0xec>)
  35009. 800f310: 4013 ands r3, r2
  35010. 800f312: 60fb str r3, [r7, #12]
  35011. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  35012. 800f314: 68fb ldr r3, [r7, #12]
  35013. 800f316: 2b06 cmp r3, #6
  35014. 800f318: d015 beq.n 800f346 <HAL_TIM_Base_Start_IT+0xbe>
  35015. 800f31a: 68fb ldr r3, [r7, #12]
  35016. 800f31c: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  35017. 800f320: d011 beq.n 800f346 <HAL_TIM_Base_Start_IT+0xbe>
  35018. {
  35019. __HAL_TIM_ENABLE(htim);
  35020. 800f322: 687b ldr r3, [r7, #4]
  35021. 800f324: 681b ldr r3, [r3, #0]
  35022. 800f326: 681a ldr r2, [r3, #0]
  35023. 800f328: 687b ldr r3, [r7, #4]
  35024. 800f32a: 681b ldr r3, [r3, #0]
  35025. 800f32c: f042 0201 orr.w r2, r2, #1
  35026. 800f330: 601a str r2, [r3, #0]
  35027. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  35028. 800f332: e008 b.n 800f346 <HAL_TIM_Base_Start_IT+0xbe>
  35029. }
  35030. }
  35031. else
  35032. {
  35033. __HAL_TIM_ENABLE(htim);
  35034. 800f334: 687b ldr r3, [r7, #4]
  35035. 800f336: 681b ldr r3, [r3, #0]
  35036. 800f338: 681a ldr r2, [r3, #0]
  35037. 800f33a: 687b ldr r3, [r7, #4]
  35038. 800f33c: 681b ldr r3, [r3, #0]
  35039. 800f33e: f042 0201 orr.w r2, r2, #1
  35040. 800f342: 601a str r2, [r3, #0]
  35041. 800f344: e000 b.n 800f348 <HAL_TIM_Base_Start_IT+0xc0>
  35042. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  35043. 800f346: bf00 nop
  35044. }
  35045. /* Return function status */
  35046. return HAL_OK;
  35047. 800f348: 2300 movs r3, #0
  35048. }
  35049. 800f34a: 4618 mov r0, r3
  35050. 800f34c: 3714 adds r7, #20
  35051. 800f34e: 46bd mov sp, r7
  35052. 800f350: f85d 7b04 ldr.w r7, [sp], #4
  35053. 800f354: 4770 bx lr
  35054. 800f356: bf00 nop
  35055. 800f358: 40010000 .word 0x40010000
  35056. 800f35c: 40000400 .word 0x40000400
  35057. 800f360: 40000800 .word 0x40000800
  35058. 800f364: 40000c00 .word 0x40000c00
  35059. 800f368: 40010400 .word 0x40010400
  35060. 800f36c: 40001800 .word 0x40001800
  35061. 800f370: 40014000 .word 0x40014000
  35062. 800f374: 00010007 .word 0x00010007
  35063. 0800f378 <HAL_TIM_PWM_Init>:
  35064. * Ex: call @ref HAL_TIM_PWM_DeInit() before HAL_TIM_PWM_Init()
  35065. * @param htim TIM PWM handle
  35066. * @retval HAL status
  35067. */
  35068. HAL_StatusTypeDef HAL_TIM_PWM_Init(TIM_HandleTypeDef *htim)
  35069. {
  35070. 800f378: b580 push {r7, lr}
  35071. 800f37a: b082 sub sp, #8
  35072. 800f37c: af00 add r7, sp, #0
  35073. 800f37e: 6078 str r0, [r7, #4]
  35074. /* Check the TIM handle allocation */
  35075. if (htim == NULL)
  35076. 800f380: 687b ldr r3, [r7, #4]
  35077. 800f382: 2b00 cmp r3, #0
  35078. 800f384: d101 bne.n 800f38a <HAL_TIM_PWM_Init+0x12>
  35079. {
  35080. return HAL_ERROR;
  35081. 800f386: 2301 movs r3, #1
  35082. 800f388: e049 b.n 800f41e <HAL_TIM_PWM_Init+0xa6>
  35083. assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));
  35084. assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));
  35085. assert_param(IS_TIM_PERIOD(htim, htim->Init.Period));
  35086. assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));
  35087. if (htim->State == HAL_TIM_STATE_RESET)
  35088. 800f38a: 687b ldr r3, [r7, #4]
  35089. 800f38c: f893 303d ldrb.w r3, [r3, #61] @ 0x3d
  35090. 800f390: b2db uxtb r3, r3
  35091. 800f392: 2b00 cmp r3, #0
  35092. 800f394: d106 bne.n 800f3a4 <HAL_TIM_PWM_Init+0x2c>
  35093. {
  35094. /* Allocate lock resource and initialize it */
  35095. htim->Lock = HAL_UNLOCKED;
  35096. 800f396: 687b ldr r3, [r7, #4]
  35097. 800f398: 2200 movs r2, #0
  35098. 800f39a: f883 203c strb.w r2, [r3, #60] @ 0x3c
  35099. }
  35100. /* Init the low level hardware : GPIO, CLOCK, NVIC */
  35101. htim->PWM_MspInitCallback(htim);
  35102. #else
  35103. /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */
  35104. HAL_TIM_PWM_MspInit(htim);
  35105. 800f39e: 6878 ldr r0, [r7, #4]
  35106. 800f3a0: f7f4 fec4 bl 800412c <HAL_TIM_PWM_MspInit>
  35107. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  35108. }
  35109. /* Set the TIM state */
  35110. htim->State = HAL_TIM_STATE_BUSY;
  35111. 800f3a4: 687b ldr r3, [r7, #4]
  35112. 800f3a6: 2202 movs r2, #2
  35113. 800f3a8: f883 203d strb.w r2, [r3, #61] @ 0x3d
  35114. /* Init the base time for the PWM */
  35115. TIM_Base_SetConfig(htim->Instance, &htim->Init);
  35116. 800f3ac: 687b ldr r3, [r7, #4]
  35117. 800f3ae: 681a ldr r2, [r3, #0]
  35118. 800f3b0: 687b ldr r3, [r7, #4]
  35119. 800f3b2: 3304 adds r3, #4
  35120. 800f3b4: 4619 mov r1, r3
  35121. 800f3b6: 4610 mov r0, r2
  35122. 800f3b8: f000 fd50 bl 800fe5c <TIM_Base_SetConfig>
  35123. /* Initialize the DMA burst operation state */
  35124. htim->DMABurstState = HAL_DMA_BURST_STATE_READY;
  35125. 800f3bc: 687b ldr r3, [r7, #4]
  35126. 800f3be: 2201 movs r2, #1
  35127. 800f3c0: f883 2048 strb.w r2, [r3, #72] @ 0x48
  35128. /* Initialize the TIM channels state */
  35129. TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);
  35130. 800f3c4: 687b ldr r3, [r7, #4]
  35131. 800f3c6: 2201 movs r2, #1
  35132. 800f3c8: f883 203e strb.w r2, [r3, #62] @ 0x3e
  35133. 800f3cc: 687b ldr r3, [r7, #4]
  35134. 800f3ce: 2201 movs r2, #1
  35135. 800f3d0: f883 203f strb.w r2, [r3, #63] @ 0x3f
  35136. 800f3d4: 687b ldr r3, [r7, #4]
  35137. 800f3d6: 2201 movs r2, #1
  35138. 800f3d8: f883 2040 strb.w r2, [r3, #64] @ 0x40
  35139. 800f3dc: 687b ldr r3, [r7, #4]
  35140. 800f3de: 2201 movs r2, #1
  35141. 800f3e0: f883 2041 strb.w r2, [r3, #65] @ 0x41
  35142. 800f3e4: 687b ldr r3, [r7, #4]
  35143. 800f3e6: 2201 movs r2, #1
  35144. 800f3e8: f883 2042 strb.w r2, [r3, #66] @ 0x42
  35145. 800f3ec: 687b ldr r3, [r7, #4]
  35146. 800f3ee: 2201 movs r2, #1
  35147. 800f3f0: f883 2043 strb.w r2, [r3, #67] @ 0x43
  35148. TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);
  35149. 800f3f4: 687b ldr r3, [r7, #4]
  35150. 800f3f6: 2201 movs r2, #1
  35151. 800f3f8: f883 2044 strb.w r2, [r3, #68] @ 0x44
  35152. 800f3fc: 687b ldr r3, [r7, #4]
  35153. 800f3fe: 2201 movs r2, #1
  35154. 800f400: f883 2045 strb.w r2, [r3, #69] @ 0x45
  35155. 800f404: 687b ldr r3, [r7, #4]
  35156. 800f406: 2201 movs r2, #1
  35157. 800f408: f883 2046 strb.w r2, [r3, #70] @ 0x46
  35158. 800f40c: 687b ldr r3, [r7, #4]
  35159. 800f40e: 2201 movs r2, #1
  35160. 800f410: f883 2047 strb.w r2, [r3, #71] @ 0x47
  35161. /* Initialize the TIM state*/
  35162. htim->State = HAL_TIM_STATE_READY;
  35163. 800f414: 687b ldr r3, [r7, #4]
  35164. 800f416: 2201 movs r2, #1
  35165. 800f418: f883 203d strb.w r2, [r3, #61] @ 0x3d
  35166. return HAL_OK;
  35167. 800f41c: 2300 movs r3, #0
  35168. }
  35169. 800f41e: 4618 mov r0, r3
  35170. 800f420: 3708 adds r7, #8
  35171. 800f422: 46bd mov sp, r7
  35172. 800f424: bd80 pop {r7, pc}
  35173. ...
  35174. 0800f428 <HAL_TIM_PWM_Start>:
  35175. * @arg TIM_CHANNEL_5: TIM Channel 5 selected
  35176. * @arg TIM_CHANNEL_6: TIM Channel 6 selected
  35177. * @retval HAL status
  35178. */
  35179. HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel)
  35180. {
  35181. 800f428: b580 push {r7, lr}
  35182. 800f42a: b084 sub sp, #16
  35183. 800f42c: af00 add r7, sp, #0
  35184. 800f42e: 6078 str r0, [r7, #4]
  35185. 800f430: 6039 str r1, [r7, #0]
  35186. /* Check the parameters */
  35187. assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
  35188. /* Check the TIM channel state */
  35189. if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY)
  35190. 800f432: 683b ldr r3, [r7, #0]
  35191. 800f434: 2b00 cmp r3, #0
  35192. 800f436: d109 bne.n 800f44c <HAL_TIM_PWM_Start+0x24>
  35193. 800f438: 687b ldr r3, [r7, #4]
  35194. 800f43a: f893 303e ldrb.w r3, [r3, #62] @ 0x3e
  35195. 800f43e: b2db uxtb r3, r3
  35196. 800f440: 2b01 cmp r3, #1
  35197. 800f442: bf14 ite ne
  35198. 800f444: 2301 movne r3, #1
  35199. 800f446: 2300 moveq r3, #0
  35200. 800f448: b2db uxtb r3, r3
  35201. 800f44a: e03c b.n 800f4c6 <HAL_TIM_PWM_Start+0x9e>
  35202. 800f44c: 683b ldr r3, [r7, #0]
  35203. 800f44e: 2b04 cmp r3, #4
  35204. 800f450: d109 bne.n 800f466 <HAL_TIM_PWM_Start+0x3e>
  35205. 800f452: 687b ldr r3, [r7, #4]
  35206. 800f454: f893 303f ldrb.w r3, [r3, #63] @ 0x3f
  35207. 800f458: b2db uxtb r3, r3
  35208. 800f45a: 2b01 cmp r3, #1
  35209. 800f45c: bf14 ite ne
  35210. 800f45e: 2301 movne r3, #1
  35211. 800f460: 2300 moveq r3, #0
  35212. 800f462: b2db uxtb r3, r3
  35213. 800f464: e02f b.n 800f4c6 <HAL_TIM_PWM_Start+0x9e>
  35214. 800f466: 683b ldr r3, [r7, #0]
  35215. 800f468: 2b08 cmp r3, #8
  35216. 800f46a: d109 bne.n 800f480 <HAL_TIM_PWM_Start+0x58>
  35217. 800f46c: 687b ldr r3, [r7, #4]
  35218. 800f46e: f893 3040 ldrb.w r3, [r3, #64] @ 0x40
  35219. 800f472: b2db uxtb r3, r3
  35220. 800f474: 2b01 cmp r3, #1
  35221. 800f476: bf14 ite ne
  35222. 800f478: 2301 movne r3, #1
  35223. 800f47a: 2300 moveq r3, #0
  35224. 800f47c: b2db uxtb r3, r3
  35225. 800f47e: e022 b.n 800f4c6 <HAL_TIM_PWM_Start+0x9e>
  35226. 800f480: 683b ldr r3, [r7, #0]
  35227. 800f482: 2b0c cmp r3, #12
  35228. 800f484: d109 bne.n 800f49a <HAL_TIM_PWM_Start+0x72>
  35229. 800f486: 687b ldr r3, [r7, #4]
  35230. 800f488: f893 3041 ldrb.w r3, [r3, #65] @ 0x41
  35231. 800f48c: b2db uxtb r3, r3
  35232. 800f48e: 2b01 cmp r3, #1
  35233. 800f490: bf14 ite ne
  35234. 800f492: 2301 movne r3, #1
  35235. 800f494: 2300 moveq r3, #0
  35236. 800f496: b2db uxtb r3, r3
  35237. 800f498: e015 b.n 800f4c6 <HAL_TIM_PWM_Start+0x9e>
  35238. 800f49a: 683b ldr r3, [r7, #0]
  35239. 800f49c: 2b10 cmp r3, #16
  35240. 800f49e: d109 bne.n 800f4b4 <HAL_TIM_PWM_Start+0x8c>
  35241. 800f4a0: 687b ldr r3, [r7, #4]
  35242. 800f4a2: f893 3042 ldrb.w r3, [r3, #66] @ 0x42
  35243. 800f4a6: b2db uxtb r3, r3
  35244. 800f4a8: 2b01 cmp r3, #1
  35245. 800f4aa: bf14 ite ne
  35246. 800f4ac: 2301 movne r3, #1
  35247. 800f4ae: 2300 moveq r3, #0
  35248. 800f4b0: b2db uxtb r3, r3
  35249. 800f4b2: e008 b.n 800f4c6 <HAL_TIM_PWM_Start+0x9e>
  35250. 800f4b4: 687b ldr r3, [r7, #4]
  35251. 800f4b6: f893 3043 ldrb.w r3, [r3, #67] @ 0x43
  35252. 800f4ba: b2db uxtb r3, r3
  35253. 800f4bc: 2b01 cmp r3, #1
  35254. 800f4be: bf14 ite ne
  35255. 800f4c0: 2301 movne r3, #1
  35256. 800f4c2: 2300 moveq r3, #0
  35257. 800f4c4: b2db uxtb r3, r3
  35258. 800f4c6: 2b00 cmp r3, #0
  35259. 800f4c8: d001 beq.n 800f4ce <HAL_TIM_PWM_Start+0xa6>
  35260. {
  35261. return HAL_ERROR;
  35262. 800f4ca: 2301 movs r3, #1
  35263. 800f4cc: e0a1 b.n 800f612 <HAL_TIM_PWM_Start+0x1ea>
  35264. }
  35265. /* Set the TIM channel state */
  35266. TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);
  35267. 800f4ce: 683b ldr r3, [r7, #0]
  35268. 800f4d0: 2b00 cmp r3, #0
  35269. 800f4d2: d104 bne.n 800f4de <HAL_TIM_PWM_Start+0xb6>
  35270. 800f4d4: 687b ldr r3, [r7, #4]
  35271. 800f4d6: 2202 movs r2, #2
  35272. 800f4d8: f883 203e strb.w r2, [r3, #62] @ 0x3e
  35273. 800f4dc: e023 b.n 800f526 <HAL_TIM_PWM_Start+0xfe>
  35274. 800f4de: 683b ldr r3, [r7, #0]
  35275. 800f4e0: 2b04 cmp r3, #4
  35276. 800f4e2: d104 bne.n 800f4ee <HAL_TIM_PWM_Start+0xc6>
  35277. 800f4e4: 687b ldr r3, [r7, #4]
  35278. 800f4e6: 2202 movs r2, #2
  35279. 800f4e8: f883 203f strb.w r2, [r3, #63] @ 0x3f
  35280. 800f4ec: e01b b.n 800f526 <HAL_TIM_PWM_Start+0xfe>
  35281. 800f4ee: 683b ldr r3, [r7, #0]
  35282. 800f4f0: 2b08 cmp r3, #8
  35283. 800f4f2: d104 bne.n 800f4fe <HAL_TIM_PWM_Start+0xd6>
  35284. 800f4f4: 687b ldr r3, [r7, #4]
  35285. 800f4f6: 2202 movs r2, #2
  35286. 800f4f8: f883 2040 strb.w r2, [r3, #64] @ 0x40
  35287. 800f4fc: e013 b.n 800f526 <HAL_TIM_PWM_Start+0xfe>
  35288. 800f4fe: 683b ldr r3, [r7, #0]
  35289. 800f500: 2b0c cmp r3, #12
  35290. 800f502: d104 bne.n 800f50e <HAL_TIM_PWM_Start+0xe6>
  35291. 800f504: 687b ldr r3, [r7, #4]
  35292. 800f506: 2202 movs r2, #2
  35293. 800f508: f883 2041 strb.w r2, [r3, #65] @ 0x41
  35294. 800f50c: e00b b.n 800f526 <HAL_TIM_PWM_Start+0xfe>
  35295. 800f50e: 683b ldr r3, [r7, #0]
  35296. 800f510: 2b10 cmp r3, #16
  35297. 800f512: d104 bne.n 800f51e <HAL_TIM_PWM_Start+0xf6>
  35298. 800f514: 687b ldr r3, [r7, #4]
  35299. 800f516: 2202 movs r2, #2
  35300. 800f518: f883 2042 strb.w r2, [r3, #66] @ 0x42
  35301. 800f51c: e003 b.n 800f526 <HAL_TIM_PWM_Start+0xfe>
  35302. 800f51e: 687b ldr r3, [r7, #4]
  35303. 800f520: 2202 movs r2, #2
  35304. 800f522: f883 2043 strb.w r2, [r3, #67] @ 0x43
  35305. /* Enable the Capture compare channel */
  35306. TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);
  35307. 800f526: 687b ldr r3, [r7, #4]
  35308. 800f528: 681b ldr r3, [r3, #0]
  35309. 800f52a: 2201 movs r2, #1
  35310. 800f52c: 6839 ldr r1, [r7, #0]
  35311. 800f52e: 4618 mov r0, r3
  35312. 800f530: f001 f8ae bl 8010690 <TIM_CCxChannelCmd>
  35313. if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET)
  35314. 800f534: 687b ldr r3, [r7, #4]
  35315. 800f536: 681b ldr r3, [r3, #0]
  35316. 800f538: 4a38 ldr r2, [pc, #224] @ (800f61c <HAL_TIM_PWM_Start+0x1f4>)
  35317. 800f53a: 4293 cmp r3, r2
  35318. 800f53c: d013 beq.n 800f566 <HAL_TIM_PWM_Start+0x13e>
  35319. 800f53e: 687b ldr r3, [r7, #4]
  35320. 800f540: 681b ldr r3, [r3, #0]
  35321. 800f542: 4a37 ldr r2, [pc, #220] @ (800f620 <HAL_TIM_PWM_Start+0x1f8>)
  35322. 800f544: 4293 cmp r3, r2
  35323. 800f546: d00e beq.n 800f566 <HAL_TIM_PWM_Start+0x13e>
  35324. 800f548: 687b ldr r3, [r7, #4]
  35325. 800f54a: 681b ldr r3, [r3, #0]
  35326. 800f54c: 4a35 ldr r2, [pc, #212] @ (800f624 <HAL_TIM_PWM_Start+0x1fc>)
  35327. 800f54e: 4293 cmp r3, r2
  35328. 800f550: d009 beq.n 800f566 <HAL_TIM_PWM_Start+0x13e>
  35329. 800f552: 687b ldr r3, [r7, #4]
  35330. 800f554: 681b ldr r3, [r3, #0]
  35331. 800f556: 4a34 ldr r2, [pc, #208] @ (800f628 <HAL_TIM_PWM_Start+0x200>)
  35332. 800f558: 4293 cmp r3, r2
  35333. 800f55a: d004 beq.n 800f566 <HAL_TIM_PWM_Start+0x13e>
  35334. 800f55c: 687b ldr r3, [r7, #4]
  35335. 800f55e: 681b ldr r3, [r3, #0]
  35336. 800f560: 4a32 ldr r2, [pc, #200] @ (800f62c <HAL_TIM_PWM_Start+0x204>)
  35337. 800f562: 4293 cmp r3, r2
  35338. 800f564: d101 bne.n 800f56a <HAL_TIM_PWM_Start+0x142>
  35339. 800f566: 2301 movs r3, #1
  35340. 800f568: e000 b.n 800f56c <HAL_TIM_PWM_Start+0x144>
  35341. 800f56a: 2300 movs r3, #0
  35342. 800f56c: 2b00 cmp r3, #0
  35343. 800f56e: d007 beq.n 800f580 <HAL_TIM_PWM_Start+0x158>
  35344. {
  35345. /* Enable the main output */
  35346. __HAL_TIM_MOE_ENABLE(htim);
  35347. 800f570: 687b ldr r3, [r7, #4]
  35348. 800f572: 681b ldr r3, [r3, #0]
  35349. 800f574: 6c5a ldr r2, [r3, #68] @ 0x44
  35350. 800f576: 687b ldr r3, [r7, #4]
  35351. 800f578: 681b ldr r3, [r3, #0]
  35352. 800f57a: f442 4200 orr.w r2, r2, #32768 @ 0x8000
  35353. 800f57e: 645a str r2, [r3, #68] @ 0x44
  35354. }
  35355. /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */
  35356. if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
  35357. 800f580: 687b ldr r3, [r7, #4]
  35358. 800f582: 681b ldr r3, [r3, #0]
  35359. 800f584: 4a25 ldr r2, [pc, #148] @ (800f61c <HAL_TIM_PWM_Start+0x1f4>)
  35360. 800f586: 4293 cmp r3, r2
  35361. 800f588: d022 beq.n 800f5d0 <HAL_TIM_PWM_Start+0x1a8>
  35362. 800f58a: 687b ldr r3, [r7, #4]
  35363. 800f58c: 681b ldr r3, [r3, #0]
  35364. 800f58e: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  35365. 800f592: d01d beq.n 800f5d0 <HAL_TIM_PWM_Start+0x1a8>
  35366. 800f594: 687b ldr r3, [r7, #4]
  35367. 800f596: 681b ldr r3, [r3, #0]
  35368. 800f598: 4a25 ldr r2, [pc, #148] @ (800f630 <HAL_TIM_PWM_Start+0x208>)
  35369. 800f59a: 4293 cmp r3, r2
  35370. 800f59c: d018 beq.n 800f5d0 <HAL_TIM_PWM_Start+0x1a8>
  35371. 800f59e: 687b ldr r3, [r7, #4]
  35372. 800f5a0: 681b ldr r3, [r3, #0]
  35373. 800f5a2: 4a24 ldr r2, [pc, #144] @ (800f634 <HAL_TIM_PWM_Start+0x20c>)
  35374. 800f5a4: 4293 cmp r3, r2
  35375. 800f5a6: d013 beq.n 800f5d0 <HAL_TIM_PWM_Start+0x1a8>
  35376. 800f5a8: 687b ldr r3, [r7, #4]
  35377. 800f5aa: 681b ldr r3, [r3, #0]
  35378. 800f5ac: 4a22 ldr r2, [pc, #136] @ (800f638 <HAL_TIM_PWM_Start+0x210>)
  35379. 800f5ae: 4293 cmp r3, r2
  35380. 800f5b0: d00e beq.n 800f5d0 <HAL_TIM_PWM_Start+0x1a8>
  35381. 800f5b2: 687b ldr r3, [r7, #4]
  35382. 800f5b4: 681b ldr r3, [r3, #0]
  35383. 800f5b6: 4a1a ldr r2, [pc, #104] @ (800f620 <HAL_TIM_PWM_Start+0x1f8>)
  35384. 800f5b8: 4293 cmp r3, r2
  35385. 800f5ba: d009 beq.n 800f5d0 <HAL_TIM_PWM_Start+0x1a8>
  35386. 800f5bc: 687b ldr r3, [r7, #4]
  35387. 800f5be: 681b ldr r3, [r3, #0]
  35388. 800f5c0: 4a1e ldr r2, [pc, #120] @ (800f63c <HAL_TIM_PWM_Start+0x214>)
  35389. 800f5c2: 4293 cmp r3, r2
  35390. 800f5c4: d004 beq.n 800f5d0 <HAL_TIM_PWM_Start+0x1a8>
  35391. 800f5c6: 687b ldr r3, [r7, #4]
  35392. 800f5c8: 681b ldr r3, [r3, #0]
  35393. 800f5ca: 4a16 ldr r2, [pc, #88] @ (800f624 <HAL_TIM_PWM_Start+0x1fc>)
  35394. 800f5cc: 4293 cmp r3, r2
  35395. 800f5ce: d115 bne.n 800f5fc <HAL_TIM_PWM_Start+0x1d4>
  35396. {
  35397. tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
  35398. 800f5d0: 687b ldr r3, [r7, #4]
  35399. 800f5d2: 681b ldr r3, [r3, #0]
  35400. 800f5d4: 689a ldr r2, [r3, #8]
  35401. 800f5d6: 4b1a ldr r3, [pc, #104] @ (800f640 <HAL_TIM_PWM_Start+0x218>)
  35402. 800f5d8: 4013 ands r3, r2
  35403. 800f5da: 60fb str r3, [r7, #12]
  35404. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  35405. 800f5dc: 68fb ldr r3, [r7, #12]
  35406. 800f5de: 2b06 cmp r3, #6
  35407. 800f5e0: d015 beq.n 800f60e <HAL_TIM_PWM_Start+0x1e6>
  35408. 800f5e2: 68fb ldr r3, [r7, #12]
  35409. 800f5e4: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  35410. 800f5e8: d011 beq.n 800f60e <HAL_TIM_PWM_Start+0x1e6>
  35411. {
  35412. __HAL_TIM_ENABLE(htim);
  35413. 800f5ea: 687b ldr r3, [r7, #4]
  35414. 800f5ec: 681b ldr r3, [r3, #0]
  35415. 800f5ee: 681a ldr r2, [r3, #0]
  35416. 800f5f0: 687b ldr r3, [r7, #4]
  35417. 800f5f2: 681b ldr r3, [r3, #0]
  35418. 800f5f4: f042 0201 orr.w r2, r2, #1
  35419. 800f5f8: 601a str r2, [r3, #0]
  35420. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  35421. 800f5fa: e008 b.n 800f60e <HAL_TIM_PWM_Start+0x1e6>
  35422. }
  35423. }
  35424. else
  35425. {
  35426. __HAL_TIM_ENABLE(htim);
  35427. 800f5fc: 687b ldr r3, [r7, #4]
  35428. 800f5fe: 681b ldr r3, [r3, #0]
  35429. 800f600: 681a ldr r2, [r3, #0]
  35430. 800f602: 687b ldr r3, [r7, #4]
  35431. 800f604: 681b ldr r3, [r3, #0]
  35432. 800f606: f042 0201 orr.w r2, r2, #1
  35433. 800f60a: 601a str r2, [r3, #0]
  35434. 800f60c: e000 b.n 800f610 <HAL_TIM_PWM_Start+0x1e8>
  35435. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  35436. 800f60e: bf00 nop
  35437. }
  35438. /* Return function status */
  35439. return HAL_OK;
  35440. 800f610: 2300 movs r3, #0
  35441. }
  35442. 800f612: 4618 mov r0, r3
  35443. 800f614: 3710 adds r7, #16
  35444. 800f616: 46bd mov sp, r7
  35445. 800f618: bd80 pop {r7, pc}
  35446. 800f61a: bf00 nop
  35447. 800f61c: 40010000 .word 0x40010000
  35448. 800f620: 40010400 .word 0x40010400
  35449. 800f624: 40014000 .word 0x40014000
  35450. 800f628: 40014400 .word 0x40014400
  35451. 800f62c: 40014800 .word 0x40014800
  35452. 800f630: 40000400 .word 0x40000400
  35453. 800f634: 40000800 .word 0x40000800
  35454. 800f638: 40000c00 .word 0x40000c00
  35455. 800f63c: 40001800 .word 0x40001800
  35456. 800f640: 00010007 .word 0x00010007
  35457. 0800f644 <HAL_TIM_PWM_Stop>:
  35458. * @arg TIM_CHANNEL_5: TIM Channel 5 selected
  35459. * @arg TIM_CHANNEL_6: TIM Channel 6 selected
  35460. * @retval HAL status
  35461. */
  35462. HAL_StatusTypeDef HAL_TIM_PWM_Stop(TIM_HandleTypeDef *htim, uint32_t Channel)
  35463. {
  35464. 800f644: b580 push {r7, lr}
  35465. 800f646: b082 sub sp, #8
  35466. 800f648: af00 add r7, sp, #0
  35467. 800f64a: 6078 str r0, [r7, #4]
  35468. 800f64c: 6039 str r1, [r7, #0]
  35469. /* Check the parameters */
  35470. assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
  35471. /* Disable the Capture compare channel */
  35472. TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);
  35473. 800f64e: 687b ldr r3, [r7, #4]
  35474. 800f650: 681b ldr r3, [r3, #0]
  35475. 800f652: 2200 movs r2, #0
  35476. 800f654: 6839 ldr r1, [r7, #0]
  35477. 800f656: 4618 mov r0, r3
  35478. 800f658: f001 f81a bl 8010690 <TIM_CCxChannelCmd>
  35479. if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET)
  35480. 800f65c: 687b ldr r3, [r7, #4]
  35481. 800f65e: 681b ldr r3, [r3, #0]
  35482. 800f660: 4a3e ldr r2, [pc, #248] @ (800f75c <HAL_TIM_PWM_Stop+0x118>)
  35483. 800f662: 4293 cmp r3, r2
  35484. 800f664: d013 beq.n 800f68e <HAL_TIM_PWM_Stop+0x4a>
  35485. 800f666: 687b ldr r3, [r7, #4]
  35486. 800f668: 681b ldr r3, [r3, #0]
  35487. 800f66a: 4a3d ldr r2, [pc, #244] @ (800f760 <HAL_TIM_PWM_Stop+0x11c>)
  35488. 800f66c: 4293 cmp r3, r2
  35489. 800f66e: d00e beq.n 800f68e <HAL_TIM_PWM_Stop+0x4a>
  35490. 800f670: 687b ldr r3, [r7, #4]
  35491. 800f672: 681b ldr r3, [r3, #0]
  35492. 800f674: 4a3b ldr r2, [pc, #236] @ (800f764 <HAL_TIM_PWM_Stop+0x120>)
  35493. 800f676: 4293 cmp r3, r2
  35494. 800f678: d009 beq.n 800f68e <HAL_TIM_PWM_Stop+0x4a>
  35495. 800f67a: 687b ldr r3, [r7, #4]
  35496. 800f67c: 681b ldr r3, [r3, #0]
  35497. 800f67e: 4a3a ldr r2, [pc, #232] @ (800f768 <HAL_TIM_PWM_Stop+0x124>)
  35498. 800f680: 4293 cmp r3, r2
  35499. 800f682: d004 beq.n 800f68e <HAL_TIM_PWM_Stop+0x4a>
  35500. 800f684: 687b ldr r3, [r7, #4]
  35501. 800f686: 681b ldr r3, [r3, #0]
  35502. 800f688: 4a38 ldr r2, [pc, #224] @ (800f76c <HAL_TIM_PWM_Stop+0x128>)
  35503. 800f68a: 4293 cmp r3, r2
  35504. 800f68c: d101 bne.n 800f692 <HAL_TIM_PWM_Stop+0x4e>
  35505. 800f68e: 2301 movs r3, #1
  35506. 800f690: e000 b.n 800f694 <HAL_TIM_PWM_Stop+0x50>
  35507. 800f692: 2300 movs r3, #0
  35508. 800f694: 2b00 cmp r3, #0
  35509. 800f696: d017 beq.n 800f6c8 <HAL_TIM_PWM_Stop+0x84>
  35510. {
  35511. /* Disable the Main Output */
  35512. __HAL_TIM_MOE_DISABLE(htim);
  35513. 800f698: 687b ldr r3, [r7, #4]
  35514. 800f69a: 681b ldr r3, [r3, #0]
  35515. 800f69c: 6a1a ldr r2, [r3, #32]
  35516. 800f69e: f241 1311 movw r3, #4369 @ 0x1111
  35517. 800f6a2: 4013 ands r3, r2
  35518. 800f6a4: 2b00 cmp r3, #0
  35519. 800f6a6: d10f bne.n 800f6c8 <HAL_TIM_PWM_Stop+0x84>
  35520. 800f6a8: 687b ldr r3, [r7, #4]
  35521. 800f6aa: 681b ldr r3, [r3, #0]
  35522. 800f6ac: 6a1a ldr r2, [r3, #32]
  35523. 800f6ae: f240 4344 movw r3, #1092 @ 0x444
  35524. 800f6b2: 4013 ands r3, r2
  35525. 800f6b4: 2b00 cmp r3, #0
  35526. 800f6b6: d107 bne.n 800f6c8 <HAL_TIM_PWM_Stop+0x84>
  35527. 800f6b8: 687b ldr r3, [r7, #4]
  35528. 800f6ba: 681b ldr r3, [r3, #0]
  35529. 800f6bc: 6c5a ldr r2, [r3, #68] @ 0x44
  35530. 800f6be: 687b ldr r3, [r7, #4]
  35531. 800f6c0: 681b ldr r3, [r3, #0]
  35532. 800f6c2: f422 4200 bic.w r2, r2, #32768 @ 0x8000
  35533. 800f6c6: 645a str r2, [r3, #68] @ 0x44
  35534. }
  35535. /* Disable the Peripheral */
  35536. __HAL_TIM_DISABLE(htim);
  35537. 800f6c8: 687b ldr r3, [r7, #4]
  35538. 800f6ca: 681b ldr r3, [r3, #0]
  35539. 800f6cc: 6a1a ldr r2, [r3, #32]
  35540. 800f6ce: f241 1311 movw r3, #4369 @ 0x1111
  35541. 800f6d2: 4013 ands r3, r2
  35542. 800f6d4: 2b00 cmp r3, #0
  35543. 800f6d6: d10f bne.n 800f6f8 <HAL_TIM_PWM_Stop+0xb4>
  35544. 800f6d8: 687b ldr r3, [r7, #4]
  35545. 800f6da: 681b ldr r3, [r3, #0]
  35546. 800f6dc: 6a1a ldr r2, [r3, #32]
  35547. 800f6de: f240 4344 movw r3, #1092 @ 0x444
  35548. 800f6e2: 4013 ands r3, r2
  35549. 800f6e4: 2b00 cmp r3, #0
  35550. 800f6e6: d107 bne.n 800f6f8 <HAL_TIM_PWM_Stop+0xb4>
  35551. 800f6e8: 687b ldr r3, [r7, #4]
  35552. 800f6ea: 681b ldr r3, [r3, #0]
  35553. 800f6ec: 681a ldr r2, [r3, #0]
  35554. 800f6ee: 687b ldr r3, [r7, #4]
  35555. 800f6f0: 681b ldr r3, [r3, #0]
  35556. 800f6f2: f022 0201 bic.w r2, r2, #1
  35557. 800f6f6: 601a str r2, [r3, #0]
  35558. /* Set the TIM channel state */
  35559. TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);
  35560. 800f6f8: 683b ldr r3, [r7, #0]
  35561. 800f6fa: 2b00 cmp r3, #0
  35562. 800f6fc: d104 bne.n 800f708 <HAL_TIM_PWM_Stop+0xc4>
  35563. 800f6fe: 687b ldr r3, [r7, #4]
  35564. 800f700: 2201 movs r2, #1
  35565. 800f702: f883 203e strb.w r2, [r3, #62] @ 0x3e
  35566. 800f706: e023 b.n 800f750 <HAL_TIM_PWM_Stop+0x10c>
  35567. 800f708: 683b ldr r3, [r7, #0]
  35568. 800f70a: 2b04 cmp r3, #4
  35569. 800f70c: d104 bne.n 800f718 <HAL_TIM_PWM_Stop+0xd4>
  35570. 800f70e: 687b ldr r3, [r7, #4]
  35571. 800f710: 2201 movs r2, #1
  35572. 800f712: f883 203f strb.w r2, [r3, #63] @ 0x3f
  35573. 800f716: e01b b.n 800f750 <HAL_TIM_PWM_Stop+0x10c>
  35574. 800f718: 683b ldr r3, [r7, #0]
  35575. 800f71a: 2b08 cmp r3, #8
  35576. 800f71c: d104 bne.n 800f728 <HAL_TIM_PWM_Stop+0xe4>
  35577. 800f71e: 687b ldr r3, [r7, #4]
  35578. 800f720: 2201 movs r2, #1
  35579. 800f722: f883 2040 strb.w r2, [r3, #64] @ 0x40
  35580. 800f726: e013 b.n 800f750 <HAL_TIM_PWM_Stop+0x10c>
  35581. 800f728: 683b ldr r3, [r7, #0]
  35582. 800f72a: 2b0c cmp r3, #12
  35583. 800f72c: d104 bne.n 800f738 <HAL_TIM_PWM_Stop+0xf4>
  35584. 800f72e: 687b ldr r3, [r7, #4]
  35585. 800f730: 2201 movs r2, #1
  35586. 800f732: f883 2041 strb.w r2, [r3, #65] @ 0x41
  35587. 800f736: e00b b.n 800f750 <HAL_TIM_PWM_Stop+0x10c>
  35588. 800f738: 683b ldr r3, [r7, #0]
  35589. 800f73a: 2b10 cmp r3, #16
  35590. 800f73c: d104 bne.n 800f748 <HAL_TIM_PWM_Stop+0x104>
  35591. 800f73e: 687b ldr r3, [r7, #4]
  35592. 800f740: 2201 movs r2, #1
  35593. 800f742: f883 2042 strb.w r2, [r3, #66] @ 0x42
  35594. 800f746: e003 b.n 800f750 <HAL_TIM_PWM_Stop+0x10c>
  35595. 800f748: 687b ldr r3, [r7, #4]
  35596. 800f74a: 2201 movs r2, #1
  35597. 800f74c: f883 2043 strb.w r2, [r3, #67] @ 0x43
  35598. /* Return function status */
  35599. return HAL_OK;
  35600. 800f750: 2300 movs r3, #0
  35601. }
  35602. 800f752: 4618 mov r0, r3
  35603. 800f754: 3708 adds r7, #8
  35604. 800f756: 46bd mov sp, r7
  35605. 800f758: bd80 pop {r7, pc}
  35606. 800f75a: bf00 nop
  35607. 800f75c: 40010000 .word 0x40010000
  35608. 800f760: 40010400 .word 0x40010400
  35609. 800f764: 40014000 .word 0x40014000
  35610. 800f768: 40014400 .word 0x40014400
  35611. 800f76c: 40014800 .word 0x40014800
  35612. 0800f770 <HAL_TIM_IRQHandler>:
  35613. * @brief This function handles TIM interrupts requests.
  35614. * @param htim TIM handle
  35615. * @retval None
  35616. */
  35617. void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim)
  35618. {
  35619. 800f770: b580 push {r7, lr}
  35620. 800f772: b084 sub sp, #16
  35621. 800f774: af00 add r7, sp, #0
  35622. 800f776: 6078 str r0, [r7, #4]
  35623. uint32_t itsource = htim->Instance->DIER;
  35624. 800f778: 687b ldr r3, [r7, #4]
  35625. 800f77a: 681b ldr r3, [r3, #0]
  35626. 800f77c: 68db ldr r3, [r3, #12]
  35627. 800f77e: 60fb str r3, [r7, #12]
  35628. uint32_t itflag = htim->Instance->SR;
  35629. 800f780: 687b ldr r3, [r7, #4]
  35630. 800f782: 681b ldr r3, [r3, #0]
  35631. 800f784: 691b ldr r3, [r3, #16]
  35632. 800f786: 60bb str r3, [r7, #8]
  35633. /* Capture compare 1 event */
  35634. if ((itflag & (TIM_FLAG_CC1)) == (TIM_FLAG_CC1))
  35635. 800f788: 68bb ldr r3, [r7, #8]
  35636. 800f78a: f003 0302 and.w r3, r3, #2
  35637. 800f78e: 2b00 cmp r3, #0
  35638. 800f790: d020 beq.n 800f7d4 <HAL_TIM_IRQHandler+0x64>
  35639. {
  35640. if ((itsource & (TIM_IT_CC1)) == (TIM_IT_CC1))
  35641. 800f792: 68fb ldr r3, [r7, #12]
  35642. 800f794: f003 0302 and.w r3, r3, #2
  35643. 800f798: 2b00 cmp r3, #0
  35644. 800f79a: d01b beq.n 800f7d4 <HAL_TIM_IRQHandler+0x64>
  35645. {
  35646. {
  35647. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_CC1);
  35648. 800f79c: 687b ldr r3, [r7, #4]
  35649. 800f79e: 681b ldr r3, [r3, #0]
  35650. 800f7a0: f06f 0202 mvn.w r2, #2
  35651. 800f7a4: 611a str r2, [r3, #16]
  35652. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;
  35653. 800f7a6: 687b ldr r3, [r7, #4]
  35654. 800f7a8: 2201 movs r2, #1
  35655. 800f7aa: 771a strb r2, [r3, #28]
  35656. /* Input capture event */
  35657. if ((htim->Instance->CCMR1 & TIM_CCMR1_CC1S) != 0x00U)
  35658. 800f7ac: 687b ldr r3, [r7, #4]
  35659. 800f7ae: 681b ldr r3, [r3, #0]
  35660. 800f7b0: 699b ldr r3, [r3, #24]
  35661. 800f7b2: f003 0303 and.w r3, r3, #3
  35662. 800f7b6: 2b00 cmp r3, #0
  35663. 800f7b8: d003 beq.n 800f7c2 <HAL_TIM_IRQHandler+0x52>
  35664. {
  35665. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  35666. htim->IC_CaptureCallback(htim);
  35667. #else
  35668. HAL_TIM_IC_CaptureCallback(htim);
  35669. 800f7ba: 6878 ldr r0, [r7, #4]
  35670. 800f7bc: f000 faf6 bl 800fdac <HAL_TIM_IC_CaptureCallback>
  35671. 800f7c0: e005 b.n 800f7ce <HAL_TIM_IRQHandler+0x5e>
  35672. {
  35673. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  35674. htim->OC_DelayElapsedCallback(htim);
  35675. htim->PWM_PulseFinishedCallback(htim);
  35676. #else
  35677. HAL_TIM_OC_DelayElapsedCallback(htim);
  35678. 800f7c2: 6878 ldr r0, [r7, #4]
  35679. 800f7c4: f000 fae8 bl 800fd98 <HAL_TIM_OC_DelayElapsedCallback>
  35680. HAL_TIM_PWM_PulseFinishedCallback(htim);
  35681. 800f7c8: 6878 ldr r0, [r7, #4]
  35682. 800f7ca: f000 faf9 bl 800fdc0 <HAL_TIM_PWM_PulseFinishedCallback>
  35683. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  35684. }
  35685. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;
  35686. 800f7ce: 687b ldr r3, [r7, #4]
  35687. 800f7d0: 2200 movs r2, #0
  35688. 800f7d2: 771a strb r2, [r3, #28]
  35689. }
  35690. }
  35691. }
  35692. /* Capture compare 2 event */
  35693. if ((itflag & (TIM_FLAG_CC2)) == (TIM_FLAG_CC2))
  35694. 800f7d4: 68bb ldr r3, [r7, #8]
  35695. 800f7d6: f003 0304 and.w r3, r3, #4
  35696. 800f7da: 2b00 cmp r3, #0
  35697. 800f7dc: d020 beq.n 800f820 <HAL_TIM_IRQHandler+0xb0>
  35698. {
  35699. if ((itsource & (TIM_IT_CC2)) == (TIM_IT_CC2))
  35700. 800f7de: 68fb ldr r3, [r7, #12]
  35701. 800f7e0: f003 0304 and.w r3, r3, #4
  35702. 800f7e4: 2b00 cmp r3, #0
  35703. 800f7e6: d01b beq.n 800f820 <HAL_TIM_IRQHandler+0xb0>
  35704. {
  35705. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_CC2);
  35706. 800f7e8: 687b ldr r3, [r7, #4]
  35707. 800f7ea: 681b ldr r3, [r3, #0]
  35708. 800f7ec: f06f 0204 mvn.w r2, #4
  35709. 800f7f0: 611a str r2, [r3, #16]
  35710. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;
  35711. 800f7f2: 687b ldr r3, [r7, #4]
  35712. 800f7f4: 2202 movs r2, #2
  35713. 800f7f6: 771a strb r2, [r3, #28]
  35714. /* Input capture event */
  35715. if ((htim->Instance->CCMR1 & TIM_CCMR1_CC2S) != 0x00U)
  35716. 800f7f8: 687b ldr r3, [r7, #4]
  35717. 800f7fa: 681b ldr r3, [r3, #0]
  35718. 800f7fc: 699b ldr r3, [r3, #24]
  35719. 800f7fe: f403 7340 and.w r3, r3, #768 @ 0x300
  35720. 800f802: 2b00 cmp r3, #0
  35721. 800f804: d003 beq.n 800f80e <HAL_TIM_IRQHandler+0x9e>
  35722. {
  35723. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  35724. htim->IC_CaptureCallback(htim);
  35725. #else
  35726. HAL_TIM_IC_CaptureCallback(htim);
  35727. 800f806: 6878 ldr r0, [r7, #4]
  35728. 800f808: f000 fad0 bl 800fdac <HAL_TIM_IC_CaptureCallback>
  35729. 800f80c: e005 b.n 800f81a <HAL_TIM_IRQHandler+0xaa>
  35730. {
  35731. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  35732. htim->OC_DelayElapsedCallback(htim);
  35733. htim->PWM_PulseFinishedCallback(htim);
  35734. #else
  35735. HAL_TIM_OC_DelayElapsedCallback(htim);
  35736. 800f80e: 6878 ldr r0, [r7, #4]
  35737. 800f810: f000 fac2 bl 800fd98 <HAL_TIM_OC_DelayElapsedCallback>
  35738. HAL_TIM_PWM_PulseFinishedCallback(htim);
  35739. 800f814: 6878 ldr r0, [r7, #4]
  35740. 800f816: f000 fad3 bl 800fdc0 <HAL_TIM_PWM_PulseFinishedCallback>
  35741. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  35742. }
  35743. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;
  35744. 800f81a: 687b ldr r3, [r7, #4]
  35745. 800f81c: 2200 movs r2, #0
  35746. 800f81e: 771a strb r2, [r3, #28]
  35747. }
  35748. }
  35749. /* Capture compare 3 event */
  35750. if ((itflag & (TIM_FLAG_CC3)) == (TIM_FLAG_CC3))
  35751. 800f820: 68bb ldr r3, [r7, #8]
  35752. 800f822: f003 0308 and.w r3, r3, #8
  35753. 800f826: 2b00 cmp r3, #0
  35754. 800f828: d020 beq.n 800f86c <HAL_TIM_IRQHandler+0xfc>
  35755. {
  35756. if ((itsource & (TIM_IT_CC3)) == (TIM_IT_CC3))
  35757. 800f82a: 68fb ldr r3, [r7, #12]
  35758. 800f82c: f003 0308 and.w r3, r3, #8
  35759. 800f830: 2b00 cmp r3, #0
  35760. 800f832: d01b beq.n 800f86c <HAL_TIM_IRQHandler+0xfc>
  35761. {
  35762. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_CC3);
  35763. 800f834: 687b ldr r3, [r7, #4]
  35764. 800f836: 681b ldr r3, [r3, #0]
  35765. 800f838: f06f 0208 mvn.w r2, #8
  35766. 800f83c: 611a str r2, [r3, #16]
  35767. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;
  35768. 800f83e: 687b ldr r3, [r7, #4]
  35769. 800f840: 2204 movs r2, #4
  35770. 800f842: 771a strb r2, [r3, #28]
  35771. /* Input capture event */
  35772. if ((htim->Instance->CCMR2 & TIM_CCMR2_CC3S) != 0x00U)
  35773. 800f844: 687b ldr r3, [r7, #4]
  35774. 800f846: 681b ldr r3, [r3, #0]
  35775. 800f848: 69db ldr r3, [r3, #28]
  35776. 800f84a: f003 0303 and.w r3, r3, #3
  35777. 800f84e: 2b00 cmp r3, #0
  35778. 800f850: d003 beq.n 800f85a <HAL_TIM_IRQHandler+0xea>
  35779. {
  35780. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  35781. htim->IC_CaptureCallback(htim);
  35782. #else
  35783. HAL_TIM_IC_CaptureCallback(htim);
  35784. 800f852: 6878 ldr r0, [r7, #4]
  35785. 800f854: f000 faaa bl 800fdac <HAL_TIM_IC_CaptureCallback>
  35786. 800f858: e005 b.n 800f866 <HAL_TIM_IRQHandler+0xf6>
  35787. {
  35788. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  35789. htim->OC_DelayElapsedCallback(htim);
  35790. htim->PWM_PulseFinishedCallback(htim);
  35791. #else
  35792. HAL_TIM_OC_DelayElapsedCallback(htim);
  35793. 800f85a: 6878 ldr r0, [r7, #4]
  35794. 800f85c: f000 fa9c bl 800fd98 <HAL_TIM_OC_DelayElapsedCallback>
  35795. HAL_TIM_PWM_PulseFinishedCallback(htim);
  35796. 800f860: 6878 ldr r0, [r7, #4]
  35797. 800f862: f000 faad bl 800fdc0 <HAL_TIM_PWM_PulseFinishedCallback>
  35798. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  35799. }
  35800. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;
  35801. 800f866: 687b ldr r3, [r7, #4]
  35802. 800f868: 2200 movs r2, #0
  35803. 800f86a: 771a strb r2, [r3, #28]
  35804. }
  35805. }
  35806. /* Capture compare 4 event */
  35807. if ((itflag & (TIM_FLAG_CC4)) == (TIM_FLAG_CC4))
  35808. 800f86c: 68bb ldr r3, [r7, #8]
  35809. 800f86e: f003 0310 and.w r3, r3, #16
  35810. 800f872: 2b00 cmp r3, #0
  35811. 800f874: d020 beq.n 800f8b8 <HAL_TIM_IRQHandler+0x148>
  35812. {
  35813. if ((itsource & (TIM_IT_CC4)) == (TIM_IT_CC4))
  35814. 800f876: 68fb ldr r3, [r7, #12]
  35815. 800f878: f003 0310 and.w r3, r3, #16
  35816. 800f87c: 2b00 cmp r3, #0
  35817. 800f87e: d01b beq.n 800f8b8 <HAL_TIM_IRQHandler+0x148>
  35818. {
  35819. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_CC4);
  35820. 800f880: 687b ldr r3, [r7, #4]
  35821. 800f882: 681b ldr r3, [r3, #0]
  35822. 800f884: f06f 0210 mvn.w r2, #16
  35823. 800f888: 611a str r2, [r3, #16]
  35824. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4;
  35825. 800f88a: 687b ldr r3, [r7, #4]
  35826. 800f88c: 2208 movs r2, #8
  35827. 800f88e: 771a strb r2, [r3, #28]
  35828. /* Input capture event */
  35829. if ((htim->Instance->CCMR2 & TIM_CCMR2_CC4S) != 0x00U)
  35830. 800f890: 687b ldr r3, [r7, #4]
  35831. 800f892: 681b ldr r3, [r3, #0]
  35832. 800f894: 69db ldr r3, [r3, #28]
  35833. 800f896: f403 7340 and.w r3, r3, #768 @ 0x300
  35834. 800f89a: 2b00 cmp r3, #0
  35835. 800f89c: d003 beq.n 800f8a6 <HAL_TIM_IRQHandler+0x136>
  35836. {
  35837. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  35838. htim->IC_CaptureCallback(htim);
  35839. #else
  35840. HAL_TIM_IC_CaptureCallback(htim);
  35841. 800f89e: 6878 ldr r0, [r7, #4]
  35842. 800f8a0: f000 fa84 bl 800fdac <HAL_TIM_IC_CaptureCallback>
  35843. 800f8a4: e005 b.n 800f8b2 <HAL_TIM_IRQHandler+0x142>
  35844. {
  35845. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  35846. htim->OC_DelayElapsedCallback(htim);
  35847. htim->PWM_PulseFinishedCallback(htim);
  35848. #else
  35849. HAL_TIM_OC_DelayElapsedCallback(htim);
  35850. 800f8a6: 6878 ldr r0, [r7, #4]
  35851. 800f8a8: f000 fa76 bl 800fd98 <HAL_TIM_OC_DelayElapsedCallback>
  35852. HAL_TIM_PWM_PulseFinishedCallback(htim);
  35853. 800f8ac: 6878 ldr r0, [r7, #4]
  35854. 800f8ae: f000 fa87 bl 800fdc0 <HAL_TIM_PWM_PulseFinishedCallback>
  35855. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  35856. }
  35857. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;
  35858. 800f8b2: 687b ldr r3, [r7, #4]
  35859. 800f8b4: 2200 movs r2, #0
  35860. 800f8b6: 771a strb r2, [r3, #28]
  35861. }
  35862. }
  35863. /* TIM Update event */
  35864. if ((itflag & (TIM_FLAG_UPDATE)) == (TIM_FLAG_UPDATE))
  35865. 800f8b8: 68bb ldr r3, [r7, #8]
  35866. 800f8ba: f003 0301 and.w r3, r3, #1
  35867. 800f8be: 2b00 cmp r3, #0
  35868. 800f8c0: d00c beq.n 800f8dc <HAL_TIM_IRQHandler+0x16c>
  35869. {
  35870. if ((itsource & (TIM_IT_UPDATE)) == (TIM_IT_UPDATE))
  35871. 800f8c2: 68fb ldr r3, [r7, #12]
  35872. 800f8c4: f003 0301 and.w r3, r3, #1
  35873. 800f8c8: 2b00 cmp r3, #0
  35874. 800f8ca: d007 beq.n 800f8dc <HAL_TIM_IRQHandler+0x16c>
  35875. {
  35876. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_UPDATE);
  35877. 800f8cc: 687b ldr r3, [r7, #4]
  35878. 800f8ce: 681b ldr r3, [r3, #0]
  35879. 800f8d0: f06f 0201 mvn.w r2, #1
  35880. 800f8d4: 611a str r2, [r3, #16]
  35881. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  35882. htim->PeriodElapsedCallback(htim);
  35883. #else
  35884. HAL_TIM_PeriodElapsedCallback(htim);
  35885. 800f8d6: 6878 ldr r0, [r7, #4]
  35886. 800f8d8: f7f2 f944 bl 8001b64 <HAL_TIM_PeriodElapsedCallback>
  35887. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  35888. }
  35889. }
  35890. /* TIM Break input event */
  35891. if (((itflag & (TIM_FLAG_BREAK)) == (TIM_FLAG_BREAK)) || \
  35892. 800f8dc: 68bb ldr r3, [r7, #8]
  35893. 800f8de: f003 0380 and.w r3, r3, #128 @ 0x80
  35894. 800f8e2: 2b00 cmp r3, #0
  35895. 800f8e4: d104 bne.n 800f8f0 <HAL_TIM_IRQHandler+0x180>
  35896. ((itflag & (TIM_FLAG_SYSTEM_BREAK)) == (TIM_FLAG_SYSTEM_BREAK)))
  35897. 800f8e6: 68bb ldr r3, [r7, #8]
  35898. 800f8e8: f403 5300 and.w r3, r3, #8192 @ 0x2000
  35899. if (((itflag & (TIM_FLAG_BREAK)) == (TIM_FLAG_BREAK)) || \
  35900. 800f8ec: 2b00 cmp r3, #0
  35901. 800f8ee: d00c beq.n 800f90a <HAL_TIM_IRQHandler+0x19a>
  35902. {
  35903. if ((itsource & (TIM_IT_BREAK)) == (TIM_IT_BREAK))
  35904. 800f8f0: 68fb ldr r3, [r7, #12]
  35905. 800f8f2: f003 0380 and.w r3, r3, #128 @ 0x80
  35906. 800f8f6: 2b00 cmp r3, #0
  35907. 800f8f8: d007 beq.n 800f90a <HAL_TIM_IRQHandler+0x19a>
  35908. {
  35909. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_BREAK | TIM_FLAG_SYSTEM_BREAK);
  35910. 800f8fa: 687b ldr r3, [r7, #4]
  35911. 800f8fc: 681b ldr r3, [r3, #0]
  35912. 800f8fe: f46f 5202 mvn.w r2, #8320 @ 0x2080
  35913. 800f902: 611a str r2, [r3, #16]
  35914. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  35915. htim->BreakCallback(htim);
  35916. #else
  35917. HAL_TIMEx_BreakCallback(htim);
  35918. 800f904: 6878 ldr r0, [r7, #4]
  35919. 800f906: f000 ffff bl 8010908 <HAL_TIMEx_BreakCallback>
  35920. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  35921. }
  35922. }
  35923. /* TIM Break2 input event */
  35924. if ((itflag & (TIM_FLAG_BREAK2)) == (TIM_FLAG_BREAK2))
  35925. 800f90a: 68bb ldr r3, [r7, #8]
  35926. 800f90c: f403 7380 and.w r3, r3, #256 @ 0x100
  35927. 800f910: 2b00 cmp r3, #0
  35928. 800f912: d00c beq.n 800f92e <HAL_TIM_IRQHandler+0x1be>
  35929. {
  35930. if ((itsource & (TIM_IT_BREAK)) == (TIM_IT_BREAK))
  35931. 800f914: 68fb ldr r3, [r7, #12]
  35932. 800f916: f003 0380 and.w r3, r3, #128 @ 0x80
  35933. 800f91a: 2b00 cmp r3, #0
  35934. 800f91c: d007 beq.n 800f92e <HAL_TIM_IRQHandler+0x1be>
  35935. {
  35936. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_BREAK2);
  35937. 800f91e: 687b ldr r3, [r7, #4]
  35938. 800f920: 681b ldr r3, [r3, #0]
  35939. 800f922: f46f 7280 mvn.w r2, #256 @ 0x100
  35940. 800f926: 611a str r2, [r3, #16]
  35941. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  35942. htim->Break2Callback(htim);
  35943. #else
  35944. HAL_TIMEx_Break2Callback(htim);
  35945. 800f928: 6878 ldr r0, [r7, #4]
  35946. 800f92a: f000 fff7 bl 801091c <HAL_TIMEx_Break2Callback>
  35947. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  35948. }
  35949. }
  35950. /* TIM Trigger detection event */
  35951. if ((itflag & (TIM_FLAG_TRIGGER)) == (TIM_FLAG_TRIGGER))
  35952. 800f92e: 68bb ldr r3, [r7, #8]
  35953. 800f930: f003 0340 and.w r3, r3, #64 @ 0x40
  35954. 800f934: 2b00 cmp r3, #0
  35955. 800f936: d00c beq.n 800f952 <HAL_TIM_IRQHandler+0x1e2>
  35956. {
  35957. if ((itsource & (TIM_IT_TRIGGER)) == (TIM_IT_TRIGGER))
  35958. 800f938: 68fb ldr r3, [r7, #12]
  35959. 800f93a: f003 0340 and.w r3, r3, #64 @ 0x40
  35960. 800f93e: 2b00 cmp r3, #0
  35961. 800f940: d007 beq.n 800f952 <HAL_TIM_IRQHandler+0x1e2>
  35962. {
  35963. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_TRIGGER);
  35964. 800f942: 687b ldr r3, [r7, #4]
  35965. 800f944: 681b ldr r3, [r3, #0]
  35966. 800f946: f06f 0240 mvn.w r2, #64 @ 0x40
  35967. 800f94a: 611a str r2, [r3, #16]
  35968. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  35969. htim->TriggerCallback(htim);
  35970. #else
  35971. HAL_TIM_TriggerCallback(htim);
  35972. 800f94c: 6878 ldr r0, [r7, #4]
  35973. 800f94e: f000 fa41 bl 800fdd4 <HAL_TIM_TriggerCallback>
  35974. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  35975. }
  35976. }
  35977. /* TIM commutation event */
  35978. if ((itflag & (TIM_FLAG_COM)) == (TIM_FLAG_COM))
  35979. 800f952: 68bb ldr r3, [r7, #8]
  35980. 800f954: f003 0320 and.w r3, r3, #32
  35981. 800f958: 2b00 cmp r3, #0
  35982. 800f95a: d00c beq.n 800f976 <HAL_TIM_IRQHandler+0x206>
  35983. {
  35984. if ((itsource & (TIM_IT_COM)) == (TIM_IT_COM))
  35985. 800f95c: 68fb ldr r3, [r7, #12]
  35986. 800f95e: f003 0320 and.w r3, r3, #32
  35987. 800f962: 2b00 cmp r3, #0
  35988. 800f964: d007 beq.n 800f976 <HAL_TIM_IRQHandler+0x206>
  35989. {
  35990. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_COM);
  35991. 800f966: 687b ldr r3, [r7, #4]
  35992. 800f968: 681b ldr r3, [r3, #0]
  35993. 800f96a: f06f 0220 mvn.w r2, #32
  35994. 800f96e: 611a str r2, [r3, #16]
  35995. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  35996. htim->CommutationCallback(htim);
  35997. #else
  35998. HAL_TIMEx_CommutCallback(htim);
  35999. 800f970: 6878 ldr r0, [r7, #4]
  36000. 800f972: f000 ffbf bl 80108f4 <HAL_TIMEx_CommutCallback>
  36001. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  36002. }
  36003. }
  36004. }
  36005. 800f976: bf00 nop
  36006. 800f978: 3710 adds r7, #16
  36007. 800f97a: 46bd mov sp, r7
  36008. 800f97c: bd80 pop {r7, pc}
  36009. ...
  36010. 0800f980 <HAL_TIM_PWM_ConfigChannel>:
  36011. * @retval HAL status
  36012. */
  36013. HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim,
  36014. const TIM_OC_InitTypeDef *sConfig,
  36015. uint32_t Channel)
  36016. {
  36017. 800f980: b580 push {r7, lr}
  36018. 800f982: b086 sub sp, #24
  36019. 800f984: af00 add r7, sp, #0
  36020. 800f986: 60f8 str r0, [r7, #12]
  36021. 800f988: 60b9 str r1, [r7, #8]
  36022. 800f98a: 607a str r2, [r7, #4]
  36023. HAL_StatusTypeDef status = HAL_OK;
  36024. 800f98c: 2300 movs r3, #0
  36025. 800f98e: 75fb strb r3, [r7, #23]
  36026. assert_param(IS_TIM_PWM_MODE(sConfig->OCMode));
  36027. assert_param(IS_TIM_OC_POLARITY(sConfig->OCPolarity));
  36028. assert_param(IS_TIM_FAST_STATE(sConfig->OCFastMode));
  36029. /* Process Locked */
  36030. __HAL_LOCK(htim);
  36031. 800f990: 68fb ldr r3, [r7, #12]
  36032. 800f992: f893 303c ldrb.w r3, [r3, #60] @ 0x3c
  36033. 800f996: 2b01 cmp r3, #1
  36034. 800f998: d101 bne.n 800f99e <HAL_TIM_PWM_ConfigChannel+0x1e>
  36035. 800f99a: 2302 movs r3, #2
  36036. 800f99c: e0ff b.n 800fb9e <HAL_TIM_PWM_ConfigChannel+0x21e>
  36037. 800f99e: 68fb ldr r3, [r7, #12]
  36038. 800f9a0: 2201 movs r2, #1
  36039. 800f9a2: f883 203c strb.w r2, [r3, #60] @ 0x3c
  36040. switch (Channel)
  36041. 800f9a6: 687b ldr r3, [r7, #4]
  36042. 800f9a8: 2b14 cmp r3, #20
  36043. 800f9aa: f200 80f0 bhi.w 800fb8e <HAL_TIM_PWM_ConfigChannel+0x20e>
  36044. 800f9ae: a201 add r2, pc, #4 @ (adr r2, 800f9b4 <HAL_TIM_PWM_ConfigChannel+0x34>)
  36045. 800f9b0: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  36046. 800f9b4: 0800fa09 .word 0x0800fa09
  36047. 800f9b8: 0800fb8f .word 0x0800fb8f
  36048. 800f9bc: 0800fb8f .word 0x0800fb8f
  36049. 800f9c0: 0800fb8f .word 0x0800fb8f
  36050. 800f9c4: 0800fa49 .word 0x0800fa49
  36051. 800f9c8: 0800fb8f .word 0x0800fb8f
  36052. 800f9cc: 0800fb8f .word 0x0800fb8f
  36053. 800f9d0: 0800fb8f .word 0x0800fb8f
  36054. 800f9d4: 0800fa8b .word 0x0800fa8b
  36055. 800f9d8: 0800fb8f .word 0x0800fb8f
  36056. 800f9dc: 0800fb8f .word 0x0800fb8f
  36057. 800f9e0: 0800fb8f .word 0x0800fb8f
  36058. 800f9e4: 0800facb .word 0x0800facb
  36059. 800f9e8: 0800fb8f .word 0x0800fb8f
  36060. 800f9ec: 0800fb8f .word 0x0800fb8f
  36061. 800f9f0: 0800fb8f .word 0x0800fb8f
  36062. 800f9f4: 0800fb0d .word 0x0800fb0d
  36063. 800f9f8: 0800fb8f .word 0x0800fb8f
  36064. 800f9fc: 0800fb8f .word 0x0800fb8f
  36065. 800fa00: 0800fb8f .word 0x0800fb8f
  36066. 800fa04: 0800fb4d .word 0x0800fb4d
  36067. {
  36068. /* Check the parameters */
  36069. assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));
  36070. /* Configure the Channel 1 in PWM mode */
  36071. TIM_OC1_SetConfig(htim->Instance, sConfig);
  36072. 800fa08: 68fb ldr r3, [r7, #12]
  36073. 800fa0a: 681b ldr r3, [r3, #0]
  36074. 800fa0c: 68b9 ldr r1, [r7, #8]
  36075. 800fa0e: 4618 mov r0, r3
  36076. 800fa10: f000 faca bl 800ffa8 <TIM_OC1_SetConfig>
  36077. /* Set the Preload enable bit for channel1 */
  36078. htim->Instance->CCMR1 |= TIM_CCMR1_OC1PE;
  36079. 800fa14: 68fb ldr r3, [r7, #12]
  36080. 800fa16: 681b ldr r3, [r3, #0]
  36081. 800fa18: 699a ldr r2, [r3, #24]
  36082. 800fa1a: 68fb ldr r3, [r7, #12]
  36083. 800fa1c: 681b ldr r3, [r3, #0]
  36084. 800fa1e: f042 0208 orr.w r2, r2, #8
  36085. 800fa22: 619a str r2, [r3, #24]
  36086. /* Configure the Output Fast mode */
  36087. htim->Instance->CCMR1 &= ~TIM_CCMR1_OC1FE;
  36088. 800fa24: 68fb ldr r3, [r7, #12]
  36089. 800fa26: 681b ldr r3, [r3, #0]
  36090. 800fa28: 699a ldr r2, [r3, #24]
  36091. 800fa2a: 68fb ldr r3, [r7, #12]
  36092. 800fa2c: 681b ldr r3, [r3, #0]
  36093. 800fa2e: f022 0204 bic.w r2, r2, #4
  36094. 800fa32: 619a str r2, [r3, #24]
  36095. htim->Instance->CCMR1 |= sConfig->OCFastMode;
  36096. 800fa34: 68fb ldr r3, [r7, #12]
  36097. 800fa36: 681b ldr r3, [r3, #0]
  36098. 800fa38: 6999 ldr r1, [r3, #24]
  36099. 800fa3a: 68bb ldr r3, [r7, #8]
  36100. 800fa3c: 691a ldr r2, [r3, #16]
  36101. 800fa3e: 68fb ldr r3, [r7, #12]
  36102. 800fa40: 681b ldr r3, [r3, #0]
  36103. 800fa42: 430a orrs r2, r1
  36104. 800fa44: 619a str r2, [r3, #24]
  36105. break;
  36106. 800fa46: e0a5 b.n 800fb94 <HAL_TIM_PWM_ConfigChannel+0x214>
  36107. {
  36108. /* Check the parameters */
  36109. assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
  36110. /* Configure the Channel 2 in PWM mode */
  36111. TIM_OC2_SetConfig(htim->Instance, sConfig);
  36112. 800fa48: 68fb ldr r3, [r7, #12]
  36113. 800fa4a: 681b ldr r3, [r3, #0]
  36114. 800fa4c: 68b9 ldr r1, [r7, #8]
  36115. 800fa4e: 4618 mov r0, r3
  36116. 800fa50: f000 fb3a bl 80100c8 <TIM_OC2_SetConfig>
  36117. /* Set the Preload enable bit for channel2 */
  36118. htim->Instance->CCMR1 |= TIM_CCMR1_OC2PE;
  36119. 800fa54: 68fb ldr r3, [r7, #12]
  36120. 800fa56: 681b ldr r3, [r3, #0]
  36121. 800fa58: 699a ldr r2, [r3, #24]
  36122. 800fa5a: 68fb ldr r3, [r7, #12]
  36123. 800fa5c: 681b ldr r3, [r3, #0]
  36124. 800fa5e: f442 6200 orr.w r2, r2, #2048 @ 0x800
  36125. 800fa62: 619a str r2, [r3, #24]
  36126. /* Configure the Output Fast mode */
  36127. htim->Instance->CCMR1 &= ~TIM_CCMR1_OC2FE;
  36128. 800fa64: 68fb ldr r3, [r7, #12]
  36129. 800fa66: 681b ldr r3, [r3, #0]
  36130. 800fa68: 699a ldr r2, [r3, #24]
  36131. 800fa6a: 68fb ldr r3, [r7, #12]
  36132. 800fa6c: 681b ldr r3, [r3, #0]
  36133. 800fa6e: f422 6280 bic.w r2, r2, #1024 @ 0x400
  36134. 800fa72: 619a str r2, [r3, #24]
  36135. htim->Instance->CCMR1 |= sConfig->OCFastMode << 8U;
  36136. 800fa74: 68fb ldr r3, [r7, #12]
  36137. 800fa76: 681b ldr r3, [r3, #0]
  36138. 800fa78: 6999 ldr r1, [r3, #24]
  36139. 800fa7a: 68bb ldr r3, [r7, #8]
  36140. 800fa7c: 691b ldr r3, [r3, #16]
  36141. 800fa7e: 021a lsls r2, r3, #8
  36142. 800fa80: 68fb ldr r3, [r7, #12]
  36143. 800fa82: 681b ldr r3, [r3, #0]
  36144. 800fa84: 430a orrs r2, r1
  36145. 800fa86: 619a str r2, [r3, #24]
  36146. break;
  36147. 800fa88: e084 b.n 800fb94 <HAL_TIM_PWM_ConfigChannel+0x214>
  36148. {
  36149. /* Check the parameters */
  36150. assert_param(IS_TIM_CC3_INSTANCE(htim->Instance));
  36151. /* Configure the Channel 3 in PWM mode */
  36152. TIM_OC3_SetConfig(htim->Instance, sConfig);
  36153. 800fa8a: 68fb ldr r3, [r7, #12]
  36154. 800fa8c: 681b ldr r3, [r3, #0]
  36155. 800fa8e: 68b9 ldr r1, [r7, #8]
  36156. 800fa90: 4618 mov r0, r3
  36157. 800fa92: f000 fba3 bl 80101dc <TIM_OC3_SetConfig>
  36158. /* Set the Preload enable bit for channel3 */
  36159. htim->Instance->CCMR2 |= TIM_CCMR2_OC3PE;
  36160. 800fa96: 68fb ldr r3, [r7, #12]
  36161. 800fa98: 681b ldr r3, [r3, #0]
  36162. 800fa9a: 69da ldr r2, [r3, #28]
  36163. 800fa9c: 68fb ldr r3, [r7, #12]
  36164. 800fa9e: 681b ldr r3, [r3, #0]
  36165. 800faa0: f042 0208 orr.w r2, r2, #8
  36166. 800faa4: 61da str r2, [r3, #28]
  36167. /* Configure the Output Fast mode */
  36168. htim->Instance->CCMR2 &= ~TIM_CCMR2_OC3FE;
  36169. 800faa6: 68fb ldr r3, [r7, #12]
  36170. 800faa8: 681b ldr r3, [r3, #0]
  36171. 800faaa: 69da ldr r2, [r3, #28]
  36172. 800faac: 68fb ldr r3, [r7, #12]
  36173. 800faae: 681b ldr r3, [r3, #0]
  36174. 800fab0: f022 0204 bic.w r2, r2, #4
  36175. 800fab4: 61da str r2, [r3, #28]
  36176. htim->Instance->CCMR2 |= sConfig->OCFastMode;
  36177. 800fab6: 68fb ldr r3, [r7, #12]
  36178. 800fab8: 681b ldr r3, [r3, #0]
  36179. 800faba: 69d9 ldr r1, [r3, #28]
  36180. 800fabc: 68bb ldr r3, [r7, #8]
  36181. 800fabe: 691a ldr r2, [r3, #16]
  36182. 800fac0: 68fb ldr r3, [r7, #12]
  36183. 800fac2: 681b ldr r3, [r3, #0]
  36184. 800fac4: 430a orrs r2, r1
  36185. 800fac6: 61da str r2, [r3, #28]
  36186. break;
  36187. 800fac8: e064 b.n 800fb94 <HAL_TIM_PWM_ConfigChannel+0x214>
  36188. {
  36189. /* Check the parameters */
  36190. assert_param(IS_TIM_CC4_INSTANCE(htim->Instance));
  36191. /* Configure the Channel 4 in PWM mode */
  36192. TIM_OC4_SetConfig(htim->Instance, sConfig);
  36193. 800faca: 68fb ldr r3, [r7, #12]
  36194. 800facc: 681b ldr r3, [r3, #0]
  36195. 800face: 68b9 ldr r1, [r7, #8]
  36196. 800fad0: 4618 mov r0, r3
  36197. 800fad2: f000 fc0b bl 80102ec <TIM_OC4_SetConfig>
  36198. /* Set the Preload enable bit for channel4 */
  36199. htim->Instance->CCMR2 |= TIM_CCMR2_OC4PE;
  36200. 800fad6: 68fb ldr r3, [r7, #12]
  36201. 800fad8: 681b ldr r3, [r3, #0]
  36202. 800fada: 69da ldr r2, [r3, #28]
  36203. 800fadc: 68fb ldr r3, [r7, #12]
  36204. 800fade: 681b ldr r3, [r3, #0]
  36205. 800fae0: f442 6200 orr.w r2, r2, #2048 @ 0x800
  36206. 800fae4: 61da str r2, [r3, #28]
  36207. /* Configure the Output Fast mode */
  36208. htim->Instance->CCMR2 &= ~TIM_CCMR2_OC4FE;
  36209. 800fae6: 68fb ldr r3, [r7, #12]
  36210. 800fae8: 681b ldr r3, [r3, #0]
  36211. 800faea: 69da ldr r2, [r3, #28]
  36212. 800faec: 68fb ldr r3, [r7, #12]
  36213. 800faee: 681b ldr r3, [r3, #0]
  36214. 800faf0: f422 6280 bic.w r2, r2, #1024 @ 0x400
  36215. 800faf4: 61da str r2, [r3, #28]
  36216. htim->Instance->CCMR2 |= sConfig->OCFastMode << 8U;
  36217. 800faf6: 68fb ldr r3, [r7, #12]
  36218. 800faf8: 681b ldr r3, [r3, #0]
  36219. 800fafa: 69d9 ldr r1, [r3, #28]
  36220. 800fafc: 68bb ldr r3, [r7, #8]
  36221. 800fafe: 691b ldr r3, [r3, #16]
  36222. 800fb00: 021a lsls r2, r3, #8
  36223. 800fb02: 68fb ldr r3, [r7, #12]
  36224. 800fb04: 681b ldr r3, [r3, #0]
  36225. 800fb06: 430a orrs r2, r1
  36226. 800fb08: 61da str r2, [r3, #28]
  36227. break;
  36228. 800fb0a: e043 b.n 800fb94 <HAL_TIM_PWM_ConfigChannel+0x214>
  36229. {
  36230. /* Check the parameters */
  36231. assert_param(IS_TIM_CC5_INSTANCE(htim->Instance));
  36232. /* Configure the Channel 5 in PWM mode */
  36233. TIM_OC5_SetConfig(htim->Instance, sConfig);
  36234. 800fb0c: 68fb ldr r3, [r7, #12]
  36235. 800fb0e: 681b ldr r3, [r3, #0]
  36236. 800fb10: 68b9 ldr r1, [r7, #8]
  36237. 800fb12: 4618 mov r0, r3
  36238. 800fb14: f000 fc54 bl 80103c0 <TIM_OC5_SetConfig>
  36239. /* Set the Preload enable bit for channel5*/
  36240. htim->Instance->CCMR3 |= TIM_CCMR3_OC5PE;
  36241. 800fb18: 68fb ldr r3, [r7, #12]
  36242. 800fb1a: 681b ldr r3, [r3, #0]
  36243. 800fb1c: 6d5a ldr r2, [r3, #84] @ 0x54
  36244. 800fb1e: 68fb ldr r3, [r7, #12]
  36245. 800fb20: 681b ldr r3, [r3, #0]
  36246. 800fb22: f042 0208 orr.w r2, r2, #8
  36247. 800fb26: 655a str r2, [r3, #84] @ 0x54
  36248. /* Configure the Output Fast mode */
  36249. htim->Instance->CCMR3 &= ~TIM_CCMR3_OC5FE;
  36250. 800fb28: 68fb ldr r3, [r7, #12]
  36251. 800fb2a: 681b ldr r3, [r3, #0]
  36252. 800fb2c: 6d5a ldr r2, [r3, #84] @ 0x54
  36253. 800fb2e: 68fb ldr r3, [r7, #12]
  36254. 800fb30: 681b ldr r3, [r3, #0]
  36255. 800fb32: f022 0204 bic.w r2, r2, #4
  36256. 800fb36: 655a str r2, [r3, #84] @ 0x54
  36257. htim->Instance->CCMR3 |= sConfig->OCFastMode;
  36258. 800fb38: 68fb ldr r3, [r7, #12]
  36259. 800fb3a: 681b ldr r3, [r3, #0]
  36260. 800fb3c: 6d59 ldr r1, [r3, #84] @ 0x54
  36261. 800fb3e: 68bb ldr r3, [r7, #8]
  36262. 800fb40: 691a ldr r2, [r3, #16]
  36263. 800fb42: 68fb ldr r3, [r7, #12]
  36264. 800fb44: 681b ldr r3, [r3, #0]
  36265. 800fb46: 430a orrs r2, r1
  36266. 800fb48: 655a str r2, [r3, #84] @ 0x54
  36267. break;
  36268. 800fb4a: e023 b.n 800fb94 <HAL_TIM_PWM_ConfigChannel+0x214>
  36269. {
  36270. /* Check the parameters */
  36271. assert_param(IS_TIM_CC6_INSTANCE(htim->Instance));
  36272. /* Configure the Channel 6 in PWM mode */
  36273. TIM_OC6_SetConfig(htim->Instance, sConfig);
  36274. 800fb4c: 68fb ldr r3, [r7, #12]
  36275. 800fb4e: 681b ldr r3, [r3, #0]
  36276. 800fb50: 68b9 ldr r1, [r7, #8]
  36277. 800fb52: 4618 mov r0, r3
  36278. 800fb54: f000 fc98 bl 8010488 <TIM_OC6_SetConfig>
  36279. /* Set the Preload enable bit for channel6 */
  36280. htim->Instance->CCMR3 |= TIM_CCMR3_OC6PE;
  36281. 800fb58: 68fb ldr r3, [r7, #12]
  36282. 800fb5a: 681b ldr r3, [r3, #0]
  36283. 800fb5c: 6d5a ldr r2, [r3, #84] @ 0x54
  36284. 800fb5e: 68fb ldr r3, [r7, #12]
  36285. 800fb60: 681b ldr r3, [r3, #0]
  36286. 800fb62: f442 6200 orr.w r2, r2, #2048 @ 0x800
  36287. 800fb66: 655a str r2, [r3, #84] @ 0x54
  36288. /* Configure the Output Fast mode */
  36289. htim->Instance->CCMR3 &= ~TIM_CCMR3_OC6FE;
  36290. 800fb68: 68fb ldr r3, [r7, #12]
  36291. 800fb6a: 681b ldr r3, [r3, #0]
  36292. 800fb6c: 6d5a ldr r2, [r3, #84] @ 0x54
  36293. 800fb6e: 68fb ldr r3, [r7, #12]
  36294. 800fb70: 681b ldr r3, [r3, #0]
  36295. 800fb72: f422 6280 bic.w r2, r2, #1024 @ 0x400
  36296. 800fb76: 655a str r2, [r3, #84] @ 0x54
  36297. htim->Instance->CCMR3 |= sConfig->OCFastMode << 8U;
  36298. 800fb78: 68fb ldr r3, [r7, #12]
  36299. 800fb7a: 681b ldr r3, [r3, #0]
  36300. 800fb7c: 6d59 ldr r1, [r3, #84] @ 0x54
  36301. 800fb7e: 68bb ldr r3, [r7, #8]
  36302. 800fb80: 691b ldr r3, [r3, #16]
  36303. 800fb82: 021a lsls r2, r3, #8
  36304. 800fb84: 68fb ldr r3, [r7, #12]
  36305. 800fb86: 681b ldr r3, [r3, #0]
  36306. 800fb88: 430a orrs r2, r1
  36307. 800fb8a: 655a str r2, [r3, #84] @ 0x54
  36308. break;
  36309. 800fb8c: e002 b.n 800fb94 <HAL_TIM_PWM_ConfigChannel+0x214>
  36310. }
  36311. default:
  36312. status = HAL_ERROR;
  36313. 800fb8e: 2301 movs r3, #1
  36314. 800fb90: 75fb strb r3, [r7, #23]
  36315. break;
  36316. 800fb92: bf00 nop
  36317. }
  36318. __HAL_UNLOCK(htim);
  36319. 800fb94: 68fb ldr r3, [r7, #12]
  36320. 800fb96: 2200 movs r2, #0
  36321. 800fb98: f883 203c strb.w r2, [r3, #60] @ 0x3c
  36322. return status;
  36323. 800fb9c: 7dfb ldrb r3, [r7, #23]
  36324. }
  36325. 800fb9e: 4618 mov r0, r3
  36326. 800fba0: 3718 adds r7, #24
  36327. 800fba2: 46bd mov sp, r7
  36328. 800fba4: bd80 pop {r7, pc}
  36329. 800fba6: bf00 nop
  36330. 0800fba8 <HAL_TIM_ConfigClockSource>:
  36331. * @param sClockSourceConfig pointer to a TIM_ClockConfigTypeDef structure that
  36332. * contains the clock source information for the TIM peripheral.
  36333. * @retval HAL status
  36334. */
  36335. HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, const TIM_ClockConfigTypeDef *sClockSourceConfig)
  36336. {
  36337. 800fba8: b580 push {r7, lr}
  36338. 800fbaa: b084 sub sp, #16
  36339. 800fbac: af00 add r7, sp, #0
  36340. 800fbae: 6078 str r0, [r7, #4]
  36341. 800fbb0: 6039 str r1, [r7, #0]
  36342. HAL_StatusTypeDef status = HAL_OK;
  36343. 800fbb2: 2300 movs r3, #0
  36344. 800fbb4: 73fb strb r3, [r7, #15]
  36345. uint32_t tmpsmcr;
  36346. /* Process Locked */
  36347. __HAL_LOCK(htim);
  36348. 800fbb6: 687b ldr r3, [r7, #4]
  36349. 800fbb8: f893 303c ldrb.w r3, [r3, #60] @ 0x3c
  36350. 800fbbc: 2b01 cmp r3, #1
  36351. 800fbbe: d101 bne.n 800fbc4 <HAL_TIM_ConfigClockSource+0x1c>
  36352. 800fbc0: 2302 movs r3, #2
  36353. 800fbc2: e0dc b.n 800fd7e <HAL_TIM_ConfigClockSource+0x1d6>
  36354. 800fbc4: 687b ldr r3, [r7, #4]
  36355. 800fbc6: 2201 movs r2, #1
  36356. 800fbc8: f883 203c strb.w r2, [r3, #60] @ 0x3c
  36357. htim->State = HAL_TIM_STATE_BUSY;
  36358. 800fbcc: 687b ldr r3, [r7, #4]
  36359. 800fbce: 2202 movs r2, #2
  36360. 800fbd0: f883 203d strb.w r2, [r3, #61] @ 0x3d
  36361. /* Check the parameters */
  36362. assert_param(IS_TIM_CLOCKSOURCE(sClockSourceConfig->ClockSource));
  36363. /* Reset the SMS, TS, ECE, ETPS and ETRF bits */
  36364. tmpsmcr = htim->Instance->SMCR;
  36365. 800fbd4: 687b ldr r3, [r7, #4]
  36366. 800fbd6: 681b ldr r3, [r3, #0]
  36367. 800fbd8: 689b ldr r3, [r3, #8]
  36368. 800fbda: 60bb str r3, [r7, #8]
  36369. tmpsmcr &= ~(TIM_SMCR_SMS | TIM_SMCR_TS);
  36370. 800fbdc: 68ba ldr r2, [r7, #8]
  36371. 800fbde: 4b6a ldr r3, [pc, #424] @ (800fd88 <HAL_TIM_ConfigClockSource+0x1e0>)
  36372. 800fbe0: 4013 ands r3, r2
  36373. 800fbe2: 60bb str r3, [r7, #8]
  36374. tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP);
  36375. 800fbe4: 68bb ldr r3, [r7, #8]
  36376. 800fbe6: f423 437f bic.w r3, r3, #65280 @ 0xff00
  36377. 800fbea: 60bb str r3, [r7, #8]
  36378. htim->Instance->SMCR = tmpsmcr;
  36379. 800fbec: 687b ldr r3, [r7, #4]
  36380. 800fbee: 681b ldr r3, [r3, #0]
  36381. 800fbf0: 68ba ldr r2, [r7, #8]
  36382. 800fbf2: 609a str r2, [r3, #8]
  36383. switch (sClockSourceConfig->ClockSource)
  36384. 800fbf4: 683b ldr r3, [r7, #0]
  36385. 800fbf6: 681b ldr r3, [r3, #0]
  36386. 800fbf8: 4a64 ldr r2, [pc, #400] @ (800fd8c <HAL_TIM_ConfigClockSource+0x1e4>)
  36387. 800fbfa: 4293 cmp r3, r2
  36388. 800fbfc: f000 80a9 beq.w 800fd52 <HAL_TIM_ConfigClockSource+0x1aa>
  36389. 800fc00: 4a62 ldr r2, [pc, #392] @ (800fd8c <HAL_TIM_ConfigClockSource+0x1e4>)
  36390. 800fc02: 4293 cmp r3, r2
  36391. 800fc04: f200 80ae bhi.w 800fd64 <HAL_TIM_ConfigClockSource+0x1bc>
  36392. 800fc08: 4a61 ldr r2, [pc, #388] @ (800fd90 <HAL_TIM_ConfigClockSource+0x1e8>)
  36393. 800fc0a: 4293 cmp r3, r2
  36394. 800fc0c: f000 80a1 beq.w 800fd52 <HAL_TIM_ConfigClockSource+0x1aa>
  36395. 800fc10: 4a5f ldr r2, [pc, #380] @ (800fd90 <HAL_TIM_ConfigClockSource+0x1e8>)
  36396. 800fc12: 4293 cmp r3, r2
  36397. 800fc14: f200 80a6 bhi.w 800fd64 <HAL_TIM_ConfigClockSource+0x1bc>
  36398. 800fc18: 4a5e ldr r2, [pc, #376] @ (800fd94 <HAL_TIM_ConfigClockSource+0x1ec>)
  36399. 800fc1a: 4293 cmp r3, r2
  36400. 800fc1c: f000 8099 beq.w 800fd52 <HAL_TIM_ConfigClockSource+0x1aa>
  36401. 800fc20: 4a5c ldr r2, [pc, #368] @ (800fd94 <HAL_TIM_ConfigClockSource+0x1ec>)
  36402. 800fc22: 4293 cmp r3, r2
  36403. 800fc24: f200 809e bhi.w 800fd64 <HAL_TIM_ConfigClockSource+0x1bc>
  36404. 800fc28: f1b3 1f10 cmp.w r3, #1048592 @ 0x100010
  36405. 800fc2c: f000 8091 beq.w 800fd52 <HAL_TIM_ConfigClockSource+0x1aa>
  36406. 800fc30: f1b3 1f10 cmp.w r3, #1048592 @ 0x100010
  36407. 800fc34: f200 8096 bhi.w 800fd64 <HAL_TIM_ConfigClockSource+0x1bc>
  36408. 800fc38: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
  36409. 800fc3c: f000 8089 beq.w 800fd52 <HAL_TIM_ConfigClockSource+0x1aa>
  36410. 800fc40: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
  36411. 800fc44: f200 808e bhi.w 800fd64 <HAL_TIM_ConfigClockSource+0x1bc>
  36412. 800fc48: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  36413. 800fc4c: d03e beq.n 800fccc <HAL_TIM_ConfigClockSource+0x124>
  36414. 800fc4e: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  36415. 800fc52: f200 8087 bhi.w 800fd64 <HAL_TIM_ConfigClockSource+0x1bc>
  36416. 800fc56: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  36417. 800fc5a: f000 8086 beq.w 800fd6a <HAL_TIM_ConfigClockSource+0x1c2>
  36418. 800fc5e: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  36419. 800fc62: d87f bhi.n 800fd64 <HAL_TIM_ConfigClockSource+0x1bc>
  36420. 800fc64: 2b70 cmp r3, #112 @ 0x70
  36421. 800fc66: d01a beq.n 800fc9e <HAL_TIM_ConfigClockSource+0xf6>
  36422. 800fc68: 2b70 cmp r3, #112 @ 0x70
  36423. 800fc6a: d87b bhi.n 800fd64 <HAL_TIM_ConfigClockSource+0x1bc>
  36424. 800fc6c: 2b60 cmp r3, #96 @ 0x60
  36425. 800fc6e: d050 beq.n 800fd12 <HAL_TIM_ConfigClockSource+0x16a>
  36426. 800fc70: 2b60 cmp r3, #96 @ 0x60
  36427. 800fc72: d877 bhi.n 800fd64 <HAL_TIM_ConfigClockSource+0x1bc>
  36428. 800fc74: 2b50 cmp r3, #80 @ 0x50
  36429. 800fc76: d03c beq.n 800fcf2 <HAL_TIM_ConfigClockSource+0x14a>
  36430. 800fc78: 2b50 cmp r3, #80 @ 0x50
  36431. 800fc7a: d873 bhi.n 800fd64 <HAL_TIM_ConfigClockSource+0x1bc>
  36432. 800fc7c: 2b40 cmp r3, #64 @ 0x40
  36433. 800fc7e: d058 beq.n 800fd32 <HAL_TIM_ConfigClockSource+0x18a>
  36434. 800fc80: 2b40 cmp r3, #64 @ 0x40
  36435. 800fc82: d86f bhi.n 800fd64 <HAL_TIM_ConfigClockSource+0x1bc>
  36436. 800fc84: 2b30 cmp r3, #48 @ 0x30
  36437. 800fc86: d064 beq.n 800fd52 <HAL_TIM_ConfigClockSource+0x1aa>
  36438. 800fc88: 2b30 cmp r3, #48 @ 0x30
  36439. 800fc8a: d86b bhi.n 800fd64 <HAL_TIM_ConfigClockSource+0x1bc>
  36440. 800fc8c: 2b20 cmp r3, #32
  36441. 800fc8e: d060 beq.n 800fd52 <HAL_TIM_ConfigClockSource+0x1aa>
  36442. 800fc90: 2b20 cmp r3, #32
  36443. 800fc92: d867 bhi.n 800fd64 <HAL_TIM_ConfigClockSource+0x1bc>
  36444. 800fc94: 2b00 cmp r3, #0
  36445. 800fc96: d05c beq.n 800fd52 <HAL_TIM_ConfigClockSource+0x1aa>
  36446. 800fc98: 2b10 cmp r3, #16
  36447. 800fc9a: d05a beq.n 800fd52 <HAL_TIM_ConfigClockSource+0x1aa>
  36448. 800fc9c: e062 b.n 800fd64 <HAL_TIM_ConfigClockSource+0x1bc>
  36449. assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler));
  36450. assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));
  36451. assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));
  36452. /* Configure the ETR Clock source */
  36453. TIM_ETR_SetConfig(htim->Instance,
  36454. 800fc9e: 687b ldr r3, [r7, #4]
  36455. 800fca0: 6818 ldr r0, [r3, #0]
  36456. sClockSourceConfig->ClockPrescaler,
  36457. 800fca2: 683b ldr r3, [r7, #0]
  36458. 800fca4: 6899 ldr r1, [r3, #8]
  36459. sClockSourceConfig->ClockPolarity,
  36460. 800fca6: 683b ldr r3, [r7, #0]
  36461. 800fca8: 685a ldr r2, [r3, #4]
  36462. sClockSourceConfig->ClockFilter);
  36463. 800fcaa: 683b ldr r3, [r7, #0]
  36464. 800fcac: 68db ldr r3, [r3, #12]
  36465. TIM_ETR_SetConfig(htim->Instance,
  36466. 800fcae: f000 fccf bl 8010650 <TIM_ETR_SetConfig>
  36467. /* Select the External clock mode1 and the ETRF trigger */
  36468. tmpsmcr = htim->Instance->SMCR;
  36469. 800fcb2: 687b ldr r3, [r7, #4]
  36470. 800fcb4: 681b ldr r3, [r3, #0]
  36471. 800fcb6: 689b ldr r3, [r3, #8]
  36472. 800fcb8: 60bb str r3, [r7, #8]
  36473. tmpsmcr |= (TIM_SLAVEMODE_EXTERNAL1 | TIM_CLOCKSOURCE_ETRMODE1);
  36474. 800fcba: 68bb ldr r3, [r7, #8]
  36475. 800fcbc: f043 0377 orr.w r3, r3, #119 @ 0x77
  36476. 800fcc0: 60bb str r3, [r7, #8]
  36477. /* Write to TIMx SMCR */
  36478. htim->Instance->SMCR = tmpsmcr;
  36479. 800fcc2: 687b ldr r3, [r7, #4]
  36480. 800fcc4: 681b ldr r3, [r3, #0]
  36481. 800fcc6: 68ba ldr r2, [r7, #8]
  36482. 800fcc8: 609a str r2, [r3, #8]
  36483. break;
  36484. 800fcca: e04f b.n 800fd6c <HAL_TIM_ConfigClockSource+0x1c4>
  36485. assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler));
  36486. assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));
  36487. assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));
  36488. /* Configure the ETR Clock source */
  36489. TIM_ETR_SetConfig(htim->Instance,
  36490. 800fccc: 687b ldr r3, [r7, #4]
  36491. 800fcce: 6818 ldr r0, [r3, #0]
  36492. sClockSourceConfig->ClockPrescaler,
  36493. 800fcd0: 683b ldr r3, [r7, #0]
  36494. 800fcd2: 6899 ldr r1, [r3, #8]
  36495. sClockSourceConfig->ClockPolarity,
  36496. 800fcd4: 683b ldr r3, [r7, #0]
  36497. 800fcd6: 685a ldr r2, [r3, #4]
  36498. sClockSourceConfig->ClockFilter);
  36499. 800fcd8: 683b ldr r3, [r7, #0]
  36500. 800fcda: 68db ldr r3, [r3, #12]
  36501. TIM_ETR_SetConfig(htim->Instance,
  36502. 800fcdc: f000 fcb8 bl 8010650 <TIM_ETR_SetConfig>
  36503. /* Enable the External clock mode2 */
  36504. htim->Instance->SMCR |= TIM_SMCR_ECE;
  36505. 800fce0: 687b ldr r3, [r7, #4]
  36506. 800fce2: 681b ldr r3, [r3, #0]
  36507. 800fce4: 689a ldr r2, [r3, #8]
  36508. 800fce6: 687b ldr r3, [r7, #4]
  36509. 800fce8: 681b ldr r3, [r3, #0]
  36510. 800fcea: f442 4280 orr.w r2, r2, #16384 @ 0x4000
  36511. 800fcee: 609a str r2, [r3, #8]
  36512. break;
  36513. 800fcf0: e03c b.n 800fd6c <HAL_TIM_ConfigClockSource+0x1c4>
  36514. /* Check TI1 input conditioning related parameters */
  36515. assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));
  36516. assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));
  36517. TIM_TI1_ConfigInputStage(htim->Instance,
  36518. 800fcf2: 687b ldr r3, [r7, #4]
  36519. 800fcf4: 6818 ldr r0, [r3, #0]
  36520. sClockSourceConfig->ClockPolarity,
  36521. 800fcf6: 683b ldr r3, [r7, #0]
  36522. 800fcf8: 6859 ldr r1, [r3, #4]
  36523. sClockSourceConfig->ClockFilter);
  36524. 800fcfa: 683b ldr r3, [r7, #0]
  36525. 800fcfc: 68db ldr r3, [r3, #12]
  36526. TIM_TI1_ConfigInputStage(htim->Instance,
  36527. 800fcfe: 461a mov r2, r3
  36528. 800fd00: f000 fc28 bl 8010554 <TIM_TI1_ConfigInputStage>
  36529. TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI1);
  36530. 800fd04: 687b ldr r3, [r7, #4]
  36531. 800fd06: 681b ldr r3, [r3, #0]
  36532. 800fd08: 2150 movs r1, #80 @ 0x50
  36533. 800fd0a: 4618 mov r0, r3
  36534. 800fd0c: f000 fc82 bl 8010614 <TIM_ITRx_SetConfig>
  36535. break;
  36536. 800fd10: e02c b.n 800fd6c <HAL_TIM_ConfigClockSource+0x1c4>
  36537. /* Check TI2 input conditioning related parameters */
  36538. assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));
  36539. assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));
  36540. TIM_TI2_ConfigInputStage(htim->Instance,
  36541. 800fd12: 687b ldr r3, [r7, #4]
  36542. 800fd14: 6818 ldr r0, [r3, #0]
  36543. sClockSourceConfig->ClockPolarity,
  36544. 800fd16: 683b ldr r3, [r7, #0]
  36545. 800fd18: 6859 ldr r1, [r3, #4]
  36546. sClockSourceConfig->ClockFilter);
  36547. 800fd1a: 683b ldr r3, [r7, #0]
  36548. 800fd1c: 68db ldr r3, [r3, #12]
  36549. TIM_TI2_ConfigInputStage(htim->Instance,
  36550. 800fd1e: 461a mov r2, r3
  36551. 800fd20: f000 fc47 bl 80105b2 <TIM_TI2_ConfigInputStage>
  36552. TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI2);
  36553. 800fd24: 687b ldr r3, [r7, #4]
  36554. 800fd26: 681b ldr r3, [r3, #0]
  36555. 800fd28: 2160 movs r1, #96 @ 0x60
  36556. 800fd2a: 4618 mov r0, r3
  36557. 800fd2c: f000 fc72 bl 8010614 <TIM_ITRx_SetConfig>
  36558. break;
  36559. 800fd30: e01c b.n 800fd6c <HAL_TIM_ConfigClockSource+0x1c4>
  36560. /* Check TI1 input conditioning related parameters */
  36561. assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));
  36562. assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));
  36563. TIM_TI1_ConfigInputStage(htim->Instance,
  36564. 800fd32: 687b ldr r3, [r7, #4]
  36565. 800fd34: 6818 ldr r0, [r3, #0]
  36566. sClockSourceConfig->ClockPolarity,
  36567. 800fd36: 683b ldr r3, [r7, #0]
  36568. 800fd38: 6859 ldr r1, [r3, #4]
  36569. sClockSourceConfig->ClockFilter);
  36570. 800fd3a: 683b ldr r3, [r7, #0]
  36571. 800fd3c: 68db ldr r3, [r3, #12]
  36572. TIM_TI1_ConfigInputStage(htim->Instance,
  36573. 800fd3e: 461a mov r2, r3
  36574. 800fd40: f000 fc08 bl 8010554 <TIM_TI1_ConfigInputStage>
  36575. TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI1ED);
  36576. 800fd44: 687b ldr r3, [r7, #4]
  36577. 800fd46: 681b ldr r3, [r3, #0]
  36578. 800fd48: 2140 movs r1, #64 @ 0x40
  36579. 800fd4a: 4618 mov r0, r3
  36580. 800fd4c: f000 fc62 bl 8010614 <TIM_ITRx_SetConfig>
  36581. break;
  36582. 800fd50: e00c b.n 800fd6c <HAL_TIM_ConfigClockSource+0x1c4>
  36583. case TIM_CLOCKSOURCE_ITR8:
  36584. {
  36585. /* Check whether or not the timer instance supports internal trigger input */
  36586. assert_param(IS_TIM_CLOCKSOURCE_ITRX_INSTANCE(htim->Instance));
  36587. TIM_ITRx_SetConfig(htim->Instance, sClockSourceConfig->ClockSource);
  36588. 800fd52: 687b ldr r3, [r7, #4]
  36589. 800fd54: 681a ldr r2, [r3, #0]
  36590. 800fd56: 683b ldr r3, [r7, #0]
  36591. 800fd58: 681b ldr r3, [r3, #0]
  36592. 800fd5a: 4619 mov r1, r3
  36593. 800fd5c: 4610 mov r0, r2
  36594. 800fd5e: f000 fc59 bl 8010614 <TIM_ITRx_SetConfig>
  36595. break;
  36596. 800fd62: e003 b.n 800fd6c <HAL_TIM_ConfigClockSource+0x1c4>
  36597. }
  36598. default:
  36599. status = HAL_ERROR;
  36600. 800fd64: 2301 movs r3, #1
  36601. 800fd66: 73fb strb r3, [r7, #15]
  36602. break;
  36603. 800fd68: e000 b.n 800fd6c <HAL_TIM_ConfigClockSource+0x1c4>
  36604. break;
  36605. 800fd6a: bf00 nop
  36606. }
  36607. htim->State = HAL_TIM_STATE_READY;
  36608. 800fd6c: 687b ldr r3, [r7, #4]
  36609. 800fd6e: 2201 movs r2, #1
  36610. 800fd70: f883 203d strb.w r2, [r3, #61] @ 0x3d
  36611. __HAL_UNLOCK(htim);
  36612. 800fd74: 687b ldr r3, [r7, #4]
  36613. 800fd76: 2200 movs r2, #0
  36614. 800fd78: f883 203c strb.w r2, [r3, #60] @ 0x3c
  36615. return status;
  36616. 800fd7c: 7bfb ldrb r3, [r7, #15]
  36617. }
  36618. 800fd7e: 4618 mov r0, r3
  36619. 800fd80: 3710 adds r7, #16
  36620. 800fd82: 46bd mov sp, r7
  36621. 800fd84: bd80 pop {r7, pc}
  36622. 800fd86: bf00 nop
  36623. 800fd88: ffceff88 .word 0xffceff88
  36624. 800fd8c: 00100040 .word 0x00100040
  36625. 800fd90: 00100030 .word 0x00100030
  36626. 800fd94: 00100020 .word 0x00100020
  36627. 0800fd98 <HAL_TIM_OC_DelayElapsedCallback>:
  36628. * @brief Output Compare callback in non-blocking mode
  36629. * @param htim TIM OC handle
  36630. * @retval None
  36631. */
  36632. __weak void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)
  36633. {
  36634. 800fd98: b480 push {r7}
  36635. 800fd9a: b083 sub sp, #12
  36636. 800fd9c: af00 add r7, sp, #0
  36637. 800fd9e: 6078 str r0, [r7, #4]
  36638. UNUSED(htim);
  36639. /* NOTE : This function should not be modified, when the callback is needed,
  36640. the HAL_TIM_OC_DelayElapsedCallback could be implemented in the user file
  36641. */
  36642. }
  36643. 800fda0: bf00 nop
  36644. 800fda2: 370c adds r7, #12
  36645. 800fda4: 46bd mov sp, r7
  36646. 800fda6: f85d 7b04 ldr.w r7, [sp], #4
  36647. 800fdaa: 4770 bx lr
  36648. 0800fdac <HAL_TIM_IC_CaptureCallback>:
  36649. * @brief Input Capture callback in non-blocking mode
  36650. * @param htim TIM IC handle
  36651. * @retval None
  36652. */
  36653. __weak void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
  36654. {
  36655. 800fdac: b480 push {r7}
  36656. 800fdae: b083 sub sp, #12
  36657. 800fdb0: af00 add r7, sp, #0
  36658. 800fdb2: 6078 str r0, [r7, #4]
  36659. UNUSED(htim);
  36660. /* NOTE : This function should not be modified, when the callback is needed,
  36661. the HAL_TIM_IC_CaptureCallback could be implemented in the user file
  36662. */
  36663. }
  36664. 800fdb4: bf00 nop
  36665. 800fdb6: 370c adds r7, #12
  36666. 800fdb8: 46bd mov sp, r7
  36667. 800fdba: f85d 7b04 ldr.w r7, [sp], #4
  36668. 800fdbe: 4770 bx lr
  36669. 0800fdc0 <HAL_TIM_PWM_PulseFinishedCallback>:
  36670. * @brief PWM Pulse finished callback in non-blocking mode
  36671. * @param htim TIM handle
  36672. * @retval None
  36673. */
  36674. __weak void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
  36675. {
  36676. 800fdc0: b480 push {r7}
  36677. 800fdc2: b083 sub sp, #12
  36678. 800fdc4: af00 add r7, sp, #0
  36679. 800fdc6: 6078 str r0, [r7, #4]
  36680. UNUSED(htim);
  36681. /* NOTE : This function should not be modified, when the callback is needed,
  36682. the HAL_TIM_PWM_PulseFinishedCallback could be implemented in the user file
  36683. */
  36684. }
  36685. 800fdc8: bf00 nop
  36686. 800fdca: 370c adds r7, #12
  36687. 800fdcc: 46bd mov sp, r7
  36688. 800fdce: f85d 7b04 ldr.w r7, [sp], #4
  36689. 800fdd2: 4770 bx lr
  36690. 0800fdd4 <HAL_TIM_TriggerCallback>:
  36691. * @brief Hall Trigger detection callback in non-blocking mode
  36692. * @param htim TIM handle
  36693. * @retval None
  36694. */
  36695. __weak void HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim)
  36696. {
  36697. 800fdd4: b480 push {r7}
  36698. 800fdd6: b083 sub sp, #12
  36699. 800fdd8: af00 add r7, sp, #0
  36700. 800fdda: 6078 str r0, [r7, #4]
  36701. UNUSED(htim);
  36702. /* NOTE : This function should not be modified, when the callback is needed,
  36703. the HAL_TIM_TriggerCallback could be implemented in the user file
  36704. */
  36705. }
  36706. 800fddc: bf00 nop
  36707. 800fdde: 370c adds r7, #12
  36708. 800fde0: 46bd mov sp, r7
  36709. 800fde2: f85d 7b04 ldr.w r7, [sp], #4
  36710. 800fde6: 4770 bx lr
  36711. 0800fde8 <HAL_TIM_GetChannelState>:
  36712. * @arg TIM_CHANNEL_5: TIM Channel 5
  36713. * @arg TIM_CHANNEL_6: TIM Channel 6
  36714. * @retval TIM Channel state
  36715. */
  36716. HAL_TIM_ChannelStateTypeDef HAL_TIM_GetChannelState(const TIM_HandleTypeDef *htim, uint32_t Channel)
  36717. {
  36718. 800fde8: b480 push {r7}
  36719. 800fdea: b085 sub sp, #20
  36720. 800fdec: af00 add r7, sp, #0
  36721. 800fdee: 6078 str r0, [r7, #4]
  36722. 800fdf0: 6039 str r1, [r7, #0]
  36723. HAL_TIM_ChannelStateTypeDef channel_state;
  36724. /* Check the parameters */
  36725. assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
  36726. channel_state = TIM_CHANNEL_STATE_GET(htim, Channel);
  36727. 800fdf2: 683b ldr r3, [r7, #0]
  36728. 800fdf4: 2b00 cmp r3, #0
  36729. 800fdf6: d104 bne.n 800fe02 <HAL_TIM_GetChannelState+0x1a>
  36730. 800fdf8: 687b ldr r3, [r7, #4]
  36731. 800fdfa: f893 303e ldrb.w r3, [r3, #62] @ 0x3e
  36732. 800fdfe: b2db uxtb r3, r3
  36733. 800fe00: e023 b.n 800fe4a <HAL_TIM_GetChannelState+0x62>
  36734. 800fe02: 683b ldr r3, [r7, #0]
  36735. 800fe04: 2b04 cmp r3, #4
  36736. 800fe06: d104 bne.n 800fe12 <HAL_TIM_GetChannelState+0x2a>
  36737. 800fe08: 687b ldr r3, [r7, #4]
  36738. 800fe0a: f893 303f ldrb.w r3, [r3, #63] @ 0x3f
  36739. 800fe0e: b2db uxtb r3, r3
  36740. 800fe10: e01b b.n 800fe4a <HAL_TIM_GetChannelState+0x62>
  36741. 800fe12: 683b ldr r3, [r7, #0]
  36742. 800fe14: 2b08 cmp r3, #8
  36743. 800fe16: d104 bne.n 800fe22 <HAL_TIM_GetChannelState+0x3a>
  36744. 800fe18: 687b ldr r3, [r7, #4]
  36745. 800fe1a: f893 3040 ldrb.w r3, [r3, #64] @ 0x40
  36746. 800fe1e: b2db uxtb r3, r3
  36747. 800fe20: e013 b.n 800fe4a <HAL_TIM_GetChannelState+0x62>
  36748. 800fe22: 683b ldr r3, [r7, #0]
  36749. 800fe24: 2b0c cmp r3, #12
  36750. 800fe26: d104 bne.n 800fe32 <HAL_TIM_GetChannelState+0x4a>
  36751. 800fe28: 687b ldr r3, [r7, #4]
  36752. 800fe2a: f893 3041 ldrb.w r3, [r3, #65] @ 0x41
  36753. 800fe2e: b2db uxtb r3, r3
  36754. 800fe30: e00b b.n 800fe4a <HAL_TIM_GetChannelState+0x62>
  36755. 800fe32: 683b ldr r3, [r7, #0]
  36756. 800fe34: 2b10 cmp r3, #16
  36757. 800fe36: d104 bne.n 800fe42 <HAL_TIM_GetChannelState+0x5a>
  36758. 800fe38: 687b ldr r3, [r7, #4]
  36759. 800fe3a: f893 3042 ldrb.w r3, [r3, #66] @ 0x42
  36760. 800fe3e: b2db uxtb r3, r3
  36761. 800fe40: e003 b.n 800fe4a <HAL_TIM_GetChannelState+0x62>
  36762. 800fe42: 687b ldr r3, [r7, #4]
  36763. 800fe44: f893 3043 ldrb.w r3, [r3, #67] @ 0x43
  36764. 800fe48: b2db uxtb r3, r3
  36765. 800fe4a: 73fb strb r3, [r7, #15]
  36766. return channel_state;
  36767. 800fe4c: 7bfb ldrb r3, [r7, #15]
  36768. }
  36769. 800fe4e: 4618 mov r0, r3
  36770. 800fe50: 3714 adds r7, #20
  36771. 800fe52: 46bd mov sp, r7
  36772. 800fe54: f85d 7b04 ldr.w r7, [sp], #4
  36773. 800fe58: 4770 bx lr
  36774. ...
  36775. 0800fe5c <TIM_Base_SetConfig>:
  36776. * @param TIMx TIM peripheral
  36777. * @param Structure TIM Base configuration structure
  36778. * @retval None
  36779. */
  36780. void TIM_Base_SetConfig(TIM_TypeDef *TIMx, const TIM_Base_InitTypeDef *Structure)
  36781. {
  36782. 800fe5c: b480 push {r7}
  36783. 800fe5e: b085 sub sp, #20
  36784. 800fe60: af00 add r7, sp, #0
  36785. 800fe62: 6078 str r0, [r7, #4]
  36786. 800fe64: 6039 str r1, [r7, #0]
  36787. uint32_t tmpcr1;
  36788. tmpcr1 = TIMx->CR1;
  36789. 800fe66: 687b ldr r3, [r7, #4]
  36790. 800fe68: 681b ldr r3, [r3, #0]
  36791. 800fe6a: 60fb str r3, [r7, #12]
  36792. /* Set TIM Time Base Unit parameters ---------------------------------------*/
  36793. if (IS_TIM_COUNTER_MODE_SELECT_INSTANCE(TIMx))
  36794. 800fe6c: 687b ldr r3, [r7, #4]
  36795. 800fe6e: 4a46 ldr r2, [pc, #280] @ (800ff88 <TIM_Base_SetConfig+0x12c>)
  36796. 800fe70: 4293 cmp r3, r2
  36797. 800fe72: d013 beq.n 800fe9c <TIM_Base_SetConfig+0x40>
  36798. 800fe74: 687b ldr r3, [r7, #4]
  36799. 800fe76: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  36800. 800fe7a: d00f beq.n 800fe9c <TIM_Base_SetConfig+0x40>
  36801. 800fe7c: 687b ldr r3, [r7, #4]
  36802. 800fe7e: 4a43 ldr r2, [pc, #268] @ (800ff8c <TIM_Base_SetConfig+0x130>)
  36803. 800fe80: 4293 cmp r3, r2
  36804. 800fe82: d00b beq.n 800fe9c <TIM_Base_SetConfig+0x40>
  36805. 800fe84: 687b ldr r3, [r7, #4]
  36806. 800fe86: 4a42 ldr r2, [pc, #264] @ (800ff90 <TIM_Base_SetConfig+0x134>)
  36807. 800fe88: 4293 cmp r3, r2
  36808. 800fe8a: d007 beq.n 800fe9c <TIM_Base_SetConfig+0x40>
  36809. 800fe8c: 687b ldr r3, [r7, #4]
  36810. 800fe8e: 4a41 ldr r2, [pc, #260] @ (800ff94 <TIM_Base_SetConfig+0x138>)
  36811. 800fe90: 4293 cmp r3, r2
  36812. 800fe92: d003 beq.n 800fe9c <TIM_Base_SetConfig+0x40>
  36813. 800fe94: 687b ldr r3, [r7, #4]
  36814. 800fe96: 4a40 ldr r2, [pc, #256] @ (800ff98 <TIM_Base_SetConfig+0x13c>)
  36815. 800fe98: 4293 cmp r3, r2
  36816. 800fe9a: d108 bne.n 800feae <TIM_Base_SetConfig+0x52>
  36817. {
  36818. /* Select the Counter Mode */
  36819. tmpcr1 &= ~(TIM_CR1_DIR | TIM_CR1_CMS);
  36820. 800fe9c: 68fb ldr r3, [r7, #12]
  36821. 800fe9e: f023 0370 bic.w r3, r3, #112 @ 0x70
  36822. 800fea2: 60fb str r3, [r7, #12]
  36823. tmpcr1 |= Structure->CounterMode;
  36824. 800fea4: 683b ldr r3, [r7, #0]
  36825. 800fea6: 685b ldr r3, [r3, #4]
  36826. 800fea8: 68fa ldr r2, [r7, #12]
  36827. 800feaa: 4313 orrs r3, r2
  36828. 800feac: 60fb str r3, [r7, #12]
  36829. }
  36830. if (IS_TIM_CLOCK_DIVISION_INSTANCE(TIMx))
  36831. 800feae: 687b ldr r3, [r7, #4]
  36832. 800feb0: 4a35 ldr r2, [pc, #212] @ (800ff88 <TIM_Base_SetConfig+0x12c>)
  36833. 800feb2: 4293 cmp r3, r2
  36834. 800feb4: d01f beq.n 800fef6 <TIM_Base_SetConfig+0x9a>
  36835. 800feb6: 687b ldr r3, [r7, #4]
  36836. 800feb8: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  36837. 800febc: d01b beq.n 800fef6 <TIM_Base_SetConfig+0x9a>
  36838. 800febe: 687b ldr r3, [r7, #4]
  36839. 800fec0: 4a32 ldr r2, [pc, #200] @ (800ff8c <TIM_Base_SetConfig+0x130>)
  36840. 800fec2: 4293 cmp r3, r2
  36841. 800fec4: d017 beq.n 800fef6 <TIM_Base_SetConfig+0x9a>
  36842. 800fec6: 687b ldr r3, [r7, #4]
  36843. 800fec8: 4a31 ldr r2, [pc, #196] @ (800ff90 <TIM_Base_SetConfig+0x134>)
  36844. 800feca: 4293 cmp r3, r2
  36845. 800fecc: d013 beq.n 800fef6 <TIM_Base_SetConfig+0x9a>
  36846. 800fece: 687b ldr r3, [r7, #4]
  36847. 800fed0: 4a30 ldr r2, [pc, #192] @ (800ff94 <TIM_Base_SetConfig+0x138>)
  36848. 800fed2: 4293 cmp r3, r2
  36849. 800fed4: d00f beq.n 800fef6 <TIM_Base_SetConfig+0x9a>
  36850. 800fed6: 687b ldr r3, [r7, #4]
  36851. 800fed8: 4a2f ldr r2, [pc, #188] @ (800ff98 <TIM_Base_SetConfig+0x13c>)
  36852. 800feda: 4293 cmp r3, r2
  36853. 800fedc: d00b beq.n 800fef6 <TIM_Base_SetConfig+0x9a>
  36854. 800fede: 687b ldr r3, [r7, #4]
  36855. 800fee0: 4a2e ldr r2, [pc, #184] @ (800ff9c <TIM_Base_SetConfig+0x140>)
  36856. 800fee2: 4293 cmp r3, r2
  36857. 800fee4: d007 beq.n 800fef6 <TIM_Base_SetConfig+0x9a>
  36858. 800fee6: 687b ldr r3, [r7, #4]
  36859. 800fee8: 4a2d ldr r2, [pc, #180] @ (800ffa0 <TIM_Base_SetConfig+0x144>)
  36860. 800feea: 4293 cmp r3, r2
  36861. 800feec: d003 beq.n 800fef6 <TIM_Base_SetConfig+0x9a>
  36862. 800feee: 687b ldr r3, [r7, #4]
  36863. 800fef0: 4a2c ldr r2, [pc, #176] @ (800ffa4 <TIM_Base_SetConfig+0x148>)
  36864. 800fef2: 4293 cmp r3, r2
  36865. 800fef4: d108 bne.n 800ff08 <TIM_Base_SetConfig+0xac>
  36866. {
  36867. /* Set the clock division */
  36868. tmpcr1 &= ~TIM_CR1_CKD;
  36869. 800fef6: 68fb ldr r3, [r7, #12]
  36870. 800fef8: f423 7340 bic.w r3, r3, #768 @ 0x300
  36871. 800fefc: 60fb str r3, [r7, #12]
  36872. tmpcr1 |= (uint32_t)Structure->ClockDivision;
  36873. 800fefe: 683b ldr r3, [r7, #0]
  36874. 800ff00: 68db ldr r3, [r3, #12]
  36875. 800ff02: 68fa ldr r2, [r7, #12]
  36876. 800ff04: 4313 orrs r3, r2
  36877. 800ff06: 60fb str r3, [r7, #12]
  36878. }
  36879. /* Set the auto-reload preload */
  36880. MODIFY_REG(tmpcr1, TIM_CR1_ARPE, Structure->AutoReloadPreload);
  36881. 800ff08: 68fb ldr r3, [r7, #12]
  36882. 800ff0a: f023 0280 bic.w r2, r3, #128 @ 0x80
  36883. 800ff0e: 683b ldr r3, [r7, #0]
  36884. 800ff10: 695b ldr r3, [r3, #20]
  36885. 800ff12: 4313 orrs r3, r2
  36886. 800ff14: 60fb str r3, [r7, #12]
  36887. TIMx->CR1 = tmpcr1;
  36888. 800ff16: 687b ldr r3, [r7, #4]
  36889. 800ff18: 68fa ldr r2, [r7, #12]
  36890. 800ff1a: 601a str r2, [r3, #0]
  36891. /* Set the Autoreload value */
  36892. TIMx->ARR = (uint32_t)Structure->Period ;
  36893. 800ff1c: 683b ldr r3, [r7, #0]
  36894. 800ff1e: 689a ldr r2, [r3, #8]
  36895. 800ff20: 687b ldr r3, [r7, #4]
  36896. 800ff22: 62da str r2, [r3, #44] @ 0x2c
  36897. /* Set the Prescaler value */
  36898. TIMx->PSC = Structure->Prescaler;
  36899. 800ff24: 683b ldr r3, [r7, #0]
  36900. 800ff26: 681a ldr r2, [r3, #0]
  36901. 800ff28: 687b ldr r3, [r7, #4]
  36902. 800ff2a: 629a str r2, [r3, #40] @ 0x28
  36903. if (IS_TIM_REPETITION_COUNTER_INSTANCE(TIMx))
  36904. 800ff2c: 687b ldr r3, [r7, #4]
  36905. 800ff2e: 4a16 ldr r2, [pc, #88] @ (800ff88 <TIM_Base_SetConfig+0x12c>)
  36906. 800ff30: 4293 cmp r3, r2
  36907. 800ff32: d00f beq.n 800ff54 <TIM_Base_SetConfig+0xf8>
  36908. 800ff34: 687b ldr r3, [r7, #4]
  36909. 800ff36: 4a18 ldr r2, [pc, #96] @ (800ff98 <TIM_Base_SetConfig+0x13c>)
  36910. 800ff38: 4293 cmp r3, r2
  36911. 800ff3a: d00b beq.n 800ff54 <TIM_Base_SetConfig+0xf8>
  36912. 800ff3c: 687b ldr r3, [r7, #4]
  36913. 800ff3e: 4a17 ldr r2, [pc, #92] @ (800ff9c <TIM_Base_SetConfig+0x140>)
  36914. 800ff40: 4293 cmp r3, r2
  36915. 800ff42: d007 beq.n 800ff54 <TIM_Base_SetConfig+0xf8>
  36916. 800ff44: 687b ldr r3, [r7, #4]
  36917. 800ff46: 4a16 ldr r2, [pc, #88] @ (800ffa0 <TIM_Base_SetConfig+0x144>)
  36918. 800ff48: 4293 cmp r3, r2
  36919. 800ff4a: d003 beq.n 800ff54 <TIM_Base_SetConfig+0xf8>
  36920. 800ff4c: 687b ldr r3, [r7, #4]
  36921. 800ff4e: 4a15 ldr r2, [pc, #84] @ (800ffa4 <TIM_Base_SetConfig+0x148>)
  36922. 800ff50: 4293 cmp r3, r2
  36923. 800ff52: d103 bne.n 800ff5c <TIM_Base_SetConfig+0x100>
  36924. {
  36925. /* Set the Repetition Counter value */
  36926. TIMx->RCR = Structure->RepetitionCounter;
  36927. 800ff54: 683b ldr r3, [r7, #0]
  36928. 800ff56: 691a ldr r2, [r3, #16]
  36929. 800ff58: 687b ldr r3, [r7, #4]
  36930. 800ff5a: 631a str r2, [r3, #48] @ 0x30
  36931. }
  36932. /* Generate an update event to reload the Prescaler
  36933. and the repetition counter (only for advanced timer) value immediately */
  36934. TIMx->EGR = TIM_EGR_UG;
  36935. 800ff5c: 687b ldr r3, [r7, #4]
  36936. 800ff5e: 2201 movs r2, #1
  36937. 800ff60: 615a str r2, [r3, #20]
  36938. /* Check if the update flag is set after the Update Generation, if so clear the UIF flag */
  36939. if (HAL_IS_BIT_SET(TIMx->SR, TIM_FLAG_UPDATE))
  36940. 800ff62: 687b ldr r3, [r7, #4]
  36941. 800ff64: 691b ldr r3, [r3, #16]
  36942. 800ff66: f003 0301 and.w r3, r3, #1
  36943. 800ff6a: 2b01 cmp r3, #1
  36944. 800ff6c: d105 bne.n 800ff7a <TIM_Base_SetConfig+0x11e>
  36945. {
  36946. /* Clear the update flag */
  36947. CLEAR_BIT(TIMx->SR, TIM_FLAG_UPDATE);
  36948. 800ff6e: 687b ldr r3, [r7, #4]
  36949. 800ff70: 691b ldr r3, [r3, #16]
  36950. 800ff72: f023 0201 bic.w r2, r3, #1
  36951. 800ff76: 687b ldr r3, [r7, #4]
  36952. 800ff78: 611a str r2, [r3, #16]
  36953. }
  36954. }
  36955. 800ff7a: bf00 nop
  36956. 800ff7c: 3714 adds r7, #20
  36957. 800ff7e: 46bd mov sp, r7
  36958. 800ff80: f85d 7b04 ldr.w r7, [sp], #4
  36959. 800ff84: 4770 bx lr
  36960. 800ff86: bf00 nop
  36961. 800ff88: 40010000 .word 0x40010000
  36962. 800ff8c: 40000400 .word 0x40000400
  36963. 800ff90: 40000800 .word 0x40000800
  36964. 800ff94: 40000c00 .word 0x40000c00
  36965. 800ff98: 40010400 .word 0x40010400
  36966. 800ff9c: 40014000 .word 0x40014000
  36967. 800ffa0: 40014400 .word 0x40014400
  36968. 800ffa4: 40014800 .word 0x40014800
  36969. 0800ffa8 <TIM_OC1_SetConfig>:
  36970. * @param TIMx to select the TIM peripheral
  36971. * @param OC_Config The output configuration structure
  36972. * @retval None
  36973. */
  36974. static void TIM_OC1_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config)
  36975. {
  36976. 800ffa8: b480 push {r7}
  36977. 800ffaa: b087 sub sp, #28
  36978. 800ffac: af00 add r7, sp, #0
  36979. 800ffae: 6078 str r0, [r7, #4]
  36980. 800ffb0: 6039 str r1, [r7, #0]
  36981. uint32_t tmpccmrx;
  36982. uint32_t tmpccer;
  36983. uint32_t tmpcr2;
  36984. /* Get the TIMx CCER register value */
  36985. tmpccer = TIMx->CCER;
  36986. 800ffb2: 687b ldr r3, [r7, #4]
  36987. 800ffb4: 6a1b ldr r3, [r3, #32]
  36988. 800ffb6: 617b str r3, [r7, #20]
  36989. /* Disable the Channel 1: Reset the CC1E Bit */
  36990. TIMx->CCER &= ~TIM_CCER_CC1E;
  36991. 800ffb8: 687b ldr r3, [r7, #4]
  36992. 800ffba: 6a1b ldr r3, [r3, #32]
  36993. 800ffbc: f023 0201 bic.w r2, r3, #1
  36994. 800ffc0: 687b ldr r3, [r7, #4]
  36995. 800ffc2: 621a str r2, [r3, #32]
  36996. /* Get the TIMx CR2 register value */
  36997. tmpcr2 = TIMx->CR2;
  36998. 800ffc4: 687b ldr r3, [r7, #4]
  36999. 800ffc6: 685b ldr r3, [r3, #4]
  37000. 800ffc8: 613b str r3, [r7, #16]
  37001. /* Get the TIMx CCMR1 register value */
  37002. tmpccmrx = TIMx->CCMR1;
  37003. 800ffca: 687b ldr r3, [r7, #4]
  37004. 800ffcc: 699b ldr r3, [r3, #24]
  37005. 800ffce: 60fb str r3, [r7, #12]
  37006. /* Reset the Output Compare Mode Bits */
  37007. tmpccmrx &= ~TIM_CCMR1_OC1M;
  37008. 800ffd0: 68fa ldr r2, [r7, #12]
  37009. 800ffd2: 4b37 ldr r3, [pc, #220] @ (80100b0 <TIM_OC1_SetConfig+0x108>)
  37010. 800ffd4: 4013 ands r3, r2
  37011. 800ffd6: 60fb str r3, [r7, #12]
  37012. tmpccmrx &= ~TIM_CCMR1_CC1S;
  37013. 800ffd8: 68fb ldr r3, [r7, #12]
  37014. 800ffda: f023 0303 bic.w r3, r3, #3
  37015. 800ffde: 60fb str r3, [r7, #12]
  37016. /* Select the Output Compare Mode */
  37017. tmpccmrx |= OC_Config->OCMode;
  37018. 800ffe0: 683b ldr r3, [r7, #0]
  37019. 800ffe2: 681b ldr r3, [r3, #0]
  37020. 800ffe4: 68fa ldr r2, [r7, #12]
  37021. 800ffe6: 4313 orrs r3, r2
  37022. 800ffe8: 60fb str r3, [r7, #12]
  37023. /* Reset the Output Polarity level */
  37024. tmpccer &= ~TIM_CCER_CC1P;
  37025. 800ffea: 697b ldr r3, [r7, #20]
  37026. 800ffec: f023 0302 bic.w r3, r3, #2
  37027. 800fff0: 617b str r3, [r7, #20]
  37028. /* Set the Output Compare Polarity */
  37029. tmpccer |= OC_Config->OCPolarity;
  37030. 800fff2: 683b ldr r3, [r7, #0]
  37031. 800fff4: 689b ldr r3, [r3, #8]
  37032. 800fff6: 697a ldr r2, [r7, #20]
  37033. 800fff8: 4313 orrs r3, r2
  37034. 800fffa: 617b str r3, [r7, #20]
  37035. if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_1))
  37036. 800fffc: 687b ldr r3, [r7, #4]
  37037. 800fffe: 4a2d ldr r2, [pc, #180] @ (80100b4 <TIM_OC1_SetConfig+0x10c>)
  37038. 8010000: 4293 cmp r3, r2
  37039. 8010002: d00f beq.n 8010024 <TIM_OC1_SetConfig+0x7c>
  37040. 8010004: 687b ldr r3, [r7, #4]
  37041. 8010006: 4a2c ldr r2, [pc, #176] @ (80100b8 <TIM_OC1_SetConfig+0x110>)
  37042. 8010008: 4293 cmp r3, r2
  37043. 801000a: d00b beq.n 8010024 <TIM_OC1_SetConfig+0x7c>
  37044. 801000c: 687b ldr r3, [r7, #4]
  37045. 801000e: 4a2b ldr r2, [pc, #172] @ (80100bc <TIM_OC1_SetConfig+0x114>)
  37046. 8010010: 4293 cmp r3, r2
  37047. 8010012: d007 beq.n 8010024 <TIM_OC1_SetConfig+0x7c>
  37048. 8010014: 687b ldr r3, [r7, #4]
  37049. 8010016: 4a2a ldr r2, [pc, #168] @ (80100c0 <TIM_OC1_SetConfig+0x118>)
  37050. 8010018: 4293 cmp r3, r2
  37051. 801001a: d003 beq.n 8010024 <TIM_OC1_SetConfig+0x7c>
  37052. 801001c: 687b ldr r3, [r7, #4]
  37053. 801001e: 4a29 ldr r2, [pc, #164] @ (80100c4 <TIM_OC1_SetConfig+0x11c>)
  37054. 8010020: 4293 cmp r3, r2
  37055. 8010022: d10c bne.n 801003e <TIM_OC1_SetConfig+0x96>
  37056. {
  37057. /* Check parameters */
  37058. assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity));
  37059. /* Reset the Output N Polarity level */
  37060. tmpccer &= ~TIM_CCER_CC1NP;
  37061. 8010024: 697b ldr r3, [r7, #20]
  37062. 8010026: f023 0308 bic.w r3, r3, #8
  37063. 801002a: 617b str r3, [r7, #20]
  37064. /* Set the Output N Polarity */
  37065. tmpccer |= OC_Config->OCNPolarity;
  37066. 801002c: 683b ldr r3, [r7, #0]
  37067. 801002e: 68db ldr r3, [r3, #12]
  37068. 8010030: 697a ldr r2, [r7, #20]
  37069. 8010032: 4313 orrs r3, r2
  37070. 8010034: 617b str r3, [r7, #20]
  37071. /* Reset the Output N State */
  37072. tmpccer &= ~TIM_CCER_CC1NE;
  37073. 8010036: 697b ldr r3, [r7, #20]
  37074. 8010038: f023 0304 bic.w r3, r3, #4
  37075. 801003c: 617b str r3, [r7, #20]
  37076. }
  37077. if (IS_TIM_BREAK_INSTANCE(TIMx))
  37078. 801003e: 687b ldr r3, [r7, #4]
  37079. 8010040: 4a1c ldr r2, [pc, #112] @ (80100b4 <TIM_OC1_SetConfig+0x10c>)
  37080. 8010042: 4293 cmp r3, r2
  37081. 8010044: d00f beq.n 8010066 <TIM_OC1_SetConfig+0xbe>
  37082. 8010046: 687b ldr r3, [r7, #4]
  37083. 8010048: 4a1b ldr r2, [pc, #108] @ (80100b8 <TIM_OC1_SetConfig+0x110>)
  37084. 801004a: 4293 cmp r3, r2
  37085. 801004c: d00b beq.n 8010066 <TIM_OC1_SetConfig+0xbe>
  37086. 801004e: 687b ldr r3, [r7, #4]
  37087. 8010050: 4a1a ldr r2, [pc, #104] @ (80100bc <TIM_OC1_SetConfig+0x114>)
  37088. 8010052: 4293 cmp r3, r2
  37089. 8010054: d007 beq.n 8010066 <TIM_OC1_SetConfig+0xbe>
  37090. 8010056: 687b ldr r3, [r7, #4]
  37091. 8010058: 4a19 ldr r2, [pc, #100] @ (80100c0 <TIM_OC1_SetConfig+0x118>)
  37092. 801005a: 4293 cmp r3, r2
  37093. 801005c: d003 beq.n 8010066 <TIM_OC1_SetConfig+0xbe>
  37094. 801005e: 687b ldr r3, [r7, #4]
  37095. 8010060: 4a18 ldr r2, [pc, #96] @ (80100c4 <TIM_OC1_SetConfig+0x11c>)
  37096. 8010062: 4293 cmp r3, r2
  37097. 8010064: d111 bne.n 801008a <TIM_OC1_SetConfig+0xe2>
  37098. /* Check parameters */
  37099. assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState));
  37100. assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState));
  37101. /* Reset the Output Compare and Output Compare N IDLE State */
  37102. tmpcr2 &= ~TIM_CR2_OIS1;
  37103. 8010066: 693b ldr r3, [r7, #16]
  37104. 8010068: f423 7380 bic.w r3, r3, #256 @ 0x100
  37105. 801006c: 613b str r3, [r7, #16]
  37106. tmpcr2 &= ~TIM_CR2_OIS1N;
  37107. 801006e: 693b ldr r3, [r7, #16]
  37108. 8010070: f423 7300 bic.w r3, r3, #512 @ 0x200
  37109. 8010074: 613b str r3, [r7, #16]
  37110. /* Set the Output Idle state */
  37111. tmpcr2 |= OC_Config->OCIdleState;
  37112. 8010076: 683b ldr r3, [r7, #0]
  37113. 8010078: 695b ldr r3, [r3, #20]
  37114. 801007a: 693a ldr r2, [r7, #16]
  37115. 801007c: 4313 orrs r3, r2
  37116. 801007e: 613b str r3, [r7, #16]
  37117. /* Set the Output N Idle state */
  37118. tmpcr2 |= OC_Config->OCNIdleState;
  37119. 8010080: 683b ldr r3, [r7, #0]
  37120. 8010082: 699b ldr r3, [r3, #24]
  37121. 8010084: 693a ldr r2, [r7, #16]
  37122. 8010086: 4313 orrs r3, r2
  37123. 8010088: 613b str r3, [r7, #16]
  37124. }
  37125. /* Write to TIMx CR2 */
  37126. TIMx->CR2 = tmpcr2;
  37127. 801008a: 687b ldr r3, [r7, #4]
  37128. 801008c: 693a ldr r2, [r7, #16]
  37129. 801008e: 605a str r2, [r3, #4]
  37130. /* Write to TIMx CCMR1 */
  37131. TIMx->CCMR1 = tmpccmrx;
  37132. 8010090: 687b ldr r3, [r7, #4]
  37133. 8010092: 68fa ldr r2, [r7, #12]
  37134. 8010094: 619a str r2, [r3, #24]
  37135. /* Set the Capture Compare Register value */
  37136. TIMx->CCR1 = OC_Config->Pulse;
  37137. 8010096: 683b ldr r3, [r7, #0]
  37138. 8010098: 685a ldr r2, [r3, #4]
  37139. 801009a: 687b ldr r3, [r7, #4]
  37140. 801009c: 635a str r2, [r3, #52] @ 0x34
  37141. /* Write to TIMx CCER */
  37142. TIMx->CCER = tmpccer;
  37143. 801009e: 687b ldr r3, [r7, #4]
  37144. 80100a0: 697a ldr r2, [r7, #20]
  37145. 80100a2: 621a str r2, [r3, #32]
  37146. }
  37147. 80100a4: bf00 nop
  37148. 80100a6: 371c adds r7, #28
  37149. 80100a8: 46bd mov sp, r7
  37150. 80100aa: f85d 7b04 ldr.w r7, [sp], #4
  37151. 80100ae: 4770 bx lr
  37152. 80100b0: fffeff8f .word 0xfffeff8f
  37153. 80100b4: 40010000 .word 0x40010000
  37154. 80100b8: 40010400 .word 0x40010400
  37155. 80100bc: 40014000 .word 0x40014000
  37156. 80100c0: 40014400 .word 0x40014400
  37157. 80100c4: 40014800 .word 0x40014800
  37158. 080100c8 <TIM_OC2_SetConfig>:
  37159. * @param TIMx to select the TIM peripheral
  37160. * @param OC_Config The output configuration structure
  37161. * @retval None
  37162. */
  37163. void TIM_OC2_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config)
  37164. {
  37165. 80100c8: b480 push {r7}
  37166. 80100ca: b087 sub sp, #28
  37167. 80100cc: af00 add r7, sp, #0
  37168. 80100ce: 6078 str r0, [r7, #4]
  37169. 80100d0: 6039 str r1, [r7, #0]
  37170. uint32_t tmpccmrx;
  37171. uint32_t tmpccer;
  37172. uint32_t tmpcr2;
  37173. /* Get the TIMx CCER register value */
  37174. tmpccer = TIMx->CCER;
  37175. 80100d2: 687b ldr r3, [r7, #4]
  37176. 80100d4: 6a1b ldr r3, [r3, #32]
  37177. 80100d6: 617b str r3, [r7, #20]
  37178. /* Disable the Channel 2: Reset the CC2E Bit */
  37179. TIMx->CCER &= ~TIM_CCER_CC2E;
  37180. 80100d8: 687b ldr r3, [r7, #4]
  37181. 80100da: 6a1b ldr r3, [r3, #32]
  37182. 80100dc: f023 0210 bic.w r2, r3, #16
  37183. 80100e0: 687b ldr r3, [r7, #4]
  37184. 80100e2: 621a str r2, [r3, #32]
  37185. /* Get the TIMx CR2 register value */
  37186. tmpcr2 = TIMx->CR2;
  37187. 80100e4: 687b ldr r3, [r7, #4]
  37188. 80100e6: 685b ldr r3, [r3, #4]
  37189. 80100e8: 613b str r3, [r7, #16]
  37190. /* Get the TIMx CCMR1 register value */
  37191. tmpccmrx = TIMx->CCMR1;
  37192. 80100ea: 687b ldr r3, [r7, #4]
  37193. 80100ec: 699b ldr r3, [r3, #24]
  37194. 80100ee: 60fb str r3, [r7, #12]
  37195. /* Reset the Output Compare mode and Capture/Compare selection Bits */
  37196. tmpccmrx &= ~TIM_CCMR1_OC2M;
  37197. 80100f0: 68fa ldr r2, [r7, #12]
  37198. 80100f2: 4b34 ldr r3, [pc, #208] @ (80101c4 <TIM_OC2_SetConfig+0xfc>)
  37199. 80100f4: 4013 ands r3, r2
  37200. 80100f6: 60fb str r3, [r7, #12]
  37201. tmpccmrx &= ~TIM_CCMR1_CC2S;
  37202. 80100f8: 68fb ldr r3, [r7, #12]
  37203. 80100fa: f423 7340 bic.w r3, r3, #768 @ 0x300
  37204. 80100fe: 60fb str r3, [r7, #12]
  37205. /* Select the Output Compare Mode */
  37206. tmpccmrx |= (OC_Config->OCMode << 8U);
  37207. 8010100: 683b ldr r3, [r7, #0]
  37208. 8010102: 681b ldr r3, [r3, #0]
  37209. 8010104: 021b lsls r3, r3, #8
  37210. 8010106: 68fa ldr r2, [r7, #12]
  37211. 8010108: 4313 orrs r3, r2
  37212. 801010a: 60fb str r3, [r7, #12]
  37213. /* Reset the Output Polarity level */
  37214. tmpccer &= ~TIM_CCER_CC2P;
  37215. 801010c: 697b ldr r3, [r7, #20]
  37216. 801010e: f023 0320 bic.w r3, r3, #32
  37217. 8010112: 617b str r3, [r7, #20]
  37218. /* Set the Output Compare Polarity */
  37219. tmpccer |= (OC_Config->OCPolarity << 4U);
  37220. 8010114: 683b ldr r3, [r7, #0]
  37221. 8010116: 689b ldr r3, [r3, #8]
  37222. 8010118: 011b lsls r3, r3, #4
  37223. 801011a: 697a ldr r2, [r7, #20]
  37224. 801011c: 4313 orrs r3, r2
  37225. 801011e: 617b str r3, [r7, #20]
  37226. if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_2))
  37227. 8010120: 687b ldr r3, [r7, #4]
  37228. 8010122: 4a29 ldr r2, [pc, #164] @ (80101c8 <TIM_OC2_SetConfig+0x100>)
  37229. 8010124: 4293 cmp r3, r2
  37230. 8010126: d003 beq.n 8010130 <TIM_OC2_SetConfig+0x68>
  37231. 8010128: 687b ldr r3, [r7, #4]
  37232. 801012a: 4a28 ldr r2, [pc, #160] @ (80101cc <TIM_OC2_SetConfig+0x104>)
  37233. 801012c: 4293 cmp r3, r2
  37234. 801012e: d10d bne.n 801014c <TIM_OC2_SetConfig+0x84>
  37235. {
  37236. assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity));
  37237. /* Reset the Output N Polarity level */
  37238. tmpccer &= ~TIM_CCER_CC2NP;
  37239. 8010130: 697b ldr r3, [r7, #20]
  37240. 8010132: f023 0380 bic.w r3, r3, #128 @ 0x80
  37241. 8010136: 617b str r3, [r7, #20]
  37242. /* Set the Output N Polarity */
  37243. tmpccer |= (OC_Config->OCNPolarity << 4U);
  37244. 8010138: 683b ldr r3, [r7, #0]
  37245. 801013a: 68db ldr r3, [r3, #12]
  37246. 801013c: 011b lsls r3, r3, #4
  37247. 801013e: 697a ldr r2, [r7, #20]
  37248. 8010140: 4313 orrs r3, r2
  37249. 8010142: 617b str r3, [r7, #20]
  37250. /* Reset the Output N State */
  37251. tmpccer &= ~TIM_CCER_CC2NE;
  37252. 8010144: 697b ldr r3, [r7, #20]
  37253. 8010146: f023 0340 bic.w r3, r3, #64 @ 0x40
  37254. 801014a: 617b str r3, [r7, #20]
  37255. }
  37256. if (IS_TIM_BREAK_INSTANCE(TIMx))
  37257. 801014c: 687b ldr r3, [r7, #4]
  37258. 801014e: 4a1e ldr r2, [pc, #120] @ (80101c8 <TIM_OC2_SetConfig+0x100>)
  37259. 8010150: 4293 cmp r3, r2
  37260. 8010152: d00f beq.n 8010174 <TIM_OC2_SetConfig+0xac>
  37261. 8010154: 687b ldr r3, [r7, #4]
  37262. 8010156: 4a1d ldr r2, [pc, #116] @ (80101cc <TIM_OC2_SetConfig+0x104>)
  37263. 8010158: 4293 cmp r3, r2
  37264. 801015a: d00b beq.n 8010174 <TIM_OC2_SetConfig+0xac>
  37265. 801015c: 687b ldr r3, [r7, #4]
  37266. 801015e: 4a1c ldr r2, [pc, #112] @ (80101d0 <TIM_OC2_SetConfig+0x108>)
  37267. 8010160: 4293 cmp r3, r2
  37268. 8010162: d007 beq.n 8010174 <TIM_OC2_SetConfig+0xac>
  37269. 8010164: 687b ldr r3, [r7, #4]
  37270. 8010166: 4a1b ldr r2, [pc, #108] @ (80101d4 <TIM_OC2_SetConfig+0x10c>)
  37271. 8010168: 4293 cmp r3, r2
  37272. 801016a: d003 beq.n 8010174 <TIM_OC2_SetConfig+0xac>
  37273. 801016c: 687b ldr r3, [r7, #4]
  37274. 801016e: 4a1a ldr r2, [pc, #104] @ (80101d8 <TIM_OC2_SetConfig+0x110>)
  37275. 8010170: 4293 cmp r3, r2
  37276. 8010172: d113 bne.n 801019c <TIM_OC2_SetConfig+0xd4>
  37277. /* Check parameters */
  37278. assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState));
  37279. assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState));
  37280. /* Reset the Output Compare and Output Compare N IDLE State */
  37281. tmpcr2 &= ~TIM_CR2_OIS2;
  37282. 8010174: 693b ldr r3, [r7, #16]
  37283. 8010176: f423 6380 bic.w r3, r3, #1024 @ 0x400
  37284. 801017a: 613b str r3, [r7, #16]
  37285. tmpcr2 &= ~TIM_CR2_OIS2N;
  37286. 801017c: 693b ldr r3, [r7, #16]
  37287. 801017e: f423 6300 bic.w r3, r3, #2048 @ 0x800
  37288. 8010182: 613b str r3, [r7, #16]
  37289. /* Set the Output Idle state */
  37290. tmpcr2 |= (OC_Config->OCIdleState << 2U);
  37291. 8010184: 683b ldr r3, [r7, #0]
  37292. 8010186: 695b ldr r3, [r3, #20]
  37293. 8010188: 009b lsls r3, r3, #2
  37294. 801018a: 693a ldr r2, [r7, #16]
  37295. 801018c: 4313 orrs r3, r2
  37296. 801018e: 613b str r3, [r7, #16]
  37297. /* Set the Output N Idle state */
  37298. tmpcr2 |= (OC_Config->OCNIdleState << 2U);
  37299. 8010190: 683b ldr r3, [r7, #0]
  37300. 8010192: 699b ldr r3, [r3, #24]
  37301. 8010194: 009b lsls r3, r3, #2
  37302. 8010196: 693a ldr r2, [r7, #16]
  37303. 8010198: 4313 orrs r3, r2
  37304. 801019a: 613b str r3, [r7, #16]
  37305. }
  37306. /* Write to TIMx CR2 */
  37307. TIMx->CR2 = tmpcr2;
  37308. 801019c: 687b ldr r3, [r7, #4]
  37309. 801019e: 693a ldr r2, [r7, #16]
  37310. 80101a0: 605a str r2, [r3, #4]
  37311. /* Write to TIMx CCMR1 */
  37312. TIMx->CCMR1 = tmpccmrx;
  37313. 80101a2: 687b ldr r3, [r7, #4]
  37314. 80101a4: 68fa ldr r2, [r7, #12]
  37315. 80101a6: 619a str r2, [r3, #24]
  37316. /* Set the Capture Compare Register value */
  37317. TIMx->CCR2 = OC_Config->Pulse;
  37318. 80101a8: 683b ldr r3, [r7, #0]
  37319. 80101aa: 685a ldr r2, [r3, #4]
  37320. 80101ac: 687b ldr r3, [r7, #4]
  37321. 80101ae: 639a str r2, [r3, #56] @ 0x38
  37322. /* Write to TIMx CCER */
  37323. TIMx->CCER = tmpccer;
  37324. 80101b0: 687b ldr r3, [r7, #4]
  37325. 80101b2: 697a ldr r2, [r7, #20]
  37326. 80101b4: 621a str r2, [r3, #32]
  37327. }
  37328. 80101b6: bf00 nop
  37329. 80101b8: 371c adds r7, #28
  37330. 80101ba: 46bd mov sp, r7
  37331. 80101bc: f85d 7b04 ldr.w r7, [sp], #4
  37332. 80101c0: 4770 bx lr
  37333. 80101c2: bf00 nop
  37334. 80101c4: feff8fff .word 0xfeff8fff
  37335. 80101c8: 40010000 .word 0x40010000
  37336. 80101cc: 40010400 .word 0x40010400
  37337. 80101d0: 40014000 .word 0x40014000
  37338. 80101d4: 40014400 .word 0x40014400
  37339. 80101d8: 40014800 .word 0x40014800
  37340. 080101dc <TIM_OC3_SetConfig>:
  37341. * @param TIMx to select the TIM peripheral
  37342. * @param OC_Config The output configuration structure
  37343. * @retval None
  37344. */
  37345. static void TIM_OC3_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config)
  37346. {
  37347. 80101dc: b480 push {r7}
  37348. 80101de: b087 sub sp, #28
  37349. 80101e0: af00 add r7, sp, #0
  37350. 80101e2: 6078 str r0, [r7, #4]
  37351. 80101e4: 6039 str r1, [r7, #0]
  37352. uint32_t tmpccmrx;
  37353. uint32_t tmpccer;
  37354. uint32_t tmpcr2;
  37355. /* Get the TIMx CCER register value */
  37356. tmpccer = TIMx->CCER;
  37357. 80101e6: 687b ldr r3, [r7, #4]
  37358. 80101e8: 6a1b ldr r3, [r3, #32]
  37359. 80101ea: 617b str r3, [r7, #20]
  37360. /* Disable the Channel 3: Reset the CC2E Bit */
  37361. TIMx->CCER &= ~TIM_CCER_CC3E;
  37362. 80101ec: 687b ldr r3, [r7, #4]
  37363. 80101ee: 6a1b ldr r3, [r3, #32]
  37364. 80101f0: f423 7280 bic.w r2, r3, #256 @ 0x100
  37365. 80101f4: 687b ldr r3, [r7, #4]
  37366. 80101f6: 621a str r2, [r3, #32]
  37367. /* Get the TIMx CR2 register value */
  37368. tmpcr2 = TIMx->CR2;
  37369. 80101f8: 687b ldr r3, [r7, #4]
  37370. 80101fa: 685b ldr r3, [r3, #4]
  37371. 80101fc: 613b str r3, [r7, #16]
  37372. /* Get the TIMx CCMR2 register value */
  37373. tmpccmrx = TIMx->CCMR2;
  37374. 80101fe: 687b ldr r3, [r7, #4]
  37375. 8010200: 69db ldr r3, [r3, #28]
  37376. 8010202: 60fb str r3, [r7, #12]
  37377. /* Reset the Output Compare mode and Capture/Compare selection Bits */
  37378. tmpccmrx &= ~TIM_CCMR2_OC3M;
  37379. 8010204: 68fa ldr r2, [r7, #12]
  37380. 8010206: 4b33 ldr r3, [pc, #204] @ (80102d4 <TIM_OC3_SetConfig+0xf8>)
  37381. 8010208: 4013 ands r3, r2
  37382. 801020a: 60fb str r3, [r7, #12]
  37383. tmpccmrx &= ~TIM_CCMR2_CC3S;
  37384. 801020c: 68fb ldr r3, [r7, #12]
  37385. 801020e: f023 0303 bic.w r3, r3, #3
  37386. 8010212: 60fb str r3, [r7, #12]
  37387. /* Select the Output Compare Mode */
  37388. tmpccmrx |= OC_Config->OCMode;
  37389. 8010214: 683b ldr r3, [r7, #0]
  37390. 8010216: 681b ldr r3, [r3, #0]
  37391. 8010218: 68fa ldr r2, [r7, #12]
  37392. 801021a: 4313 orrs r3, r2
  37393. 801021c: 60fb str r3, [r7, #12]
  37394. /* Reset the Output Polarity level */
  37395. tmpccer &= ~TIM_CCER_CC3P;
  37396. 801021e: 697b ldr r3, [r7, #20]
  37397. 8010220: f423 7300 bic.w r3, r3, #512 @ 0x200
  37398. 8010224: 617b str r3, [r7, #20]
  37399. /* Set the Output Compare Polarity */
  37400. tmpccer |= (OC_Config->OCPolarity << 8U);
  37401. 8010226: 683b ldr r3, [r7, #0]
  37402. 8010228: 689b ldr r3, [r3, #8]
  37403. 801022a: 021b lsls r3, r3, #8
  37404. 801022c: 697a ldr r2, [r7, #20]
  37405. 801022e: 4313 orrs r3, r2
  37406. 8010230: 617b str r3, [r7, #20]
  37407. if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_3))
  37408. 8010232: 687b ldr r3, [r7, #4]
  37409. 8010234: 4a28 ldr r2, [pc, #160] @ (80102d8 <TIM_OC3_SetConfig+0xfc>)
  37410. 8010236: 4293 cmp r3, r2
  37411. 8010238: d003 beq.n 8010242 <TIM_OC3_SetConfig+0x66>
  37412. 801023a: 687b ldr r3, [r7, #4]
  37413. 801023c: 4a27 ldr r2, [pc, #156] @ (80102dc <TIM_OC3_SetConfig+0x100>)
  37414. 801023e: 4293 cmp r3, r2
  37415. 8010240: d10d bne.n 801025e <TIM_OC3_SetConfig+0x82>
  37416. {
  37417. assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity));
  37418. /* Reset the Output N Polarity level */
  37419. tmpccer &= ~TIM_CCER_CC3NP;
  37420. 8010242: 697b ldr r3, [r7, #20]
  37421. 8010244: f423 6300 bic.w r3, r3, #2048 @ 0x800
  37422. 8010248: 617b str r3, [r7, #20]
  37423. /* Set the Output N Polarity */
  37424. tmpccer |= (OC_Config->OCNPolarity << 8U);
  37425. 801024a: 683b ldr r3, [r7, #0]
  37426. 801024c: 68db ldr r3, [r3, #12]
  37427. 801024e: 021b lsls r3, r3, #8
  37428. 8010250: 697a ldr r2, [r7, #20]
  37429. 8010252: 4313 orrs r3, r2
  37430. 8010254: 617b str r3, [r7, #20]
  37431. /* Reset the Output N State */
  37432. tmpccer &= ~TIM_CCER_CC3NE;
  37433. 8010256: 697b ldr r3, [r7, #20]
  37434. 8010258: f423 6380 bic.w r3, r3, #1024 @ 0x400
  37435. 801025c: 617b str r3, [r7, #20]
  37436. }
  37437. if (IS_TIM_BREAK_INSTANCE(TIMx))
  37438. 801025e: 687b ldr r3, [r7, #4]
  37439. 8010260: 4a1d ldr r2, [pc, #116] @ (80102d8 <TIM_OC3_SetConfig+0xfc>)
  37440. 8010262: 4293 cmp r3, r2
  37441. 8010264: d00f beq.n 8010286 <TIM_OC3_SetConfig+0xaa>
  37442. 8010266: 687b ldr r3, [r7, #4]
  37443. 8010268: 4a1c ldr r2, [pc, #112] @ (80102dc <TIM_OC3_SetConfig+0x100>)
  37444. 801026a: 4293 cmp r3, r2
  37445. 801026c: d00b beq.n 8010286 <TIM_OC3_SetConfig+0xaa>
  37446. 801026e: 687b ldr r3, [r7, #4]
  37447. 8010270: 4a1b ldr r2, [pc, #108] @ (80102e0 <TIM_OC3_SetConfig+0x104>)
  37448. 8010272: 4293 cmp r3, r2
  37449. 8010274: d007 beq.n 8010286 <TIM_OC3_SetConfig+0xaa>
  37450. 8010276: 687b ldr r3, [r7, #4]
  37451. 8010278: 4a1a ldr r2, [pc, #104] @ (80102e4 <TIM_OC3_SetConfig+0x108>)
  37452. 801027a: 4293 cmp r3, r2
  37453. 801027c: d003 beq.n 8010286 <TIM_OC3_SetConfig+0xaa>
  37454. 801027e: 687b ldr r3, [r7, #4]
  37455. 8010280: 4a19 ldr r2, [pc, #100] @ (80102e8 <TIM_OC3_SetConfig+0x10c>)
  37456. 8010282: 4293 cmp r3, r2
  37457. 8010284: d113 bne.n 80102ae <TIM_OC3_SetConfig+0xd2>
  37458. /* Check parameters */
  37459. assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState));
  37460. assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState));
  37461. /* Reset the Output Compare and Output Compare N IDLE State */
  37462. tmpcr2 &= ~TIM_CR2_OIS3;
  37463. 8010286: 693b ldr r3, [r7, #16]
  37464. 8010288: f423 5380 bic.w r3, r3, #4096 @ 0x1000
  37465. 801028c: 613b str r3, [r7, #16]
  37466. tmpcr2 &= ~TIM_CR2_OIS3N;
  37467. 801028e: 693b ldr r3, [r7, #16]
  37468. 8010290: f423 5300 bic.w r3, r3, #8192 @ 0x2000
  37469. 8010294: 613b str r3, [r7, #16]
  37470. /* Set the Output Idle state */
  37471. tmpcr2 |= (OC_Config->OCIdleState << 4U);
  37472. 8010296: 683b ldr r3, [r7, #0]
  37473. 8010298: 695b ldr r3, [r3, #20]
  37474. 801029a: 011b lsls r3, r3, #4
  37475. 801029c: 693a ldr r2, [r7, #16]
  37476. 801029e: 4313 orrs r3, r2
  37477. 80102a0: 613b str r3, [r7, #16]
  37478. /* Set the Output N Idle state */
  37479. tmpcr2 |= (OC_Config->OCNIdleState << 4U);
  37480. 80102a2: 683b ldr r3, [r7, #0]
  37481. 80102a4: 699b ldr r3, [r3, #24]
  37482. 80102a6: 011b lsls r3, r3, #4
  37483. 80102a8: 693a ldr r2, [r7, #16]
  37484. 80102aa: 4313 orrs r3, r2
  37485. 80102ac: 613b str r3, [r7, #16]
  37486. }
  37487. /* Write to TIMx CR2 */
  37488. TIMx->CR2 = tmpcr2;
  37489. 80102ae: 687b ldr r3, [r7, #4]
  37490. 80102b0: 693a ldr r2, [r7, #16]
  37491. 80102b2: 605a str r2, [r3, #4]
  37492. /* Write to TIMx CCMR2 */
  37493. TIMx->CCMR2 = tmpccmrx;
  37494. 80102b4: 687b ldr r3, [r7, #4]
  37495. 80102b6: 68fa ldr r2, [r7, #12]
  37496. 80102b8: 61da str r2, [r3, #28]
  37497. /* Set the Capture Compare Register value */
  37498. TIMx->CCR3 = OC_Config->Pulse;
  37499. 80102ba: 683b ldr r3, [r7, #0]
  37500. 80102bc: 685a ldr r2, [r3, #4]
  37501. 80102be: 687b ldr r3, [r7, #4]
  37502. 80102c0: 63da str r2, [r3, #60] @ 0x3c
  37503. /* Write to TIMx CCER */
  37504. TIMx->CCER = tmpccer;
  37505. 80102c2: 687b ldr r3, [r7, #4]
  37506. 80102c4: 697a ldr r2, [r7, #20]
  37507. 80102c6: 621a str r2, [r3, #32]
  37508. }
  37509. 80102c8: bf00 nop
  37510. 80102ca: 371c adds r7, #28
  37511. 80102cc: 46bd mov sp, r7
  37512. 80102ce: f85d 7b04 ldr.w r7, [sp], #4
  37513. 80102d2: 4770 bx lr
  37514. 80102d4: fffeff8f .word 0xfffeff8f
  37515. 80102d8: 40010000 .word 0x40010000
  37516. 80102dc: 40010400 .word 0x40010400
  37517. 80102e0: 40014000 .word 0x40014000
  37518. 80102e4: 40014400 .word 0x40014400
  37519. 80102e8: 40014800 .word 0x40014800
  37520. 080102ec <TIM_OC4_SetConfig>:
  37521. * @param TIMx to select the TIM peripheral
  37522. * @param OC_Config The output configuration structure
  37523. * @retval None
  37524. */
  37525. static void TIM_OC4_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config)
  37526. {
  37527. 80102ec: b480 push {r7}
  37528. 80102ee: b087 sub sp, #28
  37529. 80102f0: af00 add r7, sp, #0
  37530. 80102f2: 6078 str r0, [r7, #4]
  37531. 80102f4: 6039 str r1, [r7, #0]
  37532. uint32_t tmpccmrx;
  37533. uint32_t tmpccer;
  37534. uint32_t tmpcr2;
  37535. /* Get the TIMx CCER register value */
  37536. tmpccer = TIMx->CCER;
  37537. 80102f6: 687b ldr r3, [r7, #4]
  37538. 80102f8: 6a1b ldr r3, [r3, #32]
  37539. 80102fa: 613b str r3, [r7, #16]
  37540. /* Disable the Channel 4: Reset the CC4E Bit */
  37541. TIMx->CCER &= ~TIM_CCER_CC4E;
  37542. 80102fc: 687b ldr r3, [r7, #4]
  37543. 80102fe: 6a1b ldr r3, [r3, #32]
  37544. 8010300: f423 5280 bic.w r2, r3, #4096 @ 0x1000
  37545. 8010304: 687b ldr r3, [r7, #4]
  37546. 8010306: 621a str r2, [r3, #32]
  37547. /* Get the TIMx CR2 register value */
  37548. tmpcr2 = TIMx->CR2;
  37549. 8010308: 687b ldr r3, [r7, #4]
  37550. 801030a: 685b ldr r3, [r3, #4]
  37551. 801030c: 617b str r3, [r7, #20]
  37552. /* Get the TIMx CCMR2 register value */
  37553. tmpccmrx = TIMx->CCMR2;
  37554. 801030e: 687b ldr r3, [r7, #4]
  37555. 8010310: 69db ldr r3, [r3, #28]
  37556. 8010312: 60fb str r3, [r7, #12]
  37557. /* Reset the Output Compare mode and Capture/Compare selection Bits */
  37558. tmpccmrx &= ~TIM_CCMR2_OC4M;
  37559. 8010314: 68fa ldr r2, [r7, #12]
  37560. 8010316: 4b24 ldr r3, [pc, #144] @ (80103a8 <TIM_OC4_SetConfig+0xbc>)
  37561. 8010318: 4013 ands r3, r2
  37562. 801031a: 60fb str r3, [r7, #12]
  37563. tmpccmrx &= ~TIM_CCMR2_CC4S;
  37564. 801031c: 68fb ldr r3, [r7, #12]
  37565. 801031e: f423 7340 bic.w r3, r3, #768 @ 0x300
  37566. 8010322: 60fb str r3, [r7, #12]
  37567. /* Select the Output Compare Mode */
  37568. tmpccmrx |= (OC_Config->OCMode << 8U);
  37569. 8010324: 683b ldr r3, [r7, #0]
  37570. 8010326: 681b ldr r3, [r3, #0]
  37571. 8010328: 021b lsls r3, r3, #8
  37572. 801032a: 68fa ldr r2, [r7, #12]
  37573. 801032c: 4313 orrs r3, r2
  37574. 801032e: 60fb str r3, [r7, #12]
  37575. /* Reset the Output Polarity level */
  37576. tmpccer &= ~TIM_CCER_CC4P;
  37577. 8010330: 693b ldr r3, [r7, #16]
  37578. 8010332: f423 5300 bic.w r3, r3, #8192 @ 0x2000
  37579. 8010336: 613b str r3, [r7, #16]
  37580. /* Set the Output Compare Polarity */
  37581. tmpccer |= (OC_Config->OCPolarity << 12U);
  37582. 8010338: 683b ldr r3, [r7, #0]
  37583. 801033a: 689b ldr r3, [r3, #8]
  37584. 801033c: 031b lsls r3, r3, #12
  37585. 801033e: 693a ldr r2, [r7, #16]
  37586. 8010340: 4313 orrs r3, r2
  37587. 8010342: 613b str r3, [r7, #16]
  37588. if (IS_TIM_BREAK_INSTANCE(TIMx))
  37589. 8010344: 687b ldr r3, [r7, #4]
  37590. 8010346: 4a19 ldr r2, [pc, #100] @ (80103ac <TIM_OC4_SetConfig+0xc0>)
  37591. 8010348: 4293 cmp r3, r2
  37592. 801034a: d00f beq.n 801036c <TIM_OC4_SetConfig+0x80>
  37593. 801034c: 687b ldr r3, [r7, #4]
  37594. 801034e: 4a18 ldr r2, [pc, #96] @ (80103b0 <TIM_OC4_SetConfig+0xc4>)
  37595. 8010350: 4293 cmp r3, r2
  37596. 8010352: d00b beq.n 801036c <TIM_OC4_SetConfig+0x80>
  37597. 8010354: 687b ldr r3, [r7, #4]
  37598. 8010356: 4a17 ldr r2, [pc, #92] @ (80103b4 <TIM_OC4_SetConfig+0xc8>)
  37599. 8010358: 4293 cmp r3, r2
  37600. 801035a: d007 beq.n 801036c <TIM_OC4_SetConfig+0x80>
  37601. 801035c: 687b ldr r3, [r7, #4]
  37602. 801035e: 4a16 ldr r2, [pc, #88] @ (80103b8 <TIM_OC4_SetConfig+0xcc>)
  37603. 8010360: 4293 cmp r3, r2
  37604. 8010362: d003 beq.n 801036c <TIM_OC4_SetConfig+0x80>
  37605. 8010364: 687b ldr r3, [r7, #4]
  37606. 8010366: 4a15 ldr r2, [pc, #84] @ (80103bc <TIM_OC4_SetConfig+0xd0>)
  37607. 8010368: 4293 cmp r3, r2
  37608. 801036a: d109 bne.n 8010380 <TIM_OC4_SetConfig+0x94>
  37609. {
  37610. /* Check parameters */
  37611. assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState));
  37612. /* Reset the Output Compare IDLE State */
  37613. tmpcr2 &= ~TIM_CR2_OIS4;
  37614. 801036c: 697b ldr r3, [r7, #20]
  37615. 801036e: f423 4380 bic.w r3, r3, #16384 @ 0x4000
  37616. 8010372: 617b str r3, [r7, #20]
  37617. /* Set the Output Idle state */
  37618. tmpcr2 |= (OC_Config->OCIdleState << 6U);
  37619. 8010374: 683b ldr r3, [r7, #0]
  37620. 8010376: 695b ldr r3, [r3, #20]
  37621. 8010378: 019b lsls r3, r3, #6
  37622. 801037a: 697a ldr r2, [r7, #20]
  37623. 801037c: 4313 orrs r3, r2
  37624. 801037e: 617b str r3, [r7, #20]
  37625. }
  37626. /* Write to TIMx CR2 */
  37627. TIMx->CR2 = tmpcr2;
  37628. 8010380: 687b ldr r3, [r7, #4]
  37629. 8010382: 697a ldr r2, [r7, #20]
  37630. 8010384: 605a str r2, [r3, #4]
  37631. /* Write to TIMx CCMR2 */
  37632. TIMx->CCMR2 = tmpccmrx;
  37633. 8010386: 687b ldr r3, [r7, #4]
  37634. 8010388: 68fa ldr r2, [r7, #12]
  37635. 801038a: 61da str r2, [r3, #28]
  37636. /* Set the Capture Compare Register value */
  37637. TIMx->CCR4 = OC_Config->Pulse;
  37638. 801038c: 683b ldr r3, [r7, #0]
  37639. 801038e: 685a ldr r2, [r3, #4]
  37640. 8010390: 687b ldr r3, [r7, #4]
  37641. 8010392: 641a str r2, [r3, #64] @ 0x40
  37642. /* Write to TIMx CCER */
  37643. TIMx->CCER = tmpccer;
  37644. 8010394: 687b ldr r3, [r7, #4]
  37645. 8010396: 693a ldr r2, [r7, #16]
  37646. 8010398: 621a str r2, [r3, #32]
  37647. }
  37648. 801039a: bf00 nop
  37649. 801039c: 371c adds r7, #28
  37650. 801039e: 46bd mov sp, r7
  37651. 80103a0: f85d 7b04 ldr.w r7, [sp], #4
  37652. 80103a4: 4770 bx lr
  37653. 80103a6: bf00 nop
  37654. 80103a8: feff8fff .word 0xfeff8fff
  37655. 80103ac: 40010000 .word 0x40010000
  37656. 80103b0: 40010400 .word 0x40010400
  37657. 80103b4: 40014000 .word 0x40014000
  37658. 80103b8: 40014400 .word 0x40014400
  37659. 80103bc: 40014800 .word 0x40014800
  37660. 080103c0 <TIM_OC5_SetConfig>:
  37661. * @param OC_Config The output configuration structure
  37662. * @retval None
  37663. */
  37664. static void TIM_OC5_SetConfig(TIM_TypeDef *TIMx,
  37665. const TIM_OC_InitTypeDef *OC_Config)
  37666. {
  37667. 80103c0: b480 push {r7}
  37668. 80103c2: b087 sub sp, #28
  37669. 80103c4: af00 add r7, sp, #0
  37670. 80103c6: 6078 str r0, [r7, #4]
  37671. 80103c8: 6039 str r1, [r7, #0]
  37672. uint32_t tmpccmrx;
  37673. uint32_t tmpccer;
  37674. uint32_t tmpcr2;
  37675. /* Get the TIMx CCER register value */
  37676. tmpccer = TIMx->CCER;
  37677. 80103ca: 687b ldr r3, [r7, #4]
  37678. 80103cc: 6a1b ldr r3, [r3, #32]
  37679. 80103ce: 613b str r3, [r7, #16]
  37680. /* Disable the output: Reset the CCxE Bit */
  37681. TIMx->CCER &= ~TIM_CCER_CC5E;
  37682. 80103d0: 687b ldr r3, [r7, #4]
  37683. 80103d2: 6a1b ldr r3, [r3, #32]
  37684. 80103d4: f423 3280 bic.w r2, r3, #65536 @ 0x10000
  37685. 80103d8: 687b ldr r3, [r7, #4]
  37686. 80103da: 621a str r2, [r3, #32]
  37687. /* Get the TIMx CR2 register value */
  37688. tmpcr2 = TIMx->CR2;
  37689. 80103dc: 687b ldr r3, [r7, #4]
  37690. 80103de: 685b ldr r3, [r3, #4]
  37691. 80103e0: 617b str r3, [r7, #20]
  37692. /* Get the TIMx CCMR1 register value */
  37693. tmpccmrx = TIMx->CCMR3;
  37694. 80103e2: 687b ldr r3, [r7, #4]
  37695. 80103e4: 6d5b ldr r3, [r3, #84] @ 0x54
  37696. 80103e6: 60fb str r3, [r7, #12]
  37697. /* Reset the Output Compare Mode Bits */
  37698. tmpccmrx &= ~(TIM_CCMR3_OC5M);
  37699. 80103e8: 68fa ldr r2, [r7, #12]
  37700. 80103ea: 4b21 ldr r3, [pc, #132] @ (8010470 <TIM_OC5_SetConfig+0xb0>)
  37701. 80103ec: 4013 ands r3, r2
  37702. 80103ee: 60fb str r3, [r7, #12]
  37703. /* Select the Output Compare Mode */
  37704. tmpccmrx |= OC_Config->OCMode;
  37705. 80103f0: 683b ldr r3, [r7, #0]
  37706. 80103f2: 681b ldr r3, [r3, #0]
  37707. 80103f4: 68fa ldr r2, [r7, #12]
  37708. 80103f6: 4313 orrs r3, r2
  37709. 80103f8: 60fb str r3, [r7, #12]
  37710. /* Reset the Output Polarity level */
  37711. tmpccer &= ~TIM_CCER_CC5P;
  37712. 80103fa: 693b ldr r3, [r7, #16]
  37713. 80103fc: f423 3300 bic.w r3, r3, #131072 @ 0x20000
  37714. 8010400: 613b str r3, [r7, #16]
  37715. /* Set the Output Compare Polarity */
  37716. tmpccer |= (OC_Config->OCPolarity << 16U);
  37717. 8010402: 683b ldr r3, [r7, #0]
  37718. 8010404: 689b ldr r3, [r3, #8]
  37719. 8010406: 041b lsls r3, r3, #16
  37720. 8010408: 693a ldr r2, [r7, #16]
  37721. 801040a: 4313 orrs r3, r2
  37722. 801040c: 613b str r3, [r7, #16]
  37723. if (IS_TIM_BREAK_INSTANCE(TIMx))
  37724. 801040e: 687b ldr r3, [r7, #4]
  37725. 8010410: 4a18 ldr r2, [pc, #96] @ (8010474 <TIM_OC5_SetConfig+0xb4>)
  37726. 8010412: 4293 cmp r3, r2
  37727. 8010414: d00f beq.n 8010436 <TIM_OC5_SetConfig+0x76>
  37728. 8010416: 687b ldr r3, [r7, #4]
  37729. 8010418: 4a17 ldr r2, [pc, #92] @ (8010478 <TIM_OC5_SetConfig+0xb8>)
  37730. 801041a: 4293 cmp r3, r2
  37731. 801041c: d00b beq.n 8010436 <TIM_OC5_SetConfig+0x76>
  37732. 801041e: 687b ldr r3, [r7, #4]
  37733. 8010420: 4a16 ldr r2, [pc, #88] @ (801047c <TIM_OC5_SetConfig+0xbc>)
  37734. 8010422: 4293 cmp r3, r2
  37735. 8010424: d007 beq.n 8010436 <TIM_OC5_SetConfig+0x76>
  37736. 8010426: 687b ldr r3, [r7, #4]
  37737. 8010428: 4a15 ldr r2, [pc, #84] @ (8010480 <TIM_OC5_SetConfig+0xc0>)
  37738. 801042a: 4293 cmp r3, r2
  37739. 801042c: d003 beq.n 8010436 <TIM_OC5_SetConfig+0x76>
  37740. 801042e: 687b ldr r3, [r7, #4]
  37741. 8010430: 4a14 ldr r2, [pc, #80] @ (8010484 <TIM_OC5_SetConfig+0xc4>)
  37742. 8010432: 4293 cmp r3, r2
  37743. 8010434: d109 bne.n 801044a <TIM_OC5_SetConfig+0x8a>
  37744. {
  37745. /* Reset the Output Compare IDLE State */
  37746. tmpcr2 &= ~TIM_CR2_OIS5;
  37747. 8010436: 697b ldr r3, [r7, #20]
  37748. 8010438: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  37749. 801043c: 617b str r3, [r7, #20]
  37750. /* Set the Output Idle state */
  37751. tmpcr2 |= (OC_Config->OCIdleState << 8U);
  37752. 801043e: 683b ldr r3, [r7, #0]
  37753. 8010440: 695b ldr r3, [r3, #20]
  37754. 8010442: 021b lsls r3, r3, #8
  37755. 8010444: 697a ldr r2, [r7, #20]
  37756. 8010446: 4313 orrs r3, r2
  37757. 8010448: 617b str r3, [r7, #20]
  37758. }
  37759. /* Write to TIMx CR2 */
  37760. TIMx->CR2 = tmpcr2;
  37761. 801044a: 687b ldr r3, [r7, #4]
  37762. 801044c: 697a ldr r2, [r7, #20]
  37763. 801044e: 605a str r2, [r3, #4]
  37764. /* Write to TIMx CCMR3 */
  37765. TIMx->CCMR3 = tmpccmrx;
  37766. 8010450: 687b ldr r3, [r7, #4]
  37767. 8010452: 68fa ldr r2, [r7, #12]
  37768. 8010454: 655a str r2, [r3, #84] @ 0x54
  37769. /* Set the Capture Compare Register value */
  37770. TIMx->CCR5 = OC_Config->Pulse;
  37771. 8010456: 683b ldr r3, [r7, #0]
  37772. 8010458: 685a ldr r2, [r3, #4]
  37773. 801045a: 687b ldr r3, [r7, #4]
  37774. 801045c: 659a str r2, [r3, #88] @ 0x58
  37775. /* Write to TIMx CCER */
  37776. TIMx->CCER = tmpccer;
  37777. 801045e: 687b ldr r3, [r7, #4]
  37778. 8010460: 693a ldr r2, [r7, #16]
  37779. 8010462: 621a str r2, [r3, #32]
  37780. }
  37781. 8010464: bf00 nop
  37782. 8010466: 371c adds r7, #28
  37783. 8010468: 46bd mov sp, r7
  37784. 801046a: f85d 7b04 ldr.w r7, [sp], #4
  37785. 801046e: 4770 bx lr
  37786. 8010470: fffeff8f .word 0xfffeff8f
  37787. 8010474: 40010000 .word 0x40010000
  37788. 8010478: 40010400 .word 0x40010400
  37789. 801047c: 40014000 .word 0x40014000
  37790. 8010480: 40014400 .word 0x40014400
  37791. 8010484: 40014800 .word 0x40014800
  37792. 08010488 <TIM_OC6_SetConfig>:
  37793. * @param OC_Config The output configuration structure
  37794. * @retval None
  37795. */
  37796. static void TIM_OC6_SetConfig(TIM_TypeDef *TIMx,
  37797. const TIM_OC_InitTypeDef *OC_Config)
  37798. {
  37799. 8010488: b480 push {r7}
  37800. 801048a: b087 sub sp, #28
  37801. 801048c: af00 add r7, sp, #0
  37802. 801048e: 6078 str r0, [r7, #4]
  37803. 8010490: 6039 str r1, [r7, #0]
  37804. uint32_t tmpccmrx;
  37805. uint32_t tmpccer;
  37806. uint32_t tmpcr2;
  37807. /* Get the TIMx CCER register value */
  37808. tmpccer = TIMx->CCER;
  37809. 8010492: 687b ldr r3, [r7, #4]
  37810. 8010494: 6a1b ldr r3, [r3, #32]
  37811. 8010496: 613b str r3, [r7, #16]
  37812. /* Disable the output: Reset the CCxE Bit */
  37813. TIMx->CCER &= ~TIM_CCER_CC6E;
  37814. 8010498: 687b ldr r3, [r7, #4]
  37815. 801049a: 6a1b ldr r3, [r3, #32]
  37816. 801049c: f423 1280 bic.w r2, r3, #1048576 @ 0x100000
  37817. 80104a0: 687b ldr r3, [r7, #4]
  37818. 80104a2: 621a str r2, [r3, #32]
  37819. /* Get the TIMx CR2 register value */
  37820. tmpcr2 = TIMx->CR2;
  37821. 80104a4: 687b ldr r3, [r7, #4]
  37822. 80104a6: 685b ldr r3, [r3, #4]
  37823. 80104a8: 617b str r3, [r7, #20]
  37824. /* Get the TIMx CCMR1 register value */
  37825. tmpccmrx = TIMx->CCMR3;
  37826. 80104aa: 687b ldr r3, [r7, #4]
  37827. 80104ac: 6d5b ldr r3, [r3, #84] @ 0x54
  37828. 80104ae: 60fb str r3, [r7, #12]
  37829. /* Reset the Output Compare Mode Bits */
  37830. tmpccmrx &= ~(TIM_CCMR3_OC6M);
  37831. 80104b0: 68fa ldr r2, [r7, #12]
  37832. 80104b2: 4b22 ldr r3, [pc, #136] @ (801053c <TIM_OC6_SetConfig+0xb4>)
  37833. 80104b4: 4013 ands r3, r2
  37834. 80104b6: 60fb str r3, [r7, #12]
  37835. /* Select the Output Compare Mode */
  37836. tmpccmrx |= (OC_Config->OCMode << 8U);
  37837. 80104b8: 683b ldr r3, [r7, #0]
  37838. 80104ba: 681b ldr r3, [r3, #0]
  37839. 80104bc: 021b lsls r3, r3, #8
  37840. 80104be: 68fa ldr r2, [r7, #12]
  37841. 80104c0: 4313 orrs r3, r2
  37842. 80104c2: 60fb str r3, [r7, #12]
  37843. /* Reset the Output Polarity level */
  37844. tmpccer &= (uint32_t)~TIM_CCER_CC6P;
  37845. 80104c4: 693b ldr r3, [r7, #16]
  37846. 80104c6: f423 1300 bic.w r3, r3, #2097152 @ 0x200000
  37847. 80104ca: 613b str r3, [r7, #16]
  37848. /* Set the Output Compare Polarity */
  37849. tmpccer |= (OC_Config->OCPolarity << 20U);
  37850. 80104cc: 683b ldr r3, [r7, #0]
  37851. 80104ce: 689b ldr r3, [r3, #8]
  37852. 80104d0: 051b lsls r3, r3, #20
  37853. 80104d2: 693a ldr r2, [r7, #16]
  37854. 80104d4: 4313 orrs r3, r2
  37855. 80104d6: 613b str r3, [r7, #16]
  37856. if (IS_TIM_BREAK_INSTANCE(TIMx))
  37857. 80104d8: 687b ldr r3, [r7, #4]
  37858. 80104da: 4a19 ldr r2, [pc, #100] @ (8010540 <TIM_OC6_SetConfig+0xb8>)
  37859. 80104dc: 4293 cmp r3, r2
  37860. 80104de: d00f beq.n 8010500 <TIM_OC6_SetConfig+0x78>
  37861. 80104e0: 687b ldr r3, [r7, #4]
  37862. 80104e2: 4a18 ldr r2, [pc, #96] @ (8010544 <TIM_OC6_SetConfig+0xbc>)
  37863. 80104e4: 4293 cmp r3, r2
  37864. 80104e6: d00b beq.n 8010500 <TIM_OC6_SetConfig+0x78>
  37865. 80104e8: 687b ldr r3, [r7, #4]
  37866. 80104ea: 4a17 ldr r2, [pc, #92] @ (8010548 <TIM_OC6_SetConfig+0xc0>)
  37867. 80104ec: 4293 cmp r3, r2
  37868. 80104ee: d007 beq.n 8010500 <TIM_OC6_SetConfig+0x78>
  37869. 80104f0: 687b ldr r3, [r7, #4]
  37870. 80104f2: 4a16 ldr r2, [pc, #88] @ (801054c <TIM_OC6_SetConfig+0xc4>)
  37871. 80104f4: 4293 cmp r3, r2
  37872. 80104f6: d003 beq.n 8010500 <TIM_OC6_SetConfig+0x78>
  37873. 80104f8: 687b ldr r3, [r7, #4]
  37874. 80104fa: 4a15 ldr r2, [pc, #84] @ (8010550 <TIM_OC6_SetConfig+0xc8>)
  37875. 80104fc: 4293 cmp r3, r2
  37876. 80104fe: d109 bne.n 8010514 <TIM_OC6_SetConfig+0x8c>
  37877. {
  37878. /* Reset the Output Compare IDLE State */
  37879. tmpcr2 &= ~TIM_CR2_OIS6;
  37880. 8010500: 697b ldr r3, [r7, #20]
  37881. 8010502: f423 2380 bic.w r3, r3, #262144 @ 0x40000
  37882. 8010506: 617b str r3, [r7, #20]
  37883. /* Set the Output Idle state */
  37884. tmpcr2 |= (OC_Config->OCIdleState << 10U);
  37885. 8010508: 683b ldr r3, [r7, #0]
  37886. 801050a: 695b ldr r3, [r3, #20]
  37887. 801050c: 029b lsls r3, r3, #10
  37888. 801050e: 697a ldr r2, [r7, #20]
  37889. 8010510: 4313 orrs r3, r2
  37890. 8010512: 617b str r3, [r7, #20]
  37891. }
  37892. /* Write to TIMx CR2 */
  37893. TIMx->CR2 = tmpcr2;
  37894. 8010514: 687b ldr r3, [r7, #4]
  37895. 8010516: 697a ldr r2, [r7, #20]
  37896. 8010518: 605a str r2, [r3, #4]
  37897. /* Write to TIMx CCMR3 */
  37898. TIMx->CCMR3 = tmpccmrx;
  37899. 801051a: 687b ldr r3, [r7, #4]
  37900. 801051c: 68fa ldr r2, [r7, #12]
  37901. 801051e: 655a str r2, [r3, #84] @ 0x54
  37902. /* Set the Capture Compare Register value */
  37903. TIMx->CCR6 = OC_Config->Pulse;
  37904. 8010520: 683b ldr r3, [r7, #0]
  37905. 8010522: 685a ldr r2, [r3, #4]
  37906. 8010524: 687b ldr r3, [r7, #4]
  37907. 8010526: 65da str r2, [r3, #92] @ 0x5c
  37908. /* Write to TIMx CCER */
  37909. TIMx->CCER = tmpccer;
  37910. 8010528: 687b ldr r3, [r7, #4]
  37911. 801052a: 693a ldr r2, [r7, #16]
  37912. 801052c: 621a str r2, [r3, #32]
  37913. }
  37914. 801052e: bf00 nop
  37915. 8010530: 371c adds r7, #28
  37916. 8010532: 46bd mov sp, r7
  37917. 8010534: f85d 7b04 ldr.w r7, [sp], #4
  37918. 8010538: 4770 bx lr
  37919. 801053a: bf00 nop
  37920. 801053c: feff8fff .word 0xfeff8fff
  37921. 8010540: 40010000 .word 0x40010000
  37922. 8010544: 40010400 .word 0x40010400
  37923. 8010548: 40014000 .word 0x40014000
  37924. 801054c: 40014400 .word 0x40014400
  37925. 8010550: 40014800 .word 0x40014800
  37926. 08010554 <TIM_TI1_ConfigInputStage>:
  37927. * @param TIM_ICFilter Specifies the Input Capture Filter.
  37928. * This parameter must be a value between 0x00 and 0x0F.
  37929. * @retval None
  37930. */
  37931. static void TIM_TI1_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter)
  37932. {
  37933. 8010554: b480 push {r7}
  37934. 8010556: b087 sub sp, #28
  37935. 8010558: af00 add r7, sp, #0
  37936. 801055a: 60f8 str r0, [r7, #12]
  37937. 801055c: 60b9 str r1, [r7, #8]
  37938. 801055e: 607a str r2, [r7, #4]
  37939. uint32_t tmpccmr1;
  37940. uint32_t tmpccer;
  37941. /* Disable the Channel 1: Reset the CC1E Bit */
  37942. tmpccer = TIMx->CCER;
  37943. 8010560: 68fb ldr r3, [r7, #12]
  37944. 8010562: 6a1b ldr r3, [r3, #32]
  37945. 8010564: 617b str r3, [r7, #20]
  37946. TIMx->CCER &= ~TIM_CCER_CC1E;
  37947. 8010566: 68fb ldr r3, [r7, #12]
  37948. 8010568: 6a1b ldr r3, [r3, #32]
  37949. 801056a: f023 0201 bic.w r2, r3, #1
  37950. 801056e: 68fb ldr r3, [r7, #12]
  37951. 8010570: 621a str r2, [r3, #32]
  37952. tmpccmr1 = TIMx->CCMR1;
  37953. 8010572: 68fb ldr r3, [r7, #12]
  37954. 8010574: 699b ldr r3, [r3, #24]
  37955. 8010576: 613b str r3, [r7, #16]
  37956. /* Set the filter */
  37957. tmpccmr1 &= ~TIM_CCMR1_IC1F;
  37958. 8010578: 693b ldr r3, [r7, #16]
  37959. 801057a: f023 03f0 bic.w r3, r3, #240 @ 0xf0
  37960. 801057e: 613b str r3, [r7, #16]
  37961. tmpccmr1 |= (TIM_ICFilter << 4U);
  37962. 8010580: 687b ldr r3, [r7, #4]
  37963. 8010582: 011b lsls r3, r3, #4
  37964. 8010584: 693a ldr r2, [r7, #16]
  37965. 8010586: 4313 orrs r3, r2
  37966. 8010588: 613b str r3, [r7, #16]
  37967. /* Select the Polarity and set the CC1E Bit */
  37968. tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP);
  37969. 801058a: 697b ldr r3, [r7, #20]
  37970. 801058c: f023 030a bic.w r3, r3, #10
  37971. 8010590: 617b str r3, [r7, #20]
  37972. tmpccer |= TIM_ICPolarity;
  37973. 8010592: 697a ldr r2, [r7, #20]
  37974. 8010594: 68bb ldr r3, [r7, #8]
  37975. 8010596: 4313 orrs r3, r2
  37976. 8010598: 617b str r3, [r7, #20]
  37977. /* Write to TIMx CCMR1 and CCER registers */
  37978. TIMx->CCMR1 = tmpccmr1;
  37979. 801059a: 68fb ldr r3, [r7, #12]
  37980. 801059c: 693a ldr r2, [r7, #16]
  37981. 801059e: 619a str r2, [r3, #24]
  37982. TIMx->CCER = tmpccer;
  37983. 80105a0: 68fb ldr r3, [r7, #12]
  37984. 80105a2: 697a ldr r2, [r7, #20]
  37985. 80105a4: 621a str r2, [r3, #32]
  37986. }
  37987. 80105a6: bf00 nop
  37988. 80105a8: 371c adds r7, #28
  37989. 80105aa: 46bd mov sp, r7
  37990. 80105ac: f85d 7b04 ldr.w r7, [sp], #4
  37991. 80105b0: 4770 bx lr
  37992. 080105b2 <TIM_TI2_ConfigInputStage>:
  37993. * @param TIM_ICFilter Specifies the Input Capture Filter.
  37994. * This parameter must be a value between 0x00 and 0x0F.
  37995. * @retval None
  37996. */
  37997. static void TIM_TI2_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter)
  37998. {
  37999. 80105b2: b480 push {r7}
  38000. 80105b4: b087 sub sp, #28
  38001. 80105b6: af00 add r7, sp, #0
  38002. 80105b8: 60f8 str r0, [r7, #12]
  38003. 80105ba: 60b9 str r1, [r7, #8]
  38004. 80105bc: 607a str r2, [r7, #4]
  38005. uint32_t tmpccmr1;
  38006. uint32_t tmpccer;
  38007. /* Disable the Channel 2: Reset the CC2E Bit */
  38008. tmpccer = TIMx->CCER;
  38009. 80105be: 68fb ldr r3, [r7, #12]
  38010. 80105c0: 6a1b ldr r3, [r3, #32]
  38011. 80105c2: 617b str r3, [r7, #20]
  38012. TIMx->CCER &= ~TIM_CCER_CC2E;
  38013. 80105c4: 68fb ldr r3, [r7, #12]
  38014. 80105c6: 6a1b ldr r3, [r3, #32]
  38015. 80105c8: f023 0210 bic.w r2, r3, #16
  38016. 80105cc: 68fb ldr r3, [r7, #12]
  38017. 80105ce: 621a str r2, [r3, #32]
  38018. tmpccmr1 = TIMx->CCMR1;
  38019. 80105d0: 68fb ldr r3, [r7, #12]
  38020. 80105d2: 699b ldr r3, [r3, #24]
  38021. 80105d4: 613b str r3, [r7, #16]
  38022. /* Set the filter */
  38023. tmpccmr1 &= ~TIM_CCMR1_IC2F;
  38024. 80105d6: 693b ldr r3, [r7, #16]
  38025. 80105d8: f423 4370 bic.w r3, r3, #61440 @ 0xf000
  38026. 80105dc: 613b str r3, [r7, #16]
  38027. tmpccmr1 |= (TIM_ICFilter << 12U);
  38028. 80105de: 687b ldr r3, [r7, #4]
  38029. 80105e0: 031b lsls r3, r3, #12
  38030. 80105e2: 693a ldr r2, [r7, #16]
  38031. 80105e4: 4313 orrs r3, r2
  38032. 80105e6: 613b str r3, [r7, #16]
  38033. /* Select the Polarity and set the CC2E Bit */
  38034. tmpccer &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP);
  38035. 80105e8: 697b ldr r3, [r7, #20]
  38036. 80105ea: f023 03a0 bic.w r3, r3, #160 @ 0xa0
  38037. 80105ee: 617b str r3, [r7, #20]
  38038. tmpccer |= (TIM_ICPolarity << 4U);
  38039. 80105f0: 68bb ldr r3, [r7, #8]
  38040. 80105f2: 011b lsls r3, r3, #4
  38041. 80105f4: 697a ldr r2, [r7, #20]
  38042. 80105f6: 4313 orrs r3, r2
  38043. 80105f8: 617b str r3, [r7, #20]
  38044. /* Write to TIMx CCMR1 and CCER registers */
  38045. TIMx->CCMR1 = tmpccmr1 ;
  38046. 80105fa: 68fb ldr r3, [r7, #12]
  38047. 80105fc: 693a ldr r2, [r7, #16]
  38048. 80105fe: 619a str r2, [r3, #24]
  38049. TIMx->CCER = tmpccer;
  38050. 8010600: 68fb ldr r3, [r7, #12]
  38051. 8010602: 697a ldr r2, [r7, #20]
  38052. 8010604: 621a str r2, [r3, #32]
  38053. }
  38054. 8010606: bf00 nop
  38055. 8010608: 371c adds r7, #28
  38056. 801060a: 46bd mov sp, r7
  38057. 801060c: f85d 7b04 ldr.w r7, [sp], #4
  38058. 8010610: 4770 bx lr
  38059. ...
  38060. 08010614 <TIM_ITRx_SetConfig>:
  38061. * (*) Value not defined in all devices.
  38062. *
  38063. * @retval None
  38064. */
  38065. static void TIM_ITRx_SetConfig(TIM_TypeDef *TIMx, uint32_t InputTriggerSource)
  38066. {
  38067. 8010614: b480 push {r7}
  38068. 8010616: b085 sub sp, #20
  38069. 8010618: af00 add r7, sp, #0
  38070. 801061a: 6078 str r0, [r7, #4]
  38071. 801061c: 6039 str r1, [r7, #0]
  38072. uint32_t tmpsmcr;
  38073. /* Get the TIMx SMCR register value */
  38074. tmpsmcr = TIMx->SMCR;
  38075. 801061e: 687b ldr r3, [r7, #4]
  38076. 8010620: 689b ldr r3, [r3, #8]
  38077. 8010622: 60fb str r3, [r7, #12]
  38078. /* Reset the TS Bits */
  38079. tmpsmcr &= ~TIM_SMCR_TS;
  38080. 8010624: 68fa ldr r2, [r7, #12]
  38081. 8010626: 4b09 ldr r3, [pc, #36] @ (801064c <TIM_ITRx_SetConfig+0x38>)
  38082. 8010628: 4013 ands r3, r2
  38083. 801062a: 60fb str r3, [r7, #12]
  38084. /* Set the Input Trigger source and the slave mode*/
  38085. tmpsmcr |= (InputTriggerSource | TIM_SLAVEMODE_EXTERNAL1);
  38086. 801062c: 683a ldr r2, [r7, #0]
  38087. 801062e: 68fb ldr r3, [r7, #12]
  38088. 8010630: 4313 orrs r3, r2
  38089. 8010632: f043 0307 orr.w r3, r3, #7
  38090. 8010636: 60fb str r3, [r7, #12]
  38091. /* Write to TIMx SMCR */
  38092. TIMx->SMCR = tmpsmcr;
  38093. 8010638: 687b ldr r3, [r7, #4]
  38094. 801063a: 68fa ldr r2, [r7, #12]
  38095. 801063c: 609a str r2, [r3, #8]
  38096. }
  38097. 801063e: bf00 nop
  38098. 8010640: 3714 adds r7, #20
  38099. 8010642: 46bd mov sp, r7
  38100. 8010644: f85d 7b04 ldr.w r7, [sp], #4
  38101. 8010648: 4770 bx lr
  38102. 801064a: bf00 nop
  38103. 801064c: ffcfff8f .word 0xffcfff8f
  38104. 08010650 <TIM_ETR_SetConfig>:
  38105. * This parameter must be a value between 0x00 and 0x0F
  38106. * @retval None
  38107. */
  38108. void TIM_ETR_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ExtTRGPrescaler,
  38109. uint32_t TIM_ExtTRGPolarity, uint32_t ExtTRGFilter)
  38110. {
  38111. 8010650: b480 push {r7}
  38112. 8010652: b087 sub sp, #28
  38113. 8010654: af00 add r7, sp, #0
  38114. 8010656: 60f8 str r0, [r7, #12]
  38115. 8010658: 60b9 str r1, [r7, #8]
  38116. 801065a: 607a str r2, [r7, #4]
  38117. 801065c: 603b str r3, [r7, #0]
  38118. uint32_t tmpsmcr;
  38119. tmpsmcr = TIMx->SMCR;
  38120. 801065e: 68fb ldr r3, [r7, #12]
  38121. 8010660: 689b ldr r3, [r3, #8]
  38122. 8010662: 617b str r3, [r7, #20]
  38123. /* Reset the ETR Bits */
  38124. tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP);
  38125. 8010664: 697b ldr r3, [r7, #20]
  38126. 8010666: f423 437f bic.w r3, r3, #65280 @ 0xff00
  38127. 801066a: 617b str r3, [r7, #20]
  38128. /* Set the Prescaler, the Filter value and the Polarity */
  38129. tmpsmcr |= (uint32_t)(TIM_ExtTRGPrescaler | (TIM_ExtTRGPolarity | (ExtTRGFilter << 8U)));
  38130. 801066c: 683b ldr r3, [r7, #0]
  38131. 801066e: 021a lsls r2, r3, #8
  38132. 8010670: 687b ldr r3, [r7, #4]
  38133. 8010672: 431a orrs r2, r3
  38134. 8010674: 68bb ldr r3, [r7, #8]
  38135. 8010676: 4313 orrs r3, r2
  38136. 8010678: 697a ldr r2, [r7, #20]
  38137. 801067a: 4313 orrs r3, r2
  38138. 801067c: 617b str r3, [r7, #20]
  38139. /* Write to TIMx SMCR */
  38140. TIMx->SMCR = tmpsmcr;
  38141. 801067e: 68fb ldr r3, [r7, #12]
  38142. 8010680: 697a ldr r2, [r7, #20]
  38143. 8010682: 609a str r2, [r3, #8]
  38144. }
  38145. 8010684: bf00 nop
  38146. 8010686: 371c adds r7, #28
  38147. 8010688: 46bd mov sp, r7
  38148. 801068a: f85d 7b04 ldr.w r7, [sp], #4
  38149. 801068e: 4770 bx lr
  38150. 08010690 <TIM_CCxChannelCmd>:
  38151. * @param ChannelState specifies the TIM Channel CCxE bit new state.
  38152. * This parameter can be: TIM_CCx_ENABLE or TIM_CCx_DISABLE.
  38153. * @retval None
  38154. */
  38155. void TIM_CCxChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelState)
  38156. {
  38157. 8010690: b480 push {r7}
  38158. 8010692: b087 sub sp, #28
  38159. 8010694: af00 add r7, sp, #0
  38160. 8010696: 60f8 str r0, [r7, #12]
  38161. 8010698: 60b9 str r1, [r7, #8]
  38162. 801069a: 607a str r2, [r7, #4]
  38163. /* Check the parameters */
  38164. assert_param(IS_TIM_CC1_INSTANCE(TIMx));
  38165. assert_param(IS_TIM_CHANNELS(Channel));
  38166. tmp = TIM_CCER_CC1E << (Channel & 0x1FU); /* 0x1FU = 31 bits max shift */
  38167. 801069c: 68bb ldr r3, [r7, #8]
  38168. 801069e: f003 031f and.w r3, r3, #31
  38169. 80106a2: 2201 movs r2, #1
  38170. 80106a4: fa02 f303 lsl.w r3, r2, r3
  38171. 80106a8: 617b str r3, [r7, #20]
  38172. /* Reset the CCxE Bit */
  38173. TIMx->CCER &= ~tmp;
  38174. 80106aa: 68fb ldr r3, [r7, #12]
  38175. 80106ac: 6a1a ldr r2, [r3, #32]
  38176. 80106ae: 697b ldr r3, [r7, #20]
  38177. 80106b0: 43db mvns r3, r3
  38178. 80106b2: 401a ands r2, r3
  38179. 80106b4: 68fb ldr r3, [r7, #12]
  38180. 80106b6: 621a str r2, [r3, #32]
  38181. /* Set or reset the CCxE Bit */
  38182. TIMx->CCER |= (uint32_t)(ChannelState << (Channel & 0x1FU)); /* 0x1FU = 31 bits max shift */
  38183. 80106b8: 68fb ldr r3, [r7, #12]
  38184. 80106ba: 6a1a ldr r2, [r3, #32]
  38185. 80106bc: 68bb ldr r3, [r7, #8]
  38186. 80106be: f003 031f and.w r3, r3, #31
  38187. 80106c2: 6879 ldr r1, [r7, #4]
  38188. 80106c4: fa01 f303 lsl.w r3, r1, r3
  38189. 80106c8: 431a orrs r2, r3
  38190. 80106ca: 68fb ldr r3, [r7, #12]
  38191. 80106cc: 621a str r2, [r3, #32]
  38192. }
  38193. 80106ce: bf00 nop
  38194. 80106d0: 371c adds r7, #28
  38195. 80106d2: 46bd mov sp, r7
  38196. 80106d4: f85d 7b04 ldr.w r7, [sp], #4
  38197. 80106d8: 4770 bx lr
  38198. ...
  38199. 080106dc <HAL_TIMEx_MasterConfigSynchronization>:
  38200. * mode.
  38201. * @retval HAL status
  38202. */
  38203. HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
  38204. const TIM_MasterConfigTypeDef *sMasterConfig)
  38205. {
  38206. 80106dc: b480 push {r7}
  38207. 80106de: b085 sub sp, #20
  38208. 80106e0: af00 add r7, sp, #0
  38209. 80106e2: 6078 str r0, [r7, #4]
  38210. 80106e4: 6039 str r1, [r7, #0]
  38211. assert_param(IS_TIM_MASTER_INSTANCE(htim->Instance));
  38212. assert_param(IS_TIM_TRGO_SOURCE(sMasterConfig->MasterOutputTrigger));
  38213. assert_param(IS_TIM_MSM_STATE(sMasterConfig->MasterSlaveMode));
  38214. /* Check input state */
  38215. __HAL_LOCK(htim);
  38216. 80106e6: 687b ldr r3, [r7, #4]
  38217. 80106e8: f893 303c ldrb.w r3, [r3, #60] @ 0x3c
  38218. 80106ec: 2b01 cmp r3, #1
  38219. 80106ee: d101 bne.n 80106f4 <HAL_TIMEx_MasterConfigSynchronization+0x18>
  38220. 80106f0: 2302 movs r3, #2
  38221. 80106f2: e06d b.n 80107d0 <HAL_TIMEx_MasterConfigSynchronization+0xf4>
  38222. 80106f4: 687b ldr r3, [r7, #4]
  38223. 80106f6: 2201 movs r2, #1
  38224. 80106f8: f883 203c strb.w r2, [r3, #60] @ 0x3c
  38225. /* Change the handler state */
  38226. htim->State = HAL_TIM_STATE_BUSY;
  38227. 80106fc: 687b ldr r3, [r7, #4]
  38228. 80106fe: 2202 movs r2, #2
  38229. 8010700: f883 203d strb.w r2, [r3, #61] @ 0x3d
  38230. /* Get the TIMx CR2 register value */
  38231. tmpcr2 = htim->Instance->CR2;
  38232. 8010704: 687b ldr r3, [r7, #4]
  38233. 8010706: 681b ldr r3, [r3, #0]
  38234. 8010708: 685b ldr r3, [r3, #4]
  38235. 801070a: 60fb str r3, [r7, #12]
  38236. /* Get the TIMx SMCR register value */
  38237. tmpsmcr = htim->Instance->SMCR;
  38238. 801070c: 687b ldr r3, [r7, #4]
  38239. 801070e: 681b ldr r3, [r3, #0]
  38240. 8010710: 689b ldr r3, [r3, #8]
  38241. 8010712: 60bb str r3, [r7, #8]
  38242. /* If the timer supports ADC synchronization through TRGO2, set the master mode selection 2 */
  38243. if (IS_TIM_TRGO2_INSTANCE(htim->Instance))
  38244. 8010714: 687b ldr r3, [r7, #4]
  38245. 8010716: 681b ldr r3, [r3, #0]
  38246. 8010718: 4a30 ldr r2, [pc, #192] @ (80107dc <HAL_TIMEx_MasterConfigSynchronization+0x100>)
  38247. 801071a: 4293 cmp r3, r2
  38248. 801071c: d004 beq.n 8010728 <HAL_TIMEx_MasterConfigSynchronization+0x4c>
  38249. 801071e: 687b ldr r3, [r7, #4]
  38250. 8010720: 681b ldr r3, [r3, #0]
  38251. 8010722: 4a2f ldr r2, [pc, #188] @ (80107e0 <HAL_TIMEx_MasterConfigSynchronization+0x104>)
  38252. 8010724: 4293 cmp r3, r2
  38253. 8010726: d108 bne.n 801073a <HAL_TIMEx_MasterConfigSynchronization+0x5e>
  38254. {
  38255. /* Check the parameters */
  38256. assert_param(IS_TIM_TRGO2_SOURCE(sMasterConfig->MasterOutputTrigger2));
  38257. /* Clear the MMS2 bits */
  38258. tmpcr2 &= ~TIM_CR2_MMS2;
  38259. 8010728: 68fb ldr r3, [r7, #12]
  38260. 801072a: f423 0370 bic.w r3, r3, #15728640 @ 0xf00000
  38261. 801072e: 60fb str r3, [r7, #12]
  38262. /* Select the TRGO2 source*/
  38263. tmpcr2 |= sMasterConfig->MasterOutputTrigger2;
  38264. 8010730: 683b ldr r3, [r7, #0]
  38265. 8010732: 685b ldr r3, [r3, #4]
  38266. 8010734: 68fa ldr r2, [r7, #12]
  38267. 8010736: 4313 orrs r3, r2
  38268. 8010738: 60fb str r3, [r7, #12]
  38269. }
  38270. /* Reset the MMS Bits */
  38271. tmpcr2 &= ~TIM_CR2_MMS;
  38272. 801073a: 68fb ldr r3, [r7, #12]
  38273. 801073c: f023 0370 bic.w r3, r3, #112 @ 0x70
  38274. 8010740: 60fb str r3, [r7, #12]
  38275. /* Select the TRGO source */
  38276. tmpcr2 |= sMasterConfig->MasterOutputTrigger;
  38277. 8010742: 683b ldr r3, [r7, #0]
  38278. 8010744: 681b ldr r3, [r3, #0]
  38279. 8010746: 68fa ldr r2, [r7, #12]
  38280. 8010748: 4313 orrs r3, r2
  38281. 801074a: 60fb str r3, [r7, #12]
  38282. /* Update TIMx CR2 */
  38283. htim->Instance->CR2 = tmpcr2;
  38284. 801074c: 687b ldr r3, [r7, #4]
  38285. 801074e: 681b ldr r3, [r3, #0]
  38286. 8010750: 68fa ldr r2, [r7, #12]
  38287. 8010752: 605a str r2, [r3, #4]
  38288. if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
  38289. 8010754: 687b ldr r3, [r7, #4]
  38290. 8010756: 681b ldr r3, [r3, #0]
  38291. 8010758: 4a20 ldr r2, [pc, #128] @ (80107dc <HAL_TIMEx_MasterConfigSynchronization+0x100>)
  38292. 801075a: 4293 cmp r3, r2
  38293. 801075c: d022 beq.n 80107a4 <HAL_TIMEx_MasterConfigSynchronization+0xc8>
  38294. 801075e: 687b ldr r3, [r7, #4]
  38295. 8010760: 681b ldr r3, [r3, #0]
  38296. 8010762: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  38297. 8010766: d01d beq.n 80107a4 <HAL_TIMEx_MasterConfigSynchronization+0xc8>
  38298. 8010768: 687b ldr r3, [r7, #4]
  38299. 801076a: 681b ldr r3, [r3, #0]
  38300. 801076c: 4a1d ldr r2, [pc, #116] @ (80107e4 <HAL_TIMEx_MasterConfigSynchronization+0x108>)
  38301. 801076e: 4293 cmp r3, r2
  38302. 8010770: d018 beq.n 80107a4 <HAL_TIMEx_MasterConfigSynchronization+0xc8>
  38303. 8010772: 687b ldr r3, [r7, #4]
  38304. 8010774: 681b ldr r3, [r3, #0]
  38305. 8010776: 4a1c ldr r2, [pc, #112] @ (80107e8 <HAL_TIMEx_MasterConfigSynchronization+0x10c>)
  38306. 8010778: 4293 cmp r3, r2
  38307. 801077a: d013 beq.n 80107a4 <HAL_TIMEx_MasterConfigSynchronization+0xc8>
  38308. 801077c: 687b ldr r3, [r7, #4]
  38309. 801077e: 681b ldr r3, [r3, #0]
  38310. 8010780: 4a1a ldr r2, [pc, #104] @ (80107ec <HAL_TIMEx_MasterConfigSynchronization+0x110>)
  38311. 8010782: 4293 cmp r3, r2
  38312. 8010784: d00e beq.n 80107a4 <HAL_TIMEx_MasterConfigSynchronization+0xc8>
  38313. 8010786: 687b ldr r3, [r7, #4]
  38314. 8010788: 681b ldr r3, [r3, #0]
  38315. 801078a: 4a15 ldr r2, [pc, #84] @ (80107e0 <HAL_TIMEx_MasterConfigSynchronization+0x104>)
  38316. 801078c: 4293 cmp r3, r2
  38317. 801078e: d009 beq.n 80107a4 <HAL_TIMEx_MasterConfigSynchronization+0xc8>
  38318. 8010790: 687b ldr r3, [r7, #4]
  38319. 8010792: 681b ldr r3, [r3, #0]
  38320. 8010794: 4a16 ldr r2, [pc, #88] @ (80107f0 <HAL_TIMEx_MasterConfigSynchronization+0x114>)
  38321. 8010796: 4293 cmp r3, r2
  38322. 8010798: d004 beq.n 80107a4 <HAL_TIMEx_MasterConfigSynchronization+0xc8>
  38323. 801079a: 687b ldr r3, [r7, #4]
  38324. 801079c: 681b ldr r3, [r3, #0]
  38325. 801079e: 4a15 ldr r2, [pc, #84] @ (80107f4 <HAL_TIMEx_MasterConfigSynchronization+0x118>)
  38326. 80107a0: 4293 cmp r3, r2
  38327. 80107a2: d10c bne.n 80107be <HAL_TIMEx_MasterConfigSynchronization+0xe2>
  38328. {
  38329. /* Reset the MSM Bit */
  38330. tmpsmcr &= ~TIM_SMCR_MSM;
  38331. 80107a4: 68bb ldr r3, [r7, #8]
  38332. 80107a6: f023 0380 bic.w r3, r3, #128 @ 0x80
  38333. 80107aa: 60bb str r3, [r7, #8]
  38334. /* Set master mode */
  38335. tmpsmcr |= sMasterConfig->MasterSlaveMode;
  38336. 80107ac: 683b ldr r3, [r7, #0]
  38337. 80107ae: 689b ldr r3, [r3, #8]
  38338. 80107b0: 68ba ldr r2, [r7, #8]
  38339. 80107b2: 4313 orrs r3, r2
  38340. 80107b4: 60bb str r3, [r7, #8]
  38341. /* Update TIMx SMCR */
  38342. htim->Instance->SMCR = tmpsmcr;
  38343. 80107b6: 687b ldr r3, [r7, #4]
  38344. 80107b8: 681b ldr r3, [r3, #0]
  38345. 80107ba: 68ba ldr r2, [r7, #8]
  38346. 80107bc: 609a str r2, [r3, #8]
  38347. }
  38348. /* Change the htim state */
  38349. htim->State = HAL_TIM_STATE_READY;
  38350. 80107be: 687b ldr r3, [r7, #4]
  38351. 80107c0: 2201 movs r2, #1
  38352. 80107c2: f883 203d strb.w r2, [r3, #61] @ 0x3d
  38353. __HAL_UNLOCK(htim);
  38354. 80107c6: 687b ldr r3, [r7, #4]
  38355. 80107c8: 2200 movs r2, #0
  38356. 80107ca: f883 203c strb.w r2, [r3, #60] @ 0x3c
  38357. return HAL_OK;
  38358. 80107ce: 2300 movs r3, #0
  38359. }
  38360. 80107d0: 4618 mov r0, r3
  38361. 80107d2: 3714 adds r7, #20
  38362. 80107d4: 46bd mov sp, r7
  38363. 80107d6: f85d 7b04 ldr.w r7, [sp], #4
  38364. 80107da: 4770 bx lr
  38365. 80107dc: 40010000 .word 0x40010000
  38366. 80107e0: 40010400 .word 0x40010400
  38367. 80107e4: 40000400 .word 0x40000400
  38368. 80107e8: 40000800 .word 0x40000800
  38369. 80107ec: 40000c00 .word 0x40000c00
  38370. 80107f0: 40001800 .word 0x40001800
  38371. 80107f4: 40014000 .word 0x40014000
  38372. 080107f8 <HAL_TIMEx_ConfigBreakDeadTime>:
  38373. * interrupt can be enabled by calling the @ref __HAL_TIM_ENABLE_IT macro.
  38374. * @retval HAL status
  38375. */
  38376. HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim,
  38377. const TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig)
  38378. {
  38379. 80107f8: b480 push {r7}
  38380. 80107fa: b085 sub sp, #20
  38381. 80107fc: af00 add r7, sp, #0
  38382. 80107fe: 6078 str r0, [r7, #4]
  38383. 8010800: 6039 str r1, [r7, #0]
  38384. /* Keep this variable initialized to 0 as it is used to configure BDTR register */
  38385. uint32_t tmpbdtr = 0U;
  38386. 8010802: 2300 movs r3, #0
  38387. 8010804: 60fb str r3, [r7, #12]
  38388. #if defined(TIM_BDTR_BKBID)
  38389. assert_param(IS_TIM_BREAK_AFMODE(sBreakDeadTimeConfig->BreakAFMode));
  38390. #endif /* TIM_BDTR_BKBID */
  38391. /* Check input state */
  38392. __HAL_LOCK(htim);
  38393. 8010806: 687b ldr r3, [r7, #4]
  38394. 8010808: f893 303c ldrb.w r3, [r3, #60] @ 0x3c
  38395. 801080c: 2b01 cmp r3, #1
  38396. 801080e: d101 bne.n 8010814 <HAL_TIMEx_ConfigBreakDeadTime+0x1c>
  38397. 8010810: 2302 movs r3, #2
  38398. 8010812: e065 b.n 80108e0 <HAL_TIMEx_ConfigBreakDeadTime+0xe8>
  38399. 8010814: 687b ldr r3, [r7, #4]
  38400. 8010816: 2201 movs r2, #1
  38401. 8010818: f883 203c strb.w r2, [r3, #60] @ 0x3c
  38402. /* Set the Lock level, the Break enable Bit and the Polarity, the OSSR State,
  38403. the OSSI State, the dead time value and the Automatic Output Enable Bit */
  38404. /* Set the BDTR bits */
  38405. MODIFY_REG(tmpbdtr, TIM_BDTR_DTG, sBreakDeadTimeConfig->DeadTime);
  38406. 801081c: 68fb ldr r3, [r7, #12]
  38407. 801081e: f023 02ff bic.w r2, r3, #255 @ 0xff
  38408. 8010822: 683b ldr r3, [r7, #0]
  38409. 8010824: 68db ldr r3, [r3, #12]
  38410. 8010826: 4313 orrs r3, r2
  38411. 8010828: 60fb str r3, [r7, #12]
  38412. MODIFY_REG(tmpbdtr, TIM_BDTR_LOCK, sBreakDeadTimeConfig->LockLevel);
  38413. 801082a: 68fb ldr r3, [r7, #12]
  38414. 801082c: f423 7240 bic.w r2, r3, #768 @ 0x300
  38415. 8010830: 683b ldr r3, [r7, #0]
  38416. 8010832: 689b ldr r3, [r3, #8]
  38417. 8010834: 4313 orrs r3, r2
  38418. 8010836: 60fb str r3, [r7, #12]
  38419. MODIFY_REG(tmpbdtr, TIM_BDTR_OSSI, sBreakDeadTimeConfig->OffStateIDLEMode);
  38420. 8010838: 68fb ldr r3, [r7, #12]
  38421. 801083a: f423 6280 bic.w r2, r3, #1024 @ 0x400
  38422. 801083e: 683b ldr r3, [r7, #0]
  38423. 8010840: 685b ldr r3, [r3, #4]
  38424. 8010842: 4313 orrs r3, r2
  38425. 8010844: 60fb str r3, [r7, #12]
  38426. MODIFY_REG(tmpbdtr, TIM_BDTR_OSSR, sBreakDeadTimeConfig->OffStateRunMode);
  38427. 8010846: 68fb ldr r3, [r7, #12]
  38428. 8010848: f423 6200 bic.w r2, r3, #2048 @ 0x800
  38429. 801084c: 683b ldr r3, [r7, #0]
  38430. 801084e: 681b ldr r3, [r3, #0]
  38431. 8010850: 4313 orrs r3, r2
  38432. 8010852: 60fb str r3, [r7, #12]
  38433. MODIFY_REG(tmpbdtr, TIM_BDTR_BKE, sBreakDeadTimeConfig->BreakState);
  38434. 8010854: 68fb ldr r3, [r7, #12]
  38435. 8010856: f423 5280 bic.w r2, r3, #4096 @ 0x1000
  38436. 801085a: 683b ldr r3, [r7, #0]
  38437. 801085c: 691b ldr r3, [r3, #16]
  38438. 801085e: 4313 orrs r3, r2
  38439. 8010860: 60fb str r3, [r7, #12]
  38440. MODIFY_REG(tmpbdtr, TIM_BDTR_BKP, sBreakDeadTimeConfig->BreakPolarity);
  38441. 8010862: 68fb ldr r3, [r7, #12]
  38442. 8010864: f423 5200 bic.w r2, r3, #8192 @ 0x2000
  38443. 8010868: 683b ldr r3, [r7, #0]
  38444. 801086a: 695b ldr r3, [r3, #20]
  38445. 801086c: 4313 orrs r3, r2
  38446. 801086e: 60fb str r3, [r7, #12]
  38447. MODIFY_REG(tmpbdtr, TIM_BDTR_AOE, sBreakDeadTimeConfig->AutomaticOutput);
  38448. 8010870: 68fb ldr r3, [r7, #12]
  38449. 8010872: f423 4280 bic.w r2, r3, #16384 @ 0x4000
  38450. 8010876: 683b ldr r3, [r7, #0]
  38451. 8010878: 6a9b ldr r3, [r3, #40] @ 0x28
  38452. 801087a: 4313 orrs r3, r2
  38453. 801087c: 60fb str r3, [r7, #12]
  38454. MODIFY_REG(tmpbdtr, TIM_BDTR_BKF, (sBreakDeadTimeConfig->BreakFilter << TIM_BDTR_BKF_Pos));
  38455. 801087e: 68fb ldr r3, [r7, #12]
  38456. 8010880: f423 2270 bic.w r2, r3, #983040 @ 0xf0000
  38457. 8010884: 683b ldr r3, [r7, #0]
  38458. 8010886: 699b ldr r3, [r3, #24]
  38459. 8010888: 041b lsls r3, r3, #16
  38460. 801088a: 4313 orrs r3, r2
  38461. 801088c: 60fb str r3, [r7, #12]
  38462. #if defined(TIM_BDTR_BKBID)
  38463. MODIFY_REG(tmpbdtr, TIM_BDTR_BKBID, sBreakDeadTimeConfig->BreakAFMode);
  38464. #endif /* TIM_BDTR_BKBID */
  38465. if (IS_TIM_BKIN2_INSTANCE(htim->Instance))
  38466. 801088e: 687b ldr r3, [r7, #4]
  38467. 8010890: 681b ldr r3, [r3, #0]
  38468. 8010892: 4a16 ldr r2, [pc, #88] @ (80108ec <HAL_TIMEx_ConfigBreakDeadTime+0xf4>)
  38469. 8010894: 4293 cmp r3, r2
  38470. 8010896: d004 beq.n 80108a2 <HAL_TIMEx_ConfigBreakDeadTime+0xaa>
  38471. 8010898: 687b ldr r3, [r7, #4]
  38472. 801089a: 681b ldr r3, [r3, #0]
  38473. 801089c: 4a14 ldr r2, [pc, #80] @ (80108f0 <HAL_TIMEx_ConfigBreakDeadTime+0xf8>)
  38474. 801089e: 4293 cmp r3, r2
  38475. 80108a0: d115 bne.n 80108ce <HAL_TIMEx_ConfigBreakDeadTime+0xd6>
  38476. #if defined(TIM_BDTR_BKBID)
  38477. assert_param(IS_TIM_BREAK2_AFMODE(sBreakDeadTimeConfig->Break2AFMode));
  38478. #endif /* TIM_BDTR_BKBID */
  38479. /* Set the BREAK2 input related BDTR bits */
  38480. MODIFY_REG(tmpbdtr, TIM_BDTR_BK2F, (sBreakDeadTimeConfig->Break2Filter << TIM_BDTR_BK2F_Pos));
  38481. 80108a2: 68fb ldr r3, [r7, #12]
  38482. 80108a4: f423 0270 bic.w r2, r3, #15728640 @ 0xf00000
  38483. 80108a8: 683b ldr r3, [r7, #0]
  38484. 80108aa: 6a5b ldr r3, [r3, #36] @ 0x24
  38485. 80108ac: 051b lsls r3, r3, #20
  38486. 80108ae: 4313 orrs r3, r2
  38487. 80108b0: 60fb str r3, [r7, #12]
  38488. MODIFY_REG(tmpbdtr, TIM_BDTR_BK2E, sBreakDeadTimeConfig->Break2State);
  38489. 80108b2: 68fb ldr r3, [r7, #12]
  38490. 80108b4: f023 7280 bic.w r2, r3, #16777216 @ 0x1000000
  38491. 80108b8: 683b ldr r3, [r7, #0]
  38492. 80108ba: 69db ldr r3, [r3, #28]
  38493. 80108bc: 4313 orrs r3, r2
  38494. 80108be: 60fb str r3, [r7, #12]
  38495. MODIFY_REG(tmpbdtr, TIM_BDTR_BK2P, sBreakDeadTimeConfig->Break2Polarity);
  38496. 80108c0: 68fb ldr r3, [r7, #12]
  38497. 80108c2: f023 7200 bic.w r2, r3, #33554432 @ 0x2000000
  38498. 80108c6: 683b ldr r3, [r7, #0]
  38499. 80108c8: 6a1b ldr r3, [r3, #32]
  38500. 80108ca: 4313 orrs r3, r2
  38501. 80108cc: 60fb str r3, [r7, #12]
  38502. MODIFY_REG(tmpbdtr, TIM_BDTR_BK2BID, sBreakDeadTimeConfig->Break2AFMode);
  38503. #endif /* TIM_BDTR_BKBID */
  38504. }
  38505. /* Set TIMx_BDTR */
  38506. htim->Instance->BDTR = tmpbdtr;
  38507. 80108ce: 687b ldr r3, [r7, #4]
  38508. 80108d0: 681b ldr r3, [r3, #0]
  38509. 80108d2: 68fa ldr r2, [r7, #12]
  38510. 80108d4: 645a str r2, [r3, #68] @ 0x44
  38511. __HAL_UNLOCK(htim);
  38512. 80108d6: 687b ldr r3, [r7, #4]
  38513. 80108d8: 2200 movs r2, #0
  38514. 80108da: f883 203c strb.w r2, [r3, #60] @ 0x3c
  38515. return HAL_OK;
  38516. 80108de: 2300 movs r3, #0
  38517. }
  38518. 80108e0: 4618 mov r0, r3
  38519. 80108e2: 3714 adds r7, #20
  38520. 80108e4: 46bd mov sp, r7
  38521. 80108e6: f85d 7b04 ldr.w r7, [sp], #4
  38522. 80108ea: 4770 bx lr
  38523. 80108ec: 40010000 .word 0x40010000
  38524. 80108f0: 40010400 .word 0x40010400
  38525. 080108f4 <HAL_TIMEx_CommutCallback>:
  38526. * @brief Commutation callback in non-blocking mode
  38527. * @param htim TIM handle
  38528. * @retval None
  38529. */
  38530. __weak void HAL_TIMEx_CommutCallback(TIM_HandleTypeDef *htim)
  38531. {
  38532. 80108f4: b480 push {r7}
  38533. 80108f6: b083 sub sp, #12
  38534. 80108f8: af00 add r7, sp, #0
  38535. 80108fa: 6078 str r0, [r7, #4]
  38536. UNUSED(htim);
  38537. /* NOTE : This function should not be modified, when the callback is needed,
  38538. the HAL_TIMEx_CommutCallback could be implemented in the user file
  38539. */
  38540. }
  38541. 80108fc: bf00 nop
  38542. 80108fe: 370c adds r7, #12
  38543. 8010900: 46bd mov sp, r7
  38544. 8010902: f85d 7b04 ldr.w r7, [sp], #4
  38545. 8010906: 4770 bx lr
  38546. 08010908 <HAL_TIMEx_BreakCallback>:
  38547. * @brief Break detection callback in non-blocking mode
  38548. * @param htim TIM handle
  38549. * @retval None
  38550. */
  38551. __weak void HAL_TIMEx_BreakCallback(TIM_HandleTypeDef *htim)
  38552. {
  38553. 8010908: b480 push {r7}
  38554. 801090a: b083 sub sp, #12
  38555. 801090c: af00 add r7, sp, #0
  38556. 801090e: 6078 str r0, [r7, #4]
  38557. UNUSED(htim);
  38558. /* NOTE : This function should not be modified, when the callback is needed,
  38559. the HAL_TIMEx_BreakCallback could be implemented in the user file
  38560. */
  38561. }
  38562. 8010910: bf00 nop
  38563. 8010912: 370c adds r7, #12
  38564. 8010914: 46bd mov sp, r7
  38565. 8010916: f85d 7b04 ldr.w r7, [sp], #4
  38566. 801091a: 4770 bx lr
  38567. 0801091c <HAL_TIMEx_Break2Callback>:
  38568. * @brief Break2 detection callback in non blocking mode
  38569. * @param htim: TIM handle
  38570. * @retval None
  38571. */
  38572. __weak void HAL_TIMEx_Break2Callback(TIM_HandleTypeDef *htim)
  38573. {
  38574. 801091c: b480 push {r7}
  38575. 801091e: b083 sub sp, #12
  38576. 8010920: af00 add r7, sp, #0
  38577. 8010922: 6078 str r0, [r7, #4]
  38578. UNUSED(htim);
  38579. /* NOTE : This function Should not be modified, when the callback is needed,
  38580. the HAL_TIMEx_Break2Callback could be implemented in the user file
  38581. */
  38582. }
  38583. 8010924: bf00 nop
  38584. 8010926: 370c adds r7, #12
  38585. 8010928: 46bd mov sp, r7
  38586. 801092a: f85d 7b04 ldr.w r7, [sp], #4
  38587. 801092e: 4770 bx lr
  38588. 08010930 <HAL_UART_Init>:
  38589. * parameters in the UART_InitTypeDef and initialize the associated handle.
  38590. * @param huart UART handle.
  38591. * @retval HAL status
  38592. */
  38593. HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart)
  38594. {
  38595. 8010930: b580 push {r7, lr}
  38596. 8010932: b082 sub sp, #8
  38597. 8010934: af00 add r7, sp, #0
  38598. 8010936: 6078 str r0, [r7, #4]
  38599. /* Check the UART handle allocation */
  38600. if (huart == NULL)
  38601. 8010938: 687b ldr r3, [r7, #4]
  38602. 801093a: 2b00 cmp r3, #0
  38603. 801093c: d101 bne.n 8010942 <HAL_UART_Init+0x12>
  38604. {
  38605. return HAL_ERROR;
  38606. 801093e: 2301 movs r3, #1
  38607. 8010940: e042 b.n 80109c8 <HAL_UART_Init+0x98>
  38608. {
  38609. /* Check the parameters */
  38610. assert_param((IS_UART_INSTANCE(huart->Instance)) || (IS_LPUART_INSTANCE(huart->Instance)));
  38611. }
  38612. if (huart->gState == HAL_UART_STATE_RESET)
  38613. 8010942: 687b ldr r3, [r7, #4]
  38614. 8010944: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  38615. 8010948: 2b00 cmp r3, #0
  38616. 801094a: d106 bne.n 801095a <HAL_UART_Init+0x2a>
  38617. {
  38618. /* Allocate lock resource and initialize it */
  38619. huart->Lock = HAL_UNLOCKED;
  38620. 801094c: 687b ldr r3, [r7, #4]
  38621. 801094e: 2200 movs r2, #0
  38622. 8010950: f883 2084 strb.w r2, [r3, #132] @ 0x84
  38623. /* Init the low level hardware */
  38624. huart->MspInitCallback(huart);
  38625. #else
  38626. /* Init the low level hardware : GPIO, CLOCK */
  38627. HAL_UART_MspInit(huart);
  38628. 8010954: 6878 ldr r0, [r7, #4]
  38629. 8010956: f7f3 fcab bl 80042b0 <HAL_UART_MspInit>
  38630. #endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */
  38631. }
  38632. huart->gState = HAL_UART_STATE_BUSY;
  38633. 801095a: 687b ldr r3, [r7, #4]
  38634. 801095c: 2224 movs r2, #36 @ 0x24
  38635. 801095e: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  38636. __HAL_UART_DISABLE(huart);
  38637. 8010962: 687b ldr r3, [r7, #4]
  38638. 8010964: 681b ldr r3, [r3, #0]
  38639. 8010966: 681a ldr r2, [r3, #0]
  38640. 8010968: 687b ldr r3, [r7, #4]
  38641. 801096a: 681b ldr r3, [r3, #0]
  38642. 801096c: f022 0201 bic.w r2, r2, #1
  38643. 8010970: 601a str r2, [r3, #0]
  38644. /* Perform advanced settings configuration */
  38645. /* For some items, configuration requires to be done prior TE and RE bits are set */
  38646. if (huart->AdvancedInit.AdvFeatureInit != UART_ADVFEATURE_NO_INIT)
  38647. 8010972: 687b ldr r3, [r7, #4]
  38648. 8010974: 6a9b ldr r3, [r3, #40] @ 0x28
  38649. 8010976: 2b00 cmp r3, #0
  38650. 8010978: d002 beq.n 8010980 <HAL_UART_Init+0x50>
  38651. {
  38652. UART_AdvFeatureConfig(huart);
  38653. 801097a: 6878 ldr r0, [r7, #4]
  38654. 801097c: f001 f9e8 bl 8011d50 <UART_AdvFeatureConfig>
  38655. }
  38656. /* Set the UART Communication parameters */
  38657. if (UART_SetConfig(huart) == HAL_ERROR)
  38658. 8010980: 6878 ldr r0, [r7, #4]
  38659. 8010982: f000 fc7d bl 8011280 <UART_SetConfig>
  38660. 8010986: 4603 mov r3, r0
  38661. 8010988: 2b01 cmp r3, #1
  38662. 801098a: d101 bne.n 8010990 <HAL_UART_Init+0x60>
  38663. {
  38664. return HAL_ERROR;
  38665. 801098c: 2301 movs r3, #1
  38666. 801098e: e01b b.n 80109c8 <HAL_UART_Init+0x98>
  38667. }
  38668. /* In asynchronous mode, the following bits must be kept cleared:
  38669. - LINEN and CLKEN bits in the USART_CR2 register,
  38670. - SCEN, HDSEL and IREN bits in the USART_CR3 register.*/
  38671. CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN));
  38672. 8010990: 687b ldr r3, [r7, #4]
  38673. 8010992: 681b ldr r3, [r3, #0]
  38674. 8010994: 685a ldr r2, [r3, #4]
  38675. 8010996: 687b ldr r3, [r7, #4]
  38676. 8010998: 681b ldr r3, [r3, #0]
  38677. 801099a: f422 4290 bic.w r2, r2, #18432 @ 0x4800
  38678. 801099e: 605a str r2, [r3, #4]
  38679. CLEAR_BIT(huart->Instance->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN));
  38680. 80109a0: 687b ldr r3, [r7, #4]
  38681. 80109a2: 681b ldr r3, [r3, #0]
  38682. 80109a4: 689a ldr r2, [r3, #8]
  38683. 80109a6: 687b ldr r3, [r7, #4]
  38684. 80109a8: 681b ldr r3, [r3, #0]
  38685. 80109aa: f022 022a bic.w r2, r2, #42 @ 0x2a
  38686. 80109ae: 609a str r2, [r3, #8]
  38687. __HAL_UART_ENABLE(huart);
  38688. 80109b0: 687b ldr r3, [r7, #4]
  38689. 80109b2: 681b ldr r3, [r3, #0]
  38690. 80109b4: 681a ldr r2, [r3, #0]
  38691. 80109b6: 687b ldr r3, [r7, #4]
  38692. 80109b8: 681b ldr r3, [r3, #0]
  38693. 80109ba: f042 0201 orr.w r2, r2, #1
  38694. 80109be: 601a str r2, [r3, #0]
  38695. /* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */
  38696. return (UART_CheckIdleState(huart));
  38697. 80109c0: 6878 ldr r0, [r7, #4]
  38698. 80109c2: f001 fa67 bl 8011e94 <UART_CheckIdleState>
  38699. 80109c6: 4603 mov r3, r0
  38700. }
  38701. 80109c8: 4618 mov r0, r3
  38702. 80109ca: 3708 adds r7, #8
  38703. 80109cc: 46bd mov sp, r7
  38704. 80109ce: bd80 pop {r7, pc}
  38705. 080109d0 <HAL_UART_Transmit_IT>:
  38706. * @param pData Pointer to data buffer (u8 or u16 data elements).
  38707. * @param Size Amount of data elements (u8 or u16) to be sent.
  38708. * @retval HAL status
  38709. */
  38710. HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size)
  38711. {
  38712. 80109d0: b480 push {r7}
  38713. 80109d2: b091 sub sp, #68 @ 0x44
  38714. 80109d4: af00 add r7, sp, #0
  38715. 80109d6: 60f8 str r0, [r7, #12]
  38716. 80109d8: 60b9 str r1, [r7, #8]
  38717. 80109da: 4613 mov r3, r2
  38718. 80109dc: 80fb strh r3, [r7, #6]
  38719. /* Check that a Tx process is not already ongoing */
  38720. if (huart->gState == HAL_UART_STATE_READY)
  38721. 80109de: 68fb ldr r3, [r7, #12]
  38722. 80109e0: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  38723. 80109e4: 2b20 cmp r3, #32
  38724. 80109e6: d178 bne.n 8010ada <HAL_UART_Transmit_IT+0x10a>
  38725. {
  38726. if ((pData == NULL) || (Size == 0U))
  38727. 80109e8: 68bb ldr r3, [r7, #8]
  38728. 80109ea: 2b00 cmp r3, #0
  38729. 80109ec: d002 beq.n 80109f4 <HAL_UART_Transmit_IT+0x24>
  38730. 80109ee: 88fb ldrh r3, [r7, #6]
  38731. 80109f0: 2b00 cmp r3, #0
  38732. 80109f2: d101 bne.n 80109f8 <HAL_UART_Transmit_IT+0x28>
  38733. {
  38734. return HAL_ERROR;
  38735. 80109f4: 2301 movs r3, #1
  38736. 80109f6: e071 b.n 8010adc <HAL_UART_Transmit_IT+0x10c>
  38737. }
  38738. huart->pTxBuffPtr = pData;
  38739. 80109f8: 68fb ldr r3, [r7, #12]
  38740. 80109fa: 68ba ldr r2, [r7, #8]
  38741. 80109fc: 651a str r2, [r3, #80] @ 0x50
  38742. huart->TxXferSize = Size;
  38743. 80109fe: 68fb ldr r3, [r7, #12]
  38744. 8010a00: 88fa ldrh r2, [r7, #6]
  38745. 8010a02: f8a3 2054 strh.w r2, [r3, #84] @ 0x54
  38746. huart->TxXferCount = Size;
  38747. 8010a06: 68fb ldr r3, [r7, #12]
  38748. 8010a08: 88fa ldrh r2, [r7, #6]
  38749. 8010a0a: f8a3 2056 strh.w r2, [r3, #86] @ 0x56
  38750. huart->TxISR = NULL;
  38751. 8010a0e: 68fb ldr r3, [r7, #12]
  38752. 8010a10: 2200 movs r2, #0
  38753. 8010a12: 679a str r2, [r3, #120] @ 0x78
  38754. huart->ErrorCode = HAL_UART_ERROR_NONE;
  38755. 8010a14: 68fb ldr r3, [r7, #12]
  38756. 8010a16: 2200 movs r2, #0
  38757. 8010a18: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  38758. huart->gState = HAL_UART_STATE_BUSY_TX;
  38759. 8010a1c: 68fb ldr r3, [r7, #12]
  38760. 8010a1e: 2221 movs r2, #33 @ 0x21
  38761. 8010a20: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  38762. /* Configure Tx interrupt processing */
  38763. if (huart->FifoMode == UART_FIFOMODE_ENABLE)
  38764. 8010a24: 68fb ldr r3, [r7, #12]
  38765. 8010a26: 6e5b ldr r3, [r3, #100] @ 0x64
  38766. 8010a28: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  38767. 8010a2c: d12a bne.n 8010a84 <HAL_UART_Transmit_IT+0xb4>
  38768. {
  38769. /* Set the Tx ISR function pointer according to the data word length */
  38770. if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE))
  38771. 8010a2e: 68fb ldr r3, [r7, #12]
  38772. 8010a30: 689b ldr r3, [r3, #8]
  38773. 8010a32: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  38774. 8010a36: d107 bne.n 8010a48 <HAL_UART_Transmit_IT+0x78>
  38775. 8010a38: 68fb ldr r3, [r7, #12]
  38776. 8010a3a: 691b ldr r3, [r3, #16]
  38777. 8010a3c: 2b00 cmp r3, #0
  38778. 8010a3e: d103 bne.n 8010a48 <HAL_UART_Transmit_IT+0x78>
  38779. {
  38780. huart->TxISR = UART_TxISR_16BIT_FIFOEN;
  38781. 8010a40: 68fb ldr r3, [r7, #12]
  38782. 8010a42: 4a29 ldr r2, [pc, #164] @ (8010ae8 <HAL_UART_Transmit_IT+0x118>)
  38783. 8010a44: 679a str r2, [r3, #120] @ 0x78
  38784. 8010a46: e002 b.n 8010a4e <HAL_UART_Transmit_IT+0x7e>
  38785. }
  38786. else
  38787. {
  38788. huart->TxISR = UART_TxISR_8BIT_FIFOEN;
  38789. 8010a48: 68fb ldr r3, [r7, #12]
  38790. 8010a4a: 4a28 ldr r2, [pc, #160] @ (8010aec <HAL_UART_Transmit_IT+0x11c>)
  38791. 8010a4c: 679a str r2, [r3, #120] @ 0x78
  38792. }
  38793. /* Enable the TX FIFO threshold interrupt */
  38794. ATOMIC_SET_BIT(huart->Instance->CR3, USART_CR3_TXFTIE);
  38795. 8010a4e: 68fb ldr r3, [r7, #12]
  38796. 8010a50: 681b ldr r3, [r3, #0]
  38797. 8010a52: 3308 adds r3, #8
  38798. 8010a54: 62bb str r3, [r7, #40] @ 0x28
  38799. */
  38800. __STATIC_FORCEINLINE uint32_t __LDREXW(volatile uint32_t *addr)
  38801. {
  38802. uint32_t result;
  38803. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  38804. 8010a56: 6abb ldr r3, [r7, #40] @ 0x28
  38805. 8010a58: e853 3f00 ldrex r3, [r3]
  38806. 8010a5c: 627b str r3, [r7, #36] @ 0x24
  38807. return(result);
  38808. 8010a5e: 6a7b ldr r3, [r7, #36] @ 0x24
  38809. 8010a60: f443 0300 orr.w r3, r3, #8388608 @ 0x800000
  38810. 8010a64: 63bb str r3, [r7, #56] @ 0x38
  38811. 8010a66: 68fb ldr r3, [r7, #12]
  38812. 8010a68: 681b ldr r3, [r3, #0]
  38813. 8010a6a: 3308 adds r3, #8
  38814. 8010a6c: 6bba ldr r2, [r7, #56] @ 0x38
  38815. 8010a6e: 637a str r2, [r7, #52] @ 0x34
  38816. 8010a70: 633b str r3, [r7, #48] @ 0x30
  38817. */
  38818. __STATIC_FORCEINLINE uint32_t __STREXW(uint32_t value, volatile uint32_t *addr)
  38819. {
  38820. uint32_t result;
  38821. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  38822. 8010a72: 6b39 ldr r1, [r7, #48] @ 0x30
  38823. 8010a74: 6b7a ldr r2, [r7, #52] @ 0x34
  38824. 8010a76: e841 2300 strex r3, r2, [r1]
  38825. 8010a7a: 62fb str r3, [r7, #44] @ 0x2c
  38826. return(result);
  38827. 8010a7c: 6afb ldr r3, [r7, #44] @ 0x2c
  38828. 8010a7e: 2b00 cmp r3, #0
  38829. 8010a80: d1e5 bne.n 8010a4e <HAL_UART_Transmit_IT+0x7e>
  38830. 8010a82: e028 b.n 8010ad6 <HAL_UART_Transmit_IT+0x106>
  38831. }
  38832. else
  38833. {
  38834. /* Set the Tx ISR function pointer according to the data word length */
  38835. if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE))
  38836. 8010a84: 68fb ldr r3, [r7, #12]
  38837. 8010a86: 689b ldr r3, [r3, #8]
  38838. 8010a88: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  38839. 8010a8c: d107 bne.n 8010a9e <HAL_UART_Transmit_IT+0xce>
  38840. 8010a8e: 68fb ldr r3, [r7, #12]
  38841. 8010a90: 691b ldr r3, [r3, #16]
  38842. 8010a92: 2b00 cmp r3, #0
  38843. 8010a94: d103 bne.n 8010a9e <HAL_UART_Transmit_IT+0xce>
  38844. {
  38845. huart->TxISR = UART_TxISR_16BIT;
  38846. 8010a96: 68fb ldr r3, [r7, #12]
  38847. 8010a98: 4a15 ldr r2, [pc, #84] @ (8010af0 <HAL_UART_Transmit_IT+0x120>)
  38848. 8010a9a: 679a str r2, [r3, #120] @ 0x78
  38849. 8010a9c: e002 b.n 8010aa4 <HAL_UART_Transmit_IT+0xd4>
  38850. }
  38851. else
  38852. {
  38853. huart->TxISR = UART_TxISR_8BIT;
  38854. 8010a9e: 68fb ldr r3, [r7, #12]
  38855. 8010aa0: 4a14 ldr r2, [pc, #80] @ (8010af4 <HAL_UART_Transmit_IT+0x124>)
  38856. 8010aa2: 679a str r2, [r3, #120] @ 0x78
  38857. }
  38858. /* Enable the Transmit Data Register Empty interrupt */
  38859. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_TXEIE_TXFNFIE);
  38860. 8010aa4: 68fb ldr r3, [r7, #12]
  38861. 8010aa6: 681b ldr r3, [r3, #0]
  38862. 8010aa8: 617b str r3, [r7, #20]
  38863. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  38864. 8010aaa: 697b ldr r3, [r7, #20]
  38865. 8010aac: e853 3f00 ldrex r3, [r3]
  38866. 8010ab0: 613b str r3, [r7, #16]
  38867. return(result);
  38868. 8010ab2: 693b ldr r3, [r7, #16]
  38869. 8010ab4: f043 0380 orr.w r3, r3, #128 @ 0x80
  38870. 8010ab8: 63fb str r3, [r7, #60] @ 0x3c
  38871. 8010aba: 68fb ldr r3, [r7, #12]
  38872. 8010abc: 681b ldr r3, [r3, #0]
  38873. 8010abe: 461a mov r2, r3
  38874. 8010ac0: 6bfb ldr r3, [r7, #60] @ 0x3c
  38875. 8010ac2: 623b str r3, [r7, #32]
  38876. 8010ac4: 61fa str r2, [r7, #28]
  38877. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  38878. 8010ac6: 69f9 ldr r1, [r7, #28]
  38879. 8010ac8: 6a3a ldr r2, [r7, #32]
  38880. 8010aca: e841 2300 strex r3, r2, [r1]
  38881. 8010ace: 61bb str r3, [r7, #24]
  38882. return(result);
  38883. 8010ad0: 69bb ldr r3, [r7, #24]
  38884. 8010ad2: 2b00 cmp r3, #0
  38885. 8010ad4: d1e6 bne.n 8010aa4 <HAL_UART_Transmit_IT+0xd4>
  38886. }
  38887. return HAL_OK;
  38888. 8010ad6: 2300 movs r3, #0
  38889. 8010ad8: e000 b.n 8010adc <HAL_UART_Transmit_IT+0x10c>
  38890. }
  38891. else
  38892. {
  38893. return HAL_BUSY;
  38894. 8010ada: 2302 movs r3, #2
  38895. }
  38896. }
  38897. 8010adc: 4618 mov r0, r3
  38898. 8010ade: 3744 adds r7, #68 @ 0x44
  38899. 8010ae0: 46bd mov sp, r7
  38900. 8010ae2: f85d 7b04 ldr.w r7, [sp], #4
  38901. 8010ae6: 4770 bx lr
  38902. 8010ae8: 0801265b .word 0x0801265b
  38903. 8010aec: 0801257b .word 0x0801257b
  38904. 8010af0: 080124b9 .word 0x080124b9
  38905. 8010af4: 08012401 .word 0x08012401
  38906. 08010af8 <HAL_UART_IRQHandler>:
  38907. * @brief Handle UART interrupt request.
  38908. * @param huart UART handle.
  38909. * @retval None
  38910. */
  38911. void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)
  38912. {
  38913. 8010af8: b580 push {r7, lr}
  38914. 8010afa: b0ba sub sp, #232 @ 0xe8
  38915. 8010afc: af00 add r7, sp, #0
  38916. 8010afe: 6078 str r0, [r7, #4]
  38917. uint32_t isrflags = READ_REG(huart->Instance->ISR);
  38918. 8010b00: 687b ldr r3, [r7, #4]
  38919. 8010b02: 681b ldr r3, [r3, #0]
  38920. 8010b04: 69db ldr r3, [r3, #28]
  38921. 8010b06: f8c7 30e4 str.w r3, [r7, #228] @ 0xe4
  38922. uint32_t cr1its = READ_REG(huart->Instance->CR1);
  38923. 8010b0a: 687b ldr r3, [r7, #4]
  38924. 8010b0c: 681b ldr r3, [r3, #0]
  38925. 8010b0e: 681b ldr r3, [r3, #0]
  38926. 8010b10: f8c7 30e0 str.w r3, [r7, #224] @ 0xe0
  38927. uint32_t cr3its = READ_REG(huart->Instance->CR3);
  38928. 8010b14: 687b ldr r3, [r7, #4]
  38929. 8010b16: 681b ldr r3, [r3, #0]
  38930. 8010b18: 689b ldr r3, [r3, #8]
  38931. 8010b1a: f8c7 30dc str.w r3, [r7, #220] @ 0xdc
  38932. uint32_t errorflags;
  38933. uint32_t errorcode;
  38934. /* If no error occurs */
  38935. errorflags = (isrflags & (uint32_t)(USART_ISR_PE | USART_ISR_FE | USART_ISR_ORE | USART_ISR_NE | USART_ISR_RTOF));
  38936. 8010b1e: f8d7 20e4 ldr.w r2, [r7, #228] @ 0xe4
  38937. 8010b22: f640 030f movw r3, #2063 @ 0x80f
  38938. 8010b26: 4013 ands r3, r2
  38939. 8010b28: f8c7 30d8 str.w r3, [r7, #216] @ 0xd8
  38940. if (errorflags == 0U)
  38941. 8010b2c: f8d7 30d8 ldr.w r3, [r7, #216] @ 0xd8
  38942. 8010b30: 2b00 cmp r3, #0
  38943. 8010b32: d11b bne.n 8010b6c <HAL_UART_IRQHandler+0x74>
  38944. {
  38945. /* UART in mode Receiver ---------------------------------------------------*/
  38946. if (((isrflags & USART_ISR_RXNE_RXFNE) != 0U)
  38947. 8010b34: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  38948. 8010b38: f003 0320 and.w r3, r3, #32
  38949. 8010b3c: 2b00 cmp r3, #0
  38950. 8010b3e: d015 beq.n 8010b6c <HAL_UART_IRQHandler+0x74>
  38951. && (((cr1its & USART_CR1_RXNEIE_RXFNEIE) != 0U)
  38952. 8010b40: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  38953. 8010b44: f003 0320 and.w r3, r3, #32
  38954. 8010b48: 2b00 cmp r3, #0
  38955. 8010b4a: d105 bne.n 8010b58 <HAL_UART_IRQHandler+0x60>
  38956. || ((cr3its & USART_CR3_RXFTIE) != 0U)))
  38957. 8010b4c: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc
  38958. 8010b50: f003 5380 and.w r3, r3, #268435456 @ 0x10000000
  38959. 8010b54: 2b00 cmp r3, #0
  38960. 8010b56: d009 beq.n 8010b6c <HAL_UART_IRQHandler+0x74>
  38961. {
  38962. if (huart->RxISR != NULL)
  38963. 8010b58: 687b ldr r3, [r7, #4]
  38964. 8010b5a: 6f5b ldr r3, [r3, #116] @ 0x74
  38965. 8010b5c: 2b00 cmp r3, #0
  38966. 8010b5e: f000 8377 beq.w 8011250 <HAL_UART_IRQHandler+0x758>
  38967. {
  38968. huart->RxISR(huart);
  38969. 8010b62: 687b ldr r3, [r7, #4]
  38970. 8010b64: 6f5b ldr r3, [r3, #116] @ 0x74
  38971. 8010b66: 6878 ldr r0, [r7, #4]
  38972. 8010b68: 4798 blx r3
  38973. }
  38974. return;
  38975. 8010b6a: e371 b.n 8011250 <HAL_UART_IRQHandler+0x758>
  38976. }
  38977. }
  38978. /* If some errors occur */
  38979. if ((errorflags != 0U)
  38980. 8010b6c: f8d7 30d8 ldr.w r3, [r7, #216] @ 0xd8
  38981. 8010b70: 2b00 cmp r3, #0
  38982. 8010b72: f000 8123 beq.w 8010dbc <HAL_UART_IRQHandler+0x2c4>
  38983. && ((((cr3its & (USART_CR3_RXFTIE | USART_CR3_EIE)) != 0U)
  38984. 8010b76: f8d7 20dc ldr.w r2, [r7, #220] @ 0xdc
  38985. 8010b7a: 4b8d ldr r3, [pc, #564] @ (8010db0 <HAL_UART_IRQHandler+0x2b8>)
  38986. 8010b7c: 4013 ands r3, r2
  38987. 8010b7e: 2b00 cmp r3, #0
  38988. 8010b80: d106 bne.n 8010b90 <HAL_UART_IRQHandler+0x98>
  38989. || ((cr1its & (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE | USART_CR1_RTOIE)) != 0U))))
  38990. 8010b82: f8d7 20e0 ldr.w r2, [r7, #224] @ 0xe0
  38991. 8010b86: 4b8b ldr r3, [pc, #556] @ (8010db4 <HAL_UART_IRQHandler+0x2bc>)
  38992. 8010b88: 4013 ands r3, r2
  38993. 8010b8a: 2b00 cmp r3, #0
  38994. 8010b8c: f000 8116 beq.w 8010dbc <HAL_UART_IRQHandler+0x2c4>
  38995. {
  38996. /* UART parity error interrupt occurred -------------------------------------*/
  38997. if (((isrflags & USART_ISR_PE) != 0U) && ((cr1its & USART_CR1_PEIE) != 0U))
  38998. 8010b90: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  38999. 8010b94: f003 0301 and.w r3, r3, #1
  39000. 8010b98: 2b00 cmp r3, #0
  39001. 8010b9a: d011 beq.n 8010bc0 <HAL_UART_IRQHandler+0xc8>
  39002. 8010b9c: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  39003. 8010ba0: f403 7380 and.w r3, r3, #256 @ 0x100
  39004. 8010ba4: 2b00 cmp r3, #0
  39005. 8010ba6: d00b beq.n 8010bc0 <HAL_UART_IRQHandler+0xc8>
  39006. {
  39007. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_PEF);
  39008. 8010ba8: 687b ldr r3, [r7, #4]
  39009. 8010baa: 681b ldr r3, [r3, #0]
  39010. 8010bac: 2201 movs r2, #1
  39011. 8010bae: 621a str r2, [r3, #32]
  39012. huart->ErrorCode |= HAL_UART_ERROR_PE;
  39013. 8010bb0: 687b ldr r3, [r7, #4]
  39014. 8010bb2: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  39015. 8010bb6: f043 0201 orr.w r2, r3, #1
  39016. 8010bba: 687b ldr r3, [r7, #4]
  39017. 8010bbc: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  39018. }
  39019. /* UART frame error interrupt occurred --------------------------------------*/
  39020. if (((isrflags & USART_ISR_FE) != 0U) && ((cr3its & USART_CR3_EIE) != 0U))
  39021. 8010bc0: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  39022. 8010bc4: f003 0302 and.w r3, r3, #2
  39023. 8010bc8: 2b00 cmp r3, #0
  39024. 8010bca: d011 beq.n 8010bf0 <HAL_UART_IRQHandler+0xf8>
  39025. 8010bcc: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc
  39026. 8010bd0: f003 0301 and.w r3, r3, #1
  39027. 8010bd4: 2b00 cmp r3, #0
  39028. 8010bd6: d00b beq.n 8010bf0 <HAL_UART_IRQHandler+0xf8>
  39029. {
  39030. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_FEF);
  39031. 8010bd8: 687b ldr r3, [r7, #4]
  39032. 8010bda: 681b ldr r3, [r3, #0]
  39033. 8010bdc: 2202 movs r2, #2
  39034. 8010bde: 621a str r2, [r3, #32]
  39035. huart->ErrorCode |= HAL_UART_ERROR_FE;
  39036. 8010be0: 687b ldr r3, [r7, #4]
  39037. 8010be2: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  39038. 8010be6: f043 0204 orr.w r2, r3, #4
  39039. 8010bea: 687b ldr r3, [r7, #4]
  39040. 8010bec: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  39041. }
  39042. /* UART noise error interrupt occurred --------------------------------------*/
  39043. if (((isrflags & USART_ISR_NE) != 0U) && ((cr3its & USART_CR3_EIE) != 0U))
  39044. 8010bf0: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  39045. 8010bf4: f003 0304 and.w r3, r3, #4
  39046. 8010bf8: 2b00 cmp r3, #0
  39047. 8010bfa: d011 beq.n 8010c20 <HAL_UART_IRQHandler+0x128>
  39048. 8010bfc: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc
  39049. 8010c00: f003 0301 and.w r3, r3, #1
  39050. 8010c04: 2b00 cmp r3, #0
  39051. 8010c06: d00b beq.n 8010c20 <HAL_UART_IRQHandler+0x128>
  39052. {
  39053. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_NEF);
  39054. 8010c08: 687b ldr r3, [r7, #4]
  39055. 8010c0a: 681b ldr r3, [r3, #0]
  39056. 8010c0c: 2204 movs r2, #4
  39057. 8010c0e: 621a str r2, [r3, #32]
  39058. huart->ErrorCode |= HAL_UART_ERROR_NE;
  39059. 8010c10: 687b ldr r3, [r7, #4]
  39060. 8010c12: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  39061. 8010c16: f043 0202 orr.w r2, r3, #2
  39062. 8010c1a: 687b ldr r3, [r7, #4]
  39063. 8010c1c: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  39064. }
  39065. /* UART Over-Run interrupt occurred -----------------------------------------*/
  39066. if (((isrflags & USART_ISR_ORE) != 0U)
  39067. 8010c20: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  39068. 8010c24: f003 0308 and.w r3, r3, #8
  39069. 8010c28: 2b00 cmp r3, #0
  39070. 8010c2a: d017 beq.n 8010c5c <HAL_UART_IRQHandler+0x164>
  39071. && (((cr1its & USART_CR1_RXNEIE_RXFNEIE) != 0U) ||
  39072. 8010c2c: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  39073. 8010c30: f003 0320 and.w r3, r3, #32
  39074. 8010c34: 2b00 cmp r3, #0
  39075. 8010c36: d105 bne.n 8010c44 <HAL_UART_IRQHandler+0x14c>
  39076. ((cr3its & (USART_CR3_RXFTIE | USART_CR3_EIE)) != 0U)))
  39077. 8010c38: f8d7 20dc ldr.w r2, [r7, #220] @ 0xdc
  39078. 8010c3c: 4b5c ldr r3, [pc, #368] @ (8010db0 <HAL_UART_IRQHandler+0x2b8>)
  39079. 8010c3e: 4013 ands r3, r2
  39080. && (((cr1its & USART_CR1_RXNEIE_RXFNEIE) != 0U) ||
  39081. 8010c40: 2b00 cmp r3, #0
  39082. 8010c42: d00b beq.n 8010c5c <HAL_UART_IRQHandler+0x164>
  39083. {
  39084. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF);
  39085. 8010c44: 687b ldr r3, [r7, #4]
  39086. 8010c46: 681b ldr r3, [r3, #0]
  39087. 8010c48: 2208 movs r2, #8
  39088. 8010c4a: 621a str r2, [r3, #32]
  39089. huart->ErrorCode |= HAL_UART_ERROR_ORE;
  39090. 8010c4c: 687b ldr r3, [r7, #4]
  39091. 8010c4e: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  39092. 8010c52: f043 0208 orr.w r2, r3, #8
  39093. 8010c56: 687b ldr r3, [r7, #4]
  39094. 8010c58: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  39095. }
  39096. /* UART Receiver Timeout interrupt occurred ---------------------------------*/
  39097. if (((isrflags & USART_ISR_RTOF) != 0U) && ((cr1its & USART_CR1_RTOIE) != 0U))
  39098. 8010c5c: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  39099. 8010c60: f403 6300 and.w r3, r3, #2048 @ 0x800
  39100. 8010c64: 2b00 cmp r3, #0
  39101. 8010c66: d012 beq.n 8010c8e <HAL_UART_IRQHandler+0x196>
  39102. 8010c68: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  39103. 8010c6c: f003 6380 and.w r3, r3, #67108864 @ 0x4000000
  39104. 8010c70: 2b00 cmp r3, #0
  39105. 8010c72: d00c beq.n 8010c8e <HAL_UART_IRQHandler+0x196>
  39106. {
  39107. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_RTOF);
  39108. 8010c74: 687b ldr r3, [r7, #4]
  39109. 8010c76: 681b ldr r3, [r3, #0]
  39110. 8010c78: f44f 6200 mov.w r2, #2048 @ 0x800
  39111. 8010c7c: 621a str r2, [r3, #32]
  39112. huart->ErrorCode |= HAL_UART_ERROR_RTO;
  39113. 8010c7e: 687b ldr r3, [r7, #4]
  39114. 8010c80: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  39115. 8010c84: f043 0220 orr.w r2, r3, #32
  39116. 8010c88: 687b ldr r3, [r7, #4]
  39117. 8010c8a: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  39118. }
  39119. /* Call UART Error Call back function if need be ----------------------------*/
  39120. if (huart->ErrorCode != HAL_UART_ERROR_NONE)
  39121. 8010c8e: 687b ldr r3, [r7, #4]
  39122. 8010c90: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  39123. 8010c94: 2b00 cmp r3, #0
  39124. 8010c96: f000 82dd beq.w 8011254 <HAL_UART_IRQHandler+0x75c>
  39125. {
  39126. /* UART in mode Receiver --------------------------------------------------*/
  39127. if (((isrflags & USART_ISR_RXNE_RXFNE) != 0U)
  39128. 8010c9a: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  39129. 8010c9e: f003 0320 and.w r3, r3, #32
  39130. 8010ca2: 2b00 cmp r3, #0
  39131. 8010ca4: d013 beq.n 8010cce <HAL_UART_IRQHandler+0x1d6>
  39132. && (((cr1its & USART_CR1_RXNEIE_RXFNEIE) != 0U)
  39133. 8010ca6: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  39134. 8010caa: f003 0320 and.w r3, r3, #32
  39135. 8010cae: 2b00 cmp r3, #0
  39136. 8010cb0: d105 bne.n 8010cbe <HAL_UART_IRQHandler+0x1c6>
  39137. || ((cr3its & USART_CR3_RXFTIE) != 0U)))
  39138. 8010cb2: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc
  39139. 8010cb6: f003 5380 and.w r3, r3, #268435456 @ 0x10000000
  39140. 8010cba: 2b00 cmp r3, #0
  39141. 8010cbc: d007 beq.n 8010cce <HAL_UART_IRQHandler+0x1d6>
  39142. {
  39143. if (huart->RxISR != NULL)
  39144. 8010cbe: 687b ldr r3, [r7, #4]
  39145. 8010cc0: 6f5b ldr r3, [r3, #116] @ 0x74
  39146. 8010cc2: 2b00 cmp r3, #0
  39147. 8010cc4: d003 beq.n 8010cce <HAL_UART_IRQHandler+0x1d6>
  39148. {
  39149. huart->RxISR(huart);
  39150. 8010cc6: 687b ldr r3, [r7, #4]
  39151. 8010cc8: 6f5b ldr r3, [r3, #116] @ 0x74
  39152. 8010cca: 6878 ldr r0, [r7, #4]
  39153. 8010ccc: 4798 blx r3
  39154. /* If Error is to be considered as blocking :
  39155. - Receiver Timeout error in Reception
  39156. - Overrun error in Reception
  39157. - any error occurs in DMA mode reception
  39158. */
  39159. errorcode = huart->ErrorCode;
  39160. 8010cce: 687b ldr r3, [r7, #4]
  39161. 8010cd0: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  39162. 8010cd4: f8c7 30d4 str.w r3, [r7, #212] @ 0xd4
  39163. if ((HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) ||
  39164. 8010cd8: 687b ldr r3, [r7, #4]
  39165. 8010cda: 681b ldr r3, [r3, #0]
  39166. 8010cdc: 689b ldr r3, [r3, #8]
  39167. 8010cde: f003 0340 and.w r3, r3, #64 @ 0x40
  39168. 8010ce2: 2b40 cmp r3, #64 @ 0x40
  39169. 8010ce4: d005 beq.n 8010cf2 <HAL_UART_IRQHandler+0x1fa>
  39170. ((errorcode & (HAL_UART_ERROR_RTO | HAL_UART_ERROR_ORE)) != 0U))
  39171. 8010ce6: f8d7 30d4 ldr.w r3, [r7, #212] @ 0xd4
  39172. 8010cea: f003 0328 and.w r3, r3, #40 @ 0x28
  39173. if ((HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) ||
  39174. 8010cee: 2b00 cmp r3, #0
  39175. 8010cf0: d054 beq.n 8010d9c <HAL_UART_IRQHandler+0x2a4>
  39176. {
  39177. /* Blocking error : transfer is aborted
  39178. Set the UART state ready to be able to start again the process,
  39179. Disable Rx Interrupts, and disable Rx DMA request, if ongoing */
  39180. UART_EndRxTransfer(huart);
  39181. 8010cf2: 6878 ldr r0, [r7, #4]
  39182. 8010cf4: f001 fb08 bl 8012308 <UART_EndRxTransfer>
  39183. /* Abort the UART DMA Rx channel if enabled */
  39184. if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))
  39185. 8010cf8: 687b ldr r3, [r7, #4]
  39186. 8010cfa: 681b ldr r3, [r3, #0]
  39187. 8010cfc: 689b ldr r3, [r3, #8]
  39188. 8010cfe: f003 0340 and.w r3, r3, #64 @ 0x40
  39189. 8010d02: 2b40 cmp r3, #64 @ 0x40
  39190. 8010d04: d146 bne.n 8010d94 <HAL_UART_IRQHandler+0x29c>
  39191. {
  39192. /* Disable the UART DMA Rx request if enabled */
  39193. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR);
  39194. 8010d06: 687b ldr r3, [r7, #4]
  39195. 8010d08: 681b ldr r3, [r3, #0]
  39196. 8010d0a: 3308 adds r3, #8
  39197. 8010d0c: f8c7 309c str.w r3, [r7, #156] @ 0x9c
  39198. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  39199. 8010d10: f8d7 309c ldr.w r3, [r7, #156] @ 0x9c
  39200. 8010d14: e853 3f00 ldrex r3, [r3]
  39201. 8010d18: f8c7 3098 str.w r3, [r7, #152] @ 0x98
  39202. return(result);
  39203. 8010d1c: f8d7 3098 ldr.w r3, [r7, #152] @ 0x98
  39204. 8010d20: f023 0340 bic.w r3, r3, #64 @ 0x40
  39205. 8010d24: f8c7 30d0 str.w r3, [r7, #208] @ 0xd0
  39206. 8010d28: 687b ldr r3, [r7, #4]
  39207. 8010d2a: 681b ldr r3, [r3, #0]
  39208. 8010d2c: 3308 adds r3, #8
  39209. 8010d2e: f8d7 20d0 ldr.w r2, [r7, #208] @ 0xd0
  39210. 8010d32: f8c7 20a8 str.w r2, [r7, #168] @ 0xa8
  39211. 8010d36: f8c7 30a4 str.w r3, [r7, #164] @ 0xa4
  39212. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  39213. 8010d3a: f8d7 10a4 ldr.w r1, [r7, #164] @ 0xa4
  39214. 8010d3e: f8d7 20a8 ldr.w r2, [r7, #168] @ 0xa8
  39215. 8010d42: e841 2300 strex r3, r2, [r1]
  39216. 8010d46: f8c7 30a0 str.w r3, [r7, #160] @ 0xa0
  39217. return(result);
  39218. 8010d4a: f8d7 30a0 ldr.w r3, [r7, #160] @ 0xa0
  39219. 8010d4e: 2b00 cmp r3, #0
  39220. 8010d50: d1d9 bne.n 8010d06 <HAL_UART_IRQHandler+0x20e>
  39221. /* Abort the UART DMA Rx channel */
  39222. if (huart->hdmarx != NULL)
  39223. 8010d52: 687b ldr r3, [r7, #4]
  39224. 8010d54: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39225. 8010d58: 2b00 cmp r3, #0
  39226. 8010d5a: d017 beq.n 8010d8c <HAL_UART_IRQHandler+0x294>
  39227. {
  39228. /* Set the UART DMA Abort callback :
  39229. will lead to call HAL_UART_ErrorCallback() at end of DMA abort procedure */
  39230. huart->hdmarx->XferAbortCallback = UART_DMAAbortOnError;
  39231. 8010d5c: 687b ldr r3, [r7, #4]
  39232. 8010d5e: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39233. 8010d62: 4a15 ldr r2, [pc, #84] @ (8010db8 <HAL_UART_IRQHandler+0x2c0>)
  39234. 8010d64: 651a str r2, [r3, #80] @ 0x50
  39235. /* Abort DMA RX */
  39236. if (HAL_DMA_Abort_IT(huart->hdmarx) != HAL_OK)
  39237. 8010d66: 687b ldr r3, [r7, #4]
  39238. 8010d68: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39239. 8010d6c: 4618 mov r0, r3
  39240. 8010d6e: f7f8 fb9f bl 80094b0 <HAL_DMA_Abort_IT>
  39241. 8010d72: 4603 mov r3, r0
  39242. 8010d74: 2b00 cmp r3, #0
  39243. 8010d76: d019 beq.n 8010dac <HAL_UART_IRQHandler+0x2b4>
  39244. {
  39245. /* Call Directly huart->hdmarx->XferAbortCallback function in case of error */
  39246. huart->hdmarx->XferAbortCallback(huart->hdmarx);
  39247. 8010d78: 687b ldr r3, [r7, #4]
  39248. 8010d7a: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39249. 8010d7e: 6d1b ldr r3, [r3, #80] @ 0x50
  39250. 8010d80: 687a ldr r2, [r7, #4]
  39251. 8010d82: f8d2 2080 ldr.w r2, [r2, #128] @ 0x80
  39252. 8010d86: 4610 mov r0, r2
  39253. 8010d88: 4798 blx r3
  39254. if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))
  39255. 8010d8a: e00f b.n 8010dac <HAL_UART_IRQHandler+0x2b4>
  39256. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  39257. /*Call registered error callback*/
  39258. huart->ErrorCallback(huart);
  39259. #else
  39260. /*Call legacy weak error callback*/
  39261. HAL_UART_ErrorCallback(huart);
  39262. 8010d8c: 6878 ldr r0, [r7, #4]
  39263. 8010d8e: f000 fa6d bl 801126c <HAL_UART_ErrorCallback>
  39264. if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))
  39265. 8010d92: e00b b.n 8010dac <HAL_UART_IRQHandler+0x2b4>
  39266. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  39267. /*Call registered error callback*/
  39268. huart->ErrorCallback(huart);
  39269. #else
  39270. /*Call legacy weak error callback*/
  39271. HAL_UART_ErrorCallback(huart);
  39272. 8010d94: 6878 ldr r0, [r7, #4]
  39273. 8010d96: f000 fa69 bl 801126c <HAL_UART_ErrorCallback>
  39274. if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))
  39275. 8010d9a: e007 b.n 8010dac <HAL_UART_IRQHandler+0x2b4>
  39276. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  39277. /*Call registered error callback*/
  39278. huart->ErrorCallback(huart);
  39279. #else
  39280. /*Call legacy weak error callback*/
  39281. HAL_UART_ErrorCallback(huart);
  39282. 8010d9c: 6878 ldr r0, [r7, #4]
  39283. 8010d9e: f000 fa65 bl 801126c <HAL_UART_ErrorCallback>
  39284. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  39285. huart->ErrorCode = HAL_UART_ERROR_NONE;
  39286. 8010da2: 687b ldr r3, [r7, #4]
  39287. 8010da4: 2200 movs r2, #0
  39288. 8010da6: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  39289. }
  39290. }
  39291. return;
  39292. 8010daa: e253 b.n 8011254 <HAL_UART_IRQHandler+0x75c>
  39293. if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))
  39294. 8010dac: bf00 nop
  39295. return;
  39296. 8010dae: e251 b.n 8011254 <HAL_UART_IRQHandler+0x75c>
  39297. 8010db0: 10000001 .word 0x10000001
  39298. 8010db4: 04000120 .word 0x04000120
  39299. 8010db8: 080123d5 .word 0x080123d5
  39300. } /* End if some error occurs */
  39301. /* Check current reception Mode :
  39302. If Reception till IDLE event has been selected : */
  39303. if ((huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
  39304. 8010dbc: 687b ldr r3, [r7, #4]
  39305. 8010dbe: 6edb ldr r3, [r3, #108] @ 0x6c
  39306. 8010dc0: 2b01 cmp r3, #1
  39307. 8010dc2: f040 81e7 bne.w 8011194 <HAL_UART_IRQHandler+0x69c>
  39308. && ((isrflags & USART_ISR_IDLE) != 0U)
  39309. 8010dc6: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  39310. 8010dca: f003 0310 and.w r3, r3, #16
  39311. 8010dce: 2b00 cmp r3, #0
  39312. 8010dd0: f000 81e0 beq.w 8011194 <HAL_UART_IRQHandler+0x69c>
  39313. && ((cr1its & USART_ISR_IDLE) != 0U))
  39314. 8010dd4: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  39315. 8010dd8: f003 0310 and.w r3, r3, #16
  39316. 8010ddc: 2b00 cmp r3, #0
  39317. 8010dde: f000 81d9 beq.w 8011194 <HAL_UART_IRQHandler+0x69c>
  39318. {
  39319. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_IDLEF);
  39320. 8010de2: 687b ldr r3, [r7, #4]
  39321. 8010de4: 681b ldr r3, [r3, #0]
  39322. 8010de6: 2210 movs r2, #16
  39323. 8010de8: 621a str r2, [r3, #32]
  39324. /* Check if DMA mode is enabled in UART */
  39325. if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))
  39326. 8010dea: 687b ldr r3, [r7, #4]
  39327. 8010dec: 681b ldr r3, [r3, #0]
  39328. 8010dee: 689b ldr r3, [r3, #8]
  39329. 8010df0: f003 0340 and.w r3, r3, #64 @ 0x40
  39330. 8010df4: 2b40 cmp r3, #64 @ 0x40
  39331. 8010df6: f040 8151 bne.w 801109c <HAL_UART_IRQHandler+0x5a4>
  39332. {
  39333. /* DMA mode enabled */
  39334. /* Check received length : If all expected data are received, do nothing,
  39335. (DMA cplt callback will be called).
  39336. Otherwise, if at least one data has already been received, IDLE event is to be notified to user */
  39337. uint16_t nb_remaining_rx_data = (uint16_t) __HAL_DMA_GET_COUNTER(huart->hdmarx);
  39338. 8010dfa: 687b ldr r3, [r7, #4]
  39339. 8010dfc: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39340. 8010e00: 681b ldr r3, [r3, #0]
  39341. 8010e02: 4a96 ldr r2, [pc, #600] @ (801105c <HAL_UART_IRQHandler+0x564>)
  39342. 8010e04: 4293 cmp r3, r2
  39343. 8010e06: d068 beq.n 8010eda <HAL_UART_IRQHandler+0x3e2>
  39344. 8010e08: 687b ldr r3, [r7, #4]
  39345. 8010e0a: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39346. 8010e0e: 681b ldr r3, [r3, #0]
  39347. 8010e10: 4a93 ldr r2, [pc, #588] @ (8011060 <HAL_UART_IRQHandler+0x568>)
  39348. 8010e12: 4293 cmp r3, r2
  39349. 8010e14: d061 beq.n 8010eda <HAL_UART_IRQHandler+0x3e2>
  39350. 8010e16: 687b ldr r3, [r7, #4]
  39351. 8010e18: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39352. 8010e1c: 681b ldr r3, [r3, #0]
  39353. 8010e1e: 4a91 ldr r2, [pc, #580] @ (8011064 <HAL_UART_IRQHandler+0x56c>)
  39354. 8010e20: 4293 cmp r3, r2
  39355. 8010e22: d05a beq.n 8010eda <HAL_UART_IRQHandler+0x3e2>
  39356. 8010e24: 687b ldr r3, [r7, #4]
  39357. 8010e26: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39358. 8010e2a: 681b ldr r3, [r3, #0]
  39359. 8010e2c: 4a8e ldr r2, [pc, #568] @ (8011068 <HAL_UART_IRQHandler+0x570>)
  39360. 8010e2e: 4293 cmp r3, r2
  39361. 8010e30: d053 beq.n 8010eda <HAL_UART_IRQHandler+0x3e2>
  39362. 8010e32: 687b ldr r3, [r7, #4]
  39363. 8010e34: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39364. 8010e38: 681b ldr r3, [r3, #0]
  39365. 8010e3a: 4a8c ldr r2, [pc, #560] @ (801106c <HAL_UART_IRQHandler+0x574>)
  39366. 8010e3c: 4293 cmp r3, r2
  39367. 8010e3e: d04c beq.n 8010eda <HAL_UART_IRQHandler+0x3e2>
  39368. 8010e40: 687b ldr r3, [r7, #4]
  39369. 8010e42: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39370. 8010e46: 681b ldr r3, [r3, #0]
  39371. 8010e48: 4a89 ldr r2, [pc, #548] @ (8011070 <HAL_UART_IRQHandler+0x578>)
  39372. 8010e4a: 4293 cmp r3, r2
  39373. 8010e4c: d045 beq.n 8010eda <HAL_UART_IRQHandler+0x3e2>
  39374. 8010e4e: 687b ldr r3, [r7, #4]
  39375. 8010e50: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39376. 8010e54: 681b ldr r3, [r3, #0]
  39377. 8010e56: 4a87 ldr r2, [pc, #540] @ (8011074 <HAL_UART_IRQHandler+0x57c>)
  39378. 8010e58: 4293 cmp r3, r2
  39379. 8010e5a: d03e beq.n 8010eda <HAL_UART_IRQHandler+0x3e2>
  39380. 8010e5c: 687b ldr r3, [r7, #4]
  39381. 8010e5e: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39382. 8010e62: 681b ldr r3, [r3, #0]
  39383. 8010e64: 4a84 ldr r2, [pc, #528] @ (8011078 <HAL_UART_IRQHandler+0x580>)
  39384. 8010e66: 4293 cmp r3, r2
  39385. 8010e68: d037 beq.n 8010eda <HAL_UART_IRQHandler+0x3e2>
  39386. 8010e6a: 687b ldr r3, [r7, #4]
  39387. 8010e6c: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39388. 8010e70: 681b ldr r3, [r3, #0]
  39389. 8010e72: 4a82 ldr r2, [pc, #520] @ (801107c <HAL_UART_IRQHandler+0x584>)
  39390. 8010e74: 4293 cmp r3, r2
  39391. 8010e76: d030 beq.n 8010eda <HAL_UART_IRQHandler+0x3e2>
  39392. 8010e78: 687b ldr r3, [r7, #4]
  39393. 8010e7a: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39394. 8010e7e: 681b ldr r3, [r3, #0]
  39395. 8010e80: 4a7f ldr r2, [pc, #508] @ (8011080 <HAL_UART_IRQHandler+0x588>)
  39396. 8010e82: 4293 cmp r3, r2
  39397. 8010e84: d029 beq.n 8010eda <HAL_UART_IRQHandler+0x3e2>
  39398. 8010e86: 687b ldr r3, [r7, #4]
  39399. 8010e88: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39400. 8010e8c: 681b ldr r3, [r3, #0]
  39401. 8010e8e: 4a7d ldr r2, [pc, #500] @ (8011084 <HAL_UART_IRQHandler+0x58c>)
  39402. 8010e90: 4293 cmp r3, r2
  39403. 8010e92: d022 beq.n 8010eda <HAL_UART_IRQHandler+0x3e2>
  39404. 8010e94: 687b ldr r3, [r7, #4]
  39405. 8010e96: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39406. 8010e9a: 681b ldr r3, [r3, #0]
  39407. 8010e9c: 4a7a ldr r2, [pc, #488] @ (8011088 <HAL_UART_IRQHandler+0x590>)
  39408. 8010e9e: 4293 cmp r3, r2
  39409. 8010ea0: d01b beq.n 8010eda <HAL_UART_IRQHandler+0x3e2>
  39410. 8010ea2: 687b ldr r3, [r7, #4]
  39411. 8010ea4: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39412. 8010ea8: 681b ldr r3, [r3, #0]
  39413. 8010eaa: 4a78 ldr r2, [pc, #480] @ (801108c <HAL_UART_IRQHandler+0x594>)
  39414. 8010eac: 4293 cmp r3, r2
  39415. 8010eae: d014 beq.n 8010eda <HAL_UART_IRQHandler+0x3e2>
  39416. 8010eb0: 687b ldr r3, [r7, #4]
  39417. 8010eb2: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39418. 8010eb6: 681b ldr r3, [r3, #0]
  39419. 8010eb8: 4a75 ldr r2, [pc, #468] @ (8011090 <HAL_UART_IRQHandler+0x598>)
  39420. 8010eba: 4293 cmp r3, r2
  39421. 8010ebc: d00d beq.n 8010eda <HAL_UART_IRQHandler+0x3e2>
  39422. 8010ebe: 687b ldr r3, [r7, #4]
  39423. 8010ec0: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39424. 8010ec4: 681b ldr r3, [r3, #0]
  39425. 8010ec6: 4a73 ldr r2, [pc, #460] @ (8011094 <HAL_UART_IRQHandler+0x59c>)
  39426. 8010ec8: 4293 cmp r3, r2
  39427. 8010eca: d006 beq.n 8010eda <HAL_UART_IRQHandler+0x3e2>
  39428. 8010ecc: 687b ldr r3, [r7, #4]
  39429. 8010ece: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39430. 8010ed2: 681b ldr r3, [r3, #0]
  39431. 8010ed4: 4a70 ldr r2, [pc, #448] @ (8011098 <HAL_UART_IRQHandler+0x5a0>)
  39432. 8010ed6: 4293 cmp r3, r2
  39433. 8010ed8: d106 bne.n 8010ee8 <HAL_UART_IRQHandler+0x3f0>
  39434. 8010eda: 687b ldr r3, [r7, #4]
  39435. 8010edc: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39436. 8010ee0: 681b ldr r3, [r3, #0]
  39437. 8010ee2: 685b ldr r3, [r3, #4]
  39438. 8010ee4: b29b uxth r3, r3
  39439. 8010ee6: e005 b.n 8010ef4 <HAL_UART_IRQHandler+0x3fc>
  39440. 8010ee8: 687b ldr r3, [r7, #4]
  39441. 8010eea: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39442. 8010eee: 681b ldr r3, [r3, #0]
  39443. 8010ef0: 685b ldr r3, [r3, #4]
  39444. 8010ef2: b29b uxth r3, r3
  39445. 8010ef4: f8a7 30be strh.w r3, [r7, #190] @ 0xbe
  39446. if ((nb_remaining_rx_data > 0U)
  39447. 8010ef8: f8b7 30be ldrh.w r3, [r7, #190] @ 0xbe
  39448. 8010efc: 2b00 cmp r3, #0
  39449. 8010efe: f000 81ab beq.w 8011258 <HAL_UART_IRQHandler+0x760>
  39450. && (nb_remaining_rx_data < huart->RxXferSize))
  39451. 8010f02: 687b ldr r3, [r7, #4]
  39452. 8010f04: f8b3 305c ldrh.w r3, [r3, #92] @ 0x5c
  39453. 8010f08: f8b7 20be ldrh.w r2, [r7, #190] @ 0xbe
  39454. 8010f0c: 429a cmp r2, r3
  39455. 8010f0e: f080 81a3 bcs.w 8011258 <HAL_UART_IRQHandler+0x760>
  39456. {
  39457. /* Reception is not complete */
  39458. huart->RxXferCount = nb_remaining_rx_data;
  39459. 8010f12: 687b ldr r3, [r7, #4]
  39460. 8010f14: f8b7 20be ldrh.w r2, [r7, #190] @ 0xbe
  39461. 8010f18: f8a3 205e strh.w r2, [r3, #94] @ 0x5e
  39462. /* In Normal mode, end DMA xfer and HAL UART Rx process*/
  39463. if (huart->hdmarx->Init.Mode != DMA_CIRCULAR)
  39464. 8010f1c: 687b ldr r3, [r7, #4]
  39465. 8010f1e: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39466. 8010f22: 69db ldr r3, [r3, #28]
  39467. 8010f24: f5b3 7f80 cmp.w r3, #256 @ 0x100
  39468. 8010f28: f000 8087 beq.w 801103a <HAL_UART_IRQHandler+0x542>
  39469. {
  39470. /* Disable PE and ERR (Frame error, noise error, overrun error) interrupts */
  39471. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_PEIE);
  39472. 8010f2c: 687b ldr r3, [r7, #4]
  39473. 8010f2e: 681b ldr r3, [r3, #0]
  39474. 8010f30: f8c7 3088 str.w r3, [r7, #136] @ 0x88
  39475. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  39476. 8010f34: f8d7 3088 ldr.w r3, [r7, #136] @ 0x88
  39477. 8010f38: e853 3f00 ldrex r3, [r3]
  39478. 8010f3c: f8c7 3084 str.w r3, [r7, #132] @ 0x84
  39479. return(result);
  39480. 8010f40: f8d7 3084 ldr.w r3, [r7, #132] @ 0x84
  39481. 8010f44: f423 7380 bic.w r3, r3, #256 @ 0x100
  39482. 8010f48: f8c7 30b8 str.w r3, [r7, #184] @ 0xb8
  39483. 8010f4c: 687b ldr r3, [r7, #4]
  39484. 8010f4e: 681b ldr r3, [r3, #0]
  39485. 8010f50: 461a mov r2, r3
  39486. 8010f52: f8d7 30b8 ldr.w r3, [r7, #184] @ 0xb8
  39487. 8010f56: f8c7 3094 str.w r3, [r7, #148] @ 0x94
  39488. 8010f5a: f8c7 2090 str.w r2, [r7, #144] @ 0x90
  39489. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  39490. 8010f5e: f8d7 1090 ldr.w r1, [r7, #144] @ 0x90
  39491. 8010f62: f8d7 2094 ldr.w r2, [r7, #148] @ 0x94
  39492. 8010f66: e841 2300 strex r3, r2, [r1]
  39493. 8010f6a: f8c7 308c str.w r3, [r7, #140] @ 0x8c
  39494. return(result);
  39495. 8010f6e: f8d7 308c ldr.w r3, [r7, #140] @ 0x8c
  39496. 8010f72: 2b00 cmp r3, #0
  39497. 8010f74: d1da bne.n 8010f2c <HAL_UART_IRQHandler+0x434>
  39498. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);
  39499. 8010f76: 687b ldr r3, [r7, #4]
  39500. 8010f78: 681b ldr r3, [r3, #0]
  39501. 8010f7a: 3308 adds r3, #8
  39502. 8010f7c: 677b str r3, [r7, #116] @ 0x74
  39503. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  39504. 8010f7e: 6f7b ldr r3, [r7, #116] @ 0x74
  39505. 8010f80: e853 3f00 ldrex r3, [r3]
  39506. 8010f84: 673b str r3, [r7, #112] @ 0x70
  39507. return(result);
  39508. 8010f86: 6f3b ldr r3, [r7, #112] @ 0x70
  39509. 8010f88: f023 0301 bic.w r3, r3, #1
  39510. 8010f8c: f8c7 30b4 str.w r3, [r7, #180] @ 0xb4
  39511. 8010f90: 687b ldr r3, [r7, #4]
  39512. 8010f92: 681b ldr r3, [r3, #0]
  39513. 8010f94: 3308 adds r3, #8
  39514. 8010f96: f8d7 20b4 ldr.w r2, [r7, #180] @ 0xb4
  39515. 8010f9a: f8c7 2080 str.w r2, [r7, #128] @ 0x80
  39516. 8010f9e: 67fb str r3, [r7, #124] @ 0x7c
  39517. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  39518. 8010fa0: 6ff9 ldr r1, [r7, #124] @ 0x7c
  39519. 8010fa2: f8d7 2080 ldr.w r2, [r7, #128] @ 0x80
  39520. 8010fa6: e841 2300 strex r3, r2, [r1]
  39521. 8010faa: 67bb str r3, [r7, #120] @ 0x78
  39522. return(result);
  39523. 8010fac: 6fbb ldr r3, [r7, #120] @ 0x78
  39524. 8010fae: 2b00 cmp r3, #0
  39525. 8010fb0: d1e1 bne.n 8010f76 <HAL_UART_IRQHandler+0x47e>
  39526. /* Disable the DMA transfer for the receiver request by resetting the DMAR bit
  39527. in the UART CR3 register */
  39528. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR);
  39529. 8010fb2: 687b ldr r3, [r7, #4]
  39530. 8010fb4: 681b ldr r3, [r3, #0]
  39531. 8010fb6: 3308 adds r3, #8
  39532. 8010fb8: 663b str r3, [r7, #96] @ 0x60
  39533. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  39534. 8010fba: 6e3b ldr r3, [r7, #96] @ 0x60
  39535. 8010fbc: e853 3f00 ldrex r3, [r3]
  39536. 8010fc0: 65fb str r3, [r7, #92] @ 0x5c
  39537. return(result);
  39538. 8010fc2: 6dfb ldr r3, [r7, #92] @ 0x5c
  39539. 8010fc4: f023 0340 bic.w r3, r3, #64 @ 0x40
  39540. 8010fc8: f8c7 30b0 str.w r3, [r7, #176] @ 0xb0
  39541. 8010fcc: 687b ldr r3, [r7, #4]
  39542. 8010fce: 681b ldr r3, [r3, #0]
  39543. 8010fd0: 3308 adds r3, #8
  39544. 8010fd2: f8d7 20b0 ldr.w r2, [r7, #176] @ 0xb0
  39545. 8010fd6: 66fa str r2, [r7, #108] @ 0x6c
  39546. 8010fd8: 66bb str r3, [r7, #104] @ 0x68
  39547. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  39548. 8010fda: 6eb9 ldr r1, [r7, #104] @ 0x68
  39549. 8010fdc: 6efa ldr r2, [r7, #108] @ 0x6c
  39550. 8010fde: e841 2300 strex r3, r2, [r1]
  39551. 8010fe2: 667b str r3, [r7, #100] @ 0x64
  39552. return(result);
  39553. 8010fe4: 6e7b ldr r3, [r7, #100] @ 0x64
  39554. 8010fe6: 2b00 cmp r3, #0
  39555. 8010fe8: d1e3 bne.n 8010fb2 <HAL_UART_IRQHandler+0x4ba>
  39556. /* At end of Rx process, restore huart->RxState to Ready */
  39557. huart->RxState = HAL_UART_STATE_READY;
  39558. 8010fea: 687b ldr r3, [r7, #4]
  39559. 8010fec: 2220 movs r2, #32
  39560. 8010fee: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  39561. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  39562. 8010ff2: 687b ldr r3, [r7, #4]
  39563. 8010ff4: 2200 movs r2, #0
  39564. 8010ff6: 66da str r2, [r3, #108] @ 0x6c
  39565. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  39566. 8010ff8: 687b ldr r3, [r7, #4]
  39567. 8010ffa: 681b ldr r3, [r3, #0]
  39568. 8010ffc: 64fb str r3, [r7, #76] @ 0x4c
  39569. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  39570. 8010ffe: 6cfb ldr r3, [r7, #76] @ 0x4c
  39571. 8011000: e853 3f00 ldrex r3, [r3]
  39572. 8011004: 64bb str r3, [r7, #72] @ 0x48
  39573. return(result);
  39574. 8011006: 6cbb ldr r3, [r7, #72] @ 0x48
  39575. 8011008: f023 0310 bic.w r3, r3, #16
  39576. 801100c: f8c7 30ac str.w r3, [r7, #172] @ 0xac
  39577. 8011010: 687b ldr r3, [r7, #4]
  39578. 8011012: 681b ldr r3, [r3, #0]
  39579. 8011014: 461a mov r2, r3
  39580. 8011016: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac
  39581. 801101a: 65bb str r3, [r7, #88] @ 0x58
  39582. 801101c: 657a str r2, [r7, #84] @ 0x54
  39583. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  39584. 801101e: 6d79 ldr r1, [r7, #84] @ 0x54
  39585. 8011020: 6dba ldr r2, [r7, #88] @ 0x58
  39586. 8011022: e841 2300 strex r3, r2, [r1]
  39587. 8011026: 653b str r3, [r7, #80] @ 0x50
  39588. return(result);
  39589. 8011028: 6d3b ldr r3, [r7, #80] @ 0x50
  39590. 801102a: 2b00 cmp r3, #0
  39591. 801102c: d1e4 bne.n 8010ff8 <HAL_UART_IRQHandler+0x500>
  39592. /* Last bytes received, so no need as the abort is immediate */
  39593. (void)HAL_DMA_Abort(huart->hdmarx);
  39594. 801102e: 687b ldr r3, [r7, #4]
  39595. 8011030: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  39596. 8011034: 4618 mov r0, r3
  39597. 8011036: f7f7 ff1d bl 8008e74 <HAL_DMA_Abort>
  39598. }
  39599. /* Initialize type of RxEvent that correspond to RxEvent callback execution;
  39600. In this case, Rx Event type is Idle Event */
  39601. huart->RxEventType = HAL_UART_RXEVENT_IDLE;
  39602. 801103a: 687b ldr r3, [r7, #4]
  39603. 801103c: 2202 movs r2, #2
  39604. 801103e: 671a str r2, [r3, #112] @ 0x70
  39605. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  39606. /*Call registered Rx Event callback*/
  39607. huart->RxEventCallback(huart, (huart->RxXferSize - huart->RxXferCount));
  39608. #else
  39609. /*Call legacy weak Rx Event callback*/
  39610. HAL_UARTEx_RxEventCallback(huart, (huart->RxXferSize - huart->RxXferCount));
  39611. 8011040: 687b ldr r3, [r7, #4]
  39612. 8011042: f8b3 205c ldrh.w r2, [r3, #92] @ 0x5c
  39613. 8011046: 687b ldr r3, [r7, #4]
  39614. 8011048: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  39615. 801104c: b29b uxth r3, r3
  39616. 801104e: 1ad3 subs r3, r2, r3
  39617. 8011050: b29b uxth r3, r3
  39618. 8011052: 4619 mov r1, r3
  39619. 8011054: 6878 ldr r0, [r7, #4]
  39620. 8011056: f7f3 fcad bl 80049b4 <HAL_UARTEx_RxEventCallback>
  39621. #endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */
  39622. }
  39623. return;
  39624. 801105a: e0fd b.n 8011258 <HAL_UART_IRQHandler+0x760>
  39625. 801105c: 40020010 .word 0x40020010
  39626. 8011060: 40020028 .word 0x40020028
  39627. 8011064: 40020040 .word 0x40020040
  39628. 8011068: 40020058 .word 0x40020058
  39629. 801106c: 40020070 .word 0x40020070
  39630. 8011070: 40020088 .word 0x40020088
  39631. 8011074: 400200a0 .word 0x400200a0
  39632. 8011078: 400200b8 .word 0x400200b8
  39633. 801107c: 40020410 .word 0x40020410
  39634. 8011080: 40020428 .word 0x40020428
  39635. 8011084: 40020440 .word 0x40020440
  39636. 8011088: 40020458 .word 0x40020458
  39637. 801108c: 40020470 .word 0x40020470
  39638. 8011090: 40020488 .word 0x40020488
  39639. 8011094: 400204a0 .word 0x400204a0
  39640. 8011098: 400204b8 .word 0x400204b8
  39641. else
  39642. {
  39643. /* DMA mode not enabled */
  39644. /* Check received length : If all expected data are received, do nothing.
  39645. Otherwise, if at least one data has already been received, IDLE event is to be notified to user */
  39646. uint16_t nb_rx_data = huart->RxXferSize - huart->RxXferCount;
  39647. 801109c: 687b ldr r3, [r7, #4]
  39648. 801109e: f8b3 205c ldrh.w r2, [r3, #92] @ 0x5c
  39649. 80110a2: 687b ldr r3, [r7, #4]
  39650. 80110a4: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  39651. 80110a8: b29b uxth r3, r3
  39652. 80110aa: 1ad3 subs r3, r2, r3
  39653. 80110ac: f8a7 30ce strh.w r3, [r7, #206] @ 0xce
  39654. if ((huart->RxXferCount > 0U)
  39655. 80110b0: 687b ldr r3, [r7, #4]
  39656. 80110b2: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  39657. 80110b6: b29b uxth r3, r3
  39658. 80110b8: 2b00 cmp r3, #0
  39659. 80110ba: f000 80cf beq.w 801125c <HAL_UART_IRQHandler+0x764>
  39660. && (nb_rx_data > 0U))
  39661. 80110be: f8b7 30ce ldrh.w r3, [r7, #206] @ 0xce
  39662. 80110c2: 2b00 cmp r3, #0
  39663. 80110c4: f000 80ca beq.w 801125c <HAL_UART_IRQHandler+0x764>
  39664. {
  39665. /* Disable the UART Parity Error Interrupt and RXNE interrupts */
  39666. ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE));
  39667. 80110c8: 687b ldr r3, [r7, #4]
  39668. 80110ca: 681b ldr r3, [r3, #0]
  39669. 80110cc: 63bb str r3, [r7, #56] @ 0x38
  39670. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  39671. 80110ce: 6bbb ldr r3, [r7, #56] @ 0x38
  39672. 80110d0: e853 3f00 ldrex r3, [r3]
  39673. 80110d4: 637b str r3, [r7, #52] @ 0x34
  39674. return(result);
  39675. 80110d6: 6b7b ldr r3, [r7, #52] @ 0x34
  39676. 80110d8: f423 7390 bic.w r3, r3, #288 @ 0x120
  39677. 80110dc: f8c7 30c8 str.w r3, [r7, #200] @ 0xc8
  39678. 80110e0: 687b ldr r3, [r7, #4]
  39679. 80110e2: 681b ldr r3, [r3, #0]
  39680. 80110e4: 461a mov r2, r3
  39681. 80110e6: f8d7 30c8 ldr.w r3, [r7, #200] @ 0xc8
  39682. 80110ea: 647b str r3, [r7, #68] @ 0x44
  39683. 80110ec: 643a str r2, [r7, #64] @ 0x40
  39684. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  39685. 80110ee: 6c39 ldr r1, [r7, #64] @ 0x40
  39686. 80110f0: 6c7a ldr r2, [r7, #68] @ 0x44
  39687. 80110f2: e841 2300 strex r3, r2, [r1]
  39688. 80110f6: 63fb str r3, [r7, #60] @ 0x3c
  39689. return(result);
  39690. 80110f8: 6bfb ldr r3, [r7, #60] @ 0x3c
  39691. 80110fa: 2b00 cmp r3, #0
  39692. 80110fc: d1e4 bne.n 80110c8 <HAL_UART_IRQHandler+0x5d0>
  39693. /* Disable the UART Error Interrupt:(Frame error, noise error, overrun error) and RX FIFO Threshold interrupt */
  39694. ATOMIC_CLEAR_BIT(huart->Instance->CR3, (USART_CR3_EIE | USART_CR3_RXFTIE));
  39695. 80110fe: 687b ldr r3, [r7, #4]
  39696. 8011100: 681b ldr r3, [r3, #0]
  39697. 8011102: 3308 adds r3, #8
  39698. 8011104: 627b str r3, [r7, #36] @ 0x24
  39699. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  39700. 8011106: 6a7b ldr r3, [r7, #36] @ 0x24
  39701. 8011108: e853 3f00 ldrex r3, [r3]
  39702. 801110c: 623b str r3, [r7, #32]
  39703. return(result);
  39704. 801110e: 6a3a ldr r2, [r7, #32]
  39705. 8011110: 4b55 ldr r3, [pc, #340] @ (8011268 <HAL_UART_IRQHandler+0x770>)
  39706. 8011112: 4013 ands r3, r2
  39707. 8011114: f8c7 30c4 str.w r3, [r7, #196] @ 0xc4
  39708. 8011118: 687b ldr r3, [r7, #4]
  39709. 801111a: 681b ldr r3, [r3, #0]
  39710. 801111c: 3308 adds r3, #8
  39711. 801111e: f8d7 20c4 ldr.w r2, [r7, #196] @ 0xc4
  39712. 8011122: 633a str r2, [r7, #48] @ 0x30
  39713. 8011124: 62fb str r3, [r7, #44] @ 0x2c
  39714. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  39715. 8011126: 6af9 ldr r1, [r7, #44] @ 0x2c
  39716. 8011128: 6b3a ldr r2, [r7, #48] @ 0x30
  39717. 801112a: e841 2300 strex r3, r2, [r1]
  39718. 801112e: 62bb str r3, [r7, #40] @ 0x28
  39719. return(result);
  39720. 8011130: 6abb ldr r3, [r7, #40] @ 0x28
  39721. 8011132: 2b00 cmp r3, #0
  39722. 8011134: d1e3 bne.n 80110fe <HAL_UART_IRQHandler+0x606>
  39723. /* Rx process is completed, restore huart->RxState to Ready */
  39724. huart->RxState = HAL_UART_STATE_READY;
  39725. 8011136: 687b ldr r3, [r7, #4]
  39726. 8011138: 2220 movs r2, #32
  39727. 801113a: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  39728. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  39729. 801113e: 687b ldr r3, [r7, #4]
  39730. 8011140: 2200 movs r2, #0
  39731. 8011142: 66da str r2, [r3, #108] @ 0x6c
  39732. /* Clear RxISR function pointer */
  39733. huart->RxISR = NULL;
  39734. 8011144: 687b ldr r3, [r7, #4]
  39735. 8011146: 2200 movs r2, #0
  39736. 8011148: 675a str r2, [r3, #116] @ 0x74
  39737. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  39738. 801114a: 687b ldr r3, [r7, #4]
  39739. 801114c: 681b ldr r3, [r3, #0]
  39740. 801114e: 613b str r3, [r7, #16]
  39741. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  39742. 8011150: 693b ldr r3, [r7, #16]
  39743. 8011152: e853 3f00 ldrex r3, [r3]
  39744. 8011156: 60fb str r3, [r7, #12]
  39745. return(result);
  39746. 8011158: 68fb ldr r3, [r7, #12]
  39747. 801115a: f023 0310 bic.w r3, r3, #16
  39748. 801115e: f8c7 30c0 str.w r3, [r7, #192] @ 0xc0
  39749. 8011162: 687b ldr r3, [r7, #4]
  39750. 8011164: 681b ldr r3, [r3, #0]
  39751. 8011166: 461a mov r2, r3
  39752. 8011168: f8d7 30c0 ldr.w r3, [r7, #192] @ 0xc0
  39753. 801116c: 61fb str r3, [r7, #28]
  39754. 801116e: 61ba str r2, [r7, #24]
  39755. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  39756. 8011170: 69b9 ldr r1, [r7, #24]
  39757. 8011172: 69fa ldr r2, [r7, #28]
  39758. 8011174: e841 2300 strex r3, r2, [r1]
  39759. 8011178: 617b str r3, [r7, #20]
  39760. return(result);
  39761. 801117a: 697b ldr r3, [r7, #20]
  39762. 801117c: 2b00 cmp r3, #0
  39763. 801117e: d1e4 bne.n 801114a <HAL_UART_IRQHandler+0x652>
  39764. /* Initialize type of RxEvent that correspond to RxEvent callback execution;
  39765. In this case, Rx Event type is Idle Event */
  39766. huart->RxEventType = HAL_UART_RXEVENT_IDLE;
  39767. 8011180: 687b ldr r3, [r7, #4]
  39768. 8011182: 2202 movs r2, #2
  39769. 8011184: 671a str r2, [r3, #112] @ 0x70
  39770. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  39771. /*Call registered Rx complete callback*/
  39772. huart->RxEventCallback(huart, nb_rx_data);
  39773. #else
  39774. /*Call legacy weak Rx Event callback*/
  39775. HAL_UARTEx_RxEventCallback(huart, nb_rx_data);
  39776. 8011186: f8b7 30ce ldrh.w r3, [r7, #206] @ 0xce
  39777. 801118a: 4619 mov r1, r3
  39778. 801118c: 6878 ldr r0, [r7, #4]
  39779. 801118e: f7f3 fc11 bl 80049b4 <HAL_UARTEx_RxEventCallback>
  39780. #endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */
  39781. }
  39782. return;
  39783. 8011192: e063 b.n 801125c <HAL_UART_IRQHandler+0x764>
  39784. }
  39785. }
  39786. /* UART wakeup from Stop mode interrupt occurred ---------------------------*/
  39787. if (((isrflags & USART_ISR_WUF) != 0U) && ((cr3its & USART_CR3_WUFIE) != 0U))
  39788. 8011194: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  39789. 8011198: f403 1380 and.w r3, r3, #1048576 @ 0x100000
  39790. 801119c: 2b00 cmp r3, #0
  39791. 801119e: d00e beq.n 80111be <HAL_UART_IRQHandler+0x6c6>
  39792. 80111a0: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc
  39793. 80111a4: f403 0380 and.w r3, r3, #4194304 @ 0x400000
  39794. 80111a8: 2b00 cmp r3, #0
  39795. 80111aa: d008 beq.n 80111be <HAL_UART_IRQHandler+0x6c6>
  39796. {
  39797. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_WUF);
  39798. 80111ac: 687b ldr r3, [r7, #4]
  39799. 80111ae: 681b ldr r3, [r3, #0]
  39800. 80111b0: f44f 1280 mov.w r2, #1048576 @ 0x100000
  39801. 80111b4: 621a str r2, [r3, #32]
  39802. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  39803. /* Call registered Wakeup Callback */
  39804. huart->WakeupCallback(huart);
  39805. #else
  39806. /* Call legacy weak Wakeup Callback */
  39807. HAL_UARTEx_WakeupCallback(huart);
  39808. 80111b6: 6878 ldr r0, [r7, #4]
  39809. 80111b8: f002 f80c bl 80131d4 <HAL_UARTEx_WakeupCallback>
  39810. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  39811. return;
  39812. 80111bc: e051 b.n 8011262 <HAL_UART_IRQHandler+0x76a>
  39813. }
  39814. /* UART in mode Transmitter ------------------------------------------------*/
  39815. if (((isrflags & USART_ISR_TXE_TXFNF) != 0U)
  39816. 80111be: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  39817. 80111c2: f003 0380 and.w r3, r3, #128 @ 0x80
  39818. 80111c6: 2b00 cmp r3, #0
  39819. 80111c8: d014 beq.n 80111f4 <HAL_UART_IRQHandler+0x6fc>
  39820. && (((cr1its & USART_CR1_TXEIE_TXFNFIE) != 0U)
  39821. 80111ca: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  39822. 80111ce: f003 0380 and.w r3, r3, #128 @ 0x80
  39823. 80111d2: 2b00 cmp r3, #0
  39824. 80111d4: d105 bne.n 80111e2 <HAL_UART_IRQHandler+0x6ea>
  39825. || ((cr3its & USART_CR3_TXFTIE) != 0U)))
  39826. 80111d6: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc
  39827. 80111da: f403 0300 and.w r3, r3, #8388608 @ 0x800000
  39828. 80111de: 2b00 cmp r3, #0
  39829. 80111e0: d008 beq.n 80111f4 <HAL_UART_IRQHandler+0x6fc>
  39830. {
  39831. if (huart->TxISR != NULL)
  39832. 80111e2: 687b ldr r3, [r7, #4]
  39833. 80111e4: 6f9b ldr r3, [r3, #120] @ 0x78
  39834. 80111e6: 2b00 cmp r3, #0
  39835. 80111e8: d03a beq.n 8011260 <HAL_UART_IRQHandler+0x768>
  39836. {
  39837. huart->TxISR(huart);
  39838. 80111ea: 687b ldr r3, [r7, #4]
  39839. 80111ec: 6f9b ldr r3, [r3, #120] @ 0x78
  39840. 80111ee: 6878 ldr r0, [r7, #4]
  39841. 80111f0: 4798 blx r3
  39842. }
  39843. return;
  39844. 80111f2: e035 b.n 8011260 <HAL_UART_IRQHandler+0x768>
  39845. }
  39846. /* UART in mode Transmitter (transmission end) -----------------------------*/
  39847. if (((isrflags & USART_ISR_TC) != 0U) && ((cr1its & USART_CR1_TCIE) != 0U))
  39848. 80111f4: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  39849. 80111f8: f003 0340 and.w r3, r3, #64 @ 0x40
  39850. 80111fc: 2b00 cmp r3, #0
  39851. 80111fe: d009 beq.n 8011214 <HAL_UART_IRQHandler+0x71c>
  39852. 8011200: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  39853. 8011204: f003 0340 and.w r3, r3, #64 @ 0x40
  39854. 8011208: 2b00 cmp r3, #0
  39855. 801120a: d003 beq.n 8011214 <HAL_UART_IRQHandler+0x71c>
  39856. {
  39857. UART_EndTransmit_IT(huart);
  39858. 801120c: 6878 ldr r0, [r7, #4]
  39859. 801120e: f001 fa99 bl 8012744 <UART_EndTransmit_IT>
  39860. return;
  39861. 8011212: e026 b.n 8011262 <HAL_UART_IRQHandler+0x76a>
  39862. }
  39863. /* UART TX Fifo Empty occurred ----------------------------------------------*/
  39864. if (((isrflags & USART_ISR_TXFE) != 0U) && ((cr1its & USART_CR1_TXFEIE) != 0U))
  39865. 8011214: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  39866. 8011218: f403 0300 and.w r3, r3, #8388608 @ 0x800000
  39867. 801121c: 2b00 cmp r3, #0
  39868. 801121e: d009 beq.n 8011234 <HAL_UART_IRQHandler+0x73c>
  39869. 8011220: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  39870. 8011224: f003 4380 and.w r3, r3, #1073741824 @ 0x40000000
  39871. 8011228: 2b00 cmp r3, #0
  39872. 801122a: d003 beq.n 8011234 <HAL_UART_IRQHandler+0x73c>
  39873. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  39874. /* Call registered Tx Fifo Empty Callback */
  39875. huart->TxFifoEmptyCallback(huart);
  39876. #else
  39877. /* Call legacy weak Tx Fifo Empty Callback */
  39878. HAL_UARTEx_TxFifoEmptyCallback(huart);
  39879. 801122c: 6878 ldr r0, [r7, #4]
  39880. 801122e: f001 ffe5 bl 80131fc <HAL_UARTEx_TxFifoEmptyCallback>
  39881. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  39882. return;
  39883. 8011232: e016 b.n 8011262 <HAL_UART_IRQHandler+0x76a>
  39884. }
  39885. /* UART RX Fifo Full occurred ----------------------------------------------*/
  39886. if (((isrflags & USART_ISR_RXFF) != 0U) && ((cr1its & USART_CR1_RXFFIE) != 0U))
  39887. 8011234: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  39888. 8011238: f003 7380 and.w r3, r3, #16777216 @ 0x1000000
  39889. 801123c: 2b00 cmp r3, #0
  39890. 801123e: d010 beq.n 8011262 <HAL_UART_IRQHandler+0x76a>
  39891. 8011240: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  39892. 8011244: 2b00 cmp r3, #0
  39893. 8011246: da0c bge.n 8011262 <HAL_UART_IRQHandler+0x76a>
  39894. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  39895. /* Call registered Rx Fifo Full Callback */
  39896. huart->RxFifoFullCallback(huart);
  39897. #else
  39898. /* Call legacy weak Rx Fifo Full Callback */
  39899. HAL_UARTEx_RxFifoFullCallback(huart);
  39900. 8011248: 6878 ldr r0, [r7, #4]
  39901. 801124a: f001 ffcd bl 80131e8 <HAL_UARTEx_RxFifoFullCallback>
  39902. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  39903. return;
  39904. 801124e: e008 b.n 8011262 <HAL_UART_IRQHandler+0x76a>
  39905. return;
  39906. 8011250: bf00 nop
  39907. 8011252: e006 b.n 8011262 <HAL_UART_IRQHandler+0x76a>
  39908. return;
  39909. 8011254: bf00 nop
  39910. 8011256: e004 b.n 8011262 <HAL_UART_IRQHandler+0x76a>
  39911. return;
  39912. 8011258: bf00 nop
  39913. 801125a: e002 b.n 8011262 <HAL_UART_IRQHandler+0x76a>
  39914. return;
  39915. 801125c: bf00 nop
  39916. 801125e: e000 b.n 8011262 <HAL_UART_IRQHandler+0x76a>
  39917. return;
  39918. 8011260: bf00 nop
  39919. }
  39920. }
  39921. 8011262: 37e8 adds r7, #232 @ 0xe8
  39922. 8011264: 46bd mov sp, r7
  39923. 8011266: bd80 pop {r7, pc}
  39924. 8011268: effffffe .word 0xeffffffe
  39925. 0801126c <HAL_UART_ErrorCallback>:
  39926. * @brief UART error callback.
  39927. * @param huart UART handle.
  39928. * @retval None
  39929. */
  39930. __weak void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
  39931. {
  39932. 801126c: b480 push {r7}
  39933. 801126e: b083 sub sp, #12
  39934. 8011270: af00 add r7, sp, #0
  39935. 8011272: 6078 str r0, [r7, #4]
  39936. UNUSED(huart);
  39937. /* NOTE : This function should not be modified, when the callback is needed,
  39938. the HAL_UART_ErrorCallback can be implemented in the user file.
  39939. */
  39940. }
  39941. 8011274: bf00 nop
  39942. 8011276: 370c adds r7, #12
  39943. 8011278: 46bd mov sp, r7
  39944. 801127a: f85d 7b04 ldr.w r7, [sp], #4
  39945. 801127e: 4770 bx lr
  39946. 08011280 <UART_SetConfig>:
  39947. * @brief Configure the UART peripheral.
  39948. * @param huart UART handle.
  39949. * @retval HAL status
  39950. */
  39951. HAL_StatusTypeDef UART_SetConfig(UART_HandleTypeDef *huart)
  39952. {
  39953. 8011280: e92d 4fb0 stmdb sp!, {r4, r5, r7, r8, r9, sl, fp, lr}
  39954. 8011284: b092 sub sp, #72 @ 0x48
  39955. 8011286: af00 add r7, sp, #0
  39956. 8011288: 6178 str r0, [r7, #20]
  39957. uint32_t tmpreg;
  39958. uint16_t brrtemp;
  39959. UART_ClockSourceTypeDef clocksource;
  39960. uint32_t usartdiv;
  39961. HAL_StatusTypeDef ret = HAL_OK;
  39962. 801128a: 2300 movs r3, #0
  39963. 801128c: f887 3042 strb.w r3, [r7, #66] @ 0x42
  39964. * the UART Word Length, Parity, Mode and oversampling:
  39965. * set the M bits according to huart->Init.WordLength value
  39966. * set PCE and PS bits according to huart->Init.Parity value
  39967. * set TE and RE bits according to huart->Init.Mode value
  39968. * set OVER8 bit according to huart->Init.OverSampling value */
  39969. tmpreg = (uint32_t)huart->Init.WordLength | huart->Init.Parity | huart->Init.Mode | huart->Init.OverSampling ;
  39970. 8011290: 697b ldr r3, [r7, #20]
  39971. 8011292: 689a ldr r2, [r3, #8]
  39972. 8011294: 697b ldr r3, [r7, #20]
  39973. 8011296: 691b ldr r3, [r3, #16]
  39974. 8011298: 431a orrs r2, r3
  39975. 801129a: 697b ldr r3, [r7, #20]
  39976. 801129c: 695b ldr r3, [r3, #20]
  39977. 801129e: 431a orrs r2, r3
  39978. 80112a0: 697b ldr r3, [r7, #20]
  39979. 80112a2: 69db ldr r3, [r3, #28]
  39980. 80112a4: 4313 orrs r3, r2
  39981. 80112a6: 647b str r3, [r7, #68] @ 0x44
  39982. MODIFY_REG(huart->Instance->CR1, USART_CR1_FIELDS, tmpreg);
  39983. 80112a8: 697b ldr r3, [r7, #20]
  39984. 80112aa: 681b ldr r3, [r3, #0]
  39985. 80112ac: 681a ldr r2, [r3, #0]
  39986. 80112ae: 4bbe ldr r3, [pc, #760] @ (80115a8 <UART_SetConfig+0x328>)
  39987. 80112b0: 4013 ands r3, r2
  39988. 80112b2: 697a ldr r2, [r7, #20]
  39989. 80112b4: 6812 ldr r2, [r2, #0]
  39990. 80112b6: 6c79 ldr r1, [r7, #68] @ 0x44
  39991. 80112b8: 430b orrs r3, r1
  39992. 80112ba: 6013 str r3, [r2, #0]
  39993. /*-------------------------- USART CR2 Configuration -----------------------*/
  39994. /* Configure the UART Stop Bits: Set STOP[13:12] bits according
  39995. * to huart->Init.StopBits value */
  39996. MODIFY_REG(huart->Instance->CR2, USART_CR2_STOP, huart->Init.StopBits);
  39997. 80112bc: 697b ldr r3, [r7, #20]
  39998. 80112be: 681b ldr r3, [r3, #0]
  39999. 80112c0: 685b ldr r3, [r3, #4]
  40000. 80112c2: f423 5140 bic.w r1, r3, #12288 @ 0x3000
  40001. 80112c6: 697b ldr r3, [r7, #20]
  40002. 80112c8: 68da ldr r2, [r3, #12]
  40003. 80112ca: 697b ldr r3, [r7, #20]
  40004. 80112cc: 681b ldr r3, [r3, #0]
  40005. 80112ce: 430a orrs r2, r1
  40006. 80112d0: 605a str r2, [r3, #4]
  40007. /* Configure
  40008. * - UART HardWare Flow Control: set CTSE and RTSE bits according
  40009. * to huart->Init.HwFlowCtl value
  40010. * - one-bit sampling method versus three samples' majority rule according
  40011. * to huart->Init.OneBitSampling (not applicable to LPUART) */
  40012. tmpreg = (uint32_t)huart->Init.HwFlowCtl;
  40013. 80112d2: 697b ldr r3, [r7, #20]
  40014. 80112d4: 699b ldr r3, [r3, #24]
  40015. 80112d6: 647b str r3, [r7, #68] @ 0x44
  40016. if (!(UART_INSTANCE_LOWPOWER(huart)))
  40017. 80112d8: 697b ldr r3, [r7, #20]
  40018. 80112da: 681b ldr r3, [r3, #0]
  40019. 80112dc: 4ab3 ldr r2, [pc, #716] @ (80115ac <UART_SetConfig+0x32c>)
  40020. 80112de: 4293 cmp r3, r2
  40021. 80112e0: d004 beq.n 80112ec <UART_SetConfig+0x6c>
  40022. {
  40023. tmpreg |= huart->Init.OneBitSampling;
  40024. 80112e2: 697b ldr r3, [r7, #20]
  40025. 80112e4: 6a1b ldr r3, [r3, #32]
  40026. 80112e6: 6c7a ldr r2, [r7, #68] @ 0x44
  40027. 80112e8: 4313 orrs r3, r2
  40028. 80112ea: 647b str r3, [r7, #68] @ 0x44
  40029. }
  40030. MODIFY_REG(huart->Instance->CR3, USART_CR3_FIELDS, tmpreg);
  40031. 80112ec: 697b ldr r3, [r7, #20]
  40032. 80112ee: 681b ldr r3, [r3, #0]
  40033. 80112f0: 689a ldr r2, [r3, #8]
  40034. 80112f2: 4baf ldr r3, [pc, #700] @ (80115b0 <UART_SetConfig+0x330>)
  40035. 80112f4: 4013 ands r3, r2
  40036. 80112f6: 697a ldr r2, [r7, #20]
  40037. 80112f8: 6812 ldr r2, [r2, #0]
  40038. 80112fa: 6c79 ldr r1, [r7, #68] @ 0x44
  40039. 80112fc: 430b orrs r3, r1
  40040. 80112fe: 6093 str r3, [r2, #8]
  40041. /*-------------------------- USART PRESC Configuration -----------------------*/
  40042. /* Configure
  40043. * - UART Clock Prescaler : set PRESCALER according to huart->Init.ClockPrescaler value */
  40044. MODIFY_REG(huart->Instance->PRESC, USART_PRESC_PRESCALER, huart->Init.ClockPrescaler);
  40045. 8011300: 697b ldr r3, [r7, #20]
  40046. 8011302: 681b ldr r3, [r3, #0]
  40047. 8011304: 6adb ldr r3, [r3, #44] @ 0x2c
  40048. 8011306: f023 010f bic.w r1, r3, #15
  40049. 801130a: 697b ldr r3, [r7, #20]
  40050. 801130c: 6a5a ldr r2, [r3, #36] @ 0x24
  40051. 801130e: 697b ldr r3, [r7, #20]
  40052. 8011310: 681b ldr r3, [r3, #0]
  40053. 8011312: 430a orrs r2, r1
  40054. 8011314: 62da str r2, [r3, #44] @ 0x2c
  40055. /*-------------------------- USART BRR Configuration -----------------------*/
  40056. UART_GETCLOCKSOURCE(huart, clocksource);
  40057. 8011316: 697b ldr r3, [r7, #20]
  40058. 8011318: 681b ldr r3, [r3, #0]
  40059. 801131a: 4aa6 ldr r2, [pc, #664] @ (80115b4 <UART_SetConfig+0x334>)
  40060. 801131c: 4293 cmp r3, r2
  40061. 801131e: d177 bne.n 8011410 <UART_SetConfig+0x190>
  40062. 8011320: 4ba5 ldr r3, [pc, #660] @ (80115b8 <UART_SetConfig+0x338>)
  40063. 8011322: 6d5b ldr r3, [r3, #84] @ 0x54
  40064. 8011324: f003 0338 and.w r3, r3, #56 @ 0x38
  40065. 8011328: 2b28 cmp r3, #40 @ 0x28
  40066. 801132a: d86d bhi.n 8011408 <UART_SetConfig+0x188>
  40067. 801132c: a201 add r2, pc, #4 @ (adr r2, 8011334 <UART_SetConfig+0xb4>)
  40068. 801132e: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  40069. 8011332: bf00 nop
  40070. 8011334: 080113d9 .word 0x080113d9
  40071. 8011338: 08011409 .word 0x08011409
  40072. 801133c: 08011409 .word 0x08011409
  40073. 8011340: 08011409 .word 0x08011409
  40074. 8011344: 08011409 .word 0x08011409
  40075. 8011348: 08011409 .word 0x08011409
  40076. 801134c: 08011409 .word 0x08011409
  40077. 8011350: 08011409 .word 0x08011409
  40078. 8011354: 080113e1 .word 0x080113e1
  40079. 8011358: 08011409 .word 0x08011409
  40080. 801135c: 08011409 .word 0x08011409
  40081. 8011360: 08011409 .word 0x08011409
  40082. 8011364: 08011409 .word 0x08011409
  40083. 8011368: 08011409 .word 0x08011409
  40084. 801136c: 08011409 .word 0x08011409
  40085. 8011370: 08011409 .word 0x08011409
  40086. 8011374: 080113e9 .word 0x080113e9
  40087. 8011378: 08011409 .word 0x08011409
  40088. 801137c: 08011409 .word 0x08011409
  40089. 8011380: 08011409 .word 0x08011409
  40090. 8011384: 08011409 .word 0x08011409
  40091. 8011388: 08011409 .word 0x08011409
  40092. 801138c: 08011409 .word 0x08011409
  40093. 8011390: 08011409 .word 0x08011409
  40094. 8011394: 080113f1 .word 0x080113f1
  40095. 8011398: 08011409 .word 0x08011409
  40096. 801139c: 08011409 .word 0x08011409
  40097. 80113a0: 08011409 .word 0x08011409
  40098. 80113a4: 08011409 .word 0x08011409
  40099. 80113a8: 08011409 .word 0x08011409
  40100. 80113ac: 08011409 .word 0x08011409
  40101. 80113b0: 08011409 .word 0x08011409
  40102. 80113b4: 080113f9 .word 0x080113f9
  40103. 80113b8: 08011409 .word 0x08011409
  40104. 80113bc: 08011409 .word 0x08011409
  40105. 80113c0: 08011409 .word 0x08011409
  40106. 80113c4: 08011409 .word 0x08011409
  40107. 80113c8: 08011409 .word 0x08011409
  40108. 80113cc: 08011409 .word 0x08011409
  40109. 80113d0: 08011409 .word 0x08011409
  40110. 80113d4: 08011401 .word 0x08011401
  40111. 80113d8: 2301 movs r3, #1
  40112. 80113da: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40113. 80113de: e222 b.n 8011826 <UART_SetConfig+0x5a6>
  40114. 80113e0: 2304 movs r3, #4
  40115. 80113e2: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40116. 80113e6: e21e b.n 8011826 <UART_SetConfig+0x5a6>
  40117. 80113e8: 2308 movs r3, #8
  40118. 80113ea: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40119. 80113ee: e21a b.n 8011826 <UART_SetConfig+0x5a6>
  40120. 80113f0: 2310 movs r3, #16
  40121. 80113f2: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40122. 80113f6: e216 b.n 8011826 <UART_SetConfig+0x5a6>
  40123. 80113f8: 2320 movs r3, #32
  40124. 80113fa: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40125. 80113fe: e212 b.n 8011826 <UART_SetConfig+0x5a6>
  40126. 8011400: 2340 movs r3, #64 @ 0x40
  40127. 8011402: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40128. 8011406: e20e b.n 8011826 <UART_SetConfig+0x5a6>
  40129. 8011408: 2380 movs r3, #128 @ 0x80
  40130. 801140a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40131. 801140e: e20a b.n 8011826 <UART_SetConfig+0x5a6>
  40132. 8011410: 697b ldr r3, [r7, #20]
  40133. 8011412: 681b ldr r3, [r3, #0]
  40134. 8011414: 4a69 ldr r2, [pc, #420] @ (80115bc <UART_SetConfig+0x33c>)
  40135. 8011416: 4293 cmp r3, r2
  40136. 8011418: d130 bne.n 801147c <UART_SetConfig+0x1fc>
  40137. 801141a: 4b67 ldr r3, [pc, #412] @ (80115b8 <UART_SetConfig+0x338>)
  40138. 801141c: 6d5b ldr r3, [r3, #84] @ 0x54
  40139. 801141e: f003 0307 and.w r3, r3, #7
  40140. 8011422: 2b05 cmp r3, #5
  40141. 8011424: d826 bhi.n 8011474 <UART_SetConfig+0x1f4>
  40142. 8011426: a201 add r2, pc, #4 @ (adr r2, 801142c <UART_SetConfig+0x1ac>)
  40143. 8011428: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  40144. 801142c: 08011445 .word 0x08011445
  40145. 8011430: 0801144d .word 0x0801144d
  40146. 8011434: 08011455 .word 0x08011455
  40147. 8011438: 0801145d .word 0x0801145d
  40148. 801143c: 08011465 .word 0x08011465
  40149. 8011440: 0801146d .word 0x0801146d
  40150. 8011444: 2300 movs r3, #0
  40151. 8011446: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40152. 801144a: e1ec b.n 8011826 <UART_SetConfig+0x5a6>
  40153. 801144c: 2304 movs r3, #4
  40154. 801144e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40155. 8011452: e1e8 b.n 8011826 <UART_SetConfig+0x5a6>
  40156. 8011454: 2308 movs r3, #8
  40157. 8011456: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40158. 801145a: e1e4 b.n 8011826 <UART_SetConfig+0x5a6>
  40159. 801145c: 2310 movs r3, #16
  40160. 801145e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40161. 8011462: e1e0 b.n 8011826 <UART_SetConfig+0x5a6>
  40162. 8011464: 2320 movs r3, #32
  40163. 8011466: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40164. 801146a: e1dc b.n 8011826 <UART_SetConfig+0x5a6>
  40165. 801146c: 2340 movs r3, #64 @ 0x40
  40166. 801146e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40167. 8011472: e1d8 b.n 8011826 <UART_SetConfig+0x5a6>
  40168. 8011474: 2380 movs r3, #128 @ 0x80
  40169. 8011476: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40170. 801147a: e1d4 b.n 8011826 <UART_SetConfig+0x5a6>
  40171. 801147c: 697b ldr r3, [r7, #20]
  40172. 801147e: 681b ldr r3, [r3, #0]
  40173. 8011480: 4a4f ldr r2, [pc, #316] @ (80115c0 <UART_SetConfig+0x340>)
  40174. 8011482: 4293 cmp r3, r2
  40175. 8011484: d130 bne.n 80114e8 <UART_SetConfig+0x268>
  40176. 8011486: 4b4c ldr r3, [pc, #304] @ (80115b8 <UART_SetConfig+0x338>)
  40177. 8011488: 6d5b ldr r3, [r3, #84] @ 0x54
  40178. 801148a: f003 0307 and.w r3, r3, #7
  40179. 801148e: 2b05 cmp r3, #5
  40180. 8011490: d826 bhi.n 80114e0 <UART_SetConfig+0x260>
  40181. 8011492: a201 add r2, pc, #4 @ (adr r2, 8011498 <UART_SetConfig+0x218>)
  40182. 8011494: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  40183. 8011498: 080114b1 .word 0x080114b1
  40184. 801149c: 080114b9 .word 0x080114b9
  40185. 80114a0: 080114c1 .word 0x080114c1
  40186. 80114a4: 080114c9 .word 0x080114c9
  40187. 80114a8: 080114d1 .word 0x080114d1
  40188. 80114ac: 080114d9 .word 0x080114d9
  40189. 80114b0: 2300 movs r3, #0
  40190. 80114b2: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40191. 80114b6: e1b6 b.n 8011826 <UART_SetConfig+0x5a6>
  40192. 80114b8: 2304 movs r3, #4
  40193. 80114ba: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40194. 80114be: e1b2 b.n 8011826 <UART_SetConfig+0x5a6>
  40195. 80114c0: 2308 movs r3, #8
  40196. 80114c2: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40197. 80114c6: e1ae b.n 8011826 <UART_SetConfig+0x5a6>
  40198. 80114c8: 2310 movs r3, #16
  40199. 80114ca: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40200. 80114ce: e1aa b.n 8011826 <UART_SetConfig+0x5a6>
  40201. 80114d0: 2320 movs r3, #32
  40202. 80114d2: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40203. 80114d6: e1a6 b.n 8011826 <UART_SetConfig+0x5a6>
  40204. 80114d8: 2340 movs r3, #64 @ 0x40
  40205. 80114da: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40206. 80114de: e1a2 b.n 8011826 <UART_SetConfig+0x5a6>
  40207. 80114e0: 2380 movs r3, #128 @ 0x80
  40208. 80114e2: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40209. 80114e6: e19e b.n 8011826 <UART_SetConfig+0x5a6>
  40210. 80114e8: 697b ldr r3, [r7, #20]
  40211. 80114ea: 681b ldr r3, [r3, #0]
  40212. 80114ec: 4a35 ldr r2, [pc, #212] @ (80115c4 <UART_SetConfig+0x344>)
  40213. 80114ee: 4293 cmp r3, r2
  40214. 80114f0: d130 bne.n 8011554 <UART_SetConfig+0x2d4>
  40215. 80114f2: 4b31 ldr r3, [pc, #196] @ (80115b8 <UART_SetConfig+0x338>)
  40216. 80114f4: 6d5b ldr r3, [r3, #84] @ 0x54
  40217. 80114f6: f003 0307 and.w r3, r3, #7
  40218. 80114fa: 2b05 cmp r3, #5
  40219. 80114fc: d826 bhi.n 801154c <UART_SetConfig+0x2cc>
  40220. 80114fe: a201 add r2, pc, #4 @ (adr r2, 8011504 <UART_SetConfig+0x284>)
  40221. 8011500: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  40222. 8011504: 0801151d .word 0x0801151d
  40223. 8011508: 08011525 .word 0x08011525
  40224. 801150c: 0801152d .word 0x0801152d
  40225. 8011510: 08011535 .word 0x08011535
  40226. 8011514: 0801153d .word 0x0801153d
  40227. 8011518: 08011545 .word 0x08011545
  40228. 801151c: 2300 movs r3, #0
  40229. 801151e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40230. 8011522: e180 b.n 8011826 <UART_SetConfig+0x5a6>
  40231. 8011524: 2304 movs r3, #4
  40232. 8011526: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40233. 801152a: e17c b.n 8011826 <UART_SetConfig+0x5a6>
  40234. 801152c: 2308 movs r3, #8
  40235. 801152e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40236. 8011532: e178 b.n 8011826 <UART_SetConfig+0x5a6>
  40237. 8011534: 2310 movs r3, #16
  40238. 8011536: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40239. 801153a: e174 b.n 8011826 <UART_SetConfig+0x5a6>
  40240. 801153c: 2320 movs r3, #32
  40241. 801153e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40242. 8011542: e170 b.n 8011826 <UART_SetConfig+0x5a6>
  40243. 8011544: 2340 movs r3, #64 @ 0x40
  40244. 8011546: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40245. 801154a: e16c b.n 8011826 <UART_SetConfig+0x5a6>
  40246. 801154c: 2380 movs r3, #128 @ 0x80
  40247. 801154e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40248. 8011552: e168 b.n 8011826 <UART_SetConfig+0x5a6>
  40249. 8011554: 697b ldr r3, [r7, #20]
  40250. 8011556: 681b ldr r3, [r3, #0]
  40251. 8011558: 4a1b ldr r2, [pc, #108] @ (80115c8 <UART_SetConfig+0x348>)
  40252. 801155a: 4293 cmp r3, r2
  40253. 801155c: d142 bne.n 80115e4 <UART_SetConfig+0x364>
  40254. 801155e: 4b16 ldr r3, [pc, #88] @ (80115b8 <UART_SetConfig+0x338>)
  40255. 8011560: 6d5b ldr r3, [r3, #84] @ 0x54
  40256. 8011562: f003 0307 and.w r3, r3, #7
  40257. 8011566: 2b05 cmp r3, #5
  40258. 8011568: d838 bhi.n 80115dc <UART_SetConfig+0x35c>
  40259. 801156a: a201 add r2, pc, #4 @ (adr r2, 8011570 <UART_SetConfig+0x2f0>)
  40260. 801156c: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  40261. 8011570: 08011589 .word 0x08011589
  40262. 8011574: 08011591 .word 0x08011591
  40263. 8011578: 08011599 .word 0x08011599
  40264. 801157c: 080115a1 .word 0x080115a1
  40265. 8011580: 080115cd .word 0x080115cd
  40266. 8011584: 080115d5 .word 0x080115d5
  40267. 8011588: 2300 movs r3, #0
  40268. 801158a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40269. 801158e: e14a b.n 8011826 <UART_SetConfig+0x5a6>
  40270. 8011590: 2304 movs r3, #4
  40271. 8011592: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40272. 8011596: e146 b.n 8011826 <UART_SetConfig+0x5a6>
  40273. 8011598: 2308 movs r3, #8
  40274. 801159a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40275. 801159e: e142 b.n 8011826 <UART_SetConfig+0x5a6>
  40276. 80115a0: 2310 movs r3, #16
  40277. 80115a2: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40278. 80115a6: e13e b.n 8011826 <UART_SetConfig+0x5a6>
  40279. 80115a8: cfff69f3 .word 0xcfff69f3
  40280. 80115ac: 58000c00 .word 0x58000c00
  40281. 80115b0: 11fff4ff .word 0x11fff4ff
  40282. 80115b4: 40011000 .word 0x40011000
  40283. 80115b8: 58024400 .word 0x58024400
  40284. 80115bc: 40004400 .word 0x40004400
  40285. 80115c0: 40004800 .word 0x40004800
  40286. 80115c4: 40004c00 .word 0x40004c00
  40287. 80115c8: 40005000 .word 0x40005000
  40288. 80115cc: 2320 movs r3, #32
  40289. 80115ce: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40290. 80115d2: e128 b.n 8011826 <UART_SetConfig+0x5a6>
  40291. 80115d4: 2340 movs r3, #64 @ 0x40
  40292. 80115d6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40293. 80115da: e124 b.n 8011826 <UART_SetConfig+0x5a6>
  40294. 80115dc: 2380 movs r3, #128 @ 0x80
  40295. 80115de: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40296. 80115e2: e120 b.n 8011826 <UART_SetConfig+0x5a6>
  40297. 80115e4: 697b ldr r3, [r7, #20]
  40298. 80115e6: 681b ldr r3, [r3, #0]
  40299. 80115e8: 4acb ldr r2, [pc, #812] @ (8011918 <UART_SetConfig+0x698>)
  40300. 80115ea: 4293 cmp r3, r2
  40301. 80115ec: d176 bne.n 80116dc <UART_SetConfig+0x45c>
  40302. 80115ee: 4bcb ldr r3, [pc, #812] @ (801191c <UART_SetConfig+0x69c>)
  40303. 80115f0: 6d5b ldr r3, [r3, #84] @ 0x54
  40304. 80115f2: f003 0338 and.w r3, r3, #56 @ 0x38
  40305. 80115f6: 2b28 cmp r3, #40 @ 0x28
  40306. 80115f8: d86c bhi.n 80116d4 <UART_SetConfig+0x454>
  40307. 80115fa: a201 add r2, pc, #4 @ (adr r2, 8011600 <UART_SetConfig+0x380>)
  40308. 80115fc: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  40309. 8011600: 080116a5 .word 0x080116a5
  40310. 8011604: 080116d5 .word 0x080116d5
  40311. 8011608: 080116d5 .word 0x080116d5
  40312. 801160c: 080116d5 .word 0x080116d5
  40313. 8011610: 080116d5 .word 0x080116d5
  40314. 8011614: 080116d5 .word 0x080116d5
  40315. 8011618: 080116d5 .word 0x080116d5
  40316. 801161c: 080116d5 .word 0x080116d5
  40317. 8011620: 080116ad .word 0x080116ad
  40318. 8011624: 080116d5 .word 0x080116d5
  40319. 8011628: 080116d5 .word 0x080116d5
  40320. 801162c: 080116d5 .word 0x080116d5
  40321. 8011630: 080116d5 .word 0x080116d5
  40322. 8011634: 080116d5 .word 0x080116d5
  40323. 8011638: 080116d5 .word 0x080116d5
  40324. 801163c: 080116d5 .word 0x080116d5
  40325. 8011640: 080116b5 .word 0x080116b5
  40326. 8011644: 080116d5 .word 0x080116d5
  40327. 8011648: 080116d5 .word 0x080116d5
  40328. 801164c: 080116d5 .word 0x080116d5
  40329. 8011650: 080116d5 .word 0x080116d5
  40330. 8011654: 080116d5 .word 0x080116d5
  40331. 8011658: 080116d5 .word 0x080116d5
  40332. 801165c: 080116d5 .word 0x080116d5
  40333. 8011660: 080116bd .word 0x080116bd
  40334. 8011664: 080116d5 .word 0x080116d5
  40335. 8011668: 080116d5 .word 0x080116d5
  40336. 801166c: 080116d5 .word 0x080116d5
  40337. 8011670: 080116d5 .word 0x080116d5
  40338. 8011674: 080116d5 .word 0x080116d5
  40339. 8011678: 080116d5 .word 0x080116d5
  40340. 801167c: 080116d5 .word 0x080116d5
  40341. 8011680: 080116c5 .word 0x080116c5
  40342. 8011684: 080116d5 .word 0x080116d5
  40343. 8011688: 080116d5 .word 0x080116d5
  40344. 801168c: 080116d5 .word 0x080116d5
  40345. 8011690: 080116d5 .word 0x080116d5
  40346. 8011694: 080116d5 .word 0x080116d5
  40347. 8011698: 080116d5 .word 0x080116d5
  40348. 801169c: 080116d5 .word 0x080116d5
  40349. 80116a0: 080116cd .word 0x080116cd
  40350. 80116a4: 2301 movs r3, #1
  40351. 80116a6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40352. 80116aa: e0bc b.n 8011826 <UART_SetConfig+0x5a6>
  40353. 80116ac: 2304 movs r3, #4
  40354. 80116ae: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40355. 80116b2: e0b8 b.n 8011826 <UART_SetConfig+0x5a6>
  40356. 80116b4: 2308 movs r3, #8
  40357. 80116b6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40358. 80116ba: e0b4 b.n 8011826 <UART_SetConfig+0x5a6>
  40359. 80116bc: 2310 movs r3, #16
  40360. 80116be: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40361. 80116c2: e0b0 b.n 8011826 <UART_SetConfig+0x5a6>
  40362. 80116c4: 2320 movs r3, #32
  40363. 80116c6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40364. 80116ca: e0ac b.n 8011826 <UART_SetConfig+0x5a6>
  40365. 80116cc: 2340 movs r3, #64 @ 0x40
  40366. 80116ce: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40367. 80116d2: e0a8 b.n 8011826 <UART_SetConfig+0x5a6>
  40368. 80116d4: 2380 movs r3, #128 @ 0x80
  40369. 80116d6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40370. 80116da: e0a4 b.n 8011826 <UART_SetConfig+0x5a6>
  40371. 80116dc: 697b ldr r3, [r7, #20]
  40372. 80116de: 681b ldr r3, [r3, #0]
  40373. 80116e0: 4a8f ldr r2, [pc, #572] @ (8011920 <UART_SetConfig+0x6a0>)
  40374. 80116e2: 4293 cmp r3, r2
  40375. 80116e4: d130 bne.n 8011748 <UART_SetConfig+0x4c8>
  40376. 80116e6: 4b8d ldr r3, [pc, #564] @ (801191c <UART_SetConfig+0x69c>)
  40377. 80116e8: 6d5b ldr r3, [r3, #84] @ 0x54
  40378. 80116ea: f003 0307 and.w r3, r3, #7
  40379. 80116ee: 2b05 cmp r3, #5
  40380. 80116f0: d826 bhi.n 8011740 <UART_SetConfig+0x4c0>
  40381. 80116f2: a201 add r2, pc, #4 @ (adr r2, 80116f8 <UART_SetConfig+0x478>)
  40382. 80116f4: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  40383. 80116f8: 08011711 .word 0x08011711
  40384. 80116fc: 08011719 .word 0x08011719
  40385. 8011700: 08011721 .word 0x08011721
  40386. 8011704: 08011729 .word 0x08011729
  40387. 8011708: 08011731 .word 0x08011731
  40388. 801170c: 08011739 .word 0x08011739
  40389. 8011710: 2300 movs r3, #0
  40390. 8011712: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40391. 8011716: e086 b.n 8011826 <UART_SetConfig+0x5a6>
  40392. 8011718: 2304 movs r3, #4
  40393. 801171a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40394. 801171e: e082 b.n 8011826 <UART_SetConfig+0x5a6>
  40395. 8011720: 2308 movs r3, #8
  40396. 8011722: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40397. 8011726: e07e b.n 8011826 <UART_SetConfig+0x5a6>
  40398. 8011728: 2310 movs r3, #16
  40399. 801172a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40400. 801172e: e07a b.n 8011826 <UART_SetConfig+0x5a6>
  40401. 8011730: 2320 movs r3, #32
  40402. 8011732: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40403. 8011736: e076 b.n 8011826 <UART_SetConfig+0x5a6>
  40404. 8011738: 2340 movs r3, #64 @ 0x40
  40405. 801173a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40406. 801173e: e072 b.n 8011826 <UART_SetConfig+0x5a6>
  40407. 8011740: 2380 movs r3, #128 @ 0x80
  40408. 8011742: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40409. 8011746: e06e b.n 8011826 <UART_SetConfig+0x5a6>
  40410. 8011748: 697b ldr r3, [r7, #20]
  40411. 801174a: 681b ldr r3, [r3, #0]
  40412. 801174c: 4a75 ldr r2, [pc, #468] @ (8011924 <UART_SetConfig+0x6a4>)
  40413. 801174e: 4293 cmp r3, r2
  40414. 8011750: d130 bne.n 80117b4 <UART_SetConfig+0x534>
  40415. 8011752: 4b72 ldr r3, [pc, #456] @ (801191c <UART_SetConfig+0x69c>)
  40416. 8011754: 6d5b ldr r3, [r3, #84] @ 0x54
  40417. 8011756: f003 0307 and.w r3, r3, #7
  40418. 801175a: 2b05 cmp r3, #5
  40419. 801175c: d826 bhi.n 80117ac <UART_SetConfig+0x52c>
  40420. 801175e: a201 add r2, pc, #4 @ (adr r2, 8011764 <UART_SetConfig+0x4e4>)
  40421. 8011760: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  40422. 8011764: 0801177d .word 0x0801177d
  40423. 8011768: 08011785 .word 0x08011785
  40424. 801176c: 0801178d .word 0x0801178d
  40425. 8011770: 08011795 .word 0x08011795
  40426. 8011774: 0801179d .word 0x0801179d
  40427. 8011778: 080117a5 .word 0x080117a5
  40428. 801177c: 2300 movs r3, #0
  40429. 801177e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40430. 8011782: e050 b.n 8011826 <UART_SetConfig+0x5a6>
  40431. 8011784: 2304 movs r3, #4
  40432. 8011786: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40433. 801178a: e04c b.n 8011826 <UART_SetConfig+0x5a6>
  40434. 801178c: 2308 movs r3, #8
  40435. 801178e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40436. 8011792: e048 b.n 8011826 <UART_SetConfig+0x5a6>
  40437. 8011794: 2310 movs r3, #16
  40438. 8011796: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40439. 801179a: e044 b.n 8011826 <UART_SetConfig+0x5a6>
  40440. 801179c: 2320 movs r3, #32
  40441. 801179e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40442. 80117a2: e040 b.n 8011826 <UART_SetConfig+0x5a6>
  40443. 80117a4: 2340 movs r3, #64 @ 0x40
  40444. 80117a6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40445. 80117aa: e03c b.n 8011826 <UART_SetConfig+0x5a6>
  40446. 80117ac: 2380 movs r3, #128 @ 0x80
  40447. 80117ae: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40448. 80117b2: e038 b.n 8011826 <UART_SetConfig+0x5a6>
  40449. 80117b4: 697b ldr r3, [r7, #20]
  40450. 80117b6: 681b ldr r3, [r3, #0]
  40451. 80117b8: 4a5b ldr r2, [pc, #364] @ (8011928 <UART_SetConfig+0x6a8>)
  40452. 80117ba: 4293 cmp r3, r2
  40453. 80117bc: d130 bne.n 8011820 <UART_SetConfig+0x5a0>
  40454. 80117be: 4b57 ldr r3, [pc, #348] @ (801191c <UART_SetConfig+0x69c>)
  40455. 80117c0: 6d9b ldr r3, [r3, #88] @ 0x58
  40456. 80117c2: f003 0307 and.w r3, r3, #7
  40457. 80117c6: 2b05 cmp r3, #5
  40458. 80117c8: d826 bhi.n 8011818 <UART_SetConfig+0x598>
  40459. 80117ca: a201 add r2, pc, #4 @ (adr r2, 80117d0 <UART_SetConfig+0x550>)
  40460. 80117cc: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  40461. 80117d0: 080117e9 .word 0x080117e9
  40462. 80117d4: 080117f1 .word 0x080117f1
  40463. 80117d8: 080117f9 .word 0x080117f9
  40464. 80117dc: 08011801 .word 0x08011801
  40465. 80117e0: 08011809 .word 0x08011809
  40466. 80117e4: 08011811 .word 0x08011811
  40467. 80117e8: 2302 movs r3, #2
  40468. 80117ea: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40469. 80117ee: e01a b.n 8011826 <UART_SetConfig+0x5a6>
  40470. 80117f0: 2304 movs r3, #4
  40471. 80117f2: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40472. 80117f6: e016 b.n 8011826 <UART_SetConfig+0x5a6>
  40473. 80117f8: 2308 movs r3, #8
  40474. 80117fa: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40475. 80117fe: e012 b.n 8011826 <UART_SetConfig+0x5a6>
  40476. 8011800: 2310 movs r3, #16
  40477. 8011802: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40478. 8011806: e00e b.n 8011826 <UART_SetConfig+0x5a6>
  40479. 8011808: 2320 movs r3, #32
  40480. 801180a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40481. 801180e: e00a b.n 8011826 <UART_SetConfig+0x5a6>
  40482. 8011810: 2340 movs r3, #64 @ 0x40
  40483. 8011812: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40484. 8011816: e006 b.n 8011826 <UART_SetConfig+0x5a6>
  40485. 8011818: 2380 movs r3, #128 @ 0x80
  40486. 801181a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40487. 801181e: e002 b.n 8011826 <UART_SetConfig+0x5a6>
  40488. 8011820: 2380 movs r3, #128 @ 0x80
  40489. 8011822: f887 3043 strb.w r3, [r7, #67] @ 0x43
  40490. /* Check LPUART instance */
  40491. if (UART_INSTANCE_LOWPOWER(huart))
  40492. 8011826: 697b ldr r3, [r7, #20]
  40493. 8011828: 681b ldr r3, [r3, #0]
  40494. 801182a: 4a3f ldr r2, [pc, #252] @ (8011928 <UART_SetConfig+0x6a8>)
  40495. 801182c: 4293 cmp r3, r2
  40496. 801182e: f040 80f8 bne.w 8011a22 <UART_SetConfig+0x7a2>
  40497. {
  40498. /* Retrieve frequency clock */
  40499. switch (clocksource)
  40500. 8011832: f897 3043 ldrb.w r3, [r7, #67] @ 0x43
  40501. 8011836: 2b20 cmp r3, #32
  40502. 8011838: dc46 bgt.n 80118c8 <UART_SetConfig+0x648>
  40503. 801183a: 2b02 cmp r3, #2
  40504. 801183c: f2c0 8082 blt.w 8011944 <UART_SetConfig+0x6c4>
  40505. 8011840: 3b02 subs r3, #2
  40506. 8011842: 2b1e cmp r3, #30
  40507. 8011844: d87e bhi.n 8011944 <UART_SetConfig+0x6c4>
  40508. 8011846: a201 add r2, pc, #4 @ (adr r2, 801184c <UART_SetConfig+0x5cc>)
  40509. 8011848: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  40510. 801184c: 080118cf .word 0x080118cf
  40511. 8011850: 08011945 .word 0x08011945
  40512. 8011854: 080118d7 .word 0x080118d7
  40513. 8011858: 08011945 .word 0x08011945
  40514. 801185c: 08011945 .word 0x08011945
  40515. 8011860: 08011945 .word 0x08011945
  40516. 8011864: 080118e7 .word 0x080118e7
  40517. 8011868: 08011945 .word 0x08011945
  40518. 801186c: 08011945 .word 0x08011945
  40519. 8011870: 08011945 .word 0x08011945
  40520. 8011874: 08011945 .word 0x08011945
  40521. 8011878: 08011945 .word 0x08011945
  40522. 801187c: 08011945 .word 0x08011945
  40523. 8011880: 08011945 .word 0x08011945
  40524. 8011884: 080118f7 .word 0x080118f7
  40525. 8011888: 08011945 .word 0x08011945
  40526. 801188c: 08011945 .word 0x08011945
  40527. 8011890: 08011945 .word 0x08011945
  40528. 8011894: 08011945 .word 0x08011945
  40529. 8011898: 08011945 .word 0x08011945
  40530. 801189c: 08011945 .word 0x08011945
  40531. 80118a0: 08011945 .word 0x08011945
  40532. 80118a4: 08011945 .word 0x08011945
  40533. 80118a8: 08011945 .word 0x08011945
  40534. 80118ac: 08011945 .word 0x08011945
  40535. 80118b0: 08011945 .word 0x08011945
  40536. 80118b4: 08011945 .word 0x08011945
  40537. 80118b8: 08011945 .word 0x08011945
  40538. 80118bc: 08011945 .word 0x08011945
  40539. 80118c0: 08011945 .word 0x08011945
  40540. 80118c4: 08011937 .word 0x08011937
  40541. 80118c8: 2b40 cmp r3, #64 @ 0x40
  40542. 80118ca: d037 beq.n 801193c <UART_SetConfig+0x6bc>
  40543. 80118cc: e03a b.n 8011944 <UART_SetConfig+0x6c4>
  40544. {
  40545. case UART_CLOCKSOURCE_D3PCLK1:
  40546. pclk = HAL_RCCEx_GetD3PCLK1Freq();
  40547. 80118ce: f7fc fe3d bl 800e54c <HAL_RCCEx_GetD3PCLK1Freq>
  40548. 80118d2: 63f8 str r0, [r7, #60] @ 0x3c
  40549. break;
  40550. 80118d4: e03c b.n 8011950 <UART_SetConfig+0x6d0>
  40551. case UART_CLOCKSOURCE_PLL2:
  40552. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  40553. 80118d6: f107 0324 add.w r3, r7, #36 @ 0x24
  40554. 80118da: 4618 mov r0, r3
  40555. 80118dc: f7fc fe4c bl 800e578 <HAL_RCCEx_GetPLL2ClockFreq>
  40556. pclk = pll2_clocks.PLL2_Q_Frequency;
  40557. 80118e0: 6abb ldr r3, [r7, #40] @ 0x28
  40558. 80118e2: 63fb str r3, [r7, #60] @ 0x3c
  40559. break;
  40560. 80118e4: e034 b.n 8011950 <UART_SetConfig+0x6d0>
  40561. case UART_CLOCKSOURCE_PLL3:
  40562. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  40563. 80118e6: f107 0318 add.w r3, r7, #24
  40564. 80118ea: 4618 mov r0, r3
  40565. 80118ec: f7fc ff98 bl 800e820 <HAL_RCCEx_GetPLL3ClockFreq>
  40566. pclk = pll3_clocks.PLL3_Q_Frequency;
  40567. 80118f0: 69fb ldr r3, [r7, #28]
  40568. 80118f2: 63fb str r3, [r7, #60] @ 0x3c
  40569. break;
  40570. 80118f4: e02c b.n 8011950 <UART_SetConfig+0x6d0>
  40571. case UART_CLOCKSOURCE_HSI:
  40572. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  40573. 80118f6: 4b09 ldr r3, [pc, #36] @ (801191c <UART_SetConfig+0x69c>)
  40574. 80118f8: 681b ldr r3, [r3, #0]
  40575. 80118fa: f003 0320 and.w r3, r3, #32
  40576. 80118fe: 2b00 cmp r3, #0
  40577. 8011900: d016 beq.n 8011930 <UART_SetConfig+0x6b0>
  40578. {
  40579. pclk = (uint32_t)(HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3U));
  40580. 8011902: 4b06 ldr r3, [pc, #24] @ (801191c <UART_SetConfig+0x69c>)
  40581. 8011904: 681b ldr r3, [r3, #0]
  40582. 8011906: 08db lsrs r3, r3, #3
  40583. 8011908: f003 0303 and.w r3, r3, #3
  40584. 801190c: 4a07 ldr r2, [pc, #28] @ (801192c <UART_SetConfig+0x6ac>)
  40585. 801190e: fa22 f303 lsr.w r3, r2, r3
  40586. 8011912: 63fb str r3, [r7, #60] @ 0x3c
  40587. }
  40588. else
  40589. {
  40590. pclk = (uint32_t) HSI_VALUE;
  40591. }
  40592. break;
  40593. 8011914: e01c b.n 8011950 <UART_SetConfig+0x6d0>
  40594. 8011916: bf00 nop
  40595. 8011918: 40011400 .word 0x40011400
  40596. 801191c: 58024400 .word 0x58024400
  40597. 8011920: 40007800 .word 0x40007800
  40598. 8011924: 40007c00 .word 0x40007c00
  40599. 8011928: 58000c00 .word 0x58000c00
  40600. 801192c: 03d09000 .word 0x03d09000
  40601. pclk = (uint32_t) HSI_VALUE;
  40602. 8011930: 4b9d ldr r3, [pc, #628] @ (8011ba8 <UART_SetConfig+0x928>)
  40603. 8011932: 63fb str r3, [r7, #60] @ 0x3c
  40604. break;
  40605. 8011934: e00c b.n 8011950 <UART_SetConfig+0x6d0>
  40606. case UART_CLOCKSOURCE_CSI:
  40607. pclk = (uint32_t) CSI_VALUE;
  40608. 8011936: 4b9d ldr r3, [pc, #628] @ (8011bac <UART_SetConfig+0x92c>)
  40609. 8011938: 63fb str r3, [r7, #60] @ 0x3c
  40610. break;
  40611. 801193a: e009 b.n 8011950 <UART_SetConfig+0x6d0>
  40612. case UART_CLOCKSOURCE_LSE:
  40613. pclk = (uint32_t) LSE_VALUE;
  40614. 801193c: f44f 4300 mov.w r3, #32768 @ 0x8000
  40615. 8011940: 63fb str r3, [r7, #60] @ 0x3c
  40616. break;
  40617. 8011942: e005 b.n 8011950 <UART_SetConfig+0x6d0>
  40618. default:
  40619. pclk = 0U;
  40620. 8011944: 2300 movs r3, #0
  40621. 8011946: 63fb str r3, [r7, #60] @ 0x3c
  40622. ret = HAL_ERROR;
  40623. 8011948: 2301 movs r3, #1
  40624. 801194a: f887 3042 strb.w r3, [r7, #66] @ 0x42
  40625. break;
  40626. 801194e: bf00 nop
  40627. }
  40628. /* If proper clock source reported */
  40629. if (pclk != 0U)
  40630. 8011950: 6bfb ldr r3, [r7, #60] @ 0x3c
  40631. 8011952: 2b00 cmp r3, #0
  40632. 8011954: f000 81de beq.w 8011d14 <UART_SetConfig+0xa94>
  40633. {
  40634. /* Compute clock after Prescaler */
  40635. lpuart_ker_ck_pres = (pclk / UARTPrescTable[huart->Init.ClockPrescaler]);
  40636. 8011958: 697b ldr r3, [r7, #20]
  40637. 801195a: 6a5b ldr r3, [r3, #36] @ 0x24
  40638. 801195c: 4a94 ldr r2, [pc, #592] @ (8011bb0 <UART_SetConfig+0x930>)
  40639. 801195e: f832 3013 ldrh.w r3, [r2, r3, lsl #1]
  40640. 8011962: 461a mov r2, r3
  40641. 8011964: 6bfb ldr r3, [r7, #60] @ 0x3c
  40642. 8011966: fbb3 f3f2 udiv r3, r3, r2
  40643. 801196a: 633b str r3, [r7, #48] @ 0x30
  40644. /* Ensure that Frequency clock is in the range [3 * baudrate, 4096 * baudrate] */
  40645. if ((lpuart_ker_ck_pres < (3U * huart->Init.BaudRate)) ||
  40646. 801196c: 697b ldr r3, [r7, #20]
  40647. 801196e: 685a ldr r2, [r3, #4]
  40648. 8011970: 4613 mov r3, r2
  40649. 8011972: 005b lsls r3, r3, #1
  40650. 8011974: 4413 add r3, r2
  40651. 8011976: 6b3a ldr r2, [r7, #48] @ 0x30
  40652. 8011978: 429a cmp r2, r3
  40653. 801197a: d305 bcc.n 8011988 <UART_SetConfig+0x708>
  40654. (lpuart_ker_ck_pres > (4096U * huart->Init.BaudRate)))
  40655. 801197c: 697b ldr r3, [r7, #20]
  40656. 801197e: 685b ldr r3, [r3, #4]
  40657. 8011980: 031b lsls r3, r3, #12
  40658. if ((lpuart_ker_ck_pres < (3U * huart->Init.BaudRate)) ||
  40659. 8011982: 6b3a ldr r2, [r7, #48] @ 0x30
  40660. 8011984: 429a cmp r2, r3
  40661. 8011986: d903 bls.n 8011990 <UART_SetConfig+0x710>
  40662. {
  40663. ret = HAL_ERROR;
  40664. 8011988: 2301 movs r3, #1
  40665. 801198a: f887 3042 strb.w r3, [r7, #66] @ 0x42
  40666. 801198e: e1c1 b.n 8011d14 <UART_SetConfig+0xa94>
  40667. }
  40668. else
  40669. {
  40670. /* Check computed UsartDiv value is in allocated range
  40671. (it is forbidden to write values lower than 0x300 in the LPUART_BRR register) */
  40672. usartdiv = (uint32_t)(UART_DIV_LPUART(pclk, huart->Init.BaudRate, huart->Init.ClockPrescaler));
  40673. 8011990: 6bfb ldr r3, [r7, #60] @ 0x3c
  40674. 8011992: 2200 movs r2, #0
  40675. 8011994: 60bb str r3, [r7, #8]
  40676. 8011996: 60fa str r2, [r7, #12]
  40677. 8011998: 697b ldr r3, [r7, #20]
  40678. 801199a: 6a5b ldr r3, [r3, #36] @ 0x24
  40679. 801199c: 4a84 ldr r2, [pc, #528] @ (8011bb0 <UART_SetConfig+0x930>)
  40680. 801199e: f832 3013 ldrh.w r3, [r2, r3, lsl #1]
  40681. 80119a2: b29b uxth r3, r3
  40682. 80119a4: 2200 movs r2, #0
  40683. 80119a6: 603b str r3, [r7, #0]
  40684. 80119a8: 607a str r2, [r7, #4]
  40685. 80119aa: e9d7 2300 ldrd r2, r3, [r7]
  40686. 80119ae: e9d7 0102 ldrd r0, r1, [r7, #8]
  40687. 80119b2: f7ee fce5 bl 8000380 <__aeabi_uldivmod>
  40688. 80119b6: 4602 mov r2, r0
  40689. 80119b8: 460b mov r3, r1
  40690. 80119ba: 4610 mov r0, r2
  40691. 80119bc: 4619 mov r1, r3
  40692. 80119be: f04f 0200 mov.w r2, #0
  40693. 80119c2: f04f 0300 mov.w r3, #0
  40694. 80119c6: 020b lsls r3, r1, #8
  40695. 80119c8: ea43 6310 orr.w r3, r3, r0, lsr #24
  40696. 80119cc: 0202 lsls r2, r0, #8
  40697. 80119ce: 6979 ldr r1, [r7, #20]
  40698. 80119d0: 6849 ldr r1, [r1, #4]
  40699. 80119d2: 0849 lsrs r1, r1, #1
  40700. 80119d4: 2000 movs r0, #0
  40701. 80119d6: 460c mov r4, r1
  40702. 80119d8: 4605 mov r5, r0
  40703. 80119da: eb12 0804 adds.w r8, r2, r4
  40704. 80119de: eb43 0905 adc.w r9, r3, r5
  40705. 80119e2: 697b ldr r3, [r7, #20]
  40706. 80119e4: 685b ldr r3, [r3, #4]
  40707. 80119e6: 2200 movs r2, #0
  40708. 80119e8: 469a mov sl, r3
  40709. 80119ea: 4693 mov fp, r2
  40710. 80119ec: 4652 mov r2, sl
  40711. 80119ee: 465b mov r3, fp
  40712. 80119f0: 4640 mov r0, r8
  40713. 80119f2: 4649 mov r1, r9
  40714. 80119f4: f7ee fcc4 bl 8000380 <__aeabi_uldivmod>
  40715. 80119f8: 4602 mov r2, r0
  40716. 80119fa: 460b mov r3, r1
  40717. 80119fc: 4613 mov r3, r2
  40718. 80119fe: 63bb str r3, [r7, #56] @ 0x38
  40719. if ((usartdiv >= LPUART_BRR_MIN) && (usartdiv <= LPUART_BRR_MAX))
  40720. 8011a00: 6bbb ldr r3, [r7, #56] @ 0x38
  40721. 8011a02: f5b3 7f40 cmp.w r3, #768 @ 0x300
  40722. 8011a06: d308 bcc.n 8011a1a <UART_SetConfig+0x79a>
  40723. 8011a08: 6bbb ldr r3, [r7, #56] @ 0x38
  40724. 8011a0a: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
  40725. 8011a0e: d204 bcs.n 8011a1a <UART_SetConfig+0x79a>
  40726. {
  40727. huart->Instance->BRR = usartdiv;
  40728. 8011a10: 697b ldr r3, [r7, #20]
  40729. 8011a12: 681b ldr r3, [r3, #0]
  40730. 8011a14: 6bba ldr r2, [r7, #56] @ 0x38
  40731. 8011a16: 60da str r2, [r3, #12]
  40732. 8011a18: e17c b.n 8011d14 <UART_SetConfig+0xa94>
  40733. }
  40734. else
  40735. {
  40736. ret = HAL_ERROR;
  40737. 8011a1a: 2301 movs r3, #1
  40738. 8011a1c: f887 3042 strb.w r3, [r7, #66] @ 0x42
  40739. 8011a20: e178 b.n 8011d14 <UART_SetConfig+0xa94>
  40740. } /* if ( (lpuart_ker_ck_pres < (3 * huart->Init.BaudRate) ) ||
  40741. (lpuart_ker_ck_pres > (4096 * huart->Init.BaudRate) )) */
  40742. } /* if (pclk != 0) */
  40743. }
  40744. /* Check UART Over Sampling to set Baud Rate Register */
  40745. else if (huart->Init.OverSampling == UART_OVERSAMPLING_8)
  40746. 8011a22: 697b ldr r3, [r7, #20]
  40747. 8011a24: 69db ldr r3, [r3, #28]
  40748. 8011a26: f5b3 4f00 cmp.w r3, #32768 @ 0x8000
  40749. 8011a2a: f040 80c5 bne.w 8011bb8 <UART_SetConfig+0x938>
  40750. {
  40751. switch (clocksource)
  40752. 8011a2e: f897 3043 ldrb.w r3, [r7, #67] @ 0x43
  40753. 8011a32: 2b20 cmp r3, #32
  40754. 8011a34: dc48 bgt.n 8011ac8 <UART_SetConfig+0x848>
  40755. 8011a36: 2b00 cmp r3, #0
  40756. 8011a38: db7b blt.n 8011b32 <UART_SetConfig+0x8b2>
  40757. 8011a3a: 2b20 cmp r3, #32
  40758. 8011a3c: d879 bhi.n 8011b32 <UART_SetConfig+0x8b2>
  40759. 8011a3e: a201 add r2, pc, #4 @ (adr r2, 8011a44 <UART_SetConfig+0x7c4>)
  40760. 8011a40: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  40761. 8011a44: 08011acf .word 0x08011acf
  40762. 8011a48: 08011ad7 .word 0x08011ad7
  40763. 8011a4c: 08011b33 .word 0x08011b33
  40764. 8011a50: 08011b33 .word 0x08011b33
  40765. 8011a54: 08011adf .word 0x08011adf
  40766. 8011a58: 08011b33 .word 0x08011b33
  40767. 8011a5c: 08011b33 .word 0x08011b33
  40768. 8011a60: 08011b33 .word 0x08011b33
  40769. 8011a64: 08011aef .word 0x08011aef
  40770. 8011a68: 08011b33 .word 0x08011b33
  40771. 8011a6c: 08011b33 .word 0x08011b33
  40772. 8011a70: 08011b33 .word 0x08011b33
  40773. 8011a74: 08011b33 .word 0x08011b33
  40774. 8011a78: 08011b33 .word 0x08011b33
  40775. 8011a7c: 08011b33 .word 0x08011b33
  40776. 8011a80: 08011b33 .word 0x08011b33
  40777. 8011a84: 08011aff .word 0x08011aff
  40778. 8011a88: 08011b33 .word 0x08011b33
  40779. 8011a8c: 08011b33 .word 0x08011b33
  40780. 8011a90: 08011b33 .word 0x08011b33
  40781. 8011a94: 08011b33 .word 0x08011b33
  40782. 8011a98: 08011b33 .word 0x08011b33
  40783. 8011a9c: 08011b33 .word 0x08011b33
  40784. 8011aa0: 08011b33 .word 0x08011b33
  40785. 8011aa4: 08011b33 .word 0x08011b33
  40786. 8011aa8: 08011b33 .word 0x08011b33
  40787. 8011aac: 08011b33 .word 0x08011b33
  40788. 8011ab0: 08011b33 .word 0x08011b33
  40789. 8011ab4: 08011b33 .word 0x08011b33
  40790. 8011ab8: 08011b33 .word 0x08011b33
  40791. 8011abc: 08011b33 .word 0x08011b33
  40792. 8011ac0: 08011b33 .word 0x08011b33
  40793. 8011ac4: 08011b25 .word 0x08011b25
  40794. 8011ac8: 2b40 cmp r3, #64 @ 0x40
  40795. 8011aca: d02e beq.n 8011b2a <UART_SetConfig+0x8aa>
  40796. 8011acc: e031 b.n 8011b32 <UART_SetConfig+0x8b2>
  40797. {
  40798. case UART_CLOCKSOURCE_D2PCLK1:
  40799. pclk = HAL_RCC_GetPCLK1Freq();
  40800. 8011ace: f7fa fd61 bl 800c594 <HAL_RCC_GetPCLK1Freq>
  40801. 8011ad2: 63f8 str r0, [r7, #60] @ 0x3c
  40802. break;
  40803. 8011ad4: e033 b.n 8011b3e <UART_SetConfig+0x8be>
  40804. case UART_CLOCKSOURCE_D2PCLK2:
  40805. pclk = HAL_RCC_GetPCLK2Freq();
  40806. 8011ad6: f7fa fd73 bl 800c5c0 <HAL_RCC_GetPCLK2Freq>
  40807. 8011ada: 63f8 str r0, [r7, #60] @ 0x3c
  40808. break;
  40809. 8011adc: e02f b.n 8011b3e <UART_SetConfig+0x8be>
  40810. case UART_CLOCKSOURCE_PLL2:
  40811. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  40812. 8011ade: f107 0324 add.w r3, r7, #36 @ 0x24
  40813. 8011ae2: 4618 mov r0, r3
  40814. 8011ae4: f7fc fd48 bl 800e578 <HAL_RCCEx_GetPLL2ClockFreq>
  40815. pclk = pll2_clocks.PLL2_Q_Frequency;
  40816. 8011ae8: 6abb ldr r3, [r7, #40] @ 0x28
  40817. 8011aea: 63fb str r3, [r7, #60] @ 0x3c
  40818. break;
  40819. 8011aec: e027 b.n 8011b3e <UART_SetConfig+0x8be>
  40820. case UART_CLOCKSOURCE_PLL3:
  40821. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  40822. 8011aee: f107 0318 add.w r3, r7, #24
  40823. 8011af2: 4618 mov r0, r3
  40824. 8011af4: f7fc fe94 bl 800e820 <HAL_RCCEx_GetPLL3ClockFreq>
  40825. pclk = pll3_clocks.PLL3_Q_Frequency;
  40826. 8011af8: 69fb ldr r3, [r7, #28]
  40827. 8011afa: 63fb str r3, [r7, #60] @ 0x3c
  40828. break;
  40829. 8011afc: e01f b.n 8011b3e <UART_SetConfig+0x8be>
  40830. case UART_CLOCKSOURCE_HSI:
  40831. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  40832. 8011afe: 4b2d ldr r3, [pc, #180] @ (8011bb4 <UART_SetConfig+0x934>)
  40833. 8011b00: 681b ldr r3, [r3, #0]
  40834. 8011b02: f003 0320 and.w r3, r3, #32
  40835. 8011b06: 2b00 cmp r3, #0
  40836. 8011b08: d009 beq.n 8011b1e <UART_SetConfig+0x89e>
  40837. {
  40838. pclk = (uint32_t)(HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3U));
  40839. 8011b0a: 4b2a ldr r3, [pc, #168] @ (8011bb4 <UART_SetConfig+0x934>)
  40840. 8011b0c: 681b ldr r3, [r3, #0]
  40841. 8011b0e: 08db lsrs r3, r3, #3
  40842. 8011b10: f003 0303 and.w r3, r3, #3
  40843. 8011b14: 4a24 ldr r2, [pc, #144] @ (8011ba8 <UART_SetConfig+0x928>)
  40844. 8011b16: fa22 f303 lsr.w r3, r2, r3
  40845. 8011b1a: 63fb str r3, [r7, #60] @ 0x3c
  40846. }
  40847. else
  40848. {
  40849. pclk = (uint32_t) HSI_VALUE;
  40850. }
  40851. break;
  40852. 8011b1c: e00f b.n 8011b3e <UART_SetConfig+0x8be>
  40853. pclk = (uint32_t) HSI_VALUE;
  40854. 8011b1e: 4b22 ldr r3, [pc, #136] @ (8011ba8 <UART_SetConfig+0x928>)
  40855. 8011b20: 63fb str r3, [r7, #60] @ 0x3c
  40856. break;
  40857. 8011b22: e00c b.n 8011b3e <UART_SetConfig+0x8be>
  40858. case UART_CLOCKSOURCE_CSI:
  40859. pclk = (uint32_t) CSI_VALUE;
  40860. 8011b24: 4b21 ldr r3, [pc, #132] @ (8011bac <UART_SetConfig+0x92c>)
  40861. 8011b26: 63fb str r3, [r7, #60] @ 0x3c
  40862. break;
  40863. 8011b28: e009 b.n 8011b3e <UART_SetConfig+0x8be>
  40864. case UART_CLOCKSOURCE_LSE:
  40865. pclk = (uint32_t) LSE_VALUE;
  40866. 8011b2a: f44f 4300 mov.w r3, #32768 @ 0x8000
  40867. 8011b2e: 63fb str r3, [r7, #60] @ 0x3c
  40868. break;
  40869. 8011b30: e005 b.n 8011b3e <UART_SetConfig+0x8be>
  40870. default:
  40871. pclk = 0U;
  40872. 8011b32: 2300 movs r3, #0
  40873. 8011b34: 63fb str r3, [r7, #60] @ 0x3c
  40874. ret = HAL_ERROR;
  40875. 8011b36: 2301 movs r3, #1
  40876. 8011b38: f887 3042 strb.w r3, [r7, #66] @ 0x42
  40877. break;
  40878. 8011b3c: bf00 nop
  40879. }
  40880. /* USARTDIV must be greater than or equal to 0d16 */
  40881. if (pclk != 0U)
  40882. 8011b3e: 6bfb ldr r3, [r7, #60] @ 0x3c
  40883. 8011b40: 2b00 cmp r3, #0
  40884. 8011b42: f000 80e7 beq.w 8011d14 <UART_SetConfig+0xa94>
  40885. {
  40886. usartdiv = (uint32_t)(UART_DIV_SAMPLING8(pclk, huart->Init.BaudRate, huart->Init.ClockPrescaler));
  40887. 8011b46: 697b ldr r3, [r7, #20]
  40888. 8011b48: 6a5b ldr r3, [r3, #36] @ 0x24
  40889. 8011b4a: 4a19 ldr r2, [pc, #100] @ (8011bb0 <UART_SetConfig+0x930>)
  40890. 8011b4c: f832 3013 ldrh.w r3, [r2, r3, lsl #1]
  40891. 8011b50: 461a mov r2, r3
  40892. 8011b52: 6bfb ldr r3, [r7, #60] @ 0x3c
  40893. 8011b54: fbb3 f3f2 udiv r3, r3, r2
  40894. 8011b58: 005a lsls r2, r3, #1
  40895. 8011b5a: 697b ldr r3, [r7, #20]
  40896. 8011b5c: 685b ldr r3, [r3, #4]
  40897. 8011b5e: 085b lsrs r3, r3, #1
  40898. 8011b60: 441a add r2, r3
  40899. 8011b62: 697b ldr r3, [r7, #20]
  40900. 8011b64: 685b ldr r3, [r3, #4]
  40901. 8011b66: fbb2 f3f3 udiv r3, r2, r3
  40902. 8011b6a: 63bb str r3, [r7, #56] @ 0x38
  40903. if ((usartdiv >= UART_BRR_MIN) && (usartdiv <= UART_BRR_MAX))
  40904. 8011b6c: 6bbb ldr r3, [r7, #56] @ 0x38
  40905. 8011b6e: 2b0f cmp r3, #15
  40906. 8011b70: d916 bls.n 8011ba0 <UART_SetConfig+0x920>
  40907. 8011b72: 6bbb ldr r3, [r7, #56] @ 0x38
  40908. 8011b74: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  40909. 8011b78: d212 bcs.n 8011ba0 <UART_SetConfig+0x920>
  40910. {
  40911. brrtemp = (uint16_t)(usartdiv & 0xFFF0U);
  40912. 8011b7a: 6bbb ldr r3, [r7, #56] @ 0x38
  40913. 8011b7c: b29b uxth r3, r3
  40914. 8011b7e: f023 030f bic.w r3, r3, #15
  40915. 8011b82: 86fb strh r3, [r7, #54] @ 0x36
  40916. brrtemp |= (uint16_t)((usartdiv & (uint16_t)0x000FU) >> 1U);
  40917. 8011b84: 6bbb ldr r3, [r7, #56] @ 0x38
  40918. 8011b86: 085b lsrs r3, r3, #1
  40919. 8011b88: b29b uxth r3, r3
  40920. 8011b8a: f003 0307 and.w r3, r3, #7
  40921. 8011b8e: b29a uxth r2, r3
  40922. 8011b90: 8efb ldrh r3, [r7, #54] @ 0x36
  40923. 8011b92: 4313 orrs r3, r2
  40924. 8011b94: 86fb strh r3, [r7, #54] @ 0x36
  40925. huart->Instance->BRR = brrtemp;
  40926. 8011b96: 697b ldr r3, [r7, #20]
  40927. 8011b98: 681b ldr r3, [r3, #0]
  40928. 8011b9a: 8efa ldrh r2, [r7, #54] @ 0x36
  40929. 8011b9c: 60da str r2, [r3, #12]
  40930. 8011b9e: e0b9 b.n 8011d14 <UART_SetConfig+0xa94>
  40931. }
  40932. else
  40933. {
  40934. ret = HAL_ERROR;
  40935. 8011ba0: 2301 movs r3, #1
  40936. 8011ba2: f887 3042 strb.w r3, [r7, #66] @ 0x42
  40937. 8011ba6: e0b5 b.n 8011d14 <UART_SetConfig+0xa94>
  40938. 8011ba8: 03d09000 .word 0x03d09000
  40939. 8011bac: 003d0900 .word 0x003d0900
  40940. 8011bb0: 08018b74 .word 0x08018b74
  40941. 8011bb4: 58024400 .word 0x58024400
  40942. }
  40943. }
  40944. }
  40945. else
  40946. {
  40947. switch (clocksource)
  40948. 8011bb8: f897 3043 ldrb.w r3, [r7, #67] @ 0x43
  40949. 8011bbc: 2b20 cmp r3, #32
  40950. 8011bbe: dc49 bgt.n 8011c54 <UART_SetConfig+0x9d4>
  40951. 8011bc0: 2b00 cmp r3, #0
  40952. 8011bc2: db7c blt.n 8011cbe <UART_SetConfig+0xa3e>
  40953. 8011bc4: 2b20 cmp r3, #32
  40954. 8011bc6: d87a bhi.n 8011cbe <UART_SetConfig+0xa3e>
  40955. 8011bc8: a201 add r2, pc, #4 @ (adr r2, 8011bd0 <UART_SetConfig+0x950>)
  40956. 8011bca: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  40957. 8011bce: bf00 nop
  40958. 8011bd0: 08011c5b .word 0x08011c5b
  40959. 8011bd4: 08011c63 .word 0x08011c63
  40960. 8011bd8: 08011cbf .word 0x08011cbf
  40961. 8011bdc: 08011cbf .word 0x08011cbf
  40962. 8011be0: 08011c6b .word 0x08011c6b
  40963. 8011be4: 08011cbf .word 0x08011cbf
  40964. 8011be8: 08011cbf .word 0x08011cbf
  40965. 8011bec: 08011cbf .word 0x08011cbf
  40966. 8011bf0: 08011c7b .word 0x08011c7b
  40967. 8011bf4: 08011cbf .word 0x08011cbf
  40968. 8011bf8: 08011cbf .word 0x08011cbf
  40969. 8011bfc: 08011cbf .word 0x08011cbf
  40970. 8011c00: 08011cbf .word 0x08011cbf
  40971. 8011c04: 08011cbf .word 0x08011cbf
  40972. 8011c08: 08011cbf .word 0x08011cbf
  40973. 8011c0c: 08011cbf .word 0x08011cbf
  40974. 8011c10: 08011c8b .word 0x08011c8b
  40975. 8011c14: 08011cbf .word 0x08011cbf
  40976. 8011c18: 08011cbf .word 0x08011cbf
  40977. 8011c1c: 08011cbf .word 0x08011cbf
  40978. 8011c20: 08011cbf .word 0x08011cbf
  40979. 8011c24: 08011cbf .word 0x08011cbf
  40980. 8011c28: 08011cbf .word 0x08011cbf
  40981. 8011c2c: 08011cbf .word 0x08011cbf
  40982. 8011c30: 08011cbf .word 0x08011cbf
  40983. 8011c34: 08011cbf .word 0x08011cbf
  40984. 8011c38: 08011cbf .word 0x08011cbf
  40985. 8011c3c: 08011cbf .word 0x08011cbf
  40986. 8011c40: 08011cbf .word 0x08011cbf
  40987. 8011c44: 08011cbf .word 0x08011cbf
  40988. 8011c48: 08011cbf .word 0x08011cbf
  40989. 8011c4c: 08011cbf .word 0x08011cbf
  40990. 8011c50: 08011cb1 .word 0x08011cb1
  40991. 8011c54: 2b40 cmp r3, #64 @ 0x40
  40992. 8011c56: d02e beq.n 8011cb6 <UART_SetConfig+0xa36>
  40993. 8011c58: e031 b.n 8011cbe <UART_SetConfig+0xa3e>
  40994. {
  40995. case UART_CLOCKSOURCE_D2PCLK1:
  40996. pclk = HAL_RCC_GetPCLK1Freq();
  40997. 8011c5a: f7fa fc9b bl 800c594 <HAL_RCC_GetPCLK1Freq>
  40998. 8011c5e: 63f8 str r0, [r7, #60] @ 0x3c
  40999. break;
  41000. 8011c60: e033 b.n 8011cca <UART_SetConfig+0xa4a>
  41001. case UART_CLOCKSOURCE_D2PCLK2:
  41002. pclk = HAL_RCC_GetPCLK2Freq();
  41003. 8011c62: f7fa fcad bl 800c5c0 <HAL_RCC_GetPCLK2Freq>
  41004. 8011c66: 63f8 str r0, [r7, #60] @ 0x3c
  41005. break;
  41006. 8011c68: e02f b.n 8011cca <UART_SetConfig+0xa4a>
  41007. case UART_CLOCKSOURCE_PLL2:
  41008. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  41009. 8011c6a: f107 0324 add.w r3, r7, #36 @ 0x24
  41010. 8011c6e: 4618 mov r0, r3
  41011. 8011c70: f7fc fc82 bl 800e578 <HAL_RCCEx_GetPLL2ClockFreq>
  41012. pclk = pll2_clocks.PLL2_Q_Frequency;
  41013. 8011c74: 6abb ldr r3, [r7, #40] @ 0x28
  41014. 8011c76: 63fb str r3, [r7, #60] @ 0x3c
  41015. break;
  41016. 8011c78: e027 b.n 8011cca <UART_SetConfig+0xa4a>
  41017. case UART_CLOCKSOURCE_PLL3:
  41018. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  41019. 8011c7a: f107 0318 add.w r3, r7, #24
  41020. 8011c7e: 4618 mov r0, r3
  41021. 8011c80: f7fc fdce bl 800e820 <HAL_RCCEx_GetPLL3ClockFreq>
  41022. pclk = pll3_clocks.PLL3_Q_Frequency;
  41023. 8011c84: 69fb ldr r3, [r7, #28]
  41024. 8011c86: 63fb str r3, [r7, #60] @ 0x3c
  41025. break;
  41026. 8011c88: e01f b.n 8011cca <UART_SetConfig+0xa4a>
  41027. case UART_CLOCKSOURCE_HSI:
  41028. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  41029. 8011c8a: 4b2d ldr r3, [pc, #180] @ (8011d40 <UART_SetConfig+0xac0>)
  41030. 8011c8c: 681b ldr r3, [r3, #0]
  41031. 8011c8e: f003 0320 and.w r3, r3, #32
  41032. 8011c92: 2b00 cmp r3, #0
  41033. 8011c94: d009 beq.n 8011caa <UART_SetConfig+0xa2a>
  41034. {
  41035. pclk = (uint32_t)(HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3U));
  41036. 8011c96: 4b2a ldr r3, [pc, #168] @ (8011d40 <UART_SetConfig+0xac0>)
  41037. 8011c98: 681b ldr r3, [r3, #0]
  41038. 8011c9a: 08db lsrs r3, r3, #3
  41039. 8011c9c: f003 0303 and.w r3, r3, #3
  41040. 8011ca0: 4a28 ldr r2, [pc, #160] @ (8011d44 <UART_SetConfig+0xac4>)
  41041. 8011ca2: fa22 f303 lsr.w r3, r2, r3
  41042. 8011ca6: 63fb str r3, [r7, #60] @ 0x3c
  41043. }
  41044. else
  41045. {
  41046. pclk = (uint32_t) HSI_VALUE;
  41047. }
  41048. break;
  41049. 8011ca8: e00f b.n 8011cca <UART_SetConfig+0xa4a>
  41050. pclk = (uint32_t) HSI_VALUE;
  41051. 8011caa: 4b26 ldr r3, [pc, #152] @ (8011d44 <UART_SetConfig+0xac4>)
  41052. 8011cac: 63fb str r3, [r7, #60] @ 0x3c
  41053. break;
  41054. 8011cae: e00c b.n 8011cca <UART_SetConfig+0xa4a>
  41055. case UART_CLOCKSOURCE_CSI:
  41056. pclk = (uint32_t) CSI_VALUE;
  41057. 8011cb0: 4b25 ldr r3, [pc, #148] @ (8011d48 <UART_SetConfig+0xac8>)
  41058. 8011cb2: 63fb str r3, [r7, #60] @ 0x3c
  41059. break;
  41060. 8011cb4: e009 b.n 8011cca <UART_SetConfig+0xa4a>
  41061. case UART_CLOCKSOURCE_LSE:
  41062. pclk = (uint32_t) LSE_VALUE;
  41063. 8011cb6: f44f 4300 mov.w r3, #32768 @ 0x8000
  41064. 8011cba: 63fb str r3, [r7, #60] @ 0x3c
  41065. break;
  41066. 8011cbc: e005 b.n 8011cca <UART_SetConfig+0xa4a>
  41067. default:
  41068. pclk = 0U;
  41069. 8011cbe: 2300 movs r3, #0
  41070. 8011cc0: 63fb str r3, [r7, #60] @ 0x3c
  41071. ret = HAL_ERROR;
  41072. 8011cc2: 2301 movs r3, #1
  41073. 8011cc4: f887 3042 strb.w r3, [r7, #66] @ 0x42
  41074. break;
  41075. 8011cc8: bf00 nop
  41076. }
  41077. if (pclk != 0U)
  41078. 8011cca: 6bfb ldr r3, [r7, #60] @ 0x3c
  41079. 8011ccc: 2b00 cmp r3, #0
  41080. 8011cce: d021 beq.n 8011d14 <UART_SetConfig+0xa94>
  41081. {
  41082. /* USARTDIV must be greater than or equal to 0d16 */
  41083. usartdiv = (uint32_t)(UART_DIV_SAMPLING16(pclk, huart->Init.BaudRate, huart->Init.ClockPrescaler));
  41084. 8011cd0: 697b ldr r3, [r7, #20]
  41085. 8011cd2: 6a5b ldr r3, [r3, #36] @ 0x24
  41086. 8011cd4: 4a1d ldr r2, [pc, #116] @ (8011d4c <UART_SetConfig+0xacc>)
  41087. 8011cd6: f832 3013 ldrh.w r3, [r2, r3, lsl #1]
  41088. 8011cda: 461a mov r2, r3
  41089. 8011cdc: 6bfb ldr r3, [r7, #60] @ 0x3c
  41090. 8011cde: fbb3 f2f2 udiv r2, r3, r2
  41091. 8011ce2: 697b ldr r3, [r7, #20]
  41092. 8011ce4: 685b ldr r3, [r3, #4]
  41093. 8011ce6: 085b lsrs r3, r3, #1
  41094. 8011ce8: 441a add r2, r3
  41095. 8011cea: 697b ldr r3, [r7, #20]
  41096. 8011cec: 685b ldr r3, [r3, #4]
  41097. 8011cee: fbb2 f3f3 udiv r3, r2, r3
  41098. 8011cf2: 63bb str r3, [r7, #56] @ 0x38
  41099. if ((usartdiv >= UART_BRR_MIN) && (usartdiv <= UART_BRR_MAX))
  41100. 8011cf4: 6bbb ldr r3, [r7, #56] @ 0x38
  41101. 8011cf6: 2b0f cmp r3, #15
  41102. 8011cf8: d909 bls.n 8011d0e <UART_SetConfig+0xa8e>
  41103. 8011cfa: 6bbb ldr r3, [r7, #56] @ 0x38
  41104. 8011cfc: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  41105. 8011d00: d205 bcs.n 8011d0e <UART_SetConfig+0xa8e>
  41106. {
  41107. huart->Instance->BRR = (uint16_t)usartdiv;
  41108. 8011d02: 6bbb ldr r3, [r7, #56] @ 0x38
  41109. 8011d04: b29a uxth r2, r3
  41110. 8011d06: 697b ldr r3, [r7, #20]
  41111. 8011d08: 681b ldr r3, [r3, #0]
  41112. 8011d0a: 60da str r2, [r3, #12]
  41113. 8011d0c: e002 b.n 8011d14 <UART_SetConfig+0xa94>
  41114. }
  41115. else
  41116. {
  41117. ret = HAL_ERROR;
  41118. 8011d0e: 2301 movs r3, #1
  41119. 8011d10: f887 3042 strb.w r3, [r7, #66] @ 0x42
  41120. }
  41121. }
  41122. }
  41123. /* Initialize the number of data to process during RX/TX ISR execution */
  41124. huart->NbTxDataToProcess = 1;
  41125. 8011d14: 697b ldr r3, [r7, #20]
  41126. 8011d16: 2201 movs r2, #1
  41127. 8011d18: f8a3 206a strh.w r2, [r3, #106] @ 0x6a
  41128. huart->NbRxDataToProcess = 1;
  41129. 8011d1c: 697b ldr r3, [r7, #20]
  41130. 8011d1e: 2201 movs r2, #1
  41131. 8011d20: f8a3 2068 strh.w r2, [r3, #104] @ 0x68
  41132. /* Clear ISR function pointers */
  41133. huart->RxISR = NULL;
  41134. 8011d24: 697b ldr r3, [r7, #20]
  41135. 8011d26: 2200 movs r2, #0
  41136. 8011d28: 675a str r2, [r3, #116] @ 0x74
  41137. huart->TxISR = NULL;
  41138. 8011d2a: 697b ldr r3, [r7, #20]
  41139. 8011d2c: 2200 movs r2, #0
  41140. 8011d2e: 679a str r2, [r3, #120] @ 0x78
  41141. return ret;
  41142. 8011d30: f897 3042 ldrb.w r3, [r7, #66] @ 0x42
  41143. }
  41144. 8011d34: 4618 mov r0, r3
  41145. 8011d36: 3748 adds r7, #72 @ 0x48
  41146. 8011d38: 46bd mov sp, r7
  41147. 8011d3a: e8bd 8fb0 ldmia.w sp!, {r4, r5, r7, r8, r9, sl, fp, pc}
  41148. 8011d3e: bf00 nop
  41149. 8011d40: 58024400 .word 0x58024400
  41150. 8011d44: 03d09000 .word 0x03d09000
  41151. 8011d48: 003d0900 .word 0x003d0900
  41152. 8011d4c: 08018b74 .word 0x08018b74
  41153. 08011d50 <UART_AdvFeatureConfig>:
  41154. * @brief Configure the UART peripheral advanced features.
  41155. * @param huart UART handle.
  41156. * @retval None
  41157. */
  41158. void UART_AdvFeatureConfig(UART_HandleTypeDef *huart)
  41159. {
  41160. 8011d50: b480 push {r7}
  41161. 8011d52: b083 sub sp, #12
  41162. 8011d54: af00 add r7, sp, #0
  41163. 8011d56: 6078 str r0, [r7, #4]
  41164. /* Check whether the set of advanced features to configure is properly set */
  41165. assert_param(IS_UART_ADVFEATURE_INIT(huart->AdvancedInit.AdvFeatureInit));
  41166. /* if required, configure RX/TX pins swap */
  41167. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_SWAP_INIT))
  41168. 8011d58: 687b ldr r3, [r7, #4]
  41169. 8011d5a: 6a9b ldr r3, [r3, #40] @ 0x28
  41170. 8011d5c: f003 0308 and.w r3, r3, #8
  41171. 8011d60: 2b00 cmp r3, #0
  41172. 8011d62: d00a beq.n 8011d7a <UART_AdvFeatureConfig+0x2a>
  41173. {
  41174. assert_param(IS_UART_ADVFEATURE_SWAP(huart->AdvancedInit.Swap));
  41175. MODIFY_REG(huart->Instance->CR2, USART_CR2_SWAP, huart->AdvancedInit.Swap);
  41176. 8011d64: 687b ldr r3, [r7, #4]
  41177. 8011d66: 681b ldr r3, [r3, #0]
  41178. 8011d68: 685b ldr r3, [r3, #4]
  41179. 8011d6a: f423 4100 bic.w r1, r3, #32768 @ 0x8000
  41180. 8011d6e: 687b ldr r3, [r7, #4]
  41181. 8011d70: 6b9a ldr r2, [r3, #56] @ 0x38
  41182. 8011d72: 687b ldr r3, [r7, #4]
  41183. 8011d74: 681b ldr r3, [r3, #0]
  41184. 8011d76: 430a orrs r2, r1
  41185. 8011d78: 605a str r2, [r3, #4]
  41186. }
  41187. /* if required, configure TX pin active level inversion */
  41188. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_TXINVERT_INIT))
  41189. 8011d7a: 687b ldr r3, [r7, #4]
  41190. 8011d7c: 6a9b ldr r3, [r3, #40] @ 0x28
  41191. 8011d7e: f003 0301 and.w r3, r3, #1
  41192. 8011d82: 2b00 cmp r3, #0
  41193. 8011d84: d00a beq.n 8011d9c <UART_AdvFeatureConfig+0x4c>
  41194. {
  41195. assert_param(IS_UART_ADVFEATURE_TXINV(huart->AdvancedInit.TxPinLevelInvert));
  41196. MODIFY_REG(huart->Instance->CR2, USART_CR2_TXINV, huart->AdvancedInit.TxPinLevelInvert);
  41197. 8011d86: 687b ldr r3, [r7, #4]
  41198. 8011d88: 681b ldr r3, [r3, #0]
  41199. 8011d8a: 685b ldr r3, [r3, #4]
  41200. 8011d8c: f423 3100 bic.w r1, r3, #131072 @ 0x20000
  41201. 8011d90: 687b ldr r3, [r7, #4]
  41202. 8011d92: 6ada ldr r2, [r3, #44] @ 0x2c
  41203. 8011d94: 687b ldr r3, [r7, #4]
  41204. 8011d96: 681b ldr r3, [r3, #0]
  41205. 8011d98: 430a orrs r2, r1
  41206. 8011d9a: 605a str r2, [r3, #4]
  41207. }
  41208. /* if required, configure RX pin active level inversion */
  41209. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_RXINVERT_INIT))
  41210. 8011d9c: 687b ldr r3, [r7, #4]
  41211. 8011d9e: 6a9b ldr r3, [r3, #40] @ 0x28
  41212. 8011da0: f003 0302 and.w r3, r3, #2
  41213. 8011da4: 2b00 cmp r3, #0
  41214. 8011da6: d00a beq.n 8011dbe <UART_AdvFeatureConfig+0x6e>
  41215. {
  41216. assert_param(IS_UART_ADVFEATURE_RXINV(huart->AdvancedInit.RxPinLevelInvert));
  41217. MODIFY_REG(huart->Instance->CR2, USART_CR2_RXINV, huart->AdvancedInit.RxPinLevelInvert);
  41218. 8011da8: 687b ldr r3, [r7, #4]
  41219. 8011daa: 681b ldr r3, [r3, #0]
  41220. 8011dac: 685b ldr r3, [r3, #4]
  41221. 8011dae: f423 3180 bic.w r1, r3, #65536 @ 0x10000
  41222. 8011db2: 687b ldr r3, [r7, #4]
  41223. 8011db4: 6b1a ldr r2, [r3, #48] @ 0x30
  41224. 8011db6: 687b ldr r3, [r7, #4]
  41225. 8011db8: 681b ldr r3, [r3, #0]
  41226. 8011dba: 430a orrs r2, r1
  41227. 8011dbc: 605a str r2, [r3, #4]
  41228. }
  41229. /* if required, configure data inversion */
  41230. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_DATAINVERT_INIT))
  41231. 8011dbe: 687b ldr r3, [r7, #4]
  41232. 8011dc0: 6a9b ldr r3, [r3, #40] @ 0x28
  41233. 8011dc2: f003 0304 and.w r3, r3, #4
  41234. 8011dc6: 2b00 cmp r3, #0
  41235. 8011dc8: d00a beq.n 8011de0 <UART_AdvFeatureConfig+0x90>
  41236. {
  41237. assert_param(IS_UART_ADVFEATURE_DATAINV(huart->AdvancedInit.DataInvert));
  41238. MODIFY_REG(huart->Instance->CR2, USART_CR2_DATAINV, huart->AdvancedInit.DataInvert);
  41239. 8011dca: 687b ldr r3, [r7, #4]
  41240. 8011dcc: 681b ldr r3, [r3, #0]
  41241. 8011dce: 685b ldr r3, [r3, #4]
  41242. 8011dd0: f423 2180 bic.w r1, r3, #262144 @ 0x40000
  41243. 8011dd4: 687b ldr r3, [r7, #4]
  41244. 8011dd6: 6b5a ldr r2, [r3, #52] @ 0x34
  41245. 8011dd8: 687b ldr r3, [r7, #4]
  41246. 8011dda: 681b ldr r3, [r3, #0]
  41247. 8011ddc: 430a orrs r2, r1
  41248. 8011dde: 605a str r2, [r3, #4]
  41249. }
  41250. /* if required, configure RX overrun detection disabling */
  41251. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_RXOVERRUNDISABLE_INIT))
  41252. 8011de0: 687b ldr r3, [r7, #4]
  41253. 8011de2: 6a9b ldr r3, [r3, #40] @ 0x28
  41254. 8011de4: f003 0310 and.w r3, r3, #16
  41255. 8011de8: 2b00 cmp r3, #0
  41256. 8011dea: d00a beq.n 8011e02 <UART_AdvFeatureConfig+0xb2>
  41257. {
  41258. assert_param(IS_UART_OVERRUN(huart->AdvancedInit.OverrunDisable));
  41259. MODIFY_REG(huart->Instance->CR3, USART_CR3_OVRDIS, huart->AdvancedInit.OverrunDisable);
  41260. 8011dec: 687b ldr r3, [r7, #4]
  41261. 8011dee: 681b ldr r3, [r3, #0]
  41262. 8011df0: 689b ldr r3, [r3, #8]
  41263. 8011df2: f423 5180 bic.w r1, r3, #4096 @ 0x1000
  41264. 8011df6: 687b ldr r3, [r7, #4]
  41265. 8011df8: 6bda ldr r2, [r3, #60] @ 0x3c
  41266. 8011dfa: 687b ldr r3, [r7, #4]
  41267. 8011dfc: 681b ldr r3, [r3, #0]
  41268. 8011dfe: 430a orrs r2, r1
  41269. 8011e00: 609a str r2, [r3, #8]
  41270. }
  41271. /* if required, configure DMA disabling on reception error */
  41272. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_DMADISABLEONERROR_INIT))
  41273. 8011e02: 687b ldr r3, [r7, #4]
  41274. 8011e04: 6a9b ldr r3, [r3, #40] @ 0x28
  41275. 8011e06: f003 0320 and.w r3, r3, #32
  41276. 8011e0a: 2b00 cmp r3, #0
  41277. 8011e0c: d00a beq.n 8011e24 <UART_AdvFeatureConfig+0xd4>
  41278. {
  41279. assert_param(IS_UART_ADVFEATURE_DMAONRXERROR(huart->AdvancedInit.DMADisableonRxError));
  41280. MODIFY_REG(huart->Instance->CR3, USART_CR3_DDRE, huart->AdvancedInit.DMADisableonRxError);
  41281. 8011e0e: 687b ldr r3, [r7, #4]
  41282. 8011e10: 681b ldr r3, [r3, #0]
  41283. 8011e12: 689b ldr r3, [r3, #8]
  41284. 8011e14: f423 5100 bic.w r1, r3, #8192 @ 0x2000
  41285. 8011e18: 687b ldr r3, [r7, #4]
  41286. 8011e1a: 6c1a ldr r2, [r3, #64] @ 0x40
  41287. 8011e1c: 687b ldr r3, [r7, #4]
  41288. 8011e1e: 681b ldr r3, [r3, #0]
  41289. 8011e20: 430a orrs r2, r1
  41290. 8011e22: 609a str r2, [r3, #8]
  41291. }
  41292. /* if required, configure auto Baud rate detection scheme */
  41293. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_AUTOBAUDRATE_INIT))
  41294. 8011e24: 687b ldr r3, [r7, #4]
  41295. 8011e26: 6a9b ldr r3, [r3, #40] @ 0x28
  41296. 8011e28: f003 0340 and.w r3, r3, #64 @ 0x40
  41297. 8011e2c: 2b00 cmp r3, #0
  41298. 8011e2e: d01a beq.n 8011e66 <UART_AdvFeatureConfig+0x116>
  41299. {
  41300. assert_param(IS_USART_AUTOBAUDRATE_DETECTION_INSTANCE(huart->Instance));
  41301. assert_param(IS_UART_ADVFEATURE_AUTOBAUDRATE(huart->AdvancedInit.AutoBaudRateEnable));
  41302. MODIFY_REG(huart->Instance->CR2, USART_CR2_ABREN, huart->AdvancedInit.AutoBaudRateEnable);
  41303. 8011e30: 687b ldr r3, [r7, #4]
  41304. 8011e32: 681b ldr r3, [r3, #0]
  41305. 8011e34: 685b ldr r3, [r3, #4]
  41306. 8011e36: f423 1180 bic.w r1, r3, #1048576 @ 0x100000
  41307. 8011e3a: 687b ldr r3, [r7, #4]
  41308. 8011e3c: 6c5a ldr r2, [r3, #68] @ 0x44
  41309. 8011e3e: 687b ldr r3, [r7, #4]
  41310. 8011e40: 681b ldr r3, [r3, #0]
  41311. 8011e42: 430a orrs r2, r1
  41312. 8011e44: 605a str r2, [r3, #4]
  41313. /* set auto Baudrate detection parameters if detection is enabled */
  41314. if (huart->AdvancedInit.AutoBaudRateEnable == UART_ADVFEATURE_AUTOBAUDRATE_ENABLE)
  41315. 8011e46: 687b ldr r3, [r7, #4]
  41316. 8011e48: 6c5b ldr r3, [r3, #68] @ 0x44
  41317. 8011e4a: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
  41318. 8011e4e: d10a bne.n 8011e66 <UART_AdvFeatureConfig+0x116>
  41319. {
  41320. assert_param(IS_UART_ADVFEATURE_AUTOBAUDRATEMODE(huart->AdvancedInit.AutoBaudRateMode));
  41321. MODIFY_REG(huart->Instance->CR2, USART_CR2_ABRMODE, huart->AdvancedInit.AutoBaudRateMode);
  41322. 8011e50: 687b ldr r3, [r7, #4]
  41323. 8011e52: 681b ldr r3, [r3, #0]
  41324. 8011e54: 685b ldr r3, [r3, #4]
  41325. 8011e56: f423 01c0 bic.w r1, r3, #6291456 @ 0x600000
  41326. 8011e5a: 687b ldr r3, [r7, #4]
  41327. 8011e5c: 6c9a ldr r2, [r3, #72] @ 0x48
  41328. 8011e5e: 687b ldr r3, [r7, #4]
  41329. 8011e60: 681b ldr r3, [r3, #0]
  41330. 8011e62: 430a orrs r2, r1
  41331. 8011e64: 605a str r2, [r3, #4]
  41332. }
  41333. }
  41334. /* if required, configure MSB first on communication line */
  41335. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_MSBFIRST_INIT))
  41336. 8011e66: 687b ldr r3, [r7, #4]
  41337. 8011e68: 6a9b ldr r3, [r3, #40] @ 0x28
  41338. 8011e6a: f003 0380 and.w r3, r3, #128 @ 0x80
  41339. 8011e6e: 2b00 cmp r3, #0
  41340. 8011e70: d00a beq.n 8011e88 <UART_AdvFeatureConfig+0x138>
  41341. {
  41342. assert_param(IS_UART_ADVFEATURE_MSBFIRST(huart->AdvancedInit.MSBFirst));
  41343. MODIFY_REG(huart->Instance->CR2, USART_CR2_MSBFIRST, huart->AdvancedInit.MSBFirst);
  41344. 8011e72: 687b ldr r3, [r7, #4]
  41345. 8011e74: 681b ldr r3, [r3, #0]
  41346. 8011e76: 685b ldr r3, [r3, #4]
  41347. 8011e78: f423 2100 bic.w r1, r3, #524288 @ 0x80000
  41348. 8011e7c: 687b ldr r3, [r7, #4]
  41349. 8011e7e: 6cda ldr r2, [r3, #76] @ 0x4c
  41350. 8011e80: 687b ldr r3, [r7, #4]
  41351. 8011e82: 681b ldr r3, [r3, #0]
  41352. 8011e84: 430a orrs r2, r1
  41353. 8011e86: 605a str r2, [r3, #4]
  41354. }
  41355. }
  41356. 8011e88: bf00 nop
  41357. 8011e8a: 370c adds r7, #12
  41358. 8011e8c: 46bd mov sp, r7
  41359. 8011e8e: f85d 7b04 ldr.w r7, [sp], #4
  41360. 8011e92: 4770 bx lr
  41361. 08011e94 <UART_CheckIdleState>:
  41362. * @brief Check the UART Idle State.
  41363. * @param huart UART handle.
  41364. * @retval HAL status
  41365. */
  41366. HAL_StatusTypeDef UART_CheckIdleState(UART_HandleTypeDef *huart)
  41367. {
  41368. 8011e94: b580 push {r7, lr}
  41369. 8011e96: b098 sub sp, #96 @ 0x60
  41370. 8011e98: af02 add r7, sp, #8
  41371. 8011e9a: 6078 str r0, [r7, #4]
  41372. uint32_t tickstart;
  41373. /* Initialize the UART ErrorCode */
  41374. huart->ErrorCode = HAL_UART_ERROR_NONE;
  41375. 8011e9c: 687b ldr r3, [r7, #4]
  41376. 8011e9e: 2200 movs r2, #0
  41377. 8011ea0: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  41378. /* Init tickstart for timeout management */
  41379. tickstart = HAL_GetTick();
  41380. 8011ea4: f7f3 fe84 bl 8005bb0 <HAL_GetTick>
  41381. 8011ea8: 6578 str r0, [r7, #84] @ 0x54
  41382. /* Check if the Transmitter is enabled */
  41383. if ((huart->Instance->CR1 & USART_CR1_TE) == USART_CR1_TE)
  41384. 8011eaa: 687b ldr r3, [r7, #4]
  41385. 8011eac: 681b ldr r3, [r3, #0]
  41386. 8011eae: 681b ldr r3, [r3, #0]
  41387. 8011eb0: f003 0308 and.w r3, r3, #8
  41388. 8011eb4: 2b08 cmp r3, #8
  41389. 8011eb6: d12f bne.n 8011f18 <UART_CheckIdleState+0x84>
  41390. {
  41391. /* Wait until TEACK flag is set */
  41392. if (UART_WaitOnFlagUntilTimeout(huart, USART_ISR_TEACK, RESET, tickstart, HAL_UART_TIMEOUT_VALUE) != HAL_OK)
  41393. 8011eb8: f06f 437e mvn.w r3, #4261412864 @ 0xfe000000
  41394. 8011ebc: 9300 str r3, [sp, #0]
  41395. 8011ebe: 6d7b ldr r3, [r7, #84] @ 0x54
  41396. 8011ec0: 2200 movs r2, #0
  41397. 8011ec2: f44f 1100 mov.w r1, #2097152 @ 0x200000
  41398. 8011ec6: 6878 ldr r0, [r7, #4]
  41399. 8011ec8: f000 f88e bl 8011fe8 <UART_WaitOnFlagUntilTimeout>
  41400. 8011ecc: 4603 mov r3, r0
  41401. 8011ece: 2b00 cmp r3, #0
  41402. 8011ed0: d022 beq.n 8011f18 <UART_CheckIdleState+0x84>
  41403. {
  41404. /* Disable TXE interrupt for the interrupt process */
  41405. ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_TXEIE_TXFNFIE));
  41406. 8011ed2: 687b ldr r3, [r7, #4]
  41407. 8011ed4: 681b ldr r3, [r3, #0]
  41408. 8011ed6: 63bb str r3, [r7, #56] @ 0x38
  41409. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  41410. 8011ed8: 6bbb ldr r3, [r7, #56] @ 0x38
  41411. 8011eda: e853 3f00 ldrex r3, [r3]
  41412. 8011ede: 637b str r3, [r7, #52] @ 0x34
  41413. return(result);
  41414. 8011ee0: 6b7b ldr r3, [r7, #52] @ 0x34
  41415. 8011ee2: f023 0380 bic.w r3, r3, #128 @ 0x80
  41416. 8011ee6: 653b str r3, [r7, #80] @ 0x50
  41417. 8011ee8: 687b ldr r3, [r7, #4]
  41418. 8011eea: 681b ldr r3, [r3, #0]
  41419. 8011eec: 461a mov r2, r3
  41420. 8011eee: 6d3b ldr r3, [r7, #80] @ 0x50
  41421. 8011ef0: 647b str r3, [r7, #68] @ 0x44
  41422. 8011ef2: 643a str r2, [r7, #64] @ 0x40
  41423. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  41424. 8011ef4: 6c39 ldr r1, [r7, #64] @ 0x40
  41425. 8011ef6: 6c7a ldr r2, [r7, #68] @ 0x44
  41426. 8011ef8: e841 2300 strex r3, r2, [r1]
  41427. 8011efc: 63fb str r3, [r7, #60] @ 0x3c
  41428. return(result);
  41429. 8011efe: 6bfb ldr r3, [r7, #60] @ 0x3c
  41430. 8011f00: 2b00 cmp r3, #0
  41431. 8011f02: d1e6 bne.n 8011ed2 <UART_CheckIdleState+0x3e>
  41432. huart->gState = HAL_UART_STATE_READY;
  41433. 8011f04: 687b ldr r3, [r7, #4]
  41434. 8011f06: 2220 movs r2, #32
  41435. 8011f08: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  41436. __HAL_UNLOCK(huart);
  41437. 8011f0c: 687b ldr r3, [r7, #4]
  41438. 8011f0e: 2200 movs r2, #0
  41439. 8011f10: f883 2084 strb.w r2, [r3, #132] @ 0x84
  41440. /* Timeout occurred */
  41441. return HAL_TIMEOUT;
  41442. 8011f14: 2303 movs r3, #3
  41443. 8011f16: e063 b.n 8011fe0 <UART_CheckIdleState+0x14c>
  41444. }
  41445. }
  41446. /* Check if the Receiver is enabled */
  41447. if ((huart->Instance->CR1 & USART_CR1_RE) == USART_CR1_RE)
  41448. 8011f18: 687b ldr r3, [r7, #4]
  41449. 8011f1a: 681b ldr r3, [r3, #0]
  41450. 8011f1c: 681b ldr r3, [r3, #0]
  41451. 8011f1e: f003 0304 and.w r3, r3, #4
  41452. 8011f22: 2b04 cmp r3, #4
  41453. 8011f24: d149 bne.n 8011fba <UART_CheckIdleState+0x126>
  41454. {
  41455. /* Wait until REACK flag is set */
  41456. if (UART_WaitOnFlagUntilTimeout(huart, USART_ISR_REACK, RESET, tickstart, HAL_UART_TIMEOUT_VALUE) != HAL_OK)
  41457. 8011f26: f06f 437e mvn.w r3, #4261412864 @ 0xfe000000
  41458. 8011f2a: 9300 str r3, [sp, #0]
  41459. 8011f2c: 6d7b ldr r3, [r7, #84] @ 0x54
  41460. 8011f2e: 2200 movs r2, #0
  41461. 8011f30: f44f 0180 mov.w r1, #4194304 @ 0x400000
  41462. 8011f34: 6878 ldr r0, [r7, #4]
  41463. 8011f36: f000 f857 bl 8011fe8 <UART_WaitOnFlagUntilTimeout>
  41464. 8011f3a: 4603 mov r3, r0
  41465. 8011f3c: 2b00 cmp r3, #0
  41466. 8011f3e: d03c beq.n 8011fba <UART_CheckIdleState+0x126>
  41467. {
  41468. /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error)
  41469. interrupts for the interrupt process */
  41470. ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE));
  41471. 8011f40: 687b ldr r3, [r7, #4]
  41472. 8011f42: 681b ldr r3, [r3, #0]
  41473. 8011f44: 627b str r3, [r7, #36] @ 0x24
  41474. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  41475. 8011f46: 6a7b ldr r3, [r7, #36] @ 0x24
  41476. 8011f48: e853 3f00 ldrex r3, [r3]
  41477. 8011f4c: 623b str r3, [r7, #32]
  41478. return(result);
  41479. 8011f4e: 6a3b ldr r3, [r7, #32]
  41480. 8011f50: f423 7390 bic.w r3, r3, #288 @ 0x120
  41481. 8011f54: 64fb str r3, [r7, #76] @ 0x4c
  41482. 8011f56: 687b ldr r3, [r7, #4]
  41483. 8011f58: 681b ldr r3, [r3, #0]
  41484. 8011f5a: 461a mov r2, r3
  41485. 8011f5c: 6cfb ldr r3, [r7, #76] @ 0x4c
  41486. 8011f5e: 633b str r3, [r7, #48] @ 0x30
  41487. 8011f60: 62fa str r2, [r7, #44] @ 0x2c
  41488. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  41489. 8011f62: 6af9 ldr r1, [r7, #44] @ 0x2c
  41490. 8011f64: 6b3a ldr r2, [r7, #48] @ 0x30
  41491. 8011f66: e841 2300 strex r3, r2, [r1]
  41492. 8011f6a: 62bb str r3, [r7, #40] @ 0x28
  41493. return(result);
  41494. 8011f6c: 6abb ldr r3, [r7, #40] @ 0x28
  41495. 8011f6e: 2b00 cmp r3, #0
  41496. 8011f70: d1e6 bne.n 8011f40 <UART_CheckIdleState+0xac>
  41497. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);
  41498. 8011f72: 687b ldr r3, [r7, #4]
  41499. 8011f74: 681b ldr r3, [r3, #0]
  41500. 8011f76: 3308 adds r3, #8
  41501. 8011f78: 613b str r3, [r7, #16]
  41502. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  41503. 8011f7a: 693b ldr r3, [r7, #16]
  41504. 8011f7c: e853 3f00 ldrex r3, [r3]
  41505. 8011f80: 60fb str r3, [r7, #12]
  41506. return(result);
  41507. 8011f82: 68fb ldr r3, [r7, #12]
  41508. 8011f84: f023 0301 bic.w r3, r3, #1
  41509. 8011f88: 64bb str r3, [r7, #72] @ 0x48
  41510. 8011f8a: 687b ldr r3, [r7, #4]
  41511. 8011f8c: 681b ldr r3, [r3, #0]
  41512. 8011f8e: 3308 adds r3, #8
  41513. 8011f90: 6cba ldr r2, [r7, #72] @ 0x48
  41514. 8011f92: 61fa str r2, [r7, #28]
  41515. 8011f94: 61bb str r3, [r7, #24]
  41516. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  41517. 8011f96: 69b9 ldr r1, [r7, #24]
  41518. 8011f98: 69fa ldr r2, [r7, #28]
  41519. 8011f9a: e841 2300 strex r3, r2, [r1]
  41520. 8011f9e: 617b str r3, [r7, #20]
  41521. return(result);
  41522. 8011fa0: 697b ldr r3, [r7, #20]
  41523. 8011fa2: 2b00 cmp r3, #0
  41524. 8011fa4: d1e5 bne.n 8011f72 <UART_CheckIdleState+0xde>
  41525. huart->RxState = HAL_UART_STATE_READY;
  41526. 8011fa6: 687b ldr r3, [r7, #4]
  41527. 8011fa8: 2220 movs r2, #32
  41528. 8011faa: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  41529. __HAL_UNLOCK(huart);
  41530. 8011fae: 687b ldr r3, [r7, #4]
  41531. 8011fb0: 2200 movs r2, #0
  41532. 8011fb2: f883 2084 strb.w r2, [r3, #132] @ 0x84
  41533. /* Timeout occurred */
  41534. return HAL_TIMEOUT;
  41535. 8011fb6: 2303 movs r3, #3
  41536. 8011fb8: e012 b.n 8011fe0 <UART_CheckIdleState+0x14c>
  41537. }
  41538. }
  41539. /* Initialize the UART State */
  41540. huart->gState = HAL_UART_STATE_READY;
  41541. 8011fba: 687b ldr r3, [r7, #4]
  41542. 8011fbc: 2220 movs r2, #32
  41543. 8011fbe: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  41544. huart->RxState = HAL_UART_STATE_READY;
  41545. 8011fc2: 687b ldr r3, [r7, #4]
  41546. 8011fc4: 2220 movs r2, #32
  41547. 8011fc6: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  41548. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  41549. 8011fca: 687b ldr r3, [r7, #4]
  41550. 8011fcc: 2200 movs r2, #0
  41551. 8011fce: 66da str r2, [r3, #108] @ 0x6c
  41552. huart->RxEventType = HAL_UART_RXEVENT_TC;
  41553. 8011fd0: 687b ldr r3, [r7, #4]
  41554. 8011fd2: 2200 movs r2, #0
  41555. 8011fd4: 671a str r2, [r3, #112] @ 0x70
  41556. __HAL_UNLOCK(huart);
  41557. 8011fd6: 687b ldr r3, [r7, #4]
  41558. 8011fd8: 2200 movs r2, #0
  41559. 8011fda: f883 2084 strb.w r2, [r3, #132] @ 0x84
  41560. return HAL_OK;
  41561. 8011fde: 2300 movs r3, #0
  41562. }
  41563. 8011fe0: 4618 mov r0, r3
  41564. 8011fe2: 3758 adds r7, #88 @ 0x58
  41565. 8011fe4: 46bd mov sp, r7
  41566. 8011fe6: bd80 pop {r7, pc}
  41567. 08011fe8 <UART_WaitOnFlagUntilTimeout>:
  41568. * @param Timeout Timeout duration
  41569. * @retval HAL status
  41570. */
  41571. HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status,
  41572. uint32_t Tickstart, uint32_t Timeout)
  41573. {
  41574. 8011fe8: b580 push {r7, lr}
  41575. 8011fea: b084 sub sp, #16
  41576. 8011fec: af00 add r7, sp, #0
  41577. 8011fee: 60f8 str r0, [r7, #12]
  41578. 8011ff0: 60b9 str r1, [r7, #8]
  41579. 8011ff2: 603b str r3, [r7, #0]
  41580. 8011ff4: 4613 mov r3, r2
  41581. 8011ff6: 71fb strb r3, [r7, #7]
  41582. /* Wait until flag is set */
  41583. while ((__HAL_UART_GET_FLAG(huart, Flag) ? SET : RESET) == Status)
  41584. 8011ff8: e04f b.n 801209a <UART_WaitOnFlagUntilTimeout+0xb2>
  41585. {
  41586. /* Check for the Timeout */
  41587. if (Timeout != HAL_MAX_DELAY)
  41588. 8011ffa: 69bb ldr r3, [r7, #24]
  41589. 8011ffc: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  41590. 8012000: d04b beq.n 801209a <UART_WaitOnFlagUntilTimeout+0xb2>
  41591. {
  41592. if (((HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U))
  41593. 8012002: f7f3 fdd5 bl 8005bb0 <HAL_GetTick>
  41594. 8012006: 4602 mov r2, r0
  41595. 8012008: 683b ldr r3, [r7, #0]
  41596. 801200a: 1ad3 subs r3, r2, r3
  41597. 801200c: 69ba ldr r2, [r7, #24]
  41598. 801200e: 429a cmp r2, r3
  41599. 8012010: d302 bcc.n 8012018 <UART_WaitOnFlagUntilTimeout+0x30>
  41600. 8012012: 69bb ldr r3, [r7, #24]
  41601. 8012014: 2b00 cmp r3, #0
  41602. 8012016: d101 bne.n 801201c <UART_WaitOnFlagUntilTimeout+0x34>
  41603. {
  41604. return HAL_TIMEOUT;
  41605. 8012018: 2303 movs r3, #3
  41606. 801201a: e04e b.n 80120ba <UART_WaitOnFlagUntilTimeout+0xd2>
  41607. }
  41608. if ((READ_BIT(huart->Instance->CR1, USART_CR1_RE) != 0U) && (Flag != UART_FLAG_TXE) && (Flag != UART_FLAG_TC))
  41609. 801201c: 68fb ldr r3, [r7, #12]
  41610. 801201e: 681b ldr r3, [r3, #0]
  41611. 8012020: 681b ldr r3, [r3, #0]
  41612. 8012022: f003 0304 and.w r3, r3, #4
  41613. 8012026: 2b00 cmp r3, #0
  41614. 8012028: d037 beq.n 801209a <UART_WaitOnFlagUntilTimeout+0xb2>
  41615. 801202a: 68bb ldr r3, [r7, #8]
  41616. 801202c: 2b80 cmp r3, #128 @ 0x80
  41617. 801202e: d034 beq.n 801209a <UART_WaitOnFlagUntilTimeout+0xb2>
  41618. 8012030: 68bb ldr r3, [r7, #8]
  41619. 8012032: 2b40 cmp r3, #64 @ 0x40
  41620. 8012034: d031 beq.n 801209a <UART_WaitOnFlagUntilTimeout+0xb2>
  41621. {
  41622. if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) == SET)
  41623. 8012036: 68fb ldr r3, [r7, #12]
  41624. 8012038: 681b ldr r3, [r3, #0]
  41625. 801203a: 69db ldr r3, [r3, #28]
  41626. 801203c: f003 0308 and.w r3, r3, #8
  41627. 8012040: 2b08 cmp r3, #8
  41628. 8012042: d110 bne.n 8012066 <UART_WaitOnFlagUntilTimeout+0x7e>
  41629. {
  41630. /* Clear Overrun Error flag*/
  41631. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF);
  41632. 8012044: 68fb ldr r3, [r7, #12]
  41633. 8012046: 681b ldr r3, [r3, #0]
  41634. 8012048: 2208 movs r2, #8
  41635. 801204a: 621a str r2, [r3, #32]
  41636. /* Blocking error : transfer is aborted
  41637. Set the UART state ready to be able to start again the process,
  41638. Disable Rx Interrupts if ongoing */
  41639. UART_EndRxTransfer(huart);
  41640. 801204c: 68f8 ldr r0, [r7, #12]
  41641. 801204e: f000 f95b bl 8012308 <UART_EndRxTransfer>
  41642. huart->ErrorCode = HAL_UART_ERROR_ORE;
  41643. 8012052: 68fb ldr r3, [r7, #12]
  41644. 8012054: 2208 movs r2, #8
  41645. 8012056: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  41646. /* Process Unlocked */
  41647. __HAL_UNLOCK(huart);
  41648. 801205a: 68fb ldr r3, [r7, #12]
  41649. 801205c: 2200 movs r2, #0
  41650. 801205e: f883 2084 strb.w r2, [r3, #132] @ 0x84
  41651. return HAL_ERROR;
  41652. 8012062: 2301 movs r3, #1
  41653. 8012064: e029 b.n 80120ba <UART_WaitOnFlagUntilTimeout+0xd2>
  41654. }
  41655. if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RTOF) == SET)
  41656. 8012066: 68fb ldr r3, [r7, #12]
  41657. 8012068: 681b ldr r3, [r3, #0]
  41658. 801206a: 69db ldr r3, [r3, #28]
  41659. 801206c: f403 6300 and.w r3, r3, #2048 @ 0x800
  41660. 8012070: f5b3 6f00 cmp.w r3, #2048 @ 0x800
  41661. 8012074: d111 bne.n 801209a <UART_WaitOnFlagUntilTimeout+0xb2>
  41662. {
  41663. /* Clear Receiver Timeout flag*/
  41664. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_RTOF);
  41665. 8012076: 68fb ldr r3, [r7, #12]
  41666. 8012078: 681b ldr r3, [r3, #0]
  41667. 801207a: f44f 6200 mov.w r2, #2048 @ 0x800
  41668. 801207e: 621a str r2, [r3, #32]
  41669. /* Blocking error : transfer is aborted
  41670. Set the UART state ready to be able to start again the process,
  41671. Disable Rx Interrupts if ongoing */
  41672. UART_EndRxTransfer(huart);
  41673. 8012080: 68f8 ldr r0, [r7, #12]
  41674. 8012082: f000 f941 bl 8012308 <UART_EndRxTransfer>
  41675. huart->ErrorCode = HAL_UART_ERROR_RTO;
  41676. 8012086: 68fb ldr r3, [r7, #12]
  41677. 8012088: 2220 movs r2, #32
  41678. 801208a: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  41679. /* Process Unlocked */
  41680. __HAL_UNLOCK(huart);
  41681. 801208e: 68fb ldr r3, [r7, #12]
  41682. 8012090: 2200 movs r2, #0
  41683. 8012092: f883 2084 strb.w r2, [r3, #132] @ 0x84
  41684. return HAL_TIMEOUT;
  41685. 8012096: 2303 movs r3, #3
  41686. 8012098: e00f b.n 80120ba <UART_WaitOnFlagUntilTimeout+0xd2>
  41687. while ((__HAL_UART_GET_FLAG(huart, Flag) ? SET : RESET) == Status)
  41688. 801209a: 68fb ldr r3, [r7, #12]
  41689. 801209c: 681b ldr r3, [r3, #0]
  41690. 801209e: 69da ldr r2, [r3, #28]
  41691. 80120a0: 68bb ldr r3, [r7, #8]
  41692. 80120a2: 4013 ands r3, r2
  41693. 80120a4: 68ba ldr r2, [r7, #8]
  41694. 80120a6: 429a cmp r2, r3
  41695. 80120a8: bf0c ite eq
  41696. 80120aa: 2301 moveq r3, #1
  41697. 80120ac: 2300 movne r3, #0
  41698. 80120ae: b2db uxtb r3, r3
  41699. 80120b0: 461a mov r2, r3
  41700. 80120b2: 79fb ldrb r3, [r7, #7]
  41701. 80120b4: 429a cmp r2, r3
  41702. 80120b6: d0a0 beq.n 8011ffa <UART_WaitOnFlagUntilTimeout+0x12>
  41703. }
  41704. }
  41705. }
  41706. }
  41707. return HAL_OK;
  41708. 80120b8: 2300 movs r3, #0
  41709. }
  41710. 80120ba: 4618 mov r0, r3
  41711. 80120bc: 3710 adds r7, #16
  41712. 80120be: 46bd mov sp, r7
  41713. 80120c0: bd80 pop {r7, pc}
  41714. ...
  41715. 080120c4 <UART_Start_Receive_IT>:
  41716. * @param pData Pointer to data buffer (u8 or u16 data elements).
  41717. * @param Size Amount of data elements (u8 or u16) to be received.
  41718. * @retval HAL status
  41719. */
  41720. HAL_StatusTypeDef UART_Start_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
  41721. {
  41722. 80120c4: b480 push {r7}
  41723. 80120c6: b0a3 sub sp, #140 @ 0x8c
  41724. 80120c8: af00 add r7, sp, #0
  41725. 80120ca: 60f8 str r0, [r7, #12]
  41726. 80120cc: 60b9 str r1, [r7, #8]
  41727. 80120ce: 4613 mov r3, r2
  41728. 80120d0: 80fb strh r3, [r7, #6]
  41729. huart->pRxBuffPtr = pData;
  41730. 80120d2: 68fb ldr r3, [r7, #12]
  41731. 80120d4: 68ba ldr r2, [r7, #8]
  41732. 80120d6: 659a str r2, [r3, #88] @ 0x58
  41733. huart->RxXferSize = Size;
  41734. 80120d8: 68fb ldr r3, [r7, #12]
  41735. 80120da: 88fa ldrh r2, [r7, #6]
  41736. 80120dc: f8a3 205c strh.w r2, [r3, #92] @ 0x5c
  41737. huart->RxXferCount = Size;
  41738. 80120e0: 68fb ldr r3, [r7, #12]
  41739. 80120e2: 88fa ldrh r2, [r7, #6]
  41740. 80120e4: f8a3 205e strh.w r2, [r3, #94] @ 0x5e
  41741. huart->RxISR = NULL;
  41742. 80120e8: 68fb ldr r3, [r7, #12]
  41743. 80120ea: 2200 movs r2, #0
  41744. 80120ec: 675a str r2, [r3, #116] @ 0x74
  41745. /* Computation of UART mask to apply to RDR register */
  41746. UART_MASK_COMPUTATION(huart);
  41747. 80120ee: 68fb ldr r3, [r7, #12]
  41748. 80120f0: 689b ldr r3, [r3, #8]
  41749. 80120f2: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  41750. 80120f6: d10e bne.n 8012116 <UART_Start_Receive_IT+0x52>
  41751. 80120f8: 68fb ldr r3, [r7, #12]
  41752. 80120fa: 691b ldr r3, [r3, #16]
  41753. 80120fc: 2b00 cmp r3, #0
  41754. 80120fe: d105 bne.n 801210c <UART_Start_Receive_IT+0x48>
  41755. 8012100: 68fb ldr r3, [r7, #12]
  41756. 8012102: f240 12ff movw r2, #511 @ 0x1ff
  41757. 8012106: f8a3 2060 strh.w r2, [r3, #96] @ 0x60
  41758. 801210a: e02d b.n 8012168 <UART_Start_Receive_IT+0xa4>
  41759. 801210c: 68fb ldr r3, [r7, #12]
  41760. 801210e: 22ff movs r2, #255 @ 0xff
  41761. 8012110: f8a3 2060 strh.w r2, [r3, #96] @ 0x60
  41762. 8012114: e028 b.n 8012168 <UART_Start_Receive_IT+0xa4>
  41763. 8012116: 68fb ldr r3, [r7, #12]
  41764. 8012118: 689b ldr r3, [r3, #8]
  41765. 801211a: 2b00 cmp r3, #0
  41766. 801211c: d10d bne.n 801213a <UART_Start_Receive_IT+0x76>
  41767. 801211e: 68fb ldr r3, [r7, #12]
  41768. 8012120: 691b ldr r3, [r3, #16]
  41769. 8012122: 2b00 cmp r3, #0
  41770. 8012124: d104 bne.n 8012130 <UART_Start_Receive_IT+0x6c>
  41771. 8012126: 68fb ldr r3, [r7, #12]
  41772. 8012128: 22ff movs r2, #255 @ 0xff
  41773. 801212a: f8a3 2060 strh.w r2, [r3, #96] @ 0x60
  41774. 801212e: e01b b.n 8012168 <UART_Start_Receive_IT+0xa4>
  41775. 8012130: 68fb ldr r3, [r7, #12]
  41776. 8012132: 227f movs r2, #127 @ 0x7f
  41777. 8012134: f8a3 2060 strh.w r2, [r3, #96] @ 0x60
  41778. 8012138: e016 b.n 8012168 <UART_Start_Receive_IT+0xa4>
  41779. 801213a: 68fb ldr r3, [r7, #12]
  41780. 801213c: 689b ldr r3, [r3, #8]
  41781. 801213e: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  41782. 8012142: d10d bne.n 8012160 <UART_Start_Receive_IT+0x9c>
  41783. 8012144: 68fb ldr r3, [r7, #12]
  41784. 8012146: 691b ldr r3, [r3, #16]
  41785. 8012148: 2b00 cmp r3, #0
  41786. 801214a: d104 bne.n 8012156 <UART_Start_Receive_IT+0x92>
  41787. 801214c: 68fb ldr r3, [r7, #12]
  41788. 801214e: 227f movs r2, #127 @ 0x7f
  41789. 8012150: f8a3 2060 strh.w r2, [r3, #96] @ 0x60
  41790. 8012154: e008 b.n 8012168 <UART_Start_Receive_IT+0xa4>
  41791. 8012156: 68fb ldr r3, [r7, #12]
  41792. 8012158: 223f movs r2, #63 @ 0x3f
  41793. 801215a: f8a3 2060 strh.w r2, [r3, #96] @ 0x60
  41794. 801215e: e003 b.n 8012168 <UART_Start_Receive_IT+0xa4>
  41795. 8012160: 68fb ldr r3, [r7, #12]
  41796. 8012162: 2200 movs r2, #0
  41797. 8012164: f8a3 2060 strh.w r2, [r3, #96] @ 0x60
  41798. huart->ErrorCode = HAL_UART_ERROR_NONE;
  41799. 8012168: 68fb ldr r3, [r7, #12]
  41800. 801216a: 2200 movs r2, #0
  41801. 801216c: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  41802. huart->RxState = HAL_UART_STATE_BUSY_RX;
  41803. 8012170: 68fb ldr r3, [r7, #12]
  41804. 8012172: 2222 movs r2, #34 @ 0x22
  41805. 8012174: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  41806. /* Enable the UART Error Interrupt: (Frame error, noise error, overrun error) */
  41807. ATOMIC_SET_BIT(huart->Instance->CR3, USART_CR3_EIE);
  41808. 8012178: 68fb ldr r3, [r7, #12]
  41809. 801217a: 681b ldr r3, [r3, #0]
  41810. 801217c: 3308 adds r3, #8
  41811. 801217e: 667b str r3, [r7, #100] @ 0x64
  41812. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  41813. 8012180: 6e7b ldr r3, [r7, #100] @ 0x64
  41814. 8012182: e853 3f00 ldrex r3, [r3]
  41815. 8012186: 663b str r3, [r7, #96] @ 0x60
  41816. return(result);
  41817. 8012188: 6e3b ldr r3, [r7, #96] @ 0x60
  41818. 801218a: f043 0301 orr.w r3, r3, #1
  41819. 801218e: f8c7 3084 str.w r3, [r7, #132] @ 0x84
  41820. 8012192: 68fb ldr r3, [r7, #12]
  41821. 8012194: 681b ldr r3, [r3, #0]
  41822. 8012196: 3308 adds r3, #8
  41823. 8012198: f8d7 2084 ldr.w r2, [r7, #132] @ 0x84
  41824. 801219c: 673a str r2, [r7, #112] @ 0x70
  41825. 801219e: 66fb str r3, [r7, #108] @ 0x6c
  41826. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  41827. 80121a0: 6ef9 ldr r1, [r7, #108] @ 0x6c
  41828. 80121a2: 6f3a ldr r2, [r7, #112] @ 0x70
  41829. 80121a4: e841 2300 strex r3, r2, [r1]
  41830. 80121a8: 66bb str r3, [r7, #104] @ 0x68
  41831. return(result);
  41832. 80121aa: 6ebb ldr r3, [r7, #104] @ 0x68
  41833. 80121ac: 2b00 cmp r3, #0
  41834. 80121ae: d1e3 bne.n 8012178 <UART_Start_Receive_IT+0xb4>
  41835. /* Configure Rx interrupt processing */
  41836. if ((huart->FifoMode == UART_FIFOMODE_ENABLE) && (Size >= huart->NbRxDataToProcess))
  41837. 80121b0: 68fb ldr r3, [r7, #12]
  41838. 80121b2: 6e5b ldr r3, [r3, #100] @ 0x64
  41839. 80121b4: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  41840. 80121b8: d14f bne.n 801225a <UART_Start_Receive_IT+0x196>
  41841. 80121ba: 68fb ldr r3, [r7, #12]
  41842. 80121bc: f8b3 3068 ldrh.w r3, [r3, #104] @ 0x68
  41843. 80121c0: 88fa ldrh r2, [r7, #6]
  41844. 80121c2: 429a cmp r2, r3
  41845. 80121c4: d349 bcc.n 801225a <UART_Start_Receive_IT+0x196>
  41846. {
  41847. /* Set the Rx ISR function pointer according to the data word length */
  41848. if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE))
  41849. 80121c6: 68fb ldr r3, [r7, #12]
  41850. 80121c8: 689b ldr r3, [r3, #8]
  41851. 80121ca: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  41852. 80121ce: d107 bne.n 80121e0 <UART_Start_Receive_IT+0x11c>
  41853. 80121d0: 68fb ldr r3, [r7, #12]
  41854. 80121d2: 691b ldr r3, [r3, #16]
  41855. 80121d4: 2b00 cmp r3, #0
  41856. 80121d6: d103 bne.n 80121e0 <UART_Start_Receive_IT+0x11c>
  41857. {
  41858. huart->RxISR = UART_RxISR_16BIT_FIFOEN;
  41859. 80121d8: 68fb ldr r3, [r7, #12]
  41860. 80121da: 4a47 ldr r2, [pc, #284] @ (80122f8 <UART_Start_Receive_IT+0x234>)
  41861. 80121dc: 675a str r2, [r3, #116] @ 0x74
  41862. 80121de: e002 b.n 80121e6 <UART_Start_Receive_IT+0x122>
  41863. }
  41864. else
  41865. {
  41866. huart->RxISR = UART_RxISR_8BIT_FIFOEN;
  41867. 80121e0: 68fb ldr r3, [r7, #12]
  41868. 80121e2: 4a46 ldr r2, [pc, #280] @ (80122fc <UART_Start_Receive_IT+0x238>)
  41869. 80121e4: 675a str r2, [r3, #116] @ 0x74
  41870. }
  41871. /* Enable the UART Parity Error interrupt and RX FIFO Threshold interrupt */
  41872. if (huart->Init.Parity != UART_PARITY_NONE)
  41873. 80121e6: 68fb ldr r3, [r7, #12]
  41874. 80121e8: 691b ldr r3, [r3, #16]
  41875. 80121ea: 2b00 cmp r3, #0
  41876. 80121ec: d01a beq.n 8012224 <UART_Start_Receive_IT+0x160>
  41877. {
  41878. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_PEIE);
  41879. 80121ee: 68fb ldr r3, [r7, #12]
  41880. 80121f0: 681b ldr r3, [r3, #0]
  41881. 80121f2: 653b str r3, [r7, #80] @ 0x50
  41882. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  41883. 80121f4: 6d3b ldr r3, [r7, #80] @ 0x50
  41884. 80121f6: e853 3f00 ldrex r3, [r3]
  41885. 80121fa: 64fb str r3, [r7, #76] @ 0x4c
  41886. return(result);
  41887. 80121fc: 6cfb ldr r3, [r7, #76] @ 0x4c
  41888. 80121fe: f443 7380 orr.w r3, r3, #256 @ 0x100
  41889. 8012202: f8c7 3080 str.w r3, [r7, #128] @ 0x80
  41890. 8012206: 68fb ldr r3, [r7, #12]
  41891. 8012208: 681b ldr r3, [r3, #0]
  41892. 801220a: 461a mov r2, r3
  41893. 801220c: f8d7 3080 ldr.w r3, [r7, #128] @ 0x80
  41894. 8012210: 65fb str r3, [r7, #92] @ 0x5c
  41895. 8012212: 65ba str r2, [r7, #88] @ 0x58
  41896. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  41897. 8012214: 6db9 ldr r1, [r7, #88] @ 0x58
  41898. 8012216: 6dfa ldr r2, [r7, #92] @ 0x5c
  41899. 8012218: e841 2300 strex r3, r2, [r1]
  41900. 801221c: 657b str r3, [r7, #84] @ 0x54
  41901. return(result);
  41902. 801221e: 6d7b ldr r3, [r7, #84] @ 0x54
  41903. 8012220: 2b00 cmp r3, #0
  41904. 8012222: d1e4 bne.n 80121ee <UART_Start_Receive_IT+0x12a>
  41905. }
  41906. ATOMIC_SET_BIT(huart->Instance->CR3, USART_CR3_RXFTIE);
  41907. 8012224: 68fb ldr r3, [r7, #12]
  41908. 8012226: 681b ldr r3, [r3, #0]
  41909. 8012228: 3308 adds r3, #8
  41910. 801222a: 63fb str r3, [r7, #60] @ 0x3c
  41911. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  41912. 801222c: 6bfb ldr r3, [r7, #60] @ 0x3c
  41913. 801222e: e853 3f00 ldrex r3, [r3]
  41914. 8012232: 63bb str r3, [r7, #56] @ 0x38
  41915. return(result);
  41916. 8012234: 6bbb ldr r3, [r7, #56] @ 0x38
  41917. 8012236: f043 5380 orr.w r3, r3, #268435456 @ 0x10000000
  41918. 801223a: 67fb str r3, [r7, #124] @ 0x7c
  41919. 801223c: 68fb ldr r3, [r7, #12]
  41920. 801223e: 681b ldr r3, [r3, #0]
  41921. 8012240: 3308 adds r3, #8
  41922. 8012242: 6ffa ldr r2, [r7, #124] @ 0x7c
  41923. 8012244: 64ba str r2, [r7, #72] @ 0x48
  41924. 8012246: 647b str r3, [r7, #68] @ 0x44
  41925. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  41926. 8012248: 6c79 ldr r1, [r7, #68] @ 0x44
  41927. 801224a: 6cba ldr r2, [r7, #72] @ 0x48
  41928. 801224c: e841 2300 strex r3, r2, [r1]
  41929. 8012250: 643b str r3, [r7, #64] @ 0x40
  41930. return(result);
  41931. 8012252: 6c3b ldr r3, [r7, #64] @ 0x40
  41932. 8012254: 2b00 cmp r3, #0
  41933. 8012256: d1e5 bne.n 8012224 <UART_Start_Receive_IT+0x160>
  41934. 8012258: e046 b.n 80122e8 <UART_Start_Receive_IT+0x224>
  41935. }
  41936. else
  41937. {
  41938. /* Set the Rx ISR function pointer according to the data word length */
  41939. if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE))
  41940. 801225a: 68fb ldr r3, [r7, #12]
  41941. 801225c: 689b ldr r3, [r3, #8]
  41942. 801225e: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  41943. 8012262: d107 bne.n 8012274 <UART_Start_Receive_IT+0x1b0>
  41944. 8012264: 68fb ldr r3, [r7, #12]
  41945. 8012266: 691b ldr r3, [r3, #16]
  41946. 8012268: 2b00 cmp r3, #0
  41947. 801226a: d103 bne.n 8012274 <UART_Start_Receive_IT+0x1b0>
  41948. {
  41949. huart->RxISR = UART_RxISR_16BIT;
  41950. 801226c: 68fb ldr r3, [r7, #12]
  41951. 801226e: 4a24 ldr r2, [pc, #144] @ (8012300 <UART_Start_Receive_IT+0x23c>)
  41952. 8012270: 675a str r2, [r3, #116] @ 0x74
  41953. 8012272: e002 b.n 801227a <UART_Start_Receive_IT+0x1b6>
  41954. }
  41955. else
  41956. {
  41957. huart->RxISR = UART_RxISR_8BIT;
  41958. 8012274: 68fb ldr r3, [r7, #12]
  41959. 8012276: 4a23 ldr r2, [pc, #140] @ (8012304 <UART_Start_Receive_IT+0x240>)
  41960. 8012278: 675a str r2, [r3, #116] @ 0x74
  41961. }
  41962. /* Enable the UART Parity Error interrupt and Data Register Not Empty interrupt */
  41963. if (huart->Init.Parity != UART_PARITY_NONE)
  41964. 801227a: 68fb ldr r3, [r7, #12]
  41965. 801227c: 691b ldr r3, [r3, #16]
  41966. 801227e: 2b00 cmp r3, #0
  41967. 8012280: d019 beq.n 80122b6 <UART_Start_Receive_IT+0x1f2>
  41968. {
  41969. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_PEIE | USART_CR1_RXNEIE_RXFNEIE);
  41970. 8012282: 68fb ldr r3, [r7, #12]
  41971. 8012284: 681b ldr r3, [r3, #0]
  41972. 8012286: 62bb str r3, [r7, #40] @ 0x28
  41973. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  41974. 8012288: 6abb ldr r3, [r7, #40] @ 0x28
  41975. 801228a: e853 3f00 ldrex r3, [r3]
  41976. 801228e: 627b str r3, [r7, #36] @ 0x24
  41977. return(result);
  41978. 8012290: 6a7b ldr r3, [r7, #36] @ 0x24
  41979. 8012292: f443 7390 orr.w r3, r3, #288 @ 0x120
  41980. 8012296: 677b str r3, [r7, #116] @ 0x74
  41981. 8012298: 68fb ldr r3, [r7, #12]
  41982. 801229a: 681b ldr r3, [r3, #0]
  41983. 801229c: 461a mov r2, r3
  41984. 801229e: 6f7b ldr r3, [r7, #116] @ 0x74
  41985. 80122a0: 637b str r3, [r7, #52] @ 0x34
  41986. 80122a2: 633a str r2, [r7, #48] @ 0x30
  41987. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  41988. 80122a4: 6b39 ldr r1, [r7, #48] @ 0x30
  41989. 80122a6: 6b7a ldr r2, [r7, #52] @ 0x34
  41990. 80122a8: e841 2300 strex r3, r2, [r1]
  41991. 80122ac: 62fb str r3, [r7, #44] @ 0x2c
  41992. return(result);
  41993. 80122ae: 6afb ldr r3, [r7, #44] @ 0x2c
  41994. 80122b0: 2b00 cmp r3, #0
  41995. 80122b2: d1e6 bne.n 8012282 <UART_Start_Receive_IT+0x1be>
  41996. 80122b4: e018 b.n 80122e8 <UART_Start_Receive_IT+0x224>
  41997. }
  41998. else
  41999. {
  42000. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_RXNEIE_RXFNEIE);
  42001. 80122b6: 68fb ldr r3, [r7, #12]
  42002. 80122b8: 681b ldr r3, [r3, #0]
  42003. 80122ba: 617b str r3, [r7, #20]
  42004. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  42005. 80122bc: 697b ldr r3, [r7, #20]
  42006. 80122be: e853 3f00 ldrex r3, [r3]
  42007. 80122c2: 613b str r3, [r7, #16]
  42008. return(result);
  42009. 80122c4: 693b ldr r3, [r7, #16]
  42010. 80122c6: f043 0320 orr.w r3, r3, #32
  42011. 80122ca: 67bb str r3, [r7, #120] @ 0x78
  42012. 80122cc: 68fb ldr r3, [r7, #12]
  42013. 80122ce: 681b ldr r3, [r3, #0]
  42014. 80122d0: 461a mov r2, r3
  42015. 80122d2: 6fbb ldr r3, [r7, #120] @ 0x78
  42016. 80122d4: 623b str r3, [r7, #32]
  42017. 80122d6: 61fa str r2, [r7, #28]
  42018. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  42019. 80122d8: 69f9 ldr r1, [r7, #28]
  42020. 80122da: 6a3a ldr r2, [r7, #32]
  42021. 80122dc: e841 2300 strex r3, r2, [r1]
  42022. 80122e0: 61bb str r3, [r7, #24]
  42023. return(result);
  42024. 80122e2: 69bb ldr r3, [r7, #24]
  42025. 80122e4: 2b00 cmp r3, #0
  42026. 80122e6: d1e6 bne.n 80122b6 <UART_Start_Receive_IT+0x1f2>
  42027. }
  42028. }
  42029. return HAL_OK;
  42030. 80122e8: 2300 movs r3, #0
  42031. }
  42032. 80122ea: 4618 mov r0, r3
  42033. 80122ec: 378c adds r7, #140 @ 0x8c
  42034. 80122ee: 46bd mov sp, r7
  42035. 80122f0: f85d 7b04 ldr.w r7, [sp], #4
  42036. 80122f4: 4770 bx lr
  42037. 80122f6: bf00 nop
  42038. 80122f8: 08012e6d .word 0x08012e6d
  42039. 80122fc: 08012b0d .word 0x08012b0d
  42040. 8012300: 08012955 .word 0x08012955
  42041. 8012304: 0801279d .word 0x0801279d
  42042. 08012308 <UART_EndRxTransfer>:
  42043. * @brief End ongoing Rx transfer on UART peripheral (following error detection or Reception completion).
  42044. * @param huart UART handle.
  42045. * @retval None
  42046. */
  42047. static void UART_EndRxTransfer(UART_HandleTypeDef *huart)
  42048. {
  42049. 8012308: b480 push {r7}
  42050. 801230a: b095 sub sp, #84 @ 0x54
  42051. 801230c: af00 add r7, sp, #0
  42052. 801230e: 6078 str r0, [r7, #4]
  42053. /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */
  42054. ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE));
  42055. 8012310: 687b ldr r3, [r7, #4]
  42056. 8012312: 681b ldr r3, [r3, #0]
  42057. 8012314: 637b str r3, [r7, #52] @ 0x34
  42058. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  42059. 8012316: 6b7b ldr r3, [r7, #52] @ 0x34
  42060. 8012318: e853 3f00 ldrex r3, [r3]
  42061. 801231c: 633b str r3, [r7, #48] @ 0x30
  42062. return(result);
  42063. 801231e: 6b3b ldr r3, [r7, #48] @ 0x30
  42064. 8012320: f423 7390 bic.w r3, r3, #288 @ 0x120
  42065. 8012324: 64fb str r3, [r7, #76] @ 0x4c
  42066. 8012326: 687b ldr r3, [r7, #4]
  42067. 8012328: 681b ldr r3, [r3, #0]
  42068. 801232a: 461a mov r2, r3
  42069. 801232c: 6cfb ldr r3, [r7, #76] @ 0x4c
  42070. 801232e: 643b str r3, [r7, #64] @ 0x40
  42071. 8012330: 63fa str r2, [r7, #60] @ 0x3c
  42072. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  42073. 8012332: 6bf9 ldr r1, [r7, #60] @ 0x3c
  42074. 8012334: 6c3a ldr r2, [r7, #64] @ 0x40
  42075. 8012336: e841 2300 strex r3, r2, [r1]
  42076. 801233a: 63bb str r3, [r7, #56] @ 0x38
  42077. return(result);
  42078. 801233c: 6bbb ldr r3, [r7, #56] @ 0x38
  42079. 801233e: 2b00 cmp r3, #0
  42080. 8012340: d1e6 bne.n 8012310 <UART_EndRxTransfer+0x8>
  42081. ATOMIC_CLEAR_BIT(huart->Instance->CR3, (USART_CR3_EIE | USART_CR3_RXFTIE));
  42082. 8012342: 687b ldr r3, [r7, #4]
  42083. 8012344: 681b ldr r3, [r3, #0]
  42084. 8012346: 3308 adds r3, #8
  42085. 8012348: 623b str r3, [r7, #32]
  42086. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  42087. 801234a: 6a3b ldr r3, [r7, #32]
  42088. 801234c: e853 3f00 ldrex r3, [r3]
  42089. 8012350: 61fb str r3, [r7, #28]
  42090. return(result);
  42091. 8012352: 69fa ldr r2, [r7, #28]
  42092. 8012354: 4b1e ldr r3, [pc, #120] @ (80123d0 <UART_EndRxTransfer+0xc8>)
  42093. 8012356: 4013 ands r3, r2
  42094. 8012358: 64bb str r3, [r7, #72] @ 0x48
  42095. 801235a: 687b ldr r3, [r7, #4]
  42096. 801235c: 681b ldr r3, [r3, #0]
  42097. 801235e: 3308 adds r3, #8
  42098. 8012360: 6cba ldr r2, [r7, #72] @ 0x48
  42099. 8012362: 62fa str r2, [r7, #44] @ 0x2c
  42100. 8012364: 62bb str r3, [r7, #40] @ 0x28
  42101. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  42102. 8012366: 6ab9 ldr r1, [r7, #40] @ 0x28
  42103. 8012368: 6afa ldr r2, [r7, #44] @ 0x2c
  42104. 801236a: e841 2300 strex r3, r2, [r1]
  42105. 801236e: 627b str r3, [r7, #36] @ 0x24
  42106. return(result);
  42107. 8012370: 6a7b ldr r3, [r7, #36] @ 0x24
  42108. 8012372: 2b00 cmp r3, #0
  42109. 8012374: d1e5 bne.n 8012342 <UART_EndRxTransfer+0x3a>
  42110. /* In case of reception waiting for IDLE event, disable also the IDLE IE interrupt source */
  42111. if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
  42112. 8012376: 687b ldr r3, [r7, #4]
  42113. 8012378: 6edb ldr r3, [r3, #108] @ 0x6c
  42114. 801237a: 2b01 cmp r3, #1
  42115. 801237c: d118 bne.n 80123b0 <UART_EndRxTransfer+0xa8>
  42116. {
  42117. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  42118. 801237e: 687b ldr r3, [r7, #4]
  42119. 8012380: 681b ldr r3, [r3, #0]
  42120. 8012382: 60fb str r3, [r7, #12]
  42121. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  42122. 8012384: 68fb ldr r3, [r7, #12]
  42123. 8012386: e853 3f00 ldrex r3, [r3]
  42124. 801238a: 60bb str r3, [r7, #8]
  42125. return(result);
  42126. 801238c: 68bb ldr r3, [r7, #8]
  42127. 801238e: f023 0310 bic.w r3, r3, #16
  42128. 8012392: 647b str r3, [r7, #68] @ 0x44
  42129. 8012394: 687b ldr r3, [r7, #4]
  42130. 8012396: 681b ldr r3, [r3, #0]
  42131. 8012398: 461a mov r2, r3
  42132. 801239a: 6c7b ldr r3, [r7, #68] @ 0x44
  42133. 801239c: 61bb str r3, [r7, #24]
  42134. 801239e: 617a str r2, [r7, #20]
  42135. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  42136. 80123a0: 6979 ldr r1, [r7, #20]
  42137. 80123a2: 69ba ldr r2, [r7, #24]
  42138. 80123a4: e841 2300 strex r3, r2, [r1]
  42139. 80123a8: 613b str r3, [r7, #16]
  42140. return(result);
  42141. 80123aa: 693b ldr r3, [r7, #16]
  42142. 80123ac: 2b00 cmp r3, #0
  42143. 80123ae: d1e6 bne.n 801237e <UART_EndRxTransfer+0x76>
  42144. }
  42145. /* At end of Rx process, restore huart->RxState to Ready */
  42146. huart->RxState = HAL_UART_STATE_READY;
  42147. 80123b0: 687b ldr r3, [r7, #4]
  42148. 80123b2: 2220 movs r2, #32
  42149. 80123b4: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  42150. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  42151. 80123b8: 687b ldr r3, [r7, #4]
  42152. 80123ba: 2200 movs r2, #0
  42153. 80123bc: 66da str r2, [r3, #108] @ 0x6c
  42154. /* Reset RxIsr function pointer */
  42155. huart->RxISR = NULL;
  42156. 80123be: 687b ldr r3, [r7, #4]
  42157. 80123c0: 2200 movs r2, #0
  42158. 80123c2: 675a str r2, [r3, #116] @ 0x74
  42159. }
  42160. 80123c4: bf00 nop
  42161. 80123c6: 3754 adds r7, #84 @ 0x54
  42162. 80123c8: 46bd mov sp, r7
  42163. 80123ca: f85d 7b04 ldr.w r7, [sp], #4
  42164. 80123ce: 4770 bx lr
  42165. 80123d0: effffffe .word 0xeffffffe
  42166. 080123d4 <UART_DMAAbortOnError>:
  42167. * (To be called at end of DMA Abort procedure following error occurrence).
  42168. * @param hdma DMA handle.
  42169. * @retval None
  42170. */
  42171. static void UART_DMAAbortOnError(DMA_HandleTypeDef *hdma)
  42172. {
  42173. 80123d4: b580 push {r7, lr}
  42174. 80123d6: b084 sub sp, #16
  42175. 80123d8: af00 add r7, sp, #0
  42176. 80123da: 6078 str r0, [r7, #4]
  42177. UART_HandleTypeDef *huart = (UART_HandleTypeDef *)(hdma->Parent);
  42178. 80123dc: 687b ldr r3, [r7, #4]
  42179. 80123de: 6b9b ldr r3, [r3, #56] @ 0x38
  42180. 80123e0: 60fb str r3, [r7, #12]
  42181. huart->RxXferCount = 0U;
  42182. 80123e2: 68fb ldr r3, [r7, #12]
  42183. 80123e4: 2200 movs r2, #0
  42184. 80123e6: f8a3 205e strh.w r2, [r3, #94] @ 0x5e
  42185. huart->TxXferCount = 0U;
  42186. 80123ea: 68fb ldr r3, [r7, #12]
  42187. 80123ec: 2200 movs r2, #0
  42188. 80123ee: f8a3 2056 strh.w r2, [r3, #86] @ 0x56
  42189. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  42190. /*Call registered error callback*/
  42191. huart->ErrorCallback(huart);
  42192. #else
  42193. /*Call legacy weak error callback*/
  42194. HAL_UART_ErrorCallback(huart);
  42195. 80123f2: 68f8 ldr r0, [r7, #12]
  42196. 80123f4: f7fe ff3a bl 801126c <HAL_UART_ErrorCallback>
  42197. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  42198. }
  42199. 80123f8: bf00 nop
  42200. 80123fa: 3710 adds r7, #16
  42201. 80123fc: 46bd mov sp, r7
  42202. 80123fe: bd80 pop {r7, pc}
  42203. 08012400 <UART_TxISR_8BIT>:
  42204. * interruptions have been enabled by HAL_UART_Transmit_IT().
  42205. * @param huart UART handle.
  42206. * @retval None
  42207. */
  42208. static void UART_TxISR_8BIT(UART_HandleTypeDef *huart)
  42209. {
  42210. 8012400: b480 push {r7}
  42211. 8012402: b08f sub sp, #60 @ 0x3c
  42212. 8012404: af00 add r7, sp, #0
  42213. 8012406: 6078 str r0, [r7, #4]
  42214. /* Check that a Tx process is ongoing */
  42215. if (huart->gState == HAL_UART_STATE_BUSY_TX)
  42216. 8012408: 687b ldr r3, [r7, #4]
  42217. 801240a: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  42218. 801240e: 2b21 cmp r3, #33 @ 0x21
  42219. 8012410: d14c bne.n 80124ac <UART_TxISR_8BIT+0xac>
  42220. {
  42221. if (huart->TxXferCount == 0U)
  42222. 8012412: 687b ldr r3, [r7, #4]
  42223. 8012414: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  42224. 8012418: b29b uxth r3, r3
  42225. 801241a: 2b00 cmp r3, #0
  42226. 801241c: d132 bne.n 8012484 <UART_TxISR_8BIT+0x84>
  42227. {
  42228. /* Disable the UART Transmit Data Register Empty Interrupt */
  42229. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_TXEIE_TXFNFIE);
  42230. 801241e: 687b ldr r3, [r7, #4]
  42231. 8012420: 681b ldr r3, [r3, #0]
  42232. 8012422: 623b str r3, [r7, #32]
  42233. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  42234. 8012424: 6a3b ldr r3, [r7, #32]
  42235. 8012426: e853 3f00 ldrex r3, [r3]
  42236. 801242a: 61fb str r3, [r7, #28]
  42237. return(result);
  42238. 801242c: 69fb ldr r3, [r7, #28]
  42239. 801242e: f023 0380 bic.w r3, r3, #128 @ 0x80
  42240. 8012432: 637b str r3, [r7, #52] @ 0x34
  42241. 8012434: 687b ldr r3, [r7, #4]
  42242. 8012436: 681b ldr r3, [r3, #0]
  42243. 8012438: 461a mov r2, r3
  42244. 801243a: 6b7b ldr r3, [r7, #52] @ 0x34
  42245. 801243c: 62fb str r3, [r7, #44] @ 0x2c
  42246. 801243e: 62ba str r2, [r7, #40] @ 0x28
  42247. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  42248. 8012440: 6ab9 ldr r1, [r7, #40] @ 0x28
  42249. 8012442: 6afa ldr r2, [r7, #44] @ 0x2c
  42250. 8012444: e841 2300 strex r3, r2, [r1]
  42251. 8012448: 627b str r3, [r7, #36] @ 0x24
  42252. return(result);
  42253. 801244a: 6a7b ldr r3, [r7, #36] @ 0x24
  42254. 801244c: 2b00 cmp r3, #0
  42255. 801244e: d1e6 bne.n 801241e <UART_TxISR_8BIT+0x1e>
  42256. /* Enable the UART Transmit Complete Interrupt */
  42257. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_TCIE);
  42258. 8012450: 687b ldr r3, [r7, #4]
  42259. 8012452: 681b ldr r3, [r3, #0]
  42260. 8012454: 60fb str r3, [r7, #12]
  42261. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  42262. 8012456: 68fb ldr r3, [r7, #12]
  42263. 8012458: e853 3f00 ldrex r3, [r3]
  42264. 801245c: 60bb str r3, [r7, #8]
  42265. return(result);
  42266. 801245e: 68bb ldr r3, [r7, #8]
  42267. 8012460: f043 0340 orr.w r3, r3, #64 @ 0x40
  42268. 8012464: 633b str r3, [r7, #48] @ 0x30
  42269. 8012466: 687b ldr r3, [r7, #4]
  42270. 8012468: 681b ldr r3, [r3, #0]
  42271. 801246a: 461a mov r2, r3
  42272. 801246c: 6b3b ldr r3, [r7, #48] @ 0x30
  42273. 801246e: 61bb str r3, [r7, #24]
  42274. 8012470: 617a str r2, [r7, #20]
  42275. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  42276. 8012472: 6979 ldr r1, [r7, #20]
  42277. 8012474: 69ba ldr r2, [r7, #24]
  42278. 8012476: e841 2300 strex r3, r2, [r1]
  42279. 801247a: 613b str r3, [r7, #16]
  42280. return(result);
  42281. 801247c: 693b ldr r3, [r7, #16]
  42282. 801247e: 2b00 cmp r3, #0
  42283. 8012480: d1e6 bne.n 8012450 <UART_TxISR_8BIT+0x50>
  42284. huart->Instance->TDR = (uint8_t)(*huart->pTxBuffPtr & (uint8_t)0xFF);
  42285. huart->pTxBuffPtr++;
  42286. huart->TxXferCount--;
  42287. }
  42288. }
  42289. }
  42290. 8012482: e013 b.n 80124ac <UART_TxISR_8BIT+0xac>
  42291. huart->Instance->TDR = (uint8_t)(*huart->pTxBuffPtr & (uint8_t)0xFF);
  42292. 8012484: 687b ldr r3, [r7, #4]
  42293. 8012486: 6d1b ldr r3, [r3, #80] @ 0x50
  42294. 8012488: 781a ldrb r2, [r3, #0]
  42295. 801248a: 687b ldr r3, [r7, #4]
  42296. 801248c: 681b ldr r3, [r3, #0]
  42297. 801248e: 629a str r2, [r3, #40] @ 0x28
  42298. huart->pTxBuffPtr++;
  42299. 8012490: 687b ldr r3, [r7, #4]
  42300. 8012492: 6d1b ldr r3, [r3, #80] @ 0x50
  42301. 8012494: 1c5a adds r2, r3, #1
  42302. 8012496: 687b ldr r3, [r7, #4]
  42303. 8012498: 651a str r2, [r3, #80] @ 0x50
  42304. huart->TxXferCount--;
  42305. 801249a: 687b ldr r3, [r7, #4]
  42306. 801249c: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  42307. 80124a0: b29b uxth r3, r3
  42308. 80124a2: 3b01 subs r3, #1
  42309. 80124a4: b29a uxth r2, r3
  42310. 80124a6: 687b ldr r3, [r7, #4]
  42311. 80124a8: f8a3 2056 strh.w r2, [r3, #86] @ 0x56
  42312. }
  42313. 80124ac: bf00 nop
  42314. 80124ae: 373c adds r7, #60 @ 0x3c
  42315. 80124b0: 46bd mov sp, r7
  42316. 80124b2: f85d 7b04 ldr.w r7, [sp], #4
  42317. 80124b6: 4770 bx lr
  42318. 080124b8 <UART_TxISR_16BIT>:
  42319. * interruptions have been enabled by HAL_UART_Transmit_IT().
  42320. * @param huart UART handle.
  42321. * @retval None
  42322. */
  42323. static void UART_TxISR_16BIT(UART_HandleTypeDef *huart)
  42324. {
  42325. 80124b8: b480 push {r7}
  42326. 80124ba: b091 sub sp, #68 @ 0x44
  42327. 80124bc: af00 add r7, sp, #0
  42328. 80124be: 6078 str r0, [r7, #4]
  42329. const uint16_t *tmp;
  42330. /* Check that a Tx process is ongoing */
  42331. if (huart->gState == HAL_UART_STATE_BUSY_TX)
  42332. 80124c0: 687b ldr r3, [r7, #4]
  42333. 80124c2: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  42334. 80124c6: 2b21 cmp r3, #33 @ 0x21
  42335. 80124c8: d151 bne.n 801256e <UART_TxISR_16BIT+0xb6>
  42336. {
  42337. if (huart->TxXferCount == 0U)
  42338. 80124ca: 687b ldr r3, [r7, #4]
  42339. 80124cc: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  42340. 80124d0: b29b uxth r3, r3
  42341. 80124d2: 2b00 cmp r3, #0
  42342. 80124d4: d132 bne.n 801253c <UART_TxISR_16BIT+0x84>
  42343. {
  42344. /* Disable the UART Transmit Data Register Empty Interrupt */
  42345. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_TXEIE_TXFNFIE);
  42346. 80124d6: 687b ldr r3, [r7, #4]
  42347. 80124d8: 681b ldr r3, [r3, #0]
  42348. 80124da: 627b str r3, [r7, #36] @ 0x24
  42349. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  42350. 80124dc: 6a7b ldr r3, [r7, #36] @ 0x24
  42351. 80124de: e853 3f00 ldrex r3, [r3]
  42352. 80124e2: 623b str r3, [r7, #32]
  42353. return(result);
  42354. 80124e4: 6a3b ldr r3, [r7, #32]
  42355. 80124e6: f023 0380 bic.w r3, r3, #128 @ 0x80
  42356. 80124ea: 63bb str r3, [r7, #56] @ 0x38
  42357. 80124ec: 687b ldr r3, [r7, #4]
  42358. 80124ee: 681b ldr r3, [r3, #0]
  42359. 80124f0: 461a mov r2, r3
  42360. 80124f2: 6bbb ldr r3, [r7, #56] @ 0x38
  42361. 80124f4: 633b str r3, [r7, #48] @ 0x30
  42362. 80124f6: 62fa str r2, [r7, #44] @ 0x2c
  42363. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  42364. 80124f8: 6af9 ldr r1, [r7, #44] @ 0x2c
  42365. 80124fa: 6b3a ldr r2, [r7, #48] @ 0x30
  42366. 80124fc: e841 2300 strex r3, r2, [r1]
  42367. 8012500: 62bb str r3, [r7, #40] @ 0x28
  42368. return(result);
  42369. 8012502: 6abb ldr r3, [r7, #40] @ 0x28
  42370. 8012504: 2b00 cmp r3, #0
  42371. 8012506: d1e6 bne.n 80124d6 <UART_TxISR_16BIT+0x1e>
  42372. /* Enable the UART Transmit Complete Interrupt */
  42373. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_TCIE);
  42374. 8012508: 687b ldr r3, [r7, #4]
  42375. 801250a: 681b ldr r3, [r3, #0]
  42376. 801250c: 613b str r3, [r7, #16]
  42377. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  42378. 801250e: 693b ldr r3, [r7, #16]
  42379. 8012510: e853 3f00 ldrex r3, [r3]
  42380. 8012514: 60fb str r3, [r7, #12]
  42381. return(result);
  42382. 8012516: 68fb ldr r3, [r7, #12]
  42383. 8012518: f043 0340 orr.w r3, r3, #64 @ 0x40
  42384. 801251c: 637b str r3, [r7, #52] @ 0x34
  42385. 801251e: 687b ldr r3, [r7, #4]
  42386. 8012520: 681b ldr r3, [r3, #0]
  42387. 8012522: 461a mov r2, r3
  42388. 8012524: 6b7b ldr r3, [r7, #52] @ 0x34
  42389. 8012526: 61fb str r3, [r7, #28]
  42390. 8012528: 61ba str r2, [r7, #24]
  42391. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  42392. 801252a: 69b9 ldr r1, [r7, #24]
  42393. 801252c: 69fa ldr r2, [r7, #28]
  42394. 801252e: e841 2300 strex r3, r2, [r1]
  42395. 8012532: 617b str r3, [r7, #20]
  42396. return(result);
  42397. 8012534: 697b ldr r3, [r7, #20]
  42398. 8012536: 2b00 cmp r3, #0
  42399. 8012538: d1e6 bne.n 8012508 <UART_TxISR_16BIT+0x50>
  42400. huart->Instance->TDR = (((uint32_t)(*tmp)) & 0x01FFUL);
  42401. huart->pTxBuffPtr += 2U;
  42402. huart->TxXferCount--;
  42403. }
  42404. }
  42405. }
  42406. 801253a: e018 b.n 801256e <UART_TxISR_16BIT+0xb6>
  42407. tmp = (const uint16_t *) huart->pTxBuffPtr;
  42408. 801253c: 687b ldr r3, [r7, #4]
  42409. 801253e: 6d1b ldr r3, [r3, #80] @ 0x50
  42410. 8012540: 63fb str r3, [r7, #60] @ 0x3c
  42411. huart->Instance->TDR = (((uint32_t)(*tmp)) & 0x01FFUL);
  42412. 8012542: 6bfb ldr r3, [r7, #60] @ 0x3c
  42413. 8012544: 881b ldrh r3, [r3, #0]
  42414. 8012546: 461a mov r2, r3
  42415. 8012548: 687b ldr r3, [r7, #4]
  42416. 801254a: 681b ldr r3, [r3, #0]
  42417. 801254c: f3c2 0208 ubfx r2, r2, #0, #9
  42418. 8012550: 629a str r2, [r3, #40] @ 0x28
  42419. huart->pTxBuffPtr += 2U;
  42420. 8012552: 687b ldr r3, [r7, #4]
  42421. 8012554: 6d1b ldr r3, [r3, #80] @ 0x50
  42422. 8012556: 1c9a adds r2, r3, #2
  42423. 8012558: 687b ldr r3, [r7, #4]
  42424. 801255a: 651a str r2, [r3, #80] @ 0x50
  42425. huart->TxXferCount--;
  42426. 801255c: 687b ldr r3, [r7, #4]
  42427. 801255e: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  42428. 8012562: b29b uxth r3, r3
  42429. 8012564: 3b01 subs r3, #1
  42430. 8012566: b29a uxth r2, r3
  42431. 8012568: 687b ldr r3, [r7, #4]
  42432. 801256a: f8a3 2056 strh.w r2, [r3, #86] @ 0x56
  42433. }
  42434. 801256e: bf00 nop
  42435. 8012570: 3744 adds r7, #68 @ 0x44
  42436. 8012572: 46bd mov sp, r7
  42437. 8012574: f85d 7b04 ldr.w r7, [sp], #4
  42438. 8012578: 4770 bx lr
  42439. 0801257a <UART_TxISR_8BIT_FIFOEN>:
  42440. * interruptions have been enabled by HAL_UART_Transmit_IT().
  42441. * @param huart UART handle.
  42442. * @retval None
  42443. */
  42444. static void UART_TxISR_8BIT_FIFOEN(UART_HandleTypeDef *huart)
  42445. {
  42446. 801257a: b480 push {r7}
  42447. 801257c: b091 sub sp, #68 @ 0x44
  42448. 801257e: af00 add r7, sp, #0
  42449. 8012580: 6078 str r0, [r7, #4]
  42450. uint16_t nb_tx_data;
  42451. /* Check that a Tx process is ongoing */
  42452. if (huart->gState == HAL_UART_STATE_BUSY_TX)
  42453. 8012582: 687b ldr r3, [r7, #4]
  42454. 8012584: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  42455. 8012588: 2b21 cmp r3, #33 @ 0x21
  42456. 801258a: d160 bne.n 801264e <UART_TxISR_8BIT_FIFOEN+0xd4>
  42457. {
  42458. for (nb_tx_data = huart->NbTxDataToProcess ; nb_tx_data > 0U ; nb_tx_data--)
  42459. 801258c: 687b ldr r3, [r7, #4]
  42460. 801258e: f8b3 306a ldrh.w r3, [r3, #106] @ 0x6a
  42461. 8012592: 87fb strh r3, [r7, #62] @ 0x3e
  42462. 8012594: e057 b.n 8012646 <UART_TxISR_8BIT_FIFOEN+0xcc>
  42463. {
  42464. if (huart->TxXferCount == 0U)
  42465. 8012596: 687b ldr r3, [r7, #4]
  42466. 8012598: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  42467. 801259c: b29b uxth r3, r3
  42468. 801259e: 2b00 cmp r3, #0
  42469. 80125a0: d133 bne.n 801260a <UART_TxISR_8BIT_FIFOEN+0x90>
  42470. {
  42471. /* Disable the TX FIFO threshold interrupt */
  42472. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_TXFTIE);
  42473. 80125a2: 687b ldr r3, [r7, #4]
  42474. 80125a4: 681b ldr r3, [r3, #0]
  42475. 80125a6: 3308 adds r3, #8
  42476. 80125a8: 627b str r3, [r7, #36] @ 0x24
  42477. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  42478. 80125aa: 6a7b ldr r3, [r7, #36] @ 0x24
  42479. 80125ac: e853 3f00 ldrex r3, [r3]
  42480. 80125b0: 623b str r3, [r7, #32]
  42481. return(result);
  42482. 80125b2: 6a3b ldr r3, [r7, #32]
  42483. 80125b4: f423 0300 bic.w r3, r3, #8388608 @ 0x800000
  42484. 80125b8: 63bb str r3, [r7, #56] @ 0x38
  42485. 80125ba: 687b ldr r3, [r7, #4]
  42486. 80125bc: 681b ldr r3, [r3, #0]
  42487. 80125be: 3308 adds r3, #8
  42488. 80125c0: 6bba ldr r2, [r7, #56] @ 0x38
  42489. 80125c2: 633a str r2, [r7, #48] @ 0x30
  42490. 80125c4: 62fb str r3, [r7, #44] @ 0x2c
  42491. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  42492. 80125c6: 6af9 ldr r1, [r7, #44] @ 0x2c
  42493. 80125c8: 6b3a ldr r2, [r7, #48] @ 0x30
  42494. 80125ca: e841 2300 strex r3, r2, [r1]
  42495. 80125ce: 62bb str r3, [r7, #40] @ 0x28
  42496. return(result);
  42497. 80125d0: 6abb ldr r3, [r7, #40] @ 0x28
  42498. 80125d2: 2b00 cmp r3, #0
  42499. 80125d4: d1e5 bne.n 80125a2 <UART_TxISR_8BIT_FIFOEN+0x28>
  42500. /* Enable the UART Transmit Complete Interrupt */
  42501. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_TCIE);
  42502. 80125d6: 687b ldr r3, [r7, #4]
  42503. 80125d8: 681b ldr r3, [r3, #0]
  42504. 80125da: 613b str r3, [r7, #16]
  42505. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  42506. 80125dc: 693b ldr r3, [r7, #16]
  42507. 80125de: e853 3f00 ldrex r3, [r3]
  42508. 80125e2: 60fb str r3, [r7, #12]
  42509. return(result);
  42510. 80125e4: 68fb ldr r3, [r7, #12]
  42511. 80125e6: f043 0340 orr.w r3, r3, #64 @ 0x40
  42512. 80125ea: 637b str r3, [r7, #52] @ 0x34
  42513. 80125ec: 687b ldr r3, [r7, #4]
  42514. 80125ee: 681b ldr r3, [r3, #0]
  42515. 80125f0: 461a mov r2, r3
  42516. 80125f2: 6b7b ldr r3, [r7, #52] @ 0x34
  42517. 80125f4: 61fb str r3, [r7, #28]
  42518. 80125f6: 61ba str r2, [r7, #24]
  42519. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  42520. 80125f8: 69b9 ldr r1, [r7, #24]
  42521. 80125fa: 69fa ldr r2, [r7, #28]
  42522. 80125fc: e841 2300 strex r3, r2, [r1]
  42523. 8012600: 617b str r3, [r7, #20]
  42524. return(result);
  42525. 8012602: 697b ldr r3, [r7, #20]
  42526. 8012604: 2b00 cmp r3, #0
  42527. 8012606: d1e6 bne.n 80125d6 <UART_TxISR_8BIT_FIFOEN+0x5c>
  42528. break; /* force exit loop */
  42529. 8012608: e021 b.n 801264e <UART_TxISR_8BIT_FIFOEN+0xd4>
  42530. }
  42531. else if (READ_BIT(huart->Instance->ISR, USART_ISR_TXE_TXFNF) != 0U)
  42532. 801260a: 687b ldr r3, [r7, #4]
  42533. 801260c: 681b ldr r3, [r3, #0]
  42534. 801260e: 69db ldr r3, [r3, #28]
  42535. 8012610: f003 0380 and.w r3, r3, #128 @ 0x80
  42536. 8012614: 2b00 cmp r3, #0
  42537. 8012616: d013 beq.n 8012640 <UART_TxISR_8BIT_FIFOEN+0xc6>
  42538. {
  42539. huart->Instance->TDR = (uint8_t)(*huart->pTxBuffPtr & (uint8_t)0xFF);
  42540. 8012618: 687b ldr r3, [r7, #4]
  42541. 801261a: 6d1b ldr r3, [r3, #80] @ 0x50
  42542. 801261c: 781a ldrb r2, [r3, #0]
  42543. 801261e: 687b ldr r3, [r7, #4]
  42544. 8012620: 681b ldr r3, [r3, #0]
  42545. 8012622: 629a str r2, [r3, #40] @ 0x28
  42546. huart->pTxBuffPtr++;
  42547. 8012624: 687b ldr r3, [r7, #4]
  42548. 8012626: 6d1b ldr r3, [r3, #80] @ 0x50
  42549. 8012628: 1c5a adds r2, r3, #1
  42550. 801262a: 687b ldr r3, [r7, #4]
  42551. 801262c: 651a str r2, [r3, #80] @ 0x50
  42552. huart->TxXferCount--;
  42553. 801262e: 687b ldr r3, [r7, #4]
  42554. 8012630: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  42555. 8012634: b29b uxth r3, r3
  42556. 8012636: 3b01 subs r3, #1
  42557. 8012638: b29a uxth r2, r3
  42558. 801263a: 687b ldr r3, [r7, #4]
  42559. 801263c: f8a3 2056 strh.w r2, [r3, #86] @ 0x56
  42560. for (nb_tx_data = huart->NbTxDataToProcess ; nb_tx_data > 0U ; nb_tx_data--)
  42561. 8012640: 8ffb ldrh r3, [r7, #62] @ 0x3e
  42562. 8012642: 3b01 subs r3, #1
  42563. 8012644: 87fb strh r3, [r7, #62] @ 0x3e
  42564. 8012646: 8ffb ldrh r3, [r7, #62] @ 0x3e
  42565. 8012648: 2b00 cmp r3, #0
  42566. 801264a: d1a4 bne.n 8012596 <UART_TxISR_8BIT_FIFOEN+0x1c>
  42567. {
  42568. /* Nothing to do */
  42569. }
  42570. }
  42571. }
  42572. }
  42573. 801264c: e7ff b.n 801264e <UART_TxISR_8BIT_FIFOEN+0xd4>
  42574. 801264e: bf00 nop
  42575. 8012650: 3744 adds r7, #68 @ 0x44
  42576. 8012652: 46bd mov sp, r7
  42577. 8012654: f85d 7b04 ldr.w r7, [sp], #4
  42578. 8012658: 4770 bx lr
  42579. 0801265a <UART_TxISR_16BIT_FIFOEN>:
  42580. * interruptions have been enabled by HAL_UART_Transmit_IT().
  42581. * @param huart UART handle.
  42582. * @retval None
  42583. */
  42584. static void UART_TxISR_16BIT_FIFOEN(UART_HandleTypeDef *huart)
  42585. {
  42586. 801265a: b480 push {r7}
  42587. 801265c: b091 sub sp, #68 @ 0x44
  42588. 801265e: af00 add r7, sp, #0
  42589. 8012660: 6078 str r0, [r7, #4]
  42590. const uint16_t *tmp;
  42591. uint16_t nb_tx_data;
  42592. /* Check that a Tx process is ongoing */
  42593. if (huart->gState == HAL_UART_STATE_BUSY_TX)
  42594. 8012662: 687b ldr r3, [r7, #4]
  42595. 8012664: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  42596. 8012668: 2b21 cmp r3, #33 @ 0x21
  42597. 801266a: d165 bne.n 8012738 <UART_TxISR_16BIT_FIFOEN+0xde>
  42598. {
  42599. for (nb_tx_data = huart->NbTxDataToProcess ; nb_tx_data > 0U ; nb_tx_data--)
  42600. 801266c: 687b ldr r3, [r7, #4]
  42601. 801266e: f8b3 306a ldrh.w r3, [r3, #106] @ 0x6a
  42602. 8012672: 87fb strh r3, [r7, #62] @ 0x3e
  42603. 8012674: e05c b.n 8012730 <UART_TxISR_16BIT_FIFOEN+0xd6>
  42604. {
  42605. if (huart->TxXferCount == 0U)
  42606. 8012676: 687b ldr r3, [r7, #4]
  42607. 8012678: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  42608. 801267c: b29b uxth r3, r3
  42609. 801267e: 2b00 cmp r3, #0
  42610. 8012680: d133 bne.n 80126ea <UART_TxISR_16BIT_FIFOEN+0x90>
  42611. {
  42612. /* Disable the TX FIFO threshold interrupt */
  42613. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_TXFTIE);
  42614. 8012682: 687b ldr r3, [r7, #4]
  42615. 8012684: 681b ldr r3, [r3, #0]
  42616. 8012686: 3308 adds r3, #8
  42617. 8012688: 623b str r3, [r7, #32]
  42618. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  42619. 801268a: 6a3b ldr r3, [r7, #32]
  42620. 801268c: e853 3f00 ldrex r3, [r3]
  42621. 8012690: 61fb str r3, [r7, #28]
  42622. return(result);
  42623. 8012692: 69fb ldr r3, [r7, #28]
  42624. 8012694: f423 0300 bic.w r3, r3, #8388608 @ 0x800000
  42625. 8012698: 637b str r3, [r7, #52] @ 0x34
  42626. 801269a: 687b ldr r3, [r7, #4]
  42627. 801269c: 681b ldr r3, [r3, #0]
  42628. 801269e: 3308 adds r3, #8
  42629. 80126a0: 6b7a ldr r2, [r7, #52] @ 0x34
  42630. 80126a2: 62fa str r2, [r7, #44] @ 0x2c
  42631. 80126a4: 62bb str r3, [r7, #40] @ 0x28
  42632. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  42633. 80126a6: 6ab9 ldr r1, [r7, #40] @ 0x28
  42634. 80126a8: 6afa ldr r2, [r7, #44] @ 0x2c
  42635. 80126aa: e841 2300 strex r3, r2, [r1]
  42636. 80126ae: 627b str r3, [r7, #36] @ 0x24
  42637. return(result);
  42638. 80126b0: 6a7b ldr r3, [r7, #36] @ 0x24
  42639. 80126b2: 2b00 cmp r3, #0
  42640. 80126b4: d1e5 bne.n 8012682 <UART_TxISR_16BIT_FIFOEN+0x28>
  42641. /* Enable the UART Transmit Complete Interrupt */
  42642. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_TCIE);
  42643. 80126b6: 687b ldr r3, [r7, #4]
  42644. 80126b8: 681b ldr r3, [r3, #0]
  42645. 80126ba: 60fb str r3, [r7, #12]
  42646. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  42647. 80126bc: 68fb ldr r3, [r7, #12]
  42648. 80126be: e853 3f00 ldrex r3, [r3]
  42649. 80126c2: 60bb str r3, [r7, #8]
  42650. return(result);
  42651. 80126c4: 68bb ldr r3, [r7, #8]
  42652. 80126c6: f043 0340 orr.w r3, r3, #64 @ 0x40
  42653. 80126ca: 633b str r3, [r7, #48] @ 0x30
  42654. 80126cc: 687b ldr r3, [r7, #4]
  42655. 80126ce: 681b ldr r3, [r3, #0]
  42656. 80126d0: 461a mov r2, r3
  42657. 80126d2: 6b3b ldr r3, [r7, #48] @ 0x30
  42658. 80126d4: 61bb str r3, [r7, #24]
  42659. 80126d6: 617a str r2, [r7, #20]
  42660. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  42661. 80126d8: 6979 ldr r1, [r7, #20]
  42662. 80126da: 69ba ldr r2, [r7, #24]
  42663. 80126dc: e841 2300 strex r3, r2, [r1]
  42664. 80126e0: 613b str r3, [r7, #16]
  42665. return(result);
  42666. 80126e2: 693b ldr r3, [r7, #16]
  42667. 80126e4: 2b00 cmp r3, #0
  42668. 80126e6: d1e6 bne.n 80126b6 <UART_TxISR_16BIT_FIFOEN+0x5c>
  42669. break; /* force exit loop */
  42670. 80126e8: e026 b.n 8012738 <UART_TxISR_16BIT_FIFOEN+0xde>
  42671. }
  42672. else if (READ_BIT(huart->Instance->ISR, USART_ISR_TXE_TXFNF) != 0U)
  42673. 80126ea: 687b ldr r3, [r7, #4]
  42674. 80126ec: 681b ldr r3, [r3, #0]
  42675. 80126ee: 69db ldr r3, [r3, #28]
  42676. 80126f0: f003 0380 and.w r3, r3, #128 @ 0x80
  42677. 80126f4: 2b00 cmp r3, #0
  42678. 80126f6: d018 beq.n 801272a <UART_TxISR_16BIT_FIFOEN+0xd0>
  42679. {
  42680. tmp = (const uint16_t *) huart->pTxBuffPtr;
  42681. 80126f8: 687b ldr r3, [r7, #4]
  42682. 80126fa: 6d1b ldr r3, [r3, #80] @ 0x50
  42683. 80126fc: 63bb str r3, [r7, #56] @ 0x38
  42684. huart->Instance->TDR = (((uint32_t)(*tmp)) & 0x01FFUL);
  42685. 80126fe: 6bbb ldr r3, [r7, #56] @ 0x38
  42686. 8012700: 881b ldrh r3, [r3, #0]
  42687. 8012702: 461a mov r2, r3
  42688. 8012704: 687b ldr r3, [r7, #4]
  42689. 8012706: 681b ldr r3, [r3, #0]
  42690. 8012708: f3c2 0208 ubfx r2, r2, #0, #9
  42691. 801270c: 629a str r2, [r3, #40] @ 0x28
  42692. huart->pTxBuffPtr += 2U;
  42693. 801270e: 687b ldr r3, [r7, #4]
  42694. 8012710: 6d1b ldr r3, [r3, #80] @ 0x50
  42695. 8012712: 1c9a adds r2, r3, #2
  42696. 8012714: 687b ldr r3, [r7, #4]
  42697. 8012716: 651a str r2, [r3, #80] @ 0x50
  42698. huart->TxXferCount--;
  42699. 8012718: 687b ldr r3, [r7, #4]
  42700. 801271a: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  42701. 801271e: b29b uxth r3, r3
  42702. 8012720: 3b01 subs r3, #1
  42703. 8012722: b29a uxth r2, r3
  42704. 8012724: 687b ldr r3, [r7, #4]
  42705. 8012726: f8a3 2056 strh.w r2, [r3, #86] @ 0x56
  42706. for (nb_tx_data = huart->NbTxDataToProcess ; nb_tx_data > 0U ; nb_tx_data--)
  42707. 801272a: 8ffb ldrh r3, [r7, #62] @ 0x3e
  42708. 801272c: 3b01 subs r3, #1
  42709. 801272e: 87fb strh r3, [r7, #62] @ 0x3e
  42710. 8012730: 8ffb ldrh r3, [r7, #62] @ 0x3e
  42711. 8012732: 2b00 cmp r3, #0
  42712. 8012734: d19f bne.n 8012676 <UART_TxISR_16BIT_FIFOEN+0x1c>
  42713. {
  42714. /* Nothing to do */
  42715. }
  42716. }
  42717. }
  42718. }
  42719. 8012736: e7ff b.n 8012738 <UART_TxISR_16BIT_FIFOEN+0xde>
  42720. 8012738: bf00 nop
  42721. 801273a: 3744 adds r7, #68 @ 0x44
  42722. 801273c: 46bd mov sp, r7
  42723. 801273e: f85d 7b04 ldr.w r7, [sp], #4
  42724. 8012742: 4770 bx lr
  42725. 08012744 <UART_EndTransmit_IT>:
  42726. * @param huart pointer to a UART_HandleTypeDef structure that contains
  42727. * the configuration information for the specified UART module.
  42728. * @retval None
  42729. */
  42730. static void UART_EndTransmit_IT(UART_HandleTypeDef *huart)
  42731. {
  42732. 8012744: b580 push {r7, lr}
  42733. 8012746: b088 sub sp, #32
  42734. 8012748: af00 add r7, sp, #0
  42735. 801274a: 6078 str r0, [r7, #4]
  42736. /* Disable the UART Transmit Complete Interrupt */
  42737. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_TCIE);
  42738. 801274c: 687b ldr r3, [r7, #4]
  42739. 801274e: 681b ldr r3, [r3, #0]
  42740. 8012750: 60fb str r3, [r7, #12]
  42741. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  42742. 8012752: 68fb ldr r3, [r7, #12]
  42743. 8012754: e853 3f00 ldrex r3, [r3]
  42744. 8012758: 60bb str r3, [r7, #8]
  42745. return(result);
  42746. 801275a: 68bb ldr r3, [r7, #8]
  42747. 801275c: f023 0340 bic.w r3, r3, #64 @ 0x40
  42748. 8012760: 61fb str r3, [r7, #28]
  42749. 8012762: 687b ldr r3, [r7, #4]
  42750. 8012764: 681b ldr r3, [r3, #0]
  42751. 8012766: 461a mov r2, r3
  42752. 8012768: 69fb ldr r3, [r7, #28]
  42753. 801276a: 61bb str r3, [r7, #24]
  42754. 801276c: 617a str r2, [r7, #20]
  42755. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  42756. 801276e: 6979 ldr r1, [r7, #20]
  42757. 8012770: 69ba ldr r2, [r7, #24]
  42758. 8012772: e841 2300 strex r3, r2, [r1]
  42759. 8012776: 613b str r3, [r7, #16]
  42760. return(result);
  42761. 8012778: 693b ldr r3, [r7, #16]
  42762. 801277a: 2b00 cmp r3, #0
  42763. 801277c: d1e6 bne.n 801274c <UART_EndTransmit_IT+0x8>
  42764. /* Tx process is ended, restore huart->gState to Ready */
  42765. huart->gState = HAL_UART_STATE_READY;
  42766. 801277e: 687b ldr r3, [r7, #4]
  42767. 8012780: 2220 movs r2, #32
  42768. 8012782: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  42769. /* Cleat TxISR function pointer */
  42770. huart->TxISR = NULL;
  42771. 8012786: 687b ldr r3, [r7, #4]
  42772. 8012788: 2200 movs r2, #0
  42773. 801278a: 679a str r2, [r3, #120] @ 0x78
  42774. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  42775. /*Call registered Tx complete callback*/
  42776. huart->TxCpltCallback(huart);
  42777. #else
  42778. /*Call legacy weak Tx complete callback*/
  42779. HAL_UART_TxCpltCallback(huart);
  42780. 801278c: 6878 ldr r0, [r7, #4]
  42781. 801278e: f7f2 f93b bl 8004a08 <HAL_UART_TxCpltCallback>
  42782. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  42783. }
  42784. 8012792: bf00 nop
  42785. 8012794: 3720 adds r7, #32
  42786. 8012796: 46bd mov sp, r7
  42787. 8012798: bd80 pop {r7, pc}
  42788. ...
  42789. 0801279c <UART_RxISR_8BIT>:
  42790. * @brief RX interrupt handler for 7 or 8 bits data word length .
  42791. * @param huart UART handle.
  42792. * @retval None
  42793. */
  42794. static void UART_RxISR_8BIT(UART_HandleTypeDef *huart)
  42795. {
  42796. 801279c: b580 push {r7, lr}
  42797. 801279e: b09c sub sp, #112 @ 0x70
  42798. 80127a0: af00 add r7, sp, #0
  42799. 80127a2: 6078 str r0, [r7, #4]
  42800. uint16_t uhMask = huart->Mask;
  42801. 80127a4: 687b ldr r3, [r7, #4]
  42802. 80127a6: f8b3 3060 ldrh.w r3, [r3, #96] @ 0x60
  42803. 80127aa: f8a7 306e strh.w r3, [r7, #110] @ 0x6e
  42804. uint16_t uhdata;
  42805. /* Check that a Rx process is ongoing */
  42806. if (huart->RxState == HAL_UART_STATE_BUSY_RX)
  42807. 80127ae: 687b ldr r3, [r7, #4]
  42808. 80127b0: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c
  42809. 80127b4: 2b22 cmp r3, #34 @ 0x22
  42810. 80127b6: f040 80be bne.w 8012936 <UART_RxISR_8BIT+0x19a>
  42811. {
  42812. uhdata = (uint16_t) READ_REG(huart->Instance->RDR);
  42813. 80127ba: 687b ldr r3, [r7, #4]
  42814. 80127bc: 681b ldr r3, [r3, #0]
  42815. 80127be: 6a5b ldr r3, [r3, #36] @ 0x24
  42816. 80127c0: f8a7 306c strh.w r3, [r7, #108] @ 0x6c
  42817. *huart->pRxBuffPtr = (uint8_t)(uhdata & (uint8_t)uhMask);
  42818. 80127c4: f8b7 306c ldrh.w r3, [r7, #108] @ 0x6c
  42819. 80127c8: b2d9 uxtb r1, r3
  42820. 80127ca: f8b7 306e ldrh.w r3, [r7, #110] @ 0x6e
  42821. 80127ce: b2da uxtb r2, r3
  42822. 80127d0: 687b ldr r3, [r7, #4]
  42823. 80127d2: 6d9b ldr r3, [r3, #88] @ 0x58
  42824. 80127d4: 400a ands r2, r1
  42825. 80127d6: b2d2 uxtb r2, r2
  42826. 80127d8: 701a strb r2, [r3, #0]
  42827. huart->pRxBuffPtr++;
  42828. 80127da: 687b ldr r3, [r7, #4]
  42829. 80127dc: 6d9b ldr r3, [r3, #88] @ 0x58
  42830. 80127de: 1c5a adds r2, r3, #1
  42831. 80127e0: 687b ldr r3, [r7, #4]
  42832. 80127e2: 659a str r2, [r3, #88] @ 0x58
  42833. huart->RxXferCount--;
  42834. 80127e4: 687b ldr r3, [r7, #4]
  42835. 80127e6: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  42836. 80127ea: b29b uxth r3, r3
  42837. 80127ec: 3b01 subs r3, #1
  42838. 80127ee: b29a uxth r2, r3
  42839. 80127f0: 687b ldr r3, [r7, #4]
  42840. 80127f2: f8a3 205e strh.w r2, [r3, #94] @ 0x5e
  42841. if (huart->RxXferCount == 0U)
  42842. 80127f6: 687b ldr r3, [r7, #4]
  42843. 80127f8: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  42844. 80127fc: b29b uxth r3, r3
  42845. 80127fe: 2b00 cmp r3, #0
  42846. 8012800: f040 80a1 bne.w 8012946 <UART_RxISR_8BIT+0x1aa>
  42847. {
  42848. /* Disable the UART Parity Error Interrupt and RXNE interrupts */
  42849. ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE));
  42850. 8012804: 687b ldr r3, [r7, #4]
  42851. 8012806: 681b ldr r3, [r3, #0]
  42852. 8012808: 64fb str r3, [r7, #76] @ 0x4c
  42853. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  42854. 801280a: 6cfb ldr r3, [r7, #76] @ 0x4c
  42855. 801280c: e853 3f00 ldrex r3, [r3]
  42856. 8012810: 64bb str r3, [r7, #72] @ 0x48
  42857. return(result);
  42858. 8012812: 6cbb ldr r3, [r7, #72] @ 0x48
  42859. 8012814: f423 7390 bic.w r3, r3, #288 @ 0x120
  42860. 8012818: 66bb str r3, [r7, #104] @ 0x68
  42861. 801281a: 687b ldr r3, [r7, #4]
  42862. 801281c: 681b ldr r3, [r3, #0]
  42863. 801281e: 461a mov r2, r3
  42864. 8012820: 6ebb ldr r3, [r7, #104] @ 0x68
  42865. 8012822: 65bb str r3, [r7, #88] @ 0x58
  42866. 8012824: 657a str r2, [r7, #84] @ 0x54
  42867. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  42868. 8012826: 6d79 ldr r1, [r7, #84] @ 0x54
  42869. 8012828: 6dba ldr r2, [r7, #88] @ 0x58
  42870. 801282a: e841 2300 strex r3, r2, [r1]
  42871. 801282e: 653b str r3, [r7, #80] @ 0x50
  42872. return(result);
  42873. 8012830: 6d3b ldr r3, [r7, #80] @ 0x50
  42874. 8012832: 2b00 cmp r3, #0
  42875. 8012834: d1e6 bne.n 8012804 <UART_RxISR_8BIT+0x68>
  42876. /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error) */
  42877. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);
  42878. 8012836: 687b ldr r3, [r7, #4]
  42879. 8012838: 681b ldr r3, [r3, #0]
  42880. 801283a: 3308 adds r3, #8
  42881. 801283c: 63bb str r3, [r7, #56] @ 0x38
  42882. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  42883. 801283e: 6bbb ldr r3, [r7, #56] @ 0x38
  42884. 8012840: e853 3f00 ldrex r3, [r3]
  42885. 8012844: 637b str r3, [r7, #52] @ 0x34
  42886. return(result);
  42887. 8012846: 6b7b ldr r3, [r7, #52] @ 0x34
  42888. 8012848: f023 0301 bic.w r3, r3, #1
  42889. 801284c: 667b str r3, [r7, #100] @ 0x64
  42890. 801284e: 687b ldr r3, [r7, #4]
  42891. 8012850: 681b ldr r3, [r3, #0]
  42892. 8012852: 3308 adds r3, #8
  42893. 8012854: 6e7a ldr r2, [r7, #100] @ 0x64
  42894. 8012856: 647a str r2, [r7, #68] @ 0x44
  42895. 8012858: 643b str r3, [r7, #64] @ 0x40
  42896. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  42897. 801285a: 6c39 ldr r1, [r7, #64] @ 0x40
  42898. 801285c: 6c7a ldr r2, [r7, #68] @ 0x44
  42899. 801285e: e841 2300 strex r3, r2, [r1]
  42900. 8012862: 63fb str r3, [r7, #60] @ 0x3c
  42901. return(result);
  42902. 8012864: 6bfb ldr r3, [r7, #60] @ 0x3c
  42903. 8012866: 2b00 cmp r3, #0
  42904. 8012868: d1e5 bne.n 8012836 <UART_RxISR_8BIT+0x9a>
  42905. /* Rx process is completed, restore huart->RxState to Ready */
  42906. huart->RxState = HAL_UART_STATE_READY;
  42907. 801286a: 687b ldr r3, [r7, #4]
  42908. 801286c: 2220 movs r2, #32
  42909. 801286e: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  42910. /* Clear RxISR function pointer */
  42911. huart->RxISR = NULL;
  42912. 8012872: 687b ldr r3, [r7, #4]
  42913. 8012874: 2200 movs r2, #0
  42914. 8012876: 675a str r2, [r3, #116] @ 0x74
  42915. /* Initialize type of RxEvent to Transfer Complete */
  42916. huart->RxEventType = HAL_UART_RXEVENT_TC;
  42917. 8012878: 687b ldr r3, [r7, #4]
  42918. 801287a: 2200 movs r2, #0
  42919. 801287c: 671a str r2, [r3, #112] @ 0x70
  42920. if (!(IS_LPUART_INSTANCE(huart->Instance)))
  42921. 801287e: 687b ldr r3, [r7, #4]
  42922. 8012880: 681b ldr r3, [r3, #0]
  42923. 8012882: 4a33 ldr r2, [pc, #204] @ (8012950 <UART_RxISR_8BIT+0x1b4>)
  42924. 8012884: 4293 cmp r3, r2
  42925. 8012886: d01f beq.n 80128c8 <UART_RxISR_8BIT+0x12c>
  42926. {
  42927. /* Check that USART RTOEN bit is set */
  42928. if (READ_BIT(huart->Instance->CR2, USART_CR2_RTOEN) != 0U)
  42929. 8012888: 687b ldr r3, [r7, #4]
  42930. 801288a: 681b ldr r3, [r3, #0]
  42931. 801288c: 685b ldr r3, [r3, #4]
  42932. 801288e: f403 0300 and.w r3, r3, #8388608 @ 0x800000
  42933. 8012892: 2b00 cmp r3, #0
  42934. 8012894: d018 beq.n 80128c8 <UART_RxISR_8BIT+0x12c>
  42935. {
  42936. /* Enable the UART Receiver Timeout Interrupt */
  42937. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_RTOIE);
  42938. 8012896: 687b ldr r3, [r7, #4]
  42939. 8012898: 681b ldr r3, [r3, #0]
  42940. 801289a: 627b str r3, [r7, #36] @ 0x24
  42941. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  42942. 801289c: 6a7b ldr r3, [r7, #36] @ 0x24
  42943. 801289e: e853 3f00 ldrex r3, [r3]
  42944. 80128a2: 623b str r3, [r7, #32]
  42945. return(result);
  42946. 80128a4: 6a3b ldr r3, [r7, #32]
  42947. 80128a6: f023 6380 bic.w r3, r3, #67108864 @ 0x4000000
  42948. 80128aa: 663b str r3, [r7, #96] @ 0x60
  42949. 80128ac: 687b ldr r3, [r7, #4]
  42950. 80128ae: 681b ldr r3, [r3, #0]
  42951. 80128b0: 461a mov r2, r3
  42952. 80128b2: 6e3b ldr r3, [r7, #96] @ 0x60
  42953. 80128b4: 633b str r3, [r7, #48] @ 0x30
  42954. 80128b6: 62fa str r2, [r7, #44] @ 0x2c
  42955. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  42956. 80128b8: 6af9 ldr r1, [r7, #44] @ 0x2c
  42957. 80128ba: 6b3a ldr r2, [r7, #48] @ 0x30
  42958. 80128bc: e841 2300 strex r3, r2, [r1]
  42959. 80128c0: 62bb str r3, [r7, #40] @ 0x28
  42960. return(result);
  42961. 80128c2: 6abb ldr r3, [r7, #40] @ 0x28
  42962. 80128c4: 2b00 cmp r3, #0
  42963. 80128c6: d1e6 bne.n 8012896 <UART_RxISR_8BIT+0xfa>
  42964. }
  42965. }
  42966. /* Check current reception Mode :
  42967. If Reception till IDLE event has been selected : */
  42968. if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
  42969. 80128c8: 687b ldr r3, [r7, #4]
  42970. 80128ca: 6edb ldr r3, [r3, #108] @ 0x6c
  42971. 80128cc: 2b01 cmp r3, #1
  42972. 80128ce: d12e bne.n 801292e <UART_RxISR_8BIT+0x192>
  42973. {
  42974. /* Set reception type to Standard */
  42975. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  42976. 80128d0: 687b ldr r3, [r7, #4]
  42977. 80128d2: 2200 movs r2, #0
  42978. 80128d4: 66da str r2, [r3, #108] @ 0x6c
  42979. /* Disable IDLE interrupt */
  42980. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  42981. 80128d6: 687b ldr r3, [r7, #4]
  42982. 80128d8: 681b ldr r3, [r3, #0]
  42983. 80128da: 613b str r3, [r7, #16]
  42984. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  42985. 80128dc: 693b ldr r3, [r7, #16]
  42986. 80128de: e853 3f00 ldrex r3, [r3]
  42987. 80128e2: 60fb str r3, [r7, #12]
  42988. return(result);
  42989. 80128e4: 68fb ldr r3, [r7, #12]
  42990. 80128e6: f023 0310 bic.w r3, r3, #16
  42991. 80128ea: 65fb str r3, [r7, #92] @ 0x5c
  42992. 80128ec: 687b ldr r3, [r7, #4]
  42993. 80128ee: 681b ldr r3, [r3, #0]
  42994. 80128f0: 461a mov r2, r3
  42995. 80128f2: 6dfb ldr r3, [r7, #92] @ 0x5c
  42996. 80128f4: 61fb str r3, [r7, #28]
  42997. 80128f6: 61ba str r2, [r7, #24]
  42998. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  42999. 80128f8: 69b9 ldr r1, [r7, #24]
  43000. 80128fa: 69fa ldr r2, [r7, #28]
  43001. 80128fc: e841 2300 strex r3, r2, [r1]
  43002. 8012900: 617b str r3, [r7, #20]
  43003. return(result);
  43004. 8012902: 697b ldr r3, [r7, #20]
  43005. 8012904: 2b00 cmp r3, #0
  43006. 8012906: d1e6 bne.n 80128d6 <UART_RxISR_8BIT+0x13a>
  43007. if (__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE) == SET)
  43008. 8012908: 687b ldr r3, [r7, #4]
  43009. 801290a: 681b ldr r3, [r3, #0]
  43010. 801290c: 69db ldr r3, [r3, #28]
  43011. 801290e: f003 0310 and.w r3, r3, #16
  43012. 8012912: 2b10 cmp r3, #16
  43013. 8012914: d103 bne.n 801291e <UART_RxISR_8BIT+0x182>
  43014. {
  43015. /* Clear IDLE Flag */
  43016. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_IDLEF);
  43017. 8012916: 687b ldr r3, [r7, #4]
  43018. 8012918: 681b ldr r3, [r3, #0]
  43019. 801291a: 2210 movs r2, #16
  43020. 801291c: 621a str r2, [r3, #32]
  43021. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  43022. /*Call registered Rx Event callback*/
  43023. huart->RxEventCallback(huart, huart->RxXferSize);
  43024. #else
  43025. /*Call legacy weak Rx Event callback*/
  43026. HAL_UARTEx_RxEventCallback(huart, huart->RxXferSize);
  43027. 801291e: 687b ldr r3, [r7, #4]
  43028. 8012920: f8b3 305c ldrh.w r3, [r3, #92] @ 0x5c
  43029. 8012924: 4619 mov r1, r3
  43030. 8012926: 6878 ldr r0, [r7, #4]
  43031. 8012928: f7f2 f844 bl 80049b4 <HAL_UARTEx_RxEventCallback>
  43032. else
  43033. {
  43034. /* Clear RXNE interrupt flag */
  43035. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  43036. }
  43037. }
  43038. 801292c: e00b b.n 8012946 <UART_RxISR_8BIT+0x1aa>
  43039. HAL_UART_RxCpltCallback(huart);
  43040. 801292e: 6878 ldr r0, [r7, #4]
  43041. 8012930: f7f2 f836 bl 80049a0 <HAL_UART_RxCpltCallback>
  43042. }
  43043. 8012934: e007 b.n 8012946 <UART_RxISR_8BIT+0x1aa>
  43044. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  43045. 8012936: 687b ldr r3, [r7, #4]
  43046. 8012938: 681b ldr r3, [r3, #0]
  43047. 801293a: 699a ldr r2, [r3, #24]
  43048. 801293c: 687b ldr r3, [r7, #4]
  43049. 801293e: 681b ldr r3, [r3, #0]
  43050. 8012940: f042 0208 orr.w r2, r2, #8
  43051. 8012944: 619a str r2, [r3, #24]
  43052. }
  43053. 8012946: bf00 nop
  43054. 8012948: 3770 adds r7, #112 @ 0x70
  43055. 801294a: 46bd mov sp, r7
  43056. 801294c: bd80 pop {r7, pc}
  43057. 801294e: bf00 nop
  43058. 8012950: 58000c00 .word 0x58000c00
  43059. 08012954 <UART_RxISR_16BIT>:
  43060. * interruptions have been enabled by HAL_UART_Receive_IT()
  43061. * @param huart UART handle.
  43062. * @retval None
  43063. */
  43064. static void UART_RxISR_16BIT(UART_HandleTypeDef *huart)
  43065. {
  43066. 8012954: b580 push {r7, lr}
  43067. 8012956: b09c sub sp, #112 @ 0x70
  43068. 8012958: af00 add r7, sp, #0
  43069. 801295a: 6078 str r0, [r7, #4]
  43070. uint16_t *tmp;
  43071. uint16_t uhMask = huart->Mask;
  43072. 801295c: 687b ldr r3, [r7, #4]
  43073. 801295e: f8b3 3060 ldrh.w r3, [r3, #96] @ 0x60
  43074. 8012962: f8a7 306e strh.w r3, [r7, #110] @ 0x6e
  43075. uint16_t uhdata;
  43076. /* Check that a Rx process is ongoing */
  43077. if (huart->RxState == HAL_UART_STATE_BUSY_RX)
  43078. 8012966: 687b ldr r3, [r7, #4]
  43079. 8012968: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c
  43080. 801296c: 2b22 cmp r3, #34 @ 0x22
  43081. 801296e: f040 80be bne.w 8012aee <UART_RxISR_16BIT+0x19a>
  43082. {
  43083. uhdata = (uint16_t) READ_REG(huart->Instance->RDR);
  43084. 8012972: 687b ldr r3, [r7, #4]
  43085. 8012974: 681b ldr r3, [r3, #0]
  43086. 8012976: 6a5b ldr r3, [r3, #36] @ 0x24
  43087. 8012978: f8a7 306c strh.w r3, [r7, #108] @ 0x6c
  43088. tmp = (uint16_t *) huart->pRxBuffPtr ;
  43089. 801297c: 687b ldr r3, [r7, #4]
  43090. 801297e: 6d9b ldr r3, [r3, #88] @ 0x58
  43091. 8012980: 66bb str r3, [r7, #104] @ 0x68
  43092. *tmp = (uint16_t)(uhdata & uhMask);
  43093. 8012982: f8b7 206c ldrh.w r2, [r7, #108] @ 0x6c
  43094. 8012986: f8b7 306e ldrh.w r3, [r7, #110] @ 0x6e
  43095. 801298a: 4013 ands r3, r2
  43096. 801298c: b29a uxth r2, r3
  43097. 801298e: 6ebb ldr r3, [r7, #104] @ 0x68
  43098. 8012990: 801a strh r2, [r3, #0]
  43099. huart->pRxBuffPtr += 2U;
  43100. 8012992: 687b ldr r3, [r7, #4]
  43101. 8012994: 6d9b ldr r3, [r3, #88] @ 0x58
  43102. 8012996: 1c9a adds r2, r3, #2
  43103. 8012998: 687b ldr r3, [r7, #4]
  43104. 801299a: 659a str r2, [r3, #88] @ 0x58
  43105. huart->RxXferCount--;
  43106. 801299c: 687b ldr r3, [r7, #4]
  43107. 801299e: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  43108. 80129a2: b29b uxth r3, r3
  43109. 80129a4: 3b01 subs r3, #1
  43110. 80129a6: b29a uxth r2, r3
  43111. 80129a8: 687b ldr r3, [r7, #4]
  43112. 80129aa: f8a3 205e strh.w r2, [r3, #94] @ 0x5e
  43113. if (huart->RxXferCount == 0U)
  43114. 80129ae: 687b ldr r3, [r7, #4]
  43115. 80129b0: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  43116. 80129b4: b29b uxth r3, r3
  43117. 80129b6: 2b00 cmp r3, #0
  43118. 80129b8: f040 80a1 bne.w 8012afe <UART_RxISR_16BIT+0x1aa>
  43119. {
  43120. /* Disable the UART Parity Error Interrupt and RXNE interrupt*/
  43121. ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE));
  43122. 80129bc: 687b ldr r3, [r7, #4]
  43123. 80129be: 681b ldr r3, [r3, #0]
  43124. 80129c0: 64bb str r3, [r7, #72] @ 0x48
  43125. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  43126. 80129c2: 6cbb ldr r3, [r7, #72] @ 0x48
  43127. 80129c4: e853 3f00 ldrex r3, [r3]
  43128. 80129c8: 647b str r3, [r7, #68] @ 0x44
  43129. return(result);
  43130. 80129ca: 6c7b ldr r3, [r7, #68] @ 0x44
  43131. 80129cc: f423 7390 bic.w r3, r3, #288 @ 0x120
  43132. 80129d0: 667b str r3, [r7, #100] @ 0x64
  43133. 80129d2: 687b ldr r3, [r7, #4]
  43134. 80129d4: 681b ldr r3, [r3, #0]
  43135. 80129d6: 461a mov r2, r3
  43136. 80129d8: 6e7b ldr r3, [r7, #100] @ 0x64
  43137. 80129da: 657b str r3, [r7, #84] @ 0x54
  43138. 80129dc: 653a str r2, [r7, #80] @ 0x50
  43139. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  43140. 80129de: 6d39 ldr r1, [r7, #80] @ 0x50
  43141. 80129e0: 6d7a ldr r2, [r7, #84] @ 0x54
  43142. 80129e2: e841 2300 strex r3, r2, [r1]
  43143. 80129e6: 64fb str r3, [r7, #76] @ 0x4c
  43144. return(result);
  43145. 80129e8: 6cfb ldr r3, [r7, #76] @ 0x4c
  43146. 80129ea: 2b00 cmp r3, #0
  43147. 80129ec: d1e6 bne.n 80129bc <UART_RxISR_16BIT+0x68>
  43148. /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error) */
  43149. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);
  43150. 80129ee: 687b ldr r3, [r7, #4]
  43151. 80129f0: 681b ldr r3, [r3, #0]
  43152. 80129f2: 3308 adds r3, #8
  43153. 80129f4: 637b str r3, [r7, #52] @ 0x34
  43154. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  43155. 80129f6: 6b7b ldr r3, [r7, #52] @ 0x34
  43156. 80129f8: e853 3f00 ldrex r3, [r3]
  43157. 80129fc: 633b str r3, [r7, #48] @ 0x30
  43158. return(result);
  43159. 80129fe: 6b3b ldr r3, [r7, #48] @ 0x30
  43160. 8012a00: f023 0301 bic.w r3, r3, #1
  43161. 8012a04: 663b str r3, [r7, #96] @ 0x60
  43162. 8012a06: 687b ldr r3, [r7, #4]
  43163. 8012a08: 681b ldr r3, [r3, #0]
  43164. 8012a0a: 3308 adds r3, #8
  43165. 8012a0c: 6e3a ldr r2, [r7, #96] @ 0x60
  43166. 8012a0e: 643a str r2, [r7, #64] @ 0x40
  43167. 8012a10: 63fb str r3, [r7, #60] @ 0x3c
  43168. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  43169. 8012a12: 6bf9 ldr r1, [r7, #60] @ 0x3c
  43170. 8012a14: 6c3a ldr r2, [r7, #64] @ 0x40
  43171. 8012a16: e841 2300 strex r3, r2, [r1]
  43172. 8012a1a: 63bb str r3, [r7, #56] @ 0x38
  43173. return(result);
  43174. 8012a1c: 6bbb ldr r3, [r7, #56] @ 0x38
  43175. 8012a1e: 2b00 cmp r3, #0
  43176. 8012a20: d1e5 bne.n 80129ee <UART_RxISR_16BIT+0x9a>
  43177. /* Rx process is completed, restore huart->RxState to Ready */
  43178. huart->RxState = HAL_UART_STATE_READY;
  43179. 8012a22: 687b ldr r3, [r7, #4]
  43180. 8012a24: 2220 movs r2, #32
  43181. 8012a26: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  43182. /* Clear RxISR function pointer */
  43183. huart->RxISR = NULL;
  43184. 8012a2a: 687b ldr r3, [r7, #4]
  43185. 8012a2c: 2200 movs r2, #0
  43186. 8012a2e: 675a str r2, [r3, #116] @ 0x74
  43187. /* Initialize type of RxEvent to Transfer Complete */
  43188. huart->RxEventType = HAL_UART_RXEVENT_TC;
  43189. 8012a30: 687b ldr r3, [r7, #4]
  43190. 8012a32: 2200 movs r2, #0
  43191. 8012a34: 671a str r2, [r3, #112] @ 0x70
  43192. if (!(IS_LPUART_INSTANCE(huart->Instance)))
  43193. 8012a36: 687b ldr r3, [r7, #4]
  43194. 8012a38: 681b ldr r3, [r3, #0]
  43195. 8012a3a: 4a33 ldr r2, [pc, #204] @ (8012b08 <UART_RxISR_16BIT+0x1b4>)
  43196. 8012a3c: 4293 cmp r3, r2
  43197. 8012a3e: d01f beq.n 8012a80 <UART_RxISR_16BIT+0x12c>
  43198. {
  43199. /* Check that USART RTOEN bit is set */
  43200. if (READ_BIT(huart->Instance->CR2, USART_CR2_RTOEN) != 0U)
  43201. 8012a40: 687b ldr r3, [r7, #4]
  43202. 8012a42: 681b ldr r3, [r3, #0]
  43203. 8012a44: 685b ldr r3, [r3, #4]
  43204. 8012a46: f403 0300 and.w r3, r3, #8388608 @ 0x800000
  43205. 8012a4a: 2b00 cmp r3, #0
  43206. 8012a4c: d018 beq.n 8012a80 <UART_RxISR_16BIT+0x12c>
  43207. {
  43208. /* Enable the UART Receiver Timeout Interrupt */
  43209. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_RTOIE);
  43210. 8012a4e: 687b ldr r3, [r7, #4]
  43211. 8012a50: 681b ldr r3, [r3, #0]
  43212. 8012a52: 623b str r3, [r7, #32]
  43213. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  43214. 8012a54: 6a3b ldr r3, [r7, #32]
  43215. 8012a56: e853 3f00 ldrex r3, [r3]
  43216. 8012a5a: 61fb str r3, [r7, #28]
  43217. return(result);
  43218. 8012a5c: 69fb ldr r3, [r7, #28]
  43219. 8012a5e: f023 6380 bic.w r3, r3, #67108864 @ 0x4000000
  43220. 8012a62: 65fb str r3, [r7, #92] @ 0x5c
  43221. 8012a64: 687b ldr r3, [r7, #4]
  43222. 8012a66: 681b ldr r3, [r3, #0]
  43223. 8012a68: 461a mov r2, r3
  43224. 8012a6a: 6dfb ldr r3, [r7, #92] @ 0x5c
  43225. 8012a6c: 62fb str r3, [r7, #44] @ 0x2c
  43226. 8012a6e: 62ba str r2, [r7, #40] @ 0x28
  43227. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  43228. 8012a70: 6ab9 ldr r1, [r7, #40] @ 0x28
  43229. 8012a72: 6afa ldr r2, [r7, #44] @ 0x2c
  43230. 8012a74: e841 2300 strex r3, r2, [r1]
  43231. 8012a78: 627b str r3, [r7, #36] @ 0x24
  43232. return(result);
  43233. 8012a7a: 6a7b ldr r3, [r7, #36] @ 0x24
  43234. 8012a7c: 2b00 cmp r3, #0
  43235. 8012a7e: d1e6 bne.n 8012a4e <UART_RxISR_16BIT+0xfa>
  43236. }
  43237. }
  43238. /* Check current reception Mode :
  43239. If Reception till IDLE event has been selected : */
  43240. if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
  43241. 8012a80: 687b ldr r3, [r7, #4]
  43242. 8012a82: 6edb ldr r3, [r3, #108] @ 0x6c
  43243. 8012a84: 2b01 cmp r3, #1
  43244. 8012a86: d12e bne.n 8012ae6 <UART_RxISR_16BIT+0x192>
  43245. {
  43246. /* Set reception type to Standard */
  43247. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  43248. 8012a88: 687b ldr r3, [r7, #4]
  43249. 8012a8a: 2200 movs r2, #0
  43250. 8012a8c: 66da str r2, [r3, #108] @ 0x6c
  43251. /* Disable IDLE interrupt */
  43252. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  43253. 8012a8e: 687b ldr r3, [r7, #4]
  43254. 8012a90: 681b ldr r3, [r3, #0]
  43255. 8012a92: 60fb str r3, [r7, #12]
  43256. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  43257. 8012a94: 68fb ldr r3, [r7, #12]
  43258. 8012a96: e853 3f00 ldrex r3, [r3]
  43259. 8012a9a: 60bb str r3, [r7, #8]
  43260. return(result);
  43261. 8012a9c: 68bb ldr r3, [r7, #8]
  43262. 8012a9e: f023 0310 bic.w r3, r3, #16
  43263. 8012aa2: 65bb str r3, [r7, #88] @ 0x58
  43264. 8012aa4: 687b ldr r3, [r7, #4]
  43265. 8012aa6: 681b ldr r3, [r3, #0]
  43266. 8012aa8: 461a mov r2, r3
  43267. 8012aaa: 6dbb ldr r3, [r7, #88] @ 0x58
  43268. 8012aac: 61bb str r3, [r7, #24]
  43269. 8012aae: 617a str r2, [r7, #20]
  43270. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  43271. 8012ab0: 6979 ldr r1, [r7, #20]
  43272. 8012ab2: 69ba ldr r2, [r7, #24]
  43273. 8012ab4: e841 2300 strex r3, r2, [r1]
  43274. 8012ab8: 613b str r3, [r7, #16]
  43275. return(result);
  43276. 8012aba: 693b ldr r3, [r7, #16]
  43277. 8012abc: 2b00 cmp r3, #0
  43278. 8012abe: d1e6 bne.n 8012a8e <UART_RxISR_16BIT+0x13a>
  43279. if (__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE) == SET)
  43280. 8012ac0: 687b ldr r3, [r7, #4]
  43281. 8012ac2: 681b ldr r3, [r3, #0]
  43282. 8012ac4: 69db ldr r3, [r3, #28]
  43283. 8012ac6: f003 0310 and.w r3, r3, #16
  43284. 8012aca: 2b10 cmp r3, #16
  43285. 8012acc: d103 bne.n 8012ad6 <UART_RxISR_16BIT+0x182>
  43286. {
  43287. /* Clear IDLE Flag */
  43288. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_IDLEF);
  43289. 8012ace: 687b ldr r3, [r7, #4]
  43290. 8012ad0: 681b ldr r3, [r3, #0]
  43291. 8012ad2: 2210 movs r2, #16
  43292. 8012ad4: 621a str r2, [r3, #32]
  43293. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  43294. /*Call registered Rx Event callback*/
  43295. huart->RxEventCallback(huart, huart->RxXferSize);
  43296. #else
  43297. /*Call legacy weak Rx Event callback*/
  43298. HAL_UARTEx_RxEventCallback(huart, huart->RxXferSize);
  43299. 8012ad6: 687b ldr r3, [r7, #4]
  43300. 8012ad8: f8b3 305c ldrh.w r3, [r3, #92] @ 0x5c
  43301. 8012adc: 4619 mov r1, r3
  43302. 8012ade: 6878 ldr r0, [r7, #4]
  43303. 8012ae0: f7f1 ff68 bl 80049b4 <HAL_UARTEx_RxEventCallback>
  43304. else
  43305. {
  43306. /* Clear RXNE interrupt flag */
  43307. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  43308. }
  43309. }
  43310. 8012ae4: e00b b.n 8012afe <UART_RxISR_16BIT+0x1aa>
  43311. HAL_UART_RxCpltCallback(huart);
  43312. 8012ae6: 6878 ldr r0, [r7, #4]
  43313. 8012ae8: f7f1 ff5a bl 80049a0 <HAL_UART_RxCpltCallback>
  43314. }
  43315. 8012aec: e007 b.n 8012afe <UART_RxISR_16BIT+0x1aa>
  43316. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  43317. 8012aee: 687b ldr r3, [r7, #4]
  43318. 8012af0: 681b ldr r3, [r3, #0]
  43319. 8012af2: 699a ldr r2, [r3, #24]
  43320. 8012af4: 687b ldr r3, [r7, #4]
  43321. 8012af6: 681b ldr r3, [r3, #0]
  43322. 8012af8: f042 0208 orr.w r2, r2, #8
  43323. 8012afc: 619a str r2, [r3, #24]
  43324. }
  43325. 8012afe: bf00 nop
  43326. 8012b00: 3770 adds r7, #112 @ 0x70
  43327. 8012b02: 46bd mov sp, r7
  43328. 8012b04: bd80 pop {r7, pc}
  43329. 8012b06: bf00 nop
  43330. 8012b08: 58000c00 .word 0x58000c00
  43331. 08012b0c <UART_RxISR_8BIT_FIFOEN>:
  43332. * interruptions have been enabled by HAL_UART_Receive_IT()
  43333. * @param huart UART handle.
  43334. * @retval None
  43335. */
  43336. static void UART_RxISR_8BIT_FIFOEN(UART_HandleTypeDef *huart)
  43337. {
  43338. 8012b0c: b580 push {r7, lr}
  43339. 8012b0e: b0ac sub sp, #176 @ 0xb0
  43340. 8012b10: af00 add r7, sp, #0
  43341. 8012b12: 6078 str r0, [r7, #4]
  43342. uint16_t uhMask = huart->Mask;
  43343. 8012b14: 687b ldr r3, [r7, #4]
  43344. 8012b16: f8b3 3060 ldrh.w r3, [r3, #96] @ 0x60
  43345. 8012b1a: f8a7 30aa strh.w r3, [r7, #170] @ 0xaa
  43346. uint16_t uhdata;
  43347. uint16_t nb_rx_data;
  43348. uint16_t rxdatacount;
  43349. uint32_t isrflags = READ_REG(huart->Instance->ISR);
  43350. 8012b1e: 687b ldr r3, [r7, #4]
  43351. 8012b20: 681b ldr r3, [r3, #0]
  43352. 8012b22: 69db ldr r3, [r3, #28]
  43353. 8012b24: f8c7 30ac str.w r3, [r7, #172] @ 0xac
  43354. uint32_t cr1its = READ_REG(huart->Instance->CR1);
  43355. 8012b28: 687b ldr r3, [r7, #4]
  43356. 8012b2a: 681b ldr r3, [r3, #0]
  43357. 8012b2c: 681b ldr r3, [r3, #0]
  43358. 8012b2e: f8c7 30a4 str.w r3, [r7, #164] @ 0xa4
  43359. uint32_t cr3its = READ_REG(huart->Instance->CR3);
  43360. 8012b32: 687b ldr r3, [r7, #4]
  43361. 8012b34: 681b ldr r3, [r3, #0]
  43362. 8012b36: 689b ldr r3, [r3, #8]
  43363. 8012b38: f8c7 30a0 str.w r3, [r7, #160] @ 0xa0
  43364. /* Check that a Rx process is ongoing */
  43365. if (huart->RxState == HAL_UART_STATE_BUSY_RX)
  43366. 8012b3c: 687b ldr r3, [r7, #4]
  43367. 8012b3e: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c
  43368. 8012b42: 2b22 cmp r3, #34 @ 0x22
  43369. 8012b44: f040 8180 bne.w 8012e48 <UART_RxISR_8BIT_FIFOEN+0x33c>
  43370. {
  43371. nb_rx_data = huart->NbRxDataToProcess;
  43372. 8012b48: 687b ldr r3, [r7, #4]
  43373. 8012b4a: f8b3 3068 ldrh.w r3, [r3, #104] @ 0x68
  43374. 8012b4e: f8a7 309e strh.w r3, [r7, #158] @ 0x9e
  43375. while ((nb_rx_data > 0U) && ((isrflags & USART_ISR_RXNE_RXFNE) != 0U))
  43376. 8012b52: e123 b.n 8012d9c <UART_RxISR_8BIT_FIFOEN+0x290>
  43377. {
  43378. uhdata = (uint16_t) READ_REG(huart->Instance->RDR);
  43379. 8012b54: 687b ldr r3, [r7, #4]
  43380. 8012b56: 681b ldr r3, [r3, #0]
  43381. 8012b58: 6a5b ldr r3, [r3, #36] @ 0x24
  43382. 8012b5a: f8a7 309c strh.w r3, [r7, #156] @ 0x9c
  43383. *huart->pRxBuffPtr = (uint8_t)(uhdata & (uint8_t)uhMask);
  43384. 8012b5e: f8b7 309c ldrh.w r3, [r7, #156] @ 0x9c
  43385. 8012b62: b2d9 uxtb r1, r3
  43386. 8012b64: f8b7 30aa ldrh.w r3, [r7, #170] @ 0xaa
  43387. 8012b68: b2da uxtb r2, r3
  43388. 8012b6a: 687b ldr r3, [r7, #4]
  43389. 8012b6c: 6d9b ldr r3, [r3, #88] @ 0x58
  43390. 8012b6e: 400a ands r2, r1
  43391. 8012b70: b2d2 uxtb r2, r2
  43392. 8012b72: 701a strb r2, [r3, #0]
  43393. huart->pRxBuffPtr++;
  43394. 8012b74: 687b ldr r3, [r7, #4]
  43395. 8012b76: 6d9b ldr r3, [r3, #88] @ 0x58
  43396. 8012b78: 1c5a adds r2, r3, #1
  43397. 8012b7a: 687b ldr r3, [r7, #4]
  43398. 8012b7c: 659a str r2, [r3, #88] @ 0x58
  43399. huart->RxXferCount--;
  43400. 8012b7e: 687b ldr r3, [r7, #4]
  43401. 8012b80: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  43402. 8012b84: b29b uxth r3, r3
  43403. 8012b86: 3b01 subs r3, #1
  43404. 8012b88: b29a uxth r2, r3
  43405. 8012b8a: 687b ldr r3, [r7, #4]
  43406. 8012b8c: f8a3 205e strh.w r2, [r3, #94] @ 0x5e
  43407. isrflags = READ_REG(huart->Instance->ISR);
  43408. 8012b90: 687b ldr r3, [r7, #4]
  43409. 8012b92: 681b ldr r3, [r3, #0]
  43410. 8012b94: 69db ldr r3, [r3, #28]
  43411. 8012b96: f8c7 30ac str.w r3, [r7, #172] @ 0xac
  43412. /* If some non blocking errors occurred */
  43413. if ((isrflags & (USART_ISR_PE | USART_ISR_FE | USART_ISR_NE)) != 0U)
  43414. 8012b9a: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac
  43415. 8012b9e: f003 0307 and.w r3, r3, #7
  43416. 8012ba2: 2b00 cmp r3, #0
  43417. 8012ba4: d053 beq.n 8012c4e <UART_RxISR_8BIT_FIFOEN+0x142>
  43418. {
  43419. /* UART parity error interrupt occurred -------------------------------------*/
  43420. if (((isrflags & USART_ISR_PE) != 0U) && ((cr1its & USART_CR1_PEIE) != 0U))
  43421. 8012ba6: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac
  43422. 8012baa: f003 0301 and.w r3, r3, #1
  43423. 8012bae: 2b00 cmp r3, #0
  43424. 8012bb0: d011 beq.n 8012bd6 <UART_RxISR_8BIT_FIFOEN+0xca>
  43425. 8012bb2: f8d7 30a4 ldr.w r3, [r7, #164] @ 0xa4
  43426. 8012bb6: f403 7380 and.w r3, r3, #256 @ 0x100
  43427. 8012bba: 2b00 cmp r3, #0
  43428. 8012bbc: d00b beq.n 8012bd6 <UART_RxISR_8BIT_FIFOEN+0xca>
  43429. {
  43430. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_PEF);
  43431. 8012bbe: 687b ldr r3, [r7, #4]
  43432. 8012bc0: 681b ldr r3, [r3, #0]
  43433. 8012bc2: 2201 movs r2, #1
  43434. 8012bc4: 621a str r2, [r3, #32]
  43435. huart->ErrorCode |= HAL_UART_ERROR_PE;
  43436. 8012bc6: 687b ldr r3, [r7, #4]
  43437. 8012bc8: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  43438. 8012bcc: f043 0201 orr.w r2, r3, #1
  43439. 8012bd0: 687b ldr r3, [r7, #4]
  43440. 8012bd2: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  43441. }
  43442. /* UART frame error interrupt occurred --------------------------------------*/
  43443. if (((isrflags & USART_ISR_FE) != 0U) && ((cr3its & USART_CR3_EIE) != 0U))
  43444. 8012bd6: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac
  43445. 8012bda: f003 0302 and.w r3, r3, #2
  43446. 8012bde: 2b00 cmp r3, #0
  43447. 8012be0: d011 beq.n 8012c06 <UART_RxISR_8BIT_FIFOEN+0xfa>
  43448. 8012be2: f8d7 30a0 ldr.w r3, [r7, #160] @ 0xa0
  43449. 8012be6: f003 0301 and.w r3, r3, #1
  43450. 8012bea: 2b00 cmp r3, #0
  43451. 8012bec: d00b beq.n 8012c06 <UART_RxISR_8BIT_FIFOEN+0xfa>
  43452. {
  43453. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_FEF);
  43454. 8012bee: 687b ldr r3, [r7, #4]
  43455. 8012bf0: 681b ldr r3, [r3, #0]
  43456. 8012bf2: 2202 movs r2, #2
  43457. 8012bf4: 621a str r2, [r3, #32]
  43458. huart->ErrorCode |= HAL_UART_ERROR_FE;
  43459. 8012bf6: 687b ldr r3, [r7, #4]
  43460. 8012bf8: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  43461. 8012bfc: f043 0204 orr.w r2, r3, #4
  43462. 8012c00: 687b ldr r3, [r7, #4]
  43463. 8012c02: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  43464. }
  43465. /* UART noise error interrupt occurred --------------------------------------*/
  43466. if (((isrflags & USART_ISR_NE) != 0U) && ((cr3its & USART_CR3_EIE) != 0U))
  43467. 8012c06: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac
  43468. 8012c0a: f003 0304 and.w r3, r3, #4
  43469. 8012c0e: 2b00 cmp r3, #0
  43470. 8012c10: d011 beq.n 8012c36 <UART_RxISR_8BIT_FIFOEN+0x12a>
  43471. 8012c12: f8d7 30a0 ldr.w r3, [r7, #160] @ 0xa0
  43472. 8012c16: f003 0301 and.w r3, r3, #1
  43473. 8012c1a: 2b00 cmp r3, #0
  43474. 8012c1c: d00b beq.n 8012c36 <UART_RxISR_8BIT_FIFOEN+0x12a>
  43475. {
  43476. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_NEF);
  43477. 8012c1e: 687b ldr r3, [r7, #4]
  43478. 8012c20: 681b ldr r3, [r3, #0]
  43479. 8012c22: 2204 movs r2, #4
  43480. 8012c24: 621a str r2, [r3, #32]
  43481. huart->ErrorCode |= HAL_UART_ERROR_NE;
  43482. 8012c26: 687b ldr r3, [r7, #4]
  43483. 8012c28: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  43484. 8012c2c: f043 0202 orr.w r2, r3, #2
  43485. 8012c30: 687b ldr r3, [r7, #4]
  43486. 8012c32: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  43487. }
  43488. /* Call UART Error Call back function if need be ----------------------------*/
  43489. if (huart->ErrorCode != HAL_UART_ERROR_NONE)
  43490. 8012c36: 687b ldr r3, [r7, #4]
  43491. 8012c38: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  43492. 8012c3c: 2b00 cmp r3, #0
  43493. 8012c3e: d006 beq.n 8012c4e <UART_RxISR_8BIT_FIFOEN+0x142>
  43494. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  43495. /*Call registered error callback*/
  43496. huart->ErrorCallback(huart);
  43497. #else
  43498. /*Call legacy weak error callback*/
  43499. HAL_UART_ErrorCallback(huart);
  43500. 8012c40: 6878 ldr r0, [r7, #4]
  43501. 8012c42: f7fe fb13 bl 801126c <HAL_UART_ErrorCallback>
  43502. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  43503. huart->ErrorCode = HAL_UART_ERROR_NONE;
  43504. 8012c46: 687b ldr r3, [r7, #4]
  43505. 8012c48: 2200 movs r2, #0
  43506. 8012c4a: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  43507. }
  43508. }
  43509. if (huart->RxXferCount == 0U)
  43510. 8012c4e: 687b ldr r3, [r7, #4]
  43511. 8012c50: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  43512. 8012c54: b29b uxth r3, r3
  43513. 8012c56: 2b00 cmp r3, #0
  43514. 8012c58: f040 80a0 bne.w 8012d9c <UART_RxISR_8BIT_FIFOEN+0x290>
  43515. {
  43516. /* Disable the UART Parity Error Interrupt and RXFT interrupt*/
  43517. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_PEIE);
  43518. 8012c5c: 687b ldr r3, [r7, #4]
  43519. 8012c5e: 681b ldr r3, [r3, #0]
  43520. 8012c60: 673b str r3, [r7, #112] @ 0x70
  43521. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  43522. 8012c62: 6f3b ldr r3, [r7, #112] @ 0x70
  43523. 8012c64: e853 3f00 ldrex r3, [r3]
  43524. 8012c68: 66fb str r3, [r7, #108] @ 0x6c
  43525. return(result);
  43526. 8012c6a: 6efb ldr r3, [r7, #108] @ 0x6c
  43527. 8012c6c: f423 7380 bic.w r3, r3, #256 @ 0x100
  43528. 8012c70: f8c7 3098 str.w r3, [r7, #152] @ 0x98
  43529. 8012c74: 687b ldr r3, [r7, #4]
  43530. 8012c76: 681b ldr r3, [r3, #0]
  43531. 8012c78: 461a mov r2, r3
  43532. 8012c7a: f8d7 3098 ldr.w r3, [r7, #152] @ 0x98
  43533. 8012c7e: 67fb str r3, [r7, #124] @ 0x7c
  43534. 8012c80: 67ba str r2, [r7, #120] @ 0x78
  43535. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  43536. 8012c82: 6fb9 ldr r1, [r7, #120] @ 0x78
  43537. 8012c84: 6ffa ldr r2, [r7, #124] @ 0x7c
  43538. 8012c86: e841 2300 strex r3, r2, [r1]
  43539. 8012c8a: 677b str r3, [r7, #116] @ 0x74
  43540. return(result);
  43541. 8012c8c: 6f7b ldr r3, [r7, #116] @ 0x74
  43542. 8012c8e: 2b00 cmp r3, #0
  43543. 8012c90: d1e4 bne.n 8012c5c <UART_RxISR_8BIT_FIFOEN+0x150>
  43544. /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error)
  43545. and RX FIFO Threshold interrupt */
  43546. ATOMIC_CLEAR_BIT(huart->Instance->CR3, (USART_CR3_EIE | USART_CR3_RXFTIE));
  43547. 8012c92: 687b ldr r3, [r7, #4]
  43548. 8012c94: 681b ldr r3, [r3, #0]
  43549. 8012c96: 3308 adds r3, #8
  43550. 8012c98: 65fb str r3, [r7, #92] @ 0x5c
  43551. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  43552. 8012c9a: 6dfb ldr r3, [r7, #92] @ 0x5c
  43553. 8012c9c: e853 3f00 ldrex r3, [r3]
  43554. 8012ca0: 65bb str r3, [r7, #88] @ 0x58
  43555. return(result);
  43556. 8012ca2: 6dba ldr r2, [r7, #88] @ 0x58
  43557. 8012ca4: 4b6e ldr r3, [pc, #440] @ (8012e60 <UART_RxISR_8BIT_FIFOEN+0x354>)
  43558. 8012ca6: 4013 ands r3, r2
  43559. 8012ca8: f8c7 3094 str.w r3, [r7, #148] @ 0x94
  43560. 8012cac: 687b ldr r3, [r7, #4]
  43561. 8012cae: 681b ldr r3, [r3, #0]
  43562. 8012cb0: 3308 adds r3, #8
  43563. 8012cb2: f8d7 2094 ldr.w r2, [r7, #148] @ 0x94
  43564. 8012cb6: 66ba str r2, [r7, #104] @ 0x68
  43565. 8012cb8: 667b str r3, [r7, #100] @ 0x64
  43566. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  43567. 8012cba: 6e79 ldr r1, [r7, #100] @ 0x64
  43568. 8012cbc: 6eba ldr r2, [r7, #104] @ 0x68
  43569. 8012cbe: e841 2300 strex r3, r2, [r1]
  43570. 8012cc2: 663b str r3, [r7, #96] @ 0x60
  43571. return(result);
  43572. 8012cc4: 6e3b ldr r3, [r7, #96] @ 0x60
  43573. 8012cc6: 2b00 cmp r3, #0
  43574. 8012cc8: d1e3 bne.n 8012c92 <UART_RxISR_8BIT_FIFOEN+0x186>
  43575. /* Rx process is completed, restore huart->RxState to Ready */
  43576. huart->RxState = HAL_UART_STATE_READY;
  43577. 8012cca: 687b ldr r3, [r7, #4]
  43578. 8012ccc: 2220 movs r2, #32
  43579. 8012cce: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  43580. /* Clear RxISR function pointer */
  43581. huart->RxISR = NULL;
  43582. 8012cd2: 687b ldr r3, [r7, #4]
  43583. 8012cd4: 2200 movs r2, #0
  43584. 8012cd6: 675a str r2, [r3, #116] @ 0x74
  43585. /* Initialize type of RxEvent to Transfer Complete */
  43586. huart->RxEventType = HAL_UART_RXEVENT_TC;
  43587. 8012cd8: 687b ldr r3, [r7, #4]
  43588. 8012cda: 2200 movs r2, #0
  43589. 8012cdc: 671a str r2, [r3, #112] @ 0x70
  43590. if (!(IS_LPUART_INSTANCE(huart->Instance)))
  43591. 8012cde: 687b ldr r3, [r7, #4]
  43592. 8012ce0: 681b ldr r3, [r3, #0]
  43593. 8012ce2: 4a60 ldr r2, [pc, #384] @ (8012e64 <UART_RxISR_8BIT_FIFOEN+0x358>)
  43594. 8012ce4: 4293 cmp r3, r2
  43595. 8012ce6: d021 beq.n 8012d2c <UART_RxISR_8BIT_FIFOEN+0x220>
  43596. {
  43597. /* Check that USART RTOEN bit is set */
  43598. if (READ_BIT(huart->Instance->CR2, USART_CR2_RTOEN) != 0U)
  43599. 8012ce8: 687b ldr r3, [r7, #4]
  43600. 8012cea: 681b ldr r3, [r3, #0]
  43601. 8012cec: 685b ldr r3, [r3, #4]
  43602. 8012cee: f403 0300 and.w r3, r3, #8388608 @ 0x800000
  43603. 8012cf2: 2b00 cmp r3, #0
  43604. 8012cf4: d01a beq.n 8012d2c <UART_RxISR_8BIT_FIFOEN+0x220>
  43605. {
  43606. /* Enable the UART Receiver Timeout Interrupt */
  43607. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_RTOIE);
  43608. 8012cf6: 687b ldr r3, [r7, #4]
  43609. 8012cf8: 681b ldr r3, [r3, #0]
  43610. 8012cfa: 64bb str r3, [r7, #72] @ 0x48
  43611. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  43612. 8012cfc: 6cbb ldr r3, [r7, #72] @ 0x48
  43613. 8012cfe: e853 3f00 ldrex r3, [r3]
  43614. 8012d02: 647b str r3, [r7, #68] @ 0x44
  43615. return(result);
  43616. 8012d04: 6c7b ldr r3, [r7, #68] @ 0x44
  43617. 8012d06: f023 6380 bic.w r3, r3, #67108864 @ 0x4000000
  43618. 8012d0a: f8c7 3090 str.w r3, [r7, #144] @ 0x90
  43619. 8012d0e: 687b ldr r3, [r7, #4]
  43620. 8012d10: 681b ldr r3, [r3, #0]
  43621. 8012d12: 461a mov r2, r3
  43622. 8012d14: f8d7 3090 ldr.w r3, [r7, #144] @ 0x90
  43623. 8012d18: 657b str r3, [r7, #84] @ 0x54
  43624. 8012d1a: 653a str r2, [r7, #80] @ 0x50
  43625. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  43626. 8012d1c: 6d39 ldr r1, [r7, #80] @ 0x50
  43627. 8012d1e: 6d7a ldr r2, [r7, #84] @ 0x54
  43628. 8012d20: e841 2300 strex r3, r2, [r1]
  43629. 8012d24: 64fb str r3, [r7, #76] @ 0x4c
  43630. return(result);
  43631. 8012d26: 6cfb ldr r3, [r7, #76] @ 0x4c
  43632. 8012d28: 2b00 cmp r3, #0
  43633. 8012d2a: d1e4 bne.n 8012cf6 <UART_RxISR_8BIT_FIFOEN+0x1ea>
  43634. }
  43635. }
  43636. /* Check current reception Mode :
  43637. If Reception till IDLE event has been selected : */
  43638. if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
  43639. 8012d2c: 687b ldr r3, [r7, #4]
  43640. 8012d2e: 6edb ldr r3, [r3, #108] @ 0x6c
  43641. 8012d30: 2b01 cmp r3, #1
  43642. 8012d32: d130 bne.n 8012d96 <UART_RxISR_8BIT_FIFOEN+0x28a>
  43643. {
  43644. /* Set reception type to Standard */
  43645. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  43646. 8012d34: 687b ldr r3, [r7, #4]
  43647. 8012d36: 2200 movs r2, #0
  43648. 8012d38: 66da str r2, [r3, #108] @ 0x6c
  43649. /* Disable IDLE interrupt */
  43650. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  43651. 8012d3a: 687b ldr r3, [r7, #4]
  43652. 8012d3c: 681b ldr r3, [r3, #0]
  43653. 8012d3e: 637b str r3, [r7, #52] @ 0x34
  43654. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  43655. 8012d40: 6b7b ldr r3, [r7, #52] @ 0x34
  43656. 8012d42: e853 3f00 ldrex r3, [r3]
  43657. 8012d46: 633b str r3, [r7, #48] @ 0x30
  43658. return(result);
  43659. 8012d48: 6b3b ldr r3, [r7, #48] @ 0x30
  43660. 8012d4a: f023 0310 bic.w r3, r3, #16
  43661. 8012d4e: f8c7 308c str.w r3, [r7, #140] @ 0x8c
  43662. 8012d52: 687b ldr r3, [r7, #4]
  43663. 8012d54: 681b ldr r3, [r3, #0]
  43664. 8012d56: 461a mov r2, r3
  43665. 8012d58: f8d7 308c ldr.w r3, [r7, #140] @ 0x8c
  43666. 8012d5c: 643b str r3, [r7, #64] @ 0x40
  43667. 8012d5e: 63fa str r2, [r7, #60] @ 0x3c
  43668. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  43669. 8012d60: 6bf9 ldr r1, [r7, #60] @ 0x3c
  43670. 8012d62: 6c3a ldr r2, [r7, #64] @ 0x40
  43671. 8012d64: e841 2300 strex r3, r2, [r1]
  43672. 8012d68: 63bb str r3, [r7, #56] @ 0x38
  43673. return(result);
  43674. 8012d6a: 6bbb ldr r3, [r7, #56] @ 0x38
  43675. 8012d6c: 2b00 cmp r3, #0
  43676. 8012d6e: d1e4 bne.n 8012d3a <UART_RxISR_8BIT_FIFOEN+0x22e>
  43677. if (__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE) == SET)
  43678. 8012d70: 687b ldr r3, [r7, #4]
  43679. 8012d72: 681b ldr r3, [r3, #0]
  43680. 8012d74: 69db ldr r3, [r3, #28]
  43681. 8012d76: f003 0310 and.w r3, r3, #16
  43682. 8012d7a: 2b10 cmp r3, #16
  43683. 8012d7c: d103 bne.n 8012d86 <UART_RxISR_8BIT_FIFOEN+0x27a>
  43684. {
  43685. /* Clear IDLE Flag */
  43686. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_IDLEF);
  43687. 8012d7e: 687b ldr r3, [r7, #4]
  43688. 8012d80: 681b ldr r3, [r3, #0]
  43689. 8012d82: 2210 movs r2, #16
  43690. 8012d84: 621a str r2, [r3, #32]
  43691. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  43692. /*Call registered Rx Event callback*/
  43693. huart->RxEventCallback(huart, huart->RxXferSize);
  43694. #else
  43695. /*Call legacy weak Rx Event callback*/
  43696. HAL_UARTEx_RxEventCallback(huart, huart->RxXferSize);
  43697. 8012d86: 687b ldr r3, [r7, #4]
  43698. 8012d88: f8b3 305c ldrh.w r3, [r3, #92] @ 0x5c
  43699. 8012d8c: 4619 mov r1, r3
  43700. 8012d8e: 6878 ldr r0, [r7, #4]
  43701. 8012d90: f7f1 fe10 bl 80049b4 <HAL_UARTEx_RxEventCallback>
  43702. 8012d94: e002 b.n 8012d9c <UART_RxISR_8BIT_FIFOEN+0x290>
  43703. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  43704. /*Call registered Rx complete callback*/
  43705. huart->RxCpltCallback(huart);
  43706. #else
  43707. /*Call legacy weak Rx complete callback*/
  43708. HAL_UART_RxCpltCallback(huart);
  43709. 8012d96: 6878 ldr r0, [r7, #4]
  43710. 8012d98: f7f1 fe02 bl 80049a0 <HAL_UART_RxCpltCallback>
  43711. while ((nb_rx_data > 0U) && ((isrflags & USART_ISR_RXNE_RXFNE) != 0U))
  43712. 8012d9c: f8b7 309e ldrh.w r3, [r7, #158] @ 0x9e
  43713. 8012da0: 2b00 cmp r3, #0
  43714. 8012da2: d006 beq.n 8012db2 <UART_RxISR_8BIT_FIFOEN+0x2a6>
  43715. 8012da4: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac
  43716. 8012da8: f003 0320 and.w r3, r3, #32
  43717. 8012dac: 2b00 cmp r3, #0
  43718. 8012dae: f47f aed1 bne.w 8012b54 <UART_RxISR_8BIT_FIFOEN+0x48>
  43719. /* When remaining number of bytes to receive is less than the RX FIFO
  43720. threshold, next incoming frames are processed as if FIFO mode was
  43721. disabled (i.e. one interrupt per received frame).
  43722. */
  43723. rxdatacount = huart->RxXferCount;
  43724. 8012db2: 687b ldr r3, [r7, #4]
  43725. 8012db4: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  43726. 8012db8: f8a7 308a strh.w r3, [r7, #138] @ 0x8a
  43727. if ((rxdatacount != 0U) && (rxdatacount < huart->NbRxDataToProcess))
  43728. 8012dbc: f8b7 308a ldrh.w r3, [r7, #138] @ 0x8a
  43729. 8012dc0: 2b00 cmp r3, #0
  43730. 8012dc2: d049 beq.n 8012e58 <UART_RxISR_8BIT_FIFOEN+0x34c>
  43731. 8012dc4: 687b ldr r3, [r7, #4]
  43732. 8012dc6: f8b3 3068 ldrh.w r3, [r3, #104] @ 0x68
  43733. 8012dca: f8b7 208a ldrh.w r2, [r7, #138] @ 0x8a
  43734. 8012dce: 429a cmp r2, r3
  43735. 8012dd0: d242 bcs.n 8012e58 <UART_RxISR_8BIT_FIFOEN+0x34c>
  43736. {
  43737. /* Disable the UART RXFT interrupt*/
  43738. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_RXFTIE);
  43739. 8012dd2: 687b ldr r3, [r7, #4]
  43740. 8012dd4: 681b ldr r3, [r3, #0]
  43741. 8012dd6: 3308 adds r3, #8
  43742. 8012dd8: 623b str r3, [r7, #32]
  43743. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  43744. 8012dda: 6a3b ldr r3, [r7, #32]
  43745. 8012ddc: e853 3f00 ldrex r3, [r3]
  43746. 8012de0: 61fb str r3, [r7, #28]
  43747. return(result);
  43748. 8012de2: 69fb ldr r3, [r7, #28]
  43749. 8012de4: f023 5380 bic.w r3, r3, #268435456 @ 0x10000000
  43750. 8012de8: f8c7 3084 str.w r3, [r7, #132] @ 0x84
  43751. 8012dec: 687b ldr r3, [r7, #4]
  43752. 8012dee: 681b ldr r3, [r3, #0]
  43753. 8012df0: 3308 adds r3, #8
  43754. 8012df2: f8d7 2084 ldr.w r2, [r7, #132] @ 0x84
  43755. 8012df6: 62fa str r2, [r7, #44] @ 0x2c
  43756. 8012df8: 62bb str r3, [r7, #40] @ 0x28
  43757. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  43758. 8012dfa: 6ab9 ldr r1, [r7, #40] @ 0x28
  43759. 8012dfc: 6afa ldr r2, [r7, #44] @ 0x2c
  43760. 8012dfe: e841 2300 strex r3, r2, [r1]
  43761. 8012e02: 627b str r3, [r7, #36] @ 0x24
  43762. return(result);
  43763. 8012e04: 6a7b ldr r3, [r7, #36] @ 0x24
  43764. 8012e06: 2b00 cmp r3, #0
  43765. 8012e08: d1e3 bne.n 8012dd2 <UART_RxISR_8BIT_FIFOEN+0x2c6>
  43766. /* Update the RxISR function pointer */
  43767. huart->RxISR = UART_RxISR_8BIT;
  43768. 8012e0a: 687b ldr r3, [r7, #4]
  43769. 8012e0c: 4a16 ldr r2, [pc, #88] @ (8012e68 <UART_RxISR_8BIT_FIFOEN+0x35c>)
  43770. 8012e0e: 675a str r2, [r3, #116] @ 0x74
  43771. /* Enable the UART Data Register Not Empty interrupt */
  43772. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_RXNEIE_RXFNEIE);
  43773. 8012e10: 687b ldr r3, [r7, #4]
  43774. 8012e12: 681b ldr r3, [r3, #0]
  43775. 8012e14: 60fb str r3, [r7, #12]
  43776. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  43777. 8012e16: 68fb ldr r3, [r7, #12]
  43778. 8012e18: e853 3f00 ldrex r3, [r3]
  43779. 8012e1c: 60bb str r3, [r7, #8]
  43780. return(result);
  43781. 8012e1e: 68bb ldr r3, [r7, #8]
  43782. 8012e20: f043 0320 orr.w r3, r3, #32
  43783. 8012e24: f8c7 3080 str.w r3, [r7, #128] @ 0x80
  43784. 8012e28: 687b ldr r3, [r7, #4]
  43785. 8012e2a: 681b ldr r3, [r3, #0]
  43786. 8012e2c: 461a mov r2, r3
  43787. 8012e2e: f8d7 3080 ldr.w r3, [r7, #128] @ 0x80
  43788. 8012e32: 61bb str r3, [r7, #24]
  43789. 8012e34: 617a str r2, [r7, #20]
  43790. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  43791. 8012e36: 6979 ldr r1, [r7, #20]
  43792. 8012e38: 69ba ldr r2, [r7, #24]
  43793. 8012e3a: e841 2300 strex r3, r2, [r1]
  43794. 8012e3e: 613b str r3, [r7, #16]
  43795. return(result);
  43796. 8012e40: 693b ldr r3, [r7, #16]
  43797. 8012e42: 2b00 cmp r3, #0
  43798. 8012e44: d1e4 bne.n 8012e10 <UART_RxISR_8BIT_FIFOEN+0x304>
  43799. else
  43800. {
  43801. /* Clear RXNE interrupt flag */
  43802. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  43803. }
  43804. }
  43805. 8012e46: e007 b.n 8012e58 <UART_RxISR_8BIT_FIFOEN+0x34c>
  43806. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  43807. 8012e48: 687b ldr r3, [r7, #4]
  43808. 8012e4a: 681b ldr r3, [r3, #0]
  43809. 8012e4c: 699a ldr r2, [r3, #24]
  43810. 8012e4e: 687b ldr r3, [r7, #4]
  43811. 8012e50: 681b ldr r3, [r3, #0]
  43812. 8012e52: f042 0208 orr.w r2, r2, #8
  43813. 8012e56: 619a str r2, [r3, #24]
  43814. }
  43815. 8012e58: bf00 nop
  43816. 8012e5a: 37b0 adds r7, #176 @ 0xb0
  43817. 8012e5c: 46bd mov sp, r7
  43818. 8012e5e: bd80 pop {r7, pc}
  43819. 8012e60: effffffe .word 0xeffffffe
  43820. 8012e64: 58000c00 .word 0x58000c00
  43821. 8012e68: 0801279d .word 0x0801279d
  43822. 08012e6c <UART_RxISR_16BIT_FIFOEN>:
  43823. * interruptions have been enabled by HAL_UART_Receive_IT()
  43824. * @param huart UART handle.
  43825. * @retval None
  43826. */
  43827. static void UART_RxISR_16BIT_FIFOEN(UART_HandleTypeDef *huart)
  43828. {
  43829. 8012e6c: b580 push {r7, lr}
  43830. 8012e6e: b0ae sub sp, #184 @ 0xb8
  43831. 8012e70: af00 add r7, sp, #0
  43832. 8012e72: 6078 str r0, [r7, #4]
  43833. uint16_t *tmp;
  43834. uint16_t uhMask = huart->Mask;
  43835. 8012e74: 687b ldr r3, [r7, #4]
  43836. 8012e76: f8b3 3060 ldrh.w r3, [r3, #96] @ 0x60
  43837. 8012e7a: f8a7 30b2 strh.w r3, [r7, #178] @ 0xb2
  43838. uint16_t uhdata;
  43839. uint16_t nb_rx_data;
  43840. uint16_t rxdatacount;
  43841. uint32_t isrflags = READ_REG(huart->Instance->ISR);
  43842. 8012e7e: 687b ldr r3, [r7, #4]
  43843. 8012e80: 681b ldr r3, [r3, #0]
  43844. 8012e82: 69db ldr r3, [r3, #28]
  43845. 8012e84: f8c7 30b4 str.w r3, [r7, #180] @ 0xb4
  43846. uint32_t cr1its = READ_REG(huart->Instance->CR1);
  43847. 8012e88: 687b ldr r3, [r7, #4]
  43848. 8012e8a: 681b ldr r3, [r3, #0]
  43849. 8012e8c: 681b ldr r3, [r3, #0]
  43850. 8012e8e: f8c7 30ac str.w r3, [r7, #172] @ 0xac
  43851. uint32_t cr3its = READ_REG(huart->Instance->CR3);
  43852. 8012e92: 687b ldr r3, [r7, #4]
  43853. 8012e94: 681b ldr r3, [r3, #0]
  43854. 8012e96: 689b ldr r3, [r3, #8]
  43855. 8012e98: f8c7 30a8 str.w r3, [r7, #168] @ 0xa8
  43856. /* Check that a Rx process is ongoing */
  43857. if (huart->RxState == HAL_UART_STATE_BUSY_RX)
  43858. 8012e9c: 687b ldr r3, [r7, #4]
  43859. 8012e9e: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c
  43860. 8012ea2: 2b22 cmp r3, #34 @ 0x22
  43861. 8012ea4: f040 8184 bne.w 80131b0 <UART_RxISR_16BIT_FIFOEN+0x344>
  43862. {
  43863. nb_rx_data = huart->NbRxDataToProcess;
  43864. 8012ea8: 687b ldr r3, [r7, #4]
  43865. 8012eaa: f8b3 3068 ldrh.w r3, [r3, #104] @ 0x68
  43866. 8012eae: f8a7 30a6 strh.w r3, [r7, #166] @ 0xa6
  43867. while ((nb_rx_data > 0U) && ((isrflags & USART_ISR_RXNE_RXFNE) != 0U))
  43868. 8012eb2: e127 b.n 8013104 <UART_RxISR_16BIT_FIFOEN+0x298>
  43869. {
  43870. uhdata = (uint16_t) READ_REG(huart->Instance->RDR);
  43871. 8012eb4: 687b ldr r3, [r7, #4]
  43872. 8012eb6: 681b ldr r3, [r3, #0]
  43873. 8012eb8: 6a5b ldr r3, [r3, #36] @ 0x24
  43874. 8012eba: f8a7 30a4 strh.w r3, [r7, #164] @ 0xa4
  43875. tmp = (uint16_t *) huart->pRxBuffPtr ;
  43876. 8012ebe: 687b ldr r3, [r7, #4]
  43877. 8012ec0: 6d9b ldr r3, [r3, #88] @ 0x58
  43878. 8012ec2: f8c7 30a0 str.w r3, [r7, #160] @ 0xa0
  43879. *tmp = (uint16_t)(uhdata & uhMask);
  43880. 8012ec6: f8b7 20a4 ldrh.w r2, [r7, #164] @ 0xa4
  43881. 8012eca: f8b7 30b2 ldrh.w r3, [r7, #178] @ 0xb2
  43882. 8012ece: 4013 ands r3, r2
  43883. 8012ed0: b29a uxth r2, r3
  43884. 8012ed2: f8d7 30a0 ldr.w r3, [r7, #160] @ 0xa0
  43885. 8012ed6: 801a strh r2, [r3, #0]
  43886. huart->pRxBuffPtr += 2U;
  43887. 8012ed8: 687b ldr r3, [r7, #4]
  43888. 8012eda: 6d9b ldr r3, [r3, #88] @ 0x58
  43889. 8012edc: 1c9a adds r2, r3, #2
  43890. 8012ede: 687b ldr r3, [r7, #4]
  43891. 8012ee0: 659a str r2, [r3, #88] @ 0x58
  43892. huart->RxXferCount--;
  43893. 8012ee2: 687b ldr r3, [r7, #4]
  43894. 8012ee4: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  43895. 8012ee8: b29b uxth r3, r3
  43896. 8012eea: 3b01 subs r3, #1
  43897. 8012eec: b29a uxth r2, r3
  43898. 8012eee: 687b ldr r3, [r7, #4]
  43899. 8012ef0: f8a3 205e strh.w r2, [r3, #94] @ 0x5e
  43900. isrflags = READ_REG(huart->Instance->ISR);
  43901. 8012ef4: 687b ldr r3, [r7, #4]
  43902. 8012ef6: 681b ldr r3, [r3, #0]
  43903. 8012ef8: 69db ldr r3, [r3, #28]
  43904. 8012efa: f8c7 30b4 str.w r3, [r7, #180] @ 0xb4
  43905. /* If some non blocking errors occurred */
  43906. if ((isrflags & (USART_ISR_PE | USART_ISR_FE | USART_ISR_NE)) != 0U)
  43907. 8012efe: f8d7 30b4 ldr.w r3, [r7, #180] @ 0xb4
  43908. 8012f02: f003 0307 and.w r3, r3, #7
  43909. 8012f06: 2b00 cmp r3, #0
  43910. 8012f08: d053 beq.n 8012fb2 <UART_RxISR_16BIT_FIFOEN+0x146>
  43911. {
  43912. /* UART parity error interrupt occurred -------------------------------------*/
  43913. if (((isrflags & USART_ISR_PE) != 0U) && ((cr1its & USART_CR1_PEIE) != 0U))
  43914. 8012f0a: f8d7 30b4 ldr.w r3, [r7, #180] @ 0xb4
  43915. 8012f0e: f003 0301 and.w r3, r3, #1
  43916. 8012f12: 2b00 cmp r3, #0
  43917. 8012f14: d011 beq.n 8012f3a <UART_RxISR_16BIT_FIFOEN+0xce>
  43918. 8012f16: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac
  43919. 8012f1a: f403 7380 and.w r3, r3, #256 @ 0x100
  43920. 8012f1e: 2b00 cmp r3, #0
  43921. 8012f20: d00b beq.n 8012f3a <UART_RxISR_16BIT_FIFOEN+0xce>
  43922. {
  43923. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_PEF);
  43924. 8012f22: 687b ldr r3, [r7, #4]
  43925. 8012f24: 681b ldr r3, [r3, #0]
  43926. 8012f26: 2201 movs r2, #1
  43927. 8012f28: 621a str r2, [r3, #32]
  43928. huart->ErrorCode |= HAL_UART_ERROR_PE;
  43929. 8012f2a: 687b ldr r3, [r7, #4]
  43930. 8012f2c: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  43931. 8012f30: f043 0201 orr.w r2, r3, #1
  43932. 8012f34: 687b ldr r3, [r7, #4]
  43933. 8012f36: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  43934. }
  43935. /* UART frame error interrupt occurred --------------------------------------*/
  43936. if (((isrflags & USART_ISR_FE) != 0U) && ((cr3its & USART_CR3_EIE) != 0U))
  43937. 8012f3a: f8d7 30b4 ldr.w r3, [r7, #180] @ 0xb4
  43938. 8012f3e: f003 0302 and.w r3, r3, #2
  43939. 8012f42: 2b00 cmp r3, #0
  43940. 8012f44: d011 beq.n 8012f6a <UART_RxISR_16BIT_FIFOEN+0xfe>
  43941. 8012f46: f8d7 30a8 ldr.w r3, [r7, #168] @ 0xa8
  43942. 8012f4a: f003 0301 and.w r3, r3, #1
  43943. 8012f4e: 2b00 cmp r3, #0
  43944. 8012f50: d00b beq.n 8012f6a <UART_RxISR_16BIT_FIFOEN+0xfe>
  43945. {
  43946. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_FEF);
  43947. 8012f52: 687b ldr r3, [r7, #4]
  43948. 8012f54: 681b ldr r3, [r3, #0]
  43949. 8012f56: 2202 movs r2, #2
  43950. 8012f58: 621a str r2, [r3, #32]
  43951. huart->ErrorCode |= HAL_UART_ERROR_FE;
  43952. 8012f5a: 687b ldr r3, [r7, #4]
  43953. 8012f5c: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  43954. 8012f60: f043 0204 orr.w r2, r3, #4
  43955. 8012f64: 687b ldr r3, [r7, #4]
  43956. 8012f66: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  43957. }
  43958. /* UART noise error interrupt occurred --------------------------------------*/
  43959. if (((isrflags & USART_ISR_NE) != 0U) && ((cr3its & USART_CR3_EIE) != 0U))
  43960. 8012f6a: f8d7 30b4 ldr.w r3, [r7, #180] @ 0xb4
  43961. 8012f6e: f003 0304 and.w r3, r3, #4
  43962. 8012f72: 2b00 cmp r3, #0
  43963. 8012f74: d011 beq.n 8012f9a <UART_RxISR_16BIT_FIFOEN+0x12e>
  43964. 8012f76: f8d7 30a8 ldr.w r3, [r7, #168] @ 0xa8
  43965. 8012f7a: f003 0301 and.w r3, r3, #1
  43966. 8012f7e: 2b00 cmp r3, #0
  43967. 8012f80: d00b beq.n 8012f9a <UART_RxISR_16BIT_FIFOEN+0x12e>
  43968. {
  43969. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_NEF);
  43970. 8012f82: 687b ldr r3, [r7, #4]
  43971. 8012f84: 681b ldr r3, [r3, #0]
  43972. 8012f86: 2204 movs r2, #4
  43973. 8012f88: 621a str r2, [r3, #32]
  43974. huart->ErrorCode |= HAL_UART_ERROR_NE;
  43975. 8012f8a: 687b ldr r3, [r7, #4]
  43976. 8012f8c: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  43977. 8012f90: f043 0202 orr.w r2, r3, #2
  43978. 8012f94: 687b ldr r3, [r7, #4]
  43979. 8012f96: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  43980. }
  43981. /* Call UART Error Call back function if need be ----------------------------*/
  43982. if (huart->ErrorCode != HAL_UART_ERROR_NONE)
  43983. 8012f9a: 687b ldr r3, [r7, #4]
  43984. 8012f9c: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  43985. 8012fa0: 2b00 cmp r3, #0
  43986. 8012fa2: d006 beq.n 8012fb2 <UART_RxISR_16BIT_FIFOEN+0x146>
  43987. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  43988. /*Call registered error callback*/
  43989. huart->ErrorCallback(huart);
  43990. #else
  43991. /*Call legacy weak error callback*/
  43992. HAL_UART_ErrorCallback(huart);
  43993. 8012fa4: 6878 ldr r0, [r7, #4]
  43994. 8012fa6: f7fe f961 bl 801126c <HAL_UART_ErrorCallback>
  43995. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  43996. huart->ErrorCode = HAL_UART_ERROR_NONE;
  43997. 8012faa: 687b ldr r3, [r7, #4]
  43998. 8012fac: 2200 movs r2, #0
  43999. 8012fae: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  44000. }
  44001. }
  44002. if (huart->RxXferCount == 0U)
  44003. 8012fb2: 687b ldr r3, [r7, #4]
  44004. 8012fb4: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  44005. 8012fb8: b29b uxth r3, r3
  44006. 8012fba: 2b00 cmp r3, #0
  44007. 8012fbc: f040 80a2 bne.w 8013104 <UART_RxISR_16BIT_FIFOEN+0x298>
  44008. {
  44009. /* Disable the UART Parity Error Interrupt and RXFT interrupt*/
  44010. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_PEIE);
  44011. 8012fc0: 687b ldr r3, [r7, #4]
  44012. 8012fc2: 681b ldr r3, [r3, #0]
  44013. 8012fc4: 677b str r3, [r7, #116] @ 0x74
  44014. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  44015. 8012fc6: 6f7b ldr r3, [r7, #116] @ 0x74
  44016. 8012fc8: e853 3f00 ldrex r3, [r3]
  44017. 8012fcc: 673b str r3, [r7, #112] @ 0x70
  44018. return(result);
  44019. 8012fce: 6f3b ldr r3, [r7, #112] @ 0x70
  44020. 8012fd0: f423 7380 bic.w r3, r3, #256 @ 0x100
  44021. 8012fd4: f8c7 309c str.w r3, [r7, #156] @ 0x9c
  44022. 8012fd8: 687b ldr r3, [r7, #4]
  44023. 8012fda: 681b ldr r3, [r3, #0]
  44024. 8012fdc: 461a mov r2, r3
  44025. 8012fde: f8d7 309c ldr.w r3, [r7, #156] @ 0x9c
  44026. 8012fe2: f8c7 3080 str.w r3, [r7, #128] @ 0x80
  44027. 8012fe6: 67fa str r2, [r7, #124] @ 0x7c
  44028. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  44029. 8012fe8: 6ff9 ldr r1, [r7, #124] @ 0x7c
  44030. 8012fea: f8d7 2080 ldr.w r2, [r7, #128] @ 0x80
  44031. 8012fee: e841 2300 strex r3, r2, [r1]
  44032. 8012ff2: 67bb str r3, [r7, #120] @ 0x78
  44033. return(result);
  44034. 8012ff4: 6fbb ldr r3, [r7, #120] @ 0x78
  44035. 8012ff6: 2b00 cmp r3, #0
  44036. 8012ff8: d1e2 bne.n 8012fc0 <UART_RxISR_16BIT_FIFOEN+0x154>
  44037. /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error)
  44038. and RX FIFO Threshold interrupt */
  44039. ATOMIC_CLEAR_BIT(huart->Instance->CR3, (USART_CR3_EIE | USART_CR3_RXFTIE));
  44040. 8012ffa: 687b ldr r3, [r7, #4]
  44041. 8012ffc: 681b ldr r3, [r3, #0]
  44042. 8012ffe: 3308 adds r3, #8
  44043. 8013000: 663b str r3, [r7, #96] @ 0x60
  44044. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  44045. 8013002: 6e3b ldr r3, [r7, #96] @ 0x60
  44046. 8013004: e853 3f00 ldrex r3, [r3]
  44047. 8013008: 65fb str r3, [r7, #92] @ 0x5c
  44048. return(result);
  44049. 801300a: 6dfa ldr r2, [r7, #92] @ 0x5c
  44050. 801300c: 4b6e ldr r3, [pc, #440] @ (80131c8 <UART_RxISR_16BIT_FIFOEN+0x35c>)
  44051. 801300e: 4013 ands r3, r2
  44052. 8013010: f8c7 3098 str.w r3, [r7, #152] @ 0x98
  44053. 8013014: 687b ldr r3, [r7, #4]
  44054. 8013016: 681b ldr r3, [r3, #0]
  44055. 8013018: 3308 adds r3, #8
  44056. 801301a: f8d7 2098 ldr.w r2, [r7, #152] @ 0x98
  44057. 801301e: 66fa str r2, [r7, #108] @ 0x6c
  44058. 8013020: 66bb str r3, [r7, #104] @ 0x68
  44059. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  44060. 8013022: 6eb9 ldr r1, [r7, #104] @ 0x68
  44061. 8013024: 6efa ldr r2, [r7, #108] @ 0x6c
  44062. 8013026: e841 2300 strex r3, r2, [r1]
  44063. 801302a: 667b str r3, [r7, #100] @ 0x64
  44064. return(result);
  44065. 801302c: 6e7b ldr r3, [r7, #100] @ 0x64
  44066. 801302e: 2b00 cmp r3, #0
  44067. 8013030: d1e3 bne.n 8012ffa <UART_RxISR_16BIT_FIFOEN+0x18e>
  44068. /* Rx process is completed, restore huart->RxState to Ready */
  44069. huart->RxState = HAL_UART_STATE_READY;
  44070. 8013032: 687b ldr r3, [r7, #4]
  44071. 8013034: 2220 movs r2, #32
  44072. 8013036: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  44073. /* Clear RxISR function pointer */
  44074. huart->RxISR = NULL;
  44075. 801303a: 687b ldr r3, [r7, #4]
  44076. 801303c: 2200 movs r2, #0
  44077. 801303e: 675a str r2, [r3, #116] @ 0x74
  44078. /* Initialize type of RxEvent to Transfer Complete */
  44079. huart->RxEventType = HAL_UART_RXEVENT_TC;
  44080. 8013040: 687b ldr r3, [r7, #4]
  44081. 8013042: 2200 movs r2, #0
  44082. 8013044: 671a str r2, [r3, #112] @ 0x70
  44083. if (!(IS_LPUART_INSTANCE(huart->Instance)))
  44084. 8013046: 687b ldr r3, [r7, #4]
  44085. 8013048: 681b ldr r3, [r3, #0]
  44086. 801304a: 4a60 ldr r2, [pc, #384] @ (80131cc <UART_RxISR_16BIT_FIFOEN+0x360>)
  44087. 801304c: 4293 cmp r3, r2
  44088. 801304e: d021 beq.n 8013094 <UART_RxISR_16BIT_FIFOEN+0x228>
  44089. {
  44090. /* Check that USART RTOEN bit is set */
  44091. if (READ_BIT(huart->Instance->CR2, USART_CR2_RTOEN) != 0U)
  44092. 8013050: 687b ldr r3, [r7, #4]
  44093. 8013052: 681b ldr r3, [r3, #0]
  44094. 8013054: 685b ldr r3, [r3, #4]
  44095. 8013056: f403 0300 and.w r3, r3, #8388608 @ 0x800000
  44096. 801305a: 2b00 cmp r3, #0
  44097. 801305c: d01a beq.n 8013094 <UART_RxISR_16BIT_FIFOEN+0x228>
  44098. {
  44099. /* Enable the UART Receiver Timeout Interrupt */
  44100. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_RTOIE);
  44101. 801305e: 687b ldr r3, [r7, #4]
  44102. 8013060: 681b ldr r3, [r3, #0]
  44103. 8013062: 64fb str r3, [r7, #76] @ 0x4c
  44104. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  44105. 8013064: 6cfb ldr r3, [r7, #76] @ 0x4c
  44106. 8013066: e853 3f00 ldrex r3, [r3]
  44107. 801306a: 64bb str r3, [r7, #72] @ 0x48
  44108. return(result);
  44109. 801306c: 6cbb ldr r3, [r7, #72] @ 0x48
  44110. 801306e: f023 6380 bic.w r3, r3, #67108864 @ 0x4000000
  44111. 8013072: f8c7 3094 str.w r3, [r7, #148] @ 0x94
  44112. 8013076: 687b ldr r3, [r7, #4]
  44113. 8013078: 681b ldr r3, [r3, #0]
  44114. 801307a: 461a mov r2, r3
  44115. 801307c: f8d7 3094 ldr.w r3, [r7, #148] @ 0x94
  44116. 8013080: 65bb str r3, [r7, #88] @ 0x58
  44117. 8013082: 657a str r2, [r7, #84] @ 0x54
  44118. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  44119. 8013084: 6d79 ldr r1, [r7, #84] @ 0x54
  44120. 8013086: 6dba ldr r2, [r7, #88] @ 0x58
  44121. 8013088: e841 2300 strex r3, r2, [r1]
  44122. 801308c: 653b str r3, [r7, #80] @ 0x50
  44123. return(result);
  44124. 801308e: 6d3b ldr r3, [r7, #80] @ 0x50
  44125. 8013090: 2b00 cmp r3, #0
  44126. 8013092: d1e4 bne.n 801305e <UART_RxISR_16BIT_FIFOEN+0x1f2>
  44127. }
  44128. }
  44129. /* Check current reception Mode :
  44130. If Reception till IDLE event has been selected : */
  44131. if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
  44132. 8013094: 687b ldr r3, [r7, #4]
  44133. 8013096: 6edb ldr r3, [r3, #108] @ 0x6c
  44134. 8013098: 2b01 cmp r3, #1
  44135. 801309a: d130 bne.n 80130fe <UART_RxISR_16BIT_FIFOEN+0x292>
  44136. {
  44137. /* Set reception type to Standard */
  44138. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  44139. 801309c: 687b ldr r3, [r7, #4]
  44140. 801309e: 2200 movs r2, #0
  44141. 80130a0: 66da str r2, [r3, #108] @ 0x6c
  44142. /* Disable IDLE interrupt */
  44143. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  44144. 80130a2: 687b ldr r3, [r7, #4]
  44145. 80130a4: 681b ldr r3, [r3, #0]
  44146. 80130a6: 63bb str r3, [r7, #56] @ 0x38
  44147. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  44148. 80130a8: 6bbb ldr r3, [r7, #56] @ 0x38
  44149. 80130aa: e853 3f00 ldrex r3, [r3]
  44150. 80130ae: 637b str r3, [r7, #52] @ 0x34
  44151. return(result);
  44152. 80130b0: 6b7b ldr r3, [r7, #52] @ 0x34
  44153. 80130b2: f023 0310 bic.w r3, r3, #16
  44154. 80130b6: f8c7 3090 str.w r3, [r7, #144] @ 0x90
  44155. 80130ba: 687b ldr r3, [r7, #4]
  44156. 80130bc: 681b ldr r3, [r3, #0]
  44157. 80130be: 461a mov r2, r3
  44158. 80130c0: f8d7 3090 ldr.w r3, [r7, #144] @ 0x90
  44159. 80130c4: 647b str r3, [r7, #68] @ 0x44
  44160. 80130c6: 643a str r2, [r7, #64] @ 0x40
  44161. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  44162. 80130c8: 6c39 ldr r1, [r7, #64] @ 0x40
  44163. 80130ca: 6c7a ldr r2, [r7, #68] @ 0x44
  44164. 80130cc: e841 2300 strex r3, r2, [r1]
  44165. 80130d0: 63fb str r3, [r7, #60] @ 0x3c
  44166. return(result);
  44167. 80130d2: 6bfb ldr r3, [r7, #60] @ 0x3c
  44168. 80130d4: 2b00 cmp r3, #0
  44169. 80130d6: d1e4 bne.n 80130a2 <UART_RxISR_16BIT_FIFOEN+0x236>
  44170. if (__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE) == SET)
  44171. 80130d8: 687b ldr r3, [r7, #4]
  44172. 80130da: 681b ldr r3, [r3, #0]
  44173. 80130dc: 69db ldr r3, [r3, #28]
  44174. 80130de: f003 0310 and.w r3, r3, #16
  44175. 80130e2: 2b10 cmp r3, #16
  44176. 80130e4: d103 bne.n 80130ee <UART_RxISR_16BIT_FIFOEN+0x282>
  44177. {
  44178. /* Clear IDLE Flag */
  44179. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_IDLEF);
  44180. 80130e6: 687b ldr r3, [r7, #4]
  44181. 80130e8: 681b ldr r3, [r3, #0]
  44182. 80130ea: 2210 movs r2, #16
  44183. 80130ec: 621a str r2, [r3, #32]
  44184. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  44185. /*Call registered Rx Event callback*/
  44186. huart->RxEventCallback(huart, huart->RxXferSize);
  44187. #else
  44188. /*Call legacy weak Rx Event callback*/
  44189. HAL_UARTEx_RxEventCallback(huart, huart->RxXferSize);
  44190. 80130ee: 687b ldr r3, [r7, #4]
  44191. 80130f0: f8b3 305c ldrh.w r3, [r3, #92] @ 0x5c
  44192. 80130f4: 4619 mov r1, r3
  44193. 80130f6: 6878 ldr r0, [r7, #4]
  44194. 80130f8: f7f1 fc5c bl 80049b4 <HAL_UARTEx_RxEventCallback>
  44195. 80130fc: e002 b.n 8013104 <UART_RxISR_16BIT_FIFOEN+0x298>
  44196. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  44197. /*Call registered Rx complete callback*/
  44198. huart->RxCpltCallback(huart);
  44199. #else
  44200. /*Call legacy weak Rx complete callback*/
  44201. HAL_UART_RxCpltCallback(huart);
  44202. 80130fe: 6878 ldr r0, [r7, #4]
  44203. 8013100: f7f1 fc4e bl 80049a0 <HAL_UART_RxCpltCallback>
  44204. while ((nb_rx_data > 0U) && ((isrflags & USART_ISR_RXNE_RXFNE) != 0U))
  44205. 8013104: f8b7 30a6 ldrh.w r3, [r7, #166] @ 0xa6
  44206. 8013108: 2b00 cmp r3, #0
  44207. 801310a: d006 beq.n 801311a <UART_RxISR_16BIT_FIFOEN+0x2ae>
  44208. 801310c: f8d7 30b4 ldr.w r3, [r7, #180] @ 0xb4
  44209. 8013110: f003 0320 and.w r3, r3, #32
  44210. 8013114: 2b00 cmp r3, #0
  44211. 8013116: f47f aecd bne.w 8012eb4 <UART_RxISR_16BIT_FIFOEN+0x48>
  44212. /* When remaining number of bytes to receive is less than the RX FIFO
  44213. threshold, next incoming frames are processed as if FIFO mode was
  44214. disabled (i.e. one interrupt per received frame).
  44215. */
  44216. rxdatacount = huart->RxXferCount;
  44217. 801311a: 687b ldr r3, [r7, #4]
  44218. 801311c: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  44219. 8013120: f8a7 308e strh.w r3, [r7, #142] @ 0x8e
  44220. if ((rxdatacount != 0U) && (rxdatacount < huart->NbRxDataToProcess))
  44221. 8013124: f8b7 308e ldrh.w r3, [r7, #142] @ 0x8e
  44222. 8013128: 2b00 cmp r3, #0
  44223. 801312a: d049 beq.n 80131c0 <UART_RxISR_16BIT_FIFOEN+0x354>
  44224. 801312c: 687b ldr r3, [r7, #4]
  44225. 801312e: f8b3 3068 ldrh.w r3, [r3, #104] @ 0x68
  44226. 8013132: f8b7 208e ldrh.w r2, [r7, #142] @ 0x8e
  44227. 8013136: 429a cmp r2, r3
  44228. 8013138: d242 bcs.n 80131c0 <UART_RxISR_16BIT_FIFOEN+0x354>
  44229. {
  44230. /* Disable the UART RXFT interrupt*/
  44231. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_RXFTIE);
  44232. 801313a: 687b ldr r3, [r7, #4]
  44233. 801313c: 681b ldr r3, [r3, #0]
  44234. 801313e: 3308 adds r3, #8
  44235. 8013140: 627b str r3, [r7, #36] @ 0x24
  44236. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  44237. 8013142: 6a7b ldr r3, [r7, #36] @ 0x24
  44238. 8013144: e853 3f00 ldrex r3, [r3]
  44239. 8013148: 623b str r3, [r7, #32]
  44240. return(result);
  44241. 801314a: 6a3b ldr r3, [r7, #32]
  44242. 801314c: f023 5380 bic.w r3, r3, #268435456 @ 0x10000000
  44243. 8013150: f8c7 3088 str.w r3, [r7, #136] @ 0x88
  44244. 8013154: 687b ldr r3, [r7, #4]
  44245. 8013156: 681b ldr r3, [r3, #0]
  44246. 8013158: 3308 adds r3, #8
  44247. 801315a: f8d7 2088 ldr.w r2, [r7, #136] @ 0x88
  44248. 801315e: 633a str r2, [r7, #48] @ 0x30
  44249. 8013160: 62fb str r3, [r7, #44] @ 0x2c
  44250. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  44251. 8013162: 6af9 ldr r1, [r7, #44] @ 0x2c
  44252. 8013164: 6b3a ldr r2, [r7, #48] @ 0x30
  44253. 8013166: e841 2300 strex r3, r2, [r1]
  44254. 801316a: 62bb str r3, [r7, #40] @ 0x28
  44255. return(result);
  44256. 801316c: 6abb ldr r3, [r7, #40] @ 0x28
  44257. 801316e: 2b00 cmp r3, #0
  44258. 8013170: d1e3 bne.n 801313a <UART_RxISR_16BIT_FIFOEN+0x2ce>
  44259. /* Update the RxISR function pointer */
  44260. huart->RxISR = UART_RxISR_16BIT;
  44261. 8013172: 687b ldr r3, [r7, #4]
  44262. 8013174: 4a16 ldr r2, [pc, #88] @ (80131d0 <UART_RxISR_16BIT_FIFOEN+0x364>)
  44263. 8013176: 675a str r2, [r3, #116] @ 0x74
  44264. /* Enable the UART Data Register Not Empty interrupt */
  44265. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_RXNEIE_RXFNEIE);
  44266. 8013178: 687b ldr r3, [r7, #4]
  44267. 801317a: 681b ldr r3, [r3, #0]
  44268. 801317c: 613b str r3, [r7, #16]
  44269. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  44270. 801317e: 693b ldr r3, [r7, #16]
  44271. 8013180: e853 3f00 ldrex r3, [r3]
  44272. 8013184: 60fb str r3, [r7, #12]
  44273. return(result);
  44274. 8013186: 68fb ldr r3, [r7, #12]
  44275. 8013188: f043 0320 orr.w r3, r3, #32
  44276. 801318c: f8c7 3084 str.w r3, [r7, #132] @ 0x84
  44277. 8013190: 687b ldr r3, [r7, #4]
  44278. 8013192: 681b ldr r3, [r3, #0]
  44279. 8013194: 461a mov r2, r3
  44280. 8013196: f8d7 3084 ldr.w r3, [r7, #132] @ 0x84
  44281. 801319a: 61fb str r3, [r7, #28]
  44282. 801319c: 61ba str r2, [r7, #24]
  44283. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  44284. 801319e: 69b9 ldr r1, [r7, #24]
  44285. 80131a0: 69fa ldr r2, [r7, #28]
  44286. 80131a2: e841 2300 strex r3, r2, [r1]
  44287. 80131a6: 617b str r3, [r7, #20]
  44288. return(result);
  44289. 80131a8: 697b ldr r3, [r7, #20]
  44290. 80131aa: 2b00 cmp r3, #0
  44291. 80131ac: d1e4 bne.n 8013178 <UART_RxISR_16BIT_FIFOEN+0x30c>
  44292. else
  44293. {
  44294. /* Clear RXNE interrupt flag */
  44295. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  44296. }
  44297. }
  44298. 80131ae: e007 b.n 80131c0 <UART_RxISR_16BIT_FIFOEN+0x354>
  44299. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  44300. 80131b0: 687b ldr r3, [r7, #4]
  44301. 80131b2: 681b ldr r3, [r3, #0]
  44302. 80131b4: 699a ldr r2, [r3, #24]
  44303. 80131b6: 687b ldr r3, [r7, #4]
  44304. 80131b8: 681b ldr r3, [r3, #0]
  44305. 80131ba: f042 0208 orr.w r2, r2, #8
  44306. 80131be: 619a str r2, [r3, #24]
  44307. }
  44308. 80131c0: bf00 nop
  44309. 80131c2: 37b8 adds r7, #184 @ 0xb8
  44310. 80131c4: 46bd mov sp, r7
  44311. 80131c6: bd80 pop {r7, pc}
  44312. 80131c8: effffffe .word 0xeffffffe
  44313. 80131cc: 58000c00 .word 0x58000c00
  44314. 80131d0: 08012955 .word 0x08012955
  44315. 080131d4 <HAL_UARTEx_WakeupCallback>:
  44316. * @brief UART wakeup from Stop mode callback.
  44317. * @param huart UART handle.
  44318. * @retval None
  44319. */
  44320. __weak void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart)
  44321. {
  44322. 80131d4: b480 push {r7}
  44323. 80131d6: b083 sub sp, #12
  44324. 80131d8: af00 add r7, sp, #0
  44325. 80131da: 6078 str r0, [r7, #4]
  44326. UNUSED(huart);
  44327. /* NOTE : This function should not be modified, when the callback is needed,
  44328. the HAL_UARTEx_WakeupCallback can be implemented in the user file.
  44329. */
  44330. }
  44331. 80131dc: bf00 nop
  44332. 80131de: 370c adds r7, #12
  44333. 80131e0: 46bd mov sp, r7
  44334. 80131e2: f85d 7b04 ldr.w r7, [sp], #4
  44335. 80131e6: 4770 bx lr
  44336. 080131e8 <HAL_UARTEx_RxFifoFullCallback>:
  44337. * @brief UART RX Fifo full callback.
  44338. * @param huart UART handle.
  44339. * @retval None
  44340. */
  44341. __weak void HAL_UARTEx_RxFifoFullCallback(UART_HandleTypeDef *huart)
  44342. {
  44343. 80131e8: b480 push {r7}
  44344. 80131ea: b083 sub sp, #12
  44345. 80131ec: af00 add r7, sp, #0
  44346. 80131ee: 6078 str r0, [r7, #4]
  44347. UNUSED(huart);
  44348. /* NOTE : This function should not be modified, when the callback is needed,
  44349. the HAL_UARTEx_RxFifoFullCallback can be implemented in the user file.
  44350. */
  44351. }
  44352. 80131f0: bf00 nop
  44353. 80131f2: 370c adds r7, #12
  44354. 80131f4: 46bd mov sp, r7
  44355. 80131f6: f85d 7b04 ldr.w r7, [sp], #4
  44356. 80131fa: 4770 bx lr
  44357. 080131fc <HAL_UARTEx_TxFifoEmptyCallback>:
  44358. * @brief UART TX Fifo empty callback.
  44359. * @param huart UART handle.
  44360. * @retval None
  44361. */
  44362. __weak void HAL_UARTEx_TxFifoEmptyCallback(UART_HandleTypeDef *huart)
  44363. {
  44364. 80131fc: b480 push {r7}
  44365. 80131fe: b083 sub sp, #12
  44366. 8013200: af00 add r7, sp, #0
  44367. 8013202: 6078 str r0, [r7, #4]
  44368. UNUSED(huart);
  44369. /* NOTE : This function should not be modified, when the callback is needed,
  44370. the HAL_UARTEx_TxFifoEmptyCallback can be implemented in the user file.
  44371. */
  44372. }
  44373. 8013204: bf00 nop
  44374. 8013206: 370c adds r7, #12
  44375. 8013208: 46bd mov sp, r7
  44376. 801320a: f85d 7b04 ldr.w r7, [sp], #4
  44377. 801320e: 4770 bx lr
  44378. 08013210 <HAL_UARTEx_DisableFifoMode>:
  44379. * @brief Disable the FIFO mode.
  44380. * @param huart UART handle.
  44381. * @retval HAL status
  44382. */
  44383. HAL_StatusTypeDef HAL_UARTEx_DisableFifoMode(UART_HandleTypeDef *huart)
  44384. {
  44385. 8013210: b480 push {r7}
  44386. 8013212: b085 sub sp, #20
  44387. 8013214: af00 add r7, sp, #0
  44388. 8013216: 6078 str r0, [r7, #4]
  44389. /* Check parameters */
  44390. assert_param(IS_UART_FIFO_INSTANCE(huart->Instance));
  44391. /* Process Locked */
  44392. __HAL_LOCK(huart);
  44393. 8013218: 687b ldr r3, [r7, #4]
  44394. 801321a: f893 3084 ldrb.w r3, [r3, #132] @ 0x84
  44395. 801321e: 2b01 cmp r3, #1
  44396. 8013220: d101 bne.n 8013226 <HAL_UARTEx_DisableFifoMode+0x16>
  44397. 8013222: 2302 movs r3, #2
  44398. 8013224: e027 b.n 8013276 <HAL_UARTEx_DisableFifoMode+0x66>
  44399. 8013226: 687b ldr r3, [r7, #4]
  44400. 8013228: 2201 movs r2, #1
  44401. 801322a: f883 2084 strb.w r2, [r3, #132] @ 0x84
  44402. huart->gState = HAL_UART_STATE_BUSY;
  44403. 801322e: 687b ldr r3, [r7, #4]
  44404. 8013230: 2224 movs r2, #36 @ 0x24
  44405. 8013232: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  44406. /* Save actual UART configuration */
  44407. tmpcr1 = READ_REG(huart->Instance->CR1);
  44408. 8013236: 687b ldr r3, [r7, #4]
  44409. 8013238: 681b ldr r3, [r3, #0]
  44410. 801323a: 681b ldr r3, [r3, #0]
  44411. 801323c: 60fb str r3, [r7, #12]
  44412. /* Disable UART */
  44413. __HAL_UART_DISABLE(huart);
  44414. 801323e: 687b ldr r3, [r7, #4]
  44415. 8013240: 681b ldr r3, [r3, #0]
  44416. 8013242: 681a ldr r2, [r3, #0]
  44417. 8013244: 687b ldr r3, [r7, #4]
  44418. 8013246: 681b ldr r3, [r3, #0]
  44419. 8013248: f022 0201 bic.w r2, r2, #1
  44420. 801324c: 601a str r2, [r3, #0]
  44421. /* Enable FIFO mode */
  44422. CLEAR_BIT(tmpcr1, USART_CR1_FIFOEN);
  44423. 801324e: 68fb ldr r3, [r7, #12]
  44424. 8013250: f023 5300 bic.w r3, r3, #536870912 @ 0x20000000
  44425. 8013254: 60fb str r3, [r7, #12]
  44426. huart->FifoMode = UART_FIFOMODE_DISABLE;
  44427. 8013256: 687b ldr r3, [r7, #4]
  44428. 8013258: 2200 movs r2, #0
  44429. 801325a: 665a str r2, [r3, #100] @ 0x64
  44430. /* Restore UART configuration */
  44431. WRITE_REG(huart->Instance->CR1, tmpcr1);
  44432. 801325c: 687b ldr r3, [r7, #4]
  44433. 801325e: 681b ldr r3, [r3, #0]
  44434. 8013260: 68fa ldr r2, [r7, #12]
  44435. 8013262: 601a str r2, [r3, #0]
  44436. huart->gState = HAL_UART_STATE_READY;
  44437. 8013264: 687b ldr r3, [r7, #4]
  44438. 8013266: 2220 movs r2, #32
  44439. 8013268: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  44440. /* Process Unlocked */
  44441. __HAL_UNLOCK(huart);
  44442. 801326c: 687b ldr r3, [r7, #4]
  44443. 801326e: 2200 movs r2, #0
  44444. 8013270: f883 2084 strb.w r2, [r3, #132] @ 0x84
  44445. return HAL_OK;
  44446. 8013274: 2300 movs r3, #0
  44447. }
  44448. 8013276: 4618 mov r0, r3
  44449. 8013278: 3714 adds r7, #20
  44450. 801327a: 46bd mov sp, r7
  44451. 801327c: f85d 7b04 ldr.w r7, [sp], #4
  44452. 8013280: 4770 bx lr
  44453. 08013282 <HAL_UARTEx_SetTxFifoThreshold>:
  44454. * @arg @ref UART_TXFIFO_THRESHOLD_7_8
  44455. * @arg @ref UART_TXFIFO_THRESHOLD_8_8
  44456. * @retval HAL status
  44457. */
  44458. HAL_StatusTypeDef HAL_UARTEx_SetTxFifoThreshold(UART_HandleTypeDef *huart, uint32_t Threshold)
  44459. {
  44460. 8013282: b580 push {r7, lr}
  44461. 8013284: b084 sub sp, #16
  44462. 8013286: af00 add r7, sp, #0
  44463. 8013288: 6078 str r0, [r7, #4]
  44464. 801328a: 6039 str r1, [r7, #0]
  44465. /* Check parameters */
  44466. assert_param(IS_UART_FIFO_INSTANCE(huart->Instance));
  44467. assert_param(IS_UART_TXFIFO_THRESHOLD(Threshold));
  44468. /* Process Locked */
  44469. __HAL_LOCK(huart);
  44470. 801328c: 687b ldr r3, [r7, #4]
  44471. 801328e: f893 3084 ldrb.w r3, [r3, #132] @ 0x84
  44472. 8013292: 2b01 cmp r3, #1
  44473. 8013294: d101 bne.n 801329a <HAL_UARTEx_SetTxFifoThreshold+0x18>
  44474. 8013296: 2302 movs r3, #2
  44475. 8013298: e02d b.n 80132f6 <HAL_UARTEx_SetTxFifoThreshold+0x74>
  44476. 801329a: 687b ldr r3, [r7, #4]
  44477. 801329c: 2201 movs r2, #1
  44478. 801329e: f883 2084 strb.w r2, [r3, #132] @ 0x84
  44479. huart->gState = HAL_UART_STATE_BUSY;
  44480. 80132a2: 687b ldr r3, [r7, #4]
  44481. 80132a4: 2224 movs r2, #36 @ 0x24
  44482. 80132a6: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  44483. /* Save actual UART configuration */
  44484. tmpcr1 = READ_REG(huart->Instance->CR1);
  44485. 80132aa: 687b ldr r3, [r7, #4]
  44486. 80132ac: 681b ldr r3, [r3, #0]
  44487. 80132ae: 681b ldr r3, [r3, #0]
  44488. 80132b0: 60fb str r3, [r7, #12]
  44489. /* Disable UART */
  44490. __HAL_UART_DISABLE(huart);
  44491. 80132b2: 687b ldr r3, [r7, #4]
  44492. 80132b4: 681b ldr r3, [r3, #0]
  44493. 80132b6: 681a ldr r2, [r3, #0]
  44494. 80132b8: 687b ldr r3, [r7, #4]
  44495. 80132ba: 681b ldr r3, [r3, #0]
  44496. 80132bc: f022 0201 bic.w r2, r2, #1
  44497. 80132c0: 601a str r2, [r3, #0]
  44498. /* Update TX threshold configuration */
  44499. MODIFY_REG(huart->Instance->CR3, USART_CR3_TXFTCFG, Threshold);
  44500. 80132c2: 687b ldr r3, [r7, #4]
  44501. 80132c4: 681b ldr r3, [r3, #0]
  44502. 80132c6: 689b ldr r3, [r3, #8]
  44503. 80132c8: f023 4160 bic.w r1, r3, #3758096384 @ 0xe0000000
  44504. 80132cc: 687b ldr r3, [r7, #4]
  44505. 80132ce: 681b ldr r3, [r3, #0]
  44506. 80132d0: 683a ldr r2, [r7, #0]
  44507. 80132d2: 430a orrs r2, r1
  44508. 80132d4: 609a str r2, [r3, #8]
  44509. /* Determine the number of data to process during RX/TX ISR execution */
  44510. UARTEx_SetNbDataToProcess(huart);
  44511. 80132d6: 6878 ldr r0, [r7, #4]
  44512. 80132d8: f000 f8a0 bl 801341c <UARTEx_SetNbDataToProcess>
  44513. /* Restore UART configuration */
  44514. WRITE_REG(huart->Instance->CR1, tmpcr1);
  44515. 80132dc: 687b ldr r3, [r7, #4]
  44516. 80132de: 681b ldr r3, [r3, #0]
  44517. 80132e0: 68fa ldr r2, [r7, #12]
  44518. 80132e2: 601a str r2, [r3, #0]
  44519. huart->gState = HAL_UART_STATE_READY;
  44520. 80132e4: 687b ldr r3, [r7, #4]
  44521. 80132e6: 2220 movs r2, #32
  44522. 80132e8: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  44523. /* Process Unlocked */
  44524. __HAL_UNLOCK(huart);
  44525. 80132ec: 687b ldr r3, [r7, #4]
  44526. 80132ee: 2200 movs r2, #0
  44527. 80132f0: f883 2084 strb.w r2, [r3, #132] @ 0x84
  44528. return HAL_OK;
  44529. 80132f4: 2300 movs r3, #0
  44530. }
  44531. 80132f6: 4618 mov r0, r3
  44532. 80132f8: 3710 adds r7, #16
  44533. 80132fa: 46bd mov sp, r7
  44534. 80132fc: bd80 pop {r7, pc}
  44535. 080132fe <HAL_UARTEx_SetRxFifoThreshold>:
  44536. * @arg @ref UART_RXFIFO_THRESHOLD_7_8
  44537. * @arg @ref UART_RXFIFO_THRESHOLD_8_8
  44538. * @retval HAL status
  44539. */
  44540. HAL_StatusTypeDef HAL_UARTEx_SetRxFifoThreshold(UART_HandleTypeDef *huart, uint32_t Threshold)
  44541. {
  44542. 80132fe: b580 push {r7, lr}
  44543. 8013300: b084 sub sp, #16
  44544. 8013302: af00 add r7, sp, #0
  44545. 8013304: 6078 str r0, [r7, #4]
  44546. 8013306: 6039 str r1, [r7, #0]
  44547. /* Check the parameters */
  44548. assert_param(IS_UART_FIFO_INSTANCE(huart->Instance));
  44549. assert_param(IS_UART_RXFIFO_THRESHOLD(Threshold));
  44550. /* Process Locked */
  44551. __HAL_LOCK(huart);
  44552. 8013308: 687b ldr r3, [r7, #4]
  44553. 801330a: f893 3084 ldrb.w r3, [r3, #132] @ 0x84
  44554. 801330e: 2b01 cmp r3, #1
  44555. 8013310: d101 bne.n 8013316 <HAL_UARTEx_SetRxFifoThreshold+0x18>
  44556. 8013312: 2302 movs r3, #2
  44557. 8013314: e02d b.n 8013372 <HAL_UARTEx_SetRxFifoThreshold+0x74>
  44558. 8013316: 687b ldr r3, [r7, #4]
  44559. 8013318: 2201 movs r2, #1
  44560. 801331a: f883 2084 strb.w r2, [r3, #132] @ 0x84
  44561. huart->gState = HAL_UART_STATE_BUSY;
  44562. 801331e: 687b ldr r3, [r7, #4]
  44563. 8013320: 2224 movs r2, #36 @ 0x24
  44564. 8013322: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  44565. /* Save actual UART configuration */
  44566. tmpcr1 = READ_REG(huart->Instance->CR1);
  44567. 8013326: 687b ldr r3, [r7, #4]
  44568. 8013328: 681b ldr r3, [r3, #0]
  44569. 801332a: 681b ldr r3, [r3, #0]
  44570. 801332c: 60fb str r3, [r7, #12]
  44571. /* Disable UART */
  44572. __HAL_UART_DISABLE(huart);
  44573. 801332e: 687b ldr r3, [r7, #4]
  44574. 8013330: 681b ldr r3, [r3, #0]
  44575. 8013332: 681a ldr r2, [r3, #0]
  44576. 8013334: 687b ldr r3, [r7, #4]
  44577. 8013336: 681b ldr r3, [r3, #0]
  44578. 8013338: f022 0201 bic.w r2, r2, #1
  44579. 801333c: 601a str r2, [r3, #0]
  44580. /* Update RX threshold configuration */
  44581. MODIFY_REG(huart->Instance->CR3, USART_CR3_RXFTCFG, Threshold);
  44582. 801333e: 687b ldr r3, [r7, #4]
  44583. 8013340: 681b ldr r3, [r3, #0]
  44584. 8013342: 689b ldr r3, [r3, #8]
  44585. 8013344: f023 6160 bic.w r1, r3, #234881024 @ 0xe000000
  44586. 8013348: 687b ldr r3, [r7, #4]
  44587. 801334a: 681b ldr r3, [r3, #0]
  44588. 801334c: 683a ldr r2, [r7, #0]
  44589. 801334e: 430a orrs r2, r1
  44590. 8013350: 609a str r2, [r3, #8]
  44591. /* Determine the number of data to process during RX/TX ISR execution */
  44592. UARTEx_SetNbDataToProcess(huart);
  44593. 8013352: 6878 ldr r0, [r7, #4]
  44594. 8013354: f000 f862 bl 801341c <UARTEx_SetNbDataToProcess>
  44595. /* Restore UART configuration */
  44596. WRITE_REG(huart->Instance->CR1, tmpcr1);
  44597. 8013358: 687b ldr r3, [r7, #4]
  44598. 801335a: 681b ldr r3, [r3, #0]
  44599. 801335c: 68fa ldr r2, [r7, #12]
  44600. 801335e: 601a str r2, [r3, #0]
  44601. huart->gState = HAL_UART_STATE_READY;
  44602. 8013360: 687b ldr r3, [r7, #4]
  44603. 8013362: 2220 movs r2, #32
  44604. 8013364: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  44605. /* Process Unlocked */
  44606. __HAL_UNLOCK(huart);
  44607. 8013368: 687b ldr r3, [r7, #4]
  44608. 801336a: 2200 movs r2, #0
  44609. 801336c: f883 2084 strb.w r2, [r3, #132] @ 0x84
  44610. return HAL_OK;
  44611. 8013370: 2300 movs r3, #0
  44612. }
  44613. 8013372: 4618 mov r0, r3
  44614. 8013374: 3710 adds r7, #16
  44615. 8013376: 46bd mov sp, r7
  44616. 8013378: bd80 pop {r7, pc}
  44617. 0801337a <HAL_UARTEx_ReceiveToIdle_IT>:
  44618. * @param pData Pointer to data buffer (uint8_t or uint16_t data elements).
  44619. * @param Size Amount of data elements (uint8_t or uint16_t) to be received.
  44620. * @retval HAL status
  44621. */
  44622. HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
  44623. {
  44624. 801337a: b580 push {r7, lr}
  44625. 801337c: b08c sub sp, #48 @ 0x30
  44626. 801337e: af00 add r7, sp, #0
  44627. 8013380: 60f8 str r0, [r7, #12]
  44628. 8013382: 60b9 str r1, [r7, #8]
  44629. 8013384: 4613 mov r3, r2
  44630. 8013386: 80fb strh r3, [r7, #6]
  44631. HAL_StatusTypeDef status = HAL_OK;
  44632. 8013388: 2300 movs r3, #0
  44633. 801338a: f887 302f strb.w r3, [r7, #47] @ 0x2f
  44634. /* Check that a Rx process is not already ongoing */
  44635. if (huart->RxState == HAL_UART_STATE_READY)
  44636. 801338e: 68fb ldr r3, [r7, #12]
  44637. 8013390: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c
  44638. 8013394: 2b20 cmp r3, #32
  44639. 8013396: d13b bne.n 8013410 <HAL_UARTEx_ReceiveToIdle_IT+0x96>
  44640. {
  44641. if ((pData == NULL) || (Size == 0U))
  44642. 8013398: 68bb ldr r3, [r7, #8]
  44643. 801339a: 2b00 cmp r3, #0
  44644. 801339c: d002 beq.n 80133a4 <HAL_UARTEx_ReceiveToIdle_IT+0x2a>
  44645. 801339e: 88fb ldrh r3, [r7, #6]
  44646. 80133a0: 2b00 cmp r3, #0
  44647. 80133a2: d101 bne.n 80133a8 <HAL_UARTEx_ReceiveToIdle_IT+0x2e>
  44648. {
  44649. return HAL_ERROR;
  44650. 80133a4: 2301 movs r3, #1
  44651. 80133a6: e034 b.n 8013412 <HAL_UARTEx_ReceiveToIdle_IT+0x98>
  44652. }
  44653. /* Set Reception type to reception till IDLE Event*/
  44654. huart->ReceptionType = HAL_UART_RECEPTION_TOIDLE;
  44655. 80133a8: 68fb ldr r3, [r7, #12]
  44656. 80133aa: 2201 movs r2, #1
  44657. 80133ac: 66da str r2, [r3, #108] @ 0x6c
  44658. huart->RxEventType = HAL_UART_RXEVENT_TC;
  44659. 80133ae: 68fb ldr r3, [r7, #12]
  44660. 80133b0: 2200 movs r2, #0
  44661. 80133b2: 671a str r2, [r3, #112] @ 0x70
  44662. (void)UART_Start_Receive_IT(huart, pData, Size);
  44663. 80133b4: 88fb ldrh r3, [r7, #6]
  44664. 80133b6: 461a mov r2, r3
  44665. 80133b8: 68b9 ldr r1, [r7, #8]
  44666. 80133ba: 68f8 ldr r0, [r7, #12]
  44667. 80133bc: f7fe fe82 bl 80120c4 <UART_Start_Receive_IT>
  44668. if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
  44669. 80133c0: 68fb ldr r3, [r7, #12]
  44670. 80133c2: 6edb ldr r3, [r3, #108] @ 0x6c
  44671. 80133c4: 2b01 cmp r3, #1
  44672. 80133c6: d11d bne.n 8013404 <HAL_UARTEx_ReceiveToIdle_IT+0x8a>
  44673. {
  44674. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_IDLEF);
  44675. 80133c8: 68fb ldr r3, [r7, #12]
  44676. 80133ca: 681b ldr r3, [r3, #0]
  44677. 80133cc: 2210 movs r2, #16
  44678. 80133ce: 621a str r2, [r3, #32]
  44679. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  44680. 80133d0: 68fb ldr r3, [r7, #12]
  44681. 80133d2: 681b ldr r3, [r3, #0]
  44682. 80133d4: 61bb str r3, [r7, #24]
  44683. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  44684. 80133d6: 69bb ldr r3, [r7, #24]
  44685. 80133d8: e853 3f00 ldrex r3, [r3]
  44686. 80133dc: 617b str r3, [r7, #20]
  44687. return(result);
  44688. 80133de: 697b ldr r3, [r7, #20]
  44689. 80133e0: f043 0310 orr.w r3, r3, #16
  44690. 80133e4: 62bb str r3, [r7, #40] @ 0x28
  44691. 80133e6: 68fb ldr r3, [r7, #12]
  44692. 80133e8: 681b ldr r3, [r3, #0]
  44693. 80133ea: 461a mov r2, r3
  44694. 80133ec: 6abb ldr r3, [r7, #40] @ 0x28
  44695. 80133ee: 627b str r3, [r7, #36] @ 0x24
  44696. 80133f0: 623a str r2, [r7, #32]
  44697. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  44698. 80133f2: 6a39 ldr r1, [r7, #32]
  44699. 80133f4: 6a7a ldr r2, [r7, #36] @ 0x24
  44700. 80133f6: e841 2300 strex r3, r2, [r1]
  44701. 80133fa: 61fb str r3, [r7, #28]
  44702. return(result);
  44703. 80133fc: 69fb ldr r3, [r7, #28]
  44704. 80133fe: 2b00 cmp r3, #0
  44705. 8013400: d1e6 bne.n 80133d0 <HAL_UARTEx_ReceiveToIdle_IT+0x56>
  44706. 8013402: e002 b.n 801340a <HAL_UARTEx_ReceiveToIdle_IT+0x90>
  44707. {
  44708. /* In case of errors already pending when reception is started,
  44709. Interrupts may have already been raised and lead to reception abortion.
  44710. (Overrun error for instance).
  44711. In such case Reception Type has been reset to HAL_UART_RECEPTION_STANDARD. */
  44712. status = HAL_ERROR;
  44713. 8013404: 2301 movs r3, #1
  44714. 8013406: f887 302f strb.w r3, [r7, #47] @ 0x2f
  44715. }
  44716. return status;
  44717. 801340a: f897 302f ldrb.w r3, [r7, #47] @ 0x2f
  44718. 801340e: e000 b.n 8013412 <HAL_UARTEx_ReceiveToIdle_IT+0x98>
  44719. }
  44720. else
  44721. {
  44722. return HAL_BUSY;
  44723. 8013410: 2302 movs r3, #2
  44724. }
  44725. }
  44726. 8013412: 4618 mov r0, r3
  44727. 8013414: 3730 adds r7, #48 @ 0x30
  44728. 8013416: 46bd mov sp, r7
  44729. 8013418: bd80 pop {r7, pc}
  44730. ...
  44731. 0801341c <UARTEx_SetNbDataToProcess>:
  44732. * the UART configuration registers.
  44733. * @param huart UART handle.
  44734. * @retval None
  44735. */
  44736. static void UARTEx_SetNbDataToProcess(UART_HandleTypeDef *huart)
  44737. {
  44738. 801341c: b480 push {r7}
  44739. 801341e: b085 sub sp, #20
  44740. 8013420: af00 add r7, sp, #0
  44741. 8013422: 6078 str r0, [r7, #4]
  44742. uint8_t rx_fifo_threshold;
  44743. uint8_t tx_fifo_threshold;
  44744. static const uint8_t numerator[] = {1U, 1U, 1U, 3U, 7U, 1U, 0U, 0U};
  44745. static const uint8_t denominator[] = {8U, 4U, 2U, 4U, 8U, 1U, 1U, 1U};
  44746. if (huart->FifoMode == UART_FIFOMODE_DISABLE)
  44747. 8013424: 687b ldr r3, [r7, #4]
  44748. 8013426: 6e5b ldr r3, [r3, #100] @ 0x64
  44749. 8013428: 2b00 cmp r3, #0
  44750. 801342a: d108 bne.n 801343e <UARTEx_SetNbDataToProcess+0x22>
  44751. {
  44752. huart->NbTxDataToProcess = 1U;
  44753. 801342c: 687b ldr r3, [r7, #4]
  44754. 801342e: 2201 movs r2, #1
  44755. 8013430: f8a3 206a strh.w r2, [r3, #106] @ 0x6a
  44756. huart->NbRxDataToProcess = 1U;
  44757. 8013434: 687b ldr r3, [r7, #4]
  44758. 8013436: 2201 movs r2, #1
  44759. 8013438: f8a3 2068 strh.w r2, [r3, #104] @ 0x68
  44760. huart->NbTxDataToProcess = ((uint16_t)tx_fifo_depth * numerator[tx_fifo_threshold]) /
  44761. (uint16_t)denominator[tx_fifo_threshold];
  44762. huart->NbRxDataToProcess = ((uint16_t)rx_fifo_depth * numerator[rx_fifo_threshold]) /
  44763. (uint16_t)denominator[rx_fifo_threshold];
  44764. }
  44765. }
  44766. 801343c: e031 b.n 80134a2 <UARTEx_SetNbDataToProcess+0x86>
  44767. rx_fifo_depth = RX_FIFO_DEPTH;
  44768. 801343e: 2310 movs r3, #16
  44769. 8013440: 73fb strb r3, [r7, #15]
  44770. tx_fifo_depth = TX_FIFO_DEPTH;
  44771. 8013442: 2310 movs r3, #16
  44772. 8013444: 73bb strb r3, [r7, #14]
  44773. rx_fifo_threshold = (uint8_t)(READ_BIT(huart->Instance->CR3, USART_CR3_RXFTCFG) >> USART_CR3_RXFTCFG_Pos);
  44774. 8013446: 687b ldr r3, [r7, #4]
  44775. 8013448: 681b ldr r3, [r3, #0]
  44776. 801344a: 689b ldr r3, [r3, #8]
  44777. 801344c: 0e5b lsrs r3, r3, #25
  44778. 801344e: b2db uxtb r3, r3
  44779. 8013450: f003 0307 and.w r3, r3, #7
  44780. 8013454: 737b strb r3, [r7, #13]
  44781. tx_fifo_threshold = (uint8_t)(READ_BIT(huart->Instance->CR3, USART_CR3_TXFTCFG) >> USART_CR3_TXFTCFG_Pos);
  44782. 8013456: 687b ldr r3, [r7, #4]
  44783. 8013458: 681b ldr r3, [r3, #0]
  44784. 801345a: 689b ldr r3, [r3, #8]
  44785. 801345c: 0f5b lsrs r3, r3, #29
  44786. 801345e: b2db uxtb r3, r3
  44787. 8013460: f003 0307 and.w r3, r3, #7
  44788. 8013464: 733b strb r3, [r7, #12]
  44789. huart->NbTxDataToProcess = ((uint16_t)tx_fifo_depth * numerator[tx_fifo_threshold]) /
  44790. 8013466: 7bbb ldrb r3, [r7, #14]
  44791. 8013468: 7b3a ldrb r2, [r7, #12]
  44792. 801346a: 4911 ldr r1, [pc, #68] @ (80134b0 <UARTEx_SetNbDataToProcess+0x94>)
  44793. 801346c: 5c8a ldrb r2, [r1, r2]
  44794. 801346e: fb02 f303 mul.w r3, r2, r3
  44795. (uint16_t)denominator[tx_fifo_threshold];
  44796. 8013472: 7b3a ldrb r2, [r7, #12]
  44797. 8013474: 490f ldr r1, [pc, #60] @ (80134b4 <UARTEx_SetNbDataToProcess+0x98>)
  44798. 8013476: 5c8a ldrb r2, [r1, r2]
  44799. huart->NbTxDataToProcess = ((uint16_t)tx_fifo_depth * numerator[tx_fifo_threshold]) /
  44800. 8013478: fb93 f3f2 sdiv r3, r3, r2
  44801. 801347c: b29a uxth r2, r3
  44802. 801347e: 687b ldr r3, [r7, #4]
  44803. 8013480: f8a3 206a strh.w r2, [r3, #106] @ 0x6a
  44804. huart->NbRxDataToProcess = ((uint16_t)rx_fifo_depth * numerator[rx_fifo_threshold]) /
  44805. 8013484: 7bfb ldrb r3, [r7, #15]
  44806. 8013486: 7b7a ldrb r2, [r7, #13]
  44807. 8013488: 4909 ldr r1, [pc, #36] @ (80134b0 <UARTEx_SetNbDataToProcess+0x94>)
  44808. 801348a: 5c8a ldrb r2, [r1, r2]
  44809. 801348c: fb02 f303 mul.w r3, r2, r3
  44810. (uint16_t)denominator[rx_fifo_threshold];
  44811. 8013490: 7b7a ldrb r2, [r7, #13]
  44812. 8013492: 4908 ldr r1, [pc, #32] @ (80134b4 <UARTEx_SetNbDataToProcess+0x98>)
  44813. 8013494: 5c8a ldrb r2, [r1, r2]
  44814. huart->NbRxDataToProcess = ((uint16_t)rx_fifo_depth * numerator[rx_fifo_threshold]) /
  44815. 8013496: fb93 f3f2 sdiv r3, r3, r2
  44816. 801349a: b29a uxth r2, r3
  44817. 801349c: 687b ldr r3, [r7, #4]
  44818. 801349e: f8a3 2068 strh.w r2, [r3, #104] @ 0x68
  44819. }
  44820. 80134a2: bf00 nop
  44821. 80134a4: 3714 adds r7, #20
  44822. 80134a6: 46bd mov sp, r7
  44823. 80134a8: f85d 7b04 ldr.w r7, [sp], #4
  44824. 80134ac: 4770 bx lr
  44825. 80134ae: bf00 nop
  44826. 80134b0: 08018b8c .word 0x08018b8c
  44827. 80134b4: 08018b94 .word 0x08018b94
  44828. 080134b8 <__NVIC_SetPriority>:
  44829. {
  44830. 80134b8: b480 push {r7}
  44831. 80134ba: b083 sub sp, #12
  44832. 80134bc: af00 add r7, sp, #0
  44833. 80134be: 4603 mov r3, r0
  44834. 80134c0: 6039 str r1, [r7, #0]
  44835. 80134c2: 80fb strh r3, [r7, #6]
  44836. if ((int32_t)(IRQn) >= 0)
  44837. 80134c4: f9b7 3006 ldrsh.w r3, [r7, #6]
  44838. 80134c8: 2b00 cmp r3, #0
  44839. 80134ca: db0a blt.n 80134e2 <__NVIC_SetPriority+0x2a>
  44840. NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
  44841. 80134cc: 683b ldr r3, [r7, #0]
  44842. 80134ce: b2da uxtb r2, r3
  44843. 80134d0: 490c ldr r1, [pc, #48] @ (8013504 <__NVIC_SetPriority+0x4c>)
  44844. 80134d2: f9b7 3006 ldrsh.w r3, [r7, #6]
  44845. 80134d6: 0112 lsls r2, r2, #4
  44846. 80134d8: b2d2 uxtb r2, r2
  44847. 80134da: 440b add r3, r1
  44848. 80134dc: f883 2300 strb.w r2, [r3, #768] @ 0x300
  44849. }
  44850. 80134e0: e00a b.n 80134f8 <__NVIC_SetPriority+0x40>
  44851. SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
  44852. 80134e2: 683b ldr r3, [r7, #0]
  44853. 80134e4: b2da uxtb r2, r3
  44854. 80134e6: 4908 ldr r1, [pc, #32] @ (8013508 <__NVIC_SetPriority+0x50>)
  44855. 80134e8: 88fb ldrh r3, [r7, #6]
  44856. 80134ea: f003 030f and.w r3, r3, #15
  44857. 80134ee: 3b04 subs r3, #4
  44858. 80134f0: 0112 lsls r2, r2, #4
  44859. 80134f2: b2d2 uxtb r2, r2
  44860. 80134f4: 440b add r3, r1
  44861. 80134f6: 761a strb r2, [r3, #24]
  44862. }
  44863. 80134f8: bf00 nop
  44864. 80134fa: 370c adds r7, #12
  44865. 80134fc: 46bd mov sp, r7
  44866. 80134fe: f85d 7b04 ldr.w r7, [sp], #4
  44867. 8013502: 4770 bx lr
  44868. 8013504: e000e100 .word 0xe000e100
  44869. 8013508: e000ed00 .word 0xe000ed00
  44870. 0801350c <SysTick_Handler>:
  44871. /*
  44872. SysTick handler implementation that also clears overflow flag.
  44873. */
  44874. #if (USE_CUSTOM_SYSTICK_HANDLER_IMPLEMENTATION == 0)
  44875. void SysTick_Handler (void) {
  44876. 801350c: b580 push {r7, lr}
  44877. 801350e: af00 add r7, sp, #0
  44878. /* Clear overflow flag */
  44879. SysTick->CTRL;
  44880. 8013510: 4b05 ldr r3, [pc, #20] @ (8013528 <SysTick_Handler+0x1c>)
  44881. 8013512: 681b ldr r3, [r3, #0]
  44882. if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED) {
  44883. 8013514: f002 fd1e bl 8015f54 <xTaskGetSchedulerState>
  44884. 8013518: 4603 mov r3, r0
  44885. 801351a: 2b01 cmp r3, #1
  44886. 801351c: d001 beq.n 8013522 <SysTick_Handler+0x16>
  44887. /* Call tick handler */
  44888. xPortSysTickHandler();
  44889. 801351e: f003 ff2b bl 8017378 <xPortSysTickHandler>
  44890. }
  44891. }
  44892. 8013522: bf00 nop
  44893. 8013524: bd80 pop {r7, pc}
  44894. 8013526: bf00 nop
  44895. 8013528: e000e010 .word 0xe000e010
  44896. 0801352c <SVC_Setup>:
  44897. #endif /* SysTick */
  44898. /*
  44899. Setup SVC to reset value.
  44900. */
  44901. __STATIC_INLINE void SVC_Setup (void) {
  44902. 801352c: b580 push {r7, lr}
  44903. 801352e: af00 add r7, sp, #0
  44904. #if (__ARM_ARCH_7A__ == 0U)
  44905. /* Service Call interrupt might be configured before kernel start */
  44906. /* and when its priority is lower or equal to BASEPRI, svc intruction */
  44907. /* causes a Hard Fault. */
  44908. NVIC_SetPriority (SVCall_IRQ_NBR, 0U);
  44909. 8013530: 2100 movs r1, #0
  44910. 8013532: f06f 0004 mvn.w r0, #4
  44911. 8013536: f7ff ffbf bl 80134b8 <__NVIC_SetPriority>
  44912. #endif
  44913. }
  44914. 801353a: bf00 nop
  44915. 801353c: bd80 pop {r7, pc}
  44916. ...
  44917. 08013540 <osKernelInitialize>:
  44918. static uint32_t OS_Tick_GetOverflow (void);
  44919. /* Get OS Tick interval */
  44920. static uint32_t OS_Tick_GetInterval (void);
  44921. /*---------------------------------------------------------------------------*/
  44922. osStatus_t osKernelInitialize (void) {
  44923. 8013540: b480 push {r7}
  44924. 8013542: b083 sub sp, #12
  44925. 8013544: af00 add r7, sp, #0
  44926. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  44927. 8013546: f3ef 8305 mrs r3, IPSR
  44928. 801354a: 603b str r3, [r7, #0]
  44929. return(result);
  44930. 801354c: 683b ldr r3, [r7, #0]
  44931. osStatus_t stat;
  44932. if (IS_IRQ()) {
  44933. 801354e: 2b00 cmp r3, #0
  44934. 8013550: d003 beq.n 801355a <osKernelInitialize+0x1a>
  44935. stat = osErrorISR;
  44936. 8013552: f06f 0305 mvn.w r3, #5
  44937. 8013556: 607b str r3, [r7, #4]
  44938. 8013558: e00c b.n 8013574 <osKernelInitialize+0x34>
  44939. }
  44940. else {
  44941. if (KernelState == osKernelInactive) {
  44942. 801355a: 4b0a ldr r3, [pc, #40] @ (8013584 <osKernelInitialize+0x44>)
  44943. 801355c: 681b ldr r3, [r3, #0]
  44944. 801355e: 2b00 cmp r3, #0
  44945. 8013560: d105 bne.n 801356e <osKernelInitialize+0x2e>
  44946. EvrFreeRTOSSetup(0U);
  44947. #endif
  44948. #if defined(USE_FreeRTOS_HEAP_5) && (HEAP_5_REGION_SETUP == 1)
  44949. vPortDefineHeapRegions (configHEAP_5_REGIONS);
  44950. #endif
  44951. KernelState = osKernelReady;
  44952. 8013562: 4b08 ldr r3, [pc, #32] @ (8013584 <osKernelInitialize+0x44>)
  44953. 8013564: 2201 movs r2, #1
  44954. 8013566: 601a str r2, [r3, #0]
  44955. stat = osOK;
  44956. 8013568: 2300 movs r3, #0
  44957. 801356a: 607b str r3, [r7, #4]
  44958. 801356c: e002 b.n 8013574 <osKernelInitialize+0x34>
  44959. } else {
  44960. stat = osError;
  44961. 801356e: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  44962. 8013572: 607b str r3, [r7, #4]
  44963. }
  44964. }
  44965. return (stat);
  44966. 8013574: 687b ldr r3, [r7, #4]
  44967. }
  44968. 8013576: 4618 mov r0, r3
  44969. 8013578: 370c adds r7, #12
  44970. 801357a: 46bd mov sp, r7
  44971. 801357c: f85d 7b04 ldr.w r7, [sp], #4
  44972. 8013580: 4770 bx lr
  44973. 8013582: bf00 nop
  44974. 8013584: 24001080 .word 0x24001080
  44975. 08013588 <osKernelStart>:
  44976. }
  44977. return (state);
  44978. }
  44979. osStatus_t osKernelStart (void) {
  44980. 8013588: b580 push {r7, lr}
  44981. 801358a: b082 sub sp, #8
  44982. 801358c: af00 add r7, sp, #0
  44983. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  44984. 801358e: f3ef 8305 mrs r3, IPSR
  44985. 8013592: 603b str r3, [r7, #0]
  44986. return(result);
  44987. 8013594: 683b ldr r3, [r7, #0]
  44988. osStatus_t stat;
  44989. if (IS_IRQ()) {
  44990. 8013596: 2b00 cmp r3, #0
  44991. 8013598: d003 beq.n 80135a2 <osKernelStart+0x1a>
  44992. stat = osErrorISR;
  44993. 801359a: f06f 0305 mvn.w r3, #5
  44994. 801359e: 607b str r3, [r7, #4]
  44995. 80135a0: e010 b.n 80135c4 <osKernelStart+0x3c>
  44996. }
  44997. else {
  44998. if (KernelState == osKernelReady) {
  44999. 80135a2: 4b0b ldr r3, [pc, #44] @ (80135d0 <osKernelStart+0x48>)
  45000. 80135a4: 681b ldr r3, [r3, #0]
  45001. 80135a6: 2b01 cmp r3, #1
  45002. 80135a8: d109 bne.n 80135be <osKernelStart+0x36>
  45003. /* Ensure SVC priority is at the reset value */
  45004. SVC_Setup();
  45005. 80135aa: f7ff ffbf bl 801352c <SVC_Setup>
  45006. /* Change state to enable IRQ masking check */
  45007. KernelState = osKernelRunning;
  45008. 80135ae: 4b08 ldr r3, [pc, #32] @ (80135d0 <osKernelStart+0x48>)
  45009. 80135b0: 2202 movs r2, #2
  45010. 80135b2: 601a str r2, [r3, #0]
  45011. /* Start the kernel scheduler */
  45012. vTaskStartScheduler();
  45013. 80135b4: f002 f824 bl 8015600 <vTaskStartScheduler>
  45014. stat = osOK;
  45015. 80135b8: 2300 movs r3, #0
  45016. 80135ba: 607b str r3, [r7, #4]
  45017. 80135bc: e002 b.n 80135c4 <osKernelStart+0x3c>
  45018. } else {
  45019. stat = osError;
  45020. 80135be: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  45021. 80135c2: 607b str r3, [r7, #4]
  45022. }
  45023. }
  45024. return (stat);
  45025. 80135c4: 687b ldr r3, [r7, #4]
  45026. }
  45027. 80135c6: 4618 mov r0, r3
  45028. 80135c8: 3708 adds r7, #8
  45029. 80135ca: 46bd mov sp, r7
  45030. 80135cc: bd80 pop {r7, pc}
  45031. 80135ce: bf00 nop
  45032. 80135d0: 24001080 .word 0x24001080
  45033. 080135d4 <osThreadNew>:
  45034. return (configCPU_CLOCK_HZ);
  45035. }
  45036. /*---------------------------------------------------------------------------*/
  45037. osThreadId_t osThreadNew (osThreadFunc_t func, void *argument, const osThreadAttr_t *attr) {
  45038. 80135d4: b580 push {r7, lr}
  45039. 80135d6: b08e sub sp, #56 @ 0x38
  45040. 80135d8: af04 add r7, sp, #16
  45041. 80135da: 60f8 str r0, [r7, #12]
  45042. 80135dc: 60b9 str r1, [r7, #8]
  45043. 80135de: 607a str r2, [r7, #4]
  45044. uint32_t stack;
  45045. TaskHandle_t hTask;
  45046. UBaseType_t prio;
  45047. int32_t mem;
  45048. hTask = NULL;
  45049. 80135e0: 2300 movs r3, #0
  45050. 80135e2: 613b str r3, [r7, #16]
  45051. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  45052. 80135e4: f3ef 8305 mrs r3, IPSR
  45053. 80135e8: 617b str r3, [r7, #20]
  45054. return(result);
  45055. 80135ea: 697b ldr r3, [r7, #20]
  45056. if (!IS_IRQ() && (func != NULL)) {
  45057. 80135ec: 2b00 cmp r3, #0
  45058. 80135ee: d17f bne.n 80136f0 <osThreadNew+0x11c>
  45059. 80135f0: 68fb ldr r3, [r7, #12]
  45060. 80135f2: 2b00 cmp r3, #0
  45061. 80135f4: d07c beq.n 80136f0 <osThreadNew+0x11c>
  45062. stack = configMINIMAL_STACK_SIZE;
  45063. 80135f6: f44f 7300 mov.w r3, #512 @ 0x200
  45064. 80135fa: 623b str r3, [r7, #32]
  45065. prio = (UBaseType_t)osPriorityNormal;
  45066. 80135fc: 2318 movs r3, #24
  45067. 80135fe: 61fb str r3, [r7, #28]
  45068. name = NULL;
  45069. 8013600: 2300 movs r3, #0
  45070. 8013602: 627b str r3, [r7, #36] @ 0x24
  45071. mem = -1;
  45072. 8013604: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  45073. 8013608: 61bb str r3, [r7, #24]
  45074. if (attr != NULL) {
  45075. 801360a: 687b ldr r3, [r7, #4]
  45076. 801360c: 2b00 cmp r3, #0
  45077. 801360e: d045 beq.n 801369c <osThreadNew+0xc8>
  45078. if (attr->name != NULL) {
  45079. 8013610: 687b ldr r3, [r7, #4]
  45080. 8013612: 681b ldr r3, [r3, #0]
  45081. 8013614: 2b00 cmp r3, #0
  45082. 8013616: d002 beq.n 801361e <osThreadNew+0x4a>
  45083. name = attr->name;
  45084. 8013618: 687b ldr r3, [r7, #4]
  45085. 801361a: 681b ldr r3, [r3, #0]
  45086. 801361c: 627b str r3, [r7, #36] @ 0x24
  45087. }
  45088. if (attr->priority != osPriorityNone) {
  45089. 801361e: 687b ldr r3, [r7, #4]
  45090. 8013620: 699b ldr r3, [r3, #24]
  45091. 8013622: 2b00 cmp r3, #0
  45092. 8013624: d002 beq.n 801362c <osThreadNew+0x58>
  45093. prio = (UBaseType_t)attr->priority;
  45094. 8013626: 687b ldr r3, [r7, #4]
  45095. 8013628: 699b ldr r3, [r3, #24]
  45096. 801362a: 61fb str r3, [r7, #28]
  45097. }
  45098. if ((prio < osPriorityIdle) || (prio > osPriorityISR) || ((attr->attr_bits & osThreadJoinable) == osThreadJoinable)) {
  45099. 801362c: 69fb ldr r3, [r7, #28]
  45100. 801362e: 2b00 cmp r3, #0
  45101. 8013630: d008 beq.n 8013644 <osThreadNew+0x70>
  45102. 8013632: 69fb ldr r3, [r7, #28]
  45103. 8013634: 2b38 cmp r3, #56 @ 0x38
  45104. 8013636: d805 bhi.n 8013644 <osThreadNew+0x70>
  45105. 8013638: 687b ldr r3, [r7, #4]
  45106. 801363a: 685b ldr r3, [r3, #4]
  45107. 801363c: f003 0301 and.w r3, r3, #1
  45108. 8013640: 2b00 cmp r3, #0
  45109. 8013642: d001 beq.n 8013648 <osThreadNew+0x74>
  45110. return (NULL);
  45111. 8013644: 2300 movs r3, #0
  45112. 8013646: e054 b.n 80136f2 <osThreadNew+0x11e>
  45113. }
  45114. if (attr->stack_size > 0U) {
  45115. 8013648: 687b ldr r3, [r7, #4]
  45116. 801364a: 695b ldr r3, [r3, #20]
  45117. 801364c: 2b00 cmp r3, #0
  45118. 801364e: d003 beq.n 8013658 <osThreadNew+0x84>
  45119. /* In FreeRTOS stack is not in bytes, but in sizeof(StackType_t) which is 4 on ARM ports. */
  45120. /* Stack size should be therefore 4 byte aligned in order to avoid division caused side effects */
  45121. stack = attr->stack_size / sizeof(StackType_t);
  45122. 8013650: 687b ldr r3, [r7, #4]
  45123. 8013652: 695b ldr r3, [r3, #20]
  45124. 8013654: 089b lsrs r3, r3, #2
  45125. 8013656: 623b str r3, [r7, #32]
  45126. }
  45127. if ((attr->cb_mem != NULL) && (attr->cb_size >= sizeof(StaticTask_t)) &&
  45128. 8013658: 687b ldr r3, [r7, #4]
  45129. 801365a: 689b ldr r3, [r3, #8]
  45130. 801365c: 2b00 cmp r3, #0
  45131. 801365e: d00e beq.n 801367e <osThreadNew+0xaa>
  45132. 8013660: 687b ldr r3, [r7, #4]
  45133. 8013662: 68db ldr r3, [r3, #12]
  45134. 8013664: 2ba7 cmp r3, #167 @ 0xa7
  45135. 8013666: d90a bls.n 801367e <osThreadNew+0xaa>
  45136. (attr->stack_mem != NULL) && (attr->stack_size > 0U)) {
  45137. 8013668: 687b ldr r3, [r7, #4]
  45138. 801366a: 691b ldr r3, [r3, #16]
  45139. if ((attr->cb_mem != NULL) && (attr->cb_size >= sizeof(StaticTask_t)) &&
  45140. 801366c: 2b00 cmp r3, #0
  45141. 801366e: d006 beq.n 801367e <osThreadNew+0xaa>
  45142. (attr->stack_mem != NULL) && (attr->stack_size > 0U)) {
  45143. 8013670: 687b ldr r3, [r7, #4]
  45144. 8013672: 695b ldr r3, [r3, #20]
  45145. 8013674: 2b00 cmp r3, #0
  45146. 8013676: d002 beq.n 801367e <osThreadNew+0xaa>
  45147. mem = 1;
  45148. 8013678: 2301 movs r3, #1
  45149. 801367a: 61bb str r3, [r7, #24]
  45150. 801367c: e010 b.n 80136a0 <osThreadNew+0xcc>
  45151. }
  45152. else {
  45153. if ((attr->cb_mem == NULL) && (attr->cb_size == 0U) && (attr->stack_mem == NULL)) {
  45154. 801367e: 687b ldr r3, [r7, #4]
  45155. 8013680: 689b ldr r3, [r3, #8]
  45156. 8013682: 2b00 cmp r3, #0
  45157. 8013684: d10c bne.n 80136a0 <osThreadNew+0xcc>
  45158. 8013686: 687b ldr r3, [r7, #4]
  45159. 8013688: 68db ldr r3, [r3, #12]
  45160. 801368a: 2b00 cmp r3, #0
  45161. 801368c: d108 bne.n 80136a0 <osThreadNew+0xcc>
  45162. 801368e: 687b ldr r3, [r7, #4]
  45163. 8013690: 691b ldr r3, [r3, #16]
  45164. 8013692: 2b00 cmp r3, #0
  45165. 8013694: d104 bne.n 80136a0 <osThreadNew+0xcc>
  45166. mem = 0;
  45167. 8013696: 2300 movs r3, #0
  45168. 8013698: 61bb str r3, [r7, #24]
  45169. 801369a: e001 b.n 80136a0 <osThreadNew+0xcc>
  45170. }
  45171. }
  45172. }
  45173. else {
  45174. mem = 0;
  45175. 801369c: 2300 movs r3, #0
  45176. 801369e: 61bb str r3, [r7, #24]
  45177. }
  45178. if (mem == 1) {
  45179. 80136a0: 69bb ldr r3, [r7, #24]
  45180. 80136a2: 2b01 cmp r3, #1
  45181. 80136a4: d110 bne.n 80136c8 <osThreadNew+0xf4>
  45182. #if (configSUPPORT_STATIC_ALLOCATION == 1)
  45183. hTask = xTaskCreateStatic ((TaskFunction_t)func, name, stack, argument, prio, (StackType_t *)attr->stack_mem,
  45184. 80136a6: 687b ldr r3, [r7, #4]
  45185. 80136a8: 691b ldr r3, [r3, #16]
  45186. (StaticTask_t *)attr->cb_mem);
  45187. 80136aa: 687a ldr r2, [r7, #4]
  45188. 80136ac: 6892 ldr r2, [r2, #8]
  45189. hTask = xTaskCreateStatic ((TaskFunction_t)func, name, stack, argument, prio, (StackType_t *)attr->stack_mem,
  45190. 80136ae: 9202 str r2, [sp, #8]
  45191. 80136b0: 9301 str r3, [sp, #4]
  45192. 80136b2: 69fb ldr r3, [r7, #28]
  45193. 80136b4: 9300 str r3, [sp, #0]
  45194. 80136b6: 68bb ldr r3, [r7, #8]
  45195. 80136b8: 6a3a ldr r2, [r7, #32]
  45196. 80136ba: 6a79 ldr r1, [r7, #36] @ 0x24
  45197. 80136bc: 68f8 ldr r0, [r7, #12]
  45198. 80136be: f001 fdac bl 801521a <xTaskCreateStatic>
  45199. 80136c2: 4603 mov r3, r0
  45200. 80136c4: 613b str r3, [r7, #16]
  45201. 80136c6: e013 b.n 80136f0 <osThreadNew+0x11c>
  45202. #endif
  45203. }
  45204. else {
  45205. if (mem == 0) {
  45206. 80136c8: 69bb ldr r3, [r7, #24]
  45207. 80136ca: 2b00 cmp r3, #0
  45208. 80136cc: d110 bne.n 80136f0 <osThreadNew+0x11c>
  45209. #if (configSUPPORT_DYNAMIC_ALLOCATION == 1)
  45210. if (xTaskCreate ((TaskFunction_t)func, name, (uint16_t)stack, argument, prio, &hTask) != pdPASS) {
  45211. 80136ce: 6a3b ldr r3, [r7, #32]
  45212. 80136d0: b29a uxth r2, r3
  45213. 80136d2: f107 0310 add.w r3, r7, #16
  45214. 80136d6: 9301 str r3, [sp, #4]
  45215. 80136d8: 69fb ldr r3, [r7, #28]
  45216. 80136da: 9300 str r3, [sp, #0]
  45217. 80136dc: 68bb ldr r3, [r7, #8]
  45218. 80136de: 6a79 ldr r1, [r7, #36] @ 0x24
  45219. 80136e0: 68f8 ldr r0, [r7, #12]
  45220. 80136e2: f001 fdfa bl 80152da <xTaskCreate>
  45221. 80136e6: 4603 mov r3, r0
  45222. 80136e8: 2b01 cmp r3, #1
  45223. 80136ea: d001 beq.n 80136f0 <osThreadNew+0x11c>
  45224. hTask = NULL;
  45225. 80136ec: 2300 movs r3, #0
  45226. 80136ee: 613b str r3, [r7, #16]
  45227. #endif
  45228. }
  45229. }
  45230. }
  45231. return ((osThreadId_t)hTask);
  45232. 80136f0: 693b ldr r3, [r7, #16]
  45233. }
  45234. 80136f2: 4618 mov r0, r3
  45235. 80136f4: 3728 adds r7, #40 @ 0x28
  45236. 80136f6: 46bd mov sp, r7
  45237. 80136f8: bd80 pop {r7, pc}
  45238. 080136fa <osDelay>:
  45239. /* Return flags before clearing */
  45240. return (rflags);
  45241. }
  45242. #endif /* (configUSE_OS2_THREAD_FLAGS == 1) */
  45243. osStatus_t osDelay (uint32_t ticks) {
  45244. 80136fa: b580 push {r7, lr}
  45245. 80136fc: b084 sub sp, #16
  45246. 80136fe: af00 add r7, sp, #0
  45247. 8013700: 6078 str r0, [r7, #4]
  45248. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  45249. 8013702: f3ef 8305 mrs r3, IPSR
  45250. 8013706: 60bb str r3, [r7, #8]
  45251. return(result);
  45252. 8013708: 68bb ldr r3, [r7, #8]
  45253. osStatus_t stat;
  45254. if (IS_IRQ()) {
  45255. 801370a: 2b00 cmp r3, #0
  45256. 801370c: d003 beq.n 8013716 <osDelay+0x1c>
  45257. stat = osErrorISR;
  45258. 801370e: f06f 0305 mvn.w r3, #5
  45259. 8013712: 60fb str r3, [r7, #12]
  45260. 8013714: e007 b.n 8013726 <osDelay+0x2c>
  45261. }
  45262. else {
  45263. stat = osOK;
  45264. 8013716: 2300 movs r3, #0
  45265. 8013718: 60fb str r3, [r7, #12]
  45266. if (ticks != 0U) {
  45267. 801371a: 687b ldr r3, [r7, #4]
  45268. 801371c: 2b00 cmp r3, #0
  45269. 801371e: d002 beq.n 8013726 <osDelay+0x2c>
  45270. vTaskDelay(ticks);
  45271. 8013720: 6878 ldr r0, [r7, #4]
  45272. 8013722: f001 ff37 bl 8015594 <vTaskDelay>
  45273. }
  45274. }
  45275. return (stat);
  45276. 8013726: 68fb ldr r3, [r7, #12]
  45277. }
  45278. 8013728: 4618 mov r0, r3
  45279. 801372a: 3710 adds r7, #16
  45280. 801372c: 46bd mov sp, r7
  45281. 801372e: bd80 pop {r7, pc}
  45282. 08013730 <TimerCallback>:
  45283. }
  45284. /*---------------------------------------------------------------------------*/
  45285. #if (configUSE_OS2_TIMER == 1)
  45286. static void TimerCallback (TimerHandle_t hTimer) {
  45287. 8013730: b580 push {r7, lr}
  45288. 8013732: b084 sub sp, #16
  45289. 8013734: af00 add r7, sp, #0
  45290. 8013736: 6078 str r0, [r7, #4]
  45291. TimerCallback_t *callb;
  45292. callb = (TimerCallback_t *)pvTimerGetTimerID (hTimer);
  45293. 8013738: 6878 ldr r0, [r7, #4]
  45294. 801373a: f003 fc3d bl 8016fb8 <pvTimerGetTimerID>
  45295. 801373e: 60f8 str r0, [r7, #12]
  45296. if (callb != NULL) {
  45297. 8013740: 68fb ldr r3, [r7, #12]
  45298. 8013742: 2b00 cmp r3, #0
  45299. 8013744: d005 beq.n 8013752 <TimerCallback+0x22>
  45300. callb->func (callb->arg);
  45301. 8013746: 68fb ldr r3, [r7, #12]
  45302. 8013748: 681b ldr r3, [r3, #0]
  45303. 801374a: 68fa ldr r2, [r7, #12]
  45304. 801374c: 6852 ldr r2, [r2, #4]
  45305. 801374e: 4610 mov r0, r2
  45306. 8013750: 4798 blx r3
  45307. }
  45308. }
  45309. 8013752: bf00 nop
  45310. 8013754: 3710 adds r7, #16
  45311. 8013756: 46bd mov sp, r7
  45312. 8013758: bd80 pop {r7, pc}
  45313. ...
  45314. 0801375c <osTimerNew>:
  45315. osTimerId_t osTimerNew (osTimerFunc_t func, osTimerType_t type, void *argument, const osTimerAttr_t *attr) {
  45316. 801375c: b580 push {r7, lr}
  45317. 801375e: b08c sub sp, #48 @ 0x30
  45318. 8013760: af02 add r7, sp, #8
  45319. 8013762: 60f8 str r0, [r7, #12]
  45320. 8013764: 607a str r2, [r7, #4]
  45321. 8013766: 603b str r3, [r7, #0]
  45322. 8013768: 460b mov r3, r1
  45323. 801376a: 72fb strb r3, [r7, #11]
  45324. TimerHandle_t hTimer;
  45325. TimerCallback_t *callb;
  45326. UBaseType_t reload;
  45327. int32_t mem;
  45328. hTimer = NULL;
  45329. 801376c: 2300 movs r3, #0
  45330. 801376e: 623b str r3, [r7, #32]
  45331. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  45332. 8013770: f3ef 8305 mrs r3, IPSR
  45333. 8013774: 613b str r3, [r7, #16]
  45334. return(result);
  45335. 8013776: 693b ldr r3, [r7, #16]
  45336. if (!IS_IRQ() && (func != NULL)) {
  45337. 8013778: 2b00 cmp r3, #0
  45338. 801377a: d163 bne.n 8013844 <osTimerNew+0xe8>
  45339. 801377c: 68fb ldr r3, [r7, #12]
  45340. 801377e: 2b00 cmp r3, #0
  45341. 8013780: d060 beq.n 8013844 <osTimerNew+0xe8>
  45342. /* Allocate memory to store callback function and argument */
  45343. callb = pvPortMalloc (sizeof(TimerCallback_t));
  45344. 8013782: 2008 movs r0, #8
  45345. 8013784: f003 fe8a bl 801749c <pvPortMalloc>
  45346. 8013788: 6178 str r0, [r7, #20]
  45347. if (callb != NULL) {
  45348. 801378a: 697b ldr r3, [r7, #20]
  45349. 801378c: 2b00 cmp r3, #0
  45350. 801378e: d059 beq.n 8013844 <osTimerNew+0xe8>
  45351. callb->func = func;
  45352. 8013790: 697b ldr r3, [r7, #20]
  45353. 8013792: 68fa ldr r2, [r7, #12]
  45354. 8013794: 601a str r2, [r3, #0]
  45355. callb->arg = argument;
  45356. 8013796: 697b ldr r3, [r7, #20]
  45357. 8013798: 687a ldr r2, [r7, #4]
  45358. 801379a: 605a str r2, [r3, #4]
  45359. if (type == osTimerOnce) {
  45360. 801379c: 7afb ldrb r3, [r7, #11]
  45361. 801379e: 2b00 cmp r3, #0
  45362. 80137a0: d102 bne.n 80137a8 <osTimerNew+0x4c>
  45363. reload = pdFALSE;
  45364. 80137a2: 2300 movs r3, #0
  45365. 80137a4: 61fb str r3, [r7, #28]
  45366. 80137a6: e001 b.n 80137ac <osTimerNew+0x50>
  45367. } else {
  45368. reload = pdTRUE;
  45369. 80137a8: 2301 movs r3, #1
  45370. 80137aa: 61fb str r3, [r7, #28]
  45371. }
  45372. mem = -1;
  45373. 80137ac: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  45374. 80137b0: 61bb str r3, [r7, #24]
  45375. name = NULL;
  45376. 80137b2: 2300 movs r3, #0
  45377. 80137b4: 627b str r3, [r7, #36] @ 0x24
  45378. if (attr != NULL) {
  45379. 80137b6: 683b ldr r3, [r7, #0]
  45380. 80137b8: 2b00 cmp r3, #0
  45381. 80137ba: d01c beq.n 80137f6 <osTimerNew+0x9a>
  45382. if (attr->name != NULL) {
  45383. 80137bc: 683b ldr r3, [r7, #0]
  45384. 80137be: 681b ldr r3, [r3, #0]
  45385. 80137c0: 2b00 cmp r3, #0
  45386. 80137c2: d002 beq.n 80137ca <osTimerNew+0x6e>
  45387. name = attr->name;
  45388. 80137c4: 683b ldr r3, [r7, #0]
  45389. 80137c6: 681b ldr r3, [r3, #0]
  45390. 80137c8: 627b str r3, [r7, #36] @ 0x24
  45391. }
  45392. if ((attr->cb_mem != NULL) && (attr->cb_size >= sizeof(StaticTimer_t))) {
  45393. 80137ca: 683b ldr r3, [r7, #0]
  45394. 80137cc: 689b ldr r3, [r3, #8]
  45395. 80137ce: 2b00 cmp r3, #0
  45396. 80137d0: d006 beq.n 80137e0 <osTimerNew+0x84>
  45397. 80137d2: 683b ldr r3, [r7, #0]
  45398. 80137d4: 68db ldr r3, [r3, #12]
  45399. 80137d6: 2b2b cmp r3, #43 @ 0x2b
  45400. 80137d8: d902 bls.n 80137e0 <osTimerNew+0x84>
  45401. mem = 1;
  45402. 80137da: 2301 movs r3, #1
  45403. 80137dc: 61bb str r3, [r7, #24]
  45404. 80137de: e00c b.n 80137fa <osTimerNew+0x9e>
  45405. }
  45406. else {
  45407. if ((attr->cb_mem == NULL) && (attr->cb_size == 0U)) {
  45408. 80137e0: 683b ldr r3, [r7, #0]
  45409. 80137e2: 689b ldr r3, [r3, #8]
  45410. 80137e4: 2b00 cmp r3, #0
  45411. 80137e6: d108 bne.n 80137fa <osTimerNew+0x9e>
  45412. 80137e8: 683b ldr r3, [r7, #0]
  45413. 80137ea: 68db ldr r3, [r3, #12]
  45414. 80137ec: 2b00 cmp r3, #0
  45415. 80137ee: d104 bne.n 80137fa <osTimerNew+0x9e>
  45416. mem = 0;
  45417. 80137f0: 2300 movs r3, #0
  45418. 80137f2: 61bb str r3, [r7, #24]
  45419. 80137f4: e001 b.n 80137fa <osTimerNew+0x9e>
  45420. }
  45421. }
  45422. }
  45423. else {
  45424. mem = 0;
  45425. 80137f6: 2300 movs r3, #0
  45426. 80137f8: 61bb str r3, [r7, #24]
  45427. }
  45428. if (mem == 1) {
  45429. 80137fa: 69bb ldr r3, [r7, #24]
  45430. 80137fc: 2b01 cmp r3, #1
  45431. 80137fe: d10c bne.n 801381a <osTimerNew+0xbe>
  45432. #if (configSUPPORT_STATIC_ALLOCATION == 1)
  45433. hTimer = xTimerCreateStatic (name, 1, reload, callb, TimerCallback, (StaticTimer_t *)attr->cb_mem);
  45434. 8013800: 683b ldr r3, [r7, #0]
  45435. 8013802: 689b ldr r3, [r3, #8]
  45436. 8013804: 9301 str r3, [sp, #4]
  45437. 8013806: 4b12 ldr r3, [pc, #72] @ (8013850 <osTimerNew+0xf4>)
  45438. 8013808: 9300 str r3, [sp, #0]
  45439. 801380a: 697b ldr r3, [r7, #20]
  45440. 801380c: 69fa ldr r2, [r7, #28]
  45441. 801380e: 2101 movs r1, #1
  45442. 8013810: 6a78 ldr r0, [r7, #36] @ 0x24
  45443. 8013812: f003 f81a bl 801684a <xTimerCreateStatic>
  45444. 8013816: 6238 str r0, [r7, #32]
  45445. 8013818: e00b b.n 8013832 <osTimerNew+0xd6>
  45446. #endif
  45447. }
  45448. else {
  45449. if (mem == 0) {
  45450. 801381a: 69bb ldr r3, [r7, #24]
  45451. 801381c: 2b00 cmp r3, #0
  45452. 801381e: d108 bne.n 8013832 <osTimerNew+0xd6>
  45453. #if (configSUPPORT_DYNAMIC_ALLOCATION == 1)
  45454. hTimer = xTimerCreate (name, 1, reload, callb, TimerCallback);
  45455. 8013820: 4b0b ldr r3, [pc, #44] @ (8013850 <osTimerNew+0xf4>)
  45456. 8013822: 9300 str r3, [sp, #0]
  45457. 8013824: 697b ldr r3, [r7, #20]
  45458. 8013826: 69fa ldr r2, [r7, #28]
  45459. 8013828: 2101 movs r1, #1
  45460. 801382a: 6a78 ldr r0, [r7, #36] @ 0x24
  45461. 801382c: f002 ffec bl 8016808 <xTimerCreate>
  45462. 8013830: 6238 str r0, [r7, #32]
  45463. #endif
  45464. }
  45465. }
  45466. if ((hTimer == NULL) && (callb != NULL)) {
  45467. 8013832: 6a3b ldr r3, [r7, #32]
  45468. 8013834: 2b00 cmp r3, #0
  45469. 8013836: d105 bne.n 8013844 <osTimerNew+0xe8>
  45470. 8013838: 697b ldr r3, [r7, #20]
  45471. 801383a: 2b00 cmp r3, #0
  45472. 801383c: d002 beq.n 8013844 <osTimerNew+0xe8>
  45473. vPortFree (callb);
  45474. 801383e: 6978 ldr r0, [r7, #20]
  45475. 8013840: f003 fefa bl 8017638 <vPortFree>
  45476. }
  45477. }
  45478. }
  45479. return ((osTimerId_t)hTimer);
  45480. 8013844: 6a3b ldr r3, [r7, #32]
  45481. }
  45482. 8013846: 4618 mov r0, r3
  45483. 8013848: 3728 adds r7, #40 @ 0x28
  45484. 801384a: 46bd mov sp, r7
  45485. 801384c: bd80 pop {r7, pc}
  45486. 801384e: bf00 nop
  45487. 8013850: 08013731 .word 0x08013731
  45488. 08013854 <osTimerStart>:
  45489. }
  45490. return (p);
  45491. }
  45492. osStatus_t osTimerStart (osTimerId_t timer_id, uint32_t ticks) {
  45493. 8013854: b580 push {r7, lr}
  45494. 8013856: b088 sub sp, #32
  45495. 8013858: af02 add r7, sp, #8
  45496. 801385a: 6078 str r0, [r7, #4]
  45497. 801385c: 6039 str r1, [r7, #0]
  45498. TimerHandle_t hTimer = (TimerHandle_t)timer_id;
  45499. 801385e: 687b ldr r3, [r7, #4]
  45500. 8013860: 613b str r3, [r7, #16]
  45501. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  45502. 8013862: f3ef 8305 mrs r3, IPSR
  45503. 8013866: 60fb str r3, [r7, #12]
  45504. return(result);
  45505. 8013868: 68fb ldr r3, [r7, #12]
  45506. osStatus_t stat;
  45507. if (IS_IRQ()) {
  45508. 801386a: 2b00 cmp r3, #0
  45509. 801386c: d003 beq.n 8013876 <osTimerStart+0x22>
  45510. stat = osErrorISR;
  45511. 801386e: f06f 0305 mvn.w r3, #5
  45512. 8013872: 617b str r3, [r7, #20]
  45513. 8013874: e017 b.n 80138a6 <osTimerStart+0x52>
  45514. }
  45515. else if (hTimer == NULL) {
  45516. 8013876: 693b ldr r3, [r7, #16]
  45517. 8013878: 2b00 cmp r3, #0
  45518. 801387a: d103 bne.n 8013884 <osTimerStart+0x30>
  45519. stat = osErrorParameter;
  45520. 801387c: f06f 0303 mvn.w r3, #3
  45521. 8013880: 617b str r3, [r7, #20]
  45522. 8013882: e010 b.n 80138a6 <osTimerStart+0x52>
  45523. }
  45524. else {
  45525. if (xTimerChangePeriod (hTimer, ticks, 0) == pdPASS) {
  45526. 8013884: 2300 movs r3, #0
  45527. 8013886: 9300 str r3, [sp, #0]
  45528. 8013888: 2300 movs r3, #0
  45529. 801388a: 683a ldr r2, [r7, #0]
  45530. 801388c: 2104 movs r1, #4
  45531. 801388e: 6938 ldr r0, [r7, #16]
  45532. 8013890: f003 f858 bl 8016944 <xTimerGenericCommand>
  45533. 8013894: 4603 mov r3, r0
  45534. 8013896: 2b01 cmp r3, #1
  45535. 8013898: d102 bne.n 80138a0 <osTimerStart+0x4c>
  45536. stat = osOK;
  45537. 801389a: 2300 movs r3, #0
  45538. 801389c: 617b str r3, [r7, #20]
  45539. 801389e: e002 b.n 80138a6 <osTimerStart+0x52>
  45540. } else {
  45541. stat = osErrorResource;
  45542. 80138a0: f06f 0302 mvn.w r3, #2
  45543. 80138a4: 617b str r3, [r7, #20]
  45544. }
  45545. }
  45546. return (stat);
  45547. 80138a6: 697b ldr r3, [r7, #20]
  45548. }
  45549. 80138a8: 4618 mov r0, r3
  45550. 80138aa: 3718 adds r7, #24
  45551. 80138ac: 46bd mov sp, r7
  45552. 80138ae: bd80 pop {r7, pc}
  45553. 080138b0 <osTimerStop>:
  45554. osStatus_t osTimerStop (osTimerId_t timer_id) {
  45555. 80138b0: b580 push {r7, lr}
  45556. 80138b2: b088 sub sp, #32
  45557. 80138b4: af02 add r7, sp, #8
  45558. 80138b6: 6078 str r0, [r7, #4]
  45559. TimerHandle_t hTimer = (TimerHandle_t)timer_id;
  45560. 80138b8: 687b ldr r3, [r7, #4]
  45561. 80138ba: 613b str r3, [r7, #16]
  45562. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  45563. 80138bc: f3ef 8305 mrs r3, IPSR
  45564. 80138c0: 60fb str r3, [r7, #12]
  45565. return(result);
  45566. 80138c2: 68fb ldr r3, [r7, #12]
  45567. osStatus_t stat;
  45568. if (IS_IRQ()) {
  45569. 80138c4: 2b00 cmp r3, #0
  45570. 80138c6: d003 beq.n 80138d0 <osTimerStop+0x20>
  45571. stat = osErrorISR;
  45572. 80138c8: f06f 0305 mvn.w r3, #5
  45573. 80138cc: 617b str r3, [r7, #20]
  45574. 80138ce: e021 b.n 8013914 <osTimerStop+0x64>
  45575. }
  45576. else if (hTimer == NULL) {
  45577. 80138d0: 693b ldr r3, [r7, #16]
  45578. 80138d2: 2b00 cmp r3, #0
  45579. 80138d4: d103 bne.n 80138de <osTimerStop+0x2e>
  45580. stat = osErrorParameter;
  45581. 80138d6: f06f 0303 mvn.w r3, #3
  45582. 80138da: 617b str r3, [r7, #20]
  45583. 80138dc: e01a b.n 8013914 <osTimerStop+0x64>
  45584. }
  45585. else {
  45586. if (xTimerIsTimerActive (hTimer) == pdFALSE) {
  45587. 80138de: 6938 ldr r0, [r7, #16]
  45588. 80138e0: f003 fb40 bl 8016f64 <xTimerIsTimerActive>
  45589. 80138e4: 4603 mov r3, r0
  45590. 80138e6: 2b00 cmp r3, #0
  45591. 80138e8: d103 bne.n 80138f2 <osTimerStop+0x42>
  45592. stat = osErrorResource;
  45593. 80138ea: f06f 0302 mvn.w r3, #2
  45594. 80138ee: 617b str r3, [r7, #20]
  45595. 80138f0: e010 b.n 8013914 <osTimerStop+0x64>
  45596. }
  45597. else {
  45598. if (xTimerStop (hTimer, 0) == pdPASS) {
  45599. 80138f2: 2300 movs r3, #0
  45600. 80138f4: 9300 str r3, [sp, #0]
  45601. 80138f6: 2300 movs r3, #0
  45602. 80138f8: 2200 movs r2, #0
  45603. 80138fa: 2103 movs r1, #3
  45604. 80138fc: 6938 ldr r0, [r7, #16]
  45605. 80138fe: f003 f821 bl 8016944 <xTimerGenericCommand>
  45606. 8013902: 4603 mov r3, r0
  45607. 8013904: 2b01 cmp r3, #1
  45608. 8013906: d102 bne.n 801390e <osTimerStop+0x5e>
  45609. stat = osOK;
  45610. 8013908: 2300 movs r3, #0
  45611. 801390a: 617b str r3, [r7, #20]
  45612. 801390c: e002 b.n 8013914 <osTimerStop+0x64>
  45613. } else {
  45614. stat = osError;
  45615. 801390e: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  45616. 8013912: 617b str r3, [r7, #20]
  45617. }
  45618. }
  45619. }
  45620. return (stat);
  45621. 8013914: 697b ldr r3, [r7, #20]
  45622. }
  45623. 8013916: 4618 mov r0, r3
  45624. 8013918: 3718 adds r7, #24
  45625. 801391a: 46bd mov sp, r7
  45626. 801391c: bd80 pop {r7, pc}
  45627. 0801391e <osMutexNew>:
  45628. }
  45629. /*---------------------------------------------------------------------------*/
  45630. #if (configUSE_OS2_MUTEX == 1)
  45631. osMutexId_t osMutexNew (const osMutexAttr_t *attr) {
  45632. 801391e: b580 push {r7, lr}
  45633. 8013920: b088 sub sp, #32
  45634. 8013922: af00 add r7, sp, #0
  45635. 8013924: 6078 str r0, [r7, #4]
  45636. int32_t mem;
  45637. #if (configQUEUE_REGISTRY_SIZE > 0)
  45638. const char *name;
  45639. #endif
  45640. hMutex = NULL;
  45641. 8013926: 2300 movs r3, #0
  45642. 8013928: 61fb str r3, [r7, #28]
  45643. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  45644. 801392a: f3ef 8305 mrs r3, IPSR
  45645. 801392e: 60bb str r3, [r7, #8]
  45646. return(result);
  45647. 8013930: 68bb ldr r3, [r7, #8]
  45648. if (!IS_IRQ()) {
  45649. 8013932: 2b00 cmp r3, #0
  45650. 8013934: d174 bne.n 8013a20 <osMutexNew+0x102>
  45651. if (attr != NULL) {
  45652. 8013936: 687b ldr r3, [r7, #4]
  45653. 8013938: 2b00 cmp r3, #0
  45654. 801393a: d003 beq.n 8013944 <osMutexNew+0x26>
  45655. type = attr->attr_bits;
  45656. 801393c: 687b ldr r3, [r7, #4]
  45657. 801393e: 685b ldr r3, [r3, #4]
  45658. 8013940: 61bb str r3, [r7, #24]
  45659. 8013942: e001 b.n 8013948 <osMutexNew+0x2a>
  45660. } else {
  45661. type = 0U;
  45662. 8013944: 2300 movs r3, #0
  45663. 8013946: 61bb str r3, [r7, #24]
  45664. }
  45665. if ((type & osMutexRecursive) == osMutexRecursive) {
  45666. 8013948: 69bb ldr r3, [r7, #24]
  45667. 801394a: f003 0301 and.w r3, r3, #1
  45668. 801394e: 2b00 cmp r3, #0
  45669. 8013950: d002 beq.n 8013958 <osMutexNew+0x3a>
  45670. rmtx = 1U;
  45671. 8013952: 2301 movs r3, #1
  45672. 8013954: 617b str r3, [r7, #20]
  45673. 8013956: e001 b.n 801395c <osMutexNew+0x3e>
  45674. } else {
  45675. rmtx = 0U;
  45676. 8013958: 2300 movs r3, #0
  45677. 801395a: 617b str r3, [r7, #20]
  45678. }
  45679. if ((type & osMutexRobust) != osMutexRobust) {
  45680. 801395c: 69bb ldr r3, [r7, #24]
  45681. 801395e: f003 0308 and.w r3, r3, #8
  45682. 8013962: 2b00 cmp r3, #0
  45683. 8013964: d15c bne.n 8013a20 <osMutexNew+0x102>
  45684. mem = -1;
  45685. 8013966: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  45686. 801396a: 613b str r3, [r7, #16]
  45687. if (attr != NULL) {
  45688. 801396c: 687b ldr r3, [r7, #4]
  45689. 801396e: 2b00 cmp r3, #0
  45690. 8013970: d015 beq.n 801399e <osMutexNew+0x80>
  45691. if ((attr->cb_mem != NULL) && (attr->cb_size >= sizeof(StaticSemaphore_t))) {
  45692. 8013972: 687b ldr r3, [r7, #4]
  45693. 8013974: 689b ldr r3, [r3, #8]
  45694. 8013976: 2b00 cmp r3, #0
  45695. 8013978: d006 beq.n 8013988 <osMutexNew+0x6a>
  45696. 801397a: 687b ldr r3, [r7, #4]
  45697. 801397c: 68db ldr r3, [r3, #12]
  45698. 801397e: 2b4f cmp r3, #79 @ 0x4f
  45699. 8013980: d902 bls.n 8013988 <osMutexNew+0x6a>
  45700. mem = 1;
  45701. 8013982: 2301 movs r3, #1
  45702. 8013984: 613b str r3, [r7, #16]
  45703. 8013986: e00c b.n 80139a2 <osMutexNew+0x84>
  45704. }
  45705. else {
  45706. if ((attr->cb_mem == NULL) && (attr->cb_size == 0U)) {
  45707. 8013988: 687b ldr r3, [r7, #4]
  45708. 801398a: 689b ldr r3, [r3, #8]
  45709. 801398c: 2b00 cmp r3, #0
  45710. 801398e: d108 bne.n 80139a2 <osMutexNew+0x84>
  45711. 8013990: 687b ldr r3, [r7, #4]
  45712. 8013992: 68db ldr r3, [r3, #12]
  45713. 8013994: 2b00 cmp r3, #0
  45714. 8013996: d104 bne.n 80139a2 <osMutexNew+0x84>
  45715. mem = 0;
  45716. 8013998: 2300 movs r3, #0
  45717. 801399a: 613b str r3, [r7, #16]
  45718. 801399c: e001 b.n 80139a2 <osMutexNew+0x84>
  45719. }
  45720. }
  45721. }
  45722. else {
  45723. mem = 0;
  45724. 801399e: 2300 movs r3, #0
  45725. 80139a0: 613b str r3, [r7, #16]
  45726. }
  45727. if (mem == 1) {
  45728. 80139a2: 693b ldr r3, [r7, #16]
  45729. 80139a4: 2b01 cmp r3, #1
  45730. 80139a6: d112 bne.n 80139ce <osMutexNew+0xb0>
  45731. #if (configSUPPORT_STATIC_ALLOCATION == 1)
  45732. if (rmtx != 0U) {
  45733. 80139a8: 697b ldr r3, [r7, #20]
  45734. 80139aa: 2b00 cmp r3, #0
  45735. 80139ac: d007 beq.n 80139be <osMutexNew+0xa0>
  45736. #if (configUSE_RECURSIVE_MUTEXES == 1)
  45737. hMutex = xSemaphoreCreateRecursiveMutexStatic (attr->cb_mem);
  45738. 80139ae: 687b ldr r3, [r7, #4]
  45739. 80139b0: 689b ldr r3, [r3, #8]
  45740. 80139b2: 4619 mov r1, r3
  45741. 80139b4: 2004 movs r0, #4
  45742. 80139b6: f000 fc50 bl 801425a <xQueueCreateMutexStatic>
  45743. 80139ba: 61f8 str r0, [r7, #28]
  45744. 80139bc: e016 b.n 80139ec <osMutexNew+0xce>
  45745. #endif
  45746. }
  45747. else {
  45748. hMutex = xSemaphoreCreateMutexStatic (attr->cb_mem);
  45749. 80139be: 687b ldr r3, [r7, #4]
  45750. 80139c0: 689b ldr r3, [r3, #8]
  45751. 80139c2: 4619 mov r1, r3
  45752. 80139c4: 2001 movs r0, #1
  45753. 80139c6: f000 fc48 bl 801425a <xQueueCreateMutexStatic>
  45754. 80139ca: 61f8 str r0, [r7, #28]
  45755. 80139cc: e00e b.n 80139ec <osMutexNew+0xce>
  45756. }
  45757. #endif
  45758. }
  45759. else {
  45760. if (mem == 0) {
  45761. 80139ce: 693b ldr r3, [r7, #16]
  45762. 80139d0: 2b00 cmp r3, #0
  45763. 80139d2: d10b bne.n 80139ec <osMutexNew+0xce>
  45764. #if (configSUPPORT_DYNAMIC_ALLOCATION == 1)
  45765. if (rmtx != 0U) {
  45766. 80139d4: 697b ldr r3, [r7, #20]
  45767. 80139d6: 2b00 cmp r3, #0
  45768. 80139d8: d004 beq.n 80139e4 <osMutexNew+0xc6>
  45769. #if (configUSE_RECURSIVE_MUTEXES == 1)
  45770. hMutex = xSemaphoreCreateRecursiveMutex ();
  45771. 80139da: 2004 movs r0, #4
  45772. 80139dc: f000 fc25 bl 801422a <xQueueCreateMutex>
  45773. 80139e0: 61f8 str r0, [r7, #28]
  45774. 80139e2: e003 b.n 80139ec <osMutexNew+0xce>
  45775. #endif
  45776. } else {
  45777. hMutex = xSemaphoreCreateMutex ();
  45778. 80139e4: 2001 movs r0, #1
  45779. 80139e6: f000 fc20 bl 801422a <xQueueCreateMutex>
  45780. 80139ea: 61f8 str r0, [r7, #28]
  45781. #endif
  45782. }
  45783. }
  45784. #if (configQUEUE_REGISTRY_SIZE > 0)
  45785. if (hMutex != NULL) {
  45786. 80139ec: 69fb ldr r3, [r7, #28]
  45787. 80139ee: 2b00 cmp r3, #0
  45788. 80139f0: d00c beq.n 8013a0c <osMutexNew+0xee>
  45789. if (attr != NULL) {
  45790. 80139f2: 687b ldr r3, [r7, #4]
  45791. 80139f4: 2b00 cmp r3, #0
  45792. 80139f6: d003 beq.n 8013a00 <osMutexNew+0xe2>
  45793. name = attr->name;
  45794. 80139f8: 687b ldr r3, [r7, #4]
  45795. 80139fa: 681b ldr r3, [r3, #0]
  45796. 80139fc: 60fb str r3, [r7, #12]
  45797. 80139fe: e001 b.n 8013a04 <osMutexNew+0xe6>
  45798. } else {
  45799. name = NULL;
  45800. 8013a00: 2300 movs r3, #0
  45801. 8013a02: 60fb str r3, [r7, #12]
  45802. }
  45803. vQueueAddToRegistry (hMutex, name);
  45804. 8013a04: 68f9 ldr r1, [r7, #12]
  45805. 8013a06: 69f8 ldr r0, [r7, #28]
  45806. 8013a08: f001 f9ea bl 8014de0 <vQueueAddToRegistry>
  45807. }
  45808. #endif
  45809. if ((hMutex != NULL) && (rmtx != 0U)) {
  45810. 8013a0c: 69fb ldr r3, [r7, #28]
  45811. 8013a0e: 2b00 cmp r3, #0
  45812. 8013a10: d006 beq.n 8013a20 <osMutexNew+0x102>
  45813. 8013a12: 697b ldr r3, [r7, #20]
  45814. 8013a14: 2b00 cmp r3, #0
  45815. 8013a16: d003 beq.n 8013a20 <osMutexNew+0x102>
  45816. hMutex = (SemaphoreHandle_t)((uint32_t)hMutex | 1U);
  45817. 8013a18: 69fb ldr r3, [r7, #28]
  45818. 8013a1a: f043 0301 orr.w r3, r3, #1
  45819. 8013a1e: 61fb str r3, [r7, #28]
  45820. }
  45821. }
  45822. }
  45823. return ((osMutexId_t)hMutex);
  45824. 8013a20: 69fb ldr r3, [r7, #28]
  45825. }
  45826. 8013a22: 4618 mov r0, r3
  45827. 8013a24: 3720 adds r7, #32
  45828. 8013a26: 46bd mov sp, r7
  45829. 8013a28: bd80 pop {r7, pc}
  45830. 08013a2a <osMutexAcquire>:
  45831. osStatus_t osMutexAcquire (osMutexId_t mutex_id, uint32_t timeout) {
  45832. 8013a2a: b580 push {r7, lr}
  45833. 8013a2c: b086 sub sp, #24
  45834. 8013a2e: af00 add r7, sp, #0
  45835. 8013a30: 6078 str r0, [r7, #4]
  45836. 8013a32: 6039 str r1, [r7, #0]
  45837. SemaphoreHandle_t hMutex;
  45838. osStatus_t stat;
  45839. uint32_t rmtx;
  45840. hMutex = (SemaphoreHandle_t)((uint32_t)mutex_id & ~1U);
  45841. 8013a34: 687b ldr r3, [r7, #4]
  45842. 8013a36: f023 0301 bic.w r3, r3, #1
  45843. 8013a3a: 613b str r3, [r7, #16]
  45844. rmtx = (uint32_t)mutex_id & 1U;
  45845. 8013a3c: 687b ldr r3, [r7, #4]
  45846. 8013a3e: f003 0301 and.w r3, r3, #1
  45847. 8013a42: 60fb str r3, [r7, #12]
  45848. stat = osOK;
  45849. 8013a44: 2300 movs r3, #0
  45850. 8013a46: 617b str r3, [r7, #20]
  45851. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  45852. 8013a48: f3ef 8305 mrs r3, IPSR
  45853. 8013a4c: 60bb str r3, [r7, #8]
  45854. return(result);
  45855. 8013a4e: 68bb ldr r3, [r7, #8]
  45856. if (IS_IRQ()) {
  45857. 8013a50: 2b00 cmp r3, #0
  45858. 8013a52: d003 beq.n 8013a5c <osMutexAcquire+0x32>
  45859. stat = osErrorISR;
  45860. 8013a54: f06f 0305 mvn.w r3, #5
  45861. 8013a58: 617b str r3, [r7, #20]
  45862. 8013a5a: e02c b.n 8013ab6 <osMutexAcquire+0x8c>
  45863. }
  45864. else if (hMutex == NULL) {
  45865. 8013a5c: 693b ldr r3, [r7, #16]
  45866. 8013a5e: 2b00 cmp r3, #0
  45867. 8013a60: d103 bne.n 8013a6a <osMutexAcquire+0x40>
  45868. stat = osErrorParameter;
  45869. 8013a62: f06f 0303 mvn.w r3, #3
  45870. 8013a66: 617b str r3, [r7, #20]
  45871. 8013a68: e025 b.n 8013ab6 <osMutexAcquire+0x8c>
  45872. }
  45873. else {
  45874. if (rmtx != 0U) {
  45875. 8013a6a: 68fb ldr r3, [r7, #12]
  45876. 8013a6c: 2b00 cmp r3, #0
  45877. 8013a6e: d011 beq.n 8013a94 <osMutexAcquire+0x6a>
  45878. #if (configUSE_RECURSIVE_MUTEXES == 1)
  45879. if (xSemaphoreTakeRecursive (hMutex, timeout) != pdPASS) {
  45880. 8013a70: 6839 ldr r1, [r7, #0]
  45881. 8013a72: 6938 ldr r0, [r7, #16]
  45882. 8013a74: f000 fc41 bl 80142fa <xQueueTakeMutexRecursive>
  45883. 8013a78: 4603 mov r3, r0
  45884. 8013a7a: 2b01 cmp r3, #1
  45885. 8013a7c: d01b beq.n 8013ab6 <osMutexAcquire+0x8c>
  45886. if (timeout != 0U) {
  45887. 8013a7e: 683b ldr r3, [r7, #0]
  45888. 8013a80: 2b00 cmp r3, #0
  45889. 8013a82: d003 beq.n 8013a8c <osMutexAcquire+0x62>
  45890. stat = osErrorTimeout;
  45891. 8013a84: f06f 0301 mvn.w r3, #1
  45892. 8013a88: 617b str r3, [r7, #20]
  45893. 8013a8a: e014 b.n 8013ab6 <osMutexAcquire+0x8c>
  45894. } else {
  45895. stat = osErrorResource;
  45896. 8013a8c: f06f 0302 mvn.w r3, #2
  45897. 8013a90: 617b str r3, [r7, #20]
  45898. 8013a92: e010 b.n 8013ab6 <osMutexAcquire+0x8c>
  45899. }
  45900. }
  45901. #endif
  45902. }
  45903. else {
  45904. if (xSemaphoreTake (hMutex, timeout) != pdPASS) {
  45905. 8013a94: 6839 ldr r1, [r7, #0]
  45906. 8013a96: 6938 ldr r0, [r7, #16]
  45907. 8013a98: f000 fee8 bl 801486c <xQueueSemaphoreTake>
  45908. 8013a9c: 4603 mov r3, r0
  45909. 8013a9e: 2b01 cmp r3, #1
  45910. 8013aa0: d009 beq.n 8013ab6 <osMutexAcquire+0x8c>
  45911. if (timeout != 0U) {
  45912. 8013aa2: 683b ldr r3, [r7, #0]
  45913. 8013aa4: 2b00 cmp r3, #0
  45914. 8013aa6: d003 beq.n 8013ab0 <osMutexAcquire+0x86>
  45915. stat = osErrorTimeout;
  45916. 8013aa8: f06f 0301 mvn.w r3, #1
  45917. 8013aac: 617b str r3, [r7, #20]
  45918. 8013aae: e002 b.n 8013ab6 <osMutexAcquire+0x8c>
  45919. } else {
  45920. stat = osErrorResource;
  45921. 8013ab0: f06f 0302 mvn.w r3, #2
  45922. 8013ab4: 617b str r3, [r7, #20]
  45923. }
  45924. }
  45925. }
  45926. }
  45927. return (stat);
  45928. 8013ab6: 697b ldr r3, [r7, #20]
  45929. }
  45930. 8013ab8: 4618 mov r0, r3
  45931. 8013aba: 3718 adds r7, #24
  45932. 8013abc: 46bd mov sp, r7
  45933. 8013abe: bd80 pop {r7, pc}
  45934. 08013ac0 <osMutexRelease>:
  45935. osStatus_t osMutexRelease (osMutexId_t mutex_id) {
  45936. 8013ac0: b580 push {r7, lr}
  45937. 8013ac2: b086 sub sp, #24
  45938. 8013ac4: af00 add r7, sp, #0
  45939. 8013ac6: 6078 str r0, [r7, #4]
  45940. SemaphoreHandle_t hMutex;
  45941. osStatus_t stat;
  45942. uint32_t rmtx;
  45943. hMutex = (SemaphoreHandle_t)((uint32_t)mutex_id & ~1U);
  45944. 8013ac8: 687b ldr r3, [r7, #4]
  45945. 8013aca: f023 0301 bic.w r3, r3, #1
  45946. 8013ace: 613b str r3, [r7, #16]
  45947. rmtx = (uint32_t)mutex_id & 1U;
  45948. 8013ad0: 687b ldr r3, [r7, #4]
  45949. 8013ad2: f003 0301 and.w r3, r3, #1
  45950. 8013ad6: 60fb str r3, [r7, #12]
  45951. stat = osOK;
  45952. 8013ad8: 2300 movs r3, #0
  45953. 8013ada: 617b str r3, [r7, #20]
  45954. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  45955. 8013adc: f3ef 8305 mrs r3, IPSR
  45956. 8013ae0: 60bb str r3, [r7, #8]
  45957. return(result);
  45958. 8013ae2: 68bb ldr r3, [r7, #8]
  45959. if (IS_IRQ()) {
  45960. 8013ae4: 2b00 cmp r3, #0
  45961. 8013ae6: d003 beq.n 8013af0 <osMutexRelease+0x30>
  45962. stat = osErrorISR;
  45963. 8013ae8: f06f 0305 mvn.w r3, #5
  45964. 8013aec: 617b str r3, [r7, #20]
  45965. 8013aee: e01f b.n 8013b30 <osMutexRelease+0x70>
  45966. }
  45967. else if (hMutex == NULL) {
  45968. 8013af0: 693b ldr r3, [r7, #16]
  45969. 8013af2: 2b00 cmp r3, #0
  45970. 8013af4: d103 bne.n 8013afe <osMutexRelease+0x3e>
  45971. stat = osErrorParameter;
  45972. 8013af6: f06f 0303 mvn.w r3, #3
  45973. 8013afa: 617b str r3, [r7, #20]
  45974. 8013afc: e018 b.n 8013b30 <osMutexRelease+0x70>
  45975. }
  45976. else {
  45977. if (rmtx != 0U) {
  45978. 8013afe: 68fb ldr r3, [r7, #12]
  45979. 8013b00: 2b00 cmp r3, #0
  45980. 8013b02: d009 beq.n 8013b18 <osMutexRelease+0x58>
  45981. #if (configUSE_RECURSIVE_MUTEXES == 1)
  45982. if (xSemaphoreGiveRecursive (hMutex) != pdPASS) {
  45983. 8013b04: 6938 ldr r0, [r7, #16]
  45984. 8013b06: f000 fbc3 bl 8014290 <xQueueGiveMutexRecursive>
  45985. 8013b0a: 4603 mov r3, r0
  45986. 8013b0c: 2b01 cmp r3, #1
  45987. 8013b0e: d00f beq.n 8013b30 <osMutexRelease+0x70>
  45988. stat = osErrorResource;
  45989. 8013b10: f06f 0302 mvn.w r3, #2
  45990. 8013b14: 617b str r3, [r7, #20]
  45991. 8013b16: e00b b.n 8013b30 <osMutexRelease+0x70>
  45992. }
  45993. #endif
  45994. }
  45995. else {
  45996. if (xSemaphoreGive (hMutex) != pdPASS) {
  45997. 8013b18: 2300 movs r3, #0
  45998. 8013b1a: 2200 movs r2, #0
  45999. 8013b1c: 2100 movs r1, #0
  46000. 8013b1e: 6938 ldr r0, [r7, #16]
  46001. 8013b20: f000 fc22 bl 8014368 <xQueueGenericSend>
  46002. 8013b24: 4603 mov r3, r0
  46003. 8013b26: 2b01 cmp r3, #1
  46004. 8013b28: d002 beq.n 8013b30 <osMutexRelease+0x70>
  46005. stat = osErrorResource;
  46006. 8013b2a: f06f 0302 mvn.w r3, #2
  46007. 8013b2e: 617b str r3, [r7, #20]
  46008. }
  46009. }
  46010. }
  46011. return (stat);
  46012. 8013b30: 697b ldr r3, [r7, #20]
  46013. }
  46014. 8013b32: 4618 mov r0, r3
  46015. 8013b34: 3718 adds r7, #24
  46016. 8013b36: 46bd mov sp, r7
  46017. 8013b38: bd80 pop {r7, pc}
  46018. 08013b3a <osMessageQueueNew>:
  46019. return (stat);
  46020. }
  46021. /*---------------------------------------------------------------------------*/
  46022. osMessageQueueId_t osMessageQueueNew (uint32_t msg_count, uint32_t msg_size, const osMessageQueueAttr_t *attr) {
  46023. 8013b3a: b580 push {r7, lr}
  46024. 8013b3c: b08a sub sp, #40 @ 0x28
  46025. 8013b3e: af02 add r7, sp, #8
  46026. 8013b40: 60f8 str r0, [r7, #12]
  46027. 8013b42: 60b9 str r1, [r7, #8]
  46028. 8013b44: 607a str r2, [r7, #4]
  46029. int32_t mem;
  46030. #if (configQUEUE_REGISTRY_SIZE > 0)
  46031. const char *name;
  46032. #endif
  46033. hQueue = NULL;
  46034. 8013b46: 2300 movs r3, #0
  46035. 8013b48: 61fb str r3, [r7, #28]
  46036. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  46037. 8013b4a: f3ef 8305 mrs r3, IPSR
  46038. 8013b4e: 613b str r3, [r7, #16]
  46039. return(result);
  46040. 8013b50: 693b ldr r3, [r7, #16]
  46041. if (!IS_IRQ() && (msg_count > 0U) && (msg_size > 0U)) {
  46042. 8013b52: 2b00 cmp r3, #0
  46043. 8013b54: d15f bne.n 8013c16 <osMessageQueueNew+0xdc>
  46044. 8013b56: 68fb ldr r3, [r7, #12]
  46045. 8013b58: 2b00 cmp r3, #0
  46046. 8013b5a: d05c beq.n 8013c16 <osMessageQueueNew+0xdc>
  46047. 8013b5c: 68bb ldr r3, [r7, #8]
  46048. 8013b5e: 2b00 cmp r3, #0
  46049. 8013b60: d059 beq.n 8013c16 <osMessageQueueNew+0xdc>
  46050. mem = -1;
  46051. 8013b62: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  46052. 8013b66: 61bb str r3, [r7, #24]
  46053. if (attr != NULL) {
  46054. 8013b68: 687b ldr r3, [r7, #4]
  46055. 8013b6a: 2b00 cmp r3, #0
  46056. 8013b6c: d029 beq.n 8013bc2 <osMessageQueueNew+0x88>
  46057. if ((attr->cb_mem != NULL) && (attr->cb_size >= sizeof(StaticQueue_t)) &&
  46058. 8013b6e: 687b ldr r3, [r7, #4]
  46059. 8013b70: 689b ldr r3, [r3, #8]
  46060. 8013b72: 2b00 cmp r3, #0
  46061. 8013b74: d012 beq.n 8013b9c <osMessageQueueNew+0x62>
  46062. 8013b76: 687b ldr r3, [r7, #4]
  46063. 8013b78: 68db ldr r3, [r3, #12]
  46064. 8013b7a: 2b4f cmp r3, #79 @ 0x4f
  46065. 8013b7c: d90e bls.n 8013b9c <osMessageQueueNew+0x62>
  46066. (attr->mq_mem != NULL) && (attr->mq_size >= (msg_count * msg_size))) {
  46067. 8013b7e: 687b ldr r3, [r7, #4]
  46068. 8013b80: 691b ldr r3, [r3, #16]
  46069. if ((attr->cb_mem != NULL) && (attr->cb_size >= sizeof(StaticQueue_t)) &&
  46070. 8013b82: 2b00 cmp r3, #0
  46071. 8013b84: d00a beq.n 8013b9c <osMessageQueueNew+0x62>
  46072. (attr->mq_mem != NULL) && (attr->mq_size >= (msg_count * msg_size))) {
  46073. 8013b86: 687b ldr r3, [r7, #4]
  46074. 8013b88: 695a ldr r2, [r3, #20]
  46075. 8013b8a: 68fb ldr r3, [r7, #12]
  46076. 8013b8c: 68b9 ldr r1, [r7, #8]
  46077. 8013b8e: fb01 f303 mul.w r3, r1, r3
  46078. 8013b92: 429a cmp r2, r3
  46079. 8013b94: d302 bcc.n 8013b9c <osMessageQueueNew+0x62>
  46080. mem = 1;
  46081. 8013b96: 2301 movs r3, #1
  46082. 8013b98: 61bb str r3, [r7, #24]
  46083. 8013b9a: e014 b.n 8013bc6 <osMessageQueueNew+0x8c>
  46084. }
  46085. else {
  46086. if ((attr->cb_mem == NULL) && (attr->cb_size == 0U) &&
  46087. 8013b9c: 687b ldr r3, [r7, #4]
  46088. 8013b9e: 689b ldr r3, [r3, #8]
  46089. 8013ba0: 2b00 cmp r3, #0
  46090. 8013ba2: d110 bne.n 8013bc6 <osMessageQueueNew+0x8c>
  46091. 8013ba4: 687b ldr r3, [r7, #4]
  46092. 8013ba6: 68db ldr r3, [r3, #12]
  46093. 8013ba8: 2b00 cmp r3, #0
  46094. 8013baa: d10c bne.n 8013bc6 <osMessageQueueNew+0x8c>
  46095. (attr->mq_mem == NULL) && (attr->mq_size == 0U)) {
  46096. 8013bac: 687b ldr r3, [r7, #4]
  46097. 8013bae: 691b ldr r3, [r3, #16]
  46098. if ((attr->cb_mem == NULL) && (attr->cb_size == 0U) &&
  46099. 8013bb0: 2b00 cmp r3, #0
  46100. 8013bb2: d108 bne.n 8013bc6 <osMessageQueueNew+0x8c>
  46101. (attr->mq_mem == NULL) && (attr->mq_size == 0U)) {
  46102. 8013bb4: 687b ldr r3, [r7, #4]
  46103. 8013bb6: 695b ldr r3, [r3, #20]
  46104. 8013bb8: 2b00 cmp r3, #0
  46105. 8013bba: d104 bne.n 8013bc6 <osMessageQueueNew+0x8c>
  46106. mem = 0;
  46107. 8013bbc: 2300 movs r3, #0
  46108. 8013bbe: 61bb str r3, [r7, #24]
  46109. 8013bc0: e001 b.n 8013bc6 <osMessageQueueNew+0x8c>
  46110. }
  46111. }
  46112. }
  46113. else {
  46114. mem = 0;
  46115. 8013bc2: 2300 movs r3, #0
  46116. 8013bc4: 61bb str r3, [r7, #24]
  46117. }
  46118. if (mem == 1) {
  46119. 8013bc6: 69bb ldr r3, [r7, #24]
  46120. 8013bc8: 2b01 cmp r3, #1
  46121. 8013bca: d10b bne.n 8013be4 <osMessageQueueNew+0xaa>
  46122. #if (configSUPPORT_STATIC_ALLOCATION == 1)
  46123. hQueue = xQueueCreateStatic (msg_count, msg_size, attr->mq_mem, attr->cb_mem);
  46124. 8013bcc: 687b ldr r3, [r7, #4]
  46125. 8013bce: 691a ldr r2, [r3, #16]
  46126. 8013bd0: 687b ldr r3, [r7, #4]
  46127. 8013bd2: 689b ldr r3, [r3, #8]
  46128. 8013bd4: 2100 movs r1, #0
  46129. 8013bd6: 9100 str r1, [sp, #0]
  46130. 8013bd8: 68b9 ldr r1, [r7, #8]
  46131. 8013bda: 68f8 ldr r0, [r7, #12]
  46132. 8013bdc: f000 fa30 bl 8014040 <xQueueGenericCreateStatic>
  46133. 8013be0: 61f8 str r0, [r7, #28]
  46134. 8013be2: e008 b.n 8013bf6 <osMessageQueueNew+0xbc>
  46135. #endif
  46136. }
  46137. else {
  46138. if (mem == 0) {
  46139. 8013be4: 69bb ldr r3, [r7, #24]
  46140. 8013be6: 2b00 cmp r3, #0
  46141. 8013be8: d105 bne.n 8013bf6 <osMessageQueueNew+0xbc>
  46142. #if (configSUPPORT_DYNAMIC_ALLOCATION == 1)
  46143. hQueue = xQueueCreate (msg_count, msg_size);
  46144. 8013bea: 2200 movs r2, #0
  46145. 8013bec: 68b9 ldr r1, [r7, #8]
  46146. 8013bee: 68f8 ldr r0, [r7, #12]
  46147. 8013bf0: f000 faa3 bl 801413a <xQueueGenericCreate>
  46148. 8013bf4: 61f8 str r0, [r7, #28]
  46149. #endif
  46150. }
  46151. }
  46152. #if (configQUEUE_REGISTRY_SIZE > 0)
  46153. if (hQueue != NULL) {
  46154. 8013bf6: 69fb ldr r3, [r7, #28]
  46155. 8013bf8: 2b00 cmp r3, #0
  46156. 8013bfa: d00c beq.n 8013c16 <osMessageQueueNew+0xdc>
  46157. if (attr != NULL) {
  46158. 8013bfc: 687b ldr r3, [r7, #4]
  46159. 8013bfe: 2b00 cmp r3, #0
  46160. 8013c00: d003 beq.n 8013c0a <osMessageQueueNew+0xd0>
  46161. name = attr->name;
  46162. 8013c02: 687b ldr r3, [r7, #4]
  46163. 8013c04: 681b ldr r3, [r3, #0]
  46164. 8013c06: 617b str r3, [r7, #20]
  46165. 8013c08: e001 b.n 8013c0e <osMessageQueueNew+0xd4>
  46166. } else {
  46167. name = NULL;
  46168. 8013c0a: 2300 movs r3, #0
  46169. 8013c0c: 617b str r3, [r7, #20]
  46170. }
  46171. vQueueAddToRegistry (hQueue, name);
  46172. 8013c0e: 6979 ldr r1, [r7, #20]
  46173. 8013c10: 69f8 ldr r0, [r7, #28]
  46174. 8013c12: f001 f8e5 bl 8014de0 <vQueueAddToRegistry>
  46175. }
  46176. #endif
  46177. }
  46178. return ((osMessageQueueId_t)hQueue);
  46179. 8013c16: 69fb ldr r3, [r7, #28]
  46180. }
  46181. 8013c18: 4618 mov r0, r3
  46182. 8013c1a: 3720 adds r7, #32
  46183. 8013c1c: 46bd mov sp, r7
  46184. 8013c1e: bd80 pop {r7, pc}
  46185. 08013c20 <osMessageQueuePut>:
  46186. osStatus_t osMessageQueuePut (osMessageQueueId_t mq_id, const void *msg_ptr, uint8_t msg_prio, uint32_t timeout) {
  46187. 8013c20: b580 push {r7, lr}
  46188. 8013c22: b088 sub sp, #32
  46189. 8013c24: af00 add r7, sp, #0
  46190. 8013c26: 60f8 str r0, [r7, #12]
  46191. 8013c28: 60b9 str r1, [r7, #8]
  46192. 8013c2a: 603b str r3, [r7, #0]
  46193. 8013c2c: 4613 mov r3, r2
  46194. 8013c2e: 71fb strb r3, [r7, #7]
  46195. QueueHandle_t hQueue = (QueueHandle_t)mq_id;
  46196. 8013c30: 68fb ldr r3, [r7, #12]
  46197. 8013c32: 61bb str r3, [r7, #24]
  46198. osStatus_t stat;
  46199. BaseType_t yield;
  46200. (void)msg_prio; /* Message priority is ignored */
  46201. stat = osOK;
  46202. 8013c34: 2300 movs r3, #0
  46203. 8013c36: 61fb str r3, [r7, #28]
  46204. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  46205. 8013c38: f3ef 8305 mrs r3, IPSR
  46206. 8013c3c: 617b str r3, [r7, #20]
  46207. return(result);
  46208. 8013c3e: 697b ldr r3, [r7, #20]
  46209. if (IS_IRQ()) {
  46210. 8013c40: 2b00 cmp r3, #0
  46211. 8013c42: d028 beq.n 8013c96 <osMessageQueuePut+0x76>
  46212. if ((hQueue == NULL) || (msg_ptr == NULL) || (timeout != 0U)) {
  46213. 8013c44: 69bb ldr r3, [r7, #24]
  46214. 8013c46: 2b00 cmp r3, #0
  46215. 8013c48: d005 beq.n 8013c56 <osMessageQueuePut+0x36>
  46216. 8013c4a: 68bb ldr r3, [r7, #8]
  46217. 8013c4c: 2b00 cmp r3, #0
  46218. 8013c4e: d002 beq.n 8013c56 <osMessageQueuePut+0x36>
  46219. 8013c50: 683b ldr r3, [r7, #0]
  46220. 8013c52: 2b00 cmp r3, #0
  46221. 8013c54: d003 beq.n 8013c5e <osMessageQueuePut+0x3e>
  46222. stat = osErrorParameter;
  46223. 8013c56: f06f 0303 mvn.w r3, #3
  46224. 8013c5a: 61fb str r3, [r7, #28]
  46225. 8013c5c: e038 b.n 8013cd0 <osMessageQueuePut+0xb0>
  46226. }
  46227. else {
  46228. yield = pdFALSE;
  46229. 8013c5e: 2300 movs r3, #0
  46230. 8013c60: 613b str r3, [r7, #16]
  46231. if (xQueueSendToBackFromISR (hQueue, msg_ptr, &yield) != pdTRUE) {
  46232. 8013c62: f107 0210 add.w r2, r7, #16
  46233. 8013c66: 2300 movs r3, #0
  46234. 8013c68: 68b9 ldr r1, [r7, #8]
  46235. 8013c6a: 69b8 ldr r0, [r7, #24]
  46236. 8013c6c: f000 fc7e bl 801456c <xQueueGenericSendFromISR>
  46237. 8013c70: 4603 mov r3, r0
  46238. 8013c72: 2b01 cmp r3, #1
  46239. 8013c74: d003 beq.n 8013c7e <osMessageQueuePut+0x5e>
  46240. stat = osErrorResource;
  46241. 8013c76: f06f 0302 mvn.w r3, #2
  46242. 8013c7a: 61fb str r3, [r7, #28]
  46243. 8013c7c: e028 b.n 8013cd0 <osMessageQueuePut+0xb0>
  46244. } else {
  46245. portYIELD_FROM_ISR (yield);
  46246. 8013c7e: 693b ldr r3, [r7, #16]
  46247. 8013c80: 2b00 cmp r3, #0
  46248. 8013c82: d025 beq.n 8013cd0 <osMessageQueuePut+0xb0>
  46249. 8013c84: 4b15 ldr r3, [pc, #84] @ (8013cdc <osMessageQueuePut+0xbc>)
  46250. 8013c86: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  46251. 8013c8a: 601a str r2, [r3, #0]
  46252. 8013c8c: f3bf 8f4f dsb sy
  46253. 8013c90: f3bf 8f6f isb sy
  46254. 8013c94: e01c b.n 8013cd0 <osMessageQueuePut+0xb0>
  46255. }
  46256. }
  46257. }
  46258. else {
  46259. if ((hQueue == NULL) || (msg_ptr == NULL)) {
  46260. 8013c96: 69bb ldr r3, [r7, #24]
  46261. 8013c98: 2b00 cmp r3, #0
  46262. 8013c9a: d002 beq.n 8013ca2 <osMessageQueuePut+0x82>
  46263. 8013c9c: 68bb ldr r3, [r7, #8]
  46264. 8013c9e: 2b00 cmp r3, #0
  46265. 8013ca0: d103 bne.n 8013caa <osMessageQueuePut+0x8a>
  46266. stat = osErrorParameter;
  46267. 8013ca2: f06f 0303 mvn.w r3, #3
  46268. 8013ca6: 61fb str r3, [r7, #28]
  46269. 8013ca8: e012 b.n 8013cd0 <osMessageQueuePut+0xb0>
  46270. }
  46271. else {
  46272. if (xQueueSendToBack (hQueue, msg_ptr, (TickType_t)timeout) != pdPASS) {
  46273. 8013caa: 2300 movs r3, #0
  46274. 8013cac: 683a ldr r2, [r7, #0]
  46275. 8013cae: 68b9 ldr r1, [r7, #8]
  46276. 8013cb0: 69b8 ldr r0, [r7, #24]
  46277. 8013cb2: f000 fb59 bl 8014368 <xQueueGenericSend>
  46278. 8013cb6: 4603 mov r3, r0
  46279. 8013cb8: 2b01 cmp r3, #1
  46280. 8013cba: d009 beq.n 8013cd0 <osMessageQueuePut+0xb0>
  46281. if (timeout != 0U) {
  46282. 8013cbc: 683b ldr r3, [r7, #0]
  46283. 8013cbe: 2b00 cmp r3, #0
  46284. 8013cc0: d003 beq.n 8013cca <osMessageQueuePut+0xaa>
  46285. stat = osErrorTimeout;
  46286. 8013cc2: f06f 0301 mvn.w r3, #1
  46287. 8013cc6: 61fb str r3, [r7, #28]
  46288. 8013cc8: e002 b.n 8013cd0 <osMessageQueuePut+0xb0>
  46289. } else {
  46290. stat = osErrorResource;
  46291. 8013cca: f06f 0302 mvn.w r3, #2
  46292. 8013cce: 61fb str r3, [r7, #28]
  46293. }
  46294. }
  46295. }
  46296. }
  46297. return (stat);
  46298. 8013cd0: 69fb ldr r3, [r7, #28]
  46299. }
  46300. 8013cd2: 4618 mov r0, r3
  46301. 8013cd4: 3720 adds r7, #32
  46302. 8013cd6: 46bd mov sp, r7
  46303. 8013cd8: bd80 pop {r7, pc}
  46304. 8013cda: bf00 nop
  46305. 8013cdc: e000ed04 .word 0xe000ed04
  46306. 08013ce0 <osMessageQueueGet>:
  46307. osStatus_t osMessageQueueGet (osMessageQueueId_t mq_id, void *msg_ptr, uint8_t *msg_prio, uint32_t timeout) {
  46308. 8013ce0: b580 push {r7, lr}
  46309. 8013ce2: b088 sub sp, #32
  46310. 8013ce4: af00 add r7, sp, #0
  46311. 8013ce6: 60f8 str r0, [r7, #12]
  46312. 8013ce8: 60b9 str r1, [r7, #8]
  46313. 8013cea: 607a str r2, [r7, #4]
  46314. 8013cec: 603b str r3, [r7, #0]
  46315. QueueHandle_t hQueue = (QueueHandle_t)mq_id;
  46316. 8013cee: 68fb ldr r3, [r7, #12]
  46317. 8013cf0: 61bb str r3, [r7, #24]
  46318. osStatus_t stat;
  46319. BaseType_t yield;
  46320. (void)msg_prio; /* Message priority is ignored */
  46321. stat = osOK;
  46322. 8013cf2: 2300 movs r3, #0
  46323. 8013cf4: 61fb str r3, [r7, #28]
  46324. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  46325. 8013cf6: f3ef 8305 mrs r3, IPSR
  46326. 8013cfa: 617b str r3, [r7, #20]
  46327. return(result);
  46328. 8013cfc: 697b ldr r3, [r7, #20]
  46329. if (IS_IRQ()) {
  46330. 8013cfe: 2b00 cmp r3, #0
  46331. 8013d00: d028 beq.n 8013d54 <osMessageQueueGet+0x74>
  46332. if ((hQueue == NULL) || (msg_ptr == NULL) || (timeout != 0U)) {
  46333. 8013d02: 69bb ldr r3, [r7, #24]
  46334. 8013d04: 2b00 cmp r3, #0
  46335. 8013d06: d005 beq.n 8013d14 <osMessageQueueGet+0x34>
  46336. 8013d08: 68bb ldr r3, [r7, #8]
  46337. 8013d0a: 2b00 cmp r3, #0
  46338. 8013d0c: d002 beq.n 8013d14 <osMessageQueueGet+0x34>
  46339. 8013d0e: 683b ldr r3, [r7, #0]
  46340. 8013d10: 2b00 cmp r3, #0
  46341. 8013d12: d003 beq.n 8013d1c <osMessageQueueGet+0x3c>
  46342. stat = osErrorParameter;
  46343. 8013d14: f06f 0303 mvn.w r3, #3
  46344. 8013d18: 61fb str r3, [r7, #28]
  46345. 8013d1a: e037 b.n 8013d8c <osMessageQueueGet+0xac>
  46346. }
  46347. else {
  46348. yield = pdFALSE;
  46349. 8013d1c: 2300 movs r3, #0
  46350. 8013d1e: 613b str r3, [r7, #16]
  46351. if (xQueueReceiveFromISR (hQueue, msg_ptr, &yield) != pdPASS) {
  46352. 8013d20: f107 0310 add.w r3, r7, #16
  46353. 8013d24: 461a mov r2, r3
  46354. 8013d26: 68b9 ldr r1, [r7, #8]
  46355. 8013d28: 69b8 ldr r0, [r7, #24]
  46356. 8013d2a: f000 feaf bl 8014a8c <xQueueReceiveFromISR>
  46357. 8013d2e: 4603 mov r3, r0
  46358. 8013d30: 2b01 cmp r3, #1
  46359. 8013d32: d003 beq.n 8013d3c <osMessageQueueGet+0x5c>
  46360. stat = osErrorResource;
  46361. 8013d34: f06f 0302 mvn.w r3, #2
  46362. 8013d38: 61fb str r3, [r7, #28]
  46363. 8013d3a: e027 b.n 8013d8c <osMessageQueueGet+0xac>
  46364. } else {
  46365. portYIELD_FROM_ISR (yield);
  46366. 8013d3c: 693b ldr r3, [r7, #16]
  46367. 8013d3e: 2b00 cmp r3, #0
  46368. 8013d40: d024 beq.n 8013d8c <osMessageQueueGet+0xac>
  46369. 8013d42: 4b15 ldr r3, [pc, #84] @ (8013d98 <osMessageQueueGet+0xb8>)
  46370. 8013d44: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  46371. 8013d48: 601a str r2, [r3, #0]
  46372. 8013d4a: f3bf 8f4f dsb sy
  46373. 8013d4e: f3bf 8f6f isb sy
  46374. 8013d52: e01b b.n 8013d8c <osMessageQueueGet+0xac>
  46375. }
  46376. }
  46377. }
  46378. else {
  46379. if ((hQueue == NULL) || (msg_ptr == NULL)) {
  46380. 8013d54: 69bb ldr r3, [r7, #24]
  46381. 8013d56: 2b00 cmp r3, #0
  46382. 8013d58: d002 beq.n 8013d60 <osMessageQueueGet+0x80>
  46383. 8013d5a: 68bb ldr r3, [r7, #8]
  46384. 8013d5c: 2b00 cmp r3, #0
  46385. 8013d5e: d103 bne.n 8013d68 <osMessageQueueGet+0x88>
  46386. stat = osErrorParameter;
  46387. 8013d60: f06f 0303 mvn.w r3, #3
  46388. 8013d64: 61fb str r3, [r7, #28]
  46389. 8013d66: e011 b.n 8013d8c <osMessageQueueGet+0xac>
  46390. }
  46391. else {
  46392. if (xQueueReceive (hQueue, msg_ptr, (TickType_t)timeout) != pdPASS) {
  46393. 8013d68: 683a ldr r2, [r7, #0]
  46394. 8013d6a: 68b9 ldr r1, [r7, #8]
  46395. 8013d6c: 69b8 ldr r0, [r7, #24]
  46396. 8013d6e: f000 fc9b bl 80146a8 <xQueueReceive>
  46397. 8013d72: 4603 mov r3, r0
  46398. 8013d74: 2b01 cmp r3, #1
  46399. 8013d76: d009 beq.n 8013d8c <osMessageQueueGet+0xac>
  46400. if (timeout != 0U) {
  46401. 8013d78: 683b ldr r3, [r7, #0]
  46402. 8013d7a: 2b00 cmp r3, #0
  46403. 8013d7c: d003 beq.n 8013d86 <osMessageQueueGet+0xa6>
  46404. stat = osErrorTimeout;
  46405. 8013d7e: f06f 0301 mvn.w r3, #1
  46406. 8013d82: 61fb str r3, [r7, #28]
  46407. 8013d84: e002 b.n 8013d8c <osMessageQueueGet+0xac>
  46408. } else {
  46409. stat = osErrorResource;
  46410. 8013d86: f06f 0302 mvn.w r3, #2
  46411. 8013d8a: 61fb str r3, [r7, #28]
  46412. }
  46413. }
  46414. }
  46415. }
  46416. return (stat);
  46417. 8013d8c: 69fb ldr r3, [r7, #28]
  46418. }
  46419. 8013d8e: 4618 mov r0, r3
  46420. 8013d90: 3720 adds r7, #32
  46421. 8013d92: 46bd mov sp, r7
  46422. 8013d94: bd80 pop {r7, pc}
  46423. 8013d96: bf00 nop
  46424. 8013d98: e000ed04 .word 0xe000ed04
  46425. 08013d9c <vApplicationGetIdleTaskMemory>:
  46426. /*
  46427. vApplicationGetIdleTaskMemory gets called when configSUPPORT_STATIC_ALLOCATION
  46428. equals to 1 and is required for static memory allocation support.
  46429. */
  46430. __WEAK void vApplicationGetIdleTaskMemory (StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize) {
  46431. 8013d9c: b480 push {r7}
  46432. 8013d9e: b085 sub sp, #20
  46433. 8013da0: af00 add r7, sp, #0
  46434. 8013da2: 60f8 str r0, [r7, #12]
  46435. 8013da4: 60b9 str r1, [r7, #8]
  46436. 8013da6: 607a str r2, [r7, #4]
  46437. /* Idle task control block and stack */
  46438. static StaticTask_t Idle_TCB;
  46439. static StackType_t Idle_Stack[configMINIMAL_STACK_SIZE];
  46440. *ppxIdleTaskTCBBuffer = &Idle_TCB;
  46441. 8013da8: 68fb ldr r3, [r7, #12]
  46442. 8013daa: 4a07 ldr r2, [pc, #28] @ (8013dc8 <vApplicationGetIdleTaskMemory+0x2c>)
  46443. 8013dac: 601a str r2, [r3, #0]
  46444. *ppxIdleTaskStackBuffer = &Idle_Stack[0];
  46445. 8013dae: 68bb ldr r3, [r7, #8]
  46446. 8013db0: 4a06 ldr r2, [pc, #24] @ (8013dcc <vApplicationGetIdleTaskMemory+0x30>)
  46447. 8013db2: 601a str r2, [r3, #0]
  46448. *pulIdleTaskStackSize = (uint32_t)configMINIMAL_STACK_SIZE;
  46449. 8013db4: 687b ldr r3, [r7, #4]
  46450. 8013db6: f44f 7200 mov.w r2, #512 @ 0x200
  46451. 8013dba: 601a str r2, [r3, #0]
  46452. }
  46453. 8013dbc: bf00 nop
  46454. 8013dbe: 3714 adds r7, #20
  46455. 8013dc0: 46bd mov sp, r7
  46456. 8013dc2: f85d 7b04 ldr.w r7, [sp], #4
  46457. 8013dc6: 4770 bx lr
  46458. 8013dc8: 24001084 .word 0x24001084
  46459. 8013dcc: 2400112c .word 0x2400112c
  46460. 08013dd0 <vApplicationGetTimerTaskMemory>:
  46461. /*
  46462. vApplicationGetTimerTaskMemory gets called when configSUPPORT_STATIC_ALLOCATION
  46463. equals to 1 and is required for static memory allocation support.
  46464. */
  46465. __WEAK void vApplicationGetTimerTaskMemory (StaticTask_t **ppxTimerTaskTCBBuffer, StackType_t **ppxTimerTaskStackBuffer, uint32_t *pulTimerTaskStackSize) {
  46466. 8013dd0: b480 push {r7}
  46467. 8013dd2: b085 sub sp, #20
  46468. 8013dd4: af00 add r7, sp, #0
  46469. 8013dd6: 60f8 str r0, [r7, #12]
  46470. 8013dd8: 60b9 str r1, [r7, #8]
  46471. 8013dda: 607a str r2, [r7, #4]
  46472. /* Timer task control block and stack */
  46473. static StaticTask_t Timer_TCB;
  46474. static StackType_t Timer_Stack[configTIMER_TASK_STACK_DEPTH];
  46475. *ppxTimerTaskTCBBuffer = &Timer_TCB;
  46476. 8013ddc: 68fb ldr r3, [r7, #12]
  46477. 8013dde: 4a07 ldr r2, [pc, #28] @ (8013dfc <vApplicationGetTimerTaskMemory+0x2c>)
  46478. 8013de0: 601a str r2, [r3, #0]
  46479. *ppxTimerTaskStackBuffer = &Timer_Stack[0];
  46480. 8013de2: 68bb ldr r3, [r7, #8]
  46481. 8013de4: 4a06 ldr r2, [pc, #24] @ (8013e00 <vApplicationGetTimerTaskMemory+0x30>)
  46482. 8013de6: 601a str r2, [r3, #0]
  46483. *pulTimerTaskStackSize = (uint32_t)configTIMER_TASK_STACK_DEPTH;
  46484. 8013de8: 687b ldr r3, [r7, #4]
  46485. 8013dea: f44f 6280 mov.w r2, #1024 @ 0x400
  46486. 8013dee: 601a str r2, [r3, #0]
  46487. }
  46488. 8013df0: bf00 nop
  46489. 8013df2: 3714 adds r7, #20
  46490. 8013df4: 46bd mov sp, r7
  46491. 8013df6: f85d 7b04 ldr.w r7, [sp], #4
  46492. 8013dfa: 4770 bx lr
  46493. 8013dfc: 2400192c .word 0x2400192c
  46494. 8013e00: 240019d4 .word 0x240019d4
  46495. 08013e04 <vListInitialise>:
  46496. /*-----------------------------------------------------------
  46497. * PUBLIC LIST API documented in list.h
  46498. *----------------------------------------------------------*/
  46499. void vListInitialise( List_t * const pxList )
  46500. {
  46501. 8013e04: b480 push {r7}
  46502. 8013e06: b083 sub sp, #12
  46503. 8013e08: af00 add r7, sp, #0
  46504. 8013e0a: 6078 str r0, [r7, #4]
  46505. /* The list structure contains a list item which is used to mark the
  46506. end of the list. To initialise the list the list end is inserted
  46507. as the only list entry. */
  46508. 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. */
  46509. 8013e0c: 687b ldr r3, [r7, #4]
  46510. 8013e0e: f103 0208 add.w r2, r3, #8
  46511. 8013e12: 687b ldr r3, [r7, #4]
  46512. 8013e14: 605a str r2, [r3, #4]
  46513. /* The list end value is the highest possible value in the list to
  46514. ensure it remains at the end of the list. */
  46515. pxList->xListEnd.xItemValue = portMAX_DELAY;
  46516. 8013e16: 687b ldr r3, [r7, #4]
  46517. 8013e18: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
  46518. 8013e1c: 609a str r2, [r3, #8]
  46519. /* The list end next and previous pointers point to itself so we know
  46520. when the list is empty. */
  46521. 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. */
  46522. 8013e1e: 687b ldr r3, [r7, #4]
  46523. 8013e20: f103 0208 add.w r2, r3, #8
  46524. 8013e24: 687b ldr r3, [r7, #4]
  46525. 8013e26: 60da str r2, [r3, #12]
  46526. 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. */
  46527. 8013e28: 687b ldr r3, [r7, #4]
  46528. 8013e2a: f103 0208 add.w r2, r3, #8
  46529. 8013e2e: 687b ldr r3, [r7, #4]
  46530. 8013e30: 611a str r2, [r3, #16]
  46531. pxList->uxNumberOfItems = ( UBaseType_t ) 0U;
  46532. 8013e32: 687b ldr r3, [r7, #4]
  46533. 8013e34: 2200 movs r2, #0
  46534. 8013e36: 601a str r2, [r3, #0]
  46535. /* Write known values into the list if
  46536. configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
  46537. listSET_LIST_INTEGRITY_CHECK_1_VALUE( pxList );
  46538. listSET_LIST_INTEGRITY_CHECK_2_VALUE( pxList );
  46539. }
  46540. 8013e38: bf00 nop
  46541. 8013e3a: 370c adds r7, #12
  46542. 8013e3c: 46bd mov sp, r7
  46543. 8013e3e: f85d 7b04 ldr.w r7, [sp], #4
  46544. 8013e42: 4770 bx lr
  46545. 08013e44 <vListInitialiseItem>:
  46546. /*-----------------------------------------------------------*/
  46547. void vListInitialiseItem( ListItem_t * const pxItem )
  46548. {
  46549. 8013e44: b480 push {r7}
  46550. 8013e46: b083 sub sp, #12
  46551. 8013e48: af00 add r7, sp, #0
  46552. 8013e4a: 6078 str r0, [r7, #4]
  46553. /* Make sure the list item is not recorded as being on a list. */
  46554. pxItem->pxContainer = NULL;
  46555. 8013e4c: 687b ldr r3, [r7, #4]
  46556. 8013e4e: 2200 movs r2, #0
  46557. 8013e50: 611a str r2, [r3, #16]
  46558. /* Write known values into the list item if
  46559. configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
  46560. listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem );
  46561. listSET_SECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem );
  46562. }
  46563. 8013e52: bf00 nop
  46564. 8013e54: 370c adds r7, #12
  46565. 8013e56: 46bd mov sp, r7
  46566. 8013e58: f85d 7b04 ldr.w r7, [sp], #4
  46567. 8013e5c: 4770 bx lr
  46568. 08013e5e <vListInsertEnd>:
  46569. /*-----------------------------------------------------------*/
  46570. void vListInsertEnd( List_t * const pxList, ListItem_t * const pxNewListItem )
  46571. {
  46572. 8013e5e: b480 push {r7}
  46573. 8013e60: b085 sub sp, #20
  46574. 8013e62: af00 add r7, sp, #0
  46575. 8013e64: 6078 str r0, [r7, #4]
  46576. 8013e66: 6039 str r1, [r7, #0]
  46577. ListItem_t * const pxIndex = pxList->pxIndex;
  46578. 8013e68: 687b ldr r3, [r7, #4]
  46579. 8013e6a: 685b ldr r3, [r3, #4]
  46580. 8013e6c: 60fb str r3, [r7, #12]
  46581. listTEST_LIST_ITEM_INTEGRITY( pxNewListItem );
  46582. /* Insert a new list item into pxList, but rather than sort the list,
  46583. makes the new list item the last item to be removed by a call to
  46584. listGET_OWNER_OF_NEXT_ENTRY(). */
  46585. pxNewListItem->pxNext = pxIndex;
  46586. 8013e6e: 683b ldr r3, [r7, #0]
  46587. 8013e70: 68fa ldr r2, [r7, #12]
  46588. 8013e72: 605a str r2, [r3, #4]
  46589. pxNewListItem->pxPrevious = pxIndex->pxPrevious;
  46590. 8013e74: 68fb ldr r3, [r7, #12]
  46591. 8013e76: 689a ldr r2, [r3, #8]
  46592. 8013e78: 683b ldr r3, [r7, #0]
  46593. 8013e7a: 609a str r2, [r3, #8]
  46594. /* Only used during decision coverage testing. */
  46595. mtCOVERAGE_TEST_DELAY();
  46596. pxIndex->pxPrevious->pxNext = pxNewListItem;
  46597. 8013e7c: 68fb ldr r3, [r7, #12]
  46598. 8013e7e: 689b ldr r3, [r3, #8]
  46599. 8013e80: 683a ldr r2, [r7, #0]
  46600. 8013e82: 605a str r2, [r3, #4]
  46601. pxIndex->pxPrevious = pxNewListItem;
  46602. 8013e84: 68fb ldr r3, [r7, #12]
  46603. 8013e86: 683a ldr r2, [r7, #0]
  46604. 8013e88: 609a str r2, [r3, #8]
  46605. /* Remember which list the item is in. */
  46606. pxNewListItem->pxContainer = pxList;
  46607. 8013e8a: 683b ldr r3, [r7, #0]
  46608. 8013e8c: 687a ldr r2, [r7, #4]
  46609. 8013e8e: 611a str r2, [r3, #16]
  46610. ( pxList->uxNumberOfItems )++;
  46611. 8013e90: 687b ldr r3, [r7, #4]
  46612. 8013e92: 681b ldr r3, [r3, #0]
  46613. 8013e94: 1c5a adds r2, r3, #1
  46614. 8013e96: 687b ldr r3, [r7, #4]
  46615. 8013e98: 601a str r2, [r3, #0]
  46616. }
  46617. 8013e9a: bf00 nop
  46618. 8013e9c: 3714 adds r7, #20
  46619. 8013e9e: 46bd mov sp, r7
  46620. 8013ea0: f85d 7b04 ldr.w r7, [sp], #4
  46621. 8013ea4: 4770 bx lr
  46622. 08013ea6 <vListInsert>:
  46623. /*-----------------------------------------------------------*/
  46624. void vListInsert( List_t * const pxList, ListItem_t * const pxNewListItem )
  46625. {
  46626. 8013ea6: b480 push {r7}
  46627. 8013ea8: b085 sub sp, #20
  46628. 8013eaa: af00 add r7, sp, #0
  46629. 8013eac: 6078 str r0, [r7, #4]
  46630. 8013eae: 6039 str r1, [r7, #0]
  46631. ListItem_t *pxIterator;
  46632. const TickType_t xValueOfInsertion = pxNewListItem->xItemValue;
  46633. 8013eb0: 683b ldr r3, [r7, #0]
  46634. 8013eb2: 681b ldr r3, [r3, #0]
  46635. 8013eb4: 60bb str r3, [r7, #8]
  46636. new list item should be placed after it. This ensures that TCBs which are
  46637. stored in ready lists (all of which have the same xItemValue value) get a
  46638. share of the CPU. However, if the xItemValue is the same as the back marker
  46639. the iteration loop below will not end. Therefore the value is checked
  46640. first, and the algorithm slightly modified if necessary. */
  46641. if( xValueOfInsertion == portMAX_DELAY )
  46642. 8013eb6: 68bb ldr r3, [r7, #8]
  46643. 8013eb8: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  46644. 8013ebc: d103 bne.n 8013ec6 <vListInsert+0x20>
  46645. {
  46646. pxIterator = pxList->xListEnd.pxPrevious;
  46647. 8013ebe: 687b ldr r3, [r7, #4]
  46648. 8013ec0: 691b ldr r3, [r3, #16]
  46649. 8013ec2: 60fb str r3, [r7, #12]
  46650. 8013ec4: e00c b.n 8013ee0 <vListInsert+0x3a>
  46651. 4) Using a queue or semaphore before it has been initialised or
  46652. before the scheduler has been started (are interrupts firing
  46653. before vTaskStartScheduler() has been called?).
  46654. **********************************************************************/
  46655. 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. */
  46656. 8013ec6: 687b ldr r3, [r7, #4]
  46657. 8013ec8: 3308 adds r3, #8
  46658. 8013eca: 60fb str r3, [r7, #12]
  46659. 8013ecc: e002 b.n 8013ed4 <vListInsert+0x2e>
  46660. 8013ece: 68fb ldr r3, [r7, #12]
  46661. 8013ed0: 685b ldr r3, [r3, #4]
  46662. 8013ed2: 60fb str r3, [r7, #12]
  46663. 8013ed4: 68fb ldr r3, [r7, #12]
  46664. 8013ed6: 685b ldr r3, [r3, #4]
  46665. 8013ed8: 681b ldr r3, [r3, #0]
  46666. 8013eda: 68ba ldr r2, [r7, #8]
  46667. 8013edc: 429a cmp r2, r3
  46668. 8013ede: d2f6 bcs.n 8013ece <vListInsert+0x28>
  46669. /* There is nothing to do here, just iterating to the wanted
  46670. insertion position. */
  46671. }
  46672. }
  46673. pxNewListItem->pxNext = pxIterator->pxNext;
  46674. 8013ee0: 68fb ldr r3, [r7, #12]
  46675. 8013ee2: 685a ldr r2, [r3, #4]
  46676. 8013ee4: 683b ldr r3, [r7, #0]
  46677. 8013ee6: 605a str r2, [r3, #4]
  46678. pxNewListItem->pxNext->pxPrevious = pxNewListItem;
  46679. 8013ee8: 683b ldr r3, [r7, #0]
  46680. 8013eea: 685b ldr r3, [r3, #4]
  46681. 8013eec: 683a ldr r2, [r7, #0]
  46682. 8013eee: 609a str r2, [r3, #8]
  46683. pxNewListItem->pxPrevious = pxIterator;
  46684. 8013ef0: 683b ldr r3, [r7, #0]
  46685. 8013ef2: 68fa ldr r2, [r7, #12]
  46686. 8013ef4: 609a str r2, [r3, #8]
  46687. pxIterator->pxNext = pxNewListItem;
  46688. 8013ef6: 68fb ldr r3, [r7, #12]
  46689. 8013ef8: 683a ldr r2, [r7, #0]
  46690. 8013efa: 605a str r2, [r3, #4]
  46691. /* Remember which list the item is in. This allows fast removal of the
  46692. item later. */
  46693. pxNewListItem->pxContainer = pxList;
  46694. 8013efc: 683b ldr r3, [r7, #0]
  46695. 8013efe: 687a ldr r2, [r7, #4]
  46696. 8013f00: 611a str r2, [r3, #16]
  46697. ( pxList->uxNumberOfItems )++;
  46698. 8013f02: 687b ldr r3, [r7, #4]
  46699. 8013f04: 681b ldr r3, [r3, #0]
  46700. 8013f06: 1c5a adds r2, r3, #1
  46701. 8013f08: 687b ldr r3, [r7, #4]
  46702. 8013f0a: 601a str r2, [r3, #0]
  46703. }
  46704. 8013f0c: bf00 nop
  46705. 8013f0e: 3714 adds r7, #20
  46706. 8013f10: 46bd mov sp, r7
  46707. 8013f12: f85d 7b04 ldr.w r7, [sp], #4
  46708. 8013f16: 4770 bx lr
  46709. 08013f18 <uxListRemove>:
  46710. /*-----------------------------------------------------------*/
  46711. UBaseType_t uxListRemove( ListItem_t * const pxItemToRemove )
  46712. {
  46713. 8013f18: b480 push {r7}
  46714. 8013f1a: b085 sub sp, #20
  46715. 8013f1c: af00 add r7, sp, #0
  46716. 8013f1e: 6078 str r0, [r7, #4]
  46717. /* The list item knows which list it is in. Obtain the list from the list
  46718. item. */
  46719. List_t * const pxList = pxItemToRemove->pxContainer;
  46720. 8013f20: 687b ldr r3, [r7, #4]
  46721. 8013f22: 691b ldr r3, [r3, #16]
  46722. 8013f24: 60fb str r3, [r7, #12]
  46723. pxItemToRemove->pxNext->pxPrevious = pxItemToRemove->pxPrevious;
  46724. 8013f26: 687b ldr r3, [r7, #4]
  46725. 8013f28: 685b ldr r3, [r3, #4]
  46726. 8013f2a: 687a ldr r2, [r7, #4]
  46727. 8013f2c: 6892 ldr r2, [r2, #8]
  46728. 8013f2e: 609a str r2, [r3, #8]
  46729. pxItemToRemove->pxPrevious->pxNext = pxItemToRemove->pxNext;
  46730. 8013f30: 687b ldr r3, [r7, #4]
  46731. 8013f32: 689b ldr r3, [r3, #8]
  46732. 8013f34: 687a ldr r2, [r7, #4]
  46733. 8013f36: 6852 ldr r2, [r2, #4]
  46734. 8013f38: 605a str r2, [r3, #4]
  46735. /* Only used during decision coverage testing. */
  46736. mtCOVERAGE_TEST_DELAY();
  46737. /* Make sure the index is left pointing to a valid item. */
  46738. if( pxList->pxIndex == pxItemToRemove )
  46739. 8013f3a: 68fb ldr r3, [r7, #12]
  46740. 8013f3c: 685b ldr r3, [r3, #4]
  46741. 8013f3e: 687a ldr r2, [r7, #4]
  46742. 8013f40: 429a cmp r2, r3
  46743. 8013f42: d103 bne.n 8013f4c <uxListRemove+0x34>
  46744. {
  46745. pxList->pxIndex = pxItemToRemove->pxPrevious;
  46746. 8013f44: 687b ldr r3, [r7, #4]
  46747. 8013f46: 689a ldr r2, [r3, #8]
  46748. 8013f48: 68fb ldr r3, [r7, #12]
  46749. 8013f4a: 605a str r2, [r3, #4]
  46750. else
  46751. {
  46752. mtCOVERAGE_TEST_MARKER();
  46753. }
  46754. pxItemToRemove->pxContainer = NULL;
  46755. 8013f4c: 687b ldr r3, [r7, #4]
  46756. 8013f4e: 2200 movs r2, #0
  46757. 8013f50: 611a str r2, [r3, #16]
  46758. ( pxList->uxNumberOfItems )--;
  46759. 8013f52: 68fb ldr r3, [r7, #12]
  46760. 8013f54: 681b ldr r3, [r3, #0]
  46761. 8013f56: 1e5a subs r2, r3, #1
  46762. 8013f58: 68fb ldr r3, [r7, #12]
  46763. 8013f5a: 601a str r2, [r3, #0]
  46764. return pxList->uxNumberOfItems;
  46765. 8013f5c: 68fb ldr r3, [r7, #12]
  46766. 8013f5e: 681b ldr r3, [r3, #0]
  46767. }
  46768. 8013f60: 4618 mov r0, r3
  46769. 8013f62: 3714 adds r7, #20
  46770. 8013f64: 46bd mov sp, r7
  46771. 8013f66: f85d 7b04 ldr.w r7, [sp], #4
  46772. 8013f6a: 4770 bx lr
  46773. 08013f6c <xQueueGenericReset>:
  46774. } \
  46775. taskEXIT_CRITICAL()
  46776. /*-----------------------------------------------------------*/
  46777. BaseType_t xQueueGenericReset( QueueHandle_t xQueue, BaseType_t xNewQueue )
  46778. {
  46779. 8013f6c: b580 push {r7, lr}
  46780. 8013f6e: b084 sub sp, #16
  46781. 8013f70: af00 add r7, sp, #0
  46782. 8013f72: 6078 str r0, [r7, #4]
  46783. 8013f74: 6039 str r1, [r7, #0]
  46784. Queue_t * const pxQueue = xQueue;
  46785. 8013f76: 687b ldr r3, [r7, #4]
  46786. 8013f78: 60fb str r3, [r7, #12]
  46787. configASSERT( pxQueue );
  46788. 8013f7a: 68fb ldr r3, [r7, #12]
  46789. 8013f7c: 2b00 cmp r3, #0
  46790. 8013f7e: d10b bne.n 8013f98 <xQueueGenericReset+0x2c>
  46791. portFORCE_INLINE static void vPortRaiseBASEPRI( void )
  46792. {
  46793. uint32_t ulNewBASEPRI;
  46794. __asm volatile
  46795. 8013f80: f04f 0350 mov.w r3, #80 @ 0x50
  46796. 8013f84: f383 8811 msr BASEPRI, r3
  46797. 8013f88: f3bf 8f6f isb sy
  46798. 8013f8c: f3bf 8f4f dsb sy
  46799. 8013f90: 60bb str r3, [r7, #8]
  46800. " msr basepri, %0 \n" \
  46801. " isb \n" \
  46802. " dsb \n" \
  46803. :"=r" (ulNewBASEPRI) : "i" ( configMAX_SYSCALL_INTERRUPT_PRIORITY ) : "memory"
  46804. );
  46805. }
  46806. 8013f92: bf00 nop
  46807. 8013f94: bf00 nop
  46808. 8013f96: e7fd b.n 8013f94 <xQueueGenericReset+0x28>
  46809. taskENTER_CRITICAL();
  46810. 8013f98: f003 f95e bl 8017258 <vPortEnterCritical>
  46811. {
  46812. pxQueue->u.xQueue.pcTail = pxQueue->pcHead + ( pxQueue->uxLength * pxQueue->uxItemSize ); /*lint !e9016 Pointer arithmetic allowed on char types, especially when it assists conveying intent. */
  46813. 8013f9c: 68fb ldr r3, [r7, #12]
  46814. 8013f9e: 681a ldr r2, [r3, #0]
  46815. 8013fa0: 68fb ldr r3, [r7, #12]
  46816. 8013fa2: 6bdb ldr r3, [r3, #60] @ 0x3c
  46817. 8013fa4: 68f9 ldr r1, [r7, #12]
  46818. 8013fa6: 6c09 ldr r1, [r1, #64] @ 0x40
  46819. 8013fa8: fb01 f303 mul.w r3, r1, r3
  46820. 8013fac: 441a add r2, r3
  46821. 8013fae: 68fb ldr r3, [r7, #12]
  46822. 8013fb0: 609a str r2, [r3, #8]
  46823. pxQueue->uxMessagesWaiting = ( UBaseType_t ) 0U;
  46824. 8013fb2: 68fb ldr r3, [r7, #12]
  46825. 8013fb4: 2200 movs r2, #0
  46826. 8013fb6: 639a str r2, [r3, #56] @ 0x38
  46827. pxQueue->pcWriteTo = pxQueue->pcHead;
  46828. 8013fb8: 68fb ldr r3, [r7, #12]
  46829. 8013fba: 681a ldr r2, [r3, #0]
  46830. 8013fbc: 68fb ldr r3, [r7, #12]
  46831. 8013fbe: 605a str r2, [r3, #4]
  46832. 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. */
  46833. 8013fc0: 68fb ldr r3, [r7, #12]
  46834. 8013fc2: 681a ldr r2, [r3, #0]
  46835. 8013fc4: 68fb ldr r3, [r7, #12]
  46836. 8013fc6: 6bdb ldr r3, [r3, #60] @ 0x3c
  46837. 8013fc8: 3b01 subs r3, #1
  46838. 8013fca: 68f9 ldr r1, [r7, #12]
  46839. 8013fcc: 6c09 ldr r1, [r1, #64] @ 0x40
  46840. 8013fce: fb01 f303 mul.w r3, r1, r3
  46841. 8013fd2: 441a add r2, r3
  46842. 8013fd4: 68fb ldr r3, [r7, #12]
  46843. 8013fd6: 60da str r2, [r3, #12]
  46844. pxQueue->cRxLock = queueUNLOCKED;
  46845. 8013fd8: 68fb ldr r3, [r7, #12]
  46846. 8013fda: 22ff movs r2, #255 @ 0xff
  46847. 8013fdc: f883 2044 strb.w r2, [r3, #68] @ 0x44
  46848. pxQueue->cTxLock = queueUNLOCKED;
  46849. 8013fe0: 68fb ldr r3, [r7, #12]
  46850. 8013fe2: 22ff movs r2, #255 @ 0xff
  46851. 8013fe4: f883 2045 strb.w r2, [r3, #69] @ 0x45
  46852. if( xNewQueue == pdFALSE )
  46853. 8013fe8: 683b ldr r3, [r7, #0]
  46854. 8013fea: 2b00 cmp r3, #0
  46855. 8013fec: d114 bne.n 8014018 <xQueueGenericReset+0xac>
  46856. /* If there are tasks blocked waiting to read from the queue, then
  46857. the tasks will remain blocked as after this function exits the queue
  46858. will still be empty. If there are tasks blocked waiting to write to
  46859. the queue, then one should be unblocked as after this function exits
  46860. it will be possible to write to it. */
  46861. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )
  46862. 8013fee: 68fb ldr r3, [r7, #12]
  46863. 8013ff0: 691b ldr r3, [r3, #16]
  46864. 8013ff2: 2b00 cmp r3, #0
  46865. 8013ff4: d01a beq.n 801402c <xQueueGenericReset+0xc0>
  46866. {
  46867. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE )
  46868. 8013ff6: 68fb ldr r3, [r7, #12]
  46869. 8013ff8: 3310 adds r3, #16
  46870. 8013ffa: 4618 mov r0, r3
  46871. 8013ffc: f001 fdac bl 8015b58 <xTaskRemoveFromEventList>
  46872. 8014000: 4603 mov r3, r0
  46873. 8014002: 2b00 cmp r3, #0
  46874. 8014004: d012 beq.n 801402c <xQueueGenericReset+0xc0>
  46875. {
  46876. queueYIELD_IF_USING_PREEMPTION();
  46877. 8014006: 4b0d ldr r3, [pc, #52] @ (801403c <xQueueGenericReset+0xd0>)
  46878. 8014008: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  46879. 801400c: 601a str r2, [r3, #0]
  46880. 801400e: f3bf 8f4f dsb sy
  46881. 8014012: f3bf 8f6f isb sy
  46882. 8014016: e009 b.n 801402c <xQueueGenericReset+0xc0>
  46883. }
  46884. }
  46885. else
  46886. {
  46887. /* Ensure the event queues start in the correct state. */
  46888. vListInitialise( &( pxQueue->xTasksWaitingToSend ) );
  46889. 8014018: 68fb ldr r3, [r7, #12]
  46890. 801401a: 3310 adds r3, #16
  46891. 801401c: 4618 mov r0, r3
  46892. 801401e: f7ff fef1 bl 8013e04 <vListInitialise>
  46893. vListInitialise( &( pxQueue->xTasksWaitingToReceive ) );
  46894. 8014022: 68fb ldr r3, [r7, #12]
  46895. 8014024: 3324 adds r3, #36 @ 0x24
  46896. 8014026: 4618 mov r0, r3
  46897. 8014028: f7ff feec bl 8013e04 <vListInitialise>
  46898. }
  46899. }
  46900. taskEXIT_CRITICAL();
  46901. 801402c: f003 f946 bl 80172bc <vPortExitCritical>
  46902. /* A value is returned for calling semantic consistency with previous
  46903. versions. */
  46904. return pdPASS;
  46905. 8014030: 2301 movs r3, #1
  46906. }
  46907. 8014032: 4618 mov r0, r3
  46908. 8014034: 3710 adds r7, #16
  46909. 8014036: 46bd mov sp, r7
  46910. 8014038: bd80 pop {r7, pc}
  46911. 801403a: bf00 nop
  46912. 801403c: e000ed04 .word 0xe000ed04
  46913. 08014040 <xQueueGenericCreateStatic>:
  46914. /*-----------------------------------------------------------*/
  46915. #if( configSUPPORT_STATIC_ALLOCATION == 1 )
  46916. QueueHandle_t xQueueGenericCreateStatic( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, uint8_t *pucQueueStorage, StaticQueue_t *pxStaticQueue, const uint8_t ucQueueType )
  46917. {
  46918. 8014040: b580 push {r7, lr}
  46919. 8014042: b08e sub sp, #56 @ 0x38
  46920. 8014044: af02 add r7, sp, #8
  46921. 8014046: 60f8 str r0, [r7, #12]
  46922. 8014048: 60b9 str r1, [r7, #8]
  46923. 801404a: 607a str r2, [r7, #4]
  46924. 801404c: 603b str r3, [r7, #0]
  46925. Queue_t *pxNewQueue;
  46926. configASSERT( uxQueueLength > ( UBaseType_t ) 0 );
  46927. 801404e: 68fb ldr r3, [r7, #12]
  46928. 8014050: 2b00 cmp r3, #0
  46929. 8014052: d10b bne.n 801406c <xQueueGenericCreateStatic+0x2c>
  46930. __asm volatile
  46931. 8014054: f04f 0350 mov.w r3, #80 @ 0x50
  46932. 8014058: f383 8811 msr BASEPRI, r3
  46933. 801405c: f3bf 8f6f isb sy
  46934. 8014060: f3bf 8f4f dsb sy
  46935. 8014064: 62bb str r3, [r7, #40] @ 0x28
  46936. }
  46937. 8014066: bf00 nop
  46938. 8014068: bf00 nop
  46939. 801406a: e7fd b.n 8014068 <xQueueGenericCreateStatic+0x28>
  46940. /* The StaticQueue_t structure and the queue storage area must be
  46941. supplied. */
  46942. configASSERT( pxStaticQueue != NULL );
  46943. 801406c: 683b ldr r3, [r7, #0]
  46944. 801406e: 2b00 cmp r3, #0
  46945. 8014070: d10b bne.n 801408a <xQueueGenericCreateStatic+0x4a>
  46946. __asm volatile
  46947. 8014072: f04f 0350 mov.w r3, #80 @ 0x50
  46948. 8014076: f383 8811 msr BASEPRI, r3
  46949. 801407a: f3bf 8f6f isb sy
  46950. 801407e: f3bf 8f4f dsb sy
  46951. 8014082: 627b str r3, [r7, #36] @ 0x24
  46952. }
  46953. 8014084: bf00 nop
  46954. 8014086: bf00 nop
  46955. 8014088: e7fd b.n 8014086 <xQueueGenericCreateStatic+0x46>
  46956. /* A queue storage area should be provided if the item size is not 0, and
  46957. should not be provided if the item size is 0. */
  46958. configASSERT( !( ( pucQueueStorage != NULL ) && ( uxItemSize == 0 ) ) );
  46959. 801408a: 687b ldr r3, [r7, #4]
  46960. 801408c: 2b00 cmp r3, #0
  46961. 801408e: d002 beq.n 8014096 <xQueueGenericCreateStatic+0x56>
  46962. 8014090: 68bb ldr r3, [r7, #8]
  46963. 8014092: 2b00 cmp r3, #0
  46964. 8014094: d001 beq.n 801409a <xQueueGenericCreateStatic+0x5a>
  46965. 8014096: 2301 movs r3, #1
  46966. 8014098: e000 b.n 801409c <xQueueGenericCreateStatic+0x5c>
  46967. 801409a: 2300 movs r3, #0
  46968. 801409c: 2b00 cmp r3, #0
  46969. 801409e: d10b bne.n 80140b8 <xQueueGenericCreateStatic+0x78>
  46970. __asm volatile
  46971. 80140a0: f04f 0350 mov.w r3, #80 @ 0x50
  46972. 80140a4: f383 8811 msr BASEPRI, r3
  46973. 80140a8: f3bf 8f6f isb sy
  46974. 80140ac: f3bf 8f4f dsb sy
  46975. 80140b0: 623b str r3, [r7, #32]
  46976. }
  46977. 80140b2: bf00 nop
  46978. 80140b4: bf00 nop
  46979. 80140b6: e7fd b.n 80140b4 <xQueueGenericCreateStatic+0x74>
  46980. configASSERT( !( ( pucQueueStorage == NULL ) && ( uxItemSize != 0 ) ) );
  46981. 80140b8: 687b ldr r3, [r7, #4]
  46982. 80140ba: 2b00 cmp r3, #0
  46983. 80140bc: d102 bne.n 80140c4 <xQueueGenericCreateStatic+0x84>
  46984. 80140be: 68bb ldr r3, [r7, #8]
  46985. 80140c0: 2b00 cmp r3, #0
  46986. 80140c2: d101 bne.n 80140c8 <xQueueGenericCreateStatic+0x88>
  46987. 80140c4: 2301 movs r3, #1
  46988. 80140c6: e000 b.n 80140ca <xQueueGenericCreateStatic+0x8a>
  46989. 80140c8: 2300 movs r3, #0
  46990. 80140ca: 2b00 cmp r3, #0
  46991. 80140cc: d10b bne.n 80140e6 <xQueueGenericCreateStatic+0xa6>
  46992. __asm volatile
  46993. 80140ce: f04f 0350 mov.w r3, #80 @ 0x50
  46994. 80140d2: f383 8811 msr BASEPRI, r3
  46995. 80140d6: f3bf 8f6f isb sy
  46996. 80140da: f3bf 8f4f dsb sy
  46997. 80140de: 61fb str r3, [r7, #28]
  46998. }
  46999. 80140e0: bf00 nop
  47000. 80140e2: bf00 nop
  47001. 80140e4: e7fd b.n 80140e2 <xQueueGenericCreateStatic+0xa2>
  47002. #if( configASSERT_DEFINED == 1 )
  47003. {
  47004. /* Sanity check that the size of the structure used to declare a
  47005. variable of type StaticQueue_t or StaticSemaphore_t equals the size of
  47006. the real queue and semaphore structures. */
  47007. volatile size_t xSize = sizeof( StaticQueue_t );
  47008. 80140e6: 2350 movs r3, #80 @ 0x50
  47009. 80140e8: 617b str r3, [r7, #20]
  47010. configASSERT( xSize == sizeof( Queue_t ) );
  47011. 80140ea: 697b ldr r3, [r7, #20]
  47012. 80140ec: 2b50 cmp r3, #80 @ 0x50
  47013. 80140ee: d00b beq.n 8014108 <xQueueGenericCreateStatic+0xc8>
  47014. __asm volatile
  47015. 80140f0: f04f 0350 mov.w r3, #80 @ 0x50
  47016. 80140f4: f383 8811 msr BASEPRI, r3
  47017. 80140f8: f3bf 8f6f isb sy
  47018. 80140fc: f3bf 8f4f dsb sy
  47019. 8014100: 61bb str r3, [r7, #24]
  47020. }
  47021. 8014102: bf00 nop
  47022. 8014104: bf00 nop
  47023. 8014106: e7fd b.n 8014104 <xQueueGenericCreateStatic+0xc4>
  47024. ( void ) xSize; /* Keeps lint quiet when configASSERT() is not defined. */
  47025. 8014108: 697b ldr r3, [r7, #20]
  47026. #endif /* configASSERT_DEFINED */
  47027. /* The address of a statically allocated queue was passed in, use it.
  47028. The address of a statically allocated storage area was also passed in
  47029. but is already set. */
  47030. 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. */
  47031. 801410a: 683b ldr r3, [r7, #0]
  47032. 801410c: 62fb str r3, [r7, #44] @ 0x2c
  47033. if( pxNewQueue != NULL )
  47034. 801410e: 6afb ldr r3, [r7, #44] @ 0x2c
  47035. 8014110: 2b00 cmp r3, #0
  47036. 8014112: d00d beq.n 8014130 <xQueueGenericCreateStatic+0xf0>
  47037. #if( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
  47038. {
  47039. /* Queues can be allocated wither statically or dynamically, so
  47040. note this queue was allocated statically in case the queue is
  47041. later deleted. */
  47042. pxNewQueue->ucStaticallyAllocated = pdTRUE;
  47043. 8014114: 6afb ldr r3, [r7, #44] @ 0x2c
  47044. 8014116: 2201 movs r2, #1
  47045. 8014118: f883 2046 strb.w r2, [r3, #70] @ 0x46
  47046. }
  47047. #endif /* configSUPPORT_DYNAMIC_ALLOCATION */
  47048. prvInitialiseNewQueue( uxQueueLength, uxItemSize, pucQueueStorage, ucQueueType, pxNewQueue );
  47049. 801411c: f897 2038 ldrb.w r2, [r7, #56] @ 0x38
  47050. 8014120: 6afb ldr r3, [r7, #44] @ 0x2c
  47051. 8014122: 9300 str r3, [sp, #0]
  47052. 8014124: 4613 mov r3, r2
  47053. 8014126: 687a ldr r2, [r7, #4]
  47054. 8014128: 68b9 ldr r1, [r7, #8]
  47055. 801412a: 68f8 ldr r0, [r7, #12]
  47056. 801412c: f000 f840 bl 80141b0 <prvInitialiseNewQueue>
  47057. {
  47058. traceQUEUE_CREATE_FAILED( ucQueueType );
  47059. mtCOVERAGE_TEST_MARKER();
  47060. }
  47061. return pxNewQueue;
  47062. 8014130: 6afb ldr r3, [r7, #44] @ 0x2c
  47063. }
  47064. 8014132: 4618 mov r0, r3
  47065. 8014134: 3730 adds r7, #48 @ 0x30
  47066. 8014136: 46bd mov sp, r7
  47067. 8014138: bd80 pop {r7, pc}
  47068. 0801413a <xQueueGenericCreate>:
  47069. /*-----------------------------------------------------------*/
  47070. #if( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
  47071. QueueHandle_t xQueueGenericCreate( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, const uint8_t ucQueueType )
  47072. {
  47073. 801413a: b580 push {r7, lr}
  47074. 801413c: b08a sub sp, #40 @ 0x28
  47075. 801413e: af02 add r7, sp, #8
  47076. 8014140: 60f8 str r0, [r7, #12]
  47077. 8014142: 60b9 str r1, [r7, #8]
  47078. 8014144: 4613 mov r3, r2
  47079. 8014146: 71fb strb r3, [r7, #7]
  47080. Queue_t *pxNewQueue;
  47081. size_t xQueueSizeInBytes;
  47082. uint8_t *pucQueueStorage;
  47083. configASSERT( uxQueueLength > ( UBaseType_t ) 0 );
  47084. 8014148: 68fb ldr r3, [r7, #12]
  47085. 801414a: 2b00 cmp r3, #0
  47086. 801414c: d10b bne.n 8014166 <xQueueGenericCreate+0x2c>
  47087. __asm volatile
  47088. 801414e: f04f 0350 mov.w r3, #80 @ 0x50
  47089. 8014152: f383 8811 msr BASEPRI, r3
  47090. 8014156: f3bf 8f6f isb sy
  47091. 801415a: f3bf 8f4f dsb sy
  47092. 801415e: 613b str r3, [r7, #16]
  47093. }
  47094. 8014160: bf00 nop
  47095. 8014162: bf00 nop
  47096. 8014164: e7fd b.n 8014162 <xQueueGenericCreate+0x28>
  47097. /* Allocate enough space to hold the maximum number of items that
  47098. can be in the queue at any time. It is valid for uxItemSize to be
  47099. zero in the case the queue is used as a semaphore. */
  47100. xQueueSizeInBytes = ( size_t ) ( uxQueueLength * uxItemSize ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */
  47101. 8014166: 68fb ldr r3, [r7, #12]
  47102. 8014168: 68ba ldr r2, [r7, #8]
  47103. 801416a: fb02 f303 mul.w r3, r2, r3
  47104. 801416e: 61fb str r3, [r7, #28]
  47105. alignment requirements of the Queue_t structure - which in this case
  47106. is an int8_t *. Therefore, whenever the stack alignment requirements
  47107. are greater than or equal to the pointer to char requirements the cast
  47108. is safe. In other cases alignment requirements are not strict (one or
  47109. two bytes). */
  47110. pxNewQueue = ( Queue_t * ) pvPortMalloc( sizeof( Queue_t ) + xQueueSizeInBytes ); /*lint !e9087 !e9079 see comment above. */
  47111. 8014170: 69fb ldr r3, [r7, #28]
  47112. 8014172: 3350 adds r3, #80 @ 0x50
  47113. 8014174: 4618 mov r0, r3
  47114. 8014176: f003 f991 bl 801749c <pvPortMalloc>
  47115. 801417a: 61b8 str r0, [r7, #24]
  47116. if( pxNewQueue != NULL )
  47117. 801417c: 69bb ldr r3, [r7, #24]
  47118. 801417e: 2b00 cmp r3, #0
  47119. 8014180: d011 beq.n 80141a6 <xQueueGenericCreate+0x6c>
  47120. {
  47121. /* Jump past the queue structure to find the location of the queue
  47122. storage area. */
  47123. pucQueueStorage = ( uint8_t * ) pxNewQueue;
  47124. 8014182: 69bb ldr r3, [r7, #24]
  47125. 8014184: 617b str r3, [r7, #20]
  47126. pucQueueStorage += sizeof( Queue_t ); /*lint !e9016 Pointer arithmetic allowed on char types, especially when it assists conveying intent. */
  47127. 8014186: 697b ldr r3, [r7, #20]
  47128. 8014188: 3350 adds r3, #80 @ 0x50
  47129. 801418a: 617b str r3, [r7, #20]
  47130. #if( configSUPPORT_STATIC_ALLOCATION == 1 )
  47131. {
  47132. /* Queues can be created either statically or dynamically, so
  47133. note this task was created dynamically in case it is later
  47134. deleted. */
  47135. pxNewQueue->ucStaticallyAllocated = pdFALSE;
  47136. 801418c: 69bb ldr r3, [r7, #24]
  47137. 801418e: 2200 movs r2, #0
  47138. 8014190: f883 2046 strb.w r2, [r3, #70] @ 0x46
  47139. }
  47140. #endif /* configSUPPORT_STATIC_ALLOCATION */
  47141. prvInitialiseNewQueue( uxQueueLength, uxItemSize, pucQueueStorage, ucQueueType, pxNewQueue );
  47142. 8014194: 79fa ldrb r2, [r7, #7]
  47143. 8014196: 69bb ldr r3, [r7, #24]
  47144. 8014198: 9300 str r3, [sp, #0]
  47145. 801419a: 4613 mov r3, r2
  47146. 801419c: 697a ldr r2, [r7, #20]
  47147. 801419e: 68b9 ldr r1, [r7, #8]
  47148. 80141a0: 68f8 ldr r0, [r7, #12]
  47149. 80141a2: f000 f805 bl 80141b0 <prvInitialiseNewQueue>
  47150. {
  47151. traceQUEUE_CREATE_FAILED( ucQueueType );
  47152. mtCOVERAGE_TEST_MARKER();
  47153. }
  47154. return pxNewQueue;
  47155. 80141a6: 69bb ldr r3, [r7, #24]
  47156. }
  47157. 80141a8: 4618 mov r0, r3
  47158. 80141aa: 3720 adds r7, #32
  47159. 80141ac: 46bd mov sp, r7
  47160. 80141ae: bd80 pop {r7, pc}
  47161. 080141b0 <prvInitialiseNewQueue>:
  47162. #endif /* configSUPPORT_STATIC_ALLOCATION */
  47163. /*-----------------------------------------------------------*/
  47164. static void prvInitialiseNewQueue( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, uint8_t *pucQueueStorage, const uint8_t ucQueueType, Queue_t *pxNewQueue )
  47165. {
  47166. 80141b0: b580 push {r7, lr}
  47167. 80141b2: b084 sub sp, #16
  47168. 80141b4: af00 add r7, sp, #0
  47169. 80141b6: 60f8 str r0, [r7, #12]
  47170. 80141b8: 60b9 str r1, [r7, #8]
  47171. 80141ba: 607a str r2, [r7, #4]
  47172. 80141bc: 70fb strb r3, [r7, #3]
  47173. /* Remove compiler warnings about unused parameters should
  47174. configUSE_TRACE_FACILITY not be set to 1. */
  47175. ( void ) ucQueueType;
  47176. if( uxItemSize == ( UBaseType_t ) 0 )
  47177. 80141be: 68bb ldr r3, [r7, #8]
  47178. 80141c0: 2b00 cmp r3, #0
  47179. 80141c2: d103 bne.n 80141cc <prvInitialiseNewQueue+0x1c>
  47180. {
  47181. /* No RAM was allocated for the queue storage area, but PC head cannot
  47182. be set to NULL because NULL is used as a key to say the queue is used as
  47183. a mutex. Therefore just set pcHead to point to the queue as a benign
  47184. value that is known to be within the memory map. */
  47185. pxNewQueue->pcHead = ( int8_t * ) pxNewQueue;
  47186. 80141c4: 69bb ldr r3, [r7, #24]
  47187. 80141c6: 69ba ldr r2, [r7, #24]
  47188. 80141c8: 601a str r2, [r3, #0]
  47189. 80141ca: e002 b.n 80141d2 <prvInitialiseNewQueue+0x22>
  47190. }
  47191. else
  47192. {
  47193. /* Set the head to the start of the queue storage area. */
  47194. pxNewQueue->pcHead = ( int8_t * ) pucQueueStorage;
  47195. 80141cc: 69bb ldr r3, [r7, #24]
  47196. 80141ce: 687a ldr r2, [r7, #4]
  47197. 80141d0: 601a str r2, [r3, #0]
  47198. }
  47199. /* Initialise the queue members as described where the queue type is
  47200. defined. */
  47201. pxNewQueue->uxLength = uxQueueLength;
  47202. 80141d2: 69bb ldr r3, [r7, #24]
  47203. 80141d4: 68fa ldr r2, [r7, #12]
  47204. 80141d6: 63da str r2, [r3, #60] @ 0x3c
  47205. pxNewQueue->uxItemSize = uxItemSize;
  47206. 80141d8: 69bb ldr r3, [r7, #24]
  47207. 80141da: 68ba ldr r2, [r7, #8]
  47208. 80141dc: 641a str r2, [r3, #64] @ 0x40
  47209. ( void ) xQueueGenericReset( pxNewQueue, pdTRUE );
  47210. 80141de: 2101 movs r1, #1
  47211. 80141e0: 69b8 ldr r0, [r7, #24]
  47212. 80141e2: f7ff fec3 bl 8013f6c <xQueueGenericReset>
  47213. #if ( configUSE_TRACE_FACILITY == 1 )
  47214. {
  47215. pxNewQueue->ucQueueType = ucQueueType;
  47216. 80141e6: 69bb ldr r3, [r7, #24]
  47217. 80141e8: 78fa ldrb r2, [r7, #3]
  47218. 80141ea: f883 204c strb.w r2, [r3, #76] @ 0x4c
  47219. pxNewQueue->pxQueueSetContainer = NULL;
  47220. }
  47221. #endif /* configUSE_QUEUE_SETS */
  47222. traceQUEUE_CREATE( pxNewQueue );
  47223. }
  47224. 80141ee: bf00 nop
  47225. 80141f0: 3710 adds r7, #16
  47226. 80141f2: 46bd mov sp, r7
  47227. 80141f4: bd80 pop {r7, pc}
  47228. 080141f6 <prvInitialiseMutex>:
  47229. /*-----------------------------------------------------------*/
  47230. #if( configUSE_MUTEXES == 1 )
  47231. static void prvInitialiseMutex( Queue_t *pxNewQueue )
  47232. {
  47233. 80141f6: b580 push {r7, lr}
  47234. 80141f8: b082 sub sp, #8
  47235. 80141fa: af00 add r7, sp, #0
  47236. 80141fc: 6078 str r0, [r7, #4]
  47237. if( pxNewQueue != NULL )
  47238. 80141fe: 687b ldr r3, [r7, #4]
  47239. 8014200: 2b00 cmp r3, #0
  47240. 8014202: d00e beq.n 8014222 <prvInitialiseMutex+0x2c>
  47241. {
  47242. /* The queue create function will set all the queue structure members
  47243. correctly for a generic queue, but this function is creating a
  47244. mutex. Overwrite those members that need to be set differently -
  47245. in particular the information required for priority inheritance. */
  47246. pxNewQueue->u.xSemaphore.xMutexHolder = NULL;
  47247. 8014204: 687b ldr r3, [r7, #4]
  47248. 8014206: 2200 movs r2, #0
  47249. 8014208: 609a str r2, [r3, #8]
  47250. pxNewQueue->uxQueueType = queueQUEUE_IS_MUTEX;
  47251. 801420a: 687b ldr r3, [r7, #4]
  47252. 801420c: 2200 movs r2, #0
  47253. 801420e: 601a str r2, [r3, #0]
  47254. /* In case this is a recursive mutex. */
  47255. pxNewQueue->u.xSemaphore.uxRecursiveCallCount = 0;
  47256. 8014210: 687b ldr r3, [r7, #4]
  47257. 8014212: 2200 movs r2, #0
  47258. 8014214: 60da str r2, [r3, #12]
  47259. traceCREATE_MUTEX( pxNewQueue );
  47260. /* Start with the semaphore in the expected state. */
  47261. ( void ) xQueueGenericSend( pxNewQueue, NULL, ( TickType_t ) 0U, queueSEND_TO_BACK );
  47262. 8014216: 2300 movs r3, #0
  47263. 8014218: 2200 movs r2, #0
  47264. 801421a: 2100 movs r1, #0
  47265. 801421c: 6878 ldr r0, [r7, #4]
  47266. 801421e: f000 f8a3 bl 8014368 <xQueueGenericSend>
  47267. }
  47268. else
  47269. {
  47270. traceCREATE_MUTEX_FAILED();
  47271. }
  47272. }
  47273. 8014222: bf00 nop
  47274. 8014224: 3708 adds r7, #8
  47275. 8014226: 46bd mov sp, r7
  47276. 8014228: bd80 pop {r7, pc}
  47277. 0801422a <xQueueCreateMutex>:
  47278. /*-----------------------------------------------------------*/
  47279. #if( ( configUSE_MUTEXES == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) )
  47280. QueueHandle_t xQueueCreateMutex( const uint8_t ucQueueType )
  47281. {
  47282. 801422a: b580 push {r7, lr}
  47283. 801422c: b086 sub sp, #24
  47284. 801422e: af00 add r7, sp, #0
  47285. 8014230: 4603 mov r3, r0
  47286. 8014232: 71fb strb r3, [r7, #7]
  47287. QueueHandle_t xNewQueue;
  47288. const UBaseType_t uxMutexLength = ( UBaseType_t ) 1, uxMutexSize = ( UBaseType_t ) 0;
  47289. 8014234: 2301 movs r3, #1
  47290. 8014236: 617b str r3, [r7, #20]
  47291. 8014238: 2300 movs r3, #0
  47292. 801423a: 613b str r3, [r7, #16]
  47293. xNewQueue = xQueueGenericCreate( uxMutexLength, uxMutexSize, ucQueueType );
  47294. 801423c: 79fb ldrb r3, [r7, #7]
  47295. 801423e: 461a mov r2, r3
  47296. 8014240: 6939 ldr r1, [r7, #16]
  47297. 8014242: 6978 ldr r0, [r7, #20]
  47298. 8014244: f7ff ff79 bl 801413a <xQueueGenericCreate>
  47299. 8014248: 60f8 str r0, [r7, #12]
  47300. prvInitialiseMutex( ( Queue_t * ) xNewQueue );
  47301. 801424a: 68f8 ldr r0, [r7, #12]
  47302. 801424c: f7ff ffd3 bl 80141f6 <prvInitialiseMutex>
  47303. return xNewQueue;
  47304. 8014250: 68fb ldr r3, [r7, #12]
  47305. }
  47306. 8014252: 4618 mov r0, r3
  47307. 8014254: 3718 adds r7, #24
  47308. 8014256: 46bd mov sp, r7
  47309. 8014258: bd80 pop {r7, pc}
  47310. 0801425a <xQueueCreateMutexStatic>:
  47311. /*-----------------------------------------------------------*/
  47312. #if( ( configUSE_MUTEXES == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) )
  47313. QueueHandle_t xQueueCreateMutexStatic( const uint8_t ucQueueType, StaticQueue_t *pxStaticQueue )
  47314. {
  47315. 801425a: b580 push {r7, lr}
  47316. 801425c: b088 sub sp, #32
  47317. 801425e: af02 add r7, sp, #8
  47318. 8014260: 4603 mov r3, r0
  47319. 8014262: 6039 str r1, [r7, #0]
  47320. 8014264: 71fb strb r3, [r7, #7]
  47321. QueueHandle_t xNewQueue;
  47322. const UBaseType_t uxMutexLength = ( UBaseType_t ) 1, uxMutexSize = ( UBaseType_t ) 0;
  47323. 8014266: 2301 movs r3, #1
  47324. 8014268: 617b str r3, [r7, #20]
  47325. 801426a: 2300 movs r3, #0
  47326. 801426c: 613b str r3, [r7, #16]
  47327. /* Prevent compiler warnings about unused parameters if
  47328. configUSE_TRACE_FACILITY does not equal 1. */
  47329. ( void ) ucQueueType;
  47330. xNewQueue = xQueueGenericCreateStatic( uxMutexLength, uxMutexSize, NULL, pxStaticQueue, ucQueueType );
  47331. 801426e: 79fb ldrb r3, [r7, #7]
  47332. 8014270: 9300 str r3, [sp, #0]
  47333. 8014272: 683b ldr r3, [r7, #0]
  47334. 8014274: 2200 movs r2, #0
  47335. 8014276: 6939 ldr r1, [r7, #16]
  47336. 8014278: 6978 ldr r0, [r7, #20]
  47337. 801427a: f7ff fee1 bl 8014040 <xQueueGenericCreateStatic>
  47338. 801427e: 60f8 str r0, [r7, #12]
  47339. prvInitialiseMutex( ( Queue_t * ) xNewQueue );
  47340. 8014280: 68f8 ldr r0, [r7, #12]
  47341. 8014282: f7ff ffb8 bl 80141f6 <prvInitialiseMutex>
  47342. return xNewQueue;
  47343. 8014286: 68fb ldr r3, [r7, #12]
  47344. }
  47345. 8014288: 4618 mov r0, r3
  47346. 801428a: 3718 adds r7, #24
  47347. 801428c: 46bd mov sp, r7
  47348. 801428e: bd80 pop {r7, pc}
  47349. 08014290 <xQueueGiveMutexRecursive>:
  47350. /*-----------------------------------------------------------*/
  47351. #if ( configUSE_RECURSIVE_MUTEXES == 1 )
  47352. BaseType_t xQueueGiveMutexRecursive( QueueHandle_t xMutex )
  47353. {
  47354. 8014290: b590 push {r4, r7, lr}
  47355. 8014292: b087 sub sp, #28
  47356. 8014294: af00 add r7, sp, #0
  47357. 8014296: 6078 str r0, [r7, #4]
  47358. BaseType_t xReturn;
  47359. Queue_t * const pxMutex = ( Queue_t * ) xMutex;
  47360. 8014298: 687b ldr r3, [r7, #4]
  47361. 801429a: 613b str r3, [r7, #16]
  47362. configASSERT( pxMutex );
  47363. 801429c: 693b ldr r3, [r7, #16]
  47364. 801429e: 2b00 cmp r3, #0
  47365. 80142a0: d10b bne.n 80142ba <xQueueGiveMutexRecursive+0x2a>
  47366. __asm volatile
  47367. 80142a2: f04f 0350 mov.w r3, #80 @ 0x50
  47368. 80142a6: f383 8811 msr BASEPRI, r3
  47369. 80142aa: f3bf 8f6f isb sy
  47370. 80142ae: f3bf 8f4f dsb sy
  47371. 80142b2: 60fb str r3, [r7, #12]
  47372. }
  47373. 80142b4: bf00 nop
  47374. 80142b6: bf00 nop
  47375. 80142b8: e7fd b.n 80142b6 <xQueueGiveMutexRecursive+0x26>
  47376. change outside of this task. If this task does not hold the mutex then
  47377. pxMutexHolder can never coincidentally equal the tasks handle, and as
  47378. this is the only condition we are interested in it does not matter if
  47379. pxMutexHolder is accessed simultaneously by another task. Therefore no
  47380. mutual exclusion is required to test the pxMutexHolder variable. */
  47381. if( pxMutex->u.xSemaphore.xMutexHolder == xTaskGetCurrentTaskHandle() )
  47382. 80142ba: 693b ldr r3, [r7, #16]
  47383. 80142bc: 689c ldr r4, [r3, #8]
  47384. 80142be: f001 fe39 bl 8015f34 <xTaskGetCurrentTaskHandle>
  47385. 80142c2: 4603 mov r3, r0
  47386. 80142c4: 429c cmp r4, r3
  47387. 80142c6: d111 bne.n 80142ec <xQueueGiveMutexRecursive+0x5c>
  47388. /* uxRecursiveCallCount cannot be zero if xMutexHolder is equal to
  47389. the task handle, therefore no underflow check is required. Also,
  47390. uxRecursiveCallCount is only modified by the mutex holder, and as
  47391. there can only be one, no mutual exclusion is required to modify the
  47392. uxRecursiveCallCount member. */
  47393. ( pxMutex->u.xSemaphore.uxRecursiveCallCount )--;
  47394. 80142c8: 693b ldr r3, [r7, #16]
  47395. 80142ca: 68db ldr r3, [r3, #12]
  47396. 80142cc: 1e5a subs r2, r3, #1
  47397. 80142ce: 693b ldr r3, [r7, #16]
  47398. 80142d0: 60da str r2, [r3, #12]
  47399. /* Has the recursive call count unwound to 0? */
  47400. if( pxMutex->u.xSemaphore.uxRecursiveCallCount == ( UBaseType_t ) 0 )
  47401. 80142d2: 693b ldr r3, [r7, #16]
  47402. 80142d4: 68db ldr r3, [r3, #12]
  47403. 80142d6: 2b00 cmp r3, #0
  47404. 80142d8: d105 bne.n 80142e6 <xQueueGiveMutexRecursive+0x56>
  47405. {
  47406. /* Return the mutex. This will automatically unblock any other
  47407. task that might be waiting to access the mutex. */
  47408. ( void ) xQueueGenericSend( pxMutex, NULL, queueMUTEX_GIVE_BLOCK_TIME, queueSEND_TO_BACK );
  47409. 80142da: 2300 movs r3, #0
  47410. 80142dc: 2200 movs r2, #0
  47411. 80142de: 2100 movs r1, #0
  47412. 80142e0: 6938 ldr r0, [r7, #16]
  47413. 80142e2: f000 f841 bl 8014368 <xQueueGenericSend>
  47414. else
  47415. {
  47416. mtCOVERAGE_TEST_MARKER();
  47417. }
  47418. xReturn = pdPASS;
  47419. 80142e6: 2301 movs r3, #1
  47420. 80142e8: 617b str r3, [r7, #20]
  47421. 80142ea: e001 b.n 80142f0 <xQueueGiveMutexRecursive+0x60>
  47422. }
  47423. else
  47424. {
  47425. /* The mutex cannot be given because the calling task is not the
  47426. holder. */
  47427. xReturn = pdFAIL;
  47428. 80142ec: 2300 movs r3, #0
  47429. 80142ee: 617b str r3, [r7, #20]
  47430. traceGIVE_MUTEX_RECURSIVE_FAILED( pxMutex );
  47431. }
  47432. return xReturn;
  47433. 80142f0: 697b ldr r3, [r7, #20]
  47434. }
  47435. 80142f2: 4618 mov r0, r3
  47436. 80142f4: 371c adds r7, #28
  47437. 80142f6: 46bd mov sp, r7
  47438. 80142f8: bd90 pop {r4, r7, pc}
  47439. 080142fa <xQueueTakeMutexRecursive>:
  47440. /*-----------------------------------------------------------*/
  47441. #if ( configUSE_RECURSIVE_MUTEXES == 1 )
  47442. BaseType_t xQueueTakeMutexRecursive( QueueHandle_t xMutex, TickType_t xTicksToWait )
  47443. {
  47444. 80142fa: b590 push {r4, r7, lr}
  47445. 80142fc: b087 sub sp, #28
  47446. 80142fe: af00 add r7, sp, #0
  47447. 8014300: 6078 str r0, [r7, #4]
  47448. 8014302: 6039 str r1, [r7, #0]
  47449. BaseType_t xReturn;
  47450. Queue_t * const pxMutex = ( Queue_t * ) xMutex;
  47451. 8014304: 687b ldr r3, [r7, #4]
  47452. 8014306: 613b str r3, [r7, #16]
  47453. configASSERT( pxMutex );
  47454. 8014308: 693b ldr r3, [r7, #16]
  47455. 801430a: 2b00 cmp r3, #0
  47456. 801430c: d10b bne.n 8014326 <xQueueTakeMutexRecursive+0x2c>
  47457. __asm volatile
  47458. 801430e: f04f 0350 mov.w r3, #80 @ 0x50
  47459. 8014312: f383 8811 msr BASEPRI, r3
  47460. 8014316: f3bf 8f6f isb sy
  47461. 801431a: f3bf 8f4f dsb sy
  47462. 801431e: 60fb str r3, [r7, #12]
  47463. }
  47464. 8014320: bf00 nop
  47465. 8014322: bf00 nop
  47466. 8014324: e7fd b.n 8014322 <xQueueTakeMutexRecursive+0x28>
  47467. /* Comments regarding mutual exclusion as per those within
  47468. xQueueGiveMutexRecursive(). */
  47469. traceTAKE_MUTEX_RECURSIVE( pxMutex );
  47470. if( pxMutex->u.xSemaphore.xMutexHolder == xTaskGetCurrentTaskHandle() )
  47471. 8014326: 693b ldr r3, [r7, #16]
  47472. 8014328: 689c ldr r4, [r3, #8]
  47473. 801432a: f001 fe03 bl 8015f34 <xTaskGetCurrentTaskHandle>
  47474. 801432e: 4603 mov r3, r0
  47475. 8014330: 429c cmp r4, r3
  47476. 8014332: d107 bne.n 8014344 <xQueueTakeMutexRecursive+0x4a>
  47477. {
  47478. ( pxMutex->u.xSemaphore.uxRecursiveCallCount )++;
  47479. 8014334: 693b ldr r3, [r7, #16]
  47480. 8014336: 68db ldr r3, [r3, #12]
  47481. 8014338: 1c5a adds r2, r3, #1
  47482. 801433a: 693b ldr r3, [r7, #16]
  47483. 801433c: 60da str r2, [r3, #12]
  47484. xReturn = pdPASS;
  47485. 801433e: 2301 movs r3, #1
  47486. 8014340: 617b str r3, [r7, #20]
  47487. 8014342: e00c b.n 801435e <xQueueTakeMutexRecursive+0x64>
  47488. }
  47489. else
  47490. {
  47491. xReturn = xQueueSemaphoreTake( pxMutex, xTicksToWait );
  47492. 8014344: 6839 ldr r1, [r7, #0]
  47493. 8014346: 6938 ldr r0, [r7, #16]
  47494. 8014348: f000 fa90 bl 801486c <xQueueSemaphoreTake>
  47495. 801434c: 6178 str r0, [r7, #20]
  47496. /* pdPASS will only be returned if the mutex was successfully
  47497. obtained. The calling task may have entered the Blocked state
  47498. before reaching here. */
  47499. if( xReturn != pdFAIL )
  47500. 801434e: 697b ldr r3, [r7, #20]
  47501. 8014350: 2b00 cmp r3, #0
  47502. 8014352: d004 beq.n 801435e <xQueueTakeMutexRecursive+0x64>
  47503. {
  47504. ( pxMutex->u.xSemaphore.uxRecursiveCallCount )++;
  47505. 8014354: 693b ldr r3, [r7, #16]
  47506. 8014356: 68db ldr r3, [r3, #12]
  47507. 8014358: 1c5a adds r2, r3, #1
  47508. 801435a: 693b ldr r3, [r7, #16]
  47509. 801435c: 60da str r2, [r3, #12]
  47510. {
  47511. traceTAKE_MUTEX_RECURSIVE_FAILED( pxMutex );
  47512. }
  47513. }
  47514. return xReturn;
  47515. 801435e: 697b ldr r3, [r7, #20]
  47516. }
  47517. 8014360: 4618 mov r0, r3
  47518. 8014362: 371c adds r7, #28
  47519. 8014364: 46bd mov sp, r7
  47520. 8014366: bd90 pop {r4, r7, pc}
  47521. 08014368 <xQueueGenericSend>:
  47522. #endif /* ( ( configUSE_COUNTING_SEMAPHORES == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) */
  47523. /*-----------------------------------------------------------*/
  47524. BaseType_t xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemToQueue, TickType_t xTicksToWait, const BaseType_t xCopyPosition )
  47525. {
  47526. 8014368: b580 push {r7, lr}
  47527. 801436a: b08e sub sp, #56 @ 0x38
  47528. 801436c: af00 add r7, sp, #0
  47529. 801436e: 60f8 str r0, [r7, #12]
  47530. 8014370: 60b9 str r1, [r7, #8]
  47531. 8014372: 607a str r2, [r7, #4]
  47532. 8014374: 603b str r3, [r7, #0]
  47533. BaseType_t xEntryTimeSet = pdFALSE, xYieldRequired;
  47534. 8014376: 2300 movs r3, #0
  47535. 8014378: 637b str r3, [r7, #52] @ 0x34
  47536. TimeOut_t xTimeOut;
  47537. Queue_t * const pxQueue = xQueue;
  47538. 801437a: 68fb ldr r3, [r7, #12]
  47539. 801437c: 633b str r3, [r7, #48] @ 0x30
  47540. configASSERT( pxQueue );
  47541. 801437e: 6b3b ldr r3, [r7, #48] @ 0x30
  47542. 8014380: 2b00 cmp r3, #0
  47543. 8014382: d10b bne.n 801439c <xQueueGenericSend+0x34>
  47544. __asm volatile
  47545. 8014384: f04f 0350 mov.w r3, #80 @ 0x50
  47546. 8014388: f383 8811 msr BASEPRI, r3
  47547. 801438c: f3bf 8f6f isb sy
  47548. 8014390: f3bf 8f4f dsb sy
  47549. 8014394: 62bb str r3, [r7, #40] @ 0x28
  47550. }
  47551. 8014396: bf00 nop
  47552. 8014398: bf00 nop
  47553. 801439a: e7fd b.n 8014398 <xQueueGenericSend+0x30>
  47554. configASSERT( !( ( pvItemToQueue == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) );
  47555. 801439c: 68bb ldr r3, [r7, #8]
  47556. 801439e: 2b00 cmp r3, #0
  47557. 80143a0: d103 bne.n 80143aa <xQueueGenericSend+0x42>
  47558. 80143a2: 6b3b ldr r3, [r7, #48] @ 0x30
  47559. 80143a4: 6c1b ldr r3, [r3, #64] @ 0x40
  47560. 80143a6: 2b00 cmp r3, #0
  47561. 80143a8: d101 bne.n 80143ae <xQueueGenericSend+0x46>
  47562. 80143aa: 2301 movs r3, #1
  47563. 80143ac: e000 b.n 80143b0 <xQueueGenericSend+0x48>
  47564. 80143ae: 2300 movs r3, #0
  47565. 80143b0: 2b00 cmp r3, #0
  47566. 80143b2: d10b bne.n 80143cc <xQueueGenericSend+0x64>
  47567. __asm volatile
  47568. 80143b4: f04f 0350 mov.w r3, #80 @ 0x50
  47569. 80143b8: f383 8811 msr BASEPRI, r3
  47570. 80143bc: f3bf 8f6f isb sy
  47571. 80143c0: f3bf 8f4f dsb sy
  47572. 80143c4: 627b str r3, [r7, #36] @ 0x24
  47573. }
  47574. 80143c6: bf00 nop
  47575. 80143c8: bf00 nop
  47576. 80143ca: e7fd b.n 80143c8 <xQueueGenericSend+0x60>
  47577. configASSERT( !( ( xCopyPosition == queueOVERWRITE ) && ( pxQueue->uxLength != 1 ) ) );
  47578. 80143cc: 683b ldr r3, [r7, #0]
  47579. 80143ce: 2b02 cmp r3, #2
  47580. 80143d0: d103 bne.n 80143da <xQueueGenericSend+0x72>
  47581. 80143d2: 6b3b ldr r3, [r7, #48] @ 0x30
  47582. 80143d4: 6bdb ldr r3, [r3, #60] @ 0x3c
  47583. 80143d6: 2b01 cmp r3, #1
  47584. 80143d8: d101 bne.n 80143de <xQueueGenericSend+0x76>
  47585. 80143da: 2301 movs r3, #1
  47586. 80143dc: e000 b.n 80143e0 <xQueueGenericSend+0x78>
  47587. 80143de: 2300 movs r3, #0
  47588. 80143e0: 2b00 cmp r3, #0
  47589. 80143e2: d10b bne.n 80143fc <xQueueGenericSend+0x94>
  47590. __asm volatile
  47591. 80143e4: f04f 0350 mov.w r3, #80 @ 0x50
  47592. 80143e8: f383 8811 msr BASEPRI, r3
  47593. 80143ec: f3bf 8f6f isb sy
  47594. 80143f0: f3bf 8f4f dsb sy
  47595. 80143f4: 623b str r3, [r7, #32]
  47596. }
  47597. 80143f6: bf00 nop
  47598. 80143f8: bf00 nop
  47599. 80143fa: e7fd b.n 80143f8 <xQueueGenericSend+0x90>
  47600. #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
  47601. {
  47602. configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );
  47603. 80143fc: f001 fdaa bl 8015f54 <xTaskGetSchedulerState>
  47604. 8014400: 4603 mov r3, r0
  47605. 8014402: 2b00 cmp r3, #0
  47606. 8014404: d102 bne.n 801440c <xQueueGenericSend+0xa4>
  47607. 8014406: 687b ldr r3, [r7, #4]
  47608. 8014408: 2b00 cmp r3, #0
  47609. 801440a: d101 bne.n 8014410 <xQueueGenericSend+0xa8>
  47610. 801440c: 2301 movs r3, #1
  47611. 801440e: e000 b.n 8014412 <xQueueGenericSend+0xaa>
  47612. 8014410: 2300 movs r3, #0
  47613. 8014412: 2b00 cmp r3, #0
  47614. 8014414: d10b bne.n 801442e <xQueueGenericSend+0xc6>
  47615. __asm volatile
  47616. 8014416: f04f 0350 mov.w r3, #80 @ 0x50
  47617. 801441a: f383 8811 msr BASEPRI, r3
  47618. 801441e: f3bf 8f6f isb sy
  47619. 8014422: f3bf 8f4f dsb sy
  47620. 8014426: 61fb str r3, [r7, #28]
  47621. }
  47622. 8014428: bf00 nop
  47623. 801442a: bf00 nop
  47624. 801442c: e7fd b.n 801442a <xQueueGenericSend+0xc2>
  47625. /*lint -save -e904 This function relaxes the coding standard somewhat to
  47626. allow return statements within the function itself. This is done in the
  47627. interest of execution time efficiency. */
  47628. for( ;; )
  47629. {
  47630. taskENTER_CRITICAL();
  47631. 801442e: f002 ff13 bl 8017258 <vPortEnterCritical>
  47632. {
  47633. /* Is there room on the queue now? The running task must be the
  47634. highest priority task wanting to access the queue. If the head item
  47635. in the queue is to be overwritten then it does not matter if the
  47636. queue is full. */
  47637. if( ( pxQueue->uxMessagesWaiting < pxQueue->uxLength ) || ( xCopyPosition == queueOVERWRITE ) )
  47638. 8014432: 6b3b ldr r3, [r7, #48] @ 0x30
  47639. 8014434: 6b9a ldr r2, [r3, #56] @ 0x38
  47640. 8014436: 6b3b ldr r3, [r7, #48] @ 0x30
  47641. 8014438: 6bdb ldr r3, [r3, #60] @ 0x3c
  47642. 801443a: 429a cmp r2, r3
  47643. 801443c: d302 bcc.n 8014444 <xQueueGenericSend+0xdc>
  47644. 801443e: 683b ldr r3, [r7, #0]
  47645. 8014440: 2b02 cmp r3, #2
  47646. 8014442: d129 bne.n 8014498 <xQueueGenericSend+0x130>
  47647. }
  47648. }
  47649. }
  47650. #else /* configUSE_QUEUE_SETS */
  47651. {
  47652. xYieldRequired = prvCopyDataToQueue( pxQueue, pvItemToQueue, xCopyPosition );
  47653. 8014444: 683a ldr r2, [r7, #0]
  47654. 8014446: 68b9 ldr r1, [r7, #8]
  47655. 8014448: 6b38 ldr r0, [r7, #48] @ 0x30
  47656. 801444a: f000 fbb9 bl 8014bc0 <prvCopyDataToQueue>
  47657. 801444e: 62f8 str r0, [r7, #44] @ 0x2c
  47658. /* If there was a task waiting for data to arrive on the
  47659. queue then unblock it now. */
  47660. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )
  47661. 8014450: 6b3b ldr r3, [r7, #48] @ 0x30
  47662. 8014452: 6a5b ldr r3, [r3, #36] @ 0x24
  47663. 8014454: 2b00 cmp r3, #0
  47664. 8014456: d010 beq.n 801447a <xQueueGenericSend+0x112>
  47665. {
  47666. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )
  47667. 8014458: 6b3b ldr r3, [r7, #48] @ 0x30
  47668. 801445a: 3324 adds r3, #36 @ 0x24
  47669. 801445c: 4618 mov r0, r3
  47670. 801445e: f001 fb7b bl 8015b58 <xTaskRemoveFromEventList>
  47671. 8014462: 4603 mov r3, r0
  47672. 8014464: 2b00 cmp r3, #0
  47673. 8014466: d013 beq.n 8014490 <xQueueGenericSend+0x128>
  47674. {
  47675. /* The unblocked task has a priority higher than
  47676. our own so yield immediately. Yes it is ok to do
  47677. this from within the critical section - the kernel
  47678. takes care of that. */
  47679. queueYIELD_IF_USING_PREEMPTION();
  47680. 8014468: 4b3f ldr r3, [pc, #252] @ (8014568 <xQueueGenericSend+0x200>)
  47681. 801446a: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  47682. 801446e: 601a str r2, [r3, #0]
  47683. 8014470: f3bf 8f4f dsb sy
  47684. 8014474: f3bf 8f6f isb sy
  47685. 8014478: e00a b.n 8014490 <xQueueGenericSend+0x128>
  47686. else
  47687. {
  47688. mtCOVERAGE_TEST_MARKER();
  47689. }
  47690. }
  47691. else if( xYieldRequired != pdFALSE )
  47692. 801447a: 6afb ldr r3, [r7, #44] @ 0x2c
  47693. 801447c: 2b00 cmp r3, #0
  47694. 801447e: d007 beq.n 8014490 <xQueueGenericSend+0x128>
  47695. {
  47696. /* This path is a special case that will only get
  47697. executed if the task was holding multiple mutexes and
  47698. the mutexes were given back in an order that is
  47699. different to that in which they were taken. */
  47700. queueYIELD_IF_USING_PREEMPTION();
  47701. 8014480: 4b39 ldr r3, [pc, #228] @ (8014568 <xQueueGenericSend+0x200>)
  47702. 8014482: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  47703. 8014486: 601a str r2, [r3, #0]
  47704. 8014488: f3bf 8f4f dsb sy
  47705. 801448c: f3bf 8f6f isb sy
  47706. mtCOVERAGE_TEST_MARKER();
  47707. }
  47708. }
  47709. #endif /* configUSE_QUEUE_SETS */
  47710. taskEXIT_CRITICAL();
  47711. 8014490: f002 ff14 bl 80172bc <vPortExitCritical>
  47712. return pdPASS;
  47713. 8014494: 2301 movs r3, #1
  47714. 8014496: e063 b.n 8014560 <xQueueGenericSend+0x1f8>
  47715. }
  47716. else
  47717. {
  47718. if( xTicksToWait == ( TickType_t ) 0 )
  47719. 8014498: 687b ldr r3, [r7, #4]
  47720. 801449a: 2b00 cmp r3, #0
  47721. 801449c: d103 bne.n 80144a6 <xQueueGenericSend+0x13e>
  47722. {
  47723. /* The queue was full and no block time is specified (or
  47724. the block time has expired) so leave now. */
  47725. taskEXIT_CRITICAL();
  47726. 801449e: f002 ff0d bl 80172bc <vPortExitCritical>
  47727. /* Return to the original privilege level before exiting
  47728. the function. */
  47729. traceQUEUE_SEND_FAILED( pxQueue );
  47730. return errQUEUE_FULL;
  47731. 80144a2: 2300 movs r3, #0
  47732. 80144a4: e05c b.n 8014560 <xQueueGenericSend+0x1f8>
  47733. }
  47734. else if( xEntryTimeSet == pdFALSE )
  47735. 80144a6: 6b7b ldr r3, [r7, #52] @ 0x34
  47736. 80144a8: 2b00 cmp r3, #0
  47737. 80144aa: d106 bne.n 80144ba <xQueueGenericSend+0x152>
  47738. {
  47739. /* The queue was full and a block time was specified so
  47740. configure the timeout structure. */
  47741. vTaskInternalSetTimeOutState( &xTimeOut );
  47742. 80144ac: f107 0314 add.w r3, r7, #20
  47743. 80144b0: 4618 mov r0, r3
  47744. 80144b2: f001 fbdd bl 8015c70 <vTaskInternalSetTimeOutState>
  47745. xEntryTimeSet = pdTRUE;
  47746. 80144b6: 2301 movs r3, #1
  47747. 80144b8: 637b str r3, [r7, #52] @ 0x34
  47748. /* Entry time was already set. */
  47749. mtCOVERAGE_TEST_MARKER();
  47750. }
  47751. }
  47752. }
  47753. taskEXIT_CRITICAL();
  47754. 80144ba: f002 feff bl 80172bc <vPortExitCritical>
  47755. /* Interrupts and other tasks can send to and receive from the queue
  47756. now the critical section has been exited. */
  47757. vTaskSuspendAll();
  47758. 80144be: f001 f90f bl 80156e0 <vTaskSuspendAll>
  47759. prvLockQueue( pxQueue );
  47760. 80144c2: f002 fec9 bl 8017258 <vPortEnterCritical>
  47761. 80144c6: 6b3b ldr r3, [r7, #48] @ 0x30
  47762. 80144c8: f893 3044 ldrb.w r3, [r3, #68] @ 0x44
  47763. 80144cc: b25b sxtb r3, r3
  47764. 80144ce: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  47765. 80144d2: d103 bne.n 80144dc <xQueueGenericSend+0x174>
  47766. 80144d4: 6b3b ldr r3, [r7, #48] @ 0x30
  47767. 80144d6: 2200 movs r2, #0
  47768. 80144d8: f883 2044 strb.w r2, [r3, #68] @ 0x44
  47769. 80144dc: 6b3b ldr r3, [r7, #48] @ 0x30
  47770. 80144de: f893 3045 ldrb.w r3, [r3, #69] @ 0x45
  47771. 80144e2: b25b sxtb r3, r3
  47772. 80144e4: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  47773. 80144e8: d103 bne.n 80144f2 <xQueueGenericSend+0x18a>
  47774. 80144ea: 6b3b ldr r3, [r7, #48] @ 0x30
  47775. 80144ec: 2200 movs r2, #0
  47776. 80144ee: f883 2045 strb.w r2, [r3, #69] @ 0x45
  47777. 80144f2: f002 fee3 bl 80172bc <vPortExitCritical>
  47778. /* Update the timeout state to see if it has expired yet. */
  47779. if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE )
  47780. 80144f6: 1d3a adds r2, r7, #4
  47781. 80144f8: f107 0314 add.w r3, r7, #20
  47782. 80144fc: 4611 mov r1, r2
  47783. 80144fe: 4618 mov r0, r3
  47784. 8014500: f001 fbcc bl 8015c9c <xTaskCheckForTimeOut>
  47785. 8014504: 4603 mov r3, r0
  47786. 8014506: 2b00 cmp r3, #0
  47787. 8014508: d124 bne.n 8014554 <xQueueGenericSend+0x1ec>
  47788. {
  47789. if( prvIsQueueFull( pxQueue ) != pdFALSE )
  47790. 801450a: 6b38 ldr r0, [r7, #48] @ 0x30
  47791. 801450c: f000 fc50 bl 8014db0 <prvIsQueueFull>
  47792. 8014510: 4603 mov r3, r0
  47793. 8014512: 2b00 cmp r3, #0
  47794. 8014514: d018 beq.n 8014548 <xQueueGenericSend+0x1e0>
  47795. {
  47796. traceBLOCKING_ON_QUEUE_SEND( pxQueue );
  47797. vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToSend ), xTicksToWait );
  47798. 8014516: 6b3b ldr r3, [r7, #48] @ 0x30
  47799. 8014518: 3310 adds r3, #16
  47800. 801451a: 687a ldr r2, [r7, #4]
  47801. 801451c: 4611 mov r1, r2
  47802. 801451e: 4618 mov r0, r3
  47803. 8014520: f001 fac8 bl 8015ab4 <vTaskPlaceOnEventList>
  47804. /* Unlocking the queue means queue events can effect the
  47805. event list. It is possible that interrupts occurring now
  47806. remove this task from the event list again - but as the
  47807. scheduler is suspended the task will go onto the pending
  47808. ready last instead of the actual ready list. */
  47809. prvUnlockQueue( pxQueue );
  47810. 8014524: 6b38 ldr r0, [r7, #48] @ 0x30
  47811. 8014526: f000 fbdb bl 8014ce0 <prvUnlockQueue>
  47812. /* Resuming the scheduler will move tasks from the pending
  47813. ready list into the ready list - so it is feasible that this
  47814. task is already in a ready list before it yields - in which
  47815. case the yield will not cause a context switch unless there
  47816. is also a higher priority task in the pending ready list. */
  47817. if( xTaskResumeAll() == pdFALSE )
  47818. 801452a: f001 f8e7 bl 80156fc <xTaskResumeAll>
  47819. 801452e: 4603 mov r3, r0
  47820. 8014530: 2b00 cmp r3, #0
  47821. 8014532: f47f af7c bne.w 801442e <xQueueGenericSend+0xc6>
  47822. {
  47823. portYIELD_WITHIN_API();
  47824. 8014536: 4b0c ldr r3, [pc, #48] @ (8014568 <xQueueGenericSend+0x200>)
  47825. 8014538: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  47826. 801453c: 601a str r2, [r3, #0]
  47827. 801453e: f3bf 8f4f dsb sy
  47828. 8014542: f3bf 8f6f isb sy
  47829. 8014546: e772 b.n 801442e <xQueueGenericSend+0xc6>
  47830. }
  47831. }
  47832. else
  47833. {
  47834. /* Try again. */
  47835. prvUnlockQueue( pxQueue );
  47836. 8014548: 6b38 ldr r0, [r7, #48] @ 0x30
  47837. 801454a: f000 fbc9 bl 8014ce0 <prvUnlockQueue>
  47838. ( void ) xTaskResumeAll();
  47839. 801454e: f001 f8d5 bl 80156fc <xTaskResumeAll>
  47840. 8014552: e76c b.n 801442e <xQueueGenericSend+0xc6>
  47841. }
  47842. }
  47843. else
  47844. {
  47845. /* The timeout has expired. */
  47846. prvUnlockQueue( pxQueue );
  47847. 8014554: 6b38 ldr r0, [r7, #48] @ 0x30
  47848. 8014556: f000 fbc3 bl 8014ce0 <prvUnlockQueue>
  47849. ( void ) xTaskResumeAll();
  47850. 801455a: f001 f8cf bl 80156fc <xTaskResumeAll>
  47851. traceQUEUE_SEND_FAILED( pxQueue );
  47852. return errQUEUE_FULL;
  47853. 801455e: 2300 movs r3, #0
  47854. }
  47855. } /*lint -restore */
  47856. }
  47857. 8014560: 4618 mov r0, r3
  47858. 8014562: 3738 adds r7, #56 @ 0x38
  47859. 8014564: 46bd mov sp, r7
  47860. 8014566: bd80 pop {r7, pc}
  47861. 8014568: e000ed04 .word 0xe000ed04
  47862. 0801456c <xQueueGenericSendFromISR>:
  47863. /*-----------------------------------------------------------*/
  47864. BaseType_t xQueueGenericSendFromISR( QueueHandle_t xQueue, const void * const pvItemToQueue, BaseType_t * const pxHigherPriorityTaskWoken, const BaseType_t xCopyPosition )
  47865. {
  47866. 801456c: b580 push {r7, lr}
  47867. 801456e: b090 sub sp, #64 @ 0x40
  47868. 8014570: af00 add r7, sp, #0
  47869. 8014572: 60f8 str r0, [r7, #12]
  47870. 8014574: 60b9 str r1, [r7, #8]
  47871. 8014576: 607a str r2, [r7, #4]
  47872. 8014578: 603b str r3, [r7, #0]
  47873. BaseType_t xReturn;
  47874. UBaseType_t uxSavedInterruptStatus;
  47875. Queue_t * const pxQueue = xQueue;
  47876. 801457a: 68fb ldr r3, [r7, #12]
  47877. 801457c: 63bb str r3, [r7, #56] @ 0x38
  47878. configASSERT( pxQueue );
  47879. 801457e: 6bbb ldr r3, [r7, #56] @ 0x38
  47880. 8014580: 2b00 cmp r3, #0
  47881. 8014582: d10b bne.n 801459c <xQueueGenericSendFromISR+0x30>
  47882. __asm volatile
  47883. 8014584: f04f 0350 mov.w r3, #80 @ 0x50
  47884. 8014588: f383 8811 msr BASEPRI, r3
  47885. 801458c: f3bf 8f6f isb sy
  47886. 8014590: f3bf 8f4f dsb sy
  47887. 8014594: 62bb str r3, [r7, #40] @ 0x28
  47888. }
  47889. 8014596: bf00 nop
  47890. 8014598: bf00 nop
  47891. 801459a: e7fd b.n 8014598 <xQueueGenericSendFromISR+0x2c>
  47892. configASSERT( !( ( pvItemToQueue == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) );
  47893. 801459c: 68bb ldr r3, [r7, #8]
  47894. 801459e: 2b00 cmp r3, #0
  47895. 80145a0: d103 bne.n 80145aa <xQueueGenericSendFromISR+0x3e>
  47896. 80145a2: 6bbb ldr r3, [r7, #56] @ 0x38
  47897. 80145a4: 6c1b ldr r3, [r3, #64] @ 0x40
  47898. 80145a6: 2b00 cmp r3, #0
  47899. 80145a8: d101 bne.n 80145ae <xQueueGenericSendFromISR+0x42>
  47900. 80145aa: 2301 movs r3, #1
  47901. 80145ac: e000 b.n 80145b0 <xQueueGenericSendFromISR+0x44>
  47902. 80145ae: 2300 movs r3, #0
  47903. 80145b0: 2b00 cmp r3, #0
  47904. 80145b2: d10b bne.n 80145cc <xQueueGenericSendFromISR+0x60>
  47905. __asm volatile
  47906. 80145b4: f04f 0350 mov.w r3, #80 @ 0x50
  47907. 80145b8: f383 8811 msr BASEPRI, r3
  47908. 80145bc: f3bf 8f6f isb sy
  47909. 80145c0: f3bf 8f4f dsb sy
  47910. 80145c4: 627b str r3, [r7, #36] @ 0x24
  47911. }
  47912. 80145c6: bf00 nop
  47913. 80145c8: bf00 nop
  47914. 80145ca: e7fd b.n 80145c8 <xQueueGenericSendFromISR+0x5c>
  47915. configASSERT( !( ( xCopyPosition == queueOVERWRITE ) && ( pxQueue->uxLength != 1 ) ) );
  47916. 80145cc: 683b ldr r3, [r7, #0]
  47917. 80145ce: 2b02 cmp r3, #2
  47918. 80145d0: d103 bne.n 80145da <xQueueGenericSendFromISR+0x6e>
  47919. 80145d2: 6bbb ldr r3, [r7, #56] @ 0x38
  47920. 80145d4: 6bdb ldr r3, [r3, #60] @ 0x3c
  47921. 80145d6: 2b01 cmp r3, #1
  47922. 80145d8: d101 bne.n 80145de <xQueueGenericSendFromISR+0x72>
  47923. 80145da: 2301 movs r3, #1
  47924. 80145dc: e000 b.n 80145e0 <xQueueGenericSendFromISR+0x74>
  47925. 80145de: 2300 movs r3, #0
  47926. 80145e0: 2b00 cmp r3, #0
  47927. 80145e2: d10b bne.n 80145fc <xQueueGenericSendFromISR+0x90>
  47928. __asm volatile
  47929. 80145e4: f04f 0350 mov.w r3, #80 @ 0x50
  47930. 80145e8: f383 8811 msr BASEPRI, r3
  47931. 80145ec: f3bf 8f6f isb sy
  47932. 80145f0: f3bf 8f4f dsb sy
  47933. 80145f4: 623b str r3, [r7, #32]
  47934. }
  47935. 80145f6: bf00 nop
  47936. 80145f8: bf00 nop
  47937. 80145fa: e7fd b.n 80145f8 <xQueueGenericSendFromISR+0x8c>
  47938. that have been assigned a priority at or (logically) below the maximum
  47939. system call interrupt priority. FreeRTOS maintains a separate interrupt
  47940. safe API to ensure interrupt entry is as fast and as simple as possible.
  47941. More information (albeit Cortex-M specific) is provided on the following
  47942. link: http://www.freertos.org/RTOS-Cortex-M3-M4.html */
  47943. portASSERT_IF_INTERRUPT_PRIORITY_INVALID();
  47944. 80145fc: f002 ff0c bl 8017418 <vPortValidateInterruptPriority>
  47945. portFORCE_INLINE static uint32_t ulPortRaiseBASEPRI( void )
  47946. {
  47947. uint32_t ulOriginalBASEPRI, ulNewBASEPRI;
  47948. __asm volatile
  47949. 8014600: f3ef 8211 mrs r2, BASEPRI
  47950. 8014604: f04f 0350 mov.w r3, #80 @ 0x50
  47951. 8014608: f383 8811 msr BASEPRI, r3
  47952. 801460c: f3bf 8f6f isb sy
  47953. 8014610: f3bf 8f4f dsb sy
  47954. 8014614: 61fa str r2, [r7, #28]
  47955. 8014616: 61bb str r3, [r7, #24]
  47956. :"=r" (ulOriginalBASEPRI), "=r" (ulNewBASEPRI) : "i" ( configMAX_SYSCALL_INTERRUPT_PRIORITY ) : "memory"
  47957. );
  47958. /* This return will not be reached but is necessary to prevent compiler
  47959. warnings. */
  47960. return ulOriginalBASEPRI;
  47961. 8014618: 69fb ldr r3, [r7, #28]
  47962. /* Similar to xQueueGenericSend, except without blocking if there is no room
  47963. in the queue. Also don't directly wake a task that was blocked on a queue
  47964. read, instead return a flag to say whether a context switch is required or
  47965. not (i.e. has a task with a higher priority than us been woken by this
  47966. post). */
  47967. uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
  47968. 801461a: 637b str r3, [r7, #52] @ 0x34
  47969. {
  47970. if( ( pxQueue->uxMessagesWaiting < pxQueue->uxLength ) || ( xCopyPosition == queueOVERWRITE ) )
  47971. 801461c: 6bbb ldr r3, [r7, #56] @ 0x38
  47972. 801461e: 6b9a ldr r2, [r3, #56] @ 0x38
  47973. 8014620: 6bbb ldr r3, [r7, #56] @ 0x38
  47974. 8014622: 6bdb ldr r3, [r3, #60] @ 0x3c
  47975. 8014624: 429a cmp r2, r3
  47976. 8014626: d302 bcc.n 801462e <xQueueGenericSendFromISR+0xc2>
  47977. 8014628: 683b ldr r3, [r7, #0]
  47978. 801462a: 2b02 cmp r3, #2
  47979. 801462c: d12f bne.n 801468e <xQueueGenericSendFromISR+0x122>
  47980. {
  47981. const int8_t cTxLock = pxQueue->cTxLock;
  47982. 801462e: 6bbb ldr r3, [r7, #56] @ 0x38
  47983. 8014630: f893 3045 ldrb.w r3, [r3, #69] @ 0x45
  47984. 8014634: f887 3033 strb.w r3, [r7, #51] @ 0x33
  47985. const UBaseType_t uxPreviousMessagesWaiting = pxQueue->uxMessagesWaiting;
  47986. 8014638: 6bbb ldr r3, [r7, #56] @ 0x38
  47987. 801463a: 6b9b ldr r3, [r3, #56] @ 0x38
  47988. 801463c: 62fb str r3, [r7, #44] @ 0x2c
  47989. /* Semaphores use xQueueGiveFromISR(), so pxQueue will not be a
  47990. semaphore or mutex. That means prvCopyDataToQueue() cannot result
  47991. in a task disinheriting a priority and prvCopyDataToQueue() can be
  47992. called here even though the disinherit function does not check if
  47993. the scheduler is suspended before accessing the ready lists. */
  47994. ( void ) prvCopyDataToQueue( pxQueue, pvItemToQueue, xCopyPosition );
  47995. 801463e: 683a ldr r2, [r7, #0]
  47996. 8014640: 68b9 ldr r1, [r7, #8]
  47997. 8014642: 6bb8 ldr r0, [r7, #56] @ 0x38
  47998. 8014644: f000 fabc bl 8014bc0 <prvCopyDataToQueue>
  47999. /* The event list is not altered if the queue is locked. This will
  48000. be done when the queue is unlocked later. */
  48001. if( cTxLock == queueUNLOCKED )
  48002. 8014648: f997 3033 ldrsb.w r3, [r7, #51] @ 0x33
  48003. 801464c: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  48004. 8014650: d112 bne.n 8014678 <xQueueGenericSendFromISR+0x10c>
  48005. }
  48006. }
  48007. }
  48008. #else /* configUSE_QUEUE_SETS */
  48009. {
  48010. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )
  48011. 8014652: 6bbb ldr r3, [r7, #56] @ 0x38
  48012. 8014654: 6a5b ldr r3, [r3, #36] @ 0x24
  48013. 8014656: 2b00 cmp r3, #0
  48014. 8014658: d016 beq.n 8014688 <xQueueGenericSendFromISR+0x11c>
  48015. {
  48016. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )
  48017. 801465a: 6bbb ldr r3, [r7, #56] @ 0x38
  48018. 801465c: 3324 adds r3, #36 @ 0x24
  48019. 801465e: 4618 mov r0, r3
  48020. 8014660: f001 fa7a bl 8015b58 <xTaskRemoveFromEventList>
  48021. 8014664: 4603 mov r3, r0
  48022. 8014666: 2b00 cmp r3, #0
  48023. 8014668: d00e beq.n 8014688 <xQueueGenericSendFromISR+0x11c>
  48024. {
  48025. /* The task waiting has a higher priority so record that a
  48026. context switch is required. */
  48027. if( pxHigherPriorityTaskWoken != NULL )
  48028. 801466a: 687b ldr r3, [r7, #4]
  48029. 801466c: 2b00 cmp r3, #0
  48030. 801466e: d00b beq.n 8014688 <xQueueGenericSendFromISR+0x11c>
  48031. {
  48032. *pxHigherPriorityTaskWoken = pdTRUE;
  48033. 8014670: 687b ldr r3, [r7, #4]
  48034. 8014672: 2201 movs r2, #1
  48035. 8014674: 601a str r2, [r3, #0]
  48036. 8014676: e007 b.n 8014688 <xQueueGenericSendFromISR+0x11c>
  48037. }
  48038. else
  48039. {
  48040. /* Increment the lock count so the task that unlocks the queue
  48041. knows that data was posted while it was locked. */
  48042. pxQueue->cTxLock = ( int8_t ) ( cTxLock + 1 );
  48043. 8014678: f897 3033 ldrb.w r3, [r7, #51] @ 0x33
  48044. 801467c: 3301 adds r3, #1
  48045. 801467e: b2db uxtb r3, r3
  48046. 8014680: b25a sxtb r2, r3
  48047. 8014682: 6bbb ldr r3, [r7, #56] @ 0x38
  48048. 8014684: f883 2045 strb.w r2, [r3, #69] @ 0x45
  48049. }
  48050. xReturn = pdPASS;
  48051. 8014688: 2301 movs r3, #1
  48052. 801468a: 63fb str r3, [r7, #60] @ 0x3c
  48053. {
  48054. 801468c: e001 b.n 8014692 <xQueueGenericSendFromISR+0x126>
  48055. }
  48056. else
  48057. {
  48058. traceQUEUE_SEND_FROM_ISR_FAILED( pxQueue );
  48059. xReturn = errQUEUE_FULL;
  48060. 801468e: 2300 movs r3, #0
  48061. 8014690: 63fb str r3, [r7, #60] @ 0x3c
  48062. 8014692: 6b7b ldr r3, [r7, #52] @ 0x34
  48063. 8014694: 617b str r3, [r7, #20]
  48064. }
  48065. /*-----------------------------------------------------------*/
  48066. portFORCE_INLINE static void vPortSetBASEPRI( uint32_t ulNewMaskValue )
  48067. {
  48068. __asm volatile
  48069. 8014696: 697b ldr r3, [r7, #20]
  48070. 8014698: f383 8811 msr BASEPRI, r3
  48071. (
  48072. " msr basepri, %0 " :: "r" ( ulNewMaskValue ) : "memory"
  48073. );
  48074. }
  48075. 801469c: bf00 nop
  48076. }
  48077. }
  48078. portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus );
  48079. return xReturn;
  48080. 801469e: 6bfb ldr r3, [r7, #60] @ 0x3c
  48081. }
  48082. 80146a0: 4618 mov r0, r3
  48083. 80146a2: 3740 adds r7, #64 @ 0x40
  48084. 80146a4: 46bd mov sp, r7
  48085. 80146a6: bd80 pop {r7, pc}
  48086. 080146a8 <xQueueReceive>:
  48087. return xReturn;
  48088. }
  48089. /*-----------------------------------------------------------*/
  48090. BaseType_t xQueueReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait )
  48091. {
  48092. 80146a8: b580 push {r7, lr}
  48093. 80146aa: b08c sub sp, #48 @ 0x30
  48094. 80146ac: af00 add r7, sp, #0
  48095. 80146ae: 60f8 str r0, [r7, #12]
  48096. 80146b0: 60b9 str r1, [r7, #8]
  48097. 80146b2: 607a str r2, [r7, #4]
  48098. BaseType_t xEntryTimeSet = pdFALSE;
  48099. 80146b4: 2300 movs r3, #0
  48100. 80146b6: 62fb str r3, [r7, #44] @ 0x2c
  48101. TimeOut_t xTimeOut;
  48102. Queue_t * const pxQueue = xQueue;
  48103. 80146b8: 68fb ldr r3, [r7, #12]
  48104. 80146ba: 62bb str r3, [r7, #40] @ 0x28
  48105. /* Check the pointer is not NULL. */
  48106. configASSERT( ( pxQueue ) );
  48107. 80146bc: 6abb ldr r3, [r7, #40] @ 0x28
  48108. 80146be: 2b00 cmp r3, #0
  48109. 80146c0: d10b bne.n 80146da <xQueueReceive+0x32>
  48110. __asm volatile
  48111. 80146c2: f04f 0350 mov.w r3, #80 @ 0x50
  48112. 80146c6: f383 8811 msr BASEPRI, r3
  48113. 80146ca: f3bf 8f6f isb sy
  48114. 80146ce: f3bf 8f4f dsb sy
  48115. 80146d2: 623b str r3, [r7, #32]
  48116. }
  48117. 80146d4: bf00 nop
  48118. 80146d6: bf00 nop
  48119. 80146d8: e7fd b.n 80146d6 <xQueueReceive+0x2e>
  48120. /* The buffer into which data is received can only be NULL if the data size
  48121. is zero (so no data is copied into the buffer. */
  48122. configASSERT( !( ( ( pvBuffer ) == NULL ) && ( ( pxQueue )->uxItemSize != ( UBaseType_t ) 0U ) ) );
  48123. 80146da: 68bb ldr r3, [r7, #8]
  48124. 80146dc: 2b00 cmp r3, #0
  48125. 80146de: d103 bne.n 80146e8 <xQueueReceive+0x40>
  48126. 80146e0: 6abb ldr r3, [r7, #40] @ 0x28
  48127. 80146e2: 6c1b ldr r3, [r3, #64] @ 0x40
  48128. 80146e4: 2b00 cmp r3, #0
  48129. 80146e6: d101 bne.n 80146ec <xQueueReceive+0x44>
  48130. 80146e8: 2301 movs r3, #1
  48131. 80146ea: e000 b.n 80146ee <xQueueReceive+0x46>
  48132. 80146ec: 2300 movs r3, #0
  48133. 80146ee: 2b00 cmp r3, #0
  48134. 80146f0: d10b bne.n 801470a <xQueueReceive+0x62>
  48135. __asm volatile
  48136. 80146f2: f04f 0350 mov.w r3, #80 @ 0x50
  48137. 80146f6: f383 8811 msr BASEPRI, r3
  48138. 80146fa: f3bf 8f6f isb sy
  48139. 80146fe: f3bf 8f4f dsb sy
  48140. 8014702: 61fb str r3, [r7, #28]
  48141. }
  48142. 8014704: bf00 nop
  48143. 8014706: bf00 nop
  48144. 8014708: e7fd b.n 8014706 <xQueueReceive+0x5e>
  48145. /* Cannot block if the scheduler is suspended. */
  48146. #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
  48147. {
  48148. configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );
  48149. 801470a: f001 fc23 bl 8015f54 <xTaskGetSchedulerState>
  48150. 801470e: 4603 mov r3, r0
  48151. 8014710: 2b00 cmp r3, #0
  48152. 8014712: d102 bne.n 801471a <xQueueReceive+0x72>
  48153. 8014714: 687b ldr r3, [r7, #4]
  48154. 8014716: 2b00 cmp r3, #0
  48155. 8014718: d101 bne.n 801471e <xQueueReceive+0x76>
  48156. 801471a: 2301 movs r3, #1
  48157. 801471c: e000 b.n 8014720 <xQueueReceive+0x78>
  48158. 801471e: 2300 movs r3, #0
  48159. 8014720: 2b00 cmp r3, #0
  48160. 8014722: d10b bne.n 801473c <xQueueReceive+0x94>
  48161. __asm volatile
  48162. 8014724: f04f 0350 mov.w r3, #80 @ 0x50
  48163. 8014728: f383 8811 msr BASEPRI, r3
  48164. 801472c: f3bf 8f6f isb sy
  48165. 8014730: f3bf 8f4f dsb sy
  48166. 8014734: 61bb str r3, [r7, #24]
  48167. }
  48168. 8014736: bf00 nop
  48169. 8014738: bf00 nop
  48170. 801473a: e7fd b.n 8014738 <xQueueReceive+0x90>
  48171. /*lint -save -e904 This function relaxes the coding standard somewhat to
  48172. allow return statements within the function itself. This is done in the
  48173. interest of execution time efficiency. */
  48174. for( ;; )
  48175. {
  48176. taskENTER_CRITICAL();
  48177. 801473c: f002 fd8c bl 8017258 <vPortEnterCritical>
  48178. {
  48179. const UBaseType_t uxMessagesWaiting = pxQueue->uxMessagesWaiting;
  48180. 8014740: 6abb ldr r3, [r7, #40] @ 0x28
  48181. 8014742: 6b9b ldr r3, [r3, #56] @ 0x38
  48182. 8014744: 627b str r3, [r7, #36] @ 0x24
  48183. /* Is there data in the queue now? To be running the calling task
  48184. must be the highest priority task wanting to access the queue. */
  48185. if( uxMessagesWaiting > ( UBaseType_t ) 0 )
  48186. 8014746: 6a7b ldr r3, [r7, #36] @ 0x24
  48187. 8014748: 2b00 cmp r3, #0
  48188. 801474a: d01f beq.n 801478c <xQueueReceive+0xe4>
  48189. {
  48190. /* Data available, remove one item. */
  48191. prvCopyDataFromQueue( pxQueue, pvBuffer );
  48192. 801474c: 68b9 ldr r1, [r7, #8]
  48193. 801474e: 6ab8 ldr r0, [r7, #40] @ 0x28
  48194. 8014750: f000 faa0 bl 8014c94 <prvCopyDataFromQueue>
  48195. traceQUEUE_RECEIVE( pxQueue );
  48196. pxQueue->uxMessagesWaiting = uxMessagesWaiting - ( UBaseType_t ) 1;
  48197. 8014754: 6a7b ldr r3, [r7, #36] @ 0x24
  48198. 8014756: 1e5a subs r2, r3, #1
  48199. 8014758: 6abb ldr r3, [r7, #40] @ 0x28
  48200. 801475a: 639a str r2, [r3, #56] @ 0x38
  48201. /* There is now space in the queue, were any tasks waiting to
  48202. post to the queue? If so, unblock the highest priority waiting
  48203. task. */
  48204. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )
  48205. 801475c: 6abb ldr r3, [r7, #40] @ 0x28
  48206. 801475e: 691b ldr r3, [r3, #16]
  48207. 8014760: 2b00 cmp r3, #0
  48208. 8014762: d00f beq.n 8014784 <xQueueReceive+0xdc>
  48209. {
  48210. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE )
  48211. 8014764: 6abb ldr r3, [r7, #40] @ 0x28
  48212. 8014766: 3310 adds r3, #16
  48213. 8014768: 4618 mov r0, r3
  48214. 801476a: f001 f9f5 bl 8015b58 <xTaskRemoveFromEventList>
  48215. 801476e: 4603 mov r3, r0
  48216. 8014770: 2b00 cmp r3, #0
  48217. 8014772: d007 beq.n 8014784 <xQueueReceive+0xdc>
  48218. {
  48219. queueYIELD_IF_USING_PREEMPTION();
  48220. 8014774: 4b3c ldr r3, [pc, #240] @ (8014868 <xQueueReceive+0x1c0>)
  48221. 8014776: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  48222. 801477a: 601a str r2, [r3, #0]
  48223. 801477c: f3bf 8f4f dsb sy
  48224. 8014780: f3bf 8f6f isb sy
  48225. else
  48226. {
  48227. mtCOVERAGE_TEST_MARKER();
  48228. }
  48229. taskEXIT_CRITICAL();
  48230. 8014784: f002 fd9a bl 80172bc <vPortExitCritical>
  48231. return pdPASS;
  48232. 8014788: 2301 movs r3, #1
  48233. 801478a: e069 b.n 8014860 <xQueueReceive+0x1b8>
  48234. }
  48235. else
  48236. {
  48237. if( xTicksToWait == ( TickType_t ) 0 )
  48238. 801478c: 687b ldr r3, [r7, #4]
  48239. 801478e: 2b00 cmp r3, #0
  48240. 8014790: d103 bne.n 801479a <xQueueReceive+0xf2>
  48241. {
  48242. /* The queue was empty and no block time is specified (or
  48243. the block time has expired) so leave now. */
  48244. taskEXIT_CRITICAL();
  48245. 8014792: f002 fd93 bl 80172bc <vPortExitCritical>
  48246. traceQUEUE_RECEIVE_FAILED( pxQueue );
  48247. return errQUEUE_EMPTY;
  48248. 8014796: 2300 movs r3, #0
  48249. 8014798: e062 b.n 8014860 <xQueueReceive+0x1b8>
  48250. }
  48251. else if( xEntryTimeSet == pdFALSE )
  48252. 801479a: 6afb ldr r3, [r7, #44] @ 0x2c
  48253. 801479c: 2b00 cmp r3, #0
  48254. 801479e: d106 bne.n 80147ae <xQueueReceive+0x106>
  48255. {
  48256. /* The queue was empty and a block time was specified so
  48257. configure the timeout structure. */
  48258. vTaskInternalSetTimeOutState( &xTimeOut );
  48259. 80147a0: f107 0310 add.w r3, r7, #16
  48260. 80147a4: 4618 mov r0, r3
  48261. 80147a6: f001 fa63 bl 8015c70 <vTaskInternalSetTimeOutState>
  48262. xEntryTimeSet = pdTRUE;
  48263. 80147aa: 2301 movs r3, #1
  48264. 80147ac: 62fb str r3, [r7, #44] @ 0x2c
  48265. /* Entry time was already set. */
  48266. mtCOVERAGE_TEST_MARKER();
  48267. }
  48268. }
  48269. }
  48270. taskEXIT_CRITICAL();
  48271. 80147ae: f002 fd85 bl 80172bc <vPortExitCritical>
  48272. /* Interrupts and other tasks can send to and receive from the queue
  48273. now the critical section has been exited. */
  48274. vTaskSuspendAll();
  48275. 80147b2: f000 ff95 bl 80156e0 <vTaskSuspendAll>
  48276. prvLockQueue( pxQueue );
  48277. 80147b6: f002 fd4f bl 8017258 <vPortEnterCritical>
  48278. 80147ba: 6abb ldr r3, [r7, #40] @ 0x28
  48279. 80147bc: f893 3044 ldrb.w r3, [r3, #68] @ 0x44
  48280. 80147c0: b25b sxtb r3, r3
  48281. 80147c2: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  48282. 80147c6: d103 bne.n 80147d0 <xQueueReceive+0x128>
  48283. 80147c8: 6abb ldr r3, [r7, #40] @ 0x28
  48284. 80147ca: 2200 movs r2, #0
  48285. 80147cc: f883 2044 strb.w r2, [r3, #68] @ 0x44
  48286. 80147d0: 6abb ldr r3, [r7, #40] @ 0x28
  48287. 80147d2: f893 3045 ldrb.w r3, [r3, #69] @ 0x45
  48288. 80147d6: b25b sxtb r3, r3
  48289. 80147d8: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  48290. 80147dc: d103 bne.n 80147e6 <xQueueReceive+0x13e>
  48291. 80147de: 6abb ldr r3, [r7, #40] @ 0x28
  48292. 80147e0: 2200 movs r2, #0
  48293. 80147e2: f883 2045 strb.w r2, [r3, #69] @ 0x45
  48294. 80147e6: f002 fd69 bl 80172bc <vPortExitCritical>
  48295. /* Update the timeout state to see if it has expired yet. */
  48296. if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE )
  48297. 80147ea: 1d3a adds r2, r7, #4
  48298. 80147ec: f107 0310 add.w r3, r7, #16
  48299. 80147f0: 4611 mov r1, r2
  48300. 80147f2: 4618 mov r0, r3
  48301. 80147f4: f001 fa52 bl 8015c9c <xTaskCheckForTimeOut>
  48302. 80147f8: 4603 mov r3, r0
  48303. 80147fa: 2b00 cmp r3, #0
  48304. 80147fc: d123 bne.n 8014846 <xQueueReceive+0x19e>
  48305. {
  48306. /* The timeout has not expired. If the queue is still empty place
  48307. the task on the list of tasks waiting to receive from the queue. */
  48308. if( prvIsQueueEmpty( pxQueue ) != pdFALSE )
  48309. 80147fe: 6ab8 ldr r0, [r7, #40] @ 0x28
  48310. 8014800: f000 fac0 bl 8014d84 <prvIsQueueEmpty>
  48311. 8014804: 4603 mov r3, r0
  48312. 8014806: 2b00 cmp r3, #0
  48313. 8014808: d017 beq.n 801483a <xQueueReceive+0x192>
  48314. {
  48315. traceBLOCKING_ON_QUEUE_RECEIVE( pxQueue );
  48316. vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait );
  48317. 801480a: 6abb ldr r3, [r7, #40] @ 0x28
  48318. 801480c: 3324 adds r3, #36 @ 0x24
  48319. 801480e: 687a ldr r2, [r7, #4]
  48320. 8014810: 4611 mov r1, r2
  48321. 8014812: 4618 mov r0, r3
  48322. 8014814: f001 f94e bl 8015ab4 <vTaskPlaceOnEventList>
  48323. prvUnlockQueue( pxQueue );
  48324. 8014818: 6ab8 ldr r0, [r7, #40] @ 0x28
  48325. 801481a: f000 fa61 bl 8014ce0 <prvUnlockQueue>
  48326. if( xTaskResumeAll() == pdFALSE )
  48327. 801481e: f000 ff6d bl 80156fc <xTaskResumeAll>
  48328. 8014822: 4603 mov r3, r0
  48329. 8014824: 2b00 cmp r3, #0
  48330. 8014826: d189 bne.n 801473c <xQueueReceive+0x94>
  48331. {
  48332. portYIELD_WITHIN_API();
  48333. 8014828: 4b0f ldr r3, [pc, #60] @ (8014868 <xQueueReceive+0x1c0>)
  48334. 801482a: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  48335. 801482e: 601a str r2, [r3, #0]
  48336. 8014830: f3bf 8f4f dsb sy
  48337. 8014834: f3bf 8f6f isb sy
  48338. 8014838: e780 b.n 801473c <xQueueReceive+0x94>
  48339. }
  48340. else
  48341. {
  48342. /* The queue contains data again. Loop back to try and read the
  48343. data. */
  48344. prvUnlockQueue( pxQueue );
  48345. 801483a: 6ab8 ldr r0, [r7, #40] @ 0x28
  48346. 801483c: f000 fa50 bl 8014ce0 <prvUnlockQueue>
  48347. ( void ) xTaskResumeAll();
  48348. 8014840: f000 ff5c bl 80156fc <xTaskResumeAll>
  48349. 8014844: e77a b.n 801473c <xQueueReceive+0x94>
  48350. }
  48351. else
  48352. {
  48353. /* Timed out. If there is no data in the queue exit, otherwise loop
  48354. back and attempt to read the data. */
  48355. prvUnlockQueue( pxQueue );
  48356. 8014846: 6ab8 ldr r0, [r7, #40] @ 0x28
  48357. 8014848: f000 fa4a bl 8014ce0 <prvUnlockQueue>
  48358. ( void ) xTaskResumeAll();
  48359. 801484c: f000 ff56 bl 80156fc <xTaskResumeAll>
  48360. if( prvIsQueueEmpty( pxQueue ) != pdFALSE )
  48361. 8014850: 6ab8 ldr r0, [r7, #40] @ 0x28
  48362. 8014852: f000 fa97 bl 8014d84 <prvIsQueueEmpty>
  48363. 8014856: 4603 mov r3, r0
  48364. 8014858: 2b00 cmp r3, #0
  48365. 801485a: f43f af6f beq.w 801473c <xQueueReceive+0x94>
  48366. {
  48367. traceQUEUE_RECEIVE_FAILED( pxQueue );
  48368. return errQUEUE_EMPTY;
  48369. 801485e: 2300 movs r3, #0
  48370. {
  48371. mtCOVERAGE_TEST_MARKER();
  48372. }
  48373. }
  48374. } /*lint -restore */
  48375. }
  48376. 8014860: 4618 mov r0, r3
  48377. 8014862: 3730 adds r7, #48 @ 0x30
  48378. 8014864: 46bd mov sp, r7
  48379. 8014866: bd80 pop {r7, pc}
  48380. 8014868: e000ed04 .word 0xe000ed04
  48381. 0801486c <xQueueSemaphoreTake>:
  48382. /*-----------------------------------------------------------*/
  48383. BaseType_t xQueueSemaphoreTake( QueueHandle_t xQueue, TickType_t xTicksToWait )
  48384. {
  48385. 801486c: b580 push {r7, lr}
  48386. 801486e: b08e sub sp, #56 @ 0x38
  48387. 8014870: af00 add r7, sp, #0
  48388. 8014872: 6078 str r0, [r7, #4]
  48389. 8014874: 6039 str r1, [r7, #0]
  48390. BaseType_t xEntryTimeSet = pdFALSE;
  48391. 8014876: 2300 movs r3, #0
  48392. 8014878: 637b str r3, [r7, #52] @ 0x34
  48393. TimeOut_t xTimeOut;
  48394. Queue_t * const pxQueue = xQueue;
  48395. 801487a: 687b ldr r3, [r7, #4]
  48396. 801487c: 62fb str r3, [r7, #44] @ 0x2c
  48397. #if( configUSE_MUTEXES == 1 )
  48398. BaseType_t xInheritanceOccurred = pdFALSE;
  48399. 801487e: 2300 movs r3, #0
  48400. 8014880: 633b str r3, [r7, #48] @ 0x30
  48401. #endif
  48402. /* Check the queue pointer is not NULL. */
  48403. configASSERT( ( pxQueue ) );
  48404. 8014882: 6afb ldr r3, [r7, #44] @ 0x2c
  48405. 8014884: 2b00 cmp r3, #0
  48406. 8014886: d10b bne.n 80148a0 <xQueueSemaphoreTake+0x34>
  48407. __asm volatile
  48408. 8014888: f04f 0350 mov.w r3, #80 @ 0x50
  48409. 801488c: f383 8811 msr BASEPRI, r3
  48410. 8014890: f3bf 8f6f isb sy
  48411. 8014894: f3bf 8f4f dsb sy
  48412. 8014898: 623b str r3, [r7, #32]
  48413. }
  48414. 801489a: bf00 nop
  48415. 801489c: bf00 nop
  48416. 801489e: e7fd b.n 801489c <xQueueSemaphoreTake+0x30>
  48417. /* Check this really is a semaphore, in which case the item size will be
  48418. 0. */
  48419. configASSERT( pxQueue->uxItemSize == 0 );
  48420. 80148a0: 6afb ldr r3, [r7, #44] @ 0x2c
  48421. 80148a2: 6c1b ldr r3, [r3, #64] @ 0x40
  48422. 80148a4: 2b00 cmp r3, #0
  48423. 80148a6: d00b beq.n 80148c0 <xQueueSemaphoreTake+0x54>
  48424. __asm volatile
  48425. 80148a8: f04f 0350 mov.w r3, #80 @ 0x50
  48426. 80148ac: f383 8811 msr BASEPRI, r3
  48427. 80148b0: f3bf 8f6f isb sy
  48428. 80148b4: f3bf 8f4f dsb sy
  48429. 80148b8: 61fb str r3, [r7, #28]
  48430. }
  48431. 80148ba: bf00 nop
  48432. 80148bc: bf00 nop
  48433. 80148be: e7fd b.n 80148bc <xQueueSemaphoreTake+0x50>
  48434. /* Cannot block if the scheduler is suspended. */
  48435. #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
  48436. {
  48437. configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );
  48438. 80148c0: f001 fb48 bl 8015f54 <xTaskGetSchedulerState>
  48439. 80148c4: 4603 mov r3, r0
  48440. 80148c6: 2b00 cmp r3, #0
  48441. 80148c8: d102 bne.n 80148d0 <xQueueSemaphoreTake+0x64>
  48442. 80148ca: 683b ldr r3, [r7, #0]
  48443. 80148cc: 2b00 cmp r3, #0
  48444. 80148ce: d101 bne.n 80148d4 <xQueueSemaphoreTake+0x68>
  48445. 80148d0: 2301 movs r3, #1
  48446. 80148d2: e000 b.n 80148d6 <xQueueSemaphoreTake+0x6a>
  48447. 80148d4: 2300 movs r3, #0
  48448. 80148d6: 2b00 cmp r3, #0
  48449. 80148d8: d10b bne.n 80148f2 <xQueueSemaphoreTake+0x86>
  48450. __asm volatile
  48451. 80148da: f04f 0350 mov.w r3, #80 @ 0x50
  48452. 80148de: f383 8811 msr BASEPRI, r3
  48453. 80148e2: f3bf 8f6f isb sy
  48454. 80148e6: f3bf 8f4f dsb sy
  48455. 80148ea: 61bb str r3, [r7, #24]
  48456. }
  48457. 80148ec: bf00 nop
  48458. 80148ee: bf00 nop
  48459. 80148f0: e7fd b.n 80148ee <xQueueSemaphoreTake+0x82>
  48460. /*lint -save -e904 This function relaxes the coding standard somewhat to allow return
  48461. statements within the function itself. This is done in the interest
  48462. of execution time efficiency. */
  48463. for( ;; )
  48464. {
  48465. taskENTER_CRITICAL();
  48466. 80148f2: f002 fcb1 bl 8017258 <vPortEnterCritical>
  48467. {
  48468. /* Semaphores are queues with an item size of 0, and where the
  48469. number of messages in the queue is the semaphore's count value. */
  48470. const UBaseType_t uxSemaphoreCount = pxQueue->uxMessagesWaiting;
  48471. 80148f6: 6afb ldr r3, [r7, #44] @ 0x2c
  48472. 80148f8: 6b9b ldr r3, [r3, #56] @ 0x38
  48473. 80148fa: 62bb str r3, [r7, #40] @ 0x28
  48474. /* Is there data in the queue now? To be running the calling task
  48475. must be the highest priority task wanting to access the queue. */
  48476. if( uxSemaphoreCount > ( UBaseType_t ) 0 )
  48477. 80148fc: 6abb ldr r3, [r7, #40] @ 0x28
  48478. 80148fe: 2b00 cmp r3, #0
  48479. 8014900: d024 beq.n 801494c <xQueueSemaphoreTake+0xe0>
  48480. {
  48481. traceQUEUE_RECEIVE( pxQueue );
  48482. /* Semaphores are queues with a data size of zero and where the
  48483. messages waiting is the semaphore's count. Reduce the count. */
  48484. pxQueue->uxMessagesWaiting = uxSemaphoreCount - ( UBaseType_t ) 1;
  48485. 8014902: 6abb ldr r3, [r7, #40] @ 0x28
  48486. 8014904: 1e5a subs r2, r3, #1
  48487. 8014906: 6afb ldr r3, [r7, #44] @ 0x2c
  48488. 8014908: 639a str r2, [r3, #56] @ 0x38
  48489. #if ( configUSE_MUTEXES == 1 )
  48490. {
  48491. if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX )
  48492. 801490a: 6afb ldr r3, [r7, #44] @ 0x2c
  48493. 801490c: 681b ldr r3, [r3, #0]
  48494. 801490e: 2b00 cmp r3, #0
  48495. 8014910: d104 bne.n 801491c <xQueueSemaphoreTake+0xb0>
  48496. {
  48497. /* Record the information required to implement
  48498. priority inheritance should it become necessary. */
  48499. pxQueue->u.xSemaphore.xMutexHolder = pvTaskIncrementMutexHeldCount();
  48500. 8014912: f001 fc99 bl 8016248 <pvTaskIncrementMutexHeldCount>
  48501. 8014916: 4602 mov r2, r0
  48502. 8014918: 6afb ldr r3, [r7, #44] @ 0x2c
  48503. 801491a: 609a str r2, [r3, #8]
  48504. }
  48505. #endif /* configUSE_MUTEXES */
  48506. /* Check to see if other tasks are blocked waiting to give the
  48507. semaphore, and if so, unblock the highest priority such task. */
  48508. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )
  48509. 801491c: 6afb ldr r3, [r7, #44] @ 0x2c
  48510. 801491e: 691b ldr r3, [r3, #16]
  48511. 8014920: 2b00 cmp r3, #0
  48512. 8014922: d00f beq.n 8014944 <xQueueSemaphoreTake+0xd8>
  48513. {
  48514. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE )
  48515. 8014924: 6afb ldr r3, [r7, #44] @ 0x2c
  48516. 8014926: 3310 adds r3, #16
  48517. 8014928: 4618 mov r0, r3
  48518. 801492a: f001 f915 bl 8015b58 <xTaskRemoveFromEventList>
  48519. 801492e: 4603 mov r3, r0
  48520. 8014930: 2b00 cmp r3, #0
  48521. 8014932: d007 beq.n 8014944 <xQueueSemaphoreTake+0xd8>
  48522. {
  48523. queueYIELD_IF_USING_PREEMPTION();
  48524. 8014934: 4b54 ldr r3, [pc, #336] @ (8014a88 <xQueueSemaphoreTake+0x21c>)
  48525. 8014936: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  48526. 801493a: 601a str r2, [r3, #0]
  48527. 801493c: f3bf 8f4f dsb sy
  48528. 8014940: f3bf 8f6f isb sy
  48529. else
  48530. {
  48531. mtCOVERAGE_TEST_MARKER();
  48532. }
  48533. taskEXIT_CRITICAL();
  48534. 8014944: f002 fcba bl 80172bc <vPortExitCritical>
  48535. return pdPASS;
  48536. 8014948: 2301 movs r3, #1
  48537. 801494a: e098 b.n 8014a7e <xQueueSemaphoreTake+0x212>
  48538. }
  48539. else
  48540. {
  48541. if( xTicksToWait == ( TickType_t ) 0 )
  48542. 801494c: 683b ldr r3, [r7, #0]
  48543. 801494e: 2b00 cmp r3, #0
  48544. 8014950: d112 bne.n 8014978 <xQueueSemaphoreTake+0x10c>
  48545. /* For inheritance to have occurred there must have been an
  48546. initial timeout, and an adjusted timeout cannot become 0, as
  48547. if it were 0 the function would have exited. */
  48548. #if( configUSE_MUTEXES == 1 )
  48549. {
  48550. configASSERT( xInheritanceOccurred == pdFALSE );
  48551. 8014952: 6b3b ldr r3, [r7, #48] @ 0x30
  48552. 8014954: 2b00 cmp r3, #0
  48553. 8014956: d00b beq.n 8014970 <xQueueSemaphoreTake+0x104>
  48554. __asm volatile
  48555. 8014958: f04f 0350 mov.w r3, #80 @ 0x50
  48556. 801495c: f383 8811 msr BASEPRI, r3
  48557. 8014960: f3bf 8f6f isb sy
  48558. 8014964: f3bf 8f4f dsb sy
  48559. 8014968: 617b str r3, [r7, #20]
  48560. }
  48561. 801496a: bf00 nop
  48562. 801496c: bf00 nop
  48563. 801496e: e7fd b.n 801496c <xQueueSemaphoreTake+0x100>
  48564. }
  48565. #endif /* configUSE_MUTEXES */
  48566. /* The semaphore count was 0 and no block time is specified
  48567. (or the block time has expired) so exit now. */
  48568. taskEXIT_CRITICAL();
  48569. 8014970: f002 fca4 bl 80172bc <vPortExitCritical>
  48570. traceQUEUE_RECEIVE_FAILED( pxQueue );
  48571. return errQUEUE_EMPTY;
  48572. 8014974: 2300 movs r3, #0
  48573. 8014976: e082 b.n 8014a7e <xQueueSemaphoreTake+0x212>
  48574. }
  48575. else if( xEntryTimeSet == pdFALSE )
  48576. 8014978: 6b7b ldr r3, [r7, #52] @ 0x34
  48577. 801497a: 2b00 cmp r3, #0
  48578. 801497c: d106 bne.n 801498c <xQueueSemaphoreTake+0x120>
  48579. {
  48580. /* The semaphore count was 0 and a block time was specified
  48581. so configure the timeout structure ready to block. */
  48582. vTaskInternalSetTimeOutState( &xTimeOut );
  48583. 801497e: f107 030c add.w r3, r7, #12
  48584. 8014982: 4618 mov r0, r3
  48585. 8014984: f001 f974 bl 8015c70 <vTaskInternalSetTimeOutState>
  48586. xEntryTimeSet = pdTRUE;
  48587. 8014988: 2301 movs r3, #1
  48588. 801498a: 637b str r3, [r7, #52] @ 0x34
  48589. /* Entry time was already set. */
  48590. mtCOVERAGE_TEST_MARKER();
  48591. }
  48592. }
  48593. }
  48594. taskEXIT_CRITICAL();
  48595. 801498c: f002 fc96 bl 80172bc <vPortExitCritical>
  48596. /* Interrupts and other tasks can give to and take from the semaphore
  48597. now the critical section has been exited. */
  48598. vTaskSuspendAll();
  48599. 8014990: f000 fea6 bl 80156e0 <vTaskSuspendAll>
  48600. prvLockQueue( pxQueue );
  48601. 8014994: f002 fc60 bl 8017258 <vPortEnterCritical>
  48602. 8014998: 6afb ldr r3, [r7, #44] @ 0x2c
  48603. 801499a: f893 3044 ldrb.w r3, [r3, #68] @ 0x44
  48604. 801499e: b25b sxtb r3, r3
  48605. 80149a0: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  48606. 80149a4: d103 bne.n 80149ae <xQueueSemaphoreTake+0x142>
  48607. 80149a6: 6afb ldr r3, [r7, #44] @ 0x2c
  48608. 80149a8: 2200 movs r2, #0
  48609. 80149aa: f883 2044 strb.w r2, [r3, #68] @ 0x44
  48610. 80149ae: 6afb ldr r3, [r7, #44] @ 0x2c
  48611. 80149b0: f893 3045 ldrb.w r3, [r3, #69] @ 0x45
  48612. 80149b4: b25b sxtb r3, r3
  48613. 80149b6: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  48614. 80149ba: d103 bne.n 80149c4 <xQueueSemaphoreTake+0x158>
  48615. 80149bc: 6afb ldr r3, [r7, #44] @ 0x2c
  48616. 80149be: 2200 movs r2, #0
  48617. 80149c0: f883 2045 strb.w r2, [r3, #69] @ 0x45
  48618. 80149c4: f002 fc7a bl 80172bc <vPortExitCritical>
  48619. /* Update the timeout state to see if it has expired yet. */
  48620. if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE )
  48621. 80149c8: 463a mov r2, r7
  48622. 80149ca: f107 030c add.w r3, r7, #12
  48623. 80149ce: 4611 mov r1, r2
  48624. 80149d0: 4618 mov r0, r3
  48625. 80149d2: f001 f963 bl 8015c9c <xTaskCheckForTimeOut>
  48626. 80149d6: 4603 mov r3, r0
  48627. 80149d8: 2b00 cmp r3, #0
  48628. 80149da: d132 bne.n 8014a42 <xQueueSemaphoreTake+0x1d6>
  48629. {
  48630. /* A block time is specified and not expired. If the semaphore
  48631. count is 0 then enter the Blocked state to wait for a semaphore to
  48632. become available. As semaphores are implemented with queues the
  48633. queue being empty is equivalent to the semaphore count being 0. */
  48634. if( prvIsQueueEmpty( pxQueue ) != pdFALSE )
  48635. 80149dc: 6af8 ldr r0, [r7, #44] @ 0x2c
  48636. 80149de: f000 f9d1 bl 8014d84 <prvIsQueueEmpty>
  48637. 80149e2: 4603 mov r3, r0
  48638. 80149e4: 2b00 cmp r3, #0
  48639. 80149e6: d026 beq.n 8014a36 <xQueueSemaphoreTake+0x1ca>
  48640. {
  48641. traceBLOCKING_ON_QUEUE_RECEIVE( pxQueue );
  48642. #if ( configUSE_MUTEXES == 1 )
  48643. {
  48644. if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX )
  48645. 80149e8: 6afb ldr r3, [r7, #44] @ 0x2c
  48646. 80149ea: 681b ldr r3, [r3, #0]
  48647. 80149ec: 2b00 cmp r3, #0
  48648. 80149ee: d109 bne.n 8014a04 <xQueueSemaphoreTake+0x198>
  48649. {
  48650. taskENTER_CRITICAL();
  48651. 80149f0: f002 fc32 bl 8017258 <vPortEnterCritical>
  48652. {
  48653. xInheritanceOccurred = xTaskPriorityInherit( pxQueue->u.xSemaphore.xMutexHolder );
  48654. 80149f4: 6afb ldr r3, [r7, #44] @ 0x2c
  48655. 80149f6: 689b ldr r3, [r3, #8]
  48656. 80149f8: 4618 mov r0, r3
  48657. 80149fa: f001 fac9 bl 8015f90 <xTaskPriorityInherit>
  48658. 80149fe: 6338 str r0, [r7, #48] @ 0x30
  48659. }
  48660. taskEXIT_CRITICAL();
  48661. 8014a00: f002 fc5c bl 80172bc <vPortExitCritical>
  48662. mtCOVERAGE_TEST_MARKER();
  48663. }
  48664. }
  48665. #endif
  48666. vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait );
  48667. 8014a04: 6afb ldr r3, [r7, #44] @ 0x2c
  48668. 8014a06: 3324 adds r3, #36 @ 0x24
  48669. 8014a08: 683a ldr r2, [r7, #0]
  48670. 8014a0a: 4611 mov r1, r2
  48671. 8014a0c: 4618 mov r0, r3
  48672. 8014a0e: f001 f851 bl 8015ab4 <vTaskPlaceOnEventList>
  48673. prvUnlockQueue( pxQueue );
  48674. 8014a12: 6af8 ldr r0, [r7, #44] @ 0x2c
  48675. 8014a14: f000 f964 bl 8014ce0 <prvUnlockQueue>
  48676. if( xTaskResumeAll() == pdFALSE )
  48677. 8014a18: f000 fe70 bl 80156fc <xTaskResumeAll>
  48678. 8014a1c: 4603 mov r3, r0
  48679. 8014a1e: 2b00 cmp r3, #0
  48680. 8014a20: f47f af67 bne.w 80148f2 <xQueueSemaphoreTake+0x86>
  48681. {
  48682. portYIELD_WITHIN_API();
  48683. 8014a24: 4b18 ldr r3, [pc, #96] @ (8014a88 <xQueueSemaphoreTake+0x21c>)
  48684. 8014a26: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  48685. 8014a2a: 601a str r2, [r3, #0]
  48686. 8014a2c: f3bf 8f4f dsb sy
  48687. 8014a30: f3bf 8f6f isb sy
  48688. 8014a34: e75d b.n 80148f2 <xQueueSemaphoreTake+0x86>
  48689. }
  48690. else
  48691. {
  48692. /* There was no timeout and the semaphore count was not 0, so
  48693. attempt to take the semaphore again. */
  48694. prvUnlockQueue( pxQueue );
  48695. 8014a36: 6af8 ldr r0, [r7, #44] @ 0x2c
  48696. 8014a38: f000 f952 bl 8014ce0 <prvUnlockQueue>
  48697. ( void ) xTaskResumeAll();
  48698. 8014a3c: f000 fe5e bl 80156fc <xTaskResumeAll>
  48699. 8014a40: e757 b.n 80148f2 <xQueueSemaphoreTake+0x86>
  48700. }
  48701. }
  48702. else
  48703. {
  48704. /* Timed out. */
  48705. prvUnlockQueue( pxQueue );
  48706. 8014a42: 6af8 ldr r0, [r7, #44] @ 0x2c
  48707. 8014a44: f000 f94c bl 8014ce0 <prvUnlockQueue>
  48708. ( void ) xTaskResumeAll();
  48709. 8014a48: f000 fe58 bl 80156fc <xTaskResumeAll>
  48710. /* If the semaphore count is 0 exit now as the timeout has
  48711. expired. Otherwise return to attempt to take the semaphore that is
  48712. known to be available. As semaphores are implemented by queues the
  48713. queue being empty is equivalent to the semaphore count being 0. */
  48714. if( prvIsQueueEmpty( pxQueue ) != pdFALSE )
  48715. 8014a4c: 6af8 ldr r0, [r7, #44] @ 0x2c
  48716. 8014a4e: f000 f999 bl 8014d84 <prvIsQueueEmpty>
  48717. 8014a52: 4603 mov r3, r0
  48718. 8014a54: 2b00 cmp r3, #0
  48719. 8014a56: f43f af4c beq.w 80148f2 <xQueueSemaphoreTake+0x86>
  48720. #if ( configUSE_MUTEXES == 1 )
  48721. {
  48722. /* xInheritanceOccurred could only have be set if
  48723. pxQueue->uxQueueType == queueQUEUE_IS_MUTEX so no need to
  48724. test the mutex type again to check it is actually a mutex. */
  48725. if( xInheritanceOccurred != pdFALSE )
  48726. 8014a5a: 6b3b ldr r3, [r7, #48] @ 0x30
  48727. 8014a5c: 2b00 cmp r3, #0
  48728. 8014a5e: d00d beq.n 8014a7c <xQueueSemaphoreTake+0x210>
  48729. {
  48730. taskENTER_CRITICAL();
  48731. 8014a60: f002 fbfa bl 8017258 <vPortEnterCritical>
  48732. /* This task blocking on the mutex caused another
  48733. task to inherit this task's priority. Now this task
  48734. has timed out the priority should be disinherited
  48735. again, but only as low as the next highest priority
  48736. task that is waiting for the same mutex. */
  48737. uxHighestWaitingPriority = prvGetDisinheritPriorityAfterTimeout( pxQueue );
  48738. 8014a64: 6af8 ldr r0, [r7, #44] @ 0x2c
  48739. 8014a66: f000 f893 bl 8014b90 <prvGetDisinheritPriorityAfterTimeout>
  48740. 8014a6a: 6278 str r0, [r7, #36] @ 0x24
  48741. vTaskPriorityDisinheritAfterTimeout( pxQueue->u.xSemaphore.xMutexHolder, uxHighestWaitingPriority );
  48742. 8014a6c: 6afb ldr r3, [r7, #44] @ 0x2c
  48743. 8014a6e: 689b ldr r3, [r3, #8]
  48744. 8014a70: 6a79 ldr r1, [r7, #36] @ 0x24
  48745. 8014a72: 4618 mov r0, r3
  48746. 8014a74: f001 fb64 bl 8016140 <vTaskPriorityDisinheritAfterTimeout>
  48747. }
  48748. taskEXIT_CRITICAL();
  48749. 8014a78: f002 fc20 bl 80172bc <vPortExitCritical>
  48750. }
  48751. }
  48752. #endif /* configUSE_MUTEXES */
  48753. traceQUEUE_RECEIVE_FAILED( pxQueue );
  48754. return errQUEUE_EMPTY;
  48755. 8014a7c: 2300 movs r3, #0
  48756. {
  48757. mtCOVERAGE_TEST_MARKER();
  48758. }
  48759. }
  48760. } /*lint -restore */
  48761. }
  48762. 8014a7e: 4618 mov r0, r3
  48763. 8014a80: 3738 adds r7, #56 @ 0x38
  48764. 8014a82: 46bd mov sp, r7
  48765. 8014a84: bd80 pop {r7, pc}
  48766. 8014a86: bf00 nop
  48767. 8014a88: e000ed04 .word 0xe000ed04
  48768. 08014a8c <xQueueReceiveFromISR>:
  48769. } /*lint -restore */
  48770. }
  48771. /*-----------------------------------------------------------*/
  48772. BaseType_t xQueueReceiveFromISR( QueueHandle_t xQueue, void * const pvBuffer, BaseType_t * const pxHigherPriorityTaskWoken )
  48773. {
  48774. 8014a8c: b580 push {r7, lr}
  48775. 8014a8e: b08e sub sp, #56 @ 0x38
  48776. 8014a90: af00 add r7, sp, #0
  48777. 8014a92: 60f8 str r0, [r7, #12]
  48778. 8014a94: 60b9 str r1, [r7, #8]
  48779. 8014a96: 607a str r2, [r7, #4]
  48780. BaseType_t xReturn;
  48781. UBaseType_t uxSavedInterruptStatus;
  48782. Queue_t * const pxQueue = xQueue;
  48783. 8014a98: 68fb ldr r3, [r7, #12]
  48784. 8014a9a: 633b str r3, [r7, #48] @ 0x30
  48785. configASSERT( pxQueue );
  48786. 8014a9c: 6b3b ldr r3, [r7, #48] @ 0x30
  48787. 8014a9e: 2b00 cmp r3, #0
  48788. 8014aa0: d10b bne.n 8014aba <xQueueReceiveFromISR+0x2e>
  48789. __asm volatile
  48790. 8014aa2: f04f 0350 mov.w r3, #80 @ 0x50
  48791. 8014aa6: f383 8811 msr BASEPRI, r3
  48792. 8014aaa: f3bf 8f6f isb sy
  48793. 8014aae: f3bf 8f4f dsb sy
  48794. 8014ab2: 623b str r3, [r7, #32]
  48795. }
  48796. 8014ab4: bf00 nop
  48797. 8014ab6: bf00 nop
  48798. 8014ab8: e7fd b.n 8014ab6 <xQueueReceiveFromISR+0x2a>
  48799. configASSERT( !( ( pvBuffer == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) );
  48800. 8014aba: 68bb ldr r3, [r7, #8]
  48801. 8014abc: 2b00 cmp r3, #0
  48802. 8014abe: d103 bne.n 8014ac8 <xQueueReceiveFromISR+0x3c>
  48803. 8014ac0: 6b3b ldr r3, [r7, #48] @ 0x30
  48804. 8014ac2: 6c1b ldr r3, [r3, #64] @ 0x40
  48805. 8014ac4: 2b00 cmp r3, #0
  48806. 8014ac6: d101 bne.n 8014acc <xQueueReceiveFromISR+0x40>
  48807. 8014ac8: 2301 movs r3, #1
  48808. 8014aca: e000 b.n 8014ace <xQueueReceiveFromISR+0x42>
  48809. 8014acc: 2300 movs r3, #0
  48810. 8014ace: 2b00 cmp r3, #0
  48811. 8014ad0: d10b bne.n 8014aea <xQueueReceiveFromISR+0x5e>
  48812. __asm volatile
  48813. 8014ad2: f04f 0350 mov.w r3, #80 @ 0x50
  48814. 8014ad6: f383 8811 msr BASEPRI, r3
  48815. 8014ada: f3bf 8f6f isb sy
  48816. 8014ade: f3bf 8f4f dsb sy
  48817. 8014ae2: 61fb str r3, [r7, #28]
  48818. }
  48819. 8014ae4: bf00 nop
  48820. 8014ae6: bf00 nop
  48821. 8014ae8: e7fd b.n 8014ae6 <xQueueReceiveFromISR+0x5a>
  48822. that have been assigned a priority at or (logically) below the maximum
  48823. system call interrupt priority. FreeRTOS maintains a separate interrupt
  48824. safe API to ensure interrupt entry is as fast and as simple as possible.
  48825. More information (albeit Cortex-M specific) is provided on the following
  48826. link: http://www.freertos.org/RTOS-Cortex-M3-M4.html */
  48827. portASSERT_IF_INTERRUPT_PRIORITY_INVALID();
  48828. 8014aea: f002 fc95 bl 8017418 <vPortValidateInterruptPriority>
  48829. __asm volatile
  48830. 8014aee: f3ef 8211 mrs r2, BASEPRI
  48831. 8014af2: f04f 0350 mov.w r3, #80 @ 0x50
  48832. 8014af6: f383 8811 msr BASEPRI, r3
  48833. 8014afa: f3bf 8f6f isb sy
  48834. 8014afe: f3bf 8f4f dsb sy
  48835. 8014b02: 61ba str r2, [r7, #24]
  48836. 8014b04: 617b str r3, [r7, #20]
  48837. return ulOriginalBASEPRI;
  48838. 8014b06: 69bb ldr r3, [r7, #24]
  48839. uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
  48840. 8014b08: 62fb str r3, [r7, #44] @ 0x2c
  48841. {
  48842. const UBaseType_t uxMessagesWaiting = pxQueue->uxMessagesWaiting;
  48843. 8014b0a: 6b3b ldr r3, [r7, #48] @ 0x30
  48844. 8014b0c: 6b9b ldr r3, [r3, #56] @ 0x38
  48845. 8014b0e: 62bb str r3, [r7, #40] @ 0x28
  48846. /* Cannot block in an ISR, so check there is data available. */
  48847. if( uxMessagesWaiting > ( UBaseType_t ) 0 )
  48848. 8014b10: 6abb ldr r3, [r7, #40] @ 0x28
  48849. 8014b12: 2b00 cmp r3, #0
  48850. 8014b14: d02f beq.n 8014b76 <xQueueReceiveFromISR+0xea>
  48851. {
  48852. const int8_t cRxLock = pxQueue->cRxLock;
  48853. 8014b16: 6b3b ldr r3, [r7, #48] @ 0x30
  48854. 8014b18: f893 3044 ldrb.w r3, [r3, #68] @ 0x44
  48855. 8014b1c: f887 3027 strb.w r3, [r7, #39] @ 0x27
  48856. traceQUEUE_RECEIVE_FROM_ISR( pxQueue );
  48857. prvCopyDataFromQueue( pxQueue, pvBuffer );
  48858. 8014b20: 68b9 ldr r1, [r7, #8]
  48859. 8014b22: 6b38 ldr r0, [r7, #48] @ 0x30
  48860. 8014b24: f000 f8b6 bl 8014c94 <prvCopyDataFromQueue>
  48861. pxQueue->uxMessagesWaiting = uxMessagesWaiting - ( UBaseType_t ) 1;
  48862. 8014b28: 6abb ldr r3, [r7, #40] @ 0x28
  48863. 8014b2a: 1e5a subs r2, r3, #1
  48864. 8014b2c: 6b3b ldr r3, [r7, #48] @ 0x30
  48865. 8014b2e: 639a str r2, [r3, #56] @ 0x38
  48866. /* If the queue is locked the event list will not be modified.
  48867. Instead update the lock count so the task that unlocks the queue
  48868. will know that an ISR has removed data while the queue was
  48869. locked. */
  48870. if( cRxLock == queueUNLOCKED )
  48871. 8014b30: f997 3027 ldrsb.w r3, [r7, #39] @ 0x27
  48872. 8014b34: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  48873. 8014b38: d112 bne.n 8014b60 <xQueueReceiveFromISR+0xd4>
  48874. {
  48875. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )
  48876. 8014b3a: 6b3b ldr r3, [r7, #48] @ 0x30
  48877. 8014b3c: 691b ldr r3, [r3, #16]
  48878. 8014b3e: 2b00 cmp r3, #0
  48879. 8014b40: d016 beq.n 8014b70 <xQueueReceiveFromISR+0xe4>
  48880. {
  48881. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE )
  48882. 8014b42: 6b3b ldr r3, [r7, #48] @ 0x30
  48883. 8014b44: 3310 adds r3, #16
  48884. 8014b46: 4618 mov r0, r3
  48885. 8014b48: f001 f806 bl 8015b58 <xTaskRemoveFromEventList>
  48886. 8014b4c: 4603 mov r3, r0
  48887. 8014b4e: 2b00 cmp r3, #0
  48888. 8014b50: d00e beq.n 8014b70 <xQueueReceiveFromISR+0xe4>
  48889. {
  48890. /* The task waiting has a higher priority than us so
  48891. force a context switch. */
  48892. if( pxHigherPriorityTaskWoken != NULL )
  48893. 8014b52: 687b ldr r3, [r7, #4]
  48894. 8014b54: 2b00 cmp r3, #0
  48895. 8014b56: d00b beq.n 8014b70 <xQueueReceiveFromISR+0xe4>
  48896. {
  48897. *pxHigherPriorityTaskWoken = pdTRUE;
  48898. 8014b58: 687b ldr r3, [r7, #4]
  48899. 8014b5a: 2201 movs r2, #1
  48900. 8014b5c: 601a str r2, [r3, #0]
  48901. 8014b5e: e007 b.n 8014b70 <xQueueReceiveFromISR+0xe4>
  48902. }
  48903. else
  48904. {
  48905. /* Increment the lock count so the task that unlocks the queue
  48906. knows that data was removed while it was locked. */
  48907. pxQueue->cRxLock = ( int8_t ) ( cRxLock + 1 );
  48908. 8014b60: f897 3027 ldrb.w r3, [r7, #39] @ 0x27
  48909. 8014b64: 3301 adds r3, #1
  48910. 8014b66: b2db uxtb r3, r3
  48911. 8014b68: b25a sxtb r2, r3
  48912. 8014b6a: 6b3b ldr r3, [r7, #48] @ 0x30
  48913. 8014b6c: f883 2044 strb.w r2, [r3, #68] @ 0x44
  48914. }
  48915. xReturn = pdPASS;
  48916. 8014b70: 2301 movs r3, #1
  48917. 8014b72: 637b str r3, [r7, #52] @ 0x34
  48918. 8014b74: e001 b.n 8014b7a <xQueueReceiveFromISR+0xee>
  48919. }
  48920. else
  48921. {
  48922. xReturn = pdFAIL;
  48923. 8014b76: 2300 movs r3, #0
  48924. 8014b78: 637b str r3, [r7, #52] @ 0x34
  48925. 8014b7a: 6afb ldr r3, [r7, #44] @ 0x2c
  48926. 8014b7c: 613b str r3, [r7, #16]
  48927. __asm volatile
  48928. 8014b7e: 693b ldr r3, [r7, #16]
  48929. 8014b80: f383 8811 msr BASEPRI, r3
  48930. }
  48931. 8014b84: bf00 nop
  48932. traceQUEUE_RECEIVE_FROM_ISR_FAILED( pxQueue );
  48933. }
  48934. }
  48935. portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus );
  48936. return xReturn;
  48937. 8014b86: 6b7b ldr r3, [r7, #52] @ 0x34
  48938. }
  48939. 8014b88: 4618 mov r0, r3
  48940. 8014b8a: 3738 adds r7, #56 @ 0x38
  48941. 8014b8c: 46bd mov sp, r7
  48942. 8014b8e: bd80 pop {r7, pc}
  48943. 08014b90 <prvGetDisinheritPriorityAfterTimeout>:
  48944. /*-----------------------------------------------------------*/
  48945. #if( configUSE_MUTEXES == 1 )
  48946. static UBaseType_t prvGetDisinheritPriorityAfterTimeout( const Queue_t * const pxQueue )
  48947. {
  48948. 8014b90: b480 push {r7}
  48949. 8014b92: b085 sub sp, #20
  48950. 8014b94: af00 add r7, sp, #0
  48951. 8014b96: 6078 str r0, [r7, #4]
  48952. priority, but the waiting task times out, then the holder should
  48953. disinherit the priority - but only down to the highest priority of any
  48954. other tasks that are waiting for the same mutex. For this purpose,
  48955. return the priority of the highest priority task that is waiting for the
  48956. mutex. */
  48957. if( listCURRENT_LIST_LENGTH( &( pxQueue->xTasksWaitingToReceive ) ) > 0U )
  48958. 8014b98: 687b ldr r3, [r7, #4]
  48959. 8014b9a: 6a5b ldr r3, [r3, #36] @ 0x24
  48960. 8014b9c: 2b00 cmp r3, #0
  48961. 8014b9e: d006 beq.n 8014bae <prvGetDisinheritPriorityAfterTimeout+0x1e>
  48962. {
  48963. uxHighestPriorityOfWaitingTasks = ( UBaseType_t ) configMAX_PRIORITIES - ( UBaseType_t ) listGET_ITEM_VALUE_OF_HEAD_ENTRY( &( pxQueue->xTasksWaitingToReceive ) );
  48964. 8014ba0: 687b ldr r3, [r7, #4]
  48965. 8014ba2: 6b1b ldr r3, [r3, #48] @ 0x30
  48966. 8014ba4: 681b ldr r3, [r3, #0]
  48967. 8014ba6: f1c3 0338 rsb r3, r3, #56 @ 0x38
  48968. 8014baa: 60fb str r3, [r7, #12]
  48969. 8014bac: e001 b.n 8014bb2 <prvGetDisinheritPriorityAfterTimeout+0x22>
  48970. }
  48971. else
  48972. {
  48973. uxHighestPriorityOfWaitingTasks = tskIDLE_PRIORITY;
  48974. 8014bae: 2300 movs r3, #0
  48975. 8014bb0: 60fb str r3, [r7, #12]
  48976. }
  48977. return uxHighestPriorityOfWaitingTasks;
  48978. 8014bb2: 68fb ldr r3, [r7, #12]
  48979. }
  48980. 8014bb4: 4618 mov r0, r3
  48981. 8014bb6: 3714 adds r7, #20
  48982. 8014bb8: 46bd mov sp, r7
  48983. 8014bba: f85d 7b04 ldr.w r7, [sp], #4
  48984. 8014bbe: 4770 bx lr
  48985. 08014bc0 <prvCopyDataToQueue>:
  48986. #endif /* configUSE_MUTEXES */
  48987. /*-----------------------------------------------------------*/
  48988. static BaseType_t prvCopyDataToQueue( Queue_t * const pxQueue, const void *pvItemToQueue, const BaseType_t xPosition )
  48989. {
  48990. 8014bc0: b580 push {r7, lr}
  48991. 8014bc2: b086 sub sp, #24
  48992. 8014bc4: af00 add r7, sp, #0
  48993. 8014bc6: 60f8 str r0, [r7, #12]
  48994. 8014bc8: 60b9 str r1, [r7, #8]
  48995. 8014bca: 607a str r2, [r7, #4]
  48996. BaseType_t xReturn = pdFALSE;
  48997. 8014bcc: 2300 movs r3, #0
  48998. 8014bce: 617b str r3, [r7, #20]
  48999. UBaseType_t uxMessagesWaiting;
  49000. /* This function is called from a critical section. */
  49001. uxMessagesWaiting = pxQueue->uxMessagesWaiting;
  49002. 8014bd0: 68fb ldr r3, [r7, #12]
  49003. 8014bd2: 6b9b ldr r3, [r3, #56] @ 0x38
  49004. 8014bd4: 613b str r3, [r7, #16]
  49005. if( pxQueue->uxItemSize == ( UBaseType_t ) 0 )
  49006. 8014bd6: 68fb ldr r3, [r7, #12]
  49007. 8014bd8: 6c1b ldr r3, [r3, #64] @ 0x40
  49008. 8014bda: 2b00 cmp r3, #0
  49009. 8014bdc: d10d bne.n 8014bfa <prvCopyDataToQueue+0x3a>
  49010. {
  49011. #if ( configUSE_MUTEXES == 1 )
  49012. {
  49013. if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX )
  49014. 8014bde: 68fb ldr r3, [r7, #12]
  49015. 8014be0: 681b ldr r3, [r3, #0]
  49016. 8014be2: 2b00 cmp r3, #0
  49017. 8014be4: d14d bne.n 8014c82 <prvCopyDataToQueue+0xc2>
  49018. {
  49019. /* The mutex is no longer being held. */
  49020. xReturn = xTaskPriorityDisinherit( pxQueue->u.xSemaphore.xMutexHolder );
  49021. 8014be6: 68fb ldr r3, [r7, #12]
  49022. 8014be8: 689b ldr r3, [r3, #8]
  49023. 8014bea: 4618 mov r0, r3
  49024. 8014bec: f001 fa38 bl 8016060 <xTaskPriorityDisinherit>
  49025. 8014bf0: 6178 str r0, [r7, #20]
  49026. pxQueue->u.xSemaphore.xMutexHolder = NULL;
  49027. 8014bf2: 68fb ldr r3, [r7, #12]
  49028. 8014bf4: 2200 movs r2, #0
  49029. 8014bf6: 609a str r2, [r3, #8]
  49030. 8014bf8: e043 b.n 8014c82 <prvCopyDataToQueue+0xc2>
  49031. mtCOVERAGE_TEST_MARKER();
  49032. }
  49033. }
  49034. #endif /* configUSE_MUTEXES */
  49035. }
  49036. else if( xPosition == queueSEND_TO_BACK )
  49037. 8014bfa: 687b ldr r3, [r7, #4]
  49038. 8014bfc: 2b00 cmp r3, #0
  49039. 8014bfe: d119 bne.n 8014c34 <prvCopyDataToQueue+0x74>
  49040. {
  49041. ( 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. */
  49042. 8014c00: 68fb ldr r3, [r7, #12]
  49043. 8014c02: 6858 ldr r0, [r3, #4]
  49044. 8014c04: 68fb ldr r3, [r7, #12]
  49045. 8014c06: 6c1b ldr r3, [r3, #64] @ 0x40
  49046. 8014c08: 461a mov r2, r3
  49047. 8014c0a: 68b9 ldr r1, [r7, #8]
  49048. 8014c0c: f003 f90f bl 8017e2e <memcpy>
  49049. 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. */
  49050. 8014c10: 68fb ldr r3, [r7, #12]
  49051. 8014c12: 685a ldr r2, [r3, #4]
  49052. 8014c14: 68fb ldr r3, [r7, #12]
  49053. 8014c16: 6c1b ldr r3, [r3, #64] @ 0x40
  49054. 8014c18: 441a add r2, r3
  49055. 8014c1a: 68fb ldr r3, [r7, #12]
  49056. 8014c1c: 605a str r2, [r3, #4]
  49057. if( pxQueue->pcWriteTo >= pxQueue->u.xQueue.pcTail ) /*lint !e946 MISRA exception justified as comparison of pointers is the cleanest solution. */
  49058. 8014c1e: 68fb ldr r3, [r7, #12]
  49059. 8014c20: 685a ldr r2, [r3, #4]
  49060. 8014c22: 68fb ldr r3, [r7, #12]
  49061. 8014c24: 689b ldr r3, [r3, #8]
  49062. 8014c26: 429a cmp r2, r3
  49063. 8014c28: d32b bcc.n 8014c82 <prvCopyDataToQueue+0xc2>
  49064. {
  49065. pxQueue->pcWriteTo = pxQueue->pcHead;
  49066. 8014c2a: 68fb ldr r3, [r7, #12]
  49067. 8014c2c: 681a ldr r2, [r3, #0]
  49068. 8014c2e: 68fb ldr r3, [r7, #12]
  49069. 8014c30: 605a str r2, [r3, #4]
  49070. 8014c32: e026 b.n 8014c82 <prvCopyDataToQueue+0xc2>
  49071. mtCOVERAGE_TEST_MARKER();
  49072. }
  49073. }
  49074. else
  49075. {
  49076. ( 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. */
  49077. 8014c34: 68fb ldr r3, [r7, #12]
  49078. 8014c36: 68d8 ldr r0, [r3, #12]
  49079. 8014c38: 68fb ldr r3, [r7, #12]
  49080. 8014c3a: 6c1b ldr r3, [r3, #64] @ 0x40
  49081. 8014c3c: 461a mov r2, r3
  49082. 8014c3e: 68b9 ldr r1, [r7, #8]
  49083. 8014c40: f003 f8f5 bl 8017e2e <memcpy>
  49084. pxQueue->u.xQueue.pcReadFrom -= pxQueue->uxItemSize;
  49085. 8014c44: 68fb ldr r3, [r7, #12]
  49086. 8014c46: 68da ldr r2, [r3, #12]
  49087. 8014c48: 68fb ldr r3, [r7, #12]
  49088. 8014c4a: 6c1b ldr r3, [r3, #64] @ 0x40
  49089. 8014c4c: 425b negs r3, r3
  49090. 8014c4e: 441a add r2, r3
  49091. 8014c50: 68fb ldr r3, [r7, #12]
  49092. 8014c52: 60da str r2, [r3, #12]
  49093. if( pxQueue->u.xQueue.pcReadFrom < pxQueue->pcHead ) /*lint !e946 MISRA exception justified as comparison of pointers is the cleanest solution. */
  49094. 8014c54: 68fb ldr r3, [r7, #12]
  49095. 8014c56: 68da ldr r2, [r3, #12]
  49096. 8014c58: 68fb ldr r3, [r7, #12]
  49097. 8014c5a: 681b ldr r3, [r3, #0]
  49098. 8014c5c: 429a cmp r2, r3
  49099. 8014c5e: d207 bcs.n 8014c70 <prvCopyDataToQueue+0xb0>
  49100. {
  49101. pxQueue->u.xQueue.pcReadFrom = ( pxQueue->u.xQueue.pcTail - pxQueue->uxItemSize );
  49102. 8014c60: 68fb ldr r3, [r7, #12]
  49103. 8014c62: 689a ldr r2, [r3, #8]
  49104. 8014c64: 68fb ldr r3, [r7, #12]
  49105. 8014c66: 6c1b ldr r3, [r3, #64] @ 0x40
  49106. 8014c68: 425b negs r3, r3
  49107. 8014c6a: 441a add r2, r3
  49108. 8014c6c: 68fb ldr r3, [r7, #12]
  49109. 8014c6e: 60da str r2, [r3, #12]
  49110. else
  49111. {
  49112. mtCOVERAGE_TEST_MARKER();
  49113. }
  49114. if( xPosition == queueOVERWRITE )
  49115. 8014c70: 687b ldr r3, [r7, #4]
  49116. 8014c72: 2b02 cmp r3, #2
  49117. 8014c74: d105 bne.n 8014c82 <prvCopyDataToQueue+0xc2>
  49118. {
  49119. if( uxMessagesWaiting > ( UBaseType_t ) 0 )
  49120. 8014c76: 693b ldr r3, [r7, #16]
  49121. 8014c78: 2b00 cmp r3, #0
  49122. 8014c7a: d002 beq.n 8014c82 <prvCopyDataToQueue+0xc2>
  49123. {
  49124. /* An item is not being added but overwritten, so subtract
  49125. one from the recorded number of items in the queue so when
  49126. one is added again below the number of recorded items remains
  49127. correct. */
  49128. --uxMessagesWaiting;
  49129. 8014c7c: 693b ldr r3, [r7, #16]
  49130. 8014c7e: 3b01 subs r3, #1
  49131. 8014c80: 613b str r3, [r7, #16]
  49132. {
  49133. mtCOVERAGE_TEST_MARKER();
  49134. }
  49135. }
  49136. pxQueue->uxMessagesWaiting = uxMessagesWaiting + ( UBaseType_t ) 1;
  49137. 8014c82: 693b ldr r3, [r7, #16]
  49138. 8014c84: 1c5a adds r2, r3, #1
  49139. 8014c86: 68fb ldr r3, [r7, #12]
  49140. 8014c88: 639a str r2, [r3, #56] @ 0x38
  49141. return xReturn;
  49142. 8014c8a: 697b ldr r3, [r7, #20]
  49143. }
  49144. 8014c8c: 4618 mov r0, r3
  49145. 8014c8e: 3718 adds r7, #24
  49146. 8014c90: 46bd mov sp, r7
  49147. 8014c92: bd80 pop {r7, pc}
  49148. 08014c94 <prvCopyDataFromQueue>:
  49149. /*-----------------------------------------------------------*/
  49150. static void prvCopyDataFromQueue( Queue_t * const pxQueue, void * const pvBuffer )
  49151. {
  49152. 8014c94: b580 push {r7, lr}
  49153. 8014c96: b082 sub sp, #8
  49154. 8014c98: af00 add r7, sp, #0
  49155. 8014c9a: 6078 str r0, [r7, #4]
  49156. 8014c9c: 6039 str r1, [r7, #0]
  49157. if( pxQueue->uxItemSize != ( UBaseType_t ) 0 )
  49158. 8014c9e: 687b ldr r3, [r7, #4]
  49159. 8014ca0: 6c1b ldr r3, [r3, #64] @ 0x40
  49160. 8014ca2: 2b00 cmp r3, #0
  49161. 8014ca4: d018 beq.n 8014cd8 <prvCopyDataFromQueue+0x44>
  49162. {
  49163. 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. */
  49164. 8014ca6: 687b ldr r3, [r7, #4]
  49165. 8014ca8: 68da ldr r2, [r3, #12]
  49166. 8014caa: 687b ldr r3, [r7, #4]
  49167. 8014cac: 6c1b ldr r3, [r3, #64] @ 0x40
  49168. 8014cae: 441a add r2, r3
  49169. 8014cb0: 687b ldr r3, [r7, #4]
  49170. 8014cb2: 60da str r2, [r3, #12]
  49171. if( pxQueue->u.xQueue.pcReadFrom >= pxQueue->u.xQueue.pcTail ) /*lint !e946 MISRA exception justified as use of the relational operator is the cleanest solutions. */
  49172. 8014cb4: 687b ldr r3, [r7, #4]
  49173. 8014cb6: 68da ldr r2, [r3, #12]
  49174. 8014cb8: 687b ldr r3, [r7, #4]
  49175. 8014cba: 689b ldr r3, [r3, #8]
  49176. 8014cbc: 429a cmp r2, r3
  49177. 8014cbe: d303 bcc.n 8014cc8 <prvCopyDataFromQueue+0x34>
  49178. {
  49179. pxQueue->u.xQueue.pcReadFrom = pxQueue->pcHead;
  49180. 8014cc0: 687b ldr r3, [r7, #4]
  49181. 8014cc2: 681a ldr r2, [r3, #0]
  49182. 8014cc4: 687b ldr r3, [r7, #4]
  49183. 8014cc6: 60da str r2, [r3, #12]
  49184. }
  49185. else
  49186. {
  49187. mtCOVERAGE_TEST_MARKER();
  49188. }
  49189. ( 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. */
  49190. 8014cc8: 687b ldr r3, [r7, #4]
  49191. 8014cca: 68d9 ldr r1, [r3, #12]
  49192. 8014ccc: 687b ldr r3, [r7, #4]
  49193. 8014cce: 6c1b ldr r3, [r3, #64] @ 0x40
  49194. 8014cd0: 461a mov r2, r3
  49195. 8014cd2: 6838 ldr r0, [r7, #0]
  49196. 8014cd4: f003 f8ab bl 8017e2e <memcpy>
  49197. }
  49198. }
  49199. 8014cd8: bf00 nop
  49200. 8014cda: 3708 adds r7, #8
  49201. 8014cdc: 46bd mov sp, r7
  49202. 8014cde: bd80 pop {r7, pc}
  49203. 08014ce0 <prvUnlockQueue>:
  49204. /*-----------------------------------------------------------*/
  49205. static void prvUnlockQueue( Queue_t * const pxQueue )
  49206. {
  49207. 8014ce0: b580 push {r7, lr}
  49208. 8014ce2: b084 sub sp, #16
  49209. 8014ce4: af00 add r7, sp, #0
  49210. 8014ce6: 6078 str r0, [r7, #4]
  49211. /* The lock counts contains the number of extra data items placed or
  49212. removed from the queue while the queue was locked. When a queue is
  49213. locked items can be added or removed, but the event lists cannot be
  49214. updated. */
  49215. taskENTER_CRITICAL();
  49216. 8014ce8: f002 fab6 bl 8017258 <vPortEnterCritical>
  49217. {
  49218. int8_t cTxLock = pxQueue->cTxLock;
  49219. 8014cec: 687b ldr r3, [r7, #4]
  49220. 8014cee: f893 3045 ldrb.w r3, [r3, #69] @ 0x45
  49221. 8014cf2: 73fb strb r3, [r7, #15]
  49222. /* See if data was added to the queue while it was locked. */
  49223. while( cTxLock > queueLOCKED_UNMODIFIED )
  49224. 8014cf4: e011 b.n 8014d1a <prvUnlockQueue+0x3a>
  49225. }
  49226. #else /* configUSE_QUEUE_SETS */
  49227. {
  49228. /* Tasks that are removed from the event list will get added to
  49229. the pending ready list as the scheduler is still suspended. */
  49230. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )
  49231. 8014cf6: 687b ldr r3, [r7, #4]
  49232. 8014cf8: 6a5b ldr r3, [r3, #36] @ 0x24
  49233. 8014cfa: 2b00 cmp r3, #0
  49234. 8014cfc: d012 beq.n 8014d24 <prvUnlockQueue+0x44>
  49235. {
  49236. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )
  49237. 8014cfe: 687b ldr r3, [r7, #4]
  49238. 8014d00: 3324 adds r3, #36 @ 0x24
  49239. 8014d02: 4618 mov r0, r3
  49240. 8014d04: f000 ff28 bl 8015b58 <xTaskRemoveFromEventList>
  49241. 8014d08: 4603 mov r3, r0
  49242. 8014d0a: 2b00 cmp r3, #0
  49243. 8014d0c: d001 beq.n 8014d12 <prvUnlockQueue+0x32>
  49244. {
  49245. /* The task waiting has a higher priority so record that
  49246. a context switch is required. */
  49247. vTaskMissedYield();
  49248. 8014d0e: f001 f829 bl 8015d64 <vTaskMissedYield>
  49249. break;
  49250. }
  49251. }
  49252. #endif /* configUSE_QUEUE_SETS */
  49253. --cTxLock;
  49254. 8014d12: 7bfb ldrb r3, [r7, #15]
  49255. 8014d14: 3b01 subs r3, #1
  49256. 8014d16: b2db uxtb r3, r3
  49257. 8014d18: 73fb strb r3, [r7, #15]
  49258. while( cTxLock > queueLOCKED_UNMODIFIED )
  49259. 8014d1a: f997 300f ldrsb.w r3, [r7, #15]
  49260. 8014d1e: 2b00 cmp r3, #0
  49261. 8014d20: dce9 bgt.n 8014cf6 <prvUnlockQueue+0x16>
  49262. 8014d22: e000 b.n 8014d26 <prvUnlockQueue+0x46>
  49263. break;
  49264. 8014d24: bf00 nop
  49265. }
  49266. pxQueue->cTxLock = queueUNLOCKED;
  49267. 8014d26: 687b ldr r3, [r7, #4]
  49268. 8014d28: 22ff movs r2, #255 @ 0xff
  49269. 8014d2a: f883 2045 strb.w r2, [r3, #69] @ 0x45
  49270. }
  49271. taskEXIT_CRITICAL();
  49272. 8014d2e: f002 fac5 bl 80172bc <vPortExitCritical>
  49273. /* Do the same for the Rx lock. */
  49274. taskENTER_CRITICAL();
  49275. 8014d32: f002 fa91 bl 8017258 <vPortEnterCritical>
  49276. {
  49277. int8_t cRxLock = pxQueue->cRxLock;
  49278. 8014d36: 687b ldr r3, [r7, #4]
  49279. 8014d38: f893 3044 ldrb.w r3, [r3, #68] @ 0x44
  49280. 8014d3c: 73bb strb r3, [r7, #14]
  49281. while( cRxLock > queueLOCKED_UNMODIFIED )
  49282. 8014d3e: e011 b.n 8014d64 <prvUnlockQueue+0x84>
  49283. {
  49284. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )
  49285. 8014d40: 687b ldr r3, [r7, #4]
  49286. 8014d42: 691b ldr r3, [r3, #16]
  49287. 8014d44: 2b00 cmp r3, #0
  49288. 8014d46: d012 beq.n 8014d6e <prvUnlockQueue+0x8e>
  49289. {
  49290. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE )
  49291. 8014d48: 687b ldr r3, [r7, #4]
  49292. 8014d4a: 3310 adds r3, #16
  49293. 8014d4c: 4618 mov r0, r3
  49294. 8014d4e: f000 ff03 bl 8015b58 <xTaskRemoveFromEventList>
  49295. 8014d52: 4603 mov r3, r0
  49296. 8014d54: 2b00 cmp r3, #0
  49297. 8014d56: d001 beq.n 8014d5c <prvUnlockQueue+0x7c>
  49298. {
  49299. vTaskMissedYield();
  49300. 8014d58: f001 f804 bl 8015d64 <vTaskMissedYield>
  49301. else
  49302. {
  49303. mtCOVERAGE_TEST_MARKER();
  49304. }
  49305. --cRxLock;
  49306. 8014d5c: 7bbb ldrb r3, [r7, #14]
  49307. 8014d5e: 3b01 subs r3, #1
  49308. 8014d60: b2db uxtb r3, r3
  49309. 8014d62: 73bb strb r3, [r7, #14]
  49310. while( cRxLock > queueLOCKED_UNMODIFIED )
  49311. 8014d64: f997 300e ldrsb.w r3, [r7, #14]
  49312. 8014d68: 2b00 cmp r3, #0
  49313. 8014d6a: dce9 bgt.n 8014d40 <prvUnlockQueue+0x60>
  49314. 8014d6c: e000 b.n 8014d70 <prvUnlockQueue+0x90>
  49315. }
  49316. else
  49317. {
  49318. break;
  49319. 8014d6e: bf00 nop
  49320. }
  49321. }
  49322. pxQueue->cRxLock = queueUNLOCKED;
  49323. 8014d70: 687b ldr r3, [r7, #4]
  49324. 8014d72: 22ff movs r2, #255 @ 0xff
  49325. 8014d74: f883 2044 strb.w r2, [r3, #68] @ 0x44
  49326. }
  49327. taskEXIT_CRITICAL();
  49328. 8014d78: f002 faa0 bl 80172bc <vPortExitCritical>
  49329. }
  49330. 8014d7c: bf00 nop
  49331. 8014d7e: 3710 adds r7, #16
  49332. 8014d80: 46bd mov sp, r7
  49333. 8014d82: bd80 pop {r7, pc}
  49334. 08014d84 <prvIsQueueEmpty>:
  49335. /*-----------------------------------------------------------*/
  49336. static BaseType_t prvIsQueueEmpty( const Queue_t *pxQueue )
  49337. {
  49338. 8014d84: b580 push {r7, lr}
  49339. 8014d86: b084 sub sp, #16
  49340. 8014d88: af00 add r7, sp, #0
  49341. 8014d8a: 6078 str r0, [r7, #4]
  49342. BaseType_t xReturn;
  49343. taskENTER_CRITICAL();
  49344. 8014d8c: f002 fa64 bl 8017258 <vPortEnterCritical>
  49345. {
  49346. if( pxQueue->uxMessagesWaiting == ( UBaseType_t ) 0 )
  49347. 8014d90: 687b ldr r3, [r7, #4]
  49348. 8014d92: 6b9b ldr r3, [r3, #56] @ 0x38
  49349. 8014d94: 2b00 cmp r3, #0
  49350. 8014d96: d102 bne.n 8014d9e <prvIsQueueEmpty+0x1a>
  49351. {
  49352. xReturn = pdTRUE;
  49353. 8014d98: 2301 movs r3, #1
  49354. 8014d9a: 60fb str r3, [r7, #12]
  49355. 8014d9c: e001 b.n 8014da2 <prvIsQueueEmpty+0x1e>
  49356. }
  49357. else
  49358. {
  49359. xReturn = pdFALSE;
  49360. 8014d9e: 2300 movs r3, #0
  49361. 8014da0: 60fb str r3, [r7, #12]
  49362. }
  49363. }
  49364. taskEXIT_CRITICAL();
  49365. 8014da2: f002 fa8b bl 80172bc <vPortExitCritical>
  49366. return xReturn;
  49367. 8014da6: 68fb ldr r3, [r7, #12]
  49368. }
  49369. 8014da8: 4618 mov r0, r3
  49370. 8014daa: 3710 adds r7, #16
  49371. 8014dac: 46bd mov sp, r7
  49372. 8014dae: bd80 pop {r7, pc}
  49373. 08014db0 <prvIsQueueFull>:
  49374. return xReturn;
  49375. } /*lint !e818 xQueue could not be pointer to const because it is a typedef. */
  49376. /*-----------------------------------------------------------*/
  49377. static BaseType_t prvIsQueueFull( const Queue_t *pxQueue )
  49378. {
  49379. 8014db0: b580 push {r7, lr}
  49380. 8014db2: b084 sub sp, #16
  49381. 8014db4: af00 add r7, sp, #0
  49382. 8014db6: 6078 str r0, [r7, #4]
  49383. BaseType_t xReturn;
  49384. taskENTER_CRITICAL();
  49385. 8014db8: f002 fa4e bl 8017258 <vPortEnterCritical>
  49386. {
  49387. if( pxQueue->uxMessagesWaiting == pxQueue->uxLength )
  49388. 8014dbc: 687b ldr r3, [r7, #4]
  49389. 8014dbe: 6b9a ldr r2, [r3, #56] @ 0x38
  49390. 8014dc0: 687b ldr r3, [r7, #4]
  49391. 8014dc2: 6bdb ldr r3, [r3, #60] @ 0x3c
  49392. 8014dc4: 429a cmp r2, r3
  49393. 8014dc6: d102 bne.n 8014dce <prvIsQueueFull+0x1e>
  49394. {
  49395. xReturn = pdTRUE;
  49396. 8014dc8: 2301 movs r3, #1
  49397. 8014dca: 60fb str r3, [r7, #12]
  49398. 8014dcc: e001 b.n 8014dd2 <prvIsQueueFull+0x22>
  49399. }
  49400. else
  49401. {
  49402. xReturn = pdFALSE;
  49403. 8014dce: 2300 movs r3, #0
  49404. 8014dd0: 60fb str r3, [r7, #12]
  49405. }
  49406. }
  49407. taskEXIT_CRITICAL();
  49408. 8014dd2: f002 fa73 bl 80172bc <vPortExitCritical>
  49409. return xReturn;
  49410. 8014dd6: 68fb ldr r3, [r7, #12]
  49411. }
  49412. 8014dd8: 4618 mov r0, r3
  49413. 8014dda: 3710 adds r7, #16
  49414. 8014ddc: 46bd mov sp, r7
  49415. 8014dde: bd80 pop {r7, pc}
  49416. 08014de0 <vQueueAddToRegistry>:
  49417. /*-----------------------------------------------------------*/
  49418. #if ( configQUEUE_REGISTRY_SIZE > 0 )
  49419. void vQueueAddToRegistry( QueueHandle_t xQueue, const char *pcQueueName ) /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
  49420. {
  49421. 8014de0: b480 push {r7}
  49422. 8014de2: b085 sub sp, #20
  49423. 8014de4: af00 add r7, sp, #0
  49424. 8014de6: 6078 str r0, [r7, #4]
  49425. 8014de8: 6039 str r1, [r7, #0]
  49426. UBaseType_t ux;
  49427. /* See if there is an empty space in the registry. A NULL name denotes
  49428. a free slot. */
  49429. for( ux = ( UBaseType_t ) 0U; ux < ( UBaseType_t ) configQUEUE_REGISTRY_SIZE; ux++ )
  49430. 8014dea: 2300 movs r3, #0
  49431. 8014dec: 60fb str r3, [r7, #12]
  49432. 8014dee: e014 b.n 8014e1a <vQueueAddToRegistry+0x3a>
  49433. {
  49434. if( xQueueRegistry[ ux ].pcQueueName == NULL )
  49435. 8014df0: 4a0f ldr r2, [pc, #60] @ (8014e30 <vQueueAddToRegistry+0x50>)
  49436. 8014df2: 68fb ldr r3, [r7, #12]
  49437. 8014df4: f852 3033 ldr.w r3, [r2, r3, lsl #3]
  49438. 8014df8: 2b00 cmp r3, #0
  49439. 8014dfa: d10b bne.n 8014e14 <vQueueAddToRegistry+0x34>
  49440. {
  49441. /* Store the information on this queue. */
  49442. xQueueRegistry[ ux ].pcQueueName = pcQueueName;
  49443. 8014dfc: 490c ldr r1, [pc, #48] @ (8014e30 <vQueueAddToRegistry+0x50>)
  49444. 8014dfe: 68fb ldr r3, [r7, #12]
  49445. 8014e00: 683a ldr r2, [r7, #0]
  49446. 8014e02: f841 2033 str.w r2, [r1, r3, lsl #3]
  49447. xQueueRegistry[ ux ].xHandle = xQueue;
  49448. 8014e06: 4a0a ldr r2, [pc, #40] @ (8014e30 <vQueueAddToRegistry+0x50>)
  49449. 8014e08: 68fb ldr r3, [r7, #12]
  49450. 8014e0a: 00db lsls r3, r3, #3
  49451. 8014e0c: 4413 add r3, r2
  49452. 8014e0e: 687a ldr r2, [r7, #4]
  49453. 8014e10: 605a str r2, [r3, #4]
  49454. traceQUEUE_REGISTRY_ADD( xQueue, pcQueueName );
  49455. break;
  49456. 8014e12: e006 b.n 8014e22 <vQueueAddToRegistry+0x42>
  49457. for( ux = ( UBaseType_t ) 0U; ux < ( UBaseType_t ) configQUEUE_REGISTRY_SIZE; ux++ )
  49458. 8014e14: 68fb ldr r3, [r7, #12]
  49459. 8014e16: 3301 adds r3, #1
  49460. 8014e18: 60fb str r3, [r7, #12]
  49461. 8014e1a: 68fb ldr r3, [r7, #12]
  49462. 8014e1c: 2b07 cmp r3, #7
  49463. 8014e1e: d9e7 bls.n 8014df0 <vQueueAddToRegistry+0x10>
  49464. else
  49465. {
  49466. mtCOVERAGE_TEST_MARKER();
  49467. }
  49468. }
  49469. }
  49470. 8014e20: bf00 nop
  49471. 8014e22: bf00 nop
  49472. 8014e24: 3714 adds r7, #20
  49473. 8014e26: 46bd mov sp, r7
  49474. 8014e28: f85d 7b04 ldr.w r7, [sp], #4
  49475. 8014e2c: 4770 bx lr
  49476. 8014e2e: bf00 nop
  49477. 8014e30: 240029d4 .word 0x240029d4
  49478. 08014e34 <vQueueWaitForMessageRestricted>:
  49479. /*-----------------------------------------------------------*/
  49480. #if ( configUSE_TIMERS == 1 )
  49481. void vQueueWaitForMessageRestricted( QueueHandle_t xQueue, TickType_t xTicksToWait, const BaseType_t xWaitIndefinitely )
  49482. {
  49483. 8014e34: b580 push {r7, lr}
  49484. 8014e36: b086 sub sp, #24
  49485. 8014e38: af00 add r7, sp, #0
  49486. 8014e3a: 60f8 str r0, [r7, #12]
  49487. 8014e3c: 60b9 str r1, [r7, #8]
  49488. 8014e3e: 607a str r2, [r7, #4]
  49489. Queue_t * const pxQueue = xQueue;
  49490. 8014e40: 68fb ldr r3, [r7, #12]
  49491. 8014e42: 617b str r3, [r7, #20]
  49492. will not actually cause the task to block, just place it on a blocked
  49493. list. It will not block until the scheduler is unlocked - at which
  49494. time a yield will be performed. If an item is added to the queue while
  49495. the queue is locked, and the calling task blocks on the queue, then the
  49496. calling task will be immediately unblocked when the queue is unlocked. */
  49497. prvLockQueue( pxQueue );
  49498. 8014e44: f002 fa08 bl 8017258 <vPortEnterCritical>
  49499. 8014e48: 697b ldr r3, [r7, #20]
  49500. 8014e4a: f893 3044 ldrb.w r3, [r3, #68] @ 0x44
  49501. 8014e4e: b25b sxtb r3, r3
  49502. 8014e50: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  49503. 8014e54: d103 bne.n 8014e5e <vQueueWaitForMessageRestricted+0x2a>
  49504. 8014e56: 697b ldr r3, [r7, #20]
  49505. 8014e58: 2200 movs r2, #0
  49506. 8014e5a: f883 2044 strb.w r2, [r3, #68] @ 0x44
  49507. 8014e5e: 697b ldr r3, [r7, #20]
  49508. 8014e60: f893 3045 ldrb.w r3, [r3, #69] @ 0x45
  49509. 8014e64: b25b sxtb r3, r3
  49510. 8014e66: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  49511. 8014e6a: d103 bne.n 8014e74 <vQueueWaitForMessageRestricted+0x40>
  49512. 8014e6c: 697b ldr r3, [r7, #20]
  49513. 8014e6e: 2200 movs r2, #0
  49514. 8014e70: f883 2045 strb.w r2, [r3, #69] @ 0x45
  49515. 8014e74: f002 fa22 bl 80172bc <vPortExitCritical>
  49516. if( pxQueue->uxMessagesWaiting == ( UBaseType_t ) 0U )
  49517. 8014e78: 697b ldr r3, [r7, #20]
  49518. 8014e7a: 6b9b ldr r3, [r3, #56] @ 0x38
  49519. 8014e7c: 2b00 cmp r3, #0
  49520. 8014e7e: d106 bne.n 8014e8e <vQueueWaitForMessageRestricted+0x5a>
  49521. {
  49522. /* There is nothing in the queue, block for the specified period. */
  49523. vTaskPlaceOnEventListRestricted( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait, xWaitIndefinitely );
  49524. 8014e80: 697b ldr r3, [r7, #20]
  49525. 8014e82: 3324 adds r3, #36 @ 0x24
  49526. 8014e84: 687a ldr r2, [r7, #4]
  49527. 8014e86: 68b9 ldr r1, [r7, #8]
  49528. 8014e88: 4618 mov r0, r3
  49529. 8014e8a: f000 fe39 bl 8015b00 <vTaskPlaceOnEventListRestricted>
  49530. }
  49531. else
  49532. {
  49533. mtCOVERAGE_TEST_MARKER();
  49534. }
  49535. prvUnlockQueue( pxQueue );
  49536. 8014e8e: 6978 ldr r0, [r7, #20]
  49537. 8014e90: f7ff ff26 bl 8014ce0 <prvUnlockQueue>
  49538. }
  49539. 8014e94: bf00 nop
  49540. 8014e96: 3718 adds r7, #24
  49541. 8014e98: 46bd mov sp, r7
  49542. 8014e9a: bd80 pop {r7, pc}
  49543. 08014e9c <xStreamBufferSpacesAvailable>:
  49544. return xReturn;
  49545. }
  49546. /*-----------------------------------------------------------*/
  49547. size_t xStreamBufferSpacesAvailable( StreamBufferHandle_t xStreamBuffer )
  49548. {
  49549. 8014e9c: b480 push {r7}
  49550. 8014e9e: b087 sub sp, #28
  49551. 8014ea0: af00 add r7, sp, #0
  49552. 8014ea2: 6078 str r0, [r7, #4]
  49553. const StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;
  49554. 8014ea4: 687b ldr r3, [r7, #4]
  49555. 8014ea6: 613b str r3, [r7, #16]
  49556. size_t xSpace;
  49557. configASSERT( pxStreamBuffer );
  49558. 8014ea8: 693b ldr r3, [r7, #16]
  49559. 8014eaa: 2b00 cmp r3, #0
  49560. 8014eac: d10b bne.n 8014ec6 <xStreamBufferSpacesAvailable+0x2a>
  49561. __asm volatile
  49562. 8014eae: f04f 0350 mov.w r3, #80 @ 0x50
  49563. 8014eb2: f383 8811 msr BASEPRI, r3
  49564. 8014eb6: f3bf 8f6f isb sy
  49565. 8014eba: f3bf 8f4f dsb sy
  49566. 8014ebe: 60fb str r3, [r7, #12]
  49567. }
  49568. 8014ec0: bf00 nop
  49569. 8014ec2: bf00 nop
  49570. 8014ec4: e7fd b.n 8014ec2 <xStreamBufferSpacesAvailable+0x26>
  49571. xSpace = pxStreamBuffer->xLength + pxStreamBuffer->xTail;
  49572. 8014ec6: 693b ldr r3, [r7, #16]
  49573. 8014ec8: 689a ldr r2, [r3, #8]
  49574. 8014eca: 693b ldr r3, [r7, #16]
  49575. 8014ecc: 681b ldr r3, [r3, #0]
  49576. 8014ece: 4413 add r3, r2
  49577. 8014ed0: 617b str r3, [r7, #20]
  49578. xSpace -= pxStreamBuffer->xHead;
  49579. 8014ed2: 693b ldr r3, [r7, #16]
  49580. 8014ed4: 685b ldr r3, [r3, #4]
  49581. 8014ed6: 697a ldr r2, [r7, #20]
  49582. 8014ed8: 1ad3 subs r3, r2, r3
  49583. 8014eda: 617b str r3, [r7, #20]
  49584. xSpace -= ( size_t ) 1;
  49585. 8014edc: 697b ldr r3, [r7, #20]
  49586. 8014ede: 3b01 subs r3, #1
  49587. 8014ee0: 617b str r3, [r7, #20]
  49588. if( xSpace >= pxStreamBuffer->xLength )
  49589. 8014ee2: 693b ldr r3, [r7, #16]
  49590. 8014ee4: 689b ldr r3, [r3, #8]
  49591. 8014ee6: 697a ldr r2, [r7, #20]
  49592. 8014ee8: 429a cmp r2, r3
  49593. 8014eea: d304 bcc.n 8014ef6 <xStreamBufferSpacesAvailable+0x5a>
  49594. {
  49595. xSpace -= pxStreamBuffer->xLength;
  49596. 8014eec: 693b ldr r3, [r7, #16]
  49597. 8014eee: 689b ldr r3, [r3, #8]
  49598. 8014ef0: 697a ldr r2, [r7, #20]
  49599. 8014ef2: 1ad3 subs r3, r2, r3
  49600. 8014ef4: 617b str r3, [r7, #20]
  49601. else
  49602. {
  49603. mtCOVERAGE_TEST_MARKER();
  49604. }
  49605. return xSpace;
  49606. 8014ef6: 697b ldr r3, [r7, #20]
  49607. }
  49608. 8014ef8: 4618 mov r0, r3
  49609. 8014efa: 371c adds r7, #28
  49610. 8014efc: 46bd mov sp, r7
  49611. 8014efe: f85d 7b04 ldr.w r7, [sp], #4
  49612. 8014f02: 4770 bx lr
  49613. 08014f04 <xStreamBufferSend>:
  49614. size_t xStreamBufferSend( StreamBufferHandle_t xStreamBuffer,
  49615. const void *pvTxData,
  49616. size_t xDataLengthBytes,
  49617. TickType_t xTicksToWait )
  49618. {
  49619. 8014f04: b580 push {r7, lr}
  49620. 8014f06: b090 sub sp, #64 @ 0x40
  49621. 8014f08: af02 add r7, sp, #8
  49622. 8014f0a: 60f8 str r0, [r7, #12]
  49623. 8014f0c: 60b9 str r1, [r7, #8]
  49624. 8014f0e: 607a str r2, [r7, #4]
  49625. 8014f10: 603b str r3, [r7, #0]
  49626. StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;
  49627. 8014f12: 68fb ldr r3, [r7, #12]
  49628. 8014f14: 62fb str r3, [r7, #44] @ 0x2c
  49629. size_t xReturn, xSpace = 0;
  49630. 8014f16: 2300 movs r3, #0
  49631. 8014f18: 637b str r3, [r7, #52] @ 0x34
  49632. size_t xRequiredSpace = xDataLengthBytes;
  49633. 8014f1a: 687b ldr r3, [r7, #4]
  49634. 8014f1c: 633b str r3, [r7, #48] @ 0x30
  49635. TimeOut_t xTimeOut;
  49636. configASSERT( pvTxData );
  49637. 8014f1e: 68bb ldr r3, [r7, #8]
  49638. 8014f20: 2b00 cmp r3, #0
  49639. 8014f22: d10b bne.n 8014f3c <xStreamBufferSend+0x38>
  49640. __asm volatile
  49641. 8014f24: f04f 0350 mov.w r3, #80 @ 0x50
  49642. 8014f28: f383 8811 msr BASEPRI, r3
  49643. 8014f2c: f3bf 8f6f isb sy
  49644. 8014f30: f3bf 8f4f dsb sy
  49645. 8014f34: 627b str r3, [r7, #36] @ 0x24
  49646. }
  49647. 8014f36: bf00 nop
  49648. 8014f38: bf00 nop
  49649. 8014f3a: e7fd b.n 8014f38 <xStreamBufferSend+0x34>
  49650. configASSERT( pxStreamBuffer );
  49651. 8014f3c: 6afb ldr r3, [r7, #44] @ 0x2c
  49652. 8014f3e: 2b00 cmp r3, #0
  49653. 8014f40: d10b bne.n 8014f5a <xStreamBufferSend+0x56>
  49654. __asm volatile
  49655. 8014f42: f04f 0350 mov.w r3, #80 @ 0x50
  49656. 8014f46: f383 8811 msr BASEPRI, r3
  49657. 8014f4a: f3bf 8f6f isb sy
  49658. 8014f4e: f3bf 8f4f dsb sy
  49659. 8014f52: 623b str r3, [r7, #32]
  49660. }
  49661. 8014f54: bf00 nop
  49662. 8014f56: bf00 nop
  49663. 8014f58: e7fd b.n 8014f56 <xStreamBufferSend+0x52>
  49664. /* This send function is used to write to both message buffers and stream
  49665. buffers. If this is a message buffer then the space needed must be
  49666. increased by the amount of bytes needed to store the length of the
  49667. message. */
  49668. if( ( pxStreamBuffer->ucFlags & sbFLAGS_IS_MESSAGE_BUFFER ) != ( uint8_t ) 0 )
  49669. 8014f5a: 6afb ldr r3, [r7, #44] @ 0x2c
  49670. 8014f5c: 7f1b ldrb r3, [r3, #28]
  49671. 8014f5e: f003 0301 and.w r3, r3, #1
  49672. 8014f62: 2b00 cmp r3, #0
  49673. 8014f64: d012 beq.n 8014f8c <xStreamBufferSend+0x88>
  49674. {
  49675. xRequiredSpace += sbBYTES_TO_STORE_MESSAGE_LENGTH;
  49676. 8014f66: 6b3b ldr r3, [r7, #48] @ 0x30
  49677. 8014f68: 3304 adds r3, #4
  49678. 8014f6a: 633b str r3, [r7, #48] @ 0x30
  49679. /* Overflow? */
  49680. configASSERT( xRequiredSpace > xDataLengthBytes );
  49681. 8014f6c: 6b3a ldr r2, [r7, #48] @ 0x30
  49682. 8014f6e: 687b ldr r3, [r7, #4]
  49683. 8014f70: 429a cmp r2, r3
  49684. 8014f72: d80b bhi.n 8014f8c <xStreamBufferSend+0x88>
  49685. __asm volatile
  49686. 8014f74: f04f 0350 mov.w r3, #80 @ 0x50
  49687. 8014f78: f383 8811 msr BASEPRI, r3
  49688. 8014f7c: f3bf 8f6f isb sy
  49689. 8014f80: f3bf 8f4f dsb sy
  49690. 8014f84: 61fb str r3, [r7, #28]
  49691. }
  49692. 8014f86: bf00 nop
  49693. 8014f88: bf00 nop
  49694. 8014f8a: e7fd b.n 8014f88 <xStreamBufferSend+0x84>
  49695. else
  49696. {
  49697. mtCOVERAGE_TEST_MARKER();
  49698. }
  49699. if( xTicksToWait != ( TickType_t ) 0 )
  49700. 8014f8c: 683b ldr r3, [r7, #0]
  49701. 8014f8e: 2b00 cmp r3, #0
  49702. 8014f90: d03f beq.n 8015012 <xStreamBufferSend+0x10e>
  49703. {
  49704. vTaskSetTimeOutState( &xTimeOut );
  49705. 8014f92: f107 0310 add.w r3, r7, #16
  49706. 8014f96: 4618 mov r0, r3
  49707. 8014f98: f000 fe42 bl 8015c20 <vTaskSetTimeOutState>
  49708. do
  49709. {
  49710. /* Wait until the required number of bytes are free in the message
  49711. buffer. */
  49712. taskENTER_CRITICAL();
  49713. 8014f9c: f002 f95c bl 8017258 <vPortEnterCritical>
  49714. {
  49715. xSpace = xStreamBufferSpacesAvailable( pxStreamBuffer );
  49716. 8014fa0: 6af8 ldr r0, [r7, #44] @ 0x2c
  49717. 8014fa2: f7ff ff7b bl 8014e9c <xStreamBufferSpacesAvailable>
  49718. 8014fa6: 6378 str r0, [r7, #52] @ 0x34
  49719. if( xSpace < xRequiredSpace )
  49720. 8014fa8: 6b7a ldr r2, [r7, #52] @ 0x34
  49721. 8014faa: 6b3b ldr r3, [r7, #48] @ 0x30
  49722. 8014fac: 429a cmp r2, r3
  49723. 8014fae: d218 bcs.n 8014fe2 <xStreamBufferSend+0xde>
  49724. {
  49725. /* Clear notification state as going to wait for space. */
  49726. ( void ) xTaskNotifyStateClear( NULL );
  49727. 8014fb0: 2000 movs r0, #0
  49728. 8014fb2: f001 fb65 bl 8016680 <xTaskNotifyStateClear>
  49729. /* Should only be one writer. */
  49730. configASSERT( pxStreamBuffer->xTaskWaitingToSend == NULL );
  49731. 8014fb6: 6afb ldr r3, [r7, #44] @ 0x2c
  49732. 8014fb8: 695b ldr r3, [r3, #20]
  49733. 8014fba: 2b00 cmp r3, #0
  49734. 8014fbc: d00b beq.n 8014fd6 <xStreamBufferSend+0xd2>
  49735. __asm volatile
  49736. 8014fbe: f04f 0350 mov.w r3, #80 @ 0x50
  49737. 8014fc2: f383 8811 msr BASEPRI, r3
  49738. 8014fc6: f3bf 8f6f isb sy
  49739. 8014fca: f3bf 8f4f dsb sy
  49740. 8014fce: 61bb str r3, [r7, #24]
  49741. }
  49742. 8014fd0: bf00 nop
  49743. 8014fd2: bf00 nop
  49744. 8014fd4: e7fd b.n 8014fd2 <xStreamBufferSend+0xce>
  49745. pxStreamBuffer->xTaskWaitingToSend = xTaskGetCurrentTaskHandle();
  49746. 8014fd6: f000 ffad bl 8015f34 <xTaskGetCurrentTaskHandle>
  49747. 8014fda: 4602 mov r2, r0
  49748. 8014fdc: 6afb ldr r3, [r7, #44] @ 0x2c
  49749. 8014fde: 615a str r2, [r3, #20]
  49750. 8014fe0: e002 b.n 8014fe8 <xStreamBufferSend+0xe4>
  49751. }
  49752. else
  49753. {
  49754. taskEXIT_CRITICAL();
  49755. 8014fe2: f002 f96b bl 80172bc <vPortExitCritical>
  49756. break;
  49757. 8014fe6: e014 b.n 8015012 <xStreamBufferSend+0x10e>
  49758. }
  49759. }
  49760. taskEXIT_CRITICAL();
  49761. 8014fe8: f002 f968 bl 80172bc <vPortExitCritical>
  49762. traceBLOCKING_ON_STREAM_BUFFER_SEND( xStreamBuffer );
  49763. ( void ) xTaskNotifyWait( ( uint32_t ) 0, ( uint32_t ) 0, NULL, xTicksToWait );
  49764. 8014fec: 683b ldr r3, [r7, #0]
  49765. 8014fee: 2200 movs r2, #0
  49766. 8014ff0: 2100 movs r1, #0
  49767. 8014ff2: 2000 movs r0, #0
  49768. 8014ff4: f001 f93c bl 8016270 <xTaskNotifyWait>
  49769. pxStreamBuffer->xTaskWaitingToSend = NULL;
  49770. 8014ff8: 6afb ldr r3, [r7, #44] @ 0x2c
  49771. 8014ffa: 2200 movs r2, #0
  49772. 8014ffc: 615a str r2, [r3, #20]
  49773. } while( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE );
  49774. 8014ffe: 463a mov r2, r7
  49775. 8015000: f107 0310 add.w r3, r7, #16
  49776. 8015004: 4611 mov r1, r2
  49777. 8015006: 4618 mov r0, r3
  49778. 8015008: f000 fe48 bl 8015c9c <xTaskCheckForTimeOut>
  49779. 801500c: 4603 mov r3, r0
  49780. 801500e: 2b00 cmp r3, #0
  49781. 8015010: d0c4 beq.n 8014f9c <xStreamBufferSend+0x98>
  49782. else
  49783. {
  49784. mtCOVERAGE_TEST_MARKER();
  49785. }
  49786. if( xSpace == ( size_t ) 0 )
  49787. 8015012: 6b7b ldr r3, [r7, #52] @ 0x34
  49788. 8015014: 2b00 cmp r3, #0
  49789. 8015016: d103 bne.n 8015020 <xStreamBufferSend+0x11c>
  49790. {
  49791. xSpace = xStreamBufferSpacesAvailable( pxStreamBuffer );
  49792. 8015018: 6af8 ldr r0, [r7, #44] @ 0x2c
  49793. 801501a: f7ff ff3f bl 8014e9c <xStreamBufferSpacesAvailable>
  49794. 801501e: 6378 str r0, [r7, #52] @ 0x34
  49795. else
  49796. {
  49797. mtCOVERAGE_TEST_MARKER();
  49798. }
  49799. xReturn = prvWriteMessageToBuffer( pxStreamBuffer, pvTxData, xDataLengthBytes, xSpace, xRequiredSpace );
  49800. 8015020: 6b3b ldr r3, [r7, #48] @ 0x30
  49801. 8015022: 9300 str r3, [sp, #0]
  49802. 8015024: 6b7b ldr r3, [r7, #52] @ 0x34
  49803. 8015026: 687a ldr r2, [r7, #4]
  49804. 8015028: 68b9 ldr r1, [r7, #8]
  49805. 801502a: 6af8 ldr r0, [r7, #44] @ 0x2c
  49806. 801502c: f000 f823 bl 8015076 <prvWriteMessageToBuffer>
  49807. 8015030: 62b8 str r0, [r7, #40] @ 0x28
  49808. if( xReturn > ( size_t ) 0 )
  49809. 8015032: 6abb ldr r3, [r7, #40] @ 0x28
  49810. 8015034: 2b00 cmp r3, #0
  49811. 8015036: d019 beq.n 801506c <xStreamBufferSend+0x168>
  49812. {
  49813. traceSTREAM_BUFFER_SEND( xStreamBuffer, xReturn );
  49814. /* Was a task waiting for the data? */
  49815. if( prvBytesInBuffer( pxStreamBuffer ) >= pxStreamBuffer->xTriggerLevelBytes )
  49816. 8015038: 6af8 ldr r0, [r7, #44] @ 0x2c
  49817. 801503a: f000 f8ce bl 80151da <prvBytesInBuffer>
  49818. 801503e: 4602 mov r2, r0
  49819. 8015040: 6afb ldr r3, [r7, #44] @ 0x2c
  49820. 8015042: 68db ldr r3, [r3, #12]
  49821. 8015044: 429a cmp r2, r3
  49822. 8015046: d311 bcc.n 801506c <xStreamBufferSend+0x168>
  49823. {
  49824. sbSEND_COMPLETED( pxStreamBuffer );
  49825. 8015048: f000 fb4a bl 80156e0 <vTaskSuspendAll>
  49826. 801504c: 6afb ldr r3, [r7, #44] @ 0x2c
  49827. 801504e: 691b ldr r3, [r3, #16]
  49828. 8015050: 2b00 cmp r3, #0
  49829. 8015052: d009 beq.n 8015068 <xStreamBufferSend+0x164>
  49830. 8015054: 6afb ldr r3, [r7, #44] @ 0x2c
  49831. 8015056: 6918 ldr r0, [r3, #16]
  49832. 8015058: 2300 movs r3, #0
  49833. 801505a: 2200 movs r2, #0
  49834. 801505c: 2100 movs r1, #0
  49835. 801505e: f001 f967 bl 8016330 <xTaskGenericNotify>
  49836. 8015062: 6afb ldr r3, [r7, #44] @ 0x2c
  49837. 8015064: 2200 movs r2, #0
  49838. 8015066: 611a str r2, [r3, #16]
  49839. 8015068: f000 fb48 bl 80156fc <xTaskResumeAll>
  49840. {
  49841. mtCOVERAGE_TEST_MARKER();
  49842. traceSTREAM_BUFFER_SEND_FAILED( xStreamBuffer );
  49843. }
  49844. return xReturn;
  49845. 801506c: 6abb ldr r3, [r7, #40] @ 0x28
  49846. }
  49847. 801506e: 4618 mov r0, r3
  49848. 8015070: 3738 adds r7, #56 @ 0x38
  49849. 8015072: 46bd mov sp, r7
  49850. 8015074: bd80 pop {r7, pc}
  49851. 08015076 <prvWriteMessageToBuffer>:
  49852. static size_t prvWriteMessageToBuffer( StreamBuffer_t * const pxStreamBuffer,
  49853. const void * pvTxData,
  49854. size_t xDataLengthBytes,
  49855. size_t xSpace,
  49856. size_t xRequiredSpace )
  49857. {
  49858. 8015076: b580 push {r7, lr}
  49859. 8015078: b086 sub sp, #24
  49860. 801507a: af00 add r7, sp, #0
  49861. 801507c: 60f8 str r0, [r7, #12]
  49862. 801507e: 60b9 str r1, [r7, #8]
  49863. 8015080: 607a str r2, [r7, #4]
  49864. 8015082: 603b str r3, [r7, #0]
  49865. BaseType_t xShouldWrite;
  49866. size_t xReturn;
  49867. if( xSpace == ( size_t ) 0 )
  49868. 8015084: 683b ldr r3, [r7, #0]
  49869. 8015086: 2b00 cmp r3, #0
  49870. 8015088: d102 bne.n 8015090 <prvWriteMessageToBuffer+0x1a>
  49871. {
  49872. /* Doesn't matter if this is a stream buffer or a message buffer, there
  49873. is no space to write. */
  49874. xShouldWrite = pdFALSE;
  49875. 801508a: 2300 movs r3, #0
  49876. 801508c: 617b str r3, [r7, #20]
  49877. 801508e: e01d b.n 80150cc <prvWriteMessageToBuffer+0x56>
  49878. }
  49879. else if( ( pxStreamBuffer->ucFlags & sbFLAGS_IS_MESSAGE_BUFFER ) == ( uint8_t ) 0 )
  49880. 8015090: 68fb ldr r3, [r7, #12]
  49881. 8015092: 7f1b ldrb r3, [r3, #28]
  49882. 8015094: f003 0301 and.w r3, r3, #1
  49883. 8015098: 2b00 cmp r3, #0
  49884. 801509a: d108 bne.n 80150ae <prvWriteMessageToBuffer+0x38>
  49885. {
  49886. /* This is a stream buffer, as opposed to a message buffer, so writing a
  49887. stream of bytes rather than discrete messages. Write as many bytes as
  49888. possible. */
  49889. xShouldWrite = pdTRUE;
  49890. 801509c: 2301 movs r3, #1
  49891. 801509e: 617b str r3, [r7, #20]
  49892. xDataLengthBytes = configMIN( xDataLengthBytes, xSpace );
  49893. 80150a0: 687a ldr r2, [r7, #4]
  49894. 80150a2: 683b ldr r3, [r7, #0]
  49895. 80150a4: 4293 cmp r3, r2
  49896. 80150a6: bf28 it cs
  49897. 80150a8: 4613 movcs r3, r2
  49898. 80150aa: 607b str r3, [r7, #4]
  49899. 80150ac: e00e b.n 80150cc <prvWriteMessageToBuffer+0x56>
  49900. }
  49901. else if( xSpace >= xRequiredSpace )
  49902. 80150ae: 683a ldr r2, [r7, #0]
  49903. 80150b0: 6a3b ldr r3, [r7, #32]
  49904. 80150b2: 429a cmp r2, r3
  49905. 80150b4: d308 bcc.n 80150c8 <prvWriteMessageToBuffer+0x52>
  49906. {
  49907. /* This is a message buffer, as opposed to a stream buffer, and there
  49908. is enough space to write both the message length and the message itself
  49909. into the buffer. Start by writing the length of the data, the data
  49910. itself will be written later in this function. */
  49911. xShouldWrite = pdTRUE;
  49912. 80150b6: 2301 movs r3, #1
  49913. 80150b8: 617b str r3, [r7, #20]
  49914. ( void ) prvWriteBytesToBuffer( pxStreamBuffer, ( const uint8_t * ) &( xDataLengthBytes ), sbBYTES_TO_STORE_MESSAGE_LENGTH );
  49915. 80150ba: 1d3b adds r3, r7, #4
  49916. 80150bc: 2204 movs r2, #4
  49917. 80150be: 4619 mov r1, r3
  49918. 80150c0: 68f8 ldr r0, [r7, #12]
  49919. 80150c2: f000 f815 bl 80150f0 <prvWriteBytesToBuffer>
  49920. 80150c6: e001 b.n 80150cc <prvWriteMessageToBuffer+0x56>
  49921. }
  49922. else
  49923. {
  49924. /* There is space available, but not enough space. */
  49925. xShouldWrite = pdFALSE;
  49926. 80150c8: 2300 movs r3, #0
  49927. 80150ca: 617b str r3, [r7, #20]
  49928. }
  49929. if( xShouldWrite != pdFALSE )
  49930. 80150cc: 697b ldr r3, [r7, #20]
  49931. 80150ce: 2b00 cmp r3, #0
  49932. 80150d0: d007 beq.n 80150e2 <prvWriteMessageToBuffer+0x6c>
  49933. {
  49934. /* Writes the data itself. */
  49935. xReturn = prvWriteBytesToBuffer( pxStreamBuffer, ( const uint8_t * ) pvTxData, xDataLengthBytes ); /*lint !e9079 Storage buffer is implemented as uint8_t for ease of sizing, alighment and access. */
  49936. 80150d2: 687b ldr r3, [r7, #4]
  49937. 80150d4: 461a mov r2, r3
  49938. 80150d6: 68b9 ldr r1, [r7, #8]
  49939. 80150d8: 68f8 ldr r0, [r7, #12]
  49940. 80150da: f000 f809 bl 80150f0 <prvWriteBytesToBuffer>
  49941. 80150de: 6138 str r0, [r7, #16]
  49942. 80150e0: e001 b.n 80150e6 <prvWriteMessageToBuffer+0x70>
  49943. }
  49944. else
  49945. {
  49946. xReturn = 0;
  49947. 80150e2: 2300 movs r3, #0
  49948. 80150e4: 613b str r3, [r7, #16]
  49949. }
  49950. return xReturn;
  49951. 80150e6: 693b ldr r3, [r7, #16]
  49952. }
  49953. 80150e8: 4618 mov r0, r3
  49954. 80150ea: 3718 adds r7, #24
  49955. 80150ec: 46bd mov sp, r7
  49956. 80150ee: bd80 pop {r7, pc}
  49957. 080150f0 <prvWriteBytesToBuffer>:
  49958. return xReturn;
  49959. }
  49960. /*-----------------------------------------------------------*/
  49961. static size_t prvWriteBytesToBuffer( StreamBuffer_t * const pxStreamBuffer, const uint8_t *pucData, size_t xCount )
  49962. {
  49963. 80150f0: b580 push {r7, lr}
  49964. 80150f2: b08a sub sp, #40 @ 0x28
  49965. 80150f4: af00 add r7, sp, #0
  49966. 80150f6: 60f8 str r0, [r7, #12]
  49967. 80150f8: 60b9 str r1, [r7, #8]
  49968. 80150fa: 607a str r2, [r7, #4]
  49969. size_t xNextHead, xFirstLength;
  49970. configASSERT( xCount > ( size_t ) 0 );
  49971. 80150fc: 687b ldr r3, [r7, #4]
  49972. 80150fe: 2b00 cmp r3, #0
  49973. 8015100: d10b bne.n 801511a <prvWriteBytesToBuffer+0x2a>
  49974. __asm volatile
  49975. 8015102: f04f 0350 mov.w r3, #80 @ 0x50
  49976. 8015106: f383 8811 msr BASEPRI, r3
  49977. 801510a: f3bf 8f6f isb sy
  49978. 801510e: f3bf 8f4f dsb sy
  49979. 8015112: 61fb str r3, [r7, #28]
  49980. }
  49981. 8015114: bf00 nop
  49982. 8015116: bf00 nop
  49983. 8015118: e7fd b.n 8015116 <prvWriteBytesToBuffer+0x26>
  49984. xNextHead = pxStreamBuffer->xHead;
  49985. 801511a: 68fb ldr r3, [r7, #12]
  49986. 801511c: 685b ldr r3, [r3, #4]
  49987. 801511e: 627b str r3, [r7, #36] @ 0x24
  49988. /* Calculate the number of bytes that can be added in the first write -
  49989. which may be less than the total number of bytes that need to be added if
  49990. the buffer will wrap back to the beginning. */
  49991. xFirstLength = configMIN( pxStreamBuffer->xLength - xNextHead, xCount );
  49992. 8015120: 68fb ldr r3, [r7, #12]
  49993. 8015122: 689a ldr r2, [r3, #8]
  49994. 8015124: 6a7b ldr r3, [r7, #36] @ 0x24
  49995. 8015126: 1ad3 subs r3, r2, r3
  49996. 8015128: 687a ldr r2, [r7, #4]
  49997. 801512a: 4293 cmp r3, r2
  49998. 801512c: bf28 it cs
  49999. 801512e: 4613 movcs r3, r2
  50000. 8015130: 623b str r3, [r7, #32]
  50001. /* Write as many bytes as can be written in the first write. */
  50002. configASSERT( ( xNextHead + xFirstLength ) <= pxStreamBuffer->xLength );
  50003. 8015132: 6a7a ldr r2, [r7, #36] @ 0x24
  50004. 8015134: 6a3b ldr r3, [r7, #32]
  50005. 8015136: 441a add r2, r3
  50006. 8015138: 68fb ldr r3, [r7, #12]
  50007. 801513a: 689b ldr r3, [r3, #8]
  50008. 801513c: 429a cmp r2, r3
  50009. 801513e: d90b bls.n 8015158 <prvWriteBytesToBuffer+0x68>
  50010. __asm volatile
  50011. 8015140: f04f 0350 mov.w r3, #80 @ 0x50
  50012. 8015144: f383 8811 msr BASEPRI, r3
  50013. 8015148: f3bf 8f6f isb sy
  50014. 801514c: f3bf 8f4f dsb sy
  50015. 8015150: 61bb str r3, [r7, #24]
  50016. }
  50017. 8015152: bf00 nop
  50018. 8015154: bf00 nop
  50019. 8015156: e7fd b.n 8015154 <prvWriteBytesToBuffer+0x64>
  50020. ( void ) memcpy( ( void* ) ( &( pxStreamBuffer->pucBuffer[ xNextHead ] ) ), ( const void * ) pucData, xFirstLength ); /*lint !e9087 memcpy() requires void *. */
  50021. 8015158: 68fb ldr r3, [r7, #12]
  50022. 801515a: 699a ldr r2, [r3, #24]
  50023. 801515c: 6a7b ldr r3, [r7, #36] @ 0x24
  50024. 801515e: 4413 add r3, r2
  50025. 8015160: 6a3a ldr r2, [r7, #32]
  50026. 8015162: 68b9 ldr r1, [r7, #8]
  50027. 8015164: 4618 mov r0, r3
  50028. 8015166: f002 fe62 bl 8017e2e <memcpy>
  50029. /* If the number of bytes written was less than the number that could be
  50030. written in the first write... */
  50031. if( xCount > xFirstLength )
  50032. 801516a: 687a ldr r2, [r7, #4]
  50033. 801516c: 6a3b ldr r3, [r7, #32]
  50034. 801516e: 429a cmp r2, r3
  50035. 8015170: d91d bls.n 80151ae <prvWriteBytesToBuffer+0xbe>
  50036. {
  50037. /* ...then write the remaining bytes to the start of the buffer. */
  50038. configASSERT( ( xCount - xFirstLength ) <= pxStreamBuffer->xLength );
  50039. 8015172: 687a ldr r2, [r7, #4]
  50040. 8015174: 6a3b ldr r3, [r7, #32]
  50041. 8015176: 1ad2 subs r2, r2, r3
  50042. 8015178: 68fb ldr r3, [r7, #12]
  50043. 801517a: 689b ldr r3, [r3, #8]
  50044. 801517c: 429a cmp r2, r3
  50045. 801517e: d90b bls.n 8015198 <prvWriteBytesToBuffer+0xa8>
  50046. __asm volatile
  50047. 8015180: f04f 0350 mov.w r3, #80 @ 0x50
  50048. 8015184: f383 8811 msr BASEPRI, r3
  50049. 8015188: f3bf 8f6f isb sy
  50050. 801518c: f3bf 8f4f dsb sy
  50051. 8015190: 617b str r3, [r7, #20]
  50052. }
  50053. 8015192: bf00 nop
  50054. 8015194: bf00 nop
  50055. 8015196: e7fd b.n 8015194 <prvWriteBytesToBuffer+0xa4>
  50056. ( void ) memcpy( ( void * ) pxStreamBuffer->pucBuffer, ( const void * ) &( pucData[ xFirstLength ] ), xCount - xFirstLength ); /*lint !e9087 memcpy() requires void *. */
  50057. 8015198: 68fb ldr r3, [r7, #12]
  50058. 801519a: 6998 ldr r0, [r3, #24]
  50059. 801519c: 68ba ldr r2, [r7, #8]
  50060. 801519e: 6a3b ldr r3, [r7, #32]
  50061. 80151a0: 18d1 adds r1, r2, r3
  50062. 80151a2: 687a ldr r2, [r7, #4]
  50063. 80151a4: 6a3b ldr r3, [r7, #32]
  50064. 80151a6: 1ad3 subs r3, r2, r3
  50065. 80151a8: 461a mov r2, r3
  50066. 80151aa: f002 fe40 bl 8017e2e <memcpy>
  50067. else
  50068. {
  50069. mtCOVERAGE_TEST_MARKER();
  50070. }
  50071. xNextHead += xCount;
  50072. 80151ae: 6a7a ldr r2, [r7, #36] @ 0x24
  50073. 80151b0: 687b ldr r3, [r7, #4]
  50074. 80151b2: 4413 add r3, r2
  50075. 80151b4: 627b str r3, [r7, #36] @ 0x24
  50076. if( xNextHead >= pxStreamBuffer->xLength )
  50077. 80151b6: 68fb ldr r3, [r7, #12]
  50078. 80151b8: 689b ldr r3, [r3, #8]
  50079. 80151ba: 6a7a ldr r2, [r7, #36] @ 0x24
  50080. 80151bc: 429a cmp r2, r3
  50081. 80151be: d304 bcc.n 80151ca <prvWriteBytesToBuffer+0xda>
  50082. {
  50083. xNextHead -= pxStreamBuffer->xLength;
  50084. 80151c0: 68fb ldr r3, [r7, #12]
  50085. 80151c2: 689b ldr r3, [r3, #8]
  50086. 80151c4: 6a7a ldr r2, [r7, #36] @ 0x24
  50087. 80151c6: 1ad3 subs r3, r2, r3
  50088. 80151c8: 627b str r3, [r7, #36] @ 0x24
  50089. else
  50090. {
  50091. mtCOVERAGE_TEST_MARKER();
  50092. }
  50093. pxStreamBuffer->xHead = xNextHead;
  50094. 80151ca: 68fb ldr r3, [r7, #12]
  50095. 80151cc: 6a7a ldr r2, [r7, #36] @ 0x24
  50096. 80151ce: 605a str r2, [r3, #4]
  50097. return xCount;
  50098. 80151d0: 687b ldr r3, [r7, #4]
  50099. }
  50100. 80151d2: 4618 mov r0, r3
  50101. 80151d4: 3728 adds r7, #40 @ 0x28
  50102. 80151d6: 46bd mov sp, r7
  50103. 80151d8: bd80 pop {r7, pc}
  50104. 080151da <prvBytesInBuffer>:
  50105. return xCount;
  50106. }
  50107. /*-----------------------------------------------------------*/
  50108. static size_t prvBytesInBuffer( const StreamBuffer_t * const pxStreamBuffer )
  50109. {
  50110. 80151da: b480 push {r7}
  50111. 80151dc: b085 sub sp, #20
  50112. 80151de: af00 add r7, sp, #0
  50113. 80151e0: 6078 str r0, [r7, #4]
  50114. /* Returns the distance between xTail and xHead. */
  50115. size_t xCount;
  50116. xCount = pxStreamBuffer->xLength + pxStreamBuffer->xHead;
  50117. 80151e2: 687b ldr r3, [r7, #4]
  50118. 80151e4: 689a ldr r2, [r3, #8]
  50119. 80151e6: 687b ldr r3, [r7, #4]
  50120. 80151e8: 685b ldr r3, [r3, #4]
  50121. 80151ea: 4413 add r3, r2
  50122. 80151ec: 60fb str r3, [r7, #12]
  50123. xCount -= pxStreamBuffer->xTail;
  50124. 80151ee: 687b ldr r3, [r7, #4]
  50125. 80151f0: 681b ldr r3, [r3, #0]
  50126. 80151f2: 68fa ldr r2, [r7, #12]
  50127. 80151f4: 1ad3 subs r3, r2, r3
  50128. 80151f6: 60fb str r3, [r7, #12]
  50129. if ( xCount >= pxStreamBuffer->xLength )
  50130. 80151f8: 687b ldr r3, [r7, #4]
  50131. 80151fa: 689b ldr r3, [r3, #8]
  50132. 80151fc: 68fa ldr r2, [r7, #12]
  50133. 80151fe: 429a cmp r2, r3
  50134. 8015200: d304 bcc.n 801520c <prvBytesInBuffer+0x32>
  50135. {
  50136. xCount -= pxStreamBuffer->xLength;
  50137. 8015202: 687b ldr r3, [r7, #4]
  50138. 8015204: 689b ldr r3, [r3, #8]
  50139. 8015206: 68fa ldr r2, [r7, #12]
  50140. 8015208: 1ad3 subs r3, r2, r3
  50141. 801520a: 60fb str r3, [r7, #12]
  50142. else
  50143. {
  50144. mtCOVERAGE_TEST_MARKER();
  50145. }
  50146. return xCount;
  50147. 801520c: 68fb ldr r3, [r7, #12]
  50148. }
  50149. 801520e: 4618 mov r0, r3
  50150. 8015210: 3714 adds r7, #20
  50151. 8015212: 46bd mov sp, r7
  50152. 8015214: f85d 7b04 ldr.w r7, [sp], #4
  50153. 8015218: 4770 bx lr
  50154. 0801521a <xTaskCreateStatic>:
  50155. const uint32_t ulStackDepth,
  50156. void * const pvParameters,
  50157. UBaseType_t uxPriority,
  50158. StackType_t * const puxStackBuffer,
  50159. StaticTask_t * const pxTaskBuffer )
  50160. {
  50161. 801521a: b580 push {r7, lr}
  50162. 801521c: b08e sub sp, #56 @ 0x38
  50163. 801521e: af04 add r7, sp, #16
  50164. 8015220: 60f8 str r0, [r7, #12]
  50165. 8015222: 60b9 str r1, [r7, #8]
  50166. 8015224: 607a str r2, [r7, #4]
  50167. 8015226: 603b str r3, [r7, #0]
  50168. TCB_t *pxNewTCB;
  50169. TaskHandle_t xReturn;
  50170. configASSERT( puxStackBuffer != NULL );
  50171. 8015228: 6b7b ldr r3, [r7, #52] @ 0x34
  50172. 801522a: 2b00 cmp r3, #0
  50173. 801522c: d10b bne.n 8015246 <xTaskCreateStatic+0x2c>
  50174. __asm volatile
  50175. 801522e: f04f 0350 mov.w r3, #80 @ 0x50
  50176. 8015232: f383 8811 msr BASEPRI, r3
  50177. 8015236: f3bf 8f6f isb sy
  50178. 801523a: f3bf 8f4f dsb sy
  50179. 801523e: 623b str r3, [r7, #32]
  50180. }
  50181. 8015240: bf00 nop
  50182. 8015242: bf00 nop
  50183. 8015244: e7fd b.n 8015242 <xTaskCreateStatic+0x28>
  50184. configASSERT( pxTaskBuffer != NULL );
  50185. 8015246: 6bbb ldr r3, [r7, #56] @ 0x38
  50186. 8015248: 2b00 cmp r3, #0
  50187. 801524a: d10b bne.n 8015264 <xTaskCreateStatic+0x4a>
  50188. __asm volatile
  50189. 801524c: f04f 0350 mov.w r3, #80 @ 0x50
  50190. 8015250: f383 8811 msr BASEPRI, r3
  50191. 8015254: f3bf 8f6f isb sy
  50192. 8015258: f3bf 8f4f dsb sy
  50193. 801525c: 61fb str r3, [r7, #28]
  50194. }
  50195. 801525e: bf00 nop
  50196. 8015260: bf00 nop
  50197. 8015262: e7fd b.n 8015260 <xTaskCreateStatic+0x46>
  50198. #if( configASSERT_DEFINED == 1 )
  50199. {
  50200. /* Sanity check that the size of the structure used to declare a
  50201. variable of type StaticTask_t equals the size of the real task
  50202. structure. */
  50203. volatile size_t xSize = sizeof( StaticTask_t );
  50204. 8015264: 23a8 movs r3, #168 @ 0xa8
  50205. 8015266: 613b str r3, [r7, #16]
  50206. configASSERT( xSize == sizeof( TCB_t ) );
  50207. 8015268: 693b ldr r3, [r7, #16]
  50208. 801526a: 2ba8 cmp r3, #168 @ 0xa8
  50209. 801526c: d00b beq.n 8015286 <xTaskCreateStatic+0x6c>
  50210. __asm volatile
  50211. 801526e: f04f 0350 mov.w r3, #80 @ 0x50
  50212. 8015272: f383 8811 msr BASEPRI, r3
  50213. 8015276: f3bf 8f6f isb sy
  50214. 801527a: f3bf 8f4f dsb sy
  50215. 801527e: 61bb str r3, [r7, #24]
  50216. }
  50217. 8015280: bf00 nop
  50218. 8015282: bf00 nop
  50219. 8015284: e7fd b.n 8015282 <xTaskCreateStatic+0x68>
  50220. ( void ) xSize; /* Prevent lint warning when configASSERT() is not used. */
  50221. 8015286: 693b ldr r3, [r7, #16]
  50222. }
  50223. #endif /* configASSERT_DEFINED */
  50224. if( ( pxTaskBuffer != NULL ) && ( puxStackBuffer != NULL ) )
  50225. 8015288: 6bbb ldr r3, [r7, #56] @ 0x38
  50226. 801528a: 2b00 cmp r3, #0
  50227. 801528c: d01e beq.n 80152cc <xTaskCreateStatic+0xb2>
  50228. 801528e: 6b7b ldr r3, [r7, #52] @ 0x34
  50229. 8015290: 2b00 cmp r3, #0
  50230. 8015292: d01b beq.n 80152cc <xTaskCreateStatic+0xb2>
  50231. {
  50232. /* The memory used for the task's TCB and stack are passed into this
  50233. function - use them. */
  50234. 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. */
  50235. 8015294: 6bbb ldr r3, [r7, #56] @ 0x38
  50236. 8015296: 627b str r3, [r7, #36] @ 0x24
  50237. pxNewTCB->pxStack = ( StackType_t * ) puxStackBuffer;
  50238. 8015298: 6a7b ldr r3, [r7, #36] @ 0x24
  50239. 801529a: 6b7a ldr r2, [r7, #52] @ 0x34
  50240. 801529c: 631a str r2, [r3, #48] @ 0x30
  50241. #if( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 ) /*lint !e731 !e9029 Macro has been consolidated for readability reasons. */
  50242. {
  50243. /* Tasks can be created statically or dynamically, so note this
  50244. task was created statically in case the task is later deleted. */
  50245. pxNewTCB->ucStaticallyAllocated = tskSTATICALLY_ALLOCATED_STACK_AND_TCB;
  50246. 801529e: 6a7b ldr r3, [r7, #36] @ 0x24
  50247. 80152a0: 2202 movs r2, #2
  50248. 80152a2: f883 20a5 strb.w r2, [r3, #165] @ 0xa5
  50249. }
  50250. #endif /* tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE */
  50251. prvInitialiseNewTask( pxTaskCode, pcName, ulStackDepth, pvParameters, uxPriority, &xReturn, pxNewTCB, NULL );
  50252. 80152a6: 2300 movs r3, #0
  50253. 80152a8: 9303 str r3, [sp, #12]
  50254. 80152aa: 6a7b ldr r3, [r7, #36] @ 0x24
  50255. 80152ac: 9302 str r3, [sp, #8]
  50256. 80152ae: f107 0314 add.w r3, r7, #20
  50257. 80152b2: 9301 str r3, [sp, #4]
  50258. 80152b4: 6b3b ldr r3, [r7, #48] @ 0x30
  50259. 80152b6: 9300 str r3, [sp, #0]
  50260. 80152b8: 683b ldr r3, [r7, #0]
  50261. 80152ba: 687a ldr r2, [r7, #4]
  50262. 80152bc: 68b9 ldr r1, [r7, #8]
  50263. 80152be: 68f8 ldr r0, [r7, #12]
  50264. 80152c0: f000 f850 bl 8015364 <prvInitialiseNewTask>
  50265. prvAddNewTaskToReadyList( pxNewTCB );
  50266. 80152c4: 6a78 ldr r0, [r7, #36] @ 0x24
  50267. 80152c6: f000 f8f5 bl 80154b4 <prvAddNewTaskToReadyList>
  50268. 80152ca: e001 b.n 80152d0 <xTaskCreateStatic+0xb6>
  50269. }
  50270. else
  50271. {
  50272. xReturn = NULL;
  50273. 80152cc: 2300 movs r3, #0
  50274. 80152ce: 617b str r3, [r7, #20]
  50275. }
  50276. return xReturn;
  50277. 80152d0: 697b ldr r3, [r7, #20]
  50278. }
  50279. 80152d2: 4618 mov r0, r3
  50280. 80152d4: 3728 adds r7, #40 @ 0x28
  50281. 80152d6: 46bd mov sp, r7
  50282. 80152d8: bd80 pop {r7, pc}
  50283. 080152da <xTaskCreate>:
  50284. const char * const pcName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
  50285. const configSTACK_DEPTH_TYPE usStackDepth,
  50286. void * const pvParameters,
  50287. UBaseType_t uxPriority,
  50288. TaskHandle_t * const pxCreatedTask )
  50289. {
  50290. 80152da: b580 push {r7, lr}
  50291. 80152dc: b08c sub sp, #48 @ 0x30
  50292. 80152de: af04 add r7, sp, #16
  50293. 80152e0: 60f8 str r0, [r7, #12]
  50294. 80152e2: 60b9 str r1, [r7, #8]
  50295. 80152e4: 603b str r3, [r7, #0]
  50296. 80152e6: 4613 mov r3, r2
  50297. 80152e8: 80fb strh r3, [r7, #6]
  50298. #else /* portSTACK_GROWTH */
  50299. {
  50300. StackType_t *pxStack;
  50301. /* Allocate space for the stack used by the task being created. */
  50302. 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. */
  50303. 80152ea: 88fb ldrh r3, [r7, #6]
  50304. 80152ec: 009b lsls r3, r3, #2
  50305. 80152ee: 4618 mov r0, r3
  50306. 80152f0: f002 f8d4 bl 801749c <pvPortMalloc>
  50307. 80152f4: 6178 str r0, [r7, #20]
  50308. if( pxStack != NULL )
  50309. 80152f6: 697b ldr r3, [r7, #20]
  50310. 80152f8: 2b00 cmp r3, #0
  50311. 80152fa: d00e beq.n 801531a <xTaskCreate+0x40>
  50312. {
  50313. /* Allocate space for the TCB. */
  50314. 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. */
  50315. 80152fc: 20a8 movs r0, #168 @ 0xa8
  50316. 80152fe: f002 f8cd bl 801749c <pvPortMalloc>
  50317. 8015302: 61f8 str r0, [r7, #28]
  50318. if( pxNewTCB != NULL )
  50319. 8015304: 69fb ldr r3, [r7, #28]
  50320. 8015306: 2b00 cmp r3, #0
  50321. 8015308: d003 beq.n 8015312 <xTaskCreate+0x38>
  50322. {
  50323. /* Store the stack location in the TCB. */
  50324. pxNewTCB->pxStack = pxStack;
  50325. 801530a: 69fb ldr r3, [r7, #28]
  50326. 801530c: 697a ldr r2, [r7, #20]
  50327. 801530e: 631a str r2, [r3, #48] @ 0x30
  50328. 8015310: e005 b.n 801531e <xTaskCreate+0x44>
  50329. }
  50330. else
  50331. {
  50332. /* The stack cannot be used as the TCB was not created. Free
  50333. it again. */
  50334. vPortFree( pxStack );
  50335. 8015312: 6978 ldr r0, [r7, #20]
  50336. 8015314: f002 f990 bl 8017638 <vPortFree>
  50337. 8015318: e001 b.n 801531e <xTaskCreate+0x44>
  50338. }
  50339. }
  50340. else
  50341. {
  50342. pxNewTCB = NULL;
  50343. 801531a: 2300 movs r3, #0
  50344. 801531c: 61fb str r3, [r7, #28]
  50345. }
  50346. }
  50347. #endif /* portSTACK_GROWTH */
  50348. if( pxNewTCB != NULL )
  50349. 801531e: 69fb ldr r3, [r7, #28]
  50350. 8015320: 2b00 cmp r3, #0
  50351. 8015322: d017 beq.n 8015354 <xTaskCreate+0x7a>
  50352. {
  50353. #if( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 ) /*lint !e9029 !e731 Macro has been consolidated for readability reasons. */
  50354. {
  50355. /* Tasks can be created statically or dynamically, so note this
  50356. task was created dynamically in case it is later deleted. */
  50357. pxNewTCB->ucStaticallyAllocated = tskDYNAMICALLY_ALLOCATED_STACK_AND_TCB;
  50358. 8015324: 69fb ldr r3, [r7, #28]
  50359. 8015326: 2200 movs r2, #0
  50360. 8015328: f883 20a5 strb.w r2, [r3, #165] @ 0xa5
  50361. }
  50362. #endif /* tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE */
  50363. prvInitialiseNewTask( pxTaskCode, pcName, ( uint32_t ) usStackDepth, pvParameters, uxPriority, pxCreatedTask, pxNewTCB, NULL );
  50364. 801532c: 88fa ldrh r2, [r7, #6]
  50365. 801532e: 2300 movs r3, #0
  50366. 8015330: 9303 str r3, [sp, #12]
  50367. 8015332: 69fb ldr r3, [r7, #28]
  50368. 8015334: 9302 str r3, [sp, #8]
  50369. 8015336: 6afb ldr r3, [r7, #44] @ 0x2c
  50370. 8015338: 9301 str r3, [sp, #4]
  50371. 801533a: 6abb ldr r3, [r7, #40] @ 0x28
  50372. 801533c: 9300 str r3, [sp, #0]
  50373. 801533e: 683b ldr r3, [r7, #0]
  50374. 8015340: 68b9 ldr r1, [r7, #8]
  50375. 8015342: 68f8 ldr r0, [r7, #12]
  50376. 8015344: f000 f80e bl 8015364 <prvInitialiseNewTask>
  50377. prvAddNewTaskToReadyList( pxNewTCB );
  50378. 8015348: 69f8 ldr r0, [r7, #28]
  50379. 801534a: f000 f8b3 bl 80154b4 <prvAddNewTaskToReadyList>
  50380. xReturn = pdPASS;
  50381. 801534e: 2301 movs r3, #1
  50382. 8015350: 61bb str r3, [r7, #24]
  50383. 8015352: e002 b.n 801535a <xTaskCreate+0x80>
  50384. }
  50385. else
  50386. {
  50387. xReturn = errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY;
  50388. 8015354: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  50389. 8015358: 61bb str r3, [r7, #24]
  50390. }
  50391. return xReturn;
  50392. 801535a: 69bb ldr r3, [r7, #24]
  50393. }
  50394. 801535c: 4618 mov r0, r3
  50395. 801535e: 3720 adds r7, #32
  50396. 8015360: 46bd mov sp, r7
  50397. 8015362: bd80 pop {r7, pc}
  50398. 08015364 <prvInitialiseNewTask>:
  50399. void * const pvParameters,
  50400. UBaseType_t uxPriority,
  50401. TaskHandle_t * const pxCreatedTask,
  50402. TCB_t *pxNewTCB,
  50403. const MemoryRegion_t * const xRegions )
  50404. {
  50405. 8015364: b580 push {r7, lr}
  50406. 8015366: b088 sub sp, #32
  50407. 8015368: af00 add r7, sp, #0
  50408. 801536a: 60f8 str r0, [r7, #12]
  50409. 801536c: 60b9 str r1, [r7, #8]
  50410. 801536e: 607a str r2, [r7, #4]
  50411. 8015370: 603b str r3, [r7, #0]
  50412. /* Avoid dependency on memset() if it is not required. */
  50413. #if( tskSET_NEW_STACKS_TO_KNOWN_VALUE == 1 )
  50414. {
  50415. /* Fill the stack with a known value to assist debugging. */
  50416. ( void ) memset( pxNewTCB->pxStack, ( int ) tskSTACK_FILL_BYTE, ( size_t ) ulStackDepth * sizeof( StackType_t ) );
  50417. 8015372: 6b3b ldr r3, [r7, #48] @ 0x30
  50418. 8015374: 6b18 ldr r0, [r3, #48] @ 0x30
  50419. 8015376: 687b ldr r3, [r7, #4]
  50420. 8015378: 009b lsls r3, r3, #2
  50421. 801537a: 461a mov r2, r3
  50422. 801537c: 21a5 movs r1, #165 @ 0xa5
  50423. 801537e: f002 fc85 bl 8017c8c <memset>
  50424. grows from high memory to low (as per the 80x86) or vice versa.
  50425. portSTACK_GROWTH is used to make the result positive or negative as required
  50426. by the port. */
  50427. #if( portSTACK_GROWTH < 0 )
  50428. {
  50429. pxTopOfStack = &( pxNewTCB->pxStack[ ulStackDepth - ( uint32_t ) 1 ] );
  50430. 8015382: 6b3b ldr r3, [r7, #48] @ 0x30
  50431. 8015384: 6b1a ldr r2, [r3, #48] @ 0x30
  50432. 8015386: 6879 ldr r1, [r7, #4]
  50433. 8015388: f06f 4340 mvn.w r3, #3221225472 @ 0xc0000000
  50434. 801538c: 440b add r3, r1
  50435. 801538e: 009b lsls r3, r3, #2
  50436. 8015390: 4413 add r3, r2
  50437. 8015392: 61bb str r3, [r7, #24]
  50438. 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(). */
  50439. 8015394: 69bb ldr r3, [r7, #24]
  50440. 8015396: f023 0307 bic.w r3, r3, #7
  50441. 801539a: 61bb str r3, [r7, #24]
  50442. /* Check the alignment of the calculated top of stack is correct. */
  50443. configASSERT( ( ( ( portPOINTER_SIZE_TYPE ) pxTopOfStack & ( portPOINTER_SIZE_TYPE ) portBYTE_ALIGNMENT_MASK ) == 0UL ) );
  50444. 801539c: 69bb ldr r3, [r7, #24]
  50445. 801539e: f003 0307 and.w r3, r3, #7
  50446. 80153a2: 2b00 cmp r3, #0
  50447. 80153a4: d00b beq.n 80153be <prvInitialiseNewTask+0x5a>
  50448. __asm volatile
  50449. 80153a6: f04f 0350 mov.w r3, #80 @ 0x50
  50450. 80153aa: f383 8811 msr BASEPRI, r3
  50451. 80153ae: f3bf 8f6f isb sy
  50452. 80153b2: f3bf 8f4f dsb sy
  50453. 80153b6: 617b str r3, [r7, #20]
  50454. }
  50455. 80153b8: bf00 nop
  50456. 80153ba: bf00 nop
  50457. 80153bc: e7fd b.n 80153ba <prvInitialiseNewTask+0x56>
  50458. pxNewTCB->pxEndOfStack = pxNewTCB->pxStack + ( ulStackDepth - ( uint32_t ) 1 );
  50459. }
  50460. #endif /* portSTACK_GROWTH */
  50461. /* Store the task name in the TCB. */
  50462. if( pcName != NULL )
  50463. 80153be: 68bb ldr r3, [r7, #8]
  50464. 80153c0: 2b00 cmp r3, #0
  50465. 80153c2: d01f beq.n 8015404 <prvInitialiseNewTask+0xa0>
  50466. {
  50467. for( x = ( UBaseType_t ) 0; x < ( UBaseType_t ) configMAX_TASK_NAME_LEN; x++ )
  50468. 80153c4: 2300 movs r3, #0
  50469. 80153c6: 61fb str r3, [r7, #28]
  50470. 80153c8: e012 b.n 80153f0 <prvInitialiseNewTask+0x8c>
  50471. {
  50472. pxNewTCB->pcTaskName[ x ] = pcName[ x ];
  50473. 80153ca: 68ba ldr r2, [r7, #8]
  50474. 80153cc: 69fb ldr r3, [r7, #28]
  50475. 80153ce: 4413 add r3, r2
  50476. 80153d0: 7819 ldrb r1, [r3, #0]
  50477. 80153d2: 6b3a ldr r2, [r7, #48] @ 0x30
  50478. 80153d4: 69fb ldr r3, [r7, #28]
  50479. 80153d6: 4413 add r3, r2
  50480. 80153d8: 3334 adds r3, #52 @ 0x34
  50481. 80153da: 460a mov r2, r1
  50482. 80153dc: 701a strb r2, [r3, #0]
  50483. /* Don't copy all configMAX_TASK_NAME_LEN if the string is shorter than
  50484. configMAX_TASK_NAME_LEN characters just in case the memory after the
  50485. string is not accessible (extremely unlikely). */
  50486. if( pcName[ x ] == ( char ) 0x00 )
  50487. 80153de: 68ba ldr r2, [r7, #8]
  50488. 80153e0: 69fb ldr r3, [r7, #28]
  50489. 80153e2: 4413 add r3, r2
  50490. 80153e4: 781b ldrb r3, [r3, #0]
  50491. 80153e6: 2b00 cmp r3, #0
  50492. 80153e8: d006 beq.n 80153f8 <prvInitialiseNewTask+0x94>
  50493. for( x = ( UBaseType_t ) 0; x < ( UBaseType_t ) configMAX_TASK_NAME_LEN; x++ )
  50494. 80153ea: 69fb ldr r3, [r7, #28]
  50495. 80153ec: 3301 adds r3, #1
  50496. 80153ee: 61fb str r3, [r7, #28]
  50497. 80153f0: 69fb ldr r3, [r7, #28]
  50498. 80153f2: 2b0f cmp r3, #15
  50499. 80153f4: d9e9 bls.n 80153ca <prvInitialiseNewTask+0x66>
  50500. 80153f6: e000 b.n 80153fa <prvInitialiseNewTask+0x96>
  50501. {
  50502. break;
  50503. 80153f8: bf00 nop
  50504. }
  50505. }
  50506. /* Ensure the name string is terminated in the case that the string length
  50507. was greater or equal to configMAX_TASK_NAME_LEN. */
  50508. pxNewTCB->pcTaskName[ configMAX_TASK_NAME_LEN - 1 ] = '\0';
  50509. 80153fa: 6b3b ldr r3, [r7, #48] @ 0x30
  50510. 80153fc: 2200 movs r2, #0
  50511. 80153fe: f883 2043 strb.w r2, [r3, #67] @ 0x43
  50512. 8015402: e003 b.n 801540c <prvInitialiseNewTask+0xa8>
  50513. }
  50514. else
  50515. {
  50516. /* The task has not been given a name, so just ensure there is a NULL
  50517. terminator when it is read out. */
  50518. pxNewTCB->pcTaskName[ 0 ] = 0x00;
  50519. 8015404: 6b3b ldr r3, [r7, #48] @ 0x30
  50520. 8015406: 2200 movs r2, #0
  50521. 8015408: f883 2034 strb.w r2, [r3, #52] @ 0x34
  50522. }
  50523. /* This is used as an array index so must ensure it's not too large. First
  50524. remove the privilege bit if one is present. */
  50525. if( uxPriority >= ( UBaseType_t ) configMAX_PRIORITIES )
  50526. 801540c: 6abb ldr r3, [r7, #40] @ 0x28
  50527. 801540e: 2b37 cmp r3, #55 @ 0x37
  50528. 8015410: d901 bls.n 8015416 <prvInitialiseNewTask+0xb2>
  50529. {
  50530. uxPriority = ( UBaseType_t ) configMAX_PRIORITIES - ( UBaseType_t ) 1U;
  50531. 8015412: 2337 movs r3, #55 @ 0x37
  50532. 8015414: 62bb str r3, [r7, #40] @ 0x28
  50533. else
  50534. {
  50535. mtCOVERAGE_TEST_MARKER();
  50536. }
  50537. pxNewTCB->uxPriority = uxPriority;
  50538. 8015416: 6b3b ldr r3, [r7, #48] @ 0x30
  50539. 8015418: 6aba ldr r2, [r7, #40] @ 0x28
  50540. 801541a: 62da str r2, [r3, #44] @ 0x2c
  50541. #if ( configUSE_MUTEXES == 1 )
  50542. {
  50543. pxNewTCB->uxBasePriority = uxPriority;
  50544. 801541c: 6b3b ldr r3, [r7, #48] @ 0x30
  50545. 801541e: 6aba ldr r2, [r7, #40] @ 0x28
  50546. 8015420: 64da str r2, [r3, #76] @ 0x4c
  50547. pxNewTCB->uxMutexesHeld = 0;
  50548. 8015422: 6b3b ldr r3, [r7, #48] @ 0x30
  50549. 8015424: 2200 movs r2, #0
  50550. 8015426: 651a str r2, [r3, #80] @ 0x50
  50551. }
  50552. #endif /* configUSE_MUTEXES */
  50553. vListInitialiseItem( &( pxNewTCB->xStateListItem ) );
  50554. 8015428: 6b3b ldr r3, [r7, #48] @ 0x30
  50555. 801542a: 3304 adds r3, #4
  50556. 801542c: 4618 mov r0, r3
  50557. 801542e: f7fe fd09 bl 8013e44 <vListInitialiseItem>
  50558. vListInitialiseItem( &( pxNewTCB->xEventListItem ) );
  50559. 8015432: 6b3b ldr r3, [r7, #48] @ 0x30
  50560. 8015434: 3318 adds r3, #24
  50561. 8015436: 4618 mov r0, r3
  50562. 8015438: f7fe fd04 bl 8013e44 <vListInitialiseItem>
  50563. /* Set the pxNewTCB as a link back from the ListItem_t. This is so we can get
  50564. back to the containing TCB from a generic item in a list. */
  50565. listSET_LIST_ITEM_OWNER( &( pxNewTCB->xStateListItem ), pxNewTCB );
  50566. 801543c: 6b3b ldr r3, [r7, #48] @ 0x30
  50567. 801543e: 6b3a ldr r2, [r7, #48] @ 0x30
  50568. 8015440: 611a str r2, [r3, #16]
  50569. /* Event lists are always in priority order. */
  50570. 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. */
  50571. 8015442: 6abb ldr r3, [r7, #40] @ 0x28
  50572. 8015444: f1c3 0238 rsb r2, r3, #56 @ 0x38
  50573. 8015448: 6b3b ldr r3, [r7, #48] @ 0x30
  50574. 801544a: 619a str r2, [r3, #24]
  50575. listSET_LIST_ITEM_OWNER( &( pxNewTCB->xEventListItem ), pxNewTCB );
  50576. 801544c: 6b3b ldr r3, [r7, #48] @ 0x30
  50577. 801544e: 6b3a ldr r2, [r7, #48] @ 0x30
  50578. 8015450: 625a str r2, [r3, #36] @ 0x24
  50579. }
  50580. #endif
  50581. #if ( configUSE_TASK_NOTIFICATIONS == 1 )
  50582. {
  50583. pxNewTCB->ulNotifiedValue = 0;
  50584. 8015452: 6b3b ldr r3, [r7, #48] @ 0x30
  50585. 8015454: 2200 movs r2, #0
  50586. 8015456: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  50587. pxNewTCB->ucNotifyState = taskNOT_WAITING_NOTIFICATION;
  50588. 801545a: 6b3b ldr r3, [r7, #48] @ 0x30
  50589. 801545c: 2200 movs r2, #0
  50590. 801545e: f883 20a4 strb.w r2, [r3, #164] @ 0xa4
  50591. #if ( configUSE_NEWLIB_REENTRANT == 1 )
  50592. {
  50593. /* Initialise this task's Newlib reent structure.
  50594. See the third party link http://www.nadler.com/embedded/newlibAndFreeRTOS.html
  50595. for additional information. */
  50596. _REENT_INIT_PTR( ( &( pxNewTCB->xNewLib_reent ) ) );
  50597. 8015462: 6b3b ldr r3, [r7, #48] @ 0x30
  50598. 8015464: 3354 adds r3, #84 @ 0x54
  50599. 8015466: 224c movs r2, #76 @ 0x4c
  50600. 8015468: 2100 movs r1, #0
  50601. 801546a: 4618 mov r0, r3
  50602. 801546c: f002 fc0e bl 8017c8c <memset>
  50603. 8015470: 6b3b ldr r3, [r7, #48] @ 0x30
  50604. 8015472: 4a0d ldr r2, [pc, #52] @ (80154a8 <prvInitialiseNewTask+0x144>)
  50605. 8015474: 659a str r2, [r3, #88] @ 0x58
  50606. 8015476: 6b3b ldr r3, [r7, #48] @ 0x30
  50607. 8015478: 4a0c ldr r2, [pc, #48] @ (80154ac <prvInitialiseNewTask+0x148>)
  50608. 801547a: 65da str r2, [r3, #92] @ 0x5c
  50609. 801547c: 6b3b ldr r3, [r7, #48] @ 0x30
  50610. 801547e: 4a0c ldr r2, [pc, #48] @ (80154b0 <prvInitialiseNewTask+0x14c>)
  50611. 8015480: 661a str r2, [r3, #96] @ 0x60
  50612. }
  50613. #endif /* portSTACK_GROWTH */
  50614. }
  50615. #else /* portHAS_STACK_OVERFLOW_CHECKING */
  50616. {
  50617. pxNewTCB->pxTopOfStack = pxPortInitialiseStack( pxTopOfStack, pxTaskCode, pvParameters );
  50618. 8015482: 683a ldr r2, [r7, #0]
  50619. 8015484: 68f9 ldr r1, [r7, #12]
  50620. 8015486: 69b8 ldr r0, [r7, #24]
  50621. 8015488: f001 fdb8 bl 8016ffc <pxPortInitialiseStack>
  50622. 801548c: 4602 mov r2, r0
  50623. 801548e: 6b3b ldr r3, [r7, #48] @ 0x30
  50624. 8015490: 601a str r2, [r3, #0]
  50625. }
  50626. #endif /* portHAS_STACK_OVERFLOW_CHECKING */
  50627. }
  50628. #endif /* portUSING_MPU_WRAPPERS */
  50629. if( pxCreatedTask != NULL )
  50630. 8015492: 6afb ldr r3, [r7, #44] @ 0x2c
  50631. 8015494: 2b00 cmp r3, #0
  50632. 8015496: d002 beq.n 801549e <prvInitialiseNewTask+0x13a>
  50633. {
  50634. /* Pass the handle out in an anonymous way. The handle can be used to
  50635. change the created task's priority, delete the created task, etc.*/
  50636. *pxCreatedTask = ( TaskHandle_t ) pxNewTCB;
  50637. 8015498: 6afb ldr r3, [r7, #44] @ 0x2c
  50638. 801549a: 6b3a ldr r2, [r7, #48] @ 0x30
  50639. 801549c: 601a str r2, [r3, #0]
  50640. }
  50641. else
  50642. {
  50643. mtCOVERAGE_TEST_MARKER();
  50644. }
  50645. }
  50646. 801549e: bf00 nop
  50647. 80154a0: 3720 adds r7, #32
  50648. 80154a2: 46bd mov sp, r7
  50649. 80154a4: bd80 pop {r7, pc}
  50650. 80154a6: bf00 nop
  50651. 80154a8: 24013068 .word 0x24013068
  50652. 80154ac: 240130d0 .word 0x240130d0
  50653. 80154b0: 24013138 .word 0x24013138
  50654. 080154b4 <prvAddNewTaskToReadyList>:
  50655. /*-----------------------------------------------------------*/
  50656. static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB )
  50657. {
  50658. 80154b4: b580 push {r7, lr}
  50659. 80154b6: b082 sub sp, #8
  50660. 80154b8: af00 add r7, sp, #0
  50661. 80154ba: 6078 str r0, [r7, #4]
  50662. /* Ensure interrupts don't access the task lists while the lists are being
  50663. updated. */
  50664. taskENTER_CRITICAL();
  50665. 80154bc: f001 fecc bl 8017258 <vPortEnterCritical>
  50666. {
  50667. uxCurrentNumberOfTasks++;
  50668. 80154c0: 4b2d ldr r3, [pc, #180] @ (8015578 <prvAddNewTaskToReadyList+0xc4>)
  50669. 80154c2: 681b ldr r3, [r3, #0]
  50670. 80154c4: 3301 adds r3, #1
  50671. 80154c6: 4a2c ldr r2, [pc, #176] @ (8015578 <prvAddNewTaskToReadyList+0xc4>)
  50672. 80154c8: 6013 str r3, [r2, #0]
  50673. if( pxCurrentTCB == NULL )
  50674. 80154ca: 4b2c ldr r3, [pc, #176] @ (801557c <prvAddNewTaskToReadyList+0xc8>)
  50675. 80154cc: 681b ldr r3, [r3, #0]
  50676. 80154ce: 2b00 cmp r3, #0
  50677. 80154d0: d109 bne.n 80154e6 <prvAddNewTaskToReadyList+0x32>
  50678. {
  50679. /* There are no other tasks, or all the other tasks are in
  50680. the suspended state - make this the current task. */
  50681. pxCurrentTCB = pxNewTCB;
  50682. 80154d2: 4a2a ldr r2, [pc, #168] @ (801557c <prvAddNewTaskToReadyList+0xc8>)
  50683. 80154d4: 687b ldr r3, [r7, #4]
  50684. 80154d6: 6013 str r3, [r2, #0]
  50685. if( uxCurrentNumberOfTasks == ( UBaseType_t ) 1 )
  50686. 80154d8: 4b27 ldr r3, [pc, #156] @ (8015578 <prvAddNewTaskToReadyList+0xc4>)
  50687. 80154da: 681b ldr r3, [r3, #0]
  50688. 80154dc: 2b01 cmp r3, #1
  50689. 80154de: d110 bne.n 8015502 <prvAddNewTaskToReadyList+0x4e>
  50690. {
  50691. /* This is the first task to be created so do the preliminary
  50692. initialisation required. We will not recover if this call
  50693. fails, but we will report the failure. */
  50694. prvInitialiseTaskLists();
  50695. 80154e0: f000 fc64 bl 8015dac <prvInitialiseTaskLists>
  50696. 80154e4: e00d b.n 8015502 <prvAddNewTaskToReadyList+0x4e>
  50697. else
  50698. {
  50699. /* If the scheduler is not already running, make this task the
  50700. current task if it is the highest priority task to be created
  50701. so far. */
  50702. if( xSchedulerRunning == pdFALSE )
  50703. 80154e6: 4b26 ldr r3, [pc, #152] @ (8015580 <prvAddNewTaskToReadyList+0xcc>)
  50704. 80154e8: 681b ldr r3, [r3, #0]
  50705. 80154ea: 2b00 cmp r3, #0
  50706. 80154ec: d109 bne.n 8015502 <prvAddNewTaskToReadyList+0x4e>
  50707. {
  50708. if( pxCurrentTCB->uxPriority <= pxNewTCB->uxPriority )
  50709. 80154ee: 4b23 ldr r3, [pc, #140] @ (801557c <prvAddNewTaskToReadyList+0xc8>)
  50710. 80154f0: 681b ldr r3, [r3, #0]
  50711. 80154f2: 6ada ldr r2, [r3, #44] @ 0x2c
  50712. 80154f4: 687b ldr r3, [r7, #4]
  50713. 80154f6: 6adb ldr r3, [r3, #44] @ 0x2c
  50714. 80154f8: 429a cmp r2, r3
  50715. 80154fa: d802 bhi.n 8015502 <prvAddNewTaskToReadyList+0x4e>
  50716. {
  50717. pxCurrentTCB = pxNewTCB;
  50718. 80154fc: 4a1f ldr r2, [pc, #124] @ (801557c <prvAddNewTaskToReadyList+0xc8>)
  50719. 80154fe: 687b ldr r3, [r7, #4]
  50720. 8015500: 6013 str r3, [r2, #0]
  50721. {
  50722. mtCOVERAGE_TEST_MARKER();
  50723. }
  50724. }
  50725. uxTaskNumber++;
  50726. 8015502: 4b20 ldr r3, [pc, #128] @ (8015584 <prvAddNewTaskToReadyList+0xd0>)
  50727. 8015504: 681b ldr r3, [r3, #0]
  50728. 8015506: 3301 adds r3, #1
  50729. 8015508: 4a1e ldr r2, [pc, #120] @ (8015584 <prvAddNewTaskToReadyList+0xd0>)
  50730. 801550a: 6013 str r3, [r2, #0]
  50731. #if ( configUSE_TRACE_FACILITY == 1 )
  50732. {
  50733. /* Add a counter into the TCB for tracing only. */
  50734. pxNewTCB->uxTCBNumber = uxTaskNumber;
  50735. 801550c: 4b1d ldr r3, [pc, #116] @ (8015584 <prvAddNewTaskToReadyList+0xd0>)
  50736. 801550e: 681a ldr r2, [r3, #0]
  50737. 8015510: 687b ldr r3, [r7, #4]
  50738. 8015512: 645a str r2, [r3, #68] @ 0x44
  50739. }
  50740. #endif /* configUSE_TRACE_FACILITY */
  50741. traceTASK_CREATE( pxNewTCB );
  50742. prvAddTaskToReadyList( pxNewTCB );
  50743. 8015514: 687b ldr r3, [r7, #4]
  50744. 8015516: 6ada ldr r2, [r3, #44] @ 0x2c
  50745. 8015518: 4b1b ldr r3, [pc, #108] @ (8015588 <prvAddNewTaskToReadyList+0xd4>)
  50746. 801551a: 681b ldr r3, [r3, #0]
  50747. 801551c: 429a cmp r2, r3
  50748. 801551e: d903 bls.n 8015528 <prvAddNewTaskToReadyList+0x74>
  50749. 8015520: 687b ldr r3, [r7, #4]
  50750. 8015522: 6adb ldr r3, [r3, #44] @ 0x2c
  50751. 8015524: 4a18 ldr r2, [pc, #96] @ (8015588 <prvAddNewTaskToReadyList+0xd4>)
  50752. 8015526: 6013 str r3, [r2, #0]
  50753. 8015528: 687b ldr r3, [r7, #4]
  50754. 801552a: 6ada ldr r2, [r3, #44] @ 0x2c
  50755. 801552c: 4613 mov r3, r2
  50756. 801552e: 009b lsls r3, r3, #2
  50757. 8015530: 4413 add r3, r2
  50758. 8015532: 009b lsls r3, r3, #2
  50759. 8015534: 4a15 ldr r2, [pc, #84] @ (801558c <prvAddNewTaskToReadyList+0xd8>)
  50760. 8015536: 441a add r2, r3
  50761. 8015538: 687b ldr r3, [r7, #4]
  50762. 801553a: 3304 adds r3, #4
  50763. 801553c: 4619 mov r1, r3
  50764. 801553e: 4610 mov r0, r2
  50765. 8015540: f7fe fc8d bl 8013e5e <vListInsertEnd>
  50766. portSETUP_TCB( pxNewTCB );
  50767. }
  50768. taskEXIT_CRITICAL();
  50769. 8015544: f001 feba bl 80172bc <vPortExitCritical>
  50770. if( xSchedulerRunning != pdFALSE )
  50771. 8015548: 4b0d ldr r3, [pc, #52] @ (8015580 <prvAddNewTaskToReadyList+0xcc>)
  50772. 801554a: 681b ldr r3, [r3, #0]
  50773. 801554c: 2b00 cmp r3, #0
  50774. 801554e: d00e beq.n 801556e <prvAddNewTaskToReadyList+0xba>
  50775. {
  50776. /* If the created task is of a higher priority than the current task
  50777. then it should run now. */
  50778. if( pxCurrentTCB->uxPriority < pxNewTCB->uxPriority )
  50779. 8015550: 4b0a ldr r3, [pc, #40] @ (801557c <prvAddNewTaskToReadyList+0xc8>)
  50780. 8015552: 681b ldr r3, [r3, #0]
  50781. 8015554: 6ada ldr r2, [r3, #44] @ 0x2c
  50782. 8015556: 687b ldr r3, [r7, #4]
  50783. 8015558: 6adb ldr r3, [r3, #44] @ 0x2c
  50784. 801555a: 429a cmp r2, r3
  50785. 801555c: d207 bcs.n 801556e <prvAddNewTaskToReadyList+0xba>
  50786. {
  50787. taskYIELD_IF_USING_PREEMPTION();
  50788. 801555e: 4b0c ldr r3, [pc, #48] @ (8015590 <prvAddNewTaskToReadyList+0xdc>)
  50789. 8015560: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  50790. 8015564: 601a str r2, [r3, #0]
  50791. 8015566: f3bf 8f4f dsb sy
  50792. 801556a: f3bf 8f6f isb sy
  50793. }
  50794. else
  50795. {
  50796. mtCOVERAGE_TEST_MARKER();
  50797. }
  50798. }
  50799. 801556e: bf00 nop
  50800. 8015570: 3708 adds r7, #8
  50801. 8015572: 46bd mov sp, r7
  50802. 8015574: bd80 pop {r7, pc}
  50803. 8015576: bf00 nop
  50804. 8015578: 24002ee8 .word 0x24002ee8
  50805. 801557c: 24002a14 .word 0x24002a14
  50806. 8015580: 24002ef4 .word 0x24002ef4
  50807. 8015584: 24002f04 .word 0x24002f04
  50808. 8015588: 24002ef0 .word 0x24002ef0
  50809. 801558c: 24002a18 .word 0x24002a18
  50810. 8015590: e000ed04 .word 0xe000ed04
  50811. 08015594 <vTaskDelay>:
  50812. /*-----------------------------------------------------------*/
  50813. #if ( INCLUDE_vTaskDelay == 1 )
  50814. void vTaskDelay( const TickType_t xTicksToDelay )
  50815. {
  50816. 8015594: b580 push {r7, lr}
  50817. 8015596: b084 sub sp, #16
  50818. 8015598: af00 add r7, sp, #0
  50819. 801559a: 6078 str r0, [r7, #4]
  50820. BaseType_t xAlreadyYielded = pdFALSE;
  50821. 801559c: 2300 movs r3, #0
  50822. 801559e: 60fb str r3, [r7, #12]
  50823. /* A delay time of zero just forces a reschedule. */
  50824. if( xTicksToDelay > ( TickType_t ) 0U )
  50825. 80155a0: 687b ldr r3, [r7, #4]
  50826. 80155a2: 2b00 cmp r3, #0
  50827. 80155a4: d018 beq.n 80155d8 <vTaskDelay+0x44>
  50828. {
  50829. configASSERT( uxSchedulerSuspended == 0 );
  50830. 80155a6: 4b14 ldr r3, [pc, #80] @ (80155f8 <vTaskDelay+0x64>)
  50831. 80155a8: 681b ldr r3, [r3, #0]
  50832. 80155aa: 2b00 cmp r3, #0
  50833. 80155ac: d00b beq.n 80155c6 <vTaskDelay+0x32>
  50834. __asm volatile
  50835. 80155ae: f04f 0350 mov.w r3, #80 @ 0x50
  50836. 80155b2: f383 8811 msr BASEPRI, r3
  50837. 80155b6: f3bf 8f6f isb sy
  50838. 80155ba: f3bf 8f4f dsb sy
  50839. 80155be: 60bb str r3, [r7, #8]
  50840. }
  50841. 80155c0: bf00 nop
  50842. 80155c2: bf00 nop
  50843. 80155c4: e7fd b.n 80155c2 <vTaskDelay+0x2e>
  50844. vTaskSuspendAll();
  50845. 80155c6: f000 f88b bl 80156e0 <vTaskSuspendAll>
  50846. list or removed from the blocked list until the scheduler
  50847. is resumed.
  50848. This task cannot be in an event list as it is the currently
  50849. executing task. */
  50850. prvAddCurrentTaskToDelayedList( xTicksToDelay, pdFALSE );
  50851. 80155ca: 2100 movs r1, #0
  50852. 80155cc: 6878 ldr r0, [r7, #4]
  50853. 80155ce: f001 f87d bl 80166cc <prvAddCurrentTaskToDelayedList>
  50854. }
  50855. xAlreadyYielded = xTaskResumeAll();
  50856. 80155d2: f000 f893 bl 80156fc <xTaskResumeAll>
  50857. 80155d6: 60f8 str r0, [r7, #12]
  50858. mtCOVERAGE_TEST_MARKER();
  50859. }
  50860. /* Force a reschedule if xTaskResumeAll has not already done so, we may
  50861. have put ourselves to sleep. */
  50862. if( xAlreadyYielded == pdFALSE )
  50863. 80155d8: 68fb ldr r3, [r7, #12]
  50864. 80155da: 2b00 cmp r3, #0
  50865. 80155dc: d107 bne.n 80155ee <vTaskDelay+0x5a>
  50866. {
  50867. portYIELD_WITHIN_API();
  50868. 80155de: 4b07 ldr r3, [pc, #28] @ (80155fc <vTaskDelay+0x68>)
  50869. 80155e0: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  50870. 80155e4: 601a str r2, [r3, #0]
  50871. 80155e6: f3bf 8f4f dsb sy
  50872. 80155ea: f3bf 8f6f isb sy
  50873. }
  50874. else
  50875. {
  50876. mtCOVERAGE_TEST_MARKER();
  50877. }
  50878. }
  50879. 80155ee: bf00 nop
  50880. 80155f0: 3710 adds r7, #16
  50881. 80155f2: 46bd mov sp, r7
  50882. 80155f4: bd80 pop {r7, pc}
  50883. 80155f6: bf00 nop
  50884. 80155f8: 24002f10 .word 0x24002f10
  50885. 80155fc: e000ed04 .word 0xe000ed04
  50886. 08015600 <vTaskStartScheduler>:
  50887. #endif /* ( ( INCLUDE_xTaskResumeFromISR == 1 ) && ( INCLUDE_vTaskSuspend == 1 ) ) */
  50888. /*-----------------------------------------------------------*/
  50889. void vTaskStartScheduler( void )
  50890. {
  50891. 8015600: b580 push {r7, lr}
  50892. 8015602: b08a sub sp, #40 @ 0x28
  50893. 8015604: af04 add r7, sp, #16
  50894. BaseType_t xReturn;
  50895. /* Add the idle task at the lowest priority. */
  50896. #if( configSUPPORT_STATIC_ALLOCATION == 1 )
  50897. {
  50898. StaticTask_t *pxIdleTaskTCBBuffer = NULL;
  50899. 8015606: 2300 movs r3, #0
  50900. 8015608: 60bb str r3, [r7, #8]
  50901. StackType_t *pxIdleTaskStackBuffer = NULL;
  50902. 801560a: 2300 movs r3, #0
  50903. 801560c: 607b str r3, [r7, #4]
  50904. uint32_t ulIdleTaskStackSize;
  50905. /* The Idle task is created using user provided RAM - obtain the
  50906. address of the RAM then create the idle task. */
  50907. vApplicationGetIdleTaskMemory( &pxIdleTaskTCBBuffer, &pxIdleTaskStackBuffer, &ulIdleTaskStackSize );
  50908. 801560e: 463a mov r2, r7
  50909. 8015610: 1d39 adds r1, r7, #4
  50910. 8015612: f107 0308 add.w r3, r7, #8
  50911. 8015616: 4618 mov r0, r3
  50912. 8015618: f7fe fbc0 bl 8013d9c <vApplicationGetIdleTaskMemory>
  50913. xIdleTaskHandle = xTaskCreateStatic( prvIdleTask,
  50914. 801561c: 6839 ldr r1, [r7, #0]
  50915. 801561e: 687b ldr r3, [r7, #4]
  50916. 8015620: 68ba ldr r2, [r7, #8]
  50917. 8015622: 9202 str r2, [sp, #8]
  50918. 8015624: 9301 str r3, [sp, #4]
  50919. 8015626: 2300 movs r3, #0
  50920. 8015628: 9300 str r3, [sp, #0]
  50921. 801562a: 2300 movs r3, #0
  50922. 801562c: 460a mov r2, r1
  50923. 801562e: 4924 ldr r1, [pc, #144] @ (80156c0 <vTaskStartScheduler+0xc0>)
  50924. 8015630: 4824 ldr r0, [pc, #144] @ (80156c4 <vTaskStartScheduler+0xc4>)
  50925. 8015632: f7ff fdf2 bl 801521a <xTaskCreateStatic>
  50926. 8015636: 4603 mov r3, r0
  50927. 8015638: 4a23 ldr r2, [pc, #140] @ (80156c8 <vTaskStartScheduler+0xc8>)
  50928. 801563a: 6013 str r3, [r2, #0]
  50929. ( void * ) NULL, /*lint !e961. The cast is not redundant for all compilers. */
  50930. portPRIVILEGE_BIT, /* In effect ( tskIDLE_PRIORITY | portPRIVILEGE_BIT ), but tskIDLE_PRIORITY is zero. */
  50931. pxIdleTaskStackBuffer,
  50932. pxIdleTaskTCBBuffer ); /*lint !e961 MISRA exception, justified as it is not a redundant explicit cast to all supported compilers. */
  50933. if( xIdleTaskHandle != NULL )
  50934. 801563c: 4b22 ldr r3, [pc, #136] @ (80156c8 <vTaskStartScheduler+0xc8>)
  50935. 801563e: 681b ldr r3, [r3, #0]
  50936. 8015640: 2b00 cmp r3, #0
  50937. 8015642: d002 beq.n 801564a <vTaskStartScheduler+0x4a>
  50938. {
  50939. xReturn = pdPASS;
  50940. 8015644: 2301 movs r3, #1
  50941. 8015646: 617b str r3, [r7, #20]
  50942. 8015648: e001 b.n 801564e <vTaskStartScheduler+0x4e>
  50943. }
  50944. else
  50945. {
  50946. xReturn = pdFAIL;
  50947. 801564a: 2300 movs r3, #0
  50948. 801564c: 617b str r3, [r7, #20]
  50949. }
  50950. #endif /* configSUPPORT_STATIC_ALLOCATION */
  50951. #if ( configUSE_TIMERS == 1 )
  50952. {
  50953. if( xReturn == pdPASS )
  50954. 801564e: 697b ldr r3, [r7, #20]
  50955. 8015650: 2b01 cmp r3, #1
  50956. 8015652: d102 bne.n 801565a <vTaskStartScheduler+0x5a>
  50957. {
  50958. xReturn = xTimerCreateTimerTask();
  50959. 8015654: f001 f88e bl 8016774 <xTimerCreateTimerTask>
  50960. 8015658: 6178 str r0, [r7, #20]
  50961. mtCOVERAGE_TEST_MARKER();
  50962. }
  50963. }
  50964. #endif /* configUSE_TIMERS */
  50965. if( xReturn == pdPASS )
  50966. 801565a: 697b ldr r3, [r7, #20]
  50967. 801565c: 2b01 cmp r3, #1
  50968. 801565e: d11b bne.n 8015698 <vTaskStartScheduler+0x98>
  50969. __asm volatile
  50970. 8015660: f04f 0350 mov.w r3, #80 @ 0x50
  50971. 8015664: f383 8811 msr BASEPRI, r3
  50972. 8015668: f3bf 8f6f isb sy
  50973. 801566c: f3bf 8f4f dsb sy
  50974. 8015670: 613b str r3, [r7, #16]
  50975. }
  50976. 8015672: bf00 nop
  50977. {
  50978. /* Switch Newlib's _impure_ptr variable to point to the _reent
  50979. structure specific to the task that will run first.
  50980. See the third party link http://www.nadler.com/embedded/newlibAndFreeRTOS.html
  50981. for additional information. */
  50982. _impure_ptr = &( pxCurrentTCB->xNewLib_reent );
  50983. 8015674: 4b15 ldr r3, [pc, #84] @ (80156cc <vTaskStartScheduler+0xcc>)
  50984. 8015676: 681b ldr r3, [r3, #0]
  50985. 8015678: 3354 adds r3, #84 @ 0x54
  50986. 801567a: 4a15 ldr r2, [pc, #84] @ (80156d0 <vTaskStartScheduler+0xd0>)
  50987. 801567c: 6013 str r3, [r2, #0]
  50988. }
  50989. #endif /* configUSE_NEWLIB_REENTRANT */
  50990. xNextTaskUnblockTime = portMAX_DELAY;
  50991. 801567e: 4b15 ldr r3, [pc, #84] @ (80156d4 <vTaskStartScheduler+0xd4>)
  50992. 8015680: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
  50993. 8015684: 601a str r2, [r3, #0]
  50994. xSchedulerRunning = pdTRUE;
  50995. 8015686: 4b14 ldr r3, [pc, #80] @ (80156d8 <vTaskStartScheduler+0xd8>)
  50996. 8015688: 2201 movs r2, #1
  50997. 801568a: 601a str r2, [r3, #0]
  50998. xTickCount = ( TickType_t ) configINITIAL_TICK_COUNT;
  50999. 801568c: 4b13 ldr r3, [pc, #76] @ (80156dc <vTaskStartScheduler+0xdc>)
  51000. 801568e: 2200 movs r2, #0
  51001. 8015690: 601a str r2, [r3, #0]
  51002. traceTASK_SWITCHED_IN();
  51003. /* Setting up the timer tick is hardware specific and thus in the
  51004. portable interface. */
  51005. if( xPortStartScheduler() != pdFALSE )
  51006. 8015692: f001 fd3d bl 8017110 <xPortStartScheduler>
  51007. }
  51008. /* Prevent compiler warnings if INCLUDE_xTaskGetIdleTaskHandle is set to 0,
  51009. meaning xIdleTaskHandle is not used anywhere else. */
  51010. ( void ) xIdleTaskHandle;
  51011. }
  51012. 8015696: e00f b.n 80156b8 <vTaskStartScheduler+0xb8>
  51013. configASSERT( xReturn != errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY );
  51014. 8015698: 697b ldr r3, [r7, #20]
  51015. 801569a: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  51016. 801569e: d10b bne.n 80156b8 <vTaskStartScheduler+0xb8>
  51017. __asm volatile
  51018. 80156a0: f04f 0350 mov.w r3, #80 @ 0x50
  51019. 80156a4: f383 8811 msr BASEPRI, r3
  51020. 80156a8: f3bf 8f6f isb sy
  51021. 80156ac: f3bf 8f4f dsb sy
  51022. 80156b0: 60fb str r3, [r7, #12]
  51023. }
  51024. 80156b2: bf00 nop
  51025. 80156b4: bf00 nop
  51026. 80156b6: e7fd b.n 80156b4 <vTaskStartScheduler+0xb4>
  51027. }
  51028. 80156b8: bf00 nop
  51029. 80156ba: 3718 adds r7, #24
  51030. 80156bc: 46bd mov sp, r7
  51031. 80156be: bd80 pop {r7, pc}
  51032. 80156c0: 08018ae0 .word 0x08018ae0
  51033. 80156c4: 08015d7d .word 0x08015d7d
  51034. 80156c8: 24002f0c .word 0x24002f0c
  51035. 80156cc: 24002a14 .word 0x24002a14
  51036. 80156d0: 24000054 .word 0x24000054
  51037. 80156d4: 24002f08 .word 0x24002f08
  51038. 80156d8: 24002ef4 .word 0x24002ef4
  51039. 80156dc: 24002eec .word 0x24002eec
  51040. 080156e0 <vTaskSuspendAll>:
  51041. vPortEndScheduler();
  51042. }
  51043. /*----------------------------------------------------------*/
  51044. void vTaskSuspendAll( void )
  51045. {
  51046. 80156e0: b480 push {r7}
  51047. 80156e2: af00 add r7, sp, #0
  51048. do not otherwise exhibit real time behaviour. */
  51049. portSOFTWARE_BARRIER();
  51050. /* The scheduler is suspended if uxSchedulerSuspended is non-zero. An increment
  51051. is used to allow calls to vTaskSuspendAll() to nest. */
  51052. ++uxSchedulerSuspended;
  51053. 80156e4: 4b04 ldr r3, [pc, #16] @ (80156f8 <vTaskSuspendAll+0x18>)
  51054. 80156e6: 681b ldr r3, [r3, #0]
  51055. 80156e8: 3301 adds r3, #1
  51056. 80156ea: 4a03 ldr r2, [pc, #12] @ (80156f8 <vTaskSuspendAll+0x18>)
  51057. 80156ec: 6013 str r3, [r2, #0]
  51058. /* Enforces ordering for ports and optimised compilers that may otherwise place
  51059. the above increment elsewhere. */
  51060. portMEMORY_BARRIER();
  51061. }
  51062. 80156ee: bf00 nop
  51063. 80156f0: 46bd mov sp, r7
  51064. 80156f2: f85d 7b04 ldr.w r7, [sp], #4
  51065. 80156f6: 4770 bx lr
  51066. 80156f8: 24002f10 .word 0x24002f10
  51067. 080156fc <xTaskResumeAll>:
  51068. #endif /* configUSE_TICKLESS_IDLE */
  51069. /*----------------------------------------------------------*/
  51070. BaseType_t xTaskResumeAll( void )
  51071. {
  51072. 80156fc: b580 push {r7, lr}
  51073. 80156fe: b084 sub sp, #16
  51074. 8015700: af00 add r7, sp, #0
  51075. TCB_t *pxTCB = NULL;
  51076. 8015702: 2300 movs r3, #0
  51077. 8015704: 60fb str r3, [r7, #12]
  51078. BaseType_t xAlreadyYielded = pdFALSE;
  51079. 8015706: 2300 movs r3, #0
  51080. 8015708: 60bb str r3, [r7, #8]
  51081. /* If uxSchedulerSuspended is zero then this function does not match a
  51082. previous call to vTaskSuspendAll(). */
  51083. configASSERT( uxSchedulerSuspended );
  51084. 801570a: 4b42 ldr r3, [pc, #264] @ (8015814 <xTaskResumeAll+0x118>)
  51085. 801570c: 681b ldr r3, [r3, #0]
  51086. 801570e: 2b00 cmp r3, #0
  51087. 8015710: d10b bne.n 801572a <xTaskResumeAll+0x2e>
  51088. __asm volatile
  51089. 8015712: f04f 0350 mov.w r3, #80 @ 0x50
  51090. 8015716: f383 8811 msr BASEPRI, r3
  51091. 801571a: f3bf 8f6f isb sy
  51092. 801571e: f3bf 8f4f dsb sy
  51093. 8015722: 603b str r3, [r7, #0]
  51094. }
  51095. 8015724: bf00 nop
  51096. 8015726: bf00 nop
  51097. 8015728: e7fd b.n 8015726 <xTaskResumeAll+0x2a>
  51098. /* It is possible that an ISR caused a task to be removed from an event
  51099. list while the scheduler was suspended. If this was the case then the
  51100. removed task will have been added to the xPendingReadyList. Once the
  51101. scheduler has been resumed it is safe to move all the pending ready
  51102. tasks from this list into their appropriate ready list. */
  51103. taskENTER_CRITICAL();
  51104. 801572a: f001 fd95 bl 8017258 <vPortEnterCritical>
  51105. {
  51106. --uxSchedulerSuspended;
  51107. 801572e: 4b39 ldr r3, [pc, #228] @ (8015814 <xTaskResumeAll+0x118>)
  51108. 8015730: 681b ldr r3, [r3, #0]
  51109. 8015732: 3b01 subs r3, #1
  51110. 8015734: 4a37 ldr r2, [pc, #220] @ (8015814 <xTaskResumeAll+0x118>)
  51111. 8015736: 6013 str r3, [r2, #0]
  51112. if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE )
  51113. 8015738: 4b36 ldr r3, [pc, #216] @ (8015814 <xTaskResumeAll+0x118>)
  51114. 801573a: 681b ldr r3, [r3, #0]
  51115. 801573c: 2b00 cmp r3, #0
  51116. 801573e: d162 bne.n 8015806 <xTaskResumeAll+0x10a>
  51117. {
  51118. if( uxCurrentNumberOfTasks > ( UBaseType_t ) 0U )
  51119. 8015740: 4b35 ldr r3, [pc, #212] @ (8015818 <xTaskResumeAll+0x11c>)
  51120. 8015742: 681b ldr r3, [r3, #0]
  51121. 8015744: 2b00 cmp r3, #0
  51122. 8015746: d05e beq.n 8015806 <xTaskResumeAll+0x10a>
  51123. {
  51124. /* Move any readied tasks from the pending list into the
  51125. appropriate ready list. */
  51126. while( listLIST_IS_EMPTY( &xPendingReadyList ) == pdFALSE )
  51127. 8015748: e02f b.n 80157aa <xTaskResumeAll+0xae>
  51128. {
  51129. 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. */
  51130. 801574a: 4b34 ldr r3, [pc, #208] @ (801581c <xTaskResumeAll+0x120>)
  51131. 801574c: 68db ldr r3, [r3, #12]
  51132. 801574e: 68db ldr r3, [r3, #12]
  51133. 8015750: 60fb str r3, [r7, #12]
  51134. ( void ) uxListRemove( &( pxTCB->xEventListItem ) );
  51135. 8015752: 68fb ldr r3, [r7, #12]
  51136. 8015754: 3318 adds r3, #24
  51137. 8015756: 4618 mov r0, r3
  51138. 8015758: f7fe fbde bl 8013f18 <uxListRemove>
  51139. ( void ) uxListRemove( &( pxTCB->xStateListItem ) );
  51140. 801575c: 68fb ldr r3, [r7, #12]
  51141. 801575e: 3304 adds r3, #4
  51142. 8015760: 4618 mov r0, r3
  51143. 8015762: f7fe fbd9 bl 8013f18 <uxListRemove>
  51144. prvAddTaskToReadyList( pxTCB );
  51145. 8015766: 68fb ldr r3, [r7, #12]
  51146. 8015768: 6ada ldr r2, [r3, #44] @ 0x2c
  51147. 801576a: 4b2d ldr r3, [pc, #180] @ (8015820 <xTaskResumeAll+0x124>)
  51148. 801576c: 681b ldr r3, [r3, #0]
  51149. 801576e: 429a cmp r2, r3
  51150. 8015770: d903 bls.n 801577a <xTaskResumeAll+0x7e>
  51151. 8015772: 68fb ldr r3, [r7, #12]
  51152. 8015774: 6adb ldr r3, [r3, #44] @ 0x2c
  51153. 8015776: 4a2a ldr r2, [pc, #168] @ (8015820 <xTaskResumeAll+0x124>)
  51154. 8015778: 6013 str r3, [r2, #0]
  51155. 801577a: 68fb ldr r3, [r7, #12]
  51156. 801577c: 6ada ldr r2, [r3, #44] @ 0x2c
  51157. 801577e: 4613 mov r3, r2
  51158. 8015780: 009b lsls r3, r3, #2
  51159. 8015782: 4413 add r3, r2
  51160. 8015784: 009b lsls r3, r3, #2
  51161. 8015786: 4a27 ldr r2, [pc, #156] @ (8015824 <xTaskResumeAll+0x128>)
  51162. 8015788: 441a add r2, r3
  51163. 801578a: 68fb ldr r3, [r7, #12]
  51164. 801578c: 3304 adds r3, #4
  51165. 801578e: 4619 mov r1, r3
  51166. 8015790: 4610 mov r0, r2
  51167. 8015792: f7fe fb64 bl 8013e5e <vListInsertEnd>
  51168. /* If the moved task has a priority higher than the current
  51169. task then a yield must be performed. */
  51170. if( pxTCB->uxPriority >= pxCurrentTCB->uxPriority )
  51171. 8015796: 68fb ldr r3, [r7, #12]
  51172. 8015798: 6ada ldr r2, [r3, #44] @ 0x2c
  51173. 801579a: 4b23 ldr r3, [pc, #140] @ (8015828 <xTaskResumeAll+0x12c>)
  51174. 801579c: 681b ldr r3, [r3, #0]
  51175. 801579e: 6adb ldr r3, [r3, #44] @ 0x2c
  51176. 80157a0: 429a cmp r2, r3
  51177. 80157a2: d302 bcc.n 80157aa <xTaskResumeAll+0xae>
  51178. {
  51179. xYieldPending = pdTRUE;
  51180. 80157a4: 4b21 ldr r3, [pc, #132] @ (801582c <xTaskResumeAll+0x130>)
  51181. 80157a6: 2201 movs r2, #1
  51182. 80157a8: 601a str r2, [r3, #0]
  51183. while( listLIST_IS_EMPTY( &xPendingReadyList ) == pdFALSE )
  51184. 80157aa: 4b1c ldr r3, [pc, #112] @ (801581c <xTaskResumeAll+0x120>)
  51185. 80157ac: 681b ldr r3, [r3, #0]
  51186. 80157ae: 2b00 cmp r3, #0
  51187. 80157b0: d1cb bne.n 801574a <xTaskResumeAll+0x4e>
  51188. {
  51189. mtCOVERAGE_TEST_MARKER();
  51190. }
  51191. }
  51192. if( pxTCB != NULL )
  51193. 80157b2: 68fb ldr r3, [r7, #12]
  51194. 80157b4: 2b00 cmp r3, #0
  51195. 80157b6: d001 beq.n 80157bc <xTaskResumeAll+0xc0>
  51196. which may have prevented the next unblock time from being
  51197. re-calculated, in which case re-calculate it now. Mainly
  51198. important for low power tickless implementations, where
  51199. this can prevent an unnecessary exit from low power
  51200. state. */
  51201. prvResetNextTaskUnblockTime();
  51202. 80157b8: f000 fb9c bl 8015ef4 <prvResetNextTaskUnblockTime>
  51203. /* If any ticks occurred while the scheduler was suspended then
  51204. they should be processed now. This ensures the tick count does
  51205. not slip, and that any delayed tasks are resumed at the correct
  51206. time. */
  51207. {
  51208. TickType_t xPendedCounts = xPendedTicks; /* Non-volatile copy. */
  51209. 80157bc: 4b1c ldr r3, [pc, #112] @ (8015830 <xTaskResumeAll+0x134>)
  51210. 80157be: 681b ldr r3, [r3, #0]
  51211. 80157c0: 607b str r3, [r7, #4]
  51212. if( xPendedCounts > ( TickType_t ) 0U )
  51213. 80157c2: 687b ldr r3, [r7, #4]
  51214. 80157c4: 2b00 cmp r3, #0
  51215. 80157c6: d010 beq.n 80157ea <xTaskResumeAll+0xee>
  51216. {
  51217. do
  51218. {
  51219. if( xTaskIncrementTick() != pdFALSE )
  51220. 80157c8: f000 f846 bl 8015858 <xTaskIncrementTick>
  51221. 80157cc: 4603 mov r3, r0
  51222. 80157ce: 2b00 cmp r3, #0
  51223. 80157d0: d002 beq.n 80157d8 <xTaskResumeAll+0xdc>
  51224. {
  51225. xYieldPending = pdTRUE;
  51226. 80157d2: 4b16 ldr r3, [pc, #88] @ (801582c <xTaskResumeAll+0x130>)
  51227. 80157d4: 2201 movs r2, #1
  51228. 80157d6: 601a str r2, [r3, #0]
  51229. }
  51230. else
  51231. {
  51232. mtCOVERAGE_TEST_MARKER();
  51233. }
  51234. --xPendedCounts;
  51235. 80157d8: 687b ldr r3, [r7, #4]
  51236. 80157da: 3b01 subs r3, #1
  51237. 80157dc: 607b str r3, [r7, #4]
  51238. } while( xPendedCounts > ( TickType_t ) 0U );
  51239. 80157de: 687b ldr r3, [r7, #4]
  51240. 80157e0: 2b00 cmp r3, #0
  51241. 80157e2: d1f1 bne.n 80157c8 <xTaskResumeAll+0xcc>
  51242. xPendedTicks = 0;
  51243. 80157e4: 4b12 ldr r3, [pc, #72] @ (8015830 <xTaskResumeAll+0x134>)
  51244. 80157e6: 2200 movs r2, #0
  51245. 80157e8: 601a str r2, [r3, #0]
  51246. {
  51247. mtCOVERAGE_TEST_MARKER();
  51248. }
  51249. }
  51250. if( xYieldPending != pdFALSE )
  51251. 80157ea: 4b10 ldr r3, [pc, #64] @ (801582c <xTaskResumeAll+0x130>)
  51252. 80157ec: 681b ldr r3, [r3, #0]
  51253. 80157ee: 2b00 cmp r3, #0
  51254. 80157f0: d009 beq.n 8015806 <xTaskResumeAll+0x10a>
  51255. {
  51256. #if( configUSE_PREEMPTION != 0 )
  51257. {
  51258. xAlreadyYielded = pdTRUE;
  51259. 80157f2: 2301 movs r3, #1
  51260. 80157f4: 60bb str r3, [r7, #8]
  51261. }
  51262. #endif
  51263. taskYIELD_IF_USING_PREEMPTION();
  51264. 80157f6: 4b0f ldr r3, [pc, #60] @ (8015834 <xTaskResumeAll+0x138>)
  51265. 80157f8: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  51266. 80157fc: 601a str r2, [r3, #0]
  51267. 80157fe: f3bf 8f4f dsb sy
  51268. 8015802: f3bf 8f6f isb sy
  51269. else
  51270. {
  51271. mtCOVERAGE_TEST_MARKER();
  51272. }
  51273. }
  51274. taskEXIT_CRITICAL();
  51275. 8015806: f001 fd59 bl 80172bc <vPortExitCritical>
  51276. return xAlreadyYielded;
  51277. 801580a: 68bb ldr r3, [r7, #8]
  51278. }
  51279. 801580c: 4618 mov r0, r3
  51280. 801580e: 3710 adds r7, #16
  51281. 8015810: 46bd mov sp, r7
  51282. 8015812: bd80 pop {r7, pc}
  51283. 8015814: 24002f10 .word 0x24002f10
  51284. 8015818: 24002ee8 .word 0x24002ee8
  51285. 801581c: 24002ea8 .word 0x24002ea8
  51286. 8015820: 24002ef0 .word 0x24002ef0
  51287. 8015824: 24002a18 .word 0x24002a18
  51288. 8015828: 24002a14 .word 0x24002a14
  51289. 801582c: 24002efc .word 0x24002efc
  51290. 8015830: 24002ef8 .word 0x24002ef8
  51291. 8015834: e000ed04 .word 0xe000ed04
  51292. 08015838 <xTaskGetTickCount>:
  51293. /*-----------------------------------------------------------*/
  51294. TickType_t xTaskGetTickCount( void )
  51295. {
  51296. 8015838: b480 push {r7}
  51297. 801583a: b083 sub sp, #12
  51298. 801583c: af00 add r7, sp, #0
  51299. TickType_t xTicks;
  51300. /* Critical section required if running on a 16 bit processor. */
  51301. portTICK_TYPE_ENTER_CRITICAL();
  51302. {
  51303. xTicks = xTickCount;
  51304. 801583e: 4b05 ldr r3, [pc, #20] @ (8015854 <xTaskGetTickCount+0x1c>)
  51305. 8015840: 681b ldr r3, [r3, #0]
  51306. 8015842: 607b str r3, [r7, #4]
  51307. }
  51308. portTICK_TYPE_EXIT_CRITICAL();
  51309. return xTicks;
  51310. 8015844: 687b ldr r3, [r7, #4]
  51311. }
  51312. 8015846: 4618 mov r0, r3
  51313. 8015848: 370c adds r7, #12
  51314. 801584a: 46bd mov sp, r7
  51315. 801584c: f85d 7b04 ldr.w r7, [sp], #4
  51316. 8015850: 4770 bx lr
  51317. 8015852: bf00 nop
  51318. 8015854: 24002eec .word 0x24002eec
  51319. 08015858 <xTaskIncrementTick>:
  51320. #endif /* INCLUDE_xTaskAbortDelay */
  51321. /*----------------------------------------------------------*/
  51322. BaseType_t xTaskIncrementTick( void )
  51323. {
  51324. 8015858: b580 push {r7, lr}
  51325. 801585a: b086 sub sp, #24
  51326. 801585c: af00 add r7, sp, #0
  51327. TCB_t * pxTCB;
  51328. TickType_t xItemValue;
  51329. BaseType_t xSwitchRequired = pdFALSE;
  51330. 801585e: 2300 movs r3, #0
  51331. 8015860: 617b str r3, [r7, #20]
  51332. /* Called by the portable layer each time a tick interrupt occurs.
  51333. Increments the tick then checks to see if the new tick value will cause any
  51334. tasks to be unblocked. */
  51335. traceTASK_INCREMENT_TICK( xTickCount );
  51336. if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE )
  51337. 8015862: 4b4f ldr r3, [pc, #316] @ (80159a0 <xTaskIncrementTick+0x148>)
  51338. 8015864: 681b ldr r3, [r3, #0]
  51339. 8015866: 2b00 cmp r3, #0
  51340. 8015868: f040 8090 bne.w 801598c <xTaskIncrementTick+0x134>
  51341. {
  51342. /* Minor optimisation. The tick count cannot change in this
  51343. block. */
  51344. const TickType_t xConstTickCount = xTickCount + ( TickType_t ) 1;
  51345. 801586c: 4b4d ldr r3, [pc, #308] @ (80159a4 <xTaskIncrementTick+0x14c>)
  51346. 801586e: 681b ldr r3, [r3, #0]
  51347. 8015870: 3301 adds r3, #1
  51348. 8015872: 613b str r3, [r7, #16]
  51349. /* Increment the RTOS tick, switching the delayed and overflowed
  51350. delayed lists if it wraps to 0. */
  51351. xTickCount = xConstTickCount;
  51352. 8015874: 4a4b ldr r2, [pc, #300] @ (80159a4 <xTaskIncrementTick+0x14c>)
  51353. 8015876: 693b ldr r3, [r7, #16]
  51354. 8015878: 6013 str r3, [r2, #0]
  51355. if( xConstTickCount == ( TickType_t ) 0U ) /*lint !e774 'if' does not always evaluate to false as it is looking for an overflow. */
  51356. 801587a: 693b ldr r3, [r7, #16]
  51357. 801587c: 2b00 cmp r3, #0
  51358. 801587e: d121 bne.n 80158c4 <xTaskIncrementTick+0x6c>
  51359. {
  51360. taskSWITCH_DELAYED_LISTS();
  51361. 8015880: 4b49 ldr r3, [pc, #292] @ (80159a8 <xTaskIncrementTick+0x150>)
  51362. 8015882: 681b ldr r3, [r3, #0]
  51363. 8015884: 681b ldr r3, [r3, #0]
  51364. 8015886: 2b00 cmp r3, #0
  51365. 8015888: d00b beq.n 80158a2 <xTaskIncrementTick+0x4a>
  51366. __asm volatile
  51367. 801588a: f04f 0350 mov.w r3, #80 @ 0x50
  51368. 801588e: f383 8811 msr BASEPRI, r3
  51369. 8015892: f3bf 8f6f isb sy
  51370. 8015896: f3bf 8f4f dsb sy
  51371. 801589a: 603b str r3, [r7, #0]
  51372. }
  51373. 801589c: bf00 nop
  51374. 801589e: bf00 nop
  51375. 80158a0: e7fd b.n 801589e <xTaskIncrementTick+0x46>
  51376. 80158a2: 4b41 ldr r3, [pc, #260] @ (80159a8 <xTaskIncrementTick+0x150>)
  51377. 80158a4: 681b ldr r3, [r3, #0]
  51378. 80158a6: 60fb str r3, [r7, #12]
  51379. 80158a8: 4b40 ldr r3, [pc, #256] @ (80159ac <xTaskIncrementTick+0x154>)
  51380. 80158aa: 681b ldr r3, [r3, #0]
  51381. 80158ac: 4a3e ldr r2, [pc, #248] @ (80159a8 <xTaskIncrementTick+0x150>)
  51382. 80158ae: 6013 str r3, [r2, #0]
  51383. 80158b0: 4a3e ldr r2, [pc, #248] @ (80159ac <xTaskIncrementTick+0x154>)
  51384. 80158b2: 68fb ldr r3, [r7, #12]
  51385. 80158b4: 6013 str r3, [r2, #0]
  51386. 80158b6: 4b3e ldr r3, [pc, #248] @ (80159b0 <xTaskIncrementTick+0x158>)
  51387. 80158b8: 681b ldr r3, [r3, #0]
  51388. 80158ba: 3301 adds r3, #1
  51389. 80158bc: 4a3c ldr r2, [pc, #240] @ (80159b0 <xTaskIncrementTick+0x158>)
  51390. 80158be: 6013 str r3, [r2, #0]
  51391. 80158c0: f000 fb18 bl 8015ef4 <prvResetNextTaskUnblockTime>
  51392. /* See if this tick has made a timeout expire. Tasks are stored in
  51393. the queue in the order of their wake time - meaning once one task
  51394. has been found whose block time has not expired there is no need to
  51395. look any further down the list. */
  51396. if( xConstTickCount >= xNextTaskUnblockTime )
  51397. 80158c4: 4b3b ldr r3, [pc, #236] @ (80159b4 <xTaskIncrementTick+0x15c>)
  51398. 80158c6: 681b ldr r3, [r3, #0]
  51399. 80158c8: 693a ldr r2, [r7, #16]
  51400. 80158ca: 429a cmp r2, r3
  51401. 80158cc: d349 bcc.n 8015962 <xTaskIncrementTick+0x10a>
  51402. {
  51403. for( ;; )
  51404. {
  51405. if( listLIST_IS_EMPTY( pxDelayedTaskList ) != pdFALSE )
  51406. 80158ce: 4b36 ldr r3, [pc, #216] @ (80159a8 <xTaskIncrementTick+0x150>)
  51407. 80158d0: 681b ldr r3, [r3, #0]
  51408. 80158d2: 681b ldr r3, [r3, #0]
  51409. 80158d4: 2b00 cmp r3, #0
  51410. 80158d6: d104 bne.n 80158e2 <xTaskIncrementTick+0x8a>
  51411. /* The delayed list is empty. Set xNextTaskUnblockTime
  51412. to the maximum possible value so it is extremely
  51413. unlikely that the
  51414. if( xTickCount >= xNextTaskUnblockTime ) test will pass
  51415. next time through. */
  51416. xNextTaskUnblockTime = portMAX_DELAY; /*lint !e961 MISRA exception as the casts are only redundant for some ports. */
  51417. 80158d8: 4b36 ldr r3, [pc, #216] @ (80159b4 <xTaskIncrementTick+0x15c>)
  51418. 80158da: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
  51419. 80158de: 601a str r2, [r3, #0]
  51420. break;
  51421. 80158e0: e03f b.n 8015962 <xTaskIncrementTick+0x10a>
  51422. {
  51423. /* The delayed list is not empty, get the value of the
  51424. item at the head of the delayed list. This is the time
  51425. at which the task at the head of the delayed list must
  51426. be removed from the Blocked state. */
  51427. 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. */
  51428. 80158e2: 4b31 ldr r3, [pc, #196] @ (80159a8 <xTaskIncrementTick+0x150>)
  51429. 80158e4: 681b ldr r3, [r3, #0]
  51430. 80158e6: 68db ldr r3, [r3, #12]
  51431. 80158e8: 68db ldr r3, [r3, #12]
  51432. 80158ea: 60bb str r3, [r7, #8]
  51433. xItemValue = listGET_LIST_ITEM_VALUE( &( pxTCB->xStateListItem ) );
  51434. 80158ec: 68bb ldr r3, [r7, #8]
  51435. 80158ee: 685b ldr r3, [r3, #4]
  51436. 80158f0: 607b str r3, [r7, #4]
  51437. if( xConstTickCount < xItemValue )
  51438. 80158f2: 693a ldr r2, [r7, #16]
  51439. 80158f4: 687b ldr r3, [r7, #4]
  51440. 80158f6: 429a cmp r2, r3
  51441. 80158f8: d203 bcs.n 8015902 <xTaskIncrementTick+0xaa>
  51442. /* It is not time to unblock this item yet, but the
  51443. item value is the time at which the task at the head
  51444. of the blocked list must be removed from the Blocked
  51445. state - so record the item value in
  51446. xNextTaskUnblockTime. */
  51447. xNextTaskUnblockTime = xItemValue;
  51448. 80158fa: 4a2e ldr r2, [pc, #184] @ (80159b4 <xTaskIncrementTick+0x15c>)
  51449. 80158fc: 687b ldr r3, [r7, #4]
  51450. 80158fe: 6013 str r3, [r2, #0]
  51451. break; /*lint !e9011 Code structure here is deedmed easier to understand with multiple breaks. */
  51452. 8015900: e02f b.n 8015962 <xTaskIncrementTick+0x10a>
  51453. {
  51454. mtCOVERAGE_TEST_MARKER();
  51455. }
  51456. /* It is time to remove the item from the Blocked state. */
  51457. ( void ) uxListRemove( &( pxTCB->xStateListItem ) );
  51458. 8015902: 68bb ldr r3, [r7, #8]
  51459. 8015904: 3304 adds r3, #4
  51460. 8015906: 4618 mov r0, r3
  51461. 8015908: f7fe fb06 bl 8013f18 <uxListRemove>
  51462. /* Is the task waiting on an event also? If so remove
  51463. it from the event list. */
  51464. if( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) != NULL )
  51465. 801590c: 68bb ldr r3, [r7, #8]
  51466. 801590e: 6a9b ldr r3, [r3, #40] @ 0x28
  51467. 8015910: 2b00 cmp r3, #0
  51468. 8015912: d004 beq.n 801591e <xTaskIncrementTick+0xc6>
  51469. {
  51470. ( void ) uxListRemove( &( pxTCB->xEventListItem ) );
  51471. 8015914: 68bb ldr r3, [r7, #8]
  51472. 8015916: 3318 adds r3, #24
  51473. 8015918: 4618 mov r0, r3
  51474. 801591a: f7fe fafd bl 8013f18 <uxListRemove>
  51475. mtCOVERAGE_TEST_MARKER();
  51476. }
  51477. /* Place the unblocked task into the appropriate ready
  51478. list. */
  51479. prvAddTaskToReadyList( pxTCB );
  51480. 801591e: 68bb ldr r3, [r7, #8]
  51481. 8015920: 6ada ldr r2, [r3, #44] @ 0x2c
  51482. 8015922: 4b25 ldr r3, [pc, #148] @ (80159b8 <xTaskIncrementTick+0x160>)
  51483. 8015924: 681b ldr r3, [r3, #0]
  51484. 8015926: 429a cmp r2, r3
  51485. 8015928: d903 bls.n 8015932 <xTaskIncrementTick+0xda>
  51486. 801592a: 68bb ldr r3, [r7, #8]
  51487. 801592c: 6adb ldr r3, [r3, #44] @ 0x2c
  51488. 801592e: 4a22 ldr r2, [pc, #136] @ (80159b8 <xTaskIncrementTick+0x160>)
  51489. 8015930: 6013 str r3, [r2, #0]
  51490. 8015932: 68bb ldr r3, [r7, #8]
  51491. 8015934: 6ada ldr r2, [r3, #44] @ 0x2c
  51492. 8015936: 4613 mov r3, r2
  51493. 8015938: 009b lsls r3, r3, #2
  51494. 801593a: 4413 add r3, r2
  51495. 801593c: 009b lsls r3, r3, #2
  51496. 801593e: 4a1f ldr r2, [pc, #124] @ (80159bc <xTaskIncrementTick+0x164>)
  51497. 8015940: 441a add r2, r3
  51498. 8015942: 68bb ldr r3, [r7, #8]
  51499. 8015944: 3304 adds r3, #4
  51500. 8015946: 4619 mov r1, r3
  51501. 8015948: 4610 mov r0, r2
  51502. 801594a: f7fe fa88 bl 8013e5e <vListInsertEnd>
  51503. {
  51504. /* Preemption is on, but a context switch should
  51505. only be performed if the unblocked task has a
  51506. priority that is equal to or higher than the
  51507. currently executing task. */
  51508. if( pxTCB->uxPriority >= pxCurrentTCB->uxPriority )
  51509. 801594e: 68bb ldr r3, [r7, #8]
  51510. 8015950: 6ada ldr r2, [r3, #44] @ 0x2c
  51511. 8015952: 4b1b ldr r3, [pc, #108] @ (80159c0 <xTaskIncrementTick+0x168>)
  51512. 8015954: 681b ldr r3, [r3, #0]
  51513. 8015956: 6adb ldr r3, [r3, #44] @ 0x2c
  51514. 8015958: 429a cmp r2, r3
  51515. 801595a: d3b8 bcc.n 80158ce <xTaskIncrementTick+0x76>
  51516. {
  51517. xSwitchRequired = pdTRUE;
  51518. 801595c: 2301 movs r3, #1
  51519. 801595e: 617b str r3, [r7, #20]
  51520. if( listLIST_IS_EMPTY( pxDelayedTaskList ) != pdFALSE )
  51521. 8015960: e7b5 b.n 80158ce <xTaskIncrementTick+0x76>
  51522. /* Tasks of equal priority to the currently running task will share
  51523. processing time (time slice) if preemption is on, and the application
  51524. writer has not explicitly turned time slicing off. */
  51525. #if ( ( configUSE_PREEMPTION == 1 ) && ( configUSE_TIME_SLICING == 1 ) )
  51526. {
  51527. if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ pxCurrentTCB->uxPriority ] ) ) > ( UBaseType_t ) 1 )
  51528. 8015962: 4b17 ldr r3, [pc, #92] @ (80159c0 <xTaskIncrementTick+0x168>)
  51529. 8015964: 681b ldr r3, [r3, #0]
  51530. 8015966: 6ada ldr r2, [r3, #44] @ 0x2c
  51531. 8015968: 4914 ldr r1, [pc, #80] @ (80159bc <xTaskIncrementTick+0x164>)
  51532. 801596a: 4613 mov r3, r2
  51533. 801596c: 009b lsls r3, r3, #2
  51534. 801596e: 4413 add r3, r2
  51535. 8015970: 009b lsls r3, r3, #2
  51536. 8015972: 440b add r3, r1
  51537. 8015974: 681b ldr r3, [r3, #0]
  51538. 8015976: 2b01 cmp r3, #1
  51539. 8015978: d901 bls.n 801597e <xTaskIncrementTick+0x126>
  51540. {
  51541. xSwitchRequired = pdTRUE;
  51542. 801597a: 2301 movs r3, #1
  51543. 801597c: 617b str r3, [r7, #20]
  51544. }
  51545. #endif /* configUSE_TICK_HOOK */
  51546. #if ( configUSE_PREEMPTION == 1 )
  51547. {
  51548. if( xYieldPending != pdFALSE )
  51549. 801597e: 4b11 ldr r3, [pc, #68] @ (80159c4 <xTaskIncrementTick+0x16c>)
  51550. 8015980: 681b ldr r3, [r3, #0]
  51551. 8015982: 2b00 cmp r3, #0
  51552. 8015984: d007 beq.n 8015996 <xTaskIncrementTick+0x13e>
  51553. {
  51554. xSwitchRequired = pdTRUE;
  51555. 8015986: 2301 movs r3, #1
  51556. 8015988: 617b str r3, [r7, #20]
  51557. 801598a: e004 b.n 8015996 <xTaskIncrementTick+0x13e>
  51558. }
  51559. #endif /* configUSE_PREEMPTION */
  51560. }
  51561. else
  51562. {
  51563. ++xPendedTicks;
  51564. 801598c: 4b0e ldr r3, [pc, #56] @ (80159c8 <xTaskIncrementTick+0x170>)
  51565. 801598e: 681b ldr r3, [r3, #0]
  51566. 8015990: 3301 adds r3, #1
  51567. 8015992: 4a0d ldr r2, [pc, #52] @ (80159c8 <xTaskIncrementTick+0x170>)
  51568. 8015994: 6013 str r3, [r2, #0]
  51569. vApplicationTickHook();
  51570. }
  51571. #endif
  51572. }
  51573. return xSwitchRequired;
  51574. 8015996: 697b ldr r3, [r7, #20]
  51575. }
  51576. 8015998: 4618 mov r0, r3
  51577. 801599a: 3718 adds r7, #24
  51578. 801599c: 46bd mov sp, r7
  51579. 801599e: bd80 pop {r7, pc}
  51580. 80159a0: 24002f10 .word 0x24002f10
  51581. 80159a4: 24002eec .word 0x24002eec
  51582. 80159a8: 24002ea0 .word 0x24002ea0
  51583. 80159ac: 24002ea4 .word 0x24002ea4
  51584. 80159b0: 24002f00 .word 0x24002f00
  51585. 80159b4: 24002f08 .word 0x24002f08
  51586. 80159b8: 24002ef0 .word 0x24002ef0
  51587. 80159bc: 24002a18 .word 0x24002a18
  51588. 80159c0: 24002a14 .word 0x24002a14
  51589. 80159c4: 24002efc .word 0x24002efc
  51590. 80159c8: 24002ef8 .word 0x24002ef8
  51591. 080159cc <vTaskSwitchContext>:
  51592. #endif /* configUSE_APPLICATION_TASK_TAG */
  51593. /*-----------------------------------------------------------*/
  51594. void vTaskSwitchContext( void )
  51595. {
  51596. 80159cc: b580 push {r7, lr}
  51597. 80159ce: b084 sub sp, #16
  51598. 80159d0: af00 add r7, sp, #0
  51599. if( uxSchedulerSuspended != ( UBaseType_t ) pdFALSE )
  51600. 80159d2: 4b32 ldr r3, [pc, #200] @ (8015a9c <vTaskSwitchContext+0xd0>)
  51601. 80159d4: 681b ldr r3, [r3, #0]
  51602. 80159d6: 2b00 cmp r3, #0
  51603. 80159d8: d003 beq.n 80159e2 <vTaskSwitchContext+0x16>
  51604. {
  51605. /* The scheduler is currently suspended - do not allow a context
  51606. switch. */
  51607. xYieldPending = pdTRUE;
  51608. 80159da: 4b31 ldr r3, [pc, #196] @ (8015aa0 <vTaskSwitchContext+0xd4>)
  51609. 80159dc: 2201 movs r2, #1
  51610. 80159de: 601a str r2, [r3, #0]
  51611. for additional information. */
  51612. _impure_ptr = &( pxCurrentTCB->xNewLib_reent );
  51613. }
  51614. #endif /* configUSE_NEWLIB_REENTRANT */
  51615. }
  51616. }
  51617. 80159e0: e058 b.n 8015a94 <vTaskSwitchContext+0xc8>
  51618. xYieldPending = pdFALSE;
  51619. 80159e2: 4b2f ldr r3, [pc, #188] @ (8015aa0 <vTaskSwitchContext+0xd4>)
  51620. 80159e4: 2200 movs r2, #0
  51621. 80159e6: 601a str r2, [r3, #0]
  51622. taskCHECK_FOR_STACK_OVERFLOW();
  51623. 80159e8: 4b2e ldr r3, [pc, #184] @ (8015aa4 <vTaskSwitchContext+0xd8>)
  51624. 80159ea: 681b ldr r3, [r3, #0]
  51625. 80159ec: 681a ldr r2, [r3, #0]
  51626. 80159ee: 4b2d ldr r3, [pc, #180] @ (8015aa4 <vTaskSwitchContext+0xd8>)
  51627. 80159f0: 681b ldr r3, [r3, #0]
  51628. 80159f2: 6b1b ldr r3, [r3, #48] @ 0x30
  51629. 80159f4: 429a cmp r2, r3
  51630. 80159f6: d808 bhi.n 8015a0a <vTaskSwitchContext+0x3e>
  51631. 80159f8: 4b2a ldr r3, [pc, #168] @ (8015aa4 <vTaskSwitchContext+0xd8>)
  51632. 80159fa: 681a ldr r2, [r3, #0]
  51633. 80159fc: 4b29 ldr r3, [pc, #164] @ (8015aa4 <vTaskSwitchContext+0xd8>)
  51634. 80159fe: 681b ldr r3, [r3, #0]
  51635. 8015a00: 3334 adds r3, #52 @ 0x34
  51636. 8015a02: 4619 mov r1, r3
  51637. 8015a04: 4610 mov r0, r2
  51638. 8015a06: f7ea fe33 bl 8000670 <vApplicationStackOverflowHook>
  51639. 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. */
  51640. 8015a0a: 4b27 ldr r3, [pc, #156] @ (8015aa8 <vTaskSwitchContext+0xdc>)
  51641. 8015a0c: 681b ldr r3, [r3, #0]
  51642. 8015a0e: 60fb str r3, [r7, #12]
  51643. 8015a10: e011 b.n 8015a36 <vTaskSwitchContext+0x6a>
  51644. 8015a12: 68fb ldr r3, [r7, #12]
  51645. 8015a14: 2b00 cmp r3, #0
  51646. 8015a16: d10b bne.n 8015a30 <vTaskSwitchContext+0x64>
  51647. __asm volatile
  51648. 8015a18: f04f 0350 mov.w r3, #80 @ 0x50
  51649. 8015a1c: f383 8811 msr BASEPRI, r3
  51650. 8015a20: f3bf 8f6f isb sy
  51651. 8015a24: f3bf 8f4f dsb sy
  51652. 8015a28: 607b str r3, [r7, #4]
  51653. }
  51654. 8015a2a: bf00 nop
  51655. 8015a2c: bf00 nop
  51656. 8015a2e: e7fd b.n 8015a2c <vTaskSwitchContext+0x60>
  51657. 8015a30: 68fb ldr r3, [r7, #12]
  51658. 8015a32: 3b01 subs r3, #1
  51659. 8015a34: 60fb str r3, [r7, #12]
  51660. 8015a36: 491d ldr r1, [pc, #116] @ (8015aac <vTaskSwitchContext+0xe0>)
  51661. 8015a38: 68fa ldr r2, [r7, #12]
  51662. 8015a3a: 4613 mov r3, r2
  51663. 8015a3c: 009b lsls r3, r3, #2
  51664. 8015a3e: 4413 add r3, r2
  51665. 8015a40: 009b lsls r3, r3, #2
  51666. 8015a42: 440b add r3, r1
  51667. 8015a44: 681b ldr r3, [r3, #0]
  51668. 8015a46: 2b00 cmp r3, #0
  51669. 8015a48: d0e3 beq.n 8015a12 <vTaskSwitchContext+0x46>
  51670. 8015a4a: 68fa ldr r2, [r7, #12]
  51671. 8015a4c: 4613 mov r3, r2
  51672. 8015a4e: 009b lsls r3, r3, #2
  51673. 8015a50: 4413 add r3, r2
  51674. 8015a52: 009b lsls r3, r3, #2
  51675. 8015a54: 4a15 ldr r2, [pc, #84] @ (8015aac <vTaskSwitchContext+0xe0>)
  51676. 8015a56: 4413 add r3, r2
  51677. 8015a58: 60bb str r3, [r7, #8]
  51678. 8015a5a: 68bb ldr r3, [r7, #8]
  51679. 8015a5c: 685b ldr r3, [r3, #4]
  51680. 8015a5e: 685a ldr r2, [r3, #4]
  51681. 8015a60: 68bb ldr r3, [r7, #8]
  51682. 8015a62: 605a str r2, [r3, #4]
  51683. 8015a64: 68bb ldr r3, [r7, #8]
  51684. 8015a66: 685a ldr r2, [r3, #4]
  51685. 8015a68: 68bb ldr r3, [r7, #8]
  51686. 8015a6a: 3308 adds r3, #8
  51687. 8015a6c: 429a cmp r2, r3
  51688. 8015a6e: d104 bne.n 8015a7a <vTaskSwitchContext+0xae>
  51689. 8015a70: 68bb ldr r3, [r7, #8]
  51690. 8015a72: 685b ldr r3, [r3, #4]
  51691. 8015a74: 685a ldr r2, [r3, #4]
  51692. 8015a76: 68bb ldr r3, [r7, #8]
  51693. 8015a78: 605a str r2, [r3, #4]
  51694. 8015a7a: 68bb ldr r3, [r7, #8]
  51695. 8015a7c: 685b ldr r3, [r3, #4]
  51696. 8015a7e: 68db ldr r3, [r3, #12]
  51697. 8015a80: 4a08 ldr r2, [pc, #32] @ (8015aa4 <vTaskSwitchContext+0xd8>)
  51698. 8015a82: 6013 str r3, [r2, #0]
  51699. 8015a84: 4a08 ldr r2, [pc, #32] @ (8015aa8 <vTaskSwitchContext+0xdc>)
  51700. 8015a86: 68fb ldr r3, [r7, #12]
  51701. 8015a88: 6013 str r3, [r2, #0]
  51702. _impure_ptr = &( pxCurrentTCB->xNewLib_reent );
  51703. 8015a8a: 4b06 ldr r3, [pc, #24] @ (8015aa4 <vTaskSwitchContext+0xd8>)
  51704. 8015a8c: 681b ldr r3, [r3, #0]
  51705. 8015a8e: 3354 adds r3, #84 @ 0x54
  51706. 8015a90: 4a07 ldr r2, [pc, #28] @ (8015ab0 <vTaskSwitchContext+0xe4>)
  51707. 8015a92: 6013 str r3, [r2, #0]
  51708. }
  51709. 8015a94: bf00 nop
  51710. 8015a96: 3710 adds r7, #16
  51711. 8015a98: 46bd mov sp, r7
  51712. 8015a9a: bd80 pop {r7, pc}
  51713. 8015a9c: 24002f10 .word 0x24002f10
  51714. 8015aa0: 24002efc .word 0x24002efc
  51715. 8015aa4: 24002a14 .word 0x24002a14
  51716. 8015aa8: 24002ef0 .word 0x24002ef0
  51717. 8015aac: 24002a18 .word 0x24002a18
  51718. 8015ab0: 24000054 .word 0x24000054
  51719. 08015ab4 <vTaskPlaceOnEventList>:
  51720. /*-----------------------------------------------------------*/
  51721. void vTaskPlaceOnEventList( List_t * const pxEventList, const TickType_t xTicksToWait )
  51722. {
  51723. 8015ab4: b580 push {r7, lr}
  51724. 8015ab6: b084 sub sp, #16
  51725. 8015ab8: af00 add r7, sp, #0
  51726. 8015aba: 6078 str r0, [r7, #4]
  51727. 8015abc: 6039 str r1, [r7, #0]
  51728. configASSERT( pxEventList );
  51729. 8015abe: 687b ldr r3, [r7, #4]
  51730. 8015ac0: 2b00 cmp r3, #0
  51731. 8015ac2: d10b bne.n 8015adc <vTaskPlaceOnEventList+0x28>
  51732. __asm volatile
  51733. 8015ac4: f04f 0350 mov.w r3, #80 @ 0x50
  51734. 8015ac8: f383 8811 msr BASEPRI, r3
  51735. 8015acc: f3bf 8f6f isb sy
  51736. 8015ad0: f3bf 8f4f dsb sy
  51737. 8015ad4: 60fb str r3, [r7, #12]
  51738. }
  51739. 8015ad6: bf00 nop
  51740. 8015ad8: bf00 nop
  51741. 8015ada: e7fd b.n 8015ad8 <vTaskPlaceOnEventList+0x24>
  51742. /* Place the event list item of the TCB in the appropriate event list.
  51743. This is placed in the list in priority order so the highest priority task
  51744. is the first to be woken by the event. The queue that contains the event
  51745. list is locked, preventing simultaneous access from interrupts. */
  51746. vListInsert( pxEventList, &( pxCurrentTCB->xEventListItem ) );
  51747. 8015adc: 4b07 ldr r3, [pc, #28] @ (8015afc <vTaskPlaceOnEventList+0x48>)
  51748. 8015ade: 681b ldr r3, [r3, #0]
  51749. 8015ae0: 3318 adds r3, #24
  51750. 8015ae2: 4619 mov r1, r3
  51751. 8015ae4: 6878 ldr r0, [r7, #4]
  51752. 8015ae6: f7fe f9de bl 8013ea6 <vListInsert>
  51753. prvAddCurrentTaskToDelayedList( xTicksToWait, pdTRUE );
  51754. 8015aea: 2101 movs r1, #1
  51755. 8015aec: 6838 ldr r0, [r7, #0]
  51756. 8015aee: f000 fded bl 80166cc <prvAddCurrentTaskToDelayedList>
  51757. }
  51758. 8015af2: bf00 nop
  51759. 8015af4: 3710 adds r7, #16
  51760. 8015af6: 46bd mov sp, r7
  51761. 8015af8: bd80 pop {r7, pc}
  51762. 8015afa: bf00 nop
  51763. 8015afc: 24002a14 .word 0x24002a14
  51764. 08015b00 <vTaskPlaceOnEventListRestricted>:
  51765. /*-----------------------------------------------------------*/
  51766. #if( configUSE_TIMERS == 1 )
  51767. void vTaskPlaceOnEventListRestricted( List_t * const pxEventList, TickType_t xTicksToWait, const BaseType_t xWaitIndefinitely )
  51768. {
  51769. 8015b00: b580 push {r7, lr}
  51770. 8015b02: b086 sub sp, #24
  51771. 8015b04: af00 add r7, sp, #0
  51772. 8015b06: 60f8 str r0, [r7, #12]
  51773. 8015b08: 60b9 str r1, [r7, #8]
  51774. 8015b0a: 607a str r2, [r7, #4]
  51775. configASSERT( pxEventList );
  51776. 8015b0c: 68fb ldr r3, [r7, #12]
  51777. 8015b0e: 2b00 cmp r3, #0
  51778. 8015b10: d10b bne.n 8015b2a <vTaskPlaceOnEventListRestricted+0x2a>
  51779. __asm volatile
  51780. 8015b12: f04f 0350 mov.w r3, #80 @ 0x50
  51781. 8015b16: f383 8811 msr BASEPRI, r3
  51782. 8015b1a: f3bf 8f6f isb sy
  51783. 8015b1e: f3bf 8f4f dsb sy
  51784. 8015b22: 617b str r3, [r7, #20]
  51785. }
  51786. 8015b24: bf00 nop
  51787. 8015b26: bf00 nop
  51788. 8015b28: e7fd b.n 8015b26 <vTaskPlaceOnEventListRestricted+0x26>
  51789. /* Place the event list item of the TCB in the appropriate event list.
  51790. In this case it is assume that this is the only task that is going to
  51791. be waiting on this event list, so the faster vListInsertEnd() function
  51792. can be used in place of vListInsert. */
  51793. vListInsertEnd( pxEventList, &( pxCurrentTCB->xEventListItem ) );
  51794. 8015b2a: 4b0a ldr r3, [pc, #40] @ (8015b54 <vTaskPlaceOnEventListRestricted+0x54>)
  51795. 8015b2c: 681b ldr r3, [r3, #0]
  51796. 8015b2e: 3318 adds r3, #24
  51797. 8015b30: 4619 mov r1, r3
  51798. 8015b32: 68f8 ldr r0, [r7, #12]
  51799. 8015b34: f7fe f993 bl 8013e5e <vListInsertEnd>
  51800. /* If the task should block indefinitely then set the block time to a
  51801. value that will be recognised as an indefinite delay inside the
  51802. prvAddCurrentTaskToDelayedList() function. */
  51803. if( xWaitIndefinitely != pdFALSE )
  51804. 8015b38: 687b ldr r3, [r7, #4]
  51805. 8015b3a: 2b00 cmp r3, #0
  51806. 8015b3c: d002 beq.n 8015b44 <vTaskPlaceOnEventListRestricted+0x44>
  51807. {
  51808. xTicksToWait = portMAX_DELAY;
  51809. 8015b3e: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  51810. 8015b42: 60bb str r3, [r7, #8]
  51811. }
  51812. traceTASK_DELAY_UNTIL( ( xTickCount + xTicksToWait ) );
  51813. prvAddCurrentTaskToDelayedList( xTicksToWait, xWaitIndefinitely );
  51814. 8015b44: 6879 ldr r1, [r7, #4]
  51815. 8015b46: 68b8 ldr r0, [r7, #8]
  51816. 8015b48: f000 fdc0 bl 80166cc <prvAddCurrentTaskToDelayedList>
  51817. }
  51818. 8015b4c: bf00 nop
  51819. 8015b4e: 3718 adds r7, #24
  51820. 8015b50: 46bd mov sp, r7
  51821. 8015b52: bd80 pop {r7, pc}
  51822. 8015b54: 24002a14 .word 0x24002a14
  51823. 08015b58 <xTaskRemoveFromEventList>:
  51824. #endif /* configUSE_TIMERS */
  51825. /*-----------------------------------------------------------*/
  51826. BaseType_t xTaskRemoveFromEventList( const List_t * const pxEventList )
  51827. {
  51828. 8015b58: b580 push {r7, lr}
  51829. 8015b5a: b086 sub sp, #24
  51830. 8015b5c: af00 add r7, sp, #0
  51831. 8015b5e: 6078 str r0, [r7, #4]
  51832. get called - the lock count on the queue will get modified instead. This
  51833. means exclusive access to the event list is guaranteed here.
  51834. This function assumes that a check has already been made to ensure that
  51835. pxEventList is not empty. */
  51836. 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. */
  51837. 8015b60: 687b ldr r3, [r7, #4]
  51838. 8015b62: 68db ldr r3, [r3, #12]
  51839. 8015b64: 68db ldr r3, [r3, #12]
  51840. 8015b66: 613b str r3, [r7, #16]
  51841. configASSERT( pxUnblockedTCB );
  51842. 8015b68: 693b ldr r3, [r7, #16]
  51843. 8015b6a: 2b00 cmp r3, #0
  51844. 8015b6c: d10b bne.n 8015b86 <xTaskRemoveFromEventList+0x2e>
  51845. __asm volatile
  51846. 8015b6e: f04f 0350 mov.w r3, #80 @ 0x50
  51847. 8015b72: f383 8811 msr BASEPRI, r3
  51848. 8015b76: f3bf 8f6f isb sy
  51849. 8015b7a: f3bf 8f4f dsb sy
  51850. 8015b7e: 60fb str r3, [r7, #12]
  51851. }
  51852. 8015b80: bf00 nop
  51853. 8015b82: bf00 nop
  51854. 8015b84: e7fd b.n 8015b82 <xTaskRemoveFromEventList+0x2a>
  51855. ( void ) uxListRemove( &( pxUnblockedTCB->xEventListItem ) );
  51856. 8015b86: 693b ldr r3, [r7, #16]
  51857. 8015b88: 3318 adds r3, #24
  51858. 8015b8a: 4618 mov r0, r3
  51859. 8015b8c: f7fe f9c4 bl 8013f18 <uxListRemove>
  51860. if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE )
  51861. 8015b90: 4b1d ldr r3, [pc, #116] @ (8015c08 <xTaskRemoveFromEventList+0xb0>)
  51862. 8015b92: 681b ldr r3, [r3, #0]
  51863. 8015b94: 2b00 cmp r3, #0
  51864. 8015b96: d11d bne.n 8015bd4 <xTaskRemoveFromEventList+0x7c>
  51865. {
  51866. ( void ) uxListRemove( &( pxUnblockedTCB->xStateListItem ) );
  51867. 8015b98: 693b ldr r3, [r7, #16]
  51868. 8015b9a: 3304 adds r3, #4
  51869. 8015b9c: 4618 mov r0, r3
  51870. 8015b9e: f7fe f9bb bl 8013f18 <uxListRemove>
  51871. prvAddTaskToReadyList( pxUnblockedTCB );
  51872. 8015ba2: 693b ldr r3, [r7, #16]
  51873. 8015ba4: 6ada ldr r2, [r3, #44] @ 0x2c
  51874. 8015ba6: 4b19 ldr r3, [pc, #100] @ (8015c0c <xTaskRemoveFromEventList+0xb4>)
  51875. 8015ba8: 681b ldr r3, [r3, #0]
  51876. 8015baa: 429a cmp r2, r3
  51877. 8015bac: d903 bls.n 8015bb6 <xTaskRemoveFromEventList+0x5e>
  51878. 8015bae: 693b ldr r3, [r7, #16]
  51879. 8015bb0: 6adb ldr r3, [r3, #44] @ 0x2c
  51880. 8015bb2: 4a16 ldr r2, [pc, #88] @ (8015c0c <xTaskRemoveFromEventList+0xb4>)
  51881. 8015bb4: 6013 str r3, [r2, #0]
  51882. 8015bb6: 693b ldr r3, [r7, #16]
  51883. 8015bb8: 6ada ldr r2, [r3, #44] @ 0x2c
  51884. 8015bba: 4613 mov r3, r2
  51885. 8015bbc: 009b lsls r3, r3, #2
  51886. 8015bbe: 4413 add r3, r2
  51887. 8015bc0: 009b lsls r3, r3, #2
  51888. 8015bc2: 4a13 ldr r2, [pc, #76] @ (8015c10 <xTaskRemoveFromEventList+0xb8>)
  51889. 8015bc4: 441a add r2, r3
  51890. 8015bc6: 693b ldr r3, [r7, #16]
  51891. 8015bc8: 3304 adds r3, #4
  51892. 8015bca: 4619 mov r1, r3
  51893. 8015bcc: 4610 mov r0, r2
  51894. 8015bce: f7fe f946 bl 8013e5e <vListInsertEnd>
  51895. 8015bd2: e005 b.n 8015be0 <xTaskRemoveFromEventList+0x88>
  51896. }
  51897. else
  51898. {
  51899. /* The delayed and ready lists cannot be accessed, so hold this task
  51900. pending until the scheduler is resumed. */
  51901. vListInsertEnd( &( xPendingReadyList ), &( pxUnblockedTCB->xEventListItem ) );
  51902. 8015bd4: 693b ldr r3, [r7, #16]
  51903. 8015bd6: 3318 adds r3, #24
  51904. 8015bd8: 4619 mov r1, r3
  51905. 8015bda: 480e ldr r0, [pc, #56] @ (8015c14 <xTaskRemoveFromEventList+0xbc>)
  51906. 8015bdc: f7fe f93f bl 8013e5e <vListInsertEnd>
  51907. }
  51908. if( pxUnblockedTCB->uxPriority > pxCurrentTCB->uxPriority )
  51909. 8015be0: 693b ldr r3, [r7, #16]
  51910. 8015be2: 6ada ldr r2, [r3, #44] @ 0x2c
  51911. 8015be4: 4b0c ldr r3, [pc, #48] @ (8015c18 <xTaskRemoveFromEventList+0xc0>)
  51912. 8015be6: 681b ldr r3, [r3, #0]
  51913. 8015be8: 6adb ldr r3, [r3, #44] @ 0x2c
  51914. 8015bea: 429a cmp r2, r3
  51915. 8015bec: d905 bls.n 8015bfa <xTaskRemoveFromEventList+0xa2>
  51916. {
  51917. /* Return true if the task removed from the event list has a higher
  51918. priority than the calling task. This allows the calling task to know if
  51919. it should force a context switch now. */
  51920. xReturn = pdTRUE;
  51921. 8015bee: 2301 movs r3, #1
  51922. 8015bf0: 617b str r3, [r7, #20]
  51923. /* Mark that a yield is pending in case the user is not using the
  51924. "xHigherPriorityTaskWoken" parameter to an ISR safe FreeRTOS function. */
  51925. xYieldPending = pdTRUE;
  51926. 8015bf2: 4b0a ldr r3, [pc, #40] @ (8015c1c <xTaskRemoveFromEventList+0xc4>)
  51927. 8015bf4: 2201 movs r2, #1
  51928. 8015bf6: 601a str r2, [r3, #0]
  51929. 8015bf8: e001 b.n 8015bfe <xTaskRemoveFromEventList+0xa6>
  51930. }
  51931. else
  51932. {
  51933. xReturn = pdFALSE;
  51934. 8015bfa: 2300 movs r3, #0
  51935. 8015bfc: 617b str r3, [r7, #20]
  51936. }
  51937. return xReturn;
  51938. 8015bfe: 697b ldr r3, [r7, #20]
  51939. }
  51940. 8015c00: 4618 mov r0, r3
  51941. 8015c02: 3718 adds r7, #24
  51942. 8015c04: 46bd mov sp, r7
  51943. 8015c06: bd80 pop {r7, pc}
  51944. 8015c08: 24002f10 .word 0x24002f10
  51945. 8015c0c: 24002ef0 .word 0x24002ef0
  51946. 8015c10: 24002a18 .word 0x24002a18
  51947. 8015c14: 24002ea8 .word 0x24002ea8
  51948. 8015c18: 24002a14 .word 0x24002a14
  51949. 8015c1c: 24002efc .word 0x24002efc
  51950. 08015c20 <vTaskSetTimeOutState>:
  51951. }
  51952. }
  51953. /*-----------------------------------------------------------*/
  51954. void vTaskSetTimeOutState( TimeOut_t * const pxTimeOut )
  51955. {
  51956. 8015c20: b580 push {r7, lr}
  51957. 8015c22: b084 sub sp, #16
  51958. 8015c24: af00 add r7, sp, #0
  51959. 8015c26: 6078 str r0, [r7, #4]
  51960. configASSERT( pxTimeOut );
  51961. 8015c28: 687b ldr r3, [r7, #4]
  51962. 8015c2a: 2b00 cmp r3, #0
  51963. 8015c2c: d10b bne.n 8015c46 <vTaskSetTimeOutState+0x26>
  51964. __asm volatile
  51965. 8015c2e: f04f 0350 mov.w r3, #80 @ 0x50
  51966. 8015c32: f383 8811 msr BASEPRI, r3
  51967. 8015c36: f3bf 8f6f isb sy
  51968. 8015c3a: f3bf 8f4f dsb sy
  51969. 8015c3e: 60fb str r3, [r7, #12]
  51970. }
  51971. 8015c40: bf00 nop
  51972. 8015c42: bf00 nop
  51973. 8015c44: e7fd b.n 8015c42 <vTaskSetTimeOutState+0x22>
  51974. taskENTER_CRITICAL();
  51975. 8015c46: f001 fb07 bl 8017258 <vPortEnterCritical>
  51976. {
  51977. pxTimeOut->xOverflowCount = xNumOfOverflows;
  51978. 8015c4a: 4b07 ldr r3, [pc, #28] @ (8015c68 <vTaskSetTimeOutState+0x48>)
  51979. 8015c4c: 681a ldr r2, [r3, #0]
  51980. 8015c4e: 687b ldr r3, [r7, #4]
  51981. 8015c50: 601a str r2, [r3, #0]
  51982. pxTimeOut->xTimeOnEntering = xTickCount;
  51983. 8015c52: 4b06 ldr r3, [pc, #24] @ (8015c6c <vTaskSetTimeOutState+0x4c>)
  51984. 8015c54: 681a ldr r2, [r3, #0]
  51985. 8015c56: 687b ldr r3, [r7, #4]
  51986. 8015c58: 605a str r2, [r3, #4]
  51987. }
  51988. taskEXIT_CRITICAL();
  51989. 8015c5a: f001 fb2f bl 80172bc <vPortExitCritical>
  51990. }
  51991. 8015c5e: bf00 nop
  51992. 8015c60: 3710 adds r7, #16
  51993. 8015c62: 46bd mov sp, r7
  51994. 8015c64: bd80 pop {r7, pc}
  51995. 8015c66: bf00 nop
  51996. 8015c68: 24002f00 .word 0x24002f00
  51997. 8015c6c: 24002eec .word 0x24002eec
  51998. 08015c70 <vTaskInternalSetTimeOutState>:
  51999. /*-----------------------------------------------------------*/
  52000. void vTaskInternalSetTimeOutState( TimeOut_t * const pxTimeOut )
  52001. {
  52002. 8015c70: b480 push {r7}
  52003. 8015c72: b083 sub sp, #12
  52004. 8015c74: af00 add r7, sp, #0
  52005. 8015c76: 6078 str r0, [r7, #4]
  52006. /* For internal use only as it does not use a critical section. */
  52007. pxTimeOut->xOverflowCount = xNumOfOverflows;
  52008. 8015c78: 4b06 ldr r3, [pc, #24] @ (8015c94 <vTaskInternalSetTimeOutState+0x24>)
  52009. 8015c7a: 681a ldr r2, [r3, #0]
  52010. 8015c7c: 687b ldr r3, [r7, #4]
  52011. 8015c7e: 601a str r2, [r3, #0]
  52012. pxTimeOut->xTimeOnEntering = xTickCount;
  52013. 8015c80: 4b05 ldr r3, [pc, #20] @ (8015c98 <vTaskInternalSetTimeOutState+0x28>)
  52014. 8015c82: 681a ldr r2, [r3, #0]
  52015. 8015c84: 687b ldr r3, [r7, #4]
  52016. 8015c86: 605a str r2, [r3, #4]
  52017. }
  52018. 8015c88: bf00 nop
  52019. 8015c8a: 370c adds r7, #12
  52020. 8015c8c: 46bd mov sp, r7
  52021. 8015c8e: f85d 7b04 ldr.w r7, [sp], #4
  52022. 8015c92: 4770 bx lr
  52023. 8015c94: 24002f00 .word 0x24002f00
  52024. 8015c98: 24002eec .word 0x24002eec
  52025. 08015c9c <xTaskCheckForTimeOut>:
  52026. /*-----------------------------------------------------------*/
  52027. BaseType_t xTaskCheckForTimeOut( TimeOut_t * const pxTimeOut, TickType_t * const pxTicksToWait )
  52028. {
  52029. 8015c9c: b580 push {r7, lr}
  52030. 8015c9e: b088 sub sp, #32
  52031. 8015ca0: af00 add r7, sp, #0
  52032. 8015ca2: 6078 str r0, [r7, #4]
  52033. 8015ca4: 6039 str r1, [r7, #0]
  52034. BaseType_t xReturn;
  52035. configASSERT( pxTimeOut );
  52036. 8015ca6: 687b ldr r3, [r7, #4]
  52037. 8015ca8: 2b00 cmp r3, #0
  52038. 8015caa: d10b bne.n 8015cc4 <xTaskCheckForTimeOut+0x28>
  52039. __asm volatile
  52040. 8015cac: f04f 0350 mov.w r3, #80 @ 0x50
  52041. 8015cb0: f383 8811 msr BASEPRI, r3
  52042. 8015cb4: f3bf 8f6f isb sy
  52043. 8015cb8: f3bf 8f4f dsb sy
  52044. 8015cbc: 613b str r3, [r7, #16]
  52045. }
  52046. 8015cbe: bf00 nop
  52047. 8015cc0: bf00 nop
  52048. 8015cc2: e7fd b.n 8015cc0 <xTaskCheckForTimeOut+0x24>
  52049. configASSERT( pxTicksToWait );
  52050. 8015cc4: 683b ldr r3, [r7, #0]
  52051. 8015cc6: 2b00 cmp r3, #0
  52052. 8015cc8: d10b bne.n 8015ce2 <xTaskCheckForTimeOut+0x46>
  52053. __asm volatile
  52054. 8015cca: f04f 0350 mov.w r3, #80 @ 0x50
  52055. 8015cce: f383 8811 msr BASEPRI, r3
  52056. 8015cd2: f3bf 8f6f isb sy
  52057. 8015cd6: f3bf 8f4f dsb sy
  52058. 8015cda: 60fb str r3, [r7, #12]
  52059. }
  52060. 8015cdc: bf00 nop
  52061. 8015cde: bf00 nop
  52062. 8015ce0: e7fd b.n 8015cde <xTaskCheckForTimeOut+0x42>
  52063. taskENTER_CRITICAL();
  52064. 8015ce2: f001 fab9 bl 8017258 <vPortEnterCritical>
  52065. {
  52066. /* Minor optimisation. The tick count cannot change in this block. */
  52067. const TickType_t xConstTickCount = xTickCount;
  52068. 8015ce6: 4b1d ldr r3, [pc, #116] @ (8015d5c <xTaskCheckForTimeOut+0xc0>)
  52069. 8015ce8: 681b ldr r3, [r3, #0]
  52070. 8015cea: 61bb str r3, [r7, #24]
  52071. const TickType_t xElapsedTime = xConstTickCount - pxTimeOut->xTimeOnEntering;
  52072. 8015cec: 687b ldr r3, [r7, #4]
  52073. 8015cee: 685b ldr r3, [r3, #4]
  52074. 8015cf0: 69ba ldr r2, [r7, #24]
  52075. 8015cf2: 1ad3 subs r3, r2, r3
  52076. 8015cf4: 617b str r3, [r7, #20]
  52077. }
  52078. else
  52079. #endif
  52080. #if ( INCLUDE_vTaskSuspend == 1 )
  52081. if( *pxTicksToWait == portMAX_DELAY )
  52082. 8015cf6: 683b ldr r3, [r7, #0]
  52083. 8015cf8: 681b ldr r3, [r3, #0]
  52084. 8015cfa: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  52085. 8015cfe: d102 bne.n 8015d06 <xTaskCheckForTimeOut+0x6a>
  52086. {
  52087. /* If INCLUDE_vTaskSuspend is set to 1 and the block time
  52088. specified is the maximum block time then the task should block
  52089. indefinitely, and therefore never time out. */
  52090. xReturn = pdFALSE;
  52091. 8015d00: 2300 movs r3, #0
  52092. 8015d02: 61fb str r3, [r7, #28]
  52093. 8015d04: e023 b.n 8015d4e <xTaskCheckForTimeOut+0xb2>
  52094. }
  52095. else
  52096. #endif
  52097. if( ( xNumOfOverflows != pxTimeOut->xOverflowCount ) && ( xConstTickCount >= pxTimeOut->xTimeOnEntering ) ) /*lint !e525 Indentation preferred as is to make code within pre-processor directives clearer. */
  52098. 8015d06: 687b ldr r3, [r7, #4]
  52099. 8015d08: 681a ldr r2, [r3, #0]
  52100. 8015d0a: 4b15 ldr r3, [pc, #84] @ (8015d60 <xTaskCheckForTimeOut+0xc4>)
  52101. 8015d0c: 681b ldr r3, [r3, #0]
  52102. 8015d0e: 429a cmp r2, r3
  52103. 8015d10: d007 beq.n 8015d22 <xTaskCheckForTimeOut+0x86>
  52104. 8015d12: 687b ldr r3, [r7, #4]
  52105. 8015d14: 685b ldr r3, [r3, #4]
  52106. 8015d16: 69ba ldr r2, [r7, #24]
  52107. 8015d18: 429a cmp r2, r3
  52108. 8015d1a: d302 bcc.n 8015d22 <xTaskCheckForTimeOut+0x86>
  52109. /* The tick count is greater than the time at which
  52110. vTaskSetTimeout() was called, but has also overflowed since
  52111. vTaskSetTimeOut() was called. It must have wrapped all the way
  52112. around and gone past again. This passed since vTaskSetTimeout()
  52113. was called. */
  52114. xReturn = pdTRUE;
  52115. 8015d1c: 2301 movs r3, #1
  52116. 8015d1e: 61fb str r3, [r7, #28]
  52117. 8015d20: e015 b.n 8015d4e <xTaskCheckForTimeOut+0xb2>
  52118. }
  52119. else if( xElapsedTime < *pxTicksToWait ) /*lint !e961 Explicit casting is only redundant with some compilers, whereas others require it to prevent integer conversion errors. */
  52120. 8015d22: 683b ldr r3, [r7, #0]
  52121. 8015d24: 681b ldr r3, [r3, #0]
  52122. 8015d26: 697a ldr r2, [r7, #20]
  52123. 8015d28: 429a cmp r2, r3
  52124. 8015d2a: d20b bcs.n 8015d44 <xTaskCheckForTimeOut+0xa8>
  52125. {
  52126. /* Not a genuine timeout. Adjust parameters for time remaining. */
  52127. *pxTicksToWait -= xElapsedTime;
  52128. 8015d2c: 683b ldr r3, [r7, #0]
  52129. 8015d2e: 681a ldr r2, [r3, #0]
  52130. 8015d30: 697b ldr r3, [r7, #20]
  52131. 8015d32: 1ad2 subs r2, r2, r3
  52132. 8015d34: 683b ldr r3, [r7, #0]
  52133. 8015d36: 601a str r2, [r3, #0]
  52134. vTaskInternalSetTimeOutState( pxTimeOut );
  52135. 8015d38: 6878 ldr r0, [r7, #4]
  52136. 8015d3a: f7ff ff99 bl 8015c70 <vTaskInternalSetTimeOutState>
  52137. xReturn = pdFALSE;
  52138. 8015d3e: 2300 movs r3, #0
  52139. 8015d40: 61fb str r3, [r7, #28]
  52140. 8015d42: e004 b.n 8015d4e <xTaskCheckForTimeOut+0xb2>
  52141. }
  52142. else
  52143. {
  52144. *pxTicksToWait = 0;
  52145. 8015d44: 683b ldr r3, [r7, #0]
  52146. 8015d46: 2200 movs r2, #0
  52147. 8015d48: 601a str r2, [r3, #0]
  52148. xReturn = pdTRUE;
  52149. 8015d4a: 2301 movs r3, #1
  52150. 8015d4c: 61fb str r3, [r7, #28]
  52151. }
  52152. }
  52153. taskEXIT_CRITICAL();
  52154. 8015d4e: f001 fab5 bl 80172bc <vPortExitCritical>
  52155. return xReturn;
  52156. 8015d52: 69fb ldr r3, [r7, #28]
  52157. }
  52158. 8015d54: 4618 mov r0, r3
  52159. 8015d56: 3720 adds r7, #32
  52160. 8015d58: 46bd mov sp, r7
  52161. 8015d5a: bd80 pop {r7, pc}
  52162. 8015d5c: 24002eec .word 0x24002eec
  52163. 8015d60: 24002f00 .word 0x24002f00
  52164. 08015d64 <vTaskMissedYield>:
  52165. /*-----------------------------------------------------------*/
  52166. void vTaskMissedYield( void )
  52167. {
  52168. 8015d64: b480 push {r7}
  52169. 8015d66: af00 add r7, sp, #0
  52170. xYieldPending = pdTRUE;
  52171. 8015d68: 4b03 ldr r3, [pc, #12] @ (8015d78 <vTaskMissedYield+0x14>)
  52172. 8015d6a: 2201 movs r2, #1
  52173. 8015d6c: 601a str r2, [r3, #0]
  52174. }
  52175. 8015d6e: bf00 nop
  52176. 8015d70: 46bd mov sp, r7
  52177. 8015d72: f85d 7b04 ldr.w r7, [sp], #4
  52178. 8015d76: 4770 bx lr
  52179. 8015d78: 24002efc .word 0x24002efc
  52180. 08015d7c <prvIdleTask>:
  52181. *
  52182. * void prvIdleTask( void *pvParameters );
  52183. *
  52184. */
  52185. static portTASK_FUNCTION( prvIdleTask, pvParameters )
  52186. {
  52187. 8015d7c: b580 push {r7, lr}
  52188. 8015d7e: b082 sub sp, #8
  52189. 8015d80: af00 add r7, sp, #0
  52190. 8015d82: 6078 str r0, [r7, #4]
  52191. for( ;; )
  52192. {
  52193. /* See if any tasks have deleted themselves - if so then the idle task
  52194. is responsible for freeing the deleted task's TCB and stack. */
  52195. prvCheckTasksWaitingTermination();
  52196. 8015d84: f000 f852 bl 8015e2c <prvCheckTasksWaitingTermination>
  52197. A critical region is not required here as we are just reading from
  52198. the list, and an occasional incorrect value will not matter. If
  52199. the ready list at the idle priority contains more than one task
  52200. then a task other than the idle task is ready to execute. */
  52201. if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ tskIDLE_PRIORITY ] ) ) > ( UBaseType_t ) 1 )
  52202. 8015d88: 4b06 ldr r3, [pc, #24] @ (8015da4 <prvIdleTask+0x28>)
  52203. 8015d8a: 681b ldr r3, [r3, #0]
  52204. 8015d8c: 2b01 cmp r3, #1
  52205. 8015d8e: d9f9 bls.n 8015d84 <prvIdleTask+0x8>
  52206. {
  52207. taskYIELD();
  52208. 8015d90: 4b05 ldr r3, [pc, #20] @ (8015da8 <prvIdleTask+0x2c>)
  52209. 8015d92: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  52210. 8015d96: 601a str r2, [r3, #0]
  52211. 8015d98: f3bf 8f4f dsb sy
  52212. 8015d9c: f3bf 8f6f isb sy
  52213. prvCheckTasksWaitingTermination();
  52214. 8015da0: e7f0 b.n 8015d84 <prvIdleTask+0x8>
  52215. 8015da2: bf00 nop
  52216. 8015da4: 24002a18 .word 0x24002a18
  52217. 8015da8: e000ed04 .word 0xe000ed04
  52218. 08015dac <prvInitialiseTaskLists>:
  52219. #endif /* portUSING_MPU_WRAPPERS */
  52220. /*-----------------------------------------------------------*/
  52221. static void prvInitialiseTaskLists( void )
  52222. {
  52223. 8015dac: b580 push {r7, lr}
  52224. 8015dae: b082 sub sp, #8
  52225. 8015db0: af00 add r7, sp, #0
  52226. UBaseType_t uxPriority;
  52227. for( uxPriority = ( UBaseType_t ) 0U; uxPriority < ( UBaseType_t ) configMAX_PRIORITIES; uxPriority++ )
  52228. 8015db2: 2300 movs r3, #0
  52229. 8015db4: 607b str r3, [r7, #4]
  52230. 8015db6: e00c b.n 8015dd2 <prvInitialiseTaskLists+0x26>
  52231. {
  52232. vListInitialise( &( pxReadyTasksLists[ uxPriority ] ) );
  52233. 8015db8: 687a ldr r2, [r7, #4]
  52234. 8015dba: 4613 mov r3, r2
  52235. 8015dbc: 009b lsls r3, r3, #2
  52236. 8015dbe: 4413 add r3, r2
  52237. 8015dc0: 009b lsls r3, r3, #2
  52238. 8015dc2: 4a12 ldr r2, [pc, #72] @ (8015e0c <prvInitialiseTaskLists+0x60>)
  52239. 8015dc4: 4413 add r3, r2
  52240. 8015dc6: 4618 mov r0, r3
  52241. 8015dc8: f7fe f81c bl 8013e04 <vListInitialise>
  52242. for( uxPriority = ( UBaseType_t ) 0U; uxPriority < ( UBaseType_t ) configMAX_PRIORITIES; uxPriority++ )
  52243. 8015dcc: 687b ldr r3, [r7, #4]
  52244. 8015dce: 3301 adds r3, #1
  52245. 8015dd0: 607b str r3, [r7, #4]
  52246. 8015dd2: 687b ldr r3, [r7, #4]
  52247. 8015dd4: 2b37 cmp r3, #55 @ 0x37
  52248. 8015dd6: d9ef bls.n 8015db8 <prvInitialiseTaskLists+0xc>
  52249. }
  52250. vListInitialise( &xDelayedTaskList1 );
  52251. 8015dd8: 480d ldr r0, [pc, #52] @ (8015e10 <prvInitialiseTaskLists+0x64>)
  52252. 8015dda: f7fe f813 bl 8013e04 <vListInitialise>
  52253. vListInitialise( &xDelayedTaskList2 );
  52254. 8015dde: 480d ldr r0, [pc, #52] @ (8015e14 <prvInitialiseTaskLists+0x68>)
  52255. 8015de0: f7fe f810 bl 8013e04 <vListInitialise>
  52256. vListInitialise( &xPendingReadyList );
  52257. 8015de4: 480c ldr r0, [pc, #48] @ (8015e18 <prvInitialiseTaskLists+0x6c>)
  52258. 8015de6: f7fe f80d bl 8013e04 <vListInitialise>
  52259. #if ( INCLUDE_vTaskDelete == 1 )
  52260. {
  52261. vListInitialise( &xTasksWaitingTermination );
  52262. 8015dea: 480c ldr r0, [pc, #48] @ (8015e1c <prvInitialiseTaskLists+0x70>)
  52263. 8015dec: f7fe f80a bl 8013e04 <vListInitialise>
  52264. }
  52265. #endif /* INCLUDE_vTaskDelete */
  52266. #if ( INCLUDE_vTaskSuspend == 1 )
  52267. {
  52268. vListInitialise( &xSuspendedTaskList );
  52269. 8015df0: 480b ldr r0, [pc, #44] @ (8015e20 <prvInitialiseTaskLists+0x74>)
  52270. 8015df2: f7fe f807 bl 8013e04 <vListInitialise>
  52271. }
  52272. #endif /* INCLUDE_vTaskSuspend */
  52273. /* Start with pxDelayedTaskList using list1 and the pxOverflowDelayedTaskList
  52274. using list2. */
  52275. pxDelayedTaskList = &xDelayedTaskList1;
  52276. 8015df6: 4b0b ldr r3, [pc, #44] @ (8015e24 <prvInitialiseTaskLists+0x78>)
  52277. 8015df8: 4a05 ldr r2, [pc, #20] @ (8015e10 <prvInitialiseTaskLists+0x64>)
  52278. 8015dfa: 601a str r2, [r3, #0]
  52279. pxOverflowDelayedTaskList = &xDelayedTaskList2;
  52280. 8015dfc: 4b0a ldr r3, [pc, #40] @ (8015e28 <prvInitialiseTaskLists+0x7c>)
  52281. 8015dfe: 4a05 ldr r2, [pc, #20] @ (8015e14 <prvInitialiseTaskLists+0x68>)
  52282. 8015e00: 601a str r2, [r3, #0]
  52283. }
  52284. 8015e02: bf00 nop
  52285. 8015e04: 3708 adds r7, #8
  52286. 8015e06: 46bd mov sp, r7
  52287. 8015e08: bd80 pop {r7, pc}
  52288. 8015e0a: bf00 nop
  52289. 8015e0c: 24002a18 .word 0x24002a18
  52290. 8015e10: 24002e78 .word 0x24002e78
  52291. 8015e14: 24002e8c .word 0x24002e8c
  52292. 8015e18: 24002ea8 .word 0x24002ea8
  52293. 8015e1c: 24002ebc .word 0x24002ebc
  52294. 8015e20: 24002ed4 .word 0x24002ed4
  52295. 8015e24: 24002ea0 .word 0x24002ea0
  52296. 8015e28: 24002ea4 .word 0x24002ea4
  52297. 08015e2c <prvCheckTasksWaitingTermination>:
  52298. /*-----------------------------------------------------------*/
  52299. static void prvCheckTasksWaitingTermination( void )
  52300. {
  52301. 8015e2c: b580 push {r7, lr}
  52302. 8015e2e: b082 sub sp, #8
  52303. 8015e30: af00 add r7, sp, #0
  52304. {
  52305. TCB_t *pxTCB;
  52306. /* uxDeletedTasksWaitingCleanUp is used to prevent taskENTER_CRITICAL()
  52307. being called too often in the idle task. */
  52308. while( uxDeletedTasksWaitingCleanUp > ( UBaseType_t ) 0U )
  52309. 8015e32: e019 b.n 8015e68 <prvCheckTasksWaitingTermination+0x3c>
  52310. {
  52311. taskENTER_CRITICAL();
  52312. 8015e34: f001 fa10 bl 8017258 <vPortEnterCritical>
  52313. {
  52314. 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. */
  52315. 8015e38: 4b10 ldr r3, [pc, #64] @ (8015e7c <prvCheckTasksWaitingTermination+0x50>)
  52316. 8015e3a: 68db ldr r3, [r3, #12]
  52317. 8015e3c: 68db ldr r3, [r3, #12]
  52318. 8015e3e: 607b str r3, [r7, #4]
  52319. ( void ) uxListRemove( &( pxTCB->xStateListItem ) );
  52320. 8015e40: 687b ldr r3, [r7, #4]
  52321. 8015e42: 3304 adds r3, #4
  52322. 8015e44: 4618 mov r0, r3
  52323. 8015e46: f7fe f867 bl 8013f18 <uxListRemove>
  52324. --uxCurrentNumberOfTasks;
  52325. 8015e4a: 4b0d ldr r3, [pc, #52] @ (8015e80 <prvCheckTasksWaitingTermination+0x54>)
  52326. 8015e4c: 681b ldr r3, [r3, #0]
  52327. 8015e4e: 3b01 subs r3, #1
  52328. 8015e50: 4a0b ldr r2, [pc, #44] @ (8015e80 <prvCheckTasksWaitingTermination+0x54>)
  52329. 8015e52: 6013 str r3, [r2, #0]
  52330. --uxDeletedTasksWaitingCleanUp;
  52331. 8015e54: 4b0b ldr r3, [pc, #44] @ (8015e84 <prvCheckTasksWaitingTermination+0x58>)
  52332. 8015e56: 681b ldr r3, [r3, #0]
  52333. 8015e58: 3b01 subs r3, #1
  52334. 8015e5a: 4a0a ldr r2, [pc, #40] @ (8015e84 <prvCheckTasksWaitingTermination+0x58>)
  52335. 8015e5c: 6013 str r3, [r2, #0]
  52336. }
  52337. taskEXIT_CRITICAL();
  52338. 8015e5e: f001 fa2d bl 80172bc <vPortExitCritical>
  52339. prvDeleteTCB( pxTCB );
  52340. 8015e62: 6878 ldr r0, [r7, #4]
  52341. 8015e64: f000 f810 bl 8015e88 <prvDeleteTCB>
  52342. while( uxDeletedTasksWaitingCleanUp > ( UBaseType_t ) 0U )
  52343. 8015e68: 4b06 ldr r3, [pc, #24] @ (8015e84 <prvCheckTasksWaitingTermination+0x58>)
  52344. 8015e6a: 681b ldr r3, [r3, #0]
  52345. 8015e6c: 2b00 cmp r3, #0
  52346. 8015e6e: d1e1 bne.n 8015e34 <prvCheckTasksWaitingTermination+0x8>
  52347. }
  52348. }
  52349. #endif /* INCLUDE_vTaskDelete */
  52350. }
  52351. 8015e70: bf00 nop
  52352. 8015e72: bf00 nop
  52353. 8015e74: 3708 adds r7, #8
  52354. 8015e76: 46bd mov sp, r7
  52355. 8015e78: bd80 pop {r7, pc}
  52356. 8015e7a: bf00 nop
  52357. 8015e7c: 24002ebc .word 0x24002ebc
  52358. 8015e80: 24002ee8 .word 0x24002ee8
  52359. 8015e84: 24002ed0 .word 0x24002ed0
  52360. 08015e88 <prvDeleteTCB>:
  52361. /*-----------------------------------------------------------*/
  52362. #if ( INCLUDE_vTaskDelete == 1 )
  52363. static void prvDeleteTCB( TCB_t *pxTCB )
  52364. {
  52365. 8015e88: b580 push {r7, lr}
  52366. 8015e8a: b084 sub sp, #16
  52367. 8015e8c: af00 add r7, sp, #0
  52368. 8015e8e: 6078 str r0, [r7, #4]
  52369. to the task to free any memory allocated at the application level.
  52370. See the third party link http://www.nadler.com/embedded/newlibAndFreeRTOS.html
  52371. for additional information. */
  52372. #if ( configUSE_NEWLIB_REENTRANT == 1 )
  52373. {
  52374. _reclaim_reent( &( pxTCB->xNewLib_reent ) );
  52375. 8015e90: 687b ldr r3, [r7, #4]
  52376. 8015e92: 3354 adds r3, #84 @ 0x54
  52377. 8015e94: 4618 mov r0, r3
  52378. 8015e96: f001 ff11 bl 8017cbc <_reclaim_reent>
  52379. #elif( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 ) /*lint !e731 !e9029 Macro has been consolidated for readability reasons. */
  52380. {
  52381. /* The task could have been allocated statically or dynamically, so
  52382. check what was statically allocated before trying to free the
  52383. memory. */
  52384. if( pxTCB->ucStaticallyAllocated == tskDYNAMICALLY_ALLOCATED_STACK_AND_TCB )
  52385. 8015e9a: 687b ldr r3, [r7, #4]
  52386. 8015e9c: f893 30a5 ldrb.w r3, [r3, #165] @ 0xa5
  52387. 8015ea0: 2b00 cmp r3, #0
  52388. 8015ea2: d108 bne.n 8015eb6 <prvDeleteTCB+0x2e>
  52389. {
  52390. /* Both the stack and TCB were allocated dynamically, so both
  52391. must be freed. */
  52392. vPortFree( pxTCB->pxStack );
  52393. 8015ea4: 687b ldr r3, [r7, #4]
  52394. 8015ea6: 6b1b ldr r3, [r3, #48] @ 0x30
  52395. 8015ea8: 4618 mov r0, r3
  52396. 8015eaa: f001 fbc5 bl 8017638 <vPortFree>
  52397. vPortFree( pxTCB );
  52398. 8015eae: 6878 ldr r0, [r7, #4]
  52399. 8015eb0: f001 fbc2 bl 8017638 <vPortFree>
  52400. configASSERT( pxTCB->ucStaticallyAllocated == tskSTATICALLY_ALLOCATED_STACK_AND_TCB );
  52401. mtCOVERAGE_TEST_MARKER();
  52402. }
  52403. }
  52404. #endif /* configSUPPORT_DYNAMIC_ALLOCATION */
  52405. }
  52406. 8015eb4: e019 b.n 8015eea <prvDeleteTCB+0x62>
  52407. else if( pxTCB->ucStaticallyAllocated == tskSTATICALLY_ALLOCATED_STACK_ONLY )
  52408. 8015eb6: 687b ldr r3, [r7, #4]
  52409. 8015eb8: f893 30a5 ldrb.w r3, [r3, #165] @ 0xa5
  52410. 8015ebc: 2b01 cmp r3, #1
  52411. 8015ebe: d103 bne.n 8015ec8 <prvDeleteTCB+0x40>
  52412. vPortFree( pxTCB );
  52413. 8015ec0: 6878 ldr r0, [r7, #4]
  52414. 8015ec2: f001 fbb9 bl 8017638 <vPortFree>
  52415. }
  52416. 8015ec6: e010 b.n 8015eea <prvDeleteTCB+0x62>
  52417. configASSERT( pxTCB->ucStaticallyAllocated == tskSTATICALLY_ALLOCATED_STACK_AND_TCB );
  52418. 8015ec8: 687b ldr r3, [r7, #4]
  52419. 8015eca: f893 30a5 ldrb.w r3, [r3, #165] @ 0xa5
  52420. 8015ece: 2b02 cmp r3, #2
  52421. 8015ed0: d00b beq.n 8015eea <prvDeleteTCB+0x62>
  52422. __asm volatile
  52423. 8015ed2: f04f 0350 mov.w r3, #80 @ 0x50
  52424. 8015ed6: f383 8811 msr BASEPRI, r3
  52425. 8015eda: f3bf 8f6f isb sy
  52426. 8015ede: f3bf 8f4f dsb sy
  52427. 8015ee2: 60fb str r3, [r7, #12]
  52428. }
  52429. 8015ee4: bf00 nop
  52430. 8015ee6: bf00 nop
  52431. 8015ee8: e7fd b.n 8015ee6 <prvDeleteTCB+0x5e>
  52432. }
  52433. 8015eea: bf00 nop
  52434. 8015eec: 3710 adds r7, #16
  52435. 8015eee: 46bd mov sp, r7
  52436. 8015ef0: bd80 pop {r7, pc}
  52437. ...
  52438. 08015ef4 <prvResetNextTaskUnblockTime>:
  52439. #endif /* INCLUDE_vTaskDelete */
  52440. /*-----------------------------------------------------------*/
  52441. static void prvResetNextTaskUnblockTime( void )
  52442. {
  52443. 8015ef4: b480 push {r7}
  52444. 8015ef6: b083 sub sp, #12
  52445. 8015ef8: af00 add r7, sp, #0
  52446. TCB_t *pxTCB;
  52447. if( listLIST_IS_EMPTY( pxDelayedTaskList ) != pdFALSE )
  52448. 8015efa: 4b0c ldr r3, [pc, #48] @ (8015f2c <prvResetNextTaskUnblockTime+0x38>)
  52449. 8015efc: 681b ldr r3, [r3, #0]
  52450. 8015efe: 681b ldr r3, [r3, #0]
  52451. 8015f00: 2b00 cmp r3, #0
  52452. 8015f02: d104 bne.n 8015f0e <prvResetNextTaskUnblockTime+0x1a>
  52453. {
  52454. /* The new current delayed list is empty. Set xNextTaskUnblockTime to
  52455. the maximum possible value so it is extremely unlikely that the
  52456. if( xTickCount >= xNextTaskUnblockTime ) test will pass until
  52457. there is an item in the delayed list. */
  52458. xNextTaskUnblockTime = portMAX_DELAY;
  52459. 8015f04: 4b0a ldr r3, [pc, #40] @ (8015f30 <prvResetNextTaskUnblockTime+0x3c>)
  52460. 8015f06: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
  52461. 8015f0a: 601a str r2, [r3, #0]
  52462. which the task at the head of the delayed list should be removed
  52463. from the Blocked state. */
  52464. ( 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. */
  52465. xNextTaskUnblockTime = listGET_LIST_ITEM_VALUE( &( ( pxTCB )->xStateListItem ) );
  52466. }
  52467. }
  52468. 8015f0c: e008 b.n 8015f20 <prvResetNextTaskUnblockTime+0x2c>
  52469. ( 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. */
  52470. 8015f0e: 4b07 ldr r3, [pc, #28] @ (8015f2c <prvResetNextTaskUnblockTime+0x38>)
  52471. 8015f10: 681b ldr r3, [r3, #0]
  52472. 8015f12: 68db ldr r3, [r3, #12]
  52473. 8015f14: 68db ldr r3, [r3, #12]
  52474. 8015f16: 607b str r3, [r7, #4]
  52475. xNextTaskUnblockTime = listGET_LIST_ITEM_VALUE( &( ( pxTCB )->xStateListItem ) );
  52476. 8015f18: 687b ldr r3, [r7, #4]
  52477. 8015f1a: 685b ldr r3, [r3, #4]
  52478. 8015f1c: 4a04 ldr r2, [pc, #16] @ (8015f30 <prvResetNextTaskUnblockTime+0x3c>)
  52479. 8015f1e: 6013 str r3, [r2, #0]
  52480. }
  52481. 8015f20: bf00 nop
  52482. 8015f22: 370c adds r7, #12
  52483. 8015f24: 46bd mov sp, r7
  52484. 8015f26: f85d 7b04 ldr.w r7, [sp], #4
  52485. 8015f2a: 4770 bx lr
  52486. 8015f2c: 24002ea0 .word 0x24002ea0
  52487. 8015f30: 24002f08 .word 0x24002f08
  52488. 08015f34 <xTaskGetCurrentTaskHandle>:
  52489. /*-----------------------------------------------------------*/
  52490. #if ( ( INCLUDE_xTaskGetCurrentTaskHandle == 1 ) || ( configUSE_MUTEXES == 1 ) )
  52491. TaskHandle_t xTaskGetCurrentTaskHandle( void )
  52492. {
  52493. 8015f34: b480 push {r7}
  52494. 8015f36: b083 sub sp, #12
  52495. 8015f38: af00 add r7, sp, #0
  52496. TaskHandle_t xReturn;
  52497. /* A critical section is not required as this is not called from
  52498. an interrupt and the current TCB will always be the same for any
  52499. individual execution thread. */
  52500. xReturn = pxCurrentTCB;
  52501. 8015f3a: 4b05 ldr r3, [pc, #20] @ (8015f50 <xTaskGetCurrentTaskHandle+0x1c>)
  52502. 8015f3c: 681b ldr r3, [r3, #0]
  52503. 8015f3e: 607b str r3, [r7, #4]
  52504. return xReturn;
  52505. 8015f40: 687b ldr r3, [r7, #4]
  52506. }
  52507. 8015f42: 4618 mov r0, r3
  52508. 8015f44: 370c adds r7, #12
  52509. 8015f46: 46bd mov sp, r7
  52510. 8015f48: f85d 7b04 ldr.w r7, [sp], #4
  52511. 8015f4c: 4770 bx lr
  52512. 8015f4e: bf00 nop
  52513. 8015f50: 24002a14 .word 0x24002a14
  52514. 08015f54 <xTaskGetSchedulerState>:
  52515. /*-----------------------------------------------------------*/
  52516. #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
  52517. BaseType_t xTaskGetSchedulerState( void )
  52518. {
  52519. 8015f54: b480 push {r7}
  52520. 8015f56: b083 sub sp, #12
  52521. 8015f58: af00 add r7, sp, #0
  52522. BaseType_t xReturn;
  52523. if( xSchedulerRunning == pdFALSE )
  52524. 8015f5a: 4b0b ldr r3, [pc, #44] @ (8015f88 <xTaskGetSchedulerState+0x34>)
  52525. 8015f5c: 681b ldr r3, [r3, #0]
  52526. 8015f5e: 2b00 cmp r3, #0
  52527. 8015f60: d102 bne.n 8015f68 <xTaskGetSchedulerState+0x14>
  52528. {
  52529. xReturn = taskSCHEDULER_NOT_STARTED;
  52530. 8015f62: 2301 movs r3, #1
  52531. 8015f64: 607b str r3, [r7, #4]
  52532. 8015f66: e008 b.n 8015f7a <xTaskGetSchedulerState+0x26>
  52533. }
  52534. else
  52535. {
  52536. if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE )
  52537. 8015f68: 4b08 ldr r3, [pc, #32] @ (8015f8c <xTaskGetSchedulerState+0x38>)
  52538. 8015f6a: 681b ldr r3, [r3, #0]
  52539. 8015f6c: 2b00 cmp r3, #0
  52540. 8015f6e: d102 bne.n 8015f76 <xTaskGetSchedulerState+0x22>
  52541. {
  52542. xReturn = taskSCHEDULER_RUNNING;
  52543. 8015f70: 2302 movs r3, #2
  52544. 8015f72: 607b str r3, [r7, #4]
  52545. 8015f74: e001 b.n 8015f7a <xTaskGetSchedulerState+0x26>
  52546. }
  52547. else
  52548. {
  52549. xReturn = taskSCHEDULER_SUSPENDED;
  52550. 8015f76: 2300 movs r3, #0
  52551. 8015f78: 607b str r3, [r7, #4]
  52552. }
  52553. }
  52554. return xReturn;
  52555. 8015f7a: 687b ldr r3, [r7, #4]
  52556. }
  52557. 8015f7c: 4618 mov r0, r3
  52558. 8015f7e: 370c adds r7, #12
  52559. 8015f80: 46bd mov sp, r7
  52560. 8015f82: f85d 7b04 ldr.w r7, [sp], #4
  52561. 8015f86: 4770 bx lr
  52562. 8015f88: 24002ef4 .word 0x24002ef4
  52563. 8015f8c: 24002f10 .word 0x24002f10
  52564. 08015f90 <xTaskPriorityInherit>:
  52565. /*-----------------------------------------------------------*/
  52566. #if ( configUSE_MUTEXES == 1 )
  52567. BaseType_t xTaskPriorityInherit( TaskHandle_t const pxMutexHolder )
  52568. {
  52569. 8015f90: b580 push {r7, lr}
  52570. 8015f92: b084 sub sp, #16
  52571. 8015f94: af00 add r7, sp, #0
  52572. 8015f96: 6078 str r0, [r7, #4]
  52573. TCB_t * const pxMutexHolderTCB = pxMutexHolder;
  52574. 8015f98: 687b ldr r3, [r7, #4]
  52575. 8015f9a: 60bb str r3, [r7, #8]
  52576. BaseType_t xReturn = pdFALSE;
  52577. 8015f9c: 2300 movs r3, #0
  52578. 8015f9e: 60fb str r3, [r7, #12]
  52579. /* If the mutex was given back by an interrupt while the queue was
  52580. locked then the mutex holder might now be NULL. _RB_ Is this still
  52581. needed as interrupts can no longer use mutexes? */
  52582. if( pxMutexHolder != NULL )
  52583. 8015fa0: 687b ldr r3, [r7, #4]
  52584. 8015fa2: 2b00 cmp r3, #0
  52585. 8015fa4: d051 beq.n 801604a <xTaskPriorityInherit+0xba>
  52586. {
  52587. /* If the holder of the mutex has a priority below the priority of
  52588. the task attempting to obtain the mutex then it will temporarily
  52589. inherit the priority of the task attempting to obtain the mutex. */
  52590. if( pxMutexHolderTCB->uxPriority < pxCurrentTCB->uxPriority )
  52591. 8015fa6: 68bb ldr r3, [r7, #8]
  52592. 8015fa8: 6ada ldr r2, [r3, #44] @ 0x2c
  52593. 8015faa: 4b2a ldr r3, [pc, #168] @ (8016054 <xTaskPriorityInherit+0xc4>)
  52594. 8015fac: 681b ldr r3, [r3, #0]
  52595. 8015fae: 6adb ldr r3, [r3, #44] @ 0x2c
  52596. 8015fb0: 429a cmp r2, r3
  52597. 8015fb2: d241 bcs.n 8016038 <xTaskPriorityInherit+0xa8>
  52598. {
  52599. /* Adjust the mutex holder state to account for its new
  52600. priority. Only reset the event list item value if the value is
  52601. not being used for anything else. */
  52602. if( ( listGET_LIST_ITEM_VALUE( &( pxMutexHolderTCB->xEventListItem ) ) & taskEVENT_LIST_ITEM_VALUE_IN_USE ) == 0UL )
  52603. 8015fb4: 68bb ldr r3, [r7, #8]
  52604. 8015fb6: 699b ldr r3, [r3, #24]
  52605. 8015fb8: 2b00 cmp r3, #0
  52606. 8015fba: db06 blt.n 8015fca <xTaskPriorityInherit+0x3a>
  52607. {
  52608. 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. */
  52609. 8015fbc: 4b25 ldr r3, [pc, #148] @ (8016054 <xTaskPriorityInherit+0xc4>)
  52610. 8015fbe: 681b ldr r3, [r3, #0]
  52611. 8015fc0: 6adb ldr r3, [r3, #44] @ 0x2c
  52612. 8015fc2: f1c3 0238 rsb r2, r3, #56 @ 0x38
  52613. 8015fc6: 68bb ldr r3, [r7, #8]
  52614. 8015fc8: 619a str r2, [r3, #24]
  52615. mtCOVERAGE_TEST_MARKER();
  52616. }
  52617. /* If the task being modified is in the ready state it will need
  52618. to be moved into a new list. */
  52619. if( listIS_CONTAINED_WITHIN( &( pxReadyTasksLists[ pxMutexHolderTCB->uxPriority ] ), &( pxMutexHolderTCB->xStateListItem ) ) != pdFALSE )
  52620. 8015fca: 68bb ldr r3, [r7, #8]
  52621. 8015fcc: 6959 ldr r1, [r3, #20]
  52622. 8015fce: 68bb ldr r3, [r7, #8]
  52623. 8015fd0: 6ada ldr r2, [r3, #44] @ 0x2c
  52624. 8015fd2: 4613 mov r3, r2
  52625. 8015fd4: 009b lsls r3, r3, #2
  52626. 8015fd6: 4413 add r3, r2
  52627. 8015fd8: 009b lsls r3, r3, #2
  52628. 8015fda: 4a1f ldr r2, [pc, #124] @ (8016058 <xTaskPriorityInherit+0xc8>)
  52629. 8015fdc: 4413 add r3, r2
  52630. 8015fde: 4299 cmp r1, r3
  52631. 8015fe0: d122 bne.n 8016028 <xTaskPriorityInherit+0x98>
  52632. {
  52633. if( uxListRemove( &( pxMutexHolderTCB->xStateListItem ) ) == ( UBaseType_t ) 0 )
  52634. 8015fe2: 68bb ldr r3, [r7, #8]
  52635. 8015fe4: 3304 adds r3, #4
  52636. 8015fe6: 4618 mov r0, r3
  52637. 8015fe8: f7fd ff96 bl 8013f18 <uxListRemove>
  52638. {
  52639. mtCOVERAGE_TEST_MARKER();
  52640. }
  52641. /* Inherit the priority before being moved into the new list. */
  52642. pxMutexHolderTCB->uxPriority = pxCurrentTCB->uxPriority;
  52643. 8015fec: 4b19 ldr r3, [pc, #100] @ (8016054 <xTaskPriorityInherit+0xc4>)
  52644. 8015fee: 681b ldr r3, [r3, #0]
  52645. 8015ff0: 6ada ldr r2, [r3, #44] @ 0x2c
  52646. 8015ff2: 68bb ldr r3, [r7, #8]
  52647. 8015ff4: 62da str r2, [r3, #44] @ 0x2c
  52648. prvAddTaskToReadyList( pxMutexHolderTCB );
  52649. 8015ff6: 68bb ldr r3, [r7, #8]
  52650. 8015ff8: 6ada ldr r2, [r3, #44] @ 0x2c
  52651. 8015ffa: 4b18 ldr r3, [pc, #96] @ (801605c <xTaskPriorityInherit+0xcc>)
  52652. 8015ffc: 681b ldr r3, [r3, #0]
  52653. 8015ffe: 429a cmp r2, r3
  52654. 8016000: d903 bls.n 801600a <xTaskPriorityInherit+0x7a>
  52655. 8016002: 68bb ldr r3, [r7, #8]
  52656. 8016004: 6adb ldr r3, [r3, #44] @ 0x2c
  52657. 8016006: 4a15 ldr r2, [pc, #84] @ (801605c <xTaskPriorityInherit+0xcc>)
  52658. 8016008: 6013 str r3, [r2, #0]
  52659. 801600a: 68bb ldr r3, [r7, #8]
  52660. 801600c: 6ada ldr r2, [r3, #44] @ 0x2c
  52661. 801600e: 4613 mov r3, r2
  52662. 8016010: 009b lsls r3, r3, #2
  52663. 8016012: 4413 add r3, r2
  52664. 8016014: 009b lsls r3, r3, #2
  52665. 8016016: 4a10 ldr r2, [pc, #64] @ (8016058 <xTaskPriorityInherit+0xc8>)
  52666. 8016018: 441a add r2, r3
  52667. 801601a: 68bb ldr r3, [r7, #8]
  52668. 801601c: 3304 adds r3, #4
  52669. 801601e: 4619 mov r1, r3
  52670. 8016020: 4610 mov r0, r2
  52671. 8016022: f7fd ff1c bl 8013e5e <vListInsertEnd>
  52672. 8016026: e004 b.n 8016032 <xTaskPriorityInherit+0xa2>
  52673. }
  52674. else
  52675. {
  52676. /* Just inherit the priority. */
  52677. pxMutexHolderTCB->uxPriority = pxCurrentTCB->uxPriority;
  52678. 8016028: 4b0a ldr r3, [pc, #40] @ (8016054 <xTaskPriorityInherit+0xc4>)
  52679. 801602a: 681b ldr r3, [r3, #0]
  52680. 801602c: 6ada ldr r2, [r3, #44] @ 0x2c
  52681. 801602e: 68bb ldr r3, [r7, #8]
  52682. 8016030: 62da str r2, [r3, #44] @ 0x2c
  52683. }
  52684. traceTASK_PRIORITY_INHERIT( pxMutexHolderTCB, pxCurrentTCB->uxPriority );
  52685. /* Inheritance occurred. */
  52686. xReturn = pdTRUE;
  52687. 8016032: 2301 movs r3, #1
  52688. 8016034: 60fb str r3, [r7, #12]
  52689. 8016036: e008 b.n 801604a <xTaskPriorityInherit+0xba>
  52690. }
  52691. else
  52692. {
  52693. if( pxMutexHolderTCB->uxBasePriority < pxCurrentTCB->uxPriority )
  52694. 8016038: 68bb ldr r3, [r7, #8]
  52695. 801603a: 6cda ldr r2, [r3, #76] @ 0x4c
  52696. 801603c: 4b05 ldr r3, [pc, #20] @ (8016054 <xTaskPriorityInherit+0xc4>)
  52697. 801603e: 681b ldr r3, [r3, #0]
  52698. 8016040: 6adb ldr r3, [r3, #44] @ 0x2c
  52699. 8016042: 429a cmp r2, r3
  52700. 8016044: d201 bcs.n 801604a <xTaskPriorityInherit+0xba>
  52701. current priority of the mutex holder is not lower than the
  52702. priority of the task attempting to take the mutex.
  52703. Therefore the mutex holder must have already inherited a
  52704. priority, but inheritance would have occurred if that had
  52705. not been the case. */
  52706. xReturn = pdTRUE;
  52707. 8016046: 2301 movs r3, #1
  52708. 8016048: 60fb str r3, [r7, #12]
  52709. else
  52710. {
  52711. mtCOVERAGE_TEST_MARKER();
  52712. }
  52713. return xReturn;
  52714. 801604a: 68fb ldr r3, [r7, #12]
  52715. }
  52716. 801604c: 4618 mov r0, r3
  52717. 801604e: 3710 adds r7, #16
  52718. 8016050: 46bd mov sp, r7
  52719. 8016052: bd80 pop {r7, pc}
  52720. 8016054: 24002a14 .word 0x24002a14
  52721. 8016058: 24002a18 .word 0x24002a18
  52722. 801605c: 24002ef0 .word 0x24002ef0
  52723. 08016060 <xTaskPriorityDisinherit>:
  52724. /*-----------------------------------------------------------*/
  52725. #if ( configUSE_MUTEXES == 1 )
  52726. BaseType_t xTaskPriorityDisinherit( TaskHandle_t const pxMutexHolder )
  52727. {
  52728. 8016060: b580 push {r7, lr}
  52729. 8016062: b086 sub sp, #24
  52730. 8016064: af00 add r7, sp, #0
  52731. 8016066: 6078 str r0, [r7, #4]
  52732. TCB_t * const pxTCB = pxMutexHolder;
  52733. 8016068: 687b ldr r3, [r7, #4]
  52734. 801606a: 613b str r3, [r7, #16]
  52735. BaseType_t xReturn = pdFALSE;
  52736. 801606c: 2300 movs r3, #0
  52737. 801606e: 617b str r3, [r7, #20]
  52738. if( pxMutexHolder != NULL )
  52739. 8016070: 687b ldr r3, [r7, #4]
  52740. 8016072: 2b00 cmp r3, #0
  52741. 8016074: d058 beq.n 8016128 <xTaskPriorityDisinherit+0xc8>
  52742. {
  52743. /* A task can only have an inherited priority if it holds the mutex.
  52744. If the mutex is held by a task then it cannot be given from an
  52745. interrupt, and if a mutex is given by the holding task then it must
  52746. be the running state task. */
  52747. configASSERT( pxTCB == pxCurrentTCB );
  52748. 8016076: 4b2f ldr r3, [pc, #188] @ (8016134 <xTaskPriorityDisinherit+0xd4>)
  52749. 8016078: 681b ldr r3, [r3, #0]
  52750. 801607a: 693a ldr r2, [r7, #16]
  52751. 801607c: 429a cmp r2, r3
  52752. 801607e: d00b beq.n 8016098 <xTaskPriorityDisinherit+0x38>
  52753. __asm volatile
  52754. 8016080: f04f 0350 mov.w r3, #80 @ 0x50
  52755. 8016084: f383 8811 msr BASEPRI, r3
  52756. 8016088: f3bf 8f6f isb sy
  52757. 801608c: f3bf 8f4f dsb sy
  52758. 8016090: 60fb str r3, [r7, #12]
  52759. }
  52760. 8016092: bf00 nop
  52761. 8016094: bf00 nop
  52762. 8016096: e7fd b.n 8016094 <xTaskPriorityDisinherit+0x34>
  52763. configASSERT( pxTCB->uxMutexesHeld );
  52764. 8016098: 693b ldr r3, [r7, #16]
  52765. 801609a: 6d1b ldr r3, [r3, #80] @ 0x50
  52766. 801609c: 2b00 cmp r3, #0
  52767. 801609e: d10b bne.n 80160b8 <xTaskPriorityDisinherit+0x58>
  52768. __asm volatile
  52769. 80160a0: f04f 0350 mov.w r3, #80 @ 0x50
  52770. 80160a4: f383 8811 msr BASEPRI, r3
  52771. 80160a8: f3bf 8f6f isb sy
  52772. 80160ac: f3bf 8f4f dsb sy
  52773. 80160b0: 60bb str r3, [r7, #8]
  52774. }
  52775. 80160b2: bf00 nop
  52776. 80160b4: bf00 nop
  52777. 80160b6: e7fd b.n 80160b4 <xTaskPriorityDisinherit+0x54>
  52778. ( pxTCB->uxMutexesHeld )--;
  52779. 80160b8: 693b ldr r3, [r7, #16]
  52780. 80160ba: 6d1b ldr r3, [r3, #80] @ 0x50
  52781. 80160bc: 1e5a subs r2, r3, #1
  52782. 80160be: 693b ldr r3, [r7, #16]
  52783. 80160c0: 651a str r2, [r3, #80] @ 0x50
  52784. /* Has the holder of the mutex inherited the priority of another
  52785. task? */
  52786. if( pxTCB->uxPriority != pxTCB->uxBasePriority )
  52787. 80160c2: 693b ldr r3, [r7, #16]
  52788. 80160c4: 6ada ldr r2, [r3, #44] @ 0x2c
  52789. 80160c6: 693b ldr r3, [r7, #16]
  52790. 80160c8: 6cdb ldr r3, [r3, #76] @ 0x4c
  52791. 80160ca: 429a cmp r2, r3
  52792. 80160cc: d02c beq.n 8016128 <xTaskPriorityDisinherit+0xc8>
  52793. {
  52794. /* Only disinherit if no other mutexes are held. */
  52795. if( pxTCB->uxMutexesHeld == ( UBaseType_t ) 0 )
  52796. 80160ce: 693b ldr r3, [r7, #16]
  52797. 80160d0: 6d1b ldr r3, [r3, #80] @ 0x50
  52798. 80160d2: 2b00 cmp r3, #0
  52799. 80160d4: d128 bne.n 8016128 <xTaskPriorityDisinherit+0xc8>
  52800. /* A task can only have an inherited priority if it holds
  52801. the mutex. If the mutex is held by a task then it cannot be
  52802. given from an interrupt, and if a mutex is given by the
  52803. holding task then it must be the running state task. Remove
  52804. the holding task from the ready/delayed list. */
  52805. if( uxListRemove( &( pxTCB->xStateListItem ) ) == ( UBaseType_t ) 0 )
  52806. 80160d6: 693b ldr r3, [r7, #16]
  52807. 80160d8: 3304 adds r3, #4
  52808. 80160da: 4618 mov r0, r3
  52809. 80160dc: f7fd ff1c bl 8013f18 <uxListRemove>
  52810. }
  52811. /* Disinherit the priority before adding the task into the
  52812. new ready list. */
  52813. traceTASK_PRIORITY_DISINHERIT( pxTCB, pxTCB->uxBasePriority );
  52814. pxTCB->uxPriority = pxTCB->uxBasePriority;
  52815. 80160e0: 693b ldr r3, [r7, #16]
  52816. 80160e2: 6cda ldr r2, [r3, #76] @ 0x4c
  52817. 80160e4: 693b ldr r3, [r7, #16]
  52818. 80160e6: 62da str r2, [r3, #44] @ 0x2c
  52819. /* Reset the event list item value. It cannot be in use for
  52820. any other purpose if this task is running, and it must be
  52821. running to give back the mutex. */
  52822. 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. */
  52823. 80160e8: 693b ldr r3, [r7, #16]
  52824. 80160ea: 6adb ldr r3, [r3, #44] @ 0x2c
  52825. 80160ec: f1c3 0238 rsb r2, r3, #56 @ 0x38
  52826. 80160f0: 693b ldr r3, [r7, #16]
  52827. 80160f2: 619a str r2, [r3, #24]
  52828. prvAddTaskToReadyList( pxTCB );
  52829. 80160f4: 693b ldr r3, [r7, #16]
  52830. 80160f6: 6ada ldr r2, [r3, #44] @ 0x2c
  52831. 80160f8: 4b0f ldr r3, [pc, #60] @ (8016138 <xTaskPriorityDisinherit+0xd8>)
  52832. 80160fa: 681b ldr r3, [r3, #0]
  52833. 80160fc: 429a cmp r2, r3
  52834. 80160fe: d903 bls.n 8016108 <xTaskPriorityDisinherit+0xa8>
  52835. 8016100: 693b ldr r3, [r7, #16]
  52836. 8016102: 6adb ldr r3, [r3, #44] @ 0x2c
  52837. 8016104: 4a0c ldr r2, [pc, #48] @ (8016138 <xTaskPriorityDisinherit+0xd8>)
  52838. 8016106: 6013 str r3, [r2, #0]
  52839. 8016108: 693b ldr r3, [r7, #16]
  52840. 801610a: 6ada ldr r2, [r3, #44] @ 0x2c
  52841. 801610c: 4613 mov r3, r2
  52842. 801610e: 009b lsls r3, r3, #2
  52843. 8016110: 4413 add r3, r2
  52844. 8016112: 009b lsls r3, r3, #2
  52845. 8016114: 4a09 ldr r2, [pc, #36] @ (801613c <xTaskPriorityDisinherit+0xdc>)
  52846. 8016116: 441a add r2, r3
  52847. 8016118: 693b ldr r3, [r7, #16]
  52848. 801611a: 3304 adds r3, #4
  52849. 801611c: 4619 mov r1, r3
  52850. 801611e: 4610 mov r0, r2
  52851. 8016120: f7fd fe9d bl 8013e5e <vListInsertEnd>
  52852. in an order different to that in which they were taken.
  52853. If a context switch did not occur when the first mutex was
  52854. returned, even if a task was waiting on it, then a context
  52855. switch should occur when the last mutex is returned whether
  52856. a task is waiting on it or not. */
  52857. xReturn = pdTRUE;
  52858. 8016124: 2301 movs r3, #1
  52859. 8016126: 617b str r3, [r7, #20]
  52860. else
  52861. {
  52862. mtCOVERAGE_TEST_MARKER();
  52863. }
  52864. return xReturn;
  52865. 8016128: 697b ldr r3, [r7, #20]
  52866. }
  52867. 801612a: 4618 mov r0, r3
  52868. 801612c: 3718 adds r7, #24
  52869. 801612e: 46bd mov sp, r7
  52870. 8016130: bd80 pop {r7, pc}
  52871. 8016132: bf00 nop
  52872. 8016134: 24002a14 .word 0x24002a14
  52873. 8016138: 24002ef0 .word 0x24002ef0
  52874. 801613c: 24002a18 .word 0x24002a18
  52875. 08016140 <vTaskPriorityDisinheritAfterTimeout>:
  52876. /*-----------------------------------------------------------*/
  52877. #if ( configUSE_MUTEXES == 1 )
  52878. void vTaskPriorityDisinheritAfterTimeout( TaskHandle_t const pxMutexHolder, UBaseType_t uxHighestPriorityWaitingTask )
  52879. {
  52880. 8016140: b580 push {r7, lr}
  52881. 8016142: b088 sub sp, #32
  52882. 8016144: af00 add r7, sp, #0
  52883. 8016146: 6078 str r0, [r7, #4]
  52884. 8016148: 6039 str r1, [r7, #0]
  52885. TCB_t * const pxTCB = pxMutexHolder;
  52886. 801614a: 687b ldr r3, [r7, #4]
  52887. 801614c: 61bb str r3, [r7, #24]
  52888. UBaseType_t uxPriorityUsedOnEntry, uxPriorityToUse;
  52889. const UBaseType_t uxOnlyOneMutexHeld = ( UBaseType_t ) 1;
  52890. 801614e: 2301 movs r3, #1
  52891. 8016150: 617b str r3, [r7, #20]
  52892. if( pxMutexHolder != NULL )
  52893. 8016152: 687b ldr r3, [r7, #4]
  52894. 8016154: 2b00 cmp r3, #0
  52895. 8016156: d06c beq.n 8016232 <vTaskPriorityDisinheritAfterTimeout+0xf2>
  52896. {
  52897. /* If pxMutexHolder is not NULL then the holder must hold at least
  52898. one mutex. */
  52899. configASSERT( pxTCB->uxMutexesHeld );
  52900. 8016158: 69bb ldr r3, [r7, #24]
  52901. 801615a: 6d1b ldr r3, [r3, #80] @ 0x50
  52902. 801615c: 2b00 cmp r3, #0
  52903. 801615e: d10b bne.n 8016178 <vTaskPriorityDisinheritAfterTimeout+0x38>
  52904. __asm volatile
  52905. 8016160: f04f 0350 mov.w r3, #80 @ 0x50
  52906. 8016164: f383 8811 msr BASEPRI, r3
  52907. 8016168: f3bf 8f6f isb sy
  52908. 801616c: f3bf 8f4f dsb sy
  52909. 8016170: 60fb str r3, [r7, #12]
  52910. }
  52911. 8016172: bf00 nop
  52912. 8016174: bf00 nop
  52913. 8016176: e7fd b.n 8016174 <vTaskPriorityDisinheritAfterTimeout+0x34>
  52914. /* Determine the priority to which the priority of the task that
  52915. holds the mutex should be set. This will be the greater of the
  52916. holding task's base priority and the priority of the highest
  52917. priority task that is waiting to obtain the mutex. */
  52918. if( pxTCB->uxBasePriority < uxHighestPriorityWaitingTask )
  52919. 8016178: 69bb ldr r3, [r7, #24]
  52920. 801617a: 6cdb ldr r3, [r3, #76] @ 0x4c
  52921. 801617c: 683a ldr r2, [r7, #0]
  52922. 801617e: 429a cmp r2, r3
  52923. 8016180: d902 bls.n 8016188 <vTaskPriorityDisinheritAfterTimeout+0x48>
  52924. {
  52925. uxPriorityToUse = uxHighestPriorityWaitingTask;
  52926. 8016182: 683b ldr r3, [r7, #0]
  52927. 8016184: 61fb str r3, [r7, #28]
  52928. 8016186: e002 b.n 801618e <vTaskPriorityDisinheritAfterTimeout+0x4e>
  52929. }
  52930. else
  52931. {
  52932. uxPriorityToUse = pxTCB->uxBasePriority;
  52933. 8016188: 69bb ldr r3, [r7, #24]
  52934. 801618a: 6cdb ldr r3, [r3, #76] @ 0x4c
  52935. 801618c: 61fb str r3, [r7, #28]
  52936. }
  52937. /* Does the priority need to change? */
  52938. if( pxTCB->uxPriority != uxPriorityToUse )
  52939. 801618e: 69bb ldr r3, [r7, #24]
  52940. 8016190: 6adb ldr r3, [r3, #44] @ 0x2c
  52941. 8016192: 69fa ldr r2, [r7, #28]
  52942. 8016194: 429a cmp r2, r3
  52943. 8016196: d04c beq.n 8016232 <vTaskPriorityDisinheritAfterTimeout+0xf2>
  52944. {
  52945. /* Only disinherit if no other mutexes are held. This is a
  52946. simplification in the priority inheritance implementation. If
  52947. the task that holds the mutex is also holding other mutexes then
  52948. the other mutexes may have caused the priority inheritance. */
  52949. if( pxTCB->uxMutexesHeld == uxOnlyOneMutexHeld )
  52950. 8016198: 69bb ldr r3, [r7, #24]
  52951. 801619a: 6d1b ldr r3, [r3, #80] @ 0x50
  52952. 801619c: 697a ldr r2, [r7, #20]
  52953. 801619e: 429a cmp r2, r3
  52954. 80161a0: d147 bne.n 8016232 <vTaskPriorityDisinheritAfterTimeout+0xf2>
  52955. {
  52956. /* If a task has timed out because it already holds the
  52957. mutex it was trying to obtain then it cannot of inherited
  52958. its own priority. */
  52959. configASSERT( pxTCB != pxCurrentTCB );
  52960. 80161a2: 4b26 ldr r3, [pc, #152] @ (801623c <vTaskPriorityDisinheritAfterTimeout+0xfc>)
  52961. 80161a4: 681b ldr r3, [r3, #0]
  52962. 80161a6: 69ba ldr r2, [r7, #24]
  52963. 80161a8: 429a cmp r2, r3
  52964. 80161aa: d10b bne.n 80161c4 <vTaskPriorityDisinheritAfterTimeout+0x84>
  52965. __asm volatile
  52966. 80161ac: f04f 0350 mov.w r3, #80 @ 0x50
  52967. 80161b0: f383 8811 msr BASEPRI, r3
  52968. 80161b4: f3bf 8f6f isb sy
  52969. 80161b8: f3bf 8f4f dsb sy
  52970. 80161bc: 60bb str r3, [r7, #8]
  52971. }
  52972. 80161be: bf00 nop
  52973. 80161c0: bf00 nop
  52974. 80161c2: e7fd b.n 80161c0 <vTaskPriorityDisinheritAfterTimeout+0x80>
  52975. /* Disinherit the priority, remembering the previous
  52976. priority to facilitate determining the subject task's
  52977. state. */
  52978. traceTASK_PRIORITY_DISINHERIT( pxTCB, pxTCB->uxBasePriority );
  52979. uxPriorityUsedOnEntry = pxTCB->uxPriority;
  52980. 80161c4: 69bb ldr r3, [r7, #24]
  52981. 80161c6: 6adb ldr r3, [r3, #44] @ 0x2c
  52982. 80161c8: 613b str r3, [r7, #16]
  52983. pxTCB->uxPriority = uxPriorityToUse;
  52984. 80161ca: 69bb ldr r3, [r7, #24]
  52985. 80161cc: 69fa ldr r2, [r7, #28]
  52986. 80161ce: 62da str r2, [r3, #44] @ 0x2c
  52987. /* Only reset the event list item value if the value is not
  52988. being used for anything else. */
  52989. if( ( listGET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ) ) & taskEVENT_LIST_ITEM_VALUE_IN_USE ) == 0UL )
  52990. 80161d0: 69bb ldr r3, [r7, #24]
  52991. 80161d2: 699b ldr r3, [r3, #24]
  52992. 80161d4: 2b00 cmp r3, #0
  52993. 80161d6: db04 blt.n 80161e2 <vTaskPriorityDisinheritAfterTimeout+0xa2>
  52994. {
  52995. 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. */
  52996. 80161d8: 69fb ldr r3, [r7, #28]
  52997. 80161da: f1c3 0238 rsb r2, r3, #56 @ 0x38
  52998. 80161de: 69bb ldr r3, [r7, #24]
  52999. 80161e0: 619a str r2, [r3, #24]
  53000. then the task that holds the mutex could be in either the
  53001. Ready, Blocked or Suspended states. Only remove the task
  53002. from its current state list if it is in the Ready state as
  53003. the task's priority is going to change and there is one
  53004. Ready list per priority. */
  53005. if( listIS_CONTAINED_WITHIN( &( pxReadyTasksLists[ uxPriorityUsedOnEntry ] ), &( pxTCB->xStateListItem ) ) != pdFALSE )
  53006. 80161e2: 69bb ldr r3, [r7, #24]
  53007. 80161e4: 6959 ldr r1, [r3, #20]
  53008. 80161e6: 693a ldr r2, [r7, #16]
  53009. 80161e8: 4613 mov r3, r2
  53010. 80161ea: 009b lsls r3, r3, #2
  53011. 80161ec: 4413 add r3, r2
  53012. 80161ee: 009b lsls r3, r3, #2
  53013. 80161f0: 4a13 ldr r2, [pc, #76] @ (8016240 <vTaskPriorityDisinheritAfterTimeout+0x100>)
  53014. 80161f2: 4413 add r3, r2
  53015. 80161f4: 4299 cmp r1, r3
  53016. 80161f6: d11c bne.n 8016232 <vTaskPriorityDisinheritAfterTimeout+0xf2>
  53017. {
  53018. if( uxListRemove( &( pxTCB->xStateListItem ) ) == ( UBaseType_t ) 0 )
  53019. 80161f8: 69bb ldr r3, [r7, #24]
  53020. 80161fa: 3304 adds r3, #4
  53021. 80161fc: 4618 mov r0, r3
  53022. 80161fe: f7fd fe8b bl 8013f18 <uxListRemove>
  53023. else
  53024. {
  53025. mtCOVERAGE_TEST_MARKER();
  53026. }
  53027. prvAddTaskToReadyList( pxTCB );
  53028. 8016202: 69bb ldr r3, [r7, #24]
  53029. 8016204: 6ada ldr r2, [r3, #44] @ 0x2c
  53030. 8016206: 4b0f ldr r3, [pc, #60] @ (8016244 <vTaskPriorityDisinheritAfterTimeout+0x104>)
  53031. 8016208: 681b ldr r3, [r3, #0]
  53032. 801620a: 429a cmp r2, r3
  53033. 801620c: d903 bls.n 8016216 <vTaskPriorityDisinheritAfterTimeout+0xd6>
  53034. 801620e: 69bb ldr r3, [r7, #24]
  53035. 8016210: 6adb ldr r3, [r3, #44] @ 0x2c
  53036. 8016212: 4a0c ldr r2, [pc, #48] @ (8016244 <vTaskPriorityDisinheritAfterTimeout+0x104>)
  53037. 8016214: 6013 str r3, [r2, #0]
  53038. 8016216: 69bb ldr r3, [r7, #24]
  53039. 8016218: 6ada ldr r2, [r3, #44] @ 0x2c
  53040. 801621a: 4613 mov r3, r2
  53041. 801621c: 009b lsls r3, r3, #2
  53042. 801621e: 4413 add r3, r2
  53043. 8016220: 009b lsls r3, r3, #2
  53044. 8016222: 4a07 ldr r2, [pc, #28] @ (8016240 <vTaskPriorityDisinheritAfterTimeout+0x100>)
  53045. 8016224: 441a add r2, r3
  53046. 8016226: 69bb ldr r3, [r7, #24]
  53047. 8016228: 3304 adds r3, #4
  53048. 801622a: 4619 mov r1, r3
  53049. 801622c: 4610 mov r0, r2
  53050. 801622e: f7fd fe16 bl 8013e5e <vListInsertEnd>
  53051. }
  53052. else
  53053. {
  53054. mtCOVERAGE_TEST_MARKER();
  53055. }
  53056. }
  53057. 8016232: bf00 nop
  53058. 8016234: 3720 adds r7, #32
  53059. 8016236: 46bd mov sp, r7
  53060. 8016238: bd80 pop {r7, pc}
  53061. 801623a: bf00 nop
  53062. 801623c: 24002a14 .word 0x24002a14
  53063. 8016240: 24002a18 .word 0x24002a18
  53064. 8016244: 24002ef0 .word 0x24002ef0
  53065. 08016248 <pvTaskIncrementMutexHeldCount>:
  53066. /*-----------------------------------------------------------*/
  53067. #if ( configUSE_MUTEXES == 1 )
  53068. TaskHandle_t pvTaskIncrementMutexHeldCount( void )
  53069. {
  53070. 8016248: b480 push {r7}
  53071. 801624a: af00 add r7, sp, #0
  53072. /* If xSemaphoreCreateMutex() is called before any tasks have been created
  53073. then pxCurrentTCB will be NULL. */
  53074. if( pxCurrentTCB != NULL )
  53075. 801624c: 4b07 ldr r3, [pc, #28] @ (801626c <pvTaskIncrementMutexHeldCount+0x24>)
  53076. 801624e: 681b ldr r3, [r3, #0]
  53077. 8016250: 2b00 cmp r3, #0
  53078. 8016252: d004 beq.n 801625e <pvTaskIncrementMutexHeldCount+0x16>
  53079. {
  53080. ( pxCurrentTCB->uxMutexesHeld )++;
  53081. 8016254: 4b05 ldr r3, [pc, #20] @ (801626c <pvTaskIncrementMutexHeldCount+0x24>)
  53082. 8016256: 681b ldr r3, [r3, #0]
  53083. 8016258: 6d1a ldr r2, [r3, #80] @ 0x50
  53084. 801625a: 3201 adds r2, #1
  53085. 801625c: 651a str r2, [r3, #80] @ 0x50
  53086. }
  53087. return pxCurrentTCB;
  53088. 801625e: 4b03 ldr r3, [pc, #12] @ (801626c <pvTaskIncrementMutexHeldCount+0x24>)
  53089. 8016260: 681b ldr r3, [r3, #0]
  53090. }
  53091. 8016262: 4618 mov r0, r3
  53092. 8016264: 46bd mov sp, r7
  53093. 8016266: f85d 7b04 ldr.w r7, [sp], #4
  53094. 801626a: 4770 bx lr
  53095. 801626c: 24002a14 .word 0x24002a14
  53096. 08016270 <xTaskNotifyWait>:
  53097. /*-----------------------------------------------------------*/
  53098. #if( configUSE_TASK_NOTIFICATIONS == 1 )
  53099. BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait )
  53100. {
  53101. 8016270: b580 push {r7, lr}
  53102. 8016272: b086 sub sp, #24
  53103. 8016274: af00 add r7, sp, #0
  53104. 8016276: 60f8 str r0, [r7, #12]
  53105. 8016278: 60b9 str r1, [r7, #8]
  53106. 801627a: 607a str r2, [r7, #4]
  53107. 801627c: 603b str r3, [r7, #0]
  53108. BaseType_t xReturn;
  53109. taskENTER_CRITICAL();
  53110. 801627e: f000 ffeb bl 8017258 <vPortEnterCritical>
  53111. {
  53112. /* Only block if a notification is not already pending. */
  53113. if( pxCurrentTCB->ucNotifyState != taskNOTIFICATION_RECEIVED )
  53114. 8016282: 4b29 ldr r3, [pc, #164] @ (8016328 <xTaskNotifyWait+0xb8>)
  53115. 8016284: 681b ldr r3, [r3, #0]
  53116. 8016286: f893 30a4 ldrb.w r3, [r3, #164] @ 0xa4
  53117. 801628a: b2db uxtb r3, r3
  53118. 801628c: 2b02 cmp r3, #2
  53119. 801628e: d01c beq.n 80162ca <xTaskNotifyWait+0x5a>
  53120. {
  53121. /* Clear bits in the task's notification value as bits may get
  53122. set by the notifying task or interrupt. This can be used to
  53123. clear the value to zero. */
  53124. pxCurrentTCB->ulNotifiedValue &= ~ulBitsToClearOnEntry;
  53125. 8016290: 4b25 ldr r3, [pc, #148] @ (8016328 <xTaskNotifyWait+0xb8>)
  53126. 8016292: 681b ldr r3, [r3, #0]
  53127. 8016294: f8d3 10a0 ldr.w r1, [r3, #160] @ 0xa0
  53128. 8016298: 68fa ldr r2, [r7, #12]
  53129. 801629a: 43d2 mvns r2, r2
  53130. 801629c: 400a ands r2, r1
  53131. 801629e: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  53132. /* Mark this task as waiting for a notification. */
  53133. pxCurrentTCB->ucNotifyState = taskWAITING_NOTIFICATION;
  53134. 80162a2: 4b21 ldr r3, [pc, #132] @ (8016328 <xTaskNotifyWait+0xb8>)
  53135. 80162a4: 681b ldr r3, [r3, #0]
  53136. 80162a6: 2201 movs r2, #1
  53137. 80162a8: f883 20a4 strb.w r2, [r3, #164] @ 0xa4
  53138. if( xTicksToWait > ( TickType_t ) 0 )
  53139. 80162ac: 683b ldr r3, [r7, #0]
  53140. 80162ae: 2b00 cmp r3, #0
  53141. 80162b0: d00b beq.n 80162ca <xTaskNotifyWait+0x5a>
  53142. {
  53143. prvAddCurrentTaskToDelayedList( xTicksToWait, pdTRUE );
  53144. 80162b2: 2101 movs r1, #1
  53145. 80162b4: 6838 ldr r0, [r7, #0]
  53146. 80162b6: f000 fa09 bl 80166cc <prvAddCurrentTaskToDelayedList>
  53147. /* All ports are written to allow a yield in a critical
  53148. section (some will yield immediately, others wait until the
  53149. critical section exits) - but it is not something that
  53150. application code should ever do. */
  53151. portYIELD_WITHIN_API();
  53152. 80162ba: 4b1c ldr r3, [pc, #112] @ (801632c <xTaskNotifyWait+0xbc>)
  53153. 80162bc: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  53154. 80162c0: 601a str r2, [r3, #0]
  53155. 80162c2: f3bf 8f4f dsb sy
  53156. 80162c6: f3bf 8f6f isb sy
  53157. else
  53158. {
  53159. mtCOVERAGE_TEST_MARKER();
  53160. }
  53161. }
  53162. taskEXIT_CRITICAL();
  53163. 80162ca: f000 fff7 bl 80172bc <vPortExitCritical>
  53164. taskENTER_CRITICAL();
  53165. 80162ce: f000 ffc3 bl 8017258 <vPortEnterCritical>
  53166. {
  53167. traceTASK_NOTIFY_WAIT();
  53168. if( pulNotificationValue != NULL )
  53169. 80162d2: 687b ldr r3, [r7, #4]
  53170. 80162d4: 2b00 cmp r3, #0
  53171. 80162d6: d005 beq.n 80162e4 <xTaskNotifyWait+0x74>
  53172. {
  53173. /* Output the current notification value, which may or may not
  53174. have changed. */
  53175. *pulNotificationValue = pxCurrentTCB->ulNotifiedValue;
  53176. 80162d8: 4b13 ldr r3, [pc, #76] @ (8016328 <xTaskNotifyWait+0xb8>)
  53177. 80162da: 681b ldr r3, [r3, #0]
  53178. 80162dc: f8d3 20a0 ldr.w r2, [r3, #160] @ 0xa0
  53179. 80162e0: 687b ldr r3, [r7, #4]
  53180. 80162e2: 601a str r2, [r3, #0]
  53181. /* If ucNotifyValue is set then either the task never entered the
  53182. blocked state (because a notification was already pending) or the
  53183. task unblocked because of a notification. Otherwise the task
  53184. unblocked because of a timeout. */
  53185. if( pxCurrentTCB->ucNotifyState != taskNOTIFICATION_RECEIVED )
  53186. 80162e4: 4b10 ldr r3, [pc, #64] @ (8016328 <xTaskNotifyWait+0xb8>)
  53187. 80162e6: 681b ldr r3, [r3, #0]
  53188. 80162e8: f893 30a4 ldrb.w r3, [r3, #164] @ 0xa4
  53189. 80162ec: b2db uxtb r3, r3
  53190. 80162ee: 2b02 cmp r3, #2
  53191. 80162f0: d002 beq.n 80162f8 <xTaskNotifyWait+0x88>
  53192. {
  53193. /* A notification was not received. */
  53194. xReturn = pdFALSE;
  53195. 80162f2: 2300 movs r3, #0
  53196. 80162f4: 617b str r3, [r7, #20]
  53197. 80162f6: e00a b.n 801630e <xTaskNotifyWait+0x9e>
  53198. }
  53199. else
  53200. {
  53201. /* A notification was already pending or a notification was
  53202. received while the task was waiting. */
  53203. pxCurrentTCB->ulNotifiedValue &= ~ulBitsToClearOnExit;
  53204. 80162f8: 4b0b ldr r3, [pc, #44] @ (8016328 <xTaskNotifyWait+0xb8>)
  53205. 80162fa: 681b ldr r3, [r3, #0]
  53206. 80162fc: f8d3 10a0 ldr.w r1, [r3, #160] @ 0xa0
  53207. 8016300: 68ba ldr r2, [r7, #8]
  53208. 8016302: 43d2 mvns r2, r2
  53209. 8016304: 400a ands r2, r1
  53210. 8016306: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  53211. xReturn = pdTRUE;
  53212. 801630a: 2301 movs r3, #1
  53213. 801630c: 617b str r3, [r7, #20]
  53214. }
  53215. pxCurrentTCB->ucNotifyState = taskNOT_WAITING_NOTIFICATION;
  53216. 801630e: 4b06 ldr r3, [pc, #24] @ (8016328 <xTaskNotifyWait+0xb8>)
  53217. 8016310: 681b ldr r3, [r3, #0]
  53218. 8016312: 2200 movs r2, #0
  53219. 8016314: f883 20a4 strb.w r2, [r3, #164] @ 0xa4
  53220. }
  53221. taskEXIT_CRITICAL();
  53222. 8016318: f000 ffd0 bl 80172bc <vPortExitCritical>
  53223. return xReturn;
  53224. 801631c: 697b ldr r3, [r7, #20]
  53225. }
  53226. 801631e: 4618 mov r0, r3
  53227. 8016320: 3718 adds r7, #24
  53228. 8016322: 46bd mov sp, r7
  53229. 8016324: bd80 pop {r7, pc}
  53230. 8016326: bf00 nop
  53231. 8016328: 24002a14 .word 0x24002a14
  53232. 801632c: e000ed04 .word 0xe000ed04
  53233. 08016330 <xTaskGenericNotify>:
  53234. /*-----------------------------------------------------------*/
  53235. #if( configUSE_TASK_NOTIFICATIONS == 1 )
  53236. BaseType_t xTaskGenericNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue )
  53237. {
  53238. 8016330: b580 push {r7, lr}
  53239. 8016332: b08a sub sp, #40 @ 0x28
  53240. 8016334: af00 add r7, sp, #0
  53241. 8016336: 60f8 str r0, [r7, #12]
  53242. 8016338: 60b9 str r1, [r7, #8]
  53243. 801633a: 603b str r3, [r7, #0]
  53244. 801633c: 4613 mov r3, r2
  53245. 801633e: 71fb strb r3, [r7, #7]
  53246. TCB_t * pxTCB;
  53247. BaseType_t xReturn = pdPASS;
  53248. 8016340: 2301 movs r3, #1
  53249. 8016342: 627b str r3, [r7, #36] @ 0x24
  53250. uint8_t ucOriginalNotifyState;
  53251. configASSERT( xTaskToNotify );
  53252. 8016344: 68fb ldr r3, [r7, #12]
  53253. 8016346: 2b00 cmp r3, #0
  53254. 8016348: d10b bne.n 8016362 <xTaskGenericNotify+0x32>
  53255. __asm volatile
  53256. 801634a: f04f 0350 mov.w r3, #80 @ 0x50
  53257. 801634e: f383 8811 msr BASEPRI, r3
  53258. 8016352: f3bf 8f6f isb sy
  53259. 8016356: f3bf 8f4f dsb sy
  53260. 801635a: 61bb str r3, [r7, #24]
  53261. }
  53262. 801635c: bf00 nop
  53263. 801635e: bf00 nop
  53264. 8016360: e7fd b.n 801635e <xTaskGenericNotify+0x2e>
  53265. pxTCB = xTaskToNotify;
  53266. 8016362: 68fb ldr r3, [r7, #12]
  53267. 8016364: 623b str r3, [r7, #32]
  53268. taskENTER_CRITICAL();
  53269. 8016366: f000 ff77 bl 8017258 <vPortEnterCritical>
  53270. {
  53271. if( pulPreviousNotificationValue != NULL )
  53272. 801636a: 683b ldr r3, [r7, #0]
  53273. 801636c: 2b00 cmp r3, #0
  53274. 801636e: d004 beq.n 801637a <xTaskGenericNotify+0x4a>
  53275. {
  53276. *pulPreviousNotificationValue = pxTCB->ulNotifiedValue;
  53277. 8016370: 6a3b ldr r3, [r7, #32]
  53278. 8016372: f8d3 20a0 ldr.w r2, [r3, #160] @ 0xa0
  53279. 8016376: 683b ldr r3, [r7, #0]
  53280. 8016378: 601a str r2, [r3, #0]
  53281. }
  53282. ucOriginalNotifyState = pxTCB->ucNotifyState;
  53283. 801637a: 6a3b ldr r3, [r7, #32]
  53284. 801637c: f893 30a4 ldrb.w r3, [r3, #164] @ 0xa4
  53285. 8016380: 77fb strb r3, [r7, #31]
  53286. pxTCB->ucNotifyState = taskNOTIFICATION_RECEIVED;
  53287. 8016382: 6a3b ldr r3, [r7, #32]
  53288. 8016384: 2202 movs r2, #2
  53289. 8016386: f883 20a4 strb.w r2, [r3, #164] @ 0xa4
  53290. switch( eAction )
  53291. 801638a: 79fb ldrb r3, [r7, #7]
  53292. 801638c: 2b04 cmp r3, #4
  53293. 801638e: d82e bhi.n 80163ee <xTaskGenericNotify+0xbe>
  53294. 8016390: a201 add r2, pc, #4 @ (adr r2, 8016398 <xTaskGenericNotify+0x68>)
  53295. 8016392: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  53296. 8016396: bf00 nop
  53297. 8016398: 08016413 .word 0x08016413
  53298. 801639c: 080163ad .word 0x080163ad
  53299. 80163a0: 080163bf .word 0x080163bf
  53300. 80163a4: 080163cf .word 0x080163cf
  53301. 80163a8: 080163d9 .word 0x080163d9
  53302. {
  53303. case eSetBits :
  53304. pxTCB->ulNotifiedValue |= ulValue;
  53305. 80163ac: 6a3b ldr r3, [r7, #32]
  53306. 80163ae: f8d3 20a0 ldr.w r2, [r3, #160] @ 0xa0
  53307. 80163b2: 68bb ldr r3, [r7, #8]
  53308. 80163b4: 431a orrs r2, r3
  53309. 80163b6: 6a3b ldr r3, [r7, #32]
  53310. 80163b8: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  53311. break;
  53312. 80163bc: e02c b.n 8016418 <xTaskGenericNotify+0xe8>
  53313. case eIncrement :
  53314. ( pxTCB->ulNotifiedValue )++;
  53315. 80163be: 6a3b ldr r3, [r7, #32]
  53316. 80163c0: f8d3 30a0 ldr.w r3, [r3, #160] @ 0xa0
  53317. 80163c4: 1c5a adds r2, r3, #1
  53318. 80163c6: 6a3b ldr r3, [r7, #32]
  53319. 80163c8: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  53320. break;
  53321. 80163cc: e024 b.n 8016418 <xTaskGenericNotify+0xe8>
  53322. case eSetValueWithOverwrite :
  53323. pxTCB->ulNotifiedValue = ulValue;
  53324. 80163ce: 6a3b ldr r3, [r7, #32]
  53325. 80163d0: 68ba ldr r2, [r7, #8]
  53326. 80163d2: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  53327. break;
  53328. 80163d6: e01f b.n 8016418 <xTaskGenericNotify+0xe8>
  53329. case eSetValueWithoutOverwrite :
  53330. if( ucOriginalNotifyState != taskNOTIFICATION_RECEIVED )
  53331. 80163d8: 7ffb ldrb r3, [r7, #31]
  53332. 80163da: 2b02 cmp r3, #2
  53333. 80163dc: d004 beq.n 80163e8 <xTaskGenericNotify+0xb8>
  53334. {
  53335. pxTCB->ulNotifiedValue = ulValue;
  53336. 80163de: 6a3b ldr r3, [r7, #32]
  53337. 80163e0: 68ba ldr r2, [r7, #8]
  53338. 80163e2: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  53339. else
  53340. {
  53341. /* The value could not be written to the task. */
  53342. xReturn = pdFAIL;
  53343. }
  53344. break;
  53345. 80163e6: e017 b.n 8016418 <xTaskGenericNotify+0xe8>
  53346. xReturn = pdFAIL;
  53347. 80163e8: 2300 movs r3, #0
  53348. 80163ea: 627b str r3, [r7, #36] @ 0x24
  53349. break;
  53350. 80163ec: e014 b.n 8016418 <xTaskGenericNotify+0xe8>
  53351. default:
  53352. /* Should not get here if all enums are handled.
  53353. Artificially force an assert by testing a value the
  53354. compiler can't assume is const. */
  53355. configASSERT( pxTCB->ulNotifiedValue == ~0UL );
  53356. 80163ee: 6a3b ldr r3, [r7, #32]
  53357. 80163f0: f8d3 30a0 ldr.w r3, [r3, #160] @ 0xa0
  53358. 80163f4: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  53359. 80163f8: d00d beq.n 8016416 <xTaskGenericNotify+0xe6>
  53360. __asm volatile
  53361. 80163fa: f04f 0350 mov.w r3, #80 @ 0x50
  53362. 80163fe: f383 8811 msr BASEPRI, r3
  53363. 8016402: f3bf 8f6f isb sy
  53364. 8016406: f3bf 8f4f dsb sy
  53365. 801640a: 617b str r3, [r7, #20]
  53366. }
  53367. 801640c: bf00 nop
  53368. 801640e: bf00 nop
  53369. 8016410: e7fd b.n 801640e <xTaskGenericNotify+0xde>
  53370. break;
  53371. 8016412: bf00 nop
  53372. 8016414: e000 b.n 8016418 <xTaskGenericNotify+0xe8>
  53373. break;
  53374. 8016416: bf00 nop
  53375. traceTASK_NOTIFY();
  53376. /* If the task is in the blocked state specifically to wait for a
  53377. notification then unblock it now. */
  53378. if( ucOriginalNotifyState == taskWAITING_NOTIFICATION )
  53379. 8016418: 7ffb ldrb r3, [r7, #31]
  53380. 801641a: 2b01 cmp r3, #1
  53381. 801641c: d13b bne.n 8016496 <xTaskGenericNotify+0x166>
  53382. {
  53383. ( void ) uxListRemove( &( pxTCB->xStateListItem ) );
  53384. 801641e: 6a3b ldr r3, [r7, #32]
  53385. 8016420: 3304 adds r3, #4
  53386. 8016422: 4618 mov r0, r3
  53387. 8016424: f7fd fd78 bl 8013f18 <uxListRemove>
  53388. prvAddTaskToReadyList( pxTCB );
  53389. 8016428: 6a3b ldr r3, [r7, #32]
  53390. 801642a: 6ada ldr r2, [r3, #44] @ 0x2c
  53391. 801642c: 4b1d ldr r3, [pc, #116] @ (80164a4 <xTaskGenericNotify+0x174>)
  53392. 801642e: 681b ldr r3, [r3, #0]
  53393. 8016430: 429a cmp r2, r3
  53394. 8016432: d903 bls.n 801643c <xTaskGenericNotify+0x10c>
  53395. 8016434: 6a3b ldr r3, [r7, #32]
  53396. 8016436: 6adb ldr r3, [r3, #44] @ 0x2c
  53397. 8016438: 4a1a ldr r2, [pc, #104] @ (80164a4 <xTaskGenericNotify+0x174>)
  53398. 801643a: 6013 str r3, [r2, #0]
  53399. 801643c: 6a3b ldr r3, [r7, #32]
  53400. 801643e: 6ada ldr r2, [r3, #44] @ 0x2c
  53401. 8016440: 4613 mov r3, r2
  53402. 8016442: 009b lsls r3, r3, #2
  53403. 8016444: 4413 add r3, r2
  53404. 8016446: 009b lsls r3, r3, #2
  53405. 8016448: 4a17 ldr r2, [pc, #92] @ (80164a8 <xTaskGenericNotify+0x178>)
  53406. 801644a: 441a add r2, r3
  53407. 801644c: 6a3b ldr r3, [r7, #32]
  53408. 801644e: 3304 adds r3, #4
  53409. 8016450: 4619 mov r1, r3
  53410. 8016452: 4610 mov r0, r2
  53411. 8016454: f7fd fd03 bl 8013e5e <vListInsertEnd>
  53412. /* The task should not have been on an event list. */
  53413. configASSERT( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) == NULL );
  53414. 8016458: 6a3b ldr r3, [r7, #32]
  53415. 801645a: 6a9b ldr r3, [r3, #40] @ 0x28
  53416. 801645c: 2b00 cmp r3, #0
  53417. 801645e: d00b beq.n 8016478 <xTaskGenericNotify+0x148>
  53418. __asm volatile
  53419. 8016460: f04f 0350 mov.w r3, #80 @ 0x50
  53420. 8016464: f383 8811 msr BASEPRI, r3
  53421. 8016468: f3bf 8f6f isb sy
  53422. 801646c: f3bf 8f4f dsb sy
  53423. 8016470: 613b str r3, [r7, #16]
  53424. }
  53425. 8016472: bf00 nop
  53426. 8016474: bf00 nop
  53427. 8016476: e7fd b.n 8016474 <xTaskGenericNotify+0x144>
  53428. earliest possible time. */
  53429. prvResetNextTaskUnblockTime();
  53430. }
  53431. #endif
  53432. if( pxTCB->uxPriority > pxCurrentTCB->uxPriority )
  53433. 8016478: 6a3b ldr r3, [r7, #32]
  53434. 801647a: 6ada ldr r2, [r3, #44] @ 0x2c
  53435. 801647c: 4b0b ldr r3, [pc, #44] @ (80164ac <xTaskGenericNotify+0x17c>)
  53436. 801647e: 681b ldr r3, [r3, #0]
  53437. 8016480: 6adb ldr r3, [r3, #44] @ 0x2c
  53438. 8016482: 429a cmp r2, r3
  53439. 8016484: d907 bls.n 8016496 <xTaskGenericNotify+0x166>
  53440. {
  53441. /* The notified task has a priority above the currently
  53442. executing task so a yield is required. */
  53443. taskYIELD_IF_USING_PREEMPTION();
  53444. 8016486: 4b0a ldr r3, [pc, #40] @ (80164b0 <xTaskGenericNotify+0x180>)
  53445. 8016488: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  53446. 801648c: 601a str r2, [r3, #0]
  53447. 801648e: f3bf 8f4f dsb sy
  53448. 8016492: f3bf 8f6f isb sy
  53449. else
  53450. {
  53451. mtCOVERAGE_TEST_MARKER();
  53452. }
  53453. }
  53454. taskEXIT_CRITICAL();
  53455. 8016496: f000 ff11 bl 80172bc <vPortExitCritical>
  53456. return xReturn;
  53457. 801649a: 6a7b ldr r3, [r7, #36] @ 0x24
  53458. }
  53459. 801649c: 4618 mov r0, r3
  53460. 801649e: 3728 adds r7, #40 @ 0x28
  53461. 80164a0: 46bd mov sp, r7
  53462. 80164a2: bd80 pop {r7, pc}
  53463. 80164a4: 24002ef0 .word 0x24002ef0
  53464. 80164a8: 24002a18 .word 0x24002a18
  53465. 80164ac: 24002a14 .word 0x24002a14
  53466. 80164b0: e000ed04 .word 0xe000ed04
  53467. 080164b4 <xTaskGenericNotifyFromISR>:
  53468. /*-----------------------------------------------------------*/
  53469. #if( configUSE_TASK_NOTIFICATIONS == 1 )
  53470. BaseType_t xTaskGenericNotifyFromISR( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue, BaseType_t *pxHigherPriorityTaskWoken )
  53471. {
  53472. 80164b4: b580 push {r7, lr}
  53473. 80164b6: b08e sub sp, #56 @ 0x38
  53474. 80164b8: af00 add r7, sp, #0
  53475. 80164ba: 60f8 str r0, [r7, #12]
  53476. 80164bc: 60b9 str r1, [r7, #8]
  53477. 80164be: 603b str r3, [r7, #0]
  53478. 80164c0: 4613 mov r3, r2
  53479. 80164c2: 71fb strb r3, [r7, #7]
  53480. TCB_t * pxTCB;
  53481. uint8_t ucOriginalNotifyState;
  53482. BaseType_t xReturn = pdPASS;
  53483. 80164c4: 2301 movs r3, #1
  53484. 80164c6: 637b str r3, [r7, #52] @ 0x34
  53485. UBaseType_t uxSavedInterruptStatus;
  53486. configASSERT( xTaskToNotify );
  53487. 80164c8: 68fb ldr r3, [r7, #12]
  53488. 80164ca: 2b00 cmp r3, #0
  53489. 80164cc: d10b bne.n 80164e6 <xTaskGenericNotifyFromISR+0x32>
  53490. __asm volatile
  53491. 80164ce: f04f 0350 mov.w r3, #80 @ 0x50
  53492. 80164d2: f383 8811 msr BASEPRI, r3
  53493. 80164d6: f3bf 8f6f isb sy
  53494. 80164da: f3bf 8f4f dsb sy
  53495. 80164de: 627b str r3, [r7, #36] @ 0x24
  53496. }
  53497. 80164e0: bf00 nop
  53498. 80164e2: bf00 nop
  53499. 80164e4: e7fd b.n 80164e2 <xTaskGenericNotifyFromISR+0x2e>
  53500. below the maximum system call interrupt priority. FreeRTOS maintains a
  53501. separate interrupt safe API to ensure interrupt entry is as fast and as
  53502. simple as possible. More information (albeit Cortex-M specific) is
  53503. provided on the following link:
  53504. http://www.freertos.org/RTOS-Cortex-M3-M4.html */
  53505. portASSERT_IF_INTERRUPT_PRIORITY_INVALID();
  53506. 80164e6: f000 ff97 bl 8017418 <vPortValidateInterruptPriority>
  53507. pxTCB = xTaskToNotify;
  53508. 80164ea: 68fb ldr r3, [r7, #12]
  53509. 80164ec: 633b str r3, [r7, #48] @ 0x30
  53510. __asm volatile
  53511. 80164ee: f3ef 8211 mrs r2, BASEPRI
  53512. 80164f2: f04f 0350 mov.w r3, #80 @ 0x50
  53513. 80164f6: f383 8811 msr BASEPRI, r3
  53514. 80164fa: f3bf 8f6f isb sy
  53515. 80164fe: f3bf 8f4f dsb sy
  53516. 8016502: 623a str r2, [r7, #32]
  53517. 8016504: 61fb str r3, [r7, #28]
  53518. return ulOriginalBASEPRI;
  53519. 8016506: 6a3b ldr r3, [r7, #32]
  53520. uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
  53521. 8016508: 62fb str r3, [r7, #44] @ 0x2c
  53522. {
  53523. if( pulPreviousNotificationValue != NULL )
  53524. 801650a: 683b ldr r3, [r7, #0]
  53525. 801650c: 2b00 cmp r3, #0
  53526. 801650e: d004 beq.n 801651a <xTaskGenericNotifyFromISR+0x66>
  53527. {
  53528. *pulPreviousNotificationValue = pxTCB->ulNotifiedValue;
  53529. 8016510: 6b3b ldr r3, [r7, #48] @ 0x30
  53530. 8016512: f8d3 20a0 ldr.w r2, [r3, #160] @ 0xa0
  53531. 8016516: 683b ldr r3, [r7, #0]
  53532. 8016518: 601a str r2, [r3, #0]
  53533. }
  53534. ucOriginalNotifyState = pxTCB->ucNotifyState;
  53535. 801651a: 6b3b ldr r3, [r7, #48] @ 0x30
  53536. 801651c: f893 30a4 ldrb.w r3, [r3, #164] @ 0xa4
  53537. 8016520: f887 302b strb.w r3, [r7, #43] @ 0x2b
  53538. pxTCB->ucNotifyState = taskNOTIFICATION_RECEIVED;
  53539. 8016524: 6b3b ldr r3, [r7, #48] @ 0x30
  53540. 8016526: 2202 movs r2, #2
  53541. 8016528: f883 20a4 strb.w r2, [r3, #164] @ 0xa4
  53542. switch( eAction )
  53543. 801652c: 79fb ldrb r3, [r7, #7]
  53544. 801652e: 2b04 cmp r3, #4
  53545. 8016530: d82e bhi.n 8016590 <xTaskGenericNotifyFromISR+0xdc>
  53546. 8016532: a201 add r2, pc, #4 @ (adr r2, 8016538 <xTaskGenericNotifyFromISR+0x84>)
  53547. 8016534: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  53548. 8016538: 080165b5 .word 0x080165b5
  53549. 801653c: 0801654d .word 0x0801654d
  53550. 8016540: 0801655f .word 0x0801655f
  53551. 8016544: 0801656f .word 0x0801656f
  53552. 8016548: 08016579 .word 0x08016579
  53553. {
  53554. case eSetBits :
  53555. pxTCB->ulNotifiedValue |= ulValue;
  53556. 801654c: 6b3b ldr r3, [r7, #48] @ 0x30
  53557. 801654e: f8d3 20a0 ldr.w r2, [r3, #160] @ 0xa0
  53558. 8016552: 68bb ldr r3, [r7, #8]
  53559. 8016554: 431a orrs r2, r3
  53560. 8016556: 6b3b ldr r3, [r7, #48] @ 0x30
  53561. 8016558: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  53562. break;
  53563. 801655c: e02d b.n 80165ba <xTaskGenericNotifyFromISR+0x106>
  53564. case eIncrement :
  53565. ( pxTCB->ulNotifiedValue )++;
  53566. 801655e: 6b3b ldr r3, [r7, #48] @ 0x30
  53567. 8016560: f8d3 30a0 ldr.w r3, [r3, #160] @ 0xa0
  53568. 8016564: 1c5a adds r2, r3, #1
  53569. 8016566: 6b3b ldr r3, [r7, #48] @ 0x30
  53570. 8016568: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  53571. break;
  53572. 801656c: e025 b.n 80165ba <xTaskGenericNotifyFromISR+0x106>
  53573. case eSetValueWithOverwrite :
  53574. pxTCB->ulNotifiedValue = ulValue;
  53575. 801656e: 6b3b ldr r3, [r7, #48] @ 0x30
  53576. 8016570: 68ba ldr r2, [r7, #8]
  53577. 8016572: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  53578. break;
  53579. 8016576: e020 b.n 80165ba <xTaskGenericNotifyFromISR+0x106>
  53580. case eSetValueWithoutOverwrite :
  53581. if( ucOriginalNotifyState != taskNOTIFICATION_RECEIVED )
  53582. 8016578: f897 302b ldrb.w r3, [r7, #43] @ 0x2b
  53583. 801657c: 2b02 cmp r3, #2
  53584. 801657e: d004 beq.n 801658a <xTaskGenericNotifyFromISR+0xd6>
  53585. {
  53586. pxTCB->ulNotifiedValue = ulValue;
  53587. 8016580: 6b3b ldr r3, [r7, #48] @ 0x30
  53588. 8016582: 68ba ldr r2, [r7, #8]
  53589. 8016584: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  53590. else
  53591. {
  53592. /* The value could not be written to the task. */
  53593. xReturn = pdFAIL;
  53594. }
  53595. break;
  53596. 8016588: e017 b.n 80165ba <xTaskGenericNotifyFromISR+0x106>
  53597. xReturn = pdFAIL;
  53598. 801658a: 2300 movs r3, #0
  53599. 801658c: 637b str r3, [r7, #52] @ 0x34
  53600. break;
  53601. 801658e: e014 b.n 80165ba <xTaskGenericNotifyFromISR+0x106>
  53602. default:
  53603. /* Should not get here if all enums are handled.
  53604. Artificially force an assert by testing a value the
  53605. compiler can't assume is const. */
  53606. configASSERT( pxTCB->ulNotifiedValue == ~0UL );
  53607. 8016590: 6b3b ldr r3, [r7, #48] @ 0x30
  53608. 8016592: f8d3 30a0 ldr.w r3, [r3, #160] @ 0xa0
  53609. 8016596: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  53610. 801659a: d00d beq.n 80165b8 <xTaskGenericNotifyFromISR+0x104>
  53611. __asm volatile
  53612. 801659c: f04f 0350 mov.w r3, #80 @ 0x50
  53613. 80165a0: f383 8811 msr BASEPRI, r3
  53614. 80165a4: f3bf 8f6f isb sy
  53615. 80165a8: f3bf 8f4f dsb sy
  53616. 80165ac: 61bb str r3, [r7, #24]
  53617. }
  53618. 80165ae: bf00 nop
  53619. 80165b0: bf00 nop
  53620. 80165b2: e7fd b.n 80165b0 <xTaskGenericNotifyFromISR+0xfc>
  53621. break;
  53622. 80165b4: bf00 nop
  53623. 80165b6: e000 b.n 80165ba <xTaskGenericNotifyFromISR+0x106>
  53624. break;
  53625. 80165b8: bf00 nop
  53626. traceTASK_NOTIFY_FROM_ISR();
  53627. /* If the task is in the blocked state specifically to wait for a
  53628. notification then unblock it now. */
  53629. if( ucOriginalNotifyState == taskWAITING_NOTIFICATION )
  53630. 80165ba: f897 302b ldrb.w r3, [r7, #43] @ 0x2b
  53631. 80165be: 2b01 cmp r3, #1
  53632. 80165c0: d147 bne.n 8016652 <xTaskGenericNotifyFromISR+0x19e>
  53633. {
  53634. /* The task should not have been on an event list. */
  53635. configASSERT( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) == NULL );
  53636. 80165c2: 6b3b ldr r3, [r7, #48] @ 0x30
  53637. 80165c4: 6a9b ldr r3, [r3, #40] @ 0x28
  53638. 80165c6: 2b00 cmp r3, #0
  53639. 80165c8: d00b beq.n 80165e2 <xTaskGenericNotifyFromISR+0x12e>
  53640. __asm volatile
  53641. 80165ca: f04f 0350 mov.w r3, #80 @ 0x50
  53642. 80165ce: f383 8811 msr BASEPRI, r3
  53643. 80165d2: f3bf 8f6f isb sy
  53644. 80165d6: f3bf 8f4f dsb sy
  53645. 80165da: 617b str r3, [r7, #20]
  53646. }
  53647. 80165dc: bf00 nop
  53648. 80165de: bf00 nop
  53649. 80165e0: e7fd b.n 80165de <xTaskGenericNotifyFromISR+0x12a>
  53650. if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE )
  53651. 80165e2: 4b21 ldr r3, [pc, #132] @ (8016668 <xTaskGenericNotifyFromISR+0x1b4>)
  53652. 80165e4: 681b ldr r3, [r3, #0]
  53653. 80165e6: 2b00 cmp r3, #0
  53654. 80165e8: d11d bne.n 8016626 <xTaskGenericNotifyFromISR+0x172>
  53655. {
  53656. ( void ) uxListRemove( &( pxTCB->xStateListItem ) );
  53657. 80165ea: 6b3b ldr r3, [r7, #48] @ 0x30
  53658. 80165ec: 3304 adds r3, #4
  53659. 80165ee: 4618 mov r0, r3
  53660. 80165f0: f7fd fc92 bl 8013f18 <uxListRemove>
  53661. prvAddTaskToReadyList( pxTCB );
  53662. 80165f4: 6b3b ldr r3, [r7, #48] @ 0x30
  53663. 80165f6: 6ada ldr r2, [r3, #44] @ 0x2c
  53664. 80165f8: 4b1c ldr r3, [pc, #112] @ (801666c <xTaskGenericNotifyFromISR+0x1b8>)
  53665. 80165fa: 681b ldr r3, [r3, #0]
  53666. 80165fc: 429a cmp r2, r3
  53667. 80165fe: d903 bls.n 8016608 <xTaskGenericNotifyFromISR+0x154>
  53668. 8016600: 6b3b ldr r3, [r7, #48] @ 0x30
  53669. 8016602: 6adb ldr r3, [r3, #44] @ 0x2c
  53670. 8016604: 4a19 ldr r2, [pc, #100] @ (801666c <xTaskGenericNotifyFromISR+0x1b8>)
  53671. 8016606: 6013 str r3, [r2, #0]
  53672. 8016608: 6b3b ldr r3, [r7, #48] @ 0x30
  53673. 801660a: 6ada ldr r2, [r3, #44] @ 0x2c
  53674. 801660c: 4613 mov r3, r2
  53675. 801660e: 009b lsls r3, r3, #2
  53676. 8016610: 4413 add r3, r2
  53677. 8016612: 009b lsls r3, r3, #2
  53678. 8016614: 4a16 ldr r2, [pc, #88] @ (8016670 <xTaskGenericNotifyFromISR+0x1bc>)
  53679. 8016616: 441a add r2, r3
  53680. 8016618: 6b3b ldr r3, [r7, #48] @ 0x30
  53681. 801661a: 3304 adds r3, #4
  53682. 801661c: 4619 mov r1, r3
  53683. 801661e: 4610 mov r0, r2
  53684. 8016620: f7fd fc1d bl 8013e5e <vListInsertEnd>
  53685. 8016624: e005 b.n 8016632 <xTaskGenericNotifyFromISR+0x17e>
  53686. }
  53687. else
  53688. {
  53689. /* The delayed and ready lists cannot be accessed, so hold
  53690. this task pending until the scheduler is resumed. */
  53691. vListInsertEnd( &( xPendingReadyList ), &( pxTCB->xEventListItem ) );
  53692. 8016626: 6b3b ldr r3, [r7, #48] @ 0x30
  53693. 8016628: 3318 adds r3, #24
  53694. 801662a: 4619 mov r1, r3
  53695. 801662c: 4811 ldr r0, [pc, #68] @ (8016674 <xTaskGenericNotifyFromISR+0x1c0>)
  53696. 801662e: f7fd fc16 bl 8013e5e <vListInsertEnd>
  53697. }
  53698. if( pxTCB->uxPriority > pxCurrentTCB->uxPriority )
  53699. 8016632: 6b3b ldr r3, [r7, #48] @ 0x30
  53700. 8016634: 6ada ldr r2, [r3, #44] @ 0x2c
  53701. 8016636: 4b10 ldr r3, [pc, #64] @ (8016678 <xTaskGenericNotifyFromISR+0x1c4>)
  53702. 8016638: 681b ldr r3, [r3, #0]
  53703. 801663a: 6adb ldr r3, [r3, #44] @ 0x2c
  53704. 801663c: 429a cmp r2, r3
  53705. 801663e: d908 bls.n 8016652 <xTaskGenericNotifyFromISR+0x19e>
  53706. {
  53707. /* The notified task has a priority above the currently
  53708. executing task so a yield is required. */
  53709. if( pxHigherPriorityTaskWoken != NULL )
  53710. 8016640: 6c3b ldr r3, [r7, #64] @ 0x40
  53711. 8016642: 2b00 cmp r3, #0
  53712. 8016644: d002 beq.n 801664c <xTaskGenericNotifyFromISR+0x198>
  53713. {
  53714. *pxHigherPriorityTaskWoken = pdTRUE;
  53715. 8016646: 6c3b ldr r3, [r7, #64] @ 0x40
  53716. 8016648: 2201 movs r2, #1
  53717. 801664a: 601a str r2, [r3, #0]
  53718. }
  53719. /* Mark that a yield is pending in case the user is not
  53720. using the "xHigherPriorityTaskWoken" parameter to an ISR
  53721. safe FreeRTOS function. */
  53722. xYieldPending = pdTRUE;
  53723. 801664c: 4b0b ldr r3, [pc, #44] @ (801667c <xTaskGenericNotifyFromISR+0x1c8>)
  53724. 801664e: 2201 movs r2, #1
  53725. 8016650: 601a str r2, [r3, #0]
  53726. 8016652: 6afb ldr r3, [r7, #44] @ 0x2c
  53727. 8016654: 613b str r3, [r7, #16]
  53728. __asm volatile
  53729. 8016656: 693b ldr r3, [r7, #16]
  53730. 8016658: f383 8811 msr BASEPRI, r3
  53731. }
  53732. 801665c: bf00 nop
  53733. }
  53734. }
  53735. }
  53736. portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus );
  53737. return xReturn;
  53738. 801665e: 6b7b ldr r3, [r7, #52] @ 0x34
  53739. }
  53740. 8016660: 4618 mov r0, r3
  53741. 8016662: 3738 adds r7, #56 @ 0x38
  53742. 8016664: 46bd mov sp, r7
  53743. 8016666: bd80 pop {r7, pc}
  53744. 8016668: 24002f10 .word 0x24002f10
  53745. 801666c: 24002ef0 .word 0x24002ef0
  53746. 8016670: 24002a18 .word 0x24002a18
  53747. 8016674: 24002ea8 .word 0x24002ea8
  53748. 8016678: 24002a14 .word 0x24002a14
  53749. 801667c: 24002efc .word 0x24002efc
  53750. 08016680 <xTaskNotifyStateClear>:
  53751. /*-----------------------------------------------------------*/
  53752. #if( configUSE_TASK_NOTIFICATIONS == 1 )
  53753. BaseType_t xTaskNotifyStateClear( TaskHandle_t xTask )
  53754. {
  53755. 8016680: b580 push {r7, lr}
  53756. 8016682: b084 sub sp, #16
  53757. 8016684: af00 add r7, sp, #0
  53758. 8016686: 6078 str r0, [r7, #4]
  53759. TCB_t *pxTCB;
  53760. BaseType_t xReturn;
  53761. /* If null is passed in here then it is the calling task that is having
  53762. its notification state cleared. */
  53763. pxTCB = prvGetTCBFromHandle( xTask );
  53764. 8016688: 687b ldr r3, [r7, #4]
  53765. 801668a: 2b00 cmp r3, #0
  53766. 801668c: d102 bne.n 8016694 <xTaskNotifyStateClear+0x14>
  53767. 801668e: 4b0e ldr r3, [pc, #56] @ (80166c8 <xTaskNotifyStateClear+0x48>)
  53768. 8016690: 681b ldr r3, [r3, #0]
  53769. 8016692: e000 b.n 8016696 <xTaskNotifyStateClear+0x16>
  53770. 8016694: 687b ldr r3, [r7, #4]
  53771. 8016696: 60bb str r3, [r7, #8]
  53772. taskENTER_CRITICAL();
  53773. 8016698: f000 fdde bl 8017258 <vPortEnterCritical>
  53774. {
  53775. if( pxTCB->ucNotifyState == taskNOTIFICATION_RECEIVED )
  53776. 801669c: 68bb ldr r3, [r7, #8]
  53777. 801669e: f893 30a4 ldrb.w r3, [r3, #164] @ 0xa4
  53778. 80166a2: b2db uxtb r3, r3
  53779. 80166a4: 2b02 cmp r3, #2
  53780. 80166a6: d106 bne.n 80166b6 <xTaskNotifyStateClear+0x36>
  53781. {
  53782. pxTCB->ucNotifyState = taskNOT_WAITING_NOTIFICATION;
  53783. 80166a8: 68bb ldr r3, [r7, #8]
  53784. 80166aa: 2200 movs r2, #0
  53785. 80166ac: f883 20a4 strb.w r2, [r3, #164] @ 0xa4
  53786. xReturn = pdPASS;
  53787. 80166b0: 2301 movs r3, #1
  53788. 80166b2: 60fb str r3, [r7, #12]
  53789. 80166b4: e001 b.n 80166ba <xTaskNotifyStateClear+0x3a>
  53790. }
  53791. else
  53792. {
  53793. xReturn = pdFAIL;
  53794. 80166b6: 2300 movs r3, #0
  53795. 80166b8: 60fb str r3, [r7, #12]
  53796. }
  53797. }
  53798. taskEXIT_CRITICAL();
  53799. 80166ba: f000 fdff bl 80172bc <vPortExitCritical>
  53800. return xReturn;
  53801. 80166be: 68fb ldr r3, [r7, #12]
  53802. }
  53803. 80166c0: 4618 mov r0, r3
  53804. 80166c2: 3710 adds r7, #16
  53805. 80166c4: 46bd mov sp, r7
  53806. 80166c6: bd80 pop {r7, pc}
  53807. 80166c8: 24002a14 .word 0x24002a14
  53808. 080166cc <prvAddCurrentTaskToDelayedList>:
  53809. #endif
  53810. /*-----------------------------------------------------------*/
  53811. static void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait, const BaseType_t xCanBlockIndefinitely )
  53812. {
  53813. 80166cc: b580 push {r7, lr}
  53814. 80166ce: b084 sub sp, #16
  53815. 80166d0: af00 add r7, sp, #0
  53816. 80166d2: 6078 str r0, [r7, #4]
  53817. 80166d4: 6039 str r1, [r7, #0]
  53818. TickType_t xTimeToWake;
  53819. const TickType_t xConstTickCount = xTickCount;
  53820. 80166d6: 4b21 ldr r3, [pc, #132] @ (801675c <prvAddCurrentTaskToDelayedList+0x90>)
  53821. 80166d8: 681b ldr r3, [r3, #0]
  53822. 80166da: 60fb str r3, [r7, #12]
  53823. }
  53824. #endif
  53825. /* Remove the task from the ready list before adding it to the blocked list
  53826. as the same list item is used for both lists. */
  53827. if( uxListRemove( &( pxCurrentTCB->xStateListItem ) ) == ( UBaseType_t ) 0 )
  53828. 80166dc: 4b20 ldr r3, [pc, #128] @ (8016760 <prvAddCurrentTaskToDelayedList+0x94>)
  53829. 80166de: 681b ldr r3, [r3, #0]
  53830. 80166e0: 3304 adds r3, #4
  53831. 80166e2: 4618 mov r0, r3
  53832. 80166e4: f7fd fc18 bl 8013f18 <uxListRemove>
  53833. mtCOVERAGE_TEST_MARKER();
  53834. }
  53835. #if ( INCLUDE_vTaskSuspend == 1 )
  53836. {
  53837. if( ( xTicksToWait == portMAX_DELAY ) && ( xCanBlockIndefinitely != pdFALSE ) )
  53838. 80166e8: 687b ldr r3, [r7, #4]
  53839. 80166ea: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  53840. 80166ee: d10a bne.n 8016706 <prvAddCurrentTaskToDelayedList+0x3a>
  53841. 80166f0: 683b ldr r3, [r7, #0]
  53842. 80166f2: 2b00 cmp r3, #0
  53843. 80166f4: d007 beq.n 8016706 <prvAddCurrentTaskToDelayedList+0x3a>
  53844. {
  53845. /* Add the task to the suspended task list instead of a delayed task
  53846. list to ensure it is not woken by a timing event. It will block
  53847. indefinitely. */
  53848. vListInsertEnd( &xSuspendedTaskList, &( pxCurrentTCB->xStateListItem ) );
  53849. 80166f6: 4b1a ldr r3, [pc, #104] @ (8016760 <prvAddCurrentTaskToDelayedList+0x94>)
  53850. 80166f8: 681b ldr r3, [r3, #0]
  53851. 80166fa: 3304 adds r3, #4
  53852. 80166fc: 4619 mov r1, r3
  53853. 80166fe: 4819 ldr r0, [pc, #100] @ (8016764 <prvAddCurrentTaskToDelayedList+0x98>)
  53854. 8016700: f7fd fbad bl 8013e5e <vListInsertEnd>
  53855. /* Avoid compiler warning when INCLUDE_vTaskSuspend is not 1. */
  53856. ( void ) xCanBlockIndefinitely;
  53857. }
  53858. #endif /* INCLUDE_vTaskSuspend */
  53859. }
  53860. 8016704: e026 b.n 8016754 <prvAddCurrentTaskToDelayedList+0x88>
  53861. xTimeToWake = xConstTickCount + xTicksToWait;
  53862. 8016706: 68fa ldr r2, [r7, #12]
  53863. 8016708: 687b ldr r3, [r7, #4]
  53864. 801670a: 4413 add r3, r2
  53865. 801670c: 60bb str r3, [r7, #8]
  53866. listSET_LIST_ITEM_VALUE( &( pxCurrentTCB->xStateListItem ), xTimeToWake );
  53867. 801670e: 4b14 ldr r3, [pc, #80] @ (8016760 <prvAddCurrentTaskToDelayedList+0x94>)
  53868. 8016710: 681b ldr r3, [r3, #0]
  53869. 8016712: 68ba ldr r2, [r7, #8]
  53870. 8016714: 605a str r2, [r3, #4]
  53871. if( xTimeToWake < xConstTickCount )
  53872. 8016716: 68ba ldr r2, [r7, #8]
  53873. 8016718: 68fb ldr r3, [r7, #12]
  53874. 801671a: 429a cmp r2, r3
  53875. 801671c: d209 bcs.n 8016732 <prvAddCurrentTaskToDelayedList+0x66>
  53876. vListInsert( pxOverflowDelayedTaskList, &( pxCurrentTCB->xStateListItem ) );
  53877. 801671e: 4b12 ldr r3, [pc, #72] @ (8016768 <prvAddCurrentTaskToDelayedList+0x9c>)
  53878. 8016720: 681a ldr r2, [r3, #0]
  53879. 8016722: 4b0f ldr r3, [pc, #60] @ (8016760 <prvAddCurrentTaskToDelayedList+0x94>)
  53880. 8016724: 681b ldr r3, [r3, #0]
  53881. 8016726: 3304 adds r3, #4
  53882. 8016728: 4619 mov r1, r3
  53883. 801672a: 4610 mov r0, r2
  53884. 801672c: f7fd fbbb bl 8013ea6 <vListInsert>
  53885. }
  53886. 8016730: e010 b.n 8016754 <prvAddCurrentTaskToDelayedList+0x88>
  53887. vListInsert( pxDelayedTaskList, &( pxCurrentTCB->xStateListItem ) );
  53888. 8016732: 4b0e ldr r3, [pc, #56] @ (801676c <prvAddCurrentTaskToDelayedList+0xa0>)
  53889. 8016734: 681a ldr r2, [r3, #0]
  53890. 8016736: 4b0a ldr r3, [pc, #40] @ (8016760 <prvAddCurrentTaskToDelayedList+0x94>)
  53891. 8016738: 681b ldr r3, [r3, #0]
  53892. 801673a: 3304 adds r3, #4
  53893. 801673c: 4619 mov r1, r3
  53894. 801673e: 4610 mov r0, r2
  53895. 8016740: f7fd fbb1 bl 8013ea6 <vListInsert>
  53896. if( xTimeToWake < xNextTaskUnblockTime )
  53897. 8016744: 4b0a ldr r3, [pc, #40] @ (8016770 <prvAddCurrentTaskToDelayedList+0xa4>)
  53898. 8016746: 681b ldr r3, [r3, #0]
  53899. 8016748: 68ba ldr r2, [r7, #8]
  53900. 801674a: 429a cmp r2, r3
  53901. 801674c: d202 bcs.n 8016754 <prvAddCurrentTaskToDelayedList+0x88>
  53902. xNextTaskUnblockTime = xTimeToWake;
  53903. 801674e: 4a08 ldr r2, [pc, #32] @ (8016770 <prvAddCurrentTaskToDelayedList+0xa4>)
  53904. 8016750: 68bb ldr r3, [r7, #8]
  53905. 8016752: 6013 str r3, [r2, #0]
  53906. }
  53907. 8016754: bf00 nop
  53908. 8016756: 3710 adds r7, #16
  53909. 8016758: 46bd mov sp, r7
  53910. 801675a: bd80 pop {r7, pc}
  53911. 801675c: 24002eec .word 0x24002eec
  53912. 8016760: 24002a14 .word 0x24002a14
  53913. 8016764: 24002ed4 .word 0x24002ed4
  53914. 8016768: 24002ea4 .word 0x24002ea4
  53915. 801676c: 24002ea0 .word 0x24002ea0
  53916. 8016770: 24002f08 .word 0x24002f08
  53917. 08016774 <xTimerCreateTimerTask>:
  53918. TimerCallbackFunction_t pxCallbackFunction,
  53919. Timer_t *pxNewTimer ) PRIVILEGED_FUNCTION;
  53920. /*-----------------------------------------------------------*/
  53921. BaseType_t xTimerCreateTimerTask( void )
  53922. {
  53923. 8016774: b580 push {r7, lr}
  53924. 8016776: b08a sub sp, #40 @ 0x28
  53925. 8016778: af04 add r7, sp, #16
  53926. BaseType_t xReturn = pdFAIL;
  53927. 801677a: 2300 movs r3, #0
  53928. 801677c: 617b str r3, [r7, #20]
  53929. /* This function is called when the scheduler is started if
  53930. configUSE_TIMERS is set to 1. Check that the infrastructure used by the
  53931. timer service task has been created/initialised. If timers have already
  53932. been created then the initialisation will already have been performed. */
  53933. prvCheckForValidListAndQueue();
  53934. 801677e: f000 fbb1 bl 8016ee4 <prvCheckForValidListAndQueue>
  53935. if( xTimerQueue != NULL )
  53936. 8016782: 4b1d ldr r3, [pc, #116] @ (80167f8 <xTimerCreateTimerTask+0x84>)
  53937. 8016784: 681b ldr r3, [r3, #0]
  53938. 8016786: 2b00 cmp r3, #0
  53939. 8016788: d021 beq.n 80167ce <xTimerCreateTimerTask+0x5a>
  53940. {
  53941. #if( configSUPPORT_STATIC_ALLOCATION == 1 )
  53942. {
  53943. StaticTask_t *pxTimerTaskTCBBuffer = NULL;
  53944. 801678a: 2300 movs r3, #0
  53945. 801678c: 60fb str r3, [r7, #12]
  53946. StackType_t *pxTimerTaskStackBuffer = NULL;
  53947. 801678e: 2300 movs r3, #0
  53948. 8016790: 60bb str r3, [r7, #8]
  53949. uint32_t ulTimerTaskStackSize;
  53950. vApplicationGetTimerTaskMemory( &pxTimerTaskTCBBuffer, &pxTimerTaskStackBuffer, &ulTimerTaskStackSize );
  53951. 8016792: 1d3a adds r2, r7, #4
  53952. 8016794: f107 0108 add.w r1, r7, #8
  53953. 8016798: f107 030c add.w r3, r7, #12
  53954. 801679c: 4618 mov r0, r3
  53955. 801679e: f7fd fb17 bl 8013dd0 <vApplicationGetTimerTaskMemory>
  53956. xTimerTaskHandle = xTaskCreateStatic( prvTimerTask,
  53957. 80167a2: 6879 ldr r1, [r7, #4]
  53958. 80167a4: 68bb ldr r3, [r7, #8]
  53959. 80167a6: 68fa ldr r2, [r7, #12]
  53960. 80167a8: 9202 str r2, [sp, #8]
  53961. 80167aa: 9301 str r3, [sp, #4]
  53962. 80167ac: 2302 movs r3, #2
  53963. 80167ae: 9300 str r3, [sp, #0]
  53964. 80167b0: 2300 movs r3, #0
  53965. 80167b2: 460a mov r2, r1
  53966. 80167b4: 4911 ldr r1, [pc, #68] @ (80167fc <xTimerCreateTimerTask+0x88>)
  53967. 80167b6: 4812 ldr r0, [pc, #72] @ (8016800 <xTimerCreateTimerTask+0x8c>)
  53968. 80167b8: f7fe fd2f bl 801521a <xTaskCreateStatic>
  53969. 80167bc: 4603 mov r3, r0
  53970. 80167be: 4a11 ldr r2, [pc, #68] @ (8016804 <xTimerCreateTimerTask+0x90>)
  53971. 80167c0: 6013 str r3, [r2, #0]
  53972. NULL,
  53973. ( ( UBaseType_t ) configTIMER_TASK_PRIORITY ) | portPRIVILEGE_BIT,
  53974. pxTimerTaskStackBuffer,
  53975. pxTimerTaskTCBBuffer );
  53976. if( xTimerTaskHandle != NULL )
  53977. 80167c2: 4b10 ldr r3, [pc, #64] @ (8016804 <xTimerCreateTimerTask+0x90>)
  53978. 80167c4: 681b ldr r3, [r3, #0]
  53979. 80167c6: 2b00 cmp r3, #0
  53980. 80167c8: d001 beq.n 80167ce <xTimerCreateTimerTask+0x5a>
  53981. {
  53982. xReturn = pdPASS;
  53983. 80167ca: 2301 movs r3, #1
  53984. 80167cc: 617b str r3, [r7, #20]
  53985. else
  53986. {
  53987. mtCOVERAGE_TEST_MARKER();
  53988. }
  53989. configASSERT( xReturn );
  53990. 80167ce: 697b ldr r3, [r7, #20]
  53991. 80167d0: 2b00 cmp r3, #0
  53992. 80167d2: d10b bne.n 80167ec <xTimerCreateTimerTask+0x78>
  53993. __asm volatile
  53994. 80167d4: f04f 0350 mov.w r3, #80 @ 0x50
  53995. 80167d8: f383 8811 msr BASEPRI, r3
  53996. 80167dc: f3bf 8f6f isb sy
  53997. 80167e0: f3bf 8f4f dsb sy
  53998. 80167e4: 613b str r3, [r7, #16]
  53999. }
  54000. 80167e6: bf00 nop
  54001. 80167e8: bf00 nop
  54002. 80167ea: e7fd b.n 80167e8 <xTimerCreateTimerTask+0x74>
  54003. return xReturn;
  54004. 80167ec: 697b ldr r3, [r7, #20]
  54005. }
  54006. 80167ee: 4618 mov r0, r3
  54007. 80167f0: 3718 adds r7, #24
  54008. 80167f2: 46bd mov sp, r7
  54009. 80167f4: bd80 pop {r7, pc}
  54010. 80167f6: bf00 nop
  54011. 80167f8: 24002f44 .word 0x24002f44
  54012. 80167fc: 08018ae8 .word 0x08018ae8
  54013. 8016800: 08016a7d .word 0x08016a7d
  54014. 8016804: 24002f48 .word 0x24002f48
  54015. 08016808 <xTimerCreate>:
  54016. TimerHandle_t xTimerCreate( const char * const pcTimerName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
  54017. const TickType_t xTimerPeriodInTicks,
  54018. const UBaseType_t uxAutoReload,
  54019. void * const pvTimerID,
  54020. TimerCallbackFunction_t pxCallbackFunction )
  54021. {
  54022. 8016808: b580 push {r7, lr}
  54023. 801680a: b088 sub sp, #32
  54024. 801680c: af02 add r7, sp, #8
  54025. 801680e: 60f8 str r0, [r7, #12]
  54026. 8016810: 60b9 str r1, [r7, #8]
  54027. 8016812: 607a str r2, [r7, #4]
  54028. 8016814: 603b str r3, [r7, #0]
  54029. Timer_t *pxNewTimer;
  54030. 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. */
  54031. 8016816: 202c movs r0, #44 @ 0x2c
  54032. 8016818: f000 fe40 bl 801749c <pvPortMalloc>
  54033. 801681c: 6178 str r0, [r7, #20]
  54034. if( pxNewTimer != NULL )
  54035. 801681e: 697b ldr r3, [r7, #20]
  54036. 8016820: 2b00 cmp r3, #0
  54037. 8016822: d00d beq.n 8016840 <xTimerCreate+0x38>
  54038. {
  54039. /* Status is thus far zero as the timer is not created statically
  54040. and has not been started. The auto-reload bit may get set in
  54041. prvInitialiseNewTimer. */
  54042. pxNewTimer->ucStatus = 0x00;
  54043. 8016824: 697b ldr r3, [r7, #20]
  54044. 8016826: 2200 movs r2, #0
  54045. 8016828: f883 2028 strb.w r2, [r3, #40] @ 0x28
  54046. prvInitialiseNewTimer( pcTimerName, xTimerPeriodInTicks, uxAutoReload, pvTimerID, pxCallbackFunction, pxNewTimer );
  54047. 801682c: 697b ldr r3, [r7, #20]
  54048. 801682e: 9301 str r3, [sp, #4]
  54049. 8016830: 6a3b ldr r3, [r7, #32]
  54050. 8016832: 9300 str r3, [sp, #0]
  54051. 8016834: 683b ldr r3, [r7, #0]
  54052. 8016836: 687a ldr r2, [r7, #4]
  54053. 8016838: 68b9 ldr r1, [r7, #8]
  54054. 801683a: 68f8 ldr r0, [r7, #12]
  54055. 801683c: f000 f845 bl 80168ca <prvInitialiseNewTimer>
  54056. }
  54057. return pxNewTimer;
  54058. 8016840: 697b ldr r3, [r7, #20]
  54059. }
  54060. 8016842: 4618 mov r0, r3
  54061. 8016844: 3718 adds r7, #24
  54062. 8016846: 46bd mov sp, r7
  54063. 8016848: bd80 pop {r7, pc}
  54064. 0801684a <xTimerCreateStatic>:
  54065. const TickType_t xTimerPeriodInTicks,
  54066. const UBaseType_t uxAutoReload,
  54067. void * const pvTimerID,
  54068. TimerCallbackFunction_t pxCallbackFunction,
  54069. StaticTimer_t *pxTimerBuffer )
  54070. {
  54071. 801684a: b580 push {r7, lr}
  54072. 801684c: b08a sub sp, #40 @ 0x28
  54073. 801684e: af02 add r7, sp, #8
  54074. 8016850: 60f8 str r0, [r7, #12]
  54075. 8016852: 60b9 str r1, [r7, #8]
  54076. 8016854: 607a str r2, [r7, #4]
  54077. 8016856: 603b str r3, [r7, #0]
  54078. #if( configASSERT_DEFINED == 1 )
  54079. {
  54080. /* Sanity check that the size of the structure used to declare a
  54081. variable of type StaticTimer_t equals the size of the real timer
  54082. structure. */
  54083. volatile size_t xSize = sizeof( StaticTimer_t );
  54084. 8016858: 232c movs r3, #44 @ 0x2c
  54085. 801685a: 613b str r3, [r7, #16]
  54086. configASSERT( xSize == sizeof( Timer_t ) );
  54087. 801685c: 693b ldr r3, [r7, #16]
  54088. 801685e: 2b2c cmp r3, #44 @ 0x2c
  54089. 8016860: d00b beq.n 801687a <xTimerCreateStatic+0x30>
  54090. __asm volatile
  54091. 8016862: f04f 0350 mov.w r3, #80 @ 0x50
  54092. 8016866: f383 8811 msr BASEPRI, r3
  54093. 801686a: f3bf 8f6f isb sy
  54094. 801686e: f3bf 8f4f dsb sy
  54095. 8016872: 61bb str r3, [r7, #24]
  54096. }
  54097. 8016874: bf00 nop
  54098. 8016876: bf00 nop
  54099. 8016878: e7fd b.n 8016876 <xTimerCreateStatic+0x2c>
  54100. ( void ) xSize; /* Keeps lint quiet when configASSERT() is not defined. */
  54101. 801687a: 693b ldr r3, [r7, #16]
  54102. }
  54103. #endif /* configASSERT_DEFINED */
  54104. /* A pointer to a StaticTimer_t structure MUST be provided, use it. */
  54105. configASSERT( pxTimerBuffer );
  54106. 801687c: 6afb ldr r3, [r7, #44] @ 0x2c
  54107. 801687e: 2b00 cmp r3, #0
  54108. 8016880: d10b bne.n 801689a <xTimerCreateStatic+0x50>
  54109. __asm volatile
  54110. 8016882: f04f 0350 mov.w r3, #80 @ 0x50
  54111. 8016886: f383 8811 msr BASEPRI, r3
  54112. 801688a: f3bf 8f6f isb sy
  54113. 801688e: f3bf 8f4f dsb sy
  54114. 8016892: 617b str r3, [r7, #20]
  54115. }
  54116. 8016894: bf00 nop
  54117. 8016896: bf00 nop
  54118. 8016898: e7fd b.n 8016896 <xTimerCreateStatic+0x4c>
  54119. 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. */
  54120. 801689a: 6afb ldr r3, [r7, #44] @ 0x2c
  54121. 801689c: 61fb str r3, [r7, #28]
  54122. if( pxNewTimer != NULL )
  54123. 801689e: 69fb ldr r3, [r7, #28]
  54124. 80168a0: 2b00 cmp r3, #0
  54125. 80168a2: d00d beq.n 80168c0 <xTimerCreateStatic+0x76>
  54126. {
  54127. /* Timers can be created statically or dynamically so note this
  54128. timer was created statically in case it is later deleted. The
  54129. auto-reload bit may get set in prvInitialiseNewTimer(). */
  54130. pxNewTimer->ucStatus = tmrSTATUS_IS_STATICALLY_ALLOCATED;
  54131. 80168a4: 69fb ldr r3, [r7, #28]
  54132. 80168a6: 2202 movs r2, #2
  54133. 80168a8: f883 2028 strb.w r2, [r3, #40] @ 0x28
  54134. prvInitialiseNewTimer( pcTimerName, xTimerPeriodInTicks, uxAutoReload, pvTimerID, pxCallbackFunction, pxNewTimer );
  54135. 80168ac: 69fb ldr r3, [r7, #28]
  54136. 80168ae: 9301 str r3, [sp, #4]
  54137. 80168b0: 6abb ldr r3, [r7, #40] @ 0x28
  54138. 80168b2: 9300 str r3, [sp, #0]
  54139. 80168b4: 683b ldr r3, [r7, #0]
  54140. 80168b6: 687a ldr r2, [r7, #4]
  54141. 80168b8: 68b9 ldr r1, [r7, #8]
  54142. 80168ba: 68f8 ldr r0, [r7, #12]
  54143. 80168bc: f000 f805 bl 80168ca <prvInitialiseNewTimer>
  54144. }
  54145. return pxNewTimer;
  54146. 80168c0: 69fb ldr r3, [r7, #28]
  54147. }
  54148. 80168c2: 4618 mov r0, r3
  54149. 80168c4: 3720 adds r7, #32
  54150. 80168c6: 46bd mov sp, r7
  54151. 80168c8: bd80 pop {r7, pc}
  54152. 080168ca <prvInitialiseNewTimer>:
  54153. const TickType_t xTimerPeriodInTicks,
  54154. const UBaseType_t uxAutoReload,
  54155. void * const pvTimerID,
  54156. TimerCallbackFunction_t pxCallbackFunction,
  54157. Timer_t *pxNewTimer )
  54158. {
  54159. 80168ca: b580 push {r7, lr}
  54160. 80168cc: b086 sub sp, #24
  54161. 80168ce: af00 add r7, sp, #0
  54162. 80168d0: 60f8 str r0, [r7, #12]
  54163. 80168d2: 60b9 str r1, [r7, #8]
  54164. 80168d4: 607a str r2, [r7, #4]
  54165. 80168d6: 603b str r3, [r7, #0]
  54166. /* 0 is not a valid value for xTimerPeriodInTicks. */
  54167. configASSERT( ( xTimerPeriodInTicks > 0 ) );
  54168. 80168d8: 68bb ldr r3, [r7, #8]
  54169. 80168da: 2b00 cmp r3, #0
  54170. 80168dc: d10b bne.n 80168f6 <prvInitialiseNewTimer+0x2c>
  54171. __asm volatile
  54172. 80168de: f04f 0350 mov.w r3, #80 @ 0x50
  54173. 80168e2: f383 8811 msr BASEPRI, r3
  54174. 80168e6: f3bf 8f6f isb sy
  54175. 80168ea: f3bf 8f4f dsb sy
  54176. 80168ee: 617b str r3, [r7, #20]
  54177. }
  54178. 80168f0: bf00 nop
  54179. 80168f2: bf00 nop
  54180. 80168f4: e7fd b.n 80168f2 <prvInitialiseNewTimer+0x28>
  54181. if( pxNewTimer != NULL )
  54182. 80168f6: 6a7b ldr r3, [r7, #36] @ 0x24
  54183. 80168f8: 2b00 cmp r3, #0
  54184. 80168fa: d01e beq.n 801693a <prvInitialiseNewTimer+0x70>
  54185. {
  54186. /* Ensure the infrastructure used by the timer service task has been
  54187. created/initialised. */
  54188. prvCheckForValidListAndQueue();
  54189. 80168fc: f000 faf2 bl 8016ee4 <prvCheckForValidListAndQueue>
  54190. /* Initialise the timer structure members using the function
  54191. parameters. */
  54192. pxNewTimer->pcTimerName = pcTimerName;
  54193. 8016900: 6a7b ldr r3, [r7, #36] @ 0x24
  54194. 8016902: 68fa ldr r2, [r7, #12]
  54195. 8016904: 601a str r2, [r3, #0]
  54196. pxNewTimer->xTimerPeriodInTicks = xTimerPeriodInTicks;
  54197. 8016906: 6a7b ldr r3, [r7, #36] @ 0x24
  54198. 8016908: 68ba ldr r2, [r7, #8]
  54199. 801690a: 619a str r2, [r3, #24]
  54200. pxNewTimer->pvTimerID = pvTimerID;
  54201. 801690c: 6a7b ldr r3, [r7, #36] @ 0x24
  54202. 801690e: 683a ldr r2, [r7, #0]
  54203. 8016910: 61da str r2, [r3, #28]
  54204. pxNewTimer->pxCallbackFunction = pxCallbackFunction;
  54205. 8016912: 6a7b ldr r3, [r7, #36] @ 0x24
  54206. 8016914: 6a3a ldr r2, [r7, #32]
  54207. 8016916: 621a str r2, [r3, #32]
  54208. vListInitialiseItem( &( pxNewTimer->xTimerListItem ) );
  54209. 8016918: 6a7b ldr r3, [r7, #36] @ 0x24
  54210. 801691a: 3304 adds r3, #4
  54211. 801691c: 4618 mov r0, r3
  54212. 801691e: f7fd fa91 bl 8013e44 <vListInitialiseItem>
  54213. if( uxAutoReload != pdFALSE )
  54214. 8016922: 687b ldr r3, [r7, #4]
  54215. 8016924: 2b00 cmp r3, #0
  54216. 8016926: d008 beq.n 801693a <prvInitialiseNewTimer+0x70>
  54217. {
  54218. pxNewTimer->ucStatus |= tmrSTATUS_IS_AUTORELOAD;
  54219. 8016928: 6a7b ldr r3, [r7, #36] @ 0x24
  54220. 801692a: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  54221. 801692e: f043 0304 orr.w r3, r3, #4
  54222. 8016932: b2da uxtb r2, r3
  54223. 8016934: 6a7b ldr r3, [r7, #36] @ 0x24
  54224. 8016936: f883 2028 strb.w r2, [r3, #40] @ 0x28
  54225. }
  54226. traceTIMER_CREATE( pxNewTimer );
  54227. }
  54228. }
  54229. 801693a: bf00 nop
  54230. 801693c: 3718 adds r7, #24
  54231. 801693e: 46bd mov sp, r7
  54232. 8016940: bd80 pop {r7, pc}
  54233. ...
  54234. 08016944 <xTimerGenericCommand>:
  54235. /*-----------------------------------------------------------*/
  54236. BaseType_t xTimerGenericCommand( TimerHandle_t xTimer, const BaseType_t xCommandID, const TickType_t xOptionalValue, BaseType_t * const pxHigherPriorityTaskWoken, const TickType_t xTicksToWait )
  54237. {
  54238. 8016944: b580 push {r7, lr}
  54239. 8016946: b08a sub sp, #40 @ 0x28
  54240. 8016948: af00 add r7, sp, #0
  54241. 801694a: 60f8 str r0, [r7, #12]
  54242. 801694c: 60b9 str r1, [r7, #8]
  54243. 801694e: 607a str r2, [r7, #4]
  54244. 8016950: 603b str r3, [r7, #0]
  54245. BaseType_t xReturn = pdFAIL;
  54246. 8016952: 2300 movs r3, #0
  54247. 8016954: 627b str r3, [r7, #36] @ 0x24
  54248. DaemonTaskMessage_t xMessage;
  54249. configASSERT( xTimer );
  54250. 8016956: 68fb ldr r3, [r7, #12]
  54251. 8016958: 2b00 cmp r3, #0
  54252. 801695a: d10b bne.n 8016974 <xTimerGenericCommand+0x30>
  54253. __asm volatile
  54254. 801695c: f04f 0350 mov.w r3, #80 @ 0x50
  54255. 8016960: f383 8811 msr BASEPRI, r3
  54256. 8016964: f3bf 8f6f isb sy
  54257. 8016968: f3bf 8f4f dsb sy
  54258. 801696c: 623b str r3, [r7, #32]
  54259. }
  54260. 801696e: bf00 nop
  54261. 8016970: bf00 nop
  54262. 8016972: e7fd b.n 8016970 <xTimerGenericCommand+0x2c>
  54263. /* Send a message to the timer service task to perform a particular action
  54264. on a particular timer definition. */
  54265. if( xTimerQueue != NULL )
  54266. 8016974: 4b19 ldr r3, [pc, #100] @ (80169dc <xTimerGenericCommand+0x98>)
  54267. 8016976: 681b ldr r3, [r3, #0]
  54268. 8016978: 2b00 cmp r3, #0
  54269. 801697a: d02a beq.n 80169d2 <xTimerGenericCommand+0x8e>
  54270. {
  54271. /* Send a command to the timer service task to start the xTimer timer. */
  54272. xMessage.xMessageID = xCommandID;
  54273. 801697c: 68bb ldr r3, [r7, #8]
  54274. 801697e: 613b str r3, [r7, #16]
  54275. xMessage.u.xTimerParameters.xMessageValue = xOptionalValue;
  54276. 8016980: 687b ldr r3, [r7, #4]
  54277. 8016982: 617b str r3, [r7, #20]
  54278. xMessage.u.xTimerParameters.pxTimer = xTimer;
  54279. 8016984: 68fb ldr r3, [r7, #12]
  54280. 8016986: 61bb str r3, [r7, #24]
  54281. if( xCommandID < tmrFIRST_FROM_ISR_COMMAND )
  54282. 8016988: 68bb ldr r3, [r7, #8]
  54283. 801698a: 2b05 cmp r3, #5
  54284. 801698c: dc18 bgt.n 80169c0 <xTimerGenericCommand+0x7c>
  54285. {
  54286. if( xTaskGetSchedulerState() == taskSCHEDULER_RUNNING )
  54287. 801698e: f7ff fae1 bl 8015f54 <xTaskGetSchedulerState>
  54288. 8016992: 4603 mov r3, r0
  54289. 8016994: 2b02 cmp r3, #2
  54290. 8016996: d109 bne.n 80169ac <xTimerGenericCommand+0x68>
  54291. {
  54292. xReturn = xQueueSendToBack( xTimerQueue, &xMessage, xTicksToWait );
  54293. 8016998: 4b10 ldr r3, [pc, #64] @ (80169dc <xTimerGenericCommand+0x98>)
  54294. 801699a: 6818 ldr r0, [r3, #0]
  54295. 801699c: f107 0110 add.w r1, r7, #16
  54296. 80169a0: 2300 movs r3, #0
  54297. 80169a2: 6b3a ldr r2, [r7, #48] @ 0x30
  54298. 80169a4: f7fd fce0 bl 8014368 <xQueueGenericSend>
  54299. 80169a8: 6278 str r0, [r7, #36] @ 0x24
  54300. 80169aa: e012 b.n 80169d2 <xTimerGenericCommand+0x8e>
  54301. }
  54302. else
  54303. {
  54304. xReturn = xQueueSendToBack( xTimerQueue, &xMessage, tmrNO_DELAY );
  54305. 80169ac: 4b0b ldr r3, [pc, #44] @ (80169dc <xTimerGenericCommand+0x98>)
  54306. 80169ae: 6818 ldr r0, [r3, #0]
  54307. 80169b0: f107 0110 add.w r1, r7, #16
  54308. 80169b4: 2300 movs r3, #0
  54309. 80169b6: 2200 movs r2, #0
  54310. 80169b8: f7fd fcd6 bl 8014368 <xQueueGenericSend>
  54311. 80169bc: 6278 str r0, [r7, #36] @ 0x24
  54312. 80169be: e008 b.n 80169d2 <xTimerGenericCommand+0x8e>
  54313. }
  54314. }
  54315. else
  54316. {
  54317. xReturn = xQueueSendToBackFromISR( xTimerQueue, &xMessage, pxHigherPriorityTaskWoken );
  54318. 80169c0: 4b06 ldr r3, [pc, #24] @ (80169dc <xTimerGenericCommand+0x98>)
  54319. 80169c2: 6818 ldr r0, [r3, #0]
  54320. 80169c4: f107 0110 add.w r1, r7, #16
  54321. 80169c8: 2300 movs r3, #0
  54322. 80169ca: 683a ldr r2, [r7, #0]
  54323. 80169cc: f7fd fdce bl 801456c <xQueueGenericSendFromISR>
  54324. 80169d0: 6278 str r0, [r7, #36] @ 0x24
  54325. else
  54326. {
  54327. mtCOVERAGE_TEST_MARKER();
  54328. }
  54329. return xReturn;
  54330. 80169d2: 6a7b ldr r3, [r7, #36] @ 0x24
  54331. }
  54332. 80169d4: 4618 mov r0, r3
  54333. 80169d6: 3728 adds r7, #40 @ 0x28
  54334. 80169d8: 46bd mov sp, r7
  54335. 80169da: bd80 pop {r7, pc}
  54336. 80169dc: 24002f44 .word 0x24002f44
  54337. 080169e0 <prvProcessExpiredTimer>:
  54338. return pxTimer->pcTimerName;
  54339. }
  54340. /*-----------------------------------------------------------*/
  54341. static void prvProcessExpiredTimer( const TickType_t xNextExpireTime, const TickType_t xTimeNow )
  54342. {
  54343. 80169e0: b580 push {r7, lr}
  54344. 80169e2: b088 sub sp, #32
  54345. 80169e4: af02 add r7, sp, #8
  54346. 80169e6: 6078 str r0, [r7, #4]
  54347. 80169e8: 6039 str r1, [r7, #0]
  54348. BaseType_t xResult;
  54349. 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. */
  54350. 80169ea: 4b23 ldr r3, [pc, #140] @ (8016a78 <prvProcessExpiredTimer+0x98>)
  54351. 80169ec: 681b ldr r3, [r3, #0]
  54352. 80169ee: 68db ldr r3, [r3, #12]
  54353. 80169f0: 68db ldr r3, [r3, #12]
  54354. 80169f2: 617b str r3, [r7, #20]
  54355. /* Remove the timer from the list of active timers. A check has already
  54356. been performed to ensure the list is not empty. */
  54357. ( void ) uxListRemove( &( pxTimer->xTimerListItem ) );
  54358. 80169f4: 697b ldr r3, [r7, #20]
  54359. 80169f6: 3304 adds r3, #4
  54360. 80169f8: 4618 mov r0, r3
  54361. 80169fa: f7fd fa8d bl 8013f18 <uxListRemove>
  54362. traceTIMER_EXPIRED( pxTimer );
  54363. /* If the timer is an auto-reload timer then calculate the next
  54364. expiry time and re-insert the timer in the list of active timers. */
  54365. if( ( pxTimer->ucStatus & tmrSTATUS_IS_AUTORELOAD ) != 0 )
  54366. 80169fe: 697b ldr r3, [r7, #20]
  54367. 8016a00: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  54368. 8016a04: f003 0304 and.w r3, r3, #4
  54369. 8016a08: 2b00 cmp r3, #0
  54370. 8016a0a: d023 beq.n 8016a54 <prvProcessExpiredTimer+0x74>
  54371. {
  54372. /* The timer is inserted into a list using a time relative to anything
  54373. other than the current time. It will therefore be inserted into the
  54374. correct list relative to the time this task thinks it is now. */
  54375. if( prvInsertTimerInActiveList( pxTimer, ( xNextExpireTime + pxTimer->xTimerPeriodInTicks ), xTimeNow, xNextExpireTime ) != pdFALSE )
  54376. 8016a0c: 697b ldr r3, [r7, #20]
  54377. 8016a0e: 699a ldr r2, [r3, #24]
  54378. 8016a10: 687b ldr r3, [r7, #4]
  54379. 8016a12: 18d1 adds r1, r2, r3
  54380. 8016a14: 687b ldr r3, [r7, #4]
  54381. 8016a16: 683a ldr r2, [r7, #0]
  54382. 8016a18: 6978 ldr r0, [r7, #20]
  54383. 8016a1a: f000 f8d5 bl 8016bc8 <prvInsertTimerInActiveList>
  54384. 8016a1e: 4603 mov r3, r0
  54385. 8016a20: 2b00 cmp r3, #0
  54386. 8016a22: d020 beq.n 8016a66 <prvProcessExpiredTimer+0x86>
  54387. {
  54388. /* The timer expired before it was added to the active timer
  54389. list. Reload it now. */
  54390. xResult = xTimerGenericCommand( pxTimer, tmrCOMMAND_START_DONT_TRACE, xNextExpireTime, NULL, tmrNO_DELAY );
  54391. 8016a24: 2300 movs r3, #0
  54392. 8016a26: 9300 str r3, [sp, #0]
  54393. 8016a28: 2300 movs r3, #0
  54394. 8016a2a: 687a ldr r2, [r7, #4]
  54395. 8016a2c: 2100 movs r1, #0
  54396. 8016a2e: 6978 ldr r0, [r7, #20]
  54397. 8016a30: f7ff ff88 bl 8016944 <xTimerGenericCommand>
  54398. 8016a34: 6138 str r0, [r7, #16]
  54399. configASSERT( xResult );
  54400. 8016a36: 693b ldr r3, [r7, #16]
  54401. 8016a38: 2b00 cmp r3, #0
  54402. 8016a3a: d114 bne.n 8016a66 <prvProcessExpiredTimer+0x86>
  54403. __asm volatile
  54404. 8016a3c: f04f 0350 mov.w r3, #80 @ 0x50
  54405. 8016a40: f383 8811 msr BASEPRI, r3
  54406. 8016a44: f3bf 8f6f isb sy
  54407. 8016a48: f3bf 8f4f dsb sy
  54408. 8016a4c: 60fb str r3, [r7, #12]
  54409. }
  54410. 8016a4e: bf00 nop
  54411. 8016a50: bf00 nop
  54412. 8016a52: e7fd b.n 8016a50 <prvProcessExpiredTimer+0x70>
  54413. mtCOVERAGE_TEST_MARKER();
  54414. }
  54415. }
  54416. else
  54417. {
  54418. pxTimer->ucStatus &= ~tmrSTATUS_IS_ACTIVE;
  54419. 8016a54: 697b ldr r3, [r7, #20]
  54420. 8016a56: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  54421. 8016a5a: f023 0301 bic.w r3, r3, #1
  54422. 8016a5e: b2da uxtb r2, r3
  54423. 8016a60: 697b ldr r3, [r7, #20]
  54424. 8016a62: f883 2028 strb.w r2, [r3, #40] @ 0x28
  54425. mtCOVERAGE_TEST_MARKER();
  54426. }
  54427. /* Call the timer callback. */
  54428. pxTimer->pxCallbackFunction( ( TimerHandle_t ) pxTimer );
  54429. 8016a66: 697b ldr r3, [r7, #20]
  54430. 8016a68: 6a1b ldr r3, [r3, #32]
  54431. 8016a6a: 6978 ldr r0, [r7, #20]
  54432. 8016a6c: 4798 blx r3
  54433. }
  54434. 8016a6e: bf00 nop
  54435. 8016a70: 3718 adds r7, #24
  54436. 8016a72: 46bd mov sp, r7
  54437. 8016a74: bd80 pop {r7, pc}
  54438. 8016a76: bf00 nop
  54439. 8016a78: 24002f3c .word 0x24002f3c
  54440. 08016a7c <prvTimerTask>:
  54441. /*-----------------------------------------------------------*/
  54442. static portTASK_FUNCTION( prvTimerTask, pvParameters )
  54443. {
  54444. 8016a7c: b580 push {r7, lr}
  54445. 8016a7e: b084 sub sp, #16
  54446. 8016a80: af00 add r7, sp, #0
  54447. 8016a82: 6078 str r0, [r7, #4]
  54448. for( ;; )
  54449. {
  54450. /* Query the timers list to see if it contains any timers, and if so,
  54451. obtain the time at which the next timer will expire. */
  54452. xNextExpireTime = prvGetNextExpireTime( &xListWasEmpty );
  54453. 8016a84: f107 0308 add.w r3, r7, #8
  54454. 8016a88: 4618 mov r0, r3
  54455. 8016a8a: f000 f859 bl 8016b40 <prvGetNextExpireTime>
  54456. 8016a8e: 60f8 str r0, [r7, #12]
  54457. /* If a timer has expired, process it. Otherwise, block this task
  54458. until either a timer does expire, or a command is received. */
  54459. prvProcessTimerOrBlockTask( xNextExpireTime, xListWasEmpty );
  54460. 8016a90: 68bb ldr r3, [r7, #8]
  54461. 8016a92: 4619 mov r1, r3
  54462. 8016a94: 68f8 ldr r0, [r7, #12]
  54463. 8016a96: f000 f805 bl 8016aa4 <prvProcessTimerOrBlockTask>
  54464. /* Empty the command queue. */
  54465. prvProcessReceivedCommands();
  54466. 8016a9a: f000 f8d7 bl 8016c4c <prvProcessReceivedCommands>
  54467. xNextExpireTime = prvGetNextExpireTime( &xListWasEmpty );
  54468. 8016a9e: bf00 nop
  54469. 8016aa0: e7f0 b.n 8016a84 <prvTimerTask+0x8>
  54470. ...
  54471. 08016aa4 <prvProcessTimerOrBlockTask>:
  54472. }
  54473. }
  54474. /*-----------------------------------------------------------*/
  54475. static void prvProcessTimerOrBlockTask( const TickType_t xNextExpireTime, BaseType_t xListWasEmpty )
  54476. {
  54477. 8016aa4: b580 push {r7, lr}
  54478. 8016aa6: b084 sub sp, #16
  54479. 8016aa8: af00 add r7, sp, #0
  54480. 8016aaa: 6078 str r0, [r7, #4]
  54481. 8016aac: 6039 str r1, [r7, #0]
  54482. TickType_t xTimeNow;
  54483. BaseType_t xTimerListsWereSwitched;
  54484. vTaskSuspendAll();
  54485. 8016aae: f7fe fe17 bl 80156e0 <vTaskSuspendAll>
  54486. /* Obtain the time now to make an assessment as to whether the timer
  54487. has expired or not. If obtaining the time causes the lists to switch
  54488. then don't process this timer as any timers that remained in the list
  54489. when the lists were switched will have been processed within the
  54490. prvSampleTimeNow() function. */
  54491. xTimeNow = prvSampleTimeNow( &xTimerListsWereSwitched );
  54492. 8016ab2: f107 0308 add.w r3, r7, #8
  54493. 8016ab6: 4618 mov r0, r3
  54494. 8016ab8: f000 f866 bl 8016b88 <prvSampleTimeNow>
  54495. 8016abc: 60f8 str r0, [r7, #12]
  54496. if( xTimerListsWereSwitched == pdFALSE )
  54497. 8016abe: 68bb ldr r3, [r7, #8]
  54498. 8016ac0: 2b00 cmp r3, #0
  54499. 8016ac2: d130 bne.n 8016b26 <prvProcessTimerOrBlockTask+0x82>
  54500. {
  54501. /* The tick count has not overflowed, has the timer expired? */
  54502. if( ( xListWasEmpty == pdFALSE ) && ( xNextExpireTime <= xTimeNow ) )
  54503. 8016ac4: 683b ldr r3, [r7, #0]
  54504. 8016ac6: 2b00 cmp r3, #0
  54505. 8016ac8: d10a bne.n 8016ae0 <prvProcessTimerOrBlockTask+0x3c>
  54506. 8016aca: 687a ldr r2, [r7, #4]
  54507. 8016acc: 68fb ldr r3, [r7, #12]
  54508. 8016ace: 429a cmp r2, r3
  54509. 8016ad0: d806 bhi.n 8016ae0 <prvProcessTimerOrBlockTask+0x3c>
  54510. {
  54511. ( void ) xTaskResumeAll();
  54512. 8016ad2: f7fe fe13 bl 80156fc <xTaskResumeAll>
  54513. prvProcessExpiredTimer( xNextExpireTime, xTimeNow );
  54514. 8016ad6: 68f9 ldr r1, [r7, #12]
  54515. 8016ad8: 6878 ldr r0, [r7, #4]
  54516. 8016ada: f7ff ff81 bl 80169e0 <prvProcessExpiredTimer>
  54517. else
  54518. {
  54519. ( void ) xTaskResumeAll();
  54520. }
  54521. }
  54522. }
  54523. 8016ade: e024 b.n 8016b2a <prvProcessTimerOrBlockTask+0x86>
  54524. if( xListWasEmpty != pdFALSE )
  54525. 8016ae0: 683b ldr r3, [r7, #0]
  54526. 8016ae2: 2b00 cmp r3, #0
  54527. 8016ae4: d008 beq.n 8016af8 <prvProcessTimerOrBlockTask+0x54>
  54528. xListWasEmpty = listLIST_IS_EMPTY( pxOverflowTimerList );
  54529. 8016ae6: 4b13 ldr r3, [pc, #76] @ (8016b34 <prvProcessTimerOrBlockTask+0x90>)
  54530. 8016ae8: 681b ldr r3, [r3, #0]
  54531. 8016aea: 681b ldr r3, [r3, #0]
  54532. 8016aec: 2b00 cmp r3, #0
  54533. 8016aee: d101 bne.n 8016af4 <prvProcessTimerOrBlockTask+0x50>
  54534. 8016af0: 2301 movs r3, #1
  54535. 8016af2: e000 b.n 8016af6 <prvProcessTimerOrBlockTask+0x52>
  54536. 8016af4: 2300 movs r3, #0
  54537. 8016af6: 603b str r3, [r7, #0]
  54538. vQueueWaitForMessageRestricted( xTimerQueue, ( xNextExpireTime - xTimeNow ), xListWasEmpty );
  54539. 8016af8: 4b0f ldr r3, [pc, #60] @ (8016b38 <prvProcessTimerOrBlockTask+0x94>)
  54540. 8016afa: 6818 ldr r0, [r3, #0]
  54541. 8016afc: 687a ldr r2, [r7, #4]
  54542. 8016afe: 68fb ldr r3, [r7, #12]
  54543. 8016b00: 1ad3 subs r3, r2, r3
  54544. 8016b02: 683a ldr r2, [r7, #0]
  54545. 8016b04: 4619 mov r1, r3
  54546. 8016b06: f7fe f995 bl 8014e34 <vQueueWaitForMessageRestricted>
  54547. if( xTaskResumeAll() == pdFALSE )
  54548. 8016b0a: f7fe fdf7 bl 80156fc <xTaskResumeAll>
  54549. 8016b0e: 4603 mov r3, r0
  54550. 8016b10: 2b00 cmp r3, #0
  54551. 8016b12: d10a bne.n 8016b2a <prvProcessTimerOrBlockTask+0x86>
  54552. portYIELD_WITHIN_API();
  54553. 8016b14: 4b09 ldr r3, [pc, #36] @ (8016b3c <prvProcessTimerOrBlockTask+0x98>)
  54554. 8016b16: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  54555. 8016b1a: 601a str r2, [r3, #0]
  54556. 8016b1c: f3bf 8f4f dsb sy
  54557. 8016b20: f3bf 8f6f isb sy
  54558. }
  54559. 8016b24: e001 b.n 8016b2a <prvProcessTimerOrBlockTask+0x86>
  54560. ( void ) xTaskResumeAll();
  54561. 8016b26: f7fe fde9 bl 80156fc <xTaskResumeAll>
  54562. }
  54563. 8016b2a: bf00 nop
  54564. 8016b2c: 3710 adds r7, #16
  54565. 8016b2e: 46bd mov sp, r7
  54566. 8016b30: bd80 pop {r7, pc}
  54567. 8016b32: bf00 nop
  54568. 8016b34: 24002f40 .word 0x24002f40
  54569. 8016b38: 24002f44 .word 0x24002f44
  54570. 8016b3c: e000ed04 .word 0xe000ed04
  54571. 08016b40 <prvGetNextExpireTime>:
  54572. /*-----------------------------------------------------------*/
  54573. static TickType_t prvGetNextExpireTime( BaseType_t * const pxListWasEmpty )
  54574. {
  54575. 8016b40: b480 push {r7}
  54576. 8016b42: b085 sub sp, #20
  54577. 8016b44: af00 add r7, sp, #0
  54578. 8016b46: 6078 str r0, [r7, #4]
  54579. the timer with the nearest expiry time will expire. If there are no
  54580. active timers then just set the next expire time to 0. That will cause
  54581. this task to unblock when the tick count overflows, at which point the
  54582. timer lists will be switched and the next expiry time can be
  54583. re-assessed. */
  54584. *pxListWasEmpty = listLIST_IS_EMPTY( pxCurrentTimerList );
  54585. 8016b48: 4b0e ldr r3, [pc, #56] @ (8016b84 <prvGetNextExpireTime+0x44>)
  54586. 8016b4a: 681b ldr r3, [r3, #0]
  54587. 8016b4c: 681b ldr r3, [r3, #0]
  54588. 8016b4e: 2b00 cmp r3, #0
  54589. 8016b50: d101 bne.n 8016b56 <prvGetNextExpireTime+0x16>
  54590. 8016b52: 2201 movs r2, #1
  54591. 8016b54: e000 b.n 8016b58 <prvGetNextExpireTime+0x18>
  54592. 8016b56: 2200 movs r2, #0
  54593. 8016b58: 687b ldr r3, [r7, #4]
  54594. 8016b5a: 601a str r2, [r3, #0]
  54595. if( *pxListWasEmpty == pdFALSE )
  54596. 8016b5c: 687b ldr r3, [r7, #4]
  54597. 8016b5e: 681b ldr r3, [r3, #0]
  54598. 8016b60: 2b00 cmp r3, #0
  54599. 8016b62: d105 bne.n 8016b70 <prvGetNextExpireTime+0x30>
  54600. {
  54601. xNextExpireTime = listGET_ITEM_VALUE_OF_HEAD_ENTRY( pxCurrentTimerList );
  54602. 8016b64: 4b07 ldr r3, [pc, #28] @ (8016b84 <prvGetNextExpireTime+0x44>)
  54603. 8016b66: 681b ldr r3, [r3, #0]
  54604. 8016b68: 68db ldr r3, [r3, #12]
  54605. 8016b6a: 681b ldr r3, [r3, #0]
  54606. 8016b6c: 60fb str r3, [r7, #12]
  54607. 8016b6e: e001 b.n 8016b74 <prvGetNextExpireTime+0x34>
  54608. }
  54609. else
  54610. {
  54611. /* Ensure the task unblocks when the tick count rolls over. */
  54612. xNextExpireTime = ( TickType_t ) 0U;
  54613. 8016b70: 2300 movs r3, #0
  54614. 8016b72: 60fb str r3, [r7, #12]
  54615. }
  54616. return xNextExpireTime;
  54617. 8016b74: 68fb ldr r3, [r7, #12]
  54618. }
  54619. 8016b76: 4618 mov r0, r3
  54620. 8016b78: 3714 adds r7, #20
  54621. 8016b7a: 46bd mov sp, r7
  54622. 8016b7c: f85d 7b04 ldr.w r7, [sp], #4
  54623. 8016b80: 4770 bx lr
  54624. 8016b82: bf00 nop
  54625. 8016b84: 24002f3c .word 0x24002f3c
  54626. 08016b88 <prvSampleTimeNow>:
  54627. /*-----------------------------------------------------------*/
  54628. static TickType_t prvSampleTimeNow( BaseType_t * const pxTimerListsWereSwitched )
  54629. {
  54630. 8016b88: b580 push {r7, lr}
  54631. 8016b8a: b084 sub sp, #16
  54632. 8016b8c: af00 add r7, sp, #0
  54633. 8016b8e: 6078 str r0, [r7, #4]
  54634. TickType_t xTimeNow;
  54635. PRIVILEGED_DATA static TickType_t xLastTime = ( TickType_t ) 0U; /*lint !e956 Variable is only accessible to one task. */
  54636. xTimeNow = xTaskGetTickCount();
  54637. 8016b90: f7fe fe52 bl 8015838 <xTaskGetTickCount>
  54638. 8016b94: 60f8 str r0, [r7, #12]
  54639. if( xTimeNow < xLastTime )
  54640. 8016b96: 4b0b ldr r3, [pc, #44] @ (8016bc4 <prvSampleTimeNow+0x3c>)
  54641. 8016b98: 681b ldr r3, [r3, #0]
  54642. 8016b9a: 68fa ldr r2, [r7, #12]
  54643. 8016b9c: 429a cmp r2, r3
  54644. 8016b9e: d205 bcs.n 8016bac <prvSampleTimeNow+0x24>
  54645. {
  54646. prvSwitchTimerLists();
  54647. 8016ba0: f000 f93a bl 8016e18 <prvSwitchTimerLists>
  54648. *pxTimerListsWereSwitched = pdTRUE;
  54649. 8016ba4: 687b ldr r3, [r7, #4]
  54650. 8016ba6: 2201 movs r2, #1
  54651. 8016ba8: 601a str r2, [r3, #0]
  54652. 8016baa: e002 b.n 8016bb2 <prvSampleTimeNow+0x2a>
  54653. }
  54654. else
  54655. {
  54656. *pxTimerListsWereSwitched = pdFALSE;
  54657. 8016bac: 687b ldr r3, [r7, #4]
  54658. 8016bae: 2200 movs r2, #0
  54659. 8016bb0: 601a str r2, [r3, #0]
  54660. }
  54661. xLastTime = xTimeNow;
  54662. 8016bb2: 4a04 ldr r2, [pc, #16] @ (8016bc4 <prvSampleTimeNow+0x3c>)
  54663. 8016bb4: 68fb ldr r3, [r7, #12]
  54664. 8016bb6: 6013 str r3, [r2, #0]
  54665. return xTimeNow;
  54666. 8016bb8: 68fb ldr r3, [r7, #12]
  54667. }
  54668. 8016bba: 4618 mov r0, r3
  54669. 8016bbc: 3710 adds r7, #16
  54670. 8016bbe: 46bd mov sp, r7
  54671. 8016bc0: bd80 pop {r7, pc}
  54672. 8016bc2: bf00 nop
  54673. 8016bc4: 24002f4c .word 0x24002f4c
  54674. 08016bc8 <prvInsertTimerInActiveList>:
  54675. /*-----------------------------------------------------------*/
  54676. static BaseType_t prvInsertTimerInActiveList( Timer_t * const pxTimer, const TickType_t xNextExpiryTime, const TickType_t xTimeNow, const TickType_t xCommandTime )
  54677. {
  54678. 8016bc8: b580 push {r7, lr}
  54679. 8016bca: b086 sub sp, #24
  54680. 8016bcc: af00 add r7, sp, #0
  54681. 8016bce: 60f8 str r0, [r7, #12]
  54682. 8016bd0: 60b9 str r1, [r7, #8]
  54683. 8016bd2: 607a str r2, [r7, #4]
  54684. 8016bd4: 603b str r3, [r7, #0]
  54685. BaseType_t xProcessTimerNow = pdFALSE;
  54686. 8016bd6: 2300 movs r3, #0
  54687. 8016bd8: 617b str r3, [r7, #20]
  54688. listSET_LIST_ITEM_VALUE( &( pxTimer->xTimerListItem ), xNextExpiryTime );
  54689. 8016bda: 68fb ldr r3, [r7, #12]
  54690. 8016bdc: 68ba ldr r2, [r7, #8]
  54691. 8016bde: 605a str r2, [r3, #4]
  54692. listSET_LIST_ITEM_OWNER( &( pxTimer->xTimerListItem ), pxTimer );
  54693. 8016be0: 68fb ldr r3, [r7, #12]
  54694. 8016be2: 68fa ldr r2, [r7, #12]
  54695. 8016be4: 611a str r2, [r3, #16]
  54696. if( xNextExpiryTime <= xTimeNow )
  54697. 8016be6: 68ba ldr r2, [r7, #8]
  54698. 8016be8: 687b ldr r3, [r7, #4]
  54699. 8016bea: 429a cmp r2, r3
  54700. 8016bec: d812 bhi.n 8016c14 <prvInsertTimerInActiveList+0x4c>
  54701. {
  54702. /* Has the expiry time elapsed between the command to start/reset a
  54703. timer was issued, and the time the command was processed? */
  54704. if( ( ( TickType_t ) ( xTimeNow - xCommandTime ) ) >= pxTimer->xTimerPeriodInTicks ) /*lint !e961 MISRA exception as the casts are only redundant for some ports. */
  54705. 8016bee: 687a ldr r2, [r7, #4]
  54706. 8016bf0: 683b ldr r3, [r7, #0]
  54707. 8016bf2: 1ad2 subs r2, r2, r3
  54708. 8016bf4: 68fb ldr r3, [r7, #12]
  54709. 8016bf6: 699b ldr r3, [r3, #24]
  54710. 8016bf8: 429a cmp r2, r3
  54711. 8016bfa: d302 bcc.n 8016c02 <prvInsertTimerInActiveList+0x3a>
  54712. {
  54713. /* The time between a command being issued and the command being
  54714. processed actually exceeds the timers period. */
  54715. xProcessTimerNow = pdTRUE;
  54716. 8016bfc: 2301 movs r3, #1
  54717. 8016bfe: 617b str r3, [r7, #20]
  54718. 8016c00: e01b b.n 8016c3a <prvInsertTimerInActiveList+0x72>
  54719. }
  54720. else
  54721. {
  54722. vListInsert( pxOverflowTimerList, &( pxTimer->xTimerListItem ) );
  54723. 8016c02: 4b10 ldr r3, [pc, #64] @ (8016c44 <prvInsertTimerInActiveList+0x7c>)
  54724. 8016c04: 681a ldr r2, [r3, #0]
  54725. 8016c06: 68fb ldr r3, [r7, #12]
  54726. 8016c08: 3304 adds r3, #4
  54727. 8016c0a: 4619 mov r1, r3
  54728. 8016c0c: 4610 mov r0, r2
  54729. 8016c0e: f7fd f94a bl 8013ea6 <vListInsert>
  54730. 8016c12: e012 b.n 8016c3a <prvInsertTimerInActiveList+0x72>
  54731. }
  54732. }
  54733. else
  54734. {
  54735. if( ( xTimeNow < xCommandTime ) && ( xNextExpiryTime >= xCommandTime ) )
  54736. 8016c14: 687a ldr r2, [r7, #4]
  54737. 8016c16: 683b ldr r3, [r7, #0]
  54738. 8016c18: 429a cmp r2, r3
  54739. 8016c1a: d206 bcs.n 8016c2a <prvInsertTimerInActiveList+0x62>
  54740. 8016c1c: 68ba ldr r2, [r7, #8]
  54741. 8016c1e: 683b ldr r3, [r7, #0]
  54742. 8016c20: 429a cmp r2, r3
  54743. 8016c22: d302 bcc.n 8016c2a <prvInsertTimerInActiveList+0x62>
  54744. {
  54745. /* If, since the command was issued, the tick count has overflowed
  54746. but the expiry time has not, then the timer must have already passed
  54747. its expiry time and should be processed immediately. */
  54748. xProcessTimerNow = pdTRUE;
  54749. 8016c24: 2301 movs r3, #1
  54750. 8016c26: 617b str r3, [r7, #20]
  54751. 8016c28: e007 b.n 8016c3a <prvInsertTimerInActiveList+0x72>
  54752. }
  54753. else
  54754. {
  54755. vListInsert( pxCurrentTimerList, &( pxTimer->xTimerListItem ) );
  54756. 8016c2a: 4b07 ldr r3, [pc, #28] @ (8016c48 <prvInsertTimerInActiveList+0x80>)
  54757. 8016c2c: 681a ldr r2, [r3, #0]
  54758. 8016c2e: 68fb ldr r3, [r7, #12]
  54759. 8016c30: 3304 adds r3, #4
  54760. 8016c32: 4619 mov r1, r3
  54761. 8016c34: 4610 mov r0, r2
  54762. 8016c36: f7fd f936 bl 8013ea6 <vListInsert>
  54763. }
  54764. }
  54765. return xProcessTimerNow;
  54766. 8016c3a: 697b ldr r3, [r7, #20]
  54767. }
  54768. 8016c3c: 4618 mov r0, r3
  54769. 8016c3e: 3718 adds r7, #24
  54770. 8016c40: 46bd mov sp, r7
  54771. 8016c42: bd80 pop {r7, pc}
  54772. 8016c44: 24002f40 .word 0x24002f40
  54773. 8016c48: 24002f3c .word 0x24002f3c
  54774. 08016c4c <prvProcessReceivedCommands>:
  54775. /*-----------------------------------------------------------*/
  54776. static void prvProcessReceivedCommands( void )
  54777. {
  54778. 8016c4c: b580 push {r7, lr}
  54779. 8016c4e: b08e sub sp, #56 @ 0x38
  54780. 8016c50: af02 add r7, sp, #8
  54781. DaemonTaskMessage_t xMessage;
  54782. Timer_t *pxTimer;
  54783. BaseType_t xTimerListsWereSwitched, xResult;
  54784. TickType_t xTimeNow;
  54785. 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. */
  54786. 8016c52: e0ce b.n 8016df2 <prvProcessReceivedCommands+0x1a6>
  54787. {
  54788. #if ( INCLUDE_xTimerPendFunctionCall == 1 )
  54789. {
  54790. /* Negative commands are pended function calls rather than timer
  54791. commands. */
  54792. if( xMessage.xMessageID < ( BaseType_t ) 0 )
  54793. 8016c54: 687b ldr r3, [r7, #4]
  54794. 8016c56: 2b00 cmp r3, #0
  54795. 8016c58: da19 bge.n 8016c8e <prvProcessReceivedCommands+0x42>
  54796. {
  54797. const CallbackParameters_t * const pxCallback = &( xMessage.u.xCallbackParameters );
  54798. 8016c5a: 1d3b adds r3, r7, #4
  54799. 8016c5c: 3304 adds r3, #4
  54800. 8016c5e: 62fb str r3, [r7, #44] @ 0x2c
  54801. /* The timer uses the xCallbackParameters member to request a
  54802. callback be executed. Check the callback is not NULL. */
  54803. configASSERT( pxCallback );
  54804. 8016c60: 6afb ldr r3, [r7, #44] @ 0x2c
  54805. 8016c62: 2b00 cmp r3, #0
  54806. 8016c64: d10b bne.n 8016c7e <prvProcessReceivedCommands+0x32>
  54807. __asm volatile
  54808. 8016c66: f04f 0350 mov.w r3, #80 @ 0x50
  54809. 8016c6a: f383 8811 msr BASEPRI, r3
  54810. 8016c6e: f3bf 8f6f isb sy
  54811. 8016c72: f3bf 8f4f dsb sy
  54812. 8016c76: 61fb str r3, [r7, #28]
  54813. }
  54814. 8016c78: bf00 nop
  54815. 8016c7a: bf00 nop
  54816. 8016c7c: e7fd b.n 8016c7a <prvProcessReceivedCommands+0x2e>
  54817. /* Call the function. */
  54818. pxCallback->pxCallbackFunction( pxCallback->pvParameter1, pxCallback->ulParameter2 );
  54819. 8016c7e: 6afb ldr r3, [r7, #44] @ 0x2c
  54820. 8016c80: 681b ldr r3, [r3, #0]
  54821. 8016c82: 6afa ldr r2, [r7, #44] @ 0x2c
  54822. 8016c84: 6850 ldr r0, [r2, #4]
  54823. 8016c86: 6afa ldr r2, [r7, #44] @ 0x2c
  54824. 8016c88: 6892 ldr r2, [r2, #8]
  54825. 8016c8a: 4611 mov r1, r2
  54826. 8016c8c: 4798 blx r3
  54827. }
  54828. #endif /* INCLUDE_xTimerPendFunctionCall */
  54829. /* Commands that are positive are timer commands rather than pended
  54830. function calls. */
  54831. if( xMessage.xMessageID >= ( BaseType_t ) 0 )
  54832. 8016c8e: 687b ldr r3, [r7, #4]
  54833. 8016c90: 2b00 cmp r3, #0
  54834. 8016c92: f2c0 80ae blt.w 8016df2 <prvProcessReceivedCommands+0x1a6>
  54835. {
  54836. /* The messages uses the xTimerParameters member to work on a
  54837. software timer. */
  54838. pxTimer = xMessage.u.xTimerParameters.pxTimer;
  54839. 8016c96: 68fb ldr r3, [r7, #12]
  54840. 8016c98: 62bb str r3, [r7, #40] @ 0x28
  54841. if( listIS_CONTAINED_WITHIN( NULL, &( pxTimer->xTimerListItem ) ) == pdFALSE ) /*lint !e961. The cast is only redundant when NULL is passed into the macro. */
  54842. 8016c9a: 6abb ldr r3, [r7, #40] @ 0x28
  54843. 8016c9c: 695b ldr r3, [r3, #20]
  54844. 8016c9e: 2b00 cmp r3, #0
  54845. 8016ca0: d004 beq.n 8016cac <prvProcessReceivedCommands+0x60>
  54846. {
  54847. /* The timer is in a list, remove it. */
  54848. ( void ) uxListRemove( &( pxTimer->xTimerListItem ) );
  54849. 8016ca2: 6abb ldr r3, [r7, #40] @ 0x28
  54850. 8016ca4: 3304 adds r3, #4
  54851. 8016ca6: 4618 mov r0, r3
  54852. 8016ca8: f7fd f936 bl 8013f18 <uxListRemove>
  54853. it must be present in the function call. prvSampleTimeNow() must be
  54854. called after the message is received from xTimerQueue so there is no
  54855. possibility of a higher priority task adding a message to the message
  54856. queue with a time that is ahead of the timer daemon task (because it
  54857. pre-empted the timer daemon task after the xTimeNow value was set). */
  54858. xTimeNow = prvSampleTimeNow( &xTimerListsWereSwitched );
  54859. 8016cac: 463b mov r3, r7
  54860. 8016cae: 4618 mov r0, r3
  54861. 8016cb0: f7ff ff6a bl 8016b88 <prvSampleTimeNow>
  54862. 8016cb4: 6278 str r0, [r7, #36] @ 0x24
  54863. switch( xMessage.xMessageID )
  54864. 8016cb6: 687b ldr r3, [r7, #4]
  54865. 8016cb8: 2b09 cmp r3, #9
  54866. 8016cba: f200 8097 bhi.w 8016dec <prvProcessReceivedCommands+0x1a0>
  54867. 8016cbe: a201 add r2, pc, #4 @ (adr r2, 8016cc4 <prvProcessReceivedCommands+0x78>)
  54868. 8016cc0: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  54869. 8016cc4: 08016ced .word 0x08016ced
  54870. 8016cc8: 08016ced .word 0x08016ced
  54871. 8016ccc: 08016ced .word 0x08016ced
  54872. 8016cd0: 08016d63 .word 0x08016d63
  54873. 8016cd4: 08016d77 .word 0x08016d77
  54874. 8016cd8: 08016dc3 .word 0x08016dc3
  54875. 8016cdc: 08016ced .word 0x08016ced
  54876. 8016ce0: 08016ced .word 0x08016ced
  54877. 8016ce4: 08016d63 .word 0x08016d63
  54878. 8016ce8: 08016d77 .word 0x08016d77
  54879. case tmrCOMMAND_START_FROM_ISR :
  54880. case tmrCOMMAND_RESET :
  54881. case tmrCOMMAND_RESET_FROM_ISR :
  54882. case tmrCOMMAND_START_DONT_TRACE :
  54883. /* Start or restart a timer. */
  54884. pxTimer->ucStatus |= tmrSTATUS_IS_ACTIVE;
  54885. 8016cec: 6abb ldr r3, [r7, #40] @ 0x28
  54886. 8016cee: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  54887. 8016cf2: f043 0301 orr.w r3, r3, #1
  54888. 8016cf6: b2da uxtb r2, r3
  54889. 8016cf8: 6abb ldr r3, [r7, #40] @ 0x28
  54890. 8016cfa: f883 2028 strb.w r2, [r3, #40] @ 0x28
  54891. if( prvInsertTimerInActiveList( pxTimer, xMessage.u.xTimerParameters.xMessageValue + pxTimer->xTimerPeriodInTicks, xTimeNow, xMessage.u.xTimerParameters.xMessageValue ) != pdFALSE )
  54892. 8016cfe: 68ba ldr r2, [r7, #8]
  54893. 8016d00: 6abb ldr r3, [r7, #40] @ 0x28
  54894. 8016d02: 699b ldr r3, [r3, #24]
  54895. 8016d04: 18d1 adds r1, r2, r3
  54896. 8016d06: 68bb ldr r3, [r7, #8]
  54897. 8016d08: 6a7a ldr r2, [r7, #36] @ 0x24
  54898. 8016d0a: 6ab8 ldr r0, [r7, #40] @ 0x28
  54899. 8016d0c: f7ff ff5c bl 8016bc8 <prvInsertTimerInActiveList>
  54900. 8016d10: 4603 mov r3, r0
  54901. 8016d12: 2b00 cmp r3, #0
  54902. 8016d14: d06c beq.n 8016df0 <prvProcessReceivedCommands+0x1a4>
  54903. {
  54904. /* The timer expired before it was added to the active
  54905. timer list. Process it now. */
  54906. pxTimer->pxCallbackFunction( ( TimerHandle_t ) pxTimer );
  54907. 8016d16: 6abb ldr r3, [r7, #40] @ 0x28
  54908. 8016d18: 6a1b ldr r3, [r3, #32]
  54909. 8016d1a: 6ab8 ldr r0, [r7, #40] @ 0x28
  54910. 8016d1c: 4798 blx r3
  54911. traceTIMER_EXPIRED( pxTimer );
  54912. if( ( pxTimer->ucStatus & tmrSTATUS_IS_AUTORELOAD ) != 0 )
  54913. 8016d1e: 6abb ldr r3, [r7, #40] @ 0x28
  54914. 8016d20: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  54915. 8016d24: f003 0304 and.w r3, r3, #4
  54916. 8016d28: 2b00 cmp r3, #0
  54917. 8016d2a: d061 beq.n 8016df0 <prvProcessReceivedCommands+0x1a4>
  54918. {
  54919. xResult = xTimerGenericCommand( pxTimer, tmrCOMMAND_START_DONT_TRACE, xMessage.u.xTimerParameters.xMessageValue + pxTimer->xTimerPeriodInTicks, NULL, tmrNO_DELAY );
  54920. 8016d2c: 68ba ldr r2, [r7, #8]
  54921. 8016d2e: 6abb ldr r3, [r7, #40] @ 0x28
  54922. 8016d30: 699b ldr r3, [r3, #24]
  54923. 8016d32: 441a add r2, r3
  54924. 8016d34: 2300 movs r3, #0
  54925. 8016d36: 9300 str r3, [sp, #0]
  54926. 8016d38: 2300 movs r3, #0
  54927. 8016d3a: 2100 movs r1, #0
  54928. 8016d3c: 6ab8 ldr r0, [r7, #40] @ 0x28
  54929. 8016d3e: f7ff fe01 bl 8016944 <xTimerGenericCommand>
  54930. 8016d42: 6238 str r0, [r7, #32]
  54931. configASSERT( xResult );
  54932. 8016d44: 6a3b ldr r3, [r7, #32]
  54933. 8016d46: 2b00 cmp r3, #0
  54934. 8016d48: d152 bne.n 8016df0 <prvProcessReceivedCommands+0x1a4>
  54935. __asm volatile
  54936. 8016d4a: f04f 0350 mov.w r3, #80 @ 0x50
  54937. 8016d4e: f383 8811 msr BASEPRI, r3
  54938. 8016d52: f3bf 8f6f isb sy
  54939. 8016d56: f3bf 8f4f dsb sy
  54940. 8016d5a: 61bb str r3, [r7, #24]
  54941. }
  54942. 8016d5c: bf00 nop
  54943. 8016d5e: bf00 nop
  54944. 8016d60: e7fd b.n 8016d5e <prvProcessReceivedCommands+0x112>
  54945. break;
  54946. case tmrCOMMAND_STOP :
  54947. case tmrCOMMAND_STOP_FROM_ISR :
  54948. /* The timer has already been removed from the active list. */
  54949. pxTimer->ucStatus &= ~tmrSTATUS_IS_ACTIVE;
  54950. 8016d62: 6abb ldr r3, [r7, #40] @ 0x28
  54951. 8016d64: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  54952. 8016d68: f023 0301 bic.w r3, r3, #1
  54953. 8016d6c: b2da uxtb r2, r3
  54954. 8016d6e: 6abb ldr r3, [r7, #40] @ 0x28
  54955. 8016d70: f883 2028 strb.w r2, [r3, #40] @ 0x28
  54956. break;
  54957. 8016d74: e03d b.n 8016df2 <prvProcessReceivedCommands+0x1a6>
  54958. case tmrCOMMAND_CHANGE_PERIOD :
  54959. case tmrCOMMAND_CHANGE_PERIOD_FROM_ISR :
  54960. pxTimer->ucStatus |= tmrSTATUS_IS_ACTIVE;
  54961. 8016d76: 6abb ldr r3, [r7, #40] @ 0x28
  54962. 8016d78: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  54963. 8016d7c: f043 0301 orr.w r3, r3, #1
  54964. 8016d80: b2da uxtb r2, r3
  54965. 8016d82: 6abb ldr r3, [r7, #40] @ 0x28
  54966. 8016d84: f883 2028 strb.w r2, [r3, #40] @ 0x28
  54967. pxTimer->xTimerPeriodInTicks = xMessage.u.xTimerParameters.xMessageValue;
  54968. 8016d88: 68ba ldr r2, [r7, #8]
  54969. 8016d8a: 6abb ldr r3, [r7, #40] @ 0x28
  54970. 8016d8c: 619a str r2, [r3, #24]
  54971. configASSERT( ( pxTimer->xTimerPeriodInTicks > 0 ) );
  54972. 8016d8e: 6abb ldr r3, [r7, #40] @ 0x28
  54973. 8016d90: 699b ldr r3, [r3, #24]
  54974. 8016d92: 2b00 cmp r3, #0
  54975. 8016d94: d10b bne.n 8016dae <prvProcessReceivedCommands+0x162>
  54976. __asm volatile
  54977. 8016d96: f04f 0350 mov.w r3, #80 @ 0x50
  54978. 8016d9a: f383 8811 msr BASEPRI, r3
  54979. 8016d9e: f3bf 8f6f isb sy
  54980. 8016da2: f3bf 8f4f dsb sy
  54981. 8016da6: 617b str r3, [r7, #20]
  54982. }
  54983. 8016da8: bf00 nop
  54984. 8016daa: bf00 nop
  54985. 8016dac: e7fd b.n 8016daa <prvProcessReceivedCommands+0x15e>
  54986. be longer or shorter than the old one. The command time is
  54987. therefore set to the current time, and as the period cannot
  54988. be zero the next expiry time can only be in the future,
  54989. meaning (unlike for the xTimerStart() case above) there is
  54990. no fail case that needs to be handled here. */
  54991. ( void ) prvInsertTimerInActiveList( pxTimer, ( xTimeNow + pxTimer->xTimerPeriodInTicks ), xTimeNow, xTimeNow );
  54992. 8016dae: 6abb ldr r3, [r7, #40] @ 0x28
  54993. 8016db0: 699a ldr r2, [r3, #24]
  54994. 8016db2: 6a7b ldr r3, [r7, #36] @ 0x24
  54995. 8016db4: 18d1 adds r1, r2, r3
  54996. 8016db6: 6a7b ldr r3, [r7, #36] @ 0x24
  54997. 8016db8: 6a7a ldr r2, [r7, #36] @ 0x24
  54998. 8016dba: 6ab8 ldr r0, [r7, #40] @ 0x28
  54999. 8016dbc: f7ff ff04 bl 8016bc8 <prvInsertTimerInActiveList>
  55000. break;
  55001. 8016dc0: e017 b.n 8016df2 <prvProcessReceivedCommands+0x1a6>
  55002. #if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
  55003. {
  55004. /* The timer has already been removed from the active list,
  55005. just free up the memory if the memory was dynamically
  55006. allocated. */
  55007. if( ( pxTimer->ucStatus & tmrSTATUS_IS_STATICALLY_ALLOCATED ) == ( uint8_t ) 0 )
  55008. 8016dc2: 6abb ldr r3, [r7, #40] @ 0x28
  55009. 8016dc4: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  55010. 8016dc8: f003 0302 and.w r3, r3, #2
  55011. 8016dcc: 2b00 cmp r3, #0
  55012. 8016dce: d103 bne.n 8016dd8 <prvProcessReceivedCommands+0x18c>
  55013. {
  55014. vPortFree( pxTimer );
  55015. 8016dd0: 6ab8 ldr r0, [r7, #40] @ 0x28
  55016. 8016dd2: f000 fc31 bl 8017638 <vPortFree>
  55017. no need to free the memory - just mark the timer as
  55018. "not active". */
  55019. pxTimer->ucStatus &= ~tmrSTATUS_IS_ACTIVE;
  55020. }
  55021. #endif /* configSUPPORT_DYNAMIC_ALLOCATION */
  55022. break;
  55023. 8016dd6: e00c b.n 8016df2 <prvProcessReceivedCommands+0x1a6>
  55024. pxTimer->ucStatus &= ~tmrSTATUS_IS_ACTIVE;
  55025. 8016dd8: 6abb ldr r3, [r7, #40] @ 0x28
  55026. 8016dda: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  55027. 8016dde: f023 0301 bic.w r3, r3, #1
  55028. 8016de2: b2da uxtb r2, r3
  55029. 8016de4: 6abb ldr r3, [r7, #40] @ 0x28
  55030. 8016de6: f883 2028 strb.w r2, [r3, #40] @ 0x28
  55031. break;
  55032. 8016dea: e002 b.n 8016df2 <prvProcessReceivedCommands+0x1a6>
  55033. default :
  55034. /* Don't expect to get here. */
  55035. break;
  55036. 8016dec: bf00 nop
  55037. 8016dee: e000 b.n 8016df2 <prvProcessReceivedCommands+0x1a6>
  55038. break;
  55039. 8016df0: bf00 nop
  55040. 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. */
  55041. 8016df2: 4b08 ldr r3, [pc, #32] @ (8016e14 <prvProcessReceivedCommands+0x1c8>)
  55042. 8016df4: 681b ldr r3, [r3, #0]
  55043. 8016df6: 1d39 adds r1, r7, #4
  55044. 8016df8: 2200 movs r2, #0
  55045. 8016dfa: 4618 mov r0, r3
  55046. 8016dfc: f7fd fc54 bl 80146a8 <xQueueReceive>
  55047. 8016e00: 4603 mov r3, r0
  55048. 8016e02: 2b00 cmp r3, #0
  55049. 8016e04: f47f af26 bne.w 8016c54 <prvProcessReceivedCommands+0x8>
  55050. }
  55051. }
  55052. }
  55053. }
  55054. 8016e08: bf00 nop
  55055. 8016e0a: bf00 nop
  55056. 8016e0c: 3730 adds r7, #48 @ 0x30
  55057. 8016e0e: 46bd mov sp, r7
  55058. 8016e10: bd80 pop {r7, pc}
  55059. 8016e12: bf00 nop
  55060. 8016e14: 24002f44 .word 0x24002f44
  55061. 08016e18 <prvSwitchTimerLists>:
  55062. /*-----------------------------------------------------------*/
  55063. static void prvSwitchTimerLists( void )
  55064. {
  55065. 8016e18: b580 push {r7, lr}
  55066. 8016e1a: b088 sub sp, #32
  55067. 8016e1c: af02 add r7, sp, #8
  55068. /* The tick count has overflowed. The timer lists must be switched.
  55069. If there are any timers still referenced from the current timer list
  55070. then they must have expired and should be processed before the lists
  55071. are switched. */
  55072. while( listLIST_IS_EMPTY( pxCurrentTimerList ) == pdFALSE )
  55073. 8016e1e: e049 b.n 8016eb4 <prvSwitchTimerLists+0x9c>
  55074. {
  55075. xNextExpireTime = listGET_ITEM_VALUE_OF_HEAD_ENTRY( pxCurrentTimerList );
  55076. 8016e20: 4b2e ldr r3, [pc, #184] @ (8016edc <prvSwitchTimerLists+0xc4>)
  55077. 8016e22: 681b ldr r3, [r3, #0]
  55078. 8016e24: 68db ldr r3, [r3, #12]
  55079. 8016e26: 681b ldr r3, [r3, #0]
  55080. 8016e28: 613b str r3, [r7, #16]
  55081. /* Remove the timer from the list. */
  55082. 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. */
  55083. 8016e2a: 4b2c ldr r3, [pc, #176] @ (8016edc <prvSwitchTimerLists+0xc4>)
  55084. 8016e2c: 681b ldr r3, [r3, #0]
  55085. 8016e2e: 68db ldr r3, [r3, #12]
  55086. 8016e30: 68db ldr r3, [r3, #12]
  55087. 8016e32: 60fb str r3, [r7, #12]
  55088. ( void ) uxListRemove( &( pxTimer->xTimerListItem ) );
  55089. 8016e34: 68fb ldr r3, [r7, #12]
  55090. 8016e36: 3304 adds r3, #4
  55091. 8016e38: 4618 mov r0, r3
  55092. 8016e3a: f7fd f86d bl 8013f18 <uxListRemove>
  55093. traceTIMER_EXPIRED( pxTimer );
  55094. /* Execute its callback, then send a command to restart the timer if
  55095. it is an auto-reload timer. It cannot be restarted here as the lists
  55096. have not yet been switched. */
  55097. pxTimer->pxCallbackFunction( ( TimerHandle_t ) pxTimer );
  55098. 8016e3e: 68fb ldr r3, [r7, #12]
  55099. 8016e40: 6a1b ldr r3, [r3, #32]
  55100. 8016e42: 68f8 ldr r0, [r7, #12]
  55101. 8016e44: 4798 blx r3
  55102. if( ( pxTimer->ucStatus & tmrSTATUS_IS_AUTORELOAD ) != 0 )
  55103. 8016e46: 68fb ldr r3, [r7, #12]
  55104. 8016e48: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  55105. 8016e4c: f003 0304 and.w r3, r3, #4
  55106. 8016e50: 2b00 cmp r3, #0
  55107. 8016e52: d02f beq.n 8016eb4 <prvSwitchTimerLists+0x9c>
  55108. the timer going into the same timer list then it has already expired
  55109. and the timer should be re-inserted into the current list so it is
  55110. processed again within this loop. Otherwise a command should be sent
  55111. to restart the timer to ensure it is only inserted into a list after
  55112. the lists have been swapped. */
  55113. xReloadTime = ( xNextExpireTime + pxTimer->xTimerPeriodInTicks );
  55114. 8016e54: 68fb ldr r3, [r7, #12]
  55115. 8016e56: 699b ldr r3, [r3, #24]
  55116. 8016e58: 693a ldr r2, [r7, #16]
  55117. 8016e5a: 4413 add r3, r2
  55118. 8016e5c: 60bb str r3, [r7, #8]
  55119. if( xReloadTime > xNextExpireTime )
  55120. 8016e5e: 68ba ldr r2, [r7, #8]
  55121. 8016e60: 693b ldr r3, [r7, #16]
  55122. 8016e62: 429a cmp r2, r3
  55123. 8016e64: d90e bls.n 8016e84 <prvSwitchTimerLists+0x6c>
  55124. {
  55125. listSET_LIST_ITEM_VALUE( &( pxTimer->xTimerListItem ), xReloadTime );
  55126. 8016e66: 68fb ldr r3, [r7, #12]
  55127. 8016e68: 68ba ldr r2, [r7, #8]
  55128. 8016e6a: 605a str r2, [r3, #4]
  55129. listSET_LIST_ITEM_OWNER( &( pxTimer->xTimerListItem ), pxTimer );
  55130. 8016e6c: 68fb ldr r3, [r7, #12]
  55131. 8016e6e: 68fa ldr r2, [r7, #12]
  55132. 8016e70: 611a str r2, [r3, #16]
  55133. vListInsert( pxCurrentTimerList, &( pxTimer->xTimerListItem ) );
  55134. 8016e72: 4b1a ldr r3, [pc, #104] @ (8016edc <prvSwitchTimerLists+0xc4>)
  55135. 8016e74: 681a ldr r2, [r3, #0]
  55136. 8016e76: 68fb ldr r3, [r7, #12]
  55137. 8016e78: 3304 adds r3, #4
  55138. 8016e7a: 4619 mov r1, r3
  55139. 8016e7c: 4610 mov r0, r2
  55140. 8016e7e: f7fd f812 bl 8013ea6 <vListInsert>
  55141. 8016e82: e017 b.n 8016eb4 <prvSwitchTimerLists+0x9c>
  55142. }
  55143. else
  55144. {
  55145. xResult = xTimerGenericCommand( pxTimer, tmrCOMMAND_START_DONT_TRACE, xNextExpireTime, NULL, tmrNO_DELAY );
  55146. 8016e84: 2300 movs r3, #0
  55147. 8016e86: 9300 str r3, [sp, #0]
  55148. 8016e88: 2300 movs r3, #0
  55149. 8016e8a: 693a ldr r2, [r7, #16]
  55150. 8016e8c: 2100 movs r1, #0
  55151. 8016e8e: 68f8 ldr r0, [r7, #12]
  55152. 8016e90: f7ff fd58 bl 8016944 <xTimerGenericCommand>
  55153. 8016e94: 6078 str r0, [r7, #4]
  55154. configASSERT( xResult );
  55155. 8016e96: 687b ldr r3, [r7, #4]
  55156. 8016e98: 2b00 cmp r3, #0
  55157. 8016e9a: d10b bne.n 8016eb4 <prvSwitchTimerLists+0x9c>
  55158. __asm volatile
  55159. 8016e9c: f04f 0350 mov.w r3, #80 @ 0x50
  55160. 8016ea0: f383 8811 msr BASEPRI, r3
  55161. 8016ea4: f3bf 8f6f isb sy
  55162. 8016ea8: f3bf 8f4f dsb sy
  55163. 8016eac: 603b str r3, [r7, #0]
  55164. }
  55165. 8016eae: bf00 nop
  55166. 8016eb0: bf00 nop
  55167. 8016eb2: e7fd b.n 8016eb0 <prvSwitchTimerLists+0x98>
  55168. while( listLIST_IS_EMPTY( pxCurrentTimerList ) == pdFALSE )
  55169. 8016eb4: 4b09 ldr r3, [pc, #36] @ (8016edc <prvSwitchTimerLists+0xc4>)
  55170. 8016eb6: 681b ldr r3, [r3, #0]
  55171. 8016eb8: 681b ldr r3, [r3, #0]
  55172. 8016eba: 2b00 cmp r3, #0
  55173. 8016ebc: d1b0 bne.n 8016e20 <prvSwitchTimerLists+0x8>
  55174. {
  55175. mtCOVERAGE_TEST_MARKER();
  55176. }
  55177. }
  55178. pxTemp = pxCurrentTimerList;
  55179. 8016ebe: 4b07 ldr r3, [pc, #28] @ (8016edc <prvSwitchTimerLists+0xc4>)
  55180. 8016ec0: 681b ldr r3, [r3, #0]
  55181. 8016ec2: 617b str r3, [r7, #20]
  55182. pxCurrentTimerList = pxOverflowTimerList;
  55183. 8016ec4: 4b06 ldr r3, [pc, #24] @ (8016ee0 <prvSwitchTimerLists+0xc8>)
  55184. 8016ec6: 681b ldr r3, [r3, #0]
  55185. 8016ec8: 4a04 ldr r2, [pc, #16] @ (8016edc <prvSwitchTimerLists+0xc4>)
  55186. 8016eca: 6013 str r3, [r2, #0]
  55187. pxOverflowTimerList = pxTemp;
  55188. 8016ecc: 4a04 ldr r2, [pc, #16] @ (8016ee0 <prvSwitchTimerLists+0xc8>)
  55189. 8016ece: 697b ldr r3, [r7, #20]
  55190. 8016ed0: 6013 str r3, [r2, #0]
  55191. }
  55192. 8016ed2: bf00 nop
  55193. 8016ed4: 3718 adds r7, #24
  55194. 8016ed6: 46bd mov sp, r7
  55195. 8016ed8: bd80 pop {r7, pc}
  55196. 8016eda: bf00 nop
  55197. 8016edc: 24002f3c .word 0x24002f3c
  55198. 8016ee0: 24002f40 .word 0x24002f40
  55199. 08016ee4 <prvCheckForValidListAndQueue>:
  55200. /*-----------------------------------------------------------*/
  55201. static void prvCheckForValidListAndQueue( void )
  55202. {
  55203. 8016ee4: b580 push {r7, lr}
  55204. 8016ee6: b082 sub sp, #8
  55205. 8016ee8: af02 add r7, sp, #8
  55206. /* Check that the list from which active timers are referenced, and the
  55207. queue used to communicate with the timer service, have been
  55208. initialised. */
  55209. taskENTER_CRITICAL();
  55210. 8016eea: f000 f9b5 bl 8017258 <vPortEnterCritical>
  55211. {
  55212. if( xTimerQueue == NULL )
  55213. 8016eee: 4b15 ldr r3, [pc, #84] @ (8016f44 <prvCheckForValidListAndQueue+0x60>)
  55214. 8016ef0: 681b ldr r3, [r3, #0]
  55215. 8016ef2: 2b00 cmp r3, #0
  55216. 8016ef4: d120 bne.n 8016f38 <prvCheckForValidListAndQueue+0x54>
  55217. {
  55218. vListInitialise( &xActiveTimerList1 );
  55219. 8016ef6: 4814 ldr r0, [pc, #80] @ (8016f48 <prvCheckForValidListAndQueue+0x64>)
  55220. 8016ef8: f7fc ff84 bl 8013e04 <vListInitialise>
  55221. vListInitialise( &xActiveTimerList2 );
  55222. 8016efc: 4813 ldr r0, [pc, #76] @ (8016f4c <prvCheckForValidListAndQueue+0x68>)
  55223. 8016efe: f7fc ff81 bl 8013e04 <vListInitialise>
  55224. pxCurrentTimerList = &xActiveTimerList1;
  55225. 8016f02: 4b13 ldr r3, [pc, #76] @ (8016f50 <prvCheckForValidListAndQueue+0x6c>)
  55226. 8016f04: 4a10 ldr r2, [pc, #64] @ (8016f48 <prvCheckForValidListAndQueue+0x64>)
  55227. 8016f06: 601a str r2, [r3, #0]
  55228. pxOverflowTimerList = &xActiveTimerList2;
  55229. 8016f08: 4b12 ldr r3, [pc, #72] @ (8016f54 <prvCheckForValidListAndQueue+0x70>)
  55230. 8016f0a: 4a10 ldr r2, [pc, #64] @ (8016f4c <prvCheckForValidListAndQueue+0x68>)
  55231. 8016f0c: 601a str r2, [r3, #0]
  55232. /* The timer queue is allocated statically in case
  55233. configSUPPORT_DYNAMIC_ALLOCATION is 0. */
  55234. static StaticQueue_t xStaticTimerQueue; /*lint !e956 Ok to declare in this manner to prevent additional conditional compilation guards in other locations. */
  55235. 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. */
  55236. xTimerQueue = xQueueCreateStatic( ( UBaseType_t ) configTIMER_QUEUE_LENGTH, ( UBaseType_t ) sizeof( DaemonTaskMessage_t ), &( ucStaticTimerQueueStorage[ 0 ] ), &xStaticTimerQueue );
  55237. 8016f0e: 2300 movs r3, #0
  55238. 8016f10: 9300 str r3, [sp, #0]
  55239. 8016f12: 4b11 ldr r3, [pc, #68] @ (8016f58 <prvCheckForValidListAndQueue+0x74>)
  55240. 8016f14: 4a11 ldr r2, [pc, #68] @ (8016f5c <prvCheckForValidListAndQueue+0x78>)
  55241. 8016f16: 2110 movs r1, #16
  55242. 8016f18: 200a movs r0, #10
  55243. 8016f1a: f7fd f891 bl 8014040 <xQueueGenericCreateStatic>
  55244. 8016f1e: 4603 mov r3, r0
  55245. 8016f20: 4a08 ldr r2, [pc, #32] @ (8016f44 <prvCheckForValidListAndQueue+0x60>)
  55246. 8016f22: 6013 str r3, [r2, #0]
  55247. }
  55248. #endif
  55249. #if ( configQUEUE_REGISTRY_SIZE > 0 )
  55250. {
  55251. if( xTimerQueue != NULL )
  55252. 8016f24: 4b07 ldr r3, [pc, #28] @ (8016f44 <prvCheckForValidListAndQueue+0x60>)
  55253. 8016f26: 681b ldr r3, [r3, #0]
  55254. 8016f28: 2b00 cmp r3, #0
  55255. 8016f2a: d005 beq.n 8016f38 <prvCheckForValidListAndQueue+0x54>
  55256. {
  55257. vQueueAddToRegistry( xTimerQueue, "TmrQ" );
  55258. 8016f2c: 4b05 ldr r3, [pc, #20] @ (8016f44 <prvCheckForValidListAndQueue+0x60>)
  55259. 8016f2e: 681b ldr r3, [r3, #0]
  55260. 8016f30: 490b ldr r1, [pc, #44] @ (8016f60 <prvCheckForValidListAndQueue+0x7c>)
  55261. 8016f32: 4618 mov r0, r3
  55262. 8016f34: f7fd ff54 bl 8014de0 <vQueueAddToRegistry>
  55263. else
  55264. {
  55265. mtCOVERAGE_TEST_MARKER();
  55266. }
  55267. }
  55268. taskEXIT_CRITICAL();
  55269. 8016f38: f000 f9c0 bl 80172bc <vPortExitCritical>
  55270. }
  55271. 8016f3c: bf00 nop
  55272. 8016f3e: 46bd mov sp, r7
  55273. 8016f40: bd80 pop {r7, pc}
  55274. 8016f42: bf00 nop
  55275. 8016f44: 24002f44 .word 0x24002f44
  55276. 8016f48: 24002f14 .word 0x24002f14
  55277. 8016f4c: 24002f28 .word 0x24002f28
  55278. 8016f50: 24002f3c .word 0x24002f3c
  55279. 8016f54: 24002f40 .word 0x24002f40
  55280. 8016f58: 24002ff0 .word 0x24002ff0
  55281. 8016f5c: 24002f50 .word 0x24002f50
  55282. 8016f60: 08018af0 .word 0x08018af0
  55283. 08016f64 <xTimerIsTimerActive>:
  55284. /*-----------------------------------------------------------*/
  55285. BaseType_t xTimerIsTimerActive( TimerHandle_t xTimer )
  55286. {
  55287. 8016f64: b580 push {r7, lr}
  55288. 8016f66: b086 sub sp, #24
  55289. 8016f68: af00 add r7, sp, #0
  55290. 8016f6a: 6078 str r0, [r7, #4]
  55291. BaseType_t xReturn;
  55292. Timer_t *pxTimer = xTimer;
  55293. 8016f6c: 687b ldr r3, [r7, #4]
  55294. 8016f6e: 613b str r3, [r7, #16]
  55295. configASSERT( xTimer );
  55296. 8016f70: 687b ldr r3, [r7, #4]
  55297. 8016f72: 2b00 cmp r3, #0
  55298. 8016f74: d10b bne.n 8016f8e <xTimerIsTimerActive+0x2a>
  55299. __asm volatile
  55300. 8016f76: f04f 0350 mov.w r3, #80 @ 0x50
  55301. 8016f7a: f383 8811 msr BASEPRI, r3
  55302. 8016f7e: f3bf 8f6f isb sy
  55303. 8016f82: f3bf 8f4f dsb sy
  55304. 8016f86: 60fb str r3, [r7, #12]
  55305. }
  55306. 8016f88: bf00 nop
  55307. 8016f8a: bf00 nop
  55308. 8016f8c: e7fd b.n 8016f8a <xTimerIsTimerActive+0x26>
  55309. /* Is the timer in the list of active timers? */
  55310. taskENTER_CRITICAL();
  55311. 8016f8e: f000 f963 bl 8017258 <vPortEnterCritical>
  55312. {
  55313. if( ( pxTimer->ucStatus & tmrSTATUS_IS_ACTIVE ) == 0 )
  55314. 8016f92: 693b ldr r3, [r7, #16]
  55315. 8016f94: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  55316. 8016f98: f003 0301 and.w r3, r3, #1
  55317. 8016f9c: 2b00 cmp r3, #0
  55318. 8016f9e: d102 bne.n 8016fa6 <xTimerIsTimerActive+0x42>
  55319. {
  55320. xReturn = pdFALSE;
  55321. 8016fa0: 2300 movs r3, #0
  55322. 8016fa2: 617b str r3, [r7, #20]
  55323. 8016fa4: e001 b.n 8016faa <xTimerIsTimerActive+0x46>
  55324. }
  55325. else
  55326. {
  55327. xReturn = pdTRUE;
  55328. 8016fa6: 2301 movs r3, #1
  55329. 8016fa8: 617b str r3, [r7, #20]
  55330. }
  55331. }
  55332. taskEXIT_CRITICAL();
  55333. 8016faa: f000 f987 bl 80172bc <vPortExitCritical>
  55334. return xReturn;
  55335. 8016fae: 697b ldr r3, [r7, #20]
  55336. } /*lint !e818 Can't be pointer to const due to the typedef. */
  55337. 8016fb0: 4618 mov r0, r3
  55338. 8016fb2: 3718 adds r7, #24
  55339. 8016fb4: 46bd mov sp, r7
  55340. 8016fb6: bd80 pop {r7, pc}
  55341. 08016fb8 <pvTimerGetTimerID>:
  55342. /*-----------------------------------------------------------*/
  55343. void *pvTimerGetTimerID( const TimerHandle_t xTimer )
  55344. {
  55345. 8016fb8: b580 push {r7, lr}
  55346. 8016fba: b086 sub sp, #24
  55347. 8016fbc: af00 add r7, sp, #0
  55348. 8016fbe: 6078 str r0, [r7, #4]
  55349. Timer_t * const pxTimer = xTimer;
  55350. 8016fc0: 687b ldr r3, [r7, #4]
  55351. 8016fc2: 617b str r3, [r7, #20]
  55352. void *pvReturn;
  55353. configASSERT( xTimer );
  55354. 8016fc4: 687b ldr r3, [r7, #4]
  55355. 8016fc6: 2b00 cmp r3, #0
  55356. 8016fc8: d10b bne.n 8016fe2 <pvTimerGetTimerID+0x2a>
  55357. __asm volatile
  55358. 8016fca: f04f 0350 mov.w r3, #80 @ 0x50
  55359. 8016fce: f383 8811 msr BASEPRI, r3
  55360. 8016fd2: f3bf 8f6f isb sy
  55361. 8016fd6: f3bf 8f4f dsb sy
  55362. 8016fda: 60fb str r3, [r7, #12]
  55363. }
  55364. 8016fdc: bf00 nop
  55365. 8016fde: bf00 nop
  55366. 8016fe0: e7fd b.n 8016fde <pvTimerGetTimerID+0x26>
  55367. taskENTER_CRITICAL();
  55368. 8016fe2: f000 f939 bl 8017258 <vPortEnterCritical>
  55369. {
  55370. pvReturn = pxTimer->pvTimerID;
  55371. 8016fe6: 697b ldr r3, [r7, #20]
  55372. 8016fe8: 69db ldr r3, [r3, #28]
  55373. 8016fea: 613b str r3, [r7, #16]
  55374. }
  55375. taskEXIT_CRITICAL();
  55376. 8016fec: f000 f966 bl 80172bc <vPortExitCritical>
  55377. return pvReturn;
  55378. 8016ff0: 693b ldr r3, [r7, #16]
  55379. }
  55380. 8016ff2: 4618 mov r0, r3
  55381. 8016ff4: 3718 adds r7, #24
  55382. 8016ff6: 46bd mov sp, r7
  55383. 8016ff8: bd80 pop {r7, pc}
  55384. ...
  55385. 08016ffc <pxPortInitialiseStack>:
  55386. /*
  55387. * See header file for description.
  55388. */
  55389. StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters )
  55390. {
  55391. 8016ffc: b480 push {r7}
  55392. 8016ffe: b085 sub sp, #20
  55393. 8017000: af00 add r7, sp, #0
  55394. 8017002: 60f8 str r0, [r7, #12]
  55395. 8017004: 60b9 str r1, [r7, #8]
  55396. 8017006: 607a str r2, [r7, #4]
  55397. /* Simulate the stack frame as it would be created by a context switch
  55398. interrupt. */
  55399. /* Offset added to account for the way the MCU uses the stack on entry/exit
  55400. of interrupts, and to ensure alignment. */
  55401. pxTopOfStack--;
  55402. 8017008: 68fb ldr r3, [r7, #12]
  55403. 801700a: 3b04 subs r3, #4
  55404. 801700c: 60fb str r3, [r7, #12]
  55405. *pxTopOfStack = portINITIAL_XPSR; /* xPSR */
  55406. 801700e: 68fb ldr r3, [r7, #12]
  55407. 8017010: f04f 7280 mov.w r2, #16777216 @ 0x1000000
  55408. 8017014: 601a str r2, [r3, #0]
  55409. pxTopOfStack--;
  55410. 8017016: 68fb ldr r3, [r7, #12]
  55411. 8017018: 3b04 subs r3, #4
  55412. 801701a: 60fb str r3, [r7, #12]
  55413. *pxTopOfStack = ( ( StackType_t ) pxCode ) & portSTART_ADDRESS_MASK; /* PC */
  55414. 801701c: 68bb ldr r3, [r7, #8]
  55415. 801701e: f023 0201 bic.w r2, r3, #1
  55416. 8017022: 68fb ldr r3, [r7, #12]
  55417. 8017024: 601a str r2, [r3, #0]
  55418. pxTopOfStack--;
  55419. 8017026: 68fb ldr r3, [r7, #12]
  55420. 8017028: 3b04 subs r3, #4
  55421. 801702a: 60fb str r3, [r7, #12]
  55422. *pxTopOfStack = ( StackType_t ) portTASK_RETURN_ADDRESS; /* LR */
  55423. 801702c: 4a0c ldr r2, [pc, #48] @ (8017060 <pxPortInitialiseStack+0x64>)
  55424. 801702e: 68fb ldr r3, [r7, #12]
  55425. 8017030: 601a str r2, [r3, #0]
  55426. /* Save code space by skipping register initialisation. */
  55427. pxTopOfStack -= 5; /* R12, R3, R2 and R1. */
  55428. 8017032: 68fb ldr r3, [r7, #12]
  55429. 8017034: 3b14 subs r3, #20
  55430. 8017036: 60fb str r3, [r7, #12]
  55431. *pxTopOfStack = ( StackType_t ) pvParameters; /* R0 */
  55432. 8017038: 687a ldr r2, [r7, #4]
  55433. 801703a: 68fb ldr r3, [r7, #12]
  55434. 801703c: 601a str r2, [r3, #0]
  55435. /* A save method is being used that requires each task to maintain its
  55436. own exec return value. */
  55437. pxTopOfStack--;
  55438. 801703e: 68fb ldr r3, [r7, #12]
  55439. 8017040: 3b04 subs r3, #4
  55440. 8017042: 60fb str r3, [r7, #12]
  55441. *pxTopOfStack = portINITIAL_EXC_RETURN;
  55442. 8017044: 68fb ldr r3, [r7, #12]
  55443. 8017046: f06f 0202 mvn.w r2, #2
  55444. 801704a: 601a str r2, [r3, #0]
  55445. pxTopOfStack -= 8; /* R11, R10, R9, R8, R7, R6, R5 and R4. */
  55446. 801704c: 68fb ldr r3, [r7, #12]
  55447. 801704e: 3b20 subs r3, #32
  55448. 8017050: 60fb str r3, [r7, #12]
  55449. return pxTopOfStack;
  55450. 8017052: 68fb ldr r3, [r7, #12]
  55451. }
  55452. 8017054: 4618 mov r0, r3
  55453. 8017056: 3714 adds r7, #20
  55454. 8017058: 46bd mov sp, r7
  55455. 801705a: f85d 7b04 ldr.w r7, [sp], #4
  55456. 801705e: 4770 bx lr
  55457. 8017060: 08017065 .word 0x08017065
  55458. 08017064 <prvTaskExitError>:
  55459. /*-----------------------------------------------------------*/
  55460. static void prvTaskExitError( void )
  55461. {
  55462. 8017064: b480 push {r7}
  55463. 8017066: b085 sub sp, #20
  55464. 8017068: af00 add r7, sp, #0
  55465. volatile uint32_t ulDummy = 0;
  55466. 801706a: 2300 movs r3, #0
  55467. 801706c: 607b str r3, [r7, #4]
  55468. its caller as there is nothing to return to. If a task wants to exit it
  55469. should instead call vTaskDelete( NULL ).
  55470. Artificially force an assert() to be triggered if configASSERT() is
  55471. defined, then stop here so application writers can catch the error. */
  55472. configASSERT( uxCriticalNesting == ~0UL );
  55473. 801706e: 4b13 ldr r3, [pc, #76] @ (80170bc <prvTaskExitError+0x58>)
  55474. 8017070: 681b ldr r3, [r3, #0]
  55475. 8017072: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  55476. 8017076: d00b beq.n 8017090 <prvTaskExitError+0x2c>
  55477. __asm volatile
  55478. 8017078: f04f 0350 mov.w r3, #80 @ 0x50
  55479. 801707c: f383 8811 msr BASEPRI, r3
  55480. 8017080: f3bf 8f6f isb sy
  55481. 8017084: f3bf 8f4f dsb sy
  55482. 8017088: 60fb str r3, [r7, #12]
  55483. }
  55484. 801708a: bf00 nop
  55485. 801708c: bf00 nop
  55486. 801708e: e7fd b.n 801708c <prvTaskExitError+0x28>
  55487. __asm volatile
  55488. 8017090: f04f 0350 mov.w r3, #80 @ 0x50
  55489. 8017094: f383 8811 msr BASEPRI, r3
  55490. 8017098: f3bf 8f6f isb sy
  55491. 801709c: f3bf 8f4f dsb sy
  55492. 80170a0: 60bb str r3, [r7, #8]
  55493. }
  55494. 80170a2: bf00 nop
  55495. portDISABLE_INTERRUPTS();
  55496. while( ulDummy == 0 )
  55497. 80170a4: bf00 nop
  55498. 80170a6: 687b ldr r3, [r7, #4]
  55499. 80170a8: 2b00 cmp r3, #0
  55500. 80170aa: d0fc beq.n 80170a6 <prvTaskExitError+0x42>
  55501. about code appearing after this function is called - making ulDummy
  55502. volatile makes the compiler think the function could return and
  55503. therefore not output an 'unreachable code' warning for code that appears
  55504. after it. */
  55505. }
  55506. }
  55507. 80170ac: bf00 nop
  55508. 80170ae: bf00 nop
  55509. 80170b0: 3714 adds r7, #20
  55510. 80170b2: 46bd mov sp, r7
  55511. 80170b4: f85d 7b04 ldr.w r7, [sp], #4
  55512. 80170b8: 4770 bx lr
  55513. 80170ba: bf00 nop
  55514. 80170bc: 24000044 .word 0x24000044
  55515. 080170c0 <SVC_Handler>:
  55516. /*-----------------------------------------------------------*/
  55517. void vPortSVCHandler( void )
  55518. {
  55519. __asm volatile (
  55520. 80170c0: 4b07 ldr r3, [pc, #28] @ (80170e0 <pxCurrentTCBConst2>)
  55521. 80170c2: 6819 ldr r1, [r3, #0]
  55522. 80170c4: 6808 ldr r0, [r1, #0]
  55523. 80170c6: e8b0 4ff0 ldmia.w r0!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
  55524. 80170ca: f380 8809 msr PSP, r0
  55525. 80170ce: f3bf 8f6f isb sy
  55526. 80170d2: f04f 0000 mov.w r0, #0
  55527. 80170d6: f380 8811 msr BASEPRI, r0
  55528. 80170da: 4770 bx lr
  55529. 80170dc: f3af 8000 nop.w
  55530. 080170e0 <pxCurrentTCBConst2>:
  55531. 80170e0: 24002a14 .word 0x24002a14
  55532. " bx r14 \n"
  55533. " \n"
  55534. " .align 4 \n"
  55535. "pxCurrentTCBConst2: .word pxCurrentTCB \n"
  55536. );
  55537. }
  55538. 80170e4: bf00 nop
  55539. 80170e6: bf00 nop
  55540. 080170e8 <prvPortStartFirstTask>:
  55541. {
  55542. /* Start the first task. This also clears the bit that indicates the FPU is
  55543. in use in case the FPU was used before the scheduler was started - which
  55544. would otherwise result in the unnecessary leaving of space in the SVC stack
  55545. for lazy saving of FPU registers. */
  55546. __asm volatile(
  55547. 80170e8: 4808 ldr r0, [pc, #32] @ (801710c <prvPortStartFirstTask+0x24>)
  55548. 80170ea: 6800 ldr r0, [r0, #0]
  55549. 80170ec: 6800 ldr r0, [r0, #0]
  55550. 80170ee: f380 8808 msr MSP, r0
  55551. 80170f2: f04f 0000 mov.w r0, #0
  55552. 80170f6: f380 8814 msr CONTROL, r0
  55553. 80170fa: b662 cpsie i
  55554. 80170fc: b661 cpsie f
  55555. 80170fe: f3bf 8f4f dsb sy
  55556. 8017102: f3bf 8f6f isb sy
  55557. 8017106: df00 svc 0
  55558. 8017108: bf00 nop
  55559. " dsb \n"
  55560. " isb \n"
  55561. " svc 0 \n" /* System call to start first task. */
  55562. " nop \n"
  55563. );
  55564. }
  55565. 801710a: bf00 nop
  55566. 801710c: e000ed08 .word 0xe000ed08
  55567. 08017110 <xPortStartScheduler>:
  55568. /*
  55569. * See header file for description.
  55570. */
  55571. BaseType_t xPortStartScheduler( void )
  55572. {
  55573. 8017110: b580 push {r7, lr}
  55574. 8017112: b086 sub sp, #24
  55575. 8017114: af00 add r7, sp, #0
  55576. configASSERT( configMAX_SYSCALL_INTERRUPT_PRIORITY );
  55577. /* This port can be used on all revisions of the Cortex-M7 core other than
  55578. the r0p1 parts. r0p1 parts should use the port from the
  55579. /source/portable/GCC/ARM_CM7/r0p1 directory. */
  55580. configASSERT( portCPUID != portCORTEX_M7_r0p1_ID );
  55581. 8017116: 4b47 ldr r3, [pc, #284] @ (8017234 <xPortStartScheduler+0x124>)
  55582. 8017118: 681b ldr r3, [r3, #0]
  55583. 801711a: 4a47 ldr r2, [pc, #284] @ (8017238 <xPortStartScheduler+0x128>)
  55584. 801711c: 4293 cmp r3, r2
  55585. 801711e: d10b bne.n 8017138 <xPortStartScheduler+0x28>
  55586. __asm volatile
  55587. 8017120: f04f 0350 mov.w r3, #80 @ 0x50
  55588. 8017124: f383 8811 msr BASEPRI, r3
  55589. 8017128: f3bf 8f6f isb sy
  55590. 801712c: f3bf 8f4f dsb sy
  55591. 8017130: 613b str r3, [r7, #16]
  55592. }
  55593. 8017132: bf00 nop
  55594. 8017134: bf00 nop
  55595. 8017136: e7fd b.n 8017134 <xPortStartScheduler+0x24>
  55596. configASSERT( portCPUID != portCORTEX_M7_r0p0_ID );
  55597. 8017138: 4b3e ldr r3, [pc, #248] @ (8017234 <xPortStartScheduler+0x124>)
  55598. 801713a: 681b ldr r3, [r3, #0]
  55599. 801713c: 4a3f ldr r2, [pc, #252] @ (801723c <xPortStartScheduler+0x12c>)
  55600. 801713e: 4293 cmp r3, r2
  55601. 8017140: d10b bne.n 801715a <xPortStartScheduler+0x4a>
  55602. __asm volatile
  55603. 8017142: f04f 0350 mov.w r3, #80 @ 0x50
  55604. 8017146: f383 8811 msr BASEPRI, r3
  55605. 801714a: f3bf 8f6f isb sy
  55606. 801714e: f3bf 8f4f dsb sy
  55607. 8017152: 60fb str r3, [r7, #12]
  55608. }
  55609. 8017154: bf00 nop
  55610. 8017156: bf00 nop
  55611. 8017158: e7fd b.n 8017156 <xPortStartScheduler+0x46>
  55612. #if( configASSERT_DEFINED == 1 )
  55613. {
  55614. volatile uint32_t ulOriginalPriority;
  55615. volatile uint8_t * const pucFirstUserPriorityRegister = ( volatile uint8_t * const ) ( portNVIC_IP_REGISTERS_OFFSET_16 + portFIRST_USER_INTERRUPT_NUMBER );
  55616. 801715a: 4b39 ldr r3, [pc, #228] @ (8017240 <xPortStartScheduler+0x130>)
  55617. 801715c: 617b str r3, [r7, #20]
  55618. functions can be called. ISR safe functions are those that end in
  55619. "FromISR". FreeRTOS maintains separate thread and ISR API functions to
  55620. ensure interrupt entry is as fast and simple as possible.
  55621. Save the interrupt priority value that is about to be clobbered. */
  55622. ulOriginalPriority = *pucFirstUserPriorityRegister;
  55623. 801715e: 697b ldr r3, [r7, #20]
  55624. 8017160: 781b ldrb r3, [r3, #0]
  55625. 8017162: b2db uxtb r3, r3
  55626. 8017164: 607b str r3, [r7, #4]
  55627. /* Determine the number of priority bits available. First write to all
  55628. possible bits. */
  55629. *pucFirstUserPriorityRegister = portMAX_8_BIT_VALUE;
  55630. 8017166: 697b ldr r3, [r7, #20]
  55631. 8017168: 22ff movs r2, #255 @ 0xff
  55632. 801716a: 701a strb r2, [r3, #0]
  55633. /* Read the value back to see how many bits stuck. */
  55634. ucMaxPriorityValue = *pucFirstUserPriorityRegister;
  55635. 801716c: 697b ldr r3, [r7, #20]
  55636. 801716e: 781b ldrb r3, [r3, #0]
  55637. 8017170: b2db uxtb r3, r3
  55638. 8017172: 70fb strb r3, [r7, #3]
  55639. /* Use the same mask on the maximum system call priority. */
  55640. ucMaxSysCallPriority = configMAX_SYSCALL_INTERRUPT_PRIORITY & ucMaxPriorityValue;
  55641. 8017174: 78fb ldrb r3, [r7, #3]
  55642. 8017176: b2db uxtb r3, r3
  55643. 8017178: f003 0350 and.w r3, r3, #80 @ 0x50
  55644. 801717c: b2da uxtb r2, r3
  55645. 801717e: 4b31 ldr r3, [pc, #196] @ (8017244 <xPortStartScheduler+0x134>)
  55646. 8017180: 701a strb r2, [r3, #0]
  55647. /* Calculate the maximum acceptable priority group value for the number
  55648. of bits read back. */
  55649. ulMaxPRIGROUPValue = portMAX_PRIGROUP_BITS;
  55650. 8017182: 4b31 ldr r3, [pc, #196] @ (8017248 <xPortStartScheduler+0x138>)
  55651. 8017184: 2207 movs r2, #7
  55652. 8017186: 601a str r2, [r3, #0]
  55653. while( ( ucMaxPriorityValue & portTOP_BIT_OF_BYTE ) == portTOP_BIT_OF_BYTE )
  55654. 8017188: e009 b.n 801719e <xPortStartScheduler+0x8e>
  55655. {
  55656. ulMaxPRIGROUPValue--;
  55657. 801718a: 4b2f ldr r3, [pc, #188] @ (8017248 <xPortStartScheduler+0x138>)
  55658. 801718c: 681b ldr r3, [r3, #0]
  55659. 801718e: 3b01 subs r3, #1
  55660. 8017190: 4a2d ldr r2, [pc, #180] @ (8017248 <xPortStartScheduler+0x138>)
  55661. 8017192: 6013 str r3, [r2, #0]
  55662. ucMaxPriorityValue <<= ( uint8_t ) 0x01;
  55663. 8017194: 78fb ldrb r3, [r7, #3]
  55664. 8017196: b2db uxtb r3, r3
  55665. 8017198: 005b lsls r3, r3, #1
  55666. 801719a: b2db uxtb r3, r3
  55667. 801719c: 70fb strb r3, [r7, #3]
  55668. while( ( ucMaxPriorityValue & portTOP_BIT_OF_BYTE ) == portTOP_BIT_OF_BYTE )
  55669. 801719e: 78fb ldrb r3, [r7, #3]
  55670. 80171a0: b2db uxtb r3, r3
  55671. 80171a2: f003 0380 and.w r3, r3, #128 @ 0x80
  55672. 80171a6: 2b80 cmp r3, #128 @ 0x80
  55673. 80171a8: d0ef beq.n 801718a <xPortStartScheduler+0x7a>
  55674. #ifdef configPRIO_BITS
  55675. {
  55676. /* Check the FreeRTOS configuration that defines the number of
  55677. priority bits matches the number of priority bits actually queried
  55678. from the hardware. */
  55679. configASSERT( ( portMAX_PRIGROUP_BITS - ulMaxPRIGROUPValue ) == configPRIO_BITS );
  55680. 80171aa: 4b27 ldr r3, [pc, #156] @ (8017248 <xPortStartScheduler+0x138>)
  55681. 80171ac: 681b ldr r3, [r3, #0]
  55682. 80171ae: f1c3 0307 rsb r3, r3, #7
  55683. 80171b2: 2b04 cmp r3, #4
  55684. 80171b4: d00b beq.n 80171ce <xPortStartScheduler+0xbe>
  55685. __asm volatile
  55686. 80171b6: f04f 0350 mov.w r3, #80 @ 0x50
  55687. 80171ba: f383 8811 msr BASEPRI, r3
  55688. 80171be: f3bf 8f6f isb sy
  55689. 80171c2: f3bf 8f4f dsb sy
  55690. 80171c6: 60bb str r3, [r7, #8]
  55691. }
  55692. 80171c8: bf00 nop
  55693. 80171ca: bf00 nop
  55694. 80171cc: e7fd b.n 80171ca <xPortStartScheduler+0xba>
  55695. }
  55696. #endif
  55697. /* Shift the priority group value back to its position within the AIRCR
  55698. register. */
  55699. ulMaxPRIGROUPValue <<= portPRIGROUP_SHIFT;
  55700. 80171ce: 4b1e ldr r3, [pc, #120] @ (8017248 <xPortStartScheduler+0x138>)
  55701. 80171d0: 681b ldr r3, [r3, #0]
  55702. 80171d2: 021b lsls r3, r3, #8
  55703. 80171d4: 4a1c ldr r2, [pc, #112] @ (8017248 <xPortStartScheduler+0x138>)
  55704. 80171d6: 6013 str r3, [r2, #0]
  55705. ulMaxPRIGROUPValue &= portPRIORITY_GROUP_MASK;
  55706. 80171d8: 4b1b ldr r3, [pc, #108] @ (8017248 <xPortStartScheduler+0x138>)
  55707. 80171da: 681b ldr r3, [r3, #0]
  55708. 80171dc: f403 63e0 and.w r3, r3, #1792 @ 0x700
  55709. 80171e0: 4a19 ldr r2, [pc, #100] @ (8017248 <xPortStartScheduler+0x138>)
  55710. 80171e2: 6013 str r3, [r2, #0]
  55711. /* Restore the clobbered interrupt priority register to its original
  55712. value. */
  55713. *pucFirstUserPriorityRegister = ulOriginalPriority;
  55714. 80171e4: 687b ldr r3, [r7, #4]
  55715. 80171e6: b2da uxtb r2, r3
  55716. 80171e8: 697b ldr r3, [r7, #20]
  55717. 80171ea: 701a strb r2, [r3, #0]
  55718. }
  55719. #endif /* conifgASSERT_DEFINED */
  55720. /* Make PendSV and SysTick the lowest priority interrupts. */
  55721. portNVIC_SYSPRI2_REG |= portNVIC_PENDSV_PRI;
  55722. 80171ec: 4b17 ldr r3, [pc, #92] @ (801724c <xPortStartScheduler+0x13c>)
  55723. 80171ee: 681b ldr r3, [r3, #0]
  55724. 80171f0: 4a16 ldr r2, [pc, #88] @ (801724c <xPortStartScheduler+0x13c>)
  55725. 80171f2: f443 0370 orr.w r3, r3, #15728640 @ 0xf00000
  55726. 80171f6: 6013 str r3, [r2, #0]
  55727. portNVIC_SYSPRI2_REG |= portNVIC_SYSTICK_PRI;
  55728. 80171f8: 4b14 ldr r3, [pc, #80] @ (801724c <xPortStartScheduler+0x13c>)
  55729. 80171fa: 681b ldr r3, [r3, #0]
  55730. 80171fc: 4a13 ldr r2, [pc, #76] @ (801724c <xPortStartScheduler+0x13c>)
  55731. 80171fe: f043 4370 orr.w r3, r3, #4026531840 @ 0xf0000000
  55732. 8017202: 6013 str r3, [r2, #0]
  55733. /* Start the timer that generates the tick ISR. Interrupts are disabled
  55734. here already. */
  55735. vPortSetupTimerInterrupt();
  55736. 8017204: f000 f8da bl 80173bc <vPortSetupTimerInterrupt>
  55737. /* Initialise the critical nesting count ready for the first task. */
  55738. uxCriticalNesting = 0;
  55739. 8017208: 4b11 ldr r3, [pc, #68] @ (8017250 <xPortStartScheduler+0x140>)
  55740. 801720a: 2200 movs r2, #0
  55741. 801720c: 601a str r2, [r3, #0]
  55742. /* Ensure the VFP is enabled - it should be anyway. */
  55743. vPortEnableVFP();
  55744. 801720e: f000 f8f9 bl 8017404 <vPortEnableVFP>
  55745. /* Lazy save always. */
  55746. *( portFPCCR ) |= portASPEN_AND_LSPEN_BITS;
  55747. 8017212: 4b10 ldr r3, [pc, #64] @ (8017254 <xPortStartScheduler+0x144>)
  55748. 8017214: 681b ldr r3, [r3, #0]
  55749. 8017216: 4a0f ldr r2, [pc, #60] @ (8017254 <xPortStartScheduler+0x144>)
  55750. 8017218: f043 4340 orr.w r3, r3, #3221225472 @ 0xc0000000
  55751. 801721c: 6013 str r3, [r2, #0]
  55752. /* Start the first task. */
  55753. prvPortStartFirstTask();
  55754. 801721e: f7ff ff63 bl 80170e8 <prvPortStartFirstTask>
  55755. exit error function to prevent compiler warnings about a static function
  55756. not being called in the case that the application writer overrides this
  55757. functionality by defining configTASK_RETURN_ADDRESS. Call
  55758. vTaskSwitchContext() so link time optimisation does not remove the
  55759. symbol. */
  55760. vTaskSwitchContext();
  55761. 8017222: f7fe fbd3 bl 80159cc <vTaskSwitchContext>
  55762. prvTaskExitError();
  55763. 8017226: f7ff ff1d bl 8017064 <prvTaskExitError>
  55764. /* Should not get here! */
  55765. return 0;
  55766. 801722a: 2300 movs r3, #0
  55767. }
  55768. 801722c: 4618 mov r0, r3
  55769. 801722e: 3718 adds r7, #24
  55770. 8017230: 46bd mov sp, r7
  55771. 8017232: bd80 pop {r7, pc}
  55772. 8017234: e000ed00 .word 0xe000ed00
  55773. 8017238: 410fc271 .word 0x410fc271
  55774. 801723c: 410fc270 .word 0x410fc270
  55775. 8017240: e000e400 .word 0xe000e400
  55776. 8017244: 24003040 .word 0x24003040
  55777. 8017248: 24003044 .word 0x24003044
  55778. 801724c: e000ed20 .word 0xe000ed20
  55779. 8017250: 24000044 .word 0x24000044
  55780. 8017254: e000ef34 .word 0xe000ef34
  55781. 08017258 <vPortEnterCritical>:
  55782. configASSERT( uxCriticalNesting == 1000UL );
  55783. }
  55784. /*-----------------------------------------------------------*/
  55785. void vPortEnterCritical( void )
  55786. {
  55787. 8017258: b480 push {r7}
  55788. 801725a: b083 sub sp, #12
  55789. 801725c: af00 add r7, sp, #0
  55790. __asm volatile
  55791. 801725e: f04f 0350 mov.w r3, #80 @ 0x50
  55792. 8017262: f383 8811 msr BASEPRI, r3
  55793. 8017266: f3bf 8f6f isb sy
  55794. 801726a: f3bf 8f4f dsb sy
  55795. 801726e: 607b str r3, [r7, #4]
  55796. }
  55797. 8017270: bf00 nop
  55798. portDISABLE_INTERRUPTS();
  55799. uxCriticalNesting++;
  55800. 8017272: 4b10 ldr r3, [pc, #64] @ (80172b4 <vPortEnterCritical+0x5c>)
  55801. 8017274: 681b ldr r3, [r3, #0]
  55802. 8017276: 3301 adds r3, #1
  55803. 8017278: 4a0e ldr r2, [pc, #56] @ (80172b4 <vPortEnterCritical+0x5c>)
  55804. 801727a: 6013 str r3, [r2, #0]
  55805. /* This is not the interrupt safe version of the enter critical function so
  55806. assert() if it is being called from an interrupt context. Only API
  55807. functions that end in "FromISR" can be used in an interrupt. Only assert if
  55808. the critical nesting count is 1 to protect against recursive calls if the
  55809. assert function also uses a critical section. */
  55810. if( uxCriticalNesting == 1 )
  55811. 801727c: 4b0d ldr r3, [pc, #52] @ (80172b4 <vPortEnterCritical+0x5c>)
  55812. 801727e: 681b ldr r3, [r3, #0]
  55813. 8017280: 2b01 cmp r3, #1
  55814. 8017282: d110 bne.n 80172a6 <vPortEnterCritical+0x4e>
  55815. {
  55816. configASSERT( ( portNVIC_INT_CTRL_REG & portVECTACTIVE_MASK ) == 0 );
  55817. 8017284: 4b0c ldr r3, [pc, #48] @ (80172b8 <vPortEnterCritical+0x60>)
  55818. 8017286: 681b ldr r3, [r3, #0]
  55819. 8017288: b2db uxtb r3, r3
  55820. 801728a: 2b00 cmp r3, #0
  55821. 801728c: d00b beq.n 80172a6 <vPortEnterCritical+0x4e>
  55822. __asm volatile
  55823. 801728e: f04f 0350 mov.w r3, #80 @ 0x50
  55824. 8017292: f383 8811 msr BASEPRI, r3
  55825. 8017296: f3bf 8f6f isb sy
  55826. 801729a: f3bf 8f4f dsb sy
  55827. 801729e: 603b str r3, [r7, #0]
  55828. }
  55829. 80172a0: bf00 nop
  55830. 80172a2: bf00 nop
  55831. 80172a4: e7fd b.n 80172a2 <vPortEnterCritical+0x4a>
  55832. }
  55833. }
  55834. 80172a6: bf00 nop
  55835. 80172a8: 370c adds r7, #12
  55836. 80172aa: 46bd mov sp, r7
  55837. 80172ac: f85d 7b04 ldr.w r7, [sp], #4
  55838. 80172b0: 4770 bx lr
  55839. 80172b2: bf00 nop
  55840. 80172b4: 24000044 .word 0x24000044
  55841. 80172b8: e000ed04 .word 0xe000ed04
  55842. 080172bc <vPortExitCritical>:
  55843. /*-----------------------------------------------------------*/
  55844. void vPortExitCritical( void )
  55845. {
  55846. 80172bc: b480 push {r7}
  55847. 80172be: b083 sub sp, #12
  55848. 80172c0: af00 add r7, sp, #0
  55849. configASSERT( uxCriticalNesting );
  55850. 80172c2: 4b12 ldr r3, [pc, #72] @ (801730c <vPortExitCritical+0x50>)
  55851. 80172c4: 681b ldr r3, [r3, #0]
  55852. 80172c6: 2b00 cmp r3, #0
  55853. 80172c8: d10b bne.n 80172e2 <vPortExitCritical+0x26>
  55854. __asm volatile
  55855. 80172ca: f04f 0350 mov.w r3, #80 @ 0x50
  55856. 80172ce: f383 8811 msr BASEPRI, r3
  55857. 80172d2: f3bf 8f6f isb sy
  55858. 80172d6: f3bf 8f4f dsb sy
  55859. 80172da: 607b str r3, [r7, #4]
  55860. }
  55861. 80172dc: bf00 nop
  55862. 80172de: bf00 nop
  55863. 80172e0: e7fd b.n 80172de <vPortExitCritical+0x22>
  55864. uxCriticalNesting--;
  55865. 80172e2: 4b0a ldr r3, [pc, #40] @ (801730c <vPortExitCritical+0x50>)
  55866. 80172e4: 681b ldr r3, [r3, #0]
  55867. 80172e6: 3b01 subs r3, #1
  55868. 80172e8: 4a08 ldr r2, [pc, #32] @ (801730c <vPortExitCritical+0x50>)
  55869. 80172ea: 6013 str r3, [r2, #0]
  55870. if( uxCriticalNesting == 0 )
  55871. 80172ec: 4b07 ldr r3, [pc, #28] @ (801730c <vPortExitCritical+0x50>)
  55872. 80172ee: 681b ldr r3, [r3, #0]
  55873. 80172f0: 2b00 cmp r3, #0
  55874. 80172f2: d105 bne.n 8017300 <vPortExitCritical+0x44>
  55875. 80172f4: 2300 movs r3, #0
  55876. 80172f6: 603b str r3, [r7, #0]
  55877. __asm volatile
  55878. 80172f8: 683b ldr r3, [r7, #0]
  55879. 80172fa: f383 8811 msr BASEPRI, r3
  55880. }
  55881. 80172fe: bf00 nop
  55882. {
  55883. portENABLE_INTERRUPTS();
  55884. }
  55885. }
  55886. 8017300: bf00 nop
  55887. 8017302: 370c adds r7, #12
  55888. 8017304: 46bd mov sp, r7
  55889. 8017306: f85d 7b04 ldr.w r7, [sp], #4
  55890. 801730a: 4770 bx lr
  55891. 801730c: 24000044 .word 0x24000044
  55892. 08017310 <PendSV_Handler>:
  55893. void xPortPendSVHandler( void )
  55894. {
  55895. /* This is a naked function. */
  55896. __asm volatile
  55897. 8017310: f3ef 8009 mrs r0, PSP
  55898. 8017314: f3bf 8f6f isb sy
  55899. 8017318: 4b15 ldr r3, [pc, #84] @ (8017370 <pxCurrentTCBConst>)
  55900. 801731a: 681a ldr r2, [r3, #0]
  55901. 801731c: f01e 0f10 tst.w lr, #16
  55902. 8017320: bf08 it eq
  55903. 8017322: ed20 8a10 vstmdbeq r0!, {s16-s31}
  55904. 8017326: e920 4ff0 stmdb r0!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
  55905. 801732a: 6010 str r0, [r2, #0]
  55906. 801732c: e92d 0009 stmdb sp!, {r0, r3}
  55907. 8017330: f04f 0050 mov.w r0, #80 @ 0x50
  55908. 8017334: f380 8811 msr BASEPRI, r0
  55909. 8017338: f3bf 8f4f dsb sy
  55910. 801733c: f3bf 8f6f isb sy
  55911. 8017340: f7fe fb44 bl 80159cc <vTaskSwitchContext>
  55912. 8017344: f04f 0000 mov.w r0, #0
  55913. 8017348: f380 8811 msr BASEPRI, r0
  55914. 801734c: bc09 pop {r0, r3}
  55915. 801734e: 6819 ldr r1, [r3, #0]
  55916. 8017350: 6808 ldr r0, [r1, #0]
  55917. 8017352: e8b0 4ff0 ldmia.w r0!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
  55918. 8017356: f01e 0f10 tst.w lr, #16
  55919. 801735a: bf08 it eq
  55920. 801735c: ecb0 8a10 vldmiaeq r0!, {s16-s31}
  55921. 8017360: f380 8809 msr PSP, r0
  55922. 8017364: f3bf 8f6f isb sy
  55923. 8017368: 4770 bx lr
  55924. 801736a: bf00 nop
  55925. 801736c: f3af 8000 nop.w
  55926. 08017370 <pxCurrentTCBConst>:
  55927. 8017370: 24002a14 .word 0x24002a14
  55928. " \n"
  55929. " .align 4 \n"
  55930. "pxCurrentTCBConst: .word pxCurrentTCB \n"
  55931. ::"i"(configMAX_SYSCALL_INTERRUPT_PRIORITY)
  55932. );
  55933. }
  55934. 8017374: bf00 nop
  55935. 8017376: bf00 nop
  55936. 08017378 <xPortSysTickHandler>:
  55937. /*-----------------------------------------------------------*/
  55938. void xPortSysTickHandler( void )
  55939. {
  55940. 8017378: b580 push {r7, lr}
  55941. 801737a: b082 sub sp, #8
  55942. 801737c: af00 add r7, sp, #0
  55943. __asm volatile
  55944. 801737e: f04f 0350 mov.w r3, #80 @ 0x50
  55945. 8017382: f383 8811 msr BASEPRI, r3
  55946. 8017386: f3bf 8f6f isb sy
  55947. 801738a: f3bf 8f4f dsb sy
  55948. 801738e: 607b str r3, [r7, #4]
  55949. }
  55950. 8017390: bf00 nop
  55951. save and then restore the interrupt mask value as its value is already
  55952. known. */
  55953. portDISABLE_INTERRUPTS();
  55954. {
  55955. /* Increment the RTOS tick. */
  55956. if( xTaskIncrementTick() != pdFALSE )
  55957. 8017392: f7fe fa61 bl 8015858 <xTaskIncrementTick>
  55958. 8017396: 4603 mov r3, r0
  55959. 8017398: 2b00 cmp r3, #0
  55960. 801739a: d003 beq.n 80173a4 <xPortSysTickHandler+0x2c>
  55961. {
  55962. /* A context switch is required. Context switching is performed in
  55963. the PendSV interrupt. Pend the PendSV interrupt. */
  55964. portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT;
  55965. 801739c: 4b06 ldr r3, [pc, #24] @ (80173b8 <xPortSysTickHandler+0x40>)
  55966. 801739e: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  55967. 80173a2: 601a str r2, [r3, #0]
  55968. 80173a4: 2300 movs r3, #0
  55969. 80173a6: 603b str r3, [r7, #0]
  55970. __asm volatile
  55971. 80173a8: 683b ldr r3, [r7, #0]
  55972. 80173aa: f383 8811 msr BASEPRI, r3
  55973. }
  55974. 80173ae: bf00 nop
  55975. }
  55976. }
  55977. portENABLE_INTERRUPTS();
  55978. }
  55979. 80173b0: bf00 nop
  55980. 80173b2: 3708 adds r7, #8
  55981. 80173b4: 46bd mov sp, r7
  55982. 80173b6: bd80 pop {r7, pc}
  55983. 80173b8: e000ed04 .word 0xe000ed04
  55984. 080173bc <vPortSetupTimerInterrupt>:
  55985. /*
  55986. * Setup the systick timer to generate the tick interrupts at the required
  55987. * frequency.
  55988. */
  55989. __attribute__(( weak )) void vPortSetupTimerInterrupt( void )
  55990. {
  55991. 80173bc: b480 push {r7}
  55992. 80173be: af00 add r7, sp, #0
  55993. ulStoppedTimerCompensation = portMISSED_COUNTS_FACTOR / ( configCPU_CLOCK_HZ / configSYSTICK_CLOCK_HZ );
  55994. }
  55995. #endif /* configUSE_TICKLESS_IDLE */
  55996. /* Stop and clear the SysTick. */
  55997. portNVIC_SYSTICK_CTRL_REG = 0UL;
  55998. 80173c0: 4b0b ldr r3, [pc, #44] @ (80173f0 <vPortSetupTimerInterrupt+0x34>)
  55999. 80173c2: 2200 movs r2, #0
  56000. 80173c4: 601a str r2, [r3, #0]
  56001. portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL;
  56002. 80173c6: 4b0b ldr r3, [pc, #44] @ (80173f4 <vPortSetupTimerInterrupt+0x38>)
  56003. 80173c8: 2200 movs r2, #0
  56004. 80173ca: 601a str r2, [r3, #0]
  56005. /* Configure SysTick to interrupt at the requested rate. */
  56006. portNVIC_SYSTICK_LOAD_REG = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL;
  56007. 80173cc: 4b0a ldr r3, [pc, #40] @ (80173f8 <vPortSetupTimerInterrupt+0x3c>)
  56008. 80173ce: 681b ldr r3, [r3, #0]
  56009. 80173d0: 4a0a ldr r2, [pc, #40] @ (80173fc <vPortSetupTimerInterrupt+0x40>)
  56010. 80173d2: fba2 2303 umull r2, r3, r2, r3
  56011. 80173d6: 099b lsrs r3, r3, #6
  56012. 80173d8: 4a09 ldr r2, [pc, #36] @ (8017400 <vPortSetupTimerInterrupt+0x44>)
  56013. 80173da: 3b01 subs r3, #1
  56014. 80173dc: 6013 str r3, [r2, #0]
  56015. portNVIC_SYSTICK_CTRL_REG = ( portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT );
  56016. 80173de: 4b04 ldr r3, [pc, #16] @ (80173f0 <vPortSetupTimerInterrupt+0x34>)
  56017. 80173e0: 2207 movs r2, #7
  56018. 80173e2: 601a str r2, [r3, #0]
  56019. }
  56020. 80173e4: bf00 nop
  56021. 80173e6: 46bd mov sp, r7
  56022. 80173e8: f85d 7b04 ldr.w r7, [sp], #4
  56023. 80173ec: 4770 bx lr
  56024. 80173ee: bf00 nop
  56025. 80173f0: e000e010 .word 0xe000e010
  56026. 80173f4: e000e018 .word 0xe000e018
  56027. 80173f8: 24000034 .word 0x24000034
  56028. 80173fc: 10624dd3 .word 0x10624dd3
  56029. 8017400: e000e014 .word 0xe000e014
  56030. 08017404 <vPortEnableVFP>:
  56031. /*-----------------------------------------------------------*/
  56032. /* This is a naked function. */
  56033. static void vPortEnableVFP( void )
  56034. {
  56035. __asm volatile
  56036. 8017404: f8df 000c ldr.w r0, [pc, #12] @ 8017414 <vPortEnableVFP+0x10>
  56037. 8017408: 6801 ldr r1, [r0, #0]
  56038. 801740a: f441 0170 orr.w r1, r1, #15728640 @ 0xf00000
  56039. 801740e: 6001 str r1, [r0, #0]
  56040. 8017410: 4770 bx lr
  56041. " \n"
  56042. " orr r1, r1, #( 0xf << 20 ) \n" /* Enable CP10 and CP11 coprocessors, then save back. */
  56043. " str r1, [r0] \n"
  56044. " bx r14 "
  56045. );
  56046. }
  56047. 8017412: bf00 nop
  56048. 8017414: e000ed88 .word 0xe000ed88
  56049. 08017418 <vPortValidateInterruptPriority>:
  56050. /*-----------------------------------------------------------*/
  56051. #if( configASSERT_DEFINED == 1 )
  56052. void vPortValidateInterruptPriority( void )
  56053. {
  56054. 8017418: b480 push {r7}
  56055. 801741a: b085 sub sp, #20
  56056. 801741c: af00 add r7, sp, #0
  56057. uint32_t ulCurrentInterrupt;
  56058. uint8_t ucCurrentPriority;
  56059. /* Obtain the number of the currently executing interrupt. */
  56060. __asm volatile( "mrs %0, ipsr" : "=r"( ulCurrentInterrupt ) :: "memory" );
  56061. 801741e: f3ef 8305 mrs r3, IPSR
  56062. 8017422: 60fb str r3, [r7, #12]
  56063. /* Is the interrupt number a user defined interrupt? */
  56064. if( ulCurrentInterrupt >= portFIRST_USER_INTERRUPT_NUMBER )
  56065. 8017424: 68fb ldr r3, [r7, #12]
  56066. 8017426: 2b0f cmp r3, #15
  56067. 8017428: d915 bls.n 8017456 <vPortValidateInterruptPriority+0x3e>
  56068. {
  56069. /* Look up the interrupt's priority. */
  56070. ucCurrentPriority = pcInterruptPriorityRegisters[ ulCurrentInterrupt ];
  56071. 801742a: 4a18 ldr r2, [pc, #96] @ (801748c <vPortValidateInterruptPriority+0x74>)
  56072. 801742c: 68fb ldr r3, [r7, #12]
  56073. 801742e: 4413 add r3, r2
  56074. 8017430: 781b ldrb r3, [r3, #0]
  56075. 8017432: 72fb strb r3, [r7, #11]
  56076. interrupt entry is as fast and simple as possible.
  56077. The following links provide detailed information:
  56078. http://www.freertos.org/RTOS-Cortex-M3-M4.html
  56079. http://www.freertos.org/FAQHelp.html */
  56080. configASSERT( ucCurrentPriority >= ucMaxSysCallPriority );
  56081. 8017434: 4b16 ldr r3, [pc, #88] @ (8017490 <vPortValidateInterruptPriority+0x78>)
  56082. 8017436: 781b ldrb r3, [r3, #0]
  56083. 8017438: 7afa ldrb r2, [r7, #11]
  56084. 801743a: 429a cmp r2, r3
  56085. 801743c: d20b bcs.n 8017456 <vPortValidateInterruptPriority+0x3e>
  56086. __asm volatile
  56087. 801743e: f04f 0350 mov.w r3, #80 @ 0x50
  56088. 8017442: f383 8811 msr BASEPRI, r3
  56089. 8017446: f3bf 8f6f isb sy
  56090. 801744a: f3bf 8f4f dsb sy
  56091. 801744e: 607b str r3, [r7, #4]
  56092. }
  56093. 8017450: bf00 nop
  56094. 8017452: bf00 nop
  56095. 8017454: e7fd b.n 8017452 <vPortValidateInterruptPriority+0x3a>
  56096. configuration then the correct setting can be achieved on all Cortex-M
  56097. devices by calling NVIC_SetPriorityGrouping( 0 ); before starting the
  56098. scheduler. Note however that some vendor specific peripheral libraries
  56099. assume a non-zero priority group setting, in which cases using a value
  56100. of zero will result in unpredictable behaviour. */
  56101. configASSERT( ( portAIRCR_REG & portPRIORITY_GROUP_MASK ) <= ulMaxPRIGROUPValue );
  56102. 8017456: 4b0f ldr r3, [pc, #60] @ (8017494 <vPortValidateInterruptPriority+0x7c>)
  56103. 8017458: 681b ldr r3, [r3, #0]
  56104. 801745a: f403 62e0 and.w r2, r3, #1792 @ 0x700
  56105. 801745e: 4b0e ldr r3, [pc, #56] @ (8017498 <vPortValidateInterruptPriority+0x80>)
  56106. 8017460: 681b ldr r3, [r3, #0]
  56107. 8017462: 429a cmp r2, r3
  56108. 8017464: d90b bls.n 801747e <vPortValidateInterruptPriority+0x66>
  56109. __asm volatile
  56110. 8017466: f04f 0350 mov.w r3, #80 @ 0x50
  56111. 801746a: f383 8811 msr BASEPRI, r3
  56112. 801746e: f3bf 8f6f isb sy
  56113. 8017472: f3bf 8f4f dsb sy
  56114. 8017476: 603b str r3, [r7, #0]
  56115. }
  56116. 8017478: bf00 nop
  56117. 801747a: bf00 nop
  56118. 801747c: e7fd b.n 801747a <vPortValidateInterruptPriority+0x62>
  56119. }
  56120. 801747e: bf00 nop
  56121. 8017480: 3714 adds r7, #20
  56122. 8017482: 46bd mov sp, r7
  56123. 8017484: f85d 7b04 ldr.w r7, [sp], #4
  56124. 8017488: 4770 bx lr
  56125. 801748a: bf00 nop
  56126. 801748c: e000e3f0 .word 0xe000e3f0
  56127. 8017490: 24003040 .word 0x24003040
  56128. 8017494: e000ed0c .word 0xe000ed0c
  56129. 8017498: 24003044 .word 0x24003044
  56130. 0801749c <pvPortMalloc>:
  56131. static size_t xBlockAllocatedBit = 0;
  56132. /*-----------------------------------------------------------*/
  56133. void *pvPortMalloc( size_t xWantedSize )
  56134. {
  56135. 801749c: b580 push {r7, lr}
  56136. 801749e: b08a sub sp, #40 @ 0x28
  56137. 80174a0: af00 add r7, sp, #0
  56138. 80174a2: 6078 str r0, [r7, #4]
  56139. BlockLink_t *pxBlock, *pxPreviousBlock, *pxNewBlockLink;
  56140. void *pvReturn = NULL;
  56141. 80174a4: 2300 movs r3, #0
  56142. 80174a6: 61fb str r3, [r7, #28]
  56143. vTaskSuspendAll();
  56144. 80174a8: f7fe f91a bl 80156e0 <vTaskSuspendAll>
  56145. {
  56146. /* If this is the first call to malloc then the heap will require
  56147. initialisation to setup the list of free blocks. */
  56148. if( pxEnd == NULL )
  56149. 80174ac: 4b5c ldr r3, [pc, #368] @ (8017620 <pvPortMalloc+0x184>)
  56150. 80174ae: 681b ldr r3, [r3, #0]
  56151. 80174b0: 2b00 cmp r3, #0
  56152. 80174b2: d101 bne.n 80174b8 <pvPortMalloc+0x1c>
  56153. {
  56154. prvHeapInit();
  56155. 80174b4: f000 f924 bl 8017700 <prvHeapInit>
  56156. /* Check the requested block size is not so large that the top bit is
  56157. set. The top bit of the block size member of the BlockLink_t structure
  56158. is used to determine who owns the block - the application or the
  56159. kernel, so it must be free. */
  56160. if( ( xWantedSize & xBlockAllocatedBit ) == 0 )
  56161. 80174b8: 4b5a ldr r3, [pc, #360] @ (8017624 <pvPortMalloc+0x188>)
  56162. 80174ba: 681a ldr r2, [r3, #0]
  56163. 80174bc: 687b ldr r3, [r7, #4]
  56164. 80174be: 4013 ands r3, r2
  56165. 80174c0: 2b00 cmp r3, #0
  56166. 80174c2: f040 8095 bne.w 80175f0 <pvPortMalloc+0x154>
  56167. {
  56168. /* The wanted size is increased so it can contain a BlockLink_t
  56169. structure in addition to the requested amount of bytes. */
  56170. if( xWantedSize > 0 )
  56171. 80174c6: 687b ldr r3, [r7, #4]
  56172. 80174c8: 2b00 cmp r3, #0
  56173. 80174ca: d01e beq.n 801750a <pvPortMalloc+0x6e>
  56174. {
  56175. xWantedSize += xHeapStructSize;
  56176. 80174cc: 2208 movs r2, #8
  56177. 80174ce: 687b ldr r3, [r7, #4]
  56178. 80174d0: 4413 add r3, r2
  56179. 80174d2: 607b str r3, [r7, #4]
  56180. /* Ensure that blocks are always aligned to the required number
  56181. of bytes. */
  56182. if( ( xWantedSize & portBYTE_ALIGNMENT_MASK ) != 0x00 )
  56183. 80174d4: 687b ldr r3, [r7, #4]
  56184. 80174d6: f003 0307 and.w r3, r3, #7
  56185. 80174da: 2b00 cmp r3, #0
  56186. 80174dc: d015 beq.n 801750a <pvPortMalloc+0x6e>
  56187. {
  56188. /* Byte alignment required. */
  56189. xWantedSize += ( portBYTE_ALIGNMENT - ( xWantedSize & portBYTE_ALIGNMENT_MASK ) );
  56190. 80174de: 687b ldr r3, [r7, #4]
  56191. 80174e0: f023 0307 bic.w r3, r3, #7
  56192. 80174e4: 3308 adds r3, #8
  56193. 80174e6: 607b str r3, [r7, #4]
  56194. configASSERT( ( xWantedSize & portBYTE_ALIGNMENT_MASK ) == 0 );
  56195. 80174e8: 687b ldr r3, [r7, #4]
  56196. 80174ea: f003 0307 and.w r3, r3, #7
  56197. 80174ee: 2b00 cmp r3, #0
  56198. 80174f0: d00b beq.n 801750a <pvPortMalloc+0x6e>
  56199. __asm volatile
  56200. 80174f2: f04f 0350 mov.w r3, #80 @ 0x50
  56201. 80174f6: f383 8811 msr BASEPRI, r3
  56202. 80174fa: f3bf 8f6f isb sy
  56203. 80174fe: f3bf 8f4f dsb sy
  56204. 8017502: 617b str r3, [r7, #20]
  56205. }
  56206. 8017504: bf00 nop
  56207. 8017506: bf00 nop
  56208. 8017508: e7fd b.n 8017506 <pvPortMalloc+0x6a>
  56209. else
  56210. {
  56211. mtCOVERAGE_TEST_MARKER();
  56212. }
  56213. if( ( xWantedSize > 0 ) && ( xWantedSize <= xFreeBytesRemaining ) )
  56214. 801750a: 687b ldr r3, [r7, #4]
  56215. 801750c: 2b00 cmp r3, #0
  56216. 801750e: d06f beq.n 80175f0 <pvPortMalloc+0x154>
  56217. 8017510: 4b45 ldr r3, [pc, #276] @ (8017628 <pvPortMalloc+0x18c>)
  56218. 8017512: 681b ldr r3, [r3, #0]
  56219. 8017514: 687a ldr r2, [r7, #4]
  56220. 8017516: 429a cmp r2, r3
  56221. 8017518: d86a bhi.n 80175f0 <pvPortMalloc+0x154>
  56222. {
  56223. /* Traverse the list from the start (lowest address) block until
  56224. one of adequate size is found. */
  56225. pxPreviousBlock = &xStart;
  56226. 801751a: 4b44 ldr r3, [pc, #272] @ (801762c <pvPortMalloc+0x190>)
  56227. 801751c: 623b str r3, [r7, #32]
  56228. pxBlock = xStart.pxNextFreeBlock;
  56229. 801751e: 4b43 ldr r3, [pc, #268] @ (801762c <pvPortMalloc+0x190>)
  56230. 8017520: 681b ldr r3, [r3, #0]
  56231. 8017522: 627b str r3, [r7, #36] @ 0x24
  56232. while( ( pxBlock->xBlockSize < xWantedSize ) && ( pxBlock->pxNextFreeBlock != NULL ) )
  56233. 8017524: e004 b.n 8017530 <pvPortMalloc+0x94>
  56234. {
  56235. pxPreviousBlock = pxBlock;
  56236. 8017526: 6a7b ldr r3, [r7, #36] @ 0x24
  56237. 8017528: 623b str r3, [r7, #32]
  56238. pxBlock = pxBlock->pxNextFreeBlock;
  56239. 801752a: 6a7b ldr r3, [r7, #36] @ 0x24
  56240. 801752c: 681b ldr r3, [r3, #0]
  56241. 801752e: 627b str r3, [r7, #36] @ 0x24
  56242. while( ( pxBlock->xBlockSize < xWantedSize ) && ( pxBlock->pxNextFreeBlock != NULL ) )
  56243. 8017530: 6a7b ldr r3, [r7, #36] @ 0x24
  56244. 8017532: 685b ldr r3, [r3, #4]
  56245. 8017534: 687a ldr r2, [r7, #4]
  56246. 8017536: 429a cmp r2, r3
  56247. 8017538: d903 bls.n 8017542 <pvPortMalloc+0xa6>
  56248. 801753a: 6a7b ldr r3, [r7, #36] @ 0x24
  56249. 801753c: 681b ldr r3, [r3, #0]
  56250. 801753e: 2b00 cmp r3, #0
  56251. 8017540: d1f1 bne.n 8017526 <pvPortMalloc+0x8a>
  56252. }
  56253. /* If the end marker was reached then a block of adequate size
  56254. was not found. */
  56255. if( pxBlock != pxEnd )
  56256. 8017542: 4b37 ldr r3, [pc, #220] @ (8017620 <pvPortMalloc+0x184>)
  56257. 8017544: 681b ldr r3, [r3, #0]
  56258. 8017546: 6a7a ldr r2, [r7, #36] @ 0x24
  56259. 8017548: 429a cmp r2, r3
  56260. 801754a: d051 beq.n 80175f0 <pvPortMalloc+0x154>
  56261. {
  56262. /* Return the memory space pointed to - jumping over the
  56263. BlockLink_t structure at its start. */
  56264. pvReturn = ( void * ) ( ( ( uint8_t * ) pxPreviousBlock->pxNextFreeBlock ) + xHeapStructSize );
  56265. 801754c: 6a3b ldr r3, [r7, #32]
  56266. 801754e: 681b ldr r3, [r3, #0]
  56267. 8017550: 2208 movs r2, #8
  56268. 8017552: 4413 add r3, r2
  56269. 8017554: 61fb str r3, [r7, #28]
  56270. /* This block is being returned for use so must be taken out
  56271. of the list of free blocks. */
  56272. pxPreviousBlock->pxNextFreeBlock = pxBlock->pxNextFreeBlock;
  56273. 8017556: 6a7b ldr r3, [r7, #36] @ 0x24
  56274. 8017558: 681a ldr r2, [r3, #0]
  56275. 801755a: 6a3b ldr r3, [r7, #32]
  56276. 801755c: 601a str r2, [r3, #0]
  56277. /* If the block is larger than required it can be split into
  56278. two. */
  56279. if( ( pxBlock->xBlockSize - xWantedSize ) > heapMINIMUM_BLOCK_SIZE )
  56280. 801755e: 6a7b ldr r3, [r7, #36] @ 0x24
  56281. 8017560: 685a ldr r2, [r3, #4]
  56282. 8017562: 687b ldr r3, [r7, #4]
  56283. 8017564: 1ad2 subs r2, r2, r3
  56284. 8017566: 2308 movs r3, #8
  56285. 8017568: 005b lsls r3, r3, #1
  56286. 801756a: 429a cmp r2, r3
  56287. 801756c: d920 bls.n 80175b0 <pvPortMalloc+0x114>
  56288. {
  56289. /* This block is to be split into two. Create a new
  56290. block following the number of bytes requested. The void
  56291. cast is used to prevent byte alignment warnings from the
  56292. compiler. */
  56293. pxNewBlockLink = ( void * ) ( ( ( uint8_t * ) pxBlock ) + xWantedSize );
  56294. 801756e: 6a7a ldr r2, [r7, #36] @ 0x24
  56295. 8017570: 687b ldr r3, [r7, #4]
  56296. 8017572: 4413 add r3, r2
  56297. 8017574: 61bb str r3, [r7, #24]
  56298. configASSERT( ( ( ( size_t ) pxNewBlockLink ) & portBYTE_ALIGNMENT_MASK ) == 0 );
  56299. 8017576: 69bb ldr r3, [r7, #24]
  56300. 8017578: f003 0307 and.w r3, r3, #7
  56301. 801757c: 2b00 cmp r3, #0
  56302. 801757e: d00b beq.n 8017598 <pvPortMalloc+0xfc>
  56303. __asm volatile
  56304. 8017580: f04f 0350 mov.w r3, #80 @ 0x50
  56305. 8017584: f383 8811 msr BASEPRI, r3
  56306. 8017588: f3bf 8f6f isb sy
  56307. 801758c: f3bf 8f4f dsb sy
  56308. 8017590: 613b str r3, [r7, #16]
  56309. }
  56310. 8017592: bf00 nop
  56311. 8017594: bf00 nop
  56312. 8017596: e7fd b.n 8017594 <pvPortMalloc+0xf8>
  56313. /* Calculate the sizes of two blocks split from the
  56314. single block. */
  56315. pxNewBlockLink->xBlockSize = pxBlock->xBlockSize - xWantedSize;
  56316. 8017598: 6a7b ldr r3, [r7, #36] @ 0x24
  56317. 801759a: 685a ldr r2, [r3, #4]
  56318. 801759c: 687b ldr r3, [r7, #4]
  56319. 801759e: 1ad2 subs r2, r2, r3
  56320. 80175a0: 69bb ldr r3, [r7, #24]
  56321. 80175a2: 605a str r2, [r3, #4]
  56322. pxBlock->xBlockSize = xWantedSize;
  56323. 80175a4: 6a7b ldr r3, [r7, #36] @ 0x24
  56324. 80175a6: 687a ldr r2, [r7, #4]
  56325. 80175a8: 605a str r2, [r3, #4]
  56326. /* Insert the new block into the list of free blocks. */
  56327. prvInsertBlockIntoFreeList( pxNewBlockLink );
  56328. 80175aa: 69b8 ldr r0, [r7, #24]
  56329. 80175ac: f000 f90a bl 80177c4 <prvInsertBlockIntoFreeList>
  56330. else
  56331. {
  56332. mtCOVERAGE_TEST_MARKER();
  56333. }
  56334. xFreeBytesRemaining -= pxBlock->xBlockSize;
  56335. 80175b0: 4b1d ldr r3, [pc, #116] @ (8017628 <pvPortMalloc+0x18c>)
  56336. 80175b2: 681a ldr r2, [r3, #0]
  56337. 80175b4: 6a7b ldr r3, [r7, #36] @ 0x24
  56338. 80175b6: 685b ldr r3, [r3, #4]
  56339. 80175b8: 1ad3 subs r3, r2, r3
  56340. 80175ba: 4a1b ldr r2, [pc, #108] @ (8017628 <pvPortMalloc+0x18c>)
  56341. 80175bc: 6013 str r3, [r2, #0]
  56342. if( xFreeBytesRemaining < xMinimumEverFreeBytesRemaining )
  56343. 80175be: 4b1a ldr r3, [pc, #104] @ (8017628 <pvPortMalloc+0x18c>)
  56344. 80175c0: 681a ldr r2, [r3, #0]
  56345. 80175c2: 4b1b ldr r3, [pc, #108] @ (8017630 <pvPortMalloc+0x194>)
  56346. 80175c4: 681b ldr r3, [r3, #0]
  56347. 80175c6: 429a cmp r2, r3
  56348. 80175c8: d203 bcs.n 80175d2 <pvPortMalloc+0x136>
  56349. {
  56350. xMinimumEverFreeBytesRemaining = xFreeBytesRemaining;
  56351. 80175ca: 4b17 ldr r3, [pc, #92] @ (8017628 <pvPortMalloc+0x18c>)
  56352. 80175cc: 681b ldr r3, [r3, #0]
  56353. 80175ce: 4a18 ldr r2, [pc, #96] @ (8017630 <pvPortMalloc+0x194>)
  56354. 80175d0: 6013 str r3, [r2, #0]
  56355. mtCOVERAGE_TEST_MARKER();
  56356. }
  56357. /* The block is being returned - it is allocated and owned
  56358. by the application and has no "next" block. */
  56359. pxBlock->xBlockSize |= xBlockAllocatedBit;
  56360. 80175d2: 6a7b ldr r3, [r7, #36] @ 0x24
  56361. 80175d4: 685a ldr r2, [r3, #4]
  56362. 80175d6: 4b13 ldr r3, [pc, #76] @ (8017624 <pvPortMalloc+0x188>)
  56363. 80175d8: 681b ldr r3, [r3, #0]
  56364. 80175da: 431a orrs r2, r3
  56365. 80175dc: 6a7b ldr r3, [r7, #36] @ 0x24
  56366. 80175de: 605a str r2, [r3, #4]
  56367. pxBlock->pxNextFreeBlock = NULL;
  56368. 80175e0: 6a7b ldr r3, [r7, #36] @ 0x24
  56369. 80175e2: 2200 movs r2, #0
  56370. 80175e4: 601a str r2, [r3, #0]
  56371. xNumberOfSuccessfulAllocations++;
  56372. 80175e6: 4b13 ldr r3, [pc, #76] @ (8017634 <pvPortMalloc+0x198>)
  56373. 80175e8: 681b ldr r3, [r3, #0]
  56374. 80175ea: 3301 adds r3, #1
  56375. 80175ec: 4a11 ldr r2, [pc, #68] @ (8017634 <pvPortMalloc+0x198>)
  56376. 80175ee: 6013 str r3, [r2, #0]
  56377. mtCOVERAGE_TEST_MARKER();
  56378. }
  56379. traceMALLOC( pvReturn, xWantedSize );
  56380. }
  56381. ( void ) xTaskResumeAll();
  56382. 80175f0: f7fe f884 bl 80156fc <xTaskResumeAll>
  56383. mtCOVERAGE_TEST_MARKER();
  56384. }
  56385. }
  56386. #endif
  56387. configASSERT( ( ( ( size_t ) pvReturn ) & ( size_t ) portBYTE_ALIGNMENT_MASK ) == 0 );
  56388. 80175f4: 69fb ldr r3, [r7, #28]
  56389. 80175f6: f003 0307 and.w r3, r3, #7
  56390. 80175fa: 2b00 cmp r3, #0
  56391. 80175fc: d00b beq.n 8017616 <pvPortMalloc+0x17a>
  56392. __asm volatile
  56393. 80175fe: f04f 0350 mov.w r3, #80 @ 0x50
  56394. 8017602: f383 8811 msr BASEPRI, r3
  56395. 8017606: f3bf 8f6f isb sy
  56396. 801760a: f3bf 8f4f dsb sy
  56397. 801760e: 60fb str r3, [r7, #12]
  56398. }
  56399. 8017610: bf00 nop
  56400. 8017612: bf00 nop
  56401. 8017614: e7fd b.n 8017612 <pvPortMalloc+0x176>
  56402. return pvReturn;
  56403. 8017616: 69fb ldr r3, [r7, #28]
  56404. }
  56405. 8017618: 4618 mov r0, r3
  56406. 801761a: 3728 adds r7, #40 @ 0x28
  56407. 801761c: 46bd mov sp, r7
  56408. 801761e: bd80 pop {r7, pc}
  56409. 8017620: 24013050 .word 0x24013050
  56410. 8017624: 24013064 .word 0x24013064
  56411. 8017628: 24013054 .word 0x24013054
  56412. 801762c: 24013048 .word 0x24013048
  56413. 8017630: 24013058 .word 0x24013058
  56414. 8017634: 2401305c .word 0x2401305c
  56415. 08017638 <vPortFree>:
  56416. /*-----------------------------------------------------------*/
  56417. void vPortFree( void *pv )
  56418. {
  56419. 8017638: b580 push {r7, lr}
  56420. 801763a: b086 sub sp, #24
  56421. 801763c: af00 add r7, sp, #0
  56422. 801763e: 6078 str r0, [r7, #4]
  56423. uint8_t *puc = ( uint8_t * ) pv;
  56424. 8017640: 687b ldr r3, [r7, #4]
  56425. 8017642: 617b str r3, [r7, #20]
  56426. BlockLink_t *pxLink;
  56427. if( pv != NULL )
  56428. 8017644: 687b ldr r3, [r7, #4]
  56429. 8017646: 2b00 cmp r3, #0
  56430. 8017648: d04f beq.n 80176ea <vPortFree+0xb2>
  56431. {
  56432. /* The memory being freed will have an BlockLink_t structure immediately
  56433. before it. */
  56434. puc -= xHeapStructSize;
  56435. 801764a: 2308 movs r3, #8
  56436. 801764c: 425b negs r3, r3
  56437. 801764e: 697a ldr r2, [r7, #20]
  56438. 8017650: 4413 add r3, r2
  56439. 8017652: 617b str r3, [r7, #20]
  56440. /* This casting is to keep the compiler from issuing warnings. */
  56441. pxLink = ( void * ) puc;
  56442. 8017654: 697b ldr r3, [r7, #20]
  56443. 8017656: 613b str r3, [r7, #16]
  56444. /* Check the block is actually allocated. */
  56445. configASSERT( ( pxLink->xBlockSize & xBlockAllocatedBit ) != 0 );
  56446. 8017658: 693b ldr r3, [r7, #16]
  56447. 801765a: 685a ldr r2, [r3, #4]
  56448. 801765c: 4b25 ldr r3, [pc, #148] @ (80176f4 <vPortFree+0xbc>)
  56449. 801765e: 681b ldr r3, [r3, #0]
  56450. 8017660: 4013 ands r3, r2
  56451. 8017662: 2b00 cmp r3, #0
  56452. 8017664: d10b bne.n 801767e <vPortFree+0x46>
  56453. __asm volatile
  56454. 8017666: f04f 0350 mov.w r3, #80 @ 0x50
  56455. 801766a: f383 8811 msr BASEPRI, r3
  56456. 801766e: f3bf 8f6f isb sy
  56457. 8017672: f3bf 8f4f dsb sy
  56458. 8017676: 60fb str r3, [r7, #12]
  56459. }
  56460. 8017678: bf00 nop
  56461. 801767a: bf00 nop
  56462. 801767c: e7fd b.n 801767a <vPortFree+0x42>
  56463. configASSERT( pxLink->pxNextFreeBlock == NULL );
  56464. 801767e: 693b ldr r3, [r7, #16]
  56465. 8017680: 681b ldr r3, [r3, #0]
  56466. 8017682: 2b00 cmp r3, #0
  56467. 8017684: d00b beq.n 801769e <vPortFree+0x66>
  56468. __asm volatile
  56469. 8017686: f04f 0350 mov.w r3, #80 @ 0x50
  56470. 801768a: f383 8811 msr BASEPRI, r3
  56471. 801768e: f3bf 8f6f isb sy
  56472. 8017692: f3bf 8f4f dsb sy
  56473. 8017696: 60bb str r3, [r7, #8]
  56474. }
  56475. 8017698: bf00 nop
  56476. 801769a: bf00 nop
  56477. 801769c: e7fd b.n 801769a <vPortFree+0x62>
  56478. if( ( pxLink->xBlockSize & xBlockAllocatedBit ) != 0 )
  56479. 801769e: 693b ldr r3, [r7, #16]
  56480. 80176a0: 685a ldr r2, [r3, #4]
  56481. 80176a2: 4b14 ldr r3, [pc, #80] @ (80176f4 <vPortFree+0xbc>)
  56482. 80176a4: 681b ldr r3, [r3, #0]
  56483. 80176a6: 4013 ands r3, r2
  56484. 80176a8: 2b00 cmp r3, #0
  56485. 80176aa: d01e beq.n 80176ea <vPortFree+0xb2>
  56486. {
  56487. if( pxLink->pxNextFreeBlock == NULL )
  56488. 80176ac: 693b ldr r3, [r7, #16]
  56489. 80176ae: 681b ldr r3, [r3, #0]
  56490. 80176b0: 2b00 cmp r3, #0
  56491. 80176b2: d11a bne.n 80176ea <vPortFree+0xb2>
  56492. {
  56493. /* The block is being returned to the heap - it is no longer
  56494. allocated. */
  56495. pxLink->xBlockSize &= ~xBlockAllocatedBit;
  56496. 80176b4: 693b ldr r3, [r7, #16]
  56497. 80176b6: 685a ldr r2, [r3, #4]
  56498. 80176b8: 4b0e ldr r3, [pc, #56] @ (80176f4 <vPortFree+0xbc>)
  56499. 80176ba: 681b ldr r3, [r3, #0]
  56500. 80176bc: 43db mvns r3, r3
  56501. 80176be: 401a ands r2, r3
  56502. 80176c0: 693b ldr r3, [r7, #16]
  56503. 80176c2: 605a str r2, [r3, #4]
  56504. vTaskSuspendAll();
  56505. 80176c4: f7fe f80c bl 80156e0 <vTaskSuspendAll>
  56506. {
  56507. /* Add this block to the list of free blocks. */
  56508. xFreeBytesRemaining += pxLink->xBlockSize;
  56509. 80176c8: 693b ldr r3, [r7, #16]
  56510. 80176ca: 685a ldr r2, [r3, #4]
  56511. 80176cc: 4b0a ldr r3, [pc, #40] @ (80176f8 <vPortFree+0xc0>)
  56512. 80176ce: 681b ldr r3, [r3, #0]
  56513. 80176d0: 4413 add r3, r2
  56514. 80176d2: 4a09 ldr r2, [pc, #36] @ (80176f8 <vPortFree+0xc0>)
  56515. 80176d4: 6013 str r3, [r2, #0]
  56516. traceFREE( pv, pxLink->xBlockSize );
  56517. prvInsertBlockIntoFreeList( ( ( BlockLink_t * ) pxLink ) );
  56518. 80176d6: 6938 ldr r0, [r7, #16]
  56519. 80176d8: f000 f874 bl 80177c4 <prvInsertBlockIntoFreeList>
  56520. xNumberOfSuccessfulFrees++;
  56521. 80176dc: 4b07 ldr r3, [pc, #28] @ (80176fc <vPortFree+0xc4>)
  56522. 80176de: 681b ldr r3, [r3, #0]
  56523. 80176e0: 3301 adds r3, #1
  56524. 80176e2: 4a06 ldr r2, [pc, #24] @ (80176fc <vPortFree+0xc4>)
  56525. 80176e4: 6013 str r3, [r2, #0]
  56526. }
  56527. ( void ) xTaskResumeAll();
  56528. 80176e6: f7fe f809 bl 80156fc <xTaskResumeAll>
  56529. else
  56530. {
  56531. mtCOVERAGE_TEST_MARKER();
  56532. }
  56533. }
  56534. }
  56535. 80176ea: bf00 nop
  56536. 80176ec: 3718 adds r7, #24
  56537. 80176ee: 46bd mov sp, r7
  56538. 80176f0: bd80 pop {r7, pc}
  56539. 80176f2: bf00 nop
  56540. 80176f4: 24013064 .word 0x24013064
  56541. 80176f8: 24013054 .word 0x24013054
  56542. 80176fc: 24013060 .word 0x24013060
  56543. 08017700 <prvHeapInit>:
  56544. /* This just exists to keep the linker quiet. */
  56545. }
  56546. /*-----------------------------------------------------------*/
  56547. static void prvHeapInit( void )
  56548. {
  56549. 8017700: b480 push {r7}
  56550. 8017702: b085 sub sp, #20
  56551. 8017704: af00 add r7, sp, #0
  56552. BlockLink_t *pxFirstFreeBlock;
  56553. uint8_t *pucAlignedHeap;
  56554. size_t uxAddress;
  56555. size_t xTotalHeapSize = configTOTAL_HEAP_SIZE;
  56556. 8017706: f44f 3380 mov.w r3, #65536 @ 0x10000
  56557. 801770a: 60bb str r3, [r7, #8]
  56558. /* Ensure the heap starts on a correctly aligned boundary. */
  56559. uxAddress = ( size_t ) ucHeap;
  56560. 801770c: 4b27 ldr r3, [pc, #156] @ (80177ac <prvHeapInit+0xac>)
  56561. 801770e: 60fb str r3, [r7, #12]
  56562. if( ( uxAddress & portBYTE_ALIGNMENT_MASK ) != 0 )
  56563. 8017710: 68fb ldr r3, [r7, #12]
  56564. 8017712: f003 0307 and.w r3, r3, #7
  56565. 8017716: 2b00 cmp r3, #0
  56566. 8017718: d00c beq.n 8017734 <prvHeapInit+0x34>
  56567. {
  56568. uxAddress += ( portBYTE_ALIGNMENT - 1 );
  56569. 801771a: 68fb ldr r3, [r7, #12]
  56570. 801771c: 3307 adds r3, #7
  56571. 801771e: 60fb str r3, [r7, #12]
  56572. uxAddress &= ~( ( size_t ) portBYTE_ALIGNMENT_MASK );
  56573. 8017720: 68fb ldr r3, [r7, #12]
  56574. 8017722: f023 0307 bic.w r3, r3, #7
  56575. 8017726: 60fb str r3, [r7, #12]
  56576. xTotalHeapSize -= uxAddress - ( size_t ) ucHeap;
  56577. 8017728: 68ba ldr r2, [r7, #8]
  56578. 801772a: 68fb ldr r3, [r7, #12]
  56579. 801772c: 1ad3 subs r3, r2, r3
  56580. 801772e: 4a1f ldr r2, [pc, #124] @ (80177ac <prvHeapInit+0xac>)
  56581. 8017730: 4413 add r3, r2
  56582. 8017732: 60bb str r3, [r7, #8]
  56583. }
  56584. pucAlignedHeap = ( uint8_t * ) uxAddress;
  56585. 8017734: 68fb ldr r3, [r7, #12]
  56586. 8017736: 607b str r3, [r7, #4]
  56587. /* xStart is used to hold a pointer to the first item in the list of free
  56588. blocks. The void cast is used to prevent compiler warnings. */
  56589. xStart.pxNextFreeBlock = ( void * ) pucAlignedHeap;
  56590. 8017738: 4a1d ldr r2, [pc, #116] @ (80177b0 <prvHeapInit+0xb0>)
  56591. 801773a: 687b ldr r3, [r7, #4]
  56592. 801773c: 6013 str r3, [r2, #0]
  56593. xStart.xBlockSize = ( size_t ) 0;
  56594. 801773e: 4b1c ldr r3, [pc, #112] @ (80177b0 <prvHeapInit+0xb0>)
  56595. 8017740: 2200 movs r2, #0
  56596. 8017742: 605a str r2, [r3, #4]
  56597. /* pxEnd is used to mark the end of the list of free blocks and is inserted
  56598. at the end of the heap space. */
  56599. uxAddress = ( ( size_t ) pucAlignedHeap ) + xTotalHeapSize;
  56600. 8017744: 687b ldr r3, [r7, #4]
  56601. 8017746: 68ba ldr r2, [r7, #8]
  56602. 8017748: 4413 add r3, r2
  56603. 801774a: 60fb str r3, [r7, #12]
  56604. uxAddress -= xHeapStructSize;
  56605. 801774c: 2208 movs r2, #8
  56606. 801774e: 68fb ldr r3, [r7, #12]
  56607. 8017750: 1a9b subs r3, r3, r2
  56608. 8017752: 60fb str r3, [r7, #12]
  56609. uxAddress &= ~( ( size_t ) portBYTE_ALIGNMENT_MASK );
  56610. 8017754: 68fb ldr r3, [r7, #12]
  56611. 8017756: f023 0307 bic.w r3, r3, #7
  56612. 801775a: 60fb str r3, [r7, #12]
  56613. pxEnd = ( void * ) uxAddress;
  56614. 801775c: 68fb ldr r3, [r7, #12]
  56615. 801775e: 4a15 ldr r2, [pc, #84] @ (80177b4 <prvHeapInit+0xb4>)
  56616. 8017760: 6013 str r3, [r2, #0]
  56617. pxEnd->xBlockSize = 0;
  56618. 8017762: 4b14 ldr r3, [pc, #80] @ (80177b4 <prvHeapInit+0xb4>)
  56619. 8017764: 681b ldr r3, [r3, #0]
  56620. 8017766: 2200 movs r2, #0
  56621. 8017768: 605a str r2, [r3, #4]
  56622. pxEnd->pxNextFreeBlock = NULL;
  56623. 801776a: 4b12 ldr r3, [pc, #72] @ (80177b4 <prvHeapInit+0xb4>)
  56624. 801776c: 681b ldr r3, [r3, #0]
  56625. 801776e: 2200 movs r2, #0
  56626. 8017770: 601a str r2, [r3, #0]
  56627. /* To start with there is a single free block that is sized to take up the
  56628. entire heap space, minus the space taken by pxEnd. */
  56629. pxFirstFreeBlock = ( void * ) pucAlignedHeap;
  56630. 8017772: 687b ldr r3, [r7, #4]
  56631. 8017774: 603b str r3, [r7, #0]
  56632. pxFirstFreeBlock->xBlockSize = uxAddress - ( size_t ) pxFirstFreeBlock;
  56633. 8017776: 683b ldr r3, [r7, #0]
  56634. 8017778: 68fa ldr r2, [r7, #12]
  56635. 801777a: 1ad2 subs r2, r2, r3
  56636. 801777c: 683b ldr r3, [r7, #0]
  56637. 801777e: 605a str r2, [r3, #4]
  56638. pxFirstFreeBlock->pxNextFreeBlock = pxEnd;
  56639. 8017780: 4b0c ldr r3, [pc, #48] @ (80177b4 <prvHeapInit+0xb4>)
  56640. 8017782: 681a ldr r2, [r3, #0]
  56641. 8017784: 683b ldr r3, [r7, #0]
  56642. 8017786: 601a str r2, [r3, #0]
  56643. /* Only one block exists - and it covers the entire usable heap space. */
  56644. xMinimumEverFreeBytesRemaining = pxFirstFreeBlock->xBlockSize;
  56645. 8017788: 683b ldr r3, [r7, #0]
  56646. 801778a: 685b ldr r3, [r3, #4]
  56647. 801778c: 4a0a ldr r2, [pc, #40] @ (80177b8 <prvHeapInit+0xb8>)
  56648. 801778e: 6013 str r3, [r2, #0]
  56649. xFreeBytesRemaining = pxFirstFreeBlock->xBlockSize;
  56650. 8017790: 683b ldr r3, [r7, #0]
  56651. 8017792: 685b ldr r3, [r3, #4]
  56652. 8017794: 4a09 ldr r2, [pc, #36] @ (80177bc <prvHeapInit+0xbc>)
  56653. 8017796: 6013 str r3, [r2, #0]
  56654. /* Work out the position of the top bit in a size_t variable. */
  56655. xBlockAllocatedBit = ( ( size_t ) 1 ) << ( ( sizeof( size_t ) * heapBITS_PER_BYTE ) - 1 );
  56656. 8017798: 4b09 ldr r3, [pc, #36] @ (80177c0 <prvHeapInit+0xc0>)
  56657. 801779a: f04f 4200 mov.w r2, #2147483648 @ 0x80000000
  56658. 801779e: 601a str r2, [r3, #0]
  56659. }
  56660. 80177a0: bf00 nop
  56661. 80177a2: 3714 adds r7, #20
  56662. 80177a4: 46bd mov sp, r7
  56663. 80177a6: f85d 7b04 ldr.w r7, [sp], #4
  56664. 80177aa: 4770 bx lr
  56665. 80177ac: 24003048 .word 0x24003048
  56666. 80177b0: 24013048 .word 0x24013048
  56667. 80177b4: 24013050 .word 0x24013050
  56668. 80177b8: 24013058 .word 0x24013058
  56669. 80177bc: 24013054 .word 0x24013054
  56670. 80177c0: 24013064 .word 0x24013064
  56671. 080177c4 <prvInsertBlockIntoFreeList>:
  56672. /*-----------------------------------------------------------*/
  56673. static void prvInsertBlockIntoFreeList( BlockLink_t *pxBlockToInsert )
  56674. {
  56675. 80177c4: b480 push {r7}
  56676. 80177c6: b085 sub sp, #20
  56677. 80177c8: af00 add r7, sp, #0
  56678. 80177ca: 6078 str r0, [r7, #4]
  56679. BlockLink_t *pxIterator;
  56680. uint8_t *puc;
  56681. /* Iterate through the list until a block is found that has a higher address
  56682. than the block being inserted. */
  56683. for( pxIterator = &xStart; pxIterator->pxNextFreeBlock < pxBlockToInsert; pxIterator = pxIterator->pxNextFreeBlock )
  56684. 80177cc: 4b28 ldr r3, [pc, #160] @ (8017870 <prvInsertBlockIntoFreeList+0xac>)
  56685. 80177ce: 60fb str r3, [r7, #12]
  56686. 80177d0: e002 b.n 80177d8 <prvInsertBlockIntoFreeList+0x14>
  56687. 80177d2: 68fb ldr r3, [r7, #12]
  56688. 80177d4: 681b ldr r3, [r3, #0]
  56689. 80177d6: 60fb str r3, [r7, #12]
  56690. 80177d8: 68fb ldr r3, [r7, #12]
  56691. 80177da: 681b ldr r3, [r3, #0]
  56692. 80177dc: 687a ldr r2, [r7, #4]
  56693. 80177de: 429a cmp r2, r3
  56694. 80177e0: d8f7 bhi.n 80177d2 <prvInsertBlockIntoFreeList+0xe>
  56695. /* Nothing to do here, just iterate to the right position. */
  56696. }
  56697. /* Do the block being inserted, and the block it is being inserted after
  56698. make a contiguous block of memory? */
  56699. puc = ( uint8_t * ) pxIterator;
  56700. 80177e2: 68fb ldr r3, [r7, #12]
  56701. 80177e4: 60bb str r3, [r7, #8]
  56702. if( ( puc + pxIterator->xBlockSize ) == ( uint8_t * ) pxBlockToInsert )
  56703. 80177e6: 68fb ldr r3, [r7, #12]
  56704. 80177e8: 685b ldr r3, [r3, #4]
  56705. 80177ea: 68ba ldr r2, [r7, #8]
  56706. 80177ec: 4413 add r3, r2
  56707. 80177ee: 687a ldr r2, [r7, #4]
  56708. 80177f0: 429a cmp r2, r3
  56709. 80177f2: d108 bne.n 8017806 <prvInsertBlockIntoFreeList+0x42>
  56710. {
  56711. pxIterator->xBlockSize += pxBlockToInsert->xBlockSize;
  56712. 80177f4: 68fb ldr r3, [r7, #12]
  56713. 80177f6: 685a ldr r2, [r3, #4]
  56714. 80177f8: 687b ldr r3, [r7, #4]
  56715. 80177fa: 685b ldr r3, [r3, #4]
  56716. 80177fc: 441a add r2, r3
  56717. 80177fe: 68fb ldr r3, [r7, #12]
  56718. 8017800: 605a str r2, [r3, #4]
  56719. pxBlockToInsert = pxIterator;
  56720. 8017802: 68fb ldr r3, [r7, #12]
  56721. 8017804: 607b str r3, [r7, #4]
  56722. mtCOVERAGE_TEST_MARKER();
  56723. }
  56724. /* Do the block being inserted, and the block it is being inserted before
  56725. make a contiguous block of memory? */
  56726. puc = ( uint8_t * ) pxBlockToInsert;
  56727. 8017806: 687b ldr r3, [r7, #4]
  56728. 8017808: 60bb str r3, [r7, #8]
  56729. if( ( puc + pxBlockToInsert->xBlockSize ) == ( uint8_t * ) pxIterator->pxNextFreeBlock )
  56730. 801780a: 687b ldr r3, [r7, #4]
  56731. 801780c: 685b ldr r3, [r3, #4]
  56732. 801780e: 68ba ldr r2, [r7, #8]
  56733. 8017810: 441a add r2, r3
  56734. 8017812: 68fb ldr r3, [r7, #12]
  56735. 8017814: 681b ldr r3, [r3, #0]
  56736. 8017816: 429a cmp r2, r3
  56737. 8017818: d118 bne.n 801784c <prvInsertBlockIntoFreeList+0x88>
  56738. {
  56739. if( pxIterator->pxNextFreeBlock != pxEnd )
  56740. 801781a: 68fb ldr r3, [r7, #12]
  56741. 801781c: 681a ldr r2, [r3, #0]
  56742. 801781e: 4b15 ldr r3, [pc, #84] @ (8017874 <prvInsertBlockIntoFreeList+0xb0>)
  56743. 8017820: 681b ldr r3, [r3, #0]
  56744. 8017822: 429a cmp r2, r3
  56745. 8017824: d00d beq.n 8017842 <prvInsertBlockIntoFreeList+0x7e>
  56746. {
  56747. /* Form one big block from the two blocks. */
  56748. pxBlockToInsert->xBlockSize += pxIterator->pxNextFreeBlock->xBlockSize;
  56749. 8017826: 687b ldr r3, [r7, #4]
  56750. 8017828: 685a ldr r2, [r3, #4]
  56751. 801782a: 68fb ldr r3, [r7, #12]
  56752. 801782c: 681b ldr r3, [r3, #0]
  56753. 801782e: 685b ldr r3, [r3, #4]
  56754. 8017830: 441a add r2, r3
  56755. 8017832: 687b ldr r3, [r7, #4]
  56756. 8017834: 605a str r2, [r3, #4]
  56757. pxBlockToInsert->pxNextFreeBlock = pxIterator->pxNextFreeBlock->pxNextFreeBlock;
  56758. 8017836: 68fb ldr r3, [r7, #12]
  56759. 8017838: 681b ldr r3, [r3, #0]
  56760. 801783a: 681a ldr r2, [r3, #0]
  56761. 801783c: 687b ldr r3, [r7, #4]
  56762. 801783e: 601a str r2, [r3, #0]
  56763. 8017840: e008 b.n 8017854 <prvInsertBlockIntoFreeList+0x90>
  56764. }
  56765. else
  56766. {
  56767. pxBlockToInsert->pxNextFreeBlock = pxEnd;
  56768. 8017842: 4b0c ldr r3, [pc, #48] @ (8017874 <prvInsertBlockIntoFreeList+0xb0>)
  56769. 8017844: 681a ldr r2, [r3, #0]
  56770. 8017846: 687b ldr r3, [r7, #4]
  56771. 8017848: 601a str r2, [r3, #0]
  56772. 801784a: e003 b.n 8017854 <prvInsertBlockIntoFreeList+0x90>
  56773. }
  56774. }
  56775. else
  56776. {
  56777. pxBlockToInsert->pxNextFreeBlock = pxIterator->pxNextFreeBlock;
  56778. 801784c: 68fb ldr r3, [r7, #12]
  56779. 801784e: 681a ldr r2, [r3, #0]
  56780. 8017850: 687b ldr r3, [r7, #4]
  56781. 8017852: 601a str r2, [r3, #0]
  56782. /* If the block being inserted plugged a gab, so was merged with the block
  56783. before and the block after, then it's pxNextFreeBlock pointer will have
  56784. already been set, and should not be set here as that would make it point
  56785. to itself. */
  56786. if( pxIterator != pxBlockToInsert )
  56787. 8017854: 68fa ldr r2, [r7, #12]
  56788. 8017856: 687b ldr r3, [r7, #4]
  56789. 8017858: 429a cmp r2, r3
  56790. 801785a: d002 beq.n 8017862 <prvInsertBlockIntoFreeList+0x9e>
  56791. {
  56792. pxIterator->pxNextFreeBlock = pxBlockToInsert;
  56793. 801785c: 68fb ldr r3, [r7, #12]
  56794. 801785e: 687a ldr r2, [r7, #4]
  56795. 8017860: 601a str r2, [r3, #0]
  56796. }
  56797. else
  56798. {
  56799. mtCOVERAGE_TEST_MARKER();
  56800. }
  56801. }
  56802. 8017862: bf00 nop
  56803. 8017864: 3714 adds r7, #20
  56804. 8017866: 46bd mov sp, r7
  56805. 8017868: f85d 7b04 ldr.w r7, [sp], #4
  56806. 801786c: 4770 bx lr
  56807. 801786e: bf00 nop
  56808. 8017870: 24013048 .word 0x24013048
  56809. 8017874: 24013050 .word 0x24013050
  56810. 08017878 <std>:
  56811. 8017878: 2300 movs r3, #0
  56812. 801787a: b510 push {r4, lr}
  56813. 801787c: 4604 mov r4, r0
  56814. 801787e: e9c0 3300 strd r3, r3, [r0]
  56815. 8017882: e9c0 3304 strd r3, r3, [r0, #16]
  56816. 8017886: 6083 str r3, [r0, #8]
  56817. 8017888: 8181 strh r1, [r0, #12]
  56818. 801788a: 6643 str r3, [r0, #100] @ 0x64
  56819. 801788c: 81c2 strh r2, [r0, #14]
  56820. 801788e: 6183 str r3, [r0, #24]
  56821. 8017890: 4619 mov r1, r3
  56822. 8017892: 2208 movs r2, #8
  56823. 8017894: 305c adds r0, #92 @ 0x5c
  56824. 8017896: f000 f9f9 bl 8017c8c <memset>
  56825. 801789a: 4b0d ldr r3, [pc, #52] @ (80178d0 <std+0x58>)
  56826. 801789c: 6263 str r3, [r4, #36] @ 0x24
  56827. 801789e: 4b0d ldr r3, [pc, #52] @ (80178d4 <std+0x5c>)
  56828. 80178a0: 62a3 str r3, [r4, #40] @ 0x28
  56829. 80178a2: 4b0d ldr r3, [pc, #52] @ (80178d8 <std+0x60>)
  56830. 80178a4: 62e3 str r3, [r4, #44] @ 0x2c
  56831. 80178a6: 4b0d ldr r3, [pc, #52] @ (80178dc <std+0x64>)
  56832. 80178a8: 6323 str r3, [r4, #48] @ 0x30
  56833. 80178aa: 4b0d ldr r3, [pc, #52] @ (80178e0 <std+0x68>)
  56834. 80178ac: 6224 str r4, [r4, #32]
  56835. 80178ae: 429c cmp r4, r3
  56836. 80178b0: d006 beq.n 80178c0 <std+0x48>
  56837. 80178b2: f103 0268 add.w r2, r3, #104 @ 0x68
  56838. 80178b6: 4294 cmp r4, r2
  56839. 80178b8: d002 beq.n 80178c0 <std+0x48>
  56840. 80178ba: 33d0 adds r3, #208 @ 0xd0
  56841. 80178bc: 429c cmp r4, r3
  56842. 80178be: d105 bne.n 80178cc <std+0x54>
  56843. 80178c0: f104 0058 add.w r0, r4, #88 @ 0x58
  56844. 80178c4: e8bd 4010 ldmia.w sp!, {r4, lr}
  56845. 80178c8: f000 baae b.w 8017e28 <__retarget_lock_init_recursive>
  56846. 80178cc: bd10 pop {r4, pc}
  56847. 80178ce: bf00 nop
  56848. 80178d0: 08017add .word 0x08017add
  56849. 80178d4: 08017aff .word 0x08017aff
  56850. 80178d8: 08017b37 .word 0x08017b37
  56851. 80178dc: 08017b5b .word 0x08017b5b
  56852. 80178e0: 24013068 .word 0x24013068
  56853. 080178e4 <stdio_exit_handler>:
  56854. 80178e4: 4a02 ldr r2, [pc, #8] @ (80178f0 <stdio_exit_handler+0xc>)
  56855. 80178e6: 4903 ldr r1, [pc, #12] @ (80178f4 <stdio_exit_handler+0x10>)
  56856. 80178e8: 4803 ldr r0, [pc, #12] @ (80178f8 <stdio_exit_handler+0x14>)
  56857. 80178ea: f000 b869 b.w 80179c0 <_fwalk_sglue>
  56858. 80178ee: bf00 nop
  56859. 80178f0: 24000048 .word 0x24000048
  56860. 80178f4: 080186e5 .word 0x080186e5
  56861. 80178f8: 24000058 .word 0x24000058
  56862. 080178fc <cleanup_stdio>:
  56863. 80178fc: 6841 ldr r1, [r0, #4]
  56864. 80178fe: 4b0c ldr r3, [pc, #48] @ (8017930 <cleanup_stdio+0x34>)
  56865. 8017900: 4299 cmp r1, r3
  56866. 8017902: b510 push {r4, lr}
  56867. 8017904: 4604 mov r4, r0
  56868. 8017906: d001 beq.n 801790c <cleanup_stdio+0x10>
  56869. 8017908: f000 feec bl 80186e4 <_fflush_r>
  56870. 801790c: 68a1 ldr r1, [r4, #8]
  56871. 801790e: 4b09 ldr r3, [pc, #36] @ (8017934 <cleanup_stdio+0x38>)
  56872. 8017910: 4299 cmp r1, r3
  56873. 8017912: d002 beq.n 801791a <cleanup_stdio+0x1e>
  56874. 8017914: 4620 mov r0, r4
  56875. 8017916: f000 fee5 bl 80186e4 <_fflush_r>
  56876. 801791a: 68e1 ldr r1, [r4, #12]
  56877. 801791c: 4b06 ldr r3, [pc, #24] @ (8017938 <cleanup_stdio+0x3c>)
  56878. 801791e: 4299 cmp r1, r3
  56879. 8017920: d004 beq.n 801792c <cleanup_stdio+0x30>
  56880. 8017922: 4620 mov r0, r4
  56881. 8017924: e8bd 4010 ldmia.w sp!, {r4, lr}
  56882. 8017928: f000 bedc b.w 80186e4 <_fflush_r>
  56883. 801792c: bd10 pop {r4, pc}
  56884. 801792e: bf00 nop
  56885. 8017930: 24013068 .word 0x24013068
  56886. 8017934: 240130d0 .word 0x240130d0
  56887. 8017938: 24013138 .word 0x24013138
  56888. 0801793c <global_stdio_init.part.0>:
  56889. 801793c: b510 push {r4, lr}
  56890. 801793e: 4b0b ldr r3, [pc, #44] @ (801796c <global_stdio_init.part.0+0x30>)
  56891. 8017940: 4c0b ldr r4, [pc, #44] @ (8017970 <global_stdio_init.part.0+0x34>)
  56892. 8017942: 4a0c ldr r2, [pc, #48] @ (8017974 <global_stdio_init.part.0+0x38>)
  56893. 8017944: 601a str r2, [r3, #0]
  56894. 8017946: 4620 mov r0, r4
  56895. 8017948: 2200 movs r2, #0
  56896. 801794a: 2104 movs r1, #4
  56897. 801794c: f7ff ff94 bl 8017878 <std>
  56898. 8017950: f104 0068 add.w r0, r4, #104 @ 0x68
  56899. 8017954: 2201 movs r2, #1
  56900. 8017956: 2109 movs r1, #9
  56901. 8017958: f7ff ff8e bl 8017878 <std>
  56902. 801795c: f104 00d0 add.w r0, r4, #208 @ 0xd0
  56903. 8017960: 2202 movs r2, #2
  56904. 8017962: e8bd 4010 ldmia.w sp!, {r4, lr}
  56905. 8017966: 2112 movs r1, #18
  56906. 8017968: f7ff bf86 b.w 8017878 <std>
  56907. 801796c: 240131a0 .word 0x240131a0
  56908. 8017970: 24013068 .word 0x24013068
  56909. 8017974: 080178e5 .word 0x080178e5
  56910. 08017978 <__sfp_lock_acquire>:
  56911. 8017978: 4801 ldr r0, [pc, #4] @ (8017980 <__sfp_lock_acquire+0x8>)
  56912. 801797a: f000 ba56 b.w 8017e2a <__retarget_lock_acquire_recursive>
  56913. 801797e: bf00 nop
  56914. 8017980: 240131a9 .word 0x240131a9
  56915. 08017984 <__sfp_lock_release>:
  56916. 8017984: 4801 ldr r0, [pc, #4] @ (801798c <__sfp_lock_release+0x8>)
  56917. 8017986: f000 ba51 b.w 8017e2c <__retarget_lock_release_recursive>
  56918. 801798a: bf00 nop
  56919. 801798c: 240131a9 .word 0x240131a9
  56920. 08017990 <__sinit>:
  56921. 8017990: b510 push {r4, lr}
  56922. 8017992: 4604 mov r4, r0
  56923. 8017994: f7ff fff0 bl 8017978 <__sfp_lock_acquire>
  56924. 8017998: 6a23 ldr r3, [r4, #32]
  56925. 801799a: b11b cbz r3, 80179a4 <__sinit+0x14>
  56926. 801799c: e8bd 4010 ldmia.w sp!, {r4, lr}
  56927. 80179a0: f7ff bff0 b.w 8017984 <__sfp_lock_release>
  56928. 80179a4: 4b04 ldr r3, [pc, #16] @ (80179b8 <__sinit+0x28>)
  56929. 80179a6: 6223 str r3, [r4, #32]
  56930. 80179a8: 4b04 ldr r3, [pc, #16] @ (80179bc <__sinit+0x2c>)
  56931. 80179aa: 681b ldr r3, [r3, #0]
  56932. 80179ac: 2b00 cmp r3, #0
  56933. 80179ae: d1f5 bne.n 801799c <__sinit+0xc>
  56934. 80179b0: f7ff ffc4 bl 801793c <global_stdio_init.part.0>
  56935. 80179b4: e7f2 b.n 801799c <__sinit+0xc>
  56936. 80179b6: bf00 nop
  56937. 80179b8: 080178fd .word 0x080178fd
  56938. 80179bc: 240131a0 .word 0x240131a0
  56939. 080179c0 <_fwalk_sglue>:
  56940. 80179c0: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr}
  56941. 80179c4: 4607 mov r7, r0
  56942. 80179c6: 4688 mov r8, r1
  56943. 80179c8: 4614 mov r4, r2
  56944. 80179ca: 2600 movs r6, #0
  56945. 80179cc: e9d4 9501 ldrd r9, r5, [r4, #4]
  56946. 80179d0: f1b9 0901 subs.w r9, r9, #1
  56947. 80179d4: d505 bpl.n 80179e2 <_fwalk_sglue+0x22>
  56948. 80179d6: 6824 ldr r4, [r4, #0]
  56949. 80179d8: 2c00 cmp r4, #0
  56950. 80179da: d1f7 bne.n 80179cc <_fwalk_sglue+0xc>
  56951. 80179dc: 4630 mov r0, r6
  56952. 80179de: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc}
  56953. 80179e2: 89ab ldrh r3, [r5, #12]
  56954. 80179e4: 2b01 cmp r3, #1
  56955. 80179e6: d907 bls.n 80179f8 <_fwalk_sglue+0x38>
  56956. 80179e8: f9b5 300e ldrsh.w r3, [r5, #14]
  56957. 80179ec: 3301 adds r3, #1
  56958. 80179ee: d003 beq.n 80179f8 <_fwalk_sglue+0x38>
  56959. 80179f0: 4629 mov r1, r5
  56960. 80179f2: 4638 mov r0, r7
  56961. 80179f4: 47c0 blx r8
  56962. 80179f6: 4306 orrs r6, r0
  56963. 80179f8: 3568 adds r5, #104 @ 0x68
  56964. 80179fa: e7e9 b.n 80179d0 <_fwalk_sglue+0x10>
  56965. 080179fc <iprintf>:
  56966. 80179fc: b40f push {r0, r1, r2, r3}
  56967. 80179fe: b507 push {r0, r1, r2, lr}
  56968. 8017a00: 4906 ldr r1, [pc, #24] @ (8017a1c <iprintf+0x20>)
  56969. 8017a02: ab04 add r3, sp, #16
  56970. 8017a04: 6808 ldr r0, [r1, #0]
  56971. 8017a06: f853 2b04 ldr.w r2, [r3], #4
  56972. 8017a0a: 6881 ldr r1, [r0, #8]
  56973. 8017a0c: 9301 str r3, [sp, #4]
  56974. 8017a0e: f000 fb3f bl 8018090 <_vfiprintf_r>
  56975. 8017a12: b003 add sp, #12
  56976. 8017a14: f85d eb04 ldr.w lr, [sp], #4
  56977. 8017a18: b004 add sp, #16
  56978. 8017a1a: 4770 bx lr
  56979. 8017a1c: 24000054 .word 0x24000054
  56980. 08017a20 <_puts_r>:
  56981. 8017a20: 6a03 ldr r3, [r0, #32]
  56982. 8017a22: b570 push {r4, r5, r6, lr}
  56983. 8017a24: 6884 ldr r4, [r0, #8]
  56984. 8017a26: 4605 mov r5, r0
  56985. 8017a28: 460e mov r6, r1
  56986. 8017a2a: b90b cbnz r3, 8017a30 <_puts_r+0x10>
  56987. 8017a2c: f7ff ffb0 bl 8017990 <__sinit>
  56988. 8017a30: 6e63 ldr r3, [r4, #100] @ 0x64
  56989. 8017a32: 07db lsls r3, r3, #31
  56990. 8017a34: d405 bmi.n 8017a42 <_puts_r+0x22>
  56991. 8017a36: 89a3 ldrh r3, [r4, #12]
  56992. 8017a38: 0598 lsls r0, r3, #22
  56993. 8017a3a: d402 bmi.n 8017a42 <_puts_r+0x22>
  56994. 8017a3c: 6da0 ldr r0, [r4, #88] @ 0x58
  56995. 8017a3e: f000 f9f4 bl 8017e2a <__retarget_lock_acquire_recursive>
  56996. 8017a42: 89a3 ldrh r3, [r4, #12]
  56997. 8017a44: 0719 lsls r1, r3, #28
  56998. 8017a46: d502 bpl.n 8017a4e <_puts_r+0x2e>
  56999. 8017a48: 6923 ldr r3, [r4, #16]
  57000. 8017a4a: 2b00 cmp r3, #0
  57001. 8017a4c: d135 bne.n 8017aba <_puts_r+0x9a>
  57002. 8017a4e: 4621 mov r1, r4
  57003. 8017a50: 4628 mov r0, r5
  57004. 8017a52: f000 f8c5 bl 8017be0 <__swsetup_r>
  57005. 8017a56: b380 cbz r0, 8017aba <_puts_r+0x9a>
  57006. 8017a58: f04f 35ff mov.w r5, #4294967295 @ 0xffffffff
  57007. 8017a5c: 6e63 ldr r3, [r4, #100] @ 0x64
  57008. 8017a5e: 07da lsls r2, r3, #31
  57009. 8017a60: d405 bmi.n 8017a6e <_puts_r+0x4e>
  57010. 8017a62: 89a3 ldrh r3, [r4, #12]
  57011. 8017a64: 059b lsls r3, r3, #22
  57012. 8017a66: d402 bmi.n 8017a6e <_puts_r+0x4e>
  57013. 8017a68: 6da0 ldr r0, [r4, #88] @ 0x58
  57014. 8017a6a: f000 f9df bl 8017e2c <__retarget_lock_release_recursive>
  57015. 8017a6e: 4628 mov r0, r5
  57016. 8017a70: bd70 pop {r4, r5, r6, pc}
  57017. 8017a72: 2b00 cmp r3, #0
  57018. 8017a74: da04 bge.n 8017a80 <_puts_r+0x60>
  57019. 8017a76: 69a2 ldr r2, [r4, #24]
  57020. 8017a78: 429a cmp r2, r3
  57021. 8017a7a: dc17 bgt.n 8017aac <_puts_r+0x8c>
  57022. 8017a7c: 290a cmp r1, #10
  57023. 8017a7e: d015 beq.n 8017aac <_puts_r+0x8c>
  57024. 8017a80: 6823 ldr r3, [r4, #0]
  57025. 8017a82: 1c5a adds r2, r3, #1
  57026. 8017a84: 6022 str r2, [r4, #0]
  57027. 8017a86: 7019 strb r1, [r3, #0]
  57028. 8017a88: 68a3 ldr r3, [r4, #8]
  57029. 8017a8a: f816 1f01 ldrb.w r1, [r6, #1]!
  57030. 8017a8e: 3b01 subs r3, #1
  57031. 8017a90: 60a3 str r3, [r4, #8]
  57032. 8017a92: 2900 cmp r1, #0
  57033. 8017a94: d1ed bne.n 8017a72 <_puts_r+0x52>
  57034. 8017a96: 2b00 cmp r3, #0
  57035. 8017a98: da11 bge.n 8017abe <_puts_r+0x9e>
  57036. 8017a9a: 4622 mov r2, r4
  57037. 8017a9c: 210a movs r1, #10
  57038. 8017a9e: 4628 mov r0, r5
  57039. 8017aa0: f000 f85f bl 8017b62 <__swbuf_r>
  57040. 8017aa4: 3001 adds r0, #1
  57041. 8017aa6: d0d7 beq.n 8017a58 <_puts_r+0x38>
  57042. 8017aa8: 250a movs r5, #10
  57043. 8017aaa: e7d7 b.n 8017a5c <_puts_r+0x3c>
  57044. 8017aac: 4622 mov r2, r4
  57045. 8017aae: 4628 mov r0, r5
  57046. 8017ab0: f000 f857 bl 8017b62 <__swbuf_r>
  57047. 8017ab4: 3001 adds r0, #1
  57048. 8017ab6: d1e7 bne.n 8017a88 <_puts_r+0x68>
  57049. 8017ab8: e7ce b.n 8017a58 <_puts_r+0x38>
  57050. 8017aba: 3e01 subs r6, #1
  57051. 8017abc: e7e4 b.n 8017a88 <_puts_r+0x68>
  57052. 8017abe: 6823 ldr r3, [r4, #0]
  57053. 8017ac0: 1c5a adds r2, r3, #1
  57054. 8017ac2: 6022 str r2, [r4, #0]
  57055. 8017ac4: 220a movs r2, #10
  57056. 8017ac6: 701a strb r2, [r3, #0]
  57057. 8017ac8: e7ee b.n 8017aa8 <_puts_r+0x88>
  57058. ...
  57059. 08017acc <puts>:
  57060. 8017acc: 4b02 ldr r3, [pc, #8] @ (8017ad8 <puts+0xc>)
  57061. 8017ace: 4601 mov r1, r0
  57062. 8017ad0: 6818 ldr r0, [r3, #0]
  57063. 8017ad2: f7ff bfa5 b.w 8017a20 <_puts_r>
  57064. 8017ad6: bf00 nop
  57065. 8017ad8: 24000054 .word 0x24000054
  57066. 08017adc <__sread>:
  57067. 8017adc: b510 push {r4, lr}
  57068. 8017ade: 460c mov r4, r1
  57069. 8017ae0: f9b1 100e ldrsh.w r1, [r1, #14]
  57070. 8017ae4: f000 f952 bl 8017d8c <_read_r>
  57071. 8017ae8: 2800 cmp r0, #0
  57072. 8017aea: bfab itete ge
  57073. 8017aec: 6d63 ldrge r3, [r4, #84] @ 0x54
  57074. 8017aee: 89a3 ldrhlt r3, [r4, #12]
  57075. 8017af0: 181b addge r3, r3, r0
  57076. 8017af2: f423 5380 biclt.w r3, r3, #4096 @ 0x1000
  57077. 8017af6: bfac ite ge
  57078. 8017af8: 6563 strge r3, [r4, #84] @ 0x54
  57079. 8017afa: 81a3 strhlt r3, [r4, #12]
  57080. 8017afc: bd10 pop {r4, pc}
  57081. 08017afe <__swrite>:
  57082. 8017afe: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
  57083. 8017b02: 461f mov r7, r3
  57084. 8017b04: 898b ldrh r3, [r1, #12]
  57085. 8017b06: 05db lsls r3, r3, #23
  57086. 8017b08: 4605 mov r5, r0
  57087. 8017b0a: 460c mov r4, r1
  57088. 8017b0c: 4616 mov r6, r2
  57089. 8017b0e: d505 bpl.n 8017b1c <__swrite+0x1e>
  57090. 8017b10: f9b1 100e ldrsh.w r1, [r1, #14]
  57091. 8017b14: 2302 movs r3, #2
  57092. 8017b16: 2200 movs r2, #0
  57093. 8017b18: f000 f926 bl 8017d68 <_lseek_r>
  57094. 8017b1c: 89a3 ldrh r3, [r4, #12]
  57095. 8017b1e: f9b4 100e ldrsh.w r1, [r4, #14]
  57096. 8017b22: f423 5380 bic.w r3, r3, #4096 @ 0x1000
  57097. 8017b26: 81a3 strh r3, [r4, #12]
  57098. 8017b28: 4632 mov r2, r6
  57099. 8017b2a: 463b mov r3, r7
  57100. 8017b2c: 4628 mov r0, r5
  57101. 8017b2e: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr}
  57102. 8017b32: f000 b93d b.w 8017db0 <_write_r>
  57103. 08017b36 <__sseek>:
  57104. 8017b36: b510 push {r4, lr}
  57105. 8017b38: 460c mov r4, r1
  57106. 8017b3a: f9b1 100e ldrsh.w r1, [r1, #14]
  57107. 8017b3e: f000 f913 bl 8017d68 <_lseek_r>
  57108. 8017b42: 1c43 adds r3, r0, #1
  57109. 8017b44: 89a3 ldrh r3, [r4, #12]
  57110. 8017b46: bf15 itete ne
  57111. 8017b48: 6560 strne r0, [r4, #84] @ 0x54
  57112. 8017b4a: f423 5380 biceq.w r3, r3, #4096 @ 0x1000
  57113. 8017b4e: f443 5380 orrne.w r3, r3, #4096 @ 0x1000
  57114. 8017b52: 81a3 strheq r3, [r4, #12]
  57115. 8017b54: bf18 it ne
  57116. 8017b56: 81a3 strhne r3, [r4, #12]
  57117. 8017b58: bd10 pop {r4, pc}
  57118. 08017b5a <__sclose>:
  57119. 8017b5a: f9b1 100e ldrsh.w r1, [r1, #14]
  57120. 8017b5e: f000 b89d b.w 8017c9c <_close_r>
  57121. 08017b62 <__swbuf_r>:
  57122. 8017b62: b5f8 push {r3, r4, r5, r6, r7, lr}
  57123. 8017b64: 460e mov r6, r1
  57124. 8017b66: 4614 mov r4, r2
  57125. 8017b68: 4605 mov r5, r0
  57126. 8017b6a: b118 cbz r0, 8017b74 <__swbuf_r+0x12>
  57127. 8017b6c: 6a03 ldr r3, [r0, #32]
  57128. 8017b6e: b90b cbnz r3, 8017b74 <__swbuf_r+0x12>
  57129. 8017b70: f7ff ff0e bl 8017990 <__sinit>
  57130. 8017b74: 69a3 ldr r3, [r4, #24]
  57131. 8017b76: 60a3 str r3, [r4, #8]
  57132. 8017b78: 89a3 ldrh r3, [r4, #12]
  57133. 8017b7a: 071a lsls r2, r3, #28
  57134. 8017b7c: d501 bpl.n 8017b82 <__swbuf_r+0x20>
  57135. 8017b7e: 6923 ldr r3, [r4, #16]
  57136. 8017b80: b943 cbnz r3, 8017b94 <__swbuf_r+0x32>
  57137. 8017b82: 4621 mov r1, r4
  57138. 8017b84: 4628 mov r0, r5
  57139. 8017b86: f000 f82b bl 8017be0 <__swsetup_r>
  57140. 8017b8a: b118 cbz r0, 8017b94 <__swbuf_r+0x32>
  57141. 8017b8c: f04f 37ff mov.w r7, #4294967295 @ 0xffffffff
  57142. 8017b90: 4638 mov r0, r7
  57143. 8017b92: bdf8 pop {r3, r4, r5, r6, r7, pc}
  57144. 8017b94: 6823 ldr r3, [r4, #0]
  57145. 8017b96: 6922 ldr r2, [r4, #16]
  57146. 8017b98: 1a98 subs r0, r3, r2
  57147. 8017b9a: 6963 ldr r3, [r4, #20]
  57148. 8017b9c: b2f6 uxtb r6, r6
  57149. 8017b9e: 4283 cmp r3, r0
  57150. 8017ba0: 4637 mov r7, r6
  57151. 8017ba2: dc05 bgt.n 8017bb0 <__swbuf_r+0x4e>
  57152. 8017ba4: 4621 mov r1, r4
  57153. 8017ba6: 4628 mov r0, r5
  57154. 8017ba8: f000 fd9c bl 80186e4 <_fflush_r>
  57155. 8017bac: 2800 cmp r0, #0
  57156. 8017bae: d1ed bne.n 8017b8c <__swbuf_r+0x2a>
  57157. 8017bb0: 68a3 ldr r3, [r4, #8]
  57158. 8017bb2: 3b01 subs r3, #1
  57159. 8017bb4: 60a3 str r3, [r4, #8]
  57160. 8017bb6: 6823 ldr r3, [r4, #0]
  57161. 8017bb8: 1c5a adds r2, r3, #1
  57162. 8017bba: 6022 str r2, [r4, #0]
  57163. 8017bbc: 701e strb r6, [r3, #0]
  57164. 8017bbe: 6962 ldr r2, [r4, #20]
  57165. 8017bc0: 1c43 adds r3, r0, #1
  57166. 8017bc2: 429a cmp r2, r3
  57167. 8017bc4: d004 beq.n 8017bd0 <__swbuf_r+0x6e>
  57168. 8017bc6: 89a3 ldrh r3, [r4, #12]
  57169. 8017bc8: 07db lsls r3, r3, #31
  57170. 8017bca: d5e1 bpl.n 8017b90 <__swbuf_r+0x2e>
  57171. 8017bcc: 2e0a cmp r6, #10
  57172. 8017bce: d1df bne.n 8017b90 <__swbuf_r+0x2e>
  57173. 8017bd0: 4621 mov r1, r4
  57174. 8017bd2: 4628 mov r0, r5
  57175. 8017bd4: f000 fd86 bl 80186e4 <_fflush_r>
  57176. 8017bd8: 2800 cmp r0, #0
  57177. 8017bda: d0d9 beq.n 8017b90 <__swbuf_r+0x2e>
  57178. 8017bdc: e7d6 b.n 8017b8c <__swbuf_r+0x2a>
  57179. ...
  57180. 08017be0 <__swsetup_r>:
  57181. 8017be0: b538 push {r3, r4, r5, lr}
  57182. 8017be2: 4b29 ldr r3, [pc, #164] @ (8017c88 <__swsetup_r+0xa8>)
  57183. 8017be4: 4605 mov r5, r0
  57184. 8017be6: 6818 ldr r0, [r3, #0]
  57185. 8017be8: 460c mov r4, r1
  57186. 8017bea: b118 cbz r0, 8017bf4 <__swsetup_r+0x14>
  57187. 8017bec: 6a03 ldr r3, [r0, #32]
  57188. 8017bee: b90b cbnz r3, 8017bf4 <__swsetup_r+0x14>
  57189. 8017bf0: f7ff fece bl 8017990 <__sinit>
  57190. 8017bf4: f9b4 300c ldrsh.w r3, [r4, #12]
  57191. 8017bf8: 0719 lsls r1, r3, #28
  57192. 8017bfa: d422 bmi.n 8017c42 <__swsetup_r+0x62>
  57193. 8017bfc: 06da lsls r2, r3, #27
  57194. 8017bfe: d407 bmi.n 8017c10 <__swsetup_r+0x30>
  57195. 8017c00: 2209 movs r2, #9
  57196. 8017c02: 602a str r2, [r5, #0]
  57197. 8017c04: f043 0340 orr.w r3, r3, #64 @ 0x40
  57198. 8017c08: 81a3 strh r3, [r4, #12]
  57199. 8017c0a: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff
  57200. 8017c0e: e033 b.n 8017c78 <__swsetup_r+0x98>
  57201. 8017c10: 0758 lsls r0, r3, #29
  57202. 8017c12: d512 bpl.n 8017c3a <__swsetup_r+0x5a>
  57203. 8017c14: 6b61 ldr r1, [r4, #52] @ 0x34
  57204. 8017c16: b141 cbz r1, 8017c2a <__swsetup_r+0x4a>
  57205. 8017c18: f104 0344 add.w r3, r4, #68 @ 0x44
  57206. 8017c1c: 4299 cmp r1, r3
  57207. 8017c1e: d002 beq.n 8017c26 <__swsetup_r+0x46>
  57208. 8017c20: 4628 mov r0, r5
  57209. 8017c22: f000 f913 bl 8017e4c <_free_r>
  57210. 8017c26: 2300 movs r3, #0
  57211. 8017c28: 6363 str r3, [r4, #52] @ 0x34
  57212. 8017c2a: 89a3 ldrh r3, [r4, #12]
  57213. 8017c2c: f023 0324 bic.w r3, r3, #36 @ 0x24
  57214. 8017c30: 81a3 strh r3, [r4, #12]
  57215. 8017c32: 2300 movs r3, #0
  57216. 8017c34: 6063 str r3, [r4, #4]
  57217. 8017c36: 6923 ldr r3, [r4, #16]
  57218. 8017c38: 6023 str r3, [r4, #0]
  57219. 8017c3a: 89a3 ldrh r3, [r4, #12]
  57220. 8017c3c: f043 0308 orr.w r3, r3, #8
  57221. 8017c40: 81a3 strh r3, [r4, #12]
  57222. 8017c42: 6923 ldr r3, [r4, #16]
  57223. 8017c44: b94b cbnz r3, 8017c5a <__swsetup_r+0x7a>
  57224. 8017c46: 89a3 ldrh r3, [r4, #12]
  57225. 8017c48: f403 7320 and.w r3, r3, #640 @ 0x280
  57226. 8017c4c: f5b3 7f00 cmp.w r3, #512 @ 0x200
  57227. 8017c50: d003 beq.n 8017c5a <__swsetup_r+0x7a>
  57228. 8017c52: 4621 mov r1, r4
  57229. 8017c54: 4628 mov r0, r5
  57230. 8017c56: f000 fd93 bl 8018780 <__smakebuf_r>
  57231. 8017c5a: f9b4 300c ldrsh.w r3, [r4, #12]
  57232. 8017c5e: f013 0201 ands.w r2, r3, #1
  57233. 8017c62: d00a beq.n 8017c7a <__swsetup_r+0x9a>
  57234. 8017c64: 2200 movs r2, #0
  57235. 8017c66: 60a2 str r2, [r4, #8]
  57236. 8017c68: 6962 ldr r2, [r4, #20]
  57237. 8017c6a: 4252 negs r2, r2
  57238. 8017c6c: 61a2 str r2, [r4, #24]
  57239. 8017c6e: 6922 ldr r2, [r4, #16]
  57240. 8017c70: b942 cbnz r2, 8017c84 <__swsetup_r+0xa4>
  57241. 8017c72: f013 0080 ands.w r0, r3, #128 @ 0x80
  57242. 8017c76: d1c5 bne.n 8017c04 <__swsetup_r+0x24>
  57243. 8017c78: bd38 pop {r3, r4, r5, pc}
  57244. 8017c7a: 0799 lsls r1, r3, #30
  57245. 8017c7c: bf58 it pl
  57246. 8017c7e: 6962 ldrpl r2, [r4, #20]
  57247. 8017c80: 60a2 str r2, [r4, #8]
  57248. 8017c82: e7f4 b.n 8017c6e <__swsetup_r+0x8e>
  57249. 8017c84: 2000 movs r0, #0
  57250. 8017c86: e7f7 b.n 8017c78 <__swsetup_r+0x98>
  57251. 8017c88: 24000054 .word 0x24000054
  57252. 08017c8c <memset>:
  57253. 8017c8c: 4402 add r2, r0
  57254. 8017c8e: 4603 mov r3, r0
  57255. 8017c90: 4293 cmp r3, r2
  57256. 8017c92: d100 bne.n 8017c96 <memset+0xa>
  57257. 8017c94: 4770 bx lr
  57258. 8017c96: f803 1b01 strb.w r1, [r3], #1
  57259. 8017c9a: e7f9 b.n 8017c90 <memset+0x4>
  57260. 08017c9c <_close_r>:
  57261. 8017c9c: b538 push {r3, r4, r5, lr}
  57262. 8017c9e: 4d06 ldr r5, [pc, #24] @ (8017cb8 <_close_r+0x1c>)
  57263. 8017ca0: 2300 movs r3, #0
  57264. 8017ca2: 4604 mov r4, r0
  57265. 8017ca4: 4608 mov r0, r1
  57266. 8017ca6: 602b str r3, [r5, #0]
  57267. 8017ca8: f7ec fced bl 8004686 <_close>
  57268. 8017cac: 1c43 adds r3, r0, #1
  57269. 8017cae: d102 bne.n 8017cb6 <_close_r+0x1a>
  57270. 8017cb0: 682b ldr r3, [r5, #0]
  57271. 8017cb2: b103 cbz r3, 8017cb6 <_close_r+0x1a>
  57272. 8017cb4: 6023 str r3, [r4, #0]
  57273. 8017cb6: bd38 pop {r3, r4, r5, pc}
  57274. 8017cb8: 240131a4 .word 0x240131a4
  57275. 08017cbc <_reclaim_reent>:
  57276. 8017cbc: 4b29 ldr r3, [pc, #164] @ (8017d64 <_reclaim_reent+0xa8>)
  57277. 8017cbe: 681b ldr r3, [r3, #0]
  57278. 8017cc0: 4283 cmp r3, r0
  57279. 8017cc2: b570 push {r4, r5, r6, lr}
  57280. 8017cc4: 4604 mov r4, r0
  57281. 8017cc6: d04b beq.n 8017d60 <_reclaim_reent+0xa4>
  57282. 8017cc8: 69c3 ldr r3, [r0, #28]
  57283. 8017cca: b1ab cbz r3, 8017cf8 <_reclaim_reent+0x3c>
  57284. 8017ccc: 68db ldr r3, [r3, #12]
  57285. 8017cce: b16b cbz r3, 8017cec <_reclaim_reent+0x30>
  57286. 8017cd0: 2500 movs r5, #0
  57287. 8017cd2: 69e3 ldr r3, [r4, #28]
  57288. 8017cd4: 68db ldr r3, [r3, #12]
  57289. 8017cd6: 5959 ldr r1, [r3, r5]
  57290. 8017cd8: 2900 cmp r1, #0
  57291. 8017cda: d13b bne.n 8017d54 <_reclaim_reent+0x98>
  57292. 8017cdc: 3504 adds r5, #4
  57293. 8017cde: 2d80 cmp r5, #128 @ 0x80
  57294. 8017ce0: d1f7 bne.n 8017cd2 <_reclaim_reent+0x16>
  57295. 8017ce2: 69e3 ldr r3, [r4, #28]
  57296. 8017ce4: 4620 mov r0, r4
  57297. 8017ce6: 68d9 ldr r1, [r3, #12]
  57298. 8017ce8: f000 f8b0 bl 8017e4c <_free_r>
  57299. 8017cec: 69e3 ldr r3, [r4, #28]
  57300. 8017cee: 6819 ldr r1, [r3, #0]
  57301. 8017cf0: b111 cbz r1, 8017cf8 <_reclaim_reent+0x3c>
  57302. 8017cf2: 4620 mov r0, r4
  57303. 8017cf4: f000 f8aa bl 8017e4c <_free_r>
  57304. 8017cf8: 6961 ldr r1, [r4, #20]
  57305. 8017cfa: b111 cbz r1, 8017d02 <_reclaim_reent+0x46>
  57306. 8017cfc: 4620 mov r0, r4
  57307. 8017cfe: f000 f8a5 bl 8017e4c <_free_r>
  57308. 8017d02: 69e1 ldr r1, [r4, #28]
  57309. 8017d04: b111 cbz r1, 8017d0c <_reclaim_reent+0x50>
  57310. 8017d06: 4620 mov r0, r4
  57311. 8017d08: f000 f8a0 bl 8017e4c <_free_r>
  57312. 8017d0c: 6b21 ldr r1, [r4, #48] @ 0x30
  57313. 8017d0e: b111 cbz r1, 8017d16 <_reclaim_reent+0x5a>
  57314. 8017d10: 4620 mov r0, r4
  57315. 8017d12: f000 f89b bl 8017e4c <_free_r>
  57316. 8017d16: 6b61 ldr r1, [r4, #52] @ 0x34
  57317. 8017d18: b111 cbz r1, 8017d20 <_reclaim_reent+0x64>
  57318. 8017d1a: 4620 mov r0, r4
  57319. 8017d1c: f000 f896 bl 8017e4c <_free_r>
  57320. 8017d20: 6ba1 ldr r1, [r4, #56] @ 0x38
  57321. 8017d22: b111 cbz r1, 8017d2a <_reclaim_reent+0x6e>
  57322. 8017d24: 4620 mov r0, r4
  57323. 8017d26: f000 f891 bl 8017e4c <_free_r>
  57324. 8017d2a: 6ca1 ldr r1, [r4, #72] @ 0x48
  57325. 8017d2c: b111 cbz r1, 8017d34 <_reclaim_reent+0x78>
  57326. 8017d2e: 4620 mov r0, r4
  57327. 8017d30: f000 f88c bl 8017e4c <_free_r>
  57328. 8017d34: 6c61 ldr r1, [r4, #68] @ 0x44
  57329. 8017d36: b111 cbz r1, 8017d3e <_reclaim_reent+0x82>
  57330. 8017d38: 4620 mov r0, r4
  57331. 8017d3a: f000 f887 bl 8017e4c <_free_r>
  57332. 8017d3e: 6ae1 ldr r1, [r4, #44] @ 0x2c
  57333. 8017d40: b111 cbz r1, 8017d48 <_reclaim_reent+0x8c>
  57334. 8017d42: 4620 mov r0, r4
  57335. 8017d44: f000 f882 bl 8017e4c <_free_r>
  57336. 8017d48: 6a23 ldr r3, [r4, #32]
  57337. 8017d4a: b14b cbz r3, 8017d60 <_reclaim_reent+0xa4>
  57338. 8017d4c: 4620 mov r0, r4
  57339. 8017d4e: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr}
  57340. 8017d52: 4718 bx r3
  57341. 8017d54: 680e ldr r6, [r1, #0]
  57342. 8017d56: 4620 mov r0, r4
  57343. 8017d58: f000 f878 bl 8017e4c <_free_r>
  57344. 8017d5c: 4631 mov r1, r6
  57345. 8017d5e: e7bb b.n 8017cd8 <_reclaim_reent+0x1c>
  57346. 8017d60: bd70 pop {r4, r5, r6, pc}
  57347. 8017d62: bf00 nop
  57348. 8017d64: 24000054 .word 0x24000054
  57349. 08017d68 <_lseek_r>:
  57350. 8017d68: b538 push {r3, r4, r5, lr}
  57351. 8017d6a: 4d07 ldr r5, [pc, #28] @ (8017d88 <_lseek_r+0x20>)
  57352. 8017d6c: 4604 mov r4, r0
  57353. 8017d6e: 4608 mov r0, r1
  57354. 8017d70: 4611 mov r1, r2
  57355. 8017d72: 2200 movs r2, #0
  57356. 8017d74: 602a str r2, [r5, #0]
  57357. 8017d76: 461a mov r2, r3
  57358. 8017d78: f7ec fcac bl 80046d4 <_lseek>
  57359. 8017d7c: 1c43 adds r3, r0, #1
  57360. 8017d7e: d102 bne.n 8017d86 <_lseek_r+0x1e>
  57361. 8017d80: 682b ldr r3, [r5, #0]
  57362. 8017d82: b103 cbz r3, 8017d86 <_lseek_r+0x1e>
  57363. 8017d84: 6023 str r3, [r4, #0]
  57364. 8017d86: bd38 pop {r3, r4, r5, pc}
  57365. 8017d88: 240131a4 .word 0x240131a4
  57366. 08017d8c <_read_r>:
  57367. 8017d8c: b538 push {r3, r4, r5, lr}
  57368. 8017d8e: 4d07 ldr r5, [pc, #28] @ (8017dac <_read_r+0x20>)
  57369. 8017d90: 4604 mov r4, r0
  57370. 8017d92: 4608 mov r0, r1
  57371. 8017d94: 4611 mov r1, r2
  57372. 8017d96: 2200 movs r2, #0
  57373. 8017d98: 602a str r2, [r5, #0]
  57374. 8017d9a: 461a mov r2, r3
  57375. 8017d9c: f7ec fc3a bl 8004614 <_read>
  57376. 8017da0: 1c43 adds r3, r0, #1
  57377. 8017da2: d102 bne.n 8017daa <_read_r+0x1e>
  57378. 8017da4: 682b ldr r3, [r5, #0]
  57379. 8017da6: b103 cbz r3, 8017daa <_read_r+0x1e>
  57380. 8017da8: 6023 str r3, [r4, #0]
  57381. 8017daa: bd38 pop {r3, r4, r5, pc}
  57382. 8017dac: 240131a4 .word 0x240131a4
  57383. 08017db0 <_write_r>:
  57384. 8017db0: b538 push {r3, r4, r5, lr}
  57385. 8017db2: 4d07 ldr r5, [pc, #28] @ (8017dd0 <_write_r+0x20>)
  57386. 8017db4: 4604 mov r4, r0
  57387. 8017db6: 4608 mov r0, r1
  57388. 8017db8: 4611 mov r1, r2
  57389. 8017dba: 2200 movs r2, #0
  57390. 8017dbc: 602a str r2, [r5, #0]
  57391. 8017dbe: 461a mov r2, r3
  57392. 8017dc0: f7ec fc45 bl 800464e <_write>
  57393. 8017dc4: 1c43 adds r3, r0, #1
  57394. 8017dc6: d102 bne.n 8017dce <_write_r+0x1e>
  57395. 8017dc8: 682b ldr r3, [r5, #0]
  57396. 8017dca: b103 cbz r3, 8017dce <_write_r+0x1e>
  57397. 8017dcc: 6023 str r3, [r4, #0]
  57398. 8017dce: bd38 pop {r3, r4, r5, pc}
  57399. 8017dd0: 240131a4 .word 0x240131a4
  57400. 08017dd4 <__errno>:
  57401. 8017dd4: 4b01 ldr r3, [pc, #4] @ (8017ddc <__errno+0x8>)
  57402. 8017dd6: 6818 ldr r0, [r3, #0]
  57403. 8017dd8: 4770 bx lr
  57404. 8017dda: bf00 nop
  57405. 8017ddc: 24000054 .word 0x24000054
  57406. 08017de0 <__libc_init_array>:
  57407. 8017de0: b570 push {r4, r5, r6, lr}
  57408. 8017de2: 4d0d ldr r5, [pc, #52] @ (8017e18 <__libc_init_array+0x38>)
  57409. 8017de4: 4c0d ldr r4, [pc, #52] @ (8017e1c <__libc_init_array+0x3c>)
  57410. 8017de6: 1b64 subs r4, r4, r5
  57411. 8017de8: 10a4 asrs r4, r4, #2
  57412. 8017dea: 2600 movs r6, #0
  57413. 8017dec: 42a6 cmp r6, r4
  57414. 8017dee: d109 bne.n 8017e04 <__libc_init_array+0x24>
  57415. 8017df0: 4d0b ldr r5, [pc, #44] @ (8017e20 <__libc_init_array+0x40>)
  57416. 8017df2: 4c0c ldr r4, [pc, #48] @ (8017e24 <__libc_init_array+0x44>)
  57417. 8017df4: f000 fdd4 bl 80189a0 <_init>
  57418. 8017df8: 1b64 subs r4, r4, r5
  57419. 8017dfa: 10a4 asrs r4, r4, #2
  57420. 8017dfc: 2600 movs r6, #0
  57421. 8017dfe: 42a6 cmp r6, r4
  57422. 8017e00: d105 bne.n 8017e0e <__libc_init_array+0x2e>
  57423. 8017e02: bd70 pop {r4, r5, r6, pc}
  57424. 8017e04: f855 3b04 ldr.w r3, [r5], #4
  57425. 8017e08: 4798 blx r3
  57426. 8017e0a: 3601 adds r6, #1
  57427. 8017e0c: e7ee b.n 8017dec <__libc_init_array+0xc>
  57428. 8017e0e: f855 3b04 ldr.w r3, [r5], #4
  57429. 8017e12: 4798 blx r3
  57430. 8017e14: 3601 adds r6, #1
  57431. 8017e16: e7f2 b.n 8017dfe <__libc_init_array+0x1e>
  57432. 8017e18: 08018be0 .word 0x08018be0
  57433. 8017e1c: 08018be0 .word 0x08018be0
  57434. 8017e20: 08018be0 .word 0x08018be0
  57435. 8017e24: 08018be4 .word 0x08018be4
  57436. 08017e28 <__retarget_lock_init_recursive>:
  57437. 8017e28: 4770 bx lr
  57438. 08017e2a <__retarget_lock_acquire_recursive>:
  57439. 8017e2a: 4770 bx lr
  57440. 08017e2c <__retarget_lock_release_recursive>:
  57441. 8017e2c: 4770 bx lr
  57442. 08017e2e <memcpy>:
  57443. 8017e2e: 440a add r2, r1
  57444. 8017e30: 4291 cmp r1, r2
  57445. 8017e32: f100 33ff add.w r3, r0, #4294967295 @ 0xffffffff
  57446. 8017e36: d100 bne.n 8017e3a <memcpy+0xc>
  57447. 8017e38: 4770 bx lr
  57448. 8017e3a: b510 push {r4, lr}
  57449. 8017e3c: f811 4b01 ldrb.w r4, [r1], #1
  57450. 8017e40: f803 4f01 strb.w r4, [r3, #1]!
  57451. 8017e44: 4291 cmp r1, r2
  57452. 8017e46: d1f9 bne.n 8017e3c <memcpy+0xe>
  57453. 8017e48: bd10 pop {r4, pc}
  57454. ...
  57455. 08017e4c <_free_r>:
  57456. 8017e4c: b538 push {r3, r4, r5, lr}
  57457. 8017e4e: 4605 mov r5, r0
  57458. 8017e50: 2900 cmp r1, #0
  57459. 8017e52: d041 beq.n 8017ed8 <_free_r+0x8c>
  57460. 8017e54: f851 3c04 ldr.w r3, [r1, #-4]
  57461. 8017e58: 1f0c subs r4, r1, #4
  57462. 8017e5a: 2b00 cmp r3, #0
  57463. 8017e5c: bfb8 it lt
  57464. 8017e5e: 18e4 addlt r4, r4, r3
  57465. 8017e60: f000 f8e0 bl 8018024 <__malloc_lock>
  57466. 8017e64: 4a1d ldr r2, [pc, #116] @ (8017edc <_free_r+0x90>)
  57467. 8017e66: 6813 ldr r3, [r2, #0]
  57468. 8017e68: b933 cbnz r3, 8017e78 <_free_r+0x2c>
  57469. 8017e6a: 6063 str r3, [r4, #4]
  57470. 8017e6c: 6014 str r4, [r2, #0]
  57471. 8017e6e: 4628 mov r0, r5
  57472. 8017e70: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr}
  57473. 8017e74: f000 b8dc b.w 8018030 <__malloc_unlock>
  57474. 8017e78: 42a3 cmp r3, r4
  57475. 8017e7a: d908 bls.n 8017e8e <_free_r+0x42>
  57476. 8017e7c: 6820 ldr r0, [r4, #0]
  57477. 8017e7e: 1821 adds r1, r4, r0
  57478. 8017e80: 428b cmp r3, r1
  57479. 8017e82: bf01 itttt eq
  57480. 8017e84: 6819 ldreq r1, [r3, #0]
  57481. 8017e86: 685b ldreq r3, [r3, #4]
  57482. 8017e88: 1809 addeq r1, r1, r0
  57483. 8017e8a: 6021 streq r1, [r4, #0]
  57484. 8017e8c: e7ed b.n 8017e6a <_free_r+0x1e>
  57485. 8017e8e: 461a mov r2, r3
  57486. 8017e90: 685b ldr r3, [r3, #4]
  57487. 8017e92: b10b cbz r3, 8017e98 <_free_r+0x4c>
  57488. 8017e94: 42a3 cmp r3, r4
  57489. 8017e96: d9fa bls.n 8017e8e <_free_r+0x42>
  57490. 8017e98: 6811 ldr r1, [r2, #0]
  57491. 8017e9a: 1850 adds r0, r2, r1
  57492. 8017e9c: 42a0 cmp r0, r4
  57493. 8017e9e: d10b bne.n 8017eb8 <_free_r+0x6c>
  57494. 8017ea0: 6820 ldr r0, [r4, #0]
  57495. 8017ea2: 4401 add r1, r0
  57496. 8017ea4: 1850 adds r0, r2, r1
  57497. 8017ea6: 4283 cmp r3, r0
  57498. 8017ea8: 6011 str r1, [r2, #0]
  57499. 8017eaa: d1e0 bne.n 8017e6e <_free_r+0x22>
  57500. 8017eac: 6818 ldr r0, [r3, #0]
  57501. 8017eae: 685b ldr r3, [r3, #4]
  57502. 8017eb0: 6053 str r3, [r2, #4]
  57503. 8017eb2: 4408 add r0, r1
  57504. 8017eb4: 6010 str r0, [r2, #0]
  57505. 8017eb6: e7da b.n 8017e6e <_free_r+0x22>
  57506. 8017eb8: d902 bls.n 8017ec0 <_free_r+0x74>
  57507. 8017eba: 230c movs r3, #12
  57508. 8017ebc: 602b str r3, [r5, #0]
  57509. 8017ebe: e7d6 b.n 8017e6e <_free_r+0x22>
  57510. 8017ec0: 6820 ldr r0, [r4, #0]
  57511. 8017ec2: 1821 adds r1, r4, r0
  57512. 8017ec4: 428b cmp r3, r1
  57513. 8017ec6: bf04 itt eq
  57514. 8017ec8: 6819 ldreq r1, [r3, #0]
  57515. 8017eca: 685b ldreq r3, [r3, #4]
  57516. 8017ecc: 6063 str r3, [r4, #4]
  57517. 8017ece: bf04 itt eq
  57518. 8017ed0: 1809 addeq r1, r1, r0
  57519. 8017ed2: 6021 streq r1, [r4, #0]
  57520. 8017ed4: 6054 str r4, [r2, #4]
  57521. 8017ed6: e7ca b.n 8017e6e <_free_r+0x22>
  57522. 8017ed8: bd38 pop {r3, r4, r5, pc}
  57523. 8017eda: bf00 nop
  57524. 8017edc: 240131b0 .word 0x240131b0
  57525. 08017ee0 <sbrk_aligned>:
  57526. 8017ee0: b570 push {r4, r5, r6, lr}
  57527. 8017ee2: 4e0f ldr r6, [pc, #60] @ (8017f20 <sbrk_aligned+0x40>)
  57528. 8017ee4: 460c mov r4, r1
  57529. 8017ee6: 6831 ldr r1, [r6, #0]
  57530. 8017ee8: 4605 mov r5, r0
  57531. 8017eea: b911 cbnz r1, 8017ef2 <sbrk_aligned+0x12>
  57532. 8017eec: f000 fca6 bl 801883c <_sbrk_r>
  57533. 8017ef0: 6030 str r0, [r6, #0]
  57534. 8017ef2: 4621 mov r1, r4
  57535. 8017ef4: 4628 mov r0, r5
  57536. 8017ef6: f000 fca1 bl 801883c <_sbrk_r>
  57537. 8017efa: 1c43 adds r3, r0, #1
  57538. 8017efc: d103 bne.n 8017f06 <sbrk_aligned+0x26>
  57539. 8017efe: f04f 34ff mov.w r4, #4294967295 @ 0xffffffff
  57540. 8017f02: 4620 mov r0, r4
  57541. 8017f04: bd70 pop {r4, r5, r6, pc}
  57542. 8017f06: 1cc4 adds r4, r0, #3
  57543. 8017f08: f024 0403 bic.w r4, r4, #3
  57544. 8017f0c: 42a0 cmp r0, r4
  57545. 8017f0e: d0f8 beq.n 8017f02 <sbrk_aligned+0x22>
  57546. 8017f10: 1a21 subs r1, r4, r0
  57547. 8017f12: 4628 mov r0, r5
  57548. 8017f14: f000 fc92 bl 801883c <_sbrk_r>
  57549. 8017f18: 3001 adds r0, #1
  57550. 8017f1a: d1f2 bne.n 8017f02 <sbrk_aligned+0x22>
  57551. 8017f1c: e7ef b.n 8017efe <sbrk_aligned+0x1e>
  57552. 8017f1e: bf00 nop
  57553. 8017f20: 240131ac .word 0x240131ac
  57554. 08017f24 <_malloc_r>:
  57555. 8017f24: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr}
  57556. 8017f28: 1ccd adds r5, r1, #3
  57557. 8017f2a: f025 0503 bic.w r5, r5, #3
  57558. 8017f2e: 3508 adds r5, #8
  57559. 8017f30: 2d0c cmp r5, #12
  57560. 8017f32: bf38 it cc
  57561. 8017f34: 250c movcc r5, #12
  57562. 8017f36: 2d00 cmp r5, #0
  57563. 8017f38: 4606 mov r6, r0
  57564. 8017f3a: db01 blt.n 8017f40 <_malloc_r+0x1c>
  57565. 8017f3c: 42a9 cmp r1, r5
  57566. 8017f3e: d904 bls.n 8017f4a <_malloc_r+0x26>
  57567. 8017f40: 230c movs r3, #12
  57568. 8017f42: 6033 str r3, [r6, #0]
  57569. 8017f44: 2000 movs r0, #0
  57570. 8017f46: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc}
  57571. 8017f4a: f8df 80d4 ldr.w r8, [pc, #212] @ 8018020 <_malloc_r+0xfc>
  57572. 8017f4e: f000 f869 bl 8018024 <__malloc_lock>
  57573. 8017f52: f8d8 3000 ldr.w r3, [r8]
  57574. 8017f56: 461c mov r4, r3
  57575. 8017f58: bb44 cbnz r4, 8017fac <_malloc_r+0x88>
  57576. 8017f5a: 4629 mov r1, r5
  57577. 8017f5c: 4630 mov r0, r6
  57578. 8017f5e: f7ff ffbf bl 8017ee0 <sbrk_aligned>
  57579. 8017f62: 1c43 adds r3, r0, #1
  57580. 8017f64: 4604 mov r4, r0
  57581. 8017f66: d158 bne.n 801801a <_malloc_r+0xf6>
  57582. 8017f68: f8d8 4000 ldr.w r4, [r8]
  57583. 8017f6c: 4627 mov r7, r4
  57584. 8017f6e: 2f00 cmp r7, #0
  57585. 8017f70: d143 bne.n 8017ffa <_malloc_r+0xd6>
  57586. 8017f72: 2c00 cmp r4, #0
  57587. 8017f74: d04b beq.n 801800e <_malloc_r+0xea>
  57588. 8017f76: 6823 ldr r3, [r4, #0]
  57589. 8017f78: 4639 mov r1, r7
  57590. 8017f7a: 4630 mov r0, r6
  57591. 8017f7c: eb04 0903 add.w r9, r4, r3
  57592. 8017f80: f000 fc5c bl 801883c <_sbrk_r>
  57593. 8017f84: 4581 cmp r9, r0
  57594. 8017f86: d142 bne.n 801800e <_malloc_r+0xea>
  57595. 8017f88: 6821 ldr r1, [r4, #0]
  57596. 8017f8a: 1a6d subs r5, r5, r1
  57597. 8017f8c: 4629 mov r1, r5
  57598. 8017f8e: 4630 mov r0, r6
  57599. 8017f90: f7ff ffa6 bl 8017ee0 <sbrk_aligned>
  57600. 8017f94: 3001 adds r0, #1
  57601. 8017f96: d03a beq.n 801800e <_malloc_r+0xea>
  57602. 8017f98: 6823 ldr r3, [r4, #0]
  57603. 8017f9a: 442b add r3, r5
  57604. 8017f9c: 6023 str r3, [r4, #0]
  57605. 8017f9e: f8d8 3000 ldr.w r3, [r8]
  57606. 8017fa2: 685a ldr r2, [r3, #4]
  57607. 8017fa4: bb62 cbnz r2, 8018000 <_malloc_r+0xdc>
  57608. 8017fa6: f8c8 7000 str.w r7, [r8]
  57609. 8017faa: e00f b.n 8017fcc <_malloc_r+0xa8>
  57610. 8017fac: 6822 ldr r2, [r4, #0]
  57611. 8017fae: 1b52 subs r2, r2, r5
  57612. 8017fb0: d420 bmi.n 8017ff4 <_malloc_r+0xd0>
  57613. 8017fb2: 2a0b cmp r2, #11
  57614. 8017fb4: d917 bls.n 8017fe6 <_malloc_r+0xc2>
  57615. 8017fb6: 1961 adds r1, r4, r5
  57616. 8017fb8: 42a3 cmp r3, r4
  57617. 8017fba: 6025 str r5, [r4, #0]
  57618. 8017fbc: bf18 it ne
  57619. 8017fbe: 6059 strne r1, [r3, #4]
  57620. 8017fc0: 6863 ldr r3, [r4, #4]
  57621. 8017fc2: bf08 it eq
  57622. 8017fc4: f8c8 1000 streq.w r1, [r8]
  57623. 8017fc8: 5162 str r2, [r4, r5]
  57624. 8017fca: 604b str r3, [r1, #4]
  57625. 8017fcc: 4630 mov r0, r6
  57626. 8017fce: f000 f82f bl 8018030 <__malloc_unlock>
  57627. 8017fd2: f104 000b add.w r0, r4, #11
  57628. 8017fd6: 1d23 adds r3, r4, #4
  57629. 8017fd8: f020 0007 bic.w r0, r0, #7
  57630. 8017fdc: 1ac2 subs r2, r0, r3
  57631. 8017fde: bf1c itt ne
  57632. 8017fe0: 1a1b subne r3, r3, r0
  57633. 8017fe2: 50a3 strne r3, [r4, r2]
  57634. 8017fe4: e7af b.n 8017f46 <_malloc_r+0x22>
  57635. 8017fe6: 6862 ldr r2, [r4, #4]
  57636. 8017fe8: 42a3 cmp r3, r4
  57637. 8017fea: bf0c ite eq
  57638. 8017fec: f8c8 2000 streq.w r2, [r8]
  57639. 8017ff0: 605a strne r2, [r3, #4]
  57640. 8017ff2: e7eb b.n 8017fcc <_malloc_r+0xa8>
  57641. 8017ff4: 4623 mov r3, r4
  57642. 8017ff6: 6864 ldr r4, [r4, #4]
  57643. 8017ff8: e7ae b.n 8017f58 <_malloc_r+0x34>
  57644. 8017ffa: 463c mov r4, r7
  57645. 8017ffc: 687f ldr r7, [r7, #4]
  57646. 8017ffe: e7b6 b.n 8017f6e <_malloc_r+0x4a>
  57647. 8018000: 461a mov r2, r3
  57648. 8018002: 685b ldr r3, [r3, #4]
  57649. 8018004: 42a3 cmp r3, r4
  57650. 8018006: d1fb bne.n 8018000 <_malloc_r+0xdc>
  57651. 8018008: 2300 movs r3, #0
  57652. 801800a: 6053 str r3, [r2, #4]
  57653. 801800c: e7de b.n 8017fcc <_malloc_r+0xa8>
  57654. 801800e: 230c movs r3, #12
  57655. 8018010: 6033 str r3, [r6, #0]
  57656. 8018012: 4630 mov r0, r6
  57657. 8018014: f000 f80c bl 8018030 <__malloc_unlock>
  57658. 8018018: e794 b.n 8017f44 <_malloc_r+0x20>
  57659. 801801a: 6005 str r5, [r0, #0]
  57660. 801801c: e7d6 b.n 8017fcc <_malloc_r+0xa8>
  57661. 801801e: bf00 nop
  57662. 8018020: 240131b0 .word 0x240131b0
  57663. 08018024 <__malloc_lock>:
  57664. 8018024: 4801 ldr r0, [pc, #4] @ (801802c <__malloc_lock+0x8>)
  57665. 8018026: f7ff bf00 b.w 8017e2a <__retarget_lock_acquire_recursive>
  57666. 801802a: bf00 nop
  57667. 801802c: 240131a8 .word 0x240131a8
  57668. 08018030 <__malloc_unlock>:
  57669. 8018030: 4801 ldr r0, [pc, #4] @ (8018038 <__malloc_unlock+0x8>)
  57670. 8018032: f7ff befb b.w 8017e2c <__retarget_lock_release_recursive>
  57671. 8018036: bf00 nop
  57672. 8018038: 240131a8 .word 0x240131a8
  57673. 0801803c <__sfputc_r>:
  57674. 801803c: 6893 ldr r3, [r2, #8]
  57675. 801803e: 3b01 subs r3, #1
  57676. 8018040: 2b00 cmp r3, #0
  57677. 8018042: b410 push {r4}
  57678. 8018044: 6093 str r3, [r2, #8]
  57679. 8018046: da08 bge.n 801805a <__sfputc_r+0x1e>
  57680. 8018048: 6994 ldr r4, [r2, #24]
  57681. 801804a: 42a3 cmp r3, r4
  57682. 801804c: db01 blt.n 8018052 <__sfputc_r+0x16>
  57683. 801804e: 290a cmp r1, #10
  57684. 8018050: d103 bne.n 801805a <__sfputc_r+0x1e>
  57685. 8018052: f85d 4b04 ldr.w r4, [sp], #4
  57686. 8018056: f7ff bd84 b.w 8017b62 <__swbuf_r>
  57687. 801805a: 6813 ldr r3, [r2, #0]
  57688. 801805c: 1c58 adds r0, r3, #1
  57689. 801805e: 6010 str r0, [r2, #0]
  57690. 8018060: 7019 strb r1, [r3, #0]
  57691. 8018062: 4608 mov r0, r1
  57692. 8018064: f85d 4b04 ldr.w r4, [sp], #4
  57693. 8018068: 4770 bx lr
  57694. 0801806a <__sfputs_r>:
  57695. 801806a: b5f8 push {r3, r4, r5, r6, r7, lr}
  57696. 801806c: 4606 mov r6, r0
  57697. 801806e: 460f mov r7, r1
  57698. 8018070: 4614 mov r4, r2
  57699. 8018072: 18d5 adds r5, r2, r3
  57700. 8018074: 42ac cmp r4, r5
  57701. 8018076: d101 bne.n 801807c <__sfputs_r+0x12>
  57702. 8018078: 2000 movs r0, #0
  57703. 801807a: e007 b.n 801808c <__sfputs_r+0x22>
  57704. 801807c: f814 1b01 ldrb.w r1, [r4], #1
  57705. 8018080: 463a mov r2, r7
  57706. 8018082: 4630 mov r0, r6
  57707. 8018084: f7ff ffda bl 801803c <__sfputc_r>
  57708. 8018088: 1c43 adds r3, r0, #1
  57709. 801808a: d1f3 bne.n 8018074 <__sfputs_r+0xa>
  57710. 801808c: bdf8 pop {r3, r4, r5, r6, r7, pc}
  57711. ...
  57712. 08018090 <_vfiprintf_r>:
  57713. 8018090: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
  57714. 8018094: 460d mov r5, r1
  57715. 8018096: b09d sub sp, #116 @ 0x74
  57716. 8018098: 4614 mov r4, r2
  57717. 801809a: 4698 mov r8, r3
  57718. 801809c: 4606 mov r6, r0
  57719. 801809e: b118 cbz r0, 80180a8 <_vfiprintf_r+0x18>
  57720. 80180a0: 6a03 ldr r3, [r0, #32]
  57721. 80180a2: b90b cbnz r3, 80180a8 <_vfiprintf_r+0x18>
  57722. 80180a4: f7ff fc74 bl 8017990 <__sinit>
  57723. 80180a8: 6e6b ldr r3, [r5, #100] @ 0x64
  57724. 80180aa: 07d9 lsls r1, r3, #31
  57725. 80180ac: d405 bmi.n 80180ba <_vfiprintf_r+0x2a>
  57726. 80180ae: 89ab ldrh r3, [r5, #12]
  57727. 80180b0: 059a lsls r2, r3, #22
  57728. 80180b2: d402 bmi.n 80180ba <_vfiprintf_r+0x2a>
  57729. 80180b4: 6da8 ldr r0, [r5, #88] @ 0x58
  57730. 80180b6: f7ff feb8 bl 8017e2a <__retarget_lock_acquire_recursive>
  57731. 80180ba: 89ab ldrh r3, [r5, #12]
  57732. 80180bc: 071b lsls r3, r3, #28
  57733. 80180be: d501 bpl.n 80180c4 <_vfiprintf_r+0x34>
  57734. 80180c0: 692b ldr r3, [r5, #16]
  57735. 80180c2: b99b cbnz r3, 80180ec <_vfiprintf_r+0x5c>
  57736. 80180c4: 4629 mov r1, r5
  57737. 80180c6: 4630 mov r0, r6
  57738. 80180c8: f7ff fd8a bl 8017be0 <__swsetup_r>
  57739. 80180cc: b170 cbz r0, 80180ec <_vfiprintf_r+0x5c>
  57740. 80180ce: 6e6b ldr r3, [r5, #100] @ 0x64
  57741. 80180d0: 07dc lsls r4, r3, #31
  57742. 80180d2: d504 bpl.n 80180de <_vfiprintf_r+0x4e>
  57743. 80180d4: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff
  57744. 80180d8: b01d add sp, #116 @ 0x74
  57745. 80180da: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
  57746. 80180de: 89ab ldrh r3, [r5, #12]
  57747. 80180e0: 0598 lsls r0, r3, #22
  57748. 80180e2: d4f7 bmi.n 80180d4 <_vfiprintf_r+0x44>
  57749. 80180e4: 6da8 ldr r0, [r5, #88] @ 0x58
  57750. 80180e6: f7ff fea1 bl 8017e2c <__retarget_lock_release_recursive>
  57751. 80180ea: e7f3 b.n 80180d4 <_vfiprintf_r+0x44>
  57752. 80180ec: 2300 movs r3, #0
  57753. 80180ee: 9309 str r3, [sp, #36] @ 0x24
  57754. 80180f0: 2320 movs r3, #32
  57755. 80180f2: f88d 3029 strb.w r3, [sp, #41] @ 0x29
  57756. 80180f6: f8cd 800c str.w r8, [sp, #12]
  57757. 80180fa: 2330 movs r3, #48 @ 0x30
  57758. 80180fc: f8df 81ac ldr.w r8, [pc, #428] @ 80182ac <_vfiprintf_r+0x21c>
  57759. 8018100: f88d 302a strb.w r3, [sp, #42] @ 0x2a
  57760. 8018104: f04f 0901 mov.w r9, #1
  57761. 8018108: 4623 mov r3, r4
  57762. 801810a: 469a mov sl, r3
  57763. 801810c: f813 2b01 ldrb.w r2, [r3], #1
  57764. 8018110: b10a cbz r2, 8018116 <_vfiprintf_r+0x86>
  57765. 8018112: 2a25 cmp r2, #37 @ 0x25
  57766. 8018114: d1f9 bne.n 801810a <_vfiprintf_r+0x7a>
  57767. 8018116: ebba 0b04 subs.w fp, sl, r4
  57768. 801811a: d00b beq.n 8018134 <_vfiprintf_r+0xa4>
  57769. 801811c: 465b mov r3, fp
  57770. 801811e: 4622 mov r2, r4
  57771. 8018120: 4629 mov r1, r5
  57772. 8018122: 4630 mov r0, r6
  57773. 8018124: f7ff ffa1 bl 801806a <__sfputs_r>
  57774. 8018128: 3001 adds r0, #1
  57775. 801812a: f000 80a7 beq.w 801827c <_vfiprintf_r+0x1ec>
  57776. 801812e: 9a09 ldr r2, [sp, #36] @ 0x24
  57777. 8018130: 445a add r2, fp
  57778. 8018132: 9209 str r2, [sp, #36] @ 0x24
  57779. 8018134: f89a 3000 ldrb.w r3, [sl]
  57780. 8018138: 2b00 cmp r3, #0
  57781. 801813a: f000 809f beq.w 801827c <_vfiprintf_r+0x1ec>
  57782. 801813e: 2300 movs r3, #0
  57783. 8018140: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
  57784. 8018144: e9cd 2305 strd r2, r3, [sp, #20]
  57785. 8018148: f10a 0a01 add.w sl, sl, #1
  57786. 801814c: 9304 str r3, [sp, #16]
  57787. 801814e: 9307 str r3, [sp, #28]
  57788. 8018150: f88d 3053 strb.w r3, [sp, #83] @ 0x53
  57789. 8018154: 931a str r3, [sp, #104] @ 0x68
  57790. 8018156: 4654 mov r4, sl
  57791. 8018158: 2205 movs r2, #5
  57792. 801815a: f814 1b01 ldrb.w r1, [r4], #1
  57793. 801815e: 4853 ldr r0, [pc, #332] @ (80182ac <_vfiprintf_r+0x21c>)
  57794. 8018160: f7e8 f8be bl 80002e0 <memchr>
  57795. 8018164: 9a04 ldr r2, [sp, #16]
  57796. 8018166: b9d8 cbnz r0, 80181a0 <_vfiprintf_r+0x110>
  57797. 8018168: 06d1 lsls r1, r2, #27
  57798. 801816a: bf44 itt mi
  57799. 801816c: 2320 movmi r3, #32
  57800. 801816e: f88d 3053 strbmi.w r3, [sp, #83] @ 0x53
  57801. 8018172: 0713 lsls r3, r2, #28
  57802. 8018174: bf44 itt mi
  57803. 8018176: 232b movmi r3, #43 @ 0x2b
  57804. 8018178: f88d 3053 strbmi.w r3, [sp, #83] @ 0x53
  57805. 801817c: f89a 3000 ldrb.w r3, [sl]
  57806. 8018180: 2b2a cmp r3, #42 @ 0x2a
  57807. 8018182: d015 beq.n 80181b0 <_vfiprintf_r+0x120>
  57808. 8018184: 9a07 ldr r2, [sp, #28]
  57809. 8018186: 4654 mov r4, sl
  57810. 8018188: 2000 movs r0, #0
  57811. 801818a: f04f 0c0a mov.w ip, #10
  57812. 801818e: 4621 mov r1, r4
  57813. 8018190: f811 3b01 ldrb.w r3, [r1], #1
  57814. 8018194: 3b30 subs r3, #48 @ 0x30
  57815. 8018196: 2b09 cmp r3, #9
  57816. 8018198: d94b bls.n 8018232 <_vfiprintf_r+0x1a2>
  57817. 801819a: b1b0 cbz r0, 80181ca <_vfiprintf_r+0x13a>
  57818. 801819c: 9207 str r2, [sp, #28]
  57819. 801819e: e014 b.n 80181ca <_vfiprintf_r+0x13a>
  57820. 80181a0: eba0 0308 sub.w r3, r0, r8
  57821. 80181a4: fa09 f303 lsl.w r3, r9, r3
  57822. 80181a8: 4313 orrs r3, r2
  57823. 80181aa: 9304 str r3, [sp, #16]
  57824. 80181ac: 46a2 mov sl, r4
  57825. 80181ae: e7d2 b.n 8018156 <_vfiprintf_r+0xc6>
  57826. 80181b0: 9b03 ldr r3, [sp, #12]
  57827. 80181b2: 1d19 adds r1, r3, #4
  57828. 80181b4: 681b ldr r3, [r3, #0]
  57829. 80181b6: 9103 str r1, [sp, #12]
  57830. 80181b8: 2b00 cmp r3, #0
  57831. 80181ba: bfbb ittet lt
  57832. 80181bc: 425b neglt r3, r3
  57833. 80181be: f042 0202 orrlt.w r2, r2, #2
  57834. 80181c2: 9307 strge r3, [sp, #28]
  57835. 80181c4: 9307 strlt r3, [sp, #28]
  57836. 80181c6: bfb8 it lt
  57837. 80181c8: 9204 strlt r2, [sp, #16]
  57838. 80181ca: 7823 ldrb r3, [r4, #0]
  57839. 80181cc: 2b2e cmp r3, #46 @ 0x2e
  57840. 80181ce: d10a bne.n 80181e6 <_vfiprintf_r+0x156>
  57841. 80181d0: 7863 ldrb r3, [r4, #1]
  57842. 80181d2: 2b2a cmp r3, #42 @ 0x2a
  57843. 80181d4: d132 bne.n 801823c <_vfiprintf_r+0x1ac>
  57844. 80181d6: 9b03 ldr r3, [sp, #12]
  57845. 80181d8: 1d1a adds r2, r3, #4
  57846. 80181da: 681b ldr r3, [r3, #0]
  57847. 80181dc: 9203 str r2, [sp, #12]
  57848. 80181de: ea43 73e3 orr.w r3, r3, r3, asr #31
  57849. 80181e2: 3402 adds r4, #2
  57850. 80181e4: 9305 str r3, [sp, #20]
  57851. 80181e6: f8df a0d4 ldr.w sl, [pc, #212] @ 80182bc <_vfiprintf_r+0x22c>
  57852. 80181ea: 7821 ldrb r1, [r4, #0]
  57853. 80181ec: 2203 movs r2, #3
  57854. 80181ee: 4650 mov r0, sl
  57855. 80181f0: f7e8 f876 bl 80002e0 <memchr>
  57856. 80181f4: b138 cbz r0, 8018206 <_vfiprintf_r+0x176>
  57857. 80181f6: 9b04 ldr r3, [sp, #16]
  57858. 80181f8: eba0 000a sub.w r0, r0, sl
  57859. 80181fc: 2240 movs r2, #64 @ 0x40
  57860. 80181fe: 4082 lsls r2, r0
  57861. 8018200: 4313 orrs r3, r2
  57862. 8018202: 3401 adds r4, #1
  57863. 8018204: 9304 str r3, [sp, #16]
  57864. 8018206: f814 1b01 ldrb.w r1, [r4], #1
  57865. 801820a: 4829 ldr r0, [pc, #164] @ (80182b0 <_vfiprintf_r+0x220>)
  57866. 801820c: f88d 1028 strb.w r1, [sp, #40] @ 0x28
  57867. 8018210: 2206 movs r2, #6
  57868. 8018212: f7e8 f865 bl 80002e0 <memchr>
  57869. 8018216: 2800 cmp r0, #0
  57870. 8018218: d03f beq.n 801829a <_vfiprintf_r+0x20a>
  57871. 801821a: 4b26 ldr r3, [pc, #152] @ (80182b4 <_vfiprintf_r+0x224>)
  57872. 801821c: bb1b cbnz r3, 8018266 <_vfiprintf_r+0x1d6>
  57873. 801821e: 9b03 ldr r3, [sp, #12]
  57874. 8018220: 3307 adds r3, #7
  57875. 8018222: f023 0307 bic.w r3, r3, #7
  57876. 8018226: 3308 adds r3, #8
  57877. 8018228: 9303 str r3, [sp, #12]
  57878. 801822a: 9b09 ldr r3, [sp, #36] @ 0x24
  57879. 801822c: 443b add r3, r7
  57880. 801822e: 9309 str r3, [sp, #36] @ 0x24
  57881. 8018230: e76a b.n 8018108 <_vfiprintf_r+0x78>
  57882. 8018232: fb0c 3202 mla r2, ip, r2, r3
  57883. 8018236: 460c mov r4, r1
  57884. 8018238: 2001 movs r0, #1
  57885. 801823a: e7a8 b.n 801818e <_vfiprintf_r+0xfe>
  57886. 801823c: 2300 movs r3, #0
  57887. 801823e: 3401 adds r4, #1
  57888. 8018240: 9305 str r3, [sp, #20]
  57889. 8018242: 4619 mov r1, r3
  57890. 8018244: f04f 0c0a mov.w ip, #10
  57891. 8018248: 4620 mov r0, r4
  57892. 801824a: f810 2b01 ldrb.w r2, [r0], #1
  57893. 801824e: 3a30 subs r2, #48 @ 0x30
  57894. 8018250: 2a09 cmp r2, #9
  57895. 8018252: d903 bls.n 801825c <_vfiprintf_r+0x1cc>
  57896. 8018254: 2b00 cmp r3, #0
  57897. 8018256: d0c6 beq.n 80181e6 <_vfiprintf_r+0x156>
  57898. 8018258: 9105 str r1, [sp, #20]
  57899. 801825a: e7c4 b.n 80181e6 <_vfiprintf_r+0x156>
  57900. 801825c: fb0c 2101 mla r1, ip, r1, r2
  57901. 8018260: 4604 mov r4, r0
  57902. 8018262: 2301 movs r3, #1
  57903. 8018264: e7f0 b.n 8018248 <_vfiprintf_r+0x1b8>
  57904. 8018266: ab03 add r3, sp, #12
  57905. 8018268: 9300 str r3, [sp, #0]
  57906. 801826a: 462a mov r2, r5
  57907. 801826c: 4b12 ldr r3, [pc, #72] @ (80182b8 <_vfiprintf_r+0x228>)
  57908. 801826e: a904 add r1, sp, #16
  57909. 8018270: 4630 mov r0, r6
  57910. 8018272: f3af 8000 nop.w
  57911. 8018276: 4607 mov r7, r0
  57912. 8018278: 1c78 adds r0, r7, #1
  57913. 801827a: d1d6 bne.n 801822a <_vfiprintf_r+0x19a>
  57914. 801827c: 6e6b ldr r3, [r5, #100] @ 0x64
  57915. 801827e: 07d9 lsls r1, r3, #31
  57916. 8018280: d405 bmi.n 801828e <_vfiprintf_r+0x1fe>
  57917. 8018282: 89ab ldrh r3, [r5, #12]
  57918. 8018284: 059a lsls r2, r3, #22
  57919. 8018286: d402 bmi.n 801828e <_vfiprintf_r+0x1fe>
  57920. 8018288: 6da8 ldr r0, [r5, #88] @ 0x58
  57921. 801828a: f7ff fdcf bl 8017e2c <__retarget_lock_release_recursive>
  57922. 801828e: 89ab ldrh r3, [r5, #12]
  57923. 8018290: 065b lsls r3, r3, #25
  57924. 8018292: f53f af1f bmi.w 80180d4 <_vfiprintf_r+0x44>
  57925. 8018296: 9809 ldr r0, [sp, #36] @ 0x24
  57926. 8018298: e71e b.n 80180d8 <_vfiprintf_r+0x48>
  57927. 801829a: ab03 add r3, sp, #12
  57928. 801829c: 9300 str r3, [sp, #0]
  57929. 801829e: 462a mov r2, r5
  57930. 80182a0: 4b05 ldr r3, [pc, #20] @ (80182b8 <_vfiprintf_r+0x228>)
  57931. 80182a2: a904 add r1, sp, #16
  57932. 80182a4: 4630 mov r0, r6
  57933. 80182a6: f000 f879 bl 801839c <_printf_i>
  57934. 80182aa: e7e4 b.n 8018276 <_vfiprintf_r+0x1e6>
  57935. 80182ac: 08018b9c .word 0x08018b9c
  57936. 80182b0: 08018ba6 .word 0x08018ba6
  57937. 80182b4: 00000000 .word 0x00000000
  57938. 80182b8: 0801806b .word 0x0801806b
  57939. 80182bc: 08018ba2 .word 0x08018ba2
  57940. 080182c0 <_printf_common>:
  57941. 80182c0: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
  57942. 80182c4: 4616 mov r6, r2
  57943. 80182c6: 4698 mov r8, r3
  57944. 80182c8: 688a ldr r2, [r1, #8]
  57945. 80182ca: 690b ldr r3, [r1, #16]
  57946. 80182cc: f8dd 9020 ldr.w r9, [sp, #32]
  57947. 80182d0: 4293 cmp r3, r2
  57948. 80182d2: bfb8 it lt
  57949. 80182d4: 4613 movlt r3, r2
  57950. 80182d6: 6033 str r3, [r6, #0]
  57951. 80182d8: f891 2043 ldrb.w r2, [r1, #67] @ 0x43
  57952. 80182dc: 4607 mov r7, r0
  57953. 80182de: 460c mov r4, r1
  57954. 80182e0: b10a cbz r2, 80182e6 <_printf_common+0x26>
  57955. 80182e2: 3301 adds r3, #1
  57956. 80182e4: 6033 str r3, [r6, #0]
  57957. 80182e6: 6823 ldr r3, [r4, #0]
  57958. 80182e8: 0699 lsls r1, r3, #26
  57959. 80182ea: bf42 ittt mi
  57960. 80182ec: 6833 ldrmi r3, [r6, #0]
  57961. 80182ee: 3302 addmi r3, #2
  57962. 80182f0: 6033 strmi r3, [r6, #0]
  57963. 80182f2: 6825 ldr r5, [r4, #0]
  57964. 80182f4: f015 0506 ands.w r5, r5, #6
  57965. 80182f8: d106 bne.n 8018308 <_printf_common+0x48>
  57966. 80182fa: f104 0a19 add.w sl, r4, #25
  57967. 80182fe: 68e3 ldr r3, [r4, #12]
  57968. 8018300: 6832 ldr r2, [r6, #0]
  57969. 8018302: 1a9b subs r3, r3, r2
  57970. 8018304: 42ab cmp r3, r5
  57971. 8018306: dc26 bgt.n 8018356 <_printf_common+0x96>
  57972. 8018308: f894 3043 ldrb.w r3, [r4, #67] @ 0x43
  57973. 801830c: 6822 ldr r2, [r4, #0]
  57974. 801830e: 3b00 subs r3, #0
  57975. 8018310: bf18 it ne
  57976. 8018312: 2301 movne r3, #1
  57977. 8018314: 0692 lsls r2, r2, #26
  57978. 8018316: d42b bmi.n 8018370 <_printf_common+0xb0>
  57979. 8018318: f104 0243 add.w r2, r4, #67 @ 0x43
  57980. 801831c: 4641 mov r1, r8
  57981. 801831e: 4638 mov r0, r7
  57982. 8018320: 47c8 blx r9
  57983. 8018322: 3001 adds r0, #1
  57984. 8018324: d01e beq.n 8018364 <_printf_common+0xa4>
  57985. 8018326: 6823 ldr r3, [r4, #0]
  57986. 8018328: 6922 ldr r2, [r4, #16]
  57987. 801832a: f003 0306 and.w r3, r3, #6
  57988. 801832e: 2b04 cmp r3, #4
  57989. 8018330: bf02 ittt eq
  57990. 8018332: 68e5 ldreq r5, [r4, #12]
  57991. 8018334: 6833 ldreq r3, [r6, #0]
  57992. 8018336: 1aed subeq r5, r5, r3
  57993. 8018338: 68a3 ldr r3, [r4, #8]
  57994. 801833a: bf0c ite eq
  57995. 801833c: ea25 75e5 biceq.w r5, r5, r5, asr #31
  57996. 8018340: 2500 movne r5, #0
  57997. 8018342: 4293 cmp r3, r2
  57998. 8018344: bfc4 itt gt
  57999. 8018346: 1a9b subgt r3, r3, r2
  58000. 8018348: 18ed addgt r5, r5, r3
  58001. 801834a: 2600 movs r6, #0
  58002. 801834c: 341a adds r4, #26
  58003. 801834e: 42b5 cmp r5, r6
  58004. 8018350: d11a bne.n 8018388 <_printf_common+0xc8>
  58005. 8018352: 2000 movs r0, #0
  58006. 8018354: e008 b.n 8018368 <_printf_common+0xa8>
  58007. 8018356: 2301 movs r3, #1
  58008. 8018358: 4652 mov r2, sl
  58009. 801835a: 4641 mov r1, r8
  58010. 801835c: 4638 mov r0, r7
  58011. 801835e: 47c8 blx r9
  58012. 8018360: 3001 adds r0, #1
  58013. 8018362: d103 bne.n 801836c <_printf_common+0xac>
  58014. 8018364: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff
  58015. 8018368: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
  58016. 801836c: 3501 adds r5, #1
  58017. 801836e: e7c6 b.n 80182fe <_printf_common+0x3e>
  58018. 8018370: 18e1 adds r1, r4, r3
  58019. 8018372: 1c5a adds r2, r3, #1
  58020. 8018374: 2030 movs r0, #48 @ 0x30
  58021. 8018376: f881 0043 strb.w r0, [r1, #67] @ 0x43
  58022. 801837a: 4422 add r2, r4
  58023. 801837c: f894 1045 ldrb.w r1, [r4, #69] @ 0x45
  58024. 8018380: f882 1043 strb.w r1, [r2, #67] @ 0x43
  58025. 8018384: 3302 adds r3, #2
  58026. 8018386: e7c7 b.n 8018318 <_printf_common+0x58>
  58027. 8018388: 2301 movs r3, #1
  58028. 801838a: 4622 mov r2, r4
  58029. 801838c: 4641 mov r1, r8
  58030. 801838e: 4638 mov r0, r7
  58031. 8018390: 47c8 blx r9
  58032. 8018392: 3001 adds r0, #1
  58033. 8018394: d0e6 beq.n 8018364 <_printf_common+0xa4>
  58034. 8018396: 3601 adds r6, #1
  58035. 8018398: e7d9 b.n 801834e <_printf_common+0x8e>
  58036. ...
  58037. 0801839c <_printf_i>:
  58038. 801839c: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr}
  58039. 80183a0: 7e0f ldrb r7, [r1, #24]
  58040. 80183a2: 9e0c ldr r6, [sp, #48] @ 0x30
  58041. 80183a4: 2f78 cmp r7, #120 @ 0x78
  58042. 80183a6: 4691 mov r9, r2
  58043. 80183a8: 4680 mov r8, r0
  58044. 80183aa: 460c mov r4, r1
  58045. 80183ac: 469a mov sl, r3
  58046. 80183ae: f101 0243 add.w r2, r1, #67 @ 0x43
  58047. 80183b2: d807 bhi.n 80183c4 <_printf_i+0x28>
  58048. 80183b4: 2f62 cmp r7, #98 @ 0x62
  58049. 80183b6: d80a bhi.n 80183ce <_printf_i+0x32>
  58050. 80183b8: 2f00 cmp r7, #0
  58051. 80183ba: f000 80d2 beq.w 8018562 <_printf_i+0x1c6>
  58052. 80183be: 2f58 cmp r7, #88 @ 0x58
  58053. 80183c0: f000 80b9 beq.w 8018536 <_printf_i+0x19a>
  58054. 80183c4: f104 0642 add.w r6, r4, #66 @ 0x42
  58055. 80183c8: f884 7042 strb.w r7, [r4, #66] @ 0x42
  58056. 80183cc: e03a b.n 8018444 <_printf_i+0xa8>
  58057. 80183ce: f1a7 0363 sub.w r3, r7, #99 @ 0x63
  58058. 80183d2: 2b15 cmp r3, #21
  58059. 80183d4: d8f6 bhi.n 80183c4 <_printf_i+0x28>
  58060. 80183d6: a101 add r1, pc, #4 @ (adr r1, 80183dc <_printf_i+0x40>)
  58061. 80183d8: f851 f023 ldr.w pc, [r1, r3, lsl #2]
  58062. 80183dc: 08018435 .word 0x08018435
  58063. 80183e0: 08018449 .word 0x08018449
  58064. 80183e4: 080183c5 .word 0x080183c5
  58065. 80183e8: 080183c5 .word 0x080183c5
  58066. 80183ec: 080183c5 .word 0x080183c5
  58067. 80183f0: 080183c5 .word 0x080183c5
  58068. 80183f4: 08018449 .word 0x08018449
  58069. 80183f8: 080183c5 .word 0x080183c5
  58070. 80183fc: 080183c5 .word 0x080183c5
  58071. 8018400: 080183c5 .word 0x080183c5
  58072. 8018404: 080183c5 .word 0x080183c5
  58073. 8018408: 08018549 .word 0x08018549
  58074. 801840c: 08018473 .word 0x08018473
  58075. 8018410: 08018503 .word 0x08018503
  58076. 8018414: 080183c5 .word 0x080183c5
  58077. 8018418: 080183c5 .word 0x080183c5
  58078. 801841c: 0801856b .word 0x0801856b
  58079. 8018420: 080183c5 .word 0x080183c5
  58080. 8018424: 08018473 .word 0x08018473
  58081. 8018428: 080183c5 .word 0x080183c5
  58082. 801842c: 080183c5 .word 0x080183c5
  58083. 8018430: 0801850b .word 0x0801850b
  58084. 8018434: 6833 ldr r3, [r6, #0]
  58085. 8018436: 1d1a adds r2, r3, #4
  58086. 8018438: 681b ldr r3, [r3, #0]
  58087. 801843a: 6032 str r2, [r6, #0]
  58088. 801843c: f104 0642 add.w r6, r4, #66 @ 0x42
  58089. 8018440: f884 3042 strb.w r3, [r4, #66] @ 0x42
  58090. 8018444: 2301 movs r3, #1
  58091. 8018446: e09d b.n 8018584 <_printf_i+0x1e8>
  58092. 8018448: 6833 ldr r3, [r6, #0]
  58093. 801844a: 6820 ldr r0, [r4, #0]
  58094. 801844c: 1d19 adds r1, r3, #4
  58095. 801844e: 6031 str r1, [r6, #0]
  58096. 8018450: 0606 lsls r6, r0, #24
  58097. 8018452: d501 bpl.n 8018458 <_printf_i+0xbc>
  58098. 8018454: 681d ldr r5, [r3, #0]
  58099. 8018456: e003 b.n 8018460 <_printf_i+0xc4>
  58100. 8018458: 0645 lsls r5, r0, #25
  58101. 801845a: d5fb bpl.n 8018454 <_printf_i+0xb8>
  58102. 801845c: f9b3 5000 ldrsh.w r5, [r3]
  58103. 8018460: 2d00 cmp r5, #0
  58104. 8018462: da03 bge.n 801846c <_printf_i+0xd0>
  58105. 8018464: 232d movs r3, #45 @ 0x2d
  58106. 8018466: 426d negs r5, r5
  58107. 8018468: f884 3043 strb.w r3, [r4, #67] @ 0x43
  58108. 801846c: 4859 ldr r0, [pc, #356] @ (80185d4 <_printf_i+0x238>)
  58109. 801846e: 230a movs r3, #10
  58110. 8018470: e011 b.n 8018496 <_printf_i+0xfa>
  58111. 8018472: 6821 ldr r1, [r4, #0]
  58112. 8018474: 6833 ldr r3, [r6, #0]
  58113. 8018476: 0608 lsls r0, r1, #24
  58114. 8018478: f853 5b04 ldr.w r5, [r3], #4
  58115. 801847c: d402 bmi.n 8018484 <_printf_i+0xe8>
  58116. 801847e: 0649 lsls r1, r1, #25
  58117. 8018480: bf48 it mi
  58118. 8018482: b2ad uxthmi r5, r5
  58119. 8018484: 2f6f cmp r7, #111 @ 0x6f
  58120. 8018486: 4853 ldr r0, [pc, #332] @ (80185d4 <_printf_i+0x238>)
  58121. 8018488: 6033 str r3, [r6, #0]
  58122. 801848a: bf14 ite ne
  58123. 801848c: 230a movne r3, #10
  58124. 801848e: 2308 moveq r3, #8
  58125. 8018490: 2100 movs r1, #0
  58126. 8018492: f884 1043 strb.w r1, [r4, #67] @ 0x43
  58127. 8018496: 6866 ldr r6, [r4, #4]
  58128. 8018498: 60a6 str r6, [r4, #8]
  58129. 801849a: 2e00 cmp r6, #0
  58130. 801849c: bfa2 ittt ge
  58131. 801849e: 6821 ldrge r1, [r4, #0]
  58132. 80184a0: f021 0104 bicge.w r1, r1, #4
  58133. 80184a4: 6021 strge r1, [r4, #0]
  58134. 80184a6: b90d cbnz r5, 80184ac <_printf_i+0x110>
  58135. 80184a8: 2e00 cmp r6, #0
  58136. 80184aa: d04b beq.n 8018544 <_printf_i+0x1a8>
  58137. 80184ac: 4616 mov r6, r2
  58138. 80184ae: fbb5 f1f3 udiv r1, r5, r3
  58139. 80184b2: fb03 5711 mls r7, r3, r1, r5
  58140. 80184b6: 5dc7 ldrb r7, [r0, r7]
  58141. 80184b8: f806 7d01 strb.w r7, [r6, #-1]!
  58142. 80184bc: 462f mov r7, r5
  58143. 80184be: 42bb cmp r3, r7
  58144. 80184c0: 460d mov r5, r1
  58145. 80184c2: d9f4 bls.n 80184ae <_printf_i+0x112>
  58146. 80184c4: 2b08 cmp r3, #8
  58147. 80184c6: d10b bne.n 80184e0 <_printf_i+0x144>
  58148. 80184c8: 6823 ldr r3, [r4, #0]
  58149. 80184ca: 07df lsls r7, r3, #31
  58150. 80184cc: d508 bpl.n 80184e0 <_printf_i+0x144>
  58151. 80184ce: 6923 ldr r3, [r4, #16]
  58152. 80184d0: 6861 ldr r1, [r4, #4]
  58153. 80184d2: 4299 cmp r1, r3
  58154. 80184d4: bfde ittt le
  58155. 80184d6: 2330 movle r3, #48 @ 0x30
  58156. 80184d8: f806 3c01 strble.w r3, [r6, #-1]
  58157. 80184dc: f106 36ff addle.w r6, r6, #4294967295 @ 0xffffffff
  58158. 80184e0: 1b92 subs r2, r2, r6
  58159. 80184e2: 6122 str r2, [r4, #16]
  58160. 80184e4: f8cd a000 str.w sl, [sp]
  58161. 80184e8: 464b mov r3, r9
  58162. 80184ea: aa03 add r2, sp, #12
  58163. 80184ec: 4621 mov r1, r4
  58164. 80184ee: 4640 mov r0, r8
  58165. 80184f0: f7ff fee6 bl 80182c0 <_printf_common>
  58166. 80184f4: 3001 adds r0, #1
  58167. 80184f6: d14a bne.n 801858e <_printf_i+0x1f2>
  58168. 80184f8: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff
  58169. 80184fc: b004 add sp, #16
  58170. 80184fe: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
  58171. 8018502: 6823 ldr r3, [r4, #0]
  58172. 8018504: f043 0320 orr.w r3, r3, #32
  58173. 8018508: 6023 str r3, [r4, #0]
  58174. 801850a: 4833 ldr r0, [pc, #204] @ (80185d8 <_printf_i+0x23c>)
  58175. 801850c: 2778 movs r7, #120 @ 0x78
  58176. 801850e: f884 7045 strb.w r7, [r4, #69] @ 0x45
  58177. 8018512: 6823 ldr r3, [r4, #0]
  58178. 8018514: 6831 ldr r1, [r6, #0]
  58179. 8018516: 061f lsls r7, r3, #24
  58180. 8018518: f851 5b04 ldr.w r5, [r1], #4
  58181. 801851c: d402 bmi.n 8018524 <_printf_i+0x188>
  58182. 801851e: 065f lsls r7, r3, #25
  58183. 8018520: bf48 it mi
  58184. 8018522: b2ad uxthmi r5, r5
  58185. 8018524: 6031 str r1, [r6, #0]
  58186. 8018526: 07d9 lsls r1, r3, #31
  58187. 8018528: bf44 itt mi
  58188. 801852a: f043 0320 orrmi.w r3, r3, #32
  58189. 801852e: 6023 strmi r3, [r4, #0]
  58190. 8018530: b11d cbz r5, 801853a <_printf_i+0x19e>
  58191. 8018532: 2310 movs r3, #16
  58192. 8018534: e7ac b.n 8018490 <_printf_i+0xf4>
  58193. 8018536: 4827 ldr r0, [pc, #156] @ (80185d4 <_printf_i+0x238>)
  58194. 8018538: e7e9 b.n 801850e <_printf_i+0x172>
  58195. 801853a: 6823 ldr r3, [r4, #0]
  58196. 801853c: f023 0320 bic.w r3, r3, #32
  58197. 8018540: 6023 str r3, [r4, #0]
  58198. 8018542: e7f6 b.n 8018532 <_printf_i+0x196>
  58199. 8018544: 4616 mov r6, r2
  58200. 8018546: e7bd b.n 80184c4 <_printf_i+0x128>
  58201. 8018548: 6833 ldr r3, [r6, #0]
  58202. 801854a: 6825 ldr r5, [r4, #0]
  58203. 801854c: 6961 ldr r1, [r4, #20]
  58204. 801854e: 1d18 adds r0, r3, #4
  58205. 8018550: 6030 str r0, [r6, #0]
  58206. 8018552: 062e lsls r6, r5, #24
  58207. 8018554: 681b ldr r3, [r3, #0]
  58208. 8018556: d501 bpl.n 801855c <_printf_i+0x1c0>
  58209. 8018558: 6019 str r1, [r3, #0]
  58210. 801855a: e002 b.n 8018562 <_printf_i+0x1c6>
  58211. 801855c: 0668 lsls r0, r5, #25
  58212. 801855e: d5fb bpl.n 8018558 <_printf_i+0x1bc>
  58213. 8018560: 8019 strh r1, [r3, #0]
  58214. 8018562: 2300 movs r3, #0
  58215. 8018564: 6123 str r3, [r4, #16]
  58216. 8018566: 4616 mov r6, r2
  58217. 8018568: e7bc b.n 80184e4 <_printf_i+0x148>
  58218. 801856a: 6833 ldr r3, [r6, #0]
  58219. 801856c: 1d1a adds r2, r3, #4
  58220. 801856e: 6032 str r2, [r6, #0]
  58221. 8018570: 681e ldr r6, [r3, #0]
  58222. 8018572: 6862 ldr r2, [r4, #4]
  58223. 8018574: 2100 movs r1, #0
  58224. 8018576: 4630 mov r0, r6
  58225. 8018578: f7e7 feb2 bl 80002e0 <memchr>
  58226. 801857c: b108 cbz r0, 8018582 <_printf_i+0x1e6>
  58227. 801857e: 1b80 subs r0, r0, r6
  58228. 8018580: 6060 str r0, [r4, #4]
  58229. 8018582: 6863 ldr r3, [r4, #4]
  58230. 8018584: 6123 str r3, [r4, #16]
  58231. 8018586: 2300 movs r3, #0
  58232. 8018588: f884 3043 strb.w r3, [r4, #67] @ 0x43
  58233. 801858c: e7aa b.n 80184e4 <_printf_i+0x148>
  58234. 801858e: 6923 ldr r3, [r4, #16]
  58235. 8018590: 4632 mov r2, r6
  58236. 8018592: 4649 mov r1, r9
  58237. 8018594: 4640 mov r0, r8
  58238. 8018596: 47d0 blx sl
  58239. 8018598: 3001 adds r0, #1
  58240. 801859a: d0ad beq.n 80184f8 <_printf_i+0x15c>
  58241. 801859c: 6823 ldr r3, [r4, #0]
  58242. 801859e: 079b lsls r3, r3, #30
  58243. 80185a0: d413 bmi.n 80185ca <_printf_i+0x22e>
  58244. 80185a2: 68e0 ldr r0, [r4, #12]
  58245. 80185a4: 9b03 ldr r3, [sp, #12]
  58246. 80185a6: 4298 cmp r0, r3
  58247. 80185a8: bfb8 it lt
  58248. 80185aa: 4618 movlt r0, r3
  58249. 80185ac: e7a6 b.n 80184fc <_printf_i+0x160>
  58250. 80185ae: 2301 movs r3, #1
  58251. 80185b0: 4632 mov r2, r6
  58252. 80185b2: 4649 mov r1, r9
  58253. 80185b4: 4640 mov r0, r8
  58254. 80185b6: 47d0 blx sl
  58255. 80185b8: 3001 adds r0, #1
  58256. 80185ba: d09d beq.n 80184f8 <_printf_i+0x15c>
  58257. 80185bc: 3501 adds r5, #1
  58258. 80185be: 68e3 ldr r3, [r4, #12]
  58259. 80185c0: 9903 ldr r1, [sp, #12]
  58260. 80185c2: 1a5b subs r3, r3, r1
  58261. 80185c4: 42ab cmp r3, r5
  58262. 80185c6: dcf2 bgt.n 80185ae <_printf_i+0x212>
  58263. 80185c8: e7eb b.n 80185a2 <_printf_i+0x206>
  58264. 80185ca: 2500 movs r5, #0
  58265. 80185cc: f104 0619 add.w r6, r4, #25
  58266. 80185d0: e7f5 b.n 80185be <_printf_i+0x222>
  58267. 80185d2: bf00 nop
  58268. 80185d4: 08018bad .word 0x08018bad
  58269. 80185d8: 08018bbe .word 0x08018bbe
  58270. 080185dc <__sflush_r>:
  58271. 80185dc: f9b1 200c ldrsh.w r2, [r1, #12]
  58272. 80185e0: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
  58273. 80185e4: 0716 lsls r6, r2, #28
  58274. 80185e6: 4605 mov r5, r0
  58275. 80185e8: 460c mov r4, r1
  58276. 80185ea: d454 bmi.n 8018696 <__sflush_r+0xba>
  58277. 80185ec: 684b ldr r3, [r1, #4]
  58278. 80185ee: 2b00 cmp r3, #0
  58279. 80185f0: dc02 bgt.n 80185f8 <__sflush_r+0x1c>
  58280. 80185f2: 6c0b ldr r3, [r1, #64] @ 0x40
  58281. 80185f4: 2b00 cmp r3, #0
  58282. 80185f6: dd48 ble.n 801868a <__sflush_r+0xae>
  58283. 80185f8: 6ae6 ldr r6, [r4, #44] @ 0x2c
  58284. 80185fa: 2e00 cmp r6, #0
  58285. 80185fc: d045 beq.n 801868a <__sflush_r+0xae>
  58286. 80185fe: 2300 movs r3, #0
  58287. 8018600: f412 5280 ands.w r2, r2, #4096 @ 0x1000
  58288. 8018604: 682f ldr r7, [r5, #0]
  58289. 8018606: 6a21 ldr r1, [r4, #32]
  58290. 8018608: 602b str r3, [r5, #0]
  58291. 801860a: d030 beq.n 801866e <__sflush_r+0x92>
  58292. 801860c: 6d62 ldr r2, [r4, #84] @ 0x54
  58293. 801860e: 89a3 ldrh r3, [r4, #12]
  58294. 8018610: 0759 lsls r1, r3, #29
  58295. 8018612: d505 bpl.n 8018620 <__sflush_r+0x44>
  58296. 8018614: 6863 ldr r3, [r4, #4]
  58297. 8018616: 1ad2 subs r2, r2, r3
  58298. 8018618: 6b63 ldr r3, [r4, #52] @ 0x34
  58299. 801861a: b10b cbz r3, 8018620 <__sflush_r+0x44>
  58300. 801861c: 6c23 ldr r3, [r4, #64] @ 0x40
  58301. 801861e: 1ad2 subs r2, r2, r3
  58302. 8018620: 2300 movs r3, #0
  58303. 8018622: 6ae6 ldr r6, [r4, #44] @ 0x2c
  58304. 8018624: 6a21 ldr r1, [r4, #32]
  58305. 8018626: 4628 mov r0, r5
  58306. 8018628: 47b0 blx r6
  58307. 801862a: 1c43 adds r3, r0, #1
  58308. 801862c: 89a3 ldrh r3, [r4, #12]
  58309. 801862e: d106 bne.n 801863e <__sflush_r+0x62>
  58310. 8018630: 6829 ldr r1, [r5, #0]
  58311. 8018632: 291d cmp r1, #29
  58312. 8018634: d82b bhi.n 801868e <__sflush_r+0xb2>
  58313. 8018636: 4a2a ldr r2, [pc, #168] @ (80186e0 <__sflush_r+0x104>)
  58314. 8018638: 410a asrs r2, r1
  58315. 801863a: 07d6 lsls r6, r2, #31
  58316. 801863c: d427 bmi.n 801868e <__sflush_r+0xb2>
  58317. 801863e: 2200 movs r2, #0
  58318. 8018640: 6062 str r2, [r4, #4]
  58319. 8018642: 04d9 lsls r1, r3, #19
  58320. 8018644: 6922 ldr r2, [r4, #16]
  58321. 8018646: 6022 str r2, [r4, #0]
  58322. 8018648: d504 bpl.n 8018654 <__sflush_r+0x78>
  58323. 801864a: 1c42 adds r2, r0, #1
  58324. 801864c: d101 bne.n 8018652 <__sflush_r+0x76>
  58325. 801864e: 682b ldr r3, [r5, #0]
  58326. 8018650: b903 cbnz r3, 8018654 <__sflush_r+0x78>
  58327. 8018652: 6560 str r0, [r4, #84] @ 0x54
  58328. 8018654: 6b61 ldr r1, [r4, #52] @ 0x34
  58329. 8018656: 602f str r7, [r5, #0]
  58330. 8018658: b1b9 cbz r1, 801868a <__sflush_r+0xae>
  58331. 801865a: f104 0344 add.w r3, r4, #68 @ 0x44
  58332. 801865e: 4299 cmp r1, r3
  58333. 8018660: d002 beq.n 8018668 <__sflush_r+0x8c>
  58334. 8018662: 4628 mov r0, r5
  58335. 8018664: f7ff fbf2 bl 8017e4c <_free_r>
  58336. 8018668: 2300 movs r3, #0
  58337. 801866a: 6363 str r3, [r4, #52] @ 0x34
  58338. 801866c: e00d b.n 801868a <__sflush_r+0xae>
  58339. 801866e: 2301 movs r3, #1
  58340. 8018670: 4628 mov r0, r5
  58341. 8018672: 47b0 blx r6
  58342. 8018674: 4602 mov r2, r0
  58343. 8018676: 1c50 adds r0, r2, #1
  58344. 8018678: d1c9 bne.n 801860e <__sflush_r+0x32>
  58345. 801867a: 682b ldr r3, [r5, #0]
  58346. 801867c: 2b00 cmp r3, #0
  58347. 801867e: d0c6 beq.n 801860e <__sflush_r+0x32>
  58348. 8018680: 2b1d cmp r3, #29
  58349. 8018682: d001 beq.n 8018688 <__sflush_r+0xac>
  58350. 8018684: 2b16 cmp r3, #22
  58351. 8018686: d11e bne.n 80186c6 <__sflush_r+0xea>
  58352. 8018688: 602f str r7, [r5, #0]
  58353. 801868a: 2000 movs r0, #0
  58354. 801868c: e022 b.n 80186d4 <__sflush_r+0xf8>
  58355. 801868e: f043 0340 orr.w r3, r3, #64 @ 0x40
  58356. 8018692: b21b sxth r3, r3
  58357. 8018694: e01b b.n 80186ce <__sflush_r+0xf2>
  58358. 8018696: 690f ldr r7, [r1, #16]
  58359. 8018698: 2f00 cmp r7, #0
  58360. 801869a: d0f6 beq.n 801868a <__sflush_r+0xae>
  58361. 801869c: 0793 lsls r3, r2, #30
  58362. 801869e: 680e ldr r6, [r1, #0]
  58363. 80186a0: bf08 it eq
  58364. 80186a2: 694b ldreq r3, [r1, #20]
  58365. 80186a4: 600f str r7, [r1, #0]
  58366. 80186a6: bf18 it ne
  58367. 80186a8: 2300 movne r3, #0
  58368. 80186aa: eba6 0807 sub.w r8, r6, r7
  58369. 80186ae: 608b str r3, [r1, #8]
  58370. 80186b0: f1b8 0f00 cmp.w r8, #0
  58371. 80186b4: dde9 ble.n 801868a <__sflush_r+0xae>
  58372. 80186b6: 6a21 ldr r1, [r4, #32]
  58373. 80186b8: 6aa6 ldr r6, [r4, #40] @ 0x28
  58374. 80186ba: 4643 mov r3, r8
  58375. 80186bc: 463a mov r2, r7
  58376. 80186be: 4628 mov r0, r5
  58377. 80186c0: 47b0 blx r6
  58378. 80186c2: 2800 cmp r0, #0
  58379. 80186c4: dc08 bgt.n 80186d8 <__sflush_r+0xfc>
  58380. 80186c6: f9b4 300c ldrsh.w r3, [r4, #12]
  58381. 80186ca: f043 0340 orr.w r3, r3, #64 @ 0x40
  58382. 80186ce: 81a3 strh r3, [r4, #12]
  58383. 80186d0: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff
  58384. 80186d4: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
  58385. 80186d8: 4407 add r7, r0
  58386. 80186da: eba8 0800 sub.w r8, r8, r0
  58387. 80186de: e7e7 b.n 80186b0 <__sflush_r+0xd4>
  58388. 80186e0: dfbffffe .word 0xdfbffffe
  58389. 080186e4 <_fflush_r>:
  58390. 80186e4: b538 push {r3, r4, r5, lr}
  58391. 80186e6: 690b ldr r3, [r1, #16]
  58392. 80186e8: 4605 mov r5, r0
  58393. 80186ea: 460c mov r4, r1
  58394. 80186ec: b913 cbnz r3, 80186f4 <_fflush_r+0x10>
  58395. 80186ee: 2500 movs r5, #0
  58396. 80186f0: 4628 mov r0, r5
  58397. 80186f2: bd38 pop {r3, r4, r5, pc}
  58398. 80186f4: b118 cbz r0, 80186fe <_fflush_r+0x1a>
  58399. 80186f6: 6a03 ldr r3, [r0, #32]
  58400. 80186f8: b90b cbnz r3, 80186fe <_fflush_r+0x1a>
  58401. 80186fa: f7ff f949 bl 8017990 <__sinit>
  58402. 80186fe: f9b4 300c ldrsh.w r3, [r4, #12]
  58403. 8018702: 2b00 cmp r3, #0
  58404. 8018704: d0f3 beq.n 80186ee <_fflush_r+0xa>
  58405. 8018706: 6e62 ldr r2, [r4, #100] @ 0x64
  58406. 8018708: 07d0 lsls r0, r2, #31
  58407. 801870a: d404 bmi.n 8018716 <_fflush_r+0x32>
  58408. 801870c: 0599 lsls r1, r3, #22
  58409. 801870e: d402 bmi.n 8018716 <_fflush_r+0x32>
  58410. 8018710: 6da0 ldr r0, [r4, #88] @ 0x58
  58411. 8018712: f7ff fb8a bl 8017e2a <__retarget_lock_acquire_recursive>
  58412. 8018716: 4628 mov r0, r5
  58413. 8018718: 4621 mov r1, r4
  58414. 801871a: f7ff ff5f bl 80185dc <__sflush_r>
  58415. 801871e: 6e63 ldr r3, [r4, #100] @ 0x64
  58416. 8018720: 07da lsls r2, r3, #31
  58417. 8018722: 4605 mov r5, r0
  58418. 8018724: d4e4 bmi.n 80186f0 <_fflush_r+0xc>
  58419. 8018726: 89a3 ldrh r3, [r4, #12]
  58420. 8018728: 059b lsls r3, r3, #22
  58421. 801872a: d4e1 bmi.n 80186f0 <_fflush_r+0xc>
  58422. 801872c: 6da0 ldr r0, [r4, #88] @ 0x58
  58423. 801872e: f7ff fb7d bl 8017e2c <__retarget_lock_release_recursive>
  58424. 8018732: e7dd b.n 80186f0 <_fflush_r+0xc>
  58425. 08018734 <__swhatbuf_r>:
  58426. 8018734: b570 push {r4, r5, r6, lr}
  58427. 8018736: 460c mov r4, r1
  58428. 8018738: f9b1 100e ldrsh.w r1, [r1, #14]
  58429. 801873c: 2900 cmp r1, #0
  58430. 801873e: b096 sub sp, #88 @ 0x58
  58431. 8018740: 4615 mov r5, r2
  58432. 8018742: 461e mov r6, r3
  58433. 8018744: da0d bge.n 8018762 <__swhatbuf_r+0x2e>
  58434. 8018746: 89a3 ldrh r3, [r4, #12]
  58435. 8018748: f013 0f80 tst.w r3, #128 @ 0x80
  58436. 801874c: f04f 0100 mov.w r1, #0
  58437. 8018750: bf14 ite ne
  58438. 8018752: 2340 movne r3, #64 @ 0x40
  58439. 8018754: f44f 6380 moveq.w r3, #1024 @ 0x400
  58440. 8018758: 2000 movs r0, #0
  58441. 801875a: 6031 str r1, [r6, #0]
  58442. 801875c: 602b str r3, [r5, #0]
  58443. 801875e: b016 add sp, #88 @ 0x58
  58444. 8018760: bd70 pop {r4, r5, r6, pc}
  58445. 8018762: 466a mov r2, sp
  58446. 8018764: f000 f848 bl 80187f8 <_fstat_r>
  58447. 8018768: 2800 cmp r0, #0
  58448. 801876a: dbec blt.n 8018746 <__swhatbuf_r+0x12>
  58449. 801876c: 9901 ldr r1, [sp, #4]
  58450. 801876e: f401 4170 and.w r1, r1, #61440 @ 0xf000
  58451. 8018772: f5a1 5300 sub.w r3, r1, #8192 @ 0x2000
  58452. 8018776: 4259 negs r1, r3
  58453. 8018778: 4159 adcs r1, r3
  58454. 801877a: f44f 6380 mov.w r3, #1024 @ 0x400
  58455. 801877e: e7eb b.n 8018758 <__swhatbuf_r+0x24>
  58456. 08018780 <__smakebuf_r>:
  58457. 8018780: 898b ldrh r3, [r1, #12]
  58458. 8018782: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr}
  58459. 8018784: 079d lsls r5, r3, #30
  58460. 8018786: 4606 mov r6, r0
  58461. 8018788: 460c mov r4, r1
  58462. 801878a: d507 bpl.n 801879c <__smakebuf_r+0x1c>
  58463. 801878c: f104 0347 add.w r3, r4, #71 @ 0x47
  58464. 8018790: 6023 str r3, [r4, #0]
  58465. 8018792: 6123 str r3, [r4, #16]
  58466. 8018794: 2301 movs r3, #1
  58467. 8018796: 6163 str r3, [r4, #20]
  58468. 8018798: b003 add sp, #12
  58469. 801879a: bdf0 pop {r4, r5, r6, r7, pc}
  58470. 801879c: ab01 add r3, sp, #4
  58471. 801879e: 466a mov r2, sp
  58472. 80187a0: f7ff ffc8 bl 8018734 <__swhatbuf_r>
  58473. 80187a4: 9f00 ldr r7, [sp, #0]
  58474. 80187a6: 4605 mov r5, r0
  58475. 80187a8: 4639 mov r1, r7
  58476. 80187aa: 4630 mov r0, r6
  58477. 80187ac: f7ff fbba bl 8017f24 <_malloc_r>
  58478. 80187b0: b948 cbnz r0, 80187c6 <__smakebuf_r+0x46>
  58479. 80187b2: f9b4 300c ldrsh.w r3, [r4, #12]
  58480. 80187b6: 059a lsls r2, r3, #22
  58481. 80187b8: d4ee bmi.n 8018798 <__smakebuf_r+0x18>
  58482. 80187ba: f023 0303 bic.w r3, r3, #3
  58483. 80187be: f043 0302 orr.w r3, r3, #2
  58484. 80187c2: 81a3 strh r3, [r4, #12]
  58485. 80187c4: e7e2 b.n 801878c <__smakebuf_r+0xc>
  58486. 80187c6: 89a3 ldrh r3, [r4, #12]
  58487. 80187c8: 6020 str r0, [r4, #0]
  58488. 80187ca: f043 0380 orr.w r3, r3, #128 @ 0x80
  58489. 80187ce: 81a3 strh r3, [r4, #12]
  58490. 80187d0: 9b01 ldr r3, [sp, #4]
  58491. 80187d2: e9c4 0704 strd r0, r7, [r4, #16]
  58492. 80187d6: b15b cbz r3, 80187f0 <__smakebuf_r+0x70>
  58493. 80187d8: f9b4 100e ldrsh.w r1, [r4, #14]
  58494. 80187dc: 4630 mov r0, r6
  58495. 80187de: f000 f81d bl 801881c <_isatty_r>
  58496. 80187e2: b128 cbz r0, 80187f0 <__smakebuf_r+0x70>
  58497. 80187e4: 89a3 ldrh r3, [r4, #12]
  58498. 80187e6: f023 0303 bic.w r3, r3, #3
  58499. 80187ea: f043 0301 orr.w r3, r3, #1
  58500. 80187ee: 81a3 strh r3, [r4, #12]
  58501. 80187f0: 89a3 ldrh r3, [r4, #12]
  58502. 80187f2: 431d orrs r5, r3
  58503. 80187f4: 81a5 strh r5, [r4, #12]
  58504. 80187f6: e7cf b.n 8018798 <__smakebuf_r+0x18>
  58505. 080187f8 <_fstat_r>:
  58506. 80187f8: b538 push {r3, r4, r5, lr}
  58507. 80187fa: 4d07 ldr r5, [pc, #28] @ (8018818 <_fstat_r+0x20>)
  58508. 80187fc: 2300 movs r3, #0
  58509. 80187fe: 4604 mov r4, r0
  58510. 8018800: 4608 mov r0, r1
  58511. 8018802: 4611 mov r1, r2
  58512. 8018804: 602b str r3, [r5, #0]
  58513. 8018806: f7eb ff4a bl 800469e <_fstat>
  58514. 801880a: 1c43 adds r3, r0, #1
  58515. 801880c: d102 bne.n 8018814 <_fstat_r+0x1c>
  58516. 801880e: 682b ldr r3, [r5, #0]
  58517. 8018810: b103 cbz r3, 8018814 <_fstat_r+0x1c>
  58518. 8018812: 6023 str r3, [r4, #0]
  58519. 8018814: bd38 pop {r3, r4, r5, pc}
  58520. 8018816: bf00 nop
  58521. 8018818: 240131a4 .word 0x240131a4
  58522. 0801881c <_isatty_r>:
  58523. 801881c: b538 push {r3, r4, r5, lr}
  58524. 801881e: 4d06 ldr r5, [pc, #24] @ (8018838 <_isatty_r+0x1c>)
  58525. 8018820: 2300 movs r3, #0
  58526. 8018822: 4604 mov r4, r0
  58527. 8018824: 4608 mov r0, r1
  58528. 8018826: 602b str r3, [r5, #0]
  58529. 8018828: f7eb ff49 bl 80046be <_isatty>
  58530. 801882c: 1c43 adds r3, r0, #1
  58531. 801882e: d102 bne.n 8018836 <_isatty_r+0x1a>
  58532. 8018830: 682b ldr r3, [r5, #0]
  58533. 8018832: b103 cbz r3, 8018836 <_isatty_r+0x1a>
  58534. 8018834: 6023 str r3, [r4, #0]
  58535. 8018836: bd38 pop {r3, r4, r5, pc}
  58536. 8018838: 240131a4 .word 0x240131a4
  58537. 0801883c <_sbrk_r>:
  58538. 801883c: b538 push {r3, r4, r5, lr}
  58539. 801883e: 4d06 ldr r5, [pc, #24] @ (8018858 <_sbrk_r+0x1c>)
  58540. 8018840: 2300 movs r3, #0
  58541. 8018842: 4604 mov r4, r0
  58542. 8018844: 4608 mov r0, r1
  58543. 8018846: 602b str r3, [r5, #0]
  58544. 8018848: f7eb ff52 bl 80046f0 <_sbrk>
  58545. 801884c: 1c43 adds r3, r0, #1
  58546. 801884e: d102 bne.n 8018856 <_sbrk_r+0x1a>
  58547. 8018850: 682b ldr r3, [r5, #0]
  58548. 8018852: b103 cbz r3, 8018856 <_sbrk_r+0x1a>
  58549. 8018854: 6023 str r3, [r4, #0]
  58550. 8018856: bd38 pop {r3, r4, r5, pc}
  58551. 8018858: 240131a4 .word 0x240131a4
  58552. 0801885c <fmodf>:
  58553. 801885c: b508 push {r3, lr}
  58554. 801885e: ed2d 8b02 vpush {d8}
  58555. 8018862: eef0 8a40 vmov.f32 s17, s0
  58556. 8018866: eeb0 8a60 vmov.f32 s16, s1
  58557. 801886a: f000 f817 bl 801889c <__ieee754_fmodf>
  58558. 801886e: eef4 8a48 vcmp.f32 s17, s16
  58559. 8018872: eef1 fa10 vmrs APSR_nzcv, fpscr
  58560. 8018876: d60c bvs.n 8018892 <fmodf+0x36>
  58561. 8018878: eddf 8a07 vldr s17, [pc, #28] @ 8018898 <fmodf+0x3c>
  58562. 801887c: eeb4 8a68 vcmp.f32 s16, s17
  58563. 8018880: eef1 fa10 vmrs APSR_nzcv, fpscr
  58564. 8018884: d105 bne.n 8018892 <fmodf+0x36>
  58565. 8018886: f7ff faa5 bl 8017dd4 <__errno>
  58566. 801888a: ee88 0aa8 vdiv.f32 s0, s17, s17
  58567. 801888e: 2321 movs r3, #33 @ 0x21
  58568. 8018890: 6003 str r3, [r0, #0]
  58569. 8018892: ecbd 8b02 vpop {d8}
  58570. 8018896: bd08 pop {r3, pc}
  58571. 8018898: 00000000 .word 0x00000000
  58572. 0801889c <__ieee754_fmodf>:
  58573. 801889c: b5f0 push {r4, r5, r6, r7, lr}
  58574. 801889e: ee10 5a90 vmov r5, s1
  58575. 80188a2: f025 4000 bic.w r0, r5, #2147483648 @ 0x80000000
  58576. 80188a6: 1e43 subs r3, r0, #1
  58577. 80188a8: f1b3 4fff cmp.w r3, #2139095040 @ 0x7f800000
  58578. 80188ac: d206 bcs.n 80188bc <__ieee754_fmodf+0x20>
  58579. 80188ae: ee10 3a10 vmov r3, s0
  58580. 80188b2: f023 4600 bic.w r6, r3, #2147483648 @ 0x80000000
  58581. 80188b6: f1b6 4fff cmp.w r6, #2139095040 @ 0x7f800000
  58582. 80188ba: d304 bcc.n 80188c6 <__ieee754_fmodf+0x2a>
  58583. 80188bc: ee60 0a20 vmul.f32 s1, s0, s1
  58584. 80188c0: ee80 0aa0 vdiv.f32 s0, s1, s1
  58585. 80188c4: bdf0 pop {r4, r5, r6, r7, pc}
  58586. 80188c6: 4286 cmp r6, r0
  58587. 80188c8: dbfc blt.n 80188c4 <__ieee754_fmodf+0x28>
  58588. 80188ca: f003 4400 and.w r4, r3, #2147483648 @ 0x80000000
  58589. 80188ce: d105 bne.n 80188dc <__ieee754_fmodf+0x40>
  58590. 80188d0: 4b32 ldr r3, [pc, #200] @ (801899c <__ieee754_fmodf+0x100>)
  58591. 80188d2: eb03 7354 add.w r3, r3, r4, lsr #29
  58592. 80188d6: ed93 0a00 vldr s0, [r3]
  58593. 80188da: e7f3 b.n 80188c4 <__ieee754_fmodf+0x28>
  58594. 80188dc: f013 4fff tst.w r3, #2139095040 @ 0x7f800000
  58595. 80188e0: d140 bne.n 8018964 <__ieee754_fmodf+0xc8>
  58596. 80188e2: 0232 lsls r2, r6, #8
  58597. 80188e4: f06f 017d mvn.w r1, #125 @ 0x7d
  58598. 80188e8: 2a00 cmp r2, #0
  58599. 80188ea: dc38 bgt.n 801895e <__ieee754_fmodf+0xc2>
  58600. 80188ec: f015 4fff tst.w r5, #2139095040 @ 0x7f800000
  58601. 80188f0: d13e bne.n 8018970 <__ieee754_fmodf+0xd4>
  58602. 80188f2: 0207 lsls r7, r0, #8
  58603. 80188f4: f06f 027d mvn.w r2, #125 @ 0x7d
  58604. 80188f8: 2f00 cmp r7, #0
  58605. 80188fa: da36 bge.n 801896a <__ieee754_fmodf+0xce>
  58606. 80188fc: f111 0f7e cmn.w r1, #126 @ 0x7e
  58607. 8018900: bfb9 ittee lt
  58608. 8018902: f06f 037d mvnlt.w r3, #125 @ 0x7d
  58609. 8018906: 1a5b sublt r3, r3, r1
  58610. 8018908: f3c3 0316 ubfxge r3, r3, #0, #23
  58611. 801890c: f443 0300 orrge.w r3, r3, #8388608 @ 0x800000
  58612. 8018910: bfb8 it lt
  58613. 8018912: fa06 f303 lsllt.w r3, r6, r3
  58614. 8018916: f112 0f7e cmn.w r2, #126 @ 0x7e
  58615. 801891a: bfb5 itete lt
  58616. 801891c: f06f 057d mvnlt.w r5, #125 @ 0x7d
  58617. 8018920: f3c5 0516 ubfxge r5, r5, #0, #23
  58618. 8018924: 1aad sublt r5, r5, r2
  58619. 8018926: f445 0000 orrge.w r0, r5, #8388608 @ 0x800000
  58620. 801892a: bfb8 it lt
  58621. 801892c: 40a8 lsllt r0, r5
  58622. 801892e: 1a89 subs r1, r1, r2
  58623. 8018930: 1a1d subs r5, r3, r0
  58624. 8018932: bb01 cbnz r1, 8018976 <__ieee754_fmodf+0xda>
  58625. 8018934: ea13 0325 ands.w r3, r3, r5, asr #32
  58626. 8018938: bf38 it cc
  58627. 801893a: 462b movcc r3, r5
  58628. 801893c: 2b00 cmp r3, #0
  58629. 801893e: d0c7 beq.n 80188d0 <__ieee754_fmodf+0x34>
  58630. 8018940: f5b3 0f00 cmp.w r3, #8388608 @ 0x800000
  58631. 8018944: db1f blt.n 8018986 <__ieee754_fmodf+0xea>
  58632. 8018946: f112 0f7e cmn.w r2, #126 @ 0x7e
  58633. 801894a: db1f blt.n 801898c <__ieee754_fmodf+0xf0>
  58634. 801894c: f5a3 0300 sub.w r3, r3, #8388608 @ 0x800000
  58635. 8018950: 327f adds r2, #127 @ 0x7f
  58636. 8018952: 4323 orrs r3, r4
  58637. 8018954: ea43 53c2 orr.w r3, r3, r2, lsl #23
  58638. 8018958: ee00 3a10 vmov s0, r3
  58639. 801895c: e7b2 b.n 80188c4 <__ieee754_fmodf+0x28>
  58640. 801895e: 3901 subs r1, #1
  58641. 8018960: 0052 lsls r2, r2, #1
  58642. 8018962: e7c1 b.n 80188e8 <__ieee754_fmodf+0x4c>
  58643. 8018964: 15f1 asrs r1, r6, #23
  58644. 8018966: 397f subs r1, #127 @ 0x7f
  58645. 8018968: e7c0 b.n 80188ec <__ieee754_fmodf+0x50>
  58646. 801896a: 3a01 subs r2, #1
  58647. 801896c: 007f lsls r7, r7, #1
  58648. 801896e: e7c3 b.n 80188f8 <__ieee754_fmodf+0x5c>
  58649. 8018970: 15c2 asrs r2, r0, #23
  58650. 8018972: 3a7f subs r2, #127 @ 0x7f
  58651. 8018974: e7c2 b.n 80188fc <__ieee754_fmodf+0x60>
  58652. 8018976: 2d00 cmp r5, #0
  58653. 8018978: da02 bge.n 8018980 <__ieee754_fmodf+0xe4>
  58654. 801897a: 005b lsls r3, r3, #1
  58655. 801897c: 3901 subs r1, #1
  58656. 801897e: e7d7 b.n 8018930 <__ieee754_fmodf+0x94>
  58657. 8018980: d0a6 beq.n 80188d0 <__ieee754_fmodf+0x34>
  58658. 8018982: 006b lsls r3, r5, #1
  58659. 8018984: e7fa b.n 801897c <__ieee754_fmodf+0xe0>
  58660. 8018986: 005b lsls r3, r3, #1
  58661. 8018988: 3a01 subs r2, #1
  58662. 801898a: e7d9 b.n 8018940 <__ieee754_fmodf+0xa4>
  58663. 801898c: f1c2 22ff rsb r2, r2, #4278255360 @ 0xff00ff00
  58664. 8018990: f502 027f add.w r2, r2, #16711680 @ 0xff0000
  58665. 8018994: 3282 adds r2, #130 @ 0x82
  58666. 8018996: 4113 asrs r3, r2
  58667. 8018998: 4323 orrs r3, r4
  58668. 801899a: e7dd b.n 8018958 <__ieee754_fmodf+0xbc>
  58669. 801899c: 08018bd0 .word 0x08018bd0
  58670. 080189a0 <_init>:
  58671. 80189a0: b5f8 push {r3, r4, r5, r6, r7, lr}
  58672. 80189a2: bf00 nop
  58673. 80189a4: bcf8 pop {r3, r4, r5, r6, r7}
  58674. 80189a6: bc08 pop {r3}
  58675. 80189a8: 469e mov lr, r3
  58676. 80189aa: 4770 bx lr
  58677. 080189ac <_fini>:
  58678. 80189ac: b5f8 push {r3, r4, r5, r6, r7, lr}
  58679. 80189ae: bf00 nop
  58680. 80189b0: bcf8 pop {r3, r4, r5, r6, r7}
  58681. 80189b2: bc08 pop {r3}
  58682. 80189b4: 469e mov lr, r3
  58683. 80189b6: 4770 bx lr