OZE_Sensor.list 2.0 MB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378837983808381838283838384838583868387838883898390839183928393839483958396839783988399840084018402840384048405840684078408840984108411841284138414841584168417841884198420842184228423842484258426842784288429843084318432843384348435843684378438843984408441844284438444844584468447844884498450845184528453845484558456845784588459846084618462846384648465846684678468846984708471847284738474847584768477847884798480848184828483848484858486848784888489849084918492849384948495849684978498849985008501850285038504850585068507850885098510851185128513851485158516851785188519852085218522852385248525852685278528852985308531853285338534853585368537853885398540854185428543854485458546854785488549855085518552855385548555855685578558855985608561856285638564856585668567856885698570857185728573857485758576857785788579858085818582858385848585858685878588858985908591859285938594859585968597859885998600860186028603860486058606860786088609861086118612861386148615861686178618861986208621862286238624862586268627862886298630863186328633863486358636863786388639864086418642864386448645864686478648864986508651865286538654865586568657865886598660866186628663866486658666866786688669867086718672867386748675867686778678867986808681868286838684868586868687868886898690869186928693869486958696869786988699870087018702870387048705870687078708870987108711871287138714871587168717871887198720872187228723872487258726872787288729873087318732873387348735873687378738873987408741874287438744874587468747874887498750875187528753875487558756875787588759876087618762876387648765876687678768876987708771877287738774877587768777877887798780878187828783878487858786878787888789879087918792879387948795879687978798879988008801880288038804880588068807880888098810881188128813881488158816881788188819882088218822882388248825882688278828882988308831883288338834883588368837883888398840884188428843884488458846884788488849885088518852885388548855885688578858885988608861886288638864886588668867886888698870887188728873887488758876887788788879888088818882888388848885888688878888888988908891889288938894889588968897889888998900890189028903890489058906890789088909891089118912891389148915891689178918891989208921892289238924892589268927892889298930893189328933893489358936893789388939894089418942894389448945894689478948894989508951895289538954895589568957895889598960896189628963896489658966896789688969897089718972897389748975897689778978897989808981898289838984898589868987898889898990899189928993899489958996899789988999900090019002900390049005900690079008900990109011901290139014901590169017901890199020902190229023902490259026902790289029903090319032903390349035903690379038903990409041904290439044904590469047904890499050905190529053905490559056905790589059906090619062906390649065906690679068906990709071907290739074907590769077907890799080908190829083908490859086908790889089909090919092909390949095909690979098909991009101910291039104910591069107910891099110911191129113911491159116911791189119912091219122912391249125912691279128912991309131913291339134913591369137913891399140914191429143914491459146914791489149915091519152915391549155915691579158915991609161916291639164916591669167916891699170917191729173917491759176917791789179918091819182918391849185918691879188918991909191919291939194919591969197919891999200920192029203920492059206920792089209921092119212921392149215921692179218921992209221922292239224922592269227922892299230923192329233923492359236923792389239924092419242924392449245924692479248924992509251925292539254925592569257925892599260926192629263926492659266926792689269927092719272927392749275927692779278927992809281928292839284928592869287928892899290929192929293929492959296929792989299930093019302930393049305930693079308930993109311931293139314931593169317931893199320932193229323932493259326932793289329933093319332933393349335933693379338933993409341934293439344934593469347934893499350935193529353935493559356935793589359936093619362936393649365936693679368936993709371937293739374937593769377937893799380938193829383938493859386938793889389939093919392939393949395939693979398939994009401940294039404940594069407940894099410941194129413941494159416941794189419942094219422942394249425942694279428942994309431943294339434943594369437943894399440944194429443944494459446944794489449945094519452945394549455945694579458945994609461946294639464946594669467946894699470947194729473947494759476947794789479948094819482948394849485948694879488948994909491949294939494949594969497949894999500950195029503950495059506950795089509951095119512951395149515951695179518951995209521952295239524952595269527952895299530953195329533953495359536953795389539954095419542954395449545954695479548954995509551955295539554955595569557955895599560956195629563956495659566956795689569957095719572957395749575957695779578957995809581958295839584958595869587958895899590959195929593959495959596959795989599960096019602960396049605960696079608960996109611961296139614961596169617961896199620962196229623962496259626962796289629963096319632963396349635963696379638963996409641964296439644964596469647964896499650965196529653965496559656965796589659966096619662966396649665966696679668966996709671967296739674967596769677967896799680968196829683968496859686968796889689969096919692969396949695969696979698969997009701970297039704970597069707970897099710971197129713971497159716971797189719972097219722972397249725972697279728972997309731973297339734973597369737973897399740974197429743974497459746974797489749975097519752975397549755975697579758975997609761976297639764976597669767976897699770977197729773977497759776977797789779978097819782978397849785978697879788978997909791979297939794979597969797979897999800980198029803980498059806980798089809981098119812981398149815981698179818981998209821982298239824982598269827982898299830983198329833983498359836983798389839984098419842984398449845984698479848984998509851985298539854985598569857985898599860986198629863986498659866986798689869987098719872987398749875987698779878987998809881988298839884988598869887988898899890989198929893989498959896989798989899990099019902990399049905990699079908990999109911991299139914991599169917991899199920992199229923992499259926992799289929993099319932993399349935993699379938993999409941994299439944994599469947994899499950995199529953995499559956995799589959996099619962996399649965996699679968996999709971997299739974997599769977997899799980998199829983998499859986998799889989999099919992999399949995999699979998999910000100011000210003100041000510006100071000810009100101001110012100131001410015100161001710018100191002010021100221002310024100251002610027100281002910030100311003210033100341003510036100371003810039100401004110042100431004410045100461004710048100491005010051100521005310054100551005610057100581005910060100611006210063100641006510066100671006810069100701007110072100731007410075100761007710078100791008010081100821008310084100851008610087100881008910090100911009210093100941009510096100971009810099101001010110102101031010410105101061010710108101091011010111101121011310114101151011610117101181011910120101211012210123101241012510126101271012810129101301013110132101331013410135101361013710138101391014010141101421014310144101451014610147101481014910150101511015210153101541015510156101571015810159101601016110162101631016410165101661016710168101691017010171101721017310174101751017610177101781017910180101811018210183101841018510186101871018810189101901019110192101931019410195101961019710198101991020010201102021020310204102051020610207102081020910210102111021210213102141021510216102171021810219102201022110222102231022410225102261022710228102291023010231102321023310234102351023610237102381023910240102411024210243102441024510246102471024810249102501025110252102531025410255102561025710258102591026010261102621026310264102651026610267102681026910270102711027210273102741027510276102771027810279102801028110282102831028410285102861028710288102891029010291102921029310294102951029610297102981029910300103011030210303103041030510306103071030810309103101031110312103131031410315103161031710318103191032010321103221032310324103251032610327103281032910330103311033210333103341033510336103371033810339103401034110342103431034410345103461034710348103491035010351103521035310354103551035610357103581035910360103611036210363103641036510366103671036810369103701037110372103731037410375103761037710378103791038010381103821038310384103851038610387103881038910390103911039210393103941039510396103971039810399104001040110402104031040410405104061040710408104091041010411104121041310414104151041610417104181041910420104211042210423104241042510426104271042810429104301043110432104331043410435104361043710438104391044010441104421044310444104451044610447104481044910450104511045210453104541045510456104571045810459104601046110462104631046410465104661046710468104691047010471104721047310474104751047610477104781047910480104811048210483104841048510486104871048810489104901049110492104931049410495104961049710498104991050010501105021050310504105051050610507105081050910510105111051210513105141051510516105171051810519105201052110522105231052410525105261052710528105291053010531105321053310534105351053610537105381053910540105411054210543105441054510546105471054810549105501055110552105531055410555105561055710558105591056010561105621056310564105651056610567105681056910570105711057210573105741057510576105771057810579105801058110582105831058410585105861058710588105891059010591105921059310594105951059610597105981059910600106011060210603106041060510606106071060810609106101061110612106131061410615106161061710618106191062010621106221062310624106251062610627106281062910630106311063210633106341063510636106371063810639106401064110642106431064410645106461064710648106491065010651106521065310654106551065610657106581065910660106611066210663106641066510666106671066810669106701067110672106731067410675106761067710678106791068010681106821068310684106851068610687106881068910690106911069210693106941069510696106971069810699107001070110702107031070410705107061070710708107091071010711107121071310714107151071610717107181071910720107211072210723107241072510726107271072810729107301073110732107331073410735107361073710738107391074010741107421074310744107451074610747107481074910750107511075210753107541075510756107571075810759107601076110762107631076410765107661076710768107691077010771107721077310774107751077610777107781077910780107811078210783107841078510786107871078810789107901079110792107931079410795107961079710798107991080010801108021080310804108051080610807108081080910810108111081210813108141081510816108171081810819108201082110822108231082410825108261082710828108291083010831108321083310834108351083610837108381083910840108411084210843108441084510846108471084810849108501085110852108531085410855108561085710858108591086010861108621086310864108651086610867108681086910870108711087210873108741087510876108771087810879108801088110882108831088410885108861088710888108891089010891108921089310894108951089610897108981089910900109011090210903109041090510906109071090810909109101091110912109131091410915109161091710918109191092010921109221092310924109251092610927109281092910930109311093210933109341093510936109371093810939109401094110942109431094410945109461094710948109491095010951109521095310954109551095610957109581095910960109611096210963109641096510966109671096810969109701097110972109731097410975109761097710978109791098010981109821098310984109851098610987109881098910990109911099210993109941099510996109971099810999110001100111002110031100411005110061100711008110091101011011110121101311014110151101611017110181101911020110211102211023110241102511026110271102811029110301103111032110331103411035110361103711038110391104011041110421104311044110451104611047110481104911050110511105211053110541105511056110571105811059110601106111062110631106411065110661106711068110691107011071110721107311074110751107611077110781107911080110811108211083110841108511086110871108811089110901109111092110931109411095110961109711098110991110011101111021110311104111051110611107111081110911110111111111211113111141111511116111171111811119111201112111122111231112411125111261112711128111291113011131111321113311134111351113611137111381113911140111411114211143111441114511146111471114811149111501115111152111531115411155111561115711158111591116011161111621116311164111651116611167111681116911170111711117211173111741117511176111771117811179111801118111182111831118411185111861118711188111891119011191111921119311194111951119611197111981119911200112011120211203112041120511206112071120811209112101121111212112131121411215112161121711218112191122011221112221122311224112251122611227112281122911230112311123211233112341123511236112371123811239112401124111242112431124411245112461124711248112491125011251112521125311254112551125611257112581125911260112611126211263112641126511266112671126811269112701127111272112731127411275112761127711278112791128011281112821128311284112851128611287112881128911290112911129211293112941129511296112971129811299113001130111302113031130411305113061130711308113091131011311113121131311314113151131611317113181131911320113211132211323113241132511326113271132811329113301133111332113331133411335113361133711338113391134011341113421134311344113451134611347113481134911350113511135211353113541135511356113571135811359113601136111362113631136411365113661136711368113691137011371113721137311374113751137611377113781137911380113811138211383113841138511386113871138811389113901139111392113931139411395113961139711398113991140011401114021140311404114051140611407114081140911410114111141211413114141141511416114171141811419114201142111422114231142411425114261142711428114291143011431114321143311434114351143611437114381143911440114411144211443114441144511446114471144811449114501145111452114531145411455114561145711458114591146011461114621146311464114651146611467114681146911470114711147211473114741147511476114771147811479114801148111482114831148411485114861148711488114891149011491114921149311494114951149611497114981149911500115011150211503115041150511506115071150811509115101151111512115131151411515115161151711518115191152011521115221152311524115251152611527115281152911530115311153211533115341153511536115371153811539115401154111542115431154411545115461154711548115491155011551115521155311554115551155611557115581155911560115611156211563115641156511566115671156811569115701157111572115731157411575115761157711578115791158011581115821158311584115851158611587115881158911590115911159211593115941159511596115971159811599116001160111602116031160411605116061160711608116091161011611116121161311614116151161611617116181161911620116211162211623116241162511626116271162811629116301163111632116331163411635116361163711638116391164011641116421164311644116451164611647116481164911650116511165211653116541165511656116571165811659116601166111662116631166411665116661166711668116691167011671116721167311674116751167611677116781167911680116811168211683116841168511686116871168811689116901169111692116931169411695116961169711698116991170011701117021170311704117051170611707117081170911710117111171211713117141171511716117171171811719117201172111722117231172411725117261172711728117291173011731117321173311734117351173611737117381173911740117411174211743117441174511746117471174811749117501175111752117531175411755117561175711758117591176011761117621176311764117651176611767117681176911770117711177211773117741177511776117771177811779117801178111782117831178411785117861178711788117891179011791117921179311794117951179611797117981179911800118011180211803118041180511806118071180811809118101181111812118131181411815118161181711818118191182011821118221182311824118251182611827118281182911830118311183211833118341183511836118371183811839118401184111842118431184411845118461184711848118491185011851118521185311854118551185611857118581185911860118611186211863118641186511866118671186811869118701187111872118731187411875118761187711878118791188011881118821188311884118851188611887118881188911890118911189211893118941189511896118971189811899119001190111902119031190411905119061190711908119091191011911119121191311914119151191611917119181191911920119211192211923119241192511926119271192811929119301193111932119331193411935119361193711938119391194011941119421194311944119451194611947119481194911950119511195211953119541195511956119571195811959119601196111962119631196411965119661196711968119691197011971119721197311974119751197611977119781197911980119811198211983119841198511986119871198811989119901199111992119931199411995119961199711998119991200012001120021200312004120051200612007120081200912010120111201212013120141201512016120171201812019120201202112022120231202412025120261202712028120291203012031120321203312034120351203612037120381203912040120411204212043120441204512046120471204812049120501205112052120531205412055120561205712058120591206012061120621206312064120651206612067120681206912070120711207212073120741207512076120771207812079120801208112082120831208412085120861208712088120891209012091120921209312094120951209612097120981209912100121011210212103121041210512106121071210812109121101211112112121131211412115121161211712118121191212012121121221212312124121251212612127121281212912130121311213212133121341213512136121371213812139121401214112142121431214412145121461214712148121491215012151121521215312154121551215612157121581215912160121611216212163121641216512166121671216812169121701217112172121731217412175121761217712178121791218012181121821218312184121851218612187121881218912190121911219212193121941219512196121971219812199122001220112202122031220412205122061220712208122091221012211122121221312214122151221612217122181221912220122211222212223122241222512226122271222812229122301223112232122331223412235122361223712238122391224012241122421224312244122451224612247122481224912250122511225212253122541225512256122571225812259122601226112262122631226412265122661226712268122691227012271122721227312274122751227612277122781227912280122811228212283122841228512286122871228812289122901229112292122931229412295122961229712298122991230012301123021230312304123051230612307123081230912310123111231212313123141231512316123171231812319123201232112322123231232412325123261232712328123291233012331123321233312334123351233612337123381233912340123411234212343123441234512346123471234812349123501235112352123531235412355123561235712358123591236012361123621236312364123651236612367123681236912370123711237212373123741237512376123771237812379123801238112382123831238412385123861238712388123891239012391123921239312394123951239612397123981239912400124011240212403124041240512406124071240812409124101241112412124131241412415124161241712418124191242012421124221242312424124251242612427124281242912430124311243212433124341243512436124371243812439124401244112442124431244412445124461244712448124491245012451124521245312454124551245612457124581245912460124611246212463124641246512466124671246812469124701247112472124731247412475124761247712478124791248012481124821248312484124851248612487124881248912490124911249212493124941249512496124971249812499125001250112502125031250412505125061250712508125091251012511125121251312514125151251612517125181251912520125211252212523125241252512526125271252812529125301253112532125331253412535125361253712538125391254012541125421254312544125451254612547125481254912550125511255212553125541255512556125571255812559125601256112562125631256412565125661256712568125691257012571125721257312574125751257612577125781257912580125811258212583125841258512586125871258812589125901259112592125931259412595125961259712598125991260012601126021260312604126051260612607126081260912610126111261212613126141261512616126171261812619126201262112622126231262412625126261262712628126291263012631126321263312634126351263612637126381263912640126411264212643126441264512646126471264812649126501265112652126531265412655126561265712658126591266012661126621266312664126651266612667126681266912670126711267212673126741267512676126771267812679126801268112682126831268412685126861268712688126891269012691126921269312694126951269612697126981269912700127011270212703127041270512706127071270812709127101271112712127131271412715127161271712718127191272012721127221272312724127251272612727127281272912730127311273212733127341273512736127371273812739127401274112742127431274412745127461274712748127491275012751127521275312754127551275612757127581275912760127611276212763127641276512766127671276812769127701277112772127731277412775127761277712778127791278012781127821278312784127851278612787127881278912790127911279212793127941279512796127971279812799128001280112802128031280412805128061280712808128091281012811128121281312814128151281612817128181281912820128211282212823128241282512826128271282812829128301283112832128331283412835128361283712838128391284012841128421284312844128451284612847128481284912850128511285212853128541285512856128571285812859128601286112862128631286412865128661286712868128691287012871128721287312874128751287612877128781287912880128811288212883128841288512886128871288812889128901289112892128931289412895128961289712898128991290012901129021290312904129051290612907129081290912910129111291212913129141291512916129171291812919129201292112922129231292412925129261292712928129291293012931129321293312934129351293612937129381293912940129411294212943129441294512946129471294812949129501295112952129531295412955129561295712958129591296012961129621296312964129651296612967129681296912970129711297212973129741297512976129771297812979129801298112982129831298412985129861298712988129891299012991129921299312994129951299612997129981299913000130011300213003130041300513006130071300813009130101301113012130131301413015130161301713018130191302013021130221302313024130251302613027130281302913030130311303213033130341303513036130371303813039130401304113042130431304413045130461304713048130491305013051130521305313054130551305613057130581305913060130611306213063130641306513066130671306813069130701307113072130731307413075130761307713078130791308013081130821308313084130851308613087130881308913090130911309213093130941309513096130971309813099131001310113102131031310413105131061310713108131091311013111131121311313114131151311613117131181311913120131211312213123131241312513126131271312813129131301313113132131331313413135131361313713138131391314013141131421314313144131451314613147131481314913150131511315213153131541315513156131571315813159131601316113162131631316413165131661316713168131691317013171131721317313174131751317613177131781317913180131811318213183131841318513186131871318813189131901319113192131931319413195131961319713198131991320013201132021320313204132051320613207132081320913210132111321213213132141321513216132171321813219132201322113222132231322413225132261322713228132291323013231132321323313234132351323613237132381323913240132411324213243132441324513246132471324813249132501325113252132531325413255132561325713258132591326013261132621326313264132651326613267132681326913270132711327213273132741327513276132771327813279132801328113282132831328413285132861328713288132891329013291132921329313294132951329613297132981329913300133011330213303133041330513306133071330813309133101331113312133131331413315133161331713318133191332013321133221332313324133251332613327133281332913330133311333213333133341333513336133371333813339133401334113342133431334413345133461334713348133491335013351133521335313354133551335613357133581335913360133611336213363133641336513366133671336813369133701337113372133731337413375133761337713378133791338013381133821338313384133851338613387133881338913390133911339213393133941339513396133971339813399134001340113402134031340413405134061340713408134091341013411134121341313414134151341613417134181341913420134211342213423134241342513426134271342813429134301343113432134331343413435134361343713438134391344013441134421344313444134451344613447134481344913450134511345213453134541345513456134571345813459134601346113462134631346413465134661346713468134691347013471134721347313474134751347613477134781347913480134811348213483134841348513486134871348813489134901349113492134931349413495134961349713498134991350013501135021350313504135051350613507135081350913510135111351213513135141351513516135171351813519135201352113522135231352413525135261352713528135291353013531135321353313534135351353613537135381353913540135411354213543135441354513546135471354813549135501355113552135531355413555135561355713558135591356013561135621356313564135651356613567135681356913570135711357213573135741357513576135771357813579135801358113582135831358413585135861358713588135891359013591135921359313594135951359613597135981359913600136011360213603136041360513606136071360813609136101361113612136131361413615136161361713618136191362013621136221362313624136251362613627136281362913630136311363213633136341363513636136371363813639136401364113642136431364413645136461364713648136491365013651136521365313654136551365613657136581365913660136611366213663136641366513666136671366813669136701367113672136731367413675136761367713678136791368013681136821368313684136851368613687136881368913690136911369213693136941369513696136971369813699137001370113702137031370413705137061370713708137091371013711137121371313714137151371613717137181371913720137211372213723137241372513726137271372813729137301373113732137331373413735137361373713738137391374013741137421374313744137451374613747137481374913750137511375213753137541375513756137571375813759137601376113762137631376413765137661376713768137691377013771137721377313774137751377613777137781377913780137811378213783137841378513786137871378813789137901379113792137931379413795137961379713798137991380013801138021380313804138051380613807138081380913810138111381213813138141381513816138171381813819138201382113822138231382413825138261382713828138291383013831138321383313834138351383613837138381383913840138411384213843138441384513846138471384813849138501385113852138531385413855138561385713858138591386013861138621386313864138651386613867138681386913870138711387213873138741387513876138771387813879138801388113882138831388413885138861388713888138891389013891138921389313894138951389613897138981389913900139011390213903139041390513906139071390813909139101391113912139131391413915139161391713918139191392013921139221392313924139251392613927139281392913930139311393213933139341393513936139371393813939139401394113942139431394413945139461394713948139491395013951139521395313954139551395613957139581395913960139611396213963139641396513966139671396813969139701397113972139731397413975139761397713978139791398013981139821398313984139851398613987139881398913990139911399213993139941399513996139971399813999140001400114002140031400414005140061400714008140091401014011140121401314014140151401614017140181401914020140211402214023140241402514026140271402814029140301403114032140331403414035140361403714038140391404014041140421404314044140451404614047140481404914050140511405214053140541405514056140571405814059140601406114062140631406414065140661406714068140691407014071140721407314074140751407614077140781407914080140811408214083140841408514086140871408814089140901409114092140931409414095140961409714098140991410014101141021410314104141051410614107141081410914110141111411214113141141411514116141171411814119141201412114122141231412414125141261412714128141291413014131141321413314134141351413614137141381413914140141411414214143141441414514146141471414814149141501415114152141531415414155141561415714158141591416014161141621416314164141651416614167141681416914170141711417214173141741417514176141771417814179141801418114182141831418414185141861418714188141891419014191141921419314194141951419614197141981419914200142011420214203142041420514206142071420814209142101421114212142131421414215142161421714218142191422014221142221422314224142251422614227142281422914230142311423214233142341423514236142371423814239142401424114242142431424414245142461424714248142491425014251142521425314254142551425614257142581425914260142611426214263142641426514266142671426814269142701427114272142731427414275142761427714278142791428014281142821428314284142851428614287142881428914290142911429214293142941429514296142971429814299143001430114302143031430414305143061430714308143091431014311143121431314314143151431614317143181431914320143211432214323143241432514326143271432814329143301433114332143331433414335143361433714338143391434014341143421434314344143451434614347143481434914350143511435214353143541435514356143571435814359143601436114362143631436414365143661436714368143691437014371143721437314374143751437614377143781437914380143811438214383143841438514386143871438814389143901439114392143931439414395143961439714398143991440014401144021440314404144051440614407144081440914410144111441214413144141441514416144171441814419144201442114422144231442414425144261442714428144291443014431144321443314434144351443614437144381443914440144411444214443144441444514446144471444814449144501445114452144531445414455144561445714458144591446014461144621446314464144651446614467144681446914470144711447214473144741447514476144771447814479144801448114482144831448414485144861448714488144891449014491144921449314494144951449614497144981449914500145011450214503145041450514506145071450814509145101451114512145131451414515145161451714518145191452014521145221452314524145251452614527145281452914530145311453214533145341453514536145371453814539145401454114542145431454414545145461454714548145491455014551145521455314554145551455614557145581455914560145611456214563145641456514566145671456814569145701457114572145731457414575145761457714578145791458014581145821458314584145851458614587145881458914590145911459214593145941459514596145971459814599146001460114602146031460414605146061460714608146091461014611146121461314614146151461614617146181461914620146211462214623146241462514626146271462814629146301463114632146331463414635146361463714638146391464014641146421464314644146451464614647146481464914650146511465214653146541465514656146571465814659146601466114662146631466414665146661466714668146691467014671146721467314674146751467614677146781467914680146811468214683146841468514686146871468814689146901469114692146931469414695146961469714698146991470014701147021470314704147051470614707147081470914710147111471214713147141471514716147171471814719147201472114722147231472414725147261472714728147291473014731147321473314734147351473614737147381473914740147411474214743147441474514746147471474814749147501475114752147531475414755147561475714758147591476014761147621476314764147651476614767147681476914770147711477214773147741477514776147771477814779147801478114782147831478414785147861478714788147891479014791147921479314794147951479614797147981479914800148011480214803148041480514806148071480814809148101481114812148131481414815148161481714818148191482014821148221482314824148251482614827148281482914830148311483214833148341483514836148371483814839148401484114842148431484414845148461484714848148491485014851148521485314854148551485614857148581485914860148611486214863148641486514866148671486814869148701487114872148731487414875148761487714878148791488014881148821488314884148851488614887148881488914890148911489214893148941489514896148971489814899149001490114902149031490414905149061490714908149091491014911149121491314914149151491614917149181491914920149211492214923149241492514926149271492814929149301493114932149331493414935149361493714938149391494014941149421494314944149451494614947149481494914950149511495214953149541495514956149571495814959149601496114962149631496414965149661496714968149691497014971149721497314974149751497614977149781497914980149811498214983149841498514986149871498814989149901499114992149931499414995149961499714998149991500015001150021500315004150051500615007150081500915010150111501215013150141501515016150171501815019150201502115022150231502415025150261502715028150291503015031150321503315034150351503615037150381503915040150411504215043150441504515046150471504815049150501505115052150531505415055150561505715058150591506015061150621506315064150651506615067150681506915070150711507215073150741507515076150771507815079150801508115082150831508415085150861508715088150891509015091150921509315094150951509615097150981509915100151011510215103151041510515106151071510815109151101511115112151131511415115151161511715118151191512015121151221512315124151251512615127151281512915130151311513215133151341513515136151371513815139151401514115142151431514415145151461514715148151491515015151151521515315154151551515615157151581515915160151611516215163151641516515166151671516815169151701517115172151731517415175151761517715178151791518015181151821518315184151851518615187151881518915190151911519215193151941519515196151971519815199152001520115202152031520415205152061520715208152091521015211152121521315214152151521615217152181521915220152211522215223152241522515226152271522815229152301523115232152331523415235152361523715238152391524015241152421524315244152451524615247152481524915250152511525215253152541525515256152571525815259152601526115262152631526415265152661526715268152691527015271152721527315274152751527615277152781527915280152811528215283152841528515286152871528815289152901529115292152931529415295152961529715298152991530015301153021530315304153051530615307153081530915310153111531215313153141531515316153171531815319153201532115322153231532415325153261532715328153291533015331153321533315334153351533615337153381533915340153411534215343153441534515346153471534815349153501535115352153531535415355153561535715358153591536015361153621536315364153651536615367153681536915370153711537215373153741537515376153771537815379153801538115382153831538415385153861538715388153891539015391153921539315394153951539615397153981539915400154011540215403154041540515406154071540815409154101541115412154131541415415154161541715418154191542015421154221542315424154251542615427154281542915430154311543215433154341543515436154371543815439154401544115442154431544415445154461544715448154491545015451154521545315454154551545615457154581545915460154611546215463154641546515466154671546815469154701547115472154731547415475154761547715478154791548015481154821548315484154851548615487154881548915490154911549215493154941549515496154971549815499155001550115502155031550415505155061550715508155091551015511155121551315514155151551615517155181551915520155211552215523155241552515526155271552815529155301553115532155331553415535155361553715538155391554015541155421554315544155451554615547155481554915550155511555215553155541555515556155571555815559155601556115562155631556415565155661556715568155691557015571155721557315574155751557615577155781557915580155811558215583155841558515586155871558815589155901559115592155931559415595155961559715598155991560015601156021560315604156051560615607156081560915610156111561215613156141561515616156171561815619156201562115622156231562415625156261562715628156291563015631156321563315634156351563615637156381563915640156411564215643156441564515646156471564815649156501565115652156531565415655156561565715658156591566015661156621566315664156651566615667156681566915670156711567215673156741567515676156771567815679156801568115682156831568415685156861568715688156891569015691156921569315694156951569615697156981569915700157011570215703157041570515706157071570815709157101571115712157131571415715157161571715718157191572015721157221572315724157251572615727157281572915730157311573215733157341573515736157371573815739157401574115742157431574415745157461574715748157491575015751157521575315754157551575615757157581575915760157611576215763157641576515766157671576815769157701577115772157731577415775157761577715778157791578015781157821578315784157851578615787157881578915790157911579215793157941579515796157971579815799158001580115802158031580415805158061580715808158091581015811158121581315814158151581615817158181581915820158211582215823158241582515826158271582815829158301583115832158331583415835158361583715838158391584015841158421584315844158451584615847158481584915850158511585215853158541585515856158571585815859158601586115862158631586415865158661586715868158691587015871158721587315874158751587615877158781587915880158811588215883158841588515886158871588815889158901589115892158931589415895158961589715898158991590015901159021590315904159051590615907159081590915910159111591215913159141591515916159171591815919159201592115922159231592415925159261592715928159291593015931159321593315934159351593615937159381593915940159411594215943159441594515946159471594815949159501595115952159531595415955159561595715958159591596015961159621596315964159651596615967159681596915970159711597215973159741597515976159771597815979159801598115982159831598415985159861598715988159891599015991159921599315994159951599615997159981599916000160011600216003160041600516006160071600816009160101601116012160131601416015160161601716018160191602016021160221602316024160251602616027160281602916030160311603216033160341603516036160371603816039160401604116042160431604416045160461604716048160491605016051160521605316054160551605616057160581605916060160611606216063160641606516066160671606816069160701607116072160731607416075160761607716078160791608016081160821608316084160851608616087160881608916090160911609216093160941609516096160971609816099161001610116102161031610416105161061610716108161091611016111161121611316114161151611616117161181611916120161211612216123161241612516126161271612816129161301613116132161331613416135161361613716138161391614016141161421614316144161451614616147161481614916150161511615216153161541615516156161571615816159161601616116162161631616416165161661616716168161691617016171161721617316174161751617616177161781617916180161811618216183161841618516186161871618816189161901619116192161931619416195161961619716198161991620016201162021620316204162051620616207162081620916210162111621216213162141621516216162171621816219162201622116222162231622416225162261622716228162291623016231162321623316234162351623616237162381623916240162411624216243162441624516246162471624816249162501625116252162531625416255162561625716258162591626016261162621626316264162651626616267162681626916270162711627216273162741627516276162771627816279162801628116282162831628416285162861628716288162891629016291162921629316294162951629616297162981629916300163011630216303163041630516306163071630816309163101631116312163131631416315163161631716318163191632016321163221632316324163251632616327163281632916330163311633216333163341633516336163371633816339163401634116342163431634416345163461634716348163491635016351163521635316354163551635616357163581635916360163611636216363163641636516366163671636816369163701637116372163731637416375163761637716378163791638016381163821638316384163851638616387163881638916390163911639216393163941639516396163971639816399164001640116402164031640416405164061640716408164091641016411164121641316414164151641616417164181641916420164211642216423164241642516426164271642816429164301643116432164331643416435164361643716438164391644016441164421644316444164451644616447164481644916450164511645216453164541645516456164571645816459164601646116462164631646416465164661646716468164691647016471164721647316474164751647616477164781647916480164811648216483164841648516486164871648816489164901649116492164931649416495164961649716498164991650016501165021650316504165051650616507165081650916510165111651216513165141651516516165171651816519165201652116522165231652416525165261652716528165291653016531165321653316534165351653616537165381653916540165411654216543165441654516546165471654816549165501655116552165531655416555165561655716558165591656016561165621656316564165651656616567165681656916570165711657216573165741657516576165771657816579165801658116582165831658416585165861658716588165891659016591165921659316594165951659616597165981659916600166011660216603166041660516606166071660816609166101661116612166131661416615166161661716618166191662016621166221662316624166251662616627166281662916630166311663216633166341663516636166371663816639166401664116642166431664416645166461664716648166491665016651166521665316654166551665616657166581665916660166611666216663166641666516666166671666816669166701667116672166731667416675166761667716678166791668016681166821668316684166851668616687166881668916690166911669216693166941669516696166971669816699167001670116702167031670416705167061670716708167091671016711167121671316714167151671616717167181671916720167211672216723167241672516726167271672816729167301673116732167331673416735167361673716738167391674016741167421674316744167451674616747167481674916750167511675216753167541675516756167571675816759167601676116762167631676416765167661676716768167691677016771167721677316774167751677616777167781677916780167811678216783167841678516786167871678816789167901679116792167931679416795167961679716798167991680016801168021680316804168051680616807168081680916810168111681216813168141681516816168171681816819168201682116822168231682416825168261682716828168291683016831168321683316834168351683616837168381683916840168411684216843168441684516846168471684816849168501685116852168531685416855168561685716858168591686016861168621686316864168651686616867168681686916870168711687216873168741687516876168771687816879168801688116882168831688416885168861688716888168891689016891168921689316894168951689616897168981689916900169011690216903169041690516906169071690816909169101691116912169131691416915169161691716918169191692016921169221692316924169251692616927169281692916930169311693216933169341693516936169371693816939169401694116942169431694416945169461694716948169491695016951169521695316954169551695616957169581695916960169611696216963169641696516966169671696816969169701697116972169731697416975169761697716978169791698016981169821698316984169851698616987169881698916990169911699216993169941699516996169971699816999170001700117002170031700417005170061700717008170091701017011170121701317014170151701617017170181701917020170211702217023170241702517026170271702817029170301703117032170331703417035170361703717038170391704017041170421704317044170451704617047170481704917050170511705217053170541705517056170571705817059170601706117062170631706417065170661706717068170691707017071170721707317074170751707617077170781707917080170811708217083170841708517086170871708817089170901709117092170931709417095170961709717098170991710017101171021710317104171051710617107171081710917110171111711217113171141711517116171171711817119171201712117122171231712417125171261712717128171291713017131171321713317134171351713617137171381713917140171411714217143171441714517146171471714817149171501715117152171531715417155171561715717158171591716017161171621716317164171651716617167171681716917170171711717217173171741717517176171771717817179171801718117182171831718417185171861718717188171891719017191171921719317194171951719617197171981719917200172011720217203172041720517206172071720817209172101721117212172131721417215172161721717218172191722017221172221722317224172251722617227172281722917230172311723217233172341723517236172371723817239172401724117242172431724417245172461724717248172491725017251172521725317254172551725617257172581725917260172611726217263172641726517266172671726817269172701727117272172731727417275172761727717278172791728017281172821728317284172851728617287172881728917290172911729217293172941729517296172971729817299173001730117302173031730417305173061730717308173091731017311173121731317314173151731617317173181731917320173211732217323173241732517326173271732817329173301733117332173331733417335173361733717338173391734017341173421734317344173451734617347173481734917350173511735217353173541735517356173571735817359173601736117362173631736417365173661736717368173691737017371173721737317374173751737617377173781737917380173811738217383173841738517386173871738817389173901739117392173931739417395173961739717398173991740017401174021740317404174051740617407174081740917410174111741217413174141741517416174171741817419174201742117422174231742417425174261742717428174291743017431174321743317434174351743617437174381743917440174411744217443174441744517446174471744817449174501745117452174531745417455174561745717458174591746017461174621746317464174651746617467174681746917470174711747217473174741747517476174771747817479174801748117482174831748417485174861748717488174891749017491174921749317494174951749617497174981749917500175011750217503175041750517506175071750817509175101751117512175131751417515175161751717518175191752017521175221752317524175251752617527175281752917530175311753217533175341753517536175371753817539175401754117542175431754417545175461754717548175491755017551175521755317554175551755617557175581755917560175611756217563175641756517566175671756817569175701757117572175731757417575175761757717578175791758017581175821758317584175851758617587175881758917590175911759217593175941759517596175971759817599176001760117602176031760417605176061760717608176091761017611176121761317614176151761617617176181761917620176211762217623176241762517626176271762817629176301763117632176331763417635176361763717638176391764017641176421764317644176451764617647176481764917650176511765217653176541765517656176571765817659176601766117662176631766417665176661766717668176691767017671176721767317674176751767617677176781767917680176811768217683176841768517686176871768817689176901769117692176931769417695176961769717698176991770017701177021770317704177051770617707177081770917710177111771217713177141771517716177171771817719177201772117722177231772417725177261772717728177291773017731177321773317734177351773617737177381773917740177411774217743177441774517746177471774817749177501775117752177531775417755177561775717758177591776017761177621776317764177651776617767177681776917770177711777217773177741777517776177771777817779177801778117782177831778417785177861778717788177891779017791177921779317794177951779617797177981779917800178011780217803178041780517806178071780817809178101781117812178131781417815178161781717818178191782017821178221782317824178251782617827178281782917830178311783217833178341783517836178371783817839178401784117842178431784417845178461784717848178491785017851178521785317854178551785617857178581785917860178611786217863178641786517866178671786817869178701787117872178731787417875178761787717878178791788017881178821788317884178851788617887178881788917890178911789217893178941789517896178971789817899179001790117902179031790417905179061790717908179091791017911179121791317914179151791617917179181791917920179211792217923179241792517926179271792817929179301793117932179331793417935179361793717938179391794017941179421794317944179451794617947179481794917950179511795217953179541795517956179571795817959179601796117962179631796417965179661796717968179691797017971179721797317974179751797617977179781797917980179811798217983179841798517986179871798817989179901799117992179931799417995179961799717998179991800018001180021800318004180051800618007180081800918010180111801218013180141801518016180171801818019180201802118022180231802418025180261802718028180291803018031180321803318034180351803618037180381803918040180411804218043180441804518046180471804818049180501805118052180531805418055180561805718058180591806018061180621806318064180651806618067180681806918070180711807218073180741807518076180771807818079180801808118082180831808418085180861808718088180891809018091180921809318094180951809618097180981809918100181011810218103181041810518106181071810818109181101811118112181131811418115181161811718118181191812018121181221812318124181251812618127181281812918130181311813218133181341813518136181371813818139181401814118142181431814418145181461814718148181491815018151181521815318154181551815618157181581815918160181611816218163181641816518166181671816818169181701817118172181731817418175181761817718178181791818018181181821818318184181851818618187181881818918190181911819218193181941819518196181971819818199182001820118202182031820418205182061820718208182091821018211182121821318214182151821618217182181821918220182211822218223182241822518226182271822818229182301823118232182331823418235182361823718238182391824018241182421824318244182451824618247182481824918250182511825218253182541825518256182571825818259182601826118262182631826418265182661826718268182691827018271182721827318274182751827618277182781827918280182811828218283182841828518286182871828818289182901829118292182931829418295182961829718298182991830018301183021830318304183051830618307183081830918310183111831218313183141831518316183171831818319183201832118322183231832418325183261832718328183291833018331183321833318334183351833618337183381833918340183411834218343183441834518346183471834818349183501835118352183531835418355183561835718358183591836018361183621836318364183651836618367183681836918370183711837218373183741837518376183771837818379183801838118382183831838418385183861838718388183891839018391183921839318394183951839618397183981839918400184011840218403184041840518406184071840818409184101841118412184131841418415184161841718418184191842018421184221842318424184251842618427184281842918430184311843218433184341843518436184371843818439184401844118442184431844418445184461844718448184491845018451184521845318454184551845618457184581845918460184611846218463184641846518466184671846818469184701847118472184731847418475184761847718478184791848018481184821848318484184851848618487184881848918490184911849218493184941849518496184971849818499185001850118502185031850418505185061850718508185091851018511185121851318514185151851618517185181851918520185211852218523185241852518526185271852818529185301853118532185331853418535185361853718538185391854018541185421854318544185451854618547185481854918550185511855218553185541855518556185571855818559185601856118562185631856418565185661856718568185691857018571185721857318574185751857618577185781857918580185811858218583185841858518586185871858818589185901859118592185931859418595185961859718598185991860018601186021860318604186051860618607186081860918610186111861218613186141861518616186171861818619186201862118622186231862418625186261862718628186291863018631186321863318634186351863618637186381863918640186411864218643186441864518646186471864818649186501865118652186531865418655186561865718658186591866018661186621866318664186651866618667186681866918670186711867218673186741867518676186771867818679186801868118682186831868418685186861868718688186891869018691186921869318694186951869618697186981869918700187011870218703187041870518706187071870818709187101871118712187131871418715187161871718718187191872018721187221872318724187251872618727187281872918730187311873218733187341873518736187371873818739187401874118742187431874418745187461874718748187491875018751187521875318754187551875618757187581875918760187611876218763187641876518766187671876818769187701877118772187731877418775187761877718778187791878018781187821878318784187851878618787187881878918790187911879218793187941879518796187971879818799188001880118802188031880418805188061880718808188091881018811188121881318814188151881618817188181881918820188211882218823188241882518826188271882818829188301883118832188331883418835188361883718838188391884018841188421884318844188451884618847188481884918850188511885218853188541885518856188571885818859188601886118862188631886418865188661886718868188691887018871188721887318874188751887618877188781887918880188811888218883188841888518886188871888818889188901889118892188931889418895188961889718898188991890018901189021890318904189051890618907189081890918910189111891218913189141891518916189171891818919189201892118922189231892418925189261892718928189291893018931189321893318934189351893618937189381893918940189411894218943189441894518946189471894818949189501895118952189531895418955189561895718958189591896018961189621896318964189651896618967189681896918970189711897218973189741897518976189771897818979189801898118982189831898418985189861898718988189891899018991189921899318994189951899618997189981899919000190011900219003190041900519006190071900819009190101901119012190131901419015190161901719018190191902019021190221902319024190251902619027190281902919030190311903219033190341903519036190371903819039190401904119042190431904419045190461904719048190491905019051190521905319054190551905619057190581905919060190611906219063190641906519066190671906819069190701907119072190731907419075190761907719078190791908019081190821908319084190851908619087190881908919090190911909219093190941909519096190971909819099191001910119102191031910419105191061910719108191091911019111191121911319114191151911619117191181911919120191211912219123191241912519126191271912819129191301913119132191331913419135191361913719138191391914019141191421914319144191451914619147191481914919150191511915219153191541915519156191571915819159191601916119162191631916419165191661916719168191691917019171191721917319174191751917619177191781917919180191811918219183191841918519186191871918819189191901919119192191931919419195191961919719198191991920019201192021920319204192051920619207192081920919210192111921219213192141921519216192171921819219192201922119222192231922419225192261922719228192291923019231192321923319234192351923619237192381923919240192411924219243192441924519246192471924819249192501925119252192531925419255192561925719258192591926019261192621926319264192651926619267192681926919270192711927219273192741927519276192771927819279192801928119282192831928419285192861928719288192891929019291192921929319294192951929619297192981929919300193011930219303193041930519306193071930819309193101931119312193131931419315193161931719318193191932019321193221932319324193251932619327193281932919330193311933219333193341933519336193371933819339193401934119342193431934419345193461934719348193491935019351193521935319354193551935619357193581935919360193611936219363193641936519366193671936819369193701937119372193731937419375193761937719378193791938019381193821938319384193851938619387193881938919390193911939219393193941939519396193971939819399194001940119402194031940419405194061940719408194091941019411194121941319414194151941619417194181941919420194211942219423194241942519426194271942819429194301943119432194331943419435194361943719438194391944019441194421944319444194451944619447194481944919450194511945219453194541945519456194571945819459194601946119462194631946419465194661946719468194691947019471194721947319474194751947619477194781947919480194811948219483194841948519486194871948819489194901949119492194931949419495194961949719498194991950019501195021950319504195051950619507195081950919510195111951219513195141951519516195171951819519195201952119522195231952419525195261952719528195291953019531195321953319534195351953619537195381953919540195411954219543195441954519546195471954819549195501955119552195531955419555195561955719558195591956019561195621956319564195651956619567195681956919570195711957219573195741957519576195771957819579195801958119582195831958419585195861958719588195891959019591195921959319594195951959619597195981959919600196011960219603196041960519606196071960819609196101961119612196131961419615196161961719618196191962019621196221962319624196251962619627196281962919630196311963219633196341963519636196371963819639196401964119642196431964419645196461964719648196491965019651196521965319654196551965619657196581965919660196611966219663196641966519666196671966819669196701967119672196731967419675196761967719678196791968019681196821968319684196851968619687196881968919690196911969219693196941969519696196971969819699197001970119702197031970419705197061970719708197091971019711197121971319714197151971619717197181971919720197211972219723197241972519726197271972819729197301973119732197331973419735197361973719738197391974019741197421974319744197451974619747197481974919750197511975219753197541975519756197571975819759197601976119762197631976419765197661976719768197691977019771197721977319774197751977619777197781977919780197811978219783197841978519786197871978819789197901979119792197931979419795197961979719798197991980019801198021980319804198051980619807198081980919810198111981219813198141981519816198171981819819198201982119822198231982419825198261982719828198291983019831198321983319834198351983619837198381983919840198411984219843198441984519846198471984819849198501985119852198531985419855198561985719858198591986019861198621986319864198651986619867198681986919870198711987219873198741987519876198771987819879198801988119882198831988419885198861988719888198891989019891198921989319894198951989619897198981989919900199011990219903199041990519906199071990819909199101991119912199131991419915199161991719918199191992019921199221992319924199251992619927199281992919930199311993219933199341993519936199371993819939199401994119942199431994419945199461994719948199491995019951199521995319954199551995619957199581995919960199611996219963199641996519966199671996819969199701997119972199731997419975199761997719978199791998019981199821998319984199851998619987199881998919990199911999219993199941999519996199971999819999200002000120002200032000420005200062000720008200092001020011200122001320014200152001620017200182001920020200212002220023200242002520026200272002820029200302003120032200332003420035200362003720038200392004020041200422004320044200452004620047200482004920050200512005220053200542005520056200572005820059200602006120062200632006420065200662006720068200692007020071200722007320074200752007620077200782007920080200812008220083200842008520086200872008820089200902009120092200932009420095200962009720098200992010020101201022010320104201052010620107201082010920110201112011220113201142011520116201172011820119201202012120122201232012420125201262012720128201292013020131201322013320134201352013620137201382013920140201412014220143201442014520146201472014820149201502015120152201532015420155201562015720158201592016020161201622016320164201652016620167201682016920170201712017220173201742017520176201772017820179201802018120182201832018420185201862018720188201892019020191201922019320194201952019620197201982019920200202012020220203202042020520206202072020820209202102021120212202132021420215202162021720218202192022020221202222022320224202252022620227202282022920230202312023220233202342023520236202372023820239202402024120242202432024420245202462024720248202492025020251202522025320254202552025620257202582025920260202612026220263202642026520266202672026820269202702027120272202732027420275202762027720278202792028020281202822028320284202852028620287202882028920290202912029220293202942029520296202972029820299203002030120302203032030420305203062030720308203092031020311203122031320314203152031620317203182031920320203212032220323203242032520326203272032820329203302033120332203332033420335203362033720338203392034020341203422034320344203452034620347203482034920350203512035220353203542035520356203572035820359203602036120362203632036420365203662036720368203692037020371203722037320374203752037620377203782037920380203812038220383203842038520386203872038820389203902039120392203932039420395203962039720398203992040020401204022040320404204052040620407204082040920410204112041220413204142041520416204172041820419204202042120422204232042420425204262042720428204292043020431204322043320434204352043620437204382043920440204412044220443204442044520446204472044820449204502045120452204532045420455204562045720458204592046020461204622046320464204652046620467204682046920470204712047220473204742047520476204772047820479204802048120482204832048420485204862048720488204892049020491204922049320494204952049620497204982049920500205012050220503205042050520506205072050820509205102051120512205132051420515205162051720518205192052020521205222052320524205252052620527205282052920530205312053220533205342053520536205372053820539205402054120542205432054420545205462054720548205492055020551205522055320554205552055620557205582055920560205612056220563205642056520566205672056820569205702057120572205732057420575205762057720578205792058020581205822058320584205852058620587205882058920590205912059220593205942059520596205972059820599206002060120602206032060420605206062060720608206092061020611206122061320614206152061620617206182061920620206212062220623206242062520626206272062820629206302063120632206332063420635206362063720638206392064020641206422064320644206452064620647206482064920650206512065220653206542065520656206572065820659206602066120662206632066420665206662066720668206692067020671206722067320674206752067620677206782067920680206812068220683206842068520686206872068820689206902069120692206932069420695206962069720698206992070020701207022070320704207052070620707207082070920710207112071220713207142071520716207172071820719207202072120722207232072420725207262072720728207292073020731207322073320734207352073620737207382073920740207412074220743207442074520746207472074820749207502075120752207532075420755207562075720758207592076020761207622076320764207652076620767207682076920770207712077220773207742077520776207772077820779207802078120782207832078420785207862078720788207892079020791207922079320794207952079620797207982079920800208012080220803208042080520806208072080820809208102081120812208132081420815208162081720818208192082020821208222082320824208252082620827208282082920830208312083220833208342083520836208372083820839208402084120842208432084420845208462084720848208492085020851208522085320854208552085620857208582085920860208612086220863208642086520866208672086820869208702087120872208732087420875208762087720878208792088020881208822088320884208852088620887208882088920890208912089220893208942089520896208972089820899209002090120902209032090420905209062090720908209092091020911209122091320914209152091620917209182091920920209212092220923209242092520926209272092820929209302093120932209332093420935209362093720938209392094020941209422094320944209452094620947209482094920950209512095220953209542095520956209572095820959209602096120962209632096420965209662096720968209692097020971209722097320974209752097620977209782097920980209812098220983209842098520986209872098820989209902099120992209932099420995209962099720998209992100021001210022100321004210052100621007210082100921010210112101221013210142101521016210172101821019210202102121022210232102421025210262102721028210292103021031210322103321034210352103621037210382103921040210412104221043210442104521046210472104821049210502105121052210532105421055210562105721058210592106021061210622106321064210652106621067210682106921070210712107221073210742107521076210772107821079210802108121082210832108421085210862108721088210892109021091210922109321094210952109621097210982109921100211012110221103211042110521106211072110821109211102111121112211132111421115211162111721118211192112021121211222112321124211252112621127211282112921130211312113221133211342113521136211372113821139211402114121142211432114421145211462114721148211492115021151211522115321154211552115621157211582115921160211612116221163211642116521166211672116821169211702117121172211732117421175211762117721178211792118021181211822118321184211852118621187211882118921190211912119221193211942119521196211972119821199212002120121202212032120421205212062120721208212092121021211212122121321214212152121621217212182121921220212212122221223212242122521226212272122821229212302123121232212332123421235212362123721238212392124021241212422124321244212452124621247212482124921250212512125221253212542125521256212572125821259212602126121262212632126421265212662126721268212692127021271212722127321274212752127621277212782127921280212812128221283212842128521286212872128821289212902129121292212932129421295212962129721298212992130021301213022130321304213052130621307213082130921310213112131221313213142131521316213172131821319213202132121322213232132421325213262132721328213292133021331213322133321334213352133621337213382133921340213412134221343213442134521346213472134821349213502135121352213532135421355213562135721358213592136021361213622136321364213652136621367213682136921370213712137221373213742137521376213772137821379213802138121382213832138421385213862138721388213892139021391213922139321394213952139621397213982139921400214012140221403214042140521406214072140821409214102141121412214132141421415214162141721418214192142021421214222142321424214252142621427214282142921430214312143221433214342143521436214372143821439214402144121442214432144421445214462144721448214492145021451214522145321454214552145621457214582145921460214612146221463214642146521466214672146821469214702147121472214732147421475214762147721478214792148021481214822148321484214852148621487214882148921490214912149221493214942149521496214972149821499215002150121502215032150421505215062150721508215092151021511215122151321514215152151621517215182151921520215212152221523215242152521526215272152821529215302153121532215332153421535215362153721538215392154021541215422154321544215452154621547215482154921550215512155221553215542155521556215572155821559215602156121562215632156421565215662156721568215692157021571215722157321574215752157621577215782157921580215812158221583215842158521586215872158821589215902159121592215932159421595215962159721598215992160021601216022160321604216052160621607216082160921610216112161221613216142161521616216172161821619216202162121622216232162421625216262162721628216292163021631216322163321634216352163621637216382163921640216412164221643216442164521646216472164821649216502165121652216532165421655216562165721658216592166021661216622166321664216652166621667216682166921670216712167221673216742167521676216772167821679216802168121682216832168421685216862168721688216892169021691216922169321694216952169621697216982169921700217012170221703217042170521706217072170821709217102171121712217132171421715217162171721718217192172021721217222172321724217252172621727217282172921730217312173221733217342173521736217372173821739217402174121742217432174421745217462174721748217492175021751217522175321754217552175621757217582175921760217612176221763217642176521766217672176821769217702177121772217732177421775217762177721778217792178021781217822178321784217852178621787217882178921790217912179221793217942179521796217972179821799218002180121802218032180421805218062180721808218092181021811218122181321814218152181621817218182181921820218212182221823218242182521826218272182821829218302183121832218332183421835218362183721838218392184021841218422184321844218452184621847218482184921850218512185221853218542185521856218572185821859218602186121862218632186421865218662186721868218692187021871218722187321874218752187621877218782187921880218812188221883218842188521886218872188821889218902189121892218932189421895218962189721898218992190021901219022190321904219052190621907219082190921910219112191221913219142191521916219172191821919219202192121922219232192421925219262192721928219292193021931219322193321934219352193621937219382193921940219412194221943219442194521946219472194821949219502195121952219532195421955219562195721958219592196021961219622196321964219652196621967219682196921970219712197221973219742197521976219772197821979219802198121982219832198421985219862198721988219892199021991219922199321994219952199621997219982199922000220012200222003220042200522006220072200822009220102201122012220132201422015220162201722018220192202022021220222202322024220252202622027220282202922030220312203222033220342203522036220372203822039220402204122042220432204422045220462204722048220492205022051220522205322054220552205622057220582205922060220612206222063220642206522066220672206822069220702207122072220732207422075220762207722078220792208022081220822208322084220852208622087220882208922090220912209222093220942209522096220972209822099221002210122102221032210422105221062210722108221092211022111221122211322114221152211622117221182211922120221212212222123221242212522126221272212822129221302213122132221332213422135221362213722138221392214022141221422214322144221452214622147221482214922150221512215222153221542215522156221572215822159221602216122162221632216422165221662216722168221692217022171221722217322174221752217622177221782217922180221812218222183221842218522186221872218822189221902219122192221932219422195221962219722198221992220022201222022220322204222052220622207222082220922210222112221222213222142221522216222172221822219222202222122222222232222422225222262222722228222292223022231222322223322234222352223622237222382223922240222412224222243222442224522246222472224822249222502225122252222532225422255222562225722258222592226022261222622226322264222652226622267222682226922270222712227222273222742227522276222772227822279222802228122282222832228422285222862228722288222892229022291222922229322294222952229622297222982229922300223012230222303223042230522306223072230822309223102231122312223132231422315223162231722318223192232022321223222232322324223252232622327223282232922330223312233222333223342233522336223372233822339223402234122342223432234422345223462234722348223492235022351223522235322354223552235622357223582235922360223612236222363223642236522366223672236822369223702237122372223732237422375223762237722378223792238022381223822238322384223852238622387223882238922390223912239222393223942239522396223972239822399224002240122402224032240422405224062240722408224092241022411224122241322414224152241622417224182241922420224212242222423224242242522426224272242822429224302243122432224332243422435224362243722438224392244022441224422244322444224452244622447224482244922450224512245222453224542245522456224572245822459224602246122462224632246422465224662246722468224692247022471224722247322474224752247622477224782247922480224812248222483224842248522486224872248822489224902249122492224932249422495224962249722498224992250022501225022250322504225052250622507225082250922510225112251222513225142251522516225172251822519225202252122522225232252422525225262252722528225292253022531225322253322534225352253622537225382253922540225412254222543225442254522546225472254822549225502255122552225532255422555225562255722558225592256022561225622256322564225652256622567225682256922570225712257222573225742257522576225772257822579225802258122582225832258422585225862258722588225892259022591225922259322594225952259622597225982259922600226012260222603226042260522606226072260822609226102261122612226132261422615226162261722618226192262022621226222262322624226252262622627226282262922630226312263222633226342263522636226372263822639226402264122642226432264422645226462264722648226492265022651226522265322654226552265622657226582265922660226612266222663226642266522666226672266822669226702267122672226732267422675226762267722678226792268022681226822268322684226852268622687226882268922690226912269222693226942269522696226972269822699227002270122702227032270422705227062270722708227092271022711227122271322714227152271622717227182271922720227212272222723227242272522726227272272822729227302273122732227332273422735227362273722738227392274022741227422274322744227452274622747227482274922750227512275222753227542275522756227572275822759227602276122762227632276422765227662276722768227692277022771227722277322774227752277622777227782277922780227812278222783227842278522786227872278822789227902279122792227932279422795227962279722798227992280022801228022280322804228052280622807228082280922810228112281222813228142281522816228172281822819228202282122822228232282422825228262282722828228292283022831228322283322834228352283622837228382283922840228412284222843228442284522846228472284822849228502285122852228532285422855228562285722858228592286022861228622286322864228652286622867228682286922870228712287222873228742287522876228772287822879228802288122882228832288422885228862288722888228892289022891228922289322894228952289622897228982289922900229012290222903229042290522906229072290822909229102291122912229132291422915229162291722918229192292022921229222292322924229252292622927229282292922930229312293222933229342293522936229372293822939229402294122942229432294422945229462294722948229492295022951229522295322954229552295622957229582295922960229612296222963229642296522966229672296822969229702297122972229732297422975229762297722978229792298022981229822298322984229852298622987229882298922990229912299222993229942299522996229972299822999230002300123002230032300423005230062300723008230092301023011230122301323014230152301623017230182301923020230212302223023230242302523026230272302823029230302303123032230332303423035230362303723038230392304023041230422304323044230452304623047230482304923050230512305223053230542305523056230572305823059230602306123062230632306423065230662306723068230692307023071230722307323074230752307623077230782307923080230812308223083230842308523086230872308823089230902309123092230932309423095230962309723098230992310023101231022310323104231052310623107231082310923110231112311223113231142311523116231172311823119231202312123122231232312423125231262312723128231292313023131231322313323134231352313623137231382313923140231412314223143231442314523146231472314823149231502315123152231532315423155231562315723158231592316023161231622316323164231652316623167231682316923170231712317223173231742317523176231772317823179231802318123182231832318423185231862318723188231892319023191231922319323194231952319623197231982319923200232012320223203232042320523206232072320823209232102321123212232132321423215232162321723218232192322023221232222322323224232252322623227232282322923230232312323223233232342323523236232372323823239232402324123242232432324423245232462324723248232492325023251232522325323254232552325623257232582325923260232612326223263232642326523266232672326823269232702327123272232732327423275232762327723278232792328023281232822328323284232852328623287232882328923290232912329223293232942329523296232972329823299233002330123302233032330423305233062330723308233092331023311233122331323314233152331623317233182331923320233212332223323233242332523326233272332823329233302333123332233332333423335233362333723338233392334023341233422334323344233452334623347233482334923350233512335223353233542335523356233572335823359233602336123362233632336423365233662336723368233692337023371233722337323374233752337623377233782337923380233812338223383233842338523386233872338823389233902339123392233932339423395233962339723398233992340023401234022340323404234052340623407234082340923410234112341223413234142341523416234172341823419234202342123422234232342423425234262342723428234292343023431234322343323434234352343623437234382343923440234412344223443234442344523446234472344823449234502345123452234532345423455234562345723458234592346023461234622346323464234652346623467234682346923470234712347223473234742347523476234772347823479234802348123482234832348423485234862348723488234892349023491234922349323494234952349623497234982349923500235012350223503235042350523506235072350823509235102351123512235132351423515235162351723518235192352023521235222352323524235252352623527235282352923530235312353223533235342353523536235372353823539235402354123542235432354423545235462354723548235492355023551235522355323554235552355623557235582355923560235612356223563235642356523566235672356823569235702357123572235732357423575235762357723578235792358023581235822358323584235852358623587235882358923590235912359223593235942359523596235972359823599236002360123602236032360423605236062360723608236092361023611236122361323614236152361623617236182361923620236212362223623236242362523626236272362823629236302363123632236332363423635236362363723638236392364023641236422364323644236452364623647236482364923650236512365223653236542365523656236572365823659236602366123662236632366423665236662366723668236692367023671236722367323674236752367623677236782367923680236812368223683236842368523686236872368823689236902369123692236932369423695236962369723698236992370023701237022370323704237052370623707237082370923710237112371223713237142371523716237172371823719237202372123722237232372423725237262372723728237292373023731237322373323734237352373623737237382373923740237412374223743237442374523746237472374823749237502375123752237532375423755237562375723758237592376023761237622376323764237652376623767237682376923770237712377223773237742377523776237772377823779237802378123782237832378423785237862378723788237892379023791237922379323794237952379623797237982379923800238012380223803238042380523806238072380823809238102381123812238132381423815238162381723818238192382023821238222382323824238252382623827238282382923830238312383223833238342383523836238372383823839238402384123842238432384423845238462384723848238492385023851238522385323854238552385623857238582385923860238612386223863238642386523866238672386823869238702387123872238732387423875238762387723878238792388023881238822388323884238852388623887238882388923890238912389223893238942389523896238972389823899239002390123902239032390423905239062390723908239092391023911239122391323914239152391623917239182391923920239212392223923239242392523926239272392823929239302393123932239332393423935239362393723938239392394023941239422394323944239452394623947239482394923950239512395223953239542395523956239572395823959239602396123962239632396423965239662396723968239692397023971239722397323974239752397623977239782397923980239812398223983239842398523986239872398823989239902399123992239932399423995239962399723998239992400024001240022400324004240052400624007240082400924010240112401224013240142401524016240172401824019240202402124022240232402424025240262402724028240292403024031240322403324034240352403624037240382403924040240412404224043240442404524046240472404824049240502405124052240532405424055240562405724058240592406024061240622406324064240652406624067240682406924070240712407224073240742407524076240772407824079240802408124082240832408424085240862408724088240892409024091240922409324094240952409624097240982409924100241012410224103241042410524106241072410824109241102411124112241132411424115241162411724118241192412024121241222412324124241252412624127241282412924130241312413224133241342413524136241372413824139241402414124142241432414424145241462414724148241492415024151241522415324154241552415624157241582415924160241612416224163241642416524166241672416824169241702417124172241732417424175241762417724178241792418024181241822418324184241852418624187241882418924190241912419224193241942419524196241972419824199242002420124202242032420424205242062420724208242092421024211242122421324214242152421624217242182421924220242212422224223242242422524226242272422824229242302423124232242332423424235242362423724238242392424024241242422424324244242452424624247242482424924250242512425224253242542425524256242572425824259242602426124262242632426424265242662426724268242692427024271242722427324274242752427624277242782427924280242812428224283242842428524286242872428824289242902429124292242932429424295242962429724298242992430024301243022430324304243052430624307243082430924310243112431224313243142431524316243172431824319243202432124322243232432424325243262432724328243292433024331243322433324334243352433624337243382433924340243412434224343243442434524346243472434824349243502435124352243532435424355243562435724358243592436024361243622436324364243652436624367243682436924370243712437224373243742437524376243772437824379243802438124382243832438424385243862438724388243892439024391243922439324394243952439624397243982439924400244012440224403244042440524406244072440824409244102441124412244132441424415244162441724418244192442024421244222442324424244252442624427244282442924430244312443224433244342443524436244372443824439244402444124442244432444424445244462444724448244492445024451244522445324454244552445624457244582445924460244612446224463244642446524466244672446824469244702447124472244732447424475244762447724478244792448024481244822448324484244852448624487244882448924490244912449224493244942449524496244972449824499245002450124502245032450424505245062450724508245092451024511245122451324514245152451624517245182451924520245212452224523245242452524526245272452824529245302453124532245332453424535245362453724538245392454024541245422454324544245452454624547245482454924550245512455224553245542455524556245572455824559245602456124562245632456424565245662456724568245692457024571245722457324574245752457624577245782457924580245812458224583245842458524586245872458824589245902459124592245932459424595245962459724598245992460024601246022460324604246052460624607246082460924610246112461224613246142461524616246172461824619246202462124622246232462424625246262462724628246292463024631246322463324634246352463624637246382463924640246412464224643246442464524646246472464824649246502465124652246532465424655246562465724658246592466024661246622466324664246652466624667246682466924670246712467224673246742467524676246772467824679246802468124682246832468424685246862468724688246892469024691246922469324694246952469624697246982469924700247012470224703247042470524706247072470824709247102471124712247132471424715247162471724718247192472024721247222472324724247252472624727247282472924730247312473224733247342473524736247372473824739247402474124742247432474424745247462474724748247492475024751247522475324754247552475624757247582475924760247612476224763247642476524766247672476824769247702477124772247732477424775247762477724778247792478024781247822478324784247852478624787247882478924790247912479224793247942479524796247972479824799248002480124802248032480424805248062480724808248092481024811248122481324814248152481624817248182481924820248212482224823248242482524826248272482824829248302483124832248332483424835248362483724838248392484024841248422484324844248452484624847248482484924850248512485224853248542485524856248572485824859248602486124862248632486424865248662486724868248692487024871248722487324874248752487624877248782487924880248812488224883248842488524886248872488824889248902489124892248932489424895248962489724898248992490024901249022490324904249052490624907249082490924910249112491224913249142491524916249172491824919249202492124922249232492424925249262492724928249292493024931249322493324934249352493624937249382493924940249412494224943249442494524946249472494824949249502495124952249532495424955249562495724958249592496024961249622496324964249652496624967249682496924970249712497224973249742497524976249772497824979249802498124982249832498424985249862498724988249892499024991249922499324994249952499624997249982499925000250012500225003250042500525006250072500825009250102501125012250132501425015250162501725018250192502025021250222502325024250252502625027250282502925030250312503225033250342503525036250372503825039250402504125042250432504425045250462504725048250492505025051250522505325054250552505625057250582505925060250612506225063250642506525066250672506825069250702507125072250732507425075250762507725078250792508025081250822508325084250852508625087250882508925090250912509225093250942509525096250972509825099251002510125102251032510425105251062510725108251092511025111251122511325114251152511625117251182511925120251212512225123251242512525126251272512825129251302513125132251332513425135251362513725138251392514025141251422514325144251452514625147251482514925150251512515225153251542515525156251572515825159251602516125162251632516425165251662516725168251692517025171251722517325174251752517625177251782517925180251812518225183251842518525186251872518825189251902519125192251932519425195251962519725198251992520025201252022520325204252052520625207252082520925210252112521225213252142521525216252172521825219252202522125222252232522425225252262522725228252292523025231252322523325234252352523625237252382523925240252412524225243252442524525246252472524825249252502525125252252532525425255252562525725258252592526025261252622526325264252652526625267252682526925270252712527225273252742527525276252772527825279252802528125282252832528425285252862528725288252892529025291252922529325294252952529625297252982529925300253012530225303253042530525306253072530825309253102531125312253132531425315253162531725318253192532025321253222532325324253252532625327253282532925330253312533225333253342533525336253372533825339253402534125342253432534425345253462534725348253492535025351253522535325354253552535625357253582535925360253612536225363253642536525366253672536825369253702537125372253732537425375253762537725378253792538025381253822538325384253852538625387253882538925390253912539225393253942539525396253972539825399254002540125402254032540425405254062540725408254092541025411254122541325414254152541625417254182541925420254212542225423254242542525426254272542825429254302543125432254332543425435254362543725438254392544025441254422544325444254452544625447254482544925450254512545225453254542545525456254572545825459254602546125462254632546425465254662546725468254692547025471254722547325474254752547625477254782547925480254812548225483254842548525486254872548825489254902549125492254932549425495254962549725498254992550025501255022550325504255052550625507255082550925510255112551225513255142551525516255172551825519255202552125522255232552425525255262552725528255292553025531255322553325534255352553625537255382553925540255412554225543255442554525546255472554825549255502555125552255532555425555255562555725558255592556025561255622556325564255652556625567255682556925570255712557225573255742557525576255772557825579255802558125582255832558425585255862558725588255892559025591255922559325594255952559625597255982559925600256012560225603256042560525606256072560825609256102561125612256132561425615256162561725618256192562025621256222562325624256252562625627256282562925630256312563225633256342563525636256372563825639256402564125642256432564425645256462564725648256492565025651256522565325654256552565625657256582565925660256612566225663256642566525666256672566825669256702567125672256732567425675256762567725678256792568025681256822568325684256852568625687256882568925690256912569225693256942569525696256972569825699257002570125702257032570425705257062570725708257092571025711257122571325714257152571625717257182571925720257212572225723257242572525726257272572825729257302573125732257332573425735257362573725738257392574025741257422574325744257452574625747257482574925750257512575225753257542575525756257572575825759257602576125762257632576425765257662576725768257692577025771257722577325774257752577625777257782577925780257812578225783257842578525786257872578825789257902579125792257932579425795257962579725798257992580025801258022580325804258052580625807258082580925810258112581225813258142581525816258172581825819258202582125822258232582425825258262582725828258292583025831258322583325834258352583625837258382583925840258412584225843258442584525846258472584825849258502585125852258532585425855258562585725858258592586025861258622586325864258652586625867258682586925870258712587225873258742587525876258772587825879258802588125882258832588425885258862588725888258892589025891258922589325894258952589625897258982589925900259012590225903259042590525906259072590825909259102591125912259132591425915259162591725918259192592025921259222592325924259252592625927259282592925930259312593225933259342593525936259372593825939259402594125942259432594425945259462594725948259492595025951259522595325954259552595625957259582595925960259612596225963259642596525966259672596825969259702597125972259732597425975259762597725978259792598025981259822598325984259852598625987259882598925990259912599225993259942599525996259972599825999260002600126002260032600426005260062600726008260092601026011260122601326014260152601626017260182601926020260212602226023260242602526026260272602826029260302603126032260332603426035260362603726038260392604026041260422604326044260452604626047260482604926050260512605226053260542605526056260572605826059260602606126062260632606426065260662606726068260692607026071260722607326074260752607626077260782607926080260812608226083260842608526086260872608826089260902609126092260932609426095260962609726098260992610026101261022610326104261052610626107261082610926110261112611226113261142611526116261172611826119261202612126122261232612426125261262612726128261292613026131261322613326134261352613626137261382613926140261412614226143261442614526146261472614826149261502615126152261532615426155261562615726158261592616026161261622616326164261652616626167261682616926170261712617226173261742617526176261772617826179261802618126182261832618426185261862618726188261892619026191261922619326194261952619626197261982619926200262012620226203262042620526206262072620826209262102621126212262132621426215262162621726218262192622026221262222622326224262252622626227262282622926230262312623226233262342623526236262372623826239262402624126242262432624426245262462624726248262492625026251262522625326254262552625626257262582625926260262612626226263262642626526266262672626826269262702627126272262732627426275262762627726278262792628026281262822628326284262852628626287262882628926290262912629226293262942629526296262972629826299263002630126302263032630426305263062630726308263092631026311263122631326314263152631626317263182631926320263212632226323263242632526326263272632826329263302633126332263332633426335263362633726338263392634026341263422634326344263452634626347263482634926350263512635226353263542635526356263572635826359263602636126362263632636426365263662636726368263692637026371263722637326374263752637626377263782637926380263812638226383263842638526386263872638826389263902639126392263932639426395263962639726398263992640026401264022640326404264052640626407264082640926410264112641226413264142641526416264172641826419264202642126422264232642426425264262642726428264292643026431264322643326434264352643626437264382643926440264412644226443264442644526446264472644826449264502645126452264532645426455264562645726458264592646026461264622646326464264652646626467264682646926470264712647226473264742647526476264772647826479264802648126482264832648426485264862648726488264892649026491264922649326494264952649626497264982649926500265012650226503265042650526506265072650826509265102651126512265132651426515265162651726518265192652026521265222652326524265252652626527265282652926530265312653226533265342653526536265372653826539265402654126542265432654426545265462654726548265492655026551265522655326554265552655626557265582655926560265612656226563265642656526566265672656826569265702657126572265732657426575265762657726578265792658026581265822658326584265852658626587265882658926590265912659226593265942659526596265972659826599266002660126602266032660426605266062660726608266092661026611266122661326614266152661626617266182661926620266212662226623266242662526626266272662826629266302663126632266332663426635266362663726638266392664026641266422664326644266452664626647266482664926650266512665226653266542665526656266572665826659266602666126662266632666426665266662666726668266692667026671266722667326674266752667626677266782667926680266812668226683266842668526686266872668826689266902669126692266932669426695266962669726698266992670026701267022670326704267052670626707267082670926710267112671226713267142671526716267172671826719267202672126722267232672426725267262672726728267292673026731267322673326734267352673626737267382673926740267412674226743267442674526746267472674826749267502675126752267532675426755267562675726758267592676026761267622676326764267652676626767267682676926770267712677226773267742677526776267772677826779267802678126782267832678426785267862678726788267892679026791267922679326794267952679626797267982679926800268012680226803268042680526806268072680826809268102681126812268132681426815268162681726818268192682026821268222682326824268252682626827268282682926830268312683226833268342683526836268372683826839268402684126842268432684426845268462684726848268492685026851268522685326854268552685626857268582685926860268612686226863268642686526866268672686826869268702687126872268732687426875268762687726878268792688026881268822688326884268852688626887268882688926890268912689226893268942689526896268972689826899269002690126902269032690426905269062690726908269092691026911269122691326914269152691626917269182691926920269212692226923269242692526926269272692826929269302693126932269332693426935269362693726938269392694026941269422694326944269452694626947269482694926950269512695226953269542695526956269572695826959269602696126962269632696426965269662696726968269692697026971269722697326974269752697626977269782697926980269812698226983269842698526986269872698826989269902699126992269932699426995269962699726998269992700027001270022700327004270052700627007270082700927010270112701227013270142701527016270172701827019270202702127022270232702427025270262702727028270292703027031270322703327034270352703627037270382703927040270412704227043270442704527046270472704827049270502705127052270532705427055270562705727058270592706027061270622706327064270652706627067270682706927070270712707227073270742707527076270772707827079270802708127082270832708427085270862708727088270892709027091270922709327094270952709627097270982709927100271012710227103271042710527106271072710827109271102711127112271132711427115271162711727118271192712027121271222712327124271252712627127271282712927130271312713227133271342713527136271372713827139271402714127142271432714427145271462714727148271492715027151271522715327154271552715627157271582715927160271612716227163271642716527166271672716827169271702717127172271732717427175271762717727178271792718027181271822718327184271852718627187271882718927190271912719227193271942719527196271972719827199272002720127202272032720427205272062720727208272092721027211272122721327214272152721627217272182721927220272212722227223272242722527226272272722827229272302723127232272332723427235272362723727238272392724027241272422724327244272452724627247272482724927250272512725227253272542725527256272572725827259272602726127262272632726427265272662726727268272692727027271272722727327274272752727627277272782727927280272812728227283272842728527286272872728827289272902729127292272932729427295272962729727298272992730027301273022730327304273052730627307273082730927310273112731227313273142731527316273172731827319273202732127322273232732427325273262732727328273292733027331273322733327334273352733627337273382733927340273412734227343273442734527346273472734827349273502735127352273532735427355273562735727358273592736027361273622736327364273652736627367273682736927370273712737227373273742737527376273772737827379273802738127382273832738427385273862738727388273892739027391273922739327394273952739627397273982739927400274012740227403274042740527406274072740827409274102741127412274132741427415274162741727418274192742027421274222742327424274252742627427274282742927430274312743227433274342743527436274372743827439274402744127442274432744427445274462744727448274492745027451274522745327454274552745627457274582745927460274612746227463274642746527466274672746827469274702747127472274732747427475274762747727478274792748027481274822748327484274852748627487274882748927490274912749227493274942749527496274972749827499275002750127502275032750427505275062750727508275092751027511275122751327514275152751627517275182751927520275212752227523275242752527526275272752827529275302753127532275332753427535275362753727538275392754027541275422754327544275452754627547275482754927550275512755227553275542755527556275572755827559275602756127562275632756427565275662756727568275692757027571275722757327574275752757627577275782757927580275812758227583275842758527586275872758827589275902759127592275932759427595275962759727598275992760027601276022760327604276052760627607276082760927610276112761227613276142761527616276172761827619276202762127622276232762427625276262762727628276292763027631276322763327634276352763627637276382763927640276412764227643276442764527646276472764827649276502765127652276532765427655276562765727658276592766027661276622766327664276652766627667276682766927670276712767227673276742767527676276772767827679276802768127682276832768427685276862768727688276892769027691276922769327694276952769627697276982769927700277012770227703277042770527706277072770827709277102771127712277132771427715277162771727718277192772027721277222772327724277252772627727277282772927730277312773227733277342773527736277372773827739277402774127742277432774427745277462774727748277492775027751277522775327754277552775627757277582775927760277612776227763277642776527766277672776827769277702777127772277732777427775277762777727778277792778027781277822778327784277852778627787277882778927790277912779227793277942779527796277972779827799278002780127802278032780427805278062780727808278092781027811278122781327814278152781627817278182781927820278212782227823278242782527826278272782827829278302783127832278332783427835278362783727838278392784027841278422784327844278452784627847278482784927850278512785227853278542785527856278572785827859278602786127862278632786427865278662786727868278692787027871278722787327874278752787627877278782787927880278812788227883278842788527886278872788827889278902789127892278932789427895278962789727898278992790027901279022790327904279052790627907279082790927910279112791227913279142791527916279172791827919279202792127922279232792427925279262792727928279292793027931279322793327934279352793627937279382793927940279412794227943279442794527946279472794827949279502795127952279532795427955279562795727958279592796027961279622796327964279652796627967279682796927970279712797227973279742797527976279772797827979279802798127982279832798427985279862798727988279892799027991279922799327994279952799627997279982799928000280012800228003280042800528006280072800828009280102801128012280132801428015280162801728018280192802028021280222802328024280252802628027280282802928030280312803228033280342803528036280372803828039280402804128042280432804428045280462804728048280492805028051280522805328054280552805628057280582805928060280612806228063280642806528066280672806828069280702807128072280732807428075280762807728078280792808028081280822808328084280852808628087280882808928090280912809228093280942809528096280972809828099281002810128102281032810428105281062810728108281092811028111281122811328114281152811628117281182811928120281212812228123281242812528126281272812828129281302813128132281332813428135281362813728138281392814028141281422814328144281452814628147281482814928150281512815228153281542815528156281572815828159281602816128162281632816428165281662816728168281692817028171281722817328174281752817628177281782817928180281812818228183281842818528186281872818828189281902819128192281932819428195281962819728198281992820028201282022820328204282052820628207282082820928210282112821228213282142821528216282172821828219282202822128222282232822428225282262822728228282292823028231282322823328234282352823628237282382823928240282412824228243282442824528246282472824828249282502825128252282532825428255282562825728258282592826028261282622826328264282652826628267282682826928270282712827228273282742827528276282772827828279282802828128282282832828428285282862828728288282892829028291282922829328294282952829628297282982829928300283012830228303283042830528306283072830828309283102831128312283132831428315283162831728318283192832028321283222832328324283252832628327283282832928330283312833228333283342833528336283372833828339283402834128342283432834428345283462834728348283492835028351283522835328354283552835628357283582835928360283612836228363283642836528366283672836828369283702837128372283732837428375283762837728378283792838028381283822838328384283852838628387283882838928390283912839228393283942839528396283972839828399284002840128402284032840428405284062840728408284092841028411284122841328414284152841628417284182841928420284212842228423284242842528426284272842828429284302843128432284332843428435284362843728438284392844028441284422844328444284452844628447284482844928450284512845228453284542845528456284572845828459284602846128462284632846428465284662846728468284692847028471284722847328474284752847628477284782847928480284812848228483284842848528486284872848828489284902849128492284932849428495284962849728498284992850028501285022850328504285052850628507285082850928510285112851228513285142851528516285172851828519285202852128522285232852428525285262852728528285292853028531285322853328534285352853628537285382853928540285412854228543285442854528546285472854828549285502855128552285532855428555285562855728558285592856028561285622856328564285652856628567285682856928570285712857228573285742857528576285772857828579285802858128582285832858428585285862858728588285892859028591285922859328594285952859628597285982859928600286012860228603286042860528606286072860828609286102861128612286132861428615286162861728618286192862028621286222862328624286252862628627286282862928630286312863228633286342863528636286372863828639286402864128642286432864428645286462864728648286492865028651286522865328654286552865628657286582865928660286612866228663286642866528666286672866828669286702867128672286732867428675286762867728678286792868028681286822868328684286852868628687286882868928690286912869228693286942869528696286972869828699287002870128702287032870428705287062870728708287092871028711287122871328714287152871628717287182871928720287212872228723287242872528726287272872828729287302873128732287332873428735287362873728738287392874028741287422874328744287452874628747287482874928750287512875228753287542875528756287572875828759287602876128762287632876428765287662876728768287692877028771287722877328774287752877628777287782877928780287812878228783287842878528786287872878828789287902879128792287932879428795287962879728798287992880028801288022880328804288052880628807288082880928810288112881228813288142881528816288172881828819288202882128822288232882428825288262882728828288292883028831288322883328834288352883628837288382883928840288412884228843288442884528846288472884828849288502885128852288532885428855288562885728858288592886028861288622886328864288652886628867288682886928870288712887228873288742887528876288772887828879288802888128882288832888428885288862888728888288892889028891288922889328894288952889628897288982889928900289012890228903289042890528906289072890828909289102891128912289132891428915289162891728918289192892028921289222892328924289252892628927289282892928930289312893228933289342893528936289372893828939289402894128942289432894428945289462894728948289492895028951289522895328954289552895628957289582895928960289612896228963289642896528966289672896828969289702897128972289732897428975289762897728978289792898028981289822898328984289852898628987289882898928990289912899228993289942899528996289972899828999290002900129002290032900429005290062900729008290092901029011290122901329014290152901629017290182901929020290212902229023290242902529026290272902829029290302903129032290332903429035290362903729038290392904029041290422904329044290452904629047290482904929050290512905229053290542905529056290572905829059290602906129062290632906429065290662906729068290692907029071290722907329074290752907629077290782907929080290812908229083290842908529086290872908829089290902909129092290932909429095290962909729098290992910029101291022910329104291052910629107291082910929110291112911229113291142911529116291172911829119291202912129122291232912429125291262912729128291292913029131291322913329134291352913629137291382913929140291412914229143291442914529146291472914829149291502915129152291532915429155291562915729158291592916029161291622916329164291652916629167291682916929170291712917229173291742917529176291772917829179291802918129182291832918429185291862918729188291892919029191291922919329194291952919629197291982919929200292012920229203292042920529206292072920829209292102921129212292132921429215292162921729218292192922029221292222922329224292252922629227292282922929230292312923229233292342923529236292372923829239292402924129242292432924429245292462924729248292492925029251292522925329254292552925629257292582925929260292612926229263292642926529266292672926829269292702927129272292732927429275292762927729278292792928029281292822928329284292852928629287292882928929290292912929229293292942929529296292972929829299293002930129302293032930429305293062930729308293092931029311293122931329314293152931629317293182931929320293212932229323293242932529326293272932829329293302933129332293332933429335293362933729338293392934029341293422934329344293452934629347293482934929350293512935229353293542935529356293572935829359293602936129362293632936429365293662936729368293692937029371293722937329374293752937629377293782937929380293812938229383293842938529386293872938829389293902939129392293932939429395293962939729398293992940029401294022940329404294052940629407294082940929410294112941229413294142941529416294172941829419294202942129422294232942429425294262942729428294292943029431294322943329434294352943629437294382943929440294412944229443294442944529446294472944829449294502945129452294532945429455294562945729458294592946029461294622946329464294652946629467294682946929470294712947229473294742947529476294772947829479294802948129482294832948429485294862948729488294892949029491294922949329494294952949629497294982949929500295012950229503295042950529506295072950829509295102951129512295132951429515295162951729518295192952029521295222952329524295252952629527295282952929530295312953229533295342953529536295372953829539295402954129542295432954429545295462954729548295492955029551295522955329554295552955629557295582955929560295612956229563295642956529566295672956829569295702957129572295732957429575295762957729578295792958029581295822958329584295852958629587295882958929590295912959229593295942959529596295972959829599296002960129602296032960429605296062960729608296092961029611296122961329614296152961629617296182961929620296212962229623296242962529626296272962829629296302963129632296332963429635296362963729638296392964029641296422964329644296452964629647296482964929650296512965229653296542965529656296572965829659296602966129662296632966429665296662966729668296692967029671296722967329674296752967629677296782967929680296812968229683296842968529686296872968829689296902969129692296932969429695296962969729698296992970029701297022970329704297052970629707297082970929710297112971229713297142971529716297172971829719297202972129722297232972429725297262972729728297292973029731297322973329734297352973629737297382973929740297412974229743297442974529746297472974829749297502975129752297532975429755297562975729758297592976029761297622976329764297652976629767297682976929770297712977229773297742977529776297772977829779297802978129782297832978429785297862978729788297892979029791297922979329794297952979629797297982979929800298012980229803298042980529806298072980829809298102981129812298132981429815298162981729818298192982029821298222982329824298252982629827298282982929830298312983229833298342983529836298372983829839298402984129842298432984429845298462984729848298492985029851298522985329854298552985629857298582985929860298612986229863298642986529866298672986829869298702987129872298732987429875298762987729878298792988029881298822988329884298852988629887298882988929890298912989229893298942989529896298972989829899299002990129902299032990429905299062990729908299092991029911299122991329914299152991629917299182991929920299212992229923299242992529926299272992829929299302993129932299332993429935299362993729938299392994029941299422994329944299452994629947299482994929950299512995229953299542995529956299572995829959299602996129962299632996429965299662996729968299692997029971299722997329974299752997629977299782997929980299812998229983299842998529986299872998829989299902999129992299932999429995299962999729998299993000030001300023000330004300053000630007300083000930010300113001230013300143001530016300173001830019300203002130022300233002430025300263002730028300293003030031300323003330034300353003630037300383003930040300413004230043300443004530046300473004830049300503005130052300533005430055300563005730058300593006030061300623006330064300653006630067300683006930070300713007230073300743007530076300773007830079300803008130082300833008430085300863008730088300893009030091300923009330094300953009630097300983009930100301013010230103301043010530106301073010830109301103011130112301133011430115301163011730118301193012030121301223012330124301253012630127301283012930130301313013230133301343013530136301373013830139301403014130142301433014430145301463014730148301493015030151301523015330154301553015630157301583015930160301613016230163301643016530166301673016830169301703017130172301733017430175301763017730178301793018030181301823018330184301853018630187301883018930190301913019230193301943019530196301973019830199302003020130202302033020430205302063020730208302093021030211302123021330214302153021630217302183021930220302213022230223302243022530226302273022830229302303023130232302333023430235302363023730238302393024030241302423024330244302453024630247302483024930250302513025230253302543025530256302573025830259302603026130262302633026430265302663026730268302693027030271302723027330274302753027630277302783027930280302813028230283302843028530286302873028830289302903029130292302933029430295302963029730298302993030030301303023030330304303053030630307303083030930310303113031230313303143031530316303173031830319303203032130322303233032430325303263032730328303293033030331303323033330334303353033630337303383033930340303413034230343303443034530346303473034830349303503035130352303533035430355303563035730358303593036030361303623036330364303653036630367303683036930370303713037230373303743037530376303773037830379303803038130382303833038430385303863038730388303893039030391303923039330394303953039630397303983039930400304013040230403304043040530406304073040830409304103041130412304133041430415304163041730418304193042030421304223042330424304253042630427304283042930430304313043230433304343043530436304373043830439304403044130442304433044430445304463044730448304493045030451304523045330454304553045630457304583045930460304613046230463304643046530466304673046830469304703047130472304733047430475304763047730478304793048030481304823048330484304853048630487304883048930490304913049230493304943049530496304973049830499305003050130502305033050430505305063050730508305093051030511305123051330514305153051630517305183051930520305213052230523305243052530526305273052830529305303053130532305333053430535305363053730538305393054030541305423054330544305453054630547305483054930550305513055230553305543055530556305573055830559305603056130562305633056430565305663056730568305693057030571305723057330574305753057630577305783057930580305813058230583305843058530586305873058830589305903059130592305933059430595305963059730598305993060030601306023060330604306053060630607306083060930610306113061230613306143061530616306173061830619306203062130622306233062430625306263062730628306293063030631306323063330634306353063630637306383063930640306413064230643306443064530646306473064830649306503065130652306533065430655306563065730658306593066030661306623066330664306653066630667306683066930670306713067230673306743067530676306773067830679306803068130682306833068430685306863068730688306893069030691306923069330694306953069630697306983069930700307013070230703307043070530706307073070830709307103071130712307133071430715307163071730718307193072030721307223072330724307253072630727307283072930730307313073230733307343073530736307373073830739307403074130742307433074430745307463074730748307493075030751307523075330754307553075630757307583075930760307613076230763307643076530766307673076830769307703077130772307733077430775307763077730778307793078030781307823078330784307853078630787307883078930790307913079230793307943079530796307973079830799308003080130802308033080430805308063080730808308093081030811308123081330814308153081630817308183081930820308213082230823308243082530826308273082830829308303083130832308333083430835308363083730838308393084030841308423084330844308453084630847308483084930850308513085230853308543085530856308573085830859308603086130862308633086430865308663086730868308693087030871308723087330874308753087630877308783087930880308813088230883308843088530886308873088830889308903089130892308933089430895308963089730898308993090030901309023090330904309053090630907309083090930910309113091230913309143091530916309173091830919309203092130922309233092430925309263092730928309293093030931309323093330934309353093630937309383093930940309413094230943309443094530946309473094830949309503095130952309533095430955309563095730958309593096030961309623096330964309653096630967309683096930970309713097230973309743097530976309773097830979309803098130982309833098430985309863098730988309893099030991309923099330994309953099630997309983099931000310013100231003310043100531006310073100831009310103101131012310133101431015310163101731018310193102031021310223102331024310253102631027310283102931030310313103231033310343103531036310373103831039310403104131042310433104431045310463104731048310493105031051310523105331054310553105631057310583105931060310613106231063310643106531066310673106831069310703107131072310733107431075310763107731078310793108031081310823108331084310853108631087310883108931090310913109231093310943109531096310973109831099311003110131102311033110431105311063110731108311093111031111311123111331114311153111631117311183111931120311213112231123311243112531126311273112831129311303113131132311333113431135311363113731138311393114031141311423114331144311453114631147311483114931150311513115231153311543115531156311573115831159311603116131162311633116431165311663116731168311693117031171311723117331174311753117631177311783117931180311813118231183311843118531186311873118831189311903119131192311933119431195311963119731198311993120031201312023120331204312053120631207312083120931210312113121231213312143121531216312173121831219312203122131222312233122431225312263122731228312293123031231312323123331234312353123631237312383123931240312413124231243312443124531246312473124831249312503125131252312533125431255312563125731258312593126031261312623126331264312653126631267312683126931270312713127231273312743127531276312773127831279312803128131282312833128431285312863128731288312893129031291312923129331294312953129631297312983129931300313013130231303313043130531306313073130831309313103131131312313133131431315313163131731318313193132031321313223132331324313253132631327313283132931330313313133231333313343133531336313373133831339313403134131342313433134431345313463134731348313493135031351313523135331354313553135631357313583135931360313613136231363313643136531366313673136831369313703137131372313733137431375313763137731378313793138031381313823138331384313853138631387313883138931390313913139231393313943139531396313973139831399314003140131402314033140431405314063140731408314093141031411314123141331414314153141631417314183141931420314213142231423314243142531426314273142831429314303143131432314333143431435314363143731438314393144031441314423144331444314453144631447314483144931450314513145231453314543145531456314573145831459314603146131462314633146431465314663146731468314693147031471314723147331474314753147631477314783147931480314813148231483314843148531486314873148831489314903149131492314933149431495314963149731498314993150031501315023150331504315053150631507315083150931510315113151231513315143151531516315173151831519315203152131522315233152431525315263152731528315293153031531315323153331534315353153631537315383153931540315413154231543315443154531546315473154831549315503155131552315533155431555315563155731558315593156031561315623156331564315653156631567315683156931570315713157231573315743157531576315773157831579315803158131582315833158431585315863158731588315893159031591315923159331594315953159631597315983159931600316013160231603316043160531606316073160831609316103161131612316133161431615316163161731618316193162031621316223162331624316253162631627316283162931630316313163231633316343163531636316373163831639316403164131642316433164431645316463164731648316493165031651316523165331654316553165631657316583165931660316613166231663316643166531666316673166831669316703167131672316733167431675316763167731678316793168031681316823168331684316853168631687316883168931690316913169231693316943169531696316973169831699317003170131702317033170431705317063170731708317093171031711317123171331714317153171631717317183171931720317213172231723317243172531726317273172831729317303173131732317333173431735317363173731738317393174031741317423174331744317453174631747317483174931750317513175231753317543175531756317573175831759317603176131762317633176431765317663176731768317693177031771317723177331774317753177631777317783177931780317813178231783317843178531786317873178831789317903179131792317933179431795317963179731798317993180031801318023180331804318053180631807318083180931810318113181231813318143181531816318173181831819318203182131822318233182431825318263182731828318293183031831318323183331834318353183631837318383183931840318413184231843318443184531846318473184831849318503185131852318533185431855318563185731858318593186031861318623186331864318653186631867318683186931870318713187231873318743187531876318773187831879318803188131882318833188431885318863188731888318893189031891318923189331894318953189631897318983189931900319013190231903319043190531906319073190831909319103191131912319133191431915319163191731918319193192031921319223192331924319253192631927319283192931930319313193231933319343193531936319373193831939319403194131942319433194431945319463194731948319493195031951319523195331954319553195631957319583195931960319613196231963319643196531966319673196831969319703197131972319733197431975319763197731978319793198031981319823198331984319853198631987319883198931990319913199231993319943199531996319973199831999320003200132002320033200432005320063200732008320093201032011320123201332014320153201632017320183201932020320213202232023320243202532026320273202832029320303203132032320333203432035320363203732038320393204032041320423204332044320453204632047320483204932050320513205232053320543205532056320573205832059320603206132062320633206432065320663206732068320693207032071320723207332074320753207632077320783207932080320813208232083320843208532086320873208832089320903209132092320933209432095320963209732098320993210032101321023210332104321053210632107321083210932110321113211232113321143211532116321173211832119321203212132122321233212432125321263212732128321293213032131321323213332134321353213632137321383213932140321413214232143321443214532146321473214832149321503215132152321533215432155321563215732158321593216032161321623216332164321653216632167321683216932170321713217232173321743217532176321773217832179321803218132182321833218432185321863218732188321893219032191321923219332194321953219632197321983219932200322013220232203322043220532206322073220832209322103221132212322133221432215322163221732218322193222032221322223222332224322253222632227322283222932230322313223232233322343223532236322373223832239322403224132242322433224432245322463224732248322493225032251322523225332254322553225632257322583225932260322613226232263322643226532266322673226832269322703227132272322733227432275322763227732278322793228032281322823228332284322853228632287322883228932290322913229232293322943229532296322973229832299323003230132302323033230432305323063230732308323093231032311323123231332314323153231632317323183231932320323213232232323323243232532326323273232832329323303233132332323333233432335323363233732338323393234032341323423234332344323453234632347323483234932350323513235232353323543235532356323573235832359323603236132362323633236432365323663236732368323693237032371323723237332374323753237632377323783237932380323813238232383323843238532386323873238832389323903239132392323933239432395323963239732398323993240032401324023240332404324053240632407324083240932410324113241232413324143241532416324173241832419324203242132422324233242432425324263242732428324293243032431324323243332434324353243632437324383243932440324413244232443324443244532446324473244832449324503245132452324533245432455324563245732458324593246032461324623246332464324653246632467324683246932470324713247232473324743247532476324773247832479324803248132482324833248432485324863248732488324893249032491324923249332494324953249632497324983249932500325013250232503325043250532506325073250832509325103251132512325133251432515325163251732518325193252032521325223252332524325253252632527325283252932530325313253232533325343253532536325373253832539325403254132542325433254432545325463254732548325493255032551325523255332554325553255632557325583255932560325613256232563325643256532566325673256832569325703257132572325733257432575325763257732578325793258032581325823258332584325853258632587325883258932590325913259232593325943259532596325973259832599326003260132602326033260432605326063260732608326093261032611326123261332614326153261632617326183261932620326213262232623326243262532626326273262832629326303263132632326333263432635326363263732638326393264032641326423264332644326453264632647326483264932650326513265232653326543265532656326573265832659326603266132662326633266432665326663266732668326693267032671326723267332674326753267632677326783267932680326813268232683326843268532686326873268832689326903269132692326933269432695326963269732698326993270032701327023270332704327053270632707327083270932710327113271232713327143271532716327173271832719327203272132722327233272432725327263272732728327293273032731327323273332734327353273632737327383273932740327413274232743327443274532746327473274832749327503275132752327533275432755327563275732758327593276032761327623276332764327653276632767327683276932770327713277232773327743277532776327773277832779327803278132782327833278432785327863278732788327893279032791327923279332794327953279632797327983279932800328013280232803328043280532806328073280832809328103281132812328133281432815328163281732818328193282032821328223282332824328253282632827328283282932830328313283232833328343283532836328373283832839328403284132842328433284432845328463284732848328493285032851328523285332854328553285632857328583285932860328613286232863328643286532866328673286832869328703287132872328733287432875328763287732878328793288032881328823288332884328853288632887328883288932890328913289232893328943289532896328973289832899329003290132902329033290432905329063290732908329093291032911329123291332914329153291632917329183291932920329213292232923329243292532926329273292832929329303293132932329333293432935329363293732938329393294032941329423294332944329453294632947329483294932950329513295232953329543295532956329573295832959329603296132962329633296432965329663296732968329693297032971329723297332974329753297632977329783297932980329813298232983329843298532986329873298832989329903299132992329933299432995329963299732998329993300033001330023300333004330053300633007330083300933010330113301233013330143301533016330173301833019330203302133022330233302433025330263302733028330293303033031330323303333034330353303633037330383303933040330413304233043330443304533046330473304833049330503305133052330533305433055330563305733058330593306033061330623306333064330653306633067330683306933070330713307233073330743307533076330773307833079330803308133082330833308433085330863308733088330893309033091330923309333094330953309633097330983309933100331013310233103331043310533106331073310833109331103311133112331133311433115331163311733118331193312033121331223312333124331253312633127331283312933130331313313233133331343313533136331373313833139331403314133142331433314433145331463314733148331493315033151331523315333154331553315633157331583315933160331613316233163331643316533166331673316833169331703317133172331733317433175331763317733178331793318033181331823318333184331853318633187331883318933190331913319233193331943319533196331973319833199332003320133202332033320433205332063320733208332093321033211332123321333214332153321633217332183321933220332213322233223332243322533226332273322833229332303323133232332333323433235332363323733238332393324033241332423324333244332453324633247332483324933250332513325233253332543325533256332573325833259332603326133262332633326433265332663326733268332693327033271332723327333274332753327633277332783327933280332813328233283332843328533286332873328833289332903329133292332933329433295332963329733298332993330033301333023330333304333053330633307333083330933310333113331233313333143331533316333173331833319333203332133322333233332433325333263332733328333293333033331333323333333334333353333633337333383333933340333413334233343333443334533346333473334833349333503335133352333533335433355333563335733358333593336033361333623336333364333653336633367333683336933370333713337233373333743337533376333773337833379333803338133382333833338433385333863338733388333893339033391333923339333394333953339633397333983339933400334013340233403334043340533406334073340833409334103341133412334133341433415334163341733418334193342033421334223342333424334253342633427334283342933430334313343233433334343343533436334373343833439334403344133442334433344433445334463344733448334493345033451334523345333454334553345633457334583345933460334613346233463334643346533466334673346833469334703347133472334733347433475334763347733478334793348033481334823348333484334853348633487334883348933490334913349233493334943349533496334973349833499335003350133502335033350433505335063350733508335093351033511335123351333514335153351633517335183351933520335213352233523335243352533526335273352833529335303353133532335333353433535335363353733538335393354033541335423354333544335453354633547335483354933550335513355233553335543355533556335573355833559335603356133562335633356433565335663356733568335693357033571335723357333574335753357633577335783357933580335813358233583335843358533586335873358833589335903359133592335933359433595335963359733598335993360033601336023360333604336053360633607336083360933610336113361233613336143361533616336173361833619336203362133622336233362433625336263362733628336293363033631336323363333634336353363633637336383363933640336413364233643336443364533646336473364833649336503365133652336533365433655336563365733658336593366033661336623366333664336653366633667336683366933670336713367233673336743367533676336773367833679336803368133682336833368433685336863368733688336893369033691336923369333694336953369633697336983369933700337013370233703337043370533706337073370833709337103371133712337133371433715337163371733718337193372033721337223372333724337253372633727337283372933730337313373233733337343373533736337373373833739337403374133742337433374433745337463374733748337493375033751337523375333754337553375633757337583375933760337613376233763337643376533766337673376833769337703377133772337733377433775337763377733778337793378033781337823378333784337853378633787337883378933790337913379233793337943379533796337973379833799338003380133802338033380433805338063380733808338093381033811338123381333814338153381633817338183381933820338213382233823338243382533826338273382833829338303383133832338333383433835338363383733838338393384033841338423384333844338453384633847338483384933850338513385233853338543385533856338573385833859338603386133862338633386433865338663386733868338693387033871338723387333874338753387633877338783387933880338813388233883338843388533886338873388833889338903389133892338933389433895338963389733898338993390033901339023390333904339053390633907339083390933910339113391233913339143391533916339173391833919339203392133922339233392433925339263392733928339293393033931339323393333934339353393633937339383393933940339413394233943339443394533946339473394833949339503395133952339533395433955339563395733958339593396033961339623396333964339653396633967339683396933970339713397233973339743397533976339773397833979339803398133982339833398433985339863398733988339893399033991339923399333994339953399633997339983399934000340013400234003340043400534006340073400834009340103401134012340133401434015340163401734018340193402034021340223402334024340253402634027340283402934030340313403234033340343403534036340373403834039340403404134042340433404434045340463404734048340493405034051340523405334054340553405634057340583405934060340613406234063340643406534066340673406834069340703407134072340733407434075340763407734078340793408034081340823408334084340853408634087340883408934090340913409234093340943409534096340973409834099341003410134102341033410434105341063410734108341093411034111341123411334114341153411634117341183411934120341213412234123341243412534126341273412834129341303413134132341333413434135341363413734138341393414034141341423414334144341453414634147341483414934150341513415234153341543415534156341573415834159341603416134162341633416434165341663416734168341693417034171341723417334174341753417634177341783417934180341813418234183341843418534186341873418834189341903419134192341933419434195341963419734198341993420034201342023420334204342053420634207342083420934210342113421234213342143421534216342173421834219342203422134222342233422434225342263422734228342293423034231342323423334234342353423634237342383423934240342413424234243342443424534246342473424834249342503425134252342533425434255342563425734258342593426034261342623426334264342653426634267342683426934270342713427234273342743427534276342773427834279342803428134282342833428434285342863428734288342893429034291342923429334294342953429634297342983429934300343013430234303343043430534306343073430834309343103431134312343133431434315343163431734318343193432034321343223432334324343253432634327343283432934330343313433234333343343433534336343373433834339343403434134342343433434434345343463434734348343493435034351343523435334354343553435634357343583435934360343613436234363343643436534366343673436834369343703437134372343733437434375343763437734378343793438034381343823438334384343853438634387343883438934390343913439234393343943439534396343973439834399344003440134402344033440434405344063440734408344093441034411344123441334414344153441634417344183441934420344213442234423344243442534426344273442834429344303443134432344333443434435344363443734438344393444034441344423444334444344453444634447344483444934450344513445234453344543445534456344573445834459344603446134462344633446434465344663446734468344693447034471344723447334474344753447634477344783447934480344813448234483344843448534486344873448834489344903449134492344933449434495344963449734498344993450034501345023450334504345053450634507345083450934510345113451234513345143451534516345173451834519345203452134522345233452434525345263452734528345293453034531345323453334534345353453634537345383453934540345413454234543345443454534546345473454834549345503455134552345533455434555345563455734558345593456034561345623456334564345653456634567345683456934570345713457234573345743457534576345773457834579345803458134582345833458434585345863458734588345893459034591345923459334594345953459634597345983459934600346013460234603346043460534606346073460834609346103461134612346133461434615346163461734618346193462034621346223462334624346253462634627346283462934630346313463234633346343463534636346373463834639346403464134642346433464434645346463464734648346493465034651346523465334654346553465634657346583465934660346613466234663346643466534666346673466834669346703467134672346733467434675346763467734678346793468034681346823468334684346853468634687346883468934690346913469234693346943469534696346973469834699347003470134702347033470434705347063470734708347093471034711347123471334714347153471634717347183471934720347213472234723347243472534726347273472834729347303473134732347333473434735347363473734738347393474034741347423474334744347453474634747347483474934750347513475234753347543475534756347573475834759347603476134762347633476434765347663476734768347693477034771347723477334774347753477634777347783477934780347813478234783347843478534786347873478834789347903479134792347933479434795347963479734798347993480034801348023480334804348053480634807348083480934810348113481234813348143481534816348173481834819348203482134822348233482434825348263482734828348293483034831348323483334834348353483634837348383483934840348413484234843348443484534846348473484834849348503485134852348533485434855348563485734858348593486034861348623486334864348653486634867348683486934870348713487234873348743487534876348773487834879348803488134882348833488434885348863488734888348893489034891348923489334894348953489634897348983489934900349013490234903349043490534906349073490834909349103491134912349133491434915349163491734918349193492034921349223492334924349253492634927349283492934930349313493234933349343493534936349373493834939349403494134942349433494434945349463494734948349493495034951349523495334954349553495634957349583495934960349613496234963349643496534966349673496834969349703497134972349733497434975349763497734978349793498034981349823498334984349853498634987349883498934990349913499234993349943499534996349973499834999350003500135002350033500435005350063500735008350093501035011350123501335014350153501635017350183501935020350213502235023350243502535026350273502835029350303503135032350333503435035350363503735038350393504035041350423504335044350453504635047350483504935050350513505235053350543505535056350573505835059350603506135062350633506435065350663506735068350693507035071350723507335074350753507635077350783507935080350813508235083350843508535086350873508835089350903509135092350933509435095350963509735098350993510035101351023510335104351053510635107351083510935110351113511235113351143511535116351173511835119351203512135122351233512435125351263512735128351293513035131351323513335134351353513635137351383513935140351413514235143351443514535146351473514835149351503515135152351533515435155351563515735158351593516035161351623516335164351653516635167351683516935170351713517235173351743517535176351773517835179351803518135182351833518435185351863518735188351893519035191351923519335194351953519635197351983519935200352013520235203352043520535206352073520835209352103521135212352133521435215352163521735218352193522035221352223522335224352253522635227352283522935230352313523235233352343523535236352373523835239352403524135242352433524435245352463524735248352493525035251352523525335254352553525635257352583525935260352613526235263352643526535266352673526835269352703527135272352733527435275352763527735278352793528035281352823528335284352853528635287352883528935290352913529235293352943529535296352973529835299353003530135302353033530435305353063530735308353093531035311353123531335314353153531635317353183531935320353213532235323353243532535326353273532835329353303533135332353333533435335353363533735338353393534035341353423534335344353453534635347353483534935350353513535235353353543535535356353573535835359353603536135362353633536435365353663536735368353693537035371353723537335374353753537635377353783537935380353813538235383353843538535386353873538835389353903539135392353933539435395353963539735398353993540035401354023540335404354053540635407354083540935410354113541235413354143541535416354173541835419354203542135422354233542435425354263542735428354293543035431354323543335434354353543635437354383543935440354413544235443354443544535446354473544835449354503545135452354533545435455354563545735458354593546035461354623546335464354653546635467354683546935470354713547235473354743547535476354773547835479354803548135482354833548435485354863548735488354893549035491354923549335494354953549635497354983549935500355013550235503355043550535506355073550835509355103551135512355133551435515355163551735518355193552035521355223552335524355253552635527355283552935530355313553235533355343553535536355373553835539355403554135542355433554435545355463554735548355493555035551355523555335554355553555635557355583555935560355613556235563355643556535566355673556835569355703557135572355733557435575355763557735578355793558035581355823558335584355853558635587355883558935590355913559235593355943559535596355973559835599356003560135602356033560435605356063560735608356093561035611356123561335614356153561635617356183561935620356213562235623356243562535626356273562835629356303563135632356333563435635356363563735638356393564035641356423564335644356453564635647356483564935650356513565235653356543565535656356573565835659356603566135662356633566435665356663566735668356693567035671356723567335674356753567635677356783567935680356813568235683356843568535686356873568835689356903569135692356933569435695356963569735698356993570035701357023570335704357053570635707357083570935710357113571235713357143571535716357173571835719357203572135722357233572435725357263572735728357293573035731357323573335734357353573635737357383573935740357413574235743357443574535746357473574835749357503575135752357533575435755357563575735758357593576035761357623576335764357653576635767357683576935770357713577235773357743577535776357773577835779357803578135782357833578435785357863578735788357893579035791357923579335794357953579635797357983579935800358013580235803358043580535806358073580835809358103581135812358133581435815358163581735818358193582035821358223582335824358253582635827358283582935830358313583235833358343583535836358373583835839358403584135842358433584435845358463584735848358493585035851358523585335854358553585635857358583585935860358613586235863358643586535866358673586835869358703587135872358733587435875358763587735878358793588035881358823588335884358853588635887358883588935890358913589235893358943589535896358973589835899359003590135902359033590435905359063590735908359093591035911359123591335914359153591635917359183591935920359213592235923359243592535926359273592835929359303593135932359333593435935359363593735938359393594035941359423594335944359453594635947359483594935950359513595235953359543595535956359573595835959359603596135962359633596435965359663596735968359693597035971359723597335974359753597635977359783597935980359813598235983359843598535986359873598835989359903599135992359933599435995359963599735998359993600036001360023600336004360053600636007360083600936010360113601236013360143601536016360173601836019360203602136022360233602436025360263602736028360293603036031360323603336034360353603636037360383603936040360413604236043360443604536046360473604836049360503605136052360533605436055360563605736058360593606036061360623606336064360653606636067360683606936070360713607236073360743607536076360773607836079360803608136082360833608436085360863608736088360893609036091360923609336094360953609636097360983609936100361013610236103361043610536106361073610836109361103611136112361133611436115361163611736118361193612036121361223612336124361253612636127361283612936130361313613236133361343613536136361373613836139361403614136142361433614436145361463614736148361493615036151361523615336154361553615636157361583615936160361613616236163361643616536166361673616836169361703617136172361733617436175361763617736178361793618036181361823618336184361853618636187361883618936190361913619236193361943619536196361973619836199362003620136202362033620436205362063620736208362093621036211362123621336214362153621636217362183621936220362213622236223362243622536226362273622836229362303623136232362333623436235362363623736238362393624036241362423624336244362453624636247362483624936250362513625236253362543625536256362573625836259362603626136262362633626436265362663626736268362693627036271362723627336274362753627636277362783627936280362813628236283362843628536286362873628836289362903629136292362933629436295362963629736298362993630036301363023630336304363053630636307363083630936310363113631236313363143631536316363173631836319363203632136322363233632436325363263632736328363293633036331363323633336334363353633636337363383633936340363413634236343363443634536346363473634836349363503635136352363533635436355363563635736358363593636036361363623636336364363653636636367363683636936370363713637236373363743637536376363773637836379363803638136382363833638436385363863638736388363893639036391363923639336394363953639636397363983639936400364013640236403364043640536406364073640836409364103641136412364133641436415364163641736418364193642036421364223642336424364253642636427364283642936430364313643236433364343643536436364373643836439364403644136442364433644436445364463644736448364493645036451364523645336454364553645636457364583645936460364613646236463364643646536466364673646836469364703647136472364733647436475364763647736478364793648036481364823648336484364853648636487364883648936490364913649236493364943649536496364973649836499365003650136502365033650436505365063650736508365093651036511365123651336514365153651636517365183651936520365213652236523365243652536526365273652836529365303653136532365333653436535365363653736538365393654036541365423654336544365453654636547365483654936550365513655236553365543655536556365573655836559365603656136562365633656436565365663656736568365693657036571365723657336574365753657636577365783657936580365813658236583365843658536586365873658836589365903659136592365933659436595365963659736598365993660036601366023660336604366053660636607366083660936610366113661236613366143661536616366173661836619366203662136622366233662436625366263662736628366293663036631366323663336634366353663636637366383663936640366413664236643366443664536646366473664836649366503665136652366533665436655366563665736658366593666036661366623666336664366653666636667366683666936670366713667236673366743667536676366773667836679366803668136682366833668436685366863668736688366893669036691366923669336694366953669636697366983669936700367013670236703367043670536706367073670836709367103671136712367133671436715367163671736718367193672036721367223672336724367253672636727367283672936730367313673236733367343673536736367373673836739367403674136742367433674436745367463674736748367493675036751367523675336754367553675636757367583675936760367613676236763367643676536766367673676836769367703677136772367733677436775367763677736778367793678036781367823678336784367853678636787367883678936790367913679236793367943679536796367973679836799368003680136802368033680436805368063680736808368093681036811368123681336814368153681636817368183681936820368213682236823368243682536826368273682836829368303683136832368333683436835368363683736838368393684036841368423684336844368453684636847368483684936850368513685236853368543685536856368573685836859368603686136862368633686436865368663686736868368693687036871368723687336874368753687636877368783687936880368813688236883368843688536886368873688836889368903689136892368933689436895368963689736898368993690036901369023690336904369053690636907369083690936910369113691236913369143691536916369173691836919369203692136922369233692436925369263692736928369293693036931369323693336934369353693636937369383693936940369413694236943369443694536946369473694836949369503695136952369533695436955369563695736958369593696036961369623696336964369653696636967369683696936970369713697236973369743697536976369773697836979369803698136982369833698436985369863698736988369893699036991369923699336994369953699636997369983699937000370013700237003370043700537006370073700837009370103701137012370133701437015370163701737018370193702037021370223702337024370253702637027370283702937030370313703237033370343703537036370373703837039370403704137042370433704437045370463704737048370493705037051370523705337054370553705637057370583705937060370613706237063370643706537066370673706837069370703707137072370733707437075370763707737078370793708037081370823708337084370853708637087370883708937090370913709237093370943709537096370973709837099371003710137102371033710437105371063710737108371093711037111371123711337114371153711637117371183711937120371213712237123371243712537126371273712837129371303713137132371333713437135371363713737138371393714037141371423714337144371453714637147371483714937150371513715237153371543715537156371573715837159371603716137162371633716437165371663716737168371693717037171371723717337174371753717637177371783717937180371813718237183371843718537186371873718837189371903719137192371933719437195371963719737198371993720037201372023720337204372053720637207372083720937210372113721237213372143721537216372173721837219372203722137222372233722437225372263722737228372293723037231372323723337234372353723637237372383723937240372413724237243372443724537246372473724837249372503725137252372533725437255372563725737258372593726037261372623726337264372653726637267372683726937270372713727237273372743727537276372773727837279372803728137282372833728437285372863728737288372893729037291372923729337294372953729637297372983729937300373013730237303373043730537306373073730837309373103731137312373133731437315373163731737318373193732037321373223732337324373253732637327373283732937330373313733237333373343733537336373373733837339373403734137342373433734437345373463734737348373493735037351373523735337354373553735637357373583735937360373613736237363373643736537366373673736837369373703737137372373733737437375373763737737378373793738037381373823738337384373853738637387373883738937390373913739237393373943739537396373973739837399374003740137402374033740437405374063740737408374093741037411374123741337414374153741637417374183741937420374213742237423374243742537426374273742837429374303743137432374333743437435374363743737438374393744037441374423744337444374453744637447374483744937450374513745237453374543745537456374573745837459374603746137462374633746437465374663746737468374693747037471374723747337474374753747637477374783747937480374813748237483374843748537486374873748837489374903749137492374933749437495374963749737498374993750037501375023750337504375053750637507375083750937510375113751237513375143751537516375173751837519375203752137522375233752437525375263752737528375293753037531375323753337534375353753637537375383753937540375413754237543375443754537546375473754837549375503755137552375533755437555375563755737558375593756037561375623756337564375653756637567375683756937570375713757237573375743757537576375773757837579375803758137582375833758437585375863758737588375893759037591375923759337594375953759637597375983759937600376013760237603376043760537606376073760837609376103761137612376133761437615376163761737618376193762037621376223762337624376253762637627376283762937630376313763237633376343763537636376373763837639376403764137642376433764437645376463764737648376493765037651376523765337654376553765637657376583765937660376613766237663376643766537666376673766837669376703767137672376733767437675376763767737678376793768037681376823768337684376853768637687376883768937690376913769237693376943769537696376973769837699377003770137702377033770437705377063770737708377093771037711377123771337714377153771637717377183771937720377213772237723377243772537726377273772837729377303773137732377333773437735377363773737738377393774037741377423774337744377453774637747377483774937750377513775237753377543775537756377573775837759377603776137762377633776437765377663776737768377693777037771377723777337774377753777637777377783777937780377813778237783377843778537786377873778837789377903779137792377933779437795377963779737798377993780037801378023780337804378053780637807378083780937810378113781237813378143781537816378173781837819378203782137822378233782437825378263782737828378293783037831378323783337834378353783637837378383783937840378413784237843378443784537846378473784837849378503785137852378533785437855378563785737858378593786037861378623786337864378653786637867378683786937870378713787237873378743787537876378773787837879378803788137882378833788437885378863788737888378893789037891378923789337894378953789637897378983789937900379013790237903379043790537906379073790837909379103791137912379133791437915379163791737918379193792037921379223792337924379253792637927379283792937930379313793237933379343793537936379373793837939379403794137942379433794437945379463794737948379493795037951379523795337954379553795637957379583795937960379613796237963379643796537966379673796837969379703797137972379733797437975379763797737978379793798037981379823798337984379853798637987379883798937990379913799237993379943799537996379973799837999380003800138002380033800438005380063800738008380093801038011380123801338014380153801638017380183801938020380213802238023380243802538026380273802838029380303803138032380333803438035380363803738038380393804038041380423804338044380453804638047380483804938050380513805238053380543805538056380573805838059380603806138062380633806438065380663806738068380693807038071380723807338074380753807638077380783807938080380813808238083380843808538086380873808838089380903809138092380933809438095380963809738098380993810038101381023810338104381053810638107381083810938110381113811238113381143811538116381173811838119381203812138122381233812438125381263812738128381293813038131381323813338134381353813638137381383813938140381413814238143381443814538146381473814838149381503815138152381533815438155381563815738158381593816038161381623816338164381653816638167381683816938170381713817238173381743817538176381773817838179381803818138182381833818438185381863818738188381893819038191381923819338194381953819638197381983819938200382013820238203382043820538206382073820838209382103821138212382133821438215382163821738218382193822038221382223822338224382253822638227382283822938230382313823238233382343823538236382373823838239382403824138242382433824438245382463824738248382493825038251382523825338254382553825638257382583825938260382613826238263382643826538266382673826838269382703827138272382733827438275382763827738278382793828038281382823828338284382853828638287382883828938290382913829238293382943829538296382973829838299383003830138302383033830438305383063830738308383093831038311383123831338314383153831638317383183831938320383213832238323383243832538326383273832838329383303833138332383333833438335383363833738338383393834038341383423834338344383453834638347383483834938350383513835238353383543835538356383573835838359383603836138362383633836438365383663836738368383693837038371383723837338374383753837638377383783837938380383813838238383383843838538386383873838838389383903839138392383933839438395383963839738398383993840038401384023840338404384053840638407384083840938410384113841238413384143841538416384173841838419384203842138422384233842438425384263842738428384293843038431384323843338434384353843638437384383843938440384413844238443384443844538446384473844838449384503845138452384533845438455384563845738458384593846038461384623846338464384653846638467384683846938470384713847238473384743847538476384773847838479384803848138482384833848438485384863848738488384893849038491384923849338494384953849638497384983849938500385013850238503385043850538506385073850838509385103851138512385133851438515385163851738518385193852038521385223852338524385253852638527385283852938530385313853238533385343853538536385373853838539385403854138542385433854438545385463854738548385493855038551385523855338554385553855638557385583855938560385613856238563385643856538566385673856838569385703857138572385733857438575385763857738578385793858038581385823858338584385853858638587385883858938590385913859238593385943859538596385973859838599386003860138602386033860438605386063860738608386093861038611386123861338614386153861638617386183861938620386213862238623386243862538626386273862838629386303863138632386333863438635386363863738638386393864038641386423864338644386453864638647386483864938650386513865238653386543865538656386573865838659386603866138662386633866438665386663866738668386693867038671386723867338674386753867638677386783867938680386813868238683386843868538686386873868838689386903869138692386933869438695386963869738698386993870038701387023870338704387053870638707387083870938710387113871238713387143871538716387173871838719387203872138722387233872438725387263872738728387293873038731387323873338734387353873638737387383873938740387413874238743387443874538746387473874838749387503875138752387533875438755387563875738758387593876038761387623876338764387653876638767387683876938770387713877238773387743877538776387773877838779387803878138782387833878438785387863878738788387893879038791387923879338794387953879638797387983879938800388013880238803388043880538806388073880838809388103881138812388133881438815388163881738818388193882038821388223882338824388253882638827388283882938830388313883238833388343883538836388373883838839388403884138842388433884438845388463884738848388493885038851388523885338854388553885638857388583885938860388613886238863388643886538866388673886838869388703887138872388733887438875388763887738878388793888038881388823888338884388853888638887388883888938890388913889238893388943889538896388973889838899389003890138902389033890438905389063890738908389093891038911389123891338914389153891638917389183891938920389213892238923389243892538926389273892838929389303893138932389333893438935389363893738938389393894038941389423894338944389453894638947389483894938950389513895238953389543895538956389573895838959389603896138962389633896438965389663896738968389693897038971389723897338974389753897638977389783897938980389813898238983389843898538986389873898838989389903899138992389933899438995389963899738998389993900039001390023900339004390053900639007390083900939010390113901239013390143901539016390173901839019390203902139022390233902439025390263902739028390293903039031390323903339034390353903639037390383903939040390413904239043390443904539046390473904839049390503905139052390533905439055390563905739058390593906039061390623906339064390653906639067390683906939070390713907239073390743907539076390773907839079390803908139082390833908439085390863908739088390893909039091390923909339094390953909639097390983909939100391013910239103391043910539106391073910839109391103911139112391133911439115391163911739118391193912039121391223912339124391253912639127391283912939130391313913239133391343913539136391373913839139391403914139142391433914439145391463914739148391493915039151391523915339154391553915639157391583915939160391613916239163391643916539166391673916839169391703917139172391733917439175391763917739178391793918039181391823918339184391853918639187391883918939190391913919239193391943919539196391973919839199392003920139202392033920439205392063920739208392093921039211392123921339214392153921639217392183921939220392213922239223392243922539226392273922839229392303923139232392333923439235392363923739238392393924039241392423924339244392453924639247392483924939250392513925239253392543925539256392573925839259392603926139262392633926439265392663926739268392693927039271392723927339274392753927639277392783927939280392813928239283392843928539286392873928839289392903929139292392933929439295392963929739298392993930039301393023930339304393053930639307393083930939310393113931239313393143931539316393173931839319393203932139322393233932439325393263932739328393293933039331393323933339334393353933639337393383933939340393413934239343393443934539346393473934839349393503935139352393533935439355393563935739358393593936039361393623936339364393653936639367393683936939370393713937239373393743937539376393773937839379393803938139382393833938439385393863938739388393893939039391393923939339394393953939639397393983939939400394013940239403394043940539406394073940839409394103941139412394133941439415394163941739418394193942039421394223942339424394253942639427394283942939430394313943239433394343943539436394373943839439394403944139442394433944439445394463944739448394493945039451394523945339454394553945639457394583945939460394613946239463394643946539466394673946839469394703947139472394733947439475394763947739478394793948039481394823948339484394853948639487394883948939490394913949239493394943949539496394973949839499395003950139502395033950439505395063950739508395093951039511395123951339514395153951639517395183951939520395213952239523395243952539526395273952839529395303953139532395333953439535395363953739538395393954039541395423954339544395453954639547395483954939550395513955239553395543955539556395573955839559395603956139562395633956439565395663956739568395693957039571395723957339574395753957639577395783957939580395813958239583395843958539586395873958839589395903959139592395933959439595395963959739598395993960039601396023960339604396053960639607396083960939610396113961239613396143961539616396173961839619396203962139622396233962439625396263962739628396293963039631396323963339634396353963639637396383963939640396413964239643396443964539646396473964839649396503965139652396533965439655396563965739658396593966039661396623966339664396653966639667396683966939670396713967239673396743967539676396773967839679396803968139682396833968439685396863968739688396893969039691396923969339694396953969639697396983969939700397013970239703397043970539706397073970839709397103971139712397133971439715397163971739718397193972039721397223972339724397253972639727397283972939730397313973239733397343973539736397373973839739397403974139742397433974439745397463974739748397493975039751397523975339754397553975639757397583975939760397613976239763397643976539766397673976839769397703977139772397733977439775397763977739778397793978039781397823978339784397853978639787397883978939790397913979239793397943979539796397973979839799398003980139802398033980439805398063980739808398093981039811398123981339814398153981639817398183981939820398213982239823398243982539826398273982839829398303983139832398333983439835398363983739838398393984039841398423984339844398453984639847398483984939850398513985239853398543985539856398573985839859398603986139862398633986439865398663986739868398693987039871398723987339874398753987639877398783987939880398813988239883398843988539886398873988839889398903989139892398933989439895398963989739898398993990039901399023990339904399053990639907399083990939910399113991239913399143991539916399173991839919399203992139922399233992439925399263992739928399293993039931399323993339934399353993639937399383993939940399413994239943399443994539946399473994839949399503995139952399533995439955399563995739958399593996039961399623996339964399653996639967399683996939970399713997239973399743997539976399773997839979399803998139982399833998439985399863998739988399893999039991399923999339994399953999639997399983999940000400014000240003400044000540006400074000840009400104001140012400134001440015400164001740018400194002040021400224002340024400254002640027400284002940030400314003240033400344003540036400374003840039400404004140042400434004440045400464004740048400494005040051400524005340054400554005640057400584005940060400614006240063400644006540066400674006840069400704007140072400734007440075400764007740078400794008040081400824008340084400854008640087400884008940090400914009240093400944009540096400974009840099401004010140102401034010440105401064010740108401094011040111401124011340114401154011640117401184011940120401214012240123401244012540126401274012840129401304013140132401334013440135401364013740138401394014040141401424014340144401454014640147401484014940150401514015240153401544015540156401574015840159401604016140162401634016440165401664016740168401694017040171401724017340174401754017640177401784017940180401814018240183401844018540186401874018840189401904019140192401934019440195401964019740198401994020040201402024020340204402054020640207402084020940210402114021240213402144021540216402174021840219402204022140222402234022440225402264022740228402294023040231402324023340234402354023640237402384023940240402414024240243402444024540246402474024840249402504025140252402534025440255402564025740258402594026040261402624026340264402654026640267402684026940270402714027240273402744027540276402774027840279402804028140282402834028440285402864028740288402894029040291402924029340294402954029640297402984029940300403014030240303403044030540306403074030840309403104031140312403134031440315403164031740318403194032040321403224032340324403254032640327403284032940330403314033240333403344033540336403374033840339403404034140342403434034440345403464034740348403494035040351403524035340354403554035640357403584035940360403614036240363403644036540366403674036840369403704037140372403734037440375403764037740378403794038040381403824038340384403854038640387403884038940390403914039240393403944039540396403974039840399404004040140402404034040440405404064040740408404094041040411404124041340414404154041640417404184041940420404214042240423404244042540426404274042840429404304043140432404334043440435404364043740438404394044040441404424044340444404454044640447404484044940450404514045240453404544045540456404574045840459404604046140462404634046440465404664046740468404694047040471404724047340474404754047640477404784047940480404814048240483404844048540486404874048840489404904049140492404934049440495404964049740498404994050040501405024050340504405054050640507405084050940510405114051240513405144051540516405174051840519405204052140522405234052440525405264052740528405294053040531405324053340534405354053640537405384053940540405414054240543405444054540546405474054840549405504055140552405534055440555405564055740558405594056040561405624056340564405654056640567405684056940570405714057240573405744057540576405774057840579405804058140582405834058440585405864058740588405894059040591405924059340594405954059640597405984059940600406014060240603406044060540606406074060840609406104061140612406134061440615406164061740618406194062040621406224062340624406254062640627406284062940630406314063240633406344063540636406374063840639406404064140642406434064440645406464064740648406494065040651406524065340654406554065640657406584065940660406614066240663406644066540666406674066840669406704067140672406734067440675406764067740678406794068040681406824068340684406854068640687406884068940690406914069240693406944069540696406974069840699407004070140702407034070440705407064070740708407094071040711407124071340714407154071640717407184071940720407214072240723407244072540726407274072840729407304073140732407334073440735407364073740738407394074040741407424074340744407454074640747407484074940750407514075240753407544075540756407574075840759407604076140762407634076440765407664076740768407694077040771407724077340774407754077640777407784077940780407814078240783407844078540786407874078840789407904079140792407934079440795407964079740798407994080040801408024080340804408054080640807408084080940810408114081240813408144081540816408174081840819408204082140822408234082440825408264082740828408294083040831408324083340834408354083640837408384083940840408414084240843408444084540846408474084840849408504085140852408534085440855408564085740858408594086040861408624086340864408654086640867408684086940870408714087240873408744087540876408774087840879408804088140882408834088440885408864088740888408894089040891408924089340894408954089640897408984089940900409014090240903409044090540906409074090840909409104091140912409134091440915409164091740918409194092040921409224092340924409254092640927409284092940930409314093240933409344093540936409374093840939409404094140942409434094440945409464094740948409494095040951409524095340954409554095640957409584095940960409614096240963409644096540966409674096840969409704097140972409734097440975409764097740978409794098040981409824098340984409854098640987409884098940990409914099240993409944099540996409974099840999410004100141002410034100441005410064100741008410094101041011410124101341014410154101641017410184101941020410214102241023410244102541026410274102841029410304103141032410334103441035410364103741038410394104041041410424104341044410454104641047410484104941050410514105241053410544105541056410574105841059410604106141062410634106441065410664106741068410694107041071410724107341074410754107641077410784107941080410814108241083410844108541086410874108841089410904109141092410934109441095410964109741098410994110041101411024110341104411054110641107411084110941110411114111241113411144111541116411174111841119411204112141122411234112441125411264112741128411294113041131411324113341134411354113641137411384113941140411414114241143411444114541146411474114841149411504115141152411534115441155411564115741158411594116041161411624116341164411654116641167411684116941170411714117241173411744117541176411774117841179411804118141182411834118441185411864118741188411894119041191411924119341194411954119641197411984119941200412014120241203412044120541206412074120841209412104121141212412134121441215412164121741218412194122041221412224122341224412254122641227412284122941230412314123241233412344123541236412374123841239412404124141242412434124441245412464124741248412494125041251412524125341254412554125641257412584125941260412614126241263412644126541266412674126841269412704127141272412734127441275412764127741278412794128041281412824128341284412854128641287412884128941290412914129241293412944129541296412974129841299413004130141302413034130441305413064130741308413094131041311413124131341314413154131641317413184131941320413214132241323413244132541326413274132841329413304133141332413334133441335413364133741338413394134041341413424134341344413454134641347413484134941350413514135241353413544135541356413574135841359413604136141362413634136441365413664136741368413694137041371413724137341374413754137641377413784137941380413814138241383413844138541386413874138841389413904139141392413934139441395413964139741398413994140041401414024140341404414054140641407414084140941410414114141241413414144141541416414174141841419414204142141422414234142441425414264142741428414294143041431414324143341434414354143641437414384143941440414414144241443414444144541446414474144841449414504145141452414534145441455414564145741458414594146041461414624146341464414654146641467414684146941470414714147241473414744147541476414774147841479414804148141482414834148441485414864148741488414894149041491414924149341494414954149641497414984149941500415014150241503415044150541506415074150841509415104151141512415134151441515415164151741518415194152041521415224152341524415254152641527415284152941530415314153241533415344153541536415374153841539415404154141542415434154441545415464154741548415494155041551415524155341554415554155641557415584155941560415614156241563415644156541566415674156841569415704157141572415734157441575415764157741578415794158041581415824158341584415854158641587415884158941590415914159241593415944159541596415974159841599416004160141602416034160441605416064160741608416094161041611416124161341614416154161641617416184161941620416214162241623416244162541626416274162841629416304163141632416334163441635416364163741638416394164041641416424164341644416454164641647416484164941650416514165241653416544165541656416574165841659416604166141662416634166441665416664166741668416694167041671416724167341674416754167641677416784167941680416814168241683416844168541686416874168841689416904169141692416934169441695416964169741698416994170041701417024170341704417054170641707417084170941710417114171241713417144171541716417174171841719417204172141722417234172441725417264172741728417294173041731417324173341734417354173641737417384173941740417414174241743417444174541746417474174841749417504175141752417534175441755417564175741758417594176041761417624176341764417654176641767417684176941770417714177241773417744177541776417774177841779417804178141782417834178441785417864178741788417894179041791417924179341794417954179641797417984179941800418014180241803418044180541806418074180841809418104181141812418134181441815418164181741818418194182041821418224182341824418254182641827418284182941830418314183241833418344183541836418374183841839418404184141842418434184441845418464184741848418494185041851418524185341854418554185641857418584185941860418614186241863418644186541866418674186841869418704187141872418734187441875418764187741878418794188041881418824188341884418854188641887418884188941890418914189241893418944189541896418974189841899419004190141902419034190441905419064190741908419094191041911419124191341914419154191641917419184191941920419214192241923419244192541926419274192841929419304193141932419334193441935419364193741938419394194041941419424194341944419454194641947419484194941950419514195241953419544195541956419574195841959419604196141962419634196441965419664196741968419694197041971419724197341974419754197641977419784197941980419814198241983419844198541986419874198841989419904199141992419934199441995419964199741998419994200042001420024200342004420054200642007420084200942010420114201242013420144201542016420174201842019420204202142022420234202442025420264202742028420294203042031420324203342034420354203642037420384203942040420414204242043420444204542046420474204842049420504205142052420534205442055420564205742058420594206042061420624206342064420654206642067420684206942070420714207242073420744207542076420774207842079420804208142082420834208442085420864208742088420894209042091420924209342094420954209642097420984209942100421014210242103421044210542106421074210842109421104211142112421134211442115421164211742118421194212042121421224212342124421254212642127421284212942130421314213242133421344213542136421374213842139421404214142142421434214442145421464214742148421494215042151421524215342154421554215642157421584215942160421614216242163421644216542166421674216842169421704217142172421734217442175421764217742178421794218042181421824218342184421854218642187421884218942190421914219242193421944219542196421974219842199422004220142202422034220442205422064220742208422094221042211422124221342214422154221642217422184221942220422214222242223422244222542226422274222842229422304223142232422334223442235422364223742238422394224042241422424224342244422454224642247422484224942250422514225242253422544225542256422574225842259422604226142262422634226442265422664226742268422694227042271422724227342274422754227642277422784227942280422814228242283422844228542286422874228842289422904229142292422934229442295422964229742298422994230042301423024230342304423054230642307423084230942310423114231242313423144231542316423174231842319423204232142322423234232442325423264232742328423294233042331423324233342334423354233642337423384233942340423414234242343423444234542346423474234842349423504235142352423534235442355423564235742358423594236042361423624236342364423654236642367423684236942370423714237242373423744237542376423774237842379423804238142382423834238442385423864238742388423894239042391423924239342394423954239642397423984239942400424014240242403424044240542406424074240842409424104241142412424134241442415424164241742418424194242042421424224242342424424254242642427424284242942430424314243242433424344243542436424374243842439424404244142442424434244442445424464244742448424494245042451424524245342454424554245642457424584245942460424614246242463424644246542466424674246842469424704247142472424734247442475424764247742478424794248042481424824248342484424854248642487424884248942490424914249242493424944249542496424974249842499425004250142502425034250442505425064250742508425094251042511425124251342514425154251642517425184251942520425214252242523425244252542526425274252842529425304253142532425334253442535425364253742538425394254042541425424254342544425454254642547425484254942550425514255242553425544255542556425574255842559425604256142562425634256442565425664256742568425694257042571425724257342574425754257642577425784257942580425814258242583425844258542586425874258842589425904259142592425934259442595425964259742598425994260042601426024260342604426054260642607426084260942610426114261242613426144261542616426174261842619426204262142622426234262442625426264262742628426294263042631426324263342634426354263642637426384263942640426414264242643426444264542646426474264842649426504265142652426534265442655426564265742658426594266042661426624266342664426654266642667426684266942670426714267242673426744267542676426774267842679426804268142682426834268442685426864268742688426894269042691426924269342694426954269642697426984269942700427014270242703427044270542706427074270842709427104271142712427134271442715427164271742718427194272042721427224272342724427254272642727427284272942730427314273242733427344273542736427374273842739427404274142742427434274442745427464274742748427494275042751427524275342754427554275642757427584275942760427614276242763427644276542766427674276842769427704277142772427734277442775427764277742778427794278042781427824278342784427854278642787427884278942790427914279242793427944279542796427974279842799428004280142802428034280442805428064280742808428094281042811428124281342814428154281642817428184281942820428214282242823428244282542826428274282842829428304283142832428334283442835428364283742838428394284042841428424284342844428454284642847428484284942850428514285242853428544285542856428574285842859428604286142862428634286442865428664286742868428694287042871428724287342874428754287642877428784287942880428814288242883428844288542886428874288842889428904289142892428934289442895428964289742898428994290042901429024290342904429054290642907429084290942910429114291242913429144291542916429174291842919429204292142922429234292442925429264292742928429294293042931429324293342934429354293642937429384293942940429414294242943429444294542946429474294842949429504295142952429534295442955429564295742958429594296042961429624296342964429654296642967429684296942970429714297242973429744297542976429774297842979429804298142982429834298442985429864298742988429894299042991429924299342994429954299642997429984299943000430014300243003430044300543006430074300843009430104301143012430134301443015430164301743018430194302043021430224302343024430254302643027430284302943030430314303243033430344303543036430374303843039430404304143042430434304443045430464304743048430494305043051430524305343054430554305643057430584305943060430614306243063430644306543066430674306843069430704307143072430734307443075430764307743078430794308043081430824308343084430854308643087430884308943090430914309243093430944309543096430974309843099431004310143102431034310443105431064310743108431094311043111431124311343114431154311643117431184311943120431214312243123431244312543126431274312843129431304313143132431334313443135431364313743138431394314043141431424314343144431454314643147431484314943150431514315243153431544315543156431574315843159431604316143162431634316443165431664316743168431694317043171431724317343174431754317643177431784317943180431814318243183431844318543186431874318843189431904319143192431934319443195431964319743198431994320043201432024320343204432054320643207432084320943210432114321243213432144321543216432174321843219432204322143222432234322443225432264322743228432294323043231432324323343234432354323643237432384323943240432414324243243432444324543246432474324843249432504325143252432534325443255432564325743258432594326043261432624326343264432654326643267432684326943270432714327243273432744327543276432774327843279432804328143282432834328443285432864328743288432894329043291432924329343294432954329643297432984329943300433014330243303433044330543306433074330843309433104331143312433134331443315433164331743318433194332043321433224332343324433254332643327433284332943330433314333243333433344333543336433374333843339433404334143342433434334443345433464334743348433494335043351433524335343354433554335643357433584335943360433614336243363433644336543366433674336843369433704337143372433734337443375433764337743378433794338043381433824338343384433854338643387433884338943390433914339243393433944339543396433974339843399434004340143402434034340443405434064340743408434094341043411434124341343414434154341643417434184341943420434214342243423434244342543426434274342843429434304343143432434334343443435434364343743438434394344043441434424344343444434454344643447434484344943450434514345243453434544345543456434574345843459434604346143462434634346443465434664346743468434694347043471434724347343474434754347643477434784347943480434814348243483434844348543486434874348843489434904349143492434934349443495434964349743498434994350043501435024350343504435054350643507435084350943510435114351243513435144351543516435174351843519435204352143522435234352443525435264352743528435294353043531435324353343534435354353643537435384353943540435414354243543435444354543546435474354843549435504355143552435534355443555435564355743558435594356043561435624356343564435654356643567435684356943570435714357243573435744357543576435774357843579435804358143582435834358443585435864358743588435894359043591435924359343594435954359643597435984359943600436014360243603436044360543606436074360843609436104361143612436134361443615436164361743618436194362043621436224362343624436254362643627436284362943630436314363243633436344363543636436374363843639436404364143642436434364443645436464364743648436494365043651436524365343654436554365643657436584365943660436614366243663436644366543666436674366843669436704367143672436734367443675436764367743678436794368043681436824368343684436854368643687436884368943690436914369243693436944369543696436974369843699437004370143702437034370443705437064370743708437094371043711437124371343714437154371643717437184371943720437214372243723437244372543726437274372843729437304373143732437334373443735437364373743738437394374043741437424374343744437454374643747437484374943750437514375243753437544375543756437574375843759437604376143762437634376443765437664376743768437694377043771437724377343774437754377643777437784377943780437814378243783437844378543786437874378843789437904379143792437934379443795437964379743798437994380043801438024380343804438054380643807438084380943810438114381243813438144381543816438174381843819438204382143822438234382443825438264382743828438294383043831438324383343834438354383643837438384383943840438414384243843438444384543846438474384843849438504385143852438534385443855438564385743858438594386043861438624386343864438654386643867438684386943870438714387243873438744387543876438774387843879438804388143882438834388443885438864388743888438894389043891438924389343894438954389643897438984389943900439014390243903439044390543906439074390843909439104391143912439134391443915439164391743918439194392043921439224392343924439254392643927439284392943930439314393243933439344393543936439374393843939439404394143942439434394443945439464394743948439494395043951439524395343954439554395643957439584395943960439614396243963439644396543966439674396843969439704397143972439734397443975439764397743978439794398043981439824398343984439854398643987439884398943990439914399243993439944399543996439974399843999440004400144002440034400444005440064400744008440094401044011440124401344014440154401644017440184401944020440214402244023440244402544026440274402844029440304403144032440334403444035440364403744038440394404044041440424404344044440454404644047440484404944050440514405244053440544405544056440574405844059440604406144062440634406444065440664406744068440694407044071440724407344074440754407644077440784407944080440814408244083440844408544086440874408844089440904409144092440934409444095440964409744098440994410044101441024410344104441054410644107441084410944110441114411244113441144411544116441174411844119441204412144122441234412444125441264412744128441294413044131441324413344134441354413644137441384413944140441414414244143441444414544146441474414844149441504415144152441534415444155441564415744158441594416044161441624416344164441654416644167441684416944170441714417244173441744417544176441774417844179441804418144182441834418444185441864418744188441894419044191441924419344194441954419644197441984419944200442014420244203442044420544206442074420844209442104421144212442134421444215442164421744218442194422044221442224422344224442254422644227442284422944230442314423244233442344423544236442374423844239442404424144242442434424444245442464424744248442494425044251442524425344254442554425644257442584425944260442614426244263442644426544266442674426844269442704427144272442734427444275442764427744278442794428044281442824428344284442854428644287442884428944290442914429244293442944429544296442974429844299443004430144302443034430444305443064430744308443094431044311443124431344314443154431644317443184431944320443214432244323443244432544326443274432844329443304433144332443334433444335443364433744338443394434044341443424434344344443454434644347443484434944350443514435244353443544435544356443574435844359443604436144362443634436444365443664436744368443694437044371443724437344374443754437644377443784437944380443814438244383443844438544386443874438844389443904439144392443934439444395443964439744398443994440044401444024440344404444054440644407444084440944410444114441244413444144441544416444174441844419444204442144422444234442444425444264442744428444294443044431444324443344434444354443644437444384443944440444414444244443444444444544446444474444844449444504445144452444534445444455444564445744458444594446044461444624446344464444654446644467444684446944470444714447244473444744447544476444774447844479444804448144482444834448444485444864448744488444894449044491444924449344494444954449644497444984449944500445014450244503445044450544506445074450844509445104451144512445134451444515445164451744518445194452044521445224452344524445254452644527445284452944530445314453244533445344453544536445374453844539445404454144542445434454444545445464454744548445494455044551445524455344554445554455644557445584455944560445614456244563445644456544566445674456844569445704457144572445734457444575445764457744578445794458044581445824458344584445854458644587445884458944590445914459244593445944459544596445974459844599446004460144602446034460444605446064460744608446094461044611446124461344614446154461644617446184461944620446214462244623446244462544626446274462844629446304463144632446334463444635446364463744638446394464044641446424464344644446454464644647446484464944650446514465244653446544465544656446574465844659446604466144662446634466444665446664466744668446694467044671446724467344674446754467644677446784467944680446814468244683446844468544686446874468844689446904469144692446934469444695446964469744698446994470044701447024470344704447054470644707447084470944710447114471244713447144471544716447174471844719447204472144722447234472444725447264472744728447294473044731447324473344734447354473644737447384473944740447414474244743447444474544746447474474844749447504475144752447534475444755447564475744758447594476044761447624476344764447654476644767447684476944770447714477244773447744477544776447774477844779447804478144782447834478444785447864478744788447894479044791447924479344794447954479644797447984479944800448014480244803448044480544806448074480844809448104481144812448134481444815448164481744818448194482044821448224482344824448254482644827448284482944830448314483244833448344483544836448374483844839448404484144842448434484444845448464484744848448494485044851448524485344854448554485644857448584485944860448614486244863448644486544866448674486844869448704487144872448734487444875448764487744878448794488044881448824488344884448854488644887448884488944890448914489244893448944489544896448974489844899449004490144902449034490444905449064490744908449094491044911449124491344914449154491644917449184491944920449214492244923449244492544926449274492844929449304493144932449334493444935449364493744938449394494044941449424494344944449454494644947449484494944950449514495244953449544495544956449574495844959449604496144962449634496444965449664496744968449694497044971449724497344974449754497644977449784497944980449814498244983449844498544986449874498844989449904499144992449934499444995449964499744998449994500045001450024500345004450054500645007450084500945010450114501245013450144501545016450174501845019450204502145022450234502445025450264502745028450294503045031450324503345034450354503645037450384503945040450414504245043450444504545046450474504845049450504505145052450534505445055450564505745058450594506045061450624506345064450654506645067450684506945070450714507245073450744507545076450774507845079450804508145082450834508445085450864508745088450894509045091450924509345094450954509645097450984509945100451014510245103451044510545106451074510845109451104511145112451134511445115451164511745118451194512045121451224512345124451254512645127451284512945130451314513245133451344513545136451374513845139451404514145142451434514445145451464514745148451494515045151451524515345154451554515645157451584515945160451614516245163451644516545166451674516845169451704517145172451734517445175451764517745178451794518045181451824518345184451854518645187451884518945190451914519245193451944519545196451974519845199452004520145202452034520445205452064520745208452094521045211452124521345214452154521645217452184521945220452214522245223452244522545226452274522845229452304523145232452334523445235452364523745238452394524045241452424524345244452454524645247452484524945250452514525245253452544525545256452574525845259452604526145262452634526445265452664526745268452694527045271452724527345274452754527645277452784527945280452814528245283452844528545286452874528845289452904529145292452934529445295452964529745298452994530045301453024530345304453054530645307453084530945310453114531245313453144531545316453174531845319453204532145322453234532445325453264532745328453294533045331453324533345334453354533645337453384533945340453414534245343453444534545346453474534845349453504535145352453534535445355453564535745358453594536045361453624536345364453654536645367453684536945370453714537245373453744537545376453774537845379453804538145382453834538445385453864538745388453894539045391453924539345394453954539645397453984539945400454014540245403454044540545406454074540845409454104541145412454134541445415454164541745418454194542045421454224542345424454254542645427454284542945430454314543245433454344543545436454374543845439454404544145442454434544445445454464544745448454494545045451454524545345454454554545645457454584545945460454614546245463454644546545466454674546845469454704547145472454734547445475454764547745478454794548045481454824548345484454854548645487454884548945490454914549245493454944549545496454974549845499455004550145502455034550445505455064550745508455094551045511455124551345514455154551645517455184551945520455214552245523455244552545526455274552845529455304553145532455334553445535455364553745538455394554045541455424554345544455454554645547455484554945550455514555245553455544555545556455574555845559455604556145562455634556445565455664556745568455694557045571455724557345574455754557645577455784557945580455814558245583455844558545586455874558845589455904559145592455934559445595455964559745598455994560045601456024560345604456054560645607456084560945610456114561245613456144561545616456174561845619456204562145622456234562445625456264562745628456294563045631456324563345634456354563645637456384563945640456414564245643456444564545646456474564845649456504565145652456534565445655456564565745658456594566045661456624566345664456654566645667456684566945670456714567245673456744567545676456774567845679456804568145682456834568445685456864568745688456894569045691456924569345694456954569645697456984569945700457014570245703457044570545706457074570845709457104571145712457134571445715457164571745718457194572045721457224572345724457254572645727457284572945730457314573245733457344573545736457374573845739457404574145742457434574445745457464574745748457494575045751457524575345754457554575645757457584575945760457614576245763457644576545766457674576845769457704577145772457734577445775457764577745778457794578045781457824578345784457854578645787457884578945790457914579245793457944579545796457974579845799458004580145802458034580445805458064580745808458094581045811458124581345814458154581645817458184581945820458214582245823458244582545826458274582845829458304583145832458334583445835458364583745838458394584045841458424584345844458454584645847458484584945850458514585245853458544585545856458574585845859458604586145862458634586445865458664586745868458694587045871458724587345874458754587645877458784587945880458814588245883458844588545886458874588845889458904589145892458934589445895458964589745898458994590045901459024590345904459054590645907459084590945910459114591245913459144591545916459174591845919459204592145922459234592445925459264592745928459294593045931459324593345934459354593645937459384593945940459414594245943459444594545946459474594845949459504595145952459534595445955459564595745958459594596045961459624596345964459654596645967459684596945970459714597245973459744597545976459774597845979459804598145982459834598445985459864598745988459894599045991459924599345994459954599645997459984599946000460014600246003460044600546006460074600846009460104601146012460134601446015460164601746018460194602046021460224602346024460254602646027460284602946030460314603246033460344603546036460374603846039460404604146042460434604446045460464604746048460494605046051460524605346054460554605646057460584605946060460614606246063460644606546066460674606846069460704607146072460734607446075460764607746078460794608046081460824608346084460854608646087460884608946090460914609246093460944609546096460974609846099461004610146102461034610446105461064610746108461094611046111461124611346114461154611646117461184611946120461214612246123461244612546126461274612846129461304613146132461334613446135461364613746138461394614046141461424614346144461454614646147461484614946150461514615246153461544615546156461574615846159461604616146162461634616446165461664616746168461694617046171461724617346174461754617646177461784617946180461814618246183461844618546186461874618846189461904619146192461934619446195461964619746198461994620046201462024620346204462054620646207462084620946210462114621246213462144621546216462174621846219462204622146222462234622446225462264622746228462294623046231462324623346234462354623646237462384623946240462414624246243462444624546246462474624846249462504625146252462534625446255462564625746258462594626046261462624626346264462654626646267462684626946270462714627246273462744627546276462774627846279462804628146282462834628446285462864628746288462894629046291462924629346294462954629646297462984629946300463014630246303463044630546306463074630846309463104631146312463134631446315463164631746318463194632046321463224632346324463254632646327463284632946330463314633246333463344633546336463374633846339463404634146342463434634446345463464634746348463494635046351463524635346354463554635646357463584635946360463614636246363463644636546366463674636846369463704637146372463734637446375463764637746378463794638046381463824638346384463854638646387463884638946390463914639246393463944639546396463974639846399464004640146402464034640446405464064640746408464094641046411464124641346414464154641646417464184641946420464214642246423464244642546426464274642846429464304643146432464334643446435464364643746438464394644046441464424644346444464454644646447464484644946450464514645246453464544645546456464574645846459464604646146462464634646446465464664646746468464694647046471464724647346474464754647646477464784647946480464814648246483464844648546486464874648846489464904649146492464934649446495464964649746498464994650046501465024650346504465054650646507465084650946510465114651246513465144651546516465174651846519465204652146522465234652446525465264652746528465294653046531465324653346534465354653646537465384653946540465414654246543465444654546546465474654846549465504655146552465534655446555465564655746558465594656046561465624656346564465654656646567465684656946570465714657246573465744657546576465774657846579465804658146582465834658446585465864658746588465894659046591465924659346594465954659646597465984659946600466014660246603466044660546606466074660846609466104661146612466134661446615466164661746618466194662046621466224662346624466254662646627466284662946630466314663246633466344663546636466374663846639466404664146642466434664446645466464664746648466494665046651466524665346654466554665646657466584665946660466614666246663466644666546666466674666846669466704667146672466734667446675466764667746678466794668046681466824668346684466854668646687466884668946690466914669246693466944669546696466974669846699467004670146702467034670446705467064670746708467094671046711467124671346714467154671646717467184671946720467214672246723467244672546726467274672846729467304673146732467334673446735467364673746738467394674046741467424674346744467454674646747467484674946750467514675246753467544675546756467574675846759467604676146762467634676446765467664676746768467694677046771467724677346774467754677646777467784677946780467814678246783467844678546786467874678846789467904679146792467934679446795467964679746798467994680046801468024680346804468054680646807468084680946810468114681246813468144681546816468174681846819468204682146822468234682446825468264682746828468294683046831468324683346834468354683646837468384683946840468414684246843468444684546846468474684846849468504685146852468534685446855468564685746858468594686046861468624686346864468654686646867468684686946870468714687246873468744687546876468774687846879468804688146882468834688446885468864688746888468894689046891468924689346894468954689646897468984689946900469014690246903469044690546906469074690846909469104691146912469134691446915469164691746918469194692046921469224692346924469254692646927469284692946930469314693246933469344693546936469374693846939469404694146942469434694446945469464694746948469494695046951469524695346954469554695646957469584695946960469614696246963469644696546966469674696846969469704697146972469734697446975469764697746978469794698046981469824698346984469854698646987469884698946990469914699246993469944699546996469974699846999470004700147002470034700447005470064700747008470094701047011470124701347014470154701647017470184701947020470214702247023470244702547026470274702847029470304703147032470334703447035470364703747038470394704047041470424704347044470454704647047470484704947050470514705247053470544705547056470574705847059470604706147062470634706447065470664706747068470694707047071470724707347074470754707647077470784707947080470814708247083470844708547086470874708847089470904709147092470934709447095470964709747098470994710047101471024710347104471054710647107471084710947110471114711247113471144711547116471174711847119471204712147122471234712447125471264712747128471294713047131471324713347134471354713647137471384713947140471414714247143471444714547146471474714847149471504715147152471534715447155471564715747158471594716047161471624716347164471654716647167471684716947170471714717247173471744717547176471774717847179471804718147182471834718447185471864718747188471894719047191471924719347194471954719647197471984719947200472014720247203472044720547206472074720847209472104721147212472134721447215472164721747218472194722047221472224722347224472254722647227472284722947230472314723247233472344723547236472374723847239472404724147242472434724447245472464724747248472494725047251472524725347254472554725647257472584725947260472614726247263472644726547266472674726847269472704727147272472734727447275472764727747278472794728047281472824728347284472854728647287472884728947290472914729247293472944729547296472974729847299473004730147302473034730447305473064730747308473094731047311473124731347314473154731647317473184731947320473214732247323473244732547326473274732847329473304733147332473334733447335473364733747338473394734047341473424734347344473454734647347473484734947350473514735247353473544735547356473574735847359473604736147362473634736447365473664736747368473694737047371473724737347374473754737647377473784737947380473814738247383473844738547386473874738847389473904739147392473934739447395473964739747398473994740047401474024740347404474054740647407474084740947410474114741247413474144741547416474174741847419474204742147422474234742447425474264742747428474294743047431474324743347434474354743647437474384743947440474414744247443474444744547446474474744847449474504745147452474534745447455474564745747458474594746047461474624746347464474654746647467474684746947470474714747247473474744747547476474774747847479474804748147482474834748447485474864748747488474894749047491474924749347494474954749647497474984749947500475014750247503475044750547506475074750847509475104751147512475134751447515475164751747518475194752047521475224752347524475254752647527475284752947530475314753247533475344753547536475374753847539475404754147542475434754447545475464754747548475494755047551475524755347554475554755647557475584755947560475614756247563475644756547566475674756847569475704757147572475734757447575475764757747578475794758047581475824758347584475854758647587475884758947590475914759247593475944759547596475974759847599476004760147602476034760447605476064760747608476094761047611476124761347614476154761647617476184761947620476214762247623476244762547626476274762847629476304763147632476334763447635476364763747638476394764047641476424764347644476454764647647476484764947650476514765247653476544765547656476574765847659476604766147662476634766447665476664766747668476694767047671476724767347674476754767647677476784767947680476814768247683476844768547686476874768847689476904769147692476934769447695476964769747698476994770047701477024770347704477054770647707477084770947710477114771247713477144771547716477174771847719477204772147722477234772447725477264772747728477294773047731477324773347734477354773647737477384773947740477414774247743477444774547746477474774847749477504775147752477534775447755477564775747758477594776047761477624776347764477654776647767477684776947770477714777247773477744777547776477774777847779477804778147782477834778447785477864778747788477894779047791477924779347794477954779647797477984779947800478014780247803478044780547806478074780847809478104781147812478134781447815478164781747818478194782047821478224782347824478254782647827478284782947830478314783247833478344783547836478374783847839478404784147842478434784447845478464784747848478494785047851478524785347854478554785647857478584785947860478614786247863478644786547866478674786847869478704787147872478734787447875478764787747878478794788047881478824788347884478854788647887478884788947890478914789247893478944789547896478974789847899479004790147902479034790447905479064790747908479094791047911479124791347914479154791647917479184791947920479214792247923479244792547926479274792847929479304793147932479334793447935479364793747938479394794047941479424794347944479454794647947479484794947950479514795247953479544795547956479574795847959479604796147962479634796447965479664796747968479694797047971479724797347974479754797647977479784797947980479814798247983479844798547986479874798847989479904799147992479934799447995479964799747998479994800048001480024800348004480054800648007480084800948010480114801248013480144801548016480174801848019480204802148022480234802448025480264802748028480294803048031480324803348034480354803648037480384803948040480414804248043480444804548046480474804848049480504805148052480534805448055480564805748058480594806048061480624806348064480654806648067480684806948070480714807248073480744807548076480774807848079480804808148082480834808448085480864808748088480894809048091480924809348094480954809648097480984809948100481014810248103481044810548106481074810848109481104811148112481134811448115481164811748118481194812048121481224812348124481254812648127481284812948130481314813248133481344813548136481374813848139481404814148142481434814448145481464814748148481494815048151481524815348154481554815648157481584815948160481614816248163481644816548166481674816848169481704817148172481734817448175481764817748178481794818048181481824818348184481854818648187481884818948190481914819248193481944819548196481974819848199482004820148202482034820448205482064820748208482094821048211482124821348214482154821648217482184821948220482214822248223482244822548226482274822848229482304823148232482334823448235482364823748238482394824048241482424824348244482454824648247482484824948250482514825248253482544825548256482574825848259482604826148262482634826448265482664826748268482694827048271482724827348274482754827648277482784827948280482814828248283482844828548286482874828848289482904829148292482934829448295482964829748298482994830048301483024830348304483054830648307483084830948310483114831248313483144831548316483174831848319483204832148322483234832448325483264832748328483294833048331483324833348334483354833648337483384833948340483414834248343483444834548346483474834848349483504835148352483534835448355483564835748358483594836048361483624836348364483654836648367483684836948370483714837248373483744837548376483774837848379483804838148382483834838448385483864838748388483894839048391483924839348394483954839648397483984839948400484014840248403484044840548406484074840848409484104841148412484134841448415484164841748418484194842048421484224842348424484254842648427484284842948430484314843248433484344843548436484374843848439484404844148442484434844448445484464844748448484494845048451484524845348454484554845648457484584845948460484614846248463484644846548466484674846848469484704847148472484734847448475484764847748478484794848048481484824848348484484854848648487484884848948490484914849248493484944849548496484974849848499485004850148502485034850448505485064850748508485094851048511485124851348514485154851648517485184851948520485214852248523485244852548526485274852848529485304853148532485334853448535485364853748538485394854048541485424854348544485454854648547485484854948550485514855248553485544855548556485574855848559485604856148562485634856448565485664856748568485694857048571485724857348574485754857648577485784857948580485814858248583485844858548586485874858848589485904859148592485934859448595485964859748598485994860048601486024860348604486054860648607486084860948610486114861248613486144861548616486174861848619486204862148622486234862448625486264862748628486294863048631486324863348634486354863648637486384863948640486414864248643486444864548646486474864848649486504865148652486534865448655486564865748658486594866048661486624866348664486654866648667486684866948670486714867248673486744867548676486774867848679486804868148682486834868448685486864868748688486894869048691486924869348694486954869648697486984869948700487014870248703487044870548706487074870848709487104871148712487134871448715487164871748718487194872048721487224872348724487254872648727487284872948730487314873248733487344873548736487374873848739487404874148742487434874448745487464874748748487494875048751487524875348754487554875648757487584875948760487614876248763487644876548766487674876848769487704877148772487734877448775487764877748778487794878048781487824878348784487854878648787487884878948790487914879248793487944879548796487974879848799488004880148802488034880448805488064880748808488094881048811488124881348814488154881648817488184881948820488214882248823488244882548826488274882848829488304883148832488334883448835488364883748838488394884048841488424884348844488454884648847488484884948850488514885248853488544885548856488574885848859488604886148862488634886448865488664886748868488694887048871488724887348874488754887648877488784887948880488814888248883488844888548886488874888848889488904889148892488934889448895488964889748898488994890048901489024890348904489054890648907489084890948910489114891248913489144891548916489174891848919489204892148922489234892448925489264892748928489294893048931489324893348934489354893648937489384893948940489414894248943489444894548946489474894848949489504895148952489534895448955489564895748958489594896048961489624896348964489654896648967489684896948970489714897248973489744897548976489774897848979489804898148982489834898448985489864898748988489894899048991489924899348994489954899648997489984899949000490014900249003490044900549006490074900849009490104901149012490134901449015490164901749018490194902049021490224902349024490254902649027490284902949030490314903249033490344903549036490374903849039490404904149042490434904449045490464904749048490494905049051490524905349054490554905649057490584905949060490614906249063490644906549066490674906849069490704907149072490734907449075490764907749078490794908049081490824908349084490854908649087490884908949090490914909249093490944909549096490974909849099491004910149102491034910449105491064910749108491094911049111491124911349114491154911649117491184911949120491214912249123491244912549126491274912849129491304913149132491334913449135491364913749138491394914049141491424914349144491454914649147491484914949150491514915249153491544915549156491574915849159491604916149162491634916449165491664916749168491694917049171491724917349174491754917649177491784917949180491814918249183491844918549186491874918849189491904919149192491934919449195491964919749198491994920049201492024920349204492054920649207492084920949210492114921249213492144921549216492174921849219492204922149222492234922449225492264922749228492294923049231492324923349234492354923649237492384923949240492414924249243492444924549246492474924849249492504925149252492534925449255492564925749258492594926049261492624926349264492654926649267492684926949270492714927249273492744927549276492774927849279492804928149282492834928449285492864928749288492894929049291492924929349294492954929649297492984929949300493014930249303493044930549306493074930849309493104931149312493134931449315493164931749318493194932049321493224932349324493254932649327493284932949330493314933249333493344933549336493374933849339493404934149342493434934449345493464934749348493494935049351493524935349354493554935649357493584935949360493614936249363493644936549366493674936849369493704937149372493734937449375493764937749378493794938049381493824938349384493854938649387493884938949390493914939249393493944939549396493974939849399494004940149402494034940449405494064940749408494094941049411494124941349414494154941649417494184941949420494214942249423494244942549426494274942849429494304943149432494334943449435494364943749438494394944049441494424944349444494454944649447494484944949450494514945249453494544945549456494574945849459494604946149462494634946449465494664946749468494694947049471494724947349474494754947649477494784947949480494814948249483494844948549486494874948849489494904949149492494934949449495494964949749498494994950049501495024950349504495054950649507495084950949510495114951249513495144951549516495174951849519495204952149522495234952449525495264952749528495294953049531495324953349534495354953649537495384953949540495414954249543495444954549546495474954849549495504955149552495534955449555495564955749558495594956049561495624956349564495654956649567495684956949570495714957249573495744957549576495774957849579495804958149582495834958449585495864958749588495894959049591495924959349594495954959649597495984959949600496014960249603496044960549606496074960849609496104961149612496134961449615496164961749618496194962049621496224962349624496254962649627496284962949630496314963249633496344963549636496374963849639496404964149642496434964449645496464964749648496494965049651496524965349654496554965649657496584965949660496614966249663496644966549666496674966849669496704967149672496734967449675496764967749678496794968049681496824968349684496854968649687496884968949690496914969249693496944969549696496974969849699497004970149702497034970449705497064970749708497094971049711497124971349714497154971649717497184971949720497214972249723497244972549726497274972849729497304973149732497334973449735497364973749738497394974049741497424974349744497454974649747497484974949750497514975249753497544975549756497574975849759497604976149762497634976449765497664976749768497694977049771497724977349774497754977649777497784977949780497814978249783497844978549786497874978849789497904979149792497934979449795497964979749798497994980049801498024980349804498054980649807498084980949810498114981249813498144981549816498174981849819498204982149822498234982449825498264982749828498294983049831498324983349834498354983649837498384983949840498414984249843498444984549846498474984849849498504985149852498534985449855498564985749858498594986049861498624986349864498654986649867498684986949870498714987249873498744987549876498774987849879498804988149882498834988449885498864988749888498894989049891498924989349894498954989649897498984989949900499014990249903499044990549906499074990849909499104991149912499134991449915499164991749918499194992049921499224992349924499254992649927499284992949930499314993249933499344993549936499374993849939499404994149942499434994449945499464994749948499494995049951499524995349954499554995649957499584995949960499614996249963499644996549966499674996849969499704997149972499734997449975499764997749978499794998049981499824998349984499854998649987499884998949990499914999249993499944999549996499974999849999500005000150002500035000450005500065000750008500095001050011500125001350014500155001650017500185001950020500215002250023500245002550026500275002850029500305003150032500335003450035500365003750038500395004050041500425004350044500455004650047500485004950050500515005250053500545005550056500575005850059500605006150062500635006450065500665006750068500695007050071500725007350074500755007650077500785007950080500815008250083500845008550086500875008850089500905009150092500935009450095500965009750098500995010050101501025010350104501055010650107501085010950110501115011250113501145011550116501175011850119501205012150122501235012450125501265012750128501295013050131501325013350134501355013650137501385013950140501415014250143501445014550146501475014850149501505015150152501535015450155501565015750158501595016050161501625016350164501655016650167501685016950170501715017250173501745017550176501775017850179501805018150182501835018450185501865018750188501895019050191501925019350194501955019650197501985019950200502015020250203502045020550206502075020850209502105021150212502135021450215502165021750218502195022050221502225022350224502255022650227502285022950230502315023250233502345023550236502375023850239502405024150242502435024450245502465024750248502495025050251502525025350254502555025650257502585025950260502615026250263502645026550266502675026850269502705027150272502735027450275502765027750278502795028050281502825028350284502855028650287502885028950290502915029250293502945029550296502975029850299503005030150302503035030450305503065030750308503095031050311503125031350314503155031650317503185031950320503215032250323503245032550326503275032850329503305033150332503335033450335503365033750338503395034050341503425034350344503455034650347503485034950350503515035250353503545035550356503575035850359503605036150362503635036450365503665036750368503695037050371503725037350374503755037650377503785037950380503815038250383503845038550386503875038850389503905039150392503935039450395503965039750398503995040050401504025040350404504055040650407504085040950410504115041250413504145041550416504175041850419504205042150422504235042450425504265042750428504295043050431504325043350434504355043650437504385043950440504415044250443504445044550446504475044850449504505045150452504535045450455504565045750458504595046050461504625046350464504655046650467504685046950470504715047250473504745047550476504775047850479504805048150482504835048450485504865048750488504895049050491504925049350494504955049650497504985049950500505015050250503505045050550506505075050850509505105051150512505135051450515505165051750518505195052050521505225052350524505255052650527505285052950530505315053250533505345053550536505375053850539505405054150542505435054450545505465054750548505495055050551505525055350554505555055650557505585055950560505615056250563505645056550566505675056850569505705057150572505735057450575505765057750578505795058050581505825058350584505855058650587505885058950590505915059250593505945059550596505975059850599506005060150602506035060450605506065060750608506095061050611506125061350614506155061650617506185061950620506215062250623506245062550626506275062850629506305063150632506335063450635506365063750638506395064050641506425064350644506455064650647506485064950650506515065250653506545065550656506575065850659506605066150662506635066450665506665066750668506695067050671506725067350674506755067650677506785067950680506815068250683506845068550686506875068850689506905069150692506935069450695506965069750698506995070050701507025070350704507055070650707507085070950710507115071250713507145071550716507175071850719507205072150722507235072450725507265072750728507295073050731507325073350734507355073650737507385073950740507415074250743507445074550746507475074850749507505075150752507535075450755507565075750758507595076050761507625076350764507655076650767507685076950770507715077250773507745077550776507775077850779507805078150782507835078450785507865078750788507895079050791507925079350794507955079650797507985079950800508015080250803508045080550806508075080850809508105081150812508135081450815508165081750818508195082050821508225082350824508255082650827508285082950830508315083250833508345083550836508375083850839508405084150842508435084450845508465084750848508495085050851508525085350854508555085650857508585085950860508615086250863508645086550866508675086850869508705087150872508735087450875508765087750878508795088050881508825088350884508855088650887508885088950890508915089250893508945089550896508975089850899509005090150902509035090450905509065090750908509095091050911509125091350914509155091650917509185091950920509215092250923509245092550926509275092850929509305093150932509335093450935509365093750938509395094050941509425094350944509455094650947509485094950950509515095250953509545095550956509575095850959509605096150962509635096450965509665096750968509695097050971509725097350974509755097650977509785097950980509815098250983509845098550986509875098850989509905099150992509935099450995509965099750998509995100051001510025100351004510055100651007510085100951010510115101251013510145101551016510175101851019510205102151022510235102451025510265102751028510295103051031510325103351034510355103651037510385103951040510415104251043510445104551046510475104851049510505105151052510535105451055510565105751058510595106051061510625106351064510655106651067510685106951070510715107251073510745107551076510775107851079510805108151082510835108451085510865108751088510895109051091510925109351094510955109651097510985109951100511015110251103511045110551106511075110851109511105111151112511135111451115511165111751118511195112051121511225112351124511255112651127511285112951130
  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 00014258 080002a0 080002a0 000012a0 2**4
  7. CONTENTS, ALLOC, LOAD, READONLY, CODE
  8. 2 .rodata 00000160 080144f8 080144f8 000154f8 2**2
  9. CONTENTS, ALLOC, LOAD, READONLY, DATA
  10. 3 .ARM 00000008 08014658 08014658 00015658 2**2
  11. CONTENTS, ALLOC, LOAD, READONLY, DATA
  12. 4 .init_array 00000004 08014660 08014660 00015660 2**2
  13. CONTENTS, ALLOC, LOAD, READONLY, DATA
  14. 5 .fini_array 00000004 08014664 08014664 00015664 2**2
  15. CONTENTS, ALLOC, LOAD, READONLY, DATA
  16. 6 .data 000000a4 24000000 08014668 00016000 2**2
  17. CONTENTS, ALLOC, LOAD, DATA
  18. 7 .bss 00012ad4 240000c0 0801470c 000160c0 2**5
  19. ALLOC
  20. 8 ._user_heap_stack 00000604 24012b94 0801470c 00016b94 2**0
  21. ALLOC
  22. 9 .ARM.attributes 0000002e 00000000 00000000 000160a4 2**0
  23. CONTENTS, READONLY
  24. 10 .debug_info 0002d948 00000000 00000000 000160d2 2**0
  25. CONTENTS, READONLY, DEBUGGING, OCTETS
  26. 11 .debug_abbrev 000058d1 00000000 00000000 00043a1a 2**0
  27. CONTENTS, READONLY, DEBUGGING, OCTETS
  28. 12 .debug_aranges 00002170 00000000 00000000 000492f0 2**3
  29. CONTENTS, READONLY, DEBUGGING, OCTETS
  30. 13 .debug_macro 0003dbc2 00000000 00000000 0004b460 2**0
  31. CONTENTS, READONLY, DEBUGGING, OCTETS
  32. 14 .debug_line 0002bc9b 00000000 00000000 00089022 2**0
  33. CONTENTS, READONLY, DEBUGGING, OCTETS
  34. 15 .debug_str 00182d62 00000000 00000000 000b4cbd 2**0
  35. CONTENTS, READONLY, DEBUGGING, OCTETS
  36. 16 .comment 00000043 00000000 00000000 00237a1f 2**0
  37. CONTENTS, READONLY
  38. 17 .debug_rnglists 000019c8 00000000 00000000 00237a62 2**0
  39. CONTENTS, READONLY, DEBUGGING, OCTETS
  40. 18 .debug_frame 000094bc 00000000 00000000 0023942c 2**2
  41. CONTENTS, READONLY, DEBUGGING, OCTETS
  42. 19 .debug_line_str 00000066 00000000 00000000 002428e8 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: 080144e0 .word 0x080144e0
  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: 080144e0 .word 0x080144e0
  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 <main>:
  415. /**
  416. * @brief The application entry point.
  417. * @retval int
  418. */
  419. int main(void)
  420. {
  421. 8000688: b580 push {r7, lr}
  422. 800068a: b084 sub sp, #16
  423. 800068c: af00 add r7, sp, #0
  424. /* USER CODE BEGIN 1 */
  425. /* USER CODE END 1 */
  426. /* MPU Configuration--------------------------------------------------------*/
  427. MPU_Config();
  428. 800068e: f000 fe9b bl 80013c8 <MPU_Config>
  429. \details Turns on I-Cache
  430. */
  431. __STATIC_FORCEINLINE void SCB_EnableICache (void)
  432. {
  433. #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)
  434. if (SCB->CCR & SCB_CCR_IC_Msk) return; /* return if ICache is already enabled */
  435. 8000692: 4b47 ldr r3, [pc, #284] @ (80007b0 <main+0x128>)
  436. 8000694: 695b ldr r3, [r3, #20]
  437. 8000696: f403 3300 and.w r3, r3, #131072 @ 0x20000
  438. 800069a: 2b00 cmp r3, #0
  439. 800069c: d11b bne.n 80006d6 <main+0x4e>
  440. \details Acts as a special kind of Data Memory Barrier.
  441. It completes when all explicit memory accesses before this instruction complete.
  442. */
  443. __STATIC_FORCEINLINE void __DSB(void)
  444. {
  445. __ASM volatile ("dsb 0xF":::"memory");
  446. 800069e: f3bf 8f4f dsb sy
  447. }
  448. 80006a2: bf00 nop
  449. __ASM volatile ("isb 0xF":::"memory");
  450. 80006a4: f3bf 8f6f isb sy
  451. }
  452. 80006a8: bf00 nop
  453. __DSB();
  454. __ISB();
  455. SCB->ICIALLU = 0UL; /* invalidate I-Cache */
  456. 80006aa: 4b41 ldr r3, [pc, #260] @ (80007b0 <main+0x128>)
  457. 80006ac: 2200 movs r2, #0
  458. 80006ae: f8c3 2250 str.w r2, [r3, #592] @ 0x250
  459. __ASM volatile ("dsb 0xF":::"memory");
  460. 80006b2: f3bf 8f4f dsb sy
  461. }
  462. 80006b6: bf00 nop
  463. __ASM volatile ("isb 0xF":::"memory");
  464. 80006b8: f3bf 8f6f isb sy
  465. }
  466. 80006bc: bf00 nop
  467. __DSB();
  468. __ISB();
  469. SCB->CCR |= (uint32_t)SCB_CCR_IC_Msk; /* enable I-Cache */
  470. 80006be: 4b3c ldr r3, [pc, #240] @ (80007b0 <main+0x128>)
  471. 80006c0: 695b ldr r3, [r3, #20]
  472. 80006c2: 4a3b ldr r2, [pc, #236] @ (80007b0 <main+0x128>)
  473. 80006c4: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  474. 80006c8: 6153 str r3, [r2, #20]
  475. __ASM volatile ("dsb 0xF":::"memory");
  476. 80006ca: f3bf 8f4f dsb sy
  477. }
  478. 80006ce: bf00 nop
  479. __ASM volatile ("isb 0xF":::"memory");
  480. 80006d0: f3bf 8f6f isb sy
  481. }
  482. 80006d4: e000 b.n 80006d8 <main+0x50>
  483. if (SCB->CCR & SCB_CCR_IC_Msk) return; /* return if ICache is already enabled */
  484. 80006d6: bf00 nop
  485. #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)
  486. uint32_t ccsidr;
  487. uint32_t sets;
  488. uint32_t ways;
  489. if (SCB->CCR & SCB_CCR_DC_Msk) return; /* return if DCache is already enabled */
  490. 80006d8: 4b35 ldr r3, [pc, #212] @ (80007b0 <main+0x128>)
  491. 80006da: 695b ldr r3, [r3, #20]
  492. 80006dc: f403 3380 and.w r3, r3, #65536 @ 0x10000
  493. 80006e0: 2b00 cmp r3, #0
  494. 80006e2: d138 bne.n 8000756 <main+0xce>
  495. SCB->CSSELR = 0U; /* select Level 1 data cache */
  496. 80006e4: 4b32 ldr r3, [pc, #200] @ (80007b0 <main+0x128>)
  497. 80006e6: 2200 movs r2, #0
  498. 80006e8: f8c3 2084 str.w r2, [r3, #132] @ 0x84
  499. __ASM volatile ("dsb 0xF":::"memory");
  500. 80006ec: f3bf 8f4f dsb sy
  501. }
  502. 80006f0: bf00 nop
  503. __DSB();
  504. ccsidr = SCB->CCSIDR;
  505. 80006f2: 4b2f ldr r3, [pc, #188] @ (80007b0 <main+0x128>)
  506. 80006f4: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  507. 80006f8: 60fb str r3, [r7, #12]
  508. /* invalidate D-Cache */
  509. sets = (uint32_t)(CCSIDR_SETS(ccsidr));
  510. 80006fa: 68fb ldr r3, [r7, #12]
  511. 80006fc: 0b5b lsrs r3, r3, #13
  512. 80006fe: f3c3 030e ubfx r3, r3, #0, #15
  513. 8000702: 60bb str r3, [r7, #8]
  514. do {
  515. ways = (uint32_t)(CCSIDR_WAYS(ccsidr));
  516. 8000704: 68fb ldr r3, [r7, #12]
  517. 8000706: 08db lsrs r3, r3, #3
  518. 8000708: f3c3 0309 ubfx r3, r3, #0, #10
  519. 800070c: 607b str r3, [r7, #4]
  520. do {
  521. SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) |
  522. 800070e: 68bb ldr r3, [r7, #8]
  523. 8000710: 015a lsls r2, r3, #5
  524. 8000712: f643 73e0 movw r3, #16352 @ 0x3fe0
  525. 8000716: 4013 ands r3, r2
  526. ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk) );
  527. 8000718: 687a ldr r2, [r7, #4]
  528. 800071a: 0792 lsls r2, r2, #30
  529. SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) |
  530. 800071c: 4924 ldr r1, [pc, #144] @ (80007b0 <main+0x128>)
  531. 800071e: 4313 orrs r3, r2
  532. 8000720: f8c1 3260 str.w r3, [r1, #608] @ 0x260
  533. #if defined ( __CC_ARM )
  534. __schedule_barrier();
  535. #endif
  536. } while (ways-- != 0U);
  537. 8000724: 687b ldr r3, [r7, #4]
  538. 8000726: 1e5a subs r2, r3, #1
  539. 8000728: 607a str r2, [r7, #4]
  540. 800072a: 2b00 cmp r3, #0
  541. 800072c: d1ef bne.n 800070e <main+0x86>
  542. } while(sets-- != 0U);
  543. 800072e: 68bb ldr r3, [r7, #8]
  544. 8000730: 1e5a subs r2, r3, #1
  545. 8000732: 60ba str r2, [r7, #8]
  546. 8000734: 2b00 cmp r3, #0
  547. 8000736: d1e5 bne.n 8000704 <main+0x7c>
  548. __ASM volatile ("dsb 0xF":::"memory");
  549. 8000738: f3bf 8f4f dsb sy
  550. }
  551. 800073c: bf00 nop
  552. __DSB();
  553. SCB->CCR |= (uint32_t)SCB_CCR_DC_Msk; /* enable D-Cache */
  554. 800073e: 4b1c ldr r3, [pc, #112] @ (80007b0 <main+0x128>)
  555. 8000740: 695b ldr r3, [r3, #20]
  556. 8000742: 4a1b ldr r2, [pc, #108] @ (80007b0 <main+0x128>)
  557. 8000744: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  558. 8000748: 6153 str r3, [r2, #20]
  559. __ASM volatile ("dsb 0xF":::"memory");
  560. 800074a: f3bf 8f4f dsb sy
  561. }
  562. 800074e: bf00 nop
  563. __ASM volatile ("isb 0xF":::"memory");
  564. 8000750: f3bf 8f6f isb sy
  565. }
  566. 8000754: e000 b.n 8000758 <main+0xd0>
  567. if (SCB->CCR & SCB_CCR_DC_Msk) return; /* return if DCache is already enabled */
  568. 8000756: bf00 nop
  569. SCB_EnableDCache();
  570. /* MCU Configuration--------------------------------------------------------*/
  571. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  572. HAL_Init();
  573. 8000758: f002 fe64 bl 8003424 <HAL_Init>
  574. /* USER CODE BEGIN Init */
  575. /* USER CODE END Init */
  576. /* Configure the system clock */
  577. SystemClock_Config();
  578. 800075c: f000 f830 bl 80007c0 <SystemClock_Config>
  579. /* Configure the peripherals common clocks */
  580. PeriphCommonClock_Config();
  581. 8000760: f000 f8aa bl 80008b8 <PeriphCommonClock_Config>
  582. /* USER CODE BEGIN SysInit */
  583. /* USER CODE END SysInit */
  584. /* Initialize all configured peripherals */
  585. MX_GPIO_Init();
  586. 8000764: f000 fc50 bl 8001008 <MX_GPIO_Init>
  587. MX_DMA_Init();
  588. 8000768: f000 fc1e bl 8000fa8 <MX_DMA_Init>
  589. MX_RNG_Init();
  590. 800076c: f000 fb1a bl 8000da4 <MX_RNG_Init>
  591. MX_USART1_UART_Init();
  592. 8000770: f000 fbca bl 8000f08 <MX_USART1_UART_Init>
  593. MX_ADC1_Init();
  594. 8000774: f000 f8d0 bl 8000918 <MX_ADC1_Init>
  595. MX_UART8_Init();
  596. 8000778: f000 fb7a bl 8000e70 <MX_UART8_Init>
  597. MX_CRC_Init();
  598. 800077c: f000 fae8 bl 8000d50 <MX_CRC_Init>
  599. MX_ADC2_Init();
  600. 8000780: f000 f9a2 bl 8000ac8 <MX_ADC2_Init>
  601. MX_ADC3_Init();
  602. 8000784: f000 fa34 bl 8000bf0 <MX_ADC3_Init>
  603. MX_TIM2_Init();
  604. 8000788: f000 fb22 bl 8000dd0 <MX_TIM2_Init>
  605. /* USER CODE BEGIN 2 */
  606. /* USER CODE END 2 */
  607. /* Init scheduler */
  608. osKernelInitialize();
  609. 800078c: f00e ff56 bl 800f63c <osKernelInitialize>
  610. /* add queues, ... */
  611. /* USER CODE END RTOS_QUEUES */
  612. /* Create the thread(s) */
  613. /* creation of defaultTask */
  614. defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes);
  615. 8000790: 4a08 ldr r2, [pc, #32] @ (80007b4 <main+0x12c>)
  616. 8000792: 2100 movs r1, #0
  617. 8000794: 4808 ldr r0, [pc, #32] @ (80007b8 <main+0x130>)
  618. 8000796: f00e ff9b bl 800f6d0 <osThreadNew>
  619. 800079a: 4603 mov r3, r0
  620. 800079c: 4a07 ldr r2, [pc, #28] @ (80007bc <main+0x134>)
  621. 800079e: 6013 str r3, [r2, #0]
  622. /* USER CODE BEGIN RTOS_THREADS */
  623. /* add threads, ... */
  624. // Uart8TasksInit();
  625. UartTasksInit();
  626. 80007a0: f002 f8c8 bl 8002934 <UartTasksInit>
  627. #ifdef USER_MOCKS
  628. MockMeasurmetsTaskInit();
  629. #else
  630. MeasTasksInit();
  631. 80007a4: f000 fe7a bl 800149c <MeasTasksInit>
  632. /* USER CODE BEGIN RTOS_EVENTS */
  633. /* add events, ... */
  634. /* USER CODE END RTOS_EVENTS */
  635. /* Start scheduler */
  636. osKernelStart();
  637. 80007a8: f00e ff6c bl 800f684 <osKernelStart>
  638. /* We should never get here as control is now taken by the scheduler */
  639. /* Infinite loop */
  640. /* USER CODE BEGIN WHILE */
  641. while (1)
  642. 80007ac: bf00 nop
  643. 80007ae: e7fd b.n 80007ac <main+0x124>
  644. 80007b0: e000ed00 .word 0xe000ed00
  645. 80007b4: 080145c0 .word 0x080145c0
  646. 80007b8: 08001329 .word 0x08001329
  647. 80007bc: 24000580 .word 0x24000580
  648. 080007c0 <SystemClock_Config>:
  649. /**
  650. * @brief System Clock Configuration
  651. * @retval None
  652. */
  653. void SystemClock_Config(void)
  654. {
  655. 80007c0: b580 push {r7, lr}
  656. 80007c2: b09c sub sp, #112 @ 0x70
  657. 80007c4: af00 add r7, sp, #0
  658. RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  659. 80007c6: f107 0324 add.w r3, r7, #36 @ 0x24
  660. 80007ca: 224c movs r2, #76 @ 0x4c
  661. 80007cc: 2100 movs r1, #0
  662. 80007ce: 4618 mov r0, r3
  663. 80007d0: f013 f809 bl 80137e6 <memset>
  664. RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  665. 80007d4: 1d3b adds r3, r7, #4
  666. 80007d6: 2220 movs r2, #32
  667. 80007d8: 2100 movs r1, #0
  668. 80007da: 4618 mov r0, r3
  669. 80007dc: f013 f803 bl 80137e6 <memset>
  670. /** Supply configuration update enable
  671. */
  672. HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY);
  673. 80007e0: 2002 movs r0, #2
  674. 80007e2: f007 fe25 bl 8008430 <HAL_PWREx_ConfigSupply>
  675. /** Configure the main internal regulator output voltage
  676. */
  677. __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
  678. 80007e6: 2300 movs r3, #0
  679. 80007e8: 603b str r3, [r7, #0]
  680. 80007ea: 4b31 ldr r3, [pc, #196] @ (80008b0 <SystemClock_Config+0xf0>)
  681. 80007ec: 6adb ldr r3, [r3, #44] @ 0x2c
  682. 80007ee: 4a30 ldr r2, [pc, #192] @ (80008b0 <SystemClock_Config+0xf0>)
  683. 80007f0: f023 0301 bic.w r3, r3, #1
  684. 80007f4: 62d3 str r3, [r2, #44] @ 0x2c
  685. 80007f6: 4b2e ldr r3, [pc, #184] @ (80008b0 <SystemClock_Config+0xf0>)
  686. 80007f8: 6adb ldr r3, [r3, #44] @ 0x2c
  687. 80007fa: f003 0301 and.w r3, r3, #1
  688. 80007fe: 603b str r3, [r7, #0]
  689. 8000800: 4b2c ldr r3, [pc, #176] @ (80008b4 <SystemClock_Config+0xf4>)
  690. 8000802: 699b ldr r3, [r3, #24]
  691. 8000804: 4a2b ldr r2, [pc, #172] @ (80008b4 <SystemClock_Config+0xf4>)
  692. 8000806: f443 4340 orr.w r3, r3, #49152 @ 0xc000
  693. 800080a: 6193 str r3, [r2, #24]
  694. 800080c: 4b29 ldr r3, [pc, #164] @ (80008b4 <SystemClock_Config+0xf4>)
  695. 800080e: 699b ldr r3, [r3, #24]
  696. 8000810: f403 4340 and.w r3, r3, #49152 @ 0xc000
  697. 8000814: 603b str r3, [r7, #0]
  698. 8000816: 683b ldr r3, [r7, #0]
  699. while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}
  700. 8000818: bf00 nop
  701. 800081a: 4b26 ldr r3, [pc, #152] @ (80008b4 <SystemClock_Config+0xf4>)
  702. 800081c: 699b ldr r3, [r3, #24]
  703. 800081e: f403 5300 and.w r3, r3, #8192 @ 0x2000
  704. 8000822: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  705. 8000826: d1f8 bne.n 800081a <SystemClock_Config+0x5a>
  706. /** Initializes the RCC Oscillators according to the specified parameters
  707. * in the RCC_OscInitTypeDef structure.
  708. */
  709. RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48|RCC_OSCILLATORTYPE_HSE;
  710. 8000828: 2321 movs r3, #33 @ 0x21
  711. 800082a: 627b str r3, [r7, #36] @ 0x24
  712. RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  713. 800082c: f44f 3380 mov.w r3, #65536 @ 0x10000
  714. 8000830: 62bb str r3, [r7, #40] @ 0x28
  715. RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
  716. 8000832: 2301 movs r3, #1
  717. 8000834: 63fb str r3, [r7, #60] @ 0x3c
  718. RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  719. 8000836: 2302 movs r3, #2
  720. 8000838: 64bb str r3, [r7, #72] @ 0x48
  721. RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  722. 800083a: 2302 movs r3, #2
  723. 800083c: 64fb str r3, [r7, #76] @ 0x4c
  724. RCC_OscInitStruct.PLL.PLLM = 5;
  725. 800083e: 2305 movs r3, #5
  726. 8000840: 653b str r3, [r7, #80] @ 0x50
  727. RCC_OscInitStruct.PLL.PLLN = 160;
  728. 8000842: 23a0 movs r3, #160 @ 0xa0
  729. 8000844: 657b str r3, [r7, #84] @ 0x54
  730. RCC_OscInitStruct.PLL.PLLP = 2;
  731. 8000846: 2302 movs r3, #2
  732. 8000848: 65bb str r3, [r7, #88] @ 0x58
  733. RCC_OscInitStruct.PLL.PLLQ = 2;
  734. 800084a: 2302 movs r3, #2
  735. 800084c: 65fb str r3, [r7, #92] @ 0x5c
  736. RCC_OscInitStruct.PLL.PLLR = 2;
  737. 800084e: 2302 movs r3, #2
  738. 8000850: 663b str r3, [r7, #96] @ 0x60
  739. RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2;
  740. 8000852: 2308 movs r3, #8
  741. 8000854: 667b str r3, [r7, #100] @ 0x64
  742. RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;
  743. 8000856: 2300 movs r3, #0
  744. 8000858: 66bb str r3, [r7, #104] @ 0x68
  745. RCC_OscInitStruct.PLL.PLLFRACN = 0;
  746. 800085a: 2300 movs r3, #0
  747. 800085c: 66fb str r3, [r7, #108] @ 0x6c
  748. if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  749. 800085e: f107 0324 add.w r3, r7, #36 @ 0x24
  750. 8000862: 4618 mov r0, r3
  751. 8000864: f007 fe1e bl 80084a4 <HAL_RCC_OscConfig>
  752. 8000868: 4603 mov r3, r0
  753. 800086a: 2b00 cmp r3, #0
  754. 800086c: d001 beq.n 8000872 <SystemClock_Config+0xb2>
  755. {
  756. Error_Handler();
  757. 800086e: f000 fe0f bl 8001490 <Error_Handler>
  758. }
  759. /** Initializes the CPU, AHB and APB buses clocks
  760. */
  761. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  762. 8000872: 233f movs r3, #63 @ 0x3f
  763. 8000874: 607b str r3, [r7, #4]
  764. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2
  765. |RCC_CLOCKTYPE_D3PCLK1|RCC_CLOCKTYPE_D1PCLK1;
  766. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  767. 8000876: 2303 movs r3, #3
  768. 8000878: 60bb str r3, [r7, #8]
  769. RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;
  770. 800087a: 2300 movs r3, #0
  771. 800087c: 60fb str r3, [r7, #12]
  772. RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2;
  773. 800087e: 2308 movs r3, #8
  774. 8000880: 613b str r3, [r7, #16]
  775. RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2;
  776. 8000882: 2340 movs r3, #64 @ 0x40
  777. 8000884: 617b str r3, [r7, #20]
  778. RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2;
  779. 8000886: 2340 movs r3, #64 @ 0x40
  780. 8000888: 61bb str r3, [r7, #24]
  781. RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;
  782. 800088a: f44f 6380 mov.w r3, #1024 @ 0x400
  783. 800088e: 61fb str r3, [r7, #28]
  784. RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;
  785. 8000890: 2340 movs r3, #64 @ 0x40
  786. 8000892: 623b str r3, [r7, #32]
  787. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  788. 8000894: 1d3b adds r3, r7, #4
  789. 8000896: 2102 movs r1, #2
  790. 8000898: 4618 mov r0, r3
  791. 800089a: f008 fa5d bl 8008d58 <HAL_RCC_ClockConfig>
  792. 800089e: 4603 mov r3, r0
  793. 80008a0: 2b00 cmp r3, #0
  794. 80008a2: d001 beq.n 80008a8 <SystemClock_Config+0xe8>
  795. {
  796. Error_Handler();
  797. 80008a4: f000 fdf4 bl 8001490 <Error_Handler>
  798. }
  799. }
  800. 80008a8: bf00 nop
  801. 80008aa: 3770 adds r7, #112 @ 0x70
  802. 80008ac: 46bd mov sp, r7
  803. 80008ae: bd80 pop {r7, pc}
  804. 80008b0: 58000400 .word 0x58000400
  805. 80008b4: 58024800 .word 0x58024800
  806. 080008b8 <PeriphCommonClock_Config>:
  807. /**
  808. * @brief Peripherals Common Clock Configuration
  809. * @retval None
  810. */
  811. void PeriphCommonClock_Config(void)
  812. {
  813. 80008b8: b580 push {r7, lr}
  814. 80008ba: b0b0 sub sp, #192 @ 0xc0
  815. 80008bc: af00 add r7, sp, #0
  816. RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
  817. 80008be: 463b mov r3, r7
  818. 80008c0: 22c0 movs r2, #192 @ 0xc0
  819. 80008c2: 2100 movs r1, #0
  820. 80008c4: 4618 mov r0, r3
  821. 80008c6: f012 ff8e bl 80137e6 <memset>
  822. /** Initializes the peripherals clock
  823. */
  824. PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_ADC;
  825. 80008ca: f44f 2200 mov.w r2, #524288 @ 0x80000
  826. 80008ce: f04f 0300 mov.w r3, #0
  827. 80008d2: e9c7 2300 strd r2, r3, [r7]
  828. PeriphClkInitStruct.PLL2.PLL2M = 5;
  829. 80008d6: 2305 movs r3, #5
  830. 80008d8: 60bb str r3, [r7, #8]
  831. PeriphClkInitStruct.PLL2.PLL2N = 52;
  832. 80008da: 2334 movs r3, #52 @ 0x34
  833. 80008dc: 60fb str r3, [r7, #12]
  834. PeriphClkInitStruct.PLL2.PLL2P = 26;
  835. 80008de: 231a movs r3, #26
  836. 80008e0: 613b str r3, [r7, #16]
  837. PeriphClkInitStruct.PLL2.PLL2Q = 2;
  838. 80008e2: 2302 movs r3, #2
  839. 80008e4: 617b str r3, [r7, #20]
  840. PeriphClkInitStruct.PLL2.PLL2R = 2;
  841. 80008e6: 2302 movs r3, #2
  842. 80008e8: 61bb str r3, [r7, #24]
  843. PeriphClkInitStruct.PLL2.PLL2RGE = RCC_PLL2VCIRANGE_2;
  844. 80008ea: 2380 movs r3, #128 @ 0x80
  845. 80008ec: 61fb str r3, [r7, #28]
  846. PeriphClkInitStruct.PLL2.PLL2VCOSEL = RCC_PLL2VCOWIDE;
  847. 80008ee: 2300 movs r3, #0
  848. 80008f0: 623b str r3, [r7, #32]
  849. PeriphClkInitStruct.PLL2.PLL2FRACN = 0;
  850. 80008f2: 2300 movs r3, #0
  851. 80008f4: 627b str r3, [r7, #36] @ 0x24
  852. PeriphClkInitStruct.AdcClockSelection = RCC_ADCCLKSOURCE_PLL2;
  853. 80008f6: 2300 movs r3, #0
  854. 80008f8: f8c7 30a4 str.w r3, [r7, #164] @ 0xa4
  855. if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
  856. 80008fc: 463b mov r3, r7
  857. 80008fe: 4618 mov r0, r3
  858. 8000900: f008 fdf8 bl 80094f4 <HAL_RCCEx_PeriphCLKConfig>
  859. 8000904: 4603 mov r3, r0
  860. 8000906: 2b00 cmp r3, #0
  861. 8000908: d001 beq.n 800090e <PeriphCommonClock_Config+0x56>
  862. {
  863. Error_Handler();
  864. 800090a: f000 fdc1 bl 8001490 <Error_Handler>
  865. }
  866. }
  867. 800090e: bf00 nop
  868. 8000910: 37c0 adds r7, #192 @ 0xc0
  869. 8000912: 46bd mov sp, r7
  870. 8000914: bd80 pop {r7, pc}
  871. ...
  872. 08000918 <MX_ADC1_Init>:
  873. * @brief ADC1 Initialization Function
  874. * @param None
  875. * @retval None
  876. */
  877. static void MX_ADC1_Init(void)
  878. {
  879. 8000918: b580 push {r7, lr}
  880. 800091a: b08a sub sp, #40 @ 0x28
  881. 800091c: af00 add r7, sp, #0
  882. /* USER CODE BEGIN ADC1_Init 0 */
  883. /* USER CODE END ADC1_Init 0 */
  884. ADC_MultiModeTypeDef multimode = {0};
  885. 800091e: f107 031c add.w r3, r7, #28
  886. 8000922: 2200 movs r2, #0
  887. 8000924: 601a str r2, [r3, #0]
  888. 8000926: 605a str r2, [r3, #4]
  889. 8000928: 609a str r2, [r3, #8]
  890. ADC_ChannelConfTypeDef sConfig = {0};
  891. 800092a: 463b mov r3, r7
  892. 800092c: 2200 movs r2, #0
  893. 800092e: 601a str r2, [r3, #0]
  894. 8000930: 605a str r2, [r3, #4]
  895. 8000932: 609a str r2, [r3, #8]
  896. 8000934: 60da str r2, [r3, #12]
  897. 8000936: 611a str r2, [r3, #16]
  898. 8000938: 615a str r2, [r3, #20]
  899. 800093a: 619a str r2, [r3, #24]
  900. /* USER CODE END ADC1_Init 1 */
  901. /** Common config
  902. */
  903. hadc1.Instance = ADC1;
  904. 800093c: 4b5a ldr r3, [pc, #360] @ (8000aa8 <MX_ADC1_Init+0x190>)
  905. 800093e: 4a5b ldr r2, [pc, #364] @ (8000aac <MX_ADC1_Init+0x194>)
  906. 8000940: 601a str r2, [r3, #0]
  907. hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
  908. 8000942: 4b59 ldr r3, [pc, #356] @ (8000aa8 <MX_ADC1_Init+0x190>)
  909. 8000944: 2200 movs r2, #0
  910. 8000946: 605a str r2, [r3, #4]
  911. hadc1.Init.Resolution = ADC_RESOLUTION_16B;
  912. 8000948: 4b57 ldr r3, [pc, #348] @ (8000aa8 <MX_ADC1_Init+0x190>)
  913. 800094a: 2200 movs r2, #0
  914. 800094c: 609a str r2, [r3, #8]
  915. hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
  916. 800094e: 4b56 ldr r3, [pc, #344] @ (8000aa8 <MX_ADC1_Init+0x190>)
  917. 8000950: 2201 movs r2, #1
  918. 8000952: 60da str r2, [r3, #12]
  919. hadc1.Init.EOCSelection = ADC_EOC_SEQ_CONV;
  920. 8000954: 4b54 ldr r3, [pc, #336] @ (8000aa8 <MX_ADC1_Init+0x190>)
  921. 8000956: 2208 movs r2, #8
  922. 8000958: 611a str r2, [r3, #16]
  923. hadc1.Init.LowPowerAutoWait = DISABLE;
  924. 800095a: 4b53 ldr r3, [pc, #332] @ (8000aa8 <MX_ADC1_Init+0x190>)
  925. 800095c: 2200 movs r2, #0
  926. 800095e: 751a strb r2, [r3, #20]
  927. hadc1.Init.ContinuousConvMode = ENABLE;
  928. 8000960: 4b51 ldr r3, [pc, #324] @ (8000aa8 <MX_ADC1_Init+0x190>)
  929. 8000962: 2201 movs r2, #1
  930. 8000964: 755a strb r2, [r3, #21]
  931. hadc1.Init.NbrOfConversion = 6;
  932. 8000966: 4b50 ldr r3, [pc, #320] @ (8000aa8 <MX_ADC1_Init+0x190>)
  933. 8000968: 2206 movs r2, #6
  934. 800096a: 619a str r2, [r3, #24]
  935. hadc1.Init.DiscontinuousConvMode = DISABLE;
  936. 800096c: 4b4e ldr r3, [pc, #312] @ (8000aa8 <MX_ADC1_Init+0x190>)
  937. 800096e: 2200 movs r2, #0
  938. 8000970: 771a strb r2, [r3, #28]
  939. hadc1.Init.ExternalTrigConv = ADC_EXTERNALTRIG_T2_TRGO;
  940. 8000972: 4b4d ldr r3, [pc, #308] @ (8000aa8 <MX_ADC1_Init+0x190>)
  941. 8000974: f44f 62ac mov.w r2, #1376 @ 0x560
  942. 8000978: 625a str r2, [r3, #36] @ 0x24
  943. hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING;
  944. 800097a: 4b4b ldr r3, [pc, #300] @ (8000aa8 <MX_ADC1_Init+0x190>)
  945. 800097c: f44f 6280 mov.w r2, #1024 @ 0x400
  946. 8000980: 629a str r2, [r3, #40] @ 0x28
  947. hadc1.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DMA_ONESHOT;
  948. 8000982: 4b49 ldr r3, [pc, #292] @ (8000aa8 <MX_ADC1_Init+0x190>)
  949. 8000984: 2201 movs r2, #1
  950. 8000986: 62da str r2, [r3, #44] @ 0x2c
  951. hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
  952. 8000988: 4b47 ldr r3, [pc, #284] @ (8000aa8 <MX_ADC1_Init+0x190>)
  953. 800098a: 2200 movs r2, #0
  954. 800098c: 631a str r2, [r3, #48] @ 0x30
  955. hadc1.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE;
  956. 800098e: 4b46 ldr r3, [pc, #280] @ (8000aa8 <MX_ADC1_Init+0x190>)
  957. 8000990: 2200 movs r2, #0
  958. 8000992: 635a str r2, [r3, #52] @ 0x34
  959. hadc1.Init.OversamplingMode = DISABLE;
  960. 8000994: 4b44 ldr r3, [pc, #272] @ (8000aa8 <MX_ADC1_Init+0x190>)
  961. 8000996: 2200 movs r2, #0
  962. 8000998: f883 2038 strb.w r2, [r3, #56] @ 0x38
  963. if (HAL_ADC_Init(&hadc1) != HAL_OK)
  964. 800099c: 4842 ldr r0, [pc, #264] @ (8000aa8 <MX_ADC1_Init+0x190>)
  965. 800099e: f002 ffcd bl 800393c <HAL_ADC_Init>
  966. 80009a2: 4603 mov r3, r0
  967. 80009a4: 2b00 cmp r3, #0
  968. 80009a6: d001 beq.n 80009ac <MX_ADC1_Init+0x94>
  969. {
  970. Error_Handler();
  971. 80009a8: f000 fd72 bl 8001490 <Error_Handler>
  972. }
  973. /** Configure the ADC multi-mode
  974. */
  975. multimode.Mode = ADC_MODE_INDEPENDENT;
  976. 80009ac: 2300 movs r3, #0
  977. 80009ae: 61fb str r3, [r7, #28]
  978. if (HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode) != HAL_OK)
  979. 80009b0: f107 031c add.w r3, r7, #28
  980. 80009b4: 4619 mov r1, r3
  981. 80009b6: 483c ldr r0, [pc, #240] @ (8000aa8 <MX_ADC1_Init+0x190>)
  982. 80009b8: f004 f8de bl 8004b78 <HAL_ADCEx_MultiModeConfigChannel>
  983. 80009bc: 4603 mov r3, r0
  984. 80009be: 2b00 cmp r3, #0
  985. 80009c0: d001 beq.n 80009c6 <MX_ADC1_Init+0xae>
  986. {
  987. Error_Handler();
  988. 80009c2: f000 fd65 bl 8001490 <Error_Handler>
  989. }
  990. /** Configure Regular Channel
  991. */
  992. sConfig.Channel = ADC_CHANNEL_8;
  993. 80009c6: 4b3a ldr r3, [pc, #232] @ (8000ab0 <MX_ADC1_Init+0x198>)
  994. 80009c8: 603b str r3, [r7, #0]
  995. sConfig.Rank = ADC_REGULAR_RANK_1;
  996. 80009ca: 2306 movs r3, #6
  997. 80009cc: 607b str r3, [r7, #4]
  998. sConfig.SamplingTime = ADC_SAMPLETIME_387CYCLES_5;
  999. 80009ce: 2306 movs r3, #6
  1000. 80009d0: 60bb str r3, [r7, #8]
  1001. sConfig.SingleDiff = ADC_SINGLE_ENDED;
  1002. 80009d2: f240 73ff movw r3, #2047 @ 0x7ff
  1003. 80009d6: 60fb str r3, [r7, #12]
  1004. sConfig.OffsetNumber = ADC_OFFSET_NONE;
  1005. 80009d8: 2304 movs r3, #4
  1006. 80009da: 613b str r3, [r7, #16]
  1007. sConfig.Offset = 0;
  1008. 80009dc: 2300 movs r3, #0
  1009. 80009de: 617b str r3, [r7, #20]
  1010. sConfig.OffsetSignedSaturation = DISABLE;
  1011. 80009e0: 2300 movs r3, #0
  1012. 80009e2: 767b strb r3, [r7, #25]
  1013. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  1014. 80009e4: 463b mov r3, r7
  1015. 80009e6: 4619 mov r1, r3
  1016. 80009e8: 482f ldr r0, [pc, #188] @ (8000aa8 <MX_ADC1_Init+0x190>)
  1017. 80009ea: f003 fa21 bl 8003e30 <HAL_ADC_ConfigChannel>
  1018. 80009ee: 4603 mov r3, r0
  1019. 80009f0: 2b00 cmp r3, #0
  1020. 80009f2: d001 beq.n 80009f8 <MX_ADC1_Init+0xe0>
  1021. {
  1022. Error_Handler();
  1023. 80009f4: f000 fd4c bl 8001490 <Error_Handler>
  1024. }
  1025. /** Configure Regular Channel
  1026. */
  1027. sConfig.Channel = ADC_CHANNEL_7;
  1028. 80009f8: 4b2e ldr r3, [pc, #184] @ (8000ab4 <MX_ADC1_Init+0x19c>)
  1029. 80009fa: 603b str r3, [r7, #0]
  1030. sConfig.Rank = ADC_REGULAR_RANK_2;
  1031. 80009fc: 230c movs r3, #12
  1032. 80009fe: 607b str r3, [r7, #4]
  1033. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  1034. 8000a00: 463b mov r3, r7
  1035. 8000a02: 4619 mov r1, r3
  1036. 8000a04: 4828 ldr r0, [pc, #160] @ (8000aa8 <MX_ADC1_Init+0x190>)
  1037. 8000a06: f003 fa13 bl 8003e30 <HAL_ADC_ConfigChannel>
  1038. 8000a0a: 4603 mov r3, r0
  1039. 8000a0c: 2b00 cmp r3, #0
  1040. 8000a0e: d001 beq.n 8000a14 <MX_ADC1_Init+0xfc>
  1041. {
  1042. Error_Handler();
  1043. 8000a10: f000 fd3e bl 8001490 <Error_Handler>
  1044. }
  1045. /** Configure Regular Channel
  1046. */
  1047. sConfig.Channel = ADC_CHANNEL_9;
  1048. 8000a14: 4b28 ldr r3, [pc, #160] @ (8000ab8 <MX_ADC1_Init+0x1a0>)
  1049. 8000a16: 603b str r3, [r7, #0]
  1050. sConfig.Rank = ADC_REGULAR_RANK_3;
  1051. 8000a18: 2312 movs r3, #18
  1052. 8000a1a: 607b str r3, [r7, #4]
  1053. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  1054. 8000a1c: 463b mov r3, r7
  1055. 8000a1e: 4619 mov r1, r3
  1056. 8000a20: 4821 ldr r0, [pc, #132] @ (8000aa8 <MX_ADC1_Init+0x190>)
  1057. 8000a22: f003 fa05 bl 8003e30 <HAL_ADC_ConfigChannel>
  1058. 8000a26: 4603 mov r3, r0
  1059. 8000a28: 2b00 cmp r3, #0
  1060. 8000a2a: d001 beq.n 8000a30 <MX_ADC1_Init+0x118>
  1061. {
  1062. Error_Handler();
  1063. 8000a2c: f000 fd30 bl 8001490 <Error_Handler>
  1064. }
  1065. /** Configure Regular Channel
  1066. */
  1067. sConfig.Channel = ADC_CHANNEL_16;
  1068. 8000a30: 4b22 ldr r3, [pc, #136] @ (8000abc <MX_ADC1_Init+0x1a4>)
  1069. 8000a32: 603b str r3, [r7, #0]
  1070. sConfig.Rank = ADC_REGULAR_RANK_4;
  1071. 8000a34: 2318 movs r3, #24
  1072. 8000a36: 607b str r3, [r7, #4]
  1073. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  1074. 8000a38: 463b mov r3, r7
  1075. 8000a3a: 4619 mov r1, r3
  1076. 8000a3c: 481a ldr r0, [pc, #104] @ (8000aa8 <MX_ADC1_Init+0x190>)
  1077. 8000a3e: f003 f9f7 bl 8003e30 <HAL_ADC_ConfigChannel>
  1078. 8000a42: 4603 mov r3, r0
  1079. 8000a44: 2b00 cmp r3, #0
  1080. 8000a46: d001 beq.n 8000a4c <MX_ADC1_Init+0x134>
  1081. {
  1082. Error_Handler();
  1083. 8000a48: f000 fd22 bl 8001490 <Error_Handler>
  1084. }
  1085. /** Configure Regular Channel
  1086. */
  1087. sConfig.Channel = ADC_CHANNEL_17;
  1088. 8000a4c: 4b1c ldr r3, [pc, #112] @ (8000ac0 <MX_ADC1_Init+0x1a8>)
  1089. 8000a4e: 603b str r3, [r7, #0]
  1090. sConfig.Rank = ADC_REGULAR_RANK_5;
  1091. 8000a50: f44f 7380 mov.w r3, #256 @ 0x100
  1092. 8000a54: 607b str r3, [r7, #4]
  1093. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  1094. 8000a56: 463b mov r3, r7
  1095. 8000a58: 4619 mov r1, r3
  1096. 8000a5a: 4813 ldr r0, [pc, #76] @ (8000aa8 <MX_ADC1_Init+0x190>)
  1097. 8000a5c: f003 f9e8 bl 8003e30 <HAL_ADC_ConfigChannel>
  1098. 8000a60: 4603 mov r3, r0
  1099. 8000a62: 2b00 cmp r3, #0
  1100. 8000a64: d001 beq.n 8000a6a <MX_ADC1_Init+0x152>
  1101. {
  1102. Error_Handler();
  1103. 8000a66: f000 fd13 bl 8001490 <Error_Handler>
  1104. }
  1105. /** Configure Regular Channel
  1106. */
  1107. sConfig.Channel = ADC_CHANNEL_14;
  1108. 8000a6a: 4b16 ldr r3, [pc, #88] @ (8000ac4 <MX_ADC1_Init+0x1ac>)
  1109. 8000a6c: 603b str r3, [r7, #0]
  1110. sConfig.Rank = ADC_REGULAR_RANK_6;
  1111. 8000a6e: f44f 7383 mov.w r3, #262 @ 0x106
  1112. 8000a72: 607b str r3, [r7, #4]
  1113. if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  1114. 8000a74: 463b mov r3, r7
  1115. 8000a76: 4619 mov r1, r3
  1116. 8000a78: 480b ldr r0, [pc, #44] @ (8000aa8 <MX_ADC1_Init+0x190>)
  1117. 8000a7a: f003 f9d9 bl 8003e30 <HAL_ADC_ConfigChannel>
  1118. 8000a7e: 4603 mov r3, r0
  1119. 8000a80: 2b00 cmp r3, #0
  1120. 8000a82: d001 beq.n 8000a88 <MX_ADC1_Init+0x170>
  1121. {
  1122. Error_Handler();
  1123. 8000a84: f000 fd04 bl 8001490 <Error_Handler>
  1124. }
  1125. /* USER CODE BEGIN ADC1_Init 2 */
  1126. if (HAL_ADCEx_Calibration_Start(&hadc1, ADC_CALIB_OFFSET_LINEARITY, ADC_SINGLE_ENDED) != HAL_OK)
  1127. 8000a88: f240 72ff movw r2, #2047 @ 0x7ff
  1128. 8000a8c: f04f 1101 mov.w r1, #65537 @ 0x10001
  1129. 8000a90: 4805 ldr r0, [pc, #20] @ (8000aa8 <MX_ADC1_Init+0x190>)
  1130. 8000a92: f004 f80d bl 8004ab0 <HAL_ADCEx_Calibration_Start>
  1131. 8000a96: 4603 mov r3, r0
  1132. 8000a98: 2b00 cmp r3, #0
  1133. 8000a9a: d001 beq.n 8000aa0 <MX_ADC1_Init+0x188>
  1134. {
  1135. Error_Handler();
  1136. 8000a9c: f000 fcf8 bl 8001490 <Error_Handler>
  1137. }
  1138. /* USER CODE END ADC1_Init 2 */
  1139. }
  1140. 8000aa0: bf00 nop
  1141. 8000aa2: 3728 adds r7, #40 @ 0x28
  1142. 8000aa4: 46bd mov sp, r7
  1143. 8000aa6: bd80 pop {r7, pc}
  1144. 8000aa8: 24000140 .word 0x24000140
  1145. 8000aac: 40022000 .word 0x40022000
  1146. 8000ab0: 21800100 .word 0x21800100
  1147. 8000ab4: 1d500080 .word 0x1d500080
  1148. 8000ab8: 25b00200 .word 0x25b00200
  1149. 8000abc: 43210000 .word 0x43210000
  1150. 8000ac0: 47520000 .word 0x47520000
  1151. 8000ac4: 3ac04000 .word 0x3ac04000
  1152. 08000ac8 <MX_ADC2_Init>:
  1153. * @brief ADC2 Initialization Function
  1154. * @param None
  1155. * @retval None
  1156. */
  1157. static void MX_ADC2_Init(void)
  1158. {
  1159. 8000ac8: b580 push {r7, lr}
  1160. 8000aca: b088 sub sp, #32
  1161. 8000acc: af00 add r7, sp, #0
  1162. /* USER CODE BEGIN ADC2_Init 0 */
  1163. /* USER CODE END ADC2_Init 0 */
  1164. ADC_ChannelConfTypeDef sConfig = {0};
  1165. 8000ace: 1d3b adds r3, r7, #4
  1166. 8000ad0: 2200 movs r2, #0
  1167. 8000ad2: 601a str r2, [r3, #0]
  1168. 8000ad4: 605a str r2, [r3, #4]
  1169. 8000ad6: 609a str r2, [r3, #8]
  1170. 8000ad8: 60da str r2, [r3, #12]
  1171. 8000ada: 611a str r2, [r3, #16]
  1172. 8000adc: 615a str r2, [r3, #20]
  1173. 8000ade: 619a str r2, [r3, #24]
  1174. /* USER CODE END ADC2_Init 1 */
  1175. /** Common config
  1176. */
  1177. hadc2.Instance = ADC2;
  1178. 8000ae0: 4b3e ldr r3, [pc, #248] @ (8000bdc <MX_ADC2_Init+0x114>)
  1179. 8000ae2: 4a3f ldr r2, [pc, #252] @ (8000be0 <MX_ADC2_Init+0x118>)
  1180. 8000ae4: 601a str r2, [r3, #0]
  1181. hadc2.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
  1182. 8000ae6: 4b3d ldr r3, [pc, #244] @ (8000bdc <MX_ADC2_Init+0x114>)
  1183. 8000ae8: 2200 movs r2, #0
  1184. 8000aea: 605a str r2, [r3, #4]
  1185. hadc2.Init.Resolution = ADC_RESOLUTION_16B;
  1186. 8000aec: 4b3b ldr r3, [pc, #236] @ (8000bdc <MX_ADC2_Init+0x114>)
  1187. 8000aee: 2200 movs r2, #0
  1188. 8000af0: 609a str r2, [r3, #8]
  1189. hadc2.Init.ScanConvMode = ADC_SCAN_ENABLE;
  1190. 8000af2: 4b3a ldr r3, [pc, #232] @ (8000bdc <MX_ADC2_Init+0x114>)
  1191. 8000af4: 2201 movs r2, #1
  1192. 8000af6: 60da str r2, [r3, #12]
  1193. hadc2.Init.EOCSelection = ADC_EOC_SEQ_CONV;
  1194. 8000af8: 4b38 ldr r3, [pc, #224] @ (8000bdc <MX_ADC2_Init+0x114>)
  1195. 8000afa: 2208 movs r2, #8
  1196. 8000afc: 611a str r2, [r3, #16]
  1197. hadc2.Init.LowPowerAutoWait = DISABLE;
  1198. 8000afe: 4b37 ldr r3, [pc, #220] @ (8000bdc <MX_ADC2_Init+0x114>)
  1199. 8000b00: 2200 movs r2, #0
  1200. 8000b02: 751a strb r2, [r3, #20]
  1201. hadc2.Init.ContinuousConvMode = ENABLE;
  1202. 8000b04: 4b35 ldr r3, [pc, #212] @ (8000bdc <MX_ADC2_Init+0x114>)
  1203. 8000b06: 2201 movs r2, #1
  1204. 8000b08: 755a strb r2, [r3, #21]
  1205. hadc2.Init.NbrOfConversion = 3;
  1206. 8000b0a: 4b34 ldr r3, [pc, #208] @ (8000bdc <MX_ADC2_Init+0x114>)
  1207. 8000b0c: 2203 movs r2, #3
  1208. 8000b0e: 619a str r2, [r3, #24]
  1209. hadc2.Init.DiscontinuousConvMode = DISABLE;
  1210. 8000b10: 4b32 ldr r3, [pc, #200] @ (8000bdc <MX_ADC2_Init+0x114>)
  1211. 8000b12: 2200 movs r2, #0
  1212. 8000b14: 771a strb r2, [r3, #28]
  1213. hadc2.Init.ExternalTrigConv = ADC_EXTERNALTRIG_T2_TRGO;
  1214. 8000b16: 4b31 ldr r3, [pc, #196] @ (8000bdc <MX_ADC2_Init+0x114>)
  1215. 8000b18: f44f 62ac mov.w r2, #1376 @ 0x560
  1216. 8000b1c: 625a str r2, [r3, #36] @ 0x24
  1217. hadc2.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING;
  1218. 8000b1e: 4b2f ldr r3, [pc, #188] @ (8000bdc <MX_ADC2_Init+0x114>)
  1219. 8000b20: f44f 6280 mov.w r2, #1024 @ 0x400
  1220. 8000b24: 629a str r2, [r3, #40] @ 0x28
  1221. hadc2.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DMA_ONESHOT;
  1222. 8000b26: 4b2d ldr r3, [pc, #180] @ (8000bdc <MX_ADC2_Init+0x114>)
  1223. 8000b28: 2201 movs r2, #1
  1224. 8000b2a: 62da str r2, [r3, #44] @ 0x2c
  1225. hadc2.Init.Overrun = ADC_OVR_DATA_PRESERVED;
  1226. 8000b2c: 4b2b ldr r3, [pc, #172] @ (8000bdc <MX_ADC2_Init+0x114>)
  1227. 8000b2e: 2200 movs r2, #0
  1228. 8000b30: 631a str r2, [r3, #48] @ 0x30
  1229. hadc2.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE;
  1230. 8000b32: 4b2a ldr r3, [pc, #168] @ (8000bdc <MX_ADC2_Init+0x114>)
  1231. 8000b34: 2200 movs r2, #0
  1232. 8000b36: 635a str r2, [r3, #52] @ 0x34
  1233. hadc2.Init.OversamplingMode = DISABLE;
  1234. 8000b38: 4b28 ldr r3, [pc, #160] @ (8000bdc <MX_ADC2_Init+0x114>)
  1235. 8000b3a: 2200 movs r2, #0
  1236. 8000b3c: f883 2038 strb.w r2, [r3, #56] @ 0x38
  1237. if (HAL_ADC_Init(&hadc2) != HAL_OK)
  1238. 8000b40: 4826 ldr r0, [pc, #152] @ (8000bdc <MX_ADC2_Init+0x114>)
  1239. 8000b42: f002 fefb bl 800393c <HAL_ADC_Init>
  1240. 8000b46: 4603 mov r3, r0
  1241. 8000b48: 2b00 cmp r3, #0
  1242. 8000b4a: d001 beq.n 8000b50 <MX_ADC2_Init+0x88>
  1243. {
  1244. Error_Handler();
  1245. 8000b4c: f000 fca0 bl 8001490 <Error_Handler>
  1246. }
  1247. /** Configure Regular Channel
  1248. */
  1249. sConfig.Channel = ADC_CHANNEL_3;
  1250. 8000b50: 4b24 ldr r3, [pc, #144] @ (8000be4 <MX_ADC2_Init+0x11c>)
  1251. 8000b52: 607b str r3, [r7, #4]
  1252. sConfig.Rank = ADC_REGULAR_RANK_1;
  1253. 8000b54: 2306 movs r3, #6
  1254. 8000b56: 60bb str r3, [r7, #8]
  1255. sConfig.SamplingTime = ADC_SAMPLETIME_387CYCLES_5;
  1256. 8000b58: 2306 movs r3, #6
  1257. 8000b5a: 60fb str r3, [r7, #12]
  1258. sConfig.SingleDiff = ADC_SINGLE_ENDED;
  1259. 8000b5c: f240 73ff movw r3, #2047 @ 0x7ff
  1260. 8000b60: 613b str r3, [r7, #16]
  1261. sConfig.OffsetNumber = ADC_OFFSET_NONE;
  1262. 8000b62: 2304 movs r3, #4
  1263. 8000b64: 617b str r3, [r7, #20]
  1264. sConfig.Offset = 0;
  1265. 8000b66: 2300 movs r3, #0
  1266. 8000b68: 61bb str r3, [r7, #24]
  1267. sConfig.OffsetSignedSaturation = DISABLE;
  1268. 8000b6a: 2300 movs r3, #0
  1269. 8000b6c: 777b strb r3, [r7, #29]
  1270. if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
  1271. 8000b6e: 1d3b adds r3, r7, #4
  1272. 8000b70: 4619 mov r1, r3
  1273. 8000b72: 481a ldr r0, [pc, #104] @ (8000bdc <MX_ADC2_Init+0x114>)
  1274. 8000b74: f003 f95c bl 8003e30 <HAL_ADC_ConfigChannel>
  1275. 8000b78: 4603 mov r3, r0
  1276. 8000b7a: 2b00 cmp r3, #0
  1277. 8000b7c: d001 beq.n 8000b82 <MX_ADC2_Init+0xba>
  1278. {
  1279. Error_Handler();
  1280. 8000b7e: f000 fc87 bl 8001490 <Error_Handler>
  1281. }
  1282. /** Configure Regular Channel
  1283. */
  1284. sConfig.Channel = ADC_CHANNEL_4;
  1285. 8000b82: 4b19 ldr r3, [pc, #100] @ (8000be8 <MX_ADC2_Init+0x120>)
  1286. 8000b84: 607b str r3, [r7, #4]
  1287. sConfig.Rank = ADC_REGULAR_RANK_2;
  1288. 8000b86: 230c movs r3, #12
  1289. 8000b88: 60bb str r3, [r7, #8]
  1290. if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
  1291. 8000b8a: 1d3b adds r3, r7, #4
  1292. 8000b8c: 4619 mov r1, r3
  1293. 8000b8e: 4813 ldr r0, [pc, #76] @ (8000bdc <MX_ADC2_Init+0x114>)
  1294. 8000b90: f003 f94e bl 8003e30 <HAL_ADC_ConfigChannel>
  1295. 8000b94: 4603 mov r3, r0
  1296. 8000b96: 2b00 cmp r3, #0
  1297. 8000b98: d001 beq.n 8000b9e <MX_ADC2_Init+0xd6>
  1298. {
  1299. Error_Handler();
  1300. 8000b9a: f000 fc79 bl 8001490 <Error_Handler>
  1301. }
  1302. /** Configure Regular Channel
  1303. */
  1304. sConfig.Channel = ADC_CHANNEL_5;
  1305. 8000b9e: 4b13 ldr r3, [pc, #76] @ (8000bec <MX_ADC2_Init+0x124>)
  1306. 8000ba0: 607b str r3, [r7, #4]
  1307. sConfig.Rank = ADC_REGULAR_RANK_3;
  1308. 8000ba2: 2312 movs r3, #18
  1309. 8000ba4: 60bb str r3, [r7, #8]
  1310. if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
  1311. 8000ba6: 1d3b adds r3, r7, #4
  1312. 8000ba8: 4619 mov r1, r3
  1313. 8000baa: 480c ldr r0, [pc, #48] @ (8000bdc <MX_ADC2_Init+0x114>)
  1314. 8000bac: f003 f940 bl 8003e30 <HAL_ADC_ConfigChannel>
  1315. 8000bb0: 4603 mov r3, r0
  1316. 8000bb2: 2b00 cmp r3, #0
  1317. 8000bb4: d001 beq.n 8000bba <MX_ADC2_Init+0xf2>
  1318. {
  1319. Error_Handler();
  1320. 8000bb6: f000 fc6b bl 8001490 <Error_Handler>
  1321. }
  1322. /* USER CODE BEGIN ADC2_Init 2 */
  1323. if (HAL_ADCEx_Calibration_Start(&hadc2, ADC_CALIB_OFFSET_LINEARITY, ADC_SINGLE_ENDED) != HAL_OK)
  1324. 8000bba: f240 72ff movw r2, #2047 @ 0x7ff
  1325. 8000bbe: f04f 1101 mov.w r1, #65537 @ 0x10001
  1326. 8000bc2: 4806 ldr r0, [pc, #24] @ (8000bdc <MX_ADC2_Init+0x114>)
  1327. 8000bc4: f003 ff74 bl 8004ab0 <HAL_ADCEx_Calibration_Start>
  1328. 8000bc8: 4603 mov r3, r0
  1329. 8000bca: 2b00 cmp r3, #0
  1330. 8000bcc: d001 beq.n 8000bd2 <MX_ADC2_Init+0x10a>
  1331. {
  1332. Error_Handler();
  1333. 8000bce: f000 fc5f bl 8001490 <Error_Handler>
  1334. }
  1335. /* USER CODE END ADC2_Init 2 */
  1336. }
  1337. 8000bd2: bf00 nop
  1338. 8000bd4: 3720 adds r7, #32
  1339. 8000bd6: 46bd mov sp, r7
  1340. 8000bd8: bd80 pop {r7, pc}
  1341. 8000bda: bf00 nop
  1342. 8000bdc: 240001a4 .word 0x240001a4
  1343. 8000be0: 40022100 .word 0x40022100
  1344. 8000be4: 0c900008 .word 0x0c900008
  1345. 8000be8: 10c00010 .word 0x10c00010
  1346. 8000bec: 14f00020 .word 0x14f00020
  1347. 08000bf0 <MX_ADC3_Init>:
  1348. * @brief ADC3 Initialization Function
  1349. * @param None
  1350. * @retval None
  1351. */
  1352. static void MX_ADC3_Init(void)
  1353. {
  1354. 8000bf0: b580 push {r7, lr}
  1355. 8000bf2: b088 sub sp, #32
  1356. 8000bf4: af00 add r7, sp, #0
  1357. /* USER CODE BEGIN ADC3_Init 0 */
  1358. /* USER CODE END ADC3_Init 0 */
  1359. ADC_ChannelConfTypeDef sConfig = {0};
  1360. 8000bf6: 1d3b adds r3, r7, #4
  1361. 8000bf8: 2200 movs r2, #0
  1362. 8000bfa: 601a str r2, [r3, #0]
  1363. 8000bfc: 605a str r2, [r3, #4]
  1364. 8000bfe: 609a str r2, [r3, #8]
  1365. 8000c00: 60da str r2, [r3, #12]
  1366. 8000c02: 611a str r2, [r3, #16]
  1367. 8000c04: 615a str r2, [r3, #20]
  1368. 8000c06: 619a str r2, [r3, #24]
  1369. /* USER CODE END ADC3_Init 1 */
  1370. /** Common config
  1371. */
  1372. hadc3.Instance = ADC3;
  1373. 8000c08: 4b4b ldr r3, [pc, #300] @ (8000d38 <MX_ADC3_Init+0x148>)
  1374. 8000c0a: 4a4c ldr r2, [pc, #304] @ (8000d3c <MX_ADC3_Init+0x14c>)
  1375. 8000c0c: 601a str r2, [r3, #0]
  1376. hadc3.Init.Resolution = ADC_RESOLUTION_16B;
  1377. 8000c0e: 4b4a ldr r3, [pc, #296] @ (8000d38 <MX_ADC3_Init+0x148>)
  1378. 8000c10: 2200 movs r2, #0
  1379. 8000c12: 609a str r2, [r3, #8]
  1380. hadc3.Init.ScanConvMode = ADC_SCAN_ENABLE;
  1381. 8000c14: 4b48 ldr r3, [pc, #288] @ (8000d38 <MX_ADC3_Init+0x148>)
  1382. 8000c16: 2201 movs r2, #1
  1383. 8000c18: 60da str r2, [r3, #12]
  1384. hadc3.Init.EOCSelection = ADC_EOC_SEQ_CONV;
  1385. 8000c1a: 4b47 ldr r3, [pc, #284] @ (8000d38 <MX_ADC3_Init+0x148>)
  1386. 8000c1c: 2208 movs r2, #8
  1387. 8000c1e: 611a str r2, [r3, #16]
  1388. hadc3.Init.LowPowerAutoWait = DISABLE;
  1389. 8000c20: 4b45 ldr r3, [pc, #276] @ (8000d38 <MX_ADC3_Init+0x148>)
  1390. 8000c22: 2200 movs r2, #0
  1391. 8000c24: 751a strb r2, [r3, #20]
  1392. hadc3.Init.ContinuousConvMode = ENABLE;
  1393. 8000c26: 4b44 ldr r3, [pc, #272] @ (8000d38 <MX_ADC3_Init+0x148>)
  1394. 8000c28: 2201 movs r2, #1
  1395. 8000c2a: 755a strb r2, [r3, #21]
  1396. hadc3.Init.NbrOfConversion = 5;
  1397. 8000c2c: 4b42 ldr r3, [pc, #264] @ (8000d38 <MX_ADC3_Init+0x148>)
  1398. 8000c2e: 2205 movs r2, #5
  1399. 8000c30: 619a str r2, [r3, #24]
  1400. hadc3.Init.DiscontinuousConvMode = DISABLE;
  1401. 8000c32: 4b41 ldr r3, [pc, #260] @ (8000d38 <MX_ADC3_Init+0x148>)
  1402. 8000c34: 2200 movs r2, #0
  1403. 8000c36: 771a strb r2, [r3, #28]
  1404. hadc3.Init.ExternalTrigConv = ADC_EXTERNALTRIG_T2_TRGO;
  1405. 8000c38: 4b3f ldr r3, [pc, #252] @ (8000d38 <MX_ADC3_Init+0x148>)
  1406. 8000c3a: f44f 62ac mov.w r2, #1376 @ 0x560
  1407. 8000c3e: 625a str r2, [r3, #36] @ 0x24
  1408. hadc3.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING;
  1409. 8000c40: 4b3d ldr r3, [pc, #244] @ (8000d38 <MX_ADC3_Init+0x148>)
  1410. 8000c42: f44f 6280 mov.w r2, #1024 @ 0x400
  1411. 8000c46: 629a str r2, [r3, #40] @ 0x28
  1412. hadc3.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DMA_ONESHOT;
  1413. 8000c48: 4b3b ldr r3, [pc, #236] @ (8000d38 <MX_ADC3_Init+0x148>)
  1414. 8000c4a: 2201 movs r2, #1
  1415. 8000c4c: 62da str r2, [r3, #44] @ 0x2c
  1416. hadc3.Init.Overrun = ADC_OVR_DATA_PRESERVED;
  1417. 8000c4e: 4b3a ldr r3, [pc, #232] @ (8000d38 <MX_ADC3_Init+0x148>)
  1418. 8000c50: 2200 movs r2, #0
  1419. 8000c52: 631a str r2, [r3, #48] @ 0x30
  1420. hadc3.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE;
  1421. 8000c54: 4b38 ldr r3, [pc, #224] @ (8000d38 <MX_ADC3_Init+0x148>)
  1422. 8000c56: 2200 movs r2, #0
  1423. 8000c58: 635a str r2, [r3, #52] @ 0x34
  1424. hadc3.Init.OversamplingMode = DISABLE;
  1425. 8000c5a: 4b37 ldr r3, [pc, #220] @ (8000d38 <MX_ADC3_Init+0x148>)
  1426. 8000c5c: 2200 movs r2, #0
  1427. 8000c5e: f883 2038 strb.w r2, [r3, #56] @ 0x38
  1428. if (HAL_ADC_Init(&hadc3) != HAL_OK)
  1429. 8000c62: 4835 ldr r0, [pc, #212] @ (8000d38 <MX_ADC3_Init+0x148>)
  1430. 8000c64: f002 fe6a bl 800393c <HAL_ADC_Init>
  1431. 8000c68: 4603 mov r3, r0
  1432. 8000c6a: 2b00 cmp r3, #0
  1433. 8000c6c: d001 beq.n 8000c72 <MX_ADC3_Init+0x82>
  1434. {
  1435. Error_Handler();
  1436. 8000c6e: f000 fc0f bl 8001490 <Error_Handler>
  1437. }
  1438. /** Configure Regular Channel
  1439. */
  1440. sConfig.Channel = ADC_CHANNEL_0;
  1441. 8000c72: 2301 movs r3, #1
  1442. 8000c74: 607b str r3, [r7, #4]
  1443. sConfig.Rank = ADC_REGULAR_RANK_1;
  1444. 8000c76: 2306 movs r3, #6
  1445. 8000c78: 60bb str r3, [r7, #8]
  1446. sConfig.SamplingTime = ADC_SAMPLETIME_387CYCLES_5;
  1447. 8000c7a: 2306 movs r3, #6
  1448. 8000c7c: 60fb str r3, [r7, #12]
  1449. sConfig.SingleDiff = ADC_SINGLE_ENDED;
  1450. 8000c7e: f240 73ff movw r3, #2047 @ 0x7ff
  1451. 8000c82: 613b str r3, [r7, #16]
  1452. sConfig.OffsetNumber = ADC_OFFSET_NONE;
  1453. 8000c84: 2304 movs r3, #4
  1454. 8000c86: 617b str r3, [r7, #20]
  1455. sConfig.Offset = 0;
  1456. 8000c88: 2300 movs r3, #0
  1457. 8000c8a: 61bb str r3, [r7, #24]
  1458. sConfig.OffsetSignedSaturation = DISABLE;
  1459. 8000c8c: 2300 movs r3, #0
  1460. 8000c8e: 777b strb r3, [r7, #29]
  1461. if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
  1462. 8000c90: 1d3b adds r3, r7, #4
  1463. 8000c92: 4619 mov r1, r3
  1464. 8000c94: 4828 ldr r0, [pc, #160] @ (8000d38 <MX_ADC3_Init+0x148>)
  1465. 8000c96: f003 f8cb bl 8003e30 <HAL_ADC_ConfigChannel>
  1466. 8000c9a: 4603 mov r3, r0
  1467. 8000c9c: 2b00 cmp r3, #0
  1468. 8000c9e: d001 beq.n 8000ca4 <MX_ADC3_Init+0xb4>
  1469. {
  1470. Error_Handler();
  1471. 8000ca0: f000 fbf6 bl 8001490 <Error_Handler>
  1472. }
  1473. /** Configure Regular Channel
  1474. */
  1475. sConfig.Channel = ADC_CHANNEL_1;
  1476. 8000ca4: 4b26 ldr r3, [pc, #152] @ (8000d40 <MX_ADC3_Init+0x150>)
  1477. 8000ca6: 607b str r3, [r7, #4]
  1478. sConfig.Rank = ADC_REGULAR_RANK_2;
  1479. 8000ca8: 230c movs r3, #12
  1480. 8000caa: 60bb str r3, [r7, #8]
  1481. if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
  1482. 8000cac: 1d3b adds r3, r7, #4
  1483. 8000cae: 4619 mov r1, r3
  1484. 8000cb0: 4821 ldr r0, [pc, #132] @ (8000d38 <MX_ADC3_Init+0x148>)
  1485. 8000cb2: f003 f8bd bl 8003e30 <HAL_ADC_ConfigChannel>
  1486. 8000cb6: 4603 mov r3, r0
  1487. 8000cb8: 2b00 cmp r3, #0
  1488. 8000cba: d001 beq.n 8000cc0 <MX_ADC3_Init+0xd0>
  1489. {
  1490. Error_Handler();
  1491. 8000cbc: f000 fbe8 bl 8001490 <Error_Handler>
  1492. }
  1493. /** Configure Regular Channel
  1494. */
  1495. sConfig.Channel = ADC_CHANNEL_10;
  1496. 8000cc0: 4b20 ldr r3, [pc, #128] @ (8000d44 <MX_ADC3_Init+0x154>)
  1497. 8000cc2: 607b str r3, [r7, #4]
  1498. sConfig.Rank = ADC_REGULAR_RANK_3;
  1499. 8000cc4: 2312 movs r3, #18
  1500. 8000cc6: 60bb str r3, [r7, #8]
  1501. if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
  1502. 8000cc8: 1d3b adds r3, r7, #4
  1503. 8000cca: 4619 mov r1, r3
  1504. 8000ccc: 481a ldr r0, [pc, #104] @ (8000d38 <MX_ADC3_Init+0x148>)
  1505. 8000cce: f003 f8af bl 8003e30 <HAL_ADC_ConfigChannel>
  1506. 8000cd2: 4603 mov r3, r0
  1507. 8000cd4: 2b00 cmp r3, #0
  1508. 8000cd6: d001 beq.n 8000cdc <MX_ADC3_Init+0xec>
  1509. {
  1510. Error_Handler();
  1511. 8000cd8: f000 fbda bl 8001490 <Error_Handler>
  1512. }
  1513. /** Configure Regular Channel
  1514. */
  1515. sConfig.Channel = ADC_CHANNEL_11;
  1516. 8000cdc: 4b1a ldr r3, [pc, #104] @ (8000d48 <MX_ADC3_Init+0x158>)
  1517. 8000cde: 607b str r3, [r7, #4]
  1518. sConfig.Rank = ADC_REGULAR_RANK_4;
  1519. 8000ce0: 2318 movs r3, #24
  1520. 8000ce2: 60bb str r3, [r7, #8]
  1521. if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
  1522. 8000ce4: 1d3b adds r3, r7, #4
  1523. 8000ce6: 4619 mov r1, r3
  1524. 8000ce8: 4813 ldr r0, [pc, #76] @ (8000d38 <MX_ADC3_Init+0x148>)
  1525. 8000cea: f003 f8a1 bl 8003e30 <HAL_ADC_ConfigChannel>
  1526. 8000cee: 4603 mov r3, r0
  1527. 8000cf0: 2b00 cmp r3, #0
  1528. 8000cf2: d001 beq.n 8000cf8 <MX_ADC3_Init+0x108>
  1529. {
  1530. Error_Handler();
  1531. 8000cf4: f000 fbcc bl 8001490 <Error_Handler>
  1532. }
  1533. /** Configure Regular Channel
  1534. */
  1535. sConfig.Channel = ADC_CHANNEL_VREFINT;
  1536. 8000cf8: 4b14 ldr r3, [pc, #80] @ (8000d4c <MX_ADC3_Init+0x15c>)
  1537. 8000cfa: 607b str r3, [r7, #4]
  1538. sConfig.Rank = ADC_REGULAR_RANK_5;
  1539. 8000cfc: f44f 7380 mov.w r3, #256 @ 0x100
  1540. 8000d00: 60bb str r3, [r7, #8]
  1541. if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
  1542. 8000d02: 1d3b adds r3, r7, #4
  1543. 8000d04: 4619 mov r1, r3
  1544. 8000d06: 480c ldr r0, [pc, #48] @ (8000d38 <MX_ADC3_Init+0x148>)
  1545. 8000d08: f003 f892 bl 8003e30 <HAL_ADC_ConfigChannel>
  1546. 8000d0c: 4603 mov r3, r0
  1547. 8000d0e: 2b00 cmp r3, #0
  1548. 8000d10: d001 beq.n 8000d16 <MX_ADC3_Init+0x126>
  1549. {
  1550. Error_Handler();
  1551. 8000d12: f000 fbbd bl 8001490 <Error_Handler>
  1552. }
  1553. /* USER CODE BEGIN ADC3_Init 2 */
  1554. if (HAL_ADCEx_Calibration_Start(&hadc3, ADC_CALIB_OFFSET_LINEARITY, ADC_SINGLE_ENDED) != HAL_OK)
  1555. 8000d16: f240 72ff movw r2, #2047 @ 0x7ff
  1556. 8000d1a: f04f 1101 mov.w r1, #65537 @ 0x10001
  1557. 8000d1e: 4806 ldr r0, [pc, #24] @ (8000d38 <MX_ADC3_Init+0x148>)
  1558. 8000d20: f003 fec6 bl 8004ab0 <HAL_ADCEx_Calibration_Start>
  1559. 8000d24: 4603 mov r3, r0
  1560. 8000d26: 2b00 cmp r3, #0
  1561. 8000d28: d001 beq.n 8000d2e <MX_ADC3_Init+0x13e>
  1562. {
  1563. Error_Handler();
  1564. 8000d2a: f000 fbb1 bl 8001490 <Error_Handler>
  1565. }
  1566. /* USER CODE END ADC3_Init 2 */
  1567. }
  1568. 8000d2e: bf00 nop
  1569. 8000d30: 3720 adds r7, #32
  1570. 8000d32: 46bd mov sp, r7
  1571. 8000d34: bd80 pop {r7, pc}
  1572. 8000d36: bf00 nop
  1573. 8000d38: 24000208 .word 0x24000208
  1574. 8000d3c: 58026000 .word 0x58026000
  1575. 8000d40: 04300002 .word 0x04300002
  1576. 8000d44: 2a000400 .word 0x2a000400
  1577. 8000d48: 2e300800 .word 0x2e300800
  1578. 8000d4c: cfb80000 .word 0xcfb80000
  1579. 08000d50 <MX_CRC_Init>:
  1580. * @brief CRC Initialization Function
  1581. * @param None
  1582. * @retval None
  1583. */
  1584. static void MX_CRC_Init(void)
  1585. {
  1586. 8000d50: b580 push {r7, lr}
  1587. 8000d52: af00 add r7, sp, #0
  1588. /* USER CODE END CRC_Init 0 */
  1589. /* USER CODE BEGIN CRC_Init 1 */
  1590. /* USER CODE END CRC_Init 1 */
  1591. hcrc.Instance = CRC;
  1592. 8000d54: 4b11 ldr r3, [pc, #68] @ (8000d9c <MX_CRC_Init+0x4c>)
  1593. 8000d56: 4a12 ldr r2, [pc, #72] @ (8000da0 <MX_CRC_Init+0x50>)
  1594. 8000d58: 601a str r2, [r3, #0]
  1595. hcrc.Init.DefaultPolynomialUse = DEFAULT_POLYNOMIAL_DISABLE;
  1596. 8000d5a: 4b10 ldr r3, [pc, #64] @ (8000d9c <MX_CRC_Init+0x4c>)
  1597. 8000d5c: 2201 movs r2, #1
  1598. 8000d5e: 711a strb r2, [r3, #4]
  1599. hcrc.Init.DefaultInitValueUse = DEFAULT_INIT_VALUE_ENABLE;
  1600. 8000d60: 4b0e ldr r3, [pc, #56] @ (8000d9c <MX_CRC_Init+0x4c>)
  1601. 8000d62: 2200 movs r2, #0
  1602. 8000d64: 715a strb r2, [r3, #5]
  1603. hcrc.Init.GeneratingPolynomial = 4129;
  1604. 8000d66: 4b0d ldr r3, [pc, #52] @ (8000d9c <MX_CRC_Init+0x4c>)
  1605. 8000d68: f241 0221 movw r2, #4129 @ 0x1021
  1606. 8000d6c: 609a str r2, [r3, #8]
  1607. hcrc.Init.CRCLength = CRC_POLYLENGTH_16B;
  1608. 8000d6e: 4b0b ldr r3, [pc, #44] @ (8000d9c <MX_CRC_Init+0x4c>)
  1609. 8000d70: 2208 movs r2, #8
  1610. 8000d72: 60da str r2, [r3, #12]
  1611. hcrc.Init.InputDataInversionMode = CRC_INPUTDATA_INVERSION_NONE;
  1612. 8000d74: 4b09 ldr r3, [pc, #36] @ (8000d9c <MX_CRC_Init+0x4c>)
  1613. 8000d76: 2200 movs r2, #0
  1614. 8000d78: 615a str r2, [r3, #20]
  1615. hcrc.Init.OutputDataInversionMode = CRC_OUTPUTDATA_INVERSION_DISABLE;
  1616. 8000d7a: 4b08 ldr r3, [pc, #32] @ (8000d9c <MX_CRC_Init+0x4c>)
  1617. 8000d7c: 2200 movs r2, #0
  1618. 8000d7e: 619a str r2, [r3, #24]
  1619. hcrc.InputDataFormat = CRC_INPUTDATA_FORMAT_BYTES;
  1620. 8000d80: 4b06 ldr r3, [pc, #24] @ (8000d9c <MX_CRC_Init+0x4c>)
  1621. 8000d82: 2201 movs r2, #1
  1622. 8000d84: 621a str r2, [r3, #32]
  1623. if (HAL_CRC_Init(&hcrc) != HAL_OK)
  1624. 8000d86: 4805 ldr r0, [pc, #20] @ (8000d9c <MX_CRC_Init+0x4c>)
  1625. 8000d88: f004 f92c bl 8004fe4 <HAL_CRC_Init>
  1626. 8000d8c: 4603 mov r3, r0
  1627. 8000d8e: 2b00 cmp r3, #0
  1628. 8000d90: d001 beq.n 8000d96 <MX_CRC_Init+0x46>
  1629. {
  1630. Error_Handler();
  1631. 8000d92: f000 fb7d bl 8001490 <Error_Handler>
  1632. }
  1633. /* USER CODE BEGIN CRC_Init 2 */
  1634. /* USER CODE END CRC_Init 2 */
  1635. }
  1636. 8000d96: bf00 nop
  1637. 8000d98: bd80 pop {r7, pc}
  1638. 8000d9a: bf00 nop
  1639. 8000d9c: 240003d4 .word 0x240003d4
  1640. 8000da0: 58024c00 .word 0x58024c00
  1641. 08000da4 <MX_RNG_Init>:
  1642. * @brief RNG Initialization Function
  1643. * @param None
  1644. * @retval None
  1645. */
  1646. static void MX_RNG_Init(void)
  1647. {
  1648. 8000da4: b580 push {r7, lr}
  1649. 8000da6: af00 add r7, sp, #0
  1650. /* USER CODE END RNG_Init 0 */
  1651. /* USER CODE BEGIN RNG_Init 1 */
  1652. /* USER CODE END RNG_Init 1 */
  1653. hrng.Instance = RNG;
  1654. 8000da8: 4b07 ldr r3, [pc, #28] @ (8000dc8 <MX_RNG_Init+0x24>)
  1655. 8000daa: 4a08 ldr r2, [pc, #32] @ (8000dcc <MX_RNG_Init+0x28>)
  1656. 8000dac: 601a str r2, [r3, #0]
  1657. hrng.Init.ClockErrorDetection = RNG_CED_ENABLE;
  1658. 8000dae: 4b06 ldr r3, [pc, #24] @ (8000dc8 <MX_RNG_Init+0x24>)
  1659. 8000db0: 2200 movs r2, #0
  1660. 8000db2: 605a str r2, [r3, #4]
  1661. if (HAL_RNG_Init(&hrng) != HAL_OK)
  1662. 8000db4: 4804 ldr r0, [pc, #16] @ (8000dc8 <MX_RNG_Init+0x24>)
  1663. 8000db6: f00b f87f bl 800beb8 <HAL_RNG_Init>
  1664. 8000dba: 4603 mov r3, r0
  1665. 8000dbc: 2b00 cmp r3, #0
  1666. 8000dbe: d001 beq.n 8000dc4 <MX_RNG_Init+0x20>
  1667. {
  1668. Error_Handler();
  1669. 8000dc0: f000 fb66 bl 8001490 <Error_Handler>
  1670. }
  1671. /* USER CODE BEGIN RNG_Init 2 */
  1672. /* USER CODE END RNG_Init 2 */
  1673. }
  1674. 8000dc4: bf00 nop
  1675. 8000dc6: bd80 pop {r7, pc}
  1676. 8000dc8: 240003f8 .word 0x240003f8
  1677. 8000dcc: 48021800 .word 0x48021800
  1678. 08000dd0 <MX_TIM2_Init>:
  1679. * @brief TIM2 Initialization Function
  1680. * @param None
  1681. * @retval None
  1682. */
  1683. static void MX_TIM2_Init(void)
  1684. {
  1685. 8000dd0: b580 push {r7, lr}
  1686. 8000dd2: b088 sub sp, #32
  1687. 8000dd4: af00 add r7, sp, #0
  1688. /* USER CODE BEGIN TIM2_Init 0 */
  1689. /* USER CODE END TIM2_Init 0 */
  1690. TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  1691. 8000dd6: f107 0310 add.w r3, r7, #16
  1692. 8000dda: 2200 movs r2, #0
  1693. 8000ddc: 601a str r2, [r3, #0]
  1694. 8000dde: 605a str r2, [r3, #4]
  1695. 8000de0: 609a str r2, [r3, #8]
  1696. 8000de2: 60da str r2, [r3, #12]
  1697. TIM_MasterConfigTypeDef sMasterConfig = {0};
  1698. 8000de4: 1d3b adds r3, r7, #4
  1699. 8000de6: 2200 movs r2, #0
  1700. 8000de8: 601a str r2, [r3, #0]
  1701. 8000dea: 605a str r2, [r3, #4]
  1702. 8000dec: 609a str r2, [r3, #8]
  1703. /* USER CODE BEGIN TIM2_Init 1 */
  1704. /* USER CODE END TIM2_Init 1 */
  1705. htim2.Instance = TIM2;
  1706. 8000dee: 4b1e ldr r3, [pc, #120] @ (8000e68 <MX_TIM2_Init+0x98>)
  1707. 8000df0: f04f 4280 mov.w r2, #1073741824 @ 0x40000000
  1708. 8000df4: 601a str r2, [r3, #0]
  1709. htim2.Init.Prescaler = 0;
  1710. 8000df6: 4b1c ldr r3, [pc, #112] @ (8000e68 <MX_TIM2_Init+0x98>)
  1711. 8000df8: 2200 movs r2, #0
  1712. 8000dfa: 605a str r2, [r3, #4]
  1713. htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  1714. 8000dfc: 4b1a ldr r3, [pc, #104] @ (8000e68 <MX_TIM2_Init+0x98>)
  1715. 8000dfe: 2200 movs r2, #0
  1716. 8000e00: 609a str r2, [r3, #8]
  1717. htim2.Init.Period = 9999999;
  1718. 8000e02: 4b19 ldr r3, [pc, #100] @ (8000e68 <MX_TIM2_Init+0x98>)
  1719. 8000e04: 4a19 ldr r2, [pc, #100] @ (8000e6c <MX_TIM2_Init+0x9c>)
  1720. 8000e06: 60da str r2, [r3, #12]
  1721. htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV4;
  1722. 8000e08: 4b17 ldr r3, [pc, #92] @ (8000e68 <MX_TIM2_Init+0x98>)
  1723. 8000e0a: f44f 7200 mov.w r2, #512 @ 0x200
  1724. 8000e0e: 611a str r2, [r3, #16]
  1725. htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  1726. 8000e10: 4b15 ldr r3, [pc, #84] @ (8000e68 <MX_TIM2_Init+0x98>)
  1727. 8000e12: 2280 movs r2, #128 @ 0x80
  1728. 8000e14: 619a str r2, [r3, #24]
  1729. if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
  1730. 8000e16: 4814 ldr r0, [pc, #80] @ (8000e68 <MX_TIM2_Init+0x98>)
  1731. 8000e18: f00b f8b0 bl 800bf7c <HAL_TIM_Base_Init>
  1732. 8000e1c: 4603 mov r3, r0
  1733. 8000e1e: 2b00 cmp r3, #0
  1734. 8000e20: d001 beq.n 8000e26 <MX_TIM2_Init+0x56>
  1735. {
  1736. Error_Handler();
  1737. 8000e22: f000 fb35 bl 8001490 <Error_Handler>
  1738. }
  1739. sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  1740. 8000e26: f44f 5380 mov.w r3, #4096 @ 0x1000
  1741. 8000e2a: 613b str r3, [r7, #16]
  1742. if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
  1743. 8000e2c: f107 0310 add.w r3, r7, #16
  1744. 8000e30: 4619 mov r1, r3
  1745. 8000e32: 480d ldr r0, [pc, #52] @ (8000e68 <MX_TIM2_Init+0x98>)
  1746. 8000e34: f00b faea bl 800c40c <HAL_TIM_ConfigClockSource>
  1747. 8000e38: 4603 mov r3, r0
  1748. 8000e3a: 2b00 cmp r3, #0
  1749. 8000e3c: d001 beq.n 8000e42 <MX_TIM2_Init+0x72>
  1750. {
  1751. Error_Handler();
  1752. 8000e3e: f000 fb27 bl 8001490 <Error_Handler>
  1753. }
  1754. sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;
  1755. 8000e42: 2320 movs r3, #32
  1756. 8000e44: 607b str r3, [r7, #4]
  1757. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_ENABLE;
  1758. 8000e46: 2380 movs r3, #128 @ 0x80
  1759. 8000e48: 60fb str r3, [r7, #12]
  1760. if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
  1761. 8000e4a: 1d3b adds r3, r7, #4
  1762. 8000e4c: 4619 mov r1, r3
  1763. 8000e4e: 4806 ldr r0, [pc, #24] @ (8000e68 <MX_TIM2_Init+0x98>)
  1764. 8000e50: f00b fd40 bl 800c8d4 <HAL_TIMEx_MasterConfigSynchronization>
  1765. 8000e54: 4603 mov r3, r0
  1766. 8000e56: 2b00 cmp r3, #0
  1767. 8000e58: d001 beq.n 8000e5e <MX_TIM2_Init+0x8e>
  1768. {
  1769. Error_Handler();
  1770. 8000e5a: f000 fb19 bl 8001490 <Error_Handler>
  1771. }
  1772. /* USER CODE BEGIN TIM2_Init 2 */
  1773. /* USER CODE END TIM2_Init 2 */
  1774. }
  1775. 8000e5e: bf00 nop
  1776. 8000e60: 3720 adds r7, #32
  1777. 8000e62: 46bd mov sp, r7
  1778. 8000e64: bd80 pop {r7, pc}
  1779. 8000e66: bf00 nop
  1780. 8000e68: 2400040c .word 0x2400040c
  1781. 8000e6c: 0098967f .word 0x0098967f
  1782. 08000e70 <MX_UART8_Init>:
  1783. * @brief UART8 Initialization Function
  1784. * @param None
  1785. * @retval None
  1786. */
  1787. static void MX_UART8_Init(void)
  1788. {
  1789. 8000e70: b580 push {r7, lr}
  1790. 8000e72: af00 add r7, sp, #0
  1791. /* USER CODE END UART8_Init 0 */
  1792. /* USER CODE BEGIN UART8_Init 1 */
  1793. /* USER CODE END UART8_Init 1 */
  1794. huart8.Instance = UART8;
  1795. 8000e74: 4b22 ldr r3, [pc, #136] @ (8000f00 <MX_UART8_Init+0x90>)
  1796. 8000e76: 4a23 ldr r2, [pc, #140] @ (8000f04 <MX_UART8_Init+0x94>)
  1797. 8000e78: 601a str r2, [r3, #0]
  1798. huart8.Init.BaudRate = 115200;
  1799. 8000e7a: 4b21 ldr r3, [pc, #132] @ (8000f00 <MX_UART8_Init+0x90>)
  1800. 8000e7c: f44f 32e1 mov.w r2, #115200 @ 0x1c200
  1801. 8000e80: 605a str r2, [r3, #4]
  1802. huart8.Init.WordLength = UART_WORDLENGTH_8B;
  1803. 8000e82: 4b1f ldr r3, [pc, #124] @ (8000f00 <MX_UART8_Init+0x90>)
  1804. 8000e84: 2200 movs r2, #0
  1805. 8000e86: 609a str r2, [r3, #8]
  1806. huart8.Init.StopBits = UART_STOPBITS_1;
  1807. 8000e88: 4b1d ldr r3, [pc, #116] @ (8000f00 <MX_UART8_Init+0x90>)
  1808. 8000e8a: 2200 movs r2, #0
  1809. 8000e8c: 60da str r2, [r3, #12]
  1810. huart8.Init.Parity = UART_PARITY_NONE;
  1811. 8000e8e: 4b1c ldr r3, [pc, #112] @ (8000f00 <MX_UART8_Init+0x90>)
  1812. 8000e90: 2200 movs r2, #0
  1813. 8000e92: 611a str r2, [r3, #16]
  1814. huart8.Init.Mode = UART_MODE_TX_RX;
  1815. 8000e94: 4b1a ldr r3, [pc, #104] @ (8000f00 <MX_UART8_Init+0x90>)
  1816. 8000e96: 220c movs r2, #12
  1817. 8000e98: 615a str r2, [r3, #20]
  1818. huart8.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  1819. 8000e9a: 4b19 ldr r3, [pc, #100] @ (8000f00 <MX_UART8_Init+0x90>)
  1820. 8000e9c: 2200 movs r2, #0
  1821. 8000e9e: 619a str r2, [r3, #24]
  1822. huart8.Init.OverSampling = UART_OVERSAMPLING_16;
  1823. 8000ea0: 4b17 ldr r3, [pc, #92] @ (8000f00 <MX_UART8_Init+0x90>)
  1824. 8000ea2: 2200 movs r2, #0
  1825. 8000ea4: 61da str r2, [r3, #28]
  1826. huart8.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  1827. 8000ea6: 4b16 ldr r3, [pc, #88] @ (8000f00 <MX_UART8_Init+0x90>)
  1828. 8000ea8: 2200 movs r2, #0
  1829. 8000eaa: 621a str r2, [r3, #32]
  1830. huart8.Init.ClockPrescaler = UART_PRESCALER_DIV1;
  1831. 8000eac: 4b14 ldr r3, [pc, #80] @ (8000f00 <MX_UART8_Init+0x90>)
  1832. 8000eae: 2200 movs r2, #0
  1833. 8000eb0: 625a str r2, [r3, #36] @ 0x24
  1834. huart8.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  1835. 8000eb2: 4b13 ldr r3, [pc, #76] @ (8000f00 <MX_UART8_Init+0x90>)
  1836. 8000eb4: 2200 movs r2, #0
  1837. 8000eb6: 629a str r2, [r3, #40] @ 0x28
  1838. if (HAL_UART_Init(&huart8) != HAL_OK)
  1839. 8000eb8: 4811 ldr r0, [pc, #68] @ (8000f00 <MX_UART8_Init+0x90>)
  1840. 8000eba: f00b fdb7 bl 800ca2c <HAL_UART_Init>
  1841. 8000ebe: 4603 mov r3, r0
  1842. 8000ec0: 2b00 cmp r3, #0
  1843. 8000ec2: d001 beq.n 8000ec8 <MX_UART8_Init+0x58>
  1844. {
  1845. Error_Handler();
  1846. 8000ec4: f000 fae4 bl 8001490 <Error_Handler>
  1847. }
  1848. if (HAL_UARTEx_SetTxFifoThreshold(&huart8, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
  1849. 8000ec8: 2100 movs r1, #0
  1850. 8000eca: 480d ldr r0, [pc, #52] @ (8000f00 <MX_UART8_Init+0x90>)
  1851. 8000ecc: f00e fa57 bl 800f37e <HAL_UARTEx_SetTxFifoThreshold>
  1852. 8000ed0: 4603 mov r3, r0
  1853. 8000ed2: 2b00 cmp r3, #0
  1854. 8000ed4: d001 beq.n 8000eda <MX_UART8_Init+0x6a>
  1855. {
  1856. Error_Handler();
  1857. 8000ed6: f000 fadb bl 8001490 <Error_Handler>
  1858. }
  1859. if (HAL_UARTEx_SetRxFifoThreshold(&huart8, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
  1860. 8000eda: 2100 movs r1, #0
  1861. 8000edc: 4808 ldr r0, [pc, #32] @ (8000f00 <MX_UART8_Init+0x90>)
  1862. 8000ede: f00e fa8c bl 800f3fa <HAL_UARTEx_SetRxFifoThreshold>
  1863. 8000ee2: 4603 mov r3, r0
  1864. 8000ee4: 2b00 cmp r3, #0
  1865. 8000ee6: d001 beq.n 8000eec <MX_UART8_Init+0x7c>
  1866. {
  1867. Error_Handler();
  1868. 8000ee8: f000 fad2 bl 8001490 <Error_Handler>
  1869. }
  1870. if (HAL_UARTEx_DisableFifoMode(&huart8) != HAL_OK)
  1871. 8000eec: 4804 ldr r0, [pc, #16] @ (8000f00 <MX_UART8_Init+0x90>)
  1872. 8000eee: f00e fa0d bl 800f30c <HAL_UARTEx_DisableFifoMode>
  1873. 8000ef2: 4603 mov r3, r0
  1874. 8000ef4: 2b00 cmp r3, #0
  1875. 8000ef6: d001 beq.n 8000efc <MX_UART8_Init+0x8c>
  1876. {
  1877. Error_Handler();
  1878. 8000ef8: f000 faca bl 8001490 <Error_Handler>
  1879. }
  1880. /* USER CODE BEGIN UART8_Init 2 */
  1881. /* USER CODE END UART8_Init 2 */
  1882. }
  1883. 8000efc: bf00 nop
  1884. 8000efe: bd80 pop {r7, pc}
  1885. 8000f00: 24000458 .word 0x24000458
  1886. 8000f04: 40007c00 .word 0x40007c00
  1887. 08000f08 <MX_USART1_UART_Init>:
  1888. * @brief USART1 Initialization Function
  1889. * @param None
  1890. * @retval None
  1891. */
  1892. static void MX_USART1_UART_Init(void)
  1893. {
  1894. 8000f08: b580 push {r7, lr}
  1895. 8000f0a: af00 add r7, sp, #0
  1896. /* USER CODE END USART1_Init 0 */
  1897. /* USER CODE BEGIN USART1_Init 1 */
  1898. /* USER CODE END USART1_Init 1 */
  1899. huart1.Instance = USART1;
  1900. 8000f0c: 4b24 ldr r3, [pc, #144] @ (8000fa0 <MX_USART1_UART_Init+0x98>)
  1901. 8000f0e: 4a25 ldr r2, [pc, #148] @ (8000fa4 <MX_USART1_UART_Init+0x9c>)
  1902. 8000f10: 601a str r2, [r3, #0]
  1903. huart1.Init.BaudRate = 115200;
  1904. 8000f12: 4b23 ldr r3, [pc, #140] @ (8000fa0 <MX_USART1_UART_Init+0x98>)
  1905. 8000f14: f44f 32e1 mov.w r2, #115200 @ 0x1c200
  1906. 8000f18: 605a str r2, [r3, #4]
  1907. huart1.Init.WordLength = UART_WORDLENGTH_8B;
  1908. 8000f1a: 4b21 ldr r3, [pc, #132] @ (8000fa0 <MX_USART1_UART_Init+0x98>)
  1909. 8000f1c: 2200 movs r2, #0
  1910. 8000f1e: 609a str r2, [r3, #8]
  1911. huart1.Init.StopBits = UART_STOPBITS_1;
  1912. 8000f20: 4b1f ldr r3, [pc, #124] @ (8000fa0 <MX_USART1_UART_Init+0x98>)
  1913. 8000f22: 2200 movs r2, #0
  1914. 8000f24: 60da str r2, [r3, #12]
  1915. huart1.Init.Parity = UART_PARITY_NONE;
  1916. 8000f26: 4b1e ldr r3, [pc, #120] @ (8000fa0 <MX_USART1_UART_Init+0x98>)
  1917. 8000f28: 2200 movs r2, #0
  1918. 8000f2a: 611a str r2, [r3, #16]
  1919. huart1.Init.Mode = UART_MODE_TX_RX;
  1920. 8000f2c: 4b1c ldr r3, [pc, #112] @ (8000fa0 <MX_USART1_UART_Init+0x98>)
  1921. 8000f2e: 220c movs r2, #12
  1922. 8000f30: 615a str r2, [r3, #20]
  1923. huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  1924. 8000f32: 4b1b ldr r3, [pc, #108] @ (8000fa0 <MX_USART1_UART_Init+0x98>)
  1925. 8000f34: 2200 movs r2, #0
  1926. 8000f36: 619a str r2, [r3, #24]
  1927. huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  1928. 8000f38: 4b19 ldr r3, [pc, #100] @ (8000fa0 <MX_USART1_UART_Init+0x98>)
  1929. 8000f3a: 2200 movs r2, #0
  1930. 8000f3c: 61da str r2, [r3, #28]
  1931. huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  1932. 8000f3e: 4b18 ldr r3, [pc, #96] @ (8000fa0 <MX_USART1_UART_Init+0x98>)
  1933. 8000f40: 2200 movs r2, #0
  1934. 8000f42: 621a str r2, [r3, #32]
  1935. huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
  1936. 8000f44: 4b16 ldr r3, [pc, #88] @ (8000fa0 <MX_USART1_UART_Init+0x98>)
  1937. 8000f46: 2200 movs r2, #0
  1938. 8000f48: 625a str r2, [r3, #36] @ 0x24
  1939. huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_RXINVERT_INIT;
  1940. 8000f4a: 4b15 ldr r3, [pc, #84] @ (8000fa0 <MX_USART1_UART_Init+0x98>)
  1941. 8000f4c: 2202 movs r2, #2
  1942. 8000f4e: 629a str r2, [r3, #40] @ 0x28
  1943. huart1.AdvancedInit.RxPinLevelInvert = UART_ADVFEATURE_RXINV_ENABLE;
  1944. 8000f50: 4b13 ldr r3, [pc, #76] @ (8000fa0 <MX_USART1_UART_Init+0x98>)
  1945. 8000f52: f44f 3280 mov.w r2, #65536 @ 0x10000
  1946. 8000f56: 631a str r2, [r3, #48] @ 0x30
  1947. if (HAL_UART_Init(&huart1) != HAL_OK)
  1948. 8000f58: 4811 ldr r0, [pc, #68] @ (8000fa0 <MX_USART1_UART_Init+0x98>)
  1949. 8000f5a: f00b fd67 bl 800ca2c <HAL_UART_Init>
  1950. 8000f5e: 4603 mov r3, r0
  1951. 8000f60: 2b00 cmp r3, #0
  1952. 8000f62: d001 beq.n 8000f68 <MX_USART1_UART_Init+0x60>
  1953. {
  1954. Error_Handler();
  1955. 8000f64: f000 fa94 bl 8001490 <Error_Handler>
  1956. }
  1957. if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
  1958. 8000f68: 2100 movs r1, #0
  1959. 8000f6a: 480d ldr r0, [pc, #52] @ (8000fa0 <MX_USART1_UART_Init+0x98>)
  1960. 8000f6c: f00e fa07 bl 800f37e <HAL_UARTEx_SetTxFifoThreshold>
  1961. 8000f70: 4603 mov r3, r0
  1962. 8000f72: 2b00 cmp r3, #0
  1963. 8000f74: d001 beq.n 8000f7a <MX_USART1_UART_Init+0x72>
  1964. {
  1965. Error_Handler();
  1966. 8000f76: f000 fa8b bl 8001490 <Error_Handler>
  1967. }
  1968. if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
  1969. 8000f7a: 2100 movs r1, #0
  1970. 8000f7c: 4808 ldr r0, [pc, #32] @ (8000fa0 <MX_USART1_UART_Init+0x98>)
  1971. 8000f7e: f00e fa3c bl 800f3fa <HAL_UARTEx_SetRxFifoThreshold>
  1972. 8000f82: 4603 mov r3, r0
  1973. 8000f84: 2b00 cmp r3, #0
  1974. 8000f86: d001 beq.n 8000f8c <MX_USART1_UART_Init+0x84>
  1975. {
  1976. Error_Handler();
  1977. 8000f88: f000 fa82 bl 8001490 <Error_Handler>
  1978. }
  1979. if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
  1980. 8000f8c: 4804 ldr r0, [pc, #16] @ (8000fa0 <MX_USART1_UART_Init+0x98>)
  1981. 8000f8e: f00e f9bd bl 800f30c <HAL_UARTEx_DisableFifoMode>
  1982. 8000f92: 4603 mov r3, r0
  1983. 8000f94: 2b00 cmp r3, #0
  1984. 8000f96: d001 beq.n 8000f9c <MX_USART1_UART_Init+0x94>
  1985. {
  1986. Error_Handler();
  1987. 8000f98: f000 fa7a bl 8001490 <Error_Handler>
  1988. }
  1989. /* USER CODE BEGIN USART1_Init 2 */
  1990. /* USER CODE END USART1_Init 2 */
  1991. }
  1992. 8000f9c: bf00 nop
  1993. 8000f9e: bd80 pop {r7, pc}
  1994. 8000fa0: 240004ec .word 0x240004ec
  1995. 8000fa4: 40011000 .word 0x40011000
  1996. 08000fa8 <MX_DMA_Init>:
  1997. /**
  1998. * Enable DMA controller clock
  1999. */
  2000. static void MX_DMA_Init(void)
  2001. {
  2002. 8000fa8: b580 push {r7, lr}
  2003. 8000faa: b082 sub sp, #8
  2004. 8000fac: af00 add r7, sp, #0
  2005. /* DMA controller clock enable */
  2006. __HAL_RCC_DMA1_CLK_ENABLE();
  2007. 8000fae: 4b15 ldr r3, [pc, #84] @ (8001004 <MX_DMA_Init+0x5c>)
  2008. 8000fb0: f8d3 30d8 ldr.w r3, [r3, #216] @ 0xd8
  2009. 8000fb4: 4a13 ldr r2, [pc, #76] @ (8001004 <MX_DMA_Init+0x5c>)
  2010. 8000fb6: f043 0301 orr.w r3, r3, #1
  2011. 8000fba: f8c2 30d8 str.w r3, [r2, #216] @ 0xd8
  2012. 8000fbe: 4b11 ldr r3, [pc, #68] @ (8001004 <MX_DMA_Init+0x5c>)
  2013. 8000fc0: f8d3 30d8 ldr.w r3, [r3, #216] @ 0xd8
  2014. 8000fc4: f003 0301 and.w r3, r3, #1
  2015. 8000fc8: 607b str r3, [r7, #4]
  2016. 8000fca: 687b ldr r3, [r7, #4]
  2017. /* DMA interrupt init */
  2018. /* DMA1_Stream0_IRQn interrupt configuration */
  2019. HAL_NVIC_SetPriority(DMA1_Stream0_IRQn, 5, 0);
  2020. 8000fcc: 2200 movs r2, #0
  2021. 8000fce: 2105 movs r1, #5
  2022. 8000fd0: 200b movs r0, #11
  2023. 8000fd2: f003 ff67 bl 8004ea4 <HAL_NVIC_SetPriority>
  2024. HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn);
  2025. 8000fd6: 200b movs r0, #11
  2026. 8000fd8: f003 ff7e bl 8004ed8 <HAL_NVIC_EnableIRQ>
  2027. /* DMA1_Stream1_IRQn interrupt configuration */
  2028. HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 5, 0);
  2029. 8000fdc: 2200 movs r2, #0
  2030. 8000fde: 2105 movs r1, #5
  2031. 8000fe0: 200c movs r0, #12
  2032. 8000fe2: f003 ff5f bl 8004ea4 <HAL_NVIC_SetPriority>
  2033. HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn);
  2034. 8000fe6: 200c movs r0, #12
  2035. 8000fe8: f003 ff76 bl 8004ed8 <HAL_NVIC_EnableIRQ>
  2036. /* DMA1_Stream2_IRQn interrupt configuration */
  2037. HAL_NVIC_SetPriority(DMA1_Stream2_IRQn, 5, 0);
  2038. 8000fec: 2200 movs r2, #0
  2039. 8000fee: 2105 movs r1, #5
  2040. 8000ff0: 200d movs r0, #13
  2041. 8000ff2: f003 ff57 bl 8004ea4 <HAL_NVIC_SetPriority>
  2042. HAL_NVIC_EnableIRQ(DMA1_Stream2_IRQn);
  2043. 8000ff6: 200d movs r0, #13
  2044. 8000ff8: f003 ff6e bl 8004ed8 <HAL_NVIC_EnableIRQ>
  2045. }
  2046. 8000ffc: bf00 nop
  2047. 8000ffe: 3708 adds r7, #8
  2048. 8001000: 46bd mov sp, r7
  2049. 8001002: bd80 pop {r7, pc}
  2050. 8001004: 58024400 .word 0x58024400
  2051. 08001008 <MX_GPIO_Init>:
  2052. * @brief GPIO Initialization Function
  2053. * @param None
  2054. * @retval None
  2055. */
  2056. static void MX_GPIO_Init(void)
  2057. {
  2058. 8001008: b580 push {r7, lr}
  2059. 800100a: b08c sub sp, #48 @ 0x30
  2060. 800100c: af00 add r7, sp, #0
  2061. GPIO_InitTypeDef GPIO_InitStruct = {0};
  2062. 800100e: f107 031c add.w r3, r7, #28
  2063. 8001012: 2200 movs r2, #0
  2064. 8001014: 601a str r2, [r3, #0]
  2065. 8001016: 605a str r2, [r3, #4]
  2066. 8001018: 609a str r2, [r3, #8]
  2067. 800101a: 60da str r2, [r3, #12]
  2068. 800101c: 611a str r2, [r3, #16]
  2069. /* USER CODE BEGIN MX_GPIO_Init_1 */
  2070. /* USER CODE END MX_GPIO_Init_1 */
  2071. /* GPIO Ports Clock Enable */
  2072. __HAL_RCC_GPIOH_CLK_ENABLE();
  2073. 800101e: 4b49 ldr r3, [pc, #292] @ (8001144 <MX_GPIO_Init+0x13c>)
  2074. 8001020: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2075. 8001024: 4a47 ldr r2, [pc, #284] @ (8001144 <MX_GPIO_Init+0x13c>)
  2076. 8001026: f043 0380 orr.w r3, r3, #128 @ 0x80
  2077. 800102a: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  2078. 800102e: 4b45 ldr r3, [pc, #276] @ (8001144 <MX_GPIO_Init+0x13c>)
  2079. 8001030: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2080. 8001034: f003 0380 and.w r3, r3, #128 @ 0x80
  2081. 8001038: 61bb str r3, [r7, #24]
  2082. 800103a: 69bb ldr r3, [r7, #24]
  2083. __HAL_RCC_GPIOC_CLK_ENABLE();
  2084. 800103c: 4b41 ldr r3, [pc, #260] @ (8001144 <MX_GPIO_Init+0x13c>)
  2085. 800103e: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2086. 8001042: 4a40 ldr r2, [pc, #256] @ (8001144 <MX_GPIO_Init+0x13c>)
  2087. 8001044: f043 0304 orr.w r3, r3, #4
  2088. 8001048: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  2089. 800104c: 4b3d ldr r3, [pc, #244] @ (8001144 <MX_GPIO_Init+0x13c>)
  2090. 800104e: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2091. 8001052: f003 0304 and.w r3, r3, #4
  2092. 8001056: 617b str r3, [r7, #20]
  2093. 8001058: 697b ldr r3, [r7, #20]
  2094. __HAL_RCC_GPIOA_CLK_ENABLE();
  2095. 800105a: 4b3a ldr r3, [pc, #232] @ (8001144 <MX_GPIO_Init+0x13c>)
  2096. 800105c: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2097. 8001060: 4a38 ldr r2, [pc, #224] @ (8001144 <MX_GPIO_Init+0x13c>)
  2098. 8001062: f043 0301 orr.w r3, r3, #1
  2099. 8001066: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  2100. 800106a: 4b36 ldr r3, [pc, #216] @ (8001144 <MX_GPIO_Init+0x13c>)
  2101. 800106c: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2102. 8001070: f003 0301 and.w r3, r3, #1
  2103. 8001074: 613b str r3, [r7, #16]
  2104. 8001076: 693b ldr r3, [r7, #16]
  2105. __HAL_RCC_GPIOB_CLK_ENABLE();
  2106. 8001078: 4b32 ldr r3, [pc, #200] @ (8001144 <MX_GPIO_Init+0x13c>)
  2107. 800107a: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2108. 800107e: 4a31 ldr r2, [pc, #196] @ (8001144 <MX_GPIO_Init+0x13c>)
  2109. 8001080: f043 0302 orr.w r3, r3, #2
  2110. 8001084: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  2111. 8001088: 4b2e ldr r3, [pc, #184] @ (8001144 <MX_GPIO_Init+0x13c>)
  2112. 800108a: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2113. 800108e: f003 0302 and.w r3, r3, #2
  2114. 8001092: 60fb str r3, [r7, #12]
  2115. 8001094: 68fb ldr r3, [r7, #12]
  2116. __HAL_RCC_GPIOE_CLK_ENABLE();
  2117. 8001096: 4b2b ldr r3, [pc, #172] @ (8001144 <MX_GPIO_Init+0x13c>)
  2118. 8001098: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2119. 800109c: 4a29 ldr r2, [pc, #164] @ (8001144 <MX_GPIO_Init+0x13c>)
  2120. 800109e: f043 0310 orr.w r3, r3, #16
  2121. 80010a2: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  2122. 80010a6: 4b27 ldr r3, [pc, #156] @ (8001144 <MX_GPIO_Init+0x13c>)
  2123. 80010a8: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2124. 80010ac: f003 0310 and.w r3, r3, #16
  2125. 80010b0: 60bb str r3, [r7, #8]
  2126. 80010b2: 68bb ldr r3, [r7, #8]
  2127. __HAL_RCC_GPIOD_CLK_ENABLE();
  2128. 80010b4: 4b23 ldr r3, [pc, #140] @ (8001144 <MX_GPIO_Init+0x13c>)
  2129. 80010b6: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2130. 80010ba: 4a22 ldr r2, [pc, #136] @ (8001144 <MX_GPIO_Init+0x13c>)
  2131. 80010bc: f043 0308 orr.w r3, r3, #8
  2132. 80010c0: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  2133. 80010c4: 4b1f ldr r3, [pc, #124] @ (8001144 <MX_GPIO_Init+0x13c>)
  2134. 80010c6: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  2135. 80010ca: f003 0308 and.w r3, r3, #8
  2136. 80010ce: 607b str r3, [r7, #4]
  2137. 80010d0: 687b ldr r3, [r7, #4]
  2138. /*Configure GPIO pin Output Level */
  2139. HAL_GPIO_WritePin(GPIOE, GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10
  2140. 80010d2: 2200 movs r2, #0
  2141. 80010d4: f24e 7180 movw r1, #59264 @ 0xe780
  2142. 80010d8: 481b ldr r0, [pc, #108] @ (8001148 <MX_GPIO_Init+0x140>)
  2143. 80010da: f007 f975 bl 80083c8 <HAL_GPIO_WritePin>
  2144. |GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15, GPIO_PIN_RESET);
  2145. /*Configure GPIO pin Output Level */
  2146. HAL_GPIO_WritePin(GPIOD, GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7, GPIO_PIN_RESET);
  2147. 80010de: 2200 movs r2, #0
  2148. 80010e0: 21f0 movs r1, #240 @ 0xf0
  2149. 80010e2: 481a ldr r0, [pc, #104] @ (800114c <MX_GPIO_Init+0x144>)
  2150. 80010e4: f007 f970 bl 80083c8 <HAL_GPIO_WritePin>
  2151. /*Configure GPIO pins : PE7 PE8 PE9 PE10
  2152. PE13 PE14 PE15 */
  2153. GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10
  2154. 80010e8: f24e 7380 movw r3, #59264 @ 0xe780
  2155. 80010ec: 61fb str r3, [r7, #28]
  2156. |GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
  2157. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  2158. 80010ee: 2301 movs r3, #1
  2159. 80010f0: 623b str r3, [r7, #32]
  2160. GPIO_InitStruct.Pull = GPIO_NOPULL;
  2161. 80010f2: 2300 movs r3, #0
  2162. 80010f4: 627b str r3, [r7, #36] @ 0x24
  2163. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  2164. 80010f6: 2300 movs r3, #0
  2165. 80010f8: 62bb str r3, [r7, #40] @ 0x28
  2166. HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
  2167. 80010fa: f107 031c add.w r3, r7, #28
  2168. 80010fe: 4619 mov r1, r3
  2169. 8001100: 4811 ldr r0, [pc, #68] @ (8001148 <MX_GPIO_Init+0x140>)
  2170. 8001102: f006 ffb1 bl 8008068 <HAL_GPIO_Init>
  2171. /*Configure GPIO pin : PD3 */
  2172. GPIO_InitStruct.Pin = GPIO_PIN_3;
  2173. 8001106: 2308 movs r3, #8
  2174. 8001108: 61fb str r3, [r7, #28]
  2175. GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  2176. 800110a: 2300 movs r3, #0
  2177. 800110c: 623b str r3, [r7, #32]
  2178. GPIO_InitStruct.Pull = GPIO_NOPULL;
  2179. 800110e: 2300 movs r3, #0
  2180. 8001110: 627b str r3, [r7, #36] @ 0x24
  2181. HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
  2182. 8001112: f107 031c add.w r3, r7, #28
  2183. 8001116: 4619 mov r1, r3
  2184. 8001118: 480c ldr r0, [pc, #48] @ (800114c <MX_GPIO_Init+0x144>)
  2185. 800111a: f006 ffa5 bl 8008068 <HAL_GPIO_Init>
  2186. /*Configure GPIO pins : PD4 PD5 PD6 PD7 */
  2187. GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
  2188. 800111e: 23f0 movs r3, #240 @ 0xf0
  2189. 8001120: 61fb str r3, [r7, #28]
  2190. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  2191. 8001122: 2301 movs r3, #1
  2192. 8001124: 623b str r3, [r7, #32]
  2193. GPIO_InitStruct.Pull = GPIO_NOPULL;
  2194. 8001126: 2300 movs r3, #0
  2195. 8001128: 627b str r3, [r7, #36] @ 0x24
  2196. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  2197. 800112a: 2300 movs r3, #0
  2198. 800112c: 62bb str r3, [r7, #40] @ 0x28
  2199. HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
  2200. 800112e: f107 031c add.w r3, r7, #28
  2201. 8001132: 4619 mov r1, r3
  2202. 8001134: 4805 ldr r0, [pc, #20] @ (800114c <MX_GPIO_Init+0x144>)
  2203. 8001136: f006 ff97 bl 8008068 <HAL_GPIO_Init>
  2204. /* USER CODE BEGIN MX_GPIO_Init_2 */
  2205. /* USER CODE END MX_GPIO_Init_2 */
  2206. }
  2207. 800113a: bf00 nop
  2208. 800113c: 3730 adds r7, #48 @ 0x30
  2209. 800113e: 46bd mov sp, r7
  2210. 8001140: bd80 pop {r7, pc}
  2211. 8001142: bf00 nop
  2212. 8001144: 58024400 .word 0x58024400
  2213. 8001148: 58021000 .word 0x58021000
  2214. 800114c: 58020c00 .word 0x58020c00
  2215. 08001150 <HAL_ADC_ConvCpltCallback>:
  2216. /* USER CODE BEGIN 4 */
  2217. void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)
  2218. {
  2219. 8001150: b580 push {r7, lr}
  2220. 8001152: b08e sub sp, #56 @ 0x38
  2221. 8001154: af00 add r7, sp, #0
  2222. 8001156: 6078 str r0, [r7, #4]
  2223. if(hadc->Instance == ADC1)
  2224. 8001158: 687b ldr r3, [r7, #4]
  2225. 800115a: 681b ldr r3, [r3, #0]
  2226. 800115c: 4a65 ldr r2, [pc, #404] @ (80012f4 <HAL_ADC_ConvCpltCallback+0x1a4>)
  2227. 800115e: 4293 cmp r3, r2
  2228. 8001160: d13f bne.n 80011e2 <HAL_ADC_ConvCpltCallback+0x92>
  2229. {
  2230. DbgLEDToggle(DBG_LED4);
  2231. 8001162: 2080 movs r0, #128 @ 0x80
  2232. 8001164: f000 fd62 bl 8001c2c <DbgLEDToggle>
  2233. SCB_InvalidateDCache_by_Addr((uint32_t*)(((uint32_t)adc1Data.adcDataBuffer) & ~(uint32_t)0x1F), __SCB_DCACHE_LINE_SIZE);
  2234. 8001168: 4b63 ldr r3, [pc, #396] @ (80012f8 <HAL_ADC_ConvCpltCallback+0x1a8>)
  2235. 800116a: f023 031f bic.w r3, r3, #31
  2236. 800116e: 637b str r3, [r7, #52] @ 0x34
  2237. 8001170: 2320 movs r3, #32
  2238. 8001172: 633b str r3, [r7, #48] @ 0x30
  2239. \param[in] dsize size of memory block (in number of bytes)
  2240. */
  2241. __STATIC_FORCEINLINE void SCB_InvalidateDCache_by_Addr (void *addr, int32_t dsize)
  2242. {
  2243. #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)
  2244. if ( dsize > 0 ) {
  2245. 8001174: 6b3b ldr r3, [r7, #48] @ 0x30
  2246. 8001176: 2b00 cmp r3, #0
  2247. 8001178: dd1d ble.n 80011b6 <HAL_ADC_ConvCpltCallback+0x66>
  2248. int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U));
  2249. 800117a: 6b7b ldr r3, [r7, #52] @ 0x34
  2250. 800117c: f003 021f and.w r2, r3, #31
  2251. 8001180: 6b3b ldr r3, [r7, #48] @ 0x30
  2252. 8001182: 4413 add r3, r2
  2253. 8001184: 62fb str r3, [r7, #44] @ 0x2c
  2254. uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */;
  2255. 8001186: 6b7b ldr r3, [r7, #52] @ 0x34
  2256. 8001188: 62bb str r3, [r7, #40] @ 0x28
  2257. __ASM volatile ("dsb 0xF":::"memory");
  2258. 800118a: f3bf 8f4f dsb sy
  2259. }
  2260. 800118e: bf00 nop
  2261. __DSB();
  2262. do {
  2263. SCB->DCIMVAC = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */
  2264. 8001190: 4a5a ldr r2, [pc, #360] @ (80012fc <HAL_ADC_ConvCpltCallback+0x1ac>)
  2265. 8001192: 6abb ldr r3, [r7, #40] @ 0x28
  2266. 8001194: f8c2 325c str.w r3, [r2, #604] @ 0x25c
  2267. op_addr += __SCB_DCACHE_LINE_SIZE;
  2268. 8001198: 6abb ldr r3, [r7, #40] @ 0x28
  2269. 800119a: 3320 adds r3, #32
  2270. 800119c: 62bb str r3, [r7, #40] @ 0x28
  2271. op_size -= __SCB_DCACHE_LINE_SIZE;
  2272. 800119e: 6afb ldr r3, [r7, #44] @ 0x2c
  2273. 80011a0: 3b20 subs r3, #32
  2274. 80011a2: 62fb str r3, [r7, #44] @ 0x2c
  2275. } while ( op_size > 0 );
  2276. 80011a4: 6afb ldr r3, [r7, #44] @ 0x2c
  2277. 80011a6: 2b00 cmp r3, #0
  2278. 80011a8: dcf2 bgt.n 8001190 <HAL_ADC_ConvCpltCallback+0x40>
  2279. __ASM volatile ("dsb 0xF":::"memory");
  2280. 80011aa: f3bf 8f4f dsb sy
  2281. }
  2282. 80011ae: bf00 nop
  2283. __ASM volatile ("isb 0xF":::"memory");
  2284. 80011b0: f3bf 8f6f isb sy
  2285. }
  2286. 80011b4: bf00 nop
  2287. __DSB();
  2288. __ISB();
  2289. }
  2290. #endif
  2291. }
  2292. 80011b6: bf00 nop
  2293. if(adc1MeasDataQueue != NULL)
  2294. 80011b8: 4b51 ldr r3, [pc, #324] @ (8001300 <HAL_ADC_ConvCpltCallback+0x1b0>)
  2295. 80011ba: 681b ldr r3, [r3, #0]
  2296. 80011bc: 2b00 cmp r3, #0
  2297. 80011be: d006 beq.n 80011ce <HAL_ADC_ConvCpltCallback+0x7e>
  2298. {
  2299. osMessageQueuePut(adc1MeasDataQueue, &adc1Data, 0, 0);
  2300. 80011c0: 4b4f ldr r3, [pc, #316] @ (8001300 <HAL_ADC_ConvCpltCallback+0x1b0>)
  2301. 80011c2: 6818 ldr r0, [r3, #0]
  2302. 80011c4: 2300 movs r3, #0
  2303. 80011c6: 2200 movs r2, #0
  2304. 80011c8: 494b ldr r1, [pc, #300] @ (80012f8 <HAL_ADC_ConvCpltCallback+0x1a8>)
  2305. 80011ca: f00e fcb1 bl 800fb30 <osMessageQueuePut>
  2306. }
  2307. if(HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc1Data.adcDataBuffer, ADC1LastData) != HAL_OK)
  2308. 80011ce: 2206 movs r2, #6
  2309. 80011d0: 4949 ldr r1, [pc, #292] @ (80012f8 <HAL_ADC_ConvCpltCallback+0x1a8>)
  2310. 80011d2: 484c ldr r0, [pc, #304] @ (8001304 <HAL_ADC_ConvCpltCallback+0x1b4>)
  2311. 80011d4: f002 fd54 bl 8003c80 <HAL_ADC_Start_DMA>
  2312. 80011d8: 4603 mov r3, r0
  2313. 80011da: 2b00 cmp r3, #0
  2314. 80011dc: d001 beq.n 80011e2 <HAL_ADC_ConvCpltCallback+0x92>
  2315. {
  2316. Error_Handler();
  2317. 80011de: f000 f957 bl 8001490 <Error_Handler>
  2318. }
  2319. }
  2320. if(hadc->Instance == ADC2)
  2321. 80011e2: 687b ldr r3, [r7, #4]
  2322. 80011e4: 681b ldr r3, [r3, #0]
  2323. 80011e6: 4a48 ldr r2, [pc, #288] @ (8001308 <HAL_ADC_ConvCpltCallback+0x1b8>)
  2324. 80011e8: 4293 cmp r3, r2
  2325. 80011ea: d13c bne.n 8001266 <HAL_ADC_ConvCpltCallback+0x116>
  2326. {
  2327. SCB_InvalidateDCache_by_Addr((uint32_t*)(((uint32_t)adc2Data.adcDataBuffer) & ~(uint32_t)0x1F), __SCB_DCACHE_LINE_SIZE);
  2328. 80011ec: 4b47 ldr r3, [pc, #284] @ (800130c <HAL_ADC_ConvCpltCallback+0x1bc>)
  2329. 80011ee: f023 031f bic.w r3, r3, #31
  2330. 80011f2: 627b str r3, [r7, #36] @ 0x24
  2331. 80011f4: 2320 movs r3, #32
  2332. 80011f6: 623b str r3, [r7, #32]
  2333. if ( dsize > 0 ) {
  2334. 80011f8: 6a3b ldr r3, [r7, #32]
  2335. 80011fa: 2b00 cmp r3, #0
  2336. 80011fc: dd1d ble.n 800123a <HAL_ADC_ConvCpltCallback+0xea>
  2337. int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U));
  2338. 80011fe: 6a7b ldr r3, [r7, #36] @ 0x24
  2339. 8001200: f003 021f and.w r2, r3, #31
  2340. 8001204: 6a3b ldr r3, [r7, #32]
  2341. 8001206: 4413 add r3, r2
  2342. 8001208: 61fb str r3, [r7, #28]
  2343. uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */;
  2344. 800120a: 6a7b ldr r3, [r7, #36] @ 0x24
  2345. 800120c: 61bb str r3, [r7, #24]
  2346. __ASM volatile ("dsb 0xF":::"memory");
  2347. 800120e: f3bf 8f4f dsb sy
  2348. }
  2349. 8001212: bf00 nop
  2350. SCB->DCIMVAC = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */
  2351. 8001214: 4a39 ldr r2, [pc, #228] @ (80012fc <HAL_ADC_ConvCpltCallback+0x1ac>)
  2352. 8001216: 69bb ldr r3, [r7, #24]
  2353. 8001218: f8c2 325c str.w r3, [r2, #604] @ 0x25c
  2354. op_addr += __SCB_DCACHE_LINE_SIZE;
  2355. 800121c: 69bb ldr r3, [r7, #24]
  2356. 800121e: 3320 adds r3, #32
  2357. 8001220: 61bb str r3, [r7, #24]
  2358. op_size -= __SCB_DCACHE_LINE_SIZE;
  2359. 8001222: 69fb ldr r3, [r7, #28]
  2360. 8001224: 3b20 subs r3, #32
  2361. 8001226: 61fb str r3, [r7, #28]
  2362. } while ( op_size > 0 );
  2363. 8001228: 69fb ldr r3, [r7, #28]
  2364. 800122a: 2b00 cmp r3, #0
  2365. 800122c: dcf2 bgt.n 8001214 <HAL_ADC_ConvCpltCallback+0xc4>
  2366. __ASM volatile ("dsb 0xF":::"memory");
  2367. 800122e: f3bf 8f4f dsb sy
  2368. }
  2369. 8001232: bf00 nop
  2370. __ASM volatile ("isb 0xF":::"memory");
  2371. 8001234: f3bf 8f6f isb sy
  2372. }
  2373. 8001238: bf00 nop
  2374. }
  2375. 800123a: bf00 nop
  2376. if(adc2MeasDataQueue != NULL)
  2377. 800123c: 4b34 ldr r3, [pc, #208] @ (8001310 <HAL_ADC_ConvCpltCallback+0x1c0>)
  2378. 800123e: 681b ldr r3, [r3, #0]
  2379. 8001240: 2b00 cmp r3, #0
  2380. 8001242: d006 beq.n 8001252 <HAL_ADC_ConvCpltCallback+0x102>
  2381. {
  2382. osMessageQueuePut(adc2MeasDataQueue, &adc2Data, 0, 0);
  2383. 8001244: 4b32 ldr r3, [pc, #200] @ (8001310 <HAL_ADC_ConvCpltCallback+0x1c0>)
  2384. 8001246: 6818 ldr r0, [r3, #0]
  2385. 8001248: 2300 movs r3, #0
  2386. 800124a: 2200 movs r2, #0
  2387. 800124c: 492f ldr r1, [pc, #188] @ (800130c <HAL_ADC_ConvCpltCallback+0x1bc>)
  2388. 800124e: f00e fc6f bl 800fb30 <osMessageQueuePut>
  2389. }
  2390. if(HAL_ADC_Start_DMA(&hadc2, (uint32_t *)adc2Data.adcDataBuffer, ADC2LastData) != HAL_OK)
  2391. 8001252: 2203 movs r2, #3
  2392. 8001254: 492d ldr r1, [pc, #180] @ (800130c <HAL_ADC_ConvCpltCallback+0x1bc>)
  2393. 8001256: 482f ldr r0, [pc, #188] @ (8001314 <HAL_ADC_ConvCpltCallback+0x1c4>)
  2394. 8001258: f002 fd12 bl 8003c80 <HAL_ADC_Start_DMA>
  2395. 800125c: 4603 mov r3, r0
  2396. 800125e: 2b00 cmp r3, #0
  2397. 8001260: d001 beq.n 8001266 <HAL_ADC_ConvCpltCallback+0x116>
  2398. {
  2399. Error_Handler();
  2400. 8001262: f000 f915 bl 8001490 <Error_Handler>
  2401. }
  2402. }
  2403. if(hadc->Instance == ADC3)
  2404. 8001266: 687b ldr r3, [r7, #4]
  2405. 8001268: 681b ldr r3, [r3, #0]
  2406. 800126a: 4a2b ldr r2, [pc, #172] @ (8001318 <HAL_ADC_ConvCpltCallback+0x1c8>)
  2407. 800126c: 4293 cmp r3, r2
  2408. 800126e: d13c bne.n 80012ea <HAL_ADC_ConvCpltCallback+0x19a>
  2409. {
  2410. SCB_InvalidateDCache_by_Addr((uint32_t*)(((uint32_t)adc3Data.adcDataBuffer) & ~(uint32_t)0x1F), __SCB_DCACHE_LINE_SIZE);
  2411. 8001270: 4b2a ldr r3, [pc, #168] @ (800131c <HAL_ADC_ConvCpltCallback+0x1cc>)
  2412. 8001272: f023 031f bic.w r3, r3, #31
  2413. 8001276: 617b str r3, [r7, #20]
  2414. 8001278: 2320 movs r3, #32
  2415. 800127a: 613b str r3, [r7, #16]
  2416. if ( dsize > 0 ) {
  2417. 800127c: 693b ldr r3, [r7, #16]
  2418. 800127e: 2b00 cmp r3, #0
  2419. 8001280: dd1d ble.n 80012be <HAL_ADC_ConvCpltCallback+0x16e>
  2420. int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U));
  2421. 8001282: 697b ldr r3, [r7, #20]
  2422. 8001284: f003 021f and.w r2, r3, #31
  2423. 8001288: 693b ldr r3, [r7, #16]
  2424. 800128a: 4413 add r3, r2
  2425. 800128c: 60fb str r3, [r7, #12]
  2426. uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */;
  2427. 800128e: 697b ldr r3, [r7, #20]
  2428. 8001290: 60bb str r3, [r7, #8]
  2429. __ASM volatile ("dsb 0xF":::"memory");
  2430. 8001292: f3bf 8f4f dsb sy
  2431. }
  2432. 8001296: bf00 nop
  2433. SCB->DCIMVAC = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */
  2434. 8001298: 4a18 ldr r2, [pc, #96] @ (80012fc <HAL_ADC_ConvCpltCallback+0x1ac>)
  2435. 800129a: 68bb ldr r3, [r7, #8]
  2436. 800129c: f8c2 325c str.w r3, [r2, #604] @ 0x25c
  2437. op_addr += __SCB_DCACHE_LINE_SIZE;
  2438. 80012a0: 68bb ldr r3, [r7, #8]
  2439. 80012a2: 3320 adds r3, #32
  2440. 80012a4: 60bb str r3, [r7, #8]
  2441. op_size -= __SCB_DCACHE_LINE_SIZE;
  2442. 80012a6: 68fb ldr r3, [r7, #12]
  2443. 80012a8: 3b20 subs r3, #32
  2444. 80012aa: 60fb str r3, [r7, #12]
  2445. } while ( op_size > 0 );
  2446. 80012ac: 68fb ldr r3, [r7, #12]
  2447. 80012ae: 2b00 cmp r3, #0
  2448. 80012b0: dcf2 bgt.n 8001298 <HAL_ADC_ConvCpltCallback+0x148>
  2449. __ASM volatile ("dsb 0xF":::"memory");
  2450. 80012b2: f3bf 8f4f dsb sy
  2451. }
  2452. 80012b6: bf00 nop
  2453. __ASM volatile ("isb 0xF":::"memory");
  2454. 80012b8: f3bf 8f6f isb sy
  2455. }
  2456. 80012bc: bf00 nop
  2457. }
  2458. 80012be: bf00 nop
  2459. if(adc3MeasDataQueue != NULL)
  2460. 80012c0: 4b17 ldr r3, [pc, #92] @ (8001320 <HAL_ADC_ConvCpltCallback+0x1d0>)
  2461. 80012c2: 681b ldr r3, [r3, #0]
  2462. 80012c4: 2b00 cmp r3, #0
  2463. 80012c6: d006 beq.n 80012d6 <HAL_ADC_ConvCpltCallback+0x186>
  2464. {
  2465. osMessageQueuePut(adc3MeasDataQueue, &adc3Data, 0, 0);
  2466. 80012c8: 4b15 ldr r3, [pc, #84] @ (8001320 <HAL_ADC_ConvCpltCallback+0x1d0>)
  2467. 80012ca: 6818 ldr r0, [r3, #0]
  2468. 80012cc: 2300 movs r3, #0
  2469. 80012ce: 2200 movs r2, #0
  2470. 80012d0: 4912 ldr r1, [pc, #72] @ (800131c <HAL_ADC_ConvCpltCallback+0x1cc>)
  2471. 80012d2: f00e fc2d bl 800fb30 <osMessageQueuePut>
  2472. }
  2473. if(HAL_ADC_Start_DMA(&hadc3, (uint32_t *)adc3Data.adcDataBuffer, ADC3LastData) != HAL_OK)
  2474. 80012d6: 2205 movs r2, #5
  2475. 80012d8: 4910 ldr r1, [pc, #64] @ (800131c <HAL_ADC_ConvCpltCallback+0x1cc>)
  2476. 80012da: 4812 ldr r0, [pc, #72] @ (8001324 <HAL_ADC_ConvCpltCallback+0x1d4>)
  2477. 80012dc: f002 fcd0 bl 8003c80 <HAL_ADC_Start_DMA>
  2478. 80012e0: 4603 mov r3, r0
  2479. 80012e2: 2b00 cmp r3, #0
  2480. 80012e4: d001 beq.n 80012ea <HAL_ADC_ConvCpltCallback+0x19a>
  2481. {
  2482. Error_Handler();
  2483. 80012e6: f000 f8d3 bl 8001490 <Error_Handler>
  2484. }
  2485. }
  2486. }
  2487. 80012ea: bf00 nop
  2488. 80012ec: 3738 adds r7, #56 @ 0x38
  2489. 80012ee: 46bd mov sp, r7
  2490. 80012f0: bd80 pop {r7, pc}
  2491. 80012f2: bf00 nop
  2492. 80012f4: 40022000 .word 0x40022000
  2493. 80012f8: 240000e0 .word 0x240000e0
  2494. 80012fc: e000ed00 .word 0xe000ed00
  2495. 8001300: 24000590 .word 0x24000590
  2496. 8001304: 24000140 .word 0x24000140
  2497. 8001308: 40022100 .word 0x40022100
  2498. 800130c: 24000100 .word 0x24000100
  2499. 8001310: 24000594 .word 0x24000594
  2500. 8001314: 240001a4 .word 0x240001a4
  2501. 8001318: 58026000 .word 0x58026000
  2502. 800131c: 24000120 .word 0x24000120
  2503. 8001320: 24000598 .word 0x24000598
  2504. 8001324: 24000208 .word 0x24000208
  2505. 08001328 <StartDefaultTask>:
  2506. * @param argument: Not used
  2507. * @retval None
  2508. */
  2509. /* USER CODE END Header_StartDefaultTask */
  2510. void StartDefaultTask(void *argument)
  2511. {
  2512. 8001328: b580 push {r7, lr}
  2513. 800132a: b082 sub sp, #8
  2514. 800132c: af00 add r7, sp, #0
  2515. 800132e: 6078 str r0, [r7, #4]
  2516. /* USER CODE BEGIN 5 */
  2517. SelectCurrentSensorGain(CurrentSensorL1, csGain3);
  2518. 8001330: 2102 movs r1, #2
  2519. 8001332: 2000 movs r0, #0
  2520. 8001334: f000 fc98 bl 8001c68 <SelectCurrentSensorGain>
  2521. SelectCurrentSensorGain(CurrentSensorL2, csGain3);
  2522. 8001338: 2102 movs r1, #2
  2523. 800133a: 2001 movs r0, #1
  2524. 800133c: f000 fc94 bl 8001c68 <SelectCurrentSensorGain>
  2525. SelectCurrentSensorGain(CurrentSensorL3, csGain3);
  2526. 8001340: 2102 movs r1, #2
  2527. 8001342: 2002 movs r0, #2
  2528. 8001344: f000 fc90 bl 8001c68 <SelectCurrentSensorGain>
  2529. EnableCurrentSensors();
  2530. 8001348: f000 fc82 bl 8001c50 <EnableCurrentSensors>
  2531. osDelay(pdMS_TO_TICKS(1000));
  2532. 800134c: f44f 707a mov.w r0, #1000 @ 0x3e8
  2533. 8001350: f00e fa51 bl 800f7f6 <osDelay>
  2534. if(HAL_TIM_Base_Start(&htim2) != HAL_OK)
  2535. 8001354: 4815 ldr r0, [pc, #84] @ (80013ac <StartDefaultTask+0x84>)
  2536. 8001356: f00a fe69 bl 800c02c <HAL_TIM_Base_Start>
  2537. 800135a: 4603 mov r3, r0
  2538. 800135c: 2b00 cmp r3, #0
  2539. 800135e: d001 beq.n 8001364 <StartDefaultTask+0x3c>
  2540. {
  2541. Error_Handler();
  2542. 8001360: f000 f896 bl 8001490 <Error_Handler>
  2543. }
  2544. // if(HAL_ADC_Start_IT(&hadc1) != HAL_OK)
  2545. // {
  2546. // Error_Handler();
  2547. // }
  2548. if(HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc1Data.adcDataBuffer, ADC1LastData) != HAL_OK)
  2549. 8001364: 2206 movs r2, #6
  2550. 8001366: 4912 ldr r1, [pc, #72] @ (80013b0 <StartDefaultTask+0x88>)
  2551. 8001368: 4812 ldr r0, [pc, #72] @ (80013b4 <StartDefaultTask+0x8c>)
  2552. 800136a: f002 fc89 bl 8003c80 <HAL_ADC_Start_DMA>
  2553. 800136e: 4603 mov r3, r0
  2554. 8001370: 2b00 cmp r3, #0
  2555. 8001372: d001 beq.n 8001378 <StartDefaultTask+0x50>
  2556. {
  2557. Error_Handler();
  2558. 8001374: f000 f88c bl 8001490 <Error_Handler>
  2559. }
  2560. if(HAL_ADC_Start_DMA(&hadc2, (uint32_t *)adc2Data.adcDataBuffer, ADC2LastData) != HAL_OK)
  2561. 8001378: 2203 movs r2, #3
  2562. 800137a: 490f ldr r1, [pc, #60] @ (80013b8 <StartDefaultTask+0x90>)
  2563. 800137c: 480f ldr r0, [pc, #60] @ (80013bc <StartDefaultTask+0x94>)
  2564. 800137e: f002 fc7f bl 8003c80 <HAL_ADC_Start_DMA>
  2565. 8001382: 4603 mov r3, r0
  2566. 8001384: 2b00 cmp r3, #0
  2567. 8001386: d001 beq.n 800138c <StartDefaultTask+0x64>
  2568. {
  2569. Error_Handler();
  2570. 8001388: f000 f882 bl 8001490 <Error_Handler>
  2571. }
  2572. if(HAL_ADC_Start_DMA(&hadc3, (uint32_t *)adc3Data.adcDataBuffer, ADC3LastData) != HAL_OK)
  2573. 800138c: 2205 movs r2, #5
  2574. 800138e: 490c ldr r1, [pc, #48] @ (80013c0 <StartDefaultTask+0x98>)
  2575. 8001390: 480c ldr r0, [pc, #48] @ (80013c4 <StartDefaultTask+0x9c>)
  2576. 8001392: f002 fc75 bl 8003c80 <HAL_ADC_Start_DMA>
  2577. 8001396: 4603 mov r3, r0
  2578. 8001398: 2b00 cmp r3, #0
  2579. 800139a: d001 beq.n 80013a0 <StartDefaultTask+0x78>
  2580. {
  2581. Error_Handler();
  2582. 800139c: f000 f878 bl 8001490 <Error_Handler>
  2583. }
  2584. /* Infinite loop */
  2585. for(;;)
  2586. {
  2587. osDelay(pdMS_TO_TICKS(1000));
  2588. 80013a0: f44f 707a mov.w r0, #1000 @ 0x3e8
  2589. 80013a4: f00e fa27 bl 800f7f6 <osDelay>
  2590. 80013a8: e7fa b.n 80013a0 <StartDefaultTask+0x78>
  2591. 80013aa: bf00 nop
  2592. 80013ac: 2400040c .word 0x2400040c
  2593. 80013b0: 240000e0 .word 0x240000e0
  2594. 80013b4: 24000140 .word 0x24000140
  2595. 80013b8: 24000100 .word 0x24000100
  2596. 80013bc: 240001a4 .word 0x240001a4
  2597. 80013c0: 24000120 .word 0x24000120
  2598. 80013c4: 24000208 .word 0x24000208
  2599. 080013c8 <MPU_Config>:
  2600. }
  2601. /* MPU Configuration */
  2602. void MPU_Config(void)
  2603. {
  2604. 80013c8: b580 push {r7, lr}
  2605. 80013ca: b084 sub sp, #16
  2606. 80013cc: af00 add r7, sp, #0
  2607. MPU_Region_InitTypeDef MPU_InitStruct = {0};
  2608. 80013ce: 463b mov r3, r7
  2609. 80013d0: 2200 movs r2, #0
  2610. 80013d2: 601a str r2, [r3, #0]
  2611. 80013d4: 605a str r2, [r3, #4]
  2612. 80013d6: 609a str r2, [r3, #8]
  2613. 80013d8: 60da str r2, [r3, #12]
  2614. /* Disables the MPU */
  2615. HAL_MPU_Disable();
  2616. 80013da: f003 fd8b bl 8004ef4 <HAL_MPU_Disable>
  2617. /** Initializes and configures the Region and the memory to be protected
  2618. */
  2619. MPU_InitStruct.Enable = MPU_REGION_ENABLE;
  2620. 80013de: 2301 movs r3, #1
  2621. 80013e0: 703b strb r3, [r7, #0]
  2622. MPU_InitStruct.Number = MPU_REGION_NUMBER0;
  2623. 80013e2: 2300 movs r3, #0
  2624. 80013e4: 707b strb r3, [r7, #1]
  2625. MPU_InitStruct.BaseAddress = 0x0;
  2626. 80013e6: 2300 movs r3, #0
  2627. 80013e8: 607b str r3, [r7, #4]
  2628. MPU_InitStruct.Size = MPU_REGION_SIZE_4GB;
  2629. 80013ea: 231f movs r3, #31
  2630. 80013ec: 723b strb r3, [r7, #8]
  2631. MPU_InitStruct.SubRegionDisable = 0x87;
  2632. 80013ee: 2387 movs r3, #135 @ 0x87
  2633. 80013f0: 727b strb r3, [r7, #9]
  2634. MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
  2635. 80013f2: 2300 movs r3, #0
  2636. 80013f4: 72bb strb r3, [r7, #10]
  2637. MPU_InitStruct.AccessPermission = MPU_REGION_NO_ACCESS;
  2638. 80013f6: 2300 movs r3, #0
  2639. 80013f8: 72fb strb r3, [r7, #11]
  2640. MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_DISABLE;
  2641. 80013fa: 2301 movs r3, #1
  2642. 80013fc: 733b strb r3, [r7, #12]
  2643. MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;
  2644. 80013fe: 2301 movs r3, #1
  2645. 8001400: 737b strb r3, [r7, #13]
  2646. MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
  2647. 8001402: 2300 movs r3, #0
  2648. 8001404: 73bb strb r3, [r7, #14]
  2649. MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
  2650. 8001406: 2300 movs r3, #0
  2651. 8001408: 73fb strb r3, [r7, #15]
  2652. HAL_MPU_ConfigRegion(&MPU_InitStruct);
  2653. 800140a: 463b mov r3, r7
  2654. 800140c: 4618 mov r0, r3
  2655. 800140e: f003 fda9 bl 8004f64 <HAL_MPU_ConfigRegion>
  2656. /** Initializes and configures the Region and the memory to be protected
  2657. */
  2658. MPU_InitStruct.Number = MPU_REGION_NUMBER1;
  2659. 8001412: 2301 movs r3, #1
  2660. 8001414: 707b strb r3, [r7, #1]
  2661. MPU_InitStruct.BaseAddress = 0x24020000;
  2662. 8001416: 4b13 ldr r3, [pc, #76] @ (8001464 <MPU_Config+0x9c>)
  2663. 8001418: 607b str r3, [r7, #4]
  2664. MPU_InitStruct.Size = MPU_REGION_SIZE_128KB;
  2665. 800141a: 2310 movs r3, #16
  2666. 800141c: 723b strb r3, [r7, #8]
  2667. MPU_InitStruct.SubRegionDisable = 0x0;
  2668. 800141e: 2300 movs r3, #0
  2669. 8001420: 727b strb r3, [r7, #9]
  2670. MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1;
  2671. 8001422: 2301 movs r3, #1
  2672. 8001424: 72bb strb r3, [r7, #10]
  2673. MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
  2674. 8001426: 2303 movs r3, #3
  2675. 8001428: 72fb strb r3, [r7, #11]
  2676. MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
  2677. 800142a: 2300 movs r3, #0
  2678. 800142c: 737b strb r3, [r7, #13]
  2679. HAL_MPU_ConfigRegion(&MPU_InitStruct);
  2680. 800142e: 463b mov r3, r7
  2681. 8001430: 4618 mov r0, r3
  2682. 8001432: f003 fd97 bl 8004f64 <HAL_MPU_ConfigRegion>
  2683. /** Initializes and configures the Region and the memory to be protected
  2684. */
  2685. MPU_InitStruct.Number = MPU_REGION_NUMBER2;
  2686. 8001436: 2302 movs r3, #2
  2687. 8001438: 707b strb r3, [r7, #1]
  2688. MPU_InitStruct.BaseAddress = 0x24040000;
  2689. 800143a: 4b0b ldr r3, [pc, #44] @ (8001468 <MPU_Config+0xa0>)
  2690. 800143c: 607b str r3, [r7, #4]
  2691. MPU_InitStruct.Size = MPU_REGION_SIZE_512B;
  2692. 800143e: 2308 movs r3, #8
  2693. 8001440: 723b strb r3, [r7, #8]
  2694. MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
  2695. 8001442: 2300 movs r3, #0
  2696. 8001444: 72bb strb r3, [r7, #10]
  2697. MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;
  2698. 8001446: 2301 movs r3, #1
  2699. 8001448: 737b strb r3, [r7, #13]
  2700. MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE;
  2701. 800144a: 2301 movs r3, #1
  2702. 800144c: 73fb strb r3, [r7, #15]
  2703. HAL_MPU_ConfigRegion(&MPU_InitStruct);
  2704. 800144e: 463b mov r3, r7
  2705. 8001450: 4618 mov r0, r3
  2706. 8001452: f003 fd87 bl 8004f64 <HAL_MPU_ConfigRegion>
  2707. /* Enables the MPU */
  2708. HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
  2709. 8001456: 2004 movs r0, #4
  2710. 8001458: f003 fd64 bl 8004f24 <HAL_MPU_Enable>
  2711. }
  2712. 800145c: bf00 nop
  2713. 800145e: 3710 adds r7, #16
  2714. 8001460: 46bd mov sp, r7
  2715. 8001462: bd80 pop {r7, pc}
  2716. 8001464: 24020000 .word 0x24020000
  2717. 8001468: 24040000 .word 0x24040000
  2718. 0800146c <HAL_TIM_PeriodElapsedCallback>:
  2719. * a global variable "uwTick" used as application time base.
  2720. * @param htim : TIM handle
  2721. * @retval None
  2722. */
  2723. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  2724. {
  2725. 800146c: b580 push {r7, lr}
  2726. 800146e: b082 sub sp, #8
  2727. 8001470: af00 add r7, sp, #0
  2728. 8001472: 6078 str r0, [r7, #4]
  2729. /* USER CODE BEGIN Callback 0 */
  2730. /* USER CODE END Callback 0 */
  2731. if (htim->Instance == TIM6) {
  2732. 8001474: 687b ldr r3, [r7, #4]
  2733. 8001476: 681b ldr r3, [r3, #0]
  2734. 8001478: 4a04 ldr r2, [pc, #16] @ (800148c <HAL_TIM_PeriodElapsedCallback+0x20>)
  2735. 800147a: 4293 cmp r3, r2
  2736. 800147c: d101 bne.n 8001482 <HAL_TIM_PeriodElapsedCallback+0x16>
  2737. HAL_IncTick();
  2738. 800147e: f002 f80d bl 800349c <HAL_IncTick>
  2739. // HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_4);
  2740. // HAL_ADC_Start_IT(&hadc1);
  2741. }
  2742. /* USER CODE END Callback 1 */
  2743. }
  2744. 8001482: bf00 nop
  2745. 8001484: 3708 adds r7, #8
  2746. 8001486: 46bd mov sp, r7
  2747. 8001488: bd80 pop {r7, pc}
  2748. 800148a: bf00 nop
  2749. 800148c: 40001000 .word 0x40001000
  2750. 08001490 <Error_Handler>:
  2751. /**
  2752. * @brief This function is executed in case of error occurrence.
  2753. * @retval None
  2754. */
  2755. void Error_Handler(void)
  2756. {
  2757. 8001490: b480 push {r7}
  2758. 8001492: af00 add r7, sp, #0
  2759. __ASM volatile ("cpsid i" : : : "memory");
  2760. 8001494: b672 cpsid i
  2761. }
  2762. 8001496: bf00 nop
  2763. /* USER CODE BEGIN Error_Handler_Debug */
  2764. /* User can add his own implementation to report the HAL error return state */
  2765. __disable_irq();
  2766. while (1)
  2767. 8001498: bf00 nop
  2768. 800149a: e7fd b.n 8001498 <Error_Handler+0x8>
  2769. 0800149c <MeasTasksInit>:
  2770. RESMeasurements resMeasurements = { 0 };
  2771. SesnorsInfo sensorsInfo = { 0 };
  2772. uint16_t ILxRef[CURRENTS_COUNT] = { 0 };
  2773. void MeasTasksInit (void) {
  2774. 800149c: b580 push {r7, lr}
  2775. 800149e: b09c sub sp, #112 @ 0x70
  2776. 80014a0: af00 add r7, sp, #0
  2777. vRefmVMutex = osMutexNew (NULL);
  2778. 80014a2: 2000 movs r0, #0
  2779. 80014a4: f00e f9c2 bl 800f82c <osMutexNew>
  2780. 80014a8: 4603 mov r3, r0
  2781. 80014aa: 4a38 ldr r2, [pc, #224] @ (800158c <MeasTasksInit+0xf0>)
  2782. 80014ac: 6013 str r3, [r2, #0]
  2783. resMeasurementsMutex = osMutexNew (NULL);
  2784. 80014ae: 2000 movs r0, #0
  2785. 80014b0: f00e f9bc bl 800f82c <osMutexNew>
  2786. 80014b4: 4603 mov r3, r0
  2787. 80014b6: 4a36 ldr r2, [pc, #216] @ (8001590 <MeasTasksInit+0xf4>)
  2788. 80014b8: 6013 str r3, [r2, #0]
  2789. sensorsInfoMutex = osMutexNew (NULL);
  2790. 80014ba: 2000 movs r0, #0
  2791. 80014bc: f00e f9b6 bl 800f82c <osMutexNew>
  2792. 80014c0: 4603 mov r3, r0
  2793. 80014c2: 4a34 ldr r2, [pc, #208] @ (8001594 <MeasTasksInit+0xf8>)
  2794. 80014c4: 6013 str r3, [r2, #0]
  2795. ILxRefMutex = osMutexNew (NULL);
  2796. 80014c6: 2000 movs r0, #0
  2797. 80014c8: f00e f9b0 bl 800f82c <osMutexNew>
  2798. 80014cc: 4603 mov r3, r0
  2799. 80014ce: 4a32 ldr r2, [pc, #200] @ (8001598 <MeasTasksInit+0xfc>)
  2800. 80014d0: 6013 str r3, [r2, #0]
  2801. adc1MeasDataQueue = osMessageQueueNew (8, sizeof (ADC1_Data), NULL);
  2802. 80014d2: 2200 movs r2, #0
  2803. 80014d4: 2120 movs r1, #32
  2804. 80014d6: 2008 movs r0, #8
  2805. 80014d8: f00e fab6 bl 800fa48 <osMessageQueueNew>
  2806. 80014dc: 4603 mov r3, r0
  2807. 80014de: 4a2f ldr r2, [pc, #188] @ (800159c <MeasTasksInit+0x100>)
  2808. 80014e0: 6013 str r3, [r2, #0]
  2809. adc2MeasDataQueue = osMessageQueueNew (8, sizeof (ADC2_Data), NULL);
  2810. 80014e2: 2200 movs r2, #0
  2811. 80014e4: 2120 movs r1, #32
  2812. 80014e6: 2008 movs r0, #8
  2813. 80014e8: f00e faae bl 800fa48 <osMessageQueueNew>
  2814. 80014ec: 4603 mov r3, r0
  2815. 80014ee: 4a2c ldr r2, [pc, #176] @ (80015a0 <MeasTasksInit+0x104>)
  2816. 80014f0: 6013 str r3, [r2, #0]
  2817. adc3MeasDataQueue = osMessageQueueNew (8, sizeof (ADC3_Data), NULL);
  2818. 80014f2: 2200 movs r2, #0
  2819. 80014f4: 2120 movs r1, #32
  2820. 80014f6: 2008 movs r0, #8
  2821. 80014f8: f00e faa6 bl 800fa48 <osMessageQueueNew>
  2822. 80014fc: 4603 mov r3, r0
  2823. 80014fe: 4a29 ldr r2, [pc, #164] @ (80015a4 <MeasTasksInit+0x108>)
  2824. 8001500: 6013 str r3, [r2, #0]
  2825. osThreadAttr_t osThreadAttradc1MeasTask = { 0 };
  2826. 8001502: f107 034c add.w r3, r7, #76 @ 0x4c
  2827. 8001506: 2224 movs r2, #36 @ 0x24
  2828. 8001508: 2100 movs r1, #0
  2829. 800150a: 4618 mov r0, r3
  2830. 800150c: f012 f96b bl 80137e6 <memset>
  2831. osThreadAttr_t osThreadAttradc2MeasTask = { 0 };
  2832. 8001510: f107 0328 add.w r3, r7, #40 @ 0x28
  2833. 8001514: 2224 movs r2, #36 @ 0x24
  2834. 8001516: 2100 movs r1, #0
  2835. 8001518: 4618 mov r0, r3
  2836. 800151a: f012 f964 bl 80137e6 <memset>
  2837. osThreadAttr_t osThreadAttradc3MeasTask = { 0 };
  2838. 800151e: 1d3b adds r3, r7, #4
  2839. 8001520: 2224 movs r2, #36 @ 0x24
  2840. 8001522: 2100 movs r1, #0
  2841. 8001524: 4618 mov r0, r3
  2842. 8001526: f012 f95e bl 80137e6 <memset>
  2843. osThreadAttradc1MeasTask.stack_size = configMINIMAL_STACK_SIZE * 2;
  2844. 800152a: f44f 6380 mov.w r3, #1024 @ 0x400
  2845. 800152e: 663b str r3, [r7, #96] @ 0x60
  2846. osThreadAttradc1MeasTask.priority = (osPriority_t)osPriorityRealtime;
  2847. 8001530: 2330 movs r3, #48 @ 0x30
  2848. 8001532: 667b str r3, [r7, #100] @ 0x64
  2849. osThreadAttradc2MeasTask.stack_size = configMINIMAL_STACK_SIZE * 2;
  2850. 8001534: f44f 6380 mov.w r3, #1024 @ 0x400
  2851. 8001538: 63fb str r3, [r7, #60] @ 0x3c
  2852. osThreadAttradc2MeasTask.priority = (osPriority_t)osPriorityRealtime;
  2853. 800153a: 2330 movs r3, #48 @ 0x30
  2854. 800153c: 643b str r3, [r7, #64] @ 0x40
  2855. osThreadAttradc3MeasTask.stack_size = configMINIMAL_STACK_SIZE * 2;
  2856. 800153e: f44f 6380 mov.w r3, #1024 @ 0x400
  2857. 8001542: 61bb str r3, [r7, #24]
  2858. osThreadAttradc3MeasTask.priority = (osPriority_t)osPriorityNormal;
  2859. 8001544: 2318 movs r3, #24
  2860. 8001546: 61fb str r3, [r7, #28]
  2861. adc1MeasTaskHandle = osThreadNew (ADC1MeasTask, NULL, &osThreadAttradc1MeasTask);
  2862. 8001548: f107 034c add.w r3, r7, #76 @ 0x4c
  2863. 800154c: 461a mov r2, r3
  2864. 800154e: 2100 movs r1, #0
  2865. 8001550: 4815 ldr r0, [pc, #84] @ (80015a8 <MeasTasksInit+0x10c>)
  2866. 8001552: f00e f8bd bl 800f6d0 <osThreadNew>
  2867. 8001556: 4603 mov r3, r0
  2868. 8001558: 4a14 ldr r2, [pc, #80] @ (80015ac <MeasTasksInit+0x110>)
  2869. 800155a: 6013 str r3, [r2, #0]
  2870. adc2MeasTaskHandle = osThreadNew (ADC2MeasTask, NULL, &osThreadAttradc2MeasTask);
  2871. 800155c: f107 0328 add.w r3, r7, #40 @ 0x28
  2872. 8001560: 461a mov r2, r3
  2873. 8001562: 2100 movs r1, #0
  2874. 8001564: 4812 ldr r0, [pc, #72] @ (80015b0 <MeasTasksInit+0x114>)
  2875. 8001566: f00e f8b3 bl 800f6d0 <osThreadNew>
  2876. 800156a: 4603 mov r3, r0
  2877. 800156c: 4a11 ldr r2, [pc, #68] @ (80015b4 <MeasTasksInit+0x118>)
  2878. 800156e: 6013 str r3, [r2, #0]
  2879. adc3MeasTaskHandle = osThreadNew (ADC3MeasTask, NULL, &osThreadAttradc3MeasTask);
  2880. 8001570: 1d3b adds r3, r7, #4
  2881. 8001572: 461a mov r2, r3
  2882. 8001574: 2100 movs r1, #0
  2883. 8001576: 4810 ldr r0, [pc, #64] @ (80015b8 <MeasTasksInit+0x11c>)
  2884. 8001578: f00e f8aa bl 800f6d0 <osThreadNew>
  2885. 800157c: 4603 mov r3, r0
  2886. 800157e: 4a0f ldr r2, [pc, #60] @ (80015bc <MeasTasksInit+0x120>)
  2887. 8001580: 6013 str r3, [r2, #0]
  2888. }
  2889. 8001582: bf00 nop
  2890. 8001584: 3770 adds r7, #112 @ 0x70
  2891. 8001586: 46bd mov sp, r7
  2892. 8001588: bd80 pop {r7, pc}
  2893. 800158a: bf00 nop
  2894. 800158c: 2400059c .word 0x2400059c
  2895. 8001590: 240005a0 .word 0x240005a0
  2896. 8001594: 240005a4 .word 0x240005a4
  2897. 8001598: 240005a8 .word 0x240005a8
  2898. 800159c: 24000590 .word 0x24000590
  2899. 80015a0: 24000594 .word 0x24000594
  2900. 80015a4: 24000598 .word 0x24000598
  2901. 80015a8: 080015c1 .word 0x080015c1
  2902. 80015ac: 24000584 .word 0x24000584
  2903. 80015b0: 080018c9 .word 0x080018c9
  2904. 80015b4: 24000588 .word 0x24000588
  2905. 80015b8: 08001bb9 .word 0x08001bb9
  2906. 80015bc: 2400058c .word 0x2400058c
  2907. 080015c0 <ADC1MeasTask>:
  2908. void ADC1MeasTask (void* arg) {
  2909. 80015c0: b580 push {r7, lr}
  2910. 80015c2: b09a sub sp, #104 @ 0x68
  2911. 80015c4: af00 add r7, sp, #0
  2912. 80015c6: 6078 str r0, [r7, #4]
  2913. float circBuffer[VOLTAGES_COUNT][CIRC_BUFF_LEN];
  2914. float rms[VOLTAGES_COUNT];
  2915. ADC1_Data adcData = { 0 };
  2916. 80015c8: f107 030c add.w r3, r7, #12
  2917. 80015cc: 2220 movs r2, #32
  2918. 80015ce: 2100 movs r1, #0
  2919. 80015d0: 4618 mov r0, r3
  2920. 80015d2: f012 f908 bl 80137e6 <memset>
  2921. uint32_t circBuffPos = 0;
  2922. 80015d6: 2300 movs r3, #0
  2923. 80015d8: 667b str r3, [r7, #100] @ 0x64
  2924. float gainCorrection = 1.0;
  2925. 80015da: f04f 537e mov.w r3, #1065353216 @ 0x3f800000
  2926. 80015de: 663b str r3, [r7, #96] @ 0x60
  2927. while (pdTRUE) {
  2928. osMessageQueueGet (adc1MeasDataQueue, &adcData, 0, osWaitForever);
  2929. 80015e0: 4baf ldr r3, [pc, #700] @ (80018a0 <ADC1MeasTask+0x2e0>)
  2930. 80015e2: 6818 ldr r0, [r3, #0]
  2931. 80015e4: f107 010c add.w r1, r7, #12
  2932. 80015e8: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  2933. 80015ec: 2200 movs r2, #0
  2934. 80015ee: f00e faff bl 800fbf0 <osMessageQueueGet>
  2935. #ifdef GAIN_AUTO_CORRECTION
  2936. if (osMutexAcquire (vRefmVMutex, osWaitForever) == osOK) {
  2937. 80015f2: 4bac ldr r3, [pc, #688] @ (80018a4 <ADC1MeasTask+0x2e4>)
  2938. 80015f4: 681b ldr r3, [r3, #0]
  2939. 80015f6: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  2940. 80015fa: 4618 mov r0, r3
  2941. 80015fc: f00e f99c bl 800f938 <osMutexAcquire>
  2942. 8001600: 4603 mov r3, r0
  2943. 8001602: 2b00 cmp r3, #0
  2944. 8001604: d10c bne.n 8001620 <ADC1MeasTask+0x60>
  2945. gainCorrection = (float)vRefmV;
  2946. 8001606: 4ba8 ldr r3, [pc, #672] @ (80018a8 <ADC1MeasTask+0x2e8>)
  2947. 8001608: 681b ldr r3, [r3, #0]
  2948. 800160a: ee07 3a90 vmov s15, r3
  2949. 800160e: eef8 7a67 vcvt.f32.u32 s15, s15
  2950. 8001612: edc7 7a18 vstr s15, [r7, #96] @ 0x60
  2951. osMutexRelease (vRefmVMutex);
  2952. 8001616: 4ba3 ldr r3, [pc, #652] @ (80018a4 <ADC1MeasTask+0x2e4>)
  2953. 8001618: 681b ldr r3, [r3, #0]
  2954. 800161a: 4618 mov r0, r3
  2955. 800161c: f00e f9d7 bl 800f9ce <osMutexRelease>
  2956. }
  2957. gainCorrection = gainCorrection / EXT_VREF_mV;
  2958. 8001620: ed97 7a18 vldr s14, [r7, #96] @ 0x60
  2959. 8001624: eddf 6aa1 vldr s13, [pc, #644] @ 80018ac <ADC1MeasTask+0x2ec>
  2960. 8001628: eec7 7a26 vdiv.f32 s15, s14, s13
  2961. 800162c: edc7 7a18 vstr s15, [r7, #96] @ 0x60
  2962. #endif
  2963. for (uint8_t i = 0; i < VOLTAGES_COUNT; i++) {
  2964. 8001630: 2300 movs r3, #0
  2965. 8001632: f887 305f strb.w r3, [r7, #95] @ 0x5f
  2966. 8001636: e0e7 b.n 8001808 <ADC1MeasTask+0x248>
  2967. float val = adcData.adcDataBuffer[i] * deltaADC * U_CHANNEL_CONST * gainCorrection * U_MeasCorrectionData[i].gain + U_MeasCorrectionData[i].offset;
  2968. 8001638: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  2969. 800163c: 005b lsls r3, r3, #1
  2970. 800163e: 3368 adds r3, #104 @ 0x68
  2971. 8001640: 443b add r3, r7
  2972. 8001642: f833 3c5c ldrh.w r3, [r3, #-92]
  2973. 8001646: ee07 3a90 vmov s15, r3
  2974. 800164a: eeb8 7be7 vcvt.f64.s32 d7, s15
  2975. 800164e: eeb0 6b08 vmov.f64 d6, #8 @ 0x40400000 3.0
  2976. 8001652: ee27 6b06 vmul.f64 d6, d7, d6
  2977. 8001656: ed9f 5b8e vldr d5, [pc, #568] @ 8001890 <ADC1MeasTask+0x2d0>
  2978. 800165a: ee86 7b05 vdiv.f64 d7, d6, d5
  2979. 800165e: ed9f 6b8e vldr d6, [pc, #568] @ 8001898 <ADC1MeasTask+0x2d8>
  2980. 8001662: ee27 6b06 vmul.f64 d6, d7, d6
  2981. 8001666: edd7 7a18 vldr s15, [r7, #96] @ 0x60
  2982. 800166a: eeb7 7ae7 vcvt.f64.f32 d7, s15
  2983. 800166e: ee26 6b07 vmul.f64 d6, d6, d7
  2984. 8001672: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  2985. 8001676: 4a8e ldr r2, [pc, #568] @ (80018b0 <ADC1MeasTask+0x2f0>)
  2986. 8001678: 00db lsls r3, r3, #3
  2987. 800167a: 4413 add r3, r2
  2988. 800167c: edd3 7a00 vldr s15, [r3]
  2989. 8001680: eeb7 7ae7 vcvt.f64.f32 d7, s15
  2990. 8001684: ee26 6b07 vmul.f64 d6, d6, d7
  2991. 8001688: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  2992. 800168c: 4a88 ldr r2, [pc, #544] @ (80018b0 <ADC1MeasTask+0x2f0>)
  2993. 800168e: 00db lsls r3, r3, #3
  2994. 8001690: 4413 add r3, r2
  2995. 8001692: 3304 adds r3, #4
  2996. 8001694: edd3 7a00 vldr s15, [r3]
  2997. 8001698: eeb7 7ae7 vcvt.f64.f32 d7, s15
  2998. 800169c: ee36 7b07 vadd.f64 d7, d6, d7
  2999. 80016a0: eef7 7bc7 vcvt.f32.f64 s15, d7
  3000. 80016a4: edc7 7a16 vstr s15, [r7, #88] @ 0x58
  3001. circBuffer[i][circBuffPos] = val;
  3002. 80016a8: f897 205f ldrb.w r2, [r7, #95] @ 0x5f
  3003. 80016ac: 4613 mov r3, r2
  3004. 80016ae: 009b lsls r3, r3, #2
  3005. 80016b0: 4413 add r3, r2
  3006. 80016b2: 005b lsls r3, r3, #1
  3007. 80016b4: 6e7a ldr r2, [r7, #100] @ 0x64
  3008. 80016b6: 4413 add r3, r2
  3009. 80016b8: 009b lsls r3, r3, #2
  3010. 80016ba: 3368 adds r3, #104 @ 0x68
  3011. 80016bc: 443b add r3, r7
  3012. 80016be: 3b38 subs r3, #56 @ 0x38
  3013. 80016c0: 6dba ldr r2, [r7, #88] @ 0x58
  3014. 80016c2: 601a str r2, [r3, #0]
  3015. rms[i] = 0.0;
  3016. 80016c4: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  3017. 80016c8: 009b lsls r3, r3, #2
  3018. 80016ca: 3368 adds r3, #104 @ 0x68
  3019. 80016cc: 443b add r3, r7
  3020. 80016ce: 3b3c subs r3, #60 @ 0x3c
  3021. 80016d0: f04f 0200 mov.w r2, #0
  3022. 80016d4: 601a str r2, [r3, #0]
  3023. for (uint8_t c = 0; c < CIRC_BUFF_LEN; c++) {
  3024. 80016d6: 2300 movs r3, #0
  3025. 80016d8: f887 305e strb.w r3, [r7, #94] @ 0x5e
  3026. 80016dc: e025 b.n 800172a <ADC1MeasTask+0x16a>
  3027. rms[i] += circBuffer[i][c];
  3028. 80016de: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  3029. 80016e2: 009b lsls r3, r3, #2
  3030. 80016e4: 3368 adds r3, #104 @ 0x68
  3031. 80016e6: 443b add r3, r7
  3032. 80016e8: 3b3c subs r3, #60 @ 0x3c
  3033. 80016ea: ed93 7a00 vldr s14, [r3]
  3034. 80016ee: f897 205f ldrb.w r2, [r7, #95] @ 0x5f
  3035. 80016f2: f897 105e ldrb.w r1, [r7, #94] @ 0x5e
  3036. 80016f6: 4613 mov r3, r2
  3037. 80016f8: 009b lsls r3, r3, #2
  3038. 80016fa: 4413 add r3, r2
  3039. 80016fc: 005b lsls r3, r3, #1
  3040. 80016fe: 440b add r3, r1
  3041. 8001700: 009b lsls r3, r3, #2
  3042. 8001702: 3368 adds r3, #104 @ 0x68
  3043. 8001704: 443b add r3, r7
  3044. 8001706: 3b38 subs r3, #56 @ 0x38
  3045. 8001708: edd3 7a00 vldr s15, [r3]
  3046. 800170c: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  3047. 8001710: ee77 7a27 vadd.f32 s15, s14, s15
  3048. 8001714: 009b lsls r3, r3, #2
  3049. 8001716: 3368 adds r3, #104 @ 0x68
  3050. 8001718: 443b add r3, r7
  3051. 800171a: 3b3c subs r3, #60 @ 0x3c
  3052. 800171c: edc3 7a00 vstr s15, [r3]
  3053. for (uint8_t c = 0; c < CIRC_BUFF_LEN; c++) {
  3054. 8001720: f897 305e ldrb.w r3, [r7, #94] @ 0x5e
  3055. 8001724: 3301 adds r3, #1
  3056. 8001726: f887 305e strb.w r3, [r7, #94] @ 0x5e
  3057. 800172a: f897 305e ldrb.w r3, [r7, #94] @ 0x5e
  3058. 800172e: 2b09 cmp r3, #9
  3059. 8001730: d9d5 bls.n 80016de <ADC1MeasTask+0x11e>
  3060. }
  3061. rms[i] = rms[i] / CIRC_BUFF_LEN;
  3062. 8001732: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  3063. 8001736: 009b lsls r3, r3, #2
  3064. 8001738: 3368 adds r3, #104 @ 0x68
  3065. 800173a: 443b add r3, r7
  3066. 800173c: 3b3c subs r3, #60 @ 0x3c
  3067. 800173e: ed93 7a00 vldr s14, [r3]
  3068. 8001742: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  3069. 8001746: eef2 6a04 vmov.f32 s13, #36 @ 0x41200000 10.0
  3070. 800174a: eec7 7a26 vdiv.f32 s15, s14, s13
  3071. 800174e: 009b lsls r3, r3, #2
  3072. 8001750: 3368 adds r3, #104 @ 0x68
  3073. 8001752: 443b add r3, r7
  3074. 8001754: 3b3c subs r3, #60 @ 0x3c
  3075. 8001756: edc3 7a00 vstr s15, [r3]
  3076. if (osMutexAcquire (resMeasurementsMutex, osWaitForever) == osOK) {
  3077. 800175a: 4b56 ldr r3, [pc, #344] @ (80018b4 <ADC1MeasTask+0x2f4>)
  3078. 800175c: 681b ldr r3, [r3, #0]
  3079. 800175e: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  3080. 8001762: 4618 mov r0, r3
  3081. 8001764: f00e f8e8 bl 800f938 <osMutexAcquire>
  3082. 8001768: 4603 mov r3, r0
  3083. 800176a: 2b00 cmp r3, #0
  3084. 800176c: d147 bne.n 80017fe <ADC1MeasTask+0x23e>
  3085. if (fabs(resMeasurements.voltagePeak[i]) < fabs(val)) {
  3086. 800176e: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  3087. 8001772: 4a51 ldr r2, [pc, #324] @ (80018b8 <ADC1MeasTask+0x2f8>)
  3088. 8001774: 3302 adds r3, #2
  3089. 8001776: 009b lsls r3, r3, #2
  3090. 8001778: 4413 add r3, r2
  3091. 800177a: 3304 adds r3, #4
  3092. 800177c: edd3 7a00 vldr s15, [r3]
  3093. 8001780: eeb0 7ae7 vabs.f32 s14, s15
  3094. 8001784: edd7 7a16 vldr s15, [r7, #88] @ 0x58
  3095. 8001788: eef0 7ae7 vabs.f32 s15, s15
  3096. 800178c: eeb4 7ae7 vcmpe.f32 s14, s15
  3097. 8001790: eef1 fa10 vmrs APSR_nzcv, fpscr
  3098. 8001794: d508 bpl.n 80017a8 <ADC1MeasTask+0x1e8>
  3099. resMeasurements.voltagePeak[i] = val;
  3100. 8001796: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  3101. 800179a: 4a47 ldr r2, [pc, #284] @ (80018b8 <ADC1MeasTask+0x2f8>)
  3102. 800179c: 3302 adds r3, #2
  3103. 800179e: 009b lsls r3, r3, #2
  3104. 80017a0: 4413 add r3, r2
  3105. 80017a2: 3304 adds r3, #4
  3106. 80017a4: 6dba ldr r2, [r7, #88] @ 0x58
  3107. 80017a6: 601a str r2, [r3, #0]
  3108. }
  3109. resMeasurements.voltageRMS[i] = rms[i];
  3110. 80017a8: f897 205f ldrb.w r2, [r7, #95] @ 0x5f
  3111. 80017ac: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  3112. 80017b0: 0092 lsls r2, r2, #2
  3113. 80017b2: 3268 adds r2, #104 @ 0x68
  3114. 80017b4: 443a add r2, r7
  3115. 80017b6: 3a3c subs r2, #60 @ 0x3c
  3116. 80017b8: 6812 ldr r2, [r2, #0]
  3117. 80017ba: 493f ldr r1, [pc, #252] @ (80018b8 <ADC1MeasTask+0x2f8>)
  3118. 80017bc: 009b lsls r3, r3, #2
  3119. 80017be: 440b add r3, r1
  3120. 80017c0: 601a str r2, [r3, #0]
  3121. resMeasurements.power[i] = resMeasurements.voltageRMS[i] * resMeasurements.currentRMS[i];
  3122. 80017c2: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  3123. 80017c6: 4a3c ldr r2, [pc, #240] @ (80018b8 <ADC1MeasTask+0x2f8>)
  3124. 80017c8: 009b lsls r3, r3, #2
  3125. 80017ca: 4413 add r3, r2
  3126. 80017cc: ed93 7a00 vldr s14, [r3]
  3127. 80017d0: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  3128. 80017d4: 4a38 ldr r2, [pc, #224] @ (80018b8 <ADC1MeasTask+0x2f8>)
  3129. 80017d6: 3306 adds r3, #6
  3130. 80017d8: 009b lsls r3, r3, #2
  3131. 80017da: 4413 add r3, r2
  3132. 80017dc: edd3 7a00 vldr s15, [r3]
  3133. 80017e0: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  3134. 80017e4: ee67 7a27 vmul.f32 s15, s14, s15
  3135. 80017e8: 4a33 ldr r2, [pc, #204] @ (80018b8 <ADC1MeasTask+0x2f8>)
  3136. 80017ea: 330c adds r3, #12
  3137. 80017ec: 009b lsls r3, r3, #2
  3138. 80017ee: 4413 add r3, r2
  3139. 80017f0: edc3 7a00 vstr s15, [r3]
  3140. osMutexRelease (resMeasurementsMutex);
  3141. 80017f4: 4b2f ldr r3, [pc, #188] @ (80018b4 <ADC1MeasTask+0x2f4>)
  3142. 80017f6: 681b ldr r3, [r3, #0]
  3143. 80017f8: 4618 mov r0, r3
  3144. 80017fa: f00e f8e8 bl 800f9ce <osMutexRelease>
  3145. for (uint8_t i = 0; i < VOLTAGES_COUNT; i++) {
  3146. 80017fe: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  3147. 8001802: 3301 adds r3, #1
  3148. 8001804: f887 305f strb.w r3, [r7, #95] @ 0x5f
  3149. 8001808: f897 305f ldrb.w r3, [r7, #95] @ 0x5f
  3150. 800180c: 2b00 cmp r3, #0
  3151. 800180e: f43f af13 beq.w 8001638 <ADC1MeasTask+0x78>
  3152. }
  3153. }
  3154. ++circBuffPos;
  3155. 8001812: 6e7b ldr r3, [r7, #100] @ 0x64
  3156. 8001814: 3301 adds r3, #1
  3157. 8001816: 667b str r3, [r7, #100] @ 0x64
  3158. circBuffPos = circBuffPos % CIRC_BUFF_LEN;
  3159. 8001818: 6e7a ldr r2, [r7, #100] @ 0x64
  3160. 800181a: 4b28 ldr r3, [pc, #160] @ (80018bc <ADC1MeasTask+0x2fc>)
  3161. 800181c: fba3 1302 umull r1, r3, r3, r2
  3162. 8001820: 08d9 lsrs r1, r3, #3
  3163. 8001822: 460b mov r3, r1
  3164. 8001824: 009b lsls r3, r3, #2
  3165. 8001826: 440b add r3, r1
  3166. 8001828: 005b lsls r3, r3, #1
  3167. 800182a: 1ad3 subs r3, r2, r3
  3168. 800182c: 667b str r3, [r7, #100] @ 0x64
  3169. if (osMutexAcquire (ILxRefMutex, osWaitForever) == osOK) {
  3170. 800182e: 4b24 ldr r3, [pc, #144] @ (80018c0 <ADC1MeasTask+0x300>)
  3171. 8001830: 681b ldr r3, [r3, #0]
  3172. 8001832: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  3173. 8001836: 4618 mov r0, r3
  3174. 8001838: f00e f87e bl 800f938 <osMutexAcquire>
  3175. 800183c: 4603 mov r3, r0
  3176. 800183e: 2b00 cmp r3, #0
  3177. 8001840: f47f aece bne.w 80015e0 <ADC1MeasTask+0x20>
  3178. uint8_t refIdx = 0;
  3179. 8001844: 2300 movs r3, #0
  3180. 8001846: f887 305d strb.w r3, [r7, #93] @ 0x5d
  3181. for (uint8_t i = (uint8_t)IL1Ref; i <= (uint8_t)IL3Ref; i++) {
  3182. 800184a: 2303 movs r3, #3
  3183. 800184c: f887 305c strb.w r3, [r7, #92] @ 0x5c
  3184. 8001850: e014 b.n 800187c <ADC1MeasTask+0x2bc>
  3185. ILxRef[refIdx++] = adcData.adcDataBuffer[i];
  3186. 8001852: f897 205c ldrb.w r2, [r7, #92] @ 0x5c
  3187. 8001856: f897 305d ldrb.w r3, [r7, #93] @ 0x5d
  3188. 800185a: 1c59 adds r1, r3, #1
  3189. 800185c: f887 105d strb.w r1, [r7, #93] @ 0x5d
  3190. 8001860: 4619 mov r1, r3
  3191. 8001862: 0053 lsls r3, r2, #1
  3192. 8001864: 3368 adds r3, #104 @ 0x68
  3193. 8001866: 443b add r3, r7
  3194. 8001868: f833 2c5c ldrh.w r2, [r3, #-92]
  3195. 800186c: 4b15 ldr r3, [pc, #84] @ (80018c4 <ADC1MeasTask+0x304>)
  3196. 800186e: f823 2011 strh.w r2, [r3, r1, lsl #1]
  3197. for (uint8_t i = (uint8_t)IL1Ref; i <= (uint8_t)IL3Ref; i++) {
  3198. 8001872: f897 305c ldrb.w r3, [r7, #92] @ 0x5c
  3199. 8001876: 3301 adds r3, #1
  3200. 8001878: f887 305c strb.w r3, [r7, #92] @ 0x5c
  3201. 800187c: f897 305c ldrb.w r3, [r7, #92] @ 0x5c
  3202. 8001880: 2b05 cmp r3, #5
  3203. 8001882: d9e6 bls.n 8001852 <ADC1MeasTask+0x292>
  3204. }
  3205. osMutexRelease (ILxRefMutex);
  3206. 8001884: 4b0e ldr r3, [pc, #56] @ (80018c0 <ADC1MeasTask+0x300>)
  3207. 8001886: 681b ldr r3, [r3, #0]
  3208. 8001888: 4618 mov r0, r3
  3209. 800188a: f00e f8a0 bl 800f9ce <osMutexRelease>
  3210. osMessageQueueGet (adc1MeasDataQueue, &adcData, 0, osWaitForever);
  3211. 800188e: e6a7 b.n 80015e0 <ADC1MeasTask+0x20>
  3212. 8001890: 00000000 .word 0x00000000
  3213. 8001894: 40efffe0 .word 0x40efffe0
  3214. 8001898: f5c28f5c .word 0xf5c28f5c
  3215. 800189c: 401e5c28 .word 0x401e5c28
  3216. 80018a0: 24000590 .word 0x24000590
  3217. 80018a4: 2400059c .word 0x2400059c
  3218. 80018a8: 24000030 .word 0x24000030
  3219. 80018ac: 453b8000 .word 0x453b8000
  3220. 80018b0: 24000000 .word 0x24000000
  3221. 80018b4: 240005a0 .word 0x240005a0
  3222. 80018b8: 240005ac .word 0x240005ac
  3223. 80018bc: cccccccd .word 0xcccccccd
  3224. 80018c0: 240005a8 .word 0x240005a8
  3225. 80018c4: 24000610 .word 0x24000610
  3226. 080018c8 <ADC2MeasTask>:
  3227. }
  3228. }
  3229. }
  3230. void ADC2MeasTask (void* arg) {
  3231. 80018c8: b580 push {r7, lr}
  3232. 80018ca: b09c sub sp, #112 @ 0x70
  3233. 80018cc: af00 add r7, sp, #0
  3234. 80018ce: 6078 str r0, [r7, #4]
  3235. float circBuffer[CURRENTS_COUNT][CIRC_BUFF_LEN];
  3236. float rms[CURRENTS_COUNT];
  3237. ADC2_Data adcData = { 0 };
  3238. 80018d0: f107 0310 add.w r3, r7, #16
  3239. 80018d4: 2220 movs r2, #32
  3240. 80018d6: 2100 movs r1, #0
  3241. 80018d8: 4618 mov r0, r3
  3242. 80018da: f011 ff84 bl 80137e6 <memset>
  3243. uint32_t circBuffPos = 0;
  3244. 80018de: 2300 movs r3, #0
  3245. 80018e0: 66fb str r3, [r7, #108] @ 0x6c
  3246. float gainCorrection = 1.0;
  3247. 80018e2: f04f 537e mov.w r3, #1065353216 @ 0x3f800000
  3248. 80018e6: 66bb str r3, [r7, #104] @ 0x68
  3249. while (pdTRUE) {
  3250. osMessageQueueGet (adc2MeasDataQueue, &adcData, 0, osWaitForever);
  3251. 80018e8: 4ba9 ldr r3, [pc, #676] @ (8001b90 <ADC2MeasTask+0x2c8>)
  3252. 80018ea: 6818 ldr r0, [r3, #0]
  3253. 80018ec: f107 0110 add.w r1, r7, #16
  3254. 80018f0: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  3255. 80018f4: 2200 movs r2, #0
  3256. 80018f6: f00e f97b bl 800fbf0 <osMessageQueueGet>
  3257. if (osMutexAcquire (vRefmVMutex, osWaitForever) == osOK) {
  3258. 80018fa: 4ba6 ldr r3, [pc, #664] @ (8001b94 <ADC2MeasTask+0x2cc>)
  3259. 80018fc: 681b ldr r3, [r3, #0]
  3260. 80018fe: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  3261. 8001902: 4618 mov r0, r3
  3262. 8001904: f00e f818 bl 800f938 <osMutexAcquire>
  3263. 8001908: 4603 mov r3, r0
  3264. 800190a: 2b00 cmp r3, #0
  3265. 800190c: d10c bne.n 8001928 <ADC2MeasTask+0x60>
  3266. gainCorrection = (float)vRefmV;
  3267. 800190e: 4ba2 ldr r3, [pc, #648] @ (8001b98 <ADC2MeasTask+0x2d0>)
  3268. 8001910: 681b ldr r3, [r3, #0]
  3269. 8001912: ee07 3a90 vmov s15, r3
  3270. 8001916: eef8 7a67 vcvt.f32.u32 s15, s15
  3271. 800191a: edc7 7a1a vstr s15, [r7, #104] @ 0x68
  3272. osMutexRelease (vRefmVMutex);
  3273. 800191e: 4b9d ldr r3, [pc, #628] @ (8001b94 <ADC2MeasTask+0x2cc>)
  3274. 8001920: 681b ldr r3, [r3, #0]
  3275. 8001922: 4618 mov r0, r3
  3276. 8001924: f00e f853 bl 800f9ce <osMutexRelease>
  3277. }
  3278. gainCorrection = gainCorrection / EXT_VREF_mV;
  3279. 8001928: ed97 7a1a vldr s14, [r7, #104] @ 0x68
  3280. 800192c: eddf 6a9b vldr s13, [pc, #620] @ 8001b9c <ADC2MeasTask+0x2d4>
  3281. 8001930: eec7 7a26 vdiv.f32 s15, s14, s13
  3282. 8001934: edc7 7a1a vstr s15, [r7, #104] @ 0x68
  3283. float ref[CURRENTS_COUNT] = { 0 };
  3284. 8001938: f04f 0300 mov.w r3, #0
  3285. 800193c: 60fb str r3, [r7, #12]
  3286. if (osMutexAcquire (ILxRefMutex, osWaitForever) == osOK) {
  3287. 800193e: 4b98 ldr r3, [pc, #608] @ (8001ba0 <ADC2MeasTask+0x2d8>)
  3288. 8001940: 681b ldr r3, [r3, #0]
  3289. 8001942: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  3290. 8001946: 4618 mov r0, r3
  3291. 8001948: f00d fff6 bl 800f938 <osMutexAcquire>
  3292. 800194c: 4603 mov r3, r0
  3293. 800194e: 2b00 cmp r3, #0
  3294. 8001950: d122 bne.n 8001998 <ADC2MeasTask+0xd0>
  3295. for (uint8_t i = 0; i < CURRENTS_COUNT; i++) {
  3296. 8001952: 2300 movs r3, #0
  3297. 8001954: f887 3067 strb.w r3, [r7, #103] @ 0x67
  3298. 8001958: e015 b.n 8001986 <ADC2MeasTask+0xbe>
  3299. ref[i] = (float)ILxRef[i];
  3300. 800195a: f897 3067 ldrb.w r3, [r7, #103] @ 0x67
  3301. 800195e: 4a91 ldr r2, [pc, #580] @ (8001ba4 <ADC2MeasTask+0x2dc>)
  3302. 8001960: f832 2013 ldrh.w r2, [r2, r3, lsl #1]
  3303. 8001964: f897 3067 ldrb.w r3, [r7, #103] @ 0x67
  3304. 8001968: ee07 2a90 vmov s15, r2
  3305. 800196c: eef8 7a67 vcvt.f32.u32 s15, s15
  3306. 8001970: 009b lsls r3, r3, #2
  3307. 8001972: 3370 adds r3, #112 @ 0x70
  3308. 8001974: 443b add r3, r7
  3309. 8001976: 3b64 subs r3, #100 @ 0x64
  3310. 8001978: edc3 7a00 vstr s15, [r3]
  3311. for (uint8_t i = 0; i < CURRENTS_COUNT; i++) {
  3312. 800197c: f897 3067 ldrb.w r3, [r7, #103] @ 0x67
  3313. 8001980: 3301 adds r3, #1
  3314. 8001982: f887 3067 strb.w r3, [r7, #103] @ 0x67
  3315. 8001986: f897 3067 ldrb.w r3, [r7, #103] @ 0x67
  3316. 800198a: 2b00 cmp r3, #0
  3317. 800198c: d0e5 beq.n 800195a <ADC2MeasTask+0x92>
  3318. }
  3319. osMutexRelease (ILxRefMutex);
  3320. 800198e: 4b84 ldr r3, [pc, #528] @ (8001ba0 <ADC2MeasTask+0x2d8>)
  3321. 8001990: 681b ldr r3, [r3, #0]
  3322. 8001992: 4618 mov r0, r3
  3323. 8001994: f00e f81b bl 800f9ce <osMutexRelease>
  3324. }
  3325. for (uint8_t i = 0; i < CURRENTS_COUNT; i++) {
  3326. 8001998: 2300 movs r3, #0
  3327. 800199a: f887 3066 strb.w r3, [r7, #102] @ 0x66
  3328. 800199e: e0db b.n 8001b58 <ADC2MeasTask+0x290>
  3329. float adcVal = (float)adcData.adcDataBuffer[i];
  3330. 80019a0: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  3331. 80019a4: 005b lsls r3, r3, #1
  3332. 80019a6: 3370 adds r3, #112 @ 0x70
  3333. 80019a8: 443b add r3, r7
  3334. 80019aa: f833 3c60 ldrh.w r3, [r3, #-96]
  3335. 80019ae: ee07 3a90 vmov s15, r3
  3336. 80019b2: eef8 7a67 vcvt.f32.u32 s15, s15
  3337. 80019b6: edc7 7a18 vstr s15, [r7, #96] @ 0x60
  3338. float val = (adcVal - ref[i]) * deltaADC * I_CHANNEL_CONST * gainCorrection * I_MeasCorrectionData[i].gain + I_MeasCorrectionData[i].offset;
  3339. 80019ba: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  3340. 80019be: 009b lsls r3, r3, #2
  3341. 80019c0: 3370 adds r3, #112 @ 0x70
  3342. 80019c2: 443b add r3, r7
  3343. 80019c4: 3b64 subs r3, #100 @ 0x64
  3344. 80019c6: edd3 7a00 vldr s15, [r3]
  3345. 80019ca: ed97 7a18 vldr s14, [r7, #96] @ 0x60
  3346. 80019ce: ee77 7a67 vsub.f32 s15, s14, s15
  3347. 80019d2: eeb7 7ae7 vcvt.f64.f32 d7, s15
  3348. 80019d6: eeb0 6b08 vmov.f64 d6, #8 @ 0x40400000 3.0
  3349. 80019da: ee27 6b06 vmul.f64 d6, d7, d6
  3350. 80019de: ed9f 5b68 vldr d5, [pc, #416] @ 8001b80 <ADC2MeasTask+0x2b8>
  3351. 80019e2: ee86 7b05 vdiv.f64 d7, d6, d5
  3352. 80019e6: ed9f 6b68 vldr d6, [pc, #416] @ 8001b88 <ADC2MeasTask+0x2c0>
  3353. 80019ea: ee27 6b06 vmul.f64 d6, d7, d6
  3354. 80019ee: edd7 7a1a vldr s15, [r7, #104] @ 0x68
  3355. 80019f2: eeb7 7ae7 vcvt.f64.f32 d7, s15
  3356. 80019f6: ee26 6b07 vmul.f64 d6, d6, d7
  3357. 80019fa: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  3358. 80019fe: 4a6a ldr r2, [pc, #424] @ (8001ba8 <ADC2MeasTask+0x2e0>)
  3359. 8001a00: 00db lsls r3, r3, #3
  3360. 8001a02: 4413 add r3, r2
  3361. 8001a04: edd3 7a00 vldr s15, [r3]
  3362. 8001a08: eeb7 7ae7 vcvt.f64.f32 d7, s15
  3363. 8001a0c: ee26 6b07 vmul.f64 d6, d6, d7
  3364. 8001a10: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  3365. 8001a14: 4a64 ldr r2, [pc, #400] @ (8001ba8 <ADC2MeasTask+0x2e0>)
  3366. 8001a16: 00db lsls r3, r3, #3
  3367. 8001a18: 4413 add r3, r2
  3368. 8001a1a: 3304 adds r3, #4
  3369. 8001a1c: edd3 7a00 vldr s15, [r3]
  3370. 8001a20: eeb7 7ae7 vcvt.f64.f32 d7, s15
  3371. 8001a24: ee36 7b07 vadd.f64 d7, d6, d7
  3372. 8001a28: eef7 7bc7 vcvt.f32.f64 s15, d7
  3373. 8001a2c: edc7 7a17 vstr s15, [r7, #92] @ 0x5c
  3374. circBuffer[i][circBuffPos] = val;
  3375. 8001a30: f897 2066 ldrb.w r2, [r7, #102] @ 0x66
  3376. 8001a34: 4613 mov r3, r2
  3377. 8001a36: 009b lsls r3, r3, #2
  3378. 8001a38: 4413 add r3, r2
  3379. 8001a3a: 005b lsls r3, r3, #1
  3380. 8001a3c: 6efa ldr r2, [r7, #108] @ 0x6c
  3381. 8001a3e: 4413 add r3, r2
  3382. 8001a40: 009b lsls r3, r3, #2
  3383. 8001a42: 3370 adds r3, #112 @ 0x70
  3384. 8001a44: 443b add r3, r7
  3385. 8001a46: 3b3c subs r3, #60 @ 0x3c
  3386. 8001a48: 6dfa ldr r2, [r7, #92] @ 0x5c
  3387. 8001a4a: 601a str r2, [r3, #0]
  3388. rms[i] = 0.0;
  3389. 8001a4c: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  3390. 8001a50: 009b lsls r3, r3, #2
  3391. 8001a52: 3370 adds r3, #112 @ 0x70
  3392. 8001a54: 443b add r3, r7
  3393. 8001a56: 3b40 subs r3, #64 @ 0x40
  3394. 8001a58: f04f 0200 mov.w r2, #0
  3395. 8001a5c: 601a str r2, [r3, #0]
  3396. for (uint8_t c = 0; c < CIRC_BUFF_LEN; c++) {
  3397. 8001a5e: 2300 movs r3, #0
  3398. 8001a60: f887 3065 strb.w r3, [r7, #101] @ 0x65
  3399. 8001a64: e025 b.n 8001ab2 <ADC2MeasTask+0x1ea>
  3400. rms[i] += circBuffer[i][c];
  3401. 8001a66: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  3402. 8001a6a: 009b lsls r3, r3, #2
  3403. 8001a6c: 3370 adds r3, #112 @ 0x70
  3404. 8001a6e: 443b add r3, r7
  3405. 8001a70: 3b40 subs r3, #64 @ 0x40
  3406. 8001a72: ed93 7a00 vldr s14, [r3]
  3407. 8001a76: f897 2066 ldrb.w r2, [r7, #102] @ 0x66
  3408. 8001a7a: f897 1065 ldrb.w r1, [r7, #101] @ 0x65
  3409. 8001a7e: 4613 mov r3, r2
  3410. 8001a80: 009b lsls r3, r3, #2
  3411. 8001a82: 4413 add r3, r2
  3412. 8001a84: 005b lsls r3, r3, #1
  3413. 8001a86: 440b add r3, r1
  3414. 8001a88: 009b lsls r3, r3, #2
  3415. 8001a8a: 3370 adds r3, #112 @ 0x70
  3416. 8001a8c: 443b add r3, r7
  3417. 8001a8e: 3b3c subs r3, #60 @ 0x3c
  3418. 8001a90: edd3 7a00 vldr s15, [r3]
  3419. 8001a94: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  3420. 8001a98: ee77 7a27 vadd.f32 s15, s14, s15
  3421. 8001a9c: 009b lsls r3, r3, #2
  3422. 8001a9e: 3370 adds r3, #112 @ 0x70
  3423. 8001aa0: 443b add r3, r7
  3424. 8001aa2: 3b40 subs r3, #64 @ 0x40
  3425. 8001aa4: edc3 7a00 vstr s15, [r3]
  3426. for (uint8_t c = 0; c < CIRC_BUFF_LEN; c++) {
  3427. 8001aa8: f897 3065 ldrb.w r3, [r7, #101] @ 0x65
  3428. 8001aac: 3301 adds r3, #1
  3429. 8001aae: f887 3065 strb.w r3, [r7, #101] @ 0x65
  3430. 8001ab2: f897 3065 ldrb.w r3, [r7, #101] @ 0x65
  3431. 8001ab6: 2b09 cmp r3, #9
  3432. 8001ab8: d9d5 bls.n 8001a66 <ADC2MeasTask+0x19e>
  3433. }
  3434. rms[i] = rms[i] / CIRC_BUFF_LEN;
  3435. 8001aba: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  3436. 8001abe: 009b lsls r3, r3, #2
  3437. 8001ac0: 3370 adds r3, #112 @ 0x70
  3438. 8001ac2: 443b add r3, r7
  3439. 8001ac4: 3b40 subs r3, #64 @ 0x40
  3440. 8001ac6: ed93 7a00 vldr s14, [r3]
  3441. 8001aca: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  3442. 8001ace: eef2 6a04 vmov.f32 s13, #36 @ 0x41200000 10.0
  3443. 8001ad2: eec7 7a26 vdiv.f32 s15, s14, s13
  3444. 8001ad6: 009b lsls r3, r3, #2
  3445. 8001ad8: 3370 adds r3, #112 @ 0x70
  3446. 8001ada: 443b add r3, r7
  3447. 8001adc: 3b40 subs r3, #64 @ 0x40
  3448. 8001ade: edc3 7a00 vstr s15, [r3]
  3449. if (osMutexAcquire (resMeasurementsMutex, osWaitForever) == osOK) {
  3450. 8001ae2: 4b32 ldr r3, [pc, #200] @ (8001bac <ADC2MeasTask+0x2e4>)
  3451. 8001ae4: 681b ldr r3, [r3, #0]
  3452. 8001ae6: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  3453. 8001aea: 4618 mov r0, r3
  3454. 8001aec: f00d ff24 bl 800f938 <osMutexAcquire>
  3455. 8001af0: 4603 mov r3, r0
  3456. 8001af2: 2b00 cmp r3, #0
  3457. 8001af4: d12b bne.n 8001b4e <ADC2MeasTask+0x286>
  3458. if (resMeasurements.currentPeak[i] < val) {
  3459. 8001af6: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  3460. 8001afa: 4a2d ldr r2, [pc, #180] @ (8001bb0 <ADC2MeasTask+0x2e8>)
  3461. 8001afc: 3308 adds r3, #8
  3462. 8001afe: 009b lsls r3, r3, #2
  3463. 8001b00: 4413 add r3, r2
  3464. 8001b02: 3304 adds r3, #4
  3465. 8001b04: edd3 7a00 vldr s15, [r3]
  3466. 8001b08: ed97 7a17 vldr s14, [r7, #92] @ 0x5c
  3467. 8001b0c: eeb4 7ae7 vcmpe.f32 s14, s15
  3468. 8001b10: eef1 fa10 vmrs APSR_nzcv, fpscr
  3469. 8001b14: dd08 ble.n 8001b28 <ADC2MeasTask+0x260>
  3470. resMeasurements.currentPeak[i] = val;
  3471. 8001b16: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  3472. 8001b1a: 4a25 ldr r2, [pc, #148] @ (8001bb0 <ADC2MeasTask+0x2e8>)
  3473. 8001b1c: 3308 adds r3, #8
  3474. 8001b1e: 009b lsls r3, r3, #2
  3475. 8001b20: 4413 add r3, r2
  3476. 8001b22: 3304 adds r3, #4
  3477. 8001b24: 6dfa ldr r2, [r7, #92] @ 0x5c
  3478. 8001b26: 601a str r2, [r3, #0]
  3479. }
  3480. resMeasurements.currentRMS[i] = rms[i];
  3481. 8001b28: f897 2066 ldrb.w r2, [r7, #102] @ 0x66
  3482. 8001b2c: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  3483. 8001b30: 0092 lsls r2, r2, #2
  3484. 8001b32: 3270 adds r2, #112 @ 0x70
  3485. 8001b34: 443a add r2, r7
  3486. 8001b36: 3a40 subs r2, #64 @ 0x40
  3487. 8001b38: 6812 ldr r2, [r2, #0]
  3488. 8001b3a: 491d ldr r1, [pc, #116] @ (8001bb0 <ADC2MeasTask+0x2e8>)
  3489. 8001b3c: 3306 adds r3, #6
  3490. 8001b3e: 009b lsls r3, r3, #2
  3491. 8001b40: 440b add r3, r1
  3492. 8001b42: 601a str r2, [r3, #0]
  3493. osMutexRelease (resMeasurementsMutex);
  3494. 8001b44: 4b19 ldr r3, [pc, #100] @ (8001bac <ADC2MeasTask+0x2e4>)
  3495. 8001b46: 681b ldr r3, [r3, #0]
  3496. 8001b48: 4618 mov r0, r3
  3497. 8001b4a: f00d ff40 bl 800f9ce <osMutexRelease>
  3498. for (uint8_t i = 0; i < CURRENTS_COUNT; i++) {
  3499. 8001b4e: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  3500. 8001b52: 3301 adds r3, #1
  3501. 8001b54: f887 3066 strb.w r3, [r7, #102] @ 0x66
  3502. 8001b58: f897 3066 ldrb.w r3, [r7, #102] @ 0x66
  3503. 8001b5c: 2b00 cmp r3, #0
  3504. 8001b5e: f43f af1f beq.w 80019a0 <ADC2MeasTask+0xd8>
  3505. }
  3506. }
  3507. ++circBuffPos;
  3508. 8001b62: 6efb ldr r3, [r7, #108] @ 0x6c
  3509. 8001b64: 3301 adds r3, #1
  3510. 8001b66: 66fb str r3, [r7, #108] @ 0x6c
  3511. circBuffPos = circBuffPos % CIRC_BUFF_LEN;
  3512. 8001b68: 6efa ldr r2, [r7, #108] @ 0x6c
  3513. 8001b6a: 4b12 ldr r3, [pc, #72] @ (8001bb4 <ADC2MeasTask+0x2ec>)
  3514. 8001b6c: fba3 1302 umull r1, r3, r3, r2
  3515. 8001b70: 08d9 lsrs r1, r3, #3
  3516. 8001b72: 460b mov r3, r1
  3517. 8001b74: 009b lsls r3, r3, #2
  3518. 8001b76: 440b add r3, r1
  3519. 8001b78: 005b lsls r3, r3, #1
  3520. 8001b7a: 1ad3 subs r3, r2, r3
  3521. 8001b7c: 66fb str r3, [r7, #108] @ 0x6c
  3522. while (pdTRUE) {
  3523. 8001b7e: e6b3 b.n 80018e8 <ADC2MeasTask+0x20>
  3524. 8001b80: 00000000 .word 0x00000000
  3525. 8001b84: 40efffe0 .word 0x40efffe0
  3526. 8001b88: 83e425af .word 0x83e425af
  3527. 8001b8c: 401e4d9e .word 0x401e4d9e
  3528. 8001b90: 24000594 .word 0x24000594
  3529. 8001b94: 2400059c .word 0x2400059c
  3530. 8001b98: 24000030 .word 0x24000030
  3531. 8001b9c: 453b8000 .word 0x453b8000
  3532. 8001ba0: 240005a8 .word 0x240005a8
  3533. 8001ba4: 24000610 .word 0x24000610
  3534. 8001ba8: 24000018 .word 0x24000018
  3535. 8001bac: 240005a0 .word 0x240005a0
  3536. 8001bb0: 240005ac .word 0x240005ac
  3537. 8001bb4: cccccccd .word 0xcccccccd
  3538. 08001bb8 <ADC3MeasTask>:
  3539. }
  3540. }
  3541. void ADC3MeasTask (void* arg) {
  3542. 8001bb8: b580 push {r7, lr}
  3543. 8001bba: b08c sub sp, #48 @ 0x30
  3544. 8001bbc: af00 add r7, sp, #0
  3545. 8001bbe: 6078 str r0, [r7, #4]
  3546. ADC3_Data adcData = { 0 };
  3547. 8001bc0: f107 030c add.w r3, r7, #12
  3548. 8001bc4: 2220 movs r2, #32
  3549. 8001bc6: 2100 movs r1, #0
  3550. 8001bc8: 4618 mov r0, r3
  3551. 8001bca: f011 fe0c bl 80137e6 <memset>
  3552. while (pdTRUE) {
  3553. osMessageQueueGet (adc3MeasDataQueue, &adcData, 0, osWaitForever);
  3554. 8001bce: 4b13 ldr r3, [pc, #76] @ (8001c1c <ADC3MeasTask+0x64>)
  3555. 8001bd0: 6818 ldr r0, [r3, #0]
  3556. 8001bd2: f107 010c add.w r1, r7, #12
  3557. 8001bd6: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  3558. 8001bda: 2200 movs r2, #0
  3559. 8001bdc: f00e f808 bl 800fbf0 <osMessageQueueGet>
  3560. uint32_t vRef = __LL_ADC_CALC_VREFANALOG_VOLTAGE (adcData.adcDataBuffer[VrefInt], LL_ADC_RESOLUTION_16B);
  3561. 8001be0: 4b0f ldr r3, [pc, #60] @ (8001c20 <ADC3MeasTask+0x68>)
  3562. 8001be2: 881b ldrh r3, [r3, #0]
  3563. 8001be4: 461a mov r2, r3
  3564. 8001be6: f640 43e4 movw r3, #3300 @ 0xce4
  3565. 8001bea: fb02 f303 mul.w r3, r2, r3
  3566. 8001bee: 8aba ldrh r2, [r7, #20]
  3567. 8001bf0: fbb3 f3f2 udiv r3, r3, r2
  3568. 8001bf4: 62fb str r3, [r7, #44] @ 0x2c
  3569. if (osMutexAcquire (vRefmVMutex, osWaitForever) == osOK) {
  3570. 8001bf6: 4b0b ldr r3, [pc, #44] @ (8001c24 <ADC3MeasTask+0x6c>)
  3571. 8001bf8: 681b ldr r3, [r3, #0]
  3572. 8001bfa: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  3573. 8001bfe: 4618 mov r0, r3
  3574. 8001c00: f00d fe9a bl 800f938 <osMutexAcquire>
  3575. 8001c04: 4603 mov r3, r0
  3576. 8001c06: 2b00 cmp r3, #0
  3577. 8001c08: d1e1 bne.n 8001bce <ADC3MeasTask+0x16>
  3578. vRefmV = vRef;
  3579. 8001c0a: 4a07 ldr r2, [pc, #28] @ (8001c28 <ADC3MeasTask+0x70>)
  3580. 8001c0c: 6afb ldr r3, [r7, #44] @ 0x2c
  3581. 8001c0e: 6013 str r3, [r2, #0]
  3582. osMutexRelease (vRefmVMutex);
  3583. 8001c10: 4b04 ldr r3, [pc, #16] @ (8001c24 <ADC3MeasTask+0x6c>)
  3584. 8001c12: 681b ldr r3, [r3, #0]
  3585. 8001c14: 4618 mov r0, r3
  3586. 8001c16: f00d feda bl 800f9ce <osMutexRelease>
  3587. while (pdTRUE) {
  3588. 8001c1a: e7d8 b.n 8001bce <ADC3MeasTask+0x16>
  3589. 8001c1c: 24000598 .word 0x24000598
  3590. 8001c20: 1ff1e860 .word 0x1ff1e860
  3591. 8001c24: 2400059c .word 0x2400059c
  3592. 8001c28: 24000030 .word 0x24000030
  3593. 08001c2c <DbgLEDToggle>:
  3594. {
  3595. HAL_GPIO_WritePin(GPIOD, ledNumber, GPIO_PIN_RESET);
  3596. }
  3597. void DbgLEDToggle(uint8_t ledNumber)
  3598. {
  3599. 8001c2c: b580 push {r7, lr}
  3600. 8001c2e: b082 sub sp, #8
  3601. 8001c30: af00 add r7, sp, #0
  3602. 8001c32: 4603 mov r3, r0
  3603. 8001c34: 71fb strb r3, [r7, #7]
  3604. HAL_GPIO_TogglePin(GPIOD, ledNumber);
  3605. 8001c36: 79fb ldrb r3, [r7, #7]
  3606. 8001c38: b29b uxth r3, r3
  3607. 8001c3a: 4619 mov r1, r3
  3608. 8001c3c: 4803 ldr r0, [pc, #12] @ (8001c4c <DbgLEDToggle+0x20>)
  3609. 8001c3e: f006 fbdc bl 80083fa <HAL_GPIO_TogglePin>
  3610. }
  3611. 8001c42: bf00 nop
  3612. 8001c44: 3708 adds r7, #8
  3613. 8001c46: 46bd mov sp, r7
  3614. 8001c48: bd80 pop {r7, pc}
  3615. 8001c4a: bf00 nop
  3616. 8001c4c: 58020c00 .word 0x58020c00
  3617. 08001c50 <EnableCurrentSensors>:
  3618. void EnableCurrentSensors(void)
  3619. {
  3620. 8001c50: b580 push {r7, lr}
  3621. 8001c52: af00 add r7, sp, #0
  3622. HAL_GPIO_WritePin(GPIOE, MCU_CS_PWR_EN, GPIO_PIN_SET);
  3623. 8001c54: 2201 movs r2, #1
  3624. 8001c56: f44f 4100 mov.w r1, #32768 @ 0x8000
  3625. 8001c5a: 4802 ldr r0, [pc, #8] @ (8001c64 <EnableCurrentSensors+0x14>)
  3626. 8001c5c: f006 fbb4 bl 80083c8 <HAL_GPIO_WritePin>
  3627. }
  3628. 8001c60: bf00 nop
  3629. 8001c62: bd80 pop {r7, pc}
  3630. 8001c64: 58021000 .word 0x58021000
  3631. 08001c68 <SelectCurrentSensorGain>:
  3632. {
  3633. HAL_GPIO_WritePin(GPIOE, MCU_CS_PWR_EN, GPIO_PIN_RESET);
  3634. }
  3635. void SelectCurrentSensorGain(CurrentSensor sensor, CurrentSensorGain gain)
  3636. {
  3637. 8001c68: b580 push {r7, lr}
  3638. 8001c6a: b084 sub sp, #16
  3639. 8001c6c: af00 add r7, sp, #0
  3640. 8001c6e: 4603 mov r3, r0
  3641. 8001c70: 460a mov r2, r1
  3642. 8001c72: 71fb strb r3, [r7, #7]
  3643. 8001c74: 4613 mov r3, r2
  3644. 8001c76: 71bb strb r3, [r7, #6]
  3645. uint8_t gpioOffset = 0;
  3646. 8001c78: 2300 movs r3, #0
  3647. 8001c7a: 73fb strb r3, [r7, #15]
  3648. switch(sensor)
  3649. 8001c7c: 79fb ldrb r3, [r7, #7]
  3650. 8001c7e: 2b02 cmp r3, #2
  3651. 8001c80: d00c beq.n 8001c9c <SelectCurrentSensorGain+0x34>
  3652. 8001c82: 2b02 cmp r3, #2
  3653. 8001c84: dc0d bgt.n 8001ca2 <SelectCurrentSensorGain+0x3a>
  3654. 8001c86: 2b00 cmp r3, #0
  3655. 8001c88: d002 beq.n 8001c90 <SelectCurrentSensorGain+0x28>
  3656. 8001c8a: 2b01 cmp r3, #1
  3657. 8001c8c: d003 beq.n 8001c96 <SelectCurrentSensorGain+0x2e>
  3658. break;
  3659. case CurrentSensorL3:
  3660. gpioOffset = CURRENT_SENSOR_L3_GPIO_OFFSET;
  3661. break;
  3662. default:
  3663. break;
  3664. 8001c8e: e008 b.n 8001ca2 <SelectCurrentSensorGain+0x3a>
  3665. gpioOffset = CURRENT_SENSOR_L1_GPIO_OFFSET;
  3666. 8001c90: 2307 movs r3, #7
  3667. 8001c92: 73fb strb r3, [r7, #15]
  3668. break;
  3669. 8001c94: e006 b.n 8001ca4 <SelectCurrentSensorGain+0x3c>
  3670. gpioOffset = CURRENT_SENSOR_L2_GPIO_OFFSET;
  3671. 8001c96: 2309 movs r3, #9
  3672. 8001c98: 73fb strb r3, [r7, #15]
  3673. break;
  3674. 8001c9a: e003 b.n 8001ca4 <SelectCurrentSensorGain+0x3c>
  3675. gpioOffset = CURRENT_SENSOR_L3_GPIO_OFFSET;
  3676. 8001c9c: 230d movs r3, #13
  3677. 8001c9e: 73fb strb r3, [r7, #15]
  3678. break;
  3679. 8001ca0: e000 b.n 8001ca4 <SelectCurrentSensorGain+0x3c>
  3680. break;
  3681. 8001ca2: bf00 nop
  3682. }
  3683. if(gpioOffset > 0)
  3684. 8001ca4: 7bfb ldrb r3, [r7, #15]
  3685. 8001ca6: 2b00 cmp r3, #0
  3686. 8001ca8: d023 beq.n 8001cf2 <SelectCurrentSensorGain+0x8a>
  3687. {
  3688. uint16_t gain0Gpio = 1 << gpioOffset;
  3689. 8001caa: 7bfb ldrb r3, [r7, #15]
  3690. 8001cac: 2201 movs r2, #1
  3691. 8001cae: fa02 f303 lsl.w r3, r2, r3
  3692. 8001cb2: 81bb strh r3, [r7, #12]
  3693. uint16_t gain1Gpio = 1 << (gpioOffset + 1);
  3694. 8001cb4: 7bfb ldrb r3, [r7, #15]
  3695. 8001cb6: 3301 adds r3, #1
  3696. 8001cb8: 2201 movs r2, #1
  3697. 8001cba: fa02 f303 lsl.w r3, r2, r3
  3698. 8001cbe: 817b strh r3, [r7, #10]
  3699. uint16_t gpioState = ((uint16_t)gain) & 0x0001;
  3700. 8001cc0: 79bb ldrb r3, [r7, #6]
  3701. 8001cc2: b29b uxth r3, r3
  3702. 8001cc4: f003 0301 and.w r3, r3, #1
  3703. 8001cc8: 813b strh r3, [r7, #8]
  3704. HAL_GPIO_WritePin(GPIOE, gain0Gpio, gpioState);
  3705. 8001cca: 893b ldrh r3, [r7, #8]
  3706. 8001ccc: b2da uxtb r2, r3
  3707. 8001cce: 89bb ldrh r3, [r7, #12]
  3708. 8001cd0: 4619 mov r1, r3
  3709. 8001cd2: 480a ldr r0, [pc, #40] @ (8001cfc <SelectCurrentSensorGain+0x94>)
  3710. 8001cd4: f006 fb78 bl 80083c8 <HAL_GPIO_WritePin>
  3711. gpioState = (((uint16_t)gain) >> 1) & 0x0001;
  3712. 8001cd8: 79bb ldrb r3, [r7, #6]
  3713. 8001cda: 085b lsrs r3, r3, #1
  3714. 8001cdc: b2db uxtb r3, r3
  3715. 8001cde: f003 0301 and.w r3, r3, #1
  3716. 8001ce2: 813b strh r3, [r7, #8]
  3717. HAL_GPIO_WritePin(GPIOE, gain1Gpio, gpioState);
  3718. 8001ce4: 893b ldrh r3, [r7, #8]
  3719. 8001ce6: b2da uxtb r2, r3
  3720. 8001ce8: 897b ldrh r3, [r7, #10]
  3721. 8001cea: 4619 mov r1, r3
  3722. 8001cec: 4803 ldr r0, [pc, #12] @ (8001cfc <SelectCurrentSensorGain+0x94>)
  3723. 8001cee: f006 fb6b bl 80083c8 <HAL_GPIO_WritePin>
  3724. }
  3725. }
  3726. 8001cf2: bf00 nop
  3727. 8001cf4: 3710 adds r7, #16
  3728. 8001cf6: 46bd mov sp, r7
  3729. 8001cf8: bd80 pop {r7, pc}
  3730. 8001cfa: bf00 nop
  3731. 8001cfc: 58021000 .word 0x58021000
  3732. 08001d00 <WriteDataToBuffer>:
  3733. buff[newBuffPos++] = (uint8_t)((uData >> (i * 8)) & 0xFF);
  3734. }
  3735. *buffPos = newBuffPos;
  3736. }
  3737. void WriteDataToBuffer (uint8_t* buff, uint16_t* buffPos, void* data, uint8_t dataSize) {
  3738. 8001d00: b480 push {r7}
  3739. 8001d02: b089 sub sp, #36 @ 0x24
  3740. 8001d04: af00 add r7, sp, #0
  3741. 8001d06: 60f8 str r0, [r7, #12]
  3742. 8001d08: 60b9 str r1, [r7, #8]
  3743. 8001d0a: 607a str r2, [r7, #4]
  3744. 8001d0c: 70fb strb r3, [r7, #3]
  3745. uint32_t* uDataPtr = data;
  3746. 8001d0e: 687b ldr r3, [r7, #4]
  3747. 8001d10: 61bb str r3, [r7, #24]
  3748. uint32_t uData = *uDataPtr;
  3749. 8001d12: 69bb ldr r3, [r7, #24]
  3750. 8001d14: 681b ldr r3, [r3, #0]
  3751. 8001d16: 617b str r3, [r7, #20]
  3752. uint8_t i = 0;
  3753. 8001d18: 2300 movs r3, #0
  3754. 8001d1a: 77fb strb r3, [r7, #31]
  3755. uint8_t newBuffPos = *buffPos;
  3756. 8001d1c: 68bb ldr r3, [r7, #8]
  3757. 8001d1e: 881b ldrh r3, [r3, #0]
  3758. 8001d20: 77bb strb r3, [r7, #30]
  3759. for (i = 0; i < dataSize; i++) {
  3760. 8001d22: 2300 movs r3, #0
  3761. 8001d24: 77fb strb r3, [r7, #31]
  3762. 8001d26: e00e b.n 8001d46 <WriteDataToBuffer+0x46>
  3763. buff[newBuffPos++] = (uint8_t)((uData >> (i * 8)) & 0xFF);
  3764. 8001d28: 7ffb ldrb r3, [r7, #31]
  3765. 8001d2a: 00db lsls r3, r3, #3
  3766. 8001d2c: 697a ldr r2, [r7, #20]
  3767. 8001d2e: 40da lsrs r2, r3
  3768. 8001d30: 7fbb ldrb r3, [r7, #30]
  3769. 8001d32: 1c59 adds r1, r3, #1
  3770. 8001d34: 77b9 strb r1, [r7, #30]
  3771. 8001d36: 4619 mov r1, r3
  3772. 8001d38: 68fb ldr r3, [r7, #12]
  3773. 8001d3a: 440b add r3, r1
  3774. 8001d3c: b2d2 uxtb r2, r2
  3775. 8001d3e: 701a strb r2, [r3, #0]
  3776. for (i = 0; i < dataSize; i++) {
  3777. 8001d40: 7ffb ldrb r3, [r7, #31]
  3778. 8001d42: 3301 adds r3, #1
  3779. 8001d44: 77fb strb r3, [r7, #31]
  3780. 8001d46: 7ffa ldrb r2, [r7, #31]
  3781. 8001d48: 78fb ldrb r3, [r7, #3]
  3782. 8001d4a: 429a cmp r2, r3
  3783. 8001d4c: d3ec bcc.n 8001d28 <WriteDataToBuffer+0x28>
  3784. }
  3785. *buffPos = newBuffPos;
  3786. 8001d4e: 7fbb ldrb r3, [r7, #30]
  3787. 8001d50: b29a uxth r2, r3
  3788. 8001d52: 68bb ldr r3, [r7, #8]
  3789. 8001d54: 801a strh r2, [r3, #0]
  3790. }
  3791. 8001d56: bf00 nop
  3792. 8001d58: 3724 adds r7, #36 @ 0x24
  3793. 8001d5a: 46bd mov sp, r7
  3794. 8001d5c: f85d 7b04 ldr.w r7, [sp], #4
  3795. 8001d60: 4770 bx lr
  3796. ...
  3797. 08001d64 <PrepareRespFrame>:
  3798. txBuffer[txBufferPos++] = GET_SHORT_WORD_SECOND_BYTE (crc);
  3799. return txBufferPos;
  3800. }
  3801. uint16_t PrepareRespFrame (uint8_t* txBuffer, uint16_t frameId, SerialProtocolCommands frameCommand, SerialProtocolRespStatus respStatus, uint8_t* dataBuffer, uint16_t dataLength) {
  3802. 8001d64: b580 push {r7, lr}
  3803. 8001d66: b084 sub sp, #16
  3804. 8001d68: af00 add r7, sp, #0
  3805. 8001d6a: 6078 str r0, [r7, #4]
  3806. 8001d6c: 4608 mov r0, r1
  3807. 8001d6e: 4611 mov r1, r2
  3808. 8001d70: 461a mov r2, r3
  3809. 8001d72: 4603 mov r3, r0
  3810. 8001d74: 807b strh r3, [r7, #2]
  3811. 8001d76: 460b mov r3, r1
  3812. 8001d78: 707b strb r3, [r7, #1]
  3813. 8001d7a: 4613 mov r3, r2
  3814. 8001d7c: 703b strb r3, [r7, #0]
  3815. uint16_t crc = 0;
  3816. 8001d7e: 2300 movs r3, #0
  3817. 8001d80: 81bb strh r3, [r7, #12]
  3818. uint16_t txBufferPos = 0;
  3819. 8001d82: 2300 movs r3, #0
  3820. 8001d84: 81fb strh r3, [r7, #14]
  3821. uint16_t frameCmd = ((uint16_t)frameCommand) | 0x8000; // MSB set means response
  3822. 8001d86: 787b ldrb r3, [r7, #1]
  3823. 8001d88: b21a sxth r2, r3
  3824. 8001d8a: 4b43 ldr r3, [pc, #268] @ (8001e98 <PrepareRespFrame+0x134>)
  3825. 8001d8c: 4313 orrs r3, r2
  3826. 8001d8e: b21b sxth r3, r3
  3827. 8001d90: 817b strh r3, [r7, #10]
  3828. memset (txBuffer, 0x00, dataLength);
  3829. 8001d92: 8bbb ldrh r3, [r7, #28]
  3830. 8001d94: 461a mov r2, r3
  3831. 8001d96: 2100 movs r1, #0
  3832. 8001d98: 6878 ldr r0, [r7, #4]
  3833. 8001d9a: f011 fd24 bl 80137e6 <memset>
  3834. txBuffer[txBufferPos++] = FRAME_INDICATOR;
  3835. 8001d9e: 89fb ldrh r3, [r7, #14]
  3836. 8001da0: 1c5a adds r2, r3, #1
  3837. 8001da2: 81fa strh r2, [r7, #14]
  3838. 8001da4: 461a mov r2, r3
  3839. 8001da6: 687b ldr r3, [r7, #4]
  3840. 8001da8: 4413 add r3, r2
  3841. 8001daa: 22aa movs r2, #170 @ 0xaa
  3842. 8001dac: 701a strb r2, [r3, #0]
  3843. txBuffer[txBufferPos++] = GET_SHORT_WORD_FIRST_BYTE (frameId);
  3844. 8001dae: 89fb ldrh r3, [r7, #14]
  3845. 8001db0: 1c5a adds r2, r3, #1
  3846. 8001db2: 81fa strh r2, [r7, #14]
  3847. 8001db4: 461a mov r2, r3
  3848. 8001db6: 687b ldr r3, [r7, #4]
  3849. 8001db8: 4413 add r3, r2
  3850. 8001dba: 887a ldrh r2, [r7, #2]
  3851. 8001dbc: b2d2 uxtb r2, r2
  3852. 8001dbe: 701a strb r2, [r3, #0]
  3853. txBuffer[txBufferPos++] = GET_SHORT_WORD_SECOND_BYTE (frameId);
  3854. 8001dc0: 887b ldrh r3, [r7, #2]
  3855. 8001dc2: 0a1b lsrs r3, r3, #8
  3856. 8001dc4: b29a uxth r2, r3
  3857. 8001dc6: 89fb ldrh r3, [r7, #14]
  3858. 8001dc8: 1c59 adds r1, r3, #1
  3859. 8001dca: 81f9 strh r1, [r7, #14]
  3860. 8001dcc: 4619 mov r1, r3
  3861. 8001dce: 687b ldr r3, [r7, #4]
  3862. 8001dd0: 440b add r3, r1
  3863. 8001dd2: b2d2 uxtb r2, r2
  3864. 8001dd4: 701a strb r2, [r3, #0]
  3865. txBuffer[txBufferPos++] = GET_SHORT_WORD_FIRST_BYTE (frameCmd);
  3866. 8001dd6: 89fb ldrh r3, [r7, #14]
  3867. 8001dd8: 1c5a adds r2, r3, #1
  3868. 8001dda: 81fa strh r2, [r7, #14]
  3869. 8001ddc: 461a mov r2, r3
  3870. 8001dde: 687b ldr r3, [r7, #4]
  3871. 8001de0: 4413 add r3, r2
  3872. 8001de2: 897a ldrh r2, [r7, #10]
  3873. 8001de4: b2d2 uxtb r2, r2
  3874. 8001de6: 701a strb r2, [r3, #0]
  3875. txBuffer[txBufferPos++] = GET_SHORT_WORD_SECOND_BYTE (frameCmd);
  3876. 8001de8: 897b ldrh r3, [r7, #10]
  3877. 8001dea: 0a1b lsrs r3, r3, #8
  3878. 8001dec: b29a uxth r2, r3
  3879. 8001dee: 89fb ldrh r3, [r7, #14]
  3880. 8001df0: 1c59 adds r1, r3, #1
  3881. 8001df2: 81f9 strh r1, [r7, #14]
  3882. 8001df4: 4619 mov r1, r3
  3883. 8001df6: 687b ldr r3, [r7, #4]
  3884. 8001df8: 440b add r3, r1
  3885. 8001dfa: b2d2 uxtb r2, r2
  3886. 8001dfc: 701a strb r2, [r3, #0]
  3887. txBuffer[txBufferPos++] = GET_SHORT_WORD_FIRST_BYTE (dataLength);
  3888. 8001dfe: 89fb ldrh r3, [r7, #14]
  3889. 8001e00: 1c5a adds r2, r3, #1
  3890. 8001e02: 81fa strh r2, [r7, #14]
  3891. 8001e04: 461a mov r2, r3
  3892. 8001e06: 687b ldr r3, [r7, #4]
  3893. 8001e08: 4413 add r3, r2
  3894. 8001e0a: 8bba ldrh r2, [r7, #28]
  3895. 8001e0c: b2d2 uxtb r2, r2
  3896. 8001e0e: 701a strb r2, [r3, #0]
  3897. txBuffer[txBufferPos++] = GET_SHORT_WORD_SECOND_BYTE (dataLength);
  3898. 8001e10: 8bbb ldrh r3, [r7, #28]
  3899. 8001e12: 0a1b lsrs r3, r3, #8
  3900. 8001e14: b29a uxth r2, r3
  3901. 8001e16: 89fb ldrh r3, [r7, #14]
  3902. 8001e18: 1c59 adds r1, r3, #1
  3903. 8001e1a: 81f9 strh r1, [r7, #14]
  3904. 8001e1c: 4619 mov r1, r3
  3905. 8001e1e: 687b ldr r3, [r7, #4]
  3906. 8001e20: 440b add r3, r1
  3907. 8001e22: b2d2 uxtb r2, r2
  3908. 8001e24: 701a strb r2, [r3, #0]
  3909. txBuffer[txBufferPos++] = (uint8_t)respStatus;
  3910. 8001e26: 89fb ldrh r3, [r7, #14]
  3911. 8001e28: 1c5a adds r2, r3, #1
  3912. 8001e2a: 81fa strh r2, [r7, #14]
  3913. 8001e2c: 461a mov r2, r3
  3914. 8001e2e: 687b ldr r3, [r7, #4]
  3915. 8001e30: 4413 add r3, r2
  3916. 8001e32: 783a ldrb r2, [r7, #0]
  3917. 8001e34: 701a strb r2, [r3, #0]
  3918. if (dataLength > 0) {
  3919. 8001e36: 8bbb ldrh r3, [r7, #28]
  3920. 8001e38: 2b00 cmp r3, #0
  3921. 8001e3a: d00b beq.n 8001e54 <PrepareRespFrame+0xf0>
  3922. memcpy (&txBuffer[txBufferPos], dataBuffer, dataLength);
  3923. 8001e3c: 89fb ldrh r3, [r7, #14]
  3924. 8001e3e: 687a ldr r2, [r7, #4]
  3925. 8001e40: 4413 add r3, r2
  3926. 8001e42: 8bba ldrh r2, [r7, #28]
  3927. 8001e44: 69b9 ldr r1, [r7, #24]
  3928. 8001e46: 4618 mov r0, r3
  3929. 8001e48: f011 fd9f bl 801398a <memcpy>
  3930. txBufferPos += dataLength;
  3931. 8001e4c: 89fa ldrh r2, [r7, #14]
  3932. 8001e4e: 8bbb ldrh r3, [r7, #28]
  3933. 8001e50: 4413 add r3, r2
  3934. 8001e52: 81fb strh r3, [r7, #14]
  3935. }
  3936. crc = HAL_CRC_Calculate (&hcrc, (uint32_t*)txBuffer, txBufferPos);
  3937. 8001e54: 89fb ldrh r3, [r7, #14]
  3938. 8001e56: 461a mov r2, r3
  3939. 8001e58: 6879 ldr r1, [r7, #4]
  3940. 8001e5a: 4810 ldr r0, [pc, #64] @ (8001e9c <PrepareRespFrame+0x138>)
  3941. 8001e5c: f003 f926 bl 80050ac <HAL_CRC_Calculate>
  3942. 8001e60: 4603 mov r3, r0
  3943. 8001e62: 81bb strh r3, [r7, #12]
  3944. txBuffer[txBufferPos++] = GET_SHORT_WORD_FIRST_BYTE (crc);
  3945. 8001e64: 89fb ldrh r3, [r7, #14]
  3946. 8001e66: 1c5a adds r2, r3, #1
  3947. 8001e68: 81fa strh r2, [r7, #14]
  3948. 8001e6a: 461a mov r2, r3
  3949. 8001e6c: 687b ldr r3, [r7, #4]
  3950. 8001e6e: 4413 add r3, r2
  3951. 8001e70: 89ba ldrh r2, [r7, #12]
  3952. 8001e72: b2d2 uxtb r2, r2
  3953. 8001e74: 701a strb r2, [r3, #0]
  3954. txBuffer[txBufferPos++] = GET_SHORT_WORD_SECOND_BYTE (crc);
  3955. 8001e76: 89bb ldrh r3, [r7, #12]
  3956. 8001e78: 0a1b lsrs r3, r3, #8
  3957. 8001e7a: b29a uxth r2, r3
  3958. 8001e7c: 89fb ldrh r3, [r7, #14]
  3959. 8001e7e: 1c59 adds r1, r3, #1
  3960. 8001e80: 81f9 strh r1, [r7, #14]
  3961. 8001e82: 4619 mov r1, r3
  3962. 8001e84: 687b ldr r3, [r7, #4]
  3963. 8001e86: 440b add r3, r1
  3964. 8001e88: b2d2 uxtb r2, r2
  3965. 8001e8a: 701a strb r2, [r3, #0]
  3966. return txBufferPos;
  3967. 8001e8c: 89fb ldrh r3, [r7, #14]
  3968. }
  3969. 8001e8e: 4618 mov r0, r3
  3970. 8001e90: 3710 adds r7, #16
  3971. 8001e92: 46bd mov sp, r7
  3972. 8001e94: bd80 pop {r7, pc}
  3973. 8001e96: bf00 nop
  3974. 8001e98: ffff8000 .word 0xffff8000
  3975. 8001e9c: 240003d4 .word 0x240003d4
  3976. 08001ea0 <HAL_MspInit>:
  3977. /* USER CODE END 0 */
  3978. /**
  3979. * Initializes the Global MSP.
  3980. */
  3981. void HAL_MspInit(void)
  3982. {
  3983. 8001ea0: b580 push {r7, lr}
  3984. 8001ea2: b082 sub sp, #8
  3985. 8001ea4: af00 add r7, sp, #0
  3986. /* USER CODE BEGIN MspInit 0 */
  3987. /* USER CODE END MspInit 0 */
  3988. __HAL_RCC_SYSCFG_CLK_ENABLE();
  3989. 8001ea6: 4b10 ldr r3, [pc, #64] @ (8001ee8 <HAL_MspInit+0x48>)
  3990. 8001ea8: f8d3 30f4 ldr.w r3, [r3, #244] @ 0xf4
  3991. 8001eac: 4a0e ldr r2, [pc, #56] @ (8001ee8 <HAL_MspInit+0x48>)
  3992. 8001eae: f043 0302 orr.w r3, r3, #2
  3993. 8001eb2: f8c2 30f4 str.w r3, [r2, #244] @ 0xf4
  3994. 8001eb6: 4b0c ldr r3, [pc, #48] @ (8001ee8 <HAL_MspInit+0x48>)
  3995. 8001eb8: f8d3 30f4 ldr.w r3, [r3, #244] @ 0xf4
  3996. 8001ebc: f003 0302 and.w r3, r3, #2
  3997. 8001ec0: 607b str r3, [r7, #4]
  3998. 8001ec2: 687b ldr r3, [r7, #4]
  3999. /* System interrupt init*/
  4000. /* PendSV_IRQn interrupt configuration */
  4001. HAL_NVIC_SetPriority(PendSV_IRQn, 15, 0);
  4002. 8001ec4: 2200 movs r2, #0
  4003. 8001ec6: 210f movs r1, #15
  4004. 8001ec8: f06f 0001 mvn.w r0, #1
  4005. 8001ecc: f002 ffea bl 8004ea4 <HAL_NVIC_SetPriority>
  4006. /* Peripheral interrupt init */
  4007. /* RCC_IRQn interrupt configuration */
  4008. HAL_NVIC_SetPriority(RCC_IRQn, 5, 0);
  4009. 8001ed0: 2200 movs r2, #0
  4010. 8001ed2: 2105 movs r1, #5
  4011. 8001ed4: 2005 movs r0, #5
  4012. 8001ed6: f002 ffe5 bl 8004ea4 <HAL_NVIC_SetPriority>
  4013. HAL_NVIC_EnableIRQ(RCC_IRQn);
  4014. 8001eda: 2005 movs r0, #5
  4015. 8001edc: f002 fffc bl 8004ed8 <HAL_NVIC_EnableIRQ>
  4016. /* USER CODE BEGIN MspInit 1 */
  4017. /* USER CODE END MspInit 1 */
  4018. }
  4019. 8001ee0: bf00 nop
  4020. 8001ee2: 3708 adds r7, #8
  4021. 8001ee4: 46bd mov sp, r7
  4022. 8001ee6: bd80 pop {r7, pc}
  4023. 8001ee8: 58024400 .word 0x58024400
  4024. 08001eec <HAL_ADC_MspInit>:
  4025. * This function configures the hardware resources used in this example
  4026. * @param hadc: ADC handle pointer
  4027. * @retval None
  4028. */
  4029. void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
  4030. {
  4031. 8001eec: b580 push {r7, lr}
  4032. 8001eee: b092 sub sp, #72 @ 0x48
  4033. 8001ef0: af00 add r7, sp, #0
  4034. 8001ef2: 6078 str r0, [r7, #4]
  4035. GPIO_InitTypeDef GPIO_InitStruct = {0};
  4036. 8001ef4: f107 0334 add.w r3, r7, #52 @ 0x34
  4037. 8001ef8: 2200 movs r2, #0
  4038. 8001efa: 601a str r2, [r3, #0]
  4039. 8001efc: 605a str r2, [r3, #4]
  4040. 8001efe: 609a str r2, [r3, #8]
  4041. 8001f00: 60da str r2, [r3, #12]
  4042. 8001f02: 611a str r2, [r3, #16]
  4043. if(hadc->Instance==ADC1)
  4044. 8001f04: 687b ldr r3, [r7, #4]
  4045. 8001f06: 681b ldr r3, [r3, #0]
  4046. 8001f08: 4a9d ldr r2, [pc, #628] @ (8002180 <HAL_ADC_MspInit+0x294>)
  4047. 8001f0a: 4293 cmp r3, r2
  4048. 8001f0c: f040 8099 bne.w 8002042 <HAL_ADC_MspInit+0x156>
  4049. {
  4050. /* USER CODE BEGIN ADC1_MspInit 0 */
  4051. /* USER CODE END ADC1_MspInit 0 */
  4052. /* Peripheral clock enable */
  4053. HAL_RCC_ADC12_CLK_ENABLED++;
  4054. 8001f10: 4b9c ldr r3, [pc, #624] @ (8002184 <HAL_ADC_MspInit+0x298>)
  4055. 8001f12: 681b ldr r3, [r3, #0]
  4056. 8001f14: 3301 adds r3, #1
  4057. 8001f16: 4a9b ldr r2, [pc, #620] @ (8002184 <HAL_ADC_MspInit+0x298>)
  4058. 8001f18: 6013 str r3, [r2, #0]
  4059. if(HAL_RCC_ADC12_CLK_ENABLED==1){
  4060. 8001f1a: 4b9a ldr r3, [pc, #616] @ (8002184 <HAL_ADC_MspInit+0x298>)
  4061. 8001f1c: 681b ldr r3, [r3, #0]
  4062. 8001f1e: 2b01 cmp r3, #1
  4063. 8001f20: d10e bne.n 8001f40 <HAL_ADC_MspInit+0x54>
  4064. __HAL_RCC_ADC12_CLK_ENABLE();
  4065. 8001f22: 4b99 ldr r3, [pc, #612] @ (8002188 <HAL_ADC_MspInit+0x29c>)
  4066. 8001f24: f8d3 30d8 ldr.w r3, [r3, #216] @ 0xd8
  4067. 8001f28: 4a97 ldr r2, [pc, #604] @ (8002188 <HAL_ADC_MspInit+0x29c>)
  4068. 8001f2a: f043 0320 orr.w r3, r3, #32
  4069. 8001f2e: f8c2 30d8 str.w r3, [r2, #216] @ 0xd8
  4070. 8001f32: 4b95 ldr r3, [pc, #596] @ (8002188 <HAL_ADC_MspInit+0x29c>)
  4071. 8001f34: f8d3 30d8 ldr.w r3, [r3, #216] @ 0xd8
  4072. 8001f38: f003 0320 and.w r3, r3, #32
  4073. 8001f3c: 633b str r3, [r7, #48] @ 0x30
  4074. 8001f3e: 6b3b ldr r3, [r7, #48] @ 0x30
  4075. }
  4076. __HAL_RCC_GPIOA_CLK_ENABLE();
  4077. 8001f40: 4b91 ldr r3, [pc, #580] @ (8002188 <HAL_ADC_MspInit+0x29c>)
  4078. 8001f42: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  4079. 8001f46: 4a90 ldr r2, [pc, #576] @ (8002188 <HAL_ADC_MspInit+0x29c>)
  4080. 8001f48: f043 0301 orr.w r3, r3, #1
  4081. 8001f4c: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  4082. 8001f50: 4b8d ldr r3, [pc, #564] @ (8002188 <HAL_ADC_MspInit+0x29c>)
  4083. 8001f52: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  4084. 8001f56: f003 0301 and.w r3, r3, #1
  4085. 8001f5a: 62fb str r3, [r7, #44] @ 0x2c
  4086. 8001f5c: 6afb ldr r3, [r7, #44] @ 0x2c
  4087. __HAL_RCC_GPIOC_CLK_ENABLE();
  4088. 8001f5e: 4b8a ldr r3, [pc, #552] @ (8002188 <HAL_ADC_MspInit+0x29c>)
  4089. 8001f60: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  4090. 8001f64: 4a88 ldr r2, [pc, #544] @ (8002188 <HAL_ADC_MspInit+0x29c>)
  4091. 8001f66: f043 0304 orr.w r3, r3, #4
  4092. 8001f6a: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  4093. 8001f6e: 4b86 ldr r3, [pc, #536] @ (8002188 <HAL_ADC_MspInit+0x29c>)
  4094. 8001f70: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  4095. 8001f74: f003 0304 and.w r3, r3, #4
  4096. 8001f78: 62bb str r3, [r7, #40] @ 0x28
  4097. 8001f7a: 6abb ldr r3, [r7, #40] @ 0x28
  4098. __HAL_RCC_GPIOB_CLK_ENABLE();
  4099. 8001f7c: 4b82 ldr r3, [pc, #520] @ (8002188 <HAL_ADC_MspInit+0x29c>)
  4100. 8001f7e: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  4101. 8001f82: 4a81 ldr r2, [pc, #516] @ (8002188 <HAL_ADC_MspInit+0x29c>)
  4102. 8001f84: f043 0302 orr.w r3, r3, #2
  4103. 8001f88: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  4104. 8001f8c: 4b7e ldr r3, [pc, #504] @ (8002188 <HAL_ADC_MspInit+0x29c>)
  4105. 8001f8e: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  4106. 8001f92: f003 0302 and.w r3, r3, #2
  4107. 8001f96: 627b str r3, [r7, #36] @ 0x24
  4108. 8001f98: 6a7b ldr r3, [r7, #36] @ 0x24
  4109. PA2 ------> ADC1_INP14
  4110. PA7 ------> ADC1_INP7
  4111. PC5 ------> ADC1_INP8
  4112. PB0 ------> ADC1_INP9
  4113. */
  4114. GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_7;
  4115. 8001f9a: 2387 movs r3, #135 @ 0x87
  4116. 8001f9c: 637b str r3, [r7, #52] @ 0x34
  4117. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  4118. 8001f9e: 2303 movs r3, #3
  4119. 8001fa0: 63bb str r3, [r7, #56] @ 0x38
  4120. GPIO_InitStruct.Pull = GPIO_NOPULL;
  4121. 8001fa2: 2300 movs r3, #0
  4122. 8001fa4: 63fb str r3, [r7, #60] @ 0x3c
  4123. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  4124. 8001fa6: f107 0334 add.w r3, r7, #52 @ 0x34
  4125. 8001faa: 4619 mov r1, r3
  4126. 8001fac: 4877 ldr r0, [pc, #476] @ (800218c <HAL_ADC_MspInit+0x2a0>)
  4127. 8001fae: f006 f85b bl 8008068 <HAL_GPIO_Init>
  4128. GPIO_InitStruct.Pin = GPIO_PIN_5;
  4129. 8001fb2: 2320 movs r3, #32
  4130. 8001fb4: 637b str r3, [r7, #52] @ 0x34
  4131. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  4132. 8001fb6: 2303 movs r3, #3
  4133. 8001fb8: 63bb str r3, [r7, #56] @ 0x38
  4134. GPIO_InitStruct.Pull = GPIO_NOPULL;
  4135. 8001fba: 2300 movs r3, #0
  4136. 8001fbc: 63fb str r3, [r7, #60] @ 0x3c
  4137. HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  4138. 8001fbe: f107 0334 add.w r3, r7, #52 @ 0x34
  4139. 8001fc2: 4619 mov r1, r3
  4140. 8001fc4: 4872 ldr r0, [pc, #456] @ (8002190 <HAL_ADC_MspInit+0x2a4>)
  4141. 8001fc6: f006 f84f bl 8008068 <HAL_GPIO_Init>
  4142. GPIO_InitStruct.Pin = GPIO_PIN_0;
  4143. 8001fca: 2301 movs r3, #1
  4144. 8001fcc: 637b str r3, [r7, #52] @ 0x34
  4145. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  4146. 8001fce: 2303 movs r3, #3
  4147. 8001fd0: 63bb str r3, [r7, #56] @ 0x38
  4148. GPIO_InitStruct.Pull = GPIO_NOPULL;
  4149. 8001fd2: 2300 movs r3, #0
  4150. 8001fd4: 63fb str r3, [r7, #60] @ 0x3c
  4151. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  4152. 8001fd6: f107 0334 add.w r3, r7, #52 @ 0x34
  4153. 8001fda: 4619 mov r1, r3
  4154. 8001fdc: 486d ldr r0, [pc, #436] @ (8002194 <HAL_ADC_MspInit+0x2a8>)
  4155. 8001fde: f006 f843 bl 8008068 <HAL_GPIO_Init>
  4156. /* ADC1 DMA Init */
  4157. /* ADC1 Init */
  4158. hdma_adc1.Instance = DMA1_Stream0;
  4159. 8001fe2: 4b6d ldr r3, [pc, #436] @ (8002198 <HAL_ADC_MspInit+0x2ac>)
  4160. 8001fe4: 4a6d ldr r2, [pc, #436] @ (800219c <HAL_ADC_MspInit+0x2b0>)
  4161. 8001fe6: 601a str r2, [r3, #0]
  4162. hdma_adc1.Init.Request = DMA_REQUEST_ADC1;
  4163. 8001fe8: 4b6b ldr r3, [pc, #428] @ (8002198 <HAL_ADC_MspInit+0x2ac>)
  4164. 8001fea: 2209 movs r2, #9
  4165. 8001fec: 605a str r2, [r3, #4]
  4166. hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY;
  4167. 8001fee: 4b6a ldr r3, [pc, #424] @ (8002198 <HAL_ADC_MspInit+0x2ac>)
  4168. 8001ff0: 2200 movs r2, #0
  4169. 8001ff2: 609a str r2, [r3, #8]
  4170. hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE;
  4171. 8001ff4: 4b68 ldr r3, [pc, #416] @ (8002198 <HAL_ADC_MspInit+0x2ac>)
  4172. 8001ff6: 2200 movs r2, #0
  4173. 8001ff8: 60da str r2, [r3, #12]
  4174. hdma_adc1.Init.MemInc = DMA_MINC_ENABLE;
  4175. 8001ffa: 4b67 ldr r3, [pc, #412] @ (8002198 <HAL_ADC_MspInit+0x2ac>)
  4176. 8001ffc: f44f 6280 mov.w r2, #1024 @ 0x400
  4177. 8002000: 611a str r2, [r3, #16]
  4178. hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
  4179. 8002002: 4b65 ldr r3, [pc, #404] @ (8002198 <HAL_ADC_MspInit+0x2ac>)
  4180. 8002004: f44f 6200 mov.w r2, #2048 @ 0x800
  4181. 8002008: 615a str r2, [r3, #20]
  4182. hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
  4183. 800200a: 4b63 ldr r3, [pc, #396] @ (8002198 <HAL_ADC_MspInit+0x2ac>)
  4184. 800200c: f44f 5200 mov.w r2, #8192 @ 0x2000
  4185. 8002010: 619a str r2, [r3, #24]
  4186. hdma_adc1.Init.Mode = DMA_NORMAL;
  4187. 8002012: 4b61 ldr r3, [pc, #388] @ (8002198 <HAL_ADC_MspInit+0x2ac>)
  4188. 8002014: 2200 movs r2, #0
  4189. 8002016: 61da str r2, [r3, #28]
  4190. hdma_adc1.Init.Priority = DMA_PRIORITY_LOW;
  4191. 8002018: 4b5f ldr r3, [pc, #380] @ (8002198 <HAL_ADC_MspInit+0x2ac>)
  4192. 800201a: 2200 movs r2, #0
  4193. 800201c: 621a str r2, [r3, #32]
  4194. hdma_adc1.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
  4195. 800201e: 4b5e ldr r3, [pc, #376] @ (8002198 <HAL_ADC_MspInit+0x2ac>)
  4196. 8002020: 2200 movs r2, #0
  4197. 8002022: 625a str r2, [r3, #36] @ 0x24
  4198. if (HAL_DMA_Init(&hdma_adc1) != HAL_OK)
  4199. 8002024: 485c ldr r0, [pc, #368] @ (8002198 <HAL_ADC_MspInit+0x2ac>)
  4200. 8002026: f003 f9e3 bl 80053f0 <HAL_DMA_Init>
  4201. 800202a: 4603 mov r3, r0
  4202. 800202c: 2b00 cmp r3, #0
  4203. 800202e: d001 beq.n 8002034 <HAL_ADC_MspInit+0x148>
  4204. {
  4205. Error_Handler();
  4206. 8002030: f7ff fa2e bl 8001490 <Error_Handler>
  4207. }
  4208. __HAL_LINKDMA(hadc,DMA_Handle,hdma_adc1);
  4209. 8002034: 687b ldr r3, [r7, #4]
  4210. 8002036: 4a58 ldr r2, [pc, #352] @ (8002198 <HAL_ADC_MspInit+0x2ac>)
  4211. 8002038: 64da str r2, [r3, #76] @ 0x4c
  4212. 800203a: 4a57 ldr r2, [pc, #348] @ (8002198 <HAL_ADC_MspInit+0x2ac>)
  4213. 800203c: 687b ldr r3, [r7, #4]
  4214. 800203e: 6393 str r3, [r2, #56] @ 0x38
  4215. /* USER CODE BEGIN ADC3_MspInit 1 */
  4216. /* USER CODE END ADC3_MspInit 1 */
  4217. }
  4218. }
  4219. 8002040: e11e b.n 8002280 <HAL_ADC_MspInit+0x394>
  4220. else if(hadc->Instance==ADC2)
  4221. 8002042: 687b ldr r3, [r7, #4]
  4222. 8002044: 681b ldr r3, [r3, #0]
  4223. 8002046: 4a56 ldr r2, [pc, #344] @ (80021a0 <HAL_ADC_MspInit+0x2b4>)
  4224. 8002048: 4293 cmp r3, r2
  4225. 800204a: f040 80af bne.w 80021ac <HAL_ADC_MspInit+0x2c0>
  4226. HAL_RCC_ADC12_CLK_ENABLED++;
  4227. 800204e: 4b4d ldr r3, [pc, #308] @ (8002184 <HAL_ADC_MspInit+0x298>)
  4228. 8002050: 681b ldr r3, [r3, #0]
  4229. 8002052: 3301 adds r3, #1
  4230. 8002054: 4a4b ldr r2, [pc, #300] @ (8002184 <HAL_ADC_MspInit+0x298>)
  4231. 8002056: 6013 str r3, [r2, #0]
  4232. if(HAL_RCC_ADC12_CLK_ENABLED==1){
  4233. 8002058: 4b4a ldr r3, [pc, #296] @ (8002184 <HAL_ADC_MspInit+0x298>)
  4234. 800205a: 681b ldr r3, [r3, #0]
  4235. 800205c: 2b01 cmp r3, #1
  4236. 800205e: d10e bne.n 800207e <HAL_ADC_MspInit+0x192>
  4237. __HAL_RCC_ADC12_CLK_ENABLE();
  4238. 8002060: 4b49 ldr r3, [pc, #292] @ (8002188 <HAL_ADC_MspInit+0x29c>)
  4239. 8002062: f8d3 30d8 ldr.w r3, [r3, #216] @ 0xd8
  4240. 8002066: 4a48 ldr r2, [pc, #288] @ (8002188 <HAL_ADC_MspInit+0x29c>)
  4241. 8002068: f043 0320 orr.w r3, r3, #32
  4242. 800206c: f8c2 30d8 str.w r3, [r2, #216] @ 0xd8
  4243. 8002070: 4b45 ldr r3, [pc, #276] @ (8002188 <HAL_ADC_MspInit+0x29c>)
  4244. 8002072: f8d3 30d8 ldr.w r3, [r3, #216] @ 0xd8
  4245. 8002076: f003 0320 and.w r3, r3, #32
  4246. 800207a: 623b str r3, [r7, #32]
  4247. 800207c: 6a3b ldr r3, [r7, #32]
  4248. __HAL_RCC_GPIOA_CLK_ENABLE();
  4249. 800207e: 4b42 ldr r3, [pc, #264] @ (8002188 <HAL_ADC_MspInit+0x29c>)
  4250. 8002080: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  4251. 8002084: 4a40 ldr r2, [pc, #256] @ (8002188 <HAL_ADC_MspInit+0x29c>)
  4252. 8002086: f043 0301 orr.w r3, r3, #1
  4253. 800208a: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  4254. 800208e: 4b3e ldr r3, [pc, #248] @ (8002188 <HAL_ADC_MspInit+0x29c>)
  4255. 8002090: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  4256. 8002094: f003 0301 and.w r3, r3, #1
  4257. 8002098: 61fb str r3, [r7, #28]
  4258. 800209a: 69fb ldr r3, [r7, #28]
  4259. __HAL_RCC_GPIOC_CLK_ENABLE();
  4260. 800209c: 4b3a ldr r3, [pc, #232] @ (8002188 <HAL_ADC_MspInit+0x29c>)
  4261. 800209e: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  4262. 80020a2: 4a39 ldr r2, [pc, #228] @ (8002188 <HAL_ADC_MspInit+0x29c>)
  4263. 80020a4: f043 0304 orr.w r3, r3, #4
  4264. 80020a8: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  4265. 80020ac: 4b36 ldr r3, [pc, #216] @ (8002188 <HAL_ADC_MspInit+0x29c>)
  4266. 80020ae: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  4267. 80020b2: f003 0304 and.w r3, r3, #4
  4268. 80020b6: 61bb str r3, [r7, #24]
  4269. 80020b8: 69bb ldr r3, [r7, #24]
  4270. __HAL_RCC_GPIOB_CLK_ENABLE();
  4271. 80020ba: 4b33 ldr r3, [pc, #204] @ (8002188 <HAL_ADC_MspInit+0x29c>)
  4272. 80020bc: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  4273. 80020c0: 4a31 ldr r2, [pc, #196] @ (8002188 <HAL_ADC_MspInit+0x29c>)
  4274. 80020c2: f043 0302 orr.w r3, r3, #2
  4275. 80020c6: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  4276. 80020ca: 4b2f ldr r3, [pc, #188] @ (8002188 <HAL_ADC_MspInit+0x29c>)
  4277. 80020cc: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  4278. 80020d0: f003 0302 and.w r3, r3, #2
  4279. 80020d4: 617b str r3, [r7, #20]
  4280. 80020d6: 697b ldr r3, [r7, #20]
  4281. GPIO_InitStruct.Pin = GPIO_PIN_6;
  4282. 80020d8: 2340 movs r3, #64 @ 0x40
  4283. 80020da: 637b str r3, [r7, #52] @ 0x34
  4284. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  4285. 80020dc: 2303 movs r3, #3
  4286. 80020de: 63bb str r3, [r7, #56] @ 0x38
  4287. GPIO_InitStruct.Pull = GPIO_NOPULL;
  4288. 80020e0: 2300 movs r3, #0
  4289. 80020e2: 63fb str r3, [r7, #60] @ 0x3c
  4290. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  4291. 80020e4: f107 0334 add.w r3, r7, #52 @ 0x34
  4292. 80020e8: 4619 mov r1, r3
  4293. 80020ea: 4828 ldr r0, [pc, #160] @ (800218c <HAL_ADC_MspInit+0x2a0>)
  4294. 80020ec: f005 ffbc bl 8008068 <HAL_GPIO_Init>
  4295. GPIO_InitStruct.Pin = GPIO_PIN_4;
  4296. 80020f0: 2310 movs r3, #16
  4297. 80020f2: 637b str r3, [r7, #52] @ 0x34
  4298. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  4299. 80020f4: 2303 movs r3, #3
  4300. 80020f6: 63bb str r3, [r7, #56] @ 0x38
  4301. GPIO_InitStruct.Pull = GPIO_NOPULL;
  4302. 80020f8: 2300 movs r3, #0
  4303. 80020fa: 63fb str r3, [r7, #60] @ 0x3c
  4304. HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  4305. 80020fc: f107 0334 add.w r3, r7, #52 @ 0x34
  4306. 8002100: 4619 mov r1, r3
  4307. 8002102: 4823 ldr r0, [pc, #140] @ (8002190 <HAL_ADC_MspInit+0x2a4>)
  4308. 8002104: f005 ffb0 bl 8008068 <HAL_GPIO_Init>
  4309. GPIO_InitStruct.Pin = GPIO_PIN_1;
  4310. 8002108: 2302 movs r3, #2
  4311. 800210a: 637b str r3, [r7, #52] @ 0x34
  4312. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  4313. 800210c: 2303 movs r3, #3
  4314. 800210e: 63bb str r3, [r7, #56] @ 0x38
  4315. GPIO_InitStruct.Pull = GPIO_NOPULL;
  4316. 8002110: 2300 movs r3, #0
  4317. 8002112: 63fb str r3, [r7, #60] @ 0x3c
  4318. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  4319. 8002114: f107 0334 add.w r3, r7, #52 @ 0x34
  4320. 8002118: 4619 mov r1, r3
  4321. 800211a: 481e ldr r0, [pc, #120] @ (8002194 <HAL_ADC_MspInit+0x2a8>)
  4322. 800211c: f005 ffa4 bl 8008068 <HAL_GPIO_Init>
  4323. hdma_adc2.Instance = DMA1_Stream1;
  4324. 8002120: 4b20 ldr r3, [pc, #128] @ (80021a4 <HAL_ADC_MspInit+0x2b8>)
  4325. 8002122: 4a21 ldr r2, [pc, #132] @ (80021a8 <HAL_ADC_MspInit+0x2bc>)
  4326. 8002124: 601a str r2, [r3, #0]
  4327. hdma_adc2.Init.Request = DMA_REQUEST_ADC2;
  4328. 8002126: 4b1f ldr r3, [pc, #124] @ (80021a4 <HAL_ADC_MspInit+0x2b8>)
  4329. 8002128: 220a movs r2, #10
  4330. 800212a: 605a str r2, [r3, #4]
  4331. hdma_adc2.Init.Direction = DMA_PERIPH_TO_MEMORY;
  4332. 800212c: 4b1d ldr r3, [pc, #116] @ (80021a4 <HAL_ADC_MspInit+0x2b8>)
  4333. 800212e: 2200 movs r2, #0
  4334. 8002130: 609a str r2, [r3, #8]
  4335. hdma_adc2.Init.PeriphInc = DMA_PINC_DISABLE;
  4336. 8002132: 4b1c ldr r3, [pc, #112] @ (80021a4 <HAL_ADC_MspInit+0x2b8>)
  4337. 8002134: 2200 movs r2, #0
  4338. 8002136: 60da str r2, [r3, #12]
  4339. hdma_adc2.Init.MemInc = DMA_MINC_ENABLE;
  4340. 8002138: 4b1a ldr r3, [pc, #104] @ (80021a4 <HAL_ADC_MspInit+0x2b8>)
  4341. 800213a: f44f 6280 mov.w r2, #1024 @ 0x400
  4342. 800213e: 611a str r2, [r3, #16]
  4343. hdma_adc2.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
  4344. 8002140: 4b18 ldr r3, [pc, #96] @ (80021a4 <HAL_ADC_MspInit+0x2b8>)
  4345. 8002142: f44f 6200 mov.w r2, #2048 @ 0x800
  4346. 8002146: 615a str r2, [r3, #20]
  4347. hdma_adc2.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
  4348. 8002148: 4b16 ldr r3, [pc, #88] @ (80021a4 <HAL_ADC_MspInit+0x2b8>)
  4349. 800214a: f44f 5200 mov.w r2, #8192 @ 0x2000
  4350. 800214e: 619a str r2, [r3, #24]
  4351. hdma_adc2.Init.Mode = DMA_NORMAL;
  4352. 8002150: 4b14 ldr r3, [pc, #80] @ (80021a4 <HAL_ADC_MspInit+0x2b8>)
  4353. 8002152: 2200 movs r2, #0
  4354. 8002154: 61da str r2, [r3, #28]
  4355. hdma_adc2.Init.Priority = DMA_PRIORITY_LOW;
  4356. 8002156: 4b13 ldr r3, [pc, #76] @ (80021a4 <HAL_ADC_MspInit+0x2b8>)
  4357. 8002158: 2200 movs r2, #0
  4358. 800215a: 621a str r2, [r3, #32]
  4359. hdma_adc2.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
  4360. 800215c: 4b11 ldr r3, [pc, #68] @ (80021a4 <HAL_ADC_MspInit+0x2b8>)
  4361. 800215e: 2200 movs r2, #0
  4362. 8002160: 625a str r2, [r3, #36] @ 0x24
  4363. if (HAL_DMA_Init(&hdma_adc2) != HAL_OK)
  4364. 8002162: 4810 ldr r0, [pc, #64] @ (80021a4 <HAL_ADC_MspInit+0x2b8>)
  4365. 8002164: f003 f944 bl 80053f0 <HAL_DMA_Init>
  4366. 8002168: 4603 mov r3, r0
  4367. 800216a: 2b00 cmp r3, #0
  4368. 800216c: d001 beq.n 8002172 <HAL_ADC_MspInit+0x286>
  4369. Error_Handler();
  4370. 800216e: f7ff f98f bl 8001490 <Error_Handler>
  4371. __HAL_LINKDMA(hadc,DMA_Handle,hdma_adc2);
  4372. 8002172: 687b ldr r3, [r7, #4]
  4373. 8002174: 4a0b ldr r2, [pc, #44] @ (80021a4 <HAL_ADC_MspInit+0x2b8>)
  4374. 8002176: 64da str r2, [r3, #76] @ 0x4c
  4375. 8002178: 4a0a ldr r2, [pc, #40] @ (80021a4 <HAL_ADC_MspInit+0x2b8>)
  4376. 800217a: 687b ldr r3, [r7, #4]
  4377. 800217c: 6393 str r3, [r2, #56] @ 0x38
  4378. }
  4379. 800217e: e07f b.n 8002280 <HAL_ADC_MspInit+0x394>
  4380. 8002180: 40022000 .word 0x40022000
  4381. 8002184: 24000614 .word 0x24000614
  4382. 8002188: 58024400 .word 0x58024400
  4383. 800218c: 58020000 .word 0x58020000
  4384. 8002190: 58020800 .word 0x58020800
  4385. 8002194: 58020400 .word 0x58020400
  4386. 8002198: 2400026c .word 0x2400026c
  4387. 800219c: 40020010 .word 0x40020010
  4388. 80021a0: 40022100 .word 0x40022100
  4389. 80021a4: 240002e4 .word 0x240002e4
  4390. 80021a8: 40020028 .word 0x40020028
  4391. else if(hadc->Instance==ADC3)
  4392. 80021ac: 687b ldr r3, [r7, #4]
  4393. 80021ae: 681b ldr r3, [r3, #0]
  4394. 80021b0: 4a35 ldr r2, [pc, #212] @ (8002288 <HAL_ADC_MspInit+0x39c>)
  4395. 80021b2: 4293 cmp r3, r2
  4396. 80021b4: d164 bne.n 8002280 <HAL_ADC_MspInit+0x394>
  4397. __HAL_RCC_ADC3_CLK_ENABLE();
  4398. 80021b6: 4b35 ldr r3, [pc, #212] @ (800228c <HAL_ADC_MspInit+0x3a0>)
  4399. 80021b8: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  4400. 80021bc: 4a33 ldr r2, [pc, #204] @ (800228c <HAL_ADC_MspInit+0x3a0>)
  4401. 80021be: f043 7380 orr.w r3, r3, #16777216 @ 0x1000000
  4402. 80021c2: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  4403. 80021c6: 4b31 ldr r3, [pc, #196] @ (800228c <HAL_ADC_MspInit+0x3a0>)
  4404. 80021c8: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  4405. 80021cc: f003 7380 and.w r3, r3, #16777216 @ 0x1000000
  4406. 80021d0: 613b str r3, [r7, #16]
  4407. 80021d2: 693b ldr r3, [r7, #16]
  4408. __HAL_RCC_GPIOC_CLK_ENABLE();
  4409. 80021d4: 4b2d ldr r3, [pc, #180] @ (800228c <HAL_ADC_MspInit+0x3a0>)
  4410. 80021d6: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  4411. 80021da: 4a2c ldr r2, [pc, #176] @ (800228c <HAL_ADC_MspInit+0x3a0>)
  4412. 80021dc: f043 0304 orr.w r3, r3, #4
  4413. 80021e0: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  4414. 80021e4: 4b29 ldr r3, [pc, #164] @ (800228c <HAL_ADC_MspInit+0x3a0>)
  4415. 80021e6: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  4416. 80021ea: f003 0304 and.w r3, r3, #4
  4417. 80021ee: 60fb str r3, [r7, #12]
  4418. 80021f0: 68fb ldr r3, [r7, #12]
  4419. GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;
  4420. 80021f2: 2303 movs r3, #3
  4421. 80021f4: 637b str r3, [r7, #52] @ 0x34
  4422. GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  4423. 80021f6: 2303 movs r3, #3
  4424. 80021f8: 63bb str r3, [r7, #56] @ 0x38
  4425. GPIO_InitStruct.Pull = GPIO_NOPULL;
  4426. 80021fa: 2300 movs r3, #0
  4427. 80021fc: 63fb str r3, [r7, #60] @ 0x3c
  4428. HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  4429. 80021fe: f107 0334 add.w r3, r7, #52 @ 0x34
  4430. 8002202: 4619 mov r1, r3
  4431. 8002204: 4822 ldr r0, [pc, #136] @ (8002290 <HAL_ADC_MspInit+0x3a4>)
  4432. 8002206: f005 ff2f bl 8008068 <HAL_GPIO_Init>
  4433. HAL_SYSCFG_AnalogSwitchConfig(SYSCFG_SWITCH_PC2, SYSCFG_SWITCH_PC2_OPEN);
  4434. 800220a: f04f 6180 mov.w r1, #67108864 @ 0x4000000
  4435. 800220e: f04f 6080 mov.w r0, #67108864 @ 0x4000000
  4436. 8002212: f001 f96f bl 80034f4 <HAL_SYSCFG_AnalogSwitchConfig>
  4437. HAL_SYSCFG_AnalogSwitchConfig(SYSCFG_SWITCH_PC3, SYSCFG_SWITCH_PC3_OPEN);
  4438. 8002216: f04f 6100 mov.w r1, #134217728 @ 0x8000000
  4439. 800221a: f04f 6000 mov.w r0, #134217728 @ 0x8000000
  4440. 800221e: f001 f969 bl 80034f4 <HAL_SYSCFG_AnalogSwitchConfig>
  4441. hdma_adc3.Instance = DMA1_Stream2;
  4442. 8002222: 4b1c ldr r3, [pc, #112] @ (8002294 <HAL_ADC_MspInit+0x3a8>)
  4443. 8002224: 4a1c ldr r2, [pc, #112] @ (8002298 <HAL_ADC_MspInit+0x3ac>)
  4444. 8002226: 601a str r2, [r3, #0]
  4445. hdma_adc3.Init.Request = DMA_REQUEST_ADC3;
  4446. 8002228: 4b1a ldr r3, [pc, #104] @ (8002294 <HAL_ADC_MspInit+0x3a8>)
  4447. 800222a: 2273 movs r2, #115 @ 0x73
  4448. 800222c: 605a str r2, [r3, #4]
  4449. hdma_adc3.Init.Direction = DMA_PERIPH_TO_MEMORY;
  4450. 800222e: 4b19 ldr r3, [pc, #100] @ (8002294 <HAL_ADC_MspInit+0x3a8>)
  4451. 8002230: 2200 movs r2, #0
  4452. 8002232: 609a str r2, [r3, #8]
  4453. hdma_adc3.Init.PeriphInc = DMA_PINC_DISABLE;
  4454. 8002234: 4b17 ldr r3, [pc, #92] @ (8002294 <HAL_ADC_MspInit+0x3a8>)
  4455. 8002236: 2200 movs r2, #0
  4456. 8002238: 60da str r2, [r3, #12]
  4457. hdma_adc3.Init.MemInc = DMA_MINC_ENABLE;
  4458. 800223a: 4b16 ldr r3, [pc, #88] @ (8002294 <HAL_ADC_MspInit+0x3a8>)
  4459. 800223c: f44f 6280 mov.w r2, #1024 @ 0x400
  4460. 8002240: 611a str r2, [r3, #16]
  4461. hdma_adc3.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
  4462. 8002242: 4b14 ldr r3, [pc, #80] @ (8002294 <HAL_ADC_MspInit+0x3a8>)
  4463. 8002244: f44f 6200 mov.w r2, #2048 @ 0x800
  4464. 8002248: 615a str r2, [r3, #20]
  4465. hdma_adc3.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
  4466. 800224a: 4b12 ldr r3, [pc, #72] @ (8002294 <HAL_ADC_MspInit+0x3a8>)
  4467. 800224c: f44f 5200 mov.w r2, #8192 @ 0x2000
  4468. 8002250: 619a str r2, [r3, #24]
  4469. hdma_adc3.Init.Mode = DMA_NORMAL;
  4470. 8002252: 4b10 ldr r3, [pc, #64] @ (8002294 <HAL_ADC_MspInit+0x3a8>)
  4471. 8002254: 2200 movs r2, #0
  4472. 8002256: 61da str r2, [r3, #28]
  4473. hdma_adc3.Init.Priority = DMA_PRIORITY_LOW;
  4474. 8002258: 4b0e ldr r3, [pc, #56] @ (8002294 <HAL_ADC_MspInit+0x3a8>)
  4475. 800225a: 2200 movs r2, #0
  4476. 800225c: 621a str r2, [r3, #32]
  4477. hdma_adc3.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
  4478. 800225e: 4b0d ldr r3, [pc, #52] @ (8002294 <HAL_ADC_MspInit+0x3a8>)
  4479. 8002260: 2200 movs r2, #0
  4480. 8002262: 625a str r2, [r3, #36] @ 0x24
  4481. if (HAL_DMA_Init(&hdma_adc3) != HAL_OK)
  4482. 8002264: 480b ldr r0, [pc, #44] @ (8002294 <HAL_ADC_MspInit+0x3a8>)
  4483. 8002266: f003 f8c3 bl 80053f0 <HAL_DMA_Init>
  4484. 800226a: 4603 mov r3, r0
  4485. 800226c: 2b00 cmp r3, #0
  4486. 800226e: d001 beq.n 8002274 <HAL_ADC_MspInit+0x388>
  4487. Error_Handler();
  4488. 8002270: f7ff f90e bl 8001490 <Error_Handler>
  4489. __HAL_LINKDMA(hadc,DMA_Handle,hdma_adc3);
  4490. 8002274: 687b ldr r3, [r7, #4]
  4491. 8002276: 4a07 ldr r2, [pc, #28] @ (8002294 <HAL_ADC_MspInit+0x3a8>)
  4492. 8002278: 64da str r2, [r3, #76] @ 0x4c
  4493. 800227a: 4a06 ldr r2, [pc, #24] @ (8002294 <HAL_ADC_MspInit+0x3a8>)
  4494. 800227c: 687b ldr r3, [r7, #4]
  4495. 800227e: 6393 str r3, [r2, #56] @ 0x38
  4496. }
  4497. 8002280: bf00 nop
  4498. 8002282: 3748 adds r7, #72 @ 0x48
  4499. 8002284: 46bd mov sp, r7
  4500. 8002286: bd80 pop {r7, pc}
  4501. 8002288: 58026000 .word 0x58026000
  4502. 800228c: 58024400 .word 0x58024400
  4503. 8002290: 58020800 .word 0x58020800
  4504. 8002294: 2400035c .word 0x2400035c
  4505. 8002298: 40020040 .word 0x40020040
  4506. 0800229c <HAL_CRC_MspInit>:
  4507. * This function configures the hardware resources used in this example
  4508. * @param hcrc: CRC handle pointer
  4509. * @retval None
  4510. */
  4511. void HAL_CRC_MspInit(CRC_HandleTypeDef* hcrc)
  4512. {
  4513. 800229c: b480 push {r7}
  4514. 800229e: b085 sub sp, #20
  4515. 80022a0: af00 add r7, sp, #0
  4516. 80022a2: 6078 str r0, [r7, #4]
  4517. if(hcrc->Instance==CRC)
  4518. 80022a4: 687b ldr r3, [r7, #4]
  4519. 80022a6: 681b ldr r3, [r3, #0]
  4520. 80022a8: 4a0b ldr r2, [pc, #44] @ (80022d8 <HAL_CRC_MspInit+0x3c>)
  4521. 80022aa: 4293 cmp r3, r2
  4522. 80022ac: d10e bne.n 80022cc <HAL_CRC_MspInit+0x30>
  4523. {
  4524. /* USER CODE BEGIN CRC_MspInit 0 */
  4525. /* USER CODE END CRC_MspInit 0 */
  4526. /* Peripheral clock enable */
  4527. __HAL_RCC_CRC_CLK_ENABLE();
  4528. 80022ae: 4b0b ldr r3, [pc, #44] @ (80022dc <HAL_CRC_MspInit+0x40>)
  4529. 80022b0: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  4530. 80022b4: 4a09 ldr r2, [pc, #36] @ (80022dc <HAL_CRC_MspInit+0x40>)
  4531. 80022b6: f443 2300 orr.w r3, r3, #524288 @ 0x80000
  4532. 80022ba: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  4533. 80022be: 4b07 ldr r3, [pc, #28] @ (80022dc <HAL_CRC_MspInit+0x40>)
  4534. 80022c0: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  4535. 80022c4: f403 2300 and.w r3, r3, #524288 @ 0x80000
  4536. 80022c8: 60fb str r3, [r7, #12]
  4537. 80022ca: 68fb ldr r3, [r7, #12]
  4538. /* USER CODE BEGIN CRC_MspInit 1 */
  4539. /* USER CODE END CRC_MspInit 1 */
  4540. }
  4541. }
  4542. 80022cc: bf00 nop
  4543. 80022ce: 3714 adds r7, #20
  4544. 80022d0: 46bd mov sp, r7
  4545. 80022d2: f85d 7b04 ldr.w r7, [sp], #4
  4546. 80022d6: 4770 bx lr
  4547. 80022d8: 58024c00 .word 0x58024c00
  4548. 80022dc: 58024400 .word 0x58024400
  4549. 080022e0 <HAL_RNG_MspInit>:
  4550. * This function configures the hardware resources used in this example
  4551. * @param hrng: RNG handle pointer
  4552. * @retval None
  4553. */
  4554. void HAL_RNG_MspInit(RNG_HandleTypeDef* hrng)
  4555. {
  4556. 80022e0: b580 push {r7, lr}
  4557. 80022e2: b0b4 sub sp, #208 @ 0xd0
  4558. 80022e4: af00 add r7, sp, #0
  4559. 80022e6: 6078 str r0, [r7, #4]
  4560. RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
  4561. 80022e8: f107 0310 add.w r3, r7, #16
  4562. 80022ec: 22c0 movs r2, #192 @ 0xc0
  4563. 80022ee: 2100 movs r1, #0
  4564. 80022f0: 4618 mov r0, r3
  4565. 80022f2: f011 fa78 bl 80137e6 <memset>
  4566. if(hrng->Instance==RNG)
  4567. 80022f6: 687b ldr r3, [r7, #4]
  4568. 80022f8: 681b ldr r3, [r3, #0]
  4569. 80022fa: 4a14 ldr r2, [pc, #80] @ (800234c <HAL_RNG_MspInit+0x6c>)
  4570. 80022fc: 4293 cmp r3, r2
  4571. 80022fe: d121 bne.n 8002344 <HAL_RNG_MspInit+0x64>
  4572. /* USER CODE END RNG_MspInit 0 */
  4573. /** Initializes the peripherals clock
  4574. */
  4575. PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RNG;
  4576. 8002300: f44f 3200 mov.w r2, #131072 @ 0x20000
  4577. 8002304: f04f 0300 mov.w r3, #0
  4578. 8002308: e9c7 2304 strd r2, r3, [r7, #16]
  4579. PeriphClkInitStruct.RngClockSelection = RCC_RNGCLKSOURCE_HSI48;
  4580. 800230c: 2300 movs r3, #0
  4581. 800230e: f8c7 3090 str.w r3, [r7, #144] @ 0x90
  4582. if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
  4583. 8002312: f107 0310 add.w r3, r7, #16
  4584. 8002316: 4618 mov r0, r3
  4585. 8002318: f007 f8ec bl 80094f4 <HAL_RCCEx_PeriphCLKConfig>
  4586. 800231c: 4603 mov r3, r0
  4587. 800231e: 2b00 cmp r3, #0
  4588. 8002320: d001 beq.n 8002326 <HAL_RNG_MspInit+0x46>
  4589. {
  4590. Error_Handler();
  4591. 8002322: f7ff f8b5 bl 8001490 <Error_Handler>
  4592. }
  4593. /* Peripheral clock enable */
  4594. __HAL_RCC_RNG_CLK_ENABLE();
  4595. 8002326: 4b0a ldr r3, [pc, #40] @ (8002350 <HAL_RNG_MspInit+0x70>)
  4596. 8002328: f8d3 30dc ldr.w r3, [r3, #220] @ 0xdc
  4597. 800232c: 4a08 ldr r2, [pc, #32] @ (8002350 <HAL_RNG_MspInit+0x70>)
  4598. 800232e: f043 0340 orr.w r3, r3, #64 @ 0x40
  4599. 8002332: f8c2 30dc str.w r3, [r2, #220] @ 0xdc
  4600. 8002336: 4b06 ldr r3, [pc, #24] @ (8002350 <HAL_RNG_MspInit+0x70>)
  4601. 8002338: f8d3 30dc ldr.w r3, [r3, #220] @ 0xdc
  4602. 800233c: f003 0340 and.w r3, r3, #64 @ 0x40
  4603. 8002340: 60fb str r3, [r7, #12]
  4604. 8002342: 68fb ldr r3, [r7, #12]
  4605. /* USER CODE BEGIN RNG_MspInit 1 */
  4606. /* USER CODE END RNG_MspInit 1 */
  4607. }
  4608. }
  4609. 8002344: bf00 nop
  4610. 8002346: 37d0 adds r7, #208 @ 0xd0
  4611. 8002348: 46bd mov sp, r7
  4612. 800234a: bd80 pop {r7, pc}
  4613. 800234c: 48021800 .word 0x48021800
  4614. 8002350: 58024400 .word 0x58024400
  4615. 08002354 <HAL_TIM_Base_MspInit>:
  4616. * This function configures the hardware resources used in this example
  4617. * @param htim_base: TIM_Base handle pointer
  4618. * @retval None
  4619. */
  4620. void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
  4621. {
  4622. 8002354: b580 push {r7, lr}
  4623. 8002356: b084 sub sp, #16
  4624. 8002358: af00 add r7, sp, #0
  4625. 800235a: 6078 str r0, [r7, #4]
  4626. if(htim_base->Instance==TIM2)
  4627. 800235c: 687b ldr r3, [r7, #4]
  4628. 800235e: 681b ldr r3, [r3, #0]
  4629. 8002360: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  4630. 8002364: d116 bne.n 8002394 <HAL_TIM_Base_MspInit+0x40>
  4631. {
  4632. /* USER CODE BEGIN TIM2_MspInit 0 */
  4633. /* USER CODE END TIM2_MspInit 0 */
  4634. /* Peripheral clock enable */
  4635. __HAL_RCC_TIM2_CLK_ENABLE();
  4636. 8002366: 4b0d ldr r3, [pc, #52] @ (800239c <HAL_TIM_Base_MspInit+0x48>)
  4637. 8002368: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  4638. 800236c: 4a0b ldr r2, [pc, #44] @ (800239c <HAL_TIM_Base_MspInit+0x48>)
  4639. 800236e: f043 0301 orr.w r3, r3, #1
  4640. 8002372: f8c2 30e8 str.w r3, [r2, #232] @ 0xe8
  4641. 8002376: 4b09 ldr r3, [pc, #36] @ (800239c <HAL_TIM_Base_MspInit+0x48>)
  4642. 8002378: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  4643. 800237c: f003 0301 and.w r3, r3, #1
  4644. 8002380: 60fb str r3, [r7, #12]
  4645. 8002382: 68fb ldr r3, [r7, #12]
  4646. /* TIM2 interrupt Init */
  4647. HAL_NVIC_SetPriority(TIM2_IRQn, 5, 0);
  4648. 8002384: 2200 movs r2, #0
  4649. 8002386: 2105 movs r1, #5
  4650. 8002388: 201c movs r0, #28
  4651. 800238a: f002 fd8b bl 8004ea4 <HAL_NVIC_SetPriority>
  4652. HAL_NVIC_EnableIRQ(TIM2_IRQn);
  4653. 800238e: 201c movs r0, #28
  4654. 8002390: f002 fda2 bl 8004ed8 <HAL_NVIC_EnableIRQ>
  4655. /* USER CODE BEGIN TIM2_MspInit 1 */
  4656. /* USER CODE END TIM2_MspInit 1 */
  4657. }
  4658. }
  4659. 8002394: bf00 nop
  4660. 8002396: 3710 adds r7, #16
  4661. 8002398: 46bd mov sp, r7
  4662. 800239a: bd80 pop {r7, pc}
  4663. 800239c: 58024400 .word 0x58024400
  4664. 080023a0 <HAL_UART_MspInit>:
  4665. * This function configures the hardware resources used in this example
  4666. * @param huart: UART handle pointer
  4667. * @retval None
  4668. */
  4669. void HAL_UART_MspInit(UART_HandleTypeDef* huart)
  4670. {
  4671. 80023a0: b580 push {r7, lr}
  4672. 80023a2: b0bc sub sp, #240 @ 0xf0
  4673. 80023a4: af00 add r7, sp, #0
  4674. 80023a6: 6078 str r0, [r7, #4]
  4675. GPIO_InitTypeDef GPIO_InitStruct = {0};
  4676. 80023a8: f107 03dc add.w r3, r7, #220 @ 0xdc
  4677. 80023ac: 2200 movs r2, #0
  4678. 80023ae: 601a str r2, [r3, #0]
  4679. 80023b0: 605a str r2, [r3, #4]
  4680. 80023b2: 609a str r2, [r3, #8]
  4681. 80023b4: 60da str r2, [r3, #12]
  4682. 80023b6: 611a str r2, [r3, #16]
  4683. RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
  4684. 80023b8: f107 0318 add.w r3, r7, #24
  4685. 80023bc: 22c0 movs r2, #192 @ 0xc0
  4686. 80023be: 2100 movs r1, #0
  4687. 80023c0: 4618 mov r0, r3
  4688. 80023c2: f011 fa10 bl 80137e6 <memset>
  4689. if(huart->Instance==UART8)
  4690. 80023c6: 687b ldr r3, [r7, #4]
  4691. 80023c8: 681b ldr r3, [r3, #0]
  4692. 80023ca: 4a55 ldr r2, [pc, #340] @ (8002520 <HAL_UART_MspInit+0x180>)
  4693. 80023cc: 4293 cmp r3, r2
  4694. 80023ce: d14e bne.n 800246e <HAL_UART_MspInit+0xce>
  4695. /* USER CODE END UART8_MspInit 0 */
  4696. /** Initializes the peripherals clock
  4697. */
  4698. PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_UART8;
  4699. 80023d0: f04f 0202 mov.w r2, #2
  4700. 80023d4: f04f 0300 mov.w r3, #0
  4701. 80023d8: e9c7 2306 strd r2, r3, [r7, #24]
  4702. PeriphClkInitStruct.Usart234578ClockSelection = RCC_USART234578CLKSOURCE_D2PCLK1;
  4703. 80023dc: 2300 movs r3, #0
  4704. 80023de: f8c7 3090 str.w r3, [r7, #144] @ 0x90
  4705. if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
  4706. 80023e2: f107 0318 add.w r3, r7, #24
  4707. 80023e6: 4618 mov r0, r3
  4708. 80023e8: f007 f884 bl 80094f4 <HAL_RCCEx_PeriphCLKConfig>
  4709. 80023ec: 4603 mov r3, r0
  4710. 80023ee: 2b00 cmp r3, #0
  4711. 80023f0: d001 beq.n 80023f6 <HAL_UART_MspInit+0x56>
  4712. {
  4713. Error_Handler();
  4714. 80023f2: f7ff f84d bl 8001490 <Error_Handler>
  4715. }
  4716. /* Peripheral clock enable */
  4717. __HAL_RCC_UART8_CLK_ENABLE();
  4718. 80023f6: 4b4b ldr r3, [pc, #300] @ (8002524 <HAL_UART_MspInit+0x184>)
  4719. 80023f8: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  4720. 80023fc: 4a49 ldr r2, [pc, #292] @ (8002524 <HAL_UART_MspInit+0x184>)
  4721. 80023fe: f043 4300 orr.w r3, r3, #2147483648 @ 0x80000000
  4722. 8002402: f8c2 30e8 str.w r3, [r2, #232] @ 0xe8
  4723. 8002406: 4b47 ldr r3, [pc, #284] @ (8002524 <HAL_UART_MspInit+0x184>)
  4724. 8002408: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  4725. 800240c: f003 4300 and.w r3, r3, #2147483648 @ 0x80000000
  4726. 8002410: 617b str r3, [r7, #20]
  4727. 8002412: 697b ldr r3, [r7, #20]
  4728. __HAL_RCC_GPIOE_CLK_ENABLE();
  4729. 8002414: 4b43 ldr r3, [pc, #268] @ (8002524 <HAL_UART_MspInit+0x184>)
  4730. 8002416: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  4731. 800241a: 4a42 ldr r2, [pc, #264] @ (8002524 <HAL_UART_MspInit+0x184>)
  4732. 800241c: f043 0310 orr.w r3, r3, #16
  4733. 8002420: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  4734. 8002424: 4b3f ldr r3, [pc, #252] @ (8002524 <HAL_UART_MspInit+0x184>)
  4735. 8002426: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  4736. 800242a: f003 0310 and.w r3, r3, #16
  4737. 800242e: 613b str r3, [r7, #16]
  4738. 8002430: 693b ldr r3, [r7, #16]
  4739. /**UART8 GPIO Configuration
  4740. PE0 ------> UART8_RX
  4741. PE1 ------> UART8_TX
  4742. */
  4743. GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;
  4744. 8002432: 2303 movs r3, #3
  4745. 8002434: f8c7 30dc str.w r3, [r7, #220] @ 0xdc
  4746. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  4747. 8002438: 2302 movs r3, #2
  4748. 800243a: f8c7 30e0 str.w r3, [r7, #224] @ 0xe0
  4749. GPIO_InitStruct.Pull = GPIO_NOPULL;
  4750. 800243e: 2300 movs r3, #0
  4751. 8002440: f8c7 30e4 str.w r3, [r7, #228] @ 0xe4
  4752. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  4753. 8002444: 2300 movs r3, #0
  4754. 8002446: f8c7 30e8 str.w r3, [r7, #232] @ 0xe8
  4755. GPIO_InitStruct.Alternate = GPIO_AF8_UART8;
  4756. 800244a: 2308 movs r3, #8
  4757. 800244c: f8c7 30ec str.w r3, [r7, #236] @ 0xec
  4758. HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
  4759. 8002450: f107 03dc add.w r3, r7, #220 @ 0xdc
  4760. 8002454: 4619 mov r1, r3
  4761. 8002456: 4834 ldr r0, [pc, #208] @ (8002528 <HAL_UART_MspInit+0x188>)
  4762. 8002458: f005 fe06 bl 8008068 <HAL_GPIO_Init>
  4763. /* UART8 interrupt Init */
  4764. HAL_NVIC_SetPriority(UART8_IRQn, 5, 0);
  4765. 800245c: 2200 movs r2, #0
  4766. 800245e: 2105 movs r1, #5
  4767. 8002460: 2053 movs r0, #83 @ 0x53
  4768. 8002462: f002 fd1f bl 8004ea4 <HAL_NVIC_SetPriority>
  4769. HAL_NVIC_EnableIRQ(UART8_IRQn);
  4770. 8002466: 2053 movs r0, #83 @ 0x53
  4771. 8002468: f002 fd36 bl 8004ed8 <HAL_NVIC_EnableIRQ>
  4772. /* USER CODE BEGIN USART1_MspInit 1 */
  4773. /* USER CODE END USART1_MspInit 1 */
  4774. }
  4775. }
  4776. 800246c: e053 b.n 8002516 <HAL_UART_MspInit+0x176>
  4777. else if(huart->Instance==USART1)
  4778. 800246e: 687b ldr r3, [r7, #4]
  4779. 8002470: 681b ldr r3, [r3, #0]
  4780. 8002472: 4a2e ldr r2, [pc, #184] @ (800252c <HAL_UART_MspInit+0x18c>)
  4781. 8002474: 4293 cmp r3, r2
  4782. 8002476: d14e bne.n 8002516 <HAL_UART_MspInit+0x176>
  4783. PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART1;
  4784. 8002478: f04f 0201 mov.w r2, #1
  4785. 800247c: f04f 0300 mov.w r3, #0
  4786. 8002480: e9c7 2306 strd r2, r3, [r7, #24]
  4787. PeriphClkInitStruct.Usart16ClockSelection = RCC_USART16CLKSOURCE_D2PCLK2;
  4788. 8002484: 2300 movs r3, #0
  4789. 8002486: f8c7 3094 str.w r3, [r7, #148] @ 0x94
  4790. if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
  4791. 800248a: f107 0318 add.w r3, r7, #24
  4792. 800248e: 4618 mov r0, r3
  4793. 8002490: f007 f830 bl 80094f4 <HAL_RCCEx_PeriphCLKConfig>
  4794. 8002494: 4603 mov r3, r0
  4795. 8002496: 2b00 cmp r3, #0
  4796. 8002498: d001 beq.n 800249e <HAL_UART_MspInit+0xfe>
  4797. Error_Handler();
  4798. 800249a: f7fe fff9 bl 8001490 <Error_Handler>
  4799. __HAL_RCC_USART1_CLK_ENABLE();
  4800. 800249e: 4b21 ldr r3, [pc, #132] @ (8002524 <HAL_UART_MspInit+0x184>)
  4801. 80024a0: f8d3 30f0 ldr.w r3, [r3, #240] @ 0xf0
  4802. 80024a4: 4a1f ldr r2, [pc, #124] @ (8002524 <HAL_UART_MspInit+0x184>)
  4803. 80024a6: f043 0310 orr.w r3, r3, #16
  4804. 80024aa: f8c2 30f0 str.w r3, [r2, #240] @ 0xf0
  4805. 80024ae: 4b1d ldr r3, [pc, #116] @ (8002524 <HAL_UART_MspInit+0x184>)
  4806. 80024b0: f8d3 30f0 ldr.w r3, [r3, #240] @ 0xf0
  4807. 80024b4: f003 0310 and.w r3, r3, #16
  4808. 80024b8: 60fb str r3, [r7, #12]
  4809. 80024ba: 68fb ldr r3, [r7, #12]
  4810. __HAL_RCC_GPIOB_CLK_ENABLE();
  4811. 80024bc: 4b19 ldr r3, [pc, #100] @ (8002524 <HAL_UART_MspInit+0x184>)
  4812. 80024be: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  4813. 80024c2: 4a18 ldr r2, [pc, #96] @ (8002524 <HAL_UART_MspInit+0x184>)
  4814. 80024c4: f043 0302 orr.w r3, r3, #2
  4815. 80024c8: f8c2 30e0 str.w r3, [r2, #224] @ 0xe0
  4816. 80024cc: 4b15 ldr r3, [pc, #84] @ (8002524 <HAL_UART_MspInit+0x184>)
  4817. 80024ce: f8d3 30e0 ldr.w r3, [r3, #224] @ 0xe0
  4818. 80024d2: f003 0302 and.w r3, r3, #2
  4819. 80024d6: 60bb str r3, [r7, #8]
  4820. 80024d8: 68bb ldr r3, [r7, #8]
  4821. GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15;
  4822. 80024da: f44f 4340 mov.w r3, #49152 @ 0xc000
  4823. 80024de: f8c7 30dc str.w r3, [r7, #220] @ 0xdc
  4824. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  4825. 80024e2: 2302 movs r3, #2
  4826. 80024e4: f8c7 30e0 str.w r3, [r7, #224] @ 0xe0
  4827. GPIO_InitStruct.Pull = GPIO_NOPULL;
  4828. 80024e8: 2300 movs r3, #0
  4829. 80024ea: f8c7 30e4 str.w r3, [r7, #228] @ 0xe4
  4830. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  4831. 80024ee: 2300 movs r3, #0
  4832. 80024f0: f8c7 30e8 str.w r3, [r7, #232] @ 0xe8
  4833. GPIO_InitStruct.Alternate = GPIO_AF4_USART1;
  4834. 80024f4: 2304 movs r3, #4
  4835. 80024f6: f8c7 30ec str.w r3, [r7, #236] @ 0xec
  4836. HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  4837. 80024fa: f107 03dc add.w r3, r7, #220 @ 0xdc
  4838. 80024fe: 4619 mov r1, r3
  4839. 8002500: 480b ldr r0, [pc, #44] @ (8002530 <HAL_UART_MspInit+0x190>)
  4840. 8002502: f005 fdb1 bl 8008068 <HAL_GPIO_Init>
  4841. HAL_NVIC_SetPriority(USART1_IRQn, 5, 0);
  4842. 8002506: 2200 movs r2, #0
  4843. 8002508: 2105 movs r1, #5
  4844. 800250a: 2025 movs r0, #37 @ 0x25
  4845. 800250c: f002 fcca bl 8004ea4 <HAL_NVIC_SetPriority>
  4846. HAL_NVIC_EnableIRQ(USART1_IRQn);
  4847. 8002510: 2025 movs r0, #37 @ 0x25
  4848. 8002512: f002 fce1 bl 8004ed8 <HAL_NVIC_EnableIRQ>
  4849. }
  4850. 8002516: bf00 nop
  4851. 8002518: 37f0 adds r7, #240 @ 0xf0
  4852. 800251a: 46bd mov sp, r7
  4853. 800251c: bd80 pop {r7, pc}
  4854. 800251e: bf00 nop
  4855. 8002520: 40007c00 .word 0x40007c00
  4856. 8002524: 58024400 .word 0x58024400
  4857. 8002528: 58021000 .word 0x58021000
  4858. 800252c: 40011000 .word 0x40011000
  4859. 8002530: 58020400 .word 0x58020400
  4860. 08002534 <HAL_InitTick>:
  4861. * reset by HAL_Init() or at any time when clock is configured, by HAL_RCC_ClockConfig().
  4862. * @param TickPriority: Tick interrupt priority.
  4863. * @retval HAL status
  4864. */
  4865. HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
  4866. {
  4867. 8002534: b580 push {r7, lr}
  4868. 8002536: b090 sub sp, #64 @ 0x40
  4869. 8002538: af00 add r7, sp, #0
  4870. 800253a: 6078 str r0, [r7, #4]
  4871. uint32_t uwTimclock, uwAPB1Prescaler;
  4872. uint32_t uwPrescalerValue;
  4873. uint32_t pFLatency;
  4874. /*Configure the TIM6 IRQ priority */
  4875. if (TickPriority < (1UL << __NVIC_PRIO_BITS))
  4876. 800253c: 687b ldr r3, [r7, #4]
  4877. 800253e: 2b0f cmp r3, #15
  4878. 8002540: d827 bhi.n 8002592 <HAL_InitTick+0x5e>
  4879. {
  4880. HAL_NVIC_SetPriority(TIM6_DAC_IRQn, TickPriority ,0U);
  4881. 8002542: 2200 movs r2, #0
  4882. 8002544: 6879 ldr r1, [r7, #4]
  4883. 8002546: 2036 movs r0, #54 @ 0x36
  4884. 8002548: f002 fcac bl 8004ea4 <HAL_NVIC_SetPriority>
  4885. /* Enable the TIM6 global Interrupt */
  4886. HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn);
  4887. 800254c: 2036 movs r0, #54 @ 0x36
  4888. 800254e: f002 fcc3 bl 8004ed8 <HAL_NVIC_EnableIRQ>
  4889. uwTickPrio = TickPriority;
  4890. 8002552: 4a29 ldr r2, [pc, #164] @ (80025f8 <HAL_InitTick+0xc4>)
  4891. 8002554: 687b ldr r3, [r7, #4]
  4892. 8002556: 6013 str r3, [r2, #0]
  4893. {
  4894. return HAL_ERROR;
  4895. }
  4896. /* Enable TIM6 clock */
  4897. __HAL_RCC_TIM6_CLK_ENABLE();
  4898. 8002558: 4b28 ldr r3, [pc, #160] @ (80025fc <HAL_InitTick+0xc8>)
  4899. 800255a: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  4900. 800255e: 4a27 ldr r2, [pc, #156] @ (80025fc <HAL_InitTick+0xc8>)
  4901. 8002560: f043 0310 orr.w r3, r3, #16
  4902. 8002564: f8c2 30e8 str.w r3, [r2, #232] @ 0xe8
  4903. 8002568: 4b24 ldr r3, [pc, #144] @ (80025fc <HAL_InitTick+0xc8>)
  4904. 800256a: f8d3 30e8 ldr.w r3, [r3, #232] @ 0xe8
  4905. 800256e: f003 0310 and.w r3, r3, #16
  4906. 8002572: 60fb str r3, [r7, #12]
  4907. 8002574: 68fb ldr r3, [r7, #12]
  4908. /* Get clock configuration */
  4909. HAL_RCC_GetClockConfig(&clkconfig, &pFLatency);
  4910. 8002576: f107 0210 add.w r2, r7, #16
  4911. 800257a: f107 0314 add.w r3, r7, #20
  4912. 800257e: 4611 mov r1, r2
  4913. 8002580: 4618 mov r0, r3
  4914. 8002582: f006 ff75 bl 8009470 <HAL_RCC_GetClockConfig>
  4915. /* Get APB1 prescaler */
  4916. uwAPB1Prescaler = clkconfig.APB1CLKDivider;
  4917. 8002586: 6abb ldr r3, [r7, #40] @ 0x28
  4918. 8002588: 63bb str r3, [r7, #56] @ 0x38
  4919. /* Compute TIM6 clock */
  4920. if (uwAPB1Prescaler == RCC_HCLK_DIV1)
  4921. 800258a: 6bbb ldr r3, [r7, #56] @ 0x38
  4922. 800258c: 2b00 cmp r3, #0
  4923. 800258e: d106 bne.n 800259e <HAL_InitTick+0x6a>
  4924. 8002590: e001 b.n 8002596 <HAL_InitTick+0x62>
  4925. return HAL_ERROR;
  4926. 8002592: 2301 movs r3, #1
  4927. 8002594: e02b b.n 80025ee <HAL_InitTick+0xba>
  4928. {
  4929. uwTimclock = HAL_RCC_GetPCLK1Freq();
  4930. 8002596: f006 ff3f bl 8009418 <HAL_RCC_GetPCLK1Freq>
  4931. 800259a: 63f8 str r0, [r7, #60] @ 0x3c
  4932. 800259c: e004 b.n 80025a8 <HAL_InitTick+0x74>
  4933. }
  4934. else
  4935. {
  4936. uwTimclock = 2UL * HAL_RCC_GetPCLK1Freq();
  4937. 800259e: f006 ff3b bl 8009418 <HAL_RCC_GetPCLK1Freq>
  4938. 80025a2: 4603 mov r3, r0
  4939. 80025a4: 005b lsls r3, r3, #1
  4940. 80025a6: 63fb str r3, [r7, #60] @ 0x3c
  4941. }
  4942. /* Compute the prescaler value to have TIM6 counter clock equal to 1MHz */
  4943. uwPrescalerValue = (uint32_t) ((uwTimclock / 1000000U) - 1U);
  4944. 80025a8: 6bfb ldr r3, [r7, #60] @ 0x3c
  4945. 80025aa: 4a15 ldr r2, [pc, #84] @ (8002600 <HAL_InitTick+0xcc>)
  4946. 80025ac: fba2 2303 umull r2, r3, r2, r3
  4947. 80025b0: 0c9b lsrs r3, r3, #18
  4948. 80025b2: 3b01 subs r3, #1
  4949. 80025b4: 637b str r3, [r7, #52] @ 0x34
  4950. /* Initialize TIM6 */
  4951. htim6.Instance = TIM6;
  4952. 80025b6: 4b13 ldr r3, [pc, #76] @ (8002604 <HAL_InitTick+0xd0>)
  4953. 80025b8: 4a13 ldr r2, [pc, #76] @ (8002608 <HAL_InitTick+0xd4>)
  4954. 80025ba: 601a str r2, [r3, #0]
  4955. + Period = [(TIM6CLK/1000) - 1]. to have a (1/1000) s time base.
  4956. + Prescaler = (uwTimclock/1000000 - 1) to have a 1MHz counter clock.
  4957. + ClockDivision = 0
  4958. + Counter direction = Up
  4959. */
  4960. htim6.Init.Period = (1000000U / 1000U) - 1U;
  4961. 80025bc: 4b11 ldr r3, [pc, #68] @ (8002604 <HAL_InitTick+0xd0>)
  4962. 80025be: f240 32e7 movw r2, #999 @ 0x3e7
  4963. 80025c2: 60da str r2, [r3, #12]
  4964. htim6.Init.Prescaler = uwPrescalerValue;
  4965. 80025c4: 4a0f ldr r2, [pc, #60] @ (8002604 <HAL_InitTick+0xd0>)
  4966. 80025c6: 6b7b ldr r3, [r7, #52] @ 0x34
  4967. 80025c8: 6053 str r3, [r2, #4]
  4968. htim6.Init.ClockDivision = 0;
  4969. 80025ca: 4b0e ldr r3, [pc, #56] @ (8002604 <HAL_InitTick+0xd0>)
  4970. 80025cc: 2200 movs r2, #0
  4971. 80025ce: 611a str r2, [r3, #16]
  4972. htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
  4973. 80025d0: 4b0c ldr r3, [pc, #48] @ (8002604 <HAL_InitTick+0xd0>)
  4974. 80025d2: 2200 movs r2, #0
  4975. 80025d4: 609a str r2, [r3, #8]
  4976. if(HAL_TIM_Base_Init(&htim6) == HAL_OK)
  4977. 80025d6: 480b ldr r0, [pc, #44] @ (8002604 <HAL_InitTick+0xd0>)
  4978. 80025d8: f009 fcd0 bl 800bf7c <HAL_TIM_Base_Init>
  4979. 80025dc: 4603 mov r3, r0
  4980. 80025de: 2b00 cmp r3, #0
  4981. 80025e0: d104 bne.n 80025ec <HAL_InitTick+0xb8>
  4982. {
  4983. /* Start the TIM time Base generation in interrupt mode */
  4984. return HAL_TIM_Base_Start_IT(&htim6);
  4985. 80025e2: 4808 ldr r0, [pc, #32] @ (8002604 <HAL_InitTick+0xd0>)
  4986. 80025e4: f009 fd92 bl 800c10c <HAL_TIM_Base_Start_IT>
  4987. 80025e8: 4603 mov r3, r0
  4988. 80025ea: e000 b.n 80025ee <HAL_InitTick+0xba>
  4989. }
  4990. /* Return function status */
  4991. return HAL_ERROR;
  4992. 80025ec: 2301 movs r3, #1
  4993. }
  4994. 80025ee: 4618 mov r0, r3
  4995. 80025f0: 3740 adds r7, #64 @ 0x40
  4996. 80025f2: 46bd mov sp, r7
  4997. 80025f4: bd80 pop {r7, pc}
  4998. 80025f6: bf00 nop
  4999. 80025f8: 2400003c .word 0x2400003c
  5000. 80025fc: 58024400 .word 0x58024400
  5001. 8002600: 431bde83 .word 0x431bde83
  5002. 8002604: 24000618 .word 0x24000618
  5003. 8002608: 40001000 .word 0x40001000
  5004. 0800260c <NMI_Handler>:
  5005. /******************************************************************************/
  5006. /**
  5007. * @brief This function handles Non maskable interrupt.
  5008. */
  5009. void NMI_Handler(void)
  5010. {
  5011. 800260c: b480 push {r7}
  5012. 800260e: af00 add r7, sp, #0
  5013. /* USER CODE BEGIN NonMaskableInt_IRQn 0 */
  5014. /* USER CODE END NonMaskableInt_IRQn 0 */
  5015. /* USER CODE BEGIN NonMaskableInt_IRQn 1 */
  5016. while (1)
  5017. 8002610: bf00 nop
  5018. 8002612: e7fd b.n 8002610 <NMI_Handler+0x4>
  5019. 08002614 <HardFault_Handler>:
  5020. /**
  5021. * @brief This function handles Hard fault interrupt.
  5022. */
  5023. void HardFault_Handler(void)
  5024. {
  5025. 8002614: b480 push {r7}
  5026. 8002616: af00 add r7, sp, #0
  5027. /* USER CODE BEGIN HardFault_IRQn 0 */
  5028. /* USER CODE END HardFault_IRQn 0 */
  5029. while (1)
  5030. 8002618: bf00 nop
  5031. 800261a: e7fd b.n 8002618 <HardFault_Handler+0x4>
  5032. 0800261c <MemManage_Handler>:
  5033. /**
  5034. * @brief This function handles Memory management fault.
  5035. */
  5036. void MemManage_Handler(void)
  5037. {
  5038. 800261c: b480 push {r7}
  5039. 800261e: af00 add r7, sp, #0
  5040. /* USER CODE BEGIN MemoryManagement_IRQn 0 */
  5041. /* USER CODE END MemoryManagement_IRQn 0 */
  5042. while (1)
  5043. 8002620: bf00 nop
  5044. 8002622: e7fd b.n 8002620 <MemManage_Handler+0x4>
  5045. 08002624 <BusFault_Handler>:
  5046. /**
  5047. * @brief This function handles Pre-fetch fault, memory access fault.
  5048. */
  5049. void BusFault_Handler(void)
  5050. {
  5051. 8002624: b480 push {r7}
  5052. 8002626: af00 add r7, sp, #0
  5053. /* USER CODE BEGIN BusFault_IRQn 0 */
  5054. /* USER CODE END BusFault_IRQn 0 */
  5055. while (1)
  5056. 8002628: bf00 nop
  5057. 800262a: e7fd b.n 8002628 <BusFault_Handler+0x4>
  5058. 0800262c <UsageFault_Handler>:
  5059. /**
  5060. * @brief This function handles Undefined instruction or illegal state.
  5061. */
  5062. void UsageFault_Handler(void)
  5063. {
  5064. 800262c: b480 push {r7}
  5065. 800262e: af00 add r7, sp, #0
  5066. /* USER CODE BEGIN UsageFault_IRQn 0 */
  5067. /* USER CODE END UsageFault_IRQn 0 */
  5068. while (1)
  5069. 8002630: bf00 nop
  5070. 8002632: e7fd b.n 8002630 <UsageFault_Handler+0x4>
  5071. 08002634 <DebugMon_Handler>:
  5072. /**
  5073. * @brief This function handles Debug monitor.
  5074. */
  5075. void DebugMon_Handler(void)
  5076. {
  5077. 8002634: b480 push {r7}
  5078. 8002636: af00 add r7, sp, #0
  5079. /* USER CODE END DebugMonitor_IRQn 0 */
  5080. /* USER CODE BEGIN DebugMonitor_IRQn 1 */
  5081. /* USER CODE END DebugMonitor_IRQn 1 */
  5082. }
  5083. 8002638: bf00 nop
  5084. 800263a: 46bd mov sp, r7
  5085. 800263c: f85d 7b04 ldr.w r7, [sp], #4
  5086. 8002640: 4770 bx lr
  5087. 08002642 <RCC_IRQHandler>:
  5088. /**
  5089. * @brief This function handles RCC global interrupt.
  5090. */
  5091. void RCC_IRQHandler(void)
  5092. {
  5093. 8002642: b480 push {r7}
  5094. 8002644: af00 add r7, sp, #0
  5095. /* USER CODE END RCC_IRQn 0 */
  5096. /* USER CODE BEGIN RCC_IRQn 1 */
  5097. /* USER CODE END RCC_IRQn 1 */
  5098. }
  5099. 8002646: bf00 nop
  5100. 8002648: 46bd mov sp, r7
  5101. 800264a: f85d 7b04 ldr.w r7, [sp], #4
  5102. 800264e: 4770 bx lr
  5103. 08002650 <DMA1_Stream0_IRQHandler>:
  5104. /**
  5105. * @brief This function handles DMA1 stream0 global interrupt.
  5106. */
  5107. void DMA1_Stream0_IRQHandler(void)
  5108. {
  5109. 8002650: b580 push {r7, lr}
  5110. 8002652: af00 add r7, sp, #0
  5111. /* USER CODE BEGIN DMA1_Stream0_IRQn 0 */
  5112. /* USER CODE END DMA1_Stream0_IRQn 0 */
  5113. HAL_DMA_IRQHandler(&hdma_adc1);
  5114. 8002654: 4802 ldr r0, [pc, #8] @ (8002660 <DMA1_Stream0_IRQHandler+0x10>)
  5115. 8002656: f004 f9f5 bl 8006a44 <HAL_DMA_IRQHandler>
  5116. /* USER CODE BEGIN DMA1_Stream0_IRQn 1 */
  5117. /* USER CODE END DMA1_Stream0_IRQn 1 */
  5118. }
  5119. 800265a: bf00 nop
  5120. 800265c: bd80 pop {r7, pc}
  5121. 800265e: bf00 nop
  5122. 8002660: 2400026c .word 0x2400026c
  5123. 08002664 <DMA1_Stream1_IRQHandler>:
  5124. /**
  5125. * @brief This function handles DMA1 stream1 global interrupt.
  5126. */
  5127. void DMA1_Stream1_IRQHandler(void)
  5128. {
  5129. 8002664: b580 push {r7, lr}
  5130. 8002666: af00 add r7, sp, #0
  5131. /* USER CODE BEGIN DMA1_Stream1_IRQn 0 */
  5132. /* USER CODE END DMA1_Stream1_IRQn 0 */
  5133. HAL_DMA_IRQHandler(&hdma_adc2);
  5134. 8002668: 4802 ldr r0, [pc, #8] @ (8002674 <DMA1_Stream1_IRQHandler+0x10>)
  5135. 800266a: f004 f9eb bl 8006a44 <HAL_DMA_IRQHandler>
  5136. /* USER CODE BEGIN DMA1_Stream1_IRQn 1 */
  5137. /* USER CODE END DMA1_Stream1_IRQn 1 */
  5138. }
  5139. 800266e: bf00 nop
  5140. 8002670: bd80 pop {r7, pc}
  5141. 8002672: bf00 nop
  5142. 8002674: 240002e4 .word 0x240002e4
  5143. 08002678 <DMA1_Stream2_IRQHandler>:
  5144. /**
  5145. * @brief This function handles DMA1 stream2 global interrupt.
  5146. */
  5147. void DMA1_Stream2_IRQHandler(void)
  5148. {
  5149. 8002678: b580 push {r7, lr}
  5150. 800267a: af00 add r7, sp, #0
  5151. /* USER CODE BEGIN DMA1_Stream2_IRQn 0 */
  5152. /* USER CODE END DMA1_Stream2_IRQn 0 */
  5153. HAL_DMA_IRQHandler(&hdma_adc3);
  5154. 800267c: 4802 ldr r0, [pc, #8] @ (8002688 <DMA1_Stream2_IRQHandler+0x10>)
  5155. 800267e: f004 f9e1 bl 8006a44 <HAL_DMA_IRQHandler>
  5156. /* USER CODE BEGIN DMA1_Stream2_IRQn 1 */
  5157. /* USER CODE END DMA1_Stream2_IRQn 1 */
  5158. }
  5159. 8002682: bf00 nop
  5160. 8002684: bd80 pop {r7, pc}
  5161. 8002686: bf00 nop
  5162. 8002688: 2400035c .word 0x2400035c
  5163. 0800268c <TIM2_IRQHandler>:
  5164. /**
  5165. * @brief This function handles TIM2 global interrupt.
  5166. */
  5167. void TIM2_IRQHandler(void)
  5168. {
  5169. 800268c: b580 push {r7, lr}
  5170. 800268e: af00 add r7, sp, #0
  5171. /* USER CODE BEGIN TIM2_IRQn 0 */
  5172. /* USER CODE END TIM2_IRQn 0 */
  5173. HAL_TIM_IRQHandler(&htim2);
  5174. 8002690: 4802 ldr r0, [pc, #8] @ (800269c <TIM2_IRQHandler+0x10>)
  5175. 8002692: f009 fdb3 bl 800c1fc <HAL_TIM_IRQHandler>
  5176. /* USER CODE BEGIN TIM2_IRQn 1 */
  5177. /* USER CODE END TIM2_IRQn 1 */
  5178. }
  5179. 8002696: bf00 nop
  5180. 8002698: bd80 pop {r7, pc}
  5181. 800269a: bf00 nop
  5182. 800269c: 2400040c .word 0x2400040c
  5183. 080026a0 <USART1_IRQHandler>:
  5184. /**
  5185. * @brief This function handles USART1 global interrupt.
  5186. */
  5187. void USART1_IRQHandler(void)
  5188. {
  5189. 80026a0: b580 push {r7, lr}
  5190. 80026a2: af00 add r7, sp, #0
  5191. /* USER CODE BEGIN USART1_IRQn 0 */
  5192. /* USER CODE END USART1_IRQn 0 */
  5193. HAL_UART_IRQHandler(&huart1);
  5194. 80026a4: 4802 ldr r0, [pc, #8] @ (80026b0 <USART1_IRQHandler+0x10>)
  5195. 80026a6: f00a faa5 bl 800cbf4 <HAL_UART_IRQHandler>
  5196. /* USER CODE BEGIN USART1_IRQn 1 */
  5197. /* USER CODE END USART1_IRQn 1 */
  5198. }
  5199. 80026aa: bf00 nop
  5200. 80026ac: bd80 pop {r7, pc}
  5201. 80026ae: bf00 nop
  5202. 80026b0: 240004ec .word 0x240004ec
  5203. 080026b4 <TIM6_DAC_IRQHandler>:
  5204. /**
  5205. * @brief This function handles TIM6 global interrupt, DAC1_CH1 and DAC1_CH2 underrun error interrupts.
  5206. */
  5207. void TIM6_DAC_IRQHandler(void)
  5208. {
  5209. 80026b4: b580 push {r7, lr}
  5210. 80026b6: af00 add r7, sp, #0
  5211. /* USER CODE BEGIN TIM6_DAC_IRQn 0 */
  5212. /* USER CODE END TIM6_DAC_IRQn 0 */
  5213. HAL_TIM_IRQHandler(&htim6);
  5214. 80026b8: 4802 ldr r0, [pc, #8] @ (80026c4 <TIM6_DAC_IRQHandler+0x10>)
  5215. 80026ba: f009 fd9f bl 800c1fc <HAL_TIM_IRQHandler>
  5216. /* USER CODE BEGIN TIM6_DAC_IRQn 1 */
  5217. /* USER CODE END TIM6_DAC_IRQn 1 */
  5218. }
  5219. 80026be: bf00 nop
  5220. 80026c0: bd80 pop {r7, pc}
  5221. 80026c2: bf00 nop
  5222. 80026c4: 24000618 .word 0x24000618
  5223. 080026c8 <UART8_IRQHandler>:
  5224. /**
  5225. * @brief This function handles UART8 global interrupt.
  5226. */
  5227. void UART8_IRQHandler(void)
  5228. {
  5229. 80026c8: b580 push {r7, lr}
  5230. 80026ca: af00 add r7, sp, #0
  5231. /* USER CODE BEGIN UART8_IRQn 0 */
  5232. /* USER CODE END UART8_IRQn 0 */
  5233. HAL_UART_IRQHandler(&huart8);
  5234. 80026cc: 4802 ldr r0, [pc, #8] @ (80026d8 <UART8_IRQHandler+0x10>)
  5235. 80026ce: f00a fa91 bl 800cbf4 <HAL_UART_IRQHandler>
  5236. /* USER CODE BEGIN UART8_IRQn 1 */
  5237. /* USER CODE END UART8_IRQn 1 */
  5238. }
  5239. 80026d2: bf00 nop
  5240. 80026d4: bd80 pop {r7, pc}
  5241. 80026d6: bf00 nop
  5242. 80026d8: 24000458 .word 0x24000458
  5243. 080026dc <_read>:
  5244. _kill(status, -1);
  5245. while (1) {} /* Make sure we hang here */
  5246. }
  5247. __attribute__((weak)) int _read(int file, char *ptr, int len)
  5248. {
  5249. 80026dc: b580 push {r7, lr}
  5250. 80026de: b086 sub sp, #24
  5251. 80026e0: af00 add r7, sp, #0
  5252. 80026e2: 60f8 str r0, [r7, #12]
  5253. 80026e4: 60b9 str r1, [r7, #8]
  5254. 80026e6: 607a str r2, [r7, #4]
  5255. (void)file;
  5256. int DataIdx;
  5257. for (DataIdx = 0; DataIdx < len; DataIdx++)
  5258. 80026e8: 2300 movs r3, #0
  5259. 80026ea: 617b str r3, [r7, #20]
  5260. 80026ec: e00a b.n 8002704 <_read+0x28>
  5261. {
  5262. *ptr++ = __io_getchar();
  5263. 80026ee: f3af 8000 nop.w
  5264. 80026f2: 4601 mov r1, r0
  5265. 80026f4: 68bb ldr r3, [r7, #8]
  5266. 80026f6: 1c5a adds r2, r3, #1
  5267. 80026f8: 60ba str r2, [r7, #8]
  5268. 80026fa: b2ca uxtb r2, r1
  5269. 80026fc: 701a strb r2, [r3, #0]
  5270. for (DataIdx = 0; DataIdx < len; DataIdx++)
  5271. 80026fe: 697b ldr r3, [r7, #20]
  5272. 8002700: 3301 adds r3, #1
  5273. 8002702: 617b str r3, [r7, #20]
  5274. 8002704: 697a ldr r2, [r7, #20]
  5275. 8002706: 687b ldr r3, [r7, #4]
  5276. 8002708: 429a cmp r2, r3
  5277. 800270a: dbf0 blt.n 80026ee <_read+0x12>
  5278. }
  5279. return len;
  5280. 800270c: 687b ldr r3, [r7, #4]
  5281. }
  5282. 800270e: 4618 mov r0, r3
  5283. 8002710: 3718 adds r7, #24
  5284. 8002712: 46bd mov sp, r7
  5285. 8002714: bd80 pop {r7, pc}
  5286. 08002716 <_write>:
  5287. __attribute__((weak)) int _write(int file, char *ptr, int len)
  5288. {
  5289. 8002716: b580 push {r7, lr}
  5290. 8002718: b086 sub sp, #24
  5291. 800271a: af00 add r7, sp, #0
  5292. 800271c: 60f8 str r0, [r7, #12]
  5293. 800271e: 60b9 str r1, [r7, #8]
  5294. 8002720: 607a str r2, [r7, #4]
  5295. (void)file;
  5296. int DataIdx;
  5297. for (DataIdx = 0; DataIdx < len; DataIdx++)
  5298. 8002722: 2300 movs r3, #0
  5299. 8002724: 617b str r3, [r7, #20]
  5300. 8002726: e009 b.n 800273c <_write+0x26>
  5301. {
  5302. __io_putchar(*ptr++);
  5303. 8002728: 68bb ldr r3, [r7, #8]
  5304. 800272a: 1c5a adds r2, r3, #1
  5305. 800272c: 60ba str r2, [r7, #8]
  5306. 800272e: 781b ldrb r3, [r3, #0]
  5307. 8002730: 4618 mov r0, r3
  5308. 8002732: f3af 8000 nop.w
  5309. for (DataIdx = 0; DataIdx < len; DataIdx++)
  5310. 8002736: 697b ldr r3, [r7, #20]
  5311. 8002738: 3301 adds r3, #1
  5312. 800273a: 617b str r3, [r7, #20]
  5313. 800273c: 697a ldr r2, [r7, #20]
  5314. 800273e: 687b ldr r3, [r7, #4]
  5315. 8002740: 429a cmp r2, r3
  5316. 8002742: dbf1 blt.n 8002728 <_write+0x12>
  5317. }
  5318. return len;
  5319. 8002744: 687b ldr r3, [r7, #4]
  5320. }
  5321. 8002746: 4618 mov r0, r3
  5322. 8002748: 3718 adds r7, #24
  5323. 800274a: 46bd mov sp, r7
  5324. 800274c: bd80 pop {r7, pc}
  5325. 0800274e <_close>:
  5326. int _close(int file)
  5327. {
  5328. 800274e: b480 push {r7}
  5329. 8002750: b083 sub sp, #12
  5330. 8002752: af00 add r7, sp, #0
  5331. 8002754: 6078 str r0, [r7, #4]
  5332. (void)file;
  5333. return -1;
  5334. 8002756: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  5335. }
  5336. 800275a: 4618 mov r0, r3
  5337. 800275c: 370c adds r7, #12
  5338. 800275e: 46bd mov sp, r7
  5339. 8002760: f85d 7b04 ldr.w r7, [sp], #4
  5340. 8002764: 4770 bx lr
  5341. 08002766 <_fstat>:
  5342. int _fstat(int file, struct stat *st)
  5343. {
  5344. 8002766: b480 push {r7}
  5345. 8002768: b083 sub sp, #12
  5346. 800276a: af00 add r7, sp, #0
  5347. 800276c: 6078 str r0, [r7, #4]
  5348. 800276e: 6039 str r1, [r7, #0]
  5349. (void)file;
  5350. st->st_mode = S_IFCHR;
  5351. 8002770: 683b ldr r3, [r7, #0]
  5352. 8002772: f44f 5200 mov.w r2, #8192 @ 0x2000
  5353. 8002776: 605a str r2, [r3, #4]
  5354. return 0;
  5355. 8002778: 2300 movs r3, #0
  5356. }
  5357. 800277a: 4618 mov r0, r3
  5358. 800277c: 370c adds r7, #12
  5359. 800277e: 46bd mov sp, r7
  5360. 8002780: f85d 7b04 ldr.w r7, [sp], #4
  5361. 8002784: 4770 bx lr
  5362. 08002786 <_isatty>:
  5363. int _isatty(int file)
  5364. {
  5365. 8002786: b480 push {r7}
  5366. 8002788: b083 sub sp, #12
  5367. 800278a: af00 add r7, sp, #0
  5368. 800278c: 6078 str r0, [r7, #4]
  5369. (void)file;
  5370. return 1;
  5371. 800278e: 2301 movs r3, #1
  5372. }
  5373. 8002790: 4618 mov r0, r3
  5374. 8002792: 370c adds r7, #12
  5375. 8002794: 46bd mov sp, r7
  5376. 8002796: f85d 7b04 ldr.w r7, [sp], #4
  5377. 800279a: 4770 bx lr
  5378. 0800279c <_lseek>:
  5379. int _lseek(int file, int ptr, int dir)
  5380. {
  5381. 800279c: b480 push {r7}
  5382. 800279e: b085 sub sp, #20
  5383. 80027a0: af00 add r7, sp, #0
  5384. 80027a2: 60f8 str r0, [r7, #12]
  5385. 80027a4: 60b9 str r1, [r7, #8]
  5386. 80027a6: 607a str r2, [r7, #4]
  5387. (void)file;
  5388. (void)ptr;
  5389. (void)dir;
  5390. return 0;
  5391. 80027a8: 2300 movs r3, #0
  5392. }
  5393. 80027aa: 4618 mov r0, r3
  5394. 80027ac: 3714 adds r7, #20
  5395. 80027ae: 46bd mov sp, r7
  5396. 80027b0: f85d 7b04 ldr.w r7, [sp], #4
  5397. 80027b4: 4770 bx lr
  5398. ...
  5399. 080027b8 <_sbrk>:
  5400. *
  5401. * @param incr Memory size
  5402. * @return Pointer to allocated memory
  5403. */
  5404. void *_sbrk(ptrdiff_t incr)
  5405. {
  5406. 80027b8: b580 push {r7, lr}
  5407. 80027ba: b086 sub sp, #24
  5408. 80027bc: af00 add r7, sp, #0
  5409. 80027be: 6078 str r0, [r7, #4]
  5410. extern uint8_t _end; /* Symbol defined in the linker script */
  5411. extern uint8_t _estack; /* Symbol defined in the linker script */
  5412. extern uint32_t _Min_Stack_Size; /* Symbol defined in the linker script */
  5413. const uint32_t stack_limit = (uint32_t)&_estack - (uint32_t)&_Min_Stack_Size;
  5414. 80027c0: 4a14 ldr r2, [pc, #80] @ (8002814 <_sbrk+0x5c>)
  5415. 80027c2: 4b15 ldr r3, [pc, #84] @ (8002818 <_sbrk+0x60>)
  5416. 80027c4: 1ad3 subs r3, r2, r3
  5417. 80027c6: 617b str r3, [r7, #20]
  5418. const uint8_t *max_heap = (uint8_t *)stack_limit;
  5419. 80027c8: 697b ldr r3, [r7, #20]
  5420. 80027ca: 613b str r3, [r7, #16]
  5421. uint8_t *prev_heap_end;
  5422. /* Initialize heap end at first call */
  5423. if (NULL == __sbrk_heap_end)
  5424. 80027cc: 4b13 ldr r3, [pc, #76] @ (800281c <_sbrk+0x64>)
  5425. 80027ce: 681b ldr r3, [r3, #0]
  5426. 80027d0: 2b00 cmp r3, #0
  5427. 80027d2: d102 bne.n 80027da <_sbrk+0x22>
  5428. {
  5429. __sbrk_heap_end = &_end;
  5430. 80027d4: 4b11 ldr r3, [pc, #68] @ (800281c <_sbrk+0x64>)
  5431. 80027d6: 4a12 ldr r2, [pc, #72] @ (8002820 <_sbrk+0x68>)
  5432. 80027d8: 601a str r2, [r3, #0]
  5433. }
  5434. /* Protect heap from growing into the reserved MSP stack */
  5435. if (__sbrk_heap_end + incr > max_heap)
  5436. 80027da: 4b10 ldr r3, [pc, #64] @ (800281c <_sbrk+0x64>)
  5437. 80027dc: 681a ldr r2, [r3, #0]
  5438. 80027de: 687b ldr r3, [r7, #4]
  5439. 80027e0: 4413 add r3, r2
  5440. 80027e2: 693a ldr r2, [r7, #16]
  5441. 80027e4: 429a cmp r2, r3
  5442. 80027e6: d207 bcs.n 80027f8 <_sbrk+0x40>
  5443. {
  5444. errno = ENOMEM;
  5445. 80027e8: f011 f8a2 bl 8013930 <__errno>
  5446. 80027ec: 4603 mov r3, r0
  5447. 80027ee: 220c movs r2, #12
  5448. 80027f0: 601a str r2, [r3, #0]
  5449. return (void *)-1;
  5450. 80027f2: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  5451. 80027f6: e009 b.n 800280c <_sbrk+0x54>
  5452. }
  5453. prev_heap_end = __sbrk_heap_end;
  5454. 80027f8: 4b08 ldr r3, [pc, #32] @ (800281c <_sbrk+0x64>)
  5455. 80027fa: 681b ldr r3, [r3, #0]
  5456. 80027fc: 60fb str r3, [r7, #12]
  5457. __sbrk_heap_end += incr;
  5458. 80027fe: 4b07 ldr r3, [pc, #28] @ (800281c <_sbrk+0x64>)
  5459. 8002800: 681a ldr r2, [r3, #0]
  5460. 8002802: 687b ldr r3, [r7, #4]
  5461. 8002804: 4413 add r3, r2
  5462. 8002806: 4a05 ldr r2, [pc, #20] @ (800281c <_sbrk+0x64>)
  5463. 8002808: 6013 str r3, [r2, #0]
  5464. return (void *)prev_heap_end;
  5465. 800280a: 68fb ldr r3, [r7, #12]
  5466. }
  5467. 800280c: 4618 mov r0, r3
  5468. 800280e: 3718 adds r7, #24
  5469. 8002810: 46bd mov sp, r7
  5470. 8002812: bd80 pop {r7, pc}
  5471. 8002814: 24060000 .word 0x24060000
  5472. 8002818: 00000400 .word 0x00000400
  5473. 800281c: 24000664 .word 0x24000664
  5474. 8002820: 24012b98 .word 0x24012b98
  5475. 08002824 <SystemInit>:
  5476. * configuration.
  5477. * @param None
  5478. * @retval None
  5479. */
  5480. void SystemInit (void)
  5481. {
  5482. 8002824: b480 push {r7}
  5483. 8002826: af00 add r7, sp, #0
  5484. __IO uint32_t tmpreg;
  5485. #endif /* DATA_IN_D2_SRAM */
  5486. /* FPU settings ------------------------------------------------------------*/
  5487. #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
  5488. SCB->CPACR |= ((3UL << (10*2))|(3UL << (11*2))); /* set CP10 and CP11 Full Access */
  5489. 8002828: 4b37 ldr r3, [pc, #220] @ (8002908 <SystemInit+0xe4>)
  5490. 800282a: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  5491. 800282e: 4a36 ldr r2, [pc, #216] @ (8002908 <SystemInit+0xe4>)
  5492. 8002830: f443 0370 orr.w r3, r3, #15728640 @ 0xf00000
  5493. 8002834: f8c2 3088 str.w r3, [r2, #136] @ 0x88
  5494. #endif
  5495. /* Reset the RCC clock configuration to the default reset state ------------*/
  5496. /* Increasing the CPU frequency */
  5497. if(FLASH_LATENCY_DEFAULT > (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY)))
  5498. 8002838: 4b34 ldr r3, [pc, #208] @ (800290c <SystemInit+0xe8>)
  5499. 800283a: 681b ldr r3, [r3, #0]
  5500. 800283c: f003 030f and.w r3, r3, #15
  5501. 8002840: 2b06 cmp r3, #6
  5502. 8002842: d807 bhi.n 8002854 <SystemInit+0x30>
  5503. {
  5504. /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
  5505. MODIFY_REG(FLASH->ACR, FLASH_ACR_LATENCY, (uint32_t)(FLASH_LATENCY_DEFAULT));
  5506. 8002844: 4b31 ldr r3, [pc, #196] @ (800290c <SystemInit+0xe8>)
  5507. 8002846: 681b ldr r3, [r3, #0]
  5508. 8002848: f023 030f bic.w r3, r3, #15
  5509. 800284c: 4a2f ldr r2, [pc, #188] @ (800290c <SystemInit+0xe8>)
  5510. 800284e: f043 0307 orr.w r3, r3, #7
  5511. 8002852: 6013 str r3, [r2, #0]
  5512. }
  5513. /* Set HSION bit */
  5514. RCC->CR |= RCC_CR_HSION;
  5515. 8002854: 4b2e ldr r3, [pc, #184] @ (8002910 <SystemInit+0xec>)
  5516. 8002856: 681b ldr r3, [r3, #0]
  5517. 8002858: 4a2d ldr r2, [pc, #180] @ (8002910 <SystemInit+0xec>)
  5518. 800285a: f043 0301 orr.w r3, r3, #1
  5519. 800285e: 6013 str r3, [r2, #0]
  5520. /* Reset CFGR register */
  5521. RCC->CFGR = 0x00000000;
  5522. 8002860: 4b2b ldr r3, [pc, #172] @ (8002910 <SystemInit+0xec>)
  5523. 8002862: 2200 movs r2, #0
  5524. 8002864: 611a str r2, [r3, #16]
  5525. /* Reset HSEON, HSECSSON, CSION, HSI48ON, CSIKERON, PLL1ON, PLL2ON and PLL3ON bits */
  5526. RCC->CR &= 0xEAF6ED7FU;
  5527. 8002866: 4b2a ldr r3, [pc, #168] @ (8002910 <SystemInit+0xec>)
  5528. 8002868: 681a ldr r2, [r3, #0]
  5529. 800286a: 4929 ldr r1, [pc, #164] @ (8002910 <SystemInit+0xec>)
  5530. 800286c: 4b29 ldr r3, [pc, #164] @ (8002914 <SystemInit+0xf0>)
  5531. 800286e: 4013 ands r3, r2
  5532. 8002870: 600b str r3, [r1, #0]
  5533. /* Decreasing the number of wait states because of lower CPU frequency */
  5534. if(FLASH_LATENCY_DEFAULT < (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY)))
  5535. 8002872: 4b26 ldr r3, [pc, #152] @ (800290c <SystemInit+0xe8>)
  5536. 8002874: 681b ldr r3, [r3, #0]
  5537. 8002876: f003 0308 and.w r3, r3, #8
  5538. 800287a: 2b00 cmp r3, #0
  5539. 800287c: d007 beq.n 800288e <SystemInit+0x6a>
  5540. {
  5541. /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
  5542. MODIFY_REG(FLASH->ACR, FLASH_ACR_LATENCY, (uint32_t)(FLASH_LATENCY_DEFAULT));
  5543. 800287e: 4b23 ldr r3, [pc, #140] @ (800290c <SystemInit+0xe8>)
  5544. 8002880: 681b ldr r3, [r3, #0]
  5545. 8002882: f023 030f bic.w r3, r3, #15
  5546. 8002886: 4a21 ldr r2, [pc, #132] @ (800290c <SystemInit+0xe8>)
  5547. 8002888: f043 0307 orr.w r3, r3, #7
  5548. 800288c: 6013 str r3, [r2, #0]
  5549. }
  5550. #if defined(D3_SRAM_BASE)
  5551. /* Reset D1CFGR register */
  5552. RCC->D1CFGR = 0x00000000;
  5553. 800288e: 4b20 ldr r3, [pc, #128] @ (8002910 <SystemInit+0xec>)
  5554. 8002890: 2200 movs r2, #0
  5555. 8002892: 619a str r2, [r3, #24]
  5556. /* Reset D2CFGR register */
  5557. RCC->D2CFGR = 0x00000000;
  5558. 8002894: 4b1e ldr r3, [pc, #120] @ (8002910 <SystemInit+0xec>)
  5559. 8002896: 2200 movs r2, #0
  5560. 8002898: 61da str r2, [r3, #28]
  5561. /* Reset D3CFGR register */
  5562. RCC->D3CFGR = 0x00000000;
  5563. 800289a: 4b1d ldr r3, [pc, #116] @ (8002910 <SystemInit+0xec>)
  5564. 800289c: 2200 movs r2, #0
  5565. 800289e: 621a str r2, [r3, #32]
  5566. /* Reset SRDCFGR register */
  5567. RCC->SRDCFGR = 0x00000000;
  5568. #endif
  5569. /* Reset PLLCKSELR register */
  5570. RCC->PLLCKSELR = 0x02020200;
  5571. 80028a0: 4b1b ldr r3, [pc, #108] @ (8002910 <SystemInit+0xec>)
  5572. 80028a2: 4a1d ldr r2, [pc, #116] @ (8002918 <SystemInit+0xf4>)
  5573. 80028a4: 629a str r2, [r3, #40] @ 0x28
  5574. /* Reset PLLCFGR register */
  5575. RCC->PLLCFGR = 0x01FF0000;
  5576. 80028a6: 4b1a ldr r3, [pc, #104] @ (8002910 <SystemInit+0xec>)
  5577. 80028a8: 4a1c ldr r2, [pc, #112] @ (800291c <SystemInit+0xf8>)
  5578. 80028aa: 62da str r2, [r3, #44] @ 0x2c
  5579. /* Reset PLL1DIVR register */
  5580. RCC->PLL1DIVR = 0x01010280;
  5581. 80028ac: 4b18 ldr r3, [pc, #96] @ (8002910 <SystemInit+0xec>)
  5582. 80028ae: 4a1c ldr r2, [pc, #112] @ (8002920 <SystemInit+0xfc>)
  5583. 80028b0: 631a str r2, [r3, #48] @ 0x30
  5584. /* Reset PLL1FRACR register */
  5585. RCC->PLL1FRACR = 0x00000000;
  5586. 80028b2: 4b17 ldr r3, [pc, #92] @ (8002910 <SystemInit+0xec>)
  5587. 80028b4: 2200 movs r2, #0
  5588. 80028b6: 635a str r2, [r3, #52] @ 0x34
  5589. /* Reset PLL2DIVR register */
  5590. RCC->PLL2DIVR = 0x01010280;
  5591. 80028b8: 4b15 ldr r3, [pc, #84] @ (8002910 <SystemInit+0xec>)
  5592. 80028ba: 4a19 ldr r2, [pc, #100] @ (8002920 <SystemInit+0xfc>)
  5593. 80028bc: 639a str r2, [r3, #56] @ 0x38
  5594. /* Reset PLL2FRACR register */
  5595. RCC->PLL2FRACR = 0x00000000;
  5596. 80028be: 4b14 ldr r3, [pc, #80] @ (8002910 <SystemInit+0xec>)
  5597. 80028c0: 2200 movs r2, #0
  5598. 80028c2: 63da str r2, [r3, #60] @ 0x3c
  5599. /* Reset PLL3DIVR register */
  5600. RCC->PLL3DIVR = 0x01010280;
  5601. 80028c4: 4b12 ldr r3, [pc, #72] @ (8002910 <SystemInit+0xec>)
  5602. 80028c6: 4a16 ldr r2, [pc, #88] @ (8002920 <SystemInit+0xfc>)
  5603. 80028c8: 641a str r2, [r3, #64] @ 0x40
  5604. /* Reset PLL3FRACR register */
  5605. RCC->PLL3FRACR = 0x00000000;
  5606. 80028ca: 4b11 ldr r3, [pc, #68] @ (8002910 <SystemInit+0xec>)
  5607. 80028cc: 2200 movs r2, #0
  5608. 80028ce: 645a str r2, [r3, #68] @ 0x44
  5609. /* Reset HSEBYP bit */
  5610. RCC->CR &= 0xFFFBFFFFU;
  5611. 80028d0: 4b0f ldr r3, [pc, #60] @ (8002910 <SystemInit+0xec>)
  5612. 80028d2: 681b ldr r3, [r3, #0]
  5613. 80028d4: 4a0e ldr r2, [pc, #56] @ (8002910 <SystemInit+0xec>)
  5614. 80028d6: f423 2380 bic.w r3, r3, #262144 @ 0x40000
  5615. 80028da: 6013 str r3, [r2, #0]
  5616. /* Disable all interrupts */
  5617. RCC->CIER = 0x00000000;
  5618. 80028dc: 4b0c ldr r3, [pc, #48] @ (8002910 <SystemInit+0xec>)
  5619. 80028de: 2200 movs r2, #0
  5620. 80028e0: 661a str r2, [r3, #96] @ 0x60
  5621. #if (STM32H7_DEV_ID == 0x450UL)
  5622. /* dual core CM7 or single core line */
  5623. if((DBGMCU->IDCODE & 0xFFFF0000U) < 0x20000000U)
  5624. 80028e2: 4b10 ldr r3, [pc, #64] @ (8002924 <SystemInit+0x100>)
  5625. 80028e4: 681a ldr r2, [r3, #0]
  5626. 80028e6: 4b10 ldr r3, [pc, #64] @ (8002928 <SystemInit+0x104>)
  5627. 80028e8: 4013 ands r3, r2
  5628. 80028ea: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  5629. 80028ee: d202 bcs.n 80028f6 <SystemInit+0xd2>
  5630. {
  5631. /* if stm32h7 revY*/
  5632. /* Change the switch matrix read issuing capability to 1 for the AXI SRAM target (Target 7) */
  5633. *((__IO uint32_t*)0x51008108) = 0x000000001U;
  5634. 80028f0: 4b0e ldr r3, [pc, #56] @ (800292c <SystemInit+0x108>)
  5635. 80028f2: 2201 movs r2, #1
  5636. 80028f4: 601a str r2, [r3, #0]
  5637. /*
  5638. * Disable the FMC bank1 (enabled after reset).
  5639. * This, prevents CPU speculation access on this bank which blocks the use of FMC during
  5640. * 24us. During this time the others FMC master (such as LTDC) cannot use it!
  5641. */
  5642. FMC_Bank1_R->BTCR[0] = 0x000030D2;
  5643. 80028f6: 4b0e ldr r3, [pc, #56] @ (8002930 <SystemInit+0x10c>)
  5644. 80028f8: f243 02d2 movw r2, #12498 @ 0x30d2
  5645. 80028fc: 601a str r2, [r3, #0]
  5646. #if defined(USER_VECT_TAB_ADDRESS)
  5647. SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal D1 AXI-RAM or in Internal FLASH */
  5648. #endif /* USER_VECT_TAB_ADDRESS */
  5649. #endif /*DUAL_CORE && CORE_CM4*/
  5650. }
  5651. 80028fe: bf00 nop
  5652. 8002900: 46bd mov sp, r7
  5653. 8002902: f85d 7b04 ldr.w r7, [sp], #4
  5654. 8002906: 4770 bx lr
  5655. 8002908: e000ed00 .word 0xe000ed00
  5656. 800290c: 52002000 .word 0x52002000
  5657. 8002910: 58024400 .word 0x58024400
  5658. 8002914: eaf6ed7f .word 0xeaf6ed7f
  5659. 8002918: 02020200 .word 0x02020200
  5660. 800291c: 01ff0000 .word 0x01ff0000
  5661. 8002920: 01010280 .word 0x01010280
  5662. 8002924: 5c001000 .word 0x5c001000
  5663. 8002928: ffff0000 .word 0xffff0000
  5664. 800292c: 51008108 .word 0x51008108
  5665. 8002930: 52004000 .word 0x52004000
  5666. 08002934 <UartTasksInit>:
  5667. //osMutexId_t resMeasurementsMutex;
  5668. //osMutexId_t sensorsInfoMutex;
  5669. extern RNG_HandleTypeDef hrng;
  5670. void UartTasksInit(void) {
  5671. 8002934: b580 push {r7, lr}
  5672. 8002936: af00 add r7, sp, #0
  5673. uart1TaskData.uartRxBuffer = uart1RxBuffer;
  5674. 8002938: 4b13 ldr r3, [pc, #76] @ (8002988 <UartTasksInit+0x54>)
  5675. 800293a: 4a14 ldr r2, [pc, #80] @ (800298c <UartTasksInit+0x58>)
  5676. 800293c: 601a str r2, [r3, #0]
  5677. uart1TaskData.uartRxBufferLen = UART1_RX_BUFF_SIZE;
  5678. 800293e: 4b12 ldr r3, [pc, #72] @ (8002988 <UartTasksInit+0x54>)
  5679. 8002940: f44f 7280 mov.w r2, #256 @ 0x100
  5680. 8002944: 809a strh r2, [r3, #4]
  5681. uart1TaskData.uartTxBuffer = uart1TxBuffer;
  5682. 8002946: 4b10 ldr r3, [pc, #64] @ (8002988 <UartTasksInit+0x54>)
  5683. 8002948: 4a11 ldr r2, [pc, #68] @ (8002990 <UartTasksInit+0x5c>)
  5684. 800294a: 609a str r2, [r3, #8]
  5685. uart1TaskData.uartRxBufferLen = UART1_TX_BUFF_SIZE;
  5686. 800294c: 4b0e ldr r3, [pc, #56] @ (8002988 <UartTasksInit+0x54>)
  5687. 800294e: f44f 7280 mov.w r2, #256 @ 0x100
  5688. 8002952: 809a strh r2, [r3, #4]
  5689. uart1TaskData.frameData = uart1TaskFrameData;
  5690. 8002954: 4b0c ldr r3, [pc, #48] @ (8002988 <UartTasksInit+0x54>)
  5691. 8002956: 4a0f ldr r2, [pc, #60] @ (8002994 <UartTasksInit+0x60>)
  5692. 8002958: 611a str r2, [r3, #16]
  5693. uart1TaskData.frameDataLen = UART1_RX_BUFF_SIZE;
  5694. 800295a: 4b0b ldr r3, [pc, #44] @ (8002988 <UartTasksInit+0x54>)
  5695. 800295c: f44f 7280 mov.w r2, #256 @ 0x100
  5696. 8002960: 829a strh r2, [r3, #20]
  5697. uart1TaskData.huart = &huart1;
  5698. 8002962: 4b09 ldr r3, [pc, #36] @ (8002988 <UartTasksInit+0x54>)
  5699. 8002964: 4a0c ldr r2, [pc, #48] @ (8002998 <UartTasksInit+0x64>)
  5700. 8002966: 631a str r2, [r3, #48] @ 0x30
  5701. uart1TaskData.uartNumber = 1;
  5702. 8002968: 4b07 ldr r3, [pc, #28] @ (8002988 <UartTasksInit+0x54>)
  5703. 800296a: 2201 movs r2, #1
  5704. 800296c: f883 2034 strb.w r2, [r3, #52] @ 0x34
  5705. uart1TaskData.processDataCb = Uart1ReceivedDataProcessCallback;
  5706. 8002970: 4b05 ldr r3, [pc, #20] @ (8002988 <UartTasksInit+0x54>)
  5707. 8002972: 4a0a ldr r2, [pc, #40] @ (800299c <UartTasksInit+0x68>)
  5708. 8002974: 629a str r2, [r3, #40] @ 0x28
  5709. uart1TaskData.processRxDataMsgBuffer = NULL;
  5710. 8002976: 4b04 ldr r3, [pc, #16] @ (8002988 <UartTasksInit+0x54>)
  5711. 8002978: 2200 movs r2, #0
  5712. 800297a: 625a str r2, [r3, #36] @ 0x24
  5713. // uart8TaskData.huart = &huart8;
  5714. // uart8TaskData.uartNumber = 8;
  5715. // uart8TaskData.processDataCb = Uart8ReceivedDataProcessCallback;
  5716. // uart8TaskData.processRxDataMsgBuffer = NULL;
  5717. UartTaskCreate(&uart1TaskData);
  5718. 800297c: 4802 ldr r0, [pc, #8] @ (8002988 <UartTasksInit+0x54>)
  5719. 800297e: f000 f80f bl 80029a0 <UartTaskCreate>
  5720. // UartTaskCreate(&uart8TaskData);
  5721. }
  5722. 8002982: bf00 nop
  5723. 8002984: bd80 pop {r7, pc}
  5724. 8002986: bf00 nop
  5725. 8002988: 24000968 .word 0x24000968
  5726. 800298c: 24000668 .word 0x24000668
  5727. 8002990: 24000768 .word 0x24000768
  5728. 8002994: 24000868 .word 0x24000868
  5729. 8002998: 240004ec .word 0x240004ec
  5730. 800299c: 080030a5 .word 0x080030a5
  5731. 080029a0 <UartTaskCreate>:
  5732. void UartTaskCreate (UartTaskData* uartTaskData) {
  5733. 80029a0: b580 push {r7, lr}
  5734. 80029a2: b08c sub sp, #48 @ 0x30
  5735. 80029a4: af00 add r7, sp, #0
  5736. 80029a6: 6078 str r0, [r7, #4]
  5737. osThreadAttr_t osThreadAttrRxUart = { 0 };
  5738. 80029a8: f107 030c add.w r3, r7, #12
  5739. 80029ac: 2224 movs r2, #36 @ 0x24
  5740. 80029ae: 2100 movs r1, #0
  5741. 80029b0: 4618 mov r0, r3
  5742. 80029b2: f010 ff18 bl 80137e6 <memset>
  5743. // osThreadAttr_t osThreadAttrTxUart = { 0 };
  5744. osThreadAttrRxUart.stack_size = configMINIMAL_STACK_SIZE * 2;
  5745. 80029b6: f44f 6380 mov.w r3, #1024 @ 0x400
  5746. 80029ba: 623b str r3, [r7, #32]
  5747. osThreadAttrRxUart.priority = (osPriority_t)osPriorityHigh;
  5748. 80029bc: 2328 movs r3, #40 @ 0x28
  5749. 80029be: 627b str r3, [r7, #36] @ 0x24
  5750. uartTaskData->uartRecieveTaskHandle = osThreadNew (UartRxTask, uartTaskData, &osThreadAttrRxUart);
  5751. 80029c0: f107 030c add.w r3, r7, #12
  5752. 80029c4: 461a mov r2, r3
  5753. 80029c6: 6879 ldr r1, [r7, #4]
  5754. 80029c8: 4804 ldr r0, [pc, #16] @ (80029dc <UartTaskCreate+0x3c>)
  5755. 80029ca: f00c fe81 bl 800f6d0 <osThreadNew>
  5756. 80029ce: 4602 mov r2, r0
  5757. 80029d0: 687b ldr r3, [r7, #4]
  5758. 80029d2: 619a str r2, [r3, #24]
  5759. // uartTaskData->sendCmdToSlaveQueue = osMessageQueueNew (16, sizeof (InterProcessData), &uartTxMsgQueueAttr);
  5760. // osThreadAttrTxUart.stack_size = configMINIMAL_STACK_SIZE * 4;
  5761. // osThreadAttrTxUart.priority = (osPriority_t)osPriorityNormal;
  5762. // uartTaskData->uartTransmitTaskHandle = osThreadNew (UartTxTask, uartTaskData, &osThreadAttrTxUart);
  5763. }
  5764. 80029d4: bf00 nop
  5765. 80029d6: 3730 adds r7, #48 @ 0x30
  5766. 80029d8: 46bd mov sp, r7
  5767. 80029da: bd80 pop {r7, pc}
  5768. 80029dc: 08002af5 .word 0x08002af5
  5769. 080029e0 <HAL_UART_RxCpltCallback>:
  5770. // osThreadAttrTxUart.stack_size = configMINIMAL_STACK_SIZE * 4;
  5771. // osThreadAttrTxUart.priority = (osPriority_t)osPriorityNormal;
  5772. // uart8TaskData.uartTransmitTaskHandle = osThreadNew (UartTxTask, &uart8TaskData, &osThreadAttrTxUart);
  5773. }
  5774. void HAL_UART_RxCpltCallback (UART_HandleTypeDef* huart) {
  5775. 80029e0: b480 push {r7}
  5776. 80029e2: b083 sub sp, #12
  5777. 80029e4: af00 add r7, sp, #0
  5778. 80029e6: 6078 str r0, [r7, #4]
  5779. // osSemaphoreRelease(uart8RxSemaphore);
  5780. }
  5781. 80029e8: bf00 nop
  5782. 80029ea: 370c adds r7, #12
  5783. 80029ec: 46bd mov sp, r7
  5784. 80029ee: f85d 7b04 ldr.w r7, [sp], #4
  5785. 80029f2: 4770 bx lr
  5786. 080029f4 <HAL_UARTEx_RxEventCallback>:
  5787. void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef* huart, uint16_t Size) {
  5788. 80029f4: b580 push {r7, lr}
  5789. 80029f6: b082 sub sp, #8
  5790. 80029f8: af00 add r7, sp, #0
  5791. 80029fa: 6078 str r0, [r7, #4]
  5792. 80029fc: 460b mov r3, r1
  5793. 80029fe: 807b strh r3, [r7, #2]
  5794. if (huart->Instance == USART1) {
  5795. 8002a00: 687b ldr r3, [r7, #4]
  5796. 8002a02: 681b ldr r3, [r3, #0]
  5797. 8002a04: 4a0c ldr r2, [pc, #48] @ (8002a38 <HAL_UARTEx_RxEventCallback+0x44>)
  5798. 8002a06: 4293 cmp r3, r2
  5799. 8002a08: d106 bne.n 8002a18 <HAL_UARTEx_RxEventCallback+0x24>
  5800. HandleUartRxCallback(&uart1TaskData, huart, Size);
  5801. 8002a0a: 887b ldrh r3, [r7, #2]
  5802. 8002a0c: 461a mov r2, r3
  5803. 8002a0e: 6879 ldr r1, [r7, #4]
  5804. 8002a10: 480a ldr r0, [pc, #40] @ (8002a3c <HAL_UARTEx_RxEventCallback+0x48>)
  5805. 8002a12: f000 f823 bl 8002a5c <HandleUartRxCallback>
  5806. } else if (huart->Instance == UART8) {
  5807. HandleUartRxCallback(&uart8TaskData, huart, Size);
  5808. }
  5809. }
  5810. 8002a16: e00a b.n 8002a2e <HAL_UARTEx_RxEventCallback+0x3a>
  5811. } else if (huart->Instance == UART8) {
  5812. 8002a18: 687b ldr r3, [r7, #4]
  5813. 8002a1a: 681b ldr r3, [r3, #0]
  5814. 8002a1c: 4a08 ldr r2, [pc, #32] @ (8002a40 <HAL_UARTEx_RxEventCallback+0x4c>)
  5815. 8002a1e: 4293 cmp r3, r2
  5816. 8002a20: d105 bne.n 8002a2e <HAL_UARTEx_RxEventCallback+0x3a>
  5817. HandleUartRxCallback(&uart8TaskData, huart, Size);
  5818. 8002a22: 887b ldrh r3, [r7, #2]
  5819. 8002a24: 461a mov r2, r3
  5820. 8002a26: 6879 ldr r1, [r7, #4]
  5821. 8002a28: 4806 ldr r0, [pc, #24] @ (8002a44 <HAL_UARTEx_RxEventCallback+0x50>)
  5822. 8002a2a: f000 f817 bl 8002a5c <HandleUartRxCallback>
  5823. }
  5824. 8002a2e: bf00 nop
  5825. 8002a30: 3708 adds r7, #8
  5826. 8002a32: 46bd mov sp, r7
  5827. 8002a34: bd80 pop {r7, pc}
  5828. 8002a36: bf00 nop
  5829. 8002a38: 40011000 .word 0x40011000
  5830. 8002a3c: 24000968 .word 0x24000968
  5831. 8002a40: 40007c00 .word 0x40007c00
  5832. 8002a44: 240009a0 .word 0x240009a0
  5833. 08002a48 <HAL_UART_TxCpltCallback>:
  5834. void HAL_UART_TxCpltCallback (UART_HandleTypeDef* huart) {
  5835. 8002a48: b480 push {r7}
  5836. 8002a4a: b083 sub sp, #12
  5837. 8002a4c: af00 add r7, sp, #0
  5838. 8002a4e: 6078 str r0, [r7, #4]
  5839. if (huart->Instance == UART8) {
  5840. }
  5841. }
  5842. 8002a50: bf00 nop
  5843. 8002a52: 370c adds r7, #12
  5844. 8002a54: 46bd mov sp, r7
  5845. 8002a56: f85d 7b04 ldr.w r7, [sp], #4
  5846. 8002a5a: 4770 bx lr
  5847. 08002a5c <HandleUartRxCallback>:
  5848. void HandleUartRxCallback (UartTaskData* uartTaskData, UART_HandleTypeDef* huart, uint16_t Size) {
  5849. 8002a5c: b580 push {r7, lr}
  5850. 8002a5e: b088 sub sp, #32
  5851. 8002a60: af02 add r7, sp, #8
  5852. 8002a62: 60f8 str r0, [r7, #12]
  5853. 8002a64: 60b9 str r1, [r7, #8]
  5854. 8002a66: 4613 mov r3, r2
  5855. 8002a68: 80fb strh r3, [r7, #6]
  5856. BaseType_t pxHigherPriorityTaskWoken = pdFALSE;
  5857. 8002a6a: 2300 movs r3, #0
  5858. 8002a6c: 617b str r3, [r7, #20]
  5859. osMutexAcquire (uartTaskData->rxDataBufferMutex, osWaitForever);
  5860. 8002a6e: 68fb ldr r3, [r7, #12]
  5861. 8002a70: 6a1b ldr r3, [r3, #32]
  5862. 8002a72: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  5863. 8002a76: 4618 mov r0, r3
  5864. 8002a78: f00c ff5e bl 800f938 <osMutexAcquire>
  5865. memcpy (&(uartTaskData->frameData[uartTaskData->frameBytesCount]), uartTaskData->uartRxBuffer, Size);
  5866. 8002a7c: 68fb ldr r3, [r7, #12]
  5867. 8002a7e: 691b ldr r3, [r3, #16]
  5868. 8002a80: 68fa ldr r2, [r7, #12]
  5869. 8002a82: 8ad2 ldrh r2, [r2, #22]
  5870. 8002a84: 1898 adds r0, r3, r2
  5871. 8002a86: 68fb ldr r3, [r7, #12]
  5872. 8002a88: 681b ldr r3, [r3, #0]
  5873. 8002a8a: 88fa ldrh r2, [r7, #6]
  5874. 8002a8c: 4619 mov r1, r3
  5875. 8002a8e: f010 ff7c bl 801398a <memcpy>
  5876. uartTaskData->frameBytesCount += Size;
  5877. 8002a92: 68fb ldr r3, [r7, #12]
  5878. 8002a94: 8ada ldrh r2, [r3, #22]
  5879. 8002a96: 88fb ldrh r3, [r7, #6]
  5880. 8002a98: 4413 add r3, r2
  5881. 8002a9a: b29a uxth r2, r3
  5882. 8002a9c: 68fb ldr r3, [r7, #12]
  5883. 8002a9e: 82da strh r2, [r3, #22]
  5884. osMutexRelease (uartTaskData->rxDataBufferMutex);
  5885. 8002aa0: 68fb ldr r3, [r7, #12]
  5886. 8002aa2: 6a1b ldr r3, [r3, #32]
  5887. 8002aa4: 4618 mov r0, r3
  5888. 8002aa6: f00c ff92 bl 800f9ce <osMutexRelease>
  5889. xTaskNotifyFromISR (uartTaskData->uartRecieveTaskHandle, Size, eSetValueWithOverwrite, &pxHigherPriorityTaskWoken);
  5890. 8002aaa: 68fb ldr r3, [r7, #12]
  5891. 8002aac: 6998 ldr r0, [r3, #24]
  5892. 8002aae: 88f9 ldrh r1, [r7, #6]
  5893. 8002ab0: f107 0314 add.w r3, r7, #20
  5894. 8002ab4: 9300 str r3, [sp, #0]
  5895. 8002ab6: 2300 movs r3, #0
  5896. 8002ab8: 2203 movs r2, #3
  5897. 8002aba: f00f fc83 bl 80123c4 <xTaskGenericNotifyFromISR>
  5898. // HAL_UARTEx_ReceiveToIdle_DMA(huart, uart8RxBuffer, UART8_RX_BUFF_SIZE);
  5899. // __HAL_DMA_DISABLE_IT(&hdma_uart8_rx, DMA_IT_HT);
  5900. HAL_UARTEx_ReceiveToIdle_IT (uartTaskData->huart, uartTaskData->uartRxBuffer, uartTaskData->uartRxBufferLen);
  5901. 8002abe: 68fb ldr r3, [r7, #12]
  5902. 8002ac0: 6b18 ldr r0, [r3, #48] @ 0x30
  5903. 8002ac2: 68fb ldr r3, [r7, #12]
  5904. 8002ac4: 6819 ldr r1, [r3, #0]
  5905. 8002ac6: 68fb ldr r3, [r7, #12]
  5906. 8002ac8: 889b ldrh r3, [r3, #4]
  5907. 8002aca: 461a mov r2, r3
  5908. 8002acc: f00c fcd3 bl 800f476 <HAL_UARTEx_ReceiveToIdle_IT>
  5909. portEND_SWITCHING_ISR (pxHigherPriorityTaskWoken);
  5910. 8002ad0: 697b ldr r3, [r7, #20]
  5911. 8002ad2: 2b00 cmp r3, #0
  5912. 8002ad4: d007 beq.n 8002ae6 <HandleUartRxCallback+0x8a>
  5913. 8002ad6: 4b06 ldr r3, [pc, #24] @ (8002af0 <HandleUartRxCallback+0x94>)
  5914. 8002ad8: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  5915. 8002adc: 601a str r2, [r3, #0]
  5916. 8002ade: f3bf 8f4f dsb sy
  5917. 8002ae2: f3bf 8f6f isb sy
  5918. }
  5919. 8002ae6: bf00 nop
  5920. 8002ae8: 3718 adds r7, #24
  5921. 8002aea: 46bd mov sp, r7
  5922. 8002aec: bd80 pop {r7, pc}
  5923. 8002aee: bf00 nop
  5924. 8002af0: e000ed04 .word 0xe000ed04
  5925. 08002af4 <UartRxTask>:
  5926. void UartRxTask (void* argument) {
  5927. 8002af4: b580 push {r7, lr}
  5928. 8002af6: b0d2 sub sp, #328 @ 0x148
  5929. 8002af8: af02 add r7, sp, #8
  5930. 8002afa: f507 73a0 add.w r3, r7, #320 @ 0x140
  5931. 8002afe: f5a3 739e sub.w r3, r3, #316 @ 0x13c
  5932. 8002b02: 6018 str r0, [r3, #0]
  5933. UartTaskData* uartTaskData = (UartTaskData*)argument;
  5934. 8002b04: f507 73a0 add.w r3, r7, #320 @ 0x140
  5935. 8002b08: f5a3 739e sub.w r3, r3, #316 @ 0x13c
  5936. 8002b0c: 681b ldr r3, [r3, #0]
  5937. 8002b0e: f8c7 312c str.w r3, [r7, #300] @ 0x12c
  5938. SerialProtocolFrameData spFrameData = { 0 };
  5939. 8002b12: f507 73a0 add.w r3, r7, #320 @ 0x140
  5940. 8002b16: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  5941. 8002b1a: 4618 mov r0, r3
  5942. 8002b1c: f44f 7386 mov.w r3, #268 @ 0x10c
  5943. 8002b20: 461a mov r2, r3
  5944. 8002b22: 2100 movs r1, #0
  5945. 8002b24: f010 fe5f bl 80137e6 <memset>
  5946. uint32_t bytesRec = 0;
  5947. 8002b28: f507 73a0 add.w r3, r7, #320 @ 0x140
  5948. 8002b2c: f5a3 739a sub.w r3, r3, #308 @ 0x134
  5949. 8002b30: 2200 movs r2, #0
  5950. 8002b32: 601a str r2, [r3, #0]
  5951. uint32_t crc = 0;
  5952. 8002b34: 2300 movs r3, #0
  5953. 8002b36: f8c7 3128 str.w r3, [r7, #296] @ 0x128
  5954. uint16_t frameCommandRaw = 0x0000;
  5955. 8002b3a: 2300 movs r3, #0
  5956. 8002b3c: f8a7 3126 strh.w r3, [r7, #294] @ 0x126
  5957. uint16_t frameBytesCount = 0;
  5958. 8002b40: 2300 movs r3, #0
  5959. 8002b42: f8a7 3124 strh.w r3, [r7, #292] @ 0x124
  5960. uint16_t frameCrc = 0;
  5961. 8002b46: 2300 movs r3, #0
  5962. 8002b48: f8a7 3122 strh.w r3, [r7, #290] @ 0x122
  5963. uint16_t frameTotalLength = 0;
  5964. 8002b4c: 2300 movs r3, #0
  5965. 8002b4e: f8a7 313e strh.w r3, [r7, #318] @ 0x13e
  5966. uint16_t dataToSend = 0;
  5967. 8002b52: 2300 movs r3, #0
  5968. 8002b54: f8a7 313c strh.w r3, [r7, #316] @ 0x13c
  5969. portBASE_TYPE crcPass = pdFAIL;
  5970. 8002b58: 2300 movs r3, #0
  5971. 8002b5a: f8c7 3138 str.w r3, [r7, #312] @ 0x138
  5972. portBASE_TYPE proceed = pdFALSE;
  5973. 8002b5e: 2300 movs r3, #0
  5974. 8002b60: f8c7 3134 str.w r3, [r7, #308] @ 0x134
  5975. portBASE_TYPE frameTimeout = pdFAIL;
  5976. 8002b64: 2300 movs r3, #0
  5977. 8002b66: f8c7 311c str.w r3, [r7, #284] @ 0x11c
  5978. enum SerialReceiverStates receverState = srWaitForHeader;
  5979. 8002b6a: 2300 movs r3, #0
  5980. 8002b6c: f887 3133 strb.w r3, [r7, #307] @ 0x133
  5981. uartTaskData->rxDataBufferMutex = osMutexNew (NULL);
  5982. 8002b70: 2000 movs r0, #0
  5983. 8002b72: f00c fe5b bl 800f82c <osMutexNew>
  5984. 8002b76: 4602 mov r2, r0
  5985. 8002b78: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  5986. 8002b7c: 621a str r2, [r3, #32]
  5987. HAL_UARTEx_ReceiveToIdle_IT (uartTaskData->huart, uartTaskData->uartRxBuffer, uartTaskData->uartRxBufferLen);
  5988. 8002b7e: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  5989. 8002b82: 6b18 ldr r0, [r3, #48] @ 0x30
  5990. 8002b84: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  5991. 8002b88: 6819 ldr r1, [r3, #0]
  5992. 8002b8a: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  5993. 8002b8e: 889b ldrh r3, [r3, #4]
  5994. 8002b90: 461a mov r2, r3
  5995. 8002b92: f00c fc70 bl 800f476 <HAL_UARTEx_ReceiveToIdle_IT>
  5996. // HAL_UARTEx_ReceiveToIdle_DMA(&huart8, uart8RxBuffer, 32);
  5997. while (pdTRUE) {
  5998. // HAL_UART_Receive_IT(&huart8, uart8RxBuffer, 1);
  5999. // if(osSemaphoreAcquire(uart8RxSemaphore, pdMS_TO_TICKS(1000)) !=
  6000. // osOK) if(xTaskNotifyWait(0, 0, &bytesRec, portMAX_DELAY) == pdTrue)
  6001. frameTimeout = !(xTaskNotifyWait (0, 0, &bytesRec, pdMS_TO_TICKS (FRAME_TIMEOUT_MS)));
  6002. 8002b96: f107 020c add.w r2, r7, #12
  6003. 8002b9a: f44f 63fa mov.w r3, #2000 @ 0x7d0
  6004. 8002b9e: 2100 movs r1, #0
  6005. 8002ba0: 2000 movs r0, #0
  6006. 8002ba2: f00f faed bl 8012180 <xTaskNotifyWait>
  6007. 8002ba6: 4603 mov r3, r0
  6008. 8002ba8: 2b00 cmp r3, #0
  6009. 8002baa: bf0c ite eq
  6010. 8002bac: 2301 moveq r3, #1
  6011. 8002bae: 2300 movne r3, #0
  6012. 8002bb0: b2db uxtb r3, r3
  6013. 8002bb2: f8c7 311c str.w r3, [r7, #284] @ 0x11c
  6014. osMutexAcquire (uartTaskData->rxDataBufferMutex, osWaitForever);
  6015. 8002bb6: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6016. 8002bba: 6a1b ldr r3, [r3, #32]
  6017. 8002bbc: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  6018. 8002bc0: 4618 mov r0, r3
  6019. 8002bc2: f00c feb9 bl 800f938 <osMutexAcquire>
  6020. frameBytesCount = uartTaskData->frameBytesCount;
  6021. 8002bc6: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6022. 8002bca: 8adb ldrh r3, [r3, #22]
  6023. 8002bcc: f8a7 3124 strh.w r3, [r7, #292] @ 0x124
  6024. osMutexRelease (uartTaskData->rxDataBufferMutex);
  6025. 8002bd0: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6026. 8002bd4: 6a1b ldr r3, [r3, #32]
  6027. 8002bd6: 4618 mov r0, r3
  6028. 8002bd8: f00c fef9 bl 800f9ce <osMutexRelease>
  6029. if ((frameTimeout == pdTRUE) && (frameBytesCount > 0)) {
  6030. 8002bdc: f8d7 311c ldr.w r3, [r7, #284] @ 0x11c
  6031. 8002be0: 2b01 cmp r3, #1
  6032. 8002be2: d10a bne.n 8002bfa <UartRxTask+0x106>
  6033. 8002be4: f8b7 3124 ldrh.w r3, [r7, #292] @ 0x124
  6034. 8002be8: 2b00 cmp r3, #0
  6035. 8002bea: d006 beq.n 8002bfa <UartRxTask+0x106>
  6036. receverState = srFail;
  6037. 8002bec: 2304 movs r3, #4
  6038. 8002bee: f887 3133 strb.w r3, [r7, #307] @ 0x133
  6039. proceed = pdTRUE;
  6040. 8002bf2: 2301 movs r3, #1
  6041. 8002bf4: f8c7 3134 str.w r3, [r7, #308] @ 0x134
  6042. 8002bf8: e029 b.n 8002c4e <UartRxTask+0x15a>
  6043. } else {
  6044. if (frameTimeout == pdFALSE) {
  6045. 8002bfa: f8d7 311c ldr.w r3, [r7, #284] @ 0x11c
  6046. 8002bfe: 2b00 cmp r3, #0
  6047. 8002c00: d111 bne.n 8002c26 <UartRxTask+0x132>
  6048. proceed = pdTRUE;
  6049. 8002c02: 2301 movs r3, #1
  6050. 8002c04: f8c7 3134 str.w r3, [r7, #308] @ 0x134
  6051. #if UART_TASK_LOGS
  6052. printf ("Uart%d: RX bytes received: %ld\n", uartTaskData->uartNumber, bytesRec);
  6053. 8002c08: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6054. 8002c0c: f893 3034 ldrb.w r3, [r3, #52] @ 0x34
  6055. 8002c10: 4619 mov r1, r3
  6056. 8002c12: f507 73a0 add.w r3, r7, #320 @ 0x140
  6057. 8002c16: f5a3 739a sub.w r3, r3, #308 @ 0x134
  6058. 8002c1a: 681b ldr r3, [r3, #0]
  6059. 8002c1c: 461a mov r2, r3
  6060. 8002c1e: 48c1 ldr r0, [pc, #772] @ (8002f24 <UartRxTask+0x430>)
  6061. 8002c20: f010 fd8c bl 801373c <iprintf>
  6062. 8002c24: e22f b.n 8003086 <UartRxTask+0x592>
  6063. #endif
  6064. } else {
  6065. if (uartTaskData->huart->RxState == HAL_UART_STATE_READY) {
  6066. 8002c26: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6067. 8002c2a: 6b1b ldr r3, [r3, #48] @ 0x30
  6068. 8002c2c: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c
  6069. 8002c30: 2b20 cmp r3, #32
  6070. 8002c32: f040 8228 bne.w 8003086 <UartRxTask+0x592>
  6071. HAL_UARTEx_ReceiveToIdle_IT (uartTaskData->huart, uartTaskData->uartRxBuffer, uartTaskData->uartRxBufferLen);
  6072. 8002c36: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6073. 8002c3a: 6b18 ldr r0, [r3, #48] @ 0x30
  6074. 8002c3c: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6075. 8002c40: 6819 ldr r1, [r3, #0]
  6076. 8002c42: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6077. 8002c46: 889b ldrh r3, [r3, #4]
  6078. 8002c48: 461a mov r2, r3
  6079. 8002c4a: f00c fc14 bl 800f476 <HAL_UARTEx_ReceiveToIdle_IT>
  6080. }
  6081. }
  6082. }
  6083. while (proceed) {
  6084. 8002c4e: e21a b.n 8003086 <UartRxTask+0x592>
  6085. switch (receverState) {
  6086. 8002c50: f897 3133 ldrb.w r3, [r7, #307] @ 0x133
  6087. 8002c54: 2b04 cmp r3, #4
  6088. 8002c56: f200 81f1 bhi.w 800303c <UartRxTask+0x548>
  6089. 8002c5a: a201 add r2, pc, #4 @ (adr r2, 8002c60 <UartRxTask+0x16c>)
  6090. 8002c5c: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  6091. 8002c60: 08002c75 .word 0x08002c75
  6092. 8002c64: 08002dd7 .word 0x08002dd7
  6093. 8002c68: 08002dbb .word 0x08002dbb
  6094. 8002c6c: 08002e77 .word 0x08002e77
  6095. 8002c70: 08002f31 .word 0x08002f31
  6096. case srWaitForHeader:
  6097. osMutexAcquire (uartTaskData->rxDataBufferMutex, osWaitForever);
  6098. 8002c74: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6099. 8002c78: 6a1b ldr r3, [r3, #32]
  6100. 8002c7a: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  6101. 8002c7e: 4618 mov r0, r3
  6102. 8002c80: f00c fe5a bl 800f938 <osMutexAcquire>
  6103. if (uartTaskData->frameData[0] == FRAME_INDICATOR) {
  6104. 8002c84: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6105. 8002c88: 691b ldr r3, [r3, #16]
  6106. 8002c8a: 781b ldrb r3, [r3, #0]
  6107. 8002c8c: 2baa cmp r3, #170 @ 0xaa
  6108. 8002c8e: f040 8082 bne.w 8002d96 <UartRxTask+0x2a2>
  6109. if (frameBytesCount > FRAME_ID_LENGTH) {
  6110. 8002c92: f8b7 3124 ldrh.w r3, [r7, #292] @ 0x124
  6111. 8002c96: 2b02 cmp r3, #2
  6112. 8002c98: d914 bls.n 8002cc4 <UartRxTask+0x1d0>
  6113. spFrameData.frameHeader.frameId =
  6114. CONVERT_BYTES_TO_SHORT_WORD (&(uartTaskData->frameData[FRAME_HEADER_LENGTH - FRAME_RESP_STAT_LENGTH - FRAME_DATALEN_LENGTH - FRAME_ID_LENGTH - FRAME_COMMAND_LENGTH]));
  6115. 8002c9a: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6116. 8002c9e: 691b ldr r3, [r3, #16]
  6117. 8002ca0: 3302 adds r3, #2
  6118. 8002ca2: 781b ldrb r3, [r3, #0]
  6119. 8002ca4: 021b lsls r3, r3, #8
  6120. 8002ca6: b21a sxth r2, r3
  6121. 8002ca8: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6122. 8002cac: 691b ldr r3, [r3, #16]
  6123. 8002cae: 3301 adds r3, #1
  6124. 8002cb0: 781b ldrb r3, [r3, #0]
  6125. 8002cb2: b21b sxth r3, r3
  6126. 8002cb4: 4313 orrs r3, r2
  6127. 8002cb6: b21b sxth r3, r3
  6128. 8002cb8: b29a uxth r2, r3
  6129. spFrameData.frameHeader.frameId =
  6130. 8002cba: f507 73a0 add.w r3, r7, #320 @ 0x140
  6131. 8002cbe: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  6132. 8002cc2: 801a strh r2, [r3, #0]
  6133. }
  6134. if (frameBytesCount > FRAME_ID_LENGTH + FRAME_COMMAND_LENGTH) {
  6135. 8002cc4: f8b7 3124 ldrh.w r3, [r7, #292] @ 0x124
  6136. 8002cc8: 2b04 cmp r3, #4
  6137. 8002cca: d923 bls.n 8002d14 <UartRxTask+0x220>
  6138. frameCommandRaw = CONVERT_BYTES_TO_SHORT_WORD (&(uartTaskData->frameData[FRAME_HEADER_LENGTH - FRAME_RESP_STAT_LENGTH - FRAME_DATALEN_LENGTH - FRAME_COMMAND_LENGTH]));
  6139. 8002ccc: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6140. 8002cd0: 691b ldr r3, [r3, #16]
  6141. 8002cd2: 3304 adds r3, #4
  6142. 8002cd4: 781b ldrb r3, [r3, #0]
  6143. 8002cd6: 021b lsls r3, r3, #8
  6144. 8002cd8: b21a sxth r2, r3
  6145. 8002cda: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6146. 8002cde: 691b ldr r3, [r3, #16]
  6147. 8002ce0: 3303 adds r3, #3
  6148. 8002ce2: 781b ldrb r3, [r3, #0]
  6149. 8002ce4: b21b sxth r3, r3
  6150. 8002ce6: 4313 orrs r3, r2
  6151. 8002ce8: b21b sxth r3, r3
  6152. 8002cea: f8a7 3126 strh.w r3, [r7, #294] @ 0x126
  6153. spFrameData.frameHeader.frameCommand = (SerialProtocolCommands)(frameCommandRaw & 0x7FFF);
  6154. 8002cee: f8b7 3126 ldrh.w r3, [r7, #294] @ 0x126
  6155. 8002cf2: b2da uxtb r2, r3
  6156. 8002cf4: f507 73a0 add.w r3, r7, #320 @ 0x140
  6157. 8002cf8: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  6158. 8002cfc: 709a strb r2, [r3, #2]
  6159. spFrameData.frameHeader.isResponseFrame = (frameCommandRaw & 0x8000) != 0 ? pdTRUE : pdFALSE;
  6160. 8002cfe: f9b7 3126 ldrsh.w r3, [r7, #294] @ 0x126
  6161. 8002d02: 13db asrs r3, r3, #15
  6162. 8002d04: b21b sxth r3, r3
  6163. 8002d06: f003 0201 and.w r2, r3, #1
  6164. 8002d0a: f507 73a0 add.w r3, r7, #320 @ 0x140
  6165. 8002d0e: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  6166. 8002d12: 609a str r2, [r3, #8]
  6167. }
  6168. if ((frameBytesCount > FRAME_ID_LENGTH + FRAME_COMMAND_LENGTH + FRAME_RESP_STAT_LENGTH) && ((spFrameData.frameHeader.frameCommand & 0x8000) != 0)) {
  6169. 8002d14: f8b7 3124 ldrh.w r3, [r7, #292] @ 0x124
  6170. 8002d18: 2b05 cmp r3, #5
  6171. 8002d1a: d913 bls.n 8002d44 <UartRxTask+0x250>
  6172. 8002d1c: f507 73a0 add.w r3, r7, #320 @ 0x140
  6173. 8002d20: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  6174. 8002d24: 789b ldrb r3, [r3, #2]
  6175. 8002d26: f403 4300 and.w r3, r3, #32768 @ 0x8000
  6176. 8002d2a: 2b00 cmp r3, #0
  6177. 8002d2c: d00a beq.n 8002d44 <UartRxTask+0x250>
  6178. spFrameData.frameHeader.respStatus = (SerialProtocolRespStatus)(uartTaskData->frameData[FRAME_ID_LENGTH + FRAME_COMMAND_LENGTH + FRAME_RESP_STAT_LENGTH]);
  6179. 8002d2e: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6180. 8002d32: 691b ldr r3, [r3, #16]
  6181. 8002d34: 3305 adds r3, #5
  6182. 8002d36: 781b ldrb r3, [r3, #0]
  6183. 8002d38: b25a sxtb r2, r3
  6184. 8002d3a: f507 73a0 add.w r3, r7, #320 @ 0x140
  6185. 8002d3e: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  6186. 8002d42: 70da strb r2, [r3, #3]
  6187. }
  6188. if (frameBytesCount >= FRAME_HEADER_LENGTH) {
  6189. 8002d44: f8b7 3124 ldrh.w r3, [r7, #292] @ 0x124
  6190. 8002d48: 2b07 cmp r3, #7
  6191. 8002d4a: d920 bls.n 8002d8e <UartRxTask+0x29a>
  6192. spFrameData.frameHeader.frameDataLength = CONVERT_BYTES_TO_SHORT_WORD (&(uartTaskData->frameData[FRAME_HEADER_LENGTH - FRAME_RESP_STAT_LENGTH - FRAME_DATALEN_LENGTH]));
  6193. 8002d4c: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6194. 8002d50: 691b ldr r3, [r3, #16]
  6195. 8002d52: 3306 adds r3, #6
  6196. 8002d54: 781b ldrb r3, [r3, #0]
  6197. 8002d56: 021b lsls r3, r3, #8
  6198. 8002d58: b21a sxth r2, r3
  6199. 8002d5a: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6200. 8002d5e: 691b ldr r3, [r3, #16]
  6201. 8002d60: 3305 adds r3, #5
  6202. 8002d62: 781b ldrb r3, [r3, #0]
  6203. 8002d64: b21b sxth r3, r3
  6204. 8002d66: 4313 orrs r3, r2
  6205. 8002d68: b21b sxth r3, r3
  6206. 8002d6a: b29a uxth r2, r3
  6207. 8002d6c: f507 73a0 add.w r3, r7, #320 @ 0x140
  6208. 8002d70: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  6209. 8002d74: 809a strh r2, [r3, #4]
  6210. frameTotalLength = FRAME_HEADER_LENGTH + spFrameData.frameHeader.frameDataLength + FRAME_CRC_LENGTH;
  6211. 8002d76: f507 73a0 add.w r3, r7, #320 @ 0x140
  6212. 8002d7a: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  6213. 8002d7e: 889b ldrh r3, [r3, #4]
  6214. 8002d80: 330a adds r3, #10
  6215. 8002d82: f8a7 313e strh.w r3, [r7, #318] @ 0x13e
  6216. receverState = srRecieveData;
  6217. 8002d86: 2302 movs r3, #2
  6218. 8002d88: f887 3133 strb.w r3, [r7, #307] @ 0x133
  6219. 8002d8c: e00e b.n 8002dac <UartRxTask+0x2b8>
  6220. } else {
  6221. proceed = pdFALSE;
  6222. 8002d8e: 2300 movs r3, #0
  6223. 8002d90: f8c7 3134 str.w r3, [r7, #308] @ 0x134
  6224. 8002d94: e00a b.n 8002dac <UartRxTask+0x2b8>
  6225. }
  6226. } else {
  6227. if (frameBytesCount > 0) {
  6228. 8002d96: f8b7 3124 ldrh.w r3, [r7, #292] @ 0x124
  6229. 8002d9a: 2b00 cmp r3, #0
  6230. 8002d9c: d003 beq.n 8002da6 <UartRxTask+0x2b2>
  6231. receverState = srFail;
  6232. 8002d9e: 2304 movs r3, #4
  6233. 8002da0: f887 3133 strb.w r3, [r7, #307] @ 0x133
  6234. 8002da4: e002 b.n 8002dac <UartRxTask+0x2b8>
  6235. } else {
  6236. proceed = pdFALSE;
  6237. 8002da6: 2300 movs r3, #0
  6238. 8002da8: f8c7 3134 str.w r3, [r7, #308] @ 0x134
  6239. }
  6240. }
  6241. osMutexRelease (uartTaskData->rxDataBufferMutex);
  6242. 8002dac: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6243. 8002db0: 6a1b ldr r3, [r3, #32]
  6244. 8002db2: 4618 mov r0, r3
  6245. 8002db4: f00c fe0b bl 800f9ce <osMutexRelease>
  6246. break;
  6247. 8002db8: e165 b.n 8003086 <UartRxTask+0x592>
  6248. case srRecieveData:
  6249. if (frameBytesCount >= frameTotalLength) {
  6250. 8002dba: f8b7 2124 ldrh.w r2, [r7, #292] @ 0x124
  6251. 8002dbe: f8b7 313e ldrh.w r3, [r7, #318] @ 0x13e
  6252. 8002dc2: 429a cmp r2, r3
  6253. 8002dc4: d303 bcc.n 8002dce <UartRxTask+0x2da>
  6254. receverState = srCheckCrc;
  6255. 8002dc6: 2301 movs r3, #1
  6256. 8002dc8: f887 3133 strb.w r3, [r7, #307] @ 0x133
  6257. } else {
  6258. proceed = pdFALSE;
  6259. }
  6260. break;
  6261. 8002dcc: e15b b.n 8003086 <UartRxTask+0x592>
  6262. proceed = pdFALSE;
  6263. 8002dce: 2300 movs r3, #0
  6264. 8002dd0: f8c7 3134 str.w r3, [r7, #308] @ 0x134
  6265. break;
  6266. 8002dd4: e157 b.n 8003086 <UartRxTask+0x592>
  6267. case srCheckCrc:
  6268. osMutexAcquire (uartTaskData->rxDataBufferMutex, osWaitForever);
  6269. 8002dd6: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6270. 8002dda: 6a1b ldr r3, [r3, #32]
  6271. 8002ddc: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  6272. 8002de0: 4618 mov r0, r3
  6273. 8002de2: f00c fda9 bl 800f938 <osMutexAcquire>
  6274. frameCrc = CONVERT_BYTES_TO_SHORT_WORD (&(uartTaskData->frameData[frameTotalLength - FRAME_CRC_LENGTH]));
  6275. 8002de6: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6276. 8002dea: 691a ldr r2, [r3, #16]
  6277. 8002dec: f8b7 313e ldrh.w r3, [r7, #318] @ 0x13e
  6278. 8002df0: 3b01 subs r3, #1
  6279. 8002df2: 4413 add r3, r2
  6280. 8002df4: 781b ldrb r3, [r3, #0]
  6281. 8002df6: 021b lsls r3, r3, #8
  6282. 8002df8: b21a sxth r2, r3
  6283. 8002dfa: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6284. 8002dfe: 6919 ldr r1, [r3, #16]
  6285. 8002e00: f8b7 313e ldrh.w r3, [r7, #318] @ 0x13e
  6286. 8002e04: 3b02 subs r3, #2
  6287. 8002e06: 440b add r3, r1
  6288. 8002e08: 781b ldrb r3, [r3, #0]
  6289. 8002e0a: b21b sxth r3, r3
  6290. 8002e0c: 4313 orrs r3, r2
  6291. 8002e0e: b21b sxth r3, r3
  6292. 8002e10: f8a7 3122 strh.w r3, [r7, #290] @ 0x122
  6293. crc = HAL_CRC_Calculate (&hcrc, (uint32_t*)(uartTaskData->frameData), frameTotalLength - FRAME_CRC_LENGTH);
  6294. 8002e14: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6295. 8002e18: 6919 ldr r1, [r3, #16]
  6296. 8002e1a: f8b7 313e ldrh.w r3, [r7, #318] @ 0x13e
  6297. 8002e1e: 3b02 subs r3, #2
  6298. 8002e20: 461a mov r2, r3
  6299. 8002e22: 4841 ldr r0, [pc, #260] @ (8002f28 <UartRxTask+0x434>)
  6300. 8002e24: f002 f942 bl 80050ac <HAL_CRC_Calculate>
  6301. 8002e28: f8c7 0128 str.w r0, [r7, #296] @ 0x128
  6302. osMutexRelease (uartTaskData->rxDataBufferMutex);
  6303. 8002e2c: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6304. 8002e30: 6a1b ldr r3, [r3, #32]
  6305. 8002e32: 4618 mov r0, r3
  6306. 8002e34: f00c fdcb bl 800f9ce <osMutexRelease>
  6307. crcPass = frameCrc == crc;
  6308. 8002e38: f8b7 3122 ldrh.w r3, [r7, #290] @ 0x122
  6309. 8002e3c: f8d7 2128 ldr.w r2, [r7, #296] @ 0x128
  6310. 8002e40: 429a cmp r2, r3
  6311. 8002e42: bf0c ite eq
  6312. 8002e44: 2301 moveq r3, #1
  6313. 8002e46: 2300 movne r3, #0
  6314. 8002e48: b2db uxtb r3, r3
  6315. 8002e4a: f8c7 3138 str.w r3, [r7, #312] @ 0x138
  6316. if (crcPass) {
  6317. 8002e4e: f8d7 3138 ldr.w r3, [r7, #312] @ 0x138
  6318. 8002e52: 2b00 cmp r3, #0
  6319. 8002e54: d00b beq.n 8002e6e <UartRxTask+0x37a>
  6320. #if UART_TASK_LOGS
  6321. printf ("Uart%d: Frame CRC PASS\n", uartTaskData->uartNumber);
  6322. 8002e56: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6323. 8002e5a: f893 3034 ldrb.w r3, [r3, #52] @ 0x34
  6324. 8002e5e: 4619 mov r1, r3
  6325. 8002e60: 4832 ldr r0, [pc, #200] @ (8002f2c <UartRxTask+0x438>)
  6326. 8002e62: f010 fc6b bl 801373c <iprintf>
  6327. #endif
  6328. receverState = srExecuteCmd;
  6329. 8002e66: 2303 movs r3, #3
  6330. 8002e68: f887 3133 strb.w r3, [r7, #307] @ 0x133
  6331. } else {
  6332. receverState = srFail;
  6333. }
  6334. break;
  6335. 8002e6c: e10b b.n 8003086 <UartRxTask+0x592>
  6336. receverState = srFail;
  6337. 8002e6e: 2304 movs r3, #4
  6338. 8002e70: f887 3133 strb.w r3, [r7, #307] @ 0x133
  6339. break;
  6340. 8002e74: e107 b.n 8003086 <UartRxTask+0x592>
  6341. case srExecuteCmd:
  6342. if ((uartTaskData->processDataCb != NULL) || (uartTaskData->processRxDataMsgBuffer != NULL)) {
  6343. 8002e76: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6344. 8002e7a: 6a9b ldr r3, [r3, #40] @ 0x28
  6345. 8002e7c: 2b00 cmp r3, #0
  6346. 8002e7e: d104 bne.n 8002e8a <UartRxTask+0x396>
  6347. 8002e80: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6348. 8002e84: 6a5b ldr r3, [r3, #36] @ 0x24
  6349. 8002e86: 2b00 cmp r3, #0
  6350. 8002e88: d01e beq.n 8002ec8 <UartRxTask+0x3d4>
  6351. osMutexAcquire (uartTaskData->rxDataBufferMutex, osWaitForever);
  6352. 8002e8a: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6353. 8002e8e: 6a1b ldr r3, [r3, #32]
  6354. 8002e90: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  6355. 8002e94: 4618 mov r0, r3
  6356. 8002e96: f00c fd4f bl 800f938 <osMutexAcquire>
  6357. memcpy (spFrameData.dataBuffer, &(uartTaskData->frameData[FRAME_HEADER_LENGTH]), spFrameData.frameHeader.frameDataLength);
  6358. 8002e9a: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6359. 8002e9e: 691b ldr r3, [r3, #16]
  6360. 8002ea0: f103 0108 add.w r1, r3, #8
  6361. 8002ea4: f507 73a0 add.w r3, r7, #320 @ 0x140
  6362. 8002ea8: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  6363. 8002eac: 889b ldrh r3, [r3, #4]
  6364. 8002eae: 461a mov r2, r3
  6365. 8002eb0: f107 0310 add.w r3, r7, #16
  6366. 8002eb4: 330c adds r3, #12
  6367. 8002eb6: 4618 mov r0, r3
  6368. 8002eb8: f010 fd67 bl 801398a <memcpy>
  6369. osMutexRelease (uartTaskData->rxDataBufferMutex);
  6370. 8002ebc: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6371. 8002ec0: 6a1b ldr r3, [r3, #32]
  6372. 8002ec2: 4618 mov r0, r3
  6373. 8002ec4: f00c fd83 bl 800f9ce <osMutexRelease>
  6374. }
  6375. if (uartTaskData->processRxDataMsgBuffer != NULL) {
  6376. 8002ec8: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6377. 8002ecc: 6a5b ldr r3, [r3, #36] @ 0x24
  6378. 8002ece: 2b00 cmp r3, #0
  6379. 8002ed0: d015 beq.n 8002efe <UartRxTask+0x40a>
  6380. if(xMessageBufferSend (uartTaskData->processRxDataMsgBuffer, &spFrameData, sizeof (SerialProtocolFrameHeader) + spFrameData.frameHeader.frameDataLength, pdMS_TO_TICKS (200)) == pdFALSE)
  6381. 8002ed2: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6382. 8002ed6: 6a58 ldr r0, [r3, #36] @ 0x24
  6383. 8002ed8: f507 73a0 add.w r3, r7, #320 @ 0x140
  6384. 8002edc: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  6385. 8002ee0: 889b ldrh r3, [r3, #4]
  6386. 8002ee2: f103 020c add.w r2, r3, #12
  6387. 8002ee6: f107 0110 add.w r1, r7, #16
  6388. 8002eea: 23c8 movs r3, #200 @ 0xc8
  6389. 8002eec: f00d ff92 bl 8010e14 <xStreamBufferSend>
  6390. 8002ef0: 4603 mov r3, r0
  6391. 8002ef2: 2b00 cmp r3, #0
  6392. 8002ef4: d103 bne.n 8002efe <UartRxTask+0x40a>
  6393. {
  6394. receverState = srFail;
  6395. 8002ef6: 2304 movs r3, #4
  6396. 8002ef8: f887 3133 strb.w r3, [r7, #307] @ 0x133
  6397. break;
  6398. 8002efc: e0c3 b.n 8003086 <UartRxTask+0x592>
  6399. }
  6400. }
  6401. if (uartTaskData->processDataCb != NULL) {
  6402. 8002efe: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6403. 8002f02: 6a9b ldr r3, [r3, #40] @ 0x28
  6404. 8002f04: 2b00 cmp r3, #0
  6405. 8002f06: d008 beq.n 8002f1a <UartRxTask+0x426>
  6406. uartTaskData->processDataCb (uartTaskData, &spFrameData);
  6407. 8002f08: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6408. 8002f0c: 6a9b ldr r3, [r3, #40] @ 0x28
  6409. 8002f0e: f107 0210 add.w r2, r7, #16
  6410. 8002f12: 4611 mov r1, r2
  6411. 8002f14: f8d7 012c ldr.w r0, [r7, #300] @ 0x12c
  6412. 8002f18: 4798 blx r3
  6413. }
  6414. receverState = srFinish;
  6415. 8002f1a: 2305 movs r3, #5
  6416. 8002f1c: f887 3133 strb.w r3, [r7, #307] @ 0x133
  6417. break;
  6418. 8002f20: e0b1 b.n 8003086 <UartRxTask+0x592>
  6419. 8002f22: bf00 nop
  6420. 8002f24: 08014518 .word 0x08014518
  6421. 8002f28: 240003d4 .word 0x240003d4
  6422. 8002f2c: 08014538 .word 0x08014538
  6423. case srFail:
  6424. dataToSend = 0;
  6425. 8002f30: 2300 movs r3, #0
  6426. 8002f32: f8a7 313c strh.w r3, [r7, #316] @ 0x13c
  6427. if ((frameTimeout == pdTRUE) && (frameBytesCount > 2)) {
  6428. 8002f36: f8d7 311c ldr.w r3, [r7, #284] @ 0x11c
  6429. 8002f3a: 2b01 cmp r3, #1
  6430. 8002f3c: d124 bne.n 8002f88 <UartRxTask+0x494>
  6431. 8002f3e: f8b7 3124 ldrh.w r3, [r7, #292] @ 0x124
  6432. 8002f42: 2b02 cmp r3, #2
  6433. 8002f44: d920 bls.n 8002f88 <UartRxTask+0x494>
  6434. dataToSend = PrepareRespFrame (uartTaskData->uartTxBuffer, spFrameData.frameHeader.frameId, spFrameData.frameHeader.frameCommand, spTimeout, NULL, 0);
  6435. 8002f46: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6436. 8002f4a: 6898 ldr r0, [r3, #8]
  6437. 8002f4c: f507 73a0 add.w r3, r7, #320 @ 0x140
  6438. 8002f50: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  6439. 8002f54: 8819 ldrh r1, [r3, #0]
  6440. 8002f56: f507 73a0 add.w r3, r7, #320 @ 0x140
  6441. 8002f5a: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  6442. 8002f5e: 789a ldrb r2, [r3, #2]
  6443. 8002f60: 2300 movs r3, #0
  6444. 8002f62: 9301 str r3, [sp, #4]
  6445. 8002f64: 2300 movs r3, #0
  6446. 8002f66: 9300 str r3, [sp, #0]
  6447. 8002f68: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  6448. 8002f6c: f7fe fefa bl 8001d64 <PrepareRespFrame>
  6449. 8002f70: 4603 mov r3, r0
  6450. 8002f72: f8a7 313c strh.w r3, [r7, #316] @ 0x13c
  6451. #if UART_TASK_LOGS
  6452. printf ("Uart%d: RX data receiver timeout!\n", uartTaskData->uartNumber);
  6453. 8002f76: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6454. 8002f7a: f893 3034 ldrb.w r3, [r3, #52] @ 0x34
  6455. 8002f7e: 4619 mov r1, r3
  6456. 8002f80: 4844 ldr r0, [pc, #272] @ (8003094 <UartRxTask+0x5a0>)
  6457. 8002f82: f010 fbdb bl 801373c <iprintf>
  6458. 8002f86: e03c b.n 8003002 <UartRxTask+0x50e>
  6459. #endif
  6460. } else if (!crcPass) {
  6461. 8002f88: f8d7 3138 ldr.w r3, [r7, #312] @ 0x138
  6462. 8002f8c: 2b00 cmp r3, #0
  6463. 8002f8e: d120 bne.n 8002fd2 <UartRxTask+0x4de>
  6464. dataToSend = PrepareRespFrame (uartTaskData->uartTxBuffer, spFrameData.frameHeader.frameId, spFrameData.frameHeader.frameCommand, spCrcFail, NULL, 0);
  6465. 8002f90: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6466. 8002f94: 6898 ldr r0, [r3, #8]
  6467. 8002f96: f507 73a0 add.w r3, r7, #320 @ 0x140
  6468. 8002f9a: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  6469. 8002f9e: 8819 ldrh r1, [r3, #0]
  6470. 8002fa0: f507 73a0 add.w r3, r7, #320 @ 0x140
  6471. 8002fa4: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  6472. 8002fa8: 789a ldrb r2, [r3, #2]
  6473. 8002faa: 2300 movs r3, #0
  6474. 8002fac: 9301 str r3, [sp, #4]
  6475. 8002fae: 2300 movs r3, #0
  6476. 8002fb0: 9300 str r3, [sp, #0]
  6477. 8002fb2: f06f 0301 mvn.w r3, #1
  6478. 8002fb6: f7fe fed5 bl 8001d64 <PrepareRespFrame>
  6479. 8002fba: 4603 mov r3, r0
  6480. 8002fbc: f8a7 313c strh.w r3, [r7, #316] @ 0x13c
  6481. #if UART_TASK_LOGS
  6482. printf ("Uart%d: Frame CRC FAIL\n", uartTaskData->uartNumber);
  6483. 8002fc0: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6484. 8002fc4: f893 3034 ldrb.w r3, [r3, #52] @ 0x34
  6485. 8002fc8: 4619 mov r1, r3
  6486. 8002fca: 4833 ldr r0, [pc, #204] @ (8003098 <UartRxTask+0x5a4>)
  6487. 8002fcc: f010 fbb6 bl 801373c <iprintf>
  6488. 8002fd0: e017 b.n 8003002 <UartRxTask+0x50e>
  6489. #endif
  6490. }
  6491. else
  6492. {
  6493. dataToSend = PrepareRespFrame (uartTaskData->uartTxBuffer, spFrameData.frameHeader.frameId, spFrameData.frameHeader.frameCommand, spInternalError, NULL, 0);
  6494. 8002fd2: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6495. 8002fd6: 6898 ldr r0, [r3, #8]
  6496. 8002fd8: f507 73a0 add.w r3, r7, #320 @ 0x140
  6497. 8002fdc: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  6498. 8002fe0: 8819 ldrh r1, [r3, #0]
  6499. 8002fe2: f507 73a0 add.w r3, r7, #320 @ 0x140
  6500. 8002fe6: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  6501. 8002fea: 789a ldrb r2, [r3, #2]
  6502. 8002fec: 2300 movs r3, #0
  6503. 8002fee: 9301 str r3, [sp, #4]
  6504. 8002ff0: 2300 movs r3, #0
  6505. 8002ff2: 9300 str r3, [sp, #0]
  6506. 8002ff4: f06f 0303 mvn.w r3, #3
  6507. 8002ff8: f7fe feb4 bl 8001d64 <PrepareRespFrame>
  6508. 8002ffc: 4603 mov r3, r0
  6509. 8002ffe: f8a7 313c strh.w r3, [r7, #316] @ 0x13c
  6510. }
  6511. if (dataToSend > 0) {
  6512. 8003002: f8b7 313c ldrh.w r3, [r7, #316] @ 0x13c
  6513. 8003006: 2b00 cmp r3, #0
  6514. 8003008: d00a beq.n 8003020 <UartRxTask+0x52c>
  6515. HAL_UART_Transmit_IT (uartTaskData->huart, uartTaskData->uartTxBuffer, dataToSend);
  6516. 800300a: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6517. 800300e: 6b18 ldr r0, [r3, #48] @ 0x30
  6518. 8003010: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6519. 8003014: 689b ldr r3, [r3, #8]
  6520. 8003016: f8b7 213c ldrh.w r2, [r7, #316] @ 0x13c
  6521. 800301a: 4619 mov r1, r3
  6522. 800301c: f009 fd56 bl 800cacc <HAL_UART_Transmit_IT>
  6523. }
  6524. #if UART_TASK_LOGS
  6525. printf ("Uart%d: TX bytes sent: %d\n", dataToSend, uartTaskData->uartNumber);
  6526. 8003020: f8b7 113c ldrh.w r1, [r7, #316] @ 0x13c
  6527. 8003024: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6528. 8003028: f893 3034 ldrb.w r3, [r3, #52] @ 0x34
  6529. 800302c: 461a mov r2, r3
  6530. 800302e: 481b ldr r0, [pc, #108] @ (800309c <UartRxTask+0x5a8>)
  6531. 8003030: f010 fb84 bl 801373c <iprintf>
  6532. #endif
  6533. receverState = srFinish;
  6534. 8003034: 2305 movs r3, #5
  6535. 8003036: f887 3133 strb.w r3, [r7, #307] @ 0x133
  6536. break;
  6537. 800303a: e024 b.n 8003086 <UartRxTask+0x592>
  6538. case srFinish:
  6539. default:
  6540. osMutexAcquire (uartTaskData->rxDataBufferMutex, osWaitForever);
  6541. 800303c: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6542. 8003040: 6a1b ldr r3, [r3, #32]
  6543. 8003042: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  6544. 8003046: 4618 mov r0, r3
  6545. 8003048: f00c fc76 bl 800f938 <osMutexAcquire>
  6546. uartTaskData->frameBytesCount = 0;
  6547. 800304c: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6548. 8003050: 2200 movs r2, #0
  6549. 8003052: 82da strh r2, [r3, #22]
  6550. osMutexRelease (uartTaskData->rxDataBufferMutex);
  6551. 8003054: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
  6552. 8003058: 6a1b ldr r3, [r3, #32]
  6553. 800305a: 4618 mov r0, r3
  6554. 800305c: f00c fcb7 bl 800f9ce <osMutexRelease>
  6555. spFrameData.frameHeader.frameCommand = spUnknown;
  6556. 8003060: f507 73a0 add.w r3, r7, #320 @ 0x140
  6557. 8003064: f5a3 7398 sub.w r3, r3, #304 @ 0x130
  6558. 8003068: 2209 movs r2, #9
  6559. 800306a: 709a strb r2, [r3, #2]
  6560. frameTotalLength = 0;
  6561. 800306c: 2300 movs r3, #0
  6562. 800306e: f8a7 313e strh.w r3, [r7, #318] @ 0x13e
  6563. outputDataBufferPos = 0;
  6564. 8003072: 4b0b ldr r3, [pc, #44] @ (80030a0 <UartRxTask+0x5ac>)
  6565. 8003074: 2200 movs r2, #0
  6566. 8003076: 801a strh r2, [r3, #0]
  6567. receverState = srWaitForHeader;
  6568. 8003078: 2300 movs r3, #0
  6569. 800307a: f887 3133 strb.w r3, [r7, #307] @ 0x133
  6570. proceed = pdFALSE;
  6571. 800307e: 2300 movs r3, #0
  6572. 8003080: f8c7 3134 str.w r3, [r7, #308] @ 0x134
  6573. break;
  6574. 8003084: bf00 nop
  6575. while (proceed) {
  6576. 8003086: f8d7 3134 ldr.w r3, [r7, #308] @ 0x134
  6577. 800308a: 2b00 cmp r3, #0
  6578. 800308c: f47f ade0 bne.w 8002c50 <UartRxTask+0x15c>
  6579. frameTimeout = !(xTaskNotifyWait (0, 0, &bytesRec, pdMS_TO_TICKS (FRAME_TIMEOUT_MS)));
  6580. 8003090: e581 b.n 8002b96 <UartRxTask+0xa2>
  6581. 8003092: bf00 nop
  6582. 8003094: 08014550 .word 0x08014550
  6583. 8003098: 08014574 .word 0x08014574
  6584. 800309c: 0801458c .word 0x0801458c
  6585. 80030a0: 24000a58 .word 0x24000a58
  6586. 080030a4 <Uart1ReceivedDataProcessCallback>:
  6587. void Uart8ReceivedDataProcessCallback (void* arg, SerialProtocolFrameData* spFrameData)
  6588. {
  6589. Uart1ReceivedDataProcessCallback(arg, spFrameData);
  6590. }
  6591. void Uart1ReceivedDataProcessCallback (void* arg, SerialProtocolFrameData* spFrameData) {
  6592. 80030a4: b590 push {r4, r7, lr}
  6593. 80030a6: b08f sub sp, #60 @ 0x3c
  6594. 80030a8: af02 add r7, sp, #8
  6595. 80030aa: 6078 str r0, [r7, #4]
  6596. 80030ac: 6039 str r1, [r7, #0]
  6597. UartTaskData* uartTaskData = (UartTaskData*)arg;
  6598. 80030ae: 687b ldr r3, [r7, #4]
  6599. 80030b0: 613b str r3, [r7, #16]
  6600. uint16_t dataToSend = 0;
  6601. 80030b2: 2300 movs r3, #0
  6602. 80030b4: 81fb strh r3, [r7, #14]
  6603. outputDataBufferPos = 0;
  6604. 80030b6: 4b99 ldr r3, [pc, #612] @ (800331c <Uart1ReceivedDataProcessCallback+0x278>)
  6605. 80030b8: 2200 movs r2, #0
  6606. 80030ba: 801a strh r2, [r3, #0]
  6607. SerialProtocolRespStatus respStatus = spUnknownCommand;
  6608. 80030bc: 23fd movs r3, #253 @ 0xfd
  6609. 80030be: f887 302f strb.w r3, [r7, #47] @ 0x2f
  6610. switch (spFrameData->frameHeader.frameCommand) {
  6611. 80030c2: 683b ldr r3, [r7, #0]
  6612. 80030c4: 789b ldrb r3, [r3, #2]
  6613. 80030c6: 2b08 cmp r3, #8
  6614. 80030c8: f200 814e bhi.w 8003368 <Uart1ReceivedDataProcessCallback+0x2c4>
  6615. 80030cc: a201 add r2, pc, #4 @ (adr r2, 80030d4 <Uart1ReceivedDataProcessCallback+0x30>)
  6616. 80030ce: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  6617. 80030d2: bf00 nop
  6618. 80030d4: 080030f9 .word 0x080030f9
  6619. 80030d8: 080031d9 .word 0x080031d9
  6620. 80030dc: 080032a1 .word 0x080032a1
  6621. 80030e0: 080032a1 .word 0x080032a1
  6622. 80030e4: 080032a1 .word 0x080032a1
  6623. 80030e8: 080032b1 .word 0x080032b1
  6624. 80030ec: 080032b1 .word 0x080032b1
  6625. 80030f0: 080032a9 .word 0x080032a9
  6626. 80030f4: 080032b9 .word 0x080032b9
  6627. case spGetElectricalMeasurments:
  6628. osMutexAcquire (resMeasurementsMutex, osWaitForever);
  6629. 80030f8: 4b89 ldr r3, [pc, #548] @ (8003320 <Uart1ReceivedDataProcessCallback+0x27c>)
  6630. 80030fa: 681b ldr r3, [r3, #0]
  6631. 80030fc: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  6632. 8003100: 4618 mov r0, r3
  6633. 8003102: f00c fc19 bl 800f938 <osMutexAcquire>
  6634. for(int i = 0; i < 3; i++)
  6635. 8003106: 2300 movs r3, #0
  6636. 8003108: 62bb str r3, [r7, #40] @ 0x28
  6637. 800310a: e00b b.n 8003124 <Uart1ReceivedDataProcessCallback+0x80>
  6638. {
  6639. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &resMeasurements.voltageRMS[i], sizeof(float));
  6640. 800310c: 6abb ldr r3, [r7, #40] @ 0x28
  6641. 800310e: 009b lsls r3, r3, #2
  6642. 8003110: 4a84 ldr r2, [pc, #528] @ (8003324 <Uart1ReceivedDataProcessCallback+0x280>)
  6643. 8003112: 441a add r2, r3
  6644. 8003114: 2304 movs r3, #4
  6645. 8003116: 4981 ldr r1, [pc, #516] @ (800331c <Uart1ReceivedDataProcessCallback+0x278>)
  6646. 8003118: 4883 ldr r0, [pc, #524] @ (8003328 <Uart1ReceivedDataProcessCallback+0x284>)
  6647. 800311a: f7fe fdf1 bl 8001d00 <WriteDataToBuffer>
  6648. for(int i = 0; i < 3; i++)
  6649. 800311e: 6abb ldr r3, [r7, #40] @ 0x28
  6650. 8003120: 3301 adds r3, #1
  6651. 8003122: 62bb str r3, [r7, #40] @ 0x28
  6652. 8003124: 6abb ldr r3, [r7, #40] @ 0x28
  6653. 8003126: 2b02 cmp r3, #2
  6654. 8003128: ddf0 ble.n 800310c <Uart1ReceivedDataProcessCallback+0x68>
  6655. }
  6656. for(int i = 0; i < 3; i++)
  6657. 800312a: 2300 movs r3, #0
  6658. 800312c: 627b str r3, [r7, #36] @ 0x24
  6659. 800312e: e00d b.n 800314c <Uart1ReceivedDataProcessCallback+0xa8>
  6660. {
  6661. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &resMeasurements.voltagePeak[i], sizeof(float));
  6662. 8003130: 6a7b ldr r3, [r7, #36] @ 0x24
  6663. 8003132: 3302 adds r3, #2
  6664. 8003134: 009b lsls r3, r3, #2
  6665. 8003136: 4a7b ldr r2, [pc, #492] @ (8003324 <Uart1ReceivedDataProcessCallback+0x280>)
  6666. 8003138: 4413 add r3, r2
  6667. 800313a: 1d1a adds r2, r3, #4
  6668. 800313c: 2304 movs r3, #4
  6669. 800313e: 4977 ldr r1, [pc, #476] @ (800331c <Uart1ReceivedDataProcessCallback+0x278>)
  6670. 8003140: 4879 ldr r0, [pc, #484] @ (8003328 <Uart1ReceivedDataProcessCallback+0x284>)
  6671. 8003142: f7fe fddd bl 8001d00 <WriteDataToBuffer>
  6672. for(int i = 0; i < 3; i++)
  6673. 8003146: 6a7b ldr r3, [r7, #36] @ 0x24
  6674. 8003148: 3301 adds r3, #1
  6675. 800314a: 627b str r3, [r7, #36] @ 0x24
  6676. 800314c: 6a7b ldr r3, [r7, #36] @ 0x24
  6677. 800314e: 2b02 cmp r3, #2
  6678. 8003150: ddee ble.n 8003130 <Uart1ReceivedDataProcessCallback+0x8c>
  6679. }
  6680. for(int i = 0; i < 3; i++)
  6681. 8003152: 2300 movs r3, #0
  6682. 8003154: 623b str r3, [r7, #32]
  6683. 8003156: e00c b.n 8003172 <Uart1ReceivedDataProcessCallback+0xce>
  6684. {
  6685. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &resMeasurements.currentRMS[i], sizeof(float));
  6686. 8003158: 6a3b ldr r3, [r7, #32]
  6687. 800315a: 3306 adds r3, #6
  6688. 800315c: 009b lsls r3, r3, #2
  6689. 800315e: 4a71 ldr r2, [pc, #452] @ (8003324 <Uart1ReceivedDataProcessCallback+0x280>)
  6690. 8003160: 441a add r2, r3
  6691. 8003162: 2304 movs r3, #4
  6692. 8003164: 496d ldr r1, [pc, #436] @ (800331c <Uart1ReceivedDataProcessCallback+0x278>)
  6693. 8003166: 4870 ldr r0, [pc, #448] @ (8003328 <Uart1ReceivedDataProcessCallback+0x284>)
  6694. 8003168: f7fe fdca bl 8001d00 <WriteDataToBuffer>
  6695. for(int i = 0; i < 3; i++)
  6696. 800316c: 6a3b ldr r3, [r7, #32]
  6697. 800316e: 3301 adds r3, #1
  6698. 8003170: 623b str r3, [r7, #32]
  6699. 8003172: 6a3b ldr r3, [r7, #32]
  6700. 8003174: 2b02 cmp r3, #2
  6701. 8003176: ddef ble.n 8003158 <Uart1ReceivedDataProcessCallback+0xb4>
  6702. }
  6703. for(int i = 0; i < 3; i++)
  6704. 8003178: 2300 movs r3, #0
  6705. 800317a: 61fb str r3, [r7, #28]
  6706. 800317c: e00d b.n 800319a <Uart1ReceivedDataProcessCallback+0xf6>
  6707. {
  6708. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &resMeasurements.currentPeak[i], sizeof(float));
  6709. 800317e: 69fb ldr r3, [r7, #28]
  6710. 8003180: 3308 adds r3, #8
  6711. 8003182: 009b lsls r3, r3, #2
  6712. 8003184: 4a67 ldr r2, [pc, #412] @ (8003324 <Uart1ReceivedDataProcessCallback+0x280>)
  6713. 8003186: 4413 add r3, r2
  6714. 8003188: 1d1a adds r2, r3, #4
  6715. 800318a: 2304 movs r3, #4
  6716. 800318c: 4963 ldr r1, [pc, #396] @ (800331c <Uart1ReceivedDataProcessCallback+0x278>)
  6717. 800318e: 4866 ldr r0, [pc, #408] @ (8003328 <Uart1ReceivedDataProcessCallback+0x284>)
  6718. 8003190: f7fe fdb6 bl 8001d00 <WriteDataToBuffer>
  6719. for(int i = 0; i < 3; i++)
  6720. 8003194: 69fb ldr r3, [r7, #28]
  6721. 8003196: 3301 adds r3, #1
  6722. 8003198: 61fb str r3, [r7, #28]
  6723. 800319a: 69fb ldr r3, [r7, #28]
  6724. 800319c: 2b02 cmp r3, #2
  6725. 800319e: ddee ble.n 800317e <Uart1ReceivedDataProcessCallback+0xda>
  6726. }
  6727. for(int i = 0; i < 3; i++)
  6728. 80031a0: 2300 movs r3, #0
  6729. 80031a2: 61bb str r3, [r7, #24]
  6730. 80031a4: e00c b.n 80031c0 <Uart1ReceivedDataProcessCallback+0x11c>
  6731. {
  6732. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &resMeasurements.power[i], sizeof(float));
  6733. 80031a6: 69bb ldr r3, [r7, #24]
  6734. 80031a8: 330c adds r3, #12
  6735. 80031aa: 009b lsls r3, r3, #2
  6736. 80031ac: 4a5d ldr r2, [pc, #372] @ (8003324 <Uart1ReceivedDataProcessCallback+0x280>)
  6737. 80031ae: 441a add r2, r3
  6738. 80031b0: 2304 movs r3, #4
  6739. 80031b2: 495a ldr r1, [pc, #360] @ (800331c <Uart1ReceivedDataProcessCallback+0x278>)
  6740. 80031b4: 485c ldr r0, [pc, #368] @ (8003328 <Uart1ReceivedDataProcessCallback+0x284>)
  6741. 80031b6: f7fe fda3 bl 8001d00 <WriteDataToBuffer>
  6742. for(int i = 0; i < 3; i++)
  6743. 80031ba: 69bb ldr r3, [r7, #24]
  6744. 80031bc: 3301 adds r3, #1
  6745. 80031be: 61bb str r3, [r7, #24]
  6746. 80031c0: 69bb ldr r3, [r7, #24]
  6747. 80031c2: 2b02 cmp r3, #2
  6748. 80031c4: ddef ble.n 80031a6 <Uart1ReceivedDataProcessCallback+0x102>
  6749. }
  6750. osMutexRelease(resMeasurementsMutex);
  6751. 80031c6: 4b56 ldr r3, [pc, #344] @ (8003320 <Uart1ReceivedDataProcessCallback+0x27c>)
  6752. 80031c8: 681b ldr r3, [r3, #0]
  6753. 80031ca: 4618 mov r0, r3
  6754. 80031cc: f00c fbff bl 800f9ce <osMutexRelease>
  6755. respStatus = spOK;
  6756. 80031d0: 2300 movs r3, #0
  6757. 80031d2: f887 302f strb.w r3, [r7, #47] @ 0x2f
  6758. break;
  6759. 80031d6: e0cb b.n 8003370 <Uart1ReceivedDataProcessCallback+0x2cc>
  6760. case spGetSensorMeasurments:
  6761. osMutexAcquire (sensorsInfoMutex, osWaitForever);
  6762. 80031d8: 4b54 ldr r3, [pc, #336] @ (800332c <Uart1ReceivedDataProcessCallback+0x288>)
  6763. 80031da: 681b ldr r3, [r3, #0]
  6764. 80031dc: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  6765. 80031e0: 4618 mov r0, r3
  6766. 80031e2: f00c fba9 bl 800f938 <osMutexAcquire>
  6767. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &sensorsInfo.pvTemperature[0], sizeof(float));
  6768. 80031e6: 2304 movs r3, #4
  6769. 80031e8: 4a51 ldr r2, [pc, #324] @ (8003330 <Uart1ReceivedDataProcessCallback+0x28c>)
  6770. 80031ea: 494c ldr r1, [pc, #304] @ (800331c <Uart1ReceivedDataProcessCallback+0x278>)
  6771. 80031ec: 484e ldr r0, [pc, #312] @ (8003328 <Uart1ReceivedDataProcessCallback+0x284>)
  6772. 80031ee: f7fe fd87 bl 8001d00 <WriteDataToBuffer>
  6773. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &sensorsInfo.pvTemperature[1], sizeof(float));
  6774. 80031f2: 2304 movs r3, #4
  6775. 80031f4: 4a4f ldr r2, [pc, #316] @ (8003334 <Uart1ReceivedDataProcessCallback+0x290>)
  6776. 80031f6: 4949 ldr r1, [pc, #292] @ (800331c <Uart1ReceivedDataProcessCallback+0x278>)
  6777. 80031f8: 484b ldr r0, [pc, #300] @ (8003328 <Uart1ReceivedDataProcessCallback+0x284>)
  6778. 80031fa: f7fe fd81 bl 8001d00 <WriteDataToBuffer>
  6779. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &sensorsInfo.fanVoltage, sizeof(float));
  6780. 80031fe: 2304 movs r3, #4
  6781. 8003200: 4a4d ldr r2, [pc, #308] @ (8003338 <Uart1ReceivedDataProcessCallback+0x294>)
  6782. 8003202: 4946 ldr r1, [pc, #280] @ (800331c <Uart1ReceivedDataProcessCallback+0x278>)
  6783. 8003204: 4848 ldr r0, [pc, #288] @ (8003328 <Uart1ReceivedDataProcessCallback+0x284>)
  6784. 8003206: f7fe fd7b bl 8001d00 <WriteDataToBuffer>
  6785. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &sensorsInfo.pvEncoder, sizeof(float));
  6786. 800320a: 2304 movs r3, #4
  6787. 800320c: 4a4b ldr r2, [pc, #300] @ (800333c <Uart1ReceivedDataProcessCallback+0x298>)
  6788. 800320e: 4943 ldr r1, [pc, #268] @ (800331c <Uart1ReceivedDataProcessCallback+0x278>)
  6789. 8003210: 4845 ldr r0, [pc, #276] @ (8003328 <Uart1ReceivedDataProcessCallback+0x284>)
  6790. 8003212: f7fe fd75 bl 8001d00 <WriteDataToBuffer>
  6791. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &sensorsInfo.motorXStatus, sizeof(uint8_t));
  6792. 8003216: 2301 movs r3, #1
  6793. 8003218: 4a49 ldr r2, [pc, #292] @ (8003340 <Uart1ReceivedDataProcessCallback+0x29c>)
  6794. 800321a: 4940 ldr r1, [pc, #256] @ (800331c <Uart1ReceivedDataProcessCallback+0x278>)
  6795. 800321c: 4842 ldr r0, [pc, #264] @ (8003328 <Uart1ReceivedDataProcessCallback+0x284>)
  6796. 800321e: f7fe fd6f bl 8001d00 <WriteDataToBuffer>
  6797. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &sensorsInfo.motorYStatus, sizeof(uint8_t));
  6798. 8003222: 2301 movs r3, #1
  6799. 8003224: 4a47 ldr r2, [pc, #284] @ (8003344 <Uart1ReceivedDataProcessCallback+0x2a0>)
  6800. 8003226: 493d ldr r1, [pc, #244] @ (800331c <Uart1ReceivedDataProcessCallback+0x278>)
  6801. 8003228: 483f ldr r0, [pc, #252] @ (8003328 <Uart1ReceivedDataProcessCallback+0x284>)
  6802. 800322a: f7fe fd69 bl 8001d00 <WriteDataToBuffer>
  6803. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &sensorsInfo.motorXAveCurrent, sizeof(float));
  6804. 800322e: 2304 movs r3, #4
  6805. 8003230: 4a45 ldr r2, [pc, #276] @ (8003348 <Uart1ReceivedDataProcessCallback+0x2a4>)
  6806. 8003232: 493a ldr r1, [pc, #232] @ (800331c <Uart1ReceivedDataProcessCallback+0x278>)
  6807. 8003234: 483c ldr r0, [pc, #240] @ (8003328 <Uart1ReceivedDataProcessCallback+0x284>)
  6808. 8003236: f7fe fd63 bl 8001d00 <WriteDataToBuffer>
  6809. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &sensorsInfo.motorYAveCurrent, sizeof(float));
  6810. 800323a: 2304 movs r3, #4
  6811. 800323c: 4a43 ldr r2, [pc, #268] @ (800334c <Uart1ReceivedDataProcessCallback+0x2a8>)
  6812. 800323e: 4937 ldr r1, [pc, #220] @ (800331c <Uart1ReceivedDataProcessCallback+0x278>)
  6813. 8003240: 4839 ldr r0, [pc, #228] @ (8003328 <Uart1ReceivedDataProcessCallback+0x284>)
  6814. 8003242: f7fe fd5d bl 8001d00 <WriteDataToBuffer>
  6815. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &sensorsInfo.motorXPeakCurrent, sizeof(float));
  6816. 8003246: 2304 movs r3, #4
  6817. 8003248: 4a41 ldr r2, [pc, #260] @ (8003350 <Uart1ReceivedDataProcessCallback+0x2ac>)
  6818. 800324a: 4934 ldr r1, [pc, #208] @ (800331c <Uart1ReceivedDataProcessCallback+0x278>)
  6819. 800324c: 4836 ldr r0, [pc, #216] @ (8003328 <Uart1ReceivedDataProcessCallback+0x284>)
  6820. 800324e: f7fe fd57 bl 8001d00 <WriteDataToBuffer>
  6821. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &sensorsInfo.motorYPeakCurrent, sizeof(float));
  6822. 8003252: 2304 movs r3, #4
  6823. 8003254: 4a3f ldr r2, [pc, #252] @ (8003354 <Uart1ReceivedDataProcessCallback+0x2b0>)
  6824. 8003256: 4931 ldr r1, [pc, #196] @ (800331c <Uart1ReceivedDataProcessCallback+0x278>)
  6825. 8003258: 4833 ldr r0, [pc, #204] @ (8003328 <Uart1ReceivedDataProcessCallback+0x284>)
  6826. 800325a: f7fe fd51 bl 8001d00 <WriteDataToBuffer>
  6827. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &sensorsInfo.limitSwitchUp, sizeof(uint8_t));
  6828. 800325e: 2301 movs r3, #1
  6829. 8003260: 4a3d ldr r2, [pc, #244] @ (8003358 <Uart1ReceivedDataProcessCallback+0x2b4>)
  6830. 8003262: 492e ldr r1, [pc, #184] @ (800331c <Uart1ReceivedDataProcessCallback+0x278>)
  6831. 8003264: 4830 ldr r0, [pc, #192] @ (8003328 <Uart1ReceivedDataProcessCallback+0x284>)
  6832. 8003266: f7fe fd4b bl 8001d00 <WriteDataToBuffer>
  6833. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &sensorsInfo.limitSwitchDown, sizeof(uint8_t));
  6834. 800326a: 2301 movs r3, #1
  6835. 800326c: 4a3b ldr r2, [pc, #236] @ (800335c <Uart1ReceivedDataProcessCallback+0x2b8>)
  6836. 800326e: 492b ldr r1, [pc, #172] @ (800331c <Uart1ReceivedDataProcessCallback+0x278>)
  6837. 8003270: 482d ldr r0, [pc, #180] @ (8003328 <Uart1ReceivedDataProcessCallback+0x284>)
  6838. 8003272: f7fe fd45 bl 8001d00 <WriteDataToBuffer>
  6839. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &sensorsInfo.limitSwitchCenter, sizeof(uint8_t));
  6840. 8003276: 2301 movs r3, #1
  6841. 8003278: 4a39 ldr r2, [pc, #228] @ (8003360 <Uart1ReceivedDataProcessCallback+0x2bc>)
  6842. 800327a: 4928 ldr r1, [pc, #160] @ (800331c <Uart1ReceivedDataProcessCallback+0x278>)
  6843. 800327c: 482a ldr r0, [pc, #168] @ (8003328 <Uart1ReceivedDataProcessCallback+0x284>)
  6844. 800327e: f7fe fd3f bl 8001d00 <WriteDataToBuffer>
  6845. WriteDataToBuffer(outputDataBuffer, &outputDataBufferPos, &sensorsInfo.powerSupplyFailMask, sizeof(uint8_t));
  6846. 8003282: 2301 movs r3, #1
  6847. 8003284: 4a37 ldr r2, [pc, #220] @ (8003364 <Uart1ReceivedDataProcessCallback+0x2c0>)
  6848. 8003286: 4925 ldr r1, [pc, #148] @ (800331c <Uart1ReceivedDataProcessCallback+0x278>)
  6849. 8003288: 4827 ldr r0, [pc, #156] @ (8003328 <Uart1ReceivedDataProcessCallback+0x284>)
  6850. 800328a: f7fe fd39 bl 8001d00 <WriteDataToBuffer>
  6851. osMutexRelease(sensorsInfoMutex);
  6852. 800328e: 4b27 ldr r3, [pc, #156] @ (800332c <Uart1ReceivedDataProcessCallback+0x288>)
  6853. 8003290: 681b ldr r3, [r3, #0]
  6854. 8003292: 4618 mov r0, r3
  6855. 8003294: f00c fb9b bl 800f9ce <osMutexRelease>
  6856. respStatus = spOK;
  6857. 8003298: 2300 movs r3, #0
  6858. 800329a: f887 302f strb.w r3, [r7, #47] @ 0x2f
  6859. break;
  6860. 800329e: e067 b.n 8003370 <Uart1ReceivedDataProcessCallback+0x2cc>
  6861. case spSetFanSpeed:
  6862. case spSetMotorXOn:
  6863. case spSetMotorYOn:
  6864. respStatus = spOK;
  6865. 80032a0: 2300 movs r3, #0
  6866. 80032a2: f887 302f strb.w r3, [r7, #47] @ 0x2f
  6867. break;
  6868. 80032a6: e063 b.n 8003370 <Uart1ReceivedDataProcessCallback+0x2cc>
  6869. case spSetDiodeOn:
  6870. respStatus = spOK;
  6871. 80032a8: 2300 movs r3, #0
  6872. 80032aa: f887 302f strb.w r3, [r7, #47] @ 0x2f
  6873. break;
  6874. 80032ae: e05f b.n 8003370 <Uart1ReceivedDataProcessCallback+0x2cc>
  6875. case spSetmotorXMaxCurrent:
  6876. case spSetmotorYMaxCurrent:
  6877. respStatus = spOK;
  6878. 80032b0: 2300 movs r3, #0
  6879. 80032b2: f887 302f strb.w r3, [r7, #47] @ 0x2f
  6880. break;
  6881. 80032b6: e05b b.n 8003370 <Uart1ReceivedDataProcessCallback+0x2cc>
  6882. case spClearPeakMeasurments:
  6883. osMutexAcquire (resMeasurementsMutex, osWaitForever);
  6884. 80032b8: 4b19 ldr r3, [pc, #100] @ (8003320 <Uart1ReceivedDataProcessCallback+0x27c>)
  6885. 80032ba: 681b ldr r3, [r3, #0]
  6886. 80032bc: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  6887. 80032c0: 4618 mov r0, r3
  6888. 80032c2: f00c fb39 bl 800f938 <osMutexAcquire>
  6889. for(int i = 0; i < 3; i++)
  6890. 80032c6: 2300 movs r3, #0
  6891. 80032c8: 617b str r3, [r7, #20]
  6892. 80032ca: e01b b.n 8003304 <Uart1ReceivedDataProcessCallback+0x260>
  6893. {
  6894. resMeasurements.voltagePeak[i] = resMeasurements.voltageRMS[i];
  6895. 80032cc: 4a15 ldr r2, [pc, #84] @ (8003324 <Uart1ReceivedDataProcessCallback+0x280>)
  6896. 80032ce: 697b ldr r3, [r7, #20]
  6897. 80032d0: 009b lsls r3, r3, #2
  6898. 80032d2: 4413 add r3, r2
  6899. 80032d4: 681a ldr r2, [r3, #0]
  6900. 80032d6: 4913 ldr r1, [pc, #76] @ (8003324 <Uart1ReceivedDataProcessCallback+0x280>)
  6901. 80032d8: 697b ldr r3, [r7, #20]
  6902. 80032da: 3302 adds r3, #2
  6903. 80032dc: 009b lsls r3, r3, #2
  6904. 80032de: 440b add r3, r1
  6905. 80032e0: 3304 adds r3, #4
  6906. 80032e2: 601a str r2, [r3, #0]
  6907. resMeasurements.currentPeak[i] = resMeasurements.currentRMS[i];
  6908. 80032e4: 4a0f ldr r2, [pc, #60] @ (8003324 <Uart1ReceivedDataProcessCallback+0x280>)
  6909. 80032e6: 697b ldr r3, [r7, #20]
  6910. 80032e8: 3306 adds r3, #6
  6911. 80032ea: 009b lsls r3, r3, #2
  6912. 80032ec: 4413 add r3, r2
  6913. 80032ee: 681a ldr r2, [r3, #0]
  6914. 80032f0: 490c ldr r1, [pc, #48] @ (8003324 <Uart1ReceivedDataProcessCallback+0x280>)
  6915. 80032f2: 697b ldr r3, [r7, #20]
  6916. 80032f4: 3308 adds r3, #8
  6917. 80032f6: 009b lsls r3, r3, #2
  6918. 80032f8: 440b add r3, r1
  6919. 80032fa: 3304 adds r3, #4
  6920. 80032fc: 601a str r2, [r3, #0]
  6921. for(int i = 0; i < 3; i++)
  6922. 80032fe: 697b ldr r3, [r7, #20]
  6923. 8003300: 3301 adds r3, #1
  6924. 8003302: 617b str r3, [r7, #20]
  6925. 8003304: 697b ldr r3, [r7, #20]
  6926. 8003306: 2b02 cmp r3, #2
  6927. 8003308: dde0 ble.n 80032cc <Uart1ReceivedDataProcessCallback+0x228>
  6928. }
  6929. osMutexRelease(resMeasurementsMutex);
  6930. 800330a: 4b05 ldr r3, [pc, #20] @ (8003320 <Uart1ReceivedDataProcessCallback+0x27c>)
  6931. 800330c: 681b ldr r3, [r3, #0]
  6932. 800330e: 4618 mov r0, r3
  6933. 8003310: f00c fb5d bl 800f9ce <osMutexRelease>
  6934. respStatus = spOK;
  6935. 8003314: 2300 movs r3, #0
  6936. 8003316: f887 302f strb.w r3, [r7, #47] @ 0x2f
  6937. break;
  6938. 800331a: e029 b.n 8003370 <Uart1ReceivedDataProcessCallback+0x2cc>
  6939. 800331c: 24000a58 .word 0x24000a58
  6940. 8003320: 240005a0 .word 0x240005a0
  6941. 8003324: 240005ac .word 0x240005ac
  6942. 8003328: 240009d8 .word 0x240009d8
  6943. 800332c: 240005a4 .word 0x240005a4
  6944. 8003330: 240005e8 .word 0x240005e8
  6945. 8003334: 240005ec .word 0x240005ec
  6946. 8003338: 240005f0 .word 0x240005f0
  6947. 800333c: 240005f4 .word 0x240005f4
  6948. 8003340: 240005f8 .word 0x240005f8
  6949. 8003344: 240005f9 .word 0x240005f9
  6950. 8003348: 240005fc .word 0x240005fc
  6951. 800334c: 24000600 .word 0x24000600
  6952. 8003350: 24000604 .word 0x24000604
  6953. 8003354: 24000608 .word 0x24000608
  6954. 8003358: 2400060c .word 0x2400060c
  6955. 800335c: 2400060d .word 0x2400060d
  6956. 8003360: 2400060e .word 0x2400060e
  6957. 8003364: 2400060f .word 0x2400060f
  6958. default:
  6959. respStatus = spUnknownCommand;
  6960. 8003368: 23fd movs r3, #253 @ 0xfd
  6961. 800336a: f887 302f strb.w r3, [r7, #47] @ 0x2f
  6962. break;
  6963. 800336e: bf00 nop
  6964. }
  6965. dataToSend = PrepareRespFrame (uartTaskData->uartTxBuffer, spFrameData->frameHeader.frameId, spFrameData->frameHeader.frameCommand, respStatus, outputDataBuffer, outputDataBufferPos);
  6966. 8003370: 693b ldr r3, [r7, #16]
  6967. 8003372: 6898 ldr r0, [r3, #8]
  6968. 8003374: 683b ldr r3, [r7, #0]
  6969. 8003376: 8819 ldrh r1, [r3, #0]
  6970. 8003378: 683b ldr r3, [r7, #0]
  6971. 800337a: 789a ldrb r2, [r3, #2]
  6972. 800337c: 4b11 ldr r3, [pc, #68] @ (80033c4 <Uart1ReceivedDataProcessCallback+0x320>)
  6973. 800337e: 881b ldrh r3, [r3, #0]
  6974. 8003380: f997 402f ldrsb.w r4, [r7, #47] @ 0x2f
  6975. 8003384: 9301 str r3, [sp, #4]
  6976. 8003386: 4b10 ldr r3, [pc, #64] @ (80033c8 <Uart1ReceivedDataProcessCallback+0x324>)
  6977. 8003388: 9300 str r3, [sp, #0]
  6978. 800338a: 4623 mov r3, r4
  6979. 800338c: f7fe fcea bl 8001d64 <PrepareRespFrame>
  6980. 8003390: 4603 mov r3, r0
  6981. 8003392: 81fb strh r3, [r7, #14]
  6982. if (dataToSend > 0) {
  6983. 8003394: 89fb ldrh r3, [r7, #14]
  6984. 8003396: 2b00 cmp r3, #0
  6985. 8003398: d007 beq.n 80033aa <Uart1ReceivedDataProcessCallback+0x306>
  6986. HAL_UART_Transmit_IT (uartTaskData->huart, uartTaskData->uartTxBuffer, dataToSend);
  6987. 800339a: 693b ldr r3, [r7, #16]
  6988. 800339c: 6b18 ldr r0, [r3, #48] @ 0x30
  6989. 800339e: 693b ldr r3, [r7, #16]
  6990. 80033a0: 689b ldr r3, [r3, #8]
  6991. 80033a2: 89fa ldrh r2, [r7, #14]
  6992. 80033a4: 4619 mov r1, r3
  6993. 80033a6: f009 fb91 bl 800cacc <HAL_UART_Transmit_IT>
  6994. }
  6995. #if UART_TASK_LOGS
  6996. printf ("Uart%d: TX bytes sent: %d\n", uartTaskData->uartNumber, dataToSend);
  6997. 80033aa: 693b ldr r3, [r7, #16]
  6998. 80033ac: f893 3034 ldrb.w r3, [r3, #52] @ 0x34
  6999. 80033b0: 4619 mov r1, r3
  7000. 80033b2: 89fb ldrh r3, [r7, #14]
  7001. 80033b4: 461a mov r2, r3
  7002. 80033b6: 4805 ldr r0, [pc, #20] @ (80033cc <Uart1ReceivedDataProcessCallback+0x328>)
  7003. 80033b8: f010 f9c0 bl 801373c <iprintf>
  7004. #endif
  7005. }
  7006. 80033bc: bf00 nop
  7007. 80033be: 3734 adds r7, #52 @ 0x34
  7008. 80033c0: 46bd mov sp, r7
  7009. 80033c2: bd90 pop {r4, r7, pc}
  7010. 80033c4: 24000a58 .word 0x24000a58
  7011. 80033c8: 240009d8 .word 0x240009d8
  7012. 80033cc: 0801458c .word 0x0801458c
  7013. 080033d0 <Reset_Handler>:
  7014. .section .text.Reset_Handler
  7015. .weak Reset_Handler
  7016. .type Reset_Handler, %function
  7017. Reset_Handler:
  7018. ldr sp, =_estack /* set stack pointer */
  7019. 80033d0: f8df d034 ldr.w sp, [pc, #52] @ 8003408 <LoopFillZerobss+0xe>
  7020. /* Call the clock system initialization function.*/
  7021. bl SystemInit
  7022. 80033d4: f7ff fa26 bl 8002824 <SystemInit>
  7023. /* Copy the data segment initializers from flash to SRAM */
  7024. ldr r0, =_sdata
  7025. 80033d8: 480c ldr r0, [pc, #48] @ (800340c <LoopFillZerobss+0x12>)
  7026. ldr r1, =_edata
  7027. 80033da: 490d ldr r1, [pc, #52] @ (8003410 <LoopFillZerobss+0x16>)
  7028. ldr r2, =_sidata
  7029. 80033dc: 4a0d ldr r2, [pc, #52] @ (8003414 <LoopFillZerobss+0x1a>)
  7030. movs r3, #0
  7031. 80033de: 2300 movs r3, #0
  7032. b LoopCopyDataInit
  7033. 80033e0: e002 b.n 80033e8 <LoopCopyDataInit>
  7034. 080033e2 <CopyDataInit>:
  7035. CopyDataInit:
  7036. ldr r4, [r2, r3]
  7037. 80033e2: 58d4 ldr r4, [r2, r3]
  7038. str r4, [r0, r3]
  7039. 80033e4: 50c4 str r4, [r0, r3]
  7040. adds r3, r3, #4
  7041. 80033e6: 3304 adds r3, #4
  7042. 080033e8 <LoopCopyDataInit>:
  7043. LoopCopyDataInit:
  7044. adds r4, r0, r3
  7045. 80033e8: 18c4 adds r4, r0, r3
  7046. cmp r4, r1
  7047. 80033ea: 428c cmp r4, r1
  7048. bcc CopyDataInit
  7049. 80033ec: d3f9 bcc.n 80033e2 <CopyDataInit>
  7050. /* Zero fill the bss segment. */
  7051. ldr r2, =_sbss
  7052. 80033ee: 4a0a ldr r2, [pc, #40] @ (8003418 <LoopFillZerobss+0x1e>)
  7053. ldr r4, =_ebss
  7054. 80033f0: 4c0a ldr r4, [pc, #40] @ (800341c <LoopFillZerobss+0x22>)
  7055. movs r3, #0
  7056. 80033f2: 2300 movs r3, #0
  7057. b LoopFillZerobss
  7058. 80033f4: e001 b.n 80033fa <LoopFillZerobss>
  7059. 080033f6 <FillZerobss>:
  7060. FillZerobss:
  7061. str r3, [r2]
  7062. 80033f6: 6013 str r3, [r2, #0]
  7063. adds r2, r2, #4
  7064. 80033f8: 3204 adds r2, #4
  7065. 080033fa <LoopFillZerobss>:
  7066. LoopFillZerobss:
  7067. cmp r2, r4
  7068. 80033fa: 42a2 cmp r2, r4
  7069. bcc FillZerobss
  7070. 80033fc: d3fb bcc.n 80033f6 <FillZerobss>
  7071. /* Call static constructors */
  7072. bl __libc_init_array
  7073. 80033fe: f010 fa9d bl 801393c <__libc_init_array>
  7074. /* Call the application's entry point.*/
  7075. bl main
  7076. 8003402: f7fd f941 bl 8000688 <main>
  7077. bx lr
  7078. 8003406: 4770 bx lr
  7079. ldr sp, =_estack /* set stack pointer */
  7080. 8003408: 24060000 .word 0x24060000
  7081. ldr r0, =_sdata
  7082. 800340c: 24000000 .word 0x24000000
  7083. ldr r1, =_edata
  7084. 8003410: 240000a4 .word 0x240000a4
  7085. ldr r2, =_sidata
  7086. 8003414: 08014668 .word 0x08014668
  7087. ldr r2, =_sbss
  7088. 8003418: 240000c0 .word 0x240000c0
  7089. ldr r4, =_ebss
  7090. 800341c: 24012b94 .word 0x24012b94
  7091. 08003420 <ADC3_IRQHandler>:
  7092. * @retval None
  7093. */
  7094. .section .text.Default_Handler,"ax",%progbits
  7095. Default_Handler:
  7096. Infinite_Loop:
  7097. b Infinite_Loop
  7098. 8003420: e7fe b.n 8003420 <ADC3_IRQHandler>
  7099. ...
  7100. 08003424 <HAL_Init>:
  7101. * need to ensure that the SysTick time base is always set to 1 millisecond
  7102. * to have correct HAL operation.
  7103. * @retval HAL status
  7104. */
  7105. HAL_StatusTypeDef HAL_Init(void)
  7106. {
  7107. 8003424: b580 push {r7, lr}
  7108. 8003426: b082 sub sp, #8
  7109. 8003428: af00 add r7, sp, #0
  7110. __HAL_ART_CONFIG_BASE_ADDRESS(0x08100000UL); /* Configure the Cortex-M4 ART Base address to the Flash Bank 2 : */
  7111. __HAL_ART_ENABLE(); /* Enable the Cortex-M4 ART */
  7112. #endif /* DUAL_CORE && CORE_CM4 */
  7113. /* Set Interrupt Group Priority */
  7114. HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
  7115. 800342a: 2003 movs r0, #3
  7116. 800342c: f001 fd2f bl 8004e8e <HAL_NVIC_SetPriorityGrouping>
  7117. /* Update the SystemCoreClock global variable */
  7118. #if defined(RCC_D1CFGR_D1CPRE)
  7119. common_system_clock = HAL_RCC_GetSysClockFreq() >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_D1CPRE)>> RCC_D1CFGR_D1CPRE_Pos]) & 0x1FU);
  7120. 8003430: f005 fe48 bl 80090c4 <HAL_RCC_GetSysClockFreq>
  7121. 8003434: 4602 mov r2, r0
  7122. 8003436: 4b15 ldr r3, [pc, #84] @ (800348c <HAL_Init+0x68>)
  7123. 8003438: 699b ldr r3, [r3, #24]
  7124. 800343a: 0a1b lsrs r3, r3, #8
  7125. 800343c: f003 030f and.w r3, r3, #15
  7126. 8003440: 4913 ldr r1, [pc, #76] @ (8003490 <HAL_Init+0x6c>)
  7127. 8003442: 5ccb ldrb r3, [r1, r3]
  7128. 8003444: f003 031f and.w r3, r3, #31
  7129. 8003448: fa22 f303 lsr.w r3, r2, r3
  7130. 800344c: 607b str r3, [r7, #4]
  7131. common_system_clock = HAL_RCC_GetSysClockFreq() >> ((D1CorePrescTable[(RCC->CDCFGR1 & RCC_CDCFGR1_CDCPRE)>> RCC_CDCFGR1_CDCPRE_Pos]) & 0x1FU);
  7132. #endif
  7133. /* Update the SystemD2Clock global variable */
  7134. #if defined(RCC_D1CFGR_HPRE)
  7135. SystemD2Clock = (common_system_clock >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_HPRE)>> RCC_D1CFGR_HPRE_Pos]) & 0x1FU));
  7136. 800344e: 4b0f ldr r3, [pc, #60] @ (800348c <HAL_Init+0x68>)
  7137. 8003450: 699b ldr r3, [r3, #24]
  7138. 8003452: f003 030f and.w r3, r3, #15
  7139. 8003456: 4a0e ldr r2, [pc, #56] @ (8003490 <HAL_Init+0x6c>)
  7140. 8003458: 5cd3 ldrb r3, [r2, r3]
  7141. 800345a: f003 031f and.w r3, r3, #31
  7142. 800345e: 687a ldr r2, [r7, #4]
  7143. 8003460: fa22 f303 lsr.w r3, r2, r3
  7144. 8003464: 4a0b ldr r2, [pc, #44] @ (8003494 <HAL_Init+0x70>)
  7145. 8003466: 6013 str r3, [r2, #0]
  7146. #endif
  7147. #if defined(DUAL_CORE) && defined(CORE_CM4)
  7148. SystemCoreClock = SystemD2Clock;
  7149. #else
  7150. SystemCoreClock = common_system_clock;
  7151. 8003468: 4a0b ldr r2, [pc, #44] @ (8003498 <HAL_Init+0x74>)
  7152. 800346a: 687b ldr r3, [r7, #4]
  7153. 800346c: 6013 str r3, [r2, #0]
  7154. #endif /* DUAL_CORE && CORE_CM4 */
  7155. /* Use systick as time base source and configure 1ms tick (default clock after Reset is HSI) */
  7156. if(HAL_InitTick(TICK_INT_PRIORITY) != HAL_OK)
  7157. 800346e: 200f movs r0, #15
  7158. 8003470: f7ff f860 bl 8002534 <HAL_InitTick>
  7159. 8003474: 4603 mov r3, r0
  7160. 8003476: 2b00 cmp r3, #0
  7161. 8003478: d001 beq.n 800347e <HAL_Init+0x5a>
  7162. {
  7163. return HAL_ERROR;
  7164. 800347a: 2301 movs r3, #1
  7165. 800347c: e002 b.n 8003484 <HAL_Init+0x60>
  7166. }
  7167. /* Init the low level hardware */
  7168. HAL_MspInit();
  7169. 800347e: f7fe fd0f bl 8001ea0 <HAL_MspInit>
  7170. /* Return function status */
  7171. return HAL_OK;
  7172. 8003482: 2300 movs r3, #0
  7173. }
  7174. 8003484: 4618 mov r0, r3
  7175. 8003486: 3708 adds r7, #8
  7176. 8003488: 46bd mov sp, r7
  7177. 800348a: bd80 pop {r7, pc}
  7178. 800348c: 58024400 .word 0x58024400
  7179. 8003490: 080145e4 .word 0x080145e4
  7180. 8003494: 24000038 .word 0x24000038
  7181. 8003498: 24000034 .word 0x24000034
  7182. 0800349c <HAL_IncTick>:
  7183. * @note This function is declared as __weak to be overwritten in case of other
  7184. * implementations in user file.
  7185. * @retval None
  7186. */
  7187. __weak void HAL_IncTick(void)
  7188. {
  7189. 800349c: b480 push {r7}
  7190. 800349e: af00 add r7, sp, #0
  7191. uwTick += (uint32_t)uwTickFreq;
  7192. 80034a0: 4b06 ldr r3, [pc, #24] @ (80034bc <HAL_IncTick+0x20>)
  7193. 80034a2: 781b ldrb r3, [r3, #0]
  7194. 80034a4: 461a mov r2, r3
  7195. 80034a6: 4b06 ldr r3, [pc, #24] @ (80034c0 <HAL_IncTick+0x24>)
  7196. 80034a8: 681b ldr r3, [r3, #0]
  7197. 80034aa: 4413 add r3, r2
  7198. 80034ac: 4a04 ldr r2, [pc, #16] @ (80034c0 <HAL_IncTick+0x24>)
  7199. 80034ae: 6013 str r3, [r2, #0]
  7200. }
  7201. 80034b0: bf00 nop
  7202. 80034b2: 46bd mov sp, r7
  7203. 80034b4: f85d 7b04 ldr.w r7, [sp], #4
  7204. 80034b8: 4770 bx lr
  7205. 80034ba: bf00 nop
  7206. 80034bc: 24000040 .word 0x24000040
  7207. 80034c0: 24000a5c .word 0x24000a5c
  7208. 080034c4 <HAL_GetTick>:
  7209. * @note This function is declared as __weak to be overwritten in case of other
  7210. * implementations in user file.
  7211. * @retval tick value
  7212. */
  7213. __weak uint32_t HAL_GetTick(void)
  7214. {
  7215. 80034c4: b480 push {r7}
  7216. 80034c6: af00 add r7, sp, #0
  7217. return uwTick;
  7218. 80034c8: 4b03 ldr r3, [pc, #12] @ (80034d8 <HAL_GetTick+0x14>)
  7219. 80034ca: 681b ldr r3, [r3, #0]
  7220. }
  7221. 80034cc: 4618 mov r0, r3
  7222. 80034ce: 46bd mov sp, r7
  7223. 80034d0: f85d 7b04 ldr.w r7, [sp], #4
  7224. 80034d4: 4770 bx lr
  7225. 80034d6: bf00 nop
  7226. 80034d8: 24000a5c .word 0x24000a5c
  7227. 080034dc <HAL_GetREVID>:
  7228. /**
  7229. * @brief Returns the device revision identifier.
  7230. * @retval Device revision identifier
  7231. */
  7232. uint32_t HAL_GetREVID(void)
  7233. {
  7234. 80034dc: b480 push {r7}
  7235. 80034de: af00 add r7, sp, #0
  7236. return((DBGMCU->IDCODE) >> 16);
  7237. 80034e0: 4b03 ldr r3, [pc, #12] @ (80034f0 <HAL_GetREVID+0x14>)
  7238. 80034e2: 681b ldr r3, [r3, #0]
  7239. 80034e4: 0c1b lsrs r3, r3, #16
  7240. }
  7241. 80034e6: 4618 mov r0, r3
  7242. 80034e8: 46bd mov sp, r7
  7243. 80034ea: f85d 7b04 ldr.w r7, [sp], #4
  7244. 80034ee: 4770 bx lr
  7245. 80034f0: 5c001000 .word 0x5c001000
  7246. 080034f4 <HAL_SYSCFG_AnalogSwitchConfig>:
  7247. * @arg SYSCFG_SWITCH_PC3_CLOSE
  7248. * @retval None
  7249. */
  7250. void HAL_SYSCFG_AnalogSwitchConfig(uint32_t SYSCFG_AnalogSwitch , uint32_t SYSCFG_SwitchState )
  7251. {
  7252. 80034f4: b480 push {r7}
  7253. 80034f6: b083 sub sp, #12
  7254. 80034f8: af00 add r7, sp, #0
  7255. 80034fa: 6078 str r0, [r7, #4]
  7256. 80034fc: 6039 str r1, [r7, #0]
  7257. /* Check the parameter */
  7258. assert_param(IS_SYSCFG_ANALOG_SWITCH(SYSCFG_AnalogSwitch));
  7259. assert_param(IS_SYSCFG_SWITCH_STATE(SYSCFG_SwitchState));
  7260. MODIFY_REG(SYSCFG->PMCR, (uint32_t) SYSCFG_AnalogSwitch, (uint32_t)(SYSCFG_SwitchState));
  7261. 80034fe: 4b07 ldr r3, [pc, #28] @ (800351c <HAL_SYSCFG_AnalogSwitchConfig+0x28>)
  7262. 8003500: 685a ldr r2, [r3, #4]
  7263. 8003502: 687b ldr r3, [r7, #4]
  7264. 8003504: 43db mvns r3, r3
  7265. 8003506: 401a ands r2, r3
  7266. 8003508: 4904 ldr r1, [pc, #16] @ (800351c <HAL_SYSCFG_AnalogSwitchConfig+0x28>)
  7267. 800350a: 683b ldr r3, [r7, #0]
  7268. 800350c: 4313 orrs r3, r2
  7269. 800350e: 604b str r3, [r1, #4]
  7270. }
  7271. 8003510: bf00 nop
  7272. 8003512: 370c adds r7, #12
  7273. 8003514: 46bd mov sp, r7
  7274. 8003516: f85d 7b04 ldr.w r7, [sp], #4
  7275. 800351a: 4770 bx lr
  7276. 800351c: 58000400 .word 0x58000400
  7277. 08003520 <LL_ADC_SetCommonClock>:
  7278. * @arg @ref LL_ADC_CLOCK_ASYNC_DIV128
  7279. * @arg @ref LL_ADC_CLOCK_ASYNC_DIV256
  7280. * @retval None
  7281. */
  7282. __STATIC_INLINE void LL_ADC_SetCommonClock(ADC_Common_TypeDef *ADCxy_COMMON, uint32_t CommonClock)
  7283. {
  7284. 8003520: b480 push {r7}
  7285. 8003522: b083 sub sp, #12
  7286. 8003524: af00 add r7, sp, #0
  7287. 8003526: 6078 str r0, [r7, #4]
  7288. 8003528: 6039 str r1, [r7, #0]
  7289. MODIFY_REG(ADCxy_COMMON->CCR, ADC_CCR_CKMODE | ADC_CCR_PRESC, CommonClock);
  7290. 800352a: 687b ldr r3, [r7, #4]
  7291. 800352c: 689b ldr r3, [r3, #8]
  7292. 800352e: f423 127c bic.w r2, r3, #4128768 @ 0x3f0000
  7293. 8003532: 683b ldr r3, [r7, #0]
  7294. 8003534: 431a orrs r2, r3
  7295. 8003536: 687b ldr r3, [r7, #4]
  7296. 8003538: 609a str r2, [r3, #8]
  7297. }
  7298. 800353a: bf00 nop
  7299. 800353c: 370c adds r7, #12
  7300. 800353e: 46bd mov sp, r7
  7301. 8003540: f85d 7b04 ldr.w r7, [sp], #4
  7302. 8003544: 4770 bx lr
  7303. 08003546 <LL_ADC_SetCommonPathInternalCh>:
  7304. * @arg @ref LL_ADC_PATH_INTERNAL_TEMPSENSOR
  7305. * @arg @ref LL_ADC_PATH_INTERNAL_VBAT
  7306. * @retval None
  7307. */
  7308. __STATIC_INLINE void LL_ADC_SetCommonPathInternalCh(ADC_Common_TypeDef *ADCxy_COMMON, uint32_t PathInternal)
  7309. {
  7310. 8003546: b480 push {r7}
  7311. 8003548: b083 sub sp, #12
  7312. 800354a: af00 add r7, sp, #0
  7313. 800354c: 6078 str r0, [r7, #4]
  7314. 800354e: 6039 str r1, [r7, #0]
  7315. MODIFY_REG(ADCxy_COMMON->CCR, ADC_CCR_VREFEN | ADC_CCR_TSEN | ADC_CCR_VBATEN, PathInternal);
  7316. 8003550: 687b ldr r3, [r7, #4]
  7317. 8003552: 689b ldr r3, [r3, #8]
  7318. 8003554: f023 72e0 bic.w r2, r3, #29360128 @ 0x1c00000
  7319. 8003558: 683b ldr r3, [r7, #0]
  7320. 800355a: 431a orrs r2, r3
  7321. 800355c: 687b ldr r3, [r7, #4]
  7322. 800355e: 609a str r2, [r3, #8]
  7323. }
  7324. 8003560: bf00 nop
  7325. 8003562: 370c adds r7, #12
  7326. 8003564: 46bd mov sp, r7
  7327. 8003566: f85d 7b04 ldr.w r7, [sp], #4
  7328. 800356a: 4770 bx lr
  7329. 0800356c <LL_ADC_GetCommonPathInternalCh>:
  7330. * @arg @ref LL_ADC_PATH_INTERNAL_VREFINT
  7331. * @arg @ref LL_ADC_PATH_INTERNAL_TEMPSENSOR
  7332. * @arg @ref LL_ADC_PATH_INTERNAL_VBAT
  7333. */
  7334. __STATIC_INLINE uint32_t LL_ADC_GetCommonPathInternalCh(ADC_Common_TypeDef *ADCxy_COMMON)
  7335. {
  7336. 800356c: b480 push {r7}
  7337. 800356e: b083 sub sp, #12
  7338. 8003570: af00 add r7, sp, #0
  7339. 8003572: 6078 str r0, [r7, #4]
  7340. return (uint32_t)(READ_BIT(ADCxy_COMMON->CCR, ADC_CCR_VREFEN | ADC_CCR_TSEN | ADC_CCR_VBATEN));
  7341. 8003574: 687b ldr r3, [r7, #4]
  7342. 8003576: 689b ldr r3, [r3, #8]
  7343. 8003578: f003 73e0 and.w r3, r3, #29360128 @ 0x1c00000
  7344. }
  7345. 800357c: 4618 mov r0, r3
  7346. 800357e: 370c adds r7, #12
  7347. 8003580: 46bd mov sp, r7
  7348. 8003582: f85d 7b04 ldr.w r7, [sp], #4
  7349. 8003586: 4770 bx lr
  7350. 08003588 <LL_ADC_SetOffset>:
  7351. * Other channels are slow channels (conversion rate: refer to reference manual).
  7352. * @param OffsetLevel Value between Min_Data=0x000 and Max_Data=0x3FFFFFF
  7353. * @retval None
  7354. */
  7355. __STATIC_INLINE void LL_ADC_SetOffset(ADC_TypeDef *ADCx, uint32_t Offsety, uint32_t Channel, uint32_t OffsetLevel)
  7356. {
  7357. 8003588: b480 push {r7}
  7358. 800358a: b087 sub sp, #28
  7359. 800358c: af00 add r7, sp, #0
  7360. 800358e: 60f8 str r0, [r7, #12]
  7361. 8003590: 60b9 str r1, [r7, #8]
  7362. 8003592: 607a str r2, [r7, #4]
  7363. 8003594: 603b str r3, [r7, #0]
  7364. __IO uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->OFR1, Offsety);
  7365. 8003596: 68fb ldr r3, [r7, #12]
  7366. 8003598: 3360 adds r3, #96 @ 0x60
  7367. 800359a: 461a mov r2, r3
  7368. 800359c: 68bb ldr r3, [r7, #8]
  7369. 800359e: 009b lsls r3, r3, #2
  7370. 80035a0: 4413 add r3, r2
  7371. 80035a2: 617b str r3, [r7, #20]
  7372. ADC3_OFR1_OFFSET1_EN | (Channel & ADC_CHANNEL_ID_NUMBER_MASK) | OffsetLevel);
  7373. }
  7374. else
  7375. #endif /* ADC_VER_V5_V90 */
  7376. {
  7377. MODIFY_REG(*preg,
  7378. 80035a4: 697b ldr r3, [r7, #20]
  7379. 80035a6: 681b ldr r3, [r3, #0]
  7380. 80035a8: f003 4200 and.w r2, r3, #2147483648 @ 0x80000000
  7381. 80035ac: 687b ldr r3, [r7, #4]
  7382. 80035ae: f003 41f8 and.w r1, r3, #2080374784 @ 0x7c000000
  7383. 80035b2: 683b ldr r3, [r7, #0]
  7384. 80035b4: 430b orrs r3, r1
  7385. 80035b6: 431a orrs r2, r3
  7386. 80035b8: 697b ldr r3, [r7, #20]
  7387. 80035ba: 601a str r2, [r3, #0]
  7388. ADC_OFR1_OFFSET1_CH | ADC_OFR1_OFFSET1,
  7389. (Channel & ADC_CHANNEL_ID_NUMBER_MASK) | OffsetLevel);
  7390. }
  7391. }
  7392. 80035bc: bf00 nop
  7393. 80035be: 371c adds r7, #28
  7394. 80035c0: 46bd mov sp, r7
  7395. 80035c2: f85d 7b04 ldr.w r7, [sp], #4
  7396. 80035c6: 4770 bx lr
  7397. 080035c8 <LL_ADC_SetDataRightShift>:
  7398. * @arg @ref LL_ADC_OFFSET_RSHIFT_ENABLE
  7399. * @arg @ref LL_ADC_OFFSET_RSHIFT_DISABLE
  7400. * @retval Returned None
  7401. */
  7402. __STATIC_INLINE void LL_ADC_SetDataRightShift(ADC_TypeDef *ADCx, uint32_t Offsety, uint32_t RigthShift)
  7403. {
  7404. 80035c8: b480 push {r7}
  7405. 80035ca: b085 sub sp, #20
  7406. 80035cc: af00 add r7, sp, #0
  7407. 80035ce: 60f8 str r0, [r7, #12]
  7408. 80035d0: 60b9 str r1, [r7, #8]
  7409. 80035d2: 607a str r2, [r7, #4]
  7410. MODIFY_REG(ADCx->CFGR2, (ADC_CFGR2_RSHIFT1 | ADC_CFGR2_RSHIFT2 | ADC_CFGR2_RSHIFT3 | ADC_CFGR2_RSHIFT4), RigthShift << (Offsety & 0x1FUL));
  7411. 80035d4: 68fb ldr r3, [r7, #12]
  7412. 80035d6: 691b ldr r3, [r3, #16]
  7413. 80035d8: f423 42f0 bic.w r2, r3, #30720 @ 0x7800
  7414. 80035dc: 68bb ldr r3, [r7, #8]
  7415. 80035de: f003 031f and.w r3, r3, #31
  7416. 80035e2: 6879 ldr r1, [r7, #4]
  7417. 80035e4: fa01 f303 lsl.w r3, r1, r3
  7418. 80035e8: 431a orrs r2, r3
  7419. 80035ea: 68fb ldr r3, [r7, #12]
  7420. 80035ec: 611a str r2, [r3, #16]
  7421. }
  7422. 80035ee: bf00 nop
  7423. 80035f0: 3714 adds r7, #20
  7424. 80035f2: 46bd mov sp, r7
  7425. 80035f4: f85d 7b04 ldr.w r7, [sp], #4
  7426. 80035f8: 4770 bx lr
  7427. 080035fa <LL_ADC_SetOffsetSignedSaturation>:
  7428. * @arg @ref LL_ADC_OFFSET_SIGNED_SATURATION_ENABLE
  7429. * @arg @ref LL_ADC_OFFSET_SIGNED_SATURATION_DISABLE
  7430. * @retval Returned None
  7431. */
  7432. __STATIC_INLINE void LL_ADC_SetOffsetSignedSaturation(ADC_TypeDef *ADCx, uint32_t Offsety, uint32_t OffsetSignedSaturation)
  7433. {
  7434. 80035fa: b480 push {r7}
  7435. 80035fc: b087 sub sp, #28
  7436. 80035fe: af00 add r7, sp, #0
  7437. 8003600: 60f8 str r0, [r7, #12]
  7438. 8003602: 60b9 str r1, [r7, #8]
  7439. 8003604: 607a str r2, [r7, #4]
  7440. /* Function not available on this instance */
  7441. }
  7442. else
  7443. #endif /* ADC_VER_V5_V90 */
  7444. {
  7445. __IO uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->OFR1, Offsety);
  7446. 8003606: 68fb ldr r3, [r7, #12]
  7447. 8003608: 3360 adds r3, #96 @ 0x60
  7448. 800360a: 461a mov r2, r3
  7449. 800360c: 68bb ldr r3, [r7, #8]
  7450. 800360e: 009b lsls r3, r3, #2
  7451. 8003610: 4413 add r3, r2
  7452. 8003612: 617b str r3, [r7, #20]
  7453. MODIFY_REG(*preg, ADC_OFR1_SSATE, OffsetSignedSaturation);
  7454. 8003614: 697b ldr r3, [r7, #20]
  7455. 8003616: 681b ldr r3, [r3, #0]
  7456. 8003618: f023 4200 bic.w r2, r3, #2147483648 @ 0x80000000
  7457. 800361c: 687b ldr r3, [r7, #4]
  7458. 800361e: 431a orrs r2, r3
  7459. 8003620: 697b ldr r3, [r7, #20]
  7460. 8003622: 601a str r2, [r3, #0]
  7461. }
  7462. }
  7463. 8003624: bf00 nop
  7464. 8003626: 371c adds r7, #28
  7465. 8003628: 46bd mov sp, r7
  7466. 800362a: f85d 7b04 ldr.w r7, [sp], #4
  7467. 800362e: 4770 bx lr
  7468. 08003630 <LL_ADC_REG_IsTriggerSourceSWStart>:
  7469. * @param ADCx ADC instance
  7470. * @retval Value "0" if trigger source external trigger
  7471. * Value "1" if trigger source SW start.
  7472. */
  7473. __STATIC_INLINE uint32_t LL_ADC_REG_IsTriggerSourceSWStart(ADC_TypeDef *ADCx)
  7474. {
  7475. 8003630: b480 push {r7}
  7476. 8003632: b083 sub sp, #12
  7477. 8003634: af00 add r7, sp, #0
  7478. 8003636: 6078 str r0, [r7, #4]
  7479. return ((READ_BIT(ADCx->CFGR, ADC_CFGR_EXTEN) == (LL_ADC_REG_TRIG_SOFTWARE & ADC_CFGR_EXTEN)) ? 1UL : 0UL);
  7480. 8003638: 687b ldr r3, [r7, #4]
  7481. 800363a: 68db ldr r3, [r3, #12]
  7482. 800363c: f403 6340 and.w r3, r3, #3072 @ 0xc00
  7483. 8003640: 2b00 cmp r3, #0
  7484. 8003642: d101 bne.n 8003648 <LL_ADC_REG_IsTriggerSourceSWStart+0x18>
  7485. 8003644: 2301 movs r3, #1
  7486. 8003646: e000 b.n 800364a <LL_ADC_REG_IsTriggerSourceSWStart+0x1a>
  7487. 8003648: 2300 movs r3, #0
  7488. }
  7489. 800364a: 4618 mov r0, r3
  7490. 800364c: 370c adds r7, #12
  7491. 800364e: 46bd mov sp, r7
  7492. 8003650: f85d 7b04 ldr.w r7, [sp], #4
  7493. 8003654: 4770 bx lr
  7494. 08003656 <LL_ADC_REG_SetSequencerRanks>:
  7495. * (3) On STM32H7, fast channel (0.125 us for 14-bit resolution (ADC conversion rate up to 8 Ms/s)).
  7496. * Other channels are slow channels (conversion rate: refer to reference manual).
  7497. * @retval None
  7498. */
  7499. __STATIC_INLINE void LL_ADC_REG_SetSequencerRanks(ADC_TypeDef *ADCx, uint32_t Rank, uint32_t Channel)
  7500. {
  7501. 8003656: b480 push {r7}
  7502. 8003658: b087 sub sp, #28
  7503. 800365a: af00 add r7, sp, #0
  7504. 800365c: 60f8 str r0, [r7, #12]
  7505. 800365e: 60b9 str r1, [r7, #8]
  7506. 8003660: 607a str r2, [r7, #4]
  7507. /* Set bits with content of parameter "Channel" with bits position */
  7508. /* in register and register position depending on parameter "Rank". */
  7509. /* Parameters "Rank" and "Channel" are used with masks because containing */
  7510. /* other bits reserved for other purpose. */
  7511. __IO uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->SQR1, ((Rank & ADC_REG_SQRX_REGOFFSET_MASK) >> ADC_SQRX_REGOFFSET_POS));
  7512. 8003662: 68fb ldr r3, [r7, #12]
  7513. 8003664: 3330 adds r3, #48 @ 0x30
  7514. 8003666: 461a mov r2, r3
  7515. 8003668: 68bb ldr r3, [r7, #8]
  7516. 800366a: 0a1b lsrs r3, r3, #8
  7517. 800366c: 009b lsls r3, r3, #2
  7518. 800366e: f003 030c and.w r3, r3, #12
  7519. 8003672: 4413 add r3, r2
  7520. 8003674: 617b str r3, [r7, #20]
  7521. MODIFY_REG(*preg,
  7522. 8003676: 697b ldr r3, [r7, #20]
  7523. 8003678: 681a ldr r2, [r3, #0]
  7524. 800367a: 68bb ldr r3, [r7, #8]
  7525. 800367c: f003 031f and.w r3, r3, #31
  7526. 8003680: 211f movs r1, #31
  7527. 8003682: fa01 f303 lsl.w r3, r1, r3
  7528. 8003686: 43db mvns r3, r3
  7529. 8003688: 401a ands r2, r3
  7530. 800368a: 687b ldr r3, [r7, #4]
  7531. 800368c: 0e9b lsrs r3, r3, #26
  7532. 800368e: f003 011f and.w r1, r3, #31
  7533. 8003692: 68bb ldr r3, [r7, #8]
  7534. 8003694: f003 031f and.w r3, r3, #31
  7535. 8003698: fa01 f303 lsl.w r3, r1, r3
  7536. 800369c: 431a orrs r2, r3
  7537. 800369e: 697b ldr r3, [r7, #20]
  7538. 80036a0: 601a str r2, [r3, #0]
  7539. ADC_CHANNEL_ID_NUMBER_MASK_POSBIT0 << (Rank & ADC_REG_RANK_ID_SQRX_MASK),
  7540. ((Channel & ADC_CHANNEL_ID_NUMBER_MASK) >> ADC_CHANNEL_ID_NUMBER_BITOFFSET_POS) << (Rank & ADC_REG_RANK_ID_SQRX_MASK));
  7541. }
  7542. 80036a2: bf00 nop
  7543. 80036a4: 371c adds r7, #28
  7544. 80036a6: 46bd mov sp, r7
  7545. 80036a8: f85d 7b04 ldr.w r7, [sp], #4
  7546. 80036ac: 4770 bx lr
  7547. 080036ae <LL_ADC_REG_SetDataTransferMode>:
  7548. * @param ADCx ADC instance
  7549. * @param DataTransferMode Select Data Management configuration
  7550. * @retval None
  7551. */
  7552. __STATIC_INLINE void LL_ADC_REG_SetDataTransferMode(ADC_TypeDef *ADCx, uint32_t DataTransferMode)
  7553. {
  7554. 80036ae: b480 push {r7}
  7555. 80036b0: b083 sub sp, #12
  7556. 80036b2: af00 add r7, sp, #0
  7557. 80036b4: 6078 str r0, [r7, #4]
  7558. 80036b6: 6039 str r1, [r7, #0]
  7559. MODIFY_REG(ADCx->CFGR, ADC_CFGR_DMNGT, DataTransferMode);
  7560. 80036b8: 687b ldr r3, [r7, #4]
  7561. 80036ba: 68db ldr r3, [r3, #12]
  7562. 80036bc: f023 0203 bic.w r2, r3, #3
  7563. 80036c0: 683b ldr r3, [r7, #0]
  7564. 80036c2: 431a orrs r2, r3
  7565. 80036c4: 687b ldr r3, [r7, #4]
  7566. 80036c6: 60da str r2, [r3, #12]
  7567. }
  7568. 80036c8: bf00 nop
  7569. 80036ca: 370c adds r7, #12
  7570. 80036cc: 46bd mov sp, r7
  7571. 80036ce: f85d 7b04 ldr.w r7, [sp], #4
  7572. 80036d2: 4770 bx lr
  7573. 080036d4 <LL_ADC_SetChannelSamplingTime>:
  7574. * @arg @ref LL_ADC_SAMPLINGTIME_387CYCLES_5
  7575. * @arg @ref LL_ADC_SAMPLINGTIME_810CYCLES_5
  7576. * @retval None
  7577. */
  7578. __STATIC_INLINE void LL_ADC_SetChannelSamplingTime(ADC_TypeDef *ADCx, uint32_t Channel, uint32_t SamplingTime)
  7579. {
  7580. 80036d4: b480 push {r7}
  7581. 80036d6: b087 sub sp, #28
  7582. 80036d8: af00 add r7, sp, #0
  7583. 80036da: 60f8 str r0, [r7, #12]
  7584. 80036dc: 60b9 str r1, [r7, #8]
  7585. 80036de: 607a str r2, [r7, #4]
  7586. /* Set bits with content of parameter "SamplingTime" with bits position */
  7587. /* in register and register position depending on parameter "Channel". */
  7588. /* Parameter "Channel" is used with masks because containing */
  7589. /* other bits reserved for other purpose. */
  7590. __IO uint32_t *preg = __ADC_PTR_REG_OFFSET(ADCx->SMPR1, ((Channel & ADC_CHANNEL_SMPRX_REGOFFSET_MASK) >> ADC_SMPRX_REGOFFSET_POS));
  7591. 80036e0: 68fb ldr r3, [r7, #12]
  7592. 80036e2: 3314 adds r3, #20
  7593. 80036e4: 461a mov r2, r3
  7594. 80036e6: 68bb ldr r3, [r7, #8]
  7595. 80036e8: 0e5b lsrs r3, r3, #25
  7596. 80036ea: 009b lsls r3, r3, #2
  7597. 80036ec: f003 0304 and.w r3, r3, #4
  7598. 80036f0: 4413 add r3, r2
  7599. 80036f2: 617b str r3, [r7, #20]
  7600. MODIFY_REG(*preg,
  7601. 80036f4: 697b ldr r3, [r7, #20]
  7602. 80036f6: 681a ldr r2, [r3, #0]
  7603. 80036f8: 68bb ldr r3, [r7, #8]
  7604. 80036fa: 0d1b lsrs r3, r3, #20
  7605. 80036fc: f003 031f and.w r3, r3, #31
  7606. 8003700: 2107 movs r1, #7
  7607. 8003702: fa01 f303 lsl.w r3, r1, r3
  7608. 8003706: 43db mvns r3, r3
  7609. 8003708: 401a ands r2, r3
  7610. 800370a: 68bb ldr r3, [r7, #8]
  7611. 800370c: 0d1b lsrs r3, r3, #20
  7612. 800370e: f003 031f and.w r3, r3, #31
  7613. 8003712: 6879 ldr r1, [r7, #4]
  7614. 8003714: fa01 f303 lsl.w r3, r1, r3
  7615. 8003718: 431a orrs r2, r3
  7616. 800371a: 697b ldr r3, [r7, #20]
  7617. 800371c: 601a str r2, [r3, #0]
  7618. ADC_SMPR1_SMP0 << ((Channel & ADC_CHANNEL_SMPx_BITOFFSET_MASK) >> ADC_CHANNEL_SMPx_BITOFFSET_POS),
  7619. SamplingTime << ((Channel & ADC_CHANNEL_SMPx_BITOFFSET_MASK) >> ADC_CHANNEL_SMPx_BITOFFSET_POS));
  7620. }
  7621. 800371e: bf00 nop
  7622. 8003720: 371c adds r7, #28
  7623. 8003722: 46bd mov sp, r7
  7624. 8003724: f85d 7b04 ldr.w r7, [sp], #4
  7625. 8003728: 4770 bx lr
  7626. ...
  7627. 0800372c <LL_ADC_SetChannelSingleDiff>:
  7628. * @arg @ref LL_ADC_SINGLE_ENDED
  7629. * @arg @ref LL_ADC_DIFFERENTIAL_ENDED
  7630. * @retval None
  7631. */
  7632. __STATIC_INLINE void LL_ADC_SetChannelSingleDiff(ADC_TypeDef *ADCx, uint32_t Channel, uint32_t SingleDiff)
  7633. {
  7634. 800372c: b480 push {r7}
  7635. 800372e: b085 sub sp, #20
  7636. 8003730: af00 add r7, sp, #0
  7637. 8003732: 60f8 str r0, [r7, #12]
  7638. 8003734: 60b9 str r1, [r7, #8]
  7639. 8003736: 607a str r2, [r7, #4]
  7640. }
  7641. #else /* ADC_VER_V5_V90 */
  7642. /* Bits of channels in single or differential mode are set only for */
  7643. /* differential mode (for single mode, mask of bits allowed to be set is */
  7644. /* shifted out of range of bits of channels in single or differential mode. */
  7645. MODIFY_REG(ADCx->DIFSEL,
  7646. 8003738: 68fb ldr r3, [r7, #12]
  7647. 800373a: f8d3 20c0 ldr.w r2, [r3, #192] @ 0xc0
  7648. 800373e: 68bb ldr r3, [r7, #8]
  7649. 8003740: f3c3 0313 ubfx r3, r3, #0, #20
  7650. 8003744: 43db mvns r3, r3
  7651. 8003746: 401a ands r2, r3
  7652. 8003748: 687b ldr r3, [r7, #4]
  7653. 800374a: f003 0318 and.w r3, r3, #24
  7654. 800374e: 4908 ldr r1, [pc, #32] @ (8003770 <LL_ADC_SetChannelSingleDiff+0x44>)
  7655. 8003750: 40d9 lsrs r1, r3
  7656. 8003752: 68bb ldr r3, [r7, #8]
  7657. 8003754: 400b ands r3, r1
  7658. 8003756: f3c3 0313 ubfx r3, r3, #0, #20
  7659. 800375a: 431a orrs r2, r3
  7660. 800375c: 68fb ldr r3, [r7, #12]
  7661. 800375e: f8c3 20c0 str.w r2, [r3, #192] @ 0xc0
  7662. Channel & ADC_SINGLEDIFF_CHANNEL_MASK,
  7663. (Channel & ADC_SINGLEDIFF_CHANNEL_MASK) & (ADC_DIFSEL_DIFSEL >> (SingleDiff & ADC_SINGLEDIFF_CHANNEL_SHIFT_MASK)));
  7664. #endif /* ADC_VER_V5_V90 */
  7665. }
  7666. 8003762: bf00 nop
  7667. 8003764: 3714 adds r7, #20
  7668. 8003766: 46bd mov sp, r7
  7669. 8003768: f85d 7b04 ldr.w r7, [sp], #4
  7670. 800376c: 4770 bx lr
  7671. 800376e: bf00 nop
  7672. 8003770: 000fffff .word 0x000fffff
  7673. 08003774 <LL_ADC_GetMultimode>:
  7674. * @arg @ref LL_ADC_MULTI_DUAL_REG_SIM_INJ_SIM
  7675. * @arg @ref LL_ADC_MULTI_DUAL_REG_SIM_INJ_ALT
  7676. * @arg @ref LL_ADC_MULTI_DUAL_REG_INT_INJ_SIM
  7677. */
  7678. __STATIC_INLINE uint32_t LL_ADC_GetMultimode(ADC_Common_TypeDef *ADCxy_COMMON)
  7679. {
  7680. 8003774: b480 push {r7}
  7681. 8003776: b083 sub sp, #12
  7682. 8003778: af00 add r7, sp, #0
  7683. 800377a: 6078 str r0, [r7, #4]
  7684. return (uint32_t)(READ_BIT(ADCxy_COMMON->CCR, ADC_CCR_DUAL));
  7685. 800377c: 687b ldr r3, [r7, #4]
  7686. 800377e: 689b ldr r3, [r3, #8]
  7687. 8003780: f003 031f and.w r3, r3, #31
  7688. }
  7689. 8003784: 4618 mov r0, r3
  7690. 8003786: 370c adds r7, #12
  7691. 8003788: 46bd mov sp, r7
  7692. 800378a: f85d 7b04 ldr.w r7, [sp], #4
  7693. 800378e: 4770 bx lr
  7694. 08003790 <LL_ADC_DisableDeepPowerDown>:
  7695. * @rmtoll CR DEEPPWD LL_ADC_DisableDeepPowerDown
  7696. * @param ADCx ADC instance
  7697. * @retval None
  7698. */
  7699. __STATIC_INLINE void LL_ADC_DisableDeepPowerDown(ADC_TypeDef *ADCx)
  7700. {
  7701. 8003790: b480 push {r7}
  7702. 8003792: b083 sub sp, #12
  7703. 8003794: af00 add r7, sp, #0
  7704. 8003796: 6078 str r0, [r7, #4]
  7705. /* Note: Write register with some additional bits forced to state reset */
  7706. /* instead of modifying only the selected bit for this function, */
  7707. /* to not interfere with bits with HW property "rs". */
  7708. CLEAR_BIT(ADCx->CR, (ADC_CR_DEEPPWD | ADC_CR_BITS_PROPERTY_RS));
  7709. 8003798: 687b ldr r3, [r7, #4]
  7710. 800379a: 689a ldr r2, [r3, #8]
  7711. 800379c: 4b04 ldr r3, [pc, #16] @ (80037b0 <LL_ADC_DisableDeepPowerDown+0x20>)
  7712. 800379e: 4013 ands r3, r2
  7713. 80037a0: 687a ldr r2, [r7, #4]
  7714. 80037a2: 6093 str r3, [r2, #8]
  7715. }
  7716. 80037a4: bf00 nop
  7717. 80037a6: 370c adds r7, #12
  7718. 80037a8: 46bd mov sp, r7
  7719. 80037aa: f85d 7b04 ldr.w r7, [sp], #4
  7720. 80037ae: 4770 bx lr
  7721. 80037b0: 5fffffc0 .word 0x5fffffc0
  7722. 080037b4 <LL_ADC_IsDeepPowerDownEnabled>:
  7723. * @rmtoll CR DEEPPWD LL_ADC_IsDeepPowerDownEnabled
  7724. * @param ADCx ADC instance
  7725. * @retval 0: deep power down is disabled, 1: deep power down is enabled.
  7726. */
  7727. __STATIC_INLINE uint32_t LL_ADC_IsDeepPowerDownEnabled(ADC_TypeDef *ADCx)
  7728. {
  7729. 80037b4: b480 push {r7}
  7730. 80037b6: b083 sub sp, #12
  7731. 80037b8: af00 add r7, sp, #0
  7732. 80037ba: 6078 str r0, [r7, #4]
  7733. return ((READ_BIT(ADCx->CR, ADC_CR_DEEPPWD) == (ADC_CR_DEEPPWD)) ? 1UL : 0UL);
  7734. 80037bc: 687b ldr r3, [r7, #4]
  7735. 80037be: 689b ldr r3, [r3, #8]
  7736. 80037c0: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  7737. 80037c4: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  7738. 80037c8: d101 bne.n 80037ce <LL_ADC_IsDeepPowerDownEnabled+0x1a>
  7739. 80037ca: 2301 movs r3, #1
  7740. 80037cc: e000 b.n 80037d0 <LL_ADC_IsDeepPowerDownEnabled+0x1c>
  7741. 80037ce: 2300 movs r3, #0
  7742. }
  7743. 80037d0: 4618 mov r0, r3
  7744. 80037d2: 370c adds r7, #12
  7745. 80037d4: 46bd mov sp, r7
  7746. 80037d6: f85d 7b04 ldr.w r7, [sp], #4
  7747. 80037da: 4770 bx lr
  7748. 080037dc <LL_ADC_EnableInternalRegulator>:
  7749. * @rmtoll CR ADVREGEN LL_ADC_EnableInternalRegulator
  7750. * @param ADCx ADC instance
  7751. * @retval None
  7752. */
  7753. __STATIC_INLINE void LL_ADC_EnableInternalRegulator(ADC_TypeDef *ADCx)
  7754. {
  7755. 80037dc: b480 push {r7}
  7756. 80037de: b083 sub sp, #12
  7757. 80037e0: af00 add r7, sp, #0
  7758. 80037e2: 6078 str r0, [r7, #4]
  7759. /* Note: Write register with some additional bits forced to state reset */
  7760. /* instead of modifying only the selected bit for this function, */
  7761. /* to not interfere with bits with HW property "rs". */
  7762. MODIFY_REG(ADCx->CR,
  7763. 80037e4: 687b ldr r3, [r7, #4]
  7764. 80037e6: 689a ldr r2, [r3, #8]
  7765. 80037e8: 4b05 ldr r3, [pc, #20] @ (8003800 <LL_ADC_EnableInternalRegulator+0x24>)
  7766. 80037ea: 4013 ands r3, r2
  7767. 80037ec: f043 5280 orr.w r2, r3, #268435456 @ 0x10000000
  7768. 80037f0: 687b ldr r3, [r7, #4]
  7769. 80037f2: 609a str r2, [r3, #8]
  7770. ADC_CR_BITS_PROPERTY_RS,
  7771. ADC_CR_ADVREGEN);
  7772. }
  7773. 80037f4: bf00 nop
  7774. 80037f6: 370c adds r7, #12
  7775. 80037f8: 46bd mov sp, r7
  7776. 80037fa: f85d 7b04 ldr.w r7, [sp], #4
  7777. 80037fe: 4770 bx lr
  7778. 8003800: 6fffffc0 .word 0x6fffffc0
  7779. 08003804 <LL_ADC_IsInternalRegulatorEnabled>:
  7780. * @rmtoll CR ADVREGEN LL_ADC_IsInternalRegulatorEnabled
  7781. * @param ADCx ADC instance
  7782. * @retval 0: internal regulator is disabled, 1: internal regulator is enabled.
  7783. */
  7784. __STATIC_INLINE uint32_t LL_ADC_IsInternalRegulatorEnabled(ADC_TypeDef *ADCx)
  7785. {
  7786. 8003804: b480 push {r7}
  7787. 8003806: b083 sub sp, #12
  7788. 8003808: af00 add r7, sp, #0
  7789. 800380a: 6078 str r0, [r7, #4]
  7790. return ((READ_BIT(ADCx->CR, ADC_CR_ADVREGEN) == (ADC_CR_ADVREGEN)) ? 1UL : 0UL);
  7791. 800380c: 687b ldr r3, [r7, #4]
  7792. 800380e: 689b ldr r3, [r3, #8]
  7793. 8003810: f003 5380 and.w r3, r3, #268435456 @ 0x10000000
  7794. 8003814: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  7795. 8003818: d101 bne.n 800381e <LL_ADC_IsInternalRegulatorEnabled+0x1a>
  7796. 800381a: 2301 movs r3, #1
  7797. 800381c: e000 b.n 8003820 <LL_ADC_IsInternalRegulatorEnabled+0x1c>
  7798. 800381e: 2300 movs r3, #0
  7799. }
  7800. 8003820: 4618 mov r0, r3
  7801. 8003822: 370c adds r7, #12
  7802. 8003824: 46bd mov sp, r7
  7803. 8003826: f85d 7b04 ldr.w r7, [sp], #4
  7804. 800382a: 4770 bx lr
  7805. 0800382c <LL_ADC_Enable>:
  7806. * @rmtoll CR ADEN LL_ADC_Enable
  7807. * @param ADCx ADC instance
  7808. * @retval None
  7809. */
  7810. __STATIC_INLINE void LL_ADC_Enable(ADC_TypeDef *ADCx)
  7811. {
  7812. 800382c: b480 push {r7}
  7813. 800382e: b083 sub sp, #12
  7814. 8003830: af00 add r7, sp, #0
  7815. 8003832: 6078 str r0, [r7, #4]
  7816. /* Note: Write register with some additional bits forced to state reset */
  7817. /* instead of modifying only the selected bit for this function, */
  7818. /* to not interfere with bits with HW property "rs". */
  7819. MODIFY_REG(ADCx->CR,
  7820. 8003834: 687b ldr r3, [r7, #4]
  7821. 8003836: 689a ldr r2, [r3, #8]
  7822. 8003838: 4b05 ldr r3, [pc, #20] @ (8003850 <LL_ADC_Enable+0x24>)
  7823. 800383a: 4013 ands r3, r2
  7824. 800383c: f043 0201 orr.w r2, r3, #1
  7825. 8003840: 687b ldr r3, [r7, #4]
  7826. 8003842: 609a str r2, [r3, #8]
  7827. ADC_CR_BITS_PROPERTY_RS,
  7828. ADC_CR_ADEN);
  7829. }
  7830. 8003844: bf00 nop
  7831. 8003846: 370c adds r7, #12
  7832. 8003848: 46bd mov sp, r7
  7833. 800384a: f85d 7b04 ldr.w r7, [sp], #4
  7834. 800384e: 4770 bx lr
  7835. 8003850: 7fffffc0 .word 0x7fffffc0
  7836. 08003854 <LL_ADC_Disable>:
  7837. * @rmtoll CR ADDIS LL_ADC_Disable
  7838. * @param ADCx ADC instance
  7839. * @retval None
  7840. */
  7841. __STATIC_INLINE void LL_ADC_Disable(ADC_TypeDef *ADCx)
  7842. {
  7843. 8003854: b480 push {r7}
  7844. 8003856: b083 sub sp, #12
  7845. 8003858: af00 add r7, sp, #0
  7846. 800385a: 6078 str r0, [r7, #4]
  7847. /* Note: Write register with some additional bits forced to state reset */
  7848. /* instead of modifying only the selected bit for this function, */
  7849. /* to not interfere with bits with HW property "rs". */
  7850. MODIFY_REG(ADCx->CR,
  7851. 800385c: 687b ldr r3, [r7, #4]
  7852. 800385e: 689a ldr r2, [r3, #8]
  7853. 8003860: 4b05 ldr r3, [pc, #20] @ (8003878 <LL_ADC_Disable+0x24>)
  7854. 8003862: 4013 ands r3, r2
  7855. 8003864: f043 0202 orr.w r2, r3, #2
  7856. 8003868: 687b ldr r3, [r7, #4]
  7857. 800386a: 609a str r2, [r3, #8]
  7858. ADC_CR_BITS_PROPERTY_RS,
  7859. ADC_CR_ADDIS);
  7860. }
  7861. 800386c: bf00 nop
  7862. 800386e: 370c adds r7, #12
  7863. 8003870: 46bd mov sp, r7
  7864. 8003872: f85d 7b04 ldr.w r7, [sp], #4
  7865. 8003876: 4770 bx lr
  7866. 8003878: 7fffffc0 .word 0x7fffffc0
  7867. 0800387c <LL_ADC_IsEnabled>:
  7868. * @rmtoll CR ADEN LL_ADC_IsEnabled
  7869. * @param ADCx ADC instance
  7870. * @retval 0: ADC is disabled, 1: ADC is enabled.
  7871. */
  7872. __STATIC_INLINE uint32_t LL_ADC_IsEnabled(ADC_TypeDef *ADCx)
  7873. {
  7874. 800387c: b480 push {r7}
  7875. 800387e: b083 sub sp, #12
  7876. 8003880: af00 add r7, sp, #0
  7877. 8003882: 6078 str r0, [r7, #4]
  7878. return ((READ_BIT(ADCx->CR, ADC_CR_ADEN) == (ADC_CR_ADEN)) ? 1UL : 0UL);
  7879. 8003884: 687b ldr r3, [r7, #4]
  7880. 8003886: 689b ldr r3, [r3, #8]
  7881. 8003888: f003 0301 and.w r3, r3, #1
  7882. 800388c: 2b01 cmp r3, #1
  7883. 800388e: d101 bne.n 8003894 <LL_ADC_IsEnabled+0x18>
  7884. 8003890: 2301 movs r3, #1
  7885. 8003892: e000 b.n 8003896 <LL_ADC_IsEnabled+0x1a>
  7886. 8003894: 2300 movs r3, #0
  7887. }
  7888. 8003896: 4618 mov r0, r3
  7889. 8003898: 370c adds r7, #12
  7890. 800389a: 46bd mov sp, r7
  7891. 800389c: f85d 7b04 ldr.w r7, [sp], #4
  7892. 80038a0: 4770 bx lr
  7893. 080038a2 <LL_ADC_IsDisableOngoing>:
  7894. * @rmtoll CR ADDIS LL_ADC_IsDisableOngoing
  7895. * @param ADCx ADC instance
  7896. * @retval 0: no ADC disable command on going.
  7897. */
  7898. __STATIC_INLINE uint32_t LL_ADC_IsDisableOngoing(ADC_TypeDef *ADCx)
  7899. {
  7900. 80038a2: b480 push {r7}
  7901. 80038a4: b083 sub sp, #12
  7902. 80038a6: af00 add r7, sp, #0
  7903. 80038a8: 6078 str r0, [r7, #4]
  7904. return ((READ_BIT(ADCx->CR, ADC_CR_ADDIS) == (ADC_CR_ADDIS)) ? 1UL : 0UL);
  7905. 80038aa: 687b ldr r3, [r7, #4]
  7906. 80038ac: 689b ldr r3, [r3, #8]
  7907. 80038ae: f003 0302 and.w r3, r3, #2
  7908. 80038b2: 2b02 cmp r3, #2
  7909. 80038b4: d101 bne.n 80038ba <LL_ADC_IsDisableOngoing+0x18>
  7910. 80038b6: 2301 movs r3, #1
  7911. 80038b8: e000 b.n 80038bc <LL_ADC_IsDisableOngoing+0x1a>
  7912. 80038ba: 2300 movs r3, #0
  7913. }
  7914. 80038bc: 4618 mov r0, r3
  7915. 80038be: 370c adds r7, #12
  7916. 80038c0: 46bd mov sp, r7
  7917. 80038c2: f85d 7b04 ldr.w r7, [sp], #4
  7918. 80038c6: 4770 bx lr
  7919. 080038c8 <LL_ADC_REG_StartConversion>:
  7920. * @rmtoll CR ADSTART LL_ADC_REG_StartConversion
  7921. * @param ADCx ADC instance
  7922. * @retval None
  7923. */
  7924. __STATIC_INLINE void LL_ADC_REG_StartConversion(ADC_TypeDef *ADCx)
  7925. {
  7926. 80038c8: b480 push {r7}
  7927. 80038ca: b083 sub sp, #12
  7928. 80038cc: af00 add r7, sp, #0
  7929. 80038ce: 6078 str r0, [r7, #4]
  7930. /* Note: Write register with some additional bits forced to state reset */
  7931. /* instead of modifying only the selected bit for this function, */
  7932. /* to not interfere with bits with HW property "rs". */
  7933. MODIFY_REG(ADCx->CR,
  7934. 80038d0: 687b ldr r3, [r7, #4]
  7935. 80038d2: 689a ldr r2, [r3, #8]
  7936. 80038d4: 4b05 ldr r3, [pc, #20] @ (80038ec <LL_ADC_REG_StartConversion+0x24>)
  7937. 80038d6: 4013 ands r3, r2
  7938. 80038d8: f043 0204 orr.w r2, r3, #4
  7939. 80038dc: 687b ldr r3, [r7, #4]
  7940. 80038de: 609a str r2, [r3, #8]
  7941. ADC_CR_BITS_PROPERTY_RS,
  7942. ADC_CR_ADSTART);
  7943. }
  7944. 80038e0: bf00 nop
  7945. 80038e2: 370c adds r7, #12
  7946. 80038e4: 46bd mov sp, r7
  7947. 80038e6: f85d 7b04 ldr.w r7, [sp], #4
  7948. 80038ea: 4770 bx lr
  7949. 80038ec: 7fffffc0 .word 0x7fffffc0
  7950. 080038f0 <LL_ADC_REG_IsConversionOngoing>:
  7951. * @rmtoll CR ADSTART LL_ADC_REG_IsConversionOngoing
  7952. * @param ADCx ADC instance
  7953. * @retval 0: no conversion is on going on ADC group regular.
  7954. */
  7955. __STATIC_INLINE uint32_t LL_ADC_REG_IsConversionOngoing(ADC_TypeDef *ADCx)
  7956. {
  7957. 80038f0: b480 push {r7}
  7958. 80038f2: b083 sub sp, #12
  7959. 80038f4: af00 add r7, sp, #0
  7960. 80038f6: 6078 str r0, [r7, #4]
  7961. return ((READ_BIT(ADCx->CR, ADC_CR_ADSTART) == (ADC_CR_ADSTART)) ? 1UL : 0UL);
  7962. 80038f8: 687b ldr r3, [r7, #4]
  7963. 80038fa: 689b ldr r3, [r3, #8]
  7964. 80038fc: f003 0304 and.w r3, r3, #4
  7965. 8003900: 2b04 cmp r3, #4
  7966. 8003902: d101 bne.n 8003908 <LL_ADC_REG_IsConversionOngoing+0x18>
  7967. 8003904: 2301 movs r3, #1
  7968. 8003906: e000 b.n 800390a <LL_ADC_REG_IsConversionOngoing+0x1a>
  7969. 8003908: 2300 movs r3, #0
  7970. }
  7971. 800390a: 4618 mov r0, r3
  7972. 800390c: 370c adds r7, #12
  7973. 800390e: 46bd mov sp, r7
  7974. 8003910: f85d 7b04 ldr.w r7, [sp], #4
  7975. 8003914: 4770 bx lr
  7976. 08003916 <LL_ADC_INJ_IsConversionOngoing>:
  7977. * @rmtoll CR JADSTART LL_ADC_INJ_IsConversionOngoing
  7978. * @param ADCx ADC instance
  7979. * @retval 0: no conversion is on going on ADC group injected.
  7980. */
  7981. __STATIC_INLINE uint32_t LL_ADC_INJ_IsConversionOngoing(ADC_TypeDef *ADCx)
  7982. {
  7983. 8003916: b480 push {r7}
  7984. 8003918: b083 sub sp, #12
  7985. 800391a: af00 add r7, sp, #0
  7986. 800391c: 6078 str r0, [r7, #4]
  7987. return ((READ_BIT(ADCx->CR, ADC_CR_JADSTART) == (ADC_CR_JADSTART)) ? 1UL : 0UL);
  7988. 800391e: 687b ldr r3, [r7, #4]
  7989. 8003920: 689b ldr r3, [r3, #8]
  7990. 8003922: f003 0308 and.w r3, r3, #8
  7991. 8003926: 2b08 cmp r3, #8
  7992. 8003928: d101 bne.n 800392e <LL_ADC_INJ_IsConversionOngoing+0x18>
  7993. 800392a: 2301 movs r3, #1
  7994. 800392c: e000 b.n 8003930 <LL_ADC_INJ_IsConversionOngoing+0x1a>
  7995. 800392e: 2300 movs r3, #0
  7996. }
  7997. 8003930: 4618 mov r0, r3
  7998. 8003932: 370c adds r7, #12
  7999. 8003934: 46bd mov sp, r7
  8000. 8003936: f85d 7b04 ldr.w r7, [sp], #4
  8001. 800393a: 4770 bx lr
  8002. 0800393c <HAL_ADC_Init>:
  8003. * without disabling the other ADCs.
  8004. * @param hadc ADC handle
  8005. * @retval HAL status
  8006. */
  8007. HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef *hadc)
  8008. {
  8009. 800393c: b590 push {r4, r7, lr}
  8010. 800393e: b089 sub sp, #36 @ 0x24
  8011. 8003940: af00 add r7, sp, #0
  8012. 8003942: 6078 str r0, [r7, #4]
  8013. HAL_StatusTypeDef tmp_hal_status = HAL_OK;
  8014. 8003944: 2300 movs r3, #0
  8015. 8003946: 77fb strb r3, [r7, #31]
  8016. uint32_t tmpCFGR;
  8017. uint32_t tmp_adc_reg_is_conversion_on_going;
  8018. __IO uint32_t wait_loop_index = 0UL;
  8019. 8003948: 2300 movs r3, #0
  8020. 800394a: 60bb str r3, [r7, #8]
  8021. uint32_t tmp_adc_is_conversion_on_going_regular;
  8022. uint32_t tmp_adc_is_conversion_on_going_injected;
  8023. /* Check ADC handle */
  8024. if (hadc == NULL)
  8025. 800394c: 687b ldr r3, [r7, #4]
  8026. 800394e: 2b00 cmp r3, #0
  8027. 8003950: d101 bne.n 8003956 <HAL_ADC_Init+0x1a>
  8028. {
  8029. return HAL_ERROR;
  8030. 8003952: 2301 movs r3, #1
  8031. 8003954: e18f b.n 8003c76 <HAL_ADC_Init+0x33a>
  8032. assert_param(IS_ADC_EOC_SELECTION(hadc->Init.EOCSelection));
  8033. assert_param(IS_ADC_OVERRUN(hadc->Init.Overrun));
  8034. assert_param(IS_FUNCTIONAL_STATE(hadc->Init.LowPowerAutoWait));
  8035. assert_param(IS_FUNCTIONAL_STATE(hadc->Init.OversamplingMode));
  8036. if (hadc->Init.ScanConvMode != ADC_SCAN_DISABLE)
  8037. 8003956: 687b ldr r3, [r7, #4]
  8038. 8003958: 68db ldr r3, [r3, #12]
  8039. 800395a: 2b00 cmp r3, #0
  8040. /* DISCEN and CONT bits cannot be set at the same time */
  8041. assert_param(!((hadc->Init.DiscontinuousConvMode == ENABLE) && (hadc->Init.ContinuousConvMode == ENABLE)));
  8042. /* Actions performed only if ADC is coming from state reset: */
  8043. /* - Initialization of ADC MSP */
  8044. if (hadc->State == HAL_ADC_STATE_RESET)
  8045. 800395c: 687b ldr r3, [r7, #4]
  8046. 800395e: 6d5b ldr r3, [r3, #84] @ 0x54
  8047. 8003960: 2b00 cmp r3, #0
  8048. 8003962: d109 bne.n 8003978 <HAL_ADC_Init+0x3c>
  8049. /* Init the low level hardware */
  8050. hadc->MspInitCallback(hadc);
  8051. #else
  8052. /* Init the low level hardware */
  8053. HAL_ADC_MspInit(hadc);
  8054. 8003964: 6878 ldr r0, [r7, #4]
  8055. 8003966: f7fe fac1 bl 8001eec <HAL_ADC_MspInit>
  8056. #endif /* USE_HAL_ADC_REGISTER_CALLBACKS */
  8057. /* Set ADC error code to none */
  8058. ADC_CLEAR_ERRORCODE(hadc);
  8059. 800396a: 687b ldr r3, [r7, #4]
  8060. 800396c: 2200 movs r2, #0
  8061. 800396e: 659a str r2, [r3, #88] @ 0x58
  8062. /* Initialize Lock */
  8063. hadc->Lock = HAL_UNLOCKED;
  8064. 8003970: 687b ldr r3, [r7, #4]
  8065. 8003972: 2200 movs r2, #0
  8066. 8003974: f883 2050 strb.w r2, [r3, #80] @ 0x50
  8067. }
  8068. /* - Exit from deep-power-down mode and ADC voltage regulator enable */
  8069. if (LL_ADC_IsDeepPowerDownEnabled(hadc->Instance) != 0UL)
  8070. 8003978: 687b ldr r3, [r7, #4]
  8071. 800397a: 681b ldr r3, [r3, #0]
  8072. 800397c: 4618 mov r0, r3
  8073. 800397e: f7ff ff19 bl 80037b4 <LL_ADC_IsDeepPowerDownEnabled>
  8074. 8003982: 4603 mov r3, r0
  8075. 8003984: 2b00 cmp r3, #0
  8076. 8003986: d004 beq.n 8003992 <HAL_ADC_Init+0x56>
  8077. {
  8078. /* Disable ADC deep power down mode */
  8079. LL_ADC_DisableDeepPowerDown(hadc->Instance);
  8080. 8003988: 687b ldr r3, [r7, #4]
  8081. 800398a: 681b ldr r3, [r3, #0]
  8082. 800398c: 4618 mov r0, r3
  8083. 800398e: f7ff feff bl 8003790 <LL_ADC_DisableDeepPowerDown>
  8084. /* System was in deep power down mode, calibration must
  8085. be relaunched or a previously saved calibration factor
  8086. re-applied once the ADC voltage regulator is enabled */
  8087. }
  8088. if (LL_ADC_IsInternalRegulatorEnabled(hadc->Instance) == 0UL)
  8089. 8003992: 687b ldr r3, [r7, #4]
  8090. 8003994: 681b ldr r3, [r3, #0]
  8091. 8003996: 4618 mov r0, r3
  8092. 8003998: f7ff ff34 bl 8003804 <LL_ADC_IsInternalRegulatorEnabled>
  8093. 800399c: 4603 mov r3, r0
  8094. 800399e: 2b00 cmp r3, #0
  8095. 80039a0: d114 bne.n 80039cc <HAL_ADC_Init+0x90>
  8096. {
  8097. /* Enable ADC internal voltage regulator */
  8098. LL_ADC_EnableInternalRegulator(hadc->Instance);
  8099. 80039a2: 687b ldr r3, [r7, #4]
  8100. 80039a4: 681b ldr r3, [r3, #0]
  8101. 80039a6: 4618 mov r0, r3
  8102. 80039a8: f7ff ff18 bl 80037dc <LL_ADC_EnableInternalRegulator>
  8103. /* Note: Variable divided by 2 to compensate partially */
  8104. /* CPU processing cycles, scaling in us split to not */
  8105. /* exceed 32 bits register capacity and handle low frequency. */
  8106. wait_loop_index = ((LL_ADC_DELAY_INTERNAL_REGUL_STAB_US / 10UL) * ((SystemCoreClock / (100000UL * 2UL)) + 1UL));
  8107. 80039ac: 4b87 ldr r3, [pc, #540] @ (8003bcc <HAL_ADC_Init+0x290>)
  8108. 80039ae: 681b ldr r3, [r3, #0]
  8109. 80039b0: 099b lsrs r3, r3, #6
  8110. 80039b2: 4a87 ldr r2, [pc, #540] @ (8003bd0 <HAL_ADC_Init+0x294>)
  8111. 80039b4: fba2 2303 umull r2, r3, r2, r3
  8112. 80039b8: 099b lsrs r3, r3, #6
  8113. 80039ba: 3301 adds r3, #1
  8114. 80039bc: 60bb str r3, [r7, #8]
  8115. while (wait_loop_index != 0UL)
  8116. 80039be: e002 b.n 80039c6 <HAL_ADC_Init+0x8a>
  8117. {
  8118. wait_loop_index--;
  8119. 80039c0: 68bb ldr r3, [r7, #8]
  8120. 80039c2: 3b01 subs r3, #1
  8121. 80039c4: 60bb str r3, [r7, #8]
  8122. while (wait_loop_index != 0UL)
  8123. 80039c6: 68bb ldr r3, [r7, #8]
  8124. 80039c8: 2b00 cmp r3, #0
  8125. 80039ca: d1f9 bne.n 80039c0 <HAL_ADC_Init+0x84>
  8126. }
  8127. /* Verification that ADC voltage regulator is correctly enabled, whether */
  8128. /* or not ADC is coming from state reset (if any potential problem of */
  8129. /* clocking, voltage regulator would not be enabled). */
  8130. if (LL_ADC_IsInternalRegulatorEnabled(hadc->Instance) == 0UL)
  8131. 80039cc: 687b ldr r3, [r7, #4]
  8132. 80039ce: 681b ldr r3, [r3, #0]
  8133. 80039d0: 4618 mov r0, r3
  8134. 80039d2: f7ff ff17 bl 8003804 <LL_ADC_IsInternalRegulatorEnabled>
  8135. 80039d6: 4603 mov r3, r0
  8136. 80039d8: 2b00 cmp r3, #0
  8137. 80039da: d10d bne.n 80039f8 <HAL_ADC_Init+0xbc>
  8138. {
  8139. /* Update ADC state machine to error */
  8140. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
  8141. 80039dc: 687b ldr r3, [r7, #4]
  8142. 80039de: 6d5b ldr r3, [r3, #84] @ 0x54
  8143. 80039e0: f043 0210 orr.w r2, r3, #16
  8144. 80039e4: 687b ldr r3, [r7, #4]
  8145. 80039e6: 655a str r2, [r3, #84] @ 0x54
  8146. /* Set ADC error code to ADC peripheral internal error */
  8147. SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);
  8148. 80039e8: 687b ldr r3, [r7, #4]
  8149. 80039ea: 6d9b ldr r3, [r3, #88] @ 0x58
  8150. 80039ec: f043 0201 orr.w r2, r3, #1
  8151. 80039f0: 687b ldr r3, [r7, #4]
  8152. 80039f2: 659a str r2, [r3, #88] @ 0x58
  8153. tmp_hal_status = HAL_ERROR;
  8154. 80039f4: 2301 movs r3, #1
  8155. 80039f6: 77fb strb r3, [r7, #31]
  8156. /* Configuration of ADC parameters if previous preliminary actions are */
  8157. /* correctly completed and if there is no conversion on going on regular */
  8158. /* group (ADC may already be enabled at this point if HAL_ADC_Init() is */
  8159. /* called to update a parameter on the fly). */
  8160. tmp_adc_reg_is_conversion_on_going = LL_ADC_REG_IsConversionOngoing(hadc->Instance);
  8161. 80039f8: 687b ldr r3, [r7, #4]
  8162. 80039fa: 681b ldr r3, [r3, #0]
  8163. 80039fc: 4618 mov r0, r3
  8164. 80039fe: f7ff ff77 bl 80038f0 <LL_ADC_REG_IsConversionOngoing>
  8165. 8003a02: 6178 str r0, [r7, #20]
  8166. if (((hadc->State & HAL_ADC_STATE_ERROR_INTERNAL) == 0UL)
  8167. 8003a04: 687b ldr r3, [r7, #4]
  8168. 8003a06: 6d5b ldr r3, [r3, #84] @ 0x54
  8169. 8003a08: f003 0310 and.w r3, r3, #16
  8170. 8003a0c: 2b00 cmp r3, #0
  8171. 8003a0e: f040 8129 bne.w 8003c64 <HAL_ADC_Init+0x328>
  8172. && (tmp_adc_reg_is_conversion_on_going == 0UL)
  8173. 8003a12: 697b ldr r3, [r7, #20]
  8174. 8003a14: 2b00 cmp r3, #0
  8175. 8003a16: f040 8125 bne.w 8003c64 <HAL_ADC_Init+0x328>
  8176. )
  8177. {
  8178. /* Set ADC state */
  8179. ADC_STATE_CLR_SET(hadc->State,
  8180. 8003a1a: 687b ldr r3, [r7, #4]
  8181. 8003a1c: 6d5b ldr r3, [r3, #84] @ 0x54
  8182. 8003a1e: f423 7381 bic.w r3, r3, #258 @ 0x102
  8183. 8003a22: f043 0202 orr.w r2, r3, #2
  8184. 8003a26: 687b ldr r3, [r7, #4]
  8185. 8003a28: 655a str r2, [r3, #84] @ 0x54
  8186. /* Configuration of common ADC parameters */
  8187. /* Parameters update conditioned to ADC state: */
  8188. /* Parameters that can be updated only when ADC is disabled: */
  8189. /* - clock configuration */
  8190. if (LL_ADC_IsEnabled(hadc->Instance) == 0UL)
  8191. 8003a2a: 687b ldr r3, [r7, #4]
  8192. 8003a2c: 681b ldr r3, [r3, #0]
  8193. 8003a2e: 4618 mov r0, r3
  8194. 8003a30: f7ff ff24 bl 800387c <LL_ADC_IsEnabled>
  8195. 8003a34: 4603 mov r3, r0
  8196. 8003a36: 2b00 cmp r3, #0
  8197. 8003a38: d136 bne.n 8003aa8 <HAL_ADC_Init+0x16c>
  8198. {
  8199. if (__LL_ADC_IS_ENABLED_ALL_COMMON_INSTANCE(__LL_ADC_COMMON_INSTANCE(hadc->Instance)) == 0UL)
  8200. 8003a3a: 687b ldr r3, [r7, #4]
  8201. 8003a3c: 681b ldr r3, [r3, #0]
  8202. 8003a3e: 4a65 ldr r2, [pc, #404] @ (8003bd4 <HAL_ADC_Init+0x298>)
  8203. 8003a40: 4293 cmp r3, r2
  8204. 8003a42: d004 beq.n 8003a4e <HAL_ADC_Init+0x112>
  8205. 8003a44: 687b ldr r3, [r7, #4]
  8206. 8003a46: 681b ldr r3, [r3, #0]
  8207. 8003a48: 4a63 ldr r2, [pc, #396] @ (8003bd8 <HAL_ADC_Init+0x29c>)
  8208. 8003a4a: 4293 cmp r3, r2
  8209. 8003a4c: d10e bne.n 8003a6c <HAL_ADC_Init+0x130>
  8210. 8003a4e: 4861 ldr r0, [pc, #388] @ (8003bd4 <HAL_ADC_Init+0x298>)
  8211. 8003a50: f7ff ff14 bl 800387c <LL_ADC_IsEnabled>
  8212. 8003a54: 4604 mov r4, r0
  8213. 8003a56: 4860 ldr r0, [pc, #384] @ (8003bd8 <HAL_ADC_Init+0x29c>)
  8214. 8003a58: f7ff ff10 bl 800387c <LL_ADC_IsEnabled>
  8215. 8003a5c: 4603 mov r3, r0
  8216. 8003a5e: 4323 orrs r3, r4
  8217. 8003a60: 2b00 cmp r3, #0
  8218. 8003a62: bf0c ite eq
  8219. 8003a64: 2301 moveq r3, #1
  8220. 8003a66: 2300 movne r3, #0
  8221. 8003a68: b2db uxtb r3, r3
  8222. 8003a6a: e008 b.n 8003a7e <HAL_ADC_Init+0x142>
  8223. 8003a6c: 485b ldr r0, [pc, #364] @ (8003bdc <HAL_ADC_Init+0x2a0>)
  8224. 8003a6e: f7ff ff05 bl 800387c <LL_ADC_IsEnabled>
  8225. 8003a72: 4603 mov r3, r0
  8226. 8003a74: 2b00 cmp r3, #0
  8227. 8003a76: bf0c ite eq
  8228. 8003a78: 2301 moveq r3, #1
  8229. 8003a7a: 2300 movne r3, #0
  8230. 8003a7c: b2db uxtb r3, r3
  8231. 8003a7e: 2b00 cmp r3, #0
  8232. 8003a80: d012 beq.n 8003aa8 <HAL_ADC_Init+0x16c>
  8233. /* parameters: MDMA, DMACFG, DELAY, DUAL (set by API */
  8234. /* HAL_ADCEx_MultiModeConfigChannel() ) */
  8235. /* - internal measurement paths: Vbat, temperature sensor, Vref */
  8236. /* (set into HAL_ADC_ConfigChannel() or */
  8237. /* HAL_ADCEx_InjectedConfigChannel() ) */
  8238. LL_ADC_SetCommonClock(__LL_ADC_COMMON_INSTANCE(hadc->Instance), hadc->Init.ClockPrescaler);
  8239. 8003a82: 687b ldr r3, [r7, #4]
  8240. 8003a84: 681b ldr r3, [r3, #0]
  8241. 8003a86: 4a53 ldr r2, [pc, #332] @ (8003bd4 <HAL_ADC_Init+0x298>)
  8242. 8003a88: 4293 cmp r3, r2
  8243. 8003a8a: d004 beq.n 8003a96 <HAL_ADC_Init+0x15a>
  8244. 8003a8c: 687b ldr r3, [r7, #4]
  8245. 8003a8e: 681b ldr r3, [r3, #0]
  8246. 8003a90: 4a51 ldr r2, [pc, #324] @ (8003bd8 <HAL_ADC_Init+0x29c>)
  8247. 8003a92: 4293 cmp r3, r2
  8248. 8003a94: d101 bne.n 8003a9a <HAL_ADC_Init+0x15e>
  8249. 8003a96: 4a52 ldr r2, [pc, #328] @ (8003be0 <HAL_ADC_Init+0x2a4>)
  8250. 8003a98: e000 b.n 8003a9c <HAL_ADC_Init+0x160>
  8251. 8003a9a: 4a52 ldr r2, [pc, #328] @ (8003be4 <HAL_ADC_Init+0x2a8>)
  8252. 8003a9c: 687b ldr r3, [r7, #4]
  8253. 8003a9e: 685b ldr r3, [r3, #4]
  8254. 8003aa0: 4619 mov r1, r3
  8255. 8003aa2: 4610 mov r0, r2
  8256. 8003aa4: f7ff fd3c bl 8003520 <LL_ADC_SetCommonClock>
  8257. ADC_CFGR_REG_DISCONTINUOUS((uint32_t)hadc->Init.DiscontinuousConvMode));
  8258. }
  8259. #else
  8260. if ((HAL_GetREVID() > REV_ID_Y) && (ADC_RESOLUTION_8B == hadc->Init.Resolution))
  8261. 8003aa8: f7ff fd18 bl 80034dc <HAL_GetREVID>
  8262. 8003aac: 4603 mov r3, r0
  8263. 8003aae: f241 0203 movw r2, #4099 @ 0x1003
  8264. 8003ab2: 4293 cmp r3, r2
  8265. 8003ab4: d914 bls.n 8003ae0 <HAL_ADC_Init+0x1a4>
  8266. 8003ab6: 687b ldr r3, [r7, #4]
  8267. 8003ab8: 689b ldr r3, [r3, #8]
  8268. 8003aba: 2b10 cmp r3, #16
  8269. 8003abc: d110 bne.n 8003ae0 <HAL_ADC_Init+0x1a4>
  8270. {
  8271. /* for STM32H7 silicon rev.B and above , ADC_CFGR_RES value for 8bits resolution is : b111 */
  8272. tmpCFGR = (ADC_CFGR_CONTINUOUS((uint32_t)hadc->Init.ContinuousConvMode) |
  8273. 8003abe: 687b ldr r3, [r7, #4]
  8274. 8003ac0: 7d5b ldrb r3, [r3, #21]
  8275. 8003ac2: 035a lsls r2, r3, #13
  8276. hadc->Init.Overrun |
  8277. 8003ac4: 687b ldr r3, [r7, #4]
  8278. 8003ac6: 6b1b ldr r3, [r3, #48] @ 0x30
  8279. tmpCFGR = (ADC_CFGR_CONTINUOUS((uint32_t)hadc->Init.ContinuousConvMode) |
  8280. 8003ac8: 431a orrs r2, r3
  8281. hadc->Init.Resolution | (ADC_CFGR_RES_1 | ADC_CFGR_RES_0) |
  8282. 8003aca: 687b ldr r3, [r7, #4]
  8283. 8003acc: 689b ldr r3, [r3, #8]
  8284. hadc->Init.Overrun |
  8285. 8003ace: 431a orrs r2, r3
  8286. ADC_CFGR_REG_DISCONTINUOUS((uint32_t)hadc->Init.DiscontinuousConvMode));
  8287. 8003ad0: 687b ldr r3, [r7, #4]
  8288. 8003ad2: 7f1b ldrb r3, [r3, #28]
  8289. 8003ad4: 041b lsls r3, r3, #16
  8290. hadc->Init.Resolution | (ADC_CFGR_RES_1 | ADC_CFGR_RES_0) |
  8291. 8003ad6: 4313 orrs r3, r2
  8292. tmpCFGR = (ADC_CFGR_CONTINUOUS((uint32_t)hadc->Init.ContinuousConvMode) |
  8293. 8003ad8: f043 030c orr.w r3, r3, #12
  8294. 8003adc: 61bb str r3, [r7, #24]
  8295. 8003ade: e00d b.n 8003afc <HAL_ADC_Init+0x1c0>
  8296. }
  8297. else
  8298. {
  8299. tmpCFGR = (ADC_CFGR_CONTINUOUS((uint32_t)hadc->Init.ContinuousConvMode) |
  8300. 8003ae0: 687b ldr r3, [r7, #4]
  8301. 8003ae2: 7d5b ldrb r3, [r3, #21]
  8302. 8003ae4: 035a lsls r2, r3, #13
  8303. hadc->Init.Overrun |
  8304. 8003ae6: 687b ldr r3, [r7, #4]
  8305. 8003ae8: 6b1b ldr r3, [r3, #48] @ 0x30
  8306. tmpCFGR = (ADC_CFGR_CONTINUOUS((uint32_t)hadc->Init.ContinuousConvMode) |
  8307. 8003aea: 431a orrs r2, r3
  8308. hadc->Init.Resolution |
  8309. 8003aec: 687b ldr r3, [r7, #4]
  8310. 8003aee: 689b ldr r3, [r3, #8]
  8311. hadc->Init.Overrun |
  8312. 8003af0: 431a orrs r2, r3
  8313. ADC_CFGR_REG_DISCONTINUOUS((uint32_t)hadc->Init.DiscontinuousConvMode));
  8314. 8003af2: 687b ldr r3, [r7, #4]
  8315. 8003af4: 7f1b ldrb r3, [r3, #28]
  8316. 8003af6: 041b lsls r3, r3, #16
  8317. tmpCFGR = (ADC_CFGR_CONTINUOUS((uint32_t)hadc->Init.ContinuousConvMode) |
  8318. 8003af8: 4313 orrs r3, r2
  8319. 8003afa: 61bb str r3, [r7, #24]
  8320. }
  8321. #endif /* ADC_VER_V5_3 */
  8322. if (hadc->Init.DiscontinuousConvMode == ENABLE)
  8323. 8003afc: 687b ldr r3, [r7, #4]
  8324. 8003afe: 7f1b ldrb r3, [r3, #28]
  8325. 8003b00: 2b01 cmp r3, #1
  8326. 8003b02: d106 bne.n 8003b12 <HAL_ADC_Init+0x1d6>
  8327. {
  8328. tmpCFGR |= ADC_CFGR_DISCONTINUOUS_NUM(hadc->Init.NbrOfDiscConversion);
  8329. 8003b04: 687b ldr r3, [r7, #4]
  8330. 8003b06: 6a1b ldr r3, [r3, #32]
  8331. 8003b08: 3b01 subs r3, #1
  8332. 8003b0a: 045b lsls r3, r3, #17
  8333. 8003b0c: 69ba ldr r2, [r7, #24]
  8334. 8003b0e: 4313 orrs r3, r2
  8335. 8003b10: 61bb str r3, [r7, #24]
  8336. /* Enable external trigger if trigger selection is different of software */
  8337. /* start. */
  8338. /* Note: This configuration keeps the hardware feature of parameter */
  8339. /* ExternalTrigConvEdge "trigger edge none" equivalent to */
  8340. /* software start. */
  8341. if (hadc->Init.ExternalTrigConv != ADC_SOFTWARE_START)
  8342. 8003b12: 687b ldr r3, [r7, #4]
  8343. 8003b14: 6a5b ldr r3, [r3, #36] @ 0x24
  8344. 8003b16: 2b00 cmp r3, #0
  8345. 8003b18: d009 beq.n 8003b2e <HAL_ADC_Init+0x1f2>
  8346. {
  8347. tmpCFGR |= ((hadc->Init.ExternalTrigConv & ADC_CFGR_EXTSEL)
  8348. 8003b1a: 687b ldr r3, [r7, #4]
  8349. 8003b1c: 6a5b ldr r3, [r3, #36] @ 0x24
  8350. 8003b1e: f403 7278 and.w r2, r3, #992 @ 0x3e0
  8351. | hadc->Init.ExternalTrigConvEdge
  8352. 8003b22: 687b ldr r3, [r7, #4]
  8353. 8003b24: 6a9b ldr r3, [r3, #40] @ 0x28
  8354. 8003b26: 4313 orrs r3, r2
  8355. tmpCFGR |= ((hadc->Init.ExternalTrigConv & ADC_CFGR_EXTSEL)
  8356. 8003b28: 69ba ldr r2, [r7, #24]
  8357. 8003b2a: 4313 orrs r3, r2
  8358. 8003b2c: 61bb str r3, [r7, #24]
  8359. /* Update Configuration Register CFGR */
  8360. MODIFY_REG(hadc->Instance->CFGR, ADC_CFGR_FIELDS_1, tmpCFGR);
  8361. }
  8362. #else
  8363. /* Update Configuration Register CFGR */
  8364. MODIFY_REG(hadc->Instance->CFGR, ADC_CFGR_FIELDS_1, tmpCFGR);
  8365. 8003b2e: 687b ldr r3, [r7, #4]
  8366. 8003b30: 681b ldr r3, [r3, #0]
  8367. 8003b32: 68da ldr r2, [r3, #12]
  8368. 8003b34: 4b2c ldr r3, [pc, #176] @ (8003be8 <HAL_ADC_Init+0x2ac>)
  8369. 8003b36: 4013 ands r3, r2
  8370. 8003b38: 687a ldr r2, [r7, #4]
  8371. 8003b3a: 6812 ldr r2, [r2, #0]
  8372. 8003b3c: 69b9 ldr r1, [r7, #24]
  8373. 8003b3e: 430b orrs r3, r1
  8374. 8003b40: 60d3 str r3, [r2, #12]
  8375. /* Parameters that can be updated when ADC is disabled or enabled without */
  8376. /* conversion on going on regular and injected groups: */
  8377. /* - Conversion data management Init.ConversionDataManagement */
  8378. /* - LowPowerAutoWait feature Init.LowPowerAutoWait */
  8379. /* - Oversampling parameters Init.Oversampling */
  8380. tmp_adc_is_conversion_on_going_regular = LL_ADC_REG_IsConversionOngoing(hadc->Instance);
  8381. 8003b42: 687b ldr r3, [r7, #4]
  8382. 8003b44: 681b ldr r3, [r3, #0]
  8383. 8003b46: 4618 mov r0, r3
  8384. 8003b48: f7ff fed2 bl 80038f0 <LL_ADC_REG_IsConversionOngoing>
  8385. 8003b4c: 6138 str r0, [r7, #16]
  8386. tmp_adc_is_conversion_on_going_injected = LL_ADC_INJ_IsConversionOngoing(hadc->Instance);
  8387. 8003b4e: 687b ldr r3, [r7, #4]
  8388. 8003b50: 681b ldr r3, [r3, #0]
  8389. 8003b52: 4618 mov r0, r3
  8390. 8003b54: f7ff fedf bl 8003916 <LL_ADC_INJ_IsConversionOngoing>
  8391. 8003b58: 60f8 str r0, [r7, #12]
  8392. if ((tmp_adc_is_conversion_on_going_regular == 0UL)
  8393. 8003b5a: 693b ldr r3, [r7, #16]
  8394. 8003b5c: 2b00 cmp r3, #0
  8395. 8003b5e: d15f bne.n 8003c20 <HAL_ADC_Init+0x2e4>
  8396. && (tmp_adc_is_conversion_on_going_injected == 0UL)
  8397. 8003b60: 68fb ldr r3, [r7, #12]
  8398. 8003b62: 2b00 cmp r3, #0
  8399. 8003b64: d15c bne.n 8003c20 <HAL_ADC_Init+0x2e4>
  8400. ADC_CFGR_AUTOWAIT((uint32_t)hadc->Init.LowPowerAutoWait) |
  8401. ADC_CFGR_DMACONTREQ((uint32_t)hadc->Init.ConversionDataManagement));
  8402. }
  8403. #else
  8404. tmpCFGR = (
  8405. ADC_CFGR_AUTOWAIT((uint32_t)hadc->Init.LowPowerAutoWait) |
  8406. 8003b66: 687b ldr r3, [r7, #4]
  8407. 8003b68: 7d1b ldrb r3, [r3, #20]
  8408. 8003b6a: 039a lsls r2, r3, #14
  8409. ADC_CFGR_DMACONTREQ((uint32_t)hadc->Init.ConversionDataManagement));
  8410. 8003b6c: 687b ldr r3, [r7, #4]
  8411. 8003b6e: 6adb ldr r3, [r3, #44] @ 0x2c
  8412. tmpCFGR = (
  8413. 8003b70: 4313 orrs r3, r2
  8414. 8003b72: 61bb str r3, [r7, #24]
  8415. #endif
  8416. MODIFY_REG(hadc->Instance->CFGR, ADC_CFGR_FIELDS_2, tmpCFGR);
  8417. 8003b74: 687b ldr r3, [r7, #4]
  8418. 8003b76: 681b ldr r3, [r3, #0]
  8419. 8003b78: 68da ldr r2, [r3, #12]
  8420. 8003b7a: 4b1c ldr r3, [pc, #112] @ (8003bec <HAL_ADC_Init+0x2b0>)
  8421. 8003b7c: 4013 ands r3, r2
  8422. 8003b7e: 687a ldr r2, [r7, #4]
  8423. 8003b80: 6812 ldr r2, [r2, #0]
  8424. 8003b82: 69b9 ldr r1, [r7, #24]
  8425. 8003b84: 430b orrs r3, r1
  8426. 8003b86: 60d3 str r3, [r2, #12]
  8427. if (hadc->Init.OversamplingMode == ENABLE)
  8428. 8003b88: 687b ldr r3, [r7, #4]
  8429. 8003b8a: f893 3038 ldrb.w r3, [r3, #56] @ 0x38
  8430. 8003b8e: 2b01 cmp r3, #1
  8431. 8003b90: d130 bne.n 8003bf4 <HAL_ADC_Init+0x2b8>
  8432. #endif
  8433. assert_param(IS_ADC_RIGHT_BIT_SHIFT(hadc->Init.Oversampling.RightBitShift));
  8434. assert_param(IS_ADC_TRIGGERED_OVERSAMPLING_MODE(hadc->Init.Oversampling.TriggeredMode));
  8435. assert_param(IS_ADC_REGOVERSAMPLING_MODE(hadc->Init.Oversampling.OversamplingStopReset));
  8436. if ((hadc->Init.ExternalTrigConv == ADC_SOFTWARE_START)
  8437. 8003b92: 687b ldr r3, [r7, #4]
  8438. 8003b94: 6a5b ldr r3, [r3, #36] @ 0x24
  8439. 8003b96: 2b00 cmp r3, #0
  8440. /* - Oversampling Ratio */
  8441. /* - Right bit shift */
  8442. /* - Left bit shift */
  8443. /* - Triggered mode */
  8444. /* - Oversampling mode (continued/resumed) */
  8445. MODIFY_REG(hadc->Instance->CFGR2, ADC_CFGR2_FIELDS,
  8446. 8003b98: 687b ldr r3, [r7, #4]
  8447. 8003b9a: 681b ldr r3, [r3, #0]
  8448. 8003b9c: 691a ldr r2, [r3, #16]
  8449. 8003b9e: 4b14 ldr r3, [pc, #80] @ (8003bf0 <HAL_ADC_Init+0x2b4>)
  8450. 8003ba0: 4013 ands r3, r2
  8451. 8003ba2: 687a ldr r2, [r7, #4]
  8452. 8003ba4: 6bd2 ldr r2, [r2, #60] @ 0x3c
  8453. 8003ba6: 3a01 subs r2, #1
  8454. 8003ba8: 0411 lsls r1, r2, #16
  8455. 8003baa: 687a ldr r2, [r7, #4]
  8456. 8003bac: 6c12 ldr r2, [r2, #64] @ 0x40
  8457. 8003bae: 4311 orrs r1, r2
  8458. 8003bb0: 687a ldr r2, [r7, #4]
  8459. 8003bb2: 6c52 ldr r2, [r2, #68] @ 0x44
  8460. 8003bb4: 4311 orrs r1, r2
  8461. 8003bb6: 687a ldr r2, [r7, #4]
  8462. 8003bb8: 6c92 ldr r2, [r2, #72] @ 0x48
  8463. 8003bba: 430a orrs r2, r1
  8464. 8003bbc: 431a orrs r2, r3
  8465. 8003bbe: 687b ldr r3, [r7, #4]
  8466. 8003bc0: 681b ldr r3, [r3, #0]
  8467. 8003bc2: f042 0201 orr.w r2, r2, #1
  8468. 8003bc6: 611a str r2, [r3, #16]
  8469. 8003bc8: e01c b.n 8003c04 <HAL_ADC_Init+0x2c8>
  8470. 8003bca: bf00 nop
  8471. 8003bcc: 24000034 .word 0x24000034
  8472. 8003bd0: 053e2d63 .word 0x053e2d63
  8473. 8003bd4: 40022000 .word 0x40022000
  8474. 8003bd8: 40022100 .word 0x40022100
  8475. 8003bdc: 58026000 .word 0x58026000
  8476. 8003be0: 40022300 .word 0x40022300
  8477. 8003be4: 58026300 .word 0x58026300
  8478. 8003be8: fff0c003 .word 0xfff0c003
  8479. 8003bec: ffffbffc .word 0xffffbffc
  8480. 8003bf0: fc00f81e .word 0xfc00f81e
  8481. }
  8482. else
  8483. {
  8484. /* Disable ADC oversampling scope on ADC group regular */
  8485. CLEAR_BIT(hadc->Instance->CFGR2, ADC_CFGR2_ROVSE);
  8486. 8003bf4: 687b ldr r3, [r7, #4]
  8487. 8003bf6: 681b ldr r3, [r3, #0]
  8488. 8003bf8: 691a ldr r2, [r3, #16]
  8489. 8003bfa: 687b ldr r3, [r7, #4]
  8490. 8003bfc: 681b ldr r3, [r3, #0]
  8491. 8003bfe: f022 0201 bic.w r2, r2, #1
  8492. 8003c02: 611a str r2, [r3, #16]
  8493. }
  8494. /* Set the LeftShift parameter: it is applied to the final result with or without oversampling */
  8495. MODIFY_REG(hadc->Instance->CFGR2, ADC_CFGR2_LSHIFT, hadc->Init.LeftBitShift);
  8496. 8003c04: 687b ldr r3, [r7, #4]
  8497. 8003c06: 681b ldr r3, [r3, #0]
  8498. 8003c08: 691b ldr r3, [r3, #16]
  8499. 8003c0a: f023 4170 bic.w r1, r3, #4026531840 @ 0xf0000000
  8500. 8003c0e: 687b ldr r3, [r7, #4]
  8501. 8003c10: 6b5a ldr r2, [r3, #52] @ 0x34
  8502. 8003c12: 687b ldr r3, [r7, #4]
  8503. 8003c14: 681b ldr r3, [r3, #0]
  8504. 8003c16: 430a orrs r2, r1
  8505. 8003c18: 611a str r2, [r3, #16]
  8506. /* Configure the BOOST Mode */
  8507. ADC_ConfigureBoostMode(hadc);
  8508. }
  8509. #else
  8510. /* Configure the BOOST Mode */
  8511. ADC_ConfigureBoostMode(hadc);
  8512. 8003c1a: 6878 ldr r0, [r7, #4]
  8513. 8003c1c: f000 fde2 bl 80047e4 <ADC_ConfigureBoostMode>
  8514. /* Note: Scan mode is not present by hardware on this device, but */
  8515. /* emulated by software for alignment over all STM32 devices. */
  8516. /* - if scan mode is enabled, regular channels sequence length is set to */
  8517. /* parameter "NbrOfConversion". */
  8518. if (hadc->Init.ScanConvMode == ADC_SCAN_ENABLE)
  8519. 8003c20: 687b ldr r3, [r7, #4]
  8520. 8003c22: 68db ldr r3, [r3, #12]
  8521. 8003c24: 2b01 cmp r3, #1
  8522. 8003c26: d10c bne.n 8003c42 <HAL_ADC_Init+0x306>
  8523. {
  8524. /* Set number of ranks in regular group sequencer */
  8525. MODIFY_REG(hadc->Instance->SQR1, ADC_SQR1_L, (hadc->Init.NbrOfConversion - (uint8_t)1));
  8526. 8003c28: 687b ldr r3, [r7, #4]
  8527. 8003c2a: 681b ldr r3, [r3, #0]
  8528. 8003c2c: 6b1b ldr r3, [r3, #48] @ 0x30
  8529. 8003c2e: f023 010f bic.w r1, r3, #15
  8530. 8003c32: 687b ldr r3, [r7, #4]
  8531. 8003c34: 699b ldr r3, [r3, #24]
  8532. 8003c36: 1e5a subs r2, r3, #1
  8533. 8003c38: 687b ldr r3, [r7, #4]
  8534. 8003c3a: 681b ldr r3, [r3, #0]
  8535. 8003c3c: 430a orrs r2, r1
  8536. 8003c3e: 631a str r2, [r3, #48] @ 0x30
  8537. 8003c40: e007 b.n 8003c52 <HAL_ADC_Init+0x316>
  8538. }
  8539. else
  8540. {
  8541. CLEAR_BIT(hadc->Instance->SQR1, ADC_SQR1_L);
  8542. 8003c42: 687b ldr r3, [r7, #4]
  8543. 8003c44: 681b ldr r3, [r3, #0]
  8544. 8003c46: 6b1a ldr r2, [r3, #48] @ 0x30
  8545. 8003c48: 687b ldr r3, [r7, #4]
  8546. 8003c4a: 681b ldr r3, [r3, #0]
  8547. 8003c4c: f022 020f bic.w r2, r2, #15
  8548. 8003c50: 631a str r2, [r3, #48] @ 0x30
  8549. }
  8550. /* Initialize the ADC state */
  8551. /* Clear HAL_ADC_STATE_BUSY_INTERNAL bit, set HAL_ADC_STATE_READY bit */
  8552. ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_BUSY_INTERNAL, HAL_ADC_STATE_READY);
  8553. 8003c52: 687b ldr r3, [r7, #4]
  8554. 8003c54: 6d5b ldr r3, [r3, #84] @ 0x54
  8555. 8003c56: f023 0303 bic.w r3, r3, #3
  8556. 8003c5a: f043 0201 orr.w r2, r3, #1
  8557. 8003c5e: 687b ldr r3, [r7, #4]
  8558. 8003c60: 655a str r2, [r3, #84] @ 0x54
  8559. 8003c62: e007 b.n 8003c74 <HAL_ADC_Init+0x338>
  8560. }
  8561. else
  8562. {
  8563. /* Update ADC state machine to error */
  8564. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
  8565. 8003c64: 687b ldr r3, [r7, #4]
  8566. 8003c66: 6d5b ldr r3, [r3, #84] @ 0x54
  8567. 8003c68: f043 0210 orr.w r2, r3, #16
  8568. 8003c6c: 687b ldr r3, [r7, #4]
  8569. 8003c6e: 655a str r2, [r3, #84] @ 0x54
  8570. tmp_hal_status = HAL_ERROR;
  8571. 8003c70: 2301 movs r3, #1
  8572. 8003c72: 77fb strb r3, [r7, #31]
  8573. }
  8574. /* Return function status */
  8575. return tmp_hal_status;
  8576. 8003c74: 7ffb ldrb r3, [r7, #31]
  8577. }
  8578. 8003c76: 4618 mov r0, r3
  8579. 8003c78: 3724 adds r7, #36 @ 0x24
  8580. 8003c7a: 46bd mov sp, r7
  8581. 8003c7c: bd90 pop {r4, r7, pc}
  8582. 8003c7e: bf00 nop
  8583. 08003c80 <HAL_ADC_Start_DMA>:
  8584. * @param pData Destination Buffer address.
  8585. * @param Length Number of data to be transferred from ADC peripheral to memory
  8586. * @retval HAL status.
  8587. */
  8588. HAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef *hadc, uint32_t *pData, uint32_t Length)
  8589. {
  8590. 8003c80: b580 push {r7, lr}
  8591. 8003c82: b086 sub sp, #24
  8592. 8003c84: af00 add r7, sp, #0
  8593. 8003c86: 60f8 str r0, [r7, #12]
  8594. 8003c88: 60b9 str r1, [r7, #8]
  8595. 8003c8a: 607a str r2, [r7, #4]
  8596. HAL_StatusTypeDef tmp_hal_status;
  8597. uint32_t tmp_multimode_config = LL_ADC_GetMultimode(__LL_ADC_COMMON_INSTANCE(hadc->Instance));
  8598. 8003c8c: 68fb ldr r3, [r7, #12]
  8599. 8003c8e: 681b ldr r3, [r3, #0]
  8600. 8003c90: 4a55 ldr r2, [pc, #340] @ (8003de8 <HAL_ADC_Start_DMA+0x168>)
  8601. 8003c92: 4293 cmp r3, r2
  8602. 8003c94: d004 beq.n 8003ca0 <HAL_ADC_Start_DMA+0x20>
  8603. 8003c96: 68fb ldr r3, [r7, #12]
  8604. 8003c98: 681b ldr r3, [r3, #0]
  8605. 8003c9a: 4a54 ldr r2, [pc, #336] @ (8003dec <HAL_ADC_Start_DMA+0x16c>)
  8606. 8003c9c: 4293 cmp r3, r2
  8607. 8003c9e: d101 bne.n 8003ca4 <HAL_ADC_Start_DMA+0x24>
  8608. 8003ca0: 4b53 ldr r3, [pc, #332] @ (8003df0 <HAL_ADC_Start_DMA+0x170>)
  8609. 8003ca2: e000 b.n 8003ca6 <HAL_ADC_Start_DMA+0x26>
  8610. 8003ca4: 4b53 ldr r3, [pc, #332] @ (8003df4 <HAL_ADC_Start_DMA+0x174>)
  8611. 8003ca6: 4618 mov r0, r3
  8612. 8003ca8: f7ff fd64 bl 8003774 <LL_ADC_GetMultimode>
  8613. 8003cac: 6138 str r0, [r7, #16]
  8614. /* Check the parameters */
  8615. assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
  8616. /* Perform ADC enable and conversion start if no conversion is on going */
  8617. if (LL_ADC_REG_IsConversionOngoing(hadc->Instance) == 0UL)
  8618. 8003cae: 68fb ldr r3, [r7, #12]
  8619. 8003cb0: 681b ldr r3, [r3, #0]
  8620. 8003cb2: 4618 mov r0, r3
  8621. 8003cb4: f7ff fe1c bl 80038f0 <LL_ADC_REG_IsConversionOngoing>
  8622. 8003cb8: 4603 mov r3, r0
  8623. 8003cba: 2b00 cmp r3, #0
  8624. 8003cbc: f040 808c bne.w 8003dd8 <HAL_ADC_Start_DMA+0x158>
  8625. {
  8626. /* Process locked */
  8627. __HAL_LOCK(hadc);
  8628. 8003cc0: 68fb ldr r3, [r7, #12]
  8629. 8003cc2: f893 3050 ldrb.w r3, [r3, #80] @ 0x50
  8630. 8003cc6: 2b01 cmp r3, #1
  8631. 8003cc8: d101 bne.n 8003cce <HAL_ADC_Start_DMA+0x4e>
  8632. 8003cca: 2302 movs r3, #2
  8633. 8003ccc: e087 b.n 8003dde <HAL_ADC_Start_DMA+0x15e>
  8634. 8003cce: 68fb ldr r3, [r7, #12]
  8635. 8003cd0: 2201 movs r2, #1
  8636. 8003cd2: f883 2050 strb.w r2, [r3, #80] @ 0x50
  8637. /* Ensure that multimode regular conversions are not enabled. */
  8638. /* Otherwise, dedicated API HAL_ADCEx_MultiModeStart_DMA() must be used. */
  8639. if ((tmp_multimode_config == LL_ADC_MULTI_INDEPENDENT)
  8640. 8003cd6: 693b ldr r3, [r7, #16]
  8641. 8003cd8: 2b00 cmp r3, #0
  8642. 8003cda: d005 beq.n 8003ce8 <HAL_ADC_Start_DMA+0x68>
  8643. || (tmp_multimode_config == LL_ADC_MULTI_DUAL_INJ_SIMULT)
  8644. 8003cdc: 693b ldr r3, [r7, #16]
  8645. 8003cde: 2b05 cmp r3, #5
  8646. 8003ce0: d002 beq.n 8003ce8 <HAL_ADC_Start_DMA+0x68>
  8647. || (tmp_multimode_config == LL_ADC_MULTI_DUAL_INJ_ALTERN)
  8648. 8003ce2: 693b ldr r3, [r7, #16]
  8649. 8003ce4: 2b09 cmp r3, #9
  8650. 8003ce6: d170 bne.n 8003dca <HAL_ADC_Start_DMA+0x14a>
  8651. )
  8652. {
  8653. /* Enable the ADC peripheral */
  8654. tmp_hal_status = ADC_Enable(hadc);
  8655. 8003ce8: 68f8 ldr r0, [r7, #12]
  8656. 8003cea: f000 fbfd bl 80044e8 <ADC_Enable>
  8657. 8003cee: 4603 mov r3, r0
  8658. 8003cf0: 75fb strb r3, [r7, #23]
  8659. /* Start conversion if ADC is effectively enabled */
  8660. if (tmp_hal_status == HAL_OK)
  8661. 8003cf2: 7dfb ldrb r3, [r7, #23]
  8662. 8003cf4: 2b00 cmp r3, #0
  8663. 8003cf6: d163 bne.n 8003dc0 <HAL_ADC_Start_DMA+0x140>
  8664. {
  8665. /* Set ADC state */
  8666. /* - Clear state bitfield related to regular group conversion results */
  8667. /* - Set state bitfield related to regular operation */
  8668. ADC_STATE_CLR_SET(hadc->State,
  8669. 8003cf8: 68fb ldr r3, [r7, #12]
  8670. 8003cfa: 6d5a ldr r2, [r3, #84] @ 0x54
  8671. 8003cfc: 4b3e ldr r3, [pc, #248] @ (8003df8 <HAL_ADC_Start_DMA+0x178>)
  8672. 8003cfe: 4013 ands r3, r2
  8673. 8003d00: f443 7280 orr.w r2, r3, #256 @ 0x100
  8674. 8003d04: 68fb ldr r3, [r7, #12]
  8675. 8003d06: 655a str r2, [r3, #84] @ 0x54
  8676. HAL_ADC_STATE_REG_BUSY);
  8677. /* Reset HAL_ADC_STATE_MULTIMODE_SLAVE bit
  8678. - if ADC instance is master or if multimode feature is not available
  8679. - if multimode setting is disabled (ADC instance slave in independent mode) */
  8680. if ((__LL_ADC_MULTI_INSTANCE_MASTER(hadc->Instance) == hadc->Instance)
  8681. 8003d08: 68fb ldr r3, [r7, #12]
  8682. 8003d0a: 681b ldr r3, [r3, #0]
  8683. 8003d0c: 4a37 ldr r2, [pc, #220] @ (8003dec <HAL_ADC_Start_DMA+0x16c>)
  8684. 8003d0e: 4293 cmp r3, r2
  8685. 8003d10: d002 beq.n 8003d18 <HAL_ADC_Start_DMA+0x98>
  8686. 8003d12: 68fb ldr r3, [r7, #12]
  8687. 8003d14: 681b ldr r3, [r3, #0]
  8688. 8003d16: e000 b.n 8003d1a <HAL_ADC_Start_DMA+0x9a>
  8689. 8003d18: 4b33 ldr r3, [pc, #204] @ (8003de8 <HAL_ADC_Start_DMA+0x168>)
  8690. 8003d1a: 68fa ldr r2, [r7, #12]
  8691. 8003d1c: 6812 ldr r2, [r2, #0]
  8692. 8003d1e: 4293 cmp r3, r2
  8693. 8003d20: d002 beq.n 8003d28 <HAL_ADC_Start_DMA+0xa8>
  8694. || (tmp_multimode_config == LL_ADC_MULTI_INDEPENDENT)
  8695. 8003d22: 693b ldr r3, [r7, #16]
  8696. 8003d24: 2b00 cmp r3, #0
  8697. 8003d26: d105 bne.n 8003d34 <HAL_ADC_Start_DMA+0xb4>
  8698. )
  8699. {
  8700. CLEAR_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);
  8701. 8003d28: 68fb ldr r3, [r7, #12]
  8702. 8003d2a: 6d5b ldr r3, [r3, #84] @ 0x54
  8703. 8003d2c: f423 1280 bic.w r2, r3, #1048576 @ 0x100000
  8704. 8003d30: 68fb ldr r3, [r7, #12]
  8705. 8003d32: 655a str r2, [r3, #84] @ 0x54
  8706. }
  8707. /* Check if a conversion is on going on ADC group injected */
  8708. if ((hadc->State & HAL_ADC_STATE_INJ_BUSY) != 0UL)
  8709. 8003d34: 68fb ldr r3, [r7, #12]
  8710. 8003d36: 6d5b ldr r3, [r3, #84] @ 0x54
  8711. 8003d38: f403 5380 and.w r3, r3, #4096 @ 0x1000
  8712. 8003d3c: 2b00 cmp r3, #0
  8713. 8003d3e: d006 beq.n 8003d4e <HAL_ADC_Start_DMA+0xce>
  8714. {
  8715. /* Reset ADC error code fields related to regular conversions only */
  8716. CLEAR_BIT(hadc->ErrorCode, (HAL_ADC_ERROR_OVR | HAL_ADC_ERROR_DMA));
  8717. 8003d40: 68fb ldr r3, [r7, #12]
  8718. 8003d42: 6d9b ldr r3, [r3, #88] @ 0x58
  8719. 8003d44: f023 0206 bic.w r2, r3, #6
  8720. 8003d48: 68fb ldr r3, [r7, #12]
  8721. 8003d4a: 659a str r2, [r3, #88] @ 0x58
  8722. 8003d4c: e002 b.n 8003d54 <HAL_ADC_Start_DMA+0xd4>
  8723. }
  8724. else
  8725. {
  8726. /* Reset all ADC error code fields */
  8727. ADC_CLEAR_ERRORCODE(hadc);
  8728. 8003d4e: 68fb ldr r3, [r7, #12]
  8729. 8003d50: 2200 movs r2, #0
  8730. 8003d52: 659a str r2, [r3, #88] @ 0x58
  8731. }
  8732. /* Set the DMA transfer complete callback */
  8733. hadc->DMA_Handle->XferCpltCallback = ADC_DMAConvCplt;
  8734. 8003d54: 68fb ldr r3, [r7, #12]
  8735. 8003d56: 6cdb ldr r3, [r3, #76] @ 0x4c
  8736. 8003d58: 4a28 ldr r2, [pc, #160] @ (8003dfc <HAL_ADC_Start_DMA+0x17c>)
  8737. 8003d5a: 63da str r2, [r3, #60] @ 0x3c
  8738. /* Set the DMA half transfer complete callback */
  8739. hadc->DMA_Handle->XferHalfCpltCallback = ADC_DMAHalfConvCplt;
  8740. 8003d5c: 68fb ldr r3, [r7, #12]
  8741. 8003d5e: 6cdb ldr r3, [r3, #76] @ 0x4c
  8742. 8003d60: 4a27 ldr r2, [pc, #156] @ (8003e00 <HAL_ADC_Start_DMA+0x180>)
  8743. 8003d62: 641a str r2, [r3, #64] @ 0x40
  8744. /* Set the DMA error callback */
  8745. hadc->DMA_Handle->XferErrorCallback = ADC_DMAError;
  8746. 8003d64: 68fb ldr r3, [r7, #12]
  8747. 8003d66: 6cdb ldr r3, [r3, #76] @ 0x4c
  8748. 8003d68: 4a26 ldr r2, [pc, #152] @ (8003e04 <HAL_ADC_Start_DMA+0x184>)
  8749. 8003d6a: 64da str r2, [r3, #76] @ 0x4c
  8750. /* ADC start (in case of SW start): */
  8751. /* Clear regular group conversion flag and overrun flag */
  8752. /* (To ensure of no unknown state from potential previous ADC */
  8753. /* operations) */
  8754. __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_EOC | ADC_FLAG_EOS | ADC_FLAG_OVR));
  8755. 8003d6c: 68fb ldr r3, [r7, #12]
  8756. 8003d6e: 681b ldr r3, [r3, #0]
  8757. 8003d70: 221c movs r2, #28
  8758. 8003d72: 601a str r2, [r3, #0]
  8759. /* Process unlocked */
  8760. /* Unlock before starting ADC conversions: in case of potential */
  8761. /* interruption, to let the process to ADC IRQ Handler. */
  8762. __HAL_UNLOCK(hadc);
  8763. 8003d74: 68fb ldr r3, [r7, #12]
  8764. 8003d76: 2200 movs r2, #0
  8765. 8003d78: f883 2050 strb.w r2, [r3, #80] @ 0x50
  8766. /* With DMA, overrun event is always considered as an error even if
  8767. hadc->Init.Overrun is set to ADC_OVR_DATA_OVERWRITTEN. Therefore,
  8768. ADC_IT_OVR is enabled. */
  8769. __HAL_ADC_ENABLE_IT(hadc, ADC_IT_OVR);
  8770. 8003d7c: 68fb ldr r3, [r7, #12]
  8771. 8003d7e: 681b ldr r3, [r3, #0]
  8772. 8003d80: 685a ldr r2, [r3, #4]
  8773. 8003d82: 68fb ldr r3, [r7, #12]
  8774. 8003d84: 681b ldr r3, [r3, #0]
  8775. 8003d86: f042 0210 orr.w r2, r2, #16
  8776. 8003d8a: 605a str r2, [r3, #4]
  8777. {
  8778. LL_ADC_REG_SetDataTransferMode(hadc->Instance, ADC_CFGR_DMACONTREQ((uint32_t)hadc->Init.ConversionDataManagement));
  8779. }
  8780. #else
  8781. LL_ADC_REG_SetDataTransferMode(hadc->Instance, (uint32_t)hadc->Init.ConversionDataManagement);
  8782. 8003d8c: 68fb ldr r3, [r7, #12]
  8783. 8003d8e: 681a ldr r2, [r3, #0]
  8784. 8003d90: 68fb ldr r3, [r7, #12]
  8785. 8003d92: 6adb ldr r3, [r3, #44] @ 0x2c
  8786. 8003d94: 4619 mov r1, r3
  8787. 8003d96: 4610 mov r0, r2
  8788. 8003d98: f7ff fc89 bl 80036ae <LL_ADC_REG_SetDataTransferMode>
  8789. #endif
  8790. /* Start the DMA channel */
  8791. tmp_hal_status = HAL_DMA_Start_IT(hadc->DMA_Handle, (uint32_t)&hadc->Instance->DR, (uint32_t)pData, Length);
  8792. 8003d9c: 68fb ldr r3, [r7, #12]
  8793. 8003d9e: 6cd8 ldr r0, [r3, #76] @ 0x4c
  8794. 8003da0: 68fb ldr r3, [r7, #12]
  8795. 8003da2: 681b ldr r3, [r3, #0]
  8796. 8003da4: 3340 adds r3, #64 @ 0x40
  8797. 8003da6: 4619 mov r1, r3
  8798. 8003da8: 68ba ldr r2, [r7, #8]
  8799. 8003daa: 687b ldr r3, [r7, #4]
  8800. 8003dac: f001 fe7c bl 8005aa8 <HAL_DMA_Start_IT>
  8801. 8003db0: 4603 mov r3, r0
  8802. 8003db2: 75fb strb r3, [r7, #23]
  8803. /* Enable conversion of regular group. */
  8804. /* If software start has been selected, conversion starts immediately. */
  8805. /* If external trigger has been selected, conversion will start at next */
  8806. /* trigger event. */
  8807. /* Start ADC group regular conversion */
  8808. LL_ADC_REG_StartConversion(hadc->Instance);
  8809. 8003db4: 68fb ldr r3, [r7, #12]
  8810. 8003db6: 681b ldr r3, [r3, #0]
  8811. 8003db8: 4618 mov r0, r3
  8812. 8003dba: f7ff fd85 bl 80038c8 <LL_ADC_REG_StartConversion>
  8813. if (tmp_hal_status == HAL_OK)
  8814. 8003dbe: e00d b.n 8003ddc <HAL_ADC_Start_DMA+0x15c>
  8815. }
  8816. else
  8817. {
  8818. /* Process unlocked */
  8819. __HAL_UNLOCK(hadc);
  8820. 8003dc0: 68fb ldr r3, [r7, #12]
  8821. 8003dc2: 2200 movs r2, #0
  8822. 8003dc4: f883 2050 strb.w r2, [r3, #80] @ 0x50
  8823. if (tmp_hal_status == HAL_OK)
  8824. 8003dc8: e008 b.n 8003ddc <HAL_ADC_Start_DMA+0x15c>
  8825. }
  8826. }
  8827. else
  8828. {
  8829. tmp_hal_status = HAL_ERROR;
  8830. 8003dca: 2301 movs r3, #1
  8831. 8003dcc: 75fb strb r3, [r7, #23]
  8832. /* Process unlocked */
  8833. __HAL_UNLOCK(hadc);
  8834. 8003dce: 68fb ldr r3, [r7, #12]
  8835. 8003dd0: 2200 movs r2, #0
  8836. 8003dd2: f883 2050 strb.w r2, [r3, #80] @ 0x50
  8837. 8003dd6: e001 b.n 8003ddc <HAL_ADC_Start_DMA+0x15c>
  8838. }
  8839. }
  8840. else
  8841. {
  8842. tmp_hal_status = HAL_BUSY;
  8843. 8003dd8: 2302 movs r3, #2
  8844. 8003dda: 75fb strb r3, [r7, #23]
  8845. }
  8846. /* Return function status */
  8847. return tmp_hal_status;
  8848. 8003ddc: 7dfb ldrb r3, [r7, #23]
  8849. }
  8850. 8003dde: 4618 mov r0, r3
  8851. 8003de0: 3718 adds r7, #24
  8852. 8003de2: 46bd mov sp, r7
  8853. 8003de4: bd80 pop {r7, pc}
  8854. 8003de6: bf00 nop
  8855. 8003de8: 40022000 .word 0x40022000
  8856. 8003dec: 40022100 .word 0x40022100
  8857. 8003df0: 40022300 .word 0x40022300
  8858. 8003df4: 58026300 .word 0x58026300
  8859. 8003df8: fffff0fe .word 0xfffff0fe
  8860. 8003dfc: 080046bb .word 0x080046bb
  8861. 8003e00: 08004793 .word 0x08004793
  8862. 8003e04: 080047af .word 0x080047af
  8863. 08003e08 <HAL_ADC_ConvHalfCpltCallback>:
  8864. * @brief Conversion DMA half-transfer callback in non-blocking mode.
  8865. * @param hadc ADC handle
  8866. * @retval None
  8867. */
  8868. __weak void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef *hadc)
  8869. {
  8870. 8003e08: b480 push {r7}
  8871. 8003e0a: b083 sub sp, #12
  8872. 8003e0c: af00 add r7, sp, #0
  8873. 8003e0e: 6078 str r0, [r7, #4]
  8874. UNUSED(hadc);
  8875. /* NOTE : This function should not be modified. When the callback is needed,
  8876. function HAL_ADC_ConvHalfCpltCallback must be implemented in the user file.
  8877. */
  8878. }
  8879. 8003e10: bf00 nop
  8880. 8003e12: 370c adds r7, #12
  8881. 8003e14: 46bd mov sp, r7
  8882. 8003e16: f85d 7b04 ldr.w r7, [sp], #4
  8883. 8003e1a: 4770 bx lr
  8884. 08003e1c <HAL_ADC_ErrorCallback>:
  8885. * (this function is also clearing overrun flag)
  8886. * @param hadc ADC handle
  8887. * @retval None
  8888. */
  8889. __weak void HAL_ADC_ErrorCallback(ADC_HandleTypeDef *hadc)
  8890. {
  8891. 8003e1c: b480 push {r7}
  8892. 8003e1e: b083 sub sp, #12
  8893. 8003e20: af00 add r7, sp, #0
  8894. 8003e22: 6078 str r0, [r7, #4]
  8895. UNUSED(hadc);
  8896. /* NOTE : This function should not be modified. When the callback is needed,
  8897. function HAL_ADC_ErrorCallback must be implemented in the user file.
  8898. */
  8899. }
  8900. 8003e24: bf00 nop
  8901. 8003e26: 370c adds r7, #12
  8902. 8003e28: 46bd mov sp, r7
  8903. 8003e2a: f85d 7b04 ldr.w r7, [sp], #4
  8904. 8003e2e: 4770 bx lr
  8905. 08003e30 <HAL_ADC_ConfigChannel>:
  8906. * @param hadc ADC handle
  8907. * @param sConfig Structure of ADC channel assigned to ADC group regular.
  8908. * @retval HAL status
  8909. */
  8910. HAL_StatusTypeDef HAL_ADC_ConfigChannel(ADC_HandleTypeDef *hadc, ADC_ChannelConfTypeDef *sConfig)
  8911. {
  8912. 8003e30: b590 push {r4, r7, lr}
  8913. 8003e32: b0a1 sub sp, #132 @ 0x84
  8914. 8003e34: af00 add r7, sp, #0
  8915. 8003e36: 6078 str r0, [r7, #4]
  8916. 8003e38: 6039 str r1, [r7, #0]
  8917. HAL_StatusTypeDef tmp_hal_status = HAL_OK;
  8918. 8003e3a: 2300 movs r3, #0
  8919. 8003e3c: f887 307f strb.w r3, [r7, #127] @ 0x7f
  8920. uint32_t tmpOffsetShifted;
  8921. uint32_t tmp_config_internal_channel;
  8922. __IO uint32_t wait_loop_index = 0;
  8923. 8003e40: 2300 movs r3, #0
  8924. 8003e42: 60bb str r3, [r7, #8]
  8925. /* if ROVSE is set, the value of the OFFSETy_EN bit in ADCx_OFRy register is
  8926. ignored (considered as reset) */
  8927. assert_param(!((sConfig->OffsetNumber != ADC_OFFSET_NONE) && (hadc->Init.OversamplingMode == ENABLE)));
  8928. /* Verification of channel number */
  8929. if (sConfig->SingleDiff != ADC_DIFFERENTIAL_ENDED)
  8930. 8003e44: 683b ldr r3, [r7, #0]
  8931. 8003e46: 68db ldr r3, [r3, #12]
  8932. 8003e48: 4a65 ldr r2, [pc, #404] @ (8003fe0 <HAL_ADC_ConfigChannel+0x1b0>)
  8933. 8003e4a: 4293 cmp r3, r2
  8934. }
  8935. #endif
  8936. }
  8937. /* Process locked */
  8938. __HAL_LOCK(hadc);
  8939. 8003e4c: 687b ldr r3, [r7, #4]
  8940. 8003e4e: f893 3050 ldrb.w r3, [r3, #80] @ 0x50
  8941. 8003e52: 2b01 cmp r3, #1
  8942. 8003e54: d101 bne.n 8003e5a <HAL_ADC_ConfigChannel+0x2a>
  8943. 8003e56: 2302 movs r3, #2
  8944. 8003e58: e32e b.n 80044b8 <HAL_ADC_ConfigChannel+0x688>
  8945. 8003e5a: 687b ldr r3, [r7, #4]
  8946. 8003e5c: 2201 movs r2, #1
  8947. 8003e5e: f883 2050 strb.w r2, [r3, #80] @ 0x50
  8948. /* Parameters update conditioned to ADC state: */
  8949. /* Parameters that can be updated when ADC is disabled or enabled without */
  8950. /* conversion on going on regular group: */
  8951. /* - Channel number */
  8952. /* - Channel rank */
  8953. if (LL_ADC_REG_IsConversionOngoing(hadc->Instance) == 0UL)
  8954. 8003e62: 687b ldr r3, [r7, #4]
  8955. 8003e64: 681b ldr r3, [r3, #0]
  8956. 8003e66: 4618 mov r0, r3
  8957. 8003e68: f7ff fd42 bl 80038f0 <LL_ADC_REG_IsConversionOngoing>
  8958. 8003e6c: 4603 mov r3, r0
  8959. 8003e6e: 2b00 cmp r3, #0
  8960. 8003e70: f040 8313 bne.w 800449a <HAL_ADC_ConfigChannel+0x66a>
  8961. {
  8962. if (!(__LL_ADC_IS_CHANNEL_INTERNAL(sConfig->Channel)))
  8963. 8003e74: 683b ldr r3, [r7, #0]
  8964. 8003e76: 681b ldr r3, [r3, #0]
  8965. 8003e78: 2b00 cmp r3, #0
  8966. 8003e7a: db2c blt.n 8003ed6 <HAL_ADC_ConfigChannel+0xa6>
  8967. /* ADC channels preselection */
  8968. hadc->Instance->PCSEL_RES0 |= (1UL << (__LL_ADC_CHANNEL_TO_DECIMAL_NB((uint32_t)sConfig->Channel) & 0x1FUL));
  8969. }
  8970. #else
  8971. /* ADC channels preselection */
  8972. hadc->Instance->PCSEL |= (1UL << (__LL_ADC_CHANNEL_TO_DECIMAL_NB((uint32_t)sConfig->Channel) & 0x1FUL));
  8973. 8003e7c: 683b ldr r3, [r7, #0]
  8974. 8003e7e: 681b ldr r3, [r3, #0]
  8975. 8003e80: f3c3 0313 ubfx r3, r3, #0, #20
  8976. 8003e84: 2b00 cmp r3, #0
  8977. 8003e86: d108 bne.n 8003e9a <HAL_ADC_ConfigChannel+0x6a>
  8978. 8003e88: 683b ldr r3, [r7, #0]
  8979. 8003e8a: 681b ldr r3, [r3, #0]
  8980. 8003e8c: 0e9b lsrs r3, r3, #26
  8981. 8003e8e: f003 031f and.w r3, r3, #31
  8982. 8003e92: 2201 movs r2, #1
  8983. 8003e94: fa02 f303 lsl.w r3, r2, r3
  8984. 8003e98: e016 b.n 8003ec8 <HAL_ADC_ConfigChannel+0x98>
  8985. 8003e9a: 683b ldr r3, [r7, #0]
  8986. 8003e9c: 681b ldr r3, [r3, #0]
  8987. 8003e9e: 667b str r3, [r7, #100] @ 0x64
  8988. uint32_t result;
  8989. #if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \
  8990. (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \
  8991. (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) )
  8992. __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
  8993. 8003ea0: 6e7b ldr r3, [r7, #100] @ 0x64
  8994. 8003ea2: fa93 f3a3 rbit r3, r3
  8995. 8003ea6: 663b str r3, [r7, #96] @ 0x60
  8996. result |= value & 1U;
  8997. s--;
  8998. }
  8999. result <<= s; /* shift when v's highest bits are zero */
  9000. #endif
  9001. return result;
  9002. 8003ea8: 6e3b ldr r3, [r7, #96] @ 0x60
  9003. 8003eaa: 66bb str r3, [r7, #104] @ 0x68
  9004. optimisations using the logic "value was passed to __builtin_clz, so it
  9005. is non-zero".
  9006. ARM GCC 7.3 and possibly earlier will optimise this test away, leaving a
  9007. single CLZ instruction.
  9008. */
  9009. if (value == 0U)
  9010. 8003eac: 6ebb ldr r3, [r7, #104] @ 0x68
  9011. 8003eae: 2b00 cmp r3, #0
  9012. 8003eb0: d101 bne.n 8003eb6 <HAL_ADC_ConfigChannel+0x86>
  9013. {
  9014. return 32U;
  9015. 8003eb2: 2320 movs r3, #32
  9016. 8003eb4: e003 b.n 8003ebe <HAL_ADC_ConfigChannel+0x8e>
  9017. }
  9018. return __builtin_clz(value);
  9019. 8003eb6: 6ebb ldr r3, [r7, #104] @ 0x68
  9020. 8003eb8: fab3 f383 clz r3, r3
  9021. 8003ebc: b2db uxtb r3, r3
  9022. 8003ebe: f003 031f and.w r3, r3, #31
  9023. 8003ec2: 2201 movs r2, #1
  9024. 8003ec4: fa02 f303 lsl.w r3, r2, r3
  9025. 8003ec8: 687a ldr r2, [r7, #4]
  9026. 8003eca: 6812 ldr r2, [r2, #0]
  9027. 8003ecc: 69d1 ldr r1, [r2, #28]
  9028. 8003ece: 687a ldr r2, [r7, #4]
  9029. 8003ed0: 6812 ldr r2, [r2, #0]
  9030. 8003ed2: 430b orrs r3, r1
  9031. 8003ed4: 61d3 str r3, [r2, #28]
  9032. #endif /* ADC_VER_V5_V90 */
  9033. }
  9034. /* Set ADC group regular sequence: channel on the selected scan sequence rank */
  9035. LL_ADC_REG_SetSequencerRanks(hadc->Instance, sConfig->Rank, sConfig->Channel);
  9036. 8003ed6: 687b ldr r3, [r7, #4]
  9037. 8003ed8: 6818 ldr r0, [r3, #0]
  9038. 8003eda: 683b ldr r3, [r7, #0]
  9039. 8003edc: 6859 ldr r1, [r3, #4]
  9040. 8003ede: 683b ldr r3, [r7, #0]
  9041. 8003ee0: 681b ldr r3, [r3, #0]
  9042. 8003ee2: 461a mov r2, r3
  9043. 8003ee4: f7ff fbb7 bl 8003656 <LL_ADC_REG_SetSequencerRanks>
  9044. /* Parameters update conditioned to ADC state: */
  9045. /* Parameters that can be updated when ADC is disabled or enabled without */
  9046. /* conversion on going on regular group: */
  9047. /* - Channel sampling time */
  9048. /* - Channel offset */
  9049. tmp_adc_is_conversion_on_going_regular = LL_ADC_REG_IsConversionOngoing(hadc->Instance);
  9050. 8003ee8: 687b ldr r3, [r7, #4]
  9051. 8003eea: 681b ldr r3, [r3, #0]
  9052. 8003eec: 4618 mov r0, r3
  9053. 8003eee: f7ff fcff bl 80038f0 <LL_ADC_REG_IsConversionOngoing>
  9054. 8003ef2: 67b8 str r0, [r7, #120] @ 0x78
  9055. tmp_adc_is_conversion_on_going_injected = LL_ADC_INJ_IsConversionOngoing(hadc->Instance);
  9056. 8003ef4: 687b ldr r3, [r7, #4]
  9057. 8003ef6: 681b ldr r3, [r3, #0]
  9058. 8003ef8: 4618 mov r0, r3
  9059. 8003efa: f7ff fd0c bl 8003916 <LL_ADC_INJ_IsConversionOngoing>
  9060. 8003efe: 6778 str r0, [r7, #116] @ 0x74
  9061. if ((tmp_adc_is_conversion_on_going_regular == 0UL)
  9062. 8003f00: 6fbb ldr r3, [r7, #120] @ 0x78
  9063. 8003f02: 2b00 cmp r3, #0
  9064. 8003f04: f040 80b8 bne.w 8004078 <HAL_ADC_ConfigChannel+0x248>
  9065. && (tmp_adc_is_conversion_on_going_injected == 0UL)
  9066. 8003f08: 6f7b ldr r3, [r7, #116] @ 0x74
  9067. 8003f0a: 2b00 cmp r3, #0
  9068. 8003f0c: f040 80b4 bne.w 8004078 <HAL_ADC_ConfigChannel+0x248>
  9069. )
  9070. {
  9071. /* Set sampling time of the selected ADC channel */
  9072. LL_ADC_SetChannelSamplingTime(hadc->Instance, sConfig->Channel, sConfig->SamplingTime);
  9073. 8003f10: 687b ldr r3, [r7, #4]
  9074. 8003f12: 6818 ldr r0, [r3, #0]
  9075. 8003f14: 683b ldr r3, [r7, #0]
  9076. 8003f16: 6819 ldr r1, [r3, #0]
  9077. 8003f18: 683b ldr r3, [r7, #0]
  9078. 8003f1a: 689b ldr r3, [r3, #8]
  9079. 8003f1c: 461a mov r2, r3
  9080. 8003f1e: f7ff fbd9 bl 80036d4 <LL_ADC_SetChannelSamplingTime>
  9081. tmpOffsetShifted = ADC3_OFFSET_SHIFT_RESOLUTION(hadc, (uint32_t)sConfig->Offset);
  9082. }
  9083. else
  9084. #endif /* ADC_VER_V5_V90 */
  9085. {
  9086. tmpOffsetShifted = ADC_OFFSET_SHIFT_RESOLUTION(hadc, (uint32_t)sConfig->Offset);
  9087. 8003f22: 4b30 ldr r3, [pc, #192] @ (8003fe4 <HAL_ADC_ConfigChannel+0x1b4>)
  9088. 8003f24: 681b ldr r3, [r3, #0]
  9089. 8003f26: f003 4370 and.w r3, r3, #4026531840 @ 0xf0000000
  9090. 8003f2a: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  9091. 8003f2e: d10b bne.n 8003f48 <HAL_ADC_ConfigChannel+0x118>
  9092. 8003f30: 683b ldr r3, [r7, #0]
  9093. 8003f32: 695a ldr r2, [r3, #20]
  9094. 8003f34: 687b ldr r3, [r7, #4]
  9095. 8003f36: 681b ldr r3, [r3, #0]
  9096. 8003f38: 68db ldr r3, [r3, #12]
  9097. 8003f3a: 089b lsrs r3, r3, #2
  9098. 8003f3c: f003 0307 and.w r3, r3, #7
  9099. 8003f40: 005b lsls r3, r3, #1
  9100. 8003f42: fa02 f303 lsl.w r3, r2, r3
  9101. 8003f46: e01d b.n 8003f84 <HAL_ADC_ConfigChannel+0x154>
  9102. 8003f48: 687b ldr r3, [r7, #4]
  9103. 8003f4a: 681b ldr r3, [r3, #0]
  9104. 8003f4c: 68db ldr r3, [r3, #12]
  9105. 8003f4e: f003 0310 and.w r3, r3, #16
  9106. 8003f52: 2b00 cmp r3, #0
  9107. 8003f54: d10b bne.n 8003f6e <HAL_ADC_ConfigChannel+0x13e>
  9108. 8003f56: 683b ldr r3, [r7, #0]
  9109. 8003f58: 695a ldr r2, [r3, #20]
  9110. 8003f5a: 687b ldr r3, [r7, #4]
  9111. 8003f5c: 681b ldr r3, [r3, #0]
  9112. 8003f5e: 68db ldr r3, [r3, #12]
  9113. 8003f60: 089b lsrs r3, r3, #2
  9114. 8003f62: f003 0307 and.w r3, r3, #7
  9115. 8003f66: 005b lsls r3, r3, #1
  9116. 8003f68: fa02 f303 lsl.w r3, r2, r3
  9117. 8003f6c: e00a b.n 8003f84 <HAL_ADC_ConfigChannel+0x154>
  9118. 8003f6e: 683b ldr r3, [r7, #0]
  9119. 8003f70: 695a ldr r2, [r3, #20]
  9120. 8003f72: 687b ldr r3, [r7, #4]
  9121. 8003f74: 681b ldr r3, [r3, #0]
  9122. 8003f76: 68db ldr r3, [r3, #12]
  9123. 8003f78: 089b lsrs r3, r3, #2
  9124. 8003f7a: f003 0304 and.w r3, r3, #4
  9125. 8003f7e: 005b lsls r3, r3, #1
  9126. 8003f80: fa02 f303 lsl.w r3, r2, r3
  9127. 8003f84: 673b str r3, [r7, #112] @ 0x70
  9128. }
  9129. if (sConfig->OffsetNumber != ADC_OFFSET_NONE)
  9130. 8003f86: 683b ldr r3, [r7, #0]
  9131. 8003f88: 691b ldr r3, [r3, #16]
  9132. 8003f8a: 2b04 cmp r3, #4
  9133. 8003f8c: d02c beq.n 8003fe8 <HAL_ADC_ConfigChannel+0x1b8>
  9134. {
  9135. /* Set ADC selected offset number */
  9136. LL_ADC_SetOffset(hadc->Instance, sConfig->OffsetNumber, sConfig->Channel, tmpOffsetShifted);
  9137. 8003f8e: 687b ldr r3, [r7, #4]
  9138. 8003f90: 6818 ldr r0, [r3, #0]
  9139. 8003f92: 683b ldr r3, [r7, #0]
  9140. 8003f94: 6919 ldr r1, [r3, #16]
  9141. 8003f96: 683b ldr r3, [r7, #0]
  9142. 8003f98: 681a ldr r2, [r3, #0]
  9143. 8003f9a: 6f3b ldr r3, [r7, #112] @ 0x70
  9144. 8003f9c: f7ff faf4 bl 8003588 <LL_ADC_SetOffset>
  9145. else
  9146. #endif /* ADC_VER_V5_V90 */
  9147. {
  9148. assert_param(IS_FUNCTIONAL_STATE(sConfig->OffsetSignedSaturation));
  9149. /* Set ADC selected offset signed saturation */
  9150. LL_ADC_SetOffsetSignedSaturation(hadc->Instance, sConfig->OffsetNumber, (sConfig->OffsetSignedSaturation == ENABLE) ? LL_ADC_OFFSET_SIGNED_SATURATION_ENABLE : LL_ADC_OFFSET_SIGNED_SATURATION_DISABLE);
  9151. 8003fa0: 687b ldr r3, [r7, #4]
  9152. 8003fa2: 6818 ldr r0, [r3, #0]
  9153. 8003fa4: 683b ldr r3, [r7, #0]
  9154. 8003fa6: 6919 ldr r1, [r3, #16]
  9155. 8003fa8: 683b ldr r3, [r7, #0]
  9156. 8003faa: 7e5b ldrb r3, [r3, #25]
  9157. 8003fac: 2b01 cmp r3, #1
  9158. 8003fae: d102 bne.n 8003fb6 <HAL_ADC_ConfigChannel+0x186>
  9159. 8003fb0: f04f 4300 mov.w r3, #2147483648 @ 0x80000000
  9160. 8003fb4: e000 b.n 8003fb8 <HAL_ADC_ConfigChannel+0x188>
  9161. 8003fb6: 2300 movs r3, #0
  9162. 8003fb8: 461a mov r2, r3
  9163. 8003fba: f7ff fb1e bl 80035fa <LL_ADC_SetOffsetSignedSaturation>
  9164. assert_param(IS_FUNCTIONAL_STATE(sConfig->OffsetRightShift));
  9165. /* Set ADC selected offset right shift */
  9166. LL_ADC_SetDataRightShift(hadc->Instance, sConfig->OffsetNumber, (sConfig->OffsetRightShift == ENABLE) ? LL_ADC_OFFSET_RSHIFT_ENABLE : LL_ADC_OFFSET_RSHIFT_DISABLE);
  9167. 8003fbe: 687b ldr r3, [r7, #4]
  9168. 8003fc0: 6818 ldr r0, [r3, #0]
  9169. 8003fc2: 683b ldr r3, [r7, #0]
  9170. 8003fc4: 6919 ldr r1, [r3, #16]
  9171. 8003fc6: 683b ldr r3, [r7, #0]
  9172. 8003fc8: 7e1b ldrb r3, [r3, #24]
  9173. 8003fca: 2b01 cmp r3, #1
  9174. 8003fcc: d102 bne.n 8003fd4 <HAL_ADC_ConfigChannel+0x1a4>
  9175. 8003fce: f44f 6300 mov.w r3, #2048 @ 0x800
  9176. 8003fd2: e000 b.n 8003fd6 <HAL_ADC_ConfigChannel+0x1a6>
  9177. 8003fd4: 2300 movs r3, #0
  9178. 8003fd6: 461a mov r2, r3
  9179. 8003fd8: f7ff faf6 bl 80035c8 <LL_ADC_SetDataRightShift>
  9180. 8003fdc: e04c b.n 8004078 <HAL_ADC_ConfigChannel+0x248>
  9181. 8003fde: bf00 nop
  9182. 8003fe0: 47ff0000 .word 0x47ff0000
  9183. 8003fe4: 5c001000 .word 0x5c001000
  9184. }
  9185. }
  9186. else
  9187. #endif /* ADC_VER_V5_V90 */
  9188. {
  9189. if (((hadc->Instance->OFR1) & ADC_OFR1_OFFSET1_CH) == ADC_OFR_CHANNEL(sConfig->Channel))
  9190. 8003fe8: 687b ldr r3, [r7, #4]
  9191. 8003fea: 681b ldr r3, [r3, #0]
  9192. 8003fec: 6e1b ldr r3, [r3, #96] @ 0x60
  9193. 8003fee: f003 42f8 and.w r2, r3, #2080374784 @ 0x7c000000
  9194. 8003ff2: 683b ldr r3, [r7, #0]
  9195. 8003ff4: 681b ldr r3, [r3, #0]
  9196. 8003ff6: 069b lsls r3, r3, #26
  9197. 8003ff8: 429a cmp r2, r3
  9198. 8003ffa: d107 bne.n 800400c <HAL_ADC_ConfigChannel+0x1dc>
  9199. {
  9200. CLEAR_BIT(hadc->Instance->OFR1, ADC_OFR1_SSATE);
  9201. 8003ffc: 687b ldr r3, [r7, #4]
  9202. 8003ffe: 681b ldr r3, [r3, #0]
  9203. 8004000: 6e1a ldr r2, [r3, #96] @ 0x60
  9204. 8004002: 687b ldr r3, [r7, #4]
  9205. 8004004: 681b ldr r3, [r3, #0]
  9206. 8004006: f022 4200 bic.w r2, r2, #2147483648 @ 0x80000000
  9207. 800400a: 661a str r2, [r3, #96] @ 0x60
  9208. }
  9209. if (((hadc->Instance->OFR2) & ADC_OFR2_OFFSET2_CH) == ADC_OFR_CHANNEL(sConfig->Channel))
  9210. 800400c: 687b ldr r3, [r7, #4]
  9211. 800400e: 681b ldr r3, [r3, #0]
  9212. 8004010: 6e5b ldr r3, [r3, #100] @ 0x64
  9213. 8004012: f003 42f8 and.w r2, r3, #2080374784 @ 0x7c000000
  9214. 8004016: 683b ldr r3, [r7, #0]
  9215. 8004018: 681b ldr r3, [r3, #0]
  9216. 800401a: 069b lsls r3, r3, #26
  9217. 800401c: 429a cmp r2, r3
  9218. 800401e: d107 bne.n 8004030 <HAL_ADC_ConfigChannel+0x200>
  9219. {
  9220. CLEAR_BIT(hadc->Instance->OFR2, ADC_OFR2_SSATE);
  9221. 8004020: 687b ldr r3, [r7, #4]
  9222. 8004022: 681b ldr r3, [r3, #0]
  9223. 8004024: 6e5a ldr r2, [r3, #100] @ 0x64
  9224. 8004026: 687b ldr r3, [r7, #4]
  9225. 8004028: 681b ldr r3, [r3, #0]
  9226. 800402a: f022 4200 bic.w r2, r2, #2147483648 @ 0x80000000
  9227. 800402e: 665a str r2, [r3, #100] @ 0x64
  9228. }
  9229. if (((hadc->Instance->OFR3) & ADC_OFR3_OFFSET3_CH) == ADC_OFR_CHANNEL(sConfig->Channel))
  9230. 8004030: 687b ldr r3, [r7, #4]
  9231. 8004032: 681b ldr r3, [r3, #0]
  9232. 8004034: 6e9b ldr r3, [r3, #104] @ 0x68
  9233. 8004036: f003 42f8 and.w r2, r3, #2080374784 @ 0x7c000000
  9234. 800403a: 683b ldr r3, [r7, #0]
  9235. 800403c: 681b ldr r3, [r3, #0]
  9236. 800403e: 069b lsls r3, r3, #26
  9237. 8004040: 429a cmp r2, r3
  9238. 8004042: d107 bne.n 8004054 <HAL_ADC_ConfigChannel+0x224>
  9239. {
  9240. CLEAR_BIT(hadc->Instance->OFR3, ADC_OFR3_SSATE);
  9241. 8004044: 687b ldr r3, [r7, #4]
  9242. 8004046: 681b ldr r3, [r3, #0]
  9243. 8004048: 6e9a ldr r2, [r3, #104] @ 0x68
  9244. 800404a: 687b ldr r3, [r7, #4]
  9245. 800404c: 681b ldr r3, [r3, #0]
  9246. 800404e: f022 4200 bic.w r2, r2, #2147483648 @ 0x80000000
  9247. 8004052: 669a str r2, [r3, #104] @ 0x68
  9248. }
  9249. if (((hadc->Instance->OFR4) & ADC_OFR4_OFFSET4_CH) == ADC_OFR_CHANNEL(sConfig->Channel))
  9250. 8004054: 687b ldr r3, [r7, #4]
  9251. 8004056: 681b ldr r3, [r3, #0]
  9252. 8004058: 6edb ldr r3, [r3, #108] @ 0x6c
  9253. 800405a: f003 42f8 and.w r2, r3, #2080374784 @ 0x7c000000
  9254. 800405e: 683b ldr r3, [r7, #0]
  9255. 8004060: 681b ldr r3, [r3, #0]
  9256. 8004062: 069b lsls r3, r3, #26
  9257. 8004064: 429a cmp r2, r3
  9258. 8004066: d107 bne.n 8004078 <HAL_ADC_ConfigChannel+0x248>
  9259. {
  9260. CLEAR_BIT(hadc->Instance->OFR4, ADC_OFR4_SSATE);
  9261. 8004068: 687b ldr r3, [r7, #4]
  9262. 800406a: 681b ldr r3, [r3, #0]
  9263. 800406c: 6eda ldr r2, [r3, #108] @ 0x6c
  9264. 800406e: 687b ldr r3, [r7, #4]
  9265. 8004070: 681b ldr r3, [r3, #0]
  9266. 8004072: f022 4200 bic.w r2, r2, #2147483648 @ 0x80000000
  9267. 8004076: 66da str r2, [r3, #108] @ 0x6c
  9268. /* Parameters update conditioned to ADC state: */
  9269. /* Parameters that can be updated only when ADC is disabled: */
  9270. /* - Single or differential mode */
  9271. /* - Internal measurement channels: Vbat/VrefInt/TempSensor */
  9272. if (LL_ADC_IsEnabled(hadc->Instance) == 0UL)
  9273. 8004078: 687b ldr r3, [r7, #4]
  9274. 800407a: 681b ldr r3, [r3, #0]
  9275. 800407c: 4618 mov r0, r3
  9276. 800407e: f7ff fbfd bl 800387c <LL_ADC_IsEnabled>
  9277. 8004082: 4603 mov r3, r0
  9278. 8004084: 2b00 cmp r3, #0
  9279. 8004086: f040 8211 bne.w 80044ac <HAL_ADC_ConfigChannel+0x67c>
  9280. {
  9281. /* Set mode single-ended or differential input of the selected ADC channel */
  9282. LL_ADC_SetChannelSingleDiff(hadc->Instance, sConfig->Channel, sConfig->SingleDiff);
  9283. 800408a: 687b ldr r3, [r7, #4]
  9284. 800408c: 6818 ldr r0, [r3, #0]
  9285. 800408e: 683b ldr r3, [r7, #0]
  9286. 8004090: 6819 ldr r1, [r3, #0]
  9287. 8004092: 683b ldr r3, [r7, #0]
  9288. 8004094: 68db ldr r3, [r3, #12]
  9289. 8004096: 461a mov r2, r3
  9290. 8004098: f7ff fb48 bl 800372c <LL_ADC_SetChannelSingleDiff>
  9291. /* Configuration of differential mode */
  9292. if (sConfig->SingleDiff == ADC_DIFFERENTIAL_ENDED)
  9293. 800409c: 683b ldr r3, [r7, #0]
  9294. 800409e: 68db ldr r3, [r3, #12]
  9295. 80040a0: 4aa1 ldr r2, [pc, #644] @ (8004328 <HAL_ADC_ConfigChannel+0x4f8>)
  9296. 80040a2: 4293 cmp r3, r2
  9297. 80040a4: f040 812e bne.w 8004304 <HAL_ADC_ConfigChannel+0x4d4>
  9298. {
  9299. /* Set sampling time of the selected ADC channel */
  9300. /* Note: ADC channel number masked with value "0x1F" to ensure shift value within 32 bits range */
  9301. LL_ADC_SetChannelSamplingTime(hadc->Instance,
  9302. 80040a8: 687b ldr r3, [r7, #4]
  9303. 80040aa: 6818 ldr r0, [r3, #0]
  9304. (uint32_t)(__LL_ADC_DECIMAL_NB_TO_CHANNEL((__LL_ADC_CHANNEL_TO_DECIMAL_NB((uint32_t)sConfig->Channel) + 1UL) & 0x1FUL)),
  9305. 80040ac: 683b ldr r3, [r7, #0]
  9306. 80040ae: 681b ldr r3, [r3, #0]
  9307. 80040b0: f3c3 0313 ubfx r3, r3, #0, #20
  9308. 80040b4: 2b00 cmp r3, #0
  9309. 80040b6: d10b bne.n 80040d0 <HAL_ADC_ConfigChannel+0x2a0>
  9310. 80040b8: 683b ldr r3, [r7, #0]
  9311. 80040ba: 681b ldr r3, [r3, #0]
  9312. 80040bc: 0e9b lsrs r3, r3, #26
  9313. 80040be: 3301 adds r3, #1
  9314. 80040c0: f003 031f and.w r3, r3, #31
  9315. 80040c4: 2b09 cmp r3, #9
  9316. 80040c6: bf94 ite ls
  9317. 80040c8: 2301 movls r3, #1
  9318. 80040ca: 2300 movhi r3, #0
  9319. 80040cc: b2db uxtb r3, r3
  9320. 80040ce: e019 b.n 8004104 <HAL_ADC_ConfigChannel+0x2d4>
  9321. 80040d0: 683b ldr r3, [r7, #0]
  9322. 80040d2: 681b ldr r3, [r3, #0]
  9323. 80040d4: 65bb str r3, [r7, #88] @ 0x58
  9324. __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
  9325. 80040d6: 6dbb ldr r3, [r7, #88] @ 0x58
  9326. 80040d8: fa93 f3a3 rbit r3, r3
  9327. 80040dc: 657b str r3, [r7, #84] @ 0x54
  9328. return result;
  9329. 80040de: 6d7b ldr r3, [r7, #84] @ 0x54
  9330. 80040e0: 65fb str r3, [r7, #92] @ 0x5c
  9331. if (value == 0U)
  9332. 80040e2: 6dfb ldr r3, [r7, #92] @ 0x5c
  9333. 80040e4: 2b00 cmp r3, #0
  9334. 80040e6: d101 bne.n 80040ec <HAL_ADC_ConfigChannel+0x2bc>
  9335. return 32U;
  9336. 80040e8: 2320 movs r3, #32
  9337. 80040ea: e003 b.n 80040f4 <HAL_ADC_ConfigChannel+0x2c4>
  9338. return __builtin_clz(value);
  9339. 80040ec: 6dfb ldr r3, [r7, #92] @ 0x5c
  9340. 80040ee: fab3 f383 clz r3, r3
  9341. 80040f2: b2db uxtb r3, r3
  9342. 80040f4: 3301 adds r3, #1
  9343. 80040f6: f003 031f and.w r3, r3, #31
  9344. 80040fa: 2b09 cmp r3, #9
  9345. 80040fc: bf94 ite ls
  9346. 80040fe: 2301 movls r3, #1
  9347. 8004100: 2300 movhi r3, #0
  9348. 8004102: b2db uxtb r3, r3
  9349. LL_ADC_SetChannelSamplingTime(hadc->Instance,
  9350. 8004104: 2b00 cmp r3, #0
  9351. 8004106: d079 beq.n 80041fc <HAL_ADC_ConfigChannel+0x3cc>
  9352. (uint32_t)(__LL_ADC_DECIMAL_NB_TO_CHANNEL((__LL_ADC_CHANNEL_TO_DECIMAL_NB((uint32_t)sConfig->Channel) + 1UL) & 0x1FUL)),
  9353. 8004108: 683b ldr r3, [r7, #0]
  9354. 800410a: 681b ldr r3, [r3, #0]
  9355. 800410c: f3c3 0313 ubfx r3, r3, #0, #20
  9356. 8004110: 2b00 cmp r3, #0
  9357. 8004112: d107 bne.n 8004124 <HAL_ADC_ConfigChannel+0x2f4>
  9358. 8004114: 683b ldr r3, [r7, #0]
  9359. 8004116: 681b ldr r3, [r3, #0]
  9360. 8004118: 0e9b lsrs r3, r3, #26
  9361. 800411a: 3301 adds r3, #1
  9362. 800411c: 069b lsls r3, r3, #26
  9363. 800411e: f003 42f8 and.w r2, r3, #2080374784 @ 0x7c000000
  9364. 8004122: e015 b.n 8004150 <HAL_ADC_ConfigChannel+0x320>
  9365. 8004124: 683b ldr r3, [r7, #0]
  9366. 8004126: 681b ldr r3, [r3, #0]
  9367. 8004128: 64fb str r3, [r7, #76] @ 0x4c
  9368. __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
  9369. 800412a: 6cfb ldr r3, [r7, #76] @ 0x4c
  9370. 800412c: fa93 f3a3 rbit r3, r3
  9371. 8004130: 64bb str r3, [r7, #72] @ 0x48
  9372. return result;
  9373. 8004132: 6cbb ldr r3, [r7, #72] @ 0x48
  9374. 8004134: 653b str r3, [r7, #80] @ 0x50
  9375. if (value == 0U)
  9376. 8004136: 6d3b ldr r3, [r7, #80] @ 0x50
  9377. 8004138: 2b00 cmp r3, #0
  9378. 800413a: d101 bne.n 8004140 <HAL_ADC_ConfigChannel+0x310>
  9379. return 32U;
  9380. 800413c: 2320 movs r3, #32
  9381. 800413e: e003 b.n 8004148 <HAL_ADC_ConfigChannel+0x318>
  9382. return __builtin_clz(value);
  9383. 8004140: 6d3b ldr r3, [r7, #80] @ 0x50
  9384. 8004142: fab3 f383 clz r3, r3
  9385. 8004146: b2db uxtb r3, r3
  9386. 8004148: 3301 adds r3, #1
  9387. 800414a: 069b lsls r3, r3, #26
  9388. 800414c: f003 42f8 and.w r2, r3, #2080374784 @ 0x7c000000
  9389. 8004150: 683b ldr r3, [r7, #0]
  9390. 8004152: 681b ldr r3, [r3, #0]
  9391. 8004154: f3c3 0313 ubfx r3, r3, #0, #20
  9392. 8004158: 2b00 cmp r3, #0
  9393. 800415a: d109 bne.n 8004170 <HAL_ADC_ConfigChannel+0x340>
  9394. 800415c: 683b ldr r3, [r7, #0]
  9395. 800415e: 681b ldr r3, [r3, #0]
  9396. 8004160: 0e9b lsrs r3, r3, #26
  9397. 8004162: 3301 adds r3, #1
  9398. 8004164: f003 031f and.w r3, r3, #31
  9399. 8004168: 2101 movs r1, #1
  9400. 800416a: fa01 f303 lsl.w r3, r1, r3
  9401. 800416e: e017 b.n 80041a0 <HAL_ADC_ConfigChannel+0x370>
  9402. 8004170: 683b ldr r3, [r7, #0]
  9403. 8004172: 681b ldr r3, [r3, #0]
  9404. 8004174: 643b str r3, [r7, #64] @ 0x40
  9405. __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
  9406. 8004176: 6c3b ldr r3, [r7, #64] @ 0x40
  9407. 8004178: fa93 f3a3 rbit r3, r3
  9408. 800417c: 63fb str r3, [r7, #60] @ 0x3c
  9409. return result;
  9410. 800417e: 6bfb ldr r3, [r7, #60] @ 0x3c
  9411. 8004180: 647b str r3, [r7, #68] @ 0x44
  9412. if (value == 0U)
  9413. 8004182: 6c7b ldr r3, [r7, #68] @ 0x44
  9414. 8004184: 2b00 cmp r3, #0
  9415. 8004186: d101 bne.n 800418c <HAL_ADC_ConfigChannel+0x35c>
  9416. return 32U;
  9417. 8004188: 2320 movs r3, #32
  9418. 800418a: e003 b.n 8004194 <HAL_ADC_ConfigChannel+0x364>
  9419. return __builtin_clz(value);
  9420. 800418c: 6c7b ldr r3, [r7, #68] @ 0x44
  9421. 800418e: fab3 f383 clz r3, r3
  9422. 8004192: b2db uxtb r3, r3
  9423. 8004194: 3301 adds r3, #1
  9424. 8004196: f003 031f and.w r3, r3, #31
  9425. 800419a: 2101 movs r1, #1
  9426. 800419c: fa01 f303 lsl.w r3, r1, r3
  9427. 80041a0: ea42 0103 orr.w r1, r2, r3
  9428. 80041a4: 683b ldr r3, [r7, #0]
  9429. 80041a6: 681b ldr r3, [r3, #0]
  9430. 80041a8: f3c3 0313 ubfx r3, r3, #0, #20
  9431. 80041ac: 2b00 cmp r3, #0
  9432. 80041ae: d10a bne.n 80041c6 <HAL_ADC_ConfigChannel+0x396>
  9433. 80041b0: 683b ldr r3, [r7, #0]
  9434. 80041b2: 681b ldr r3, [r3, #0]
  9435. 80041b4: 0e9b lsrs r3, r3, #26
  9436. 80041b6: 3301 adds r3, #1
  9437. 80041b8: f003 021f and.w r2, r3, #31
  9438. 80041bc: 4613 mov r3, r2
  9439. 80041be: 005b lsls r3, r3, #1
  9440. 80041c0: 4413 add r3, r2
  9441. 80041c2: 051b lsls r3, r3, #20
  9442. 80041c4: e018 b.n 80041f8 <HAL_ADC_ConfigChannel+0x3c8>
  9443. 80041c6: 683b ldr r3, [r7, #0]
  9444. 80041c8: 681b ldr r3, [r3, #0]
  9445. 80041ca: 637b str r3, [r7, #52] @ 0x34
  9446. __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
  9447. 80041cc: 6b7b ldr r3, [r7, #52] @ 0x34
  9448. 80041ce: fa93 f3a3 rbit r3, r3
  9449. 80041d2: 633b str r3, [r7, #48] @ 0x30
  9450. return result;
  9451. 80041d4: 6b3b ldr r3, [r7, #48] @ 0x30
  9452. 80041d6: 63bb str r3, [r7, #56] @ 0x38
  9453. if (value == 0U)
  9454. 80041d8: 6bbb ldr r3, [r7, #56] @ 0x38
  9455. 80041da: 2b00 cmp r3, #0
  9456. 80041dc: d101 bne.n 80041e2 <HAL_ADC_ConfigChannel+0x3b2>
  9457. return 32U;
  9458. 80041de: 2320 movs r3, #32
  9459. 80041e0: e003 b.n 80041ea <HAL_ADC_ConfigChannel+0x3ba>
  9460. return __builtin_clz(value);
  9461. 80041e2: 6bbb ldr r3, [r7, #56] @ 0x38
  9462. 80041e4: fab3 f383 clz r3, r3
  9463. 80041e8: b2db uxtb r3, r3
  9464. 80041ea: 3301 adds r3, #1
  9465. 80041ec: f003 021f and.w r2, r3, #31
  9466. 80041f0: 4613 mov r3, r2
  9467. 80041f2: 005b lsls r3, r3, #1
  9468. 80041f4: 4413 add r3, r2
  9469. 80041f6: 051b lsls r3, r3, #20
  9470. LL_ADC_SetChannelSamplingTime(hadc->Instance,
  9471. 80041f8: 430b orrs r3, r1
  9472. 80041fa: e07e b.n 80042fa <HAL_ADC_ConfigChannel+0x4ca>
  9473. (uint32_t)(__LL_ADC_DECIMAL_NB_TO_CHANNEL((__LL_ADC_CHANNEL_TO_DECIMAL_NB((uint32_t)sConfig->Channel) + 1UL) & 0x1FUL)),
  9474. 80041fc: 683b ldr r3, [r7, #0]
  9475. 80041fe: 681b ldr r3, [r3, #0]
  9476. 8004200: f3c3 0313 ubfx r3, r3, #0, #20
  9477. 8004204: 2b00 cmp r3, #0
  9478. 8004206: d107 bne.n 8004218 <HAL_ADC_ConfigChannel+0x3e8>
  9479. 8004208: 683b ldr r3, [r7, #0]
  9480. 800420a: 681b ldr r3, [r3, #0]
  9481. 800420c: 0e9b lsrs r3, r3, #26
  9482. 800420e: 3301 adds r3, #1
  9483. 8004210: 069b lsls r3, r3, #26
  9484. 8004212: f003 42f8 and.w r2, r3, #2080374784 @ 0x7c000000
  9485. 8004216: e015 b.n 8004244 <HAL_ADC_ConfigChannel+0x414>
  9486. 8004218: 683b ldr r3, [r7, #0]
  9487. 800421a: 681b ldr r3, [r3, #0]
  9488. 800421c: 62bb str r3, [r7, #40] @ 0x28
  9489. __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
  9490. 800421e: 6abb ldr r3, [r7, #40] @ 0x28
  9491. 8004220: fa93 f3a3 rbit r3, r3
  9492. 8004224: 627b str r3, [r7, #36] @ 0x24
  9493. return result;
  9494. 8004226: 6a7b ldr r3, [r7, #36] @ 0x24
  9495. 8004228: 62fb str r3, [r7, #44] @ 0x2c
  9496. if (value == 0U)
  9497. 800422a: 6afb ldr r3, [r7, #44] @ 0x2c
  9498. 800422c: 2b00 cmp r3, #0
  9499. 800422e: d101 bne.n 8004234 <HAL_ADC_ConfigChannel+0x404>
  9500. return 32U;
  9501. 8004230: 2320 movs r3, #32
  9502. 8004232: e003 b.n 800423c <HAL_ADC_ConfigChannel+0x40c>
  9503. return __builtin_clz(value);
  9504. 8004234: 6afb ldr r3, [r7, #44] @ 0x2c
  9505. 8004236: fab3 f383 clz r3, r3
  9506. 800423a: b2db uxtb r3, r3
  9507. 800423c: 3301 adds r3, #1
  9508. 800423e: 069b lsls r3, r3, #26
  9509. 8004240: f003 42f8 and.w r2, r3, #2080374784 @ 0x7c000000
  9510. 8004244: 683b ldr r3, [r7, #0]
  9511. 8004246: 681b ldr r3, [r3, #0]
  9512. 8004248: f3c3 0313 ubfx r3, r3, #0, #20
  9513. 800424c: 2b00 cmp r3, #0
  9514. 800424e: d109 bne.n 8004264 <HAL_ADC_ConfigChannel+0x434>
  9515. 8004250: 683b ldr r3, [r7, #0]
  9516. 8004252: 681b ldr r3, [r3, #0]
  9517. 8004254: 0e9b lsrs r3, r3, #26
  9518. 8004256: 3301 adds r3, #1
  9519. 8004258: f003 031f and.w r3, r3, #31
  9520. 800425c: 2101 movs r1, #1
  9521. 800425e: fa01 f303 lsl.w r3, r1, r3
  9522. 8004262: e017 b.n 8004294 <HAL_ADC_ConfigChannel+0x464>
  9523. 8004264: 683b ldr r3, [r7, #0]
  9524. 8004266: 681b ldr r3, [r3, #0]
  9525. 8004268: 61fb str r3, [r7, #28]
  9526. __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
  9527. 800426a: 69fb ldr r3, [r7, #28]
  9528. 800426c: fa93 f3a3 rbit r3, r3
  9529. 8004270: 61bb str r3, [r7, #24]
  9530. return result;
  9531. 8004272: 69bb ldr r3, [r7, #24]
  9532. 8004274: 623b str r3, [r7, #32]
  9533. if (value == 0U)
  9534. 8004276: 6a3b ldr r3, [r7, #32]
  9535. 8004278: 2b00 cmp r3, #0
  9536. 800427a: d101 bne.n 8004280 <HAL_ADC_ConfigChannel+0x450>
  9537. return 32U;
  9538. 800427c: 2320 movs r3, #32
  9539. 800427e: e003 b.n 8004288 <HAL_ADC_ConfigChannel+0x458>
  9540. return __builtin_clz(value);
  9541. 8004280: 6a3b ldr r3, [r7, #32]
  9542. 8004282: fab3 f383 clz r3, r3
  9543. 8004286: b2db uxtb r3, r3
  9544. 8004288: 3301 adds r3, #1
  9545. 800428a: f003 031f and.w r3, r3, #31
  9546. 800428e: 2101 movs r1, #1
  9547. 8004290: fa01 f303 lsl.w r3, r1, r3
  9548. 8004294: ea42 0103 orr.w r1, r2, r3
  9549. 8004298: 683b ldr r3, [r7, #0]
  9550. 800429a: 681b ldr r3, [r3, #0]
  9551. 800429c: f3c3 0313 ubfx r3, r3, #0, #20
  9552. 80042a0: 2b00 cmp r3, #0
  9553. 80042a2: d10d bne.n 80042c0 <HAL_ADC_ConfigChannel+0x490>
  9554. 80042a4: 683b ldr r3, [r7, #0]
  9555. 80042a6: 681b ldr r3, [r3, #0]
  9556. 80042a8: 0e9b lsrs r3, r3, #26
  9557. 80042aa: 3301 adds r3, #1
  9558. 80042ac: f003 021f and.w r2, r3, #31
  9559. 80042b0: 4613 mov r3, r2
  9560. 80042b2: 005b lsls r3, r3, #1
  9561. 80042b4: 4413 add r3, r2
  9562. 80042b6: 3b1e subs r3, #30
  9563. 80042b8: 051b lsls r3, r3, #20
  9564. 80042ba: f043 7300 orr.w r3, r3, #33554432 @ 0x2000000
  9565. 80042be: e01b b.n 80042f8 <HAL_ADC_ConfigChannel+0x4c8>
  9566. 80042c0: 683b ldr r3, [r7, #0]
  9567. 80042c2: 681b ldr r3, [r3, #0]
  9568. 80042c4: 613b str r3, [r7, #16]
  9569. __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
  9570. 80042c6: 693b ldr r3, [r7, #16]
  9571. 80042c8: fa93 f3a3 rbit r3, r3
  9572. 80042cc: 60fb str r3, [r7, #12]
  9573. return result;
  9574. 80042ce: 68fb ldr r3, [r7, #12]
  9575. 80042d0: 617b str r3, [r7, #20]
  9576. if (value == 0U)
  9577. 80042d2: 697b ldr r3, [r7, #20]
  9578. 80042d4: 2b00 cmp r3, #0
  9579. 80042d6: d101 bne.n 80042dc <HAL_ADC_ConfigChannel+0x4ac>
  9580. return 32U;
  9581. 80042d8: 2320 movs r3, #32
  9582. 80042da: e003 b.n 80042e4 <HAL_ADC_ConfigChannel+0x4b4>
  9583. return __builtin_clz(value);
  9584. 80042dc: 697b ldr r3, [r7, #20]
  9585. 80042de: fab3 f383 clz r3, r3
  9586. 80042e2: b2db uxtb r3, r3
  9587. 80042e4: 3301 adds r3, #1
  9588. 80042e6: f003 021f and.w r2, r3, #31
  9589. 80042ea: 4613 mov r3, r2
  9590. 80042ec: 005b lsls r3, r3, #1
  9591. 80042ee: 4413 add r3, r2
  9592. 80042f0: 3b1e subs r3, #30
  9593. 80042f2: 051b lsls r3, r3, #20
  9594. 80042f4: f043 7300 orr.w r3, r3, #33554432 @ 0x2000000
  9595. LL_ADC_SetChannelSamplingTime(hadc->Instance,
  9596. 80042f8: 430b orrs r3, r1
  9597. 80042fa: 683a ldr r2, [r7, #0]
  9598. 80042fc: 6892 ldr r2, [r2, #8]
  9599. 80042fe: 4619 mov r1, r3
  9600. 8004300: f7ff f9e8 bl 80036d4 <LL_ADC_SetChannelSamplingTime>
  9601. /* If internal channel selected, enable dedicated internal buffers and */
  9602. /* paths. */
  9603. /* Note: these internal measurement paths can be disabled using */
  9604. /* HAL_ADC_DeInit(). */
  9605. if (__LL_ADC_IS_CHANNEL_INTERNAL(sConfig->Channel))
  9606. 8004304: 683b ldr r3, [r7, #0]
  9607. 8004306: 681b ldr r3, [r3, #0]
  9608. 8004308: 2b00 cmp r3, #0
  9609. 800430a: f280 80cf bge.w 80044ac <HAL_ADC_ConfigChannel+0x67c>
  9610. {
  9611. /* Configuration of common ADC parameters */
  9612. tmp_config_internal_channel = LL_ADC_GetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance));
  9613. 800430e: 687b ldr r3, [r7, #4]
  9614. 8004310: 681b ldr r3, [r3, #0]
  9615. 8004312: 4a06 ldr r2, [pc, #24] @ (800432c <HAL_ADC_ConfigChannel+0x4fc>)
  9616. 8004314: 4293 cmp r3, r2
  9617. 8004316: d004 beq.n 8004322 <HAL_ADC_ConfigChannel+0x4f2>
  9618. 8004318: 687b ldr r3, [r7, #4]
  9619. 800431a: 681b ldr r3, [r3, #0]
  9620. 800431c: 4a04 ldr r2, [pc, #16] @ (8004330 <HAL_ADC_ConfigChannel+0x500>)
  9621. 800431e: 4293 cmp r3, r2
  9622. 8004320: d10a bne.n 8004338 <HAL_ADC_ConfigChannel+0x508>
  9623. 8004322: 4b04 ldr r3, [pc, #16] @ (8004334 <HAL_ADC_ConfigChannel+0x504>)
  9624. 8004324: e009 b.n 800433a <HAL_ADC_ConfigChannel+0x50a>
  9625. 8004326: bf00 nop
  9626. 8004328: 47ff0000 .word 0x47ff0000
  9627. 800432c: 40022000 .word 0x40022000
  9628. 8004330: 40022100 .word 0x40022100
  9629. 8004334: 40022300 .word 0x40022300
  9630. 8004338: 4b61 ldr r3, [pc, #388] @ (80044c0 <HAL_ADC_ConfigChannel+0x690>)
  9631. 800433a: 4618 mov r0, r3
  9632. 800433c: f7ff f916 bl 800356c <LL_ADC_GetCommonPathInternalCh>
  9633. 8004340: 66f8 str r0, [r7, #108] @ 0x6c
  9634. /* Software is allowed to change common parameters only when all ADCs */
  9635. /* of the common group are disabled. */
  9636. if (__LL_ADC_IS_ENABLED_ALL_COMMON_INSTANCE(__LL_ADC_COMMON_INSTANCE(hadc->Instance)) == 0UL)
  9637. 8004342: 687b ldr r3, [r7, #4]
  9638. 8004344: 681b ldr r3, [r3, #0]
  9639. 8004346: 4a5f ldr r2, [pc, #380] @ (80044c4 <HAL_ADC_ConfigChannel+0x694>)
  9640. 8004348: 4293 cmp r3, r2
  9641. 800434a: d004 beq.n 8004356 <HAL_ADC_ConfigChannel+0x526>
  9642. 800434c: 687b ldr r3, [r7, #4]
  9643. 800434e: 681b ldr r3, [r3, #0]
  9644. 8004350: 4a5d ldr r2, [pc, #372] @ (80044c8 <HAL_ADC_ConfigChannel+0x698>)
  9645. 8004352: 4293 cmp r3, r2
  9646. 8004354: d10e bne.n 8004374 <HAL_ADC_ConfigChannel+0x544>
  9647. 8004356: 485b ldr r0, [pc, #364] @ (80044c4 <HAL_ADC_ConfigChannel+0x694>)
  9648. 8004358: f7ff fa90 bl 800387c <LL_ADC_IsEnabled>
  9649. 800435c: 4604 mov r4, r0
  9650. 800435e: 485a ldr r0, [pc, #360] @ (80044c8 <HAL_ADC_ConfigChannel+0x698>)
  9651. 8004360: f7ff fa8c bl 800387c <LL_ADC_IsEnabled>
  9652. 8004364: 4603 mov r3, r0
  9653. 8004366: 4323 orrs r3, r4
  9654. 8004368: 2b00 cmp r3, #0
  9655. 800436a: bf0c ite eq
  9656. 800436c: 2301 moveq r3, #1
  9657. 800436e: 2300 movne r3, #0
  9658. 8004370: b2db uxtb r3, r3
  9659. 8004372: e008 b.n 8004386 <HAL_ADC_ConfigChannel+0x556>
  9660. 8004374: 4855 ldr r0, [pc, #340] @ (80044cc <HAL_ADC_ConfigChannel+0x69c>)
  9661. 8004376: f7ff fa81 bl 800387c <LL_ADC_IsEnabled>
  9662. 800437a: 4603 mov r3, r0
  9663. 800437c: 2b00 cmp r3, #0
  9664. 800437e: bf0c ite eq
  9665. 8004380: 2301 moveq r3, #1
  9666. 8004382: 2300 movne r3, #0
  9667. 8004384: b2db uxtb r3, r3
  9668. 8004386: 2b00 cmp r3, #0
  9669. 8004388: d07d beq.n 8004486 <HAL_ADC_ConfigChannel+0x656>
  9670. {
  9671. /* If the requested internal measurement path has already been enabled, */
  9672. /* bypass the configuration processing. */
  9673. if ((sConfig->Channel == ADC_CHANNEL_TEMPSENSOR) && ((tmp_config_internal_channel & LL_ADC_PATH_INTERNAL_TEMPSENSOR) == 0UL))
  9674. 800438a: 683b ldr r3, [r7, #0]
  9675. 800438c: 681b ldr r3, [r3, #0]
  9676. 800438e: 4a50 ldr r2, [pc, #320] @ (80044d0 <HAL_ADC_ConfigChannel+0x6a0>)
  9677. 8004390: 4293 cmp r3, r2
  9678. 8004392: d130 bne.n 80043f6 <HAL_ADC_ConfigChannel+0x5c6>
  9679. 8004394: 6efb ldr r3, [r7, #108] @ 0x6c
  9680. 8004396: f403 0300 and.w r3, r3, #8388608 @ 0x800000
  9681. 800439a: 2b00 cmp r3, #0
  9682. 800439c: d12b bne.n 80043f6 <HAL_ADC_ConfigChannel+0x5c6>
  9683. {
  9684. if (ADC_TEMPERATURE_SENSOR_INSTANCE(hadc))
  9685. 800439e: 687b ldr r3, [r7, #4]
  9686. 80043a0: 681b ldr r3, [r3, #0]
  9687. 80043a2: 4a4a ldr r2, [pc, #296] @ (80044cc <HAL_ADC_ConfigChannel+0x69c>)
  9688. 80043a4: 4293 cmp r3, r2
  9689. 80043a6: f040 8081 bne.w 80044ac <HAL_ADC_ConfigChannel+0x67c>
  9690. {
  9691. LL_ADC_SetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance), LL_ADC_PATH_INTERNAL_TEMPSENSOR | tmp_config_internal_channel);
  9692. 80043aa: 687b ldr r3, [r7, #4]
  9693. 80043ac: 681b ldr r3, [r3, #0]
  9694. 80043ae: 4a45 ldr r2, [pc, #276] @ (80044c4 <HAL_ADC_ConfigChannel+0x694>)
  9695. 80043b0: 4293 cmp r3, r2
  9696. 80043b2: d004 beq.n 80043be <HAL_ADC_ConfigChannel+0x58e>
  9697. 80043b4: 687b ldr r3, [r7, #4]
  9698. 80043b6: 681b ldr r3, [r3, #0]
  9699. 80043b8: 4a43 ldr r2, [pc, #268] @ (80044c8 <HAL_ADC_ConfigChannel+0x698>)
  9700. 80043ba: 4293 cmp r3, r2
  9701. 80043bc: d101 bne.n 80043c2 <HAL_ADC_ConfigChannel+0x592>
  9702. 80043be: 4a45 ldr r2, [pc, #276] @ (80044d4 <HAL_ADC_ConfigChannel+0x6a4>)
  9703. 80043c0: e000 b.n 80043c4 <HAL_ADC_ConfigChannel+0x594>
  9704. 80043c2: 4a3f ldr r2, [pc, #252] @ (80044c0 <HAL_ADC_ConfigChannel+0x690>)
  9705. 80043c4: 6efb ldr r3, [r7, #108] @ 0x6c
  9706. 80043c6: f443 0300 orr.w r3, r3, #8388608 @ 0x800000
  9707. 80043ca: 4619 mov r1, r3
  9708. 80043cc: 4610 mov r0, r2
  9709. 80043ce: f7ff f8ba bl 8003546 <LL_ADC_SetCommonPathInternalCh>
  9710. /* Delay for temperature sensor stabilization time */
  9711. /* Wait loop initialization and execution */
  9712. /* Note: Variable divided by 2 to compensate partially */
  9713. /* CPU processing cycles, scaling in us split to not */
  9714. /* exceed 32 bits register capacity and handle low frequency. */
  9715. wait_loop_index = ((LL_ADC_DELAY_TEMPSENSOR_STAB_US / 10UL) * ((SystemCoreClock / (100000UL * 2UL)) + 1UL));
  9716. 80043d2: 4b41 ldr r3, [pc, #260] @ (80044d8 <HAL_ADC_ConfigChannel+0x6a8>)
  9717. 80043d4: 681b ldr r3, [r3, #0]
  9718. 80043d6: 099b lsrs r3, r3, #6
  9719. 80043d8: 4a40 ldr r2, [pc, #256] @ (80044dc <HAL_ADC_ConfigChannel+0x6ac>)
  9720. 80043da: fba2 2303 umull r2, r3, r2, r3
  9721. 80043de: 099b lsrs r3, r3, #6
  9722. 80043e0: 3301 adds r3, #1
  9723. 80043e2: 005b lsls r3, r3, #1
  9724. 80043e4: 60bb str r3, [r7, #8]
  9725. while (wait_loop_index != 0UL)
  9726. 80043e6: e002 b.n 80043ee <HAL_ADC_ConfigChannel+0x5be>
  9727. {
  9728. wait_loop_index--;
  9729. 80043e8: 68bb ldr r3, [r7, #8]
  9730. 80043ea: 3b01 subs r3, #1
  9731. 80043ec: 60bb str r3, [r7, #8]
  9732. while (wait_loop_index != 0UL)
  9733. 80043ee: 68bb ldr r3, [r7, #8]
  9734. 80043f0: 2b00 cmp r3, #0
  9735. 80043f2: d1f9 bne.n 80043e8 <HAL_ADC_ConfigChannel+0x5b8>
  9736. if (ADC_TEMPERATURE_SENSOR_INSTANCE(hadc))
  9737. 80043f4: e05a b.n 80044ac <HAL_ADC_ConfigChannel+0x67c>
  9738. }
  9739. }
  9740. }
  9741. else if ((sConfig->Channel == ADC_CHANNEL_VBAT) && ((tmp_config_internal_channel & LL_ADC_PATH_INTERNAL_VBAT) == 0UL))
  9742. 80043f6: 683b ldr r3, [r7, #0]
  9743. 80043f8: 681b ldr r3, [r3, #0]
  9744. 80043fa: 4a39 ldr r2, [pc, #228] @ (80044e0 <HAL_ADC_ConfigChannel+0x6b0>)
  9745. 80043fc: 4293 cmp r3, r2
  9746. 80043fe: d11e bne.n 800443e <HAL_ADC_ConfigChannel+0x60e>
  9747. 8004400: 6efb ldr r3, [r7, #108] @ 0x6c
  9748. 8004402: f003 7380 and.w r3, r3, #16777216 @ 0x1000000
  9749. 8004406: 2b00 cmp r3, #0
  9750. 8004408: d119 bne.n 800443e <HAL_ADC_ConfigChannel+0x60e>
  9751. {
  9752. if (ADC_BATTERY_VOLTAGE_INSTANCE(hadc))
  9753. 800440a: 687b ldr r3, [r7, #4]
  9754. 800440c: 681b ldr r3, [r3, #0]
  9755. 800440e: 4a2f ldr r2, [pc, #188] @ (80044cc <HAL_ADC_ConfigChannel+0x69c>)
  9756. 8004410: 4293 cmp r3, r2
  9757. 8004412: d14b bne.n 80044ac <HAL_ADC_ConfigChannel+0x67c>
  9758. {
  9759. LL_ADC_SetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance), LL_ADC_PATH_INTERNAL_VBAT | tmp_config_internal_channel);
  9760. 8004414: 687b ldr r3, [r7, #4]
  9761. 8004416: 681b ldr r3, [r3, #0]
  9762. 8004418: 4a2a ldr r2, [pc, #168] @ (80044c4 <HAL_ADC_ConfigChannel+0x694>)
  9763. 800441a: 4293 cmp r3, r2
  9764. 800441c: d004 beq.n 8004428 <HAL_ADC_ConfigChannel+0x5f8>
  9765. 800441e: 687b ldr r3, [r7, #4]
  9766. 8004420: 681b ldr r3, [r3, #0]
  9767. 8004422: 4a29 ldr r2, [pc, #164] @ (80044c8 <HAL_ADC_ConfigChannel+0x698>)
  9768. 8004424: 4293 cmp r3, r2
  9769. 8004426: d101 bne.n 800442c <HAL_ADC_ConfigChannel+0x5fc>
  9770. 8004428: 4a2a ldr r2, [pc, #168] @ (80044d4 <HAL_ADC_ConfigChannel+0x6a4>)
  9771. 800442a: e000 b.n 800442e <HAL_ADC_ConfigChannel+0x5fe>
  9772. 800442c: 4a24 ldr r2, [pc, #144] @ (80044c0 <HAL_ADC_ConfigChannel+0x690>)
  9773. 800442e: 6efb ldr r3, [r7, #108] @ 0x6c
  9774. 8004430: f043 7380 orr.w r3, r3, #16777216 @ 0x1000000
  9775. 8004434: 4619 mov r1, r3
  9776. 8004436: 4610 mov r0, r2
  9777. 8004438: f7ff f885 bl 8003546 <LL_ADC_SetCommonPathInternalCh>
  9778. if (ADC_BATTERY_VOLTAGE_INSTANCE(hadc))
  9779. 800443c: e036 b.n 80044ac <HAL_ADC_ConfigChannel+0x67c>
  9780. }
  9781. }
  9782. else if ((sConfig->Channel == ADC_CHANNEL_VREFINT) && ((tmp_config_internal_channel & LL_ADC_PATH_INTERNAL_VREFINT) == 0UL))
  9783. 800443e: 683b ldr r3, [r7, #0]
  9784. 8004440: 681b ldr r3, [r3, #0]
  9785. 8004442: 4a28 ldr r2, [pc, #160] @ (80044e4 <HAL_ADC_ConfigChannel+0x6b4>)
  9786. 8004444: 4293 cmp r3, r2
  9787. 8004446: d131 bne.n 80044ac <HAL_ADC_ConfigChannel+0x67c>
  9788. 8004448: 6efb ldr r3, [r7, #108] @ 0x6c
  9789. 800444a: f403 0380 and.w r3, r3, #4194304 @ 0x400000
  9790. 800444e: 2b00 cmp r3, #0
  9791. 8004450: d12c bne.n 80044ac <HAL_ADC_ConfigChannel+0x67c>
  9792. {
  9793. if (ADC_VREFINT_INSTANCE(hadc))
  9794. 8004452: 687b ldr r3, [r7, #4]
  9795. 8004454: 681b ldr r3, [r3, #0]
  9796. 8004456: 4a1d ldr r2, [pc, #116] @ (80044cc <HAL_ADC_ConfigChannel+0x69c>)
  9797. 8004458: 4293 cmp r3, r2
  9798. 800445a: d127 bne.n 80044ac <HAL_ADC_ConfigChannel+0x67c>
  9799. {
  9800. LL_ADC_SetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance), LL_ADC_PATH_INTERNAL_VREFINT | tmp_config_internal_channel);
  9801. 800445c: 687b ldr r3, [r7, #4]
  9802. 800445e: 681b ldr r3, [r3, #0]
  9803. 8004460: 4a18 ldr r2, [pc, #96] @ (80044c4 <HAL_ADC_ConfigChannel+0x694>)
  9804. 8004462: 4293 cmp r3, r2
  9805. 8004464: d004 beq.n 8004470 <HAL_ADC_ConfigChannel+0x640>
  9806. 8004466: 687b ldr r3, [r7, #4]
  9807. 8004468: 681b ldr r3, [r3, #0]
  9808. 800446a: 4a17 ldr r2, [pc, #92] @ (80044c8 <HAL_ADC_ConfigChannel+0x698>)
  9809. 800446c: 4293 cmp r3, r2
  9810. 800446e: d101 bne.n 8004474 <HAL_ADC_ConfigChannel+0x644>
  9811. 8004470: 4a18 ldr r2, [pc, #96] @ (80044d4 <HAL_ADC_ConfigChannel+0x6a4>)
  9812. 8004472: e000 b.n 8004476 <HAL_ADC_ConfigChannel+0x646>
  9813. 8004474: 4a12 ldr r2, [pc, #72] @ (80044c0 <HAL_ADC_ConfigChannel+0x690>)
  9814. 8004476: 6efb ldr r3, [r7, #108] @ 0x6c
  9815. 8004478: f443 0380 orr.w r3, r3, #4194304 @ 0x400000
  9816. 800447c: 4619 mov r1, r3
  9817. 800447e: 4610 mov r0, r2
  9818. 8004480: f7ff f861 bl 8003546 <LL_ADC_SetCommonPathInternalCh>
  9819. 8004484: e012 b.n 80044ac <HAL_ADC_ConfigChannel+0x67c>
  9820. /* enabled and other ADC of the common group are enabled, internal */
  9821. /* measurement paths cannot be enabled. */
  9822. else
  9823. {
  9824. /* Update ADC state machine to error */
  9825. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);
  9826. 8004486: 687b ldr r3, [r7, #4]
  9827. 8004488: 6d5b ldr r3, [r3, #84] @ 0x54
  9828. 800448a: f043 0220 orr.w r2, r3, #32
  9829. 800448e: 687b ldr r3, [r7, #4]
  9830. 8004490: 655a str r2, [r3, #84] @ 0x54
  9831. tmp_hal_status = HAL_ERROR;
  9832. 8004492: 2301 movs r3, #1
  9833. 8004494: f887 307f strb.w r3, [r7, #127] @ 0x7f
  9834. 8004498: e008 b.n 80044ac <HAL_ADC_ConfigChannel+0x67c>
  9835. /* channel could be done on neither of the channel configuration structure */
  9836. /* parameters. */
  9837. else
  9838. {
  9839. /* Update ADC state machine to error */
  9840. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);
  9841. 800449a: 687b ldr r3, [r7, #4]
  9842. 800449c: 6d5b ldr r3, [r3, #84] @ 0x54
  9843. 800449e: f043 0220 orr.w r2, r3, #32
  9844. 80044a2: 687b ldr r3, [r7, #4]
  9845. 80044a4: 655a str r2, [r3, #84] @ 0x54
  9846. tmp_hal_status = HAL_ERROR;
  9847. 80044a6: 2301 movs r3, #1
  9848. 80044a8: f887 307f strb.w r3, [r7, #127] @ 0x7f
  9849. }
  9850. /* Process unlocked */
  9851. __HAL_UNLOCK(hadc);
  9852. 80044ac: 687b ldr r3, [r7, #4]
  9853. 80044ae: 2200 movs r2, #0
  9854. 80044b0: f883 2050 strb.w r2, [r3, #80] @ 0x50
  9855. /* Return function status */
  9856. return tmp_hal_status;
  9857. 80044b4: f897 307f ldrb.w r3, [r7, #127] @ 0x7f
  9858. }
  9859. 80044b8: 4618 mov r0, r3
  9860. 80044ba: 3784 adds r7, #132 @ 0x84
  9861. 80044bc: 46bd mov sp, r7
  9862. 80044be: bd90 pop {r4, r7, pc}
  9863. 80044c0: 58026300 .word 0x58026300
  9864. 80044c4: 40022000 .word 0x40022000
  9865. 80044c8: 40022100 .word 0x40022100
  9866. 80044cc: 58026000 .word 0x58026000
  9867. 80044d0: cb840000 .word 0xcb840000
  9868. 80044d4: 40022300 .word 0x40022300
  9869. 80044d8: 24000034 .word 0x24000034
  9870. 80044dc: 053e2d63 .word 0x053e2d63
  9871. 80044e0: c7520000 .word 0xc7520000
  9872. 80044e4: cfb80000 .word 0xcfb80000
  9873. 080044e8 <ADC_Enable>:
  9874. * and voltage regulator must be enabled (done into HAL_ADC_Init()).
  9875. * @param hadc ADC handle
  9876. * @retval HAL status.
  9877. */
  9878. HAL_StatusTypeDef ADC_Enable(ADC_HandleTypeDef *hadc)
  9879. {
  9880. 80044e8: b580 push {r7, lr}
  9881. 80044ea: b084 sub sp, #16
  9882. 80044ec: af00 add r7, sp, #0
  9883. 80044ee: 6078 str r0, [r7, #4]
  9884. /* ADC enable and wait for ADC ready (in case of ADC is disabled or */
  9885. /* enabling phase not yet completed: flag ADC ready not yet set). */
  9886. /* Timeout implemented to not be stuck if ADC cannot be enabled (possible */
  9887. /* causes: ADC clock not running, ...). */
  9888. if (LL_ADC_IsEnabled(hadc->Instance) == 0UL)
  9889. 80044f0: 687b ldr r3, [r7, #4]
  9890. 80044f2: 681b ldr r3, [r3, #0]
  9891. 80044f4: 4618 mov r0, r3
  9892. 80044f6: f7ff f9c1 bl 800387c <LL_ADC_IsEnabled>
  9893. 80044fa: 4603 mov r3, r0
  9894. 80044fc: 2b00 cmp r3, #0
  9895. 80044fe: d16e bne.n 80045de <ADC_Enable+0xf6>
  9896. {
  9897. /* Check if conditions to enable the ADC are fulfilled */
  9898. 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)
  9899. 8004500: 687b ldr r3, [r7, #4]
  9900. 8004502: 681b ldr r3, [r3, #0]
  9901. 8004504: 689a ldr r2, [r3, #8]
  9902. 8004506: 4b38 ldr r3, [pc, #224] @ (80045e8 <ADC_Enable+0x100>)
  9903. 8004508: 4013 ands r3, r2
  9904. 800450a: 2b00 cmp r3, #0
  9905. 800450c: d00d beq.n 800452a <ADC_Enable+0x42>
  9906. {
  9907. /* Update ADC state machine to error */
  9908. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
  9909. 800450e: 687b ldr r3, [r7, #4]
  9910. 8004510: 6d5b ldr r3, [r3, #84] @ 0x54
  9911. 8004512: f043 0210 orr.w r2, r3, #16
  9912. 8004516: 687b ldr r3, [r7, #4]
  9913. 8004518: 655a str r2, [r3, #84] @ 0x54
  9914. /* Set ADC error code to ADC peripheral internal error */
  9915. SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);
  9916. 800451a: 687b ldr r3, [r7, #4]
  9917. 800451c: 6d9b ldr r3, [r3, #88] @ 0x58
  9918. 800451e: f043 0201 orr.w r2, r3, #1
  9919. 8004522: 687b ldr r3, [r7, #4]
  9920. 8004524: 659a str r2, [r3, #88] @ 0x58
  9921. return HAL_ERROR;
  9922. 8004526: 2301 movs r3, #1
  9923. 8004528: e05a b.n 80045e0 <ADC_Enable+0xf8>
  9924. }
  9925. /* Enable the ADC peripheral */
  9926. LL_ADC_Enable(hadc->Instance);
  9927. 800452a: 687b ldr r3, [r7, #4]
  9928. 800452c: 681b ldr r3, [r3, #0]
  9929. 800452e: 4618 mov r0, r3
  9930. 8004530: f7ff f97c bl 800382c <LL_ADC_Enable>
  9931. /* Wait for ADC effectively enabled */
  9932. tickstart = HAL_GetTick();
  9933. 8004534: f7fe ffc6 bl 80034c4 <HAL_GetTick>
  9934. 8004538: 60f8 str r0, [r7, #12]
  9935. /* Poll for ADC ready flag raised except case of multimode enabled
  9936. and ADC slave selected. */
  9937. uint32_t tmp_multimode_config = LL_ADC_GetMultimode(__LL_ADC_COMMON_INSTANCE(hadc->Instance));
  9938. 800453a: 687b ldr r3, [r7, #4]
  9939. 800453c: 681b ldr r3, [r3, #0]
  9940. 800453e: 4a2b ldr r2, [pc, #172] @ (80045ec <ADC_Enable+0x104>)
  9941. 8004540: 4293 cmp r3, r2
  9942. 8004542: d004 beq.n 800454e <ADC_Enable+0x66>
  9943. 8004544: 687b ldr r3, [r7, #4]
  9944. 8004546: 681b ldr r3, [r3, #0]
  9945. 8004548: 4a29 ldr r2, [pc, #164] @ (80045f0 <ADC_Enable+0x108>)
  9946. 800454a: 4293 cmp r3, r2
  9947. 800454c: d101 bne.n 8004552 <ADC_Enable+0x6a>
  9948. 800454e: 4b29 ldr r3, [pc, #164] @ (80045f4 <ADC_Enable+0x10c>)
  9949. 8004550: e000 b.n 8004554 <ADC_Enable+0x6c>
  9950. 8004552: 4b29 ldr r3, [pc, #164] @ (80045f8 <ADC_Enable+0x110>)
  9951. 8004554: 4618 mov r0, r3
  9952. 8004556: f7ff f90d bl 8003774 <LL_ADC_GetMultimode>
  9953. 800455a: 60b8 str r0, [r7, #8]
  9954. if ((__LL_ADC_MULTI_INSTANCE_MASTER(hadc->Instance) == hadc->Instance)
  9955. 800455c: 687b ldr r3, [r7, #4]
  9956. 800455e: 681b ldr r3, [r3, #0]
  9957. 8004560: 4a23 ldr r2, [pc, #140] @ (80045f0 <ADC_Enable+0x108>)
  9958. 8004562: 4293 cmp r3, r2
  9959. 8004564: d002 beq.n 800456c <ADC_Enable+0x84>
  9960. 8004566: 687b ldr r3, [r7, #4]
  9961. 8004568: 681b ldr r3, [r3, #0]
  9962. 800456a: e000 b.n 800456e <ADC_Enable+0x86>
  9963. 800456c: 4b1f ldr r3, [pc, #124] @ (80045ec <ADC_Enable+0x104>)
  9964. 800456e: 687a ldr r2, [r7, #4]
  9965. 8004570: 6812 ldr r2, [r2, #0]
  9966. 8004572: 4293 cmp r3, r2
  9967. 8004574: d02c beq.n 80045d0 <ADC_Enable+0xe8>
  9968. || (tmp_multimode_config == LL_ADC_MULTI_INDEPENDENT)
  9969. 8004576: 68bb ldr r3, [r7, #8]
  9970. 8004578: 2b00 cmp r3, #0
  9971. 800457a: d130 bne.n 80045de <ADC_Enable+0xf6>
  9972. )
  9973. {
  9974. while (__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_RDY) == 0UL)
  9975. 800457c: e028 b.n 80045d0 <ADC_Enable+0xe8>
  9976. The workaround is to continue setting ADEN until ADRDY is becomes 1.
  9977. Additionally, ADC_ENABLE_TIMEOUT is defined to encompass this
  9978. 4 ADC clock cycle duration */
  9979. /* Note: Test of ADC enabled required due to hardware constraint to */
  9980. /* not enable ADC if already enabled. */
  9981. if (LL_ADC_IsEnabled(hadc->Instance) == 0UL)
  9982. 800457e: 687b ldr r3, [r7, #4]
  9983. 8004580: 681b ldr r3, [r3, #0]
  9984. 8004582: 4618 mov r0, r3
  9985. 8004584: f7ff f97a bl 800387c <LL_ADC_IsEnabled>
  9986. 8004588: 4603 mov r3, r0
  9987. 800458a: 2b00 cmp r3, #0
  9988. 800458c: d104 bne.n 8004598 <ADC_Enable+0xb0>
  9989. {
  9990. LL_ADC_Enable(hadc->Instance);
  9991. 800458e: 687b ldr r3, [r7, #4]
  9992. 8004590: 681b ldr r3, [r3, #0]
  9993. 8004592: 4618 mov r0, r3
  9994. 8004594: f7ff f94a bl 800382c <LL_ADC_Enable>
  9995. }
  9996. if ((HAL_GetTick() - tickstart) > ADC_ENABLE_TIMEOUT)
  9997. 8004598: f7fe ff94 bl 80034c4 <HAL_GetTick>
  9998. 800459c: 4602 mov r2, r0
  9999. 800459e: 68fb ldr r3, [r7, #12]
  10000. 80045a0: 1ad3 subs r3, r2, r3
  10001. 80045a2: 2b02 cmp r3, #2
  10002. 80045a4: d914 bls.n 80045d0 <ADC_Enable+0xe8>
  10003. {
  10004. /* New check to avoid false timeout detection in case of preemption */
  10005. if (__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_RDY) == 0UL)
  10006. 80045a6: 687b ldr r3, [r7, #4]
  10007. 80045a8: 681b ldr r3, [r3, #0]
  10008. 80045aa: 681b ldr r3, [r3, #0]
  10009. 80045ac: f003 0301 and.w r3, r3, #1
  10010. 80045b0: 2b01 cmp r3, #1
  10011. 80045b2: d00d beq.n 80045d0 <ADC_Enable+0xe8>
  10012. {
  10013. /* Update ADC state machine to error */
  10014. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
  10015. 80045b4: 687b ldr r3, [r7, #4]
  10016. 80045b6: 6d5b ldr r3, [r3, #84] @ 0x54
  10017. 80045b8: f043 0210 orr.w r2, r3, #16
  10018. 80045bc: 687b ldr r3, [r7, #4]
  10019. 80045be: 655a str r2, [r3, #84] @ 0x54
  10020. /* Set ADC error code to ADC peripheral internal error */
  10021. SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);
  10022. 80045c0: 687b ldr r3, [r7, #4]
  10023. 80045c2: 6d9b ldr r3, [r3, #88] @ 0x58
  10024. 80045c4: f043 0201 orr.w r2, r3, #1
  10025. 80045c8: 687b ldr r3, [r7, #4]
  10026. 80045ca: 659a str r2, [r3, #88] @ 0x58
  10027. return HAL_ERROR;
  10028. 80045cc: 2301 movs r3, #1
  10029. 80045ce: e007 b.n 80045e0 <ADC_Enable+0xf8>
  10030. while (__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_RDY) == 0UL)
  10031. 80045d0: 687b ldr r3, [r7, #4]
  10032. 80045d2: 681b ldr r3, [r3, #0]
  10033. 80045d4: 681b ldr r3, [r3, #0]
  10034. 80045d6: f003 0301 and.w r3, r3, #1
  10035. 80045da: 2b01 cmp r3, #1
  10036. 80045dc: d1cf bne.n 800457e <ADC_Enable+0x96>
  10037. }
  10038. }
  10039. }
  10040. /* Return HAL status */
  10041. return HAL_OK;
  10042. 80045de: 2300 movs r3, #0
  10043. }
  10044. 80045e0: 4618 mov r0, r3
  10045. 80045e2: 3710 adds r7, #16
  10046. 80045e4: 46bd mov sp, r7
  10047. 80045e6: bd80 pop {r7, pc}
  10048. 80045e8: 8000003f .word 0x8000003f
  10049. 80045ec: 40022000 .word 0x40022000
  10050. 80045f0: 40022100 .word 0x40022100
  10051. 80045f4: 40022300 .word 0x40022300
  10052. 80045f8: 58026300 .word 0x58026300
  10053. 080045fc <ADC_Disable>:
  10054. * stopped.
  10055. * @param hadc ADC handle
  10056. * @retval HAL status.
  10057. */
  10058. HAL_StatusTypeDef ADC_Disable(ADC_HandleTypeDef *hadc)
  10059. {
  10060. 80045fc: b580 push {r7, lr}
  10061. 80045fe: b084 sub sp, #16
  10062. 8004600: af00 add r7, sp, #0
  10063. 8004602: 6078 str r0, [r7, #4]
  10064. uint32_t tickstart;
  10065. const uint32_t tmp_adc_is_disable_on_going = LL_ADC_IsDisableOngoing(hadc->Instance);
  10066. 8004604: 687b ldr r3, [r7, #4]
  10067. 8004606: 681b ldr r3, [r3, #0]
  10068. 8004608: 4618 mov r0, r3
  10069. 800460a: f7ff f94a bl 80038a2 <LL_ADC_IsDisableOngoing>
  10070. 800460e: 60f8 str r0, [r7, #12]
  10071. /* Verification if ADC is not already disabled: */
  10072. /* Note: forbidden to disable ADC (set bit ADC_CR_ADDIS) if ADC is already */
  10073. /* disabled. */
  10074. if ((LL_ADC_IsEnabled(hadc->Instance) != 0UL)
  10075. 8004610: 687b ldr r3, [r7, #4]
  10076. 8004612: 681b ldr r3, [r3, #0]
  10077. 8004614: 4618 mov r0, r3
  10078. 8004616: f7ff f931 bl 800387c <LL_ADC_IsEnabled>
  10079. 800461a: 4603 mov r3, r0
  10080. 800461c: 2b00 cmp r3, #0
  10081. 800461e: d047 beq.n 80046b0 <ADC_Disable+0xb4>
  10082. && (tmp_adc_is_disable_on_going == 0UL)
  10083. 8004620: 68fb ldr r3, [r7, #12]
  10084. 8004622: 2b00 cmp r3, #0
  10085. 8004624: d144 bne.n 80046b0 <ADC_Disable+0xb4>
  10086. )
  10087. {
  10088. /* Check if conditions to disable the ADC are fulfilled */
  10089. if ((hadc->Instance->CR & (ADC_CR_JADSTART | ADC_CR_ADSTART | ADC_CR_ADEN)) == ADC_CR_ADEN)
  10090. 8004626: 687b ldr r3, [r7, #4]
  10091. 8004628: 681b ldr r3, [r3, #0]
  10092. 800462a: 689b ldr r3, [r3, #8]
  10093. 800462c: f003 030d and.w r3, r3, #13
  10094. 8004630: 2b01 cmp r3, #1
  10095. 8004632: d10c bne.n 800464e <ADC_Disable+0x52>
  10096. {
  10097. /* Disable the ADC peripheral */
  10098. LL_ADC_Disable(hadc->Instance);
  10099. 8004634: 687b ldr r3, [r7, #4]
  10100. 8004636: 681b ldr r3, [r3, #0]
  10101. 8004638: 4618 mov r0, r3
  10102. 800463a: f7ff f90b bl 8003854 <LL_ADC_Disable>
  10103. __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_EOSMP | ADC_FLAG_RDY));
  10104. 800463e: 687b ldr r3, [r7, #4]
  10105. 8004640: 681b ldr r3, [r3, #0]
  10106. 8004642: 2203 movs r2, #3
  10107. 8004644: 601a str r2, [r3, #0]
  10108. return HAL_ERROR;
  10109. }
  10110. /* Wait for ADC effectively disabled */
  10111. /* Get tick count */
  10112. tickstart = HAL_GetTick();
  10113. 8004646: f7fe ff3d bl 80034c4 <HAL_GetTick>
  10114. 800464a: 60b8 str r0, [r7, #8]
  10115. while ((hadc->Instance->CR & ADC_CR_ADEN) != 0UL)
  10116. 800464c: e029 b.n 80046a2 <ADC_Disable+0xa6>
  10117. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
  10118. 800464e: 687b ldr r3, [r7, #4]
  10119. 8004650: 6d5b ldr r3, [r3, #84] @ 0x54
  10120. 8004652: f043 0210 orr.w r2, r3, #16
  10121. 8004656: 687b ldr r3, [r7, #4]
  10122. 8004658: 655a str r2, [r3, #84] @ 0x54
  10123. SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);
  10124. 800465a: 687b ldr r3, [r7, #4]
  10125. 800465c: 6d9b ldr r3, [r3, #88] @ 0x58
  10126. 800465e: f043 0201 orr.w r2, r3, #1
  10127. 8004662: 687b ldr r3, [r7, #4]
  10128. 8004664: 659a str r2, [r3, #88] @ 0x58
  10129. return HAL_ERROR;
  10130. 8004666: 2301 movs r3, #1
  10131. 8004668: e023 b.n 80046b2 <ADC_Disable+0xb6>
  10132. {
  10133. if ((HAL_GetTick() - tickstart) > ADC_DISABLE_TIMEOUT)
  10134. 800466a: f7fe ff2b bl 80034c4 <HAL_GetTick>
  10135. 800466e: 4602 mov r2, r0
  10136. 8004670: 68bb ldr r3, [r7, #8]
  10137. 8004672: 1ad3 subs r3, r2, r3
  10138. 8004674: 2b02 cmp r3, #2
  10139. 8004676: d914 bls.n 80046a2 <ADC_Disable+0xa6>
  10140. {
  10141. /* New check to avoid false timeout detection in case of preemption */
  10142. if ((hadc->Instance->CR & ADC_CR_ADEN) != 0UL)
  10143. 8004678: 687b ldr r3, [r7, #4]
  10144. 800467a: 681b ldr r3, [r3, #0]
  10145. 800467c: 689b ldr r3, [r3, #8]
  10146. 800467e: f003 0301 and.w r3, r3, #1
  10147. 8004682: 2b00 cmp r3, #0
  10148. 8004684: d00d beq.n 80046a2 <ADC_Disable+0xa6>
  10149. {
  10150. /* Update ADC state machine to error */
  10151. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
  10152. 8004686: 687b ldr r3, [r7, #4]
  10153. 8004688: 6d5b ldr r3, [r3, #84] @ 0x54
  10154. 800468a: f043 0210 orr.w r2, r3, #16
  10155. 800468e: 687b ldr r3, [r7, #4]
  10156. 8004690: 655a str r2, [r3, #84] @ 0x54
  10157. /* Set ADC error code to ADC peripheral internal error */
  10158. SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);
  10159. 8004692: 687b ldr r3, [r7, #4]
  10160. 8004694: 6d9b ldr r3, [r3, #88] @ 0x58
  10161. 8004696: f043 0201 orr.w r2, r3, #1
  10162. 800469a: 687b ldr r3, [r7, #4]
  10163. 800469c: 659a str r2, [r3, #88] @ 0x58
  10164. return HAL_ERROR;
  10165. 800469e: 2301 movs r3, #1
  10166. 80046a0: e007 b.n 80046b2 <ADC_Disable+0xb6>
  10167. while ((hadc->Instance->CR & ADC_CR_ADEN) != 0UL)
  10168. 80046a2: 687b ldr r3, [r7, #4]
  10169. 80046a4: 681b ldr r3, [r3, #0]
  10170. 80046a6: 689b ldr r3, [r3, #8]
  10171. 80046a8: f003 0301 and.w r3, r3, #1
  10172. 80046ac: 2b00 cmp r3, #0
  10173. 80046ae: d1dc bne.n 800466a <ADC_Disable+0x6e>
  10174. }
  10175. }
  10176. }
  10177. /* Return HAL status */
  10178. return HAL_OK;
  10179. 80046b0: 2300 movs r3, #0
  10180. }
  10181. 80046b2: 4618 mov r0, r3
  10182. 80046b4: 3710 adds r7, #16
  10183. 80046b6: 46bd mov sp, r7
  10184. 80046b8: bd80 pop {r7, pc}
  10185. 080046ba <ADC_DMAConvCplt>:
  10186. * @brief DMA transfer complete callback.
  10187. * @param hdma pointer to DMA handle.
  10188. * @retval None
  10189. */
  10190. void ADC_DMAConvCplt(DMA_HandleTypeDef *hdma)
  10191. {
  10192. 80046ba: b580 push {r7, lr}
  10193. 80046bc: b084 sub sp, #16
  10194. 80046be: af00 add r7, sp, #0
  10195. 80046c0: 6078 str r0, [r7, #4]
  10196. /* Retrieve ADC handle corresponding to current DMA handle */
  10197. ADC_HandleTypeDef *hadc = (ADC_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
  10198. 80046c2: 687b ldr r3, [r7, #4]
  10199. 80046c4: 6b9b ldr r3, [r3, #56] @ 0x38
  10200. 80046c6: 60fb str r3, [r7, #12]
  10201. /* Update state machine on conversion status if not in error state */
  10202. if ((hadc->State & (HAL_ADC_STATE_ERROR_INTERNAL | HAL_ADC_STATE_ERROR_DMA)) == 0UL)
  10203. 80046c8: 68fb ldr r3, [r7, #12]
  10204. 80046ca: 6d5b ldr r3, [r3, #84] @ 0x54
  10205. 80046cc: f003 0350 and.w r3, r3, #80 @ 0x50
  10206. 80046d0: 2b00 cmp r3, #0
  10207. 80046d2: d14b bne.n 800476c <ADC_DMAConvCplt+0xb2>
  10208. {
  10209. /* Set ADC state */
  10210. SET_BIT(hadc->State, HAL_ADC_STATE_REG_EOC);
  10211. 80046d4: 68fb ldr r3, [r7, #12]
  10212. 80046d6: 6d5b ldr r3, [r3, #84] @ 0x54
  10213. 80046d8: f443 7200 orr.w r2, r3, #512 @ 0x200
  10214. 80046dc: 68fb ldr r3, [r7, #12]
  10215. 80046de: 655a str r2, [r3, #84] @ 0x54
  10216. /* Determine whether any further conversion upcoming on group regular */
  10217. /* by external trigger, continuous mode or scan sequence on going */
  10218. /* to disable interruption. */
  10219. /* Is it the end of the regular sequence ? */
  10220. if ((hadc->Instance->ISR & ADC_FLAG_EOS) != 0UL)
  10221. 80046e0: 68fb ldr r3, [r7, #12]
  10222. 80046e2: 681b ldr r3, [r3, #0]
  10223. 80046e4: 681b ldr r3, [r3, #0]
  10224. 80046e6: f003 0308 and.w r3, r3, #8
  10225. 80046ea: 2b00 cmp r3, #0
  10226. 80046ec: d021 beq.n 8004732 <ADC_DMAConvCplt+0x78>
  10227. {
  10228. /* Are conversions software-triggered ? */
  10229. if (LL_ADC_REG_IsTriggerSourceSWStart(hadc->Instance) != 0UL)
  10230. 80046ee: 68fb ldr r3, [r7, #12]
  10231. 80046f0: 681b ldr r3, [r3, #0]
  10232. 80046f2: 4618 mov r0, r3
  10233. 80046f4: f7fe ff9c bl 8003630 <LL_ADC_REG_IsTriggerSourceSWStart>
  10234. 80046f8: 4603 mov r3, r0
  10235. 80046fa: 2b00 cmp r3, #0
  10236. 80046fc: d032 beq.n 8004764 <ADC_DMAConvCplt+0xaa>
  10237. {
  10238. /* Is CONT bit set ? */
  10239. if (READ_BIT(hadc->Instance->CFGR, ADC_CFGR_CONT) == 0UL)
  10240. 80046fe: 68fb ldr r3, [r7, #12]
  10241. 8004700: 681b ldr r3, [r3, #0]
  10242. 8004702: 68db ldr r3, [r3, #12]
  10243. 8004704: f403 5300 and.w r3, r3, #8192 @ 0x2000
  10244. 8004708: 2b00 cmp r3, #0
  10245. 800470a: d12b bne.n 8004764 <ADC_DMAConvCplt+0xaa>
  10246. {
  10247. /* CONT bit is not set, no more conversions expected */
  10248. CLEAR_BIT(hadc->State, HAL_ADC_STATE_REG_BUSY);
  10249. 800470c: 68fb ldr r3, [r7, #12]
  10250. 800470e: 6d5b ldr r3, [r3, #84] @ 0x54
  10251. 8004710: f423 7280 bic.w r2, r3, #256 @ 0x100
  10252. 8004714: 68fb ldr r3, [r7, #12]
  10253. 8004716: 655a str r2, [r3, #84] @ 0x54
  10254. if ((hadc->State & HAL_ADC_STATE_INJ_BUSY) == 0UL)
  10255. 8004718: 68fb ldr r3, [r7, #12]
  10256. 800471a: 6d5b ldr r3, [r3, #84] @ 0x54
  10257. 800471c: f403 5380 and.w r3, r3, #4096 @ 0x1000
  10258. 8004720: 2b00 cmp r3, #0
  10259. 8004722: d11f bne.n 8004764 <ADC_DMAConvCplt+0xaa>
  10260. {
  10261. SET_BIT(hadc->State, HAL_ADC_STATE_READY);
  10262. 8004724: 68fb ldr r3, [r7, #12]
  10263. 8004726: 6d5b ldr r3, [r3, #84] @ 0x54
  10264. 8004728: f043 0201 orr.w r2, r3, #1
  10265. 800472c: 68fb ldr r3, [r7, #12]
  10266. 800472e: 655a str r2, [r3, #84] @ 0x54
  10267. 8004730: e018 b.n 8004764 <ADC_DMAConvCplt+0xaa>
  10268. }
  10269. else
  10270. {
  10271. /* DMA End of Transfer interrupt was triggered but conversions sequence
  10272. is not over. If DMACFG is set to 0, conversions are stopped. */
  10273. if (READ_BIT(hadc->Instance->CFGR, ADC_CFGR_DMNGT) == 0UL)
  10274. 8004732: 68fb ldr r3, [r7, #12]
  10275. 8004734: 681b ldr r3, [r3, #0]
  10276. 8004736: 68db ldr r3, [r3, #12]
  10277. 8004738: f003 0303 and.w r3, r3, #3
  10278. 800473c: 2b00 cmp r3, #0
  10279. 800473e: d111 bne.n 8004764 <ADC_DMAConvCplt+0xaa>
  10280. {
  10281. /* DMACFG bit is not set, conversions are stopped. */
  10282. CLEAR_BIT(hadc->State, HAL_ADC_STATE_REG_BUSY);
  10283. 8004740: 68fb ldr r3, [r7, #12]
  10284. 8004742: 6d5b ldr r3, [r3, #84] @ 0x54
  10285. 8004744: f423 7280 bic.w r2, r3, #256 @ 0x100
  10286. 8004748: 68fb ldr r3, [r7, #12]
  10287. 800474a: 655a str r2, [r3, #84] @ 0x54
  10288. if ((hadc->State & HAL_ADC_STATE_INJ_BUSY) == 0UL)
  10289. 800474c: 68fb ldr r3, [r7, #12]
  10290. 800474e: 6d5b ldr r3, [r3, #84] @ 0x54
  10291. 8004750: f403 5380 and.w r3, r3, #4096 @ 0x1000
  10292. 8004754: 2b00 cmp r3, #0
  10293. 8004756: d105 bne.n 8004764 <ADC_DMAConvCplt+0xaa>
  10294. {
  10295. SET_BIT(hadc->State, HAL_ADC_STATE_READY);
  10296. 8004758: 68fb ldr r3, [r7, #12]
  10297. 800475a: 6d5b ldr r3, [r3, #84] @ 0x54
  10298. 800475c: f043 0201 orr.w r2, r3, #1
  10299. 8004760: 68fb ldr r3, [r7, #12]
  10300. 8004762: 655a str r2, [r3, #84] @ 0x54
  10301. /* Conversion complete callback */
  10302. #if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)
  10303. hadc->ConvCpltCallback(hadc);
  10304. #else
  10305. HAL_ADC_ConvCpltCallback(hadc);
  10306. 8004764: 68f8 ldr r0, [r7, #12]
  10307. 8004766: f7fc fcf3 bl 8001150 <HAL_ADC_ConvCpltCallback>
  10308. {
  10309. /* Call ADC DMA error callback */
  10310. hadc->DMA_Handle->XferErrorCallback(hdma);
  10311. }
  10312. }
  10313. }
  10314. 800476a: e00e b.n 800478a <ADC_DMAConvCplt+0xd0>
  10315. if ((hadc->State & HAL_ADC_STATE_ERROR_INTERNAL) != 0UL)
  10316. 800476c: 68fb ldr r3, [r7, #12]
  10317. 800476e: 6d5b ldr r3, [r3, #84] @ 0x54
  10318. 8004770: f003 0310 and.w r3, r3, #16
  10319. 8004774: 2b00 cmp r3, #0
  10320. 8004776: d003 beq.n 8004780 <ADC_DMAConvCplt+0xc6>
  10321. HAL_ADC_ErrorCallback(hadc);
  10322. 8004778: 68f8 ldr r0, [r7, #12]
  10323. 800477a: f7ff fb4f bl 8003e1c <HAL_ADC_ErrorCallback>
  10324. }
  10325. 800477e: e004 b.n 800478a <ADC_DMAConvCplt+0xd0>
  10326. hadc->DMA_Handle->XferErrorCallback(hdma);
  10327. 8004780: 68fb ldr r3, [r7, #12]
  10328. 8004782: 6cdb ldr r3, [r3, #76] @ 0x4c
  10329. 8004784: 6cdb ldr r3, [r3, #76] @ 0x4c
  10330. 8004786: 6878 ldr r0, [r7, #4]
  10331. 8004788: 4798 blx r3
  10332. }
  10333. 800478a: bf00 nop
  10334. 800478c: 3710 adds r7, #16
  10335. 800478e: 46bd mov sp, r7
  10336. 8004790: bd80 pop {r7, pc}
  10337. 08004792 <ADC_DMAHalfConvCplt>:
  10338. * @brief DMA half transfer complete callback.
  10339. * @param hdma pointer to DMA handle.
  10340. * @retval None
  10341. */
  10342. void ADC_DMAHalfConvCplt(DMA_HandleTypeDef *hdma)
  10343. {
  10344. 8004792: b580 push {r7, lr}
  10345. 8004794: b084 sub sp, #16
  10346. 8004796: af00 add r7, sp, #0
  10347. 8004798: 6078 str r0, [r7, #4]
  10348. /* Retrieve ADC handle corresponding to current DMA handle */
  10349. ADC_HandleTypeDef *hadc = (ADC_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
  10350. 800479a: 687b ldr r3, [r7, #4]
  10351. 800479c: 6b9b ldr r3, [r3, #56] @ 0x38
  10352. 800479e: 60fb str r3, [r7, #12]
  10353. /* Half conversion callback */
  10354. #if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)
  10355. hadc->ConvHalfCpltCallback(hadc);
  10356. #else
  10357. HAL_ADC_ConvHalfCpltCallback(hadc);
  10358. 80047a0: 68f8 ldr r0, [r7, #12]
  10359. 80047a2: f7ff fb31 bl 8003e08 <HAL_ADC_ConvHalfCpltCallback>
  10360. #endif /* USE_HAL_ADC_REGISTER_CALLBACKS */
  10361. }
  10362. 80047a6: bf00 nop
  10363. 80047a8: 3710 adds r7, #16
  10364. 80047aa: 46bd mov sp, r7
  10365. 80047ac: bd80 pop {r7, pc}
  10366. 080047ae <ADC_DMAError>:
  10367. * @brief DMA error callback.
  10368. * @param hdma pointer to DMA handle.
  10369. * @retval None
  10370. */
  10371. void ADC_DMAError(DMA_HandleTypeDef *hdma)
  10372. {
  10373. 80047ae: b580 push {r7, lr}
  10374. 80047b0: b084 sub sp, #16
  10375. 80047b2: af00 add r7, sp, #0
  10376. 80047b4: 6078 str r0, [r7, #4]
  10377. /* Retrieve ADC handle corresponding to current DMA handle */
  10378. ADC_HandleTypeDef *hadc = (ADC_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
  10379. 80047b6: 687b ldr r3, [r7, #4]
  10380. 80047b8: 6b9b ldr r3, [r3, #56] @ 0x38
  10381. 80047ba: 60fb str r3, [r7, #12]
  10382. /* Set ADC state */
  10383. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_DMA);
  10384. 80047bc: 68fb ldr r3, [r7, #12]
  10385. 80047be: 6d5b ldr r3, [r3, #84] @ 0x54
  10386. 80047c0: f043 0240 orr.w r2, r3, #64 @ 0x40
  10387. 80047c4: 68fb ldr r3, [r7, #12]
  10388. 80047c6: 655a str r2, [r3, #84] @ 0x54
  10389. /* Set ADC error code to DMA error */
  10390. SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_DMA);
  10391. 80047c8: 68fb ldr r3, [r7, #12]
  10392. 80047ca: 6d9b ldr r3, [r3, #88] @ 0x58
  10393. 80047cc: f043 0204 orr.w r2, r3, #4
  10394. 80047d0: 68fb ldr r3, [r7, #12]
  10395. 80047d2: 659a str r2, [r3, #88] @ 0x58
  10396. /* Error callback */
  10397. #if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)
  10398. hadc->ErrorCallback(hadc);
  10399. #else
  10400. HAL_ADC_ErrorCallback(hadc);
  10401. 80047d4: 68f8 ldr r0, [r7, #12]
  10402. 80047d6: f7ff fb21 bl 8003e1c <HAL_ADC_ErrorCallback>
  10403. #endif /* USE_HAL_ADC_REGISTER_CALLBACKS */
  10404. }
  10405. 80047da: bf00 nop
  10406. 80047dc: 3710 adds r7, #16
  10407. 80047de: 46bd mov sp, r7
  10408. 80047e0: bd80 pop {r7, pc}
  10409. ...
  10410. 080047e4 <ADC_ConfigureBoostMode>:
  10411. * stopped.
  10412. * @param hadc ADC handle
  10413. * @retval None.
  10414. */
  10415. void ADC_ConfigureBoostMode(ADC_HandleTypeDef *hadc)
  10416. {
  10417. 80047e4: b580 push {r7, lr}
  10418. 80047e6: b084 sub sp, #16
  10419. 80047e8: af00 add r7, sp, #0
  10420. 80047ea: 6078 str r0, [r7, #4]
  10421. uint32_t freq;
  10422. if (ADC_IS_SYNCHRONOUS_CLOCK_MODE(hadc))
  10423. 80047ec: 687b ldr r3, [r7, #4]
  10424. 80047ee: 681b ldr r3, [r3, #0]
  10425. 80047f0: 4a7a ldr r2, [pc, #488] @ (80049dc <ADC_ConfigureBoostMode+0x1f8>)
  10426. 80047f2: 4293 cmp r3, r2
  10427. 80047f4: d004 beq.n 8004800 <ADC_ConfigureBoostMode+0x1c>
  10428. 80047f6: 687b ldr r3, [r7, #4]
  10429. 80047f8: 681b ldr r3, [r3, #0]
  10430. 80047fa: 4a79 ldr r2, [pc, #484] @ (80049e0 <ADC_ConfigureBoostMode+0x1fc>)
  10431. 80047fc: 4293 cmp r3, r2
  10432. 80047fe: d109 bne.n 8004814 <ADC_ConfigureBoostMode+0x30>
  10433. 8004800: 4b78 ldr r3, [pc, #480] @ (80049e4 <ADC_ConfigureBoostMode+0x200>)
  10434. 8004802: 689b ldr r3, [r3, #8]
  10435. 8004804: f403 3340 and.w r3, r3, #196608 @ 0x30000
  10436. 8004808: 2b00 cmp r3, #0
  10437. 800480a: bf14 ite ne
  10438. 800480c: 2301 movne r3, #1
  10439. 800480e: 2300 moveq r3, #0
  10440. 8004810: b2db uxtb r3, r3
  10441. 8004812: e008 b.n 8004826 <ADC_ConfigureBoostMode+0x42>
  10442. 8004814: 4b74 ldr r3, [pc, #464] @ (80049e8 <ADC_ConfigureBoostMode+0x204>)
  10443. 8004816: 689b ldr r3, [r3, #8]
  10444. 8004818: f403 3340 and.w r3, r3, #196608 @ 0x30000
  10445. 800481c: 2b00 cmp r3, #0
  10446. 800481e: bf14 ite ne
  10447. 8004820: 2301 movne r3, #1
  10448. 8004822: 2300 moveq r3, #0
  10449. 8004824: b2db uxtb r3, r3
  10450. 8004826: 2b00 cmp r3, #0
  10451. 8004828: d01c beq.n 8004864 <ADC_ConfigureBoostMode+0x80>
  10452. {
  10453. freq = HAL_RCC_GetHCLKFreq();
  10454. 800482a: f004 fdc5 bl 80093b8 <HAL_RCC_GetHCLKFreq>
  10455. 800482e: 60f8 str r0, [r7, #12]
  10456. switch (hadc->Init.ClockPrescaler)
  10457. 8004830: 687b ldr r3, [r7, #4]
  10458. 8004832: 685b ldr r3, [r3, #4]
  10459. 8004834: f5b3 3f40 cmp.w r3, #196608 @ 0x30000
  10460. 8004838: d010 beq.n 800485c <ADC_ConfigureBoostMode+0x78>
  10461. 800483a: f5b3 3f40 cmp.w r3, #196608 @ 0x30000
  10462. 800483e: d873 bhi.n 8004928 <ADC_ConfigureBoostMode+0x144>
  10463. 8004840: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  10464. 8004844: d002 beq.n 800484c <ADC_ConfigureBoostMode+0x68>
  10465. 8004846: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  10466. 800484a: d16d bne.n 8004928 <ADC_ConfigureBoostMode+0x144>
  10467. {
  10468. case ADC_CLOCK_SYNC_PCLK_DIV1:
  10469. case ADC_CLOCK_SYNC_PCLK_DIV2:
  10470. freq /= (hadc->Init.ClockPrescaler >> ADC_CCR_CKMODE_Pos);
  10471. 800484c: 687b ldr r3, [r7, #4]
  10472. 800484e: 685b ldr r3, [r3, #4]
  10473. 8004850: 0c1b lsrs r3, r3, #16
  10474. 8004852: 68fa ldr r2, [r7, #12]
  10475. 8004854: fbb2 f3f3 udiv r3, r2, r3
  10476. 8004858: 60fb str r3, [r7, #12]
  10477. break;
  10478. 800485a: e068 b.n 800492e <ADC_ConfigureBoostMode+0x14a>
  10479. case ADC_CLOCK_SYNC_PCLK_DIV4:
  10480. freq /= 4UL;
  10481. 800485c: 68fb ldr r3, [r7, #12]
  10482. 800485e: 089b lsrs r3, r3, #2
  10483. 8004860: 60fb str r3, [r7, #12]
  10484. break;
  10485. 8004862: e064 b.n 800492e <ADC_ConfigureBoostMode+0x14a>
  10486. break;
  10487. }
  10488. }
  10489. else
  10490. {
  10491. freq = HAL_RCCEx_GetPeriphCLKFreq(RCC_PERIPHCLK_ADC);
  10492. 8004864: f44f 2000 mov.w r0, #524288 @ 0x80000
  10493. 8004868: f04f 0100 mov.w r1, #0
  10494. 800486c: f006 f830 bl 800a8d0 <HAL_RCCEx_GetPeriphCLKFreq>
  10495. 8004870: 60f8 str r0, [r7, #12]
  10496. switch (hadc->Init.ClockPrescaler)
  10497. 8004872: 687b ldr r3, [r7, #4]
  10498. 8004874: 685b ldr r3, [r3, #4]
  10499. 8004876: f5b3 1f30 cmp.w r3, #2883584 @ 0x2c0000
  10500. 800487a: d051 beq.n 8004920 <ADC_ConfigureBoostMode+0x13c>
  10501. 800487c: f5b3 1f30 cmp.w r3, #2883584 @ 0x2c0000
  10502. 8004880: d854 bhi.n 800492c <ADC_ConfigureBoostMode+0x148>
  10503. 8004882: f5b3 1f20 cmp.w r3, #2621440 @ 0x280000
  10504. 8004886: d047 beq.n 8004918 <ADC_ConfigureBoostMode+0x134>
  10505. 8004888: f5b3 1f20 cmp.w r3, #2621440 @ 0x280000
  10506. 800488c: d84e bhi.n 800492c <ADC_ConfigureBoostMode+0x148>
  10507. 800488e: f5b3 1f10 cmp.w r3, #2359296 @ 0x240000
  10508. 8004892: d03d beq.n 8004910 <ADC_ConfigureBoostMode+0x12c>
  10509. 8004894: f5b3 1f10 cmp.w r3, #2359296 @ 0x240000
  10510. 8004898: d848 bhi.n 800492c <ADC_ConfigureBoostMode+0x148>
  10511. 800489a: f5b3 1f00 cmp.w r3, #2097152 @ 0x200000
  10512. 800489e: d033 beq.n 8004908 <ADC_ConfigureBoostMode+0x124>
  10513. 80048a0: f5b3 1f00 cmp.w r3, #2097152 @ 0x200000
  10514. 80048a4: d842 bhi.n 800492c <ADC_ConfigureBoostMode+0x148>
  10515. 80048a6: f5b3 1fe0 cmp.w r3, #1835008 @ 0x1c0000
  10516. 80048aa: d029 beq.n 8004900 <ADC_ConfigureBoostMode+0x11c>
  10517. 80048ac: f5b3 1fe0 cmp.w r3, #1835008 @ 0x1c0000
  10518. 80048b0: d83c bhi.n 800492c <ADC_ConfigureBoostMode+0x148>
  10519. 80048b2: f5b3 1fc0 cmp.w r3, #1572864 @ 0x180000
  10520. 80048b6: d01a beq.n 80048ee <ADC_ConfigureBoostMode+0x10a>
  10521. 80048b8: f5b3 1fc0 cmp.w r3, #1572864 @ 0x180000
  10522. 80048bc: d836 bhi.n 800492c <ADC_ConfigureBoostMode+0x148>
  10523. 80048be: f5b3 1fa0 cmp.w r3, #1310720 @ 0x140000
  10524. 80048c2: d014 beq.n 80048ee <ADC_ConfigureBoostMode+0x10a>
  10525. 80048c4: f5b3 1fa0 cmp.w r3, #1310720 @ 0x140000
  10526. 80048c8: d830 bhi.n 800492c <ADC_ConfigureBoostMode+0x148>
  10527. 80048ca: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
  10528. 80048ce: d00e beq.n 80048ee <ADC_ConfigureBoostMode+0x10a>
  10529. 80048d0: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
  10530. 80048d4: d82a bhi.n 800492c <ADC_ConfigureBoostMode+0x148>
  10531. 80048d6: f5b3 2f40 cmp.w r3, #786432 @ 0xc0000
  10532. 80048da: d008 beq.n 80048ee <ADC_ConfigureBoostMode+0x10a>
  10533. 80048dc: f5b3 2f40 cmp.w r3, #786432 @ 0xc0000
  10534. 80048e0: d824 bhi.n 800492c <ADC_ConfigureBoostMode+0x148>
  10535. 80048e2: f5b3 2f80 cmp.w r3, #262144 @ 0x40000
  10536. 80048e6: d002 beq.n 80048ee <ADC_ConfigureBoostMode+0x10a>
  10537. 80048e8: f5b3 2f00 cmp.w r3, #524288 @ 0x80000
  10538. 80048ec: d11e bne.n 800492c <ADC_ConfigureBoostMode+0x148>
  10539. case ADC_CLOCK_ASYNC_DIV4:
  10540. case ADC_CLOCK_ASYNC_DIV6:
  10541. case ADC_CLOCK_ASYNC_DIV8:
  10542. case ADC_CLOCK_ASYNC_DIV10:
  10543. case ADC_CLOCK_ASYNC_DIV12:
  10544. freq /= ((hadc->Init.ClockPrescaler >> ADC_CCR_PRESC_Pos) << 1UL);
  10545. 80048ee: 687b ldr r3, [r7, #4]
  10546. 80048f0: 685b ldr r3, [r3, #4]
  10547. 80048f2: 0c9b lsrs r3, r3, #18
  10548. 80048f4: 005b lsls r3, r3, #1
  10549. 80048f6: 68fa ldr r2, [r7, #12]
  10550. 80048f8: fbb2 f3f3 udiv r3, r2, r3
  10551. 80048fc: 60fb str r3, [r7, #12]
  10552. break;
  10553. 80048fe: e016 b.n 800492e <ADC_ConfigureBoostMode+0x14a>
  10554. case ADC_CLOCK_ASYNC_DIV16:
  10555. freq /= 16UL;
  10556. 8004900: 68fb ldr r3, [r7, #12]
  10557. 8004902: 091b lsrs r3, r3, #4
  10558. 8004904: 60fb str r3, [r7, #12]
  10559. break;
  10560. 8004906: e012 b.n 800492e <ADC_ConfigureBoostMode+0x14a>
  10561. case ADC_CLOCK_ASYNC_DIV32:
  10562. freq /= 32UL;
  10563. 8004908: 68fb ldr r3, [r7, #12]
  10564. 800490a: 095b lsrs r3, r3, #5
  10565. 800490c: 60fb str r3, [r7, #12]
  10566. break;
  10567. 800490e: e00e b.n 800492e <ADC_ConfigureBoostMode+0x14a>
  10568. case ADC_CLOCK_ASYNC_DIV64:
  10569. freq /= 64UL;
  10570. 8004910: 68fb ldr r3, [r7, #12]
  10571. 8004912: 099b lsrs r3, r3, #6
  10572. 8004914: 60fb str r3, [r7, #12]
  10573. break;
  10574. 8004916: e00a b.n 800492e <ADC_ConfigureBoostMode+0x14a>
  10575. case ADC_CLOCK_ASYNC_DIV128:
  10576. freq /= 128UL;
  10577. 8004918: 68fb ldr r3, [r7, #12]
  10578. 800491a: 09db lsrs r3, r3, #7
  10579. 800491c: 60fb str r3, [r7, #12]
  10580. break;
  10581. 800491e: e006 b.n 800492e <ADC_ConfigureBoostMode+0x14a>
  10582. case ADC_CLOCK_ASYNC_DIV256:
  10583. freq /= 256UL;
  10584. 8004920: 68fb ldr r3, [r7, #12]
  10585. 8004922: 0a1b lsrs r3, r3, #8
  10586. 8004924: 60fb str r3, [r7, #12]
  10587. break;
  10588. 8004926: e002 b.n 800492e <ADC_ConfigureBoostMode+0x14a>
  10589. break;
  10590. 8004928: bf00 nop
  10591. 800492a: e000 b.n 800492e <ADC_ConfigureBoostMode+0x14a>
  10592. default:
  10593. break;
  10594. 800492c: bf00 nop
  10595. else /* if(freq > 25000000UL) */
  10596. {
  10597. MODIFY_REG(hadc->Instance->CR, ADC_CR_BOOST, ADC_CR_BOOST_1 | ADC_CR_BOOST_0);
  10598. }
  10599. #else
  10600. if (HAL_GetREVID() <= REV_ID_Y) /* STM32H7 silicon Rev.Y */
  10601. 800492e: f7fe fdd5 bl 80034dc <HAL_GetREVID>
  10602. 8004932: 4603 mov r3, r0
  10603. 8004934: f241 0203 movw r2, #4099 @ 0x1003
  10604. 8004938: 4293 cmp r3, r2
  10605. 800493a: d815 bhi.n 8004968 <ADC_ConfigureBoostMode+0x184>
  10606. {
  10607. if (freq > 20000000UL)
  10608. 800493c: 68fb ldr r3, [r7, #12]
  10609. 800493e: 4a2b ldr r2, [pc, #172] @ (80049ec <ADC_ConfigureBoostMode+0x208>)
  10610. 8004940: 4293 cmp r3, r2
  10611. 8004942: d908 bls.n 8004956 <ADC_ConfigureBoostMode+0x172>
  10612. {
  10613. SET_BIT(hadc->Instance->CR, ADC_CR_BOOST_0);
  10614. 8004944: 687b ldr r3, [r7, #4]
  10615. 8004946: 681b ldr r3, [r3, #0]
  10616. 8004948: 689a ldr r2, [r3, #8]
  10617. 800494a: 687b ldr r3, [r7, #4]
  10618. 800494c: 681b ldr r3, [r3, #0]
  10619. 800494e: f442 7280 orr.w r2, r2, #256 @ 0x100
  10620. 8004952: 609a str r2, [r3, #8]
  10621. {
  10622. MODIFY_REG(hadc->Instance->CR, ADC_CR_BOOST, ADC_CR_BOOST_1 | ADC_CR_BOOST_0);
  10623. }
  10624. }
  10625. #endif /* ADC_VER_V5_3 */
  10626. }
  10627. 8004954: e03e b.n 80049d4 <ADC_ConfigureBoostMode+0x1f0>
  10628. CLEAR_BIT(hadc->Instance->CR, ADC_CR_BOOST_0);
  10629. 8004956: 687b ldr r3, [r7, #4]
  10630. 8004958: 681b ldr r3, [r3, #0]
  10631. 800495a: 689a ldr r2, [r3, #8]
  10632. 800495c: 687b ldr r3, [r7, #4]
  10633. 800495e: 681b ldr r3, [r3, #0]
  10634. 8004960: f422 7280 bic.w r2, r2, #256 @ 0x100
  10635. 8004964: 609a str r2, [r3, #8]
  10636. }
  10637. 8004966: e035 b.n 80049d4 <ADC_ConfigureBoostMode+0x1f0>
  10638. freq /= 2U; /* divider by 2 for Rev.V */
  10639. 8004968: 68fb ldr r3, [r7, #12]
  10640. 800496a: 085b lsrs r3, r3, #1
  10641. 800496c: 60fb str r3, [r7, #12]
  10642. if (freq <= 6250000UL)
  10643. 800496e: 68fb ldr r3, [r7, #12]
  10644. 8004970: 4a1f ldr r2, [pc, #124] @ (80049f0 <ADC_ConfigureBoostMode+0x20c>)
  10645. 8004972: 4293 cmp r3, r2
  10646. 8004974: d808 bhi.n 8004988 <ADC_ConfigureBoostMode+0x1a4>
  10647. MODIFY_REG(hadc->Instance->CR, ADC_CR_BOOST, 0UL);
  10648. 8004976: 687b ldr r3, [r7, #4]
  10649. 8004978: 681b ldr r3, [r3, #0]
  10650. 800497a: 689a ldr r2, [r3, #8]
  10651. 800497c: 687b ldr r3, [r7, #4]
  10652. 800497e: 681b ldr r3, [r3, #0]
  10653. 8004980: f422 7240 bic.w r2, r2, #768 @ 0x300
  10654. 8004984: 609a str r2, [r3, #8]
  10655. }
  10656. 8004986: e025 b.n 80049d4 <ADC_ConfigureBoostMode+0x1f0>
  10657. else if (freq <= 12500000UL)
  10658. 8004988: 68fb ldr r3, [r7, #12]
  10659. 800498a: 4a1a ldr r2, [pc, #104] @ (80049f4 <ADC_ConfigureBoostMode+0x210>)
  10660. 800498c: 4293 cmp r3, r2
  10661. 800498e: d80a bhi.n 80049a6 <ADC_ConfigureBoostMode+0x1c2>
  10662. MODIFY_REG(hadc->Instance->CR, ADC_CR_BOOST, ADC_CR_BOOST_0);
  10663. 8004990: 687b ldr r3, [r7, #4]
  10664. 8004992: 681b ldr r3, [r3, #0]
  10665. 8004994: 689b ldr r3, [r3, #8]
  10666. 8004996: f423 7240 bic.w r2, r3, #768 @ 0x300
  10667. 800499a: 687b ldr r3, [r7, #4]
  10668. 800499c: 681b ldr r3, [r3, #0]
  10669. 800499e: f442 7280 orr.w r2, r2, #256 @ 0x100
  10670. 80049a2: 609a str r2, [r3, #8]
  10671. }
  10672. 80049a4: e016 b.n 80049d4 <ADC_ConfigureBoostMode+0x1f0>
  10673. else if (freq <= 25000000UL)
  10674. 80049a6: 68fb ldr r3, [r7, #12]
  10675. 80049a8: 4a13 ldr r2, [pc, #76] @ (80049f8 <ADC_ConfigureBoostMode+0x214>)
  10676. 80049aa: 4293 cmp r3, r2
  10677. 80049ac: d80a bhi.n 80049c4 <ADC_ConfigureBoostMode+0x1e0>
  10678. MODIFY_REG(hadc->Instance->CR, ADC_CR_BOOST, ADC_CR_BOOST_1);
  10679. 80049ae: 687b ldr r3, [r7, #4]
  10680. 80049b0: 681b ldr r3, [r3, #0]
  10681. 80049b2: 689b ldr r3, [r3, #8]
  10682. 80049b4: f423 7240 bic.w r2, r3, #768 @ 0x300
  10683. 80049b8: 687b ldr r3, [r7, #4]
  10684. 80049ba: 681b ldr r3, [r3, #0]
  10685. 80049bc: f442 7200 orr.w r2, r2, #512 @ 0x200
  10686. 80049c0: 609a str r2, [r3, #8]
  10687. }
  10688. 80049c2: e007 b.n 80049d4 <ADC_ConfigureBoostMode+0x1f0>
  10689. MODIFY_REG(hadc->Instance->CR, ADC_CR_BOOST, ADC_CR_BOOST_1 | ADC_CR_BOOST_0);
  10690. 80049c4: 687b ldr r3, [r7, #4]
  10691. 80049c6: 681b ldr r3, [r3, #0]
  10692. 80049c8: 689a ldr r2, [r3, #8]
  10693. 80049ca: 687b ldr r3, [r7, #4]
  10694. 80049cc: 681b ldr r3, [r3, #0]
  10695. 80049ce: f442 7240 orr.w r2, r2, #768 @ 0x300
  10696. 80049d2: 609a str r2, [r3, #8]
  10697. }
  10698. 80049d4: bf00 nop
  10699. 80049d6: 3710 adds r7, #16
  10700. 80049d8: 46bd mov sp, r7
  10701. 80049da: bd80 pop {r7, pc}
  10702. 80049dc: 40022000 .word 0x40022000
  10703. 80049e0: 40022100 .word 0x40022100
  10704. 80049e4: 40022300 .word 0x40022300
  10705. 80049e8: 58026300 .word 0x58026300
  10706. 80049ec: 01312d00 .word 0x01312d00
  10707. 80049f0: 005f5e10 .word 0x005f5e10
  10708. 80049f4: 00bebc20 .word 0x00bebc20
  10709. 80049f8: 017d7840 .word 0x017d7840
  10710. 080049fc <LL_ADC_IsEnabled>:
  10711. {
  10712. 80049fc: b480 push {r7}
  10713. 80049fe: b083 sub sp, #12
  10714. 8004a00: af00 add r7, sp, #0
  10715. 8004a02: 6078 str r0, [r7, #4]
  10716. return ((READ_BIT(ADCx->CR, ADC_CR_ADEN) == (ADC_CR_ADEN)) ? 1UL : 0UL);
  10717. 8004a04: 687b ldr r3, [r7, #4]
  10718. 8004a06: 689b ldr r3, [r3, #8]
  10719. 8004a08: f003 0301 and.w r3, r3, #1
  10720. 8004a0c: 2b01 cmp r3, #1
  10721. 8004a0e: d101 bne.n 8004a14 <LL_ADC_IsEnabled+0x18>
  10722. 8004a10: 2301 movs r3, #1
  10723. 8004a12: e000 b.n 8004a16 <LL_ADC_IsEnabled+0x1a>
  10724. 8004a14: 2300 movs r3, #0
  10725. }
  10726. 8004a16: 4618 mov r0, r3
  10727. 8004a18: 370c adds r7, #12
  10728. 8004a1a: 46bd mov sp, r7
  10729. 8004a1c: f85d 7b04 ldr.w r7, [sp], #4
  10730. 8004a20: 4770 bx lr
  10731. ...
  10732. 08004a24 <LL_ADC_StartCalibration>:
  10733. {
  10734. 8004a24: b480 push {r7}
  10735. 8004a26: b085 sub sp, #20
  10736. 8004a28: af00 add r7, sp, #0
  10737. 8004a2a: 60f8 str r0, [r7, #12]
  10738. 8004a2c: 60b9 str r1, [r7, #8]
  10739. 8004a2e: 607a str r2, [r7, #4]
  10740. MODIFY_REG(ADCx->CR,
  10741. 8004a30: 68fb ldr r3, [r7, #12]
  10742. 8004a32: 689a ldr r2, [r3, #8]
  10743. 8004a34: 4b09 ldr r3, [pc, #36] @ (8004a5c <LL_ADC_StartCalibration+0x38>)
  10744. 8004a36: 4013 ands r3, r2
  10745. 8004a38: 68ba ldr r2, [r7, #8]
  10746. 8004a3a: f402 3180 and.w r1, r2, #65536 @ 0x10000
  10747. 8004a3e: 687a ldr r2, [r7, #4]
  10748. 8004a40: f002 4280 and.w r2, r2, #1073741824 @ 0x40000000
  10749. 8004a44: 430a orrs r2, r1
  10750. 8004a46: 4313 orrs r3, r2
  10751. 8004a48: f043 4200 orr.w r2, r3, #2147483648 @ 0x80000000
  10752. 8004a4c: 68fb ldr r3, [r7, #12]
  10753. 8004a4e: 609a str r2, [r3, #8]
  10754. }
  10755. 8004a50: bf00 nop
  10756. 8004a52: 3714 adds r7, #20
  10757. 8004a54: 46bd mov sp, r7
  10758. 8004a56: f85d 7b04 ldr.w r7, [sp], #4
  10759. 8004a5a: 4770 bx lr
  10760. 8004a5c: 3ffeffc0 .word 0x3ffeffc0
  10761. 08004a60 <LL_ADC_IsCalibrationOnGoing>:
  10762. {
  10763. 8004a60: b480 push {r7}
  10764. 8004a62: b083 sub sp, #12
  10765. 8004a64: af00 add r7, sp, #0
  10766. 8004a66: 6078 str r0, [r7, #4]
  10767. return ((READ_BIT(ADCx->CR, ADC_CR_ADCAL) == (ADC_CR_ADCAL)) ? 1UL : 0UL);
  10768. 8004a68: 687b ldr r3, [r7, #4]
  10769. 8004a6a: 689b ldr r3, [r3, #8]
  10770. 8004a6c: f003 4300 and.w r3, r3, #2147483648 @ 0x80000000
  10771. 8004a70: f1b3 4f00 cmp.w r3, #2147483648 @ 0x80000000
  10772. 8004a74: d101 bne.n 8004a7a <LL_ADC_IsCalibrationOnGoing+0x1a>
  10773. 8004a76: 2301 movs r3, #1
  10774. 8004a78: e000 b.n 8004a7c <LL_ADC_IsCalibrationOnGoing+0x1c>
  10775. 8004a7a: 2300 movs r3, #0
  10776. }
  10777. 8004a7c: 4618 mov r0, r3
  10778. 8004a7e: 370c adds r7, #12
  10779. 8004a80: 46bd mov sp, r7
  10780. 8004a82: f85d 7b04 ldr.w r7, [sp], #4
  10781. 8004a86: 4770 bx lr
  10782. 08004a88 <LL_ADC_REG_IsConversionOngoing>:
  10783. {
  10784. 8004a88: b480 push {r7}
  10785. 8004a8a: b083 sub sp, #12
  10786. 8004a8c: af00 add r7, sp, #0
  10787. 8004a8e: 6078 str r0, [r7, #4]
  10788. return ((READ_BIT(ADCx->CR, ADC_CR_ADSTART) == (ADC_CR_ADSTART)) ? 1UL : 0UL);
  10789. 8004a90: 687b ldr r3, [r7, #4]
  10790. 8004a92: 689b ldr r3, [r3, #8]
  10791. 8004a94: f003 0304 and.w r3, r3, #4
  10792. 8004a98: 2b04 cmp r3, #4
  10793. 8004a9a: d101 bne.n 8004aa0 <LL_ADC_REG_IsConversionOngoing+0x18>
  10794. 8004a9c: 2301 movs r3, #1
  10795. 8004a9e: e000 b.n 8004aa2 <LL_ADC_REG_IsConversionOngoing+0x1a>
  10796. 8004aa0: 2300 movs r3, #0
  10797. }
  10798. 8004aa2: 4618 mov r0, r3
  10799. 8004aa4: 370c adds r7, #12
  10800. 8004aa6: 46bd mov sp, r7
  10801. 8004aa8: f85d 7b04 ldr.w r7, [sp], #4
  10802. 8004aac: 4770 bx lr
  10803. ...
  10804. 08004ab0 <HAL_ADCEx_Calibration_Start>:
  10805. * @arg @ref ADC_SINGLE_ENDED Channel in mode input single ended
  10806. * @arg @ref ADC_DIFFERENTIAL_ENDED Channel in mode input differential ended
  10807. * @retval HAL status
  10808. */
  10809. HAL_StatusTypeDef HAL_ADCEx_Calibration_Start(ADC_HandleTypeDef *hadc, uint32_t CalibrationMode, uint32_t SingleDiff)
  10810. {
  10811. 8004ab0: b580 push {r7, lr}
  10812. 8004ab2: b086 sub sp, #24
  10813. 8004ab4: af00 add r7, sp, #0
  10814. 8004ab6: 60f8 str r0, [r7, #12]
  10815. 8004ab8: 60b9 str r1, [r7, #8]
  10816. 8004aba: 607a str r2, [r7, #4]
  10817. HAL_StatusTypeDef tmp_hal_status;
  10818. __IO uint32_t wait_loop_index = 0UL;
  10819. 8004abc: 2300 movs r3, #0
  10820. 8004abe: 613b str r3, [r7, #16]
  10821. /* Check the parameters */
  10822. assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
  10823. assert_param(IS_ADC_SINGLE_DIFFERENTIAL(SingleDiff));
  10824. /* Process locked */
  10825. __HAL_LOCK(hadc);
  10826. 8004ac0: 68fb ldr r3, [r7, #12]
  10827. 8004ac2: f893 3050 ldrb.w r3, [r3, #80] @ 0x50
  10828. 8004ac6: 2b01 cmp r3, #1
  10829. 8004ac8: d101 bne.n 8004ace <HAL_ADCEx_Calibration_Start+0x1e>
  10830. 8004aca: 2302 movs r3, #2
  10831. 8004acc: e04c b.n 8004b68 <HAL_ADCEx_Calibration_Start+0xb8>
  10832. 8004ace: 68fb ldr r3, [r7, #12]
  10833. 8004ad0: 2201 movs r2, #1
  10834. 8004ad2: f883 2050 strb.w r2, [r3, #80] @ 0x50
  10835. /* Calibration prerequisite: ADC must be disabled. */
  10836. /* Disable the ADC (if not already disabled) */
  10837. tmp_hal_status = ADC_Disable(hadc);
  10838. 8004ad6: 68f8 ldr r0, [r7, #12]
  10839. 8004ad8: f7ff fd90 bl 80045fc <ADC_Disable>
  10840. 8004adc: 4603 mov r3, r0
  10841. 8004ade: 75fb strb r3, [r7, #23]
  10842. /* Check if ADC is effectively disabled */
  10843. if (tmp_hal_status == HAL_OK)
  10844. 8004ae0: 7dfb ldrb r3, [r7, #23]
  10845. 8004ae2: 2b00 cmp r3, #0
  10846. 8004ae4: d135 bne.n 8004b52 <HAL_ADCEx_Calibration_Start+0xa2>
  10847. {
  10848. /* Set ADC state */
  10849. ADC_STATE_CLR_SET(hadc->State,
  10850. 8004ae6: 68fb ldr r3, [r7, #12]
  10851. 8004ae8: 6d5a ldr r2, [r3, #84] @ 0x54
  10852. 8004aea: 4b21 ldr r3, [pc, #132] @ (8004b70 <HAL_ADCEx_Calibration_Start+0xc0>)
  10853. 8004aec: 4013 ands r3, r2
  10854. 8004aee: f043 0202 orr.w r2, r3, #2
  10855. 8004af2: 68fb ldr r3, [r7, #12]
  10856. 8004af4: 655a str r2, [r3, #84] @ 0x54
  10857. HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY,
  10858. HAL_ADC_STATE_BUSY_INTERNAL);
  10859. /* Start ADC calibration in mode single-ended or differential */
  10860. LL_ADC_StartCalibration(hadc->Instance, CalibrationMode, SingleDiff);
  10861. 8004af6: 68fb ldr r3, [r7, #12]
  10862. 8004af8: 681b ldr r3, [r3, #0]
  10863. 8004afa: 687a ldr r2, [r7, #4]
  10864. 8004afc: 68b9 ldr r1, [r7, #8]
  10865. 8004afe: 4618 mov r0, r3
  10866. 8004b00: f7ff ff90 bl 8004a24 <LL_ADC_StartCalibration>
  10867. /* Wait for calibration completion */
  10868. while (LL_ADC_IsCalibrationOnGoing(hadc->Instance) != 0UL)
  10869. 8004b04: e014 b.n 8004b30 <HAL_ADCEx_Calibration_Start+0x80>
  10870. {
  10871. wait_loop_index++;
  10872. 8004b06: 693b ldr r3, [r7, #16]
  10873. 8004b08: 3301 adds r3, #1
  10874. 8004b0a: 613b str r3, [r7, #16]
  10875. if (wait_loop_index >= ADC_CALIBRATION_TIMEOUT)
  10876. 8004b0c: 693b ldr r3, [r7, #16]
  10877. 8004b0e: 4a19 ldr r2, [pc, #100] @ (8004b74 <HAL_ADCEx_Calibration_Start+0xc4>)
  10878. 8004b10: 4293 cmp r3, r2
  10879. 8004b12: d30d bcc.n 8004b30 <HAL_ADCEx_Calibration_Start+0x80>
  10880. {
  10881. /* Update ADC state machine to error */
  10882. ADC_STATE_CLR_SET(hadc->State,
  10883. 8004b14: 68fb ldr r3, [r7, #12]
  10884. 8004b16: 6d5b ldr r3, [r3, #84] @ 0x54
  10885. 8004b18: f023 0312 bic.w r3, r3, #18
  10886. 8004b1c: f043 0210 orr.w r2, r3, #16
  10887. 8004b20: 68fb ldr r3, [r7, #12]
  10888. 8004b22: 655a str r2, [r3, #84] @ 0x54
  10889. HAL_ADC_STATE_BUSY_INTERNAL,
  10890. HAL_ADC_STATE_ERROR_INTERNAL);
  10891. /* Process unlocked */
  10892. __HAL_UNLOCK(hadc);
  10893. 8004b24: 68fb ldr r3, [r7, #12]
  10894. 8004b26: 2200 movs r2, #0
  10895. 8004b28: f883 2050 strb.w r2, [r3, #80] @ 0x50
  10896. return HAL_ERROR;
  10897. 8004b2c: 2301 movs r3, #1
  10898. 8004b2e: e01b b.n 8004b68 <HAL_ADCEx_Calibration_Start+0xb8>
  10899. while (LL_ADC_IsCalibrationOnGoing(hadc->Instance) != 0UL)
  10900. 8004b30: 68fb ldr r3, [r7, #12]
  10901. 8004b32: 681b ldr r3, [r3, #0]
  10902. 8004b34: 4618 mov r0, r3
  10903. 8004b36: f7ff ff93 bl 8004a60 <LL_ADC_IsCalibrationOnGoing>
  10904. 8004b3a: 4603 mov r3, r0
  10905. 8004b3c: 2b00 cmp r3, #0
  10906. 8004b3e: d1e2 bne.n 8004b06 <HAL_ADCEx_Calibration_Start+0x56>
  10907. }
  10908. }
  10909. /* Set ADC state */
  10910. ADC_STATE_CLR_SET(hadc->State,
  10911. 8004b40: 68fb ldr r3, [r7, #12]
  10912. 8004b42: 6d5b ldr r3, [r3, #84] @ 0x54
  10913. 8004b44: f023 0303 bic.w r3, r3, #3
  10914. 8004b48: f043 0201 orr.w r2, r3, #1
  10915. 8004b4c: 68fb ldr r3, [r7, #12]
  10916. 8004b4e: 655a str r2, [r3, #84] @ 0x54
  10917. 8004b50: e005 b.n 8004b5e <HAL_ADCEx_Calibration_Start+0xae>
  10918. HAL_ADC_STATE_BUSY_INTERNAL,
  10919. HAL_ADC_STATE_READY);
  10920. }
  10921. else
  10922. {
  10923. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
  10924. 8004b52: 68fb ldr r3, [r7, #12]
  10925. 8004b54: 6d5b ldr r3, [r3, #84] @ 0x54
  10926. 8004b56: f043 0210 orr.w r2, r3, #16
  10927. 8004b5a: 68fb ldr r3, [r7, #12]
  10928. 8004b5c: 655a str r2, [r3, #84] @ 0x54
  10929. /* Note: No need to update variable "tmp_hal_status" here: already set */
  10930. /* to state "HAL_ERROR" by function disabling the ADC. */
  10931. }
  10932. /* Process unlocked */
  10933. __HAL_UNLOCK(hadc);
  10934. 8004b5e: 68fb ldr r3, [r7, #12]
  10935. 8004b60: 2200 movs r2, #0
  10936. 8004b62: f883 2050 strb.w r2, [r3, #80] @ 0x50
  10937. /* Return function status */
  10938. return tmp_hal_status;
  10939. 8004b66: 7dfb ldrb r3, [r7, #23]
  10940. }
  10941. 8004b68: 4618 mov r0, r3
  10942. 8004b6a: 3718 adds r7, #24
  10943. 8004b6c: 46bd mov sp, r7
  10944. 8004b6e: bd80 pop {r7, pc}
  10945. 8004b70: ffffeefd .word 0xffffeefd
  10946. 8004b74: 25c3f800 .word 0x25c3f800
  10947. 08004b78 <HAL_ADCEx_MultiModeConfigChannel>:
  10948. * @param hadc Master ADC handle
  10949. * @param multimode Structure of ADC multimode configuration
  10950. * @retval HAL status
  10951. */
  10952. HAL_StatusTypeDef HAL_ADCEx_MultiModeConfigChannel(ADC_HandleTypeDef *hadc, ADC_MultiModeTypeDef *multimode)
  10953. {
  10954. 8004b78: b590 push {r4, r7, lr}
  10955. 8004b7a: b09f sub sp, #124 @ 0x7c
  10956. 8004b7c: af00 add r7, sp, #0
  10957. 8004b7e: 6078 str r0, [r7, #4]
  10958. 8004b80: 6039 str r1, [r7, #0]
  10959. HAL_StatusTypeDef tmp_hal_status = HAL_OK;
  10960. 8004b82: 2300 movs r3, #0
  10961. 8004b84: f887 3077 strb.w r3, [r7, #119] @ 0x77
  10962. assert_param(IS_ADC_DUAL_DATA_MODE(multimode->DualModeData));
  10963. assert_param(IS_ADC_SAMPLING_DELAY(multimode->TwoSamplingDelay));
  10964. }
  10965. /* Process locked */
  10966. __HAL_LOCK(hadc);
  10967. 8004b88: 687b ldr r3, [r7, #4]
  10968. 8004b8a: f893 3050 ldrb.w r3, [r3, #80] @ 0x50
  10969. 8004b8e: 2b01 cmp r3, #1
  10970. 8004b90: d101 bne.n 8004b96 <HAL_ADCEx_MultiModeConfigChannel+0x1e>
  10971. 8004b92: 2302 movs r3, #2
  10972. 8004b94: e0be b.n 8004d14 <HAL_ADCEx_MultiModeConfigChannel+0x19c>
  10973. 8004b96: 687b ldr r3, [r7, #4]
  10974. 8004b98: 2201 movs r2, #1
  10975. 8004b9a: f883 2050 strb.w r2, [r3, #80] @ 0x50
  10976. tmphadcSlave.State = HAL_ADC_STATE_RESET;
  10977. 8004b9e: 2300 movs r3, #0
  10978. 8004ba0: 65fb str r3, [r7, #92] @ 0x5c
  10979. tmphadcSlave.ErrorCode = HAL_ADC_ERROR_NONE;
  10980. 8004ba2: 2300 movs r3, #0
  10981. 8004ba4: 663b str r3, [r7, #96] @ 0x60
  10982. ADC_MULTI_SLAVE(hadc, &tmphadcSlave);
  10983. 8004ba6: 687b ldr r3, [r7, #4]
  10984. 8004ba8: 681b ldr r3, [r3, #0]
  10985. 8004baa: 4a5c ldr r2, [pc, #368] @ (8004d1c <HAL_ADCEx_MultiModeConfigChannel+0x1a4>)
  10986. 8004bac: 4293 cmp r3, r2
  10987. 8004bae: d102 bne.n 8004bb6 <HAL_ADCEx_MultiModeConfigChannel+0x3e>
  10988. 8004bb0: 4b5b ldr r3, [pc, #364] @ (8004d20 <HAL_ADCEx_MultiModeConfigChannel+0x1a8>)
  10989. 8004bb2: 60bb str r3, [r7, #8]
  10990. 8004bb4: e001 b.n 8004bba <HAL_ADCEx_MultiModeConfigChannel+0x42>
  10991. 8004bb6: 2300 movs r3, #0
  10992. 8004bb8: 60bb str r3, [r7, #8]
  10993. if (tmphadcSlave.Instance == NULL)
  10994. 8004bba: 68bb ldr r3, [r7, #8]
  10995. 8004bbc: 2b00 cmp r3, #0
  10996. 8004bbe: d10b bne.n 8004bd8 <HAL_ADCEx_MultiModeConfigChannel+0x60>
  10997. {
  10998. /* Update ADC state machine to error */
  10999. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);
  11000. 8004bc0: 687b ldr r3, [r7, #4]
  11001. 8004bc2: 6d5b ldr r3, [r3, #84] @ 0x54
  11002. 8004bc4: f043 0220 orr.w r2, r3, #32
  11003. 8004bc8: 687b ldr r3, [r7, #4]
  11004. 8004bca: 655a str r2, [r3, #84] @ 0x54
  11005. /* Process unlocked */
  11006. __HAL_UNLOCK(hadc);
  11007. 8004bcc: 687b ldr r3, [r7, #4]
  11008. 8004bce: 2200 movs r2, #0
  11009. 8004bd0: f883 2050 strb.w r2, [r3, #80] @ 0x50
  11010. return HAL_ERROR;
  11011. 8004bd4: 2301 movs r3, #1
  11012. 8004bd6: e09d b.n 8004d14 <HAL_ADCEx_MultiModeConfigChannel+0x19c>
  11013. /* Parameters update conditioned to ADC state: */
  11014. /* Parameters that can be updated when ADC is disabled or enabled without */
  11015. /* conversion on going on regular group: */
  11016. /* - Multimode DATA Format configuration */
  11017. tmphadcSlave_conversion_on_going = LL_ADC_REG_IsConversionOngoing((&tmphadcSlave)->Instance);
  11018. 8004bd8: 68bb ldr r3, [r7, #8]
  11019. 8004bda: 4618 mov r0, r3
  11020. 8004bdc: f7ff ff54 bl 8004a88 <LL_ADC_REG_IsConversionOngoing>
  11021. 8004be0: 6738 str r0, [r7, #112] @ 0x70
  11022. if ((LL_ADC_REG_IsConversionOngoing(hadc->Instance) == 0UL)
  11023. 8004be2: 687b ldr r3, [r7, #4]
  11024. 8004be4: 681b ldr r3, [r3, #0]
  11025. 8004be6: 4618 mov r0, r3
  11026. 8004be8: f7ff ff4e bl 8004a88 <LL_ADC_REG_IsConversionOngoing>
  11027. 8004bec: 4603 mov r3, r0
  11028. 8004bee: 2b00 cmp r3, #0
  11029. 8004bf0: d17f bne.n 8004cf2 <HAL_ADCEx_MultiModeConfigChannel+0x17a>
  11030. && (tmphadcSlave_conversion_on_going == 0UL))
  11031. 8004bf2: 6f3b ldr r3, [r7, #112] @ 0x70
  11032. 8004bf4: 2b00 cmp r3, #0
  11033. 8004bf6: d17c bne.n 8004cf2 <HAL_ADCEx_MultiModeConfigChannel+0x17a>
  11034. {
  11035. /* Pointer to the common control register */
  11036. tmpADC_Common = __LL_ADC_COMMON_INSTANCE(hadc->Instance);
  11037. 8004bf8: 687b ldr r3, [r7, #4]
  11038. 8004bfa: 681b ldr r3, [r3, #0]
  11039. 8004bfc: 4a47 ldr r2, [pc, #284] @ (8004d1c <HAL_ADCEx_MultiModeConfigChannel+0x1a4>)
  11040. 8004bfe: 4293 cmp r3, r2
  11041. 8004c00: d004 beq.n 8004c0c <HAL_ADCEx_MultiModeConfigChannel+0x94>
  11042. 8004c02: 687b ldr r3, [r7, #4]
  11043. 8004c04: 681b ldr r3, [r3, #0]
  11044. 8004c06: 4a46 ldr r2, [pc, #280] @ (8004d20 <HAL_ADCEx_MultiModeConfigChannel+0x1a8>)
  11045. 8004c08: 4293 cmp r3, r2
  11046. 8004c0a: d101 bne.n 8004c10 <HAL_ADCEx_MultiModeConfigChannel+0x98>
  11047. 8004c0c: 4b45 ldr r3, [pc, #276] @ (8004d24 <HAL_ADCEx_MultiModeConfigChannel+0x1ac>)
  11048. 8004c0e: e000 b.n 8004c12 <HAL_ADCEx_MultiModeConfigChannel+0x9a>
  11049. 8004c10: 4b45 ldr r3, [pc, #276] @ (8004d28 <HAL_ADCEx_MultiModeConfigChannel+0x1b0>)
  11050. 8004c12: 66fb str r3, [r7, #108] @ 0x6c
  11051. /* If multimode is selected, configure all multimode parameters. */
  11052. /* Otherwise, reset multimode parameters (can be used in case of */
  11053. /* transition from multimode to independent mode). */
  11054. if (multimode->Mode != ADC_MODE_INDEPENDENT)
  11055. 8004c14: 683b ldr r3, [r7, #0]
  11056. 8004c16: 681b ldr r3, [r3, #0]
  11057. 8004c18: 2b00 cmp r3, #0
  11058. 8004c1a: d039 beq.n 8004c90 <HAL_ADCEx_MultiModeConfigChannel+0x118>
  11059. {
  11060. MODIFY_REG(tmpADC_Common->CCR, ADC_CCR_DAMDF, multimode->DualModeData);
  11061. 8004c1c: 6efb ldr r3, [r7, #108] @ 0x6c
  11062. 8004c1e: 689b ldr r3, [r3, #8]
  11063. 8004c20: f423 4240 bic.w r2, r3, #49152 @ 0xc000
  11064. 8004c24: 683b ldr r3, [r7, #0]
  11065. 8004c26: 685b ldr r3, [r3, #4]
  11066. 8004c28: 431a orrs r2, r3
  11067. 8004c2a: 6efb ldr r3, [r7, #108] @ 0x6c
  11068. 8004c2c: 609a str r2, [r3, #8]
  11069. /* from 1 to 8 clock cycles for 12 bits */
  11070. /* from 1 to 6 clock cycles for 10 and 8 bits */
  11071. /* If a higher delay is selected, it will be clipped to maximum delay */
  11072. /* range */
  11073. if (__LL_ADC_IS_ENABLED_ALL_COMMON_INSTANCE(__LL_ADC_COMMON_INSTANCE(hadc->Instance)) == 0UL)
  11074. 8004c2e: 687b ldr r3, [r7, #4]
  11075. 8004c30: 681b ldr r3, [r3, #0]
  11076. 8004c32: 4a3a ldr r2, [pc, #232] @ (8004d1c <HAL_ADCEx_MultiModeConfigChannel+0x1a4>)
  11077. 8004c34: 4293 cmp r3, r2
  11078. 8004c36: d004 beq.n 8004c42 <HAL_ADCEx_MultiModeConfigChannel+0xca>
  11079. 8004c38: 687b ldr r3, [r7, #4]
  11080. 8004c3a: 681b ldr r3, [r3, #0]
  11081. 8004c3c: 4a38 ldr r2, [pc, #224] @ (8004d20 <HAL_ADCEx_MultiModeConfigChannel+0x1a8>)
  11082. 8004c3e: 4293 cmp r3, r2
  11083. 8004c40: d10e bne.n 8004c60 <HAL_ADCEx_MultiModeConfigChannel+0xe8>
  11084. 8004c42: 4836 ldr r0, [pc, #216] @ (8004d1c <HAL_ADCEx_MultiModeConfigChannel+0x1a4>)
  11085. 8004c44: f7ff feda bl 80049fc <LL_ADC_IsEnabled>
  11086. 8004c48: 4604 mov r4, r0
  11087. 8004c4a: 4835 ldr r0, [pc, #212] @ (8004d20 <HAL_ADCEx_MultiModeConfigChannel+0x1a8>)
  11088. 8004c4c: f7ff fed6 bl 80049fc <LL_ADC_IsEnabled>
  11089. 8004c50: 4603 mov r3, r0
  11090. 8004c52: 4323 orrs r3, r4
  11091. 8004c54: 2b00 cmp r3, #0
  11092. 8004c56: bf0c ite eq
  11093. 8004c58: 2301 moveq r3, #1
  11094. 8004c5a: 2300 movne r3, #0
  11095. 8004c5c: b2db uxtb r3, r3
  11096. 8004c5e: e008 b.n 8004c72 <HAL_ADCEx_MultiModeConfigChannel+0xfa>
  11097. 8004c60: 4832 ldr r0, [pc, #200] @ (8004d2c <HAL_ADCEx_MultiModeConfigChannel+0x1b4>)
  11098. 8004c62: f7ff fecb bl 80049fc <LL_ADC_IsEnabled>
  11099. 8004c66: 4603 mov r3, r0
  11100. 8004c68: 2b00 cmp r3, #0
  11101. 8004c6a: bf0c ite eq
  11102. 8004c6c: 2301 moveq r3, #1
  11103. 8004c6e: 2300 movne r3, #0
  11104. 8004c70: b2db uxtb r3, r3
  11105. 8004c72: 2b00 cmp r3, #0
  11106. 8004c74: d047 beq.n 8004d06 <HAL_ADCEx_MultiModeConfigChannel+0x18e>
  11107. {
  11108. MODIFY_REG(tmpADC_Common->CCR,
  11109. 8004c76: 6efb ldr r3, [r7, #108] @ 0x6c
  11110. 8004c78: 689a ldr r2, [r3, #8]
  11111. 8004c7a: 4b2d ldr r3, [pc, #180] @ (8004d30 <HAL_ADCEx_MultiModeConfigChannel+0x1b8>)
  11112. 8004c7c: 4013 ands r3, r2
  11113. 8004c7e: 683a ldr r2, [r7, #0]
  11114. 8004c80: 6811 ldr r1, [r2, #0]
  11115. 8004c82: 683a ldr r2, [r7, #0]
  11116. 8004c84: 6892 ldr r2, [r2, #8]
  11117. 8004c86: 430a orrs r2, r1
  11118. 8004c88: 431a orrs r2, r3
  11119. 8004c8a: 6efb ldr r3, [r7, #108] @ 0x6c
  11120. 8004c8c: 609a str r2, [r3, #8]
  11121. if (multimode->Mode != ADC_MODE_INDEPENDENT)
  11122. 8004c8e: e03a b.n 8004d06 <HAL_ADCEx_MultiModeConfigChannel+0x18e>
  11123. );
  11124. }
  11125. }
  11126. else /* ADC_MODE_INDEPENDENT */
  11127. {
  11128. CLEAR_BIT(tmpADC_Common->CCR, ADC_CCR_DAMDF);
  11129. 8004c90: 6efb ldr r3, [r7, #108] @ 0x6c
  11130. 8004c92: 689b ldr r3, [r3, #8]
  11131. 8004c94: f423 4240 bic.w r2, r3, #49152 @ 0xc000
  11132. 8004c98: 6efb ldr r3, [r7, #108] @ 0x6c
  11133. 8004c9a: 609a str r2, [r3, #8]
  11134. /* Parameters that can be updated only when ADC is disabled: */
  11135. /* - Multimode mode selection */
  11136. /* - Multimode delay */
  11137. if (__LL_ADC_IS_ENABLED_ALL_COMMON_INSTANCE(__LL_ADC_COMMON_INSTANCE(hadc->Instance)) == 0UL)
  11138. 8004c9c: 687b ldr r3, [r7, #4]
  11139. 8004c9e: 681b ldr r3, [r3, #0]
  11140. 8004ca0: 4a1e ldr r2, [pc, #120] @ (8004d1c <HAL_ADCEx_MultiModeConfigChannel+0x1a4>)
  11141. 8004ca2: 4293 cmp r3, r2
  11142. 8004ca4: d004 beq.n 8004cb0 <HAL_ADCEx_MultiModeConfigChannel+0x138>
  11143. 8004ca6: 687b ldr r3, [r7, #4]
  11144. 8004ca8: 681b ldr r3, [r3, #0]
  11145. 8004caa: 4a1d ldr r2, [pc, #116] @ (8004d20 <HAL_ADCEx_MultiModeConfigChannel+0x1a8>)
  11146. 8004cac: 4293 cmp r3, r2
  11147. 8004cae: d10e bne.n 8004cce <HAL_ADCEx_MultiModeConfigChannel+0x156>
  11148. 8004cb0: 481a ldr r0, [pc, #104] @ (8004d1c <HAL_ADCEx_MultiModeConfigChannel+0x1a4>)
  11149. 8004cb2: f7ff fea3 bl 80049fc <LL_ADC_IsEnabled>
  11150. 8004cb6: 4604 mov r4, r0
  11151. 8004cb8: 4819 ldr r0, [pc, #100] @ (8004d20 <HAL_ADCEx_MultiModeConfigChannel+0x1a8>)
  11152. 8004cba: f7ff fe9f bl 80049fc <LL_ADC_IsEnabled>
  11153. 8004cbe: 4603 mov r3, r0
  11154. 8004cc0: 4323 orrs r3, r4
  11155. 8004cc2: 2b00 cmp r3, #0
  11156. 8004cc4: bf0c ite eq
  11157. 8004cc6: 2301 moveq r3, #1
  11158. 8004cc8: 2300 movne r3, #0
  11159. 8004cca: b2db uxtb r3, r3
  11160. 8004ccc: e008 b.n 8004ce0 <HAL_ADCEx_MultiModeConfigChannel+0x168>
  11161. 8004cce: 4817 ldr r0, [pc, #92] @ (8004d2c <HAL_ADCEx_MultiModeConfigChannel+0x1b4>)
  11162. 8004cd0: f7ff fe94 bl 80049fc <LL_ADC_IsEnabled>
  11163. 8004cd4: 4603 mov r3, r0
  11164. 8004cd6: 2b00 cmp r3, #0
  11165. 8004cd8: bf0c ite eq
  11166. 8004cda: 2301 moveq r3, #1
  11167. 8004cdc: 2300 movne r3, #0
  11168. 8004cde: b2db uxtb r3, r3
  11169. 8004ce0: 2b00 cmp r3, #0
  11170. 8004ce2: d010 beq.n 8004d06 <HAL_ADCEx_MultiModeConfigChannel+0x18e>
  11171. {
  11172. CLEAR_BIT(tmpADC_Common->CCR, ADC_CCR_DUAL | ADC_CCR_DELAY);
  11173. 8004ce4: 6efb ldr r3, [r7, #108] @ 0x6c
  11174. 8004ce6: 689a ldr r2, [r3, #8]
  11175. 8004ce8: 4b11 ldr r3, [pc, #68] @ (8004d30 <HAL_ADCEx_MultiModeConfigChannel+0x1b8>)
  11176. 8004cea: 4013 ands r3, r2
  11177. 8004cec: 6efa ldr r2, [r7, #108] @ 0x6c
  11178. 8004cee: 6093 str r3, [r2, #8]
  11179. if (multimode->Mode != ADC_MODE_INDEPENDENT)
  11180. 8004cf0: e009 b.n 8004d06 <HAL_ADCEx_MultiModeConfigChannel+0x18e>
  11181. /* If one of the ADC sharing the same common group is enabled, no update */
  11182. /* could be done on neither of the multimode structure parameters. */
  11183. else
  11184. {
  11185. /* Update ADC state machine to error */
  11186. SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);
  11187. 8004cf2: 687b ldr r3, [r7, #4]
  11188. 8004cf4: 6d5b ldr r3, [r3, #84] @ 0x54
  11189. 8004cf6: f043 0220 orr.w r2, r3, #32
  11190. 8004cfa: 687b ldr r3, [r7, #4]
  11191. 8004cfc: 655a str r2, [r3, #84] @ 0x54
  11192. tmp_hal_status = HAL_ERROR;
  11193. 8004cfe: 2301 movs r3, #1
  11194. 8004d00: f887 3077 strb.w r3, [r7, #119] @ 0x77
  11195. 8004d04: e000 b.n 8004d08 <HAL_ADCEx_MultiModeConfigChannel+0x190>
  11196. if (multimode->Mode != ADC_MODE_INDEPENDENT)
  11197. 8004d06: bf00 nop
  11198. }
  11199. /* Process unlocked */
  11200. __HAL_UNLOCK(hadc);
  11201. 8004d08: 687b ldr r3, [r7, #4]
  11202. 8004d0a: 2200 movs r2, #0
  11203. 8004d0c: f883 2050 strb.w r2, [r3, #80] @ 0x50
  11204. /* Return function status */
  11205. return tmp_hal_status;
  11206. 8004d10: f897 3077 ldrb.w r3, [r7, #119] @ 0x77
  11207. }
  11208. 8004d14: 4618 mov r0, r3
  11209. 8004d16: 377c adds r7, #124 @ 0x7c
  11210. 8004d18: 46bd mov sp, r7
  11211. 8004d1a: bd90 pop {r4, r7, pc}
  11212. 8004d1c: 40022000 .word 0x40022000
  11213. 8004d20: 40022100 .word 0x40022100
  11214. 8004d24: 40022300 .word 0x40022300
  11215. 8004d28: 58026300 .word 0x58026300
  11216. 8004d2c: 58026000 .word 0x58026000
  11217. 8004d30: fffff0e0 .word 0xfffff0e0
  11218. 08004d34 <__NVIC_SetPriorityGrouping>:
  11219. {
  11220. 8004d34: b480 push {r7}
  11221. 8004d36: b085 sub sp, #20
  11222. 8004d38: af00 add r7, sp, #0
  11223. 8004d3a: 6078 str r0, [r7, #4]
  11224. uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */
  11225. 8004d3c: 687b ldr r3, [r7, #4]
  11226. 8004d3e: f003 0307 and.w r3, r3, #7
  11227. 8004d42: 60fb str r3, [r7, #12]
  11228. reg_value = SCB->AIRCR; /* read old register configuration */
  11229. 8004d44: 4b0b ldr r3, [pc, #44] @ (8004d74 <__NVIC_SetPriorityGrouping+0x40>)
  11230. 8004d46: 68db ldr r3, [r3, #12]
  11231. 8004d48: 60bb str r3, [r7, #8]
  11232. reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */
  11233. 8004d4a: 68ba ldr r2, [r7, #8]
  11234. 8004d4c: f64f 03ff movw r3, #63743 @ 0xf8ff
  11235. 8004d50: 4013 ands r3, r2
  11236. 8004d52: 60bb str r3, [r7, #8]
  11237. (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */
  11238. 8004d54: 68fb ldr r3, [r7, #12]
  11239. 8004d56: 021a lsls r2, r3, #8
  11240. ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |
  11241. 8004d58: 68bb ldr r3, [r7, #8]
  11242. 8004d5a: 431a orrs r2, r3
  11243. reg_value = (reg_value |
  11244. 8004d5c: 4b06 ldr r3, [pc, #24] @ (8004d78 <__NVIC_SetPriorityGrouping+0x44>)
  11245. 8004d5e: 4313 orrs r3, r2
  11246. 8004d60: 60bb str r3, [r7, #8]
  11247. SCB->AIRCR = reg_value;
  11248. 8004d62: 4a04 ldr r2, [pc, #16] @ (8004d74 <__NVIC_SetPriorityGrouping+0x40>)
  11249. 8004d64: 68bb ldr r3, [r7, #8]
  11250. 8004d66: 60d3 str r3, [r2, #12]
  11251. }
  11252. 8004d68: bf00 nop
  11253. 8004d6a: 3714 adds r7, #20
  11254. 8004d6c: 46bd mov sp, r7
  11255. 8004d6e: f85d 7b04 ldr.w r7, [sp], #4
  11256. 8004d72: 4770 bx lr
  11257. 8004d74: e000ed00 .word 0xe000ed00
  11258. 8004d78: 05fa0000 .word 0x05fa0000
  11259. 08004d7c <__NVIC_GetPriorityGrouping>:
  11260. {
  11261. 8004d7c: b480 push {r7}
  11262. 8004d7e: af00 add r7, sp, #0
  11263. return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos));
  11264. 8004d80: 4b04 ldr r3, [pc, #16] @ (8004d94 <__NVIC_GetPriorityGrouping+0x18>)
  11265. 8004d82: 68db ldr r3, [r3, #12]
  11266. 8004d84: 0a1b lsrs r3, r3, #8
  11267. 8004d86: f003 0307 and.w r3, r3, #7
  11268. }
  11269. 8004d8a: 4618 mov r0, r3
  11270. 8004d8c: 46bd mov sp, r7
  11271. 8004d8e: f85d 7b04 ldr.w r7, [sp], #4
  11272. 8004d92: 4770 bx lr
  11273. 8004d94: e000ed00 .word 0xe000ed00
  11274. 08004d98 <__NVIC_EnableIRQ>:
  11275. {
  11276. 8004d98: b480 push {r7}
  11277. 8004d9a: b083 sub sp, #12
  11278. 8004d9c: af00 add r7, sp, #0
  11279. 8004d9e: 4603 mov r3, r0
  11280. 8004da0: 80fb strh r3, [r7, #6]
  11281. if ((int32_t)(IRQn) >= 0)
  11282. 8004da2: f9b7 3006 ldrsh.w r3, [r7, #6]
  11283. 8004da6: 2b00 cmp r3, #0
  11284. 8004da8: db0b blt.n 8004dc2 <__NVIC_EnableIRQ+0x2a>
  11285. NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
  11286. 8004daa: 88fb ldrh r3, [r7, #6]
  11287. 8004dac: f003 021f and.w r2, r3, #31
  11288. 8004db0: 4907 ldr r1, [pc, #28] @ (8004dd0 <__NVIC_EnableIRQ+0x38>)
  11289. 8004db2: f9b7 3006 ldrsh.w r3, [r7, #6]
  11290. 8004db6: 095b lsrs r3, r3, #5
  11291. 8004db8: 2001 movs r0, #1
  11292. 8004dba: fa00 f202 lsl.w r2, r0, r2
  11293. 8004dbe: f841 2023 str.w r2, [r1, r3, lsl #2]
  11294. }
  11295. 8004dc2: bf00 nop
  11296. 8004dc4: 370c adds r7, #12
  11297. 8004dc6: 46bd mov sp, r7
  11298. 8004dc8: f85d 7b04 ldr.w r7, [sp], #4
  11299. 8004dcc: 4770 bx lr
  11300. 8004dce: bf00 nop
  11301. 8004dd0: e000e100 .word 0xe000e100
  11302. 08004dd4 <__NVIC_SetPriority>:
  11303. {
  11304. 8004dd4: b480 push {r7}
  11305. 8004dd6: b083 sub sp, #12
  11306. 8004dd8: af00 add r7, sp, #0
  11307. 8004dda: 4603 mov r3, r0
  11308. 8004ddc: 6039 str r1, [r7, #0]
  11309. 8004dde: 80fb strh r3, [r7, #6]
  11310. if ((int32_t)(IRQn) >= 0)
  11311. 8004de0: f9b7 3006 ldrsh.w r3, [r7, #6]
  11312. 8004de4: 2b00 cmp r3, #0
  11313. 8004de6: db0a blt.n 8004dfe <__NVIC_SetPriority+0x2a>
  11314. NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
  11315. 8004de8: 683b ldr r3, [r7, #0]
  11316. 8004dea: b2da uxtb r2, r3
  11317. 8004dec: 490c ldr r1, [pc, #48] @ (8004e20 <__NVIC_SetPriority+0x4c>)
  11318. 8004dee: f9b7 3006 ldrsh.w r3, [r7, #6]
  11319. 8004df2: 0112 lsls r2, r2, #4
  11320. 8004df4: b2d2 uxtb r2, r2
  11321. 8004df6: 440b add r3, r1
  11322. 8004df8: f883 2300 strb.w r2, [r3, #768] @ 0x300
  11323. }
  11324. 8004dfc: e00a b.n 8004e14 <__NVIC_SetPriority+0x40>
  11325. SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
  11326. 8004dfe: 683b ldr r3, [r7, #0]
  11327. 8004e00: b2da uxtb r2, r3
  11328. 8004e02: 4908 ldr r1, [pc, #32] @ (8004e24 <__NVIC_SetPriority+0x50>)
  11329. 8004e04: 88fb ldrh r3, [r7, #6]
  11330. 8004e06: f003 030f and.w r3, r3, #15
  11331. 8004e0a: 3b04 subs r3, #4
  11332. 8004e0c: 0112 lsls r2, r2, #4
  11333. 8004e0e: b2d2 uxtb r2, r2
  11334. 8004e10: 440b add r3, r1
  11335. 8004e12: 761a strb r2, [r3, #24]
  11336. }
  11337. 8004e14: bf00 nop
  11338. 8004e16: 370c adds r7, #12
  11339. 8004e18: 46bd mov sp, r7
  11340. 8004e1a: f85d 7b04 ldr.w r7, [sp], #4
  11341. 8004e1e: 4770 bx lr
  11342. 8004e20: e000e100 .word 0xe000e100
  11343. 8004e24: e000ed00 .word 0xe000ed00
  11344. 08004e28 <NVIC_EncodePriority>:
  11345. {
  11346. 8004e28: b480 push {r7}
  11347. 8004e2a: b089 sub sp, #36 @ 0x24
  11348. 8004e2c: af00 add r7, sp, #0
  11349. 8004e2e: 60f8 str r0, [r7, #12]
  11350. 8004e30: 60b9 str r1, [r7, #8]
  11351. 8004e32: 607a str r2, [r7, #4]
  11352. uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */
  11353. 8004e34: 68fb ldr r3, [r7, #12]
  11354. 8004e36: f003 0307 and.w r3, r3, #7
  11355. 8004e3a: 61fb str r3, [r7, #28]
  11356. PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);
  11357. 8004e3c: 69fb ldr r3, [r7, #28]
  11358. 8004e3e: f1c3 0307 rsb r3, r3, #7
  11359. 8004e42: 2b04 cmp r3, #4
  11360. 8004e44: bf28 it cs
  11361. 8004e46: 2304 movcs r3, #4
  11362. 8004e48: 61bb str r3, [r7, #24]
  11363. SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));
  11364. 8004e4a: 69fb ldr r3, [r7, #28]
  11365. 8004e4c: 3304 adds r3, #4
  11366. 8004e4e: 2b06 cmp r3, #6
  11367. 8004e50: d902 bls.n 8004e58 <NVIC_EncodePriority+0x30>
  11368. 8004e52: 69fb ldr r3, [r7, #28]
  11369. 8004e54: 3b03 subs r3, #3
  11370. 8004e56: e000 b.n 8004e5a <NVIC_EncodePriority+0x32>
  11371. 8004e58: 2300 movs r3, #0
  11372. 8004e5a: 617b str r3, [r7, #20]
  11373. ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) |
  11374. 8004e5c: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
  11375. 8004e60: 69bb ldr r3, [r7, #24]
  11376. 8004e62: fa02 f303 lsl.w r3, r2, r3
  11377. 8004e66: 43da mvns r2, r3
  11378. 8004e68: 68bb ldr r3, [r7, #8]
  11379. 8004e6a: 401a ands r2, r3
  11380. 8004e6c: 697b ldr r3, [r7, #20]
  11381. 8004e6e: 409a lsls r2, r3
  11382. ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL)))
  11383. 8004e70: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
  11384. 8004e74: 697b ldr r3, [r7, #20]
  11385. 8004e76: fa01 f303 lsl.w r3, r1, r3
  11386. 8004e7a: 43d9 mvns r1, r3
  11387. 8004e7c: 687b ldr r3, [r7, #4]
  11388. 8004e7e: 400b ands r3, r1
  11389. ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) |
  11390. 8004e80: 4313 orrs r3, r2
  11391. }
  11392. 8004e82: 4618 mov r0, r3
  11393. 8004e84: 3724 adds r7, #36 @ 0x24
  11394. 8004e86: 46bd mov sp, r7
  11395. 8004e88: f85d 7b04 ldr.w r7, [sp], #4
  11396. 8004e8c: 4770 bx lr
  11397. 08004e8e <HAL_NVIC_SetPriorityGrouping>:
  11398. * @note When the NVIC_PriorityGroup_0 is selected, IRQ preemption is no more possible.
  11399. * The pending IRQ priority will be managed only by the subpriority.
  11400. * @retval None
  11401. */
  11402. void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup)
  11403. {
  11404. 8004e8e: b580 push {r7, lr}
  11405. 8004e90: b082 sub sp, #8
  11406. 8004e92: af00 add r7, sp, #0
  11407. 8004e94: 6078 str r0, [r7, #4]
  11408. /* Check the parameters */
  11409. assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup));
  11410. /* Set the PRIGROUP[10:8] bits according to the PriorityGroup parameter value */
  11411. NVIC_SetPriorityGrouping(PriorityGroup);
  11412. 8004e96: 6878 ldr r0, [r7, #4]
  11413. 8004e98: f7ff ff4c bl 8004d34 <__NVIC_SetPriorityGrouping>
  11414. }
  11415. 8004e9c: bf00 nop
  11416. 8004e9e: 3708 adds r7, #8
  11417. 8004ea0: 46bd mov sp, r7
  11418. 8004ea2: bd80 pop {r7, pc}
  11419. 08004ea4 <HAL_NVIC_SetPriority>:
  11420. * This parameter can be a value between 0 and 15
  11421. * A lower priority value indicates a higher priority.
  11422. * @retval None
  11423. */
  11424. void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority)
  11425. {
  11426. 8004ea4: b580 push {r7, lr}
  11427. 8004ea6: b086 sub sp, #24
  11428. 8004ea8: af00 add r7, sp, #0
  11429. 8004eaa: 4603 mov r3, r0
  11430. 8004eac: 60b9 str r1, [r7, #8]
  11431. 8004eae: 607a str r2, [r7, #4]
  11432. 8004eb0: 81fb strh r3, [r7, #14]
  11433. /* Check the parameters */
  11434. assert_param(IS_NVIC_SUB_PRIORITY(SubPriority));
  11435. assert_param(IS_NVIC_PREEMPTION_PRIORITY(PreemptPriority));
  11436. prioritygroup = NVIC_GetPriorityGrouping();
  11437. 8004eb2: f7ff ff63 bl 8004d7c <__NVIC_GetPriorityGrouping>
  11438. 8004eb6: 6178 str r0, [r7, #20]
  11439. NVIC_SetPriority(IRQn, NVIC_EncodePriority(prioritygroup, PreemptPriority, SubPriority));
  11440. 8004eb8: 687a ldr r2, [r7, #4]
  11441. 8004eba: 68b9 ldr r1, [r7, #8]
  11442. 8004ebc: 6978 ldr r0, [r7, #20]
  11443. 8004ebe: f7ff ffb3 bl 8004e28 <NVIC_EncodePriority>
  11444. 8004ec2: 4602 mov r2, r0
  11445. 8004ec4: f9b7 300e ldrsh.w r3, [r7, #14]
  11446. 8004ec8: 4611 mov r1, r2
  11447. 8004eca: 4618 mov r0, r3
  11448. 8004ecc: f7ff ff82 bl 8004dd4 <__NVIC_SetPriority>
  11449. }
  11450. 8004ed0: bf00 nop
  11451. 8004ed2: 3718 adds r7, #24
  11452. 8004ed4: 46bd mov sp, r7
  11453. 8004ed6: bd80 pop {r7, pc}
  11454. 08004ed8 <HAL_NVIC_EnableIRQ>:
  11455. * This parameter can be an enumerator of IRQn_Type enumeration
  11456. * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32h7xxxx.h))
  11457. * @retval None
  11458. */
  11459. void HAL_NVIC_EnableIRQ(IRQn_Type IRQn)
  11460. {
  11461. 8004ed8: b580 push {r7, lr}
  11462. 8004eda: b082 sub sp, #8
  11463. 8004edc: af00 add r7, sp, #0
  11464. 8004ede: 4603 mov r3, r0
  11465. 8004ee0: 80fb strh r3, [r7, #6]
  11466. /* Check the parameters */
  11467. assert_param(IS_NVIC_DEVICE_IRQ(IRQn));
  11468. /* Enable interrupt */
  11469. NVIC_EnableIRQ(IRQn);
  11470. 8004ee2: f9b7 3006 ldrsh.w r3, [r7, #6]
  11471. 8004ee6: 4618 mov r0, r3
  11472. 8004ee8: f7ff ff56 bl 8004d98 <__NVIC_EnableIRQ>
  11473. }
  11474. 8004eec: bf00 nop
  11475. 8004eee: 3708 adds r7, #8
  11476. 8004ef0: 46bd mov sp, r7
  11477. 8004ef2: bd80 pop {r7, pc}
  11478. 08004ef4 <HAL_MPU_Disable>:
  11479. /**
  11480. * @brief Disables the MPU
  11481. * @retval None
  11482. */
  11483. void HAL_MPU_Disable(void)
  11484. {
  11485. 8004ef4: b480 push {r7}
  11486. 8004ef6: af00 add r7, sp, #0
  11487. __ASM volatile ("dmb 0xF":::"memory");
  11488. 8004ef8: f3bf 8f5f dmb sy
  11489. }
  11490. 8004efc: bf00 nop
  11491. /* Make sure outstanding transfers are done */
  11492. __DMB();
  11493. /* Disable fault exceptions */
  11494. SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk;
  11495. 8004efe: 4b07 ldr r3, [pc, #28] @ (8004f1c <HAL_MPU_Disable+0x28>)
  11496. 8004f00: 6a5b ldr r3, [r3, #36] @ 0x24
  11497. 8004f02: 4a06 ldr r2, [pc, #24] @ (8004f1c <HAL_MPU_Disable+0x28>)
  11498. 8004f04: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  11499. 8004f08: 6253 str r3, [r2, #36] @ 0x24
  11500. /* Disable the MPU and clear the control register*/
  11501. MPU->CTRL = 0;
  11502. 8004f0a: 4b05 ldr r3, [pc, #20] @ (8004f20 <HAL_MPU_Disable+0x2c>)
  11503. 8004f0c: 2200 movs r2, #0
  11504. 8004f0e: 605a str r2, [r3, #4]
  11505. }
  11506. 8004f10: bf00 nop
  11507. 8004f12: 46bd mov sp, r7
  11508. 8004f14: f85d 7b04 ldr.w r7, [sp], #4
  11509. 8004f18: 4770 bx lr
  11510. 8004f1a: bf00 nop
  11511. 8004f1c: e000ed00 .word 0xe000ed00
  11512. 8004f20: e000ed90 .word 0xe000ed90
  11513. 08004f24 <HAL_MPU_Enable>:
  11514. * @arg MPU_PRIVILEGED_DEFAULT
  11515. * @arg MPU_HFNMI_PRIVDEF
  11516. * @retval None
  11517. */
  11518. void HAL_MPU_Enable(uint32_t MPU_Control)
  11519. {
  11520. 8004f24: b480 push {r7}
  11521. 8004f26: b083 sub sp, #12
  11522. 8004f28: af00 add r7, sp, #0
  11523. 8004f2a: 6078 str r0, [r7, #4]
  11524. /* Enable the MPU */
  11525. MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk;
  11526. 8004f2c: 4a0b ldr r2, [pc, #44] @ (8004f5c <HAL_MPU_Enable+0x38>)
  11527. 8004f2e: 687b ldr r3, [r7, #4]
  11528. 8004f30: f043 0301 orr.w r3, r3, #1
  11529. 8004f34: 6053 str r3, [r2, #4]
  11530. /* Enable fault exceptions */
  11531. SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk;
  11532. 8004f36: 4b0a ldr r3, [pc, #40] @ (8004f60 <HAL_MPU_Enable+0x3c>)
  11533. 8004f38: 6a5b ldr r3, [r3, #36] @ 0x24
  11534. 8004f3a: 4a09 ldr r2, [pc, #36] @ (8004f60 <HAL_MPU_Enable+0x3c>)
  11535. 8004f3c: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  11536. 8004f40: 6253 str r3, [r2, #36] @ 0x24
  11537. __ASM volatile ("dsb 0xF":::"memory");
  11538. 8004f42: f3bf 8f4f dsb sy
  11539. }
  11540. 8004f46: bf00 nop
  11541. __ASM volatile ("isb 0xF":::"memory");
  11542. 8004f48: f3bf 8f6f isb sy
  11543. }
  11544. 8004f4c: bf00 nop
  11545. /* Ensure MPU setting take effects */
  11546. __DSB();
  11547. __ISB();
  11548. }
  11549. 8004f4e: bf00 nop
  11550. 8004f50: 370c adds r7, #12
  11551. 8004f52: 46bd mov sp, r7
  11552. 8004f54: f85d 7b04 ldr.w r7, [sp], #4
  11553. 8004f58: 4770 bx lr
  11554. 8004f5a: bf00 nop
  11555. 8004f5c: e000ed90 .word 0xe000ed90
  11556. 8004f60: e000ed00 .word 0xe000ed00
  11557. 08004f64 <HAL_MPU_ConfigRegion>:
  11558. * @param MPU_Init Pointer to a MPU_Region_InitTypeDef structure that contains
  11559. * the initialization and configuration information.
  11560. * @retval None
  11561. */
  11562. void HAL_MPU_ConfigRegion(MPU_Region_InitTypeDef *MPU_Init)
  11563. {
  11564. 8004f64: b480 push {r7}
  11565. 8004f66: b083 sub sp, #12
  11566. 8004f68: af00 add r7, sp, #0
  11567. 8004f6a: 6078 str r0, [r7, #4]
  11568. assert_param(IS_MPU_ACCESS_BUFFERABLE(MPU_Init->IsBufferable));
  11569. assert_param(IS_MPU_SUB_REGION_DISABLE(MPU_Init->SubRegionDisable));
  11570. assert_param(IS_MPU_REGION_SIZE(MPU_Init->Size));
  11571. /* Set the Region number */
  11572. MPU->RNR = MPU_Init->Number;
  11573. 8004f6c: 687b ldr r3, [r7, #4]
  11574. 8004f6e: 785a ldrb r2, [r3, #1]
  11575. 8004f70: 4b1b ldr r3, [pc, #108] @ (8004fe0 <HAL_MPU_ConfigRegion+0x7c>)
  11576. 8004f72: 609a str r2, [r3, #8]
  11577. /* Disable the Region */
  11578. CLEAR_BIT(MPU->RASR, MPU_RASR_ENABLE_Msk);
  11579. 8004f74: 4b1a ldr r3, [pc, #104] @ (8004fe0 <HAL_MPU_ConfigRegion+0x7c>)
  11580. 8004f76: 691b ldr r3, [r3, #16]
  11581. 8004f78: 4a19 ldr r2, [pc, #100] @ (8004fe0 <HAL_MPU_ConfigRegion+0x7c>)
  11582. 8004f7a: f023 0301 bic.w r3, r3, #1
  11583. 8004f7e: 6113 str r3, [r2, #16]
  11584. /* Apply configuration */
  11585. MPU->RBAR = MPU_Init->BaseAddress;
  11586. 8004f80: 4a17 ldr r2, [pc, #92] @ (8004fe0 <HAL_MPU_ConfigRegion+0x7c>)
  11587. 8004f82: 687b ldr r3, [r7, #4]
  11588. 8004f84: 685b ldr r3, [r3, #4]
  11589. 8004f86: 60d3 str r3, [r2, #12]
  11590. MPU->RASR = ((uint32_t)MPU_Init->DisableExec << MPU_RASR_XN_Pos) |
  11591. 8004f88: 687b ldr r3, [r7, #4]
  11592. 8004f8a: 7b1b ldrb r3, [r3, #12]
  11593. 8004f8c: 071a lsls r2, r3, #28
  11594. ((uint32_t)MPU_Init->AccessPermission << MPU_RASR_AP_Pos) |
  11595. 8004f8e: 687b ldr r3, [r7, #4]
  11596. 8004f90: 7adb ldrb r3, [r3, #11]
  11597. 8004f92: 061b lsls r3, r3, #24
  11598. MPU->RASR = ((uint32_t)MPU_Init->DisableExec << MPU_RASR_XN_Pos) |
  11599. 8004f94: 431a orrs r2, r3
  11600. ((uint32_t)MPU_Init->TypeExtField << MPU_RASR_TEX_Pos) |
  11601. 8004f96: 687b ldr r3, [r7, #4]
  11602. 8004f98: 7a9b ldrb r3, [r3, #10]
  11603. 8004f9a: 04db lsls r3, r3, #19
  11604. ((uint32_t)MPU_Init->AccessPermission << MPU_RASR_AP_Pos) |
  11605. 8004f9c: 431a orrs r2, r3
  11606. ((uint32_t)MPU_Init->IsShareable << MPU_RASR_S_Pos) |
  11607. 8004f9e: 687b ldr r3, [r7, #4]
  11608. 8004fa0: 7b5b ldrb r3, [r3, #13]
  11609. 8004fa2: 049b lsls r3, r3, #18
  11610. ((uint32_t)MPU_Init->TypeExtField << MPU_RASR_TEX_Pos) |
  11611. 8004fa4: 431a orrs r2, r3
  11612. ((uint32_t)MPU_Init->IsCacheable << MPU_RASR_C_Pos) |
  11613. 8004fa6: 687b ldr r3, [r7, #4]
  11614. 8004fa8: 7b9b ldrb r3, [r3, #14]
  11615. 8004faa: 045b lsls r3, r3, #17
  11616. ((uint32_t)MPU_Init->IsShareable << MPU_RASR_S_Pos) |
  11617. 8004fac: 431a orrs r2, r3
  11618. ((uint32_t)MPU_Init->IsBufferable << MPU_RASR_B_Pos) |
  11619. 8004fae: 687b ldr r3, [r7, #4]
  11620. 8004fb0: 7bdb ldrb r3, [r3, #15]
  11621. 8004fb2: 041b lsls r3, r3, #16
  11622. ((uint32_t)MPU_Init->IsCacheable << MPU_RASR_C_Pos) |
  11623. 8004fb4: 431a orrs r2, r3
  11624. ((uint32_t)MPU_Init->SubRegionDisable << MPU_RASR_SRD_Pos) |
  11625. 8004fb6: 687b ldr r3, [r7, #4]
  11626. 8004fb8: 7a5b ldrb r3, [r3, #9]
  11627. 8004fba: 021b lsls r3, r3, #8
  11628. ((uint32_t)MPU_Init->IsBufferable << MPU_RASR_B_Pos) |
  11629. 8004fbc: 431a orrs r2, r3
  11630. ((uint32_t)MPU_Init->Size << MPU_RASR_SIZE_Pos) |
  11631. 8004fbe: 687b ldr r3, [r7, #4]
  11632. 8004fc0: 7a1b ldrb r3, [r3, #8]
  11633. 8004fc2: 005b lsls r3, r3, #1
  11634. ((uint32_t)MPU_Init->SubRegionDisable << MPU_RASR_SRD_Pos) |
  11635. 8004fc4: 4313 orrs r3, r2
  11636. ((uint32_t)MPU_Init->Enable << MPU_RASR_ENABLE_Pos);
  11637. 8004fc6: 687a ldr r2, [r7, #4]
  11638. 8004fc8: 7812 ldrb r2, [r2, #0]
  11639. 8004fca: 4611 mov r1, r2
  11640. MPU->RASR = ((uint32_t)MPU_Init->DisableExec << MPU_RASR_XN_Pos) |
  11641. 8004fcc: 4a04 ldr r2, [pc, #16] @ (8004fe0 <HAL_MPU_ConfigRegion+0x7c>)
  11642. ((uint32_t)MPU_Init->Size << MPU_RASR_SIZE_Pos) |
  11643. 8004fce: 430b orrs r3, r1
  11644. MPU->RASR = ((uint32_t)MPU_Init->DisableExec << MPU_RASR_XN_Pos) |
  11645. 8004fd0: 6113 str r3, [r2, #16]
  11646. }
  11647. 8004fd2: bf00 nop
  11648. 8004fd4: 370c adds r7, #12
  11649. 8004fd6: 46bd mov sp, r7
  11650. 8004fd8: f85d 7b04 ldr.w r7, [sp], #4
  11651. 8004fdc: 4770 bx lr
  11652. 8004fde: bf00 nop
  11653. 8004fe0: e000ed90 .word 0xe000ed90
  11654. 08004fe4 <HAL_CRC_Init>:
  11655. * parameters in the CRC_InitTypeDef and create the associated handle.
  11656. * @param hcrc CRC handle
  11657. * @retval HAL status
  11658. */
  11659. HAL_StatusTypeDef HAL_CRC_Init(CRC_HandleTypeDef *hcrc)
  11660. {
  11661. 8004fe4: b580 push {r7, lr}
  11662. 8004fe6: b082 sub sp, #8
  11663. 8004fe8: af00 add r7, sp, #0
  11664. 8004fea: 6078 str r0, [r7, #4]
  11665. /* Check the CRC handle allocation */
  11666. if (hcrc == NULL)
  11667. 8004fec: 687b ldr r3, [r7, #4]
  11668. 8004fee: 2b00 cmp r3, #0
  11669. 8004ff0: d101 bne.n 8004ff6 <HAL_CRC_Init+0x12>
  11670. {
  11671. return HAL_ERROR;
  11672. 8004ff2: 2301 movs r3, #1
  11673. 8004ff4: e054 b.n 80050a0 <HAL_CRC_Init+0xbc>
  11674. }
  11675. /* Check the parameters */
  11676. assert_param(IS_CRC_ALL_INSTANCE(hcrc->Instance));
  11677. if (hcrc->State == HAL_CRC_STATE_RESET)
  11678. 8004ff6: 687b ldr r3, [r7, #4]
  11679. 8004ff8: 7f5b ldrb r3, [r3, #29]
  11680. 8004ffa: b2db uxtb r3, r3
  11681. 8004ffc: 2b00 cmp r3, #0
  11682. 8004ffe: d105 bne.n 800500c <HAL_CRC_Init+0x28>
  11683. {
  11684. /* Allocate lock resource and initialize it */
  11685. hcrc->Lock = HAL_UNLOCKED;
  11686. 8005000: 687b ldr r3, [r7, #4]
  11687. 8005002: 2200 movs r2, #0
  11688. 8005004: 771a strb r2, [r3, #28]
  11689. /* Init the low level hardware */
  11690. HAL_CRC_MspInit(hcrc);
  11691. 8005006: 6878 ldr r0, [r7, #4]
  11692. 8005008: f7fd f948 bl 800229c <HAL_CRC_MspInit>
  11693. }
  11694. hcrc->State = HAL_CRC_STATE_BUSY;
  11695. 800500c: 687b ldr r3, [r7, #4]
  11696. 800500e: 2202 movs r2, #2
  11697. 8005010: 775a strb r2, [r3, #29]
  11698. /* check whether or not non-default generating polynomial has been
  11699. * picked up by user */
  11700. assert_param(IS_DEFAULT_POLYNOMIAL(hcrc->Init.DefaultPolynomialUse));
  11701. if (hcrc->Init.DefaultPolynomialUse == DEFAULT_POLYNOMIAL_ENABLE)
  11702. 8005012: 687b ldr r3, [r7, #4]
  11703. 8005014: 791b ldrb r3, [r3, #4]
  11704. 8005016: 2b00 cmp r3, #0
  11705. 8005018: d10c bne.n 8005034 <HAL_CRC_Init+0x50>
  11706. {
  11707. /* initialize peripheral with default generating polynomial */
  11708. WRITE_REG(hcrc->Instance->POL, DEFAULT_CRC32_POLY);
  11709. 800501a: 687b ldr r3, [r7, #4]
  11710. 800501c: 681b ldr r3, [r3, #0]
  11711. 800501e: 4a22 ldr r2, [pc, #136] @ (80050a8 <HAL_CRC_Init+0xc4>)
  11712. 8005020: 615a str r2, [r3, #20]
  11713. MODIFY_REG(hcrc->Instance->CR, CRC_CR_POLYSIZE, CRC_POLYLENGTH_32B);
  11714. 8005022: 687b ldr r3, [r7, #4]
  11715. 8005024: 681b ldr r3, [r3, #0]
  11716. 8005026: 689a ldr r2, [r3, #8]
  11717. 8005028: 687b ldr r3, [r7, #4]
  11718. 800502a: 681b ldr r3, [r3, #0]
  11719. 800502c: f022 0218 bic.w r2, r2, #24
  11720. 8005030: 609a str r2, [r3, #8]
  11721. 8005032: e00c b.n 800504e <HAL_CRC_Init+0x6a>
  11722. }
  11723. else
  11724. {
  11725. /* initialize CRC peripheral with generating polynomial defined by user */
  11726. if (HAL_CRCEx_Polynomial_Set(hcrc, hcrc->Init.GeneratingPolynomial, hcrc->Init.CRCLength) != HAL_OK)
  11727. 8005034: 687b ldr r3, [r7, #4]
  11728. 8005036: 6899 ldr r1, [r3, #8]
  11729. 8005038: 687b ldr r3, [r7, #4]
  11730. 800503a: 68db ldr r3, [r3, #12]
  11731. 800503c: 461a mov r2, r3
  11732. 800503e: 6878 ldr r0, [r7, #4]
  11733. 8005040: f000 f948 bl 80052d4 <HAL_CRCEx_Polynomial_Set>
  11734. 8005044: 4603 mov r3, r0
  11735. 8005046: 2b00 cmp r3, #0
  11736. 8005048: d001 beq.n 800504e <HAL_CRC_Init+0x6a>
  11737. {
  11738. return HAL_ERROR;
  11739. 800504a: 2301 movs r3, #1
  11740. 800504c: e028 b.n 80050a0 <HAL_CRC_Init+0xbc>
  11741. }
  11742. /* check whether or not non-default CRC initial value has been
  11743. * picked up by user */
  11744. assert_param(IS_DEFAULT_INIT_VALUE(hcrc->Init.DefaultInitValueUse));
  11745. if (hcrc->Init.DefaultInitValueUse == DEFAULT_INIT_VALUE_ENABLE)
  11746. 800504e: 687b ldr r3, [r7, #4]
  11747. 8005050: 795b ldrb r3, [r3, #5]
  11748. 8005052: 2b00 cmp r3, #0
  11749. 8005054: d105 bne.n 8005062 <HAL_CRC_Init+0x7e>
  11750. {
  11751. WRITE_REG(hcrc->Instance->INIT, DEFAULT_CRC_INITVALUE);
  11752. 8005056: 687b ldr r3, [r7, #4]
  11753. 8005058: 681b ldr r3, [r3, #0]
  11754. 800505a: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
  11755. 800505e: 611a str r2, [r3, #16]
  11756. 8005060: e004 b.n 800506c <HAL_CRC_Init+0x88>
  11757. }
  11758. else
  11759. {
  11760. WRITE_REG(hcrc->Instance->INIT, hcrc->Init.InitValue);
  11761. 8005062: 687b ldr r3, [r7, #4]
  11762. 8005064: 681b ldr r3, [r3, #0]
  11763. 8005066: 687a ldr r2, [r7, #4]
  11764. 8005068: 6912 ldr r2, [r2, #16]
  11765. 800506a: 611a str r2, [r3, #16]
  11766. }
  11767. /* set input data inversion mode */
  11768. assert_param(IS_CRC_INPUTDATA_INVERSION_MODE(hcrc->Init.InputDataInversionMode));
  11769. MODIFY_REG(hcrc->Instance->CR, CRC_CR_REV_IN, hcrc->Init.InputDataInversionMode);
  11770. 800506c: 687b ldr r3, [r7, #4]
  11771. 800506e: 681b ldr r3, [r3, #0]
  11772. 8005070: 689b ldr r3, [r3, #8]
  11773. 8005072: f023 0160 bic.w r1, r3, #96 @ 0x60
  11774. 8005076: 687b ldr r3, [r7, #4]
  11775. 8005078: 695a ldr r2, [r3, #20]
  11776. 800507a: 687b ldr r3, [r7, #4]
  11777. 800507c: 681b ldr r3, [r3, #0]
  11778. 800507e: 430a orrs r2, r1
  11779. 8005080: 609a str r2, [r3, #8]
  11780. /* set output data inversion mode */
  11781. assert_param(IS_CRC_OUTPUTDATA_INVERSION_MODE(hcrc->Init.OutputDataInversionMode));
  11782. MODIFY_REG(hcrc->Instance->CR, CRC_CR_REV_OUT, hcrc->Init.OutputDataInversionMode);
  11783. 8005082: 687b ldr r3, [r7, #4]
  11784. 8005084: 681b ldr r3, [r3, #0]
  11785. 8005086: 689b ldr r3, [r3, #8]
  11786. 8005088: f023 0180 bic.w r1, r3, #128 @ 0x80
  11787. 800508c: 687b ldr r3, [r7, #4]
  11788. 800508e: 699a ldr r2, [r3, #24]
  11789. 8005090: 687b ldr r3, [r7, #4]
  11790. 8005092: 681b ldr r3, [r3, #0]
  11791. 8005094: 430a orrs r2, r1
  11792. 8005096: 609a str r2, [r3, #8]
  11793. /* makes sure the input data format (bytes, halfwords or words stream)
  11794. * is properly specified by user */
  11795. assert_param(IS_CRC_INPUTDATA_FORMAT(hcrc->InputDataFormat));
  11796. /* Change CRC peripheral state */
  11797. hcrc->State = HAL_CRC_STATE_READY;
  11798. 8005098: 687b ldr r3, [r7, #4]
  11799. 800509a: 2201 movs r2, #1
  11800. 800509c: 775a strb r2, [r3, #29]
  11801. /* Return function status */
  11802. return HAL_OK;
  11803. 800509e: 2300 movs r3, #0
  11804. }
  11805. 80050a0: 4618 mov r0, r3
  11806. 80050a2: 3708 adds r7, #8
  11807. 80050a4: 46bd mov sp, r7
  11808. 80050a6: bd80 pop {r7, pc}
  11809. 80050a8: 04c11db7 .word 0x04c11db7
  11810. 080050ac <HAL_CRC_Calculate>:
  11811. * and the API will internally adjust its input data processing based on the
  11812. * handle field hcrc->InputDataFormat.
  11813. * @retval uint32_t CRC (returned value LSBs for CRC shorter than 32 bits)
  11814. */
  11815. uint32_t HAL_CRC_Calculate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength)
  11816. {
  11817. 80050ac: b580 push {r7, lr}
  11818. 80050ae: b086 sub sp, #24
  11819. 80050b0: af00 add r7, sp, #0
  11820. 80050b2: 60f8 str r0, [r7, #12]
  11821. 80050b4: 60b9 str r1, [r7, #8]
  11822. 80050b6: 607a str r2, [r7, #4]
  11823. uint32_t index; /* CRC input data buffer index */
  11824. uint32_t temp = 0U; /* CRC output (read from hcrc->Instance->DR register) */
  11825. 80050b8: 2300 movs r3, #0
  11826. 80050ba: 613b str r3, [r7, #16]
  11827. /* Change CRC peripheral state */
  11828. hcrc->State = HAL_CRC_STATE_BUSY;
  11829. 80050bc: 68fb ldr r3, [r7, #12]
  11830. 80050be: 2202 movs r2, #2
  11831. 80050c0: 775a strb r2, [r3, #29]
  11832. /* Reset CRC Calculation Unit (hcrc->Instance->INIT is
  11833. * written in hcrc->Instance->DR) */
  11834. __HAL_CRC_DR_RESET(hcrc);
  11835. 80050c2: 68fb ldr r3, [r7, #12]
  11836. 80050c4: 681b ldr r3, [r3, #0]
  11837. 80050c6: 689a ldr r2, [r3, #8]
  11838. 80050c8: 68fb ldr r3, [r7, #12]
  11839. 80050ca: 681b ldr r3, [r3, #0]
  11840. 80050cc: f042 0201 orr.w r2, r2, #1
  11841. 80050d0: 609a str r2, [r3, #8]
  11842. switch (hcrc->InputDataFormat)
  11843. 80050d2: 68fb ldr r3, [r7, #12]
  11844. 80050d4: 6a1b ldr r3, [r3, #32]
  11845. 80050d6: 2b03 cmp r3, #3
  11846. 80050d8: d006 beq.n 80050e8 <HAL_CRC_Calculate+0x3c>
  11847. 80050da: 2b03 cmp r3, #3
  11848. 80050dc: d829 bhi.n 8005132 <HAL_CRC_Calculate+0x86>
  11849. 80050de: 2b01 cmp r3, #1
  11850. 80050e0: d019 beq.n 8005116 <HAL_CRC_Calculate+0x6a>
  11851. 80050e2: 2b02 cmp r3, #2
  11852. 80050e4: d01e beq.n 8005124 <HAL_CRC_Calculate+0x78>
  11853. /* Specific 16-bit input data handling */
  11854. temp = CRC_Handle_16(hcrc, (uint16_t *)(void *)pBuffer, BufferLength); /* Derogation MisraC2012 R.11.5 */
  11855. break;
  11856. default:
  11857. break;
  11858. 80050e6: e024 b.n 8005132 <HAL_CRC_Calculate+0x86>
  11859. for (index = 0U; index < BufferLength; index++)
  11860. 80050e8: 2300 movs r3, #0
  11861. 80050ea: 617b str r3, [r7, #20]
  11862. 80050ec: e00a b.n 8005104 <HAL_CRC_Calculate+0x58>
  11863. hcrc->Instance->DR = pBuffer[index];
  11864. 80050ee: 697b ldr r3, [r7, #20]
  11865. 80050f0: 009b lsls r3, r3, #2
  11866. 80050f2: 68ba ldr r2, [r7, #8]
  11867. 80050f4: 441a add r2, r3
  11868. 80050f6: 68fb ldr r3, [r7, #12]
  11869. 80050f8: 681b ldr r3, [r3, #0]
  11870. 80050fa: 6812 ldr r2, [r2, #0]
  11871. 80050fc: 601a str r2, [r3, #0]
  11872. for (index = 0U; index < BufferLength; index++)
  11873. 80050fe: 697b ldr r3, [r7, #20]
  11874. 8005100: 3301 adds r3, #1
  11875. 8005102: 617b str r3, [r7, #20]
  11876. 8005104: 697a ldr r2, [r7, #20]
  11877. 8005106: 687b ldr r3, [r7, #4]
  11878. 8005108: 429a cmp r2, r3
  11879. 800510a: d3f0 bcc.n 80050ee <HAL_CRC_Calculate+0x42>
  11880. temp = hcrc->Instance->DR;
  11881. 800510c: 68fb ldr r3, [r7, #12]
  11882. 800510e: 681b ldr r3, [r3, #0]
  11883. 8005110: 681b ldr r3, [r3, #0]
  11884. 8005112: 613b str r3, [r7, #16]
  11885. break;
  11886. 8005114: e00e b.n 8005134 <HAL_CRC_Calculate+0x88>
  11887. temp = CRC_Handle_8(hcrc, (uint8_t *)pBuffer, BufferLength);
  11888. 8005116: 687a ldr r2, [r7, #4]
  11889. 8005118: 68b9 ldr r1, [r7, #8]
  11890. 800511a: 68f8 ldr r0, [r7, #12]
  11891. 800511c: f000 f812 bl 8005144 <CRC_Handle_8>
  11892. 8005120: 6138 str r0, [r7, #16]
  11893. break;
  11894. 8005122: e007 b.n 8005134 <HAL_CRC_Calculate+0x88>
  11895. temp = CRC_Handle_16(hcrc, (uint16_t *)(void *)pBuffer, BufferLength); /* Derogation MisraC2012 R.11.5 */
  11896. 8005124: 687a ldr r2, [r7, #4]
  11897. 8005126: 68b9 ldr r1, [r7, #8]
  11898. 8005128: 68f8 ldr r0, [r7, #12]
  11899. 800512a: f000 f899 bl 8005260 <CRC_Handle_16>
  11900. 800512e: 6138 str r0, [r7, #16]
  11901. break;
  11902. 8005130: e000 b.n 8005134 <HAL_CRC_Calculate+0x88>
  11903. break;
  11904. 8005132: bf00 nop
  11905. }
  11906. /* Change CRC peripheral state */
  11907. hcrc->State = HAL_CRC_STATE_READY;
  11908. 8005134: 68fb ldr r3, [r7, #12]
  11909. 8005136: 2201 movs r2, #1
  11910. 8005138: 775a strb r2, [r3, #29]
  11911. /* Return the CRC computed value */
  11912. return temp;
  11913. 800513a: 693b ldr r3, [r7, #16]
  11914. }
  11915. 800513c: 4618 mov r0, r3
  11916. 800513e: 3718 adds r7, #24
  11917. 8005140: 46bd mov sp, r7
  11918. 8005142: bd80 pop {r7, pc}
  11919. 08005144 <CRC_Handle_8>:
  11920. * @param pBuffer pointer to the input data buffer
  11921. * @param BufferLength input data buffer length
  11922. * @retval uint32_t CRC (returned value LSBs for CRC shorter than 32 bits)
  11923. */
  11924. static uint32_t CRC_Handle_8(CRC_HandleTypeDef *hcrc, uint8_t pBuffer[], uint32_t BufferLength)
  11925. {
  11926. 8005144: b480 push {r7}
  11927. 8005146: b089 sub sp, #36 @ 0x24
  11928. 8005148: af00 add r7, sp, #0
  11929. 800514a: 60f8 str r0, [r7, #12]
  11930. 800514c: 60b9 str r1, [r7, #8]
  11931. 800514e: 607a str r2, [r7, #4]
  11932. __IO uint16_t *pReg;
  11933. /* Processing time optimization: 4 bytes are entered in a row with a single word write,
  11934. * last bytes must be carefully fed to the CRC calculator to ensure a correct type
  11935. * handling by the peripheral */
  11936. for (i = 0U; i < (BufferLength / 4U); i++)
  11937. 8005150: 2300 movs r3, #0
  11938. 8005152: 61fb str r3, [r7, #28]
  11939. 8005154: e023 b.n 800519e <CRC_Handle_8+0x5a>
  11940. {
  11941. hcrc->Instance->DR = ((uint32_t)pBuffer[4U * i] << 24U) | \
  11942. 8005156: 69fb ldr r3, [r7, #28]
  11943. 8005158: 009b lsls r3, r3, #2
  11944. 800515a: 68ba ldr r2, [r7, #8]
  11945. 800515c: 4413 add r3, r2
  11946. 800515e: 781b ldrb r3, [r3, #0]
  11947. 8005160: 061a lsls r2, r3, #24
  11948. ((uint32_t)pBuffer[(4U * i) + 1U] << 16U) | \
  11949. 8005162: 69fb ldr r3, [r7, #28]
  11950. 8005164: 009b lsls r3, r3, #2
  11951. 8005166: 3301 adds r3, #1
  11952. 8005168: 68b9 ldr r1, [r7, #8]
  11953. 800516a: 440b add r3, r1
  11954. 800516c: 781b ldrb r3, [r3, #0]
  11955. 800516e: 041b lsls r3, r3, #16
  11956. hcrc->Instance->DR = ((uint32_t)pBuffer[4U * i] << 24U) | \
  11957. 8005170: 431a orrs r2, r3
  11958. ((uint32_t)pBuffer[(4U * i) + 2U] << 8U) | \
  11959. 8005172: 69fb ldr r3, [r7, #28]
  11960. 8005174: 009b lsls r3, r3, #2
  11961. 8005176: 3302 adds r3, #2
  11962. 8005178: 68b9 ldr r1, [r7, #8]
  11963. 800517a: 440b add r3, r1
  11964. 800517c: 781b ldrb r3, [r3, #0]
  11965. 800517e: 021b lsls r3, r3, #8
  11966. ((uint32_t)pBuffer[(4U * i) + 1U] << 16U) | \
  11967. 8005180: 431a orrs r2, r3
  11968. (uint32_t)pBuffer[(4U * i) + 3U];
  11969. 8005182: 69fb ldr r3, [r7, #28]
  11970. 8005184: 009b lsls r3, r3, #2
  11971. 8005186: 3303 adds r3, #3
  11972. 8005188: 68b9 ldr r1, [r7, #8]
  11973. 800518a: 440b add r3, r1
  11974. 800518c: 781b ldrb r3, [r3, #0]
  11975. 800518e: 4619 mov r1, r3
  11976. hcrc->Instance->DR = ((uint32_t)pBuffer[4U * i] << 24U) | \
  11977. 8005190: 68fb ldr r3, [r7, #12]
  11978. 8005192: 681b ldr r3, [r3, #0]
  11979. ((uint32_t)pBuffer[(4U * i) + 2U] << 8U) | \
  11980. 8005194: 430a orrs r2, r1
  11981. hcrc->Instance->DR = ((uint32_t)pBuffer[4U * i] << 24U) | \
  11982. 8005196: 601a str r2, [r3, #0]
  11983. for (i = 0U; i < (BufferLength / 4U); i++)
  11984. 8005198: 69fb ldr r3, [r7, #28]
  11985. 800519a: 3301 adds r3, #1
  11986. 800519c: 61fb str r3, [r7, #28]
  11987. 800519e: 687b ldr r3, [r7, #4]
  11988. 80051a0: 089b lsrs r3, r3, #2
  11989. 80051a2: 69fa ldr r2, [r7, #28]
  11990. 80051a4: 429a cmp r2, r3
  11991. 80051a6: d3d6 bcc.n 8005156 <CRC_Handle_8+0x12>
  11992. }
  11993. /* last bytes specific handling */
  11994. if ((BufferLength % 4U) != 0U)
  11995. 80051a8: 687b ldr r3, [r7, #4]
  11996. 80051aa: f003 0303 and.w r3, r3, #3
  11997. 80051ae: 2b00 cmp r3, #0
  11998. 80051b0: d04d beq.n 800524e <CRC_Handle_8+0x10a>
  11999. {
  12000. if ((BufferLength % 4U) == 1U)
  12001. 80051b2: 687b ldr r3, [r7, #4]
  12002. 80051b4: f003 0303 and.w r3, r3, #3
  12003. 80051b8: 2b01 cmp r3, #1
  12004. 80051ba: d107 bne.n 80051cc <CRC_Handle_8+0x88>
  12005. {
  12006. *(__IO uint8_t *)(__IO void *)(&hcrc->Instance->DR) = pBuffer[4U * i]; /* Derogation MisraC2012 R.11.5 */
  12007. 80051bc: 69fb ldr r3, [r7, #28]
  12008. 80051be: 009b lsls r3, r3, #2
  12009. 80051c0: 68ba ldr r2, [r7, #8]
  12010. 80051c2: 4413 add r3, r2
  12011. 80051c4: 68fa ldr r2, [r7, #12]
  12012. 80051c6: 6812 ldr r2, [r2, #0]
  12013. 80051c8: 781b ldrb r3, [r3, #0]
  12014. 80051ca: 7013 strb r3, [r2, #0]
  12015. }
  12016. if ((BufferLength % 4U) == 2U)
  12017. 80051cc: 687b ldr r3, [r7, #4]
  12018. 80051ce: f003 0303 and.w r3, r3, #3
  12019. 80051d2: 2b02 cmp r3, #2
  12020. 80051d4: d116 bne.n 8005204 <CRC_Handle_8+0xc0>
  12021. {
  12022. data = ((uint16_t)(pBuffer[4U * i]) << 8U) | (uint16_t)pBuffer[(4U * i) + 1U];
  12023. 80051d6: 69fb ldr r3, [r7, #28]
  12024. 80051d8: 009b lsls r3, r3, #2
  12025. 80051da: 68ba ldr r2, [r7, #8]
  12026. 80051dc: 4413 add r3, r2
  12027. 80051de: 781b ldrb r3, [r3, #0]
  12028. 80051e0: 021b lsls r3, r3, #8
  12029. 80051e2: b21a sxth r2, r3
  12030. 80051e4: 69fb ldr r3, [r7, #28]
  12031. 80051e6: 009b lsls r3, r3, #2
  12032. 80051e8: 3301 adds r3, #1
  12033. 80051ea: 68b9 ldr r1, [r7, #8]
  12034. 80051ec: 440b add r3, r1
  12035. 80051ee: 781b ldrb r3, [r3, #0]
  12036. 80051f0: b21b sxth r3, r3
  12037. 80051f2: 4313 orrs r3, r2
  12038. 80051f4: b21b sxth r3, r3
  12039. 80051f6: 837b strh r3, [r7, #26]
  12040. pReg = (__IO uint16_t *)(__IO void *)(&hcrc->Instance->DR); /* Derogation MisraC2012 R.11.5 */
  12041. 80051f8: 68fb ldr r3, [r7, #12]
  12042. 80051fa: 681b ldr r3, [r3, #0]
  12043. 80051fc: 617b str r3, [r7, #20]
  12044. *pReg = data;
  12045. 80051fe: 697b ldr r3, [r7, #20]
  12046. 8005200: 8b7a ldrh r2, [r7, #26]
  12047. 8005202: 801a strh r2, [r3, #0]
  12048. }
  12049. if ((BufferLength % 4U) == 3U)
  12050. 8005204: 687b ldr r3, [r7, #4]
  12051. 8005206: f003 0303 and.w r3, r3, #3
  12052. 800520a: 2b03 cmp r3, #3
  12053. 800520c: d11f bne.n 800524e <CRC_Handle_8+0x10a>
  12054. {
  12055. data = ((uint16_t)(pBuffer[4U * i]) << 8U) | (uint16_t)pBuffer[(4U * i) + 1U];
  12056. 800520e: 69fb ldr r3, [r7, #28]
  12057. 8005210: 009b lsls r3, r3, #2
  12058. 8005212: 68ba ldr r2, [r7, #8]
  12059. 8005214: 4413 add r3, r2
  12060. 8005216: 781b ldrb r3, [r3, #0]
  12061. 8005218: 021b lsls r3, r3, #8
  12062. 800521a: b21a sxth r2, r3
  12063. 800521c: 69fb ldr r3, [r7, #28]
  12064. 800521e: 009b lsls r3, r3, #2
  12065. 8005220: 3301 adds r3, #1
  12066. 8005222: 68b9 ldr r1, [r7, #8]
  12067. 8005224: 440b add r3, r1
  12068. 8005226: 781b ldrb r3, [r3, #0]
  12069. 8005228: b21b sxth r3, r3
  12070. 800522a: 4313 orrs r3, r2
  12071. 800522c: b21b sxth r3, r3
  12072. 800522e: 837b strh r3, [r7, #26]
  12073. pReg = (__IO uint16_t *)(__IO void *)(&hcrc->Instance->DR); /* Derogation MisraC2012 R.11.5 */
  12074. 8005230: 68fb ldr r3, [r7, #12]
  12075. 8005232: 681b ldr r3, [r3, #0]
  12076. 8005234: 617b str r3, [r7, #20]
  12077. *pReg = data;
  12078. 8005236: 697b ldr r3, [r7, #20]
  12079. 8005238: 8b7a ldrh r2, [r7, #26]
  12080. 800523a: 801a strh r2, [r3, #0]
  12081. *(__IO uint8_t *)(__IO void *)(&hcrc->Instance->DR) = pBuffer[(4U * i) + 2U]; /* Derogation MisraC2012 R.11.5 */
  12082. 800523c: 69fb ldr r3, [r7, #28]
  12083. 800523e: 009b lsls r3, r3, #2
  12084. 8005240: 3302 adds r3, #2
  12085. 8005242: 68ba ldr r2, [r7, #8]
  12086. 8005244: 4413 add r3, r2
  12087. 8005246: 68fa ldr r2, [r7, #12]
  12088. 8005248: 6812 ldr r2, [r2, #0]
  12089. 800524a: 781b ldrb r3, [r3, #0]
  12090. 800524c: 7013 strb r3, [r2, #0]
  12091. }
  12092. }
  12093. /* Return the CRC computed value */
  12094. return hcrc->Instance->DR;
  12095. 800524e: 68fb ldr r3, [r7, #12]
  12096. 8005250: 681b ldr r3, [r3, #0]
  12097. 8005252: 681b ldr r3, [r3, #0]
  12098. }
  12099. 8005254: 4618 mov r0, r3
  12100. 8005256: 3724 adds r7, #36 @ 0x24
  12101. 8005258: 46bd mov sp, r7
  12102. 800525a: f85d 7b04 ldr.w r7, [sp], #4
  12103. 800525e: 4770 bx lr
  12104. 08005260 <CRC_Handle_16>:
  12105. * @param pBuffer pointer to the input data buffer
  12106. * @param BufferLength input data buffer length
  12107. * @retval uint32_t CRC (returned value LSBs for CRC shorter than 32 bits)
  12108. */
  12109. static uint32_t CRC_Handle_16(CRC_HandleTypeDef *hcrc, uint16_t pBuffer[], uint32_t BufferLength)
  12110. {
  12111. 8005260: b480 push {r7}
  12112. 8005262: b087 sub sp, #28
  12113. 8005264: af00 add r7, sp, #0
  12114. 8005266: 60f8 str r0, [r7, #12]
  12115. 8005268: 60b9 str r1, [r7, #8]
  12116. 800526a: 607a str r2, [r7, #4]
  12117. __IO uint16_t *pReg;
  12118. /* Processing time optimization: 2 HalfWords are entered in a row with a single word write,
  12119. * in case of odd length, last HalfWord must be carefully fed to the CRC calculator to ensure
  12120. * a correct type handling by the peripheral */
  12121. for (i = 0U; i < (BufferLength / 2U); i++)
  12122. 800526c: 2300 movs r3, #0
  12123. 800526e: 617b str r3, [r7, #20]
  12124. 8005270: e013 b.n 800529a <CRC_Handle_16+0x3a>
  12125. {
  12126. hcrc->Instance->DR = ((uint32_t)pBuffer[2U * i] << 16U) | (uint32_t)pBuffer[(2U * i) + 1U];
  12127. 8005272: 697b ldr r3, [r7, #20]
  12128. 8005274: 009b lsls r3, r3, #2
  12129. 8005276: 68ba ldr r2, [r7, #8]
  12130. 8005278: 4413 add r3, r2
  12131. 800527a: 881b ldrh r3, [r3, #0]
  12132. 800527c: 041a lsls r2, r3, #16
  12133. 800527e: 697b ldr r3, [r7, #20]
  12134. 8005280: 009b lsls r3, r3, #2
  12135. 8005282: 3302 adds r3, #2
  12136. 8005284: 68b9 ldr r1, [r7, #8]
  12137. 8005286: 440b add r3, r1
  12138. 8005288: 881b ldrh r3, [r3, #0]
  12139. 800528a: 4619 mov r1, r3
  12140. 800528c: 68fb ldr r3, [r7, #12]
  12141. 800528e: 681b ldr r3, [r3, #0]
  12142. 8005290: 430a orrs r2, r1
  12143. 8005292: 601a str r2, [r3, #0]
  12144. for (i = 0U; i < (BufferLength / 2U); i++)
  12145. 8005294: 697b ldr r3, [r7, #20]
  12146. 8005296: 3301 adds r3, #1
  12147. 8005298: 617b str r3, [r7, #20]
  12148. 800529a: 687b ldr r3, [r7, #4]
  12149. 800529c: 085b lsrs r3, r3, #1
  12150. 800529e: 697a ldr r2, [r7, #20]
  12151. 80052a0: 429a cmp r2, r3
  12152. 80052a2: d3e6 bcc.n 8005272 <CRC_Handle_16+0x12>
  12153. }
  12154. if ((BufferLength % 2U) != 0U)
  12155. 80052a4: 687b ldr r3, [r7, #4]
  12156. 80052a6: f003 0301 and.w r3, r3, #1
  12157. 80052aa: 2b00 cmp r3, #0
  12158. 80052ac: d009 beq.n 80052c2 <CRC_Handle_16+0x62>
  12159. {
  12160. pReg = (__IO uint16_t *)(__IO void *)(&hcrc->Instance->DR); /* Derogation MisraC2012 R.11.5 */
  12161. 80052ae: 68fb ldr r3, [r7, #12]
  12162. 80052b0: 681b ldr r3, [r3, #0]
  12163. 80052b2: 613b str r3, [r7, #16]
  12164. *pReg = pBuffer[2U * i];
  12165. 80052b4: 697b ldr r3, [r7, #20]
  12166. 80052b6: 009b lsls r3, r3, #2
  12167. 80052b8: 68ba ldr r2, [r7, #8]
  12168. 80052ba: 4413 add r3, r2
  12169. 80052bc: 881a ldrh r2, [r3, #0]
  12170. 80052be: 693b ldr r3, [r7, #16]
  12171. 80052c0: 801a strh r2, [r3, #0]
  12172. }
  12173. /* Return the CRC computed value */
  12174. return hcrc->Instance->DR;
  12175. 80052c2: 68fb ldr r3, [r7, #12]
  12176. 80052c4: 681b ldr r3, [r3, #0]
  12177. 80052c6: 681b ldr r3, [r3, #0]
  12178. }
  12179. 80052c8: 4618 mov r0, r3
  12180. 80052ca: 371c adds r7, #28
  12181. 80052cc: 46bd mov sp, r7
  12182. 80052ce: f85d 7b04 ldr.w r7, [sp], #4
  12183. 80052d2: 4770 bx lr
  12184. 080052d4 <HAL_CRCEx_Polynomial_Set>:
  12185. * @arg @ref CRC_POLYLENGTH_16B 16-bit long CRC (generating polynomial of degree 16)
  12186. * @arg @ref CRC_POLYLENGTH_32B 32-bit long CRC (generating polynomial of degree 32)
  12187. * @retval HAL status
  12188. */
  12189. HAL_StatusTypeDef HAL_CRCEx_Polynomial_Set(CRC_HandleTypeDef *hcrc, uint32_t Pol, uint32_t PolyLength)
  12190. {
  12191. 80052d4: b480 push {r7}
  12192. 80052d6: b087 sub sp, #28
  12193. 80052d8: af00 add r7, sp, #0
  12194. 80052da: 60f8 str r0, [r7, #12]
  12195. 80052dc: 60b9 str r1, [r7, #8]
  12196. 80052de: 607a str r2, [r7, #4]
  12197. HAL_StatusTypeDef status = HAL_OK;
  12198. 80052e0: 2300 movs r3, #0
  12199. 80052e2: 75fb strb r3, [r7, #23]
  12200. uint32_t msb = 31U; /* polynomial degree is 32 at most, so msb is initialized to max value */
  12201. 80052e4: 231f movs r3, #31
  12202. 80052e6: 613b str r3, [r7, #16]
  12203. /* Check the parameters */
  12204. assert_param(IS_CRC_POL_LENGTH(PolyLength));
  12205. /* Ensure that the generating polynomial is odd */
  12206. if ((Pol & (uint32_t)(0x1U)) == 0U)
  12207. 80052e8: 68bb ldr r3, [r7, #8]
  12208. 80052ea: f003 0301 and.w r3, r3, #1
  12209. 80052ee: 2b00 cmp r3, #0
  12210. 80052f0: d102 bne.n 80052f8 <HAL_CRCEx_Polynomial_Set+0x24>
  12211. {
  12212. status = HAL_ERROR;
  12213. 80052f2: 2301 movs r3, #1
  12214. 80052f4: 75fb strb r3, [r7, #23]
  12215. 80052f6: e063 b.n 80053c0 <HAL_CRCEx_Polynomial_Set+0xec>
  12216. * definition. HAL_ERROR is reported if Pol degree is
  12217. * larger than that indicated by PolyLength.
  12218. * Look for MSB position: msb will contain the degree of
  12219. * the second to the largest polynomial member. E.g., for
  12220. * X^7 + X^6 + X^5 + X^2 + 1, msb = 6. */
  12221. while ((msb-- > 0U) && ((Pol & ((uint32_t)(0x1U) << (msb & 0x1FU))) == 0U))
  12222. 80052f8: bf00 nop
  12223. 80052fa: 693b ldr r3, [r7, #16]
  12224. 80052fc: 1e5a subs r2, r3, #1
  12225. 80052fe: 613a str r2, [r7, #16]
  12226. 8005300: 2b00 cmp r3, #0
  12227. 8005302: d009 beq.n 8005318 <HAL_CRCEx_Polynomial_Set+0x44>
  12228. 8005304: 693b ldr r3, [r7, #16]
  12229. 8005306: f003 031f and.w r3, r3, #31
  12230. 800530a: 68ba ldr r2, [r7, #8]
  12231. 800530c: fa22 f303 lsr.w r3, r2, r3
  12232. 8005310: f003 0301 and.w r3, r3, #1
  12233. 8005314: 2b00 cmp r3, #0
  12234. 8005316: d0f0 beq.n 80052fa <HAL_CRCEx_Polynomial_Set+0x26>
  12235. {
  12236. }
  12237. switch (PolyLength)
  12238. 8005318: 687b ldr r3, [r7, #4]
  12239. 800531a: 2b18 cmp r3, #24
  12240. 800531c: d846 bhi.n 80053ac <HAL_CRCEx_Polynomial_Set+0xd8>
  12241. 800531e: a201 add r2, pc, #4 @ (adr r2, 8005324 <HAL_CRCEx_Polynomial_Set+0x50>)
  12242. 8005320: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  12243. 8005324: 080053b3 .word 0x080053b3
  12244. 8005328: 080053ad .word 0x080053ad
  12245. 800532c: 080053ad .word 0x080053ad
  12246. 8005330: 080053ad .word 0x080053ad
  12247. 8005334: 080053ad .word 0x080053ad
  12248. 8005338: 080053ad .word 0x080053ad
  12249. 800533c: 080053ad .word 0x080053ad
  12250. 8005340: 080053ad .word 0x080053ad
  12251. 8005344: 080053a1 .word 0x080053a1
  12252. 8005348: 080053ad .word 0x080053ad
  12253. 800534c: 080053ad .word 0x080053ad
  12254. 8005350: 080053ad .word 0x080053ad
  12255. 8005354: 080053ad .word 0x080053ad
  12256. 8005358: 080053ad .word 0x080053ad
  12257. 800535c: 080053ad .word 0x080053ad
  12258. 8005360: 080053ad .word 0x080053ad
  12259. 8005364: 08005395 .word 0x08005395
  12260. 8005368: 080053ad .word 0x080053ad
  12261. 800536c: 080053ad .word 0x080053ad
  12262. 8005370: 080053ad .word 0x080053ad
  12263. 8005374: 080053ad .word 0x080053ad
  12264. 8005378: 080053ad .word 0x080053ad
  12265. 800537c: 080053ad .word 0x080053ad
  12266. 8005380: 080053ad .word 0x080053ad
  12267. 8005384: 08005389 .word 0x08005389
  12268. {
  12269. case CRC_POLYLENGTH_7B:
  12270. if (msb >= HAL_CRC_LENGTH_7B)
  12271. 8005388: 693b ldr r3, [r7, #16]
  12272. 800538a: 2b06 cmp r3, #6
  12273. 800538c: d913 bls.n 80053b6 <HAL_CRCEx_Polynomial_Set+0xe2>
  12274. {
  12275. status = HAL_ERROR;
  12276. 800538e: 2301 movs r3, #1
  12277. 8005390: 75fb strb r3, [r7, #23]
  12278. }
  12279. break;
  12280. 8005392: e010 b.n 80053b6 <HAL_CRCEx_Polynomial_Set+0xe2>
  12281. case CRC_POLYLENGTH_8B:
  12282. if (msb >= HAL_CRC_LENGTH_8B)
  12283. 8005394: 693b ldr r3, [r7, #16]
  12284. 8005396: 2b07 cmp r3, #7
  12285. 8005398: d90f bls.n 80053ba <HAL_CRCEx_Polynomial_Set+0xe6>
  12286. {
  12287. status = HAL_ERROR;
  12288. 800539a: 2301 movs r3, #1
  12289. 800539c: 75fb strb r3, [r7, #23]
  12290. }
  12291. break;
  12292. 800539e: e00c b.n 80053ba <HAL_CRCEx_Polynomial_Set+0xe6>
  12293. case CRC_POLYLENGTH_16B:
  12294. if (msb >= HAL_CRC_LENGTH_16B)
  12295. 80053a0: 693b ldr r3, [r7, #16]
  12296. 80053a2: 2b0f cmp r3, #15
  12297. 80053a4: d90b bls.n 80053be <HAL_CRCEx_Polynomial_Set+0xea>
  12298. {
  12299. status = HAL_ERROR;
  12300. 80053a6: 2301 movs r3, #1
  12301. 80053a8: 75fb strb r3, [r7, #23]
  12302. }
  12303. break;
  12304. 80053aa: e008 b.n 80053be <HAL_CRCEx_Polynomial_Set+0xea>
  12305. case CRC_POLYLENGTH_32B:
  12306. /* no polynomial definition vs. polynomial length issue possible */
  12307. break;
  12308. default:
  12309. status = HAL_ERROR;
  12310. 80053ac: 2301 movs r3, #1
  12311. 80053ae: 75fb strb r3, [r7, #23]
  12312. break;
  12313. 80053b0: e006 b.n 80053c0 <HAL_CRCEx_Polynomial_Set+0xec>
  12314. break;
  12315. 80053b2: bf00 nop
  12316. 80053b4: e004 b.n 80053c0 <HAL_CRCEx_Polynomial_Set+0xec>
  12317. break;
  12318. 80053b6: bf00 nop
  12319. 80053b8: e002 b.n 80053c0 <HAL_CRCEx_Polynomial_Set+0xec>
  12320. break;
  12321. 80053ba: bf00 nop
  12322. 80053bc: e000 b.n 80053c0 <HAL_CRCEx_Polynomial_Set+0xec>
  12323. break;
  12324. 80053be: bf00 nop
  12325. }
  12326. }
  12327. if (status == HAL_OK)
  12328. 80053c0: 7dfb ldrb r3, [r7, #23]
  12329. 80053c2: 2b00 cmp r3, #0
  12330. 80053c4: d10d bne.n 80053e2 <HAL_CRCEx_Polynomial_Set+0x10e>
  12331. {
  12332. /* set generating polynomial */
  12333. WRITE_REG(hcrc->Instance->POL, Pol);
  12334. 80053c6: 68fb ldr r3, [r7, #12]
  12335. 80053c8: 681b ldr r3, [r3, #0]
  12336. 80053ca: 68ba ldr r2, [r7, #8]
  12337. 80053cc: 615a str r2, [r3, #20]
  12338. /* set generating polynomial size */
  12339. MODIFY_REG(hcrc->Instance->CR, CRC_CR_POLYSIZE, PolyLength);
  12340. 80053ce: 68fb ldr r3, [r7, #12]
  12341. 80053d0: 681b ldr r3, [r3, #0]
  12342. 80053d2: 689b ldr r3, [r3, #8]
  12343. 80053d4: f023 0118 bic.w r1, r3, #24
  12344. 80053d8: 68fb ldr r3, [r7, #12]
  12345. 80053da: 681b ldr r3, [r3, #0]
  12346. 80053dc: 687a ldr r2, [r7, #4]
  12347. 80053de: 430a orrs r2, r1
  12348. 80053e0: 609a str r2, [r3, #8]
  12349. }
  12350. /* Return function status */
  12351. return status;
  12352. 80053e2: 7dfb ldrb r3, [r7, #23]
  12353. }
  12354. 80053e4: 4618 mov r0, r3
  12355. 80053e6: 371c adds r7, #28
  12356. 80053e8: 46bd mov sp, r7
  12357. 80053ea: f85d 7b04 ldr.w r7, [sp], #4
  12358. 80053ee: 4770 bx lr
  12359. 080053f0 <HAL_DMA_Init>:
  12360. * @param hdma: Pointer to a DMA_HandleTypeDef structure that contains
  12361. * the configuration information for the specified DMA Stream.
  12362. * @retval HAL status
  12363. */
  12364. HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma)
  12365. {
  12366. 80053f0: b580 push {r7, lr}
  12367. 80053f2: b086 sub sp, #24
  12368. 80053f4: af00 add r7, sp, #0
  12369. 80053f6: 6078 str r0, [r7, #4]
  12370. uint32_t registerValue;
  12371. uint32_t tickstart = HAL_GetTick();
  12372. 80053f8: f7fe f864 bl 80034c4 <HAL_GetTick>
  12373. 80053fc: 6138 str r0, [r7, #16]
  12374. DMA_Base_Registers *regs_dma;
  12375. BDMA_Base_Registers *regs_bdma;
  12376. /* Check the DMA peripheral handle */
  12377. if(hdma == NULL)
  12378. 80053fe: 687b ldr r3, [r7, #4]
  12379. 8005400: 2b00 cmp r3, #0
  12380. 8005402: d101 bne.n 8005408 <HAL_DMA_Init+0x18>
  12381. {
  12382. return HAL_ERROR;
  12383. 8005404: 2301 movs r3, #1
  12384. 8005406: e316 b.n 8005a36 <HAL_DMA_Init+0x646>
  12385. assert_param(IS_DMA_PERIPHERAL_DATA_SIZE(hdma->Init.PeriphDataAlignment));
  12386. assert_param(IS_DMA_MEMORY_DATA_SIZE(hdma->Init.MemDataAlignment));
  12387. assert_param(IS_DMA_MODE(hdma->Init.Mode));
  12388. assert_param(IS_DMA_PRIORITY(hdma->Init.Priority));
  12389. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  12390. 8005408: 687b ldr r3, [r7, #4]
  12391. 800540a: 681b ldr r3, [r3, #0]
  12392. 800540c: 4a66 ldr r2, [pc, #408] @ (80055a8 <HAL_DMA_Init+0x1b8>)
  12393. 800540e: 4293 cmp r3, r2
  12394. 8005410: d04a beq.n 80054a8 <HAL_DMA_Init+0xb8>
  12395. 8005412: 687b ldr r3, [r7, #4]
  12396. 8005414: 681b ldr r3, [r3, #0]
  12397. 8005416: 4a65 ldr r2, [pc, #404] @ (80055ac <HAL_DMA_Init+0x1bc>)
  12398. 8005418: 4293 cmp r3, r2
  12399. 800541a: d045 beq.n 80054a8 <HAL_DMA_Init+0xb8>
  12400. 800541c: 687b ldr r3, [r7, #4]
  12401. 800541e: 681b ldr r3, [r3, #0]
  12402. 8005420: 4a63 ldr r2, [pc, #396] @ (80055b0 <HAL_DMA_Init+0x1c0>)
  12403. 8005422: 4293 cmp r3, r2
  12404. 8005424: d040 beq.n 80054a8 <HAL_DMA_Init+0xb8>
  12405. 8005426: 687b ldr r3, [r7, #4]
  12406. 8005428: 681b ldr r3, [r3, #0]
  12407. 800542a: 4a62 ldr r2, [pc, #392] @ (80055b4 <HAL_DMA_Init+0x1c4>)
  12408. 800542c: 4293 cmp r3, r2
  12409. 800542e: d03b beq.n 80054a8 <HAL_DMA_Init+0xb8>
  12410. 8005430: 687b ldr r3, [r7, #4]
  12411. 8005432: 681b ldr r3, [r3, #0]
  12412. 8005434: 4a60 ldr r2, [pc, #384] @ (80055b8 <HAL_DMA_Init+0x1c8>)
  12413. 8005436: 4293 cmp r3, r2
  12414. 8005438: d036 beq.n 80054a8 <HAL_DMA_Init+0xb8>
  12415. 800543a: 687b ldr r3, [r7, #4]
  12416. 800543c: 681b ldr r3, [r3, #0]
  12417. 800543e: 4a5f ldr r2, [pc, #380] @ (80055bc <HAL_DMA_Init+0x1cc>)
  12418. 8005440: 4293 cmp r3, r2
  12419. 8005442: d031 beq.n 80054a8 <HAL_DMA_Init+0xb8>
  12420. 8005444: 687b ldr r3, [r7, #4]
  12421. 8005446: 681b ldr r3, [r3, #0]
  12422. 8005448: 4a5d ldr r2, [pc, #372] @ (80055c0 <HAL_DMA_Init+0x1d0>)
  12423. 800544a: 4293 cmp r3, r2
  12424. 800544c: d02c beq.n 80054a8 <HAL_DMA_Init+0xb8>
  12425. 800544e: 687b ldr r3, [r7, #4]
  12426. 8005450: 681b ldr r3, [r3, #0]
  12427. 8005452: 4a5c ldr r2, [pc, #368] @ (80055c4 <HAL_DMA_Init+0x1d4>)
  12428. 8005454: 4293 cmp r3, r2
  12429. 8005456: d027 beq.n 80054a8 <HAL_DMA_Init+0xb8>
  12430. 8005458: 687b ldr r3, [r7, #4]
  12431. 800545a: 681b ldr r3, [r3, #0]
  12432. 800545c: 4a5a ldr r2, [pc, #360] @ (80055c8 <HAL_DMA_Init+0x1d8>)
  12433. 800545e: 4293 cmp r3, r2
  12434. 8005460: d022 beq.n 80054a8 <HAL_DMA_Init+0xb8>
  12435. 8005462: 687b ldr r3, [r7, #4]
  12436. 8005464: 681b ldr r3, [r3, #0]
  12437. 8005466: 4a59 ldr r2, [pc, #356] @ (80055cc <HAL_DMA_Init+0x1dc>)
  12438. 8005468: 4293 cmp r3, r2
  12439. 800546a: d01d beq.n 80054a8 <HAL_DMA_Init+0xb8>
  12440. 800546c: 687b ldr r3, [r7, #4]
  12441. 800546e: 681b ldr r3, [r3, #0]
  12442. 8005470: 4a57 ldr r2, [pc, #348] @ (80055d0 <HAL_DMA_Init+0x1e0>)
  12443. 8005472: 4293 cmp r3, r2
  12444. 8005474: d018 beq.n 80054a8 <HAL_DMA_Init+0xb8>
  12445. 8005476: 687b ldr r3, [r7, #4]
  12446. 8005478: 681b ldr r3, [r3, #0]
  12447. 800547a: 4a56 ldr r2, [pc, #344] @ (80055d4 <HAL_DMA_Init+0x1e4>)
  12448. 800547c: 4293 cmp r3, r2
  12449. 800547e: d013 beq.n 80054a8 <HAL_DMA_Init+0xb8>
  12450. 8005480: 687b ldr r3, [r7, #4]
  12451. 8005482: 681b ldr r3, [r3, #0]
  12452. 8005484: 4a54 ldr r2, [pc, #336] @ (80055d8 <HAL_DMA_Init+0x1e8>)
  12453. 8005486: 4293 cmp r3, r2
  12454. 8005488: d00e beq.n 80054a8 <HAL_DMA_Init+0xb8>
  12455. 800548a: 687b ldr r3, [r7, #4]
  12456. 800548c: 681b ldr r3, [r3, #0]
  12457. 800548e: 4a53 ldr r2, [pc, #332] @ (80055dc <HAL_DMA_Init+0x1ec>)
  12458. 8005490: 4293 cmp r3, r2
  12459. 8005492: d009 beq.n 80054a8 <HAL_DMA_Init+0xb8>
  12460. 8005494: 687b ldr r3, [r7, #4]
  12461. 8005496: 681b ldr r3, [r3, #0]
  12462. 8005498: 4a51 ldr r2, [pc, #324] @ (80055e0 <HAL_DMA_Init+0x1f0>)
  12463. 800549a: 4293 cmp r3, r2
  12464. 800549c: d004 beq.n 80054a8 <HAL_DMA_Init+0xb8>
  12465. 800549e: 687b ldr r3, [r7, #4]
  12466. 80054a0: 681b ldr r3, [r3, #0]
  12467. 80054a2: 4a50 ldr r2, [pc, #320] @ (80055e4 <HAL_DMA_Init+0x1f4>)
  12468. 80054a4: 4293 cmp r3, r2
  12469. 80054a6: d101 bne.n 80054ac <HAL_DMA_Init+0xbc>
  12470. 80054a8: 2301 movs r3, #1
  12471. 80054aa: e000 b.n 80054ae <HAL_DMA_Init+0xbe>
  12472. 80054ac: 2300 movs r3, #0
  12473. 80054ae: 2b00 cmp r3, #0
  12474. 80054b0: f000 813b beq.w 800572a <HAL_DMA_Init+0x33a>
  12475. assert_param(IS_DMA_MEMORY_BURST(hdma->Init.MemBurst));
  12476. assert_param(IS_DMA_PERIPHERAL_BURST(hdma->Init.PeriphBurst));
  12477. }
  12478. /* Change DMA peripheral state */
  12479. hdma->State = HAL_DMA_STATE_BUSY;
  12480. 80054b4: 687b ldr r3, [r7, #4]
  12481. 80054b6: 2202 movs r2, #2
  12482. 80054b8: f883 2035 strb.w r2, [r3, #53] @ 0x35
  12483. /* Allocate lock resource */
  12484. __HAL_UNLOCK(hdma);
  12485. 80054bc: 687b ldr r3, [r7, #4]
  12486. 80054be: 2200 movs r2, #0
  12487. 80054c0: f883 2034 strb.w r2, [r3, #52] @ 0x34
  12488. /* Disable the peripheral */
  12489. __HAL_DMA_DISABLE(hdma);
  12490. 80054c4: 687b ldr r3, [r7, #4]
  12491. 80054c6: 681b ldr r3, [r3, #0]
  12492. 80054c8: 4a37 ldr r2, [pc, #220] @ (80055a8 <HAL_DMA_Init+0x1b8>)
  12493. 80054ca: 4293 cmp r3, r2
  12494. 80054cc: d04a beq.n 8005564 <HAL_DMA_Init+0x174>
  12495. 80054ce: 687b ldr r3, [r7, #4]
  12496. 80054d0: 681b ldr r3, [r3, #0]
  12497. 80054d2: 4a36 ldr r2, [pc, #216] @ (80055ac <HAL_DMA_Init+0x1bc>)
  12498. 80054d4: 4293 cmp r3, r2
  12499. 80054d6: d045 beq.n 8005564 <HAL_DMA_Init+0x174>
  12500. 80054d8: 687b ldr r3, [r7, #4]
  12501. 80054da: 681b ldr r3, [r3, #0]
  12502. 80054dc: 4a34 ldr r2, [pc, #208] @ (80055b0 <HAL_DMA_Init+0x1c0>)
  12503. 80054de: 4293 cmp r3, r2
  12504. 80054e0: d040 beq.n 8005564 <HAL_DMA_Init+0x174>
  12505. 80054e2: 687b ldr r3, [r7, #4]
  12506. 80054e4: 681b ldr r3, [r3, #0]
  12507. 80054e6: 4a33 ldr r2, [pc, #204] @ (80055b4 <HAL_DMA_Init+0x1c4>)
  12508. 80054e8: 4293 cmp r3, r2
  12509. 80054ea: d03b beq.n 8005564 <HAL_DMA_Init+0x174>
  12510. 80054ec: 687b ldr r3, [r7, #4]
  12511. 80054ee: 681b ldr r3, [r3, #0]
  12512. 80054f0: 4a31 ldr r2, [pc, #196] @ (80055b8 <HAL_DMA_Init+0x1c8>)
  12513. 80054f2: 4293 cmp r3, r2
  12514. 80054f4: d036 beq.n 8005564 <HAL_DMA_Init+0x174>
  12515. 80054f6: 687b ldr r3, [r7, #4]
  12516. 80054f8: 681b ldr r3, [r3, #0]
  12517. 80054fa: 4a30 ldr r2, [pc, #192] @ (80055bc <HAL_DMA_Init+0x1cc>)
  12518. 80054fc: 4293 cmp r3, r2
  12519. 80054fe: d031 beq.n 8005564 <HAL_DMA_Init+0x174>
  12520. 8005500: 687b ldr r3, [r7, #4]
  12521. 8005502: 681b ldr r3, [r3, #0]
  12522. 8005504: 4a2e ldr r2, [pc, #184] @ (80055c0 <HAL_DMA_Init+0x1d0>)
  12523. 8005506: 4293 cmp r3, r2
  12524. 8005508: d02c beq.n 8005564 <HAL_DMA_Init+0x174>
  12525. 800550a: 687b ldr r3, [r7, #4]
  12526. 800550c: 681b ldr r3, [r3, #0]
  12527. 800550e: 4a2d ldr r2, [pc, #180] @ (80055c4 <HAL_DMA_Init+0x1d4>)
  12528. 8005510: 4293 cmp r3, r2
  12529. 8005512: d027 beq.n 8005564 <HAL_DMA_Init+0x174>
  12530. 8005514: 687b ldr r3, [r7, #4]
  12531. 8005516: 681b ldr r3, [r3, #0]
  12532. 8005518: 4a2b ldr r2, [pc, #172] @ (80055c8 <HAL_DMA_Init+0x1d8>)
  12533. 800551a: 4293 cmp r3, r2
  12534. 800551c: d022 beq.n 8005564 <HAL_DMA_Init+0x174>
  12535. 800551e: 687b ldr r3, [r7, #4]
  12536. 8005520: 681b ldr r3, [r3, #0]
  12537. 8005522: 4a2a ldr r2, [pc, #168] @ (80055cc <HAL_DMA_Init+0x1dc>)
  12538. 8005524: 4293 cmp r3, r2
  12539. 8005526: d01d beq.n 8005564 <HAL_DMA_Init+0x174>
  12540. 8005528: 687b ldr r3, [r7, #4]
  12541. 800552a: 681b ldr r3, [r3, #0]
  12542. 800552c: 4a28 ldr r2, [pc, #160] @ (80055d0 <HAL_DMA_Init+0x1e0>)
  12543. 800552e: 4293 cmp r3, r2
  12544. 8005530: d018 beq.n 8005564 <HAL_DMA_Init+0x174>
  12545. 8005532: 687b ldr r3, [r7, #4]
  12546. 8005534: 681b ldr r3, [r3, #0]
  12547. 8005536: 4a27 ldr r2, [pc, #156] @ (80055d4 <HAL_DMA_Init+0x1e4>)
  12548. 8005538: 4293 cmp r3, r2
  12549. 800553a: d013 beq.n 8005564 <HAL_DMA_Init+0x174>
  12550. 800553c: 687b ldr r3, [r7, #4]
  12551. 800553e: 681b ldr r3, [r3, #0]
  12552. 8005540: 4a25 ldr r2, [pc, #148] @ (80055d8 <HAL_DMA_Init+0x1e8>)
  12553. 8005542: 4293 cmp r3, r2
  12554. 8005544: d00e beq.n 8005564 <HAL_DMA_Init+0x174>
  12555. 8005546: 687b ldr r3, [r7, #4]
  12556. 8005548: 681b ldr r3, [r3, #0]
  12557. 800554a: 4a24 ldr r2, [pc, #144] @ (80055dc <HAL_DMA_Init+0x1ec>)
  12558. 800554c: 4293 cmp r3, r2
  12559. 800554e: d009 beq.n 8005564 <HAL_DMA_Init+0x174>
  12560. 8005550: 687b ldr r3, [r7, #4]
  12561. 8005552: 681b ldr r3, [r3, #0]
  12562. 8005554: 4a22 ldr r2, [pc, #136] @ (80055e0 <HAL_DMA_Init+0x1f0>)
  12563. 8005556: 4293 cmp r3, r2
  12564. 8005558: d004 beq.n 8005564 <HAL_DMA_Init+0x174>
  12565. 800555a: 687b ldr r3, [r7, #4]
  12566. 800555c: 681b ldr r3, [r3, #0]
  12567. 800555e: 4a21 ldr r2, [pc, #132] @ (80055e4 <HAL_DMA_Init+0x1f4>)
  12568. 8005560: 4293 cmp r3, r2
  12569. 8005562: d108 bne.n 8005576 <HAL_DMA_Init+0x186>
  12570. 8005564: 687b ldr r3, [r7, #4]
  12571. 8005566: 681b ldr r3, [r3, #0]
  12572. 8005568: 681a ldr r2, [r3, #0]
  12573. 800556a: 687b ldr r3, [r7, #4]
  12574. 800556c: 681b ldr r3, [r3, #0]
  12575. 800556e: f022 0201 bic.w r2, r2, #1
  12576. 8005572: 601a str r2, [r3, #0]
  12577. 8005574: e007 b.n 8005586 <HAL_DMA_Init+0x196>
  12578. 8005576: 687b ldr r3, [r7, #4]
  12579. 8005578: 681b ldr r3, [r3, #0]
  12580. 800557a: 681a ldr r2, [r3, #0]
  12581. 800557c: 687b ldr r3, [r7, #4]
  12582. 800557e: 681b ldr r3, [r3, #0]
  12583. 8005580: f022 0201 bic.w r2, r2, #1
  12584. 8005584: 601a str r2, [r3, #0]
  12585. /* Check if the DMA Stream is effectively disabled */
  12586. while((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_EN) != 0U)
  12587. 8005586: e02f b.n 80055e8 <HAL_DMA_Init+0x1f8>
  12588. {
  12589. /* Check for the Timeout */
  12590. if((HAL_GetTick() - tickstart ) > HAL_TIMEOUT_DMA_ABORT)
  12591. 8005588: f7fd ff9c bl 80034c4 <HAL_GetTick>
  12592. 800558c: 4602 mov r2, r0
  12593. 800558e: 693b ldr r3, [r7, #16]
  12594. 8005590: 1ad3 subs r3, r2, r3
  12595. 8005592: 2b05 cmp r3, #5
  12596. 8005594: d928 bls.n 80055e8 <HAL_DMA_Init+0x1f8>
  12597. {
  12598. /* Update error code */
  12599. hdma->ErrorCode = HAL_DMA_ERROR_TIMEOUT;
  12600. 8005596: 687b ldr r3, [r7, #4]
  12601. 8005598: 2220 movs r2, #32
  12602. 800559a: 655a str r2, [r3, #84] @ 0x54
  12603. /* Change the DMA state */
  12604. hdma->State = HAL_DMA_STATE_ERROR;
  12605. 800559c: 687b ldr r3, [r7, #4]
  12606. 800559e: 2203 movs r2, #3
  12607. 80055a0: f883 2035 strb.w r2, [r3, #53] @ 0x35
  12608. return HAL_ERROR;
  12609. 80055a4: 2301 movs r3, #1
  12610. 80055a6: e246 b.n 8005a36 <HAL_DMA_Init+0x646>
  12611. 80055a8: 40020010 .word 0x40020010
  12612. 80055ac: 40020028 .word 0x40020028
  12613. 80055b0: 40020040 .word 0x40020040
  12614. 80055b4: 40020058 .word 0x40020058
  12615. 80055b8: 40020070 .word 0x40020070
  12616. 80055bc: 40020088 .word 0x40020088
  12617. 80055c0: 400200a0 .word 0x400200a0
  12618. 80055c4: 400200b8 .word 0x400200b8
  12619. 80055c8: 40020410 .word 0x40020410
  12620. 80055cc: 40020428 .word 0x40020428
  12621. 80055d0: 40020440 .word 0x40020440
  12622. 80055d4: 40020458 .word 0x40020458
  12623. 80055d8: 40020470 .word 0x40020470
  12624. 80055dc: 40020488 .word 0x40020488
  12625. 80055e0: 400204a0 .word 0x400204a0
  12626. 80055e4: 400204b8 .word 0x400204b8
  12627. while((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_EN) != 0U)
  12628. 80055e8: 687b ldr r3, [r7, #4]
  12629. 80055ea: 681b ldr r3, [r3, #0]
  12630. 80055ec: 681b ldr r3, [r3, #0]
  12631. 80055ee: f003 0301 and.w r3, r3, #1
  12632. 80055f2: 2b00 cmp r3, #0
  12633. 80055f4: d1c8 bne.n 8005588 <HAL_DMA_Init+0x198>
  12634. }
  12635. }
  12636. /* Get the CR register value */
  12637. registerValue = ((DMA_Stream_TypeDef *)hdma->Instance)->CR;
  12638. 80055f6: 687b ldr r3, [r7, #4]
  12639. 80055f8: 681b ldr r3, [r3, #0]
  12640. 80055fa: 681b ldr r3, [r3, #0]
  12641. 80055fc: 617b str r3, [r7, #20]
  12642. /* Clear CHSEL, MBURST, PBURST, PL, MSIZE, PSIZE, MINC, PINC, CIRC, DIR, CT and DBM bits */
  12643. registerValue &= ((uint32_t)~(DMA_SxCR_MBURST | DMA_SxCR_PBURST | \
  12644. 80055fe: 697a ldr r2, [r7, #20]
  12645. 8005600: 4b83 ldr r3, [pc, #524] @ (8005810 <HAL_DMA_Init+0x420>)
  12646. 8005602: 4013 ands r3, r2
  12647. 8005604: 617b str r3, [r7, #20]
  12648. DMA_SxCR_PL | DMA_SxCR_MSIZE | DMA_SxCR_PSIZE | \
  12649. DMA_SxCR_MINC | DMA_SxCR_PINC | DMA_SxCR_CIRC | \
  12650. DMA_SxCR_DIR | DMA_SxCR_CT | DMA_SxCR_DBM));
  12651. /* Prepare the DMA Stream configuration */
  12652. registerValue |= hdma->Init.Direction |
  12653. 8005606: 687b ldr r3, [r7, #4]
  12654. 8005608: 689a ldr r2, [r3, #8]
  12655. hdma->Init.PeriphInc | hdma->Init.MemInc |
  12656. 800560a: 687b ldr r3, [r7, #4]
  12657. 800560c: 68db ldr r3, [r3, #12]
  12658. registerValue |= hdma->Init.Direction |
  12659. 800560e: 431a orrs r2, r3
  12660. hdma->Init.PeriphInc | hdma->Init.MemInc |
  12661. 8005610: 687b ldr r3, [r7, #4]
  12662. 8005612: 691b ldr r3, [r3, #16]
  12663. 8005614: 431a orrs r2, r3
  12664. hdma->Init.PeriphDataAlignment | hdma->Init.MemDataAlignment |
  12665. 8005616: 687b ldr r3, [r7, #4]
  12666. 8005618: 695b ldr r3, [r3, #20]
  12667. hdma->Init.PeriphInc | hdma->Init.MemInc |
  12668. 800561a: 431a orrs r2, r3
  12669. hdma->Init.PeriphDataAlignment | hdma->Init.MemDataAlignment |
  12670. 800561c: 687b ldr r3, [r7, #4]
  12671. 800561e: 699b ldr r3, [r3, #24]
  12672. 8005620: 431a orrs r2, r3
  12673. hdma->Init.Mode | hdma->Init.Priority;
  12674. 8005622: 687b ldr r3, [r7, #4]
  12675. 8005624: 69db ldr r3, [r3, #28]
  12676. hdma->Init.PeriphDataAlignment | hdma->Init.MemDataAlignment |
  12677. 8005626: 431a orrs r2, r3
  12678. hdma->Init.Mode | hdma->Init.Priority;
  12679. 8005628: 687b ldr r3, [r7, #4]
  12680. 800562a: 6a1b ldr r3, [r3, #32]
  12681. 800562c: 4313 orrs r3, r2
  12682. registerValue |= hdma->Init.Direction |
  12683. 800562e: 697a ldr r2, [r7, #20]
  12684. 8005630: 4313 orrs r3, r2
  12685. 8005632: 617b str r3, [r7, #20]
  12686. /* the Memory burst and peripheral burst are not used when the FIFO is disabled */
  12687. if(hdma->Init.FIFOMode == DMA_FIFOMODE_ENABLE)
  12688. 8005634: 687b ldr r3, [r7, #4]
  12689. 8005636: 6a5b ldr r3, [r3, #36] @ 0x24
  12690. 8005638: 2b04 cmp r3, #4
  12691. 800563a: d107 bne.n 800564c <HAL_DMA_Init+0x25c>
  12692. {
  12693. /* Get memory burst and peripheral burst */
  12694. registerValue |= hdma->Init.MemBurst | hdma->Init.PeriphBurst;
  12695. 800563c: 687b ldr r3, [r7, #4]
  12696. 800563e: 6ada ldr r2, [r3, #44] @ 0x2c
  12697. 8005640: 687b ldr r3, [r7, #4]
  12698. 8005642: 6b1b ldr r3, [r3, #48] @ 0x30
  12699. 8005644: 4313 orrs r3, r2
  12700. 8005646: 697a ldr r2, [r7, #20]
  12701. 8005648: 4313 orrs r3, r2
  12702. 800564a: 617b str r3, [r7, #20]
  12703. }
  12704. /* Work around for Errata 2.22: UART/USART- DMA transfer lock: DMA stream could be
  12705. lock when transferring data to/from USART/UART */
  12706. #if (STM32H7_DEV_ID == 0x450UL)
  12707. if((DBGMCU->IDCODE & 0xFFFF0000U) >= 0x20000000U)
  12708. 800564c: 4b71 ldr r3, [pc, #452] @ (8005814 <HAL_DMA_Init+0x424>)
  12709. 800564e: 681a ldr r2, [r3, #0]
  12710. 8005650: 4b71 ldr r3, [pc, #452] @ (8005818 <HAL_DMA_Init+0x428>)
  12711. 8005652: 4013 ands r3, r2
  12712. 8005654: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  12713. 8005658: d328 bcc.n 80056ac <HAL_DMA_Init+0x2bc>
  12714. {
  12715. #endif /* STM32H7_DEV_ID == 0x450UL */
  12716. if(IS_DMA_UART_USART_REQUEST(hdma->Init.Request) != 0U)
  12717. 800565a: 687b ldr r3, [r7, #4]
  12718. 800565c: 685b ldr r3, [r3, #4]
  12719. 800565e: 2b28 cmp r3, #40 @ 0x28
  12720. 8005660: d903 bls.n 800566a <HAL_DMA_Init+0x27a>
  12721. 8005662: 687b ldr r3, [r7, #4]
  12722. 8005664: 685b ldr r3, [r3, #4]
  12723. 8005666: 2b2e cmp r3, #46 @ 0x2e
  12724. 8005668: d917 bls.n 800569a <HAL_DMA_Init+0x2aa>
  12725. 800566a: 687b ldr r3, [r7, #4]
  12726. 800566c: 685b ldr r3, [r3, #4]
  12727. 800566e: 2b3e cmp r3, #62 @ 0x3e
  12728. 8005670: d903 bls.n 800567a <HAL_DMA_Init+0x28a>
  12729. 8005672: 687b ldr r3, [r7, #4]
  12730. 8005674: 685b ldr r3, [r3, #4]
  12731. 8005676: 2b42 cmp r3, #66 @ 0x42
  12732. 8005678: d90f bls.n 800569a <HAL_DMA_Init+0x2aa>
  12733. 800567a: 687b ldr r3, [r7, #4]
  12734. 800567c: 685b ldr r3, [r3, #4]
  12735. 800567e: 2b46 cmp r3, #70 @ 0x46
  12736. 8005680: d903 bls.n 800568a <HAL_DMA_Init+0x29a>
  12737. 8005682: 687b ldr r3, [r7, #4]
  12738. 8005684: 685b ldr r3, [r3, #4]
  12739. 8005686: 2b48 cmp r3, #72 @ 0x48
  12740. 8005688: d907 bls.n 800569a <HAL_DMA_Init+0x2aa>
  12741. 800568a: 687b ldr r3, [r7, #4]
  12742. 800568c: 685b ldr r3, [r3, #4]
  12743. 800568e: 2b4e cmp r3, #78 @ 0x4e
  12744. 8005690: d905 bls.n 800569e <HAL_DMA_Init+0x2ae>
  12745. 8005692: 687b ldr r3, [r7, #4]
  12746. 8005694: 685b ldr r3, [r3, #4]
  12747. 8005696: 2b52 cmp r3, #82 @ 0x52
  12748. 8005698: d801 bhi.n 800569e <HAL_DMA_Init+0x2ae>
  12749. 800569a: 2301 movs r3, #1
  12750. 800569c: e000 b.n 80056a0 <HAL_DMA_Init+0x2b0>
  12751. 800569e: 2300 movs r3, #0
  12752. 80056a0: 2b00 cmp r3, #0
  12753. 80056a2: d003 beq.n 80056ac <HAL_DMA_Init+0x2bc>
  12754. {
  12755. registerValue |= DMA_SxCR_TRBUFF;
  12756. 80056a4: 697b ldr r3, [r7, #20]
  12757. 80056a6: f443 1380 orr.w r3, r3, #1048576 @ 0x100000
  12758. 80056aa: 617b str r3, [r7, #20]
  12759. #if (STM32H7_DEV_ID == 0x450UL)
  12760. }
  12761. #endif /* STM32H7_DEV_ID == 0x450UL */
  12762. /* Write to DMA Stream CR register */
  12763. ((DMA_Stream_TypeDef *)hdma->Instance)->CR = registerValue;
  12764. 80056ac: 687b ldr r3, [r7, #4]
  12765. 80056ae: 681b ldr r3, [r3, #0]
  12766. 80056b0: 697a ldr r2, [r7, #20]
  12767. 80056b2: 601a str r2, [r3, #0]
  12768. /* Get the FCR register value */
  12769. registerValue = ((DMA_Stream_TypeDef *)hdma->Instance)->FCR;
  12770. 80056b4: 687b ldr r3, [r7, #4]
  12771. 80056b6: 681b ldr r3, [r3, #0]
  12772. 80056b8: 695b ldr r3, [r3, #20]
  12773. 80056ba: 617b str r3, [r7, #20]
  12774. /* Clear Direct mode and FIFO threshold bits */
  12775. registerValue &= (uint32_t)~(DMA_SxFCR_DMDIS | DMA_SxFCR_FTH);
  12776. 80056bc: 697b ldr r3, [r7, #20]
  12777. 80056be: f023 0307 bic.w r3, r3, #7
  12778. 80056c2: 617b str r3, [r7, #20]
  12779. /* Prepare the DMA Stream FIFO configuration */
  12780. registerValue |= hdma->Init.FIFOMode;
  12781. 80056c4: 687b ldr r3, [r7, #4]
  12782. 80056c6: 6a5b ldr r3, [r3, #36] @ 0x24
  12783. 80056c8: 697a ldr r2, [r7, #20]
  12784. 80056ca: 4313 orrs r3, r2
  12785. 80056cc: 617b str r3, [r7, #20]
  12786. /* the FIFO threshold is not used when the FIFO mode is disabled */
  12787. if(hdma->Init.FIFOMode == DMA_FIFOMODE_ENABLE)
  12788. 80056ce: 687b ldr r3, [r7, #4]
  12789. 80056d0: 6a5b ldr r3, [r3, #36] @ 0x24
  12790. 80056d2: 2b04 cmp r3, #4
  12791. 80056d4: d117 bne.n 8005706 <HAL_DMA_Init+0x316>
  12792. {
  12793. /* Get the FIFO threshold */
  12794. registerValue |= hdma->Init.FIFOThreshold;
  12795. 80056d6: 687b ldr r3, [r7, #4]
  12796. 80056d8: 6a9b ldr r3, [r3, #40] @ 0x28
  12797. 80056da: 697a ldr r2, [r7, #20]
  12798. 80056dc: 4313 orrs r3, r2
  12799. 80056de: 617b str r3, [r7, #20]
  12800. /* Check compatibility between FIFO threshold level and size of the memory burst */
  12801. /* for INCR4, INCR8, INCR16 */
  12802. if(hdma->Init.MemBurst != DMA_MBURST_SINGLE)
  12803. 80056e0: 687b ldr r3, [r7, #4]
  12804. 80056e2: 6adb ldr r3, [r3, #44] @ 0x2c
  12805. 80056e4: 2b00 cmp r3, #0
  12806. 80056e6: d00e beq.n 8005706 <HAL_DMA_Init+0x316>
  12807. {
  12808. if (DMA_CheckFifoParam(hdma) != HAL_OK)
  12809. 80056e8: 6878 ldr r0, [r7, #4]
  12810. 80056ea: f002 fb33 bl 8007d54 <DMA_CheckFifoParam>
  12811. 80056ee: 4603 mov r3, r0
  12812. 80056f0: 2b00 cmp r3, #0
  12813. 80056f2: d008 beq.n 8005706 <HAL_DMA_Init+0x316>
  12814. {
  12815. /* Update error code */
  12816. hdma->ErrorCode = HAL_DMA_ERROR_PARAM;
  12817. 80056f4: 687b ldr r3, [r7, #4]
  12818. 80056f6: 2240 movs r2, #64 @ 0x40
  12819. 80056f8: 655a str r2, [r3, #84] @ 0x54
  12820. /* Change the DMA state */
  12821. hdma->State = HAL_DMA_STATE_READY;
  12822. 80056fa: 687b ldr r3, [r7, #4]
  12823. 80056fc: 2201 movs r2, #1
  12824. 80056fe: f883 2035 strb.w r2, [r3, #53] @ 0x35
  12825. return HAL_ERROR;
  12826. 8005702: 2301 movs r3, #1
  12827. 8005704: e197 b.n 8005a36 <HAL_DMA_Init+0x646>
  12828. }
  12829. }
  12830. }
  12831. /* Write to DMA Stream FCR */
  12832. ((DMA_Stream_TypeDef *)hdma->Instance)->FCR = registerValue;
  12833. 8005706: 687b ldr r3, [r7, #4]
  12834. 8005708: 681b ldr r3, [r3, #0]
  12835. 800570a: 697a ldr r2, [r7, #20]
  12836. 800570c: 615a str r2, [r3, #20]
  12837. /* Initialize StreamBaseAddress and StreamIndex parameters to be used to calculate
  12838. DMA steam Base Address needed by HAL_DMA_IRQHandler() and HAL_DMA_PollForTransfer() */
  12839. regs_dma = (DMA_Base_Registers *)DMA_CalcBaseAndBitshift(hdma);
  12840. 800570e: 6878 ldr r0, [r7, #4]
  12841. 8005710: f002 fa6e bl 8007bf0 <DMA_CalcBaseAndBitshift>
  12842. 8005714: 4603 mov r3, r0
  12843. 8005716: 60bb str r3, [r7, #8]
  12844. /* Clear all interrupt flags */
  12845. regs_dma->IFCR = 0x3FUL << (hdma->StreamIndex & 0x1FU);
  12846. 8005718: 687b ldr r3, [r7, #4]
  12847. 800571a: 6ddb ldr r3, [r3, #92] @ 0x5c
  12848. 800571c: f003 031f and.w r3, r3, #31
  12849. 8005720: 223f movs r2, #63 @ 0x3f
  12850. 8005722: 409a lsls r2, r3
  12851. 8005724: 68bb ldr r3, [r7, #8]
  12852. 8005726: 609a str r2, [r3, #8]
  12853. 8005728: e0cd b.n 80058c6 <HAL_DMA_Init+0x4d6>
  12854. }
  12855. else if(IS_BDMA_CHANNEL_INSTANCE(hdma->Instance) != 0U) /* BDMA instance(s) */
  12856. 800572a: 687b ldr r3, [r7, #4]
  12857. 800572c: 681b ldr r3, [r3, #0]
  12858. 800572e: 4a3b ldr r2, [pc, #236] @ (800581c <HAL_DMA_Init+0x42c>)
  12859. 8005730: 4293 cmp r3, r2
  12860. 8005732: d022 beq.n 800577a <HAL_DMA_Init+0x38a>
  12861. 8005734: 687b ldr r3, [r7, #4]
  12862. 8005736: 681b ldr r3, [r3, #0]
  12863. 8005738: 4a39 ldr r2, [pc, #228] @ (8005820 <HAL_DMA_Init+0x430>)
  12864. 800573a: 4293 cmp r3, r2
  12865. 800573c: d01d beq.n 800577a <HAL_DMA_Init+0x38a>
  12866. 800573e: 687b ldr r3, [r7, #4]
  12867. 8005740: 681b ldr r3, [r3, #0]
  12868. 8005742: 4a38 ldr r2, [pc, #224] @ (8005824 <HAL_DMA_Init+0x434>)
  12869. 8005744: 4293 cmp r3, r2
  12870. 8005746: d018 beq.n 800577a <HAL_DMA_Init+0x38a>
  12871. 8005748: 687b ldr r3, [r7, #4]
  12872. 800574a: 681b ldr r3, [r3, #0]
  12873. 800574c: 4a36 ldr r2, [pc, #216] @ (8005828 <HAL_DMA_Init+0x438>)
  12874. 800574e: 4293 cmp r3, r2
  12875. 8005750: d013 beq.n 800577a <HAL_DMA_Init+0x38a>
  12876. 8005752: 687b ldr r3, [r7, #4]
  12877. 8005754: 681b ldr r3, [r3, #0]
  12878. 8005756: 4a35 ldr r2, [pc, #212] @ (800582c <HAL_DMA_Init+0x43c>)
  12879. 8005758: 4293 cmp r3, r2
  12880. 800575a: d00e beq.n 800577a <HAL_DMA_Init+0x38a>
  12881. 800575c: 687b ldr r3, [r7, #4]
  12882. 800575e: 681b ldr r3, [r3, #0]
  12883. 8005760: 4a33 ldr r2, [pc, #204] @ (8005830 <HAL_DMA_Init+0x440>)
  12884. 8005762: 4293 cmp r3, r2
  12885. 8005764: d009 beq.n 800577a <HAL_DMA_Init+0x38a>
  12886. 8005766: 687b ldr r3, [r7, #4]
  12887. 8005768: 681b ldr r3, [r3, #0]
  12888. 800576a: 4a32 ldr r2, [pc, #200] @ (8005834 <HAL_DMA_Init+0x444>)
  12889. 800576c: 4293 cmp r3, r2
  12890. 800576e: d004 beq.n 800577a <HAL_DMA_Init+0x38a>
  12891. 8005770: 687b ldr r3, [r7, #4]
  12892. 8005772: 681b ldr r3, [r3, #0]
  12893. 8005774: 4a30 ldr r2, [pc, #192] @ (8005838 <HAL_DMA_Init+0x448>)
  12894. 8005776: 4293 cmp r3, r2
  12895. 8005778: d101 bne.n 800577e <HAL_DMA_Init+0x38e>
  12896. 800577a: 2301 movs r3, #1
  12897. 800577c: e000 b.n 8005780 <HAL_DMA_Init+0x390>
  12898. 800577e: 2300 movs r3, #0
  12899. 8005780: 2b00 cmp r3, #0
  12900. 8005782: f000 8097 beq.w 80058b4 <HAL_DMA_Init+0x4c4>
  12901. {
  12902. if(IS_BDMA_CHANNEL_DMAMUX_INSTANCE(hdma->Instance) != 0U)
  12903. 8005786: 687b ldr r3, [r7, #4]
  12904. 8005788: 681b ldr r3, [r3, #0]
  12905. 800578a: 4a24 ldr r2, [pc, #144] @ (800581c <HAL_DMA_Init+0x42c>)
  12906. 800578c: 4293 cmp r3, r2
  12907. 800578e: d021 beq.n 80057d4 <HAL_DMA_Init+0x3e4>
  12908. 8005790: 687b ldr r3, [r7, #4]
  12909. 8005792: 681b ldr r3, [r3, #0]
  12910. 8005794: 4a22 ldr r2, [pc, #136] @ (8005820 <HAL_DMA_Init+0x430>)
  12911. 8005796: 4293 cmp r3, r2
  12912. 8005798: d01c beq.n 80057d4 <HAL_DMA_Init+0x3e4>
  12913. 800579a: 687b ldr r3, [r7, #4]
  12914. 800579c: 681b ldr r3, [r3, #0]
  12915. 800579e: 4a21 ldr r2, [pc, #132] @ (8005824 <HAL_DMA_Init+0x434>)
  12916. 80057a0: 4293 cmp r3, r2
  12917. 80057a2: d017 beq.n 80057d4 <HAL_DMA_Init+0x3e4>
  12918. 80057a4: 687b ldr r3, [r7, #4]
  12919. 80057a6: 681b ldr r3, [r3, #0]
  12920. 80057a8: 4a1f ldr r2, [pc, #124] @ (8005828 <HAL_DMA_Init+0x438>)
  12921. 80057aa: 4293 cmp r3, r2
  12922. 80057ac: d012 beq.n 80057d4 <HAL_DMA_Init+0x3e4>
  12923. 80057ae: 687b ldr r3, [r7, #4]
  12924. 80057b0: 681b ldr r3, [r3, #0]
  12925. 80057b2: 4a1e ldr r2, [pc, #120] @ (800582c <HAL_DMA_Init+0x43c>)
  12926. 80057b4: 4293 cmp r3, r2
  12927. 80057b6: d00d beq.n 80057d4 <HAL_DMA_Init+0x3e4>
  12928. 80057b8: 687b ldr r3, [r7, #4]
  12929. 80057ba: 681b ldr r3, [r3, #0]
  12930. 80057bc: 4a1c ldr r2, [pc, #112] @ (8005830 <HAL_DMA_Init+0x440>)
  12931. 80057be: 4293 cmp r3, r2
  12932. 80057c0: d008 beq.n 80057d4 <HAL_DMA_Init+0x3e4>
  12933. 80057c2: 687b ldr r3, [r7, #4]
  12934. 80057c4: 681b ldr r3, [r3, #0]
  12935. 80057c6: 4a1b ldr r2, [pc, #108] @ (8005834 <HAL_DMA_Init+0x444>)
  12936. 80057c8: 4293 cmp r3, r2
  12937. 80057ca: d003 beq.n 80057d4 <HAL_DMA_Init+0x3e4>
  12938. 80057cc: 687b ldr r3, [r7, #4]
  12939. 80057ce: 681b ldr r3, [r3, #0]
  12940. 80057d0: 4a19 ldr r2, [pc, #100] @ (8005838 <HAL_DMA_Init+0x448>)
  12941. 80057d2: 4293 cmp r3, r2
  12942. /* Check the request parameter */
  12943. assert_param(IS_BDMA_REQUEST(hdma->Init.Request));
  12944. }
  12945. /* Change DMA peripheral state */
  12946. hdma->State = HAL_DMA_STATE_BUSY;
  12947. 80057d4: 687b ldr r3, [r7, #4]
  12948. 80057d6: 2202 movs r2, #2
  12949. 80057d8: f883 2035 strb.w r2, [r3, #53] @ 0x35
  12950. /* Allocate lock resource */
  12951. __HAL_UNLOCK(hdma);
  12952. 80057dc: 687b ldr r3, [r7, #4]
  12953. 80057de: 2200 movs r2, #0
  12954. 80057e0: f883 2034 strb.w r2, [r3, #52] @ 0x34
  12955. /* Get the CR register value */
  12956. registerValue = ((BDMA_Channel_TypeDef *)hdma->Instance)->CCR;
  12957. 80057e4: 687b ldr r3, [r7, #4]
  12958. 80057e6: 681b ldr r3, [r3, #0]
  12959. 80057e8: 681b ldr r3, [r3, #0]
  12960. 80057ea: 617b str r3, [r7, #20]
  12961. /* Clear PL, MSIZE, PSIZE, MINC, PINC, CIRC, DIR, MEM2MEM, DBM and CT bits */
  12962. registerValue &= ((uint32_t)~(BDMA_CCR_PL | BDMA_CCR_MSIZE | BDMA_CCR_PSIZE | \
  12963. 80057ec: 697a ldr r2, [r7, #20]
  12964. 80057ee: 4b13 ldr r3, [pc, #76] @ (800583c <HAL_DMA_Init+0x44c>)
  12965. 80057f0: 4013 ands r3, r2
  12966. 80057f2: 617b str r3, [r7, #20]
  12967. BDMA_CCR_MINC | BDMA_CCR_PINC | BDMA_CCR_CIRC | \
  12968. BDMA_CCR_DIR | BDMA_CCR_MEM2MEM | BDMA_CCR_DBM | \
  12969. BDMA_CCR_CT));
  12970. /* Prepare the DMA Channel configuration */
  12971. registerValue |= DMA_TO_BDMA_DIRECTION(hdma->Init.Direction) |
  12972. 80057f4: 687b ldr r3, [r7, #4]
  12973. 80057f6: 689b ldr r3, [r3, #8]
  12974. 80057f8: 2b40 cmp r3, #64 @ 0x40
  12975. 80057fa: d021 beq.n 8005840 <HAL_DMA_Init+0x450>
  12976. 80057fc: 687b ldr r3, [r7, #4]
  12977. 80057fe: 689b ldr r3, [r3, #8]
  12978. 8005800: 2b80 cmp r3, #128 @ 0x80
  12979. 8005802: d102 bne.n 800580a <HAL_DMA_Init+0x41a>
  12980. 8005804: f44f 4380 mov.w r3, #16384 @ 0x4000
  12981. 8005808: e01b b.n 8005842 <HAL_DMA_Init+0x452>
  12982. 800580a: 2300 movs r3, #0
  12983. 800580c: e019 b.n 8005842 <HAL_DMA_Init+0x452>
  12984. 800580e: bf00 nop
  12985. 8005810: fe10803f .word 0xfe10803f
  12986. 8005814: 5c001000 .word 0x5c001000
  12987. 8005818: ffff0000 .word 0xffff0000
  12988. 800581c: 58025408 .word 0x58025408
  12989. 8005820: 5802541c .word 0x5802541c
  12990. 8005824: 58025430 .word 0x58025430
  12991. 8005828: 58025444 .word 0x58025444
  12992. 800582c: 58025458 .word 0x58025458
  12993. 8005830: 5802546c .word 0x5802546c
  12994. 8005834: 58025480 .word 0x58025480
  12995. 8005838: 58025494 .word 0x58025494
  12996. 800583c: fffe000f .word 0xfffe000f
  12997. 8005840: 2310 movs r3, #16
  12998. DMA_TO_BDMA_PERIPHERAL_INC(hdma->Init.PeriphInc) |
  12999. 8005842: 687a ldr r2, [r7, #4]
  13000. 8005844: 68d2 ldr r2, [r2, #12]
  13001. 8005846: 08d2 lsrs r2, r2, #3
  13002. registerValue |= DMA_TO_BDMA_DIRECTION(hdma->Init.Direction) |
  13003. 8005848: 431a orrs r2, r3
  13004. DMA_TO_BDMA_MEMORY_INC(hdma->Init.MemInc) |
  13005. 800584a: 687b ldr r3, [r7, #4]
  13006. 800584c: 691b ldr r3, [r3, #16]
  13007. 800584e: 08db lsrs r3, r3, #3
  13008. DMA_TO_BDMA_PERIPHERAL_INC(hdma->Init.PeriphInc) |
  13009. 8005850: 431a orrs r2, r3
  13010. DMA_TO_BDMA_PDATA_SIZE(hdma->Init.PeriphDataAlignment) |
  13011. 8005852: 687b ldr r3, [r7, #4]
  13012. 8005854: 695b ldr r3, [r3, #20]
  13013. 8005856: 08db lsrs r3, r3, #3
  13014. DMA_TO_BDMA_MEMORY_INC(hdma->Init.MemInc) |
  13015. 8005858: 431a orrs r2, r3
  13016. DMA_TO_BDMA_MDATA_SIZE(hdma->Init.MemDataAlignment) |
  13017. 800585a: 687b ldr r3, [r7, #4]
  13018. 800585c: 699b ldr r3, [r3, #24]
  13019. 800585e: 08db lsrs r3, r3, #3
  13020. DMA_TO_BDMA_PDATA_SIZE(hdma->Init.PeriphDataAlignment) |
  13021. 8005860: 431a orrs r2, r3
  13022. DMA_TO_BDMA_MODE(hdma->Init.Mode) |
  13023. 8005862: 687b ldr r3, [r7, #4]
  13024. 8005864: 69db ldr r3, [r3, #28]
  13025. 8005866: 08db lsrs r3, r3, #3
  13026. DMA_TO_BDMA_MDATA_SIZE(hdma->Init.MemDataAlignment) |
  13027. 8005868: 431a orrs r2, r3
  13028. DMA_TO_BDMA_PRIORITY(hdma->Init.Priority);
  13029. 800586a: 687b ldr r3, [r7, #4]
  13030. 800586c: 6a1b ldr r3, [r3, #32]
  13031. 800586e: 091b lsrs r3, r3, #4
  13032. DMA_TO_BDMA_MODE(hdma->Init.Mode) |
  13033. 8005870: 4313 orrs r3, r2
  13034. registerValue |= DMA_TO_BDMA_DIRECTION(hdma->Init.Direction) |
  13035. 8005872: 697a ldr r2, [r7, #20]
  13036. 8005874: 4313 orrs r3, r2
  13037. 8005876: 617b str r3, [r7, #20]
  13038. /* Write to DMA Channel CR register */
  13039. ((BDMA_Channel_TypeDef *)hdma->Instance)->CCR = registerValue;
  13040. 8005878: 687b ldr r3, [r7, #4]
  13041. 800587a: 681b ldr r3, [r3, #0]
  13042. 800587c: 697a ldr r2, [r7, #20]
  13043. 800587e: 601a str r2, [r3, #0]
  13044. /* calculation of the channel index */
  13045. hdma->StreamIndex = (((uint32_t)((uint32_t*)hdma->Instance) - (uint32_t)BDMA_Channel0) / ((uint32_t)BDMA_Channel1 - (uint32_t)BDMA_Channel0)) << 2U;
  13046. 8005880: 687b ldr r3, [r7, #4]
  13047. 8005882: 681b ldr r3, [r3, #0]
  13048. 8005884: 461a mov r2, r3
  13049. 8005886: 4b6e ldr r3, [pc, #440] @ (8005a40 <HAL_DMA_Init+0x650>)
  13050. 8005888: 4413 add r3, r2
  13051. 800588a: 4a6e ldr r2, [pc, #440] @ (8005a44 <HAL_DMA_Init+0x654>)
  13052. 800588c: fba2 2303 umull r2, r3, r2, r3
  13053. 8005890: 091b lsrs r3, r3, #4
  13054. 8005892: 009a lsls r2, r3, #2
  13055. 8005894: 687b ldr r3, [r7, #4]
  13056. 8005896: 65da str r2, [r3, #92] @ 0x5c
  13057. /* Initialize StreamBaseAddress and StreamIndex parameters to be used to calculate
  13058. DMA steam Base Address needed by HAL_DMA_IRQHandler() and HAL_DMA_PollForTransfer() */
  13059. regs_bdma = (BDMA_Base_Registers *)DMA_CalcBaseAndBitshift(hdma);
  13060. 8005898: 6878 ldr r0, [r7, #4]
  13061. 800589a: f002 f9a9 bl 8007bf0 <DMA_CalcBaseAndBitshift>
  13062. 800589e: 4603 mov r3, r0
  13063. 80058a0: 60fb str r3, [r7, #12]
  13064. /* Clear all interrupt flags */
  13065. regs_bdma->IFCR = ((BDMA_IFCR_CGIF0) << (hdma->StreamIndex & 0x1FU));
  13066. 80058a2: 687b ldr r3, [r7, #4]
  13067. 80058a4: 6ddb ldr r3, [r3, #92] @ 0x5c
  13068. 80058a6: f003 031f and.w r3, r3, #31
  13069. 80058aa: 2201 movs r2, #1
  13070. 80058ac: 409a lsls r2, r3
  13071. 80058ae: 68fb ldr r3, [r7, #12]
  13072. 80058b0: 605a str r2, [r3, #4]
  13073. 80058b2: e008 b.n 80058c6 <HAL_DMA_Init+0x4d6>
  13074. }
  13075. else
  13076. {
  13077. hdma->ErrorCode = HAL_DMA_ERROR_PARAM;
  13078. 80058b4: 687b ldr r3, [r7, #4]
  13079. 80058b6: 2240 movs r2, #64 @ 0x40
  13080. 80058b8: 655a str r2, [r3, #84] @ 0x54
  13081. hdma->State = HAL_DMA_STATE_ERROR;
  13082. 80058ba: 687b ldr r3, [r7, #4]
  13083. 80058bc: 2203 movs r2, #3
  13084. 80058be: f883 2035 strb.w r2, [r3, #53] @ 0x35
  13085. return HAL_ERROR;
  13086. 80058c2: 2301 movs r3, #1
  13087. 80058c4: e0b7 b.n 8005a36 <HAL_DMA_Init+0x646>
  13088. }
  13089. if(IS_DMA_DMAMUX_ALL_INSTANCE(hdma->Instance) != 0U) /* No DMAMUX available for BDMA1 */
  13090. 80058c6: 687b ldr r3, [r7, #4]
  13091. 80058c8: 681b ldr r3, [r3, #0]
  13092. 80058ca: 4a5f ldr r2, [pc, #380] @ (8005a48 <HAL_DMA_Init+0x658>)
  13093. 80058cc: 4293 cmp r3, r2
  13094. 80058ce: d072 beq.n 80059b6 <HAL_DMA_Init+0x5c6>
  13095. 80058d0: 687b ldr r3, [r7, #4]
  13096. 80058d2: 681b ldr r3, [r3, #0]
  13097. 80058d4: 4a5d ldr r2, [pc, #372] @ (8005a4c <HAL_DMA_Init+0x65c>)
  13098. 80058d6: 4293 cmp r3, r2
  13099. 80058d8: d06d beq.n 80059b6 <HAL_DMA_Init+0x5c6>
  13100. 80058da: 687b ldr r3, [r7, #4]
  13101. 80058dc: 681b ldr r3, [r3, #0]
  13102. 80058de: 4a5c ldr r2, [pc, #368] @ (8005a50 <HAL_DMA_Init+0x660>)
  13103. 80058e0: 4293 cmp r3, r2
  13104. 80058e2: d068 beq.n 80059b6 <HAL_DMA_Init+0x5c6>
  13105. 80058e4: 687b ldr r3, [r7, #4]
  13106. 80058e6: 681b ldr r3, [r3, #0]
  13107. 80058e8: 4a5a ldr r2, [pc, #360] @ (8005a54 <HAL_DMA_Init+0x664>)
  13108. 80058ea: 4293 cmp r3, r2
  13109. 80058ec: d063 beq.n 80059b6 <HAL_DMA_Init+0x5c6>
  13110. 80058ee: 687b ldr r3, [r7, #4]
  13111. 80058f0: 681b ldr r3, [r3, #0]
  13112. 80058f2: 4a59 ldr r2, [pc, #356] @ (8005a58 <HAL_DMA_Init+0x668>)
  13113. 80058f4: 4293 cmp r3, r2
  13114. 80058f6: d05e beq.n 80059b6 <HAL_DMA_Init+0x5c6>
  13115. 80058f8: 687b ldr r3, [r7, #4]
  13116. 80058fa: 681b ldr r3, [r3, #0]
  13117. 80058fc: 4a57 ldr r2, [pc, #348] @ (8005a5c <HAL_DMA_Init+0x66c>)
  13118. 80058fe: 4293 cmp r3, r2
  13119. 8005900: d059 beq.n 80059b6 <HAL_DMA_Init+0x5c6>
  13120. 8005902: 687b ldr r3, [r7, #4]
  13121. 8005904: 681b ldr r3, [r3, #0]
  13122. 8005906: 4a56 ldr r2, [pc, #344] @ (8005a60 <HAL_DMA_Init+0x670>)
  13123. 8005908: 4293 cmp r3, r2
  13124. 800590a: d054 beq.n 80059b6 <HAL_DMA_Init+0x5c6>
  13125. 800590c: 687b ldr r3, [r7, #4]
  13126. 800590e: 681b ldr r3, [r3, #0]
  13127. 8005910: 4a54 ldr r2, [pc, #336] @ (8005a64 <HAL_DMA_Init+0x674>)
  13128. 8005912: 4293 cmp r3, r2
  13129. 8005914: d04f beq.n 80059b6 <HAL_DMA_Init+0x5c6>
  13130. 8005916: 687b ldr r3, [r7, #4]
  13131. 8005918: 681b ldr r3, [r3, #0]
  13132. 800591a: 4a53 ldr r2, [pc, #332] @ (8005a68 <HAL_DMA_Init+0x678>)
  13133. 800591c: 4293 cmp r3, r2
  13134. 800591e: d04a beq.n 80059b6 <HAL_DMA_Init+0x5c6>
  13135. 8005920: 687b ldr r3, [r7, #4]
  13136. 8005922: 681b ldr r3, [r3, #0]
  13137. 8005924: 4a51 ldr r2, [pc, #324] @ (8005a6c <HAL_DMA_Init+0x67c>)
  13138. 8005926: 4293 cmp r3, r2
  13139. 8005928: d045 beq.n 80059b6 <HAL_DMA_Init+0x5c6>
  13140. 800592a: 687b ldr r3, [r7, #4]
  13141. 800592c: 681b ldr r3, [r3, #0]
  13142. 800592e: 4a50 ldr r2, [pc, #320] @ (8005a70 <HAL_DMA_Init+0x680>)
  13143. 8005930: 4293 cmp r3, r2
  13144. 8005932: d040 beq.n 80059b6 <HAL_DMA_Init+0x5c6>
  13145. 8005934: 687b ldr r3, [r7, #4]
  13146. 8005936: 681b ldr r3, [r3, #0]
  13147. 8005938: 4a4e ldr r2, [pc, #312] @ (8005a74 <HAL_DMA_Init+0x684>)
  13148. 800593a: 4293 cmp r3, r2
  13149. 800593c: d03b beq.n 80059b6 <HAL_DMA_Init+0x5c6>
  13150. 800593e: 687b ldr r3, [r7, #4]
  13151. 8005940: 681b ldr r3, [r3, #0]
  13152. 8005942: 4a4d ldr r2, [pc, #308] @ (8005a78 <HAL_DMA_Init+0x688>)
  13153. 8005944: 4293 cmp r3, r2
  13154. 8005946: d036 beq.n 80059b6 <HAL_DMA_Init+0x5c6>
  13155. 8005948: 687b ldr r3, [r7, #4]
  13156. 800594a: 681b ldr r3, [r3, #0]
  13157. 800594c: 4a4b ldr r2, [pc, #300] @ (8005a7c <HAL_DMA_Init+0x68c>)
  13158. 800594e: 4293 cmp r3, r2
  13159. 8005950: d031 beq.n 80059b6 <HAL_DMA_Init+0x5c6>
  13160. 8005952: 687b ldr r3, [r7, #4]
  13161. 8005954: 681b ldr r3, [r3, #0]
  13162. 8005956: 4a4a ldr r2, [pc, #296] @ (8005a80 <HAL_DMA_Init+0x690>)
  13163. 8005958: 4293 cmp r3, r2
  13164. 800595a: d02c beq.n 80059b6 <HAL_DMA_Init+0x5c6>
  13165. 800595c: 687b ldr r3, [r7, #4]
  13166. 800595e: 681b ldr r3, [r3, #0]
  13167. 8005960: 4a48 ldr r2, [pc, #288] @ (8005a84 <HAL_DMA_Init+0x694>)
  13168. 8005962: 4293 cmp r3, r2
  13169. 8005964: d027 beq.n 80059b6 <HAL_DMA_Init+0x5c6>
  13170. 8005966: 687b ldr r3, [r7, #4]
  13171. 8005968: 681b ldr r3, [r3, #0]
  13172. 800596a: 4a47 ldr r2, [pc, #284] @ (8005a88 <HAL_DMA_Init+0x698>)
  13173. 800596c: 4293 cmp r3, r2
  13174. 800596e: d022 beq.n 80059b6 <HAL_DMA_Init+0x5c6>
  13175. 8005970: 687b ldr r3, [r7, #4]
  13176. 8005972: 681b ldr r3, [r3, #0]
  13177. 8005974: 4a45 ldr r2, [pc, #276] @ (8005a8c <HAL_DMA_Init+0x69c>)
  13178. 8005976: 4293 cmp r3, r2
  13179. 8005978: d01d beq.n 80059b6 <HAL_DMA_Init+0x5c6>
  13180. 800597a: 687b ldr r3, [r7, #4]
  13181. 800597c: 681b ldr r3, [r3, #0]
  13182. 800597e: 4a44 ldr r2, [pc, #272] @ (8005a90 <HAL_DMA_Init+0x6a0>)
  13183. 8005980: 4293 cmp r3, r2
  13184. 8005982: d018 beq.n 80059b6 <HAL_DMA_Init+0x5c6>
  13185. 8005984: 687b ldr r3, [r7, #4]
  13186. 8005986: 681b ldr r3, [r3, #0]
  13187. 8005988: 4a42 ldr r2, [pc, #264] @ (8005a94 <HAL_DMA_Init+0x6a4>)
  13188. 800598a: 4293 cmp r3, r2
  13189. 800598c: d013 beq.n 80059b6 <HAL_DMA_Init+0x5c6>
  13190. 800598e: 687b ldr r3, [r7, #4]
  13191. 8005990: 681b ldr r3, [r3, #0]
  13192. 8005992: 4a41 ldr r2, [pc, #260] @ (8005a98 <HAL_DMA_Init+0x6a8>)
  13193. 8005994: 4293 cmp r3, r2
  13194. 8005996: d00e beq.n 80059b6 <HAL_DMA_Init+0x5c6>
  13195. 8005998: 687b ldr r3, [r7, #4]
  13196. 800599a: 681b ldr r3, [r3, #0]
  13197. 800599c: 4a3f ldr r2, [pc, #252] @ (8005a9c <HAL_DMA_Init+0x6ac>)
  13198. 800599e: 4293 cmp r3, r2
  13199. 80059a0: d009 beq.n 80059b6 <HAL_DMA_Init+0x5c6>
  13200. 80059a2: 687b ldr r3, [r7, #4]
  13201. 80059a4: 681b ldr r3, [r3, #0]
  13202. 80059a6: 4a3e ldr r2, [pc, #248] @ (8005aa0 <HAL_DMA_Init+0x6b0>)
  13203. 80059a8: 4293 cmp r3, r2
  13204. 80059aa: d004 beq.n 80059b6 <HAL_DMA_Init+0x5c6>
  13205. 80059ac: 687b ldr r3, [r7, #4]
  13206. 80059ae: 681b ldr r3, [r3, #0]
  13207. 80059b0: 4a3c ldr r2, [pc, #240] @ (8005aa4 <HAL_DMA_Init+0x6b4>)
  13208. 80059b2: 4293 cmp r3, r2
  13209. 80059b4: d101 bne.n 80059ba <HAL_DMA_Init+0x5ca>
  13210. 80059b6: 2301 movs r3, #1
  13211. 80059b8: e000 b.n 80059bc <HAL_DMA_Init+0x5cc>
  13212. 80059ba: 2300 movs r3, #0
  13213. 80059bc: 2b00 cmp r3, #0
  13214. 80059be: d032 beq.n 8005a26 <HAL_DMA_Init+0x636>
  13215. {
  13216. /* Initialize parameters for DMAMUX channel :
  13217. DMAmuxChannel, DMAmuxChannelStatus and DMAmuxChannelStatusMask
  13218. */
  13219. DMA_CalcDMAMUXChannelBaseAndMask(hdma);
  13220. 80059c0: 6878 ldr r0, [r7, #4]
  13221. 80059c2: f002 fa43 bl 8007e4c <DMA_CalcDMAMUXChannelBaseAndMask>
  13222. if(hdma->Init.Direction == DMA_MEMORY_TO_MEMORY)
  13223. 80059c6: 687b ldr r3, [r7, #4]
  13224. 80059c8: 689b ldr r3, [r3, #8]
  13225. 80059ca: 2b80 cmp r3, #128 @ 0x80
  13226. 80059cc: d102 bne.n 80059d4 <HAL_DMA_Init+0x5e4>
  13227. {
  13228. /* if memory to memory force the request to 0*/
  13229. hdma->Init.Request = DMA_REQUEST_MEM2MEM;
  13230. 80059ce: 687b ldr r3, [r7, #4]
  13231. 80059d0: 2200 movs r2, #0
  13232. 80059d2: 605a str r2, [r3, #4]
  13233. }
  13234. /* Set peripheral request to DMAMUX channel */
  13235. hdma->DMAmuxChannel->CCR = (hdma->Init.Request & DMAMUX_CxCR_DMAREQ_ID);
  13236. 80059d4: 687b ldr r3, [r7, #4]
  13237. 80059d6: 685a ldr r2, [r3, #4]
  13238. 80059d8: 687b ldr r3, [r7, #4]
  13239. 80059da: 6e1b ldr r3, [r3, #96] @ 0x60
  13240. 80059dc: b2d2 uxtb r2, r2
  13241. 80059de: 601a str r2, [r3, #0]
  13242. /* Clear the DMAMUX synchro overrun flag */
  13243. hdma->DMAmuxChannelStatus->CFR = hdma->DMAmuxChannelStatusMask;
  13244. 80059e0: 687b ldr r3, [r7, #4]
  13245. 80059e2: 6e5b ldr r3, [r3, #100] @ 0x64
  13246. 80059e4: 687a ldr r2, [r7, #4]
  13247. 80059e6: 6e92 ldr r2, [r2, #104] @ 0x68
  13248. 80059e8: 605a str r2, [r3, #4]
  13249. /* Initialize parameters for DMAMUX request generator :
  13250. if the DMA request is DMA_REQUEST_GENERATOR0 to DMA_REQUEST_GENERATOR7
  13251. */
  13252. if((hdma->Init.Request >= DMA_REQUEST_GENERATOR0) && (hdma->Init.Request <= DMA_REQUEST_GENERATOR7))
  13253. 80059ea: 687b ldr r3, [r7, #4]
  13254. 80059ec: 685b ldr r3, [r3, #4]
  13255. 80059ee: 2b00 cmp r3, #0
  13256. 80059f0: d010 beq.n 8005a14 <HAL_DMA_Init+0x624>
  13257. 80059f2: 687b ldr r3, [r7, #4]
  13258. 80059f4: 685b ldr r3, [r3, #4]
  13259. 80059f6: 2b08 cmp r3, #8
  13260. 80059f8: d80c bhi.n 8005a14 <HAL_DMA_Init+0x624>
  13261. {
  13262. /* Initialize parameters for DMAMUX request generator :
  13263. DMAmuxRequestGen, DMAmuxRequestGenStatus and DMAmuxRequestGenStatusMask */
  13264. DMA_CalcDMAMUXRequestGenBaseAndMask(hdma);
  13265. 80059fa: 6878 ldr r0, [r7, #4]
  13266. 80059fc: f002 fac0 bl 8007f80 <DMA_CalcDMAMUXRequestGenBaseAndMask>
  13267. /* Reset the DMAMUX request generator register */
  13268. hdma->DMAmuxRequestGen->RGCR = 0U;
  13269. 8005a00: 687b ldr r3, [r7, #4]
  13270. 8005a02: 6edb ldr r3, [r3, #108] @ 0x6c
  13271. 8005a04: 2200 movs r2, #0
  13272. 8005a06: 601a str r2, [r3, #0]
  13273. /* Clear the DMAMUX request generator overrun flag */
  13274. hdma->DMAmuxRequestGenStatus->RGCFR = hdma->DMAmuxRequestGenStatusMask;
  13275. 8005a08: 687b ldr r3, [r7, #4]
  13276. 8005a0a: 6f1b ldr r3, [r3, #112] @ 0x70
  13277. 8005a0c: 687a ldr r2, [r7, #4]
  13278. 8005a0e: 6f52 ldr r2, [r2, #116] @ 0x74
  13279. 8005a10: 605a str r2, [r3, #4]
  13280. 8005a12: e008 b.n 8005a26 <HAL_DMA_Init+0x636>
  13281. }
  13282. else
  13283. {
  13284. hdma->DMAmuxRequestGen = 0U;
  13285. 8005a14: 687b ldr r3, [r7, #4]
  13286. 8005a16: 2200 movs r2, #0
  13287. 8005a18: 66da str r2, [r3, #108] @ 0x6c
  13288. hdma->DMAmuxRequestGenStatus = 0U;
  13289. 8005a1a: 687b ldr r3, [r7, #4]
  13290. 8005a1c: 2200 movs r2, #0
  13291. 8005a1e: 671a str r2, [r3, #112] @ 0x70
  13292. hdma->DMAmuxRequestGenStatusMask = 0U;
  13293. 8005a20: 687b ldr r3, [r7, #4]
  13294. 8005a22: 2200 movs r2, #0
  13295. 8005a24: 675a str r2, [r3, #116] @ 0x74
  13296. }
  13297. }
  13298. /* Initialize the error code */
  13299. hdma->ErrorCode = HAL_DMA_ERROR_NONE;
  13300. 8005a26: 687b ldr r3, [r7, #4]
  13301. 8005a28: 2200 movs r2, #0
  13302. 8005a2a: 655a str r2, [r3, #84] @ 0x54
  13303. /* Initialize the DMA state */
  13304. hdma->State = HAL_DMA_STATE_READY;
  13305. 8005a2c: 687b ldr r3, [r7, #4]
  13306. 8005a2e: 2201 movs r2, #1
  13307. 8005a30: f883 2035 strb.w r2, [r3, #53] @ 0x35
  13308. return HAL_OK;
  13309. 8005a34: 2300 movs r3, #0
  13310. }
  13311. 8005a36: 4618 mov r0, r3
  13312. 8005a38: 3718 adds r7, #24
  13313. 8005a3a: 46bd mov sp, r7
  13314. 8005a3c: bd80 pop {r7, pc}
  13315. 8005a3e: bf00 nop
  13316. 8005a40: a7fdabf8 .word 0xa7fdabf8
  13317. 8005a44: cccccccd .word 0xcccccccd
  13318. 8005a48: 40020010 .word 0x40020010
  13319. 8005a4c: 40020028 .word 0x40020028
  13320. 8005a50: 40020040 .word 0x40020040
  13321. 8005a54: 40020058 .word 0x40020058
  13322. 8005a58: 40020070 .word 0x40020070
  13323. 8005a5c: 40020088 .word 0x40020088
  13324. 8005a60: 400200a0 .word 0x400200a0
  13325. 8005a64: 400200b8 .word 0x400200b8
  13326. 8005a68: 40020410 .word 0x40020410
  13327. 8005a6c: 40020428 .word 0x40020428
  13328. 8005a70: 40020440 .word 0x40020440
  13329. 8005a74: 40020458 .word 0x40020458
  13330. 8005a78: 40020470 .word 0x40020470
  13331. 8005a7c: 40020488 .word 0x40020488
  13332. 8005a80: 400204a0 .word 0x400204a0
  13333. 8005a84: 400204b8 .word 0x400204b8
  13334. 8005a88: 58025408 .word 0x58025408
  13335. 8005a8c: 5802541c .word 0x5802541c
  13336. 8005a90: 58025430 .word 0x58025430
  13337. 8005a94: 58025444 .word 0x58025444
  13338. 8005a98: 58025458 .word 0x58025458
  13339. 8005a9c: 5802546c .word 0x5802546c
  13340. 8005aa0: 58025480 .word 0x58025480
  13341. 8005aa4: 58025494 .word 0x58025494
  13342. 08005aa8 <HAL_DMA_Start_IT>:
  13343. * @param DstAddress: The destination memory Buffer address
  13344. * @param DataLength: The length of data to be transferred from source to destination
  13345. * @retval HAL status
  13346. */
  13347. HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
  13348. {
  13349. 8005aa8: b580 push {r7, lr}
  13350. 8005aaa: b086 sub sp, #24
  13351. 8005aac: af00 add r7, sp, #0
  13352. 8005aae: 60f8 str r0, [r7, #12]
  13353. 8005ab0: 60b9 str r1, [r7, #8]
  13354. 8005ab2: 607a str r2, [r7, #4]
  13355. 8005ab4: 603b str r3, [r7, #0]
  13356. HAL_StatusTypeDef status = HAL_OK;
  13357. 8005ab6: 2300 movs r3, #0
  13358. 8005ab8: 75fb strb r3, [r7, #23]
  13359. /* Check the parameters */
  13360. assert_param(IS_DMA_BUFFER_SIZE(DataLength));
  13361. /* Check the DMA peripheral handle */
  13362. if(hdma == NULL)
  13363. 8005aba: 68fb ldr r3, [r7, #12]
  13364. 8005abc: 2b00 cmp r3, #0
  13365. 8005abe: d101 bne.n 8005ac4 <HAL_DMA_Start_IT+0x1c>
  13366. {
  13367. return HAL_ERROR;
  13368. 8005ac0: 2301 movs r3, #1
  13369. 8005ac2: e226 b.n 8005f12 <HAL_DMA_Start_IT+0x46a>
  13370. }
  13371. /* Process locked */
  13372. __HAL_LOCK(hdma);
  13373. 8005ac4: 68fb ldr r3, [r7, #12]
  13374. 8005ac6: f893 3034 ldrb.w r3, [r3, #52] @ 0x34
  13375. 8005aca: 2b01 cmp r3, #1
  13376. 8005acc: d101 bne.n 8005ad2 <HAL_DMA_Start_IT+0x2a>
  13377. 8005ace: 2302 movs r3, #2
  13378. 8005ad0: e21f b.n 8005f12 <HAL_DMA_Start_IT+0x46a>
  13379. 8005ad2: 68fb ldr r3, [r7, #12]
  13380. 8005ad4: 2201 movs r2, #1
  13381. 8005ad6: f883 2034 strb.w r2, [r3, #52] @ 0x34
  13382. if(HAL_DMA_STATE_READY == hdma->State)
  13383. 8005ada: 68fb ldr r3, [r7, #12]
  13384. 8005adc: f893 3035 ldrb.w r3, [r3, #53] @ 0x35
  13385. 8005ae0: b2db uxtb r3, r3
  13386. 8005ae2: 2b01 cmp r3, #1
  13387. 8005ae4: f040 820a bne.w 8005efc <HAL_DMA_Start_IT+0x454>
  13388. {
  13389. /* Change DMA peripheral state */
  13390. hdma->State = HAL_DMA_STATE_BUSY;
  13391. 8005ae8: 68fb ldr r3, [r7, #12]
  13392. 8005aea: 2202 movs r2, #2
  13393. 8005aec: f883 2035 strb.w r2, [r3, #53] @ 0x35
  13394. /* Initialize the error code */
  13395. hdma->ErrorCode = HAL_DMA_ERROR_NONE;
  13396. 8005af0: 68fb ldr r3, [r7, #12]
  13397. 8005af2: 2200 movs r2, #0
  13398. 8005af4: 655a str r2, [r3, #84] @ 0x54
  13399. /* Disable the peripheral */
  13400. __HAL_DMA_DISABLE(hdma);
  13401. 8005af6: 68fb ldr r3, [r7, #12]
  13402. 8005af8: 681b ldr r3, [r3, #0]
  13403. 8005afa: 4a68 ldr r2, [pc, #416] @ (8005c9c <HAL_DMA_Start_IT+0x1f4>)
  13404. 8005afc: 4293 cmp r3, r2
  13405. 8005afe: d04a beq.n 8005b96 <HAL_DMA_Start_IT+0xee>
  13406. 8005b00: 68fb ldr r3, [r7, #12]
  13407. 8005b02: 681b ldr r3, [r3, #0]
  13408. 8005b04: 4a66 ldr r2, [pc, #408] @ (8005ca0 <HAL_DMA_Start_IT+0x1f8>)
  13409. 8005b06: 4293 cmp r3, r2
  13410. 8005b08: d045 beq.n 8005b96 <HAL_DMA_Start_IT+0xee>
  13411. 8005b0a: 68fb ldr r3, [r7, #12]
  13412. 8005b0c: 681b ldr r3, [r3, #0]
  13413. 8005b0e: 4a65 ldr r2, [pc, #404] @ (8005ca4 <HAL_DMA_Start_IT+0x1fc>)
  13414. 8005b10: 4293 cmp r3, r2
  13415. 8005b12: d040 beq.n 8005b96 <HAL_DMA_Start_IT+0xee>
  13416. 8005b14: 68fb ldr r3, [r7, #12]
  13417. 8005b16: 681b ldr r3, [r3, #0]
  13418. 8005b18: 4a63 ldr r2, [pc, #396] @ (8005ca8 <HAL_DMA_Start_IT+0x200>)
  13419. 8005b1a: 4293 cmp r3, r2
  13420. 8005b1c: d03b beq.n 8005b96 <HAL_DMA_Start_IT+0xee>
  13421. 8005b1e: 68fb ldr r3, [r7, #12]
  13422. 8005b20: 681b ldr r3, [r3, #0]
  13423. 8005b22: 4a62 ldr r2, [pc, #392] @ (8005cac <HAL_DMA_Start_IT+0x204>)
  13424. 8005b24: 4293 cmp r3, r2
  13425. 8005b26: d036 beq.n 8005b96 <HAL_DMA_Start_IT+0xee>
  13426. 8005b28: 68fb ldr r3, [r7, #12]
  13427. 8005b2a: 681b ldr r3, [r3, #0]
  13428. 8005b2c: 4a60 ldr r2, [pc, #384] @ (8005cb0 <HAL_DMA_Start_IT+0x208>)
  13429. 8005b2e: 4293 cmp r3, r2
  13430. 8005b30: d031 beq.n 8005b96 <HAL_DMA_Start_IT+0xee>
  13431. 8005b32: 68fb ldr r3, [r7, #12]
  13432. 8005b34: 681b ldr r3, [r3, #0]
  13433. 8005b36: 4a5f ldr r2, [pc, #380] @ (8005cb4 <HAL_DMA_Start_IT+0x20c>)
  13434. 8005b38: 4293 cmp r3, r2
  13435. 8005b3a: d02c beq.n 8005b96 <HAL_DMA_Start_IT+0xee>
  13436. 8005b3c: 68fb ldr r3, [r7, #12]
  13437. 8005b3e: 681b ldr r3, [r3, #0]
  13438. 8005b40: 4a5d ldr r2, [pc, #372] @ (8005cb8 <HAL_DMA_Start_IT+0x210>)
  13439. 8005b42: 4293 cmp r3, r2
  13440. 8005b44: d027 beq.n 8005b96 <HAL_DMA_Start_IT+0xee>
  13441. 8005b46: 68fb ldr r3, [r7, #12]
  13442. 8005b48: 681b ldr r3, [r3, #0]
  13443. 8005b4a: 4a5c ldr r2, [pc, #368] @ (8005cbc <HAL_DMA_Start_IT+0x214>)
  13444. 8005b4c: 4293 cmp r3, r2
  13445. 8005b4e: d022 beq.n 8005b96 <HAL_DMA_Start_IT+0xee>
  13446. 8005b50: 68fb ldr r3, [r7, #12]
  13447. 8005b52: 681b ldr r3, [r3, #0]
  13448. 8005b54: 4a5a ldr r2, [pc, #360] @ (8005cc0 <HAL_DMA_Start_IT+0x218>)
  13449. 8005b56: 4293 cmp r3, r2
  13450. 8005b58: d01d beq.n 8005b96 <HAL_DMA_Start_IT+0xee>
  13451. 8005b5a: 68fb ldr r3, [r7, #12]
  13452. 8005b5c: 681b ldr r3, [r3, #0]
  13453. 8005b5e: 4a59 ldr r2, [pc, #356] @ (8005cc4 <HAL_DMA_Start_IT+0x21c>)
  13454. 8005b60: 4293 cmp r3, r2
  13455. 8005b62: d018 beq.n 8005b96 <HAL_DMA_Start_IT+0xee>
  13456. 8005b64: 68fb ldr r3, [r7, #12]
  13457. 8005b66: 681b ldr r3, [r3, #0]
  13458. 8005b68: 4a57 ldr r2, [pc, #348] @ (8005cc8 <HAL_DMA_Start_IT+0x220>)
  13459. 8005b6a: 4293 cmp r3, r2
  13460. 8005b6c: d013 beq.n 8005b96 <HAL_DMA_Start_IT+0xee>
  13461. 8005b6e: 68fb ldr r3, [r7, #12]
  13462. 8005b70: 681b ldr r3, [r3, #0]
  13463. 8005b72: 4a56 ldr r2, [pc, #344] @ (8005ccc <HAL_DMA_Start_IT+0x224>)
  13464. 8005b74: 4293 cmp r3, r2
  13465. 8005b76: d00e beq.n 8005b96 <HAL_DMA_Start_IT+0xee>
  13466. 8005b78: 68fb ldr r3, [r7, #12]
  13467. 8005b7a: 681b ldr r3, [r3, #0]
  13468. 8005b7c: 4a54 ldr r2, [pc, #336] @ (8005cd0 <HAL_DMA_Start_IT+0x228>)
  13469. 8005b7e: 4293 cmp r3, r2
  13470. 8005b80: d009 beq.n 8005b96 <HAL_DMA_Start_IT+0xee>
  13471. 8005b82: 68fb ldr r3, [r7, #12]
  13472. 8005b84: 681b ldr r3, [r3, #0]
  13473. 8005b86: 4a53 ldr r2, [pc, #332] @ (8005cd4 <HAL_DMA_Start_IT+0x22c>)
  13474. 8005b88: 4293 cmp r3, r2
  13475. 8005b8a: d004 beq.n 8005b96 <HAL_DMA_Start_IT+0xee>
  13476. 8005b8c: 68fb ldr r3, [r7, #12]
  13477. 8005b8e: 681b ldr r3, [r3, #0]
  13478. 8005b90: 4a51 ldr r2, [pc, #324] @ (8005cd8 <HAL_DMA_Start_IT+0x230>)
  13479. 8005b92: 4293 cmp r3, r2
  13480. 8005b94: d108 bne.n 8005ba8 <HAL_DMA_Start_IT+0x100>
  13481. 8005b96: 68fb ldr r3, [r7, #12]
  13482. 8005b98: 681b ldr r3, [r3, #0]
  13483. 8005b9a: 681a ldr r2, [r3, #0]
  13484. 8005b9c: 68fb ldr r3, [r7, #12]
  13485. 8005b9e: 681b ldr r3, [r3, #0]
  13486. 8005ba0: f022 0201 bic.w r2, r2, #1
  13487. 8005ba4: 601a str r2, [r3, #0]
  13488. 8005ba6: e007 b.n 8005bb8 <HAL_DMA_Start_IT+0x110>
  13489. 8005ba8: 68fb ldr r3, [r7, #12]
  13490. 8005baa: 681b ldr r3, [r3, #0]
  13491. 8005bac: 681a ldr r2, [r3, #0]
  13492. 8005bae: 68fb ldr r3, [r7, #12]
  13493. 8005bb0: 681b ldr r3, [r3, #0]
  13494. 8005bb2: f022 0201 bic.w r2, r2, #1
  13495. 8005bb6: 601a str r2, [r3, #0]
  13496. /* Configure the source, destination address and the data length */
  13497. DMA_SetConfig(hdma, SrcAddress, DstAddress, DataLength);
  13498. 8005bb8: 683b ldr r3, [r7, #0]
  13499. 8005bba: 687a ldr r2, [r7, #4]
  13500. 8005bbc: 68b9 ldr r1, [r7, #8]
  13501. 8005bbe: 68f8 ldr r0, [r7, #12]
  13502. 8005bc0: f001 fe6a bl 8007898 <DMA_SetConfig>
  13503. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  13504. 8005bc4: 68fb ldr r3, [r7, #12]
  13505. 8005bc6: 681b ldr r3, [r3, #0]
  13506. 8005bc8: 4a34 ldr r2, [pc, #208] @ (8005c9c <HAL_DMA_Start_IT+0x1f4>)
  13507. 8005bca: 4293 cmp r3, r2
  13508. 8005bcc: d04a beq.n 8005c64 <HAL_DMA_Start_IT+0x1bc>
  13509. 8005bce: 68fb ldr r3, [r7, #12]
  13510. 8005bd0: 681b ldr r3, [r3, #0]
  13511. 8005bd2: 4a33 ldr r2, [pc, #204] @ (8005ca0 <HAL_DMA_Start_IT+0x1f8>)
  13512. 8005bd4: 4293 cmp r3, r2
  13513. 8005bd6: d045 beq.n 8005c64 <HAL_DMA_Start_IT+0x1bc>
  13514. 8005bd8: 68fb ldr r3, [r7, #12]
  13515. 8005bda: 681b ldr r3, [r3, #0]
  13516. 8005bdc: 4a31 ldr r2, [pc, #196] @ (8005ca4 <HAL_DMA_Start_IT+0x1fc>)
  13517. 8005bde: 4293 cmp r3, r2
  13518. 8005be0: d040 beq.n 8005c64 <HAL_DMA_Start_IT+0x1bc>
  13519. 8005be2: 68fb ldr r3, [r7, #12]
  13520. 8005be4: 681b ldr r3, [r3, #0]
  13521. 8005be6: 4a30 ldr r2, [pc, #192] @ (8005ca8 <HAL_DMA_Start_IT+0x200>)
  13522. 8005be8: 4293 cmp r3, r2
  13523. 8005bea: d03b beq.n 8005c64 <HAL_DMA_Start_IT+0x1bc>
  13524. 8005bec: 68fb ldr r3, [r7, #12]
  13525. 8005bee: 681b ldr r3, [r3, #0]
  13526. 8005bf0: 4a2e ldr r2, [pc, #184] @ (8005cac <HAL_DMA_Start_IT+0x204>)
  13527. 8005bf2: 4293 cmp r3, r2
  13528. 8005bf4: d036 beq.n 8005c64 <HAL_DMA_Start_IT+0x1bc>
  13529. 8005bf6: 68fb ldr r3, [r7, #12]
  13530. 8005bf8: 681b ldr r3, [r3, #0]
  13531. 8005bfa: 4a2d ldr r2, [pc, #180] @ (8005cb0 <HAL_DMA_Start_IT+0x208>)
  13532. 8005bfc: 4293 cmp r3, r2
  13533. 8005bfe: d031 beq.n 8005c64 <HAL_DMA_Start_IT+0x1bc>
  13534. 8005c00: 68fb ldr r3, [r7, #12]
  13535. 8005c02: 681b ldr r3, [r3, #0]
  13536. 8005c04: 4a2b ldr r2, [pc, #172] @ (8005cb4 <HAL_DMA_Start_IT+0x20c>)
  13537. 8005c06: 4293 cmp r3, r2
  13538. 8005c08: d02c beq.n 8005c64 <HAL_DMA_Start_IT+0x1bc>
  13539. 8005c0a: 68fb ldr r3, [r7, #12]
  13540. 8005c0c: 681b ldr r3, [r3, #0]
  13541. 8005c0e: 4a2a ldr r2, [pc, #168] @ (8005cb8 <HAL_DMA_Start_IT+0x210>)
  13542. 8005c10: 4293 cmp r3, r2
  13543. 8005c12: d027 beq.n 8005c64 <HAL_DMA_Start_IT+0x1bc>
  13544. 8005c14: 68fb ldr r3, [r7, #12]
  13545. 8005c16: 681b ldr r3, [r3, #0]
  13546. 8005c18: 4a28 ldr r2, [pc, #160] @ (8005cbc <HAL_DMA_Start_IT+0x214>)
  13547. 8005c1a: 4293 cmp r3, r2
  13548. 8005c1c: d022 beq.n 8005c64 <HAL_DMA_Start_IT+0x1bc>
  13549. 8005c1e: 68fb ldr r3, [r7, #12]
  13550. 8005c20: 681b ldr r3, [r3, #0]
  13551. 8005c22: 4a27 ldr r2, [pc, #156] @ (8005cc0 <HAL_DMA_Start_IT+0x218>)
  13552. 8005c24: 4293 cmp r3, r2
  13553. 8005c26: d01d beq.n 8005c64 <HAL_DMA_Start_IT+0x1bc>
  13554. 8005c28: 68fb ldr r3, [r7, #12]
  13555. 8005c2a: 681b ldr r3, [r3, #0]
  13556. 8005c2c: 4a25 ldr r2, [pc, #148] @ (8005cc4 <HAL_DMA_Start_IT+0x21c>)
  13557. 8005c2e: 4293 cmp r3, r2
  13558. 8005c30: d018 beq.n 8005c64 <HAL_DMA_Start_IT+0x1bc>
  13559. 8005c32: 68fb ldr r3, [r7, #12]
  13560. 8005c34: 681b ldr r3, [r3, #0]
  13561. 8005c36: 4a24 ldr r2, [pc, #144] @ (8005cc8 <HAL_DMA_Start_IT+0x220>)
  13562. 8005c38: 4293 cmp r3, r2
  13563. 8005c3a: d013 beq.n 8005c64 <HAL_DMA_Start_IT+0x1bc>
  13564. 8005c3c: 68fb ldr r3, [r7, #12]
  13565. 8005c3e: 681b ldr r3, [r3, #0]
  13566. 8005c40: 4a22 ldr r2, [pc, #136] @ (8005ccc <HAL_DMA_Start_IT+0x224>)
  13567. 8005c42: 4293 cmp r3, r2
  13568. 8005c44: d00e beq.n 8005c64 <HAL_DMA_Start_IT+0x1bc>
  13569. 8005c46: 68fb ldr r3, [r7, #12]
  13570. 8005c48: 681b ldr r3, [r3, #0]
  13571. 8005c4a: 4a21 ldr r2, [pc, #132] @ (8005cd0 <HAL_DMA_Start_IT+0x228>)
  13572. 8005c4c: 4293 cmp r3, r2
  13573. 8005c4e: d009 beq.n 8005c64 <HAL_DMA_Start_IT+0x1bc>
  13574. 8005c50: 68fb ldr r3, [r7, #12]
  13575. 8005c52: 681b ldr r3, [r3, #0]
  13576. 8005c54: 4a1f ldr r2, [pc, #124] @ (8005cd4 <HAL_DMA_Start_IT+0x22c>)
  13577. 8005c56: 4293 cmp r3, r2
  13578. 8005c58: d004 beq.n 8005c64 <HAL_DMA_Start_IT+0x1bc>
  13579. 8005c5a: 68fb ldr r3, [r7, #12]
  13580. 8005c5c: 681b ldr r3, [r3, #0]
  13581. 8005c5e: 4a1e ldr r2, [pc, #120] @ (8005cd8 <HAL_DMA_Start_IT+0x230>)
  13582. 8005c60: 4293 cmp r3, r2
  13583. 8005c62: d101 bne.n 8005c68 <HAL_DMA_Start_IT+0x1c0>
  13584. 8005c64: 2301 movs r3, #1
  13585. 8005c66: e000 b.n 8005c6a <HAL_DMA_Start_IT+0x1c2>
  13586. 8005c68: 2300 movs r3, #0
  13587. 8005c6a: 2b00 cmp r3, #0
  13588. 8005c6c: d036 beq.n 8005cdc <HAL_DMA_Start_IT+0x234>
  13589. {
  13590. /* Enable Common interrupts*/
  13591. 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));
  13592. 8005c6e: 68fb ldr r3, [r7, #12]
  13593. 8005c70: 681b ldr r3, [r3, #0]
  13594. 8005c72: 681b ldr r3, [r3, #0]
  13595. 8005c74: f023 021e bic.w r2, r3, #30
  13596. 8005c78: 68fb ldr r3, [r7, #12]
  13597. 8005c7a: 681b ldr r3, [r3, #0]
  13598. 8005c7c: f042 0216 orr.w r2, r2, #22
  13599. 8005c80: 601a str r2, [r3, #0]
  13600. if(hdma->XferHalfCpltCallback != NULL)
  13601. 8005c82: 68fb ldr r3, [r7, #12]
  13602. 8005c84: 6c1b ldr r3, [r3, #64] @ 0x40
  13603. 8005c86: 2b00 cmp r3, #0
  13604. 8005c88: d03e beq.n 8005d08 <HAL_DMA_Start_IT+0x260>
  13605. {
  13606. /* Enable Half Transfer IT if corresponding Callback is set */
  13607. ((DMA_Stream_TypeDef *)hdma->Instance)->CR |= DMA_IT_HT;
  13608. 8005c8a: 68fb ldr r3, [r7, #12]
  13609. 8005c8c: 681b ldr r3, [r3, #0]
  13610. 8005c8e: 681a ldr r2, [r3, #0]
  13611. 8005c90: 68fb ldr r3, [r7, #12]
  13612. 8005c92: 681b ldr r3, [r3, #0]
  13613. 8005c94: f042 0208 orr.w r2, r2, #8
  13614. 8005c98: 601a str r2, [r3, #0]
  13615. 8005c9a: e035 b.n 8005d08 <HAL_DMA_Start_IT+0x260>
  13616. 8005c9c: 40020010 .word 0x40020010
  13617. 8005ca0: 40020028 .word 0x40020028
  13618. 8005ca4: 40020040 .word 0x40020040
  13619. 8005ca8: 40020058 .word 0x40020058
  13620. 8005cac: 40020070 .word 0x40020070
  13621. 8005cb0: 40020088 .word 0x40020088
  13622. 8005cb4: 400200a0 .word 0x400200a0
  13623. 8005cb8: 400200b8 .word 0x400200b8
  13624. 8005cbc: 40020410 .word 0x40020410
  13625. 8005cc0: 40020428 .word 0x40020428
  13626. 8005cc4: 40020440 .word 0x40020440
  13627. 8005cc8: 40020458 .word 0x40020458
  13628. 8005ccc: 40020470 .word 0x40020470
  13629. 8005cd0: 40020488 .word 0x40020488
  13630. 8005cd4: 400204a0 .word 0x400204a0
  13631. 8005cd8: 400204b8 .word 0x400204b8
  13632. }
  13633. }
  13634. else /* BDMA channel */
  13635. {
  13636. /* Enable Common interrupts */
  13637. MODIFY_REG(((BDMA_Channel_TypeDef *)hdma->Instance)->CCR, (BDMA_CCR_TCIE | BDMA_CCR_HTIE | BDMA_CCR_TEIE), (BDMA_CCR_TCIE | BDMA_CCR_TEIE));
  13638. 8005cdc: 68fb ldr r3, [r7, #12]
  13639. 8005cde: 681b ldr r3, [r3, #0]
  13640. 8005ce0: 681b ldr r3, [r3, #0]
  13641. 8005ce2: f023 020e bic.w r2, r3, #14
  13642. 8005ce6: 68fb ldr r3, [r7, #12]
  13643. 8005ce8: 681b ldr r3, [r3, #0]
  13644. 8005cea: f042 020a orr.w r2, r2, #10
  13645. 8005cee: 601a str r2, [r3, #0]
  13646. if(hdma->XferHalfCpltCallback != NULL)
  13647. 8005cf0: 68fb ldr r3, [r7, #12]
  13648. 8005cf2: 6c1b ldr r3, [r3, #64] @ 0x40
  13649. 8005cf4: 2b00 cmp r3, #0
  13650. 8005cf6: d007 beq.n 8005d08 <HAL_DMA_Start_IT+0x260>
  13651. {
  13652. /*Enable Half Transfer IT if corresponding Callback is set */
  13653. ((BDMA_Channel_TypeDef *)hdma->Instance)->CCR |= BDMA_CCR_HTIE;
  13654. 8005cf8: 68fb ldr r3, [r7, #12]
  13655. 8005cfa: 681b ldr r3, [r3, #0]
  13656. 8005cfc: 681a ldr r2, [r3, #0]
  13657. 8005cfe: 68fb ldr r3, [r7, #12]
  13658. 8005d00: 681b ldr r3, [r3, #0]
  13659. 8005d02: f042 0204 orr.w r2, r2, #4
  13660. 8005d06: 601a str r2, [r3, #0]
  13661. }
  13662. }
  13663. if(IS_DMA_DMAMUX_ALL_INSTANCE(hdma->Instance) != 0U) /* No DMAMUX available for BDMA1 */
  13664. 8005d08: 68fb ldr r3, [r7, #12]
  13665. 8005d0a: 681b ldr r3, [r3, #0]
  13666. 8005d0c: 4a83 ldr r2, [pc, #524] @ (8005f1c <HAL_DMA_Start_IT+0x474>)
  13667. 8005d0e: 4293 cmp r3, r2
  13668. 8005d10: d072 beq.n 8005df8 <HAL_DMA_Start_IT+0x350>
  13669. 8005d12: 68fb ldr r3, [r7, #12]
  13670. 8005d14: 681b ldr r3, [r3, #0]
  13671. 8005d16: 4a82 ldr r2, [pc, #520] @ (8005f20 <HAL_DMA_Start_IT+0x478>)
  13672. 8005d18: 4293 cmp r3, r2
  13673. 8005d1a: d06d beq.n 8005df8 <HAL_DMA_Start_IT+0x350>
  13674. 8005d1c: 68fb ldr r3, [r7, #12]
  13675. 8005d1e: 681b ldr r3, [r3, #0]
  13676. 8005d20: 4a80 ldr r2, [pc, #512] @ (8005f24 <HAL_DMA_Start_IT+0x47c>)
  13677. 8005d22: 4293 cmp r3, r2
  13678. 8005d24: d068 beq.n 8005df8 <HAL_DMA_Start_IT+0x350>
  13679. 8005d26: 68fb ldr r3, [r7, #12]
  13680. 8005d28: 681b ldr r3, [r3, #0]
  13681. 8005d2a: 4a7f ldr r2, [pc, #508] @ (8005f28 <HAL_DMA_Start_IT+0x480>)
  13682. 8005d2c: 4293 cmp r3, r2
  13683. 8005d2e: d063 beq.n 8005df8 <HAL_DMA_Start_IT+0x350>
  13684. 8005d30: 68fb ldr r3, [r7, #12]
  13685. 8005d32: 681b ldr r3, [r3, #0]
  13686. 8005d34: 4a7d ldr r2, [pc, #500] @ (8005f2c <HAL_DMA_Start_IT+0x484>)
  13687. 8005d36: 4293 cmp r3, r2
  13688. 8005d38: d05e beq.n 8005df8 <HAL_DMA_Start_IT+0x350>
  13689. 8005d3a: 68fb ldr r3, [r7, #12]
  13690. 8005d3c: 681b ldr r3, [r3, #0]
  13691. 8005d3e: 4a7c ldr r2, [pc, #496] @ (8005f30 <HAL_DMA_Start_IT+0x488>)
  13692. 8005d40: 4293 cmp r3, r2
  13693. 8005d42: d059 beq.n 8005df8 <HAL_DMA_Start_IT+0x350>
  13694. 8005d44: 68fb ldr r3, [r7, #12]
  13695. 8005d46: 681b ldr r3, [r3, #0]
  13696. 8005d48: 4a7a ldr r2, [pc, #488] @ (8005f34 <HAL_DMA_Start_IT+0x48c>)
  13697. 8005d4a: 4293 cmp r3, r2
  13698. 8005d4c: d054 beq.n 8005df8 <HAL_DMA_Start_IT+0x350>
  13699. 8005d4e: 68fb ldr r3, [r7, #12]
  13700. 8005d50: 681b ldr r3, [r3, #0]
  13701. 8005d52: 4a79 ldr r2, [pc, #484] @ (8005f38 <HAL_DMA_Start_IT+0x490>)
  13702. 8005d54: 4293 cmp r3, r2
  13703. 8005d56: d04f beq.n 8005df8 <HAL_DMA_Start_IT+0x350>
  13704. 8005d58: 68fb ldr r3, [r7, #12]
  13705. 8005d5a: 681b ldr r3, [r3, #0]
  13706. 8005d5c: 4a77 ldr r2, [pc, #476] @ (8005f3c <HAL_DMA_Start_IT+0x494>)
  13707. 8005d5e: 4293 cmp r3, r2
  13708. 8005d60: d04a beq.n 8005df8 <HAL_DMA_Start_IT+0x350>
  13709. 8005d62: 68fb ldr r3, [r7, #12]
  13710. 8005d64: 681b ldr r3, [r3, #0]
  13711. 8005d66: 4a76 ldr r2, [pc, #472] @ (8005f40 <HAL_DMA_Start_IT+0x498>)
  13712. 8005d68: 4293 cmp r3, r2
  13713. 8005d6a: d045 beq.n 8005df8 <HAL_DMA_Start_IT+0x350>
  13714. 8005d6c: 68fb ldr r3, [r7, #12]
  13715. 8005d6e: 681b ldr r3, [r3, #0]
  13716. 8005d70: 4a74 ldr r2, [pc, #464] @ (8005f44 <HAL_DMA_Start_IT+0x49c>)
  13717. 8005d72: 4293 cmp r3, r2
  13718. 8005d74: d040 beq.n 8005df8 <HAL_DMA_Start_IT+0x350>
  13719. 8005d76: 68fb ldr r3, [r7, #12]
  13720. 8005d78: 681b ldr r3, [r3, #0]
  13721. 8005d7a: 4a73 ldr r2, [pc, #460] @ (8005f48 <HAL_DMA_Start_IT+0x4a0>)
  13722. 8005d7c: 4293 cmp r3, r2
  13723. 8005d7e: d03b beq.n 8005df8 <HAL_DMA_Start_IT+0x350>
  13724. 8005d80: 68fb ldr r3, [r7, #12]
  13725. 8005d82: 681b ldr r3, [r3, #0]
  13726. 8005d84: 4a71 ldr r2, [pc, #452] @ (8005f4c <HAL_DMA_Start_IT+0x4a4>)
  13727. 8005d86: 4293 cmp r3, r2
  13728. 8005d88: d036 beq.n 8005df8 <HAL_DMA_Start_IT+0x350>
  13729. 8005d8a: 68fb ldr r3, [r7, #12]
  13730. 8005d8c: 681b ldr r3, [r3, #0]
  13731. 8005d8e: 4a70 ldr r2, [pc, #448] @ (8005f50 <HAL_DMA_Start_IT+0x4a8>)
  13732. 8005d90: 4293 cmp r3, r2
  13733. 8005d92: d031 beq.n 8005df8 <HAL_DMA_Start_IT+0x350>
  13734. 8005d94: 68fb ldr r3, [r7, #12]
  13735. 8005d96: 681b ldr r3, [r3, #0]
  13736. 8005d98: 4a6e ldr r2, [pc, #440] @ (8005f54 <HAL_DMA_Start_IT+0x4ac>)
  13737. 8005d9a: 4293 cmp r3, r2
  13738. 8005d9c: d02c beq.n 8005df8 <HAL_DMA_Start_IT+0x350>
  13739. 8005d9e: 68fb ldr r3, [r7, #12]
  13740. 8005da0: 681b ldr r3, [r3, #0]
  13741. 8005da2: 4a6d ldr r2, [pc, #436] @ (8005f58 <HAL_DMA_Start_IT+0x4b0>)
  13742. 8005da4: 4293 cmp r3, r2
  13743. 8005da6: d027 beq.n 8005df8 <HAL_DMA_Start_IT+0x350>
  13744. 8005da8: 68fb ldr r3, [r7, #12]
  13745. 8005daa: 681b ldr r3, [r3, #0]
  13746. 8005dac: 4a6b ldr r2, [pc, #428] @ (8005f5c <HAL_DMA_Start_IT+0x4b4>)
  13747. 8005dae: 4293 cmp r3, r2
  13748. 8005db0: d022 beq.n 8005df8 <HAL_DMA_Start_IT+0x350>
  13749. 8005db2: 68fb ldr r3, [r7, #12]
  13750. 8005db4: 681b ldr r3, [r3, #0]
  13751. 8005db6: 4a6a ldr r2, [pc, #424] @ (8005f60 <HAL_DMA_Start_IT+0x4b8>)
  13752. 8005db8: 4293 cmp r3, r2
  13753. 8005dba: d01d beq.n 8005df8 <HAL_DMA_Start_IT+0x350>
  13754. 8005dbc: 68fb ldr r3, [r7, #12]
  13755. 8005dbe: 681b ldr r3, [r3, #0]
  13756. 8005dc0: 4a68 ldr r2, [pc, #416] @ (8005f64 <HAL_DMA_Start_IT+0x4bc>)
  13757. 8005dc2: 4293 cmp r3, r2
  13758. 8005dc4: d018 beq.n 8005df8 <HAL_DMA_Start_IT+0x350>
  13759. 8005dc6: 68fb ldr r3, [r7, #12]
  13760. 8005dc8: 681b ldr r3, [r3, #0]
  13761. 8005dca: 4a67 ldr r2, [pc, #412] @ (8005f68 <HAL_DMA_Start_IT+0x4c0>)
  13762. 8005dcc: 4293 cmp r3, r2
  13763. 8005dce: d013 beq.n 8005df8 <HAL_DMA_Start_IT+0x350>
  13764. 8005dd0: 68fb ldr r3, [r7, #12]
  13765. 8005dd2: 681b ldr r3, [r3, #0]
  13766. 8005dd4: 4a65 ldr r2, [pc, #404] @ (8005f6c <HAL_DMA_Start_IT+0x4c4>)
  13767. 8005dd6: 4293 cmp r3, r2
  13768. 8005dd8: d00e beq.n 8005df8 <HAL_DMA_Start_IT+0x350>
  13769. 8005dda: 68fb ldr r3, [r7, #12]
  13770. 8005ddc: 681b ldr r3, [r3, #0]
  13771. 8005dde: 4a64 ldr r2, [pc, #400] @ (8005f70 <HAL_DMA_Start_IT+0x4c8>)
  13772. 8005de0: 4293 cmp r3, r2
  13773. 8005de2: d009 beq.n 8005df8 <HAL_DMA_Start_IT+0x350>
  13774. 8005de4: 68fb ldr r3, [r7, #12]
  13775. 8005de6: 681b ldr r3, [r3, #0]
  13776. 8005de8: 4a62 ldr r2, [pc, #392] @ (8005f74 <HAL_DMA_Start_IT+0x4cc>)
  13777. 8005dea: 4293 cmp r3, r2
  13778. 8005dec: d004 beq.n 8005df8 <HAL_DMA_Start_IT+0x350>
  13779. 8005dee: 68fb ldr r3, [r7, #12]
  13780. 8005df0: 681b ldr r3, [r3, #0]
  13781. 8005df2: 4a61 ldr r2, [pc, #388] @ (8005f78 <HAL_DMA_Start_IT+0x4d0>)
  13782. 8005df4: 4293 cmp r3, r2
  13783. 8005df6: d101 bne.n 8005dfc <HAL_DMA_Start_IT+0x354>
  13784. 8005df8: 2301 movs r3, #1
  13785. 8005dfa: e000 b.n 8005dfe <HAL_DMA_Start_IT+0x356>
  13786. 8005dfc: 2300 movs r3, #0
  13787. 8005dfe: 2b00 cmp r3, #0
  13788. 8005e00: d01a beq.n 8005e38 <HAL_DMA_Start_IT+0x390>
  13789. {
  13790. /* Check if DMAMUX Synchronization is enabled */
  13791. if((hdma->DMAmuxChannel->CCR & DMAMUX_CxCR_SE) != 0U)
  13792. 8005e02: 68fb ldr r3, [r7, #12]
  13793. 8005e04: 6e1b ldr r3, [r3, #96] @ 0x60
  13794. 8005e06: 681b ldr r3, [r3, #0]
  13795. 8005e08: f403 3380 and.w r3, r3, #65536 @ 0x10000
  13796. 8005e0c: 2b00 cmp r3, #0
  13797. 8005e0e: d007 beq.n 8005e20 <HAL_DMA_Start_IT+0x378>
  13798. {
  13799. /* Enable DMAMUX sync overrun IT*/
  13800. hdma->DMAmuxChannel->CCR |= DMAMUX_CxCR_SOIE;
  13801. 8005e10: 68fb ldr r3, [r7, #12]
  13802. 8005e12: 6e1b ldr r3, [r3, #96] @ 0x60
  13803. 8005e14: 681a ldr r2, [r3, #0]
  13804. 8005e16: 68fb ldr r3, [r7, #12]
  13805. 8005e18: 6e1b ldr r3, [r3, #96] @ 0x60
  13806. 8005e1a: f442 7280 orr.w r2, r2, #256 @ 0x100
  13807. 8005e1e: 601a str r2, [r3, #0]
  13808. }
  13809. if(hdma->DMAmuxRequestGen != 0U)
  13810. 8005e20: 68fb ldr r3, [r7, #12]
  13811. 8005e22: 6edb ldr r3, [r3, #108] @ 0x6c
  13812. 8005e24: 2b00 cmp r3, #0
  13813. 8005e26: d007 beq.n 8005e38 <HAL_DMA_Start_IT+0x390>
  13814. {
  13815. /* if using DMAMUX request generator, enable the DMAMUX request generator overrun IT*/
  13816. /* enable the request gen overrun IT */
  13817. hdma->DMAmuxRequestGen->RGCR |= DMAMUX_RGxCR_OIE;
  13818. 8005e28: 68fb ldr r3, [r7, #12]
  13819. 8005e2a: 6edb ldr r3, [r3, #108] @ 0x6c
  13820. 8005e2c: 681a ldr r2, [r3, #0]
  13821. 8005e2e: 68fb ldr r3, [r7, #12]
  13822. 8005e30: 6edb ldr r3, [r3, #108] @ 0x6c
  13823. 8005e32: f442 7280 orr.w r2, r2, #256 @ 0x100
  13824. 8005e36: 601a str r2, [r3, #0]
  13825. }
  13826. }
  13827. /* Enable the Peripheral */
  13828. __HAL_DMA_ENABLE(hdma);
  13829. 8005e38: 68fb ldr r3, [r7, #12]
  13830. 8005e3a: 681b ldr r3, [r3, #0]
  13831. 8005e3c: 4a37 ldr r2, [pc, #220] @ (8005f1c <HAL_DMA_Start_IT+0x474>)
  13832. 8005e3e: 4293 cmp r3, r2
  13833. 8005e40: d04a beq.n 8005ed8 <HAL_DMA_Start_IT+0x430>
  13834. 8005e42: 68fb ldr r3, [r7, #12]
  13835. 8005e44: 681b ldr r3, [r3, #0]
  13836. 8005e46: 4a36 ldr r2, [pc, #216] @ (8005f20 <HAL_DMA_Start_IT+0x478>)
  13837. 8005e48: 4293 cmp r3, r2
  13838. 8005e4a: d045 beq.n 8005ed8 <HAL_DMA_Start_IT+0x430>
  13839. 8005e4c: 68fb ldr r3, [r7, #12]
  13840. 8005e4e: 681b ldr r3, [r3, #0]
  13841. 8005e50: 4a34 ldr r2, [pc, #208] @ (8005f24 <HAL_DMA_Start_IT+0x47c>)
  13842. 8005e52: 4293 cmp r3, r2
  13843. 8005e54: d040 beq.n 8005ed8 <HAL_DMA_Start_IT+0x430>
  13844. 8005e56: 68fb ldr r3, [r7, #12]
  13845. 8005e58: 681b ldr r3, [r3, #0]
  13846. 8005e5a: 4a33 ldr r2, [pc, #204] @ (8005f28 <HAL_DMA_Start_IT+0x480>)
  13847. 8005e5c: 4293 cmp r3, r2
  13848. 8005e5e: d03b beq.n 8005ed8 <HAL_DMA_Start_IT+0x430>
  13849. 8005e60: 68fb ldr r3, [r7, #12]
  13850. 8005e62: 681b ldr r3, [r3, #0]
  13851. 8005e64: 4a31 ldr r2, [pc, #196] @ (8005f2c <HAL_DMA_Start_IT+0x484>)
  13852. 8005e66: 4293 cmp r3, r2
  13853. 8005e68: d036 beq.n 8005ed8 <HAL_DMA_Start_IT+0x430>
  13854. 8005e6a: 68fb ldr r3, [r7, #12]
  13855. 8005e6c: 681b ldr r3, [r3, #0]
  13856. 8005e6e: 4a30 ldr r2, [pc, #192] @ (8005f30 <HAL_DMA_Start_IT+0x488>)
  13857. 8005e70: 4293 cmp r3, r2
  13858. 8005e72: d031 beq.n 8005ed8 <HAL_DMA_Start_IT+0x430>
  13859. 8005e74: 68fb ldr r3, [r7, #12]
  13860. 8005e76: 681b ldr r3, [r3, #0]
  13861. 8005e78: 4a2e ldr r2, [pc, #184] @ (8005f34 <HAL_DMA_Start_IT+0x48c>)
  13862. 8005e7a: 4293 cmp r3, r2
  13863. 8005e7c: d02c beq.n 8005ed8 <HAL_DMA_Start_IT+0x430>
  13864. 8005e7e: 68fb ldr r3, [r7, #12]
  13865. 8005e80: 681b ldr r3, [r3, #0]
  13866. 8005e82: 4a2d ldr r2, [pc, #180] @ (8005f38 <HAL_DMA_Start_IT+0x490>)
  13867. 8005e84: 4293 cmp r3, r2
  13868. 8005e86: d027 beq.n 8005ed8 <HAL_DMA_Start_IT+0x430>
  13869. 8005e88: 68fb ldr r3, [r7, #12]
  13870. 8005e8a: 681b ldr r3, [r3, #0]
  13871. 8005e8c: 4a2b ldr r2, [pc, #172] @ (8005f3c <HAL_DMA_Start_IT+0x494>)
  13872. 8005e8e: 4293 cmp r3, r2
  13873. 8005e90: d022 beq.n 8005ed8 <HAL_DMA_Start_IT+0x430>
  13874. 8005e92: 68fb ldr r3, [r7, #12]
  13875. 8005e94: 681b ldr r3, [r3, #0]
  13876. 8005e96: 4a2a ldr r2, [pc, #168] @ (8005f40 <HAL_DMA_Start_IT+0x498>)
  13877. 8005e98: 4293 cmp r3, r2
  13878. 8005e9a: d01d beq.n 8005ed8 <HAL_DMA_Start_IT+0x430>
  13879. 8005e9c: 68fb ldr r3, [r7, #12]
  13880. 8005e9e: 681b ldr r3, [r3, #0]
  13881. 8005ea0: 4a28 ldr r2, [pc, #160] @ (8005f44 <HAL_DMA_Start_IT+0x49c>)
  13882. 8005ea2: 4293 cmp r3, r2
  13883. 8005ea4: d018 beq.n 8005ed8 <HAL_DMA_Start_IT+0x430>
  13884. 8005ea6: 68fb ldr r3, [r7, #12]
  13885. 8005ea8: 681b ldr r3, [r3, #0]
  13886. 8005eaa: 4a27 ldr r2, [pc, #156] @ (8005f48 <HAL_DMA_Start_IT+0x4a0>)
  13887. 8005eac: 4293 cmp r3, r2
  13888. 8005eae: d013 beq.n 8005ed8 <HAL_DMA_Start_IT+0x430>
  13889. 8005eb0: 68fb ldr r3, [r7, #12]
  13890. 8005eb2: 681b ldr r3, [r3, #0]
  13891. 8005eb4: 4a25 ldr r2, [pc, #148] @ (8005f4c <HAL_DMA_Start_IT+0x4a4>)
  13892. 8005eb6: 4293 cmp r3, r2
  13893. 8005eb8: d00e beq.n 8005ed8 <HAL_DMA_Start_IT+0x430>
  13894. 8005eba: 68fb ldr r3, [r7, #12]
  13895. 8005ebc: 681b ldr r3, [r3, #0]
  13896. 8005ebe: 4a24 ldr r2, [pc, #144] @ (8005f50 <HAL_DMA_Start_IT+0x4a8>)
  13897. 8005ec0: 4293 cmp r3, r2
  13898. 8005ec2: d009 beq.n 8005ed8 <HAL_DMA_Start_IT+0x430>
  13899. 8005ec4: 68fb ldr r3, [r7, #12]
  13900. 8005ec6: 681b ldr r3, [r3, #0]
  13901. 8005ec8: 4a22 ldr r2, [pc, #136] @ (8005f54 <HAL_DMA_Start_IT+0x4ac>)
  13902. 8005eca: 4293 cmp r3, r2
  13903. 8005ecc: d004 beq.n 8005ed8 <HAL_DMA_Start_IT+0x430>
  13904. 8005ece: 68fb ldr r3, [r7, #12]
  13905. 8005ed0: 681b ldr r3, [r3, #0]
  13906. 8005ed2: 4a21 ldr r2, [pc, #132] @ (8005f58 <HAL_DMA_Start_IT+0x4b0>)
  13907. 8005ed4: 4293 cmp r3, r2
  13908. 8005ed6: d108 bne.n 8005eea <HAL_DMA_Start_IT+0x442>
  13909. 8005ed8: 68fb ldr r3, [r7, #12]
  13910. 8005eda: 681b ldr r3, [r3, #0]
  13911. 8005edc: 681a ldr r2, [r3, #0]
  13912. 8005ede: 68fb ldr r3, [r7, #12]
  13913. 8005ee0: 681b ldr r3, [r3, #0]
  13914. 8005ee2: f042 0201 orr.w r2, r2, #1
  13915. 8005ee6: 601a str r2, [r3, #0]
  13916. 8005ee8: e012 b.n 8005f10 <HAL_DMA_Start_IT+0x468>
  13917. 8005eea: 68fb ldr r3, [r7, #12]
  13918. 8005eec: 681b ldr r3, [r3, #0]
  13919. 8005eee: 681a ldr r2, [r3, #0]
  13920. 8005ef0: 68fb ldr r3, [r7, #12]
  13921. 8005ef2: 681b ldr r3, [r3, #0]
  13922. 8005ef4: f042 0201 orr.w r2, r2, #1
  13923. 8005ef8: 601a str r2, [r3, #0]
  13924. 8005efa: e009 b.n 8005f10 <HAL_DMA_Start_IT+0x468>
  13925. }
  13926. else
  13927. {
  13928. /* Set the error code to busy */
  13929. hdma->ErrorCode = HAL_DMA_ERROR_BUSY;
  13930. 8005efc: 68fb ldr r3, [r7, #12]
  13931. 8005efe: f44f 6200 mov.w r2, #2048 @ 0x800
  13932. 8005f02: 655a str r2, [r3, #84] @ 0x54
  13933. /* Process unlocked */
  13934. __HAL_UNLOCK(hdma);
  13935. 8005f04: 68fb ldr r3, [r7, #12]
  13936. 8005f06: 2200 movs r2, #0
  13937. 8005f08: f883 2034 strb.w r2, [r3, #52] @ 0x34
  13938. /* Return error status */
  13939. status = HAL_ERROR;
  13940. 8005f0c: 2301 movs r3, #1
  13941. 8005f0e: 75fb strb r3, [r7, #23]
  13942. }
  13943. return status;
  13944. 8005f10: 7dfb ldrb r3, [r7, #23]
  13945. }
  13946. 8005f12: 4618 mov r0, r3
  13947. 8005f14: 3718 adds r7, #24
  13948. 8005f16: 46bd mov sp, r7
  13949. 8005f18: bd80 pop {r7, pc}
  13950. 8005f1a: bf00 nop
  13951. 8005f1c: 40020010 .word 0x40020010
  13952. 8005f20: 40020028 .word 0x40020028
  13953. 8005f24: 40020040 .word 0x40020040
  13954. 8005f28: 40020058 .word 0x40020058
  13955. 8005f2c: 40020070 .word 0x40020070
  13956. 8005f30: 40020088 .word 0x40020088
  13957. 8005f34: 400200a0 .word 0x400200a0
  13958. 8005f38: 400200b8 .word 0x400200b8
  13959. 8005f3c: 40020410 .word 0x40020410
  13960. 8005f40: 40020428 .word 0x40020428
  13961. 8005f44: 40020440 .word 0x40020440
  13962. 8005f48: 40020458 .word 0x40020458
  13963. 8005f4c: 40020470 .word 0x40020470
  13964. 8005f50: 40020488 .word 0x40020488
  13965. 8005f54: 400204a0 .word 0x400204a0
  13966. 8005f58: 400204b8 .word 0x400204b8
  13967. 8005f5c: 58025408 .word 0x58025408
  13968. 8005f60: 5802541c .word 0x5802541c
  13969. 8005f64: 58025430 .word 0x58025430
  13970. 8005f68: 58025444 .word 0x58025444
  13971. 8005f6c: 58025458 .word 0x58025458
  13972. 8005f70: 5802546c .word 0x5802546c
  13973. 8005f74: 58025480 .word 0x58025480
  13974. 8005f78: 58025494 .word 0x58025494
  13975. 08005f7c <HAL_DMA_Abort>:
  13976. * and the Stream will be effectively disabled only after the transfer of
  13977. * this single data is finished.
  13978. * @retval HAL status
  13979. */
  13980. HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma)
  13981. {
  13982. 8005f7c: b580 push {r7, lr}
  13983. 8005f7e: b086 sub sp, #24
  13984. 8005f80: af00 add r7, sp, #0
  13985. 8005f82: 6078 str r0, [r7, #4]
  13986. /* calculate DMA base and stream number */
  13987. DMA_Base_Registers *regs_dma;
  13988. BDMA_Base_Registers *regs_bdma;
  13989. const __IO uint32_t *enableRegister;
  13990. uint32_t tickstart = HAL_GetTick();
  13991. 8005f84: f7fd fa9e bl 80034c4 <HAL_GetTick>
  13992. 8005f88: 6138 str r0, [r7, #16]
  13993. /* Check the DMA peripheral handle */
  13994. if(hdma == NULL)
  13995. 8005f8a: 687b ldr r3, [r7, #4]
  13996. 8005f8c: 2b00 cmp r3, #0
  13997. 8005f8e: d101 bne.n 8005f94 <HAL_DMA_Abort+0x18>
  13998. {
  13999. return HAL_ERROR;
  14000. 8005f90: 2301 movs r3, #1
  14001. 8005f92: e2dc b.n 800654e <HAL_DMA_Abort+0x5d2>
  14002. }
  14003. /* Check the DMA peripheral state */
  14004. if(hdma->State != HAL_DMA_STATE_BUSY)
  14005. 8005f94: 687b ldr r3, [r7, #4]
  14006. 8005f96: f893 3035 ldrb.w r3, [r3, #53] @ 0x35
  14007. 8005f9a: b2db uxtb r3, r3
  14008. 8005f9c: 2b02 cmp r3, #2
  14009. 8005f9e: d008 beq.n 8005fb2 <HAL_DMA_Abort+0x36>
  14010. {
  14011. hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER;
  14012. 8005fa0: 687b ldr r3, [r7, #4]
  14013. 8005fa2: 2280 movs r2, #128 @ 0x80
  14014. 8005fa4: 655a str r2, [r3, #84] @ 0x54
  14015. /* Process Unlocked */
  14016. __HAL_UNLOCK(hdma);
  14017. 8005fa6: 687b ldr r3, [r7, #4]
  14018. 8005fa8: 2200 movs r2, #0
  14019. 8005faa: f883 2034 strb.w r2, [r3, #52] @ 0x34
  14020. return HAL_ERROR;
  14021. 8005fae: 2301 movs r3, #1
  14022. 8005fb0: e2cd b.n 800654e <HAL_DMA_Abort+0x5d2>
  14023. }
  14024. else
  14025. {
  14026. /* Disable all the transfer interrupts */
  14027. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  14028. 8005fb2: 687b ldr r3, [r7, #4]
  14029. 8005fb4: 681b ldr r3, [r3, #0]
  14030. 8005fb6: 4a76 ldr r2, [pc, #472] @ (8006190 <HAL_DMA_Abort+0x214>)
  14031. 8005fb8: 4293 cmp r3, r2
  14032. 8005fba: d04a beq.n 8006052 <HAL_DMA_Abort+0xd6>
  14033. 8005fbc: 687b ldr r3, [r7, #4]
  14034. 8005fbe: 681b ldr r3, [r3, #0]
  14035. 8005fc0: 4a74 ldr r2, [pc, #464] @ (8006194 <HAL_DMA_Abort+0x218>)
  14036. 8005fc2: 4293 cmp r3, r2
  14037. 8005fc4: d045 beq.n 8006052 <HAL_DMA_Abort+0xd6>
  14038. 8005fc6: 687b ldr r3, [r7, #4]
  14039. 8005fc8: 681b ldr r3, [r3, #0]
  14040. 8005fca: 4a73 ldr r2, [pc, #460] @ (8006198 <HAL_DMA_Abort+0x21c>)
  14041. 8005fcc: 4293 cmp r3, r2
  14042. 8005fce: d040 beq.n 8006052 <HAL_DMA_Abort+0xd6>
  14043. 8005fd0: 687b ldr r3, [r7, #4]
  14044. 8005fd2: 681b ldr r3, [r3, #0]
  14045. 8005fd4: 4a71 ldr r2, [pc, #452] @ (800619c <HAL_DMA_Abort+0x220>)
  14046. 8005fd6: 4293 cmp r3, r2
  14047. 8005fd8: d03b beq.n 8006052 <HAL_DMA_Abort+0xd6>
  14048. 8005fda: 687b ldr r3, [r7, #4]
  14049. 8005fdc: 681b ldr r3, [r3, #0]
  14050. 8005fde: 4a70 ldr r2, [pc, #448] @ (80061a0 <HAL_DMA_Abort+0x224>)
  14051. 8005fe0: 4293 cmp r3, r2
  14052. 8005fe2: d036 beq.n 8006052 <HAL_DMA_Abort+0xd6>
  14053. 8005fe4: 687b ldr r3, [r7, #4]
  14054. 8005fe6: 681b ldr r3, [r3, #0]
  14055. 8005fe8: 4a6e ldr r2, [pc, #440] @ (80061a4 <HAL_DMA_Abort+0x228>)
  14056. 8005fea: 4293 cmp r3, r2
  14057. 8005fec: d031 beq.n 8006052 <HAL_DMA_Abort+0xd6>
  14058. 8005fee: 687b ldr r3, [r7, #4]
  14059. 8005ff0: 681b ldr r3, [r3, #0]
  14060. 8005ff2: 4a6d ldr r2, [pc, #436] @ (80061a8 <HAL_DMA_Abort+0x22c>)
  14061. 8005ff4: 4293 cmp r3, r2
  14062. 8005ff6: d02c beq.n 8006052 <HAL_DMA_Abort+0xd6>
  14063. 8005ff8: 687b ldr r3, [r7, #4]
  14064. 8005ffa: 681b ldr r3, [r3, #0]
  14065. 8005ffc: 4a6b ldr r2, [pc, #428] @ (80061ac <HAL_DMA_Abort+0x230>)
  14066. 8005ffe: 4293 cmp r3, r2
  14067. 8006000: d027 beq.n 8006052 <HAL_DMA_Abort+0xd6>
  14068. 8006002: 687b ldr r3, [r7, #4]
  14069. 8006004: 681b ldr r3, [r3, #0]
  14070. 8006006: 4a6a ldr r2, [pc, #424] @ (80061b0 <HAL_DMA_Abort+0x234>)
  14071. 8006008: 4293 cmp r3, r2
  14072. 800600a: d022 beq.n 8006052 <HAL_DMA_Abort+0xd6>
  14073. 800600c: 687b ldr r3, [r7, #4]
  14074. 800600e: 681b ldr r3, [r3, #0]
  14075. 8006010: 4a68 ldr r2, [pc, #416] @ (80061b4 <HAL_DMA_Abort+0x238>)
  14076. 8006012: 4293 cmp r3, r2
  14077. 8006014: d01d beq.n 8006052 <HAL_DMA_Abort+0xd6>
  14078. 8006016: 687b ldr r3, [r7, #4]
  14079. 8006018: 681b ldr r3, [r3, #0]
  14080. 800601a: 4a67 ldr r2, [pc, #412] @ (80061b8 <HAL_DMA_Abort+0x23c>)
  14081. 800601c: 4293 cmp r3, r2
  14082. 800601e: d018 beq.n 8006052 <HAL_DMA_Abort+0xd6>
  14083. 8006020: 687b ldr r3, [r7, #4]
  14084. 8006022: 681b ldr r3, [r3, #0]
  14085. 8006024: 4a65 ldr r2, [pc, #404] @ (80061bc <HAL_DMA_Abort+0x240>)
  14086. 8006026: 4293 cmp r3, r2
  14087. 8006028: d013 beq.n 8006052 <HAL_DMA_Abort+0xd6>
  14088. 800602a: 687b ldr r3, [r7, #4]
  14089. 800602c: 681b ldr r3, [r3, #0]
  14090. 800602e: 4a64 ldr r2, [pc, #400] @ (80061c0 <HAL_DMA_Abort+0x244>)
  14091. 8006030: 4293 cmp r3, r2
  14092. 8006032: d00e beq.n 8006052 <HAL_DMA_Abort+0xd6>
  14093. 8006034: 687b ldr r3, [r7, #4]
  14094. 8006036: 681b ldr r3, [r3, #0]
  14095. 8006038: 4a62 ldr r2, [pc, #392] @ (80061c4 <HAL_DMA_Abort+0x248>)
  14096. 800603a: 4293 cmp r3, r2
  14097. 800603c: d009 beq.n 8006052 <HAL_DMA_Abort+0xd6>
  14098. 800603e: 687b ldr r3, [r7, #4]
  14099. 8006040: 681b ldr r3, [r3, #0]
  14100. 8006042: 4a61 ldr r2, [pc, #388] @ (80061c8 <HAL_DMA_Abort+0x24c>)
  14101. 8006044: 4293 cmp r3, r2
  14102. 8006046: d004 beq.n 8006052 <HAL_DMA_Abort+0xd6>
  14103. 8006048: 687b ldr r3, [r7, #4]
  14104. 800604a: 681b ldr r3, [r3, #0]
  14105. 800604c: 4a5f ldr r2, [pc, #380] @ (80061cc <HAL_DMA_Abort+0x250>)
  14106. 800604e: 4293 cmp r3, r2
  14107. 8006050: d101 bne.n 8006056 <HAL_DMA_Abort+0xda>
  14108. 8006052: 2301 movs r3, #1
  14109. 8006054: e000 b.n 8006058 <HAL_DMA_Abort+0xdc>
  14110. 8006056: 2300 movs r3, #0
  14111. 8006058: 2b00 cmp r3, #0
  14112. 800605a: d013 beq.n 8006084 <HAL_DMA_Abort+0x108>
  14113. {
  14114. /* Disable DMA All Interrupts */
  14115. ((DMA_Stream_TypeDef *)hdma->Instance)->CR &= ~(DMA_IT_TC | DMA_IT_TE | DMA_IT_DME | DMA_IT_HT);
  14116. 800605c: 687b ldr r3, [r7, #4]
  14117. 800605e: 681b ldr r3, [r3, #0]
  14118. 8006060: 681a ldr r2, [r3, #0]
  14119. 8006062: 687b ldr r3, [r7, #4]
  14120. 8006064: 681b ldr r3, [r3, #0]
  14121. 8006066: f022 021e bic.w r2, r2, #30
  14122. 800606a: 601a str r2, [r3, #0]
  14123. ((DMA_Stream_TypeDef *)hdma->Instance)->FCR &= ~(DMA_IT_FE);
  14124. 800606c: 687b ldr r3, [r7, #4]
  14125. 800606e: 681b ldr r3, [r3, #0]
  14126. 8006070: 695a ldr r2, [r3, #20]
  14127. 8006072: 687b ldr r3, [r7, #4]
  14128. 8006074: 681b ldr r3, [r3, #0]
  14129. 8006076: f022 0280 bic.w r2, r2, #128 @ 0x80
  14130. 800607a: 615a str r2, [r3, #20]
  14131. enableRegister = (__IO uint32_t *)(&(((DMA_Stream_TypeDef *)hdma->Instance)->CR));
  14132. 800607c: 687b ldr r3, [r7, #4]
  14133. 800607e: 681b ldr r3, [r3, #0]
  14134. 8006080: 617b str r3, [r7, #20]
  14135. 8006082: e00a b.n 800609a <HAL_DMA_Abort+0x11e>
  14136. }
  14137. else /* BDMA channel */
  14138. {
  14139. /* Disable DMA All Interrupts */
  14140. ((BDMA_Channel_TypeDef *)hdma->Instance)->CCR &= ~(BDMA_CCR_TCIE | BDMA_CCR_HTIE | BDMA_CCR_TEIE);
  14141. 8006084: 687b ldr r3, [r7, #4]
  14142. 8006086: 681b ldr r3, [r3, #0]
  14143. 8006088: 681a ldr r2, [r3, #0]
  14144. 800608a: 687b ldr r3, [r7, #4]
  14145. 800608c: 681b ldr r3, [r3, #0]
  14146. 800608e: f022 020e bic.w r2, r2, #14
  14147. 8006092: 601a str r2, [r3, #0]
  14148. enableRegister = (__IO uint32_t *)(&(((BDMA_Channel_TypeDef *)hdma->Instance)->CCR));
  14149. 8006094: 687b ldr r3, [r7, #4]
  14150. 8006096: 681b ldr r3, [r3, #0]
  14151. 8006098: 617b str r3, [r7, #20]
  14152. }
  14153. if(IS_DMA_DMAMUX_ALL_INSTANCE(hdma->Instance) != 0U) /* No DMAMUX available for BDMA1 */
  14154. 800609a: 687b ldr r3, [r7, #4]
  14155. 800609c: 681b ldr r3, [r3, #0]
  14156. 800609e: 4a3c ldr r2, [pc, #240] @ (8006190 <HAL_DMA_Abort+0x214>)
  14157. 80060a0: 4293 cmp r3, r2
  14158. 80060a2: d072 beq.n 800618a <HAL_DMA_Abort+0x20e>
  14159. 80060a4: 687b ldr r3, [r7, #4]
  14160. 80060a6: 681b ldr r3, [r3, #0]
  14161. 80060a8: 4a3a ldr r2, [pc, #232] @ (8006194 <HAL_DMA_Abort+0x218>)
  14162. 80060aa: 4293 cmp r3, r2
  14163. 80060ac: d06d beq.n 800618a <HAL_DMA_Abort+0x20e>
  14164. 80060ae: 687b ldr r3, [r7, #4]
  14165. 80060b0: 681b ldr r3, [r3, #0]
  14166. 80060b2: 4a39 ldr r2, [pc, #228] @ (8006198 <HAL_DMA_Abort+0x21c>)
  14167. 80060b4: 4293 cmp r3, r2
  14168. 80060b6: d068 beq.n 800618a <HAL_DMA_Abort+0x20e>
  14169. 80060b8: 687b ldr r3, [r7, #4]
  14170. 80060ba: 681b ldr r3, [r3, #0]
  14171. 80060bc: 4a37 ldr r2, [pc, #220] @ (800619c <HAL_DMA_Abort+0x220>)
  14172. 80060be: 4293 cmp r3, r2
  14173. 80060c0: d063 beq.n 800618a <HAL_DMA_Abort+0x20e>
  14174. 80060c2: 687b ldr r3, [r7, #4]
  14175. 80060c4: 681b ldr r3, [r3, #0]
  14176. 80060c6: 4a36 ldr r2, [pc, #216] @ (80061a0 <HAL_DMA_Abort+0x224>)
  14177. 80060c8: 4293 cmp r3, r2
  14178. 80060ca: d05e beq.n 800618a <HAL_DMA_Abort+0x20e>
  14179. 80060cc: 687b ldr r3, [r7, #4]
  14180. 80060ce: 681b ldr r3, [r3, #0]
  14181. 80060d0: 4a34 ldr r2, [pc, #208] @ (80061a4 <HAL_DMA_Abort+0x228>)
  14182. 80060d2: 4293 cmp r3, r2
  14183. 80060d4: d059 beq.n 800618a <HAL_DMA_Abort+0x20e>
  14184. 80060d6: 687b ldr r3, [r7, #4]
  14185. 80060d8: 681b ldr r3, [r3, #0]
  14186. 80060da: 4a33 ldr r2, [pc, #204] @ (80061a8 <HAL_DMA_Abort+0x22c>)
  14187. 80060dc: 4293 cmp r3, r2
  14188. 80060de: d054 beq.n 800618a <HAL_DMA_Abort+0x20e>
  14189. 80060e0: 687b ldr r3, [r7, #4]
  14190. 80060e2: 681b ldr r3, [r3, #0]
  14191. 80060e4: 4a31 ldr r2, [pc, #196] @ (80061ac <HAL_DMA_Abort+0x230>)
  14192. 80060e6: 4293 cmp r3, r2
  14193. 80060e8: d04f beq.n 800618a <HAL_DMA_Abort+0x20e>
  14194. 80060ea: 687b ldr r3, [r7, #4]
  14195. 80060ec: 681b ldr r3, [r3, #0]
  14196. 80060ee: 4a30 ldr r2, [pc, #192] @ (80061b0 <HAL_DMA_Abort+0x234>)
  14197. 80060f0: 4293 cmp r3, r2
  14198. 80060f2: d04a beq.n 800618a <HAL_DMA_Abort+0x20e>
  14199. 80060f4: 687b ldr r3, [r7, #4]
  14200. 80060f6: 681b ldr r3, [r3, #0]
  14201. 80060f8: 4a2e ldr r2, [pc, #184] @ (80061b4 <HAL_DMA_Abort+0x238>)
  14202. 80060fa: 4293 cmp r3, r2
  14203. 80060fc: d045 beq.n 800618a <HAL_DMA_Abort+0x20e>
  14204. 80060fe: 687b ldr r3, [r7, #4]
  14205. 8006100: 681b ldr r3, [r3, #0]
  14206. 8006102: 4a2d ldr r2, [pc, #180] @ (80061b8 <HAL_DMA_Abort+0x23c>)
  14207. 8006104: 4293 cmp r3, r2
  14208. 8006106: d040 beq.n 800618a <HAL_DMA_Abort+0x20e>
  14209. 8006108: 687b ldr r3, [r7, #4]
  14210. 800610a: 681b ldr r3, [r3, #0]
  14211. 800610c: 4a2b ldr r2, [pc, #172] @ (80061bc <HAL_DMA_Abort+0x240>)
  14212. 800610e: 4293 cmp r3, r2
  14213. 8006110: d03b beq.n 800618a <HAL_DMA_Abort+0x20e>
  14214. 8006112: 687b ldr r3, [r7, #4]
  14215. 8006114: 681b ldr r3, [r3, #0]
  14216. 8006116: 4a2a ldr r2, [pc, #168] @ (80061c0 <HAL_DMA_Abort+0x244>)
  14217. 8006118: 4293 cmp r3, r2
  14218. 800611a: d036 beq.n 800618a <HAL_DMA_Abort+0x20e>
  14219. 800611c: 687b ldr r3, [r7, #4]
  14220. 800611e: 681b ldr r3, [r3, #0]
  14221. 8006120: 4a28 ldr r2, [pc, #160] @ (80061c4 <HAL_DMA_Abort+0x248>)
  14222. 8006122: 4293 cmp r3, r2
  14223. 8006124: d031 beq.n 800618a <HAL_DMA_Abort+0x20e>
  14224. 8006126: 687b ldr r3, [r7, #4]
  14225. 8006128: 681b ldr r3, [r3, #0]
  14226. 800612a: 4a27 ldr r2, [pc, #156] @ (80061c8 <HAL_DMA_Abort+0x24c>)
  14227. 800612c: 4293 cmp r3, r2
  14228. 800612e: d02c beq.n 800618a <HAL_DMA_Abort+0x20e>
  14229. 8006130: 687b ldr r3, [r7, #4]
  14230. 8006132: 681b ldr r3, [r3, #0]
  14231. 8006134: 4a25 ldr r2, [pc, #148] @ (80061cc <HAL_DMA_Abort+0x250>)
  14232. 8006136: 4293 cmp r3, r2
  14233. 8006138: d027 beq.n 800618a <HAL_DMA_Abort+0x20e>
  14234. 800613a: 687b ldr r3, [r7, #4]
  14235. 800613c: 681b ldr r3, [r3, #0]
  14236. 800613e: 4a24 ldr r2, [pc, #144] @ (80061d0 <HAL_DMA_Abort+0x254>)
  14237. 8006140: 4293 cmp r3, r2
  14238. 8006142: d022 beq.n 800618a <HAL_DMA_Abort+0x20e>
  14239. 8006144: 687b ldr r3, [r7, #4]
  14240. 8006146: 681b ldr r3, [r3, #0]
  14241. 8006148: 4a22 ldr r2, [pc, #136] @ (80061d4 <HAL_DMA_Abort+0x258>)
  14242. 800614a: 4293 cmp r3, r2
  14243. 800614c: d01d beq.n 800618a <HAL_DMA_Abort+0x20e>
  14244. 800614e: 687b ldr r3, [r7, #4]
  14245. 8006150: 681b ldr r3, [r3, #0]
  14246. 8006152: 4a21 ldr r2, [pc, #132] @ (80061d8 <HAL_DMA_Abort+0x25c>)
  14247. 8006154: 4293 cmp r3, r2
  14248. 8006156: d018 beq.n 800618a <HAL_DMA_Abort+0x20e>
  14249. 8006158: 687b ldr r3, [r7, #4]
  14250. 800615a: 681b ldr r3, [r3, #0]
  14251. 800615c: 4a1f ldr r2, [pc, #124] @ (80061dc <HAL_DMA_Abort+0x260>)
  14252. 800615e: 4293 cmp r3, r2
  14253. 8006160: d013 beq.n 800618a <HAL_DMA_Abort+0x20e>
  14254. 8006162: 687b ldr r3, [r7, #4]
  14255. 8006164: 681b ldr r3, [r3, #0]
  14256. 8006166: 4a1e ldr r2, [pc, #120] @ (80061e0 <HAL_DMA_Abort+0x264>)
  14257. 8006168: 4293 cmp r3, r2
  14258. 800616a: d00e beq.n 800618a <HAL_DMA_Abort+0x20e>
  14259. 800616c: 687b ldr r3, [r7, #4]
  14260. 800616e: 681b ldr r3, [r3, #0]
  14261. 8006170: 4a1c ldr r2, [pc, #112] @ (80061e4 <HAL_DMA_Abort+0x268>)
  14262. 8006172: 4293 cmp r3, r2
  14263. 8006174: d009 beq.n 800618a <HAL_DMA_Abort+0x20e>
  14264. 8006176: 687b ldr r3, [r7, #4]
  14265. 8006178: 681b ldr r3, [r3, #0]
  14266. 800617a: 4a1b ldr r2, [pc, #108] @ (80061e8 <HAL_DMA_Abort+0x26c>)
  14267. 800617c: 4293 cmp r3, r2
  14268. 800617e: d004 beq.n 800618a <HAL_DMA_Abort+0x20e>
  14269. 8006180: 687b ldr r3, [r7, #4]
  14270. 8006182: 681b ldr r3, [r3, #0]
  14271. 8006184: 4a19 ldr r2, [pc, #100] @ (80061ec <HAL_DMA_Abort+0x270>)
  14272. 8006186: 4293 cmp r3, r2
  14273. 8006188: d132 bne.n 80061f0 <HAL_DMA_Abort+0x274>
  14274. 800618a: 2301 movs r3, #1
  14275. 800618c: e031 b.n 80061f2 <HAL_DMA_Abort+0x276>
  14276. 800618e: bf00 nop
  14277. 8006190: 40020010 .word 0x40020010
  14278. 8006194: 40020028 .word 0x40020028
  14279. 8006198: 40020040 .word 0x40020040
  14280. 800619c: 40020058 .word 0x40020058
  14281. 80061a0: 40020070 .word 0x40020070
  14282. 80061a4: 40020088 .word 0x40020088
  14283. 80061a8: 400200a0 .word 0x400200a0
  14284. 80061ac: 400200b8 .word 0x400200b8
  14285. 80061b0: 40020410 .word 0x40020410
  14286. 80061b4: 40020428 .word 0x40020428
  14287. 80061b8: 40020440 .word 0x40020440
  14288. 80061bc: 40020458 .word 0x40020458
  14289. 80061c0: 40020470 .word 0x40020470
  14290. 80061c4: 40020488 .word 0x40020488
  14291. 80061c8: 400204a0 .word 0x400204a0
  14292. 80061cc: 400204b8 .word 0x400204b8
  14293. 80061d0: 58025408 .word 0x58025408
  14294. 80061d4: 5802541c .word 0x5802541c
  14295. 80061d8: 58025430 .word 0x58025430
  14296. 80061dc: 58025444 .word 0x58025444
  14297. 80061e0: 58025458 .word 0x58025458
  14298. 80061e4: 5802546c .word 0x5802546c
  14299. 80061e8: 58025480 .word 0x58025480
  14300. 80061ec: 58025494 .word 0x58025494
  14301. 80061f0: 2300 movs r3, #0
  14302. 80061f2: 2b00 cmp r3, #0
  14303. 80061f4: d007 beq.n 8006206 <HAL_DMA_Abort+0x28a>
  14304. {
  14305. /* disable the DMAMUX sync overrun IT */
  14306. hdma->DMAmuxChannel->CCR &= ~DMAMUX_CxCR_SOIE;
  14307. 80061f6: 687b ldr r3, [r7, #4]
  14308. 80061f8: 6e1b ldr r3, [r3, #96] @ 0x60
  14309. 80061fa: 681a ldr r2, [r3, #0]
  14310. 80061fc: 687b ldr r3, [r7, #4]
  14311. 80061fe: 6e1b ldr r3, [r3, #96] @ 0x60
  14312. 8006200: f422 7280 bic.w r2, r2, #256 @ 0x100
  14313. 8006204: 601a str r2, [r3, #0]
  14314. }
  14315. /* Disable the stream */
  14316. __HAL_DMA_DISABLE(hdma);
  14317. 8006206: 687b ldr r3, [r7, #4]
  14318. 8006208: 681b ldr r3, [r3, #0]
  14319. 800620a: 4a6d ldr r2, [pc, #436] @ (80063c0 <HAL_DMA_Abort+0x444>)
  14320. 800620c: 4293 cmp r3, r2
  14321. 800620e: d04a beq.n 80062a6 <HAL_DMA_Abort+0x32a>
  14322. 8006210: 687b ldr r3, [r7, #4]
  14323. 8006212: 681b ldr r3, [r3, #0]
  14324. 8006214: 4a6b ldr r2, [pc, #428] @ (80063c4 <HAL_DMA_Abort+0x448>)
  14325. 8006216: 4293 cmp r3, r2
  14326. 8006218: d045 beq.n 80062a6 <HAL_DMA_Abort+0x32a>
  14327. 800621a: 687b ldr r3, [r7, #4]
  14328. 800621c: 681b ldr r3, [r3, #0]
  14329. 800621e: 4a6a ldr r2, [pc, #424] @ (80063c8 <HAL_DMA_Abort+0x44c>)
  14330. 8006220: 4293 cmp r3, r2
  14331. 8006222: d040 beq.n 80062a6 <HAL_DMA_Abort+0x32a>
  14332. 8006224: 687b ldr r3, [r7, #4]
  14333. 8006226: 681b ldr r3, [r3, #0]
  14334. 8006228: 4a68 ldr r2, [pc, #416] @ (80063cc <HAL_DMA_Abort+0x450>)
  14335. 800622a: 4293 cmp r3, r2
  14336. 800622c: d03b beq.n 80062a6 <HAL_DMA_Abort+0x32a>
  14337. 800622e: 687b ldr r3, [r7, #4]
  14338. 8006230: 681b ldr r3, [r3, #0]
  14339. 8006232: 4a67 ldr r2, [pc, #412] @ (80063d0 <HAL_DMA_Abort+0x454>)
  14340. 8006234: 4293 cmp r3, r2
  14341. 8006236: d036 beq.n 80062a6 <HAL_DMA_Abort+0x32a>
  14342. 8006238: 687b ldr r3, [r7, #4]
  14343. 800623a: 681b ldr r3, [r3, #0]
  14344. 800623c: 4a65 ldr r2, [pc, #404] @ (80063d4 <HAL_DMA_Abort+0x458>)
  14345. 800623e: 4293 cmp r3, r2
  14346. 8006240: d031 beq.n 80062a6 <HAL_DMA_Abort+0x32a>
  14347. 8006242: 687b ldr r3, [r7, #4]
  14348. 8006244: 681b ldr r3, [r3, #0]
  14349. 8006246: 4a64 ldr r2, [pc, #400] @ (80063d8 <HAL_DMA_Abort+0x45c>)
  14350. 8006248: 4293 cmp r3, r2
  14351. 800624a: d02c beq.n 80062a6 <HAL_DMA_Abort+0x32a>
  14352. 800624c: 687b ldr r3, [r7, #4]
  14353. 800624e: 681b ldr r3, [r3, #0]
  14354. 8006250: 4a62 ldr r2, [pc, #392] @ (80063dc <HAL_DMA_Abort+0x460>)
  14355. 8006252: 4293 cmp r3, r2
  14356. 8006254: d027 beq.n 80062a6 <HAL_DMA_Abort+0x32a>
  14357. 8006256: 687b ldr r3, [r7, #4]
  14358. 8006258: 681b ldr r3, [r3, #0]
  14359. 800625a: 4a61 ldr r2, [pc, #388] @ (80063e0 <HAL_DMA_Abort+0x464>)
  14360. 800625c: 4293 cmp r3, r2
  14361. 800625e: d022 beq.n 80062a6 <HAL_DMA_Abort+0x32a>
  14362. 8006260: 687b ldr r3, [r7, #4]
  14363. 8006262: 681b ldr r3, [r3, #0]
  14364. 8006264: 4a5f ldr r2, [pc, #380] @ (80063e4 <HAL_DMA_Abort+0x468>)
  14365. 8006266: 4293 cmp r3, r2
  14366. 8006268: d01d beq.n 80062a6 <HAL_DMA_Abort+0x32a>
  14367. 800626a: 687b ldr r3, [r7, #4]
  14368. 800626c: 681b ldr r3, [r3, #0]
  14369. 800626e: 4a5e ldr r2, [pc, #376] @ (80063e8 <HAL_DMA_Abort+0x46c>)
  14370. 8006270: 4293 cmp r3, r2
  14371. 8006272: d018 beq.n 80062a6 <HAL_DMA_Abort+0x32a>
  14372. 8006274: 687b ldr r3, [r7, #4]
  14373. 8006276: 681b ldr r3, [r3, #0]
  14374. 8006278: 4a5c ldr r2, [pc, #368] @ (80063ec <HAL_DMA_Abort+0x470>)
  14375. 800627a: 4293 cmp r3, r2
  14376. 800627c: d013 beq.n 80062a6 <HAL_DMA_Abort+0x32a>
  14377. 800627e: 687b ldr r3, [r7, #4]
  14378. 8006280: 681b ldr r3, [r3, #0]
  14379. 8006282: 4a5b ldr r2, [pc, #364] @ (80063f0 <HAL_DMA_Abort+0x474>)
  14380. 8006284: 4293 cmp r3, r2
  14381. 8006286: d00e beq.n 80062a6 <HAL_DMA_Abort+0x32a>
  14382. 8006288: 687b ldr r3, [r7, #4]
  14383. 800628a: 681b ldr r3, [r3, #0]
  14384. 800628c: 4a59 ldr r2, [pc, #356] @ (80063f4 <HAL_DMA_Abort+0x478>)
  14385. 800628e: 4293 cmp r3, r2
  14386. 8006290: d009 beq.n 80062a6 <HAL_DMA_Abort+0x32a>
  14387. 8006292: 687b ldr r3, [r7, #4]
  14388. 8006294: 681b ldr r3, [r3, #0]
  14389. 8006296: 4a58 ldr r2, [pc, #352] @ (80063f8 <HAL_DMA_Abort+0x47c>)
  14390. 8006298: 4293 cmp r3, r2
  14391. 800629a: d004 beq.n 80062a6 <HAL_DMA_Abort+0x32a>
  14392. 800629c: 687b ldr r3, [r7, #4]
  14393. 800629e: 681b ldr r3, [r3, #0]
  14394. 80062a0: 4a56 ldr r2, [pc, #344] @ (80063fc <HAL_DMA_Abort+0x480>)
  14395. 80062a2: 4293 cmp r3, r2
  14396. 80062a4: d108 bne.n 80062b8 <HAL_DMA_Abort+0x33c>
  14397. 80062a6: 687b ldr r3, [r7, #4]
  14398. 80062a8: 681b ldr r3, [r3, #0]
  14399. 80062aa: 681a ldr r2, [r3, #0]
  14400. 80062ac: 687b ldr r3, [r7, #4]
  14401. 80062ae: 681b ldr r3, [r3, #0]
  14402. 80062b0: f022 0201 bic.w r2, r2, #1
  14403. 80062b4: 601a str r2, [r3, #0]
  14404. 80062b6: e007 b.n 80062c8 <HAL_DMA_Abort+0x34c>
  14405. 80062b8: 687b ldr r3, [r7, #4]
  14406. 80062ba: 681b ldr r3, [r3, #0]
  14407. 80062bc: 681a ldr r2, [r3, #0]
  14408. 80062be: 687b ldr r3, [r7, #4]
  14409. 80062c0: 681b ldr r3, [r3, #0]
  14410. 80062c2: f022 0201 bic.w r2, r2, #1
  14411. 80062c6: 601a str r2, [r3, #0]
  14412. /* Check if the DMA Stream is effectively disabled */
  14413. while(((*enableRegister) & DMA_SxCR_EN) != 0U)
  14414. 80062c8: e013 b.n 80062f2 <HAL_DMA_Abort+0x376>
  14415. {
  14416. /* Check for the Timeout */
  14417. if((HAL_GetTick() - tickstart ) > HAL_TIMEOUT_DMA_ABORT)
  14418. 80062ca: f7fd f8fb bl 80034c4 <HAL_GetTick>
  14419. 80062ce: 4602 mov r2, r0
  14420. 80062d0: 693b ldr r3, [r7, #16]
  14421. 80062d2: 1ad3 subs r3, r2, r3
  14422. 80062d4: 2b05 cmp r3, #5
  14423. 80062d6: d90c bls.n 80062f2 <HAL_DMA_Abort+0x376>
  14424. {
  14425. /* Update error code */
  14426. hdma->ErrorCode = HAL_DMA_ERROR_TIMEOUT;
  14427. 80062d8: 687b ldr r3, [r7, #4]
  14428. 80062da: 2220 movs r2, #32
  14429. 80062dc: 655a str r2, [r3, #84] @ 0x54
  14430. /* Change the DMA state */
  14431. hdma->State = HAL_DMA_STATE_ERROR;
  14432. 80062de: 687b ldr r3, [r7, #4]
  14433. 80062e0: 2203 movs r2, #3
  14434. 80062e2: f883 2035 strb.w r2, [r3, #53] @ 0x35
  14435. /* Process Unlocked */
  14436. __HAL_UNLOCK(hdma);
  14437. 80062e6: 687b ldr r3, [r7, #4]
  14438. 80062e8: 2200 movs r2, #0
  14439. 80062ea: f883 2034 strb.w r2, [r3, #52] @ 0x34
  14440. return HAL_ERROR;
  14441. 80062ee: 2301 movs r3, #1
  14442. 80062f0: e12d b.n 800654e <HAL_DMA_Abort+0x5d2>
  14443. while(((*enableRegister) & DMA_SxCR_EN) != 0U)
  14444. 80062f2: 697b ldr r3, [r7, #20]
  14445. 80062f4: 681b ldr r3, [r3, #0]
  14446. 80062f6: f003 0301 and.w r3, r3, #1
  14447. 80062fa: 2b00 cmp r3, #0
  14448. 80062fc: d1e5 bne.n 80062ca <HAL_DMA_Abort+0x34e>
  14449. }
  14450. }
  14451. /* Clear all interrupt flags at correct offset within the register */
  14452. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  14453. 80062fe: 687b ldr r3, [r7, #4]
  14454. 8006300: 681b ldr r3, [r3, #0]
  14455. 8006302: 4a2f ldr r2, [pc, #188] @ (80063c0 <HAL_DMA_Abort+0x444>)
  14456. 8006304: 4293 cmp r3, r2
  14457. 8006306: d04a beq.n 800639e <HAL_DMA_Abort+0x422>
  14458. 8006308: 687b ldr r3, [r7, #4]
  14459. 800630a: 681b ldr r3, [r3, #0]
  14460. 800630c: 4a2d ldr r2, [pc, #180] @ (80063c4 <HAL_DMA_Abort+0x448>)
  14461. 800630e: 4293 cmp r3, r2
  14462. 8006310: d045 beq.n 800639e <HAL_DMA_Abort+0x422>
  14463. 8006312: 687b ldr r3, [r7, #4]
  14464. 8006314: 681b ldr r3, [r3, #0]
  14465. 8006316: 4a2c ldr r2, [pc, #176] @ (80063c8 <HAL_DMA_Abort+0x44c>)
  14466. 8006318: 4293 cmp r3, r2
  14467. 800631a: d040 beq.n 800639e <HAL_DMA_Abort+0x422>
  14468. 800631c: 687b ldr r3, [r7, #4]
  14469. 800631e: 681b ldr r3, [r3, #0]
  14470. 8006320: 4a2a ldr r2, [pc, #168] @ (80063cc <HAL_DMA_Abort+0x450>)
  14471. 8006322: 4293 cmp r3, r2
  14472. 8006324: d03b beq.n 800639e <HAL_DMA_Abort+0x422>
  14473. 8006326: 687b ldr r3, [r7, #4]
  14474. 8006328: 681b ldr r3, [r3, #0]
  14475. 800632a: 4a29 ldr r2, [pc, #164] @ (80063d0 <HAL_DMA_Abort+0x454>)
  14476. 800632c: 4293 cmp r3, r2
  14477. 800632e: d036 beq.n 800639e <HAL_DMA_Abort+0x422>
  14478. 8006330: 687b ldr r3, [r7, #4]
  14479. 8006332: 681b ldr r3, [r3, #0]
  14480. 8006334: 4a27 ldr r2, [pc, #156] @ (80063d4 <HAL_DMA_Abort+0x458>)
  14481. 8006336: 4293 cmp r3, r2
  14482. 8006338: d031 beq.n 800639e <HAL_DMA_Abort+0x422>
  14483. 800633a: 687b ldr r3, [r7, #4]
  14484. 800633c: 681b ldr r3, [r3, #0]
  14485. 800633e: 4a26 ldr r2, [pc, #152] @ (80063d8 <HAL_DMA_Abort+0x45c>)
  14486. 8006340: 4293 cmp r3, r2
  14487. 8006342: d02c beq.n 800639e <HAL_DMA_Abort+0x422>
  14488. 8006344: 687b ldr r3, [r7, #4]
  14489. 8006346: 681b ldr r3, [r3, #0]
  14490. 8006348: 4a24 ldr r2, [pc, #144] @ (80063dc <HAL_DMA_Abort+0x460>)
  14491. 800634a: 4293 cmp r3, r2
  14492. 800634c: d027 beq.n 800639e <HAL_DMA_Abort+0x422>
  14493. 800634e: 687b ldr r3, [r7, #4]
  14494. 8006350: 681b ldr r3, [r3, #0]
  14495. 8006352: 4a23 ldr r2, [pc, #140] @ (80063e0 <HAL_DMA_Abort+0x464>)
  14496. 8006354: 4293 cmp r3, r2
  14497. 8006356: d022 beq.n 800639e <HAL_DMA_Abort+0x422>
  14498. 8006358: 687b ldr r3, [r7, #4]
  14499. 800635a: 681b ldr r3, [r3, #0]
  14500. 800635c: 4a21 ldr r2, [pc, #132] @ (80063e4 <HAL_DMA_Abort+0x468>)
  14501. 800635e: 4293 cmp r3, r2
  14502. 8006360: d01d beq.n 800639e <HAL_DMA_Abort+0x422>
  14503. 8006362: 687b ldr r3, [r7, #4]
  14504. 8006364: 681b ldr r3, [r3, #0]
  14505. 8006366: 4a20 ldr r2, [pc, #128] @ (80063e8 <HAL_DMA_Abort+0x46c>)
  14506. 8006368: 4293 cmp r3, r2
  14507. 800636a: d018 beq.n 800639e <HAL_DMA_Abort+0x422>
  14508. 800636c: 687b ldr r3, [r7, #4]
  14509. 800636e: 681b ldr r3, [r3, #0]
  14510. 8006370: 4a1e ldr r2, [pc, #120] @ (80063ec <HAL_DMA_Abort+0x470>)
  14511. 8006372: 4293 cmp r3, r2
  14512. 8006374: d013 beq.n 800639e <HAL_DMA_Abort+0x422>
  14513. 8006376: 687b ldr r3, [r7, #4]
  14514. 8006378: 681b ldr r3, [r3, #0]
  14515. 800637a: 4a1d ldr r2, [pc, #116] @ (80063f0 <HAL_DMA_Abort+0x474>)
  14516. 800637c: 4293 cmp r3, r2
  14517. 800637e: d00e beq.n 800639e <HAL_DMA_Abort+0x422>
  14518. 8006380: 687b ldr r3, [r7, #4]
  14519. 8006382: 681b ldr r3, [r3, #0]
  14520. 8006384: 4a1b ldr r2, [pc, #108] @ (80063f4 <HAL_DMA_Abort+0x478>)
  14521. 8006386: 4293 cmp r3, r2
  14522. 8006388: d009 beq.n 800639e <HAL_DMA_Abort+0x422>
  14523. 800638a: 687b ldr r3, [r7, #4]
  14524. 800638c: 681b ldr r3, [r3, #0]
  14525. 800638e: 4a1a ldr r2, [pc, #104] @ (80063f8 <HAL_DMA_Abort+0x47c>)
  14526. 8006390: 4293 cmp r3, r2
  14527. 8006392: d004 beq.n 800639e <HAL_DMA_Abort+0x422>
  14528. 8006394: 687b ldr r3, [r7, #4]
  14529. 8006396: 681b ldr r3, [r3, #0]
  14530. 8006398: 4a18 ldr r2, [pc, #96] @ (80063fc <HAL_DMA_Abort+0x480>)
  14531. 800639a: 4293 cmp r3, r2
  14532. 800639c: d101 bne.n 80063a2 <HAL_DMA_Abort+0x426>
  14533. 800639e: 2301 movs r3, #1
  14534. 80063a0: e000 b.n 80063a4 <HAL_DMA_Abort+0x428>
  14535. 80063a2: 2300 movs r3, #0
  14536. 80063a4: 2b00 cmp r3, #0
  14537. 80063a6: d02b beq.n 8006400 <HAL_DMA_Abort+0x484>
  14538. {
  14539. regs_dma = (DMA_Base_Registers *)hdma->StreamBaseAddress;
  14540. 80063a8: 687b ldr r3, [r7, #4]
  14541. 80063aa: 6d9b ldr r3, [r3, #88] @ 0x58
  14542. 80063ac: 60bb str r3, [r7, #8]
  14543. regs_dma->IFCR = 0x3FUL << (hdma->StreamIndex & 0x1FU);
  14544. 80063ae: 687b ldr r3, [r7, #4]
  14545. 80063b0: 6ddb ldr r3, [r3, #92] @ 0x5c
  14546. 80063b2: f003 031f and.w r3, r3, #31
  14547. 80063b6: 223f movs r2, #63 @ 0x3f
  14548. 80063b8: 409a lsls r2, r3
  14549. 80063ba: 68bb ldr r3, [r7, #8]
  14550. 80063bc: 609a str r2, [r3, #8]
  14551. 80063be: e02a b.n 8006416 <HAL_DMA_Abort+0x49a>
  14552. 80063c0: 40020010 .word 0x40020010
  14553. 80063c4: 40020028 .word 0x40020028
  14554. 80063c8: 40020040 .word 0x40020040
  14555. 80063cc: 40020058 .word 0x40020058
  14556. 80063d0: 40020070 .word 0x40020070
  14557. 80063d4: 40020088 .word 0x40020088
  14558. 80063d8: 400200a0 .word 0x400200a0
  14559. 80063dc: 400200b8 .word 0x400200b8
  14560. 80063e0: 40020410 .word 0x40020410
  14561. 80063e4: 40020428 .word 0x40020428
  14562. 80063e8: 40020440 .word 0x40020440
  14563. 80063ec: 40020458 .word 0x40020458
  14564. 80063f0: 40020470 .word 0x40020470
  14565. 80063f4: 40020488 .word 0x40020488
  14566. 80063f8: 400204a0 .word 0x400204a0
  14567. 80063fc: 400204b8 .word 0x400204b8
  14568. }
  14569. else /* BDMA channel */
  14570. {
  14571. regs_bdma = (BDMA_Base_Registers *)hdma->StreamBaseAddress;
  14572. 8006400: 687b ldr r3, [r7, #4]
  14573. 8006402: 6d9b ldr r3, [r3, #88] @ 0x58
  14574. 8006404: 60fb str r3, [r7, #12]
  14575. regs_bdma->IFCR = ((BDMA_IFCR_CGIF0) << (hdma->StreamIndex & 0x1FU));
  14576. 8006406: 687b ldr r3, [r7, #4]
  14577. 8006408: 6ddb ldr r3, [r3, #92] @ 0x5c
  14578. 800640a: f003 031f and.w r3, r3, #31
  14579. 800640e: 2201 movs r2, #1
  14580. 8006410: 409a lsls r2, r3
  14581. 8006412: 68fb ldr r3, [r7, #12]
  14582. 8006414: 605a str r2, [r3, #4]
  14583. }
  14584. if(IS_DMA_DMAMUX_ALL_INSTANCE(hdma->Instance) != 0U) /* No DMAMUX available for BDMA1 */
  14585. 8006416: 687b ldr r3, [r7, #4]
  14586. 8006418: 681b ldr r3, [r3, #0]
  14587. 800641a: 4a4f ldr r2, [pc, #316] @ (8006558 <HAL_DMA_Abort+0x5dc>)
  14588. 800641c: 4293 cmp r3, r2
  14589. 800641e: d072 beq.n 8006506 <HAL_DMA_Abort+0x58a>
  14590. 8006420: 687b ldr r3, [r7, #4]
  14591. 8006422: 681b ldr r3, [r3, #0]
  14592. 8006424: 4a4d ldr r2, [pc, #308] @ (800655c <HAL_DMA_Abort+0x5e0>)
  14593. 8006426: 4293 cmp r3, r2
  14594. 8006428: d06d beq.n 8006506 <HAL_DMA_Abort+0x58a>
  14595. 800642a: 687b ldr r3, [r7, #4]
  14596. 800642c: 681b ldr r3, [r3, #0]
  14597. 800642e: 4a4c ldr r2, [pc, #304] @ (8006560 <HAL_DMA_Abort+0x5e4>)
  14598. 8006430: 4293 cmp r3, r2
  14599. 8006432: d068 beq.n 8006506 <HAL_DMA_Abort+0x58a>
  14600. 8006434: 687b ldr r3, [r7, #4]
  14601. 8006436: 681b ldr r3, [r3, #0]
  14602. 8006438: 4a4a ldr r2, [pc, #296] @ (8006564 <HAL_DMA_Abort+0x5e8>)
  14603. 800643a: 4293 cmp r3, r2
  14604. 800643c: d063 beq.n 8006506 <HAL_DMA_Abort+0x58a>
  14605. 800643e: 687b ldr r3, [r7, #4]
  14606. 8006440: 681b ldr r3, [r3, #0]
  14607. 8006442: 4a49 ldr r2, [pc, #292] @ (8006568 <HAL_DMA_Abort+0x5ec>)
  14608. 8006444: 4293 cmp r3, r2
  14609. 8006446: d05e beq.n 8006506 <HAL_DMA_Abort+0x58a>
  14610. 8006448: 687b ldr r3, [r7, #4]
  14611. 800644a: 681b ldr r3, [r3, #0]
  14612. 800644c: 4a47 ldr r2, [pc, #284] @ (800656c <HAL_DMA_Abort+0x5f0>)
  14613. 800644e: 4293 cmp r3, r2
  14614. 8006450: d059 beq.n 8006506 <HAL_DMA_Abort+0x58a>
  14615. 8006452: 687b ldr r3, [r7, #4]
  14616. 8006454: 681b ldr r3, [r3, #0]
  14617. 8006456: 4a46 ldr r2, [pc, #280] @ (8006570 <HAL_DMA_Abort+0x5f4>)
  14618. 8006458: 4293 cmp r3, r2
  14619. 800645a: d054 beq.n 8006506 <HAL_DMA_Abort+0x58a>
  14620. 800645c: 687b ldr r3, [r7, #4]
  14621. 800645e: 681b ldr r3, [r3, #0]
  14622. 8006460: 4a44 ldr r2, [pc, #272] @ (8006574 <HAL_DMA_Abort+0x5f8>)
  14623. 8006462: 4293 cmp r3, r2
  14624. 8006464: d04f beq.n 8006506 <HAL_DMA_Abort+0x58a>
  14625. 8006466: 687b ldr r3, [r7, #4]
  14626. 8006468: 681b ldr r3, [r3, #0]
  14627. 800646a: 4a43 ldr r2, [pc, #268] @ (8006578 <HAL_DMA_Abort+0x5fc>)
  14628. 800646c: 4293 cmp r3, r2
  14629. 800646e: d04a beq.n 8006506 <HAL_DMA_Abort+0x58a>
  14630. 8006470: 687b ldr r3, [r7, #4]
  14631. 8006472: 681b ldr r3, [r3, #0]
  14632. 8006474: 4a41 ldr r2, [pc, #260] @ (800657c <HAL_DMA_Abort+0x600>)
  14633. 8006476: 4293 cmp r3, r2
  14634. 8006478: d045 beq.n 8006506 <HAL_DMA_Abort+0x58a>
  14635. 800647a: 687b ldr r3, [r7, #4]
  14636. 800647c: 681b ldr r3, [r3, #0]
  14637. 800647e: 4a40 ldr r2, [pc, #256] @ (8006580 <HAL_DMA_Abort+0x604>)
  14638. 8006480: 4293 cmp r3, r2
  14639. 8006482: d040 beq.n 8006506 <HAL_DMA_Abort+0x58a>
  14640. 8006484: 687b ldr r3, [r7, #4]
  14641. 8006486: 681b ldr r3, [r3, #0]
  14642. 8006488: 4a3e ldr r2, [pc, #248] @ (8006584 <HAL_DMA_Abort+0x608>)
  14643. 800648a: 4293 cmp r3, r2
  14644. 800648c: d03b beq.n 8006506 <HAL_DMA_Abort+0x58a>
  14645. 800648e: 687b ldr r3, [r7, #4]
  14646. 8006490: 681b ldr r3, [r3, #0]
  14647. 8006492: 4a3d ldr r2, [pc, #244] @ (8006588 <HAL_DMA_Abort+0x60c>)
  14648. 8006494: 4293 cmp r3, r2
  14649. 8006496: d036 beq.n 8006506 <HAL_DMA_Abort+0x58a>
  14650. 8006498: 687b ldr r3, [r7, #4]
  14651. 800649a: 681b ldr r3, [r3, #0]
  14652. 800649c: 4a3b ldr r2, [pc, #236] @ (800658c <HAL_DMA_Abort+0x610>)
  14653. 800649e: 4293 cmp r3, r2
  14654. 80064a0: d031 beq.n 8006506 <HAL_DMA_Abort+0x58a>
  14655. 80064a2: 687b ldr r3, [r7, #4]
  14656. 80064a4: 681b ldr r3, [r3, #0]
  14657. 80064a6: 4a3a ldr r2, [pc, #232] @ (8006590 <HAL_DMA_Abort+0x614>)
  14658. 80064a8: 4293 cmp r3, r2
  14659. 80064aa: d02c beq.n 8006506 <HAL_DMA_Abort+0x58a>
  14660. 80064ac: 687b ldr r3, [r7, #4]
  14661. 80064ae: 681b ldr r3, [r3, #0]
  14662. 80064b0: 4a38 ldr r2, [pc, #224] @ (8006594 <HAL_DMA_Abort+0x618>)
  14663. 80064b2: 4293 cmp r3, r2
  14664. 80064b4: d027 beq.n 8006506 <HAL_DMA_Abort+0x58a>
  14665. 80064b6: 687b ldr r3, [r7, #4]
  14666. 80064b8: 681b ldr r3, [r3, #0]
  14667. 80064ba: 4a37 ldr r2, [pc, #220] @ (8006598 <HAL_DMA_Abort+0x61c>)
  14668. 80064bc: 4293 cmp r3, r2
  14669. 80064be: d022 beq.n 8006506 <HAL_DMA_Abort+0x58a>
  14670. 80064c0: 687b ldr r3, [r7, #4]
  14671. 80064c2: 681b ldr r3, [r3, #0]
  14672. 80064c4: 4a35 ldr r2, [pc, #212] @ (800659c <HAL_DMA_Abort+0x620>)
  14673. 80064c6: 4293 cmp r3, r2
  14674. 80064c8: d01d beq.n 8006506 <HAL_DMA_Abort+0x58a>
  14675. 80064ca: 687b ldr r3, [r7, #4]
  14676. 80064cc: 681b ldr r3, [r3, #0]
  14677. 80064ce: 4a34 ldr r2, [pc, #208] @ (80065a0 <HAL_DMA_Abort+0x624>)
  14678. 80064d0: 4293 cmp r3, r2
  14679. 80064d2: d018 beq.n 8006506 <HAL_DMA_Abort+0x58a>
  14680. 80064d4: 687b ldr r3, [r7, #4]
  14681. 80064d6: 681b ldr r3, [r3, #0]
  14682. 80064d8: 4a32 ldr r2, [pc, #200] @ (80065a4 <HAL_DMA_Abort+0x628>)
  14683. 80064da: 4293 cmp r3, r2
  14684. 80064dc: d013 beq.n 8006506 <HAL_DMA_Abort+0x58a>
  14685. 80064de: 687b ldr r3, [r7, #4]
  14686. 80064e0: 681b ldr r3, [r3, #0]
  14687. 80064e2: 4a31 ldr r2, [pc, #196] @ (80065a8 <HAL_DMA_Abort+0x62c>)
  14688. 80064e4: 4293 cmp r3, r2
  14689. 80064e6: d00e beq.n 8006506 <HAL_DMA_Abort+0x58a>
  14690. 80064e8: 687b ldr r3, [r7, #4]
  14691. 80064ea: 681b ldr r3, [r3, #0]
  14692. 80064ec: 4a2f ldr r2, [pc, #188] @ (80065ac <HAL_DMA_Abort+0x630>)
  14693. 80064ee: 4293 cmp r3, r2
  14694. 80064f0: d009 beq.n 8006506 <HAL_DMA_Abort+0x58a>
  14695. 80064f2: 687b ldr r3, [r7, #4]
  14696. 80064f4: 681b ldr r3, [r3, #0]
  14697. 80064f6: 4a2e ldr r2, [pc, #184] @ (80065b0 <HAL_DMA_Abort+0x634>)
  14698. 80064f8: 4293 cmp r3, r2
  14699. 80064fa: d004 beq.n 8006506 <HAL_DMA_Abort+0x58a>
  14700. 80064fc: 687b ldr r3, [r7, #4]
  14701. 80064fe: 681b ldr r3, [r3, #0]
  14702. 8006500: 4a2c ldr r2, [pc, #176] @ (80065b4 <HAL_DMA_Abort+0x638>)
  14703. 8006502: 4293 cmp r3, r2
  14704. 8006504: d101 bne.n 800650a <HAL_DMA_Abort+0x58e>
  14705. 8006506: 2301 movs r3, #1
  14706. 8006508: e000 b.n 800650c <HAL_DMA_Abort+0x590>
  14707. 800650a: 2300 movs r3, #0
  14708. 800650c: 2b00 cmp r3, #0
  14709. 800650e: d015 beq.n 800653c <HAL_DMA_Abort+0x5c0>
  14710. {
  14711. /* Clear the DMAMUX synchro overrun flag */
  14712. hdma->DMAmuxChannelStatus->CFR = hdma->DMAmuxChannelStatusMask;
  14713. 8006510: 687b ldr r3, [r7, #4]
  14714. 8006512: 6e5b ldr r3, [r3, #100] @ 0x64
  14715. 8006514: 687a ldr r2, [r7, #4]
  14716. 8006516: 6e92 ldr r2, [r2, #104] @ 0x68
  14717. 8006518: 605a str r2, [r3, #4]
  14718. if(hdma->DMAmuxRequestGen != 0U)
  14719. 800651a: 687b ldr r3, [r7, #4]
  14720. 800651c: 6edb ldr r3, [r3, #108] @ 0x6c
  14721. 800651e: 2b00 cmp r3, #0
  14722. 8006520: d00c beq.n 800653c <HAL_DMA_Abort+0x5c0>
  14723. {
  14724. /* if using DMAMUX request generator, disable the DMAMUX request generator overrun IT */
  14725. /* disable the request gen overrun IT */
  14726. hdma->DMAmuxRequestGen->RGCR &= ~DMAMUX_RGxCR_OIE;
  14727. 8006522: 687b ldr r3, [r7, #4]
  14728. 8006524: 6edb ldr r3, [r3, #108] @ 0x6c
  14729. 8006526: 681a ldr r2, [r3, #0]
  14730. 8006528: 687b ldr r3, [r7, #4]
  14731. 800652a: 6edb ldr r3, [r3, #108] @ 0x6c
  14732. 800652c: f422 7280 bic.w r2, r2, #256 @ 0x100
  14733. 8006530: 601a str r2, [r3, #0]
  14734. /* Clear the DMAMUX request generator overrun flag */
  14735. hdma->DMAmuxRequestGenStatus->RGCFR = hdma->DMAmuxRequestGenStatusMask;
  14736. 8006532: 687b ldr r3, [r7, #4]
  14737. 8006534: 6f1b ldr r3, [r3, #112] @ 0x70
  14738. 8006536: 687a ldr r2, [r7, #4]
  14739. 8006538: 6f52 ldr r2, [r2, #116] @ 0x74
  14740. 800653a: 605a str r2, [r3, #4]
  14741. }
  14742. }
  14743. /* Change the DMA state */
  14744. hdma->State = HAL_DMA_STATE_READY;
  14745. 800653c: 687b ldr r3, [r7, #4]
  14746. 800653e: 2201 movs r2, #1
  14747. 8006540: f883 2035 strb.w r2, [r3, #53] @ 0x35
  14748. /* Process Unlocked */
  14749. __HAL_UNLOCK(hdma);
  14750. 8006544: 687b ldr r3, [r7, #4]
  14751. 8006546: 2200 movs r2, #0
  14752. 8006548: f883 2034 strb.w r2, [r3, #52] @ 0x34
  14753. }
  14754. return HAL_OK;
  14755. 800654c: 2300 movs r3, #0
  14756. }
  14757. 800654e: 4618 mov r0, r3
  14758. 8006550: 3718 adds r7, #24
  14759. 8006552: 46bd mov sp, r7
  14760. 8006554: bd80 pop {r7, pc}
  14761. 8006556: bf00 nop
  14762. 8006558: 40020010 .word 0x40020010
  14763. 800655c: 40020028 .word 0x40020028
  14764. 8006560: 40020040 .word 0x40020040
  14765. 8006564: 40020058 .word 0x40020058
  14766. 8006568: 40020070 .word 0x40020070
  14767. 800656c: 40020088 .word 0x40020088
  14768. 8006570: 400200a0 .word 0x400200a0
  14769. 8006574: 400200b8 .word 0x400200b8
  14770. 8006578: 40020410 .word 0x40020410
  14771. 800657c: 40020428 .word 0x40020428
  14772. 8006580: 40020440 .word 0x40020440
  14773. 8006584: 40020458 .word 0x40020458
  14774. 8006588: 40020470 .word 0x40020470
  14775. 800658c: 40020488 .word 0x40020488
  14776. 8006590: 400204a0 .word 0x400204a0
  14777. 8006594: 400204b8 .word 0x400204b8
  14778. 8006598: 58025408 .word 0x58025408
  14779. 800659c: 5802541c .word 0x5802541c
  14780. 80065a0: 58025430 .word 0x58025430
  14781. 80065a4: 58025444 .word 0x58025444
  14782. 80065a8: 58025458 .word 0x58025458
  14783. 80065ac: 5802546c .word 0x5802546c
  14784. 80065b0: 58025480 .word 0x58025480
  14785. 80065b4: 58025494 .word 0x58025494
  14786. 080065b8 <HAL_DMA_Abort_IT>:
  14787. * @param hdma : pointer to a DMA_HandleTypeDef structure that contains
  14788. * the configuration information for the specified DMA Stream.
  14789. * @retval HAL status
  14790. */
  14791. HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma)
  14792. {
  14793. 80065b8: b580 push {r7, lr}
  14794. 80065ba: b084 sub sp, #16
  14795. 80065bc: af00 add r7, sp, #0
  14796. 80065be: 6078 str r0, [r7, #4]
  14797. BDMA_Base_Registers *regs_bdma;
  14798. /* Check the DMA peripheral handle */
  14799. if(hdma == NULL)
  14800. 80065c0: 687b ldr r3, [r7, #4]
  14801. 80065c2: 2b00 cmp r3, #0
  14802. 80065c4: d101 bne.n 80065ca <HAL_DMA_Abort_IT+0x12>
  14803. {
  14804. return HAL_ERROR;
  14805. 80065c6: 2301 movs r3, #1
  14806. 80065c8: e237 b.n 8006a3a <HAL_DMA_Abort_IT+0x482>
  14807. }
  14808. if(hdma->State != HAL_DMA_STATE_BUSY)
  14809. 80065ca: 687b ldr r3, [r7, #4]
  14810. 80065cc: f893 3035 ldrb.w r3, [r3, #53] @ 0x35
  14811. 80065d0: b2db uxtb r3, r3
  14812. 80065d2: 2b02 cmp r3, #2
  14813. 80065d4: d004 beq.n 80065e0 <HAL_DMA_Abort_IT+0x28>
  14814. {
  14815. hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER;
  14816. 80065d6: 687b ldr r3, [r7, #4]
  14817. 80065d8: 2280 movs r2, #128 @ 0x80
  14818. 80065da: 655a str r2, [r3, #84] @ 0x54
  14819. return HAL_ERROR;
  14820. 80065dc: 2301 movs r3, #1
  14821. 80065de: e22c b.n 8006a3a <HAL_DMA_Abort_IT+0x482>
  14822. }
  14823. else
  14824. {
  14825. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  14826. 80065e0: 687b ldr r3, [r7, #4]
  14827. 80065e2: 681b ldr r3, [r3, #0]
  14828. 80065e4: 4a5c ldr r2, [pc, #368] @ (8006758 <HAL_DMA_Abort_IT+0x1a0>)
  14829. 80065e6: 4293 cmp r3, r2
  14830. 80065e8: d04a beq.n 8006680 <HAL_DMA_Abort_IT+0xc8>
  14831. 80065ea: 687b ldr r3, [r7, #4]
  14832. 80065ec: 681b ldr r3, [r3, #0]
  14833. 80065ee: 4a5b ldr r2, [pc, #364] @ (800675c <HAL_DMA_Abort_IT+0x1a4>)
  14834. 80065f0: 4293 cmp r3, r2
  14835. 80065f2: d045 beq.n 8006680 <HAL_DMA_Abort_IT+0xc8>
  14836. 80065f4: 687b ldr r3, [r7, #4]
  14837. 80065f6: 681b ldr r3, [r3, #0]
  14838. 80065f8: 4a59 ldr r2, [pc, #356] @ (8006760 <HAL_DMA_Abort_IT+0x1a8>)
  14839. 80065fa: 4293 cmp r3, r2
  14840. 80065fc: d040 beq.n 8006680 <HAL_DMA_Abort_IT+0xc8>
  14841. 80065fe: 687b ldr r3, [r7, #4]
  14842. 8006600: 681b ldr r3, [r3, #0]
  14843. 8006602: 4a58 ldr r2, [pc, #352] @ (8006764 <HAL_DMA_Abort_IT+0x1ac>)
  14844. 8006604: 4293 cmp r3, r2
  14845. 8006606: d03b beq.n 8006680 <HAL_DMA_Abort_IT+0xc8>
  14846. 8006608: 687b ldr r3, [r7, #4]
  14847. 800660a: 681b ldr r3, [r3, #0]
  14848. 800660c: 4a56 ldr r2, [pc, #344] @ (8006768 <HAL_DMA_Abort_IT+0x1b0>)
  14849. 800660e: 4293 cmp r3, r2
  14850. 8006610: d036 beq.n 8006680 <HAL_DMA_Abort_IT+0xc8>
  14851. 8006612: 687b ldr r3, [r7, #4]
  14852. 8006614: 681b ldr r3, [r3, #0]
  14853. 8006616: 4a55 ldr r2, [pc, #340] @ (800676c <HAL_DMA_Abort_IT+0x1b4>)
  14854. 8006618: 4293 cmp r3, r2
  14855. 800661a: d031 beq.n 8006680 <HAL_DMA_Abort_IT+0xc8>
  14856. 800661c: 687b ldr r3, [r7, #4]
  14857. 800661e: 681b ldr r3, [r3, #0]
  14858. 8006620: 4a53 ldr r2, [pc, #332] @ (8006770 <HAL_DMA_Abort_IT+0x1b8>)
  14859. 8006622: 4293 cmp r3, r2
  14860. 8006624: d02c beq.n 8006680 <HAL_DMA_Abort_IT+0xc8>
  14861. 8006626: 687b ldr r3, [r7, #4]
  14862. 8006628: 681b ldr r3, [r3, #0]
  14863. 800662a: 4a52 ldr r2, [pc, #328] @ (8006774 <HAL_DMA_Abort_IT+0x1bc>)
  14864. 800662c: 4293 cmp r3, r2
  14865. 800662e: d027 beq.n 8006680 <HAL_DMA_Abort_IT+0xc8>
  14866. 8006630: 687b ldr r3, [r7, #4]
  14867. 8006632: 681b ldr r3, [r3, #0]
  14868. 8006634: 4a50 ldr r2, [pc, #320] @ (8006778 <HAL_DMA_Abort_IT+0x1c0>)
  14869. 8006636: 4293 cmp r3, r2
  14870. 8006638: d022 beq.n 8006680 <HAL_DMA_Abort_IT+0xc8>
  14871. 800663a: 687b ldr r3, [r7, #4]
  14872. 800663c: 681b ldr r3, [r3, #0]
  14873. 800663e: 4a4f ldr r2, [pc, #316] @ (800677c <HAL_DMA_Abort_IT+0x1c4>)
  14874. 8006640: 4293 cmp r3, r2
  14875. 8006642: d01d beq.n 8006680 <HAL_DMA_Abort_IT+0xc8>
  14876. 8006644: 687b ldr r3, [r7, #4]
  14877. 8006646: 681b ldr r3, [r3, #0]
  14878. 8006648: 4a4d ldr r2, [pc, #308] @ (8006780 <HAL_DMA_Abort_IT+0x1c8>)
  14879. 800664a: 4293 cmp r3, r2
  14880. 800664c: d018 beq.n 8006680 <HAL_DMA_Abort_IT+0xc8>
  14881. 800664e: 687b ldr r3, [r7, #4]
  14882. 8006650: 681b ldr r3, [r3, #0]
  14883. 8006652: 4a4c ldr r2, [pc, #304] @ (8006784 <HAL_DMA_Abort_IT+0x1cc>)
  14884. 8006654: 4293 cmp r3, r2
  14885. 8006656: d013 beq.n 8006680 <HAL_DMA_Abort_IT+0xc8>
  14886. 8006658: 687b ldr r3, [r7, #4]
  14887. 800665a: 681b ldr r3, [r3, #0]
  14888. 800665c: 4a4a ldr r2, [pc, #296] @ (8006788 <HAL_DMA_Abort_IT+0x1d0>)
  14889. 800665e: 4293 cmp r3, r2
  14890. 8006660: d00e beq.n 8006680 <HAL_DMA_Abort_IT+0xc8>
  14891. 8006662: 687b ldr r3, [r7, #4]
  14892. 8006664: 681b ldr r3, [r3, #0]
  14893. 8006666: 4a49 ldr r2, [pc, #292] @ (800678c <HAL_DMA_Abort_IT+0x1d4>)
  14894. 8006668: 4293 cmp r3, r2
  14895. 800666a: d009 beq.n 8006680 <HAL_DMA_Abort_IT+0xc8>
  14896. 800666c: 687b ldr r3, [r7, #4]
  14897. 800666e: 681b ldr r3, [r3, #0]
  14898. 8006670: 4a47 ldr r2, [pc, #284] @ (8006790 <HAL_DMA_Abort_IT+0x1d8>)
  14899. 8006672: 4293 cmp r3, r2
  14900. 8006674: d004 beq.n 8006680 <HAL_DMA_Abort_IT+0xc8>
  14901. 8006676: 687b ldr r3, [r7, #4]
  14902. 8006678: 681b ldr r3, [r3, #0]
  14903. 800667a: 4a46 ldr r2, [pc, #280] @ (8006794 <HAL_DMA_Abort_IT+0x1dc>)
  14904. 800667c: 4293 cmp r3, r2
  14905. 800667e: d101 bne.n 8006684 <HAL_DMA_Abort_IT+0xcc>
  14906. 8006680: 2301 movs r3, #1
  14907. 8006682: e000 b.n 8006686 <HAL_DMA_Abort_IT+0xce>
  14908. 8006684: 2300 movs r3, #0
  14909. 8006686: 2b00 cmp r3, #0
  14910. 8006688: f000 8086 beq.w 8006798 <HAL_DMA_Abort_IT+0x1e0>
  14911. {
  14912. /* Set Abort State */
  14913. hdma->State = HAL_DMA_STATE_ABORT;
  14914. 800668c: 687b ldr r3, [r7, #4]
  14915. 800668e: 2204 movs r2, #4
  14916. 8006690: f883 2035 strb.w r2, [r3, #53] @ 0x35
  14917. /* Disable the stream */
  14918. __HAL_DMA_DISABLE(hdma);
  14919. 8006694: 687b ldr r3, [r7, #4]
  14920. 8006696: 681b ldr r3, [r3, #0]
  14921. 8006698: 4a2f ldr r2, [pc, #188] @ (8006758 <HAL_DMA_Abort_IT+0x1a0>)
  14922. 800669a: 4293 cmp r3, r2
  14923. 800669c: d04a beq.n 8006734 <HAL_DMA_Abort_IT+0x17c>
  14924. 800669e: 687b ldr r3, [r7, #4]
  14925. 80066a0: 681b ldr r3, [r3, #0]
  14926. 80066a2: 4a2e ldr r2, [pc, #184] @ (800675c <HAL_DMA_Abort_IT+0x1a4>)
  14927. 80066a4: 4293 cmp r3, r2
  14928. 80066a6: d045 beq.n 8006734 <HAL_DMA_Abort_IT+0x17c>
  14929. 80066a8: 687b ldr r3, [r7, #4]
  14930. 80066aa: 681b ldr r3, [r3, #0]
  14931. 80066ac: 4a2c ldr r2, [pc, #176] @ (8006760 <HAL_DMA_Abort_IT+0x1a8>)
  14932. 80066ae: 4293 cmp r3, r2
  14933. 80066b0: d040 beq.n 8006734 <HAL_DMA_Abort_IT+0x17c>
  14934. 80066b2: 687b ldr r3, [r7, #4]
  14935. 80066b4: 681b ldr r3, [r3, #0]
  14936. 80066b6: 4a2b ldr r2, [pc, #172] @ (8006764 <HAL_DMA_Abort_IT+0x1ac>)
  14937. 80066b8: 4293 cmp r3, r2
  14938. 80066ba: d03b beq.n 8006734 <HAL_DMA_Abort_IT+0x17c>
  14939. 80066bc: 687b ldr r3, [r7, #4]
  14940. 80066be: 681b ldr r3, [r3, #0]
  14941. 80066c0: 4a29 ldr r2, [pc, #164] @ (8006768 <HAL_DMA_Abort_IT+0x1b0>)
  14942. 80066c2: 4293 cmp r3, r2
  14943. 80066c4: d036 beq.n 8006734 <HAL_DMA_Abort_IT+0x17c>
  14944. 80066c6: 687b ldr r3, [r7, #4]
  14945. 80066c8: 681b ldr r3, [r3, #0]
  14946. 80066ca: 4a28 ldr r2, [pc, #160] @ (800676c <HAL_DMA_Abort_IT+0x1b4>)
  14947. 80066cc: 4293 cmp r3, r2
  14948. 80066ce: d031 beq.n 8006734 <HAL_DMA_Abort_IT+0x17c>
  14949. 80066d0: 687b ldr r3, [r7, #4]
  14950. 80066d2: 681b ldr r3, [r3, #0]
  14951. 80066d4: 4a26 ldr r2, [pc, #152] @ (8006770 <HAL_DMA_Abort_IT+0x1b8>)
  14952. 80066d6: 4293 cmp r3, r2
  14953. 80066d8: d02c beq.n 8006734 <HAL_DMA_Abort_IT+0x17c>
  14954. 80066da: 687b ldr r3, [r7, #4]
  14955. 80066dc: 681b ldr r3, [r3, #0]
  14956. 80066de: 4a25 ldr r2, [pc, #148] @ (8006774 <HAL_DMA_Abort_IT+0x1bc>)
  14957. 80066e0: 4293 cmp r3, r2
  14958. 80066e2: d027 beq.n 8006734 <HAL_DMA_Abort_IT+0x17c>
  14959. 80066e4: 687b ldr r3, [r7, #4]
  14960. 80066e6: 681b ldr r3, [r3, #0]
  14961. 80066e8: 4a23 ldr r2, [pc, #140] @ (8006778 <HAL_DMA_Abort_IT+0x1c0>)
  14962. 80066ea: 4293 cmp r3, r2
  14963. 80066ec: d022 beq.n 8006734 <HAL_DMA_Abort_IT+0x17c>
  14964. 80066ee: 687b ldr r3, [r7, #4]
  14965. 80066f0: 681b ldr r3, [r3, #0]
  14966. 80066f2: 4a22 ldr r2, [pc, #136] @ (800677c <HAL_DMA_Abort_IT+0x1c4>)
  14967. 80066f4: 4293 cmp r3, r2
  14968. 80066f6: d01d beq.n 8006734 <HAL_DMA_Abort_IT+0x17c>
  14969. 80066f8: 687b ldr r3, [r7, #4]
  14970. 80066fa: 681b ldr r3, [r3, #0]
  14971. 80066fc: 4a20 ldr r2, [pc, #128] @ (8006780 <HAL_DMA_Abort_IT+0x1c8>)
  14972. 80066fe: 4293 cmp r3, r2
  14973. 8006700: d018 beq.n 8006734 <HAL_DMA_Abort_IT+0x17c>
  14974. 8006702: 687b ldr r3, [r7, #4]
  14975. 8006704: 681b ldr r3, [r3, #0]
  14976. 8006706: 4a1f ldr r2, [pc, #124] @ (8006784 <HAL_DMA_Abort_IT+0x1cc>)
  14977. 8006708: 4293 cmp r3, r2
  14978. 800670a: d013 beq.n 8006734 <HAL_DMA_Abort_IT+0x17c>
  14979. 800670c: 687b ldr r3, [r7, #4]
  14980. 800670e: 681b ldr r3, [r3, #0]
  14981. 8006710: 4a1d ldr r2, [pc, #116] @ (8006788 <HAL_DMA_Abort_IT+0x1d0>)
  14982. 8006712: 4293 cmp r3, r2
  14983. 8006714: d00e beq.n 8006734 <HAL_DMA_Abort_IT+0x17c>
  14984. 8006716: 687b ldr r3, [r7, #4]
  14985. 8006718: 681b ldr r3, [r3, #0]
  14986. 800671a: 4a1c ldr r2, [pc, #112] @ (800678c <HAL_DMA_Abort_IT+0x1d4>)
  14987. 800671c: 4293 cmp r3, r2
  14988. 800671e: d009 beq.n 8006734 <HAL_DMA_Abort_IT+0x17c>
  14989. 8006720: 687b ldr r3, [r7, #4]
  14990. 8006722: 681b ldr r3, [r3, #0]
  14991. 8006724: 4a1a ldr r2, [pc, #104] @ (8006790 <HAL_DMA_Abort_IT+0x1d8>)
  14992. 8006726: 4293 cmp r3, r2
  14993. 8006728: d004 beq.n 8006734 <HAL_DMA_Abort_IT+0x17c>
  14994. 800672a: 687b ldr r3, [r7, #4]
  14995. 800672c: 681b ldr r3, [r3, #0]
  14996. 800672e: 4a19 ldr r2, [pc, #100] @ (8006794 <HAL_DMA_Abort_IT+0x1dc>)
  14997. 8006730: 4293 cmp r3, r2
  14998. 8006732: d108 bne.n 8006746 <HAL_DMA_Abort_IT+0x18e>
  14999. 8006734: 687b ldr r3, [r7, #4]
  15000. 8006736: 681b ldr r3, [r3, #0]
  15001. 8006738: 681a ldr r2, [r3, #0]
  15002. 800673a: 687b ldr r3, [r7, #4]
  15003. 800673c: 681b ldr r3, [r3, #0]
  15004. 800673e: f022 0201 bic.w r2, r2, #1
  15005. 8006742: 601a str r2, [r3, #0]
  15006. 8006744: e178 b.n 8006a38 <HAL_DMA_Abort_IT+0x480>
  15007. 8006746: 687b ldr r3, [r7, #4]
  15008. 8006748: 681b ldr r3, [r3, #0]
  15009. 800674a: 681a ldr r2, [r3, #0]
  15010. 800674c: 687b ldr r3, [r7, #4]
  15011. 800674e: 681b ldr r3, [r3, #0]
  15012. 8006750: f022 0201 bic.w r2, r2, #1
  15013. 8006754: 601a str r2, [r3, #0]
  15014. 8006756: e16f b.n 8006a38 <HAL_DMA_Abort_IT+0x480>
  15015. 8006758: 40020010 .word 0x40020010
  15016. 800675c: 40020028 .word 0x40020028
  15017. 8006760: 40020040 .word 0x40020040
  15018. 8006764: 40020058 .word 0x40020058
  15019. 8006768: 40020070 .word 0x40020070
  15020. 800676c: 40020088 .word 0x40020088
  15021. 8006770: 400200a0 .word 0x400200a0
  15022. 8006774: 400200b8 .word 0x400200b8
  15023. 8006778: 40020410 .word 0x40020410
  15024. 800677c: 40020428 .word 0x40020428
  15025. 8006780: 40020440 .word 0x40020440
  15026. 8006784: 40020458 .word 0x40020458
  15027. 8006788: 40020470 .word 0x40020470
  15028. 800678c: 40020488 .word 0x40020488
  15029. 8006790: 400204a0 .word 0x400204a0
  15030. 8006794: 400204b8 .word 0x400204b8
  15031. }
  15032. else /* BDMA channel */
  15033. {
  15034. /* Disable DMA All Interrupts */
  15035. ((BDMA_Channel_TypeDef *)hdma->Instance)->CCR &= ~(BDMA_CCR_TCIE | BDMA_CCR_HTIE | BDMA_CCR_TEIE);
  15036. 8006798: 687b ldr r3, [r7, #4]
  15037. 800679a: 681b ldr r3, [r3, #0]
  15038. 800679c: 681a ldr r2, [r3, #0]
  15039. 800679e: 687b ldr r3, [r7, #4]
  15040. 80067a0: 681b ldr r3, [r3, #0]
  15041. 80067a2: f022 020e bic.w r2, r2, #14
  15042. 80067a6: 601a str r2, [r3, #0]
  15043. /* Disable the channel */
  15044. __HAL_DMA_DISABLE(hdma);
  15045. 80067a8: 687b ldr r3, [r7, #4]
  15046. 80067aa: 681b ldr r3, [r3, #0]
  15047. 80067ac: 4a6c ldr r2, [pc, #432] @ (8006960 <HAL_DMA_Abort_IT+0x3a8>)
  15048. 80067ae: 4293 cmp r3, r2
  15049. 80067b0: d04a beq.n 8006848 <HAL_DMA_Abort_IT+0x290>
  15050. 80067b2: 687b ldr r3, [r7, #4]
  15051. 80067b4: 681b ldr r3, [r3, #0]
  15052. 80067b6: 4a6b ldr r2, [pc, #428] @ (8006964 <HAL_DMA_Abort_IT+0x3ac>)
  15053. 80067b8: 4293 cmp r3, r2
  15054. 80067ba: d045 beq.n 8006848 <HAL_DMA_Abort_IT+0x290>
  15055. 80067bc: 687b ldr r3, [r7, #4]
  15056. 80067be: 681b ldr r3, [r3, #0]
  15057. 80067c0: 4a69 ldr r2, [pc, #420] @ (8006968 <HAL_DMA_Abort_IT+0x3b0>)
  15058. 80067c2: 4293 cmp r3, r2
  15059. 80067c4: d040 beq.n 8006848 <HAL_DMA_Abort_IT+0x290>
  15060. 80067c6: 687b ldr r3, [r7, #4]
  15061. 80067c8: 681b ldr r3, [r3, #0]
  15062. 80067ca: 4a68 ldr r2, [pc, #416] @ (800696c <HAL_DMA_Abort_IT+0x3b4>)
  15063. 80067cc: 4293 cmp r3, r2
  15064. 80067ce: d03b beq.n 8006848 <HAL_DMA_Abort_IT+0x290>
  15065. 80067d0: 687b ldr r3, [r7, #4]
  15066. 80067d2: 681b ldr r3, [r3, #0]
  15067. 80067d4: 4a66 ldr r2, [pc, #408] @ (8006970 <HAL_DMA_Abort_IT+0x3b8>)
  15068. 80067d6: 4293 cmp r3, r2
  15069. 80067d8: d036 beq.n 8006848 <HAL_DMA_Abort_IT+0x290>
  15070. 80067da: 687b ldr r3, [r7, #4]
  15071. 80067dc: 681b ldr r3, [r3, #0]
  15072. 80067de: 4a65 ldr r2, [pc, #404] @ (8006974 <HAL_DMA_Abort_IT+0x3bc>)
  15073. 80067e0: 4293 cmp r3, r2
  15074. 80067e2: d031 beq.n 8006848 <HAL_DMA_Abort_IT+0x290>
  15075. 80067e4: 687b ldr r3, [r7, #4]
  15076. 80067e6: 681b ldr r3, [r3, #0]
  15077. 80067e8: 4a63 ldr r2, [pc, #396] @ (8006978 <HAL_DMA_Abort_IT+0x3c0>)
  15078. 80067ea: 4293 cmp r3, r2
  15079. 80067ec: d02c beq.n 8006848 <HAL_DMA_Abort_IT+0x290>
  15080. 80067ee: 687b ldr r3, [r7, #4]
  15081. 80067f0: 681b ldr r3, [r3, #0]
  15082. 80067f2: 4a62 ldr r2, [pc, #392] @ (800697c <HAL_DMA_Abort_IT+0x3c4>)
  15083. 80067f4: 4293 cmp r3, r2
  15084. 80067f6: d027 beq.n 8006848 <HAL_DMA_Abort_IT+0x290>
  15085. 80067f8: 687b ldr r3, [r7, #4]
  15086. 80067fa: 681b ldr r3, [r3, #0]
  15087. 80067fc: 4a60 ldr r2, [pc, #384] @ (8006980 <HAL_DMA_Abort_IT+0x3c8>)
  15088. 80067fe: 4293 cmp r3, r2
  15089. 8006800: d022 beq.n 8006848 <HAL_DMA_Abort_IT+0x290>
  15090. 8006802: 687b ldr r3, [r7, #4]
  15091. 8006804: 681b ldr r3, [r3, #0]
  15092. 8006806: 4a5f ldr r2, [pc, #380] @ (8006984 <HAL_DMA_Abort_IT+0x3cc>)
  15093. 8006808: 4293 cmp r3, r2
  15094. 800680a: d01d beq.n 8006848 <HAL_DMA_Abort_IT+0x290>
  15095. 800680c: 687b ldr r3, [r7, #4]
  15096. 800680e: 681b ldr r3, [r3, #0]
  15097. 8006810: 4a5d ldr r2, [pc, #372] @ (8006988 <HAL_DMA_Abort_IT+0x3d0>)
  15098. 8006812: 4293 cmp r3, r2
  15099. 8006814: d018 beq.n 8006848 <HAL_DMA_Abort_IT+0x290>
  15100. 8006816: 687b ldr r3, [r7, #4]
  15101. 8006818: 681b ldr r3, [r3, #0]
  15102. 800681a: 4a5c ldr r2, [pc, #368] @ (800698c <HAL_DMA_Abort_IT+0x3d4>)
  15103. 800681c: 4293 cmp r3, r2
  15104. 800681e: d013 beq.n 8006848 <HAL_DMA_Abort_IT+0x290>
  15105. 8006820: 687b ldr r3, [r7, #4]
  15106. 8006822: 681b ldr r3, [r3, #0]
  15107. 8006824: 4a5a ldr r2, [pc, #360] @ (8006990 <HAL_DMA_Abort_IT+0x3d8>)
  15108. 8006826: 4293 cmp r3, r2
  15109. 8006828: d00e beq.n 8006848 <HAL_DMA_Abort_IT+0x290>
  15110. 800682a: 687b ldr r3, [r7, #4]
  15111. 800682c: 681b ldr r3, [r3, #0]
  15112. 800682e: 4a59 ldr r2, [pc, #356] @ (8006994 <HAL_DMA_Abort_IT+0x3dc>)
  15113. 8006830: 4293 cmp r3, r2
  15114. 8006832: d009 beq.n 8006848 <HAL_DMA_Abort_IT+0x290>
  15115. 8006834: 687b ldr r3, [r7, #4]
  15116. 8006836: 681b ldr r3, [r3, #0]
  15117. 8006838: 4a57 ldr r2, [pc, #348] @ (8006998 <HAL_DMA_Abort_IT+0x3e0>)
  15118. 800683a: 4293 cmp r3, r2
  15119. 800683c: d004 beq.n 8006848 <HAL_DMA_Abort_IT+0x290>
  15120. 800683e: 687b ldr r3, [r7, #4]
  15121. 8006840: 681b ldr r3, [r3, #0]
  15122. 8006842: 4a56 ldr r2, [pc, #344] @ (800699c <HAL_DMA_Abort_IT+0x3e4>)
  15123. 8006844: 4293 cmp r3, r2
  15124. 8006846: d108 bne.n 800685a <HAL_DMA_Abort_IT+0x2a2>
  15125. 8006848: 687b ldr r3, [r7, #4]
  15126. 800684a: 681b ldr r3, [r3, #0]
  15127. 800684c: 681a ldr r2, [r3, #0]
  15128. 800684e: 687b ldr r3, [r7, #4]
  15129. 8006850: 681b ldr r3, [r3, #0]
  15130. 8006852: f022 0201 bic.w r2, r2, #1
  15131. 8006856: 601a str r2, [r3, #0]
  15132. 8006858: e007 b.n 800686a <HAL_DMA_Abort_IT+0x2b2>
  15133. 800685a: 687b ldr r3, [r7, #4]
  15134. 800685c: 681b ldr r3, [r3, #0]
  15135. 800685e: 681a ldr r2, [r3, #0]
  15136. 8006860: 687b ldr r3, [r7, #4]
  15137. 8006862: 681b ldr r3, [r3, #0]
  15138. 8006864: f022 0201 bic.w r2, r2, #1
  15139. 8006868: 601a str r2, [r3, #0]
  15140. if(IS_DMA_DMAMUX_ALL_INSTANCE(hdma->Instance) != 0U) /* No DMAMUX available for BDMA1 */
  15141. 800686a: 687b ldr r3, [r7, #4]
  15142. 800686c: 681b ldr r3, [r3, #0]
  15143. 800686e: 4a3c ldr r2, [pc, #240] @ (8006960 <HAL_DMA_Abort_IT+0x3a8>)
  15144. 8006870: 4293 cmp r3, r2
  15145. 8006872: d072 beq.n 800695a <HAL_DMA_Abort_IT+0x3a2>
  15146. 8006874: 687b ldr r3, [r7, #4]
  15147. 8006876: 681b ldr r3, [r3, #0]
  15148. 8006878: 4a3a ldr r2, [pc, #232] @ (8006964 <HAL_DMA_Abort_IT+0x3ac>)
  15149. 800687a: 4293 cmp r3, r2
  15150. 800687c: d06d beq.n 800695a <HAL_DMA_Abort_IT+0x3a2>
  15151. 800687e: 687b ldr r3, [r7, #4]
  15152. 8006880: 681b ldr r3, [r3, #0]
  15153. 8006882: 4a39 ldr r2, [pc, #228] @ (8006968 <HAL_DMA_Abort_IT+0x3b0>)
  15154. 8006884: 4293 cmp r3, r2
  15155. 8006886: d068 beq.n 800695a <HAL_DMA_Abort_IT+0x3a2>
  15156. 8006888: 687b ldr r3, [r7, #4]
  15157. 800688a: 681b ldr r3, [r3, #0]
  15158. 800688c: 4a37 ldr r2, [pc, #220] @ (800696c <HAL_DMA_Abort_IT+0x3b4>)
  15159. 800688e: 4293 cmp r3, r2
  15160. 8006890: d063 beq.n 800695a <HAL_DMA_Abort_IT+0x3a2>
  15161. 8006892: 687b ldr r3, [r7, #4]
  15162. 8006894: 681b ldr r3, [r3, #0]
  15163. 8006896: 4a36 ldr r2, [pc, #216] @ (8006970 <HAL_DMA_Abort_IT+0x3b8>)
  15164. 8006898: 4293 cmp r3, r2
  15165. 800689a: d05e beq.n 800695a <HAL_DMA_Abort_IT+0x3a2>
  15166. 800689c: 687b ldr r3, [r7, #4]
  15167. 800689e: 681b ldr r3, [r3, #0]
  15168. 80068a0: 4a34 ldr r2, [pc, #208] @ (8006974 <HAL_DMA_Abort_IT+0x3bc>)
  15169. 80068a2: 4293 cmp r3, r2
  15170. 80068a4: d059 beq.n 800695a <HAL_DMA_Abort_IT+0x3a2>
  15171. 80068a6: 687b ldr r3, [r7, #4]
  15172. 80068a8: 681b ldr r3, [r3, #0]
  15173. 80068aa: 4a33 ldr r2, [pc, #204] @ (8006978 <HAL_DMA_Abort_IT+0x3c0>)
  15174. 80068ac: 4293 cmp r3, r2
  15175. 80068ae: d054 beq.n 800695a <HAL_DMA_Abort_IT+0x3a2>
  15176. 80068b0: 687b ldr r3, [r7, #4]
  15177. 80068b2: 681b ldr r3, [r3, #0]
  15178. 80068b4: 4a31 ldr r2, [pc, #196] @ (800697c <HAL_DMA_Abort_IT+0x3c4>)
  15179. 80068b6: 4293 cmp r3, r2
  15180. 80068b8: d04f beq.n 800695a <HAL_DMA_Abort_IT+0x3a2>
  15181. 80068ba: 687b ldr r3, [r7, #4]
  15182. 80068bc: 681b ldr r3, [r3, #0]
  15183. 80068be: 4a30 ldr r2, [pc, #192] @ (8006980 <HAL_DMA_Abort_IT+0x3c8>)
  15184. 80068c0: 4293 cmp r3, r2
  15185. 80068c2: d04a beq.n 800695a <HAL_DMA_Abort_IT+0x3a2>
  15186. 80068c4: 687b ldr r3, [r7, #4]
  15187. 80068c6: 681b ldr r3, [r3, #0]
  15188. 80068c8: 4a2e ldr r2, [pc, #184] @ (8006984 <HAL_DMA_Abort_IT+0x3cc>)
  15189. 80068ca: 4293 cmp r3, r2
  15190. 80068cc: d045 beq.n 800695a <HAL_DMA_Abort_IT+0x3a2>
  15191. 80068ce: 687b ldr r3, [r7, #4]
  15192. 80068d0: 681b ldr r3, [r3, #0]
  15193. 80068d2: 4a2d ldr r2, [pc, #180] @ (8006988 <HAL_DMA_Abort_IT+0x3d0>)
  15194. 80068d4: 4293 cmp r3, r2
  15195. 80068d6: d040 beq.n 800695a <HAL_DMA_Abort_IT+0x3a2>
  15196. 80068d8: 687b ldr r3, [r7, #4]
  15197. 80068da: 681b ldr r3, [r3, #0]
  15198. 80068dc: 4a2b ldr r2, [pc, #172] @ (800698c <HAL_DMA_Abort_IT+0x3d4>)
  15199. 80068de: 4293 cmp r3, r2
  15200. 80068e0: d03b beq.n 800695a <HAL_DMA_Abort_IT+0x3a2>
  15201. 80068e2: 687b ldr r3, [r7, #4]
  15202. 80068e4: 681b ldr r3, [r3, #0]
  15203. 80068e6: 4a2a ldr r2, [pc, #168] @ (8006990 <HAL_DMA_Abort_IT+0x3d8>)
  15204. 80068e8: 4293 cmp r3, r2
  15205. 80068ea: d036 beq.n 800695a <HAL_DMA_Abort_IT+0x3a2>
  15206. 80068ec: 687b ldr r3, [r7, #4]
  15207. 80068ee: 681b ldr r3, [r3, #0]
  15208. 80068f0: 4a28 ldr r2, [pc, #160] @ (8006994 <HAL_DMA_Abort_IT+0x3dc>)
  15209. 80068f2: 4293 cmp r3, r2
  15210. 80068f4: d031 beq.n 800695a <HAL_DMA_Abort_IT+0x3a2>
  15211. 80068f6: 687b ldr r3, [r7, #4]
  15212. 80068f8: 681b ldr r3, [r3, #0]
  15213. 80068fa: 4a27 ldr r2, [pc, #156] @ (8006998 <HAL_DMA_Abort_IT+0x3e0>)
  15214. 80068fc: 4293 cmp r3, r2
  15215. 80068fe: d02c beq.n 800695a <HAL_DMA_Abort_IT+0x3a2>
  15216. 8006900: 687b ldr r3, [r7, #4]
  15217. 8006902: 681b ldr r3, [r3, #0]
  15218. 8006904: 4a25 ldr r2, [pc, #148] @ (800699c <HAL_DMA_Abort_IT+0x3e4>)
  15219. 8006906: 4293 cmp r3, r2
  15220. 8006908: d027 beq.n 800695a <HAL_DMA_Abort_IT+0x3a2>
  15221. 800690a: 687b ldr r3, [r7, #4]
  15222. 800690c: 681b ldr r3, [r3, #0]
  15223. 800690e: 4a24 ldr r2, [pc, #144] @ (80069a0 <HAL_DMA_Abort_IT+0x3e8>)
  15224. 8006910: 4293 cmp r3, r2
  15225. 8006912: d022 beq.n 800695a <HAL_DMA_Abort_IT+0x3a2>
  15226. 8006914: 687b ldr r3, [r7, #4]
  15227. 8006916: 681b ldr r3, [r3, #0]
  15228. 8006918: 4a22 ldr r2, [pc, #136] @ (80069a4 <HAL_DMA_Abort_IT+0x3ec>)
  15229. 800691a: 4293 cmp r3, r2
  15230. 800691c: d01d beq.n 800695a <HAL_DMA_Abort_IT+0x3a2>
  15231. 800691e: 687b ldr r3, [r7, #4]
  15232. 8006920: 681b ldr r3, [r3, #0]
  15233. 8006922: 4a21 ldr r2, [pc, #132] @ (80069a8 <HAL_DMA_Abort_IT+0x3f0>)
  15234. 8006924: 4293 cmp r3, r2
  15235. 8006926: d018 beq.n 800695a <HAL_DMA_Abort_IT+0x3a2>
  15236. 8006928: 687b ldr r3, [r7, #4]
  15237. 800692a: 681b ldr r3, [r3, #0]
  15238. 800692c: 4a1f ldr r2, [pc, #124] @ (80069ac <HAL_DMA_Abort_IT+0x3f4>)
  15239. 800692e: 4293 cmp r3, r2
  15240. 8006930: d013 beq.n 800695a <HAL_DMA_Abort_IT+0x3a2>
  15241. 8006932: 687b ldr r3, [r7, #4]
  15242. 8006934: 681b ldr r3, [r3, #0]
  15243. 8006936: 4a1e ldr r2, [pc, #120] @ (80069b0 <HAL_DMA_Abort_IT+0x3f8>)
  15244. 8006938: 4293 cmp r3, r2
  15245. 800693a: d00e beq.n 800695a <HAL_DMA_Abort_IT+0x3a2>
  15246. 800693c: 687b ldr r3, [r7, #4]
  15247. 800693e: 681b ldr r3, [r3, #0]
  15248. 8006940: 4a1c ldr r2, [pc, #112] @ (80069b4 <HAL_DMA_Abort_IT+0x3fc>)
  15249. 8006942: 4293 cmp r3, r2
  15250. 8006944: d009 beq.n 800695a <HAL_DMA_Abort_IT+0x3a2>
  15251. 8006946: 687b ldr r3, [r7, #4]
  15252. 8006948: 681b ldr r3, [r3, #0]
  15253. 800694a: 4a1b ldr r2, [pc, #108] @ (80069b8 <HAL_DMA_Abort_IT+0x400>)
  15254. 800694c: 4293 cmp r3, r2
  15255. 800694e: d004 beq.n 800695a <HAL_DMA_Abort_IT+0x3a2>
  15256. 8006950: 687b ldr r3, [r7, #4]
  15257. 8006952: 681b ldr r3, [r3, #0]
  15258. 8006954: 4a19 ldr r2, [pc, #100] @ (80069bc <HAL_DMA_Abort_IT+0x404>)
  15259. 8006956: 4293 cmp r3, r2
  15260. 8006958: d132 bne.n 80069c0 <HAL_DMA_Abort_IT+0x408>
  15261. 800695a: 2301 movs r3, #1
  15262. 800695c: e031 b.n 80069c2 <HAL_DMA_Abort_IT+0x40a>
  15263. 800695e: bf00 nop
  15264. 8006960: 40020010 .word 0x40020010
  15265. 8006964: 40020028 .word 0x40020028
  15266. 8006968: 40020040 .word 0x40020040
  15267. 800696c: 40020058 .word 0x40020058
  15268. 8006970: 40020070 .word 0x40020070
  15269. 8006974: 40020088 .word 0x40020088
  15270. 8006978: 400200a0 .word 0x400200a0
  15271. 800697c: 400200b8 .word 0x400200b8
  15272. 8006980: 40020410 .word 0x40020410
  15273. 8006984: 40020428 .word 0x40020428
  15274. 8006988: 40020440 .word 0x40020440
  15275. 800698c: 40020458 .word 0x40020458
  15276. 8006990: 40020470 .word 0x40020470
  15277. 8006994: 40020488 .word 0x40020488
  15278. 8006998: 400204a0 .word 0x400204a0
  15279. 800699c: 400204b8 .word 0x400204b8
  15280. 80069a0: 58025408 .word 0x58025408
  15281. 80069a4: 5802541c .word 0x5802541c
  15282. 80069a8: 58025430 .word 0x58025430
  15283. 80069ac: 58025444 .word 0x58025444
  15284. 80069b0: 58025458 .word 0x58025458
  15285. 80069b4: 5802546c .word 0x5802546c
  15286. 80069b8: 58025480 .word 0x58025480
  15287. 80069bc: 58025494 .word 0x58025494
  15288. 80069c0: 2300 movs r3, #0
  15289. 80069c2: 2b00 cmp r3, #0
  15290. 80069c4: d028 beq.n 8006a18 <HAL_DMA_Abort_IT+0x460>
  15291. {
  15292. /* disable the DMAMUX sync overrun IT */
  15293. hdma->DMAmuxChannel->CCR &= ~DMAMUX_CxCR_SOIE;
  15294. 80069c6: 687b ldr r3, [r7, #4]
  15295. 80069c8: 6e1b ldr r3, [r3, #96] @ 0x60
  15296. 80069ca: 681a ldr r2, [r3, #0]
  15297. 80069cc: 687b ldr r3, [r7, #4]
  15298. 80069ce: 6e1b ldr r3, [r3, #96] @ 0x60
  15299. 80069d0: f422 7280 bic.w r2, r2, #256 @ 0x100
  15300. 80069d4: 601a str r2, [r3, #0]
  15301. /* Clear all flags */
  15302. regs_bdma = (BDMA_Base_Registers *)hdma->StreamBaseAddress;
  15303. 80069d6: 687b ldr r3, [r7, #4]
  15304. 80069d8: 6d9b ldr r3, [r3, #88] @ 0x58
  15305. 80069da: 60fb str r3, [r7, #12]
  15306. regs_bdma->IFCR = ((BDMA_IFCR_CGIF0) << (hdma->StreamIndex & 0x1FU));
  15307. 80069dc: 687b ldr r3, [r7, #4]
  15308. 80069de: 6ddb ldr r3, [r3, #92] @ 0x5c
  15309. 80069e0: f003 031f and.w r3, r3, #31
  15310. 80069e4: 2201 movs r2, #1
  15311. 80069e6: 409a lsls r2, r3
  15312. 80069e8: 68fb ldr r3, [r7, #12]
  15313. 80069ea: 605a str r2, [r3, #4]
  15314. /* Clear the DMAMUX synchro overrun flag */
  15315. hdma->DMAmuxChannelStatus->CFR = hdma->DMAmuxChannelStatusMask;
  15316. 80069ec: 687b ldr r3, [r7, #4]
  15317. 80069ee: 6e5b ldr r3, [r3, #100] @ 0x64
  15318. 80069f0: 687a ldr r2, [r7, #4]
  15319. 80069f2: 6e92 ldr r2, [r2, #104] @ 0x68
  15320. 80069f4: 605a str r2, [r3, #4]
  15321. if(hdma->DMAmuxRequestGen != 0U)
  15322. 80069f6: 687b ldr r3, [r7, #4]
  15323. 80069f8: 6edb ldr r3, [r3, #108] @ 0x6c
  15324. 80069fa: 2b00 cmp r3, #0
  15325. 80069fc: d00c beq.n 8006a18 <HAL_DMA_Abort_IT+0x460>
  15326. {
  15327. /* if using DMAMUX request generator, disable the DMAMUX request generator overrun IT*/
  15328. /* disable the request gen overrun IT */
  15329. hdma->DMAmuxRequestGen->RGCR &= ~DMAMUX_RGxCR_OIE;
  15330. 80069fe: 687b ldr r3, [r7, #4]
  15331. 8006a00: 6edb ldr r3, [r3, #108] @ 0x6c
  15332. 8006a02: 681a ldr r2, [r3, #0]
  15333. 8006a04: 687b ldr r3, [r7, #4]
  15334. 8006a06: 6edb ldr r3, [r3, #108] @ 0x6c
  15335. 8006a08: f422 7280 bic.w r2, r2, #256 @ 0x100
  15336. 8006a0c: 601a str r2, [r3, #0]
  15337. /* Clear the DMAMUX request generator overrun flag */
  15338. hdma->DMAmuxRequestGenStatus->RGCFR = hdma->DMAmuxRequestGenStatusMask;
  15339. 8006a0e: 687b ldr r3, [r7, #4]
  15340. 8006a10: 6f1b ldr r3, [r3, #112] @ 0x70
  15341. 8006a12: 687a ldr r2, [r7, #4]
  15342. 8006a14: 6f52 ldr r2, [r2, #116] @ 0x74
  15343. 8006a16: 605a str r2, [r3, #4]
  15344. }
  15345. }
  15346. /* Change the DMA state */
  15347. hdma->State = HAL_DMA_STATE_READY;
  15348. 8006a18: 687b ldr r3, [r7, #4]
  15349. 8006a1a: 2201 movs r2, #1
  15350. 8006a1c: f883 2035 strb.w r2, [r3, #53] @ 0x35
  15351. /* Process Unlocked */
  15352. __HAL_UNLOCK(hdma);
  15353. 8006a20: 687b ldr r3, [r7, #4]
  15354. 8006a22: 2200 movs r2, #0
  15355. 8006a24: f883 2034 strb.w r2, [r3, #52] @ 0x34
  15356. /* Call User Abort callback */
  15357. if(hdma->XferAbortCallback != NULL)
  15358. 8006a28: 687b ldr r3, [r7, #4]
  15359. 8006a2a: 6d1b ldr r3, [r3, #80] @ 0x50
  15360. 8006a2c: 2b00 cmp r3, #0
  15361. 8006a2e: d003 beq.n 8006a38 <HAL_DMA_Abort_IT+0x480>
  15362. {
  15363. hdma->XferAbortCallback(hdma);
  15364. 8006a30: 687b ldr r3, [r7, #4]
  15365. 8006a32: 6d1b ldr r3, [r3, #80] @ 0x50
  15366. 8006a34: 6878 ldr r0, [r7, #4]
  15367. 8006a36: 4798 blx r3
  15368. }
  15369. }
  15370. }
  15371. return HAL_OK;
  15372. 8006a38: 2300 movs r3, #0
  15373. }
  15374. 8006a3a: 4618 mov r0, r3
  15375. 8006a3c: 3710 adds r7, #16
  15376. 8006a3e: 46bd mov sp, r7
  15377. 8006a40: bd80 pop {r7, pc}
  15378. 8006a42: bf00 nop
  15379. 08006a44 <HAL_DMA_IRQHandler>:
  15380. * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
  15381. * the configuration information for the specified DMA Stream.
  15382. * @retval None
  15383. */
  15384. void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma)
  15385. {
  15386. 8006a44: b580 push {r7, lr}
  15387. 8006a46: b08a sub sp, #40 @ 0x28
  15388. 8006a48: af00 add r7, sp, #0
  15389. 8006a4a: 6078 str r0, [r7, #4]
  15390. uint32_t tmpisr_dma, tmpisr_bdma;
  15391. uint32_t ccr_reg;
  15392. __IO uint32_t count = 0U;
  15393. 8006a4c: 2300 movs r3, #0
  15394. 8006a4e: 60fb str r3, [r7, #12]
  15395. uint32_t timeout = SystemCoreClock / 9600U;
  15396. 8006a50: 4b67 ldr r3, [pc, #412] @ (8006bf0 <HAL_DMA_IRQHandler+0x1ac>)
  15397. 8006a52: 681b ldr r3, [r3, #0]
  15398. 8006a54: 4a67 ldr r2, [pc, #412] @ (8006bf4 <HAL_DMA_IRQHandler+0x1b0>)
  15399. 8006a56: fba2 2303 umull r2, r3, r2, r3
  15400. 8006a5a: 0a9b lsrs r3, r3, #10
  15401. 8006a5c: 627b str r3, [r7, #36] @ 0x24
  15402. /* calculate DMA base and stream number */
  15403. DMA_Base_Registers *regs_dma = (DMA_Base_Registers *)hdma->StreamBaseAddress;
  15404. 8006a5e: 687b ldr r3, [r7, #4]
  15405. 8006a60: 6d9b ldr r3, [r3, #88] @ 0x58
  15406. 8006a62: 623b str r3, [r7, #32]
  15407. BDMA_Base_Registers *regs_bdma = (BDMA_Base_Registers *)hdma->StreamBaseAddress;
  15408. 8006a64: 687b ldr r3, [r7, #4]
  15409. 8006a66: 6d9b ldr r3, [r3, #88] @ 0x58
  15410. 8006a68: 61fb str r3, [r7, #28]
  15411. tmpisr_dma = regs_dma->ISR;
  15412. 8006a6a: 6a3b ldr r3, [r7, #32]
  15413. 8006a6c: 681b ldr r3, [r3, #0]
  15414. 8006a6e: 61bb str r3, [r7, #24]
  15415. tmpisr_bdma = regs_bdma->ISR;
  15416. 8006a70: 69fb ldr r3, [r7, #28]
  15417. 8006a72: 681b ldr r3, [r3, #0]
  15418. 8006a74: 617b str r3, [r7, #20]
  15419. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  15420. 8006a76: 687b ldr r3, [r7, #4]
  15421. 8006a78: 681b ldr r3, [r3, #0]
  15422. 8006a7a: 4a5f ldr r2, [pc, #380] @ (8006bf8 <HAL_DMA_IRQHandler+0x1b4>)
  15423. 8006a7c: 4293 cmp r3, r2
  15424. 8006a7e: d04a beq.n 8006b16 <HAL_DMA_IRQHandler+0xd2>
  15425. 8006a80: 687b ldr r3, [r7, #4]
  15426. 8006a82: 681b ldr r3, [r3, #0]
  15427. 8006a84: 4a5d ldr r2, [pc, #372] @ (8006bfc <HAL_DMA_IRQHandler+0x1b8>)
  15428. 8006a86: 4293 cmp r3, r2
  15429. 8006a88: d045 beq.n 8006b16 <HAL_DMA_IRQHandler+0xd2>
  15430. 8006a8a: 687b ldr r3, [r7, #4]
  15431. 8006a8c: 681b ldr r3, [r3, #0]
  15432. 8006a8e: 4a5c ldr r2, [pc, #368] @ (8006c00 <HAL_DMA_IRQHandler+0x1bc>)
  15433. 8006a90: 4293 cmp r3, r2
  15434. 8006a92: d040 beq.n 8006b16 <HAL_DMA_IRQHandler+0xd2>
  15435. 8006a94: 687b ldr r3, [r7, #4]
  15436. 8006a96: 681b ldr r3, [r3, #0]
  15437. 8006a98: 4a5a ldr r2, [pc, #360] @ (8006c04 <HAL_DMA_IRQHandler+0x1c0>)
  15438. 8006a9a: 4293 cmp r3, r2
  15439. 8006a9c: d03b beq.n 8006b16 <HAL_DMA_IRQHandler+0xd2>
  15440. 8006a9e: 687b ldr r3, [r7, #4]
  15441. 8006aa0: 681b ldr r3, [r3, #0]
  15442. 8006aa2: 4a59 ldr r2, [pc, #356] @ (8006c08 <HAL_DMA_IRQHandler+0x1c4>)
  15443. 8006aa4: 4293 cmp r3, r2
  15444. 8006aa6: d036 beq.n 8006b16 <HAL_DMA_IRQHandler+0xd2>
  15445. 8006aa8: 687b ldr r3, [r7, #4]
  15446. 8006aaa: 681b ldr r3, [r3, #0]
  15447. 8006aac: 4a57 ldr r2, [pc, #348] @ (8006c0c <HAL_DMA_IRQHandler+0x1c8>)
  15448. 8006aae: 4293 cmp r3, r2
  15449. 8006ab0: d031 beq.n 8006b16 <HAL_DMA_IRQHandler+0xd2>
  15450. 8006ab2: 687b ldr r3, [r7, #4]
  15451. 8006ab4: 681b ldr r3, [r3, #0]
  15452. 8006ab6: 4a56 ldr r2, [pc, #344] @ (8006c10 <HAL_DMA_IRQHandler+0x1cc>)
  15453. 8006ab8: 4293 cmp r3, r2
  15454. 8006aba: d02c beq.n 8006b16 <HAL_DMA_IRQHandler+0xd2>
  15455. 8006abc: 687b ldr r3, [r7, #4]
  15456. 8006abe: 681b ldr r3, [r3, #0]
  15457. 8006ac0: 4a54 ldr r2, [pc, #336] @ (8006c14 <HAL_DMA_IRQHandler+0x1d0>)
  15458. 8006ac2: 4293 cmp r3, r2
  15459. 8006ac4: d027 beq.n 8006b16 <HAL_DMA_IRQHandler+0xd2>
  15460. 8006ac6: 687b ldr r3, [r7, #4]
  15461. 8006ac8: 681b ldr r3, [r3, #0]
  15462. 8006aca: 4a53 ldr r2, [pc, #332] @ (8006c18 <HAL_DMA_IRQHandler+0x1d4>)
  15463. 8006acc: 4293 cmp r3, r2
  15464. 8006ace: d022 beq.n 8006b16 <HAL_DMA_IRQHandler+0xd2>
  15465. 8006ad0: 687b ldr r3, [r7, #4]
  15466. 8006ad2: 681b ldr r3, [r3, #0]
  15467. 8006ad4: 4a51 ldr r2, [pc, #324] @ (8006c1c <HAL_DMA_IRQHandler+0x1d8>)
  15468. 8006ad6: 4293 cmp r3, r2
  15469. 8006ad8: d01d beq.n 8006b16 <HAL_DMA_IRQHandler+0xd2>
  15470. 8006ada: 687b ldr r3, [r7, #4]
  15471. 8006adc: 681b ldr r3, [r3, #0]
  15472. 8006ade: 4a50 ldr r2, [pc, #320] @ (8006c20 <HAL_DMA_IRQHandler+0x1dc>)
  15473. 8006ae0: 4293 cmp r3, r2
  15474. 8006ae2: d018 beq.n 8006b16 <HAL_DMA_IRQHandler+0xd2>
  15475. 8006ae4: 687b ldr r3, [r7, #4]
  15476. 8006ae6: 681b ldr r3, [r3, #0]
  15477. 8006ae8: 4a4e ldr r2, [pc, #312] @ (8006c24 <HAL_DMA_IRQHandler+0x1e0>)
  15478. 8006aea: 4293 cmp r3, r2
  15479. 8006aec: d013 beq.n 8006b16 <HAL_DMA_IRQHandler+0xd2>
  15480. 8006aee: 687b ldr r3, [r7, #4]
  15481. 8006af0: 681b ldr r3, [r3, #0]
  15482. 8006af2: 4a4d ldr r2, [pc, #308] @ (8006c28 <HAL_DMA_IRQHandler+0x1e4>)
  15483. 8006af4: 4293 cmp r3, r2
  15484. 8006af6: d00e beq.n 8006b16 <HAL_DMA_IRQHandler+0xd2>
  15485. 8006af8: 687b ldr r3, [r7, #4]
  15486. 8006afa: 681b ldr r3, [r3, #0]
  15487. 8006afc: 4a4b ldr r2, [pc, #300] @ (8006c2c <HAL_DMA_IRQHandler+0x1e8>)
  15488. 8006afe: 4293 cmp r3, r2
  15489. 8006b00: d009 beq.n 8006b16 <HAL_DMA_IRQHandler+0xd2>
  15490. 8006b02: 687b ldr r3, [r7, #4]
  15491. 8006b04: 681b ldr r3, [r3, #0]
  15492. 8006b06: 4a4a ldr r2, [pc, #296] @ (8006c30 <HAL_DMA_IRQHandler+0x1ec>)
  15493. 8006b08: 4293 cmp r3, r2
  15494. 8006b0a: d004 beq.n 8006b16 <HAL_DMA_IRQHandler+0xd2>
  15495. 8006b0c: 687b ldr r3, [r7, #4]
  15496. 8006b0e: 681b ldr r3, [r3, #0]
  15497. 8006b10: 4a48 ldr r2, [pc, #288] @ (8006c34 <HAL_DMA_IRQHandler+0x1f0>)
  15498. 8006b12: 4293 cmp r3, r2
  15499. 8006b14: d101 bne.n 8006b1a <HAL_DMA_IRQHandler+0xd6>
  15500. 8006b16: 2301 movs r3, #1
  15501. 8006b18: e000 b.n 8006b1c <HAL_DMA_IRQHandler+0xd8>
  15502. 8006b1a: 2300 movs r3, #0
  15503. 8006b1c: 2b00 cmp r3, #0
  15504. 8006b1e: f000 842b beq.w 8007378 <HAL_DMA_IRQHandler+0x934>
  15505. {
  15506. /* Transfer Error Interrupt management ***************************************/
  15507. if ((tmpisr_dma & (DMA_FLAG_TEIF0_4 << (hdma->StreamIndex & 0x1FU))) != 0U)
  15508. 8006b22: 687b ldr r3, [r7, #4]
  15509. 8006b24: 6ddb ldr r3, [r3, #92] @ 0x5c
  15510. 8006b26: f003 031f and.w r3, r3, #31
  15511. 8006b2a: 2208 movs r2, #8
  15512. 8006b2c: 409a lsls r2, r3
  15513. 8006b2e: 69bb ldr r3, [r7, #24]
  15514. 8006b30: 4013 ands r3, r2
  15515. 8006b32: 2b00 cmp r3, #0
  15516. 8006b34: f000 80a2 beq.w 8006c7c <HAL_DMA_IRQHandler+0x238>
  15517. {
  15518. if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_TE) != 0U)
  15519. 8006b38: 687b ldr r3, [r7, #4]
  15520. 8006b3a: 681b ldr r3, [r3, #0]
  15521. 8006b3c: 4a2e ldr r2, [pc, #184] @ (8006bf8 <HAL_DMA_IRQHandler+0x1b4>)
  15522. 8006b3e: 4293 cmp r3, r2
  15523. 8006b40: d04a beq.n 8006bd8 <HAL_DMA_IRQHandler+0x194>
  15524. 8006b42: 687b ldr r3, [r7, #4]
  15525. 8006b44: 681b ldr r3, [r3, #0]
  15526. 8006b46: 4a2d ldr r2, [pc, #180] @ (8006bfc <HAL_DMA_IRQHandler+0x1b8>)
  15527. 8006b48: 4293 cmp r3, r2
  15528. 8006b4a: d045 beq.n 8006bd8 <HAL_DMA_IRQHandler+0x194>
  15529. 8006b4c: 687b ldr r3, [r7, #4]
  15530. 8006b4e: 681b ldr r3, [r3, #0]
  15531. 8006b50: 4a2b ldr r2, [pc, #172] @ (8006c00 <HAL_DMA_IRQHandler+0x1bc>)
  15532. 8006b52: 4293 cmp r3, r2
  15533. 8006b54: d040 beq.n 8006bd8 <HAL_DMA_IRQHandler+0x194>
  15534. 8006b56: 687b ldr r3, [r7, #4]
  15535. 8006b58: 681b ldr r3, [r3, #0]
  15536. 8006b5a: 4a2a ldr r2, [pc, #168] @ (8006c04 <HAL_DMA_IRQHandler+0x1c0>)
  15537. 8006b5c: 4293 cmp r3, r2
  15538. 8006b5e: d03b beq.n 8006bd8 <HAL_DMA_IRQHandler+0x194>
  15539. 8006b60: 687b ldr r3, [r7, #4]
  15540. 8006b62: 681b ldr r3, [r3, #0]
  15541. 8006b64: 4a28 ldr r2, [pc, #160] @ (8006c08 <HAL_DMA_IRQHandler+0x1c4>)
  15542. 8006b66: 4293 cmp r3, r2
  15543. 8006b68: d036 beq.n 8006bd8 <HAL_DMA_IRQHandler+0x194>
  15544. 8006b6a: 687b ldr r3, [r7, #4]
  15545. 8006b6c: 681b ldr r3, [r3, #0]
  15546. 8006b6e: 4a27 ldr r2, [pc, #156] @ (8006c0c <HAL_DMA_IRQHandler+0x1c8>)
  15547. 8006b70: 4293 cmp r3, r2
  15548. 8006b72: d031 beq.n 8006bd8 <HAL_DMA_IRQHandler+0x194>
  15549. 8006b74: 687b ldr r3, [r7, #4]
  15550. 8006b76: 681b ldr r3, [r3, #0]
  15551. 8006b78: 4a25 ldr r2, [pc, #148] @ (8006c10 <HAL_DMA_IRQHandler+0x1cc>)
  15552. 8006b7a: 4293 cmp r3, r2
  15553. 8006b7c: d02c beq.n 8006bd8 <HAL_DMA_IRQHandler+0x194>
  15554. 8006b7e: 687b ldr r3, [r7, #4]
  15555. 8006b80: 681b ldr r3, [r3, #0]
  15556. 8006b82: 4a24 ldr r2, [pc, #144] @ (8006c14 <HAL_DMA_IRQHandler+0x1d0>)
  15557. 8006b84: 4293 cmp r3, r2
  15558. 8006b86: d027 beq.n 8006bd8 <HAL_DMA_IRQHandler+0x194>
  15559. 8006b88: 687b ldr r3, [r7, #4]
  15560. 8006b8a: 681b ldr r3, [r3, #0]
  15561. 8006b8c: 4a22 ldr r2, [pc, #136] @ (8006c18 <HAL_DMA_IRQHandler+0x1d4>)
  15562. 8006b8e: 4293 cmp r3, r2
  15563. 8006b90: d022 beq.n 8006bd8 <HAL_DMA_IRQHandler+0x194>
  15564. 8006b92: 687b ldr r3, [r7, #4]
  15565. 8006b94: 681b ldr r3, [r3, #0]
  15566. 8006b96: 4a21 ldr r2, [pc, #132] @ (8006c1c <HAL_DMA_IRQHandler+0x1d8>)
  15567. 8006b98: 4293 cmp r3, r2
  15568. 8006b9a: d01d beq.n 8006bd8 <HAL_DMA_IRQHandler+0x194>
  15569. 8006b9c: 687b ldr r3, [r7, #4]
  15570. 8006b9e: 681b ldr r3, [r3, #0]
  15571. 8006ba0: 4a1f ldr r2, [pc, #124] @ (8006c20 <HAL_DMA_IRQHandler+0x1dc>)
  15572. 8006ba2: 4293 cmp r3, r2
  15573. 8006ba4: d018 beq.n 8006bd8 <HAL_DMA_IRQHandler+0x194>
  15574. 8006ba6: 687b ldr r3, [r7, #4]
  15575. 8006ba8: 681b ldr r3, [r3, #0]
  15576. 8006baa: 4a1e ldr r2, [pc, #120] @ (8006c24 <HAL_DMA_IRQHandler+0x1e0>)
  15577. 8006bac: 4293 cmp r3, r2
  15578. 8006bae: d013 beq.n 8006bd8 <HAL_DMA_IRQHandler+0x194>
  15579. 8006bb0: 687b ldr r3, [r7, #4]
  15580. 8006bb2: 681b ldr r3, [r3, #0]
  15581. 8006bb4: 4a1c ldr r2, [pc, #112] @ (8006c28 <HAL_DMA_IRQHandler+0x1e4>)
  15582. 8006bb6: 4293 cmp r3, r2
  15583. 8006bb8: d00e beq.n 8006bd8 <HAL_DMA_IRQHandler+0x194>
  15584. 8006bba: 687b ldr r3, [r7, #4]
  15585. 8006bbc: 681b ldr r3, [r3, #0]
  15586. 8006bbe: 4a1b ldr r2, [pc, #108] @ (8006c2c <HAL_DMA_IRQHandler+0x1e8>)
  15587. 8006bc0: 4293 cmp r3, r2
  15588. 8006bc2: d009 beq.n 8006bd8 <HAL_DMA_IRQHandler+0x194>
  15589. 8006bc4: 687b ldr r3, [r7, #4]
  15590. 8006bc6: 681b ldr r3, [r3, #0]
  15591. 8006bc8: 4a19 ldr r2, [pc, #100] @ (8006c30 <HAL_DMA_IRQHandler+0x1ec>)
  15592. 8006bca: 4293 cmp r3, r2
  15593. 8006bcc: d004 beq.n 8006bd8 <HAL_DMA_IRQHandler+0x194>
  15594. 8006bce: 687b ldr r3, [r7, #4]
  15595. 8006bd0: 681b ldr r3, [r3, #0]
  15596. 8006bd2: 4a18 ldr r2, [pc, #96] @ (8006c34 <HAL_DMA_IRQHandler+0x1f0>)
  15597. 8006bd4: 4293 cmp r3, r2
  15598. 8006bd6: d12f bne.n 8006c38 <HAL_DMA_IRQHandler+0x1f4>
  15599. 8006bd8: 687b ldr r3, [r7, #4]
  15600. 8006bda: 681b ldr r3, [r3, #0]
  15601. 8006bdc: 681b ldr r3, [r3, #0]
  15602. 8006bde: f003 0304 and.w r3, r3, #4
  15603. 8006be2: 2b00 cmp r3, #0
  15604. 8006be4: bf14 ite ne
  15605. 8006be6: 2301 movne r3, #1
  15606. 8006be8: 2300 moveq r3, #0
  15607. 8006bea: b2db uxtb r3, r3
  15608. 8006bec: e02e b.n 8006c4c <HAL_DMA_IRQHandler+0x208>
  15609. 8006bee: bf00 nop
  15610. 8006bf0: 24000034 .word 0x24000034
  15611. 8006bf4: 1b4e81b5 .word 0x1b4e81b5
  15612. 8006bf8: 40020010 .word 0x40020010
  15613. 8006bfc: 40020028 .word 0x40020028
  15614. 8006c00: 40020040 .word 0x40020040
  15615. 8006c04: 40020058 .word 0x40020058
  15616. 8006c08: 40020070 .word 0x40020070
  15617. 8006c0c: 40020088 .word 0x40020088
  15618. 8006c10: 400200a0 .word 0x400200a0
  15619. 8006c14: 400200b8 .word 0x400200b8
  15620. 8006c18: 40020410 .word 0x40020410
  15621. 8006c1c: 40020428 .word 0x40020428
  15622. 8006c20: 40020440 .word 0x40020440
  15623. 8006c24: 40020458 .word 0x40020458
  15624. 8006c28: 40020470 .word 0x40020470
  15625. 8006c2c: 40020488 .word 0x40020488
  15626. 8006c30: 400204a0 .word 0x400204a0
  15627. 8006c34: 400204b8 .word 0x400204b8
  15628. 8006c38: 687b ldr r3, [r7, #4]
  15629. 8006c3a: 681b ldr r3, [r3, #0]
  15630. 8006c3c: 681b ldr r3, [r3, #0]
  15631. 8006c3e: f003 0308 and.w r3, r3, #8
  15632. 8006c42: 2b00 cmp r3, #0
  15633. 8006c44: bf14 ite ne
  15634. 8006c46: 2301 movne r3, #1
  15635. 8006c48: 2300 moveq r3, #0
  15636. 8006c4a: b2db uxtb r3, r3
  15637. 8006c4c: 2b00 cmp r3, #0
  15638. 8006c4e: d015 beq.n 8006c7c <HAL_DMA_IRQHandler+0x238>
  15639. {
  15640. /* Disable the transfer error interrupt */
  15641. ((DMA_Stream_TypeDef *)hdma->Instance)->CR &= ~(DMA_IT_TE);
  15642. 8006c50: 687b ldr r3, [r7, #4]
  15643. 8006c52: 681b ldr r3, [r3, #0]
  15644. 8006c54: 681a ldr r2, [r3, #0]
  15645. 8006c56: 687b ldr r3, [r7, #4]
  15646. 8006c58: 681b ldr r3, [r3, #0]
  15647. 8006c5a: f022 0204 bic.w r2, r2, #4
  15648. 8006c5e: 601a str r2, [r3, #0]
  15649. /* Clear the transfer error flag */
  15650. regs_dma->IFCR = DMA_FLAG_TEIF0_4 << (hdma->StreamIndex & 0x1FU);
  15651. 8006c60: 687b ldr r3, [r7, #4]
  15652. 8006c62: 6ddb ldr r3, [r3, #92] @ 0x5c
  15653. 8006c64: f003 031f and.w r3, r3, #31
  15654. 8006c68: 2208 movs r2, #8
  15655. 8006c6a: 409a lsls r2, r3
  15656. 8006c6c: 6a3b ldr r3, [r7, #32]
  15657. 8006c6e: 609a str r2, [r3, #8]
  15658. /* Update error code */
  15659. hdma->ErrorCode |= HAL_DMA_ERROR_TE;
  15660. 8006c70: 687b ldr r3, [r7, #4]
  15661. 8006c72: 6d5b ldr r3, [r3, #84] @ 0x54
  15662. 8006c74: f043 0201 orr.w r2, r3, #1
  15663. 8006c78: 687b ldr r3, [r7, #4]
  15664. 8006c7a: 655a str r2, [r3, #84] @ 0x54
  15665. }
  15666. }
  15667. /* FIFO Error Interrupt management ******************************************/
  15668. if ((tmpisr_dma & (DMA_FLAG_FEIF0_4 << (hdma->StreamIndex & 0x1FU))) != 0U)
  15669. 8006c7c: 687b ldr r3, [r7, #4]
  15670. 8006c7e: 6ddb ldr r3, [r3, #92] @ 0x5c
  15671. 8006c80: f003 031f and.w r3, r3, #31
  15672. 8006c84: 69ba ldr r2, [r7, #24]
  15673. 8006c86: fa22 f303 lsr.w r3, r2, r3
  15674. 8006c8a: f003 0301 and.w r3, r3, #1
  15675. 8006c8e: 2b00 cmp r3, #0
  15676. 8006c90: d06e beq.n 8006d70 <HAL_DMA_IRQHandler+0x32c>
  15677. {
  15678. if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_FE) != 0U)
  15679. 8006c92: 687b ldr r3, [r7, #4]
  15680. 8006c94: 681b ldr r3, [r3, #0]
  15681. 8006c96: 4a69 ldr r2, [pc, #420] @ (8006e3c <HAL_DMA_IRQHandler+0x3f8>)
  15682. 8006c98: 4293 cmp r3, r2
  15683. 8006c9a: d04a beq.n 8006d32 <HAL_DMA_IRQHandler+0x2ee>
  15684. 8006c9c: 687b ldr r3, [r7, #4]
  15685. 8006c9e: 681b ldr r3, [r3, #0]
  15686. 8006ca0: 4a67 ldr r2, [pc, #412] @ (8006e40 <HAL_DMA_IRQHandler+0x3fc>)
  15687. 8006ca2: 4293 cmp r3, r2
  15688. 8006ca4: d045 beq.n 8006d32 <HAL_DMA_IRQHandler+0x2ee>
  15689. 8006ca6: 687b ldr r3, [r7, #4]
  15690. 8006ca8: 681b ldr r3, [r3, #0]
  15691. 8006caa: 4a66 ldr r2, [pc, #408] @ (8006e44 <HAL_DMA_IRQHandler+0x400>)
  15692. 8006cac: 4293 cmp r3, r2
  15693. 8006cae: d040 beq.n 8006d32 <HAL_DMA_IRQHandler+0x2ee>
  15694. 8006cb0: 687b ldr r3, [r7, #4]
  15695. 8006cb2: 681b ldr r3, [r3, #0]
  15696. 8006cb4: 4a64 ldr r2, [pc, #400] @ (8006e48 <HAL_DMA_IRQHandler+0x404>)
  15697. 8006cb6: 4293 cmp r3, r2
  15698. 8006cb8: d03b beq.n 8006d32 <HAL_DMA_IRQHandler+0x2ee>
  15699. 8006cba: 687b ldr r3, [r7, #4]
  15700. 8006cbc: 681b ldr r3, [r3, #0]
  15701. 8006cbe: 4a63 ldr r2, [pc, #396] @ (8006e4c <HAL_DMA_IRQHandler+0x408>)
  15702. 8006cc0: 4293 cmp r3, r2
  15703. 8006cc2: d036 beq.n 8006d32 <HAL_DMA_IRQHandler+0x2ee>
  15704. 8006cc4: 687b ldr r3, [r7, #4]
  15705. 8006cc6: 681b ldr r3, [r3, #0]
  15706. 8006cc8: 4a61 ldr r2, [pc, #388] @ (8006e50 <HAL_DMA_IRQHandler+0x40c>)
  15707. 8006cca: 4293 cmp r3, r2
  15708. 8006ccc: d031 beq.n 8006d32 <HAL_DMA_IRQHandler+0x2ee>
  15709. 8006cce: 687b ldr r3, [r7, #4]
  15710. 8006cd0: 681b ldr r3, [r3, #0]
  15711. 8006cd2: 4a60 ldr r2, [pc, #384] @ (8006e54 <HAL_DMA_IRQHandler+0x410>)
  15712. 8006cd4: 4293 cmp r3, r2
  15713. 8006cd6: d02c beq.n 8006d32 <HAL_DMA_IRQHandler+0x2ee>
  15714. 8006cd8: 687b ldr r3, [r7, #4]
  15715. 8006cda: 681b ldr r3, [r3, #0]
  15716. 8006cdc: 4a5e ldr r2, [pc, #376] @ (8006e58 <HAL_DMA_IRQHandler+0x414>)
  15717. 8006cde: 4293 cmp r3, r2
  15718. 8006ce0: d027 beq.n 8006d32 <HAL_DMA_IRQHandler+0x2ee>
  15719. 8006ce2: 687b ldr r3, [r7, #4]
  15720. 8006ce4: 681b ldr r3, [r3, #0]
  15721. 8006ce6: 4a5d ldr r2, [pc, #372] @ (8006e5c <HAL_DMA_IRQHandler+0x418>)
  15722. 8006ce8: 4293 cmp r3, r2
  15723. 8006cea: d022 beq.n 8006d32 <HAL_DMA_IRQHandler+0x2ee>
  15724. 8006cec: 687b ldr r3, [r7, #4]
  15725. 8006cee: 681b ldr r3, [r3, #0]
  15726. 8006cf0: 4a5b ldr r2, [pc, #364] @ (8006e60 <HAL_DMA_IRQHandler+0x41c>)
  15727. 8006cf2: 4293 cmp r3, r2
  15728. 8006cf4: d01d beq.n 8006d32 <HAL_DMA_IRQHandler+0x2ee>
  15729. 8006cf6: 687b ldr r3, [r7, #4]
  15730. 8006cf8: 681b ldr r3, [r3, #0]
  15731. 8006cfa: 4a5a ldr r2, [pc, #360] @ (8006e64 <HAL_DMA_IRQHandler+0x420>)
  15732. 8006cfc: 4293 cmp r3, r2
  15733. 8006cfe: d018 beq.n 8006d32 <HAL_DMA_IRQHandler+0x2ee>
  15734. 8006d00: 687b ldr r3, [r7, #4]
  15735. 8006d02: 681b ldr r3, [r3, #0]
  15736. 8006d04: 4a58 ldr r2, [pc, #352] @ (8006e68 <HAL_DMA_IRQHandler+0x424>)
  15737. 8006d06: 4293 cmp r3, r2
  15738. 8006d08: d013 beq.n 8006d32 <HAL_DMA_IRQHandler+0x2ee>
  15739. 8006d0a: 687b ldr r3, [r7, #4]
  15740. 8006d0c: 681b ldr r3, [r3, #0]
  15741. 8006d0e: 4a57 ldr r2, [pc, #348] @ (8006e6c <HAL_DMA_IRQHandler+0x428>)
  15742. 8006d10: 4293 cmp r3, r2
  15743. 8006d12: d00e beq.n 8006d32 <HAL_DMA_IRQHandler+0x2ee>
  15744. 8006d14: 687b ldr r3, [r7, #4]
  15745. 8006d16: 681b ldr r3, [r3, #0]
  15746. 8006d18: 4a55 ldr r2, [pc, #340] @ (8006e70 <HAL_DMA_IRQHandler+0x42c>)
  15747. 8006d1a: 4293 cmp r3, r2
  15748. 8006d1c: d009 beq.n 8006d32 <HAL_DMA_IRQHandler+0x2ee>
  15749. 8006d1e: 687b ldr r3, [r7, #4]
  15750. 8006d20: 681b ldr r3, [r3, #0]
  15751. 8006d22: 4a54 ldr r2, [pc, #336] @ (8006e74 <HAL_DMA_IRQHandler+0x430>)
  15752. 8006d24: 4293 cmp r3, r2
  15753. 8006d26: d004 beq.n 8006d32 <HAL_DMA_IRQHandler+0x2ee>
  15754. 8006d28: 687b ldr r3, [r7, #4]
  15755. 8006d2a: 681b ldr r3, [r3, #0]
  15756. 8006d2c: 4a52 ldr r2, [pc, #328] @ (8006e78 <HAL_DMA_IRQHandler+0x434>)
  15757. 8006d2e: 4293 cmp r3, r2
  15758. 8006d30: d10a bne.n 8006d48 <HAL_DMA_IRQHandler+0x304>
  15759. 8006d32: 687b ldr r3, [r7, #4]
  15760. 8006d34: 681b ldr r3, [r3, #0]
  15761. 8006d36: 695b ldr r3, [r3, #20]
  15762. 8006d38: f003 0380 and.w r3, r3, #128 @ 0x80
  15763. 8006d3c: 2b00 cmp r3, #0
  15764. 8006d3e: bf14 ite ne
  15765. 8006d40: 2301 movne r3, #1
  15766. 8006d42: 2300 moveq r3, #0
  15767. 8006d44: b2db uxtb r3, r3
  15768. 8006d46: e003 b.n 8006d50 <HAL_DMA_IRQHandler+0x30c>
  15769. 8006d48: 687b ldr r3, [r7, #4]
  15770. 8006d4a: 681b ldr r3, [r3, #0]
  15771. 8006d4c: 681b ldr r3, [r3, #0]
  15772. 8006d4e: 2300 movs r3, #0
  15773. 8006d50: 2b00 cmp r3, #0
  15774. 8006d52: d00d beq.n 8006d70 <HAL_DMA_IRQHandler+0x32c>
  15775. {
  15776. /* Clear the FIFO error flag */
  15777. regs_dma->IFCR = DMA_FLAG_FEIF0_4 << (hdma->StreamIndex & 0x1FU);
  15778. 8006d54: 687b ldr r3, [r7, #4]
  15779. 8006d56: 6ddb ldr r3, [r3, #92] @ 0x5c
  15780. 8006d58: f003 031f and.w r3, r3, #31
  15781. 8006d5c: 2201 movs r2, #1
  15782. 8006d5e: 409a lsls r2, r3
  15783. 8006d60: 6a3b ldr r3, [r7, #32]
  15784. 8006d62: 609a str r2, [r3, #8]
  15785. /* Update error code */
  15786. hdma->ErrorCode |= HAL_DMA_ERROR_FE;
  15787. 8006d64: 687b ldr r3, [r7, #4]
  15788. 8006d66: 6d5b ldr r3, [r3, #84] @ 0x54
  15789. 8006d68: f043 0202 orr.w r2, r3, #2
  15790. 8006d6c: 687b ldr r3, [r7, #4]
  15791. 8006d6e: 655a str r2, [r3, #84] @ 0x54
  15792. }
  15793. }
  15794. /* Direct Mode Error Interrupt management ***********************************/
  15795. if ((tmpisr_dma & (DMA_FLAG_DMEIF0_4 << (hdma->StreamIndex & 0x1FU))) != 0U)
  15796. 8006d70: 687b ldr r3, [r7, #4]
  15797. 8006d72: 6ddb ldr r3, [r3, #92] @ 0x5c
  15798. 8006d74: f003 031f and.w r3, r3, #31
  15799. 8006d78: 2204 movs r2, #4
  15800. 8006d7a: 409a lsls r2, r3
  15801. 8006d7c: 69bb ldr r3, [r7, #24]
  15802. 8006d7e: 4013 ands r3, r2
  15803. 8006d80: 2b00 cmp r3, #0
  15804. 8006d82: f000 808f beq.w 8006ea4 <HAL_DMA_IRQHandler+0x460>
  15805. {
  15806. if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_DME) != 0U)
  15807. 8006d86: 687b ldr r3, [r7, #4]
  15808. 8006d88: 681b ldr r3, [r3, #0]
  15809. 8006d8a: 4a2c ldr r2, [pc, #176] @ (8006e3c <HAL_DMA_IRQHandler+0x3f8>)
  15810. 8006d8c: 4293 cmp r3, r2
  15811. 8006d8e: d04a beq.n 8006e26 <HAL_DMA_IRQHandler+0x3e2>
  15812. 8006d90: 687b ldr r3, [r7, #4]
  15813. 8006d92: 681b ldr r3, [r3, #0]
  15814. 8006d94: 4a2a ldr r2, [pc, #168] @ (8006e40 <HAL_DMA_IRQHandler+0x3fc>)
  15815. 8006d96: 4293 cmp r3, r2
  15816. 8006d98: d045 beq.n 8006e26 <HAL_DMA_IRQHandler+0x3e2>
  15817. 8006d9a: 687b ldr r3, [r7, #4]
  15818. 8006d9c: 681b ldr r3, [r3, #0]
  15819. 8006d9e: 4a29 ldr r2, [pc, #164] @ (8006e44 <HAL_DMA_IRQHandler+0x400>)
  15820. 8006da0: 4293 cmp r3, r2
  15821. 8006da2: d040 beq.n 8006e26 <HAL_DMA_IRQHandler+0x3e2>
  15822. 8006da4: 687b ldr r3, [r7, #4]
  15823. 8006da6: 681b ldr r3, [r3, #0]
  15824. 8006da8: 4a27 ldr r2, [pc, #156] @ (8006e48 <HAL_DMA_IRQHandler+0x404>)
  15825. 8006daa: 4293 cmp r3, r2
  15826. 8006dac: d03b beq.n 8006e26 <HAL_DMA_IRQHandler+0x3e2>
  15827. 8006dae: 687b ldr r3, [r7, #4]
  15828. 8006db0: 681b ldr r3, [r3, #0]
  15829. 8006db2: 4a26 ldr r2, [pc, #152] @ (8006e4c <HAL_DMA_IRQHandler+0x408>)
  15830. 8006db4: 4293 cmp r3, r2
  15831. 8006db6: d036 beq.n 8006e26 <HAL_DMA_IRQHandler+0x3e2>
  15832. 8006db8: 687b ldr r3, [r7, #4]
  15833. 8006dba: 681b ldr r3, [r3, #0]
  15834. 8006dbc: 4a24 ldr r2, [pc, #144] @ (8006e50 <HAL_DMA_IRQHandler+0x40c>)
  15835. 8006dbe: 4293 cmp r3, r2
  15836. 8006dc0: d031 beq.n 8006e26 <HAL_DMA_IRQHandler+0x3e2>
  15837. 8006dc2: 687b ldr r3, [r7, #4]
  15838. 8006dc4: 681b ldr r3, [r3, #0]
  15839. 8006dc6: 4a23 ldr r2, [pc, #140] @ (8006e54 <HAL_DMA_IRQHandler+0x410>)
  15840. 8006dc8: 4293 cmp r3, r2
  15841. 8006dca: d02c beq.n 8006e26 <HAL_DMA_IRQHandler+0x3e2>
  15842. 8006dcc: 687b ldr r3, [r7, #4]
  15843. 8006dce: 681b ldr r3, [r3, #0]
  15844. 8006dd0: 4a21 ldr r2, [pc, #132] @ (8006e58 <HAL_DMA_IRQHandler+0x414>)
  15845. 8006dd2: 4293 cmp r3, r2
  15846. 8006dd4: d027 beq.n 8006e26 <HAL_DMA_IRQHandler+0x3e2>
  15847. 8006dd6: 687b ldr r3, [r7, #4]
  15848. 8006dd8: 681b ldr r3, [r3, #0]
  15849. 8006dda: 4a20 ldr r2, [pc, #128] @ (8006e5c <HAL_DMA_IRQHandler+0x418>)
  15850. 8006ddc: 4293 cmp r3, r2
  15851. 8006dde: d022 beq.n 8006e26 <HAL_DMA_IRQHandler+0x3e2>
  15852. 8006de0: 687b ldr r3, [r7, #4]
  15853. 8006de2: 681b ldr r3, [r3, #0]
  15854. 8006de4: 4a1e ldr r2, [pc, #120] @ (8006e60 <HAL_DMA_IRQHandler+0x41c>)
  15855. 8006de6: 4293 cmp r3, r2
  15856. 8006de8: d01d beq.n 8006e26 <HAL_DMA_IRQHandler+0x3e2>
  15857. 8006dea: 687b ldr r3, [r7, #4]
  15858. 8006dec: 681b ldr r3, [r3, #0]
  15859. 8006dee: 4a1d ldr r2, [pc, #116] @ (8006e64 <HAL_DMA_IRQHandler+0x420>)
  15860. 8006df0: 4293 cmp r3, r2
  15861. 8006df2: d018 beq.n 8006e26 <HAL_DMA_IRQHandler+0x3e2>
  15862. 8006df4: 687b ldr r3, [r7, #4]
  15863. 8006df6: 681b ldr r3, [r3, #0]
  15864. 8006df8: 4a1b ldr r2, [pc, #108] @ (8006e68 <HAL_DMA_IRQHandler+0x424>)
  15865. 8006dfa: 4293 cmp r3, r2
  15866. 8006dfc: d013 beq.n 8006e26 <HAL_DMA_IRQHandler+0x3e2>
  15867. 8006dfe: 687b ldr r3, [r7, #4]
  15868. 8006e00: 681b ldr r3, [r3, #0]
  15869. 8006e02: 4a1a ldr r2, [pc, #104] @ (8006e6c <HAL_DMA_IRQHandler+0x428>)
  15870. 8006e04: 4293 cmp r3, r2
  15871. 8006e06: d00e beq.n 8006e26 <HAL_DMA_IRQHandler+0x3e2>
  15872. 8006e08: 687b ldr r3, [r7, #4]
  15873. 8006e0a: 681b ldr r3, [r3, #0]
  15874. 8006e0c: 4a18 ldr r2, [pc, #96] @ (8006e70 <HAL_DMA_IRQHandler+0x42c>)
  15875. 8006e0e: 4293 cmp r3, r2
  15876. 8006e10: d009 beq.n 8006e26 <HAL_DMA_IRQHandler+0x3e2>
  15877. 8006e12: 687b ldr r3, [r7, #4]
  15878. 8006e14: 681b ldr r3, [r3, #0]
  15879. 8006e16: 4a17 ldr r2, [pc, #92] @ (8006e74 <HAL_DMA_IRQHandler+0x430>)
  15880. 8006e18: 4293 cmp r3, r2
  15881. 8006e1a: d004 beq.n 8006e26 <HAL_DMA_IRQHandler+0x3e2>
  15882. 8006e1c: 687b ldr r3, [r7, #4]
  15883. 8006e1e: 681b ldr r3, [r3, #0]
  15884. 8006e20: 4a15 ldr r2, [pc, #84] @ (8006e78 <HAL_DMA_IRQHandler+0x434>)
  15885. 8006e22: 4293 cmp r3, r2
  15886. 8006e24: d12a bne.n 8006e7c <HAL_DMA_IRQHandler+0x438>
  15887. 8006e26: 687b ldr r3, [r7, #4]
  15888. 8006e28: 681b ldr r3, [r3, #0]
  15889. 8006e2a: 681b ldr r3, [r3, #0]
  15890. 8006e2c: f003 0302 and.w r3, r3, #2
  15891. 8006e30: 2b00 cmp r3, #0
  15892. 8006e32: bf14 ite ne
  15893. 8006e34: 2301 movne r3, #1
  15894. 8006e36: 2300 moveq r3, #0
  15895. 8006e38: b2db uxtb r3, r3
  15896. 8006e3a: e023 b.n 8006e84 <HAL_DMA_IRQHandler+0x440>
  15897. 8006e3c: 40020010 .word 0x40020010
  15898. 8006e40: 40020028 .word 0x40020028
  15899. 8006e44: 40020040 .word 0x40020040
  15900. 8006e48: 40020058 .word 0x40020058
  15901. 8006e4c: 40020070 .word 0x40020070
  15902. 8006e50: 40020088 .word 0x40020088
  15903. 8006e54: 400200a0 .word 0x400200a0
  15904. 8006e58: 400200b8 .word 0x400200b8
  15905. 8006e5c: 40020410 .word 0x40020410
  15906. 8006e60: 40020428 .word 0x40020428
  15907. 8006e64: 40020440 .word 0x40020440
  15908. 8006e68: 40020458 .word 0x40020458
  15909. 8006e6c: 40020470 .word 0x40020470
  15910. 8006e70: 40020488 .word 0x40020488
  15911. 8006e74: 400204a0 .word 0x400204a0
  15912. 8006e78: 400204b8 .word 0x400204b8
  15913. 8006e7c: 687b ldr r3, [r7, #4]
  15914. 8006e7e: 681b ldr r3, [r3, #0]
  15915. 8006e80: 681b ldr r3, [r3, #0]
  15916. 8006e82: 2300 movs r3, #0
  15917. 8006e84: 2b00 cmp r3, #0
  15918. 8006e86: d00d beq.n 8006ea4 <HAL_DMA_IRQHandler+0x460>
  15919. {
  15920. /* Clear the direct mode error flag */
  15921. regs_dma->IFCR = DMA_FLAG_DMEIF0_4 << (hdma->StreamIndex & 0x1FU);
  15922. 8006e88: 687b ldr r3, [r7, #4]
  15923. 8006e8a: 6ddb ldr r3, [r3, #92] @ 0x5c
  15924. 8006e8c: f003 031f and.w r3, r3, #31
  15925. 8006e90: 2204 movs r2, #4
  15926. 8006e92: 409a lsls r2, r3
  15927. 8006e94: 6a3b ldr r3, [r7, #32]
  15928. 8006e96: 609a str r2, [r3, #8]
  15929. /* Update error code */
  15930. hdma->ErrorCode |= HAL_DMA_ERROR_DME;
  15931. 8006e98: 687b ldr r3, [r7, #4]
  15932. 8006e9a: 6d5b ldr r3, [r3, #84] @ 0x54
  15933. 8006e9c: f043 0204 orr.w r2, r3, #4
  15934. 8006ea0: 687b ldr r3, [r7, #4]
  15935. 8006ea2: 655a str r2, [r3, #84] @ 0x54
  15936. }
  15937. }
  15938. /* Half Transfer Complete Interrupt management ******************************/
  15939. if ((tmpisr_dma & (DMA_FLAG_HTIF0_4 << (hdma->StreamIndex & 0x1FU))) != 0U)
  15940. 8006ea4: 687b ldr r3, [r7, #4]
  15941. 8006ea6: 6ddb ldr r3, [r3, #92] @ 0x5c
  15942. 8006ea8: f003 031f and.w r3, r3, #31
  15943. 8006eac: 2210 movs r2, #16
  15944. 8006eae: 409a lsls r2, r3
  15945. 8006eb0: 69bb ldr r3, [r7, #24]
  15946. 8006eb2: 4013 ands r3, r2
  15947. 8006eb4: 2b00 cmp r3, #0
  15948. 8006eb6: f000 80a6 beq.w 8007006 <HAL_DMA_IRQHandler+0x5c2>
  15949. {
  15950. if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_HT) != 0U)
  15951. 8006eba: 687b ldr r3, [r7, #4]
  15952. 8006ebc: 681b ldr r3, [r3, #0]
  15953. 8006ebe: 4a85 ldr r2, [pc, #532] @ (80070d4 <HAL_DMA_IRQHandler+0x690>)
  15954. 8006ec0: 4293 cmp r3, r2
  15955. 8006ec2: d04a beq.n 8006f5a <HAL_DMA_IRQHandler+0x516>
  15956. 8006ec4: 687b ldr r3, [r7, #4]
  15957. 8006ec6: 681b ldr r3, [r3, #0]
  15958. 8006ec8: 4a83 ldr r2, [pc, #524] @ (80070d8 <HAL_DMA_IRQHandler+0x694>)
  15959. 8006eca: 4293 cmp r3, r2
  15960. 8006ecc: d045 beq.n 8006f5a <HAL_DMA_IRQHandler+0x516>
  15961. 8006ece: 687b ldr r3, [r7, #4]
  15962. 8006ed0: 681b ldr r3, [r3, #0]
  15963. 8006ed2: 4a82 ldr r2, [pc, #520] @ (80070dc <HAL_DMA_IRQHandler+0x698>)
  15964. 8006ed4: 4293 cmp r3, r2
  15965. 8006ed6: d040 beq.n 8006f5a <HAL_DMA_IRQHandler+0x516>
  15966. 8006ed8: 687b ldr r3, [r7, #4]
  15967. 8006eda: 681b ldr r3, [r3, #0]
  15968. 8006edc: 4a80 ldr r2, [pc, #512] @ (80070e0 <HAL_DMA_IRQHandler+0x69c>)
  15969. 8006ede: 4293 cmp r3, r2
  15970. 8006ee0: d03b beq.n 8006f5a <HAL_DMA_IRQHandler+0x516>
  15971. 8006ee2: 687b ldr r3, [r7, #4]
  15972. 8006ee4: 681b ldr r3, [r3, #0]
  15973. 8006ee6: 4a7f ldr r2, [pc, #508] @ (80070e4 <HAL_DMA_IRQHandler+0x6a0>)
  15974. 8006ee8: 4293 cmp r3, r2
  15975. 8006eea: d036 beq.n 8006f5a <HAL_DMA_IRQHandler+0x516>
  15976. 8006eec: 687b ldr r3, [r7, #4]
  15977. 8006eee: 681b ldr r3, [r3, #0]
  15978. 8006ef0: 4a7d ldr r2, [pc, #500] @ (80070e8 <HAL_DMA_IRQHandler+0x6a4>)
  15979. 8006ef2: 4293 cmp r3, r2
  15980. 8006ef4: d031 beq.n 8006f5a <HAL_DMA_IRQHandler+0x516>
  15981. 8006ef6: 687b ldr r3, [r7, #4]
  15982. 8006ef8: 681b ldr r3, [r3, #0]
  15983. 8006efa: 4a7c ldr r2, [pc, #496] @ (80070ec <HAL_DMA_IRQHandler+0x6a8>)
  15984. 8006efc: 4293 cmp r3, r2
  15985. 8006efe: d02c beq.n 8006f5a <HAL_DMA_IRQHandler+0x516>
  15986. 8006f00: 687b ldr r3, [r7, #4]
  15987. 8006f02: 681b ldr r3, [r3, #0]
  15988. 8006f04: 4a7a ldr r2, [pc, #488] @ (80070f0 <HAL_DMA_IRQHandler+0x6ac>)
  15989. 8006f06: 4293 cmp r3, r2
  15990. 8006f08: d027 beq.n 8006f5a <HAL_DMA_IRQHandler+0x516>
  15991. 8006f0a: 687b ldr r3, [r7, #4]
  15992. 8006f0c: 681b ldr r3, [r3, #0]
  15993. 8006f0e: 4a79 ldr r2, [pc, #484] @ (80070f4 <HAL_DMA_IRQHandler+0x6b0>)
  15994. 8006f10: 4293 cmp r3, r2
  15995. 8006f12: d022 beq.n 8006f5a <HAL_DMA_IRQHandler+0x516>
  15996. 8006f14: 687b ldr r3, [r7, #4]
  15997. 8006f16: 681b ldr r3, [r3, #0]
  15998. 8006f18: 4a77 ldr r2, [pc, #476] @ (80070f8 <HAL_DMA_IRQHandler+0x6b4>)
  15999. 8006f1a: 4293 cmp r3, r2
  16000. 8006f1c: d01d beq.n 8006f5a <HAL_DMA_IRQHandler+0x516>
  16001. 8006f1e: 687b ldr r3, [r7, #4]
  16002. 8006f20: 681b ldr r3, [r3, #0]
  16003. 8006f22: 4a76 ldr r2, [pc, #472] @ (80070fc <HAL_DMA_IRQHandler+0x6b8>)
  16004. 8006f24: 4293 cmp r3, r2
  16005. 8006f26: d018 beq.n 8006f5a <HAL_DMA_IRQHandler+0x516>
  16006. 8006f28: 687b ldr r3, [r7, #4]
  16007. 8006f2a: 681b ldr r3, [r3, #0]
  16008. 8006f2c: 4a74 ldr r2, [pc, #464] @ (8007100 <HAL_DMA_IRQHandler+0x6bc>)
  16009. 8006f2e: 4293 cmp r3, r2
  16010. 8006f30: d013 beq.n 8006f5a <HAL_DMA_IRQHandler+0x516>
  16011. 8006f32: 687b ldr r3, [r7, #4]
  16012. 8006f34: 681b ldr r3, [r3, #0]
  16013. 8006f36: 4a73 ldr r2, [pc, #460] @ (8007104 <HAL_DMA_IRQHandler+0x6c0>)
  16014. 8006f38: 4293 cmp r3, r2
  16015. 8006f3a: d00e beq.n 8006f5a <HAL_DMA_IRQHandler+0x516>
  16016. 8006f3c: 687b ldr r3, [r7, #4]
  16017. 8006f3e: 681b ldr r3, [r3, #0]
  16018. 8006f40: 4a71 ldr r2, [pc, #452] @ (8007108 <HAL_DMA_IRQHandler+0x6c4>)
  16019. 8006f42: 4293 cmp r3, r2
  16020. 8006f44: d009 beq.n 8006f5a <HAL_DMA_IRQHandler+0x516>
  16021. 8006f46: 687b ldr r3, [r7, #4]
  16022. 8006f48: 681b ldr r3, [r3, #0]
  16023. 8006f4a: 4a70 ldr r2, [pc, #448] @ (800710c <HAL_DMA_IRQHandler+0x6c8>)
  16024. 8006f4c: 4293 cmp r3, r2
  16025. 8006f4e: d004 beq.n 8006f5a <HAL_DMA_IRQHandler+0x516>
  16026. 8006f50: 687b ldr r3, [r7, #4]
  16027. 8006f52: 681b ldr r3, [r3, #0]
  16028. 8006f54: 4a6e ldr r2, [pc, #440] @ (8007110 <HAL_DMA_IRQHandler+0x6cc>)
  16029. 8006f56: 4293 cmp r3, r2
  16030. 8006f58: d10a bne.n 8006f70 <HAL_DMA_IRQHandler+0x52c>
  16031. 8006f5a: 687b ldr r3, [r7, #4]
  16032. 8006f5c: 681b ldr r3, [r3, #0]
  16033. 8006f5e: 681b ldr r3, [r3, #0]
  16034. 8006f60: f003 0308 and.w r3, r3, #8
  16035. 8006f64: 2b00 cmp r3, #0
  16036. 8006f66: bf14 ite ne
  16037. 8006f68: 2301 movne r3, #1
  16038. 8006f6a: 2300 moveq r3, #0
  16039. 8006f6c: b2db uxtb r3, r3
  16040. 8006f6e: e009 b.n 8006f84 <HAL_DMA_IRQHandler+0x540>
  16041. 8006f70: 687b ldr r3, [r7, #4]
  16042. 8006f72: 681b ldr r3, [r3, #0]
  16043. 8006f74: 681b ldr r3, [r3, #0]
  16044. 8006f76: f003 0304 and.w r3, r3, #4
  16045. 8006f7a: 2b00 cmp r3, #0
  16046. 8006f7c: bf14 ite ne
  16047. 8006f7e: 2301 movne r3, #1
  16048. 8006f80: 2300 moveq r3, #0
  16049. 8006f82: b2db uxtb r3, r3
  16050. 8006f84: 2b00 cmp r3, #0
  16051. 8006f86: d03e beq.n 8007006 <HAL_DMA_IRQHandler+0x5c2>
  16052. {
  16053. /* Clear the half transfer complete flag */
  16054. regs_dma->IFCR = DMA_FLAG_HTIF0_4 << (hdma->StreamIndex & 0x1FU);
  16055. 8006f88: 687b ldr r3, [r7, #4]
  16056. 8006f8a: 6ddb ldr r3, [r3, #92] @ 0x5c
  16057. 8006f8c: f003 031f and.w r3, r3, #31
  16058. 8006f90: 2210 movs r2, #16
  16059. 8006f92: 409a lsls r2, r3
  16060. 8006f94: 6a3b ldr r3, [r7, #32]
  16061. 8006f96: 609a str r2, [r3, #8]
  16062. /* Multi_Buffering mode enabled */
  16063. if(((((DMA_Stream_TypeDef *)hdma->Instance)->CR) & (uint32_t)(DMA_SxCR_DBM)) != 0U)
  16064. 8006f98: 687b ldr r3, [r7, #4]
  16065. 8006f9a: 681b ldr r3, [r3, #0]
  16066. 8006f9c: 681b ldr r3, [r3, #0]
  16067. 8006f9e: f403 2380 and.w r3, r3, #262144 @ 0x40000
  16068. 8006fa2: 2b00 cmp r3, #0
  16069. 8006fa4: d018 beq.n 8006fd8 <HAL_DMA_IRQHandler+0x594>
  16070. {
  16071. /* Current memory buffer used is Memory 0 */
  16072. if((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_CT) == 0U)
  16073. 8006fa6: 687b ldr r3, [r7, #4]
  16074. 8006fa8: 681b ldr r3, [r3, #0]
  16075. 8006faa: 681b ldr r3, [r3, #0]
  16076. 8006fac: f403 2300 and.w r3, r3, #524288 @ 0x80000
  16077. 8006fb0: 2b00 cmp r3, #0
  16078. 8006fb2: d108 bne.n 8006fc6 <HAL_DMA_IRQHandler+0x582>
  16079. {
  16080. if(hdma->XferHalfCpltCallback != NULL)
  16081. 8006fb4: 687b ldr r3, [r7, #4]
  16082. 8006fb6: 6c1b ldr r3, [r3, #64] @ 0x40
  16083. 8006fb8: 2b00 cmp r3, #0
  16084. 8006fba: d024 beq.n 8007006 <HAL_DMA_IRQHandler+0x5c2>
  16085. {
  16086. /* Half transfer callback */
  16087. hdma->XferHalfCpltCallback(hdma);
  16088. 8006fbc: 687b ldr r3, [r7, #4]
  16089. 8006fbe: 6c1b ldr r3, [r3, #64] @ 0x40
  16090. 8006fc0: 6878 ldr r0, [r7, #4]
  16091. 8006fc2: 4798 blx r3
  16092. 8006fc4: e01f b.n 8007006 <HAL_DMA_IRQHandler+0x5c2>
  16093. }
  16094. }
  16095. /* Current memory buffer used is Memory 1 */
  16096. else
  16097. {
  16098. if(hdma->XferM1HalfCpltCallback != NULL)
  16099. 8006fc6: 687b ldr r3, [r7, #4]
  16100. 8006fc8: 6c9b ldr r3, [r3, #72] @ 0x48
  16101. 8006fca: 2b00 cmp r3, #0
  16102. 8006fcc: d01b beq.n 8007006 <HAL_DMA_IRQHandler+0x5c2>
  16103. {
  16104. /* Half transfer callback */
  16105. hdma->XferM1HalfCpltCallback(hdma);
  16106. 8006fce: 687b ldr r3, [r7, #4]
  16107. 8006fd0: 6c9b ldr r3, [r3, #72] @ 0x48
  16108. 8006fd2: 6878 ldr r0, [r7, #4]
  16109. 8006fd4: 4798 blx r3
  16110. 8006fd6: e016 b.n 8007006 <HAL_DMA_IRQHandler+0x5c2>
  16111. }
  16112. }
  16113. else
  16114. {
  16115. /* Disable the half transfer interrupt if the DMA mode is not CIRCULAR */
  16116. if((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_CIRC) == 0U)
  16117. 8006fd8: 687b ldr r3, [r7, #4]
  16118. 8006fda: 681b ldr r3, [r3, #0]
  16119. 8006fdc: 681b ldr r3, [r3, #0]
  16120. 8006fde: f403 7380 and.w r3, r3, #256 @ 0x100
  16121. 8006fe2: 2b00 cmp r3, #0
  16122. 8006fe4: d107 bne.n 8006ff6 <HAL_DMA_IRQHandler+0x5b2>
  16123. {
  16124. /* Disable the half transfer interrupt */
  16125. ((DMA_Stream_TypeDef *)hdma->Instance)->CR &= ~(DMA_IT_HT);
  16126. 8006fe6: 687b ldr r3, [r7, #4]
  16127. 8006fe8: 681b ldr r3, [r3, #0]
  16128. 8006fea: 681a ldr r2, [r3, #0]
  16129. 8006fec: 687b ldr r3, [r7, #4]
  16130. 8006fee: 681b ldr r3, [r3, #0]
  16131. 8006ff0: f022 0208 bic.w r2, r2, #8
  16132. 8006ff4: 601a str r2, [r3, #0]
  16133. }
  16134. if(hdma->XferHalfCpltCallback != NULL)
  16135. 8006ff6: 687b ldr r3, [r7, #4]
  16136. 8006ff8: 6c1b ldr r3, [r3, #64] @ 0x40
  16137. 8006ffa: 2b00 cmp r3, #0
  16138. 8006ffc: d003 beq.n 8007006 <HAL_DMA_IRQHandler+0x5c2>
  16139. {
  16140. /* Half transfer callback */
  16141. hdma->XferHalfCpltCallback(hdma);
  16142. 8006ffe: 687b ldr r3, [r7, #4]
  16143. 8007000: 6c1b ldr r3, [r3, #64] @ 0x40
  16144. 8007002: 6878 ldr r0, [r7, #4]
  16145. 8007004: 4798 blx r3
  16146. }
  16147. }
  16148. }
  16149. }
  16150. /* Transfer Complete Interrupt management ***********************************/
  16151. if ((tmpisr_dma & (DMA_FLAG_TCIF0_4 << (hdma->StreamIndex & 0x1FU))) != 0U)
  16152. 8007006: 687b ldr r3, [r7, #4]
  16153. 8007008: 6ddb ldr r3, [r3, #92] @ 0x5c
  16154. 800700a: f003 031f and.w r3, r3, #31
  16155. 800700e: 2220 movs r2, #32
  16156. 8007010: 409a lsls r2, r3
  16157. 8007012: 69bb ldr r3, [r7, #24]
  16158. 8007014: 4013 ands r3, r2
  16159. 8007016: 2b00 cmp r3, #0
  16160. 8007018: f000 8110 beq.w 800723c <HAL_DMA_IRQHandler+0x7f8>
  16161. {
  16162. if(__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_TC) != 0U)
  16163. 800701c: 687b ldr r3, [r7, #4]
  16164. 800701e: 681b ldr r3, [r3, #0]
  16165. 8007020: 4a2c ldr r2, [pc, #176] @ (80070d4 <HAL_DMA_IRQHandler+0x690>)
  16166. 8007022: 4293 cmp r3, r2
  16167. 8007024: d04a beq.n 80070bc <HAL_DMA_IRQHandler+0x678>
  16168. 8007026: 687b ldr r3, [r7, #4]
  16169. 8007028: 681b ldr r3, [r3, #0]
  16170. 800702a: 4a2b ldr r2, [pc, #172] @ (80070d8 <HAL_DMA_IRQHandler+0x694>)
  16171. 800702c: 4293 cmp r3, r2
  16172. 800702e: d045 beq.n 80070bc <HAL_DMA_IRQHandler+0x678>
  16173. 8007030: 687b ldr r3, [r7, #4]
  16174. 8007032: 681b ldr r3, [r3, #0]
  16175. 8007034: 4a29 ldr r2, [pc, #164] @ (80070dc <HAL_DMA_IRQHandler+0x698>)
  16176. 8007036: 4293 cmp r3, r2
  16177. 8007038: d040 beq.n 80070bc <HAL_DMA_IRQHandler+0x678>
  16178. 800703a: 687b ldr r3, [r7, #4]
  16179. 800703c: 681b ldr r3, [r3, #0]
  16180. 800703e: 4a28 ldr r2, [pc, #160] @ (80070e0 <HAL_DMA_IRQHandler+0x69c>)
  16181. 8007040: 4293 cmp r3, r2
  16182. 8007042: d03b beq.n 80070bc <HAL_DMA_IRQHandler+0x678>
  16183. 8007044: 687b ldr r3, [r7, #4]
  16184. 8007046: 681b ldr r3, [r3, #0]
  16185. 8007048: 4a26 ldr r2, [pc, #152] @ (80070e4 <HAL_DMA_IRQHandler+0x6a0>)
  16186. 800704a: 4293 cmp r3, r2
  16187. 800704c: d036 beq.n 80070bc <HAL_DMA_IRQHandler+0x678>
  16188. 800704e: 687b ldr r3, [r7, #4]
  16189. 8007050: 681b ldr r3, [r3, #0]
  16190. 8007052: 4a25 ldr r2, [pc, #148] @ (80070e8 <HAL_DMA_IRQHandler+0x6a4>)
  16191. 8007054: 4293 cmp r3, r2
  16192. 8007056: d031 beq.n 80070bc <HAL_DMA_IRQHandler+0x678>
  16193. 8007058: 687b ldr r3, [r7, #4]
  16194. 800705a: 681b ldr r3, [r3, #0]
  16195. 800705c: 4a23 ldr r2, [pc, #140] @ (80070ec <HAL_DMA_IRQHandler+0x6a8>)
  16196. 800705e: 4293 cmp r3, r2
  16197. 8007060: d02c beq.n 80070bc <HAL_DMA_IRQHandler+0x678>
  16198. 8007062: 687b ldr r3, [r7, #4]
  16199. 8007064: 681b ldr r3, [r3, #0]
  16200. 8007066: 4a22 ldr r2, [pc, #136] @ (80070f0 <HAL_DMA_IRQHandler+0x6ac>)
  16201. 8007068: 4293 cmp r3, r2
  16202. 800706a: d027 beq.n 80070bc <HAL_DMA_IRQHandler+0x678>
  16203. 800706c: 687b ldr r3, [r7, #4]
  16204. 800706e: 681b ldr r3, [r3, #0]
  16205. 8007070: 4a20 ldr r2, [pc, #128] @ (80070f4 <HAL_DMA_IRQHandler+0x6b0>)
  16206. 8007072: 4293 cmp r3, r2
  16207. 8007074: d022 beq.n 80070bc <HAL_DMA_IRQHandler+0x678>
  16208. 8007076: 687b ldr r3, [r7, #4]
  16209. 8007078: 681b ldr r3, [r3, #0]
  16210. 800707a: 4a1f ldr r2, [pc, #124] @ (80070f8 <HAL_DMA_IRQHandler+0x6b4>)
  16211. 800707c: 4293 cmp r3, r2
  16212. 800707e: d01d beq.n 80070bc <HAL_DMA_IRQHandler+0x678>
  16213. 8007080: 687b ldr r3, [r7, #4]
  16214. 8007082: 681b ldr r3, [r3, #0]
  16215. 8007084: 4a1d ldr r2, [pc, #116] @ (80070fc <HAL_DMA_IRQHandler+0x6b8>)
  16216. 8007086: 4293 cmp r3, r2
  16217. 8007088: d018 beq.n 80070bc <HAL_DMA_IRQHandler+0x678>
  16218. 800708a: 687b ldr r3, [r7, #4]
  16219. 800708c: 681b ldr r3, [r3, #0]
  16220. 800708e: 4a1c ldr r2, [pc, #112] @ (8007100 <HAL_DMA_IRQHandler+0x6bc>)
  16221. 8007090: 4293 cmp r3, r2
  16222. 8007092: d013 beq.n 80070bc <HAL_DMA_IRQHandler+0x678>
  16223. 8007094: 687b ldr r3, [r7, #4]
  16224. 8007096: 681b ldr r3, [r3, #0]
  16225. 8007098: 4a1a ldr r2, [pc, #104] @ (8007104 <HAL_DMA_IRQHandler+0x6c0>)
  16226. 800709a: 4293 cmp r3, r2
  16227. 800709c: d00e beq.n 80070bc <HAL_DMA_IRQHandler+0x678>
  16228. 800709e: 687b ldr r3, [r7, #4]
  16229. 80070a0: 681b ldr r3, [r3, #0]
  16230. 80070a2: 4a19 ldr r2, [pc, #100] @ (8007108 <HAL_DMA_IRQHandler+0x6c4>)
  16231. 80070a4: 4293 cmp r3, r2
  16232. 80070a6: d009 beq.n 80070bc <HAL_DMA_IRQHandler+0x678>
  16233. 80070a8: 687b ldr r3, [r7, #4]
  16234. 80070aa: 681b ldr r3, [r3, #0]
  16235. 80070ac: 4a17 ldr r2, [pc, #92] @ (800710c <HAL_DMA_IRQHandler+0x6c8>)
  16236. 80070ae: 4293 cmp r3, r2
  16237. 80070b0: d004 beq.n 80070bc <HAL_DMA_IRQHandler+0x678>
  16238. 80070b2: 687b ldr r3, [r7, #4]
  16239. 80070b4: 681b ldr r3, [r3, #0]
  16240. 80070b6: 4a16 ldr r2, [pc, #88] @ (8007110 <HAL_DMA_IRQHandler+0x6cc>)
  16241. 80070b8: 4293 cmp r3, r2
  16242. 80070ba: d12b bne.n 8007114 <HAL_DMA_IRQHandler+0x6d0>
  16243. 80070bc: 687b ldr r3, [r7, #4]
  16244. 80070be: 681b ldr r3, [r3, #0]
  16245. 80070c0: 681b ldr r3, [r3, #0]
  16246. 80070c2: f003 0310 and.w r3, r3, #16
  16247. 80070c6: 2b00 cmp r3, #0
  16248. 80070c8: bf14 ite ne
  16249. 80070ca: 2301 movne r3, #1
  16250. 80070cc: 2300 moveq r3, #0
  16251. 80070ce: b2db uxtb r3, r3
  16252. 80070d0: e02a b.n 8007128 <HAL_DMA_IRQHandler+0x6e4>
  16253. 80070d2: bf00 nop
  16254. 80070d4: 40020010 .word 0x40020010
  16255. 80070d8: 40020028 .word 0x40020028
  16256. 80070dc: 40020040 .word 0x40020040
  16257. 80070e0: 40020058 .word 0x40020058
  16258. 80070e4: 40020070 .word 0x40020070
  16259. 80070e8: 40020088 .word 0x40020088
  16260. 80070ec: 400200a0 .word 0x400200a0
  16261. 80070f0: 400200b8 .word 0x400200b8
  16262. 80070f4: 40020410 .word 0x40020410
  16263. 80070f8: 40020428 .word 0x40020428
  16264. 80070fc: 40020440 .word 0x40020440
  16265. 8007100: 40020458 .word 0x40020458
  16266. 8007104: 40020470 .word 0x40020470
  16267. 8007108: 40020488 .word 0x40020488
  16268. 800710c: 400204a0 .word 0x400204a0
  16269. 8007110: 400204b8 .word 0x400204b8
  16270. 8007114: 687b ldr r3, [r7, #4]
  16271. 8007116: 681b ldr r3, [r3, #0]
  16272. 8007118: 681b ldr r3, [r3, #0]
  16273. 800711a: f003 0302 and.w r3, r3, #2
  16274. 800711e: 2b00 cmp r3, #0
  16275. 8007120: bf14 ite ne
  16276. 8007122: 2301 movne r3, #1
  16277. 8007124: 2300 moveq r3, #0
  16278. 8007126: b2db uxtb r3, r3
  16279. 8007128: 2b00 cmp r3, #0
  16280. 800712a: f000 8087 beq.w 800723c <HAL_DMA_IRQHandler+0x7f8>
  16281. {
  16282. /* Clear the transfer complete flag */
  16283. regs_dma->IFCR = DMA_FLAG_TCIF0_4 << (hdma->StreamIndex & 0x1FU);
  16284. 800712e: 687b ldr r3, [r7, #4]
  16285. 8007130: 6ddb ldr r3, [r3, #92] @ 0x5c
  16286. 8007132: f003 031f and.w r3, r3, #31
  16287. 8007136: 2220 movs r2, #32
  16288. 8007138: 409a lsls r2, r3
  16289. 800713a: 6a3b ldr r3, [r7, #32]
  16290. 800713c: 609a str r2, [r3, #8]
  16291. if(HAL_DMA_STATE_ABORT == hdma->State)
  16292. 800713e: 687b ldr r3, [r7, #4]
  16293. 8007140: f893 3035 ldrb.w r3, [r3, #53] @ 0x35
  16294. 8007144: b2db uxtb r3, r3
  16295. 8007146: 2b04 cmp r3, #4
  16296. 8007148: d139 bne.n 80071be <HAL_DMA_IRQHandler+0x77a>
  16297. {
  16298. /* Disable all the transfer interrupts */
  16299. ((DMA_Stream_TypeDef *)hdma->Instance)->CR &= ~(DMA_IT_TC | DMA_IT_TE | DMA_IT_DME);
  16300. 800714a: 687b ldr r3, [r7, #4]
  16301. 800714c: 681b ldr r3, [r3, #0]
  16302. 800714e: 681a ldr r2, [r3, #0]
  16303. 8007150: 687b ldr r3, [r7, #4]
  16304. 8007152: 681b ldr r3, [r3, #0]
  16305. 8007154: f022 0216 bic.w r2, r2, #22
  16306. 8007158: 601a str r2, [r3, #0]
  16307. ((DMA_Stream_TypeDef *)hdma->Instance)->FCR &= ~(DMA_IT_FE);
  16308. 800715a: 687b ldr r3, [r7, #4]
  16309. 800715c: 681b ldr r3, [r3, #0]
  16310. 800715e: 695a ldr r2, [r3, #20]
  16311. 8007160: 687b ldr r3, [r7, #4]
  16312. 8007162: 681b ldr r3, [r3, #0]
  16313. 8007164: f022 0280 bic.w r2, r2, #128 @ 0x80
  16314. 8007168: 615a str r2, [r3, #20]
  16315. if((hdma->XferHalfCpltCallback != NULL) || (hdma->XferM1HalfCpltCallback != NULL))
  16316. 800716a: 687b ldr r3, [r7, #4]
  16317. 800716c: 6c1b ldr r3, [r3, #64] @ 0x40
  16318. 800716e: 2b00 cmp r3, #0
  16319. 8007170: d103 bne.n 800717a <HAL_DMA_IRQHandler+0x736>
  16320. 8007172: 687b ldr r3, [r7, #4]
  16321. 8007174: 6c9b ldr r3, [r3, #72] @ 0x48
  16322. 8007176: 2b00 cmp r3, #0
  16323. 8007178: d007 beq.n 800718a <HAL_DMA_IRQHandler+0x746>
  16324. {
  16325. ((DMA_Stream_TypeDef *)hdma->Instance)->CR &= ~(DMA_IT_HT);
  16326. 800717a: 687b ldr r3, [r7, #4]
  16327. 800717c: 681b ldr r3, [r3, #0]
  16328. 800717e: 681a ldr r2, [r3, #0]
  16329. 8007180: 687b ldr r3, [r7, #4]
  16330. 8007182: 681b ldr r3, [r3, #0]
  16331. 8007184: f022 0208 bic.w r2, r2, #8
  16332. 8007188: 601a str r2, [r3, #0]
  16333. }
  16334. /* Clear all interrupt flags at correct offset within the register */
  16335. regs_dma->IFCR = 0x3FUL << (hdma->StreamIndex & 0x1FU);
  16336. 800718a: 687b ldr r3, [r7, #4]
  16337. 800718c: 6ddb ldr r3, [r3, #92] @ 0x5c
  16338. 800718e: f003 031f and.w r3, r3, #31
  16339. 8007192: 223f movs r2, #63 @ 0x3f
  16340. 8007194: 409a lsls r2, r3
  16341. 8007196: 6a3b ldr r3, [r7, #32]
  16342. 8007198: 609a str r2, [r3, #8]
  16343. /* Change the DMA state */
  16344. hdma->State = HAL_DMA_STATE_READY;
  16345. 800719a: 687b ldr r3, [r7, #4]
  16346. 800719c: 2201 movs r2, #1
  16347. 800719e: f883 2035 strb.w r2, [r3, #53] @ 0x35
  16348. /* Process Unlocked */
  16349. __HAL_UNLOCK(hdma);
  16350. 80071a2: 687b ldr r3, [r7, #4]
  16351. 80071a4: 2200 movs r2, #0
  16352. 80071a6: f883 2034 strb.w r2, [r3, #52] @ 0x34
  16353. if(hdma->XferAbortCallback != NULL)
  16354. 80071aa: 687b ldr r3, [r7, #4]
  16355. 80071ac: 6d1b ldr r3, [r3, #80] @ 0x50
  16356. 80071ae: 2b00 cmp r3, #0
  16357. 80071b0: f000 834a beq.w 8007848 <HAL_DMA_IRQHandler+0xe04>
  16358. {
  16359. hdma->XferAbortCallback(hdma);
  16360. 80071b4: 687b ldr r3, [r7, #4]
  16361. 80071b6: 6d1b ldr r3, [r3, #80] @ 0x50
  16362. 80071b8: 6878 ldr r0, [r7, #4]
  16363. 80071ba: 4798 blx r3
  16364. }
  16365. return;
  16366. 80071bc: e344 b.n 8007848 <HAL_DMA_IRQHandler+0xe04>
  16367. }
  16368. if(((((DMA_Stream_TypeDef *)hdma->Instance)->CR) & (uint32_t)(DMA_SxCR_DBM)) != 0U)
  16369. 80071be: 687b ldr r3, [r7, #4]
  16370. 80071c0: 681b ldr r3, [r3, #0]
  16371. 80071c2: 681b ldr r3, [r3, #0]
  16372. 80071c4: f403 2380 and.w r3, r3, #262144 @ 0x40000
  16373. 80071c8: 2b00 cmp r3, #0
  16374. 80071ca: d018 beq.n 80071fe <HAL_DMA_IRQHandler+0x7ba>
  16375. {
  16376. /* Current memory buffer used is Memory 0 */
  16377. if((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_CT) == 0U)
  16378. 80071cc: 687b ldr r3, [r7, #4]
  16379. 80071ce: 681b ldr r3, [r3, #0]
  16380. 80071d0: 681b ldr r3, [r3, #0]
  16381. 80071d2: f403 2300 and.w r3, r3, #524288 @ 0x80000
  16382. 80071d6: 2b00 cmp r3, #0
  16383. 80071d8: d108 bne.n 80071ec <HAL_DMA_IRQHandler+0x7a8>
  16384. {
  16385. if(hdma->XferM1CpltCallback != NULL)
  16386. 80071da: 687b ldr r3, [r7, #4]
  16387. 80071dc: 6c5b ldr r3, [r3, #68] @ 0x44
  16388. 80071de: 2b00 cmp r3, #0
  16389. 80071e0: d02c beq.n 800723c <HAL_DMA_IRQHandler+0x7f8>
  16390. {
  16391. /* Transfer complete Callback for memory1 */
  16392. hdma->XferM1CpltCallback(hdma);
  16393. 80071e2: 687b ldr r3, [r7, #4]
  16394. 80071e4: 6c5b ldr r3, [r3, #68] @ 0x44
  16395. 80071e6: 6878 ldr r0, [r7, #4]
  16396. 80071e8: 4798 blx r3
  16397. 80071ea: e027 b.n 800723c <HAL_DMA_IRQHandler+0x7f8>
  16398. }
  16399. }
  16400. /* Current memory buffer used is Memory 1 */
  16401. else
  16402. {
  16403. if(hdma->XferCpltCallback != NULL)
  16404. 80071ec: 687b ldr r3, [r7, #4]
  16405. 80071ee: 6bdb ldr r3, [r3, #60] @ 0x3c
  16406. 80071f0: 2b00 cmp r3, #0
  16407. 80071f2: d023 beq.n 800723c <HAL_DMA_IRQHandler+0x7f8>
  16408. {
  16409. /* Transfer complete Callback for memory0 */
  16410. hdma->XferCpltCallback(hdma);
  16411. 80071f4: 687b ldr r3, [r7, #4]
  16412. 80071f6: 6bdb ldr r3, [r3, #60] @ 0x3c
  16413. 80071f8: 6878 ldr r0, [r7, #4]
  16414. 80071fa: 4798 blx r3
  16415. 80071fc: e01e b.n 800723c <HAL_DMA_IRQHandler+0x7f8>
  16416. }
  16417. }
  16418. /* Disable the transfer complete interrupt if the DMA mode is not CIRCULAR */
  16419. else
  16420. {
  16421. if((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_CIRC) == 0U)
  16422. 80071fe: 687b ldr r3, [r7, #4]
  16423. 8007200: 681b ldr r3, [r3, #0]
  16424. 8007202: 681b ldr r3, [r3, #0]
  16425. 8007204: f403 7380 and.w r3, r3, #256 @ 0x100
  16426. 8007208: 2b00 cmp r3, #0
  16427. 800720a: d10f bne.n 800722c <HAL_DMA_IRQHandler+0x7e8>
  16428. {
  16429. /* Disable the transfer complete interrupt */
  16430. ((DMA_Stream_TypeDef *)hdma->Instance)->CR &= ~(DMA_IT_TC);
  16431. 800720c: 687b ldr r3, [r7, #4]
  16432. 800720e: 681b ldr r3, [r3, #0]
  16433. 8007210: 681a ldr r2, [r3, #0]
  16434. 8007212: 687b ldr r3, [r7, #4]
  16435. 8007214: 681b ldr r3, [r3, #0]
  16436. 8007216: f022 0210 bic.w r2, r2, #16
  16437. 800721a: 601a str r2, [r3, #0]
  16438. /* Change the DMA state */
  16439. hdma->State = HAL_DMA_STATE_READY;
  16440. 800721c: 687b ldr r3, [r7, #4]
  16441. 800721e: 2201 movs r2, #1
  16442. 8007220: f883 2035 strb.w r2, [r3, #53] @ 0x35
  16443. /* Process Unlocked */
  16444. __HAL_UNLOCK(hdma);
  16445. 8007224: 687b ldr r3, [r7, #4]
  16446. 8007226: 2200 movs r2, #0
  16447. 8007228: f883 2034 strb.w r2, [r3, #52] @ 0x34
  16448. }
  16449. if(hdma->XferCpltCallback != NULL)
  16450. 800722c: 687b ldr r3, [r7, #4]
  16451. 800722e: 6bdb ldr r3, [r3, #60] @ 0x3c
  16452. 8007230: 2b00 cmp r3, #0
  16453. 8007232: d003 beq.n 800723c <HAL_DMA_IRQHandler+0x7f8>
  16454. {
  16455. /* Transfer complete callback */
  16456. hdma->XferCpltCallback(hdma);
  16457. 8007234: 687b ldr r3, [r7, #4]
  16458. 8007236: 6bdb ldr r3, [r3, #60] @ 0x3c
  16459. 8007238: 6878 ldr r0, [r7, #4]
  16460. 800723a: 4798 blx r3
  16461. }
  16462. }
  16463. }
  16464. /* manage error case */
  16465. if(hdma->ErrorCode != HAL_DMA_ERROR_NONE)
  16466. 800723c: 687b ldr r3, [r7, #4]
  16467. 800723e: 6d5b ldr r3, [r3, #84] @ 0x54
  16468. 8007240: 2b00 cmp r3, #0
  16469. 8007242: f000 8306 beq.w 8007852 <HAL_DMA_IRQHandler+0xe0e>
  16470. {
  16471. if((hdma->ErrorCode & HAL_DMA_ERROR_TE) != 0U)
  16472. 8007246: 687b ldr r3, [r7, #4]
  16473. 8007248: 6d5b ldr r3, [r3, #84] @ 0x54
  16474. 800724a: f003 0301 and.w r3, r3, #1
  16475. 800724e: 2b00 cmp r3, #0
  16476. 8007250: f000 8088 beq.w 8007364 <HAL_DMA_IRQHandler+0x920>
  16477. {
  16478. hdma->State = HAL_DMA_STATE_ABORT;
  16479. 8007254: 687b ldr r3, [r7, #4]
  16480. 8007256: 2204 movs r2, #4
  16481. 8007258: f883 2035 strb.w r2, [r3, #53] @ 0x35
  16482. /* Disable the stream */
  16483. __HAL_DMA_DISABLE(hdma);
  16484. 800725c: 687b ldr r3, [r7, #4]
  16485. 800725e: 681b ldr r3, [r3, #0]
  16486. 8007260: 4a7a ldr r2, [pc, #488] @ (800744c <HAL_DMA_IRQHandler+0xa08>)
  16487. 8007262: 4293 cmp r3, r2
  16488. 8007264: d04a beq.n 80072fc <HAL_DMA_IRQHandler+0x8b8>
  16489. 8007266: 687b ldr r3, [r7, #4]
  16490. 8007268: 681b ldr r3, [r3, #0]
  16491. 800726a: 4a79 ldr r2, [pc, #484] @ (8007450 <HAL_DMA_IRQHandler+0xa0c>)
  16492. 800726c: 4293 cmp r3, r2
  16493. 800726e: d045 beq.n 80072fc <HAL_DMA_IRQHandler+0x8b8>
  16494. 8007270: 687b ldr r3, [r7, #4]
  16495. 8007272: 681b ldr r3, [r3, #0]
  16496. 8007274: 4a77 ldr r2, [pc, #476] @ (8007454 <HAL_DMA_IRQHandler+0xa10>)
  16497. 8007276: 4293 cmp r3, r2
  16498. 8007278: d040 beq.n 80072fc <HAL_DMA_IRQHandler+0x8b8>
  16499. 800727a: 687b ldr r3, [r7, #4]
  16500. 800727c: 681b ldr r3, [r3, #0]
  16501. 800727e: 4a76 ldr r2, [pc, #472] @ (8007458 <HAL_DMA_IRQHandler+0xa14>)
  16502. 8007280: 4293 cmp r3, r2
  16503. 8007282: d03b beq.n 80072fc <HAL_DMA_IRQHandler+0x8b8>
  16504. 8007284: 687b ldr r3, [r7, #4]
  16505. 8007286: 681b ldr r3, [r3, #0]
  16506. 8007288: 4a74 ldr r2, [pc, #464] @ (800745c <HAL_DMA_IRQHandler+0xa18>)
  16507. 800728a: 4293 cmp r3, r2
  16508. 800728c: d036 beq.n 80072fc <HAL_DMA_IRQHandler+0x8b8>
  16509. 800728e: 687b ldr r3, [r7, #4]
  16510. 8007290: 681b ldr r3, [r3, #0]
  16511. 8007292: 4a73 ldr r2, [pc, #460] @ (8007460 <HAL_DMA_IRQHandler+0xa1c>)
  16512. 8007294: 4293 cmp r3, r2
  16513. 8007296: d031 beq.n 80072fc <HAL_DMA_IRQHandler+0x8b8>
  16514. 8007298: 687b ldr r3, [r7, #4]
  16515. 800729a: 681b ldr r3, [r3, #0]
  16516. 800729c: 4a71 ldr r2, [pc, #452] @ (8007464 <HAL_DMA_IRQHandler+0xa20>)
  16517. 800729e: 4293 cmp r3, r2
  16518. 80072a0: d02c beq.n 80072fc <HAL_DMA_IRQHandler+0x8b8>
  16519. 80072a2: 687b ldr r3, [r7, #4]
  16520. 80072a4: 681b ldr r3, [r3, #0]
  16521. 80072a6: 4a70 ldr r2, [pc, #448] @ (8007468 <HAL_DMA_IRQHandler+0xa24>)
  16522. 80072a8: 4293 cmp r3, r2
  16523. 80072aa: d027 beq.n 80072fc <HAL_DMA_IRQHandler+0x8b8>
  16524. 80072ac: 687b ldr r3, [r7, #4]
  16525. 80072ae: 681b ldr r3, [r3, #0]
  16526. 80072b0: 4a6e ldr r2, [pc, #440] @ (800746c <HAL_DMA_IRQHandler+0xa28>)
  16527. 80072b2: 4293 cmp r3, r2
  16528. 80072b4: d022 beq.n 80072fc <HAL_DMA_IRQHandler+0x8b8>
  16529. 80072b6: 687b ldr r3, [r7, #4]
  16530. 80072b8: 681b ldr r3, [r3, #0]
  16531. 80072ba: 4a6d ldr r2, [pc, #436] @ (8007470 <HAL_DMA_IRQHandler+0xa2c>)
  16532. 80072bc: 4293 cmp r3, r2
  16533. 80072be: d01d beq.n 80072fc <HAL_DMA_IRQHandler+0x8b8>
  16534. 80072c0: 687b ldr r3, [r7, #4]
  16535. 80072c2: 681b ldr r3, [r3, #0]
  16536. 80072c4: 4a6b ldr r2, [pc, #428] @ (8007474 <HAL_DMA_IRQHandler+0xa30>)
  16537. 80072c6: 4293 cmp r3, r2
  16538. 80072c8: d018 beq.n 80072fc <HAL_DMA_IRQHandler+0x8b8>
  16539. 80072ca: 687b ldr r3, [r7, #4]
  16540. 80072cc: 681b ldr r3, [r3, #0]
  16541. 80072ce: 4a6a ldr r2, [pc, #424] @ (8007478 <HAL_DMA_IRQHandler+0xa34>)
  16542. 80072d0: 4293 cmp r3, r2
  16543. 80072d2: d013 beq.n 80072fc <HAL_DMA_IRQHandler+0x8b8>
  16544. 80072d4: 687b ldr r3, [r7, #4]
  16545. 80072d6: 681b ldr r3, [r3, #0]
  16546. 80072d8: 4a68 ldr r2, [pc, #416] @ (800747c <HAL_DMA_IRQHandler+0xa38>)
  16547. 80072da: 4293 cmp r3, r2
  16548. 80072dc: d00e beq.n 80072fc <HAL_DMA_IRQHandler+0x8b8>
  16549. 80072de: 687b ldr r3, [r7, #4]
  16550. 80072e0: 681b ldr r3, [r3, #0]
  16551. 80072e2: 4a67 ldr r2, [pc, #412] @ (8007480 <HAL_DMA_IRQHandler+0xa3c>)
  16552. 80072e4: 4293 cmp r3, r2
  16553. 80072e6: d009 beq.n 80072fc <HAL_DMA_IRQHandler+0x8b8>
  16554. 80072e8: 687b ldr r3, [r7, #4]
  16555. 80072ea: 681b ldr r3, [r3, #0]
  16556. 80072ec: 4a65 ldr r2, [pc, #404] @ (8007484 <HAL_DMA_IRQHandler+0xa40>)
  16557. 80072ee: 4293 cmp r3, r2
  16558. 80072f0: d004 beq.n 80072fc <HAL_DMA_IRQHandler+0x8b8>
  16559. 80072f2: 687b ldr r3, [r7, #4]
  16560. 80072f4: 681b ldr r3, [r3, #0]
  16561. 80072f6: 4a64 ldr r2, [pc, #400] @ (8007488 <HAL_DMA_IRQHandler+0xa44>)
  16562. 80072f8: 4293 cmp r3, r2
  16563. 80072fa: d108 bne.n 800730e <HAL_DMA_IRQHandler+0x8ca>
  16564. 80072fc: 687b ldr r3, [r7, #4]
  16565. 80072fe: 681b ldr r3, [r3, #0]
  16566. 8007300: 681a ldr r2, [r3, #0]
  16567. 8007302: 687b ldr r3, [r7, #4]
  16568. 8007304: 681b ldr r3, [r3, #0]
  16569. 8007306: f022 0201 bic.w r2, r2, #1
  16570. 800730a: 601a str r2, [r3, #0]
  16571. 800730c: e007 b.n 800731e <HAL_DMA_IRQHandler+0x8da>
  16572. 800730e: 687b ldr r3, [r7, #4]
  16573. 8007310: 681b ldr r3, [r3, #0]
  16574. 8007312: 681a ldr r2, [r3, #0]
  16575. 8007314: 687b ldr r3, [r7, #4]
  16576. 8007316: 681b ldr r3, [r3, #0]
  16577. 8007318: f022 0201 bic.w r2, r2, #1
  16578. 800731c: 601a str r2, [r3, #0]
  16579. do
  16580. {
  16581. if (++count > timeout)
  16582. 800731e: 68fb ldr r3, [r7, #12]
  16583. 8007320: 3301 adds r3, #1
  16584. 8007322: 60fb str r3, [r7, #12]
  16585. 8007324: 6a7a ldr r2, [r7, #36] @ 0x24
  16586. 8007326: 429a cmp r2, r3
  16587. 8007328: d307 bcc.n 800733a <HAL_DMA_IRQHandler+0x8f6>
  16588. {
  16589. break;
  16590. }
  16591. }
  16592. while((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_EN) != 0U);
  16593. 800732a: 687b ldr r3, [r7, #4]
  16594. 800732c: 681b ldr r3, [r3, #0]
  16595. 800732e: 681b ldr r3, [r3, #0]
  16596. 8007330: f003 0301 and.w r3, r3, #1
  16597. 8007334: 2b00 cmp r3, #0
  16598. 8007336: d1f2 bne.n 800731e <HAL_DMA_IRQHandler+0x8da>
  16599. 8007338: e000 b.n 800733c <HAL_DMA_IRQHandler+0x8f8>
  16600. break;
  16601. 800733a: bf00 nop
  16602. if((((DMA_Stream_TypeDef *)hdma->Instance)->CR & DMA_SxCR_EN) != 0U)
  16603. 800733c: 687b ldr r3, [r7, #4]
  16604. 800733e: 681b ldr r3, [r3, #0]
  16605. 8007340: 681b ldr r3, [r3, #0]
  16606. 8007342: f003 0301 and.w r3, r3, #1
  16607. 8007346: 2b00 cmp r3, #0
  16608. 8007348: d004 beq.n 8007354 <HAL_DMA_IRQHandler+0x910>
  16609. {
  16610. /* Change the DMA state to error if DMA disable fails */
  16611. hdma->State = HAL_DMA_STATE_ERROR;
  16612. 800734a: 687b ldr r3, [r7, #4]
  16613. 800734c: 2203 movs r2, #3
  16614. 800734e: f883 2035 strb.w r2, [r3, #53] @ 0x35
  16615. 8007352: e003 b.n 800735c <HAL_DMA_IRQHandler+0x918>
  16616. }
  16617. else
  16618. {
  16619. /* Change the DMA state to Ready if DMA disable success */
  16620. hdma->State = HAL_DMA_STATE_READY;
  16621. 8007354: 687b ldr r3, [r7, #4]
  16622. 8007356: 2201 movs r2, #1
  16623. 8007358: f883 2035 strb.w r2, [r3, #53] @ 0x35
  16624. }
  16625. /* Process Unlocked */
  16626. __HAL_UNLOCK(hdma);
  16627. 800735c: 687b ldr r3, [r7, #4]
  16628. 800735e: 2200 movs r2, #0
  16629. 8007360: f883 2034 strb.w r2, [r3, #52] @ 0x34
  16630. }
  16631. if(hdma->XferErrorCallback != NULL)
  16632. 8007364: 687b ldr r3, [r7, #4]
  16633. 8007366: 6cdb ldr r3, [r3, #76] @ 0x4c
  16634. 8007368: 2b00 cmp r3, #0
  16635. 800736a: f000 8272 beq.w 8007852 <HAL_DMA_IRQHandler+0xe0e>
  16636. {
  16637. /* Transfer error callback */
  16638. hdma->XferErrorCallback(hdma);
  16639. 800736e: 687b ldr r3, [r7, #4]
  16640. 8007370: 6cdb ldr r3, [r3, #76] @ 0x4c
  16641. 8007372: 6878 ldr r0, [r7, #4]
  16642. 8007374: 4798 blx r3
  16643. 8007376: e26c b.n 8007852 <HAL_DMA_IRQHandler+0xe0e>
  16644. }
  16645. }
  16646. }
  16647. else if(IS_BDMA_CHANNEL_INSTANCE(hdma->Instance) != 0U) /* BDMA instance(s) */
  16648. 8007378: 687b ldr r3, [r7, #4]
  16649. 800737a: 681b ldr r3, [r3, #0]
  16650. 800737c: 4a43 ldr r2, [pc, #268] @ (800748c <HAL_DMA_IRQHandler+0xa48>)
  16651. 800737e: 4293 cmp r3, r2
  16652. 8007380: d022 beq.n 80073c8 <HAL_DMA_IRQHandler+0x984>
  16653. 8007382: 687b ldr r3, [r7, #4]
  16654. 8007384: 681b ldr r3, [r3, #0]
  16655. 8007386: 4a42 ldr r2, [pc, #264] @ (8007490 <HAL_DMA_IRQHandler+0xa4c>)
  16656. 8007388: 4293 cmp r3, r2
  16657. 800738a: d01d beq.n 80073c8 <HAL_DMA_IRQHandler+0x984>
  16658. 800738c: 687b ldr r3, [r7, #4]
  16659. 800738e: 681b ldr r3, [r3, #0]
  16660. 8007390: 4a40 ldr r2, [pc, #256] @ (8007494 <HAL_DMA_IRQHandler+0xa50>)
  16661. 8007392: 4293 cmp r3, r2
  16662. 8007394: d018 beq.n 80073c8 <HAL_DMA_IRQHandler+0x984>
  16663. 8007396: 687b ldr r3, [r7, #4]
  16664. 8007398: 681b ldr r3, [r3, #0]
  16665. 800739a: 4a3f ldr r2, [pc, #252] @ (8007498 <HAL_DMA_IRQHandler+0xa54>)
  16666. 800739c: 4293 cmp r3, r2
  16667. 800739e: d013 beq.n 80073c8 <HAL_DMA_IRQHandler+0x984>
  16668. 80073a0: 687b ldr r3, [r7, #4]
  16669. 80073a2: 681b ldr r3, [r3, #0]
  16670. 80073a4: 4a3d ldr r2, [pc, #244] @ (800749c <HAL_DMA_IRQHandler+0xa58>)
  16671. 80073a6: 4293 cmp r3, r2
  16672. 80073a8: d00e beq.n 80073c8 <HAL_DMA_IRQHandler+0x984>
  16673. 80073aa: 687b ldr r3, [r7, #4]
  16674. 80073ac: 681b ldr r3, [r3, #0]
  16675. 80073ae: 4a3c ldr r2, [pc, #240] @ (80074a0 <HAL_DMA_IRQHandler+0xa5c>)
  16676. 80073b0: 4293 cmp r3, r2
  16677. 80073b2: d009 beq.n 80073c8 <HAL_DMA_IRQHandler+0x984>
  16678. 80073b4: 687b ldr r3, [r7, #4]
  16679. 80073b6: 681b ldr r3, [r3, #0]
  16680. 80073b8: 4a3a ldr r2, [pc, #232] @ (80074a4 <HAL_DMA_IRQHandler+0xa60>)
  16681. 80073ba: 4293 cmp r3, r2
  16682. 80073bc: d004 beq.n 80073c8 <HAL_DMA_IRQHandler+0x984>
  16683. 80073be: 687b ldr r3, [r7, #4]
  16684. 80073c0: 681b ldr r3, [r3, #0]
  16685. 80073c2: 4a39 ldr r2, [pc, #228] @ (80074a8 <HAL_DMA_IRQHandler+0xa64>)
  16686. 80073c4: 4293 cmp r3, r2
  16687. 80073c6: d101 bne.n 80073cc <HAL_DMA_IRQHandler+0x988>
  16688. 80073c8: 2301 movs r3, #1
  16689. 80073ca: e000 b.n 80073ce <HAL_DMA_IRQHandler+0x98a>
  16690. 80073cc: 2300 movs r3, #0
  16691. 80073ce: 2b00 cmp r3, #0
  16692. 80073d0: f000 823f beq.w 8007852 <HAL_DMA_IRQHandler+0xe0e>
  16693. {
  16694. ccr_reg = (((BDMA_Channel_TypeDef *)hdma->Instance)->CCR);
  16695. 80073d4: 687b ldr r3, [r7, #4]
  16696. 80073d6: 681b ldr r3, [r3, #0]
  16697. 80073d8: 681b ldr r3, [r3, #0]
  16698. 80073da: 613b str r3, [r7, #16]
  16699. /* Half Transfer Complete Interrupt management ******************************/
  16700. if (((tmpisr_bdma & (BDMA_FLAG_HT0 << (hdma->StreamIndex & 0x1FU))) != 0U) && ((ccr_reg & BDMA_CCR_HTIE) != 0U))
  16701. 80073dc: 687b ldr r3, [r7, #4]
  16702. 80073de: 6ddb ldr r3, [r3, #92] @ 0x5c
  16703. 80073e0: f003 031f and.w r3, r3, #31
  16704. 80073e4: 2204 movs r2, #4
  16705. 80073e6: 409a lsls r2, r3
  16706. 80073e8: 697b ldr r3, [r7, #20]
  16707. 80073ea: 4013 ands r3, r2
  16708. 80073ec: 2b00 cmp r3, #0
  16709. 80073ee: f000 80cd beq.w 800758c <HAL_DMA_IRQHandler+0xb48>
  16710. 80073f2: 693b ldr r3, [r7, #16]
  16711. 80073f4: f003 0304 and.w r3, r3, #4
  16712. 80073f8: 2b00 cmp r3, #0
  16713. 80073fa: f000 80c7 beq.w 800758c <HAL_DMA_IRQHandler+0xb48>
  16714. {
  16715. /* Clear the half transfer complete flag */
  16716. regs_bdma->IFCR = (BDMA_ISR_HTIF0 << (hdma->StreamIndex & 0x1FU));
  16717. 80073fe: 687b ldr r3, [r7, #4]
  16718. 8007400: 6ddb ldr r3, [r3, #92] @ 0x5c
  16719. 8007402: f003 031f and.w r3, r3, #31
  16720. 8007406: 2204 movs r2, #4
  16721. 8007408: 409a lsls r2, r3
  16722. 800740a: 69fb ldr r3, [r7, #28]
  16723. 800740c: 605a str r2, [r3, #4]
  16724. /* Disable the transfer complete interrupt if the DMA mode is Double Buffering */
  16725. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  16726. 800740e: 693b ldr r3, [r7, #16]
  16727. 8007410: f403 4300 and.w r3, r3, #32768 @ 0x8000
  16728. 8007414: 2b00 cmp r3, #0
  16729. 8007416: d049 beq.n 80074ac <HAL_DMA_IRQHandler+0xa68>
  16730. {
  16731. /* Current memory buffer used is Memory 0 */
  16732. if((ccr_reg & BDMA_CCR_CT) == 0U)
  16733. 8007418: 693b ldr r3, [r7, #16]
  16734. 800741a: f403 3380 and.w r3, r3, #65536 @ 0x10000
  16735. 800741e: 2b00 cmp r3, #0
  16736. 8007420: d109 bne.n 8007436 <HAL_DMA_IRQHandler+0x9f2>
  16737. {
  16738. if(hdma->XferM1HalfCpltCallback != NULL)
  16739. 8007422: 687b ldr r3, [r7, #4]
  16740. 8007424: 6c9b ldr r3, [r3, #72] @ 0x48
  16741. 8007426: 2b00 cmp r3, #0
  16742. 8007428: f000 8210 beq.w 800784c <HAL_DMA_IRQHandler+0xe08>
  16743. {
  16744. /* Half transfer Callback for Memory 1 */
  16745. hdma->XferM1HalfCpltCallback(hdma);
  16746. 800742c: 687b ldr r3, [r7, #4]
  16747. 800742e: 6c9b ldr r3, [r3, #72] @ 0x48
  16748. 8007430: 6878 ldr r0, [r7, #4]
  16749. 8007432: 4798 blx r3
  16750. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  16751. 8007434: e20a b.n 800784c <HAL_DMA_IRQHandler+0xe08>
  16752. }
  16753. }
  16754. /* Current memory buffer used is Memory 1 */
  16755. else
  16756. {
  16757. if(hdma->XferHalfCpltCallback != NULL)
  16758. 8007436: 687b ldr r3, [r7, #4]
  16759. 8007438: 6c1b ldr r3, [r3, #64] @ 0x40
  16760. 800743a: 2b00 cmp r3, #0
  16761. 800743c: f000 8206 beq.w 800784c <HAL_DMA_IRQHandler+0xe08>
  16762. {
  16763. /* Half transfer Callback for Memory 0 */
  16764. hdma->XferHalfCpltCallback(hdma);
  16765. 8007440: 687b ldr r3, [r7, #4]
  16766. 8007442: 6c1b ldr r3, [r3, #64] @ 0x40
  16767. 8007444: 6878 ldr r0, [r7, #4]
  16768. 8007446: 4798 blx r3
  16769. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  16770. 8007448: e200 b.n 800784c <HAL_DMA_IRQHandler+0xe08>
  16771. 800744a: bf00 nop
  16772. 800744c: 40020010 .word 0x40020010
  16773. 8007450: 40020028 .word 0x40020028
  16774. 8007454: 40020040 .word 0x40020040
  16775. 8007458: 40020058 .word 0x40020058
  16776. 800745c: 40020070 .word 0x40020070
  16777. 8007460: 40020088 .word 0x40020088
  16778. 8007464: 400200a0 .word 0x400200a0
  16779. 8007468: 400200b8 .word 0x400200b8
  16780. 800746c: 40020410 .word 0x40020410
  16781. 8007470: 40020428 .word 0x40020428
  16782. 8007474: 40020440 .word 0x40020440
  16783. 8007478: 40020458 .word 0x40020458
  16784. 800747c: 40020470 .word 0x40020470
  16785. 8007480: 40020488 .word 0x40020488
  16786. 8007484: 400204a0 .word 0x400204a0
  16787. 8007488: 400204b8 .word 0x400204b8
  16788. 800748c: 58025408 .word 0x58025408
  16789. 8007490: 5802541c .word 0x5802541c
  16790. 8007494: 58025430 .word 0x58025430
  16791. 8007498: 58025444 .word 0x58025444
  16792. 800749c: 58025458 .word 0x58025458
  16793. 80074a0: 5802546c .word 0x5802546c
  16794. 80074a4: 58025480 .word 0x58025480
  16795. 80074a8: 58025494 .word 0x58025494
  16796. }
  16797. }
  16798. }
  16799. else
  16800. {
  16801. if((ccr_reg & BDMA_CCR_CIRC) == 0U)
  16802. 80074ac: 693b ldr r3, [r7, #16]
  16803. 80074ae: f003 0320 and.w r3, r3, #32
  16804. 80074b2: 2b00 cmp r3, #0
  16805. 80074b4: d160 bne.n 8007578 <HAL_DMA_IRQHandler+0xb34>
  16806. {
  16807. /* Disable the half transfer interrupt */
  16808. __HAL_DMA_DISABLE_IT(hdma, DMA_IT_HT);
  16809. 80074b6: 687b ldr r3, [r7, #4]
  16810. 80074b8: 681b ldr r3, [r3, #0]
  16811. 80074ba: 4a7f ldr r2, [pc, #508] @ (80076b8 <HAL_DMA_IRQHandler+0xc74>)
  16812. 80074bc: 4293 cmp r3, r2
  16813. 80074be: d04a beq.n 8007556 <HAL_DMA_IRQHandler+0xb12>
  16814. 80074c0: 687b ldr r3, [r7, #4]
  16815. 80074c2: 681b ldr r3, [r3, #0]
  16816. 80074c4: 4a7d ldr r2, [pc, #500] @ (80076bc <HAL_DMA_IRQHandler+0xc78>)
  16817. 80074c6: 4293 cmp r3, r2
  16818. 80074c8: d045 beq.n 8007556 <HAL_DMA_IRQHandler+0xb12>
  16819. 80074ca: 687b ldr r3, [r7, #4]
  16820. 80074cc: 681b ldr r3, [r3, #0]
  16821. 80074ce: 4a7c ldr r2, [pc, #496] @ (80076c0 <HAL_DMA_IRQHandler+0xc7c>)
  16822. 80074d0: 4293 cmp r3, r2
  16823. 80074d2: d040 beq.n 8007556 <HAL_DMA_IRQHandler+0xb12>
  16824. 80074d4: 687b ldr r3, [r7, #4]
  16825. 80074d6: 681b ldr r3, [r3, #0]
  16826. 80074d8: 4a7a ldr r2, [pc, #488] @ (80076c4 <HAL_DMA_IRQHandler+0xc80>)
  16827. 80074da: 4293 cmp r3, r2
  16828. 80074dc: d03b beq.n 8007556 <HAL_DMA_IRQHandler+0xb12>
  16829. 80074de: 687b ldr r3, [r7, #4]
  16830. 80074e0: 681b ldr r3, [r3, #0]
  16831. 80074e2: 4a79 ldr r2, [pc, #484] @ (80076c8 <HAL_DMA_IRQHandler+0xc84>)
  16832. 80074e4: 4293 cmp r3, r2
  16833. 80074e6: d036 beq.n 8007556 <HAL_DMA_IRQHandler+0xb12>
  16834. 80074e8: 687b ldr r3, [r7, #4]
  16835. 80074ea: 681b ldr r3, [r3, #0]
  16836. 80074ec: 4a77 ldr r2, [pc, #476] @ (80076cc <HAL_DMA_IRQHandler+0xc88>)
  16837. 80074ee: 4293 cmp r3, r2
  16838. 80074f0: d031 beq.n 8007556 <HAL_DMA_IRQHandler+0xb12>
  16839. 80074f2: 687b ldr r3, [r7, #4]
  16840. 80074f4: 681b ldr r3, [r3, #0]
  16841. 80074f6: 4a76 ldr r2, [pc, #472] @ (80076d0 <HAL_DMA_IRQHandler+0xc8c>)
  16842. 80074f8: 4293 cmp r3, r2
  16843. 80074fa: d02c beq.n 8007556 <HAL_DMA_IRQHandler+0xb12>
  16844. 80074fc: 687b ldr r3, [r7, #4]
  16845. 80074fe: 681b ldr r3, [r3, #0]
  16846. 8007500: 4a74 ldr r2, [pc, #464] @ (80076d4 <HAL_DMA_IRQHandler+0xc90>)
  16847. 8007502: 4293 cmp r3, r2
  16848. 8007504: d027 beq.n 8007556 <HAL_DMA_IRQHandler+0xb12>
  16849. 8007506: 687b ldr r3, [r7, #4]
  16850. 8007508: 681b ldr r3, [r3, #0]
  16851. 800750a: 4a73 ldr r2, [pc, #460] @ (80076d8 <HAL_DMA_IRQHandler+0xc94>)
  16852. 800750c: 4293 cmp r3, r2
  16853. 800750e: d022 beq.n 8007556 <HAL_DMA_IRQHandler+0xb12>
  16854. 8007510: 687b ldr r3, [r7, #4]
  16855. 8007512: 681b ldr r3, [r3, #0]
  16856. 8007514: 4a71 ldr r2, [pc, #452] @ (80076dc <HAL_DMA_IRQHandler+0xc98>)
  16857. 8007516: 4293 cmp r3, r2
  16858. 8007518: d01d beq.n 8007556 <HAL_DMA_IRQHandler+0xb12>
  16859. 800751a: 687b ldr r3, [r7, #4]
  16860. 800751c: 681b ldr r3, [r3, #0]
  16861. 800751e: 4a70 ldr r2, [pc, #448] @ (80076e0 <HAL_DMA_IRQHandler+0xc9c>)
  16862. 8007520: 4293 cmp r3, r2
  16863. 8007522: d018 beq.n 8007556 <HAL_DMA_IRQHandler+0xb12>
  16864. 8007524: 687b ldr r3, [r7, #4]
  16865. 8007526: 681b ldr r3, [r3, #0]
  16866. 8007528: 4a6e ldr r2, [pc, #440] @ (80076e4 <HAL_DMA_IRQHandler+0xca0>)
  16867. 800752a: 4293 cmp r3, r2
  16868. 800752c: d013 beq.n 8007556 <HAL_DMA_IRQHandler+0xb12>
  16869. 800752e: 687b ldr r3, [r7, #4]
  16870. 8007530: 681b ldr r3, [r3, #0]
  16871. 8007532: 4a6d ldr r2, [pc, #436] @ (80076e8 <HAL_DMA_IRQHandler+0xca4>)
  16872. 8007534: 4293 cmp r3, r2
  16873. 8007536: d00e beq.n 8007556 <HAL_DMA_IRQHandler+0xb12>
  16874. 8007538: 687b ldr r3, [r7, #4]
  16875. 800753a: 681b ldr r3, [r3, #0]
  16876. 800753c: 4a6b ldr r2, [pc, #428] @ (80076ec <HAL_DMA_IRQHandler+0xca8>)
  16877. 800753e: 4293 cmp r3, r2
  16878. 8007540: d009 beq.n 8007556 <HAL_DMA_IRQHandler+0xb12>
  16879. 8007542: 687b ldr r3, [r7, #4]
  16880. 8007544: 681b ldr r3, [r3, #0]
  16881. 8007546: 4a6a ldr r2, [pc, #424] @ (80076f0 <HAL_DMA_IRQHandler+0xcac>)
  16882. 8007548: 4293 cmp r3, r2
  16883. 800754a: d004 beq.n 8007556 <HAL_DMA_IRQHandler+0xb12>
  16884. 800754c: 687b ldr r3, [r7, #4]
  16885. 800754e: 681b ldr r3, [r3, #0]
  16886. 8007550: 4a68 ldr r2, [pc, #416] @ (80076f4 <HAL_DMA_IRQHandler+0xcb0>)
  16887. 8007552: 4293 cmp r3, r2
  16888. 8007554: d108 bne.n 8007568 <HAL_DMA_IRQHandler+0xb24>
  16889. 8007556: 687b ldr r3, [r7, #4]
  16890. 8007558: 681b ldr r3, [r3, #0]
  16891. 800755a: 681a ldr r2, [r3, #0]
  16892. 800755c: 687b ldr r3, [r7, #4]
  16893. 800755e: 681b ldr r3, [r3, #0]
  16894. 8007560: f022 0208 bic.w r2, r2, #8
  16895. 8007564: 601a str r2, [r3, #0]
  16896. 8007566: e007 b.n 8007578 <HAL_DMA_IRQHandler+0xb34>
  16897. 8007568: 687b ldr r3, [r7, #4]
  16898. 800756a: 681b ldr r3, [r3, #0]
  16899. 800756c: 681a ldr r2, [r3, #0]
  16900. 800756e: 687b ldr r3, [r7, #4]
  16901. 8007570: 681b ldr r3, [r3, #0]
  16902. 8007572: f022 0204 bic.w r2, r2, #4
  16903. 8007576: 601a str r2, [r3, #0]
  16904. }
  16905. /* DMA peripheral state is not updated in Half Transfer */
  16906. /* but in Transfer Complete case */
  16907. if(hdma->XferHalfCpltCallback != NULL)
  16908. 8007578: 687b ldr r3, [r7, #4]
  16909. 800757a: 6c1b ldr r3, [r3, #64] @ 0x40
  16910. 800757c: 2b00 cmp r3, #0
  16911. 800757e: f000 8165 beq.w 800784c <HAL_DMA_IRQHandler+0xe08>
  16912. {
  16913. /* Half transfer callback */
  16914. hdma->XferHalfCpltCallback(hdma);
  16915. 8007582: 687b ldr r3, [r7, #4]
  16916. 8007584: 6c1b ldr r3, [r3, #64] @ 0x40
  16917. 8007586: 6878 ldr r0, [r7, #4]
  16918. 8007588: 4798 blx r3
  16919. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  16920. 800758a: e15f b.n 800784c <HAL_DMA_IRQHandler+0xe08>
  16921. }
  16922. }
  16923. }
  16924. /* Transfer Complete Interrupt management ***********************************/
  16925. else if (((tmpisr_bdma & (BDMA_FLAG_TC0 << (hdma->StreamIndex & 0x1FU))) != 0U) && ((ccr_reg & BDMA_CCR_TCIE) != 0U))
  16926. 800758c: 687b ldr r3, [r7, #4]
  16927. 800758e: 6ddb ldr r3, [r3, #92] @ 0x5c
  16928. 8007590: f003 031f and.w r3, r3, #31
  16929. 8007594: 2202 movs r2, #2
  16930. 8007596: 409a lsls r2, r3
  16931. 8007598: 697b ldr r3, [r7, #20]
  16932. 800759a: 4013 ands r3, r2
  16933. 800759c: 2b00 cmp r3, #0
  16934. 800759e: f000 80c5 beq.w 800772c <HAL_DMA_IRQHandler+0xce8>
  16935. 80075a2: 693b ldr r3, [r7, #16]
  16936. 80075a4: f003 0302 and.w r3, r3, #2
  16937. 80075a8: 2b00 cmp r3, #0
  16938. 80075aa: f000 80bf beq.w 800772c <HAL_DMA_IRQHandler+0xce8>
  16939. {
  16940. /* Clear the transfer complete flag */
  16941. regs_bdma->IFCR = (BDMA_ISR_TCIF0) << (hdma->StreamIndex & 0x1FU);
  16942. 80075ae: 687b ldr r3, [r7, #4]
  16943. 80075b0: 6ddb ldr r3, [r3, #92] @ 0x5c
  16944. 80075b2: f003 031f and.w r3, r3, #31
  16945. 80075b6: 2202 movs r2, #2
  16946. 80075b8: 409a lsls r2, r3
  16947. 80075ba: 69fb ldr r3, [r7, #28]
  16948. 80075bc: 605a str r2, [r3, #4]
  16949. /* Disable the transfer complete interrupt if the DMA mode is Double Buffering */
  16950. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  16951. 80075be: 693b ldr r3, [r7, #16]
  16952. 80075c0: f403 4300 and.w r3, r3, #32768 @ 0x8000
  16953. 80075c4: 2b00 cmp r3, #0
  16954. 80075c6: d018 beq.n 80075fa <HAL_DMA_IRQHandler+0xbb6>
  16955. {
  16956. /* Current memory buffer used is Memory 0 */
  16957. if((ccr_reg & BDMA_CCR_CT) == 0U)
  16958. 80075c8: 693b ldr r3, [r7, #16]
  16959. 80075ca: f403 3380 and.w r3, r3, #65536 @ 0x10000
  16960. 80075ce: 2b00 cmp r3, #0
  16961. 80075d0: d109 bne.n 80075e6 <HAL_DMA_IRQHandler+0xba2>
  16962. {
  16963. if(hdma->XferM1CpltCallback != NULL)
  16964. 80075d2: 687b ldr r3, [r7, #4]
  16965. 80075d4: 6c5b ldr r3, [r3, #68] @ 0x44
  16966. 80075d6: 2b00 cmp r3, #0
  16967. 80075d8: f000 813a beq.w 8007850 <HAL_DMA_IRQHandler+0xe0c>
  16968. {
  16969. /* Transfer complete Callback for Memory 1 */
  16970. hdma->XferM1CpltCallback(hdma);
  16971. 80075dc: 687b ldr r3, [r7, #4]
  16972. 80075de: 6c5b ldr r3, [r3, #68] @ 0x44
  16973. 80075e0: 6878 ldr r0, [r7, #4]
  16974. 80075e2: 4798 blx r3
  16975. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  16976. 80075e4: e134 b.n 8007850 <HAL_DMA_IRQHandler+0xe0c>
  16977. }
  16978. }
  16979. /* Current memory buffer used is Memory 1 */
  16980. else
  16981. {
  16982. if(hdma->XferCpltCallback != NULL)
  16983. 80075e6: 687b ldr r3, [r7, #4]
  16984. 80075e8: 6bdb ldr r3, [r3, #60] @ 0x3c
  16985. 80075ea: 2b00 cmp r3, #0
  16986. 80075ec: f000 8130 beq.w 8007850 <HAL_DMA_IRQHandler+0xe0c>
  16987. {
  16988. /* Transfer complete Callback for Memory 0 */
  16989. hdma->XferCpltCallback(hdma);
  16990. 80075f0: 687b ldr r3, [r7, #4]
  16991. 80075f2: 6bdb ldr r3, [r3, #60] @ 0x3c
  16992. 80075f4: 6878 ldr r0, [r7, #4]
  16993. 80075f6: 4798 blx r3
  16994. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  16995. 80075f8: e12a b.n 8007850 <HAL_DMA_IRQHandler+0xe0c>
  16996. }
  16997. }
  16998. }
  16999. else
  17000. {
  17001. if((ccr_reg & BDMA_CCR_CIRC) == 0U)
  17002. 80075fa: 693b ldr r3, [r7, #16]
  17003. 80075fc: f003 0320 and.w r3, r3, #32
  17004. 8007600: 2b00 cmp r3, #0
  17005. 8007602: f040 8089 bne.w 8007718 <HAL_DMA_IRQHandler+0xcd4>
  17006. {
  17007. /* Disable the transfer complete and error interrupt, if the DMA mode is not CIRCULAR */
  17008. __HAL_DMA_DISABLE_IT(hdma, DMA_IT_TE | DMA_IT_TC);
  17009. 8007606: 687b ldr r3, [r7, #4]
  17010. 8007608: 681b ldr r3, [r3, #0]
  17011. 800760a: 4a2b ldr r2, [pc, #172] @ (80076b8 <HAL_DMA_IRQHandler+0xc74>)
  17012. 800760c: 4293 cmp r3, r2
  17013. 800760e: d04a beq.n 80076a6 <HAL_DMA_IRQHandler+0xc62>
  17014. 8007610: 687b ldr r3, [r7, #4]
  17015. 8007612: 681b ldr r3, [r3, #0]
  17016. 8007614: 4a29 ldr r2, [pc, #164] @ (80076bc <HAL_DMA_IRQHandler+0xc78>)
  17017. 8007616: 4293 cmp r3, r2
  17018. 8007618: d045 beq.n 80076a6 <HAL_DMA_IRQHandler+0xc62>
  17019. 800761a: 687b ldr r3, [r7, #4]
  17020. 800761c: 681b ldr r3, [r3, #0]
  17021. 800761e: 4a28 ldr r2, [pc, #160] @ (80076c0 <HAL_DMA_IRQHandler+0xc7c>)
  17022. 8007620: 4293 cmp r3, r2
  17023. 8007622: d040 beq.n 80076a6 <HAL_DMA_IRQHandler+0xc62>
  17024. 8007624: 687b ldr r3, [r7, #4]
  17025. 8007626: 681b ldr r3, [r3, #0]
  17026. 8007628: 4a26 ldr r2, [pc, #152] @ (80076c4 <HAL_DMA_IRQHandler+0xc80>)
  17027. 800762a: 4293 cmp r3, r2
  17028. 800762c: d03b beq.n 80076a6 <HAL_DMA_IRQHandler+0xc62>
  17029. 800762e: 687b ldr r3, [r7, #4]
  17030. 8007630: 681b ldr r3, [r3, #0]
  17031. 8007632: 4a25 ldr r2, [pc, #148] @ (80076c8 <HAL_DMA_IRQHandler+0xc84>)
  17032. 8007634: 4293 cmp r3, r2
  17033. 8007636: d036 beq.n 80076a6 <HAL_DMA_IRQHandler+0xc62>
  17034. 8007638: 687b ldr r3, [r7, #4]
  17035. 800763a: 681b ldr r3, [r3, #0]
  17036. 800763c: 4a23 ldr r2, [pc, #140] @ (80076cc <HAL_DMA_IRQHandler+0xc88>)
  17037. 800763e: 4293 cmp r3, r2
  17038. 8007640: d031 beq.n 80076a6 <HAL_DMA_IRQHandler+0xc62>
  17039. 8007642: 687b ldr r3, [r7, #4]
  17040. 8007644: 681b ldr r3, [r3, #0]
  17041. 8007646: 4a22 ldr r2, [pc, #136] @ (80076d0 <HAL_DMA_IRQHandler+0xc8c>)
  17042. 8007648: 4293 cmp r3, r2
  17043. 800764a: d02c beq.n 80076a6 <HAL_DMA_IRQHandler+0xc62>
  17044. 800764c: 687b ldr r3, [r7, #4]
  17045. 800764e: 681b ldr r3, [r3, #0]
  17046. 8007650: 4a20 ldr r2, [pc, #128] @ (80076d4 <HAL_DMA_IRQHandler+0xc90>)
  17047. 8007652: 4293 cmp r3, r2
  17048. 8007654: d027 beq.n 80076a6 <HAL_DMA_IRQHandler+0xc62>
  17049. 8007656: 687b ldr r3, [r7, #4]
  17050. 8007658: 681b ldr r3, [r3, #0]
  17051. 800765a: 4a1f ldr r2, [pc, #124] @ (80076d8 <HAL_DMA_IRQHandler+0xc94>)
  17052. 800765c: 4293 cmp r3, r2
  17053. 800765e: d022 beq.n 80076a6 <HAL_DMA_IRQHandler+0xc62>
  17054. 8007660: 687b ldr r3, [r7, #4]
  17055. 8007662: 681b ldr r3, [r3, #0]
  17056. 8007664: 4a1d ldr r2, [pc, #116] @ (80076dc <HAL_DMA_IRQHandler+0xc98>)
  17057. 8007666: 4293 cmp r3, r2
  17058. 8007668: d01d beq.n 80076a6 <HAL_DMA_IRQHandler+0xc62>
  17059. 800766a: 687b ldr r3, [r7, #4]
  17060. 800766c: 681b ldr r3, [r3, #0]
  17061. 800766e: 4a1c ldr r2, [pc, #112] @ (80076e0 <HAL_DMA_IRQHandler+0xc9c>)
  17062. 8007670: 4293 cmp r3, r2
  17063. 8007672: d018 beq.n 80076a6 <HAL_DMA_IRQHandler+0xc62>
  17064. 8007674: 687b ldr r3, [r7, #4]
  17065. 8007676: 681b ldr r3, [r3, #0]
  17066. 8007678: 4a1a ldr r2, [pc, #104] @ (80076e4 <HAL_DMA_IRQHandler+0xca0>)
  17067. 800767a: 4293 cmp r3, r2
  17068. 800767c: d013 beq.n 80076a6 <HAL_DMA_IRQHandler+0xc62>
  17069. 800767e: 687b ldr r3, [r7, #4]
  17070. 8007680: 681b ldr r3, [r3, #0]
  17071. 8007682: 4a19 ldr r2, [pc, #100] @ (80076e8 <HAL_DMA_IRQHandler+0xca4>)
  17072. 8007684: 4293 cmp r3, r2
  17073. 8007686: d00e beq.n 80076a6 <HAL_DMA_IRQHandler+0xc62>
  17074. 8007688: 687b ldr r3, [r7, #4]
  17075. 800768a: 681b ldr r3, [r3, #0]
  17076. 800768c: 4a17 ldr r2, [pc, #92] @ (80076ec <HAL_DMA_IRQHandler+0xca8>)
  17077. 800768e: 4293 cmp r3, r2
  17078. 8007690: d009 beq.n 80076a6 <HAL_DMA_IRQHandler+0xc62>
  17079. 8007692: 687b ldr r3, [r7, #4]
  17080. 8007694: 681b ldr r3, [r3, #0]
  17081. 8007696: 4a16 ldr r2, [pc, #88] @ (80076f0 <HAL_DMA_IRQHandler+0xcac>)
  17082. 8007698: 4293 cmp r3, r2
  17083. 800769a: d004 beq.n 80076a6 <HAL_DMA_IRQHandler+0xc62>
  17084. 800769c: 687b ldr r3, [r7, #4]
  17085. 800769e: 681b ldr r3, [r3, #0]
  17086. 80076a0: 4a14 ldr r2, [pc, #80] @ (80076f4 <HAL_DMA_IRQHandler+0xcb0>)
  17087. 80076a2: 4293 cmp r3, r2
  17088. 80076a4: d128 bne.n 80076f8 <HAL_DMA_IRQHandler+0xcb4>
  17089. 80076a6: 687b ldr r3, [r7, #4]
  17090. 80076a8: 681b ldr r3, [r3, #0]
  17091. 80076aa: 681a ldr r2, [r3, #0]
  17092. 80076ac: 687b ldr r3, [r7, #4]
  17093. 80076ae: 681b ldr r3, [r3, #0]
  17094. 80076b0: f022 0214 bic.w r2, r2, #20
  17095. 80076b4: 601a str r2, [r3, #0]
  17096. 80076b6: e027 b.n 8007708 <HAL_DMA_IRQHandler+0xcc4>
  17097. 80076b8: 40020010 .word 0x40020010
  17098. 80076bc: 40020028 .word 0x40020028
  17099. 80076c0: 40020040 .word 0x40020040
  17100. 80076c4: 40020058 .word 0x40020058
  17101. 80076c8: 40020070 .word 0x40020070
  17102. 80076cc: 40020088 .word 0x40020088
  17103. 80076d0: 400200a0 .word 0x400200a0
  17104. 80076d4: 400200b8 .word 0x400200b8
  17105. 80076d8: 40020410 .word 0x40020410
  17106. 80076dc: 40020428 .word 0x40020428
  17107. 80076e0: 40020440 .word 0x40020440
  17108. 80076e4: 40020458 .word 0x40020458
  17109. 80076e8: 40020470 .word 0x40020470
  17110. 80076ec: 40020488 .word 0x40020488
  17111. 80076f0: 400204a0 .word 0x400204a0
  17112. 80076f4: 400204b8 .word 0x400204b8
  17113. 80076f8: 687b ldr r3, [r7, #4]
  17114. 80076fa: 681b ldr r3, [r3, #0]
  17115. 80076fc: 681a ldr r2, [r3, #0]
  17116. 80076fe: 687b ldr r3, [r7, #4]
  17117. 8007700: 681b ldr r3, [r3, #0]
  17118. 8007702: f022 020a bic.w r2, r2, #10
  17119. 8007706: 601a str r2, [r3, #0]
  17120. /* Change the DMA state */
  17121. hdma->State = HAL_DMA_STATE_READY;
  17122. 8007708: 687b ldr r3, [r7, #4]
  17123. 800770a: 2201 movs r2, #1
  17124. 800770c: f883 2035 strb.w r2, [r3, #53] @ 0x35
  17125. /* Process Unlocked */
  17126. __HAL_UNLOCK(hdma);
  17127. 8007710: 687b ldr r3, [r7, #4]
  17128. 8007712: 2200 movs r2, #0
  17129. 8007714: f883 2034 strb.w r2, [r3, #52] @ 0x34
  17130. }
  17131. if(hdma->XferCpltCallback != NULL)
  17132. 8007718: 687b ldr r3, [r7, #4]
  17133. 800771a: 6bdb ldr r3, [r3, #60] @ 0x3c
  17134. 800771c: 2b00 cmp r3, #0
  17135. 800771e: f000 8097 beq.w 8007850 <HAL_DMA_IRQHandler+0xe0c>
  17136. {
  17137. /* Transfer complete callback */
  17138. hdma->XferCpltCallback(hdma);
  17139. 8007722: 687b ldr r3, [r7, #4]
  17140. 8007724: 6bdb ldr r3, [r3, #60] @ 0x3c
  17141. 8007726: 6878 ldr r0, [r7, #4]
  17142. 8007728: 4798 blx r3
  17143. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  17144. 800772a: e091 b.n 8007850 <HAL_DMA_IRQHandler+0xe0c>
  17145. }
  17146. }
  17147. }
  17148. /* Transfer Error Interrupt management **************************************/
  17149. else if (((tmpisr_bdma & (BDMA_FLAG_TE0 << (hdma->StreamIndex & 0x1FU))) != 0U) && ((ccr_reg & BDMA_CCR_TEIE) != 0U))
  17150. 800772c: 687b ldr r3, [r7, #4]
  17151. 800772e: 6ddb ldr r3, [r3, #92] @ 0x5c
  17152. 8007730: f003 031f and.w r3, r3, #31
  17153. 8007734: 2208 movs r2, #8
  17154. 8007736: 409a lsls r2, r3
  17155. 8007738: 697b ldr r3, [r7, #20]
  17156. 800773a: 4013 ands r3, r2
  17157. 800773c: 2b00 cmp r3, #0
  17158. 800773e: f000 8088 beq.w 8007852 <HAL_DMA_IRQHandler+0xe0e>
  17159. 8007742: 693b ldr r3, [r7, #16]
  17160. 8007744: f003 0308 and.w r3, r3, #8
  17161. 8007748: 2b00 cmp r3, #0
  17162. 800774a: f000 8082 beq.w 8007852 <HAL_DMA_IRQHandler+0xe0e>
  17163. {
  17164. /* When a DMA transfer error occurs */
  17165. /* A hardware clear of its EN bits is performed */
  17166. /* Disable ALL DMA IT */
  17167. __HAL_DMA_DISABLE_IT(hdma, (DMA_IT_TC | DMA_IT_HT | DMA_IT_TE));
  17168. 800774e: 687b ldr r3, [r7, #4]
  17169. 8007750: 681b ldr r3, [r3, #0]
  17170. 8007752: 4a41 ldr r2, [pc, #260] @ (8007858 <HAL_DMA_IRQHandler+0xe14>)
  17171. 8007754: 4293 cmp r3, r2
  17172. 8007756: d04a beq.n 80077ee <HAL_DMA_IRQHandler+0xdaa>
  17173. 8007758: 687b ldr r3, [r7, #4]
  17174. 800775a: 681b ldr r3, [r3, #0]
  17175. 800775c: 4a3f ldr r2, [pc, #252] @ (800785c <HAL_DMA_IRQHandler+0xe18>)
  17176. 800775e: 4293 cmp r3, r2
  17177. 8007760: d045 beq.n 80077ee <HAL_DMA_IRQHandler+0xdaa>
  17178. 8007762: 687b ldr r3, [r7, #4]
  17179. 8007764: 681b ldr r3, [r3, #0]
  17180. 8007766: 4a3e ldr r2, [pc, #248] @ (8007860 <HAL_DMA_IRQHandler+0xe1c>)
  17181. 8007768: 4293 cmp r3, r2
  17182. 800776a: d040 beq.n 80077ee <HAL_DMA_IRQHandler+0xdaa>
  17183. 800776c: 687b ldr r3, [r7, #4]
  17184. 800776e: 681b ldr r3, [r3, #0]
  17185. 8007770: 4a3c ldr r2, [pc, #240] @ (8007864 <HAL_DMA_IRQHandler+0xe20>)
  17186. 8007772: 4293 cmp r3, r2
  17187. 8007774: d03b beq.n 80077ee <HAL_DMA_IRQHandler+0xdaa>
  17188. 8007776: 687b ldr r3, [r7, #4]
  17189. 8007778: 681b ldr r3, [r3, #0]
  17190. 800777a: 4a3b ldr r2, [pc, #236] @ (8007868 <HAL_DMA_IRQHandler+0xe24>)
  17191. 800777c: 4293 cmp r3, r2
  17192. 800777e: d036 beq.n 80077ee <HAL_DMA_IRQHandler+0xdaa>
  17193. 8007780: 687b ldr r3, [r7, #4]
  17194. 8007782: 681b ldr r3, [r3, #0]
  17195. 8007784: 4a39 ldr r2, [pc, #228] @ (800786c <HAL_DMA_IRQHandler+0xe28>)
  17196. 8007786: 4293 cmp r3, r2
  17197. 8007788: d031 beq.n 80077ee <HAL_DMA_IRQHandler+0xdaa>
  17198. 800778a: 687b ldr r3, [r7, #4]
  17199. 800778c: 681b ldr r3, [r3, #0]
  17200. 800778e: 4a38 ldr r2, [pc, #224] @ (8007870 <HAL_DMA_IRQHandler+0xe2c>)
  17201. 8007790: 4293 cmp r3, r2
  17202. 8007792: d02c beq.n 80077ee <HAL_DMA_IRQHandler+0xdaa>
  17203. 8007794: 687b ldr r3, [r7, #4]
  17204. 8007796: 681b ldr r3, [r3, #0]
  17205. 8007798: 4a36 ldr r2, [pc, #216] @ (8007874 <HAL_DMA_IRQHandler+0xe30>)
  17206. 800779a: 4293 cmp r3, r2
  17207. 800779c: d027 beq.n 80077ee <HAL_DMA_IRQHandler+0xdaa>
  17208. 800779e: 687b ldr r3, [r7, #4]
  17209. 80077a0: 681b ldr r3, [r3, #0]
  17210. 80077a2: 4a35 ldr r2, [pc, #212] @ (8007878 <HAL_DMA_IRQHandler+0xe34>)
  17211. 80077a4: 4293 cmp r3, r2
  17212. 80077a6: d022 beq.n 80077ee <HAL_DMA_IRQHandler+0xdaa>
  17213. 80077a8: 687b ldr r3, [r7, #4]
  17214. 80077aa: 681b ldr r3, [r3, #0]
  17215. 80077ac: 4a33 ldr r2, [pc, #204] @ (800787c <HAL_DMA_IRQHandler+0xe38>)
  17216. 80077ae: 4293 cmp r3, r2
  17217. 80077b0: d01d beq.n 80077ee <HAL_DMA_IRQHandler+0xdaa>
  17218. 80077b2: 687b ldr r3, [r7, #4]
  17219. 80077b4: 681b ldr r3, [r3, #0]
  17220. 80077b6: 4a32 ldr r2, [pc, #200] @ (8007880 <HAL_DMA_IRQHandler+0xe3c>)
  17221. 80077b8: 4293 cmp r3, r2
  17222. 80077ba: d018 beq.n 80077ee <HAL_DMA_IRQHandler+0xdaa>
  17223. 80077bc: 687b ldr r3, [r7, #4]
  17224. 80077be: 681b ldr r3, [r3, #0]
  17225. 80077c0: 4a30 ldr r2, [pc, #192] @ (8007884 <HAL_DMA_IRQHandler+0xe40>)
  17226. 80077c2: 4293 cmp r3, r2
  17227. 80077c4: d013 beq.n 80077ee <HAL_DMA_IRQHandler+0xdaa>
  17228. 80077c6: 687b ldr r3, [r7, #4]
  17229. 80077c8: 681b ldr r3, [r3, #0]
  17230. 80077ca: 4a2f ldr r2, [pc, #188] @ (8007888 <HAL_DMA_IRQHandler+0xe44>)
  17231. 80077cc: 4293 cmp r3, r2
  17232. 80077ce: d00e beq.n 80077ee <HAL_DMA_IRQHandler+0xdaa>
  17233. 80077d0: 687b ldr r3, [r7, #4]
  17234. 80077d2: 681b ldr r3, [r3, #0]
  17235. 80077d4: 4a2d ldr r2, [pc, #180] @ (800788c <HAL_DMA_IRQHandler+0xe48>)
  17236. 80077d6: 4293 cmp r3, r2
  17237. 80077d8: d009 beq.n 80077ee <HAL_DMA_IRQHandler+0xdaa>
  17238. 80077da: 687b ldr r3, [r7, #4]
  17239. 80077dc: 681b ldr r3, [r3, #0]
  17240. 80077de: 4a2c ldr r2, [pc, #176] @ (8007890 <HAL_DMA_IRQHandler+0xe4c>)
  17241. 80077e0: 4293 cmp r3, r2
  17242. 80077e2: d004 beq.n 80077ee <HAL_DMA_IRQHandler+0xdaa>
  17243. 80077e4: 687b ldr r3, [r7, #4]
  17244. 80077e6: 681b ldr r3, [r3, #0]
  17245. 80077e8: 4a2a ldr r2, [pc, #168] @ (8007894 <HAL_DMA_IRQHandler+0xe50>)
  17246. 80077ea: 4293 cmp r3, r2
  17247. 80077ec: d108 bne.n 8007800 <HAL_DMA_IRQHandler+0xdbc>
  17248. 80077ee: 687b ldr r3, [r7, #4]
  17249. 80077f0: 681b ldr r3, [r3, #0]
  17250. 80077f2: 681a ldr r2, [r3, #0]
  17251. 80077f4: 687b ldr r3, [r7, #4]
  17252. 80077f6: 681b ldr r3, [r3, #0]
  17253. 80077f8: f022 021c bic.w r2, r2, #28
  17254. 80077fc: 601a str r2, [r3, #0]
  17255. 80077fe: e007 b.n 8007810 <HAL_DMA_IRQHandler+0xdcc>
  17256. 8007800: 687b ldr r3, [r7, #4]
  17257. 8007802: 681b ldr r3, [r3, #0]
  17258. 8007804: 681a ldr r2, [r3, #0]
  17259. 8007806: 687b ldr r3, [r7, #4]
  17260. 8007808: 681b ldr r3, [r3, #0]
  17261. 800780a: f022 020e bic.w r2, r2, #14
  17262. 800780e: 601a str r2, [r3, #0]
  17263. /* Clear all flags */
  17264. regs_bdma->IFCR = (BDMA_ISR_GIF0) << (hdma->StreamIndex & 0x1FU);
  17265. 8007810: 687b ldr r3, [r7, #4]
  17266. 8007812: 6ddb ldr r3, [r3, #92] @ 0x5c
  17267. 8007814: f003 031f and.w r3, r3, #31
  17268. 8007818: 2201 movs r2, #1
  17269. 800781a: 409a lsls r2, r3
  17270. 800781c: 69fb ldr r3, [r7, #28]
  17271. 800781e: 605a str r2, [r3, #4]
  17272. /* Update error code */
  17273. hdma->ErrorCode = HAL_DMA_ERROR_TE;
  17274. 8007820: 687b ldr r3, [r7, #4]
  17275. 8007822: 2201 movs r2, #1
  17276. 8007824: 655a str r2, [r3, #84] @ 0x54
  17277. /* Change the DMA state */
  17278. hdma->State = HAL_DMA_STATE_READY;
  17279. 8007826: 687b ldr r3, [r7, #4]
  17280. 8007828: 2201 movs r2, #1
  17281. 800782a: f883 2035 strb.w r2, [r3, #53] @ 0x35
  17282. /* Process Unlocked */
  17283. __HAL_UNLOCK(hdma);
  17284. 800782e: 687b ldr r3, [r7, #4]
  17285. 8007830: 2200 movs r2, #0
  17286. 8007832: f883 2034 strb.w r2, [r3, #52] @ 0x34
  17287. if (hdma->XferErrorCallback != NULL)
  17288. 8007836: 687b ldr r3, [r7, #4]
  17289. 8007838: 6cdb ldr r3, [r3, #76] @ 0x4c
  17290. 800783a: 2b00 cmp r3, #0
  17291. 800783c: d009 beq.n 8007852 <HAL_DMA_IRQHandler+0xe0e>
  17292. {
  17293. /* Transfer error callback */
  17294. hdma->XferErrorCallback(hdma);
  17295. 800783e: 687b ldr r3, [r7, #4]
  17296. 8007840: 6cdb ldr r3, [r3, #76] @ 0x4c
  17297. 8007842: 6878 ldr r0, [r7, #4]
  17298. 8007844: 4798 blx r3
  17299. 8007846: e004 b.n 8007852 <HAL_DMA_IRQHandler+0xe0e>
  17300. return;
  17301. 8007848: bf00 nop
  17302. 800784a: e002 b.n 8007852 <HAL_DMA_IRQHandler+0xe0e>
  17303. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  17304. 800784c: bf00 nop
  17305. 800784e: e000 b.n 8007852 <HAL_DMA_IRQHandler+0xe0e>
  17306. if((ccr_reg & BDMA_CCR_DBM) != 0U)
  17307. 8007850: bf00 nop
  17308. }
  17309. else
  17310. {
  17311. /* Nothing To Do */
  17312. }
  17313. }
  17314. 8007852: 3728 adds r7, #40 @ 0x28
  17315. 8007854: 46bd mov sp, r7
  17316. 8007856: bd80 pop {r7, pc}
  17317. 8007858: 40020010 .word 0x40020010
  17318. 800785c: 40020028 .word 0x40020028
  17319. 8007860: 40020040 .word 0x40020040
  17320. 8007864: 40020058 .word 0x40020058
  17321. 8007868: 40020070 .word 0x40020070
  17322. 800786c: 40020088 .word 0x40020088
  17323. 8007870: 400200a0 .word 0x400200a0
  17324. 8007874: 400200b8 .word 0x400200b8
  17325. 8007878: 40020410 .word 0x40020410
  17326. 800787c: 40020428 .word 0x40020428
  17327. 8007880: 40020440 .word 0x40020440
  17328. 8007884: 40020458 .word 0x40020458
  17329. 8007888: 40020470 .word 0x40020470
  17330. 800788c: 40020488 .word 0x40020488
  17331. 8007890: 400204a0 .word 0x400204a0
  17332. 8007894: 400204b8 .word 0x400204b8
  17333. 08007898 <DMA_SetConfig>:
  17334. * @param DstAddress: The destination memory Buffer address
  17335. * @param DataLength: The length of data to be transferred from source to destination
  17336. * @retval None
  17337. */
  17338. static void DMA_SetConfig(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
  17339. {
  17340. 8007898: b480 push {r7}
  17341. 800789a: b087 sub sp, #28
  17342. 800789c: af00 add r7, sp, #0
  17343. 800789e: 60f8 str r0, [r7, #12]
  17344. 80078a0: 60b9 str r1, [r7, #8]
  17345. 80078a2: 607a str r2, [r7, #4]
  17346. 80078a4: 603b str r3, [r7, #0]
  17347. /* calculate DMA base and stream number */
  17348. DMA_Base_Registers *regs_dma = (DMA_Base_Registers *)hdma->StreamBaseAddress;
  17349. 80078a6: 68fb ldr r3, [r7, #12]
  17350. 80078a8: 6d9b ldr r3, [r3, #88] @ 0x58
  17351. 80078aa: 617b str r3, [r7, #20]
  17352. BDMA_Base_Registers *regs_bdma = (BDMA_Base_Registers *)hdma->StreamBaseAddress;
  17353. 80078ac: 68fb ldr r3, [r7, #12]
  17354. 80078ae: 6d9b ldr r3, [r3, #88] @ 0x58
  17355. 80078b0: 613b str r3, [r7, #16]
  17356. if(IS_DMA_DMAMUX_ALL_INSTANCE(hdma->Instance) != 0U) /* No DMAMUX available for BDMA1 */
  17357. 80078b2: 68fb ldr r3, [r7, #12]
  17358. 80078b4: 681b ldr r3, [r3, #0]
  17359. 80078b6: 4a7f ldr r2, [pc, #508] @ (8007ab4 <DMA_SetConfig+0x21c>)
  17360. 80078b8: 4293 cmp r3, r2
  17361. 80078ba: d072 beq.n 80079a2 <DMA_SetConfig+0x10a>
  17362. 80078bc: 68fb ldr r3, [r7, #12]
  17363. 80078be: 681b ldr r3, [r3, #0]
  17364. 80078c0: 4a7d ldr r2, [pc, #500] @ (8007ab8 <DMA_SetConfig+0x220>)
  17365. 80078c2: 4293 cmp r3, r2
  17366. 80078c4: d06d beq.n 80079a2 <DMA_SetConfig+0x10a>
  17367. 80078c6: 68fb ldr r3, [r7, #12]
  17368. 80078c8: 681b ldr r3, [r3, #0]
  17369. 80078ca: 4a7c ldr r2, [pc, #496] @ (8007abc <DMA_SetConfig+0x224>)
  17370. 80078cc: 4293 cmp r3, r2
  17371. 80078ce: d068 beq.n 80079a2 <DMA_SetConfig+0x10a>
  17372. 80078d0: 68fb ldr r3, [r7, #12]
  17373. 80078d2: 681b ldr r3, [r3, #0]
  17374. 80078d4: 4a7a ldr r2, [pc, #488] @ (8007ac0 <DMA_SetConfig+0x228>)
  17375. 80078d6: 4293 cmp r3, r2
  17376. 80078d8: d063 beq.n 80079a2 <DMA_SetConfig+0x10a>
  17377. 80078da: 68fb ldr r3, [r7, #12]
  17378. 80078dc: 681b ldr r3, [r3, #0]
  17379. 80078de: 4a79 ldr r2, [pc, #484] @ (8007ac4 <DMA_SetConfig+0x22c>)
  17380. 80078e0: 4293 cmp r3, r2
  17381. 80078e2: d05e beq.n 80079a2 <DMA_SetConfig+0x10a>
  17382. 80078e4: 68fb ldr r3, [r7, #12]
  17383. 80078e6: 681b ldr r3, [r3, #0]
  17384. 80078e8: 4a77 ldr r2, [pc, #476] @ (8007ac8 <DMA_SetConfig+0x230>)
  17385. 80078ea: 4293 cmp r3, r2
  17386. 80078ec: d059 beq.n 80079a2 <DMA_SetConfig+0x10a>
  17387. 80078ee: 68fb ldr r3, [r7, #12]
  17388. 80078f0: 681b ldr r3, [r3, #0]
  17389. 80078f2: 4a76 ldr r2, [pc, #472] @ (8007acc <DMA_SetConfig+0x234>)
  17390. 80078f4: 4293 cmp r3, r2
  17391. 80078f6: d054 beq.n 80079a2 <DMA_SetConfig+0x10a>
  17392. 80078f8: 68fb ldr r3, [r7, #12]
  17393. 80078fa: 681b ldr r3, [r3, #0]
  17394. 80078fc: 4a74 ldr r2, [pc, #464] @ (8007ad0 <DMA_SetConfig+0x238>)
  17395. 80078fe: 4293 cmp r3, r2
  17396. 8007900: d04f beq.n 80079a2 <DMA_SetConfig+0x10a>
  17397. 8007902: 68fb ldr r3, [r7, #12]
  17398. 8007904: 681b ldr r3, [r3, #0]
  17399. 8007906: 4a73 ldr r2, [pc, #460] @ (8007ad4 <DMA_SetConfig+0x23c>)
  17400. 8007908: 4293 cmp r3, r2
  17401. 800790a: d04a beq.n 80079a2 <DMA_SetConfig+0x10a>
  17402. 800790c: 68fb ldr r3, [r7, #12]
  17403. 800790e: 681b ldr r3, [r3, #0]
  17404. 8007910: 4a71 ldr r2, [pc, #452] @ (8007ad8 <DMA_SetConfig+0x240>)
  17405. 8007912: 4293 cmp r3, r2
  17406. 8007914: d045 beq.n 80079a2 <DMA_SetConfig+0x10a>
  17407. 8007916: 68fb ldr r3, [r7, #12]
  17408. 8007918: 681b ldr r3, [r3, #0]
  17409. 800791a: 4a70 ldr r2, [pc, #448] @ (8007adc <DMA_SetConfig+0x244>)
  17410. 800791c: 4293 cmp r3, r2
  17411. 800791e: d040 beq.n 80079a2 <DMA_SetConfig+0x10a>
  17412. 8007920: 68fb ldr r3, [r7, #12]
  17413. 8007922: 681b ldr r3, [r3, #0]
  17414. 8007924: 4a6e ldr r2, [pc, #440] @ (8007ae0 <DMA_SetConfig+0x248>)
  17415. 8007926: 4293 cmp r3, r2
  17416. 8007928: d03b beq.n 80079a2 <DMA_SetConfig+0x10a>
  17417. 800792a: 68fb ldr r3, [r7, #12]
  17418. 800792c: 681b ldr r3, [r3, #0]
  17419. 800792e: 4a6d ldr r2, [pc, #436] @ (8007ae4 <DMA_SetConfig+0x24c>)
  17420. 8007930: 4293 cmp r3, r2
  17421. 8007932: d036 beq.n 80079a2 <DMA_SetConfig+0x10a>
  17422. 8007934: 68fb ldr r3, [r7, #12]
  17423. 8007936: 681b ldr r3, [r3, #0]
  17424. 8007938: 4a6b ldr r2, [pc, #428] @ (8007ae8 <DMA_SetConfig+0x250>)
  17425. 800793a: 4293 cmp r3, r2
  17426. 800793c: d031 beq.n 80079a2 <DMA_SetConfig+0x10a>
  17427. 800793e: 68fb ldr r3, [r7, #12]
  17428. 8007940: 681b ldr r3, [r3, #0]
  17429. 8007942: 4a6a ldr r2, [pc, #424] @ (8007aec <DMA_SetConfig+0x254>)
  17430. 8007944: 4293 cmp r3, r2
  17431. 8007946: d02c beq.n 80079a2 <DMA_SetConfig+0x10a>
  17432. 8007948: 68fb ldr r3, [r7, #12]
  17433. 800794a: 681b ldr r3, [r3, #0]
  17434. 800794c: 4a68 ldr r2, [pc, #416] @ (8007af0 <DMA_SetConfig+0x258>)
  17435. 800794e: 4293 cmp r3, r2
  17436. 8007950: d027 beq.n 80079a2 <DMA_SetConfig+0x10a>
  17437. 8007952: 68fb ldr r3, [r7, #12]
  17438. 8007954: 681b ldr r3, [r3, #0]
  17439. 8007956: 4a67 ldr r2, [pc, #412] @ (8007af4 <DMA_SetConfig+0x25c>)
  17440. 8007958: 4293 cmp r3, r2
  17441. 800795a: d022 beq.n 80079a2 <DMA_SetConfig+0x10a>
  17442. 800795c: 68fb ldr r3, [r7, #12]
  17443. 800795e: 681b ldr r3, [r3, #0]
  17444. 8007960: 4a65 ldr r2, [pc, #404] @ (8007af8 <DMA_SetConfig+0x260>)
  17445. 8007962: 4293 cmp r3, r2
  17446. 8007964: d01d beq.n 80079a2 <DMA_SetConfig+0x10a>
  17447. 8007966: 68fb ldr r3, [r7, #12]
  17448. 8007968: 681b ldr r3, [r3, #0]
  17449. 800796a: 4a64 ldr r2, [pc, #400] @ (8007afc <DMA_SetConfig+0x264>)
  17450. 800796c: 4293 cmp r3, r2
  17451. 800796e: d018 beq.n 80079a2 <DMA_SetConfig+0x10a>
  17452. 8007970: 68fb ldr r3, [r7, #12]
  17453. 8007972: 681b ldr r3, [r3, #0]
  17454. 8007974: 4a62 ldr r2, [pc, #392] @ (8007b00 <DMA_SetConfig+0x268>)
  17455. 8007976: 4293 cmp r3, r2
  17456. 8007978: d013 beq.n 80079a2 <DMA_SetConfig+0x10a>
  17457. 800797a: 68fb ldr r3, [r7, #12]
  17458. 800797c: 681b ldr r3, [r3, #0]
  17459. 800797e: 4a61 ldr r2, [pc, #388] @ (8007b04 <DMA_SetConfig+0x26c>)
  17460. 8007980: 4293 cmp r3, r2
  17461. 8007982: d00e beq.n 80079a2 <DMA_SetConfig+0x10a>
  17462. 8007984: 68fb ldr r3, [r7, #12]
  17463. 8007986: 681b ldr r3, [r3, #0]
  17464. 8007988: 4a5f ldr r2, [pc, #380] @ (8007b08 <DMA_SetConfig+0x270>)
  17465. 800798a: 4293 cmp r3, r2
  17466. 800798c: d009 beq.n 80079a2 <DMA_SetConfig+0x10a>
  17467. 800798e: 68fb ldr r3, [r7, #12]
  17468. 8007990: 681b ldr r3, [r3, #0]
  17469. 8007992: 4a5e ldr r2, [pc, #376] @ (8007b0c <DMA_SetConfig+0x274>)
  17470. 8007994: 4293 cmp r3, r2
  17471. 8007996: d004 beq.n 80079a2 <DMA_SetConfig+0x10a>
  17472. 8007998: 68fb ldr r3, [r7, #12]
  17473. 800799a: 681b ldr r3, [r3, #0]
  17474. 800799c: 4a5c ldr r2, [pc, #368] @ (8007b10 <DMA_SetConfig+0x278>)
  17475. 800799e: 4293 cmp r3, r2
  17476. 80079a0: d101 bne.n 80079a6 <DMA_SetConfig+0x10e>
  17477. 80079a2: 2301 movs r3, #1
  17478. 80079a4: e000 b.n 80079a8 <DMA_SetConfig+0x110>
  17479. 80079a6: 2300 movs r3, #0
  17480. 80079a8: 2b00 cmp r3, #0
  17481. 80079aa: d00d beq.n 80079c8 <DMA_SetConfig+0x130>
  17482. {
  17483. /* Clear the DMAMUX synchro overrun flag */
  17484. hdma->DMAmuxChannelStatus->CFR = hdma->DMAmuxChannelStatusMask;
  17485. 80079ac: 68fb ldr r3, [r7, #12]
  17486. 80079ae: 6e5b ldr r3, [r3, #100] @ 0x64
  17487. 80079b0: 68fa ldr r2, [r7, #12]
  17488. 80079b2: 6e92 ldr r2, [r2, #104] @ 0x68
  17489. 80079b4: 605a str r2, [r3, #4]
  17490. if(hdma->DMAmuxRequestGen != 0U)
  17491. 80079b6: 68fb ldr r3, [r7, #12]
  17492. 80079b8: 6edb ldr r3, [r3, #108] @ 0x6c
  17493. 80079ba: 2b00 cmp r3, #0
  17494. 80079bc: d004 beq.n 80079c8 <DMA_SetConfig+0x130>
  17495. {
  17496. /* Clear the DMAMUX request generator overrun flag */
  17497. hdma->DMAmuxRequestGenStatus->RGCFR = hdma->DMAmuxRequestGenStatusMask;
  17498. 80079be: 68fb ldr r3, [r7, #12]
  17499. 80079c0: 6f1b ldr r3, [r3, #112] @ 0x70
  17500. 80079c2: 68fa ldr r2, [r7, #12]
  17501. 80079c4: 6f52 ldr r2, [r2, #116] @ 0x74
  17502. 80079c6: 605a str r2, [r3, #4]
  17503. }
  17504. }
  17505. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  17506. 80079c8: 68fb ldr r3, [r7, #12]
  17507. 80079ca: 681b ldr r3, [r3, #0]
  17508. 80079cc: 4a39 ldr r2, [pc, #228] @ (8007ab4 <DMA_SetConfig+0x21c>)
  17509. 80079ce: 4293 cmp r3, r2
  17510. 80079d0: d04a beq.n 8007a68 <DMA_SetConfig+0x1d0>
  17511. 80079d2: 68fb ldr r3, [r7, #12]
  17512. 80079d4: 681b ldr r3, [r3, #0]
  17513. 80079d6: 4a38 ldr r2, [pc, #224] @ (8007ab8 <DMA_SetConfig+0x220>)
  17514. 80079d8: 4293 cmp r3, r2
  17515. 80079da: d045 beq.n 8007a68 <DMA_SetConfig+0x1d0>
  17516. 80079dc: 68fb ldr r3, [r7, #12]
  17517. 80079de: 681b ldr r3, [r3, #0]
  17518. 80079e0: 4a36 ldr r2, [pc, #216] @ (8007abc <DMA_SetConfig+0x224>)
  17519. 80079e2: 4293 cmp r3, r2
  17520. 80079e4: d040 beq.n 8007a68 <DMA_SetConfig+0x1d0>
  17521. 80079e6: 68fb ldr r3, [r7, #12]
  17522. 80079e8: 681b ldr r3, [r3, #0]
  17523. 80079ea: 4a35 ldr r2, [pc, #212] @ (8007ac0 <DMA_SetConfig+0x228>)
  17524. 80079ec: 4293 cmp r3, r2
  17525. 80079ee: d03b beq.n 8007a68 <DMA_SetConfig+0x1d0>
  17526. 80079f0: 68fb ldr r3, [r7, #12]
  17527. 80079f2: 681b ldr r3, [r3, #0]
  17528. 80079f4: 4a33 ldr r2, [pc, #204] @ (8007ac4 <DMA_SetConfig+0x22c>)
  17529. 80079f6: 4293 cmp r3, r2
  17530. 80079f8: d036 beq.n 8007a68 <DMA_SetConfig+0x1d0>
  17531. 80079fa: 68fb ldr r3, [r7, #12]
  17532. 80079fc: 681b ldr r3, [r3, #0]
  17533. 80079fe: 4a32 ldr r2, [pc, #200] @ (8007ac8 <DMA_SetConfig+0x230>)
  17534. 8007a00: 4293 cmp r3, r2
  17535. 8007a02: d031 beq.n 8007a68 <DMA_SetConfig+0x1d0>
  17536. 8007a04: 68fb ldr r3, [r7, #12]
  17537. 8007a06: 681b ldr r3, [r3, #0]
  17538. 8007a08: 4a30 ldr r2, [pc, #192] @ (8007acc <DMA_SetConfig+0x234>)
  17539. 8007a0a: 4293 cmp r3, r2
  17540. 8007a0c: d02c beq.n 8007a68 <DMA_SetConfig+0x1d0>
  17541. 8007a0e: 68fb ldr r3, [r7, #12]
  17542. 8007a10: 681b ldr r3, [r3, #0]
  17543. 8007a12: 4a2f ldr r2, [pc, #188] @ (8007ad0 <DMA_SetConfig+0x238>)
  17544. 8007a14: 4293 cmp r3, r2
  17545. 8007a16: d027 beq.n 8007a68 <DMA_SetConfig+0x1d0>
  17546. 8007a18: 68fb ldr r3, [r7, #12]
  17547. 8007a1a: 681b ldr r3, [r3, #0]
  17548. 8007a1c: 4a2d ldr r2, [pc, #180] @ (8007ad4 <DMA_SetConfig+0x23c>)
  17549. 8007a1e: 4293 cmp r3, r2
  17550. 8007a20: d022 beq.n 8007a68 <DMA_SetConfig+0x1d0>
  17551. 8007a22: 68fb ldr r3, [r7, #12]
  17552. 8007a24: 681b ldr r3, [r3, #0]
  17553. 8007a26: 4a2c ldr r2, [pc, #176] @ (8007ad8 <DMA_SetConfig+0x240>)
  17554. 8007a28: 4293 cmp r3, r2
  17555. 8007a2a: d01d beq.n 8007a68 <DMA_SetConfig+0x1d0>
  17556. 8007a2c: 68fb ldr r3, [r7, #12]
  17557. 8007a2e: 681b ldr r3, [r3, #0]
  17558. 8007a30: 4a2a ldr r2, [pc, #168] @ (8007adc <DMA_SetConfig+0x244>)
  17559. 8007a32: 4293 cmp r3, r2
  17560. 8007a34: d018 beq.n 8007a68 <DMA_SetConfig+0x1d0>
  17561. 8007a36: 68fb ldr r3, [r7, #12]
  17562. 8007a38: 681b ldr r3, [r3, #0]
  17563. 8007a3a: 4a29 ldr r2, [pc, #164] @ (8007ae0 <DMA_SetConfig+0x248>)
  17564. 8007a3c: 4293 cmp r3, r2
  17565. 8007a3e: d013 beq.n 8007a68 <DMA_SetConfig+0x1d0>
  17566. 8007a40: 68fb ldr r3, [r7, #12]
  17567. 8007a42: 681b ldr r3, [r3, #0]
  17568. 8007a44: 4a27 ldr r2, [pc, #156] @ (8007ae4 <DMA_SetConfig+0x24c>)
  17569. 8007a46: 4293 cmp r3, r2
  17570. 8007a48: d00e beq.n 8007a68 <DMA_SetConfig+0x1d0>
  17571. 8007a4a: 68fb ldr r3, [r7, #12]
  17572. 8007a4c: 681b ldr r3, [r3, #0]
  17573. 8007a4e: 4a26 ldr r2, [pc, #152] @ (8007ae8 <DMA_SetConfig+0x250>)
  17574. 8007a50: 4293 cmp r3, r2
  17575. 8007a52: d009 beq.n 8007a68 <DMA_SetConfig+0x1d0>
  17576. 8007a54: 68fb ldr r3, [r7, #12]
  17577. 8007a56: 681b ldr r3, [r3, #0]
  17578. 8007a58: 4a24 ldr r2, [pc, #144] @ (8007aec <DMA_SetConfig+0x254>)
  17579. 8007a5a: 4293 cmp r3, r2
  17580. 8007a5c: d004 beq.n 8007a68 <DMA_SetConfig+0x1d0>
  17581. 8007a5e: 68fb ldr r3, [r7, #12]
  17582. 8007a60: 681b ldr r3, [r3, #0]
  17583. 8007a62: 4a23 ldr r2, [pc, #140] @ (8007af0 <DMA_SetConfig+0x258>)
  17584. 8007a64: 4293 cmp r3, r2
  17585. 8007a66: d101 bne.n 8007a6c <DMA_SetConfig+0x1d4>
  17586. 8007a68: 2301 movs r3, #1
  17587. 8007a6a: e000 b.n 8007a6e <DMA_SetConfig+0x1d6>
  17588. 8007a6c: 2300 movs r3, #0
  17589. 8007a6e: 2b00 cmp r3, #0
  17590. 8007a70: d059 beq.n 8007b26 <DMA_SetConfig+0x28e>
  17591. {
  17592. /* Clear all interrupt flags at correct offset within the register */
  17593. regs_dma->IFCR = 0x3FUL << (hdma->StreamIndex & 0x1FU);
  17594. 8007a72: 68fb ldr r3, [r7, #12]
  17595. 8007a74: 6ddb ldr r3, [r3, #92] @ 0x5c
  17596. 8007a76: f003 031f and.w r3, r3, #31
  17597. 8007a7a: 223f movs r2, #63 @ 0x3f
  17598. 8007a7c: 409a lsls r2, r3
  17599. 8007a7e: 697b ldr r3, [r7, #20]
  17600. 8007a80: 609a str r2, [r3, #8]
  17601. /* Clear DBM bit */
  17602. ((DMA_Stream_TypeDef *)hdma->Instance)->CR &= (uint32_t)(~DMA_SxCR_DBM);
  17603. 8007a82: 68fb ldr r3, [r7, #12]
  17604. 8007a84: 681b ldr r3, [r3, #0]
  17605. 8007a86: 681a ldr r2, [r3, #0]
  17606. 8007a88: 68fb ldr r3, [r7, #12]
  17607. 8007a8a: 681b ldr r3, [r3, #0]
  17608. 8007a8c: f422 2280 bic.w r2, r2, #262144 @ 0x40000
  17609. 8007a90: 601a str r2, [r3, #0]
  17610. /* Configure DMA Stream data length */
  17611. ((DMA_Stream_TypeDef *)hdma->Instance)->NDTR = DataLength;
  17612. 8007a92: 68fb ldr r3, [r7, #12]
  17613. 8007a94: 681b ldr r3, [r3, #0]
  17614. 8007a96: 683a ldr r2, [r7, #0]
  17615. 8007a98: 605a str r2, [r3, #4]
  17616. /* Peripheral to Memory */
  17617. if((hdma->Init.Direction) == DMA_MEMORY_TO_PERIPH)
  17618. 8007a9a: 68fb ldr r3, [r7, #12]
  17619. 8007a9c: 689b ldr r3, [r3, #8]
  17620. 8007a9e: 2b40 cmp r3, #64 @ 0x40
  17621. 8007aa0: d138 bne.n 8007b14 <DMA_SetConfig+0x27c>
  17622. {
  17623. /* Configure DMA Stream destination address */
  17624. ((DMA_Stream_TypeDef *)hdma->Instance)->PAR = DstAddress;
  17625. 8007aa2: 68fb ldr r3, [r7, #12]
  17626. 8007aa4: 681b ldr r3, [r3, #0]
  17627. 8007aa6: 687a ldr r2, [r7, #4]
  17628. 8007aa8: 609a str r2, [r3, #8]
  17629. /* Configure DMA Stream source address */
  17630. ((DMA_Stream_TypeDef *)hdma->Instance)->M0AR = SrcAddress;
  17631. 8007aaa: 68fb ldr r3, [r7, #12]
  17632. 8007aac: 681b ldr r3, [r3, #0]
  17633. 8007aae: 68ba ldr r2, [r7, #8]
  17634. 8007ab0: 60da str r2, [r3, #12]
  17635. }
  17636. else
  17637. {
  17638. /* Nothing To Do */
  17639. }
  17640. }
  17641. 8007ab2: e086 b.n 8007bc2 <DMA_SetConfig+0x32a>
  17642. 8007ab4: 40020010 .word 0x40020010
  17643. 8007ab8: 40020028 .word 0x40020028
  17644. 8007abc: 40020040 .word 0x40020040
  17645. 8007ac0: 40020058 .word 0x40020058
  17646. 8007ac4: 40020070 .word 0x40020070
  17647. 8007ac8: 40020088 .word 0x40020088
  17648. 8007acc: 400200a0 .word 0x400200a0
  17649. 8007ad0: 400200b8 .word 0x400200b8
  17650. 8007ad4: 40020410 .word 0x40020410
  17651. 8007ad8: 40020428 .word 0x40020428
  17652. 8007adc: 40020440 .word 0x40020440
  17653. 8007ae0: 40020458 .word 0x40020458
  17654. 8007ae4: 40020470 .word 0x40020470
  17655. 8007ae8: 40020488 .word 0x40020488
  17656. 8007aec: 400204a0 .word 0x400204a0
  17657. 8007af0: 400204b8 .word 0x400204b8
  17658. 8007af4: 58025408 .word 0x58025408
  17659. 8007af8: 5802541c .word 0x5802541c
  17660. 8007afc: 58025430 .word 0x58025430
  17661. 8007b00: 58025444 .word 0x58025444
  17662. 8007b04: 58025458 .word 0x58025458
  17663. 8007b08: 5802546c .word 0x5802546c
  17664. 8007b0c: 58025480 .word 0x58025480
  17665. 8007b10: 58025494 .word 0x58025494
  17666. ((DMA_Stream_TypeDef *)hdma->Instance)->PAR = SrcAddress;
  17667. 8007b14: 68fb ldr r3, [r7, #12]
  17668. 8007b16: 681b ldr r3, [r3, #0]
  17669. 8007b18: 68ba ldr r2, [r7, #8]
  17670. 8007b1a: 609a str r2, [r3, #8]
  17671. ((DMA_Stream_TypeDef *)hdma->Instance)->M0AR = DstAddress;
  17672. 8007b1c: 68fb ldr r3, [r7, #12]
  17673. 8007b1e: 681b ldr r3, [r3, #0]
  17674. 8007b20: 687a ldr r2, [r7, #4]
  17675. 8007b22: 60da str r2, [r3, #12]
  17676. }
  17677. 8007b24: e04d b.n 8007bc2 <DMA_SetConfig+0x32a>
  17678. else if(IS_BDMA_CHANNEL_INSTANCE(hdma->Instance) != 0U) /* BDMA instance(s) */
  17679. 8007b26: 68fb ldr r3, [r7, #12]
  17680. 8007b28: 681b ldr r3, [r3, #0]
  17681. 8007b2a: 4a29 ldr r2, [pc, #164] @ (8007bd0 <DMA_SetConfig+0x338>)
  17682. 8007b2c: 4293 cmp r3, r2
  17683. 8007b2e: d022 beq.n 8007b76 <DMA_SetConfig+0x2de>
  17684. 8007b30: 68fb ldr r3, [r7, #12]
  17685. 8007b32: 681b ldr r3, [r3, #0]
  17686. 8007b34: 4a27 ldr r2, [pc, #156] @ (8007bd4 <DMA_SetConfig+0x33c>)
  17687. 8007b36: 4293 cmp r3, r2
  17688. 8007b38: d01d beq.n 8007b76 <DMA_SetConfig+0x2de>
  17689. 8007b3a: 68fb ldr r3, [r7, #12]
  17690. 8007b3c: 681b ldr r3, [r3, #0]
  17691. 8007b3e: 4a26 ldr r2, [pc, #152] @ (8007bd8 <DMA_SetConfig+0x340>)
  17692. 8007b40: 4293 cmp r3, r2
  17693. 8007b42: d018 beq.n 8007b76 <DMA_SetConfig+0x2de>
  17694. 8007b44: 68fb ldr r3, [r7, #12]
  17695. 8007b46: 681b ldr r3, [r3, #0]
  17696. 8007b48: 4a24 ldr r2, [pc, #144] @ (8007bdc <DMA_SetConfig+0x344>)
  17697. 8007b4a: 4293 cmp r3, r2
  17698. 8007b4c: d013 beq.n 8007b76 <DMA_SetConfig+0x2de>
  17699. 8007b4e: 68fb ldr r3, [r7, #12]
  17700. 8007b50: 681b ldr r3, [r3, #0]
  17701. 8007b52: 4a23 ldr r2, [pc, #140] @ (8007be0 <DMA_SetConfig+0x348>)
  17702. 8007b54: 4293 cmp r3, r2
  17703. 8007b56: d00e beq.n 8007b76 <DMA_SetConfig+0x2de>
  17704. 8007b58: 68fb ldr r3, [r7, #12]
  17705. 8007b5a: 681b ldr r3, [r3, #0]
  17706. 8007b5c: 4a21 ldr r2, [pc, #132] @ (8007be4 <DMA_SetConfig+0x34c>)
  17707. 8007b5e: 4293 cmp r3, r2
  17708. 8007b60: d009 beq.n 8007b76 <DMA_SetConfig+0x2de>
  17709. 8007b62: 68fb ldr r3, [r7, #12]
  17710. 8007b64: 681b ldr r3, [r3, #0]
  17711. 8007b66: 4a20 ldr r2, [pc, #128] @ (8007be8 <DMA_SetConfig+0x350>)
  17712. 8007b68: 4293 cmp r3, r2
  17713. 8007b6a: d004 beq.n 8007b76 <DMA_SetConfig+0x2de>
  17714. 8007b6c: 68fb ldr r3, [r7, #12]
  17715. 8007b6e: 681b ldr r3, [r3, #0]
  17716. 8007b70: 4a1e ldr r2, [pc, #120] @ (8007bec <DMA_SetConfig+0x354>)
  17717. 8007b72: 4293 cmp r3, r2
  17718. 8007b74: d101 bne.n 8007b7a <DMA_SetConfig+0x2e2>
  17719. 8007b76: 2301 movs r3, #1
  17720. 8007b78: e000 b.n 8007b7c <DMA_SetConfig+0x2e4>
  17721. 8007b7a: 2300 movs r3, #0
  17722. 8007b7c: 2b00 cmp r3, #0
  17723. 8007b7e: d020 beq.n 8007bc2 <DMA_SetConfig+0x32a>
  17724. regs_bdma->IFCR = (BDMA_ISR_GIF0) << (hdma->StreamIndex & 0x1FU);
  17725. 8007b80: 68fb ldr r3, [r7, #12]
  17726. 8007b82: 6ddb ldr r3, [r3, #92] @ 0x5c
  17727. 8007b84: f003 031f and.w r3, r3, #31
  17728. 8007b88: 2201 movs r2, #1
  17729. 8007b8a: 409a lsls r2, r3
  17730. 8007b8c: 693b ldr r3, [r7, #16]
  17731. 8007b8e: 605a str r2, [r3, #4]
  17732. ((BDMA_Channel_TypeDef *)hdma->Instance)->CNDTR = DataLength;
  17733. 8007b90: 68fb ldr r3, [r7, #12]
  17734. 8007b92: 681b ldr r3, [r3, #0]
  17735. 8007b94: 683a ldr r2, [r7, #0]
  17736. 8007b96: 605a str r2, [r3, #4]
  17737. if((hdma->Init.Direction) == DMA_MEMORY_TO_PERIPH)
  17738. 8007b98: 68fb ldr r3, [r7, #12]
  17739. 8007b9a: 689b ldr r3, [r3, #8]
  17740. 8007b9c: 2b40 cmp r3, #64 @ 0x40
  17741. 8007b9e: d108 bne.n 8007bb2 <DMA_SetConfig+0x31a>
  17742. ((BDMA_Channel_TypeDef *)hdma->Instance)->CPAR = DstAddress;
  17743. 8007ba0: 68fb ldr r3, [r7, #12]
  17744. 8007ba2: 681b ldr r3, [r3, #0]
  17745. 8007ba4: 687a ldr r2, [r7, #4]
  17746. 8007ba6: 609a str r2, [r3, #8]
  17747. ((BDMA_Channel_TypeDef *)hdma->Instance)->CM0AR = SrcAddress;
  17748. 8007ba8: 68fb ldr r3, [r7, #12]
  17749. 8007baa: 681b ldr r3, [r3, #0]
  17750. 8007bac: 68ba ldr r2, [r7, #8]
  17751. 8007bae: 60da str r2, [r3, #12]
  17752. }
  17753. 8007bb0: e007 b.n 8007bc2 <DMA_SetConfig+0x32a>
  17754. ((BDMA_Channel_TypeDef *)hdma->Instance)->CPAR = SrcAddress;
  17755. 8007bb2: 68fb ldr r3, [r7, #12]
  17756. 8007bb4: 681b ldr r3, [r3, #0]
  17757. 8007bb6: 68ba ldr r2, [r7, #8]
  17758. 8007bb8: 609a str r2, [r3, #8]
  17759. ((BDMA_Channel_TypeDef *)hdma->Instance)->CM0AR = DstAddress;
  17760. 8007bba: 68fb ldr r3, [r7, #12]
  17761. 8007bbc: 681b ldr r3, [r3, #0]
  17762. 8007bbe: 687a ldr r2, [r7, #4]
  17763. 8007bc0: 60da str r2, [r3, #12]
  17764. }
  17765. 8007bc2: bf00 nop
  17766. 8007bc4: 371c adds r7, #28
  17767. 8007bc6: 46bd mov sp, r7
  17768. 8007bc8: f85d 7b04 ldr.w r7, [sp], #4
  17769. 8007bcc: 4770 bx lr
  17770. 8007bce: bf00 nop
  17771. 8007bd0: 58025408 .word 0x58025408
  17772. 8007bd4: 5802541c .word 0x5802541c
  17773. 8007bd8: 58025430 .word 0x58025430
  17774. 8007bdc: 58025444 .word 0x58025444
  17775. 8007be0: 58025458 .word 0x58025458
  17776. 8007be4: 5802546c .word 0x5802546c
  17777. 8007be8: 58025480 .word 0x58025480
  17778. 8007bec: 58025494 .word 0x58025494
  17779. 08007bf0 <DMA_CalcBaseAndBitshift>:
  17780. * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
  17781. * the configuration information for the specified DMA Stream.
  17782. * @retval Stream base address
  17783. */
  17784. static uint32_t DMA_CalcBaseAndBitshift(DMA_HandleTypeDef *hdma)
  17785. {
  17786. 8007bf0: b480 push {r7}
  17787. 8007bf2: b085 sub sp, #20
  17788. 8007bf4: af00 add r7, sp, #0
  17789. 8007bf6: 6078 str r0, [r7, #4]
  17790. if(IS_DMA_STREAM_INSTANCE(hdma->Instance) != 0U) /* DMA1 or DMA2 instance */
  17791. 8007bf8: 687b ldr r3, [r7, #4]
  17792. 8007bfa: 681b ldr r3, [r3, #0]
  17793. 8007bfc: 4a42 ldr r2, [pc, #264] @ (8007d08 <DMA_CalcBaseAndBitshift+0x118>)
  17794. 8007bfe: 4293 cmp r3, r2
  17795. 8007c00: d04a beq.n 8007c98 <DMA_CalcBaseAndBitshift+0xa8>
  17796. 8007c02: 687b ldr r3, [r7, #4]
  17797. 8007c04: 681b ldr r3, [r3, #0]
  17798. 8007c06: 4a41 ldr r2, [pc, #260] @ (8007d0c <DMA_CalcBaseAndBitshift+0x11c>)
  17799. 8007c08: 4293 cmp r3, r2
  17800. 8007c0a: d045 beq.n 8007c98 <DMA_CalcBaseAndBitshift+0xa8>
  17801. 8007c0c: 687b ldr r3, [r7, #4]
  17802. 8007c0e: 681b ldr r3, [r3, #0]
  17803. 8007c10: 4a3f ldr r2, [pc, #252] @ (8007d10 <DMA_CalcBaseAndBitshift+0x120>)
  17804. 8007c12: 4293 cmp r3, r2
  17805. 8007c14: d040 beq.n 8007c98 <DMA_CalcBaseAndBitshift+0xa8>
  17806. 8007c16: 687b ldr r3, [r7, #4]
  17807. 8007c18: 681b ldr r3, [r3, #0]
  17808. 8007c1a: 4a3e ldr r2, [pc, #248] @ (8007d14 <DMA_CalcBaseAndBitshift+0x124>)
  17809. 8007c1c: 4293 cmp r3, r2
  17810. 8007c1e: d03b beq.n 8007c98 <DMA_CalcBaseAndBitshift+0xa8>
  17811. 8007c20: 687b ldr r3, [r7, #4]
  17812. 8007c22: 681b ldr r3, [r3, #0]
  17813. 8007c24: 4a3c ldr r2, [pc, #240] @ (8007d18 <DMA_CalcBaseAndBitshift+0x128>)
  17814. 8007c26: 4293 cmp r3, r2
  17815. 8007c28: d036 beq.n 8007c98 <DMA_CalcBaseAndBitshift+0xa8>
  17816. 8007c2a: 687b ldr r3, [r7, #4]
  17817. 8007c2c: 681b ldr r3, [r3, #0]
  17818. 8007c2e: 4a3b ldr r2, [pc, #236] @ (8007d1c <DMA_CalcBaseAndBitshift+0x12c>)
  17819. 8007c30: 4293 cmp r3, r2
  17820. 8007c32: d031 beq.n 8007c98 <DMA_CalcBaseAndBitshift+0xa8>
  17821. 8007c34: 687b ldr r3, [r7, #4]
  17822. 8007c36: 681b ldr r3, [r3, #0]
  17823. 8007c38: 4a39 ldr r2, [pc, #228] @ (8007d20 <DMA_CalcBaseAndBitshift+0x130>)
  17824. 8007c3a: 4293 cmp r3, r2
  17825. 8007c3c: d02c beq.n 8007c98 <DMA_CalcBaseAndBitshift+0xa8>
  17826. 8007c3e: 687b ldr r3, [r7, #4]
  17827. 8007c40: 681b ldr r3, [r3, #0]
  17828. 8007c42: 4a38 ldr r2, [pc, #224] @ (8007d24 <DMA_CalcBaseAndBitshift+0x134>)
  17829. 8007c44: 4293 cmp r3, r2
  17830. 8007c46: d027 beq.n 8007c98 <DMA_CalcBaseAndBitshift+0xa8>
  17831. 8007c48: 687b ldr r3, [r7, #4]
  17832. 8007c4a: 681b ldr r3, [r3, #0]
  17833. 8007c4c: 4a36 ldr r2, [pc, #216] @ (8007d28 <DMA_CalcBaseAndBitshift+0x138>)
  17834. 8007c4e: 4293 cmp r3, r2
  17835. 8007c50: d022 beq.n 8007c98 <DMA_CalcBaseAndBitshift+0xa8>
  17836. 8007c52: 687b ldr r3, [r7, #4]
  17837. 8007c54: 681b ldr r3, [r3, #0]
  17838. 8007c56: 4a35 ldr r2, [pc, #212] @ (8007d2c <DMA_CalcBaseAndBitshift+0x13c>)
  17839. 8007c58: 4293 cmp r3, r2
  17840. 8007c5a: d01d beq.n 8007c98 <DMA_CalcBaseAndBitshift+0xa8>
  17841. 8007c5c: 687b ldr r3, [r7, #4]
  17842. 8007c5e: 681b ldr r3, [r3, #0]
  17843. 8007c60: 4a33 ldr r2, [pc, #204] @ (8007d30 <DMA_CalcBaseAndBitshift+0x140>)
  17844. 8007c62: 4293 cmp r3, r2
  17845. 8007c64: d018 beq.n 8007c98 <DMA_CalcBaseAndBitshift+0xa8>
  17846. 8007c66: 687b ldr r3, [r7, #4]
  17847. 8007c68: 681b ldr r3, [r3, #0]
  17848. 8007c6a: 4a32 ldr r2, [pc, #200] @ (8007d34 <DMA_CalcBaseAndBitshift+0x144>)
  17849. 8007c6c: 4293 cmp r3, r2
  17850. 8007c6e: d013 beq.n 8007c98 <DMA_CalcBaseAndBitshift+0xa8>
  17851. 8007c70: 687b ldr r3, [r7, #4]
  17852. 8007c72: 681b ldr r3, [r3, #0]
  17853. 8007c74: 4a30 ldr r2, [pc, #192] @ (8007d38 <DMA_CalcBaseAndBitshift+0x148>)
  17854. 8007c76: 4293 cmp r3, r2
  17855. 8007c78: d00e beq.n 8007c98 <DMA_CalcBaseAndBitshift+0xa8>
  17856. 8007c7a: 687b ldr r3, [r7, #4]
  17857. 8007c7c: 681b ldr r3, [r3, #0]
  17858. 8007c7e: 4a2f ldr r2, [pc, #188] @ (8007d3c <DMA_CalcBaseAndBitshift+0x14c>)
  17859. 8007c80: 4293 cmp r3, r2
  17860. 8007c82: d009 beq.n 8007c98 <DMA_CalcBaseAndBitshift+0xa8>
  17861. 8007c84: 687b ldr r3, [r7, #4]
  17862. 8007c86: 681b ldr r3, [r3, #0]
  17863. 8007c88: 4a2d ldr r2, [pc, #180] @ (8007d40 <DMA_CalcBaseAndBitshift+0x150>)
  17864. 8007c8a: 4293 cmp r3, r2
  17865. 8007c8c: d004 beq.n 8007c98 <DMA_CalcBaseAndBitshift+0xa8>
  17866. 8007c8e: 687b ldr r3, [r7, #4]
  17867. 8007c90: 681b ldr r3, [r3, #0]
  17868. 8007c92: 4a2c ldr r2, [pc, #176] @ (8007d44 <DMA_CalcBaseAndBitshift+0x154>)
  17869. 8007c94: 4293 cmp r3, r2
  17870. 8007c96: d101 bne.n 8007c9c <DMA_CalcBaseAndBitshift+0xac>
  17871. 8007c98: 2301 movs r3, #1
  17872. 8007c9a: e000 b.n 8007c9e <DMA_CalcBaseAndBitshift+0xae>
  17873. 8007c9c: 2300 movs r3, #0
  17874. 8007c9e: 2b00 cmp r3, #0
  17875. 8007ca0: d024 beq.n 8007cec <DMA_CalcBaseAndBitshift+0xfc>
  17876. {
  17877. uint32_t stream_number = (((uint32_t)((uint32_t*)hdma->Instance) & 0xFFU) - 16U) / 24U;
  17878. 8007ca2: 687b ldr r3, [r7, #4]
  17879. 8007ca4: 681b ldr r3, [r3, #0]
  17880. 8007ca6: b2db uxtb r3, r3
  17881. 8007ca8: 3b10 subs r3, #16
  17882. 8007caa: 4a27 ldr r2, [pc, #156] @ (8007d48 <DMA_CalcBaseAndBitshift+0x158>)
  17883. 8007cac: fba2 2303 umull r2, r3, r2, r3
  17884. 8007cb0: 091b lsrs r3, r3, #4
  17885. 8007cb2: 60fb str r3, [r7, #12]
  17886. /* lookup table for necessary bitshift of flags within status registers */
  17887. static const uint8_t flagBitshiftOffset[8U] = {0U, 6U, 16U, 22U, 0U, 6U, 16U, 22U};
  17888. hdma->StreamIndex = flagBitshiftOffset[stream_number & 0x7U];
  17889. 8007cb4: 68fb ldr r3, [r7, #12]
  17890. 8007cb6: f003 0307 and.w r3, r3, #7
  17891. 8007cba: 4a24 ldr r2, [pc, #144] @ (8007d4c <DMA_CalcBaseAndBitshift+0x15c>)
  17892. 8007cbc: 5cd3 ldrb r3, [r2, r3]
  17893. 8007cbe: 461a mov r2, r3
  17894. 8007cc0: 687b ldr r3, [r7, #4]
  17895. 8007cc2: 65da str r2, [r3, #92] @ 0x5c
  17896. if (stream_number > 3U)
  17897. 8007cc4: 68fb ldr r3, [r7, #12]
  17898. 8007cc6: 2b03 cmp r3, #3
  17899. 8007cc8: d908 bls.n 8007cdc <DMA_CalcBaseAndBitshift+0xec>
  17900. {
  17901. /* return pointer to HISR and HIFCR */
  17902. hdma->StreamBaseAddress = (((uint32_t)((uint32_t*)hdma->Instance) & (uint32_t)(~0x3FFU)) + 4U);
  17903. 8007cca: 687b ldr r3, [r7, #4]
  17904. 8007ccc: 681b ldr r3, [r3, #0]
  17905. 8007cce: 461a mov r2, r3
  17906. 8007cd0: 4b1f ldr r3, [pc, #124] @ (8007d50 <DMA_CalcBaseAndBitshift+0x160>)
  17907. 8007cd2: 4013 ands r3, r2
  17908. 8007cd4: 1d1a adds r2, r3, #4
  17909. 8007cd6: 687b ldr r3, [r7, #4]
  17910. 8007cd8: 659a str r2, [r3, #88] @ 0x58
  17911. 8007cda: e00d b.n 8007cf8 <DMA_CalcBaseAndBitshift+0x108>
  17912. }
  17913. else
  17914. {
  17915. /* return pointer to LISR and LIFCR */
  17916. hdma->StreamBaseAddress = ((uint32_t)((uint32_t*)hdma->Instance) & (uint32_t)(~0x3FFU));
  17917. 8007cdc: 687b ldr r3, [r7, #4]
  17918. 8007cde: 681b ldr r3, [r3, #0]
  17919. 8007ce0: 461a mov r2, r3
  17920. 8007ce2: 4b1b ldr r3, [pc, #108] @ (8007d50 <DMA_CalcBaseAndBitshift+0x160>)
  17921. 8007ce4: 4013 ands r3, r2
  17922. 8007ce6: 687a ldr r2, [r7, #4]
  17923. 8007ce8: 6593 str r3, [r2, #88] @ 0x58
  17924. 8007cea: e005 b.n 8007cf8 <DMA_CalcBaseAndBitshift+0x108>
  17925. }
  17926. }
  17927. else /* BDMA instance(s) */
  17928. {
  17929. /* return pointer to ISR and IFCR */
  17930. hdma->StreamBaseAddress = ((uint32_t)((uint32_t*)hdma->Instance) & (uint32_t)(~0xFFU));
  17931. 8007cec: 687b ldr r3, [r7, #4]
  17932. 8007cee: 681b ldr r3, [r3, #0]
  17933. 8007cf0: f023 02ff bic.w r2, r3, #255 @ 0xff
  17934. 8007cf4: 687b ldr r3, [r7, #4]
  17935. 8007cf6: 659a str r2, [r3, #88] @ 0x58
  17936. }
  17937. return hdma->StreamBaseAddress;
  17938. 8007cf8: 687b ldr r3, [r7, #4]
  17939. 8007cfa: 6d9b ldr r3, [r3, #88] @ 0x58
  17940. }
  17941. 8007cfc: 4618 mov r0, r3
  17942. 8007cfe: 3714 adds r7, #20
  17943. 8007d00: 46bd mov sp, r7
  17944. 8007d02: f85d 7b04 ldr.w r7, [sp], #4
  17945. 8007d06: 4770 bx lr
  17946. 8007d08: 40020010 .word 0x40020010
  17947. 8007d0c: 40020028 .word 0x40020028
  17948. 8007d10: 40020040 .word 0x40020040
  17949. 8007d14: 40020058 .word 0x40020058
  17950. 8007d18: 40020070 .word 0x40020070
  17951. 8007d1c: 40020088 .word 0x40020088
  17952. 8007d20: 400200a0 .word 0x400200a0
  17953. 8007d24: 400200b8 .word 0x400200b8
  17954. 8007d28: 40020410 .word 0x40020410
  17955. 8007d2c: 40020428 .word 0x40020428
  17956. 8007d30: 40020440 .word 0x40020440
  17957. 8007d34: 40020458 .word 0x40020458
  17958. 8007d38: 40020470 .word 0x40020470
  17959. 8007d3c: 40020488 .word 0x40020488
  17960. 8007d40: 400204a0 .word 0x400204a0
  17961. 8007d44: 400204b8 .word 0x400204b8
  17962. 8007d48: aaaaaaab .word 0xaaaaaaab
  17963. 8007d4c: 080145f4 .word 0x080145f4
  17964. 8007d50: fffffc00 .word 0xfffffc00
  17965. 08007d54 <DMA_CheckFifoParam>:
  17966. * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
  17967. * the configuration information for the specified DMA Stream.
  17968. * @retval HAL status
  17969. */
  17970. static HAL_StatusTypeDef DMA_CheckFifoParam(DMA_HandleTypeDef *hdma)
  17971. {
  17972. 8007d54: b480 push {r7}
  17973. 8007d56: b085 sub sp, #20
  17974. 8007d58: af00 add r7, sp, #0
  17975. 8007d5a: 6078 str r0, [r7, #4]
  17976. HAL_StatusTypeDef status = HAL_OK;
  17977. 8007d5c: 2300 movs r3, #0
  17978. 8007d5e: 73fb strb r3, [r7, #15]
  17979. /* Memory Data size equal to Byte */
  17980. if (hdma->Init.MemDataAlignment == DMA_MDATAALIGN_BYTE)
  17981. 8007d60: 687b ldr r3, [r7, #4]
  17982. 8007d62: 699b ldr r3, [r3, #24]
  17983. 8007d64: 2b00 cmp r3, #0
  17984. 8007d66: d120 bne.n 8007daa <DMA_CheckFifoParam+0x56>
  17985. {
  17986. switch (hdma->Init.FIFOThreshold)
  17987. 8007d68: 687b ldr r3, [r7, #4]
  17988. 8007d6a: 6a9b ldr r3, [r3, #40] @ 0x28
  17989. 8007d6c: 2b03 cmp r3, #3
  17990. 8007d6e: d858 bhi.n 8007e22 <DMA_CheckFifoParam+0xce>
  17991. 8007d70: a201 add r2, pc, #4 @ (adr r2, 8007d78 <DMA_CheckFifoParam+0x24>)
  17992. 8007d72: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  17993. 8007d76: bf00 nop
  17994. 8007d78: 08007d89 .word 0x08007d89
  17995. 8007d7c: 08007d9b .word 0x08007d9b
  17996. 8007d80: 08007d89 .word 0x08007d89
  17997. 8007d84: 08007e23 .word 0x08007e23
  17998. {
  17999. case DMA_FIFO_THRESHOLD_1QUARTERFULL:
  18000. case DMA_FIFO_THRESHOLD_3QUARTERSFULL:
  18001. if ((hdma->Init.MemBurst & DMA_SxCR_MBURST_1) == DMA_SxCR_MBURST_1)
  18002. 8007d88: 687b ldr r3, [r7, #4]
  18003. 8007d8a: 6adb ldr r3, [r3, #44] @ 0x2c
  18004. 8007d8c: f003 7380 and.w r3, r3, #16777216 @ 0x1000000
  18005. 8007d90: 2b00 cmp r3, #0
  18006. 8007d92: d048 beq.n 8007e26 <DMA_CheckFifoParam+0xd2>
  18007. {
  18008. status = HAL_ERROR;
  18009. 8007d94: 2301 movs r3, #1
  18010. 8007d96: 73fb strb r3, [r7, #15]
  18011. }
  18012. break;
  18013. 8007d98: e045 b.n 8007e26 <DMA_CheckFifoParam+0xd2>
  18014. case DMA_FIFO_THRESHOLD_HALFFULL:
  18015. if (hdma->Init.MemBurst == DMA_MBURST_INC16)
  18016. 8007d9a: 687b ldr r3, [r7, #4]
  18017. 8007d9c: 6adb ldr r3, [r3, #44] @ 0x2c
  18018. 8007d9e: f1b3 7fc0 cmp.w r3, #25165824 @ 0x1800000
  18019. 8007da2: d142 bne.n 8007e2a <DMA_CheckFifoParam+0xd6>
  18020. {
  18021. status = HAL_ERROR;
  18022. 8007da4: 2301 movs r3, #1
  18023. 8007da6: 73fb strb r3, [r7, #15]
  18024. }
  18025. break;
  18026. 8007da8: e03f b.n 8007e2a <DMA_CheckFifoParam+0xd6>
  18027. break;
  18028. }
  18029. }
  18030. /* Memory Data size equal to Half-Word */
  18031. else if (hdma->Init.MemDataAlignment == DMA_MDATAALIGN_HALFWORD)
  18032. 8007daa: 687b ldr r3, [r7, #4]
  18033. 8007dac: 699b ldr r3, [r3, #24]
  18034. 8007dae: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  18035. 8007db2: d123 bne.n 8007dfc <DMA_CheckFifoParam+0xa8>
  18036. {
  18037. switch (hdma->Init.FIFOThreshold)
  18038. 8007db4: 687b ldr r3, [r7, #4]
  18039. 8007db6: 6a9b ldr r3, [r3, #40] @ 0x28
  18040. 8007db8: 2b03 cmp r3, #3
  18041. 8007dba: d838 bhi.n 8007e2e <DMA_CheckFifoParam+0xda>
  18042. 8007dbc: a201 add r2, pc, #4 @ (adr r2, 8007dc4 <DMA_CheckFifoParam+0x70>)
  18043. 8007dbe: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  18044. 8007dc2: bf00 nop
  18045. 8007dc4: 08007dd5 .word 0x08007dd5
  18046. 8007dc8: 08007ddb .word 0x08007ddb
  18047. 8007dcc: 08007dd5 .word 0x08007dd5
  18048. 8007dd0: 08007ded .word 0x08007ded
  18049. {
  18050. case DMA_FIFO_THRESHOLD_1QUARTERFULL:
  18051. case DMA_FIFO_THRESHOLD_3QUARTERSFULL:
  18052. status = HAL_ERROR;
  18053. 8007dd4: 2301 movs r3, #1
  18054. 8007dd6: 73fb strb r3, [r7, #15]
  18055. break;
  18056. 8007dd8: e030 b.n 8007e3c <DMA_CheckFifoParam+0xe8>
  18057. case DMA_FIFO_THRESHOLD_HALFFULL:
  18058. if ((hdma->Init.MemBurst & DMA_SxCR_MBURST_1) == DMA_SxCR_MBURST_1)
  18059. 8007dda: 687b ldr r3, [r7, #4]
  18060. 8007ddc: 6adb ldr r3, [r3, #44] @ 0x2c
  18061. 8007dde: f003 7380 and.w r3, r3, #16777216 @ 0x1000000
  18062. 8007de2: 2b00 cmp r3, #0
  18063. 8007de4: d025 beq.n 8007e32 <DMA_CheckFifoParam+0xde>
  18064. {
  18065. status = HAL_ERROR;
  18066. 8007de6: 2301 movs r3, #1
  18067. 8007de8: 73fb strb r3, [r7, #15]
  18068. }
  18069. break;
  18070. 8007dea: e022 b.n 8007e32 <DMA_CheckFifoParam+0xde>
  18071. case DMA_FIFO_THRESHOLD_FULL:
  18072. if (hdma->Init.MemBurst == DMA_MBURST_INC16)
  18073. 8007dec: 687b ldr r3, [r7, #4]
  18074. 8007dee: 6adb ldr r3, [r3, #44] @ 0x2c
  18075. 8007df0: f1b3 7fc0 cmp.w r3, #25165824 @ 0x1800000
  18076. 8007df4: d11f bne.n 8007e36 <DMA_CheckFifoParam+0xe2>
  18077. {
  18078. status = HAL_ERROR;
  18079. 8007df6: 2301 movs r3, #1
  18080. 8007df8: 73fb strb r3, [r7, #15]
  18081. }
  18082. break;
  18083. 8007dfa: e01c b.n 8007e36 <DMA_CheckFifoParam+0xe2>
  18084. }
  18085. /* Memory Data size equal to Word */
  18086. else
  18087. {
  18088. switch (hdma->Init.FIFOThreshold)
  18089. 8007dfc: 687b ldr r3, [r7, #4]
  18090. 8007dfe: 6a9b ldr r3, [r3, #40] @ 0x28
  18091. 8007e00: 2b02 cmp r3, #2
  18092. 8007e02: d902 bls.n 8007e0a <DMA_CheckFifoParam+0xb6>
  18093. 8007e04: 2b03 cmp r3, #3
  18094. 8007e06: d003 beq.n 8007e10 <DMA_CheckFifoParam+0xbc>
  18095. status = HAL_ERROR;
  18096. }
  18097. break;
  18098. default:
  18099. break;
  18100. 8007e08: e018 b.n 8007e3c <DMA_CheckFifoParam+0xe8>
  18101. status = HAL_ERROR;
  18102. 8007e0a: 2301 movs r3, #1
  18103. 8007e0c: 73fb strb r3, [r7, #15]
  18104. break;
  18105. 8007e0e: e015 b.n 8007e3c <DMA_CheckFifoParam+0xe8>
  18106. if ((hdma->Init.MemBurst & DMA_SxCR_MBURST_1) == DMA_SxCR_MBURST_1)
  18107. 8007e10: 687b ldr r3, [r7, #4]
  18108. 8007e12: 6adb ldr r3, [r3, #44] @ 0x2c
  18109. 8007e14: f003 7380 and.w r3, r3, #16777216 @ 0x1000000
  18110. 8007e18: 2b00 cmp r3, #0
  18111. 8007e1a: d00e beq.n 8007e3a <DMA_CheckFifoParam+0xe6>
  18112. status = HAL_ERROR;
  18113. 8007e1c: 2301 movs r3, #1
  18114. 8007e1e: 73fb strb r3, [r7, #15]
  18115. break;
  18116. 8007e20: e00b b.n 8007e3a <DMA_CheckFifoParam+0xe6>
  18117. break;
  18118. 8007e22: bf00 nop
  18119. 8007e24: e00a b.n 8007e3c <DMA_CheckFifoParam+0xe8>
  18120. break;
  18121. 8007e26: bf00 nop
  18122. 8007e28: e008 b.n 8007e3c <DMA_CheckFifoParam+0xe8>
  18123. break;
  18124. 8007e2a: bf00 nop
  18125. 8007e2c: e006 b.n 8007e3c <DMA_CheckFifoParam+0xe8>
  18126. break;
  18127. 8007e2e: bf00 nop
  18128. 8007e30: e004 b.n 8007e3c <DMA_CheckFifoParam+0xe8>
  18129. break;
  18130. 8007e32: bf00 nop
  18131. 8007e34: e002 b.n 8007e3c <DMA_CheckFifoParam+0xe8>
  18132. break;
  18133. 8007e36: bf00 nop
  18134. 8007e38: e000 b.n 8007e3c <DMA_CheckFifoParam+0xe8>
  18135. break;
  18136. 8007e3a: bf00 nop
  18137. }
  18138. }
  18139. return status;
  18140. 8007e3c: 7bfb ldrb r3, [r7, #15]
  18141. }
  18142. 8007e3e: 4618 mov r0, r3
  18143. 8007e40: 3714 adds r7, #20
  18144. 8007e42: 46bd mov sp, r7
  18145. 8007e44: f85d 7b04 ldr.w r7, [sp], #4
  18146. 8007e48: 4770 bx lr
  18147. 8007e4a: bf00 nop
  18148. 08007e4c <DMA_CalcDMAMUXChannelBaseAndMask>:
  18149. * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
  18150. * the configuration information for the specified DMA Stream.
  18151. * @retval HAL status
  18152. */
  18153. static void DMA_CalcDMAMUXChannelBaseAndMask(DMA_HandleTypeDef *hdma)
  18154. {
  18155. 8007e4c: b480 push {r7}
  18156. 8007e4e: b085 sub sp, #20
  18157. 8007e50: af00 add r7, sp, #0
  18158. 8007e52: 6078 str r0, [r7, #4]
  18159. uint32_t stream_number;
  18160. uint32_t stream_baseaddress = (uint32_t)((uint32_t*)hdma->Instance);
  18161. 8007e54: 687b ldr r3, [r7, #4]
  18162. 8007e56: 681b ldr r3, [r3, #0]
  18163. 8007e58: 60bb str r3, [r7, #8]
  18164. if(IS_BDMA_CHANNEL_DMAMUX_INSTANCE(hdma->Instance) != 0U)
  18165. 8007e5a: 687b ldr r3, [r7, #4]
  18166. 8007e5c: 681b ldr r3, [r3, #0]
  18167. 8007e5e: 4a38 ldr r2, [pc, #224] @ (8007f40 <DMA_CalcDMAMUXChannelBaseAndMask+0xf4>)
  18168. 8007e60: 4293 cmp r3, r2
  18169. 8007e62: d022 beq.n 8007eaa <DMA_CalcDMAMUXChannelBaseAndMask+0x5e>
  18170. 8007e64: 687b ldr r3, [r7, #4]
  18171. 8007e66: 681b ldr r3, [r3, #0]
  18172. 8007e68: 4a36 ldr r2, [pc, #216] @ (8007f44 <DMA_CalcDMAMUXChannelBaseAndMask+0xf8>)
  18173. 8007e6a: 4293 cmp r3, r2
  18174. 8007e6c: d01d beq.n 8007eaa <DMA_CalcDMAMUXChannelBaseAndMask+0x5e>
  18175. 8007e6e: 687b ldr r3, [r7, #4]
  18176. 8007e70: 681b ldr r3, [r3, #0]
  18177. 8007e72: 4a35 ldr r2, [pc, #212] @ (8007f48 <DMA_CalcDMAMUXChannelBaseAndMask+0xfc>)
  18178. 8007e74: 4293 cmp r3, r2
  18179. 8007e76: d018 beq.n 8007eaa <DMA_CalcDMAMUXChannelBaseAndMask+0x5e>
  18180. 8007e78: 687b ldr r3, [r7, #4]
  18181. 8007e7a: 681b ldr r3, [r3, #0]
  18182. 8007e7c: 4a33 ldr r2, [pc, #204] @ (8007f4c <DMA_CalcDMAMUXChannelBaseAndMask+0x100>)
  18183. 8007e7e: 4293 cmp r3, r2
  18184. 8007e80: d013 beq.n 8007eaa <DMA_CalcDMAMUXChannelBaseAndMask+0x5e>
  18185. 8007e82: 687b ldr r3, [r7, #4]
  18186. 8007e84: 681b ldr r3, [r3, #0]
  18187. 8007e86: 4a32 ldr r2, [pc, #200] @ (8007f50 <DMA_CalcDMAMUXChannelBaseAndMask+0x104>)
  18188. 8007e88: 4293 cmp r3, r2
  18189. 8007e8a: d00e beq.n 8007eaa <DMA_CalcDMAMUXChannelBaseAndMask+0x5e>
  18190. 8007e8c: 687b ldr r3, [r7, #4]
  18191. 8007e8e: 681b ldr r3, [r3, #0]
  18192. 8007e90: 4a30 ldr r2, [pc, #192] @ (8007f54 <DMA_CalcDMAMUXChannelBaseAndMask+0x108>)
  18193. 8007e92: 4293 cmp r3, r2
  18194. 8007e94: d009 beq.n 8007eaa <DMA_CalcDMAMUXChannelBaseAndMask+0x5e>
  18195. 8007e96: 687b ldr r3, [r7, #4]
  18196. 8007e98: 681b ldr r3, [r3, #0]
  18197. 8007e9a: 4a2f ldr r2, [pc, #188] @ (8007f58 <DMA_CalcDMAMUXChannelBaseAndMask+0x10c>)
  18198. 8007e9c: 4293 cmp r3, r2
  18199. 8007e9e: d004 beq.n 8007eaa <DMA_CalcDMAMUXChannelBaseAndMask+0x5e>
  18200. 8007ea0: 687b ldr r3, [r7, #4]
  18201. 8007ea2: 681b ldr r3, [r3, #0]
  18202. 8007ea4: 4a2d ldr r2, [pc, #180] @ (8007f5c <DMA_CalcDMAMUXChannelBaseAndMask+0x110>)
  18203. 8007ea6: 4293 cmp r3, r2
  18204. 8007ea8: d101 bne.n 8007eae <DMA_CalcDMAMUXChannelBaseAndMask+0x62>
  18205. 8007eaa: 2301 movs r3, #1
  18206. 8007eac: e000 b.n 8007eb0 <DMA_CalcDMAMUXChannelBaseAndMask+0x64>
  18207. 8007eae: 2300 movs r3, #0
  18208. 8007eb0: 2b00 cmp r3, #0
  18209. 8007eb2: d01a beq.n 8007eea <DMA_CalcDMAMUXChannelBaseAndMask+0x9e>
  18210. {
  18211. /* BDMA Channels are connected to DMAMUX2 channels */
  18212. stream_number = (((uint32_t)((uint32_t*)hdma->Instance) & 0xFFU) - 8U) / 20U;
  18213. 8007eb4: 687b ldr r3, [r7, #4]
  18214. 8007eb6: 681b ldr r3, [r3, #0]
  18215. 8007eb8: b2db uxtb r3, r3
  18216. 8007eba: 3b08 subs r3, #8
  18217. 8007ebc: 4a28 ldr r2, [pc, #160] @ (8007f60 <DMA_CalcDMAMUXChannelBaseAndMask+0x114>)
  18218. 8007ebe: fba2 2303 umull r2, r3, r2, r3
  18219. 8007ec2: 091b lsrs r3, r3, #4
  18220. 8007ec4: 60fb str r3, [r7, #12]
  18221. hdma->DMAmuxChannel = (DMAMUX_Channel_TypeDef *)((uint32_t)(((uint32_t)DMAMUX2_Channel0) + (stream_number * 4U)));
  18222. 8007ec6: 68fa ldr r2, [r7, #12]
  18223. 8007ec8: 4b26 ldr r3, [pc, #152] @ (8007f64 <DMA_CalcDMAMUXChannelBaseAndMask+0x118>)
  18224. 8007eca: 4413 add r3, r2
  18225. 8007ecc: 009b lsls r3, r3, #2
  18226. 8007ece: 461a mov r2, r3
  18227. 8007ed0: 687b ldr r3, [r7, #4]
  18228. 8007ed2: 661a str r2, [r3, #96] @ 0x60
  18229. hdma->DMAmuxChannelStatus = DMAMUX2_ChannelStatus;
  18230. 8007ed4: 687b ldr r3, [r7, #4]
  18231. 8007ed6: 4a24 ldr r2, [pc, #144] @ (8007f68 <DMA_CalcDMAMUXChannelBaseAndMask+0x11c>)
  18232. 8007ed8: 665a str r2, [r3, #100] @ 0x64
  18233. hdma->DMAmuxChannelStatusMask = 1UL << (stream_number & 0x1FU);
  18234. 8007eda: 68fb ldr r3, [r7, #12]
  18235. 8007edc: f003 031f and.w r3, r3, #31
  18236. 8007ee0: 2201 movs r2, #1
  18237. 8007ee2: 409a lsls r2, r3
  18238. 8007ee4: 687b ldr r3, [r7, #4]
  18239. 8007ee6: 669a str r2, [r3, #104] @ 0x68
  18240. }
  18241. hdma->DMAmuxChannel = (DMAMUX_Channel_TypeDef *)((uint32_t)(((uint32_t)DMAMUX1_Channel0) + (stream_number * 4U)));
  18242. hdma->DMAmuxChannelStatus = DMAMUX1_ChannelStatus;
  18243. hdma->DMAmuxChannelStatusMask = 1UL << (stream_number & 0x1FU);
  18244. }
  18245. }
  18246. 8007ee8: e024 b.n 8007f34 <DMA_CalcDMAMUXChannelBaseAndMask+0xe8>
  18247. stream_number = (((uint32_t)((uint32_t*)hdma->Instance) & 0xFFU) - 16U) / 24U;
  18248. 8007eea: 687b ldr r3, [r7, #4]
  18249. 8007eec: 681b ldr r3, [r3, #0]
  18250. 8007eee: b2db uxtb r3, r3
  18251. 8007ef0: 3b10 subs r3, #16
  18252. 8007ef2: 4a1e ldr r2, [pc, #120] @ (8007f6c <DMA_CalcDMAMUXChannelBaseAndMask+0x120>)
  18253. 8007ef4: fba2 2303 umull r2, r3, r2, r3
  18254. 8007ef8: 091b lsrs r3, r3, #4
  18255. 8007efa: 60fb str r3, [r7, #12]
  18256. if((stream_baseaddress <= ((uint32_t)DMA2_Stream7) ) && \
  18257. 8007efc: 68bb ldr r3, [r7, #8]
  18258. 8007efe: 4a1c ldr r2, [pc, #112] @ (8007f70 <DMA_CalcDMAMUXChannelBaseAndMask+0x124>)
  18259. 8007f00: 4293 cmp r3, r2
  18260. 8007f02: d806 bhi.n 8007f12 <DMA_CalcDMAMUXChannelBaseAndMask+0xc6>
  18261. 8007f04: 68bb ldr r3, [r7, #8]
  18262. 8007f06: 4a1b ldr r2, [pc, #108] @ (8007f74 <DMA_CalcDMAMUXChannelBaseAndMask+0x128>)
  18263. 8007f08: 4293 cmp r3, r2
  18264. 8007f0a: d902 bls.n 8007f12 <DMA_CalcDMAMUXChannelBaseAndMask+0xc6>
  18265. stream_number += 8U;
  18266. 8007f0c: 68fb ldr r3, [r7, #12]
  18267. 8007f0e: 3308 adds r3, #8
  18268. 8007f10: 60fb str r3, [r7, #12]
  18269. hdma->DMAmuxChannel = (DMAMUX_Channel_TypeDef *)((uint32_t)(((uint32_t)DMAMUX1_Channel0) + (stream_number * 4U)));
  18270. 8007f12: 68fa ldr r2, [r7, #12]
  18271. 8007f14: 4b18 ldr r3, [pc, #96] @ (8007f78 <DMA_CalcDMAMUXChannelBaseAndMask+0x12c>)
  18272. 8007f16: 4413 add r3, r2
  18273. 8007f18: 009b lsls r3, r3, #2
  18274. 8007f1a: 461a mov r2, r3
  18275. 8007f1c: 687b ldr r3, [r7, #4]
  18276. 8007f1e: 661a str r2, [r3, #96] @ 0x60
  18277. hdma->DMAmuxChannelStatus = DMAMUX1_ChannelStatus;
  18278. 8007f20: 687b ldr r3, [r7, #4]
  18279. 8007f22: 4a16 ldr r2, [pc, #88] @ (8007f7c <DMA_CalcDMAMUXChannelBaseAndMask+0x130>)
  18280. 8007f24: 665a str r2, [r3, #100] @ 0x64
  18281. hdma->DMAmuxChannelStatusMask = 1UL << (stream_number & 0x1FU);
  18282. 8007f26: 68fb ldr r3, [r7, #12]
  18283. 8007f28: f003 031f and.w r3, r3, #31
  18284. 8007f2c: 2201 movs r2, #1
  18285. 8007f2e: 409a lsls r2, r3
  18286. 8007f30: 687b ldr r3, [r7, #4]
  18287. 8007f32: 669a str r2, [r3, #104] @ 0x68
  18288. }
  18289. 8007f34: bf00 nop
  18290. 8007f36: 3714 adds r7, #20
  18291. 8007f38: 46bd mov sp, r7
  18292. 8007f3a: f85d 7b04 ldr.w r7, [sp], #4
  18293. 8007f3e: 4770 bx lr
  18294. 8007f40: 58025408 .word 0x58025408
  18295. 8007f44: 5802541c .word 0x5802541c
  18296. 8007f48: 58025430 .word 0x58025430
  18297. 8007f4c: 58025444 .word 0x58025444
  18298. 8007f50: 58025458 .word 0x58025458
  18299. 8007f54: 5802546c .word 0x5802546c
  18300. 8007f58: 58025480 .word 0x58025480
  18301. 8007f5c: 58025494 .word 0x58025494
  18302. 8007f60: cccccccd .word 0xcccccccd
  18303. 8007f64: 16009600 .word 0x16009600
  18304. 8007f68: 58025880 .word 0x58025880
  18305. 8007f6c: aaaaaaab .word 0xaaaaaaab
  18306. 8007f70: 400204b8 .word 0x400204b8
  18307. 8007f74: 4002040f .word 0x4002040f
  18308. 8007f78: 10008200 .word 0x10008200
  18309. 8007f7c: 40020880 .word 0x40020880
  18310. 08007f80 <DMA_CalcDMAMUXRequestGenBaseAndMask>:
  18311. * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
  18312. * the configuration information for the specified DMA Stream.
  18313. * @retval HAL status
  18314. */
  18315. static void DMA_CalcDMAMUXRequestGenBaseAndMask(DMA_HandleTypeDef *hdma)
  18316. {
  18317. 8007f80: b480 push {r7}
  18318. 8007f82: b085 sub sp, #20
  18319. 8007f84: af00 add r7, sp, #0
  18320. 8007f86: 6078 str r0, [r7, #4]
  18321. uint32_t request = hdma->Init.Request & DMAMUX_CxCR_DMAREQ_ID;
  18322. 8007f88: 687b ldr r3, [r7, #4]
  18323. 8007f8a: 685b ldr r3, [r3, #4]
  18324. 8007f8c: b2db uxtb r3, r3
  18325. 8007f8e: 60fb str r3, [r7, #12]
  18326. if((request >= DMA_REQUEST_GENERATOR0) && (request <= DMA_REQUEST_GENERATOR7))
  18327. 8007f90: 68fb ldr r3, [r7, #12]
  18328. 8007f92: 2b00 cmp r3, #0
  18329. 8007f94: d04a beq.n 800802c <DMA_CalcDMAMUXRequestGenBaseAndMask+0xac>
  18330. 8007f96: 68fb ldr r3, [r7, #12]
  18331. 8007f98: 2b08 cmp r3, #8
  18332. 8007f9a: d847 bhi.n 800802c <DMA_CalcDMAMUXRequestGenBaseAndMask+0xac>
  18333. {
  18334. if(IS_BDMA_CHANNEL_DMAMUX_INSTANCE(hdma->Instance) != 0U)
  18335. 8007f9c: 687b ldr r3, [r7, #4]
  18336. 8007f9e: 681b ldr r3, [r3, #0]
  18337. 8007fa0: 4a25 ldr r2, [pc, #148] @ (8008038 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xb8>)
  18338. 8007fa2: 4293 cmp r3, r2
  18339. 8007fa4: d022 beq.n 8007fec <DMA_CalcDMAMUXRequestGenBaseAndMask+0x6c>
  18340. 8007fa6: 687b ldr r3, [r7, #4]
  18341. 8007fa8: 681b ldr r3, [r3, #0]
  18342. 8007faa: 4a24 ldr r2, [pc, #144] @ (800803c <DMA_CalcDMAMUXRequestGenBaseAndMask+0xbc>)
  18343. 8007fac: 4293 cmp r3, r2
  18344. 8007fae: d01d beq.n 8007fec <DMA_CalcDMAMUXRequestGenBaseAndMask+0x6c>
  18345. 8007fb0: 687b ldr r3, [r7, #4]
  18346. 8007fb2: 681b ldr r3, [r3, #0]
  18347. 8007fb4: 4a22 ldr r2, [pc, #136] @ (8008040 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xc0>)
  18348. 8007fb6: 4293 cmp r3, r2
  18349. 8007fb8: d018 beq.n 8007fec <DMA_CalcDMAMUXRequestGenBaseAndMask+0x6c>
  18350. 8007fba: 687b ldr r3, [r7, #4]
  18351. 8007fbc: 681b ldr r3, [r3, #0]
  18352. 8007fbe: 4a21 ldr r2, [pc, #132] @ (8008044 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xc4>)
  18353. 8007fc0: 4293 cmp r3, r2
  18354. 8007fc2: d013 beq.n 8007fec <DMA_CalcDMAMUXRequestGenBaseAndMask+0x6c>
  18355. 8007fc4: 687b ldr r3, [r7, #4]
  18356. 8007fc6: 681b ldr r3, [r3, #0]
  18357. 8007fc8: 4a1f ldr r2, [pc, #124] @ (8008048 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xc8>)
  18358. 8007fca: 4293 cmp r3, r2
  18359. 8007fcc: d00e beq.n 8007fec <DMA_CalcDMAMUXRequestGenBaseAndMask+0x6c>
  18360. 8007fce: 687b ldr r3, [r7, #4]
  18361. 8007fd0: 681b ldr r3, [r3, #0]
  18362. 8007fd2: 4a1e ldr r2, [pc, #120] @ (800804c <DMA_CalcDMAMUXRequestGenBaseAndMask+0xcc>)
  18363. 8007fd4: 4293 cmp r3, r2
  18364. 8007fd6: d009 beq.n 8007fec <DMA_CalcDMAMUXRequestGenBaseAndMask+0x6c>
  18365. 8007fd8: 687b ldr r3, [r7, #4]
  18366. 8007fda: 681b ldr r3, [r3, #0]
  18367. 8007fdc: 4a1c ldr r2, [pc, #112] @ (8008050 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xd0>)
  18368. 8007fde: 4293 cmp r3, r2
  18369. 8007fe0: d004 beq.n 8007fec <DMA_CalcDMAMUXRequestGenBaseAndMask+0x6c>
  18370. 8007fe2: 687b ldr r3, [r7, #4]
  18371. 8007fe4: 681b ldr r3, [r3, #0]
  18372. 8007fe6: 4a1b ldr r2, [pc, #108] @ (8008054 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xd4>)
  18373. 8007fe8: 4293 cmp r3, r2
  18374. 8007fea: d101 bne.n 8007ff0 <DMA_CalcDMAMUXRequestGenBaseAndMask+0x70>
  18375. 8007fec: 2301 movs r3, #1
  18376. 8007fee: e000 b.n 8007ff2 <DMA_CalcDMAMUXRequestGenBaseAndMask+0x72>
  18377. 8007ff0: 2300 movs r3, #0
  18378. 8007ff2: 2b00 cmp r3, #0
  18379. 8007ff4: d00a beq.n 800800c <DMA_CalcDMAMUXRequestGenBaseAndMask+0x8c>
  18380. {
  18381. /* BDMA Channels are connected to DMAMUX2 request generator blocks */
  18382. hdma->DMAmuxRequestGen = (DMAMUX_RequestGen_TypeDef *)((uint32_t)(((uint32_t)DMAMUX2_RequestGenerator0) + ((request - 1U) * 4U)));
  18383. 8007ff6: 68fa ldr r2, [r7, #12]
  18384. 8007ff8: 4b17 ldr r3, [pc, #92] @ (8008058 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xd8>)
  18385. 8007ffa: 4413 add r3, r2
  18386. 8007ffc: 009b lsls r3, r3, #2
  18387. 8007ffe: 461a mov r2, r3
  18388. 8008000: 687b ldr r3, [r7, #4]
  18389. 8008002: 66da str r2, [r3, #108] @ 0x6c
  18390. hdma->DMAmuxRequestGenStatus = DMAMUX2_RequestGenStatus;
  18391. 8008004: 687b ldr r3, [r7, #4]
  18392. 8008006: 4a15 ldr r2, [pc, #84] @ (800805c <DMA_CalcDMAMUXRequestGenBaseAndMask+0xdc>)
  18393. 8008008: 671a str r2, [r3, #112] @ 0x70
  18394. 800800a: e009 b.n 8008020 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xa0>
  18395. }
  18396. else
  18397. {
  18398. /* DMA1 and DMA2 Streams use DMAMUX1 request generator blocks */
  18399. hdma->DMAmuxRequestGen = (DMAMUX_RequestGen_TypeDef *)((uint32_t)(((uint32_t)DMAMUX1_RequestGenerator0) + ((request - 1U) * 4U)));
  18400. 800800c: 68fa ldr r2, [r7, #12]
  18401. 800800e: 4b14 ldr r3, [pc, #80] @ (8008060 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xe0>)
  18402. 8008010: 4413 add r3, r2
  18403. 8008012: 009b lsls r3, r3, #2
  18404. 8008014: 461a mov r2, r3
  18405. 8008016: 687b ldr r3, [r7, #4]
  18406. 8008018: 66da str r2, [r3, #108] @ 0x6c
  18407. hdma->DMAmuxRequestGenStatus = DMAMUX1_RequestGenStatus;
  18408. 800801a: 687b ldr r3, [r7, #4]
  18409. 800801c: 4a11 ldr r2, [pc, #68] @ (8008064 <DMA_CalcDMAMUXRequestGenBaseAndMask+0xe4>)
  18410. 800801e: 671a str r2, [r3, #112] @ 0x70
  18411. }
  18412. hdma->DMAmuxRequestGenStatusMask = 1UL << (request - 1U);
  18413. 8008020: 68fb ldr r3, [r7, #12]
  18414. 8008022: 3b01 subs r3, #1
  18415. 8008024: 2201 movs r2, #1
  18416. 8008026: 409a lsls r2, r3
  18417. 8008028: 687b ldr r3, [r7, #4]
  18418. 800802a: 675a str r2, [r3, #116] @ 0x74
  18419. }
  18420. }
  18421. 800802c: bf00 nop
  18422. 800802e: 3714 adds r7, #20
  18423. 8008030: 46bd mov sp, r7
  18424. 8008032: f85d 7b04 ldr.w r7, [sp], #4
  18425. 8008036: 4770 bx lr
  18426. 8008038: 58025408 .word 0x58025408
  18427. 800803c: 5802541c .word 0x5802541c
  18428. 8008040: 58025430 .word 0x58025430
  18429. 8008044: 58025444 .word 0x58025444
  18430. 8008048: 58025458 .word 0x58025458
  18431. 800804c: 5802546c .word 0x5802546c
  18432. 8008050: 58025480 .word 0x58025480
  18433. 8008054: 58025494 .word 0x58025494
  18434. 8008058: 1600963f .word 0x1600963f
  18435. 800805c: 58025940 .word 0x58025940
  18436. 8008060: 1000823f .word 0x1000823f
  18437. 8008064: 40020940 .word 0x40020940
  18438. 08008068 <HAL_GPIO_Init>:
  18439. * @param GPIO_Init: pointer to a GPIO_InitTypeDef structure that contains
  18440. * the configuration information for the specified GPIO peripheral.
  18441. * @retval None
  18442. */
  18443. void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)
  18444. {
  18445. 8008068: b480 push {r7}
  18446. 800806a: b089 sub sp, #36 @ 0x24
  18447. 800806c: af00 add r7, sp, #0
  18448. 800806e: 6078 str r0, [r7, #4]
  18449. 8008070: 6039 str r1, [r7, #0]
  18450. uint32_t position = 0x00U;
  18451. 8008072: 2300 movs r3, #0
  18452. 8008074: 61fb str r3, [r7, #28]
  18453. EXTI_Core_TypeDef *EXTI_CurrentCPU;
  18454. #if defined(DUAL_CORE) && defined(CORE_CM4)
  18455. EXTI_CurrentCPU = EXTI_D2; /* EXTI for CM4 CPU */
  18456. #else
  18457. EXTI_CurrentCPU = EXTI_D1; /* EXTI for CM7 CPU */
  18458. 8008076: 4b89 ldr r3, [pc, #548] @ (800829c <HAL_GPIO_Init+0x234>)
  18459. 8008078: 617b str r3, [r7, #20]
  18460. assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));
  18461. assert_param(IS_GPIO_PIN(GPIO_Init->Pin));
  18462. assert_param(IS_GPIO_MODE(GPIO_Init->Mode));
  18463. /* Configure the port pins */
  18464. while (((GPIO_Init->Pin) >> position) != 0x00U)
  18465. 800807a: e194 b.n 80083a6 <HAL_GPIO_Init+0x33e>
  18466. {
  18467. /* Get current io position */
  18468. iocurrent = (GPIO_Init->Pin) & (1UL << position);
  18469. 800807c: 683b ldr r3, [r7, #0]
  18470. 800807e: 681a ldr r2, [r3, #0]
  18471. 8008080: 2101 movs r1, #1
  18472. 8008082: 69fb ldr r3, [r7, #28]
  18473. 8008084: fa01 f303 lsl.w r3, r1, r3
  18474. 8008088: 4013 ands r3, r2
  18475. 800808a: 613b str r3, [r7, #16]
  18476. if (iocurrent != 0x00U)
  18477. 800808c: 693b ldr r3, [r7, #16]
  18478. 800808e: 2b00 cmp r3, #0
  18479. 8008090: f000 8186 beq.w 80083a0 <HAL_GPIO_Init+0x338>
  18480. {
  18481. /*--------------------- GPIO Mode Configuration ------------------------*/
  18482. /* In case of Output or Alternate function mode selection */
  18483. if (((GPIO_Init->Mode & GPIO_MODE) == MODE_OUTPUT) || ((GPIO_Init->Mode & GPIO_MODE) == MODE_AF))
  18484. 8008094: 683b ldr r3, [r7, #0]
  18485. 8008096: 685b ldr r3, [r3, #4]
  18486. 8008098: f003 0303 and.w r3, r3, #3
  18487. 800809c: 2b01 cmp r3, #1
  18488. 800809e: d005 beq.n 80080ac <HAL_GPIO_Init+0x44>
  18489. 80080a0: 683b ldr r3, [r7, #0]
  18490. 80080a2: 685b ldr r3, [r3, #4]
  18491. 80080a4: f003 0303 and.w r3, r3, #3
  18492. 80080a8: 2b02 cmp r3, #2
  18493. 80080aa: d130 bne.n 800810e <HAL_GPIO_Init+0xa6>
  18494. {
  18495. /* Check the Speed parameter */
  18496. assert_param(IS_GPIO_SPEED(GPIO_Init->Speed));
  18497. /* Configure the IO Speed */
  18498. temp = GPIOx->OSPEEDR;
  18499. 80080ac: 687b ldr r3, [r7, #4]
  18500. 80080ae: 689b ldr r3, [r3, #8]
  18501. 80080b0: 61bb str r3, [r7, #24]
  18502. temp &= ~(GPIO_OSPEEDR_OSPEED0 << (position * 2U));
  18503. 80080b2: 69fb ldr r3, [r7, #28]
  18504. 80080b4: 005b lsls r3, r3, #1
  18505. 80080b6: 2203 movs r2, #3
  18506. 80080b8: fa02 f303 lsl.w r3, r2, r3
  18507. 80080bc: 43db mvns r3, r3
  18508. 80080be: 69ba ldr r2, [r7, #24]
  18509. 80080c0: 4013 ands r3, r2
  18510. 80080c2: 61bb str r3, [r7, #24]
  18511. temp |= (GPIO_Init->Speed << (position * 2U));
  18512. 80080c4: 683b ldr r3, [r7, #0]
  18513. 80080c6: 68da ldr r2, [r3, #12]
  18514. 80080c8: 69fb ldr r3, [r7, #28]
  18515. 80080ca: 005b lsls r3, r3, #1
  18516. 80080cc: fa02 f303 lsl.w r3, r2, r3
  18517. 80080d0: 69ba ldr r2, [r7, #24]
  18518. 80080d2: 4313 orrs r3, r2
  18519. 80080d4: 61bb str r3, [r7, #24]
  18520. GPIOx->OSPEEDR = temp;
  18521. 80080d6: 687b ldr r3, [r7, #4]
  18522. 80080d8: 69ba ldr r2, [r7, #24]
  18523. 80080da: 609a str r2, [r3, #8]
  18524. /* Configure the IO Output Type */
  18525. temp = GPIOx->OTYPER;
  18526. 80080dc: 687b ldr r3, [r7, #4]
  18527. 80080de: 685b ldr r3, [r3, #4]
  18528. 80080e0: 61bb str r3, [r7, #24]
  18529. temp &= ~(GPIO_OTYPER_OT0 << position) ;
  18530. 80080e2: 2201 movs r2, #1
  18531. 80080e4: 69fb ldr r3, [r7, #28]
  18532. 80080e6: fa02 f303 lsl.w r3, r2, r3
  18533. 80080ea: 43db mvns r3, r3
  18534. 80080ec: 69ba ldr r2, [r7, #24]
  18535. 80080ee: 4013 ands r3, r2
  18536. 80080f0: 61bb str r3, [r7, #24]
  18537. temp |= (((GPIO_Init->Mode & OUTPUT_TYPE) >> OUTPUT_TYPE_Pos) << position);
  18538. 80080f2: 683b ldr r3, [r7, #0]
  18539. 80080f4: 685b ldr r3, [r3, #4]
  18540. 80080f6: 091b lsrs r3, r3, #4
  18541. 80080f8: f003 0201 and.w r2, r3, #1
  18542. 80080fc: 69fb ldr r3, [r7, #28]
  18543. 80080fe: fa02 f303 lsl.w r3, r2, r3
  18544. 8008102: 69ba ldr r2, [r7, #24]
  18545. 8008104: 4313 orrs r3, r2
  18546. 8008106: 61bb str r3, [r7, #24]
  18547. GPIOx->OTYPER = temp;
  18548. 8008108: 687b ldr r3, [r7, #4]
  18549. 800810a: 69ba ldr r2, [r7, #24]
  18550. 800810c: 605a str r2, [r3, #4]
  18551. }
  18552. if ((GPIO_Init->Mode & GPIO_MODE) != MODE_ANALOG)
  18553. 800810e: 683b ldr r3, [r7, #0]
  18554. 8008110: 685b ldr r3, [r3, #4]
  18555. 8008112: f003 0303 and.w r3, r3, #3
  18556. 8008116: 2b03 cmp r3, #3
  18557. 8008118: d017 beq.n 800814a <HAL_GPIO_Init+0xe2>
  18558. {
  18559. /* Check the Pull parameter */
  18560. assert_param(IS_GPIO_PULL(GPIO_Init->Pull));
  18561. /* Activate the Pull-up or Pull down resistor for the current IO */
  18562. temp = GPIOx->PUPDR;
  18563. 800811a: 687b ldr r3, [r7, #4]
  18564. 800811c: 68db ldr r3, [r3, #12]
  18565. 800811e: 61bb str r3, [r7, #24]
  18566. temp &= ~(GPIO_PUPDR_PUPD0 << (position * 2U));
  18567. 8008120: 69fb ldr r3, [r7, #28]
  18568. 8008122: 005b lsls r3, r3, #1
  18569. 8008124: 2203 movs r2, #3
  18570. 8008126: fa02 f303 lsl.w r3, r2, r3
  18571. 800812a: 43db mvns r3, r3
  18572. 800812c: 69ba ldr r2, [r7, #24]
  18573. 800812e: 4013 ands r3, r2
  18574. 8008130: 61bb str r3, [r7, #24]
  18575. temp |= ((GPIO_Init->Pull) << (position * 2U));
  18576. 8008132: 683b ldr r3, [r7, #0]
  18577. 8008134: 689a ldr r2, [r3, #8]
  18578. 8008136: 69fb ldr r3, [r7, #28]
  18579. 8008138: 005b lsls r3, r3, #1
  18580. 800813a: fa02 f303 lsl.w r3, r2, r3
  18581. 800813e: 69ba ldr r2, [r7, #24]
  18582. 8008140: 4313 orrs r3, r2
  18583. 8008142: 61bb str r3, [r7, #24]
  18584. GPIOx->PUPDR = temp;
  18585. 8008144: 687b ldr r3, [r7, #4]
  18586. 8008146: 69ba ldr r2, [r7, #24]
  18587. 8008148: 60da str r2, [r3, #12]
  18588. }
  18589. /* In case of Alternate function mode selection */
  18590. if ((GPIO_Init->Mode & GPIO_MODE) == MODE_AF)
  18591. 800814a: 683b ldr r3, [r7, #0]
  18592. 800814c: 685b ldr r3, [r3, #4]
  18593. 800814e: f003 0303 and.w r3, r3, #3
  18594. 8008152: 2b02 cmp r3, #2
  18595. 8008154: d123 bne.n 800819e <HAL_GPIO_Init+0x136>
  18596. /* Check the Alternate function parameters */
  18597. assert_param(IS_GPIO_AF_INSTANCE(GPIOx));
  18598. assert_param(IS_GPIO_AF(GPIO_Init->Alternate));
  18599. /* Configure Alternate function mapped with the current IO */
  18600. temp = GPIOx->AFR[position >> 3U];
  18601. 8008156: 69fb ldr r3, [r7, #28]
  18602. 8008158: 08da lsrs r2, r3, #3
  18603. 800815a: 687b ldr r3, [r7, #4]
  18604. 800815c: 3208 adds r2, #8
  18605. 800815e: f853 3022 ldr.w r3, [r3, r2, lsl #2]
  18606. 8008162: 61bb str r3, [r7, #24]
  18607. temp &= ~(0xFU << ((position & 0x07U) * 4U));
  18608. 8008164: 69fb ldr r3, [r7, #28]
  18609. 8008166: f003 0307 and.w r3, r3, #7
  18610. 800816a: 009b lsls r3, r3, #2
  18611. 800816c: 220f movs r2, #15
  18612. 800816e: fa02 f303 lsl.w r3, r2, r3
  18613. 8008172: 43db mvns r3, r3
  18614. 8008174: 69ba ldr r2, [r7, #24]
  18615. 8008176: 4013 ands r3, r2
  18616. 8008178: 61bb str r3, [r7, #24]
  18617. temp |= ((GPIO_Init->Alternate) << ((position & 0x07U) * 4U));
  18618. 800817a: 683b ldr r3, [r7, #0]
  18619. 800817c: 691a ldr r2, [r3, #16]
  18620. 800817e: 69fb ldr r3, [r7, #28]
  18621. 8008180: f003 0307 and.w r3, r3, #7
  18622. 8008184: 009b lsls r3, r3, #2
  18623. 8008186: fa02 f303 lsl.w r3, r2, r3
  18624. 800818a: 69ba ldr r2, [r7, #24]
  18625. 800818c: 4313 orrs r3, r2
  18626. 800818e: 61bb str r3, [r7, #24]
  18627. GPIOx->AFR[position >> 3U] = temp;
  18628. 8008190: 69fb ldr r3, [r7, #28]
  18629. 8008192: 08da lsrs r2, r3, #3
  18630. 8008194: 687b ldr r3, [r7, #4]
  18631. 8008196: 3208 adds r2, #8
  18632. 8008198: 69b9 ldr r1, [r7, #24]
  18633. 800819a: f843 1022 str.w r1, [r3, r2, lsl #2]
  18634. }
  18635. /* Configure IO Direction mode (Input, Output, Alternate or Analog) */
  18636. temp = GPIOx->MODER;
  18637. 800819e: 687b ldr r3, [r7, #4]
  18638. 80081a0: 681b ldr r3, [r3, #0]
  18639. 80081a2: 61bb str r3, [r7, #24]
  18640. temp &= ~(GPIO_MODER_MODE0 << (position * 2U));
  18641. 80081a4: 69fb ldr r3, [r7, #28]
  18642. 80081a6: 005b lsls r3, r3, #1
  18643. 80081a8: 2203 movs r2, #3
  18644. 80081aa: fa02 f303 lsl.w r3, r2, r3
  18645. 80081ae: 43db mvns r3, r3
  18646. 80081b0: 69ba ldr r2, [r7, #24]
  18647. 80081b2: 4013 ands r3, r2
  18648. 80081b4: 61bb str r3, [r7, #24]
  18649. temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2U));
  18650. 80081b6: 683b ldr r3, [r7, #0]
  18651. 80081b8: 685b ldr r3, [r3, #4]
  18652. 80081ba: f003 0203 and.w r2, r3, #3
  18653. 80081be: 69fb ldr r3, [r7, #28]
  18654. 80081c0: 005b lsls r3, r3, #1
  18655. 80081c2: fa02 f303 lsl.w r3, r2, r3
  18656. 80081c6: 69ba ldr r2, [r7, #24]
  18657. 80081c8: 4313 orrs r3, r2
  18658. 80081ca: 61bb str r3, [r7, #24]
  18659. GPIOx->MODER = temp;
  18660. 80081cc: 687b ldr r3, [r7, #4]
  18661. 80081ce: 69ba ldr r2, [r7, #24]
  18662. 80081d0: 601a str r2, [r3, #0]
  18663. /*--------------------- EXTI Mode Configuration ------------------------*/
  18664. /* Configure the External Interrupt or event for the current IO */
  18665. if ((GPIO_Init->Mode & EXTI_MODE) != 0x00U)
  18666. 80081d2: 683b ldr r3, [r7, #0]
  18667. 80081d4: 685b ldr r3, [r3, #4]
  18668. 80081d6: f403 3340 and.w r3, r3, #196608 @ 0x30000
  18669. 80081da: 2b00 cmp r3, #0
  18670. 80081dc: f000 80e0 beq.w 80083a0 <HAL_GPIO_Init+0x338>
  18671. {
  18672. /* Enable SYSCFG Clock */
  18673. __HAL_RCC_SYSCFG_CLK_ENABLE();
  18674. 80081e0: 4b2f ldr r3, [pc, #188] @ (80082a0 <HAL_GPIO_Init+0x238>)
  18675. 80081e2: f8d3 30f4 ldr.w r3, [r3, #244] @ 0xf4
  18676. 80081e6: 4a2e ldr r2, [pc, #184] @ (80082a0 <HAL_GPIO_Init+0x238>)
  18677. 80081e8: f043 0302 orr.w r3, r3, #2
  18678. 80081ec: f8c2 30f4 str.w r3, [r2, #244] @ 0xf4
  18679. 80081f0: 4b2b ldr r3, [pc, #172] @ (80082a0 <HAL_GPIO_Init+0x238>)
  18680. 80081f2: f8d3 30f4 ldr.w r3, [r3, #244] @ 0xf4
  18681. 80081f6: f003 0302 and.w r3, r3, #2
  18682. 80081fa: 60fb str r3, [r7, #12]
  18683. 80081fc: 68fb ldr r3, [r7, #12]
  18684. temp = SYSCFG->EXTICR[position >> 2U];
  18685. 80081fe: 4a29 ldr r2, [pc, #164] @ (80082a4 <HAL_GPIO_Init+0x23c>)
  18686. 8008200: 69fb ldr r3, [r7, #28]
  18687. 8008202: 089b lsrs r3, r3, #2
  18688. 8008204: 3302 adds r3, #2
  18689. 8008206: f852 3023 ldr.w r3, [r2, r3, lsl #2]
  18690. 800820a: 61bb str r3, [r7, #24]
  18691. temp &= ~(0x0FUL << (4U * (position & 0x03U)));
  18692. 800820c: 69fb ldr r3, [r7, #28]
  18693. 800820e: f003 0303 and.w r3, r3, #3
  18694. 8008212: 009b lsls r3, r3, #2
  18695. 8008214: 220f movs r2, #15
  18696. 8008216: fa02 f303 lsl.w r3, r2, r3
  18697. 800821a: 43db mvns r3, r3
  18698. 800821c: 69ba ldr r2, [r7, #24]
  18699. 800821e: 4013 ands r3, r2
  18700. 8008220: 61bb str r3, [r7, #24]
  18701. temp |= (GPIO_GET_INDEX(GPIOx) << (4U * (position & 0x03U)));
  18702. 8008222: 687b ldr r3, [r7, #4]
  18703. 8008224: 4a20 ldr r2, [pc, #128] @ (80082a8 <HAL_GPIO_Init+0x240>)
  18704. 8008226: 4293 cmp r3, r2
  18705. 8008228: d052 beq.n 80082d0 <HAL_GPIO_Init+0x268>
  18706. 800822a: 687b ldr r3, [r7, #4]
  18707. 800822c: 4a1f ldr r2, [pc, #124] @ (80082ac <HAL_GPIO_Init+0x244>)
  18708. 800822e: 4293 cmp r3, r2
  18709. 8008230: d031 beq.n 8008296 <HAL_GPIO_Init+0x22e>
  18710. 8008232: 687b ldr r3, [r7, #4]
  18711. 8008234: 4a1e ldr r2, [pc, #120] @ (80082b0 <HAL_GPIO_Init+0x248>)
  18712. 8008236: 4293 cmp r3, r2
  18713. 8008238: d02b beq.n 8008292 <HAL_GPIO_Init+0x22a>
  18714. 800823a: 687b ldr r3, [r7, #4]
  18715. 800823c: 4a1d ldr r2, [pc, #116] @ (80082b4 <HAL_GPIO_Init+0x24c>)
  18716. 800823e: 4293 cmp r3, r2
  18717. 8008240: d025 beq.n 800828e <HAL_GPIO_Init+0x226>
  18718. 8008242: 687b ldr r3, [r7, #4]
  18719. 8008244: 4a1c ldr r2, [pc, #112] @ (80082b8 <HAL_GPIO_Init+0x250>)
  18720. 8008246: 4293 cmp r3, r2
  18721. 8008248: d01f beq.n 800828a <HAL_GPIO_Init+0x222>
  18722. 800824a: 687b ldr r3, [r7, #4]
  18723. 800824c: 4a1b ldr r2, [pc, #108] @ (80082bc <HAL_GPIO_Init+0x254>)
  18724. 800824e: 4293 cmp r3, r2
  18725. 8008250: d019 beq.n 8008286 <HAL_GPIO_Init+0x21e>
  18726. 8008252: 687b ldr r3, [r7, #4]
  18727. 8008254: 4a1a ldr r2, [pc, #104] @ (80082c0 <HAL_GPIO_Init+0x258>)
  18728. 8008256: 4293 cmp r3, r2
  18729. 8008258: d013 beq.n 8008282 <HAL_GPIO_Init+0x21a>
  18730. 800825a: 687b ldr r3, [r7, #4]
  18731. 800825c: 4a19 ldr r2, [pc, #100] @ (80082c4 <HAL_GPIO_Init+0x25c>)
  18732. 800825e: 4293 cmp r3, r2
  18733. 8008260: d00d beq.n 800827e <HAL_GPIO_Init+0x216>
  18734. 8008262: 687b ldr r3, [r7, #4]
  18735. 8008264: 4a18 ldr r2, [pc, #96] @ (80082c8 <HAL_GPIO_Init+0x260>)
  18736. 8008266: 4293 cmp r3, r2
  18737. 8008268: d007 beq.n 800827a <HAL_GPIO_Init+0x212>
  18738. 800826a: 687b ldr r3, [r7, #4]
  18739. 800826c: 4a17 ldr r2, [pc, #92] @ (80082cc <HAL_GPIO_Init+0x264>)
  18740. 800826e: 4293 cmp r3, r2
  18741. 8008270: d101 bne.n 8008276 <HAL_GPIO_Init+0x20e>
  18742. 8008272: 2309 movs r3, #9
  18743. 8008274: e02d b.n 80082d2 <HAL_GPIO_Init+0x26a>
  18744. 8008276: 230a movs r3, #10
  18745. 8008278: e02b b.n 80082d2 <HAL_GPIO_Init+0x26a>
  18746. 800827a: 2308 movs r3, #8
  18747. 800827c: e029 b.n 80082d2 <HAL_GPIO_Init+0x26a>
  18748. 800827e: 2307 movs r3, #7
  18749. 8008280: e027 b.n 80082d2 <HAL_GPIO_Init+0x26a>
  18750. 8008282: 2306 movs r3, #6
  18751. 8008284: e025 b.n 80082d2 <HAL_GPIO_Init+0x26a>
  18752. 8008286: 2305 movs r3, #5
  18753. 8008288: e023 b.n 80082d2 <HAL_GPIO_Init+0x26a>
  18754. 800828a: 2304 movs r3, #4
  18755. 800828c: e021 b.n 80082d2 <HAL_GPIO_Init+0x26a>
  18756. 800828e: 2303 movs r3, #3
  18757. 8008290: e01f b.n 80082d2 <HAL_GPIO_Init+0x26a>
  18758. 8008292: 2302 movs r3, #2
  18759. 8008294: e01d b.n 80082d2 <HAL_GPIO_Init+0x26a>
  18760. 8008296: 2301 movs r3, #1
  18761. 8008298: e01b b.n 80082d2 <HAL_GPIO_Init+0x26a>
  18762. 800829a: bf00 nop
  18763. 800829c: 58000080 .word 0x58000080
  18764. 80082a0: 58024400 .word 0x58024400
  18765. 80082a4: 58000400 .word 0x58000400
  18766. 80082a8: 58020000 .word 0x58020000
  18767. 80082ac: 58020400 .word 0x58020400
  18768. 80082b0: 58020800 .word 0x58020800
  18769. 80082b4: 58020c00 .word 0x58020c00
  18770. 80082b8: 58021000 .word 0x58021000
  18771. 80082bc: 58021400 .word 0x58021400
  18772. 80082c0: 58021800 .word 0x58021800
  18773. 80082c4: 58021c00 .word 0x58021c00
  18774. 80082c8: 58022000 .word 0x58022000
  18775. 80082cc: 58022400 .word 0x58022400
  18776. 80082d0: 2300 movs r3, #0
  18777. 80082d2: 69fa ldr r2, [r7, #28]
  18778. 80082d4: f002 0203 and.w r2, r2, #3
  18779. 80082d8: 0092 lsls r2, r2, #2
  18780. 80082da: 4093 lsls r3, r2
  18781. 80082dc: 69ba ldr r2, [r7, #24]
  18782. 80082de: 4313 orrs r3, r2
  18783. 80082e0: 61bb str r3, [r7, #24]
  18784. SYSCFG->EXTICR[position >> 2U] = temp;
  18785. 80082e2: 4938 ldr r1, [pc, #224] @ (80083c4 <HAL_GPIO_Init+0x35c>)
  18786. 80082e4: 69fb ldr r3, [r7, #28]
  18787. 80082e6: 089b lsrs r3, r3, #2
  18788. 80082e8: 3302 adds r3, #2
  18789. 80082ea: 69ba ldr r2, [r7, #24]
  18790. 80082ec: f841 2023 str.w r2, [r1, r3, lsl #2]
  18791. /* Clear Rising Falling edge configuration */
  18792. temp = EXTI->RTSR1;
  18793. 80082f0: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  18794. 80082f4: 681b ldr r3, [r3, #0]
  18795. 80082f6: 61bb str r3, [r7, #24]
  18796. temp &= ~(iocurrent);
  18797. 80082f8: 693b ldr r3, [r7, #16]
  18798. 80082fa: 43db mvns r3, r3
  18799. 80082fc: 69ba ldr r2, [r7, #24]
  18800. 80082fe: 4013 ands r3, r2
  18801. 8008300: 61bb str r3, [r7, #24]
  18802. if ((GPIO_Init->Mode & TRIGGER_RISING) != 0x00U)
  18803. 8008302: 683b ldr r3, [r7, #0]
  18804. 8008304: 685b ldr r3, [r3, #4]
  18805. 8008306: f403 1380 and.w r3, r3, #1048576 @ 0x100000
  18806. 800830a: 2b00 cmp r3, #0
  18807. 800830c: d003 beq.n 8008316 <HAL_GPIO_Init+0x2ae>
  18808. {
  18809. temp |= iocurrent;
  18810. 800830e: 69ba ldr r2, [r7, #24]
  18811. 8008310: 693b ldr r3, [r7, #16]
  18812. 8008312: 4313 orrs r3, r2
  18813. 8008314: 61bb str r3, [r7, #24]
  18814. }
  18815. EXTI->RTSR1 = temp;
  18816. 8008316: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  18817. 800831a: 69bb ldr r3, [r7, #24]
  18818. 800831c: 6013 str r3, [r2, #0]
  18819. temp = EXTI->FTSR1;
  18820. 800831e: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
  18821. 8008322: 685b ldr r3, [r3, #4]
  18822. 8008324: 61bb str r3, [r7, #24]
  18823. temp &= ~(iocurrent);
  18824. 8008326: 693b ldr r3, [r7, #16]
  18825. 8008328: 43db mvns r3, r3
  18826. 800832a: 69ba ldr r2, [r7, #24]
  18827. 800832c: 4013 ands r3, r2
  18828. 800832e: 61bb str r3, [r7, #24]
  18829. if ((GPIO_Init->Mode & TRIGGER_FALLING) != 0x00U)
  18830. 8008330: 683b ldr r3, [r7, #0]
  18831. 8008332: 685b ldr r3, [r3, #4]
  18832. 8008334: f403 1300 and.w r3, r3, #2097152 @ 0x200000
  18833. 8008338: 2b00 cmp r3, #0
  18834. 800833a: d003 beq.n 8008344 <HAL_GPIO_Init+0x2dc>
  18835. {
  18836. temp |= iocurrent;
  18837. 800833c: 69ba ldr r2, [r7, #24]
  18838. 800833e: 693b ldr r3, [r7, #16]
  18839. 8008340: 4313 orrs r3, r2
  18840. 8008342: 61bb str r3, [r7, #24]
  18841. }
  18842. EXTI->FTSR1 = temp;
  18843. 8008344: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
  18844. 8008348: 69bb ldr r3, [r7, #24]
  18845. 800834a: 6053 str r3, [r2, #4]
  18846. temp = EXTI_CurrentCPU->EMR1;
  18847. 800834c: 697b ldr r3, [r7, #20]
  18848. 800834e: 685b ldr r3, [r3, #4]
  18849. 8008350: 61bb str r3, [r7, #24]
  18850. temp &= ~(iocurrent);
  18851. 8008352: 693b ldr r3, [r7, #16]
  18852. 8008354: 43db mvns r3, r3
  18853. 8008356: 69ba ldr r2, [r7, #24]
  18854. 8008358: 4013 ands r3, r2
  18855. 800835a: 61bb str r3, [r7, #24]
  18856. if ((GPIO_Init->Mode & EXTI_EVT) != 0x00U)
  18857. 800835c: 683b ldr r3, [r7, #0]
  18858. 800835e: 685b ldr r3, [r3, #4]
  18859. 8008360: f403 3300 and.w r3, r3, #131072 @ 0x20000
  18860. 8008364: 2b00 cmp r3, #0
  18861. 8008366: d003 beq.n 8008370 <HAL_GPIO_Init+0x308>
  18862. {
  18863. temp |= iocurrent;
  18864. 8008368: 69ba ldr r2, [r7, #24]
  18865. 800836a: 693b ldr r3, [r7, #16]
  18866. 800836c: 4313 orrs r3, r2
  18867. 800836e: 61bb str r3, [r7, #24]
  18868. }
  18869. EXTI_CurrentCPU->EMR1 = temp;
  18870. 8008370: 697b ldr r3, [r7, #20]
  18871. 8008372: 69ba ldr r2, [r7, #24]
  18872. 8008374: 605a str r2, [r3, #4]
  18873. /* Clear EXTI line configuration */
  18874. temp = EXTI_CurrentCPU->IMR1;
  18875. 8008376: 697b ldr r3, [r7, #20]
  18876. 8008378: 681b ldr r3, [r3, #0]
  18877. 800837a: 61bb str r3, [r7, #24]
  18878. temp &= ~(iocurrent);
  18879. 800837c: 693b ldr r3, [r7, #16]
  18880. 800837e: 43db mvns r3, r3
  18881. 8008380: 69ba ldr r2, [r7, #24]
  18882. 8008382: 4013 ands r3, r2
  18883. 8008384: 61bb str r3, [r7, #24]
  18884. if ((GPIO_Init->Mode & EXTI_IT) != 0x00U)
  18885. 8008386: 683b ldr r3, [r7, #0]
  18886. 8008388: 685b ldr r3, [r3, #4]
  18887. 800838a: f403 3380 and.w r3, r3, #65536 @ 0x10000
  18888. 800838e: 2b00 cmp r3, #0
  18889. 8008390: d003 beq.n 800839a <HAL_GPIO_Init+0x332>
  18890. {
  18891. temp |= iocurrent;
  18892. 8008392: 69ba ldr r2, [r7, #24]
  18893. 8008394: 693b ldr r3, [r7, #16]
  18894. 8008396: 4313 orrs r3, r2
  18895. 8008398: 61bb str r3, [r7, #24]
  18896. }
  18897. EXTI_CurrentCPU->IMR1 = temp;
  18898. 800839a: 697b ldr r3, [r7, #20]
  18899. 800839c: 69ba ldr r2, [r7, #24]
  18900. 800839e: 601a str r2, [r3, #0]
  18901. }
  18902. }
  18903. position++;
  18904. 80083a0: 69fb ldr r3, [r7, #28]
  18905. 80083a2: 3301 adds r3, #1
  18906. 80083a4: 61fb str r3, [r7, #28]
  18907. while (((GPIO_Init->Pin) >> position) != 0x00U)
  18908. 80083a6: 683b ldr r3, [r7, #0]
  18909. 80083a8: 681a ldr r2, [r3, #0]
  18910. 80083aa: 69fb ldr r3, [r7, #28]
  18911. 80083ac: fa22 f303 lsr.w r3, r2, r3
  18912. 80083b0: 2b00 cmp r3, #0
  18913. 80083b2: f47f ae63 bne.w 800807c <HAL_GPIO_Init+0x14>
  18914. }
  18915. }
  18916. 80083b6: bf00 nop
  18917. 80083b8: bf00 nop
  18918. 80083ba: 3724 adds r7, #36 @ 0x24
  18919. 80083bc: 46bd mov sp, r7
  18920. 80083be: f85d 7b04 ldr.w r7, [sp], #4
  18921. 80083c2: 4770 bx lr
  18922. 80083c4: 58000400 .word 0x58000400
  18923. 080083c8 <HAL_GPIO_WritePin>:
  18924. * @arg GPIO_PIN_RESET: to clear the port pin
  18925. * @arg GPIO_PIN_SET: to set the port pin
  18926. * @retval None
  18927. */
  18928. void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
  18929. {
  18930. 80083c8: b480 push {r7}
  18931. 80083ca: b083 sub sp, #12
  18932. 80083cc: af00 add r7, sp, #0
  18933. 80083ce: 6078 str r0, [r7, #4]
  18934. 80083d0: 460b mov r3, r1
  18935. 80083d2: 807b strh r3, [r7, #2]
  18936. 80083d4: 4613 mov r3, r2
  18937. 80083d6: 707b strb r3, [r7, #1]
  18938. /* Check the parameters */
  18939. assert_param(IS_GPIO_PIN(GPIO_Pin));
  18940. assert_param(IS_GPIO_PIN_ACTION(PinState));
  18941. if (PinState != GPIO_PIN_RESET)
  18942. 80083d8: 787b ldrb r3, [r7, #1]
  18943. 80083da: 2b00 cmp r3, #0
  18944. 80083dc: d003 beq.n 80083e6 <HAL_GPIO_WritePin+0x1e>
  18945. {
  18946. GPIOx->BSRR = GPIO_Pin;
  18947. 80083de: 887a ldrh r2, [r7, #2]
  18948. 80083e0: 687b ldr r3, [r7, #4]
  18949. 80083e2: 619a str r2, [r3, #24]
  18950. }
  18951. else
  18952. {
  18953. GPIOx->BSRR = (uint32_t)GPIO_Pin << GPIO_NUMBER;
  18954. }
  18955. }
  18956. 80083e4: e003 b.n 80083ee <HAL_GPIO_WritePin+0x26>
  18957. GPIOx->BSRR = (uint32_t)GPIO_Pin << GPIO_NUMBER;
  18958. 80083e6: 887b ldrh r3, [r7, #2]
  18959. 80083e8: 041a lsls r2, r3, #16
  18960. 80083ea: 687b ldr r3, [r7, #4]
  18961. 80083ec: 619a str r2, [r3, #24]
  18962. }
  18963. 80083ee: bf00 nop
  18964. 80083f0: 370c adds r7, #12
  18965. 80083f2: 46bd mov sp, r7
  18966. 80083f4: f85d 7b04 ldr.w r7, [sp], #4
  18967. 80083f8: 4770 bx lr
  18968. 080083fa <HAL_GPIO_TogglePin>:
  18969. * @param GPIOx: Where x can be (A..K) to select the GPIO peripheral.
  18970. * @param GPIO_Pin: Specifies the pins to be toggled.
  18971. * @retval None
  18972. */
  18973. void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
  18974. {
  18975. 80083fa: b480 push {r7}
  18976. 80083fc: b085 sub sp, #20
  18977. 80083fe: af00 add r7, sp, #0
  18978. 8008400: 6078 str r0, [r7, #4]
  18979. 8008402: 460b mov r3, r1
  18980. 8008404: 807b strh r3, [r7, #2]
  18981. /* Check the parameters */
  18982. assert_param(IS_GPIO_PIN(GPIO_Pin));
  18983. /* get current Output Data Register value */
  18984. odr = GPIOx->ODR;
  18985. 8008406: 687b ldr r3, [r7, #4]
  18986. 8008408: 695b ldr r3, [r3, #20]
  18987. 800840a: 60fb str r3, [r7, #12]
  18988. /* Set selected pins that were at low level, and reset ones that were high */
  18989. GPIOx->BSRR = ((odr & GPIO_Pin) << GPIO_NUMBER) | (~odr & GPIO_Pin);
  18990. 800840c: 887a ldrh r2, [r7, #2]
  18991. 800840e: 68fb ldr r3, [r7, #12]
  18992. 8008410: 4013 ands r3, r2
  18993. 8008412: 041a lsls r2, r3, #16
  18994. 8008414: 68fb ldr r3, [r7, #12]
  18995. 8008416: 43d9 mvns r1, r3
  18996. 8008418: 887b ldrh r3, [r7, #2]
  18997. 800841a: 400b ands r3, r1
  18998. 800841c: 431a orrs r2, r3
  18999. 800841e: 687b ldr r3, [r7, #4]
  19000. 8008420: 619a str r2, [r3, #24]
  19001. }
  19002. 8008422: bf00 nop
  19003. 8008424: 3714 adds r7, #20
  19004. 8008426: 46bd mov sp, r7
  19005. 8008428: f85d 7b04 ldr.w r7, [sp], #4
  19006. 800842c: 4770 bx lr
  19007. ...
  19008. 08008430 <HAL_PWREx_ConfigSupply>:
  19009. * PWR_SMPS_2V5_SUPPLIES_EXT are used only for lines that supports SMPS
  19010. * regulator.
  19011. * @retval HAL status.
  19012. */
  19013. HAL_StatusTypeDef HAL_PWREx_ConfigSupply (uint32_t SupplySource)
  19014. {
  19015. 8008430: b580 push {r7, lr}
  19016. 8008432: b084 sub sp, #16
  19017. 8008434: af00 add r7, sp, #0
  19018. 8008436: 6078 str r0, [r7, #4]
  19019. /* Check the parameters */
  19020. assert_param (IS_PWR_SUPPLY (SupplySource));
  19021. /* Check if supply source was configured */
  19022. #if defined (PWR_FLAG_SCUEN)
  19023. if (__HAL_PWR_GET_FLAG (PWR_FLAG_SCUEN) == 0U)
  19024. 8008438: 4b19 ldr r3, [pc, #100] @ (80084a0 <HAL_PWREx_ConfigSupply+0x70>)
  19025. 800843a: 68db ldr r3, [r3, #12]
  19026. 800843c: f003 0304 and.w r3, r3, #4
  19027. 8008440: 2b04 cmp r3, #4
  19028. 8008442: d00a beq.n 800845a <HAL_PWREx_ConfigSupply+0x2a>
  19029. #else
  19030. if ((PWR->CR3 & (PWR_CR3_SMPSEN | PWR_CR3_LDOEN | PWR_CR3_BYPASS)) != (PWR_CR3_SMPSEN | PWR_CR3_LDOEN))
  19031. #endif /* defined (PWR_FLAG_SCUEN) */
  19032. {
  19033. /* Check supply configuration */
  19034. if ((PWR->CR3 & PWR_SUPPLY_CONFIG_MASK) != SupplySource)
  19035. 8008444: 4b16 ldr r3, [pc, #88] @ (80084a0 <HAL_PWREx_ConfigSupply+0x70>)
  19036. 8008446: 68db ldr r3, [r3, #12]
  19037. 8008448: f003 0307 and.w r3, r3, #7
  19038. 800844c: 687a ldr r2, [r7, #4]
  19039. 800844e: 429a cmp r2, r3
  19040. 8008450: d001 beq.n 8008456 <HAL_PWREx_ConfigSupply+0x26>
  19041. {
  19042. /* Supply configuration update locked, can't apply a new supply config */
  19043. return HAL_ERROR;
  19044. 8008452: 2301 movs r3, #1
  19045. 8008454: e01f b.n 8008496 <HAL_PWREx_ConfigSupply+0x66>
  19046. else
  19047. {
  19048. /* Supply configuration update locked, but new supply configuration
  19049. matches with old supply configuration : nothing to do
  19050. */
  19051. return HAL_OK;
  19052. 8008456: 2300 movs r3, #0
  19053. 8008458: e01d b.n 8008496 <HAL_PWREx_ConfigSupply+0x66>
  19054. }
  19055. }
  19056. /* Set the power supply configuration */
  19057. MODIFY_REG (PWR->CR3, PWR_SUPPLY_CONFIG_MASK, SupplySource);
  19058. 800845a: 4b11 ldr r3, [pc, #68] @ (80084a0 <HAL_PWREx_ConfigSupply+0x70>)
  19059. 800845c: 68db ldr r3, [r3, #12]
  19060. 800845e: f023 0207 bic.w r2, r3, #7
  19061. 8008462: 490f ldr r1, [pc, #60] @ (80084a0 <HAL_PWREx_ConfigSupply+0x70>)
  19062. 8008464: 687b ldr r3, [r7, #4]
  19063. 8008466: 4313 orrs r3, r2
  19064. 8008468: 60cb str r3, [r1, #12]
  19065. /* Get tick */
  19066. tickstart = HAL_GetTick ();
  19067. 800846a: f7fb f82b bl 80034c4 <HAL_GetTick>
  19068. 800846e: 60f8 str r0, [r7, #12]
  19069. /* Wait till voltage level flag is set */
  19070. while (__HAL_PWR_GET_FLAG (PWR_FLAG_ACTVOSRDY) == 0U)
  19071. 8008470: e009 b.n 8008486 <HAL_PWREx_ConfigSupply+0x56>
  19072. {
  19073. if ((HAL_GetTick () - tickstart) > PWR_FLAG_SETTING_DELAY)
  19074. 8008472: f7fb f827 bl 80034c4 <HAL_GetTick>
  19075. 8008476: 4602 mov r2, r0
  19076. 8008478: 68fb ldr r3, [r7, #12]
  19077. 800847a: 1ad3 subs r3, r2, r3
  19078. 800847c: f5b3 7f7a cmp.w r3, #1000 @ 0x3e8
  19079. 8008480: d901 bls.n 8008486 <HAL_PWREx_ConfigSupply+0x56>
  19080. {
  19081. return HAL_ERROR;
  19082. 8008482: 2301 movs r3, #1
  19083. 8008484: e007 b.n 8008496 <HAL_PWREx_ConfigSupply+0x66>
  19084. while (__HAL_PWR_GET_FLAG (PWR_FLAG_ACTVOSRDY) == 0U)
  19085. 8008486: 4b06 ldr r3, [pc, #24] @ (80084a0 <HAL_PWREx_ConfigSupply+0x70>)
  19086. 8008488: 685b ldr r3, [r3, #4]
  19087. 800848a: f403 5300 and.w r3, r3, #8192 @ 0x2000
  19088. 800848e: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  19089. 8008492: d1ee bne.n 8008472 <HAL_PWREx_ConfigSupply+0x42>
  19090. }
  19091. }
  19092. }
  19093. #endif /* defined (SMPS) */
  19094. return HAL_OK;
  19095. 8008494: 2300 movs r3, #0
  19096. }
  19097. 8008496: 4618 mov r0, r3
  19098. 8008498: 3710 adds r7, #16
  19099. 800849a: 46bd mov sp, r7
  19100. 800849c: bd80 pop {r7, pc}
  19101. 800849e: bf00 nop
  19102. 80084a0: 58024800 .word 0x58024800
  19103. 080084a4 <HAL_RCC_OscConfig>:
  19104. * supported by this function. User should request a transition to HSE Off
  19105. * first and then HSE On or HSE Bypass.
  19106. * @retval HAL status
  19107. */
  19108. __weak HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
  19109. {
  19110. 80084a4: b580 push {r7, lr}
  19111. 80084a6: b08c sub sp, #48 @ 0x30
  19112. 80084a8: af00 add r7, sp, #0
  19113. 80084aa: 6078 str r0, [r7, #4]
  19114. uint32_t tickstart;
  19115. uint32_t temp1_pllckcfg, temp2_pllckcfg;
  19116. /* Check Null pointer */
  19117. if (RCC_OscInitStruct == NULL)
  19118. 80084ac: 687b ldr r3, [r7, #4]
  19119. 80084ae: 2b00 cmp r3, #0
  19120. 80084b0: d102 bne.n 80084b8 <HAL_RCC_OscConfig+0x14>
  19121. {
  19122. return HAL_ERROR;
  19123. 80084b2: 2301 movs r3, #1
  19124. 80084b4: f000 bc48 b.w 8008d48 <HAL_RCC_OscConfig+0x8a4>
  19125. }
  19126. /* Check the parameters */
  19127. assert_param(IS_RCC_OSCILLATORTYPE(RCC_OscInitStruct->OscillatorType));
  19128. /*------------------------------- HSE Configuration ------------------------*/
  19129. if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE)
  19130. 80084b8: 687b ldr r3, [r7, #4]
  19131. 80084ba: 681b ldr r3, [r3, #0]
  19132. 80084bc: f003 0301 and.w r3, r3, #1
  19133. 80084c0: 2b00 cmp r3, #0
  19134. 80084c2: f000 8088 beq.w 80085d6 <HAL_RCC_OscConfig+0x132>
  19135. {
  19136. /* Check the parameters */
  19137. assert_param(IS_RCC_HSE(RCC_OscInitStruct->HSEState));
  19138. const uint32_t temp_sysclksrc = __HAL_RCC_GET_SYSCLK_SOURCE();
  19139. 80084c6: 4b99 ldr r3, [pc, #612] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19140. 80084c8: 691b ldr r3, [r3, #16]
  19141. 80084ca: f003 0338 and.w r3, r3, #56 @ 0x38
  19142. 80084ce: 62fb str r3, [r7, #44] @ 0x2c
  19143. const uint32_t temp_pllckselr = RCC->PLLCKSELR;
  19144. 80084d0: 4b96 ldr r3, [pc, #600] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19145. 80084d2: 6a9b ldr r3, [r3, #40] @ 0x28
  19146. 80084d4: 62bb str r3, [r7, #40] @ 0x28
  19147. /* When the HSE is used as system clock or clock source for PLL in these cases HSE will not disabled */
  19148. if ((temp_sysclksrc == RCC_CFGR_SWS_HSE) || ((temp_sysclksrc == RCC_CFGR_SWS_PLL1) && ((temp_pllckselr & RCC_PLLCKSELR_PLLSRC) == RCC_PLLCKSELR_PLLSRC_HSE)))
  19149. 80084d6: 6afb ldr r3, [r7, #44] @ 0x2c
  19150. 80084d8: 2b10 cmp r3, #16
  19151. 80084da: d007 beq.n 80084ec <HAL_RCC_OscConfig+0x48>
  19152. 80084dc: 6afb ldr r3, [r7, #44] @ 0x2c
  19153. 80084de: 2b18 cmp r3, #24
  19154. 80084e0: d111 bne.n 8008506 <HAL_RCC_OscConfig+0x62>
  19155. 80084e2: 6abb ldr r3, [r7, #40] @ 0x28
  19156. 80084e4: f003 0303 and.w r3, r3, #3
  19157. 80084e8: 2b02 cmp r3, #2
  19158. 80084ea: d10c bne.n 8008506 <HAL_RCC_OscConfig+0x62>
  19159. {
  19160. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != 0U) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF))
  19161. 80084ec: 4b8f ldr r3, [pc, #572] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19162. 80084ee: 681b ldr r3, [r3, #0]
  19163. 80084f0: f403 3300 and.w r3, r3, #131072 @ 0x20000
  19164. 80084f4: 2b00 cmp r3, #0
  19165. 80084f6: d06d beq.n 80085d4 <HAL_RCC_OscConfig+0x130>
  19166. 80084f8: 687b ldr r3, [r7, #4]
  19167. 80084fa: 685b ldr r3, [r3, #4]
  19168. 80084fc: 2b00 cmp r3, #0
  19169. 80084fe: d169 bne.n 80085d4 <HAL_RCC_OscConfig+0x130>
  19170. {
  19171. return HAL_ERROR;
  19172. 8008500: 2301 movs r3, #1
  19173. 8008502: f000 bc21 b.w 8008d48 <HAL_RCC_OscConfig+0x8a4>
  19174. }
  19175. }
  19176. else
  19177. {
  19178. /* Set the new HSE configuration ---------------------------------------*/
  19179. __HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState);
  19180. 8008506: 687b ldr r3, [r7, #4]
  19181. 8008508: 685b ldr r3, [r3, #4]
  19182. 800850a: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  19183. 800850e: d106 bne.n 800851e <HAL_RCC_OscConfig+0x7a>
  19184. 8008510: 4b86 ldr r3, [pc, #536] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19185. 8008512: 681b ldr r3, [r3, #0]
  19186. 8008514: 4a85 ldr r2, [pc, #532] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19187. 8008516: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  19188. 800851a: 6013 str r3, [r2, #0]
  19189. 800851c: e02e b.n 800857c <HAL_RCC_OscConfig+0xd8>
  19190. 800851e: 687b ldr r3, [r7, #4]
  19191. 8008520: 685b ldr r3, [r3, #4]
  19192. 8008522: 2b00 cmp r3, #0
  19193. 8008524: d10c bne.n 8008540 <HAL_RCC_OscConfig+0x9c>
  19194. 8008526: 4b81 ldr r3, [pc, #516] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19195. 8008528: 681b ldr r3, [r3, #0]
  19196. 800852a: 4a80 ldr r2, [pc, #512] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19197. 800852c: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  19198. 8008530: 6013 str r3, [r2, #0]
  19199. 8008532: 4b7e ldr r3, [pc, #504] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19200. 8008534: 681b ldr r3, [r3, #0]
  19201. 8008536: 4a7d ldr r2, [pc, #500] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19202. 8008538: f423 2380 bic.w r3, r3, #262144 @ 0x40000
  19203. 800853c: 6013 str r3, [r2, #0]
  19204. 800853e: e01d b.n 800857c <HAL_RCC_OscConfig+0xd8>
  19205. 8008540: 687b ldr r3, [r7, #4]
  19206. 8008542: 685b ldr r3, [r3, #4]
  19207. 8008544: f5b3 2fa0 cmp.w r3, #327680 @ 0x50000
  19208. 8008548: d10c bne.n 8008564 <HAL_RCC_OscConfig+0xc0>
  19209. 800854a: 4b78 ldr r3, [pc, #480] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19210. 800854c: 681b ldr r3, [r3, #0]
  19211. 800854e: 4a77 ldr r2, [pc, #476] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19212. 8008550: f443 2380 orr.w r3, r3, #262144 @ 0x40000
  19213. 8008554: 6013 str r3, [r2, #0]
  19214. 8008556: 4b75 ldr r3, [pc, #468] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19215. 8008558: 681b ldr r3, [r3, #0]
  19216. 800855a: 4a74 ldr r2, [pc, #464] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19217. 800855c: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  19218. 8008560: 6013 str r3, [r2, #0]
  19219. 8008562: e00b b.n 800857c <HAL_RCC_OscConfig+0xd8>
  19220. 8008564: 4b71 ldr r3, [pc, #452] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19221. 8008566: 681b ldr r3, [r3, #0]
  19222. 8008568: 4a70 ldr r2, [pc, #448] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19223. 800856a: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  19224. 800856e: 6013 str r3, [r2, #0]
  19225. 8008570: 4b6e ldr r3, [pc, #440] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19226. 8008572: 681b ldr r3, [r3, #0]
  19227. 8008574: 4a6d ldr r2, [pc, #436] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19228. 8008576: f423 2380 bic.w r3, r3, #262144 @ 0x40000
  19229. 800857a: 6013 str r3, [r2, #0]
  19230. /* Check the HSE State */
  19231. if (RCC_OscInitStruct->HSEState != RCC_HSE_OFF)
  19232. 800857c: 687b ldr r3, [r7, #4]
  19233. 800857e: 685b ldr r3, [r3, #4]
  19234. 8008580: 2b00 cmp r3, #0
  19235. 8008582: d013 beq.n 80085ac <HAL_RCC_OscConfig+0x108>
  19236. {
  19237. /* Get Start Tick*/
  19238. tickstart = HAL_GetTick();
  19239. 8008584: f7fa ff9e bl 80034c4 <HAL_GetTick>
  19240. 8008588: 6278 str r0, [r7, #36] @ 0x24
  19241. /* Wait till HSE is ready */
  19242. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == 0U)
  19243. 800858a: e008 b.n 800859e <HAL_RCC_OscConfig+0xfa>
  19244. {
  19245. if ((uint32_t)(HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE)
  19246. 800858c: f7fa ff9a bl 80034c4 <HAL_GetTick>
  19247. 8008590: 4602 mov r2, r0
  19248. 8008592: 6a7b ldr r3, [r7, #36] @ 0x24
  19249. 8008594: 1ad3 subs r3, r2, r3
  19250. 8008596: 2b64 cmp r3, #100 @ 0x64
  19251. 8008598: d901 bls.n 800859e <HAL_RCC_OscConfig+0xfa>
  19252. {
  19253. return HAL_TIMEOUT;
  19254. 800859a: 2303 movs r3, #3
  19255. 800859c: e3d4 b.n 8008d48 <HAL_RCC_OscConfig+0x8a4>
  19256. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == 0U)
  19257. 800859e: 4b63 ldr r3, [pc, #396] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19258. 80085a0: 681b ldr r3, [r3, #0]
  19259. 80085a2: f403 3300 and.w r3, r3, #131072 @ 0x20000
  19260. 80085a6: 2b00 cmp r3, #0
  19261. 80085a8: d0f0 beq.n 800858c <HAL_RCC_OscConfig+0xe8>
  19262. 80085aa: e014 b.n 80085d6 <HAL_RCC_OscConfig+0x132>
  19263. }
  19264. }
  19265. else
  19266. {
  19267. /* Get Start Tick*/
  19268. tickstart = HAL_GetTick();
  19269. 80085ac: f7fa ff8a bl 80034c4 <HAL_GetTick>
  19270. 80085b0: 6278 str r0, [r7, #36] @ 0x24
  19271. /* Wait till HSE is disabled */
  19272. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != 0U)
  19273. 80085b2: e008 b.n 80085c6 <HAL_RCC_OscConfig+0x122>
  19274. {
  19275. if ((uint32_t)(HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE)
  19276. 80085b4: f7fa ff86 bl 80034c4 <HAL_GetTick>
  19277. 80085b8: 4602 mov r2, r0
  19278. 80085ba: 6a7b ldr r3, [r7, #36] @ 0x24
  19279. 80085bc: 1ad3 subs r3, r2, r3
  19280. 80085be: 2b64 cmp r3, #100 @ 0x64
  19281. 80085c0: d901 bls.n 80085c6 <HAL_RCC_OscConfig+0x122>
  19282. {
  19283. return HAL_TIMEOUT;
  19284. 80085c2: 2303 movs r3, #3
  19285. 80085c4: e3c0 b.n 8008d48 <HAL_RCC_OscConfig+0x8a4>
  19286. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != 0U)
  19287. 80085c6: 4b59 ldr r3, [pc, #356] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19288. 80085c8: 681b ldr r3, [r3, #0]
  19289. 80085ca: f403 3300 and.w r3, r3, #131072 @ 0x20000
  19290. 80085ce: 2b00 cmp r3, #0
  19291. 80085d0: d1f0 bne.n 80085b4 <HAL_RCC_OscConfig+0x110>
  19292. 80085d2: e000 b.n 80085d6 <HAL_RCC_OscConfig+0x132>
  19293. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != 0U) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF))
  19294. 80085d4: bf00 nop
  19295. }
  19296. }
  19297. }
  19298. }
  19299. /*----------------------------- HSI Configuration --------------------------*/
  19300. if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI)
  19301. 80085d6: 687b ldr r3, [r7, #4]
  19302. 80085d8: 681b ldr r3, [r3, #0]
  19303. 80085da: f003 0302 and.w r3, r3, #2
  19304. 80085de: 2b00 cmp r3, #0
  19305. 80085e0: f000 80ca beq.w 8008778 <HAL_RCC_OscConfig+0x2d4>
  19306. /* Check the parameters */
  19307. assert_param(IS_RCC_HSI(RCC_OscInitStruct->HSIState));
  19308. assert_param(IS_RCC_HSICALIBRATION_VALUE(RCC_OscInitStruct->HSICalibrationValue));
  19309. /* When the HSI is used as system clock it will not be disabled */
  19310. const uint32_t temp_sysclksrc = __HAL_RCC_GET_SYSCLK_SOURCE();
  19311. 80085e4: 4b51 ldr r3, [pc, #324] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19312. 80085e6: 691b ldr r3, [r3, #16]
  19313. 80085e8: f003 0338 and.w r3, r3, #56 @ 0x38
  19314. 80085ec: 623b str r3, [r7, #32]
  19315. const uint32_t temp_pllckselr = RCC->PLLCKSELR;
  19316. 80085ee: 4b4f ldr r3, [pc, #316] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19317. 80085f0: 6a9b ldr r3, [r3, #40] @ 0x28
  19318. 80085f2: 61fb str r3, [r7, #28]
  19319. if ((temp_sysclksrc == RCC_CFGR_SWS_HSI) || ((temp_sysclksrc == RCC_CFGR_SWS_PLL1) && ((temp_pllckselr & RCC_PLLCKSELR_PLLSRC) == RCC_PLLCKSELR_PLLSRC_HSI)))
  19320. 80085f4: 6a3b ldr r3, [r7, #32]
  19321. 80085f6: 2b00 cmp r3, #0
  19322. 80085f8: d007 beq.n 800860a <HAL_RCC_OscConfig+0x166>
  19323. 80085fa: 6a3b ldr r3, [r7, #32]
  19324. 80085fc: 2b18 cmp r3, #24
  19325. 80085fe: d156 bne.n 80086ae <HAL_RCC_OscConfig+0x20a>
  19326. 8008600: 69fb ldr r3, [r7, #28]
  19327. 8008602: f003 0303 and.w r3, r3, #3
  19328. 8008606: 2b00 cmp r3, #0
  19329. 8008608: d151 bne.n 80086ae <HAL_RCC_OscConfig+0x20a>
  19330. {
  19331. /* When HSI is used as system clock it will not be disabled */
  19332. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != 0U) && (RCC_OscInitStruct->HSIState == RCC_HSI_OFF))
  19333. 800860a: 4b48 ldr r3, [pc, #288] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19334. 800860c: 681b ldr r3, [r3, #0]
  19335. 800860e: f003 0304 and.w r3, r3, #4
  19336. 8008612: 2b00 cmp r3, #0
  19337. 8008614: d005 beq.n 8008622 <HAL_RCC_OscConfig+0x17e>
  19338. 8008616: 687b ldr r3, [r7, #4]
  19339. 8008618: 68db ldr r3, [r3, #12]
  19340. 800861a: 2b00 cmp r3, #0
  19341. 800861c: d101 bne.n 8008622 <HAL_RCC_OscConfig+0x17e>
  19342. {
  19343. return HAL_ERROR;
  19344. 800861e: 2301 movs r3, #1
  19345. 8008620: e392 b.n 8008d48 <HAL_RCC_OscConfig+0x8a4>
  19346. }
  19347. /* Otherwise, only HSI division and calibration are allowed */
  19348. else
  19349. {
  19350. /* Enable the Internal High Speed oscillator (HSI, HSIDIV2, HSIDIV4, or HSIDIV8) */
  19351. __HAL_RCC_HSI_CONFIG(RCC_OscInitStruct->HSIState);
  19352. 8008622: 4b42 ldr r3, [pc, #264] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19353. 8008624: 681b ldr r3, [r3, #0]
  19354. 8008626: f023 0219 bic.w r2, r3, #25
  19355. 800862a: 687b ldr r3, [r7, #4]
  19356. 800862c: 68db ldr r3, [r3, #12]
  19357. 800862e: 493f ldr r1, [pc, #252] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19358. 8008630: 4313 orrs r3, r2
  19359. 8008632: 600b str r3, [r1, #0]
  19360. /* Get Start Tick*/
  19361. tickstart = HAL_GetTick();
  19362. 8008634: f7fa ff46 bl 80034c4 <HAL_GetTick>
  19363. 8008638: 6278 str r0, [r7, #36] @ 0x24
  19364. /* Wait till HSI is ready */
  19365. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == 0U)
  19366. 800863a: e008 b.n 800864e <HAL_RCC_OscConfig+0x1aa>
  19367. {
  19368. if ((uint32_t)(HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE)
  19369. 800863c: f7fa ff42 bl 80034c4 <HAL_GetTick>
  19370. 8008640: 4602 mov r2, r0
  19371. 8008642: 6a7b ldr r3, [r7, #36] @ 0x24
  19372. 8008644: 1ad3 subs r3, r2, r3
  19373. 8008646: 2b02 cmp r3, #2
  19374. 8008648: d901 bls.n 800864e <HAL_RCC_OscConfig+0x1aa>
  19375. {
  19376. return HAL_TIMEOUT;
  19377. 800864a: 2303 movs r3, #3
  19378. 800864c: e37c b.n 8008d48 <HAL_RCC_OscConfig+0x8a4>
  19379. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == 0U)
  19380. 800864e: 4b37 ldr r3, [pc, #220] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19381. 8008650: 681b ldr r3, [r3, #0]
  19382. 8008652: f003 0304 and.w r3, r3, #4
  19383. 8008656: 2b00 cmp r3, #0
  19384. 8008658: d0f0 beq.n 800863c <HAL_RCC_OscConfig+0x198>
  19385. }
  19386. }
  19387. /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/
  19388. __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue);
  19389. 800865a: f7fa ff3f bl 80034dc <HAL_GetREVID>
  19390. 800865e: 4603 mov r3, r0
  19391. 8008660: f241 0203 movw r2, #4099 @ 0x1003
  19392. 8008664: 4293 cmp r3, r2
  19393. 8008666: d817 bhi.n 8008698 <HAL_RCC_OscConfig+0x1f4>
  19394. 8008668: 687b ldr r3, [r7, #4]
  19395. 800866a: 691b ldr r3, [r3, #16]
  19396. 800866c: 2b40 cmp r3, #64 @ 0x40
  19397. 800866e: d108 bne.n 8008682 <HAL_RCC_OscConfig+0x1de>
  19398. 8008670: 4b2e ldr r3, [pc, #184] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19399. 8008672: 685b ldr r3, [r3, #4]
  19400. 8008674: f423 337c bic.w r3, r3, #258048 @ 0x3f000
  19401. 8008678: 4a2c ldr r2, [pc, #176] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19402. 800867a: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  19403. 800867e: 6053 str r3, [r2, #4]
  19404. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != 0U) && (RCC_OscInitStruct->HSIState == RCC_HSI_OFF))
  19405. 8008680: e07a b.n 8008778 <HAL_RCC_OscConfig+0x2d4>
  19406. __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue);
  19407. 8008682: 4b2a ldr r3, [pc, #168] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19408. 8008684: 685b ldr r3, [r3, #4]
  19409. 8008686: f423 327c bic.w r2, r3, #258048 @ 0x3f000
  19410. 800868a: 687b ldr r3, [r7, #4]
  19411. 800868c: 691b ldr r3, [r3, #16]
  19412. 800868e: 031b lsls r3, r3, #12
  19413. 8008690: 4926 ldr r1, [pc, #152] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19414. 8008692: 4313 orrs r3, r2
  19415. 8008694: 604b str r3, [r1, #4]
  19416. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != 0U) && (RCC_OscInitStruct->HSIState == RCC_HSI_OFF))
  19417. 8008696: e06f b.n 8008778 <HAL_RCC_OscConfig+0x2d4>
  19418. __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue);
  19419. 8008698: 4b24 ldr r3, [pc, #144] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19420. 800869a: 685b ldr r3, [r3, #4]
  19421. 800869c: f023 42fe bic.w r2, r3, #2130706432 @ 0x7f000000
  19422. 80086a0: 687b ldr r3, [r7, #4]
  19423. 80086a2: 691b ldr r3, [r3, #16]
  19424. 80086a4: 061b lsls r3, r3, #24
  19425. 80086a6: 4921 ldr r1, [pc, #132] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19426. 80086a8: 4313 orrs r3, r2
  19427. 80086aa: 604b str r3, [r1, #4]
  19428. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != 0U) && (RCC_OscInitStruct->HSIState == RCC_HSI_OFF))
  19429. 80086ac: e064 b.n 8008778 <HAL_RCC_OscConfig+0x2d4>
  19430. }
  19431. else
  19432. {
  19433. /* Check the HSI State */
  19434. if ((RCC_OscInitStruct->HSIState) != RCC_HSI_OFF)
  19435. 80086ae: 687b ldr r3, [r7, #4]
  19436. 80086b0: 68db ldr r3, [r3, #12]
  19437. 80086b2: 2b00 cmp r3, #0
  19438. 80086b4: d047 beq.n 8008746 <HAL_RCC_OscConfig+0x2a2>
  19439. {
  19440. /* Enable the Internal High Speed oscillator (HSI, HSIDIV2,HSIDIV4, or HSIDIV8) */
  19441. __HAL_RCC_HSI_CONFIG(RCC_OscInitStruct->HSIState);
  19442. 80086b6: 4b1d ldr r3, [pc, #116] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19443. 80086b8: 681b ldr r3, [r3, #0]
  19444. 80086ba: f023 0219 bic.w r2, r3, #25
  19445. 80086be: 687b ldr r3, [r7, #4]
  19446. 80086c0: 68db ldr r3, [r3, #12]
  19447. 80086c2: 491a ldr r1, [pc, #104] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19448. 80086c4: 4313 orrs r3, r2
  19449. 80086c6: 600b str r3, [r1, #0]
  19450. /* Get Start Tick*/
  19451. tickstart = HAL_GetTick();
  19452. 80086c8: f7fa fefc bl 80034c4 <HAL_GetTick>
  19453. 80086cc: 6278 str r0, [r7, #36] @ 0x24
  19454. /* Wait till HSI is ready */
  19455. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == 0U)
  19456. 80086ce: e008 b.n 80086e2 <HAL_RCC_OscConfig+0x23e>
  19457. {
  19458. if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE)
  19459. 80086d0: f7fa fef8 bl 80034c4 <HAL_GetTick>
  19460. 80086d4: 4602 mov r2, r0
  19461. 80086d6: 6a7b ldr r3, [r7, #36] @ 0x24
  19462. 80086d8: 1ad3 subs r3, r2, r3
  19463. 80086da: 2b02 cmp r3, #2
  19464. 80086dc: d901 bls.n 80086e2 <HAL_RCC_OscConfig+0x23e>
  19465. {
  19466. return HAL_TIMEOUT;
  19467. 80086de: 2303 movs r3, #3
  19468. 80086e0: e332 b.n 8008d48 <HAL_RCC_OscConfig+0x8a4>
  19469. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == 0U)
  19470. 80086e2: 4b12 ldr r3, [pc, #72] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19471. 80086e4: 681b ldr r3, [r3, #0]
  19472. 80086e6: f003 0304 and.w r3, r3, #4
  19473. 80086ea: 2b00 cmp r3, #0
  19474. 80086ec: d0f0 beq.n 80086d0 <HAL_RCC_OscConfig+0x22c>
  19475. }
  19476. }
  19477. /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/
  19478. __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue);
  19479. 80086ee: f7fa fef5 bl 80034dc <HAL_GetREVID>
  19480. 80086f2: 4603 mov r3, r0
  19481. 80086f4: f241 0203 movw r2, #4099 @ 0x1003
  19482. 80086f8: 4293 cmp r3, r2
  19483. 80086fa: d819 bhi.n 8008730 <HAL_RCC_OscConfig+0x28c>
  19484. 80086fc: 687b ldr r3, [r7, #4]
  19485. 80086fe: 691b ldr r3, [r3, #16]
  19486. 8008700: 2b40 cmp r3, #64 @ 0x40
  19487. 8008702: d108 bne.n 8008716 <HAL_RCC_OscConfig+0x272>
  19488. 8008704: 4b09 ldr r3, [pc, #36] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19489. 8008706: 685b ldr r3, [r3, #4]
  19490. 8008708: f423 337c bic.w r3, r3, #258048 @ 0x3f000
  19491. 800870c: 4a07 ldr r2, [pc, #28] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19492. 800870e: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  19493. 8008712: 6053 str r3, [r2, #4]
  19494. 8008714: e030 b.n 8008778 <HAL_RCC_OscConfig+0x2d4>
  19495. 8008716: 4b05 ldr r3, [pc, #20] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19496. 8008718: 685b ldr r3, [r3, #4]
  19497. 800871a: f423 327c bic.w r2, r3, #258048 @ 0x3f000
  19498. 800871e: 687b ldr r3, [r7, #4]
  19499. 8008720: 691b ldr r3, [r3, #16]
  19500. 8008722: 031b lsls r3, r3, #12
  19501. 8008724: 4901 ldr r1, [pc, #4] @ (800872c <HAL_RCC_OscConfig+0x288>)
  19502. 8008726: 4313 orrs r3, r2
  19503. 8008728: 604b str r3, [r1, #4]
  19504. 800872a: e025 b.n 8008778 <HAL_RCC_OscConfig+0x2d4>
  19505. 800872c: 58024400 .word 0x58024400
  19506. 8008730: 4b9a ldr r3, [pc, #616] @ (800899c <HAL_RCC_OscConfig+0x4f8>)
  19507. 8008732: 685b ldr r3, [r3, #4]
  19508. 8008734: f023 42fe bic.w r2, r3, #2130706432 @ 0x7f000000
  19509. 8008738: 687b ldr r3, [r7, #4]
  19510. 800873a: 691b ldr r3, [r3, #16]
  19511. 800873c: 061b lsls r3, r3, #24
  19512. 800873e: 4997 ldr r1, [pc, #604] @ (800899c <HAL_RCC_OscConfig+0x4f8>)
  19513. 8008740: 4313 orrs r3, r2
  19514. 8008742: 604b str r3, [r1, #4]
  19515. 8008744: e018 b.n 8008778 <HAL_RCC_OscConfig+0x2d4>
  19516. }
  19517. else
  19518. {
  19519. /* Disable the Internal High Speed oscillator (HSI). */
  19520. __HAL_RCC_HSI_DISABLE();
  19521. 8008746: 4b95 ldr r3, [pc, #596] @ (800899c <HAL_RCC_OscConfig+0x4f8>)
  19522. 8008748: 681b ldr r3, [r3, #0]
  19523. 800874a: 4a94 ldr r2, [pc, #592] @ (800899c <HAL_RCC_OscConfig+0x4f8>)
  19524. 800874c: f023 0301 bic.w r3, r3, #1
  19525. 8008750: 6013 str r3, [r2, #0]
  19526. /* Get Start Tick*/
  19527. tickstart = HAL_GetTick();
  19528. 8008752: f7fa feb7 bl 80034c4 <HAL_GetTick>
  19529. 8008756: 6278 str r0, [r7, #36] @ 0x24
  19530. /* Wait till HSI is disabled */
  19531. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != 0U)
  19532. 8008758: e008 b.n 800876c <HAL_RCC_OscConfig+0x2c8>
  19533. {
  19534. if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE)
  19535. 800875a: f7fa feb3 bl 80034c4 <HAL_GetTick>
  19536. 800875e: 4602 mov r2, r0
  19537. 8008760: 6a7b ldr r3, [r7, #36] @ 0x24
  19538. 8008762: 1ad3 subs r3, r2, r3
  19539. 8008764: 2b02 cmp r3, #2
  19540. 8008766: d901 bls.n 800876c <HAL_RCC_OscConfig+0x2c8>
  19541. {
  19542. return HAL_TIMEOUT;
  19543. 8008768: 2303 movs r3, #3
  19544. 800876a: e2ed b.n 8008d48 <HAL_RCC_OscConfig+0x8a4>
  19545. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != 0U)
  19546. 800876c: 4b8b ldr r3, [pc, #556] @ (800899c <HAL_RCC_OscConfig+0x4f8>)
  19547. 800876e: 681b ldr r3, [r3, #0]
  19548. 8008770: f003 0304 and.w r3, r3, #4
  19549. 8008774: 2b00 cmp r3, #0
  19550. 8008776: d1f0 bne.n 800875a <HAL_RCC_OscConfig+0x2b6>
  19551. }
  19552. }
  19553. }
  19554. }
  19555. /*----------------------------- CSI Configuration --------------------------*/
  19556. if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_CSI) == RCC_OSCILLATORTYPE_CSI)
  19557. 8008778: 687b ldr r3, [r7, #4]
  19558. 800877a: 681b ldr r3, [r3, #0]
  19559. 800877c: f003 0310 and.w r3, r3, #16
  19560. 8008780: 2b00 cmp r3, #0
  19561. 8008782: f000 80a9 beq.w 80088d8 <HAL_RCC_OscConfig+0x434>
  19562. /* Check the parameters */
  19563. assert_param(IS_RCC_CSI(RCC_OscInitStruct->CSIState));
  19564. assert_param(IS_RCC_CSICALIBRATION_VALUE(RCC_OscInitStruct->CSICalibrationValue));
  19565. /* When the CSI is used as system clock it will not disabled */
  19566. const uint32_t temp_sysclksrc = __HAL_RCC_GET_SYSCLK_SOURCE();
  19567. 8008786: 4b85 ldr r3, [pc, #532] @ (800899c <HAL_RCC_OscConfig+0x4f8>)
  19568. 8008788: 691b ldr r3, [r3, #16]
  19569. 800878a: f003 0338 and.w r3, r3, #56 @ 0x38
  19570. 800878e: 61bb str r3, [r7, #24]
  19571. const uint32_t temp_pllckselr = RCC->PLLCKSELR;
  19572. 8008790: 4b82 ldr r3, [pc, #520] @ (800899c <HAL_RCC_OscConfig+0x4f8>)
  19573. 8008792: 6a9b ldr r3, [r3, #40] @ 0x28
  19574. 8008794: 617b str r3, [r7, #20]
  19575. if ((temp_sysclksrc == RCC_CFGR_SWS_CSI) || ((temp_sysclksrc == RCC_CFGR_SWS_PLL1) && ((temp_pllckselr & RCC_PLLCKSELR_PLLSRC) == RCC_PLLCKSELR_PLLSRC_CSI)))
  19576. 8008796: 69bb ldr r3, [r7, #24]
  19577. 8008798: 2b08 cmp r3, #8
  19578. 800879a: d007 beq.n 80087ac <HAL_RCC_OscConfig+0x308>
  19579. 800879c: 69bb ldr r3, [r7, #24]
  19580. 800879e: 2b18 cmp r3, #24
  19581. 80087a0: d13a bne.n 8008818 <HAL_RCC_OscConfig+0x374>
  19582. 80087a2: 697b ldr r3, [r7, #20]
  19583. 80087a4: f003 0303 and.w r3, r3, #3
  19584. 80087a8: 2b01 cmp r3, #1
  19585. 80087aa: d135 bne.n 8008818 <HAL_RCC_OscConfig+0x374>
  19586. {
  19587. /* When CSI is used as system clock it will not disabled */
  19588. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) != 0U) && (RCC_OscInitStruct->CSIState != RCC_CSI_ON))
  19589. 80087ac: 4b7b ldr r3, [pc, #492] @ (800899c <HAL_RCC_OscConfig+0x4f8>)
  19590. 80087ae: 681b ldr r3, [r3, #0]
  19591. 80087b0: f403 7380 and.w r3, r3, #256 @ 0x100
  19592. 80087b4: 2b00 cmp r3, #0
  19593. 80087b6: d005 beq.n 80087c4 <HAL_RCC_OscConfig+0x320>
  19594. 80087b8: 687b ldr r3, [r7, #4]
  19595. 80087ba: 69db ldr r3, [r3, #28]
  19596. 80087bc: 2b80 cmp r3, #128 @ 0x80
  19597. 80087be: d001 beq.n 80087c4 <HAL_RCC_OscConfig+0x320>
  19598. {
  19599. return HAL_ERROR;
  19600. 80087c0: 2301 movs r3, #1
  19601. 80087c2: e2c1 b.n 8008d48 <HAL_RCC_OscConfig+0x8a4>
  19602. }
  19603. /* Otherwise, just the calibration is allowed */
  19604. else
  19605. {
  19606. /* Adjusts the Internal High Speed oscillator (CSI) calibration value.*/
  19607. __HAL_RCC_CSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->CSICalibrationValue);
  19608. 80087c4: f7fa fe8a bl 80034dc <HAL_GetREVID>
  19609. 80087c8: 4603 mov r3, r0
  19610. 80087ca: f241 0203 movw r2, #4099 @ 0x1003
  19611. 80087ce: 4293 cmp r3, r2
  19612. 80087d0: d817 bhi.n 8008802 <HAL_RCC_OscConfig+0x35e>
  19613. 80087d2: 687b ldr r3, [r7, #4]
  19614. 80087d4: 6a1b ldr r3, [r3, #32]
  19615. 80087d6: 2b20 cmp r3, #32
  19616. 80087d8: d108 bne.n 80087ec <HAL_RCC_OscConfig+0x348>
  19617. 80087da: 4b70 ldr r3, [pc, #448] @ (800899c <HAL_RCC_OscConfig+0x4f8>)
  19618. 80087dc: 685b ldr r3, [r3, #4]
  19619. 80087de: f023 43f8 bic.w r3, r3, #2080374784 @ 0x7c000000
  19620. 80087e2: 4a6e ldr r2, [pc, #440] @ (800899c <HAL_RCC_OscConfig+0x4f8>)
  19621. 80087e4: f043 4380 orr.w r3, r3, #1073741824 @ 0x40000000
  19622. 80087e8: 6053 str r3, [r2, #4]
  19623. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) != 0U) && (RCC_OscInitStruct->CSIState != RCC_CSI_ON))
  19624. 80087ea: e075 b.n 80088d8 <HAL_RCC_OscConfig+0x434>
  19625. __HAL_RCC_CSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->CSICalibrationValue);
  19626. 80087ec: 4b6b ldr r3, [pc, #428] @ (800899c <HAL_RCC_OscConfig+0x4f8>)
  19627. 80087ee: 685b ldr r3, [r3, #4]
  19628. 80087f0: f023 42f8 bic.w r2, r3, #2080374784 @ 0x7c000000
  19629. 80087f4: 687b ldr r3, [r7, #4]
  19630. 80087f6: 6a1b ldr r3, [r3, #32]
  19631. 80087f8: 069b lsls r3, r3, #26
  19632. 80087fa: 4968 ldr r1, [pc, #416] @ (800899c <HAL_RCC_OscConfig+0x4f8>)
  19633. 80087fc: 4313 orrs r3, r2
  19634. 80087fe: 604b str r3, [r1, #4]
  19635. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) != 0U) && (RCC_OscInitStruct->CSIState != RCC_CSI_ON))
  19636. 8008800: e06a b.n 80088d8 <HAL_RCC_OscConfig+0x434>
  19637. __HAL_RCC_CSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->CSICalibrationValue);
  19638. 8008802: 4b66 ldr r3, [pc, #408] @ (800899c <HAL_RCC_OscConfig+0x4f8>)
  19639. 8008804: 68db ldr r3, [r3, #12]
  19640. 8008806: f023 527c bic.w r2, r3, #1056964608 @ 0x3f000000
  19641. 800880a: 687b ldr r3, [r7, #4]
  19642. 800880c: 6a1b ldr r3, [r3, #32]
  19643. 800880e: 061b lsls r3, r3, #24
  19644. 8008810: 4962 ldr r1, [pc, #392] @ (800899c <HAL_RCC_OscConfig+0x4f8>)
  19645. 8008812: 4313 orrs r3, r2
  19646. 8008814: 60cb str r3, [r1, #12]
  19647. if ((__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) != 0U) && (RCC_OscInitStruct->CSIState != RCC_CSI_ON))
  19648. 8008816: e05f b.n 80088d8 <HAL_RCC_OscConfig+0x434>
  19649. }
  19650. }
  19651. else
  19652. {
  19653. /* Check the CSI State */
  19654. if ((RCC_OscInitStruct->CSIState) != RCC_CSI_OFF)
  19655. 8008818: 687b ldr r3, [r7, #4]
  19656. 800881a: 69db ldr r3, [r3, #28]
  19657. 800881c: 2b00 cmp r3, #0
  19658. 800881e: d042 beq.n 80088a6 <HAL_RCC_OscConfig+0x402>
  19659. {
  19660. /* Enable the Internal High Speed oscillator (CSI). */
  19661. __HAL_RCC_CSI_ENABLE();
  19662. 8008820: 4b5e ldr r3, [pc, #376] @ (800899c <HAL_RCC_OscConfig+0x4f8>)
  19663. 8008822: 681b ldr r3, [r3, #0]
  19664. 8008824: 4a5d ldr r2, [pc, #372] @ (800899c <HAL_RCC_OscConfig+0x4f8>)
  19665. 8008826: f043 0380 orr.w r3, r3, #128 @ 0x80
  19666. 800882a: 6013 str r3, [r2, #0]
  19667. /* Get Start Tick*/
  19668. tickstart = HAL_GetTick();
  19669. 800882c: f7fa fe4a bl 80034c4 <HAL_GetTick>
  19670. 8008830: 6278 str r0, [r7, #36] @ 0x24
  19671. /* Wait till CSI is ready */
  19672. while (__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) == 0U)
  19673. 8008832: e008 b.n 8008846 <HAL_RCC_OscConfig+0x3a2>
  19674. {
  19675. if ((HAL_GetTick() - tickstart) > CSI_TIMEOUT_VALUE)
  19676. 8008834: f7fa fe46 bl 80034c4 <HAL_GetTick>
  19677. 8008838: 4602 mov r2, r0
  19678. 800883a: 6a7b ldr r3, [r7, #36] @ 0x24
  19679. 800883c: 1ad3 subs r3, r2, r3
  19680. 800883e: 2b02 cmp r3, #2
  19681. 8008840: d901 bls.n 8008846 <HAL_RCC_OscConfig+0x3a2>
  19682. {
  19683. return HAL_TIMEOUT;
  19684. 8008842: 2303 movs r3, #3
  19685. 8008844: e280 b.n 8008d48 <HAL_RCC_OscConfig+0x8a4>
  19686. while (__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) == 0U)
  19687. 8008846: 4b55 ldr r3, [pc, #340] @ (800899c <HAL_RCC_OscConfig+0x4f8>)
  19688. 8008848: 681b ldr r3, [r3, #0]
  19689. 800884a: f403 7380 and.w r3, r3, #256 @ 0x100
  19690. 800884e: 2b00 cmp r3, #0
  19691. 8008850: d0f0 beq.n 8008834 <HAL_RCC_OscConfig+0x390>
  19692. }
  19693. }
  19694. /* Adjusts the Internal High Speed oscillator (CSI) calibration value.*/
  19695. __HAL_RCC_CSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->CSICalibrationValue);
  19696. 8008852: f7fa fe43 bl 80034dc <HAL_GetREVID>
  19697. 8008856: 4603 mov r3, r0
  19698. 8008858: f241 0203 movw r2, #4099 @ 0x1003
  19699. 800885c: 4293 cmp r3, r2
  19700. 800885e: d817 bhi.n 8008890 <HAL_RCC_OscConfig+0x3ec>
  19701. 8008860: 687b ldr r3, [r7, #4]
  19702. 8008862: 6a1b ldr r3, [r3, #32]
  19703. 8008864: 2b20 cmp r3, #32
  19704. 8008866: d108 bne.n 800887a <HAL_RCC_OscConfig+0x3d6>
  19705. 8008868: 4b4c ldr r3, [pc, #304] @ (800899c <HAL_RCC_OscConfig+0x4f8>)
  19706. 800886a: 685b ldr r3, [r3, #4]
  19707. 800886c: f023 43f8 bic.w r3, r3, #2080374784 @ 0x7c000000
  19708. 8008870: 4a4a ldr r2, [pc, #296] @ (800899c <HAL_RCC_OscConfig+0x4f8>)
  19709. 8008872: f043 4380 orr.w r3, r3, #1073741824 @ 0x40000000
  19710. 8008876: 6053 str r3, [r2, #4]
  19711. 8008878: e02e b.n 80088d8 <HAL_RCC_OscConfig+0x434>
  19712. 800887a: 4b48 ldr r3, [pc, #288] @ (800899c <HAL_RCC_OscConfig+0x4f8>)
  19713. 800887c: 685b ldr r3, [r3, #4]
  19714. 800887e: f023 42f8 bic.w r2, r3, #2080374784 @ 0x7c000000
  19715. 8008882: 687b ldr r3, [r7, #4]
  19716. 8008884: 6a1b ldr r3, [r3, #32]
  19717. 8008886: 069b lsls r3, r3, #26
  19718. 8008888: 4944 ldr r1, [pc, #272] @ (800899c <HAL_RCC_OscConfig+0x4f8>)
  19719. 800888a: 4313 orrs r3, r2
  19720. 800888c: 604b str r3, [r1, #4]
  19721. 800888e: e023 b.n 80088d8 <HAL_RCC_OscConfig+0x434>
  19722. 8008890: 4b42 ldr r3, [pc, #264] @ (800899c <HAL_RCC_OscConfig+0x4f8>)
  19723. 8008892: 68db ldr r3, [r3, #12]
  19724. 8008894: f023 527c bic.w r2, r3, #1056964608 @ 0x3f000000
  19725. 8008898: 687b ldr r3, [r7, #4]
  19726. 800889a: 6a1b ldr r3, [r3, #32]
  19727. 800889c: 061b lsls r3, r3, #24
  19728. 800889e: 493f ldr r1, [pc, #252] @ (800899c <HAL_RCC_OscConfig+0x4f8>)
  19729. 80088a0: 4313 orrs r3, r2
  19730. 80088a2: 60cb str r3, [r1, #12]
  19731. 80088a4: e018 b.n 80088d8 <HAL_RCC_OscConfig+0x434>
  19732. }
  19733. else
  19734. {
  19735. /* Disable the Internal High Speed oscillator (CSI). */
  19736. __HAL_RCC_CSI_DISABLE();
  19737. 80088a6: 4b3d ldr r3, [pc, #244] @ (800899c <HAL_RCC_OscConfig+0x4f8>)
  19738. 80088a8: 681b ldr r3, [r3, #0]
  19739. 80088aa: 4a3c ldr r2, [pc, #240] @ (800899c <HAL_RCC_OscConfig+0x4f8>)
  19740. 80088ac: f023 0380 bic.w r3, r3, #128 @ 0x80
  19741. 80088b0: 6013 str r3, [r2, #0]
  19742. /* Get Start Tick*/
  19743. tickstart = HAL_GetTick();
  19744. 80088b2: f7fa fe07 bl 80034c4 <HAL_GetTick>
  19745. 80088b6: 6278 str r0, [r7, #36] @ 0x24
  19746. /* Wait till CSI is disabled */
  19747. while (__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) != 0U)
  19748. 80088b8: e008 b.n 80088cc <HAL_RCC_OscConfig+0x428>
  19749. {
  19750. if ((HAL_GetTick() - tickstart) > CSI_TIMEOUT_VALUE)
  19751. 80088ba: f7fa fe03 bl 80034c4 <HAL_GetTick>
  19752. 80088be: 4602 mov r2, r0
  19753. 80088c0: 6a7b ldr r3, [r7, #36] @ 0x24
  19754. 80088c2: 1ad3 subs r3, r2, r3
  19755. 80088c4: 2b02 cmp r3, #2
  19756. 80088c6: d901 bls.n 80088cc <HAL_RCC_OscConfig+0x428>
  19757. {
  19758. return HAL_TIMEOUT;
  19759. 80088c8: 2303 movs r3, #3
  19760. 80088ca: e23d b.n 8008d48 <HAL_RCC_OscConfig+0x8a4>
  19761. while (__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) != 0U)
  19762. 80088cc: 4b33 ldr r3, [pc, #204] @ (800899c <HAL_RCC_OscConfig+0x4f8>)
  19763. 80088ce: 681b ldr r3, [r3, #0]
  19764. 80088d0: f403 7380 and.w r3, r3, #256 @ 0x100
  19765. 80088d4: 2b00 cmp r3, #0
  19766. 80088d6: d1f0 bne.n 80088ba <HAL_RCC_OscConfig+0x416>
  19767. }
  19768. }
  19769. }
  19770. }
  19771. /*------------------------------ LSI Configuration -------------------------*/
  19772. if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI)
  19773. 80088d8: 687b ldr r3, [r7, #4]
  19774. 80088da: 681b ldr r3, [r3, #0]
  19775. 80088dc: f003 0308 and.w r3, r3, #8
  19776. 80088e0: 2b00 cmp r3, #0
  19777. 80088e2: d036 beq.n 8008952 <HAL_RCC_OscConfig+0x4ae>
  19778. {
  19779. /* Check the parameters */
  19780. assert_param(IS_RCC_LSI(RCC_OscInitStruct->LSIState));
  19781. /* Check the LSI State */
  19782. if ((RCC_OscInitStruct->LSIState) != RCC_LSI_OFF)
  19783. 80088e4: 687b ldr r3, [r7, #4]
  19784. 80088e6: 695b ldr r3, [r3, #20]
  19785. 80088e8: 2b00 cmp r3, #0
  19786. 80088ea: d019 beq.n 8008920 <HAL_RCC_OscConfig+0x47c>
  19787. {
  19788. /* Enable the Internal Low Speed oscillator (LSI). */
  19789. __HAL_RCC_LSI_ENABLE();
  19790. 80088ec: 4b2b ldr r3, [pc, #172] @ (800899c <HAL_RCC_OscConfig+0x4f8>)
  19791. 80088ee: 6f5b ldr r3, [r3, #116] @ 0x74
  19792. 80088f0: 4a2a ldr r2, [pc, #168] @ (800899c <HAL_RCC_OscConfig+0x4f8>)
  19793. 80088f2: f043 0301 orr.w r3, r3, #1
  19794. 80088f6: 6753 str r3, [r2, #116] @ 0x74
  19795. /* Get Start Tick*/
  19796. tickstart = HAL_GetTick();
  19797. 80088f8: f7fa fde4 bl 80034c4 <HAL_GetTick>
  19798. 80088fc: 6278 str r0, [r7, #36] @ 0x24
  19799. /* Wait till LSI is ready */
  19800. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == 0U)
  19801. 80088fe: e008 b.n 8008912 <HAL_RCC_OscConfig+0x46e>
  19802. {
  19803. if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE)
  19804. 8008900: f7fa fde0 bl 80034c4 <HAL_GetTick>
  19805. 8008904: 4602 mov r2, r0
  19806. 8008906: 6a7b ldr r3, [r7, #36] @ 0x24
  19807. 8008908: 1ad3 subs r3, r2, r3
  19808. 800890a: 2b02 cmp r3, #2
  19809. 800890c: d901 bls.n 8008912 <HAL_RCC_OscConfig+0x46e>
  19810. {
  19811. return HAL_TIMEOUT;
  19812. 800890e: 2303 movs r3, #3
  19813. 8008910: e21a b.n 8008d48 <HAL_RCC_OscConfig+0x8a4>
  19814. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == 0U)
  19815. 8008912: 4b22 ldr r3, [pc, #136] @ (800899c <HAL_RCC_OscConfig+0x4f8>)
  19816. 8008914: 6f5b ldr r3, [r3, #116] @ 0x74
  19817. 8008916: f003 0302 and.w r3, r3, #2
  19818. 800891a: 2b00 cmp r3, #0
  19819. 800891c: d0f0 beq.n 8008900 <HAL_RCC_OscConfig+0x45c>
  19820. 800891e: e018 b.n 8008952 <HAL_RCC_OscConfig+0x4ae>
  19821. }
  19822. }
  19823. else
  19824. {
  19825. /* Disable the Internal Low Speed oscillator (LSI). */
  19826. __HAL_RCC_LSI_DISABLE();
  19827. 8008920: 4b1e ldr r3, [pc, #120] @ (800899c <HAL_RCC_OscConfig+0x4f8>)
  19828. 8008922: 6f5b ldr r3, [r3, #116] @ 0x74
  19829. 8008924: 4a1d ldr r2, [pc, #116] @ (800899c <HAL_RCC_OscConfig+0x4f8>)
  19830. 8008926: f023 0301 bic.w r3, r3, #1
  19831. 800892a: 6753 str r3, [r2, #116] @ 0x74
  19832. /* Get Start Tick*/
  19833. tickstart = HAL_GetTick();
  19834. 800892c: f7fa fdca bl 80034c4 <HAL_GetTick>
  19835. 8008930: 6278 str r0, [r7, #36] @ 0x24
  19836. /* Wait till LSI is ready */
  19837. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != 0U)
  19838. 8008932: e008 b.n 8008946 <HAL_RCC_OscConfig+0x4a2>
  19839. {
  19840. if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE)
  19841. 8008934: f7fa fdc6 bl 80034c4 <HAL_GetTick>
  19842. 8008938: 4602 mov r2, r0
  19843. 800893a: 6a7b ldr r3, [r7, #36] @ 0x24
  19844. 800893c: 1ad3 subs r3, r2, r3
  19845. 800893e: 2b02 cmp r3, #2
  19846. 8008940: d901 bls.n 8008946 <HAL_RCC_OscConfig+0x4a2>
  19847. {
  19848. return HAL_TIMEOUT;
  19849. 8008942: 2303 movs r3, #3
  19850. 8008944: e200 b.n 8008d48 <HAL_RCC_OscConfig+0x8a4>
  19851. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != 0U)
  19852. 8008946: 4b15 ldr r3, [pc, #84] @ (800899c <HAL_RCC_OscConfig+0x4f8>)
  19853. 8008948: 6f5b ldr r3, [r3, #116] @ 0x74
  19854. 800894a: f003 0302 and.w r3, r3, #2
  19855. 800894e: 2b00 cmp r3, #0
  19856. 8008950: d1f0 bne.n 8008934 <HAL_RCC_OscConfig+0x490>
  19857. }
  19858. }
  19859. }
  19860. /*------------------------------ HSI48 Configuration -------------------------*/
  19861. if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI48) == RCC_OSCILLATORTYPE_HSI48)
  19862. 8008952: 687b ldr r3, [r7, #4]
  19863. 8008954: 681b ldr r3, [r3, #0]
  19864. 8008956: f003 0320 and.w r3, r3, #32
  19865. 800895a: 2b00 cmp r3, #0
  19866. 800895c: d039 beq.n 80089d2 <HAL_RCC_OscConfig+0x52e>
  19867. {
  19868. /* Check the parameters */
  19869. assert_param(IS_RCC_HSI48(RCC_OscInitStruct->HSI48State));
  19870. /* Check the HSI48 State */
  19871. if ((RCC_OscInitStruct->HSI48State) != RCC_HSI48_OFF)
  19872. 800895e: 687b ldr r3, [r7, #4]
  19873. 8008960: 699b ldr r3, [r3, #24]
  19874. 8008962: 2b00 cmp r3, #0
  19875. 8008964: d01c beq.n 80089a0 <HAL_RCC_OscConfig+0x4fc>
  19876. {
  19877. /* Enable the Internal Low Speed oscillator (HSI48). */
  19878. __HAL_RCC_HSI48_ENABLE();
  19879. 8008966: 4b0d ldr r3, [pc, #52] @ (800899c <HAL_RCC_OscConfig+0x4f8>)
  19880. 8008968: 681b ldr r3, [r3, #0]
  19881. 800896a: 4a0c ldr r2, [pc, #48] @ (800899c <HAL_RCC_OscConfig+0x4f8>)
  19882. 800896c: f443 5380 orr.w r3, r3, #4096 @ 0x1000
  19883. 8008970: 6013 str r3, [r2, #0]
  19884. /* Get time-out */
  19885. tickstart = HAL_GetTick();
  19886. 8008972: f7fa fda7 bl 80034c4 <HAL_GetTick>
  19887. 8008976: 6278 str r0, [r7, #36] @ 0x24
  19888. /* Wait till HSI48 is ready */
  19889. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSI48RDY) == 0U)
  19890. 8008978: e008 b.n 800898c <HAL_RCC_OscConfig+0x4e8>
  19891. {
  19892. if ((HAL_GetTick() - tickstart) > HSI48_TIMEOUT_VALUE)
  19893. 800897a: f7fa fda3 bl 80034c4 <HAL_GetTick>
  19894. 800897e: 4602 mov r2, r0
  19895. 8008980: 6a7b ldr r3, [r7, #36] @ 0x24
  19896. 8008982: 1ad3 subs r3, r2, r3
  19897. 8008984: 2b02 cmp r3, #2
  19898. 8008986: d901 bls.n 800898c <HAL_RCC_OscConfig+0x4e8>
  19899. {
  19900. return HAL_TIMEOUT;
  19901. 8008988: 2303 movs r3, #3
  19902. 800898a: e1dd b.n 8008d48 <HAL_RCC_OscConfig+0x8a4>
  19903. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSI48RDY) == 0U)
  19904. 800898c: 4b03 ldr r3, [pc, #12] @ (800899c <HAL_RCC_OscConfig+0x4f8>)
  19905. 800898e: 681b ldr r3, [r3, #0]
  19906. 8008990: f403 5300 and.w r3, r3, #8192 @ 0x2000
  19907. 8008994: 2b00 cmp r3, #0
  19908. 8008996: d0f0 beq.n 800897a <HAL_RCC_OscConfig+0x4d6>
  19909. 8008998: e01b b.n 80089d2 <HAL_RCC_OscConfig+0x52e>
  19910. 800899a: bf00 nop
  19911. 800899c: 58024400 .word 0x58024400
  19912. }
  19913. }
  19914. else
  19915. {
  19916. /* Disable the Internal Low Speed oscillator (HSI48). */
  19917. __HAL_RCC_HSI48_DISABLE();
  19918. 80089a0: 4b9b ldr r3, [pc, #620] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  19919. 80089a2: 681b ldr r3, [r3, #0]
  19920. 80089a4: 4a9a ldr r2, [pc, #616] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  19921. 80089a6: f423 5380 bic.w r3, r3, #4096 @ 0x1000
  19922. 80089aa: 6013 str r3, [r2, #0]
  19923. /* Get time-out */
  19924. tickstart = HAL_GetTick();
  19925. 80089ac: f7fa fd8a bl 80034c4 <HAL_GetTick>
  19926. 80089b0: 6278 str r0, [r7, #36] @ 0x24
  19927. /* Wait till HSI48 is ready */
  19928. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSI48RDY) != 0U)
  19929. 80089b2: e008 b.n 80089c6 <HAL_RCC_OscConfig+0x522>
  19930. {
  19931. if ((HAL_GetTick() - tickstart) > HSI48_TIMEOUT_VALUE)
  19932. 80089b4: f7fa fd86 bl 80034c4 <HAL_GetTick>
  19933. 80089b8: 4602 mov r2, r0
  19934. 80089ba: 6a7b ldr r3, [r7, #36] @ 0x24
  19935. 80089bc: 1ad3 subs r3, r2, r3
  19936. 80089be: 2b02 cmp r3, #2
  19937. 80089c0: d901 bls.n 80089c6 <HAL_RCC_OscConfig+0x522>
  19938. {
  19939. return HAL_TIMEOUT;
  19940. 80089c2: 2303 movs r3, #3
  19941. 80089c4: e1c0 b.n 8008d48 <HAL_RCC_OscConfig+0x8a4>
  19942. while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSI48RDY) != 0U)
  19943. 80089c6: 4b92 ldr r3, [pc, #584] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  19944. 80089c8: 681b ldr r3, [r3, #0]
  19945. 80089ca: f403 5300 and.w r3, r3, #8192 @ 0x2000
  19946. 80089ce: 2b00 cmp r3, #0
  19947. 80089d0: d1f0 bne.n 80089b4 <HAL_RCC_OscConfig+0x510>
  19948. }
  19949. }
  19950. }
  19951. }
  19952. /*------------------------------ LSE Configuration -------------------------*/
  19953. if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE)
  19954. 80089d2: 687b ldr r3, [r7, #4]
  19955. 80089d4: 681b ldr r3, [r3, #0]
  19956. 80089d6: f003 0304 and.w r3, r3, #4
  19957. 80089da: 2b00 cmp r3, #0
  19958. 80089dc: f000 8081 beq.w 8008ae2 <HAL_RCC_OscConfig+0x63e>
  19959. {
  19960. /* Check the parameters */
  19961. assert_param(IS_RCC_LSE(RCC_OscInitStruct->LSEState));
  19962. /* Enable write access to Backup domain */
  19963. PWR->CR1 |= PWR_CR1_DBP;
  19964. 80089e0: 4b8c ldr r3, [pc, #560] @ (8008c14 <HAL_RCC_OscConfig+0x770>)
  19965. 80089e2: 681b ldr r3, [r3, #0]
  19966. 80089e4: 4a8b ldr r2, [pc, #556] @ (8008c14 <HAL_RCC_OscConfig+0x770>)
  19967. 80089e6: f443 7380 orr.w r3, r3, #256 @ 0x100
  19968. 80089ea: 6013 str r3, [r2, #0]
  19969. /* Wait for Backup domain Write protection disable */
  19970. tickstart = HAL_GetTick();
  19971. 80089ec: f7fa fd6a bl 80034c4 <HAL_GetTick>
  19972. 80089f0: 6278 str r0, [r7, #36] @ 0x24
  19973. while ((PWR->CR1 & PWR_CR1_DBP) == 0U)
  19974. 80089f2: e008 b.n 8008a06 <HAL_RCC_OscConfig+0x562>
  19975. {
  19976. if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE)
  19977. 80089f4: f7fa fd66 bl 80034c4 <HAL_GetTick>
  19978. 80089f8: 4602 mov r2, r0
  19979. 80089fa: 6a7b ldr r3, [r7, #36] @ 0x24
  19980. 80089fc: 1ad3 subs r3, r2, r3
  19981. 80089fe: 2b64 cmp r3, #100 @ 0x64
  19982. 8008a00: d901 bls.n 8008a06 <HAL_RCC_OscConfig+0x562>
  19983. {
  19984. return HAL_TIMEOUT;
  19985. 8008a02: 2303 movs r3, #3
  19986. 8008a04: e1a0 b.n 8008d48 <HAL_RCC_OscConfig+0x8a4>
  19987. while ((PWR->CR1 & PWR_CR1_DBP) == 0U)
  19988. 8008a06: 4b83 ldr r3, [pc, #524] @ (8008c14 <HAL_RCC_OscConfig+0x770>)
  19989. 8008a08: 681b ldr r3, [r3, #0]
  19990. 8008a0a: f403 7380 and.w r3, r3, #256 @ 0x100
  19991. 8008a0e: 2b00 cmp r3, #0
  19992. 8008a10: d0f0 beq.n 80089f4 <HAL_RCC_OscConfig+0x550>
  19993. }
  19994. }
  19995. /* Set the new LSE configuration -----------------------------------------*/
  19996. __HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState);
  19997. 8008a12: 687b ldr r3, [r7, #4]
  19998. 8008a14: 689b ldr r3, [r3, #8]
  19999. 8008a16: 2b01 cmp r3, #1
  20000. 8008a18: d106 bne.n 8008a28 <HAL_RCC_OscConfig+0x584>
  20001. 8008a1a: 4b7d ldr r3, [pc, #500] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20002. 8008a1c: 6f1b ldr r3, [r3, #112] @ 0x70
  20003. 8008a1e: 4a7c ldr r2, [pc, #496] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20004. 8008a20: f043 0301 orr.w r3, r3, #1
  20005. 8008a24: 6713 str r3, [r2, #112] @ 0x70
  20006. 8008a26: e02d b.n 8008a84 <HAL_RCC_OscConfig+0x5e0>
  20007. 8008a28: 687b ldr r3, [r7, #4]
  20008. 8008a2a: 689b ldr r3, [r3, #8]
  20009. 8008a2c: 2b00 cmp r3, #0
  20010. 8008a2e: d10c bne.n 8008a4a <HAL_RCC_OscConfig+0x5a6>
  20011. 8008a30: 4b77 ldr r3, [pc, #476] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20012. 8008a32: 6f1b ldr r3, [r3, #112] @ 0x70
  20013. 8008a34: 4a76 ldr r2, [pc, #472] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20014. 8008a36: f023 0301 bic.w r3, r3, #1
  20015. 8008a3a: 6713 str r3, [r2, #112] @ 0x70
  20016. 8008a3c: 4b74 ldr r3, [pc, #464] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20017. 8008a3e: 6f1b ldr r3, [r3, #112] @ 0x70
  20018. 8008a40: 4a73 ldr r2, [pc, #460] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20019. 8008a42: f023 0304 bic.w r3, r3, #4
  20020. 8008a46: 6713 str r3, [r2, #112] @ 0x70
  20021. 8008a48: e01c b.n 8008a84 <HAL_RCC_OscConfig+0x5e0>
  20022. 8008a4a: 687b ldr r3, [r7, #4]
  20023. 8008a4c: 689b ldr r3, [r3, #8]
  20024. 8008a4e: 2b05 cmp r3, #5
  20025. 8008a50: d10c bne.n 8008a6c <HAL_RCC_OscConfig+0x5c8>
  20026. 8008a52: 4b6f ldr r3, [pc, #444] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20027. 8008a54: 6f1b ldr r3, [r3, #112] @ 0x70
  20028. 8008a56: 4a6e ldr r2, [pc, #440] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20029. 8008a58: f043 0304 orr.w r3, r3, #4
  20030. 8008a5c: 6713 str r3, [r2, #112] @ 0x70
  20031. 8008a5e: 4b6c ldr r3, [pc, #432] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20032. 8008a60: 6f1b ldr r3, [r3, #112] @ 0x70
  20033. 8008a62: 4a6b ldr r2, [pc, #428] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20034. 8008a64: f043 0301 orr.w r3, r3, #1
  20035. 8008a68: 6713 str r3, [r2, #112] @ 0x70
  20036. 8008a6a: e00b b.n 8008a84 <HAL_RCC_OscConfig+0x5e0>
  20037. 8008a6c: 4b68 ldr r3, [pc, #416] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20038. 8008a6e: 6f1b ldr r3, [r3, #112] @ 0x70
  20039. 8008a70: 4a67 ldr r2, [pc, #412] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20040. 8008a72: f023 0301 bic.w r3, r3, #1
  20041. 8008a76: 6713 str r3, [r2, #112] @ 0x70
  20042. 8008a78: 4b65 ldr r3, [pc, #404] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20043. 8008a7a: 6f1b ldr r3, [r3, #112] @ 0x70
  20044. 8008a7c: 4a64 ldr r2, [pc, #400] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20045. 8008a7e: f023 0304 bic.w r3, r3, #4
  20046. 8008a82: 6713 str r3, [r2, #112] @ 0x70
  20047. /* Check the LSE State */
  20048. if ((RCC_OscInitStruct->LSEState) != RCC_LSE_OFF)
  20049. 8008a84: 687b ldr r3, [r7, #4]
  20050. 8008a86: 689b ldr r3, [r3, #8]
  20051. 8008a88: 2b00 cmp r3, #0
  20052. 8008a8a: d015 beq.n 8008ab8 <HAL_RCC_OscConfig+0x614>
  20053. {
  20054. /* Get Start Tick*/
  20055. tickstart = HAL_GetTick();
  20056. 8008a8c: f7fa fd1a bl 80034c4 <HAL_GetTick>
  20057. 8008a90: 6278 str r0, [r7, #36] @ 0x24
  20058. /* Wait till LSE is ready */
  20059. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == 0U)
  20060. 8008a92: e00a b.n 8008aaa <HAL_RCC_OscConfig+0x606>
  20061. {
  20062. if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
  20063. 8008a94: f7fa fd16 bl 80034c4 <HAL_GetTick>
  20064. 8008a98: 4602 mov r2, r0
  20065. 8008a9a: 6a7b ldr r3, [r7, #36] @ 0x24
  20066. 8008a9c: 1ad3 subs r3, r2, r3
  20067. 8008a9e: f241 3288 movw r2, #5000 @ 0x1388
  20068. 8008aa2: 4293 cmp r3, r2
  20069. 8008aa4: d901 bls.n 8008aaa <HAL_RCC_OscConfig+0x606>
  20070. {
  20071. return HAL_TIMEOUT;
  20072. 8008aa6: 2303 movs r3, #3
  20073. 8008aa8: e14e b.n 8008d48 <HAL_RCC_OscConfig+0x8a4>
  20074. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == 0U)
  20075. 8008aaa: 4b59 ldr r3, [pc, #356] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20076. 8008aac: 6f1b ldr r3, [r3, #112] @ 0x70
  20077. 8008aae: f003 0302 and.w r3, r3, #2
  20078. 8008ab2: 2b00 cmp r3, #0
  20079. 8008ab4: d0ee beq.n 8008a94 <HAL_RCC_OscConfig+0x5f0>
  20080. 8008ab6: e014 b.n 8008ae2 <HAL_RCC_OscConfig+0x63e>
  20081. }
  20082. }
  20083. else
  20084. {
  20085. /* Get Start Tick*/
  20086. tickstart = HAL_GetTick();
  20087. 8008ab8: f7fa fd04 bl 80034c4 <HAL_GetTick>
  20088. 8008abc: 6278 str r0, [r7, #36] @ 0x24
  20089. /* Wait till LSE is disabled */
  20090. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != 0U)
  20091. 8008abe: e00a b.n 8008ad6 <HAL_RCC_OscConfig+0x632>
  20092. {
  20093. if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
  20094. 8008ac0: f7fa fd00 bl 80034c4 <HAL_GetTick>
  20095. 8008ac4: 4602 mov r2, r0
  20096. 8008ac6: 6a7b ldr r3, [r7, #36] @ 0x24
  20097. 8008ac8: 1ad3 subs r3, r2, r3
  20098. 8008aca: f241 3288 movw r2, #5000 @ 0x1388
  20099. 8008ace: 4293 cmp r3, r2
  20100. 8008ad0: d901 bls.n 8008ad6 <HAL_RCC_OscConfig+0x632>
  20101. {
  20102. return HAL_TIMEOUT;
  20103. 8008ad2: 2303 movs r3, #3
  20104. 8008ad4: e138 b.n 8008d48 <HAL_RCC_OscConfig+0x8a4>
  20105. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != 0U)
  20106. 8008ad6: 4b4e ldr r3, [pc, #312] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20107. 8008ad8: 6f1b ldr r3, [r3, #112] @ 0x70
  20108. 8008ada: f003 0302 and.w r3, r3, #2
  20109. 8008ade: 2b00 cmp r3, #0
  20110. 8008ae0: d1ee bne.n 8008ac0 <HAL_RCC_OscConfig+0x61c>
  20111. }
  20112. }
  20113. /*-------------------------------- PLL Configuration -----------------------*/
  20114. /* Check the parameters */
  20115. assert_param(IS_RCC_PLL(RCC_OscInitStruct->PLL.PLLState));
  20116. if ((RCC_OscInitStruct->PLL.PLLState) != RCC_PLL_NONE)
  20117. 8008ae2: 687b ldr r3, [r7, #4]
  20118. 8008ae4: 6a5b ldr r3, [r3, #36] @ 0x24
  20119. 8008ae6: 2b00 cmp r3, #0
  20120. 8008ae8: f000 812d beq.w 8008d46 <HAL_RCC_OscConfig+0x8a2>
  20121. {
  20122. /* Check if the PLL is used as system clock or not */
  20123. if (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_CFGR_SWS_PLL1)
  20124. 8008aec: 4b48 ldr r3, [pc, #288] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20125. 8008aee: 691b ldr r3, [r3, #16]
  20126. 8008af0: f003 0338 and.w r3, r3, #56 @ 0x38
  20127. 8008af4: 2b18 cmp r3, #24
  20128. 8008af6: f000 80bd beq.w 8008c74 <HAL_RCC_OscConfig+0x7d0>
  20129. {
  20130. if ((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON)
  20131. 8008afa: 687b ldr r3, [r7, #4]
  20132. 8008afc: 6a5b ldr r3, [r3, #36] @ 0x24
  20133. 8008afe: 2b02 cmp r3, #2
  20134. 8008b00: f040 809e bne.w 8008c40 <HAL_RCC_OscConfig+0x79c>
  20135. assert_param(IS_RCC_PLLQ_VALUE(RCC_OscInitStruct->PLL.PLLQ));
  20136. assert_param(IS_RCC_PLLR_VALUE(RCC_OscInitStruct->PLL.PLLR));
  20137. assert_param(IS_RCC_PLLFRACN_VALUE(RCC_OscInitStruct->PLL.PLLFRACN));
  20138. /* Disable the main PLL. */
  20139. __HAL_RCC_PLL_DISABLE();
  20140. 8008b04: 4b42 ldr r3, [pc, #264] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20141. 8008b06: 681b ldr r3, [r3, #0]
  20142. 8008b08: 4a41 ldr r2, [pc, #260] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20143. 8008b0a: f023 7380 bic.w r3, r3, #16777216 @ 0x1000000
  20144. 8008b0e: 6013 str r3, [r2, #0]
  20145. /* Get Start Tick*/
  20146. tickstart = HAL_GetTick();
  20147. 8008b10: f7fa fcd8 bl 80034c4 <HAL_GetTick>
  20148. 8008b14: 6278 str r0, [r7, #36] @ 0x24
  20149. /* Wait till PLL is disabled */
  20150. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != 0U)
  20151. 8008b16: e008 b.n 8008b2a <HAL_RCC_OscConfig+0x686>
  20152. {
  20153. if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
  20154. 8008b18: f7fa fcd4 bl 80034c4 <HAL_GetTick>
  20155. 8008b1c: 4602 mov r2, r0
  20156. 8008b1e: 6a7b ldr r3, [r7, #36] @ 0x24
  20157. 8008b20: 1ad3 subs r3, r2, r3
  20158. 8008b22: 2b02 cmp r3, #2
  20159. 8008b24: d901 bls.n 8008b2a <HAL_RCC_OscConfig+0x686>
  20160. {
  20161. return HAL_TIMEOUT;
  20162. 8008b26: 2303 movs r3, #3
  20163. 8008b28: e10e b.n 8008d48 <HAL_RCC_OscConfig+0x8a4>
  20164. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != 0U)
  20165. 8008b2a: 4b39 ldr r3, [pc, #228] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20166. 8008b2c: 681b ldr r3, [r3, #0]
  20167. 8008b2e: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  20168. 8008b32: 2b00 cmp r3, #0
  20169. 8008b34: d1f0 bne.n 8008b18 <HAL_RCC_OscConfig+0x674>
  20170. }
  20171. }
  20172. /* Configure the main PLL clock source, multiplication and division factors. */
  20173. __HAL_RCC_PLL_CONFIG(RCC_OscInitStruct->PLL.PLLSource,
  20174. 8008b36: 4b36 ldr r3, [pc, #216] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20175. 8008b38: 6a9a ldr r2, [r3, #40] @ 0x28
  20176. 8008b3a: 4b37 ldr r3, [pc, #220] @ (8008c18 <HAL_RCC_OscConfig+0x774>)
  20177. 8008b3c: 4013 ands r3, r2
  20178. 8008b3e: 687a ldr r2, [r7, #4]
  20179. 8008b40: 6a91 ldr r1, [r2, #40] @ 0x28
  20180. 8008b42: 687a ldr r2, [r7, #4]
  20181. 8008b44: 6ad2 ldr r2, [r2, #44] @ 0x2c
  20182. 8008b46: 0112 lsls r2, r2, #4
  20183. 8008b48: 430a orrs r2, r1
  20184. 8008b4a: 4931 ldr r1, [pc, #196] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20185. 8008b4c: 4313 orrs r3, r2
  20186. 8008b4e: 628b str r3, [r1, #40] @ 0x28
  20187. 8008b50: 687b ldr r3, [r7, #4]
  20188. 8008b52: 6b1b ldr r3, [r3, #48] @ 0x30
  20189. 8008b54: 3b01 subs r3, #1
  20190. 8008b56: f3c3 0208 ubfx r2, r3, #0, #9
  20191. 8008b5a: 687b ldr r3, [r7, #4]
  20192. 8008b5c: 6b5b ldr r3, [r3, #52] @ 0x34
  20193. 8008b5e: 3b01 subs r3, #1
  20194. 8008b60: 025b lsls r3, r3, #9
  20195. 8008b62: b29b uxth r3, r3
  20196. 8008b64: 431a orrs r2, r3
  20197. 8008b66: 687b ldr r3, [r7, #4]
  20198. 8008b68: 6b9b ldr r3, [r3, #56] @ 0x38
  20199. 8008b6a: 3b01 subs r3, #1
  20200. 8008b6c: 041b lsls r3, r3, #16
  20201. 8008b6e: f403 03fe and.w r3, r3, #8323072 @ 0x7f0000
  20202. 8008b72: 431a orrs r2, r3
  20203. 8008b74: 687b ldr r3, [r7, #4]
  20204. 8008b76: 6bdb ldr r3, [r3, #60] @ 0x3c
  20205. 8008b78: 3b01 subs r3, #1
  20206. 8008b7a: 061b lsls r3, r3, #24
  20207. 8008b7c: f003 43fe and.w r3, r3, #2130706432 @ 0x7f000000
  20208. 8008b80: 4923 ldr r1, [pc, #140] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20209. 8008b82: 4313 orrs r3, r2
  20210. 8008b84: 630b str r3, [r1, #48] @ 0x30
  20211. RCC_OscInitStruct->PLL.PLLP,
  20212. RCC_OscInitStruct->PLL.PLLQ,
  20213. RCC_OscInitStruct->PLL.PLLR);
  20214. /* Disable PLLFRACN . */
  20215. __HAL_RCC_PLLFRACN_DISABLE();
  20216. 8008b86: 4b22 ldr r3, [pc, #136] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20217. 8008b88: 6adb ldr r3, [r3, #44] @ 0x2c
  20218. 8008b8a: 4a21 ldr r2, [pc, #132] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20219. 8008b8c: f023 0301 bic.w r3, r3, #1
  20220. 8008b90: 62d3 str r3, [r2, #44] @ 0x2c
  20221. /* Configure PLL PLL1FRACN */
  20222. __HAL_RCC_PLLFRACN_CONFIG(RCC_OscInitStruct->PLL.PLLFRACN);
  20223. 8008b92: 4b1f ldr r3, [pc, #124] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20224. 8008b94: 6b5a ldr r2, [r3, #52] @ 0x34
  20225. 8008b96: 4b21 ldr r3, [pc, #132] @ (8008c1c <HAL_RCC_OscConfig+0x778>)
  20226. 8008b98: 4013 ands r3, r2
  20227. 8008b9a: 687a ldr r2, [r7, #4]
  20228. 8008b9c: 6c92 ldr r2, [r2, #72] @ 0x48
  20229. 8008b9e: 00d2 lsls r2, r2, #3
  20230. 8008ba0: 491b ldr r1, [pc, #108] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20231. 8008ba2: 4313 orrs r3, r2
  20232. 8008ba4: 634b str r3, [r1, #52] @ 0x34
  20233. /* Select PLL1 input reference frequency range: VCI */
  20234. __HAL_RCC_PLL_VCIRANGE(RCC_OscInitStruct->PLL.PLLRGE) ;
  20235. 8008ba6: 4b1a ldr r3, [pc, #104] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20236. 8008ba8: 6adb ldr r3, [r3, #44] @ 0x2c
  20237. 8008baa: f023 020c bic.w r2, r3, #12
  20238. 8008bae: 687b ldr r3, [r7, #4]
  20239. 8008bb0: 6c1b ldr r3, [r3, #64] @ 0x40
  20240. 8008bb2: 4917 ldr r1, [pc, #92] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20241. 8008bb4: 4313 orrs r3, r2
  20242. 8008bb6: 62cb str r3, [r1, #44] @ 0x2c
  20243. /* Select PLL1 output frequency range : VCO */
  20244. __HAL_RCC_PLL_VCORANGE(RCC_OscInitStruct->PLL.PLLVCOSEL) ;
  20245. 8008bb8: 4b15 ldr r3, [pc, #84] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20246. 8008bba: 6adb ldr r3, [r3, #44] @ 0x2c
  20247. 8008bbc: f023 0202 bic.w r2, r3, #2
  20248. 8008bc0: 687b ldr r3, [r7, #4]
  20249. 8008bc2: 6c5b ldr r3, [r3, #68] @ 0x44
  20250. 8008bc4: 4912 ldr r1, [pc, #72] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20251. 8008bc6: 4313 orrs r3, r2
  20252. 8008bc8: 62cb str r3, [r1, #44] @ 0x2c
  20253. /* Enable PLL System Clock output. */
  20254. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVP);
  20255. 8008bca: 4b11 ldr r3, [pc, #68] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20256. 8008bcc: 6adb ldr r3, [r3, #44] @ 0x2c
  20257. 8008bce: 4a10 ldr r2, [pc, #64] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20258. 8008bd0: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  20259. 8008bd4: 62d3 str r3, [r2, #44] @ 0x2c
  20260. /* Enable PLL1Q Clock output. */
  20261. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  20262. 8008bd6: 4b0e ldr r3, [pc, #56] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20263. 8008bd8: 6adb ldr r3, [r3, #44] @ 0x2c
  20264. 8008bda: 4a0d ldr r2, [pc, #52] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20265. 8008bdc: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  20266. 8008be0: 62d3 str r3, [r2, #44] @ 0x2c
  20267. /* Enable PLL1R Clock output. */
  20268. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVR);
  20269. 8008be2: 4b0b ldr r3, [pc, #44] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20270. 8008be4: 6adb ldr r3, [r3, #44] @ 0x2c
  20271. 8008be6: 4a0a ldr r2, [pc, #40] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20272. 8008be8: f443 2380 orr.w r3, r3, #262144 @ 0x40000
  20273. 8008bec: 62d3 str r3, [r2, #44] @ 0x2c
  20274. /* Enable PLL1FRACN . */
  20275. __HAL_RCC_PLLFRACN_ENABLE();
  20276. 8008bee: 4b08 ldr r3, [pc, #32] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20277. 8008bf0: 6adb ldr r3, [r3, #44] @ 0x2c
  20278. 8008bf2: 4a07 ldr r2, [pc, #28] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20279. 8008bf4: f043 0301 orr.w r3, r3, #1
  20280. 8008bf8: 62d3 str r3, [r2, #44] @ 0x2c
  20281. /* Enable the main PLL. */
  20282. __HAL_RCC_PLL_ENABLE();
  20283. 8008bfa: 4b05 ldr r3, [pc, #20] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20284. 8008bfc: 681b ldr r3, [r3, #0]
  20285. 8008bfe: 4a04 ldr r2, [pc, #16] @ (8008c10 <HAL_RCC_OscConfig+0x76c>)
  20286. 8008c00: f043 7380 orr.w r3, r3, #16777216 @ 0x1000000
  20287. 8008c04: 6013 str r3, [r2, #0]
  20288. /* Get Start Tick*/
  20289. tickstart = HAL_GetTick();
  20290. 8008c06: f7fa fc5d bl 80034c4 <HAL_GetTick>
  20291. 8008c0a: 6278 str r0, [r7, #36] @ 0x24
  20292. /* Wait till PLL is ready */
  20293. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == 0U)
  20294. 8008c0c: e011 b.n 8008c32 <HAL_RCC_OscConfig+0x78e>
  20295. 8008c0e: bf00 nop
  20296. 8008c10: 58024400 .word 0x58024400
  20297. 8008c14: 58024800 .word 0x58024800
  20298. 8008c18: fffffc0c .word 0xfffffc0c
  20299. 8008c1c: ffff0007 .word 0xffff0007
  20300. {
  20301. if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
  20302. 8008c20: f7fa fc50 bl 80034c4 <HAL_GetTick>
  20303. 8008c24: 4602 mov r2, r0
  20304. 8008c26: 6a7b ldr r3, [r7, #36] @ 0x24
  20305. 8008c28: 1ad3 subs r3, r2, r3
  20306. 8008c2a: 2b02 cmp r3, #2
  20307. 8008c2c: d901 bls.n 8008c32 <HAL_RCC_OscConfig+0x78e>
  20308. {
  20309. return HAL_TIMEOUT;
  20310. 8008c2e: 2303 movs r3, #3
  20311. 8008c30: e08a b.n 8008d48 <HAL_RCC_OscConfig+0x8a4>
  20312. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == 0U)
  20313. 8008c32: 4b47 ldr r3, [pc, #284] @ (8008d50 <HAL_RCC_OscConfig+0x8ac>)
  20314. 8008c34: 681b ldr r3, [r3, #0]
  20315. 8008c36: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  20316. 8008c3a: 2b00 cmp r3, #0
  20317. 8008c3c: d0f0 beq.n 8008c20 <HAL_RCC_OscConfig+0x77c>
  20318. 8008c3e: e082 b.n 8008d46 <HAL_RCC_OscConfig+0x8a2>
  20319. }
  20320. }
  20321. else
  20322. {
  20323. /* Disable the main PLL. */
  20324. __HAL_RCC_PLL_DISABLE();
  20325. 8008c40: 4b43 ldr r3, [pc, #268] @ (8008d50 <HAL_RCC_OscConfig+0x8ac>)
  20326. 8008c42: 681b ldr r3, [r3, #0]
  20327. 8008c44: 4a42 ldr r2, [pc, #264] @ (8008d50 <HAL_RCC_OscConfig+0x8ac>)
  20328. 8008c46: f023 7380 bic.w r3, r3, #16777216 @ 0x1000000
  20329. 8008c4a: 6013 str r3, [r2, #0]
  20330. /* Get Start Tick*/
  20331. tickstart = HAL_GetTick();
  20332. 8008c4c: f7fa fc3a bl 80034c4 <HAL_GetTick>
  20333. 8008c50: 6278 str r0, [r7, #36] @ 0x24
  20334. /* Wait till PLL is disabled */
  20335. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != 0U)
  20336. 8008c52: e008 b.n 8008c66 <HAL_RCC_OscConfig+0x7c2>
  20337. {
  20338. if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
  20339. 8008c54: f7fa fc36 bl 80034c4 <HAL_GetTick>
  20340. 8008c58: 4602 mov r2, r0
  20341. 8008c5a: 6a7b ldr r3, [r7, #36] @ 0x24
  20342. 8008c5c: 1ad3 subs r3, r2, r3
  20343. 8008c5e: 2b02 cmp r3, #2
  20344. 8008c60: d901 bls.n 8008c66 <HAL_RCC_OscConfig+0x7c2>
  20345. {
  20346. return HAL_TIMEOUT;
  20347. 8008c62: 2303 movs r3, #3
  20348. 8008c64: e070 b.n 8008d48 <HAL_RCC_OscConfig+0x8a4>
  20349. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != 0U)
  20350. 8008c66: 4b3a ldr r3, [pc, #232] @ (8008d50 <HAL_RCC_OscConfig+0x8ac>)
  20351. 8008c68: 681b ldr r3, [r3, #0]
  20352. 8008c6a: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  20353. 8008c6e: 2b00 cmp r3, #0
  20354. 8008c70: d1f0 bne.n 8008c54 <HAL_RCC_OscConfig+0x7b0>
  20355. 8008c72: e068 b.n 8008d46 <HAL_RCC_OscConfig+0x8a2>
  20356. }
  20357. }
  20358. else
  20359. {
  20360. /* Do not return HAL_ERROR if request repeats the current configuration */
  20361. temp1_pllckcfg = RCC->PLLCKSELR;
  20362. 8008c74: 4b36 ldr r3, [pc, #216] @ (8008d50 <HAL_RCC_OscConfig+0x8ac>)
  20363. 8008c76: 6a9b ldr r3, [r3, #40] @ 0x28
  20364. 8008c78: 613b str r3, [r7, #16]
  20365. temp2_pllckcfg = RCC->PLL1DIVR;
  20366. 8008c7a: 4b35 ldr r3, [pc, #212] @ (8008d50 <HAL_RCC_OscConfig+0x8ac>)
  20367. 8008c7c: 6b1b ldr r3, [r3, #48] @ 0x30
  20368. 8008c7e: 60fb str r3, [r7, #12]
  20369. if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) ||
  20370. 8008c80: 687b ldr r3, [r7, #4]
  20371. 8008c82: 6a5b ldr r3, [r3, #36] @ 0x24
  20372. 8008c84: 2b01 cmp r3, #1
  20373. 8008c86: d031 beq.n 8008cec <HAL_RCC_OscConfig+0x848>
  20374. (READ_BIT(temp1_pllckcfg, RCC_PLLCKSELR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) ||
  20375. 8008c88: 693b ldr r3, [r7, #16]
  20376. 8008c8a: f003 0203 and.w r2, r3, #3
  20377. 8008c8e: 687b ldr r3, [r7, #4]
  20378. 8008c90: 6a9b ldr r3, [r3, #40] @ 0x28
  20379. if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) ||
  20380. 8008c92: 429a cmp r2, r3
  20381. 8008c94: d12a bne.n 8008cec <HAL_RCC_OscConfig+0x848>
  20382. ((READ_BIT(temp1_pllckcfg, RCC_PLLCKSELR_DIVM1) >> RCC_PLLCKSELR_DIVM1_Pos) != RCC_OscInitStruct->PLL.PLLM) ||
  20383. 8008c96: 693b ldr r3, [r7, #16]
  20384. 8008c98: 091b lsrs r3, r3, #4
  20385. 8008c9a: f003 023f and.w r2, r3, #63 @ 0x3f
  20386. 8008c9e: 687b ldr r3, [r7, #4]
  20387. 8008ca0: 6adb ldr r3, [r3, #44] @ 0x2c
  20388. (READ_BIT(temp1_pllckcfg, RCC_PLLCKSELR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) ||
  20389. 8008ca2: 429a cmp r2, r3
  20390. 8008ca4: d122 bne.n 8008cec <HAL_RCC_OscConfig+0x848>
  20391. (READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_N1) != (RCC_OscInitStruct->PLL.PLLN - 1U)) ||
  20392. 8008ca6: 68fb ldr r3, [r7, #12]
  20393. 8008ca8: f3c3 0208 ubfx r2, r3, #0, #9
  20394. 8008cac: 687b ldr r3, [r7, #4]
  20395. 8008cae: 6b1b ldr r3, [r3, #48] @ 0x30
  20396. 8008cb0: 3b01 subs r3, #1
  20397. ((READ_BIT(temp1_pllckcfg, RCC_PLLCKSELR_DIVM1) >> RCC_PLLCKSELR_DIVM1_Pos) != RCC_OscInitStruct->PLL.PLLM) ||
  20398. 8008cb2: 429a cmp r2, r3
  20399. 8008cb4: d11a bne.n 8008cec <HAL_RCC_OscConfig+0x848>
  20400. ((READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_P1) >> RCC_PLL1DIVR_P1_Pos) != (RCC_OscInitStruct->PLL.PLLP - 1U)) ||
  20401. 8008cb6: 68fb ldr r3, [r7, #12]
  20402. 8008cb8: 0a5b lsrs r3, r3, #9
  20403. 8008cba: f003 027f and.w r2, r3, #127 @ 0x7f
  20404. 8008cbe: 687b ldr r3, [r7, #4]
  20405. 8008cc0: 6b5b ldr r3, [r3, #52] @ 0x34
  20406. 8008cc2: 3b01 subs r3, #1
  20407. (READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_N1) != (RCC_OscInitStruct->PLL.PLLN - 1U)) ||
  20408. 8008cc4: 429a cmp r2, r3
  20409. 8008cc6: d111 bne.n 8008cec <HAL_RCC_OscConfig+0x848>
  20410. ((READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_Q1) >> RCC_PLL1DIVR_Q1_Pos) != (RCC_OscInitStruct->PLL.PLLQ - 1U)) ||
  20411. 8008cc8: 68fb ldr r3, [r7, #12]
  20412. 8008cca: 0c1b lsrs r3, r3, #16
  20413. 8008ccc: f003 027f and.w r2, r3, #127 @ 0x7f
  20414. 8008cd0: 687b ldr r3, [r7, #4]
  20415. 8008cd2: 6b9b ldr r3, [r3, #56] @ 0x38
  20416. 8008cd4: 3b01 subs r3, #1
  20417. ((READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_P1) >> RCC_PLL1DIVR_P1_Pos) != (RCC_OscInitStruct->PLL.PLLP - 1U)) ||
  20418. 8008cd6: 429a cmp r2, r3
  20419. 8008cd8: d108 bne.n 8008cec <HAL_RCC_OscConfig+0x848>
  20420. ((READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_R1) >> RCC_PLL1DIVR_R1_Pos) != (RCC_OscInitStruct->PLL.PLLR - 1U)))
  20421. 8008cda: 68fb ldr r3, [r7, #12]
  20422. 8008cdc: 0e1b lsrs r3, r3, #24
  20423. 8008cde: f003 027f and.w r2, r3, #127 @ 0x7f
  20424. 8008ce2: 687b ldr r3, [r7, #4]
  20425. 8008ce4: 6bdb ldr r3, [r3, #60] @ 0x3c
  20426. 8008ce6: 3b01 subs r3, #1
  20427. ((READ_BIT(temp2_pllckcfg, RCC_PLL1DIVR_Q1) >> RCC_PLL1DIVR_Q1_Pos) != (RCC_OscInitStruct->PLL.PLLQ - 1U)) ||
  20428. 8008ce8: 429a cmp r2, r3
  20429. 8008cea: d001 beq.n 8008cf0 <HAL_RCC_OscConfig+0x84c>
  20430. {
  20431. return HAL_ERROR;
  20432. 8008cec: 2301 movs r3, #1
  20433. 8008cee: e02b b.n 8008d48 <HAL_RCC_OscConfig+0x8a4>
  20434. }
  20435. else
  20436. {
  20437. /* Check if only fractional part needs to be updated */
  20438. temp1_pllckcfg = ((RCC->PLL1FRACR & RCC_PLL1FRACR_FRACN1) >> RCC_PLL1FRACR_FRACN1_Pos);
  20439. 8008cf0: 4b17 ldr r3, [pc, #92] @ (8008d50 <HAL_RCC_OscConfig+0x8ac>)
  20440. 8008cf2: 6b5b ldr r3, [r3, #52] @ 0x34
  20441. 8008cf4: 08db lsrs r3, r3, #3
  20442. 8008cf6: f3c3 030c ubfx r3, r3, #0, #13
  20443. 8008cfa: 613b str r3, [r7, #16]
  20444. if (RCC_OscInitStruct->PLL.PLLFRACN != temp1_pllckcfg)
  20445. 8008cfc: 687b ldr r3, [r7, #4]
  20446. 8008cfe: 6c9b ldr r3, [r3, #72] @ 0x48
  20447. 8008d00: 693a ldr r2, [r7, #16]
  20448. 8008d02: 429a cmp r2, r3
  20449. 8008d04: d01f beq.n 8008d46 <HAL_RCC_OscConfig+0x8a2>
  20450. {
  20451. assert_param(IS_RCC_PLLFRACN_VALUE(RCC_OscInitStruct->PLL.PLLFRACN));
  20452. /* Disable PLL1FRACEN */
  20453. __HAL_RCC_PLLFRACN_DISABLE();
  20454. 8008d06: 4b12 ldr r3, [pc, #72] @ (8008d50 <HAL_RCC_OscConfig+0x8ac>)
  20455. 8008d08: 6adb ldr r3, [r3, #44] @ 0x2c
  20456. 8008d0a: 4a11 ldr r2, [pc, #68] @ (8008d50 <HAL_RCC_OscConfig+0x8ac>)
  20457. 8008d0c: f023 0301 bic.w r3, r3, #1
  20458. 8008d10: 62d3 str r3, [r2, #44] @ 0x2c
  20459. /* Get Start Tick*/
  20460. tickstart = HAL_GetTick();
  20461. 8008d12: f7fa fbd7 bl 80034c4 <HAL_GetTick>
  20462. 8008d16: 6278 str r0, [r7, #36] @ 0x24
  20463. /* Wait at least 2 CK_REF (PLL input source divided by M) period to make sure next latched value will be taken into account. */
  20464. while ((HAL_GetTick() - tickstart) < PLL_FRAC_TIMEOUT_VALUE)
  20465. 8008d18: bf00 nop
  20466. 8008d1a: f7fa fbd3 bl 80034c4 <HAL_GetTick>
  20467. 8008d1e: 4602 mov r2, r0
  20468. 8008d20: 6a7b ldr r3, [r7, #36] @ 0x24
  20469. 8008d22: 4293 cmp r3, r2
  20470. 8008d24: d0f9 beq.n 8008d1a <HAL_RCC_OscConfig+0x876>
  20471. {
  20472. }
  20473. /* Configure PLL1 PLL1FRACN */
  20474. __HAL_RCC_PLLFRACN_CONFIG(RCC_OscInitStruct->PLL.PLLFRACN);
  20475. 8008d26: 4b0a ldr r3, [pc, #40] @ (8008d50 <HAL_RCC_OscConfig+0x8ac>)
  20476. 8008d28: 6b5a ldr r2, [r3, #52] @ 0x34
  20477. 8008d2a: 4b0a ldr r3, [pc, #40] @ (8008d54 <HAL_RCC_OscConfig+0x8b0>)
  20478. 8008d2c: 4013 ands r3, r2
  20479. 8008d2e: 687a ldr r2, [r7, #4]
  20480. 8008d30: 6c92 ldr r2, [r2, #72] @ 0x48
  20481. 8008d32: 00d2 lsls r2, r2, #3
  20482. 8008d34: 4906 ldr r1, [pc, #24] @ (8008d50 <HAL_RCC_OscConfig+0x8ac>)
  20483. 8008d36: 4313 orrs r3, r2
  20484. 8008d38: 634b str r3, [r1, #52] @ 0x34
  20485. /* Enable PLL1FRACEN to latch new value. */
  20486. __HAL_RCC_PLLFRACN_ENABLE();
  20487. 8008d3a: 4b05 ldr r3, [pc, #20] @ (8008d50 <HAL_RCC_OscConfig+0x8ac>)
  20488. 8008d3c: 6adb ldr r3, [r3, #44] @ 0x2c
  20489. 8008d3e: 4a04 ldr r2, [pc, #16] @ (8008d50 <HAL_RCC_OscConfig+0x8ac>)
  20490. 8008d40: f043 0301 orr.w r3, r3, #1
  20491. 8008d44: 62d3 str r3, [r2, #44] @ 0x2c
  20492. }
  20493. }
  20494. }
  20495. }
  20496. return HAL_OK;
  20497. 8008d46: 2300 movs r3, #0
  20498. }
  20499. 8008d48: 4618 mov r0, r3
  20500. 8008d4a: 3730 adds r7, #48 @ 0x30
  20501. 8008d4c: 46bd mov sp, r7
  20502. 8008d4e: bd80 pop {r7, pc}
  20503. 8008d50: 58024400 .word 0x58024400
  20504. 8008d54: ffff0007 .word 0xffff0007
  20505. 08008d58 <HAL_RCC_ClockConfig>:
  20506. * D1CPRE[3:0] bits to ensure that Domain1 core clock not exceed the maximum allowed frequency
  20507. * (for more details refer to section above "Initialization/de-initialization functions")
  20508. * @retval None
  20509. */
  20510. HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency)
  20511. {
  20512. 8008d58: b580 push {r7, lr}
  20513. 8008d5a: b086 sub sp, #24
  20514. 8008d5c: af00 add r7, sp, #0
  20515. 8008d5e: 6078 str r0, [r7, #4]
  20516. 8008d60: 6039 str r1, [r7, #0]
  20517. HAL_StatusTypeDef halstatus;
  20518. uint32_t tickstart;
  20519. uint32_t common_system_clock;
  20520. /* Check Null pointer */
  20521. if (RCC_ClkInitStruct == NULL)
  20522. 8008d62: 687b ldr r3, [r7, #4]
  20523. 8008d64: 2b00 cmp r3, #0
  20524. 8008d66: d101 bne.n 8008d6c <HAL_RCC_ClockConfig+0x14>
  20525. {
  20526. return HAL_ERROR;
  20527. 8008d68: 2301 movs r3, #1
  20528. 8008d6a: e19c b.n 80090a6 <HAL_RCC_ClockConfig+0x34e>
  20529. /* To correctly read data from FLASH memory, the number of wait states (LATENCY)
  20530. must be correctly programmed according to the frequency of the CPU clock
  20531. (HCLK) and the supply voltage of the device. */
  20532. /* Increasing the CPU frequency */
  20533. if (FLatency > __HAL_FLASH_GET_LATENCY())
  20534. 8008d6c: 4b8a ldr r3, [pc, #552] @ (8008f98 <HAL_RCC_ClockConfig+0x240>)
  20535. 8008d6e: 681b ldr r3, [r3, #0]
  20536. 8008d70: f003 030f and.w r3, r3, #15
  20537. 8008d74: 683a ldr r2, [r7, #0]
  20538. 8008d76: 429a cmp r2, r3
  20539. 8008d78: d910 bls.n 8008d9c <HAL_RCC_ClockConfig+0x44>
  20540. {
  20541. /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
  20542. __HAL_FLASH_SET_LATENCY(FLatency);
  20543. 8008d7a: 4b87 ldr r3, [pc, #540] @ (8008f98 <HAL_RCC_ClockConfig+0x240>)
  20544. 8008d7c: 681b ldr r3, [r3, #0]
  20545. 8008d7e: f023 020f bic.w r2, r3, #15
  20546. 8008d82: 4985 ldr r1, [pc, #532] @ (8008f98 <HAL_RCC_ClockConfig+0x240>)
  20547. 8008d84: 683b ldr r3, [r7, #0]
  20548. 8008d86: 4313 orrs r3, r2
  20549. 8008d88: 600b str r3, [r1, #0]
  20550. /* Check that the new number of wait states is taken into account to access the Flash
  20551. memory by reading the FLASH_ACR register */
  20552. if (__HAL_FLASH_GET_LATENCY() != FLatency)
  20553. 8008d8a: 4b83 ldr r3, [pc, #524] @ (8008f98 <HAL_RCC_ClockConfig+0x240>)
  20554. 8008d8c: 681b ldr r3, [r3, #0]
  20555. 8008d8e: f003 030f and.w r3, r3, #15
  20556. 8008d92: 683a ldr r2, [r7, #0]
  20557. 8008d94: 429a cmp r2, r3
  20558. 8008d96: d001 beq.n 8008d9c <HAL_RCC_ClockConfig+0x44>
  20559. {
  20560. return HAL_ERROR;
  20561. 8008d98: 2301 movs r3, #1
  20562. 8008d9a: e184 b.n 80090a6 <HAL_RCC_ClockConfig+0x34e>
  20563. }
  20564. /* Increasing the BUS frequency divider */
  20565. /*-------------------------- D1PCLK1/CDPCLK1 Configuration ---------------------------*/
  20566. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_D1PCLK1) == RCC_CLOCKTYPE_D1PCLK1)
  20567. 8008d9c: 687b ldr r3, [r7, #4]
  20568. 8008d9e: 681b ldr r3, [r3, #0]
  20569. 8008da0: f003 0304 and.w r3, r3, #4
  20570. 8008da4: 2b00 cmp r3, #0
  20571. 8008da6: d010 beq.n 8008dca <HAL_RCC_ClockConfig+0x72>
  20572. {
  20573. #if defined (RCC_D1CFGR_D1PPRE)
  20574. if ((RCC_ClkInitStruct->APB3CLKDivider) > (RCC->D1CFGR & RCC_D1CFGR_D1PPRE))
  20575. 8008da8: 687b ldr r3, [r7, #4]
  20576. 8008daa: 691a ldr r2, [r3, #16]
  20577. 8008dac: 4b7b ldr r3, [pc, #492] @ (8008f9c <HAL_RCC_ClockConfig+0x244>)
  20578. 8008dae: 699b ldr r3, [r3, #24]
  20579. 8008db0: f003 0370 and.w r3, r3, #112 @ 0x70
  20580. 8008db4: 429a cmp r2, r3
  20581. 8008db6: d908 bls.n 8008dca <HAL_RCC_ClockConfig+0x72>
  20582. {
  20583. assert_param(IS_RCC_D1PCLK1(RCC_ClkInitStruct->APB3CLKDivider));
  20584. MODIFY_REG(RCC->D1CFGR, RCC_D1CFGR_D1PPRE, RCC_ClkInitStruct->APB3CLKDivider);
  20585. 8008db8: 4b78 ldr r3, [pc, #480] @ (8008f9c <HAL_RCC_ClockConfig+0x244>)
  20586. 8008dba: 699b ldr r3, [r3, #24]
  20587. 8008dbc: f023 0270 bic.w r2, r3, #112 @ 0x70
  20588. 8008dc0: 687b ldr r3, [r7, #4]
  20589. 8008dc2: 691b ldr r3, [r3, #16]
  20590. 8008dc4: 4975 ldr r1, [pc, #468] @ (8008f9c <HAL_RCC_ClockConfig+0x244>)
  20591. 8008dc6: 4313 orrs r3, r2
  20592. 8008dc8: 618b str r3, [r1, #24]
  20593. }
  20594. #endif
  20595. }
  20596. /*-------------------------- PCLK1 Configuration ---------------------------*/
  20597. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
  20598. 8008dca: 687b ldr r3, [r7, #4]
  20599. 8008dcc: 681b ldr r3, [r3, #0]
  20600. 8008dce: f003 0308 and.w r3, r3, #8
  20601. 8008dd2: 2b00 cmp r3, #0
  20602. 8008dd4: d010 beq.n 8008df8 <HAL_RCC_ClockConfig+0xa0>
  20603. {
  20604. #if defined (RCC_D2CFGR_D2PPRE1)
  20605. if ((RCC_ClkInitStruct->APB1CLKDivider) > (RCC->D2CFGR & RCC_D2CFGR_D2PPRE1))
  20606. 8008dd6: 687b ldr r3, [r7, #4]
  20607. 8008dd8: 695a ldr r2, [r3, #20]
  20608. 8008dda: 4b70 ldr r3, [pc, #448] @ (8008f9c <HAL_RCC_ClockConfig+0x244>)
  20609. 8008ddc: 69db ldr r3, [r3, #28]
  20610. 8008dde: f003 0370 and.w r3, r3, #112 @ 0x70
  20611. 8008de2: 429a cmp r2, r3
  20612. 8008de4: d908 bls.n 8008df8 <HAL_RCC_ClockConfig+0xa0>
  20613. {
  20614. assert_param(IS_RCC_PCLK1(RCC_ClkInitStruct->APB1CLKDivider));
  20615. MODIFY_REG(RCC->D2CFGR, RCC_D2CFGR_D2PPRE1, (RCC_ClkInitStruct->APB1CLKDivider));
  20616. 8008de6: 4b6d ldr r3, [pc, #436] @ (8008f9c <HAL_RCC_ClockConfig+0x244>)
  20617. 8008de8: 69db ldr r3, [r3, #28]
  20618. 8008dea: f023 0270 bic.w r2, r3, #112 @ 0x70
  20619. 8008dee: 687b ldr r3, [r7, #4]
  20620. 8008df0: 695b ldr r3, [r3, #20]
  20621. 8008df2: 496a ldr r1, [pc, #424] @ (8008f9c <HAL_RCC_ClockConfig+0x244>)
  20622. 8008df4: 4313 orrs r3, r2
  20623. 8008df6: 61cb str r3, [r1, #28]
  20624. MODIFY_REG(RCC->CDCFGR2, RCC_CDCFGR2_CDPPRE1, (RCC_ClkInitStruct->APB1CLKDivider));
  20625. }
  20626. #endif
  20627. }
  20628. /*-------------------------- PCLK2 Configuration ---------------------------*/
  20629. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
  20630. 8008df8: 687b ldr r3, [r7, #4]
  20631. 8008dfa: 681b ldr r3, [r3, #0]
  20632. 8008dfc: f003 0310 and.w r3, r3, #16
  20633. 8008e00: 2b00 cmp r3, #0
  20634. 8008e02: d010 beq.n 8008e26 <HAL_RCC_ClockConfig+0xce>
  20635. {
  20636. #if defined(RCC_D2CFGR_D2PPRE2)
  20637. if ((RCC_ClkInitStruct->APB2CLKDivider) > (RCC->D2CFGR & RCC_D2CFGR_D2PPRE2))
  20638. 8008e04: 687b ldr r3, [r7, #4]
  20639. 8008e06: 699a ldr r2, [r3, #24]
  20640. 8008e08: 4b64 ldr r3, [pc, #400] @ (8008f9c <HAL_RCC_ClockConfig+0x244>)
  20641. 8008e0a: 69db ldr r3, [r3, #28]
  20642. 8008e0c: f403 63e0 and.w r3, r3, #1792 @ 0x700
  20643. 8008e10: 429a cmp r2, r3
  20644. 8008e12: d908 bls.n 8008e26 <HAL_RCC_ClockConfig+0xce>
  20645. {
  20646. assert_param(IS_RCC_PCLK2(RCC_ClkInitStruct->APB2CLKDivider));
  20647. MODIFY_REG(RCC->D2CFGR, RCC_D2CFGR_D2PPRE2, (RCC_ClkInitStruct->APB2CLKDivider));
  20648. 8008e14: 4b61 ldr r3, [pc, #388] @ (8008f9c <HAL_RCC_ClockConfig+0x244>)
  20649. 8008e16: 69db ldr r3, [r3, #28]
  20650. 8008e18: f423 62e0 bic.w r2, r3, #1792 @ 0x700
  20651. 8008e1c: 687b ldr r3, [r7, #4]
  20652. 8008e1e: 699b ldr r3, [r3, #24]
  20653. 8008e20: 495e ldr r1, [pc, #376] @ (8008f9c <HAL_RCC_ClockConfig+0x244>)
  20654. 8008e22: 4313 orrs r3, r2
  20655. 8008e24: 61cb str r3, [r1, #28]
  20656. }
  20657. #endif
  20658. }
  20659. /*-------------------------- D3PCLK1 Configuration ---------------------------*/
  20660. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_D3PCLK1) == RCC_CLOCKTYPE_D3PCLK1)
  20661. 8008e26: 687b ldr r3, [r7, #4]
  20662. 8008e28: 681b ldr r3, [r3, #0]
  20663. 8008e2a: f003 0320 and.w r3, r3, #32
  20664. 8008e2e: 2b00 cmp r3, #0
  20665. 8008e30: d010 beq.n 8008e54 <HAL_RCC_ClockConfig+0xfc>
  20666. {
  20667. #if defined(RCC_D3CFGR_D3PPRE)
  20668. if ((RCC_ClkInitStruct->APB4CLKDivider) > (RCC->D3CFGR & RCC_D3CFGR_D3PPRE))
  20669. 8008e32: 687b ldr r3, [r7, #4]
  20670. 8008e34: 69da ldr r2, [r3, #28]
  20671. 8008e36: 4b59 ldr r3, [pc, #356] @ (8008f9c <HAL_RCC_ClockConfig+0x244>)
  20672. 8008e38: 6a1b ldr r3, [r3, #32]
  20673. 8008e3a: f003 0370 and.w r3, r3, #112 @ 0x70
  20674. 8008e3e: 429a cmp r2, r3
  20675. 8008e40: d908 bls.n 8008e54 <HAL_RCC_ClockConfig+0xfc>
  20676. {
  20677. assert_param(IS_RCC_D3PCLK1(RCC_ClkInitStruct->APB4CLKDivider));
  20678. MODIFY_REG(RCC->D3CFGR, RCC_D3CFGR_D3PPRE, (RCC_ClkInitStruct->APB4CLKDivider));
  20679. 8008e42: 4b56 ldr r3, [pc, #344] @ (8008f9c <HAL_RCC_ClockConfig+0x244>)
  20680. 8008e44: 6a1b ldr r3, [r3, #32]
  20681. 8008e46: f023 0270 bic.w r2, r3, #112 @ 0x70
  20682. 8008e4a: 687b ldr r3, [r7, #4]
  20683. 8008e4c: 69db ldr r3, [r3, #28]
  20684. 8008e4e: 4953 ldr r1, [pc, #332] @ (8008f9c <HAL_RCC_ClockConfig+0x244>)
  20685. 8008e50: 4313 orrs r3, r2
  20686. 8008e52: 620b str r3, [r1, #32]
  20687. }
  20688. #endif
  20689. }
  20690. /*-------------------------- HCLK Configuration --------------------------*/
  20691. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK)
  20692. 8008e54: 687b ldr r3, [r7, #4]
  20693. 8008e56: 681b ldr r3, [r3, #0]
  20694. 8008e58: f003 0302 and.w r3, r3, #2
  20695. 8008e5c: 2b00 cmp r3, #0
  20696. 8008e5e: d010 beq.n 8008e82 <HAL_RCC_ClockConfig+0x12a>
  20697. {
  20698. #if defined (RCC_D1CFGR_HPRE)
  20699. if ((RCC_ClkInitStruct->AHBCLKDivider) > (RCC->D1CFGR & RCC_D1CFGR_HPRE))
  20700. 8008e60: 687b ldr r3, [r7, #4]
  20701. 8008e62: 68da ldr r2, [r3, #12]
  20702. 8008e64: 4b4d ldr r3, [pc, #308] @ (8008f9c <HAL_RCC_ClockConfig+0x244>)
  20703. 8008e66: 699b ldr r3, [r3, #24]
  20704. 8008e68: f003 030f and.w r3, r3, #15
  20705. 8008e6c: 429a cmp r2, r3
  20706. 8008e6e: d908 bls.n 8008e82 <HAL_RCC_ClockConfig+0x12a>
  20707. {
  20708. /* Set the new HCLK clock divider */
  20709. assert_param(IS_RCC_HCLK(RCC_ClkInitStruct->AHBCLKDivider));
  20710. MODIFY_REG(RCC->D1CFGR, RCC_D1CFGR_HPRE, RCC_ClkInitStruct->AHBCLKDivider);
  20711. 8008e70: 4b4a ldr r3, [pc, #296] @ (8008f9c <HAL_RCC_ClockConfig+0x244>)
  20712. 8008e72: 699b ldr r3, [r3, #24]
  20713. 8008e74: f023 020f bic.w r2, r3, #15
  20714. 8008e78: 687b ldr r3, [r7, #4]
  20715. 8008e7a: 68db ldr r3, [r3, #12]
  20716. 8008e7c: 4947 ldr r1, [pc, #284] @ (8008f9c <HAL_RCC_ClockConfig+0x244>)
  20717. 8008e7e: 4313 orrs r3, r2
  20718. 8008e80: 618b str r3, [r1, #24]
  20719. }
  20720. #endif
  20721. }
  20722. /*------------------------- SYSCLK Configuration -------------------------*/
  20723. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK)
  20724. 8008e82: 687b ldr r3, [r7, #4]
  20725. 8008e84: 681b ldr r3, [r3, #0]
  20726. 8008e86: f003 0301 and.w r3, r3, #1
  20727. 8008e8a: 2b00 cmp r3, #0
  20728. 8008e8c: d055 beq.n 8008f3a <HAL_RCC_ClockConfig+0x1e2>
  20729. {
  20730. assert_param(IS_RCC_SYSCLK(RCC_ClkInitStruct->SYSCLKDivider));
  20731. assert_param(IS_RCC_SYSCLKSOURCE(RCC_ClkInitStruct->SYSCLKSource));
  20732. #if defined(RCC_D1CFGR_D1CPRE)
  20733. MODIFY_REG(RCC->D1CFGR, RCC_D1CFGR_D1CPRE, RCC_ClkInitStruct->SYSCLKDivider);
  20734. 8008e8e: 4b43 ldr r3, [pc, #268] @ (8008f9c <HAL_RCC_ClockConfig+0x244>)
  20735. 8008e90: 699b ldr r3, [r3, #24]
  20736. 8008e92: f423 6270 bic.w r2, r3, #3840 @ 0xf00
  20737. 8008e96: 687b ldr r3, [r7, #4]
  20738. 8008e98: 689b ldr r3, [r3, #8]
  20739. 8008e9a: 4940 ldr r1, [pc, #256] @ (8008f9c <HAL_RCC_ClockConfig+0x244>)
  20740. 8008e9c: 4313 orrs r3, r2
  20741. 8008e9e: 618b str r3, [r1, #24]
  20742. #else
  20743. MODIFY_REG(RCC->CDCFGR1, RCC_CDCFGR1_CDCPRE, RCC_ClkInitStruct->SYSCLKDivider);
  20744. #endif
  20745. /* HSE is selected as System Clock Source */
  20746. if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE)
  20747. 8008ea0: 687b ldr r3, [r7, #4]
  20748. 8008ea2: 685b ldr r3, [r3, #4]
  20749. 8008ea4: 2b02 cmp r3, #2
  20750. 8008ea6: d107 bne.n 8008eb8 <HAL_RCC_ClockConfig+0x160>
  20751. {
  20752. /* Check the HSE ready flag */
  20753. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == 0U)
  20754. 8008ea8: 4b3c ldr r3, [pc, #240] @ (8008f9c <HAL_RCC_ClockConfig+0x244>)
  20755. 8008eaa: 681b ldr r3, [r3, #0]
  20756. 8008eac: f403 3300 and.w r3, r3, #131072 @ 0x20000
  20757. 8008eb0: 2b00 cmp r3, #0
  20758. 8008eb2: d121 bne.n 8008ef8 <HAL_RCC_ClockConfig+0x1a0>
  20759. {
  20760. return HAL_ERROR;
  20761. 8008eb4: 2301 movs r3, #1
  20762. 8008eb6: e0f6 b.n 80090a6 <HAL_RCC_ClockConfig+0x34e>
  20763. }
  20764. }
  20765. /* PLL is selected as System Clock Source */
  20766. else if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK)
  20767. 8008eb8: 687b ldr r3, [r7, #4]
  20768. 8008eba: 685b ldr r3, [r3, #4]
  20769. 8008ebc: 2b03 cmp r3, #3
  20770. 8008ebe: d107 bne.n 8008ed0 <HAL_RCC_ClockConfig+0x178>
  20771. {
  20772. /* Check the PLL ready flag */
  20773. if (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == 0U)
  20774. 8008ec0: 4b36 ldr r3, [pc, #216] @ (8008f9c <HAL_RCC_ClockConfig+0x244>)
  20775. 8008ec2: 681b ldr r3, [r3, #0]
  20776. 8008ec4: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  20777. 8008ec8: 2b00 cmp r3, #0
  20778. 8008eca: d115 bne.n 8008ef8 <HAL_RCC_ClockConfig+0x1a0>
  20779. {
  20780. return HAL_ERROR;
  20781. 8008ecc: 2301 movs r3, #1
  20782. 8008ece: e0ea b.n 80090a6 <HAL_RCC_ClockConfig+0x34e>
  20783. }
  20784. }
  20785. /* CSI is selected as System Clock Source */
  20786. else if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_CSI)
  20787. 8008ed0: 687b ldr r3, [r7, #4]
  20788. 8008ed2: 685b ldr r3, [r3, #4]
  20789. 8008ed4: 2b01 cmp r3, #1
  20790. 8008ed6: d107 bne.n 8008ee8 <HAL_RCC_ClockConfig+0x190>
  20791. {
  20792. /* Check the PLL ready flag */
  20793. if (__HAL_RCC_GET_FLAG(RCC_FLAG_CSIRDY) == 0U)
  20794. 8008ed8: 4b30 ldr r3, [pc, #192] @ (8008f9c <HAL_RCC_ClockConfig+0x244>)
  20795. 8008eda: 681b ldr r3, [r3, #0]
  20796. 8008edc: f403 7380 and.w r3, r3, #256 @ 0x100
  20797. 8008ee0: 2b00 cmp r3, #0
  20798. 8008ee2: d109 bne.n 8008ef8 <HAL_RCC_ClockConfig+0x1a0>
  20799. {
  20800. return HAL_ERROR;
  20801. 8008ee4: 2301 movs r3, #1
  20802. 8008ee6: e0de b.n 80090a6 <HAL_RCC_ClockConfig+0x34e>
  20803. }
  20804. /* HSI is selected as System Clock Source */
  20805. else
  20806. {
  20807. /* Check the HSI ready flag */
  20808. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == 0U)
  20809. 8008ee8: 4b2c ldr r3, [pc, #176] @ (8008f9c <HAL_RCC_ClockConfig+0x244>)
  20810. 8008eea: 681b ldr r3, [r3, #0]
  20811. 8008eec: f003 0304 and.w r3, r3, #4
  20812. 8008ef0: 2b00 cmp r3, #0
  20813. 8008ef2: d101 bne.n 8008ef8 <HAL_RCC_ClockConfig+0x1a0>
  20814. {
  20815. return HAL_ERROR;
  20816. 8008ef4: 2301 movs r3, #1
  20817. 8008ef6: e0d6 b.n 80090a6 <HAL_RCC_ClockConfig+0x34e>
  20818. }
  20819. }
  20820. MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, RCC_ClkInitStruct->SYSCLKSource);
  20821. 8008ef8: 4b28 ldr r3, [pc, #160] @ (8008f9c <HAL_RCC_ClockConfig+0x244>)
  20822. 8008efa: 691b ldr r3, [r3, #16]
  20823. 8008efc: f023 0207 bic.w r2, r3, #7
  20824. 8008f00: 687b ldr r3, [r7, #4]
  20825. 8008f02: 685b ldr r3, [r3, #4]
  20826. 8008f04: 4925 ldr r1, [pc, #148] @ (8008f9c <HAL_RCC_ClockConfig+0x244>)
  20827. 8008f06: 4313 orrs r3, r2
  20828. 8008f08: 610b str r3, [r1, #16]
  20829. /* Get Start Tick*/
  20830. tickstart = HAL_GetTick();
  20831. 8008f0a: f7fa fadb bl 80034c4 <HAL_GetTick>
  20832. 8008f0e: 6178 str r0, [r7, #20]
  20833. while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos))
  20834. 8008f10: e00a b.n 8008f28 <HAL_RCC_ClockConfig+0x1d0>
  20835. {
  20836. if ((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE)
  20837. 8008f12: f7fa fad7 bl 80034c4 <HAL_GetTick>
  20838. 8008f16: 4602 mov r2, r0
  20839. 8008f18: 697b ldr r3, [r7, #20]
  20840. 8008f1a: 1ad3 subs r3, r2, r3
  20841. 8008f1c: f241 3288 movw r2, #5000 @ 0x1388
  20842. 8008f20: 4293 cmp r3, r2
  20843. 8008f22: d901 bls.n 8008f28 <HAL_RCC_ClockConfig+0x1d0>
  20844. {
  20845. return HAL_TIMEOUT;
  20846. 8008f24: 2303 movs r3, #3
  20847. 8008f26: e0be b.n 80090a6 <HAL_RCC_ClockConfig+0x34e>
  20848. while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos))
  20849. 8008f28: 4b1c ldr r3, [pc, #112] @ (8008f9c <HAL_RCC_ClockConfig+0x244>)
  20850. 8008f2a: 691b ldr r3, [r3, #16]
  20851. 8008f2c: f003 0238 and.w r2, r3, #56 @ 0x38
  20852. 8008f30: 687b ldr r3, [r7, #4]
  20853. 8008f32: 685b ldr r3, [r3, #4]
  20854. 8008f34: 00db lsls r3, r3, #3
  20855. 8008f36: 429a cmp r2, r3
  20856. 8008f38: d1eb bne.n 8008f12 <HAL_RCC_ClockConfig+0x1ba>
  20857. }
  20858. /* Decreasing the BUS frequency divider */
  20859. /*-------------------------- HCLK Configuration --------------------------*/
  20860. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK)
  20861. 8008f3a: 687b ldr r3, [r7, #4]
  20862. 8008f3c: 681b ldr r3, [r3, #0]
  20863. 8008f3e: f003 0302 and.w r3, r3, #2
  20864. 8008f42: 2b00 cmp r3, #0
  20865. 8008f44: d010 beq.n 8008f68 <HAL_RCC_ClockConfig+0x210>
  20866. {
  20867. #if defined(RCC_D1CFGR_HPRE)
  20868. if ((RCC_ClkInitStruct->AHBCLKDivider) < (RCC->D1CFGR & RCC_D1CFGR_HPRE))
  20869. 8008f46: 687b ldr r3, [r7, #4]
  20870. 8008f48: 68da ldr r2, [r3, #12]
  20871. 8008f4a: 4b14 ldr r3, [pc, #80] @ (8008f9c <HAL_RCC_ClockConfig+0x244>)
  20872. 8008f4c: 699b ldr r3, [r3, #24]
  20873. 8008f4e: f003 030f and.w r3, r3, #15
  20874. 8008f52: 429a cmp r2, r3
  20875. 8008f54: d208 bcs.n 8008f68 <HAL_RCC_ClockConfig+0x210>
  20876. {
  20877. /* Set the new HCLK clock divider */
  20878. assert_param(IS_RCC_HCLK(RCC_ClkInitStruct->AHBCLKDivider));
  20879. MODIFY_REG(RCC->D1CFGR, RCC_D1CFGR_HPRE, RCC_ClkInitStruct->AHBCLKDivider);
  20880. 8008f56: 4b11 ldr r3, [pc, #68] @ (8008f9c <HAL_RCC_ClockConfig+0x244>)
  20881. 8008f58: 699b ldr r3, [r3, #24]
  20882. 8008f5a: f023 020f bic.w r2, r3, #15
  20883. 8008f5e: 687b ldr r3, [r7, #4]
  20884. 8008f60: 68db ldr r3, [r3, #12]
  20885. 8008f62: 490e ldr r1, [pc, #56] @ (8008f9c <HAL_RCC_ClockConfig+0x244>)
  20886. 8008f64: 4313 orrs r3, r2
  20887. 8008f66: 618b str r3, [r1, #24]
  20888. }
  20889. #endif
  20890. }
  20891. /* Decreasing the number of wait states because of lower CPU frequency */
  20892. if (FLatency < __HAL_FLASH_GET_LATENCY())
  20893. 8008f68: 4b0b ldr r3, [pc, #44] @ (8008f98 <HAL_RCC_ClockConfig+0x240>)
  20894. 8008f6a: 681b ldr r3, [r3, #0]
  20895. 8008f6c: f003 030f and.w r3, r3, #15
  20896. 8008f70: 683a ldr r2, [r7, #0]
  20897. 8008f72: 429a cmp r2, r3
  20898. 8008f74: d214 bcs.n 8008fa0 <HAL_RCC_ClockConfig+0x248>
  20899. {
  20900. /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
  20901. __HAL_FLASH_SET_LATENCY(FLatency);
  20902. 8008f76: 4b08 ldr r3, [pc, #32] @ (8008f98 <HAL_RCC_ClockConfig+0x240>)
  20903. 8008f78: 681b ldr r3, [r3, #0]
  20904. 8008f7a: f023 020f bic.w r2, r3, #15
  20905. 8008f7e: 4906 ldr r1, [pc, #24] @ (8008f98 <HAL_RCC_ClockConfig+0x240>)
  20906. 8008f80: 683b ldr r3, [r7, #0]
  20907. 8008f82: 4313 orrs r3, r2
  20908. 8008f84: 600b str r3, [r1, #0]
  20909. /* Check that the new number of wait states is taken into account to access the Flash
  20910. memory by reading the FLASH_ACR register */
  20911. if (__HAL_FLASH_GET_LATENCY() != FLatency)
  20912. 8008f86: 4b04 ldr r3, [pc, #16] @ (8008f98 <HAL_RCC_ClockConfig+0x240>)
  20913. 8008f88: 681b ldr r3, [r3, #0]
  20914. 8008f8a: f003 030f and.w r3, r3, #15
  20915. 8008f8e: 683a ldr r2, [r7, #0]
  20916. 8008f90: 429a cmp r2, r3
  20917. 8008f92: d005 beq.n 8008fa0 <HAL_RCC_ClockConfig+0x248>
  20918. {
  20919. return HAL_ERROR;
  20920. 8008f94: 2301 movs r3, #1
  20921. 8008f96: e086 b.n 80090a6 <HAL_RCC_ClockConfig+0x34e>
  20922. 8008f98: 52002000 .word 0x52002000
  20923. 8008f9c: 58024400 .word 0x58024400
  20924. }
  20925. }
  20926. /*-------------------------- D1PCLK1/CDPCLK Configuration ---------------------------*/
  20927. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_D1PCLK1) == RCC_CLOCKTYPE_D1PCLK1)
  20928. 8008fa0: 687b ldr r3, [r7, #4]
  20929. 8008fa2: 681b ldr r3, [r3, #0]
  20930. 8008fa4: f003 0304 and.w r3, r3, #4
  20931. 8008fa8: 2b00 cmp r3, #0
  20932. 8008faa: d010 beq.n 8008fce <HAL_RCC_ClockConfig+0x276>
  20933. {
  20934. #if defined(RCC_D1CFGR_D1PPRE)
  20935. if ((RCC_ClkInitStruct->APB3CLKDivider) < (RCC->D1CFGR & RCC_D1CFGR_D1PPRE))
  20936. 8008fac: 687b ldr r3, [r7, #4]
  20937. 8008fae: 691a ldr r2, [r3, #16]
  20938. 8008fb0: 4b3f ldr r3, [pc, #252] @ (80090b0 <HAL_RCC_ClockConfig+0x358>)
  20939. 8008fb2: 699b ldr r3, [r3, #24]
  20940. 8008fb4: f003 0370 and.w r3, r3, #112 @ 0x70
  20941. 8008fb8: 429a cmp r2, r3
  20942. 8008fba: d208 bcs.n 8008fce <HAL_RCC_ClockConfig+0x276>
  20943. {
  20944. assert_param(IS_RCC_D1PCLK1(RCC_ClkInitStruct->APB3CLKDivider));
  20945. MODIFY_REG(RCC->D1CFGR, RCC_D1CFGR_D1PPRE, RCC_ClkInitStruct->APB3CLKDivider);
  20946. 8008fbc: 4b3c ldr r3, [pc, #240] @ (80090b0 <HAL_RCC_ClockConfig+0x358>)
  20947. 8008fbe: 699b ldr r3, [r3, #24]
  20948. 8008fc0: f023 0270 bic.w r2, r3, #112 @ 0x70
  20949. 8008fc4: 687b ldr r3, [r7, #4]
  20950. 8008fc6: 691b ldr r3, [r3, #16]
  20951. 8008fc8: 4939 ldr r1, [pc, #228] @ (80090b0 <HAL_RCC_ClockConfig+0x358>)
  20952. 8008fca: 4313 orrs r3, r2
  20953. 8008fcc: 618b str r3, [r1, #24]
  20954. }
  20955. #endif
  20956. }
  20957. /*-------------------------- PCLK1 Configuration ---------------------------*/
  20958. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
  20959. 8008fce: 687b ldr r3, [r7, #4]
  20960. 8008fd0: 681b ldr r3, [r3, #0]
  20961. 8008fd2: f003 0308 and.w r3, r3, #8
  20962. 8008fd6: 2b00 cmp r3, #0
  20963. 8008fd8: d010 beq.n 8008ffc <HAL_RCC_ClockConfig+0x2a4>
  20964. {
  20965. #if defined(RCC_D2CFGR_D2PPRE1)
  20966. if ((RCC_ClkInitStruct->APB1CLKDivider) < (RCC->D2CFGR & RCC_D2CFGR_D2PPRE1))
  20967. 8008fda: 687b ldr r3, [r7, #4]
  20968. 8008fdc: 695a ldr r2, [r3, #20]
  20969. 8008fde: 4b34 ldr r3, [pc, #208] @ (80090b0 <HAL_RCC_ClockConfig+0x358>)
  20970. 8008fe0: 69db ldr r3, [r3, #28]
  20971. 8008fe2: f003 0370 and.w r3, r3, #112 @ 0x70
  20972. 8008fe6: 429a cmp r2, r3
  20973. 8008fe8: d208 bcs.n 8008ffc <HAL_RCC_ClockConfig+0x2a4>
  20974. {
  20975. assert_param(IS_RCC_PCLK1(RCC_ClkInitStruct->APB1CLKDivider));
  20976. MODIFY_REG(RCC->D2CFGR, RCC_D2CFGR_D2PPRE1, (RCC_ClkInitStruct->APB1CLKDivider));
  20977. 8008fea: 4b31 ldr r3, [pc, #196] @ (80090b0 <HAL_RCC_ClockConfig+0x358>)
  20978. 8008fec: 69db ldr r3, [r3, #28]
  20979. 8008fee: f023 0270 bic.w r2, r3, #112 @ 0x70
  20980. 8008ff2: 687b ldr r3, [r7, #4]
  20981. 8008ff4: 695b ldr r3, [r3, #20]
  20982. 8008ff6: 492e ldr r1, [pc, #184] @ (80090b0 <HAL_RCC_ClockConfig+0x358>)
  20983. 8008ff8: 4313 orrs r3, r2
  20984. 8008ffa: 61cb str r3, [r1, #28]
  20985. }
  20986. #endif
  20987. }
  20988. /*-------------------------- PCLK2 Configuration ---------------------------*/
  20989. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
  20990. 8008ffc: 687b ldr r3, [r7, #4]
  20991. 8008ffe: 681b ldr r3, [r3, #0]
  20992. 8009000: f003 0310 and.w r3, r3, #16
  20993. 8009004: 2b00 cmp r3, #0
  20994. 8009006: d010 beq.n 800902a <HAL_RCC_ClockConfig+0x2d2>
  20995. {
  20996. #if defined (RCC_D2CFGR_D2PPRE2)
  20997. if ((RCC_ClkInitStruct->APB2CLKDivider) < (RCC->D2CFGR & RCC_D2CFGR_D2PPRE2))
  20998. 8009008: 687b ldr r3, [r7, #4]
  20999. 800900a: 699a ldr r2, [r3, #24]
  21000. 800900c: 4b28 ldr r3, [pc, #160] @ (80090b0 <HAL_RCC_ClockConfig+0x358>)
  21001. 800900e: 69db ldr r3, [r3, #28]
  21002. 8009010: f403 63e0 and.w r3, r3, #1792 @ 0x700
  21003. 8009014: 429a cmp r2, r3
  21004. 8009016: d208 bcs.n 800902a <HAL_RCC_ClockConfig+0x2d2>
  21005. {
  21006. assert_param(IS_RCC_PCLK2(RCC_ClkInitStruct->APB2CLKDivider));
  21007. MODIFY_REG(RCC->D2CFGR, RCC_D2CFGR_D2PPRE2, (RCC_ClkInitStruct->APB2CLKDivider));
  21008. 8009018: 4b25 ldr r3, [pc, #148] @ (80090b0 <HAL_RCC_ClockConfig+0x358>)
  21009. 800901a: 69db ldr r3, [r3, #28]
  21010. 800901c: f423 62e0 bic.w r2, r3, #1792 @ 0x700
  21011. 8009020: 687b ldr r3, [r7, #4]
  21012. 8009022: 699b ldr r3, [r3, #24]
  21013. 8009024: 4922 ldr r1, [pc, #136] @ (80090b0 <HAL_RCC_ClockConfig+0x358>)
  21014. 8009026: 4313 orrs r3, r2
  21015. 8009028: 61cb str r3, [r1, #28]
  21016. }
  21017. #endif
  21018. }
  21019. /*-------------------------- D3PCLK1/SRDPCLK1 Configuration ---------------------------*/
  21020. if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_D3PCLK1) == RCC_CLOCKTYPE_D3PCLK1)
  21021. 800902a: 687b ldr r3, [r7, #4]
  21022. 800902c: 681b ldr r3, [r3, #0]
  21023. 800902e: f003 0320 and.w r3, r3, #32
  21024. 8009032: 2b00 cmp r3, #0
  21025. 8009034: d010 beq.n 8009058 <HAL_RCC_ClockConfig+0x300>
  21026. {
  21027. #if defined(RCC_D3CFGR_D3PPRE)
  21028. if ((RCC_ClkInitStruct->APB4CLKDivider) < (RCC->D3CFGR & RCC_D3CFGR_D3PPRE))
  21029. 8009036: 687b ldr r3, [r7, #4]
  21030. 8009038: 69da ldr r2, [r3, #28]
  21031. 800903a: 4b1d ldr r3, [pc, #116] @ (80090b0 <HAL_RCC_ClockConfig+0x358>)
  21032. 800903c: 6a1b ldr r3, [r3, #32]
  21033. 800903e: f003 0370 and.w r3, r3, #112 @ 0x70
  21034. 8009042: 429a cmp r2, r3
  21035. 8009044: d208 bcs.n 8009058 <HAL_RCC_ClockConfig+0x300>
  21036. {
  21037. assert_param(IS_RCC_D3PCLK1(RCC_ClkInitStruct->APB4CLKDivider));
  21038. MODIFY_REG(RCC->D3CFGR, RCC_D3CFGR_D3PPRE, (RCC_ClkInitStruct->APB4CLKDivider));
  21039. 8009046: 4b1a ldr r3, [pc, #104] @ (80090b0 <HAL_RCC_ClockConfig+0x358>)
  21040. 8009048: 6a1b ldr r3, [r3, #32]
  21041. 800904a: f023 0270 bic.w r2, r3, #112 @ 0x70
  21042. 800904e: 687b ldr r3, [r7, #4]
  21043. 8009050: 69db ldr r3, [r3, #28]
  21044. 8009052: 4917 ldr r1, [pc, #92] @ (80090b0 <HAL_RCC_ClockConfig+0x358>)
  21045. 8009054: 4313 orrs r3, r2
  21046. 8009056: 620b str r3, [r1, #32]
  21047. #endif
  21048. }
  21049. /* Update the SystemCoreClock global variable */
  21050. #if defined(RCC_D1CFGR_D1CPRE)
  21051. common_system_clock = HAL_RCC_GetSysClockFreq() >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_D1CPRE) >> RCC_D1CFGR_D1CPRE_Pos]) & 0x1FU);
  21052. 8009058: f000 f834 bl 80090c4 <HAL_RCC_GetSysClockFreq>
  21053. 800905c: 4602 mov r2, r0
  21054. 800905e: 4b14 ldr r3, [pc, #80] @ (80090b0 <HAL_RCC_ClockConfig+0x358>)
  21055. 8009060: 699b ldr r3, [r3, #24]
  21056. 8009062: 0a1b lsrs r3, r3, #8
  21057. 8009064: f003 030f and.w r3, r3, #15
  21058. 8009068: 4912 ldr r1, [pc, #72] @ (80090b4 <HAL_RCC_ClockConfig+0x35c>)
  21059. 800906a: 5ccb ldrb r3, [r1, r3]
  21060. 800906c: f003 031f and.w r3, r3, #31
  21061. 8009070: fa22 f303 lsr.w r3, r2, r3
  21062. 8009074: 613b str r3, [r7, #16]
  21063. #else
  21064. common_system_clock = HAL_RCC_GetSysClockFreq() >> ((D1CorePrescTable[(RCC->CDCFGR1 & RCC_CDCFGR1_CDCPRE) >> RCC_CDCFGR1_CDCPRE_Pos]) & 0x1FU);
  21065. #endif
  21066. #if defined(RCC_D1CFGR_HPRE)
  21067. SystemD2Clock = (common_system_clock >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_HPRE) >> RCC_D1CFGR_HPRE_Pos]) & 0x1FU));
  21068. 8009076: 4b0e ldr r3, [pc, #56] @ (80090b0 <HAL_RCC_ClockConfig+0x358>)
  21069. 8009078: 699b ldr r3, [r3, #24]
  21070. 800907a: f003 030f and.w r3, r3, #15
  21071. 800907e: 4a0d ldr r2, [pc, #52] @ (80090b4 <HAL_RCC_ClockConfig+0x35c>)
  21072. 8009080: 5cd3 ldrb r3, [r2, r3]
  21073. 8009082: f003 031f and.w r3, r3, #31
  21074. 8009086: 693a ldr r2, [r7, #16]
  21075. 8009088: fa22 f303 lsr.w r3, r2, r3
  21076. 800908c: 4a0a ldr r2, [pc, #40] @ (80090b8 <HAL_RCC_ClockConfig+0x360>)
  21077. 800908e: 6013 str r3, [r2, #0]
  21078. #endif
  21079. #if defined(DUAL_CORE) && defined(CORE_CM4)
  21080. SystemCoreClock = SystemD2Clock;
  21081. #else
  21082. SystemCoreClock = common_system_clock;
  21083. 8009090: 4a0a ldr r2, [pc, #40] @ (80090bc <HAL_RCC_ClockConfig+0x364>)
  21084. 8009092: 693b ldr r3, [r7, #16]
  21085. 8009094: 6013 str r3, [r2, #0]
  21086. #endif /* DUAL_CORE && CORE_CM4 */
  21087. /* Configure the source of time base considering new system clocks settings*/
  21088. halstatus = HAL_InitTick(uwTickPrio);
  21089. 8009096: 4b0a ldr r3, [pc, #40] @ (80090c0 <HAL_RCC_ClockConfig+0x368>)
  21090. 8009098: 681b ldr r3, [r3, #0]
  21091. 800909a: 4618 mov r0, r3
  21092. 800909c: f7f9 fa4a bl 8002534 <HAL_InitTick>
  21093. 80090a0: 4603 mov r3, r0
  21094. 80090a2: 73fb strb r3, [r7, #15]
  21095. return halstatus;
  21096. 80090a4: 7bfb ldrb r3, [r7, #15]
  21097. }
  21098. 80090a6: 4618 mov r0, r3
  21099. 80090a8: 3718 adds r7, #24
  21100. 80090aa: 46bd mov sp, r7
  21101. 80090ac: bd80 pop {r7, pc}
  21102. 80090ae: bf00 nop
  21103. 80090b0: 58024400 .word 0x58024400
  21104. 80090b4: 080145e4 .word 0x080145e4
  21105. 80090b8: 24000038 .word 0x24000038
  21106. 80090bc: 24000034 .word 0x24000034
  21107. 80090c0: 2400003c .word 0x2400003c
  21108. 080090c4 <HAL_RCC_GetSysClockFreq>:
  21109. *
  21110. *
  21111. * @retval SYSCLK frequency
  21112. */
  21113. uint32_t HAL_RCC_GetSysClockFreq(void)
  21114. {
  21115. 80090c4: b480 push {r7}
  21116. 80090c6: b089 sub sp, #36 @ 0x24
  21117. 80090c8: af00 add r7, sp, #0
  21118. float_t fracn1, pllvco;
  21119. uint32_t sysclockfreq;
  21120. /* Get SYSCLK source -------------------------------------------------------*/
  21121. switch (RCC->CFGR & RCC_CFGR_SWS)
  21122. 80090ca: 4bb3 ldr r3, [pc, #716] @ (8009398 <HAL_RCC_GetSysClockFreq+0x2d4>)
  21123. 80090cc: 691b ldr r3, [r3, #16]
  21124. 80090ce: f003 0338 and.w r3, r3, #56 @ 0x38
  21125. 80090d2: 2b18 cmp r3, #24
  21126. 80090d4: f200 8155 bhi.w 8009382 <HAL_RCC_GetSysClockFreq+0x2be>
  21127. 80090d8: a201 add r2, pc, #4 @ (adr r2, 80090e0 <HAL_RCC_GetSysClockFreq+0x1c>)
  21128. 80090da: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  21129. 80090de: bf00 nop
  21130. 80090e0: 08009145 .word 0x08009145
  21131. 80090e4: 08009383 .word 0x08009383
  21132. 80090e8: 08009383 .word 0x08009383
  21133. 80090ec: 08009383 .word 0x08009383
  21134. 80090f0: 08009383 .word 0x08009383
  21135. 80090f4: 08009383 .word 0x08009383
  21136. 80090f8: 08009383 .word 0x08009383
  21137. 80090fc: 08009383 .word 0x08009383
  21138. 8009100: 0800916b .word 0x0800916b
  21139. 8009104: 08009383 .word 0x08009383
  21140. 8009108: 08009383 .word 0x08009383
  21141. 800910c: 08009383 .word 0x08009383
  21142. 8009110: 08009383 .word 0x08009383
  21143. 8009114: 08009383 .word 0x08009383
  21144. 8009118: 08009383 .word 0x08009383
  21145. 800911c: 08009383 .word 0x08009383
  21146. 8009120: 08009171 .word 0x08009171
  21147. 8009124: 08009383 .word 0x08009383
  21148. 8009128: 08009383 .word 0x08009383
  21149. 800912c: 08009383 .word 0x08009383
  21150. 8009130: 08009383 .word 0x08009383
  21151. 8009134: 08009383 .word 0x08009383
  21152. 8009138: 08009383 .word 0x08009383
  21153. 800913c: 08009383 .word 0x08009383
  21154. 8009140: 08009177 .word 0x08009177
  21155. {
  21156. case RCC_CFGR_SWS_HSI: /* HSI used as system clock source */
  21157. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  21158. 8009144: 4b94 ldr r3, [pc, #592] @ (8009398 <HAL_RCC_GetSysClockFreq+0x2d4>)
  21159. 8009146: 681b ldr r3, [r3, #0]
  21160. 8009148: f003 0320 and.w r3, r3, #32
  21161. 800914c: 2b00 cmp r3, #0
  21162. 800914e: d009 beq.n 8009164 <HAL_RCC_GetSysClockFreq+0xa0>
  21163. {
  21164. sysclockfreq = (uint32_t)(HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  21165. 8009150: 4b91 ldr r3, [pc, #580] @ (8009398 <HAL_RCC_GetSysClockFreq+0x2d4>)
  21166. 8009152: 681b ldr r3, [r3, #0]
  21167. 8009154: 08db lsrs r3, r3, #3
  21168. 8009156: f003 0303 and.w r3, r3, #3
  21169. 800915a: 4a90 ldr r2, [pc, #576] @ (800939c <HAL_RCC_GetSysClockFreq+0x2d8>)
  21170. 800915c: fa22 f303 lsr.w r3, r2, r3
  21171. 8009160: 61bb str r3, [r7, #24]
  21172. else
  21173. {
  21174. sysclockfreq = (uint32_t) HSI_VALUE;
  21175. }
  21176. break;
  21177. 8009162: e111 b.n 8009388 <HAL_RCC_GetSysClockFreq+0x2c4>
  21178. sysclockfreq = (uint32_t) HSI_VALUE;
  21179. 8009164: 4b8d ldr r3, [pc, #564] @ (800939c <HAL_RCC_GetSysClockFreq+0x2d8>)
  21180. 8009166: 61bb str r3, [r7, #24]
  21181. break;
  21182. 8009168: e10e b.n 8009388 <HAL_RCC_GetSysClockFreq+0x2c4>
  21183. case RCC_CFGR_SWS_CSI: /* CSI used as system clock source */
  21184. sysclockfreq = CSI_VALUE;
  21185. 800916a: 4b8d ldr r3, [pc, #564] @ (80093a0 <HAL_RCC_GetSysClockFreq+0x2dc>)
  21186. 800916c: 61bb str r3, [r7, #24]
  21187. break;
  21188. 800916e: e10b b.n 8009388 <HAL_RCC_GetSysClockFreq+0x2c4>
  21189. case RCC_CFGR_SWS_HSE: /* HSE used as system clock source */
  21190. sysclockfreq = HSE_VALUE;
  21191. 8009170: 4b8c ldr r3, [pc, #560] @ (80093a4 <HAL_RCC_GetSysClockFreq+0x2e0>)
  21192. 8009172: 61bb str r3, [r7, #24]
  21193. break;
  21194. 8009174: e108 b.n 8009388 <HAL_RCC_GetSysClockFreq+0x2c4>
  21195. case RCC_CFGR_SWS_PLL1: /* PLL1 used as system clock source */
  21196. /* PLL_VCO = (HSE_VALUE or HSI_VALUE or CSI_VALUE/ PLLM) * PLLN
  21197. SYSCLK = PLL_VCO / PLLR
  21198. */
  21199. pllsource = (RCC->PLLCKSELR & RCC_PLLCKSELR_PLLSRC);
  21200. 8009176: 4b88 ldr r3, [pc, #544] @ (8009398 <HAL_RCC_GetSysClockFreq+0x2d4>)
  21201. 8009178: 6a9b ldr r3, [r3, #40] @ 0x28
  21202. 800917a: f003 0303 and.w r3, r3, #3
  21203. 800917e: 617b str r3, [r7, #20]
  21204. pllm = ((RCC->PLLCKSELR & RCC_PLLCKSELR_DIVM1) >> 4) ;
  21205. 8009180: 4b85 ldr r3, [pc, #532] @ (8009398 <HAL_RCC_GetSysClockFreq+0x2d4>)
  21206. 8009182: 6a9b ldr r3, [r3, #40] @ 0x28
  21207. 8009184: 091b lsrs r3, r3, #4
  21208. 8009186: f003 033f and.w r3, r3, #63 @ 0x3f
  21209. 800918a: 613b str r3, [r7, #16]
  21210. pllfracen = ((RCC-> PLLCFGR & RCC_PLLCFGR_PLL1FRACEN) >> RCC_PLLCFGR_PLL1FRACEN_Pos);
  21211. 800918c: 4b82 ldr r3, [pc, #520] @ (8009398 <HAL_RCC_GetSysClockFreq+0x2d4>)
  21212. 800918e: 6adb ldr r3, [r3, #44] @ 0x2c
  21213. 8009190: f003 0301 and.w r3, r3, #1
  21214. 8009194: 60fb str r3, [r7, #12]
  21215. fracn1 = (float_t)(uint32_t)(pllfracen * ((RCC->PLL1FRACR & RCC_PLL1FRACR_FRACN1) >> 3));
  21216. 8009196: 4b80 ldr r3, [pc, #512] @ (8009398 <HAL_RCC_GetSysClockFreq+0x2d4>)
  21217. 8009198: 6b5b ldr r3, [r3, #52] @ 0x34
  21218. 800919a: 08db lsrs r3, r3, #3
  21219. 800919c: f3c3 030c ubfx r3, r3, #0, #13
  21220. 80091a0: 68fa ldr r2, [r7, #12]
  21221. 80091a2: fb02 f303 mul.w r3, r2, r3
  21222. 80091a6: ee07 3a90 vmov s15, r3
  21223. 80091aa: eef8 7a67 vcvt.f32.u32 s15, s15
  21224. 80091ae: edc7 7a02 vstr s15, [r7, #8]
  21225. if (pllm != 0U)
  21226. 80091b2: 693b ldr r3, [r7, #16]
  21227. 80091b4: 2b00 cmp r3, #0
  21228. 80091b6: f000 80e1 beq.w 800937c <HAL_RCC_GetSysClockFreq+0x2b8>
  21229. 80091ba: 697b ldr r3, [r7, #20]
  21230. 80091bc: 2b02 cmp r3, #2
  21231. 80091be: f000 8083 beq.w 80092c8 <HAL_RCC_GetSysClockFreq+0x204>
  21232. 80091c2: 697b ldr r3, [r7, #20]
  21233. 80091c4: 2b02 cmp r3, #2
  21234. 80091c6: f200 80a1 bhi.w 800930c <HAL_RCC_GetSysClockFreq+0x248>
  21235. 80091ca: 697b ldr r3, [r7, #20]
  21236. 80091cc: 2b00 cmp r3, #0
  21237. 80091ce: d003 beq.n 80091d8 <HAL_RCC_GetSysClockFreq+0x114>
  21238. 80091d0: 697b ldr r3, [r7, #20]
  21239. 80091d2: 2b01 cmp r3, #1
  21240. 80091d4: d056 beq.n 8009284 <HAL_RCC_GetSysClockFreq+0x1c0>
  21241. 80091d6: e099 b.n 800930c <HAL_RCC_GetSysClockFreq+0x248>
  21242. {
  21243. switch (pllsource)
  21244. {
  21245. case RCC_PLLSOURCE_HSI: /* HSI used as PLL clock source */
  21246. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  21247. 80091d8: 4b6f ldr r3, [pc, #444] @ (8009398 <HAL_RCC_GetSysClockFreq+0x2d4>)
  21248. 80091da: 681b ldr r3, [r3, #0]
  21249. 80091dc: f003 0320 and.w r3, r3, #32
  21250. 80091e0: 2b00 cmp r3, #0
  21251. 80091e2: d02d beq.n 8009240 <HAL_RCC_GetSysClockFreq+0x17c>
  21252. {
  21253. hsivalue = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  21254. 80091e4: 4b6c ldr r3, [pc, #432] @ (8009398 <HAL_RCC_GetSysClockFreq+0x2d4>)
  21255. 80091e6: 681b ldr r3, [r3, #0]
  21256. 80091e8: 08db lsrs r3, r3, #3
  21257. 80091ea: f003 0303 and.w r3, r3, #3
  21258. 80091ee: 4a6b ldr r2, [pc, #428] @ (800939c <HAL_RCC_GetSysClockFreq+0x2d8>)
  21259. 80091f0: fa22 f303 lsr.w r3, r2, r3
  21260. 80091f4: 607b str r3, [r7, #4]
  21261. pllvco = ((float_t)hsivalue / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  21262. 80091f6: 687b ldr r3, [r7, #4]
  21263. 80091f8: ee07 3a90 vmov s15, r3
  21264. 80091fc: eef8 6a67 vcvt.f32.u32 s13, s15
  21265. 8009200: 693b ldr r3, [r7, #16]
  21266. 8009202: ee07 3a90 vmov s15, r3
  21267. 8009206: eef8 7a67 vcvt.f32.u32 s15, s15
  21268. 800920a: ee86 7aa7 vdiv.f32 s14, s13, s15
  21269. 800920e: 4b62 ldr r3, [pc, #392] @ (8009398 <HAL_RCC_GetSysClockFreq+0x2d4>)
  21270. 8009210: 6b1b ldr r3, [r3, #48] @ 0x30
  21271. 8009212: f3c3 0308 ubfx r3, r3, #0, #9
  21272. 8009216: ee07 3a90 vmov s15, r3
  21273. 800921a: eef8 6a67 vcvt.f32.u32 s13, s15
  21274. 800921e: ed97 6a02 vldr s12, [r7, #8]
  21275. 8009222: eddf 5a61 vldr s11, [pc, #388] @ 80093a8 <HAL_RCC_GetSysClockFreq+0x2e4>
  21276. 8009226: eec6 7a25 vdiv.f32 s15, s12, s11
  21277. 800922a: ee76 7aa7 vadd.f32 s15, s13, s15
  21278. 800922e: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  21279. 8009232: ee77 7aa6 vadd.f32 s15, s15, s13
  21280. 8009236: ee67 7a27 vmul.f32 s15, s14, s15
  21281. 800923a: edc7 7a07 vstr s15, [r7, #28]
  21282. }
  21283. else
  21284. {
  21285. pllvco = ((float_t)HSI_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  21286. }
  21287. break;
  21288. 800923e: e087 b.n 8009350 <HAL_RCC_GetSysClockFreq+0x28c>
  21289. pllvco = ((float_t)HSI_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  21290. 8009240: 693b ldr r3, [r7, #16]
  21291. 8009242: ee07 3a90 vmov s15, r3
  21292. 8009246: eef8 7a67 vcvt.f32.u32 s15, s15
  21293. 800924a: eddf 6a58 vldr s13, [pc, #352] @ 80093ac <HAL_RCC_GetSysClockFreq+0x2e8>
  21294. 800924e: ee86 7aa7 vdiv.f32 s14, s13, s15
  21295. 8009252: 4b51 ldr r3, [pc, #324] @ (8009398 <HAL_RCC_GetSysClockFreq+0x2d4>)
  21296. 8009254: 6b1b ldr r3, [r3, #48] @ 0x30
  21297. 8009256: f3c3 0308 ubfx r3, r3, #0, #9
  21298. 800925a: ee07 3a90 vmov s15, r3
  21299. 800925e: eef8 6a67 vcvt.f32.u32 s13, s15
  21300. 8009262: ed97 6a02 vldr s12, [r7, #8]
  21301. 8009266: eddf 5a50 vldr s11, [pc, #320] @ 80093a8 <HAL_RCC_GetSysClockFreq+0x2e4>
  21302. 800926a: eec6 7a25 vdiv.f32 s15, s12, s11
  21303. 800926e: ee76 7aa7 vadd.f32 s15, s13, s15
  21304. 8009272: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  21305. 8009276: ee77 7aa6 vadd.f32 s15, s15, s13
  21306. 800927a: ee67 7a27 vmul.f32 s15, s14, s15
  21307. 800927e: edc7 7a07 vstr s15, [r7, #28]
  21308. break;
  21309. 8009282: e065 b.n 8009350 <HAL_RCC_GetSysClockFreq+0x28c>
  21310. case RCC_PLLSOURCE_CSI: /* CSI used as PLL clock source */
  21311. pllvco = ((float_t)CSI_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  21312. 8009284: 693b ldr r3, [r7, #16]
  21313. 8009286: ee07 3a90 vmov s15, r3
  21314. 800928a: eef8 7a67 vcvt.f32.u32 s15, s15
  21315. 800928e: eddf 6a48 vldr s13, [pc, #288] @ 80093b0 <HAL_RCC_GetSysClockFreq+0x2ec>
  21316. 8009292: ee86 7aa7 vdiv.f32 s14, s13, s15
  21317. 8009296: 4b40 ldr r3, [pc, #256] @ (8009398 <HAL_RCC_GetSysClockFreq+0x2d4>)
  21318. 8009298: 6b1b ldr r3, [r3, #48] @ 0x30
  21319. 800929a: f3c3 0308 ubfx r3, r3, #0, #9
  21320. 800929e: ee07 3a90 vmov s15, r3
  21321. 80092a2: eef8 6a67 vcvt.f32.u32 s13, s15
  21322. 80092a6: ed97 6a02 vldr s12, [r7, #8]
  21323. 80092aa: eddf 5a3f vldr s11, [pc, #252] @ 80093a8 <HAL_RCC_GetSysClockFreq+0x2e4>
  21324. 80092ae: eec6 7a25 vdiv.f32 s15, s12, s11
  21325. 80092b2: ee76 7aa7 vadd.f32 s15, s13, s15
  21326. 80092b6: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  21327. 80092ba: ee77 7aa6 vadd.f32 s15, s15, s13
  21328. 80092be: ee67 7a27 vmul.f32 s15, s14, s15
  21329. 80092c2: edc7 7a07 vstr s15, [r7, #28]
  21330. break;
  21331. 80092c6: e043 b.n 8009350 <HAL_RCC_GetSysClockFreq+0x28c>
  21332. case RCC_PLLSOURCE_HSE: /* HSE used as PLL clock source */
  21333. pllvco = ((float_t)HSE_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  21334. 80092c8: 693b ldr r3, [r7, #16]
  21335. 80092ca: ee07 3a90 vmov s15, r3
  21336. 80092ce: eef8 7a67 vcvt.f32.u32 s15, s15
  21337. 80092d2: eddf 6a38 vldr s13, [pc, #224] @ 80093b4 <HAL_RCC_GetSysClockFreq+0x2f0>
  21338. 80092d6: ee86 7aa7 vdiv.f32 s14, s13, s15
  21339. 80092da: 4b2f ldr r3, [pc, #188] @ (8009398 <HAL_RCC_GetSysClockFreq+0x2d4>)
  21340. 80092dc: 6b1b ldr r3, [r3, #48] @ 0x30
  21341. 80092de: f3c3 0308 ubfx r3, r3, #0, #9
  21342. 80092e2: ee07 3a90 vmov s15, r3
  21343. 80092e6: eef8 6a67 vcvt.f32.u32 s13, s15
  21344. 80092ea: ed97 6a02 vldr s12, [r7, #8]
  21345. 80092ee: eddf 5a2e vldr s11, [pc, #184] @ 80093a8 <HAL_RCC_GetSysClockFreq+0x2e4>
  21346. 80092f2: eec6 7a25 vdiv.f32 s15, s12, s11
  21347. 80092f6: ee76 7aa7 vadd.f32 s15, s13, s15
  21348. 80092fa: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  21349. 80092fe: ee77 7aa6 vadd.f32 s15, s15, s13
  21350. 8009302: ee67 7a27 vmul.f32 s15, s14, s15
  21351. 8009306: edc7 7a07 vstr s15, [r7, #28]
  21352. break;
  21353. 800930a: e021 b.n 8009350 <HAL_RCC_GetSysClockFreq+0x28c>
  21354. default:
  21355. pllvco = ((float_t)CSI_VALUE / (float_t)pllm) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  21356. 800930c: 693b ldr r3, [r7, #16]
  21357. 800930e: ee07 3a90 vmov s15, r3
  21358. 8009312: eef8 7a67 vcvt.f32.u32 s15, s15
  21359. 8009316: eddf 6a26 vldr s13, [pc, #152] @ 80093b0 <HAL_RCC_GetSysClockFreq+0x2ec>
  21360. 800931a: ee86 7aa7 vdiv.f32 s14, s13, s15
  21361. 800931e: 4b1e ldr r3, [pc, #120] @ (8009398 <HAL_RCC_GetSysClockFreq+0x2d4>)
  21362. 8009320: 6b1b ldr r3, [r3, #48] @ 0x30
  21363. 8009322: f3c3 0308 ubfx r3, r3, #0, #9
  21364. 8009326: ee07 3a90 vmov s15, r3
  21365. 800932a: eef8 6a67 vcvt.f32.u32 s13, s15
  21366. 800932e: ed97 6a02 vldr s12, [r7, #8]
  21367. 8009332: eddf 5a1d vldr s11, [pc, #116] @ 80093a8 <HAL_RCC_GetSysClockFreq+0x2e4>
  21368. 8009336: eec6 7a25 vdiv.f32 s15, s12, s11
  21369. 800933a: ee76 7aa7 vadd.f32 s15, s13, s15
  21370. 800933e: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  21371. 8009342: ee77 7aa6 vadd.f32 s15, s15, s13
  21372. 8009346: ee67 7a27 vmul.f32 s15, s14, s15
  21373. 800934a: edc7 7a07 vstr s15, [r7, #28]
  21374. break;
  21375. 800934e: bf00 nop
  21376. }
  21377. pllp = (((RCC->PLL1DIVR & RCC_PLL1DIVR_P1) >> 9) + 1U) ;
  21378. 8009350: 4b11 ldr r3, [pc, #68] @ (8009398 <HAL_RCC_GetSysClockFreq+0x2d4>)
  21379. 8009352: 6b1b ldr r3, [r3, #48] @ 0x30
  21380. 8009354: 0a5b lsrs r3, r3, #9
  21381. 8009356: f003 037f and.w r3, r3, #127 @ 0x7f
  21382. 800935a: 3301 adds r3, #1
  21383. 800935c: 603b str r3, [r7, #0]
  21384. sysclockfreq = (uint32_t)(float_t)(pllvco / (float_t)pllp);
  21385. 800935e: 683b ldr r3, [r7, #0]
  21386. 8009360: ee07 3a90 vmov s15, r3
  21387. 8009364: eeb8 7a67 vcvt.f32.u32 s14, s15
  21388. 8009368: edd7 6a07 vldr s13, [r7, #28]
  21389. 800936c: eec6 7a87 vdiv.f32 s15, s13, s14
  21390. 8009370: eefc 7ae7 vcvt.u32.f32 s15, s15
  21391. 8009374: ee17 3a90 vmov r3, s15
  21392. 8009378: 61bb str r3, [r7, #24]
  21393. }
  21394. else
  21395. {
  21396. sysclockfreq = 0U;
  21397. }
  21398. break;
  21399. 800937a: e005 b.n 8009388 <HAL_RCC_GetSysClockFreq+0x2c4>
  21400. sysclockfreq = 0U;
  21401. 800937c: 2300 movs r3, #0
  21402. 800937e: 61bb str r3, [r7, #24]
  21403. break;
  21404. 8009380: e002 b.n 8009388 <HAL_RCC_GetSysClockFreq+0x2c4>
  21405. default:
  21406. sysclockfreq = CSI_VALUE;
  21407. 8009382: 4b07 ldr r3, [pc, #28] @ (80093a0 <HAL_RCC_GetSysClockFreq+0x2dc>)
  21408. 8009384: 61bb str r3, [r7, #24]
  21409. break;
  21410. 8009386: bf00 nop
  21411. }
  21412. return sysclockfreq;
  21413. 8009388: 69bb ldr r3, [r7, #24]
  21414. }
  21415. 800938a: 4618 mov r0, r3
  21416. 800938c: 3724 adds r7, #36 @ 0x24
  21417. 800938e: 46bd mov sp, r7
  21418. 8009390: f85d 7b04 ldr.w r7, [sp], #4
  21419. 8009394: 4770 bx lr
  21420. 8009396: bf00 nop
  21421. 8009398: 58024400 .word 0x58024400
  21422. 800939c: 03d09000 .word 0x03d09000
  21423. 80093a0: 003d0900 .word 0x003d0900
  21424. 80093a4: 017d7840 .word 0x017d7840
  21425. 80093a8: 46000000 .word 0x46000000
  21426. 80093ac: 4c742400 .word 0x4c742400
  21427. 80093b0: 4a742400 .word 0x4a742400
  21428. 80093b4: 4bbebc20 .word 0x4bbebc20
  21429. 080093b8 <HAL_RCC_GetHCLKFreq>:
  21430. * @note The SystemD2Clock CMSIS variable is used to store System domain2 Clock Frequency
  21431. * and updated within this function
  21432. * @retval HCLK frequency
  21433. */
  21434. uint32_t HAL_RCC_GetHCLKFreq(void)
  21435. {
  21436. 80093b8: b580 push {r7, lr}
  21437. 80093ba: b082 sub sp, #8
  21438. 80093bc: af00 add r7, sp, #0
  21439. uint32_t common_system_clock;
  21440. #if defined(RCC_D1CFGR_D1CPRE)
  21441. common_system_clock = HAL_RCC_GetSysClockFreq() >> (D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_D1CPRE) >> RCC_D1CFGR_D1CPRE_Pos] & 0x1FU);
  21442. 80093be: f7ff fe81 bl 80090c4 <HAL_RCC_GetSysClockFreq>
  21443. 80093c2: 4602 mov r2, r0
  21444. 80093c4: 4b10 ldr r3, [pc, #64] @ (8009408 <HAL_RCC_GetHCLKFreq+0x50>)
  21445. 80093c6: 699b ldr r3, [r3, #24]
  21446. 80093c8: 0a1b lsrs r3, r3, #8
  21447. 80093ca: f003 030f and.w r3, r3, #15
  21448. 80093ce: 490f ldr r1, [pc, #60] @ (800940c <HAL_RCC_GetHCLKFreq+0x54>)
  21449. 80093d0: 5ccb ldrb r3, [r1, r3]
  21450. 80093d2: f003 031f and.w r3, r3, #31
  21451. 80093d6: fa22 f303 lsr.w r3, r2, r3
  21452. 80093da: 607b str r3, [r7, #4]
  21453. #else
  21454. common_system_clock = HAL_RCC_GetSysClockFreq() >> (D1CorePrescTable[(RCC->CDCFGR1 & RCC_CDCFGR1_CDCPRE) >> RCC_CDCFGR1_CDCPRE_Pos] & 0x1FU);
  21455. #endif
  21456. #if defined(RCC_D1CFGR_HPRE)
  21457. SystemD2Clock = (common_system_clock >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_HPRE) >> RCC_D1CFGR_HPRE_Pos]) & 0x1FU));
  21458. 80093dc: 4b0a ldr r3, [pc, #40] @ (8009408 <HAL_RCC_GetHCLKFreq+0x50>)
  21459. 80093de: 699b ldr r3, [r3, #24]
  21460. 80093e0: f003 030f and.w r3, r3, #15
  21461. 80093e4: 4a09 ldr r2, [pc, #36] @ (800940c <HAL_RCC_GetHCLKFreq+0x54>)
  21462. 80093e6: 5cd3 ldrb r3, [r2, r3]
  21463. 80093e8: f003 031f and.w r3, r3, #31
  21464. 80093ec: 687a ldr r2, [r7, #4]
  21465. 80093ee: fa22 f303 lsr.w r3, r2, r3
  21466. 80093f2: 4a07 ldr r2, [pc, #28] @ (8009410 <HAL_RCC_GetHCLKFreq+0x58>)
  21467. 80093f4: 6013 str r3, [r2, #0]
  21468. #endif
  21469. #if defined(DUAL_CORE) && defined(CORE_CM4)
  21470. SystemCoreClock = SystemD2Clock;
  21471. #else
  21472. SystemCoreClock = common_system_clock;
  21473. 80093f6: 4a07 ldr r2, [pc, #28] @ (8009414 <HAL_RCC_GetHCLKFreq+0x5c>)
  21474. 80093f8: 687b ldr r3, [r7, #4]
  21475. 80093fa: 6013 str r3, [r2, #0]
  21476. #endif /* DUAL_CORE && CORE_CM4 */
  21477. return SystemD2Clock;
  21478. 80093fc: 4b04 ldr r3, [pc, #16] @ (8009410 <HAL_RCC_GetHCLKFreq+0x58>)
  21479. 80093fe: 681b ldr r3, [r3, #0]
  21480. }
  21481. 8009400: 4618 mov r0, r3
  21482. 8009402: 3708 adds r7, #8
  21483. 8009404: 46bd mov sp, r7
  21484. 8009406: bd80 pop {r7, pc}
  21485. 8009408: 58024400 .word 0x58024400
  21486. 800940c: 080145e4 .word 0x080145e4
  21487. 8009410: 24000038 .word 0x24000038
  21488. 8009414: 24000034 .word 0x24000034
  21489. 08009418 <HAL_RCC_GetPCLK1Freq>:
  21490. * @note Each time PCLK1 changes, this function must be called to update the
  21491. * right PCLK1 value. Otherwise, any configuration based on this function will be incorrect.
  21492. * @retval PCLK1 frequency
  21493. */
  21494. uint32_t HAL_RCC_GetPCLK1Freq(void)
  21495. {
  21496. 8009418: b580 push {r7, lr}
  21497. 800941a: af00 add r7, sp, #0
  21498. #if defined (RCC_D2CFGR_D2PPRE1)
  21499. /* Get HCLK source and Compute PCLK1 frequency ---------------------------*/
  21500. return (HAL_RCC_GetHCLKFreq() >> ((D1CorePrescTable[(RCC->D2CFGR & RCC_D2CFGR_D2PPRE1) >> RCC_D2CFGR_D2PPRE1_Pos]) & 0x1FU));
  21501. 800941c: f7ff ffcc bl 80093b8 <HAL_RCC_GetHCLKFreq>
  21502. 8009420: 4602 mov r2, r0
  21503. 8009422: 4b06 ldr r3, [pc, #24] @ (800943c <HAL_RCC_GetPCLK1Freq+0x24>)
  21504. 8009424: 69db ldr r3, [r3, #28]
  21505. 8009426: 091b lsrs r3, r3, #4
  21506. 8009428: f003 0307 and.w r3, r3, #7
  21507. 800942c: 4904 ldr r1, [pc, #16] @ (8009440 <HAL_RCC_GetPCLK1Freq+0x28>)
  21508. 800942e: 5ccb ldrb r3, [r1, r3]
  21509. 8009430: f003 031f and.w r3, r3, #31
  21510. 8009434: fa22 f303 lsr.w r3, r2, r3
  21511. #else
  21512. /* Get HCLK source and Compute PCLK1 frequency ---------------------------*/
  21513. return (HAL_RCC_GetHCLKFreq() >> ((D1CorePrescTable[(RCC->CDCFGR2 & RCC_CDCFGR2_CDPPRE1) >> RCC_CDCFGR2_CDPPRE1_Pos]) & 0x1FU));
  21514. #endif
  21515. }
  21516. 8009438: 4618 mov r0, r3
  21517. 800943a: bd80 pop {r7, pc}
  21518. 800943c: 58024400 .word 0x58024400
  21519. 8009440: 080145e4 .word 0x080145e4
  21520. 08009444 <HAL_RCC_GetPCLK2Freq>:
  21521. * @note Each time PCLK2 changes, this function must be called to update the
  21522. * right PCLK2 value. Otherwise, any configuration based on this function will be incorrect.
  21523. * @retval PCLK1 frequency
  21524. */
  21525. uint32_t HAL_RCC_GetPCLK2Freq(void)
  21526. {
  21527. 8009444: b580 push {r7, lr}
  21528. 8009446: af00 add r7, sp, #0
  21529. /* Get HCLK source and Compute PCLK1 frequency ---------------------------*/
  21530. #if defined(RCC_D2CFGR_D2PPRE2)
  21531. return (HAL_RCC_GetHCLKFreq() >> ((D1CorePrescTable[(RCC->D2CFGR & RCC_D2CFGR_D2PPRE2) >> RCC_D2CFGR_D2PPRE2_Pos]) & 0x1FU));
  21532. 8009448: f7ff ffb6 bl 80093b8 <HAL_RCC_GetHCLKFreq>
  21533. 800944c: 4602 mov r2, r0
  21534. 800944e: 4b06 ldr r3, [pc, #24] @ (8009468 <HAL_RCC_GetPCLK2Freq+0x24>)
  21535. 8009450: 69db ldr r3, [r3, #28]
  21536. 8009452: 0a1b lsrs r3, r3, #8
  21537. 8009454: f003 0307 and.w r3, r3, #7
  21538. 8009458: 4904 ldr r1, [pc, #16] @ (800946c <HAL_RCC_GetPCLK2Freq+0x28>)
  21539. 800945a: 5ccb ldrb r3, [r1, r3]
  21540. 800945c: f003 031f and.w r3, r3, #31
  21541. 8009460: fa22 f303 lsr.w r3, r2, r3
  21542. #else
  21543. return (HAL_RCC_GetHCLKFreq() >> ((D1CorePrescTable[(RCC->CDCFGR2 & RCC_CDCFGR2_CDPPRE2) >> RCC_CDCFGR2_CDPPRE2_Pos]) & 0x1FU));
  21544. #endif
  21545. }
  21546. 8009464: 4618 mov r0, r3
  21547. 8009466: bd80 pop {r7, pc}
  21548. 8009468: 58024400 .word 0x58024400
  21549. 800946c: 080145e4 .word 0x080145e4
  21550. 08009470 <HAL_RCC_GetClockConfig>:
  21551. * will be configured.
  21552. * @param pFLatency: Pointer on the Flash Latency.
  21553. * @retval None
  21554. */
  21555. void HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t *pFLatency)
  21556. {
  21557. 8009470: b480 push {r7}
  21558. 8009472: b083 sub sp, #12
  21559. 8009474: af00 add r7, sp, #0
  21560. 8009476: 6078 str r0, [r7, #4]
  21561. 8009478: 6039 str r1, [r7, #0]
  21562. /* Set all possible values for the Clock type parameter --------------------*/
  21563. RCC_ClkInitStruct->ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_D1PCLK1 | RCC_CLOCKTYPE_PCLK1 |
  21564. 800947a: 687b ldr r3, [r7, #4]
  21565. 800947c: 223f movs r2, #63 @ 0x3f
  21566. 800947e: 601a str r2, [r3, #0]
  21567. RCC_CLOCKTYPE_PCLK2 | RCC_CLOCKTYPE_D3PCLK1 ;
  21568. /* Get the SYSCLK configuration --------------------------------------------*/
  21569. RCC_ClkInitStruct->SYSCLKSource = (uint32_t)(RCC->CFGR & RCC_CFGR_SW);
  21570. 8009480: 4b1a ldr r3, [pc, #104] @ (80094ec <HAL_RCC_GetClockConfig+0x7c>)
  21571. 8009482: 691b ldr r3, [r3, #16]
  21572. 8009484: f003 0207 and.w r2, r3, #7
  21573. 8009488: 687b ldr r3, [r7, #4]
  21574. 800948a: 605a str r2, [r3, #4]
  21575. #if defined(RCC_D1CFGR_D1CPRE)
  21576. /* Get the SYSCLK configuration ----------------------------------------------*/
  21577. RCC_ClkInitStruct->SYSCLKDivider = (uint32_t)(RCC->D1CFGR & RCC_D1CFGR_D1CPRE);
  21578. 800948c: 4b17 ldr r3, [pc, #92] @ (80094ec <HAL_RCC_GetClockConfig+0x7c>)
  21579. 800948e: 699b ldr r3, [r3, #24]
  21580. 8009490: f403 6270 and.w r2, r3, #3840 @ 0xf00
  21581. 8009494: 687b ldr r3, [r7, #4]
  21582. 8009496: 609a str r2, [r3, #8]
  21583. /* Get the D1HCLK configuration ----------------------------------------------*/
  21584. RCC_ClkInitStruct->AHBCLKDivider = (uint32_t)(RCC->D1CFGR & RCC_D1CFGR_HPRE);
  21585. 8009498: 4b14 ldr r3, [pc, #80] @ (80094ec <HAL_RCC_GetClockConfig+0x7c>)
  21586. 800949a: 699b ldr r3, [r3, #24]
  21587. 800949c: f003 020f and.w r2, r3, #15
  21588. 80094a0: 687b ldr r3, [r7, #4]
  21589. 80094a2: 60da str r2, [r3, #12]
  21590. /* Get the APB3 configuration ----------------------------------------------*/
  21591. RCC_ClkInitStruct->APB3CLKDivider = (uint32_t)(RCC->D1CFGR & RCC_D1CFGR_D1PPRE);
  21592. 80094a4: 4b11 ldr r3, [pc, #68] @ (80094ec <HAL_RCC_GetClockConfig+0x7c>)
  21593. 80094a6: 699b ldr r3, [r3, #24]
  21594. 80094a8: f003 0270 and.w r2, r3, #112 @ 0x70
  21595. 80094ac: 687b ldr r3, [r7, #4]
  21596. 80094ae: 611a str r2, [r3, #16]
  21597. /* Get the APB1 configuration ----------------------------------------------*/
  21598. RCC_ClkInitStruct->APB1CLKDivider = (uint32_t)(RCC->D2CFGR & RCC_D2CFGR_D2PPRE1);
  21599. 80094b0: 4b0e ldr r3, [pc, #56] @ (80094ec <HAL_RCC_GetClockConfig+0x7c>)
  21600. 80094b2: 69db ldr r3, [r3, #28]
  21601. 80094b4: f003 0270 and.w r2, r3, #112 @ 0x70
  21602. 80094b8: 687b ldr r3, [r7, #4]
  21603. 80094ba: 615a str r2, [r3, #20]
  21604. /* Get the APB2 configuration ----------------------------------------------*/
  21605. RCC_ClkInitStruct->APB2CLKDivider = (uint32_t)(RCC->D2CFGR & RCC_D2CFGR_D2PPRE2);
  21606. 80094bc: 4b0b ldr r3, [pc, #44] @ (80094ec <HAL_RCC_GetClockConfig+0x7c>)
  21607. 80094be: 69db ldr r3, [r3, #28]
  21608. 80094c0: f403 62e0 and.w r2, r3, #1792 @ 0x700
  21609. 80094c4: 687b ldr r3, [r7, #4]
  21610. 80094c6: 619a str r2, [r3, #24]
  21611. /* Get the APB4 configuration ----------------------------------------------*/
  21612. RCC_ClkInitStruct->APB4CLKDivider = (uint32_t)(RCC->D3CFGR & RCC_D3CFGR_D3PPRE);
  21613. 80094c8: 4b08 ldr r3, [pc, #32] @ (80094ec <HAL_RCC_GetClockConfig+0x7c>)
  21614. 80094ca: 6a1b ldr r3, [r3, #32]
  21615. 80094cc: f003 0270 and.w r2, r3, #112 @ 0x70
  21616. 80094d0: 687b ldr r3, [r7, #4]
  21617. 80094d2: 61da str r2, [r3, #28]
  21618. /* Get the APB4 configuration ----------------------------------------------*/
  21619. RCC_ClkInitStruct->APB4CLKDivider = (uint32_t)(RCC->SRDCFGR & RCC_SRDCFGR_SRDPPRE);
  21620. #endif
  21621. /* Get the Flash Wait State (Latency) configuration ------------------------*/
  21622. *pFLatency = (uint32_t)(FLASH->ACR & FLASH_ACR_LATENCY);
  21623. 80094d4: 4b06 ldr r3, [pc, #24] @ (80094f0 <HAL_RCC_GetClockConfig+0x80>)
  21624. 80094d6: 681b ldr r3, [r3, #0]
  21625. 80094d8: f003 020f and.w r2, r3, #15
  21626. 80094dc: 683b ldr r3, [r7, #0]
  21627. 80094de: 601a str r2, [r3, #0]
  21628. }
  21629. 80094e0: bf00 nop
  21630. 80094e2: 370c adds r7, #12
  21631. 80094e4: 46bd mov sp, r7
  21632. 80094e6: f85d 7b04 ldr.w r7, [sp], #4
  21633. 80094ea: 4770 bx lr
  21634. 80094ec: 58024400 .word 0x58024400
  21635. 80094f0: 52002000 .word 0x52002000
  21636. 080094f4 <HAL_RCCEx_PeriphCLKConfig>:
  21637. * (*) : Available on some STM32H7 lines only.
  21638. *
  21639. * @retval HAL status
  21640. */
  21641. HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit)
  21642. {
  21643. 80094f4: e92d 4fb0 stmdb sp!, {r4, r5, r7, r8, r9, sl, fp, lr}
  21644. 80094f8: b0c8 sub sp, #288 @ 0x120
  21645. 80094fa: af00 add r7, sp, #0
  21646. 80094fc: f8c7 010c str.w r0, [r7, #268] @ 0x10c
  21647. uint32_t tmpreg;
  21648. uint32_t tickstart;
  21649. HAL_StatusTypeDef ret = HAL_OK; /* Intermediate status */
  21650. 8009500: 2300 movs r3, #0
  21651. 8009502: f887 311f strb.w r3, [r7, #287] @ 0x11f
  21652. HAL_StatusTypeDef status = HAL_OK; /* Final status */
  21653. 8009506: 2300 movs r3, #0
  21654. 8009508: f887 311e strb.w r3, [r7, #286] @ 0x11e
  21655. /*---------------------------- SPDIFRX configuration -------------------------------*/
  21656. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SPDIFRX) == RCC_PERIPHCLK_SPDIFRX)
  21657. 800950c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  21658. 8009510: e9d3 2300 ldrd r2, r3, [r3]
  21659. 8009514: f002 6400 and.w r4, r2, #134217728 @ 0x8000000
  21660. 8009518: 2500 movs r5, #0
  21661. 800951a: ea54 0305 orrs.w r3, r4, r5
  21662. 800951e: d049 beq.n 80095b4 <HAL_RCCEx_PeriphCLKConfig+0xc0>
  21663. {
  21664. switch (PeriphClkInit->SpdifrxClockSelection)
  21665. 8009520: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  21666. 8009524: 6e9b ldr r3, [r3, #104] @ 0x68
  21667. 8009526: f5b3 1f40 cmp.w r3, #3145728 @ 0x300000
  21668. 800952a: d02f beq.n 800958c <HAL_RCCEx_PeriphCLKConfig+0x98>
  21669. 800952c: f5b3 1f40 cmp.w r3, #3145728 @ 0x300000
  21670. 8009530: d828 bhi.n 8009584 <HAL_RCCEx_PeriphCLKConfig+0x90>
  21671. 8009532: f5b3 1f00 cmp.w r3, #2097152 @ 0x200000
  21672. 8009536: d01a beq.n 800956e <HAL_RCCEx_PeriphCLKConfig+0x7a>
  21673. 8009538: f5b3 1f00 cmp.w r3, #2097152 @ 0x200000
  21674. 800953c: d822 bhi.n 8009584 <HAL_RCCEx_PeriphCLKConfig+0x90>
  21675. 800953e: 2b00 cmp r3, #0
  21676. 8009540: d003 beq.n 800954a <HAL_RCCEx_PeriphCLKConfig+0x56>
  21677. 8009542: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
  21678. 8009546: d007 beq.n 8009558 <HAL_RCCEx_PeriphCLKConfig+0x64>
  21679. 8009548: e01c b.n 8009584 <HAL_RCCEx_PeriphCLKConfig+0x90>
  21680. {
  21681. case RCC_SPDIFRXCLKSOURCE_PLL: /* PLL is used as clock source for SPDIFRX*/
  21682. /* Enable PLL1Q Clock output generated form System PLL . */
  21683. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  21684. 800954a: 4bb8 ldr r3, [pc, #736] @ (800982c <HAL_RCCEx_PeriphCLKConfig+0x338>)
  21685. 800954c: 6adb ldr r3, [r3, #44] @ 0x2c
  21686. 800954e: 4ab7 ldr r2, [pc, #732] @ (800982c <HAL_RCCEx_PeriphCLKConfig+0x338>)
  21687. 8009550: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  21688. 8009554: 62d3 str r3, [r2, #44] @ 0x2c
  21689. /* SPDIFRX clock source configuration done later after clock selection check */
  21690. break;
  21691. 8009556: e01a b.n 800958e <HAL_RCCEx_PeriphCLKConfig+0x9a>
  21692. case RCC_SPDIFRXCLKSOURCE_PLL2: /* PLL2 is used as clock source for SPDIFRX*/
  21693. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_R_UPDATE);
  21694. 8009558: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  21695. 800955c: 3308 adds r3, #8
  21696. 800955e: 2102 movs r1, #2
  21697. 8009560: 4618 mov r0, r3
  21698. 8009562: f002 fb45 bl 800bbf0 <RCCEx_PLL2_Config>
  21699. 8009566: 4603 mov r3, r0
  21700. 8009568: f887 311f strb.w r3, [r7, #287] @ 0x11f
  21701. /* SPDIFRX clock source configuration done later after clock selection check */
  21702. break;
  21703. 800956c: e00f b.n 800958e <HAL_RCCEx_PeriphCLKConfig+0x9a>
  21704. case RCC_SPDIFRXCLKSOURCE_PLL3: /* PLL3 is used as clock source for SPDIFRX*/
  21705. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE);
  21706. 800956e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  21707. 8009572: 3328 adds r3, #40 @ 0x28
  21708. 8009574: 2102 movs r1, #2
  21709. 8009576: 4618 mov r0, r3
  21710. 8009578: f002 fbec bl 800bd54 <RCCEx_PLL3_Config>
  21711. 800957c: 4603 mov r3, r0
  21712. 800957e: f887 311f strb.w r3, [r7, #287] @ 0x11f
  21713. /* SPDIFRX clock source configuration done later after clock selection check */
  21714. break;
  21715. 8009582: e004 b.n 800958e <HAL_RCCEx_PeriphCLKConfig+0x9a>
  21716. /* Internal OSC clock is used as source of SPDIFRX clock*/
  21717. /* SPDIFRX clock source configuration done later after clock selection check */
  21718. break;
  21719. default:
  21720. ret = HAL_ERROR;
  21721. 8009584: 2301 movs r3, #1
  21722. 8009586: f887 311f strb.w r3, [r7, #287] @ 0x11f
  21723. break;
  21724. 800958a: e000 b.n 800958e <HAL_RCCEx_PeriphCLKConfig+0x9a>
  21725. break;
  21726. 800958c: bf00 nop
  21727. }
  21728. if (ret == HAL_OK)
  21729. 800958e: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  21730. 8009592: 2b00 cmp r3, #0
  21731. 8009594: d10a bne.n 80095ac <HAL_RCCEx_PeriphCLKConfig+0xb8>
  21732. {
  21733. /* Set the source of SPDIFRX clock*/
  21734. __HAL_RCC_SPDIFRX_CONFIG(PeriphClkInit->SpdifrxClockSelection);
  21735. 8009596: 4ba5 ldr r3, [pc, #660] @ (800982c <HAL_RCCEx_PeriphCLKConfig+0x338>)
  21736. 8009598: 6d1b ldr r3, [r3, #80] @ 0x50
  21737. 800959a: f423 1140 bic.w r1, r3, #3145728 @ 0x300000
  21738. 800959e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  21739. 80095a2: 6e9b ldr r3, [r3, #104] @ 0x68
  21740. 80095a4: 4aa1 ldr r2, [pc, #644] @ (800982c <HAL_RCCEx_PeriphCLKConfig+0x338>)
  21741. 80095a6: 430b orrs r3, r1
  21742. 80095a8: 6513 str r3, [r2, #80] @ 0x50
  21743. 80095aa: e003 b.n 80095b4 <HAL_RCCEx_PeriphCLKConfig+0xc0>
  21744. }
  21745. else
  21746. {
  21747. /* set overall return value */
  21748. status = ret;
  21749. 80095ac: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  21750. 80095b0: f887 311e strb.w r3, [r7, #286] @ 0x11e
  21751. }
  21752. }
  21753. /*---------------------------- SAI1 configuration -------------------------------*/
  21754. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI1) == RCC_PERIPHCLK_SAI1)
  21755. 80095b4: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  21756. 80095b8: e9d3 2300 ldrd r2, r3, [r3]
  21757. 80095bc: f402 7880 and.w r8, r2, #256 @ 0x100
  21758. 80095c0: f04f 0900 mov.w r9, #0
  21759. 80095c4: ea58 0309 orrs.w r3, r8, r9
  21760. 80095c8: d047 beq.n 800965a <HAL_RCCEx_PeriphCLKConfig+0x166>
  21761. {
  21762. switch (PeriphClkInit->Sai1ClockSelection)
  21763. 80095ca: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  21764. 80095ce: 6d9b ldr r3, [r3, #88] @ 0x58
  21765. 80095d0: 2b04 cmp r3, #4
  21766. 80095d2: d82a bhi.n 800962a <HAL_RCCEx_PeriphCLKConfig+0x136>
  21767. 80095d4: a201 add r2, pc, #4 @ (adr r2, 80095dc <HAL_RCCEx_PeriphCLKConfig+0xe8>)
  21768. 80095d6: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  21769. 80095da: bf00 nop
  21770. 80095dc: 080095f1 .word 0x080095f1
  21771. 80095e0: 080095ff .word 0x080095ff
  21772. 80095e4: 08009615 .word 0x08009615
  21773. 80095e8: 08009633 .word 0x08009633
  21774. 80095ec: 08009633 .word 0x08009633
  21775. {
  21776. case RCC_SAI1CLKSOURCE_PLL: /* PLL is used as clock source for SAI1*/
  21777. /* Enable SAI Clock output generated form System PLL . */
  21778. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  21779. 80095f0: 4b8e ldr r3, [pc, #568] @ (800982c <HAL_RCCEx_PeriphCLKConfig+0x338>)
  21780. 80095f2: 6adb ldr r3, [r3, #44] @ 0x2c
  21781. 80095f4: 4a8d ldr r2, [pc, #564] @ (800982c <HAL_RCCEx_PeriphCLKConfig+0x338>)
  21782. 80095f6: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  21783. 80095fa: 62d3 str r3, [r2, #44] @ 0x2c
  21784. /* SAI1 clock source configuration done later after clock selection check */
  21785. break;
  21786. 80095fc: e01a b.n 8009634 <HAL_RCCEx_PeriphCLKConfig+0x140>
  21787. case RCC_SAI1CLKSOURCE_PLL2: /* PLL2 is used as clock source for SAI1*/
  21788. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  21789. 80095fe: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  21790. 8009602: 3308 adds r3, #8
  21791. 8009604: 2100 movs r1, #0
  21792. 8009606: 4618 mov r0, r3
  21793. 8009608: f002 faf2 bl 800bbf0 <RCCEx_PLL2_Config>
  21794. 800960c: 4603 mov r3, r0
  21795. 800960e: f887 311f strb.w r3, [r7, #287] @ 0x11f
  21796. /* SAI1 clock source configuration done later after clock selection check */
  21797. break;
  21798. 8009612: e00f b.n 8009634 <HAL_RCCEx_PeriphCLKConfig+0x140>
  21799. case RCC_SAI1CLKSOURCE_PLL3: /* PLL3 is used as clock source for SAI1*/
  21800. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
  21801. 8009614: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  21802. 8009618: 3328 adds r3, #40 @ 0x28
  21803. 800961a: 2100 movs r1, #0
  21804. 800961c: 4618 mov r0, r3
  21805. 800961e: f002 fb99 bl 800bd54 <RCCEx_PLL3_Config>
  21806. 8009622: 4603 mov r3, r0
  21807. 8009624: f887 311f strb.w r3, [r7, #287] @ 0x11f
  21808. /* SAI1 clock source configuration done later after clock selection check */
  21809. break;
  21810. 8009628: e004 b.n 8009634 <HAL_RCCEx_PeriphCLKConfig+0x140>
  21811. /* HSI, HSE, or CSI oscillator is used as source of SAI1 clock */
  21812. /* SAI1 clock source configuration done later after clock selection check */
  21813. break;
  21814. default:
  21815. ret = HAL_ERROR;
  21816. 800962a: 2301 movs r3, #1
  21817. 800962c: f887 311f strb.w r3, [r7, #287] @ 0x11f
  21818. break;
  21819. 8009630: e000 b.n 8009634 <HAL_RCCEx_PeriphCLKConfig+0x140>
  21820. break;
  21821. 8009632: bf00 nop
  21822. }
  21823. if (ret == HAL_OK)
  21824. 8009634: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  21825. 8009638: 2b00 cmp r3, #0
  21826. 800963a: d10a bne.n 8009652 <HAL_RCCEx_PeriphCLKConfig+0x15e>
  21827. {
  21828. /* Set the source of SAI1 clock*/
  21829. __HAL_RCC_SAI1_CONFIG(PeriphClkInit->Sai1ClockSelection);
  21830. 800963c: 4b7b ldr r3, [pc, #492] @ (800982c <HAL_RCCEx_PeriphCLKConfig+0x338>)
  21831. 800963e: 6d1b ldr r3, [r3, #80] @ 0x50
  21832. 8009640: f023 0107 bic.w r1, r3, #7
  21833. 8009644: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  21834. 8009648: 6d9b ldr r3, [r3, #88] @ 0x58
  21835. 800964a: 4a78 ldr r2, [pc, #480] @ (800982c <HAL_RCCEx_PeriphCLKConfig+0x338>)
  21836. 800964c: 430b orrs r3, r1
  21837. 800964e: 6513 str r3, [r2, #80] @ 0x50
  21838. 8009650: e003 b.n 800965a <HAL_RCCEx_PeriphCLKConfig+0x166>
  21839. }
  21840. else
  21841. {
  21842. /* set overall return value */
  21843. status = ret;
  21844. 8009652: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  21845. 8009656: f887 311e strb.w r3, [r7, #286] @ 0x11e
  21846. }
  21847. }
  21848. #if defined(SAI3)
  21849. /*---------------------------- SAI2/3 configuration -------------------------------*/
  21850. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI23) == RCC_PERIPHCLK_SAI23)
  21851. 800965a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  21852. 800965e: e9d3 2300 ldrd r2, r3, [r3]
  21853. 8009662: f402 7a00 and.w sl, r2, #512 @ 0x200
  21854. 8009666: f04f 0b00 mov.w fp, #0
  21855. 800966a: ea5a 030b orrs.w r3, sl, fp
  21856. 800966e: d04c beq.n 800970a <HAL_RCCEx_PeriphCLKConfig+0x216>
  21857. {
  21858. switch (PeriphClkInit->Sai23ClockSelection)
  21859. 8009670: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  21860. 8009674: 6ddb ldr r3, [r3, #92] @ 0x5c
  21861. 8009676: f5b3 7f80 cmp.w r3, #256 @ 0x100
  21862. 800967a: d030 beq.n 80096de <HAL_RCCEx_PeriphCLKConfig+0x1ea>
  21863. 800967c: f5b3 7f80 cmp.w r3, #256 @ 0x100
  21864. 8009680: d829 bhi.n 80096d6 <HAL_RCCEx_PeriphCLKConfig+0x1e2>
  21865. 8009682: 2bc0 cmp r3, #192 @ 0xc0
  21866. 8009684: d02d beq.n 80096e2 <HAL_RCCEx_PeriphCLKConfig+0x1ee>
  21867. 8009686: 2bc0 cmp r3, #192 @ 0xc0
  21868. 8009688: d825 bhi.n 80096d6 <HAL_RCCEx_PeriphCLKConfig+0x1e2>
  21869. 800968a: 2b80 cmp r3, #128 @ 0x80
  21870. 800968c: d018 beq.n 80096c0 <HAL_RCCEx_PeriphCLKConfig+0x1cc>
  21871. 800968e: 2b80 cmp r3, #128 @ 0x80
  21872. 8009690: d821 bhi.n 80096d6 <HAL_RCCEx_PeriphCLKConfig+0x1e2>
  21873. 8009692: 2b00 cmp r3, #0
  21874. 8009694: d002 beq.n 800969c <HAL_RCCEx_PeriphCLKConfig+0x1a8>
  21875. 8009696: 2b40 cmp r3, #64 @ 0x40
  21876. 8009698: d007 beq.n 80096aa <HAL_RCCEx_PeriphCLKConfig+0x1b6>
  21877. 800969a: e01c b.n 80096d6 <HAL_RCCEx_PeriphCLKConfig+0x1e2>
  21878. {
  21879. case RCC_SAI23CLKSOURCE_PLL: /* PLL is used as clock source for SAI2/3 */
  21880. /* Enable SAI Clock output generated form System PLL . */
  21881. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  21882. 800969c: 4b63 ldr r3, [pc, #396] @ (800982c <HAL_RCCEx_PeriphCLKConfig+0x338>)
  21883. 800969e: 6adb ldr r3, [r3, #44] @ 0x2c
  21884. 80096a0: 4a62 ldr r2, [pc, #392] @ (800982c <HAL_RCCEx_PeriphCLKConfig+0x338>)
  21885. 80096a2: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  21886. 80096a6: 62d3 str r3, [r2, #44] @ 0x2c
  21887. /* SAI2/3 clock source configuration done later after clock selection check */
  21888. break;
  21889. 80096a8: e01c b.n 80096e4 <HAL_RCCEx_PeriphCLKConfig+0x1f0>
  21890. case RCC_SAI23CLKSOURCE_PLL2: /* PLL2 is used as clock source for SAI2/3 */
  21891. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  21892. 80096aa: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  21893. 80096ae: 3308 adds r3, #8
  21894. 80096b0: 2100 movs r1, #0
  21895. 80096b2: 4618 mov r0, r3
  21896. 80096b4: f002 fa9c bl 800bbf0 <RCCEx_PLL2_Config>
  21897. 80096b8: 4603 mov r3, r0
  21898. 80096ba: f887 311f strb.w r3, [r7, #287] @ 0x11f
  21899. /* SAI2/3 clock source configuration done later after clock selection check */
  21900. break;
  21901. 80096be: e011 b.n 80096e4 <HAL_RCCEx_PeriphCLKConfig+0x1f0>
  21902. case RCC_SAI23CLKSOURCE_PLL3: /* PLL3 is used as clock source for SAI2/3 */
  21903. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
  21904. 80096c0: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  21905. 80096c4: 3328 adds r3, #40 @ 0x28
  21906. 80096c6: 2100 movs r1, #0
  21907. 80096c8: 4618 mov r0, r3
  21908. 80096ca: f002 fb43 bl 800bd54 <RCCEx_PLL3_Config>
  21909. 80096ce: 4603 mov r3, r0
  21910. 80096d0: f887 311f strb.w r3, [r7, #287] @ 0x11f
  21911. /* SAI2/3 clock source configuration done later after clock selection check */
  21912. break;
  21913. 80096d4: e006 b.n 80096e4 <HAL_RCCEx_PeriphCLKConfig+0x1f0>
  21914. /* HSI, HSE, or CSI oscillator is used as source of SAI2/3 clock */
  21915. /* SAI2/3 clock source configuration done later after clock selection check */
  21916. break;
  21917. default:
  21918. ret = HAL_ERROR;
  21919. 80096d6: 2301 movs r3, #1
  21920. 80096d8: f887 311f strb.w r3, [r7, #287] @ 0x11f
  21921. break;
  21922. 80096dc: e002 b.n 80096e4 <HAL_RCCEx_PeriphCLKConfig+0x1f0>
  21923. break;
  21924. 80096de: bf00 nop
  21925. 80096e0: e000 b.n 80096e4 <HAL_RCCEx_PeriphCLKConfig+0x1f0>
  21926. break;
  21927. 80096e2: bf00 nop
  21928. }
  21929. if (ret == HAL_OK)
  21930. 80096e4: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  21931. 80096e8: 2b00 cmp r3, #0
  21932. 80096ea: d10a bne.n 8009702 <HAL_RCCEx_PeriphCLKConfig+0x20e>
  21933. {
  21934. /* Set the source of SAI2/3 clock*/
  21935. __HAL_RCC_SAI23_CONFIG(PeriphClkInit->Sai23ClockSelection);
  21936. 80096ec: 4b4f ldr r3, [pc, #316] @ (800982c <HAL_RCCEx_PeriphCLKConfig+0x338>)
  21937. 80096ee: 6d1b ldr r3, [r3, #80] @ 0x50
  21938. 80096f0: f423 71e0 bic.w r1, r3, #448 @ 0x1c0
  21939. 80096f4: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  21940. 80096f8: 6ddb ldr r3, [r3, #92] @ 0x5c
  21941. 80096fa: 4a4c ldr r2, [pc, #304] @ (800982c <HAL_RCCEx_PeriphCLKConfig+0x338>)
  21942. 80096fc: 430b orrs r3, r1
  21943. 80096fe: 6513 str r3, [r2, #80] @ 0x50
  21944. 8009700: e003 b.n 800970a <HAL_RCCEx_PeriphCLKConfig+0x216>
  21945. }
  21946. else
  21947. {
  21948. /* set overall return value */
  21949. status = ret;
  21950. 8009702: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  21951. 8009706: f887 311e strb.w r3, [r7, #286] @ 0x11e
  21952. }
  21953. #endif /*SAI2B*/
  21954. #if defined(SAI4)
  21955. /*---------------------------- SAI4A configuration -------------------------------*/
  21956. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI4A) == RCC_PERIPHCLK_SAI4A)
  21957. 800970a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  21958. 800970e: e9d3 2300 ldrd r2, r3, [r3]
  21959. 8009712: f402 6380 and.w r3, r2, #1024 @ 0x400
  21960. 8009716: f8c7 3100 str.w r3, [r7, #256] @ 0x100
  21961. 800971a: 2300 movs r3, #0
  21962. 800971c: f8c7 3104 str.w r3, [r7, #260] @ 0x104
  21963. 8009720: e9d7 1240 ldrd r1, r2, [r7, #256] @ 0x100
  21964. 8009724: 460b mov r3, r1
  21965. 8009726: 4313 orrs r3, r2
  21966. 8009728: d053 beq.n 80097d2 <HAL_RCCEx_PeriphCLKConfig+0x2de>
  21967. {
  21968. switch (PeriphClkInit->Sai4AClockSelection)
  21969. 800972a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  21970. 800972e: f8d3 30a8 ldr.w r3, [r3, #168] @ 0xa8
  21971. 8009732: f5b3 0f00 cmp.w r3, #8388608 @ 0x800000
  21972. 8009736: d035 beq.n 80097a4 <HAL_RCCEx_PeriphCLKConfig+0x2b0>
  21973. 8009738: f5b3 0f00 cmp.w r3, #8388608 @ 0x800000
  21974. 800973c: d82e bhi.n 800979c <HAL_RCCEx_PeriphCLKConfig+0x2a8>
  21975. 800973e: f5b3 0fc0 cmp.w r3, #6291456 @ 0x600000
  21976. 8009742: d031 beq.n 80097a8 <HAL_RCCEx_PeriphCLKConfig+0x2b4>
  21977. 8009744: f5b3 0fc0 cmp.w r3, #6291456 @ 0x600000
  21978. 8009748: d828 bhi.n 800979c <HAL_RCCEx_PeriphCLKConfig+0x2a8>
  21979. 800974a: f5b3 0f80 cmp.w r3, #4194304 @ 0x400000
  21980. 800974e: d01a beq.n 8009786 <HAL_RCCEx_PeriphCLKConfig+0x292>
  21981. 8009750: f5b3 0f80 cmp.w r3, #4194304 @ 0x400000
  21982. 8009754: d822 bhi.n 800979c <HAL_RCCEx_PeriphCLKConfig+0x2a8>
  21983. 8009756: 2b00 cmp r3, #0
  21984. 8009758: d003 beq.n 8009762 <HAL_RCCEx_PeriphCLKConfig+0x26e>
  21985. 800975a: f5b3 1f00 cmp.w r3, #2097152 @ 0x200000
  21986. 800975e: d007 beq.n 8009770 <HAL_RCCEx_PeriphCLKConfig+0x27c>
  21987. 8009760: e01c b.n 800979c <HAL_RCCEx_PeriphCLKConfig+0x2a8>
  21988. {
  21989. case RCC_SAI4ACLKSOURCE_PLL: /* PLL is used as clock source for SAI2*/
  21990. /* Enable SAI Clock output generated form System PLL . */
  21991. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  21992. 8009762: 4b32 ldr r3, [pc, #200] @ (800982c <HAL_RCCEx_PeriphCLKConfig+0x338>)
  21993. 8009764: 6adb ldr r3, [r3, #44] @ 0x2c
  21994. 8009766: 4a31 ldr r2, [pc, #196] @ (800982c <HAL_RCCEx_PeriphCLKConfig+0x338>)
  21995. 8009768: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  21996. 800976c: 62d3 str r3, [r2, #44] @ 0x2c
  21997. /* SAI1 clock source configuration done later after clock selection check */
  21998. break;
  21999. 800976e: e01c b.n 80097aa <HAL_RCCEx_PeriphCLKConfig+0x2b6>
  22000. case RCC_SAI4ACLKSOURCE_PLL2: /* PLL2 is used as clock source for SAI2*/
  22001. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  22002. 8009770: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22003. 8009774: 3308 adds r3, #8
  22004. 8009776: 2100 movs r1, #0
  22005. 8009778: 4618 mov r0, r3
  22006. 800977a: f002 fa39 bl 800bbf0 <RCCEx_PLL2_Config>
  22007. 800977e: 4603 mov r3, r0
  22008. 8009780: f887 311f strb.w r3, [r7, #287] @ 0x11f
  22009. /* SAI2 clock source configuration done later after clock selection check */
  22010. break;
  22011. 8009784: e011 b.n 80097aa <HAL_RCCEx_PeriphCLKConfig+0x2b6>
  22012. case RCC_SAI4ACLKSOURCE_PLL3: /* PLL3 is used as clock source for SAI2*/
  22013. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
  22014. 8009786: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22015. 800978a: 3328 adds r3, #40 @ 0x28
  22016. 800978c: 2100 movs r1, #0
  22017. 800978e: 4618 mov r0, r3
  22018. 8009790: f002 fae0 bl 800bd54 <RCCEx_PLL3_Config>
  22019. 8009794: 4603 mov r3, r0
  22020. 8009796: f887 311f strb.w r3, [r7, #287] @ 0x11f
  22021. /* SAI1 clock source configuration done later after clock selection check */
  22022. break;
  22023. 800979a: e006 b.n 80097aa <HAL_RCCEx_PeriphCLKConfig+0x2b6>
  22024. /* SAI4A clock source configuration done later after clock selection check */
  22025. break;
  22026. #endif /* RCC_VER_3_0 */
  22027. default:
  22028. ret = HAL_ERROR;
  22029. 800979c: 2301 movs r3, #1
  22030. 800979e: f887 311f strb.w r3, [r7, #287] @ 0x11f
  22031. break;
  22032. 80097a2: e002 b.n 80097aa <HAL_RCCEx_PeriphCLKConfig+0x2b6>
  22033. break;
  22034. 80097a4: bf00 nop
  22035. 80097a6: e000 b.n 80097aa <HAL_RCCEx_PeriphCLKConfig+0x2b6>
  22036. break;
  22037. 80097a8: bf00 nop
  22038. }
  22039. if (ret == HAL_OK)
  22040. 80097aa: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  22041. 80097ae: 2b00 cmp r3, #0
  22042. 80097b0: d10b bne.n 80097ca <HAL_RCCEx_PeriphCLKConfig+0x2d6>
  22043. {
  22044. /* Set the source of SAI4A clock*/
  22045. __HAL_RCC_SAI4A_CONFIG(PeriphClkInit->Sai4AClockSelection);
  22046. 80097b2: 4b1e ldr r3, [pc, #120] @ (800982c <HAL_RCCEx_PeriphCLKConfig+0x338>)
  22047. 80097b4: 6d9b ldr r3, [r3, #88] @ 0x58
  22048. 80097b6: f423 0160 bic.w r1, r3, #14680064 @ 0xe00000
  22049. 80097ba: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22050. 80097be: f8d3 30a8 ldr.w r3, [r3, #168] @ 0xa8
  22051. 80097c2: 4a1a ldr r2, [pc, #104] @ (800982c <HAL_RCCEx_PeriphCLKConfig+0x338>)
  22052. 80097c4: 430b orrs r3, r1
  22053. 80097c6: 6593 str r3, [r2, #88] @ 0x58
  22054. 80097c8: e003 b.n 80097d2 <HAL_RCCEx_PeriphCLKConfig+0x2de>
  22055. }
  22056. else
  22057. {
  22058. /* set overall return value */
  22059. status = ret;
  22060. 80097ca: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  22061. 80097ce: f887 311e strb.w r3, [r7, #286] @ 0x11e
  22062. }
  22063. }
  22064. /*---------------------------- SAI4B configuration -------------------------------*/
  22065. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI4B) == RCC_PERIPHCLK_SAI4B)
  22066. 80097d2: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22067. 80097d6: e9d3 2300 ldrd r2, r3, [r3]
  22068. 80097da: f402 6300 and.w r3, r2, #2048 @ 0x800
  22069. 80097de: f8c7 30f8 str.w r3, [r7, #248] @ 0xf8
  22070. 80097e2: 2300 movs r3, #0
  22071. 80097e4: f8c7 30fc str.w r3, [r7, #252] @ 0xfc
  22072. 80097e8: e9d7 123e ldrd r1, r2, [r7, #248] @ 0xf8
  22073. 80097ec: 460b mov r3, r1
  22074. 80097ee: 4313 orrs r3, r2
  22075. 80097f0: d056 beq.n 80098a0 <HAL_RCCEx_PeriphCLKConfig+0x3ac>
  22076. {
  22077. switch (PeriphClkInit->Sai4BClockSelection)
  22078. 80097f2: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22079. 80097f6: f8d3 30ac ldr.w r3, [r3, #172] @ 0xac
  22080. 80097fa: f1b3 6f80 cmp.w r3, #67108864 @ 0x4000000
  22081. 80097fe: d038 beq.n 8009872 <HAL_RCCEx_PeriphCLKConfig+0x37e>
  22082. 8009800: f1b3 6f80 cmp.w r3, #67108864 @ 0x4000000
  22083. 8009804: d831 bhi.n 800986a <HAL_RCCEx_PeriphCLKConfig+0x376>
  22084. 8009806: f1b3 7f40 cmp.w r3, #50331648 @ 0x3000000
  22085. 800980a: d034 beq.n 8009876 <HAL_RCCEx_PeriphCLKConfig+0x382>
  22086. 800980c: f1b3 7f40 cmp.w r3, #50331648 @ 0x3000000
  22087. 8009810: d82b bhi.n 800986a <HAL_RCCEx_PeriphCLKConfig+0x376>
  22088. 8009812: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  22089. 8009816: d01d beq.n 8009854 <HAL_RCCEx_PeriphCLKConfig+0x360>
  22090. 8009818: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  22091. 800981c: d825 bhi.n 800986a <HAL_RCCEx_PeriphCLKConfig+0x376>
  22092. 800981e: 2b00 cmp r3, #0
  22093. 8009820: d006 beq.n 8009830 <HAL_RCCEx_PeriphCLKConfig+0x33c>
  22094. 8009822: f1b3 7f80 cmp.w r3, #16777216 @ 0x1000000
  22095. 8009826: d00a beq.n 800983e <HAL_RCCEx_PeriphCLKConfig+0x34a>
  22096. 8009828: e01f b.n 800986a <HAL_RCCEx_PeriphCLKConfig+0x376>
  22097. 800982a: bf00 nop
  22098. 800982c: 58024400 .word 0x58024400
  22099. {
  22100. case RCC_SAI4BCLKSOURCE_PLL: /* PLL is used as clock source for SAI2*/
  22101. /* Enable SAI Clock output generated form System PLL . */
  22102. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  22103. 8009830: 4ba2 ldr r3, [pc, #648] @ (8009abc <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  22104. 8009832: 6adb ldr r3, [r3, #44] @ 0x2c
  22105. 8009834: 4aa1 ldr r2, [pc, #644] @ (8009abc <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  22106. 8009836: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  22107. 800983a: 62d3 str r3, [r2, #44] @ 0x2c
  22108. /* SAI1 clock source configuration done later after clock selection check */
  22109. break;
  22110. 800983c: e01c b.n 8009878 <HAL_RCCEx_PeriphCLKConfig+0x384>
  22111. case RCC_SAI4BCLKSOURCE_PLL2: /* PLL2 is used as clock source for SAI2*/
  22112. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  22113. 800983e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22114. 8009842: 3308 adds r3, #8
  22115. 8009844: 2100 movs r1, #0
  22116. 8009846: 4618 mov r0, r3
  22117. 8009848: f002 f9d2 bl 800bbf0 <RCCEx_PLL2_Config>
  22118. 800984c: 4603 mov r3, r0
  22119. 800984e: f887 311f strb.w r3, [r7, #287] @ 0x11f
  22120. /* SAI2 clock source configuration done later after clock selection check */
  22121. break;
  22122. 8009852: e011 b.n 8009878 <HAL_RCCEx_PeriphCLKConfig+0x384>
  22123. case RCC_SAI4BCLKSOURCE_PLL3: /* PLL3 is used as clock source for SAI2*/
  22124. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
  22125. 8009854: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22126. 8009858: 3328 adds r3, #40 @ 0x28
  22127. 800985a: 2100 movs r1, #0
  22128. 800985c: 4618 mov r0, r3
  22129. 800985e: f002 fa79 bl 800bd54 <RCCEx_PLL3_Config>
  22130. 8009862: 4603 mov r3, r0
  22131. 8009864: f887 311f strb.w r3, [r7, #287] @ 0x11f
  22132. /* SAI1 clock source configuration done later after clock selection check */
  22133. break;
  22134. 8009868: e006 b.n 8009878 <HAL_RCCEx_PeriphCLKConfig+0x384>
  22135. /* SAI4B clock source configuration done later after clock selection check */
  22136. break;
  22137. #endif /* RCC_VER_3_0 */
  22138. default:
  22139. ret = HAL_ERROR;
  22140. 800986a: 2301 movs r3, #1
  22141. 800986c: f887 311f strb.w r3, [r7, #287] @ 0x11f
  22142. break;
  22143. 8009870: e002 b.n 8009878 <HAL_RCCEx_PeriphCLKConfig+0x384>
  22144. break;
  22145. 8009872: bf00 nop
  22146. 8009874: e000 b.n 8009878 <HAL_RCCEx_PeriphCLKConfig+0x384>
  22147. break;
  22148. 8009876: bf00 nop
  22149. }
  22150. if (ret == HAL_OK)
  22151. 8009878: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  22152. 800987c: 2b00 cmp r3, #0
  22153. 800987e: d10b bne.n 8009898 <HAL_RCCEx_PeriphCLKConfig+0x3a4>
  22154. {
  22155. /* Set the source of SAI4B clock*/
  22156. __HAL_RCC_SAI4B_CONFIG(PeriphClkInit->Sai4BClockSelection);
  22157. 8009880: 4b8e ldr r3, [pc, #568] @ (8009abc <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  22158. 8009882: 6d9b ldr r3, [r3, #88] @ 0x58
  22159. 8009884: f023 61e0 bic.w r1, r3, #117440512 @ 0x7000000
  22160. 8009888: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22161. 800988c: f8d3 30ac ldr.w r3, [r3, #172] @ 0xac
  22162. 8009890: 4a8a ldr r2, [pc, #552] @ (8009abc <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  22163. 8009892: 430b orrs r3, r1
  22164. 8009894: 6593 str r3, [r2, #88] @ 0x58
  22165. 8009896: e003 b.n 80098a0 <HAL_RCCEx_PeriphCLKConfig+0x3ac>
  22166. }
  22167. else
  22168. {
  22169. /* set overall return value */
  22170. status = ret;
  22171. 8009898: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  22172. 800989c: f887 311e strb.w r3, [r7, #286] @ 0x11e
  22173. }
  22174. #endif /*SAI4*/
  22175. #if defined(QUADSPI)
  22176. /*---------------------------- QSPI configuration -------------------------------*/
  22177. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_QSPI) == RCC_PERIPHCLK_QSPI)
  22178. 80098a0: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22179. 80098a4: e9d3 2300 ldrd r2, r3, [r3]
  22180. 80098a8: f002 7300 and.w r3, r2, #33554432 @ 0x2000000
  22181. 80098ac: f8c7 30f0 str.w r3, [r7, #240] @ 0xf0
  22182. 80098b0: 2300 movs r3, #0
  22183. 80098b2: f8c7 30f4 str.w r3, [r7, #244] @ 0xf4
  22184. 80098b6: e9d7 123c ldrd r1, r2, [r7, #240] @ 0xf0
  22185. 80098ba: 460b mov r3, r1
  22186. 80098bc: 4313 orrs r3, r2
  22187. 80098be: d03a beq.n 8009936 <HAL_RCCEx_PeriphCLKConfig+0x442>
  22188. {
  22189. switch (PeriphClkInit->QspiClockSelection)
  22190. 80098c0: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22191. 80098c4: 6cdb ldr r3, [r3, #76] @ 0x4c
  22192. 80098c6: 2b30 cmp r3, #48 @ 0x30
  22193. 80098c8: d01f beq.n 800990a <HAL_RCCEx_PeriphCLKConfig+0x416>
  22194. 80098ca: 2b30 cmp r3, #48 @ 0x30
  22195. 80098cc: d819 bhi.n 8009902 <HAL_RCCEx_PeriphCLKConfig+0x40e>
  22196. 80098ce: 2b20 cmp r3, #32
  22197. 80098d0: d00c beq.n 80098ec <HAL_RCCEx_PeriphCLKConfig+0x3f8>
  22198. 80098d2: 2b20 cmp r3, #32
  22199. 80098d4: d815 bhi.n 8009902 <HAL_RCCEx_PeriphCLKConfig+0x40e>
  22200. 80098d6: 2b00 cmp r3, #0
  22201. 80098d8: d019 beq.n 800990e <HAL_RCCEx_PeriphCLKConfig+0x41a>
  22202. 80098da: 2b10 cmp r3, #16
  22203. 80098dc: d111 bne.n 8009902 <HAL_RCCEx_PeriphCLKConfig+0x40e>
  22204. {
  22205. case RCC_QSPICLKSOURCE_PLL: /* PLL is used as clock source for QSPI*/
  22206. /* Enable QSPI Clock output generated form System PLL . */
  22207. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  22208. 80098de: 4b77 ldr r3, [pc, #476] @ (8009abc <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  22209. 80098e0: 6adb ldr r3, [r3, #44] @ 0x2c
  22210. 80098e2: 4a76 ldr r2, [pc, #472] @ (8009abc <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  22211. 80098e4: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  22212. 80098e8: 62d3 str r3, [r2, #44] @ 0x2c
  22213. /* QSPI clock source configuration done later after clock selection check */
  22214. break;
  22215. 80098ea: e011 b.n 8009910 <HAL_RCCEx_PeriphCLKConfig+0x41c>
  22216. case RCC_QSPICLKSOURCE_PLL2: /* PLL2 is used as clock source for QSPI*/
  22217. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_R_UPDATE);
  22218. 80098ec: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22219. 80098f0: 3308 adds r3, #8
  22220. 80098f2: 2102 movs r1, #2
  22221. 80098f4: 4618 mov r0, r3
  22222. 80098f6: f002 f97b bl 800bbf0 <RCCEx_PLL2_Config>
  22223. 80098fa: 4603 mov r3, r0
  22224. 80098fc: f887 311f strb.w r3, [r7, #287] @ 0x11f
  22225. /* QSPI clock source configuration done later after clock selection check */
  22226. break;
  22227. 8009900: e006 b.n 8009910 <HAL_RCCEx_PeriphCLKConfig+0x41c>
  22228. case RCC_QSPICLKSOURCE_D1HCLK:
  22229. /* Domain1 HCLK clock selected as QSPI kernel peripheral clock */
  22230. break;
  22231. default:
  22232. ret = HAL_ERROR;
  22233. 8009902: 2301 movs r3, #1
  22234. 8009904: f887 311f strb.w r3, [r7, #287] @ 0x11f
  22235. break;
  22236. 8009908: e002 b.n 8009910 <HAL_RCCEx_PeriphCLKConfig+0x41c>
  22237. break;
  22238. 800990a: bf00 nop
  22239. 800990c: e000 b.n 8009910 <HAL_RCCEx_PeriphCLKConfig+0x41c>
  22240. break;
  22241. 800990e: bf00 nop
  22242. }
  22243. if (ret == HAL_OK)
  22244. 8009910: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  22245. 8009914: 2b00 cmp r3, #0
  22246. 8009916: d10a bne.n 800992e <HAL_RCCEx_PeriphCLKConfig+0x43a>
  22247. {
  22248. /* Set the source of QSPI clock*/
  22249. __HAL_RCC_QSPI_CONFIG(PeriphClkInit->QspiClockSelection);
  22250. 8009918: 4b68 ldr r3, [pc, #416] @ (8009abc <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  22251. 800991a: 6cdb ldr r3, [r3, #76] @ 0x4c
  22252. 800991c: f023 0130 bic.w r1, r3, #48 @ 0x30
  22253. 8009920: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22254. 8009924: 6cdb ldr r3, [r3, #76] @ 0x4c
  22255. 8009926: 4a65 ldr r2, [pc, #404] @ (8009abc <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  22256. 8009928: 430b orrs r3, r1
  22257. 800992a: 64d3 str r3, [r2, #76] @ 0x4c
  22258. 800992c: e003 b.n 8009936 <HAL_RCCEx_PeriphCLKConfig+0x442>
  22259. }
  22260. else
  22261. {
  22262. /* set overall return value */
  22263. status = ret;
  22264. 800992e: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  22265. 8009932: f887 311e strb.w r3, [r7, #286] @ 0x11e
  22266. }
  22267. }
  22268. #endif /*OCTOSPI*/
  22269. /*---------------------------- SPI1/2/3 configuration -------------------------------*/
  22270. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SPI123) == RCC_PERIPHCLK_SPI123)
  22271. 8009936: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22272. 800993a: e9d3 2300 ldrd r2, r3, [r3]
  22273. 800993e: f402 5380 and.w r3, r2, #4096 @ 0x1000
  22274. 8009942: f8c7 30e8 str.w r3, [r7, #232] @ 0xe8
  22275. 8009946: 2300 movs r3, #0
  22276. 8009948: f8c7 30ec str.w r3, [r7, #236] @ 0xec
  22277. 800994c: e9d7 123a ldrd r1, r2, [r7, #232] @ 0xe8
  22278. 8009950: 460b mov r3, r1
  22279. 8009952: 4313 orrs r3, r2
  22280. 8009954: d051 beq.n 80099fa <HAL_RCCEx_PeriphCLKConfig+0x506>
  22281. {
  22282. switch (PeriphClkInit->Spi123ClockSelection)
  22283. 8009956: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22284. 800995a: 6e1b ldr r3, [r3, #96] @ 0x60
  22285. 800995c: f5b3 4f80 cmp.w r3, #16384 @ 0x4000
  22286. 8009960: d035 beq.n 80099ce <HAL_RCCEx_PeriphCLKConfig+0x4da>
  22287. 8009962: f5b3 4f80 cmp.w r3, #16384 @ 0x4000
  22288. 8009966: d82e bhi.n 80099c6 <HAL_RCCEx_PeriphCLKConfig+0x4d2>
  22289. 8009968: f5b3 5f40 cmp.w r3, #12288 @ 0x3000
  22290. 800996c: d031 beq.n 80099d2 <HAL_RCCEx_PeriphCLKConfig+0x4de>
  22291. 800996e: f5b3 5f40 cmp.w r3, #12288 @ 0x3000
  22292. 8009972: d828 bhi.n 80099c6 <HAL_RCCEx_PeriphCLKConfig+0x4d2>
  22293. 8009974: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  22294. 8009978: d01a beq.n 80099b0 <HAL_RCCEx_PeriphCLKConfig+0x4bc>
  22295. 800997a: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  22296. 800997e: d822 bhi.n 80099c6 <HAL_RCCEx_PeriphCLKConfig+0x4d2>
  22297. 8009980: 2b00 cmp r3, #0
  22298. 8009982: d003 beq.n 800998c <HAL_RCCEx_PeriphCLKConfig+0x498>
  22299. 8009984: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  22300. 8009988: d007 beq.n 800999a <HAL_RCCEx_PeriphCLKConfig+0x4a6>
  22301. 800998a: e01c b.n 80099c6 <HAL_RCCEx_PeriphCLKConfig+0x4d2>
  22302. {
  22303. case RCC_SPI123CLKSOURCE_PLL: /* PLL is used as clock source for SPI1/2/3 */
  22304. /* Enable SPI Clock output generated form System PLL . */
  22305. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  22306. 800998c: 4b4b ldr r3, [pc, #300] @ (8009abc <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  22307. 800998e: 6adb ldr r3, [r3, #44] @ 0x2c
  22308. 8009990: 4a4a ldr r2, [pc, #296] @ (8009abc <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  22309. 8009992: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  22310. 8009996: 62d3 str r3, [r2, #44] @ 0x2c
  22311. /* SPI1/2/3 clock source configuration done later after clock selection check */
  22312. break;
  22313. 8009998: e01c b.n 80099d4 <HAL_RCCEx_PeriphCLKConfig+0x4e0>
  22314. case RCC_SPI123CLKSOURCE_PLL2: /* PLL2 is used as clock source for SPI1/2/3 */
  22315. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  22316. 800999a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22317. 800999e: 3308 adds r3, #8
  22318. 80099a0: 2100 movs r1, #0
  22319. 80099a2: 4618 mov r0, r3
  22320. 80099a4: f002 f924 bl 800bbf0 <RCCEx_PLL2_Config>
  22321. 80099a8: 4603 mov r3, r0
  22322. 80099aa: f887 311f strb.w r3, [r7, #287] @ 0x11f
  22323. /* SPI1/2/3 clock source configuration done later after clock selection check */
  22324. break;
  22325. 80099ae: e011 b.n 80099d4 <HAL_RCCEx_PeriphCLKConfig+0x4e0>
  22326. case RCC_SPI123CLKSOURCE_PLL3: /* PLL3 is used as clock source for SPI1/2/3 */
  22327. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
  22328. 80099b0: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22329. 80099b4: 3328 adds r3, #40 @ 0x28
  22330. 80099b6: 2100 movs r1, #0
  22331. 80099b8: 4618 mov r0, r3
  22332. 80099ba: f002 f9cb bl 800bd54 <RCCEx_PLL3_Config>
  22333. 80099be: 4603 mov r3, r0
  22334. 80099c0: f887 311f strb.w r3, [r7, #287] @ 0x11f
  22335. /* SPI1/2/3 clock source configuration done later after clock selection check */
  22336. break;
  22337. 80099c4: e006 b.n 80099d4 <HAL_RCCEx_PeriphCLKConfig+0x4e0>
  22338. /* HSI, HSE, or CSI oscillator is used as source of SPI1/2/3 clock */
  22339. /* SPI1/2/3 clock source configuration done later after clock selection check */
  22340. break;
  22341. default:
  22342. ret = HAL_ERROR;
  22343. 80099c6: 2301 movs r3, #1
  22344. 80099c8: f887 311f strb.w r3, [r7, #287] @ 0x11f
  22345. break;
  22346. 80099cc: e002 b.n 80099d4 <HAL_RCCEx_PeriphCLKConfig+0x4e0>
  22347. break;
  22348. 80099ce: bf00 nop
  22349. 80099d0: e000 b.n 80099d4 <HAL_RCCEx_PeriphCLKConfig+0x4e0>
  22350. break;
  22351. 80099d2: bf00 nop
  22352. }
  22353. if (ret == HAL_OK)
  22354. 80099d4: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  22355. 80099d8: 2b00 cmp r3, #0
  22356. 80099da: d10a bne.n 80099f2 <HAL_RCCEx_PeriphCLKConfig+0x4fe>
  22357. {
  22358. /* Set the source of SPI1/2/3 clock*/
  22359. __HAL_RCC_SPI123_CONFIG(PeriphClkInit->Spi123ClockSelection);
  22360. 80099dc: 4b37 ldr r3, [pc, #220] @ (8009abc <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  22361. 80099de: 6d1b ldr r3, [r3, #80] @ 0x50
  22362. 80099e0: f423 41e0 bic.w r1, r3, #28672 @ 0x7000
  22363. 80099e4: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22364. 80099e8: 6e1b ldr r3, [r3, #96] @ 0x60
  22365. 80099ea: 4a34 ldr r2, [pc, #208] @ (8009abc <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  22366. 80099ec: 430b orrs r3, r1
  22367. 80099ee: 6513 str r3, [r2, #80] @ 0x50
  22368. 80099f0: e003 b.n 80099fa <HAL_RCCEx_PeriphCLKConfig+0x506>
  22369. }
  22370. else
  22371. {
  22372. /* set overall return value */
  22373. status = ret;
  22374. 80099f2: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  22375. 80099f6: f887 311e strb.w r3, [r7, #286] @ 0x11e
  22376. }
  22377. }
  22378. /*---------------------------- SPI4/5 configuration -------------------------------*/
  22379. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SPI45) == RCC_PERIPHCLK_SPI45)
  22380. 80099fa: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22381. 80099fe: e9d3 2300 ldrd r2, r3, [r3]
  22382. 8009a02: f402 5300 and.w r3, r2, #8192 @ 0x2000
  22383. 8009a06: f8c7 30e0 str.w r3, [r7, #224] @ 0xe0
  22384. 8009a0a: 2300 movs r3, #0
  22385. 8009a0c: f8c7 30e4 str.w r3, [r7, #228] @ 0xe4
  22386. 8009a10: e9d7 1238 ldrd r1, r2, [r7, #224] @ 0xe0
  22387. 8009a14: 460b mov r3, r1
  22388. 8009a16: 4313 orrs r3, r2
  22389. 8009a18: d056 beq.n 8009ac8 <HAL_RCCEx_PeriphCLKConfig+0x5d4>
  22390. {
  22391. switch (PeriphClkInit->Spi45ClockSelection)
  22392. 8009a1a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22393. 8009a1e: 6e5b ldr r3, [r3, #100] @ 0x64
  22394. 8009a20: f5b3 2fa0 cmp.w r3, #327680 @ 0x50000
  22395. 8009a24: d033 beq.n 8009a8e <HAL_RCCEx_PeriphCLKConfig+0x59a>
  22396. 8009a26: f5b3 2fa0 cmp.w r3, #327680 @ 0x50000
  22397. 8009a2a: d82c bhi.n 8009a86 <HAL_RCCEx_PeriphCLKConfig+0x592>
  22398. 8009a2c: f5b3 2f80 cmp.w r3, #262144 @ 0x40000
  22399. 8009a30: d02f beq.n 8009a92 <HAL_RCCEx_PeriphCLKConfig+0x59e>
  22400. 8009a32: f5b3 2f80 cmp.w r3, #262144 @ 0x40000
  22401. 8009a36: d826 bhi.n 8009a86 <HAL_RCCEx_PeriphCLKConfig+0x592>
  22402. 8009a38: f5b3 3f40 cmp.w r3, #196608 @ 0x30000
  22403. 8009a3c: d02b beq.n 8009a96 <HAL_RCCEx_PeriphCLKConfig+0x5a2>
  22404. 8009a3e: f5b3 3f40 cmp.w r3, #196608 @ 0x30000
  22405. 8009a42: d820 bhi.n 8009a86 <HAL_RCCEx_PeriphCLKConfig+0x592>
  22406. 8009a44: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  22407. 8009a48: d012 beq.n 8009a70 <HAL_RCCEx_PeriphCLKConfig+0x57c>
  22408. 8009a4a: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  22409. 8009a4e: d81a bhi.n 8009a86 <HAL_RCCEx_PeriphCLKConfig+0x592>
  22410. 8009a50: 2b00 cmp r3, #0
  22411. 8009a52: d022 beq.n 8009a9a <HAL_RCCEx_PeriphCLKConfig+0x5a6>
  22412. 8009a54: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  22413. 8009a58: d115 bne.n 8009a86 <HAL_RCCEx_PeriphCLKConfig+0x592>
  22414. /* SPI4/5 clock source configuration done later after clock selection check */
  22415. break;
  22416. case RCC_SPI45CLKSOURCE_PLL2: /* PLL2 is used as clock source for SPI4/5 */
  22417. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
  22418. 8009a5a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22419. 8009a5e: 3308 adds r3, #8
  22420. 8009a60: 2101 movs r1, #1
  22421. 8009a62: 4618 mov r0, r3
  22422. 8009a64: f002 f8c4 bl 800bbf0 <RCCEx_PLL2_Config>
  22423. 8009a68: 4603 mov r3, r0
  22424. 8009a6a: f887 311f strb.w r3, [r7, #287] @ 0x11f
  22425. /* SPI4/5 clock source configuration done later after clock selection check */
  22426. break;
  22427. 8009a6e: e015 b.n 8009a9c <HAL_RCCEx_PeriphCLKConfig+0x5a8>
  22428. case RCC_SPI45CLKSOURCE_PLL3: /* PLL3 is used as clock source for SPI4/5 */
  22429. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
  22430. 8009a70: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22431. 8009a74: 3328 adds r3, #40 @ 0x28
  22432. 8009a76: 2101 movs r1, #1
  22433. 8009a78: 4618 mov r0, r3
  22434. 8009a7a: f002 f96b bl 800bd54 <RCCEx_PLL3_Config>
  22435. 8009a7e: 4603 mov r3, r0
  22436. 8009a80: f887 311f strb.w r3, [r7, #287] @ 0x11f
  22437. /* SPI4/5 clock source configuration done later after clock selection check */
  22438. break;
  22439. 8009a84: e00a b.n 8009a9c <HAL_RCCEx_PeriphCLKConfig+0x5a8>
  22440. /* HSE, oscillator is used as source of SPI4/5 clock */
  22441. /* SPI4/5 clock source configuration done later after clock selection check */
  22442. break;
  22443. default:
  22444. ret = HAL_ERROR;
  22445. 8009a86: 2301 movs r3, #1
  22446. 8009a88: f887 311f strb.w r3, [r7, #287] @ 0x11f
  22447. break;
  22448. 8009a8c: e006 b.n 8009a9c <HAL_RCCEx_PeriphCLKConfig+0x5a8>
  22449. break;
  22450. 8009a8e: bf00 nop
  22451. 8009a90: e004 b.n 8009a9c <HAL_RCCEx_PeriphCLKConfig+0x5a8>
  22452. break;
  22453. 8009a92: bf00 nop
  22454. 8009a94: e002 b.n 8009a9c <HAL_RCCEx_PeriphCLKConfig+0x5a8>
  22455. break;
  22456. 8009a96: bf00 nop
  22457. 8009a98: e000 b.n 8009a9c <HAL_RCCEx_PeriphCLKConfig+0x5a8>
  22458. break;
  22459. 8009a9a: bf00 nop
  22460. }
  22461. if (ret == HAL_OK)
  22462. 8009a9c: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  22463. 8009aa0: 2b00 cmp r3, #0
  22464. 8009aa2: d10d bne.n 8009ac0 <HAL_RCCEx_PeriphCLKConfig+0x5cc>
  22465. {
  22466. /* Set the source of SPI4/5 clock*/
  22467. __HAL_RCC_SPI45_CONFIG(PeriphClkInit->Spi45ClockSelection);
  22468. 8009aa4: 4b05 ldr r3, [pc, #20] @ (8009abc <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  22469. 8009aa6: 6d1b ldr r3, [r3, #80] @ 0x50
  22470. 8009aa8: f423 21e0 bic.w r1, r3, #458752 @ 0x70000
  22471. 8009aac: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22472. 8009ab0: 6e5b ldr r3, [r3, #100] @ 0x64
  22473. 8009ab2: 4a02 ldr r2, [pc, #8] @ (8009abc <HAL_RCCEx_PeriphCLKConfig+0x5c8>)
  22474. 8009ab4: 430b orrs r3, r1
  22475. 8009ab6: 6513 str r3, [r2, #80] @ 0x50
  22476. 8009ab8: e006 b.n 8009ac8 <HAL_RCCEx_PeriphCLKConfig+0x5d4>
  22477. 8009aba: bf00 nop
  22478. 8009abc: 58024400 .word 0x58024400
  22479. }
  22480. else
  22481. {
  22482. /* set overall return value */
  22483. status = ret;
  22484. 8009ac0: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  22485. 8009ac4: f887 311e strb.w r3, [r7, #286] @ 0x11e
  22486. }
  22487. }
  22488. /*---------------------------- SPI6 configuration -------------------------------*/
  22489. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SPI6) == RCC_PERIPHCLK_SPI6)
  22490. 8009ac8: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22491. 8009acc: e9d3 2300 ldrd r2, r3, [r3]
  22492. 8009ad0: f402 4380 and.w r3, r2, #16384 @ 0x4000
  22493. 8009ad4: f8c7 30d8 str.w r3, [r7, #216] @ 0xd8
  22494. 8009ad8: 2300 movs r3, #0
  22495. 8009ada: f8c7 30dc str.w r3, [r7, #220] @ 0xdc
  22496. 8009ade: e9d7 1236 ldrd r1, r2, [r7, #216] @ 0xd8
  22497. 8009ae2: 460b mov r3, r1
  22498. 8009ae4: 4313 orrs r3, r2
  22499. 8009ae6: d055 beq.n 8009b94 <HAL_RCCEx_PeriphCLKConfig+0x6a0>
  22500. {
  22501. switch (PeriphClkInit->Spi6ClockSelection)
  22502. 8009ae8: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22503. 8009aec: f8d3 30b0 ldr.w r3, [r3, #176] @ 0xb0
  22504. 8009af0: f1b3 4fa0 cmp.w r3, #1342177280 @ 0x50000000
  22505. 8009af4: d033 beq.n 8009b5e <HAL_RCCEx_PeriphCLKConfig+0x66a>
  22506. 8009af6: f1b3 4fa0 cmp.w r3, #1342177280 @ 0x50000000
  22507. 8009afa: d82c bhi.n 8009b56 <HAL_RCCEx_PeriphCLKConfig+0x662>
  22508. 8009afc: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  22509. 8009b00: d02f beq.n 8009b62 <HAL_RCCEx_PeriphCLKConfig+0x66e>
  22510. 8009b02: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  22511. 8009b06: d826 bhi.n 8009b56 <HAL_RCCEx_PeriphCLKConfig+0x662>
  22512. 8009b08: f1b3 5f40 cmp.w r3, #805306368 @ 0x30000000
  22513. 8009b0c: d02b beq.n 8009b66 <HAL_RCCEx_PeriphCLKConfig+0x672>
  22514. 8009b0e: f1b3 5f40 cmp.w r3, #805306368 @ 0x30000000
  22515. 8009b12: d820 bhi.n 8009b56 <HAL_RCCEx_PeriphCLKConfig+0x662>
  22516. 8009b14: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  22517. 8009b18: d012 beq.n 8009b40 <HAL_RCCEx_PeriphCLKConfig+0x64c>
  22518. 8009b1a: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  22519. 8009b1e: d81a bhi.n 8009b56 <HAL_RCCEx_PeriphCLKConfig+0x662>
  22520. 8009b20: 2b00 cmp r3, #0
  22521. 8009b22: d022 beq.n 8009b6a <HAL_RCCEx_PeriphCLKConfig+0x676>
  22522. 8009b24: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  22523. 8009b28: d115 bne.n 8009b56 <HAL_RCCEx_PeriphCLKConfig+0x662>
  22524. /* SPI6 clock source configuration done later after clock selection check */
  22525. break;
  22526. case RCC_SPI6CLKSOURCE_PLL2: /* PLL2 is used as clock source for SPI6*/
  22527. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
  22528. 8009b2a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22529. 8009b2e: 3308 adds r3, #8
  22530. 8009b30: 2101 movs r1, #1
  22531. 8009b32: 4618 mov r0, r3
  22532. 8009b34: f002 f85c bl 800bbf0 <RCCEx_PLL2_Config>
  22533. 8009b38: 4603 mov r3, r0
  22534. 8009b3a: f887 311f strb.w r3, [r7, #287] @ 0x11f
  22535. /* SPI6 clock source configuration done later after clock selection check */
  22536. break;
  22537. 8009b3e: e015 b.n 8009b6c <HAL_RCCEx_PeriphCLKConfig+0x678>
  22538. case RCC_SPI6CLKSOURCE_PLL3: /* PLL3 is used as clock source for SPI6*/
  22539. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
  22540. 8009b40: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22541. 8009b44: 3328 adds r3, #40 @ 0x28
  22542. 8009b46: 2101 movs r1, #1
  22543. 8009b48: 4618 mov r0, r3
  22544. 8009b4a: f002 f903 bl 800bd54 <RCCEx_PLL3_Config>
  22545. 8009b4e: 4603 mov r3, r0
  22546. 8009b50: f887 311f strb.w r3, [r7, #287] @ 0x11f
  22547. /* SPI6 clock source configuration done later after clock selection check */
  22548. break;
  22549. 8009b54: e00a b.n 8009b6c <HAL_RCCEx_PeriphCLKConfig+0x678>
  22550. /* SPI6 clock source configuration done later after clock selection check */
  22551. break;
  22552. #endif
  22553. default:
  22554. ret = HAL_ERROR;
  22555. 8009b56: 2301 movs r3, #1
  22556. 8009b58: f887 311f strb.w r3, [r7, #287] @ 0x11f
  22557. break;
  22558. 8009b5c: e006 b.n 8009b6c <HAL_RCCEx_PeriphCLKConfig+0x678>
  22559. break;
  22560. 8009b5e: bf00 nop
  22561. 8009b60: e004 b.n 8009b6c <HAL_RCCEx_PeriphCLKConfig+0x678>
  22562. break;
  22563. 8009b62: bf00 nop
  22564. 8009b64: e002 b.n 8009b6c <HAL_RCCEx_PeriphCLKConfig+0x678>
  22565. break;
  22566. 8009b66: bf00 nop
  22567. 8009b68: e000 b.n 8009b6c <HAL_RCCEx_PeriphCLKConfig+0x678>
  22568. break;
  22569. 8009b6a: bf00 nop
  22570. }
  22571. if (ret == HAL_OK)
  22572. 8009b6c: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  22573. 8009b70: 2b00 cmp r3, #0
  22574. 8009b72: d10b bne.n 8009b8c <HAL_RCCEx_PeriphCLKConfig+0x698>
  22575. {
  22576. /* Set the source of SPI6 clock*/
  22577. __HAL_RCC_SPI6_CONFIG(PeriphClkInit->Spi6ClockSelection);
  22578. 8009b74: 4ba3 ldr r3, [pc, #652] @ (8009e04 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  22579. 8009b76: 6d9b ldr r3, [r3, #88] @ 0x58
  22580. 8009b78: f023 41e0 bic.w r1, r3, #1879048192 @ 0x70000000
  22581. 8009b7c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22582. 8009b80: f8d3 30b0 ldr.w r3, [r3, #176] @ 0xb0
  22583. 8009b84: 4a9f ldr r2, [pc, #636] @ (8009e04 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  22584. 8009b86: 430b orrs r3, r1
  22585. 8009b88: 6593 str r3, [r2, #88] @ 0x58
  22586. 8009b8a: e003 b.n 8009b94 <HAL_RCCEx_PeriphCLKConfig+0x6a0>
  22587. }
  22588. else
  22589. {
  22590. /* set overall return value */
  22591. status = ret;
  22592. 8009b8c: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  22593. 8009b90: f887 311e strb.w r3, [r7, #286] @ 0x11e
  22594. }
  22595. #endif /*DSI*/
  22596. #if defined(FDCAN1) || defined(FDCAN2)
  22597. /*---------------------------- FDCAN configuration -------------------------------*/
  22598. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_FDCAN) == RCC_PERIPHCLK_FDCAN)
  22599. 8009b94: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22600. 8009b98: e9d3 2300 ldrd r2, r3, [r3]
  22601. 8009b9c: f402 4300 and.w r3, r2, #32768 @ 0x8000
  22602. 8009ba0: f8c7 30d0 str.w r3, [r7, #208] @ 0xd0
  22603. 8009ba4: 2300 movs r3, #0
  22604. 8009ba6: f8c7 30d4 str.w r3, [r7, #212] @ 0xd4
  22605. 8009baa: e9d7 1234 ldrd r1, r2, [r7, #208] @ 0xd0
  22606. 8009bae: 460b mov r3, r1
  22607. 8009bb0: 4313 orrs r3, r2
  22608. 8009bb2: d037 beq.n 8009c24 <HAL_RCCEx_PeriphCLKConfig+0x730>
  22609. {
  22610. switch (PeriphClkInit->FdcanClockSelection)
  22611. 8009bb4: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22612. 8009bb8: 6f1b ldr r3, [r3, #112] @ 0x70
  22613. 8009bba: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  22614. 8009bbe: d00e beq.n 8009bde <HAL_RCCEx_PeriphCLKConfig+0x6ea>
  22615. 8009bc0: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  22616. 8009bc4: d816 bhi.n 8009bf4 <HAL_RCCEx_PeriphCLKConfig+0x700>
  22617. 8009bc6: 2b00 cmp r3, #0
  22618. 8009bc8: d018 beq.n 8009bfc <HAL_RCCEx_PeriphCLKConfig+0x708>
  22619. 8009bca: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  22620. 8009bce: d111 bne.n 8009bf4 <HAL_RCCEx_PeriphCLKConfig+0x700>
  22621. {
  22622. case RCC_FDCANCLKSOURCE_PLL: /* PLL is used as clock source for FDCAN*/
  22623. /* Enable FDCAN Clock output generated form System PLL . */
  22624. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  22625. 8009bd0: 4b8c ldr r3, [pc, #560] @ (8009e04 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  22626. 8009bd2: 6adb ldr r3, [r3, #44] @ 0x2c
  22627. 8009bd4: 4a8b ldr r2, [pc, #556] @ (8009e04 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  22628. 8009bd6: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  22629. 8009bda: 62d3 str r3, [r2, #44] @ 0x2c
  22630. /* FDCAN clock source configuration done later after clock selection check */
  22631. break;
  22632. 8009bdc: e00f b.n 8009bfe <HAL_RCCEx_PeriphCLKConfig+0x70a>
  22633. case RCC_FDCANCLKSOURCE_PLL2: /* PLL2 is used as clock source for FDCAN*/
  22634. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
  22635. 8009bde: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22636. 8009be2: 3308 adds r3, #8
  22637. 8009be4: 2101 movs r1, #1
  22638. 8009be6: 4618 mov r0, r3
  22639. 8009be8: f002 f802 bl 800bbf0 <RCCEx_PLL2_Config>
  22640. 8009bec: 4603 mov r3, r0
  22641. 8009bee: f887 311f strb.w r3, [r7, #287] @ 0x11f
  22642. /* FDCAN clock source configuration done later after clock selection check */
  22643. break;
  22644. 8009bf2: e004 b.n 8009bfe <HAL_RCCEx_PeriphCLKConfig+0x70a>
  22645. /* HSE is used as clock source for FDCAN*/
  22646. /* FDCAN clock source configuration done later after clock selection check */
  22647. break;
  22648. default:
  22649. ret = HAL_ERROR;
  22650. 8009bf4: 2301 movs r3, #1
  22651. 8009bf6: f887 311f strb.w r3, [r7, #287] @ 0x11f
  22652. break;
  22653. 8009bfa: e000 b.n 8009bfe <HAL_RCCEx_PeriphCLKConfig+0x70a>
  22654. break;
  22655. 8009bfc: bf00 nop
  22656. }
  22657. if (ret == HAL_OK)
  22658. 8009bfe: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  22659. 8009c02: 2b00 cmp r3, #0
  22660. 8009c04: d10a bne.n 8009c1c <HAL_RCCEx_PeriphCLKConfig+0x728>
  22661. {
  22662. /* Set the source of FDCAN clock*/
  22663. __HAL_RCC_FDCAN_CONFIG(PeriphClkInit->FdcanClockSelection);
  22664. 8009c06: 4b7f ldr r3, [pc, #508] @ (8009e04 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  22665. 8009c08: 6d1b ldr r3, [r3, #80] @ 0x50
  22666. 8009c0a: f023 5140 bic.w r1, r3, #805306368 @ 0x30000000
  22667. 8009c0e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22668. 8009c12: 6f1b ldr r3, [r3, #112] @ 0x70
  22669. 8009c14: 4a7b ldr r2, [pc, #492] @ (8009e04 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  22670. 8009c16: 430b orrs r3, r1
  22671. 8009c18: 6513 str r3, [r2, #80] @ 0x50
  22672. 8009c1a: e003 b.n 8009c24 <HAL_RCCEx_PeriphCLKConfig+0x730>
  22673. }
  22674. else
  22675. {
  22676. /* set overall return value */
  22677. status = ret;
  22678. 8009c1c: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  22679. 8009c20: f887 311e strb.w r3, [r7, #286] @ 0x11e
  22680. }
  22681. }
  22682. #endif /*FDCAN1 || FDCAN2*/
  22683. /*---------------------------- FMC configuration -------------------------------*/
  22684. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_FMC) == RCC_PERIPHCLK_FMC)
  22685. 8009c24: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22686. 8009c28: e9d3 2300 ldrd r2, r3, [r3]
  22687. 8009c2c: f002 7380 and.w r3, r2, #16777216 @ 0x1000000
  22688. 8009c30: f8c7 30c8 str.w r3, [r7, #200] @ 0xc8
  22689. 8009c34: 2300 movs r3, #0
  22690. 8009c36: f8c7 30cc str.w r3, [r7, #204] @ 0xcc
  22691. 8009c3a: e9d7 1232 ldrd r1, r2, [r7, #200] @ 0xc8
  22692. 8009c3e: 460b mov r3, r1
  22693. 8009c40: 4313 orrs r3, r2
  22694. 8009c42: d039 beq.n 8009cb8 <HAL_RCCEx_PeriphCLKConfig+0x7c4>
  22695. {
  22696. switch (PeriphClkInit->FmcClockSelection)
  22697. 8009c44: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22698. 8009c48: 6c9b ldr r3, [r3, #72] @ 0x48
  22699. 8009c4a: 2b03 cmp r3, #3
  22700. 8009c4c: d81c bhi.n 8009c88 <HAL_RCCEx_PeriphCLKConfig+0x794>
  22701. 8009c4e: a201 add r2, pc, #4 @ (adr r2, 8009c54 <HAL_RCCEx_PeriphCLKConfig+0x760>)
  22702. 8009c50: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  22703. 8009c54: 08009c91 .word 0x08009c91
  22704. 8009c58: 08009c65 .word 0x08009c65
  22705. 8009c5c: 08009c73 .word 0x08009c73
  22706. 8009c60: 08009c91 .word 0x08009c91
  22707. {
  22708. case RCC_FMCCLKSOURCE_PLL: /* PLL is used as clock source for FMC*/
  22709. /* Enable FMC Clock output generated form System PLL . */
  22710. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  22711. 8009c64: 4b67 ldr r3, [pc, #412] @ (8009e04 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  22712. 8009c66: 6adb ldr r3, [r3, #44] @ 0x2c
  22713. 8009c68: 4a66 ldr r2, [pc, #408] @ (8009e04 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  22714. 8009c6a: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  22715. 8009c6e: 62d3 str r3, [r2, #44] @ 0x2c
  22716. /* FMC clock source configuration done later after clock selection check */
  22717. break;
  22718. 8009c70: e00f b.n 8009c92 <HAL_RCCEx_PeriphCLKConfig+0x79e>
  22719. case RCC_FMCCLKSOURCE_PLL2: /* PLL2 is used as clock source for FMC*/
  22720. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_R_UPDATE);
  22721. 8009c72: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22722. 8009c76: 3308 adds r3, #8
  22723. 8009c78: 2102 movs r1, #2
  22724. 8009c7a: 4618 mov r0, r3
  22725. 8009c7c: f001 ffb8 bl 800bbf0 <RCCEx_PLL2_Config>
  22726. 8009c80: 4603 mov r3, r0
  22727. 8009c82: f887 311f strb.w r3, [r7, #287] @ 0x11f
  22728. /* FMC clock source configuration done later after clock selection check */
  22729. break;
  22730. 8009c86: e004 b.n 8009c92 <HAL_RCCEx_PeriphCLKConfig+0x79e>
  22731. case RCC_FMCCLKSOURCE_HCLK:
  22732. /* D1/CD HCLK clock selected as FMC kernel peripheral clock */
  22733. break;
  22734. default:
  22735. ret = HAL_ERROR;
  22736. 8009c88: 2301 movs r3, #1
  22737. 8009c8a: f887 311f strb.w r3, [r7, #287] @ 0x11f
  22738. break;
  22739. 8009c8e: e000 b.n 8009c92 <HAL_RCCEx_PeriphCLKConfig+0x79e>
  22740. break;
  22741. 8009c90: bf00 nop
  22742. }
  22743. if (ret == HAL_OK)
  22744. 8009c92: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  22745. 8009c96: 2b00 cmp r3, #0
  22746. 8009c98: d10a bne.n 8009cb0 <HAL_RCCEx_PeriphCLKConfig+0x7bc>
  22747. {
  22748. /* Set the source of FMC clock*/
  22749. __HAL_RCC_FMC_CONFIG(PeriphClkInit->FmcClockSelection);
  22750. 8009c9a: 4b5a ldr r3, [pc, #360] @ (8009e04 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  22751. 8009c9c: 6cdb ldr r3, [r3, #76] @ 0x4c
  22752. 8009c9e: f023 0103 bic.w r1, r3, #3
  22753. 8009ca2: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22754. 8009ca6: 6c9b ldr r3, [r3, #72] @ 0x48
  22755. 8009ca8: 4a56 ldr r2, [pc, #344] @ (8009e04 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  22756. 8009caa: 430b orrs r3, r1
  22757. 8009cac: 64d3 str r3, [r2, #76] @ 0x4c
  22758. 8009cae: e003 b.n 8009cb8 <HAL_RCCEx_PeriphCLKConfig+0x7c4>
  22759. }
  22760. else
  22761. {
  22762. /* set overall return value */
  22763. status = ret;
  22764. 8009cb0: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  22765. 8009cb4: f887 311e strb.w r3, [r7, #286] @ 0x11e
  22766. }
  22767. }
  22768. /*---------------------------- RTC configuration -------------------------------*/
  22769. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC)
  22770. 8009cb8: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22771. 8009cbc: e9d3 2300 ldrd r2, r3, [r3]
  22772. 8009cc0: f402 0380 and.w r3, r2, #4194304 @ 0x400000
  22773. 8009cc4: f8c7 30c0 str.w r3, [r7, #192] @ 0xc0
  22774. 8009cc8: 2300 movs r3, #0
  22775. 8009cca: f8c7 30c4 str.w r3, [r7, #196] @ 0xc4
  22776. 8009cce: e9d7 1230 ldrd r1, r2, [r7, #192] @ 0xc0
  22777. 8009cd2: 460b mov r3, r1
  22778. 8009cd4: 4313 orrs r3, r2
  22779. 8009cd6: f000 809f beq.w 8009e18 <HAL_RCCEx_PeriphCLKConfig+0x924>
  22780. {
  22781. /* check for RTC Parameters used to output RTCCLK */
  22782. assert_param(IS_RCC_RTCCLKSOURCE(PeriphClkInit->RTCClockSelection));
  22783. /* Enable write access to Backup domain */
  22784. SET_BIT(PWR->CR1, PWR_CR1_DBP);
  22785. 8009cda: 4b4b ldr r3, [pc, #300] @ (8009e08 <HAL_RCCEx_PeriphCLKConfig+0x914>)
  22786. 8009cdc: 681b ldr r3, [r3, #0]
  22787. 8009cde: 4a4a ldr r2, [pc, #296] @ (8009e08 <HAL_RCCEx_PeriphCLKConfig+0x914>)
  22788. 8009ce0: f443 7380 orr.w r3, r3, #256 @ 0x100
  22789. 8009ce4: 6013 str r3, [r2, #0]
  22790. /* Wait for Backup domain Write protection disable */
  22791. tickstart = HAL_GetTick();
  22792. 8009ce6: f7f9 fbed bl 80034c4 <HAL_GetTick>
  22793. 8009cea: f8c7 0118 str.w r0, [r7, #280] @ 0x118
  22794. while ((PWR->CR1 & PWR_CR1_DBP) == 0U)
  22795. 8009cee: e00b b.n 8009d08 <HAL_RCCEx_PeriphCLKConfig+0x814>
  22796. {
  22797. if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE)
  22798. 8009cf0: f7f9 fbe8 bl 80034c4 <HAL_GetTick>
  22799. 8009cf4: 4602 mov r2, r0
  22800. 8009cf6: f8d7 3118 ldr.w r3, [r7, #280] @ 0x118
  22801. 8009cfa: 1ad3 subs r3, r2, r3
  22802. 8009cfc: 2b64 cmp r3, #100 @ 0x64
  22803. 8009cfe: d903 bls.n 8009d08 <HAL_RCCEx_PeriphCLKConfig+0x814>
  22804. {
  22805. ret = HAL_TIMEOUT;
  22806. 8009d00: 2303 movs r3, #3
  22807. 8009d02: f887 311f strb.w r3, [r7, #287] @ 0x11f
  22808. break;
  22809. 8009d06: e005 b.n 8009d14 <HAL_RCCEx_PeriphCLKConfig+0x820>
  22810. while ((PWR->CR1 & PWR_CR1_DBP) == 0U)
  22811. 8009d08: 4b3f ldr r3, [pc, #252] @ (8009e08 <HAL_RCCEx_PeriphCLKConfig+0x914>)
  22812. 8009d0a: 681b ldr r3, [r3, #0]
  22813. 8009d0c: f403 7380 and.w r3, r3, #256 @ 0x100
  22814. 8009d10: 2b00 cmp r3, #0
  22815. 8009d12: d0ed beq.n 8009cf0 <HAL_RCCEx_PeriphCLKConfig+0x7fc>
  22816. }
  22817. }
  22818. if (ret == HAL_OK)
  22819. 8009d14: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  22820. 8009d18: 2b00 cmp r3, #0
  22821. 8009d1a: d179 bne.n 8009e10 <HAL_RCCEx_PeriphCLKConfig+0x91c>
  22822. {
  22823. /* Reset the Backup domain only if the RTC Clock source selection is modified */
  22824. if ((RCC->BDCR & RCC_BDCR_RTCSEL) != (PeriphClkInit->RTCClockSelection & RCC_BDCR_RTCSEL))
  22825. 8009d1c: 4b39 ldr r3, [pc, #228] @ (8009e04 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  22826. 8009d1e: 6f1a ldr r2, [r3, #112] @ 0x70
  22827. 8009d20: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22828. 8009d24: f8d3 30b4 ldr.w r3, [r3, #180] @ 0xb4
  22829. 8009d28: 4053 eors r3, r2
  22830. 8009d2a: f403 7340 and.w r3, r3, #768 @ 0x300
  22831. 8009d2e: 2b00 cmp r3, #0
  22832. 8009d30: d015 beq.n 8009d5e <HAL_RCCEx_PeriphCLKConfig+0x86a>
  22833. {
  22834. /* Store the content of BDCR register before the reset of Backup Domain */
  22835. tmpreg = (RCC->BDCR & ~(RCC_BDCR_RTCSEL));
  22836. 8009d32: 4b34 ldr r3, [pc, #208] @ (8009e04 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  22837. 8009d34: 6f1b ldr r3, [r3, #112] @ 0x70
  22838. 8009d36: f423 7340 bic.w r3, r3, #768 @ 0x300
  22839. 8009d3a: f8c7 3114 str.w r3, [r7, #276] @ 0x114
  22840. /* RTC Clock selection can be changed only if the Backup Domain is reset */
  22841. __HAL_RCC_BACKUPRESET_FORCE();
  22842. 8009d3e: 4b31 ldr r3, [pc, #196] @ (8009e04 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  22843. 8009d40: 6f1b ldr r3, [r3, #112] @ 0x70
  22844. 8009d42: 4a30 ldr r2, [pc, #192] @ (8009e04 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  22845. 8009d44: f443 3380 orr.w r3, r3, #65536 @ 0x10000
  22846. 8009d48: 6713 str r3, [r2, #112] @ 0x70
  22847. __HAL_RCC_BACKUPRESET_RELEASE();
  22848. 8009d4a: 4b2e ldr r3, [pc, #184] @ (8009e04 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  22849. 8009d4c: 6f1b ldr r3, [r3, #112] @ 0x70
  22850. 8009d4e: 4a2d ldr r2, [pc, #180] @ (8009e04 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  22851. 8009d50: f423 3380 bic.w r3, r3, #65536 @ 0x10000
  22852. 8009d54: 6713 str r3, [r2, #112] @ 0x70
  22853. /* Restore the Content of BDCR register */
  22854. RCC->BDCR = tmpreg;
  22855. 8009d56: 4a2b ldr r2, [pc, #172] @ (8009e04 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  22856. 8009d58: f8d7 3114 ldr.w r3, [r7, #276] @ 0x114
  22857. 8009d5c: 6713 str r3, [r2, #112] @ 0x70
  22858. }
  22859. /* If LSE is selected as RTC clock source (and enabled prior to Backup Domain reset), wait for LSE reactivation */
  22860. if (PeriphClkInit->RTCClockSelection == RCC_RTCCLKSOURCE_LSE)
  22861. 8009d5e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22862. 8009d62: f8d3 30b4 ldr.w r3, [r3, #180] @ 0xb4
  22863. 8009d66: f5b3 7f80 cmp.w r3, #256 @ 0x100
  22864. 8009d6a: d118 bne.n 8009d9e <HAL_RCCEx_PeriphCLKConfig+0x8aa>
  22865. {
  22866. /* Get Start Tick*/
  22867. tickstart = HAL_GetTick();
  22868. 8009d6c: f7f9 fbaa bl 80034c4 <HAL_GetTick>
  22869. 8009d70: f8c7 0118 str.w r0, [r7, #280] @ 0x118
  22870. /* Wait till LSE is ready */
  22871. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == 0U)
  22872. 8009d74: e00d b.n 8009d92 <HAL_RCCEx_PeriphCLKConfig+0x89e>
  22873. {
  22874. if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
  22875. 8009d76: f7f9 fba5 bl 80034c4 <HAL_GetTick>
  22876. 8009d7a: 4602 mov r2, r0
  22877. 8009d7c: f8d7 3118 ldr.w r3, [r7, #280] @ 0x118
  22878. 8009d80: 1ad2 subs r2, r2, r3
  22879. 8009d82: f241 3388 movw r3, #5000 @ 0x1388
  22880. 8009d86: 429a cmp r2, r3
  22881. 8009d88: d903 bls.n 8009d92 <HAL_RCCEx_PeriphCLKConfig+0x89e>
  22882. {
  22883. ret = HAL_TIMEOUT;
  22884. 8009d8a: 2303 movs r3, #3
  22885. 8009d8c: f887 311f strb.w r3, [r7, #287] @ 0x11f
  22886. break;
  22887. 8009d90: e005 b.n 8009d9e <HAL_RCCEx_PeriphCLKConfig+0x8aa>
  22888. while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == 0U)
  22889. 8009d92: 4b1c ldr r3, [pc, #112] @ (8009e04 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  22890. 8009d94: 6f1b ldr r3, [r3, #112] @ 0x70
  22891. 8009d96: f003 0302 and.w r3, r3, #2
  22892. 8009d9a: 2b00 cmp r3, #0
  22893. 8009d9c: d0eb beq.n 8009d76 <HAL_RCCEx_PeriphCLKConfig+0x882>
  22894. }
  22895. }
  22896. }
  22897. if (ret == HAL_OK)
  22898. 8009d9e: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  22899. 8009da2: 2b00 cmp r3, #0
  22900. 8009da4: d129 bne.n 8009dfa <HAL_RCCEx_PeriphCLKConfig+0x906>
  22901. {
  22902. __HAL_RCC_RTC_CONFIG(PeriphClkInit->RTCClockSelection);
  22903. 8009da6: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22904. 8009daa: f8d3 30b4 ldr.w r3, [r3, #180] @ 0xb4
  22905. 8009dae: f403 7340 and.w r3, r3, #768 @ 0x300
  22906. 8009db2: f5b3 7f40 cmp.w r3, #768 @ 0x300
  22907. 8009db6: d10e bne.n 8009dd6 <HAL_RCCEx_PeriphCLKConfig+0x8e2>
  22908. 8009db8: 4b12 ldr r3, [pc, #72] @ (8009e04 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  22909. 8009dba: 691b ldr r3, [r3, #16]
  22910. 8009dbc: f423 517c bic.w r1, r3, #16128 @ 0x3f00
  22911. 8009dc0: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22912. 8009dc4: f8d3 30b4 ldr.w r3, [r3, #180] @ 0xb4
  22913. 8009dc8: 091a lsrs r2, r3, #4
  22914. 8009dca: 4b10 ldr r3, [pc, #64] @ (8009e0c <HAL_RCCEx_PeriphCLKConfig+0x918>)
  22915. 8009dcc: 4013 ands r3, r2
  22916. 8009dce: 4a0d ldr r2, [pc, #52] @ (8009e04 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  22917. 8009dd0: 430b orrs r3, r1
  22918. 8009dd2: 6113 str r3, [r2, #16]
  22919. 8009dd4: e005 b.n 8009de2 <HAL_RCCEx_PeriphCLKConfig+0x8ee>
  22920. 8009dd6: 4b0b ldr r3, [pc, #44] @ (8009e04 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  22921. 8009dd8: 691b ldr r3, [r3, #16]
  22922. 8009dda: 4a0a ldr r2, [pc, #40] @ (8009e04 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  22923. 8009ddc: f423 537c bic.w r3, r3, #16128 @ 0x3f00
  22924. 8009de0: 6113 str r3, [r2, #16]
  22925. 8009de2: 4b08 ldr r3, [pc, #32] @ (8009e04 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  22926. 8009de4: 6f19 ldr r1, [r3, #112] @ 0x70
  22927. 8009de6: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22928. 8009dea: f8d3 30b4 ldr.w r3, [r3, #180] @ 0xb4
  22929. 8009dee: f3c3 030b ubfx r3, r3, #0, #12
  22930. 8009df2: 4a04 ldr r2, [pc, #16] @ (8009e04 <HAL_RCCEx_PeriphCLKConfig+0x910>)
  22931. 8009df4: 430b orrs r3, r1
  22932. 8009df6: 6713 str r3, [r2, #112] @ 0x70
  22933. 8009df8: e00e b.n 8009e18 <HAL_RCCEx_PeriphCLKConfig+0x924>
  22934. }
  22935. else
  22936. {
  22937. /* set overall return value */
  22938. status = ret;
  22939. 8009dfa: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  22940. 8009dfe: f887 311e strb.w r3, [r7, #286] @ 0x11e
  22941. 8009e02: e009 b.n 8009e18 <HAL_RCCEx_PeriphCLKConfig+0x924>
  22942. 8009e04: 58024400 .word 0x58024400
  22943. 8009e08: 58024800 .word 0x58024800
  22944. 8009e0c: 00ffffcf .word 0x00ffffcf
  22945. }
  22946. }
  22947. else
  22948. {
  22949. /* set overall return value */
  22950. status = ret;
  22951. 8009e10: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  22952. 8009e14: f887 311e strb.w r3, [r7, #286] @ 0x11e
  22953. }
  22954. }
  22955. /*-------------------------- USART1/6 configuration --------------------------*/
  22956. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USART16) == RCC_PERIPHCLK_USART16)
  22957. 8009e18: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22958. 8009e1c: e9d3 2300 ldrd r2, r3, [r3]
  22959. 8009e20: f002 0301 and.w r3, r2, #1
  22960. 8009e24: f8c7 30b8 str.w r3, [r7, #184] @ 0xb8
  22961. 8009e28: 2300 movs r3, #0
  22962. 8009e2a: f8c7 30bc str.w r3, [r7, #188] @ 0xbc
  22963. 8009e2e: e9d7 122e ldrd r1, r2, [r7, #184] @ 0xb8
  22964. 8009e32: 460b mov r3, r1
  22965. 8009e34: 4313 orrs r3, r2
  22966. 8009e36: f000 8089 beq.w 8009f4c <HAL_RCCEx_PeriphCLKConfig+0xa58>
  22967. {
  22968. switch (PeriphClkInit->Usart16ClockSelection)
  22969. 8009e3a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  22970. 8009e3e: 6fdb ldr r3, [r3, #124] @ 0x7c
  22971. 8009e40: 2b28 cmp r3, #40 @ 0x28
  22972. 8009e42: d86b bhi.n 8009f1c <HAL_RCCEx_PeriphCLKConfig+0xa28>
  22973. 8009e44: a201 add r2, pc, #4 @ (adr r2, 8009e4c <HAL_RCCEx_PeriphCLKConfig+0x958>)
  22974. 8009e46: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  22975. 8009e4a: bf00 nop
  22976. 8009e4c: 08009f25 .word 0x08009f25
  22977. 8009e50: 08009f1d .word 0x08009f1d
  22978. 8009e54: 08009f1d .word 0x08009f1d
  22979. 8009e58: 08009f1d .word 0x08009f1d
  22980. 8009e5c: 08009f1d .word 0x08009f1d
  22981. 8009e60: 08009f1d .word 0x08009f1d
  22982. 8009e64: 08009f1d .word 0x08009f1d
  22983. 8009e68: 08009f1d .word 0x08009f1d
  22984. 8009e6c: 08009ef1 .word 0x08009ef1
  22985. 8009e70: 08009f1d .word 0x08009f1d
  22986. 8009e74: 08009f1d .word 0x08009f1d
  22987. 8009e78: 08009f1d .word 0x08009f1d
  22988. 8009e7c: 08009f1d .word 0x08009f1d
  22989. 8009e80: 08009f1d .word 0x08009f1d
  22990. 8009e84: 08009f1d .word 0x08009f1d
  22991. 8009e88: 08009f1d .word 0x08009f1d
  22992. 8009e8c: 08009f07 .word 0x08009f07
  22993. 8009e90: 08009f1d .word 0x08009f1d
  22994. 8009e94: 08009f1d .word 0x08009f1d
  22995. 8009e98: 08009f1d .word 0x08009f1d
  22996. 8009e9c: 08009f1d .word 0x08009f1d
  22997. 8009ea0: 08009f1d .word 0x08009f1d
  22998. 8009ea4: 08009f1d .word 0x08009f1d
  22999. 8009ea8: 08009f1d .word 0x08009f1d
  23000. 8009eac: 08009f25 .word 0x08009f25
  23001. 8009eb0: 08009f1d .word 0x08009f1d
  23002. 8009eb4: 08009f1d .word 0x08009f1d
  23003. 8009eb8: 08009f1d .word 0x08009f1d
  23004. 8009ebc: 08009f1d .word 0x08009f1d
  23005. 8009ec0: 08009f1d .word 0x08009f1d
  23006. 8009ec4: 08009f1d .word 0x08009f1d
  23007. 8009ec8: 08009f1d .word 0x08009f1d
  23008. 8009ecc: 08009f25 .word 0x08009f25
  23009. 8009ed0: 08009f1d .word 0x08009f1d
  23010. 8009ed4: 08009f1d .word 0x08009f1d
  23011. 8009ed8: 08009f1d .word 0x08009f1d
  23012. 8009edc: 08009f1d .word 0x08009f1d
  23013. 8009ee0: 08009f1d .word 0x08009f1d
  23014. 8009ee4: 08009f1d .word 0x08009f1d
  23015. 8009ee8: 08009f1d .word 0x08009f1d
  23016. 8009eec: 08009f25 .word 0x08009f25
  23017. case RCC_USART16CLKSOURCE_PCLK2: /* CD/D2 PCLK2 as clock source for USART1/6 */
  23018. /* USART1/6 clock source configuration done later after clock selection check */
  23019. break;
  23020. case RCC_USART16CLKSOURCE_PLL2: /* PLL2 is used as clock source for USART1/6 */
  23021. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
  23022. 8009ef0: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23023. 8009ef4: 3308 adds r3, #8
  23024. 8009ef6: 2101 movs r1, #1
  23025. 8009ef8: 4618 mov r0, r3
  23026. 8009efa: f001 fe79 bl 800bbf0 <RCCEx_PLL2_Config>
  23027. 8009efe: 4603 mov r3, r0
  23028. 8009f00: f887 311f strb.w r3, [r7, #287] @ 0x11f
  23029. /* USART1/6 clock source configuration done later after clock selection check */
  23030. break;
  23031. 8009f04: e00f b.n 8009f26 <HAL_RCCEx_PeriphCLKConfig+0xa32>
  23032. case RCC_USART16CLKSOURCE_PLL3: /* PLL3 is used as clock source for USART1/6 */
  23033. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
  23034. 8009f06: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23035. 8009f0a: 3328 adds r3, #40 @ 0x28
  23036. 8009f0c: 2101 movs r1, #1
  23037. 8009f0e: 4618 mov r0, r3
  23038. 8009f10: f001 ff20 bl 800bd54 <RCCEx_PLL3_Config>
  23039. 8009f14: 4603 mov r3, r0
  23040. 8009f16: f887 311f strb.w r3, [r7, #287] @ 0x11f
  23041. /* USART1/6 clock source configuration done later after clock selection check */
  23042. break;
  23043. 8009f1a: e004 b.n 8009f26 <HAL_RCCEx_PeriphCLKConfig+0xa32>
  23044. /* LSE, oscillator is used as source of USART1/6 clock */
  23045. /* USART1/6 clock source configuration done later after clock selection check */
  23046. break;
  23047. default:
  23048. ret = HAL_ERROR;
  23049. 8009f1c: 2301 movs r3, #1
  23050. 8009f1e: f887 311f strb.w r3, [r7, #287] @ 0x11f
  23051. break;
  23052. 8009f22: e000 b.n 8009f26 <HAL_RCCEx_PeriphCLKConfig+0xa32>
  23053. break;
  23054. 8009f24: bf00 nop
  23055. }
  23056. if (ret == HAL_OK)
  23057. 8009f26: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  23058. 8009f2a: 2b00 cmp r3, #0
  23059. 8009f2c: d10a bne.n 8009f44 <HAL_RCCEx_PeriphCLKConfig+0xa50>
  23060. {
  23061. /* Set the source of USART1/6 clock */
  23062. __HAL_RCC_USART16_CONFIG(PeriphClkInit->Usart16ClockSelection);
  23063. 8009f2e: 4bbf ldr r3, [pc, #764] @ (800a22c <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  23064. 8009f30: 6d5b ldr r3, [r3, #84] @ 0x54
  23065. 8009f32: f023 0138 bic.w r1, r3, #56 @ 0x38
  23066. 8009f36: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23067. 8009f3a: 6fdb ldr r3, [r3, #124] @ 0x7c
  23068. 8009f3c: 4abb ldr r2, [pc, #748] @ (800a22c <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  23069. 8009f3e: 430b orrs r3, r1
  23070. 8009f40: 6553 str r3, [r2, #84] @ 0x54
  23071. 8009f42: e003 b.n 8009f4c <HAL_RCCEx_PeriphCLKConfig+0xa58>
  23072. }
  23073. else
  23074. {
  23075. /* set overall return value */
  23076. status = ret;
  23077. 8009f44: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  23078. 8009f48: f887 311e strb.w r3, [r7, #286] @ 0x11e
  23079. }
  23080. }
  23081. /*-------------------------- USART2/3/4/5/7/8 Configuration --------------------------*/
  23082. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USART234578) == RCC_PERIPHCLK_USART234578)
  23083. 8009f4c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23084. 8009f50: e9d3 2300 ldrd r2, r3, [r3]
  23085. 8009f54: f002 0302 and.w r3, r2, #2
  23086. 8009f58: f8c7 30b0 str.w r3, [r7, #176] @ 0xb0
  23087. 8009f5c: 2300 movs r3, #0
  23088. 8009f5e: f8c7 30b4 str.w r3, [r7, #180] @ 0xb4
  23089. 8009f62: e9d7 122c ldrd r1, r2, [r7, #176] @ 0xb0
  23090. 8009f66: 460b mov r3, r1
  23091. 8009f68: 4313 orrs r3, r2
  23092. 8009f6a: d041 beq.n 8009ff0 <HAL_RCCEx_PeriphCLKConfig+0xafc>
  23093. {
  23094. switch (PeriphClkInit->Usart234578ClockSelection)
  23095. 8009f6c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23096. 8009f70: 6f9b ldr r3, [r3, #120] @ 0x78
  23097. 8009f72: 2b05 cmp r3, #5
  23098. 8009f74: d824 bhi.n 8009fc0 <HAL_RCCEx_PeriphCLKConfig+0xacc>
  23099. 8009f76: a201 add r2, pc, #4 @ (adr r2, 8009f7c <HAL_RCCEx_PeriphCLKConfig+0xa88>)
  23100. 8009f78: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  23101. 8009f7c: 08009fc9 .word 0x08009fc9
  23102. 8009f80: 08009f95 .word 0x08009f95
  23103. 8009f84: 08009fab .word 0x08009fab
  23104. 8009f88: 08009fc9 .word 0x08009fc9
  23105. 8009f8c: 08009fc9 .word 0x08009fc9
  23106. 8009f90: 08009fc9 .word 0x08009fc9
  23107. case RCC_USART234578CLKSOURCE_PCLK1: /* CD/D2 PCLK1 as clock source for USART2/3/4/5/7/8 */
  23108. /* USART2/3/4/5/7/8 clock source configuration done later after clock selection check */
  23109. break;
  23110. case RCC_USART234578CLKSOURCE_PLL2: /* PLL2 is used as clock source for USART2/3/4/5/7/8 */
  23111. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
  23112. 8009f94: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23113. 8009f98: 3308 adds r3, #8
  23114. 8009f9a: 2101 movs r1, #1
  23115. 8009f9c: 4618 mov r0, r3
  23116. 8009f9e: f001 fe27 bl 800bbf0 <RCCEx_PLL2_Config>
  23117. 8009fa2: 4603 mov r3, r0
  23118. 8009fa4: f887 311f strb.w r3, [r7, #287] @ 0x11f
  23119. /* USART2/3/4/5/7/8 clock source configuration done later after clock selection check */
  23120. break;
  23121. 8009fa8: e00f b.n 8009fca <HAL_RCCEx_PeriphCLKConfig+0xad6>
  23122. case RCC_USART234578CLKSOURCE_PLL3: /* PLL3 is used as clock source for USART2/3/4/5/7/8 */
  23123. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
  23124. 8009faa: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23125. 8009fae: 3328 adds r3, #40 @ 0x28
  23126. 8009fb0: 2101 movs r1, #1
  23127. 8009fb2: 4618 mov r0, r3
  23128. 8009fb4: f001 fece bl 800bd54 <RCCEx_PLL3_Config>
  23129. 8009fb8: 4603 mov r3, r0
  23130. 8009fba: f887 311f strb.w r3, [r7, #287] @ 0x11f
  23131. /* USART2/3/4/5/7/8 clock source configuration done later after clock selection check */
  23132. break;
  23133. 8009fbe: e004 b.n 8009fca <HAL_RCCEx_PeriphCLKConfig+0xad6>
  23134. /* LSE, oscillator is used as source of USART2/3/4/5/7/8 clock */
  23135. /* USART2/3/4/5/7/8 clock source configuration done later after clock selection check */
  23136. break;
  23137. default:
  23138. ret = HAL_ERROR;
  23139. 8009fc0: 2301 movs r3, #1
  23140. 8009fc2: f887 311f strb.w r3, [r7, #287] @ 0x11f
  23141. break;
  23142. 8009fc6: e000 b.n 8009fca <HAL_RCCEx_PeriphCLKConfig+0xad6>
  23143. break;
  23144. 8009fc8: bf00 nop
  23145. }
  23146. if (ret == HAL_OK)
  23147. 8009fca: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  23148. 8009fce: 2b00 cmp r3, #0
  23149. 8009fd0: d10a bne.n 8009fe8 <HAL_RCCEx_PeriphCLKConfig+0xaf4>
  23150. {
  23151. /* Set the source of USART2/3/4/5/7/8 clock */
  23152. __HAL_RCC_USART234578_CONFIG(PeriphClkInit->Usart234578ClockSelection);
  23153. 8009fd2: 4b96 ldr r3, [pc, #600] @ (800a22c <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  23154. 8009fd4: 6d5b ldr r3, [r3, #84] @ 0x54
  23155. 8009fd6: f023 0107 bic.w r1, r3, #7
  23156. 8009fda: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23157. 8009fde: 6f9b ldr r3, [r3, #120] @ 0x78
  23158. 8009fe0: 4a92 ldr r2, [pc, #584] @ (800a22c <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  23159. 8009fe2: 430b orrs r3, r1
  23160. 8009fe4: 6553 str r3, [r2, #84] @ 0x54
  23161. 8009fe6: e003 b.n 8009ff0 <HAL_RCCEx_PeriphCLKConfig+0xafc>
  23162. }
  23163. else
  23164. {
  23165. /* set overall return value */
  23166. status = ret;
  23167. 8009fe8: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  23168. 8009fec: f887 311e strb.w r3, [r7, #286] @ 0x11e
  23169. }
  23170. }
  23171. /*-------------------------- LPUART1 Configuration -------------------------*/
  23172. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPUART1) == RCC_PERIPHCLK_LPUART1)
  23173. 8009ff0: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23174. 8009ff4: e9d3 2300 ldrd r2, r3, [r3]
  23175. 8009ff8: f002 0304 and.w r3, r2, #4
  23176. 8009ffc: f8c7 30a8 str.w r3, [r7, #168] @ 0xa8
  23177. 800a000: 2300 movs r3, #0
  23178. 800a002: f8c7 30ac str.w r3, [r7, #172] @ 0xac
  23179. 800a006: e9d7 122a ldrd r1, r2, [r7, #168] @ 0xa8
  23180. 800a00a: 460b mov r3, r1
  23181. 800a00c: 4313 orrs r3, r2
  23182. 800a00e: d044 beq.n 800a09a <HAL_RCCEx_PeriphCLKConfig+0xba6>
  23183. {
  23184. switch (PeriphClkInit->Lpuart1ClockSelection)
  23185. 800a010: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23186. 800a014: f8d3 3094 ldr.w r3, [r3, #148] @ 0x94
  23187. 800a018: 2b05 cmp r3, #5
  23188. 800a01a: d825 bhi.n 800a068 <HAL_RCCEx_PeriphCLKConfig+0xb74>
  23189. 800a01c: a201 add r2, pc, #4 @ (adr r2, 800a024 <HAL_RCCEx_PeriphCLKConfig+0xb30>)
  23190. 800a01e: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  23191. 800a022: bf00 nop
  23192. 800a024: 0800a071 .word 0x0800a071
  23193. 800a028: 0800a03d .word 0x0800a03d
  23194. 800a02c: 0800a053 .word 0x0800a053
  23195. 800a030: 0800a071 .word 0x0800a071
  23196. 800a034: 0800a071 .word 0x0800a071
  23197. 800a038: 0800a071 .word 0x0800a071
  23198. case RCC_LPUART1CLKSOURCE_PCLK4: /* SRD/D3 PCLK1 (PCLK4) as clock source for LPUART1 */
  23199. /* LPUART1 clock source configuration done later after clock selection check */
  23200. break;
  23201. case RCC_LPUART1CLKSOURCE_PLL2: /* PLL2 is used as clock source for LPUART1 */
  23202. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
  23203. 800a03c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23204. 800a040: 3308 adds r3, #8
  23205. 800a042: 2101 movs r1, #1
  23206. 800a044: 4618 mov r0, r3
  23207. 800a046: f001 fdd3 bl 800bbf0 <RCCEx_PLL2_Config>
  23208. 800a04a: 4603 mov r3, r0
  23209. 800a04c: f887 311f strb.w r3, [r7, #287] @ 0x11f
  23210. /* LPUART1 clock source configuration done later after clock selection check */
  23211. break;
  23212. 800a050: e00f b.n 800a072 <HAL_RCCEx_PeriphCLKConfig+0xb7e>
  23213. case RCC_LPUART1CLKSOURCE_PLL3: /* PLL3 is used as clock source for LPUART1 */
  23214. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
  23215. 800a052: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23216. 800a056: 3328 adds r3, #40 @ 0x28
  23217. 800a058: 2101 movs r1, #1
  23218. 800a05a: 4618 mov r0, r3
  23219. 800a05c: f001 fe7a bl 800bd54 <RCCEx_PLL3_Config>
  23220. 800a060: 4603 mov r3, r0
  23221. 800a062: f887 311f strb.w r3, [r7, #287] @ 0x11f
  23222. /* LPUART1 clock source configuration done later after clock selection check */
  23223. break;
  23224. 800a066: e004 b.n 800a072 <HAL_RCCEx_PeriphCLKConfig+0xb7e>
  23225. /* LSE, oscillator is used as source of LPUART1 clock */
  23226. /* LPUART1 clock source configuration done later after clock selection check */
  23227. break;
  23228. default:
  23229. ret = HAL_ERROR;
  23230. 800a068: 2301 movs r3, #1
  23231. 800a06a: f887 311f strb.w r3, [r7, #287] @ 0x11f
  23232. break;
  23233. 800a06e: e000 b.n 800a072 <HAL_RCCEx_PeriphCLKConfig+0xb7e>
  23234. break;
  23235. 800a070: bf00 nop
  23236. }
  23237. if (ret == HAL_OK)
  23238. 800a072: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  23239. 800a076: 2b00 cmp r3, #0
  23240. 800a078: d10b bne.n 800a092 <HAL_RCCEx_PeriphCLKConfig+0xb9e>
  23241. {
  23242. /* Set the source of LPUART1 clock */
  23243. __HAL_RCC_LPUART1_CONFIG(PeriphClkInit->Lpuart1ClockSelection);
  23244. 800a07a: 4b6c ldr r3, [pc, #432] @ (800a22c <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  23245. 800a07c: 6d9b ldr r3, [r3, #88] @ 0x58
  23246. 800a07e: f023 0107 bic.w r1, r3, #7
  23247. 800a082: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23248. 800a086: f8d3 3094 ldr.w r3, [r3, #148] @ 0x94
  23249. 800a08a: 4a68 ldr r2, [pc, #416] @ (800a22c <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  23250. 800a08c: 430b orrs r3, r1
  23251. 800a08e: 6593 str r3, [r2, #88] @ 0x58
  23252. 800a090: e003 b.n 800a09a <HAL_RCCEx_PeriphCLKConfig+0xba6>
  23253. }
  23254. else
  23255. {
  23256. /* set overall return value */
  23257. status = ret;
  23258. 800a092: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  23259. 800a096: f887 311e strb.w r3, [r7, #286] @ 0x11e
  23260. }
  23261. }
  23262. /*---------------------------- LPTIM1 configuration -------------------------------*/
  23263. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPTIM1) == RCC_PERIPHCLK_LPTIM1)
  23264. 800a09a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23265. 800a09e: e9d3 2300 ldrd r2, r3, [r3]
  23266. 800a0a2: f002 0320 and.w r3, r2, #32
  23267. 800a0a6: f8c7 30a0 str.w r3, [r7, #160] @ 0xa0
  23268. 800a0aa: 2300 movs r3, #0
  23269. 800a0ac: f8c7 30a4 str.w r3, [r7, #164] @ 0xa4
  23270. 800a0b0: e9d7 1228 ldrd r1, r2, [r7, #160] @ 0xa0
  23271. 800a0b4: 460b mov r3, r1
  23272. 800a0b6: 4313 orrs r3, r2
  23273. 800a0b8: d055 beq.n 800a166 <HAL_RCCEx_PeriphCLKConfig+0xc72>
  23274. {
  23275. switch (PeriphClkInit->Lptim1ClockSelection)
  23276. 800a0ba: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23277. 800a0be: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  23278. 800a0c2: f1b3 4fa0 cmp.w r3, #1342177280 @ 0x50000000
  23279. 800a0c6: d033 beq.n 800a130 <HAL_RCCEx_PeriphCLKConfig+0xc3c>
  23280. 800a0c8: f1b3 4fa0 cmp.w r3, #1342177280 @ 0x50000000
  23281. 800a0cc: d82c bhi.n 800a128 <HAL_RCCEx_PeriphCLKConfig+0xc34>
  23282. 800a0ce: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  23283. 800a0d2: d02f beq.n 800a134 <HAL_RCCEx_PeriphCLKConfig+0xc40>
  23284. 800a0d4: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  23285. 800a0d8: d826 bhi.n 800a128 <HAL_RCCEx_PeriphCLKConfig+0xc34>
  23286. 800a0da: f1b3 5f40 cmp.w r3, #805306368 @ 0x30000000
  23287. 800a0de: d02b beq.n 800a138 <HAL_RCCEx_PeriphCLKConfig+0xc44>
  23288. 800a0e0: f1b3 5f40 cmp.w r3, #805306368 @ 0x30000000
  23289. 800a0e4: d820 bhi.n 800a128 <HAL_RCCEx_PeriphCLKConfig+0xc34>
  23290. 800a0e6: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  23291. 800a0ea: d012 beq.n 800a112 <HAL_RCCEx_PeriphCLKConfig+0xc1e>
  23292. 800a0ec: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  23293. 800a0f0: d81a bhi.n 800a128 <HAL_RCCEx_PeriphCLKConfig+0xc34>
  23294. 800a0f2: 2b00 cmp r3, #0
  23295. 800a0f4: d022 beq.n 800a13c <HAL_RCCEx_PeriphCLKConfig+0xc48>
  23296. 800a0f6: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  23297. 800a0fa: d115 bne.n 800a128 <HAL_RCCEx_PeriphCLKConfig+0xc34>
  23298. /* LPTIM1 clock source configuration done later after clock selection check */
  23299. break;
  23300. case RCC_LPTIM1CLKSOURCE_PLL2: /* PLL2 is used as clock source for LPTIM1*/
  23301. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  23302. 800a0fc: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23303. 800a100: 3308 adds r3, #8
  23304. 800a102: 2100 movs r1, #0
  23305. 800a104: 4618 mov r0, r3
  23306. 800a106: f001 fd73 bl 800bbf0 <RCCEx_PLL2_Config>
  23307. 800a10a: 4603 mov r3, r0
  23308. 800a10c: f887 311f strb.w r3, [r7, #287] @ 0x11f
  23309. /* LPTIM1 clock source configuration done later after clock selection check */
  23310. break;
  23311. 800a110: e015 b.n 800a13e <HAL_RCCEx_PeriphCLKConfig+0xc4a>
  23312. case RCC_LPTIM1CLKSOURCE_PLL3: /* PLL3 is used as clock source for LPTIM1*/
  23313. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE);
  23314. 800a112: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23315. 800a116: 3328 adds r3, #40 @ 0x28
  23316. 800a118: 2102 movs r1, #2
  23317. 800a11a: 4618 mov r0, r3
  23318. 800a11c: f001 fe1a bl 800bd54 <RCCEx_PLL3_Config>
  23319. 800a120: 4603 mov r3, r0
  23320. 800a122: f887 311f strb.w r3, [r7, #287] @ 0x11f
  23321. /* LPTIM1 clock source configuration done later after clock selection check */
  23322. break;
  23323. 800a126: e00a b.n 800a13e <HAL_RCCEx_PeriphCLKConfig+0xc4a>
  23324. /* HSI, HSE, or CSI oscillator is used as source of LPTIM1 clock */
  23325. /* LPTIM1 clock source configuration done later after clock selection check */
  23326. break;
  23327. default:
  23328. ret = HAL_ERROR;
  23329. 800a128: 2301 movs r3, #1
  23330. 800a12a: f887 311f strb.w r3, [r7, #287] @ 0x11f
  23331. break;
  23332. 800a12e: e006 b.n 800a13e <HAL_RCCEx_PeriphCLKConfig+0xc4a>
  23333. break;
  23334. 800a130: bf00 nop
  23335. 800a132: e004 b.n 800a13e <HAL_RCCEx_PeriphCLKConfig+0xc4a>
  23336. break;
  23337. 800a134: bf00 nop
  23338. 800a136: e002 b.n 800a13e <HAL_RCCEx_PeriphCLKConfig+0xc4a>
  23339. break;
  23340. 800a138: bf00 nop
  23341. 800a13a: e000 b.n 800a13e <HAL_RCCEx_PeriphCLKConfig+0xc4a>
  23342. break;
  23343. 800a13c: bf00 nop
  23344. }
  23345. if (ret == HAL_OK)
  23346. 800a13e: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  23347. 800a142: 2b00 cmp r3, #0
  23348. 800a144: d10b bne.n 800a15e <HAL_RCCEx_PeriphCLKConfig+0xc6a>
  23349. {
  23350. /* Set the source of LPTIM1 clock*/
  23351. __HAL_RCC_LPTIM1_CONFIG(PeriphClkInit->Lptim1ClockSelection);
  23352. 800a146: 4b39 ldr r3, [pc, #228] @ (800a22c <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  23353. 800a148: 6d5b ldr r3, [r3, #84] @ 0x54
  23354. 800a14a: f023 41e0 bic.w r1, r3, #1879048192 @ 0x70000000
  23355. 800a14e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23356. 800a152: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  23357. 800a156: 4a35 ldr r2, [pc, #212] @ (800a22c <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  23358. 800a158: 430b orrs r3, r1
  23359. 800a15a: 6553 str r3, [r2, #84] @ 0x54
  23360. 800a15c: e003 b.n 800a166 <HAL_RCCEx_PeriphCLKConfig+0xc72>
  23361. }
  23362. else
  23363. {
  23364. /* set overall return value */
  23365. status = ret;
  23366. 800a15e: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  23367. 800a162: f887 311e strb.w r3, [r7, #286] @ 0x11e
  23368. }
  23369. }
  23370. /*---------------------------- LPTIM2 configuration -------------------------------*/
  23371. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPTIM2) == RCC_PERIPHCLK_LPTIM2)
  23372. 800a166: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23373. 800a16a: e9d3 2300 ldrd r2, r3, [r3]
  23374. 800a16e: f002 0340 and.w r3, r2, #64 @ 0x40
  23375. 800a172: f8c7 3098 str.w r3, [r7, #152] @ 0x98
  23376. 800a176: 2300 movs r3, #0
  23377. 800a178: f8c7 309c str.w r3, [r7, #156] @ 0x9c
  23378. 800a17c: e9d7 1226 ldrd r1, r2, [r7, #152] @ 0x98
  23379. 800a180: 460b mov r3, r1
  23380. 800a182: 4313 orrs r3, r2
  23381. 800a184: d058 beq.n 800a238 <HAL_RCCEx_PeriphCLKConfig+0xd44>
  23382. {
  23383. switch (PeriphClkInit->Lptim2ClockSelection)
  23384. 800a186: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23385. 800a18a: f8d3 309c ldr.w r3, [r3, #156] @ 0x9c
  23386. 800a18e: f5b3 5fa0 cmp.w r3, #5120 @ 0x1400
  23387. 800a192: d033 beq.n 800a1fc <HAL_RCCEx_PeriphCLKConfig+0xd08>
  23388. 800a194: f5b3 5fa0 cmp.w r3, #5120 @ 0x1400
  23389. 800a198: d82c bhi.n 800a1f4 <HAL_RCCEx_PeriphCLKConfig+0xd00>
  23390. 800a19a: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  23391. 800a19e: d02f beq.n 800a200 <HAL_RCCEx_PeriphCLKConfig+0xd0c>
  23392. 800a1a0: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  23393. 800a1a4: d826 bhi.n 800a1f4 <HAL_RCCEx_PeriphCLKConfig+0xd00>
  23394. 800a1a6: f5b3 6f40 cmp.w r3, #3072 @ 0xc00
  23395. 800a1aa: d02b beq.n 800a204 <HAL_RCCEx_PeriphCLKConfig+0xd10>
  23396. 800a1ac: f5b3 6f40 cmp.w r3, #3072 @ 0xc00
  23397. 800a1b0: d820 bhi.n 800a1f4 <HAL_RCCEx_PeriphCLKConfig+0xd00>
  23398. 800a1b2: f5b3 6f00 cmp.w r3, #2048 @ 0x800
  23399. 800a1b6: d012 beq.n 800a1de <HAL_RCCEx_PeriphCLKConfig+0xcea>
  23400. 800a1b8: f5b3 6f00 cmp.w r3, #2048 @ 0x800
  23401. 800a1bc: d81a bhi.n 800a1f4 <HAL_RCCEx_PeriphCLKConfig+0xd00>
  23402. 800a1be: 2b00 cmp r3, #0
  23403. 800a1c0: d022 beq.n 800a208 <HAL_RCCEx_PeriphCLKConfig+0xd14>
  23404. 800a1c2: f5b3 6f80 cmp.w r3, #1024 @ 0x400
  23405. 800a1c6: d115 bne.n 800a1f4 <HAL_RCCEx_PeriphCLKConfig+0xd00>
  23406. /* LPTIM2 clock source configuration done later after clock selection check */
  23407. break;
  23408. case RCC_LPTIM2CLKSOURCE_PLL2: /* PLL2 is used as clock source for LPTIM2*/
  23409. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  23410. 800a1c8: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23411. 800a1cc: 3308 adds r3, #8
  23412. 800a1ce: 2100 movs r1, #0
  23413. 800a1d0: 4618 mov r0, r3
  23414. 800a1d2: f001 fd0d bl 800bbf0 <RCCEx_PLL2_Config>
  23415. 800a1d6: 4603 mov r3, r0
  23416. 800a1d8: f887 311f strb.w r3, [r7, #287] @ 0x11f
  23417. /* LPTIM2 clock source configuration done later after clock selection check */
  23418. break;
  23419. 800a1dc: e015 b.n 800a20a <HAL_RCCEx_PeriphCLKConfig+0xd16>
  23420. case RCC_LPTIM2CLKSOURCE_PLL3: /* PLL3 is used as clock source for LPTIM2*/
  23421. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE);
  23422. 800a1de: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23423. 800a1e2: 3328 adds r3, #40 @ 0x28
  23424. 800a1e4: 2102 movs r1, #2
  23425. 800a1e6: 4618 mov r0, r3
  23426. 800a1e8: f001 fdb4 bl 800bd54 <RCCEx_PLL3_Config>
  23427. 800a1ec: 4603 mov r3, r0
  23428. 800a1ee: f887 311f strb.w r3, [r7, #287] @ 0x11f
  23429. /* LPTIM2 clock source configuration done later after clock selection check */
  23430. break;
  23431. 800a1f2: e00a b.n 800a20a <HAL_RCCEx_PeriphCLKConfig+0xd16>
  23432. /* HSI, HSE, or CSI oscillator is used as source of LPTIM2 clock */
  23433. /* LPTIM2 clock source configuration done later after clock selection check */
  23434. break;
  23435. default:
  23436. ret = HAL_ERROR;
  23437. 800a1f4: 2301 movs r3, #1
  23438. 800a1f6: f887 311f strb.w r3, [r7, #287] @ 0x11f
  23439. break;
  23440. 800a1fa: e006 b.n 800a20a <HAL_RCCEx_PeriphCLKConfig+0xd16>
  23441. break;
  23442. 800a1fc: bf00 nop
  23443. 800a1fe: e004 b.n 800a20a <HAL_RCCEx_PeriphCLKConfig+0xd16>
  23444. break;
  23445. 800a200: bf00 nop
  23446. 800a202: e002 b.n 800a20a <HAL_RCCEx_PeriphCLKConfig+0xd16>
  23447. break;
  23448. 800a204: bf00 nop
  23449. 800a206: e000 b.n 800a20a <HAL_RCCEx_PeriphCLKConfig+0xd16>
  23450. break;
  23451. 800a208: bf00 nop
  23452. }
  23453. if (ret == HAL_OK)
  23454. 800a20a: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  23455. 800a20e: 2b00 cmp r3, #0
  23456. 800a210: d10e bne.n 800a230 <HAL_RCCEx_PeriphCLKConfig+0xd3c>
  23457. {
  23458. /* Set the source of LPTIM2 clock*/
  23459. __HAL_RCC_LPTIM2_CONFIG(PeriphClkInit->Lptim2ClockSelection);
  23460. 800a212: 4b06 ldr r3, [pc, #24] @ (800a22c <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  23461. 800a214: 6d9b ldr r3, [r3, #88] @ 0x58
  23462. 800a216: f423 51e0 bic.w r1, r3, #7168 @ 0x1c00
  23463. 800a21a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23464. 800a21e: f8d3 309c ldr.w r3, [r3, #156] @ 0x9c
  23465. 800a222: 4a02 ldr r2, [pc, #8] @ (800a22c <HAL_RCCEx_PeriphCLKConfig+0xd38>)
  23466. 800a224: 430b orrs r3, r1
  23467. 800a226: 6593 str r3, [r2, #88] @ 0x58
  23468. 800a228: e006 b.n 800a238 <HAL_RCCEx_PeriphCLKConfig+0xd44>
  23469. 800a22a: bf00 nop
  23470. 800a22c: 58024400 .word 0x58024400
  23471. }
  23472. else
  23473. {
  23474. /* set overall return value */
  23475. status = ret;
  23476. 800a230: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  23477. 800a234: f887 311e strb.w r3, [r7, #286] @ 0x11e
  23478. }
  23479. }
  23480. /*---------------------------- LPTIM345 configuration -------------------------------*/
  23481. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPTIM345) == RCC_PERIPHCLK_LPTIM345)
  23482. 800a238: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23483. 800a23c: e9d3 2300 ldrd r2, r3, [r3]
  23484. 800a240: f002 0380 and.w r3, r2, #128 @ 0x80
  23485. 800a244: f8c7 3090 str.w r3, [r7, #144] @ 0x90
  23486. 800a248: 2300 movs r3, #0
  23487. 800a24a: f8c7 3094 str.w r3, [r7, #148] @ 0x94
  23488. 800a24e: e9d7 1224 ldrd r1, r2, [r7, #144] @ 0x90
  23489. 800a252: 460b mov r3, r1
  23490. 800a254: 4313 orrs r3, r2
  23491. 800a256: d055 beq.n 800a304 <HAL_RCCEx_PeriphCLKConfig+0xe10>
  23492. {
  23493. switch (PeriphClkInit->Lptim345ClockSelection)
  23494. 800a258: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23495. 800a25c: f8d3 30a0 ldr.w r3, [r3, #160] @ 0xa0
  23496. 800a260: f5b3 4f20 cmp.w r3, #40960 @ 0xa000
  23497. 800a264: d033 beq.n 800a2ce <HAL_RCCEx_PeriphCLKConfig+0xdda>
  23498. 800a266: f5b3 4f20 cmp.w r3, #40960 @ 0xa000
  23499. 800a26a: d82c bhi.n 800a2c6 <HAL_RCCEx_PeriphCLKConfig+0xdd2>
  23500. 800a26c: f5b3 4f00 cmp.w r3, #32768 @ 0x8000
  23501. 800a270: d02f beq.n 800a2d2 <HAL_RCCEx_PeriphCLKConfig+0xdde>
  23502. 800a272: f5b3 4f00 cmp.w r3, #32768 @ 0x8000
  23503. 800a276: d826 bhi.n 800a2c6 <HAL_RCCEx_PeriphCLKConfig+0xdd2>
  23504. 800a278: f5b3 4fc0 cmp.w r3, #24576 @ 0x6000
  23505. 800a27c: d02b beq.n 800a2d6 <HAL_RCCEx_PeriphCLKConfig+0xde2>
  23506. 800a27e: f5b3 4fc0 cmp.w r3, #24576 @ 0x6000
  23507. 800a282: d820 bhi.n 800a2c6 <HAL_RCCEx_PeriphCLKConfig+0xdd2>
  23508. 800a284: f5b3 4f80 cmp.w r3, #16384 @ 0x4000
  23509. 800a288: d012 beq.n 800a2b0 <HAL_RCCEx_PeriphCLKConfig+0xdbc>
  23510. 800a28a: f5b3 4f80 cmp.w r3, #16384 @ 0x4000
  23511. 800a28e: d81a bhi.n 800a2c6 <HAL_RCCEx_PeriphCLKConfig+0xdd2>
  23512. 800a290: 2b00 cmp r3, #0
  23513. 800a292: d022 beq.n 800a2da <HAL_RCCEx_PeriphCLKConfig+0xde6>
  23514. 800a294: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  23515. 800a298: d115 bne.n 800a2c6 <HAL_RCCEx_PeriphCLKConfig+0xdd2>
  23516. case RCC_LPTIM345CLKSOURCE_PCLK4: /* SRD/D3 PCLK1 (PCLK4) as clock source for LPTIM3/4/5 */
  23517. /* LPTIM3/4/5 clock source configuration done later after clock selection check */
  23518. break;
  23519. case RCC_LPTIM345CLKSOURCE_PLL2: /* PLL2 is used as clock source for LPTIM3/4/5 */
  23520. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  23521. 800a29a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23522. 800a29e: 3308 adds r3, #8
  23523. 800a2a0: 2100 movs r1, #0
  23524. 800a2a2: 4618 mov r0, r3
  23525. 800a2a4: f001 fca4 bl 800bbf0 <RCCEx_PLL2_Config>
  23526. 800a2a8: 4603 mov r3, r0
  23527. 800a2aa: f887 311f strb.w r3, [r7, #287] @ 0x11f
  23528. /* LPTIM3/4/5 clock source configuration done later after clock selection check */
  23529. break;
  23530. 800a2ae: e015 b.n 800a2dc <HAL_RCCEx_PeriphCLKConfig+0xde8>
  23531. case RCC_LPTIM345CLKSOURCE_PLL3: /* PLL3 is used as clock source for LPTIM3/4/5 */
  23532. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE);
  23533. 800a2b0: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23534. 800a2b4: 3328 adds r3, #40 @ 0x28
  23535. 800a2b6: 2102 movs r1, #2
  23536. 800a2b8: 4618 mov r0, r3
  23537. 800a2ba: f001 fd4b bl 800bd54 <RCCEx_PLL3_Config>
  23538. 800a2be: 4603 mov r3, r0
  23539. 800a2c0: f887 311f strb.w r3, [r7, #287] @ 0x11f
  23540. /* LPTIM3/4/5 clock source configuration done later after clock selection check */
  23541. break;
  23542. 800a2c4: e00a b.n 800a2dc <HAL_RCCEx_PeriphCLKConfig+0xde8>
  23543. /* HSI, HSE, or CSI oscillator is used as source of LPTIM3/4/5 clock */
  23544. /* LPTIM3/4/5 clock source configuration done later after clock selection check */
  23545. break;
  23546. default:
  23547. ret = HAL_ERROR;
  23548. 800a2c6: 2301 movs r3, #1
  23549. 800a2c8: f887 311f strb.w r3, [r7, #287] @ 0x11f
  23550. break;
  23551. 800a2cc: e006 b.n 800a2dc <HAL_RCCEx_PeriphCLKConfig+0xde8>
  23552. break;
  23553. 800a2ce: bf00 nop
  23554. 800a2d0: e004 b.n 800a2dc <HAL_RCCEx_PeriphCLKConfig+0xde8>
  23555. break;
  23556. 800a2d2: bf00 nop
  23557. 800a2d4: e002 b.n 800a2dc <HAL_RCCEx_PeriphCLKConfig+0xde8>
  23558. break;
  23559. 800a2d6: bf00 nop
  23560. 800a2d8: e000 b.n 800a2dc <HAL_RCCEx_PeriphCLKConfig+0xde8>
  23561. break;
  23562. 800a2da: bf00 nop
  23563. }
  23564. if (ret == HAL_OK)
  23565. 800a2dc: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  23566. 800a2e0: 2b00 cmp r3, #0
  23567. 800a2e2: d10b bne.n 800a2fc <HAL_RCCEx_PeriphCLKConfig+0xe08>
  23568. {
  23569. /* Set the source of LPTIM3/4/5 clock */
  23570. __HAL_RCC_LPTIM345_CONFIG(PeriphClkInit->Lptim345ClockSelection);
  23571. 800a2e4: 4bbb ldr r3, [pc, #748] @ (800a5d4 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  23572. 800a2e6: 6d9b ldr r3, [r3, #88] @ 0x58
  23573. 800a2e8: f423 4160 bic.w r1, r3, #57344 @ 0xe000
  23574. 800a2ec: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23575. 800a2f0: f8d3 30a0 ldr.w r3, [r3, #160] @ 0xa0
  23576. 800a2f4: 4ab7 ldr r2, [pc, #732] @ (800a5d4 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  23577. 800a2f6: 430b orrs r3, r1
  23578. 800a2f8: 6593 str r3, [r2, #88] @ 0x58
  23579. 800a2fa: e003 b.n 800a304 <HAL_RCCEx_PeriphCLKConfig+0xe10>
  23580. }
  23581. else
  23582. {
  23583. /* set overall return value */
  23584. status = ret;
  23585. 800a2fc: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  23586. 800a300: f887 311e strb.w r3, [r7, #286] @ 0x11e
  23587. __HAL_RCC_I2C1235_CONFIG(PeriphClkInit->I2c1235ClockSelection);
  23588. }
  23589. #else
  23590. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2C123) == RCC_PERIPHCLK_I2C123)
  23591. 800a304: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23592. 800a308: e9d3 2300 ldrd r2, r3, [r3]
  23593. 800a30c: f002 0308 and.w r3, r2, #8
  23594. 800a310: f8c7 3088 str.w r3, [r7, #136] @ 0x88
  23595. 800a314: 2300 movs r3, #0
  23596. 800a316: f8c7 308c str.w r3, [r7, #140] @ 0x8c
  23597. 800a31a: e9d7 1222 ldrd r1, r2, [r7, #136] @ 0x88
  23598. 800a31e: 460b mov r3, r1
  23599. 800a320: 4313 orrs r3, r2
  23600. 800a322: d01e beq.n 800a362 <HAL_RCCEx_PeriphCLKConfig+0xe6e>
  23601. {
  23602. /* Check the parameters */
  23603. assert_param(IS_RCC_I2C123CLKSOURCE(PeriphClkInit->I2c123ClockSelection));
  23604. if ((PeriphClkInit->I2c123ClockSelection) == RCC_I2C123CLKSOURCE_PLL3)
  23605. 800a324: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23606. 800a328: f8d3 3084 ldr.w r3, [r3, #132] @ 0x84
  23607. 800a32c: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  23608. 800a330: d10c bne.n 800a34c <HAL_RCCEx_PeriphCLKConfig+0xe58>
  23609. {
  23610. if (RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE) != HAL_OK)
  23611. 800a332: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23612. 800a336: 3328 adds r3, #40 @ 0x28
  23613. 800a338: 2102 movs r1, #2
  23614. 800a33a: 4618 mov r0, r3
  23615. 800a33c: f001 fd0a bl 800bd54 <RCCEx_PLL3_Config>
  23616. 800a340: 4603 mov r3, r0
  23617. 800a342: 2b00 cmp r3, #0
  23618. 800a344: d002 beq.n 800a34c <HAL_RCCEx_PeriphCLKConfig+0xe58>
  23619. {
  23620. status = HAL_ERROR;
  23621. 800a346: 2301 movs r3, #1
  23622. 800a348: f887 311e strb.w r3, [r7, #286] @ 0x11e
  23623. }
  23624. }
  23625. __HAL_RCC_I2C123_CONFIG(PeriphClkInit->I2c123ClockSelection);
  23626. 800a34c: 4ba1 ldr r3, [pc, #644] @ (800a5d4 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  23627. 800a34e: 6d5b ldr r3, [r3, #84] @ 0x54
  23628. 800a350: f423 5140 bic.w r1, r3, #12288 @ 0x3000
  23629. 800a354: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23630. 800a358: f8d3 3084 ldr.w r3, [r3, #132] @ 0x84
  23631. 800a35c: 4a9d ldr r2, [pc, #628] @ (800a5d4 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  23632. 800a35e: 430b orrs r3, r1
  23633. 800a360: 6553 str r3, [r2, #84] @ 0x54
  23634. }
  23635. #endif /* I2C5 */
  23636. /*------------------------------ I2C4 Configuration ------------------------*/
  23637. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2C4) == RCC_PERIPHCLK_I2C4)
  23638. 800a362: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23639. 800a366: e9d3 2300 ldrd r2, r3, [r3]
  23640. 800a36a: f002 0310 and.w r3, r2, #16
  23641. 800a36e: f8c7 3080 str.w r3, [r7, #128] @ 0x80
  23642. 800a372: 2300 movs r3, #0
  23643. 800a374: f8c7 3084 str.w r3, [r7, #132] @ 0x84
  23644. 800a378: e9d7 1220 ldrd r1, r2, [r7, #128] @ 0x80
  23645. 800a37c: 460b mov r3, r1
  23646. 800a37e: 4313 orrs r3, r2
  23647. 800a380: d01e beq.n 800a3c0 <HAL_RCCEx_PeriphCLKConfig+0xecc>
  23648. {
  23649. /* Check the parameters */
  23650. assert_param(IS_RCC_I2C4CLKSOURCE(PeriphClkInit->I2c4ClockSelection));
  23651. if ((PeriphClkInit->I2c4ClockSelection) == RCC_I2C4CLKSOURCE_PLL3)
  23652. 800a382: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23653. 800a386: f8d3 3098 ldr.w r3, [r3, #152] @ 0x98
  23654. 800a38a: f5b3 7f80 cmp.w r3, #256 @ 0x100
  23655. 800a38e: d10c bne.n 800a3aa <HAL_RCCEx_PeriphCLKConfig+0xeb6>
  23656. {
  23657. if (RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE) != HAL_OK)
  23658. 800a390: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23659. 800a394: 3328 adds r3, #40 @ 0x28
  23660. 800a396: 2102 movs r1, #2
  23661. 800a398: 4618 mov r0, r3
  23662. 800a39a: f001 fcdb bl 800bd54 <RCCEx_PLL3_Config>
  23663. 800a39e: 4603 mov r3, r0
  23664. 800a3a0: 2b00 cmp r3, #0
  23665. 800a3a2: d002 beq.n 800a3aa <HAL_RCCEx_PeriphCLKConfig+0xeb6>
  23666. {
  23667. status = HAL_ERROR;
  23668. 800a3a4: 2301 movs r3, #1
  23669. 800a3a6: f887 311e strb.w r3, [r7, #286] @ 0x11e
  23670. }
  23671. }
  23672. __HAL_RCC_I2C4_CONFIG(PeriphClkInit->I2c4ClockSelection);
  23673. 800a3aa: 4b8a ldr r3, [pc, #552] @ (800a5d4 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  23674. 800a3ac: 6d9b ldr r3, [r3, #88] @ 0x58
  23675. 800a3ae: f423 7140 bic.w r1, r3, #768 @ 0x300
  23676. 800a3b2: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23677. 800a3b6: f8d3 3098 ldr.w r3, [r3, #152] @ 0x98
  23678. 800a3ba: 4a86 ldr r2, [pc, #536] @ (800a5d4 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  23679. 800a3bc: 430b orrs r3, r1
  23680. 800a3be: 6593 str r3, [r2, #88] @ 0x58
  23681. }
  23682. /*---------------------------- ADC configuration -------------------------------*/
  23683. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC)
  23684. 800a3c0: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23685. 800a3c4: e9d3 2300 ldrd r2, r3, [r3]
  23686. 800a3c8: f402 2300 and.w r3, r2, #524288 @ 0x80000
  23687. 800a3cc: 67bb str r3, [r7, #120] @ 0x78
  23688. 800a3ce: 2300 movs r3, #0
  23689. 800a3d0: 67fb str r3, [r7, #124] @ 0x7c
  23690. 800a3d2: e9d7 121e ldrd r1, r2, [r7, #120] @ 0x78
  23691. 800a3d6: 460b mov r3, r1
  23692. 800a3d8: 4313 orrs r3, r2
  23693. 800a3da: d03e beq.n 800a45a <HAL_RCCEx_PeriphCLKConfig+0xf66>
  23694. {
  23695. switch (PeriphClkInit->AdcClockSelection)
  23696. 800a3dc: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23697. 800a3e0: f8d3 30a4 ldr.w r3, [r3, #164] @ 0xa4
  23698. 800a3e4: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  23699. 800a3e8: d022 beq.n 800a430 <HAL_RCCEx_PeriphCLKConfig+0xf3c>
  23700. 800a3ea: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  23701. 800a3ee: d81b bhi.n 800a428 <HAL_RCCEx_PeriphCLKConfig+0xf34>
  23702. 800a3f0: 2b00 cmp r3, #0
  23703. 800a3f2: d003 beq.n 800a3fc <HAL_RCCEx_PeriphCLKConfig+0xf08>
  23704. 800a3f4: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  23705. 800a3f8: d00b beq.n 800a412 <HAL_RCCEx_PeriphCLKConfig+0xf1e>
  23706. 800a3fa: e015 b.n 800a428 <HAL_RCCEx_PeriphCLKConfig+0xf34>
  23707. {
  23708. case RCC_ADCCLKSOURCE_PLL2: /* PLL2 is used as clock source for ADC*/
  23709. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  23710. 800a3fc: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23711. 800a400: 3308 adds r3, #8
  23712. 800a402: 2100 movs r1, #0
  23713. 800a404: 4618 mov r0, r3
  23714. 800a406: f001 fbf3 bl 800bbf0 <RCCEx_PLL2_Config>
  23715. 800a40a: 4603 mov r3, r0
  23716. 800a40c: f887 311f strb.w r3, [r7, #287] @ 0x11f
  23717. /* ADC clock source configuration done later after clock selection check */
  23718. break;
  23719. 800a410: e00f b.n 800a432 <HAL_RCCEx_PeriphCLKConfig+0xf3e>
  23720. case RCC_ADCCLKSOURCE_PLL3: /* PLL3 is used as clock source for ADC*/
  23721. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE);
  23722. 800a412: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23723. 800a416: 3328 adds r3, #40 @ 0x28
  23724. 800a418: 2102 movs r1, #2
  23725. 800a41a: 4618 mov r0, r3
  23726. 800a41c: f001 fc9a bl 800bd54 <RCCEx_PLL3_Config>
  23727. 800a420: 4603 mov r3, r0
  23728. 800a422: f887 311f strb.w r3, [r7, #287] @ 0x11f
  23729. /* ADC clock source configuration done later after clock selection check */
  23730. break;
  23731. 800a426: e004 b.n 800a432 <HAL_RCCEx_PeriphCLKConfig+0xf3e>
  23732. /* HSI, HSE, or CSI oscillator is used as source of ADC clock */
  23733. /* ADC clock source configuration done later after clock selection check */
  23734. break;
  23735. default:
  23736. ret = HAL_ERROR;
  23737. 800a428: 2301 movs r3, #1
  23738. 800a42a: f887 311f strb.w r3, [r7, #287] @ 0x11f
  23739. break;
  23740. 800a42e: e000 b.n 800a432 <HAL_RCCEx_PeriphCLKConfig+0xf3e>
  23741. break;
  23742. 800a430: bf00 nop
  23743. }
  23744. if (ret == HAL_OK)
  23745. 800a432: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  23746. 800a436: 2b00 cmp r3, #0
  23747. 800a438: d10b bne.n 800a452 <HAL_RCCEx_PeriphCLKConfig+0xf5e>
  23748. {
  23749. /* Set the source of ADC clock*/
  23750. __HAL_RCC_ADC_CONFIG(PeriphClkInit->AdcClockSelection);
  23751. 800a43a: 4b66 ldr r3, [pc, #408] @ (800a5d4 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  23752. 800a43c: 6d9b ldr r3, [r3, #88] @ 0x58
  23753. 800a43e: f423 3140 bic.w r1, r3, #196608 @ 0x30000
  23754. 800a442: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23755. 800a446: f8d3 30a4 ldr.w r3, [r3, #164] @ 0xa4
  23756. 800a44a: 4a62 ldr r2, [pc, #392] @ (800a5d4 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  23757. 800a44c: 430b orrs r3, r1
  23758. 800a44e: 6593 str r3, [r2, #88] @ 0x58
  23759. 800a450: e003 b.n 800a45a <HAL_RCCEx_PeriphCLKConfig+0xf66>
  23760. }
  23761. else
  23762. {
  23763. /* set overall return value */
  23764. status = ret;
  23765. 800a452: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  23766. 800a456: f887 311e strb.w r3, [r7, #286] @ 0x11e
  23767. }
  23768. }
  23769. /*------------------------------ USB Configuration -------------------------*/
  23770. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB)
  23771. 800a45a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23772. 800a45e: e9d3 2300 ldrd r2, r3, [r3]
  23773. 800a462: f402 2380 and.w r3, r2, #262144 @ 0x40000
  23774. 800a466: 673b str r3, [r7, #112] @ 0x70
  23775. 800a468: 2300 movs r3, #0
  23776. 800a46a: 677b str r3, [r7, #116] @ 0x74
  23777. 800a46c: e9d7 121c ldrd r1, r2, [r7, #112] @ 0x70
  23778. 800a470: 460b mov r3, r1
  23779. 800a472: 4313 orrs r3, r2
  23780. 800a474: d03b beq.n 800a4ee <HAL_RCCEx_PeriphCLKConfig+0xffa>
  23781. {
  23782. switch (PeriphClkInit->UsbClockSelection)
  23783. 800a476: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23784. 800a47a: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  23785. 800a47e: f5b3 1f40 cmp.w r3, #3145728 @ 0x300000
  23786. 800a482: d01f beq.n 800a4c4 <HAL_RCCEx_PeriphCLKConfig+0xfd0>
  23787. 800a484: f5b3 1f40 cmp.w r3, #3145728 @ 0x300000
  23788. 800a488: d818 bhi.n 800a4bc <HAL_RCCEx_PeriphCLKConfig+0xfc8>
  23789. 800a48a: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
  23790. 800a48e: d003 beq.n 800a498 <HAL_RCCEx_PeriphCLKConfig+0xfa4>
  23791. 800a490: f5b3 1f00 cmp.w r3, #2097152 @ 0x200000
  23792. 800a494: d007 beq.n 800a4a6 <HAL_RCCEx_PeriphCLKConfig+0xfb2>
  23793. 800a496: e011 b.n 800a4bc <HAL_RCCEx_PeriphCLKConfig+0xfc8>
  23794. {
  23795. case RCC_USBCLKSOURCE_PLL: /* PLL is used as clock source for USB*/
  23796. /* Enable USB Clock output generated form System USB . */
  23797. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  23798. 800a498: 4b4e ldr r3, [pc, #312] @ (800a5d4 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  23799. 800a49a: 6adb ldr r3, [r3, #44] @ 0x2c
  23800. 800a49c: 4a4d ldr r2, [pc, #308] @ (800a5d4 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  23801. 800a49e: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  23802. 800a4a2: 62d3 str r3, [r2, #44] @ 0x2c
  23803. /* USB clock source configuration done later after clock selection check */
  23804. break;
  23805. 800a4a4: e00f b.n 800a4c6 <HAL_RCCEx_PeriphCLKConfig+0xfd2>
  23806. case RCC_USBCLKSOURCE_PLL3: /* PLL3 is used as clock source for USB*/
  23807. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
  23808. 800a4a6: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23809. 800a4aa: 3328 adds r3, #40 @ 0x28
  23810. 800a4ac: 2101 movs r1, #1
  23811. 800a4ae: 4618 mov r0, r3
  23812. 800a4b0: f001 fc50 bl 800bd54 <RCCEx_PLL3_Config>
  23813. 800a4b4: 4603 mov r3, r0
  23814. 800a4b6: f887 311f strb.w r3, [r7, #287] @ 0x11f
  23815. /* USB clock source configuration done later after clock selection check */
  23816. break;
  23817. 800a4ba: e004 b.n 800a4c6 <HAL_RCCEx_PeriphCLKConfig+0xfd2>
  23818. /* HSI48 oscillator is used as source of USB clock */
  23819. /* USB clock source configuration done later after clock selection check */
  23820. break;
  23821. default:
  23822. ret = HAL_ERROR;
  23823. 800a4bc: 2301 movs r3, #1
  23824. 800a4be: f887 311f strb.w r3, [r7, #287] @ 0x11f
  23825. break;
  23826. 800a4c2: e000 b.n 800a4c6 <HAL_RCCEx_PeriphCLKConfig+0xfd2>
  23827. break;
  23828. 800a4c4: bf00 nop
  23829. }
  23830. if (ret == HAL_OK)
  23831. 800a4c6: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  23832. 800a4ca: 2b00 cmp r3, #0
  23833. 800a4cc: d10b bne.n 800a4e6 <HAL_RCCEx_PeriphCLKConfig+0xff2>
  23834. {
  23835. /* Set the source of USB clock*/
  23836. __HAL_RCC_USB_CONFIG(PeriphClkInit->UsbClockSelection);
  23837. 800a4ce: 4b41 ldr r3, [pc, #260] @ (800a5d4 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  23838. 800a4d0: 6d5b ldr r3, [r3, #84] @ 0x54
  23839. 800a4d2: f423 1140 bic.w r1, r3, #3145728 @ 0x300000
  23840. 800a4d6: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23841. 800a4da: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  23842. 800a4de: 4a3d ldr r2, [pc, #244] @ (800a5d4 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  23843. 800a4e0: 430b orrs r3, r1
  23844. 800a4e2: 6553 str r3, [r2, #84] @ 0x54
  23845. 800a4e4: e003 b.n 800a4ee <HAL_RCCEx_PeriphCLKConfig+0xffa>
  23846. }
  23847. else
  23848. {
  23849. /* set overall return value */
  23850. status = ret;
  23851. 800a4e6: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  23852. 800a4ea: f887 311e strb.w r3, [r7, #286] @ 0x11e
  23853. }
  23854. }
  23855. /*------------------------------------- SDMMC Configuration ------------------------------------*/
  23856. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SDMMC) == RCC_PERIPHCLK_SDMMC)
  23857. 800a4ee: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23858. 800a4f2: e9d3 2300 ldrd r2, r3, [r3]
  23859. 800a4f6: f402 3380 and.w r3, r2, #65536 @ 0x10000
  23860. 800a4fa: 66bb str r3, [r7, #104] @ 0x68
  23861. 800a4fc: 2300 movs r3, #0
  23862. 800a4fe: 66fb str r3, [r7, #108] @ 0x6c
  23863. 800a500: e9d7 121a ldrd r1, r2, [r7, #104] @ 0x68
  23864. 800a504: 460b mov r3, r1
  23865. 800a506: 4313 orrs r3, r2
  23866. 800a508: d031 beq.n 800a56e <HAL_RCCEx_PeriphCLKConfig+0x107a>
  23867. {
  23868. /* Check the parameters */
  23869. assert_param(IS_RCC_SDMMC(PeriphClkInit->SdmmcClockSelection));
  23870. switch (PeriphClkInit->SdmmcClockSelection)
  23871. 800a50a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23872. 800a50e: 6d1b ldr r3, [r3, #80] @ 0x50
  23873. 800a510: 2b00 cmp r3, #0
  23874. 800a512: d003 beq.n 800a51c <HAL_RCCEx_PeriphCLKConfig+0x1028>
  23875. 800a514: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  23876. 800a518: d007 beq.n 800a52a <HAL_RCCEx_PeriphCLKConfig+0x1036>
  23877. 800a51a: e011 b.n 800a540 <HAL_RCCEx_PeriphCLKConfig+0x104c>
  23878. {
  23879. case RCC_SDMMCCLKSOURCE_PLL: /* PLL is used as clock source for SDMMC*/
  23880. /* Enable SDMMC Clock output generated form System PLL . */
  23881. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  23882. 800a51c: 4b2d ldr r3, [pc, #180] @ (800a5d4 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  23883. 800a51e: 6adb ldr r3, [r3, #44] @ 0x2c
  23884. 800a520: 4a2c ldr r2, [pc, #176] @ (800a5d4 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  23885. 800a522: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  23886. 800a526: 62d3 str r3, [r2, #44] @ 0x2c
  23887. /* SDMMC clock source configuration done later after clock selection check */
  23888. break;
  23889. 800a528: e00e b.n 800a548 <HAL_RCCEx_PeriphCLKConfig+0x1054>
  23890. case RCC_SDMMCCLKSOURCE_PLL2: /* PLL2 is used as clock source for SDMMC*/
  23891. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_R_UPDATE);
  23892. 800a52a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23893. 800a52e: 3308 adds r3, #8
  23894. 800a530: 2102 movs r1, #2
  23895. 800a532: 4618 mov r0, r3
  23896. 800a534: f001 fb5c bl 800bbf0 <RCCEx_PLL2_Config>
  23897. 800a538: 4603 mov r3, r0
  23898. 800a53a: f887 311f strb.w r3, [r7, #287] @ 0x11f
  23899. /* SDMMC clock source configuration done later after clock selection check */
  23900. break;
  23901. 800a53e: e003 b.n 800a548 <HAL_RCCEx_PeriphCLKConfig+0x1054>
  23902. default:
  23903. ret = HAL_ERROR;
  23904. 800a540: 2301 movs r3, #1
  23905. 800a542: f887 311f strb.w r3, [r7, #287] @ 0x11f
  23906. break;
  23907. 800a546: bf00 nop
  23908. }
  23909. if (ret == HAL_OK)
  23910. 800a548: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  23911. 800a54c: 2b00 cmp r3, #0
  23912. 800a54e: d10a bne.n 800a566 <HAL_RCCEx_PeriphCLKConfig+0x1072>
  23913. {
  23914. /* Set the source of SDMMC clock*/
  23915. __HAL_RCC_SDMMC_CONFIG(PeriphClkInit->SdmmcClockSelection);
  23916. 800a550: 4b20 ldr r3, [pc, #128] @ (800a5d4 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  23917. 800a552: 6cdb ldr r3, [r3, #76] @ 0x4c
  23918. 800a554: f423 3180 bic.w r1, r3, #65536 @ 0x10000
  23919. 800a558: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23920. 800a55c: 6d1b ldr r3, [r3, #80] @ 0x50
  23921. 800a55e: 4a1d ldr r2, [pc, #116] @ (800a5d4 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  23922. 800a560: 430b orrs r3, r1
  23923. 800a562: 64d3 str r3, [r2, #76] @ 0x4c
  23924. 800a564: e003 b.n 800a56e <HAL_RCCEx_PeriphCLKConfig+0x107a>
  23925. }
  23926. else
  23927. {
  23928. /* set overall return value */
  23929. status = ret;
  23930. 800a566: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  23931. 800a56a: f887 311e strb.w r3, [r7, #286] @ 0x11e
  23932. }
  23933. }
  23934. #endif /* LTDC */
  23935. /*------------------------------ RNG Configuration -------------------------*/
  23936. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RNG) == RCC_PERIPHCLK_RNG)
  23937. 800a56e: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23938. 800a572: e9d3 2300 ldrd r2, r3, [r3]
  23939. 800a576: f402 3300 and.w r3, r2, #131072 @ 0x20000
  23940. 800a57a: 663b str r3, [r7, #96] @ 0x60
  23941. 800a57c: 2300 movs r3, #0
  23942. 800a57e: 667b str r3, [r7, #100] @ 0x64
  23943. 800a580: e9d7 1218 ldrd r1, r2, [r7, #96] @ 0x60
  23944. 800a584: 460b mov r3, r1
  23945. 800a586: 4313 orrs r3, r2
  23946. 800a588: d03b beq.n 800a602 <HAL_RCCEx_PeriphCLKConfig+0x110e>
  23947. {
  23948. switch (PeriphClkInit->RngClockSelection)
  23949. 800a58a: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  23950. 800a58e: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  23951. 800a592: f5b3 7f40 cmp.w r3, #768 @ 0x300
  23952. 800a596: d018 beq.n 800a5ca <HAL_RCCEx_PeriphCLKConfig+0x10d6>
  23953. 800a598: f5b3 7f40 cmp.w r3, #768 @ 0x300
  23954. 800a59c: d811 bhi.n 800a5c2 <HAL_RCCEx_PeriphCLKConfig+0x10ce>
  23955. 800a59e: f5b3 7f00 cmp.w r3, #512 @ 0x200
  23956. 800a5a2: d014 beq.n 800a5ce <HAL_RCCEx_PeriphCLKConfig+0x10da>
  23957. 800a5a4: f5b3 7f00 cmp.w r3, #512 @ 0x200
  23958. 800a5a8: d80b bhi.n 800a5c2 <HAL_RCCEx_PeriphCLKConfig+0x10ce>
  23959. 800a5aa: 2b00 cmp r3, #0
  23960. 800a5ac: d014 beq.n 800a5d8 <HAL_RCCEx_PeriphCLKConfig+0x10e4>
  23961. 800a5ae: f5b3 7f80 cmp.w r3, #256 @ 0x100
  23962. 800a5b2: d106 bne.n 800a5c2 <HAL_RCCEx_PeriphCLKConfig+0x10ce>
  23963. {
  23964. case RCC_RNGCLKSOURCE_PLL: /* PLL is used as clock source for RNG*/
  23965. /* Enable RNG Clock output generated form System RNG . */
  23966. __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL1_DIVQ);
  23967. 800a5b4: 4b07 ldr r3, [pc, #28] @ (800a5d4 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  23968. 800a5b6: 6adb ldr r3, [r3, #44] @ 0x2c
  23969. 800a5b8: 4a06 ldr r2, [pc, #24] @ (800a5d4 <HAL_RCCEx_PeriphCLKConfig+0x10e0>)
  23970. 800a5ba: f443 3300 orr.w r3, r3, #131072 @ 0x20000
  23971. 800a5be: 62d3 str r3, [r2, #44] @ 0x2c
  23972. /* RNG clock source configuration done later after clock selection check */
  23973. break;
  23974. 800a5c0: e00b b.n 800a5da <HAL_RCCEx_PeriphCLKConfig+0x10e6>
  23975. /* HSI48 oscillator is used as source of RNG clock */
  23976. /* RNG clock source configuration done later after clock selection check */
  23977. break;
  23978. default:
  23979. ret = HAL_ERROR;
  23980. 800a5c2: 2301 movs r3, #1
  23981. 800a5c4: f887 311f strb.w r3, [r7, #287] @ 0x11f
  23982. break;
  23983. 800a5c8: e007 b.n 800a5da <HAL_RCCEx_PeriphCLKConfig+0x10e6>
  23984. break;
  23985. 800a5ca: bf00 nop
  23986. 800a5cc: e005 b.n 800a5da <HAL_RCCEx_PeriphCLKConfig+0x10e6>
  23987. break;
  23988. 800a5ce: bf00 nop
  23989. 800a5d0: e003 b.n 800a5da <HAL_RCCEx_PeriphCLKConfig+0x10e6>
  23990. 800a5d2: bf00 nop
  23991. 800a5d4: 58024400 .word 0x58024400
  23992. break;
  23993. 800a5d8: bf00 nop
  23994. }
  23995. if (ret == HAL_OK)
  23996. 800a5da: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  23997. 800a5de: 2b00 cmp r3, #0
  23998. 800a5e0: d10b bne.n 800a5fa <HAL_RCCEx_PeriphCLKConfig+0x1106>
  23999. {
  24000. /* Set the source of RNG clock*/
  24001. __HAL_RCC_RNG_CONFIG(PeriphClkInit->RngClockSelection);
  24002. 800a5e2: 4bba ldr r3, [pc, #744] @ (800a8cc <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  24003. 800a5e4: 6d5b ldr r3, [r3, #84] @ 0x54
  24004. 800a5e6: f423 7140 bic.w r1, r3, #768 @ 0x300
  24005. 800a5ea: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  24006. 800a5ee: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  24007. 800a5f2: 4ab6 ldr r2, [pc, #728] @ (800a8cc <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  24008. 800a5f4: 430b orrs r3, r1
  24009. 800a5f6: 6553 str r3, [r2, #84] @ 0x54
  24010. 800a5f8: e003 b.n 800a602 <HAL_RCCEx_PeriphCLKConfig+0x110e>
  24011. }
  24012. else
  24013. {
  24014. /* set overall return value */
  24015. status = ret;
  24016. 800a5fa: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  24017. 800a5fe: f887 311e strb.w r3, [r7, #286] @ 0x11e
  24018. }
  24019. }
  24020. /*------------------------------ SWPMI1 Configuration ------------------------*/
  24021. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SWPMI1) == RCC_PERIPHCLK_SWPMI1)
  24022. 800a602: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  24023. 800a606: e9d3 2300 ldrd r2, r3, [r3]
  24024. 800a60a: f402 1380 and.w r3, r2, #1048576 @ 0x100000
  24025. 800a60e: 65bb str r3, [r7, #88] @ 0x58
  24026. 800a610: 2300 movs r3, #0
  24027. 800a612: 65fb str r3, [r7, #92] @ 0x5c
  24028. 800a614: e9d7 1216 ldrd r1, r2, [r7, #88] @ 0x58
  24029. 800a618: 460b mov r3, r1
  24030. 800a61a: 4313 orrs r3, r2
  24031. 800a61c: d009 beq.n 800a632 <HAL_RCCEx_PeriphCLKConfig+0x113e>
  24032. {
  24033. /* Check the parameters */
  24034. assert_param(IS_RCC_SWPMI1CLKSOURCE(PeriphClkInit->Swpmi1ClockSelection));
  24035. /* Configure the SWPMI1 interface clock source */
  24036. __HAL_RCC_SWPMI1_CONFIG(PeriphClkInit->Swpmi1ClockSelection);
  24037. 800a61e: 4bab ldr r3, [pc, #684] @ (800a8cc <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  24038. 800a620: 6d1b ldr r3, [r3, #80] @ 0x50
  24039. 800a622: f023 4100 bic.w r1, r3, #2147483648 @ 0x80000000
  24040. 800a626: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  24041. 800a62a: 6f5b ldr r3, [r3, #116] @ 0x74
  24042. 800a62c: 4aa7 ldr r2, [pc, #668] @ (800a8cc <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  24043. 800a62e: 430b orrs r3, r1
  24044. 800a630: 6513 str r3, [r2, #80] @ 0x50
  24045. }
  24046. #if defined(HRTIM1)
  24047. /*------------------------------ HRTIM1 clock Configuration ----------------*/
  24048. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_HRTIM1) == RCC_PERIPHCLK_HRTIM1)
  24049. 800a632: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  24050. 800a636: e9d3 2300 ldrd r2, r3, [r3]
  24051. 800a63a: f002 5380 and.w r3, r2, #268435456 @ 0x10000000
  24052. 800a63e: 653b str r3, [r7, #80] @ 0x50
  24053. 800a640: 2300 movs r3, #0
  24054. 800a642: 657b str r3, [r7, #84] @ 0x54
  24055. 800a644: e9d7 1214 ldrd r1, r2, [r7, #80] @ 0x50
  24056. 800a648: 460b mov r3, r1
  24057. 800a64a: 4313 orrs r3, r2
  24058. 800a64c: d00a beq.n 800a664 <HAL_RCCEx_PeriphCLKConfig+0x1170>
  24059. {
  24060. /* Check the parameters */
  24061. assert_param(IS_RCC_HRTIM1CLKSOURCE(PeriphClkInit->Hrtim1ClockSelection));
  24062. /* Configure the HRTIM1 clock source */
  24063. __HAL_RCC_HRTIM1_CONFIG(PeriphClkInit->Hrtim1ClockSelection);
  24064. 800a64e: 4b9f ldr r3, [pc, #636] @ (800a8cc <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  24065. 800a650: 691b ldr r3, [r3, #16]
  24066. 800a652: f423 4180 bic.w r1, r3, #16384 @ 0x4000
  24067. 800a656: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  24068. 800a65a: f8d3 30b8 ldr.w r3, [r3, #184] @ 0xb8
  24069. 800a65e: 4a9b ldr r2, [pc, #620] @ (800a8cc <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  24070. 800a660: 430b orrs r3, r1
  24071. 800a662: 6113 str r3, [r2, #16]
  24072. }
  24073. #endif /*HRTIM1*/
  24074. /*------------------------------ DFSDM1 Configuration ------------------------*/
  24075. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_DFSDM1) == RCC_PERIPHCLK_DFSDM1)
  24076. 800a664: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  24077. 800a668: e9d3 2300 ldrd r2, r3, [r3]
  24078. 800a66c: f402 1300 and.w r3, r2, #2097152 @ 0x200000
  24079. 800a670: 64bb str r3, [r7, #72] @ 0x48
  24080. 800a672: 2300 movs r3, #0
  24081. 800a674: 64fb str r3, [r7, #76] @ 0x4c
  24082. 800a676: e9d7 1212 ldrd r1, r2, [r7, #72] @ 0x48
  24083. 800a67a: 460b mov r3, r1
  24084. 800a67c: 4313 orrs r3, r2
  24085. 800a67e: d009 beq.n 800a694 <HAL_RCCEx_PeriphCLKConfig+0x11a0>
  24086. {
  24087. /* Check the parameters */
  24088. assert_param(IS_RCC_DFSDM1CLKSOURCE(PeriphClkInit->Dfsdm1ClockSelection));
  24089. /* Configure the DFSDM1 interface clock source */
  24090. __HAL_RCC_DFSDM1_CONFIG(PeriphClkInit->Dfsdm1ClockSelection);
  24091. 800a680: 4b92 ldr r3, [pc, #584] @ (800a8cc <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  24092. 800a682: 6d1b ldr r3, [r3, #80] @ 0x50
  24093. 800a684: f023 7180 bic.w r1, r3, #16777216 @ 0x1000000
  24094. 800a688: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  24095. 800a68c: 6edb ldr r3, [r3, #108] @ 0x6c
  24096. 800a68e: 4a8f ldr r2, [pc, #572] @ (800a8cc <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  24097. 800a690: 430b orrs r3, r1
  24098. 800a692: 6513 str r3, [r2, #80] @ 0x50
  24099. __HAL_RCC_DFSDM2_CONFIG(PeriphClkInit->Dfsdm2ClockSelection);
  24100. }
  24101. #endif /* DFSDM2 */
  24102. /*------------------------------------ TIM configuration --------------------------------------*/
  24103. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_TIM) == RCC_PERIPHCLK_TIM)
  24104. 800a694: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  24105. 800a698: e9d3 2300 ldrd r2, r3, [r3]
  24106. 800a69c: f002 4380 and.w r3, r2, #1073741824 @ 0x40000000
  24107. 800a6a0: 643b str r3, [r7, #64] @ 0x40
  24108. 800a6a2: 2300 movs r3, #0
  24109. 800a6a4: 647b str r3, [r7, #68] @ 0x44
  24110. 800a6a6: e9d7 1210 ldrd r1, r2, [r7, #64] @ 0x40
  24111. 800a6aa: 460b mov r3, r1
  24112. 800a6ac: 4313 orrs r3, r2
  24113. 800a6ae: d00e beq.n 800a6ce <HAL_RCCEx_PeriphCLKConfig+0x11da>
  24114. {
  24115. /* Check the parameters */
  24116. assert_param(IS_RCC_TIMPRES(PeriphClkInit->TIMPresSelection));
  24117. /* Configure Timer Prescaler */
  24118. __HAL_RCC_TIMCLKPRESCALER(PeriphClkInit->TIMPresSelection);
  24119. 800a6b0: 4b86 ldr r3, [pc, #536] @ (800a8cc <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  24120. 800a6b2: 691b ldr r3, [r3, #16]
  24121. 800a6b4: 4a85 ldr r2, [pc, #532] @ (800a8cc <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  24122. 800a6b6: f423 4300 bic.w r3, r3, #32768 @ 0x8000
  24123. 800a6ba: 6113 str r3, [r2, #16]
  24124. 800a6bc: 4b83 ldr r3, [pc, #524] @ (800a8cc <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  24125. 800a6be: 6919 ldr r1, [r3, #16]
  24126. 800a6c0: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  24127. 800a6c4: f8d3 30bc ldr.w r3, [r3, #188] @ 0xbc
  24128. 800a6c8: 4a80 ldr r2, [pc, #512] @ (800a8cc <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  24129. 800a6ca: 430b orrs r3, r1
  24130. 800a6cc: 6113 str r3, [r2, #16]
  24131. }
  24132. /*------------------------------------ CKPER configuration --------------------------------------*/
  24133. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_CKPER) == RCC_PERIPHCLK_CKPER)
  24134. 800a6ce: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  24135. 800a6d2: e9d3 2300 ldrd r2, r3, [r3]
  24136. 800a6d6: f002 4300 and.w r3, r2, #2147483648 @ 0x80000000
  24137. 800a6da: 63bb str r3, [r7, #56] @ 0x38
  24138. 800a6dc: 2300 movs r3, #0
  24139. 800a6de: 63fb str r3, [r7, #60] @ 0x3c
  24140. 800a6e0: e9d7 120e ldrd r1, r2, [r7, #56] @ 0x38
  24141. 800a6e4: 460b mov r3, r1
  24142. 800a6e6: 4313 orrs r3, r2
  24143. 800a6e8: d009 beq.n 800a6fe <HAL_RCCEx_PeriphCLKConfig+0x120a>
  24144. {
  24145. /* Check the parameters */
  24146. assert_param(IS_RCC_CLKPSOURCE(PeriphClkInit->CkperClockSelection));
  24147. /* Configure the CKPER clock source */
  24148. __HAL_RCC_CLKP_CONFIG(PeriphClkInit->CkperClockSelection);
  24149. 800a6ea: 4b78 ldr r3, [pc, #480] @ (800a8cc <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  24150. 800a6ec: 6cdb ldr r3, [r3, #76] @ 0x4c
  24151. 800a6ee: f023 5140 bic.w r1, r3, #805306368 @ 0x30000000
  24152. 800a6f2: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  24153. 800a6f6: 6d5b ldr r3, [r3, #84] @ 0x54
  24154. 800a6f8: 4a74 ldr r2, [pc, #464] @ (800a8cc <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  24155. 800a6fa: 430b orrs r3, r1
  24156. 800a6fc: 64d3 str r3, [r2, #76] @ 0x4c
  24157. }
  24158. /*------------------------------ CEC Configuration ------------------------*/
  24159. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_CEC) == RCC_PERIPHCLK_CEC)
  24160. 800a6fe: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  24161. 800a702: e9d3 2300 ldrd r2, r3, [r3]
  24162. 800a706: f402 0300 and.w r3, r2, #8388608 @ 0x800000
  24163. 800a70a: 633b str r3, [r7, #48] @ 0x30
  24164. 800a70c: 2300 movs r3, #0
  24165. 800a70e: 637b str r3, [r7, #52] @ 0x34
  24166. 800a710: e9d7 120c ldrd r1, r2, [r7, #48] @ 0x30
  24167. 800a714: 460b mov r3, r1
  24168. 800a716: 4313 orrs r3, r2
  24169. 800a718: d00a beq.n 800a730 <HAL_RCCEx_PeriphCLKConfig+0x123c>
  24170. {
  24171. /* Check the parameters */
  24172. assert_param(IS_RCC_CECCLKSOURCE(PeriphClkInit->CecClockSelection));
  24173. /* Configure the CEC interface clock source */
  24174. __HAL_RCC_CEC_CONFIG(PeriphClkInit->CecClockSelection);
  24175. 800a71a: 4b6c ldr r3, [pc, #432] @ (800a8cc <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  24176. 800a71c: 6d5b ldr r3, [r3, #84] @ 0x54
  24177. 800a71e: f423 0140 bic.w r1, r3, #12582912 @ 0xc00000
  24178. 800a722: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  24179. 800a726: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c
  24180. 800a72a: 4a68 ldr r2, [pc, #416] @ (800a8cc <HAL_RCCEx_PeriphCLKConfig+0x13d8>)
  24181. 800a72c: 430b orrs r3, r1
  24182. 800a72e: 6553 str r3, [r2, #84] @ 0x54
  24183. }
  24184. /*---------------------------- PLL2 configuration -------------------------------*/
  24185. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLL2_DIVP) == RCC_PERIPHCLK_PLL2_DIVP)
  24186. 800a730: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  24187. 800a734: e9d3 2300 ldrd r2, r3, [r3]
  24188. 800a738: 2100 movs r1, #0
  24189. 800a73a: 62b9 str r1, [r7, #40] @ 0x28
  24190. 800a73c: f003 0301 and.w r3, r3, #1
  24191. 800a740: 62fb str r3, [r7, #44] @ 0x2c
  24192. 800a742: e9d7 120a ldrd r1, r2, [r7, #40] @ 0x28
  24193. 800a746: 460b mov r3, r1
  24194. 800a748: 4313 orrs r3, r2
  24195. 800a74a: d011 beq.n 800a770 <HAL_RCCEx_PeriphCLKConfig+0x127c>
  24196. {
  24197. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_P_UPDATE);
  24198. 800a74c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  24199. 800a750: 3308 adds r3, #8
  24200. 800a752: 2100 movs r1, #0
  24201. 800a754: 4618 mov r0, r3
  24202. 800a756: f001 fa4b bl 800bbf0 <RCCEx_PLL2_Config>
  24203. 800a75a: 4603 mov r3, r0
  24204. 800a75c: f887 311f strb.w r3, [r7, #287] @ 0x11f
  24205. if (ret == HAL_OK)
  24206. 800a760: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  24207. 800a764: 2b00 cmp r3, #0
  24208. 800a766: d003 beq.n 800a770 <HAL_RCCEx_PeriphCLKConfig+0x127c>
  24209. /*Nothing to do*/
  24210. }
  24211. else
  24212. {
  24213. /* set overall return value */
  24214. status = ret;
  24215. 800a768: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  24216. 800a76c: f887 311e strb.w r3, [r7, #286] @ 0x11e
  24217. }
  24218. }
  24219. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLL2_DIVQ) == RCC_PERIPHCLK_PLL2_DIVQ)
  24220. 800a770: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  24221. 800a774: e9d3 2300 ldrd r2, r3, [r3]
  24222. 800a778: 2100 movs r1, #0
  24223. 800a77a: 6239 str r1, [r7, #32]
  24224. 800a77c: f003 0302 and.w r3, r3, #2
  24225. 800a780: 627b str r3, [r7, #36] @ 0x24
  24226. 800a782: e9d7 1208 ldrd r1, r2, [r7, #32]
  24227. 800a786: 460b mov r3, r1
  24228. 800a788: 4313 orrs r3, r2
  24229. 800a78a: d011 beq.n 800a7b0 <HAL_RCCEx_PeriphCLKConfig+0x12bc>
  24230. {
  24231. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_Q_UPDATE);
  24232. 800a78c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  24233. 800a790: 3308 adds r3, #8
  24234. 800a792: 2101 movs r1, #1
  24235. 800a794: 4618 mov r0, r3
  24236. 800a796: f001 fa2b bl 800bbf0 <RCCEx_PLL2_Config>
  24237. 800a79a: 4603 mov r3, r0
  24238. 800a79c: f887 311f strb.w r3, [r7, #287] @ 0x11f
  24239. if (ret == HAL_OK)
  24240. 800a7a0: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  24241. 800a7a4: 2b00 cmp r3, #0
  24242. 800a7a6: d003 beq.n 800a7b0 <HAL_RCCEx_PeriphCLKConfig+0x12bc>
  24243. /*Nothing to do*/
  24244. }
  24245. else
  24246. {
  24247. /* set overall return value */
  24248. status = ret;
  24249. 800a7a8: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  24250. 800a7ac: f887 311e strb.w r3, [r7, #286] @ 0x11e
  24251. }
  24252. }
  24253. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLL2_DIVR) == RCC_PERIPHCLK_PLL2_DIVR)
  24254. 800a7b0: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  24255. 800a7b4: e9d3 2300 ldrd r2, r3, [r3]
  24256. 800a7b8: 2100 movs r1, #0
  24257. 800a7ba: 61b9 str r1, [r7, #24]
  24258. 800a7bc: f003 0304 and.w r3, r3, #4
  24259. 800a7c0: 61fb str r3, [r7, #28]
  24260. 800a7c2: e9d7 1206 ldrd r1, r2, [r7, #24]
  24261. 800a7c6: 460b mov r3, r1
  24262. 800a7c8: 4313 orrs r3, r2
  24263. 800a7ca: d011 beq.n 800a7f0 <HAL_RCCEx_PeriphCLKConfig+0x12fc>
  24264. {
  24265. ret = RCCEx_PLL2_Config(&(PeriphClkInit->PLL2), DIVIDER_R_UPDATE);
  24266. 800a7cc: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  24267. 800a7d0: 3308 adds r3, #8
  24268. 800a7d2: 2102 movs r1, #2
  24269. 800a7d4: 4618 mov r0, r3
  24270. 800a7d6: f001 fa0b bl 800bbf0 <RCCEx_PLL2_Config>
  24271. 800a7da: 4603 mov r3, r0
  24272. 800a7dc: f887 311f strb.w r3, [r7, #287] @ 0x11f
  24273. if (ret == HAL_OK)
  24274. 800a7e0: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  24275. 800a7e4: 2b00 cmp r3, #0
  24276. 800a7e6: d003 beq.n 800a7f0 <HAL_RCCEx_PeriphCLKConfig+0x12fc>
  24277. /*Nothing to do*/
  24278. }
  24279. else
  24280. {
  24281. /* set overall return value */
  24282. status = ret;
  24283. 800a7e8: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  24284. 800a7ec: f887 311e strb.w r3, [r7, #286] @ 0x11e
  24285. }
  24286. }
  24287. /*---------------------------- PLL3 configuration -------------------------------*/
  24288. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLL3_DIVP) == RCC_PERIPHCLK_PLL3_DIVP)
  24289. 800a7f0: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  24290. 800a7f4: e9d3 2300 ldrd r2, r3, [r3]
  24291. 800a7f8: 2100 movs r1, #0
  24292. 800a7fa: 6139 str r1, [r7, #16]
  24293. 800a7fc: f003 0308 and.w r3, r3, #8
  24294. 800a800: 617b str r3, [r7, #20]
  24295. 800a802: e9d7 1204 ldrd r1, r2, [r7, #16]
  24296. 800a806: 460b mov r3, r1
  24297. 800a808: 4313 orrs r3, r2
  24298. 800a80a: d011 beq.n 800a830 <HAL_RCCEx_PeriphCLKConfig+0x133c>
  24299. {
  24300. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_P_UPDATE);
  24301. 800a80c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  24302. 800a810: 3328 adds r3, #40 @ 0x28
  24303. 800a812: 2100 movs r1, #0
  24304. 800a814: 4618 mov r0, r3
  24305. 800a816: f001 fa9d bl 800bd54 <RCCEx_PLL3_Config>
  24306. 800a81a: 4603 mov r3, r0
  24307. 800a81c: f887 311f strb.w r3, [r7, #287] @ 0x11f
  24308. if (ret == HAL_OK)
  24309. 800a820: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  24310. 800a824: 2b00 cmp r3, #0
  24311. 800a826: d003 beq.n 800a830 <HAL_RCCEx_PeriphCLKConfig+0x133c>
  24312. /*Nothing to do*/
  24313. }
  24314. else
  24315. {
  24316. /* set overall return value */
  24317. status = ret;
  24318. 800a828: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  24319. 800a82c: f887 311e strb.w r3, [r7, #286] @ 0x11e
  24320. }
  24321. }
  24322. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLL3_DIVQ) == RCC_PERIPHCLK_PLL3_DIVQ)
  24323. 800a830: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  24324. 800a834: e9d3 2300 ldrd r2, r3, [r3]
  24325. 800a838: 2100 movs r1, #0
  24326. 800a83a: 60b9 str r1, [r7, #8]
  24327. 800a83c: f003 0310 and.w r3, r3, #16
  24328. 800a840: 60fb str r3, [r7, #12]
  24329. 800a842: e9d7 1202 ldrd r1, r2, [r7, #8]
  24330. 800a846: 460b mov r3, r1
  24331. 800a848: 4313 orrs r3, r2
  24332. 800a84a: d011 beq.n 800a870 <HAL_RCCEx_PeriphCLKConfig+0x137c>
  24333. {
  24334. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_Q_UPDATE);
  24335. 800a84c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  24336. 800a850: 3328 adds r3, #40 @ 0x28
  24337. 800a852: 2101 movs r1, #1
  24338. 800a854: 4618 mov r0, r3
  24339. 800a856: f001 fa7d bl 800bd54 <RCCEx_PLL3_Config>
  24340. 800a85a: 4603 mov r3, r0
  24341. 800a85c: f887 311f strb.w r3, [r7, #287] @ 0x11f
  24342. if (ret == HAL_OK)
  24343. 800a860: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  24344. 800a864: 2b00 cmp r3, #0
  24345. 800a866: d003 beq.n 800a870 <HAL_RCCEx_PeriphCLKConfig+0x137c>
  24346. /*Nothing to do*/
  24347. }
  24348. else
  24349. {
  24350. /* set overall return value */
  24351. status = ret;
  24352. 800a868: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  24353. 800a86c: f887 311e strb.w r3, [r7, #286] @ 0x11e
  24354. }
  24355. }
  24356. if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_PLL3_DIVR) == RCC_PERIPHCLK_PLL3_DIVR)
  24357. 800a870: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  24358. 800a874: e9d3 2300 ldrd r2, r3, [r3]
  24359. 800a878: 2100 movs r1, #0
  24360. 800a87a: 6039 str r1, [r7, #0]
  24361. 800a87c: f003 0320 and.w r3, r3, #32
  24362. 800a880: 607b str r3, [r7, #4]
  24363. 800a882: e9d7 1200 ldrd r1, r2, [r7]
  24364. 800a886: 460b mov r3, r1
  24365. 800a888: 4313 orrs r3, r2
  24366. 800a88a: d011 beq.n 800a8b0 <HAL_RCCEx_PeriphCLKConfig+0x13bc>
  24367. {
  24368. ret = RCCEx_PLL3_Config(&(PeriphClkInit->PLL3), DIVIDER_R_UPDATE);
  24369. 800a88c: f8d7 310c ldr.w r3, [r7, #268] @ 0x10c
  24370. 800a890: 3328 adds r3, #40 @ 0x28
  24371. 800a892: 2102 movs r1, #2
  24372. 800a894: 4618 mov r0, r3
  24373. 800a896: f001 fa5d bl 800bd54 <RCCEx_PLL3_Config>
  24374. 800a89a: 4603 mov r3, r0
  24375. 800a89c: f887 311f strb.w r3, [r7, #287] @ 0x11f
  24376. if (ret == HAL_OK)
  24377. 800a8a0: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  24378. 800a8a4: 2b00 cmp r3, #0
  24379. 800a8a6: d003 beq.n 800a8b0 <HAL_RCCEx_PeriphCLKConfig+0x13bc>
  24380. /*Nothing to do*/
  24381. }
  24382. else
  24383. {
  24384. /* set overall return value */
  24385. status = ret;
  24386. 800a8a8: f897 311f ldrb.w r3, [r7, #287] @ 0x11f
  24387. 800a8ac: f887 311e strb.w r3, [r7, #286] @ 0x11e
  24388. }
  24389. }
  24390. if (status == HAL_OK)
  24391. 800a8b0: f897 311e ldrb.w r3, [r7, #286] @ 0x11e
  24392. 800a8b4: 2b00 cmp r3, #0
  24393. 800a8b6: d101 bne.n 800a8bc <HAL_RCCEx_PeriphCLKConfig+0x13c8>
  24394. {
  24395. return HAL_OK;
  24396. 800a8b8: 2300 movs r3, #0
  24397. 800a8ba: e000 b.n 800a8be <HAL_RCCEx_PeriphCLKConfig+0x13ca>
  24398. }
  24399. return HAL_ERROR;
  24400. 800a8bc: 2301 movs r3, #1
  24401. }
  24402. 800a8be: 4618 mov r0, r3
  24403. 800a8c0: f507 7790 add.w r7, r7, #288 @ 0x120
  24404. 800a8c4: 46bd mov sp, r7
  24405. 800a8c6: e8bd 8fb0 ldmia.w sp!, {r4, r5, r7, r8, r9, sl, fp, pc}
  24406. 800a8ca: bf00 nop
  24407. 800a8cc: 58024400 .word 0x58024400
  24408. 0800a8d0 <HAL_RCCEx_GetPeriphCLKFreq>:
  24409. * @retval Frequency in KHz
  24410. *
  24411. * (*) : Available on some STM32H7 lines only.
  24412. */
  24413. uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint64_t PeriphClk)
  24414. {
  24415. 800a8d0: b580 push {r7, lr}
  24416. 800a8d2: b090 sub sp, #64 @ 0x40
  24417. 800a8d4: af00 add r7, sp, #0
  24418. 800a8d6: e9c7 0100 strd r0, r1, [r7]
  24419. /* This variable is used to store the SAI and CKP clock source */
  24420. uint32_t saiclocksource;
  24421. uint32_t ckpclocksource;
  24422. uint32_t srcclk;
  24423. if (PeriphClk == RCC_PERIPHCLK_SAI1)
  24424. 800a8da: e9d7 2300 ldrd r2, r3, [r7]
  24425. 800a8de: f5a2 7180 sub.w r1, r2, #256 @ 0x100
  24426. 800a8e2: 430b orrs r3, r1
  24427. 800a8e4: f040 8094 bne.w 800aa10 <HAL_RCCEx_GetPeriphCLKFreq+0x140>
  24428. {
  24429. saiclocksource = __HAL_RCC_GET_SAI1_SOURCE();
  24430. 800a8e8: 4b9e ldr r3, [pc, #632] @ (800ab64 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  24431. 800a8ea: 6d1b ldr r3, [r3, #80] @ 0x50
  24432. 800a8ec: f003 0307 and.w r3, r3, #7
  24433. 800a8f0: 633b str r3, [r7, #48] @ 0x30
  24434. switch (saiclocksource)
  24435. 800a8f2: 6b3b ldr r3, [r7, #48] @ 0x30
  24436. 800a8f4: 2b04 cmp r3, #4
  24437. 800a8f6: f200 8087 bhi.w 800aa08 <HAL_RCCEx_GetPeriphCLKFreq+0x138>
  24438. 800a8fa: a201 add r2, pc, #4 @ (adr r2, 800a900 <HAL_RCCEx_GetPeriphCLKFreq+0x30>)
  24439. 800a8fc: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  24440. 800a900: 0800a915 .word 0x0800a915
  24441. 800a904: 0800a93d .word 0x0800a93d
  24442. 800a908: 0800a965 .word 0x0800a965
  24443. 800a90c: 0800aa01 .word 0x0800aa01
  24444. 800a910: 0800a98d .word 0x0800a98d
  24445. {
  24446. case RCC_SAI1CLKSOURCE_PLL: /* PLL1 is the clock source for SAI1 */
  24447. {
  24448. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
  24449. 800a914: 4b93 ldr r3, [pc, #588] @ (800ab64 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  24450. 800a916: 681b ldr r3, [r3, #0]
  24451. 800a918: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  24452. 800a91c: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  24453. 800a920: d108 bne.n 800a934 <HAL_RCCEx_GetPeriphCLKFreq+0x64>
  24454. {
  24455. HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
  24456. 800a922: f107 0324 add.w r3, r7, #36 @ 0x24
  24457. 800a926: 4618 mov r0, r3
  24458. 800a928: f001 f810 bl 800b94c <HAL_RCCEx_GetPLL1ClockFreq>
  24459. frequency = pll1_clocks.PLL1_Q_Frequency;
  24460. 800a92c: 6abb ldr r3, [r7, #40] @ 0x28
  24461. 800a92e: 63fb str r3, [r7, #60] @ 0x3c
  24462. }
  24463. else
  24464. {
  24465. frequency = 0;
  24466. }
  24467. break;
  24468. 800a930: f000 bd45 b.w 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  24469. frequency = 0;
  24470. 800a934: 2300 movs r3, #0
  24471. 800a936: 63fb str r3, [r7, #60] @ 0x3c
  24472. break;
  24473. 800a938: f000 bd41 b.w 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  24474. }
  24475. case RCC_SAI1CLKSOURCE_PLL2: /* PLL2 is the clock source for SAI1 */
  24476. {
  24477. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  24478. 800a93c: 4b89 ldr r3, [pc, #548] @ (800ab64 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  24479. 800a93e: 681b ldr r3, [r3, #0]
  24480. 800a940: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  24481. 800a944: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  24482. 800a948: d108 bne.n 800a95c <HAL_RCCEx_GetPeriphCLKFreq+0x8c>
  24483. {
  24484. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  24485. 800a94a: f107 0318 add.w r3, r7, #24
  24486. 800a94e: 4618 mov r0, r3
  24487. 800a950: f000 fd54 bl 800b3fc <HAL_RCCEx_GetPLL2ClockFreq>
  24488. frequency = pll2_clocks.PLL2_P_Frequency;
  24489. 800a954: 69bb ldr r3, [r7, #24]
  24490. 800a956: 63fb str r3, [r7, #60] @ 0x3c
  24491. }
  24492. else
  24493. {
  24494. frequency = 0;
  24495. }
  24496. break;
  24497. 800a958: f000 bd31 b.w 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  24498. frequency = 0;
  24499. 800a95c: 2300 movs r3, #0
  24500. 800a95e: 63fb str r3, [r7, #60] @ 0x3c
  24501. break;
  24502. 800a960: f000 bd2d b.w 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  24503. }
  24504. case RCC_SAI1CLKSOURCE_PLL3: /* PLL3 is the clock source for SAI1 */
  24505. {
  24506. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
  24507. 800a964: 4b7f ldr r3, [pc, #508] @ (800ab64 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  24508. 800a966: 681b ldr r3, [r3, #0]
  24509. 800a968: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  24510. 800a96c: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  24511. 800a970: d108 bne.n 800a984 <HAL_RCCEx_GetPeriphCLKFreq+0xb4>
  24512. {
  24513. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  24514. 800a972: f107 030c add.w r3, r7, #12
  24515. 800a976: 4618 mov r0, r3
  24516. 800a978: f000 fe94 bl 800b6a4 <HAL_RCCEx_GetPLL3ClockFreq>
  24517. frequency = pll3_clocks.PLL3_P_Frequency;
  24518. 800a97c: 68fb ldr r3, [r7, #12]
  24519. 800a97e: 63fb str r3, [r7, #60] @ 0x3c
  24520. }
  24521. else
  24522. {
  24523. frequency = 0;
  24524. }
  24525. break;
  24526. 800a980: f000 bd1d b.w 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  24527. frequency = 0;
  24528. 800a984: 2300 movs r3, #0
  24529. 800a986: 63fb str r3, [r7, #60] @ 0x3c
  24530. break;
  24531. 800a988: f000 bd19 b.w 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  24532. }
  24533. case RCC_SAI1CLKSOURCE_CLKP: /* CKPER is the clock source for SAI1*/
  24534. {
  24535. ckpclocksource = __HAL_RCC_GET_CLKP_SOURCE();
  24536. 800a98c: 4b75 ldr r3, [pc, #468] @ (800ab64 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  24537. 800a98e: 6cdb ldr r3, [r3, #76] @ 0x4c
  24538. 800a990: f003 5340 and.w r3, r3, #805306368 @ 0x30000000
  24539. 800a994: 637b str r3, [r7, #52] @ 0x34
  24540. if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSI))
  24541. 800a996: 4b73 ldr r3, [pc, #460] @ (800ab64 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  24542. 800a998: 681b ldr r3, [r3, #0]
  24543. 800a99a: f003 0304 and.w r3, r3, #4
  24544. 800a99e: 2b04 cmp r3, #4
  24545. 800a9a0: d10c bne.n 800a9bc <HAL_RCCEx_GetPeriphCLKFreq+0xec>
  24546. 800a9a2: 6b7b ldr r3, [r7, #52] @ 0x34
  24547. 800a9a4: 2b00 cmp r3, #0
  24548. 800a9a6: d109 bne.n 800a9bc <HAL_RCCEx_GetPeriphCLKFreq+0xec>
  24549. {
  24550. /* In Case the CKPER Source is HSI */
  24551. frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  24552. 800a9a8: 4b6e ldr r3, [pc, #440] @ (800ab64 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  24553. 800a9aa: 681b ldr r3, [r3, #0]
  24554. 800a9ac: 08db lsrs r3, r3, #3
  24555. 800a9ae: f003 0303 and.w r3, r3, #3
  24556. 800a9b2: 4a6d ldr r2, [pc, #436] @ (800ab68 <HAL_RCCEx_GetPeriphCLKFreq+0x298>)
  24557. 800a9b4: fa22 f303 lsr.w r3, r2, r3
  24558. 800a9b8: 63fb str r3, [r7, #60] @ 0x3c
  24559. 800a9ba: e01f b.n 800a9fc <HAL_RCCEx_GetPeriphCLKFreq+0x12c>
  24560. }
  24561. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_CSI))
  24562. 800a9bc: 4b69 ldr r3, [pc, #420] @ (800ab64 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  24563. 800a9be: 681b ldr r3, [r3, #0]
  24564. 800a9c0: f403 7380 and.w r3, r3, #256 @ 0x100
  24565. 800a9c4: f5b3 7f80 cmp.w r3, #256 @ 0x100
  24566. 800a9c8: d106 bne.n 800a9d8 <HAL_RCCEx_GetPeriphCLKFreq+0x108>
  24567. 800a9ca: 6b7b ldr r3, [r7, #52] @ 0x34
  24568. 800a9cc: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  24569. 800a9d0: d102 bne.n 800a9d8 <HAL_RCCEx_GetPeriphCLKFreq+0x108>
  24570. {
  24571. /* In Case the CKPER Source is CSI */
  24572. frequency = CSI_VALUE;
  24573. 800a9d2: 4b66 ldr r3, [pc, #408] @ (800ab6c <HAL_RCCEx_GetPeriphCLKFreq+0x29c>)
  24574. 800a9d4: 63fb str r3, [r7, #60] @ 0x3c
  24575. 800a9d6: e011 b.n 800a9fc <HAL_RCCEx_GetPeriphCLKFreq+0x12c>
  24576. }
  24577. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSE))
  24578. 800a9d8: 4b62 ldr r3, [pc, #392] @ (800ab64 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  24579. 800a9da: 681b ldr r3, [r3, #0]
  24580. 800a9dc: f403 3300 and.w r3, r3, #131072 @ 0x20000
  24581. 800a9e0: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  24582. 800a9e4: d106 bne.n 800a9f4 <HAL_RCCEx_GetPeriphCLKFreq+0x124>
  24583. 800a9e6: 6b7b ldr r3, [r7, #52] @ 0x34
  24584. 800a9e8: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  24585. 800a9ec: d102 bne.n 800a9f4 <HAL_RCCEx_GetPeriphCLKFreq+0x124>
  24586. {
  24587. /* In Case the CKPER Source is HSE */
  24588. frequency = HSE_VALUE;
  24589. 800a9ee: 4b60 ldr r3, [pc, #384] @ (800ab70 <HAL_RCCEx_GetPeriphCLKFreq+0x2a0>)
  24590. 800a9f0: 63fb str r3, [r7, #60] @ 0x3c
  24591. 800a9f2: e003 b.n 800a9fc <HAL_RCCEx_GetPeriphCLKFreq+0x12c>
  24592. }
  24593. else
  24594. {
  24595. /* In Case the CKPER is disabled*/
  24596. frequency = 0;
  24597. 800a9f4: 2300 movs r3, #0
  24598. 800a9f6: 63fb str r3, [r7, #60] @ 0x3c
  24599. }
  24600. break;
  24601. 800a9f8: f000 bce1 b.w 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  24602. 800a9fc: f000 bcdf b.w 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  24603. }
  24604. case (RCC_SAI1CLKSOURCE_PIN): /* External clock is the clock source for SAI1 */
  24605. {
  24606. frequency = EXTERNAL_CLOCK_VALUE;
  24607. 800aa00: 4b5c ldr r3, [pc, #368] @ (800ab74 <HAL_RCCEx_GetPeriphCLKFreq+0x2a4>)
  24608. 800aa02: 63fb str r3, [r7, #60] @ 0x3c
  24609. break;
  24610. 800aa04: f000 bcdb b.w 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  24611. }
  24612. default :
  24613. {
  24614. frequency = 0;
  24615. 800aa08: 2300 movs r3, #0
  24616. 800aa0a: 63fb str r3, [r7, #60] @ 0x3c
  24617. break;
  24618. 800aa0c: f000 bcd7 b.w 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  24619. }
  24620. }
  24621. }
  24622. #if defined(SAI3)
  24623. else if (PeriphClk == RCC_PERIPHCLK_SAI23)
  24624. 800aa10: e9d7 2300 ldrd r2, r3, [r7]
  24625. 800aa14: f5a2 7100 sub.w r1, r2, #512 @ 0x200
  24626. 800aa18: 430b orrs r3, r1
  24627. 800aa1a: f040 80ad bne.w 800ab78 <HAL_RCCEx_GetPeriphCLKFreq+0x2a8>
  24628. {
  24629. saiclocksource = __HAL_RCC_GET_SAI23_SOURCE();
  24630. 800aa1e: 4b51 ldr r3, [pc, #324] @ (800ab64 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  24631. 800aa20: 6d1b ldr r3, [r3, #80] @ 0x50
  24632. 800aa22: f403 73e0 and.w r3, r3, #448 @ 0x1c0
  24633. 800aa26: 633b str r3, [r7, #48] @ 0x30
  24634. switch (saiclocksource)
  24635. 800aa28: 6b3b ldr r3, [r7, #48] @ 0x30
  24636. 800aa2a: f5b3 7f80 cmp.w r3, #256 @ 0x100
  24637. 800aa2e: d056 beq.n 800aade <HAL_RCCEx_GetPeriphCLKFreq+0x20e>
  24638. 800aa30: 6b3b ldr r3, [r7, #48] @ 0x30
  24639. 800aa32: f5b3 7f80 cmp.w r3, #256 @ 0x100
  24640. 800aa36: f200 8090 bhi.w 800ab5a <HAL_RCCEx_GetPeriphCLKFreq+0x28a>
  24641. 800aa3a: 6b3b ldr r3, [r7, #48] @ 0x30
  24642. 800aa3c: 2bc0 cmp r3, #192 @ 0xc0
  24643. 800aa3e: f000 8088 beq.w 800ab52 <HAL_RCCEx_GetPeriphCLKFreq+0x282>
  24644. 800aa42: 6b3b ldr r3, [r7, #48] @ 0x30
  24645. 800aa44: 2bc0 cmp r3, #192 @ 0xc0
  24646. 800aa46: f200 8088 bhi.w 800ab5a <HAL_RCCEx_GetPeriphCLKFreq+0x28a>
  24647. 800aa4a: 6b3b ldr r3, [r7, #48] @ 0x30
  24648. 800aa4c: 2b80 cmp r3, #128 @ 0x80
  24649. 800aa4e: d032 beq.n 800aab6 <HAL_RCCEx_GetPeriphCLKFreq+0x1e6>
  24650. 800aa50: 6b3b ldr r3, [r7, #48] @ 0x30
  24651. 800aa52: 2b80 cmp r3, #128 @ 0x80
  24652. 800aa54: f200 8081 bhi.w 800ab5a <HAL_RCCEx_GetPeriphCLKFreq+0x28a>
  24653. 800aa58: 6b3b ldr r3, [r7, #48] @ 0x30
  24654. 800aa5a: 2b00 cmp r3, #0
  24655. 800aa5c: d003 beq.n 800aa66 <HAL_RCCEx_GetPeriphCLKFreq+0x196>
  24656. 800aa5e: 6b3b ldr r3, [r7, #48] @ 0x30
  24657. 800aa60: 2b40 cmp r3, #64 @ 0x40
  24658. 800aa62: d014 beq.n 800aa8e <HAL_RCCEx_GetPeriphCLKFreq+0x1be>
  24659. 800aa64: e079 b.n 800ab5a <HAL_RCCEx_GetPeriphCLKFreq+0x28a>
  24660. {
  24661. case RCC_SAI23CLKSOURCE_PLL: /* PLL1 is the clock source for SAI2/3 */
  24662. {
  24663. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
  24664. 800aa66: 4b3f ldr r3, [pc, #252] @ (800ab64 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  24665. 800aa68: 681b ldr r3, [r3, #0]
  24666. 800aa6a: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  24667. 800aa6e: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  24668. 800aa72: d108 bne.n 800aa86 <HAL_RCCEx_GetPeriphCLKFreq+0x1b6>
  24669. {
  24670. HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
  24671. 800aa74: f107 0324 add.w r3, r7, #36 @ 0x24
  24672. 800aa78: 4618 mov r0, r3
  24673. 800aa7a: f000 ff67 bl 800b94c <HAL_RCCEx_GetPLL1ClockFreq>
  24674. frequency = pll1_clocks.PLL1_Q_Frequency;
  24675. 800aa7e: 6abb ldr r3, [r7, #40] @ 0x28
  24676. 800aa80: 63fb str r3, [r7, #60] @ 0x3c
  24677. }
  24678. else
  24679. {
  24680. frequency = 0;
  24681. }
  24682. break;
  24683. 800aa82: f000 bc9c b.w 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  24684. frequency = 0;
  24685. 800aa86: 2300 movs r3, #0
  24686. 800aa88: 63fb str r3, [r7, #60] @ 0x3c
  24687. break;
  24688. 800aa8a: f000 bc98 b.w 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  24689. }
  24690. case RCC_SAI23CLKSOURCE_PLL2: /* PLL2 is the clock source for SAI2/3 */
  24691. {
  24692. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  24693. 800aa8e: 4b35 ldr r3, [pc, #212] @ (800ab64 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  24694. 800aa90: 681b ldr r3, [r3, #0]
  24695. 800aa92: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  24696. 800aa96: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  24697. 800aa9a: d108 bne.n 800aaae <HAL_RCCEx_GetPeriphCLKFreq+0x1de>
  24698. {
  24699. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  24700. 800aa9c: f107 0318 add.w r3, r7, #24
  24701. 800aaa0: 4618 mov r0, r3
  24702. 800aaa2: f000 fcab bl 800b3fc <HAL_RCCEx_GetPLL2ClockFreq>
  24703. frequency = pll2_clocks.PLL2_P_Frequency;
  24704. 800aaa6: 69bb ldr r3, [r7, #24]
  24705. 800aaa8: 63fb str r3, [r7, #60] @ 0x3c
  24706. }
  24707. else
  24708. {
  24709. frequency = 0;
  24710. }
  24711. break;
  24712. 800aaaa: f000 bc88 b.w 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  24713. frequency = 0;
  24714. 800aaae: 2300 movs r3, #0
  24715. 800aab0: 63fb str r3, [r7, #60] @ 0x3c
  24716. break;
  24717. 800aab2: f000 bc84 b.w 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  24718. }
  24719. case RCC_SAI23CLKSOURCE_PLL3: /* PLL3 is the clock source for SAI2/3 */
  24720. {
  24721. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
  24722. 800aab6: 4b2b ldr r3, [pc, #172] @ (800ab64 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  24723. 800aab8: 681b ldr r3, [r3, #0]
  24724. 800aaba: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  24725. 800aabe: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  24726. 800aac2: d108 bne.n 800aad6 <HAL_RCCEx_GetPeriphCLKFreq+0x206>
  24727. {
  24728. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  24729. 800aac4: f107 030c add.w r3, r7, #12
  24730. 800aac8: 4618 mov r0, r3
  24731. 800aaca: f000 fdeb bl 800b6a4 <HAL_RCCEx_GetPLL3ClockFreq>
  24732. frequency = pll3_clocks.PLL3_P_Frequency;
  24733. 800aace: 68fb ldr r3, [r7, #12]
  24734. 800aad0: 63fb str r3, [r7, #60] @ 0x3c
  24735. }
  24736. else
  24737. {
  24738. frequency = 0;
  24739. }
  24740. break;
  24741. 800aad2: f000 bc74 b.w 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  24742. frequency = 0;
  24743. 800aad6: 2300 movs r3, #0
  24744. 800aad8: 63fb str r3, [r7, #60] @ 0x3c
  24745. break;
  24746. 800aada: f000 bc70 b.w 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  24747. }
  24748. case RCC_SAI23CLKSOURCE_CLKP: /* CKPER is the clock source for SAI2/3 */
  24749. {
  24750. ckpclocksource = __HAL_RCC_GET_CLKP_SOURCE();
  24751. 800aade: 4b21 ldr r3, [pc, #132] @ (800ab64 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  24752. 800aae0: 6cdb ldr r3, [r3, #76] @ 0x4c
  24753. 800aae2: f003 5340 and.w r3, r3, #805306368 @ 0x30000000
  24754. 800aae6: 637b str r3, [r7, #52] @ 0x34
  24755. if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSI))
  24756. 800aae8: 4b1e ldr r3, [pc, #120] @ (800ab64 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  24757. 800aaea: 681b ldr r3, [r3, #0]
  24758. 800aaec: f003 0304 and.w r3, r3, #4
  24759. 800aaf0: 2b04 cmp r3, #4
  24760. 800aaf2: d10c bne.n 800ab0e <HAL_RCCEx_GetPeriphCLKFreq+0x23e>
  24761. 800aaf4: 6b7b ldr r3, [r7, #52] @ 0x34
  24762. 800aaf6: 2b00 cmp r3, #0
  24763. 800aaf8: d109 bne.n 800ab0e <HAL_RCCEx_GetPeriphCLKFreq+0x23e>
  24764. {
  24765. /* In Case the CKPER Source is HSI */
  24766. frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  24767. 800aafa: 4b1a ldr r3, [pc, #104] @ (800ab64 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  24768. 800aafc: 681b ldr r3, [r3, #0]
  24769. 800aafe: 08db lsrs r3, r3, #3
  24770. 800ab00: f003 0303 and.w r3, r3, #3
  24771. 800ab04: 4a18 ldr r2, [pc, #96] @ (800ab68 <HAL_RCCEx_GetPeriphCLKFreq+0x298>)
  24772. 800ab06: fa22 f303 lsr.w r3, r2, r3
  24773. 800ab0a: 63fb str r3, [r7, #60] @ 0x3c
  24774. 800ab0c: e01f b.n 800ab4e <HAL_RCCEx_GetPeriphCLKFreq+0x27e>
  24775. }
  24776. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_CSI))
  24777. 800ab0e: 4b15 ldr r3, [pc, #84] @ (800ab64 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  24778. 800ab10: 681b ldr r3, [r3, #0]
  24779. 800ab12: f403 7380 and.w r3, r3, #256 @ 0x100
  24780. 800ab16: f5b3 7f80 cmp.w r3, #256 @ 0x100
  24781. 800ab1a: d106 bne.n 800ab2a <HAL_RCCEx_GetPeriphCLKFreq+0x25a>
  24782. 800ab1c: 6b7b ldr r3, [r7, #52] @ 0x34
  24783. 800ab1e: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  24784. 800ab22: d102 bne.n 800ab2a <HAL_RCCEx_GetPeriphCLKFreq+0x25a>
  24785. {
  24786. /* In Case the CKPER Source is CSI */
  24787. frequency = CSI_VALUE;
  24788. 800ab24: 4b11 ldr r3, [pc, #68] @ (800ab6c <HAL_RCCEx_GetPeriphCLKFreq+0x29c>)
  24789. 800ab26: 63fb str r3, [r7, #60] @ 0x3c
  24790. 800ab28: e011 b.n 800ab4e <HAL_RCCEx_GetPeriphCLKFreq+0x27e>
  24791. }
  24792. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSE))
  24793. 800ab2a: 4b0e ldr r3, [pc, #56] @ (800ab64 <HAL_RCCEx_GetPeriphCLKFreq+0x294>)
  24794. 800ab2c: 681b ldr r3, [r3, #0]
  24795. 800ab2e: f403 3300 and.w r3, r3, #131072 @ 0x20000
  24796. 800ab32: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  24797. 800ab36: d106 bne.n 800ab46 <HAL_RCCEx_GetPeriphCLKFreq+0x276>
  24798. 800ab38: 6b7b ldr r3, [r7, #52] @ 0x34
  24799. 800ab3a: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  24800. 800ab3e: d102 bne.n 800ab46 <HAL_RCCEx_GetPeriphCLKFreq+0x276>
  24801. {
  24802. /* In Case the CKPER Source is HSE */
  24803. frequency = HSE_VALUE;
  24804. 800ab40: 4b0b ldr r3, [pc, #44] @ (800ab70 <HAL_RCCEx_GetPeriphCLKFreq+0x2a0>)
  24805. 800ab42: 63fb str r3, [r7, #60] @ 0x3c
  24806. 800ab44: e003 b.n 800ab4e <HAL_RCCEx_GetPeriphCLKFreq+0x27e>
  24807. }
  24808. else
  24809. {
  24810. /* In Case the CKPER is disabled*/
  24811. frequency = 0;
  24812. 800ab46: 2300 movs r3, #0
  24813. 800ab48: 63fb str r3, [r7, #60] @ 0x3c
  24814. }
  24815. break;
  24816. 800ab4a: f000 bc38 b.w 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  24817. 800ab4e: f000 bc36 b.w 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  24818. }
  24819. case (RCC_SAI23CLKSOURCE_PIN): /* External clock is the clock source for SAI2/3 */
  24820. {
  24821. frequency = EXTERNAL_CLOCK_VALUE;
  24822. 800ab52: 4b08 ldr r3, [pc, #32] @ (800ab74 <HAL_RCCEx_GetPeriphCLKFreq+0x2a4>)
  24823. 800ab54: 63fb str r3, [r7, #60] @ 0x3c
  24824. break;
  24825. 800ab56: f000 bc32 b.w 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  24826. }
  24827. default :
  24828. {
  24829. frequency = 0;
  24830. 800ab5a: 2300 movs r3, #0
  24831. 800ab5c: 63fb str r3, [r7, #60] @ 0x3c
  24832. break;
  24833. 800ab5e: f000 bc2e b.w 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  24834. 800ab62: bf00 nop
  24835. 800ab64: 58024400 .word 0x58024400
  24836. 800ab68: 03d09000 .word 0x03d09000
  24837. 800ab6c: 003d0900 .word 0x003d0900
  24838. 800ab70: 017d7840 .word 0x017d7840
  24839. 800ab74: 00bb8000 .word 0x00bb8000
  24840. }
  24841. }
  24842. #endif
  24843. #if defined(SAI4)
  24844. else if (PeriphClk == RCC_PERIPHCLK_SAI4A)
  24845. 800ab78: e9d7 2300 ldrd r2, r3, [r7]
  24846. 800ab7c: f5a2 6180 sub.w r1, r2, #1024 @ 0x400
  24847. 800ab80: 430b orrs r3, r1
  24848. 800ab82: f040 809c bne.w 800acbe <HAL_RCCEx_GetPeriphCLKFreq+0x3ee>
  24849. {
  24850. saiclocksource = __HAL_RCC_GET_SAI4A_SOURCE();
  24851. 800ab86: 4b9e ldr r3, [pc, #632] @ (800ae00 <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  24852. 800ab88: 6d9b ldr r3, [r3, #88] @ 0x58
  24853. 800ab8a: f403 0360 and.w r3, r3, #14680064 @ 0xe00000
  24854. 800ab8e: 633b str r3, [r7, #48] @ 0x30
  24855. switch (saiclocksource)
  24856. 800ab90: 6b3b ldr r3, [r7, #48] @ 0x30
  24857. 800ab92: f5b3 0f00 cmp.w r3, #8388608 @ 0x800000
  24858. 800ab96: d054 beq.n 800ac42 <HAL_RCCEx_GetPeriphCLKFreq+0x372>
  24859. 800ab98: 6b3b ldr r3, [r7, #48] @ 0x30
  24860. 800ab9a: f5b3 0f00 cmp.w r3, #8388608 @ 0x800000
  24861. 800ab9e: f200 808b bhi.w 800acb8 <HAL_RCCEx_GetPeriphCLKFreq+0x3e8>
  24862. 800aba2: 6b3b ldr r3, [r7, #48] @ 0x30
  24863. 800aba4: f5b3 0fc0 cmp.w r3, #6291456 @ 0x600000
  24864. 800aba8: f000 8083 beq.w 800acb2 <HAL_RCCEx_GetPeriphCLKFreq+0x3e2>
  24865. 800abac: 6b3b ldr r3, [r7, #48] @ 0x30
  24866. 800abae: f5b3 0fc0 cmp.w r3, #6291456 @ 0x600000
  24867. 800abb2: f200 8081 bhi.w 800acb8 <HAL_RCCEx_GetPeriphCLKFreq+0x3e8>
  24868. 800abb6: 6b3b ldr r3, [r7, #48] @ 0x30
  24869. 800abb8: f5b3 0f80 cmp.w r3, #4194304 @ 0x400000
  24870. 800abbc: d02f beq.n 800ac1e <HAL_RCCEx_GetPeriphCLKFreq+0x34e>
  24871. 800abbe: 6b3b ldr r3, [r7, #48] @ 0x30
  24872. 800abc0: f5b3 0f80 cmp.w r3, #4194304 @ 0x400000
  24873. 800abc4: d878 bhi.n 800acb8 <HAL_RCCEx_GetPeriphCLKFreq+0x3e8>
  24874. 800abc6: 6b3b ldr r3, [r7, #48] @ 0x30
  24875. 800abc8: 2b00 cmp r3, #0
  24876. 800abca: d004 beq.n 800abd6 <HAL_RCCEx_GetPeriphCLKFreq+0x306>
  24877. 800abcc: 6b3b ldr r3, [r7, #48] @ 0x30
  24878. 800abce: f5b3 1f00 cmp.w r3, #2097152 @ 0x200000
  24879. 800abd2: d012 beq.n 800abfa <HAL_RCCEx_GetPeriphCLKFreq+0x32a>
  24880. 800abd4: e070 b.n 800acb8 <HAL_RCCEx_GetPeriphCLKFreq+0x3e8>
  24881. {
  24882. case RCC_SAI4ACLKSOURCE_PLL: /* PLL1 is the clock source for SAI4A */
  24883. {
  24884. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
  24885. 800abd6: 4b8a ldr r3, [pc, #552] @ (800ae00 <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  24886. 800abd8: 681b ldr r3, [r3, #0]
  24887. 800abda: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  24888. 800abde: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  24889. 800abe2: d107 bne.n 800abf4 <HAL_RCCEx_GetPeriphCLKFreq+0x324>
  24890. {
  24891. HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
  24892. 800abe4: f107 0324 add.w r3, r7, #36 @ 0x24
  24893. 800abe8: 4618 mov r0, r3
  24894. 800abea: f000 feaf bl 800b94c <HAL_RCCEx_GetPLL1ClockFreq>
  24895. frequency = pll1_clocks.PLL1_Q_Frequency;
  24896. 800abee: 6abb ldr r3, [r7, #40] @ 0x28
  24897. 800abf0: 63fb str r3, [r7, #60] @ 0x3c
  24898. }
  24899. else
  24900. {
  24901. frequency = 0;
  24902. }
  24903. break;
  24904. 800abf2: e3e4 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  24905. frequency = 0;
  24906. 800abf4: 2300 movs r3, #0
  24907. 800abf6: 63fb str r3, [r7, #60] @ 0x3c
  24908. break;
  24909. 800abf8: e3e1 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  24910. }
  24911. case RCC_SAI4ACLKSOURCE_PLL2: /* PLLI2 is the clock source for SAI4A */
  24912. {
  24913. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  24914. 800abfa: 4b81 ldr r3, [pc, #516] @ (800ae00 <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  24915. 800abfc: 681b ldr r3, [r3, #0]
  24916. 800abfe: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  24917. 800ac02: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  24918. 800ac06: d107 bne.n 800ac18 <HAL_RCCEx_GetPeriphCLKFreq+0x348>
  24919. {
  24920. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  24921. 800ac08: f107 0318 add.w r3, r7, #24
  24922. 800ac0c: 4618 mov r0, r3
  24923. 800ac0e: f000 fbf5 bl 800b3fc <HAL_RCCEx_GetPLL2ClockFreq>
  24924. frequency = pll2_clocks.PLL2_P_Frequency;
  24925. 800ac12: 69bb ldr r3, [r7, #24]
  24926. 800ac14: 63fb str r3, [r7, #60] @ 0x3c
  24927. }
  24928. else
  24929. {
  24930. frequency = 0;
  24931. }
  24932. break;
  24933. 800ac16: e3d2 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  24934. frequency = 0;
  24935. 800ac18: 2300 movs r3, #0
  24936. 800ac1a: 63fb str r3, [r7, #60] @ 0x3c
  24937. break;
  24938. 800ac1c: e3cf b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  24939. }
  24940. case RCC_SAI4ACLKSOURCE_PLL3: /* PLLI3 is the clock source for SAI4A */
  24941. {
  24942. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
  24943. 800ac1e: 4b78 ldr r3, [pc, #480] @ (800ae00 <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  24944. 800ac20: 681b ldr r3, [r3, #0]
  24945. 800ac22: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  24946. 800ac26: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  24947. 800ac2a: d107 bne.n 800ac3c <HAL_RCCEx_GetPeriphCLKFreq+0x36c>
  24948. {
  24949. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  24950. 800ac2c: f107 030c add.w r3, r7, #12
  24951. 800ac30: 4618 mov r0, r3
  24952. 800ac32: f000 fd37 bl 800b6a4 <HAL_RCCEx_GetPLL3ClockFreq>
  24953. frequency = pll3_clocks.PLL3_P_Frequency;
  24954. 800ac36: 68fb ldr r3, [r7, #12]
  24955. 800ac38: 63fb str r3, [r7, #60] @ 0x3c
  24956. }
  24957. else
  24958. {
  24959. frequency = 0;
  24960. }
  24961. break;
  24962. 800ac3a: e3c0 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  24963. frequency = 0;
  24964. 800ac3c: 2300 movs r3, #0
  24965. 800ac3e: 63fb str r3, [r7, #60] @ 0x3c
  24966. break;
  24967. 800ac40: e3bd b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  24968. }
  24969. case RCC_SAI4ACLKSOURCE_CLKP: /* CKPER is the clock source for SAI4A*/
  24970. {
  24971. ckpclocksource = __HAL_RCC_GET_CLKP_SOURCE();
  24972. 800ac42: 4b6f ldr r3, [pc, #444] @ (800ae00 <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  24973. 800ac44: 6cdb ldr r3, [r3, #76] @ 0x4c
  24974. 800ac46: f003 5340 and.w r3, r3, #805306368 @ 0x30000000
  24975. 800ac4a: 637b str r3, [r7, #52] @ 0x34
  24976. if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSI))
  24977. 800ac4c: 4b6c ldr r3, [pc, #432] @ (800ae00 <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  24978. 800ac4e: 681b ldr r3, [r3, #0]
  24979. 800ac50: f003 0304 and.w r3, r3, #4
  24980. 800ac54: 2b04 cmp r3, #4
  24981. 800ac56: d10c bne.n 800ac72 <HAL_RCCEx_GetPeriphCLKFreq+0x3a2>
  24982. 800ac58: 6b7b ldr r3, [r7, #52] @ 0x34
  24983. 800ac5a: 2b00 cmp r3, #0
  24984. 800ac5c: d109 bne.n 800ac72 <HAL_RCCEx_GetPeriphCLKFreq+0x3a2>
  24985. {
  24986. /* In Case the CKPER Source is HSI */
  24987. frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  24988. 800ac5e: 4b68 ldr r3, [pc, #416] @ (800ae00 <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  24989. 800ac60: 681b ldr r3, [r3, #0]
  24990. 800ac62: 08db lsrs r3, r3, #3
  24991. 800ac64: f003 0303 and.w r3, r3, #3
  24992. 800ac68: 4a66 ldr r2, [pc, #408] @ (800ae04 <HAL_RCCEx_GetPeriphCLKFreq+0x534>)
  24993. 800ac6a: fa22 f303 lsr.w r3, r2, r3
  24994. 800ac6e: 63fb str r3, [r7, #60] @ 0x3c
  24995. 800ac70: e01e b.n 800acb0 <HAL_RCCEx_GetPeriphCLKFreq+0x3e0>
  24996. }
  24997. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_CSI))
  24998. 800ac72: 4b63 ldr r3, [pc, #396] @ (800ae00 <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  24999. 800ac74: 681b ldr r3, [r3, #0]
  25000. 800ac76: f403 7380 and.w r3, r3, #256 @ 0x100
  25001. 800ac7a: f5b3 7f80 cmp.w r3, #256 @ 0x100
  25002. 800ac7e: d106 bne.n 800ac8e <HAL_RCCEx_GetPeriphCLKFreq+0x3be>
  25003. 800ac80: 6b7b ldr r3, [r7, #52] @ 0x34
  25004. 800ac82: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  25005. 800ac86: d102 bne.n 800ac8e <HAL_RCCEx_GetPeriphCLKFreq+0x3be>
  25006. {
  25007. /* In Case the CKPER Source is CSI */
  25008. frequency = CSI_VALUE;
  25009. 800ac88: 4b5f ldr r3, [pc, #380] @ (800ae08 <HAL_RCCEx_GetPeriphCLKFreq+0x538>)
  25010. 800ac8a: 63fb str r3, [r7, #60] @ 0x3c
  25011. 800ac8c: e010 b.n 800acb0 <HAL_RCCEx_GetPeriphCLKFreq+0x3e0>
  25012. }
  25013. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSE))
  25014. 800ac8e: 4b5c ldr r3, [pc, #368] @ (800ae00 <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  25015. 800ac90: 681b ldr r3, [r3, #0]
  25016. 800ac92: f403 3300 and.w r3, r3, #131072 @ 0x20000
  25017. 800ac96: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  25018. 800ac9a: d106 bne.n 800acaa <HAL_RCCEx_GetPeriphCLKFreq+0x3da>
  25019. 800ac9c: 6b7b ldr r3, [r7, #52] @ 0x34
  25020. 800ac9e: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  25021. 800aca2: d102 bne.n 800acaa <HAL_RCCEx_GetPeriphCLKFreq+0x3da>
  25022. {
  25023. /* In Case the CKPER Source is HSE */
  25024. frequency = HSE_VALUE;
  25025. 800aca4: 4b59 ldr r3, [pc, #356] @ (800ae0c <HAL_RCCEx_GetPeriphCLKFreq+0x53c>)
  25026. 800aca6: 63fb str r3, [r7, #60] @ 0x3c
  25027. 800aca8: e002 b.n 800acb0 <HAL_RCCEx_GetPeriphCLKFreq+0x3e0>
  25028. }
  25029. else
  25030. {
  25031. /* In Case the CKPER is disabled*/
  25032. frequency = 0;
  25033. 800acaa: 2300 movs r3, #0
  25034. 800acac: 63fb str r3, [r7, #60] @ 0x3c
  25035. }
  25036. break;
  25037. 800acae: e386 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25038. 800acb0: e385 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25039. }
  25040. case RCC_SAI4ACLKSOURCE_PIN: /* External clock is the clock source for SAI4A */
  25041. {
  25042. frequency = EXTERNAL_CLOCK_VALUE;
  25043. 800acb2: 4b57 ldr r3, [pc, #348] @ (800ae10 <HAL_RCCEx_GetPeriphCLKFreq+0x540>)
  25044. 800acb4: 63fb str r3, [r7, #60] @ 0x3c
  25045. break;
  25046. 800acb6: e382 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25047. }
  25048. default :
  25049. {
  25050. frequency = 0;
  25051. 800acb8: 2300 movs r3, #0
  25052. 800acba: 63fb str r3, [r7, #60] @ 0x3c
  25053. break;
  25054. 800acbc: e37f b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25055. }
  25056. }
  25057. }
  25058. else if (PeriphClk == RCC_PERIPHCLK_SAI4B)
  25059. 800acbe: e9d7 2300 ldrd r2, r3, [r7]
  25060. 800acc2: f5a2 6100 sub.w r1, r2, #2048 @ 0x800
  25061. 800acc6: 430b orrs r3, r1
  25062. 800acc8: f040 80a7 bne.w 800ae1a <HAL_RCCEx_GetPeriphCLKFreq+0x54a>
  25063. {
  25064. saiclocksource = __HAL_RCC_GET_SAI4B_SOURCE();
  25065. 800accc: 4b4c ldr r3, [pc, #304] @ (800ae00 <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  25066. 800acce: 6d9b ldr r3, [r3, #88] @ 0x58
  25067. 800acd0: f003 63e0 and.w r3, r3, #117440512 @ 0x7000000
  25068. 800acd4: 633b str r3, [r7, #48] @ 0x30
  25069. switch (saiclocksource)
  25070. 800acd6: 6b3b ldr r3, [r7, #48] @ 0x30
  25071. 800acd8: f1b3 6f80 cmp.w r3, #67108864 @ 0x4000000
  25072. 800acdc: d055 beq.n 800ad8a <HAL_RCCEx_GetPeriphCLKFreq+0x4ba>
  25073. 800acde: 6b3b ldr r3, [r7, #48] @ 0x30
  25074. 800ace0: f1b3 6f80 cmp.w r3, #67108864 @ 0x4000000
  25075. 800ace4: f200 8096 bhi.w 800ae14 <HAL_RCCEx_GetPeriphCLKFreq+0x544>
  25076. 800ace8: 6b3b ldr r3, [r7, #48] @ 0x30
  25077. 800acea: f1b3 7f40 cmp.w r3, #50331648 @ 0x3000000
  25078. 800acee: f000 8084 beq.w 800adfa <HAL_RCCEx_GetPeriphCLKFreq+0x52a>
  25079. 800acf2: 6b3b ldr r3, [r7, #48] @ 0x30
  25080. 800acf4: f1b3 7f40 cmp.w r3, #50331648 @ 0x3000000
  25081. 800acf8: f200 808c bhi.w 800ae14 <HAL_RCCEx_GetPeriphCLKFreq+0x544>
  25082. 800acfc: 6b3b ldr r3, [r7, #48] @ 0x30
  25083. 800acfe: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  25084. 800ad02: d030 beq.n 800ad66 <HAL_RCCEx_GetPeriphCLKFreq+0x496>
  25085. 800ad04: 6b3b ldr r3, [r7, #48] @ 0x30
  25086. 800ad06: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  25087. 800ad0a: f200 8083 bhi.w 800ae14 <HAL_RCCEx_GetPeriphCLKFreq+0x544>
  25088. 800ad0e: 6b3b ldr r3, [r7, #48] @ 0x30
  25089. 800ad10: 2b00 cmp r3, #0
  25090. 800ad12: d004 beq.n 800ad1e <HAL_RCCEx_GetPeriphCLKFreq+0x44e>
  25091. 800ad14: 6b3b ldr r3, [r7, #48] @ 0x30
  25092. 800ad16: f1b3 7f80 cmp.w r3, #16777216 @ 0x1000000
  25093. 800ad1a: d012 beq.n 800ad42 <HAL_RCCEx_GetPeriphCLKFreq+0x472>
  25094. 800ad1c: e07a b.n 800ae14 <HAL_RCCEx_GetPeriphCLKFreq+0x544>
  25095. {
  25096. case RCC_SAI4BCLKSOURCE_PLL: /* PLL1 is the clock source for SAI4B */
  25097. {
  25098. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
  25099. 800ad1e: 4b38 ldr r3, [pc, #224] @ (800ae00 <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  25100. 800ad20: 681b ldr r3, [r3, #0]
  25101. 800ad22: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  25102. 800ad26: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  25103. 800ad2a: d107 bne.n 800ad3c <HAL_RCCEx_GetPeriphCLKFreq+0x46c>
  25104. {
  25105. HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
  25106. 800ad2c: f107 0324 add.w r3, r7, #36 @ 0x24
  25107. 800ad30: 4618 mov r0, r3
  25108. 800ad32: f000 fe0b bl 800b94c <HAL_RCCEx_GetPLL1ClockFreq>
  25109. frequency = pll1_clocks.PLL1_Q_Frequency;
  25110. 800ad36: 6abb ldr r3, [r7, #40] @ 0x28
  25111. 800ad38: 63fb str r3, [r7, #60] @ 0x3c
  25112. }
  25113. else
  25114. {
  25115. frequency = 0;
  25116. }
  25117. break;
  25118. 800ad3a: e340 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25119. frequency = 0;
  25120. 800ad3c: 2300 movs r3, #0
  25121. 800ad3e: 63fb str r3, [r7, #60] @ 0x3c
  25122. break;
  25123. 800ad40: e33d b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25124. }
  25125. case RCC_SAI4BCLKSOURCE_PLL2: /* PLLI2 is the clock source for SAI4B */
  25126. {
  25127. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  25128. 800ad42: 4b2f ldr r3, [pc, #188] @ (800ae00 <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  25129. 800ad44: 681b ldr r3, [r3, #0]
  25130. 800ad46: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  25131. 800ad4a: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  25132. 800ad4e: d107 bne.n 800ad60 <HAL_RCCEx_GetPeriphCLKFreq+0x490>
  25133. {
  25134. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  25135. 800ad50: f107 0318 add.w r3, r7, #24
  25136. 800ad54: 4618 mov r0, r3
  25137. 800ad56: f000 fb51 bl 800b3fc <HAL_RCCEx_GetPLL2ClockFreq>
  25138. frequency = pll2_clocks.PLL2_P_Frequency;
  25139. 800ad5a: 69bb ldr r3, [r7, #24]
  25140. 800ad5c: 63fb str r3, [r7, #60] @ 0x3c
  25141. }
  25142. else
  25143. {
  25144. frequency = 0;
  25145. }
  25146. break;
  25147. 800ad5e: e32e b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25148. frequency = 0;
  25149. 800ad60: 2300 movs r3, #0
  25150. 800ad62: 63fb str r3, [r7, #60] @ 0x3c
  25151. break;
  25152. 800ad64: e32b b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25153. }
  25154. case RCC_SAI4BCLKSOURCE_PLL3: /* PLLI3 is the clock source for SAI4B */
  25155. {
  25156. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
  25157. 800ad66: 4b26 ldr r3, [pc, #152] @ (800ae00 <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  25158. 800ad68: 681b ldr r3, [r3, #0]
  25159. 800ad6a: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  25160. 800ad6e: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  25161. 800ad72: d107 bne.n 800ad84 <HAL_RCCEx_GetPeriphCLKFreq+0x4b4>
  25162. {
  25163. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  25164. 800ad74: f107 030c add.w r3, r7, #12
  25165. 800ad78: 4618 mov r0, r3
  25166. 800ad7a: f000 fc93 bl 800b6a4 <HAL_RCCEx_GetPLL3ClockFreq>
  25167. frequency = pll3_clocks.PLL3_P_Frequency;
  25168. 800ad7e: 68fb ldr r3, [r7, #12]
  25169. 800ad80: 63fb str r3, [r7, #60] @ 0x3c
  25170. }
  25171. else
  25172. {
  25173. frequency = 0;
  25174. }
  25175. break;
  25176. 800ad82: e31c b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25177. frequency = 0;
  25178. 800ad84: 2300 movs r3, #0
  25179. 800ad86: 63fb str r3, [r7, #60] @ 0x3c
  25180. break;
  25181. 800ad88: e319 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25182. }
  25183. case RCC_SAI4BCLKSOURCE_CLKP: /* CKPER is the clock source for SAI4B*/
  25184. {
  25185. ckpclocksource = __HAL_RCC_GET_CLKP_SOURCE();
  25186. 800ad8a: 4b1d ldr r3, [pc, #116] @ (800ae00 <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  25187. 800ad8c: 6cdb ldr r3, [r3, #76] @ 0x4c
  25188. 800ad8e: f003 5340 and.w r3, r3, #805306368 @ 0x30000000
  25189. 800ad92: 637b str r3, [r7, #52] @ 0x34
  25190. if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSI))
  25191. 800ad94: 4b1a ldr r3, [pc, #104] @ (800ae00 <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  25192. 800ad96: 681b ldr r3, [r3, #0]
  25193. 800ad98: f003 0304 and.w r3, r3, #4
  25194. 800ad9c: 2b04 cmp r3, #4
  25195. 800ad9e: d10c bne.n 800adba <HAL_RCCEx_GetPeriphCLKFreq+0x4ea>
  25196. 800ada0: 6b7b ldr r3, [r7, #52] @ 0x34
  25197. 800ada2: 2b00 cmp r3, #0
  25198. 800ada4: d109 bne.n 800adba <HAL_RCCEx_GetPeriphCLKFreq+0x4ea>
  25199. {
  25200. /* In Case the CKPER Source is HSI */
  25201. frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  25202. 800ada6: 4b16 ldr r3, [pc, #88] @ (800ae00 <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  25203. 800ada8: 681b ldr r3, [r3, #0]
  25204. 800adaa: 08db lsrs r3, r3, #3
  25205. 800adac: f003 0303 and.w r3, r3, #3
  25206. 800adb0: 4a14 ldr r2, [pc, #80] @ (800ae04 <HAL_RCCEx_GetPeriphCLKFreq+0x534>)
  25207. 800adb2: fa22 f303 lsr.w r3, r2, r3
  25208. 800adb6: 63fb str r3, [r7, #60] @ 0x3c
  25209. 800adb8: e01e b.n 800adf8 <HAL_RCCEx_GetPeriphCLKFreq+0x528>
  25210. }
  25211. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_CSI))
  25212. 800adba: 4b11 ldr r3, [pc, #68] @ (800ae00 <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  25213. 800adbc: 681b ldr r3, [r3, #0]
  25214. 800adbe: f403 7380 and.w r3, r3, #256 @ 0x100
  25215. 800adc2: f5b3 7f80 cmp.w r3, #256 @ 0x100
  25216. 800adc6: d106 bne.n 800add6 <HAL_RCCEx_GetPeriphCLKFreq+0x506>
  25217. 800adc8: 6b7b ldr r3, [r7, #52] @ 0x34
  25218. 800adca: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  25219. 800adce: d102 bne.n 800add6 <HAL_RCCEx_GetPeriphCLKFreq+0x506>
  25220. {
  25221. /* In Case the CKPER Source is CSI */
  25222. frequency = CSI_VALUE;
  25223. 800add0: 4b0d ldr r3, [pc, #52] @ (800ae08 <HAL_RCCEx_GetPeriphCLKFreq+0x538>)
  25224. 800add2: 63fb str r3, [r7, #60] @ 0x3c
  25225. 800add4: e010 b.n 800adf8 <HAL_RCCEx_GetPeriphCLKFreq+0x528>
  25226. }
  25227. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSE))
  25228. 800add6: 4b0a ldr r3, [pc, #40] @ (800ae00 <HAL_RCCEx_GetPeriphCLKFreq+0x530>)
  25229. 800add8: 681b ldr r3, [r3, #0]
  25230. 800adda: f403 3300 and.w r3, r3, #131072 @ 0x20000
  25231. 800adde: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  25232. 800ade2: d106 bne.n 800adf2 <HAL_RCCEx_GetPeriphCLKFreq+0x522>
  25233. 800ade4: 6b7b ldr r3, [r7, #52] @ 0x34
  25234. 800ade6: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  25235. 800adea: d102 bne.n 800adf2 <HAL_RCCEx_GetPeriphCLKFreq+0x522>
  25236. {
  25237. /* In Case the CKPER Source is HSE */
  25238. frequency = HSE_VALUE;
  25239. 800adec: 4b07 ldr r3, [pc, #28] @ (800ae0c <HAL_RCCEx_GetPeriphCLKFreq+0x53c>)
  25240. 800adee: 63fb str r3, [r7, #60] @ 0x3c
  25241. 800adf0: e002 b.n 800adf8 <HAL_RCCEx_GetPeriphCLKFreq+0x528>
  25242. }
  25243. else
  25244. {
  25245. /* In Case the CKPER is disabled*/
  25246. frequency = 0;
  25247. 800adf2: 2300 movs r3, #0
  25248. 800adf4: 63fb str r3, [r7, #60] @ 0x3c
  25249. }
  25250. break;
  25251. 800adf6: e2e2 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25252. 800adf8: e2e1 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25253. }
  25254. case RCC_SAI4BCLKSOURCE_PIN: /* External clock is the clock source for SAI4B */
  25255. {
  25256. frequency = EXTERNAL_CLOCK_VALUE;
  25257. 800adfa: 4b05 ldr r3, [pc, #20] @ (800ae10 <HAL_RCCEx_GetPeriphCLKFreq+0x540>)
  25258. 800adfc: 63fb str r3, [r7, #60] @ 0x3c
  25259. break;
  25260. 800adfe: e2de b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25261. 800ae00: 58024400 .word 0x58024400
  25262. 800ae04: 03d09000 .word 0x03d09000
  25263. 800ae08: 003d0900 .word 0x003d0900
  25264. 800ae0c: 017d7840 .word 0x017d7840
  25265. 800ae10: 00bb8000 .word 0x00bb8000
  25266. }
  25267. default :
  25268. {
  25269. frequency = 0;
  25270. 800ae14: 2300 movs r3, #0
  25271. 800ae16: 63fb str r3, [r7, #60] @ 0x3c
  25272. break;
  25273. 800ae18: e2d1 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25274. }
  25275. }
  25276. }
  25277. #endif /*SAI4*/
  25278. else if (PeriphClk == RCC_PERIPHCLK_SPI123)
  25279. 800ae1a: e9d7 2300 ldrd r2, r3, [r7]
  25280. 800ae1e: f5a2 5180 sub.w r1, r2, #4096 @ 0x1000
  25281. 800ae22: 430b orrs r3, r1
  25282. 800ae24: f040 809c bne.w 800af60 <HAL_RCCEx_GetPeriphCLKFreq+0x690>
  25283. {
  25284. /* Get SPI1/2/3 clock source */
  25285. srcclk = __HAL_RCC_GET_SPI123_SOURCE();
  25286. 800ae28: 4b93 ldr r3, [pc, #588] @ (800b078 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  25287. 800ae2a: 6d1b ldr r3, [r3, #80] @ 0x50
  25288. 800ae2c: f403 43e0 and.w r3, r3, #28672 @ 0x7000
  25289. 800ae30: 63bb str r3, [r7, #56] @ 0x38
  25290. switch (srcclk)
  25291. 800ae32: 6bbb ldr r3, [r7, #56] @ 0x38
  25292. 800ae34: f5b3 4f80 cmp.w r3, #16384 @ 0x4000
  25293. 800ae38: d054 beq.n 800aee4 <HAL_RCCEx_GetPeriphCLKFreq+0x614>
  25294. 800ae3a: 6bbb ldr r3, [r7, #56] @ 0x38
  25295. 800ae3c: f5b3 4f80 cmp.w r3, #16384 @ 0x4000
  25296. 800ae40: f200 808b bhi.w 800af5a <HAL_RCCEx_GetPeriphCLKFreq+0x68a>
  25297. 800ae44: 6bbb ldr r3, [r7, #56] @ 0x38
  25298. 800ae46: f5b3 5f40 cmp.w r3, #12288 @ 0x3000
  25299. 800ae4a: f000 8083 beq.w 800af54 <HAL_RCCEx_GetPeriphCLKFreq+0x684>
  25300. 800ae4e: 6bbb ldr r3, [r7, #56] @ 0x38
  25301. 800ae50: f5b3 5f40 cmp.w r3, #12288 @ 0x3000
  25302. 800ae54: f200 8081 bhi.w 800af5a <HAL_RCCEx_GetPeriphCLKFreq+0x68a>
  25303. 800ae58: 6bbb ldr r3, [r7, #56] @ 0x38
  25304. 800ae5a: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  25305. 800ae5e: d02f beq.n 800aec0 <HAL_RCCEx_GetPeriphCLKFreq+0x5f0>
  25306. 800ae60: 6bbb ldr r3, [r7, #56] @ 0x38
  25307. 800ae62: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  25308. 800ae66: d878 bhi.n 800af5a <HAL_RCCEx_GetPeriphCLKFreq+0x68a>
  25309. 800ae68: 6bbb ldr r3, [r7, #56] @ 0x38
  25310. 800ae6a: 2b00 cmp r3, #0
  25311. 800ae6c: d004 beq.n 800ae78 <HAL_RCCEx_GetPeriphCLKFreq+0x5a8>
  25312. 800ae6e: 6bbb ldr r3, [r7, #56] @ 0x38
  25313. 800ae70: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  25314. 800ae74: d012 beq.n 800ae9c <HAL_RCCEx_GetPeriphCLKFreq+0x5cc>
  25315. 800ae76: e070 b.n 800af5a <HAL_RCCEx_GetPeriphCLKFreq+0x68a>
  25316. {
  25317. case RCC_SPI123CLKSOURCE_PLL: /* PLL1 is the clock source for SPI123 */
  25318. {
  25319. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
  25320. 800ae78: 4b7f ldr r3, [pc, #508] @ (800b078 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  25321. 800ae7a: 681b ldr r3, [r3, #0]
  25322. 800ae7c: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  25323. 800ae80: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  25324. 800ae84: d107 bne.n 800ae96 <HAL_RCCEx_GetPeriphCLKFreq+0x5c6>
  25325. {
  25326. HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
  25327. 800ae86: f107 0324 add.w r3, r7, #36 @ 0x24
  25328. 800ae8a: 4618 mov r0, r3
  25329. 800ae8c: f000 fd5e bl 800b94c <HAL_RCCEx_GetPLL1ClockFreq>
  25330. frequency = pll1_clocks.PLL1_Q_Frequency;
  25331. 800ae90: 6abb ldr r3, [r7, #40] @ 0x28
  25332. 800ae92: 63fb str r3, [r7, #60] @ 0x3c
  25333. }
  25334. else
  25335. {
  25336. frequency = 0;
  25337. }
  25338. break;
  25339. 800ae94: e293 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25340. frequency = 0;
  25341. 800ae96: 2300 movs r3, #0
  25342. 800ae98: 63fb str r3, [r7, #60] @ 0x3c
  25343. break;
  25344. 800ae9a: e290 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25345. }
  25346. case RCC_SPI123CLKSOURCE_PLL2: /* PLL2 is the clock source for SPI123 */
  25347. {
  25348. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  25349. 800ae9c: 4b76 ldr r3, [pc, #472] @ (800b078 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  25350. 800ae9e: 681b ldr r3, [r3, #0]
  25351. 800aea0: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  25352. 800aea4: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  25353. 800aea8: d107 bne.n 800aeba <HAL_RCCEx_GetPeriphCLKFreq+0x5ea>
  25354. {
  25355. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  25356. 800aeaa: f107 0318 add.w r3, r7, #24
  25357. 800aeae: 4618 mov r0, r3
  25358. 800aeb0: f000 faa4 bl 800b3fc <HAL_RCCEx_GetPLL2ClockFreq>
  25359. frequency = pll2_clocks.PLL2_P_Frequency;
  25360. 800aeb4: 69bb ldr r3, [r7, #24]
  25361. 800aeb6: 63fb str r3, [r7, #60] @ 0x3c
  25362. }
  25363. else
  25364. {
  25365. frequency = 0;
  25366. }
  25367. break;
  25368. 800aeb8: e281 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25369. frequency = 0;
  25370. 800aeba: 2300 movs r3, #0
  25371. 800aebc: 63fb str r3, [r7, #60] @ 0x3c
  25372. break;
  25373. 800aebe: e27e b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25374. }
  25375. case RCC_SPI123CLKSOURCE_PLL3: /* PLL3 is the clock source for SPI123 */
  25376. {
  25377. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
  25378. 800aec0: 4b6d ldr r3, [pc, #436] @ (800b078 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  25379. 800aec2: 681b ldr r3, [r3, #0]
  25380. 800aec4: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  25381. 800aec8: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  25382. 800aecc: d107 bne.n 800aede <HAL_RCCEx_GetPeriphCLKFreq+0x60e>
  25383. {
  25384. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  25385. 800aece: f107 030c add.w r3, r7, #12
  25386. 800aed2: 4618 mov r0, r3
  25387. 800aed4: f000 fbe6 bl 800b6a4 <HAL_RCCEx_GetPLL3ClockFreq>
  25388. frequency = pll3_clocks.PLL3_P_Frequency;
  25389. 800aed8: 68fb ldr r3, [r7, #12]
  25390. 800aeda: 63fb str r3, [r7, #60] @ 0x3c
  25391. }
  25392. else
  25393. {
  25394. frequency = 0;
  25395. }
  25396. break;
  25397. 800aedc: e26f b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25398. frequency = 0;
  25399. 800aede: 2300 movs r3, #0
  25400. 800aee0: 63fb str r3, [r7, #60] @ 0x3c
  25401. break;
  25402. 800aee2: e26c b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25403. }
  25404. case RCC_SPI123CLKSOURCE_CLKP: /* CKPER is the clock source for SPI123 */
  25405. {
  25406. ckpclocksource = __HAL_RCC_GET_CLKP_SOURCE();
  25407. 800aee4: 4b64 ldr r3, [pc, #400] @ (800b078 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  25408. 800aee6: 6cdb ldr r3, [r3, #76] @ 0x4c
  25409. 800aee8: f003 5340 and.w r3, r3, #805306368 @ 0x30000000
  25410. 800aeec: 637b str r3, [r7, #52] @ 0x34
  25411. if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSI))
  25412. 800aeee: 4b62 ldr r3, [pc, #392] @ (800b078 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  25413. 800aef0: 681b ldr r3, [r3, #0]
  25414. 800aef2: f003 0304 and.w r3, r3, #4
  25415. 800aef6: 2b04 cmp r3, #4
  25416. 800aef8: d10c bne.n 800af14 <HAL_RCCEx_GetPeriphCLKFreq+0x644>
  25417. 800aefa: 6b7b ldr r3, [r7, #52] @ 0x34
  25418. 800aefc: 2b00 cmp r3, #0
  25419. 800aefe: d109 bne.n 800af14 <HAL_RCCEx_GetPeriphCLKFreq+0x644>
  25420. {
  25421. /* In Case the CKPER Source is HSI */
  25422. frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  25423. 800af00: 4b5d ldr r3, [pc, #372] @ (800b078 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  25424. 800af02: 681b ldr r3, [r3, #0]
  25425. 800af04: 08db lsrs r3, r3, #3
  25426. 800af06: f003 0303 and.w r3, r3, #3
  25427. 800af0a: 4a5c ldr r2, [pc, #368] @ (800b07c <HAL_RCCEx_GetPeriphCLKFreq+0x7ac>)
  25428. 800af0c: fa22 f303 lsr.w r3, r2, r3
  25429. 800af10: 63fb str r3, [r7, #60] @ 0x3c
  25430. 800af12: e01e b.n 800af52 <HAL_RCCEx_GetPeriphCLKFreq+0x682>
  25431. }
  25432. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_CSI))
  25433. 800af14: 4b58 ldr r3, [pc, #352] @ (800b078 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  25434. 800af16: 681b ldr r3, [r3, #0]
  25435. 800af18: f403 7380 and.w r3, r3, #256 @ 0x100
  25436. 800af1c: f5b3 7f80 cmp.w r3, #256 @ 0x100
  25437. 800af20: d106 bne.n 800af30 <HAL_RCCEx_GetPeriphCLKFreq+0x660>
  25438. 800af22: 6b7b ldr r3, [r7, #52] @ 0x34
  25439. 800af24: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  25440. 800af28: d102 bne.n 800af30 <HAL_RCCEx_GetPeriphCLKFreq+0x660>
  25441. {
  25442. /* In Case the CKPER Source is CSI */
  25443. frequency = CSI_VALUE;
  25444. 800af2a: 4b55 ldr r3, [pc, #340] @ (800b080 <HAL_RCCEx_GetPeriphCLKFreq+0x7b0>)
  25445. 800af2c: 63fb str r3, [r7, #60] @ 0x3c
  25446. 800af2e: e010 b.n 800af52 <HAL_RCCEx_GetPeriphCLKFreq+0x682>
  25447. }
  25448. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSE))
  25449. 800af30: 4b51 ldr r3, [pc, #324] @ (800b078 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  25450. 800af32: 681b ldr r3, [r3, #0]
  25451. 800af34: f403 3300 and.w r3, r3, #131072 @ 0x20000
  25452. 800af38: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  25453. 800af3c: d106 bne.n 800af4c <HAL_RCCEx_GetPeriphCLKFreq+0x67c>
  25454. 800af3e: 6b7b ldr r3, [r7, #52] @ 0x34
  25455. 800af40: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  25456. 800af44: d102 bne.n 800af4c <HAL_RCCEx_GetPeriphCLKFreq+0x67c>
  25457. {
  25458. /* In Case the CKPER Source is HSE */
  25459. frequency = HSE_VALUE;
  25460. 800af46: 4b4f ldr r3, [pc, #316] @ (800b084 <HAL_RCCEx_GetPeriphCLKFreq+0x7b4>)
  25461. 800af48: 63fb str r3, [r7, #60] @ 0x3c
  25462. 800af4a: e002 b.n 800af52 <HAL_RCCEx_GetPeriphCLKFreq+0x682>
  25463. }
  25464. else
  25465. {
  25466. /* In Case the CKPER is disabled*/
  25467. frequency = 0;
  25468. 800af4c: 2300 movs r3, #0
  25469. 800af4e: 63fb str r3, [r7, #60] @ 0x3c
  25470. }
  25471. break;
  25472. 800af50: e235 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25473. 800af52: e234 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25474. }
  25475. case (RCC_SPI123CLKSOURCE_PIN): /* External clock is the clock source for I2S */
  25476. {
  25477. frequency = EXTERNAL_CLOCK_VALUE;
  25478. 800af54: 4b4c ldr r3, [pc, #304] @ (800b088 <HAL_RCCEx_GetPeriphCLKFreq+0x7b8>)
  25479. 800af56: 63fb str r3, [r7, #60] @ 0x3c
  25480. break;
  25481. 800af58: e231 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25482. }
  25483. default :
  25484. {
  25485. frequency = 0;
  25486. 800af5a: 2300 movs r3, #0
  25487. 800af5c: 63fb str r3, [r7, #60] @ 0x3c
  25488. break;
  25489. 800af5e: e22e b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25490. }
  25491. }
  25492. }
  25493. else if (PeriphClk == RCC_PERIPHCLK_SPI45)
  25494. 800af60: e9d7 2300 ldrd r2, r3, [r7]
  25495. 800af64: f5a2 5100 sub.w r1, r2, #8192 @ 0x2000
  25496. 800af68: 430b orrs r3, r1
  25497. 800af6a: f040 808f bne.w 800b08c <HAL_RCCEx_GetPeriphCLKFreq+0x7bc>
  25498. {
  25499. /* Get SPI45 clock source */
  25500. srcclk = __HAL_RCC_GET_SPI45_SOURCE();
  25501. 800af6e: 4b42 ldr r3, [pc, #264] @ (800b078 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  25502. 800af70: 6d1b ldr r3, [r3, #80] @ 0x50
  25503. 800af72: f403 23e0 and.w r3, r3, #458752 @ 0x70000
  25504. 800af76: 63bb str r3, [r7, #56] @ 0x38
  25505. switch (srcclk)
  25506. 800af78: 6bbb ldr r3, [r7, #56] @ 0x38
  25507. 800af7a: f5b3 2fa0 cmp.w r3, #327680 @ 0x50000
  25508. 800af7e: d06b beq.n 800b058 <HAL_RCCEx_GetPeriphCLKFreq+0x788>
  25509. 800af80: 6bbb ldr r3, [r7, #56] @ 0x38
  25510. 800af82: f5b3 2fa0 cmp.w r3, #327680 @ 0x50000
  25511. 800af86: d874 bhi.n 800b072 <HAL_RCCEx_GetPeriphCLKFreq+0x7a2>
  25512. 800af88: 6bbb ldr r3, [r7, #56] @ 0x38
  25513. 800af8a: f5b3 2f80 cmp.w r3, #262144 @ 0x40000
  25514. 800af8e: d056 beq.n 800b03e <HAL_RCCEx_GetPeriphCLKFreq+0x76e>
  25515. 800af90: 6bbb ldr r3, [r7, #56] @ 0x38
  25516. 800af92: f5b3 2f80 cmp.w r3, #262144 @ 0x40000
  25517. 800af96: d86c bhi.n 800b072 <HAL_RCCEx_GetPeriphCLKFreq+0x7a2>
  25518. 800af98: 6bbb ldr r3, [r7, #56] @ 0x38
  25519. 800af9a: f5b3 3f40 cmp.w r3, #196608 @ 0x30000
  25520. 800af9e: d03b beq.n 800b018 <HAL_RCCEx_GetPeriphCLKFreq+0x748>
  25521. 800afa0: 6bbb ldr r3, [r7, #56] @ 0x38
  25522. 800afa2: f5b3 3f40 cmp.w r3, #196608 @ 0x30000
  25523. 800afa6: d864 bhi.n 800b072 <HAL_RCCEx_GetPeriphCLKFreq+0x7a2>
  25524. 800afa8: 6bbb ldr r3, [r7, #56] @ 0x38
  25525. 800afaa: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  25526. 800afae: d021 beq.n 800aff4 <HAL_RCCEx_GetPeriphCLKFreq+0x724>
  25527. 800afb0: 6bbb ldr r3, [r7, #56] @ 0x38
  25528. 800afb2: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  25529. 800afb6: d85c bhi.n 800b072 <HAL_RCCEx_GetPeriphCLKFreq+0x7a2>
  25530. 800afb8: 6bbb ldr r3, [r7, #56] @ 0x38
  25531. 800afba: 2b00 cmp r3, #0
  25532. 800afbc: d004 beq.n 800afc8 <HAL_RCCEx_GetPeriphCLKFreq+0x6f8>
  25533. 800afbe: 6bbb ldr r3, [r7, #56] @ 0x38
  25534. 800afc0: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  25535. 800afc4: d004 beq.n 800afd0 <HAL_RCCEx_GetPeriphCLKFreq+0x700>
  25536. 800afc6: e054 b.n 800b072 <HAL_RCCEx_GetPeriphCLKFreq+0x7a2>
  25537. {
  25538. case RCC_SPI45CLKSOURCE_PCLK2: /* CD/D2 PCLK2 is the clock source for SPI4/5 */
  25539. {
  25540. frequency = HAL_RCC_GetPCLK1Freq();
  25541. 800afc8: f7fe fa26 bl 8009418 <HAL_RCC_GetPCLK1Freq>
  25542. 800afcc: 63f8 str r0, [r7, #60] @ 0x3c
  25543. break;
  25544. 800afce: e1f6 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25545. }
  25546. case RCC_SPI45CLKSOURCE_PLL2: /* PLL2 is the clock source for SPI45 */
  25547. {
  25548. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  25549. 800afd0: 4b29 ldr r3, [pc, #164] @ (800b078 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  25550. 800afd2: 681b ldr r3, [r3, #0]
  25551. 800afd4: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  25552. 800afd8: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  25553. 800afdc: d107 bne.n 800afee <HAL_RCCEx_GetPeriphCLKFreq+0x71e>
  25554. {
  25555. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  25556. 800afde: f107 0318 add.w r3, r7, #24
  25557. 800afe2: 4618 mov r0, r3
  25558. 800afe4: f000 fa0a bl 800b3fc <HAL_RCCEx_GetPLL2ClockFreq>
  25559. frequency = pll2_clocks.PLL2_Q_Frequency;
  25560. 800afe8: 69fb ldr r3, [r7, #28]
  25561. 800afea: 63fb str r3, [r7, #60] @ 0x3c
  25562. }
  25563. else
  25564. {
  25565. frequency = 0;
  25566. }
  25567. break;
  25568. 800afec: e1e7 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25569. frequency = 0;
  25570. 800afee: 2300 movs r3, #0
  25571. 800aff0: 63fb str r3, [r7, #60] @ 0x3c
  25572. break;
  25573. 800aff2: e1e4 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25574. }
  25575. case RCC_SPI45CLKSOURCE_PLL3: /* PLL3 is the clock source for SPI45 */
  25576. {
  25577. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
  25578. 800aff4: 4b20 ldr r3, [pc, #128] @ (800b078 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  25579. 800aff6: 681b ldr r3, [r3, #0]
  25580. 800aff8: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  25581. 800affc: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  25582. 800b000: d107 bne.n 800b012 <HAL_RCCEx_GetPeriphCLKFreq+0x742>
  25583. {
  25584. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  25585. 800b002: f107 030c add.w r3, r7, #12
  25586. 800b006: 4618 mov r0, r3
  25587. 800b008: f000 fb4c bl 800b6a4 <HAL_RCCEx_GetPLL3ClockFreq>
  25588. frequency = pll3_clocks.PLL3_Q_Frequency;
  25589. 800b00c: 693b ldr r3, [r7, #16]
  25590. 800b00e: 63fb str r3, [r7, #60] @ 0x3c
  25591. }
  25592. else
  25593. {
  25594. frequency = 0;
  25595. }
  25596. break;
  25597. 800b010: e1d5 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25598. frequency = 0;
  25599. 800b012: 2300 movs r3, #0
  25600. 800b014: 63fb str r3, [r7, #60] @ 0x3c
  25601. break;
  25602. 800b016: e1d2 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25603. }
  25604. case RCC_SPI45CLKSOURCE_HSI: /* HSI is the clock source for SPI45 */
  25605. {
  25606. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY))
  25607. 800b018: 4b17 ldr r3, [pc, #92] @ (800b078 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  25608. 800b01a: 681b ldr r3, [r3, #0]
  25609. 800b01c: f003 0304 and.w r3, r3, #4
  25610. 800b020: 2b04 cmp r3, #4
  25611. 800b022: d109 bne.n 800b038 <HAL_RCCEx_GetPeriphCLKFreq+0x768>
  25612. {
  25613. frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  25614. 800b024: 4b14 ldr r3, [pc, #80] @ (800b078 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  25615. 800b026: 681b ldr r3, [r3, #0]
  25616. 800b028: 08db lsrs r3, r3, #3
  25617. 800b02a: f003 0303 and.w r3, r3, #3
  25618. 800b02e: 4a13 ldr r2, [pc, #76] @ (800b07c <HAL_RCCEx_GetPeriphCLKFreq+0x7ac>)
  25619. 800b030: fa22 f303 lsr.w r3, r2, r3
  25620. 800b034: 63fb str r3, [r7, #60] @ 0x3c
  25621. }
  25622. else
  25623. {
  25624. frequency = 0;
  25625. }
  25626. break;
  25627. 800b036: e1c2 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25628. frequency = 0;
  25629. 800b038: 2300 movs r3, #0
  25630. 800b03a: 63fb str r3, [r7, #60] @ 0x3c
  25631. break;
  25632. 800b03c: e1bf b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25633. }
  25634. case RCC_SPI45CLKSOURCE_CSI: /* CSI is the clock source for SPI45 */
  25635. {
  25636. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY))
  25637. 800b03e: 4b0e ldr r3, [pc, #56] @ (800b078 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  25638. 800b040: 681b ldr r3, [r3, #0]
  25639. 800b042: f403 7380 and.w r3, r3, #256 @ 0x100
  25640. 800b046: f5b3 7f80 cmp.w r3, #256 @ 0x100
  25641. 800b04a: d102 bne.n 800b052 <HAL_RCCEx_GetPeriphCLKFreq+0x782>
  25642. {
  25643. frequency = CSI_VALUE;
  25644. 800b04c: 4b0c ldr r3, [pc, #48] @ (800b080 <HAL_RCCEx_GetPeriphCLKFreq+0x7b0>)
  25645. 800b04e: 63fb str r3, [r7, #60] @ 0x3c
  25646. }
  25647. else
  25648. {
  25649. frequency = 0;
  25650. }
  25651. break;
  25652. 800b050: e1b5 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25653. frequency = 0;
  25654. 800b052: 2300 movs r3, #0
  25655. 800b054: 63fb str r3, [r7, #60] @ 0x3c
  25656. break;
  25657. 800b056: e1b2 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25658. }
  25659. case RCC_SPI45CLKSOURCE_HSE: /* HSE is the clock source for SPI45 */
  25660. {
  25661. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY))
  25662. 800b058: 4b07 ldr r3, [pc, #28] @ (800b078 <HAL_RCCEx_GetPeriphCLKFreq+0x7a8>)
  25663. 800b05a: 681b ldr r3, [r3, #0]
  25664. 800b05c: f403 3300 and.w r3, r3, #131072 @ 0x20000
  25665. 800b060: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  25666. 800b064: d102 bne.n 800b06c <HAL_RCCEx_GetPeriphCLKFreq+0x79c>
  25667. {
  25668. frequency = HSE_VALUE;
  25669. 800b066: 4b07 ldr r3, [pc, #28] @ (800b084 <HAL_RCCEx_GetPeriphCLKFreq+0x7b4>)
  25670. 800b068: 63fb str r3, [r7, #60] @ 0x3c
  25671. }
  25672. else
  25673. {
  25674. frequency = 0;
  25675. }
  25676. break;
  25677. 800b06a: e1a8 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25678. frequency = 0;
  25679. 800b06c: 2300 movs r3, #0
  25680. 800b06e: 63fb str r3, [r7, #60] @ 0x3c
  25681. break;
  25682. 800b070: e1a5 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25683. }
  25684. default :
  25685. {
  25686. frequency = 0;
  25687. 800b072: 2300 movs r3, #0
  25688. 800b074: 63fb str r3, [r7, #60] @ 0x3c
  25689. break;
  25690. 800b076: e1a2 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25691. 800b078: 58024400 .word 0x58024400
  25692. 800b07c: 03d09000 .word 0x03d09000
  25693. 800b080: 003d0900 .word 0x003d0900
  25694. 800b084: 017d7840 .word 0x017d7840
  25695. 800b088: 00bb8000 .word 0x00bb8000
  25696. }
  25697. }
  25698. }
  25699. else if (PeriphClk == RCC_PERIPHCLK_ADC)
  25700. 800b08c: e9d7 2300 ldrd r2, r3, [r7]
  25701. 800b090: f5a2 2100 sub.w r1, r2, #524288 @ 0x80000
  25702. 800b094: 430b orrs r3, r1
  25703. 800b096: d173 bne.n 800b180 <HAL_RCCEx_GetPeriphCLKFreq+0x8b0>
  25704. {
  25705. /* Get ADC clock source */
  25706. srcclk = __HAL_RCC_GET_ADC_SOURCE();
  25707. 800b098: 4b9c ldr r3, [pc, #624] @ (800b30c <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  25708. 800b09a: 6d9b ldr r3, [r3, #88] @ 0x58
  25709. 800b09c: f403 3340 and.w r3, r3, #196608 @ 0x30000
  25710. 800b0a0: 63bb str r3, [r7, #56] @ 0x38
  25711. switch (srcclk)
  25712. 800b0a2: 6bbb ldr r3, [r7, #56] @ 0x38
  25713. 800b0a4: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  25714. 800b0a8: d02f beq.n 800b10a <HAL_RCCEx_GetPeriphCLKFreq+0x83a>
  25715. 800b0aa: 6bbb ldr r3, [r7, #56] @ 0x38
  25716. 800b0ac: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  25717. 800b0b0: d863 bhi.n 800b17a <HAL_RCCEx_GetPeriphCLKFreq+0x8aa>
  25718. 800b0b2: 6bbb ldr r3, [r7, #56] @ 0x38
  25719. 800b0b4: 2b00 cmp r3, #0
  25720. 800b0b6: d004 beq.n 800b0c2 <HAL_RCCEx_GetPeriphCLKFreq+0x7f2>
  25721. 800b0b8: 6bbb ldr r3, [r7, #56] @ 0x38
  25722. 800b0ba: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  25723. 800b0be: d012 beq.n 800b0e6 <HAL_RCCEx_GetPeriphCLKFreq+0x816>
  25724. 800b0c0: e05b b.n 800b17a <HAL_RCCEx_GetPeriphCLKFreq+0x8aa>
  25725. {
  25726. case RCC_ADCCLKSOURCE_PLL2:
  25727. {
  25728. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  25729. 800b0c2: 4b92 ldr r3, [pc, #584] @ (800b30c <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  25730. 800b0c4: 681b ldr r3, [r3, #0]
  25731. 800b0c6: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  25732. 800b0ca: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  25733. 800b0ce: d107 bne.n 800b0e0 <HAL_RCCEx_GetPeriphCLKFreq+0x810>
  25734. {
  25735. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  25736. 800b0d0: f107 0318 add.w r3, r7, #24
  25737. 800b0d4: 4618 mov r0, r3
  25738. 800b0d6: f000 f991 bl 800b3fc <HAL_RCCEx_GetPLL2ClockFreq>
  25739. frequency = pll2_clocks.PLL2_P_Frequency;
  25740. 800b0da: 69bb ldr r3, [r7, #24]
  25741. 800b0dc: 63fb str r3, [r7, #60] @ 0x3c
  25742. }
  25743. else
  25744. {
  25745. frequency = 0;
  25746. }
  25747. break;
  25748. 800b0de: e16e b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25749. frequency = 0;
  25750. 800b0e0: 2300 movs r3, #0
  25751. 800b0e2: 63fb str r3, [r7, #60] @ 0x3c
  25752. break;
  25753. 800b0e4: e16b b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25754. }
  25755. case RCC_ADCCLKSOURCE_PLL3:
  25756. {
  25757. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
  25758. 800b0e6: 4b89 ldr r3, [pc, #548] @ (800b30c <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  25759. 800b0e8: 681b ldr r3, [r3, #0]
  25760. 800b0ea: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  25761. 800b0ee: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  25762. 800b0f2: d107 bne.n 800b104 <HAL_RCCEx_GetPeriphCLKFreq+0x834>
  25763. {
  25764. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  25765. 800b0f4: f107 030c add.w r3, r7, #12
  25766. 800b0f8: 4618 mov r0, r3
  25767. 800b0fa: f000 fad3 bl 800b6a4 <HAL_RCCEx_GetPLL3ClockFreq>
  25768. frequency = pll3_clocks.PLL3_R_Frequency;
  25769. 800b0fe: 697b ldr r3, [r7, #20]
  25770. 800b100: 63fb str r3, [r7, #60] @ 0x3c
  25771. }
  25772. else
  25773. {
  25774. frequency = 0;
  25775. }
  25776. break;
  25777. 800b102: e15c b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25778. frequency = 0;
  25779. 800b104: 2300 movs r3, #0
  25780. 800b106: 63fb str r3, [r7, #60] @ 0x3c
  25781. break;
  25782. 800b108: e159 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25783. }
  25784. case RCC_ADCCLKSOURCE_CLKP:
  25785. {
  25786. ckpclocksource = __HAL_RCC_GET_CLKP_SOURCE();
  25787. 800b10a: 4b80 ldr r3, [pc, #512] @ (800b30c <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  25788. 800b10c: 6cdb ldr r3, [r3, #76] @ 0x4c
  25789. 800b10e: f003 5340 and.w r3, r3, #805306368 @ 0x30000000
  25790. 800b112: 637b str r3, [r7, #52] @ 0x34
  25791. if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSI))
  25792. 800b114: 4b7d ldr r3, [pc, #500] @ (800b30c <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  25793. 800b116: 681b ldr r3, [r3, #0]
  25794. 800b118: f003 0304 and.w r3, r3, #4
  25795. 800b11c: 2b04 cmp r3, #4
  25796. 800b11e: d10c bne.n 800b13a <HAL_RCCEx_GetPeriphCLKFreq+0x86a>
  25797. 800b120: 6b7b ldr r3, [r7, #52] @ 0x34
  25798. 800b122: 2b00 cmp r3, #0
  25799. 800b124: d109 bne.n 800b13a <HAL_RCCEx_GetPeriphCLKFreq+0x86a>
  25800. {
  25801. /* In Case the CKPER Source is HSI */
  25802. frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  25803. 800b126: 4b79 ldr r3, [pc, #484] @ (800b30c <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  25804. 800b128: 681b ldr r3, [r3, #0]
  25805. 800b12a: 08db lsrs r3, r3, #3
  25806. 800b12c: f003 0303 and.w r3, r3, #3
  25807. 800b130: 4a77 ldr r2, [pc, #476] @ (800b310 <HAL_RCCEx_GetPeriphCLKFreq+0xa40>)
  25808. 800b132: fa22 f303 lsr.w r3, r2, r3
  25809. 800b136: 63fb str r3, [r7, #60] @ 0x3c
  25810. 800b138: e01e b.n 800b178 <HAL_RCCEx_GetPeriphCLKFreq+0x8a8>
  25811. }
  25812. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY)) && (ckpclocksource == RCC_CLKPSOURCE_CSI))
  25813. 800b13a: 4b74 ldr r3, [pc, #464] @ (800b30c <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  25814. 800b13c: 681b ldr r3, [r3, #0]
  25815. 800b13e: f403 7380 and.w r3, r3, #256 @ 0x100
  25816. 800b142: f5b3 7f80 cmp.w r3, #256 @ 0x100
  25817. 800b146: d106 bne.n 800b156 <HAL_RCCEx_GetPeriphCLKFreq+0x886>
  25818. 800b148: 6b7b ldr r3, [r7, #52] @ 0x34
  25819. 800b14a: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  25820. 800b14e: d102 bne.n 800b156 <HAL_RCCEx_GetPeriphCLKFreq+0x886>
  25821. {
  25822. /* In Case the CKPER Source is CSI */
  25823. frequency = CSI_VALUE;
  25824. 800b150: 4b70 ldr r3, [pc, #448] @ (800b314 <HAL_RCCEx_GetPeriphCLKFreq+0xa44>)
  25825. 800b152: 63fb str r3, [r7, #60] @ 0x3c
  25826. 800b154: e010 b.n 800b178 <HAL_RCCEx_GetPeriphCLKFreq+0x8a8>
  25827. }
  25828. else if ((HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY)) && (ckpclocksource == RCC_CLKPSOURCE_HSE))
  25829. 800b156: 4b6d ldr r3, [pc, #436] @ (800b30c <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  25830. 800b158: 681b ldr r3, [r3, #0]
  25831. 800b15a: f403 3300 and.w r3, r3, #131072 @ 0x20000
  25832. 800b15e: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  25833. 800b162: d106 bne.n 800b172 <HAL_RCCEx_GetPeriphCLKFreq+0x8a2>
  25834. 800b164: 6b7b ldr r3, [r7, #52] @ 0x34
  25835. 800b166: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  25836. 800b16a: d102 bne.n 800b172 <HAL_RCCEx_GetPeriphCLKFreq+0x8a2>
  25837. {
  25838. /* In Case the CKPER Source is HSE */
  25839. frequency = HSE_VALUE;
  25840. 800b16c: 4b6a ldr r3, [pc, #424] @ (800b318 <HAL_RCCEx_GetPeriphCLKFreq+0xa48>)
  25841. 800b16e: 63fb str r3, [r7, #60] @ 0x3c
  25842. 800b170: e002 b.n 800b178 <HAL_RCCEx_GetPeriphCLKFreq+0x8a8>
  25843. }
  25844. else
  25845. {
  25846. /* In Case the CKPER is disabled*/
  25847. frequency = 0;
  25848. 800b172: 2300 movs r3, #0
  25849. 800b174: 63fb str r3, [r7, #60] @ 0x3c
  25850. }
  25851. break;
  25852. 800b176: e122 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25853. 800b178: e121 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25854. }
  25855. default :
  25856. {
  25857. frequency = 0;
  25858. 800b17a: 2300 movs r3, #0
  25859. 800b17c: 63fb str r3, [r7, #60] @ 0x3c
  25860. break;
  25861. 800b17e: e11e b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25862. }
  25863. }
  25864. }
  25865. else if (PeriphClk == RCC_PERIPHCLK_SDMMC)
  25866. 800b180: e9d7 2300 ldrd r2, r3, [r7]
  25867. 800b184: f5a2 3180 sub.w r1, r2, #65536 @ 0x10000
  25868. 800b188: 430b orrs r3, r1
  25869. 800b18a: d133 bne.n 800b1f4 <HAL_RCCEx_GetPeriphCLKFreq+0x924>
  25870. {
  25871. /* Get SDMMC clock source */
  25872. srcclk = __HAL_RCC_GET_SDMMC_SOURCE();
  25873. 800b18c: 4b5f ldr r3, [pc, #380] @ (800b30c <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  25874. 800b18e: 6cdb ldr r3, [r3, #76] @ 0x4c
  25875. 800b190: f403 3380 and.w r3, r3, #65536 @ 0x10000
  25876. 800b194: 63bb str r3, [r7, #56] @ 0x38
  25877. switch (srcclk)
  25878. 800b196: 6bbb ldr r3, [r7, #56] @ 0x38
  25879. 800b198: 2b00 cmp r3, #0
  25880. 800b19a: d004 beq.n 800b1a6 <HAL_RCCEx_GetPeriphCLKFreq+0x8d6>
  25881. 800b19c: 6bbb ldr r3, [r7, #56] @ 0x38
  25882. 800b19e: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  25883. 800b1a2: d012 beq.n 800b1ca <HAL_RCCEx_GetPeriphCLKFreq+0x8fa>
  25884. 800b1a4: e023 b.n 800b1ee <HAL_RCCEx_GetPeriphCLKFreq+0x91e>
  25885. {
  25886. case RCC_SDMMCCLKSOURCE_PLL: /* PLL1 is the clock source for SDMMC */
  25887. {
  25888. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
  25889. 800b1a6: 4b59 ldr r3, [pc, #356] @ (800b30c <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  25890. 800b1a8: 681b ldr r3, [r3, #0]
  25891. 800b1aa: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  25892. 800b1ae: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  25893. 800b1b2: d107 bne.n 800b1c4 <HAL_RCCEx_GetPeriphCLKFreq+0x8f4>
  25894. {
  25895. HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
  25896. 800b1b4: f107 0324 add.w r3, r7, #36 @ 0x24
  25897. 800b1b8: 4618 mov r0, r3
  25898. 800b1ba: f000 fbc7 bl 800b94c <HAL_RCCEx_GetPLL1ClockFreq>
  25899. frequency = pll1_clocks.PLL1_Q_Frequency;
  25900. 800b1be: 6abb ldr r3, [r7, #40] @ 0x28
  25901. 800b1c0: 63fb str r3, [r7, #60] @ 0x3c
  25902. }
  25903. else
  25904. {
  25905. frequency = 0;
  25906. }
  25907. break;
  25908. 800b1c2: e0fc b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25909. frequency = 0;
  25910. 800b1c4: 2300 movs r3, #0
  25911. 800b1c6: 63fb str r3, [r7, #60] @ 0x3c
  25912. break;
  25913. 800b1c8: e0f9 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25914. }
  25915. case RCC_SDMMCCLKSOURCE_PLL2: /* PLL2 is the clock source for SDMMC */
  25916. {
  25917. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  25918. 800b1ca: 4b50 ldr r3, [pc, #320] @ (800b30c <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  25919. 800b1cc: 681b ldr r3, [r3, #0]
  25920. 800b1ce: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  25921. 800b1d2: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  25922. 800b1d6: d107 bne.n 800b1e8 <HAL_RCCEx_GetPeriphCLKFreq+0x918>
  25923. {
  25924. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  25925. 800b1d8: f107 0318 add.w r3, r7, #24
  25926. 800b1dc: 4618 mov r0, r3
  25927. 800b1de: f000 f90d bl 800b3fc <HAL_RCCEx_GetPLL2ClockFreq>
  25928. frequency = pll2_clocks.PLL2_R_Frequency;
  25929. 800b1e2: 6a3b ldr r3, [r7, #32]
  25930. 800b1e4: 63fb str r3, [r7, #60] @ 0x3c
  25931. }
  25932. else
  25933. {
  25934. frequency = 0;
  25935. }
  25936. break;
  25937. 800b1e6: e0ea b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25938. frequency = 0;
  25939. 800b1e8: 2300 movs r3, #0
  25940. 800b1ea: 63fb str r3, [r7, #60] @ 0x3c
  25941. break;
  25942. 800b1ec: e0e7 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25943. }
  25944. default :
  25945. {
  25946. frequency = 0;
  25947. 800b1ee: 2300 movs r3, #0
  25948. 800b1f0: 63fb str r3, [r7, #60] @ 0x3c
  25949. break;
  25950. 800b1f2: e0e4 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  25951. }
  25952. }
  25953. }
  25954. else if (PeriphClk == RCC_PERIPHCLK_SPI6)
  25955. 800b1f4: e9d7 2300 ldrd r2, r3, [r7]
  25956. 800b1f8: f5a2 4180 sub.w r1, r2, #16384 @ 0x4000
  25957. 800b1fc: 430b orrs r3, r1
  25958. 800b1fe: f040 808d bne.w 800b31c <HAL_RCCEx_GetPeriphCLKFreq+0xa4c>
  25959. {
  25960. /* Get SPI6 clock source */
  25961. srcclk = __HAL_RCC_GET_SPI6_SOURCE();
  25962. 800b202: 4b42 ldr r3, [pc, #264] @ (800b30c <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  25963. 800b204: 6d9b ldr r3, [r3, #88] @ 0x58
  25964. 800b206: f003 43e0 and.w r3, r3, #1879048192 @ 0x70000000
  25965. 800b20a: 63bb str r3, [r7, #56] @ 0x38
  25966. switch (srcclk)
  25967. 800b20c: 6bbb ldr r3, [r7, #56] @ 0x38
  25968. 800b20e: f1b3 4fa0 cmp.w r3, #1342177280 @ 0x50000000
  25969. 800b212: d06b beq.n 800b2ec <HAL_RCCEx_GetPeriphCLKFreq+0xa1c>
  25970. 800b214: 6bbb ldr r3, [r7, #56] @ 0x38
  25971. 800b216: f1b3 4fa0 cmp.w r3, #1342177280 @ 0x50000000
  25972. 800b21a: d874 bhi.n 800b306 <HAL_RCCEx_GetPeriphCLKFreq+0xa36>
  25973. 800b21c: 6bbb ldr r3, [r7, #56] @ 0x38
  25974. 800b21e: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  25975. 800b222: d056 beq.n 800b2d2 <HAL_RCCEx_GetPeriphCLKFreq+0xa02>
  25976. 800b224: 6bbb ldr r3, [r7, #56] @ 0x38
  25977. 800b226: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  25978. 800b22a: d86c bhi.n 800b306 <HAL_RCCEx_GetPeriphCLKFreq+0xa36>
  25979. 800b22c: 6bbb ldr r3, [r7, #56] @ 0x38
  25980. 800b22e: f1b3 5f40 cmp.w r3, #805306368 @ 0x30000000
  25981. 800b232: d03b beq.n 800b2ac <HAL_RCCEx_GetPeriphCLKFreq+0x9dc>
  25982. 800b234: 6bbb ldr r3, [r7, #56] @ 0x38
  25983. 800b236: f1b3 5f40 cmp.w r3, #805306368 @ 0x30000000
  25984. 800b23a: d864 bhi.n 800b306 <HAL_RCCEx_GetPeriphCLKFreq+0xa36>
  25985. 800b23c: 6bbb ldr r3, [r7, #56] @ 0x38
  25986. 800b23e: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  25987. 800b242: d021 beq.n 800b288 <HAL_RCCEx_GetPeriphCLKFreq+0x9b8>
  25988. 800b244: 6bbb ldr r3, [r7, #56] @ 0x38
  25989. 800b246: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  25990. 800b24a: d85c bhi.n 800b306 <HAL_RCCEx_GetPeriphCLKFreq+0xa36>
  25991. 800b24c: 6bbb ldr r3, [r7, #56] @ 0x38
  25992. 800b24e: 2b00 cmp r3, #0
  25993. 800b250: d004 beq.n 800b25c <HAL_RCCEx_GetPeriphCLKFreq+0x98c>
  25994. 800b252: 6bbb ldr r3, [r7, #56] @ 0x38
  25995. 800b254: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  25996. 800b258: d004 beq.n 800b264 <HAL_RCCEx_GetPeriphCLKFreq+0x994>
  25997. 800b25a: e054 b.n 800b306 <HAL_RCCEx_GetPeriphCLKFreq+0xa36>
  25998. {
  25999. case RCC_SPI6CLKSOURCE_D3PCLK1: /* D3PCLK1 (PCLK4) is the clock source for SPI6 */
  26000. {
  26001. frequency = HAL_RCCEx_GetD3PCLK1Freq();
  26002. 800b25c: f000 f8b8 bl 800b3d0 <HAL_RCCEx_GetD3PCLK1Freq>
  26003. 800b260: 63f8 str r0, [r7, #60] @ 0x3c
  26004. break;
  26005. 800b262: e0ac b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  26006. }
  26007. case RCC_SPI6CLKSOURCE_PLL2: /* PLL2 is the clock source for SPI6 */
  26008. {
  26009. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  26010. 800b264: 4b29 ldr r3, [pc, #164] @ (800b30c <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  26011. 800b266: 681b ldr r3, [r3, #0]
  26012. 800b268: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  26013. 800b26c: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  26014. 800b270: d107 bne.n 800b282 <HAL_RCCEx_GetPeriphCLKFreq+0x9b2>
  26015. {
  26016. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  26017. 800b272: f107 0318 add.w r3, r7, #24
  26018. 800b276: 4618 mov r0, r3
  26019. 800b278: f000 f8c0 bl 800b3fc <HAL_RCCEx_GetPLL2ClockFreq>
  26020. frequency = pll2_clocks.PLL2_Q_Frequency;
  26021. 800b27c: 69fb ldr r3, [r7, #28]
  26022. 800b27e: 63fb str r3, [r7, #60] @ 0x3c
  26023. }
  26024. else
  26025. {
  26026. frequency = 0;
  26027. }
  26028. break;
  26029. 800b280: e09d b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  26030. frequency = 0;
  26031. 800b282: 2300 movs r3, #0
  26032. 800b284: 63fb str r3, [r7, #60] @ 0x3c
  26033. break;
  26034. 800b286: e09a b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  26035. }
  26036. case RCC_SPI6CLKSOURCE_PLL3: /* PLL3 is the clock source for SPI6 */
  26037. {
  26038. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3RDY))
  26039. 800b288: 4b20 ldr r3, [pc, #128] @ (800b30c <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  26040. 800b28a: 681b ldr r3, [r3, #0]
  26041. 800b28c: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  26042. 800b290: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  26043. 800b294: d107 bne.n 800b2a6 <HAL_RCCEx_GetPeriphCLKFreq+0x9d6>
  26044. {
  26045. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  26046. 800b296: f107 030c add.w r3, r7, #12
  26047. 800b29a: 4618 mov r0, r3
  26048. 800b29c: f000 fa02 bl 800b6a4 <HAL_RCCEx_GetPLL3ClockFreq>
  26049. frequency = pll3_clocks.PLL3_Q_Frequency;
  26050. 800b2a0: 693b ldr r3, [r7, #16]
  26051. 800b2a2: 63fb str r3, [r7, #60] @ 0x3c
  26052. }
  26053. else
  26054. {
  26055. frequency = 0;
  26056. }
  26057. break;
  26058. 800b2a4: e08b b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  26059. frequency = 0;
  26060. 800b2a6: 2300 movs r3, #0
  26061. 800b2a8: 63fb str r3, [r7, #60] @ 0x3c
  26062. break;
  26063. 800b2aa: e088 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  26064. }
  26065. case RCC_SPI6CLKSOURCE_HSI: /* HSI is the clock source for SPI6 */
  26066. {
  26067. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSIRDY))
  26068. 800b2ac: 4b17 ldr r3, [pc, #92] @ (800b30c <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  26069. 800b2ae: 681b ldr r3, [r3, #0]
  26070. 800b2b0: f003 0304 and.w r3, r3, #4
  26071. 800b2b4: 2b04 cmp r3, #4
  26072. 800b2b6: d109 bne.n 800b2cc <HAL_RCCEx_GetPeriphCLKFreq+0x9fc>
  26073. {
  26074. frequency = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  26075. 800b2b8: 4b14 ldr r3, [pc, #80] @ (800b30c <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  26076. 800b2ba: 681b ldr r3, [r3, #0]
  26077. 800b2bc: 08db lsrs r3, r3, #3
  26078. 800b2be: f003 0303 and.w r3, r3, #3
  26079. 800b2c2: 4a13 ldr r2, [pc, #76] @ (800b310 <HAL_RCCEx_GetPeriphCLKFreq+0xa40>)
  26080. 800b2c4: fa22 f303 lsr.w r3, r2, r3
  26081. 800b2c8: 63fb str r3, [r7, #60] @ 0x3c
  26082. }
  26083. else
  26084. {
  26085. frequency = 0;
  26086. }
  26087. break;
  26088. 800b2ca: e078 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  26089. frequency = 0;
  26090. 800b2cc: 2300 movs r3, #0
  26091. 800b2ce: 63fb str r3, [r7, #60] @ 0x3c
  26092. break;
  26093. 800b2d0: e075 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  26094. }
  26095. case RCC_SPI6CLKSOURCE_CSI: /* CSI is the clock source for SPI6 */
  26096. {
  26097. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_CSIRDY))
  26098. 800b2d2: 4b0e ldr r3, [pc, #56] @ (800b30c <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  26099. 800b2d4: 681b ldr r3, [r3, #0]
  26100. 800b2d6: f403 7380 and.w r3, r3, #256 @ 0x100
  26101. 800b2da: f5b3 7f80 cmp.w r3, #256 @ 0x100
  26102. 800b2de: d102 bne.n 800b2e6 <HAL_RCCEx_GetPeriphCLKFreq+0xa16>
  26103. {
  26104. frequency = CSI_VALUE;
  26105. 800b2e0: 4b0c ldr r3, [pc, #48] @ (800b314 <HAL_RCCEx_GetPeriphCLKFreq+0xa44>)
  26106. 800b2e2: 63fb str r3, [r7, #60] @ 0x3c
  26107. }
  26108. else
  26109. {
  26110. frequency = 0;
  26111. }
  26112. break;
  26113. 800b2e4: e06b b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  26114. frequency = 0;
  26115. 800b2e6: 2300 movs r3, #0
  26116. 800b2e8: 63fb str r3, [r7, #60] @ 0x3c
  26117. break;
  26118. 800b2ea: e068 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  26119. }
  26120. case RCC_SPI6CLKSOURCE_HSE: /* HSE is the clock source for SPI6 */
  26121. {
  26122. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY))
  26123. 800b2ec: 4b07 ldr r3, [pc, #28] @ (800b30c <HAL_RCCEx_GetPeriphCLKFreq+0xa3c>)
  26124. 800b2ee: 681b ldr r3, [r3, #0]
  26125. 800b2f0: f403 3300 and.w r3, r3, #131072 @ 0x20000
  26126. 800b2f4: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  26127. 800b2f8: d102 bne.n 800b300 <HAL_RCCEx_GetPeriphCLKFreq+0xa30>
  26128. {
  26129. frequency = HSE_VALUE;
  26130. 800b2fa: 4b07 ldr r3, [pc, #28] @ (800b318 <HAL_RCCEx_GetPeriphCLKFreq+0xa48>)
  26131. 800b2fc: 63fb str r3, [r7, #60] @ 0x3c
  26132. }
  26133. else
  26134. {
  26135. frequency = 0;
  26136. }
  26137. break;
  26138. 800b2fe: e05e b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  26139. frequency = 0;
  26140. 800b300: 2300 movs r3, #0
  26141. 800b302: 63fb str r3, [r7, #60] @ 0x3c
  26142. break;
  26143. 800b304: e05b b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  26144. break;
  26145. }
  26146. #endif /* RCC_SPI6CLKSOURCE_PIN */
  26147. default :
  26148. {
  26149. frequency = 0;
  26150. 800b306: 2300 movs r3, #0
  26151. 800b308: 63fb str r3, [r7, #60] @ 0x3c
  26152. break;
  26153. 800b30a: e058 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  26154. 800b30c: 58024400 .word 0x58024400
  26155. 800b310: 03d09000 .word 0x03d09000
  26156. 800b314: 003d0900 .word 0x003d0900
  26157. 800b318: 017d7840 .word 0x017d7840
  26158. }
  26159. }
  26160. }
  26161. else if (PeriphClk == RCC_PERIPHCLK_FDCAN)
  26162. 800b31c: e9d7 2300 ldrd r2, r3, [r7]
  26163. 800b320: f5a2 4100 sub.w r1, r2, #32768 @ 0x8000
  26164. 800b324: 430b orrs r3, r1
  26165. 800b326: d148 bne.n 800b3ba <HAL_RCCEx_GetPeriphCLKFreq+0xaea>
  26166. {
  26167. /* Get FDCAN clock source */
  26168. srcclk = __HAL_RCC_GET_FDCAN_SOURCE();
  26169. 800b328: 4b27 ldr r3, [pc, #156] @ (800b3c8 <HAL_RCCEx_GetPeriphCLKFreq+0xaf8>)
  26170. 800b32a: 6d1b ldr r3, [r3, #80] @ 0x50
  26171. 800b32c: f003 5340 and.w r3, r3, #805306368 @ 0x30000000
  26172. 800b330: 63bb str r3, [r7, #56] @ 0x38
  26173. switch (srcclk)
  26174. 800b332: 6bbb ldr r3, [r7, #56] @ 0x38
  26175. 800b334: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  26176. 800b338: d02a beq.n 800b390 <HAL_RCCEx_GetPeriphCLKFreq+0xac0>
  26177. 800b33a: 6bbb ldr r3, [r7, #56] @ 0x38
  26178. 800b33c: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  26179. 800b340: d838 bhi.n 800b3b4 <HAL_RCCEx_GetPeriphCLKFreq+0xae4>
  26180. 800b342: 6bbb ldr r3, [r7, #56] @ 0x38
  26181. 800b344: 2b00 cmp r3, #0
  26182. 800b346: d004 beq.n 800b352 <HAL_RCCEx_GetPeriphCLKFreq+0xa82>
  26183. 800b348: 6bbb ldr r3, [r7, #56] @ 0x38
  26184. 800b34a: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  26185. 800b34e: d00d beq.n 800b36c <HAL_RCCEx_GetPeriphCLKFreq+0xa9c>
  26186. 800b350: e030 b.n 800b3b4 <HAL_RCCEx_GetPeriphCLKFreq+0xae4>
  26187. {
  26188. case RCC_FDCANCLKSOURCE_HSE: /* HSE is the clock source for FDCAN */
  26189. {
  26190. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY))
  26191. 800b352: 4b1d ldr r3, [pc, #116] @ (800b3c8 <HAL_RCCEx_GetPeriphCLKFreq+0xaf8>)
  26192. 800b354: 681b ldr r3, [r3, #0]
  26193. 800b356: f403 3300 and.w r3, r3, #131072 @ 0x20000
  26194. 800b35a: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
  26195. 800b35e: d102 bne.n 800b366 <HAL_RCCEx_GetPeriphCLKFreq+0xa96>
  26196. {
  26197. frequency = HSE_VALUE;
  26198. 800b360: 4b1a ldr r3, [pc, #104] @ (800b3cc <HAL_RCCEx_GetPeriphCLKFreq+0xafc>)
  26199. 800b362: 63fb str r3, [r7, #60] @ 0x3c
  26200. }
  26201. else
  26202. {
  26203. frequency = 0;
  26204. }
  26205. break;
  26206. 800b364: e02b b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  26207. frequency = 0;
  26208. 800b366: 2300 movs r3, #0
  26209. 800b368: 63fb str r3, [r7, #60] @ 0x3c
  26210. break;
  26211. 800b36a: e028 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  26212. }
  26213. case RCC_FDCANCLKSOURCE_PLL: /* PLL is the clock source for FDCAN */
  26214. {
  26215. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL1RDY))
  26216. 800b36c: 4b16 ldr r3, [pc, #88] @ (800b3c8 <HAL_RCCEx_GetPeriphCLKFreq+0xaf8>)
  26217. 800b36e: 681b ldr r3, [r3, #0]
  26218. 800b370: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
  26219. 800b374: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
  26220. 800b378: d107 bne.n 800b38a <HAL_RCCEx_GetPeriphCLKFreq+0xaba>
  26221. {
  26222. HAL_RCCEx_GetPLL1ClockFreq(&pll1_clocks);
  26223. 800b37a: f107 0324 add.w r3, r7, #36 @ 0x24
  26224. 800b37e: 4618 mov r0, r3
  26225. 800b380: f000 fae4 bl 800b94c <HAL_RCCEx_GetPLL1ClockFreq>
  26226. frequency = pll1_clocks.PLL1_Q_Frequency;
  26227. 800b384: 6abb ldr r3, [r7, #40] @ 0x28
  26228. 800b386: 63fb str r3, [r7, #60] @ 0x3c
  26229. }
  26230. else
  26231. {
  26232. frequency = 0;
  26233. }
  26234. break;
  26235. 800b388: e019 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  26236. frequency = 0;
  26237. 800b38a: 2300 movs r3, #0
  26238. 800b38c: 63fb str r3, [r7, #60] @ 0x3c
  26239. break;
  26240. 800b38e: e016 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  26241. }
  26242. case RCC_FDCANCLKSOURCE_PLL2: /* PLL2 is the clock source for FDCAN */
  26243. {
  26244. if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2RDY))
  26245. 800b390: 4b0d ldr r3, [pc, #52] @ (800b3c8 <HAL_RCCEx_GetPeriphCLKFreq+0xaf8>)
  26246. 800b392: 681b ldr r3, [r3, #0]
  26247. 800b394: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  26248. 800b398: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
  26249. 800b39c: d107 bne.n 800b3ae <HAL_RCCEx_GetPeriphCLKFreq+0xade>
  26250. {
  26251. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  26252. 800b39e: f107 0318 add.w r3, r7, #24
  26253. 800b3a2: 4618 mov r0, r3
  26254. 800b3a4: f000 f82a bl 800b3fc <HAL_RCCEx_GetPLL2ClockFreq>
  26255. frequency = pll2_clocks.PLL2_Q_Frequency;
  26256. 800b3a8: 69fb ldr r3, [r7, #28]
  26257. 800b3aa: 63fb str r3, [r7, #60] @ 0x3c
  26258. }
  26259. else
  26260. {
  26261. frequency = 0;
  26262. }
  26263. break;
  26264. 800b3ac: e007 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  26265. frequency = 0;
  26266. 800b3ae: 2300 movs r3, #0
  26267. 800b3b0: 63fb str r3, [r7, #60] @ 0x3c
  26268. break;
  26269. 800b3b2: e004 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  26270. }
  26271. default :
  26272. {
  26273. frequency = 0;
  26274. 800b3b4: 2300 movs r3, #0
  26275. 800b3b6: 63fb str r3, [r7, #60] @ 0x3c
  26276. break;
  26277. 800b3b8: e001 b.n 800b3be <HAL_RCCEx_GetPeriphCLKFreq+0xaee>
  26278. }
  26279. }
  26280. }
  26281. else
  26282. {
  26283. frequency = 0;
  26284. 800b3ba: 2300 movs r3, #0
  26285. 800b3bc: 63fb str r3, [r7, #60] @ 0x3c
  26286. }
  26287. return frequency;
  26288. 800b3be: 6bfb ldr r3, [r7, #60] @ 0x3c
  26289. }
  26290. 800b3c0: 4618 mov r0, r3
  26291. 800b3c2: 3740 adds r7, #64 @ 0x40
  26292. 800b3c4: 46bd mov sp, r7
  26293. 800b3c6: bd80 pop {r7, pc}
  26294. 800b3c8: 58024400 .word 0x58024400
  26295. 800b3cc: 017d7840 .word 0x017d7840
  26296. 0800b3d0 <HAL_RCCEx_GetD3PCLK1Freq>:
  26297. * @note Each time D3PCLK1 changes, this function must be called to update the
  26298. * right D3PCLK1 value. Otherwise, any configuration based on this function will be incorrect.
  26299. * @retval D3PCLK1 frequency
  26300. */
  26301. uint32_t HAL_RCCEx_GetD3PCLK1Freq(void)
  26302. {
  26303. 800b3d0: b580 push {r7, lr}
  26304. 800b3d2: af00 add r7, sp, #0
  26305. #if defined(RCC_D3CFGR_D3PPRE)
  26306. /* Get HCLK source and Compute D3PCLK1 frequency ---------------------------*/
  26307. return (HAL_RCC_GetHCLKFreq() >> (D1CorePrescTable[(RCC->D3CFGR & RCC_D3CFGR_D3PPRE) >> RCC_D3CFGR_D3PPRE_Pos] & 0x1FU));
  26308. 800b3d4: f7fd fff0 bl 80093b8 <HAL_RCC_GetHCLKFreq>
  26309. 800b3d8: 4602 mov r2, r0
  26310. 800b3da: 4b06 ldr r3, [pc, #24] @ (800b3f4 <HAL_RCCEx_GetD3PCLK1Freq+0x24>)
  26311. 800b3dc: 6a1b ldr r3, [r3, #32]
  26312. 800b3de: 091b lsrs r3, r3, #4
  26313. 800b3e0: f003 0307 and.w r3, r3, #7
  26314. 800b3e4: 4904 ldr r1, [pc, #16] @ (800b3f8 <HAL_RCCEx_GetD3PCLK1Freq+0x28>)
  26315. 800b3e6: 5ccb ldrb r3, [r1, r3]
  26316. 800b3e8: f003 031f and.w r3, r3, #31
  26317. 800b3ec: fa22 f303 lsr.w r3, r2, r3
  26318. #else
  26319. /* Get HCLK source and Compute D3PCLK1 frequency ---------------------------*/
  26320. return (HAL_RCC_GetHCLKFreq() >> (D1CorePrescTable[(RCC->SRDCFGR & RCC_SRDCFGR_SRDPPRE) >> RCC_SRDCFGR_SRDPPRE_Pos] & 0x1FU));
  26321. #endif
  26322. }
  26323. 800b3f0: 4618 mov r0, r3
  26324. 800b3f2: bd80 pop {r7, pc}
  26325. 800b3f4: 58024400 .word 0x58024400
  26326. 800b3f8: 080145e4 .word 0x080145e4
  26327. 0800b3fc <HAL_RCCEx_GetPLL2ClockFreq>:
  26328. * right PLL2CLK value. Otherwise, any configuration based on this function will be incorrect.
  26329. * @param PLL2_Clocks structure.
  26330. * @retval None
  26331. */
  26332. void HAL_RCCEx_GetPLL2ClockFreq(PLL2_ClocksTypeDef *PLL2_Clocks)
  26333. {
  26334. 800b3fc: b480 push {r7}
  26335. 800b3fe: b089 sub sp, #36 @ 0x24
  26336. 800b400: af00 add r7, sp, #0
  26337. 800b402: 6078 str r0, [r7, #4]
  26338. float_t fracn2, pll2vco;
  26339. /* PLL_VCO = (HSE_VALUE or HSI_VALUE or CSI_VALUE/ PLL2M) * PLL2N
  26340. PLL2xCLK = PLL2_VCO / PLL2x
  26341. */
  26342. pllsource = (RCC->PLLCKSELR & RCC_PLLCKSELR_PLLSRC);
  26343. 800b404: 4ba1 ldr r3, [pc, #644] @ (800b68c <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  26344. 800b406: 6a9b ldr r3, [r3, #40] @ 0x28
  26345. 800b408: f003 0303 and.w r3, r3, #3
  26346. 800b40c: 61bb str r3, [r7, #24]
  26347. pll2m = ((RCC->PLLCKSELR & RCC_PLLCKSELR_DIVM2) >> 12);
  26348. 800b40e: 4b9f ldr r3, [pc, #636] @ (800b68c <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  26349. 800b410: 6a9b ldr r3, [r3, #40] @ 0x28
  26350. 800b412: 0b1b lsrs r3, r3, #12
  26351. 800b414: f003 033f and.w r3, r3, #63 @ 0x3f
  26352. 800b418: 617b str r3, [r7, #20]
  26353. pll2fracen = (RCC->PLLCFGR & RCC_PLLCFGR_PLL2FRACEN) >> RCC_PLLCFGR_PLL2FRACEN_Pos;
  26354. 800b41a: 4b9c ldr r3, [pc, #624] @ (800b68c <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  26355. 800b41c: 6adb ldr r3, [r3, #44] @ 0x2c
  26356. 800b41e: 091b lsrs r3, r3, #4
  26357. 800b420: f003 0301 and.w r3, r3, #1
  26358. 800b424: 613b str r3, [r7, #16]
  26359. fracn2 = (float_t)(uint32_t)(pll2fracen * ((RCC->PLL2FRACR & RCC_PLL2FRACR_FRACN2) >> 3));
  26360. 800b426: 4b99 ldr r3, [pc, #612] @ (800b68c <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  26361. 800b428: 6bdb ldr r3, [r3, #60] @ 0x3c
  26362. 800b42a: 08db lsrs r3, r3, #3
  26363. 800b42c: f3c3 030c ubfx r3, r3, #0, #13
  26364. 800b430: 693a ldr r2, [r7, #16]
  26365. 800b432: fb02 f303 mul.w r3, r2, r3
  26366. 800b436: ee07 3a90 vmov s15, r3
  26367. 800b43a: eef8 7a67 vcvt.f32.u32 s15, s15
  26368. 800b43e: edc7 7a03 vstr s15, [r7, #12]
  26369. if (pll2m != 0U)
  26370. 800b442: 697b ldr r3, [r7, #20]
  26371. 800b444: 2b00 cmp r3, #0
  26372. 800b446: f000 8111 beq.w 800b66c <HAL_RCCEx_GetPLL2ClockFreq+0x270>
  26373. {
  26374. switch (pllsource)
  26375. 800b44a: 69bb ldr r3, [r7, #24]
  26376. 800b44c: 2b02 cmp r3, #2
  26377. 800b44e: f000 8083 beq.w 800b558 <HAL_RCCEx_GetPLL2ClockFreq+0x15c>
  26378. 800b452: 69bb ldr r3, [r7, #24]
  26379. 800b454: 2b02 cmp r3, #2
  26380. 800b456: f200 80a1 bhi.w 800b59c <HAL_RCCEx_GetPLL2ClockFreq+0x1a0>
  26381. 800b45a: 69bb ldr r3, [r7, #24]
  26382. 800b45c: 2b00 cmp r3, #0
  26383. 800b45e: d003 beq.n 800b468 <HAL_RCCEx_GetPLL2ClockFreq+0x6c>
  26384. 800b460: 69bb ldr r3, [r7, #24]
  26385. 800b462: 2b01 cmp r3, #1
  26386. 800b464: d056 beq.n 800b514 <HAL_RCCEx_GetPLL2ClockFreq+0x118>
  26387. 800b466: e099 b.n 800b59c <HAL_RCCEx_GetPLL2ClockFreq+0x1a0>
  26388. {
  26389. case RCC_PLLSOURCE_HSI: /* HSI used as PLL clock source */
  26390. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  26391. 800b468: 4b88 ldr r3, [pc, #544] @ (800b68c <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  26392. 800b46a: 681b ldr r3, [r3, #0]
  26393. 800b46c: f003 0320 and.w r3, r3, #32
  26394. 800b470: 2b00 cmp r3, #0
  26395. 800b472: d02d beq.n 800b4d0 <HAL_RCCEx_GetPLL2ClockFreq+0xd4>
  26396. {
  26397. hsivalue = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  26398. 800b474: 4b85 ldr r3, [pc, #532] @ (800b68c <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  26399. 800b476: 681b ldr r3, [r3, #0]
  26400. 800b478: 08db lsrs r3, r3, #3
  26401. 800b47a: f003 0303 and.w r3, r3, #3
  26402. 800b47e: 4a84 ldr r2, [pc, #528] @ (800b690 <HAL_RCCEx_GetPLL2ClockFreq+0x294>)
  26403. 800b480: fa22 f303 lsr.w r3, r2, r3
  26404. 800b484: 60bb str r3, [r7, #8]
  26405. pll2vco = ((float_t)hsivalue / (float_t)pll2m) * ((float_t)(uint32_t)(RCC->PLL2DIVR & RCC_PLL2DIVR_N2) + (fracn2 / (float_t)0x2000) + (float_t)1);
  26406. 800b486: 68bb ldr r3, [r7, #8]
  26407. 800b488: ee07 3a90 vmov s15, r3
  26408. 800b48c: eef8 6a67 vcvt.f32.u32 s13, s15
  26409. 800b490: 697b ldr r3, [r7, #20]
  26410. 800b492: ee07 3a90 vmov s15, r3
  26411. 800b496: eef8 7a67 vcvt.f32.u32 s15, s15
  26412. 800b49a: ee86 7aa7 vdiv.f32 s14, s13, s15
  26413. 800b49e: 4b7b ldr r3, [pc, #492] @ (800b68c <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  26414. 800b4a0: 6b9b ldr r3, [r3, #56] @ 0x38
  26415. 800b4a2: f3c3 0308 ubfx r3, r3, #0, #9
  26416. 800b4a6: ee07 3a90 vmov s15, r3
  26417. 800b4aa: eef8 6a67 vcvt.f32.u32 s13, s15
  26418. 800b4ae: ed97 6a03 vldr s12, [r7, #12]
  26419. 800b4b2: eddf 5a78 vldr s11, [pc, #480] @ 800b694 <HAL_RCCEx_GetPLL2ClockFreq+0x298>
  26420. 800b4b6: eec6 7a25 vdiv.f32 s15, s12, s11
  26421. 800b4ba: ee76 7aa7 vadd.f32 s15, s13, s15
  26422. 800b4be: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  26423. 800b4c2: ee77 7aa6 vadd.f32 s15, s15, s13
  26424. 800b4c6: ee67 7a27 vmul.f32 s15, s14, s15
  26425. 800b4ca: edc7 7a07 vstr s15, [r7, #28]
  26426. }
  26427. else
  26428. {
  26429. pll2vco = ((float_t)HSI_VALUE / (float_t)pll2m) * ((float_t)(uint32_t)(RCC->PLL2DIVR & RCC_PLL2DIVR_N2) + (fracn2 / (float_t)0x2000) + (float_t)1);
  26430. }
  26431. break;
  26432. 800b4ce: e087 b.n 800b5e0 <HAL_RCCEx_GetPLL2ClockFreq+0x1e4>
  26433. pll2vco = ((float_t)HSI_VALUE / (float_t)pll2m) * ((float_t)(uint32_t)(RCC->PLL2DIVR & RCC_PLL2DIVR_N2) + (fracn2 / (float_t)0x2000) + (float_t)1);
  26434. 800b4d0: 697b ldr r3, [r7, #20]
  26435. 800b4d2: ee07 3a90 vmov s15, r3
  26436. 800b4d6: eef8 7a67 vcvt.f32.u32 s15, s15
  26437. 800b4da: eddf 6a6f vldr s13, [pc, #444] @ 800b698 <HAL_RCCEx_GetPLL2ClockFreq+0x29c>
  26438. 800b4de: ee86 7aa7 vdiv.f32 s14, s13, s15
  26439. 800b4e2: 4b6a ldr r3, [pc, #424] @ (800b68c <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  26440. 800b4e4: 6b9b ldr r3, [r3, #56] @ 0x38
  26441. 800b4e6: f3c3 0308 ubfx r3, r3, #0, #9
  26442. 800b4ea: ee07 3a90 vmov s15, r3
  26443. 800b4ee: eef8 6a67 vcvt.f32.u32 s13, s15
  26444. 800b4f2: ed97 6a03 vldr s12, [r7, #12]
  26445. 800b4f6: eddf 5a67 vldr s11, [pc, #412] @ 800b694 <HAL_RCCEx_GetPLL2ClockFreq+0x298>
  26446. 800b4fa: eec6 7a25 vdiv.f32 s15, s12, s11
  26447. 800b4fe: ee76 7aa7 vadd.f32 s15, s13, s15
  26448. 800b502: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  26449. 800b506: ee77 7aa6 vadd.f32 s15, s15, s13
  26450. 800b50a: ee67 7a27 vmul.f32 s15, s14, s15
  26451. 800b50e: edc7 7a07 vstr s15, [r7, #28]
  26452. break;
  26453. 800b512: e065 b.n 800b5e0 <HAL_RCCEx_GetPLL2ClockFreq+0x1e4>
  26454. case RCC_PLLSOURCE_CSI: /* CSI used as PLL clock source */
  26455. pll2vco = ((float_t)CSI_VALUE / (float_t)pll2m) * ((float_t)(uint32_t)(RCC->PLL2DIVR & RCC_PLL2DIVR_N2) + (fracn2 / (float_t)0x2000) + (float_t)1);
  26456. 800b514: 697b ldr r3, [r7, #20]
  26457. 800b516: ee07 3a90 vmov s15, r3
  26458. 800b51a: eef8 7a67 vcvt.f32.u32 s15, s15
  26459. 800b51e: eddf 6a5f vldr s13, [pc, #380] @ 800b69c <HAL_RCCEx_GetPLL2ClockFreq+0x2a0>
  26460. 800b522: ee86 7aa7 vdiv.f32 s14, s13, s15
  26461. 800b526: 4b59 ldr r3, [pc, #356] @ (800b68c <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  26462. 800b528: 6b9b ldr r3, [r3, #56] @ 0x38
  26463. 800b52a: f3c3 0308 ubfx r3, r3, #0, #9
  26464. 800b52e: ee07 3a90 vmov s15, r3
  26465. 800b532: eef8 6a67 vcvt.f32.u32 s13, s15
  26466. 800b536: ed97 6a03 vldr s12, [r7, #12]
  26467. 800b53a: eddf 5a56 vldr s11, [pc, #344] @ 800b694 <HAL_RCCEx_GetPLL2ClockFreq+0x298>
  26468. 800b53e: eec6 7a25 vdiv.f32 s15, s12, s11
  26469. 800b542: ee76 7aa7 vadd.f32 s15, s13, s15
  26470. 800b546: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  26471. 800b54a: ee77 7aa6 vadd.f32 s15, s15, s13
  26472. 800b54e: ee67 7a27 vmul.f32 s15, s14, s15
  26473. 800b552: edc7 7a07 vstr s15, [r7, #28]
  26474. break;
  26475. 800b556: e043 b.n 800b5e0 <HAL_RCCEx_GetPLL2ClockFreq+0x1e4>
  26476. case RCC_PLLSOURCE_HSE: /* HSE used as PLL clock source */
  26477. pll2vco = ((float_t)HSE_VALUE / (float_t)pll2m) * ((float_t)(uint32_t)(RCC->PLL2DIVR & RCC_PLL2DIVR_N2) + (fracn2 / (float_t)0x2000) + (float_t)1);
  26478. 800b558: 697b ldr r3, [r7, #20]
  26479. 800b55a: ee07 3a90 vmov s15, r3
  26480. 800b55e: eef8 7a67 vcvt.f32.u32 s15, s15
  26481. 800b562: eddf 6a4f vldr s13, [pc, #316] @ 800b6a0 <HAL_RCCEx_GetPLL2ClockFreq+0x2a4>
  26482. 800b566: ee86 7aa7 vdiv.f32 s14, s13, s15
  26483. 800b56a: 4b48 ldr r3, [pc, #288] @ (800b68c <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  26484. 800b56c: 6b9b ldr r3, [r3, #56] @ 0x38
  26485. 800b56e: f3c3 0308 ubfx r3, r3, #0, #9
  26486. 800b572: ee07 3a90 vmov s15, r3
  26487. 800b576: eef8 6a67 vcvt.f32.u32 s13, s15
  26488. 800b57a: ed97 6a03 vldr s12, [r7, #12]
  26489. 800b57e: eddf 5a45 vldr s11, [pc, #276] @ 800b694 <HAL_RCCEx_GetPLL2ClockFreq+0x298>
  26490. 800b582: eec6 7a25 vdiv.f32 s15, s12, s11
  26491. 800b586: ee76 7aa7 vadd.f32 s15, s13, s15
  26492. 800b58a: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  26493. 800b58e: ee77 7aa6 vadd.f32 s15, s15, s13
  26494. 800b592: ee67 7a27 vmul.f32 s15, s14, s15
  26495. 800b596: edc7 7a07 vstr s15, [r7, #28]
  26496. break;
  26497. 800b59a: e021 b.n 800b5e0 <HAL_RCCEx_GetPLL2ClockFreq+0x1e4>
  26498. default:
  26499. pll2vco = ((float_t)CSI_VALUE / (float_t)pll2m) * ((float_t)(uint32_t)(RCC->PLL2DIVR & RCC_PLL2DIVR_N2) + (fracn2 / (float_t)0x2000) + (float_t)1);
  26500. 800b59c: 697b ldr r3, [r7, #20]
  26501. 800b59e: ee07 3a90 vmov s15, r3
  26502. 800b5a2: eef8 7a67 vcvt.f32.u32 s15, s15
  26503. 800b5a6: eddf 6a3d vldr s13, [pc, #244] @ 800b69c <HAL_RCCEx_GetPLL2ClockFreq+0x2a0>
  26504. 800b5aa: ee86 7aa7 vdiv.f32 s14, s13, s15
  26505. 800b5ae: 4b37 ldr r3, [pc, #220] @ (800b68c <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  26506. 800b5b0: 6b9b ldr r3, [r3, #56] @ 0x38
  26507. 800b5b2: f3c3 0308 ubfx r3, r3, #0, #9
  26508. 800b5b6: ee07 3a90 vmov s15, r3
  26509. 800b5ba: eef8 6a67 vcvt.f32.u32 s13, s15
  26510. 800b5be: ed97 6a03 vldr s12, [r7, #12]
  26511. 800b5c2: eddf 5a34 vldr s11, [pc, #208] @ 800b694 <HAL_RCCEx_GetPLL2ClockFreq+0x298>
  26512. 800b5c6: eec6 7a25 vdiv.f32 s15, s12, s11
  26513. 800b5ca: ee76 7aa7 vadd.f32 s15, s13, s15
  26514. 800b5ce: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  26515. 800b5d2: ee77 7aa6 vadd.f32 s15, s15, s13
  26516. 800b5d6: ee67 7a27 vmul.f32 s15, s14, s15
  26517. 800b5da: edc7 7a07 vstr s15, [r7, #28]
  26518. break;
  26519. 800b5de: bf00 nop
  26520. }
  26521. PLL2_Clocks->PLL2_P_Frequency = (uint32_t)(float_t)(pll2vco / ((float_t)(uint32_t)((RCC->PLL2DIVR & RCC_PLL2DIVR_P2) >> 9) + (float_t)1)) ;
  26522. 800b5e0: 4b2a ldr r3, [pc, #168] @ (800b68c <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  26523. 800b5e2: 6b9b ldr r3, [r3, #56] @ 0x38
  26524. 800b5e4: 0a5b lsrs r3, r3, #9
  26525. 800b5e6: f003 037f and.w r3, r3, #127 @ 0x7f
  26526. 800b5ea: ee07 3a90 vmov s15, r3
  26527. 800b5ee: eef8 7a67 vcvt.f32.u32 s15, s15
  26528. 800b5f2: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  26529. 800b5f6: ee37 7a87 vadd.f32 s14, s15, s14
  26530. 800b5fa: edd7 6a07 vldr s13, [r7, #28]
  26531. 800b5fe: eec6 7a87 vdiv.f32 s15, s13, s14
  26532. 800b602: eefc 7ae7 vcvt.u32.f32 s15, s15
  26533. 800b606: ee17 2a90 vmov r2, s15
  26534. 800b60a: 687b ldr r3, [r7, #4]
  26535. 800b60c: 601a str r2, [r3, #0]
  26536. PLL2_Clocks->PLL2_Q_Frequency = (uint32_t)(float_t)(pll2vco / ((float_t)(uint32_t)((RCC->PLL2DIVR & RCC_PLL2DIVR_Q2) >> 16) + (float_t)1)) ;
  26537. 800b60e: 4b1f ldr r3, [pc, #124] @ (800b68c <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  26538. 800b610: 6b9b ldr r3, [r3, #56] @ 0x38
  26539. 800b612: 0c1b lsrs r3, r3, #16
  26540. 800b614: f003 037f and.w r3, r3, #127 @ 0x7f
  26541. 800b618: ee07 3a90 vmov s15, r3
  26542. 800b61c: eef8 7a67 vcvt.f32.u32 s15, s15
  26543. 800b620: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  26544. 800b624: ee37 7a87 vadd.f32 s14, s15, s14
  26545. 800b628: edd7 6a07 vldr s13, [r7, #28]
  26546. 800b62c: eec6 7a87 vdiv.f32 s15, s13, s14
  26547. 800b630: eefc 7ae7 vcvt.u32.f32 s15, s15
  26548. 800b634: ee17 2a90 vmov r2, s15
  26549. 800b638: 687b ldr r3, [r7, #4]
  26550. 800b63a: 605a str r2, [r3, #4]
  26551. PLL2_Clocks->PLL2_R_Frequency = (uint32_t)(float_t)(pll2vco / ((float_t)(uint32_t)((RCC->PLL2DIVR & RCC_PLL2DIVR_R2) >> 24) + (float_t)1)) ;
  26552. 800b63c: 4b13 ldr r3, [pc, #76] @ (800b68c <HAL_RCCEx_GetPLL2ClockFreq+0x290>)
  26553. 800b63e: 6b9b ldr r3, [r3, #56] @ 0x38
  26554. 800b640: 0e1b lsrs r3, r3, #24
  26555. 800b642: f003 037f and.w r3, r3, #127 @ 0x7f
  26556. 800b646: ee07 3a90 vmov s15, r3
  26557. 800b64a: eef8 7a67 vcvt.f32.u32 s15, s15
  26558. 800b64e: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  26559. 800b652: ee37 7a87 vadd.f32 s14, s15, s14
  26560. 800b656: edd7 6a07 vldr s13, [r7, #28]
  26561. 800b65a: eec6 7a87 vdiv.f32 s15, s13, s14
  26562. 800b65e: eefc 7ae7 vcvt.u32.f32 s15, s15
  26563. 800b662: ee17 2a90 vmov r2, s15
  26564. 800b666: 687b ldr r3, [r7, #4]
  26565. 800b668: 609a str r2, [r3, #8]
  26566. {
  26567. PLL2_Clocks->PLL2_P_Frequency = 0U;
  26568. PLL2_Clocks->PLL2_Q_Frequency = 0U;
  26569. PLL2_Clocks->PLL2_R_Frequency = 0U;
  26570. }
  26571. }
  26572. 800b66a: e008 b.n 800b67e <HAL_RCCEx_GetPLL2ClockFreq+0x282>
  26573. PLL2_Clocks->PLL2_P_Frequency = 0U;
  26574. 800b66c: 687b ldr r3, [r7, #4]
  26575. 800b66e: 2200 movs r2, #0
  26576. 800b670: 601a str r2, [r3, #0]
  26577. PLL2_Clocks->PLL2_Q_Frequency = 0U;
  26578. 800b672: 687b ldr r3, [r7, #4]
  26579. 800b674: 2200 movs r2, #0
  26580. 800b676: 605a str r2, [r3, #4]
  26581. PLL2_Clocks->PLL2_R_Frequency = 0U;
  26582. 800b678: 687b ldr r3, [r7, #4]
  26583. 800b67a: 2200 movs r2, #0
  26584. 800b67c: 609a str r2, [r3, #8]
  26585. }
  26586. 800b67e: bf00 nop
  26587. 800b680: 3724 adds r7, #36 @ 0x24
  26588. 800b682: 46bd mov sp, r7
  26589. 800b684: f85d 7b04 ldr.w r7, [sp], #4
  26590. 800b688: 4770 bx lr
  26591. 800b68a: bf00 nop
  26592. 800b68c: 58024400 .word 0x58024400
  26593. 800b690: 03d09000 .word 0x03d09000
  26594. 800b694: 46000000 .word 0x46000000
  26595. 800b698: 4c742400 .word 0x4c742400
  26596. 800b69c: 4a742400 .word 0x4a742400
  26597. 800b6a0: 4bbebc20 .word 0x4bbebc20
  26598. 0800b6a4 <HAL_RCCEx_GetPLL3ClockFreq>:
  26599. * right PLL3CLK value. Otherwise, any configuration based on this function will be incorrect.
  26600. * @param PLL3_Clocks structure.
  26601. * @retval None
  26602. */
  26603. void HAL_RCCEx_GetPLL3ClockFreq(PLL3_ClocksTypeDef *PLL3_Clocks)
  26604. {
  26605. 800b6a4: b480 push {r7}
  26606. 800b6a6: b089 sub sp, #36 @ 0x24
  26607. 800b6a8: af00 add r7, sp, #0
  26608. 800b6aa: 6078 str r0, [r7, #4]
  26609. float_t fracn3, pll3vco;
  26610. /* PLL3_VCO = (HSE_VALUE or HSI_VALUE or CSI_VALUE/ PLL3M) * PLL3N
  26611. PLL3xCLK = PLL3_VCO / PLLxR
  26612. */
  26613. pllsource = (RCC->PLLCKSELR & RCC_PLLCKSELR_PLLSRC);
  26614. 800b6ac: 4ba1 ldr r3, [pc, #644] @ (800b934 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  26615. 800b6ae: 6a9b ldr r3, [r3, #40] @ 0x28
  26616. 800b6b0: f003 0303 and.w r3, r3, #3
  26617. 800b6b4: 61bb str r3, [r7, #24]
  26618. pll3m = ((RCC->PLLCKSELR & RCC_PLLCKSELR_DIVM3) >> 20) ;
  26619. 800b6b6: 4b9f ldr r3, [pc, #636] @ (800b934 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  26620. 800b6b8: 6a9b ldr r3, [r3, #40] @ 0x28
  26621. 800b6ba: 0d1b lsrs r3, r3, #20
  26622. 800b6bc: f003 033f and.w r3, r3, #63 @ 0x3f
  26623. 800b6c0: 617b str r3, [r7, #20]
  26624. pll3fracen = (RCC->PLLCFGR & RCC_PLLCFGR_PLL3FRACEN) >> RCC_PLLCFGR_PLL3FRACEN_Pos;
  26625. 800b6c2: 4b9c ldr r3, [pc, #624] @ (800b934 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  26626. 800b6c4: 6adb ldr r3, [r3, #44] @ 0x2c
  26627. 800b6c6: 0a1b lsrs r3, r3, #8
  26628. 800b6c8: f003 0301 and.w r3, r3, #1
  26629. 800b6cc: 613b str r3, [r7, #16]
  26630. fracn3 = (float_t)(uint32_t)(pll3fracen * ((RCC->PLL3FRACR & RCC_PLL3FRACR_FRACN3) >> 3));
  26631. 800b6ce: 4b99 ldr r3, [pc, #612] @ (800b934 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  26632. 800b6d0: 6c5b ldr r3, [r3, #68] @ 0x44
  26633. 800b6d2: 08db lsrs r3, r3, #3
  26634. 800b6d4: f3c3 030c ubfx r3, r3, #0, #13
  26635. 800b6d8: 693a ldr r2, [r7, #16]
  26636. 800b6da: fb02 f303 mul.w r3, r2, r3
  26637. 800b6de: ee07 3a90 vmov s15, r3
  26638. 800b6e2: eef8 7a67 vcvt.f32.u32 s15, s15
  26639. 800b6e6: edc7 7a03 vstr s15, [r7, #12]
  26640. if (pll3m != 0U)
  26641. 800b6ea: 697b ldr r3, [r7, #20]
  26642. 800b6ec: 2b00 cmp r3, #0
  26643. 800b6ee: f000 8111 beq.w 800b914 <HAL_RCCEx_GetPLL3ClockFreq+0x270>
  26644. {
  26645. switch (pllsource)
  26646. 800b6f2: 69bb ldr r3, [r7, #24]
  26647. 800b6f4: 2b02 cmp r3, #2
  26648. 800b6f6: f000 8083 beq.w 800b800 <HAL_RCCEx_GetPLL3ClockFreq+0x15c>
  26649. 800b6fa: 69bb ldr r3, [r7, #24]
  26650. 800b6fc: 2b02 cmp r3, #2
  26651. 800b6fe: f200 80a1 bhi.w 800b844 <HAL_RCCEx_GetPLL3ClockFreq+0x1a0>
  26652. 800b702: 69bb ldr r3, [r7, #24]
  26653. 800b704: 2b00 cmp r3, #0
  26654. 800b706: d003 beq.n 800b710 <HAL_RCCEx_GetPLL3ClockFreq+0x6c>
  26655. 800b708: 69bb ldr r3, [r7, #24]
  26656. 800b70a: 2b01 cmp r3, #1
  26657. 800b70c: d056 beq.n 800b7bc <HAL_RCCEx_GetPLL3ClockFreq+0x118>
  26658. 800b70e: e099 b.n 800b844 <HAL_RCCEx_GetPLL3ClockFreq+0x1a0>
  26659. {
  26660. case RCC_PLLSOURCE_HSI: /* HSI used as PLL clock source */
  26661. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  26662. 800b710: 4b88 ldr r3, [pc, #544] @ (800b934 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  26663. 800b712: 681b ldr r3, [r3, #0]
  26664. 800b714: f003 0320 and.w r3, r3, #32
  26665. 800b718: 2b00 cmp r3, #0
  26666. 800b71a: d02d beq.n 800b778 <HAL_RCCEx_GetPLL3ClockFreq+0xd4>
  26667. {
  26668. hsivalue = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  26669. 800b71c: 4b85 ldr r3, [pc, #532] @ (800b934 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  26670. 800b71e: 681b ldr r3, [r3, #0]
  26671. 800b720: 08db lsrs r3, r3, #3
  26672. 800b722: f003 0303 and.w r3, r3, #3
  26673. 800b726: 4a84 ldr r2, [pc, #528] @ (800b938 <HAL_RCCEx_GetPLL3ClockFreq+0x294>)
  26674. 800b728: fa22 f303 lsr.w r3, r2, r3
  26675. 800b72c: 60bb str r3, [r7, #8]
  26676. pll3vco = ((float_t)hsivalue / (float_t)pll3m) * ((float_t)(uint32_t)(RCC->PLL3DIVR & RCC_PLL3DIVR_N3) + (fracn3 / (float_t)0x2000) + (float_t)1);
  26677. 800b72e: 68bb ldr r3, [r7, #8]
  26678. 800b730: ee07 3a90 vmov s15, r3
  26679. 800b734: eef8 6a67 vcvt.f32.u32 s13, s15
  26680. 800b738: 697b ldr r3, [r7, #20]
  26681. 800b73a: ee07 3a90 vmov s15, r3
  26682. 800b73e: eef8 7a67 vcvt.f32.u32 s15, s15
  26683. 800b742: ee86 7aa7 vdiv.f32 s14, s13, s15
  26684. 800b746: 4b7b ldr r3, [pc, #492] @ (800b934 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  26685. 800b748: 6c1b ldr r3, [r3, #64] @ 0x40
  26686. 800b74a: f3c3 0308 ubfx r3, r3, #0, #9
  26687. 800b74e: ee07 3a90 vmov s15, r3
  26688. 800b752: eef8 6a67 vcvt.f32.u32 s13, s15
  26689. 800b756: ed97 6a03 vldr s12, [r7, #12]
  26690. 800b75a: eddf 5a78 vldr s11, [pc, #480] @ 800b93c <HAL_RCCEx_GetPLL3ClockFreq+0x298>
  26691. 800b75e: eec6 7a25 vdiv.f32 s15, s12, s11
  26692. 800b762: ee76 7aa7 vadd.f32 s15, s13, s15
  26693. 800b766: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  26694. 800b76a: ee77 7aa6 vadd.f32 s15, s15, s13
  26695. 800b76e: ee67 7a27 vmul.f32 s15, s14, s15
  26696. 800b772: edc7 7a07 vstr s15, [r7, #28]
  26697. }
  26698. else
  26699. {
  26700. pll3vco = ((float_t)HSI_VALUE / (float_t)pll3m) * ((float_t)(uint32_t)(RCC->PLL3DIVR & RCC_PLL3DIVR_N3) + (fracn3 / (float_t)0x2000) + (float_t)1);
  26701. }
  26702. break;
  26703. 800b776: e087 b.n 800b888 <HAL_RCCEx_GetPLL3ClockFreq+0x1e4>
  26704. pll3vco = ((float_t)HSI_VALUE / (float_t)pll3m) * ((float_t)(uint32_t)(RCC->PLL3DIVR & RCC_PLL3DIVR_N3) + (fracn3 / (float_t)0x2000) + (float_t)1);
  26705. 800b778: 697b ldr r3, [r7, #20]
  26706. 800b77a: ee07 3a90 vmov s15, r3
  26707. 800b77e: eef8 7a67 vcvt.f32.u32 s15, s15
  26708. 800b782: eddf 6a6f vldr s13, [pc, #444] @ 800b940 <HAL_RCCEx_GetPLL3ClockFreq+0x29c>
  26709. 800b786: ee86 7aa7 vdiv.f32 s14, s13, s15
  26710. 800b78a: 4b6a ldr r3, [pc, #424] @ (800b934 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  26711. 800b78c: 6c1b ldr r3, [r3, #64] @ 0x40
  26712. 800b78e: f3c3 0308 ubfx r3, r3, #0, #9
  26713. 800b792: ee07 3a90 vmov s15, r3
  26714. 800b796: eef8 6a67 vcvt.f32.u32 s13, s15
  26715. 800b79a: ed97 6a03 vldr s12, [r7, #12]
  26716. 800b79e: eddf 5a67 vldr s11, [pc, #412] @ 800b93c <HAL_RCCEx_GetPLL3ClockFreq+0x298>
  26717. 800b7a2: eec6 7a25 vdiv.f32 s15, s12, s11
  26718. 800b7a6: ee76 7aa7 vadd.f32 s15, s13, s15
  26719. 800b7aa: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  26720. 800b7ae: ee77 7aa6 vadd.f32 s15, s15, s13
  26721. 800b7b2: ee67 7a27 vmul.f32 s15, s14, s15
  26722. 800b7b6: edc7 7a07 vstr s15, [r7, #28]
  26723. break;
  26724. 800b7ba: e065 b.n 800b888 <HAL_RCCEx_GetPLL3ClockFreq+0x1e4>
  26725. case RCC_PLLSOURCE_CSI: /* CSI used as PLL clock source */
  26726. pll3vco = ((float_t)CSI_VALUE / (float_t)pll3m) * ((float_t)(uint32_t)(RCC->PLL3DIVR & RCC_PLL3DIVR_N3) + (fracn3 / (float_t)0x2000) + (float_t)1);
  26727. 800b7bc: 697b ldr r3, [r7, #20]
  26728. 800b7be: ee07 3a90 vmov s15, r3
  26729. 800b7c2: eef8 7a67 vcvt.f32.u32 s15, s15
  26730. 800b7c6: eddf 6a5f vldr s13, [pc, #380] @ 800b944 <HAL_RCCEx_GetPLL3ClockFreq+0x2a0>
  26731. 800b7ca: ee86 7aa7 vdiv.f32 s14, s13, s15
  26732. 800b7ce: 4b59 ldr r3, [pc, #356] @ (800b934 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  26733. 800b7d0: 6c1b ldr r3, [r3, #64] @ 0x40
  26734. 800b7d2: f3c3 0308 ubfx r3, r3, #0, #9
  26735. 800b7d6: ee07 3a90 vmov s15, r3
  26736. 800b7da: eef8 6a67 vcvt.f32.u32 s13, s15
  26737. 800b7de: ed97 6a03 vldr s12, [r7, #12]
  26738. 800b7e2: eddf 5a56 vldr s11, [pc, #344] @ 800b93c <HAL_RCCEx_GetPLL3ClockFreq+0x298>
  26739. 800b7e6: eec6 7a25 vdiv.f32 s15, s12, s11
  26740. 800b7ea: ee76 7aa7 vadd.f32 s15, s13, s15
  26741. 800b7ee: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  26742. 800b7f2: ee77 7aa6 vadd.f32 s15, s15, s13
  26743. 800b7f6: ee67 7a27 vmul.f32 s15, s14, s15
  26744. 800b7fa: edc7 7a07 vstr s15, [r7, #28]
  26745. break;
  26746. 800b7fe: e043 b.n 800b888 <HAL_RCCEx_GetPLL3ClockFreq+0x1e4>
  26747. case RCC_PLLSOURCE_HSE: /* HSE used as PLL clock source */
  26748. pll3vco = ((float_t)HSE_VALUE / (float_t)pll3m) * ((float_t)(uint32_t)(RCC->PLL3DIVR & RCC_PLL3DIVR_N3) + (fracn3 / (float_t)0x2000) + (float_t)1);
  26749. 800b800: 697b ldr r3, [r7, #20]
  26750. 800b802: ee07 3a90 vmov s15, r3
  26751. 800b806: eef8 7a67 vcvt.f32.u32 s15, s15
  26752. 800b80a: eddf 6a4f vldr s13, [pc, #316] @ 800b948 <HAL_RCCEx_GetPLL3ClockFreq+0x2a4>
  26753. 800b80e: ee86 7aa7 vdiv.f32 s14, s13, s15
  26754. 800b812: 4b48 ldr r3, [pc, #288] @ (800b934 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  26755. 800b814: 6c1b ldr r3, [r3, #64] @ 0x40
  26756. 800b816: f3c3 0308 ubfx r3, r3, #0, #9
  26757. 800b81a: ee07 3a90 vmov s15, r3
  26758. 800b81e: eef8 6a67 vcvt.f32.u32 s13, s15
  26759. 800b822: ed97 6a03 vldr s12, [r7, #12]
  26760. 800b826: eddf 5a45 vldr s11, [pc, #276] @ 800b93c <HAL_RCCEx_GetPLL3ClockFreq+0x298>
  26761. 800b82a: eec6 7a25 vdiv.f32 s15, s12, s11
  26762. 800b82e: ee76 7aa7 vadd.f32 s15, s13, s15
  26763. 800b832: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  26764. 800b836: ee77 7aa6 vadd.f32 s15, s15, s13
  26765. 800b83a: ee67 7a27 vmul.f32 s15, s14, s15
  26766. 800b83e: edc7 7a07 vstr s15, [r7, #28]
  26767. break;
  26768. 800b842: e021 b.n 800b888 <HAL_RCCEx_GetPLL3ClockFreq+0x1e4>
  26769. default:
  26770. pll3vco = ((float_t)CSI_VALUE / (float_t)pll3m) * ((float_t)(uint32_t)(RCC->PLL3DIVR & RCC_PLL3DIVR_N3) + (fracn3 / (float_t)0x2000) + (float_t)1);
  26771. 800b844: 697b ldr r3, [r7, #20]
  26772. 800b846: ee07 3a90 vmov s15, r3
  26773. 800b84a: eef8 7a67 vcvt.f32.u32 s15, s15
  26774. 800b84e: eddf 6a3d vldr s13, [pc, #244] @ 800b944 <HAL_RCCEx_GetPLL3ClockFreq+0x2a0>
  26775. 800b852: ee86 7aa7 vdiv.f32 s14, s13, s15
  26776. 800b856: 4b37 ldr r3, [pc, #220] @ (800b934 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  26777. 800b858: 6c1b ldr r3, [r3, #64] @ 0x40
  26778. 800b85a: f3c3 0308 ubfx r3, r3, #0, #9
  26779. 800b85e: ee07 3a90 vmov s15, r3
  26780. 800b862: eef8 6a67 vcvt.f32.u32 s13, s15
  26781. 800b866: ed97 6a03 vldr s12, [r7, #12]
  26782. 800b86a: eddf 5a34 vldr s11, [pc, #208] @ 800b93c <HAL_RCCEx_GetPLL3ClockFreq+0x298>
  26783. 800b86e: eec6 7a25 vdiv.f32 s15, s12, s11
  26784. 800b872: ee76 7aa7 vadd.f32 s15, s13, s15
  26785. 800b876: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  26786. 800b87a: ee77 7aa6 vadd.f32 s15, s15, s13
  26787. 800b87e: ee67 7a27 vmul.f32 s15, s14, s15
  26788. 800b882: edc7 7a07 vstr s15, [r7, #28]
  26789. break;
  26790. 800b886: bf00 nop
  26791. }
  26792. PLL3_Clocks->PLL3_P_Frequency = (uint32_t)(float_t)(pll3vco / ((float_t)(uint32_t)((RCC->PLL3DIVR & RCC_PLL3DIVR_P3) >> 9) + (float_t)1)) ;
  26793. 800b888: 4b2a ldr r3, [pc, #168] @ (800b934 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  26794. 800b88a: 6c1b ldr r3, [r3, #64] @ 0x40
  26795. 800b88c: 0a5b lsrs r3, r3, #9
  26796. 800b88e: f003 037f and.w r3, r3, #127 @ 0x7f
  26797. 800b892: ee07 3a90 vmov s15, r3
  26798. 800b896: eef8 7a67 vcvt.f32.u32 s15, s15
  26799. 800b89a: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  26800. 800b89e: ee37 7a87 vadd.f32 s14, s15, s14
  26801. 800b8a2: edd7 6a07 vldr s13, [r7, #28]
  26802. 800b8a6: eec6 7a87 vdiv.f32 s15, s13, s14
  26803. 800b8aa: eefc 7ae7 vcvt.u32.f32 s15, s15
  26804. 800b8ae: ee17 2a90 vmov r2, s15
  26805. 800b8b2: 687b ldr r3, [r7, #4]
  26806. 800b8b4: 601a str r2, [r3, #0]
  26807. PLL3_Clocks->PLL3_Q_Frequency = (uint32_t)(float_t)(pll3vco / ((float_t)(uint32_t)((RCC->PLL3DIVR & RCC_PLL3DIVR_Q3) >> 16) + (float_t)1)) ;
  26808. 800b8b6: 4b1f ldr r3, [pc, #124] @ (800b934 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  26809. 800b8b8: 6c1b ldr r3, [r3, #64] @ 0x40
  26810. 800b8ba: 0c1b lsrs r3, r3, #16
  26811. 800b8bc: f003 037f and.w r3, r3, #127 @ 0x7f
  26812. 800b8c0: ee07 3a90 vmov s15, r3
  26813. 800b8c4: eef8 7a67 vcvt.f32.u32 s15, s15
  26814. 800b8c8: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  26815. 800b8cc: ee37 7a87 vadd.f32 s14, s15, s14
  26816. 800b8d0: edd7 6a07 vldr s13, [r7, #28]
  26817. 800b8d4: eec6 7a87 vdiv.f32 s15, s13, s14
  26818. 800b8d8: eefc 7ae7 vcvt.u32.f32 s15, s15
  26819. 800b8dc: ee17 2a90 vmov r2, s15
  26820. 800b8e0: 687b ldr r3, [r7, #4]
  26821. 800b8e2: 605a str r2, [r3, #4]
  26822. PLL3_Clocks->PLL3_R_Frequency = (uint32_t)(float_t)(pll3vco / ((float_t)(uint32_t)((RCC->PLL3DIVR & RCC_PLL3DIVR_R3) >> 24) + (float_t)1)) ;
  26823. 800b8e4: 4b13 ldr r3, [pc, #76] @ (800b934 <HAL_RCCEx_GetPLL3ClockFreq+0x290>)
  26824. 800b8e6: 6c1b ldr r3, [r3, #64] @ 0x40
  26825. 800b8e8: 0e1b lsrs r3, r3, #24
  26826. 800b8ea: f003 037f and.w r3, r3, #127 @ 0x7f
  26827. 800b8ee: ee07 3a90 vmov s15, r3
  26828. 800b8f2: eef8 7a67 vcvt.f32.u32 s15, s15
  26829. 800b8f6: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  26830. 800b8fa: ee37 7a87 vadd.f32 s14, s15, s14
  26831. 800b8fe: edd7 6a07 vldr s13, [r7, #28]
  26832. 800b902: eec6 7a87 vdiv.f32 s15, s13, s14
  26833. 800b906: eefc 7ae7 vcvt.u32.f32 s15, s15
  26834. 800b90a: ee17 2a90 vmov r2, s15
  26835. 800b90e: 687b ldr r3, [r7, #4]
  26836. 800b910: 609a str r2, [r3, #8]
  26837. PLL3_Clocks->PLL3_P_Frequency = 0U;
  26838. PLL3_Clocks->PLL3_Q_Frequency = 0U;
  26839. PLL3_Clocks->PLL3_R_Frequency = 0U;
  26840. }
  26841. }
  26842. 800b912: e008 b.n 800b926 <HAL_RCCEx_GetPLL3ClockFreq+0x282>
  26843. PLL3_Clocks->PLL3_P_Frequency = 0U;
  26844. 800b914: 687b ldr r3, [r7, #4]
  26845. 800b916: 2200 movs r2, #0
  26846. 800b918: 601a str r2, [r3, #0]
  26847. PLL3_Clocks->PLL3_Q_Frequency = 0U;
  26848. 800b91a: 687b ldr r3, [r7, #4]
  26849. 800b91c: 2200 movs r2, #0
  26850. 800b91e: 605a str r2, [r3, #4]
  26851. PLL3_Clocks->PLL3_R_Frequency = 0U;
  26852. 800b920: 687b ldr r3, [r7, #4]
  26853. 800b922: 2200 movs r2, #0
  26854. 800b924: 609a str r2, [r3, #8]
  26855. }
  26856. 800b926: bf00 nop
  26857. 800b928: 3724 adds r7, #36 @ 0x24
  26858. 800b92a: 46bd mov sp, r7
  26859. 800b92c: f85d 7b04 ldr.w r7, [sp], #4
  26860. 800b930: 4770 bx lr
  26861. 800b932: bf00 nop
  26862. 800b934: 58024400 .word 0x58024400
  26863. 800b938: 03d09000 .word 0x03d09000
  26864. 800b93c: 46000000 .word 0x46000000
  26865. 800b940: 4c742400 .word 0x4c742400
  26866. 800b944: 4a742400 .word 0x4a742400
  26867. 800b948: 4bbebc20 .word 0x4bbebc20
  26868. 0800b94c <HAL_RCCEx_GetPLL1ClockFreq>:
  26869. * right PLL1CLK value. Otherwise, any configuration based on this function will be incorrect.
  26870. * @param PLL1_Clocks structure.
  26871. * @retval None
  26872. */
  26873. void HAL_RCCEx_GetPLL1ClockFreq(PLL1_ClocksTypeDef *PLL1_Clocks)
  26874. {
  26875. 800b94c: b480 push {r7}
  26876. 800b94e: b089 sub sp, #36 @ 0x24
  26877. 800b950: af00 add r7, sp, #0
  26878. 800b952: 6078 str r0, [r7, #4]
  26879. uint32_t pllsource, pll1m, pll1fracen, hsivalue;
  26880. float_t fracn1, pll1vco;
  26881. pllsource = (RCC->PLLCKSELR & RCC_PLLCKSELR_PLLSRC);
  26882. 800b954: 4ba0 ldr r3, [pc, #640] @ (800bbd8 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  26883. 800b956: 6a9b ldr r3, [r3, #40] @ 0x28
  26884. 800b958: f003 0303 and.w r3, r3, #3
  26885. 800b95c: 61bb str r3, [r7, #24]
  26886. pll1m = ((RCC->PLLCKSELR & RCC_PLLCKSELR_DIVM1) >> 4);
  26887. 800b95e: 4b9e ldr r3, [pc, #632] @ (800bbd8 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  26888. 800b960: 6a9b ldr r3, [r3, #40] @ 0x28
  26889. 800b962: 091b lsrs r3, r3, #4
  26890. 800b964: f003 033f and.w r3, r3, #63 @ 0x3f
  26891. 800b968: 617b str r3, [r7, #20]
  26892. pll1fracen = RCC->PLLCFGR & RCC_PLLCFGR_PLL1FRACEN;
  26893. 800b96a: 4b9b ldr r3, [pc, #620] @ (800bbd8 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  26894. 800b96c: 6adb ldr r3, [r3, #44] @ 0x2c
  26895. 800b96e: f003 0301 and.w r3, r3, #1
  26896. 800b972: 613b str r3, [r7, #16]
  26897. fracn1 = (float_t)(uint32_t)(pll1fracen * ((RCC->PLL1FRACR & RCC_PLL1FRACR_FRACN1) >> 3));
  26898. 800b974: 4b98 ldr r3, [pc, #608] @ (800bbd8 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  26899. 800b976: 6b5b ldr r3, [r3, #52] @ 0x34
  26900. 800b978: 08db lsrs r3, r3, #3
  26901. 800b97a: f3c3 030c ubfx r3, r3, #0, #13
  26902. 800b97e: 693a ldr r2, [r7, #16]
  26903. 800b980: fb02 f303 mul.w r3, r2, r3
  26904. 800b984: ee07 3a90 vmov s15, r3
  26905. 800b988: eef8 7a67 vcvt.f32.u32 s15, s15
  26906. 800b98c: edc7 7a03 vstr s15, [r7, #12]
  26907. if (pll1m != 0U)
  26908. 800b990: 697b ldr r3, [r7, #20]
  26909. 800b992: 2b00 cmp r3, #0
  26910. 800b994: f000 8111 beq.w 800bbba <HAL_RCCEx_GetPLL1ClockFreq+0x26e>
  26911. {
  26912. switch (pllsource)
  26913. 800b998: 69bb ldr r3, [r7, #24]
  26914. 800b99a: 2b02 cmp r3, #2
  26915. 800b99c: f000 8083 beq.w 800baa6 <HAL_RCCEx_GetPLL1ClockFreq+0x15a>
  26916. 800b9a0: 69bb ldr r3, [r7, #24]
  26917. 800b9a2: 2b02 cmp r3, #2
  26918. 800b9a4: f200 80a1 bhi.w 800baea <HAL_RCCEx_GetPLL1ClockFreq+0x19e>
  26919. 800b9a8: 69bb ldr r3, [r7, #24]
  26920. 800b9aa: 2b00 cmp r3, #0
  26921. 800b9ac: d003 beq.n 800b9b6 <HAL_RCCEx_GetPLL1ClockFreq+0x6a>
  26922. 800b9ae: 69bb ldr r3, [r7, #24]
  26923. 800b9b0: 2b01 cmp r3, #1
  26924. 800b9b2: d056 beq.n 800ba62 <HAL_RCCEx_GetPLL1ClockFreq+0x116>
  26925. 800b9b4: e099 b.n 800baea <HAL_RCCEx_GetPLL1ClockFreq+0x19e>
  26926. {
  26927. case RCC_PLLSOURCE_HSI: /* HSI used as PLL clock source */
  26928. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  26929. 800b9b6: 4b88 ldr r3, [pc, #544] @ (800bbd8 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  26930. 800b9b8: 681b ldr r3, [r3, #0]
  26931. 800b9ba: f003 0320 and.w r3, r3, #32
  26932. 800b9be: 2b00 cmp r3, #0
  26933. 800b9c0: d02d beq.n 800ba1e <HAL_RCCEx_GetPLL1ClockFreq+0xd2>
  26934. {
  26935. hsivalue = (HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3));
  26936. 800b9c2: 4b85 ldr r3, [pc, #532] @ (800bbd8 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  26937. 800b9c4: 681b ldr r3, [r3, #0]
  26938. 800b9c6: 08db lsrs r3, r3, #3
  26939. 800b9c8: f003 0303 and.w r3, r3, #3
  26940. 800b9cc: 4a83 ldr r2, [pc, #524] @ (800bbdc <HAL_RCCEx_GetPLL1ClockFreq+0x290>)
  26941. 800b9ce: fa22 f303 lsr.w r3, r2, r3
  26942. 800b9d2: 60bb str r3, [r7, #8]
  26943. pll1vco = ((float_t)hsivalue / (float_t)pll1m) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  26944. 800b9d4: 68bb ldr r3, [r7, #8]
  26945. 800b9d6: ee07 3a90 vmov s15, r3
  26946. 800b9da: eef8 6a67 vcvt.f32.u32 s13, s15
  26947. 800b9de: 697b ldr r3, [r7, #20]
  26948. 800b9e0: ee07 3a90 vmov s15, r3
  26949. 800b9e4: eef8 7a67 vcvt.f32.u32 s15, s15
  26950. 800b9e8: ee86 7aa7 vdiv.f32 s14, s13, s15
  26951. 800b9ec: 4b7a ldr r3, [pc, #488] @ (800bbd8 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  26952. 800b9ee: 6b1b ldr r3, [r3, #48] @ 0x30
  26953. 800b9f0: f3c3 0308 ubfx r3, r3, #0, #9
  26954. 800b9f4: ee07 3a90 vmov s15, r3
  26955. 800b9f8: eef8 6a67 vcvt.f32.u32 s13, s15
  26956. 800b9fc: ed97 6a03 vldr s12, [r7, #12]
  26957. 800ba00: eddf 5a77 vldr s11, [pc, #476] @ 800bbe0 <HAL_RCCEx_GetPLL1ClockFreq+0x294>
  26958. 800ba04: eec6 7a25 vdiv.f32 s15, s12, s11
  26959. 800ba08: ee76 7aa7 vadd.f32 s15, s13, s15
  26960. 800ba0c: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  26961. 800ba10: ee77 7aa6 vadd.f32 s15, s15, s13
  26962. 800ba14: ee67 7a27 vmul.f32 s15, s14, s15
  26963. 800ba18: edc7 7a07 vstr s15, [r7, #28]
  26964. }
  26965. else
  26966. {
  26967. pll1vco = ((float_t)HSI_VALUE / (float_t)pll1m) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  26968. }
  26969. break;
  26970. 800ba1c: e087 b.n 800bb2e <HAL_RCCEx_GetPLL1ClockFreq+0x1e2>
  26971. pll1vco = ((float_t)HSI_VALUE / (float_t)pll1m) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  26972. 800ba1e: 697b ldr r3, [r7, #20]
  26973. 800ba20: ee07 3a90 vmov s15, r3
  26974. 800ba24: eef8 7a67 vcvt.f32.u32 s15, s15
  26975. 800ba28: eddf 6a6e vldr s13, [pc, #440] @ 800bbe4 <HAL_RCCEx_GetPLL1ClockFreq+0x298>
  26976. 800ba2c: ee86 7aa7 vdiv.f32 s14, s13, s15
  26977. 800ba30: 4b69 ldr r3, [pc, #420] @ (800bbd8 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  26978. 800ba32: 6b1b ldr r3, [r3, #48] @ 0x30
  26979. 800ba34: f3c3 0308 ubfx r3, r3, #0, #9
  26980. 800ba38: ee07 3a90 vmov s15, r3
  26981. 800ba3c: eef8 6a67 vcvt.f32.u32 s13, s15
  26982. 800ba40: ed97 6a03 vldr s12, [r7, #12]
  26983. 800ba44: eddf 5a66 vldr s11, [pc, #408] @ 800bbe0 <HAL_RCCEx_GetPLL1ClockFreq+0x294>
  26984. 800ba48: eec6 7a25 vdiv.f32 s15, s12, s11
  26985. 800ba4c: ee76 7aa7 vadd.f32 s15, s13, s15
  26986. 800ba50: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  26987. 800ba54: ee77 7aa6 vadd.f32 s15, s15, s13
  26988. 800ba58: ee67 7a27 vmul.f32 s15, s14, s15
  26989. 800ba5c: edc7 7a07 vstr s15, [r7, #28]
  26990. break;
  26991. 800ba60: e065 b.n 800bb2e <HAL_RCCEx_GetPLL1ClockFreq+0x1e2>
  26992. case RCC_PLLSOURCE_CSI: /* CSI used as PLL clock source */
  26993. pll1vco = ((float_t)CSI_VALUE / (float_t)pll1m) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  26994. 800ba62: 697b ldr r3, [r7, #20]
  26995. 800ba64: ee07 3a90 vmov s15, r3
  26996. 800ba68: eef8 7a67 vcvt.f32.u32 s15, s15
  26997. 800ba6c: eddf 6a5e vldr s13, [pc, #376] @ 800bbe8 <HAL_RCCEx_GetPLL1ClockFreq+0x29c>
  26998. 800ba70: ee86 7aa7 vdiv.f32 s14, s13, s15
  26999. 800ba74: 4b58 ldr r3, [pc, #352] @ (800bbd8 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  27000. 800ba76: 6b1b ldr r3, [r3, #48] @ 0x30
  27001. 800ba78: f3c3 0308 ubfx r3, r3, #0, #9
  27002. 800ba7c: ee07 3a90 vmov s15, r3
  27003. 800ba80: eef8 6a67 vcvt.f32.u32 s13, s15
  27004. 800ba84: ed97 6a03 vldr s12, [r7, #12]
  27005. 800ba88: eddf 5a55 vldr s11, [pc, #340] @ 800bbe0 <HAL_RCCEx_GetPLL1ClockFreq+0x294>
  27006. 800ba8c: eec6 7a25 vdiv.f32 s15, s12, s11
  27007. 800ba90: ee76 7aa7 vadd.f32 s15, s13, s15
  27008. 800ba94: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  27009. 800ba98: ee77 7aa6 vadd.f32 s15, s15, s13
  27010. 800ba9c: ee67 7a27 vmul.f32 s15, s14, s15
  27011. 800baa0: edc7 7a07 vstr s15, [r7, #28]
  27012. break;
  27013. 800baa4: e043 b.n 800bb2e <HAL_RCCEx_GetPLL1ClockFreq+0x1e2>
  27014. case RCC_PLLSOURCE_HSE: /* HSE used as PLL clock source */
  27015. pll1vco = ((float_t)HSE_VALUE / (float_t)pll1m) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  27016. 800baa6: 697b ldr r3, [r7, #20]
  27017. 800baa8: ee07 3a90 vmov s15, r3
  27018. 800baac: eef8 7a67 vcvt.f32.u32 s15, s15
  27019. 800bab0: eddf 6a4e vldr s13, [pc, #312] @ 800bbec <HAL_RCCEx_GetPLL1ClockFreq+0x2a0>
  27020. 800bab4: ee86 7aa7 vdiv.f32 s14, s13, s15
  27021. 800bab8: 4b47 ldr r3, [pc, #284] @ (800bbd8 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  27022. 800baba: 6b1b ldr r3, [r3, #48] @ 0x30
  27023. 800babc: f3c3 0308 ubfx r3, r3, #0, #9
  27024. 800bac0: ee07 3a90 vmov s15, r3
  27025. 800bac4: eef8 6a67 vcvt.f32.u32 s13, s15
  27026. 800bac8: ed97 6a03 vldr s12, [r7, #12]
  27027. 800bacc: eddf 5a44 vldr s11, [pc, #272] @ 800bbe0 <HAL_RCCEx_GetPLL1ClockFreq+0x294>
  27028. 800bad0: eec6 7a25 vdiv.f32 s15, s12, s11
  27029. 800bad4: ee76 7aa7 vadd.f32 s15, s13, s15
  27030. 800bad8: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  27031. 800badc: ee77 7aa6 vadd.f32 s15, s15, s13
  27032. 800bae0: ee67 7a27 vmul.f32 s15, s14, s15
  27033. 800bae4: edc7 7a07 vstr s15, [r7, #28]
  27034. break;
  27035. 800bae8: e021 b.n 800bb2e <HAL_RCCEx_GetPLL1ClockFreq+0x1e2>
  27036. default:
  27037. pll1vco = ((float_t)HSI_VALUE / (float_t)pll1m) * ((float_t)(uint32_t)(RCC->PLL1DIVR & RCC_PLL1DIVR_N1) + (fracn1 / (float_t)0x2000) + (float_t)1);
  27038. 800baea: 697b ldr r3, [r7, #20]
  27039. 800baec: ee07 3a90 vmov s15, r3
  27040. 800baf0: eef8 7a67 vcvt.f32.u32 s15, s15
  27041. 800baf4: eddf 6a3b vldr s13, [pc, #236] @ 800bbe4 <HAL_RCCEx_GetPLL1ClockFreq+0x298>
  27042. 800baf8: ee86 7aa7 vdiv.f32 s14, s13, s15
  27043. 800bafc: 4b36 ldr r3, [pc, #216] @ (800bbd8 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  27044. 800bafe: 6b1b ldr r3, [r3, #48] @ 0x30
  27045. 800bb00: f3c3 0308 ubfx r3, r3, #0, #9
  27046. 800bb04: ee07 3a90 vmov s15, r3
  27047. 800bb08: eef8 6a67 vcvt.f32.u32 s13, s15
  27048. 800bb0c: ed97 6a03 vldr s12, [r7, #12]
  27049. 800bb10: eddf 5a33 vldr s11, [pc, #204] @ 800bbe0 <HAL_RCCEx_GetPLL1ClockFreq+0x294>
  27050. 800bb14: eec6 7a25 vdiv.f32 s15, s12, s11
  27051. 800bb18: ee76 7aa7 vadd.f32 s15, s13, s15
  27052. 800bb1c: eef7 6a00 vmov.f32 s13, #112 @ 0x3f800000 1.0
  27053. 800bb20: ee77 7aa6 vadd.f32 s15, s15, s13
  27054. 800bb24: ee67 7a27 vmul.f32 s15, s14, s15
  27055. 800bb28: edc7 7a07 vstr s15, [r7, #28]
  27056. break;
  27057. 800bb2c: bf00 nop
  27058. }
  27059. PLL1_Clocks->PLL1_P_Frequency = (uint32_t)(float_t)(pll1vco / ((float_t)(uint32_t)((RCC->PLL1DIVR & RCC_PLL1DIVR_P1) >> 9) + (float_t)1)) ;
  27060. 800bb2e: 4b2a ldr r3, [pc, #168] @ (800bbd8 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  27061. 800bb30: 6b1b ldr r3, [r3, #48] @ 0x30
  27062. 800bb32: 0a5b lsrs r3, r3, #9
  27063. 800bb34: f003 037f and.w r3, r3, #127 @ 0x7f
  27064. 800bb38: ee07 3a90 vmov s15, r3
  27065. 800bb3c: eef8 7a67 vcvt.f32.u32 s15, s15
  27066. 800bb40: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  27067. 800bb44: ee37 7a87 vadd.f32 s14, s15, s14
  27068. 800bb48: edd7 6a07 vldr s13, [r7, #28]
  27069. 800bb4c: eec6 7a87 vdiv.f32 s15, s13, s14
  27070. 800bb50: eefc 7ae7 vcvt.u32.f32 s15, s15
  27071. 800bb54: ee17 2a90 vmov r2, s15
  27072. 800bb58: 687b ldr r3, [r7, #4]
  27073. 800bb5a: 601a str r2, [r3, #0]
  27074. PLL1_Clocks->PLL1_Q_Frequency = (uint32_t)(float_t)(pll1vco / ((float_t)(uint32_t)((RCC->PLL1DIVR & RCC_PLL1DIVR_Q1) >> 16) + (float_t)1)) ;
  27075. 800bb5c: 4b1e ldr r3, [pc, #120] @ (800bbd8 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  27076. 800bb5e: 6b1b ldr r3, [r3, #48] @ 0x30
  27077. 800bb60: 0c1b lsrs r3, r3, #16
  27078. 800bb62: f003 037f and.w r3, r3, #127 @ 0x7f
  27079. 800bb66: ee07 3a90 vmov s15, r3
  27080. 800bb6a: eef8 7a67 vcvt.f32.u32 s15, s15
  27081. 800bb6e: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  27082. 800bb72: ee37 7a87 vadd.f32 s14, s15, s14
  27083. 800bb76: edd7 6a07 vldr s13, [r7, #28]
  27084. 800bb7a: eec6 7a87 vdiv.f32 s15, s13, s14
  27085. 800bb7e: eefc 7ae7 vcvt.u32.f32 s15, s15
  27086. 800bb82: ee17 2a90 vmov r2, s15
  27087. 800bb86: 687b ldr r3, [r7, #4]
  27088. 800bb88: 605a str r2, [r3, #4]
  27089. PLL1_Clocks->PLL1_R_Frequency = (uint32_t)(float_t)(pll1vco / ((float_t)(uint32_t)((RCC->PLL1DIVR & RCC_PLL1DIVR_R1) >> 24) + (float_t)1)) ;
  27090. 800bb8a: 4b13 ldr r3, [pc, #76] @ (800bbd8 <HAL_RCCEx_GetPLL1ClockFreq+0x28c>)
  27091. 800bb8c: 6b1b ldr r3, [r3, #48] @ 0x30
  27092. 800bb8e: 0e1b lsrs r3, r3, #24
  27093. 800bb90: f003 037f and.w r3, r3, #127 @ 0x7f
  27094. 800bb94: ee07 3a90 vmov s15, r3
  27095. 800bb98: eef8 7a67 vcvt.f32.u32 s15, s15
  27096. 800bb9c: eeb7 7a00 vmov.f32 s14, #112 @ 0x3f800000 1.0
  27097. 800bba0: ee37 7a87 vadd.f32 s14, s15, s14
  27098. 800bba4: edd7 6a07 vldr s13, [r7, #28]
  27099. 800bba8: eec6 7a87 vdiv.f32 s15, s13, s14
  27100. 800bbac: eefc 7ae7 vcvt.u32.f32 s15, s15
  27101. 800bbb0: ee17 2a90 vmov r2, s15
  27102. 800bbb4: 687b ldr r3, [r7, #4]
  27103. 800bbb6: 609a str r2, [r3, #8]
  27104. PLL1_Clocks->PLL1_P_Frequency = 0U;
  27105. PLL1_Clocks->PLL1_Q_Frequency = 0U;
  27106. PLL1_Clocks->PLL1_R_Frequency = 0U;
  27107. }
  27108. }
  27109. 800bbb8: e008 b.n 800bbcc <HAL_RCCEx_GetPLL1ClockFreq+0x280>
  27110. PLL1_Clocks->PLL1_P_Frequency = 0U;
  27111. 800bbba: 687b ldr r3, [r7, #4]
  27112. 800bbbc: 2200 movs r2, #0
  27113. 800bbbe: 601a str r2, [r3, #0]
  27114. PLL1_Clocks->PLL1_Q_Frequency = 0U;
  27115. 800bbc0: 687b ldr r3, [r7, #4]
  27116. 800bbc2: 2200 movs r2, #0
  27117. 800bbc4: 605a str r2, [r3, #4]
  27118. PLL1_Clocks->PLL1_R_Frequency = 0U;
  27119. 800bbc6: 687b ldr r3, [r7, #4]
  27120. 800bbc8: 2200 movs r2, #0
  27121. 800bbca: 609a str r2, [r3, #8]
  27122. }
  27123. 800bbcc: bf00 nop
  27124. 800bbce: 3724 adds r7, #36 @ 0x24
  27125. 800bbd0: 46bd mov sp, r7
  27126. 800bbd2: f85d 7b04 ldr.w r7, [sp], #4
  27127. 800bbd6: 4770 bx lr
  27128. 800bbd8: 58024400 .word 0x58024400
  27129. 800bbdc: 03d09000 .word 0x03d09000
  27130. 800bbe0: 46000000 .word 0x46000000
  27131. 800bbe4: 4c742400 .word 0x4c742400
  27132. 800bbe8: 4a742400 .word 0x4a742400
  27133. 800bbec: 4bbebc20 .word 0x4bbebc20
  27134. 0800bbf0 <RCCEx_PLL2_Config>:
  27135. * @note PLL2 is temporary disabled to apply new parameters
  27136. *
  27137. * @retval HAL status
  27138. */
  27139. static HAL_StatusTypeDef RCCEx_PLL2_Config(RCC_PLL2InitTypeDef *pll2, uint32_t Divider)
  27140. {
  27141. 800bbf0: b580 push {r7, lr}
  27142. 800bbf2: b084 sub sp, #16
  27143. 800bbf4: af00 add r7, sp, #0
  27144. 800bbf6: 6078 str r0, [r7, #4]
  27145. 800bbf8: 6039 str r1, [r7, #0]
  27146. uint32_t tickstart;
  27147. HAL_StatusTypeDef status = HAL_OK;
  27148. 800bbfa: 2300 movs r3, #0
  27149. 800bbfc: 73fb strb r3, [r7, #15]
  27150. assert_param(IS_RCC_PLL2RGE_VALUE(pll2->PLL2RGE));
  27151. assert_param(IS_RCC_PLL2VCO_VALUE(pll2->PLL2VCOSEL));
  27152. assert_param(IS_RCC_PLLFRACN_VALUE(pll2->PLL2FRACN));
  27153. /* Check that PLL2 OSC clock source is already set */
  27154. if (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_NONE)
  27155. 800bbfe: 4b53 ldr r3, [pc, #332] @ (800bd4c <RCCEx_PLL2_Config+0x15c>)
  27156. 800bc00: 6a9b ldr r3, [r3, #40] @ 0x28
  27157. 800bc02: f003 0303 and.w r3, r3, #3
  27158. 800bc06: 2b03 cmp r3, #3
  27159. 800bc08: d101 bne.n 800bc0e <RCCEx_PLL2_Config+0x1e>
  27160. {
  27161. return HAL_ERROR;
  27162. 800bc0a: 2301 movs r3, #1
  27163. 800bc0c: e099 b.n 800bd42 <RCCEx_PLL2_Config+0x152>
  27164. else
  27165. {
  27166. /* Disable PLL2. */
  27167. __HAL_RCC_PLL2_DISABLE();
  27168. 800bc0e: 4b4f ldr r3, [pc, #316] @ (800bd4c <RCCEx_PLL2_Config+0x15c>)
  27169. 800bc10: 681b ldr r3, [r3, #0]
  27170. 800bc12: 4a4e ldr r2, [pc, #312] @ (800bd4c <RCCEx_PLL2_Config+0x15c>)
  27171. 800bc14: f023 6380 bic.w r3, r3, #67108864 @ 0x4000000
  27172. 800bc18: 6013 str r3, [r2, #0]
  27173. /* Get Start Tick*/
  27174. tickstart = HAL_GetTick();
  27175. 800bc1a: f7f7 fc53 bl 80034c4 <HAL_GetTick>
  27176. 800bc1e: 60b8 str r0, [r7, #8]
  27177. /* Wait till PLL is disabled */
  27178. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != 0U)
  27179. 800bc20: e008 b.n 800bc34 <RCCEx_PLL2_Config+0x44>
  27180. {
  27181. if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE)
  27182. 800bc22: f7f7 fc4f bl 80034c4 <HAL_GetTick>
  27183. 800bc26: 4602 mov r2, r0
  27184. 800bc28: 68bb ldr r3, [r7, #8]
  27185. 800bc2a: 1ad3 subs r3, r2, r3
  27186. 800bc2c: 2b02 cmp r3, #2
  27187. 800bc2e: d901 bls.n 800bc34 <RCCEx_PLL2_Config+0x44>
  27188. {
  27189. return HAL_TIMEOUT;
  27190. 800bc30: 2303 movs r3, #3
  27191. 800bc32: e086 b.n 800bd42 <RCCEx_PLL2_Config+0x152>
  27192. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != 0U)
  27193. 800bc34: 4b45 ldr r3, [pc, #276] @ (800bd4c <RCCEx_PLL2_Config+0x15c>)
  27194. 800bc36: 681b ldr r3, [r3, #0]
  27195. 800bc38: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  27196. 800bc3c: 2b00 cmp r3, #0
  27197. 800bc3e: d1f0 bne.n 800bc22 <RCCEx_PLL2_Config+0x32>
  27198. }
  27199. }
  27200. /* Configure PLL2 multiplication and division factors. */
  27201. __HAL_RCC_PLL2_CONFIG(pll2->PLL2M,
  27202. 800bc40: 4b42 ldr r3, [pc, #264] @ (800bd4c <RCCEx_PLL2_Config+0x15c>)
  27203. 800bc42: 6a9b ldr r3, [r3, #40] @ 0x28
  27204. 800bc44: f423 327c bic.w r2, r3, #258048 @ 0x3f000
  27205. 800bc48: 687b ldr r3, [r7, #4]
  27206. 800bc4a: 681b ldr r3, [r3, #0]
  27207. 800bc4c: 031b lsls r3, r3, #12
  27208. 800bc4e: 493f ldr r1, [pc, #252] @ (800bd4c <RCCEx_PLL2_Config+0x15c>)
  27209. 800bc50: 4313 orrs r3, r2
  27210. 800bc52: 628b str r3, [r1, #40] @ 0x28
  27211. 800bc54: 687b ldr r3, [r7, #4]
  27212. 800bc56: 685b ldr r3, [r3, #4]
  27213. 800bc58: 3b01 subs r3, #1
  27214. 800bc5a: f3c3 0208 ubfx r2, r3, #0, #9
  27215. 800bc5e: 687b ldr r3, [r7, #4]
  27216. 800bc60: 689b ldr r3, [r3, #8]
  27217. 800bc62: 3b01 subs r3, #1
  27218. 800bc64: 025b lsls r3, r3, #9
  27219. 800bc66: b29b uxth r3, r3
  27220. 800bc68: 431a orrs r2, r3
  27221. 800bc6a: 687b ldr r3, [r7, #4]
  27222. 800bc6c: 68db ldr r3, [r3, #12]
  27223. 800bc6e: 3b01 subs r3, #1
  27224. 800bc70: 041b lsls r3, r3, #16
  27225. 800bc72: f403 03fe and.w r3, r3, #8323072 @ 0x7f0000
  27226. 800bc76: 431a orrs r2, r3
  27227. 800bc78: 687b ldr r3, [r7, #4]
  27228. 800bc7a: 691b ldr r3, [r3, #16]
  27229. 800bc7c: 3b01 subs r3, #1
  27230. 800bc7e: 061b lsls r3, r3, #24
  27231. 800bc80: f003 43fe and.w r3, r3, #2130706432 @ 0x7f000000
  27232. 800bc84: 4931 ldr r1, [pc, #196] @ (800bd4c <RCCEx_PLL2_Config+0x15c>)
  27233. 800bc86: 4313 orrs r3, r2
  27234. 800bc88: 638b str r3, [r1, #56] @ 0x38
  27235. pll2->PLL2P,
  27236. pll2->PLL2Q,
  27237. pll2->PLL2R);
  27238. /* Select PLL2 input reference frequency range: VCI */
  27239. __HAL_RCC_PLL2_VCIRANGE(pll2->PLL2RGE) ;
  27240. 800bc8a: 4b30 ldr r3, [pc, #192] @ (800bd4c <RCCEx_PLL2_Config+0x15c>)
  27241. 800bc8c: 6adb ldr r3, [r3, #44] @ 0x2c
  27242. 800bc8e: f023 02c0 bic.w r2, r3, #192 @ 0xc0
  27243. 800bc92: 687b ldr r3, [r7, #4]
  27244. 800bc94: 695b ldr r3, [r3, #20]
  27245. 800bc96: 492d ldr r1, [pc, #180] @ (800bd4c <RCCEx_PLL2_Config+0x15c>)
  27246. 800bc98: 4313 orrs r3, r2
  27247. 800bc9a: 62cb str r3, [r1, #44] @ 0x2c
  27248. /* Select PLL2 output frequency range : VCO */
  27249. __HAL_RCC_PLL2_VCORANGE(pll2->PLL2VCOSEL) ;
  27250. 800bc9c: 4b2b ldr r3, [pc, #172] @ (800bd4c <RCCEx_PLL2_Config+0x15c>)
  27251. 800bc9e: 6adb ldr r3, [r3, #44] @ 0x2c
  27252. 800bca0: f023 0220 bic.w r2, r3, #32
  27253. 800bca4: 687b ldr r3, [r7, #4]
  27254. 800bca6: 699b ldr r3, [r3, #24]
  27255. 800bca8: 4928 ldr r1, [pc, #160] @ (800bd4c <RCCEx_PLL2_Config+0x15c>)
  27256. 800bcaa: 4313 orrs r3, r2
  27257. 800bcac: 62cb str r3, [r1, #44] @ 0x2c
  27258. /* Disable PLL2FRACN . */
  27259. __HAL_RCC_PLL2FRACN_DISABLE();
  27260. 800bcae: 4b27 ldr r3, [pc, #156] @ (800bd4c <RCCEx_PLL2_Config+0x15c>)
  27261. 800bcb0: 6adb ldr r3, [r3, #44] @ 0x2c
  27262. 800bcb2: 4a26 ldr r2, [pc, #152] @ (800bd4c <RCCEx_PLL2_Config+0x15c>)
  27263. 800bcb4: f023 0310 bic.w r3, r3, #16
  27264. 800bcb8: 62d3 str r3, [r2, #44] @ 0x2c
  27265. /* Configures PLL2 clock Fractional Part Of The Multiplication Factor */
  27266. __HAL_RCC_PLL2FRACN_CONFIG(pll2->PLL2FRACN);
  27267. 800bcba: 4b24 ldr r3, [pc, #144] @ (800bd4c <RCCEx_PLL2_Config+0x15c>)
  27268. 800bcbc: 6bda ldr r2, [r3, #60] @ 0x3c
  27269. 800bcbe: 4b24 ldr r3, [pc, #144] @ (800bd50 <RCCEx_PLL2_Config+0x160>)
  27270. 800bcc0: 4013 ands r3, r2
  27271. 800bcc2: 687a ldr r2, [r7, #4]
  27272. 800bcc4: 69d2 ldr r2, [r2, #28]
  27273. 800bcc6: 00d2 lsls r2, r2, #3
  27274. 800bcc8: 4920 ldr r1, [pc, #128] @ (800bd4c <RCCEx_PLL2_Config+0x15c>)
  27275. 800bcca: 4313 orrs r3, r2
  27276. 800bccc: 63cb str r3, [r1, #60] @ 0x3c
  27277. /* Enable PLL2FRACN . */
  27278. __HAL_RCC_PLL2FRACN_ENABLE();
  27279. 800bcce: 4b1f ldr r3, [pc, #124] @ (800bd4c <RCCEx_PLL2_Config+0x15c>)
  27280. 800bcd0: 6adb ldr r3, [r3, #44] @ 0x2c
  27281. 800bcd2: 4a1e ldr r2, [pc, #120] @ (800bd4c <RCCEx_PLL2_Config+0x15c>)
  27282. 800bcd4: f043 0310 orr.w r3, r3, #16
  27283. 800bcd8: 62d3 str r3, [r2, #44] @ 0x2c
  27284. /* Enable the PLL2 clock output */
  27285. if (Divider == DIVIDER_P_UPDATE)
  27286. 800bcda: 683b ldr r3, [r7, #0]
  27287. 800bcdc: 2b00 cmp r3, #0
  27288. 800bcde: d106 bne.n 800bcee <RCCEx_PLL2_Config+0xfe>
  27289. {
  27290. __HAL_RCC_PLL2CLKOUT_ENABLE(RCC_PLL2_DIVP);
  27291. 800bce0: 4b1a ldr r3, [pc, #104] @ (800bd4c <RCCEx_PLL2_Config+0x15c>)
  27292. 800bce2: 6adb ldr r3, [r3, #44] @ 0x2c
  27293. 800bce4: 4a19 ldr r2, [pc, #100] @ (800bd4c <RCCEx_PLL2_Config+0x15c>)
  27294. 800bce6: f443 2300 orr.w r3, r3, #524288 @ 0x80000
  27295. 800bcea: 62d3 str r3, [r2, #44] @ 0x2c
  27296. 800bcec: e00f b.n 800bd0e <RCCEx_PLL2_Config+0x11e>
  27297. }
  27298. else if (Divider == DIVIDER_Q_UPDATE)
  27299. 800bcee: 683b ldr r3, [r7, #0]
  27300. 800bcf0: 2b01 cmp r3, #1
  27301. 800bcf2: d106 bne.n 800bd02 <RCCEx_PLL2_Config+0x112>
  27302. {
  27303. __HAL_RCC_PLL2CLKOUT_ENABLE(RCC_PLL2_DIVQ);
  27304. 800bcf4: 4b15 ldr r3, [pc, #84] @ (800bd4c <RCCEx_PLL2_Config+0x15c>)
  27305. 800bcf6: 6adb ldr r3, [r3, #44] @ 0x2c
  27306. 800bcf8: 4a14 ldr r2, [pc, #80] @ (800bd4c <RCCEx_PLL2_Config+0x15c>)
  27307. 800bcfa: f443 1380 orr.w r3, r3, #1048576 @ 0x100000
  27308. 800bcfe: 62d3 str r3, [r2, #44] @ 0x2c
  27309. 800bd00: e005 b.n 800bd0e <RCCEx_PLL2_Config+0x11e>
  27310. }
  27311. else
  27312. {
  27313. __HAL_RCC_PLL2CLKOUT_ENABLE(RCC_PLL2_DIVR);
  27314. 800bd02: 4b12 ldr r3, [pc, #72] @ (800bd4c <RCCEx_PLL2_Config+0x15c>)
  27315. 800bd04: 6adb ldr r3, [r3, #44] @ 0x2c
  27316. 800bd06: 4a11 ldr r2, [pc, #68] @ (800bd4c <RCCEx_PLL2_Config+0x15c>)
  27317. 800bd08: f443 1300 orr.w r3, r3, #2097152 @ 0x200000
  27318. 800bd0c: 62d3 str r3, [r2, #44] @ 0x2c
  27319. }
  27320. /* Enable PLL2. */
  27321. __HAL_RCC_PLL2_ENABLE();
  27322. 800bd0e: 4b0f ldr r3, [pc, #60] @ (800bd4c <RCCEx_PLL2_Config+0x15c>)
  27323. 800bd10: 681b ldr r3, [r3, #0]
  27324. 800bd12: 4a0e ldr r2, [pc, #56] @ (800bd4c <RCCEx_PLL2_Config+0x15c>)
  27325. 800bd14: f043 6380 orr.w r3, r3, #67108864 @ 0x4000000
  27326. 800bd18: 6013 str r3, [r2, #0]
  27327. /* Get Start Tick*/
  27328. tickstart = HAL_GetTick();
  27329. 800bd1a: f7f7 fbd3 bl 80034c4 <HAL_GetTick>
  27330. 800bd1e: 60b8 str r0, [r7, #8]
  27331. /* Wait till PLL2 is ready */
  27332. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) == 0U)
  27333. 800bd20: e008 b.n 800bd34 <RCCEx_PLL2_Config+0x144>
  27334. {
  27335. if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE)
  27336. 800bd22: f7f7 fbcf bl 80034c4 <HAL_GetTick>
  27337. 800bd26: 4602 mov r2, r0
  27338. 800bd28: 68bb ldr r3, [r7, #8]
  27339. 800bd2a: 1ad3 subs r3, r2, r3
  27340. 800bd2c: 2b02 cmp r3, #2
  27341. 800bd2e: d901 bls.n 800bd34 <RCCEx_PLL2_Config+0x144>
  27342. {
  27343. return HAL_TIMEOUT;
  27344. 800bd30: 2303 movs r3, #3
  27345. 800bd32: e006 b.n 800bd42 <RCCEx_PLL2_Config+0x152>
  27346. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) == 0U)
  27347. 800bd34: 4b05 ldr r3, [pc, #20] @ (800bd4c <RCCEx_PLL2_Config+0x15c>)
  27348. 800bd36: 681b ldr r3, [r3, #0]
  27349. 800bd38: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
  27350. 800bd3c: 2b00 cmp r3, #0
  27351. 800bd3e: d0f0 beq.n 800bd22 <RCCEx_PLL2_Config+0x132>
  27352. }
  27353. }
  27354. return status;
  27355. 800bd40: 7bfb ldrb r3, [r7, #15]
  27356. }
  27357. 800bd42: 4618 mov r0, r3
  27358. 800bd44: 3710 adds r7, #16
  27359. 800bd46: 46bd mov sp, r7
  27360. 800bd48: bd80 pop {r7, pc}
  27361. 800bd4a: bf00 nop
  27362. 800bd4c: 58024400 .word 0x58024400
  27363. 800bd50: ffff0007 .word 0xffff0007
  27364. 0800bd54 <RCCEx_PLL3_Config>:
  27365. * @note PLL3 is temporary disabled to apply new parameters
  27366. *
  27367. * @retval HAL status
  27368. */
  27369. static HAL_StatusTypeDef RCCEx_PLL3_Config(RCC_PLL3InitTypeDef *pll3, uint32_t Divider)
  27370. {
  27371. 800bd54: b580 push {r7, lr}
  27372. 800bd56: b084 sub sp, #16
  27373. 800bd58: af00 add r7, sp, #0
  27374. 800bd5a: 6078 str r0, [r7, #4]
  27375. 800bd5c: 6039 str r1, [r7, #0]
  27376. uint32_t tickstart;
  27377. HAL_StatusTypeDef status = HAL_OK;
  27378. 800bd5e: 2300 movs r3, #0
  27379. 800bd60: 73fb strb r3, [r7, #15]
  27380. assert_param(IS_RCC_PLL3RGE_VALUE(pll3->PLL3RGE));
  27381. assert_param(IS_RCC_PLL3VCO_VALUE(pll3->PLL3VCOSEL));
  27382. assert_param(IS_RCC_PLLFRACN_VALUE(pll3->PLL3FRACN));
  27383. /* Check that PLL3 OSC clock source is already set */
  27384. if (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_NONE)
  27385. 800bd62: 4b53 ldr r3, [pc, #332] @ (800beb0 <RCCEx_PLL3_Config+0x15c>)
  27386. 800bd64: 6a9b ldr r3, [r3, #40] @ 0x28
  27387. 800bd66: f003 0303 and.w r3, r3, #3
  27388. 800bd6a: 2b03 cmp r3, #3
  27389. 800bd6c: d101 bne.n 800bd72 <RCCEx_PLL3_Config+0x1e>
  27390. {
  27391. return HAL_ERROR;
  27392. 800bd6e: 2301 movs r3, #1
  27393. 800bd70: e099 b.n 800bea6 <RCCEx_PLL3_Config+0x152>
  27394. else
  27395. {
  27396. /* Disable PLL3. */
  27397. __HAL_RCC_PLL3_DISABLE();
  27398. 800bd72: 4b4f ldr r3, [pc, #316] @ (800beb0 <RCCEx_PLL3_Config+0x15c>)
  27399. 800bd74: 681b ldr r3, [r3, #0]
  27400. 800bd76: 4a4e ldr r2, [pc, #312] @ (800beb0 <RCCEx_PLL3_Config+0x15c>)
  27401. 800bd78: f023 5380 bic.w r3, r3, #268435456 @ 0x10000000
  27402. 800bd7c: 6013 str r3, [r2, #0]
  27403. /* Get Start Tick*/
  27404. tickstart = HAL_GetTick();
  27405. 800bd7e: f7f7 fba1 bl 80034c4 <HAL_GetTick>
  27406. 800bd82: 60b8 str r0, [r7, #8]
  27407. /* Wait till PLL3 is ready */
  27408. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL3RDY) != 0U)
  27409. 800bd84: e008 b.n 800bd98 <RCCEx_PLL3_Config+0x44>
  27410. {
  27411. if ((HAL_GetTick() - tickstart) > PLL3_TIMEOUT_VALUE)
  27412. 800bd86: f7f7 fb9d bl 80034c4 <HAL_GetTick>
  27413. 800bd8a: 4602 mov r2, r0
  27414. 800bd8c: 68bb ldr r3, [r7, #8]
  27415. 800bd8e: 1ad3 subs r3, r2, r3
  27416. 800bd90: 2b02 cmp r3, #2
  27417. 800bd92: d901 bls.n 800bd98 <RCCEx_PLL3_Config+0x44>
  27418. {
  27419. return HAL_TIMEOUT;
  27420. 800bd94: 2303 movs r3, #3
  27421. 800bd96: e086 b.n 800bea6 <RCCEx_PLL3_Config+0x152>
  27422. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL3RDY) != 0U)
  27423. 800bd98: 4b45 ldr r3, [pc, #276] @ (800beb0 <RCCEx_PLL3_Config+0x15c>)
  27424. 800bd9a: 681b ldr r3, [r3, #0]
  27425. 800bd9c: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  27426. 800bda0: 2b00 cmp r3, #0
  27427. 800bda2: d1f0 bne.n 800bd86 <RCCEx_PLL3_Config+0x32>
  27428. }
  27429. }
  27430. /* Configure the PLL3 multiplication and division factors. */
  27431. __HAL_RCC_PLL3_CONFIG(pll3->PLL3M,
  27432. 800bda4: 4b42 ldr r3, [pc, #264] @ (800beb0 <RCCEx_PLL3_Config+0x15c>)
  27433. 800bda6: 6a9b ldr r3, [r3, #40] @ 0x28
  27434. 800bda8: f023 727c bic.w r2, r3, #66060288 @ 0x3f00000
  27435. 800bdac: 687b ldr r3, [r7, #4]
  27436. 800bdae: 681b ldr r3, [r3, #0]
  27437. 800bdb0: 051b lsls r3, r3, #20
  27438. 800bdb2: 493f ldr r1, [pc, #252] @ (800beb0 <RCCEx_PLL3_Config+0x15c>)
  27439. 800bdb4: 4313 orrs r3, r2
  27440. 800bdb6: 628b str r3, [r1, #40] @ 0x28
  27441. 800bdb8: 687b ldr r3, [r7, #4]
  27442. 800bdba: 685b ldr r3, [r3, #4]
  27443. 800bdbc: 3b01 subs r3, #1
  27444. 800bdbe: f3c3 0208 ubfx r2, r3, #0, #9
  27445. 800bdc2: 687b ldr r3, [r7, #4]
  27446. 800bdc4: 689b ldr r3, [r3, #8]
  27447. 800bdc6: 3b01 subs r3, #1
  27448. 800bdc8: 025b lsls r3, r3, #9
  27449. 800bdca: b29b uxth r3, r3
  27450. 800bdcc: 431a orrs r2, r3
  27451. 800bdce: 687b ldr r3, [r7, #4]
  27452. 800bdd0: 68db ldr r3, [r3, #12]
  27453. 800bdd2: 3b01 subs r3, #1
  27454. 800bdd4: 041b lsls r3, r3, #16
  27455. 800bdd6: f403 03fe and.w r3, r3, #8323072 @ 0x7f0000
  27456. 800bdda: 431a orrs r2, r3
  27457. 800bddc: 687b ldr r3, [r7, #4]
  27458. 800bdde: 691b ldr r3, [r3, #16]
  27459. 800bde0: 3b01 subs r3, #1
  27460. 800bde2: 061b lsls r3, r3, #24
  27461. 800bde4: f003 43fe and.w r3, r3, #2130706432 @ 0x7f000000
  27462. 800bde8: 4931 ldr r1, [pc, #196] @ (800beb0 <RCCEx_PLL3_Config+0x15c>)
  27463. 800bdea: 4313 orrs r3, r2
  27464. 800bdec: 640b str r3, [r1, #64] @ 0x40
  27465. pll3->PLL3P,
  27466. pll3->PLL3Q,
  27467. pll3->PLL3R);
  27468. /* Select PLL3 input reference frequency range: VCI */
  27469. __HAL_RCC_PLL3_VCIRANGE(pll3->PLL3RGE) ;
  27470. 800bdee: 4b30 ldr r3, [pc, #192] @ (800beb0 <RCCEx_PLL3_Config+0x15c>)
  27471. 800bdf0: 6adb ldr r3, [r3, #44] @ 0x2c
  27472. 800bdf2: f423 6240 bic.w r2, r3, #3072 @ 0xc00
  27473. 800bdf6: 687b ldr r3, [r7, #4]
  27474. 800bdf8: 695b ldr r3, [r3, #20]
  27475. 800bdfa: 492d ldr r1, [pc, #180] @ (800beb0 <RCCEx_PLL3_Config+0x15c>)
  27476. 800bdfc: 4313 orrs r3, r2
  27477. 800bdfe: 62cb str r3, [r1, #44] @ 0x2c
  27478. /* Select PLL3 output frequency range : VCO */
  27479. __HAL_RCC_PLL3_VCORANGE(pll3->PLL3VCOSEL) ;
  27480. 800be00: 4b2b ldr r3, [pc, #172] @ (800beb0 <RCCEx_PLL3_Config+0x15c>)
  27481. 800be02: 6adb ldr r3, [r3, #44] @ 0x2c
  27482. 800be04: f423 7200 bic.w r2, r3, #512 @ 0x200
  27483. 800be08: 687b ldr r3, [r7, #4]
  27484. 800be0a: 699b ldr r3, [r3, #24]
  27485. 800be0c: 4928 ldr r1, [pc, #160] @ (800beb0 <RCCEx_PLL3_Config+0x15c>)
  27486. 800be0e: 4313 orrs r3, r2
  27487. 800be10: 62cb str r3, [r1, #44] @ 0x2c
  27488. /* Disable PLL3FRACN . */
  27489. __HAL_RCC_PLL3FRACN_DISABLE();
  27490. 800be12: 4b27 ldr r3, [pc, #156] @ (800beb0 <RCCEx_PLL3_Config+0x15c>)
  27491. 800be14: 6adb ldr r3, [r3, #44] @ 0x2c
  27492. 800be16: 4a26 ldr r2, [pc, #152] @ (800beb0 <RCCEx_PLL3_Config+0x15c>)
  27493. 800be18: f423 7380 bic.w r3, r3, #256 @ 0x100
  27494. 800be1c: 62d3 str r3, [r2, #44] @ 0x2c
  27495. /* Configures PLL3 clock Fractional Part Of The Multiplication Factor */
  27496. __HAL_RCC_PLL3FRACN_CONFIG(pll3->PLL3FRACN);
  27497. 800be1e: 4b24 ldr r3, [pc, #144] @ (800beb0 <RCCEx_PLL3_Config+0x15c>)
  27498. 800be20: 6c5a ldr r2, [r3, #68] @ 0x44
  27499. 800be22: 4b24 ldr r3, [pc, #144] @ (800beb4 <RCCEx_PLL3_Config+0x160>)
  27500. 800be24: 4013 ands r3, r2
  27501. 800be26: 687a ldr r2, [r7, #4]
  27502. 800be28: 69d2 ldr r2, [r2, #28]
  27503. 800be2a: 00d2 lsls r2, r2, #3
  27504. 800be2c: 4920 ldr r1, [pc, #128] @ (800beb0 <RCCEx_PLL3_Config+0x15c>)
  27505. 800be2e: 4313 orrs r3, r2
  27506. 800be30: 644b str r3, [r1, #68] @ 0x44
  27507. /* Enable PLL3FRACN . */
  27508. __HAL_RCC_PLL3FRACN_ENABLE();
  27509. 800be32: 4b1f ldr r3, [pc, #124] @ (800beb0 <RCCEx_PLL3_Config+0x15c>)
  27510. 800be34: 6adb ldr r3, [r3, #44] @ 0x2c
  27511. 800be36: 4a1e ldr r2, [pc, #120] @ (800beb0 <RCCEx_PLL3_Config+0x15c>)
  27512. 800be38: f443 7380 orr.w r3, r3, #256 @ 0x100
  27513. 800be3c: 62d3 str r3, [r2, #44] @ 0x2c
  27514. /* Enable the PLL3 clock output */
  27515. if (Divider == DIVIDER_P_UPDATE)
  27516. 800be3e: 683b ldr r3, [r7, #0]
  27517. 800be40: 2b00 cmp r3, #0
  27518. 800be42: d106 bne.n 800be52 <RCCEx_PLL3_Config+0xfe>
  27519. {
  27520. __HAL_RCC_PLL3CLKOUT_ENABLE(RCC_PLL3_DIVP);
  27521. 800be44: 4b1a ldr r3, [pc, #104] @ (800beb0 <RCCEx_PLL3_Config+0x15c>)
  27522. 800be46: 6adb ldr r3, [r3, #44] @ 0x2c
  27523. 800be48: 4a19 ldr r2, [pc, #100] @ (800beb0 <RCCEx_PLL3_Config+0x15c>)
  27524. 800be4a: f443 0380 orr.w r3, r3, #4194304 @ 0x400000
  27525. 800be4e: 62d3 str r3, [r2, #44] @ 0x2c
  27526. 800be50: e00f b.n 800be72 <RCCEx_PLL3_Config+0x11e>
  27527. }
  27528. else if (Divider == DIVIDER_Q_UPDATE)
  27529. 800be52: 683b ldr r3, [r7, #0]
  27530. 800be54: 2b01 cmp r3, #1
  27531. 800be56: d106 bne.n 800be66 <RCCEx_PLL3_Config+0x112>
  27532. {
  27533. __HAL_RCC_PLL3CLKOUT_ENABLE(RCC_PLL3_DIVQ);
  27534. 800be58: 4b15 ldr r3, [pc, #84] @ (800beb0 <RCCEx_PLL3_Config+0x15c>)
  27535. 800be5a: 6adb ldr r3, [r3, #44] @ 0x2c
  27536. 800be5c: 4a14 ldr r2, [pc, #80] @ (800beb0 <RCCEx_PLL3_Config+0x15c>)
  27537. 800be5e: f443 0300 orr.w r3, r3, #8388608 @ 0x800000
  27538. 800be62: 62d3 str r3, [r2, #44] @ 0x2c
  27539. 800be64: e005 b.n 800be72 <RCCEx_PLL3_Config+0x11e>
  27540. }
  27541. else
  27542. {
  27543. __HAL_RCC_PLL3CLKOUT_ENABLE(RCC_PLL3_DIVR);
  27544. 800be66: 4b12 ldr r3, [pc, #72] @ (800beb0 <RCCEx_PLL3_Config+0x15c>)
  27545. 800be68: 6adb ldr r3, [r3, #44] @ 0x2c
  27546. 800be6a: 4a11 ldr r2, [pc, #68] @ (800beb0 <RCCEx_PLL3_Config+0x15c>)
  27547. 800be6c: f043 7380 orr.w r3, r3, #16777216 @ 0x1000000
  27548. 800be70: 62d3 str r3, [r2, #44] @ 0x2c
  27549. }
  27550. /* Enable PLL3. */
  27551. __HAL_RCC_PLL3_ENABLE();
  27552. 800be72: 4b0f ldr r3, [pc, #60] @ (800beb0 <RCCEx_PLL3_Config+0x15c>)
  27553. 800be74: 681b ldr r3, [r3, #0]
  27554. 800be76: 4a0e ldr r2, [pc, #56] @ (800beb0 <RCCEx_PLL3_Config+0x15c>)
  27555. 800be78: f043 5380 orr.w r3, r3, #268435456 @ 0x10000000
  27556. 800be7c: 6013 str r3, [r2, #0]
  27557. /* Get Start Tick*/
  27558. tickstart = HAL_GetTick();
  27559. 800be7e: f7f7 fb21 bl 80034c4 <HAL_GetTick>
  27560. 800be82: 60b8 str r0, [r7, #8]
  27561. /* Wait till PLL3 is ready */
  27562. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL3RDY) == 0U)
  27563. 800be84: e008 b.n 800be98 <RCCEx_PLL3_Config+0x144>
  27564. {
  27565. if ((HAL_GetTick() - tickstart) > PLL3_TIMEOUT_VALUE)
  27566. 800be86: f7f7 fb1d bl 80034c4 <HAL_GetTick>
  27567. 800be8a: 4602 mov r2, r0
  27568. 800be8c: 68bb ldr r3, [r7, #8]
  27569. 800be8e: 1ad3 subs r3, r2, r3
  27570. 800be90: 2b02 cmp r3, #2
  27571. 800be92: d901 bls.n 800be98 <RCCEx_PLL3_Config+0x144>
  27572. {
  27573. return HAL_TIMEOUT;
  27574. 800be94: 2303 movs r3, #3
  27575. 800be96: e006 b.n 800bea6 <RCCEx_PLL3_Config+0x152>
  27576. while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL3RDY) == 0U)
  27577. 800be98: 4b05 ldr r3, [pc, #20] @ (800beb0 <RCCEx_PLL3_Config+0x15c>)
  27578. 800be9a: 681b ldr r3, [r3, #0]
  27579. 800be9c: f003 5300 and.w r3, r3, #536870912 @ 0x20000000
  27580. 800bea0: 2b00 cmp r3, #0
  27581. 800bea2: d0f0 beq.n 800be86 <RCCEx_PLL3_Config+0x132>
  27582. }
  27583. }
  27584. return status;
  27585. 800bea4: 7bfb ldrb r3, [r7, #15]
  27586. }
  27587. 800bea6: 4618 mov r0, r3
  27588. 800bea8: 3710 adds r7, #16
  27589. 800beaa: 46bd mov sp, r7
  27590. 800beac: bd80 pop {r7, pc}
  27591. 800beae: bf00 nop
  27592. 800beb0: 58024400 .word 0x58024400
  27593. 800beb4: ffff0007 .word 0xffff0007
  27594. 0800beb8 <HAL_RNG_Init>:
  27595. * @param hrng pointer to a RNG_HandleTypeDef structure that contains
  27596. * the configuration information for RNG.
  27597. * @retval HAL status
  27598. */
  27599. HAL_StatusTypeDef HAL_RNG_Init(RNG_HandleTypeDef *hrng)
  27600. {
  27601. 800beb8: b580 push {r7, lr}
  27602. 800beba: b084 sub sp, #16
  27603. 800bebc: af00 add r7, sp, #0
  27604. 800bebe: 6078 str r0, [r7, #4]
  27605. uint32_t tickstart;
  27606. /* Check the RNG handle allocation */
  27607. if (hrng == NULL)
  27608. 800bec0: 687b ldr r3, [r7, #4]
  27609. 800bec2: 2b00 cmp r3, #0
  27610. 800bec4: d101 bne.n 800beca <HAL_RNG_Init+0x12>
  27611. {
  27612. return HAL_ERROR;
  27613. 800bec6: 2301 movs r3, #1
  27614. 800bec8: e054 b.n 800bf74 <HAL_RNG_Init+0xbc>
  27615. /* Init the low level hardware */
  27616. hrng->MspInitCallback(hrng);
  27617. }
  27618. #else
  27619. if (hrng->State == HAL_RNG_STATE_RESET)
  27620. 800beca: 687b ldr r3, [r7, #4]
  27621. 800becc: 7a5b ldrb r3, [r3, #9]
  27622. 800bece: b2db uxtb r3, r3
  27623. 800bed0: 2b00 cmp r3, #0
  27624. 800bed2: d105 bne.n 800bee0 <HAL_RNG_Init+0x28>
  27625. {
  27626. /* Allocate lock resource and initialize it */
  27627. hrng->Lock = HAL_UNLOCKED;
  27628. 800bed4: 687b ldr r3, [r7, #4]
  27629. 800bed6: 2200 movs r2, #0
  27630. 800bed8: 721a strb r2, [r3, #8]
  27631. /* Init the low level hardware */
  27632. HAL_RNG_MspInit(hrng);
  27633. 800beda: 6878 ldr r0, [r7, #4]
  27634. 800bedc: f7f6 fa00 bl 80022e0 <HAL_RNG_MspInit>
  27635. }
  27636. #endif /* USE_HAL_RNG_REGISTER_CALLBACKS */
  27637. /* Change RNG peripheral state */
  27638. hrng->State = HAL_RNG_STATE_BUSY;
  27639. 800bee0: 687b ldr r3, [r7, #4]
  27640. 800bee2: 2202 movs r2, #2
  27641. 800bee4: 725a strb r2, [r3, #9]
  27642. }
  27643. }
  27644. }
  27645. #else
  27646. /* Clock Error Detection Configuration */
  27647. MODIFY_REG(hrng->Instance->CR, RNG_CR_CED, hrng->Init.ClockErrorDetection);
  27648. 800bee6: 687b ldr r3, [r7, #4]
  27649. 800bee8: 681b ldr r3, [r3, #0]
  27650. 800beea: 681b ldr r3, [r3, #0]
  27651. 800beec: f023 0120 bic.w r1, r3, #32
  27652. 800bef0: 687b ldr r3, [r7, #4]
  27653. 800bef2: 685a ldr r2, [r3, #4]
  27654. 800bef4: 687b ldr r3, [r7, #4]
  27655. 800bef6: 681b ldr r3, [r3, #0]
  27656. 800bef8: 430a orrs r2, r1
  27657. 800befa: 601a str r2, [r3, #0]
  27658. #endif /* RNG_CR_CONDRST */
  27659. /* Enable the RNG Peripheral */
  27660. __HAL_RNG_ENABLE(hrng);
  27661. 800befc: 687b ldr r3, [r7, #4]
  27662. 800befe: 681b ldr r3, [r3, #0]
  27663. 800bf00: 681a ldr r2, [r3, #0]
  27664. 800bf02: 687b ldr r3, [r7, #4]
  27665. 800bf04: 681b ldr r3, [r3, #0]
  27666. 800bf06: f042 0204 orr.w r2, r2, #4
  27667. 800bf0a: 601a str r2, [r3, #0]
  27668. /* verify that no seed error */
  27669. if (__HAL_RNG_GET_IT(hrng, RNG_IT_SEI) != RESET)
  27670. 800bf0c: 687b ldr r3, [r7, #4]
  27671. 800bf0e: 681b ldr r3, [r3, #0]
  27672. 800bf10: 685b ldr r3, [r3, #4]
  27673. 800bf12: f003 0340 and.w r3, r3, #64 @ 0x40
  27674. 800bf16: 2b40 cmp r3, #64 @ 0x40
  27675. 800bf18: d104 bne.n 800bf24 <HAL_RNG_Init+0x6c>
  27676. {
  27677. hrng->State = HAL_RNG_STATE_ERROR;
  27678. 800bf1a: 687b ldr r3, [r7, #4]
  27679. 800bf1c: 2204 movs r2, #4
  27680. 800bf1e: 725a strb r2, [r3, #9]
  27681. return HAL_ERROR;
  27682. 800bf20: 2301 movs r3, #1
  27683. 800bf22: e027 b.n 800bf74 <HAL_RNG_Init+0xbc>
  27684. }
  27685. /* Get tick */
  27686. tickstart = HAL_GetTick();
  27687. 800bf24: f7f7 face bl 80034c4 <HAL_GetTick>
  27688. 800bf28: 60f8 str r0, [r7, #12]
  27689. /* Check if data register contains valid random data */
  27690. while (__HAL_RNG_GET_FLAG(hrng, RNG_FLAG_SECS) != RESET)
  27691. 800bf2a: e015 b.n 800bf58 <HAL_RNG_Init+0xa0>
  27692. {
  27693. if ((HAL_GetTick() - tickstart) > RNG_TIMEOUT_VALUE)
  27694. 800bf2c: f7f7 faca bl 80034c4 <HAL_GetTick>
  27695. 800bf30: 4602 mov r2, r0
  27696. 800bf32: 68fb ldr r3, [r7, #12]
  27697. 800bf34: 1ad3 subs r3, r2, r3
  27698. 800bf36: 2b02 cmp r3, #2
  27699. 800bf38: d90e bls.n 800bf58 <HAL_RNG_Init+0xa0>
  27700. {
  27701. /* New check to avoid false timeout detection in case of preemption */
  27702. if (__HAL_RNG_GET_FLAG(hrng, RNG_FLAG_SECS) != RESET)
  27703. 800bf3a: 687b ldr r3, [r7, #4]
  27704. 800bf3c: 681b ldr r3, [r3, #0]
  27705. 800bf3e: 685b ldr r3, [r3, #4]
  27706. 800bf40: f003 0304 and.w r3, r3, #4
  27707. 800bf44: 2b04 cmp r3, #4
  27708. 800bf46: d107 bne.n 800bf58 <HAL_RNG_Init+0xa0>
  27709. {
  27710. hrng->State = HAL_RNG_STATE_ERROR;
  27711. 800bf48: 687b ldr r3, [r7, #4]
  27712. 800bf4a: 2204 movs r2, #4
  27713. 800bf4c: 725a strb r2, [r3, #9]
  27714. hrng->ErrorCode = HAL_RNG_ERROR_TIMEOUT;
  27715. 800bf4e: 687b ldr r3, [r7, #4]
  27716. 800bf50: 2202 movs r2, #2
  27717. 800bf52: 60da str r2, [r3, #12]
  27718. return HAL_ERROR;
  27719. 800bf54: 2301 movs r3, #1
  27720. 800bf56: e00d b.n 800bf74 <HAL_RNG_Init+0xbc>
  27721. while (__HAL_RNG_GET_FLAG(hrng, RNG_FLAG_SECS) != RESET)
  27722. 800bf58: 687b ldr r3, [r7, #4]
  27723. 800bf5a: 681b ldr r3, [r3, #0]
  27724. 800bf5c: 685b ldr r3, [r3, #4]
  27725. 800bf5e: f003 0304 and.w r3, r3, #4
  27726. 800bf62: 2b04 cmp r3, #4
  27727. 800bf64: d0e2 beq.n 800bf2c <HAL_RNG_Init+0x74>
  27728. }
  27729. }
  27730. }
  27731. /* Initialize the RNG state */
  27732. hrng->State = HAL_RNG_STATE_READY;
  27733. 800bf66: 687b ldr r3, [r7, #4]
  27734. 800bf68: 2201 movs r2, #1
  27735. 800bf6a: 725a strb r2, [r3, #9]
  27736. /* Initialise the error code */
  27737. hrng->ErrorCode = HAL_RNG_ERROR_NONE;
  27738. 800bf6c: 687b ldr r3, [r7, #4]
  27739. 800bf6e: 2200 movs r2, #0
  27740. 800bf70: 60da str r2, [r3, #12]
  27741. /* Return function status */
  27742. return HAL_OK;
  27743. 800bf72: 2300 movs r3, #0
  27744. }
  27745. 800bf74: 4618 mov r0, r3
  27746. 800bf76: 3710 adds r7, #16
  27747. 800bf78: 46bd mov sp, r7
  27748. 800bf7a: bd80 pop {r7, pc}
  27749. 0800bf7c <HAL_TIM_Base_Init>:
  27750. * Ex: call @ref HAL_TIM_Base_DeInit() before HAL_TIM_Base_Init()
  27751. * @param htim TIM Base handle
  27752. * @retval HAL status
  27753. */
  27754. HAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim)
  27755. {
  27756. 800bf7c: b580 push {r7, lr}
  27757. 800bf7e: b082 sub sp, #8
  27758. 800bf80: af00 add r7, sp, #0
  27759. 800bf82: 6078 str r0, [r7, #4]
  27760. /* Check the TIM handle allocation */
  27761. if (htim == NULL)
  27762. 800bf84: 687b ldr r3, [r7, #4]
  27763. 800bf86: 2b00 cmp r3, #0
  27764. 800bf88: d101 bne.n 800bf8e <HAL_TIM_Base_Init+0x12>
  27765. {
  27766. return HAL_ERROR;
  27767. 800bf8a: 2301 movs r3, #1
  27768. 800bf8c: e049 b.n 800c022 <HAL_TIM_Base_Init+0xa6>
  27769. assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));
  27770. assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));
  27771. assert_param(IS_TIM_PERIOD(htim, htim->Init.Period));
  27772. assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));
  27773. if (htim->State == HAL_TIM_STATE_RESET)
  27774. 800bf8e: 687b ldr r3, [r7, #4]
  27775. 800bf90: f893 303d ldrb.w r3, [r3, #61] @ 0x3d
  27776. 800bf94: b2db uxtb r3, r3
  27777. 800bf96: 2b00 cmp r3, #0
  27778. 800bf98: d106 bne.n 800bfa8 <HAL_TIM_Base_Init+0x2c>
  27779. {
  27780. /* Allocate lock resource and initialize it */
  27781. htim->Lock = HAL_UNLOCKED;
  27782. 800bf9a: 687b ldr r3, [r7, #4]
  27783. 800bf9c: 2200 movs r2, #0
  27784. 800bf9e: f883 203c strb.w r2, [r3, #60] @ 0x3c
  27785. }
  27786. /* Init the low level hardware : GPIO, CLOCK, NVIC */
  27787. htim->Base_MspInitCallback(htim);
  27788. #else
  27789. /* Init the low level hardware : GPIO, CLOCK, NVIC */
  27790. HAL_TIM_Base_MspInit(htim);
  27791. 800bfa2: 6878 ldr r0, [r7, #4]
  27792. 800bfa4: f7f6 f9d6 bl 8002354 <HAL_TIM_Base_MspInit>
  27793. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  27794. }
  27795. /* Set the TIM state */
  27796. htim->State = HAL_TIM_STATE_BUSY;
  27797. 800bfa8: 687b ldr r3, [r7, #4]
  27798. 800bfaa: 2202 movs r2, #2
  27799. 800bfac: f883 203d strb.w r2, [r3, #61] @ 0x3d
  27800. /* Set the Time Base configuration */
  27801. TIM_Base_SetConfig(htim->Instance, &htim->Init);
  27802. 800bfb0: 687b ldr r3, [r7, #4]
  27803. 800bfb2: 681a ldr r2, [r3, #0]
  27804. 800bfb4: 687b ldr r3, [r7, #4]
  27805. 800bfb6: 3304 adds r3, #4
  27806. 800bfb8: 4619 mov r1, r3
  27807. 800bfba: 4610 mov r0, r2
  27808. 800bfbc: f000 fb46 bl 800c64c <TIM_Base_SetConfig>
  27809. /* Initialize the DMA burst operation state */
  27810. htim->DMABurstState = HAL_DMA_BURST_STATE_READY;
  27811. 800bfc0: 687b ldr r3, [r7, #4]
  27812. 800bfc2: 2201 movs r2, #1
  27813. 800bfc4: f883 2048 strb.w r2, [r3, #72] @ 0x48
  27814. /* Initialize the TIM channels state */
  27815. TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);
  27816. 800bfc8: 687b ldr r3, [r7, #4]
  27817. 800bfca: 2201 movs r2, #1
  27818. 800bfcc: f883 203e strb.w r2, [r3, #62] @ 0x3e
  27819. 800bfd0: 687b ldr r3, [r7, #4]
  27820. 800bfd2: 2201 movs r2, #1
  27821. 800bfd4: f883 203f strb.w r2, [r3, #63] @ 0x3f
  27822. 800bfd8: 687b ldr r3, [r7, #4]
  27823. 800bfda: 2201 movs r2, #1
  27824. 800bfdc: f883 2040 strb.w r2, [r3, #64] @ 0x40
  27825. 800bfe0: 687b ldr r3, [r7, #4]
  27826. 800bfe2: 2201 movs r2, #1
  27827. 800bfe4: f883 2041 strb.w r2, [r3, #65] @ 0x41
  27828. 800bfe8: 687b ldr r3, [r7, #4]
  27829. 800bfea: 2201 movs r2, #1
  27830. 800bfec: f883 2042 strb.w r2, [r3, #66] @ 0x42
  27831. 800bff0: 687b ldr r3, [r7, #4]
  27832. 800bff2: 2201 movs r2, #1
  27833. 800bff4: f883 2043 strb.w r2, [r3, #67] @ 0x43
  27834. TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);
  27835. 800bff8: 687b ldr r3, [r7, #4]
  27836. 800bffa: 2201 movs r2, #1
  27837. 800bffc: f883 2044 strb.w r2, [r3, #68] @ 0x44
  27838. 800c000: 687b ldr r3, [r7, #4]
  27839. 800c002: 2201 movs r2, #1
  27840. 800c004: f883 2045 strb.w r2, [r3, #69] @ 0x45
  27841. 800c008: 687b ldr r3, [r7, #4]
  27842. 800c00a: 2201 movs r2, #1
  27843. 800c00c: f883 2046 strb.w r2, [r3, #70] @ 0x46
  27844. 800c010: 687b ldr r3, [r7, #4]
  27845. 800c012: 2201 movs r2, #1
  27846. 800c014: f883 2047 strb.w r2, [r3, #71] @ 0x47
  27847. /* Initialize the TIM state*/
  27848. htim->State = HAL_TIM_STATE_READY;
  27849. 800c018: 687b ldr r3, [r7, #4]
  27850. 800c01a: 2201 movs r2, #1
  27851. 800c01c: f883 203d strb.w r2, [r3, #61] @ 0x3d
  27852. return HAL_OK;
  27853. 800c020: 2300 movs r3, #0
  27854. }
  27855. 800c022: 4618 mov r0, r3
  27856. 800c024: 3708 adds r7, #8
  27857. 800c026: 46bd mov sp, r7
  27858. 800c028: bd80 pop {r7, pc}
  27859. ...
  27860. 0800c02c <HAL_TIM_Base_Start>:
  27861. * @brief Starts the TIM Base generation.
  27862. * @param htim TIM Base handle
  27863. * @retval HAL status
  27864. */
  27865. HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim)
  27866. {
  27867. 800c02c: b480 push {r7}
  27868. 800c02e: b085 sub sp, #20
  27869. 800c030: af00 add r7, sp, #0
  27870. 800c032: 6078 str r0, [r7, #4]
  27871. /* Check the parameters */
  27872. assert_param(IS_TIM_INSTANCE(htim->Instance));
  27873. /* Check the TIM state */
  27874. if (htim->State != HAL_TIM_STATE_READY)
  27875. 800c034: 687b ldr r3, [r7, #4]
  27876. 800c036: f893 303d ldrb.w r3, [r3, #61] @ 0x3d
  27877. 800c03a: b2db uxtb r3, r3
  27878. 800c03c: 2b01 cmp r3, #1
  27879. 800c03e: d001 beq.n 800c044 <HAL_TIM_Base_Start+0x18>
  27880. {
  27881. return HAL_ERROR;
  27882. 800c040: 2301 movs r3, #1
  27883. 800c042: e04c b.n 800c0de <HAL_TIM_Base_Start+0xb2>
  27884. }
  27885. /* Set the TIM state */
  27886. htim->State = HAL_TIM_STATE_BUSY;
  27887. 800c044: 687b ldr r3, [r7, #4]
  27888. 800c046: 2202 movs r2, #2
  27889. 800c048: f883 203d strb.w r2, [r3, #61] @ 0x3d
  27890. /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */
  27891. if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
  27892. 800c04c: 687b ldr r3, [r7, #4]
  27893. 800c04e: 681b ldr r3, [r3, #0]
  27894. 800c050: 4a26 ldr r2, [pc, #152] @ (800c0ec <HAL_TIM_Base_Start+0xc0>)
  27895. 800c052: 4293 cmp r3, r2
  27896. 800c054: d022 beq.n 800c09c <HAL_TIM_Base_Start+0x70>
  27897. 800c056: 687b ldr r3, [r7, #4]
  27898. 800c058: 681b ldr r3, [r3, #0]
  27899. 800c05a: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  27900. 800c05e: d01d beq.n 800c09c <HAL_TIM_Base_Start+0x70>
  27901. 800c060: 687b ldr r3, [r7, #4]
  27902. 800c062: 681b ldr r3, [r3, #0]
  27903. 800c064: 4a22 ldr r2, [pc, #136] @ (800c0f0 <HAL_TIM_Base_Start+0xc4>)
  27904. 800c066: 4293 cmp r3, r2
  27905. 800c068: d018 beq.n 800c09c <HAL_TIM_Base_Start+0x70>
  27906. 800c06a: 687b ldr r3, [r7, #4]
  27907. 800c06c: 681b ldr r3, [r3, #0]
  27908. 800c06e: 4a21 ldr r2, [pc, #132] @ (800c0f4 <HAL_TIM_Base_Start+0xc8>)
  27909. 800c070: 4293 cmp r3, r2
  27910. 800c072: d013 beq.n 800c09c <HAL_TIM_Base_Start+0x70>
  27911. 800c074: 687b ldr r3, [r7, #4]
  27912. 800c076: 681b ldr r3, [r3, #0]
  27913. 800c078: 4a1f ldr r2, [pc, #124] @ (800c0f8 <HAL_TIM_Base_Start+0xcc>)
  27914. 800c07a: 4293 cmp r3, r2
  27915. 800c07c: d00e beq.n 800c09c <HAL_TIM_Base_Start+0x70>
  27916. 800c07e: 687b ldr r3, [r7, #4]
  27917. 800c080: 681b ldr r3, [r3, #0]
  27918. 800c082: 4a1e ldr r2, [pc, #120] @ (800c0fc <HAL_TIM_Base_Start+0xd0>)
  27919. 800c084: 4293 cmp r3, r2
  27920. 800c086: d009 beq.n 800c09c <HAL_TIM_Base_Start+0x70>
  27921. 800c088: 687b ldr r3, [r7, #4]
  27922. 800c08a: 681b ldr r3, [r3, #0]
  27923. 800c08c: 4a1c ldr r2, [pc, #112] @ (800c100 <HAL_TIM_Base_Start+0xd4>)
  27924. 800c08e: 4293 cmp r3, r2
  27925. 800c090: d004 beq.n 800c09c <HAL_TIM_Base_Start+0x70>
  27926. 800c092: 687b ldr r3, [r7, #4]
  27927. 800c094: 681b ldr r3, [r3, #0]
  27928. 800c096: 4a1b ldr r2, [pc, #108] @ (800c104 <HAL_TIM_Base_Start+0xd8>)
  27929. 800c098: 4293 cmp r3, r2
  27930. 800c09a: d115 bne.n 800c0c8 <HAL_TIM_Base_Start+0x9c>
  27931. {
  27932. tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
  27933. 800c09c: 687b ldr r3, [r7, #4]
  27934. 800c09e: 681b ldr r3, [r3, #0]
  27935. 800c0a0: 689a ldr r2, [r3, #8]
  27936. 800c0a2: 4b19 ldr r3, [pc, #100] @ (800c108 <HAL_TIM_Base_Start+0xdc>)
  27937. 800c0a4: 4013 ands r3, r2
  27938. 800c0a6: 60fb str r3, [r7, #12]
  27939. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  27940. 800c0a8: 68fb ldr r3, [r7, #12]
  27941. 800c0aa: 2b06 cmp r3, #6
  27942. 800c0ac: d015 beq.n 800c0da <HAL_TIM_Base_Start+0xae>
  27943. 800c0ae: 68fb ldr r3, [r7, #12]
  27944. 800c0b0: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  27945. 800c0b4: d011 beq.n 800c0da <HAL_TIM_Base_Start+0xae>
  27946. {
  27947. __HAL_TIM_ENABLE(htim);
  27948. 800c0b6: 687b ldr r3, [r7, #4]
  27949. 800c0b8: 681b ldr r3, [r3, #0]
  27950. 800c0ba: 681a ldr r2, [r3, #0]
  27951. 800c0bc: 687b ldr r3, [r7, #4]
  27952. 800c0be: 681b ldr r3, [r3, #0]
  27953. 800c0c0: f042 0201 orr.w r2, r2, #1
  27954. 800c0c4: 601a str r2, [r3, #0]
  27955. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  27956. 800c0c6: e008 b.n 800c0da <HAL_TIM_Base_Start+0xae>
  27957. }
  27958. }
  27959. else
  27960. {
  27961. __HAL_TIM_ENABLE(htim);
  27962. 800c0c8: 687b ldr r3, [r7, #4]
  27963. 800c0ca: 681b ldr r3, [r3, #0]
  27964. 800c0cc: 681a ldr r2, [r3, #0]
  27965. 800c0ce: 687b ldr r3, [r7, #4]
  27966. 800c0d0: 681b ldr r3, [r3, #0]
  27967. 800c0d2: f042 0201 orr.w r2, r2, #1
  27968. 800c0d6: 601a str r2, [r3, #0]
  27969. 800c0d8: e000 b.n 800c0dc <HAL_TIM_Base_Start+0xb0>
  27970. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  27971. 800c0da: bf00 nop
  27972. }
  27973. /* Return function status */
  27974. return HAL_OK;
  27975. 800c0dc: 2300 movs r3, #0
  27976. }
  27977. 800c0de: 4618 mov r0, r3
  27978. 800c0e0: 3714 adds r7, #20
  27979. 800c0e2: 46bd mov sp, r7
  27980. 800c0e4: f85d 7b04 ldr.w r7, [sp], #4
  27981. 800c0e8: 4770 bx lr
  27982. 800c0ea: bf00 nop
  27983. 800c0ec: 40010000 .word 0x40010000
  27984. 800c0f0: 40000400 .word 0x40000400
  27985. 800c0f4: 40000800 .word 0x40000800
  27986. 800c0f8: 40000c00 .word 0x40000c00
  27987. 800c0fc: 40010400 .word 0x40010400
  27988. 800c100: 40001800 .word 0x40001800
  27989. 800c104: 40014000 .word 0x40014000
  27990. 800c108: 00010007 .word 0x00010007
  27991. 0800c10c <HAL_TIM_Base_Start_IT>:
  27992. * @brief Starts the TIM Base generation in interrupt mode.
  27993. * @param htim TIM Base handle
  27994. * @retval HAL status
  27995. */
  27996. HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim)
  27997. {
  27998. 800c10c: b480 push {r7}
  27999. 800c10e: b085 sub sp, #20
  28000. 800c110: af00 add r7, sp, #0
  28001. 800c112: 6078 str r0, [r7, #4]
  28002. /* Check the parameters */
  28003. assert_param(IS_TIM_INSTANCE(htim->Instance));
  28004. /* Check the TIM state */
  28005. if (htim->State != HAL_TIM_STATE_READY)
  28006. 800c114: 687b ldr r3, [r7, #4]
  28007. 800c116: f893 303d ldrb.w r3, [r3, #61] @ 0x3d
  28008. 800c11a: b2db uxtb r3, r3
  28009. 800c11c: 2b01 cmp r3, #1
  28010. 800c11e: d001 beq.n 800c124 <HAL_TIM_Base_Start_IT+0x18>
  28011. {
  28012. return HAL_ERROR;
  28013. 800c120: 2301 movs r3, #1
  28014. 800c122: e054 b.n 800c1ce <HAL_TIM_Base_Start_IT+0xc2>
  28015. }
  28016. /* Set the TIM state */
  28017. htim->State = HAL_TIM_STATE_BUSY;
  28018. 800c124: 687b ldr r3, [r7, #4]
  28019. 800c126: 2202 movs r2, #2
  28020. 800c128: f883 203d strb.w r2, [r3, #61] @ 0x3d
  28021. /* Enable the TIM Update interrupt */
  28022. __HAL_TIM_ENABLE_IT(htim, TIM_IT_UPDATE);
  28023. 800c12c: 687b ldr r3, [r7, #4]
  28024. 800c12e: 681b ldr r3, [r3, #0]
  28025. 800c130: 68da ldr r2, [r3, #12]
  28026. 800c132: 687b ldr r3, [r7, #4]
  28027. 800c134: 681b ldr r3, [r3, #0]
  28028. 800c136: f042 0201 orr.w r2, r2, #1
  28029. 800c13a: 60da str r2, [r3, #12]
  28030. /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */
  28031. if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
  28032. 800c13c: 687b ldr r3, [r7, #4]
  28033. 800c13e: 681b ldr r3, [r3, #0]
  28034. 800c140: 4a26 ldr r2, [pc, #152] @ (800c1dc <HAL_TIM_Base_Start_IT+0xd0>)
  28035. 800c142: 4293 cmp r3, r2
  28036. 800c144: d022 beq.n 800c18c <HAL_TIM_Base_Start_IT+0x80>
  28037. 800c146: 687b ldr r3, [r7, #4]
  28038. 800c148: 681b ldr r3, [r3, #0]
  28039. 800c14a: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  28040. 800c14e: d01d beq.n 800c18c <HAL_TIM_Base_Start_IT+0x80>
  28041. 800c150: 687b ldr r3, [r7, #4]
  28042. 800c152: 681b ldr r3, [r3, #0]
  28043. 800c154: 4a22 ldr r2, [pc, #136] @ (800c1e0 <HAL_TIM_Base_Start_IT+0xd4>)
  28044. 800c156: 4293 cmp r3, r2
  28045. 800c158: d018 beq.n 800c18c <HAL_TIM_Base_Start_IT+0x80>
  28046. 800c15a: 687b ldr r3, [r7, #4]
  28047. 800c15c: 681b ldr r3, [r3, #0]
  28048. 800c15e: 4a21 ldr r2, [pc, #132] @ (800c1e4 <HAL_TIM_Base_Start_IT+0xd8>)
  28049. 800c160: 4293 cmp r3, r2
  28050. 800c162: d013 beq.n 800c18c <HAL_TIM_Base_Start_IT+0x80>
  28051. 800c164: 687b ldr r3, [r7, #4]
  28052. 800c166: 681b ldr r3, [r3, #0]
  28053. 800c168: 4a1f ldr r2, [pc, #124] @ (800c1e8 <HAL_TIM_Base_Start_IT+0xdc>)
  28054. 800c16a: 4293 cmp r3, r2
  28055. 800c16c: d00e beq.n 800c18c <HAL_TIM_Base_Start_IT+0x80>
  28056. 800c16e: 687b ldr r3, [r7, #4]
  28057. 800c170: 681b ldr r3, [r3, #0]
  28058. 800c172: 4a1e ldr r2, [pc, #120] @ (800c1ec <HAL_TIM_Base_Start_IT+0xe0>)
  28059. 800c174: 4293 cmp r3, r2
  28060. 800c176: d009 beq.n 800c18c <HAL_TIM_Base_Start_IT+0x80>
  28061. 800c178: 687b ldr r3, [r7, #4]
  28062. 800c17a: 681b ldr r3, [r3, #0]
  28063. 800c17c: 4a1c ldr r2, [pc, #112] @ (800c1f0 <HAL_TIM_Base_Start_IT+0xe4>)
  28064. 800c17e: 4293 cmp r3, r2
  28065. 800c180: d004 beq.n 800c18c <HAL_TIM_Base_Start_IT+0x80>
  28066. 800c182: 687b ldr r3, [r7, #4]
  28067. 800c184: 681b ldr r3, [r3, #0]
  28068. 800c186: 4a1b ldr r2, [pc, #108] @ (800c1f4 <HAL_TIM_Base_Start_IT+0xe8>)
  28069. 800c188: 4293 cmp r3, r2
  28070. 800c18a: d115 bne.n 800c1b8 <HAL_TIM_Base_Start_IT+0xac>
  28071. {
  28072. tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
  28073. 800c18c: 687b ldr r3, [r7, #4]
  28074. 800c18e: 681b ldr r3, [r3, #0]
  28075. 800c190: 689a ldr r2, [r3, #8]
  28076. 800c192: 4b19 ldr r3, [pc, #100] @ (800c1f8 <HAL_TIM_Base_Start_IT+0xec>)
  28077. 800c194: 4013 ands r3, r2
  28078. 800c196: 60fb str r3, [r7, #12]
  28079. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  28080. 800c198: 68fb ldr r3, [r7, #12]
  28081. 800c19a: 2b06 cmp r3, #6
  28082. 800c19c: d015 beq.n 800c1ca <HAL_TIM_Base_Start_IT+0xbe>
  28083. 800c19e: 68fb ldr r3, [r7, #12]
  28084. 800c1a0: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  28085. 800c1a4: d011 beq.n 800c1ca <HAL_TIM_Base_Start_IT+0xbe>
  28086. {
  28087. __HAL_TIM_ENABLE(htim);
  28088. 800c1a6: 687b ldr r3, [r7, #4]
  28089. 800c1a8: 681b ldr r3, [r3, #0]
  28090. 800c1aa: 681a ldr r2, [r3, #0]
  28091. 800c1ac: 687b ldr r3, [r7, #4]
  28092. 800c1ae: 681b ldr r3, [r3, #0]
  28093. 800c1b0: f042 0201 orr.w r2, r2, #1
  28094. 800c1b4: 601a str r2, [r3, #0]
  28095. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  28096. 800c1b6: e008 b.n 800c1ca <HAL_TIM_Base_Start_IT+0xbe>
  28097. }
  28098. }
  28099. else
  28100. {
  28101. __HAL_TIM_ENABLE(htim);
  28102. 800c1b8: 687b ldr r3, [r7, #4]
  28103. 800c1ba: 681b ldr r3, [r3, #0]
  28104. 800c1bc: 681a ldr r2, [r3, #0]
  28105. 800c1be: 687b ldr r3, [r7, #4]
  28106. 800c1c0: 681b ldr r3, [r3, #0]
  28107. 800c1c2: f042 0201 orr.w r2, r2, #1
  28108. 800c1c6: 601a str r2, [r3, #0]
  28109. 800c1c8: e000 b.n 800c1cc <HAL_TIM_Base_Start_IT+0xc0>
  28110. if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  28111. 800c1ca: bf00 nop
  28112. }
  28113. /* Return function status */
  28114. return HAL_OK;
  28115. 800c1cc: 2300 movs r3, #0
  28116. }
  28117. 800c1ce: 4618 mov r0, r3
  28118. 800c1d0: 3714 adds r7, #20
  28119. 800c1d2: 46bd mov sp, r7
  28120. 800c1d4: f85d 7b04 ldr.w r7, [sp], #4
  28121. 800c1d8: 4770 bx lr
  28122. 800c1da: bf00 nop
  28123. 800c1dc: 40010000 .word 0x40010000
  28124. 800c1e0: 40000400 .word 0x40000400
  28125. 800c1e4: 40000800 .word 0x40000800
  28126. 800c1e8: 40000c00 .word 0x40000c00
  28127. 800c1ec: 40010400 .word 0x40010400
  28128. 800c1f0: 40001800 .word 0x40001800
  28129. 800c1f4: 40014000 .word 0x40014000
  28130. 800c1f8: 00010007 .word 0x00010007
  28131. 0800c1fc <HAL_TIM_IRQHandler>:
  28132. * @brief This function handles TIM interrupts requests.
  28133. * @param htim TIM handle
  28134. * @retval None
  28135. */
  28136. void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim)
  28137. {
  28138. 800c1fc: b580 push {r7, lr}
  28139. 800c1fe: b084 sub sp, #16
  28140. 800c200: af00 add r7, sp, #0
  28141. 800c202: 6078 str r0, [r7, #4]
  28142. uint32_t itsource = htim->Instance->DIER;
  28143. 800c204: 687b ldr r3, [r7, #4]
  28144. 800c206: 681b ldr r3, [r3, #0]
  28145. 800c208: 68db ldr r3, [r3, #12]
  28146. 800c20a: 60fb str r3, [r7, #12]
  28147. uint32_t itflag = htim->Instance->SR;
  28148. 800c20c: 687b ldr r3, [r7, #4]
  28149. 800c20e: 681b ldr r3, [r3, #0]
  28150. 800c210: 691b ldr r3, [r3, #16]
  28151. 800c212: 60bb str r3, [r7, #8]
  28152. /* Capture compare 1 event */
  28153. if ((itflag & (TIM_FLAG_CC1)) == (TIM_FLAG_CC1))
  28154. 800c214: 68bb ldr r3, [r7, #8]
  28155. 800c216: f003 0302 and.w r3, r3, #2
  28156. 800c21a: 2b00 cmp r3, #0
  28157. 800c21c: d020 beq.n 800c260 <HAL_TIM_IRQHandler+0x64>
  28158. {
  28159. if ((itsource & (TIM_IT_CC1)) == (TIM_IT_CC1))
  28160. 800c21e: 68fb ldr r3, [r7, #12]
  28161. 800c220: f003 0302 and.w r3, r3, #2
  28162. 800c224: 2b00 cmp r3, #0
  28163. 800c226: d01b beq.n 800c260 <HAL_TIM_IRQHandler+0x64>
  28164. {
  28165. {
  28166. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_CC1);
  28167. 800c228: 687b ldr r3, [r7, #4]
  28168. 800c22a: 681b ldr r3, [r3, #0]
  28169. 800c22c: f06f 0202 mvn.w r2, #2
  28170. 800c230: 611a str r2, [r3, #16]
  28171. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;
  28172. 800c232: 687b ldr r3, [r7, #4]
  28173. 800c234: 2201 movs r2, #1
  28174. 800c236: 771a strb r2, [r3, #28]
  28175. /* Input capture event */
  28176. if ((htim->Instance->CCMR1 & TIM_CCMR1_CC1S) != 0x00U)
  28177. 800c238: 687b ldr r3, [r7, #4]
  28178. 800c23a: 681b ldr r3, [r3, #0]
  28179. 800c23c: 699b ldr r3, [r3, #24]
  28180. 800c23e: f003 0303 and.w r3, r3, #3
  28181. 800c242: 2b00 cmp r3, #0
  28182. 800c244: d003 beq.n 800c24e <HAL_TIM_IRQHandler+0x52>
  28183. {
  28184. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  28185. htim->IC_CaptureCallback(htim);
  28186. #else
  28187. HAL_TIM_IC_CaptureCallback(htim);
  28188. 800c246: 6878 ldr r0, [r7, #4]
  28189. 800c248: f000 f9e2 bl 800c610 <HAL_TIM_IC_CaptureCallback>
  28190. 800c24c: e005 b.n 800c25a <HAL_TIM_IRQHandler+0x5e>
  28191. {
  28192. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  28193. htim->OC_DelayElapsedCallback(htim);
  28194. htim->PWM_PulseFinishedCallback(htim);
  28195. #else
  28196. HAL_TIM_OC_DelayElapsedCallback(htim);
  28197. 800c24e: 6878 ldr r0, [r7, #4]
  28198. 800c250: f000 f9d4 bl 800c5fc <HAL_TIM_OC_DelayElapsedCallback>
  28199. HAL_TIM_PWM_PulseFinishedCallback(htim);
  28200. 800c254: 6878 ldr r0, [r7, #4]
  28201. 800c256: f000 f9e5 bl 800c624 <HAL_TIM_PWM_PulseFinishedCallback>
  28202. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  28203. }
  28204. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;
  28205. 800c25a: 687b ldr r3, [r7, #4]
  28206. 800c25c: 2200 movs r2, #0
  28207. 800c25e: 771a strb r2, [r3, #28]
  28208. }
  28209. }
  28210. }
  28211. /* Capture compare 2 event */
  28212. if ((itflag & (TIM_FLAG_CC2)) == (TIM_FLAG_CC2))
  28213. 800c260: 68bb ldr r3, [r7, #8]
  28214. 800c262: f003 0304 and.w r3, r3, #4
  28215. 800c266: 2b00 cmp r3, #0
  28216. 800c268: d020 beq.n 800c2ac <HAL_TIM_IRQHandler+0xb0>
  28217. {
  28218. if ((itsource & (TIM_IT_CC2)) == (TIM_IT_CC2))
  28219. 800c26a: 68fb ldr r3, [r7, #12]
  28220. 800c26c: f003 0304 and.w r3, r3, #4
  28221. 800c270: 2b00 cmp r3, #0
  28222. 800c272: d01b beq.n 800c2ac <HAL_TIM_IRQHandler+0xb0>
  28223. {
  28224. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_CC2);
  28225. 800c274: 687b ldr r3, [r7, #4]
  28226. 800c276: 681b ldr r3, [r3, #0]
  28227. 800c278: f06f 0204 mvn.w r2, #4
  28228. 800c27c: 611a str r2, [r3, #16]
  28229. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;
  28230. 800c27e: 687b ldr r3, [r7, #4]
  28231. 800c280: 2202 movs r2, #2
  28232. 800c282: 771a strb r2, [r3, #28]
  28233. /* Input capture event */
  28234. if ((htim->Instance->CCMR1 & TIM_CCMR1_CC2S) != 0x00U)
  28235. 800c284: 687b ldr r3, [r7, #4]
  28236. 800c286: 681b ldr r3, [r3, #0]
  28237. 800c288: 699b ldr r3, [r3, #24]
  28238. 800c28a: f403 7340 and.w r3, r3, #768 @ 0x300
  28239. 800c28e: 2b00 cmp r3, #0
  28240. 800c290: d003 beq.n 800c29a <HAL_TIM_IRQHandler+0x9e>
  28241. {
  28242. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  28243. htim->IC_CaptureCallback(htim);
  28244. #else
  28245. HAL_TIM_IC_CaptureCallback(htim);
  28246. 800c292: 6878 ldr r0, [r7, #4]
  28247. 800c294: f000 f9bc bl 800c610 <HAL_TIM_IC_CaptureCallback>
  28248. 800c298: e005 b.n 800c2a6 <HAL_TIM_IRQHandler+0xaa>
  28249. {
  28250. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  28251. htim->OC_DelayElapsedCallback(htim);
  28252. htim->PWM_PulseFinishedCallback(htim);
  28253. #else
  28254. HAL_TIM_OC_DelayElapsedCallback(htim);
  28255. 800c29a: 6878 ldr r0, [r7, #4]
  28256. 800c29c: f000 f9ae bl 800c5fc <HAL_TIM_OC_DelayElapsedCallback>
  28257. HAL_TIM_PWM_PulseFinishedCallback(htim);
  28258. 800c2a0: 6878 ldr r0, [r7, #4]
  28259. 800c2a2: f000 f9bf bl 800c624 <HAL_TIM_PWM_PulseFinishedCallback>
  28260. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  28261. }
  28262. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;
  28263. 800c2a6: 687b ldr r3, [r7, #4]
  28264. 800c2a8: 2200 movs r2, #0
  28265. 800c2aa: 771a strb r2, [r3, #28]
  28266. }
  28267. }
  28268. /* Capture compare 3 event */
  28269. if ((itflag & (TIM_FLAG_CC3)) == (TIM_FLAG_CC3))
  28270. 800c2ac: 68bb ldr r3, [r7, #8]
  28271. 800c2ae: f003 0308 and.w r3, r3, #8
  28272. 800c2b2: 2b00 cmp r3, #0
  28273. 800c2b4: d020 beq.n 800c2f8 <HAL_TIM_IRQHandler+0xfc>
  28274. {
  28275. if ((itsource & (TIM_IT_CC3)) == (TIM_IT_CC3))
  28276. 800c2b6: 68fb ldr r3, [r7, #12]
  28277. 800c2b8: f003 0308 and.w r3, r3, #8
  28278. 800c2bc: 2b00 cmp r3, #0
  28279. 800c2be: d01b beq.n 800c2f8 <HAL_TIM_IRQHandler+0xfc>
  28280. {
  28281. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_CC3);
  28282. 800c2c0: 687b ldr r3, [r7, #4]
  28283. 800c2c2: 681b ldr r3, [r3, #0]
  28284. 800c2c4: f06f 0208 mvn.w r2, #8
  28285. 800c2c8: 611a str r2, [r3, #16]
  28286. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;
  28287. 800c2ca: 687b ldr r3, [r7, #4]
  28288. 800c2cc: 2204 movs r2, #4
  28289. 800c2ce: 771a strb r2, [r3, #28]
  28290. /* Input capture event */
  28291. if ((htim->Instance->CCMR2 & TIM_CCMR2_CC3S) != 0x00U)
  28292. 800c2d0: 687b ldr r3, [r7, #4]
  28293. 800c2d2: 681b ldr r3, [r3, #0]
  28294. 800c2d4: 69db ldr r3, [r3, #28]
  28295. 800c2d6: f003 0303 and.w r3, r3, #3
  28296. 800c2da: 2b00 cmp r3, #0
  28297. 800c2dc: d003 beq.n 800c2e6 <HAL_TIM_IRQHandler+0xea>
  28298. {
  28299. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  28300. htim->IC_CaptureCallback(htim);
  28301. #else
  28302. HAL_TIM_IC_CaptureCallback(htim);
  28303. 800c2de: 6878 ldr r0, [r7, #4]
  28304. 800c2e0: f000 f996 bl 800c610 <HAL_TIM_IC_CaptureCallback>
  28305. 800c2e4: e005 b.n 800c2f2 <HAL_TIM_IRQHandler+0xf6>
  28306. {
  28307. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  28308. htim->OC_DelayElapsedCallback(htim);
  28309. htim->PWM_PulseFinishedCallback(htim);
  28310. #else
  28311. HAL_TIM_OC_DelayElapsedCallback(htim);
  28312. 800c2e6: 6878 ldr r0, [r7, #4]
  28313. 800c2e8: f000 f988 bl 800c5fc <HAL_TIM_OC_DelayElapsedCallback>
  28314. HAL_TIM_PWM_PulseFinishedCallback(htim);
  28315. 800c2ec: 6878 ldr r0, [r7, #4]
  28316. 800c2ee: f000 f999 bl 800c624 <HAL_TIM_PWM_PulseFinishedCallback>
  28317. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  28318. }
  28319. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;
  28320. 800c2f2: 687b ldr r3, [r7, #4]
  28321. 800c2f4: 2200 movs r2, #0
  28322. 800c2f6: 771a strb r2, [r3, #28]
  28323. }
  28324. }
  28325. /* Capture compare 4 event */
  28326. if ((itflag & (TIM_FLAG_CC4)) == (TIM_FLAG_CC4))
  28327. 800c2f8: 68bb ldr r3, [r7, #8]
  28328. 800c2fa: f003 0310 and.w r3, r3, #16
  28329. 800c2fe: 2b00 cmp r3, #0
  28330. 800c300: d020 beq.n 800c344 <HAL_TIM_IRQHandler+0x148>
  28331. {
  28332. if ((itsource & (TIM_IT_CC4)) == (TIM_IT_CC4))
  28333. 800c302: 68fb ldr r3, [r7, #12]
  28334. 800c304: f003 0310 and.w r3, r3, #16
  28335. 800c308: 2b00 cmp r3, #0
  28336. 800c30a: d01b beq.n 800c344 <HAL_TIM_IRQHandler+0x148>
  28337. {
  28338. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_CC4);
  28339. 800c30c: 687b ldr r3, [r7, #4]
  28340. 800c30e: 681b ldr r3, [r3, #0]
  28341. 800c310: f06f 0210 mvn.w r2, #16
  28342. 800c314: 611a str r2, [r3, #16]
  28343. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4;
  28344. 800c316: 687b ldr r3, [r7, #4]
  28345. 800c318: 2208 movs r2, #8
  28346. 800c31a: 771a strb r2, [r3, #28]
  28347. /* Input capture event */
  28348. if ((htim->Instance->CCMR2 & TIM_CCMR2_CC4S) != 0x00U)
  28349. 800c31c: 687b ldr r3, [r7, #4]
  28350. 800c31e: 681b ldr r3, [r3, #0]
  28351. 800c320: 69db ldr r3, [r3, #28]
  28352. 800c322: f403 7340 and.w r3, r3, #768 @ 0x300
  28353. 800c326: 2b00 cmp r3, #0
  28354. 800c328: d003 beq.n 800c332 <HAL_TIM_IRQHandler+0x136>
  28355. {
  28356. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  28357. htim->IC_CaptureCallback(htim);
  28358. #else
  28359. HAL_TIM_IC_CaptureCallback(htim);
  28360. 800c32a: 6878 ldr r0, [r7, #4]
  28361. 800c32c: f000 f970 bl 800c610 <HAL_TIM_IC_CaptureCallback>
  28362. 800c330: e005 b.n 800c33e <HAL_TIM_IRQHandler+0x142>
  28363. {
  28364. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  28365. htim->OC_DelayElapsedCallback(htim);
  28366. htim->PWM_PulseFinishedCallback(htim);
  28367. #else
  28368. HAL_TIM_OC_DelayElapsedCallback(htim);
  28369. 800c332: 6878 ldr r0, [r7, #4]
  28370. 800c334: f000 f962 bl 800c5fc <HAL_TIM_OC_DelayElapsedCallback>
  28371. HAL_TIM_PWM_PulseFinishedCallback(htim);
  28372. 800c338: 6878 ldr r0, [r7, #4]
  28373. 800c33a: f000 f973 bl 800c624 <HAL_TIM_PWM_PulseFinishedCallback>
  28374. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  28375. }
  28376. htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;
  28377. 800c33e: 687b ldr r3, [r7, #4]
  28378. 800c340: 2200 movs r2, #0
  28379. 800c342: 771a strb r2, [r3, #28]
  28380. }
  28381. }
  28382. /* TIM Update event */
  28383. if ((itflag & (TIM_FLAG_UPDATE)) == (TIM_FLAG_UPDATE))
  28384. 800c344: 68bb ldr r3, [r7, #8]
  28385. 800c346: f003 0301 and.w r3, r3, #1
  28386. 800c34a: 2b00 cmp r3, #0
  28387. 800c34c: d00c beq.n 800c368 <HAL_TIM_IRQHandler+0x16c>
  28388. {
  28389. if ((itsource & (TIM_IT_UPDATE)) == (TIM_IT_UPDATE))
  28390. 800c34e: 68fb ldr r3, [r7, #12]
  28391. 800c350: f003 0301 and.w r3, r3, #1
  28392. 800c354: 2b00 cmp r3, #0
  28393. 800c356: d007 beq.n 800c368 <HAL_TIM_IRQHandler+0x16c>
  28394. {
  28395. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_UPDATE);
  28396. 800c358: 687b ldr r3, [r7, #4]
  28397. 800c35a: 681b ldr r3, [r3, #0]
  28398. 800c35c: f06f 0201 mvn.w r2, #1
  28399. 800c360: 611a str r2, [r3, #16]
  28400. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  28401. htim->PeriodElapsedCallback(htim);
  28402. #else
  28403. HAL_TIM_PeriodElapsedCallback(htim);
  28404. 800c362: 6878 ldr r0, [r7, #4]
  28405. 800c364: f7f5 f882 bl 800146c <HAL_TIM_PeriodElapsedCallback>
  28406. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  28407. }
  28408. }
  28409. /* TIM Break input event */
  28410. if (((itflag & (TIM_FLAG_BREAK)) == (TIM_FLAG_BREAK)) || \
  28411. 800c368: 68bb ldr r3, [r7, #8]
  28412. 800c36a: f003 0380 and.w r3, r3, #128 @ 0x80
  28413. 800c36e: 2b00 cmp r3, #0
  28414. 800c370: d104 bne.n 800c37c <HAL_TIM_IRQHandler+0x180>
  28415. ((itflag & (TIM_FLAG_SYSTEM_BREAK)) == (TIM_FLAG_SYSTEM_BREAK)))
  28416. 800c372: 68bb ldr r3, [r7, #8]
  28417. 800c374: f403 5300 and.w r3, r3, #8192 @ 0x2000
  28418. if (((itflag & (TIM_FLAG_BREAK)) == (TIM_FLAG_BREAK)) || \
  28419. 800c378: 2b00 cmp r3, #0
  28420. 800c37a: d00c beq.n 800c396 <HAL_TIM_IRQHandler+0x19a>
  28421. {
  28422. if ((itsource & (TIM_IT_BREAK)) == (TIM_IT_BREAK))
  28423. 800c37c: 68fb ldr r3, [r7, #12]
  28424. 800c37e: f003 0380 and.w r3, r3, #128 @ 0x80
  28425. 800c382: 2b00 cmp r3, #0
  28426. 800c384: d007 beq.n 800c396 <HAL_TIM_IRQHandler+0x19a>
  28427. {
  28428. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_BREAK | TIM_FLAG_SYSTEM_BREAK);
  28429. 800c386: 687b ldr r3, [r7, #4]
  28430. 800c388: 681b ldr r3, [r3, #0]
  28431. 800c38a: f46f 5202 mvn.w r2, #8320 @ 0x2080
  28432. 800c38e: 611a str r2, [r3, #16]
  28433. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  28434. htim->BreakCallback(htim);
  28435. #else
  28436. HAL_TIMEx_BreakCallback(htim);
  28437. 800c390: 6878 ldr r0, [r7, #4]
  28438. 800c392: f000 fb37 bl 800ca04 <HAL_TIMEx_BreakCallback>
  28439. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  28440. }
  28441. }
  28442. /* TIM Break2 input event */
  28443. if ((itflag & (TIM_FLAG_BREAK2)) == (TIM_FLAG_BREAK2))
  28444. 800c396: 68bb ldr r3, [r7, #8]
  28445. 800c398: f403 7380 and.w r3, r3, #256 @ 0x100
  28446. 800c39c: 2b00 cmp r3, #0
  28447. 800c39e: d00c beq.n 800c3ba <HAL_TIM_IRQHandler+0x1be>
  28448. {
  28449. if ((itsource & (TIM_IT_BREAK)) == (TIM_IT_BREAK))
  28450. 800c3a0: 68fb ldr r3, [r7, #12]
  28451. 800c3a2: f003 0380 and.w r3, r3, #128 @ 0x80
  28452. 800c3a6: 2b00 cmp r3, #0
  28453. 800c3a8: d007 beq.n 800c3ba <HAL_TIM_IRQHandler+0x1be>
  28454. {
  28455. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_BREAK2);
  28456. 800c3aa: 687b ldr r3, [r7, #4]
  28457. 800c3ac: 681b ldr r3, [r3, #0]
  28458. 800c3ae: f46f 7280 mvn.w r2, #256 @ 0x100
  28459. 800c3b2: 611a str r2, [r3, #16]
  28460. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  28461. htim->Break2Callback(htim);
  28462. #else
  28463. HAL_TIMEx_Break2Callback(htim);
  28464. 800c3b4: 6878 ldr r0, [r7, #4]
  28465. 800c3b6: f000 fb2f bl 800ca18 <HAL_TIMEx_Break2Callback>
  28466. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  28467. }
  28468. }
  28469. /* TIM Trigger detection event */
  28470. if ((itflag & (TIM_FLAG_TRIGGER)) == (TIM_FLAG_TRIGGER))
  28471. 800c3ba: 68bb ldr r3, [r7, #8]
  28472. 800c3bc: f003 0340 and.w r3, r3, #64 @ 0x40
  28473. 800c3c0: 2b00 cmp r3, #0
  28474. 800c3c2: d00c beq.n 800c3de <HAL_TIM_IRQHandler+0x1e2>
  28475. {
  28476. if ((itsource & (TIM_IT_TRIGGER)) == (TIM_IT_TRIGGER))
  28477. 800c3c4: 68fb ldr r3, [r7, #12]
  28478. 800c3c6: f003 0340 and.w r3, r3, #64 @ 0x40
  28479. 800c3ca: 2b00 cmp r3, #0
  28480. 800c3cc: d007 beq.n 800c3de <HAL_TIM_IRQHandler+0x1e2>
  28481. {
  28482. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_TRIGGER);
  28483. 800c3ce: 687b ldr r3, [r7, #4]
  28484. 800c3d0: 681b ldr r3, [r3, #0]
  28485. 800c3d2: f06f 0240 mvn.w r2, #64 @ 0x40
  28486. 800c3d6: 611a str r2, [r3, #16]
  28487. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  28488. htim->TriggerCallback(htim);
  28489. #else
  28490. HAL_TIM_TriggerCallback(htim);
  28491. 800c3d8: 6878 ldr r0, [r7, #4]
  28492. 800c3da: f000 f92d bl 800c638 <HAL_TIM_TriggerCallback>
  28493. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  28494. }
  28495. }
  28496. /* TIM commutation event */
  28497. if ((itflag & (TIM_FLAG_COM)) == (TIM_FLAG_COM))
  28498. 800c3de: 68bb ldr r3, [r7, #8]
  28499. 800c3e0: f003 0320 and.w r3, r3, #32
  28500. 800c3e4: 2b00 cmp r3, #0
  28501. 800c3e6: d00c beq.n 800c402 <HAL_TIM_IRQHandler+0x206>
  28502. {
  28503. if ((itsource & (TIM_IT_COM)) == (TIM_IT_COM))
  28504. 800c3e8: 68fb ldr r3, [r7, #12]
  28505. 800c3ea: f003 0320 and.w r3, r3, #32
  28506. 800c3ee: 2b00 cmp r3, #0
  28507. 800c3f0: d007 beq.n 800c402 <HAL_TIM_IRQHandler+0x206>
  28508. {
  28509. __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_COM);
  28510. 800c3f2: 687b ldr r3, [r7, #4]
  28511. 800c3f4: 681b ldr r3, [r3, #0]
  28512. 800c3f6: f06f 0220 mvn.w r2, #32
  28513. 800c3fa: 611a str r2, [r3, #16]
  28514. #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
  28515. htim->CommutationCallback(htim);
  28516. #else
  28517. HAL_TIMEx_CommutCallback(htim);
  28518. 800c3fc: 6878 ldr r0, [r7, #4]
  28519. 800c3fe: f000 faf7 bl 800c9f0 <HAL_TIMEx_CommutCallback>
  28520. #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
  28521. }
  28522. }
  28523. }
  28524. 800c402: bf00 nop
  28525. 800c404: 3710 adds r7, #16
  28526. 800c406: 46bd mov sp, r7
  28527. 800c408: bd80 pop {r7, pc}
  28528. ...
  28529. 0800c40c <HAL_TIM_ConfigClockSource>:
  28530. * @param sClockSourceConfig pointer to a TIM_ClockConfigTypeDef structure that
  28531. * contains the clock source information for the TIM peripheral.
  28532. * @retval HAL status
  28533. */
  28534. HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, const TIM_ClockConfigTypeDef *sClockSourceConfig)
  28535. {
  28536. 800c40c: b580 push {r7, lr}
  28537. 800c40e: b084 sub sp, #16
  28538. 800c410: af00 add r7, sp, #0
  28539. 800c412: 6078 str r0, [r7, #4]
  28540. 800c414: 6039 str r1, [r7, #0]
  28541. HAL_StatusTypeDef status = HAL_OK;
  28542. 800c416: 2300 movs r3, #0
  28543. 800c418: 73fb strb r3, [r7, #15]
  28544. uint32_t tmpsmcr;
  28545. /* Process Locked */
  28546. __HAL_LOCK(htim);
  28547. 800c41a: 687b ldr r3, [r7, #4]
  28548. 800c41c: f893 303c ldrb.w r3, [r3, #60] @ 0x3c
  28549. 800c420: 2b01 cmp r3, #1
  28550. 800c422: d101 bne.n 800c428 <HAL_TIM_ConfigClockSource+0x1c>
  28551. 800c424: 2302 movs r3, #2
  28552. 800c426: e0dc b.n 800c5e2 <HAL_TIM_ConfigClockSource+0x1d6>
  28553. 800c428: 687b ldr r3, [r7, #4]
  28554. 800c42a: 2201 movs r2, #1
  28555. 800c42c: f883 203c strb.w r2, [r3, #60] @ 0x3c
  28556. htim->State = HAL_TIM_STATE_BUSY;
  28557. 800c430: 687b ldr r3, [r7, #4]
  28558. 800c432: 2202 movs r2, #2
  28559. 800c434: f883 203d strb.w r2, [r3, #61] @ 0x3d
  28560. /* Check the parameters */
  28561. assert_param(IS_TIM_CLOCKSOURCE(sClockSourceConfig->ClockSource));
  28562. /* Reset the SMS, TS, ECE, ETPS and ETRF bits */
  28563. tmpsmcr = htim->Instance->SMCR;
  28564. 800c438: 687b ldr r3, [r7, #4]
  28565. 800c43a: 681b ldr r3, [r3, #0]
  28566. 800c43c: 689b ldr r3, [r3, #8]
  28567. 800c43e: 60bb str r3, [r7, #8]
  28568. tmpsmcr &= ~(TIM_SMCR_SMS | TIM_SMCR_TS);
  28569. 800c440: 68ba ldr r2, [r7, #8]
  28570. 800c442: 4b6a ldr r3, [pc, #424] @ (800c5ec <HAL_TIM_ConfigClockSource+0x1e0>)
  28571. 800c444: 4013 ands r3, r2
  28572. 800c446: 60bb str r3, [r7, #8]
  28573. tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP);
  28574. 800c448: 68bb ldr r3, [r7, #8]
  28575. 800c44a: f423 437f bic.w r3, r3, #65280 @ 0xff00
  28576. 800c44e: 60bb str r3, [r7, #8]
  28577. htim->Instance->SMCR = tmpsmcr;
  28578. 800c450: 687b ldr r3, [r7, #4]
  28579. 800c452: 681b ldr r3, [r3, #0]
  28580. 800c454: 68ba ldr r2, [r7, #8]
  28581. 800c456: 609a str r2, [r3, #8]
  28582. switch (sClockSourceConfig->ClockSource)
  28583. 800c458: 683b ldr r3, [r7, #0]
  28584. 800c45a: 681b ldr r3, [r3, #0]
  28585. 800c45c: 4a64 ldr r2, [pc, #400] @ (800c5f0 <HAL_TIM_ConfigClockSource+0x1e4>)
  28586. 800c45e: 4293 cmp r3, r2
  28587. 800c460: f000 80a9 beq.w 800c5b6 <HAL_TIM_ConfigClockSource+0x1aa>
  28588. 800c464: 4a62 ldr r2, [pc, #392] @ (800c5f0 <HAL_TIM_ConfigClockSource+0x1e4>)
  28589. 800c466: 4293 cmp r3, r2
  28590. 800c468: f200 80ae bhi.w 800c5c8 <HAL_TIM_ConfigClockSource+0x1bc>
  28591. 800c46c: 4a61 ldr r2, [pc, #388] @ (800c5f4 <HAL_TIM_ConfigClockSource+0x1e8>)
  28592. 800c46e: 4293 cmp r3, r2
  28593. 800c470: f000 80a1 beq.w 800c5b6 <HAL_TIM_ConfigClockSource+0x1aa>
  28594. 800c474: 4a5f ldr r2, [pc, #380] @ (800c5f4 <HAL_TIM_ConfigClockSource+0x1e8>)
  28595. 800c476: 4293 cmp r3, r2
  28596. 800c478: f200 80a6 bhi.w 800c5c8 <HAL_TIM_ConfigClockSource+0x1bc>
  28597. 800c47c: 4a5e ldr r2, [pc, #376] @ (800c5f8 <HAL_TIM_ConfigClockSource+0x1ec>)
  28598. 800c47e: 4293 cmp r3, r2
  28599. 800c480: f000 8099 beq.w 800c5b6 <HAL_TIM_ConfigClockSource+0x1aa>
  28600. 800c484: 4a5c ldr r2, [pc, #368] @ (800c5f8 <HAL_TIM_ConfigClockSource+0x1ec>)
  28601. 800c486: 4293 cmp r3, r2
  28602. 800c488: f200 809e bhi.w 800c5c8 <HAL_TIM_ConfigClockSource+0x1bc>
  28603. 800c48c: f1b3 1f10 cmp.w r3, #1048592 @ 0x100010
  28604. 800c490: f000 8091 beq.w 800c5b6 <HAL_TIM_ConfigClockSource+0x1aa>
  28605. 800c494: f1b3 1f10 cmp.w r3, #1048592 @ 0x100010
  28606. 800c498: f200 8096 bhi.w 800c5c8 <HAL_TIM_ConfigClockSource+0x1bc>
  28607. 800c49c: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
  28608. 800c4a0: f000 8089 beq.w 800c5b6 <HAL_TIM_ConfigClockSource+0x1aa>
  28609. 800c4a4: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
  28610. 800c4a8: f200 808e bhi.w 800c5c8 <HAL_TIM_ConfigClockSource+0x1bc>
  28611. 800c4ac: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  28612. 800c4b0: d03e beq.n 800c530 <HAL_TIM_ConfigClockSource+0x124>
  28613. 800c4b2: f5b3 5f00 cmp.w r3, #8192 @ 0x2000
  28614. 800c4b6: f200 8087 bhi.w 800c5c8 <HAL_TIM_ConfigClockSource+0x1bc>
  28615. 800c4ba: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  28616. 800c4be: f000 8086 beq.w 800c5ce <HAL_TIM_ConfigClockSource+0x1c2>
  28617. 800c4c2: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  28618. 800c4c6: d87f bhi.n 800c5c8 <HAL_TIM_ConfigClockSource+0x1bc>
  28619. 800c4c8: 2b70 cmp r3, #112 @ 0x70
  28620. 800c4ca: d01a beq.n 800c502 <HAL_TIM_ConfigClockSource+0xf6>
  28621. 800c4cc: 2b70 cmp r3, #112 @ 0x70
  28622. 800c4ce: d87b bhi.n 800c5c8 <HAL_TIM_ConfigClockSource+0x1bc>
  28623. 800c4d0: 2b60 cmp r3, #96 @ 0x60
  28624. 800c4d2: d050 beq.n 800c576 <HAL_TIM_ConfigClockSource+0x16a>
  28625. 800c4d4: 2b60 cmp r3, #96 @ 0x60
  28626. 800c4d6: d877 bhi.n 800c5c8 <HAL_TIM_ConfigClockSource+0x1bc>
  28627. 800c4d8: 2b50 cmp r3, #80 @ 0x50
  28628. 800c4da: d03c beq.n 800c556 <HAL_TIM_ConfigClockSource+0x14a>
  28629. 800c4dc: 2b50 cmp r3, #80 @ 0x50
  28630. 800c4de: d873 bhi.n 800c5c8 <HAL_TIM_ConfigClockSource+0x1bc>
  28631. 800c4e0: 2b40 cmp r3, #64 @ 0x40
  28632. 800c4e2: d058 beq.n 800c596 <HAL_TIM_ConfigClockSource+0x18a>
  28633. 800c4e4: 2b40 cmp r3, #64 @ 0x40
  28634. 800c4e6: d86f bhi.n 800c5c8 <HAL_TIM_ConfigClockSource+0x1bc>
  28635. 800c4e8: 2b30 cmp r3, #48 @ 0x30
  28636. 800c4ea: d064 beq.n 800c5b6 <HAL_TIM_ConfigClockSource+0x1aa>
  28637. 800c4ec: 2b30 cmp r3, #48 @ 0x30
  28638. 800c4ee: d86b bhi.n 800c5c8 <HAL_TIM_ConfigClockSource+0x1bc>
  28639. 800c4f0: 2b20 cmp r3, #32
  28640. 800c4f2: d060 beq.n 800c5b6 <HAL_TIM_ConfigClockSource+0x1aa>
  28641. 800c4f4: 2b20 cmp r3, #32
  28642. 800c4f6: d867 bhi.n 800c5c8 <HAL_TIM_ConfigClockSource+0x1bc>
  28643. 800c4f8: 2b00 cmp r3, #0
  28644. 800c4fa: d05c beq.n 800c5b6 <HAL_TIM_ConfigClockSource+0x1aa>
  28645. 800c4fc: 2b10 cmp r3, #16
  28646. 800c4fe: d05a beq.n 800c5b6 <HAL_TIM_ConfigClockSource+0x1aa>
  28647. 800c500: e062 b.n 800c5c8 <HAL_TIM_ConfigClockSource+0x1bc>
  28648. assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler));
  28649. assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));
  28650. assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));
  28651. /* Configure the ETR Clock source */
  28652. TIM_ETR_SetConfig(htim->Instance,
  28653. 800c502: 687b ldr r3, [r7, #4]
  28654. 800c504: 6818 ldr r0, [r3, #0]
  28655. sClockSourceConfig->ClockPrescaler,
  28656. 800c506: 683b ldr r3, [r7, #0]
  28657. 800c508: 6899 ldr r1, [r3, #8]
  28658. sClockSourceConfig->ClockPolarity,
  28659. 800c50a: 683b ldr r3, [r7, #0]
  28660. 800c50c: 685a ldr r2, [r3, #4]
  28661. sClockSourceConfig->ClockFilter);
  28662. 800c50e: 683b ldr r3, [r7, #0]
  28663. 800c510: 68db ldr r3, [r3, #12]
  28664. TIM_ETR_SetConfig(htim->Instance,
  28665. 800c512: f000 f9bf bl 800c894 <TIM_ETR_SetConfig>
  28666. /* Select the External clock mode1 and the ETRF trigger */
  28667. tmpsmcr = htim->Instance->SMCR;
  28668. 800c516: 687b ldr r3, [r7, #4]
  28669. 800c518: 681b ldr r3, [r3, #0]
  28670. 800c51a: 689b ldr r3, [r3, #8]
  28671. 800c51c: 60bb str r3, [r7, #8]
  28672. tmpsmcr |= (TIM_SLAVEMODE_EXTERNAL1 | TIM_CLOCKSOURCE_ETRMODE1);
  28673. 800c51e: 68bb ldr r3, [r7, #8]
  28674. 800c520: f043 0377 orr.w r3, r3, #119 @ 0x77
  28675. 800c524: 60bb str r3, [r7, #8]
  28676. /* Write to TIMx SMCR */
  28677. htim->Instance->SMCR = tmpsmcr;
  28678. 800c526: 687b ldr r3, [r7, #4]
  28679. 800c528: 681b ldr r3, [r3, #0]
  28680. 800c52a: 68ba ldr r2, [r7, #8]
  28681. 800c52c: 609a str r2, [r3, #8]
  28682. break;
  28683. 800c52e: e04f b.n 800c5d0 <HAL_TIM_ConfigClockSource+0x1c4>
  28684. assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler));
  28685. assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));
  28686. assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));
  28687. /* Configure the ETR Clock source */
  28688. TIM_ETR_SetConfig(htim->Instance,
  28689. 800c530: 687b ldr r3, [r7, #4]
  28690. 800c532: 6818 ldr r0, [r3, #0]
  28691. sClockSourceConfig->ClockPrescaler,
  28692. 800c534: 683b ldr r3, [r7, #0]
  28693. 800c536: 6899 ldr r1, [r3, #8]
  28694. sClockSourceConfig->ClockPolarity,
  28695. 800c538: 683b ldr r3, [r7, #0]
  28696. 800c53a: 685a ldr r2, [r3, #4]
  28697. sClockSourceConfig->ClockFilter);
  28698. 800c53c: 683b ldr r3, [r7, #0]
  28699. 800c53e: 68db ldr r3, [r3, #12]
  28700. TIM_ETR_SetConfig(htim->Instance,
  28701. 800c540: f000 f9a8 bl 800c894 <TIM_ETR_SetConfig>
  28702. /* Enable the External clock mode2 */
  28703. htim->Instance->SMCR |= TIM_SMCR_ECE;
  28704. 800c544: 687b ldr r3, [r7, #4]
  28705. 800c546: 681b ldr r3, [r3, #0]
  28706. 800c548: 689a ldr r2, [r3, #8]
  28707. 800c54a: 687b ldr r3, [r7, #4]
  28708. 800c54c: 681b ldr r3, [r3, #0]
  28709. 800c54e: f442 4280 orr.w r2, r2, #16384 @ 0x4000
  28710. 800c552: 609a str r2, [r3, #8]
  28711. break;
  28712. 800c554: e03c b.n 800c5d0 <HAL_TIM_ConfigClockSource+0x1c4>
  28713. /* Check TI1 input conditioning related parameters */
  28714. assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));
  28715. assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));
  28716. TIM_TI1_ConfigInputStage(htim->Instance,
  28717. 800c556: 687b ldr r3, [r7, #4]
  28718. 800c558: 6818 ldr r0, [r3, #0]
  28719. sClockSourceConfig->ClockPolarity,
  28720. 800c55a: 683b ldr r3, [r7, #0]
  28721. 800c55c: 6859 ldr r1, [r3, #4]
  28722. sClockSourceConfig->ClockFilter);
  28723. 800c55e: 683b ldr r3, [r7, #0]
  28724. 800c560: 68db ldr r3, [r3, #12]
  28725. TIM_TI1_ConfigInputStage(htim->Instance,
  28726. 800c562: 461a mov r2, r3
  28727. 800c564: f000 f918 bl 800c798 <TIM_TI1_ConfigInputStage>
  28728. TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI1);
  28729. 800c568: 687b ldr r3, [r7, #4]
  28730. 800c56a: 681b ldr r3, [r3, #0]
  28731. 800c56c: 2150 movs r1, #80 @ 0x50
  28732. 800c56e: 4618 mov r0, r3
  28733. 800c570: f000 f972 bl 800c858 <TIM_ITRx_SetConfig>
  28734. break;
  28735. 800c574: e02c b.n 800c5d0 <HAL_TIM_ConfigClockSource+0x1c4>
  28736. /* Check TI2 input conditioning related parameters */
  28737. assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));
  28738. assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));
  28739. TIM_TI2_ConfigInputStage(htim->Instance,
  28740. 800c576: 687b ldr r3, [r7, #4]
  28741. 800c578: 6818 ldr r0, [r3, #0]
  28742. sClockSourceConfig->ClockPolarity,
  28743. 800c57a: 683b ldr r3, [r7, #0]
  28744. 800c57c: 6859 ldr r1, [r3, #4]
  28745. sClockSourceConfig->ClockFilter);
  28746. 800c57e: 683b ldr r3, [r7, #0]
  28747. 800c580: 68db ldr r3, [r3, #12]
  28748. TIM_TI2_ConfigInputStage(htim->Instance,
  28749. 800c582: 461a mov r2, r3
  28750. 800c584: f000 f937 bl 800c7f6 <TIM_TI2_ConfigInputStage>
  28751. TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI2);
  28752. 800c588: 687b ldr r3, [r7, #4]
  28753. 800c58a: 681b ldr r3, [r3, #0]
  28754. 800c58c: 2160 movs r1, #96 @ 0x60
  28755. 800c58e: 4618 mov r0, r3
  28756. 800c590: f000 f962 bl 800c858 <TIM_ITRx_SetConfig>
  28757. break;
  28758. 800c594: e01c b.n 800c5d0 <HAL_TIM_ConfigClockSource+0x1c4>
  28759. /* Check TI1 input conditioning related parameters */
  28760. assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));
  28761. assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));
  28762. TIM_TI1_ConfigInputStage(htim->Instance,
  28763. 800c596: 687b ldr r3, [r7, #4]
  28764. 800c598: 6818 ldr r0, [r3, #0]
  28765. sClockSourceConfig->ClockPolarity,
  28766. 800c59a: 683b ldr r3, [r7, #0]
  28767. 800c59c: 6859 ldr r1, [r3, #4]
  28768. sClockSourceConfig->ClockFilter);
  28769. 800c59e: 683b ldr r3, [r7, #0]
  28770. 800c5a0: 68db ldr r3, [r3, #12]
  28771. TIM_TI1_ConfigInputStage(htim->Instance,
  28772. 800c5a2: 461a mov r2, r3
  28773. 800c5a4: f000 f8f8 bl 800c798 <TIM_TI1_ConfigInputStage>
  28774. TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI1ED);
  28775. 800c5a8: 687b ldr r3, [r7, #4]
  28776. 800c5aa: 681b ldr r3, [r3, #0]
  28777. 800c5ac: 2140 movs r1, #64 @ 0x40
  28778. 800c5ae: 4618 mov r0, r3
  28779. 800c5b0: f000 f952 bl 800c858 <TIM_ITRx_SetConfig>
  28780. break;
  28781. 800c5b4: e00c b.n 800c5d0 <HAL_TIM_ConfigClockSource+0x1c4>
  28782. case TIM_CLOCKSOURCE_ITR8:
  28783. {
  28784. /* Check whether or not the timer instance supports internal trigger input */
  28785. assert_param(IS_TIM_CLOCKSOURCE_ITRX_INSTANCE(htim->Instance));
  28786. TIM_ITRx_SetConfig(htim->Instance, sClockSourceConfig->ClockSource);
  28787. 800c5b6: 687b ldr r3, [r7, #4]
  28788. 800c5b8: 681a ldr r2, [r3, #0]
  28789. 800c5ba: 683b ldr r3, [r7, #0]
  28790. 800c5bc: 681b ldr r3, [r3, #0]
  28791. 800c5be: 4619 mov r1, r3
  28792. 800c5c0: 4610 mov r0, r2
  28793. 800c5c2: f000 f949 bl 800c858 <TIM_ITRx_SetConfig>
  28794. break;
  28795. 800c5c6: e003 b.n 800c5d0 <HAL_TIM_ConfigClockSource+0x1c4>
  28796. }
  28797. default:
  28798. status = HAL_ERROR;
  28799. 800c5c8: 2301 movs r3, #1
  28800. 800c5ca: 73fb strb r3, [r7, #15]
  28801. break;
  28802. 800c5cc: e000 b.n 800c5d0 <HAL_TIM_ConfigClockSource+0x1c4>
  28803. break;
  28804. 800c5ce: bf00 nop
  28805. }
  28806. htim->State = HAL_TIM_STATE_READY;
  28807. 800c5d0: 687b ldr r3, [r7, #4]
  28808. 800c5d2: 2201 movs r2, #1
  28809. 800c5d4: f883 203d strb.w r2, [r3, #61] @ 0x3d
  28810. __HAL_UNLOCK(htim);
  28811. 800c5d8: 687b ldr r3, [r7, #4]
  28812. 800c5da: 2200 movs r2, #0
  28813. 800c5dc: f883 203c strb.w r2, [r3, #60] @ 0x3c
  28814. return status;
  28815. 800c5e0: 7bfb ldrb r3, [r7, #15]
  28816. }
  28817. 800c5e2: 4618 mov r0, r3
  28818. 800c5e4: 3710 adds r7, #16
  28819. 800c5e6: 46bd mov sp, r7
  28820. 800c5e8: bd80 pop {r7, pc}
  28821. 800c5ea: bf00 nop
  28822. 800c5ec: ffceff88 .word 0xffceff88
  28823. 800c5f0: 00100040 .word 0x00100040
  28824. 800c5f4: 00100030 .word 0x00100030
  28825. 800c5f8: 00100020 .word 0x00100020
  28826. 0800c5fc <HAL_TIM_OC_DelayElapsedCallback>:
  28827. * @brief Output Compare callback in non-blocking mode
  28828. * @param htim TIM OC handle
  28829. * @retval None
  28830. */
  28831. __weak void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)
  28832. {
  28833. 800c5fc: b480 push {r7}
  28834. 800c5fe: b083 sub sp, #12
  28835. 800c600: af00 add r7, sp, #0
  28836. 800c602: 6078 str r0, [r7, #4]
  28837. UNUSED(htim);
  28838. /* NOTE : This function should not be modified, when the callback is needed,
  28839. the HAL_TIM_OC_DelayElapsedCallback could be implemented in the user file
  28840. */
  28841. }
  28842. 800c604: bf00 nop
  28843. 800c606: 370c adds r7, #12
  28844. 800c608: 46bd mov sp, r7
  28845. 800c60a: f85d 7b04 ldr.w r7, [sp], #4
  28846. 800c60e: 4770 bx lr
  28847. 0800c610 <HAL_TIM_IC_CaptureCallback>:
  28848. * @brief Input Capture callback in non-blocking mode
  28849. * @param htim TIM IC handle
  28850. * @retval None
  28851. */
  28852. __weak void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
  28853. {
  28854. 800c610: b480 push {r7}
  28855. 800c612: b083 sub sp, #12
  28856. 800c614: af00 add r7, sp, #0
  28857. 800c616: 6078 str r0, [r7, #4]
  28858. UNUSED(htim);
  28859. /* NOTE : This function should not be modified, when the callback is needed,
  28860. the HAL_TIM_IC_CaptureCallback could be implemented in the user file
  28861. */
  28862. }
  28863. 800c618: bf00 nop
  28864. 800c61a: 370c adds r7, #12
  28865. 800c61c: 46bd mov sp, r7
  28866. 800c61e: f85d 7b04 ldr.w r7, [sp], #4
  28867. 800c622: 4770 bx lr
  28868. 0800c624 <HAL_TIM_PWM_PulseFinishedCallback>:
  28869. * @brief PWM Pulse finished callback in non-blocking mode
  28870. * @param htim TIM handle
  28871. * @retval None
  28872. */
  28873. __weak void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
  28874. {
  28875. 800c624: b480 push {r7}
  28876. 800c626: b083 sub sp, #12
  28877. 800c628: af00 add r7, sp, #0
  28878. 800c62a: 6078 str r0, [r7, #4]
  28879. UNUSED(htim);
  28880. /* NOTE : This function should not be modified, when the callback is needed,
  28881. the HAL_TIM_PWM_PulseFinishedCallback could be implemented in the user file
  28882. */
  28883. }
  28884. 800c62c: bf00 nop
  28885. 800c62e: 370c adds r7, #12
  28886. 800c630: 46bd mov sp, r7
  28887. 800c632: f85d 7b04 ldr.w r7, [sp], #4
  28888. 800c636: 4770 bx lr
  28889. 0800c638 <HAL_TIM_TriggerCallback>:
  28890. * @brief Hall Trigger detection callback in non-blocking mode
  28891. * @param htim TIM handle
  28892. * @retval None
  28893. */
  28894. __weak void HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim)
  28895. {
  28896. 800c638: b480 push {r7}
  28897. 800c63a: b083 sub sp, #12
  28898. 800c63c: af00 add r7, sp, #0
  28899. 800c63e: 6078 str r0, [r7, #4]
  28900. UNUSED(htim);
  28901. /* NOTE : This function should not be modified, when the callback is needed,
  28902. the HAL_TIM_TriggerCallback could be implemented in the user file
  28903. */
  28904. }
  28905. 800c640: bf00 nop
  28906. 800c642: 370c adds r7, #12
  28907. 800c644: 46bd mov sp, r7
  28908. 800c646: f85d 7b04 ldr.w r7, [sp], #4
  28909. 800c64a: 4770 bx lr
  28910. 0800c64c <TIM_Base_SetConfig>:
  28911. * @param TIMx TIM peripheral
  28912. * @param Structure TIM Base configuration structure
  28913. * @retval None
  28914. */
  28915. void TIM_Base_SetConfig(TIM_TypeDef *TIMx, const TIM_Base_InitTypeDef *Structure)
  28916. {
  28917. 800c64c: b480 push {r7}
  28918. 800c64e: b085 sub sp, #20
  28919. 800c650: af00 add r7, sp, #0
  28920. 800c652: 6078 str r0, [r7, #4]
  28921. 800c654: 6039 str r1, [r7, #0]
  28922. uint32_t tmpcr1;
  28923. tmpcr1 = TIMx->CR1;
  28924. 800c656: 687b ldr r3, [r7, #4]
  28925. 800c658: 681b ldr r3, [r3, #0]
  28926. 800c65a: 60fb str r3, [r7, #12]
  28927. /* Set TIM Time Base Unit parameters ---------------------------------------*/
  28928. if (IS_TIM_COUNTER_MODE_SELECT_INSTANCE(TIMx))
  28929. 800c65c: 687b ldr r3, [r7, #4]
  28930. 800c65e: 4a46 ldr r2, [pc, #280] @ (800c778 <TIM_Base_SetConfig+0x12c>)
  28931. 800c660: 4293 cmp r3, r2
  28932. 800c662: d013 beq.n 800c68c <TIM_Base_SetConfig+0x40>
  28933. 800c664: 687b ldr r3, [r7, #4]
  28934. 800c666: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  28935. 800c66a: d00f beq.n 800c68c <TIM_Base_SetConfig+0x40>
  28936. 800c66c: 687b ldr r3, [r7, #4]
  28937. 800c66e: 4a43 ldr r2, [pc, #268] @ (800c77c <TIM_Base_SetConfig+0x130>)
  28938. 800c670: 4293 cmp r3, r2
  28939. 800c672: d00b beq.n 800c68c <TIM_Base_SetConfig+0x40>
  28940. 800c674: 687b ldr r3, [r7, #4]
  28941. 800c676: 4a42 ldr r2, [pc, #264] @ (800c780 <TIM_Base_SetConfig+0x134>)
  28942. 800c678: 4293 cmp r3, r2
  28943. 800c67a: d007 beq.n 800c68c <TIM_Base_SetConfig+0x40>
  28944. 800c67c: 687b ldr r3, [r7, #4]
  28945. 800c67e: 4a41 ldr r2, [pc, #260] @ (800c784 <TIM_Base_SetConfig+0x138>)
  28946. 800c680: 4293 cmp r3, r2
  28947. 800c682: d003 beq.n 800c68c <TIM_Base_SetConfig+0x40>
  28948. 800c684: 687b ldr r3, [r7, #4]
  28949. 800c686: 4a40 ldr r2, [pc, #256] @ (800c788 <TIM_Base_SetConfig+0x13c>)
  28950. 800c688: 4293 cmp r3, r2
  28951. 800c68a: d108 bne.n 800c69e <TIM_Base_SetConfig+0x52>
  28952. {
  28953. /* Select the Counter Mode */
  28954. tmpcr1 &= ~(TIM_CR1_DIR | TIM_CR1_CMS);
  28955. 800c68c: 68fb ldr r3, [r7, #12]
  28956. 800c68e: f023 0370 bic.w r3, r3, #112 @ 0x70
  28957. 800c692: 60fb str r3, [r7, #12]
  28958. tmpcr1 |= Structure->CounterMode;
  28959. 800c694: 683b ldr r3, [r7, #0]
  28960. 800c696: 685b ldr r3, [r3, #4]
  28961. 800c698: 68fa ldr r2, [r7, #12]
  28962. 800c69a: 4313 orrs r3, r2
  28963. 800c69c: 60fb str r3, [r7, #12]
  28964. }
  28965. if (IS_TIM_CLOCK_DIVISION_INSTANCE(TIMx))
  28966. 800c69e: 687b ldr r3, [r7, #4]
  28967. 800c6a0: 4a35 ldr r2, [pc, #212] @ (800c778 <TIM_Base_SetConfig+0x12c>)
  28968. 800c6a2: 4293 cmp r3, r2
  28969. 800c6a4: d01f beq.n 800c6e6 <TIM_Base_SetConfig+0x9a>
  28970. 800c6a6: 687b ldr r3, [r7, #4]
  28971. 800c6a8: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  28972. 800c6ac: d01b beq.n 800c6e6 <TIM_Base_SetConfig+0x9a>
  28973. 800c6ae: 687b ldr r3, [r7, #4]
  28974. 800c6b0: 4a32 ldr r2, [pc, #200] @ (800c77c <TIM_Base_SetConfig+0x130>)
  28975. 800c6b2: 4293 cmp r3, r2
  28976. 800c6b4: d017 beq.n 800c6e6 <TIM_Base_SetConfig+0x9a>
  28977. 800c6b6: 687b ldr r3, [r7, #4]
  28978. 800c6b8: 4a31 ldr r2, [pc, #196] @ (800c780 <TIM_Base_SetConfig+0x134>)
  28979. 800c6ba: 4293 cmp r3, r2
  28980. 800c6bc: d013 beq.n 800c6e6 <TIM_Base_SetConfig+0x9a>
  28981. 800c6be: 687b ldr r3, [r7, #4]
  28982. 800c6c0: 4a30 ldr r2, [pc, #192] @ (800c784 <TIM_Base_SetConfig+0x138>)
  28983. 800c6c2: 4293 cmp r3, r2
  28984. 800c6c4: d00f beq.n 800c6e6 <TIM_Base_SetConfig+0x9a>
  28985. 800c6c6: 687b ldr r3, [r7, #4]
  28986. 800c6c8: 4a2f ldr r2, [pc, #188] @ (800c788 <TIM_Base_SetConfig+0x13c>)
  28987. 800c6ca: 4293 cmp r3, r2
  28988. 800c6cc: d00b beq.n 800c6e6 <TIM_Base_SetConfig+0x9a>
  28989. 800c6ce: 687b ldr r3, [r7, #4]
  28990. 800c6d0: 4a2e ldr r2, [pc, #184] @ (800c78c <TIM_Base_SetConfig+0x140>)
  28991. 800c6d2: 4293 cmp r3, r2
  28992. 800c6d4: d007 beq.n 800c6e6 <TIM_Base_SetConfig+0x9a>
  28993. 800c6d6: 687b ldr r3, [r7, #4]
  28994. 800c6d8: 4a2d ldr r2, [pc, #180] @ (800c790 <TIM_Base_SetConfig+0x144>)
  28995. 800c6da: 4293 cmp r3, r2
  28996. 800c6dc: d003 beq.n 800c6e6 <TIM_Base_SetConfig+0x9a>
  28997. 800c6de: 687b ldr r3, [r7, #4]
  28998. 800c6e0: 4a2c ldr r2, [pc, #176] @ (800c794 <TIM_Base_SetConfig+0x148>)
  28999. 800c6e2: 4293 cmp r3, r2
  29000. 800c6e4: d108 bne.n 800c6f8 <TIM_Base_SetConfig+0xac>
  29001. {
  29002. /* Set the clock division */
  29003. tmpcr1 &= ~TIM_CR1_CKD;
  29004. 800c6e6: 68fb ldr r3, [r7, #12]
  29005. 800c6e8: f423 7340 bic.w r3, r3, #768 @ 0x300
  29006. 800c6ec: 60fb str r3, [r7, #12]
  29007. tmpcr1 |= (uint32_t)Structure->ClockDivision;
  29008. 800c6ee: 683b ldr r3, [r7, #0]
  29009. 800c6f0: 68db ldr r3, [r3, #12]
  29010. 800c6f2: 68fa ldr r2, [r7, #12]
  29011. 800c6f4: 4313 orrs r3, r2
  29012. 800c6f6: 60fb str r3, [r7, #12]
  29013. }
  29014. /* Set the auto-reload preload */
  29015. MODIFY_REG(tmpcr1, TIM_CR1_ARPE, Structure->AutoReloadPreload);
  29016. 800c6f8: 68fb ldr r3, [r7, #12]
  29017. 800c6fa: f023 0280 bic.w r2, r3, #128 @ 0x80
  29018. 800c6fe: 683b ldr r3, [r7, #0]
  29019. 800c700: 695b ldr r3, [r3, #20]
  29020. 800c702: 4313 orrs r3, r2
  29021. 800c704: 60fb str r3, [r7, #12]
  29022. TIMx->CR1 = tmpcr1;
  29023. 800c706: 687b ldr r3, [r7, #4]
  29024. 800c708: 68fa ldr r2, [r7, #12]
  29025. 800c70a: 601a str r2, [r3, #0]
  29026. /* Set the Autoreload value */
  29027. TIMx->ARR = (uint32_t)Structure->Period ;
  29028. 800c70c: 683b ldr r3, [r7, #0]
  29029. 800c70e: 689a ldr r2, [r3, #8]
  29030. 800c710: 687b ldr r3, [r7, #4]
  29031. 800c712: 62da str r2, [r3, #44] @ 0x2c
  29032. /* Set the Prescaler value */
  29033. TIMx->PSC = Structure->Prescaler;
  29034. 800c714: 683b ldr r3, [r7, #0]
  29035. 800c716: 681a ldr r2, [r3, #0]
  29036. 800c718: 687b ldr r3, [r7, #4]
  29037. 800c71a: 629a str r2, [r3, #40] @ 0x28
  29038. if (IS_TIM_REPETITION_COUNTER_INSTANCE(TIMx))
  29039. 800c71c: 687b ldr r3, [r7, #4]
  29040. 800c71e: 4a16 ldr r2, [pc, #88] @ (800c778 <TIM_Base_SetConfig+0x12c>)
  29041. 800c720: 4293 cmp r3, r2
  29042. 800c722: d00f beq.n 800c744 <TIM_Base_SetConfig+0xf8>
  29043. 800c724: 687b ldr r3, [r7, #4]
  29044. 800c726: 4a18 ldr r2, [pc, #96] @ (800c788 <TIM_Base_SetConfig+0x13c>)
  29045. 800c728: 4293 cmp r3, r2
  29046. 800c72a: d00b beq.n 800c744 <TIM_Base_SetConfig+0xf8>
  29047. 800c72c: 687b ldr r3, [r7, #4]
  29048. 800c72e: 4a17 ldr r2, [pc, #92] @ (800c78c <TIM_Base_SetConfig+0x140>)
  29049. 800c730: 4293 cmp r3, r2
  29050. 800c732: d007 beq.n 800c744 <TIM_Base_SetConfig+0xf8>
  29051. 800c734: 687b ldr r3, [r7, #4]
  29052. 800c736: 4a16 ldr r2, [pc, #88] @ (800c790 <TIM_Base_SetConfig+0x144>)
  29053. 800c738: 4293 cmp r3, r2
  29054. 800c73a: d003 beq.n 800c744 <TIM_Base_SetConfig+0xf8>
  29055. 800c73c: 687b ldr r3, [r7, #4]
  29056. 800c73e: 4a15 ldr r2, [pc, #84] @ (800c794 <TIM_Base_SetConfig+0x148>)
  29057. 800c740: 4293 cmp r3, r2
  29058. 800c742: d103 bne.n 800c74c <TIM_Base_SetConfig+0x100>
  29059. {
  29060. /* Set the Repetition Counter value */
  29061. TIMx->RCR = Structure->RepetitionCounter;
  29062. 800c744: 683b ldr r3, [r7, #0]
  29063. 800c746: 691a ldr r2, [r3, #16]
  29064. 800c748: 687b ldr r3, [r7, #4]
  29065. 800c74a: 631a str r2, [r3, #48] @ 0x30
  29066. }
  29067. /* Generate an update event to reload the Prescaler
  29068. and the repetition counter (only for advanced timer) value immediately */
  29069. TIMx->EGR = TIM_EGR_UG;
  29070. 800c74c: 687b ldr r3, [r7, #4]
  29071. 800c74e: 2201 movs r2, #1
  29072. 800c750: 615a str r2, [r3, #20]
  29073. /* Check if the update flag is set after the Update Generation, if so clear the UIF flag */
  29074. if (HAL_IS_BIT_SET(TIMx->SR, TIM_FLAG_UPDATE))
  29075. 800c752: 687b ldr r3, [r7, #4]
  29076. 800c754: 691b ldr r3, [r3, #16]
  29077. 800c756: f003 0301 and.w r3, r3, #1
  29078. 800c75a: 2b01 cmp r3, #1
  29079. 800c75c: d105 bne.n 800c76a <TIM_Base_SetConfig+0x11e>
  29080. {
  29081. /* Clear the update flag */
  29082. CLEAR_BIT(TIMx->SR, TIM_FLAG_UPDATE);
  29083. 800c75e: 687b ldr r3, [r7, #4]
  29084. 800c760: 691b ldr r3, [r3, #16]
  29085. 800c762: f023 0201 bic.w r2, r3, #1
  29086. 800c766: 687b ldr r3, [r7, #4]
  29087. 800c768: 611a str r2, [r3, #16]
  29088. }
  29089. }
  29090. 800c76a: bf00 nop
  29091. 800c76c: 3714 adds r7, #20
  29092. 800c76e: 46bd mov sp, r7
  29093. 800c770: f85d 7b04 ldr.w r7, [sp], #4
  29094. 800c774: 4770 bx lr
  29095. 800c776: bf00 nop
  29096. 800c778: 40010000 .word 0x40010000
  29097. 800c77c: 40000400 .word 0x40000400
  29098. 800c780: 40000800 .word 0x40000800
  29099. 800c784: 40000c00 .word 0x40000c00
  29100. 800c788: 40010400 .word 0x40010400
  29101. 800c78c: 40014000 .word 0x40014000
  29102. 800c790: 40014400 .word 0x40014400
  29103. 800c794: 40014800 .word 0x40014800
  29104. 0800c798 <TIM_TI1_ConfigInputStage>:
  29105. * @param TIM_ICFilter Specifies the Input Capture Filter.
  29106. * This parameter must be a value between 0x00 and 0x0F.
  29107. * @retval None
  29108. */
  29109. static void TIM_TI1_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter)
  29110. {
  29111. 800c798: b480 push {r7}
  29112. 800c79a: b087 sub sp, #28
  29113. 800c79c: af00 add r7, sp, #0
  29114. 800c79e: 60f8 str r0, [r7, #12]
  29115. 800c7a0: 60b9 str r1, [r7, #8]
  29116. 800c7a2: 607a str r2, [r7, #4]
  29117. uint32_t tmpccmr1;
  29118. uint32_t tmpccer;
  29119. /* Disable the Channel 1: Reset the CC1E Bit */
  29120. tmpccer = TIMx->CCER;
  29121. 800c7a4: 68fb ldr r3, [r7, #12]
  29122. 800c7a6: 6a1b ldr r3, [r3, #32]
  29123. 800c7a8: 617b str r3, [r7, #20]
  29124. TIMx->CCER &= ~TIM_CCER_CC1E;
  29125. 800c7aa: 68fb ldr r3, [r7, #12]
  29126. 800c7ac: 6a1b ldr r3, [r3, #32]
  29127. 800c7ae: f023 0201 bic.w r2, r3, #1
  29128. 800c7b2: 68fb ldr r3, [r7, #12]
  29129. 800c7b4: 621a str r2, [r3, #32]
  29130. tmpccmr1 = TIMx->CCMR1;
  29131. 800c7b6: 68fb ldr r3, [r7, #12]
  29132. 800c7b8: 699b ldr r3, [r3, #24]
  29133. 800c7ba: 613b str r3, [r7, #16]
  29134. /* Set the filter */
  29135. tmpccmr1 &= ~TIM_CCMR1_IC1F;
  29136. 800c7bc: 693b ldr r3, [r7, #16]
  29137. 800c7be: f023 03f0 bic.w r3, r3, #240 @ 0xf0
  29138. 800c7c2: 613b str r3, [r7, #16]
  29139. tmpccmr1 |= (TIM_ICFilter << 4U);
  29140. 800c7c4: 687b ldr r3, [r7, #4]
  29141. 800c7c6: 011b lsls r3, r3, #4
  29142. 800c7c8: 693a ldr r2, [r7, #16]
  29143. 800c7ca: 4313 orrs r3, r2
  29144. 800c7cc: 613b str r3, [r7, #16]
  29145. /* Select the Polarity and set the CC1E Bit */
  29146. tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP);
  29147. 800c7ce: 697b ldr r3, [r7, #20]
  29148. 800c7d0: f023 030a bic.w r3, r3, #10
  29149. 800c7d4: 617b str r3, [r7, #20]
  29150. tmpccer |= TIM_ICPolarity;
  29151. 800c7d6: 697a ldr r2, [r7, #20]
  29152. 800c7d8: 68bb ldr r3, [r7, #8]
  29153. 800c7da: 4313 orrs r3, r2
  29154. 800c7dc: 617b str r3, [r7, #20]
  29155. /* Write to TIMx CCMR1 and CCER registers */
  29156. TIMx->CCMR1 = tmpccmr1;
  29157. 800c7de: 68fb ldr r3, [r7, #12]
  29158. 800c7e0: 693a ldr r2, [r7, #16]
  29159. 800c7e2: 619a str r2, [r3, #24]
  29160. TIMx->CCER = tmpccer;
  29161. 800c7e4: 68fb ldr r3, [r7, #12]
  29162. 800c7e6: 697a ldr r2, [r7, #20]
  29163. 800c7e8: 621a str r2, [r3, #32]
  29164. }
  29165. 800c7ea: bf00 nop
  29166. 800c7ec: 371c adds r7, #28
  29167. 800c7ee: 46bd mov sp, r7
  29168. 800c7f0: f85d 7b04 ldr.w r7, [sp], #4
  29169. 800c7f4: 4770 bx lr
  29170. 0800c7f6 <TIM_TI2_ConfigInputStage>:
  29171. * @param TIM_ICFilter Specifies the Input Capture Filter.
  29172. * This parameter must be a value between 0x00 and 0x0F.
  29173. * @retval None
  29174. */
  29175. static void TIM_TI2_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter)
  29176. {
  29177. 800c7f6: b480 push {r7}
  29178. 800c7f8: b087 sub sp, #28
  29179. 800c7fa: af00 add r7, sp, #0
  29180. 800c7fc: 60f8 str r0, [r7, #12]
  29181. 800c7fe: 60b9 str r1, [r7, #8]
  29182. 800c800: 607a str r2, [r7, #4]
  29183. uint32_t tmpccmr1;
  29184. uint32_t tmpccer;
  29185. /* Disable the Channel 2: Reset the CC2E Bit */
  29186. tmpccer = TIMx->CCER;
  29187. 800c802: 68fb ldr r3, [r7, #12]
  29188. 800c804: 6a1b ldr r3, [r3, #32]
  29189. 800c806: 617b str r3, [r7, #20]
  29190. TIMx->CCER &= ~TIM_CCER_CC2E;
  29191. 800c808: 68fb ldr r3, [r7, #12]
  29192. 800c80a: 6a1b ldr r3, [r3, #32]
  29193. 800c80c: f023 0210 bic.w r2, r3, #16
  29194. 800c810: 68fb ldr r3, [r7, #12]
  29195. 800c812: 621a str r2, [r3, #32]
  29196. tmpccmr1 = TIMx->CCMR1;
  29197. 800c814: 68fb ldr r3, [r7, #12]
  29198. 800c816: 699b ldr r3, [r3, #24]
  29199. 800c818: 613b str r3, [r7, #16]
  29200. /* Set the filter */
  29201. tmpccmr1 &= ~TIM_CCMR1_IC2F;
  29202. 800c81a: 693b ldr r3, [r7, #16]
  29203. 800c81c: f423 4370 bic.w r3, r3, #61440 @ 0xf000
  29204. 800c820: 613b str r3, [r7, #16]
  29205. tmpccmr1 |= (TIM_ICFilter << 12U);
  29206. 800c822: 687b ldr r3, [r7, #4]
  29207. 800c824: 031b lsls r3, r3, #12
  29208. 800c826: 693a ldr r2, [r7, #16]
  29209. 800c828: 4313 orrs r3, r2
  29210. 800c82a: 613b str r3, [r7, #16]
  29211. /* Select the Polarity and set the CC2E Bit */
  29212. tmpccer &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP);
  29213. 800c82c: 697b ldr r3, [r7, #20]
  29214. 800c82e: f023 03a0 bic.w r3, r3, #160 @ 0xa0
  29215. 800c832: 617b str r3, [r7, #20]
  29216. tmpccer |= (TIM_ICPolarity << 4U);
  29217. 800c834: 68bb ldr r3, [r7, #8]
  29218. 800c836: 011b lsls r3, r3, #4
  29219. 800c838: 697a ldr r2, [r7, #20]
  29220. 800c83a: 4313 orrs r3, r2
  29221. 800c83c: 617b str r3, [r7, #20]
  29222. /* Write to TIMx CCMR1 and CCER registers */
  29223. TIMx->CCMR1 = tmpccmr1 ;
  29224. 800c83e: 68fb ldr r3, [r7, #12]
  29225. 800c840: 693a ldr r2, [r7, #16]
  29226. 800c842: 619a str r2, [r3, #24]
  29227. TIMx->CCER = tmpccer;
  29228. 800c844: 68fb ldr r3, [r7, #12]
  29229. 800c846: 697a ldr r2, [r7, #20]
  29230. 800c848: 621a str r2, [r3, #32]
  29231. }
  29232. 800c84a: bf00 nop
  29233. 800c84c: 371c adds r7, #28
  29234. 800c84e: 46bd mov sp, r7
  29235. 800c850: f85d 7b04 ldr.w r7, [sp], #4
  29236. 800c854: 4770 bx lr
  29237. ...
  29238. 0800c858 <TIM_ITRx_SetConfig>:
  29239. * (*) Value not defined in all devices.
  29240. *
  29241. * @retval None
  29242. */
  29243. static void TIM_ITRx_SetConfig(TIM_TypeDef *TIMx, uint32_t InputTriggerSource)
  29244. {
  29245. 800c858: b480 push {r7}
  29246. 800c85a: b085 sub sp, #20
  29247. 800c85c: af00 add r7, sp, #0
  29248. 800c85e: 6078 str r0, [r7, #4]
  29249. 800c860: 6039 str r1, [r7, #0]
  29250. uint32_t tmpsmcr;
  29251. /* Get the TIMx SMCR register value */
  29252. tmpsmcr = TIMx->SMCR;
  29253. 800c862: 687b ldr r3, [r7, #4]
  29254. 800c864: 689b ldr r3, [r3, #8]
  29255. 800c866: 60fb str r3, [r7, #12]
  29256. /* Reset the TS Bits */
  29257. tmpsmcr &= ~TIM_SMCR_TS;
  29258. 800c868: 68fa ldr r2, [r7, #12]
  29259. 800c86a: 4b09 ldr r3, [pc, #36] @ (800c890 <TIM_ITRx_SetConfig+0x38>)
  29260. 800c86c: 4013 ands r3, r2
  29261. 800c86e: 60fb str r3, [r7, #12]
  29262. /* Set the Input Trigger source and the slave mode*/
  29263. tmpsmcr |= (InputTriggerSource | TIM_SLAVEMODE_EXTERNAL1);
  29264. 800c870: 683a ldr r2, [r7, #0]
  29265. 800c872: 68fb ldr r3, [r7, #12]
  29266. 800c874: 4313 orrs r3, r2
  29267. 800c876: f043 0307 orr.w r3, r3, #7
  29268. 800c87a: 60fb str r3, [r7, #12]
  29269. /* Write to TIMx SMCR */
  29270. TIMx->SMCR = tmpsmcr;
  29271. 800c87c: 687b ldr r3, [r7, #4]
  29272. 800c87e: 68fa ldr r2, [r7, #12]
  29273. 800c880: 609a str r2, [r3, #8]
  29274. }
  29275. 800c882: bf00 nop
  29276. 800c884: 3714 adds r7, #20
  29277. 800c886: 46bd mov sp, r7
  29278. 800c888: f85d 7b04 ldr.w r7, [sp], #4
  29279. 800c88c: 4770 bx lr
  29280. 800c88e: bf00 nop
  29281. 800c890: ffcfff8f .word 0xffcfff8f
  29282. 0800c894 <TIM_ETR_SetConfig>:
  29283. * This parameter must be a value between 0x00 and 0x0F
  29284. * @retval None
  29285. */
  29286. void TIM_ETR_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ExtTRGPrescaler,
  29287. uint32_t TIM_ExtTRGPolarity, uint32_t ExtTRGFilter)
  29288. {
  29289. 800c894: b480 push {r7}
  29290. 800c896: b087 sub sp, #28
  29291. 800c898: af00 add r7, sp, #0
  29292. 800c89a: 60f8 str r0, [r7, #12]
  29293. 800c89c: 60b9 str r1, [r7, #8]
  29294. 800c89e: 607a str r2, [r7, #4]
  29295. 800c8a0: 603b str r3, [r7, #0]
  29296. uint32_t tmpsmcr;
  29297. tmpsmcr = TIMx->SMCR;
  29298. 800c8a2: 68fb ldr r3, [r7, #12]
  29299. 800c8a4: 689b ldr r3, [r3, #8]
  29300. 800c8a6: 617b str r3, [r7, #20]
  29301. /* Reset the ETR Bits */
  29302. tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP);
  29303. 800c8a8: 697b ldr r3, [r7, #20]
  29304. 800c8aa: f423 437f bic.w r3, r3, #65280 @ 0xff00
  29305. 800c8ae: 617b str r3, [r7, #20]
  29306. /* Set the Prescaler, the Filter value and the Polarity */
  29307. tmpsmcr |= (uint32_t)(TIM_ExtTRGPrescaler | (TIM_ExtTRGPolarity | (ExtTRGFilter << 8U)));
  29308. 800c8b0: 683b ldr r3, [r7, #0]
  29309. 800c8b2: 021a lsls r2, r3, #8
  29310. 800c8b4: 687b ldr r3, [r7, #4]
  29311. 800c8b6: 431a orrs r2, r3
  29312. 800c8b8: 68bb ldr r3, [r7, #8]
  29313. 800c8ba: 4313 orrs r3, r2
  29314. 800c8bc: 697a ldr r2, [r7, #20]
  29315. 800c8be: 4313 orrs r3, r2
  29316. 800c8c0: 617b str r3, [r7, #20]
  29317. /* Write to TIMx SMCR */
  29318. TIMx->SMCR = tmpsmcr;
  29319. 800c8c2: 68fb ldr r3, [r7, #12]
  29320. 800c8c4: 697a ldr r2, [r7, #20]
  29321. 800c8c6: 609a str r2, [r3, #8]
  29322. }
  29323. 800c8c8: bf00 nop
  29324. 800c8ca: 371c adds r7, #28
  29325. 800c8cc: 46bd mov sp, r7
  29326. 800c8ce: f85d 7b04 ldr.w r7, [sp], #4
  29327. 800c8d2: 4770 bx lr
  29328. 0800c8d4 <HAL_TIMEx_MasterConfigSynchronization>:
  29329. * mode.
  29330. * @retval HAL status
  29331. */
  29332. HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
  29333. const TIM_MasterConfigTypeDef *sMasterConfig)
  29334. {
  29335. 800c8d4: b480 push {r7}
  29336. 800c8d6: b085 sub sp, #20
  29337. 800c8d8: af00 add r7, sp, #0
  29338. 800c8da: 6078 str r0, [r7, #4]
  29339. 800c8dc: 6039 str r1, [r7, #0]
  29340. assert_param(IS_TIM_MASTER_INSTANCE(htim->Instance));
  29341. assert_param(IS_TIM_TRGO_SOURCE(sMasterConfig->MasterOutputTrigger));
  29342. assert_param(IS_TIM_MSM_STATE(sMasterConfig->MasterSlaveMode));
  29343. /* Check input state */
  29344. __HAL_LOCK(htim);
  29345. 800c8de: 687b ldr r3, [r7, #4]
  29346. 800c8e0: f893 303c ldrb.w r3, [r3, #60] @ 0x3c
  29347. 800c8e4: 2b01 cmp r3, #1
  29348. 800c8e6: d101 bne.n 800c8ec <HAL_TIMEx_MasterConfigSynchronization+0x18>
  29349. 800c8e8: 2302 movs r3, #2
  29350. 800c8ea: e06d b.n 800c9c8 <HAL_TIMEx_MasterConfigSynchronization+0xf4>
  29351. 800c8ec: 687b ldr r3, [r7, #4]
  29352. 800c8ee: 2201 movs r2, #1
  29353. 800c8f0: f883 203c strb.w r2, [r3, #60] @ 0x3c
  29354. /* Change the handler state */
  29355. htim->State = HAL_TIM_STATE_BUSY;
  29356. 800c8f4: 687b ldr r3, [r7, #4]
  29357. 800c8f6: 2202 movs r2, #2
  29358. 800c8f8: f883 203d strb.w r2, [r3, #61] @ 0x3d
  29359. /* Get the TIMx CR2 register value */
  29360. tmpcr2 = htim->Instance->CR2;
  29361. 800c8fc: 687b ldr r3, [r7, #4]
  29362. 800c8fe: 681b ldr r3, [r3, #0]
  29363. 800c900: 685b ldr r3, [r3, #4]
  29364. 800c902: 60fb str r3, [r7, #12]
  29365. /* Get the TIMx SMCR register value */
  29366. tmpsmcr = htim->Instance->SMCR;
  29367. 800c904: 687b ldr r3, [r7, #4]
  29368. 800c906: 681b ldr r3, [r3, #0]
  29369. 800c908: 689b ldr r3, [r3, #8]
  29370. 800c90a: 60bb str r3, [r7, #8]
  29371. /* If the timer supports ADC synchronization through TRGO2, set the master mode selection 2 */
  29372. if (IS_TIM_TRGO2_INSTANCE(htim->Instance))
  29373. 800c90c: 687b ldr r3, [r7, #4]
  29374. 800c90e: 681b ldr r3, [r3, #0]
  29375. 800c910: 4a30 ldr r2, [pc, #192] @ (800c9d4 <HAL_TIMEx_MasterConfigSynchronization+0x100>)
  29376. 800c912: 4293 cmp r3, r2
  29377. 800c914: d004 beq.n 800c920 <HAL_TIMEx_MasterConfigSynchronization+0x4c>
  29378. 800c916: 687b ldr r3, [r7, #4]
  29379. 800c918: 681b ldr r3, [r3, #0]
  29380. 800c91a: 4a2f ldr r2, [pc, #188] @ (800c9d8 <HAL_TIMEx_MasterConfigSynchronization+0x104>)
  29381. 800c91c: 4293 cmp r3, r2
  29382. 800c91e: d108 bne.n 800c932 <HAL_TIMEx_MasterConfigSynchronization+0x5e>
  29383. {
  29384. /* Check the parameters */
  29385. assert_param(IS_TIM_TRGO2_SOURCE(sMasterConfig->MasterOutputTrigger2));
  29386. /* Clear the MMS2 bits */
  29387. tmpcr2 &= ~TIM_CR2_MMS2;
  29388. 800c920: 68fb ldr r3, [r7, #12]
  29389. 800c922: f423 0370 bic.w r3, r3, #15728640 @ 0xf00000
  29390. 800c926: 60fb str r3, [r7, #12]
  29391. /* Select the TRGO2 source*/
  29392. tmpcr2 |= sMasterConfig->MasterOutputTrigger2;
  29393. 800c928: 683b ldr r3, [r7, #0]
  29394. 800c92a: 685b ldr r3, [r3, #4]
  29395. 800c92c: 68fa ldr r2, [r7, #12]
  29396. 800c92e: 4313 orrs r3, r2
  29397. 800c930: 60fb str r3, [r7, #12]
  29398. }
  29399. /* Reset the MMS Bits */
  29400. tmpcr2 &= ~TIM_CR2_MMS;
  29401. 800c932: 68fb ldr r3, [r7, #12]
  29402. 800c934: f023 0370 bic.w r3, r3, #112 @ 0x70
  29403. 800c938: 60fb str r3, [r7, #12]
  29404. /* Select the TRGO source */
  29405. tmpcr2 |= sMasterConfig->MasterOutputTrigger;
  29406. 800c93a: 683b ldr r3, [r7, #0]
  29407. 800c93c: 681b ldr r3, [r3, #0]
  29408. 800c93e: 68fa ldr r2, [r7, #12]
  29409. 800c940: 4313 orrs r3, r2
  29410. 800c942: 60fb str r3, [r7, #12]
  29411. /* Update TIMx CR2 */
  29412. htim->Instance->CR2 = tmpcr2;
  29413. 800c944: 687b ldr r3, [r7, #4]
  29414. 800c946: 681b ldr r3, [r3, #0]
  29415. 800c948: 68fa ldr r2, [r7, #12]
  29416. 800c94a: 605a str r2, [r3, #4]
  29417. if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
  29418. 800c94c: 687b ldr r3, [r7, #4]
  29419. 800c94e: 681b ldr r3, [r3, #0]
  29420. 800c950: 4a20 ldr r2, [pc, #128] @ (800c9d4 <HAL_TIMEx_MasterConfigSynchronization+0x100>)
  29421. 800c952: 4293 cmp r3, r2
  29422. 800c954: d022 beq.n 800c99c <HAL_TIMEx_MasterConfigSynchronization+0xc8>
  29423. 800c956: 687b ldr r3, [r7, #4]
  29424. 800c958: 681b ldr r3, [r3, #0]
  29425. 800c95a: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
  29426. 800c95e: d01d beq.n 800c99c <HAL_TIMEx_MasterConfigSynchronization+0xc8>
  29427. 800c960: 687b ldr r3, [r7, #4]
  29428. 800c962: 681b ldr r3, [r3, #0]
  29429. 800c964: 4a1d ldr r2, [pc, #116] @ (800c9dc <HAL_TIMEx_MasterConfigSynchronization+0x108>)
  29430. 800c966: 4293 cmp r3, r2
  29431. 800c968: d018 beq.n 800c99c <HAL_TIMEx_MasterConfigSynchronization+0xc8>
  29432. 800c96a: 687b ldr r3, [r7, #4]
  29433. 800c96c: 681b ldr r3, [r3, #0]
  29434. 800c96e: 4a1c ldr r2, [pc, #112] @ (800c9e0 <HAL_TIMEx_MasterConfigSynchronization+0x10c>)
  29435. 800c970: 4293 cmp r3, r2
  29436. 800c972: d013 beq.n 800c99c <HAL_TIMEx_MasterConfigSynchronization+0xc8>
  29437. 800c974: 687b ldr r3, [r7, #4]
  29438. 800c976: 681b ldr r3, [r3, #0]
  29439. 800c978: 4a1a ldr r2, [pc, #104] @ (800c9e4 <HAL_TIMEx_MasterConfigSynchronization+0x110>)
  29440. 800c97a: 4293 cmp r3, r2
  29441. 800c97c: d00e beq.n 800c99c <HAL_TIMEx_MasterConfigSynchronization+0xc8>
  29442. 800c97e: 687b ldr r3, [r7, #4]
  29443. 800c980: 681b ldr r3, [r3, #0]
  29444. 800c982: 4a15 ldr r2, [pc, #84] @ (800c9d8 <HAL_TIMEx_MasterConfigSynchronization+0x104>)
  29445. 800c984: 4293 cmp r3, r2
  29446. 800c986: d009 beq.n 800c99c <HAL_TIMEx_MasterConfigSynchronization+0xc8>
  29447. 800c988: 687b ldr r3, [r7, #4]
  29448. 800c98a: 681b ldr r3, [r3, #0]
  29449. 800c98c: 4a16 ldr r2, [pc, #88] @ (800c9e8 <HAL_TIMEx_MasterConfigSynchronization+0x114>)
  29450. 800c98e: 4293 cmp r3, r2
  29451. 800c990: d004 beq.n 800c99c <HAL_TIMEx_MasterConfigSynchronization+0xc8>
  29452. 800c992: 687b ldr r3, [r7, #4]
  29453. 800c994: 681b ldr r3, [r3, #0]
  29454. 800c996: 4a15 ldr r2, [pc, #84] @ (800c9ec <HAL_TIMEx_MasterConfigSynchronization+0x118>)
  29455. 800c998: 4293 cmp r3, r2
  29456. 800c99a: d10c bne.n 800c9b6 <HAL_TIMEx_MasterConfigSynchronization+0xe2>
  29457. {
  29458. /* Reset the MSM Bit */
  29459. tmpsmcr &= ~TIM_SMCR_MSM;
  29460. 800c99c: 68bb ldr r3, [r7, #8]
  29461. 800c99e: f023 0380 bic.w r3, r3, #128 @ 0x80
  29462. 800c9a2: 60bb str r3, [r7, #8]
  29463. /* Set master mode */
  29464. tmpsmcr |= sMasterConfig->MasterSlaveMode;
  29465. 800c9a4: 683b ldr r3, [r7, #0]
  29466. 800c9a6: 689b ldr r3, [r3, #8]
  29467. 800c9a8: 68ba ldr r2, [r7, #8]
  29468. 800c9aa: 4313 orrs r3, r2
  29469. 800c9ac: 60bb str r3, [r7, #8]
  29470. /* Update TIMx SMCR */
  29471. htim->Instance->SMCR = tmpsmcr;
  29472. 800c9ae: 687b ldr r3, [r7, #4]
  29473. 800c9b0: 681b ldr r3, [r3, #0]
  29474. 800c9b2: 68ba ldr r2, [r7, #8]
  29475. 800c9b4: 609a str r2, [r3, #8]
  29476. }
  29477. /* Change the htim state */
  29478. htim->State = HAL_TIM_STATE_READY;
  29479. 800c9b6: 687b ldr r3, [r7, #4]
  29480. 800c9b8: 2201 movs r2, #1
  29481. 800c9ba: f883 203d strb.w r2, [r3, #61] @ 0x3d
  29482. __HAL_UNLOCK(htim);
  29483. 800c9be: 687b ldr r3, [r7, #4]
  29484. 800c9c0: 2200 movs r2, #0
  29485. 800c9c2: f883 203c strb.w r2, [r3, #60] @ 0x3c
  29486. return HAL_OK;
  29487. 800c9c6: 2300 movs r3, #0
  29488. }
  29489. 800c9c8: 4618 mov r0, r3
  29490. 800c9ca: 3714 adds r7, #20
  29491. 800c9cc: 46bd mov sp, r7
  29492. 800c9ce: f85d 7b04 ldr.w r7, [sp], #4
  29493. 800c9d2: 4770 bx lr
  29494. 800c9d4: 40010000 .word 0x40010000
  29495. 800c9d8: 40010400 .word 0x40010400
  29496. 800c9dc: 40000400 .word 0x40000400
  29497. 800c9e0: 40000800 .word 0x40000800
  29498. 800c9e4: 40000c00 .word 0x40000c00
  29499. 800c9e8: 40001800 .word 0x40001800
  29500. 800c9ec: 40014000 .word 0x40014000
  29501. 0800c9f0 <HAL_TIMEx_CommutCallback>:
  29502. * @brief Commutation callback in non-blocking mode
  29503. * @param htim TIM handle
  29504. * @retval None
  29505. */
  29506. __weak void HAL_TIMEx_CommutCallback(TIM_HandleTypeDef *htim)
  29507. {
  29508. 800c9f0: b480 push {r7}
  29509. 800c9f2: b083 sub sp, #12
  29510. 800c9f4: af00 add r7, sp, #0
  29511. 800c9f6: 6078 str r0, [r7, #4]
  29512. UNUSED(htim);
  29513. /* NOTE : This function should not be modified, when the callback is needed,
  29514. the HAL_TIMEx_CommutCallback could be implemented in the user file
  29515. */
  29516. }
  29517. 800c9f8: bf00 nop
  29518. 800c9fa: 370c adds r7, #12
  29519. 800c9fc: 46bd mov sp, r7
  29520. 800c9fe: f85d 7b04 ldr.w r7, [sp], #4
  29521. 800ca02: 4770 bx lr
  29522. 0800ca04 <HAL_TIMEx_BreakCallback>:
  29523. * @brief Break detection callback in non-blocking mode
  29524. * @param htim TIM handle
  29525. * @retval None
  29526. */
  29527. __weak void HAL_TIMEx_BreakCallback(TIM_HandleTypeDef *htim)
  29528. {
  29529. 800ca04: b480 push {r7}
  29530. 800ca06: b083 sub sp, #12
  29531. 800ca08: af00 add r7, sp, #0
  29532. 800ca0a: 6078 str r0, [r7, #4]
  29533. UNUSED(htim);
  29534. /* NOTE : This function should not be modified, when the callback is needed,
  29535. the HAL_TIMEx_BreakCallback could be implemented in the user file
  29536. */
  29537. }
  29538. 800ca0c: bf00 nop
  29539. 800ca0e: 370c adds r7, #12
  29540. 800ca10: 46bd mov sp, r7
  29541. 800ca12: f85d 7b04 ldr.w r7, [sp], #4
  29542. 800ca16: 4770 bx lr
  29543. 0800ca18 <HAL_TIMEx_Break2Callback>:
  29544. * @brief Break2 detection callback in non blocking mode
  29545. * @param htim: TIM handle
  29546. * @retval None
  29547. */
  29548. __weak void HAL_TIMEx_Break2Callback(TIM_HandleTypeDef *htim)
  29549. {
  29550. 800ca18: b480 push {r7}
  29551. 800ca1a: b083 sub sp, #12
  29552. 800ca1c: af00 add r7, sp, #0
  29553. 800ca1e: 6078 str r0, [r7, #4]
  29554. UNUSED(htim);
  29555. /* NOTE : This function Should not be modified, when the callback is needed,
  29556. the HAL_TIMEx_Break2Callback could be implemented in the user file
  29557. */
  29558. }
  29559. 800ca20: bf00 nop
  29560. 800ca22: 370c adds r7, #12
  29561. 800ca24: 46bd mov sp, r7
  29562. 800ca26: f85d 7b04 ldr.w r7, [sp], #4
  29563. 800ca2a: 4770 bx lr
  29564. 0800ca2c <HAL_UART_Init>:
  29565. * parameters in the UART_InitTypeDef and initialize the associated handle.
  29566. * @param huart UART handle.
  29567. * @retval HAL status
  29568. */
  29569. HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart)
  29570. {
  29571. 800ca2c: b580 push {r7, lr}
  29572. 800ca2e: b082 sub sp, #8
  29573. 800ca30: af00 add r7, sp, #0
  29574. 800ca32: 6078 str r0, [r7, #4]
  29575. /* Check the UART handle allocation */
  29576. if (huart == NULL)
  29577. 800ca34: 687b ldr r3, [r7, #4]
  29578. 800ca36: 2b00 cmp r3, #0
  29579. 800ca38: d101 bne.n 800ca3e <HAL_UART_Init+0x12>
  29580. {
  29581. return HAL_ERROR;
  29582. 800ca3a: 2301 movs r3, #1
  29583. 800ca3c: e042 b.n 800cac4 <HAL_UART_Init+0x98>
  29584. {
  29585. /* Check the parameters */
  29586. assert_param((IS_UART_INSTANCE(huart->Instance)) || (IS_LPUART_INSTANCE(huart->Instance)));
  29587. }
  29588. if (huart->gState == HAL_UART_STATE_RESET)
  29589. 800ca3e: 687b ldr r3, [r7, #4]
  29590. 800ca40: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  29591. 800ca44: 2b00 cmp r3, #0
  29592. 800ca46: d106 bne.n 800ca56 <HAL_UART_Init+0x2a>
  29593. {
  29594. /* Allocate lock resource and initialize it */
  29595. huart->Lock = HAL_UNLOCKED;
  29596. 800ca48: 687b ldr r3, [r7, #4]
  29597. 800ca4a: 2200 movs r2, #0
  29598. 800ca4c: f883 2084 strb.w r2, [r3, #132] @ 0x84
  29599. /* Init the low level hardware */
  29600. huart->MspInitCallback(huart);
  29601. #else
  29602. /* Init the low level hardware : GPIO, CLOCK */
  29603. HAL_UART_MspInit(huart);
  29604. 800ca50: 6878 ldr r0, [r7, #4]
  29605. 800ca52: f7f5 fca5 bl 80023a0 <HAL_UART_MspInit>
  29606. #endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */
  29607. }
  29608. huart->gState = HAL_UART_STATE_BUSY;
  29609. 800ca56: 687b ldr r3, [r7, #4]
  29610. 800ca58: 2224 movs r2, #36 @ 0x24
  29611. 800ca5a: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  29612. __HAL_UART_DISABLE(huart);
  29613. 800ca5e: 687b ldr r3, [r7, #4]
  29614. 800ca60: 681b ldr r3, [r3, #0]
  29615. 800ca62: 681a ldr r2, [r3, #0]
  29616. 800ca64: 687b ldr r3, [r7, #4]
  29617. 800ca66: 681b ldr r3, [r3, #0]
  29618. 800ca68: f022 0201 bic.w r2, r2, #1
  29619. 800ca6c: 601a str r2, [r3, #0]
  29620. /* Perform advanced settings configuration */
  29621. /* For some items, configuration requires to be done prior TE and RE bits are set */
  29622. if (huart->AdvancedInit.AdvFeatureInit != UART_ADVFEATURE_NO_INIT)
  29623. 800ca6e: 687b ldr r3, [r7, #4]
  29624. 800ca70: 6a9b ldr r3, [r3, #40] @ 0x28
  29625. 800ca72: 2b00 cmp r3, #0
  29626. 800ca74: d002 beq.n 800ca7c <HAL_UART_Init+0x50>
  29627. {
  29628. UART_AdvFeatureConfig(huart);
  29629. 800ca76: 6878 ldr r0, [r7, #4]
  29630. 800ca78: f001 f9e8 bl 800de4c <UART_AdvFeatureConfig>
  29631. }
  29632. /* Set the UART Communication parameters */
  29633. if (UART_SetConfig(huart) == HAL_ERROR)
  29634. 800ca7c: 6878 ldr r0, [r7, #4]
  29635. 800ca7e: f000 fc7d bl 800d37c <UART_SetConfig>
  29636. 800ca82: 4603 mov r3, r0
  29637. 800ca84: 2b01 cmp r3, #1
  29638. 800ca86: d101 bne.n 800ca8c <HAL_UART_Init+0x60>
  29639. {
  29640. return HAL_ERROR;
  29641. 800ca88: 2301 movs r3, #1
  29642. 800ca8a: e01b b.n 800cac4 <HAL_UART_Init+0x98>
  29643. }
  29644. /* In asynchronous mode, the following bits must be kept cleared:
  29645. - LINEN and CLKEN bits in the USART_CR2 register,
  29646. - SCEN, HDSEL and IREN bits in the USART_CR3 register.*/
  29647. CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN));
  29648. 800ca8c: 687b ldr r3, [r7, #4]
  29649. 800ca8e: 681b ldr r3, [r3, #0]
  29650. 800ca90: 685a ldr r2, [r3, #4]
  29651. 800ca92: 687b ldr r3, [r7, #4]
  29652. 800ca94: 681b ldr r3, [r3, #0]
  29653. 800ca96: f422 4290 bic.w r2, r2, #18432 @ 0x4800
  29654. 800ca9a: 605a str r2, [r3, #4]
  29655. CLEAR_BIT(huart->Instance->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN));
  29656. 800ca9c: 687b ldr r3, [r7, #4]
  29657. 800ca9e: 681b ldr r3, [r3, #0]
  29658. 800caa0: 689a ldr r2, [r3, #8]
  29659. 800caa2: 687b ldr r3, [r7, #4]
  29660. 800caa4: 681b ldr r3, [r3, #0]
  29661. 800caa6: f022 022a bic.w r2, r2, #42 @ 0x2a
  29662. 800caaa: 609a str r2, [r3, #8]
  29663. __HAL_UART_ENABLE(huart);
  29664. 800caac: 687b ldr r3, [r7, #4]
  29665. 800caae: 681b ldr r3, [r3, #0]
  29666. 800cab0: 681a ldr r2, [r3, #0]
  29667. 800cab2: 687b ldr r3, [r7, #4]
  29668. 800cab4: 681b ldr r3, [r3, #0]
  29669. 800cab6: f042 0201 orr.w r2, r2, #1
  29670. 800caba: 601a str r2, [r3, #0]
  29671. /* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */
  29672. return (UART_CheckIdleState(huart));
  29673. 800cabc: 6878 ldr r0, [r7, #4]
  29674. 800cabe: f001 fa67 bl 800df90 <UART_CheckIdleState>
  29675. 800cac2: 4603 mov r3, r0
  29676. }
  29677. 800cac4: 4618 mov r0, r3
  29678. 800cac6: 3708 adds r7, #8
  29679. 800cac8: 46bd mov sp, r7
  29680. 800caca: bd80 pop {r7, pc}
  29681. 0800cacc <HAL_UART_Transmit_IT>:
  29682. * @param pData Pointer to data buffer (u8 or u16 data elements).
  29683. * @param Size Amount of data elements (u8 or u16) to be sent.
  29684. * @retval HAL status
  29685. */
  29686. HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size)
  29687. {
  29688. 800cacc: b480 push {r7}
  29689. 800cace: b091 sub sp, #68 @ 0x44
  29690. 800cad0: af00 add r7, sp, #0
  29691. 800cad2: 60f8 str r0, [r7, #12]
  29692. 800cad4: 60b9 str r1, [r7, #8]
  29693. 800cad6: 4613 mov r3, r2
  29694. 800cad8: 80fb strh r3, [r7, #6]
  29695. /* Check that a Tx process is not already ongoing */
  29696. if (huart->gState == HAL_UART_STATE_READY)
  29697. 800cada: 68fb ldr r3, [r7, #12]
  29698. 800cadc: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  29699. 800cae0: 2b20 cmp r3, #32
  29700. 800cae2: d178 bne.n 800cbd6 <HAL_UART_Transmit_IT+0x10a>
  29701. {
  29702. if ((pData == NULL) || (Size == 0U))
  29703. 800cae4: 68bb ldr r3, [r7, #8]
  29704. 800cae6: 2b00 cmp r3, #0
  29705. 800cae8: d002 beq.n 800caf0 <HAL_UART_Transmit_IT+0x24>
  29706. 800caea: 88fb ldrh r3, [r7, #6]
  29707. 800caec: 2b00 cmp r3, #0
  29708. 800caee: d101 bne.n 800caf4 <HAL_UART_Transmit_IT+0x28>
  29709. {
  29710. return HAL_ERROR;
  29711. 800caf0: 2301 movs r3, #1
  29712. 800caf2: e071 b.n 800cbd8 <HAL_UART_Transmit_IT+0x10c>
  29713. }
  29714. huart->pTxBuffPtr = pData;
  29715. 800caf4: 68fb ldr r3, [r7, #12]
  29716. 800caf6: 68ba ldr r2, [r7, #8]
  29717. 800caf8: 651a str r2, [r3, #80] @ 0x50
  29718. huart->TxXferSize = Size;
  29719. 800cafa: 68fb ldr r3, [r7, #12]
  29720. 800cafc: 88fa ldrh r2, [r7, #6]
  29721. 800cafe: f8a3 2054 strh.w r2, [r3, #84] @ 0x54
  29722. huart->TxXferCount = Size;
  29723. 800cb02: 68fb ldr r3, [r7, #12]
  29724. 800cb04: 88fa ldrh r2, [r7, #6]
  29725. 800cb06: f8a3 2056 strh.w r2, [r3, #86] @ 0x56
  29726. huart->TxISR = NULL;
  29727. 800cb0a: 68fb ldr r3, [r7, #12]
  29728. 800cb0c: 2200 movs r2, #0
  29729. 800cb0e: 679a str r2, [r3, #120] @ 0x78
  29730. huart->ErrorCode = HAL_UART_ERROR_NONE;
  29731. 800cb10: 68fb ldr r3, [r7, #12]
  29732. 800cb12: 2200 movs r2, #0
  29733. 800cb14: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  29734. huart->gState = HAL_UART_STATE_BUSY_TX;
  29735. 800cb18: 68fb ldr r3, [r7, #12]
  29736. 800cb1a: 2221 movs r2, #33 @ 0x21
  29737. 800cb1c: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  29738. /* Configure Tx interrupt processing */
  29739. if (huart->FifoMode == UART_FIFOMODE_ENABLE)
  29740. 800cb20: 68fb ldr r3, [r7, #12]
  29741. 800cb22: 6e5b ldr r3, [r3, #100] @ 0x64
  29742. 800cb24: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  29743. 800cb28: d12a bne.n 800cb80 <HAL_UART_Transmit_IT+0xb4>
  29744. {
  29745. /* Set the Tx ISR function pointer according to the data word length */
  29746. if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE))
  29747. 800cb2a: 68fb ldr r3, [r7, #12]
  29748. 800cb2c: 689b ldr r3, [r3, #8]
  29749. 800cb2e: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  29750. 800cb32: d107 bne.n 800cb44 <HAL_UART_Transmit_IT+0x78>
  29751. 800cb34: 68fb ldr r3, [r7, #12]
  29752. 800cb36: 691b ldr r3, [r3, #16]
  29753. 800cb38: 2b00 cmp r3, #0
  29754. 800cb3a: d103 bne.n 800cb44 <HAL_UART_Transmit_IT+0x78>
  29755. {
  29756. huart->TxISR = UART_TxISR_16BIT_FIFOEN;
  29757. 800cb3c: 68fb ldr r3, [r7, #12]
  29758. 800cb3e: 4a29 ldr r2, [pc, #164] @ (800cbe4 <HAL_UART_Transmit_IT+0x118>)
  29759. 800cb40: 679a str r2, [r3, #120] @ 0x78
  29760. 800cb42: e002 b.n 800cb4a <HAL_UART_Transmit_IT+0x7e>
  29761. }
  29762. else
  29763. {
  29764. huart->TxISR = UART_TxISR_8BIT_FIFOEN;
  29765. 800cb44: 68fb ldr r3, [r7, #12]
  29766. 800cb46: 4a28 ldr r2, [pc, #160] @ (800cbe8 <HAL_UART_Transmit_IT+0x11c>)
  29767. 800cb48: 679a str r2, [r3, #120] @ 0x78
  29768. }
  29769. /* Enable the TX FIFO threshold interrupt */
  29770. ATOMIC_SET_BIT(huart->Instance->CR3, USART_CR3_TXFTIE);
  29771. 800cb4a: 68fb ldr r3, [r7, #12]
  29772. 800cb4c: 681b ldr r3, [r3, #0]
  29773. 800cb4e: 3308 adds r3, #8
  29774. 800cb50: 62bb str r3, [r7, #40] @ 0x28
  29775. */
  29776. __STATIC_FORCEINLINE uint32_t __LDREXW(volatile uint32_t *addr)
  29777. {
  29778. uint32_t result;
  29779. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  29780. 800cb52: 6abb ldr r3, [r7, #40] @ 0x28
  29781. 800cb54: e853 3f00 ldrex r3, [r3]
  29782. 800cb58: 627b str r3, [r7, #36] @ 0x24
  29783. return(result);
  29784. 800cb5a: 6a7b ldr r3, [r7, #36] @ 0x24
  29785. 800cb5c: f443 0300 orr.w r3, r3, #8388608 @ 0x800000
  29786. 800cb60: 63bb str r3, [r7, #56] @ 0x38
  29787. 800cb62: 68fb ldr r3, [r7, #12]
  29788. 800cb64: 681b ldr r3, [r3, #0]
  29789. 800cb66: 3308 adds r3, #8
  29790. 800cb68: 6bba ldr r2, [r7, #56] @ 0x38
  29791. 800cb6a: 637a str r2, [r7, #52] @ 0x34
  29792. 800cb6c: 633b str r3, [r7, #48] @ 0x30
  29793. */
  29794. __STATIC_FORCEINLINE uint32_t __STREXW(uint32_t value, volatile uint32_t *addr)
  29795. {
  29796. uint32_t result;
  29797. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  29798. 800cb6e: 6b39 ldr r1, [r7, #48] @ 0x30
  29799. 800cb70: 6b7a ldr r2, [r7, #52] @ 0x34
  29800. 800cb72: e841 2300 strex r3, r2, [r1]
  29801. 800cb76: 62fb str r3, [r7, #44] @ 0x2c
  29802. return(result);
  29803. 800cb78: 6afb ldr r3, [r7, #44] @ 0x2c
  29804. 800cb7a: 2b00 cmp r3, #0
  29805. 800cb7c: d1e5 bne.n 800cb4a <HAL_UART_Transmit_IT+0x7e>
  29806. 800cb7e: e028 b.n 800cbd2 <HAL_UART_Transmit_IT+0x106>
  29807. }
  29808. else
  29809. {
  29810. /* Set the Tx ISR function pointer according to the data word length */
  29811. if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE))
  29812. 800cb80: 68fb ldr r3, [r7, #12]
  29813. 800cb82: 689b ldr r3, [r3, #8]
  29814. 800cb84: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  29815. 800cb88: d107 bne.n 800cb9a <HAL_UART_Transmit_IT+0xce>
  29816. 800cb8a: 68fb ldr r3, [r7, #12]
  29817. 800cb8c: 691b ldr r3, [r3, #16]
  29818. 800cb8e: 2b00 cmp r3, #0
  29819. 800cb90: d103 bne.n 800cb9a <HAL_UART_Transmit_IT+0xce>
  29820. {
  29821. huart->TxISR = UART_TxISR_16BIT;
  29822. 800cb92: 68fb ldr r3, [r7, #12]
  29823. 800cb94: 4a15 ldr r2, [pc, #84] @ (800cbec <HAL_UART_Transmit_IT+0x120>)
  29824. 800cb96: 679a str r2, [r3, #120] @ 0x78
  29825. 800cb98: e002 b.n 800cba0 <HAL_UART_Transmit_IT+0xd4>
  29826. }
  29827. else
  29828. {
  29829. huart->TxISR = UART_TxISR_8BIT;
  29830. 800cb9a: 68fb ldr r3, [r7, #12]
  29831. 800cb9c: 4a14 ldr r2, [pc, #80] @ (800cbf0 <HAL_UART_Transmit_IT+0x124>)
  29832. 800cb9e: 679a str r2, [r3, #120] @ 0x78
  29833. }
  29834. /* Enable the Transmit Data Register Empty interrupt */
  29835. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_TXEIE_TXFNFIE);
  29836. 800cba0: 68fb ldr r3, [r7, #12]
  29837. 800cba2: 681b ldr r3, [r3, #0]
  29838. 800cba4: 617b str r3, [r7, #20]
  29839. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  29840. 800cba6: 697b ldr r3, [r7, #20]
  29841. 800cba8: e853 3f00 ldrex r3, [r3]
  29842. 800cbac: 613b str r3, [r7, #16]
  29843. return(result);
  29844. 800cbae: 693b ldr r3, [r7, #16]
  29845. 800cbb0: f043 0380 orr.w r3, r3, #128 @ 0x80
  29846. 800cbb4: 63fb str r3, [r7, #60] @ 0x3c
  29847. 800cbb6: 68fb ldr r3, [r7, #12]
  29848. 800cbb8: 681b ldr r3, [r3, #0]
  29849. 800cbba: 461a mov r2, r3
  29850. 800cbbc: 6bfb ldr r3, [r7, #60] @ 0x3c
  29851. 800cbbe: 623b str r3, [r7, #32]
  29852. 800cbc0: 61fa str r2, [r7, #28]
  29853. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  29854. 800cbc2: 69f9 ldr r1, [r7, #28]
  29855. 800cbc4: 6a3a ldr r2, [r7, #32]
  29856. 800cbc6: e841 2300 strex r3, r2, [r1]
  29857. 800cbca: 61bb str r3, [r7, #24]
  29858. return(result);
  29859. 800cbcc: 69bb ldr r3, [r7, #24]
  29860. 800cbce: 2b00 cmp r3, #0
  29861. 800cbd0: d1e6 bne.n 800cba0 <HAL_UART_Transmit_IT+0xd4>
  29862. }
  29863. return HAL_OK;
  29864. 800cbd2: 2300 movs r3, #0
  29865. 800cbd4: e000 b.n 800cbd8 <HAL_UART_Transmit_IT+0x10c>
  29866. }
  29867. else
  29868. {
  29869. return HAL_BUSY;
  29870. 800cbd6: 2302 movs r3, #2
  29871. }
  29872. }
  29873. 800cbd8: 4618 mov r0, r3
  29874. 800cbda: 3744 adds r7, #68 @ 0x44
  29875. 800cbdc: 46bd mov sp, r7
  29876. 800cbde: f85d 7b04 ldr.w r7, [sp], #4
  29877. 800cbe2: 4770 bx lr
  29878. 800cbe4: 0800e757 .word 0x0800e757
  29879. 800cbe8: 0800e677 .word 0x0800e677
  29880. 800cbec: 0800e5b5 .word 0x0800e5b5
  29881. 800cbf0: 0800e4fd .word 0x0800e4fd
  29882. 0800cbf4 <HAL_UART_IRQHandler>:
  29883. * @brief Handle UART interrupt request.
  29884. * @param huart UART handle.
  29885. * @retval None
  29886. */
  29887. void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)
  29888. {
  29889. 800cbf4: b580 push {r7, lr}
  29890. 800cbf6: b0ba sub sp, #232 @ 0xe8
  29891. 800cbf8: af00 add r7, sp, #0
  29892. 800cbfa: 6078 str r0, [r7, #4]
  29893. uint32_t isrflags = READ_REG(huart->Instance->ISR);
  29894. 800cbfc: 687b ldr r3, [r7, #4]
  29895. 800cbfe: 681b ldr r3, [r3, #0]
  29896. 800cc00: 69db ldr r3, [r3, #28]
  29897. 800cc02: f8c7 30e4 str.w r3, [r7, #228] @ 0xe4
  29898. uint32_t cr1its = READ_REG(huart->Instance->CR1);
  29899. 800cc06: 687b ldr r3, [r7, #4]
  29900. 800cc08: 681b ldr r3, [r3, #0]
  29901. 800cc0a: 681b ldr r3, [r3, #0]
  29902. 800cc0c: f8c7 30e0 str.w r3, [r7, #224] @ 0xe0
  29903. uint32_t cr3its = READ_REG(huart->Instance->CR3);
  29904. 800cc10: 687b ldr r3, [r7, #4]
  29905. 800cc12: 681b ldr r3, [r3, #0]
  29906. 800cc14: 689b ldr r3, [r3, #8]
  29907. 800cc16: f8c7 30dc str.w r3, [r7, #220] @ 0xdc
  29908. uint32_t errorflags;
  29909. uint32_t errorcode;
  29910. /* If no error occurs */
  29911. errorflags = (isrflags & (uint32_t)(USART_ISR_PE | USART_ISR_FE | USART_ISR_ORE | USART_ISR_NE | USART_ISR_RTOF));
  29912. 800cc1a: f8d7 20e4 ldr.w r2, [r7, #228] @ 0xe4
  29913. 800cc1e: f640 030f movw r3, #2063 @ 0x80f
  29914. 800cc22: 4013 ands r3, r2
  29915. 800cc24: f8c7 30d8 str.w r3, [r7, #216] @ 0xd8
  29916. if (errorflags == 0U)
  29917. 800cc28: f8d7 30d8 ldr.w r3, [r7, #216] @ 0xd8
  29918. 800cc2c: 2b00 cmp r3, #0
  29919. 800cc2e: d11b bne.n 800cc68 <HAL_UART_IRQHandler+0x74>
  29920. {
  29921. /* UART in mode Receiver ---------------------------------------------------*/
  29922. if (((isrflags & USART_ISR_RXNE_RXFNE) != 0U)
  29923. 800cc30: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  29924. 800cc34: f003 0320 and.w r3, r3, #32
  29925. 800cc38: 2b00 cmp r3, #0
  29926. 800cc3a: d015 beq.n 800cc68 <HAL_UART_IRQHandler+0x74>
  29927. && (((cr1its & USART_CR1_RXNEIE_RXFNEIE) != 0U)
  29928. 800cc3c: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  29929. 800cc40: f003 0320 and.w r3, r3, #32
  29930. 800cc44: 2b00 cmp r3, #0
  29931. 800cc46: d105 bne.n 800cc54 <HAL_UART_IRQHandler+0x60>
  29932. || ((cr3its & USART_CR3_RXFTIE) != 0U)))
  29933. 800cc48: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc
  29934. 800cc4c: f003 5380 and.w r3, r3, #268435456 @ 0x10000000
  29935. 800cc50: 2b00 cmp r3, #0
  29936. 800cc52: d009 beq.n 800cc68 <HAL_UART_IRQHandler+0x74>
  29937. {
  29938. if (huart->RxISR != NULL)
  29939. 800cc54: 687b ldr r3, [r7, #4]
  29940. 800cc56: 6f5b ldr r3, [r3, #116] @ 0x74
  29941. 800cc58: 2b00 cmp r3, #0
  29942. 800cc5a: f000 8377 beq.w 800d34c <HAL_UART_IRQHandler+0x758>
  29943. {
  29944. huart->RxISR(huart);
  29945. 800cc5e: 687b ldr r3, [r7, #4]
  29946. 800cc60: 6f5b ldr r3, [r3, #116] @ 0x74
  29947. 800cc62: 6878 ldr r0, [r7, #4]
  29948. 800cc64: 4798 blx r3
  29949. }
  29950. return;
  29951. 800cc66: e371 b.n 800d34c <HAL_UART_IRQHandler+0x758>
  29952. }
  29953. }
  29954. /* If some errors occur */
  29955. if ((errorflags != 0U)
  29956. 800cc68: f8d7 30d8 ldr.w r3, [r7, #216] @ 0xd8
  29957. 800cc6c: 2b00 cmp r3, #0
  29958. 800cc6e: f000 8123 beq.w 800ceb8 <HAL_UART_IRQHandler+0x2c4>
  29959. && ((((cr3its & (USART_CR3_RXFTIE | USART_CR3_EIE)) != 0U)
  29960. 800cc72: f8d7 20dc ldr.w r2, [r7, #220] @ 0xdc
  29961. 800cc76: 4b8d ldr r3, [pc, #564] @ (800ceac <HAL_UART_IRQHandler+0x2b8>)
  29962. 800cc78: 4013 ands r3, r2
  29963. 800cc7a: 2b00 cmp r3, #0
  29964. 800cc7c: d106 bne.n 800cc8c <HAL_UART_IRQHandler+0x98>
  29965. || ((cr1its & (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE | USART_CR1_RTOIE)) != 0U))))
  29966. 800cc7e: f8d7 20e0 ldr.w r2, [r7, #224] @ 0xe0
  29967. 800cc82: 4b8b ldr r3, [pc, #556] @ (800ceb0 <HAL_UART_IRQHandler+0x2bc>)
  29968. 800cc84: 4013 ands r3, r2
  29969. 800cc86: 2b00 cmp r3, #0
  29970. 800cc88: f000 8116 beq.w 800ceb8 <HAL_UART_IRQHandler+0x2c4>
  29971. {
  29972. /* UART parity error interrupt occurred -------------------------------------*/
  29973. if (((isrflags & USART_ISR_PE) != 0U) && ((cr1its & USART_CR1_PEIE) != 0U))
  29974. 800cc8c: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  29975. 800cc90: f003 0301 and.w r3, r3, #1
  29976. 800cc94: 2b00 cmp r3, #0
  29977. 800cc96: d011 beq.n 800ccbc <HAL_UART_IRQHandler+0xc8>
  29978. 800cc98: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  29979. 800cc9c: f403 7380 and.w r3, r3, #256 @ 0x100
  29980. 800cca0: 2b00 cmp r3, #0
  29981. 800cca2: d00b beq.n 800ccbc <HAL_UART_IRQHandler+0xc8>
  29982. {
  29983. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_PEF);
  29984. 800cca4: 687b ldr r3, [r7, #4]
  29985. 800cca6: 681b ldr r3, [r3, #0]
  29986. 800cca8: 2201 movs r2, #1
  29987. 800ccaa: 621a str r2, [r3, #32]
  29988. huart->ErrorCode |= HAL_UART_ERROR_PE;
  29989. 800ccac: 687b ldr r3, [r7, #4]
  29990. 800ccae: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  29991. 800ccb2: f043 0201 orr.w r2, r3, #1
  29992. 800ccb6: 687b ldr r3, [r7, #4]
  29993. 800ccb8: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  29994. }
  29995. /* UART frame error interrupt occurred --------------------------------------*/
  29996. if (((isrflags & USART_ISR_FE) != 0U) && ((cr3its & USART_CR3_EIE) != 0U))
  29997. 800ccbc: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  29998. 800ccc0: f003 0302 and.w r3, r3, #2
  29999. 800ccc4: 2b00 cmp r3, #0
  30000. 800ccc6: d011 beq.n 800ccec <HAL_UART_IRQHandler+0xf8>
  30001. 800ccc8: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc
  30002. 800cccc: f003 0301 and.w r3, r3, #1
  30003. 800ccd0: 2b00 cmp r3, #0
  30004. 800ccd2: d00b beq.n 800ccec <HAL_UART_IRQHandler+0xf8>
  30005. {
  30006. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_FEF);
  30007. 800ccd4: 687b ldr r3, [r7, #4]
  30008. 800ccd6: 681b ldr r3, [r3, #0]
  30009. 800ccd8: 2202 movs r2, #2
  30010. 800ccda: 621a str r2, [r3, #32]
  30011. huart->ErrorCode |= HAL_UART_ERROR_FE;
  30012. 800ccdc: 687b ldr r3, [r7, #4]
  30013. 800ccde: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  30014. 800cce2: f043 0204 orr.w r2, r3, #4
  30015. 800cce6: 687b ldr r3, [r7, #4]
  30016. 800cce8: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  30017. }
  30018. /* UART noise error interrupt occurred --------------------------------------*/
  30019. if (((isrflags & USART_ISR_NE) != 0U) && ((cr3its & USART_CR3_EIE) != 0U))
  30020. 800ccec: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  30021. 800ccf0: f003 0304 and.w r3, r3, #4
  30022. 800ccf4: 2b00 cmp r3, #0
  30023. 800ccf6: d011 beq.n 800cd1c <HAL_UART_IRQHandler+0x128>
  30024. 800ccf8: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc
  30025. 800ccfc: f003 0301 and.w r3, r3, #1
  30026. 800cd00: 2b00 cmp r3, #0
  30027. 800cd02: d00b beq.n 800cd1c <HAL_UART_IRQHandler+0x128>
  30028. {
  30029. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_NEF);
  30030. 800cd04: 687b ldr r3, [r7, #4]
  30031. 800cd06: 681b ldr r3, [r3, #0]
  30032. 800cd08: 2204 movs r2, #4
  30033. 800cd0a: 621a str r2, [r3, #32]
  30034. huart->ErrorCode |= HAL_UART_ERROR_NE;
  30035. 800cd0c: 687b ldr r3, [r7, #4]
  30036. 800cd0e: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  30037. 800cd12: f043 0202 orr.w r2, r3, #2
  30038. 800cd16: 687b ldr r3, [r7, #4]
  30039. 800cd18: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  30040. }
  30041. /* UART Over-Run interrupt occurred -----------------------------------------*/
  30042. if (((isrflags & USART_ISR_ORE) != 0U)
  30043. 800cd1c: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  30044. 800cd20: f003 0308 and.w r3, r3, #8
  30045. 800cd24: 2b00 cmp r3, #0
  30046. 800cd26: d017 beq.n 800cd58 <HAL_UART_IRQHandler+0x164>
  30047. && (((cr1its & USART_CR1_RXNEIE_RXFNEIE) != 0U) ||
  30048. 800cd28: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  30049. 800cd2c: f003 0320 and.w r3, r3, #32
  30050. 800cd30: 2b00 cmp r3, #0
  30051. 800cd32: d105 bne.n 800cd40 <HAL_UART_IRQHandler+0x14c>
  30052. ((cr3its & (USART_CR3_RXFTIE | USART_CR3_EIE)) != 0U)))
  30053. 800cd34: f8d7 20dc ldr.w r2, [r7, #220] @ 0xdc
  30054. 800cd38: 4b5c ldr r3, [pc, #368] @ (800ceac <HAL_UART_IRQHandler+0x2b8>)
  30055. 800cd3a: 4013 ands r3, r2
  30056. && (((cr1its & USART_CR1_RXNEIE_RXFNEIE) != 0U) ||
  30057. 800cd3c: 2b00 cmp r3, #0
  30058. 800cd3e: d00b beq.n 800cd58 <HAL_UART_IRQHandler+0x164>
  30059. {
  30060. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF);
  30061. 800cd40: 687b ldr r3, [r7, #4]
  30062. 800cd42: 681b ldr r3, [r3, #0]
  30063. 800cd44: 2208 movs r2, #8
  30064. 800cd46: 621a str r2, [r3, #32]
  30065. huart->ErrorCode |= HAL_UART_ERROR_ORE;
  30066. 800cd48: 687b ldr r3, [r7, #4]
  30067. 800cd4a: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  30068. 800cd4e: f043 0208 orr.w r2, r3, #8
  30069. 800cd52: 687b ldr r3, [r7, #4]
  30070. 800cd54: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  30071. }
  30072. /* UART Receiver Timeout interrupt occurred ---------------------------------*/
  30073. if (((isrflags & USART_ISR_RTOF) != 0U) && ((cr1its & USART_CR1_RTOIE) != 0U))
  30074. 800cd58: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  30075. 800cd5c: f403 6300 and.w r3, r3, #2048 @ 0x800
  30076. 800cd60: 2b00 cmp r3, #0
  30077. 800cd62: d012 beq.n 800cd8a <HAL_UART_IRQHandler+0x196>
  30078. 800cd64: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  30079. 800cd68: f003 6380 and.w r3, r3, #67108864 @ 0x4000000
  30080. 800cd6c: 2b00 cmp r3, #0
  30081. 800cd6e: d00c beq.n 800cd8a <HAL_UART_IRQHandler+0x196>
  30082. {
  30083. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_RTOF);
  30084. 800cd70: 687b ldr r3, [r7, #4]
  30085. 800cd72: 681b ldr r3, [r3, #0]
  30086. 800cd74: f44f 6200 mov.w r2, #2048 @ 0x800
  30087. 800cd78: 621a str r2, [r3, #32]
  30088. huart->ErrorCode |= HAL_UART_ERROR_RTO;
  30089. 800cd7a: 687b ldr r3, [r7, #4]
  30090. 800cd7c: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  30091. 800cd80: f043 0220 orr.w r2, r3, #32
  30092. 800cd84: 687b ldr r3, [r7, #4]
  30093. 800cd86: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  30094. }
  30095. /* Call UART Error Call back function if need be ----------------------------*/
  30096. if (huart->ErrorCode != HAL_UART_ERROR_NONE)
  30097. 800cd8a: 687b ldr r3, [r7, #4]
  30098. 800cd8c: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  30099. 800cd90: 2b00 cmp r3, #0
  30100. 800cd92: f000 82dd beq.w 800d350 <HAL_UART_IRQHandler+0x75c>
  30101. {
  30102. /* UART in mode Receiver --------------------------------------------------*/
  30103. if (((isrflags & USART_ISR_RXNE_RXFNE) != 0U)
  30104. 800cd96: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  30105. 800cd9a: f003 0320 and.w r3, r3, #32
  30106. 800cd9e: 2b00 cmp r3, #0
  30107. 800cda0: d013 beq.n 800cdca <HAL_UART_IRQHandler+0x1d6>
  30108. && (((cr1its & USART_CR1_RXNEIE_RXFNEIE) != 0U)
  30109. 800cda2: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  30110. 800cda6: f003 0320 and.w r3, r3, #32
  30111. 800cdaa: 2b00 cmp r3, #0
  30112. 800cdac: d105 bne.n 800cdba <HAL_UART_IRQHandler+0x1c6>
  30113. || ((cr3its & USART_CR3_RXFTIE) != 0U)))
  30114. 800cdae: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc
  30115. 800cdb2: f003 5380 and.w r3, r3, #268435456 @ 0x10000000
  30116. 800cdb6: 2b00 cmp r3, #0
  30117. 800cdb8: d007 beq.n 800cdca <HAL_UART_IRQHandler+0x1d6>
  30118. {
  30119. if (huart->RxISR != NULL)
  30120. 800cdba: 687b ldr r3, [r7, #4]
  30121. 800cdbc: 6f5b ldr r3, [r3, #116] @ 0x74
  30122. 800cdbe: 2b00 cmp r3, #0
  30123. 800cdc0: d003 beq.n 800cdca <HAL_UART_IRQHandler+0x1d6>
  30124. {
  30125. huart->RxISR(huart);
  30126. 800cdc2: 687b ldr r3, [r7, #4]
  30127. 800cdc4: 6f5b ldr r3, [r3, #116] @ 0x74
  30128. 800cdc6: 6878 ldr r0, [r7, #4]
  30129. 800cdc8: 4798 blx r3
  30130. /* If Error is to be considered as blocking :
  30131. - Receiver Timeout error in Reception
  30132. - Overrun error in Reception
  30133. - any error occurs in DMA mode reception
  30134. */
  30135. errorcode = huart->ErrorCode;
  30136. 800cdca: 687b ldr r3, [r7, #4]
  30137. 800cdcc: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  30138. 800cdd0: f8c7 30d4 str.w r3, [r7, #212] @ 0xd4
  30139. if ((HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) ||
  30140. 800cdd4: 687b ldr r3, [r7, #4]
  30141. 800cdd6: 681b ldr r3, [r3, #0]
  30142. 800cdd8: 689b ldr r3, [r3, #8]
  30143. 800cdda: f003 0340 and.w r3, r3, #64 @ 0x40
  30144. 800cdde: 2b40 cmp r3, #64 @ 0x40
  30145. 800cde0: d005 beq.n 800cdee <HAL_UART_IRQHandler+0x1fa>
  30146. ((errorcode & (HAL_UART_ERROR_RTO | HAL_UART_ERROR_ORE)) != 0U))
  30147. 800cde2: f8d7 30d4 ldr.w r3, [r7, #212] @ 0xd4
  30148. 800cde6: f003 0328 and.w r3, r3, #40 @ 0x28
  30149. if ((HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) ||
  30150. 800cdea: 2b00 cmp r3, #0
  30151. 800cdec: d054 beq.n 800ce98 <HAL_UART_IRQHandler+0x2a4>
  30152. {
  30153. /* Blocking error : transfer is aborted
  30154. Set the UART state ready to be able to start again the process,
  30155. Disable Rx Interrupts, and disable Rx DMA request, if ongoing */
  30156. UART_EndRxTransfer(huart);
  30157. 800cdee: 6878 ldr r0, [r7, #4]
  30158. 800cdf0: f001 fb08 bl 800e404 <UART_EndRxTransfer>
  30159. /* Abort the UART DMA Rx channel if enabled */
  30160. if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))
  30161. 800cdf4: 687b ldr r3, [r7, #4]
  30162. 800cdf6: 681b ldr r3, [r3, #0]
  30163. 800cdf8: 689b ldr r3, [r3, #8]
  30164. 800cdfa: f003 0340 and.w r3, r3, #64 @ 0x40
  30165. 800cdfe: 2b40 cmp r3, #64 @ 0x40
  30166. 800ce00: d146 bne.n 800ce90 <HAL_UART_IRQHandler+0x29c>
  30167. {
  30168. /* Disable the UART DMA Rx request if enabled */
  30169. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR);
  30170. 800ce02: 687b ldr r3, [r7, #4]
  30171. 800ce04: 681b ldr r3, [r3, #0]
  30172. 800ce06: 3308 adds r3, #8
  30173. 800ce08: f8c7 309c str.w r3, [r7, #156] @ 0x9c
  30174. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  30175. 800ce0c: f8d7 309c ldr.w r3, [r7, #156] @ 0x9c
  30176. 800ce10: e853 3f00 ldrex r3, [r3]
  30177. 800ce14: f8c7 3098 str.w r3, [r7, #152] @ 0x98
  30178. return(result);
  30179. 800ce18: f8d7 3098 ldr.w r3, [r7, #152] @ 0x98
  30180. 800ce1c: f023 0340 bic.w r3, r3, #64 @ 0x40
  30181. 800ce20: f8c7 30d0 str.w r3, [r7, #208] @ 0xd0
  30182. 800ce24: 687b ldr r3, [r7, #4]
  30183. 800ce26: 681b ldr r3, [r3, #0]
  30184. 800ce28: 3308 adds r3, #8
  30185. 800ce2a: f8d7 20d0 ldr.w r2, [r7, #208] @ 0xd0
  30186. 800ce2e: f8c7 20a8 str.w r2, [r7, #168] @ 0xa8
  30187. 800ce32: f8c7 30a4 str.w r3, [r7, #164] @ 0xa4
  30188. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  30189. 800ce36: f8d7 10a4 ldr.w r1, [r7, #164] @ 0xa4
  30190. 800ce3a: f8d7 20a8 ldr.w r2, [r7, #168] @ 0xa8
  30191. 800ce3e: e841 2300 strex r3, r2, [r1]
  30192. 800ce42: f8c7 30a0 str.w r3, [r7, #160] @ 0xa0
  30193. return(result);
  30194. 800ce46: f8d7 30a0 ldr.w r3, [r7, #160] @ 0xa0
  30195. 800ce4a: 2b00 cmp r3, #0
  30196. 800ce4c: d1d9 bne.n 800ce02 <HAL_UART_IRQHandler+0x20e>
  30197. /* Abort the UART DMA Rx channel */
  30198. if (huart->hdmarx != NULL)
  30199. 800ce4e: 687b ldr r3, [r7, #4]
  30200. 800ce50: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  30201. 800ce54: 2b00 cmp r3, #0
  30202. 800ce56: d017 beq.n 800ce88 <HAL_UART_IRQHandler+0x294>
  30203. {
  30204. /* Set the UART DMA Abort callback :
  30205. will lead to call HAL_UART_ErrorCallback() at end of DMA abort procedure */
  30206. huart->hdmarx->XferAbortCallback = UART_DMAAbortOnError;
  30207. 800ce58: 687b ldr r3, [r7, #4]
  30208. 800ce5a: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  30209. 800ce5e: 4a15 ldr r2, [pc, #84] @ (800ceb4 <HAL_UART_IRQHandler+0x2c0>)
  30210. 800ce60: 651a str r2, [r3, #80] @ 0x50
  30211. /* Abort DMA RX */
  30212. if (HAL_DMA_Abort_IT(huart->hdmarx) != HAL_OK)
  30213. 800ce62: 687b ldr r3, [r7, #4]
  30214. 800ce64: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  30215. 800ce68: 4618 mov r0, r3
  30216. 800ce6a: f7f9 fba5 bl 80065b8 <HAL_DMA_Abort_IT>
  30217. 800ce6e: 4603 mov r3, r0
  30218. 800ce70: 2b00 cmp r3, #0
  30219. 800ce72: d019 beq.n 800cea8 <HAL_UART_IRQHandler+0x2b4>
  30220. {
  30221. /* Call Directly huart->hdmarx->XferAbortCallback function in case of error */
  30222. huart->hdmarx->XferAbortCallback(huart->hdmarx);
  30223. 800ce74: 687b ldr r3, [r7, #4]
  30224. 800ce76: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  30225. 800ce7a: 6d1b ldr r3, [r3, #80] @ 0x50
  30226. 800ce7c: 687a ldr r2, [r7, #4]
  30227. 800ce7e: f8d2 2080 ldr.w r2, [r2, #128] @ 0x80
  30228. 800ce82: 4610 mov r0, r2
  30229. 800ce84: 4798 blx r3
  30230. if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))
  30231. 800ce86: e00f b.n 800cea8 <HAL_UART_IRQHandler+0x2b4>
  30232. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  30233. /*Call registered error callback*/
  30234. huart->ErrorCallback(huart);
  30235. #else
  30236. /*Call legacy weak error callback*/
  30237. HAL_UART_ErrorCallback(huart);
  30238. 800ce88: 6878 ldr r0, [r7, #4]
  30239. 800ce8a: f000 fa6d bl 800d368 <HAL_UART_ErrorCallback>
  30240. if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))
  30241. 800ce8e: e00b b.n 800cea8 <HAL_UART_IRQHandler+0x2b4>
  30242. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  30243. /*Call registered error callback*/
  30244. huart->ErrorCallback(huart);
  30245. #else
  30246. /*Call legacy weak error callback*/
  30247. HAL_UART_ErrorCallback(huart);
  30248. 800ce90: 6878 ldr r0, [r7, #4]
  30249. 800ce92: f000 fa69 bl 800d368 <HAL_UART_ErrorCallback>
  30250. if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))
  30251. 800ce96: e007 b.n 800cea8 <HAL_UART_IRQHandler+0x2b4>
  30252. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  30253. /*Call registered error callback*/
  30254. huart->ErrorCallback(huart);
  30255. #else
  30256. /*Call legacy weak error callback*/
  30257. HAL_UART_ErrorCallback(huart);
  30258. 800ce98: 6878 ldr r0, [r7, #4]
  30259. 800ce9a: f000 fa65 bl 800d368 <HAL_UART_ErrorCallback>
  30260. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  30261. huart->ErrorCode = HAL_UART_ERROR_NONE;
  30262. 800ce9e: 687b ldr r3, [r7, #4]
  30263. 800cea0: 2200 movs r2, #0
  30264. 800cea2: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  30265. }
  30266. }
  30267. return;
  30268. 800cea6: e253 b.n 800d350 <HAL_UART_IRQHandler+0x75c>
  30269. if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))
  30270. 800cea8: bf00 nop
  30271. return;
  30272. 800ceaa: e251 b.n 800d350 <HAL_UART_IRQHandler+0x75c>
  30273. 800ceac: 10000001 .word 0x10000001
  30274. 800ceb0: 04000120 .word 0x04000120
  30275. 800ceb4: 0800e4d1 .word 0x0800e4d1
  30276. } /* End if some error occurs */
  30277. /* Check current reception Mode :
  30278. If Reception till IDLE event has been selected : */
  30279. if ((huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
  30280. 800ceb8: 687b ldr r3, [r7, #4]
  30281. 800ceba: 6edb ldr r3, [r3, #108] @ 0x6c
  30282. 800cebc: 2b01 cmp r3, #1
  30283. 800cebe: f040 81e7 bne.w 800d290 <HAL_UART_IRQHandler+0x69c>
  30284. && ((isrflags & USART_ISR_IDLE) != 0U)
  30285. 800cec2: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  30286. 800cec6: f003 0310 and.w r3, r3, #16
  30287. 800ceca: 2b00 cmp r3, #0
  30288. 800cecc: f000 81e0 beq.w 800d290 <HAL_UART_IRQHandler+0x69c>
  30289. && ((cr1its & USART_ISR_IDLE) != 0U))
  30290. 800ced0: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  30291. 800ced4: f003 0310 and.w r3, r3, #16
  30292. 800ced8: 2b00 cmp r3, #0
  30293. 800ceda: f000 81d9 beq.w 800d290 <HAL_UART_IRQHandler+0x69c>
  30294. {
  30295. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_IDLEF);
  30296. 800cede: 687b ldr r3, [r7, #4]
  30297. 800cee0: 681b ldr r3, [r3, #0]
  30298. 800cee2: 2210 movs r2, #16
  30299. 800cee4: 621a str r2, [r3, #32]
  30300. /* Check if DMA mode is enabled in UART */
  30301. if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))
  30302. 800cee6: 687b ldr r3, [r7, #4]
  30303. 800cee8: 681b ldr r3, [r3, #0]
  30304. 800ceea: 689b ldr r3, [r3, #8]
  30305. 800ceec: f003 0340 and.w r3, r3, #64 @ 0x40
  30306. 800cef0: 2b40 cmp r3, #64 @ 0x40
  30307. 800cef2: f040 8151 bne.w 800d198 <HAL_UART_IRQHandler+0x5a4>
  30308. {
  30309. /* DMA mode enabled */
  30310. /* Check received length : If all expected data are received, do nothing,
  30311. (DMA cplt callback will be called).
  30312. Otherwise, if at least one data has already been received, IDLE event is to be notified to user */
  30313. uint16_t nb_remaining_rx_data = (uint16_t) __HAL_DMA_GET_COUNTER(huart->hdmarx);
  30314. 800cef6: 687b ldr r3, [r7, #4]
  30315. 800cef8: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  30316. 800cefc: 681b ldr r3, [r3, #0]
  30317. 800cefe: 4a96 ldr r2, [pc, #600] @ (800d158 <HAL_UART_IRQHandler+0x564>)
  30318. 800cf00: 4293 cmp r3, r2
  30319. 800cf02: d068 beq.n 800cfd6 <HAL_UART_IRQHandler+0x3e2>
  30320. 800cf04: 687b ldr r3, [r7, #4]
  30321. 800cf06: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  30322. 800cf0a: 681b ldr r3, [r3, #0]
  30323. 800cf0c: 4a93 ldr r2, [pc, #588] @ (800d15c <HAL_UART_IRQHandler+0x568>)
  30324. 800cf0e: 4293 cmp r3, r2
  30325. 800cf10: d061 beq.n 800cfd6 <HAL_UART_IRQHandler+0x3e2>
  30326. 800cf12: 687b ldr r3, [r7, #4]
  30327. 800cf14: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  30328. 800cf18: 681b ldr r3, [r3, #0]
  30329. 800cf1a: 4a91 ldr r2, [pc, #580] @ (800d160 <HAL_UART_IRQHandler+0x56c>)
  30330. 800cf1c: 4293 cmp r3, r2
  30331. 800cf1e: d05a beq.n 800cfd6 <HAL_UART_IRQHandler+0x3e2>
  30332. 800cf20: 687b ldr r3, [r7, #4]
  30333. 800cf22: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  30334. 800cf26: 681b ldr r3, [r3, #0]
  30335. 800cf28: 4a8e ldr r2, [pc, #568] @ (800d164 <HAL_UART_IRQHandler+0x570>)
  30336. 800cf2a: 4293 cmp r3, r2
  30337. 800cf2c: d053 beq.n 800cfd6 <HAL_UART_IRQHandler+0x3e2>
  30338. 800cf2e: 687b ldr r3, [r7, #4]
  30339. 800cf30: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  30340. 800cf34: 681b ldr r3, [r3, #0]
  30341. 800cf36: 4a8c ldr r2, [pc, #560] @ (800d168 <HAL_UART_IRQHandler+0x574>)
  30342. 800cf38: 4293 cmp r3, r2
  30343. 800cf3a: d04c beq.n 800cfd6 <HAL_UART_IRQHandler+0x3e2>
  30344. 800cf3c: 687b ldr r3, [r7, #4]
  30345. 800cf3e: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  30346. 800cf42: 681b ldr r3, [r3, #0]
  30347. 800cf44: 4a89 ldr r2, [pc, #548] @ (800d16c <HAL_UART_IRQHandler+0x578>)
  30348. 800cf46: 4293 cmp r3, r2
  30349. 800cf48: d045 beq.n 800cfd6 <HAL_UART_IRQHandler+0x3e2>
  30350. 800cf4a: 687b ldr r3, [r7, #4]
  30351. 800cf4c: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  30352. 800cf50: 681b ldr r3, [r3, #0]
  30353. 800cf52: 4a87 ldr r2, [pc, #540] @ (800d170 <HAL_UART_IRQHandler+0x57c>)
  30354. 800cf54: 4293 cmp r3, r2
  30355. 800cf56: d03e beq.n 800cfd6 <HAL_UART_IRQHandler+0x3e2>
  30356. 800cf58: 687b ldr r3, [r7, #4]
  30357. 800cf5a: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  30358. 800cf5e: 681b ldr r3, [r3, #0]
  30359. 800cf60: 4a84 ldr r2, [pc, #528] @ (800d174 <HAL_UART_IRQHandler+0x580>)
  30360. 800cf62: 4293 cmp r3, r2
  30361. 800cf64: d037 beq.n 800cfd6 <HAL_UART_IRQHandler+0x3e2>
  30362. 800cf66: 687b ldr r3, [r7, #4]
  30363. 800cf68: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  30364. 800cf6c: 681b ldr r3, [r3, #0]
  30365. 800cf6e: 4a82 ldr r2, [pc, #520] @ (800d178 <HAL_UART_IRQHandler+0x584>)
  30366. 800cf70: 4293 cmp r3, r2
  30367. 800cf72: d030 beq.n 800cfd6 <HAL_UART_IRQHandler+0x3e2>
  30368. 800cf74: 687b ldr r3, [r7, #4]
  30369. 800cf76: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  30370. 800cf7a: 681b ldr r3, [r3, #0]
  30371. 800cf7c: 4a7f ldr r2, [pc, #508] @ (800d17c <HAL_UART_IRQHandler+0x588>)
  30372. 800cf7e: 4293 cmp r3, r2
  30373. 800cf80: d029 beq.n 800cfd6 <HAL_UART_IRQHandler+0x3e2>
  30374. 800cf82: 687b ldr r3, [r7, #4]
  30375. 800cf84: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  30376. 800cf88: 681b ldr r3, [r3, #0]
  30377. 800cf8a: 4a7d ldr r2, [pc, #500] @ (800d180 <HAL_UART_IRQHandler+0x58c>)
  30378. 800cf8c: 4293 cmp r3, r2
  30379. 800cf8e: d022 beq.n 800cfd6 <HAL_UART_IRQHandler+0x3e2>
  30380. 800cf90: 687b ldr r3, [r7, #4]
  30381. 800cf92: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  30382. 800cf96: 681b ldr r3, [r3, #0]
  30383. 800cf98: 4a7a ldr r2, [pc, #488] @ (800d184 <HAL_UART_IRQHandler+0x590>)
  30384. 800cf9a: 4293 cmp r3, r2
  30385. 800cf9c: d01b beq.n 800cfd6 <HAL_UART_IRQHandler+0x3e2>
  30386. 800cf9e: 687b ldr r3, [r7, #4]
  30387. 800cfa0: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  30388. 800cfa4: 681b ldr r3, [r3, #0]
  30389. 800cfa6: 4a78 ldr r2, [pc, #480] @ (800d188 <HAL_UART_IRQHandler+0x594>)
  30390. 800cfa8: 4293 cmp r3, r2
  30391. 800cfaa: d014 beq.n 800cfd6 <HAL_UART_IRQHandler+0x3e2>
  30392. 800cfac: 687b ldr r3, [r7, #4]
  30393. 800cfae: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  30394. 800cfb2: 681b ldr r3, [r3, #0]
  30395. 800cfb4: 4a75 ldr r2, [pc, #468] @ (800d18c <HAL_UART_IRQHandler+0x598>)
  30396. 800cfb6: 4293 cmp r3, r2
  30397. 800cfb8: d00d beq.n 800cfd6 <HAL_UART_IRQHandler+0x3e2>
  30398. 800cfba: 687b ldr r3, [r7, #4]
  30399. 800cfbc: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  30400. 800cfc0: 681b ldr r3, [r3, #0]
  30401. 800cfc2: 4a73 ldr r2, [pc, #460] @ (800d190 <HAL_UART_IRQHandler+0x59c>)
  30402. 800cfc4: 4293 cmp r3, r2
  30403. 800cfc6: d006 beq.n 800cfd6 <HAL_UART_IRQHandler+0x3e2>
  30404. 800cfc8: 687b ldr r3, [r7, #4]
  30405. 800cfca: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  30406. 800cfce: 681b ldr r3, [r3, #0]
  30407. 800cfd0: 4a70 ldr r2, [pc, #448] @ (800d194 <HAL_UART_IRQHandler+0x5a0>)
  30408. 800cfd2: 4293 cmp r3, r2
  30409. 800cfd4: d106 bne.n 800cfe4 <HAL_UART_IRQHandler+0x3f0>
  30410. 800cfd6: 687b ldr r3, [r7, #4]
  30411. 800cfd8: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  30412. 800cfdc: 681b ldr r3, [r3, #0]
  30413. 800cfde: 685b ldr r3, [r3, #4]
  30414. 800cfe0: b29b uxth r3, r3
  30415. 800cfe2: e005 b.n 800cff0 <HAL_UART_IRQHandler+0x3fc>
  30416. 800cfe4: 687b ldr r3, [r7, #4]
  30417. 800cfe6: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  30418. 800cfea: 681b ldr r3, [r3, #0]
  30419. 800cfec: 685b ldr r3, [r3, #4]
  30420. 800cfee: b29b uxth r3, r3
  30421. 800cff0: f8a7 30be strh.w r3, [r7, #190] @ 0xbe
  30422. if ((nb_remaining_rx_data > 0U)
  30423. 800cff4: f8b7 30be ldrh.w r3, [r7, #190] @ 0xbe
  30424. 800cff8: 2b00 cmp r3, #0
  30425. 800cffa: f000 81ab beq.w 800d354 <HAL_UART_IRQHandler+0x760>
  30426. && (nb_remaining_rx_data < huart->RxXferSize))
  30427. 800cffe: 687b ldr r3, [r7, #4]
  30428. 800d000: f8b3 305c ldrh.w r3, [r3, #92] @ 0x5c
  30429. 800d004: f8b7 20be ldrh.w r2, [r7, #190] @ 0xbe
  30430. 800d008: 429a cmp r2, r3
  30431. 800d00a: f080 81a3 bcs.w 800d354 <HAL_UART_IRQHandler+0x760>
  30432. {
  30433. /* Reception is not complete */
  30434. huart->RxXferCount = nb_remaining_rx_data;
  30435. 800d00e: 687b ldr r3, [r7, #4]
  30436. 800d010: f8b7 20be ldrh.w r2, [r7, #190] @ 0xbe
  30437. 800d014: f8a3 205e strh.w r2, [r3, #94] @ 0x5e
  30438. /* In Normal mode, end DMA xfer and HAL UART Rx process*/
  30439. if (huart->hdmarx->Init.Mode != DMA_CIRCULAR)
  30440. 800d018: 687b ldr r3, [r7, #4]
  30441. 800d01a: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  30442. 800d01e: 69db ldr r3, [r3, #28]
  30443. 800d020: f5b3 7f80 cmp.w r3, #256 @ 0x100
  30444. 800d024: f000 8087 beq.w 800d136 <HAL_UART_IRQHandler+0x542>
  30445. {
  30446. /* Disable PE and ERR (Frame error, noise error, overrun error) interrupts */
  30447. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_PEIE);
  30448. 800d028: 687b ldr r3, [r7, #4]
  30449. 800d02a: 681b ldr r3, [r3, #0]
  30450. 800d02c: f8c7 3088 str.w r3, [r7, #136] @ 0x88
  30451. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  30452. 800d030: f8d7 3088 ldr.w r3, [r7, #136] @ 0x88
  30453. 800d034: e853 3f00 ldrex r3, [r3]
  30454. 800d038: f8c7 3084 str.w r3, [r7, #132] @ 0x84
  30455. return(result);
  30456. 800d03c: f8d7 3084 ldr.w r3, [r7, #132] @ 0x84
  30457. 800d040: f423 7380 bic.w r3, r3, #256 @ 0x100
  30458. 800d044: f8c7 30b8 str.w r3, [r7, #184] @ 0xb8
  30459. 800d048: 687b ldr r3, [r7, #4]
  30460. 800d04a: 681b ldr r3, [r3, #0]
  30461. 800d04c: 461a mov r2, r3
  30462. 800d04e: f8d7 30b8 ldr.w r3, [r7, #184] @ 0xb8
  30463. 800d052: f8c7 3094 str.w r3, [r7, #148] @ 0x94
  30464. 800d056: f8c7 2090 str.w r2, [r7, #144] @ 0x90
  30465. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  30466. 800d05a: f8d7 1090 ldr.w r1, [r7, #144] @ 0x90
  30467. 800d05e: f8d7 2094 ldr.w r2, [r7, #148] @ 0x94
  30468. 800d062: e841 2300 strex r3, r2, [r1]
  30469. 800d066: f8c7 308c str.w r3, [r7, #140] @ 0x8c
  30470. return(result);
  30471. 800d06a: f8d7 308c ldr.w r3, [r7, #140] @ 0x8c
  30472. 800d06e: 2b00 cmp r3, #0
  30473. 800d070: d1da bne.n 800d028 <HAL_UART_IRQHandler+0x434>
  30474. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);
  30475. 800d072: 687b ldr r3, [r7, #4]
  30476. 800d074: 681b ldr r3, [r3, #0]
  30477. 800d076: 3308 adds r3, #8
  30478. 800d078: 677b str r3, [r7, #116] @ 0x74
  30479. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  30480. 800d07a: 6f7b ldr r3, [r7, #116] @ 0x74
  30481. 800d07c: e853 3f00 ldrex r3, [r3]
  30482. 800d080: 673b str r3, [r7, #112] @ 0x70
  30483. return(result);
  30484. 800d082: 6f3b ldr r3, [r7, #112] @ 0x70
  30485. 800d084: f023 0301 bic.w r3, r3, #1
  30486. 800d088: f8c7 30b4 str.w r3, [r7, #180] @ 0xb4
  30487. 800d08c: 687b ldr r3, [r7, #4]
  30488. 800d08e: 681b ldr r3, [r3, #0]
  30489. 800d090: 3308 adds r3, #8
  30490. 800d092: f8d7 20b4 ldr.w r2, [r7, #180] @ 0xb4
  30491. 800d096: f8c7 2080 str.w r2, [r7, #128] @ 0x80
  30492. 800d09a: 67fb str r3, [r7, #124] @ 0x7c
  30493. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  30494. 800d09c: 6ff9 ldr r1, [r7, #124] @ 0x7c
  30495. 800d09e: f8d7 2080 ldr.w r2, [r7, #128] @ 0x80
  30496. 800d0a2: e841 2300 strex r3, r2, [r1]
  30497. 800d0a6: 67bb str r3, [r7, #120] @ 0x78
  30498. return(result);
  30499. 800d0a8: 6fbb ldr r3, [r7, #120] @ 0x78
  30500. 800d0aa: 2b00 cmp r3, #0
  30501. 800d0ac: d1e1 bne.n 800d072 <HAL_UART_IRQHandler+0x47e>
  30502. /* Disable the DMA transfer for the receiver request by resetting the DMAR bit
  30503. in the UART CR3 register */
  30504. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR);
  30505. 800d0ae: 687b ldr r3, [r7, #4]
  30506. 800d0b0: 681b ldr r3, [r3, #0]
  30507. 800d0b2: 3308 adds r3, #8
  30508. 800d0b4: 663b str r3, [r7, #96] @ 0x60
  30509. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  30510. 800d0b6: 6e3b ldr r3, [r7, #96] @ 0x60
  30511. 800d0b8: e853 3f00 ldrex r3, [r3]
  30512. 800d0bc: 65fb str r3, [r7, #92] @ 0x5c
  30513. return(result);
  30514. 800d0be: 6dfb ldr r3, [r7, #92] @ 0x5c
  30515. 800d0c0: f023 0340 bic.w r3, r3, #64 @ 0x40
  30516. 800d0c4: f8c7 30b0 str.w r3, [r7, #176] @ 0xb0
  30517. 800d0c8: 687b ldr r3, [r7, #4]
  30518. 800d0ca: 681b ldr r3, [r3, #0]
  30519. 800d0cc: 3308 adds r3, #8
  30520. 800d0ce: f8d7 20b0 ldr.w r2, [r7, #176] @ 0xb0
  30521. 800d0d2: 66fa str r2, [r7, #108] @ 0x6c
  30522. 800d0d4: 66bb str r3, [r7, #104] @ 0x68
  30523. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  30524. 800d0d6: 6eb9 ldr r1, [r7, #104] @ 0x68
  30525. 800d0d8: 6efa ldr r2, [r7, #108] @ 0x6c
  30526. 800d0da: e841 2300 strex r3, r2, [r1]
  30527. 800d0de: 667b str r3, [r7, #100] @ 0x64
  30528. return(result);
  30529. 800d0e0: 6e7b ldr r3, [r7, #100] @ 0x64
  30530. 800d0e2: 2b00 cmp r3, #0
  30531. 800d0e4: d1e3 bne.n 800d0ae <HAL_UART_IRQHandler+0x4ba>
  30532. /* At end of Rx process, restore huart->RxState to Ready */
  30533. huart->RxState = HAL_UART_STATE_READY;
  30534. 800d0e6: 687b ldr r3, [r7, #4]
  30535. 800d0e8: 2220 movs r2, #32
  30536. 800d0ea: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  30537. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  30538. 800d0ee: 687b ldr r3, [r7, #4]
  30539. 800d0f0: 2200 movs r2, #0
  30540. 800d0f2: 66da str r2, [r3, #108] @ 0x6c
  30541. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  30542. 800d0f4: 687b ldr r3, [r7, #4]
  30543. 800d0f6: 681b ldr r3, [r3, #0]
  30544. 800d0f8: 64fb str r3, [r7, #76] @ 0x4c
  30545. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  30546. 800d0fa: 6cfb ldr r3, [r7, #76] @ 0x4c
  30547. 800d0fc: e853 3f00 ldrex r3, [r3]
  30548. 800d100: 64bb str r3, [r7, #72] @ 0x48
  30549. return(result);
  30550. 800d102: 6cbb ldr r3, [r7, #72] @ 0x48
  30551. 800d104: f023 0310 bic.w r3, r3, #16
  30552. 800d108: f8c7 30ac str.w r3, [r7, #172] @ 0xac
  30553. 800d10c: 687b ldr r3, [r7, #4]
  30554. 800d10e: 681b ldr r3, [r3, #0]
  30555. 800d110: 461a mov r2, r3
  30556. 800d112: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac
  30557. 800d116: 65bb str r3, [r7, #88] @ 0x58
  30558. 800d118: 657a str r2, [r7, #84] @ 0x54
  30559. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  30560. 800d11a: 6d79 ldr r1, [r7, #84] @ 0x54
  30561. 800d11c: 6dba ldr r2, [r7, #88] @ 0x58
  30562. 800d11e: e841 2300 strex r3, r2, [r1]
  30563. 800d122: 653b str r3, [r7, #80] @ 0x50
  30564. return(result);
  30565. 800d124: 6d3b ldr r3, [r7, #80] @ 0x50
  30566. 800d126: 2b00 cmp r3, #0
  30567. 800d128: d1e4 bne.n 800d0f4 <HAL_UART_IRQHandler+0x500>
  30568. /* Last bytes received, so no need as the abort is immediate */
  30569. (void)HAL_DMA_Abort(huart->hdmarx);
  30570. 800d12a: 687b ldr r3, [r7, #4]
  30571. 800d12c: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
  30572. 800d130: 4618 mov r0, r3
  30573. 800d132: f7f8 ff23 bl 8005f7c <HAL_DMA_Abort>
  30574. }
  30575. /* Initialize type of RxEvent that correspond to RxEvent callback execution;
  30576. In this case, Rx Event type is Idle Event */
  30577. huart->RxEventType = HAL_UART_RXEVENT_IDLE;
  30578. 800d136: 687b ldr r3, [r7, #4]
  30579. 800d138: 2202 movs r2, #2
  30580. 800d13a: 671a str r2, [r3, #112] @ 0x70
  30581. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  30582. /*Call registered Rx Event callback*/
  30583. huart->RxEventCallback(huart, (huart->RxXferSize - huart->RxXferCount));
  30584. #else
  30585. /*Call legacy weak Rx Event callback*/
  30586. HAL_UARTEx_RxEventCallback(huart, (huart->RxXferSize - huart->RxXferCount));
  30587. 800d13c: 687b ldr r3, [r7, #4]
  30588. 800d13e: f8b3 205c ldrh.w r2, [r3, #92] @ 0x5c
  30589. 800d142: 687b ldr r3, [r7, #4]
  30590. 800d144: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  30591. 800d148: b29b uxth r3, r3
  30592. 800d14a: 1ad3 subs r3, r2, r3
  30593. 800d14c: b29b uxth r3, r3
  30594. 800d14e: 4619 mov r1, r3
  30595. 800d150: 6878 ldr r0, [r7, #4]
  30596. 800d152: f7f5 fc4f bl 80029f4 <HAL_UARTEx_RxEventCallback>
  30597. #endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */
  30598. }
  30599. return;
  30600. 800d156: e0fd b.n 800d354 <HAL_UART_IRQHandler+0x760>
  30601. 800d158: 40020010 .word 0x40020010
  30602. 800d15c: 40020028 .word 0x40020028
  30603. 800d160: 40020040 .word 0x40020040
  30604. 800d164: 40020058 .word 0x40020058
  30605. 800d168: 40020070 .word 0x40020070
  30606. 800d16c: 40020088 .word 0x40020088
  30607. 800d170: 400200a0 .word 0x400200a0
  30608. 800d174: 400200b8 .word 0x400200b8
  30609. 800d178: 40020410 .word 0x40020410
  30610. 800d17c: 40020428 .word 0x40020428
  30611. 800d180: 40020440 .word 0x40020440
  30612. 800d184: 40020458 .word 0x40020458
  30613. 800d188: 40020470 .word 0x40020470
  30614. 800d18c: 40020488 .word 0x40020488
  30615. 800d190: 400204a0 .word 0x400204a0
  30616. 800d194: 400204b8 .word 0x400204b8
  30617. else
  30618. {
  30619. /* DMA mode not enabled */
  30620. /* Check received length : If all expected data are received, do nothing.
  30621. Otherwise, if at least one data has already been received, IDLE event is to be notified to user */
  30622. uint16_t nb_rx_data = huart->RxXferSize - huart->RxXferCount;
  30623. 800d198: 687b ldr r3, [r7, #4]
  30624. 800d19a: f8b3 205c ldrh.w r2, [r3, #92] @ 0x5c
  30625. 800d19e: 687b ldr r3, [r7, #4]
  30626. 800d1a0: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  30627. 800d1a4: b29b uxth r3, r3
  30628. 800d1a6: 1ad3 subs r3, r2, r3
  30629. 800d1a8: f8a7 30ce strh.w r3, [r7, #206] @ 0xce
  30630. if ((huart->RxXferCount > 0U)
  30631. 800d1ac: 687b ldr r3, [r7, #4]
  30632. 800d1ae: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  30633. 800d1b2: b29b uxth r3, r3
  30634. 800d1b4: 2b00 cmp r3, #0
  30635. 800d1b6: f000 80cf beq.w 800d358 <HAL_UART_IRQHandler+0x764>
  30636. && (nb_rx_data > 0U))
  30637. 800d1ba: f8b7 30ce ldrh.w r3, [r7, #206] @ 0xce
  30638. 800d1be: 2b00 cmp r3, #0
  30639. 800d1c0: f000 80ca beq.w 800d358 <HAL_UART_IRQHandler+0x764>
  30640. {
  30641. /* Disable the UART Parity Error Interrupt and RXNE interrupts */
  30642. ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE));
  30643. 800d1c4: 687b ldr r3, [r7, #4]
  30644. 800d1c6: 681b ldr r3, [r3, #0]
  30645. 800d1c8: 63bb str r3, [r7, #56] @ 0x38
  30646. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  30647. 800d1ca: 6bbb ldr r3, [r7, #56] @ 0x38
  30648. 800d1cc: e853 3f00 ldrex r3, [r3]
  30649. 800d1d0: 637b str r3, [r7, #52] @ 0x34
  30650. return(result);
  30651. 800d1d2: 6b7b ldr r3, [r7, #52] @ 0x34
  30652. 800d1d4: f423 7390 bic.w r3, r3, #288 @ 0x120
  30653. 800d1d8: f8c7 30c8 str.w r3, [r7, #200] @ 0xc8
  30654. 800d1dc: 687b ldr r3, [r7, #4]
  30655. 800d1de: 681b ldr r3, [r3, #0]
  30656. 800d1e0: 461a mov r2, r3
  30657. 800d1e2: f8d7 30c8 ldr.w r3, [r7, #200] @ 0xc8
  30658. 800d1e6: 647b str r3, [r7, #68] @ 0x44
  30659. 800d1e8: 643a str r2, [r7, #64] @ 0x40
  30660. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  30661. 800d1ea: 6c39 ldr r1, [r7, #64] @ 0x40
  30662. 800d1ec: 6c7a ldr r2, [r7, #68] @ 0x44
  30663. 800d1ee: e841 2300 strex r3, r2, [r1]
  30664. 800d1f2: 63fb str r3, [r7, #60] @ 0x3c
  30665. return(result);
  30666. 800d1f4: 6bfb ldr r3, [r7, #60] @ 0x3c
  30667. 800d1f6: 2b00 cmp r3, #0
  30668. 800d1f8: d1e4 bne.n 800d1c4 <HAL_UART_IRQHandler+0x5d0>
  30669. /* Disable the UART Error Interrupt:(Frame error, noise error, overrun error) and RX FIFO Threshold interrupt */
  30670. ATOMIC_CLEAR_BIT(huart->Instance->CR3, (USART_CR3_EIE | USART_CR3_RXFTIE));
  30671. 800d1fa: 687b ldr r3, [r7, #4]
  30672. 800d1fc: 681b ldr r3, [r3, #0]
  30673. 800d1fe: 3308 adds r3, #8
  30674. 800d200: 627b str r3, [r7, #36] @ 0x24
  30675. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  30676. 800d202: 6a7b ldr r3, [r7, #36] @ 0x24
  30677. 800d204: e853 3f00 ldrex r3, [r3]
  30678. 800d208: 623b str r3, [r7, #32]
  30679. return(result);
  30680. 800d20a: 6a3a ldr r2, [r7, #32]
  30681. 800d20c: 4b55 ldr r3, [pc, #340] @ (800d364 <HAL_UART_IRQHandler+0x770>)
  30682. 800d20e: 4013 ands r3, r2
  30683. 800d210: f8c7 30c4 str.w r3, [r7, #196] @ 0xc4
  30684. 800d214: 687b ldr r3, [r7, #4]
  30685. 800d216: 681b ldr r3, [r3, #0]
  30686. 800d218: 3308 adds r3, #8
  30687. 800d21a: f8d7 20c4 ldr.w r2, [r7, #196] @ 0xc4
  30688. 800d21e: 633a str r2, [r7, #48] @ 0x30
  30689. 800d220: 62fb str r3, [r7, #44] @ 0x2c
  30690. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  30691. 800d222: 6af9 ldr r1, [r7, #44] @ 0x2c
  30692. 800d224: 6b3a ldr r2, [r7, #48] @ 0x30
  30693. 800d226: e841 2300 strex r3, r2, [r1]
  30694. 800d22a: 62bb str r3, [r7, #40] @ 0x28
  30695. return(result);
  30696. 800d22c: 6abb ldr r3, [r7, #40] @ 0x28
  30697. 800d22e: 2b00 cmp r3, #0
  30698. 800d230: d1e3 bne.n 800d1fa <HAL_UART_IRQHandler+0x606>
  30699. /* Rx process is completed, restore huart->RxState to Ready */
  30700. huart->RxState = HAL_UART_STATE_READY;
  30701. 800d232: 687b ldr r3, [r7, #4]
  30702. 800d234: 2220 movs r2, #32
  30703. 800d236: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  30704. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  30705. 800d23a: 687b ldr r3, [r7, #4]
  30706. 800d23c: 2200 movs r2, #0
  30707. 800d23e: 66da str r2, [r3, #108] @ 0x6c
  30708. /* Clear RxISR function pointer */
  30709. huart->RxISR = NULL;
  30710. 800d240: 687b ldr r3, [r7, #4]
  30711. 800d242: 2200 movs r2, #0
  30712. 800d244: 675a str r2, [r3, #116] @ 0x74
  30713. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  30714. 800d246: 687b ldr r3, [r7, #4]
  30715. 800d248: 681b ldr r3, [r3, #0]
  30716. 800d24a: 613b str r3, [r7, #16]
  30717. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  30718. 800d24c: 693b ldr r3, [r7, #16]
  30719. 800d24e: e853 3f00 ldrex r3, [r3]
  30720. 800d252: 60fb str r3, [r7, #12]
  30721. return(result);
  30722. 800d254: 68fb ldr r3, [r7, #12]
  30723. 800d256: f023 0310 bic.w r3, r3, #16
  30724. 800d25a: f8c7 30c0 str.w r3, [r7, #192] @ 0xc0
  30725. 800d25e: 687b ldr r3, [r7, #4]
  30726. 800d260: 681b ldr r3, [r3, #0]
  30727. 800d262: 461a mov r2, r3
  30728. 800d264: f8d7 30c0 ldr.w r3, [r7, #192] @ 0xc0
  30729. 800d268: 61fb str r3, [r7, #28]
  30730. 800d26a: 61ba str r2, [r7, #24]
  30731. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  30732. 800d26c: 69b9 ldr r1, [r7, #24]
  30733. 800d26e: 69fa ldr r2, [r7, #28]
  30734. 800d270: e841 2300 strex r3, r2, [r1]
  30735. 800d274: 617b str r3, [r7, #20]
  30736. return(result);
  30737. 800d276: 697b ldr r3, [r7, #20]
  30738. 800d278: 2b00 cmp r3, #0
  30739. 800d27a: d1e4 bne.n 800d246 <HAL_UART_IRQHandler+0x652>
  30740. /* Initialize type of RxEvent that correspond to RxEvent callback execution;
  30741. In this case, Rx Event type is Idle Event */
  30742. huart->RxEventType = HAL_UART_RXEVENT_IDLE;
  30743. 800d27c: 687b ldr r3, [r7, #4]
  30744. 800d27e: 2202 movs r2, #2
  30745. 800d280: 671a str r2, [r3, #112] @ 0x70
  30746. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  30747. /*Call registered Rx complete callback*/
  30748. huart->RxEventCallback(huart, nb_rx_data);
  30749. #else
  30750. /*Call legacy weak Rx Event callback*/
  30751. HAL_UARTEx_RxEventCallback(huart, nb_rx_data);
  30752. 800d282: f8b7 30ce ldrh.w r3, [r7, #206] @ 0xce
  30753. 800d286: 4619 mov r1, r3
  30754. 800d288: 6878 ldr r0, [r7, #4]
  30755. 800d28a: f7f5 fbb3 bl 80029f4 <HAL_UARTEx_RxEventCallback>
  30756. #endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */
  30757. }
  30758. return;
  30759. 800d28e: e063 b.n 800d358 <HAL_UART_IRQHandler+0x764>
  30760. }
  30761. }
  30762. /* UART wakeup from Stop mode interrupt occurred ---------------------------*/
  30763. if (((isrflags & USART_ISR_WUF) != 0U) && ((cr3its & USART_CR3_WUFIE) != 0U))
  30764. 800d290: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  30765. 800d294: f403 1380 and.w r3, r3, #1048576 @ 0x100000
  30766. 800d298: 2b00 cmp r3, #0
  30767. 800d29a: d00e beq.n 800d2ba <HAL_UART_IRQHandler+0x6c6>
  30768. 800d29c: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc
  30769. 800d2a0: f403 0380 and.w r3, r3, #4194304 @ 0x400000
  30770. 800d2a4: 2b00 cmp r3, #0
  30771. 800d2a6: d008 beq.n 800d2ba <HAL_UART_IRQHandler+0x6c6>
  30772. {
  30773. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_WUF);
  30774. 800d2a8: 687b ldr r3, [r7, #4]
  30775. 800d2aa: 681b ldr r3, [r3, #0]
  30776. 800d2ac: f44f 1280 mov.w r2, #1048576 @ 0x100000
  30777. 800d2b0: 621a str r2, [r3, #32]
  30778. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  30779. /* Call registered Wakeup Callback */
  30780. huart->WakeupCallback(huart);
  30781. #else
  30782. /* Call legacy weak Wakeup Callback */
  30783. HAL_UARTEx_WakeupCallback(huart);
  30784. 800d2b2: 6878 ldr r0, [r7, #4]
  30785. 800d2b4: f002 f80c bl 800f2d0 <HAL_UARTEx_WakeupCallback>
  30786. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  30787. return;
  30788. 800d2b8: e051 b.n 800d35e <HAL_UART_IRQHandler+0x76a>
  30789. }
  30790. /* UART in mode Transmitter ------------------------------------------------*/
  30791. if (((isrflags & USART_ISR_TXE_TXFNF) != 0U)
  30792. 800d2ba: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  30793. 800d2be: f003 0380 and.w r3, r3, #128 @ 0x80
  30794. 800d2c2: 2b00 cmp r3, #0
  30795. 800d2c4: d014 beq.n 800d2f0 <HAL_UART_IRQHandler+0x6fc>
  30796. && (((cr1its & USART_CR1_TXEIE_TXFNFIE) != 0U)
  30797. 800d2c6: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  30798. 800d2ca: f003 0380 and.w r3, r3, #128 @ 0x80
  30799. 800d2ce: 2b00 cmp r3, #0
  30800. 800d2d0: d105 bne.n 800d2de <HAL_UART_IRQHandler+0x6ea>
  30801. || ((cr3its & USART_CR3_TXFTIE) != 0U)))
  30802. 800d2d2: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc
  30803. 800d2d6: f403 0300 and.w r3, r3, #8388608 @ 0x800000
  30804. 800d2da: 2b00 cmp r3, #0
  30805. 800d2dc: d008 beq.n 800d2f0 <HAL_UART_IRQHandler+0x6fc>
  30806. {
  30807. if (huart->TxISR != NULL)
  30808. 800d2de: 687b ldr r3, [r7, #4]
  30809. 800d2e0: 6f9b ldr r3, [r3, #120] @ 0x78
  30810. 800d2e2: 2b00 cmp r3, #0
  30811. 800d2e4: d03a beq.n 800d35c <HAL_UART_IRQHandler+0x768>
  30812. {
  30813. huart->TxISR(huart);
  30814. 800d2e6: 687b ldr r3, [r7, #4]
  30815. 800d2e8: 6f9b ldr r3, [r3, #120] @ 0x78
  30816. 800d2ea: 6878 ldr r0, [r7, #4]
  30817. 800d2ec: 4798 blx r3
  30818. }
  30819. return;
  30820. 800d2ee: e035 b.n 800d35c <HAL_UART_IRQHandler+0x768>
  30821. }
  30822. /* UART in mode Transmitter (transmission end) -----------------------------*/
  30823. if (((isrflags & USART_ISR_TC) != 0U) && ((cr1its & USART_CR1_TCIE) != 0U))
  30824. 800d2f0: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  30825. 800d2f4: f003 0340 and.w r3, r3, #64 @ 0x40
  30826. 800d2f8: 2b00 cmp r3, #0
  30827. 800d2fa: d009 beq.n 800d310 <HAL_UART_IRQHandler+0x71c>
  30828. 800d2fc: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  30829. 800d300: f003 0340 and.w r3, r3, #64 @ 0x40
  30830. 800d304: 2b00 cmp r3, #0
  30831. 800d306: d003 beq.n 800d310 <HAL_UART_IRQHandler+0x71c>
  30832. {
  30833. UART_EndTransmit_IT(huart);
  30834. 800d308: 6878 ldr r0, [r7, #4]
  30835. 800d30a: f001 fa99 bl 800e840 <UART_EndTransmit_IT>
  30836. return;
  30837. 800d30e: e026 b.n 800d35e <HAL_UART_IRQHandler+0x76a>
  30838. }
  30839. /* UART TX Fifo Empty occurred ----------------------------------------------*/
  30840. if (((isrflags & USART_ISR_TXFE) != 0U) && ((cr1its & USART_CR1_TXFEIE) != 0U))
  30841. 800d310: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  30842. 800d314: f403 0300 and.w r3, r3, #8388608 @ 0x800000
  30843. 800d318: 2b00 cmp r3, #0
  30844. 800d31a: d009 beq.n 800d330 <HAL_UART_IRQHandler+0x73c>
  30845. 800d31c: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  30846. 800d320: f003 4380 and.w r3, r3, #1073741824 @ 0x40000000
  30847. 800d324: 2b00 cmp r3, #0
  30848. 800d326: d003 beq.n 800d330 <HAL_UART_IRQHandler+0x73c>
  30849. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  30850. /* Call registered Tx Fifo Empty Callback */
  30851. huart->TxFifoEmptyCallback(huart);
  30852. #else
  30853. /* Call legacy weak Tx Fifo Empty Callback */
  30854. HAL_UARTEx_TxFifoEmptyCallback(huart);
  30855. 800d328: 6878 ldr r0, [r7, #4]
  30856. 800d32a: f001 ffe5 bl 800f2f8 <HAL_UARTEx_TxFifoEmptyCallback>
  30857. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  30858. return;
  30859. 800d32e: e016 b.n 800d35e <HAL_UART_IRQHandler+0x76a>
  30860. }
  30861. /* UART RX Fifo Full occurred ----------------------------------------------*/
  30862. if (((isrflags & USART_ISR_RXFF) != 0U) && ((cr1its & USART_CR1_RXFFIE) != 0U))
  30863. 800d330: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4
  30864. 800d334: f003 7380 and.w r3, r3, #16777216 @ 0x1000000
  30865. 800d338: 2b00 cmp r3, #0
  30866. 800d33a: d010 beq.n 800d35e <HAL_UART_IRQHandler+0x76a>
  30867. 800d33c: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0
  30868. 800d340: 2b00 cmp r3, #0
  30869. 800d342: da0c bge.n 800d35e <HAL_UART_IRQHandler+0x76a>
  30870. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  30871. /* Call registered Rx Fifo Full Callback */
  30872. huart->RxFifoFullCallback(huart);
  30873. #else
  30874. /* Call legacy weak Rx Fifo Full Callback */
  30875. HAL_UARTEx_RxFifoFullCallback(huart);
  30876. 800d344: 6878 ldr r0, [r7, #4]
  30877. 800d346: f001 ffcd bl 800f2e4 <HAL_UARTEx_RxFifoFullCallback>
  30878. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  30879. return;
  30880. 800d34a: e008 b.n 800d35e <HAL_UART_IRQHandler+0x76a>
  30881. return;
  30882. 800d34c: bf00 nop
  30883. 800d34e: e006 b.n 800d35e <HAL_UART_IRQHandler+0x76a>
  30884. return;
  30885. 800d350: bf00 nop
  30886. 800d352: e004 b.n 800d35e <HAL_UART_IRQHandler+0x76a>
  30887. return;
  30888. 800d354: bf00 nop
  30889. 800d356: e002 b.n 800d35e <HAL_UART_IRQHandler+0x76a>
  30890. return;
  30891. 800d358: bf00 nop
  30892. 800d35a: e000 b.n 800d35e <HAL_UART_IRQHandler+0x76a>
  30893. return;
  30894. 800d35c: bf00 nop
  30895. }
  30896. }
  30897. 800d35e: 37e8 adds r7, #232 @ 0xe8
  30898. 800d360: 46bd mov sp, r7
  30899. 800d362: bd80 pop {r7, pc}
  30900. 800d364: effffffe .word 0xeffffffe
  30901. 0800d368 <HAL_UART_ErrorCallback>:
  30902. * @brief UART error callback.
  30903. * @param huart UART handle.
  30904. * @retval None
  30905. */
  30906. __weak void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
  30907. {
  30908. 800d368: b480 push {r7}
  30909. 800d36a: b083 sub sp, #12
  30910. 800d36c: af00 add r7, sp, #0
  30911. 800d36e: 6078 str r0, [r7, #4]
  30912. UNUSED(huart);
  30913. /* NOTE : This function should not be modified, when the callback is needed,
  30914. the HAL_UART_ErrorCallback can be implemented in the user file.
  30915. */
  30916. }
  30917. 800d370: bf00 nop
  30918. 800d372: 370c adds r7, #12
  30919. 800d374: 46bd mov sp, r7
  30920. 800d376: f85d 7b04 ldr.w r7, [sp], #4
  30921. 800d37a: 4770 bx lr
  30922. 0800d37c <UART_SetConfig>:
  30923. * @brief Configure the UART peripheral.
  30924. * @param huart UART handle.
  30925. * @retval HAL status
  30926. */
  30927. HAL_StatusTypeDef UART_SetConfig(UART_HandleTypeDef *huart)
  30928. {
  30929. 800d37c: e92d 4fb0 stmdb sp!, {r4, r5, r7, r8, r9, sl, fp, lr}
  30930. 800d380: b092 sub sp, #72 @ 0x48
  30931. 800d382: af00 add r7, sp, #0
  30932. 800d384: 6178 str r0, [r7, #20]
  30933. uint32_t tmpreg;
  30934. uint16_t brrtemp;
  30935. UART_ClockSourceTypeDef clocksource;
  30936. uint32_t usartdiv;
  30937. HAL_StatusTypeDef ret = HAL_OK;
  30938. 800d386: 2300 movs r3, #0
  30939. 800d388: f887 3042 strb.w r3, [r7, #66] @ 0x42
  30940. * the UART Word Length, Parity, Mode and oversampling:
  30941. * set the M bits according to huart->Init.WordLength value
  30942. * set PCE and PS bits according to huart->Init.Parity value
  30943. * set TE and RE bits according to huart->Init.Mode value
  30944. * set OVER8 bit according to huart->Init.OverSampling value */
  30945. tmpreg = (uint32_t)huart->Init.WordLength | huart->Init.Parity | huart->Init.Mode | huart->Init.OverSampling ;
  30946. 800d38c: 697b ldr r3, [r7, #20]
  30947. 800d38e: 689a ldr r2, [r3, #8]
  30948. 800d390: 697b ldr r3, [r7, #20]
  30949. 800d392: 691b ldr r3, [r3, #16]
  30950. 800d394: 431a orrs r2, r3
  30951. 800d396: 697b ldr r3, [r7, #20]
  30952. 800d398: 695b ldr r3, [r3, #20]
  30953. 800d39a: 431a orrs r2, r3
  30954. 800d39c: 697b ldr r3, [r7, #20]
  30955. 800d39e: 69db ldr r3, [r3, #28]
  30956. 800d3a0: 4313 orrs r3, r2
  30957. 800d3a2: 647b str r3, [r7, #68] @ 0x44
  30958. MODIFY_REG(huart->Instance->CR1, USART_CR1_FIELDS, tmpreg);
  30959. 800d3a4: 697b ldr r3, [r7, #20]
  30960. 800d3a6: 681b ldr r3, [r3, #0]
  30961. 800d3a8: 681a ldr r2, [r3, #0]
  30962. 800d3aa: 4bbe ldr r3, [pc, #760] @ (800d6a4 <UART_SetConfig+0x328>)
  30963. 800d3ac: 4013 ands r3, r2
  30964. 800d3ae: 697a ldr r2, [r7, #20]
  30965. 800d3b0: 6812 ldr r2, [r2, #0]
  30966. 800d3b2: 6c79 ldr r1, [r7, #68] @ 0x44
  30967. 800d3b4: 430b orrs r3, r1
  30968. 800d3b6: 6013 str r3, [r2, #0]
  30969. /*-------------------------- USART CR2 Configuration -----------------------*/
  30970. /* Configure the UART Stop Bits: Set STOP[13:12] bits according
  30971. * to huart->Init.StopBits value */
  30972. MODIFY_REG(huart->Instance->CR2, USART_CR2_STOP, huart->Init.StopBits);
  30973. 800d3b8: 697b ldr r3, [r7, #20]
  30974. 800d3ba: 681b ldr r3, [r3, #0]
  30975. 800d3bc: 685b ldr r3, [r3, #4]
  30976. 800d3be: f423 5140 bic.w r1, r3, #12288 @ 0x3000
  30977. 800d3c2: 697b ldr r3, [r7, #20]
  30978. 800d3c4: 68da ldr r2, [r3, #12]
  30979. 800d3c6: 697b ldr r3, [r7, #20]
  30980. 800d3c8: 681b ldr r3, [r3, #0]
  30981. 800d3ca: 430a orrs r2, r1
  30982. 800d3cc: 605a str r2, [r3, #4]
  30983. /* Configure
  30984. * - UART HardWare Flow Control: set CTSE and RTSE bits according
  30985. * to huart->Init.HwFlowCtl value
  30986. * - one-bit sampling method versus three samples' majority rule according
  30987. * to huart->Init.OneBitSampling (not applicable to LPUART) */
  30988. tmpreg = (uint32_t)huart->Init.HwFlowCtl;
  30989. 800d3ce: 697b ldr r3, [r7, #20]
  30990. 800d3d0: 699b ldr r3, [r3, #24]
  30991. 800d3d2: 647b str r3, [r7, #68] @ 0x44
  30992. if (!(UART_INSTANCE_LOWPOWER(huart)))
  30993. 800d3d4: 697b ldr r3, [r7, #20]
  30994. 800d3d6: 681b ldr r3, [r3, #0]
  30995. 800d3d8: 4ab3 ldr r2, [pc, #716] @ (800d6a8 <UART_SetConfig+0x32c>)
  30996. 800d3da: 4293 cmp r3, r2
  30997. 800d3dc: d004 beq.n 800d3e8 <UART_SetConfig+0x6c>
  30998. {
  30999. tmpreg |= huart->Init.OneBitSampling;
  31000. 800d3de: 697b ldr r3, [r7, #20]
  31001. 800d3e0: 6a1b ldr r3, [r3, #32]
  31002. 800d3e2: 6c7a ldr r2, [r7, #68] @ 0x44
  31003. 800d3e4: 4313 orrs r3, r2
  31004. 800d3e6: 647b str r3, [r7, #68] @ 0x44
  31005. }
  31006. MODIFY_REG(huart->Instance->CR3, USART_CR3_FIELDS, tmpreg);
  31007. 800d3e8: 697b ldr r3, [r7, #20]
  31008. 800d3ea: 681b ldr r3, [r3, #0]
  31009. 800d3ec: 689a ldr r2, [r3, #8]
  31010. 800d3ee: 4baf ldr r3, [pc, #700] @ (800d6ac <UART_SetConfig+0x330>)
  31011. 800d3f0: 4013 ands r3, r2
  31012. 800d3f2: 697a ldr r2, [r7, #20]
  31013. 800d3f4: 6812 ldr r2, [r2, #0]
  31014. 800d3f6: 6c79 ldr r1, [r7, #68] @ 0x44
  31015. 800d3f8: 430b orrs r3, r1
  31016. 800d3fa: 6093 str r3, [r2, #8]
  31017. /*-------------------------- USART PRESC Configuration -----------------------*/
  31018. /* Configure
  31019. * - UART Clock Prescaler : set PRESCALER according to huart->Init.ClockPrescaler value */
  31020. MODIFY_REG(huart->Instance->PRESC, USART_PRESC_PRESCALER, huart->Init.ClockPrescaler);
  31021. 800d3fc: 697b ldr r3, [r7, #20]
  31022. 800d3fe: 681b ldr r3, [r3, #0]
  31023. 800d400: 6adb ldr r3, [r3, #44] @ 0x2c
  31024. 800d402: f023 010f bic.w r1, r3, #15
  31025. 800d406: 697b ldr r3, [r7, #20]
  31026. 800d408: 6a5a ldr r2, [r3, #36] @ 0x24
  31027. 800d40a: 697b ldr r3, [r7, #20]
  31028. 800d40c: 681b ldr r3, [r3, #0]
  31029. 800d40e: 430a orrs r2, r1
  31030. 800d410: 62da str r2, [r3, #44] @ 0x2c
  31031. /*-------------------------- USART BRR Configuration -----------------------*/
  31032. UART_GETCLOCKSOURCE(huart, clocksource);
  31033. 800d412: 697b ldr r3, [r7, #20]
  31034. 800d414: 681b ldr r3, [r3, #0]
  31035. 800d416: 4aa6 ldr r2, [pc, #664] @ (800d6b0 <UART_SetConfig+0x334>)
  31036. 800d418: 4293 cmp r3, r2
  31037. 800d41a: d177 bne.n 800d50c <UART_SetConfig+0x190>
  31038. 800d41c: 4ba5 ldr r3, [pc, #660] @ (800d6b4 <UART_SetConfig+0x338>)
  31039. 800d41e: 6d5b ldr r3, [r3, #84] @ 0x54
  31040. 800d420: f003 0338 and.w r3, r3, #56 @ 0x38
  31041. 800d424: 2b28 cmp r3, #40 @ 0x28
  31042. 800d426: d86d bhi.n 800d504 <UART_SetConfig+0x188>
  31043. 800d428: a201 add r2, pc, #4 @ (adr r2, 800d430 <UART_SetConfig+0xb4>)
  31044. 800d42a: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  31045. 800d42e: bf00 nop
  31046. 800d430: 0800d4d5 .word 0x0800d4d5
  31047. 800d434: 0800d505 .word 0x0800d505
  31048. 800d438: 0800d505 .word 0x0800d505
  31049. 800d43c: 0800d505 .word 0x0800d505
  31050. 800d440: 0800d505 .word 0x0800d505
  31051. 800d444: 0800d505 .word 0x0800d505
  31052. 800d448: 0800d505 .word 0x0800d505
  31053. 800d44c: 0800d505 .word 0x0800d505
  31054. 800d450: 0800d4dd .word 0x0800d4dd
  31055. 800d454: 0800d505 .word 0x0800d505
  31056. 800d458: 0800d505 .word 0x0800d505
  31057. 800d45c: 0800d505 .word 0x0800d505
  31058. 800d460: 0800d505 .word 0x0800d505
  31059. 800d464: 0800d505 .word 0x0800d505
  31060. 800d468: 0800d505 .word 0x0800d505
  31061. 800d46c: 0800d505 .word 0x0800d505
  31062. 800d470: 0800d4e5 .word 0x0800d4e5
  31063. 800d474: 0800d505 .word 0x0800d505
  31064. 800d478: 0800d505 .word 0x0800d505
  31065. 800d47c: 0800d505 .word 0x0800d505
  31066. 800d480: 0800d505 .word 0x0800d505
  31067. 800d484: 0800d505 .word 0x0800d505
  31068. 800d488: 0800d505 .word 0x0800d505
  31069. 800d48c: 0800d505 .word 0x0800d505
  31070. 800d490: 0800d4ed .word 0x0800d4ed
  31071. 800d494: 0800d505 .word 0x0800d505
  31072. 800d498: 0800d505 .word 0x0800d505
  31073. 800d49c: 0800d505 .word 0x0800d505
  31074. 800d4a0: 0800d505 .word 0x0800d505
  31075. 800d4a4: 0800d505 .word 0x0800d505
  31076. 800d4a8: 0800d505 .word 0x0800d505
  31077. 800d4ac: 0800d505 .word 0x0800d505
  31078. 800d4b0: 0800d4f5 .word 0x0800d4f5
  31079. 800d4b4: 0800d505 .word 0x0800d505
  31080. 800d4b8: 0800d505 .word 0x0800d505
  31081. 800d4bc: 0800d505 .word 0x0800d505
  31082. 800d4c0: 0800d505 .word 0x0800d505
  31083. 800d4c4: 0800d505 .word 0x0800d505
  31084. 800d4c8: 0800d505 .word 0x0800d505
  31085. 800d4cc: 0800d505 .word 0x0800d505
  31086. 800d4d0: 0800d4fd .word 0x0800d4fd
  31087. 800d4d4: 2301 movs r3, #1
  31088. 800d4d6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31089. 800d4da: e222 b.n 800d922 <UART_SetConfig+0x5a6>
  31090. 800d4dc: 2304 movs r3, #4
  31091. 800d4de: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31092. 800d4e2: e21e b.n 800d922 <UART_SetConfig+0x5a6>
  31093. 800d4e4: 2308 movs r3, #8
  31094. 800d4e6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31095. 800d4ea: e21a b.n 800d922 <UART_SetConfig+0x5a6>
  31096. 800d4ec: 2310 movs r3, #16
  31097. 800d4ee: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31098. 800d4f2: e216 b.n 800d922 <UART_SetConfig+0x5a6>
  31099. 800d4f4: 2320 movs r3, #32
  31100. 800d4f6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31101. 800d4fa: e212 b.n 800d922 <UART_SetConfig+0x5a6>
  31102. 800d4fc: 2340 movs r3, #64 @ 0x40
  31103. 800d4fe: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31104. 800d502: e20e b.n 800d922 <UART_SetConfig+0x5a6>
  31105. 800d504: 2380 movs r3, #128 @ 0x80
  31106. 800d506: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31107. 800d50a: e20a b.n 800d922 <UART_SetConfig+0x5a6>
  31108. 800d50c: 697b ldr r3, [r7, #20]
  31109. 800d50e: 681b ldr r3, [r3, #0]
  31110. 800d510: 4a69 ldr r2, [pc, #420] @ (800d6b8 <UART_SetConfig+0x33c>)
  31111. 800d512: 4293 cmp r3, r2
  31112. 800d514: d130 bne.n 800d578 <UART_SetConfig+0x1fc>
  31113. 800d516: 4b67 ldr r3, [pc, #412] @ (800d6b4 <UART_SetConfig+0x338>)
  31114. 800d518: 6d5b ldr r3, [r3, #84] @ 0x54
  31115. 800d51a: f003 0307 and.w r3, r3, #7
  31116. 800d51e: 2b05 cmp r3, #5
  31117. 800d520: d826 bhi.n 800d570 <UART_SetConfig+0x1f4>
  31118. 800d522: a201 add r2, pc, #4 @ (adr r2, 800d528 <UART_SetConfig+0x1ac>)
  31119. 800d524: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  31120. 800d528: 0800d541 .word 0x0800d541
  31121. 800d52c: 0800d549 .word 0x0800d549
  31122. 800d530: 0800d551 .word 0x0800d551
  31123. 800d534: 0800d559 .word 0x0800d559
  31124. 800d538: 0800d561 .word 0x0800d561
  31125. 800d53c: 0800d569 .word 0x0800d569
  31126. 800d540: 2300 movs r3, #0
  31127. 800d542: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31128. 800d546: e1ec b.n 800d922 <UART_SetConfig+0x5a6>
  31129. 800d548: 2304 movs r3, #4
  31130. 800d54a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31131. 800d54e: e1e8 b.n 800d922 <UART_SetConfig+0x5a6>
  31132. 800d550: 2308 movs r3, #8
  31133. 800d552: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31134. 800d556: e1e4 b.n 800d922 <UART_SetConfig+0x5a6>
  31135. 800d558: 2310 movs r3, #16
  31136. 800d55a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31137. 800d55e: e1e0 b.n 800d922 <UART_SetConfig+0x5a6>
  31138. 800d560: 2320 movs r3, #32
  31139. 800d562: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31140. 800d566: e1dc b.n 800d922 <UART_SetConfig+0x5a6>
  31141. 800d568: 2340 movs r3, #64 @ 0x40
  31142. 800d56a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31143. 800d56e: e1d8 b.n 800d922 <UART_SetConfig+0x5a6>
  31144. 800d570: 2380 movs r3, #128 @ 0x80
  31145. 800d572: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31146. 800d576: e1d4 b.n 800d922 <UART_SetConfig+0x5a6>
  31147. 800d578: 697b ldr r3, [r7, #20]
  31148. 800d57a: 681b ldr r3, [r3, #0]
  31149. 800d57c: 4a4f ldr r2, [pc, #316] @ (800d6bc <UART_SetConfig+0x340>)
  31150. 800d57e: 4293 cmp r3, r2
  31151. 800d580: d130 bne.n 800d5e4 <UART_SetConfig+0x268>
  31152. 800d582: 4b4c ldr r3, [pc, #304] @ (800d6b4 <UART_SetConfig+0x338>)
  31153. 800d584: 6d5b ldr r3, [r3, #84] @ 0x54
  31154. 800d586: f003 0307 and.w r3, r3, #7
  31155. 800d58a: 2b05 cmp r3, #5
  31156. 800d58c: d826 bhi.n 800d5dc <UART_SetConfig+0x260>
  31157. 800d58e: a201 add r2, pc, #4 @ (adr r2, 800d594 <UART_SetConfig+0x218>)
  31158. 800d590: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  31159. 800d594: 0800d5ad .word 0x0800d5ad
  31160. 800d598: 0800d5b5 .word 0x0800d5b5
  31161. 800d59c: 0800d5bd .word 0x0800d5bd
  31162. 800d5a0: 0800d5c5 .word 0x0800d5c5
  31163. 800d5a4: 0800d5cd .word 0x0800d5cd
  31164. 800d5a8: 0800d5d5 .word 0x0800d5d5
  31165. 800d5ac: 2300 movs r3, #0
  31166. 800d5ae: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31167. 800d5b2: e1b6 b.n 800d922 <UART_SetConfig+0x5a6>
  31168. 800d5b4: 2304 movs r3, #4
  31169. 800d5b6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31170. 800d5ba: e1b2 b.n 800d922 <UART_SetConfig+0x5a6>
  31171. 800d5bc: 2308 movs r3, #8
  31172. 800d5be: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31173. 800d5c2: e1ae b.n 800d922 <UART_SetConfig+0x5a6>
  31174. 800d5c4: 2310 movs r3, #16
  31175. 800d5c6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31176. 800d5ca: e1aa b.n 800d922 <UART_SetConfig+0x5a6>
  31177. 800d5cc: 2320 movs r3, #32
  31178. 800d5ce: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31179. 800d5d2: e1a6 b.n 800d922 <UART_SetConfig+0x5a6>
  31180. 800d5d4: 2340 movs r3, #64 @ 0x40
  31181. 800d5d6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31182. 800d5da: e1a2 b.n 800d922 <UART_SetConfig+0x5a6>
  31183. 800d5dc: 2380 movs r3, #128 @ 0x80
  31184. 800d5de: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31185. 800d5e2: e19e b.n 800d922 <UART_SetConfig+0x5a6>
  31186. 800d5e4: 697b ldr r3, [r7, #20]
  31187. 800d5e6: 681b ldr r3, [r3, #0]
  31188. 800d5e8: 4a35 ldr r2, [pc, #212] @ (800d6c0 <UART_SetConfig+0x344>)
  31189. 800d5ea: 4293 cmp r3, r2
  31190. 800d5ec: d130 bne.n 800d650 <UART_SetConfig+0x2d4>
  31191. 800d5ee: 4b31 ldr r3, [pc, #196] @ (800d6b4 <UART_SetConfig+0x338>)
  31192. 800d5f0: 6d5b ldr r3, [r3, #84] @ 0x54
  31193. 800d5f2: f003 0307 and.w r3, r3, #7
  31194. 800d5f6: 2b05 cmp r3, #5
  31195. 800d5f8: d826 bhi.n 800d648 <UART_SetConfig+0x2cc>
  31196. 800d5fa: a201 add r2, pc, #4 @ (adr r2, 800d600 <UART_SetConfig+0x284>)
  31197. 800d5fc: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  31198. 800d600: 0800d619 .word 0x0800d619
  31199. 800d604: 0800d621 .word 0x0800d621
  31200. 800d608: 0800d629 .word 0x0800d629
  31201. 800d60c: 0800d631 .word 0x0800d631
  31202. 800d610: 0800d639 .word 0x0800d639
  31203. 800d614: 0800d641 .word 0x0800d641
  31204. 800d618: 2300 movs r3, #0
  31205. 800d61a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31206. 800d61e: e180 b.n 800d922 <UART_SetConfig+0x5a6>
  31207. 800d620: 2304 movs r3, #4
  31208. 800d622: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31209. 800d626: e17c b.n 800d922 <UART_SetConfig+0x5a6>
  31210. 800d628: 2308 movs r3, #8
  31211. 800d62a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31212. 800d62e: e178 b.n 800d922 <UART_SetConfig+0x5a6>
  31213. 800d630: 2310 movs r3, #16
  31214. 800d632: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31215. 800d636: e174 b.n 800d922 <UART_SetConfig+0x5a6>
  31216. 800d638: 2320 movs r3, #32
  31217. 800d63a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31218. 800d63e: e170 b.n 800d922 <UART_SetConfig+0x5a6>
  31219. 800d640: 2340 movs r3, #64 @ 0x40
  31220. 800d642: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31221. 800d646: e16c b.n 800d922 <UART_SetConfig+0x5a6>
  31222. 800d648: 2380 movs r3, #128 @ 0x80
  31223. 800d64a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31224. 800d64e: e168 b.n 800d922 <UART_SetConfig+0x5a6>
  31225. 800d650: 697b ldr r3, [r7, #20]
  31226. 800d652: 681b ldr r3, [r3, #0]
  31227. 800d654: 4a1b ldr r2, [pc, #108] @ (800d6c4 <UART_SetConfig+0x348>)
  31228. 800d656: 4293 cmp r3, r2
  31229. 800d658: d142 bne.n 800d6e0 <UART_SetConfig+0x364>
  31230. 800d65a: 4b16 ldr r3, [pc, #88] @ (800d6b4 <UART_SetConfig+0x338>)
  31231. 800d65c: 6d5b ldr r3, [r3, #84] @ 0x54
  31232. 800d65e: f003 0307 and.w r3, r3, #7
  31233. 800d662: 2b05 cmp r3, #5
  31234. 800d664: d838 bhi.n 800d6d8 <UART_SetConfig+0x35c>
  31235. 800d666: a201 add r2, pc, #4 @ (adr r2, 800d66c <UART_SetConfig+0x2f0>)
  31236. 800d668: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  31237. 800d66c: 0800d685 .word 0x0800d685
  31238. 800d670: 0800d68d .word 0x0800d68d
  31239. 800d674: 0800d695 .word 0x0800d695
  31240. 800d678: 0800d69d .word 0x0800d69d
  31241. 800d67c: 0800d6c9 .word 0x0800d6c9
  31242. 800d680: 0800d6d1 .word 0x0800d6d1
  31243. 800d684: 2300 movs r3, #0
  31244. 800d686: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31245. 800d68a: e14a b.n 800d922 <UART_SetConfig+0x5a6>
  31246. 800d68c: 2304 movs r3, #4
  31247. 800d68e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31248. 800d692: e146 b.n 800d922 <UART_SetConfig+0x5a6>
  31249. 800d694: 2308 movs r3, #8
  31250. 800d696: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31251. 800d69a: e142 b.n 800d922 <UART_SetConfig+0x5a6>
  31252. 800d69c: 2310 movs r3, #16
  31253. 800d69e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31254. 800d6a2: e13e b.n 800d922 <UART_SetConfig+0x5a6>
  31255. 800d6a4: cfff69f3 .word 0xcfff69f3
  31256. 800d6a8: 58000c00 .word 0x58000c00
  31257. 800d6ac: 11fff4ff .word 0x11fff4ff
  31258. 800d6b0: 40011000 .word 0x40011000
  31259. 800d6b4: 58024400 .word 0x58024400
  31260. 800d6b8: 40004400 .word 0x40004400
  31261. 800d6bc: 40004800 .word 0x40004800
  31262. 800d6c0: 40004c00 .word 0x40004c00
  31263. 800d6c4: 40005000 .word 0x40005000
  31264. 800d6c8: 2320 movs r3, #32
  31265. 800d6ca: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31266. 800d6ce: e128 b.n 800d922 <UART_SetConfig+0x5a6>
  31267. 800d6d0: 2340 movs r3, #64 @ 0x40
  31268. 800d6d2: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31269. 800d6d6: e124 b.n 800d922 <UART_SetConfig+0x5a6>
  31270. 800d6d8: 2380 movs r3, #128 @ 0x80
  31271. 800d6da: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31272. 800d6de: e120 b.n 800d922 <UART_SetConfig+0x5a6>
  31273. 800d6e0: 697b ldr r3, [r7, #20]
  31274. 800d6e2: 681b ldr r3, [r3, #0]
  31275. 800d6e4: 4acb ldr r2, [pc, #812] @ (800da14 <UART_SetConfig+0x698>)
  31276. 800d6e6: 4293 cmp r3, r2
  31277. 800d6e8: d176 bne.n 800d7d8 <UART_SetConfig+0x45c>
  31278. 800d6ea: 4bcb ldr r3, [pc, #812] @ (800da18 <UART_SetConfig+0x69c>)
  31279. 800d6ec: 6d5b ldr r3, [r3, #84] @ 0x54
  31280. 800d6ee: f003 0338 and.w r3, r3, #56 @ 0x38
  31281. 800d6f2: 2b28 cmp r3, #40 @ 0x28
  31282. 800d6f4: d86c bhi.n 800d7d0 <UART_SetConfig+0x454>
  31283. 800d6f6: a201 add r2, pc, #4 @ (adr r2, 800d6fc <UART_SetConfig+0x380>)
  31284. 800d6f8: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  31285. 800d6fc: 0800d7a1 .word 0x0800d7a1
  31286. 800d700: 0800d7d1 .word 0x0800d7d1
  31287. 800d704: 0800d7d1 .word 0x0800d7d1
  31288. 800d708: 0800d7d1 .word 0x0800d7d1
  31289. 800d70c: 0800d7d1 .word 0x0800d7d1
  31290. 800d710: 0800d7d1 .word 0x0800d7d1
  31291. 800d714: 0800d7d1 .word 0x0800d7d1
  31292. 800d718: 0800d7d1 .word 0x0800d7d1
  31293. 800d71c: 0800d7a9 .word 0x0800d7a9
  31294. 800d720: 0800d7d1 .word 0x0800d7d1
  31295. 800d724: 0800d7d1 .word 0x0800d7d1
  31296. 800d728: 0800d7d1 .word 0x0800d7d1
  31297. 800d72c: 0800d7d1 .word 0x0800d7d1
  31298. 800d730: 0800d7d1 .word 0x0800d7d1
  31299. 800d734: 0800d7d1 .word 0x0800d7d1
  31300. 800d738: 0800d7d1 .word 0x0800d7d1
  31301. 800d73c: 0800d7b1 .word 0x0800d7b1
  31302. 800d740: 0800d7d1 .word 0x0800d7d1
  31303. 800d744: 0800d7d1 .word 0x0800d7d1
  31304. 800d748: 0800d7d1 .word 0x0800d7d1
  31305. 800d74c: 0800d7d1 .word 0x0800d7d1
  31306. 800d750: 0800d7d1 .word 0x0800d7d1
  31307. 800d754: 0800d7d1 .word 0x0800d7d1
  31308. 800d758: 0800d7d1 .word 0x0800d7d1
  31309. 800d75c: 0800d7b9 .word 0x0800d7b9
  31310. 800d760: 0800d7d1 .word 0x0800d7d1
  31311. 800d764: 0800d7d1 .word 0x0800d7d1
  31312. 800d768: 0800d7d1 .word 0x0800d7d1
  31313. 800d76c: 0800d7d1 .word 0x0800d7d1
  31314. 800d770: 0800d7d1 .word 0x0800d7d1
  31315. 800d774: 0800d7d1 .word 0x0800d7d1
  31316. 800d778: 0800d7d1 .word 0x0800d7d1
  31317. 800d77c: 0800d7c1 .word 0x0800d7c1
  31318. 800d780: 0800d7d1 .word 0x0800d7d1
  31319. 800d784: 0800d7d1 .word 0x0800d7d1
  31320. 800d788: 0800d7d1 .word 0x0800d7d1
  31321. 800d78c: 0800d7d1 .word 0x0800d7d1
  31322. 800d790: 0800d7d1 .word 0x0800d7d1
  31323. 800d794: 0800d7d1 .word 0x0800d7d1
  31324. 800d798: 0800d7d1 .word 0x0800d7d1
  31325. 800d79c: 0800d7c9 .word 0x0800d7c9
  31326. 800d7a0: 2301 movs r3, #1
  31327. 800d7a2: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31328. 800d7a6: e0bc b.n 800d922 <UART_SetConfig+0x5a6>
  31329. 800d7a8: 2304 movs r3, #4
  31330. 800d7aa: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31331. 800d7ae: e0b8 b.n 800d922 <UART_SetConfig+0x5a6>
  31332. 800d7b0: 2308 movs r3, #8
  31333. 800d7b2: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31334. 800d7b6: e0b4 b.n 800d922 <UART_SetConfig+0x5a6>
  31335. 800d7b8: 2310 movs r3, #16
  31336. 800d7ba: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31337. 800d7be: e0b0 b.n 800d922 <UART_SetConfig+0x5a6>
  31338. 800d7c0: 2320 movs r3, #32
  31339. 800d7c2: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31340. 800d7c6: e0ac b.n 800d922 <UART_SetConfig+0x5a6>
  31341. 800d7c8: 2340 movs r3, #64 @ 0x40
  31342. 800d7ca: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31343. 800d7ce: e0a8 b.n 800d922 <UART_SetConfig+0x5a6>
  31344. 800d7d0: 2380 movs r3, #128 @ 0x80
  31345. 800d7d2: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31346. 800d7d6: e0a4 b.n 800d922 <UART_SetConfig+0x5a6>
  31347. 800d7d8: 697b ldr r3, [r7, #20]
  31348. 800d7da: 681b ldr r3, [r3, #0]
  31349. 800d7dc: 4a8f ldr r2, [pc, #572] @ (800da1c <UART_SetConfig+0x6a0>)
  31350. 800d7de: 4293 cmp r3, r2
  31351. 800d7e0: d130 bne.n 800d844 <UART_SetConfig+0x4c8>
  31352. 800d7e2: 4b8d ldr r3, [pc, #564] @ (800da18 <UART_SetConfig+0x69c>)
  31353. 800d7e4: 6d5b ldr r3, [r3, #84] @ 0x54
  31354. 800d7e6: f003 0307 and.w r3, r3, #7
  31355. 800d7ea: 2b05 cmp r3, #5
  31356. 800d7ec: d826 bhi.n 800d83c <UART_SetConfig+0x4c0>
  31357. 800d7ee: a201 add r2, pc, #4 @ (adr r2, 800d7f4 <UART_SetConfig+0x478>)
  31358. 800d7f0: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  31359. 800d7f4: 0800d80d .word 0x0800d80d
  31360. 800d7f8: 0800d815 .word 0x0800d815
  31361. 800d7fc: 0800d81d .word 0x0800d81d
  31362. 800d800: 0800d825 .word 0x0800d825
  31363. 800d804: 0800d82d .word 0x0800d82d
  31364. 800d808: 0800d835 .word 0x0800d835
  31365. 800d80c: 2300 movs r3, #0
  31366. 800d80e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31367. 800d812: e086 b.n 800d922 <UART_SetConfig+0x5a6>
  31368. 800d814: 2304 movs r3, #4
  31369. 800d816: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31370. 800d81a: e082 b.n 800d922 <UART_SetConfig+0x5a6>
  31371. 800d81c: 2308 movs r3, #8
  31372. 800d81e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31373. 800d822: e07e b.n 800d922 <UART_SetConfig+0x5a6>
  31374. 800d824: 2310 movs r3, #16
  31375. 800d826: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31376. 800d82a: e07a b.n 800d922 <UART_SetConfig+0x5a6>
  31377. 800d82c: 2320 movs r3, #32
  31378. 800d82e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31379. 800d832: e076 b.n 800d922 <UART_SetConfig+0x5a6>
  31380. 800d834: 2340 movs r3, #64 @ 0x40
  31381. 800d836: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31382. 800d83a: e072 b.n 800d922 <UART_SetConfig+0x5a6>
  31383. 800d83c: 2380 movs r3, #128 @ 0x80
  31384. 800d83e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31385. 800d842: e06e b.n 800d922 <UART_SetConfig+0x5a6>
  31386. 800d844: 697b ldr r3, [r7, #20]
  31387. 800d846: 681b ldr r3, [r3, #0]
  31388. 800d848: 4a75 ldr r2, [pc, #468] @ (800da20 <UART_SetConfig+0x6a4>)
  31389. 800d84a: 4293 cmp r3, r2
  31390. 800d84c: d130 bne.n 800d8b0 <UART_SetConfig+0x534>
  31391. 800d84e: 4b72 ldr r3, [pc, #456] @ (800da18 <UART_SetConfig+0x69c>)
  31392. 800d850: 6d5b ldr r3, [r3, #84] @ 0x54
  31393. 800d852: f003 0307 and.w r3, r3, #7
  31394. 800d856: 2b05 cmp r3, #5
  31395. 800d858: d826 bhi.n 800d8a8 <UART_SetConfig+0x52c>
  31396. 800d85a: a201 add r2, pc, #4 @ (adr r2, 800d860 <UART_SetConfig+0x4e4>)
  31397. 800d85c: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  31398. 800d860: 0800d879 .word 0x0800d879
  31399. 800d864: 0800d881 .word 0x0800d881
  31400. 800d868: 0800d889 .word 0x0800d889
  31401. 800d86c: 0800d891 .word 0x0800d891
  31402. 800d870: 0800d899 .word 0x0800d899
  31403. 800d874: 0800d8a1 .word 0x0800d8a1
  31404. 800d878: 2300 movs r3, #0
  31405. 800d87a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31406. 800d87e: e050 b.n 800d922 <UART_SetConfig+0x5a6>
  31407. 800d880: 2304 movs r3, #4
  31408. 800d882: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31409. 800d886: e04c b.n 800d922 <UART_SetConfig+0x5a6>
  31410. 800d888: 2308 movs r3, #8
  31411. 800d88a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31412. 800d88e: e048 b.n 800d922 <UART_SetConfig+0x5a6>
  31413. 800d890: 2310 movs r3, #16
  31414. 800d892: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31415. 800d896: e044 b.n 800d922 <UART_SetConfig+0x5a6>
  31416. 800d898: 2320 movs r3, #32
  31417. 800d89a: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31418. 800d89e: e040 b.n 800d922 <UART_SetConfig+0x5a6>
  31419. 800d8a0: 2340 movs r3, #64 @ 0x40
  31420. 800d8a2: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31421. 800d8a6: e03c b.n 800d922 <UART_SetConfig+0x5a6>
  31422. 800d8a8: 2380 movs r3, #128 @ 0x80
  31423. 800d8aa: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31424. 800d8ae: e038 b.n 800d922 <UART_SetConfig+0x5a6>
  31425. 800d8b0: 697b ldr r3, [r7, #20]
  31426. 800d8b2: 681b ldr r3, [r3, #0]
  31427. 800d8b4: 4a5b ldr r2, [pc, #364] @ (800da24 <UART_SetConfig+0x6a8>)
  31428. 800d8b6: 4293 cmp r3, r2
  31429. 800d8b8: d130 bne.n 800d91c <UART_SetConfig+0x5a0>
  31430. 800d8ba: 4b57 ldr r3, [pc, #348] @ (800da18 <UART_SetConfig+0x69c>)
  31431. 800d8bc: 6d9b ldr r3, [r3, #88] @ 0x58
  31432. 800d8be: f003 0307 and.w r3, r3, #7
  31433. 800d8c2: 2b05 cmp r3, #5
  31434. 800d8c4: d826 bhi.n 800d914 <UART_SetConfig+0x598>
  31435. 800d8c6: a201 add r2, pc, #4 @ (adr r2, 800d8cc <UART_SetConfig+0x550>)
  31436. 800d8c8: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  31437. 800d8cc: 0800d8e5 .word 0x0800d8e5
  31438. 800d8d0: 0800d8ed .word 0x0800d8ed
  31439. 800d8d4: 0800d8f5 .word 0x0800d8f5
  31440. 800d8d8: 0800d8fd .word 0x0800d8fd
  31441. 800d8dc: 0800d905 .word 0x0800d905
  31442. 800d8e0: 0800d90d .word 0x0800d90d
  31443. 800d8e4: 2302 movs r3, #2
  31444. 800d8e6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31445. 800d8ea: e01a b.n 800d922 <UART_SetConfig+0x5a6>
  31446. 800d8ec: 2304 movs r3, #4
  31447. 800d8ee: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31448. 800d8f2: e016 b.n 800d922 <UART_SetConfig+0x5a6>
  31449. 800d8f4: 2308 movs r3, #8
  31450. 800d8f6: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31451. 800d8fa: e012 b.n 800d922 <UART_SetConfig+0x5a6>
  31452. 800d8fc: 2310 movs r3, #16
  31453. 800d8fe: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31454. 800d902: e00e b.n 800d922 <UART_SetConfig+0x5a6>
  31455. 800d904: 2320 movs r3, #32
  31456. 800d906: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31457. 800d90a: e00a b.n 800d922 <UART_SetConfig+0x5a6>
  31458. 800d90c: 2340 movs r3, #64 @ 0x40
  31459. 800d90e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31460. 800d912: e006 b.n 800d922 <UART_SetConfig+0x5a6>
  31461. 800d914: 2380 movs r3, #128 @ 0x80
  31462. 800d916: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31463. 800d91a: e002 b.n 800d922 <UART_SetConfig+0x5a6>
  31464. 800d91c: 2380 movs r3, #128 @ 0x80
  31465. 800d91e: f887 3043 strb.w r3, [r7, #67] @ 0x43
  31466. /* Check LPUART instance */
  31467. if (UART_INSTANCE_LOWPOWER(huart))
  31468. 800d922: 697b ldr r3, [r7, #20]
  31469. 800d924: 681b ldr r3, [r3, #0]
  31470. 800d926: 4a3f ldr r2, [pc, #252] @ (800da24 <UART_SetConfig+0x6a8>)
  31471. 800d928: 4293 cmp r3, r2
  31472. 800d92a: f040 80f8 bne.w 800db1e <UART_SetConfig+0x7a2>
  31473. {
  31474. /* Retrieve frequency clock */
  31475. switch (clocksource)
  31476. 800d92e: f897 3043 ldrb.w r3, [r7, #67] @ 0x43
  31477. 800d932: 2b20 cmp r3, #32
  31478. 800d934: dc46 bgt.n 800d9c4 <UART_SetConfig+0x648>
  31479. 800d936: 2b02 cmp r3, #2
  31480. 800d938: f2c0 8082 blt.w 800da40 <UART_SetConfig+0x6c4>
  31481. 800d93c: 3b02 subs r3, #2
  31482. 800d93e: 2b1e cmp r3, #30
  31483. 800d940: d87e bhi.n 800da40 <UART_SetConfig+0x6c4>
  31484. 800d942: a201 add r2, pc, #4 @ (adr r2, 800d948 <UART_SetConfig+0x5cc>)
  31485. 800d944: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  31486. 800d948: 0800d9cb .word 0x0800d9cb
  31487. 800d94c: 0800da41 .word 0x0800da41
  31488. 800d950: 0800d9d3 .word 0x0800d9d3
  31489. 800d954: 0800da41 .word 0x0800da41
  31490. 800d958: 0800da41 .word 0x0800da41
  31491. 800d95c: 0800da41 .word 0x0800da41
  31492. 800d960: 0800d9e3 .word 0x0800d9e3
  31493. 800d964: 0800da41 .word 0x0800da41
  31494. 800d968: 0800da41 .word 0x0800da41
  31495. 800d96c: 0800da41 .word 0x0800da41
  31496. 800d970: 0800da41 .word 0x0800da41
  31497. 800d974: 0800da41 .word 0x0800da41
  31498. 800d978: 0800da41 .word 0x0800da41
  31499. 800d97c: 0800da41 .word 0x0800da41
  31500. 800d980: 0800d9f3 .word 0x0800d9f3
  31501. 800d984: 0800da41 .word 0x0800da41
  31502. 800d988: 0800da41 .word 0x0800da41
  31503. 800d98c: 0800da41 .word 0x0800da41
  31504. 800d990: 0800da41 .word 0x0800da41
  31505. 800d994: 0800da41 .word 0x0800da41
  31506. 800d998: 0800da41 .word 0x0800da41
  31507. 800d99c: 0800da41 .word 0x0800da41
  31508. 800d9a0: 0800da41 .word 0x0800da41
  31509. 800d9a4: 0800da41 .word 0x0800da41
  31510. 800d9a8: 0800da41 .word 0x0800da41
  31511. 800d9ac: 0800da41 .word 0x0800da41
  31512. 800d9b0: 0800da41 .word 0x0800da41
  31513. 800d9b4: 0800da41 .word 0x0800da41
  31514. 800d9b8: 0800da41 .word 0x0800da41
  31515. 800d9bc: 0800da41 .word 0x0800da41
  31516. 800d9c0: 0800da33 .word 0x0800da33
  31517. 800d9c4: 2b40 cmp r3, #64 @ 0x40
  31518. 800d9c6: d037 beq.n 800da38 <UART_SetConfig+0x6bc>
  31519. 800d9c8: e03a b.n 800da40 <UART_SetConfig+0x6c4>
  31520. {
  31521. case UART_CLOCKSOURCE_D3PCLK1:
  31522. pclk = HAL_RCCEx_GetD3PCLK1Freq();
  31523. 800d9ca: f7fd fd01 bl 800b3d0 <HAL_RCCEx_GetD3PCLK1Freq>
  31524. 800d9ce: 63f8 str r0, [r7, #60] @ 0x3c
  31525. break;
  31526. 800d9d0: e03c b.n 800da4c <UART_SetConfig+0x6d0>
  31527. case UART_CLOCKSOURCE_PLL2:
  31528. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  31529. 800d9d2: f107 0324 add.w r3, r7, #36 @ 0x24
  31530. 800d9d6: 4618 mov r0, r3
  31531. 800d9d8: f7fd fd10 bl 800b3fc <HAL_RCCEx_GetPLL2ClockFreq>
  31532. pclk = pll2_clocks.PLL2_Q_Frequency;
  31533. 800d9dc: 6abb ldr r3, [r7, #40] @ 0x28
  31534. 800d9de: 63fb str r3, [r7, #60] @ 0x3c
  31535. break;
  31536. 800d9e0: e034 b.n 800da4c <UART_SetConfig+0x6d0>
  31537. case UART_CLOCKSOURCE_PLL3:
  31538. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  31539. 800d9e2: f107 0318 add.w r3, r7, #24
  31540. 800d9e6: 4618 mov r0, r3
  31541. 800d9e8: f7fd fe5c bl 800b6a4 <HAL_RCCEx_GetPLL3ClockFreq>
  31542. pclk = pll3_clocks.PLL3_Q_Frequency;
  31543. 800d9ec: 69fb ldr r3, [r7, #28]
  31544. 800d9ee: 63fb str r3, [r7, #60] @ 0x3c
  31545. break;
  31546. 800d9f0: e02c b.n 800da4c <UART_SetConfig+0x6d0>
  31547. case UART_CLOCKSOURCE_HSI:
  31548. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  31549. 800d9f2: 4b09 ldr r3, [pc, #36] @ (800da18 <UART_SetConfig+0x69c>)
  31550. 800d9f4: 681b ldr r3, [r3, #0]
  31551. 800d9f6: f003 0320 and.w r3, r3, #32
  31552. 800d9fa: 2b00 cmp r3, #0
  31553. 800d9fc: d016 beq.n 800da2c <UART_SetConfig+0x6b0>
  31554. {
  31555. pclk = (uint32_t)(HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3U));
  31556. 800d9fe: 4b06 ldr r3, [pc, #24] @ (800da18 <UART_SetConfig+0x69c>)
  31557. 800da00: 681b ldr r3, [r3, #0]
  31558. 800da02: 08db lsrs r3, r3, #3
  31559. 800da04: f003 0303 and.w r3, r3, #3
  31560. 800da08: 4a07 ldr r2, [pc, #28] @ (800da28 <UART_SetConfig+0x6ac>)
  31561. 800da0a: fa22 f303 lsr.w r3, r2, r3
  31562. 800da0e: 63fb str r3, [r7, #60] @ 0x3c
  31563. }
  31564. else
  31565. {
  31566. pclk = (uint32_t) HSI_VALUE;
  31567. }
  31568. break;
  31569. 800da10: e01c b.n 800da4c <UART_SetConfig+0x6d0>
  31570. 800da12: bf00 nop
  31571. 800da14: 40011400 .word 0x40011400
  31572. 800da18: 58024400 .word 0x58024400
  31573. 800da1c: 40007800 .word 0x40007800
  31574. 800da20: 40007c00 .word 0x40007c00
  31575. 800da24: 58000c00 .word 0x58000c00
  31576. 800da28: 03d09000 .word 0x03d09000
  31577. pclk = (uint32_t) HSI_VALUE;
  31578. 800da2c: 4b9d ldr r3, [pc, #628] @ (800dca4 <UART_SetConfig+0x928>)
  31579. 800da2e: 63fb str r3, [r7, #60] @ 0x3c
  31580. break;
  31581. 800da30: e00c b.n 800da4c <UART_SetConfig+0x6d0>
  31582. case UART_CLOCKSOURCE_CSI:
  31583. pclk = (uint32_t) CSI_VALUE;
  31584. 800da32: 4b9d ldr r3, [pc, #628] @ (800dca8 <UART_SetConfig+0x92c>)
  31585. 800da34: 63fb str r3, [r7, #60] @ 0x3c
  31586. break;
  31587. 800da36: e009 b.n 800da4c <UART_SetConfig+0x6d0>
  31588. case UART_CLOCKSOURCE_LSE:
  31589. pclk = (uint32_t) LSE_VALUE;
  31590. 800da38: f44f 4300 mov.w r3, #32768 @ 0x8000
  31591. 800da3c: 63fb str r3, [r7, #60] @ 0x3c
  31592. break;
  31593. 800da3e: e005 b.n 800da4c <UART_SetConfig+0x6d0>
  31594. default:
  31595. pclk = 0U;
  31596. 800da40: 2300 movs r3, #0
  31597. 800da42: 63fb str r3, [r7, #60] @ 0x3c
  31598. ret = HAL_ERROR;
  31599. 800da44: 2301 movs r3, #1
  31600. 800da46: f887 3042 strb.w r3, [r7, #66] @ 0x42
  31601. break;
  31602. 800da4a: bf00 nop
  31603. }
  31604. /* If proper clock source reported */
  31605. if (pclk != 0U)
  31606. 800da4c: 6bfb ldr r3, [r7, #60] @ 0x3c
  31607. 800da4e: 2b00 cmp r3, #0
  31608. 800da50: f000 81de beq.w 800de10 <UART_SetConfig+0xa94>
  31609. {
  31610. /* Compute clock after Prescaler */
  31611. lpuart_ker_ck_pres = (pclk / UARTPrescTable[huart->Init.ClockPrescaler]);
  31612. 800da54: 697b ldr r3, [r7, #20]
  31613. 800da56: 6a5b ldr r3, [r3, #36] @ 0x24
  31614. 800da58: 4a94 ldr r2, [pc, #592] @ (800dcac <UART_SetConfig+0x930>)
  31615. 800da5a: f832 3013 ldrh.w r3, [r2, r3, lsl #1]
  31616. 800da5e: 461a mov r2, r3
  31617. 800da60: 6bfb ldr r3, [r7, #60] @ 0x3c
  31618. 800da62: fbb3 f3f2 udiv r3, r3, r2
  31619. 800da66: 633b str r3, [r7, #48] @ 0x30
  31620. /* Ensure that Frequency clock is in the range [3 * baudrate, 4096 * baudrate] */
  31621. if ((lpuart_ker_ck_pres < (3U * huart->Init.BaudRate)) ||
  31622. 800da68: 697b ldr r3, [r7, #20]
  31623. 800da6a: 685a ldr r2, [r3, #4]
  31624. 800da6c: 4613 mov r3, r2
  31625. 800da6e: 005b lsls r3, r3, #1
  31626. 800da70: 4413 add r3, r2
  31627. 800da72: 6b3a ldr r2, [r7, #48] @ 0x30
  31628. 800da74: 429a cmp r2, r3
  31629. 800da76: d305 bcc.n 800da84 <UART_SetConfig+0x708>
  31630. (lpuart_ker_ck_pres > (4096U * huart->Init.BaudRate)))
  31631. 800da78: 697b ldr r3, [r7, #20]
  31632. 800da7a: 685b ldr r3, [r3, #4]
  31633. 800da7c: 031b lsls r3, r3, #12
  31634. if ((lpuart_ker_ck_pres < (3U * huart->Init.BaudRate)) ||
  31635. 800da7e: 6b3a ldr r2, [r7, #48] @ 0x30
  31636. 800da80: 429a cmp r2, r3
  31637. 800da82: d903 bls.n 800da8c <UART_SetConfig+0x710>
  31638. {
  31639. ret = HAL_ERROR;
  31640. 800da84: 2301 movs r3, #1
  31641. 800da86: f887 3042 strb.w r3, [r7, #66] @ 0x42
  31642. 800da8a: e1c1 b.n 800de10 <UART_SetConfig+0xa94>
  31643. }
  31644. else
  31645. {
  31646. /* Check computed UsartDiv value is in allocated range
  31647. (it is forbidden to write values lower than 0x300 in the LPUART_BRR register) */
  31648. usartdiv = (uint32_t)(UART_DIV_LPUART(pclk, huart->Init.BaudRate, huart->Init.ClockPrescaler));
  31649. 800da8c: 6bfb ldr r3, [r7, #60] @ 0x3c
  31650. 800da8e: 2200 movs r2, #0
  31651. 800da90: 60bb str r3, [r7, #8]
  31652. 800da92: 60fa str r2, [r7, #12]
  31653. 800da94: 697b ldr r3, [r7, #20]
  31654. 800da96: 6a5b ldr r3, [r3, #36] @ 0x24
  31655. 800da98: 4a84 ldr r2, [pc, #528] @ (800dcac <UART_SetConfig+0x930>)
  31656. 800da9a: f832 3013 ldrh.w r3, [r2, r3, lsl #1]
  31657. 800da9e: b29b uxth r3, r3
  31658. 800daa0: 2200 movs r2, #0
  31659. 800daa2: 603b str r3, [r7, #0]
  31660. 800daa4: 607a str r2, [r7, #4]
  31661. 800daa6: e9d7 2300 ldrd r2, r3, [r7]
  31662. 800daaa: e9d7 0102 ldrd r0, r1, [r7, #8]
  31663. 800daae: f7f2 fc67 bl 8000380 <__aeabi_uldivmod>
  31664. 800dab2: 4602 mov r2, r0
  31665. 800dab4: 460b mov r3, r1
  31666. 800dab6: 4610 mov r0, r2
  31667. 800dab8: 4619 mov r1, r3
  31668. 800daba: f04f 0200 mov.w r2, #0
  31669. 800dabe: f04f 0300 mov.w r3, #0
  31670. 800dac2: 020b lsls r3, r1, #8
  31671. 800dac4: ea43 6310 orr.w r3, r3, r0, lsr #24
  31672. 800dac8: 0202 lsls r2, r0, #8
  31673. 800daca: 6979 ldr r1, [r7, #20]
  31674. 800dacc: 6849 ldr r1, [r1, #4]
  31675. 800dace: 0849 lsrs r1, r1, #1
  31676. 800dad0: 2000 movs r0, #0
  31677. 800dad2: 460c mov r4, r1
  31678. 800dad4: 4605 mov r5, r0
  31679. 800dad6: eb12 0804 adds.w r8, r2, r4
  31680. 800dada: eb43 0905 adc.w r9, r3, r5
  31681. 800dade: 697b ldr r3, [r7, #20]
  31682. 800dae0: 685b ldr r3, [r3, #4]
  31683. 800dae2: 2200 movs r2, #0
  31684. 800dae4: 469a mov sl, r3
  31685. 800dae6: 4693 mov fp, r2
  31686. 800dae8: 4652 mov r2, sl
  31687. 800daea: 465b mov r3, fp
  31688. 800daec: 4640 mov r0, r8
  31689. 800daee: 4649 mov r1, r9
  31690. 800daf0: f7f2 fc46 bl 8000380 <__aeabi_uldivmod>
  31691. 800daf4: 4602 mov r2, r0
  31692. 800daf6: 460b mov r3, r1
  31693. 800daf8: 4613 mov r3, r2
  31694. 800dafa: 63bb str r3, [r7, #56] @ 0x38
  31695. if ((usartdiv >= LPUART_BRR_MIN) && (usartdiv <= LPUART_BRR_MAX))
  31696. 800dafc: 6bbb ldr r3, [r7, #56] @ 0x38
  31697. 800dafe: f5b3 7f40 cmp.w r3, #768 @ 0x300
  31698. 800db02: d308 bcc.n 800db16 <UART_SetConfig+0x79a>
  31699. 800db04: 6bbb ldr r3, [r7, #56] @ 0x38
  31700. 800db06: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
  31701. 800db0a: d204 bcs.n 800db16 <UART_SetConfig+0x79a>
  31702. {
  31703. huart->Instance->BRR = usartdiv;
  31704. 800db0c: 697b ldr r3, [r7, #20]
  31705. 800db0e: 681b ldr r3, [r3, #0]
  31706. 800db10: 6bba ldr r2, [r7, #56] @ 0x38
  31707. 800db12: 60da str r2, [r3, #12]
  31708. 800db14: e17c b.n 800de10 <UART_SetConfig+0xa94>
  31709. }
  31710. else
  31711. {
  31712. ret = HAL_ERROR;
  31713. 800db16: 2301 movs r3, #1
  31714. 800db18: f887 3042 strb.w r3, [r7, #66] @ 0x42
  31715. 800db1c: e178 b.n 800de10 <UART_SetConfig+0xa94>
  31716. } /* if ( (lpuart_ker_ck_pres < (3 * huart->Init.BaudRate) ) ||
  31717. (lpuart_ker_ck_pres > (4096 * huart->Init.BaudRate) )) */
  31718. } /* if (pclk != 0) */
  31719. }
  31720. /* Check UART Over Sampling to set Baud Rate Register */
  31721. else if (huart->Init.OverSampling == UART_OVERSAMPLING_8)
  31722. 800db1e: 697b ldr r3, [r7, #20]
  31723. 800db20: 69db ldr r3, [r3, #28]
  31724. 800db22: f5b3 4f00 cmp.w r3, #32768 @ 0x8000
  31725. 800db26: f040 80c5 bne.w 800dcb4 <UART_SetConfig+0x938>
  31726. {
  31727. switch (clocksource)
  31728. 800db2a: f897 3043 ldrb.w r3, [r7, #67] @ 0x43
  31729. 800db2e: 2b20 cmp r3, #32
  31730. 800db30: dc48 bgt.n 800dbc4 <UART_SetConfig+0x848>
  31731. 800db32: 2b00 cmp r3, #0
  31732. 800db34: db7b blt.n 800dc2e <UART_SetConfig+0x8b2>
  31733. 800db36: 2b20 cmp r3, #32
  31734. 800db38: d879 bhi.n 800dc2e <UART_SetConfig+0x8b2>
  31735. 800db3a: a201 add r2, pc, #4 @ (adr r2, 800db40 <UART_SetConfig+0x7c4>)
  31736. 800db3c: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  31737. 800db40: 0800dbcb .word 0x0800dbcb
  31738. 800db44: 0800dbd3 .word 0x0800dbd3
  31739. 800db48: 0800dc2f .word 0x0800dc2f
  31740. 800db4c: 0800dc2f .word 0x0800dc2f
  31741. 800db50: 0800dbdb .word 0x0800dbdb
  31742. 800db54: 0800dc2f .word 0x0800dc2f
  31743. 800db58: 0800dc2f .word 0x0800dc2f
  31744. 800db5c: 0800dc2f .word 0x0800dc2f
  31745. 800db60: 0800dbeb .word 0x0800dbeb
  31746. 800db64: 0800dc2f .word 0x0800dc2f
  31747. 800db68: 0800dc2f .word 0x0800dc2f
  31748. 800db6c: 0800dc2f .word 0x0800dc2f
  31749. 800db70: 0800dc2f .word 0x0800dc2f
  31750. 800db74: 0800dc2f .word 0x0800dc2f
  31751. 800db78: 0800dc2f .word 0x0800dc2f
  31752. 800db7c: 0800dc2f .word 0x0800dc2f
  31753. 800db80: 0800dbfb .word 0x0800dbfb
  31754. 800db84: 0800dc2f .word 0x0800dc2f
  31755. 800db88: 0800dc2f .word 0x0800dc2f
  31756. 800db8c: 0800dc2f .word 0x0800dc2f
  31757. 800db90: 0800dc2f .word 0x0800dc2f
  31758. 800db94: 0800dc2f .word 0x0800dc2f
  31759. 800db98: 0800dc2f .word 0x0800dc2f
  31760. 800db9c: 0800dc2f .word 0x0800dc2f
  31761. 800dba0: 0800dc2f .word 0x0800dc2f
  31762. 800dba4: 0800dc2f .word 0x0800dc2f
  31763. 800dba8: 0800dc2f .word 0x0800dc2f
  31764. 800dbac: 0800dc2f .word 0x0800dc2f
  31765. 800dbb0: 0800dc2f .word 0x0800dc2f
  31766. 800dbb4: 0800dc2f .word 0x0800dc2f
  31767. 800dbb8: 0800dc2f .word 0x0800dc2f
  31768. 800dbbc: 0800dc2f .word 0x0800dc2f
  31769. 800dbc0: 0800dc21 .word 0x0800dc21
  31770. 800dbc4: 2b40 cmp r3, #64 @ 0x40
  31771. 800dbc6: d02e beq.n 800dc26 <UART_SetConfig+0x8aa>
  31772. 800dbc8: e031 b.n 800dc2e <UART_SetConfig+0x8b2>
  31773. {
  31774. case UART_CLOCKSOURCE_D2PCLK1:
  31775. pclk = HAL_RCC_GetPCLK1Freq();
  31776. 800dbca: f7fb fc25 bl 8009418 <HAL_RCC_GetPCLK1Freq>
  31777. 800dbce: 63f8 str r0, [r7, #60] @ 0x3c
  31778. break;
  31779. 800dbd0: e033 b.n 800dc3a <UART_SetConfig+0x8be>
  31780. case UART_CLOCKSOURCE_D2PCLK2:
  31781. pclk = HAL_RCC_GetPCLK2Freq();
  31782. 800dbd2: f7fb fc37 bl 8009444 <HAL_RCC_GetPCLK2Freq>
  31783. 800dbd6: 63f8 str r0, [r7, #60] @ 0x3c
  31784. break;
  31785. 800dbd8: e02f b.n 800dc3a <UART_SetConfig+0x8be>
  31786. case UART_CLOCKSOURCE_PLL2:
  31787. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  31788. 800dbda: f107 0324 add.w r3, r7, #36 @ 0x24
  31789. 800dbde: 4618 mov r0, r3
  31790. 800dbe0: f7fd fc0c bl 800b3fc <HAL_RCCEx_GetPLL2ClockFreq>
  31791. pclk = pll2_clocks.PLL2_Q_Frequency;
  31792. 800dbe4: 6abb ldr r3, [r7, #40] @ 0x28
  31793. 800dbe6: 63fb str r3, [r7, #60] @ 0x3c
  31794. break;
  31795. 800dbe8: e027 b.n 800dc3a <UART_SetConfig+0x8be>
  31796. case UART_CLOCKSOURCE_PLL3:
  31797. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  31798. 800dbea: f107 0318 add.w r3, r7, #24
  31799. 800dbee: 4618 mov r0, r3
  31800. 800dbf0: f7fd fd58 bl 800b6a4 <HAL_RCCEx_GetPLL3ClockFreq>
  31801. pclk = pll3_clocks.PLL3_Q_Frequency;
  31802. 800dbf4: 69fb ldr r3, [r7, #28]
  31803. 800dbf6: 63fb str r3, [r7, #60] @ 0x3c
  31804. break;
  31805. 800dbf8: e01f b.n 800dc3a <UART_SetConfig+0x8be>
  31806. case UART_CLOCKSOURCE_HSI:
  31807. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  31808. 800dbfa: 4b2d ldr r3, [pc, #180] @ (800dcb0 <UART_SetConfig+0x934>)
  31809. 800dbfc: 681b ldr r3, [r3, #0]
  31810. 800dbfe: f003 0320 and.w r3, r3, #32
  31811. 800dc02: 2b00 cmp r3, #0
  31812. 800dc04: d009 beq.n 800dc1a <UART_SetConfig+0x89e>
  31813. {
  31814. pclk = (uint32_t)(HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3U));
  31815. 800dc06: 4b2a ldr r3, [pc, #168] @ (800dcb0 <UART_SetConfig+0x934>)
  31816. 800dc08: 681b ldr r3, [r3, #0]
  31817. 800dc0a: 08db lsrs r3, r3, #3
  31818. 800dc0c: f003 0303 and.w r3, r3, #3
  31819. 800dc10: 4a24 ldr r2, [pc, #144] @ (800dca4 <UART_SetConfig+0x928>)
  31820. 800dc12: fa22 f303 lsr.w r3, r2, r3
  31821. 800dc16: 63fb str r3, [r7, #60] @ 0x3c
  31822. }
  31823. else
  31824. {
  31825. pclk = (uint32_t) HSI_VALUE;
  31826. }
  31827. break;
  31828. 800dc18: e00f b.n 800dc3a <UART_SetConfig+0x8be>
  31829. pclk = (uint32_t) HSI_VALUE;
  31830. 800dc1a: 4b22 ldr r3, [pc, #136] @ (800dca4 <UART_SetConfig+0x928>)
  31831. 800dc1c: 63fb str r3, [r7, #60] @ 0x3c
  31832. break;
  31833. 800dc1e: e00c b.n 800dc3a <UART_SetConfig+0x8be>
  31834. case UART_CLOCKSOURCE_CSI:
  31835. pclk = (uint32_t) CSI_VALUE;
  31836. 800dc20: 4b21 ldr r3, [pc, #132] @ (800dca8 <UART_SetConfig+0x92c>)
  31837. 800dc22: 63fb str r3, [r7, #60] @ 0x3c
  31838. break;
  31839. 800dc24: e009 b.n 800dc3a <UART_SetConfig+0x8be>
  31840. case UART_CLOCKSOURCE_LSE:
  31841. pclk = (uint32_t) LSE_VALUE;
  31842. 800dc26: f44f 4300 mov.w r3, #32768 @ 0x8000
  31843. 800dc2a: 63fb str r3, [r7, #60] @ 0x3c
  31844. break;
  31845. 800dc2c: e005 b.n 800dc3a <UART_SetConfig+0x8be>
  31846. default:
  31847. pclk = 0U;
  31848. 800dc2e: 2300 movs r3, #0
  31849. 800dc30: 63fb str r3, [r7, #60] @ 0x3c
  31850. ret = HAL_ERROR;
  31851. 800dc32: 2301 movs r3, #1
  31852. 800dc34: f887 3042 strb.w r3, [r7, #66] @ 0x42
  31853. break;
  31854. 800dc38: bf00 nop
  31855. }
  31856. /* USARTDIV must be greater than or equal to 0d16 */
  31857. if (pclk != 0U)
  31858. 800dc3a: 6bfb ldr r3, [r7, #60] @ 0x3c
  31859. 800dc3c: 2b00 cmp r3, #0
  31860. 800dc3e: f000 80e7 beq.w 800de10 <UART_SetConfig+0xa94>
  31861. {
  31862. usartdiv = (uint32_t)(UART_DIV_SAMPLING8(pclk, huart->Init.BaudRate, huart->Init.ClockPrescaler));
  31863. 800dc42: 697b ldr r3, [r7, #20]
  31864. 800dc44: 6a5b ldr r3, [r3, #36] @ 0x24
  31865. 800dc46: 4a19 ldr r2, [pc, #100] @ (800dcac <UART_SetConfig+0x930>)
  31866. 800dc48: f832 3013 ldrh.w r3, [r2, r3, lsl #1]
  31867. 800dc4c: 461a mov r2, r3
  31868. 800dc4e: 6bfb ldr r3, [r7, #60] @ 0x3c
  31869. 800dc50: fbb3 f3f2 udiv r3, r3, r2
  31870. 800dc54: 005a lsls r2, r3, #1
  31871. 800dc56: 697b ldr r3, [r7, #20]
  31872. 800dc58: 685b ldr r3, [r3, #4]
  31873. 800dc5a: 085b lsrs r3, r3, #1
  31874. 800dc5c: 441a add r2, r3
  31875. 800dc5e: 697b ldr r3, [r7, #20]
  31876. 800dc60: 685b ldr r3, [r3, #4]
  31877. 800dc62: fbb2 f3f3 udiv r3, r2, r3
  31878. 800dc66: 63bb str r3, [r7, #56] @ 0x38
  31879. if ((usartdiv >= UART_BRR_MIN) && (usartdiv <= UART_BRR_MAX))
  31880. 800dc68: 6bbb ldr r3, [r7, #56] @ 0x38
  31881. 800dc6a: 2b0f cmp r3, #15
  31882. 800dc6c: d916 bls.n 800dc9c <UART_SetConfig+0x920>
  31883. 800dc6e: 6bbb ldr r3, [r7, #56] @ 0x38
  31884. 800dc70: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  31885. 800dc74: d212 bcs.n 800dc9c <UART_SetConfig+0x920>
  31886. {
  31887. brrtemp = (uint16_t)(usartdiv & 0xFFF0U);
  31888. 800dc76: 6bbb ldr r3, [r7, #56] @ 0x38
  31889. 800dc78: b29b uxth r3, r3
  31890. 800dc7a: f023 030f bic.w r3, r3, #15
  31891. 800dc7e: 86fb strh r3, [r7, #54] @ 0x36
  31892. brrtemp |= (uint16_t)((usartdiv & (uint16_t)0x000FU) >> 1U);
  31893. 800dc80: 6bbb ldr r3, [r7, #56] @ 0x38
  31894. 800dc82: 085b lsrs r3, r3, #1
  31895. 800dc84: b29b uxth r3, r3
  31896. 800dc86: f003 0307 and.w r3, r3, #7
  31897. 800dc8a: b29a uxth r2, r3
  31898. 800dc8c: 8efb ldrh r3, [r7, #54] @ 0x36
  31899. 800dc8e: 4313 orrs r3, r2
  31900. 800dc90: 86fb strh r3, [r7, #54] @ 0x36
  31901. huart->Instance->BRR = brrtemp;
  31902. 800dc92: 697b ldr r3, [r7, #20]
  31903. 800dc94: 681b ldr r3, [r3, #0]
  31904. 800dc96: 8efa ldrh r2, [r7, #54] @ 0x36
  31905. 800dc98: 60da str r2, [r3, #12]
  31906. 800dc9a: e0b9 b.n 800de10 <UART_SetConfig+0xa94>
  31907. }
  31908. else
  31909. {
  31910. ret = HAL_ERROR;
  31911. 800dc9c: 2301 movs r3, #1
  31912. 800dc9e: f887 3042 strb.w r3, [r7, #66] @ 0x42
  31913. 800dca2: e0b5 b.n 800de10 <UART_SetConfig+0xa94>
  31914. 800dca4: 03d09000 .word 0x03d09000
  31915. 800dca8: 003d0900 .word 0x003d0900
  31916. 800dcac: 080145fc .word 0x080145fc
  31917. 800dcb0: 58024400 .word 0x58024400
  31918. }
  31919. }
  31920. }
  31921. else
  31922. {
  31923. switch (clocksource)
  31924. 800dcb4: f897 3043 ldrb.w r3, [r7, #67] @ 0x43
  31925. 800dcb8: 2b20 cmp r3, #32
  31926. 800dcba: dc49 bgt.n 800dd50 <UART_SetConfig+0x9d4>
  31927. 800dcbc: 2b00 cmp r3, #0
  31928. 800dcbe: db7c blt.n 800ddba <UART_SetConfig+0xa3e>
  31929. 800dcc0: 2b20 cmp r3, #32
  31930. 800dcc2: d87a bhi.n 800ddba <UART_SetConfig+0xa3e>
  31931. 800dcc4: a201 add r2, pc, #4 @ (adr r2, 800dccc <UART_SetConfig+0x950>)
  31932. 800dcc6: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  31933. 800dcca: bf00 nop
  31934. 800dccc: 0800dd57 .word 0x0800dd57
  31935. 800dcd0: 0800dd5f .word 0x0800dd5f
  31936. 800dcd4: 0800ddbb .word 0x0800ddbb
  31937. 800dcd8: 0800ddbb .word 0x0800ddbb
  31938. 800dcdc: 0800dd67 .word 0x0800dd67
  31939. 800dce0: 0800ddbb .word 0x0800ddbb
  31940. 800dce4: 0800ddbb .word 0x0800ddbb
  31941. 800dce8: 0800ddbb .word 0x0800ddbb
  31942. 800dcec: 0800dd77 .word 0x0800dd77
  31943. 800dcf0: 0800ddbb .word 0x0800ddbb
  31944. 800dcf4: 0800ddbb .word 0x0800ddbb
  31945. 800dcf8: 0800ddbb .word 0x0800ddbb
  31946. 800dcfc: 0800ddbb .word 0x0800ddbb
  31947. 800dd00: 0800ddbb .word 0x0800ddbb
  31948. 800dd04: 0800ddbb .word 0x0800ddbb
  31949. 800dd08: 0800ddbb .word 0x0800ddbb
  31950. 800dd0c: 0800dd87 .word 0x0800dd87
  31951. 800dd10: 0800ddbb .word 0x0800ddbb
  31952. 800dd14: 0800ddbb .word 0x0800ddbb
  31953. 800dd18: 0800ddbb .word 0x0800ddbb
  31954. 800dd1c: 0800ddbb .word 0x0800ddbb
  31955. 800dd20: 0800ddbb .word 0x0800ddbb
  31956. 800dd24: 0800ddbb .word 0x0800ddbb
  31957. 800dd28: 0800ddbb .word 0x0800ddbb
  31958. 800dd2c: 0800ddbb .word 0x0800ddbb
  31959. 800dd30: 0800ddbb .word 0x0800ddbb
  31960. 800dd34: 0800ddbb .word 0x0800ddbb
  31961. 800dd38: 0800ddbb .word 0x0800ddbb
  31962. 800dd3c: 0800ddbb .word 0x0800ddbb
  31963. 800dd40: 0800ddbb .word 0x0800ddbb
  31964. 800dd44: 0800ddbb .word 0x0800ddbb
  31965. 800dd48: 0800ddbb .word 0x0800ddbb
  31966. 800dd4c: 0800ddad .word 0x0800ddad
  31967. 800dd50: 2b40 cmp r3, #64 @ 0x40
  31968. 800dd52: d02e beq.n 800ddb2 <UART_SetConfig+0xa36>
  31969. 800dd54: e031 b.n 800ddba <UART_SetConfig+0xa3e>
  31970. {
  31971. case UART_CLOCKSOURCE_D2PCLK1:
  31972. pclk = HAL_RCC_GetPCLK1Freq();
  31973. 800dd56: f7fb fb5f bl 8009418 <HAL_RCC_GetPCLK1Freq>
  31974. 800dd5a: 63f8 str r0, [r7, #60] @ 0x3c
  31975. break;
  31976. 800dd5c: e033 b.n 800ddc6 <UART_SetConfig+0xa4a>
  31977. case UART_CLOCKSOURCE_D2PCLK2:
  31978. pclk = HAL_RCC_GetPCLK2Freq();
  31979. 800dd5e: f7fb fb71 bl 8009444 <HAL_RCC_GetPCLK2Freq>
  31980. 800dd62: 63f8 str r0, [r7, #60] @ 0x3c
  31981. break;
  31982. 800dd64: e02f b.n 800ddc6 <UART_SetConfig+0xa4a>
  31983. case UART_CLOCKSOURCE_PLL2:
  31984. HAL_RCCEx_GetPLL2ClockFreq(&pll2_clocks);
  31985. 800dd66: f107 0324 add.w r3, r7, #36 @ 0x24
  31986. 800dd6a: 4618 mov r0, r3
  31987. 800dd6c: f7fd fb46 bl 800b3fc <HAL_RCCEx_GetPLL2ClockFreq>
  31988. pclk = pll2_clocks.PLL2_Q_Frequency;
  31989. 800dd70: 6abb ldr r3, [r7, #40] @ 0x28
  31990. 800dd72: 63fb str r3, [r7, #60] @ 0x3c
  31991. break;
  31992. 800dd74: e027 b.n 800ddc6 <UART_SetConfig+0xa4a>
  31993. case UART_CLOCKSOURCE_PLL3:
  31994. HAL_RCCEx_GetPLL3ClockFreq(&pll3_clocks);
  31995. 800dd76: f107 0318 add.w r3, r7, #24
  31996. 800dd7a: 4618 mov r0, r3
  31997. 800dd7c: f7fd fc92 bl 800b6a4 <HAL_RCCEx_GetPLL3ClockFreq>
  31998. pclk = pll3_clocks.PLL3_Q_Frequency;
  31999. 800dd80: 69fb ldr r3, [r7, #28]
  32000. 800dd82: 63fb str r3, [r7, #60] @ 0x3c
  32001. break;
  32002. 800dd84: e01f b.n 800ddc6 <UART_SetConfig+0xa4a>
  32003. case UART_CLOCKSOURCE_HSI:
  32004. if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIDIV) != 0U)
  32005. 800dd86: 4b2d ldr r3, [pc, #180] @ (800de3c <UART_SetConfig+0xac0>)
  32006. 800dd88: 681b ldr r3, [r3, #0]
  32007. 800dd8a: f003 0320 and.w r3, r3, #32
  32008. 800dd8e: 2b00 cmp r3, #0
  32009. 800dd90: d009 beq.n 800dda6 <UART_SetConfig+0xa2a>
  32010. {
  32011. pclk = (uint32_t)(HSI_VALUE >> (__HAL_RCC_GET_HSI_DIVIDER() >> 3U));
  32012. 800dd92: 4b2a ldr r3, [pc, #168] @ (800de3c <UART_SetConfig+0xac0>)
  32013. 800dd94: 681b ldr r3, [r3, #0]
  32014. 800dd96: 08db lsrs r3, r3, #3
  32015. 800dd98: f003 0303 and.w r3, r3, #3
  32016. 800dd9c: 4a28 ldr r2, [pc, #160] @ (800de40 <UART_SetConfig+0xac4>)
  32017. 800dd9e: fa22 f303 lsr.w r3, r2, r3
  32018. 800dda2: 63fb str r3, [r7, #60] @ 0x3c
  32019. }
  32020. else
  32021. {
  32022. pclk = (uint32_t) HSI_VALUE;
  32023. }
  32024. break;
  32025. 800dda4: e00f b.n 800ddc6 <UART_SetConfig+0xa4a>
  32026. pclk = (uint32_t) HSI_VALUE;
  32027. 800dda6: 4b26 ldr r3, [pc, #152] @ (800de40 <UART_SetConfig+0xac4>)
  32028. 800dda8: 63fb str r3, [r7, #60] @ 0x3c
  32029. break;
  32030. 800ddaa: e00c b.n 800ddc6 <UART_SetConfig+0xa4a>
  32031. case UART_CLOCKSOURCE_CSI:
  32032. pclk = (uint32_t) CSI_VALUE;
  32033. 800ddac: 4b25 ldr r3, [pc, #148] @ (800de44 <UART_SetConfig+0xac8>)
  32034. 800ddae: 63fb str r3, [r7, #60] @ 0x3c
  32035. break;
  32036. 800ddb0: e009 b.n 800ddc6 <UART_SetConfig+0xa4a>
  32037. case UART_CLOCKSOURCE_LSE:
  32038. pclk = (uint32_t) LSE_VALUE;
  32039. 800ddb2: f44f 4300 mov.w r3, #32768 @ 0x8000
  32040. 800ddb6: 63fb str r3, [r7, #60] @ 0x3c
  32041. break;
  32042. 800ddb8: e005 b.n 800ddc6 <UART_SetConfig+0xa4a>
  32043. default:
  32044. pclk = 0U;
  32045. 800ddba: 2300 movs r3, #0
  32046. 800ddbc: 63fb str r3, [r7, #60] @ 0x3c
  32047. ret = HAL_ERROR;
  32048. 800ddbe: 2301 movs r3, #1
  32049. 800ddc0: f887 3042 strb.w r3, [r7, #66] @ 0x42
  32050. break;
  32051. 800ddc4: bf00 nop
  32052. }
  32053. if (pclk != 0U)
  32054. 800ddc6: 6bfb ldr r3, [r7, #60] @ 0x3c
  32055. 800ddc8: 2b00 cmp r3, #0
  32056. 800ddca: d021 beq.n 800de10 <UART_SetConfig+0xa94>
  32057. {
  32058. /* USARTDIV must be greater than or equal to 0d16 */
  32059. usartdiv = (uint32_t)(UART_DIV_SAMPLING16(pclk, huart->Init.BaudRate, huart->Init.ClockPrescaler));
  32060. 800ddcc: 697b ldr r3, [r7, #20]
  32061. 800ddce: 6a5b ldr r3, [r3, #36] @ 0x24
  32062. 800ddd0: 4a1d ldr r2, [pc, #116] @ (800de48 <UART_SetConfig+0xacc>)
  32063. 800ddd2: f832 3013 ldrh.w r3, [r2, r3, lsl #1]
  32064. 800ddd6: 461a mov r2, r3
  32065. 800ddd8: 6bfb ldr r3, [r7, #60] @ 0x3c
  32066. 800ddda: fbb3 f2f2 udiv r2, r3, r2
  32067. 800ddde: 697b ldr r3, [r7, #20]
  32068. 800dde0: 685b ldr r3, [r3, #4]
  32069. 800dde2: 085b lsrs r3, r3, #1
  32070. 800dde4: 441a add r2, r3
  32071. 800dde6: 697b ldr r3, [r7, #20]
  32072. 800dde8: 685b ldr r3, [r3, #4]
  32073. 800ddea: fbb2 f3f3 udiv r3, r2, r3
  32074. 800ddee: 63bb str r3, [r7, #56] @ 0x38
  32075. if ((usartdiv >= UART_BRR_MIN) && (usartdiv <= UART_BRR_MAX))
  32076. 800ddf0: 6bbb ldr r3, [r7, #56] @ 0x38
  32077. 800ddf2: 2b0f cmp r3, #15
  32078. 800ddf4: d909 bls.n 800de0a <UART_SetConfig+0xa8e>
  32079. 800ddf6: 6bbb ldr r3, [r7, #56] @ 0x38
  32080. 800ddf8: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
  32081. 800ddfc: d205 bcs.n 800de0a <UART_SetConfig+0xa8e>
  32082. {
  32083. huart->Instance->BRR = (uint16_t)usartdiv;
  32084. 800ddfe: 6bbb ldr r3, [r7, #56] @ 0x38
  32085. 800de00: b29a uxth r2, r3
  32086. 800de02: 697b ldr r3, [r7, #20]
  32087. 800de04: 681b ldr r3, [r3, #0]
  32088. 800de06: 60da str r2, [r3, #12]
  32089. 800de08: e002 b.n 800de10 <UART_SetConfig+0xa94>
  32090. }
  32091. else
  32092. {
  32093. ret = HAL_ERROR;
  32094. 800de0a: 2301 movs r3, #1
  32095. 800de0c: f887 3042 strb.w r3, [r7, #66] @ 0x42
  32096. }
  32097. }
  32098. }
  32099. /* Initialize the number of data to process during RX/TX ISR execution */
  32100. huart->NbTxDataToProcess = 1;
  32101. 800de10: 697b ldr r3, [r7, #20]
  32102. 800de12: 2201 movs r2, #1
  32103. 800de14: f8a3 206a strh.w r2, [r3, #106] @ 0x6a
  32104. huart->NbRxDataToProcess = 1;
  32105. 800de18: 697b ldr r3, [r7, #20]
  32106. 800de1a: 2201 movs r2, #1
  32107. 800de1c: f8a3 2068 strh.w r2, [r3, #104] @ 0x68
  32108. /* Clear ISR function pointers */
  32109. huart->RxISR = NULL;
  32110. 800de20: 697b ldr r3, [r7, #20]
  32111. 800de22: 2200 movs r2, #0
  32112. 800de24: 675a str r2, [r3, #116] @ 0x74
  32113. huart->TxISR = NULL;
  32114. 800de26: 697b ldr r3, [r7, #20]
  32115. 800de28: 2200 movs r2, #0
  32116. 800de2a: 679a str r2, [r3, #120] @ 0x78
  32117. return ret;
  32118. 800de2c: f897 3042 ldrb.w r3, [r7, #66] @ 0x42
  32119. }
  32120. 800de30: 4618 mov r0, r3
  32121. 800de32: 3748 adds r7, #72 @ 0x48
  32122. 800de34: 46bd mov sp, r7
  32123. 800de36: e8bd 8fb0 ldmia.w sp!, {r4, r5, r7, r8, r9, sl, fp, pc}
  32124. 800de3a: bf00 nop
  32125. 800de3c: 58024400 .word 0x58024400
  32126. 800de40: 03d09000 .word 0x03d09000
  32127. 800de44: 003d0900 .word 0x003d0900
  32128. 800de48: 080145fc .word 0x080145fc
  32129. 0800de4c <UART_AdvFeatureConfig>:
  32130. * @brief Configure the UART peripheral advanced features.
  32131. * @param huart UART handle.
  32132. * @retval None
  32133. */
  32134. void UART_AdvFeatureConfig(UART_HandleTypeDef *huart)
  32135. {
  32136. 800de4c: b480 push {r7}
  32137. 800de4e: b083 sub sp, #12
  32138. 800de50: af00 add r7, sp, #0
  32139. 800de52: 6078 str r0, [r7, #4]
  32140. /* Check whether the set of advanced features to configure is properly set */
  32141. assert_param(IS_UART_ADVFEATURE_INIT(huart->AdvancedInit.AdvFeatureInit));
  32142. /* if required, configure RX/TX pins swap */
  32143. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_SWAP_INIT))
  32144. 800de54: 687b ldr r3, [r7, #4]
  32145. 800de56: 6a9b ldr r3, [r3, #40] @ 0x28
  32146. 800de58: f003 0308 and.w r3, r3, #8
  32147. 800de5c: 2b00 cmp r3, #0
  32148. 800de5e: d00a beq.n 800de76 <UART_AdvFeatureConfig+0x2a>
  32149. {
  32150. assert_param(IS_UART_ADVFEATURE_SWAP(huart->AdvancedInit.Swap));
  32151. MODIFY_REG(huart->Instance->CR2, USART_CR2_SWAP, huart->AdvancedInit.Swap);
  32152. 800de60: 687b ldr r3, [r7, #4]
  32153. 800de62: 681b ldr r3, [r3, #0]
  32154. 800de64: 685b ldr r3, [r3, #4]
  32155. 800de66: f423 4100 bic.w r1, r3, #32768 @ 0x8000
  32156. 800de6a: 687b ldr r3, [r7, #4]
  32157. 800de6c: 6b9a ldr r2, [r3, #56] @ 0x38
  32158. 800de6e: 687b ldr r3, [r7, #4]
  32159. 800de70: 681b ldr r3, [r3, #0]
  32160. 800de72: 430a orrs r2, r1
  32161. 800de74: 605a str r2, [r3, #4]
  32162. }
  32163. /* if required, configure TX pin active level inversion */
  32164. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_TXINVERT_INIT))
  32165. 800de76: 687b ldr r3, [r7, #4]
  32166. 800de78: 6a9b ldr r3, [r3, #40] @ 0x28
  32167. 800de7a: f003 0301 and.w r3, r3, #1
  32168. 800de7e: 2b00 cmp r3, #0
  32169. 800de80: d00a beq.n 800de98 <UART_AdvFeatureConfig+0x4c>
  32170. {
  32171. assert_param(IS_UART_ADVFEATURE_TXINV(huart->AdvancedInit.TxPinLevelInvert));
  32172. MODIFY_REG(huart->Instance->CR2, USART_CR2_TXINV, huart->AdvancedInit.TxPinLevelInvert);
  32173. 800de82: 687b ldr r3, [r7, #4]
  32174. 800de84: 681b ldr r3, [r3, #0]
  32175. 800de86: 685b ldr r3, [r3, #4]
  32176. 800de88: f423 3100 bic.w r1, r3, #131072 @ 0x20000
  32177. 800de8c: 687b ldr r3, [r7, #4]
  32178. 800de8e: 6ada ldr r2, [r3, #44] @ 0x2c
  32179. 800de90: 687b ldr r3, [r7, #4]
  32180. 800de92: 681b ldr r3, [r3, #0]
  32181. 800de94: 430a orrs r2, r1
  32182. 800de96: 605a str r2, [r3, #4]
  32183. }
  32184. /* if required, configure RX pin active level inversion */
  32185. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_RXINVERT_INIT))
  32186. 800de98: 687b ldr r3, [r7, #4]
  32187. 800de9a: 6a9b ldr r3, [r3, #40] @ 0x28
  32188. 800de9c: f003 0302 and.w r3, r3, #2
  32189. 800dea0: 2b00 cmp r3, #0
  32190. 800dea2: d00a beq.n 800deba <UART_AdvFeatureConfig+0x6e>
  32191. {
  32192. assert_param(IS_UART_ADVFEATURE_RXINV(huart->AdvancedInit.RxPinLevelInvert));
  32193. MODIFY_REG(huart->Instance->CR2, USART_CR2_RXINV, huart->AdvancedInit.RxPinLevelInvert);
  32194. 800dea4: 687b ldr r3, [r7, #4]
  32195. 800dea6: 681b ldr r3, [r3, #0]
  32196. 800dea8: 685b ldr r3, [r3, #4]
  32197. 800deaa: f423 3180 bic.w r1, r3, #65536 @ 0x10000
  32198. 800deae: 687b ldr r3, [r7, #4]
  32199. 800deb0: 6b1a ldr r2, [r3, #48] @ 0x30
  32200. 800deb2: 687b ldr r3, [r7, #4]
  32201. 800deb4: 681b ldr r3, [r3, #0]
  32202. 800deb6: 430a orrs r2, r1
  32203. 800deb8: 605a str r2, [r3, #4]
  32204. }
  32205. /* if required, configure data inversion */
  32206. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_DATAINVERT_INIT))
  32207. 800deba: 687b ldr r3, [r7, #4]
  32208. 800debc: 6a9b ldr r3, [r3, #40] @ 0x28
  32209. 800debe: f003 0304 and.w r3, r3, #4
  32210. 800dec2: 2b00 cmp r3, #0
  32211. 800dec4: d00a beq.n 800dedc <UART_AdvFeatureConfig+0x90>
  32212. {
  32213. assert_param(IS_UART_ADVFEATURE_DATAINV(huart->AdvancedInit.DataInvert));
  32214. MODIFY_REG(huart->Instance->CR2, USART_CR2_DATAINV, huart->AdvancedInit.DataInvert);
  32215. 800dec6: 687b ldr r3, [r7, #4]
  32216. 800dec8: 681b ldr r3, [r3, #0]
  32217. 800deca: 685b ldr r3, [r3, #4]
  32218. 800decc: f423 2180 bic.w r1, r3, #262144 @ 0x40000
  32219. 800ded0: 687b ldr r3, [r7, #4]
  32220. 800ded2: 6b5a ldr r2, [r3, #52] @ 0x34
  32221. 800ded4: 687b ldr r3, [r7, #4]
  32222. 800ded6: 681b ldr r3, [r3, #0]
  32223. 800ded8: 430a orrs r2, r1
  32224. 800deda: 605a str r2, [r3, #4]
  32225. }
  32226. /* if required, configure RX overrun detection disabling */
  32227. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_RXOVERRUNDISABLE_INIT))
  32228. 800dedc: 687b ldr r3, [r7, #4]
  32229. 800dede: 6a9b ldr r3, [r3, #40] @ 0x28
  32230. 800dee0: f003 0310 and.w r3, r3, #16
  32231. 800dee4: 2b00 cmp r3, #0
  32232. 800dee6: d00a beq.n 800defe <UART_AdvFeatureConfig+0xb2>
  32233. {
  32234. assert_param(IS_UART_OVERRUN(huart->AdvancedInit.OverrunDisable));
  32235. MODIFY_REG(huart->Instance->CR3, USART_CR3_OVRDIS, huart->AdvancedInit.OverrunDisable);
  32236. 800dee8: 687b ldr r3, [r7, #4]
  32237. 800deea: 681b ldr r3, [r3, #0]
  32238. 800deec: 689b ldr r3, [r3, #8]
  32239. 800deee: f423 5180 bic.w r1, r3, #4096 @ 0x1000
  32240. 800def2: 687b ldr r3, [r7, #4]
  32241. 800def4: 6bda ldr r2, [r3, #60] @ 0x3c
  32242. 800def6: 687b ldr r3, [r7, #4]
  32243. 800def8: 681b ldr r3, [r3, #0]
  32244. 800defa: 430a orrs r2, r1
  32245. 800defc: 609a str r2, [r3, #8]
  32246. }
  32247. /* if required, configure DMA disabling on reception error */
  32248. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_DMADISABLEONERROR_INIT))
  32249. 800defe: 687b ldr r3, [r7, #4]
  32250. 800df00: 6a9b ldr r3, [r3, #40] @ 0x28
  32251. 800df02: f003 0320 and.w r3, r3, #32
  32252. 800df06: 2b00 cmp r3, #0
  32253. 800df08: d00a beq.n 800df20 <UART_AdvFeatureConfig+0xd4>
  32254. {
  32255. assert_param(IS_UART_ADVFEATURE_DMAONRXERROR(huart->AdvancedInit.DMADisableonRxError));
  32256. MODIFY_REG(huart->Instance->CR3, USART_CR3_DDRE, huart->AdvancedInit.DMADisableonRxError);
  32257. 800df0a: 687b ldr r3, [r7, #4]
  32258. 800df0c: 681b ldr r3, [r3, #0]
  32259. 800df0e: 689b ldr r3, [r3, #8]
  32260. 800df10: f423 5100 bic.w r1, r3, #8192 @ 0x2000
  32261. 800df14: 687b ldr r3, [r7, #4]
  32262. 800df16: 6c1a ldr r2, [r3, #64] @ 0x40
  32263. 800df18: 687b ldr r3, [r7, #4]
  32264. 800df1a: 681b ldr r3, [r3, #0]
  32265. 800df1c: 430a orrs r2, r1
  32266. 800df1e: 609a str r2, [r3, #8]
  32267. }
  32268. /* if required, configure auto Baud rate detection scheme */
  32269. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_AUTOBAUDRATE_INIT))
  32270. 800df20: 687b ldr r3, [r7, #4]
  32271. 800df22: 6a9b ldr r3, [r3, #40] @ 0x28
  32272. 800df24: f003 0340 and.w r3, r3, #64 @ 0x40
  32273. 800df28: 2b00 cmp r3, #0
  32274. 800df2a: d01a beq.n 800df62 <UART_AdvFeatureConfig+0x116>
  32275. {
  32276. assert_param(IS_USART_AUTOBAUDRATE_DETECTION_INSTANCE(huart->Instance));
  32277. assert_param(IS_UART_ADVFEATURE_AUTOBAUDRATE(huart->AdvancedInit.AutoBaudRateEnable));
  32278. MODIFY_REG(huart->Instance->CR2, USART_CR2_ABREN, huart->AdvancedInit.AutoBaudRateEnable);
  32279. 800df2c: 687b ldr r3, [r7, #4]
  32280. 800df2e: 681b ldr r3, [r3, #0]
  32281. 800df30: 685b ldr r3, [r3, #4]
  32282. 800df32: f423 1180 bic.w r1, r3, #1048576 @ 0x100000
  32283. 800df36: 687b ldr r3, [r7, #4]
  32284. 800df38: 6c5a ldr r2, [r3, #68] @ 0x44
  32285. 800df3a: 687b ldr r3, [r7, #4]
  32286. 800df3c: 681b ldr r3, [r3, #0]
  32287. 800df3e: 430a orrs r2, r1
  32288. 800df40: 605a str r2, [r3, #4]
  32289. /* set auto Baudrate detection parameters if detection is enabled */
  32290. if (huart->AdvancedInit.AutoBaudRateEnable == UART_ADVFEATURE_AUTOBAUDRATE_ENABLE)
  32291. 800df42: 687b ldr r3, [r7, #4]
  32292. 800df44: 6c5b ldr r3, [r3, #68] @ 0x44
  32293. 800df46: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
  32294. 800df4a: d10a bne.n 800df62 <UART_AdvFeatureConfig+0x116>
  32295. {
  32296. assert_param(IS_UART_ADVFEATURE_AUTOBAUDRATEMODE(huart->AdvancedInit.AutoBaudRateMode));
  32297. MODIFY_REG(huart->Instance->CR2, USART_CR2_ABRMODE, huart->AdvancedInit.AutoBaudRateMode);
  32298. 800df4c: 687b ldr r3, [r7, #4]
  32299. 800df4e: 681b ldr r3, [r3, #0]
  32300. 800df50: 685b ldr r3, [r3, #4]
  32301. 800df52: f423 01c0 bic.w r1, r3, #6291456 @ 0x600000
  32302. 800df56: 687b ldr r3, [r7, #4]
  32303. 800df58: 6c9a ldr r2, [r3, #72] @ 0x48
  32304. 800df5a: 687b ldr r3, [r7, #4]
  32305. 800df5c: 681b ldr r3, [r3, #0]
  32306. 800df5e: 430a orrs r2, r1
  32307. 800df60: 605a str r2, [r3, #4]
  32308. }
  32309. }
  32310. /* if required, configure MSB first on communication line */
  32311. if (HAL_IS_BIT_SET(huart->AdvancedInit.AdvFeatureInit, UART_ADVFEATURE_MSBFIRST_INIT))
  32312. 800df62: 687b ldr r3, [r7, #4]
  32313. 800df64: 6a9b ldr r3, [r3, #40] @ 0x28
  32314. 800df66: f003 0380 and.w r3, r3, #128 @ 0x80
  32315. 800df6a: 2b00 cmp r3, #0
  32316. 800df6c: d00a beq.n 800df84 <UART_AdvFeatureConfig+0x138>
  32317. {
  32318. assert_param(IS_UART_ADVFEATURE_MSBFIRST(huart->AdvancedInit.MSBFirst));
  32319. MODIFY_REG(huart->Instance->CR2, USART_CR2_MSBFIRST, huart->AdvancedInit.MSBFirst);
  32320. 800df6e: 687b ldr r3, [r7, #4]
  32321. 800df70: 681b ldr r3, [r3, #0]
  32322. 800df72: 685b ldr r3, [r3, #4]
  32323. 800df74: f423 2100 bic.w r1, r3, #524288 @ 0x80000
  32324. 800df78: 687b ldr r3, [r7, #4]
  32325. 800df7a: 6cda ldr r2, [r3, #76] @ 0x4c
  32326. 800df7c: 687b ldr r3, [r7, #4]
  32327. 800df7e: 681b ldr r3, [r3, #0]
  32328. 800df80: 430a orrs r2, r1
  32329. 800df82: 605a str r2, [r3, #4]
  32330. }
  32331. }
  32332. 800df84: bf00 nop
  32333. 800df86: 370c adds r7, #12
  32334. 800df88: 46bd mov sp, r7
  32335. 800df8a: f85d 7b04 ldr.w r7, [sp], #4
  32336. 800df8e: 4770 bx lr
  32337. 0800df90 <UART_CheckIdleState>:
  32338. * @brief Check the UART Idle State.
  32339. * @param huart UART handle.
  32340. * @retval HAL status
  32341. */
  32342. HAL_StatusTypeDef UART_CheckIdleState(UART_HandleTypeDef *huart)
  32343. {
  32344. 800df90: b580 push {r7, lr}
  32345. 800df92: b098 sub sp, #96 @ 0x60
  32346. 800df94: af02 add r7, sp, #8
  32347. 800df96: 6078 str r0, [r7, #4]
  32348. uint32_t tickstart;
  32349. /* Initialize the UART ErrorCode */
  32350. huart->ErrorCode = HAL_UART_ERROR_NONE;
  32351. 800df98: 687b ldr r3, [r7, #4]
  32352. 800df9a: 2200 movs r2, #0
  32353. 800df9c: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  32354. /* Init tickstart for timeout management */
  32355. tickstart = HAL_GetTick();
  32356. 800dfa0: f7f5 fa90 bl 80034c4 <HAL_GetTick>
  32357. 800dfa4: 6578 str r0, [r7, #84] @ 0x54
  32358. /* Check if the Transmitter is enabled */
  32359. if ((huart->Instance->CR1 & USART_CR1_TE) == USART_CR1_TE)
  32360. 800dfa6: 687b ldr r3, [r7, #4]
  32361. 800dfa8: 681b ldr r3, [r3, #0]
  32362. 800dfaa: 681b ldr r3, [r3, #0]
  32363. 800dfac: f003 0308 and.w r3, r3, #8
  32364. 800dfb0: 2b08 cmp r3, #8
  32365. 800dfb2: d12f bne.n 800e014 <UART_CheckIdleState+0x84>
  32366. {
  32367. /* Wait until TEACK flag is set */
  32368. if (UART_WaitOnFlagUntilTimeout(huart, USART_ISR_TEACK, RESET, tickstart, HAL_UART_TIMEOUT_VALUE) != HAL_OK)
  32369. 800dfb4: f06f 437e mvn.w r3, #4261412864 @ 0xfe000000
  32370. 800dfb8: 9300 str r3, [sp, #0]
  32371. 800dfba: 6d7b ldr r3, [r7, #84] @ 0x54
  32372. 800dfbc: 2200 movs r2, #0
  32373. 800dfbe: f44f 1100 mov.w r1, #2097152 @ 0x200000
  32374. 800dfc2: 6878 ldr r0, [r7, #4]
  32375. 800dfc4: f000 f88e bl 800e0e4 <UART_WaitOnFlagUntilTimeout>
  32376. 800dfc8: 4603 mov r3, r0
  32377. 800dfca: 2b00 cmp r3, #0
  32378. 800dfcc: d022 beq.n 800e014 <UART_CheckIdleState+0x84>
  32379. {
  32380. /* Disable TXE interrupt for the interrupt process */
  32381. ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_TXEIE_TXFNFIE));
  32382. 800dfce: 687b ldr r3, [r7, #4]
  32383. 800dfd0: 681b ldr r3, [r3, #0]
  32384. 800dfd2: 63bb str r3, [r7, #56] @ 0x38
  32385. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  32386. 800dfd4: 6bbb ldr r3, [r7, #56] @ 0x38
  32387. 800dfd6: e853 3f00 ldrex r3, [r3]
  32388. 800dfda: 637b str r3, [r7, #52] @ 0x34
  32389. return(result);
  32390. 800dfdc: 6b7b ldr r3, [r7, #52] @ 0x34
  32391. 800dfde: f023 0380 bic.w r3, r3, #128 @ 0x80
  32392. 800dfe2: 653b str r3, [r7, #80] @ 0x50
  32393. 800dfe4: 687b ldr r3, [r7, #4]
  32394. 800dfe6: 681b ldr r3, [r3, #0]
  32395. 800dfe8: 461a mov r2, r3
  32396. 800dfea: 6d3b ldr r3, [r7, #80] @ 0x50
  32397. 800dfec: 647b str r3, [r7, #68] @ 0x44
  32398. 800dfee: 643a str r2, [r7, #64] @ 0x40
  32399. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  32400. 800dff0: 6c39 ldr r1, [r7, #64] @ 0x40
  32401. 800dff2: 6c7a ldr r2, [r7, #68] @ 0x44
  32402. 800dff4: e841 2300 strex r3, r2, [r1]
  32403. 800dff8: 63fb str r3, [r7, #60] @ 0x3c
  32404. return(result);
  32405. 800dffa: 6bfb ldr r3, [r7, #60] @ 0x3c
  32406. 800dffc: 2b00 cmp r3, #0
  32407. 800dffe: d1e6 bne.n 800dfce <UART_CheckIdleState+0x3e>
  32408. huart->gState = HAL_UART_STATE_READY;
  32409. 800e000: 687b ldr r3, [r7, #4]
  32410. 800e002: 2220 movs r2, #32
  32411. 800e004: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  32412. __HAL_UNLOCK(huart);
  32413. 800e008: 687b ldr r3, [r7, #4]
  32414. 800e00a: 2200 movs r2, #0
  32415. 800e00c: f883 2084 strb.w r2, [r3, #132] @ 0x84
  32416. /* Timeout occurred */
  32417. return HAL_TIMEOUT;
  32418. 800e010: 2303 movs r3, #3
  32419. 800e012: e063 b.n 800e0dc <UART_CheckIdleState+0x14c>
  32420. }
  32421. }
  32422. /* Check if the Receiver is enabled */
  32423. if ((huart->Instance->CR1 & USART_CR1_RE) == USART_CR1_RE)
  32424. 800e014: 687b ldr r3, [r7, #4]
  32425. 800e016: 681b ldr r3, [r3, #0]
  32426. 800e018: 681b ldr r3, [r3, #0]
  32427. 800e01a: f003 0304 and.w r3, r3, #4
  32428. 800e01e: 2b04 cmp r3, #4
  32429. 800e020: d149 bne.n 800e0b6 <UART_CheckIdleState+0x126>
  32430. {
  32431. /* Wait until REACK flag is set */
  32432. if (UART_WaitOnFlagUntilTimeout(huart, USART_ISR_REACK, RESET, tickstart, HAL_UART_TIMEOUT_VALUE) != HAL_OK)
  32433. 800e022: f06f 437e mvn.w r3, #4261412864 @ 0xfe000000
  32434. 800e026: 9300 str r3, [sp, #0]
  32435. 800e028: 6d7b ldr r3, [r7, #84] @ 0x54
  32436. 800e02a: 2200 movs r2, #0
  32437. 800e02c: f44f 0180 mov.w r1, #4194304 @ 0x400000
  32438. 800e030: 6878 ldr r0, [r7, #4]
  32439. 800e032: f000 f857 bl 800e0e4 <UART_WaitOnFlagUntilTimeout>
  32440. 800e036: 4603 mov r3, r0
  32441. 800e038: 2b00 cmp r3, #0
  32442. 800e03a: d03c beq.n 800e0b6 <UART_CheckIdleState+0x126>
  32443. {
  32444. /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error)
  32445. interrupts for the interrupt process */
  32446. ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE));
  32447. 800e03c: 687b ldr r3, [r7, #4]
  32448. 800e03e: 681b ldr r3, [r3, #0]
  32449. 800e040: 627b str r3, [r7, #36] @ 0x24
  32450. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  32451. 800e042: 6a7b ldr r3, [r7, #36] @ 0x24
  32452. 800e044: e853 3f00 ldrex r3, [r3]
  32453. 800e048: 623b str r3, [r7, #32]
  32454. return(result);
  32455. 800e04a: 6a3b ldr r3, [r7, #32]
  32456. 800e04c: f423 7390 bic.w r3, r3, #288 @ 0x120
  32457. 800e050: 64fb str r3, [r7, #76] @ 0x4c
  32458. 800e052: 687b ldr r3, [r7, #4]
  32459. 800e054: 681b ldr r3, [r3, #0]
  32460. 800e056: 461a mov r2, r3
  32461. 800e058: 6cfb ldr r3, [r7, #76] @ 0x4c
  32462. 800e05a: 633b str r3, [r7, #48] @ 0x30
  32463. 800e05c: 62fa str r2, [r7, #44] @ 0x2c
  32464. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  32465. 800e05e: 6af9 ldr r1, [r7, #44] @ 0x2c
  32466. 800e060: 6b3a ldr r2, [r7, #48] @ 0x30
  32467. 800e062: e841 2300 strex r3, r2, [r1]
  32468. 800e066: 62bb str r3, [r7, #40] @ 0x28
  32469. return(result);
  32470. 800e068: 6abb ldr r3, [r7, #40] @ 0x28
  32471. 800e06a: 2b00 cmp r3, #0
  32472. 800e06c: d1e6 bne.n 800e03c <UART_CheckIdleState+0xac>
  32473. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);
  32474. 800e06e: 687b ldr r3, [r7, #4]
  32475. 800e070: 681b ldr r3, [r3, #0]
  32476. 800e072: 3308 adds r3, #8
  32477. 800e074: 613b str r3, [r7, #16]
  32478. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  32479. 800e076: 693b ldr r3, [r7, #16]
  32480. 800e078: e853 3f00 ldrex r3, [r3]
  32481. 800e07c: 60fb str r3, [r7, #12]
  32482. return(result);
  32483. 800e07e: 68fb ldr r3, [r7, #12]
  32484. 800e080: f023 0301 bic.w r3, r3, #1
  32485. 800e084: 64bb str r3, [r7, #72] @ 0x48
  32486. 800e086: 687b ldr r3, [r7, #4]
  32487. 800e088: 681b ldr r3, [r3, #0]
  32488. 800e08a: 3308 adds r3, #8
  32489. 800e08c: 6cba ldr r2, [r7, #72] @ 0x48
  32490. 800e08e: 61fa str r2, [r7, #28]
  32491. 800e090: 61bb str r3, [r7, #24]
  32492. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  32493. 800e092: 69b9 ldr r1, [r7, #24]
  32494. 800e094: 69fa ldr r2, [r7, #28]
  32495. 800e096: e841 2300 strex r3, r2, [r1]
  32496. 800e09a: 617b str r3, [r7, #20]
  32497. return(result);
  32498. 800e09c: 697b ldr r3, [r7, #20]
  32499. 800e09e: 2b00 cmp r3, #0
  32500. 800e0a0: d1e5 bne.n 800e06e <UART_CheckIdleState+0xde>
  32501. huart->RxState = HAL_UART_STATE_READY;
  32502. 800e0a2: 687b ldr r3, [r7, #4]
  32503. 800e0a4: 2220 movs r2, #32
  32504. 800e0a6: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  32505. __HAL_UNLOCK(huart);
  32506. 800e0aa: 687b ldr r3, [r7, #4]
  32507. 800e0ac: 2200 movs r2, #0
  32508. 800e0ae: f883 2084 strb.w r2, [r3, #132] @ 0x84
  32509. /* Timeout occurred */
  32510. return HAL_TIMEOUT;
  32511. 800e0b2: 2303 movs r3, #3
  32512. 800e0b4: e012 b.n 800e0dc <UART_CheckIdleState+0x14c>
  32513. }
  32514. }
  32515. /* Initialize the UART State */
  32516. huart->gState = HAL_UART_STATE_READY;
  32517. 800e0b6: 687b ldr r3, [r7, #4]
  32518. 800e0b8: 2220 movs r2, #32
  32519. 800e0ba: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  32520. huart->RxState = HAL_UART_STATE_READY;
  32521. 800e0be: 687b ldr r3, [r7, #4]
  32522. 800e0c0: 2220 movs r2, #32
  32523. 800e0c2: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  32524. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  32525. 800e0c6: 687b ldr r3, [r7, #4]
  32526. 800e0c8: 2200 movs r2, #0
  32527. 800e0ca: 66da str r2, [r3, #108] @ 0x6c
  32528. huart->RxEventType = HAL_UART_RXEVENT_TC;
  32529. 800e0cc: 687b ldr r3, [r7, #4]
  32530. 800e0ce: 2200 movs r2, #0
  32531. 800e0d0: 671a str r2, [r3, #112] @ 0x70
  32532. __HAL_UNLOCK(huart);
  32533. 800e0d2: 687b ldr r3, [r7, #4]
  32534. 800e0d4: 2200 movs r2, #0
  32535. 800e0d6: f883 2084 strb.w r2, [r3, #132] @ 0x84
  32536. return HAL_OK;
  32537. 800e0da: 2300 movs r3, #0
  32538. }
  32539. 800e0dc: 4618 mov r0, r3
  32540. 800e0de: 3758 adds r7, #88 @ 0x58
  32541. 800e0e0: 46bd mov sp, r7
  32542. 800e0e2: bd80 pop {r7, pc}
  32543. 0800e0e4 <UART_WaitOnFlagUntilTimeout>:
  32544. * @param Timeout Timeout duration
  32545. * @retval HAL status
  32546. */
  32547. HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status,
  32548. uint32_t Tickstart, uint32_t Timeout)
  32549. {
  32550. 800e0e4: b580 push {r7, lr}
  32551. 800e0e6: b084 sub sp, #16
  32552. 800e0e8: af00 add r7, sp, #0
  32553. 800e0ea: 60f8 str r0, [r7, #12]
  32554. 800e0ec: 60b9 str r1, [r7, #8]
  32555. 800e0ee: 603b str r3, [r7, #0]
  32556. 800e0f0: 4613 mov r3, r2
  32557. 800e0f2: 71fb strb r3, [r7, #7]
  32558. /* Wait until flag is set */
  32559. while ((__HAL_UART_GET_FLAG(huart, Flag) ? SET : RESET) == Status)
  32560. 800e0f4: e04f b.n 800e196 <UART_WaitOnFlagUntilTimeout+0xb2>
  32561. {
  32562. /* Check for the Timeout */
  32563. if (Timeout != HAL_MAX_DELAY)
  32564. 800e0f6: 69bb ldr r3, [r7, #24]
  32565. 800e0f8: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  32566. 800e0fc: d04b beq.n 800e196 <UART_WaitOnFlagUntilTimeout+0xb2>
  32567. {
  32568. if (((HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U))
  32569. 800e0fe: f7f5 f9e1 bl 80034c4 <HAL_GetTick>
  32570. 800e102: 4602 mov r2, r0
  32571. 800e104: 683b ldr r3, [r7, #0]
  32572. 800e106: 1ad3 subs r3, r2, r3
  32573. 800e108: 69ba ldr r2, [r7, #24]
  32574. 800e10a: 429a cmp r2, r3
  32575. 800e10c: d302 bcc.n 800e114 <UART_WaitOnFlagUntilTimeout+0x30>
  32576. 800e10e: 69bb ldr r3, [r7, #24]
  32577. 800e110: 2b00 cmp r3, #0
  32578. 800e112: d101 bne.n 800e118 <UART_WaitOnFlagUntilTimeout+0x34>
  32579. {
  32580. return HAL_TIMEOUT;
  32581. 800e114: 2303 movs r3, #3
  32582. 800e116: e04e b.n 800e1b6 <UART_WaitOnFlagUntilTimeout+0xd2>
  32583. }
  32584. if ((READ_BIT(huart->Instance->CR1, USART_CR1_RE) != 0U) && (Flag != UART_FLAG_TXE) && (Flag != UART_FLAG_TC))
  32585. 800e118: 68fb ldr r3, [r7, #12]
  32586. 800e11a: 681b ldr r3, [r3, #0]
  32587. 800e11c: 681b ldr r3, [r3, #0]
  32588. 800e11e: f003 0304 and.w r3, r3, #4
  32589. 800e122: 2b00 cmp r3, #0
  32590. 800e124: d037 beq.n 800e196 <UART_WaitOnFlagUntilTimeout+0xb2>
  32591. 800e126: 68bb ldr r3, [r7, #8]
  32592. 800e128: 2b80 cmp r3, #128 @ 0x80
  32593. 800e12a: d034 beq.n 800e196 <UART_WaitOnFlagUntilTimeout+0xb2>
  32594. 800e12c: 68bb ldr r3, [r7, #8]
  32595. 800e12e: 2b40 cmp r3, #64 @ 0x40
  32596. 800e130: d031 beq.n 800e196 <UART_WaitOnFlagUntilTimeout+0xb2>
  32597. {
  32598. if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) == SET)
  32599. 800e132: 68fb ldr r3, [r7, #12]
  32600. 800e134: 681b ldr r3, [r3, #0]
  32601. 800e136: 69db ldr r3, [r3, #28]
  32602. 800e138: f003 0308 and.w r3, r3, #8
  32603. 800e13c: 2b08 cmp r3, #8
  32604. 800e13e: d110 bne.n 800e162 <UART_WaitOnFlagUntilTimeout+0x7e>
  32605. {
  32606. /* Clear Overrun Error flag*/
  32607. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_OREF);
  32608. 800e140: 68fb ldr r3, [r7, #12]
  32609. 800e142: 681b ldr r3, [r3, #0]
  32610. 800e144: 2208 movs r2, #8
  32611. 800e146: 621a str r2, [r3, #32]
  32612. /* Blocking error : transfer is aborted
  32613. Set the UART state ready to be able to start again the process,
  32614. Disable Rx Interrupts if ongoing */
  32615. UART_EndRxTransfer(huart);
  32616. 800e148: 68f8 ldr r0, [r7, #12]
  32617. 800e14a: f000 f95b bl 800e404 <UART_EndRxTransfer>
  32618. huart->ErrorCode = HAL_UART_ERROR_ORE;
  32619. 800e14e: 68fb ldr r3, [r7, #12]
  32620. 800e150: 2208 movs r2, #8
  32621. 800e152: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  32622. /* Process Unlocked */
  32623. __HAL_UNLOCK(huart);
  32624. 800e156: 68fb ldr r3, [r7, #12]
  32625. 800e158: 2200 movs r2, #0
  32626. 800e15a: f883 2084 strb.w r2, [r3, #132] @ 0x84
  32627. return HAL_ERROR;
  32628. 800e15e: 2301 movs r3, #1
  32629. 800e160: e029 b.n 800e1b6 <UART_WaitOnFlagUntilTimeout+0xd2>
  32630. }
  32631. if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RTOF) == SET)
  32632. 800e162: 68fb ldr r3, [r7, #12]
  32633. 800e164: 681b ldr r3, [r3, #0]
  32634. 800e166: 69db ldr r3, [r3, #28]
  32635. 800e168: f403 6300 and.w r3, r3, #2048 @ 0x800
  32636. 800e16c: f5b3 6f00 cmp.w r3, #2048 @ 0x800
  32637. 800e170: d111 bne.n 800e196 <UART_WaitOnFlagUntilTimeout+0xb2>
  32638. {
  32639. /* Clear Receiver Timeout flag*/
  32640. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_RTOF);
  32641. 800e172: 68fb ldr r3, [r7, #12]
  32642. 800e174: 681b ldr r3, [r3, #0]
  32643. 800e176: f44f 6200 mov.w r2, #2048 @ 0x800
  32644. 800e17a: 621a str r2, [r3, #32]
  32645. /* Blocking error : transfer is aborted
  32646. Set the UART state ready to be able to start again the process,
  32647. Disable Rx Interrupts if ongoing */
  32648. UART_EndRxTransfer(huart);
  32649. 800e17c: 68f8 ldr r0, [r7, #12]
  32650. 800e17e: f000 f941 bl 800e404 <UART_EndRxTransfer>
  32651. huart->ErrorCode = HAL_UART_ERROR_RTO;
  32652. 800e182: 68fb ldr r3, [r7, #12]
  32653. 800e184: 2220 movs r2, #32
  32654. 800e186: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  32655. /* Process Unlocked */
  32656. __HAL_UNLOCK(huart);
  32657. 800e18a: 68fb ldr r3, [r7, #12]
  32658. 800e18c: 2200 movs r2, #0
  32659. 800e18e: f883 2084 strb.w r2, [r3, #132] @ 0x84
  32660. return HAL_TIMEOUT;
  32661. 800e192: 2303 movs r3, #3
  32662. 800e194: e00f b.n 800e1b6 <UART_WaitOnFlagUntilTimeout+0xd2>
  32663. while ((__HAL_UART_GET_FLAG(huart, Flag) ? SET : RESET) == Status)
  32664. 800e196: 68fb ldr r3, [r7, #12]
  32665. 800e198: 681b ldr r3, [r3, #0]
  32666. 800e19a: 69da ldr r2, [r3, #28]
  32667. 800e19c: 68bb ldr r3, [r7, #8]
  32668. 800e19e: 4013 ands r3, r2
  32669. 800e1a0: 68ba ldr r2, [r7, #8]
  32670. 800e1a2: 429a cmp r2, r3
  32671. 800e1a4: bf0c ite eq
  32672. 800e1a6: 2301 moveq r3, #1
  32673. 800e1a8: 2300 movne r3, #0
  32674. 800e1aa: b2db uxtb r3, r3
  32675. 800e1ac: 461a mov r2, r3
  32676. 800e1ae: 79fb ldrb r3, [r7, #7]
  32677. 800e1b0: 429a cmp r2, r3
  32678. 800e1b2: d0a0 beq.n 800e0f6 <UART_WaitOnFlagUntilTimeout+0x12>
  32679. }
  32680. }
  32681. }
  32682. }
  32683. return HAL_OK;
  32684. 800e1b4: 2300 movs r3, #0
  32685. }
  32686. 800e1b6: 4618 mov r0, r3
  32687. 800e1b8: 3710 adds r7, #16
  32688. 800e1ba: 46bd mov sp, r7
  32689. 800e1bc: bd80 pop {r7, pc}
  32690. ...
  32691. 0800e1c0 <UART_Start_Receive_IT>:
  32692. * @param pData Pointer to data buffer (u8 or u16 data elements).
  32693. * @param Size Amount of data elements (u8 or u16) to be received.
  32694. * @retval HAL status
  32695. */
  32696. HAL_StatusTypeDef UART_Start_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
  32697. {
  32698. 800e1c0: b480 push {r7}
  32699. 800e1c2: b0a3 sub sp, #140 @ 0x8c
  32700. 800e1c4: af00 add r7, sp, #0
  32701. 800e1c6: 60f8 str r0, [r7, #12]
  32702. 800e1c8: 60b9 str r1, [r7, #8]
  32703. 800e1ca: 4613 mov r3, r2
  32704. 800e1cc: 80fb strh r3, [r7, #6]
  32705. huart->pRxBuffPtr = pData;
  32706. 800e1ce: 68fb ldr r3, [r7, #12]
  32707. 800e1d0: 68ba ldr r2, [r7, #8]
  32708. 800e1d2: 659a str r2, [r3, #88] @ 0x58
  32709. huart->RxXferSize = Size;
  32710. 800e1d4: 68fb ldr r3, [r7, #12]
  32711. 800e1d6: 88fa ldrh r2, [r7, #6]
  32712. 800e1d8: f8a3 205c strh.w r2, [r3, #92] @ 0x5c
  32713. huart->RxXferCount = Size;
  32714. 800e1dc: 68fb ldr r3, [r7, #12]
  32715. 800e1de: 88fa ldrh r2, [r7, #6]
  32716. 800e1e0: f8a3 205e strh.w r2, [r3, #94] @ 0x5e
  32717. huart->RxISR = NULL;
  32718. 800e1e4: 68fb ldr r3, [r7, #12]
  32719. 800e1e6: 2200 movs r2, #0
  32720. 800e1e8: 675a str r2, [r3, #116] @ 0x74
  32721. /* Computation of UART mask to apply to RDR register */
  32722. UART_MASK_COMPUTATION(huart);
  32723. 800e1ea: 68fb ldr r3, [r7, #12]
  32724. 800e1ec: 689b ldr r3, [r3, #8]
  32725. 800e1ee: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  32726. 800e1f2: d10e bne.n 800e212 <UART_Start_Receive_IT+0x52>
  32727. 800e1f4: 68fb ldr r3, [r7, #12]
  32728. 800e1f6: 691b ldr r3, [r3, #16]
  32729. 800e1f8: 2b00 cmp r3, #0
  32730. 800e1fa: d105 bne.n 800e208 <UART_Start_Receive_IT+0x48>
  32731. 800e1fc: 68fb ldr r3, [r7, #12]
  32732. 800e1fe: f240 12ff movw r2, #511 @ 0x1ff
  32733. 800e202: f8a3 2060 strh.w r2, [r3, #96] @ 0x60
  32734. 800e206: e02d b.n 800e264 <UART_Start_Receive_IT+0xa4>
  32735. 800e208: 68fb ldr r3, [r7, #12]
  32736. 800e20a: 22ff movs r2, #255 @ 0xff
  32737. 800e20c: f8a3 2060 strh.w r2, [r3, #96] @ 0x60
  32738. 800e210: e028 b.n 800e264 <UART_Start_Receive_IT+0xa4>
  32739. 800e212: 68fb ldr r3, [r7, #12]
  32740. 800e214: 689b ldr r3, [r3, #8]
  32741. 800e216: 2b00 cmp r3, #0
  32742. 800e218: d10d bne.n 800e236 <UART_Start_Receive_IT+0x76>
  32743. 800e21a: 68fb ldr r3, [r7, #12]
  32744. 800e21c: 691b ldr r3, [r3, #16]
  32745. 800e21e: 2b00 cmp r3, #0
  32746. 800e220: d104 bne.n 800e22c <UART_Start_Receive_IT+0x6c>
  32747. 800e222: 68fb ldr r3, [r7, #12]
  32748. 800e224: 22ff movs r2, #255 @ 0xff
  32749. 800e226: f8a3 2060 strh.w r2, [r3, #96] @ 0x60
  32750. 800e22a: e01b b.n 800e264 <UART_Start_Receive_IT+0xa4>
  32751. 800e22c: 68fb ldr r3, [r7, #12]
  32752. 800e22e: 227f movs r2, #127 @ 0x7f
  32753. 800e230: f8a3 2060 strh.w r2, [r3, #96] @ 0x60
  32754. 800e234: e016 b.n 800e264 <UART_Start_Receive_IT+0xa4>
  32755. 800e236: 68fb ldr r3, [r7, #12]
  32756. 800e238: 689b ldr r3, [r3, #8]
  32757. 800e23a: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
  32758. 800e23e: d10d bne.n 800e25c <UART_Start_Receive_IT+0x9c>
  32759. 800e240: 68fb ldr r3, [r7, #12]
  32760. 800e242: 691b ldr r3, [r3, #16]
  32761. 800e244: 2b00 cmp r3, #0
  32762. 800e246: d104 bne.n 800e252 <UART_Start_Receive_IT+0x92>
  32763. 800e248: 68fb ldr r3, [r7, #12]
  32764. 800e24a: 227f movs r2, #127 @ 0x7f
  32765. 800e24c: f8a3 2060 strh.w r2, [r3, #96] @ 0x60
  32766. 800e250: e008 b.n 800e264 <UART_Start_Receive_IT+0xa4>
  32767. 800e252: 68fb ldr r3, [r7, #12]
  32768. 800e254: 223f movs r2, #63 @ 0x3f
  32769. 800e256: f8a3 2060 strh.w r2, [r3, #96] @ 0x60
  32770. 800e25a: e003 b.n 800e264 <UART_Start_Receive_IT+0xa4>
  32771. 800e25c: 68fb ldr r3, [r7, #12]
  32772. 800e25e: 2200 movs r2, #0
  32773. 800e260: f8a3 2060 strh.w r2, [r3, #96] @ 0x60
  32774. huart->ErrorCode = HAL_UART_ERROR_NONE;
  32775. 800e264: 68fb ldr r3, [r7, #12]
  32776. 800e266: 2200 movs r2, #0
  32777. 800e268: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  32778. huart->RxState = HAL_UART_STATE_BUSY_RX;
  32779. 800e26c: 68fb ldr r3, [r7, #12]
  32780. 800e26e: 2222 movs r2, #34 @ 0x22
  32781. 800e270: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  32782. /* Enable the UART Error Interrupt: (Frame error, noise error, overrun error) */
  32783. ATOMIC_SET_BIT(huart->Instance->CR3, USART_CR3_EIE);
  32784. 800e274: 68fb ldr r3, [r7, #12]
  32785. 800e276: 681b ldr r3, [r3, #0]
  32786. 800e278: 3308 adds r3, #8
  32787. 800e27a: 667b str r3, [r7, #100] @ 0x64
  32788. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  32789. 800e27c: 6e7b ldr r3, [r7, #100] @ 0x64
  32790. 800e27e: e853 3f00 ldrex r3, [r3]
  32791. 800e282: 663b str r3, [r7, #96] @ 0x60
  32792. return(result);
  32793. 800e284: 6e3b ldr r3, [r7, #96] @ 0x60
  32794. 800e286: f043 0301 orr.w r3, r3, #1
  32795. 800e28a: f8c7 3084 str.w r3, [r7, #132] @ 0x84
  32796. 800e28e: 68fb ldr r3, [r7, #12]
  32797. 800e290: 681b ldr r3, [r3, #0]
  32798. 800e292: 3308 adds r3, #8
  32799. 800e294: f8d7 2084 ldr.w r2, [r7, #132] @ 0x84
  32800. 800e298: 673a str r2, [r7, #112] @ 0x70
  32801. 800e29a: 66fb str r3, [r7, #108] @ 0x6c
  32802. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  32803. 800e29c: 6ef9 ldr r1, [r7, #108] @ 0x6c
  32804. 800e29e: 6f3a ldr r2, [r7, #112] @ 0x70
  32805. 800e2a0: e841 2300 strex r3, r2, [r1]
  32806. 800e2a4: 66bb str r3, [r7, #104] @ 0x68
  32807. return(result);
  32808. 800e2a6: 6ebb ldr r3, [r7, #104] @ 0x68
  32809. 800e2a8: 2b00 cmp r3, #0
  32810. 800e2aa: d1e3 bne.n 800e274 <UART_Start_Receive_IT+0xb4>
  32811. /* Configure Rx interrupt processing */
  32812. if ((huart->FifoMode == UART_FIFOMODE_ENABLE) && (Size >= huart->NbRxDataToProcess))
  32813. 800e2ac: 68fb ldr r3, [r7, #12]
  32814. 800e2ae: 6e5b ldr r3, [r3, #100] @ 0x64
  32815. 800e2b0: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
  32816. 800e2b4: d14f bne.n 800e356 <UART_Start_Receive_IT+0x196>
  32817. 800e2b6: 68fb ldr r3, [r7, #12]
  32818. 800e2b8: f8b3 3068 ldrh.w r3, [r3, #104] @ 0x68
  32819. 800e2bc: 88fa ldrh r2, [r7, #6]
  32820. 800e2be: 429a cmp r2, r3
  32821. 800e2c0: d349 bcc.n 800e356 <UART_Start_Receive_IT+0x196>
  32822. {
  32823. /* Set the Rx ISR function pointer according to the data word length */
  32824. if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE))
  32825. 800e2c2: 68fb ldr r3, [r7, #12]
  32826. 800e2c4: 689b ldr r3, [r3, #8]
  32827. 800e2c6: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  32828. 800e2ca: d107 bne.n 800e2dc <UART_Start_Receive_IT+0x11c>
  32829. 800e2cc: 68fb ldr r3, [r7, #12]
  32830. 800e2ce: 691b ldr r3, [r3, #16]
  32831. 800e2d0: 2b00 cmp r3, #0
  32832. 800e2d2: d103 bne.n 800e2dc <UART_Start_Receive_IT+0x11c>
  32833. {
  32834. huart->RxISR = UART_RxISR_16BIT_FIFOEN;
  32835. 800e2d4: 68fb ldr r3, [r7, #12]
  32836. 800e2d6: 4a47 ldr r2, [pc, #284] @ (800e3f4 <UART_Start_Receive_IT+0x234>)
  32837. 800e2d8: 675a str r2, [r3, #116] @ 0x74
  32838. 800e2da: e002 b.n 800e2e2 <UART_Start_Receive_IT+0x122>
  32839. }
  32840. else
  32841. {
  32842. huart->RxISR = UART_RxISR_8BIT_FIFOEN;
  32843. 800e2dc: 68fb ldr r3, [r7, #12]
  32844. 800e2de: 4a46 ldr r2, [pc, #280] @ (800e3f8 <UART_Start_Receive_IT+0x238>)
  32845. 800e2e0: 675a str r2, [r3, #116] @ 0x74
  32846. }
  32847. /* Enable the UART Parity Error interrupt and RX FIFO Threshold interrupt */
  32848. if (huart->Init.Parity != UART_PARITY_NONE)
  32849. 800e2e2: 68fb ldr r3, [r7, #12]
  32850. 800e2e4: 691b ldr r3, [r3, #16]
  32851. 800e2e6: 2b00 cmp r3, #0
  32852. 800e2e8: d01a beq.n 800e320 <UART_Start_Receive_IT+0x160>
  32853. {
  32854. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_PEIE);
  32855. 800e2ea: 68fb ldr r3, [r7, #12]
  32856. 800e2ec: 681b ldr r3, [r3, #0]
  32857. 800e2ee: 653b str r3, [r7, #80] @ 0x50
  32858. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  32859. 800e2f0: 6d3b ldr r3, [r7, #80] @ 0x50
  32860. 800e2f2: e853 3f00 ldrex r3, [r3]
  32861. 800e2f6: 64fb str r3, [r7, #76] @ 0x4c
  32862. return(result);
  32863. 800e2f8: 6cfb ldr r3, [r7, #76] @ 0x4c
  32864. 800e2fa: f443 7380 orr.w r3, r3, #256 @ 0x100
  32865. 800e2fe: f8c7 3080 str.w r3, [r7, #128] @ 0x80
  32866. 800e302: 68fb ldr r3, [r7, #12]
  32867. 800e304: 681b ldr r3, [r3, #0]
  32868. 800e306: 461a mov r2, r3
  32869. 800e308: f8d7 3080 ldr.w r3, [r7, #128] @ 0x80
  32870. 800e30c: 65fb str r3, [r7, #92] @ 0x5c
  32871. 800e30e: 65ba str r2, [r7, #88] @ 0x58
  32872. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  32873. 800e310: 6db9 ldr r1, [r7, #88] @ 0x58
  32874. 800e312: 6dfa ldr r2, [r7, #92] @ 0x5c
  32875. 800e314: e841 2300 strex r3, r2, [r1]
  32876. 800e318: 657b str r3, [r7, #84] @ 0x54
  32877. return(result);
  32878. 800e31a: 6d7b ldr r3, [r7, #84] @ 0x54
  32879. 800e31c: 2b00 cmp r3, #0
  32880. 800e31e: d1e4 bne.n 800e2ea <UART_Start_Receive_IT+0x12a>
  32881. }
  32882. ATOMIC_SET_BIT(huart->Instance->CR3, USART_CR3_RXFTIE);
  32883. 800e320: 68fb ldr r3, [r7, #12]
  32884. 800e322: 681b ldr r3, [r3, #0]
  32885. 800e324: 3308 adds r3, #8
  32886. 800e326: 63fb str r3, [r7, #60] @ 0x3c
  32887. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  32888. 800e328: 6bfb ldr r3, [r7, #60] @ 0x3c
  32889. 800e32a: e853 3f00 ldrex r3, [r3]
  32890. 800e32e: 63bb str r3, [r7, #56] @ 0x38
  32891. return(result);
  32892. 800e330: 6bbb ldr r3, [r7, #56] @ 0x38
  32893. 800e332: f043 5380 orr.w r3, r3, #268435456 @ 0x10000000
  32894. 800e336: 67fb str r3, [r7, #124] @ 0x7c
  32895. 800e338: 68fb ldr r3, [r7, #12]
  32896. 800e33a: 681b ldr r3, [r3, #0]
  32897. 800e33c: 3308 adds r3, #8
  32898. 800e33e: 6ffa ldr r2, [r7, #124] @ 0x7c
  32899. 800e340: 64ba str r2, [r7, #72] @ 0x48
  32900. 800e342: 647b str r3, [r7, #68] @ 0x44
  32901. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  32902. 800e344: 6c79 ldr r1, [r7, #68] @ 0x44
  32903. 800e346: 6cba ldr r2, [r7, #72] @ 0x48
  32904. 800e348: e841 2300 strex r3, r2, [r1]
  32905. 800e34c: 643b str r3, [r7, #64] @ 0x40
  32906. return(result);
  32907. 800e34e: 6c3b ldr r3, [r7, #64] @ 0x40
  32908. 800e350: 2b00 cmp r3, #0
  32909. 800e352: d1e5 bne.n 800e320 <UART_Start_Receive_IT+0x160>
  32910. 800e354: e046 b.n 800e3e4 <UART_Start_Receive_IT+0x224>
  32911. }
  32912. else
  32913. {
  32914. /* Set the Rx ISR function pointer according to the data word length */
  32915. if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE))
  32916. 800e356: 68fb ldr r3, [r7, #12]
  32917. 800e358: 689b ldr r3, [r3, #8]
  32918. 800e35a: f5b3 5f80 cmp.w r3, #4096 @ 0x1000
  32919. 800e35e: d107 bne.n 800e370 <UART_Start_Receive_IT+0x1b0>
  32920. 800e360: 68fb ldr r3, [r7, #12]
  32921. 800e362: 691b ldr r3, [r3, #16]
  32922. 800e364: 2b00 cmp r3, #0
  32923. 800e366: d103 bne.n 800e370 <UART_Start_Receive_IT+0x1b0>
  32924. {
  32925. huart->RxISR = UART_RxISR_16BIT;
  32926. 800e368: 68fb ldr r3, [r7, #12]
  32927. 800e36a: 4a24 ldr r2, [pc, #144] @ (800e3fc <UART_Start_Receive_IT+0x23c>)
  32928. 800e36c: 675a str r2, [r3, #116] @ 0x74
  32929. 800e36e: e002 b.n 800e376 <UART_Start_Receive_IT+0x1b6>
  32930. }
  32931. else
  32932. {
  32933. huart->RxISR = UART_RxISR_8BIT;
  32934. 800e370: 68fb ldr r3, [r7, #12]
  32935. 800e372: 4a23 ldr r2, [pc, #140] @ (800e400 <UART_Start_Receive_IT+0x240>)
  32936. 800e374: 675a str r2, [r3, #116] @ 0x74
  32937. }
  32938. /* Enable the UART Parity Error interrupt and Data Register Not Empty interrupt */
  32939. if (huart->Init.Parity != UART_PARITY_NONE)
  32940. 800e376: 68fb ldr r3, [r7, #12]
  32941. 800e378: 691b ldr r3, [r3, #16]
  32942. 800e37a: 2b00 cmp r3, #0
  32943. 800e37c: d019 beq.n 800e3b2 <UART_Start_Receive_IT+0x1f2>
  32944. {
  32945. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_PEIE | USART_CR1_RXNEIE_RXFNEIE);
  32946. 800e37e: 68fb ldr r3, [r7, #12]
  32947. 800e380: 681b ldr r3, [r3, #0]
  32948. 800e382: 62bb str r3, [r7, #40] @ 0x28
  32949. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  32950. 800e384: 6abb ldr r3, [r7, #40] @ 0x28
  32951. 800e386: e853 3f00 ldrex r3, [r3]
  32952. 800e38a: 627b str r3, [r7, #36] @ 0x24
  32953. return(result);
  32954. 800e38c: 6a7b ldr r3, [r7, #36] @ 0x24
  32955. 800e38e: f443 7390 orr.w r3, r3, #288 @ 0x120
  32956. 800e392: 677b str r3, [r7, #116] @ 0x74
  32957. 800e394: 68fb ldr r3, [r7, #12]
  32958. 800e396: 681b ldr r3, [r3, #0]
  32959. 800e398: 461a mov r2, r3
  32960. 800e39a: 6f7b ldr r3, [r7, #116] @ 0x74
  32961. 800e39c: 637b str r3, [r7, #52] @ 0x34
  32962. 800e39e: 633a str r2, [r7, #48] @ 0x30
  32963. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  32964. 800e3a0: 6b39 ldr r1, [r7, #48] @ 0x30
  32965. 800e3a2: 6b7a ldr r2, [r7, #52] @ 0x34
  32966. 800e3a4: e841 2300 strex r3, r2, [r1]
  32967. 800e3a8: 62fb str r3, [r7, #44] @ 0x2c
  32968. return(result);
  32969. 800e3aa: 6afb ldr r3, [r7, #44] @ 0x2c
  32970. 800e3ac: 2b00 cmp r3, #0
  32971. 800e3ae: d1e6 bne.n 800e37e <UART_Start_Receive_IT+0x1be>
  32972. 800e3b0: e018 b.n 800e3e4 <UART_Start_Receive_IT+0x224>
  32973. }
  32974. else
  32975. {
  32976. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_RXNEIE_RXFNEIE);
  32977. 800e3b2: 68fb ldr r3, [r7, #12]
  32978. 800e3b4: 681b ldr r3, [r3, #0]
  32979. 800e3b6: 617b str r3, [r7, #20]
  32980. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  32981. 800e3b8: 697b ldr r3, [r7, #20]
  32982. 800e3ba: e853 3f00 ldrex r3, [r3]
  32983. 800e3be: 613b str r3, [r7, #16]
  32984. return(result);
  32985. 800e3c0: 693b ldr r3, [r7, #16]
  32986. 800e3c2: f043 0320 orr.w r3, r3, #32
  32987. 800e3c6: 67bb str r3, [r7, #120] @ 0x78
  32988. 800e3c8: 68fb ldr r3, [r7, #12]
  32989. 800e3ca: 681b ldr r3, [r3, #0]
  32990. 800e3cc: 461a mov r2, r3
  32991. 800e3ce: 6fbb ldr r3, [r7, #120] @ 0x78
  32992. 800e3d0: 623b str r3, [r7, #32]
  32993. 800e3d2: 61fa str r2, [r7, #28]
  32994. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  32995. 800e3d4: 69f9 ldr r1, [r7, #28]
  32996. 800e3d6: 6a3a ldr r2, [r7, #32]
  32997. 800e3d8: e841 2300 strex r3, r2, [r1]
  32998. 800e3dc: 61bb str r3, [r7, #24]
  32999. return(result);
  33000. 800e3de: 69bb ldr r3, [r7, #24]
  33001. 800e3e0: 2b00 cmp r3, #0
  33002. 800e3e2: d1e6 bne.n 800e3b2 <UART_Start_Receive_IT+0x1f2>
  33003. }
  33004. }
  33005. return HAL_OK;
  33006. 800e3e4: 2300 movs r3, #0
  33007. }
  33008. 800e3e6: 4618 mov r0, r3
  33009. 800e3e8: 378c adds r7, #140 @ 0x8c
  33010. 800e3ea: 46bd mov sp, r7
  33011. 800e3ec: f85d 7b04 ldr.w r7, [sp], #4
  33012. 800e3f0: 4770 bx lr
  33013. 800e3f2: bf00 nop
  33014. 800e3f4: 0800ef69 .word 0x0800ef69
  33015. 800e3f8: 0800ec09 .word 0x0800ec09
  33016. 800e3fc: 0800ea51 .word 0x0800ea51
  33017. 800e400: 0800e899 .word 0x0800e899
  33018. 0800e404 <UART_EndRxTransfer>:
  33019. * @brief End ongoing Rx transfer on UART peripheral (following error detection or Reception completion).
  33020. * @param huart UART handle.
  33021. * @retval None
  33022. */
  33023. static void UART_EndRxTransfer(UART_HandleTypeDef *huart)
  33024. {
  33025. 800e404: b480 push {r7}
  33026. 800e406: b095 sub sp, #84 @ 0x54
  33027. 800e408: af00 add r7, sp, #0
  33028. 800e40a: 6078 str r0, [r7, #4]
  33029. /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */
  33030. ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE));
  33031. 800e40c: 687b ldr r3, [r7, #4]
  33032. 800e40e: 681b ldr r3, [r3, #0]
  33033. 800e410: 637b str r3, [r7, #52] @ 0x34
  33034. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  33035. 800e412: 6b7b ldr r3, [r7, #52] @ 0x34
  33036. 800e414: e853 3f00 ldrex r3, [r3]
  33037. 800e418: 633b str r3, [r7, #48] @ 0x30
  33038. return(result);
  33039. 800e41a: 6b3b ldr r3, [r7, #48] @ 0x30
  33040. 800e41c: f423 7390 bic.w r3, r3, #288 @ 0x120
  33041. 800e420: 64fb str r3, [r7, #76] @ 0x4c
  33042. 800e422: 687b ldr r3, [r7, #4]
  33043. 800e424: 681b ldr r3, [r3, #0]
  33044. 800e426: 461a mov r2, r3
  33045. 800e428: 6cfb ldr r3, [r7, #76] @ 0x4c
  33046. 800e42a: 643b str r3, [r7, #64] @ 0x40
  33047. 800e42c: 63fa str r2, [r7, #60] @ 0x3c
  33048. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  33049. 800e42e: 6bf9 ldr r1, [r7, #60] @ 0x3c
  33050. 800e430: 6c3a ldr r2, [r7, #64] @ 0x40
  33051. 800e432: e841 2300 strex r3, r2, [r1]
  33052. 800e436: 63bb str r3, [r7, #56] @ 0x38
  33053. return(result);
  33054. 800e438: 6bbb ldr r3, [r7, #56] @ 0x38
  33055. 800e43a: 2b00 cmp r3, #0
  33056. 800e43c: d1e6 bne.n 800e40c <UART_EndRxTransfer+0x8>
  33057. ATOMIC_CLEAR_BIT(huart->Instance->CR3, (USART_CR3_EIE | USART_CR3_RXFTIE));
  33058. 800e43e: 687b ldr r3, [r7, #4]
  33059. 800e440: 681b ldr r3, [r3, #0]
  33060. 800e442: 3308 adds r3, #8
  33061. 800e444: 623b str r3, [r7, #32]
  33062. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  33063. 800e446: 6a3b ldr r3, [r7, #32]
  33064. 800e448: e853 3f00 ldrex r3, [r3]
  33065. 800e44c: 61fb str r3, [r7, #28]
  33066. return(result);
  33067. 800e44e: 69fa ldr r2, [r7, #28]
  33068. 800e450: 4b1e ldr r3, [pc, #120] @ (800e4cc <UART_EndRxTransfer+0xc8>)
  33069. 800e452: 4013 ands r3, r2
  33070. 800e454: 64bb str r3, [r7, #72] @ 0x48
  33071. 800e456: 687b ldr r3, [r7, #4]
  33072. 800e458: 681b ldr r3, [r3, #0]
  33073. 800e45a: 3308 adds r3, #8
  33074. 800e45c: 6cba ldr r2, [r7, #72] @ 0x48
  33075. 800e45e: 62fa str r2, [r7, #44] @ 0x2c
  33076. 800e460: 62bb str r3, [r7, #40] @ 0x28
  33077. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  33078. 800e462: 6ab9 ldr r1, [r7, #40] @ 0x28
  33079. 800e464: 6afa ldr r2, [r7, #44] @ 0x2c
  33080. 800e466: e841 2300 strex r3, r2, [r1]
  33081. 800e46a: 627b str r3, [r7, #36] @ 0x24
  33082. return(result);
  33083. 800e46c: 6a7b ldr r3, [r7, #36] @ 0x24
  33084. 800e46e: 2b00 cmp r3, #0
  33085. 800e470: d1e5 bne.n 800e43e <UART_EndRxTransfer+0x3a>
  33086. /* In case of reception waiting for IDLE event, disable also the IDLE IE interrupt source */
  33087. if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
  33088. 800e472: 687b ldr r3, [r7, #4]
  33089. 800e474: 6edb ldr r3, [r3, #108] @ 0x6c
  33090. 800e476: 2b01 cmp r3, #1
  33091. 800e478: d118 bne.n 800e4ac <UART_EndRxTransfer+0xa8>
  33092. {
  33093. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  33094. 800e47a: 687b ldr r3, [r7, #4]
  33095. 800e47c: 681b ldr r3, [r3, #0]
  33096. 800e47e: 60fb str r3, [r7, #12]
  33097. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  33098. 800e480: 68fb ldr r3, [r7, #12]
  33099. 800e482: e853 3f00 ldrex r3, [r3]
  33100. 800e486: 60bb str r3, [r7, #8]
  33101. return(result);
  33102. 800e488: 68bb ldr r3, [r7, #8]
  33103. 800e48a: f023 0310 bic.w r3, r3, #16
  33104. 800e48e: 647b str r3, [r7, #68] @ 0x44
  33105. 800e490: 687b ldr r3, [r7, #4]
  33106. 800e492: 681b ldr r3, [r3, #0]
  33107. 800e494: 461a mov r2, r3
  33108. 800e496: 6c7b ldr r3, [r7, #68] @ 0x44
  33109. 800e498: 61bb str r3, [r7, #24]
  33110. 800e49a: 617a str r2, [r7, #20]
  33111. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  33112. 800e49c: 6979 ldr r1, [r7, #20]
  33113. 800e49e: 69ba ldr r2, [r7, #24]
  33114. 800e4a0: e841 2300 strex r3, r2, [r1]
  33115. 800e4a4: 613b str r3, [r7, #16]
  33116. return(result);
  33117. 800e4a6: 693b ldr r3, [r7, #16]
  33118. 800e4a8: 2b00 cmp r3, #0
  33119. 800e4aa: d1e6 bne.n 800e47a <UART_EndRxTransfer+0x76>
  33120. }
  33121. /* At end of Rx process, restore huart->RxState to Ready */
  33122. huart->RxState = HAL_UART_STATE_READY;
  33123. 800e4ac: 687b ldr r3, [r7, #4]
  33124. 800e4ae: 2220 movs r2, #32
  33125. 800e4b0: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  33126. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  33127. 800e4b4: 687b ldr r3, [r7, #4]
  33128. 800e4b6: 2200 movs r2, #0
  33129. 800e4b8: 66da str r2, [r3, #108] @ 0x6c
  33130. /* Reset RxIsr function pointer */
  33131. huart->RxISR = NULL;
  33132. 800e4ba: 687b ldr r3, [r7, #4]
  33133. 800e4bc: 2200 movs r2, #0
  33134. 800e4be: 675a str r2, [r3, #116] @ 0x74
  33135. }
  33136. 800e4c0: bf00 nop
  33137. 800e4c2: 3754 adds r7, #84 @ 0x54
  33138. 800e4c4: 46bd mov sp, r7
  33139. 800e4c6: f85d 7b04 ldr.w r7, [sp], #4
  33140. 800e4ca: 4770 bx lr
  33141. 800e4cc: effffffe .word 0xeffffffe
  33142. 0800e4d0 <UART_DMAAbortOnError>:
  33143. * (To be called at end of DMA Abort procedure following error occurrence).
  33144. * @param hdma DMA handle.
  33145. * @retval None
  33146. */
  33147. static void UART_DMAAbortOnError(DMA_HandleTypeDef *hdma)
  33148. {
  33149. 800e4d0: b580 push {r7, lr}
  33150. 800e4d2: b084 sub sp, #16
  33151. 800e4d4: af00 add r7, sp, #0
  33152. 800e4d6: 6078 str r0, [r7, #4]
  33153. UART_HandleTypeDef *huart = (UART_HandleTypeDef *)(hdma->Parent);
  33154. 800e4d8: 687b ldr r3, [r7, #4]
  33155. 800e4da: 6b9b ldr r3, [r3, #56] @ 0x38
  33156. 800e4dc: 60fb str r3, [r7, #12]
  33157. huart->RxXferCount = 0U;
  33158. 800e4de: 68fb ldr r3, [r7, #12]
  33159. 800e4e0: 2200 movs r2, #0
  33160. 800e4e2: f8a3 205e strh.w r2, [r3, #94] @ 0x5e
  33161. huart->TxXferCount = 0U;
  33162. 800e4e6: 68fb ldr r3, [r7, #12]
  33163. 800e4e8: 2200 movs r2, #0
  33164. 800e4ea: f8a3 2056 strh.w r2, [r3, #86] @ 0x56
  33165. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  33166. /*Call registered error callback*/
  33167. huart->ErrorCallback(huart);
  33168. #else
  33169. /*Call legacy weak error callback*/
  33170. HAL_UART_ErrorCallback(huart);
  33171. 800e4ee: 68f8 ldr r0, [r7, #12]
  33172. 800e4f0: f7fe ff3a bl 800d368 <HAL_UART_ErrorCallback>
  33173. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  33174. }
  33175. 800e4f4: bf00 nop
  33176. 800e4f6: 3710 adds r7, #16
  33177. 800e4f8: 46bd mov sp, r7
  33178. 800e4fa: bd80 pop {r7, pc}
  33179. 0800e4fc <UART_TxISR_8BIT>:
  33180. * interruptions have been enabled by HAL_UART_Transmit_IT().
  33181. * @param huart UART handle.
  33182. * @retval None
  33183. */
  33184. static void UART_TxISR_8BIT(UART_HandleTypeDef *huart)
  33185. {
  33186. 800e4fc: b480 push {r7}
  33187. 800e4fe: b08f sub sp, #60 @ 0x3c
  33188. 800e500: af00 add r7, sp, #0
  33189. 800e502: 6078 str r0, [r7, #4]
  33190. /* Check that a Tx process is ongoing */
  33191. if (huart->gState == HAL_UART_STATE_BUSY_TX)
  33192. 800e504: 687b ldr r3, [r7, #4]
  33193. 800e506: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  33194. 800e50a: 2b21 cmp r3, #33 @ 0x21
  33195. 800e50c: d14c bne.n 800e5a8 <UART_TxISR_8BIT+0xac>
  33196. {
  33197. if (huart->TxXferCount == 0U)
  33198. 800e50e: 687b ldr r3, [r7, #4]
  33199. 800e510: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  33200. 800e514: b29b uxth r3, r3
  33201. 800e516: 2b00 cmp r3, #0
  33202. 800e518: d132 bne.n 800e580 <UART_TxISR_8BIT+0x84>
  33203. {
  33204. /* Disable the UART Transmit Data Register Empty Interrupt */
  33205. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_TXEIE_TXFNFIE);
  33206. 800e51a: 687b ldr r3, [r7, #4]
  33207. 800e51c: 681b ldr r3, [r3, #0]
  33208. 800e51e: 623b str r3, [r7, #32]
  33209. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  33210. 800e520: 6a3b ldr r3, [r7, #32]
  33211. 800e522: e853 3f00 ldrex r3, [r3]
  33212. 800e526: 61fb str r3, [r7, #28]
  33213. return(result);
  33214. 800e528: 69fb ldr r3, [r7, #28]
  33215. 800e52a: f023 0380 bic.w r3, r3, #128 @ 0x80
  33216. 800e52e: 637b str r3, [r7, #52] @ 0x34
  33217. 800e530: 687b ldr r3, [r7, #4]
  33218. 800e532: 681b ldr r3, [r3, #0]
  33219. 800e534: 461a mov r2, r3
  33220. 800e536: 6b7b ldr r3, [r7, #52] @ 0x34
  33221. 800e538: 62fb str r3, [r7, #44] @ 0x2c
  33222. 800e53a: 62ba str r2, [r7, #40] @ 0x28
  33223. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  33224. 800e53c: 6ab9 ldr r1, [r7, #40] @ 0x28
  33225. 800e53e: 6afa ldr r2, [r7, #44] @ 0x2c
  33226. 800e540: e841 2300 strex r3, r2, [r1]
  33227. 800e544: 627b str r3, [r7, #36] @ 0x24
  33228. return(result);
  33229. 800e546: 6a7b ldr r3, [r7, #36] @ 0x24
  33230. 800e548: 2b00 cmp r3, #0
  33231. 800e54a: d1e6 bne.n 800e51a <UART_TxISR_8BIT+0x1e>
  33232. /* Enable the UART Transmit Complete Interrupt */
  33233. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_TCIE);
  33234. 800e54c: 687b ldr r3, [r7, #4]
  33235. 800e54e: 681b ldr r3, [r3, #0]
  33236. 800e550: 60fb str r3, [r7, #12]
  33237. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  33238. 800e552: 68fb ldr r3, [r7, #12]
  33239. 800e554: e853 3f00 ldrex r3, [r3]
  33240. 800e558: 60bb str r3, [r7, #8]
  33241. return(result);
  33242. 800e55a: 68bb ldr r3, [r7, #8]
  33243. 800e55c: f043 0340 orr.w r3, r3, #64 @ 0x40
  33244. 800e560: 633b str r3, [r7, #48] @ 0x30
  33245. 800e562: 687b ldr r3, [r7, #4]
  33246. 800e564: 681b ldr r3, [r3, #0]
  33247. 800e566: 461a mov r2, r3
  33248. 800e568: 6b3b ldr r3, [r7, #48] @ 0x30
  33249. 800e56a: 61bb str r3, [r7, #24]
  33250. 800e56c: 617a str r2, [r7, #20]
  33251. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  33252. 800e56e: 6979 ldr r1, [r7, #20]
  33253. 800e570: 69ba ldr r2, [r7, #24]
  33254. 800e572: e841 2300 strex r3, r2, [r1]
  33255. 800e576: 613b str r3, [r7, #16]
  33256. return(result);
  33257. 800e578: 693b ldr r3, [r7, #16]
  33258. 800e57a: 2b00 cmp r3, #0
  33259. 800e57c: d1e6 bne.n 800e54c <UART_TxISR_8BIT+0x50>
  33260. huart->Instance->TDR = (uint8_t)(*huart->pTxBuffPtr & (uint8_t)0xFF);
  33261. huart->pTxBuffPtr++;
  33262. huart->TxXferCount--;
  33263. }
  33264. }
  33265. }
  33266. 800e57e: e013 b.n 800e5a8 <UART_TxISR_8BIT+0xac>
  33267. huart->Instance->TDR = (uint8_t)(*huart->pTxBuffPtr & (uint8_t)0xFF);
  33268. 800e580: 687b ldr r3, [r7, #4]
  33269. 800e582: 6d1b ldr r3, [r3, #80] @ 0x50
  33270. 800e584: 781a ldrb r2, [r3, #0]
  33271. 800e586: 687b ldr r3, [r7, #4]
  33272. 800e588: 681b ldr r3, [r3, #0]
  33273. 800e58a: 629a str r2, [r3, #40] @ 0x28
  33274. huart->pTxBuffPtr++;
  33275. 800e58c: 687b ldr r3, [r7, #4]
  33276. 800e58e: 6d1b ldr r3, [r3, #80] @ 0x50
  33277. 800e590: 1c5a adds r2, r3, #1
  33278. 800e592: 687b ldr r3, [r7, #4]
  33279. 800e594: 651a str r2, [r3, #80] @ 0x50
  33280. huart->TxXferCount--;
  33281. 800e596: 687b ldr r3, [r7, #4]
  33282. 800e598: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  33283. 800e59c: b29b uxth r3, r3
  33284. 800e59e: 3b01 subs r3, #1
  33285. 800e5a0: b29a uxth r2, r3
  33286. 800e5a2: 687b ldr r3, [r7, #4]
  33287. 800e5a4: f8a3 2056 strh.w r2, [r3, #86] @ 0x56
  33288. }
  33289. 800e5a8: bf00 nop
  33290. 800e5aa: 373c adds r7, #60 @ 0x3c
  33291. 800e5ac: 46bd mov sp, r7
  33292. 800e5ae: f85d 7b04 ldr.w r7, [sp], #4
  33293. 800e5b2: 4770 bx lr
  33294. 0800e5b4 <UART_TxISR_16BIT>:
  33295. * interruptions have been enabled by HAL_UART_Transmit_IT().
  33296. * @param huart UART handle.
  33297. * @retval None
  33298. */
  33299. static void UART_TxISR_16BIT(UART_HandleTypeDef *huart)
  33300. {
  33301. 800e5b4: b480 push {r7}
  33302. 800e5b6: b091 sub sp, #68 @ 0x44
  33303. 800e5b8: af00 add r7, sp, #0
  33304. 800e5ba: 6078 str r0, [r7, #4]
  33305. const uint16_t *tmp;
  33306. /* Check that a Tx process is ongoing */
  33307. if (huart->gState == HAL_UART_STATE_BUSY_TX)
  33308. 800e5bc: 687b ldr r3, [r7, #4]
  33309. 800e5be: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  33310. 800e5c2: 2b21 cmp r3, #33 @ 0x21
  33311. 800e5c4: d151 bne.n 800e66a <UART_TxISR_16BIT+0xb6>
  33312. {
  33313. if (huart->TxXferCount == 0U)
  33314. 800e5c6: 687b ldr r3, [r7, #4]
  33315. 800e5c8: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  33316. 800e5cc: b29b uxth r3, r3
  33317. 800e5ce: 2b00 cmp r3, #0
  33318. 800e5d0: d132 bne.n 800e638 <UART_TxISR_16BIT+0x84>
  33319. {
  33320. /* Disable the UART Transmit Data Register Empty Interrupt */
  33321. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_TXEIE_TXFNFIE);
  33322. 800e5d2: 687b ldr r3, [r7, #4]
  33323. 800e5d4: 681b ldr r3, [r3, #0]
  33324. 800e5d6: 627b str r3, [r7, #36] @ 0x24
  33325. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  33326. 800e5d8: 6a7b ldr r3, [r7, #36] @ 0x24
  33327. 800e5da: e853 3f00 ldrex r3, [r3]
  33328. 800e5de: 623b str r3, [r7, #32]
  33329. return(result);
  33330. 800e5e0: 6a3b ldr r3, [r7, #32]
  33331. 800e5e2: f023 0380 bic.w r3, r3, #128 @ 0x80
  33332. 800e5e6: 63bb str r3, [r7, #56] @ 0x38
  33333. 800e5e8: 687b ldr r3, [r7, #4]
  33334. 800e5ea: 681b ldr r3, [r3, #0]
  33335. 800e5ec: 461a mov r2, r3
  33336. 800e5ee: 6bbb ldr r3, [r7, #56] @ 0x38
  33337. 800e5f0: 633b str r3, [r7, #48] @ 0x30
  33338. 800e5f2: 62fa str r2, [r7, #44] @ 0x2c
  33339. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  33340. 800e5f4: 6af9 ldr r1, [r7, #44] @ 0x2c
  33341. 800e5f6: 6b3a ldr r2, [r7, #48] @ 0x30
  33342. 800e5f8: e841 2300 strex r3, r2, [r1]
  33343. 800e5fc: 62bb str r3, [r7, #40] @ 0x28
  33344. return(result);
  33345. 800e5fe: 6abb ldr r3, [r7, #40] @ 0x28
  33346. 800e600: 2b00 cmp r3, #0
  33347. 800e602: d1e6 bne.n 800e5d2 <UART_TxISR_16BIT+0x1e>
  33348. /* Enable the UART Transmit Complete Interrupt */
  33349. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_TCIE);
  33350. 800e604: 687b ldr r3, [r7, #4]
  33351. 800e606: 681b ldr r3, [r3, #0]
  33352. 800e608: 613b str r3, [r7, #16]
  33353. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  33354. 800e60a: 693b ldr r3, [r7, #16]
  33355. 800e60c: e853 3f00 ldrex r3, [r3]
  33356. 800e610: 60fb str r3, [r7, #12]
  33357. return(result);
  33358. 800e612: 68fb ldr r3, [r7, #12]
  33359. 800e614: f043 0340 orr.w r3, r3, #64 @ 0x40
  33360. 800e618: 637b str r3, [r7, #52] @ 0x34
  33361. 800e61a: 687b ldr r3, [r7, #4]
  33362. 800e61c: 681b ldr r3, [r3, #0]
  33363. 800e61e: 461a mov r2, r3
  33364. 800e620: 6b7b ldr r3, [r7, #52] @ 0x34
  33365. 800e622: 61fb str r3, [r7, #28]
  33366. 800e624: 61ba str r2, [r7, #24]
  33367. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  33368. 800e626: 69b9 ldr r1, [r7, #24]
  33369. 800e628: 69fa ldr r2, [r7, #28]
  33370. 800e62a: e841 2300 strex r3, r2, [r1]
  33371. 800e62e: 617b str r3, [r7, #20]
  33372. return(result);
  33373. 800e630: 697b ldr r3, [r7, #20]
  33374. 800e632: 2b00 cmp r3, #0
  33375. 800e634: d1e6 bne.n 800e604 <UART_TxISR_16BIT+0x50>
  33376. huart->Instance->TDR = (((uint32_t)(*tmp)) & 0x01FFUL);
  33377. huart->pTxBuffPtr += 2U;
  33378. huart->TxXferCount--;
  33379. }
  33380. }
  33381. }
  33382. 800e636: e018 b.n 800e66a <UART_TxISR_16BIT+0xb6>
  33383. tmp = (const uint16_t *) huart->pTxBuffPtr;
  33384. 800e638: 687b ldr r3, [r7, #4]
  33385. 800e63a: 6d1b ldr r3, [r3, #80] @ 0x50
  33386. 800e63c: 63fb str r3, [r7, #60] @ 0x3c
  33387. huart->Instance->TDR = (((uint32_t)(*tmp)) & 0x01FFUL);
  33388. 800e63e: 6bfb ldr r3, [r7, #60] @ 0x3c
  33389. 800e640: 881b ldrh r3, [r3, #0]
  33390. 800e642: 461a mov r2, r3
  33391. 800e644: 687b ldr r3, [r7, #4]
  33392. 800e646: 681b ldr r3, [r3, #0]
  33393. 800e648: f3c2 0208 ubfx r2, r2, #0, #9
  33394. 800e64c: 629a str r2, [r3, #40] @ 0x28
  33395. huart->pTxBuffPtr += 2U;
  33396. 800e64e: 687b ldr r3, [r7, #4]
  33397. 800e650: 6d1b ldr r3, [r3, #80] @ 0x50
  33398. 800e652: 1c9a adds r2, r3, #2
  33399. 800e654: 687b ldr r3, [r7, #4]
  33400. 800e656: 651a str r2, [r3, #80] @ 0x50
  33401. huart->TxXferCount--;
  33402. 800e658: 687b ldr r3, [r7, #4]
  33403. 800e65a: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  33404. 800e65e: b29b uxth r3, r3
  33405. 800e660: 3b01 subs r3, #1
  33406. 800e662: b29a uxth r2, r3
  33407. 800e664: 687b ldr r3, [r7, #4]
  33408. 800e666: f8a3 2056 strh.w r2, [r3, #86] @ 0x56
  33409. }
  33410. 800e66a: bf00 nop
  33411. 800e66c: 3744 adds r7, #68 @ 0x44
  33412. 800e66e: 46bd mov sp, r7
  33413. 800e670: f85d 7b04 ldr.w r7, [sp], #4
  33414. 800e674: 4770 bx lr
  33415. 0800e676 <UART_TxISR_8BIT_FIFOEN>:
  33416. * interruptions have been enabled by HAL_UART_Transmit_IT().
  33417. * @param huart UART handle.
  33418. * @retval None
  33419. */
  33420. static void UART_TxISR_8BIT_FIFOEN(UART_HandleTypeDef *huart)
  33421. {
  33422. 800e676: b480 push {r7}
  33423. 800e678: b091 sub sp, #68 @ 0x44
  33424. 800e67a: af00 add r7, sp, #0
  33425. 800e67c: 6078 str r0, [r7, #4]
  33426. uint16_t nb_tx_data;
  33427. /* Check that a Tx process is ongoing */
  33428. if (huart->gState == HAL_UART_STATE_BUSY_TX)
  33429. 800e67e: 687b ldr r3, [r7, #4]
  33430. 800e680: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  33431. 800e684: 2b21 cmp r3, #33 @ 0x21
  33432. 800e686: d160 bne.n 800e74a <UART_TxISR_8BIT_FIFOEN+0xd4>
  33433. {
  33434. for (nb_tx_data = huart->NbTxDataToProcess ; nb_tx_data > 0U ; nb_tx_data--)
  33435. 800e688: 687b ldr r3, [r7, #4]
  33436. 800e68a: f8b3 306a ldrh.w r3, [r3, #106] @ 0x6a
  33437. 800e68e: 87fb strh r3, [r7, #62] @ 0x3e
  33438. 800e690: e057 b.n 800e742 <UART_TxISR_8BIT_FIFOEN+0xcc>
  33439. {
  33440. if (huart->TxXferCount == 0U)
  33441. 800e692: 687b ldr r3, [r7, #4]
  33442. 800e694: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  33443. 800e698: b29b uxth r3, r3
  33444. 800e69a: 2b00 cmp r3, #0
  33445. 800e69c: d133 bne.n 800e706 <UART_TxISR_8BIT_FIFOEN+0x90>
  33446. {
  33447. /* Disable the TX FIFO threshold interrupt */
  33448. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_TXFTIE);
  33449. 800e69e: 687b ldr r3, [r7, #4]
  33450. 800e6a0: 681b ldr r3, [r3, #0]
  33451. 800e6a2: 3308 adds r3, #8
  33452. 800e6a4: 627b str r3, [r7, #36] @ 0x24
  33453. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  33454. 800e6a6: 6a7b ldr r3, [r7, #36] @ 0x24
  33455. 800e6a8: e853 3f00 ldrex r3, [r3]
  33456. 800e6ac: 623b str r3, [r7, #32]
  33457. return(result);
  33458. 800e6ae: 6a3b ldr r3, [r7, #32]
  33459. 800e6b0: f423 0300 bic.w r3, r3, #8388608 @ 0x800000
  33460. 800e6b4: 63bb str r3, [r7, #56] @ 0x38
  33461. 800e6b6: 687b ldr r3, [r7, #4]
  33462. 800e6b8: 681b ldr r3, [r3, #0]
  33463. 800e6ba: 3308 adds r3, #8
  33464. 800e6bc: 6bba ldr r2, [r7, #56] @ 0x38
  33465. 800e6be: 633a str r2, [r7, #48] @ 0x30
  33466. 800e6c0: 62fb str r3, [r7, #44] @ 0x2c
  33467. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  33468. 800e6c2: 6af9 ldr r1, [r7, #44] @ 0x2c
  33469. 800e6c4: 6b3a ldr r2, [r7, #48] @ 0x30
  33470. 800e6c6: e841 2300 strex r3, r2, [r1]
  33471. 800e6ca: 62bb str r3, [r7, #40] @ 0x28
  33472. return(result);
  33473. 800e6cc: 6abb ldr r3, [r7, #40] @ 0x28
  33474. 800e6ce: 2b00 cmp r3, #0
  33475. 800e6d0: d1e5 bne.n 800e69e <UART_TxISR_8BIT_FIFOEN+0x28>
  33476. /* Enable the UART Transmit Complete Interrupt */
  33477. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_TCIE);
  33478. 800e6d2: 687b ldr r3, [r7, #4]
  33479. 800e6d4: 681b ldr r3, [r3, #0]
  33480. 800e6d6: 613b str r3, [r7, #16]
  33481. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  33482. 800e6d8: 693b ldr r3, [r7, #16]
  33483. 800e6da: e853 3f00 ldrex r3, [r3]
  33484. 800e6de: 60fb str r3, [r7, #12]
  33485. return(result);
  33486. 800e6e0: 68fb ldr r3, [r7, #12]
  33487. 800e6e2: f043 0340 orr.w r3, r3, #64 @ 0x40
  33488. 800e6e6: 637b str r3, [r7, #52] @ 0x34
  33489. 800e6e8: 687b ldr r3, [r7, #4]
  33490. 800e6ea: 681b ldr r3, [r3, #0]
  33491. 800e6ec: 461a mov r2, r3
  33492. 800e6ee: 6b7b ldr r3, [r7, #52] @ 0x34
  33493. 800e6f0: 61fb str r3, [r7, #28]
  33494. 800e6f2: 61ba str r2, [r7, #24]
  33495. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  33496. 800e6f4: 69b9 ldr r1, [r7, #24]
  33497. 800e6f6: 69fa ldr r2, [r7, #28]
  33498. 800e6f8: e841 2300 strex r3, r2, [r1]
  33499. 800e6fc: 617b str r3, [r7, #20]
  33500. return(result);
  33501. 800e6fe: 697b ldr r3, [r7, #20]
  33502. 800e700: 2b00 cmp r3, #0
  33503. 800e702: d1e6 bne.n 800e6d2 <UART_TxISR_8BIT_FIFOEN+0x5c>
  33504. break; /* force exit loop */
  33505. 800e704: e021 b.n 800e74a <UART_TxISR_8BIT_FIFOEN+0xd4>
  33506. }
  33507. else if (READ_BIT(huart->Instance->ISR, USART_ISR_TXE_TXFNF) != 0U)
  33508. 800e706: 687b ldr r3, [r7, #4]
  33509. 800e708: 681b ldr r3, [r3, #0]
  33510. 800e70a: 69db ldr r3, [r3, #28]
  33511. 800e70c: f003 0380 and.w r3, r3, #128 @ 0x80
  33512. 800e710: 2b00 cmp r3, #0
  33513. 800e712: d013 beq.n 800e73c <UART_TxISR_8BIT_FIFOEN+0xc6>
  33514. {
  33515. huart->Instance->TDR = (uint8_t)(*huart->pTxBuffPtr & (uint8_t)0xFF);
  33516. 800e714: 687b ldr r3, [r7, #4]
  33517. 800e716: 6d1b ldr r3, [r3, #80] @ 0x50
  33518. 800e718: 781a ldrb r2, [r3, #0]
  33519. 800e71a: 687b ldr r3, [r7, #4]
  33520. 800e71c: 681b ldr r3, [r3, #0]
  33521. 800e71e: 629a str r2, [r3, #40] @ 0x28
  33522. huart->pTxBuffPtr++;
  33523. 800e720: 687b ldr r3, [r7, #4]
  33524. 800e722: 6d1b ldr r3, [r3, #80] @ 0x50
  33525. 800e724: 1c5a adds r2, r3, #1
  33526. 800e726: 687b ldr r3, [r7, #4]
  33527. 800e728: 651a str r2, [r3, #80] @ 0x50
  33528. huart->TxXferCount--;
  33529. 800e72a: 687b ldr r3, [r7, #4]
  33530. 800e72c: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  33531. 800e730: b29b uxth r3, r3
  33532. 800e732: 3b01 subs r3, #1
  33533. 800e734: b29a uxth r2, r3
  33534. 800e736: 687b ldr r3, [r7, #4]
  33535. 800e738: f8a3 2056 strh.w r2, [r3, #86] @ 0x56
  33536. for (nb_tx_data = huart->NbTxDataToProcess ; nb_tx_data > 0U ; nb_tx_data--)
  33537. 800e73c: 8ffb ldrh r3, [r7, #62] @ 0x3e
  33538. 800e73e: 3b01 subs r3, #1
  33539. 800e740: 87fb strh r3, [r7, #62] @ 0x3e
  33540. 800e742: 8ffb ldrh r3, [r7, #62] @ 0x3e
  33541. 800e744: 2b00 cmp r3, #0
  33542. 800e746: d1a4 bne.n 800e692 <UART_TxISR_8BIT_FIFOEN+0x1c>
  33543. {
  33544. /* Nothing to do */
  33545. }
  33546. }
  33547. }
  33548. }
  33549. 800e748: e7ff b.n 800e74a <UART_TxISR_8BIT_FIFOEN+0xd4>
  33550. 800e74a: bf00 nop
  33551. 800e74c: 3744 adds r7, #68 @ 0x44
  33552. 800e74e: 46bd mov sp, r7
  33553. 800e750: f85d 7b04 ldr.w r7, [sp], #4
  33554. 800e754: 4770 bx lr
  33555. 0800e756 <UART_TxISR_16BIT_FIFOEN>:
  33556. * interruptions have been enabled by HAL_UART_Transmit_IT().
  33557. * @param huart UART handle.
  33558. * @retval None
  33559. */
  33560. static void UART_TxISR_16BIT_FIFOEN(UART_HandleTypeDef *huart)
  33561. {
  33562. 800e756: b480 push {r7}
  33563. 800e758: b091 sub sp, #68 @ 0x44
  33564. 800e75a: af00 add r7, sp, #0
  33565. 800e75c: 6078 str r0, [r7, #4]
  33566. const uint16_t *tmp;
  33567. uint16_t nb_tx_data;
  33568. /* Check that a Tx process is ongoing */
  33569. if (huart->gState == HAL_UART_STATE_BUSY_TX)
  33570. 800e75e: 687b ldr r3, [r7, #4]
  33571. 800e760: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
  33572. 800e764: 2b21 cmp r3, #33 @ 0x21
  33573. 800e766: d165 bne.n 800e834 <UART_TxISR_16BIT_FIFOEN+0xde>
  33574. {
  33575. for (nb_tx_data = huart->NbTxDataToProcess ; nb_tx_data > 0U ; nb_tx_data--)
  33576. 800e768: 687b ldr r3, [r7, #4]
  33577. 800e76a: f8b3 306a ldrh.w r3, [r3, #106] @ 0x6a
  33578. 800e76e: 87fb strh r3, [r7, #62] @ 0x3e
  33579. 800e770: e05c b.n 800e82c <UART_TxISR_16BIT_FIFOEN+0xd6>
  33580. {
  33581. if (huart->TxXferCount == 0U)
  33582. 800e772: 687b ldr r3, [r7, #4]
  33583. 800e774: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  33584. 800e778: b29b uxth r3, r3
  33585. 800e77a: 2b00 cmp r3, #0
  33586. 800e77c: d133 bne.n 800e7e6 <UART_TxISR_16BIT_FIFOEN+0x90>
  33587. {
  33588. /* Disable the TX FIFO threshold interrupt */
  33589. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_TXFTIE);
  33590. 800e77e: 687b ldr r3, [r7, #4]
  33591. 800e780: 681b ldr r3, [r3, #0]
  33592. 800e782: 3308 adds r3, #8
  33593. 800e784: 623b str r3, [r7, #32]
  33594. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  33595. 800e786: 6a3b ldr r3, [r7, #32]
  33596. 800e788: e853 3f00 ldrex r3, [r3]
  33597. 800e78c: 61fb str r3, [r7, #28]
  33598. return(result);
  33599. 800e78e: 69fb ldr r3, [r7, #28]
  33600. 800e790: f423 0300 bic.w r3, r3, #8388608 @ 0x800000
  33601. 800e794: 637b str r3, [r7, #52] @ 0x34
  33602. 800e796: 687b ldr r3, [r7, #4]
  33603. 800e798: 681b ldr r3, [r3, #0]
  33604. 800e79a: 3308 adds r3, #8
  33605. 800e79c: 6b7a ldr r2, [r7, #52] @ 0x34
  33606. 800e79e: 62fa str r2, [r7, #44] @ 0x2c
  33607. 800e7a0: 62bb str r3, [r7, #40] @ 0x28
  33608. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  33609. 800e7a2: 6ab9 ldr r1, [r7, #40] @ 0x28
  33610. 800e7a4: 6afa ldr r2, [r7, #44] @ 0x2c
  33611. 800e7a6: e841 2300 strex r3, r2, [r1]
  33612. 800e7aa: 627b str r3, [r7, #36] @ 0x24
  33613. return(result);
  33614. 800e7ac: 6a7b ldr r3, [r7, #36] @ 0x24
  33615. 800e7ae: 2b00 cmp r3, #0
  33616. 800e7b0: d1e5 bne.n 800e77e <UART_TxISR_16BIT_FIFOEN+0x28>
  33617. /* Enable the UART Transmit Complete Interrupt */
  33618. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_TCIE);
  33619. 800e7b2: 687b ldr r3, [r7, #4]
  33620. 800e7b4: 681b ldr r3, [r3, #0]
  33621. 800e7b6: 60fb str r3, [r7, #12]
  33622. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  33623. 800e7b8: 68fb ldr r3, [r7, #12]
  33624. 800e7ba: e853 3f00 ldrex r3, [r3]
  33625. 800e7be: 60bb str r3, [r7, #8]
  33626. return(result);
  33627. 800e7c0: 68bb ldr r3, [r7, #8]
  33628. 800e7c2: f043 0340 orr.w r3, r3, #64 @ 0x40
  33629. 800e7c6: 633b str r3, [r7, #48] @ 0x30
  33630. 800e7c8: 687b ldr r3, [r7, #4]
  33631. 800e7ca: 681b ldr r3, [r3, #0]
  33632. 800e7cc: 461a mov r2, r3
  33633. 800e7ce: 6b3b ldr r3, [r7, #48] @ 0x30
  33634. 800e7d0: 61bb str r3, [r7, #24]
  33635. 800e7d2: 617a str r2, [r7, #20]
  33636. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  33637. 800e7d4: 6979 ldr r1, [r7, #20]
  33638. 800e7d6: 69ba ldr r2, [r7, #24]
  33639. 800e7d8: e841 2300 strex r3, r2, [r1]
  33640. 800e7dc: 613b str r3, [r7, #16]
  33641. return(result);
  33642. 800e7de: 693b ldr r3, [r7, #16]
  33643. 800e7e0: 2b00 cmp r3, #0
  33644. 800e7e2: d1e6 bne.n 800e7b2 <UART_TxISR_16BIT_FIFOEN+0x5c>
  33645. break; /* force exit loop */
  33646. 800e7e4: e026 b.n 800e834 <UART_TxISR_16BIT_FIFOEN+0xde>
  33647. }
  33648. else if (READ_BIT(huart->Instance->ISR, USART_ISR_TXE_TXFNF) != 0U)
  33649. 800e7e6: 687b ldr r3, [r7, #4]
  33650. 800e7e8: 681b ldr r3, [r3, #0]
  33651. 800e7ea: 69db ldr r3, [r3, #28]
  33652. 800e7ec: f003 0380 and.w r3, r3, #128 @ 0x80
  33653. 800e7f0: 2b00 cmp r3, #0
  33654. 800e7f2: d018 beq.n 800e826 <UART_TxISR_16BIT_FIFOEN+0xd0>
  33655. {
  33656. tmp = (const uint16_t *) huart->pTxBuffPtr;
  33657. 800e7f4: 687b ldr r3, [r7, #4]
  33658. 800e7f6: 6d1b ldr r3, [r3, #80] @ 0x50
  33659. 800e7f8: 63bb str r3, [r7, #56] @ 0x38
  33660. huart->Instance->TDR = (((uint32_t)(*tmp)) & 0x01FFUL);
  33661. 800e7fa: 6bbb ldr r3, [r7, #56] @ 0x38
  33662. 800e7fc: 881b ldrh r3, [r3, #0]
  33663. 800e7fe: 461a mov r2, r3
  33664. 800e800: 687b ldr r3, [r7, #4]
  33665. 800e802: 681b ldr r3, [r3, #0]
  33666. 800e804: f3c2 0208 ubfx r2, r2, #0, #9
  33667. 800e808: 629a str r2, [r3, #40] @ 0x28
  33668. huart->pTxBuffPtr += 2U;
  33669. 800e80a: 687b ldr r3, [r7, #4]
  33670. 800e80c: 6d1b ldr r3, [r3, #80] @ 0x50
  33671. 800e80e: 1c9a adds r2, r3, #2
  33672. 800e810: 687b ldr r3, [r7, #4]
  33673. 800e812: 651a str r2, [r3, #80] @ 0x50
  33674. huart->TxXferCount--;
  33675. 800e814: 687b ldr r3, [r7, #4]
  33676. 800e816: f8b3 3056 ldrh.w r3, [r3, #86] @ 0x56
  33677. 800e81a: b29b uxth r3, r3
  33678. 800e81c: 3b01 subs r3, #1
  33679. 800e81e: b29a uxth r2, r3
  33680. 800e820: 687b ldr r3, [r7, #4]
  33681. 800e822: f8a3 2056 strh.w r2, [r3, #86] @ 0x56
  33682. for (nb_tx_data = huart->NbTxDataToProcess ; nb_tx_data > 0U ; nb_tx_data--)
  33683. 800e826: 8ffb ldrh r3, [r7, #62] @ 0x3e
  33684. 800e828: 3b01 subs r3, #1
  33685. 800e82a: 87fb strh r3, [r7, #62] @ 0x3e
  33686. 800e82c: 8ffb ldrh r3, [r7, #62] @ 0x3e
  33687. 800e82e: 2b00 cmp r3, #0
  33688. 800e830: d19f bne.n 800e772 <UART_TxISR_16BIT_FIFOEN+0x1c>
  33689. {
  33690. /* Nothing to do */
  33691. }
  33692. }
  33693. }
  33694. }
  33695. 800e832: e7ff b.n 800e834 <UART_TxISR_16BIT_FIFOEN+0xde>
  33696. 800e834: bf00 nop
  33697. 800e836: 3744 adds r7, #68 @ 0x44
  33698. 800e838: 46bd mov sp, r7
  33699. 800e83a: f85d 7b04 ldr.w r7, [sp], #4
  33700. 800e83e: 4770 bx lr
  33701. 0800e840 <UART_EndTransmit_IT>:
  33702. * @param huart pointer to a UART_HandleTypeDef structure that contains
  33703. * the configuration information for the specified UART module.
  33704. * @retval None
  33705. */
  33706. static void UART_EndTransmit_IT(UART_HandleTypeDef *huart)
  33707. {
  33708. 800e840: b580 push {r7, lr}
  33709. 800e842: b088 sub sp, #32
  33710. 800e844: af00 add r7, sp, #0
  33711. 800e846: 6078 str r0, [r7, #4]
  33712. /* Disable the UART Transmit Complete Interrupt */
  33713. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_TCIE);
  33714. 800e848: 687b ldr r3, [r7, #4]
  33715. 800e84a: 681b ldr r3, [r3, #0]
  33716. 800e84c: 60fb str r3, [r7, #12]
  33717. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  33718. 800e84e: 68fb ldr r3, [r7, #12]
  33719. 800e850: e853 3f00 ldrex r3, [r3]
  33720. 800e854: 60bb str r3, [r7, #8]
  33721. return(result);
  33722. 800e856: 68bb ldr r3, [r7, #8]
  33723. 800e858: f023 0340 bic.w r3, r3, #64 @ 0x40
  33724. 800e85c: 61fb str r3, [r7, #28]
  33725. 800e85e: 687b ldr r3, [r7, #4]
  33726. 800e860: 681b ldr r3, [r3, #0]
  33727. 800e862: 461a mov r2, r3
  33728. 800e864: 69fb ldr r3, [r7, #28]
  33729. 800e866: 61bb str r3, [r7, #24]
  33730. 800e868: 617a str r2, [r7, #20]
  33731. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  33732. 800e86a: 6979 ldr r1, [r7, #20]
  33733. 800e86c: 69ba ldr r2, [r7, #24]
  33734. 800e86e: e841 2300 strex r3, r2, [r1]
  33735. 800e872: 613b str r3, [r7, #16]
  33736. return(result);
  33737. 800e874: 693b ldr r3, [r7, #16]
  33738. 800e876: 2b00 cmp r3, #0
  33739. 800e878: d1e6 bne.n 800e848 <UART_EndTransmit_IT+0x8>
  33740. /* Tx process is ended, restore huart->gState to Ready */
  33741. huart->gState = HAL_UART_STATE_READY;
  33742. 800e87a: 687b ldr r3, [r7, #4]
  33743. 800e87c: 2220 movs r2, #32
  33744. 800e87e: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  33745. /* Cleat TxISR function pointer */
  33746. huart->TxISR = NULL;
  33747. 800e882: 687b ldr r3, [r7, #4]
  33748. 800e884: 2200 movs r2, #0
  33749. 800e886: 679a str r2, [r3, #120] @ 0x78
  33750. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  33751. /*Call registered Tx complete callback*/
  33752. huart->TxCpltCallback(huart);
  33753. #else
  33754. /*Call legacy weak Tx complete callback*/
  33755. HAL_UART_TxCpltCallback(huart);
  33756. 800e888: 6878 ldr r0, [r7, #4]
  33757. 800e88a: f7f4 f8dd bl 8002a48 <HAL_UART_TxCpltCallback>
  33758. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  33759. }
  33760. 800e88e: bf00 nop
  33761. 800e890: 3720 adds r7, #32
  33762. 800e892: 46bd mov sp, r7
  33763. 800e894: bd80 pop {r7, pc}
  33764. ...
  33765. 0800e898 <UART_RxISR_8BIT>:
  33766. * @brief RX interrupt handler for 7 or 8 bits data word length .
  33767. * @param huart UART handle.
  33768. * @retval None
  33769. */
  33770. static void UART_RxISR_8BIT(UART_HandleTypeDef *huart)
  33771. {
  33772. 800e898: b580 push {r7, lr}
  33773. 800e89a: b09c sub sp, #112 @ 0x70
  33774. 800e89c: af00 add r7, sp, #0
  33775. 800e89e: 6078 str r0, [r7, #4]
  33776. uint16_t uhMask = huart->Mask;
  33777. 800e8a0: 687b ldr r3, [r7, #4]
  33778. 800e8a2: f8b3 3060 ldrh.w r3, [r3, #96] @ 0x60
  33779. 800e8a6: f8a7 306e strh.w r3, [r7, #110] @ 0x6e
  33780. uint16_t uhdata;
  33781. /* Check that a Rx process is ongoing */
  33782. if (huart->RxState == HAL_UART_STATE_BUSY_RX)
  33783. 800e8aa: 687b ldr r3, [r7, #4]
  33784. 800e8ac: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c
  33785. 800e8b0: 2b22 cmp r3, #34 @ 0x22
  33786. 800e8b2: f040 80be bne.w 800ea32 <UART_RxISR_8BIT+0x19a>
  33787. {
  33788. uhdata = (uint16_t) READ_REG(huart->Instance->RDR);
  33789. 800e8b6: 687b ldr r3, [r7, #4]
  33790. 800e8b8: 681b ldr r3, [r3, #0]
  33791. 800e8ba: 6a5b ldr r3, [r3, #36] @ 0x24
  33792. 800e8bc: f8a7 306c strh.w r3, [r7, #108] @ 0x6c
  33793. *huart->pRxBuffPtr = (uint8_t)(uhdata & (uint8_t)uhMask);
  33794. 800e8c0: f8b7 306c ldrh.w r3, [r7, #108] @ 0x6c
  33795. 800e8c4: b2d9 uxtb r1, r3
  33796. 800e8c6: f8b7 306e ldrh.w r3, [r7, #110] @ 0x6e
  33797. 800e8ca: b2da uxtb r2, r3
  33798. 800e8cc: 687b ldr r3, [r7, #4]
  33799. 800e8ce: 6d9b ldr r3, [r3, #88] @ 0x58
  33800. 800e8d0: 400a ands r2, r1
  33801. 800e8d2: b2d2 uxtb r2, r2
  33802. 800e8d4: 701a strb r2, [r3, #0]
  33803. huart->pRxBuffPtr++;
  33804. 800e8d6: 687b ldr r3, [r7, #4]
  33805. 800e8d8: 6d9b ldr r3, [r3, #88] @ 0x58
  33806. 800e8da: 1c5a adds r2, r3, #1
  33807. 800e8dc: 687b ldr r3, [r7, #4]
  33808. 800e8de: 659a str r2, [r3, #88] @ 0x58
  33809. huart->RxXferCount--;
  33810. 800e8e0: 687b ldr r3, [r7, #4]
  33811. 800e8e2: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  33812. 800e8e6: b29b uxth r3, r3
  33813. 800e8e8: 3b01 subs r3, #1
  33814. 800e8ea: b29a uxth r2, r3
  33815. 800e8ec: 687b ldr r3, [r7, #4]
  33816. 800e8ee: f8a3 205e strh.w r2, [r3, #94] @ 0x5e
  33817. if (huart->RxXferCount == 0U)
  33818. 800e8f2: 687b ldr r3, [r7, #4]
  33819. 800e8f4: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  33820. 800e8f8: b29b uxth r3, r3
  33821. 800e8fa: 2b00 cmp r3, #0
  33822. 800e8fc: f040 80a1 bne.w 800ea42 <UART_RxISR_8BIT+0x1aa>
  33823. {
  33824. /* Disable the UART Parity Error Interrupt and RXNE interrupts */
  33825. ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE));
  33826. 800e900: 687b ldr r3, [r7, #4]
  33827. 800e902: 681b ldr r3, [r3, #0]
  33828. 800e904: 64fb str r3, [r7, #76] @ 0x4c
  33829. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  33830. 800e906: 6cfb ldr r3, [r7, #76] @ 0x4c
  33831. 800e908: e853 3f00 ldrex r3, [r3]
  33832. 800e90c: 64bb str r3, [r7, #72] @ 0x48
  33833. return(result);
  33834. 800e90e: 6cbb ldr r3, [r7, #72] @ 0x48
  33835. 800e910: f423 7390 bic.w r3, r3, #288 @ 0x120
  33836. 800e914: 66bb str r3, [r7, #104] @ 0x68
  33837. 800e916: 687b ldr r3, [r7, #4]
  33838. 800e918: 681b ldr r3, [r3, #0]
  33839. 800e91a: 461a mov r2, r3
  33840. 800e91c: 6ebb ldr r3, [r7, #104] @ 0x68
  33841. 800e91e: 65bb str r3, [r7, #88] @ 0x58
  33842. 800e920: 657a str r2, [r7, #84] @ 0x54
  33843. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  33844. 800e922: 6d79 ldr r1, [r7, #84] @ 0x54
  33845. 800e924: 6dba ldr r2, [r7, #88] @ 0x58
  33846. 800e926: e841 2300 strex r3, r2, [r1]
  33847. 800e92a: 653b str r3, [r7, #80] @ 0x50
  33848. return(result);
  33849. 800e92c: 6d3b ldr r3, [r7, #80] @ 0x50
  33850. 800e92e: 2b00 cmp r3, #0
  33851. 800e930: d1e6 bne.n 800e900 <UART_RxISR_8BIT+0x68>
  33852. /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error) */
  33853. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);
  33854. 800e932: 687b ldr r3, [r7, #4]
  33855. 800e934: 681b ldr r3, [r3, #0]
  33856. 800e936: 3308 adds r3, #8
  33857. 800e938: 63bb str r3, [r7, #56] @ 0x38
  33858. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  33859. 800e93a: 6bbb ldr r3, [r7, #56] @ 0x38
  33860. 800e93c: e853 3f00 ldrex r3, [r3]
  33861. 800e940: 637b str r3, [r7, #52] @ 0x34
  33862. return(result);
  33863. 800e942: 6b7b ldr r3, [r7, #52] @ 0x34
  33864. 800e944: f023 0301 bic.w r3, r3, #1
  33865. 800e948: 667b str r3, [r7, #100] @ 0x64
  33866. 800e94a: 687b ldr r3, [r7, #4]
  33867. 800e94c: 681b ldr r3, [r3, #0]
  33868. 800e94e: 3308 adds r3, #8
  33869. 800e950: 6e7a ldr r2, [r7, #100] @ 0x64
  33870. 800e952: 647a str r2, [r7, #68] @ 0x44
  33871. 800e954: 643b str r3, [r7, #64] @ 0x40
  33872. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  33873. 800e956: 6c39 ldr r1, [r7, #64] @ 0x40
  33874. 800e958: 6c7a ldr r2, [r7, #68] @ 0x44
  33875. 800e95a: e841 2300 strex r3, r2, [r1]
  33876. 800e95e: 63fb str r3, [r7, #60] @ 0x3c
  33877. return(result);
  33878. 800e960: 6bfb ldr r3, [r7, #60] @ 0x3c
  33879. 800e962: 2b00 cmp r3, #0
  33880. 800e964: d1e5 bne.n 800e932 <UART_RxISR_8BIT+0x9a>
  33881. /* Rx process is completed, restore huart->RxState to Ready */
  33882. huart->RxState = HAL_UART_STATE_READY;
  33883. 800e966: 687b ldr r3, [r7, #4]
  33884. 800e968: 2220 movs r2, #32
  33885. 800e96a: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  33886. /* Clear RxISR function pointer */
  33887. huart->RxISR = NULL;
  33888. 800e96e: 687b ldr r3, [r7, #4]
  33889. 800e970: 2200 movs r2, #0
  33890. 800e972: 675a str r2, [r3, #116] @ 0x74
  33891. /* Initialize type of RxEvent to Transfer Complete */
  33892. huart->RxEventType = HAL_UART_RXEVENT_TC;
  33893. 800e974: 687b ldr r3, [r7, #4]
  33894. 800e976: 2200 movs r2, #0
  33895. 800e978: 671a str r2, [r3, #112] @ 0x70
  33896. if (!(IS_LPUART_INSTANCE(huart->Instance)))
  33897. 800e97a: 687b ldr r3, [r7, #4]
  33898. 800e97c: 681b ldr r3, [r3, #0]
  33899. 800e97e: 4a33 ldr r2, [pc, #204] @ (800ea4c <UART_RxISR_8BIT+0x1b4>)
  33900. 800e980: 4293 cmp r3, r2
  33901. 800e982: d01f beq.n 800e9c4 <UART_RxISR_8BIT+0x12c>
  33902. {
  33903. /* Check that USART RTOEN bit is set */
  33904. if (READ_BIT(huart->Instance->CR2, USART_CR2_RTOEN) != 0U)
  33905. 800e984: 687b ldr r3, [r7, #4]
  33906. 800e986: 681b ldr r3, [r3, #0]
  33907. 800e988: 685b ldr r3, [r3, #4]
  33908. 800e98a: f403 0300 and.w r3, r3, #8388608 @ 0x800000
  33909. 800e98e: 2b00 cmp r3, #0
  33910. 800e990: d018 beq.n 800e9c4 <UART_RxISR_8BIT+0x12c>
  33911. {
  33912. /* Enable the UART Receiver Timeout Interrupt */
  33913. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_RTOIE);
  33914. 800e992: 687b ldr r3, [r7, #4]
  33915. 800e994: 681b ldr r3, [r3, #0]
  33916. 800e996: 627b str r3, [r7, #36] @ 0x24
  33917. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  33918. 800e998: 6a7b ldr r3, [r7, #36] @ 0x24
  33919. 800e99a: e853 3f00 ldrex r3, [r3]
  33920. 800e99e: 623b str r3, [r7, #32]
  33921. return(result);
  33922. 800e9a0: 6a3b ldr r3, [r7, #32]
  33923. 800e9a2: f023 6380 bic.w r3, r3, #67108864 @ 0x4000000
  33924. 800e9a6: 663b str r3, [r7, #96] @ 0x60
  33925. 800e9a8: 687b ldr r3, [r7, #4]
  33926. 800e9aa: 681b ldr r3, [r3, #0]
  33927. 800e9ac: 461a mov r2, r3
  33928. 800e9ae: 6e3b ldr r3, [r7, #96] @ 0x60
  33929. 800e9b0: 633b str r3, [r7, #48] @ 0x30
  33930. 800e9b2: 62fa str r2, [r7, #44] @ 0x2c
  33931. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  33932. 800e9b4: 6af9 ldr r1, [r7, #44] @ 0x2c
  33933. 800e9b6: 6b3a ldr r2, [r7, #48] @ 0x30
  33934. 800e9b8: e841 2300 strex r3, r2, [r1]
  33935. 800e9bc: 62bb str r3, [r7, #40] @ 0x28
  33936. return(result);
  33937. 800e9be: 6abb ldr r3, [r7, #40] @ 0x28
  33938. 800e9c0: 2b00 cmp r3, #0
  33939. 800e9c2: d1e6 bne.n 800e992 <UART_RxISR_8BIT+0xfa>
  33940. }
  33941. }
  33942. /* Check current reception Mode :
  33943. If Reception till IDLE event has been selected : */
  33944. if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
  33945. 800e9c4: 687b ldr r3, [r7, #4]
  33946. 800e9c6: 6edb ldr r3, [r3, #108] @ 0x6c
  33947. 800e9c8: 2b01 cmp r3, #1
  33948. 800e9ca: d12e bne.n 800ea2a <UART_RxISR_8BIT+0x192>
  33949. {
  33950. /* Set reception type to Standard */
  33951. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  33952. 800e9cc: 687b ldr r3, [r7, #4]
  33953. 800e9ce: 2200 movs r2, #0
  33954. 800e9d0: 66da str r2, [r3, #108] @ 0x6c
  33955. /* Disable IDLE interrupt */
  33956. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  33957. 800e9d2: 687b ldr r3, [r7, #4]
  33958. 800e9d4: 681b ldr r3, [r3, #0]
  33959. 800e9d6: 613b str r3, [r7, #16]
  33960. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  33961. 800e9d8: 693b ldr r3, [r7, #16]
  33962. 800e9da: e853 3f00 ldrex r3, [r3]
  33963. 800e9de: 60fb str r3, [r7, #12]
  33964. return(result);
  33965. 800e9e0: 68fb ldr r3, [r7, #12]
  33966. 800e9e2: f023 0310 bic.w r3, r3, #16
  33967. 800e9e6: 65fb str r3, [r7, #92] @ 0x5c
  33968. 800e9e8: 687b ldr r3, [r7, #4]
  33969. 800e9ea: 681b ldr r3, [r3, #0]
  33970. 800e9ec: 461a mov r2, r3
  33971. 800e9ee: 6dfb ldr r3, [r7, #92] @ 0x5c
  33972. 800e9f0: 61fb str r3, [r7, #28]
  33973. 800e9f2: 61ba str r2, [r7, #24]
  33974. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  33975. 800e9f4: 69b9 ldr r1, [r7, #24]
  33976. 800e9f6: 69fa ldr r2, [r7, #28]
  33977. 800e9f8: e841 2300 strex r3, r2, [r1]
  33978. 800e9fc: 617b str r3, [r7, #20]
  33979. return(result);
  33980. 800e9fe: 697b ldr r3, [r7, #20]
  33981. 800ea00: 2b00 cmp r3, #0
  33982. 800ea02: d1e6 bne.n 800e9d2 <UART_RxISR_8BIT+0x13a>
  33983. if (__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE) == SET)
  33984. 800ea04: 687b ldr r3, [r7, #4]
  33985. 800ea06: 681b ldr r3, [r3, #0]
  33986. 800ea08: 69db ldr r3, [r3, #28]
  33987. 800ea0a: f003 0310 and.w r3, r3, #16
  33988. 800ea0e: 2b10 cmp r3, #16
  33989. 800ea10: d103 bne.n 800ea1a <UART_RxISR_8BIT+0x182>
  33990. {
  33991. /* Clear IDLE Flag */
  33992. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_IDLEF);
  33993. 800ea12: 687b ldr r3, [r7, #4]
  33994. 800ea14: 681b ldr r3, [r3, #0]
  33995. 800ea16: 2210 movs r2, #16
  33996. 800ea18: 621a str r2, [r3, #32]
  33997. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  33998. /*Call registered Rx Event callback*/
  33999. huart->RxEventCallback(huart, huart->RxXferSize);
  34000. #else
  34001. /*Call legacy weak Rx Event callback*/
  34002. HAL_UARTEx_RxEventCallback(huart, huart->RxXferSize);
  34003. 800ea1a: 687b ldr r3, [r7, #4]
  34004. 800ea1c: f8b3 305c ldrh.w r3, [r3, #92] @ 0x5c
  34005. 800ea20: 4619 mov r1, r3
  34006. 800ea22: 6878 ldr r0, [r7, #4]
  34007. 800ea24: f7f3 ffe6 bl 80029f4 <HAL_UARTEx_RxEventCallback>
  34008. else
  34009. {
  34010. /* Clear RXNE interrupt flag */
  34011. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  34012. }
  34013. }
  34014. 800ea28: e00b b.n 800ea42 <UART_RxISR_8BIT+0x1aa>
  34015. HAL_UART_RxCpltCallback(huart);
  34016. 800ea2a: 6878 ldr r0, [r7, #4]
  34017. 800ea2c: f7f3 ffd8 bl 80029e0 <HAL_UART_RxCpltCallback>
  34018. }
  34019. 800ea30: e007 b.n 800ea42 <UART_RxISR_8BIT+0x1aa>
  34020. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  34021. 800ea32: 687b ldr r3, [r7, #4]
  34022. 800ea34: 681b ldr r3, [r3, #0]
  34023. 800ea36: 699a ldr r2, [r3, #24]
  34024. 800ea38: 687b ldr r3, [r7, #4]
  34025. 800ea3a: 681b ldr r3, [r3, #0]
  34026. 800ea3c: f042 0208 orr.w r2, r2, #8
  34027. 800ea40: 619a str r2, [r3, #24]
  34028. }
  34029. 800ea42: bf00 nop
  34030. 800ea44: 3770 adds r7, #112 @ 0x70
  34031. 800ea46: 46bd mov sp, r7
  34032. 800ea48: bd80 pop {r7, pc}
  34033. 800ea4a: bf00 nop
  34034. 800ea4c: 58000c00 .word 0x58000c00
  34035. 0800ea50 <UART_RxISR_16BIT>:
  34036. * interruptions have been enabled by HAL_UART_Receive_IT()
  34037. * @param huart UART handle.
  34038. * @retval None
  34039. */
  34040. static void UART_RxISR_16BIT(UART_HandleTypeDef *huart)
  34041. {
  34042. 800ea50: b580 push {r7, lr}
  34043. 800ea52: b09c sub sp, #112 @ 0x70
  34044. 800ea54: af00 add r7, sp, #0
  34045. 800ea56: 6078 str r0, [r7, #4]
  34046. uint16_t *tmp;
  34047. uint16_t uhMask = huart->Mask;
  34048. 800ea58: 687b ldr r3, [r7, #4]
  34049. 800ea5a: f8b3 3060 ldrh.w r3, [r3, #96] @ 0x60
  34050. 800ea5e: f8a7 306e strh.w r3, [r7, #110] @ 0x6e
  34051. uint16_t uhdata;
  34052. /* Check that a Rx process is ongoing */
  34053. if (huart->RxState == HAL_UART_STATE_BUSY_RX)
  34054. 800ea62: 687b ldr r3, [r7, #4]
  34055. 800ea64: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c
  34056. 800ea68: 2b22 cmp r3, #34 @ 0x22
  34057. 800ea6a: f040 80be bne.w 800ebea <UART_RxISR_16BIT+0x19a>
  34058. {
  34059. uhdata = (uint16_t) READ_REG(huart->Instance->RDR);
  34060. 800ea6e: 687b ldr r3, [r7, #4]
  34061. 800ea70: 681b ldr r3, [r3, #0]
  34062. 800ea72: 6a5b ldr r3, [r3, #36] @ 0x24
  34063. 800ea74: f8a7 306c strh.w r3, [r7, #108] @ 0x6c
  34064. tmp = (uint16_t *) huart->pRxBuffPtr ;
  34065. 800ea78: 687b ldr r3, [r7, #4]
  34066. 800ea7a: 6d9b ldr r3, [r3, #88] @ 0x58
  34067. 800ea7c: 66bb str r3, [r7, #104] @ 0x68
  34068. *tmp = (uint16_t)(uhdata & uhMask);
  34069. 800ea7e: f8b7 206c ldrh.w r2, [r7, #108] @ 0x6c
  34070. 800ea82: f8b7 306e ldrh.w r3, [r7, #110] @ 0x6e
  34071. 800ea86: 4013 ands r3, r2
  34072. 800ea88: b29a uxth r2, r3
  34073. 800ea8a: 6ebb ldr r3, [r7, #104] @ 0x68
  34074. 800ea8c: 801a strh r2, [r3, #0]
  34075. huart->pRxBuffPtr += 2U;
  34076. 800ea8e: 687b ldr r3, [r7, #4]
  34077. 800ea90: 6d9b ldr r3, [r3, #88] @ 0x58
  34078. 800ea92: 1c9a adds r2, r3, #2
  34079. 800ea94: 687b ldr r3, [r7, #4]
  34080. 800ea96: 659a str r2, [r3, #88] @ 0x58
  34081. huart->RxXferCount--;
  34082. 800ea98: 687b ldr r3, [r7, #4]
  34083. 800ea9a: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  34084. 800ea9e: b29b uxth r3, r3
  34085. 800eaa0: 3b01 subs r3, #1
  34086. 800eaa2: b29a uxth r2, r3
  34087. 800eaa4: 687b ldr r3, [r7, #4]
  34088. 800eaa6: f8a3 205e strh.w r2, [r3, #94] @ 0x5e
  34089. if (huart->RxXferCount == 0U)
  34090. 800eaaa: 687b ldr r3, [r7, #4]
  34091. 800eaac: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  34092. 800eab0: b29b uxth r3, r3
  34093. 800eab2: 2b00 cmp r3, #0
  34094. 800eab4: f040 80a1 bne.w 800ebfa <UART_RxISR_16BIT+0x1aa>
  34095. {
  34096. /* Disable the UART Parity Error Interrupt and RXNE interrupt*/
  34097. ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE));
  34098. 800eab8: 687b ldr r3, [r7, #4]
  34099. 800eaba: 681b ldr r3, [r3, #0]
  34100. 800eabc: 64bb str r3, [r7, #72] @ 0x48
  34101. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  34102. 800eabe: 6cbb ldr r3, [r7, #72] @ 0x48
  34103. 800eac0: e853 3f00 ldrex r3, [r3]
  34104. 800eac4: 647b str r3, [r7, #68] @ 0x44
  34105. return(result);
  34106. 800eac6: 6c7b ldr r3, [r7, #68] @ 0x44
  34107. 800eac8: f423 7390 bic.w r3, r3, #288 @ 0x120
  34108. 800eacc: 667b str r3, [r7, #100] @ 0x64
  34109. 800eace: 687b ldr r3, [r7, #4]
  34110. 800ead0: 681b ldr r3, [r3, #0]
  34111. 800ead2: 461a mov r2, r3
  34112. 800ead4: 6e7b ldr r3, [r7, #100] @ 0x64
  34113. 800ead6: 657b str r3, [r7, #84] @ 0x54
  34114. 800ead8: 653a str r2, [r7, #80] @ 0x50
  34115. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  34116. 800eada: 6d39 ldr r1, [r7, #80] @ 0x50
  34117. 800eadc: 6d7a ldr r2, [r7, #84] @ 0x54
  34118. 800eade: e841 2300 strex r3, r2, [r1]
  34119. 800eae2: 64fb str r3, [r7, #76] @ 0x4c
  34120. return(result);
  34121. 800eae4: 6cfb ldr r3, [r7, #76] @ 0x4c
  34122. 800eae6: 2b00 cmp r3, #0
  34123. 800eae8: d1e6 bne.n 800eab8 <UART_RxISR_16BIT+0x68>
  34124. /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error) */
  34125. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);
  34126. 800eaea: 687b ldr r3, [r7, #4]
  34127. 800eaec: 681b ldr r3, [r3, #0]
  34128. 800eaee: 3308 adds r3, #8
  34129. 800eaf0: 637b str r3, [r7, #52] @ 0x34
  34130. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  34131. 800eaf2: 6b7b ldr r3, [r7, #52] @ 0x34
  34132. 800eaf4: e853 3f00 ldrex r3, [r3]
  34133. 800eaf8: 633b str r3, [r7, #48] @ 0x30
  34134. return(result);
  34135. 800eafa: 6b3b ldr r3, [r7, #48] @ 0x30
  34136. 800eafc: f023 0301 bic.w r3, r3, #1
  34137. 800eb00: 663b str r3, [r7, #96] @ 0x60
  34138. 800eb02: 687b ldr r3, [r7, #4]
  34139. 800eb04: 681b ldr r3, [r3, #0]
  34140. 800eb06: 3308 adds r3, #8
  34141. 800eb08: 6e3a ldr r2, [r7, #96] @ 0x60
  34142. 800eb0a: 643a str r2, [r7, #64] @ 0x40
  34143. 800eb0c: 63fb str r3, [r7, #60] @ 0x3c
  34144. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  34145. 800eb0e: 6bf9 ldr r1, [r7, #60] @ 0x3c
  34146. 800eb10: 6c3a ldr r2, [r7, #64] @ 0x40
  34147. 800eb12: e841 2300 strex r3, r2, [r1]
  34148. 800eb16: 63bb str r3, [r7, #56] @ 0x38
  34149. return(result);
  34150. 800eb18: 6bbb ldr r3, [r7, #56] @ 0x38
  34151. 800eb1a: 2b00 cmp r3, #0
  34152. 800eb1c: d1e5 bne.n 800eaea <UART_RxISR_16BIT+0x9a>
  34153. /* Rx process is completed, restore huart->RxState to Ready */
  34154. huart->RxState = HAL_UART_STATE_READY;
  34155. 800eb1e: 687b ldr r3, [r7, #4]
  34156. 800eb20: 2220 movs r2, #32
  34157. 800eb22: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  34158. /* Clear RxISR function pointer */
  34159. huart->RxISR = NULL;
  34160. 800eb26: 687b ldr r3, [r7, #4]
  34161. 800eb28: 2200 movs r2, #0
  34162. 800eb2a: 675a str r2, [r3, #116] @ 0x74
  34163. /* Initialize type of RxEvent to Transfer Complete */
  34164. huart->RxEventType = HAL_UART_RXEVENT_TC;
  34165. 800eb2c: 687b ldr r3, [r7, #4]
  34166. 800eb2e: 2200 movs r2, #0
  34167. 800eb30: 671a str r2, [r3, #112] @ 0x70
  34168. if (!(IS_LPUART_INSTANCE(huart->Instance)))
  34169. 800eb32: 687b ldr r3, [r7, #4]
  34170. 800eb34: 681b ldr r3, [r3, #0]
  34171. 800eb36: 4a33 ldr r2, [pc, #204] @ (800ec04 <UART_RxISR_16BIT+0x1b4>)
  34172. 800eb38: 4293 cmp r3, r2
  34173. 800eb3a: d01f beq.n 800eb7c <UART_RxISR_16BIT+0x12c>
  34174. {
  34175. /* Check that USART RTOEN bit is set */
  34176. if (READ_BIT(huart->Instance->CR2, USART_CR2_RTOEN) != 0U)
  34177. 800eb3c: 687b ldr r3, [r7, #4]
  34178. 800eb3e: 681b ldr r3, [r3, #0]
  34179. 800eb40: 685b ldr r3, [r3, #4]
  34180. 800eb42: f403 0300 and.w r3, r3, #8388608 @ 0x800000
  34181. 800eb46: 2b00 cmp r3, #0
  34182. 800eb48: d018 beq.n 800eb7c <UART_RxISR_16BIT+0x12c>
  34183. {
  34184. /* Enable the UART Receiver Timeout Interrupt */
  34185. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_RTOIE);
  34186. 800eb4a: 687b ldr r3, [r7, #4]
  34187. 800eb4c: 681b ldr r3, [r3, #0]
  34188. 800eb4e: 623b str r3, [r7, #32]
  34189. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  34190. 800eb50: 6a3b ldr r3, [r7, #32]
  34191. 800eb52: e853 3f00 ldrex r3, [r3]
  34192. 800eb56: 61fb str r3, [r7, #28]
  34193. return(result);
  34194. 800eb58: 69fb ldr r3, [r7, #28]
  34195. 800eb5a: f023 6380 bic.w r3, r3, #67108864 @ 0x4000000
  34196. 800eb5e: 65fb str r3, [r7, #92] @ 0x5c
  34197. 800eb60: 687b ldr r3, [r7, #4]
  34198. 800eb62: 681b ldr r3, [r3, #0]
  34199. 800eb64: 461a mov r2, r3
  34200. 800eb66: 6dfb ldr r3, [r7, #92] @ 0x5c
  34201. 800eb68: 62fb str r3, [r7, #44] @ 0x2c
  34202. 800eb6a: 62ba str r2, [r7, #40] @ 0x28
  34203. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  34204. 800eb6c: 6ab9 ldr r1, [r7, #40] @ 0x28
  34205. 800eb6e: 6afa ldr r2, [r7, #44] @ 0x2c
  34206. 800eb70: e841 2300 strex r3, r2, [r1]
  34207. 800eb74: 627b str r3, [r7, #36] @ 0x24
  34208. return(result);
  34209. 800eb76: 6a7b ldr r3, [r7, #36] @ 0x24
  34210. 800eb78: 2b00 cmp r3, #0
  34211. 800eb7a: d1e6 bne.n 800eb4a <UART_RxISR_16BIT+0xfa>
  34212. }
  34213. }
  34214. /* Check current reception Mode :
  34215. If Reception till IDLE event has been selected : */
  34216. if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
  34217. 800eb7c: 687b ldr r3, [r7, #4]
  34218. 800eb7e: 6edb ldr r3, [r3, #108] @ 0x6c
  34219. 800eb80: 2b01 cmp r3, #1
  34220. 800eb82: d12e bne.n 800ebe2 <UART_RxISR_16BIT+0x192>
  34221. {
  34222. /* Set reception type to Standard */
  34223. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  34224. 800eb84: 687b ldr r3, [r7, #4]
  34225. 800eb86: 2200 movs r2, #0
  34226. 800eb88: 66da str r2, [r3, #108] @ 0x6c
  34227. /* Disable IDLE interrupt */
  34228. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  34229. 800eb8a: 687b ldr r3, [r7, #4]
  34230. 800eb8c: 681b ldr r3, [r3, #0]
  34231. 800eb8e: 60fb str r3, [r7, #12]
  34232. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  34233. 800eb90: 68fb ldr r3, [r7, #12]
  34234. 800eb92: e853 3f00 ldrex r3, [r3]
  34235. 800eb96: 60bb str r3, [r7, #8]
  34236. return(result);
  34237. 800eb98: 68bb ldr r3, [r7, #8]
  34238. 800eb9a: f023 0310 bic.w r3, r3, #16
  34239. 800eb9e: 65bb str r3, [r7, #88] @ 0x58
  34240. 800eba0: 687b ldr r3, [r7, #4]
  34241. 800eba2: 681b ldr r3, [r3, #0]
  34242. 800eba4: 461a mov r2, r3
  34243. 800eba6: 6dbb ldr r3, [r7, #88] @ 0x58
  34244. 800eba8: 61bb str r3, [r7, #24]
  34245. 800ebaa: 617a str r2, [r7, #20]
  34246. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  34247. 800ebac: 6979 ldr r1, [r7, #20]
  34248. 800ebae: 69ba ldr r2, [r7, #24]
  34249. 800ebb0: e841 2300 strex r3, r2, [r1]
  34250. 800ebb4: 613b str r3, [r7, #16]
  34251. return(result);
  34252. 800ebb6: 693b ldr r3, [r7, #16]
  34253. 800ebb8: 2b00 cmp r3, #0
  34254. 800ebba: d1e6 bne.n 800eb8a <UART_RxISR_16BIT+0x13a>
  34255. if (__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE) == SET)
  34256. 800ebbc: 687b ldr r3, [r7, #4]
  34257. 800ebbe: 681b ldr r3, [r3, #0]
  34258. 800ebc0: 69db ldr r3, [r3, #28]
  34259. 800ebc2: f003 0310 and.w r3, r3, #16
  34260. 800ebc6: 2b10 cmp r3, #16
  34261. 800ebc8: d103 bne.n 800ebd2 <UART_RxISR_16BIT+0x182>
  34262. {
  34263. /* Clear IDLE Flag */
  34264. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_IDLEF);
  34265. 800ebca: 687b ldr r3, [r7, #4]
  34266. 800ebcc: 681b ldr r3, [r3, #0]
  34267. 800ebce: 2210 movs r2, #16
  34268. 800ebd0: 621a str r2, [r3, #32]
  34269. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  34270. /*Call registered Rx Event callback*/
  34271. huart->RxEventCallback(huart, huart->RxXferSize);
  34272. #else
  34273. /*Call legacy weak Rx Event callback*/
  34274. HAL_UARTEx_RxEventCallback(huart, huart->RxXferSize);
  34275. 800ebd2: 687b ldr r3, [r7, #4]
  34276. 800ebd4: f8b3 305c ldrh.w r3, [r3, #92] @ 0x5c
  34277. 800ebd8: 4619 mov r1, r3
  34278. 800ebda: 6878 ldr r0, [r7, #4]
  34279. 800ebdc: f7f3 ff0a bl 80029f4 <HAL_UARTEx_RxEventCallback>
  34280. else
  34281. {
  34282. /* Clear RXNE interrupt flag */
  34283. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  34284. }
  34285. }
  34286. 800ebe0: e00b b.n 800ebfa <UART_RxISR_16BIT+0x1aa>
  34287. HAL_UART_RxCpltCallback(huart);
  34288. 800ebe2: 6878 ldr r0, [r7, #4]
  34289. 800ebe4: f7f3 fefc bl 80029e0 <HAL_UART_RxCpltCallback>
  34290. }
  34291. 800ebe8: e007 b.n 800ebfa <UART_RxISR_16BIT+0x1aa>
  34292. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  34293. 800ebea: 687b ldr r3, [r7, #4]
  34294. 800ebec: 681b ldr r3, [r3, #0]
  34295. 800ebee: 699a ldr r2, [r3, #24]
  34296. 800ebf0: 687b ldr r3, [r7, #4]
  34297. 800ebf2: 681b ldr r3, [r3, #0]
  34298. 800ebf4: f042 0208 orr.w r2, r2, #8
  34299. 800ebf8: 619a str r2, [r3, #24]
  34300. }
  34301. 800ebfa: bf00 nop
  34302. 800ebfc: 3770 adds r7, #112 @ 0x70
  34303. 800ebfe: 46bd mov sp, r7
  34304. 800ec00: bd80 pop {r7, pc}
  34305. 800ec02: bf00 nop
  34306. 800ec04: 58000c00 .word 0x58000c00
  34307. 0800ec08 <UART_RxISR_8BIT_FIFOEN>:
  34308. * interruptions have been enabled by HAL_UART_Receive_IT()
  34309. * @param huart UART handle.
  34310. * @retval None
  34311. */
  34312. static void UART_RxISR_8BIT_FIFOEN(UART_HandleTypeDef *huart)
  34313. {
  34314. 800ec08: b580 push {r7, lr}
  34315. 800ec0a: b0ac sub sp, #176 @ 0xb0
  34316. 800ec0c: af00 add r7, sp, #0
  34317. 800ec0e: 6078 str r0, [r7, #4]
  34318. uint16_t uhMask = huart->Mask;
  34319. 800ec10: 687b ldr r3, [r7, #4]
  34320. 800ec12: f8b3 3060 ldrh.w r3, [r3, #96] @ 0x60
  34321. 800ec16: f8a7 30aa strh.w r3, [r7, #170] @ 0xaa
  34322. uint16_t uhdata;
  34323. uint16_t nb_rx_data;
  34324. uint16_t rxdatacount;
  34325. uint32_t isrflags = READ_REG(huart->Instance->ISR);
  34326. 800ec1a: 687b ldr r3, [r7, #4]
  34327. 800ec1c: 681b ldr r3, [r3, #0]
  34328. 800ec1e: 69db ldr r3, [r3, #28]
  34329. 800ec20: f8c7 30ac str.w r3, [r7, #172] @ 0xac
  34330. uint32_t cr1its = READ_REG(huart->Instance->CR1);
  34331. 800ec24: 687b ldr r3, [r7, #4]
  34332. 800ec26: 681b ldr r3, [r3, #0]
  34333. 800ec28: 681b ldr r3, [r3, #0]
  34334. 800ec2a: f8c7 30a4 str.w r3, [r7, #164] @ 0xa4
  34335. uint32_t cr3its = READ_REG(huart->Instance->CR3);
  34336. 800ec2e: 687b ldr r3, [r7, #4]
  34337. 800ec30: 681b ldr r3, [r3, #0]
  34338. 800ec32: 689b ldr r3, [r3, #8]
  34339. 800ec34: f8c7 30a0 str.w r3, [r7, #160] @ 0xa0
  34340. /* Check that a Rx process is ongoing */
  34341. if (huart->RxState == HAL_UART_STATE_BUSY_RX)
  34342. 800ec38: 687b ldr r3, [r7, #4]
  34343. 800ec3a: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c
  34344. 800ec3e: 2b22 cmp r3, #34 @ 0x22
  34345. 800ec40: f040 8180 bne.w 800ef44 <UART_RxISR_8BIT_FIFOEN+0x33c>
  34346. {
  34347. nb_rx_data = huart->NbRxDataToProcess;
  34348. 800ec44: 687b ldr r3, [r7, #4]
  34349. 800ec46: f8b3 3068 ldrh.w r3, [r3, #104] @ 0x68
  34350. 800ec4a: f8a7 309e strh.w r3, [r7, #158] @ 0x9e
  34351. while ((nb_rx_data > 0U) && ((isrflags & USART_ISR_RXNE_RXFNE) != 0U))
  34352. 800ec4e: e123 b.n 800ee98 <UART_RxISR_8BIT_FIFOEN+0x290>
  34353. {
  34354. uhdata = (uint16_t) READ_REG(huart->Instance->RDR);
  34355. 800ec50: 687b ldr r3, [r7, #4]
  34356. 800ec52: 681b ldr r3, [r3, #0]
  34357. 800ec54: 6a5b ldr r3, [r3, #36] @ 0x24
  34358. 800ec56: f8a7 309c strh.w r3, [r7, #156] @ 0x9c
  34359. *huart->pRxBuffPtr = (uint8_t)(uhdata & (uint8_t)uhMask);
  34360. 800ec5a: f8b7 309c ldrh.w r3, [r7, #156] @ 0x9c
  34361. 800ec5e: b2d9 uxtb r1, r3
  34362. 800ec60: f8b7 30aa ldrh.w r3, [r7, #170] @ 0xaa
  34363. 800ec64: b2da uxtb r2, r3
  34364. 800ec66: 687b ldr r3, [r7, #4]
  34365. 800ec68: 6d9b ldr r3, [r3, #88] @ 0x58
  34366. 800ec6a: 400a ands r2, r1
  34367. 800ec6c: b2d2 uxtb r2, r2
  34368. 800ec6e: 701a strb r2, [r3, #0]
  34369. huart->pRxBuffPtr++;
  34370. 800ec70: 687b ldr r3, [r7, #4]
  34371. 800ec72: 6d9b ldr r3, [r3, #88] @ 0x58
  34372. 800ec74: 1c5a adds r2, r3, #1
  34373. 800ec76: 687b ldr r3, [r7, #4]
  34374. 800ec78: 659a str r2, [r3, #88] @ 0x58
  34375. huart->RxXferCount--;
  34376. 800ec7a: 687b ldr r3, [r7, #4]
  34377. 800ec7c: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  34378. 800ec80: b29b uxth r3, r3
  34379. 800ec82: 3b01 subs r3, #1
  34380. 800ec84: b29a uxth r2, r3
  34381. 800ec86: 687b ldr r3, [r7, #4]
  34382. 800ec88: f8a3 205e strh.w r2, [r3, #94] @ 0x5e
  34383. isrflags = READ_REG(huart->Instance->ISR);
  34384. 800ec8c: 687b ldr r3, [r7, #4]
  34385. 800ec8e: 681b ldr r3, [r3, #0]
  34386. 800ec90: 69db ldr r3, [r3, #28]
  34387. 800ec92: f8c7 30ac str.w r3, [r7, #172] @ 0xac
  34388. /* If some non blocking errors occurred */
  34389. if ((isrflags & (USART_ISR_PE | USART_ISR_FE | USART_ISR_NE)) != 0U)
  34390. 800ec96: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac
  34391. 800ec9a: f003 0307 and.w r3, r3, #7
  34392. 800ec9e: 2b00 cmp r3, #0
  34393. 800eca0: d053 beq.n 800ed4a <UART_RxISR_8BIT_FIFOEN+0x142>
  34394. {
  34395. /* UART parity error interrupt occurred -------------------------------------*/
  34396. if (((isrflags & USART_ISR_PE) != 0U) && ((cr1its & USART_CR1_PEIE) != 0U))
  34397. 800eca2: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac
  34398. 800eca6: f003 0301 and.w r3, r3, #1
  34399. 800ecaa: 2b00 cmp r3, #0
  34400. 800ecac: d011 beq.n 800ecd2 <UART_RxISR_8BIT_FIFOEN+0xca>
  34401. 800ecae: f8d7 30a4 ldr.w r3, [r7, #164] @ 0xa4
  34402. 800ecb2: f403 7380 and.w r3, r3, #256 @ 0x100
  34403. 800ecb6: 2b00 cmp r3, #0
  34404. 800ecb8: d00b beq.n 800ecd2 <UART_RxISR_8BIT_FIFOEN+0xca>
  34405. {
  34406. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_PEF);
  34407. 800ecba: 687b ldr r3, [r7, #4]
  34408. 800ecbc: 681b ldr r3, [r3, #0]
  34409. 800ecbe: 2201 movs r2, #1
  34410. 800ecc0: 621a str r2, [r3, #32]
  34411. huart->ErrorCode |= HAL_UART_ERROR_PE;
  34412. 800ecc2: 687b ldr r3, [r7, #4]
  34413. 800ecc4: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  34414. 800ecc8: f043 0201 orr.w r2, r3, #1
  34415. 800eccc: 687b ldr r3, [r7, #4]
  34416. 800ecce: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  34417. }
  34418. /* UART frame error interrupt occurred --------------------------------------*/
  34419. if (((isrflags & USART_ISR_FE) != 0U) && ((cr3its & USART_CR3_EIE) != 0U))
  34420. 800ecd2: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac
  34421. 800ecd6: f003 0302 and.w r3, r3, #2
  34422. 800ecda: 2b00 cmp r3, #0
  34423. 800ecdc: d011 beq.n 800ed02 <UART_RxISR_8BIT_FIFOEN+0xfa>
  34424. 800ecde: f8d7 30a0 ldr.w r3, [r7, #160] @ 0xa0
  34425. 800ece2: f003 0301 and.w r3, r3, #1
  34426. 800ece6: 2b00 cmp r3, #0
  34427. 800ece8: d00b beq.n 800ed02 <UART_RxISR_8BIT_FIFOEN+0xfa>
  34428. {
  34429. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_FEF);
  34430. 800ecea: 687b ldr r3, [r7, #4]
  34431. 800ecec: 681b ldr r3, [r3, #0]
  34432. 800ecee: 2202 movs r2, #2
  34433. 800ecf0: 621a str r2, [r3, #32]
  34434. huart->ErrorCode |= HAL_UART_ERROR_FE;
  34435. 800ecf2: 687b ldr r3, [r7, #4]
  34436. 800ecf4: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  34437. 800ecf8: f043 0204 orr.w r2, r3, #4
  34438. 800ecfc: 687b ldr r3, [r7, #4]
  34439. 800ecfe: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  34440. }
  34441. /* UART noise error interrupt occurred --------------------------------------*/
  34442. if (((isrflags & USART_ISR_NE) != 0U) && ((cr3its & USART_CR3_EIE) != 0U))
  34443. 800ed02: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac
  34444. 800ed06: f003 0304 and.w r3, r3, #4
  34445. 800ed0a: 2b00 cmp r3, #0
  34446. 800ed0c: d011 beq.n 800ed32 <UART_RxISR_8BIT_FIFOEN+0x12a>
  34447. 800ed0e: f8d7 30a0 ldr.w r3, [r7, #160] @ 0xa0
  34448. 800ed12: f003 0301 and.w r3, r3, #1
  34449. 800ed16: 2b00 cmp r3, #0
  34450. 800ed18: d00b beq.n 800ed32 <UART_RxISR_8BIT_FIFOEN+0x12a>
  34451. {
  34452. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_NEF);
  34453. 800ed1a: 687b ldr r3, [r7, #4]
  34454. 800ed1c: 681b ldr r3, [r3, #0]
  34455. 800ed1e: 2204 movs r2, #4
  34456. 800ed20: 621a str r2, [r3, #32]
  34457. huart->ErrorCode |= HAL_UART_ERROR_NE;
  34458. 800ed22: 687b ldr r3, [r7, #4]
  34459. 800ed24: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  34460. 800ed28: f043 0202 orr.w r2, r3, #2
  34461. 800ed2c: 687b ldr r3, [r7, #4]
  34462. 800ed2e: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  34463. }
  34464. /* Call UART Error Call back function if need be ----------------------------*/
  34465. if (huart->ErrorCode != HAL_UART_ERROR_NONE)
  34466. 800ed32: 687b ldr r3, [r7, #4]
  34467. 800ed34: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  34468. 800ed38: 2b00 cmp r3, #0
  34469. 800ed3a: d006 beq.n 800ed4a <UART_RxISR_8BIT_FIFOEN+0x142>
  34470. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  34471. /*Call registered error callback*/
  34472. huart->ErrorCallback(huart);
  34473. #else
  34474. /*Call legacy weak error callback*/
  34475. HAL_UART_ErrorCallback(huart);
  34476. 800ed3c: 6878 ldr r0, [r7, #4]
  34477. 800ed3e: f7fe fb13 bl 800d368 <HAL_UART_ErrorCallback>
  34478. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  34479. huart->ErrorCode = HAL_UART_ERROR_NONE;
  34480. 800ed42: 687b ldr r3, [r7, #4]
  34481. 800ed44: 2200 movs r2, #0
  34482. 800ed46: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  34483. }
  34484. }
  34485. if (huart->RxXferCount == 0U)
  34486. 800ed4a: 687b ldr r3, [r7, #4]
  34487. 800ed4c: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  34488. 800ed50: b29b uxth r3, r3
  34489. 800ed52: 2b00 cmp r3, #0
  34490. 800ed54: f040 80a0 bne.w 800ee98 <UART_RxISR_8BIT_FIFOEN+0x290>
  34491. {
  34492. /* Disable the UART Parity Error Interrupt and RXFT interrupt*/
  34493. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_PEIE);
  34494. 800ed58: 687b ldr r3, [r7, #4]
  34495. 800ed5a: 681b ldr r3, [r3, #0]
  34496. 800ed5c: 673b str r3, [r7, #112] @ 0x70
  34497. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  34498. 800ed5e: 6f3b ldr r3, [r7, #112] @ 0x70
  34499. 800ed60: e853 3f00 ldrex r3, [r3]
  34500. 800ed64: 66fb str r3, [r7, #108] @ 0x6c
  34501. return(result);
  34502. 800ed66: 6efb ldr r3, [r7, #108] @ 0x6c
  34503. 800ed68: f423 7380 bic.w r3, r3, #256 @ 0x100
  34504. 800ed6c: f8c7 3098 str.w r3, [r7, #152] @ 0x98
  34505. 800ed70: 687b ldr r3, [r7, #4]
  34506. 800ed72: 681b ldr r3, [r3, #0]
  34507. 800ed74: 461a mov r2, r3
  34508. 800ed76: f8d7 3098 ldr.w r3, [r7, #152] @ 0x98
  34509. 800ed7a: 67fb str r3, [r7, #124] @ 0x7c
  34510. 800ed7c: 67ba str r2, [r7, #120] @ 0x78
  34511. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  34512. 800ed7e: 6fb9 ldr r1, [r7, #120] @ 0x78
  34513. 800ed80: 6ffa ldr r2, [r7, #124] @ 0x7c
  34514. 800ed82: e841 2300 strex r3, r2, [r1]
  34515. 800ed86: 677b str r3, [r7, #116] @ 0x74
  34516. return(result);
  34517. 800ed88: 6f7b ldr r3, [r7, #116] @ 0x74
  34518. 800ed8a: 2b00 cmp r3, #0
  34519. 800ed8c: d1e4 bne.n 800ed58 <UART_RxISR_8BIT_FIFOEN+0x150>
  34520. /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error)
  34521. and RX FIFO Threshold interrupt */
  34522. ATOMIC_CLEAR_BIT(huart->Instance->CR3, (USART_CR3_EIE | USART_CR3_RXFTIE));
  34523. 800ed8e: 687b ldr r3, [r7, #4]
  34524. 800ed90: 681b ldr r3, [r3, #0]
  34525. 800ed92: 3308 adds r3, #8
  34526. 800ed94: 65fb str r3, [r7, #92] @ 0x5c
  34527. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  34528. 800ed96: 6dfb ldr r3, [r7, #92] @ 0x5c
  34529. 800ed98: e853 3f00 ldrex r3, [r3]
  34530. 800ed9c: 65bb str r3, [r7, #88] @ 0x58
  34531. return(result);
  34532. 800ed9e: 6dba ldr r2, [r7, #88] @ 0x58
  34533. 800eda0: 4b6e ldr r3, [pc, #440] @ (800ef5c <UART_RxISR_8BIT_FIFOEN+0x354>)
  34534. 800eda2: 4013 ands r3, r2
  34535. 800eda4: f8c7 3094 str.w r3, [r7, #148] @ 0x94
  34536. 800eda8: 687b ldr r3, [r7, #4]
  34537. 800edaa: 681b ldr r3, [r3, #0]
  34538. 800edac: 3308 adds r3, #8
  34539. 800edae: f8d7 2094 ldr.w r2, [r7, #148] @ 0x94
  34540. 800edb2: 66ba str r2, [r7, #104] @ 0x68
  34541. 800edb4: 667b str r3, [r7, #100] @ 0x64
  34542. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  34543. 800edb6: 6e79 ldr r1, [r7, #100] @ 0x64
  34544. 800edb8: 6eba ldr r2, [r7, #104] @ 0x68
  34545. 800edba: e841 2300 strex r3, r2, [r1]
  34546. 800edbe: 663b str r3, [r7, #96] @ 0x60
  34547. return(result);
  34548. 800edc0: 6e3b ldr r3, [r7, #96] @ 0x60
  34549. 800edc2: 2b00 cmp r3, #0
  34550. 800edc4: d1e3 bne.n 800ed8e <UART_RxISR_8BIT_FIFOEN+0x186>
  34551. /* Rx process is completed, restore huart->RxState to Ready */
  34552. huart->RxState = HAL_UART_STATE_READY;
  34553. 800edc6: 687b ldr r3, [r7, #4]
  34554. 800edc8: 2220 movs r2, #32
  34555. 800edca: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  34556. /* Clear RxISR function pointer */
  34557. huart->RxISR = NULL;
  34558. 800edce: 687b ldr r3, [r7, #4]
  34559. 800edd0: 2200 movs r2, #0
  34560. 800edd2: 675a str r2, [r3, #116] @ 0x74
  34561. /* Initialize type of RxEvent to Transfer Complete */
  34562. huart->RxEventType = HAL_UART_RXEVENT_TC;
  34563. 800edd4: 687b ldr r3, [r7, #4]
  34564. 800edd6: 2200 movs r2, #0
  34565. 800edd8: 671a str r2, [r3, #112] @ 0x70
  34566. if (!(IS_LPUART_INSTANCE(huart->Instance)))
  34567. 800edda: 687b ldr r3, [r7, #4]
  34568. 800eddc: 681b ldr r3, [r3, #0]
  34569. 800edde: 4a60 ldr r2, [pc, #384] @ (800ef60 <UART_RxISR_8BIT_FIFOEN+0x358>)
  34570. 800ede0: 4293 cmp r3, r2
  34571. 800ede2: d021 beq.n 800ee28 <UART_RxISR_8BIT_FIFOEN+0x220>
  34572. {
  34573. /* Check that USART RTOEN bit is set */
  34574. if (READ_BIT(huart->Instance->CR2, USART_CR2_RTOEN) != 0U)
  34575. 800ede4: 687b ldr r3, [r7, #4]
  34576. 800ede6: 681b ldr r3, [r3, #0]
  34577. 800ede8: 685b ldr r3, [r3, #4]
  34578. 800edea: f403 0300 and.w r3, r3, #8388608 @ 0x800000
  34579. 800edee: 2b00 cmp r3, #0
  34580. 800edf0: d01a beq.n 800ee28 <UART_RxISR_8BIT_FIFOEN+0x220>
  34581. {
  34582. /* Enable the UART Receiver Timeout Interrupt */
  34583. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_RTOIE);
  34584. 800edf2: 687b ldr r3, [r7, #4]
  34585. 800edf4: 681b ldr r3, [r3, #0]
  34586. 800edf6: 64bb str r3, [r7, #72] @ 0x48
  34587. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  34588. 800edf8: 6cbb ldr r3, [r7, #72] @ 0x48
  34589. 800edfa: e853 3f00 ldrex r3, [r3]
  34590. 800edfe: 647b str r3, [r7, #68] @ 0x44
  34591. return(result);
  34592. 800ee00: 6c7b ldr r3, [r7, #68] @ 0x44
  34593. 800ee02: f023 6380 bic.w r3, r3, #67108864 @ 0x4000000
  34594. 800ee06: f8c7 3090 str.w r3, [r7, #144] @ 0x90
  34595. 800ee0a: 687b ldr r3, [r7, #4]
  34596. 800ee0c: 681b ldr r3, [r3, #0]
  34597. 800ee0e: 461a mov r2, r3
  34598. 800ee10: f8d7 3090 ldr.w r3, [r7, #144] @ 0x90
  34599. 800ee14: 657b str r3, [r7, #84] @ 0x54
  34600. 800ee16: 653a str r2, [r7, #80] @ 0x50
  34601. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  34602. 800ee18: 6d39 ldr r1, [r7, #80] @ 0x50
  34603. 800ee1a: 6d7a ldr r2, [r7, #84] @ 0x54
  34604. 800ee1c: e841 2300 strex r3, r2, [r1]
  34605. 800ee20: 64fb str r3, [r7, #76] @ 0x4c
  34606. return(result);
  34607. 800ee22: 6cfb ldr r3, [r7, #76] @ 0x4c
  34608. 800ee24: 2b00 cmp r3, #0
  34609. 800ee26: d1e4 bne.n 800edf2 <UART_RxISR_8BIT_FIFOEN+0x1ea>
  34610. }
  34611. }
  34612. /* Check current reception Mode :
  34613. If Reception till IDLE event has been selected : */
  34614. if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
  34615. 800ee28: 687b ldr r3, [r7, #4]
  34616. 800ee2a: 6edb ldr r3, [r3, #108] @ 0x6c
  34617. 800ee2c: 2b01 cmp r3, #1
  34618. 800ee2e: d130 bne.n 800ee92 <UART_RxISR_8BIT_FIFOEN+0x28a>
  34619. {
  34620. /* Set reception type to Standard */
  34621. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  34622. 800ee30: 687b ldr r3, [r7, #4]
  34623. 800ee32: 2200 movs r2, #0
  34624. 800ee34: 66da str r2, [r3, #108] @ 0x6c
  34625. /* Disable IDLE interrupt */
  34626. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  34627. 800ee36: 687b ldr r3, [r7, #4]
  34628. 800ee38: 681b ldr r3, [r3, #0]
  34629. 800ee3a: 637b str r3, [r7, #52] @ 0x34
  34630. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  34631. 800ee3c: 6b7b ldr r3, [r7, #52] @ 0x34
  34632. 800ee3e: e853 3f00 ldrex r3, [r3]
  34633. 800ee42: 633b str r3, [r7, #48] @ 0x30
  34634. return(result);
  34635. 800ee44: 6b3b ldr r3, [r7, #48] @ 0x30
  34636. 800ee46: f023 0310 bic.w r3, r3, #16
  34637. 800ee4a: f8c7 308c str.w r3, [r7, #140] @ 0x8c
  34638. 800ee4e: 687b ldr r3, [r7, #4]
  34639. 800ee50: 681b ldr r3, [r3, #0]
  34640. 800ee52: 461a mov r2, r3
  34641. 800ee54: f8d7 308c ldr.w r3, [r7, #140] @ 0x8c
  34642. 800ee58: 643b str r3, [r7, #64] @ 0x40
  34643. 800ee5a: 63fa str r2, [r7, #60] @ 0x3c
  34644. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  34645. 800ee5c: 6bf9 ldr r1, [r7, #60] @ 0x3c
  34646. 800ee5e: 6c3a ldr r2, [r7, #64] @ 0x40
  34647. 800ee60: e841 2300 strex r3, r2, [r1]
  34648. 800ee64: 63bb str r3, [r7, #56] @ 0x38
  34649. return(result);
  34650. 800ee66: 6bbb ldr r3, [r7, #56] @ 0x38
  34651. 800ee68: 2b00 cmp r3, #0
  34652. 800ee6a: d1e4 bne.n 800ee36 <UART_RxISR_8BIT_FIFOEN+0x22e>
  34653. if (__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE) == SET)
  34654. 800ee6c: 687b ldr r3, [r7, #4]
  34655. 800ee6e: 681b ldr r3, [r3, #0]
  34656. 800ee70: 69db ldr r3, [r3, #28]
  34657. 800ee72: f003 0310 and.w r3, r3, #16
  34658. 800ee76: 2b10 cmp r3, #16
  34659. 800ee78: d103 bne.n 800ee82 <UART_RxISR_8BIT_FIFOEN+0x27a>
  34660. {
  34661. /* Clear IDLE Flag */
  34662. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_IDLEF);
  34663. 800ee7a: 687b ldr r3, [r7, #4]
  34664. 800ee7c: 681b ldr r3, [r3, #0]
  34665. 800ee7e: 2210 movs r2, #16
  34666. 800ee80: 621a str r2, [r3, #32]
  34667. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  34668. /*Call registered Rx Event callback*/
  34669. huart->RxEventCallback(huart, huart->RxXferSize);
  34670. #else
  34671. /*Call legacy weak Rx Event callback*/
  34672. HAL_UARTEx_RxEventCallback(huart, huart->RxXferSize);
  34673. 800ee82: 687b ldr r3, [r7, #4]
  34674. 800ee84: f8b3 305c ldrh.w r3, [r3, #92] @ 0x5c
  34675. 800ee88: 4619 mov r1, r3
  34676. 800ee8a: 6878 ldr r0, [r7, #4]
  34677. 800ee8c: f7f3 fdb2 bl 80029f4 <HAL_UARTEx_RxEventCallback>
  34678. 800ee90: e002 b.n 800ee98 <UART_RxISR_8BIT_FIFOEN+0x290>
  34679. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  34680. /*Call registered Rx complete callback*/
  34681. huart->RxCpltCallback(huart);
  34682. #else
  34683. /*Call legacy weak Rx complete callback*/
  34684. HAL_UART_RxCpltCallback(huart);
  34685. 800ee92: 6878 ldr r0, [r7, #4]
  34686. 800ee94: f7f3 fda4 bl 80029e0 <HAL_UART_RxCpltCallback>
  34687. while ((nb_rx_data > 0U) && ((isrflags & USART_ISR_RXNE_RXFNE) != 0U))
  34688. 800ee98: f8b7 309e ldrh.w r3, [r7, #158] @ 0x9e
  34689. 800ee9c: 2b00 cmp r3, #0
  34690. 800ee9e: d006 beq.n 800eeae <UART_RxISR_8BIT_FIFOEN+0x2a6>
  34691. 800eea0: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac
  34692. 800eea4: f003 0320 and.w r3, r3, #32
  34693. 800eea8: 2b00 cmp r3, #0
  34694. 800eeaa: f47f aed1 bne.w 800ec50 <UART_RxISR_8BIT_FIFOEN+0x48>
  34695. /* When remaining number of bytes to receive is less than the RX FIFO
  34696. threshold, next incoming frames are processed as if FIFO mode was
  34697. disabled (i.e. one interrupt per received frame).
  34698. */
  34699. rxdatacount = huart->RxXferCount;
  34700. 800eeae: 687b ldr r3, [r7, #4]
  34701. 800eeb0: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  34702. 800eeb4: f8a7 308a strh.w r3, [r7, #138] @ 0x8a
  34703. if ((rxdatacount != 0U) && (rxdatacount < huart->NbRxDataToProcess))
  34704. 800eeb8: f8b7 308a ldrh.w r3, [r7, #138] @ 0x8a
  34705. 800eebc: 2b00 cmp r3, #0
  34706. 800eebe: d049 beq.n 800ef54 <UART_RxISR_8BIT_FIFOEN+0x34c>
  34707. 800eec0: 687b ldr r3, [r7, #4]
  34708. 800eec2: f8b3 3068 ldrh.w r3, [r3, #104] @ 0x68
  34709. 800eec6: f8b7 208a ldrh.w r2, [r7, #138] @ 0x8a
  34710. 800eeca: 429a cmp r2, r3
  34711. 800eecc: d242 bcs.n 800ef54 <UART_RxISR_8BIT_FIFOEN+0x34c>
  34712. {
  34713. /* Disable the UART RXFT interrupt*/
  34714. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_RXFTIE);
  34715. 800eece: 687b ldr r3, [r7, #4]
  34716. 800eed0: 681b ldr r3, [r3, #0]
  34717. 800eed2: 3308 adds r3, #8
  34718. 800eed4: 623b str r3, [r7, #32]
  34719. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  34720. 800eed6: 6a3b ldr r3, [r7, #32]
  34721. 800eed8: e853 3f00 ldrex r3, [r3]
  34722. 800eedc: 61fb str r3, [r7, #28]
  34723. return(result);
  34724. 800eede: 69fb ldr r3, [r7, #28]
  34725. 800eee0: f023 5380 bic.w r3, r3, #268435456 @ 0x10000000
  34726. 800eee4: f8c7 3084 str.w r3, [r7, #132] @ 0x84
  34727. 800eee8: 687b ldr r3, [r7, #4]
  34728. 800eeea: 681b ldr r3, [r3, #0]
  34729. 800eeec: 3308 adds r3, #8
  34730. 800eeee: f8d7 2084 ldr.w r2, [r7, #132] @ 0x84
  34731. 800eef2: 62fa str r2, [r7, #44] @ 0x2c
  34732. 800eef4: 62bb str r3, [r7, #40] @ 0x28
  34733. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  34734. 800eef6: 6ab9 ldr r1, [r7, #40] @ 0x28
  34735. 800eef8: 6afa ldr r2, [r7, #44] @ 0x2c
  34736. 800eefa: e841 2300 strex r3, r2, [r1]
  34737. 800eefe: 627b str r3, [r7, #36] @ 0x24
  34738. return(result);
  34739. 800ef00: 6a7b ldr r3, [r7, #36] @ 0x24
  34740. 800ef02: 2b00 cmp r3, #0
  34741. 800ef04: d1e3 bne.n 800eece <UART_RxISR_8BIT_FIFOEN+0x2c6>
  34742. /* Update the RxISR function pointer */
  34743. huart->RxISR = UART_RxISR_8BIT;
  34744. 800ef06: 687b ldr r3, [r7, #4]
  34745. 800ef08: 4a16 ldr r2, [pc, #88] @ (800ef64 <UART_RxISR_8BIT_FIFOEN+0x35c>)
  34746. 800ef0a: 675a str r2, [r3, #116] @ 0x74
  34747. /* Enable the UART Data Register Not Empty interrupt */
  34748. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_RXNEIE_RXFNEIE);
  34749. 800ef0c: 687b ldr r3, [r7, #4]
  34750. 800ef0e: 681b ldr r3, [r3, #0]
  34751. 800ef10: 60fb str r3, [r7, #12]
  34752. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  34753. 800ef12: 68fb ldr r3, [r7, #12]
  34754. 800ef14: e853 3f00 ldrex r3, [r3]
  34755. 800ef18: 60bb str r3, [r7, #8]
  34756. return(result);
  34757. 800ef1a: 68bb ldr r3, [r7, #8]
  34758. 800ef1c: f043 0320 orr.w r3, r3, #32
  34759. 800ef20: f8c7 3080 str.w r3, [r7, #128] @ 0x80
  34760. 800ef24: 687b ldr r3, [r7, #4]
  34761. 800ef26: 681b ldr r3, [r3, #0]
  34762. 800ef28: 461a mov r2, r3
  34763. 800ef2a: f8d7 3080 ldr.w r3, [r7, #128] @ 0x80
  34764. 800ef2e: 61bb str r3, [r7, #24]
  34765. 800ef30: 617a str r2, [r7, #20]
  34766. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  34767. 800ef32: 6979 ldr r1, [r7, #20]
  34768. 800ef34: 69ba ldr r2, [r7, #24]
  34769. 800ef36: e841 2300 strex r3, r2, [r1]
  34770. 800ef3a: 613b str r3, [r7, #16]
  34771. return(result);
  34772. 800ef3c: 693b ldr r3, [r7, #16]
  34773. 800ef3e: 2b00 cmp r3, #0
  34774. 800ef40: d1e4 bne.n 800ef0c <UART_RxISR_8BIT_FIFOEN+0x304>
  34775. else
  34776. {
  34777. /* Clear RXNE interrupt flag */
  34778. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  34779. }
  34780. }
  34781. 800ef42: e007 b.n 800ef54 <UART_RxISR_8BIT_FIFOEN+0x34c>
  34782. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  34783. 800ef44: 687b ldr r3, [r7, #4]
  34784. 800ef46: 681b ldr r3, [r3, #0]
  34785. 800ef48: 699a ldr r2, [r3, #24]
  34786. 800ef4a: 687b ldr r3, [r7, #4]
  34787. 800ef4c: 681b ldr r3, [r3, #0]
  34788. 800ef4e: f042 0208 orr.w r2, r2, #8
  34789. 800ef52: 619a str r2, [r3, #24]
  34790. }
  34791. 800ef54: bf00 nop
  34792. 800ef56: 37b0 adds r7, #176 @ 0xb0
  34793. 800ef58: 46bd mov sp, r7
  34794. 800ef5a: bd80 pop {r7, pc}
  34795. 800ef5c: effffffe .word 0xeffffffe
  34796. 800ef60: 58000c00 .word 0x58000c00
  34797. 800ef64: 0800e899 .word 0x0800e899
  34798. 0800ef68 <UART_RxISR_16BIT_FIFOEN>:
  34799. * interruptions have been enabled by HAL_UART_Receive_IT()
  34800. * @param huart UART handle.
  34801. * @retval None
  34802. */
  34803. static void UART_RxISR_16BIT_FIFOEN(UART_HandleTypeDef *huart)
  34804. {
  34805. 800ef68: b580 push {r7, lr}
  34806. 800ef6a: b0ae sub sp, #184 @ 0xb8
  34807. 800ef6c: af00 add r7, sp, #0
  34808. 800ef6e: 6078 str r0, [r7, #4]
  34809. uint16_t *tmp;
  34810. uint16_t uhMask = huart->Mask;
  34811. 800ef70: 687b ldr r3, [r7, #4]
  34812. 800ef72: f8b3 3060 ldrh.w r3, [r3, #96] @ 0x60
  34813. 800ef76: f8a7 30b2 strh.w r3, [r7, #178] @ 0xb2
  34814. uint16_t uhdata;
  34815. uint16_t nb_rx_data;
  34816. uint16_t rxdatacount;
  34817. uint32_t isrflags = READ_REG(huart->Instance->ISR);
  34818. 800ef7a: 687b ldr r3, [r7, #4]
  34819. 800ef7c: 681b ldr r3, [r3, #0]
  34820. 800ef7e: 69db ldr r3, [r3, #28]
  34821. 800ef80: f8c7 30b4 str.w r3, [r7, #180] @ 0xb4
  34822. uint32_t cr1its = READ_REG(huart->Instance->CR1);
  34823. 800ef84: 687b ldr r3, [r7, #4]
  34824. 800ef86: 681b ldr r3, [r3, #0]
  34825. 800ef88: 681b ldr r3, [r3, #0]
  34826. 800ef8a: f8c7 30ac str.w r3, [r7, #172] @ 0xac
  34827. uint32_t cr3its = READ_REG(huart->Instance->CR3);
  34828. 800ef8e: 687b ldr r3, [r7, #4]
  34829. 800ef90: 681b ldr r3, [r3, #0]
  34830. 800ef92: 689b ldr r3, [r3, #8]
  34831. 800ef94: f8c7 30a8 str.w r3, [r7, #168] @ 0xa8
  34832. /* Check that a Rx process is ongoing */
  34833. if (huart->RxState == HAL_UART_STATE_BUSY_RX)
  34834. 800ef98: 687b ldr r3, [r7, #4]
  34835. 800ef9a: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c
  34836. 800ef9e: 2b22 cmp r3, #34 @ 0x22
  34837. 800efa0: f040 8184 bne.w 800f2ac <UART_RxISR_16BIT_FIFOEN+0x344>
  34838. {
  34839. nb_rx_data = huart->NbRxDataToProcess;
  34840. 800efa4: 687b ldr r3, [r7, #4]
  34841. 800efa6: f8b3 3068 ldrh.w r3, [r3, #104] @ 0x68
  34842. 800efaa: f8a7 30a6 strh.w r3, [r7, #166] @ 0xa6
  34843. while ((nb_rx_data > 0U) && ((isrflags & USART_ISR_RXNE_RXFNE) != 0U))
  34844. 800efae: e127 b.n 800f200 <UART_RxISR_16BIT_FIFOEN+0x298>
  34845. {
  34846. uhdata = (uint16_t) READ_REG(huart->Instance->RDR);
  34847. 800efb0: 687b ldr r3, [r7, #4]
  34848. 800efb2: 681b ldr r3, [r3, #0]
  34849. 800efb4: 6a5b ldr r3, [r3, #36] @ 0x24
  34850. 800efb6: f8a7 30a4 strh.w r3, [r7, #164] @ 0xa4
  34851. tmp = (uint16_t *) huart->pRxBuffPtr ;
  34852. 800efba: 687b ldr r3, [r7, #4]
  34853. 800efbc: 6d9b ldr r3, [r3, #88] @ 0x58
  34854. 800efbe: f8c7 30a0 str.w r3, [r7, #160] @ 0xa0
  34855. *tmp = (uint16_t)(uhdata & uhMask);
  34856. 800efc2: f8b7 20a4 ldrh.w r2, [r7, #164] @ 0xa4
  34857. 800efc6: f8b7 30b2 ldrh.w r3, [r7, #178] @ 0xb2
  34858. 800efca: 4013 ands r3, r2
  34859. 800efcc: b29a uxth r2, r3
  34860. 800efce: f8d7 30a0 ldr.w r3, [r7, #160] @ 0xa0
  34861. 800efd2: 801a strh r2, [r3, #0]
  34862. huart->pRxBuffPtr += 2U;
  34863. 800efd4: 687b ldr r3, [r7, #4]
  34864. 800efd6: 6d9b ldr r3, [r3, #88] @ 0x58
  34865. 800efd8: 1c9a adds r2, r3, #2
  34866. 800efda: 687b ldr r3, [r7, #4]
  34867. 800efdc: 659a str r2, [r3, #88] @ 0x58
  34868. huart->RxXferCount--;
  34869. 800efde: 687b ldr r3, [r7, #4]
  34870. 800efe0: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  34871. 800efe4: b29b uxth r3, r3
  34872. 800efe6: 3b01 subs r3, #1
  34873. 800efe8: b29a uxth r2, r3
  34874. 800efea: 687b ldr r3, [r7, #4]
  34875. 800efec: f8a3 205e strh.w r2, [r3, #94] @ 0x5e
  34876. isrflags = READ_REG(huart->Instance->ISR);
  34877. 800eff0: 687b ldr r3, [r7, #4]
  34878. 800eff2: 681b ldr r3, [r3, #0]
  34879. 800eff4: 69db ldr r3, [r3, #28]
  34880. 800eff6: f8c7 30b4 str.w r3, [r7, #180] @ 0xb4
  34881. /* If some non blocking errors occurred */
  34882. if ((isrflags & (USART_ISR_PE | USART_ISR_FE | USART_ISR_NE)) != 0U)
  34883. 800effa: f8d7 30b4 ldr.w r3, [r7, #180] @ 0xb4
  34884. 800effe: f003 0307 and.w r3, r3, #7
  34885. 800f002: 2b00 cmp r3, #0
  34886. 800f004: d053 beq.n 800f0ae <UART_RxISR_16BIT_FIFOEN+0x146>
  34887. {
  34888. /* UART parity error interrupt occurred -------------------------------------*/
  34889. if (((isrflags & USART_ISR_PE) != 0U) && ((cr1its & USART_CR1_PEIE) != 0U))
  34890. 800f006: f8d7 30b4 ldr.w r3, [r7, #180] @ 0xb4
  34891. 800f00a: f003 0301 and.w r3, r3, #1
  34892. 800f00e: 2b00 cmp r3, #0
  34893. 800f010: d011 beq.n 800f036 <UART_RxISR_16BIT_FIFOEN+0xce>
  34894. 800f012: f8d7 30ac ldr.w r3, [r7, #172] @ 0xac
  34895. 800f016: f403 7380 and.w r3, r3, #256 @ 0x100
  34896. 800f01a: 2b00 cmp r3, #0
  34897. 800f01c: d00b beq.n 800f036 <UART_RxISR_16BIT_FIFOEN+0xce>
  34898. {
  34899. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_PEF);
  34900. 800f01e: 687b ldr r3, [r7, #4]
  34901. 800f020: 681b ldr r3, [r3, #0]
  34902. 800f022: 2201 movs r2, #1
  34903. 800f024: 621a str r2, [r3, #32]
  34904. huart->ErrorCode |= HAL_UART_ERROR_PE;
  34905. 800f026: 687b ldr r3, [r7, #4]
  34906. 800f028: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  34907. 800f02c: f043 0201 orr.w r2, r3, #1
  34908. 800f030: 687b ldr r3, [r7, #4]
  34909. 800f032: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  34910. }
  34911. /* UART frame error interrupt occurred --------------------------------------*/
  34912. if (((isrflags & USART_ISR_FE) != 0U) && ((cr3its & USART_CR3_EIE) != 0U))
  34913. 800f036: f8d7 30b4 ldr.w r3, [r7, #180] @ 0xb4
  34914. 800f03a: f003 0302 and.w r3, r3, #2
  34915. 800f03e: 2b00 cmp r3, #0
  34916. 800f040: d011 beq.n 800f066 <UART_RxISR_16BIT_FIFOEN+0xfe>
  34917. 800f042: f8d7 30a8 ldr.w r3, [r7, #168] @ 0xa8
  34918. 800f046: f003 0301 and.w r3, r3, #1
  34919. 800f04a: 2b00 cmp r3, #0
  34920. 800f04c: d00b beq.n 800f066 <UART_RxISR_16BIT_FIFOEN+0xfe>
  34921. {
  34922. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_FEF);
  34923. 800f04e: 687b ldr r3, [r7, #4]
  34924. 800f050: 681b ldr r3, [r3, #0]
  34925. 800f052: 2202 movs r2, #2
  34926. 800f054: 621a str r2, [r3, #32]
  34927. huart->ErrorCode |= HAL_UART_ERROR_FE;
  34928. 800f056: 687b ldr r3, [r7, #4]
  34929. 800f058: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  34930. 800f05c: f043 0204 orr.w r2, r3, #4
  34931. 800f060: 687b ldr r3, [r7, #4]
  34932. 800f062: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  34933. }
  34934. /* UART noise error interrupt occurred --------------------------------------*/
  34935. if (((isrflags & USART_ISR_NE) != 0U) && ((cr3its & USART_CR3_EIE) != 0U))
  34936. 800f066: f8d7 30b4 ldr.w r3, [r7, #180] @ 0xb4
  34937. 800f06a: f003 0304 and.w r3, r3, #4
  34938. 800f06e: 2b00 cmp r3, #0
  34939. 800f070: d011 beq.n 800f096 <UART_RxISR_16BIT_FIFOEN+0x12e>
  34940. 800f072: f8d7 30a8 ldr.w r3, [r7, #168] @ 0xa8
  34941. 800f076: f003 0301 and.w r3, r3, #1
  34942. 800f07a: 2b00 cmp r3, #0
  34943. 800f07c: d00b beq.n 800f096 <UART_RxISR_16BIT_FIFOEN+0x12e>
  34944. {
  34945. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_NEF);
  34946. 800f07e: 687b ldr r3, [r7, #4]
  34947. 800f080: 681b ldr r3, [r3, #0]
  34948. 800f082: 2204 movs r2, #4
  34949. 800f084: 621a str r2, [r3, #32]
  34950. huart->ErrorCode |= HAL_UART_ERROR_NE;
  34951. 800f086: 687b ldr r3, [r7, #4]
  34952. 800f088: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  34953. 800f08c: f043 0202 orr.w r2, r3, #2
  34954. 800f090: 687b ldr r3, [r7, #4]
  34955. 800f092: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  34956. }
  34957. /* Call UART Error Call back function if need be ----------------------------*/
  34958. if (huart->ErrorCode != HAL_UART_ERROR_NONE)
  34959. 800f096: 687b ldr r3, [r7, #4]
  34960. 800f098: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
  34961. 800f09c: 2b00 cmp r3, #0
  34962. 800f09e: d006 beq.n 800f0ae <UART_RxISR_16BIT_FIFOEN+0x146>
  34963. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  34964. /*Call registered error callback*/
  34965. huart->ErrorCallback(huart);
  34966. #else
  34967. /*Call legacy weak error callback*/
  34968. HAL_UART_ErrorCallback(huart);
  34969. 800f0a0: 6878 ldr r0, [r7, #4]
  34970. 800f0a2: f7fe f961 bl 800d368 <HAL_UART_ErrorCallback>
  34971. #endif /* USE_HAL_UART_REGISTER_CALLBACKS */
  34972. huart->ErrorCode = HAL_UART_ERROR_NONE;
  34973. 800f0a6: 687b ldr r3, [r7, #4]
  34974. 800f0a8: 2200 movs r2, #0
  34975. 800f0aa: f8c3 2090 str.w r2, [r3, #144] @ 0x90
  34976. }
  34977. }
  34978. if (huart->RxXferCount == 0U)
  34979. 800f0ae: 687b ldr r3, [r7, #4]
  34980. 800f0b0: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  34981. 800f0b4: b29b uxth r3, r3
  34982. 800f0b6: 2b00 cmp r3, #0
  34983. 800f0b8: f040 80a2 bne.w 800f200 <UART_RxISR_16BIT_FIFOEN+0x298>
  34984. {
  34985. /* Disable the UART Parity Error Interrupt and RXFT interrupt*/
  34986. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_PEIE);
  34987. 800f0bc: 687b ldr r3, [r7, #4]
  34988. 800f0be: 681b ldr r3, [r3, #0]
  34989. 800f0c0: 677b str r3, [r7, #116] @ 0x74
  34990. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  34991. 800f0c2: 6f7b ldr r3, [r7, #116] @ 0x74
  34992. 800f0c4: e853 3f00 ldrex r3, [r3]
  34993. 800f0c8: 673b str r3, [r7, #112] @ 0x70
  34994. return(result);
  34995. 800f0ca: 6f3b ldr r3, [r7, #112] @ 0x70
  34996. 800f0cc: f423 7380 bic.w r3, r3, #256 @ 0x100
  34997. 800f0d0: f8c7 309c str.w r3, [r7, #156] @ 0x9c
  34998. 800f0d4: 687b ldr r3, [r7, #4]
  34999. 800f0d6: 681b ldr r3, [r3, #0]
  35000. 800f0d8: 461a mov r2, r3
  35001. 800f0da: f8d7 309c ldr.w r3, [r7, #156] @ 0x9c
  35002. 800f0de: f8c7 3080 str.w r3, [r7, #128] @ 0x80
  35003. 800f0e2: 67fa str r2, [r7, #124] @ 0x7c
  35004. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  35005. 800f0e4: 6ff9 ldr r1, [r7, #124] @ 0x7c
  35006. 800f0e6: f8d7 2080 ldr.w r2, [r7, #128] @ 0x80
  35007. 800f0ea: e841 2300 strex r3, r2, [r1]
  35008. 800f0ee: 67bb str r3, [r7, #120] @ 0x78
  35009. return(result);
  35010. 800f0f0: 6fbb ldr r3, [r7, #120] @ 0x78
  35011. 800f0f2: 2b00 cmp r3, #0
  35012. 800f0f4: d1e2 bne.n 800f0bc <UART_RxISR_16BIT_FIFOEN+0x154>
  35013. /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error)
  35014. and RX FIFO Threshold interrupt */
  35015. ATOMIC_CLEAR_BIT(huart->Instance->CR3, (USART_CR3_EIE | USART_CR3_RXFTIE));
  35016. 800f0f6: 687b ldr r3, [r7, #4]
  35017. 800f0f8: 681b ldr r3, [r3, #0]
  35018. 800f0fa: 3308 adds r3, #8
  35019. 800f0fc: 663b str r3, [r7, #96] @ 0x60
  35020. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  35021. 800f0fe: 6e3b ldr r3, [r7, #96] @ 0x60
  35022. 800f100: e853 3f00 ldrex r3, [r3]
  35023. 800f104: 65fb str r3, [r7, #92] @ 0x5c
  35024. return(result);
  35025. 800f106: 6dfa ldr r2, [r7, #92] @ 0x5c
  35026. 800f108: 4b6e ldr r3, [pc, #440] @ (800f2c4 <UART_RxISR_16BIT_FIFOEN+0x35c>)
  35027. 800f10a: 4013 ands r3, r2
  35028. 800f10c: f8c7 3098 str.w r3, [r7, #152] @ 0x98
  35029. 800f110: 687b ldr r3, [r7, #4]
  35030. 800f112: 681b ldr r3, [r3, #0]
  35031. 800f114: 3308 adds r3, #8
  35032. 800f116: f8d7 2098 ldr.w r2, [r7, #152] @ 0x98
  35033. 800f11a: 66fa str r2, [r7, #108] @ 0x6c
  35034. 800f11c: 66bb str r3, [r7, #104] @ 0x68
  35035. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  35036. 800f11e: 6eb9 ldr r1, [r7, #104] @ 0x68
  35037. 800f120: 6efa ldr r2, [r7, #108] @ 0x6c
  35038. 800f122: e841 2300 strex r3, r2, [r1]
  35039. 800f126: 667b str r3, [r7, #100] @ 0x64
  35040. return(result);
  35041. 800f128: 6e7b ldr r3, [r7, #100] @ 0x64
  35042. 800f12a: 2b00 cmp r3, #0
  35043. 800f12c: d1e3 bne.n 800f0f6 <UART_RxISR_16BIT_FIFOEN+0x18e>
  35044. /* Rx process is completed, restore huart->RxState to Ready */
  35045. huart->RxState = HAL_UART_STATE_READY;
  35046. 800f12e: 687b ldr r3, [r7, #4]
  35047. 800f130: 2220 movs r2, #32
  35048. 800f132: f8c3 208c str.w r2, [r3, #140] @ 0x8c
  35049. /* Clear RxISR function pointer */
  35050. huart->RxISR = NULL;
  35051. 800f136: 687b ldr r3, [r7, #4]
  35052. 800f138: 2200 movs r2, #0
  35053. 800f13a: 675a str r2, [r3, #116] @ 0x74
  35054. /* Initialize type of RxEvent to Transfer Complete */
  35055. huart->RxEventType = HAL_UART_RXEVENT_TC;
  35056. 800f13c: 687b ldr r3, [r7, #4]
  35057. 800f13e: 2200 movs r2, #0
  35058. 800f140: 671a str r2, [r3, #112] @ 0x70
  35059. if (!(IS_LPUART_INSTANCE(huart->Instance)))
  35060. 800f142: 687b ldr r3, [r7, #4]
  35061. 800f144: 681b ldr r3, [r3, #0]
  35062. 800f146: 4a60 ldr r2, [pc, #384] @ (800f2c8 <UART_RxISR_16BIT_FIFOEN+0x360>)
  35063. 800f148: 4293 cmp r3, r2
  35064. 800f14a: d021 beq.n 800f190 <UART_RxISR_16BIT_FIFOEN+0x228>
  35065. {
  35066. /* Check that USART RTOEN bit is set */
  35067. if (READ_BIT(huart->Instance->CR2, USART_CR2_RTOEN) != 0U)
  35068. 800f14c: 687b ldr r3, [r7, #4]
  35069. 800f14e: 681b ldr r3, [r3, #0]
  35070. 800f150: 685b ldr r3, [r3, #4]
  35071. 800f152: f403 0300 and.w r3, r3, #8388608 @ 0x800000
  35072. 800f156: 2b00 cmp r3, #0
  35073. 800f158: d01a beq.n 800f190 <UART_RxISR_16BIT_FIFOEN+0x228>
  35074. {
  35075. /* Enable the UART Receiver Timeout Interrupt */
  35076. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_RTOIE);
  35077. 800f15a: 687b ldr r3, [r7, #4]
  35078. 800f15c: 681b ldr r3, [r3, #0]
  35079. 800f15e: 64fb str r3, [r7, #76] @ 0x4c
  35080. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  35081. 800f160: 6cfb ldr r3, [r7, #76] @ 0x4c
  35082. 800f162: e853 3f00 ldrex r3, [r3]
  35083. 800f166: 64bb str r3, [r7, #72] @ 0x48
  35084. return(result);
  35085. 800f168: 6cbb ldr r3, [r7, #72] @ 0x48
  35086. 800f16a: f023 6380 bic.w r3, r3, #67108864 @ 0x4000000
  35087. 800f16e: f8c7 3094 str.w r3, [r7, #148] @ 0x94
  35088. 800f172: 687b ldr r3, [r7, #4]
  35089. 800f174: 681b ldr r3, [r3, #0]
  35090. 800f176: 461a mov r2, r3
  35091. 800f178: f8d7 3094 ldr.w r3, [r7, #148] @ 0x94
  35092. 800f17c: 65bb str r3, [r7, #88] @ 0x58
  35093. 800f17e: 657a str r2, [r7, #84] @ 0x54
  35094. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  35095. 800f180: 6d79 ldr r1, [r7, #84] @ 0x54
  35096. 800f182: 6dba ldr r2, [r7, #88] @ 0x58
  35097. 800f184: e841 2300 strex r3, r2, [r1]
  35098. 800f188: 653b str r3, [r7, #80] @ 0x50
  35099. return(result);
  35100. 800f18a: 6d3b ldr r3, [r7, #80] @ 0x50
  35101. 800f18c: 2b00 cmp r3, #0
  35102. 800f18e: d1e4 bne.n 800f15a <UART_RxISR_16BIT_FIFOEN+0x1f2>
  35103. }
  35104. }
  35105. /* Check current reception Mode :
  35106. If Reception till IDLE event has been selected : */
  35107. if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
  35108. 800f190: 687b ldr r3, [r7, #4]
  35109. 800f192: 6edb ldr r3, [r3, #108] @ 0x6c
  35110. 800f194: 2b01 cmp r3, #1
  35111. 800f196: d130 bne.n 800f1fa <UART_RxISR_16BIT_FIFOEN+0x292>
  35112. {
  35113. /* Set reception type to Standard */
  35114. huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
  35115. 800f198: 687b ldr r3, [r7, #4]
  35116. 800f19a: 2200 movs r2, #0
  35117. 800f19c: 66da str r2, [r3, #108] @ 0x6c
  35118. /* Disable IDLE interrupt */
  35119. ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  35120. 800f19e: 687b ldr r3, [r7, #4]
  35121. 800f1a0: 681b ldr r3, [r3, #0]
  35122. 800f1a2: 63bb str r3, [r7, #56] @ 0x38
  35123. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  35124. 800f1a4: 6bbb ldr r3, [r7, #56] @ 0x38
  35125. 800f1a6: e853 3f00 ldrex r3, [r3]
  35126. 800f1aa: 637b str r3, [r7, #52] @ 0x34
  35127. return(result);
  35128. 800f1ac: 6b7b ldr r3, [r7, #52] @ 0x34
  35129. 800f1ae: f023 0310 bic.w r3, r3, #16
  35130. 800f1b2: f8c7 3090 str.w r3, [r7, #144] @ 0x90
  35131. 800f1b6: 687b ldr r3, [r7, #4]
  35132. 800f1b8: 681b ldr r3, [r3, #0]
  35133. 800f1ba: 461a mov r2, r3
  35134. 800f1bc: f8d7 3090 ldr.w r3, [r7, #144] @ 0x90
  35135. 800f1c0: 647b str r3, [r7, #68] @ 0x44
  35136. 800f1c2: 643a str r2, [r7, #64] @ 0x40
  35137. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  35138. 800f1c4: 6c39 ldr r1, [r7, #64] @ 0x40
  35139. 800f1c6: 6c7a ldr r2, [r7, #68] @ 0x44
  35140. 800f1c8: e841 2300 strex r3, r2, [r1]
  35141. 800f1cc: 63fb str r3, [r7, #60] @ 0x3c
  35142. return(result);
  35143. 800f1ce: 6bfb ldr r3, [r7, #60] @ 0x3c
  35144. 800f1d0: 2b00 cmp r3, #0
  35145. 800f1d2: d1e4 bne.n 800f19e <UART_RxISR_16BIT_FIFOEN+0x236>
  35146. if (__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE) == SET)
  35147. 800f1d4: 687b ldr r3, [r7, #4]
  35148. 800f1d6: 681b ldr r3, [r3, #0]
  35149. 800f1d8: 69db ldr r3, [r3, #28]
  35150. 800f1da: f003 0310 and.w r3, r3, #16
  35151. 800f1de: 2b10 cmp r3, #16
  35152. 800f1e0: d103 bne.n 800f1ea <UART_RxISR_16BIT_FIFOEN+0x282>
  35153. {
  35154. /* Clear IDLE Flag */
  35155. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_IDLEF);
  35156. 800f1e2: 687b ldr r3, [r7, #4]
  35157. 800f1e4: 681b ldr r3, [r3, #0]
  35158. 800f1e6: 2210 movs r2, #16
  35159. 800f1e8: 621a str r2, [r3, #32]
  35160. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  35161. /*Call registered Rx Event callback*/
  35162. huart->RxEventCallback(huart, huart->RxXferSize);
  35163. #else
  35164. /*Call legacy weak Rx Event callback*/
  35165. HAL_UARTEx_RxEventCallback(huart, huart->RxXferSize);
  35166. 800f1ea: 687b ldr r3, [r7, #4]
  35167. 800f1ec: f8b3 305c ldrh.w r3, [r3, #92] @ 0x5c
  35168. 800f1f0: 4619 mov r1, r3
  35169. 800f1f2: 6878 ldr r0, [r7, #4]
  35170. 800f1f4: f7f3 fbfe bl 80029f4 <HAL_UARTEx_RxEventCallback>
  35171. 800f1f8: e002 b.n 800f200 <UART_RxISR_16BIT_FIFOEN+0x298>
  35172. #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
  35173. /*Call registered Rx complete callback*/
  35174. huart->RxCpltCallback(huart);
  35175. #else
  35176. /*Call legacy weak Rx complete callback*/
  35177. HAL_UART_RxCpltCallback(huart);
  35178. 800f1fa: 6878 ldr r0, [r7, #4]
  35179. 800f1fc: f7f3 fbf0 bl 80029e0 <HAL_UART_RxCpltCallback>
  35180. while ((nb_rx_data > 0U) && ((isrflags & USART_ISR_RXNE_RXFNE) != 0U))
  35181. 800f200: f8b7 30a6 ldrh.w r3, [r7, #166] @ 0xa6
  35182. 800f204: 2b00 cmp r3, #0
  35183. 800f206: d006 beq.n 800f216 <UART_RxISR_16BIT_FIFOEN+0x2ae>
  35184. 800f208: f8d7 30b4 ldr.w r3, [r7, #180] @ 0xb4
  35185. 800f20c: f003 0320 and.w r3, r3, #32
  35186. 800f210: 2b00 cmp r3, #0
  35187. 800f212: f47f aecd bne.w 800efb0 <UART_RxISR_16BIT_FIFOEN+0x48>
  35188. /* When remaining number of bytes to receive is less than the RX FIFO
  35189. threshold, next incoming frames are processed as if FIFO mode was
  35190. disabled (i.e. one interrupt per received frame).
  35191. */
  35192. rxdatacount = huart->RxXferCount;
  35193. 800f216: 687b ldr r3, [r7, #4]
  35194. 800f218: f8b3 305e ldrh.w r3, [r3, #94] @ 0x5e
  35195. 800f21c: f8a7 308e strh.w r3, [r7, #142] @ 0x8e
  35196. if ((rxdatacount != 0U) && (rxdatacount < huart->NbRxDataToProcess))
  35197. 800f220: f8b7 308e ldrh.w r3, [r7, #142] @ 0x8e
  35198. 800f224: 2b00 cmp r3, #0
  35199. 800f226: d049 beq.n 800f2bc <UART_RxISR_16BIT_FIFOEN+0x354>
  35200. 800f228: 687b ldr r3, [r7, #4]
  35201. 800f22a: f8b3 3068 ldrh.w r3, [r3, #104] @ 0x68
  35202. 800f22e: f8b7 208e ldrh.w r2, [r7, #142] @ 0x8e
  35203. 800f232: 429a cmp r2, r3
  35204. 800f234: d242 bcs.n 800f2bc <UART_RxISR_16BIT_FIFOEN+0x354>
  35205. {
  35206. /* Disable the UART RXFT interrupt*/
  35207. ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_RXFTIE);
  35208. 800f236: 687b ldr r3, [r7, #4]
  35209. 800f238: 681b ldr r3, [r3, #0]
  35210. 800f23a: 3308 adds r3, #8
  35211. 800f23c: 627b str r3, [r7, #36] @ 0x24
  35212. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  35213. 800f23e: 6a7b ldr r3, [r7, #36] @ 0x24
  35214. 800f240: e853 3f00 ldrex r3, [r3]
  35215. 800f244: 623b str r3, [r7, #32]
  35216. return(result);
  35217. 800f246: 6a3b ldr r3, [r7, #32]
  35218. 800f248: f023 5380 bic.w r3, r3, #268435456 @ 0x10000000
  35219. 800f24c: f8c7 3088 str.w r3, [r7, #136] @ 0x88
  35220. 800f250: 687b ldr r3, [r7, #4]
  35221. 800f252: 681b ldr r3, [r3, #0]
  35222. 800f254: 3308 adds r3, #8
  35223. 800f256: f8d7 2088 ldr.w r2, [r7, #136] @ 0x88
  35224. 800f25a: 633a str r2, [r7, #48] @ 0x30
  35225. 800f25c: 62fb str r3, [r7, #44] @ 0x2c
  35226. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  35227. 800f25e: 6af9 ldr r1, [r7, #44] @ 0x2c
  35228. 800f260: 6b3a ldr r2, [r7, #48] @ 0x30
  35229. 800f262: e841 2300 strex r3, r2, [r1]
  35230. 800f266: 62bb str r3, [r7, #40] @ 0x28
  35231. return(result);
  35232. 800f268: 6abb ldr r3, [r7, #40] @ 0x28
  35233. 800f26a: 2b00 cmp r3, #0
  35234. 800f26c: d1e3 bne.n 800f236 <UART_RxISR_16BIT_FIFOEN+0x2ce>
  35235. /* Update the RxISR function pointer */
  35236. huart->RxISR = UART_RxISR_16BIT;
  35237. 800f26e: 687b ldr r3, [r7, #4]
  35238. 800f270: 4a16 ldr r2, [pc, #88] @ (800f2cc <UART_RxISR_16BIT_FIFOEN+0x364>)
  35239. 800f272: 675a str r2, [r3, #116] @ 0x74
  35240. /* Enable the UART Data Register Not Empty interrupt */
  35241. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_RXNEIE_RXFNEIE);
  35242. 800f274: 687b ldr r3, [r7, #4]
  35243. 800f276: 681b ldr r3, [r3, #0]
  35244. 800f278: 613b str r3, [r7, #16]
  35245. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  35246. 800f27a: 693b ldr r3, [r7, #16]
  35247. 800f27c: e853 3f00 ldrex r3, [r3]
  35248. 800f280: 60fb str r3, [r7, #12]
  35249. return(result);
  35250. 800f282: 68fb ldr r3, [r7, #12]
  35251. 800f284: f043 0320 orr.w r3, r3, #32
  35252. 800f288: f8c7 3084 str.w r3, [r7, #132] @ 0x84
  35253. 800f28c: 687b ldr r3, [r7, #4]
  35254. 800f28e: 681b ldr r3, [r3, #0]
  35255. 800f290: 461a mov r2, r3
  35256. 800f292: f8d7 3084 ldr.w r3, [r7, #132] @ 0x84
  35257. 800f296: 61fb str r3, [r7, #28]
  35258. 800f298: 61ba str r2, [r7, #24]
  35259. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  35260. 800f29a: 69b9 ldr r1, [r7, #24]
  35261. 800f29c: 69fa ldr r2, [r7, #28]
  35262. 800f29e: e841 2300 strex r3, r2, [r1]
  35263. 800f2a2: 617b str r3, [r7, #20]
  35264. return(result);
  35265. 800f2a4: 697b ldr r3, [r7, #20]
  35266. 800f2a6: 2b00 cmp r3, #0
  35267. 800f2a8: d1e4 bne.n 800f274 <UART_RxISR_16BIT_FIFOEN+0x30c>
  35268. else
  35269. {
  35270. /* Clear RXNE interrupt flag */
  35271. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  35272. }
  35273. }
  35274. 800f2aa: e007 b.n 800f2bc <UART_RxISR_16BIT_FIFOEN+0x354>
  35275. __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
  35276. 800f2ac: 687b ldr r3, [r7, #4]
  35277. 800f2ae: 681b ldr r3, [r3, #0]
  35278. 800f2b0: 699a ldr r2, [r3, #24]
  35279. 800f2b2: 687b ldr r3, [r7, #4]
  35280. 800f2b4: 681b ldr r3, [r3, #0]
  35281. 800f2b6: f042 0208 orr.w r2, r2, #8
  35282. 800f2ba: 619a str r2, [r3, #24]
  35283. }
  35284. 800f2bc: bf00 nop
  35285. 800f2be: 37b8 adds r7, #184 @ 0xb8
  35286. 800f2c0: 46bd mov sp, r7
  35287. 800f2c2: bd80 pop {r7, pc}
  35288. 800f2c4: effffffe .word 0xeffffffe
  35289. 800f2c8: 58000c00 .word 0x58000c00
  35290. 800f2cc: 0800ea51 .word 0x0800ea51
  35291. 0800f2d0 <HAL_UARTEx_WakeupCallback>:
  35292. * @brief UART wakeup from Stop mode callback.
  35293. * @param huart UART handle.
  35294. * @retval None
  35295. */
  35296. __weak void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart)
  35297. {
  35298. 800f2d0: b480 push {r7}
  35299. 800f2d2: b083 sub sp, #12
  35300. 800f2d4: af00 add r7, sp, #0
  35301. 800f2d6: 6078 str r0, [r7, #4]
  35302. UNUSED(huart);
  35303. /* NOTE : This function should not be modified, when the callback is needed,
  35304. the HAL_UARTEx_WakeupCallback can be implemented in the user file.
  35305. */
  35306. }
  35307. 800f2d8: bf00 nop
  35308. 800f2da: 370c adds r7, #12
  35309. 800f2dc: 46bd mov sp, r7
  35310. 800f2de: f85d 7b04 ldr.w r7, [sp], #4
  35311. 800f2e2: 4770 bx lr
  35312. 0800f2e4 <HAL_UARTEx_RxFifoFullCallback>:
  35313. * @brief UART RX Fifo full callback.
  35314. * @param huart UART handle.
  35315. * @retval None
  35316. */
  35317. __weak void HAL_UARTEx_RxFifoFullCallback(UART_HandleTypeDef *huart)
  35318. {
  35319. 800f2e4: b480 push {r7}
  35320. 800f2e6: b083 sub sp, #12
  35321. 800f2e8: af00 add r7, sp, #0
  35322. 800f2ea: 6078 str r0, [r7, #4]
  35323. UNUSED(huart);
  35324. /* NOTE : This function should not be modified, when the callback is needed,
  35325. the HAL_UARTEx_RxFifoFullCallback can be implemented in the user file.
  35326. */
  35327. }
  35328. 800f2ec: bf00 nop
  35329. 800f2ee: 370c adds r7, #12
  35330. 800f2f0: 46bd mov sp, r7
  35331. 800f2f2: f85d 7b04 ldr.w r7, [sp], #4
  35332. 800f2f6: 4770 bx lr
  35333. 0800f2f8 <HAL_UARTEx_TxFifoEmptyCallback>:
  35334. * @brief UART TX Fifo empty callback.
  35335. * @param huart UART handle.
  35336. * @retval None
  35337. */
  35338. __weak void HAL_UARTEx_TxFifoEmptyCallback(UART_HandleTypeDef *huart)
  35339. {
  35340. 800f2f8: b480 push {r7}
  35341. 800f2fa: b083 sub sp, #12
  35342. 800f2fc: af00 add r7, sp, #0
  35343. 800f2fe: 6078 str r0, [r7, #4]
  35344. UNUSED(huart);
  35345. /* NOTE : This function should not be modified, when the callback is needed,
  35346. the HAL_UARTEx_TxFifoEmptyCallback can be implemented in the user file.
  35347. */
  35348. }
  35349. 800f300: bf00 nop
  35350. 800f302: 370c adds r7, #12
  35351. 800f304: 46bd mov sp, r7
  35352. 800f306: f85d 7b04 ldr.w r7, [sp], #4
  35353. 800f30a: 4770 bx lr
  35354. 0800f30c <HAL_UARTEx_DisableFifoMode>:
  35355. * @brief Disable the FIFO mode.
  35356. * @param huart UART handle.
  35357. * @retval HAL status
  35358. */
  35359. HAL_StatusTypeDef HAL_UARTEx_DisableFifoMode(UART_HandleTypeDef *huart)
  35360. {
  35361. 800f30c: b480 push {r7}
  35362. 800f30e: b085 sub sp, #20
  35363. 800f310: af00 add r7, sp, #0
  35364. 800f312: 6078 str r0, [r7, #4]
  35365. /* Check parameters */
  35366. assert_param(IS_UART_FIFO_INSTANCE(huart->Instance));
  35367. /* Process Locked */
  35368. __HAL_LOCK(huart);
  35369. 800f314: 687b ldr r3, [r7, #4]
  35370. 800f316: f893 3084 ldrb.w r3, [r3, #132] @ 0x84
  35371. 800f31a: 2b01 cmp r3, #1
  35372. 800f31c: d101 bne.n 800f322 <HAL_UARTEx_DisableFifoMode+0x16>
  35373. 800f31e: 2302 movs r3, #2
  35374. 800f320: e027 b.n 800f372 <HAL_UARTEx_DisableFifoMode+0x66>
  35375. 800f322: 687b ldr r3, [r7, #4]
  35376. 800f324: 2201 movs r2, #1
  35377. 800f326: f883 2084 strb.w r2, [r3, #132] @ 0x84
  35378. huart->gState = HAL_UART_STATE_BUSY;
  35379. 800f32a: 687b ldr r3, [r7, #4]
  35380. 800f32c: 2224 movs r2, #36 @ 0x24
  35381. 800f32e: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  35382. /* Save actual UART configuration */
  35383. tmpcr1 = READ_REG(huart->Instance->CR1);
  35384. 800f332: 687b ldr r3, [r7, #4]
  35385. 800f334: 681b ldr r3, [r3, #0]
  35386. 800f336: 681b ldr r3, [r3, #0]
  35387. 800f338: 60fb str r3, [r7, #12]
  35388. /* Disable UART */
  35389. __HAL_UART_DISABLE(huart);
  35390. 800f33a: 687b ldr r3, [r7, #4]
  35391. 800f33c: 681b ldr r3, [r3, #0]
  35392. 800f33e: 681a ldr r2, [r3, #0]
  35393. 800f340: 687b ldr r3, [r7, #4]
  35394. 800f342: 681b ldr r3, [r3, #0]
  35395. 800f344: f022 0201 bic.w r2, r2, #1
  35396. 800f348: 601a str r2, [r3, #0]
  35397. /* Enable FIFO mode */
  35398. CLEAR_BIT(tmpcr1, USART_CR1_FIFOEN);
  35399. 800f34a: 68fb ldr r3, [r7, #12]
  35400. 800f34c: f023 5300 bic.w r3, r3, #536870912 @ 0x20000000
  35401. 800f350: 60fb str r3, [r7, #12]
  35402. huart->FifoMode = UART_FIFOMODE_DISABLE;
  35403. 800f352: 687b ldr r3, [r7, #4]
  35404. 800f354: 2200 movs r2, #0
  35405. 800f356: 665a str r2, [r3, #100] @ 0x64
  35406. /* Restore UART configuration */
  35407. WRITE_REG(huart->Instance->CR1, tmpcr1);
  35408. 800f358: 687b ldr r3, [r7, #4]
  35409. 800f35a: 681b ldr r3, [r3, #0]
  35410. 800f35c: 68fa ldr r2, [r7, #12]
  35411. 800f35e: 601a str r2, [r3, #0]
  35412. huart->gState = HAL_UART_STATE_READY;
  35413. 800f360: 687b ldr r3, [r7, #4]
  35414. 800f362: 2220 movs r2, #32
  35415. 800f364: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  35416. /* Process Unlocked */
  35417. __HAL_UNLOCK(huart);
  35418. 800f368: 687b ldr r3, [r7, #4]
  35419. 800f36a: 2200 movs r2, #0
  35420. 800f36c: f883 2084 strb.w r2, [r3, #132] @ 0x84
  35421. return HAL_OK;
  35422. 800f370: 2300 movs r3, #0
  35423. }
  35424. 800f372: 4618 mov r0, r3
  35425. 800f374: 3714 adds r7, #20
  35426. 800f376: 46bd mov sp, r7
  35427. 800f378: f85d 7b04 ldr.w r7, [sp], #4
  35428. 800f37c: 4770 bx lr
  35429. 0800f37e <HAL_UARTEx_SetTxFifoThreshold>:
  35430. * @arg @ref UART_TXFIFO_THRESHOLD_7_8
  35431. * @arg @ref UART_TXFIFO_THRESHOLD_8_8
  35432. * @retval HAL status
  35433. */
  35434. HAL_StatusTypeDef HAL_UARTEx_SetTxFifoThreshold(UART_HandleTypeDef *huart, uint32_t Threshold)
  35435. {
  35436. 800f37e: b580 push {r7, lr}
  35437. 800f380: b084 sub sp, #16
  35438. 800f382: af00 add r7, sp, #0
  35439. 800f384: 6078 str r0, [r7, #4]
  35440. 800f386: 6039 str r1, [r7, #0]
  35441. /* Check parameters */
  35442. assert_param(IS_UART_FIFO_INSTANCE(huart->Instance));
  35443. assert_param(IS_UART_TXFIFO_THRESHOLD(Threshold));
  35444. /* Process Locked */
  35445. __HAL_LOCK(huart);
  35446. 800f388: 687b ldr r3, [r7, #4]
  35447. 800f38a: f893 3084 ldrb.w r3, [r3, #132] @ 0x84
  35448. 800f38e: 2b01 cmp r3, #1
  35449. 800f390: d101 bne.n 800f396 <HAL_UARTEx_SetTxFifoThreshold+0x18>
  35450. 800f392: 2302 movs r3, #2
  35451. 800f394: e02d b.n 800f3f2 <HAL_UARTEx_SetTxFifoThreshold+0x74>
  35452. 800f396: 687b ldr r3, [r7, #4]
  35453. 800f398: 2201 movs r2, #1
  35454. 800f39a: f883 2084 strb.w r2, [r3, #132] @ 0x84
  35455. huart->gState = HAL_UART_STATE_BUSY;
  35456. 800f39e: 687b ldr r3, [r7, #4]
  35457. 800f3a0: 2224 movs r2, #36 @ 0x24
  35458. 800f3a2: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  35459. /* Save actual UART configuration */
  35460. tmpcr1 = READ_REG(huart->Instance->CR1);
  35461. 800f3a6: 687b ldr r3, [r7, #4]
  35462. 800f3a8: 681b ldr r3, [r3, #0]
  35463. 800f3aa: 681b ldr r3, [r3, #0]
  35464. 800f3ac: 60fb str r3, [r7, #12]
  35465. /* Disable UART */
  35466. __HAL_UART_DISABLE(huart);
  35467. 800f3ae: 687b ldr r3, [r7, #4]
  35468. 800f3b0: 681b ldr r3, [r3, #0]
  35469. 800f3b2: 681a ldr r2, [r3, #0]
  35470. 800f3b4: 687b ldr r3, [r7, #4]
  35471. 800f3b6: 681b ldr r3, [r3, #0]
  35472. 800f3b8: f022 0201 bic.w r2, r2, #1
  35473. 800f3bc: 601a str r2, [r3, #0]
  35474. /* Update TX threshold configuration */
  35475. MODIFY_REG(huart->Instance->CR3, USART_CR3_TXFTCFG, Threshold);
  35476. 800f3be: 687b ldr r3, [r7, #4]
  35477. 800f3c0: 681b ldr r3, [r3, #0]
  35478. 800f3c2: 689b ldr r3, [r3, #8]
  35479. 800f3c4: f023 4160 bic.w r1, r3, #3758096384 @ 0xe0000000
  35480. 800f3c8: 687b ldr r3, [r7, #4]
  35481. 800f3ca: 681b ldr r3, [r3, #0]
  35482. 800f3cc: 683a ldr r2, [r7, #0]
  35483. 800f3ce: 430a orrs r2, r1
  35484. 800f3d0: 609a str r2, [r3, #8]
  35485. /* Determine the number of data to process during RX/TX ISR execution */
  35486. UARTEx_SetNbDataToProcess(huart);
  35487. 800f3d2: 6878 ldr r0, [r7, #4]
  35488. 800f3d4: f000 f8a0 bl 800f518 <UARTEx_SetNbDataToProcess>
  35489. /* Restore UART configuration */
  35490. WRITE_REG(huart->Instance->CR1, tmpcr1);
  35491. 800f3d8: 687b ldr r3, [r7, #4]
  35492. 800f3da: 681b ldr r3, [r3, #0]
  35493. 800f3dc: 68fa ldr r2, [r7, #12]
  35494. 800f3de: 601a str r2, [r3, #0]
  35495. huart->gState = HAL_UART_STATE_READY;
  35496. 800f3e0: 687b ldr r3, [r7, #4]
  35497. 800f3e2: 2220 movs r2, #32
  35498. 800f3e4: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  35499. /* Process Unlocked */
  35500. __HAL_UNLOCK(huart);
  35501. 800f3e8: 687b ldr r3, [r7, #4]
  35502. 800f3ea: 2200 movs r2, #0
  35503. 800f3ec: f883 2084 strb.w r2, [r3, #132] @ 0x84
  35504. return HAL_OK;
  35505. 800f3f0: 2300 movs r3, #0
  35506. }
  35507. 800f3f2: 4618 mov r0, r3
  35508. 800f3f4: 3710 adds r7, #16
  35509. 800f3f6: 46bd mov sp, r7
  35510. 800f3f8: bd80 pop {r7, pc}
  35511. 0800f3fa <HAL_UARTEx_SetRxFifoThreshold>:
  35512. * @arg @ref UART_RXFIFO_THRESHOLD_7_8
  35513. * @arg @ref UART_RXFIFO_THRESHOLD_8_8
  35514. * @retval HAL status
  35515. */
  35516. HAL_StatusTypeDef HAL_UARTEx_SetRxFifoThreshold(UART_HandleTypeDef *huart, uint32_t Threshold)
  35517. {
  35518. 800f3fa: b580 push {r7, lr}
  35519. 800f3fc: b084 sub sp, #16
  35520. 800f3fe: af00 add r7, sp, #0
  35521. 800f400: 6078 str r0, [r7, #4]
  35522. 800f402: 6039 str r1, [r7, #0]
  35523. /* Check the parameters */
  35524. assert_param(IS_UART_FIFO_INSTANCE(huart->Instance));
  35525. assert_param(IS_UART_RXFIFO_THRESHOLD(Threshold));
  35526. /* Process Locked */
  35527. __HAL_LOCK(huart);
  35528. 800f404: 687b ldr r3, [r7, #4]
  35529. 800f406: f893 3084 ldrb.w r3, [r3, #132] @ 0x84
  35530. 800f40a: 2b01 cmp r3, #1
  35531. 800f40c: d101 bne.n 800f412 <HAL_UARTEx_SetRxFifoThreshold+0x18>
  35532. 800f40e: 2302 movs r3, #2
  35533. 800f410: e02d b.n 800f46e <HAL_UARTEx_SetRxFifoThreshold+0x74>
  35534. 800f412: 687b ldr r3, [r7, #4]
  35535. 800f414: 2201 movs r2, #1
  35536. 800f416: f883 2084 strb.w r2, [r3, #132] @ 0x84
  35537. huart->gState = HAL_UART_STATE_BUSY;
  35538. 800f41a: 687b ldr r3, [r7, #4]
  35539. 800f41c: 2224 movs r2, #36 @ 0x24
  35540. 800f41e: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  35541. /* Save actual UART configuration */
  35542. tmpcr1 = READ_REG(huart->Instance->CR1);
  35543. 800f422: 687b ldr r3, [r7, #4]
  35544. 800f424: 681b ldr r3, [r3, #0]
  35545. 800f426: 681b ldr r3, [r3, #0]
  35546. 800f428: 60fb str r3, [r7, #12]
  35547. /* Disable UART */
  35548. __HAL_UART_DISABLE(huart);
  35549. 800f42a: 687b ldr r3, [r7, #4]
  35550. 800f42c: 681b ldr r3, [r3, #0]
  35551. 800f42e: 681a ldr r2, [r3, #0]
  35552. 800f430: 687b ldr r3, [r7, #4]
  35553. 800f432: 681b ldr r3, [r3, #0]
  35554. 800f434: f022 0201 bic.w r2, r2, #1
  35555. 800f438: 601a str r2, [r3, #0]
  35556. /* Update RX threshold configuration */
  35557. MODIFY_REG(huart->Instance->CR3, USART_CR3_RXFTCFG, Threshold);
  35558. 800f43a: 687b ldr r3, [r7, #4]
  35559. 800f43c: 681b ldr r3, [r3, #0]
  35560. 800f43e: 689b ldr r3, [r3, #8]
  35561. 800f440: f023 6160 bic.w r1, r3, #234881024 @ 0xe000000
  35562. 800f444: 687b ldr r3, [r7, #4]
  35563. 800f446: 681b ldr r3, [r3, #0]
  35564. 800f448: 683a ldr r2, [r7, #0]
  35565. 800f44a: 430a orrs r2, r1
  35566. 800f44c: 609a str r2, [r3, #8]
  35567. /* Determine the number of data to process during RX/TX ISR execution */
  35568. UARTEx_SetNbDataToProcess(huart);
  35569. 800f44e: 6878 ldr r0, [r7, #4]
  35570. 800f450: f000 f862 bl 800f518 <UARTEx_SetNbDataToProcess>
  35571. /* Restore UART configuration */
  35572. WRITE_REG(huart->Instance->CR1, tmpcr1);
  35573. 800f454: 687b ldr r3, [r7, #4]
  35574. 800f456: 681b ldr r3, [r3, #0]
  35575. 800f458: 68fa ldr r2, [r7, #12]
  35576. 800f45a: 601a str r2, [r3, #0]
  35577. huart->gState = HAL_UART_STATE_READY;
  35578. 800f45c: 687b ldr r3, [r7, #4]
  35579. 800f45e: 2220 movs r2, #32
  35580. 800f460: f8c3 2088 str.w r2, [r3, #136] @ 0x88
  35581. /* Process Unlocked */
  35582. __HAL_UNLOCK(huart);
  35583. 800f464: 687b ldr r3, [r7, #4]
  35584. 800f466: 2200 movs r2, #0
  35585. 800f468: f883 2084 strb.w r2, [r3, #132] @ 0x84
  35586. return HAL_OK;
  35587. 800f46c: 2300 movs r3, #0
  35588. }
  35589. 800f46e: 4618 mov r0, r3
  35590. 800f470: 3710 adds r7, #16
  35591. 800f472: 46bd mov sp, r7
  35592. 800f474: bd80 pop {r7, pc}
  35593. 0800f476 <HAL_UARTEx_ReceiveToIdle_IT>:
  35594. * @param pData Pointer to data buffer (uint8_t or uint16_t data elements).
  35595. * @param Size Amount of data elements (uint8_t or uint16_t) to be received.
  35596. * @retval HAL status
  35597. */
  35598. HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
  35599. {
  35600. 800f476: b580 push {r7, lr}
  35601. 800f478: b08c sub sp, #48 @ 0x30
  35602. 800f47a: af00 add r7, sp, #0
  35603. 800f47c: 60f8 str r0, [r7, #12]
  35604. 800f47e: 60b9 str r1, [r7, #8]
  35605. 800f480: 4613 mov r3, r2
  35606. 800f482: 80fb strh r3, [r7, #6]
  35607. HAL_StatusTypeDef status = HAL_OK;
  35608. 800f484: 2300 movs r3, #0
  35609. 800f486: f887 302f strb.w r3, [r7, #47] @ 0x2f
  35610. /* Check that a Rx process is not already ongoing */
  35611. if (huart->RxState == HAL_UART_STATE_READY)
  35612. 800f48a: 68fb ldr r3, [r7, #12]
  35613. 800f48c: f8d3 308c ldr.w r3, [r3, #140] @ 0x8c
  35614. 800f490: 2b20 cmp r3, #32
  35615. 800f492: d13b bne.n 800f50c <HAL_UARTEx_ReceiveToIdle_IT+0x96>
  35616. {
  35617. if ((pData == NULL) || (Size == 0U))
  35618. 800f494: 68bb ldr r3, [r7, #8]
  35619. 800f496: 2b00 cmp r3, #0
  35620. 800f498: d002 beq.n 800f4a0 <HAL_UARTEx_ReceiveToIdle_IT+0x2a>
  35621. 800f49a: 88fb ldrh r3, [r7, #6]
  35622. 800f49c: 2b00 cmp r3, #0
  35623. 800f49e: d101 bne.n 800f4a4 <HAL_UARTEx_ReceiveToIdle_IT+0x2e>
  35624. {
  35625. return HAL_ERROR;
  35626. 800f4a0: 2301 movs r3, #1
  35627. 800f4a2: e034 b.n 800f50e <HAL_UARTEx_ReceiveToIdle_IT+0x98>
  35628. }
  35629. /* Set Reception type to reception till IDLE Event*/
  35630. huart->ReceptionType = HAL_UART_RECEPTION_TOIDLE;
  35631. 800f4a4: 68fb ldr r3, [r7, #12]
  35632. 800f4a6: 2201 movs r2, #1
  35633. 800f4a8: 66da str r2, [r3, #108] @ 0x6c
  35634. huart->RxEventType = HAL_UART_RXEVENT_TC;
  35635. 800f4aa: 68fb ldr r3, [r7, #12]
  35636. 800f4ac: 2200 movs r2, #0
  35637. 800f4ae: 671a str r2, [r3, #112] @ 0x70
  35638. (void)UART_Start_Receive_IT(huart, pData, Size);
  35639. 800f4b0: 88fb ldrh r3, [r7, #6]
  35640. 800f4b2: 461a mov r2, r3
  35641. 800f4b4: 68b9 ldr r1, [r7, #8]
  35642. 800f4b6: 68f8 ldr r0, [r7, #12]
  35643. 800f4b8: f7fe fe82 bl 800e1c0 <UART_Start_Receive_IT>
  35644. if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
  35645. 800f4bc: 68fb ldr r3, [r7, #12]
  35646. 800f4be: 6edb ldr r3, [r3, #108] @ 0x6c
  35647. 800f4c0: 2b01 cmp r3, #1
  35648. 800f4c2: d11d bne.n 800f500 <HAL_UARTEx_ReceiveToIdle_IT+0x8a>
  35649. {
  35650. __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_IDLEF);
  35651. 800f4c4: 68fb ldr r3, [r7, #12]
  35652. 800f4c6: 681b ldr r3, [r3, #0]
  35653. 800f4c8: 2210 movs r2, #16
  35654. 800f4ca: 621a str r2, [r3, #32]
  35655. ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
  35656. 800f4cc: 68fb ldr r3, [r7, #12]
  35657. 800f4ce: 681b ldr r3, [r3, #0]
  35658. 800f4d0: 61bb str r3, [r7, #24]
  35659. __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
  35660. 800f4d2: 69bb ldr r3, [r7, #24]
  35661. 800f4d4: e853 3f00 ldrex r3, [r3]
  35662. 800f4d8: 617b str r3, [r7, #20]
  35663. return(result);
  35664. 800f4da: 697b ldr r3, [r7, #20]
  35665. 800f4dc: f043 0310 orr.w r3, r3, #16
  35666. 800f4e0: 62bb str r3, [r7, #40] @ 0x28
  35667. 800f4e2: 68fb ldr r3, [r7, #12]
  35668. 800f4e4: 681b ldr r3, [r3, #0]
  35669. 800f4e6: 461a mov r2, r3
  35670. 800f4e8: 6abb ldr r3, [r7, #40] @ 0x28
  35671. 800f4ea: 627b str r3, [r7, #36] @ 0x24
  35672. 800f4ec: 623a str r2, [r7, #32]
  35673. __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
  35674. 800f4ee: 6a39 ldr r1, [r7, #32]
  35675. 800f4f0: 6a7a ldr r2, [r7, #36] @ 0x24
  35676. 800f4f2: e841 2300 strex r3, r2, [r1]
  35677. 800f4f6: 61fb str r3, [r7, #28]
  35678. return(result);
  35679. 800f4f8: 69fb ldr r3, [r7, #28]
  35680. 800f4fa: 2b00 cmp r3, #0
  35681. 800f4fc: d1e6 bne.n 800f4cc <HAL_UARTEx_ReceiveToIdle_IT+0x56>
  35682. 800f4fe: e002 b.n 800f506 <HAL_UARTEx_ReceiveToIdle_IT+0x90>
  35683. {
  35684. /* In case of errors already pending when reception is started,
  35685. Interrupts may have already been raised and lead to reception abortion.
  35686. (Overrun error for instance).
  35687. In such case Reception Type has been reset to HAL_UART_RECEPTION_STANDARD. */
  35688. status = HAL_ERROR;
  35689. 800f500: 2301 movs r3, #1
  35690. 800f502: f887 302f strb.w r3, [r7, #47] @ 0x2f
  35691. }
  35692. return status;
  35693. 800f506: f897 302f ldrb.w r3, [r7, #47] @ 0x2f
  35694. 800f50a: e000 b.n 800f50e <HAL_UARTEx_ReceiveToIdle_IT+0x98>
  35695. }
  35696. else
  35697. {
  35698. return HAL_BUSY;
  35699. 800f50c: 2302 movs r3, #2
  35700. }
  35701. }
  35702. 800f50e: 4618 mov r0, r3
  35703. 800f510: 3730 adds r7, #48 @ 0x30
  35704. 800f512: 46bd mov sp, r7
  35705. 800f514: bd80 pop {r7, pc}
  35706. ...
  35707. 0800f518 <UARTEx_SetNbDataToProcess>:
  35708. * the UART configuration registers.
  35709. * @param huart UART handle.
  35710. * @retval None
  35711. */
  35712. static void UARTEx_SetNbDataToProcess(UART_HandleTypeDef *huart)
  35713. {
  35714. 800f518: b480 push {r7}
  35715. 800f51a: b085 sub sp, #20
  35716. 800f51c: af00 add r7, sp, #0
  35717. 800f51e: 6078 str r0, [r7, #4]
  35718. uint8_t rx_fifo_threshold;
  35719. uint8_t tx_fifo_threshold;
  35720. static const uint8_t numerator[] = {1U, 1U, 1U, 3U, 7U, 1U, 0U, 0U};
  35721. static const uint8_t denominator[] = {8U, 4U, 2U, 4U, 8U, 1U, 1U, 1U};
  35722. if (huart->FifoMode == UART_FIFOMODE_DISABLE)
  35723. 800f520: 687b ldr r3, [r7, #4]
  35724. 800f522: 6e5b ldr r3, [r3, #100] @ 0x64
  35725. 800f524: 2b00 cmp r3, #0
  35726. 800f526: d108 bne.n 800f53a <UARTEx_SetNbDataToProcess+0x22>
  35727. {
  35728. huart->NbTxDataToProcess = 1U;
  35729. 800f528: 687b ldr r3, [r7, #4]
  35730. 800f52a: 2201 movs r2, #1
  35731. 800f52c: f8a3 206a strh.w r2, [r3, #106] @ 0x6a
  35732. huart->NbRxDataToProcess = 1U;
  35733. 800f530: 687b ldr r3, [r7, #4]
  35734. 800f532: 2201 movs r2, #1
  35735. 800f534: f8a3 2068 strh.w r2, [r3, #104] @ 0x68
  35736. huart->NbTxDataToProcess = ((uint16_t)tx_fifo_depth * numerator[tx_fifo_threshold]) /
  35737. (uint16_t)denominator[tx_fifo_threshold];
  35738. huart->NbRxDataToProcess = ((uint16_t)rx_fifo_depth * numerator[rx_fifo_threshold]) /
  35739. (uint16_t)denominator[rx_fifo_threshold];
  35740. }
  35741. }
  35742. 800f538: e031 b.n 800f59e <UARTEx_SetNbDataToProcess+0x86>
  35743. rx_fifo_depth = RX_FIFO_DEPTH;
  35744. 800f53a: 2310 movs r3, #16
  35745. 800f53c: 73fb strb r3, [r7, #15]
  35746. tx_fifo_depth = TX_FIFO_DEPTH;
  35747. 800f53e: 2310 movs r3, #16
  35748. 800f540: 73bb strb r3, [r7, #14]
  35749. rx_fifo_threshold = (uint8_t)(READ_BIT(huart->Instance->CR3, USART_CR3_RXFTCFG) >> USART_CR3_RXFTCFG_Pos);
  35750. 800f542: 687b ldr r3, [r7, #4]
  35751. 800f544: 681b ldr r3, [r3, #0]
  35752. 800f546: 689b ldr r3, [r3, #8]
  35753. 800f548: 0e5b lsrs r3, r3, #25
  35754. 800f54a: b2db uxtb r3, r3
  35755. 800f54c: f003 0307 and.w r3, r3, #7
  35756. 800f550: 737b strb r3, [r7, #13]
  35757. tx_fifo_threshold = (uint8_t)(READ_BIT(huart->Instance->CR3, USART_CR3_TXFTCFG) >> USART_CR3_TXFTCFG_Pos);
  35758. 800f552: 687b ldr r3, [r7, #4]
  35759. 800f554: 681b ldr r3, [r3, #0]
  35760. 800f556: 689b ldr r3, [r3, #8]
  35761. 800f558: 0f5b lsrs r3, r3, #29
  35762. 800f55a: b2db uxtb r3, r3
  35763. 800f55c: f003 0307 and.w r3, r3, #7
  35764. 800f560: 733b strb r3, [r7, #12]
  35765. huart->NbTxDataToProcess = ((uint16_t)tx_fifo_depth * numerator[tx_fifo_threshold]) /
  35766. 800f562: 7bbb ldrb r3, [r7, #14]
  35767. 800f564: 7b3a ldrb r2, [r7, #12]
  35768. 800f566: 4911 ldr r1, [pc, #68] @ (800f5ac <UARTEx_SetNbDataToProcess+0x94>)
  35769. 800f568: 5c8a ldrb r2, [r1, r2]
  35770. 800f56a: fb02 f303 mul.w r3, r2, r3
  35771. (uint16_t)denominator[tx_fifo_threshold];
  35772. 800f56e: 7b3a ldrb r2, [r7, #12]
  35773. 800f570: 490f ldr r1, [pc, #60] @ (800f5b0 <UARTEx_SetNbDataToProcess+0x98>)
  35774. 800f572: 5c8a ldrb r2, [r1, r2]
  35775. huart->NbTxDataToProcess = ((uint16_t)tx_fifo_depth * numerator[tx_fifo_threshold]) /
  35776. 800f574: fb93 f3f2 sdiv r3, r3, r2
  35777. 800f578: b29a uxth r2, r3
  35778. 800f57a: 687b ldr r3, [r7, #4]
  35779. 800f57c: f8a3 206a strh.w r2, [r3, #106] @ 0x6a
  35780. huart->NbRxDataToProcess = ((uint16_t)rx_fifo_depth * numerator[rx_fifo_threshold]) /
  35781. 800f580: 7bfb ldrb r3, [r7, #15]
  35782. 800f582: 7b7a ldrb r2, [r7, #13]
  35783. 800f584: 4909 ldr r1, [pc, #36] @ (800f5ac <UARTEx_SetNbDataToProcess+0x94>)
  35784. 800f586: 5c8a ldrb r2, [r1, r2]
  35785. 800f588: fb02 f303 mul.w r3, r2, r3
  35786. (uint16_t)denominator[rx_fifo_threshold];
  35787. 800f58c: 7b7a ldrb r2, [r7, #13]
  35788. 800f58e: 4908 ldr r1, [pc, #32] @ (800f5b0 <UARTEx_SetNbDataToProcess+0x98>)
  35789. 800f590: 5c8a ldrb r2, [r1, r2]
  35790. huart->NbRxDataToProcess = ((uint16_t)rx_fifo_depth * numerator[rx_fifo_threshold]) /
  35791. 800f592: fb93 f3f2 sdiv r3, r3, r2
  35792. 800f596: b29a uxth r2, r3
  35793. 800f598: 687b ldr r3, [r7, #4]
  35794. 800f59a: f8a3 2068 strh.w r2, [r3, #104] @ 0x68
  35795. }
  35796. 800f59e: bf00 nop
  35797. 800f5a0: 3714 adds r7, #20
  35798. 800f5a2: 46bd mov sp, r7
  35799. 800f5a4: f85d 7b04 ldr.w r7, [sp], #4
  35800. 800f5a8: 4770 bx lr
  35801. 800f5aa: bf00 nop
  35802. 800f5ac: 08014614 .word 0x08014614
  35803. 800f5b0: 0801461c .word 0x0801461c
  35804. 0800f5b4 <__NVIC_SetPriority>:
  35805. {
  35806. 800f5b4: b480 push {r7}
  35807. 800f5b6: b083 sub sp, #12
  35808. 800f5b8: af00 add r7, sp, #0
  35809. 800f5ba: 4603 mov r3, r0
  35810. 800f5bc: 6039 str r1, [r7, #0]
  35811. 800f5be: 80fb strh r3, [r7, #6]
  35812. if ((int32_t)(IRQn) >= 0)
  35813. 800f5c0: f9b7 3006 ldrsh.w r3, [r7, #6]
  35814. 800f5c4: 2b00 cmp r3, #0
  35815. 800f5c6: db0a blt.n 800f5de <__NVIC_SetPriority+0x2a>
  35816. NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
  35817. 800f5c8: 683b ldr r3, [r7, #0]
  35818. 800f5ca: b2da uxtb r2, r3
  35819. 800f5cc: 490c ldr r1, [pc, #48] @ (800f600 <__NVIC_SetPriority+0x4c>)
  35820. 800f5ce: f9b7 3006 ldrsh.w r3, [r7, #6]
  35821. 800f5d2: 0112 lsls r2, r2, #4
  35822. 800f5d4: b2d2 uxtb r2, r2
  35823. 800f5d6: 440b add r3, r1
  35824. 800f5d8: f883 2300 strb.w r2, [r3, #768] @ 0x300
  35825. }
  35826. 800f5dc: e00a b.n 800f5f4 <__NVIC_SetPriority+0x40>
  35827. SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
  35828. 800f5de: 683b ldr r3, [r7, #0]
  35829. 800f5e0: b2da uxtb r2, r3
  35830. 800f5e2: 4908 ldr r1, [pc, #32] @ (800f604 <__NVIC_SetPriority+0x50>)
  35831. 800f5e4: 88fb ldrh r3, [r7, #6]
  35832. 800f5e6: f003 030f and.w r3, r3, #15
  35833. 800f5ea: 3b04 subs r3, #4
  35834. 800f5ec: 0112 lsls r2, r2, #4
  35835. 800f5ee: b2d2 uxtb r2, r2
  35836. 800f5f0: 440b add r3, r1
  35837. 800f5f2: 761a strb r2, [r3, #24]
  35838. }
  35839. 800f5f4: bf00 nop
  35840. 800f5f6: 370c adds r7, #12
  35841. 800f5f8: 46bd mov sp, r7
  35842. 800f5fa: f85d 7b04 ldr.w r7, [sp], #4
  35843. 800f5fe: 4770 bx lr
  35844. 800f600: e000e100 .word 0xe000e100
  35845. 800f604: e000ed00 .word 0xe000ed00
  35846. 0800f608 <SysTick_Handler>:
  35847. /*
  35848. SysTick handler implementation that also clears overflow flag.
  35849. */
  35850. #if (USE_CUSTOM_SYSTICK_HANDLER_IMPLEMENTATION == 0)
  35851. void SysTick_Handler (void) {
  35852. 800f608: b580 push {r7, lr}
  35853. 800f60a: af00 add r7, sp, #0
  35854. /* Clear overflow flag */
  35855. SysTick->CTRL;
  35856. 800f60c: 4b05 ldr r3, [pc, #20] @ (800f624 <SysTick_Handler+0x1c>)
  35857. 800f60e: 681b ldr r3, [r3, #0]
  35858. if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED) {
  35859. 800f610: f002 fc28 bl 8011e64 <xTaskGetSchedulerState>
  35860. 800f614: 4603 mov r3, r0
  35861. 800f616: 2b01 cmp r3, #1
  35862. 800f618: d001 beq.n 800f61e <SysTick_Handler+0x16>
  35863. /* Call tick handler */
  35864. xPortSysTickHandler();
  35865. 800f61a: f003 fd4d bl 80130b8 <xPortSysTickHandler>
  35866. }
  35867. }
  35868. 800f61e: bf00 nop
  35869. 800f620: bd80 pop {r7, pc}
  35870. 800f622: bf00 nop
  35871. 800f624: e000e010 .word 0xe000e010
  35872. 0800f628 <SVC_Setup>:
  35873. #endif /* SysTick */
  35874. /*
  35875. Setup SVC to reset value.
  35876. */
  35877. __STATIC_INLINE void SVC_Setup (void) {
  35878. 800f628: b580 push {r7, lr}
  35879. 800f62a: af00 add r7, sp, #0
  35880. #if (__ARM_ARCH_7A__ == 0U)
  35881. /* Service Call interrupt might be configured before kernel start */
  35882. /* and when its priority is lower or equal to BASEPRI, svc intruction */
  35883. /* causes a Hard Fault. */
  35884. NVIC_SetPriority (SVCall_IRQ_NBR, 0U);
  35885. 800f62c: 2100 movs r1, #0
  35886. 800f62e: f06f 0004 mvn.w r0, #4
  35887. 800f632: f7ff ffbf bl 800f5b4 <__NVIC_SetPriority>
  35888. #endif
  35889. }
  35890. 800f636: bf00 nop
  35891. 800f638: bd80 pop {r7, pc}
  35892. ...
  35893. 0800f63c <osKernelInitialize>:
  35894. static uint32_t OS_Tick_GetOverflow (void);
  35895. /* Get OS Tick interval */
  35896. static uint32_t OS_Tick_GetInterval (void);
  35897. /*---------------------------------------------------------------------------*/
  35898. osStatus_t osKernelInitialize (void) {
  35899. 800f63c: b480 push {r7}
  35900. 800f63e: b083 sub sp, #12
  35901. 800f640: af00 add r7, sp, #0
  35902. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  35903. 800f642: f3ef 8305 mrs r3, IPSR
  35904. 800f646: 603b str r3, [r7, #0]
  35905. return(result);
  35906. 800f648: 683b ldr r3, [r7, #0]
  35907. osStatus_t stat;
  35908. if (IS_IRQ()) {
  35909. 800f64a: 2b00 cmp r3, #0
  35910. 800f64c: d003 beq.n 800f656 <osKernelInitialize+0x1a>
  35911. stat = osErrorISR;
  35912. 800f64e: f06f 0305 mvn.w r3, #5
  35913. 800f652: 607b str r3, [r7, #4]
  35914. 800f654: e00c b.n 800f670 <osKernelInitialize+0x34>
  35915. }
  35916. else {
  35917. if (KernelState == osKernelInactive) {
  35918. 800f656: 4b0a ldr r3, [pc, #40] @ (800f680 <osKernelInitialize+0x44>)
  35919. 800f658: 681b ldr r3, [r3, #0]
  35920. 800f65a: 2b00 cmp r3, #0
  35921. 800f65c: d105 bne.n 800f66a <osKernelInitialize+0x2e>
  35922. EvrFreeRTOSSetup(0U);
  35923. #endif
  35924. #if defined(USE_FreeRTOS_HEAP_5) && (HEAP_5_REGION_SETUP == 1)
  35925. vPortDefineHeapRegions (configHEAP_5_REGIONS);
  35926. #endif
  35927. KernelState = osKernelReady;
  35928. 800f65e: 4b08 ldr r3, [pc, #32] @ (800f680 <osKernelInitialize+0x44>)
  35929. 800f660: 2201 movs r2, #1
  35930. 800f662: 601a str r2, [r3, #0]
  35931. stat = osOK;
  35932. 800f664: 2300 movs r3, #0
  35933. 800f666: 607b str r3, [r7, #4]
  35934. 800f668: e002 b.n 800f670 <osKernelInitialize+0x34>
  35935. } else {
  35936. stat = osError;
  35937. 800f66a: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  35938. 800f66e: 607b str r3, [r7, #4]
  35939. }
  35940. }
  35941. return (stat);
  35942. 800f670: 687b ldr r3, [r7, #4]
  35943. }
  35944. 800f672: 4618 mov r0, r3
  35945. 800f674: 370c adds r7, #12
  35946. 800f676: 46bd mov sp, r7
  35947. 800f678: f85d 7b04 ldr.w r7, [sp], #4
  35948. 800f67c: 4770 bx lr
  35949. 800f67e: bf00 nop
  35950. 800f680: 24000a60 .word 0x24000a60
  35951. 0800f684 <osKernelStart>:
  35952. }
  35953. return (state);
  35954. }
  35955. osStatus_t osKernelStart (void) {
  35956. 800f684: b580 push {r7, lr}
  35957. 800f686: b082 sub sp, #8
  35958. 800f688: af00 add r7, sp, #0
  35959. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  35960. 800f68a: f3ef 8305 mrs r3, IPSR
  35961. 800f68e: 603b str r3, [r7, #0]
  35962. return(result);
  35963. 800f690: 683b ldr r3, [r7, #0]
  35964. osStatus_t stat;
  35965. if (IS_IRQ()) {
  35966. 800f692: 2b00 cmp r3, #0
  35967. 800f694: d003 beq.n 800f69e <osKernelStart+0x1a>
  35968. stat = osErrorISR;
  35969. 800f696: f06f 0305 mvn.w r3, #5
  35970. 800f69a: 607b str r3, [r7, #4]
  35971. 800f69c: e010 b.n 800f6c0 <osKernelStart+0x3c>
  35972. }
  35973. else {
  35974. if (KernelState == osKernelReady) {
  35975. 800f69e: 4b0b ldr r3, [pc, #44] @ (800f6cc <osKernelStart+0x48>)
  35976. 800f6a0: 681b ldr r3, [r3, #0]
  35977. 800f6a2: 2b01 cmp r3, #1
  35978. 800f6a4: d109 bne.n 800f6ba <osKernelStart+0x36>
  35979. /* Ensure SVC priority is at the reset value */
  35980. SVC_Setup();
  35981. 800f6a6: f7ff ffbf bl 800f628 <SVC_Setup>
  35982. /* Change state to enable IRQ masking check */
  35983. KernelState = osKernelRunning;
  35984. 800f6aa: 4b08 ldr r3, [pc, #32] @ (800f6cc <osKernelStart+0x48>)
  35985. 800f6ac: 2202 movs r2, #2
  35986. 800f6ae: 601a str r2, [r3, #0]
  35987. /* Start the kernel scheduler */
  35988. vTaskStartScheduler();
  35989. 800f6b0: f001 ff2e bl 8011510 <vTaskStartScheduler>
  35990. stat = osOK;
  35991. 800f6b4: 2300 movs r3, #0
  35992. 800f6b6: 607b str r3, [r7, #4]
  35993. 800f6b8: e002 b.n 800f6c0 <osKernelStart+0x3c>
  35994. } else {
  35995. stat = osError;
  35996. 800f6ba: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  35997. 800f6be: 607b str r3, [r7, #4]
  35998. }
  35999. }
  36000. return (stat);
  36001. 800f6c0: 687b ldr r3, [r7, #4]
  36002. }
  36003. 800f6c2: 4618 mov r0, r3
  36004. 800f6c4: 3708 adds r7, #8
  36005. 800f6c6: 46bd mov sp, r7
  36006. 800f6c8: bd80 pop {r7, pc}
  36007. 800f6ca: bf00 nop
  36008. 800f6cc: 24000a60 .word 0x24000a60
  36009. 0800f6d0 <osThreadNew>:
  36010. return (configCPU_CLOCK_HZ);
  36011. }
  36012. /*---------------------------------------------------------------------------*/
  36013. osThreadId_t osThreadNew (osThreadFunc_t func, void *argument, const osThreadAttr_t *attr) {
  36014. 800f6d0: b580 push {r7, lr}
  36015. 800f6d2: b08e sub sp, #56 @ 0x38
  36016. 800f6d4: af04 add r7, sp, #16
  36017. 800f6d6: 60f8 str r0, [r7, #12]
  36018. 800f6d8: 60b9 str r1, [r7, #8]
  36019. 800f6da: 607a str r2, [r7, #4]
  36020. uint32_t stack;
  36021. TaskHandle_t hTask;
  36022. UBaseType_t prio;
  36023. int32_t mem;
  36024. hTask = NULL;
  36025. 800f6dc: 2300 movs r3, #0
  36026. 800f6de: 613b str r3, [r7, #16]
  36027. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  36028. 800f6e0: f3ef 8305 mrs r3, IPSR
  36029. 800f6e4: 617b str r3, [r7, #20]
  36030. return(result);
  36031. 800f6e6: 697b ldr r3, [r7, #20]
  36032. if (!IS_IRQ() && (func != NULL)) {
  36033. 800f6e8: 2b00 cmp r3, #0
  36034. 800f6ea: d17f bne.n 800f7ec <osThreadNew+0x11c>
  36035. 800f6ec: 68fb ldr r3, [r7, #12]
  36036. 800f6ee: 2b00 cmp r3, #0
  36037. 800f6f0: d07c beq.n 800f7ec <osThreadNew+0x11c>
  36038. stack = configMINIMAL_STACK_SIZE;
  36039. 800f6f2: f44f 7300 mov.w r3, #512 @ 0x200
  36040. 800f6f6: 623b str r3, [r7, #32]
  36041. prio = (UBaseType_t)osPriorityNormal;
  36042. 800f6f8: 2318 movs r3, #24
  36043. 800f6fa: 61fb str r3, [r7, #28]
  36044. name = NULL;
  36045. 800f6fc: 2300 movs r3, #0
  36046. 800f6fe: 627b str r3, [r7, #36] @ 0x24
  36047. mem = -1;
  36048. 800f700: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  36049. 800f704: 61bb str r3, [r7, #24]
  36050. if (attr != NULL) {
  36051. 800f706: 687b ldr r3, [r7, #4]
  36052. 800f708: 2b00 cmp r3, #0
  36053. 800f70a: d045 beq.n 800f798 <osThreadNew+0xc8>
  36054. if (attr->name != NULL) {
  36055. 800f70c: 687b ldr r3, [r7, #4]
  36056. 800f70e: 681b ldr r3, [r3, #0]
  36057. 800f710: 2b00 cmp r3, #0
  36058. 800f712: d002 beq.n 800f71a <osThreadNew+0x4a>
  36059. name = attr->name;
  36060. 800f714: 687b ldr r3, [r7, #4]
  36061. 800f716: 681b ldr r3, [r3, #0]
  36062. 800f718: 627b str r3, [r7, #36] @ 0x24
  36063. }
  36064. if (attr->priority != osPriorityNone) {
  36065. 800f71a: 687b ldr r3, [r7, #4]
  36066. 800f71c: 699b ldr r3, [r3, #24]
  36067. 800f71e: 2b00 cmp r3, #0
  36068. 800f720: d002 beq.n 800f728 <osThreadNew+0x58>
  36069. prio = (UBaseType_t)attr->priority;
  36070. 800f722: 687b ldr r3, [r7, #4]
  36071. 800f724: 699b ldr r3, [r3, #24]
  36072. 800f726: 61fb str r3, [r7, #28]
  36073. }
  36074. if ((prio < osPriorityIdle) || (prio > osPriorityISR) || ((attr->attr_bits & osThreadJoinable) == osThreadJoinable)) {
  36075. 800f728: 69fb ldr r3, [r7, #28]
  36076. 800f72a: 2b00 cmp r3, #0
  36077. 800f72c: d008 beq.n 800f740 <osThreadNew+0x70>
  36078. 800f72e: 69fb ldr r3, [r7, #28]
  36079. 800f730: 2b38 cmp r3, #56 @ 0x38
  36080. 800f732: d805 bhi.n 800f740 <osThreadNew+0x70>
  36081. 800f734: 687b ldr r3, [r7, #4]
  36082. 800f736: 685b ldr r3, [r3, #4]
  36083. 800f738: f003 0301 and.w r3, r3, #1
  36084. 800f73c: 2b00 cmp r3, #0
  36085. 800f73e: d001 beq.n 800f744 <osThreadNew+0x74>
  36086. return (NULL);
  36087. 800f740: 2300 movs r3, #0
  36088. 800f742: e054 b.n 800f7ee <osThreadNew+0x11e>
  36089. }
  36090. if (attr->stack_size > 0U) {
  36091. 800f744: 687b ldr r3, [r7, #4]
  36092. 800f746: 695b ldr r3, [r3, #20]
  36093. 800f748: 2b00 cmp r3, #0
  36094. 800f74a: d003 beq.n 800f754 <osThreadNew+0x84>
  36095. /* In FreeRTOS stack is not in bytes, but in sizeof(StackType_t) which is 4 on ARM ports. */
  36096. /* Stack size should be therefore 4 byte aligned in order to avoid division caused side effects */
  36097. stack = attr->stack_size / sizeof(StackType_t);
  36098. 800f74c: 687b ldr r3, [r7, #4]
  36099. 800f74e: 695b ldr r3, [r3, #20]
  36100. 800f750: 089b lsrs r3, r3, #2
  36101. 800f752: 623b str r3, [r7, #32]
  36102. }
  36103. if ((attr->cb_mem != NULL) && (attr->cb_size >= sizeof(StaticTask_t)) &&
  36104. 800f754: 687b ldr r3, [r7, #4]
  36105. 800f756: 689b ldr r3, [r3, #8]
  36106. 800f758: 2b00 cmp r3, #0
  36107. 800f75a: d00e beq.n 800f77a <osThreadNew+0xaa>
  36108. 800f75c: 687b ldr r3, [r7, #4]
  36109. 800f75e: 68db ldr r3, [r3, #12]
  36110. 800f760: 2ba7 cmp r3, #167 @ 0xa7
  36111. 800f762: d90a bls.n 800f77a <osThreadNew+0xaa>
  36112. (attr->stack_mem != NULL) && (attr->stack_size > 0U)) {
  36113. 800f764: 687b ldr r3, [r7, #4]
  36114. 800f766: 691b ldr r3, [r3, #16]
  36115. if ((attr->cb_mem != NULL) && (attr->cb_size >= sizeof(StaticTask_t)) &&
  36116. 800f768: 2b00 cmp r3, #0
  36117. 800f76a: d006 beq.n 800f77a <osThreadNew+0xaa>
  36118. (attr->stack_mem != NULL) && (attr->stack_size > 0U)) {
  36119. 800f76c: 687b ldr r3, [r7, #4]
  36120. 800f76e: 695b ldr r3, [r3, #20]
  36121. 800f770: 2b00 cmp r3, #0
  36122. 800f772: d002 beq.n 800f77a <osThreadNew+0xaa>
  36123. mem = 1;
  36124. 800f774: 2301 movs r3, #1
  36125. 800f776: 61bb str r3, [r7, #24]
  36126. 800f778: e010 b.n 800f79c <osThreadNew+0xcc>
  36127. }
  36128. else {
  36129. if ((attr->cb_mem == NULL) && (attr->cb_size == 0U) && (attr->stack_mem == NULL)) {
  36130. 800f77a: 687b ldr r3, [r7, #4]
  36131. 800f77c: 689b ldr r3, [r3, #8]
  36132. 800f77e: 2b00 cmp r3, #0
  36133. 800f780: d10c bne.n 800f79c <osThreadNew+0xcc>
  36134. 800f782: 687b ldr r3, [r7, #4]
  36135. 800f784: 68db ldr r3, [r3, #12]
  36136. 800f786: 2b00 cmp r3, #0
  36137. 800f788: d108 bne.n 800f79c <osThreadNew+0xcc>
  36138. 800f78a: 687b ldr r3, [r7, #4]
  36139. 800f78c: 691b ldr r3, [r3, #16]
  36140. 800f78e: 2b00 cmp r3, #0
  36141. 800f790: d104 bne.n 800f79c <osThreadNew+0xcc>
  36142. mem = 0;
  36143. 800f792: 2300 movs r3, #0
  36144. 800f794: 61bb str r3, [r7, #24]
  36145. 800f796: e001 b.n 800f79c <osThreadNew+0xcc>
  36146. }
  36147. }
  36148. }
  36149. else {
  36150. mem = 0;
  36151. 800f798: 2300 movs r3, #0
  36152. 800f79a: 61bb str r3, [r7, #24]
  36153. }
  36154. if (mem == 1) {
  36155. 800f79c: 69bb ldr r3, [r7, #24]
  36156. 800f79e: 2b01 cmp r3, #1
  36157. 800f7a0: d110 bne.n 800f7c4 <osThreadNew+0xf4>
  36158. #if (configSUPPORT_STATIC_ALLOCATION == 1)
  36159. hTask = xTaskCreateStatic ((TaskFunction_t)func, name, stack, argument, prio, (StackType_t *)attr->stack_mem,
  36160. 800f7a2: 687b ldr r3, [r7, #4]
  36161. 800f7a4: 691b ldr r3, [r3, #16]
  36162. (StaticTask_t *)attr->cb_mem);
  36163. 800f7a6: 687a ldr r2, [r7, #4]
  36164. 800f7a8: 6892 ldr r2, [r2, #8]
  36165. hTask = xTaskCreateStatic ((TaskFunction_t)func, name, stack, argument, prio, (StackType_t *)attr->stack_mem,
  36166. 800f7aa: 9202 str r2, [sp, #8]
  36167. 800f7ac: 9301 str r3, [sp, #4]
  36168. 800f7ae: 69fb ldr r3, [r7, #28]
  36169. 800f7b0: 9300 str r3, [sp, #0]
  36170. 800f7b2: 68bb ldr r3, [r7, #8]
  36171. 800f7b4: 6a3a ldr r2, [r7, #32]
  36172. 800f7b6: 6a79 ldr r1, [r7, #36] @ 0x24
  36173. 800f7b8: 68f8 ldr r0, [r7, #12]
  36174. 800f7ba: f001 fcb6 bl 801112a <xTaskCreateStatic>
  36175. 800f7be: 4603 mov r3, r0
  36176. 800f7c0: 613b str r3, [r7, #16]
  36177. 800f7c2: e013 b.n 800f7ec <osThreadNew+0x11c>
  36178. #endif
  36179. }
  36180. else {
  36181. if (mem == 0) {
  36182. 800f7c4: 69bb ldr r3, [r7, #24]
  36183. 800f7c6: 2b00 cmp r3, #0
  36184. 800f7c8: d110 bne.n 800f7ec <osThreadNew+0x11c>
  36185. #if (configSUPPORT_DYNAMIC_ALLOCATION == 1)
  36186. if (xTaskCreate ((TaskFunction_t)func, name, (uint16_t)stack, argument, prio, &hTask) != pdPASS) {
  36187. 800f7ca: 6a3b ldr r3, [r7, #32]
  36188. 800f7cc: b29a uxth r2, r3
  36189. 800f7ce: f107 0310 add.w r3, r7, #16
  36190. 800f7d2: 9301 str r3, [sp, #4]
  36191. 800f7d4: 69fb ldr r3, [r7, #28]
  36192. 800f7d6: 9300 str r3, [sp, #0]
  36193. 800f7d8: 68bb ldr r3, [r7, #8]
  36194. 800f7da: 6a79 ldr r1, [r7, #36] @ 0x24
  36195. 800f7dc: 68f8 ldr r0, [r7, #12]
  36196. 800f7de: f001 fd04 bl 80111ea <xTaskCreate>
  36197. 800f7e2: 4603 mov r3, r0
  36198. 800f7e4: 2b01 cmp r3, #1
  36199. 800f7e6: d001 beq.n 800f7ec <osThreadNew+0x11c>
  36200. hTask = NULL;
  36201. 800f7e8: 2300 movs r3, #0
  36202. 800f7ea: 613b str r3, [r7, #16]
  36203. #endif
  36204. }
  36205. }
  36206. }
  36207. return ((osThreadId_t)hTask);
  36208. 800f7ec: 693b ldr r3, [r7, #16]
  36209. }
  36210. 800f7ee: 4618 mov r0, r3
  36211. 800f7f0: 3728 adds r7, #40 @ 0x28
  36212. 800f7f2: 46bd mov sp, r7
  36213. 800f7f4: bd80 pop {r7, pc}
  36214. 0800f7f6 <osDelay>:
  36215. /* Return flags before clearing */
  36216. return (rflags);
  36217. }
  36218. #endif /* (configUSE_OS2_THREAD_FLAGS == 1) */
  36219. osStatus_t osDelay (uint32_t ticks) {
  36220. 800f7f6: b580 push {r7, lr}
  36221. 800f7f8: b084 sub sp, #16
  36222. 800f7fa: af00 add r7, sp, #0
  36223. 800f7fc: 6078 str r0, [r7, #4]
  36224. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  36225. 800f7fe: f3ef 8305 mrs r3, IPSR
  36226. 800f802: 60bb str r3, [r7, #8]
  36227. return(result);
  36228. 800f804: 68bb ldr r3, [r7, #8]
  36229. osStatus_t stat;
  36230. if (IS_IRQ()) {
  36231. 800f806: 2b00 cmp r3, #0
  36232. 800f808: d003 beq.n 800f812 <osDelay+0x1c>
  36233. stat = osErrorISR;
  36234. 800f80a: f06f 0305 mvn.w r3, #5
  36235. 800f80e: 60fb str r3, [r7, #12]
  36236. 800f810: e007 b.n 800f822 <osDelay+0x2c>
  36237. }
  36238. else {
  36239. stat = osOK;
  36240. 800f812: 2300 movs r3, #0
  36241. 800f814: 60fb str r3, [r7, #12]
  36242. if (ticks != 0U) {
  36243. 800f816: 687b ldr r3, [r7, #4]
  36244. 800f818: 2b00 cmp r3, #0
  36245. 800f81a: d002 beq.n 800f822 <osDelay+0x2c>
  36246. vTaskDelay(ticks);
  36247. 800f81c: 6878 ldr r0, [r7, #4]
  36248. 800f81e: f001 fe41 bl 80114a4 <vTaskDelay>
  36249. }
  36250. }
  36251. return (stat);
  36252. 800f822: 68fb ldr r3, [r7, #12]
  36253. }
  36254. 800f824: 4618 mov r0, r3
  36255. 800f826: 3710 adds r7, #16
  36256. 800f828: 46bd mov sp, r7
  36257. 800f82a: bd80 pop {r7, pc}
  36258. 0800f82c <osMutexNew>:
  36259. }
  36260. /*---------------------------------------------------------------------------*/
  36261. #if (configUSE_OS2_MUTEX == 1)
  36262. osMutexId_t osMutexNew (const osMutexAttr_t *attr) {
  36263. 800f82c: b580 push {r7, lr}
  36264. 800f82e: b088 sub sp, #32
  36265. 800f830: af00 add r7, sp, #0
  36266. 800f832: 6078 str r0, [r7, #4]
  36267. int32_t mem;
  36268. #if (configQUEUE_REGISTRY_SIZE > 0)
  36269. const char *name;
  36270. #endif
  36271. hMutex = NULL;
  36272. 800f834: 2300 movs r3, #0
  36273. 800f836: 61fb str r3, [r7, #28]
  36274. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  36275. 800f838: f3ef 8305 mrs r3, IPSR
  36276. 800f83c: 60bb str r3, [r7, #8]
  36277. return(result);
  36278. 800f83e: 68bb ldr r3, [r7, #8]
  36279. if (!IS_IRQ()) {
  36280. 800f840: 2b00 cmp r3, #0
  36281. 800f842: d174 bne.n 800f92e <osMutexNew+0x102>
  36282. if (attr != NULL) {
  36283. 800f844: 687b ldr r3, [r7, #4]
  36284. 800f846: 2b00 cmp r3, #0
  36285. 800f848: d003 beq.n 800f852 <osMutexNew+0x26>
  36286. type = attr->attr_bits;
  36287. 800f84a: 687b ldr r3, [r7, #4]
  36288. 800f84c: 685b ldr r3, [r3, #4]
  36289. 800f84e: 61bb str r3, [r7, #24]
  36290. 800f850: e001 b.n 800f856 <osMutexNew+0x2a>
  36291. } else {
  36292. type = 0U;
  36293. 800f852: 2300 movs r3, #0
  36294. 800f854: 61bb str r3, [r7, #24]
  36295. }
  36296. if ((type & osMutexRecursive) == osMutexRecursive) {
  36297. 800f856: 69bb ldr r3, [r7, #24]
  36298. 800f858: f003 0301 and.w r3, r3, #1
  36299. 800f85c: 2b00 cmp r3, #0
  36300. 800f85e: d002 beq.n 800f866 <osMutexNew+0x3a>
  36301. rmtx = 1U;
  36302. 800f860: 2301 movs r3, #1
  36303. 800f862: 617b str r3, [r7, #20]
  36304. 800f864: e001 b.n 800f86a <osMutexNew+0x3e>
  36305. } else {
  36306. rmtx = 0U;
  36307. 800f866: 2300 movs r3, #0
  36308. 800f868: 617b str r3, [r7, #20]
  36309. }
  36310. if ((type & osMutexRobust) != osMutexRobust) {
  36311. 800f86a: 69bb ldr r3, [r7, #24]
  36312. 800f86c: f003 0308 and.w r3, r3, #8
  36313. 800f870: 2b00 cmp r3, #0
  36314. 800f872: d15c bne.n 800f92e <osMutexNew+0x102>
  36315. mem = -1;
  36316. 800f874: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  36317. 800f878: 613b str r3, [r7, #16]
  36318. if (attr != NULL) {
  36319. 800f87a: 687b ldr r3, [r7, #4]
  36320. 800f87c: 2b00 cmp r3, #0
  36321. 800f87e: d015 beq.n 800f8ac <osMutexNew+0x80>
  36322. if ((attr->cb_mem != NULL) && (attr->cb_size >= sizeof(StaticSemaphore_t))) {
  36323. 800f880: 687b ldr r3, [r7, #4]
  36324. 800f882: 689b ldr r3, [r3, #8]
  36325. 800f884: 2b00 cmp r3, #0
  36326. 800f886: d006 beq.n 800f896 <osMutexNew+0x6a>
  36327. 800f888: 687b ldr r3, [r7, #4]
  36328. 800f88a: 68db ldr r3, [r3, #12]
  36329. 800f88c: 2b4f cmp r3, #79 @ 0x4f
  36330. 800f88e: d902 bls.n 800f896 <osMutexNew+0x6a>
  36331. mem = 1;
  36332. 800f890: 2301 movs r3, #1
  36333. 800f892: 613b str r3, [r7, #16]
  36334. 800f894: e00c b.n 800f8b0 <osMutexNew+0x84>
  36335. }
  36336. else {
  36337. if ((attr->cb_mem == NULL) && (attr->cb_size == 0U)) {
  36338. 800f896: 687b ldr r3, [r7, #4]
  36339. 800f898: 689b ldr r3, [r3, #8]
  36340. 800f89a: 2b00 cmp r3, #0
  36341. 800f89c: d108 bne.n 800f8b0 <osMutexNew+0x84>
  36342. 800f89e: 687b ldr r3, [r7, #4]
  36343. 800f8a0: 68db ldr r3, [r3, #12]
  36344. 800f8a2: 2b00 cmp r3, #0
  36345. 800f8a4: d104 bne.n 800f8b0 <osMutexNew+0x84>
  36346. mem = 0;
  36347. 800f8a6: 2300 movs r3, #0
  36348. 800f8a8: 613b str r3, [r7, #16]
  36349. 800f8aa: e001 b.n 800f8b0 <osMutexNew+0x84>
  36350. }
  36351. }
  36352. }
  36353. else {
  36354. mem = 0;
  36355. 800f8ac: 2300 movs r3, #0
  36356. 800f8ae: 613b str r3, [r7, #16]
  36357. }
  36358. if (mem == 1) {
  36359. 800f8b0: 693b ldr r3, [r7, #16]
  36360. 800f8b2: 2b01 cmp r3, #1
  36361. 800f8b4: d112 bne.n 800f8dc <osMutexNew+0xb0>
  36362. #if (configSUPPORT_STATIC_ALLOCATION == 1)
  36363. if (rmtx != 0U) {
  36364. 800f8b6: 697b ldr r3, [r7, #20]
  36365. 800f8b8: 2b00 cmp r3, #0
  36366. 800f8ba: d007 beq.n 800f8cc <osMutexNew+0xa0>
  36367. #if (configUSE_RECURSIVE_MUTEXES == 1)
  36368. hMutex = xSemaphoreCreateRecursiveMutexStatic (attr->cb_mem);
  36369. 800f8bc: 687b ldr r3, [r7, #4]
  36370. 800f8be: 689b ldr r3, [r3, #8]
  36371. 800f8c0: 4619 mov r1, r3
  36372. 800f8c2: 2004 movs r0, #4
  36373. 800f8c4: f000 fc51 bl 801016a <xQueueCreateMutexStatic>
  36374. 800f8c8: 61f8 str r0, [r7, #28]
  36375. 800f8ca: e016 b.n 800f8fa <osMutexNew+0xce>
  36376. #endif
  36377. }
  36378. else {
  36379. hMutex = xSemaphoreCreateMutexStatic (attr->cb_mem);
  36380. 800f8cc: 687b ldr r3, [r7, #4]
  36381. 800f8ce: 689b ldr r3, [r3, #8]
  36382. 800f8d0: 4619 mov r1, r3
  36383. 800f8d2: 2001 movs r0, #1
  36384. 800f8d4: f000 fc49 bl 801016a <xQueueCreateMutexStatic>
  36385. 800f8d8: 61f8 str r0, [r7, #28]
  36386. 800f8da: e00e b.n 800f8fa <osMutexNew+0xce>
  36387. }
  36388. #endif
  36389. }
  36390. else {
  36391. if (mem == 0) {
  36392. 800f8dc: 693b ldr r3, [r7, #16]
  36393. 800f8de: 2b00 cmp r3, #0
  36394. 800f8e0: d10b bne.n 800f8fa <osMutexNew+0xce>
  36395. #if (configSUPPORT_DYNAMIC_ALLOCATION == 1)
  36396. if (rmtx != 0U) {
  36397. 800f8e2: 697b ldr r3, [r7, #20]
  36398. 800f8e4: 2b00 cmp r3, #0
  36399. 800f8e6: d004 beq.n 800f8f2 <osMutexNew+0xc6>
  36400. #if (configUSE_RECURSIVE_MUTEXES == 1)
  36401. hMutex = xSemaphoreCreateRecursiveMutex ();
  36402. 800f8e8: 2004 movs r0, #4
  36403. 800f8ea: f000 fc26 bl 801013a <xQueueCreateMutex>
  36404. 800f8ee: 61f8 str r0, [r7, #28]
  36405. 800f8f0: e003 b.n 800f8fa <osMutexNew+0xce>
  36406. #endif
  36407. } else {
  36408. hMutex = xSemaphoreCreateMutex ();
  36409. 800f8f2: 2001 movs r0, #1
  36410. 800f8f4: f000 fc21 bl 801013a <xQueueCreateMutex>
  36411. 800f8f8: 61f8 str r0, [r7, #28]
  36412. #endif
  36413. }
  36414. }
  36415. #if (configQUEUE_REGISTRY_SIZE > 0)
  36416. if (hMutex != NULL) {
  36417. 800f8fa: 69fb ldr r3, [r7, #28]
  36418. 800f8fc: 2b00 cmp r3, #0
  36419. 800f8fe: d00c beq.n 800f91a <osMutexNew+0xee>
  36420. if (attr != NULL) {
  36421. 800f900: 687b ldr r3, [r7, #4]
  36422. 800f902: 2b00 cmp r3, #0
  36423. 800f904: d003 beq.n 800f90e <osMutexNew+0xe2>
  36424. name = attr->name;
  36425. 800f906: 687b ldr r3, [r7, #4]
  36426. 800f908: 681b ldr r3, [r3, #0]
  36427. 800f90a: 60fb str r3, [r7, #12]
  36428. 800f90c: e001 b.n 800f912 <osMutexNew+0xe6>
  36429. } else {
  36430. name = NULL;
  36431. 800f90e: 2300 movs r3, #0
  36432. 800f910: 60fb str r3, [r7, #12]
  36433. }
  36434. vQueueAddToRegistry (hMutex, name);
  36435. 800f912: 68f9 ldr r1, [r7, #12]
  36436. 800f914: 69f8 ldr r0, [r7, #28]
  36437. 800f916: f001 f9eb bl 8010cf0 <vQueueAddToRegistry>
  36438. }
  36439. #endif
  36440. if ((hMutex != NULL) && (rmtx != 0U)) {
  36441. 800f91a: 69fb ldr r3, [r7, #28]
  36442. 800f91c: 2b00 cmp r3, #0
  36443. 800f91e: d006 beq.n 800f92e <osMutexNew+0x102>
  36444. 800f920: 697b ldr r3, [r7, #20]
  36445. 800f922: 2b00 cmp r3, #0
  36446. 800f924: d003 beq.n 800f92e <osMutexNew+0x102>
  36447. hMutex = (SemaphoreHandle_t)((uint32_t)hMutex | 1U);
  36448. 800f926: 69fb ldr r3, [r7, #28]
  36449. 800f928: f043 0301 orr.w r3, r3, #1
  36450. 800f92c: 61fb str r3, [r7, #28]
  36451. }
  36452. }
  36453. }
  36454. return ((osMutexId_t)hMutex);
  36455. 800f92e: 69fb ldr r3, [r7, #28]
  36456. }
  36457. 800f930: 4618 mov r0, r3
  36458. 800f932: 3720 adds r7, #32
  36459. 800f934: 46bd mov sp, r7
  36460. 800f936: bd80 pop {r7, pc}
  36461. 0800f938 <osMutexAcquire>:
  36462. osStatus_t osMutexAcquire (osMutexId_t mutex_id, uint32_t timeout) {
  36463. 800f938: b580 push {r7, lr}
  36464. 800f93a: b086 sub sp, #24
  36465. 800f93c: af00 add r7, sp, #0
  36466. 800f93e: 6078 str r0, [r7, #4]
  36467. 800f940: 6039 str r1, [r7, #0]
  36468. SemaphoreHandle_t hMutex;
  36469. osStatus_t stat;
  36470. uint32_t rmtx;
  36471. hMutex = (SemaphoreHandle_t)((uint32_t)mutex_id & ~1U);
  36472. 800f942: 687b ldr r3, [r7, #4]
  36473. 800f944: f023 0301 bic.w r3, r3, #1
  36474. 800f948: 613b str r3, [r7, #16]
  36475. rmtx = (uint32_t)mutex_id & 1U;
  36476. 800f94a: 687b ldr r3, [r7, #4]
  36477. 800f94c: f003 0301 and.w r3, r3, #1
  36478. 800f950: 60fb str r3, [r7, #12]
  36479. stat = osOK;
  36480. 800f952: 2300 movs r3, #0
  36481. 800f954: 617b str r3, [r7, #20]
  36482. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  36483. 800f956: f3ef 8305 mrs r3, IPSR
  36484. 800f95a: 60bb str r3, [r7, #8]
  36485. return(result);
  36486. 800f95c: 68bb ldr r3, [r7, #8]
  36487. if (IS_IRQ()) {
  36488. 800f95e: 2b00 cmp r3, #0
  36489. 800f960: d003 beq.n 800f96a <osMutexAcquire+0x32>
  36490. stat = osErrorISR;
  36491. 800f962: f06f 0305 mvn.w r3, #5
  36492. 800f966: 617b str r3, [r7, #20]
  36493. 800f968: e02c b.n 800f9c4 <osMutexAcquire+0x8c>
  36494. }
  36495. else if (hMutex == NULL) {
  36496. 800f96a: 693b ldr r3, [r7, #16]
  36497. 800f96c: 2b00 cmp r3, #0
  36498. 800f96e: d103 bne.n 800f978 <osMutexAcquire+0x40>
  36499. stat = osErrorParameter;
  36500. 800f970: f06f 0303 mvn.w r3, #3
  36501. 800f974: 617b str r3, [r7, #20]
  36502. 800f976: e025 b.n 800f9c4 <osMutexAcquire+0x8c>
  36503. }
  36504. else {
  36505. if (rmtx != 0U) {
  36506. 800f978: 68fb ldr r3, [r7, #12]
  36507. 800f97a: 2b00 cmp r3, #0
  36508. 800f97c: d011 beq.n 800f9a2 <osMutexAcquire+0x6a>
  36509. #if (configUSE_RECURSIVE_MUTEXES == 1)
  36510. if (xSemaphoreTakeRecursive (hMutex, timeout) != pdPASS) {
  36511. 800f97e: 6839 ldr r1, [r7, #0]
  36512. 800f980: 6938 ldr r0, [r7, #16]
  36513. 800f982: f000 fc42 bl 801020a <xQueueTakeMutexRecursive>
  36514. 800f986: 4603 mov r3, r0
  36515. 800f988: 2b01 cmp r3, #1
  36516. 800f98a: d01b beq.n 800f9c4 <osMutexAcquire+0x8c>
  36517. if (timeout != 0U) {
  36518. 800f98c: 683b ldr r3, [r7, #0]
  36519. 800f98e: 2b00 cmp r3, #0
  36520. 800f990: d003 beq.n 800f99a <osMutexAcquire+0x62>
  36521. stat = osErrorTimeout;
  36522. 800f992: f06f 0301 mvn.w r3, #1
  36523. 800f996: 617b str r3, [r7, #20]
  36524. 800f998: e014 b.n 800f9c4 <osMutexAcquire+0x8c>
  36525. } else {
  36526. stat = osErrorResource;
  36527. 800f99a: f06f 0302 mvn.w r3, #2
  36528. 800f99e: 617b str r3, [r7, #20]
  36529. 800f9a0: e010 b.n 800f9c4 <osMutexAcquire+0x8c>
  36530. }
  36531. }
  36532. #endif
  36533. }
  36534. else {
  36535. if (xSemaphoreTake (hMutex, timeout) != pdPASS) {
  36536. 800f9a2: 6839 ldr r1, [r7, #0]
  36537. 800f9a4: 6938 ldr r0, [r7, #16]
  36538. 800f9a6: f000 fee9 bl 801077c <xQueueSemaphoreTake>
  36539. 800f9aa: 4603 mov r3, r0
  36540. 800f9ac: 2b01 cmp r3, #1
  36541. 800f9ae: d009 beq.n 800f9c4 <osMutexAcquire+0x8c>
  36542. if (timeout != 0U) {
  36543. 800f9b0: 683b ldr r3, [r7, #0]
  36544. 800f9b2: 2b00 cmp r3, #0
  36545. 800f9b4: d003 beq.n 800f9be <osMutexAcquire+0x86>
  36546. stat = osErrorTimeout;
  36547. 800f9b6: f06f 0301 mvn.w r3, #1
  36548. 800f9ba: 617b str r3, [r7, #20]
  36549. 800f9bc: e002 b.n 800f9c4 <osMutexAcquire+0x8c>
  36550. } else {
  36551. stat = osErrorResource;
  36552. 800f9be: f06f 0302 mvn.w r3, #2
  36553. 800f9c2: 617b str r3, [r7, #20]
  36554. }
  36555. }
  36556. }
  36557. }
  36558. return (stat);
  36559. 800f9c4: 697b ldr r3, [r7, #20]
  36560. }
  36561. 800f9c6: 4618 mov r0, r3
  36562. 800f9c8: 3718 adds r7, #24
  36563. 800f9ca: 46bd mov sp, r7
  36564. 800f9cc: bd80 pop {r7, pc}
  36565. 0800f9ce <osMutexRelease>:
  36566. osStatus_t osMutexRelease (osMutexId_t mutex_id) {
  36567. 800f9ce: b580 push {r7, lr}
  36568. 800f9d0: b086 sub sp, #24
  36569. 800f9d2: af00 add r7, sp, #0
  36570. 800f9d4: 6078 str r0, [r7, #4]
  36571. SemaphoreHandle_t hMutex;
  36572. osStatus_t stat;
  36573. uint32_t rmtx;
  36574. hMutex = (SemaphoreHandle_t)((uint32_t)mutex_id & ~1U);
  36575. 800f9d6: 687b ldr r3, [r7, #4]
  36576. 800f9d8: f023 0301 bic.w r3, r3, #1
  36577. 800f9dc: 613b str r3, [r7, #16]
  36578. rmtx = (uint32_t)mutex_id & 1U;
  36579. 800f9de: 687b ldr r3, [r7, #4]
  36580. 800f9e0: f003 0301 and.w r3, r3, #1
  36581. 800f9e4: 60fb str r3, [r7, #12]
  36582. stat = osOK;
  36583. 800f9e6: 2300 movs r3, #0
  36584. 800f9e8: 617b str r3, [r7, #20]
  36585. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  36586. 800f9ea: f3ef 8305 mrs r3, IPSR
  36587. 800f9ee: 60bb str r3, [r7, #8]
  36588. return(result);
  36589. 800f9f0: 68bb ldr r3, [r7, #8]
  36590. if (IS_IRQ()) {
  36591. 800f9f2: 2b00 cmp r3, #0
  36592. 800f9f4: d003 beq.n 800f9fe <osMutexRelease+0x30>
  36593. stat = osErrorISR;
  36594. 800f9f6: f06f 0305 mvn.w r3, #5
  36595. 800f9fa: 617b str r3, [r7, #20]
  36596. 800f9fc: e01f b.n 800fa3e <osMutexRelease+0x70>
  36597. }
  36598. else if (hMutex == NULL) {
  36599. 800f9fe: 693b ldr r3, [r7, #16]
  36600. 800fa00: 2b00 cmp r3, #0
  36601. 800fa02: d103 bne.n 800fa0c <osMutexRelease+0x3e>
  36602. stat = osErrorParameter;
  36603. 800fa04: f06f 0303 mvn.w r3, #3
  36604. 800fa08: 617b str r3, [r7, #20]
  36605. 800fa0a: e018 b.n 800fa3e <osMutexRelease+0x70>
  36606. }
  36607. else {
  36608. if (rmtx != 0U) {
  36609. 800fa0c: 68fb ldr r3, [r7, #12]
  36610. 800fa0e: 2b00 cmp r3, #0
  36611. 800fa10: d009 beq.n 800fa26 <osMutexRelease+0x58>
  36612. #if (configUSE_RECURSIVE_MUTEXES == 1)
  36613. if (xSemaphoreGiveRecursive (hMutex) != pdPASS) {
  36614. 800fa12: 6938 ldr r0, [r7, #16]
  36615. 800fa14: f000 fbc4 bl 80101a0 <xQueueGiveMutexRecursive>
  36616. 800fa18: 4603 mov r3, r0
  36617. 800fa1a: 2b01 cmp r3, #1
  36618. 800fa1c: d00f beq.n 800fa3e <osMutexRelease+0x70>
  36619. stat = osErrorResource;
  36620. 800fa1e: f06f 0302 mvn.w r3, #2
  36621. 800fa22: 617b str r3, [r7, #20]
  36622. 800fa24: e00b b.n 800fa3e <osMutexRelease+0x70>
  36623. }
  36624. #endif
  36625. }
  36626. else {
  36627. if (xSemaphoreGive (hMutex) != pdPASS) {
  36628. 800fa26: 2300 movs r3, #0
  36629. 800fa28: 2200 movs r2, #0
  36630. 800fa2a: 2100 movs r1, #0
  36631. 800fa2c: 6938 ldr r0, [r7, #16]
  36632. 800fa2e: f000 fc23 bl 8010278 <xQueueGenericSend>
  36633. 800fa32: 4603 mov r3, r0
  36634. 800fa34: 2b01 cmp r3, #1
  36635. 800fa36: d002 beq.n 800fa3e <osMutexRelease+0x70>
  36636. stat = osErrorResource;
  36637. 800fa38: f06f 0302 mvn.w r3, #2
  36638. 800fa3c: 617b str r3, [r7, #20]
  36639. }
  36640. }
  36641. }
  36642. return (stat);
  36643. 800fa3e: 697b ldr r3, [r7, #20]
  36644. }
  36645. 800fa40: 4618 mov r0, r3
  36646. 800fa42: 3718 adds r7, #24
  36647. 800fa44: 46bd mov sp, r7
  36648. 800fa46: bd80 pop {r7, pc}
  36649. 0800fa48 <osMessageQueueNew>:
  36650. return (stat);
  36651. }
  36652. /*---------------------------------------------------------------------------*/
  36653. osMessageQueueId_t osMessageQueueNew (uint32_t msg_count, uint32_t msg_size, const osMessageQueueAttr_t *attr) {
  36654. 800fa48: b580 push {r7, lr}
  36655. 800fa4a: b08a sub sp, #40 @ 0x28
  36656. 800fa4c: af02 add r7, sp, #8
  36657. 800fa4e: 60f8 str r0, [r7, #12]
  36658. 800fa50: 60b9 str r1, [r7, #8]
  36659. 800fa52: 607a str r2, [r7, #4]
  36660. int32_t mem;
  36661. #if (configQUEUE_REGISTRY_SIZE > 0)
  36662. const char *name;
  36663. #endif
  36664. hQueue = NULL;
  36665. 800fa54: 2300 movs r3, #0
  36666. 800fa56: 61fb str r3, [r7, #28]
  36667. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  36668. 800fa58: f3ef 8305 mrs r3, IPSR
  36669. 800fa5c: 613b str r3, [r7, #16]
  36670. return(result);
  36671. 800fa5e: 693b ldr r3, [r7, #16]
  36672. if (!IS_IRQ() && (msg_count > 0U) && (msg_size > 0U)) {
  36673. 800fa60: 2b00 cmp r3, #0
  36674. 800fa62: d15f bne.n 800fb24 <osMessageQueueNew+0xdc>
  36675. 800fa64: 68fb ldr r3, [r7, #12]
  36676. 800fa66: 2b00 cmp r3, #0
  36677. 800fa68: d05c beq.n 800fb24 <osMessageQueueNew+0xdc>
  36678. 800fa6a: 68bb ldr r3, [r7, #8]
  36679. 800fa6c: 2b00 cmp r3, #0
  36680. 800fa6e: d059 beq.n 800fb24 <osMessageQueueNew+0xdc>
  36681. mem = -1;
  36682. 800fa70: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  36683. 800fa74: 61bb str r3, [r7, #24]
  36684. if (attr != NULL) {
  36685. 800fa76: 687b ldr r3, [r7, #4]
  36686. 800fa78: 2b00 cmp r3, #0
  36687. 800fa7a: d029 beq.n 800fad0 <osMessageQueueNew+0x88>
  36688. if ((attr->cb_mem != NULL) && (attr->cb_size >= sizeof(StaticQueue_t)) &&
  36689. 800fa7c: 687b ldr r3, [r7, #4]
  36690. 800fa7e: 689b ldr r3, [r3, #8]
  36691. 800fa80: 2b00 cmp r3, #0
  36692. 800fa82: d012 beq.n 800faaa <osMessageQueueNew+0x62>
  36693. 800fa84: 687b ldr r3, [r7, #4]
  36694. 800fa86: 68db ldr r3, [r3, #12]
  36695. 800fa88: 2b4f cmp r3, #79 @ 0x4f
  36696. 800fa8a: d90e bls.n 800faaa <osMessageQueueNew+0x62>
  36697. (attr->mq_mem != NULL) && (attr->mq_size >= (msg_count * msg_size))) {
  36698. 800fa8c: 687b ldr r3, [r7, #4]
  36699. 800fa8e: 691b ldr r3, [r3, #16]
  36700. if ((attr->cb_mem != NULL) && (attr->cb_size >= sizeof(StaticQueue_t)) &&
  36701. 800fa90: 2b00 cmp r3, #0
  36702. 800fa92: d00a beq.n 800faaa <osMessageQueueNew+0x62>
  36703. (attr->mq_mem != NULL) && (attr->mq_size >= (msg_count * msg_size))) {
  36704. 800fa94: 687b ldr r3, [r7, #4]
  36705. 800fa96: 695a ldr r2, [r3, #20]
  36706. 800fa98: 68fb ldr r3, [r7, #12]
  36707. 800fa9a: 68b9 ldr r1, [r7, #8]
  36708. 800fa9c: fb01 f303 mul.w r3, r1, r3
  36709. 800faa0: 429a cmp r2, r3
  36710. 800faa2: d302 bcc.n 800faaa <osMessageQueueNew+0x62>
  36711. mem = 1;
  36712. 800faa4: 2301 movs r3, #1
  36713. 800faa6: 61bb str r3, [r7, #24]
  36714. 800faa8: e014 b.n 800fad4 <osMessageQueueNew+0x8c>
  36715. }
  36716. else {
  36717. if ((attr->cb_mem == NULL) && (attr->cb_size == 0U) &&
  36718. 800faaa: 687b ldr r3, [r7, #4]
  36719. 800faac: 689b ldr r3, [r3, #8]
  36720. 800faae: 2b00 cmp r3, #0
  36721. 800fab0: d110 bne.n 800fad4 <osMessageQueueNew+0x8c>
  36722. 800fab2: 687b ldr r3, [r7, #4]
  36723. 800fab4: 68db ldr r3, [r3, #12]
  36724. 800fab6: 2b00 cmp r3, #0
  36725. 800fab8: d10c bne.n 800fad4 <osMessageQueueNew+0x8c>
  36726. (attr->mq_mem == NULL) && (attr->mq_size == 0U)) {
  36727. 800faba: 687b ldr r3, [r7, #4]
  36728. 800fabc: 691b ldr r3, [r3, #16]
  36729. if ((attr->cb_mem == NULL) && (attr->cb_size == 0U) &&
  36730. 800fabe: 2b00 cmp r3, #0
  36731. 800fac0: d108 bne.n 800fad4 <osMessageQueueNew+0x8c>
  36732. (attr->mq_mem == NULL) && (attr->mq_size == 0U)) {
  36733. 800fac2: 687b ldr r3, [r7, #4]
  36734. 800fac4: 695b ldr r3, [r3, #20]
  36735. 800fac6: 2b00 cmp r3, #0
  36736. 800fac8: d104 bne.n 800fad4 <osMessageQueueNew+0x8c>
  36737. mem = 0;
  36738. 800faca: 2300 movs r3, #0
  36739. 800facc: 61bb str r3, [r7, #24]
  36740. 800face: e001 b.n 800fad4 <osMessageQueueNew+0x8c>
  36741. }
  36742. }
  36743. }
  36744. else {
  36745. mem = 0;
  36746. 800fad0: 2300 movs r3, #0
  36747. 800fad2: 61bb str r3, [r7, #24]
  36748. }
  36749. if (mem == 1) {
  36750. 800fad4: 69bb ldr r3, [r7, #24]
  36751. 800fad6: 2b01 cmp r3, #1
  36752. 800fad8: d10b bne.n 800faf2 <osMessageQueueNew+0xaa>
  36753. #if (configSUPPORT_STATIC_ALLOCATION == 1)
  36754. hQueue = xQueueCreateStatic (msg_count, msg_size, attr->mq_mem, attr->cb_mem);
  36755. 800fada: 687b ldr r3, [r7, #4]
  36756. 800fadc: 691a ldr r2, [r3, #16]
  36757. 800fade: 687b ldr r3, [r7, #4]
  36758. 800fae0: 689b ldr r3, [r3, #8]
  36759. 800fae2: 2100 movs r1, #0
  36760. 800fae4: 9100 str r1, [sp, #0]
  36761. 800fae6: 68b9 ldr r1, [r7, #8]
  36762. 800fae8: 68f8 ldr r0, [r7, #12]
  36763. 800faea: f000 fa31 bl 800ff50 <xQueueGenericCreateStatic>
  36764. 800faee: 61f8 str r0, [r7, #28]
  36765. 800faf0: e008 b.n 800fb04 <osMessageQueueNew+0xbc>
  36766. #endif
  36767. }
  36768. else {
  36769. if (mem == 0) {
  36770. 800faf2: 69bb ldr r3, [r7, #24]
  36771. 800faf4: 2b00 cmp r3, #0
  36772. 800faf6: d105 bne.n 800fb04 <osMessageQueueNew+0xbc>
  36773. #if (configSUPPORT_DYNAMIC_ALLOCATION == 1)
  36774. hQueue = xQueueCreate (msg_count, msg_size);
  36775. 800faf8: 2200 movs r2, #0
  36776. 800fafa: 68b9 ldr r1, [r7, #8]
  36777. 800fafc: 68f8 ldr r0, [r7, #12]
  36778. 800fafe: f000 faa4 bl 801004a <xQueueGenericCreate>
  36779. 800fb02: 61f8 str r0, [r7, #28]
  36780. #endif
  36781. }
  36782. }
  36783. #if (configQUEUE_REGISTRY_SIZE > 0)
  36784. if (hQueue != NULL) {
  36785. 800fb04: 69fb ldr r3, [r7, #28]
  36786. 800fb06: 2b00 cmp r3, #0
  36787. 800fb08: d00c beq.n 800fb24 <osMessageQueueNew+0xdc>
  36788. if (attr != NULL) {
  36789. 800fb0a: 687b ldr r3, [r7, #4]
  36790. 800fb0c: 2b00 cmp r3, #0
  36791. 800fb0e: d003 beq.n 800fb18 <osMessageQueueNew+0xd0>
  36792. name = attr->name;
  36793. 800fb10: 687b ldr r3, [r7, #4]
  36794. 800fb12: 681b ldr r3, [r3, #0]
  36795. 800fb14: 617b str r3, [r7, #20]
  36796. 800fb16: e001 b.n 800fb1c <osMessageQueueNew+0xd4>
  36797. } else {
  36798. name = NULL;
  36799. 800fb18: 2300 movs r3, #0
  36800. 800fb1a: 617b str r3, [r7, #20]
  36801. }
  36802. vQueueAddToRegistry (hQueue, name);
  36803. 800fb1c: 6979 ldr r1, [r7, #20]
  36804. 800fb1e: 69f8 ldr r0, [r7, #28]
  36805. 800fb20: f001 f8e6 bl 8010cf0 <vQueueAddToRegistry>
  36806. }
  36807. #endif
  36808. }
  36809. return ((osMessageQueueId_t)hQueue);
  36810. 800fb24: 69fb ldr r3, [r7, #28]
  36811. }
  36812. 800fb26: 4618 mov r0, r3
  36813. 800fb28: 3720 adds r7, #32
  36814. 800fb2a: 46bd mov sp, r7
  36815. 800fb2c: bd80 pop {r7, pc}
  36816. ...
  36817. 0800fb30 <osMessageQueuePut>:
  36818. osStatus_t osMessageQueuePut (osMessageQueueId_t mq_id, const void *msg_ptr, uint8_t msg_prio, uint32_t timeout) {
  36819. 800fb30: b580 push {r7, lr}
  36820. 800fb32: b088 sub sp, #32
  36821. 800fb34: af00 add r7, sp, #0
  36822. 800fb36: 60f8 str r0, [r7, #12]
  36823. 800fb38: 60b9 str r1, [r7, #8]
  36824. 800fb3a: 603b str r3, [r7, #0]
  36825. 800fb3c: 4613 mov r3, r2
  36826. 800fb3e: 71fb strb r3, [r7, #7]
  36827. QueueHandle_t hQueue = (QueueHandle_t)mq_id;
  36828. 800fb40: 68fb ldr r3, [r7, #12]
  36829. 800fb42: 61bb str r3, [r7, #24]
  36830. osStatus_t stat;
  36831. BaseType_t yield;
  36832. (void)msg_prio; /* Message priority is ignored */
  36833. stat = osOK;
  36834. 800fb44: 2300 movs r3, #0
  36835. 800fb46: 61fb str r3, [r7, #28]
  36836. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  36837. 800fb48: f3ef 8305 mrs r3, IPSR
  36838. 800fb4c: 617b str r3, [r7, #20]
  36839. return(result);
  36840. 800fb4e: 697b ldr r3, [r7, #20]
  36841. if (IS_IRQ()) {
  36842. 800fb50: 2b00 cmp r3, #0
  36843. 800fb52: d028 beq.n 800fba6 <osMessageQueuePut+0x76>
  36844. if ((hQueue == NULL) || (msg_ptr == NULL) || (timeout != 0U)) {
  36845. 800fb54: 69bb ldr r3, [r7, #24]
  36846. 800fb56: 2b00 cmp r3, #0
  36847. 800fb58: d005 beq.n 800fb66 <osMessageQueuePut+0x36>
  36848. 800fb5a: 68bb ldr r3, [r7, #8]
  36849. 800fb5c: 2b00 cmp r3, #0
  36850. 800fb5e: d002 beq.n 800fb66 <osMessageQueuePut+0x36>
  36851. 800fb60: 683b ldr r3, [r7, #0]
  36852. 800fb62: 2b00 cmp r3, #0
  36853. 800fb64: d003 beq.n 800fb6e <osMessageQueuePut+0x3e>
  36854. stat = osErrorParameter;
  36855. 800fb66: f06f 0303 mvn.w r3, #3
  36856. 800fb6a: 61fb str r3, [r7, #28]
  36857. 800fb6c: e038 b.n 800fbe0 <osMessageQueuePut+0xb0>
  36858. }
  36859. else {
  36860. yield = pdFALSE;
  36861. 800fb6e: 2300 movs r3, #0
  36862. 800fb70: 613b str r3, [r7, #16]
  36863. if (xQueueSendToBackFromISR (hQueue, msg_ptr, &yield) != pdTRUE) {
  36864. 800fb72: f107 0210 add.w r2, r7, #16
  36865. 800fb76: 2300 movs r3, #0
  36866. 800fb78: 68b9 ldr r1, [r7, #8]
  36867. 800fb7a: 69b8 ldr r0, [r7, #24]
  36868. 800fb7c: f000 fc7e bl 801047c <xQueueGenericSendFromISR>
  36869. 800fb80: 4603 mov r3, r0
  36870. 800fb82: 2b01 cmp r3, #1
  36871. 800fb84: d003 beq.n 800fb8e <osMessageQueuePut+0x5e>
  36872. stat = osErrorResource;
  36873. 800fb86: f06f 0302 mvn.w r3, #2
  36874. 800fb8a: 61fb str r3, [r7, #28]
  36875. 800fb8c: e028 b.n 800fbe0 <osMessageQueuePut+0xb0>
  36876. } else {
  36877. portYIELD_FROM_ISR (yield);
  36878. 800fb8e: 693b ldr r3, [r7, #16]
  36879. 800fb90: 2b00 cmp r3, #0
  36880. 800fb92: d025 beq.n 800fbe0 <osMessageQueuePut+0xb0>
  36881. 800fb94: 4b15 ldr r3, [pc, #84] @ (800fbec <osMessageQueuePut+0xbc>)
  36882. 800fb96: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  36883. 800fb9a: 601a str r2, [r3, #0]
  36884. 800fb9c: f3bf 8f4f dsb sy
  36885. 800fba0: f3bf 8f6f isb sy
  36886. 800fba4: e01c b.n 800fbe0 <osMessageQueuePut+0xb0>
  36887. }
  36888. }
  36889. }
  36890. else {
  36891. if ((hQueue == NULL) || (msg_ptr == NULL)) {
  36892. 800fba6: 69bb ldr r3, [r7, #24]
  36893. 800fba8: 2b00 cmp r3, #0
  36894. 800fbaa: d002 beq.n 800fbb2 <osMessageQueuePut+0x82>
  36895. 800fbac: 68bb ldr r3, [r7, #8]
  36896. 800fbae: 2b00 cmp r3, #0
  36897. 800fbb0: d103 bne.n 800fbba <osMessageQueuePut+0x8a>
  36898. stat = osErrorParameter;
  36899. 800fbb2: f06f 0303 mvn.w r3, #3
  36900. 800fbb6: 61fb str r3, [r7, #28]
  36901. 800fbb8: e012 b.n 800fbe0 <osMessageQueuePut+0xb0>
  36902. }
  36903. else {
  36904. if (xQueueSendToBack (hQueue, msg_ptr, (TickType_t)timeout) != pdPASS) {
  36905. 800fbba: 2300 movs r3, #0
  36906. 800fbbc: 683a ldr r2, [r7, #0]
  36907. 800fbbe: 68b9 ldr r1, [r7, #8]
  36908. 800fbc0: 69b8 ldr r0, [r7, #24]
  36909. 800fbc2: f000 fb59 bl 8010278 <xQueueGenericSend>
  36910. 800fbc6: 4603 mov r3, r0
  36911. 800fbc8: 2b01 cmp r3, #1
  36912. 800fbca: d009 beq.n 800fbe0 <osMessageQueuePut+0xb0>
  36913. if (timeout != 0U) {
  36914. 800fbcc: 683b ldr r3, [r7, #0]
  36915. 800fbce: 2b00 cmp r3, #0
  36916. 800fbd0: d003 beq.n 800fbda <osMessageQueuePut+0xaa>
  36917. stat = osErrorTimeout;
  36918. 800fbd2: f06f 0301 mvn.w r3, #1
  36919. 800fbd6: 61fb str r3, [r7, #28]
  36920. 800fbd8: e002 b.n 800fbe0 <osMessageQueuePut+0xb0>
  36921. } else {
  36922. stat = osErrorResource;
  36923. 800fbda: f06f 0302 mvn.w r3, #2
  36924. 800fbde: 61fb str r3, [r7, #28]
  36925. }
  36926. }
  36927. }
  36928. }
  36929. return (stat);
  36930. 800fbe0: 69fb ldr r3, [r7, #28]
  36931. }
  36932. 800fbe2: 4618 mov r0, r3
  36933. 800fbe4: 3720 adds r7, #32
  36934. 800fbe6: 46bd mov sp, r7
  36935. 800fbe8: bd80 pop {r7, pc}
  36936. 800fbea: bf00 nop
  36937. 800fbec: e000ed04 .word 0xe000ed04
  36938. 0800fbf0 <osMessageQueueGet>:
  36939. osStatus_t osMessageQueueGet (osMessageQueueId_t mq_id, void *msg_ptr, uint8_t *msg_prio, uint32_t timeout) {
  36940. 800fbf0: b580 push {r7, lr}
  36941. 800fbf2: b088 sub sp, #32
  36942. 800fbf4: af00 add r7, sp, #0
  36943. 800fbf6: 60f8 str r0, [r7, #12]
  36944. 800fbf8: 60b9 str r1, [r7, #8]
  36945. 800fbfa: 607a str r2, [r7, #4]
  36946. 800fbfc: 603b str r3, [r7, #0]
  36947. QueueHandle_t hQueue = (QueueHandle_t)mq_id;
  36948. 800fbfe: 68fb ldr r3, [r7, #12]
  36949. 800fc00: 61bb str r3, [r7, #24]
  36950. osStatus_t stat;
  36951. BaseType_t yield;
  36952. (void)msg_prio; /* Message priority is ignored */
  36953. stat = osOK;
  36954. 800fc02: 2300 movs r3, #0
  36955. 800fc04: 61fb str r3, [r7, #28]
  36956. __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
  36957. 800fc06: f3ef 8305 mrs r3, IPSR
  36958. 800fc0a: 617b str r3, [r7, #20]
  36959. return(result);
  36960. 800fc0c: 697b ldr r3, [r7, #20]
  36961. if (IS_IRQ()) {
  36962. 800fc0e: 2b00 cmp r3, #0
  36963. 800fc10: d028 beq.n 800fc64 <osMessageQueueGet+0x74>
  36964. if ((hQueue == NULL) || (msg_ptr == NULL) || (timeout != 0U)) {
  36965. 800fc12: 69bb ldr r3, [r7, #24]
  36966. 800fc14: 2b00 cmp r3, #0
  36967. 800fc16: d005 beq.n 800fc24 <osMessageQueueGet+0x34>
  36968. 800fc18: 68bb ldr r3, [r7, #8]
  36969. 800fc1a: 2b00 cmp r3, #0
  36970. 800fc1c: d002 beq.n 800fc24 <osMessageQueueGet+0x34>
  36971. 800fc1e: 683b ldr r3, [r7, #0]
  36972. 800fc20: 2b00 cmp r3, #0
  36973. 800fc22: d003 beq.n 800fc2c <osMessageQueueGet+0x3c>
  36974. stat = osErrorParameter;
  36975. 800fc24: f06f 0303 mvn.w r3, #3
  36976. 800fc28: 61fb str r3, [r7, #28]
  36977. 800fc2a: e037 b.n 800fc9c <osMessageQueueGet+0xac>
  36978. }
  36979. else {
  36980. yield = pdFALSE;
  36981. 800fc2c: 2300 movs r3, #0
  36982. 800fc2e: 613b str r3, [r7, #16]
  36983. if (xQueueReceiveFromISR (hQueue, msg_ptr, &yield) != pdPASS) {
  36984. 800fc30: f107 0310 add.w r3, r7, #16
  36985. 800fc34: 461a mov r2, r3
  36986. 800fc36: 68b9 ldr r1, [r7, #8]
  36987. 800fc38: 69b8 ldr r0, [r7, #24]
  36988. 800fc3a: f000 feaf bl 801099c <xQueueReceiveFromISR>
  36989. 800fc3e: 4603 mov r3, r0
  36990. 800fc40: 2b01 cmp r3, #1
  36991. 800fc42: d003 beq.n 800fc4c <osMessageQueueGet+0x5c>
  36992. stat = osErrorResource;
  36993. 800fc44: f06f 0302 mvn.w r3, #2
  36994. 800fc48: 61fb str r3, [r7, #28]
  36995. 800fc4a: e027 b.n 800fc9c <osMessageQueueGet+0xac>
  36996. } else {
  36997. portYIELD_FROM_ISR (yield);
  36998. 800fc4c: 693b ldr r3, [r7, #16]
  36999. 800fc4e: 2b00 cmp r3, #0
  37000. 800fc50: d024 beq.n 800fc9c <osMessageQueueGet+0xac>
  37001. 800fc52: 4b15 ldr r3, [pc, #84] @ (800fca8 <osMessageQueueGet+0xb8>)
  37002. 800fc54: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  37003. 800fc58: 601a str r2, [r3, #0]
  37004. 800fc5a: f3bf 8f4f dsb sy
  37005. 800fc5e: f3bf 8f6f isb sy
  37006. 800fc62: e01b b.n 800fc9c <osMessageQueueGet+0xac>
  37007. }
  37008. }
  37009. }
  37010. else {
  37011. if ((hQueue == NULL) || (msg_ptr == NULL)) {
  37012. 800fc64: 69bb ldr r3, [r7, #24]
  37013. 800fc66: 2b00 cmp r3, #0
  37014. 800fc68: d002 beq.n 800fc70 <osMessageQueueGet+0x80>
  37015. 800fc6a: 68bb ldr r3, [r7, #8]
  37016. 800fc6c: 2b00 cmp r3, #0
  37017. 800fc6e: d103 bne.n 800fc78 <osMessageQueueGet+0x88>
  37018. stat = osErrorParameter;
  37019. 800fc70: f06f 0303 mvn.w r3, #3
  37020. 800fc74: 61fb str r3, [r7, #28]
  37021. 800fc76: e011 b.n 800fc9c <osMessageQueueGet+0xac>
  37022. }
  37023. else {
  37024. if (xQueueReceive (hQueue, msg_ptr, (TickType_t)timeout) != pdPASS) {
  37025. 800fc78: 683a ldr r2, [r7, #0]
  37026. 800fc7a: 68b9 ldr r1, [r7, #8]
  37027. 800fc7c: 69b8 ldr r0, [r7, #24]
  37028. 800fc7e: f000 fc9b bl 80105b8 <xQueueReceive>
  37029. 800fc82: 4603 mov r3, r0
  37030. 800fc84: 2b01 cmp r3, #1
  37031. 800fc86: d009 beq.n 800fc9c <osMessageQueueGet+0xac>
  37032. if (timeout != 0U) {
  37033. 800fc88: 683b ldr r3, [r7, #0]
  37034. 800fc8a: 2b00 cmp r3, #0
  37035. 800fc8c: d003 beq.n 800fc96 <osMessageQueueGet+0xa6>
  37036. stat = osErrorTimeout;
  37037. 800fc8e: f06f 0301 mvn.w r3, #1
  37038. 800fc92: 61fb str r3, [r7, #28]
  37039. 800fc94: e002 b.n 800fc9c <osMessageQueueGet+0xac>
  37040. } else {
  37041. stat = osErrorResource;
  37042. 800fc96: f06f 0302 mvn.w r3, #2
  37043. 800fc9a: 61fb str r3, [r7, #28]
  37044. }
  37045. }
  37046. }
  37047. }
  37048. return (stat);
  37049. 800fc9c: 69fb ldr r3, [r7, #28]
  37050. }
  37051. 800fc9e: 4618 mov r0, r3
  37052. 800fca0: 3720 adds r7, #32
  37053. 800fca2: 46bd mov sp, r7
  37054. 800fca4: bd80 pop {r7, pc}
  37055. 800fca6: bf00 nop
  37056. 800fca8: e000ed04 .word 0xe000ed04
  37057. 0800fcac <vApplicationGetIdleTaskMemory>:
  37058. /*
  37059. vApplicationGetIdleTaskMemory gets called when configSUPPORT_STATIC_ALLOCATION
  37060. equals to 1 and is required for static memory allocation support.
  37061. */
  37062. __WEAK void vApplicationGetIdleTaskMemory (StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize) {
  37063. 800fcac: b480 push {r7}
  37064. 800fcae: b085 sub sp, #20
  37065. 800fcb0: af00 add r7, sp, #0
  37066. 800fcb2: 60f8 str r0, [r7, #12]
  37067. 800fcb4: 60b9 str r1, [r7, #8]
  37068. 800fcb6: 607a str r2, [r7, #4]
  37069. /* Idle task control block and stack */
  37070. static StaticTask_t Idle_TCB;
  37071. static StackType_t Idle_Stack[configMINIMAL_STACK_SIZE];
  37072. *ppxIdleTaskTCBBuffer = &Idle_TCB;
  37073. 800fcb8: 68fb ldr r3, [r7, #12]
  37074. 800fcba: 4a07 ldr r2, [pc, #28] @ (800fcd8 <vApplicationGetIdleTaskMemory+0x2c>)
  37075. 800fcbc: 601a str r2, [r3, #0]
  37076. *ppxIdleTaskStackBuffer = &Idle_Stack[0];
  37077. 800fcbe: 68bb ldr r3, [r7, #8]
  37078. 800fcc0: 4a06 ldr r2, [pc, #24] @ (800fcdc <vApplicationGetIdleTaskMemory+0x30>)
  37079. 800fcc2: 601a str r2, [r3, #0]
  37080. *pulIdleTaskStackSize = (uint32_t)configMINIMAL_STACK_SIZE;
  37081. 800fcc4: 687b ldr r3, [r7, #4]
  37082. 800fcc6: f44f 7200 mov.w r2, #512 @ 0x200
  37083. 800fcca: 601a str r2, [r3, #0]
  37084. }
  37085. 800fccc: bf00 nop
  37086. 800fcce: 3714 adds r7, #20
  37087. 800fcd0: 46bd mov sp, r7
  37088. 800fcd2: f85d 7b04 ldr.w r7, [sp], #4
  37089. 800fcd6: 4770 bx lr
  37090. 800fcd8: 24000a64 .word 0x24000a64
  37091. 800fcdc: 24000b0c .word 0x24000b0c
  37092. 0800fce0 <vApplicationGetTimerTaskMemory>:
  37093. /*
  37094. vApplicationGetTimerTaskMemory gets called when configSUPPORT_STATIC_ALLOCATION
  37095. equals to 1 and is required for static memory allocation support.
  37096. */
  37097. __WEAK void vApplicationGetTimerTaskMemory (StaticTask_t **ppxTimerTaskTCBBuffer, StackType_t **ppxTimerTaskStackBuffer, uint32_t *pulTimerTaskStackSize) {
  37098. 800fce0: b480 push {r7}
  37099. 800fce2: b085 sub sp, #20
  37100. 800fce4: af00 add r7, sp, #0
  37101. 800fce6: 60f8 str r0, [r7, #12]
  37102. 800fce8: 60b9 str r1, [r7, #8]
  37103. 800fcea: 607a str r2, [r7, #4]
  37104. /* Timer task control block and stack */
  37105. static StaticTask_t Timer_TCB;
  37106. static StackType_t Timer_Stack[configTIMER_TASK_STACK_DEPTH];
  37107. *ppxTimerTaskTCBBuffer = &Timer_TCB;
  37108. 800fcec: 68fb ldr r3, [r7, #12]
  37109. 800fcee: 4a07 ldr r2, [pc, #28] @ (800fd0c <vApplicationGetTimerTaskMemory+0x2c>)
  37110. 800fcf0: 601a str r2, [r3, #0]
  37111. *ppxTimerTaskStackBuffer = &Timer_Stack[0];
  37112. 800fcf2: 68bb ldr r3, [r7, #8]
  37113. 800fcf4: 4a06 ldr r2, [pc, #24] @ (800fd10 <vApplicationGetTimerTaskMemory+0x30>)
  37114. 800fcf6: 601a str r2, [r3, #0]
  37115. *pulTimerTaskStackSize = (uint32_t)configTIMER_TASK_STACK_DEPTH;
  37116. 800fcf8: 687b ldr r3, [r7, #4]
  37117. 800fcfa: f44f 6280 mov.w r2, #1024 @ 0x400
  37118. 800fcfe: 601a str r2, [r3, #0]
  37119. }
  37120. 800fd00: bf00 nop
  37121. 800fd02: 3714 adds r7, #20
  37122. 800fd04: 46bd mov sp, r7
  37123. 800fd06: f85d 7b04 ldr.w r7, [sp], #4
  37124. 800fd0a: 4770 bx lr
  37125. 800fd0c: 2400130c .word 0x2400130c
  37126. 800fd10: 240013b4 .word 0x240013b4
  37127. 0800fd14 <vListInitialise>:
  37128. /*-----------------------------------------------------------
  37129. * PUBLIC LIST API documented in list.h
  37130. *----------------------------------------------------------*/
  37131. void vListInitialise( List_t * const pxList )
  37132. {
  37133. 800fd14: b480 push {r7}
  37134. 800fd16: b083 sub sp, #12
  37135. 800fd18: af00 add r7, sp, #0
  37136. 800fd1a: 6078 str r0, [r7, #4]
  37137. /* The list structure contains a list item which is used to mark the
  37138. end of the list. To initialise the list the list end is inserted
  37139. as the only list entry. */
  37140. 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. */
  37141. 800fd1c: 687b ldr r3, [r7, #4]
  37142. 800fd1e: f103 0208 add.w r2, r3, #8
  37143. 800fd22: 687b ldr r3, [r7, #4]
  37144. 800fd24: 605a str r2, [r3, #4]
  37145. /* The list end value is the highest possible value in the list to
  37146. ensure it remains at the end of the list. */
  37147. pxList->xListEnd.xItemValue = portMAX_DELAY;
  37148. 800fd26: 687b ldr r3, [r7, #4]
  37149. 800fd28: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
  37150. 800fd2c: 609a str r2, [r3, #8]
  37151. /* The list end next and previous pointers point to itself so we know
  37152. when the list is empty. */
  37153. 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. */
  37154. 800fd2e: 687b ldr r3, [r7, #4]
  37155. 800fd30: f103 0208 add.w r2, r3, #8
  37156. 800fd34: 687b ldr r3, [r7, #4]
  37157. 800fd36: 60da str r2, [r3, #12]
  37158. 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. */
  37159. 800fd38: 687b ldr r3, [r7, #4]
  37160. 800fd3a: f103 0208 add.w r2, r3, #8
  37161. 800fd3e: 687b ldr r3, [r7, #4]
  37162. 800fd40: 611a str r2, [r3, #16]
  37163. pxList->uxNumberOfItems = ( UBaseType_t ) 0U;
  37164. 800fd42: 687b ldr r3, [r7, #4]
  37165. 800fd44: 2200 movs r2, #0
  37166. 800fd46: 601a str r2, [r3, #0]
  37167. /* Write known values into the list if
  37168. configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
  37169. listSET_LIST_INTEGRITY_CHECK_1_VALUE( pxList );
  37170. listSET_LIST_INTEGRITY_CHECK_2_VALUE( pxList );
  37171. }
  37172. 800fd48: bf00 nop
  37173. 800fd4a: 370c adds r7, #12
  37174. 800fd4c: 46bd mov sp, r7
  37175. 800fd4e: f85d 7b04 ldr.w r7, [sp], #4
  37176. 800fd52: 4770 bx lr
  37177. 0800fd54 <vListInitialiseItem>:
  37178. /*-----------------------------------------------------------*/
  37179. void vListInitialiseItem( ListItem_t * const pxItem )
  37180. {
  37181. 800fd54: b480 push {r7}
  37182. 800fd56: b083 sub sp, #12
  37183. 800fd58: af00 add r7, sp, #0
  37184. 800fd5a: 6078 str r0, [r7, #4]
  37185. /* Make sure the list item is not recorded as being on a list. */
  37186. pxItem->pxContainer = NULL;
  37187. 800fd5c: 687b ldr r3, [r7, #4]
  37188. 800fd5e: 2200 movs r2, #0
  37189. 800fd60: 611a str r2, [r3, #16]
  37190. /* Write known values into the list item if
  37191. configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
  37192. listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem );
  37193. listSET_SECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem );
  37194. }
  37195. 800fd62: bf00 nop
  37196. 800fd64: 370c adds r7, #12
  37197. 800fd66: 46bd mov sp, r7
  37198. 800fd68: f85d 7b04 ldr.w r7, [sp], #4
  37199. 800fd6c: 4770 bx lr
  37200. 0800fd6e <vListInsertEnd>:
  37201. /*-----------------------------------------------------------*/
  37202. void vListInsertEnd( List_t * const pxList, ListItem_t * const pxNewListItem )
  37203. {
  37204. 800fd6e: b480 push {r7}
  37205. 800fd70: b085 sub sp, #20
  37206. 800fd72: af00 add r7, sp, #0
  37207. 800fd74: 6078 str r0, [r7, #4]
  37208. 800fd76: 6039 str r1, [r7, #0]
  37209. ListItem_t * const pxIndex = pxList->pxIndex;
  37210. 800fd78: 687b ldr r3, [r7, #4]
  37211. 800fd7a: 685b ldr r3, [r3, #4]
  37212. 800fd7c: 60fb str r3, [r7, #12]
  37213. listTEST_LIST_ITEM_INTEGRITY( pxNewListItem );
  37214. /* Insert a new list item into pxList, but rather than sort the list,
  37215. makes the new list item the last item to be removed by a call to
  37216. listGET_OWNER_OF_NEXT_ENTRY(). */
  37217. pxNewListItem->pxNext = pxIndex;
  37218. 800fd7e: 683b ldr r3, [r7, #0]
  37219. 800fd80: 68fa ldr r2, [r7, #12]
  37220. 800fd82: 605a str r2, [r3, #4]
  37221. pxNewListItem->pxPrevious = pxIndex->pxPrevious;
  37222. 800fd84: 68fb ldr r3, [r7, #12]
  37223. 800fd86: 689a ldr r2, [r3, #8]
  37224. 800fd88: 683b ldr r3, [r7, #0]
  37225. 800fd8a: 609a str r2, [r3, #8]
  37226. /* Only used during decision coverage testing. */
  37227. mtCOVERAGE_TEST_DELAY();
  37228. pxIndex->pxPrevious->pxNext = pxNewListItem;
  37229. 800fd8c: 68fb ldr r3, [r7, #12]
  37230. 800fd8e: 689b ldr r3, [r3, #8]
  37231. 800fd90: 683a ldr r2, [r7, #0]
  37232. 800fd92: 605a str r2, [r3, #4]
  37233. pxIndex->pxPrevious = pxNewListItem;
  37234. 800fd94: 68fb ldr r3, [r7, #12]
  37235. 800fd96: 683a ldr r2, [r7, #0]
  37236. 800fd98: 609a str r2, [r3, #8]
  37237. /* Remember which list the item is in. */
  37238. pxNewListItem->pxContainer = pxList;
  37239. 800fd9a: 683b ldr r3, [r7, #0]
  37240. 800fd9c: 687a ldr r2, [r7, #4]
  37241. 800fd9e: 611a str r2, [r3, #16]
  37242. ( pxList->uxNumberOfItems )++;
  37243. 800fda0: 687b ldr r3, [r7, #4]
  37244. 800fda2: 681b ldr r3, [r3, #0]
  37245. 800fda4: 1c5a adds r2, r3, #1
  37246. 800fda6: 687b ldr r3, [r7, #4]
  37247. 800fda8: 601a str r2, [r3, #0]
  37248. }
  37249. 800fdaa: bf00 nop
  37250. 800fdac: 3714 adds r7, #20
  37251. 800fdae: 46bd mov sp, r7
  37252. 800fdb0: f85d 7b04 ldr.w r7, [sp], #4
  37253. 800fdb4: 4770 bx lr
  37254. 0800fdb6 <vListInsert>:
  37255. /*-----------------------------------------------------------*/
  37256. void vListInsert( List_t * const pxList, ListItem_t * const pxNewListItem )
  37257. {
  37258. 800fdb6: b480 push {r7}
  37259. 800fdb8: b085 sub sp, #20
  37260. 800fdba: af00 add r7, sp, #0
  37261. 800fdbc: 6078 str r0, [r7, #4]
  37262. 800fdbe: 6039 str r1, [r7, #0]
  37263. ListItem_t *pxIterator;
  37264. const TickType_t xValueOfInsertion = pxNewListItem->xItemValue;
  37265. 800fdc0: 683b ldr r3, [r7, #0]
  37266. 800fdc2: 681b ldr r3, [r3, #0]
  37267. 800fdc4: 60bb str r3, [r7, #8]
  37268. new list item should be placed after it. This ensures that TCBs which are
  37269. stored in ready lists (all of which have the same xItemValue value) get a
  37270. share of the CPU. However, if the xItemValue is the same as the back marker
  37271. the iteration loop below will not end. Therefore the value is checked
  37272. first, and the algorithm slightly modified if necessary. */
  37273. if( xValueOfInsertion == portMAX_DELAY )
  37274. 800fdc6: 68bb ldr r3, [r7, #8]
  37275. 800fdc8: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  37276. 800fdcc: d103 bne.n 800fdd6 <vListInsert+0x20>
  37277. {
  37278. pxIterator = pxList->xListEnd.pxPrevious;
  37279. 800fdce: 687b ldr r3, [r7, #4]
  37280. 800fdd0: 691b ldr r3, [r3, #16]
  37281. 800fdd2: 60fb str r3, [r7, #12]
  37282. 800fdd4: e00c b.n 800fdf0 <vListInsert+0x3a>
  37283. 4) Using a queue or semaphore before it has been initialised or
  37284. before the scheduler has been started (are interrupts firing
  37285. before vTaskStartScheduler() has been called?).
  37286. **********************************************************************/
  37287. 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. */
  37288. 800fdd6: 687b ldr r3, [r7, #4]
  37289. 800fdd8: 3308 adds r3, #8
  37290. 800fdda: 60fb str r3, [r7, #12]
  37291. 800fddc: e002 b.n 800fde4 <vListInsert+0x2e>
  37292. 800fdde: 68fb ldr r3, [r7, #12]
  37293. 800fde0: 685b ldr r3, [r3, #4]
  37294. 800fde2: 60fb str r3, [r7, #12]
  37295. 800fde4: 68fb ldr r3, [r7, #12]
  37296. 800fde6: 685b ldr r3, [r3, #4]
  37297. 800fde8: 681b ldr r3, [r3, #0]
  37298. 800fdea: 68ba ldr r2, [r7, #8]
  37299. 800fdec: 429a cmp r2, r3
  37300. 800fdee: d2f6 bcs.n 800fdde <vListInsert+0x28>
  37301. /* There is nothing to do here, just iterating to the wanted
  37302. insertion position. */
  37303. }
  37304. }
  37305. pxNewListItem->pxNext = pxIterator->pxNext;
  37306. 800fdf0: 68fb ldr r3, [r7, #12]
  37307. 800fdf2: 685a ldr r2, [r3, #4]
  37308. 800fdf4: 683b ldr r3, [r7, #0]
  37309. 800fdf6: 605a str r2, [r3, #4]
  37310. pxNewListItem->pxNext->pxPrevious = pxNewListItem;
  37311. 800fdf8: 683b ldr r3, [r7, #0]
  37312. 800fdfa: 685b ldr r3, [r3, #4]
  37313. 800fdfc: 683a ldr r2, [r7, #0]
  37314. 800fdfe: 609a str r2, [r3, #8]
  37315. pxNewListItem->pxPrevious = pxIterator;
  37316. 800fe00: 683b ldr r3, [r7, #0]
  37317. 800fe02: 68fa ldr r2, [r7, #12]
  37318. 800fe04: 609a str r2, [r3, #8]
  37319. pxIterator->pxNext = pxNewListItem;
  37320. 800fe06: 68fb ldr r3, [r7, #12]
  37321. 800fe08: 683a ldr r2, [r7, #0]
  37322. 800fe0a: 605a str r2, [r3, #4]
  37323. /* Remember which list the item is in. This allows fast removal of the
  37324. item later. */
  37325. pxNewListItem->pxContainer = pxList;
  37326. 800fe0c: 683b ldr r3, [r7, #0]
  37327. 800fe0e: 687a ldr r2, [r7, #4]
  37328. 800fe10: 611a str r2, [r3, #16]
  37329. ( pxList->uxNumberOfItems )++;
  37330. 800fe12: 687b ldr r3, [r7, #4]
  37331. 800fe14: 681b ldr r3, [r3, #0]
  37332. 800fe16: 1c5a adds r2, r3, #1
  37333. 800fe18: 687b ldr r3, [r7, #4]
  37334. 800fe1a: 601a str r2, [r3, #0]
  37335. }
  37336. 800fe1c: bf00 nop
  37337. 800fe1e: 3714 adds r7, #20
  37338. 800fe20: 46bd mov sp, r7
  37339. 800fe22: f85d 7b04 ldr.w r7, [sp], #4
  37340. 800fe26: 4770 bx lr
  37341. 0800fe28 <uxListRemove>:
  37342. /*-----------------------------------------------------------*/
  37343. UBaseType_t uxListRemove( ListItem_t * const pxItemToRemove )
  37344. {
  37345. 800fe28: b480 push {r7}
  37346. 800fe2a: b085 sub sp, #20
  37347. 800fe2c: af00 add r7, sp, #0
  37348. 800fe2e: 6078 str r0, [r7, #4]
  37349. /* The list item knows which list it is in. Obtain the list from the list
  37350. item. */
  37351. List_t * const pxList = pxItemToRemove->pxContainer;
  37352. 800fe30: 687b ldr r3, [r7, #4]
  37353. 800fe32: 691b ldr r3, [r3, #16]
  37354. 800fe34: 60fb str r3, [r7, #12]
  37355. pxItemToRemove->pxNext->pxPrevious = pxItemToRemove->pxPrevious;
  37356. 800fe36: 687b ldr r3, [r7, #4]
  37357. 800fe38: 685b ldr r3, [r3, #4]
  37358. 800fe3a: 687a ldr r2, [r7, #4]
  37359. 800fe3c: 6892 ldr r2, [r2, #8]
  37360. 800fe3e: 609a str r2, [r3, #8]
  37361. pxItemToRemove->pxPrevious->pxNext = pxItemToRemove->pxNext;
  37362. 800fe40: 687b ldr r3, [r7, #4]
  37363. 800fe42: 689b ldr r3, [r3, #8]
  37364. 800fe44: 687a ldr r2, [r7, #4]
  37365. 800fe46: 6852 ldr r2, [r2, #4]
  37366. 800fe48: 605a str r2, [r3, #4]
  37367. /* Only used during decision coverage testing. */
  37368. mtCOVERAGE_TEST_DELAY();
  37369. /* Make sure the index is left pointing to a valid item. */
  37370. if( pxList->pxIndex == pxItemToRemove )
  37371. 800fe4a: 68fb ldr r3, [r7, #12]
  37372. 800fe4c: 685b ldr r3, [r3, #4]
  37373. 800fe4e: 687a ldr r2, [r7, #4]
  37374. 800fe50: 429a cmp r2, r3
  37375. 800fe52: d103 bne.n 800fe5c <uxListRemove+0x34>
  37376. {
  37377. pxList->pxIndex = pxItemToRemove->pxPrevious;
  37378. 800fe54: 687b ldr r3, [r7, #4]
  37379. 800fe56: 689a ldr r2, [r3, #8]
  37380. 800fe58: 68fb ldr r3, [r7, #12]
  37381. 800fe5a: 605a str r2, [r3, #4]
  37382. else
  37383. {
  37384. mtCOVERAGE_TEST_MARKER();
  37385. }
  37386. pxItemToRemove->pxContainer = NULL;
  37387. 800fe5c: 687b ldr r3, [r7, #4]
  37388. 800fe5e: 2200 movs r2, #0
  37389. 800fe60: 611a str r2, [r3, #16]
  37390. ( pxList->uxNumberOfItems )--;
  37391. 800fe62: 68fb ldr r3, [r7, #12]
  37392. 800fe64: 681b ldr r3, [r3, #0]
  37393. 800fe66: 1e5a subs r2, r3, #1
  37394. 800fe68: 68fb ldr r3, [r7, #12]
  37395. 800fe6a: 601a str r2, [r3, #0]
  37396. return pxList->uxNumberOfItems;
  37397. 800fe6c: 68fb ldr r3, [r7, #12]
  37398. 800fe6e: 681b ldr r3, [r3, #0]
  37399. }
  37400. 800fe70: 4618 mov r0, r3
  37401. 800fe72: 3714 adds r7, #20
  37402. 800fe74: 46bd mov sp, r7
  37403. 800fe76: f85d 7b04 ldr.w r7, [sp], #4
  37404. 800fe7a: 4770 bx lr
  37405. 0800fe7c <xQueueGenericReset>:
  37406. } \
  37407. taskEXIT_CRITICAL()
  37408. /*-----------------------------------------------------------*/
  37409. BaseType_t xQueueGenericReset( QueueHandle_t xQueue, BaseType_t xNewQueue )
  37410. {
  37411. 800fe7c: b580 push {r7, lr}
  37412. 800fe7e: b084 sub sp, #16
  37413. 800fe80: af00 add r7, sp, #0
  37414. 800fe82: 6078 str r0, [r7, #4]
  37415. 800fe84: 6039 str r1, [r7, #0]
  37416. Queue_t * const pxQueue = xQueue;
  37417. 800fe86: 687b ldr r3, [r7, #4]
  37418. 800fe88: 60fb str r3, [r7, #12]
  37419. configASSERT( pxQueue );
  37420. 800fe8a: 68fb ldr r3, [r7, #12]
  37421. 800fe8c: 2b00 cmp r3, #0
  37422. 800fe8e: d10b bne.n 800fea8 <xQueueGenericReset+0x2c>
  37423. portFORCE_INLINE static void vPortRaiseBASEPRI( void )
  37424. {
  37425. uint32_t ulNewBASEPRI;
  37426. __asm volatile
  37427. 800fe90: f04f 0350 mov.w r3, #80 @ 0x50
  37428. 800fe94: f383 8811 msr BASEPRI, r3
  37429. 800fe98: f3bf 8f6f isb sy
  37430. 800fe9c: f3bf 8f4f dsb sy
  37431. 800fea0: 60bb str r3, [r7, #8]
  37432. " msr basepri, %0 \n" \
  37433. " isb \n" \
  37434. " dsb \n" \
  37435. :"=r" (ulNewBASEPRI) : "i" ( configMAX_SYSCALL_INTERRUPT_PRIORITY ) : "memory"
  37436. );
  37437. }
  37438. 800fea2: bf00 nop
  37439. 800fea4: bf00 nop
  37440. 800fea6: e7fd b.n 800fea4 <xQueueGenericReset+0x28>
  37441. taskENTER_CRITICAL();
  37442. 800fea8: f003 f876 bl 8012f98 <vPortEnterCritical>
  37443. {
  37444. pxQueue->u.xQueue.pcTail = pxQueue->pcHead + ( pxQueue->uxLength * pxQueue->uxItemSize ); /*lint !e9016 Pointer arithmetic allowed on char types, especially when it assists conveying intent. */
  37445. 800feac: 68fb ldr r3, [r7, #12]
  37446. 800feae: 681a ldr r2, [r3, #0]
  37447. 800feb0: 68fb ldr r3, [r7, #12]
  37448. 800feb2: 6bdb ldr r3, [r3, #60] @ 0x3c
  37449. 800feb4: 68f9 ldr r1, [r7, #12]
  37450. 800feb6: 6c09 ldr r1, [r1, #64] @ 0x40
  37451. 800feb8: fb01 f303 mul.w r3, r1, r3
  37452. 800febc: 441a add r2, r3
  37453. 800febe: 68fb ldr r3, [r7, #12]
  37454. 800fec0: 609a str r2, [r3, #8]
  37455. pxQueue->uxMessagesWaiting = ( UBaseType_t ) 0U;
  37456. 800fec2: 68fb ldr r3, [r7, #12]
  37457. 800fec4: 2200 movs r2, #0
  37458. 800fec6: 639a str r2, [r3, #56] @ 0x38
  37459. pxQueue->pcWriteTo = pxQueue->pcHead;
  37460. 800fec8: 68fb ldr r3, [r7, #12]
  37461. 800feca: 681a ldr r2, [r3, #0]
  37462. 800fecc: 68fb ldr r3, [r7, #12]
  37463. 800fece: 605a str r2, [r3, #4]
  37464. 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. */
  37465. 800fed0: 68fb ldr r3, [r7, #12]
  37466. 800fed2: 681a ldr r2, [r3, #0]
  37467. 800fed4: 68fb ldr r3, [r7, #12]
  37468. 800fed6: 6bdb ldr r3, [r3, #60] @ 0x3c
  37469. 800fed8: 3b01 subs r3, #1
  37470. 800feda: 68f9 ldr r1, [r7, #12]
  37471. 800fedc: 6c09 ldr r1, [r1, #64] @ 0x40
  37472. 800fede: fb01 f303 mul.w r3, r1, r3
  37473. 800fee2: 441a add r2, r3
  37474. 800fee4: 68fb ldr r3, [r7, #12]
  37475. 800fee6: 60da str r2, [r3, #12]
  37476. pxQueue->cRxLock = queueUNLOCKED;
  37477. 800fee8: 68fb ldr r3, [r7, #12]
  37478. 800feea: 22ff movs r2, #255 @ 0xff
  37479. 800feec: f883 2044 strb.w r2, [r3, #68] @ 0x44
  37480. pxQueue->cTxLock = queueUNLOCKED;
  37481. 800fef0: 68fb ldr r3, [r7, #12]
  37482. 800fef2: 22ff movs r2, #255 @ 0xff
  37483. 800fef4: f883 2045 strb.w r2, [r3, #69] @ 0x45
  37484. if( xNewQueue == pdFALSE )
  37485. 800fef8: 683b ldr r3, [r7, #0]
  37486. 800fefa: 2b00 cmp r3, #0
  37487. 800fefc: d114 bne.n 800ff28 <xQueueGenericReset+0xac>
  37488. /* If there are tasks blocked waiting to read from the queue, then
  37489. the tasks will remain blocked as after this function exits the queue
  37490. will still be empty. If there are tasks blocked waiting to write to
  37491. the queue, then one should be unblocked as after this function exits
  37492. it will be possible to write to it. */
  37493. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )
  37494. 800fefe: 68fb ldr r3, [r7, #12]
  37495. 800ff00: 691b ldr r3, [r3, #16]
  37496. 800ff02: 2b00 cmp r3, #0
  37497. 800ff04: d01a beq.n 800ff3c <xQueueGenericReset+0xc0>
  37498. {
  37499. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE )
  37500. 800ff06: 68fb ldr r3, [r7, #12]
  37501. 800ff08: 3310 adds r3, #16
  37502. 800ff0a: 4618 mov r0, r3
  37503. 800ff0c: f001 fdac bl 8011a68 <xTaskRemoveFromEventList>
  37504. 800ff10: 4603 mov r3, r0
  37505. 800ff12: 2b00 cmp r3, #0
  37506. 800ff14: d012 beq.n 800ff3c <xQueueGenericReset+0xc0>
  37507. {
  37508. queueYIELD_IF_USING_PREEMPTION();
  37509. 800ff16: 4b0d ldr r3, [pc, #52] @ (800ff4c <xQueueGenericReset+0xd0>)
  37510. 800ff18: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  37511. 800ff1c: 601a str r2, [r3, #0]
  37512. 800ff1e: f3bf 8f4f dsb sy
  37513. 800ff22: f3bf 8f6f isb sy
  37514. 800ff26: e009 b.n 800ff3c <xQueueGenericReset+0xc0>
  37515. }
  37516. }
  37517. else
  37518. {
  37519. /* Ensure the event queues start in the correct state. */
  37520. vListInitialise( &( pxQueue->xTasksWaitingToSend ) );
  37521. 800ff28: 68fb ldr r3, [r7, #12]
  37522. 800ff2a: 3310 adds r3, #16
  37523. 800ff2c: 4618 mov r0, r3
  37524. 800ff2e: f7ff fef1 bl 800fd14 <vListInitialise>
  37525. vListInitialise( &( pxQueue->xTasksWaitingToReceive ) );
  37526. 800ff32: 68fb ldr r3, [r7, #12]
  37527. 800ff34: 3324 adds r3, #36 @ 0x24
  37528. 800ff36: 4618 mov r0, r3
  37529. 800ff38: f7ff feec bl 800fd14 <vListInitialise>
  37530. }
  37531. }
  37532. taskEXIT_CRITICAL();
  37533. 800ff3c: f003 f85e bl 8012ffc <vPortExitCritical>
  37534. /* A value is returned for calling semantic consistency with previous
  37535. versions. */
  37536. return pdPASS;
  37537. 800ff40: 2301 movs r3, #1
  37538. }
  37539. 800ff42: 4618 mov r0, r3
  37540. 800ff44: 3710 adds r7, #16
  37541. 800ff46: 46bd mov sp, r7
  37542. 800ff48: bd80 pop {r7, pc}
  37543. 800ff4a: bf00 nop
  37544. 800ff4c: e000ed04 .word 0xe000ed04
  37545. 0800ff50 <xQueueGenericCreateStatic>:
  37546. /*-----------------------------------------------------------*/
  37547. #if( configSUPPORT_STATIC_ALLOCATION == 1 )
  37548. QueueHandle_t xQueueGenericCreateStatic( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, uint8_t *pucQueueStorage, StaticQueue_t *pxStaticQueue, const uint8_t ucQueueType )
  37549. {
  37550. 800ff50: b580 push {r7, lr}
  37551. 800ff52: b08e sub sp, #56 @ 0x38
  37552. 800ff54: af02 add r7, sp, #8
  37553. 800ff56: 60f8 str r0, [r7, #12]
  37554. 800ff58: 60b9 str r1, [r7, #8]
  37555. 800ff5a: 607a str r2, [r7, #4]
  37556. 800ff5c: 603b str r3, [r7, #0]
  37557. Queue_t *pxNewQueue;
  37558. configASSERT( uxQueueLength > ( UBaseType_t ) 0 );
  37559. 800ff5e: 68fb ldr r3, [r7, #12]
  37560. 800ff60: 2b00 cmp r3, #0
  37561. 800ff62: d10b bne.n 800ff7c <xQueueGenericCreateStatic+0x2c>
  37562. __asm volatile
  37563. 800ff64: f04f 0350 mov.w r3, #80 @ 0x50
  37564. 800ff68: f383 8811 msr BASEPRI, r3
  37565. 800ff6c: f3bf 8f6f isb sy
  37566. 800ff70: f3bf 8f4f dsb sy
  37567. 800ff74: 62bb str r3, [r7, #40] @ 0x28
  37568. }
  37569. 800ff76: bf00 nop
  37570. 800ff78: bf00 nop
  37571. 800ff7a: e7fd b.n 800ff78 <xQueueGenericCreateStatic+0x28>
  37572. /* The StaticQueue_t structure and the queue storage area must be
  37573. supplied. */
  37574. configASSERT( pxStaticQueue != NULL );
  37575. 800ff7c: 683b ldr r3, [r7, #0]
  37576. 800ff7e: 2b00 cmp r3, #0
  37577. 800ff80: d10b bne.n 800ff9a <xQueueGenericCreateStatic+0x4a>
  37578. __asm volatile
  37579. 800ff82: f04f 0350 mov.w r3, #80 @ 0x50
  37580. 800ff86: f383 8811 msr BASEPRI, r3
  37581. 800ff8a: f3bf 8f6f isb sy
  37582. 800ff8e: f3bf 8f4f dsb sy
  37583. 800ff92: 627b str r3, [r7, #36] @ 0x24
  37584. }
  37585. 800ff94: bf00 nop
  37586. 800ff96: bf00 nop
  37587. 800ff98: e7fd b.n 800ff96 <xQueueGenericCreateStatic+0x46>
  37588. /* A queue storage area should be provided if the item size is not 0, and
  37589. should not be provided if the item size is 0. */
  37590. configASSERT( !( ( pucQueueStorage != NULL ) && ( uxItemSize == 0 ) ) );
  37591. 800ff9a: 687b ldr r3, [r7, #4]
  37592. 800ff9c: 2b00 cmp r3, #0
  37593. 800ff9e: d002 beq.n 800ffa6 <xQueueGenericCreateStatic+0x56>
  37594. 800ffa0: 68bb ldr r3, [r7, #8]
  37595. 800ffa2: 2b00 cmp r3, #0
  37596. 800ffa4: d001 beq.n 800ffaa <xQueueGenericCreateStatic+0x5a>
  37597. 800ffa6: 2301 movs r3, #1
  37598. 800ffa8: e000 b.n 800ffac <xQueueGenericCreateStatic+0x5c>
  37599. 800ffaa: 2300 movs r3, #0
  37600. 800ffac: 2b00 cmp r3, #0
  37601. 800ffae: d10b bne.n 800ffc8 <xQueueGenericCreateStatic+0x78>
  37602. __asm volatile
  37603. 800ffb0: f04f 0350 mov.w r3, #80 @ 0x50
  37604. 800ffb4: f383 8811 msr BASEPRI, r3
  37605. 800ffb8: f3bf 8f6f isb sy
  37606. 800ffbc: f3bf 8f4f dsb sy
  37607. 800ffc0: 623b str r3, [r7, #32]
  37608. }
  37609. 800ffc2: bf00 nop
  37610. 800ffc4: bf00 nop
  37611. 800ffc6: e7fd b.n 800ffc4 <xQueueGenericCreateStatic+0x74>
  37612. configASSERT( !( ( pucQueueStorage == NULL ) && ( uxItemSize != 0 ) ) );
  37613. 800ffc8: 687b ldr r3, [r7, #4]
  37614. 800ffca: 2b00 cmp r3, #0
  37615. 800ffcc: d102 bne.n 800ffd4 <xQueueGenericCreateStatic+0x84>
  37616. 800ffce: 68bb ldr r3, [r7, #8]
  37617. 800ffd0: 2b00 cmp r3, #0
  37618. 800ffd2: d101 bne.n 800ffd8 <xQueueGenericCreateStatic+0x88>
  37619. 800ffd4: 2301 movs r3, #1
  37620. 800ffd6: e000 b.n 800ffda <xQueueGenericCreateStatic+0x8a>
  37621. 800ffd8: 2300 movs r3, #0
  37622. 800ffda: 2b00 cmp r3, #0
  37623. 800ffdc: d10b bne.n 800fff6 <xQueueGenericCreateStatic+0xa6>
  37624. __asm volatile
  37625. 800ffde: f04f 0350 mov.w r3, #80 @ 0x50
  37626. 800ffe2: f383 8811 msr BASEPRI, r3
  37627. 800ffe6: f3bf 8f6f isb sy
  37628. 800ffea: f3bf 8f4f dsb sy
  37629. 800ffee: 61fb str r3, [r7, #28]
  37630. }
  37631. 800fff0: bf00 nop
  37632. 800fff2: bf00 nop
  37633. 800fff4: e7fd b.n 800fff2 <xQueueGenericCreateStatic+0xa2>
  37634. #if( configASSERT_DEFINED == 1 )
  37635. {
  37636. /* Sanity check that the size of the structure used to declare a
  37637. variable of type StaticQueue_t or StaticSemaphore_t equals the size of
  37638. the real queue and semaphore structures. */
  37639. volatile size_t xSize = sizeof( StaticQueue_t );
  37640. 800fff6: 2350 movs r3, #80 @ 0x50
  37641. 800fff8: 617b str r3, [r7, #20]
  37642. configASSERT( xSize == sizeof( Queue_t ) );
  37643. 800fffa: 697b ldr r3, [r7, #20]
  37644. 800fffc: 2b50 cmp r3, #80 @ 0x50
  37645. 800fffe: d00b beq.n 8010018 <xQueueGenericCreateStatic+0xc8>
  37646. __asm volatile
  37647. 8010000: f04f 0350 mov.w r3, #80 @ 0x50
  37648. 8010004: f383 8811 msr BASEPRI, r3
  37649. 8010008: f3bf 8f6f isb sy
  37650. 801000c: f3bf 8f4f dsb sy
  37651. 8010010: 61bb str r3, [r7, #24]
  37652. }
  37653. 8010012: bf00 nop
  37654. 8010014: bf00 nop
  37655. 8010016: e7fd b.n 8010014 <xQueueGenericCreateStatic+0xc4>
  37656. ( void ) xSize; /* Keeps lint quiet when configASSERT() is not defined. */
  37657. 8010018: 697b ldr r3, [r7, #20]
  37658. #endif /* configASSERT_DEFINED */
  37659. /* The address of a statically allocated queue was passed in, use it.
  37660. The address of a statically allocated storage area was also passed in
  37661. but is already set. */
  37662. 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. */
  37663. 801001a: 683b ldr r3, [r7, #0]
  37664. 801001c: 62fb str r3, [r7, #44] @ 0x2c
  37665. if( pxNewQueue != NULL )
  37666. 801001e: 6afb ldr r3, [r7, #44] @ 0x2c
  37667. 8010020: 2b00 cmp r3, #0
  37668. 8010022: d00d beq.n 8010040 <xQueueGenericCreateStatic+0xf0>
  37669. #if( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
  37670. {
  37671. /* Queues can be allocated wither statically or dynamically, so
  37672. note this queue was allocated statically in case the queue is
  37673. later deleted. */
  37674. pxNewQueue->ucStaticallyAllocated = pdTRUE;
  37675. 8010024: 6afb ldr r3, [r7, #44] @ 0x2c
  37676. 8010026: 2201 movs r2, #1
  37677. 8010028: f883 2046 strb.w r2, [r3, #70] @ 0x46
  37678. }
  37679. #endif /* configSUPPORT_DYNAMIC_ALLOCATION */
  37680. prvInitialiseNewQueue( uxQueueLength, uxItemSize, pucQueueStorage, ucQueueType, pxNewQueue );
  37681. 801002c: f897 2038 ldrb.w r2, [r7, #56] @ 0x38
  37682. 8010030: 6afb ldr r3, [r7, #44] @ 0x2c
  37683. 8010032: 9300 str r3, [sp, #0]
  37684. 8010034: 4613 mov r3, r2
  37685. 8010036: 687a ldr r2, [r7, #4]
  37686. 8010038: 68b9 ldr r1, [r7, #8]
  37687. 801003a: 68f8 ldr r0, [r7, #12]
  37688. 801003c: f000 f840 bl 80100c0 <prvInitialiseNewQueue>
  37689. {
  37690. traceQUEUE_CREATE_FAILED( ucQueueType );
  37691. mtCOVERAGE_TEST_MARKER();
  37692. }
  37693. return pxNewQueue;
  37694. 8010040: 6afb ldr r3, [r7, #44] @ 0x2c
  37695. }
  37696. 8010042: 4618 mov r0, r3
  37697. 8010044: 3730 adds r7, #48 @ 0x30
  37698. 8010046: 46bd mov sp, r7
  37699. 8010048: bd80 pop {r7, pc}
  37700. 0801004a <xQueueGenericCreate>:
  37701. /*-----------------------------------------------------------*/
  37702. #if( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
  37703. QueueHandle_t xQueueGenericCreate( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, const uint8_t ucQueueType )
  37704. {
  37705. 801004a: b580 push {r7, lr}
  37706. 801004c: b08a sub sp, #40 @ 0x28
  37707. 801004e: af02 add r7, sp, #8
  37708. 8010050: 60f8 str r0, [r7, #12]
  37709. 8010052: 60b9 str r1, [r7, #8]
  37710. 8010054: 4613 mov r3, r2
  37711. 8010056: 71fb strb r3, [r7, #7]
  37712. Queue_t *pxNewQueue;
  37713. size_t xQueueSizeInBytes;
  37714. uint8_t *pucQueueStorage;
  37715. configASSERT( uxQueueLength > ( UBaseType_t ) 0 );
  37716. 8010058: 68fb ldr r3, [r7, #12]
  37717. 801005a: 2b00 cmp r3, #0
  37718. 801005c: d10b bne.n 8010076 <xQueueGenericCreate+0x2c>
  37719. __asm volatile
  37720. 801005e: f04f 0350 mov.w r3, #80 @ 0x50
  37721. 8010062: f383 8811 msr BASEPRI, r3
  37722. 8010066: f3bf 8f6f isb sy
  37723. 801006a: f3bf 8f4f dsb sy
  37724. 801006e: 613b str r3, [r7, #16]
  37725. }
  37726. 8010070: bf00 nop
  37727. 8010072: bf00 nop
  37728. 8010074: e7fd b.n 8010072 <xQueueGenericCreate+0x28>
  37729. /* Allocate enough space to hold the maximum number of items that
  37730. can be in the queue at any time. It is valid for uxItemSize to be
  37731. zero in the case the queue is used as a semaphore. */
  37732. xQueueSizeInBytes = ( size_t ) ( uxQueueLength * uxItemSize ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */
  37733. 8010076: 68fb ldr r3, [r7, #12]
  37734. 8010078: 68ba ldr r2, [r7, #8]
  37735. 801007a: fb02 f303 mul.w r3, r2, r3
  37736. 801007e: 61fb str r3, [r7, #28]
  37737. alignment requirements of the Queue_t structure - which in this case
  37738. is an int8_t *. Therefore, whenever the stack alignment requirements
  37739. are greater than or equal to the pointer to char requirements the cast
  37740. is safe. In other cases alignment requirements are not strict (one or
  37741. two bytes). */
  37742. pxNewQueue = ( Queue_t * ) pvPortMalloc( sizeof( Queue_t ) + xQueueSizeInBytes ); /*lint !e9087 !e9079 see comment above. */
  37743. 8010080: 69fb ldr r3, [r7, #28]
  37744. 8010082: 3350 adds r3, #80 @ 0x50
  37745. 8010084: 4618 mov r0, r3
  37746. 8010086: f003 f8a9 bl 80131dc <pvPortMalloc>
  37747. 801008a: 61b8 str r0, [r7, #24]
  37748. if( pxNewQueue != NULL )
  37749. 801008c: 69bb ldr r3, [r7, #24]
  37750. 801008e: 2b00 cmp r3, #0
  37751. 8010090: d011 beq.n 80100b6 <xQueueGenericCreate+0x6c>
  37752. {
  37753. /* Jump past the queue structure to find the location of the queue
  37754. storage area. */
  37755. pucQueueStorage = ( uint8_t * ) pxNewQueue;
  37756. 8010092: 69bb ldr r3, [r7, #24]
  37757. 8010094: 617b str r3, [r7, #20]
  37758. pucQueueStorage += sizeof( Queue_t ); /*lint !e9016 Pointer arithmetic allowed on char types, especially when it assists conveying intent. */
  37759. 8010096: 697b ldr r3, [r7, #20]
  37760. 8010098: 3350 adds r3, #80 @ 0x50
  37761. 801009a: 617b str r3, [r7, #20]
  37762. #if( configSUPPORT_STATIC_ALLOCATION == 1 )
  37763. {
  37764. /* Queues can be created either statically or dynamically, so
  37765. note this task was created dynamically in case it is later
  37766. deleted. */
  37767. pxNewQueue->ucStaticallyAllocated = pdFALSE;
  37768. 801009c: 69bb ldr r3, [r7, #24]
  37769. 801009e: 2200 movs r2, #0
  37770. 80100a0: f883 2046 strb.w r2, [r3, #70] @ 0x46
  37771. }
  37772. #endif /* configSUPPORT_STATIC_ALLOCATION */
  37773. prvInitialiseNewQueue( uxQueueLength, uxItemSize, pucQueueStorage, ucQueueType, pxNewQueue );
  37774. 80100a4: 79fa ldrb r2, [r7, #7]
  37775. 80100a6: 69bb ldr r3, [r7, #24]
  37776. 80100a8: 9300 str r3, [sp, #0]
  37777. 80100aa: 4613 mov r3, r2
  37778. 80100ac: 697a ldr r2, [r7, #20]
  37779. 80100ae: 68b9 ldr r1, [r7, #8]
  37780. 80100b0: 68f8 ldr r0, [r7, #12]
  37781. 80100b2: f000 f805 bl 80100c0 <prvInitialiseNewQueue>
  37782. {
  37783. traceQUEUE_CREATE_FAILED( ucQueueType );
  37784. mtCOVERAGE_TEST_MARKER();
  37785. }
  37786. return pxNewQueue;
  37787. 80100b6: 69bb ldr r3, [r7, #24]
  37788. }
  37789. 80100b8: 4618 mov r0, r3
  37790. 80100ba: 3720 adds r7, #32
  37791. 80100bc: 46bd mov sp, r7
  37792. 80100be: bd80 pop {r7, pc}
  37793. 080100c0 <prvInitialiseNewQueue>:
  37794. #endif /* configSUPPORT_STATIC_ALLOCATION */
  37795. /*-----------------------------------------------------------*/
  37796. static void prvInitialiseNewQueue( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, uint8_t *pucQueueStorage, const uint8_t ucQueueType, Queue_t *pxNewQueue )
  37797. {
  37798. 80100c0: b580 push {r7, lr}
  37799. 80100c2: b084 sub sp, #16
  37800. 80100c4: af00 add r7, sp, #0
  37801. 80100c6: 60f8 str r0, [r7, #12]
  37802. 80100c8: 60b9 str r1, [r7, #8]
  37803. 80100ca: 607a str r2, [r7, #4]
  37804. 80100cc: 70fb strb r3, [r7, #3]
  37805. /* Remove compiler warnings about unused parameters should
  37806. configUSE_TRACE_FACILITY not be set to 1. */
  37807. ( void ) ucQueueType;
  37808. if( uxItemSize == ( UBaseType_t ) 0 )
  37809. 80100ce: 68bb ldr r3, [r7, #8]
  37810. 80100d0: 2b00 cmp r3, #0
  37811. 80100d2: d103 bne.n 80100dc <prvInitialiseNewQueue+0x1c>
  37812. {
  37813. /* No RAM was allocated for the queue storage area, but PC head cannot
  37814. be set to NULL because NULL is used as a key to say the queue is used as
  37815. a mutex. Therefore just set pcHead to point to the queue as a benign
  37816. value that is known to be within the memory map. */
  37817. pxNewQueue->pcHead = ( int8_t * ) pxNewQueue;
  37818. 80100d4: 69bb ldr r3, [r7, #24]
  37819. 80100d6: 69ba ldr r2, [r7, #24]
  37820. 80100d8: 601a str r2, [r3, #0]
  37821. 80100da: e002 b.n 80100e2 <prvInitialiseNewQueue+0x22>
  37822. }
  37823. else
  37824. {
  37825. /* Set the head to the start of the queue storage area. */
  37826. pxNewQueue->pcHead = ( int8_t * ) pucQueueStorage;
  37827. 80100dc: 69bb ldr r3, [r7, #24]
  37828. 80100de: 687a ldr r2, [r7, #4]
  37829. 80100e0: 601a str r2, [r3, #0]
  37830. }
  37831. /* Initialise the queue members as described where the queue type is
  37832. defined. */
  37833. pxNewQueue->uxLength = uxQueueLength;
  37834. 80100e2: 69bb ldr r3, [r7, #24]
  37835. 80100e4: 68fa ldr r2, [r7, #12]
  37836. 80100e6: 63da str r2, [r3, #60] @ 0x3c
  37837. pxNewQueue->uxItemSize = uxItemSize;
  37838. 80100e8: 69bb ldr r3, [r7, #24]
  37839. 80100ea: 68ba ldr r2, [r7, #8]
  37840. 80100ec: 641a str r2, [r3, #64] @ 0x40
  37841. ( void ) xQueueGenericReset( pxNewQueue, pdTRUE );
  37842. 80100ee: 2101 movs r1, #1
  37843. 80100f0: 69b8 ldr r0, [r7, #24]
  37844. 80100f2: f7ff fec3 bl 800fe7c <xQueueGenericReset>
  37845. #if ( configUSE_TRACE_FACILITY == 1 )
  37846. {
  37847. pxNewQueue->ucQueueType = ucQueueType;
  37848. 80100f6: 69bb ldr r3, [r7, #24]
  37849. 80100f8: 78fa ldrb r2, [r7, #3]
  37850. 80100fa: f883 204c strb.w r2, [r3, #76] @ 0x4c
  37851. pxNewQueue->pxQueueSetContainer = NULL;
  37852. }
  37853. #endif /* configUSE_QUEUE_SETS */
  37854. traceQUEUE_CREATE( pxNewQueue );
  37855. }
  37856. 80100fe: bf00 nop
  37857. 8010100: 3710 adds r7, #16
  37858. 8010102: 46bd mov sp, r7
  37859. 8010104: bd80 pop {r7, pc}
  37860. 08010106 <prvInitialiseMutex>:
  37861. /*-----------------------------------------------------------*/
  37862. #if( configUSE_MUTEXES == 1 )
  37863. static void prvInitialiseMutex( Queue_t *pxNewQueue )
  37864. {
  37865. 8010106: b580 push {r7, lr}
  37866. 8010108: b082 sub sp, #8
  37867. 801010a: af00 add r7, sp, #0
  37868. 801010c: 6078 str r0, [r7, #4]
  37869. if( pxNewQueue != NULL )
  37870. 801010e: 687b ldr r3, [r7, #4]
  37871. 8010110: 2b00 cmp r3, #0
  37872. 8010112: d00e beq.n 8010132 <prvInitialiseMutex+0x2c>
  37873. {
  37874. /* The queue create function will set all the queue structure members
  37875. correctly for a generic queue, but this function is creating a
  37876. mutex. Overwrite those members that need to be set differently -
  37877. in particular the information required for priority inheritance. */
  37878. pxNewQueue->u.xSemaphore.xMutexHolder = NULL;
  37879. 8010114: 687b ldr r3, [r7, #4]
  37880. 8010116: 2200 movs r2, #0
  37881. 8010118: 609a str r2, [r3, #8]
  37882. pxNewQueue->uxQueueType = queueQUEUE_IS_MUTEX;
  37883. 801011a: 687b ldr r3, [r7, #4]
  37884. 801011c: 2200 movs r2, #0
  37885. 801011e: 601a str r2, [r3, #0]
  37886. /* In case this is a recursive mutex. */
  37887. pxNewQueue->u.xSemaphore.uxRecursiveCallCount = 0;
  37888. 8010120: 687b ldr r3, [r7, #4]
  37889. 8010122: 2200 movs r2, #0
  37890. 8010124: 60da str r2, [r3, #12]
  37891. traceCREATE_MUTEX( pxNewQueue );
  37892. /* Start with the semaphore in the expected state. */
  37893. ( void ) xQueueGenericSend( pxNewQueue, NULL, ( TickType_t ) 0U, queueSEND_TO_BACK );
  37894. 8010126: 2300 movs r3, #0
  37895. 8010128: 2200 movs r2, #0
  37896. 801012a: 2100 movs r1, #0
  37897. 801012c: 6878 ldr r0, [r7, #4]
  37898. 801012e: f000 f8a3 bl 8010278 <xQueueGenericSend>
  37899. }
  37900. else
  37901. {
  37902. traceCREATE_MUTEX_FAILED();
  37903. }
  37904. }
  37905. 8010132: bf00 nop
  37906. 8010134: 3708 adds r7, #8
  37907. 8010136: 46bd mov sp, r7
  37908. 8010138: bd80 pop {r7, pc}
  37909. 0801013a <xQueueCreateMutex>:
  37910. /*-----------------------------------------------------------*/
  37911. #if( ( configUSE_MUTEXES == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) )
  37912. QueueHandle_t xQueueCreateMutex( const uint8_t ucQueueType )
  37913. {
  37914. 801013a: b580 push {r7, lr}
  37915. 801013c: b086 sub sp, #24
  37916. 801013e: af00 add r7, sp, #0
  37917. 8010140: 4603 mov r3, r0
  37918. 8010142: 71fb strb r3, [r7, #7]
  37919. QueueHandle_t xNewQueue;
  37920. const UBaseType_t uxMutexLength = ( UBaseType_t ) 1, uxMutexSize = ( UBaseType_t ) 0;
  37921. 8010144: 2301 movs r3, #1
  37922. 8010146: 617b str r3, [r7, #20]
  37923. 8010148: 2300 movs r3, #0
  37924. 801014a: 613b str r3, [r7, #16]
  37925. xNewQueue = xQueueGenericCreate( uxMutexLength, uxMutexSize, ucQueueType );
  37926. 801014c: 79fb ldrb r3, [r7, #7]
  37927. 801014e: 461a mov r2, r3
  37928. 8010150: 6939 ldr r1, [r7, #16]
  37929. 8010152: 6978 ldr r0, [r7, #20]
  37930. 8010154: f7ff ff79 bl 801004a <xQueueGenericCreate>
  37931. 8010158: 60f8 str r0, [r7, #12]
  37932. prvInitialiseMutex( ( Queue_t * ) xNewQueue );
  37933. 801015a: 68f8 ldr r0, [r7, #12]
  37934. 801015c: f7ff ffd3 bl 8010106 <prvInitialiseMutex>
  37935. return xNewQueue;
  37936. 8010160: 68fb ldr r3, [r7, #12]
  37937. }
  37938. 8010162: 4618 mov r0, r3
  37939. 8010164: 3718 adds r7, #24
  37940. 8010166: 46bd mov sp, r7
  37941. 8010168: bd80 pop {r7, pc}
  37942. 0801016a <xQueueCreateMutexStatic>:
  37943. /*-----------------------------------------------------------*/
  37944. #if( ( configUSE_MUTEXES == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) )
  37945. QueueHandle_t xQueueCreateMutexStatic( const uint8_t ucQueueType, StaticQueue_t *pxStaticQueue )
  37946. {
  37947. 801016a: b580 push {r7, lr}
  37948. 801016c: b088 sub sp, #32
  37949. 801016e: af02 add r7, sp, #8
  37950. 8010170: 4603 mov r3, r0
  37951. 8010172: 6039 str r1, [r7, #0]
  37952. 8010174: 71fb strb r3, [r7, #7]
  37953. QueueHandle_t xNewQueue;
  37954. const UBaseType_t uxMutexLength = ( UBaseType_t ) 1, uxMutexSize = ( UBaseType_t ) 0;
  37955. 8010176: 2301 movs r3, #1
  37956. 8010178: 617b str r3, [r7, #20]
  37957. 801017a: 2300 movs r3, #0
  37958. 801017c: 613b str r3, [r7, #16]
  37959. /* Prevent compiler warnings about unused parameters if
  37960. configUSE_TRACE_FACILITY does not equal 1. */
  37961. ( void ) ucQueueType;
  37962. xNewQueue = xQueueGenericCreateStatic( uxMutexLength, uxMutexSize, NULL, pxStaticQueue, ucQueueType );
  37963. 801017e: 79fb ldrb r3, [r7, #7]
  37964. 8010180: 9300 str r3, [sp, #0]
  37965. 8010182: 683b ldr r3, [r7, #0]
  37966. 8010184: 2200 movs r2, #0
  37967. 8010186: 6939 ldr r1, [r7, #16]
  37968. 8010188: 6978 ldr r0, [r7, #20]
  37969. 801018a: f7ff fee1 bl 800ff50 <xQueueGenericCreateStatic>
  37970. 801018e: 60f8 str r0, [r7, #12]
  37971. prvInitialiseMutex( ( Queue_t * ) xNewQueue );
  37972. 8010190: 68f8 ldr r0, [r7, #12]
  37973. 8010192: f7ff ffb8 bl 8010106 <prvInitialiseMutex>
  37974. return xNewQueue;
  37975. 8010196: 68fb ldr r3, [r7, #12]
  37976. }
  37977. 8010198: 4618 mov r0, r3
  37978. 801019a: 3718 adds r7, #24
  37979. 801019c: 46bd mov sp, r7
  37980. 801019e: bd80 pop {r7, pc}
  37981. 080101a0 <xQueueGiveMutexRecursive>:
  37982. /*-----------------------------------------------------------*/
  37983. #if ( configUSE_RECURSIVE_MUTEXES == 1 )
  37984. BaseType_t xQueueGiveMutexRecursive( QueueHandle_t xMutex )
  37985. {
  37986. 80101a0: b590 push {r4, r7, lr}
  37987. 80101a2: b087 sub sp, #28
  37988. 80101a4: af00 add r7, sp, #0
  37989. 80101a6: 6078 str r0, [r7, #4]
  37990. BaseType_t xReturn;
  37991. Queue_t * const pxMutex = ( Queue_t * ) xMutex;
  37992. 80101a8: 687b ldr r3, [r7, #4]
  37993. 80101aa: 613b str r3, [r7, #16]
  37994. configASSERT( pxMutex );
  37995. 80101ac: 693b ldr r3, [r7, #16]
  37996. 80101ae: 2b00 cmp r3, #0
  37997. 80101b0: d10b bne.n 80101ca <xQueueGiveMutexRecursive+0x2a>
  37998. __asm volatile
  37999. 80101b2: f04f 0350 mov.w r3, #80 @ 0x50
  38000. 80101b6: f383 8811 msr BASEPRI, r3
  38001. 80101ba: f3bf 8f6f isb sy
  38002. 80101be: f3bf 8f4f dsb sy
  38003. 80101c2: 60fb str r3, [r7, #12]
  38004. }
  38005. 80101c4: bf00 nop
  38006. 80101c6: bf00 nop
  38007. 80101c8: e7fd b.n 80101c6 <xQueueGiveMutexRecursive+0x26>
  38008. change outside of this task. If this task does not hold the mutex then
  38009. pxMutexHolder can never coincidentally equal the tasks handle, and as
  38010. this is the only condition we are interested in it does not matter if
  38011. pxMutexHolder is accessed simultaneously by another task. Therefore no
  38012. mutual exclusion is required to test the pxMutexHolder variable. */
  38013. if( pxMutex->u.xSemaphore.xMutexHolder == xTaskGetCurrentTaskHandle() )
  38014. 80101ca: 693b ldr r3, [r7, #16]
  38015. 80101cc: 689c ldr r4, [r3, #8]
  38016. 80101ce: f001 fe39 bl 8011e44 <xTaskGetCurrentTaskHandle>
  38017. 80101d2: 4603 mov r3, r0
  38018. 80101d4: 429c cmp r4, r3
  38019. 80101d6: d111 bne.n 80101fc <xQueueGiveMutexRecursive+0x5c>
  38020. /* uxRecursiveCallCount cannot be zero if xMutexHolder is equal to
  38021. the task handle, therefore no underflow check is required. Also,
  38022. uxRecursiveCallCount is only modified by the mutex holder, and as
  38023. there can only be one, no mutual exclusion is required to modify the
  38024. uxRecursiveCallCount member. */
  38025. ( pxMutex->u.xSemaphore.uxRecursiveCallCount )--;
  38026. 80101d8: 693b ldr r3, [r7, #16]
  38027. 80101da: 68db ldr r3, [r3, #12]
  38028. 80101dc: 1e5a subs r2, r3, #1
  38029. 80101de: 693b ldr r3, [r7, #16]
  38030. 80101e0: 60da str r2, [r3, #12]
  38031. /* Has the recursive call count unwound to 0? */
  38032. if( pxMutex->u.xSemaphore.uxRecursiveCallCount == ( UBaseType_t ) 0 )
  38033. 80101e2: 693b ldr r3, [r7, #16]
  38034. 80101e4: 68db ldr r3, [r3, #12]
  38035. 80101e6: 2b00 cmp r3, #0
  38036. 80101e8: d105 bne.n 80101f6 <xQueueGiveMutexRecursive+0x56>
  38037. {
  38038. /* Return the mutex. This will automatically unblock any other
  38039. task that might be waiting to access the mutex. */
  38040. ( void ) xQueueGenericSend( pxMutex, NULL, queueMUTEX_GIVE_BLOCK_TIME, queueSEND_TO_BACK );
  38041. 80101ea: 2300 movs r3, #0
  38042. 80101ec: 2200 movs r2, #0
  38043. 80101ee: 2100 movs r1, #0
  38044. 80101f0: 6938 ldr r0, [r7, #16]
  38045. 80101f2: f000 f841 bl 8010278 <xQueueGenericSend>
  38046. else
  38047. {
  38048. mtCOVERAGE_TEST_MARKER();
  38049. }
  38050. xReturn = pdPASS;
  38051. 80101f6: 2301 movs r3, #1
  38052. 80101f8: 617b str r3, [r7, #20]
  38053. 80101fa: e001 b.n 8010200 <xQueueGiveMutexRecursive+0x60>
  38054. }
  38055. else
  38056. {
  38057. /* The mutex cannot be given because the calling task is not the
  38058. holder. */
  38059. xReturn = pdFAIL;
  38060. 80101fc: 2300 movs r3, #0
  38061. 80101fe: 617b str r3, [r7, #20]
  38062. traceGIVE_MUTEX_RECURSIVE_FAILED( pxMutex );
  38063. }
  38064. return xReturn;
  38065. 8010200: 697b ldr r3, [r7, #20]
  38066. }
  38067. 8010202: 4618 mov r0, r3
  38068. 8010204: 371c adds r7, #28
  38069. 8010206: 46bd mov sp, r7
  38070. 8010208: bd90 pop {r4, r7, pc}
  38071. 0801020a <xQueueTakeMutexRecursive>:
  38072. /*-----------------------------------------------------------*/
  38073. #if ( configUSE_RECURSIVE_MUTEXES == 1 )
  38074. BaseType_t xQueueTakeMutexRecursive( QueueHandle_t xMutex, TickType_t xTicksToWait )
  38075. {
  38076. 801020a: b590 push {r4, r7, lr}
  38077. 801020c: b087 sub sp, #28
  38078. 801020e: af00 add r7, sp, #0
  38079. 8010210: 6078 str r0, [r7, #4]
  38080. 8010212: 6039 str r1, [r7, #0]
  38081. BaseType_t xReturn;
  38082. Queue_t * const pxMutex = ( Queue_t * ) xMutex;
  38083. 8010214: 687b ldr r3, [r7, #4]
  38084. 8010216: 613b str r3, [r7, #16]
  38085. configASSERT( pxMutex );
  38086. 8010218: 693b ldr r3, [r7, #16]
  38087. 801021a: 2b00 cmp r3, #0
  38088. 801021c: d10b bne.n 8010236 <xQueueTakeMutexRecursive+0x2c>
  38089. __asm volatile
  38090. 801021e: f04f 0350 mov.w r3, #80 @ 0x50
  38091. 8010222: f383 8811 msr BASEPRI, r3
  38092. 8010226: f3bf 8f6f isb sy
  38093. 801022a: f3bf 8f4f dsb sy
  38094. 801022e: 60fb str r3, [r7, #12]
  38095. }
  38096. 8010230: bf00 nop
  38097. 8010232: bf00 nop
  38098. 8010234: e7fd b.n 8010232 <xQueueTakeMutexRecursive+0x28>
  38099. /* Comments regarding mutual exclusion as per those within
  38100. xQueueGiveMutexRecursive(). */
  38101. traceTAKE_MUTEX_RECURSIVE( pxMutex );
  38102. if( pxMutex->u.xSemaphore.xMutexHolder == xTaskGetCurrentTaskHandle() )
  38103. 8010236: 693b ldr r3, [r7, #16]
  38104. 8010238: 689c ldr r4, [r3, #8]
  38105. 801023a: f001 fe03 bl 8011e44 <xTaskGetCurrentTaskHandle>
  38106. 801023e: 4603 mov r3, r0
  38107. 8010240: 429c cmp r4, r3
  38108. 8010242: d107 bne.n 8010254 <xQueueTakeMutexRecursive+0x4a>
  38109. {
  38110. ( pxMutex->u.xSemaphore.uxRecursiveCallCount )++;
  38111. 8010244: 693b ldr r3, [r7, #16]
  38112. 8010246: 68db ldr r3, [r3, #12]
  38113. 8010248: 1c5a adds r2, r3, #1
  38114. 801024a: 693b ldr r3, [r7, #16]
  38115. 801024c: 60da str r2, [r3, #12]
  38116. xReturn = pdPASS;
  38117. 801024e: 2301 movs r3, #1
  38118. 8010250: 617b str r3, [r7, #20]
  38119. 8010252: e00c b.n 801026e <xQueueTakeMutexRecursive+0x64>
  38120. }
  38121. else
  38122. {
  38123. xReturn = xQueueSemaphoreTake( pxMutex, xTicksToWait );
  38124. 8010254: 6839 ldr r1, [r7, #0]
  38125. 8010256: 6938 ldr r0, [r7, #16]
  38126. 8010258: f000 fa90 bl 801077c <xQueueSemaphoreTake>
  38127. 801025c: 6178 str r0, [r7, #20]
  38128. /* pdPASS will only be returned if the mutex was successfully
  38129. obtained. The calling task may have entered the Blocked state
  38130. before reaching here. */
  38131. if( xReturn != pdFAIL )
  38132. 801025e: 697b ldr r3, [r7, #20]
  38133. 8010260: 2b00 cmp r3, #0
  38134. 8010262: d004 beq.n 801026e <xQueueTakeMutexRecursive+0x64>
  38135. {
  38136. ( pxMutex->u.xSemaphore.uxRecursiveCallCount )++;
  38137. 8010264: 693b ldr r3, [r7, #16]
  38138. 8010266: 68db ldr r3, [r3, #12]
  38139. 8010268: 1c5a adds r2, r3, #1
  38140. 801026a: 693b ldr r3, [r7, #16]
  38141. 801026c: 60da str r2, [r3, #12]
  38142. {
  38143. traceTAKE_MUTEX_RECURSIVE_FAILED( pxMutex );
  38144. }
  38145. }
  38146. return xReturn;
  38147. 801026e: 697b ldr r3, [r7, #20]
  38148. }
  38149. 8010270: 4618 mov r0, r3
  38150. 8010272: 371c adds r7, #28
  38151. 8010274: 46bd mov sp, r7
  38152. 8010276: bd90 pop {r4, r7, pc}
  38153. 08010278 <xQueueGenericSend>:
  38154. #endif /* ( ( configUSE_COUNTING_SEMAPHORES == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) */
  38155. /*-----------------------------------------------------------*/
  38156. BaseType_t xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemToQueue, TickType_t xTicksToWait, const BaseType_t xCopyPosition )
  38157. {
  38158. 8010278: b580 push {r7, lr}
  38159. 801027a: b08e sub sp, #56 @ 0x38
  38160. 801027c: af00 add r7, sp, #0
  38161. 801027e: 60f8 str r0, [r7, #12]
  38162. 8010280: 60b9 str r1, [r7, #8]
  38163. 8010282: 607a str r2, [r7, #4]
  38164. 8010284: 603b str r3, [r7, #0]
  38165. BaseType_t xEntryTimeSet = pdFALSE, xYieldRequired;
  38166. 8010286: 2300 movs r3, #0
  38167. 8010288: 637b str r3, [r7, #52] @ 0x34
  38168. TimeOut_t xTimeOut;
  38169. Queue_t * const pxQueue = xQueue;
  38170. 801028a: 68fb ldr r3, [r7, #12]
  38171. 801028c: 633b str r3, [r7, #48] @ 0x30
  38172. configASSERT( pxQueue );
  38173. 801028e: 6b3b ldr r3, [r7, #48] @ 0x30
  38174. 8010290: 2b00 cmp r3, #0
  38175. 8010292: d10b bne.n 80102ac <xQueueGenericSend+0x34>
  38176. __asm volatile
  38177. 8010294: f04f 0350 mov.w r3, #80 @ 0x50
  38178. 8010298: f383 8811 msr BASEPRI, r3
  38179. 801029c: f3bf 8f6f isb sy
  38180. 80102a0: f3bf 8f4f dsb sy
  38181. 80102a4: 62bb str r3, [r7, #40] @ 0x28
  38182. }
  38183. 80102a6: bf00 nop
  38184. 80102a8: bf00 nop
  38185. 80102aa: e7fd b.n 80102a8 <xQueueGenericSend+0x30>
  38186. configASSERT( !( ( pvItemToQueue == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) );
  38187. 80102ac: 68bb ldr r3, [r7, #8]
  38188. 80102ae: 2b00 cmp r3, #0
  38189. 80102b0: d103 bne.n 80102ba <xQueueGenericSend+0x42>
  38190. 80102b2: 6b3b ldr r3, [r7, #48] @ 0x30
  38191. 80102b4: 6c1b ldr r3, [r3, #64] @ 0x40
  38192. 80102b6: 2b00 cmp r3, #0
  38193. 80102b8: d101 bne.n 80102be <xQueueGenericSend+0x46>
  38194. 80102ba: 2301 movs r3, #1
  38195. 80102bc: e000 b.n 80102c0 <xQueueGenericSend+0x48>
  38196. 80102be: 2300 movs r3, #0
  38197. 80102c0: 2b00 cmp r3, #0
  38198. 80102c2: d10b bne.n 80102dc <xQueueGenericSend+0x64>
  38199. __asm volatile
  38200. 80102c4: f04f 0350 mov.w r3, #80 @ 0x50
  38201. 80102c8: f383 8811 msr BASEPRI, r3
  38202. 80102cc: f3bf 8f6f isb sy
  38203. 80102d0: f3bf 8f4f dsb sy
  38204. 80102d4: 627b str r3, [r7, #36] @ 0x24
  38205. }
  38206. 80102d6: bf00 nop
  38207. 80102d8: bf00 nop
  38208. 80102da: e7fd b.n 80102d8 <xQueueGenericSend+0x60>
  38209. configASSERT( !( ( xCopyPosition == queueOVERWRITE ) && ( pxQueue->uxLength != 1 ) ) );
  38210. 80102dc: 683b ldr r3, [r7, #0]
  38211. 80102de: 2b02 cmp r3, #2
  38212. 80102e0: d103 bne.n 80102ea <xQueueGenericSend+0x72>
  38213. 80102e2: 6b3b ldr r3, [r7, #48] @ 0x30
  38214. 80102e4: 6bdb ldr r3, [r3, #60] @ 0x3c
  38215. 80102e6: 2b01 cmp r3, #1
  38216. 80102e8: d101 bne.n 80102ee <xQueueGenericSend+0x76>
  38217. 80102ea: 2301 movs r3, #1
  38218. 80102ec: e000 b.n 80102f0 <xQueueGenericSend+0x78>
  38219. 80102ee: 2300 movs r3, #0
  38220. 80102f0: 2b00 cmp r3, #0
  38221. 80102f2: d10b bne.n 801030c <xQueueGenericSend+0x94>
  38222. __asm volatile
  38223. 80102f4: f04f 0350 mov.w r3, #80 @ 0x50
  38224. 80102f8: f383 8811 msr BASEPRI, r3
  38225. 80102fc: f3bf 8f6f isb sy
  38226. 8010300: f3bf 8f4f dsb sy
  38227. 8010304: 623b str r3, [r7, #32]
  38228. }
  38229. 8010306: bf00 nop
  38230. 8010308: bf00 nop
  38231. 801030a: e7fd b.n 8010308 <xQueueGenericSend+0x90>
  38232. #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
  38233. {
  38234. configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );
  38235. 801030c: f001 fdaa bl 8011e64 <xTaskGetSchedulerState>
  38236. 8010310: 4603 mov r3, r0
  38237. 8010312: 2b00 cmp r3, #0
  38238. 8010314: d102 bne.n 801031c <xQueueGenericSend+0xa4>
  38239. 8010316: 687b ldr r3, [r7, #4]
  38240. 8010318: 2b00 cmp r3, #0
  38241. 801031a: d101 bne.n 8010320 <xQueueGenericSend+0xa8>
  38242. 801031c: 2301 movs r3, #1
  38243. 801031e: e000 b.n 8010322 <xQueueGenericSend+0xaa>
  38244. 8010320: 2300 movs r3, #0
  38245. 8010322: 2b00 cmp r3, #0
  38246. 8010324: d10b bne.n 801033e <xQueueGenericSend+0xc6>
  38247. __asm volatile
  38248. 8010326: f04f 0350 mov.w r3, #80 @ 0x50
  38249. 801032a: f383 8811 msr BASEPRI, r3
  38250. 801032e: f3bf 8f6f isb sy
  38251. 8010332: f3bf 8f4f dsb sy
  38252. 8010336: 61fb str r3, [r7, #28]
  38253. }
  38254. 8010338: bf00 nop
  38255. 801033a: bf00 nop
  38256. 801033c: e7fd b.n 801033a <xQueueGenericSend+0xc2>
  38257. /*lint -save -e904 This function relaxes the coding standard somewhat to
  38258. allow return statements within the function itself. This is done in the
  38259. interest of execution time efficiency. */
  38260. for( ;; )
  38261. {
  38262. taskENTER_CRITICAL();
  38263. 801033e: f002 fe2b bl 8012f98 <vPortEnterCritical>
  38264. {
  38265. /* Is there room on the queue now? The running task must be the
  38266. highest priority task wanting to access the queue. If the head item
  38267. in the queue is to be overwritten then it does not matter if the
  38268. queue is full. */
  38269. if( ( pxQueue->uxMessagesWaiting < pxQueue->uxLength ) || ( xCopyPosition == queueOVERWRITE ) )
  38270. 8010342: 6b3b ldr r3, [r7, #48] @ 0x30
  38271. 8010344: 6b9a ldr r2, [r3, #56] @ 0x38
  38272. 8010346: 6b3b ldr r3, [r7, #48] @ 0x30
  38273. 8010348: 6bdb ldr r3, [r3, #60] @ 0x3c
  38274. 801034a: 429a cmp r2, r3
  38275. 801034c: d302 bcc.n 8010354 <xQueueGenericSend+0xdc>
  38276. 801034e: 683b ldr r3, [r7, #0]
  38277. 8010350: 2b02 cmp r3, #2
  38278. 8010352: d129 bne.n 80103a8 <xQueueGenericSend+0x130>
  38279. }
  38280. }
  38281. }
  38282. #else /* configUSE_QUEUE_SETS */
  38283. {
  38284. xYieldRequired = prvCopyDataToQueue( pxQueue, pvItemToQueue, xCopyPosition );
  38285. 8010354: 683a ldr r2, [r7, #0]
  38286. 8010356: 68b9 ldr r1, [r7, #8]
  38287. 8010358: 6b38 ldr r0, [r7, #48] @ 0x30
  38288. 801035a: f000 fbb9 bl 8010ad0 <prvCopyDataToQueue>
  38289. 801035e: 62f8 str r0, [r7, #44] @ 0x2c
  38290. /* If there was a task waiting for data to arrive on the
  38291. queue then unblock it now. */
  38292. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )
  38293. 8010360: 6b3b ldr r3, [r7, #48] @ 0x30
  38294. 8010362: 6a5b ldr r3, [r3, #36] @ 0x24
  38295. 8010364: 2b00 cmp r3, #0
  38296. 8010366: d010 beq.n 801038a <xQueueGenericSend+0x112>
  38297. {
  38298. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )
  38299. 8010368: 6b3b ldr r3, [r7, #48] @ 0x30
  38300. 801036a: 3324 adds r3, #36 @ 0x24
  38301. 801036c: 4618 mov r0, r3
  38302. 801036e: f001 fb7b bl 8011a68 <xTaskRemoveFromEventList>
  38303. 8010372: 4603 mov r3, r0
  38304. 8010374: 2b00 cmp r3, #0
  38305. 8010376: d013 beq.n 80103a0 <xQueueGenericSend+0x128>
  38306. {
  38307. /* The unblocked task has a priority higher than
  38308. our own so yield immediately. Yes it is ok to do
  38309. this from within the critical section - the kernel
  38310. takes care of that. */
  38311. queueYIELD_IF_USING_PREEMPTION();
  38312. 8010378: 4b3f ldr r3, [pc, #252] @ (8010478 <xQueueGenericSend+0x200>)
  38313. 801037a: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  38314. 801037e: 601a str r2, [r3, #0]
  38315. 8010380: f3bf 8f4f dsb sy
  38316. 8010384: f3bf 8f6f isb sy
  38317. 8010388: e00a b.n 80103a0 <xQueueGenericSend+0x128>
  38318. else
  38319. {
  38320. mtCOVERAGE_TEST_MARKER();
  38321. }
  38322. }
  38323. else if( xYieldRequired != pdFALSE )
  38324. 801038a: 6afb ldr r3, [r7, #44] @ 0x2c
  38325. 801038c: 2b00 cmp r3, #0
  38326. 801038e: d007 beq.n 80103a0 <xQueueGenericSend+0x128>
  38327. {
  38328. /* This path is a special case that will only get
  38329. executed if the task was holding multiple mutexes and
  38330. the mutexes were given back in an order that is
  38331. different to that in which they were taken. */
  38332. queueYIELD_IF_USING_PREEMPTION();
  38333. 8010390: 4b39 ldr r3, [pc, #228] @ (8010478 <xQueueGenericSend+0x200>)
  38334. 8010392: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  38335. 8010396: 601a str r2, [r3, #0]
  38336. 8010398: f3bf 8f4f dsb sy
  38337. 801039c: f3bf 8f6f isb sy
  38338. mtCOVERAGE_TEST_MARKER();
  38339. }
  38340. }
  38341. #endif /* configUSE_QUEUE_SETS */
  38342. taskEXIT_CRITICAL();
  38343. 80103a0: f002 fe2c bl 8012ffc <vPortExitCritical>
  38344. return pdPASS;
  38345. 80103a4: 2301 movs r3, #1
  38346. 80103a6: e063 b.n 8010470 <xQueueGenericSend+0x1f8>
  38347. }
  38348. else
  38349. {
  38350. if( xTicksToWait == ( TickType_t ) 0 )
  38351. 80103a8: 687b ldr r3, [r7, #4]
  38352. 80103aa: 2b00 cmp r3, #0
  38353. 80103ac: d103 bne.n 80103b6 <xQueueGenericSend+0x13e>
  38354. {
  38355. /* The queue was full and no block time is specified (or
  38356. the block time has expired) so leave now. */
  38357. taskEXIT_CRITICAL();
  38358. 80103ae: f002 fe25 bl 8012ffc <vPortExitCritical>
  38359. /* Return to the original privilege level before exiting
  38360. the function. */
  38361. traceQUEUE_SEND_FAILED( pxQueue );
  38362. return errQUEUE_FULL;
  38363. 80103b2: 2300 movs r3, #0
  38364. 80103b4: e05c b.n 8010470 <xQueueGenericSend+0x1f8>
  38365. }
  38366. else if( xEntryTimeSet == pdFALSE )
  38367. 80103b6: 6b7b ldr r3, [r7, #52] @ 0x34
  38368. 80103b8: 2b00 cmp r3, #0
  38369. 80103ba: d106 bne.n 80103ca <xQueueGenericSend+0x152>
  38370. {
  38371. /* The queue was full and a block time was specified so
  38372. configure the timeout structure. */
  38373. vTaskInternalSetTimeOutState( &xTimeOut );
  38374. 80103bc: f107 0314 add.w r3, r7, #20
  38375. 80103c0: 4618 mov r0, r3
  38376. 80103c2: f001 fbdd bl 8011b80 <vTaskInternalSetTimeOutState>
  38377. xEntryTimeSet = pdTRUE;
  38378. 80103c6: 2301 movs r3, #1
  38379. 80103c8: 637b str r3, [r7, #52] @ 0x34
  38380. /* Entry time was already set. */
  38381. mtCOVERAGE_TEST_MARKER();
  38382. }
  38383. }
  38384. }
  38385. taskEXIT_CRITICAL();
  38386. 80103ca: f002 fe17 bl 8012ffc <vPortExitCritical>
  38387. /* Interrupts and other tasks can send to and receive from the queue
  38388. now the critical section has been exited. */
  38389. vTaskSuspendAll();
  38390. 80103ce: f001 f90f bl 80115f0 <vTaskSuspendAll>
  38391. prvLockQueue( pxQueue );
  38392. 80103d2: f002 fde1 bl 8012f98 <vPortEnterCritical>
  38393. 80103d6: 6b3b ldr r3, [r7, #48] @ 0x30
  38394. 80103d8: f893 3044 ldrb.w r3, [r3, #68] @ 0x44
  38395. 80103dc: b25b sxtb r3, r3
  38396. 80103de: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  38397. 80103e2: d103 bne.n 80103ec <xQueueGenericSend+0x174>
  38398. 80103e4: 6b3b ldr r3, [r7, #48] @ 0x30
  38399. 80103e6: 2200 movs r2, #0
  38400. 80103e8: f883 2044 strb.w r2, [r3, #68] @ 0x44
  38401. 80103ec: 6b3b ldr r3, [r7, #48] @ 0x30
  38402. 80103ee: f893 3045 ldrb.w r3, [r3, #69] @ 0x45
  38403. 80103f2: b25b sxtb r3, r3
  38404. 80103f4: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  38405. 80103f8: d103 bne.n 8010402 <xQueueGenericSend+0x18a>
  38406. 80103fa: 6b3b ldr r3, [r7, #48] @ 0x30
  38407. 80103fc: 2200 movs r2, #0
  38408. 80103fe: f883 2045 strb.w r2, [r3, #69] @ 0x45
  38409. 8010402: f002 fdfb bl 8012ffc <vPortExitCritical>
  38410. /* Update the timeout state to see if it has expired yet. */
  38411. if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE )
  38412. 8010406: 1d3a adds r2, r7, #4
  38413. 8010408: f107 0314 add.w r3, r7, #20
  38414. 801040c: 4611 mov r1, r2
  38415. 801040e: 4618 mov r0, r3
  38416. 8010410: f001 fbcc bl 8011bac <xTaskCheckForTimeOut>
  38417. 8010414: 4603 mov r3, r0
  38418. 8010416: 2b00 cmp r3, #0
  38419. 8010418: d124 bne.n 8010464 <xQueueGenericSend+0x1ec>
  38420. {
  38421. if( prvIsQueueFull( pxQueue ) != pdFALSE )
  38422. 801041a: 6b38 ldr r0, [r7, #48] @ 0x30
  38423. 801041c: f000 fc50 bl 8010cc0 <prvIsQueueFull>
  38424. 8010420: 4603 mov r3, r0
  38425. 8010422: 2b00 cmp r3, #0
  38426. 8010424: d018 beq.n 8010458 <xQueueGenericSend+0x1e0>
  38427. {
  38428. traceBLOCKING_ON_QUEUE_SEND( pxQueue );
  38429. vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToSend ), xTicksToWait );
  38430. 8010426: 6b3b ldr r3, [r7, #48] @ 0x30
  38431. 8010428: 3310 adds r3, #16
  38432. 801042a: 687a ldr r2, [r7, #4]
  38433. 801042c: 4611 mov r1, r2
  38434. 801042e: 4618 mov r0, r3
  38435. 8010430: f001 fac8 bl 80119c4 <vTaskPlaceOnEventList>
  38436. /* Unlocking the queue means queue events can effect the
  38437. event list. It is possible that interrupts occurring now
  38438. remove this task from the event list again - but as the
  38439. scheduler is suspended the task will go onto the pending
  38440. ready last instead of the actual ready list. */
  38441. prvUnlockQueue( pxQueue );
  38442. 8010434: 6b38 ldr r0, [r7, #48] @ 0x30
  38443. 8010436: f000 fbdb bl 8010bf0 <prvUnlockQueue>
  38444. /* Resuming the scheduler will move tasks from the pending
  38445. ready list into the ready list - so it is feasible that this
  38446. task is already in a ready list before it yields - in which
  38447. case the yield will not cause a context switch unless there
  38448. is also a higher priority task in the pending ready list. */
  38449. if( xTaskResumeAll() == pdFALSE )
  38450. 801043a: f001 f8e7 bl 801160c <xTaskResumeAll>
  38451. 801043e: 4603 mov r3, r0
  38452. 8010440: 2b00 cmp r3, #0
  38453. 8010442: f47f af7c bne.w 801033e <xQueueGenericSend+0xc6>
  38454. {
  38455. portYIELD_WITHIN_API();
  38456. 8010446: 4b0c ldr r3, [pc, #48] @ (8010478 <xQueueGenericSend+0x200>)
  38457. 8010448: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  38458. 801044c: 601a str r2, [r3, #0]
  38459. 801044e: f3bf 8f4f dsb sy
  38460. 8010452: f3bf 8f6f isb sy
  38461. 8010456: e772 b.n 801033e <xQueueGenericSend+0xc6>
  38462. }
  38463. }
  38464. else
  38465. {
  38466. /* Try again. */
  38467. prvUnlockQueue( pxQueue );
  38468. 8010458: 6b38 ldr r0, [r7, #48] @ 0x30
  38469. 801045a: f000 fbc9 bl 8010bf0 <prvUnlockQueue>
  38470. ( void ) xTaskResumeAll();
  38471. 801045e: f001 f8d5 bl 801160c <xTaskResumeAll>
  38472. 8010462: e76c b.n 801033e <xQueueGenericSend+0xc6>
  38473. }
  38474. }
  38475. else
  38476. {
  38477. /* The timeout has expired. */
  38478. prvUnlockQueue( pxQueue );
  38479. 8010464: 6b38 ldr r0, [r7, #48] @ 0x30
  38480. 8010466: f000 fbc3 bl 8010bf0 <prvUnlockQueue>
  38481. ( void ) xTaskResumeAll();
  38482. 801046a: f001 f8cf bl 801160c <xTaskResumeAll>
  38483. traceQUEUE_SEND_FAILED( pxQueue );
  38484. return errQUEUE_FULL;
  38485. 801046e: 2300 movs r3, #0
  38486. }
  38487. } /*lint -restore */
  38488. }
  38489. 8010470: 4618 mov r0, r3
  38490. 8010472: 3738 adds r7, #56 @ 0x38
  38491. 8010474: 46bd mov sp, r7
  38492. 8010476: bd80 pop {r7, pc}
  38493. 8010478: e000ed04 .word 0xe000ed04
  38494. 0801047c <xQueueGenericSendFromISR>:
  38495. /*-----------------------------------------------------------*/
  38496. BaseType_t xQueueGenericSendFromISR( QueueHandle_t xQueue, const void * const pvItemToQueue, BaseType_t * const pxHigherPriorityTaskWoken, const BaseType_t xCopyPosition )
  38497. {
  38498. 801047c: b580 push {r7, lr}
  38499. 801047e: b090 sub sp, #64 @ 0x40
  38500. 8010480: af00 add r7, sp, #0
  38501. 8010482: 60f8 str r0, [r7, #12]
  38502. 8010484: 60b9 str r1, [r7, #8]
  38503. 8010486: 607a str r2, [r7, #4]
  38504. 8010488: 603b str r3, [r7, #0]
  38505. BaseType_t xReturn;
  38506. UBaseType_t uxSavedInterruptStatus;
  38507. Queue_t * const pxQueue = xQueue;
  38508. 801048a: 68fb ldr r3, [r7, #12]
  38509. 801048c: 63bb str r3, [r7, #56] @ 0x38
  38510. configASSERT( pxQueue );
  38511. 801048e: 6bbb ldr r3, [r7, #56] @ 0x38
  38512. 8010490: 2b00 cmp r3, #0
  38513. 8010492: d10b bne.n 80104ac <xQueueGenericSendFromISR+0x30>
  38514. __asm volatile
  38515. 8010494: f04f 0350 mov.w r3, #80 @ 0x50
  38516. 8010498: f383 8811 msr BASEPRI, r3
  38517. 801049c: f3bf 8f6f isb sy
  38518. 80104a0: f3bf 8f4f dsb sy
  38519. 80104a4: 62bb str r3, [r7, #40] @ 0x28
  38520. }
  38521. 80104a6: bf00 nop
  38522. 80104a8: bf00 nop
  38523. 80104aa: e7fd b.n 80104a8 <xQueueGenericSendFromISR+0x2c>
  38524. configASSERT( !( ( pvItemToQueue == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) );
  38525. 80104ac: 68bb ldr r3, [r7, #8]
  38526. 80104ae: 2b00 cmp r3, #0
  38527. 80104b0: d103 bne.n 80104ba <xQueueGenericSendFromISR+0x3e>
  38528. 80104b2: 6bbb ldr r3, [r7, #56] @ 0x38
  38529. 80104b4: 6c1b ldr r3, [r3, #64] @ 0x40
  38530. 80104b6: 2b00 cmp r3, #0
  38531. 80104b8: d101 bne.n 80104be <xQueueGenericSendFromISR+0x42>
  38532. 80104ba: 2301 movs r3, #1
  38533. 80104bc: e000 b.n 80104c0 <xQueueGenericSendFromISR+0x44>
  38534. 80104be: 2300 movs r3, #0
  38535. 80104c0: 2b00 cmp r3, #0
  38536. 80104c2: d10b bne.n 80104dc <xQueueGenericSendFromISR+0x60>
  38537. __asm volatile
  38538. 80104c4: f04f 0350 mov.w r3, #80 @ 0x50
  38539. 80104c8: f383 8811 msr BASEPRI, r3
  38540. 80104cc: f3bf 8f6f isb sy
  38541. 80104d0: f3bf 8f4f dsb sy
  38542. 80104d4: 627b str r3, [r7, #36] @ 0x24
  38543. }
  38544. 80104d6: bf00 nop
  38545. 80104d8: bf00 nop
  38546. 80104da: e7fd b.n 80104d8 <xQueueGenericSendFromISR+0x5c>
  38547. configASSERT( !( ( xCopyPosition == queueOVERWRITE ) && ( pxQueue->uxLength != 1 ) ) );
  38548. 80104dc: 683b ldr r3, [r7, #0]
  38549. 80104de: 2b02 cmp r3, #2
  38550. 80104e0: d103 bne.n 80104ea <xQueueGenericSendFromISR+0x6e>
  38551. 80104e2: 6bbb ldr r3, [r7, #56] @ 0x38
  38552. 80104e4: 6bdb ldr r3, [r3, #60] @ 0x3c
  38553. 80104e6: 2b01 cmp r3, #1
  38554. 80104e8: d101 bne.n 80104ee <xQueueGenericSendFromISR+0x72>
  38555. 80104ea: 2301 movs r3, #1
  38556. 80104ec: e000 b.n 80104f0 <xQueueGenericSendFromISR+0x74>
  38557. 80104ee: 2300 movs r3, #0
  38558. 80104f0: 2b00 cmp r3, #0
  38559. 80104f2: d10b bne.n 801050c <xQueueGenericSendFromISR+0x90>
  38560. __asm volatile
  38561. 80104f4: f04f 0350 mov.w r3, #80 @ 0x50
  38562. 80104f8: f383 8811 msr BASEPRI, r3
  38563. 80104fc: f3bf 8f6f isb sy
  38564. 8010500: f3bf 8f4f dsb sy
  38565. 8010504: 623b str r3, [r7, #32]
  38566. }
  38567. 8010506: bf00 nop
  38568. 8010508: bf00 nop
  38569. 801050a: e7fd b.n 8010508 <xQueueGenericSendFromISR+0x8c>
  38570. that have been assigned a priority at or (logically) below the maximum
  38571. system call interrupt priority. FreeRTOS maintains a separate interrupt
  38572. safe API to ensure interrupt entry is as fast and as simple as possible.
  38573. More information (albeit Cortex-M specific) is provided on the following
  38574. link: http://www.freertos.org/RTOS-Cortex-M3-M4.html */
  38575. portASSERT_IF_INTERRUPT_PRIORITY_INVALID();
  38576. 801050c: f002 fe24 bl 8013158 <vPortValidateInterruptPriority>
  38577. portFORCE_INLINE static uint32_t ulPortRaiseBASEPRI( void )
  38578. {
  38579. uint32_t ulOriginalBASEPRI, ulNewBASEPRI;
  38580. __asm volatile
  38581. 8010510: f3ef 8211 mrs r2, BASEPRI
  38582. 8010514: f04f 0350 mov.w r3, #80 @ 0x50
  38583. 8010518: f383 8811 msr BASEPRI, r3
  38584. 801051c: f3bf 8f6f isb sy
  38585. 8010520: f3bf 8f4f dsb sy
  38586. 8010524: 61fa str r2, [r7, #28]
  38587. 8010526: 61bb str r3, [r7, #24]
  38588. :"=r" (ulOriginalBASEPRI), "=r" (ulNewBASEPRI) : "i" ( configMAX_SYSCALL_INTERRUPT_PRIORITY ) : "memory"
  38589. );
  38590. /* This return will not be reached but is necessary to prevent compiler
  38591. warnings. */
  38592. return ulOriginalBASEPRI;
  38593. 8010528: 69fb ldr r3, [r7, #28]
  38594. /* Similar to xQueueGenericSend, except without blocking if there is no room
  38595. in the queue. Also don't directly wake a task that was blocked on a queue
  38596. read, instead return a flag to say whether a context switch is required or
  38597. not (i.e. has a task with a higher priority than us been woken by this
  38598. post). */
  38599. uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
  38600. 801052a: 637b str r3, [r7, #52] @ 0x34
  38601. {
  38602. if( ( pxQueue->uxMessagesWaiting < pxQueue->uxLength ) || ( xCopyPosition == queueOVERWRITE ) )
  38603. 801052c: 6bbb ldr r3, [r7, #56] @ 0x38
  38604. 801052e: 6b9a ldr r2, [r3, #56] @ 0x38
  38605. 8010530: 6bbb ldr r3, [r7, #56] @ 0x38
  38606. 8010532: 6bdb ldr r3, [r3, #60] @ 0x3c
  38607. 8010534: 429a cmp r2, r3
  38608. 8010536: d302 bcc.n 801053e <xQueueGenericSendFromISR+0xc2>
  38609. 8010538: 683b ldr r3, [r7, #0]
  38610. 801053a: 2b02 cmp r3, #2
  38611. 801053c: d12f bne.n 801059e <xQueueGenericSendFromISR+0x122>
  38612. {
  38613. const int8_t cTxLock = pxQueue->cTxLock;
  38614. 801053e: 6bbb ldr r3, [r7, #56] @ 0x38
  38615. 8010540: f893 3045 ldrb.w r3, [r3, #69] @ 0x45
  38616. 8010544: f887 3033 strb.w r3, [r7, #51] @ 0x33
  38617. const UBaseType_t uxPreviousMessagesWaiting = pxQueue->uxMessagesWaiting;
  38618. 8010548: 6bbb ldr r3, [r7, #56] @ 0x38
  38619. 801054a: 6b9b ldr r3, [r3, #56] @ 0x38
  38620. 801054c: 62fb str r3, [r7, #44] @ 0x2c
  38621. /* Semaphores use xQueueGiveFromISR(), so pxQueue will not be a
  38622. semaphore or mutex. That means prvCopyDataToQueue() cannot result
  38623. in a task disinheriting a priority and prvCopyDataToQueue() can be
  38624. called here even though the disinherit function does not check if
  38625. the scheduler is suspended before accessing the ready lists. */
  38626. ( void ) prvCopyDataToQueue( pxQueue, pvItemToQueue, xCopyPosition );
  38627. 801054e: 683a ldr r2, [r7, #0]
  38628. 8010550: 68b9 ldr r1, [r7, #8]
  38629. 8010552: 6bb8 ldr r0, [r7, #56] @ 0x38
  38630. 8010554: f000 fabc bl 8010ad0 <prvCopyDataToQueue>
  38631. /* The event list is not altered if the queue is locked. This will
  38632. be done when the queue is unlocked later. */
  38633. if( cTxLock == queueUNLOCKED )
  38634. 8010558: f997 3033 ldrsb.w r3, [r7, #51] @ 0x33
  38635. 801055c: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  38636. 8010560: d112 bne.n 8010588 <xQueueGenericSendFromISR+0x10c>
  38637. }
  38638. }
  38639. }
  38640. #else /* configUSE_QUEUE_SETS */
  38641. {
  38642. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )
  38643. 8010562: 6bbb ldr r3, [r7, #56] @ 0x38
  38644. 8010564: 6a5b ldr r3, [r3, #36] @ 0x24
  38645. 8010566: 2b00 cmp r3, #0
  38646. 8010568: d016 beq.n 8010598 <xQueueGenericSendFromISR+0x11c>
  38647. {
  38648. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )
  38649. 801056a: 6bbb ldr r3, [r7, #56] @ 0x38
  38650. 801056c: 3324 adds r3, #36 @ 0x24
  38651. 801056e: 4618 mov r0, r3
  38652. 8010570: f001 fa7a bl 8011a68 <xTaskRemoveFromEventList>
  38653. 8010574: 4603 mov r3, r0
  38654. 8010576: 2b00 cmp r3, #0
  38655. 8010578: d00e beq.n 8010598 <xQueueGenericSendFromISR+0x11c>
  38656. {
  38657. /* The task waiting has a higher priority so record that a
  38658. context switch is required. */
  38659. if( pxHigherPriorityTaskWoken != NULL )
  38660. 801057a: 687b ldr r3, [r7, #4]
  38661. 801057c: 2b00 cmp r3, #0
  38662. 801057e: d00b beq.n 8010598 <xQueueGenericSendFromISR+0x11c>
  38663. {
  38664. *pxHigherPriorityTaskWoken = pdTRUE;
  38665. 8010580: 687b ldr r3, [r7, #4]
  38666. 8010582: 2201 movs r2, #1
  38667. 8010584: 601a str r2, [r3, #0]
  38668. 8010586: e007 b.n 8010598 <xQueueGenericSendFromISR+0x11c>
  38669. }
  38670. else
  38671. {
  38672. /* Increment the lock count so the task that unlocks the queue
  38673. knows that data was posted while it was locked. */
  38674. pxQueue->cTxLock = ( int8_t ) ( cTxLock + 1 );
  38675. 8010588: f897 3033 ldrb.w r3, [r7, #51] @ 0x33
  38676. 801058c: 3301 adds r3, #1
  38677. 801058e: b2db uxtb r3, r3
  38678. 8010590: b25a sxtb r2, r3
  38679. 8010592: 6bbb ldr r3, [r7, #56] @ 0x38
  38680. 8010594: f883 2045 strb.w r2, [r3, #69] @ 0x45
  38681. }
  38682. xReturn = pdPASS;
  38683. 8010598: 2301 movs r3, #1
  38684. 801059a: 63fb str r3, [r7, #60] @ 0x3c
  38685. {
  38686. 801059c: e001 b.n 80105a2 <xQueueGenericSendFromISR+0x126>
  38687. }
  38688. else
  38689. {
  38690. traceQUEUE_SEND_FROM_ISR_FAILED( pxQueue );
  38691. xReturn = errQUEUE_FULL;
  38692. 801059e: 2300 movs r3, #0
  38693. 80105a0: 63fb str r3, [r7, #60] @ 0x3c
  38694. 80105a2: 6b7b ldr r3, [r7, #52] @ 0x34
  38695. 80105a4: 617b str r3, [r7, #20]
  38696. }
  38697. /*-----------------------------------------------------------*/
  38698. portFORCE_INLINE static void vPortSetBASEPRI( uint32_t ulNewMaskValue )
  38699. {
  38700. __asm volatile
  38701. 80105a6: 697b ldr r3, [r7, #20]
  38702. 80105a8: f383 8811 msr BASEPRI, r3
  38703. (
  38704. " msr basepri, %0 " :: "r" ( ulNewMaskValue ) : "memory"
  38705. );
  38706. }
  38707. 80105ac: bf00 nop
  38708. }
  38709. }
  38710. portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus );
  38711. return xReturn;
  38712. 80105ae: 6bfb ldr r3, [r7, #60] @ 0x3c
  38713. }
  38714. 80105b0: 4618 mov r0, r3
  38715. 80105b2: 3740 adds r7, #64 @ 0x40
  38716. 80105b4: 46bd mov sp, r7
  38717. 80105b6: bd80 pop {r7, pc}
  38718. 080105b8 <xQueueReceive>:
  38719. return xReturn;
  38720. }
  38721. /*-----------------------------------------------------------*/
  38722. BaseType_t xQueueReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait )
  38723. {
  38724. 80105b8: b580 push {r7, lr}
  38725. 80105ba: b08c sub sp, #48 @ 0x30
  38726. 80105bc: af00 add r7, sp, #0
  38727. 80105be: 60f8 str r0, [r7, #12]
  38728. 80105c0: 60b9 str r1, [r7, #8]
  38729. 80105c2: 607a str r2, [r7, #4]
  38730. BaseType_t xEntryTimeSet = pdFALSE;
  38731. 80105c4: 2300 movs r3, #0
  38732. 80105c6: 62fb str r3, [r7, #44] @ 0x2c
  38733. TimeOut_t xTimeOut;
  38734. Queue_t * const pxQueue = xQueue;
  38735. 80105c8: 68fb ldr r3, [r7, #12]
  38736. 80105ca: 62bb str r3, [r7, #40] @ 0x28
  38737. /* Check the pointer is not NULL. */
  38738. configASSERT( ( pxQueue ) );
  38739. 80105cc: 6abb ldr r3, [r7, #40] @ 0x28
  38740. 80105ce: 2b00 cmp r3, #0
  38741. 80105d0: d10b bne.n 80105ea <xQueueReceive+0x32>
  38742. __asm volatile
  38743. 80105d2: f04f 0350 mov.w r3, #80 @ 0x50
  38744. 80105d6: f383 8811 msr BASEPRI, r3
  38745. 80105da: f3bf 8f6f isb sy
  38746. 80105de: f3bf 8f4f dsb sy
  38747. 80105e2: 623b str r3, [r7, #32]
  38748. }
  38749. 80105e4: bf00 nop
  38750. 80105e6: bf00 nop
  38751. 80105e8: e7fd b.n 80105e6 <xQueueReceive+0x2e>
  38752. /* The buffer into which data is received can only be NULL if the data size
  38753. is zero (so no data is copied into the buffer. */
  38754. configASSERT( !( ( ( pvBuffer ) == NULL ) && ( ( pxQueue )->uxItemSize != ( UBaseType_t ) 0U ) ) );
  38755. 80105ea: 68bb ldr r3, [r7, #8]
  38756. 80105ec: 2b00 cmp r3, #0
  38757. 80105ee: d103 bne.n 80105f8 <xQueueReceive+0x40>
  38758. 80105f0: 6abb ldr r3, [r7, #40] @ 0x28
  38759. 80105f2: 6c1b ldr r3, [r3, #64] @ 0x40
  38760. 80105f4: 2b00 cmp r3, #0
  38761. 80105f6: d101 bne.n 80105fc <xQueueReceive+0x44>
  38762. 80105f8: 2301 movs r3, #1
  38763. 80105fa: e000 b.n 80105fe <xQueueReceive+0x46>
  38764. 80105fc: 2300 movs r3, #0
  38765. 80105fe: 2b00 cmp r3, #0
  38766. 8010600: d10b bne.n 801061a <xQueueReceive+0x62>
  38767. __asm volatile
  38768. 8010602: f04f 0350 mov.w r3, #80 @ 0x50
  38769. 8010606: f383 8811 msr BASEPRI, r3
  38770. 801060a: f3bf 8f6f isb sy
  38771. 801060e: f3bf 8f4f dsb sy
  38772. 8010612: 61fb str r3, [r7, #28]
  38773. }
  38774. 8010614: bf00 nop
  38775. 8010616: bf00 nop
  38776. 8010618: e7fd b.n 8010616 <xQueueReceive+0x5e>
  38777. /* Cannot block if the scheduler is suspended. */
  38778. #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
  38779. {
  38780. configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );
  38781. 801061a: f001 fc23 bl 8011e64 <xTaskGetSchedulerState>
  38782. 801061e: 4603 mov r3, r0
  38783. 8010620: 2b00 cmp r3, #0
  38784. 8010622: d102 bne.n 801062a <xQueueReceive+0x72>
  38785. 8010624: 687b ldr r3, [r7, #4]
  38786. 8010626: 2b00 cmp r3, #0
  38787. 8010628: d101 bne.n 801062e <xQueueReceive+0x76>
  38788. 801062a: 2301 movs r3, #1
  38789. 801062c: e000 b.n 8010630 <xQueueReceive+0x78>
  38790. 801062e: 2300 movs r3, #0
  38791. 8010630: 2b00 cmp r3, #0
  38792. 8010632: d10b bne.n 801064c <xQueueReceive+0x94>
  38793. __asm volatile
  38794. 8010634: f04f 0350 mov.w r3, #80 @ 0x50
  38795. 8010638: f383 8811 msr BASEPRI, r3
  38796. 801063c: f3bf 8f6f isb sy
  38797. 8010640: f3bf 8f4f dsb sy
  38798. 8010644: 61bb str r3, [r7, #24]
  38799. }
  38800. 8010646: bf00 nop
  38801. 8010648: bf00 nop
  38802. 801064a: e7fd b.n 8010648 <xQueueReceive+0x90>
  38803. /*lint -save -e904 This function relaxes the coding standard somewhat to
  38804. allow return statements within the function itself. This is done in the
  38805. interest of execution time efficiency. */
  38806. for( ;; )
  38807. {
  38808. taskENTER_CRITICAL();
  38809. 801064c: f002 fca4 bl 8012f98 <vPortEnterCritical>
  38810. {
  38811. const UBaseType_t uxMessagesWaiting = pxQueue->uxMessagesWaiting;
  38812. 8010650: 6abb ldr r3, [r7, #40] @ 0x28
  38813. 8010652: 6b9b ldr r3, [r3, #56] @ 0x38
  38814. 8010654: 627b str r3, [r7, #36] @ 0x24
  38815. /* Is there data in the queue now? To be running the calling task
  38816. must be the highest priority task wanting to access the queue. */
  38817. if( uxMessagesWaiting > ( UBaseType_t ) 0 )
  38818. 8010656: 6a7b ldr r3, [r7, #36] @ 0x24
  38819. 8010658: 2b00 cmp r3, #0
  38820. 801065a: d01f beq.n 801069c <xQueueReceive+0xe4>
  38821. {
  38822. /* Data available, remove one item. */
  38823. prvCopyDataFromQueue( pxQueue, pvBuffer );
  38824. 801065c: 68b9 ldr r1, [r7, #8]
  38825. 801065e: 6ab8 ldr r0, [r7, #40] @ 0x28
  38826. 8010660: f000 faa0 bl 8010ba4 <prvCopyDataFromQueue>
  38827. traceQUEUE_RECEIVE( pxQueue );
  38828. pxQueue->uxMessagesWaiting = uxMessagesWaiting - ( UBaseType_t ) 1;
  38829. 8010664: 6a7b ldr r3, [r7, #36] @ 0x24
  38830. 8010666: 1e5a subs r2, r3, #1
  38831. 8010668: 6abb ldr r3, [r7, #40] @ 0x28
  38832. 801066a: 639a str r2, [r3, #56] @ 0x38
  38833. /* There is now space in the queue, were any tasks waiting to
  38834. post to the queue? If so, unblock the highest priority waiting
  38835. task. */
  38836. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )
  38837. 801066c: 6abb ldr r3, [r7, #40] @ 0x28
  38838. 801066e: 691b ldr r3, [r3, #16]
  38839. 8010670: 2b00 cmp r3, #0
  38840. 8010672: d00f beq.n 8010694 <xQueueReceive+0xdc>
  38841. {
  38842. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE )
  38843. 8010674: 6abb ldr r3, [r7, #40] @ 0x28
  38844. 8010676: 3310 adds r3, #16
  38845. 8010678: 4618 mov r0, r3
  38846. 801067a: f001 f9f5 bl 8011a68 <xTaskRemoveFromEventList>
  38847. 801067e: 4603 mov r3, r0
  38848. 8010680: 2b00 cmp r3, #0
  38849. 8010682: d007 beq.n 8010694 <xQueueReceive+0xdc>
  38850. {
  38851. queueYIELD_IF_USING_PREEMPTION();
  38852. 8010684: 4b3c ldr r3, [pc, #240] @ (8010778 <xQueueReceive+0x1c0>)
  38853. 8010686: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  38854. 801068a: 601a str r2, [r3, #0]
  38855. 801068c: f3bf 8f4f dsb sy
  38856. 8010690: f3bf 8f6f isb sy
  38857. else
  38858. {
  38859. mtCOVERAGE_TEST_MARKER();
  38860. }
  38861. taskEXIT_CRITICAL();
  38862. 8010694: f002 fcb2 bl 8012ffc <vPortExitCritical>
  38863. return pdPASS;
  38864. 8010698: 2301 movs r3, #1
  38865. 801069a: e069 b.n 8010770 <xQueueReceive+0x1b8>
  38866. }
  38867. else
  38868. {
  38869. if( xTicksToWait == ( TickType_t ) 0 )
  38870. 801069c: 687b ldr r3, [r7, #4]
  38871. 801069e: 2b00 cmp r3, #0
  38872. 80106a0: d103 bne.n 80106aa <xQueueReceive+0xf2>
  38873. {
  38874. /* The queue was empty and no block time is specified (or
  38875. the block time has expired) so leave now. */
  38876. taskEXIT_CRITICAL();
  38877. 80106a2: f002 fcab bl 8012ffc <vPortExitCritical>
  38878. traceQUEUE_RECEIVE_FAILED( pxQueue );
  38879. return errQUEUE_EMPTY;
  38880. 80106a6: 2300 movs r3, #0
  38881. 80106a8: e062 b.n 8010770 <xQueueReceive+0x1b8>
  38882. }
  38883. else if( xEntryTimeSet == pdFALSE )
  38884. 80106aa: 6afb ldr r3, [r7, #44] @ 0x2c
  38885. 80106ac: 2b00 cmp r3, #0
  38886. 80106ae: d106 bne.n 80106be <xQueueReceive+0x106>
  38887. {
  38888. /* The queue was empty and a block time was specified so
  38889. configure the timeout structure. */
  38890. vTaskInternalSetTimeOutState( &xTimeOut );
  38891. 80106b0: f107 0310 add.w r3, r7, #16
  38892. 80106b4: 4618 mov r0, r3
  38893. 80106b6: f001 fa63 bl 8011b80 <vTaskInternalSetTimeOutState>
  38894. xEntryTimeSet = pdTRUE;
  38895. 80106ba: 2301 movs r3, #1
  38896. 80106bc: 62fb str r3, [r7, #44] @ 0x2c
  38897. /* Entry time was already set. */
  38898. mtCOVERAGE_TEST_MARKER();
  38899. }
  38900. }
  38901. }
  38902. taskEXIT_CRITICAL();
  38903. 80106be: f002 fc9d bl 8012ffc <vPortExitCritical>
  38904. /* Interrupts and other tasks can send to and receive from the queue
  38905. now the critical section has been exited. */
  38906. vTaskSuspendAll();
  38907. 80106c2: f000 ff95 bl 80115f0 <vTaskSuspendAll>
  38908. prvLockQueue( pxQueue );
  38909. 80106c6: f002 fc67 bl 8012f98 <vPortEnterCritical>
  38910. 80106ca: 6abb ldr r3, [r7, #40] @ 0x28
  38911. 80106cc: f893 3044 ldrb.w r3, [r3, #68] @ 0x44
  38912. 80106d0: b25b sxtb r3, r3
  38913. 80106d2: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  38914. 80106d6: d103 bne.n 80106e0 <xQueueReceive+0x128>
  38915. 80106d8: 6abb ldr r3, [r7, #40] @ 0x28
  38916. 80106da: 2200 movs r2, #0
  38917. 80106dc: f883 2044 strb.w r2, [r3, #68] @ 0x44
  38918. 80106e0: 6abb ldr r3, [r7, #40] @ 0x28
  38919. 80106e2: f893 3045 ldrb.w r3, [r3, #69] @ 0x45
  38920. 80106e6: b25b sxtb r3, r3
  38921. 80106e8: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  38922. 80106ec: d103 bne.n 80106f6 <xQueueReceive+0x13e>
  38923. 80106ee: 6abb ldr r3, [r7, #40] @ 0x28
  38924. 80106f0: 2200 movs r2, #0
  38925. 80106f2: f883 2045 strb.w r2, [r3, #69] @ 0x45
  38926. 80106f6: f002 fc81 bl 8012ffc <vPortExitCritical>
  38927. /* Update the timeout state to see if it has expired yet. */
  38928. if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE )
  38929. 80106fa: 1d3a adds r2, r7, #4
  38930. 80106fc: f107 0310 add.w r3, r7, #16
  38931. 8010700: 4611 mov r1, r2
  38932. 8010702: 4618 mov r0, r3
  38933. 8010704: f001 fa52 bl 8011bac <xTaskCheckForTimeOut>
  38934. 8010708: 4603 mov r3, r0
  38935. 801070a: 2b00 cmp r3, #0
  38936. 801070c: d123 bne.n 8010756 <xQueueReceive+0x19e>
  38937. {
  38938. /* The timeout has not expired. If the queue is still empty place
  38939. the task on the list of tasks waiting to receive from the queue. */
  38940. if( prvIsQueueEmpty( pxQueue ) != pdFALSE )
  38941. 801070e: 6ab8 ldr r0, [r7, #40] @ 0x28
  38942. 8010710: f000 fac0 bl 8010c94 <prvIsQueueEmpty>
  38943. 8010714: 4603 mov r3, r0
  38944. 8010716: 2b00 cmp r3, #0
  38945. 8010718: d017 beq.n 801074a <xQueueReceive+0x192>
  38946. {
  38947. traceBLOCKING_ON_QUEUE_RECEIVE( pxQueue );
  38948. vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait );
  38949. 801071a: 6abb ldr r3, [r7, #40] @ 0x28
  38950. 801071c: 3324 adds r3, #36 @ 0x24
  38951. 801071e: 687a ldr r2, [r7, #4]
  38952. 8010720: 4611 mov r1, r2
  38953. 8010722: 4618 mov r0, r3
  38954. 8010724: f001 f94e bl 80119c4 <vTaskPlaceOnEventList>
  38955. prvUnlockQueue( pxQueue );
  38956. 8010728: 6ab8 ldr r0, [r7, #40] @ 0x28
  38957. 801072a: f000 fa61 bl 8010bf0 <prvUnlockQueue>
  38958. if( xTaskResumeAll() == pdFALSE )
  38959. 801072e: f000 ff6d bl 801160c <xTaskResumeAll>
  38960. 8010732: 4603 mov r3, r0
  38961. 8010734: 2b00 cmp r3, #0
  38962. 8010736: d189 bne.n 801064c <xQueueReceive+0x94>
  38963. {
  38964. portYIELD_WITHIN_API();
  38965. 8010738: 4b0f ldr r3, [pc, #60] @ (8010778 <xQueueReceive+0x1c0>)
  38966. 801073a: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  38967. 801073e: 601a str r2, [r3, #0]
  38968. 8010740: f3bf 8f4f dsb sy
  38969. 8010744: f3bf 8f6f isb sy
  38970. 8010748: e780 b.n 801064c <xQueueReceive+0x94>
  38971. }
  38972. else
  38973. {
  38974. /* The queue contains data again. Loop back to try and read the
  38975. data. */
  38976. prvUnlockQueue( pxQueue );
  38977. 801074a: 6ab8 ldr r0, [r7, #40] @ 0x28
  38978. 801074c: f000 fa50 bl 8010bf0 <prvUnlockQueue>
  38979. ( void ) xTaskResumeAll();
  38980. 8010750: f000 ff5c bl 801160c <xTaskResumeAll>
  38981. 8010754: e77a b.n 801064c <xQueueReceive+0x94>
  38982. }
  38983. else
  38984. {
  38985. /* Timed out. If there is no data in the queue exit, otherwise loop
  38986. back and attempt to read the data. */
  38987. prvUnlockQueue( pxQueue );
  38988. 8010756: 6ab8 ldr r0, [r7, #40] @ 0x28
  38989. 8010758: f000 fa4a bl 8010bf0 <prvUnlockQueue>
  38990. ( void ) xTaskResumeAll();
  38991. 801075c: f000 ff56 bl 801160c <xTaskResumeAll>
  38992. if( prvIsQueueEmpty( pxQueue ) != pdFALSE )
  38993. 8010760: 6ab8 ldr r0, [r7, #40] @ 0x28
  38994. 8010762: f000 fa97 bl 8010c94 <prvIsQueueEmpty>
  38995. 8010766: 4603 mov r3, r0
  38996. 8010768: 2b00 cmp r3, #0
  38997. 801076a: f43f af6f beq.w 801064c <xQueueReceive+0x94>
  38998. {
  38999. traceQUEUE_RECEIVE_FAILED( pxQueue );
  39000. return errQUEUE_EMPTY;
  39001. 801076e: 2300 movs r3, #0
  39002. {
  39003. mtCOVERAGE_TEST_MARKER();
  39004. }
  39005. }
  39006. } /*lint -restore */
  39007. }
  39008. 8010770: 4618 mov r0, r3
  39009. 8010772: 3730 adds r7, #48 @ 0x30
  39010. 8010774: 46bd mov sp, r7
  39011. 8010776: bd80 pop {r7, pc}
  39012. 8010778: e000ed04 .word 0xe000ed04
  39013. 0801077c <xQueueSemaphoreTake>:
  39014. /*-----------------------------------------------------------*/
  39015. BaseType_t xQueueSemaphoreTake( QueueHandle_t xQueue, TickType_t xTicksToWait )
  39016. {
  39017. 801077c: b580 push {r7, lr}
  39018. 801077e: b08e sub sp, #56 @ 0x38
  39019. 8010780: af00 add r7, sp, #0
  39020. 8010782: 6078 str r0, [r7, #4]
  39021. 8010784: 6039 str r1, [r7, #0]
  39022. BaseType_t xEntryTimeSet = pdFALSE;
  39023. 8010786: 2300 movs r3, #0
  39024. 8010788: 637b str r3, [r7, #52] @ 0x34
  39025. TimeOut_t xTimeOut;
  39026. Queue_t * const pxQueue = xQueue;
  39027. 801078a: 687b ldr r3, [r7, #4]
  39028. 801078c: 62fb str r3, [r7, #44] @ 0x2c
  39029. #if( configUSE_MUTEXES == 1 )
  39030. BaseType_t xInheritanceOccurred = pdFALSE;
  39031. 801078e: 2300 movs r3, #0
  39032. 8010790: 633b str r3, [r7, #48] @ 0x30
  39033. #endif
  39034. /* Check the queue pointer is not NULL. */
  39035. configASSERT( ( pxQueue ) );
  39036. 8010792: 6afb ldr r3, [r7, #44] @ 0x2c
  39037. 8010794: 2b00 cmp r3, #0
  39038. 8010796: d10b bne.n 80107b0 <xQueueSemaphoreTake+0x34>
  39039. __asm volatile
  39040. 8010798: f04f 0350 mov.w r3, #80 @ 0x50
  39041. 801079c: f383 8811 msr BASEPRI, r3
  39042. 80107a0: f3bf 8f6f isb sy
  39043. 80107a4: f3bf 8f4f dsb sy
  39044. 80107a8: 623b str r3, [r7, #32]
  39045. }
  39046. 80107aa: bf00 nop
  39047. 80107ac: bf00 nop
  39048. 80107ae: e7fd b.n 80107ac <xQueueSemaphoreTake+0x30>
  39049. /* Check this really is a semaphore, in which case the item size will be
  39050. 0. */
  39051. configASSERT( pxQueue->uxItemSize == 0 );
  39052. 80107b0: 6afb ldr r3, [r7, #44] @ 0x2c
  39053. 80107b2: 6c1b ldr r3, [r3, #64] @ 0x40
  39054. 80107b4: 2b00 cmp r3, #0
  39055. 80107b6: d00b beq.n 80107d0 <xQueueSemaphoreTake+0x54>
  39056. __asm volatile
  39057. 80107b8: f04f 0350 mov.w r3, #80 @ 0x50
  39058. 80107bc: f383 8811 msr BASEPRI, r3
  39059. 80107c0: f3bf 8f6f isb sy
  39060. 80107c4: f3bf 8f4f dsb sy
  39061. 80107c8: 61fb str r3, [r7, #28]
  39062. }
  39063. 80107ca: bf00 nop
  39064. 80107cc: bf00 nop
  39065. 80107ce: e7fd b.n 80107cc <xQueueSemaphoreTake+0x50>
  39066. /* Cannot block if the scheduler is suspended. */
  39067. #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
  39068. {
  39069. configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );
  39070. 80107d0: f001 fb48 bl 8011e64 <xTaskGetSchedulerState>
  39071. 80107d4: 4603 mov r3, r0
  39072. 80107d6: 2b00 cmp r3, #0
  39073. 80107d8: d102 bne.n 80107e0 <xQueueSemaphoreTake+0x64>
  39074. 80107da: 683b ldr r3, [r7, #0]
  39075. 80107dc: 2b00 cmp r3, #0
  39076. 80107de: d101 bne.n 80107e4 <xQueueSemaphoreTake+0x68>
  39077. 80107e0: 2301 movs r3, #1
  39078. 80107e2: e000 b.n 80107e6 <xQueueSemaphoreTake+0x6a>
  39079. 80107e4: 2300 movs r3, #0
  39080. 80107e6: 2b00 cmp r3, #0
  39081. 80107e8: d10b bne.n 8010802 <xQueueSemaphoreTake+0x86>
  39082. __asm volatile
  39083. 80107ea: f04f 0350 mov.w r3, #80 @ 0x50
  39084. 80107ee: f383 8811 msr BASEPRI, r3
  39085. 80107f2: f3bf 8f6f isb sy
  39086. 80107f6: f3bf 8f4f dsb sy
  39087. 80107fa: 61bb str r3, [r7, #24]
  39088. }
  39089. 80107fc: bf00 nop
  39090. 80107fe: bf00 nop
  39091. 8010800: e7fd b.n 80107fe <xQueueSemaphoreTake+0x82>
  39092. /*lint -save -e904 This function relaxes the coding standard somewhat to allow return
  39093. statements within the function itself. This is done in the interest
  39094. of execution time efficiency. */
  39095. for( ;; )
  39096. {
  39097. taskENTER_CRITICAL();
  39098. 8010802: f002 fbc9 bl 8012f98 <vPortEnterCritical>
  39099. {
  39100. /* Semaphores are queues with an item size of 0, and where the
  39101. number of messages in the queue is the semaphore's count value. */
  39102. const UBaseType_t uxSemaphoreCount = pxQueue->uxMessagesWaiting;
  39103. 8010806: 6afb ldr r3, [r7, #44] @ 0x2c
  39104. 8010808: 6b9b ldr r3, [r3, #56] @ 0x38
  39105. 801080a: 62bb str r3, [r7, #40] @ 0x28
  39106. /* Is there data in the queue now? To be running the calling task
  39107. must be the highest priority task wanting to access the queue. */
  39108. if( uxSemaphoreCount > ( UBaseType_t ) 0 )
  39109. 801080c: 6abb ldr r3, [r7, #40] @ 0x28
  39110. 801080e: 2b00 cmp r3, #0
  39111. 8010810: d024 beq.n 801085c <xQueueSemaphoreTake+0xe0>
  39112. {
  39113. traceQUEUE_RECEIVE( pxQueue );
  39114. /* Semaphores are queues with a data size of zero and where the
  39115. messages waiting is the semaphore's count. Reduce the count. */
  39116. pxQueue->uxMessagesWaiting = uxSemaphoreCount - ( UBaseType_t ) 1;
  39117. 8010812: 6abb ldr r3, [r7, #40] @ 0x28
  39118. 8010814: 1e5a subs r2, r3, #1
  39119. 8010816: 6afb ldr r3, [r7, #44] @ 0x2c
  39120. 8010818: 639a str r2, [r3, #56] @ 0x38
  39121. #if ( configUSE_MUTEXES == 1 )
  39122. {
  39123. if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX )
  39124. 801081a: 6afb ldr r3, [r7, #44] @ 0x2c
  39125. 801081c: 681b ldr r3, [r3, #0]
  39126. 801081e: 2b00 cmp r3, #0
  39127. 8010820: d104 bne.n 801082c <xQueueSemaphoreTake+0xb0>
  39128. {
  39129. /* Record the information required to implement
  39130. priority inheritance should it become necessary. */
  39131. pxQueue->u.xSemaphore.xMutexHolder = pvTaskIncrementMutexHeldCount();
  39132. 8010822: f001 fc99 bl 8012158 <pvTaskIncrementMutexHeldCount>
  39133. 8010826: 4602 mov r2, r0
  39134. 8010828: 6afb ldr r3, [r7, #44] @ 0x2c
  39135. 801082a: 609a str r2, [r3, #8]
  39136. }
  39137. #endif /* configUSE_MUTEXES */
  39138. /* Check to see if other tasks are blocked waiting to give the
  39139. semaphore, and if so, unblock the highest priority such task. */
  39140. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )
  39141. 801082c: 6afb ldr r3, [r7, #44] @ 0x2c
  39142. 801082e: 691b ldr r3, [r3, #16]
  39143. 8010830: 2b00 cmp r3, #0
  39144. 8010832: d00f beq.n 8010854 <xQueueSemaphoreTake+0xd8>
  39145. {
  39146. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE )
  39147. 8010834: 6afb ldr r3, [r7, #44] @ 0x2c
  39148. 8010836: 3310 adds r3, #16
  39149. 8010838: 4618 mov r0, r3
  39150. 801083a: f001 f915 bl 8011a68 <xTaskRemoveFromEventList>
  39151. 801083e: 4603 mov r3, r0
  39152. 8010840: 2b00 cmp r3, #0
  39153. 8010842: d007 beq.n 8010854 <xQueueSemaphoreTake+0xd8>
  39154. {
  39155. queueYIELD_IF_USING_PREEMPTION();
  39156. 8010844: 4b54 ldr r3, [pc, #336] @ (8010998 <xQueueSemaphoreTake+0x21c>)
  39157. 8010846: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  39158. 801084a: 601a str r2, [r3, #0]
  39159. 801084c: f3bf 8f4f dsb sy
  39160. 8010850: f3bf 8f6f isb sy
  39161. else
  39162. {
  39163. mtCOVERAGE_TEST_MARKER();
  39164. }
  39165. taskEXIT_CRITICAL();
  39166. 8010854: f002 fbd2 bl 8012ffc <vPortExitCritical>
  39167. return pdPASS;
  39168. 8010858: 2301 movs r3, #1
  39169. 801085a: e098 b.n 801098e <xQueueSemaphoreTake+0x212>
  39170. }
  39171. else
  39172. {
  39173. if( xTicksToWait == ( TickType_t ) 0 )
  39174. 801085c: 683b ldr r3, [r7, #0]
  39175. 801085e: 2b00 cmp r3, #0
  39176. 8010860: d112 bne.n 8010888 <xQueueSemaphoreTake+0x10c>
  39177. /* For inheritance to have occurred there must have been an
  39178. initial timeout, and an adjusted timeout cannot become 0, as
  39179. if it were 0 the function would have exited. */
  39180. #if( configUSE_MUTEXES == 1 )
  39181. {
  39182. configASSERT( xInheritanceOccurred == pdFALSE );
  39183. 8010862: 6b3b ldr r3, [r7, #48] @ 0x30
  39184. 8010864: 2b00 cmp r3, #0
  39185. 8010866: d00b beq.n 8010880 <xQueueSemaphoreTake+0x104>
  39186. __asm volatile
  39187. 8010868: f04f 0350 mov.w r3, #80 @ 0x50
  39188. 801086c: f383 8811 msr BASEPRI, r3
  39189. 8010870: f3bf 8f6f isb sy
  39190. 8010874: f3bf 8f4f dsb sy
  39191. 8010878: 617b str r3, [r7, #20]
  39192. }
  39193. 801087a: bf00 nop
  39194. 801087c: bf00 nop
  39195. 801087e: e7fd b.n 801087c <xQueueSemaphoreTake+0x100>
  39196. }
  39197. #endif /* configUSE_MUTEXES */
  39198. /* The semaphore count was 0 and no block time is specified
  39199. (or the block time has expired) so exit now. */
  39200. taskEXIT_CRITICAL();
  39201. 8010880: f002 fbbc bl 8012ffc <vPortExitCritical>
  39202. traceQUEUE_RECEIVE_FAILED( pxQueue );
  39203. return errQUEUE_EMPTY;
  39204. 8010884: 2300 movs r3, #0
  39205. 8010886: e082 b.n 801098e <xQueueSemaphoreTake+0x212>
  39206. }
  39207. else if( xEntryTimeSet == pdFALSE )
  39208. 8010888: 6b7b ldr r3, [r7, #52] @ 0x34
  39209. 801088a: 2b00 cmp r3, #0
  39210. 801088c: d106 bne.n 801089c <xQueueSemaphoreTake+0x120>
  39211. {
  39212. /* The semaphore count was 0 and a block time was specified
  39213. so configure the timeout structure ready to block. */
  39214. vTaskInternalSetTimeOutState( &xTimeOut );
  39215. 801088e: f107 030c add.w r3, r7, #12
  39216. 8010892: 4618 mov r0, r3
  39217. 8010894: f001 f974 bl 8011b80 <vTaskInternalSetTimeOutState>
  39218. xEntryTimeSet = pdTRUE;
  39219. 8010898: 2301 movs r3, #1
  39220. 801089a: 637b str r3, [r7, #52] @ 0x34
  39221. /* Entry time was already set. */
  39222. mtCOVERAGE_TEST_MARKER();
  39223. }
  39224. }
  39225. }
  39226. taskEXIT_CRITICAL();
  39227. 801089c: f002 fbae bl 8012ffc <vPortExitCritical>
  39228. /* Interrupts and other tasks can give to and take from the semaphore
  39229. now the critical section has been exited. */
  39230. vTaskSuspendAll();
  39231. 80108a0: f000 fea6 bl 80115f0 <vTaskSuspendAll>
  39232. prvLockQueue( pxQueue );
  39233. 80108a4: f002 fb78 bl 8012f98 <vPortEnterCritical>
  39234. 80108a8: 6afb ldr r3, [r7, #44] @ 0x2c
  39235. 80108aa: f893 3044 ldrb.w r3, [r3, #68] @ 0x44
  39236. 80108ae: b25b sxtb r3, r3
  39237. 80108b0: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  39238. 80108b4: d103 bne.n 80108be <xQueueSemaphoreTake+0x142>
  39239. 80108b6: 6afb ldr r3, [r7, #44] @ 0x2c
  39240. 80108b8: 2200 movs r2, #0
  39241. 80108ba: f883 2044 strb.w r2, [r3, #68] @ 0x44
  39242. 80108be: 6afb ldr r3, [r7, #44] @ 0x2c
  39243. 80108c0: f893 3045 ldrb.w r3, [r3, #69] @ 0x45
  39244. 80108c4: b25b sxtb r3, r3
  39245. 80108c6: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  39246. 80108ca: d103 bne.n 80108d4 <xQueueSemaphoreTake+0x158>
  39247. 80108cc: 6afb ldr r3, [r7, #44] @ 0x2c
  39248. 80108ce: 2200 movs r2, #0
  39249. 80108d0: f883 2045 strb.w r2, [r3, #69] @ 0x45
  39250. 80108d4: f002 fb92 bl 8012ffc <vPortExitCritical>
  39251. /* Update the timeout state to see if it has expired yet. */
  39252. if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE )
  39253. 80108d8: 463a mov r2, r7
  39254. 80108da: f107 030c add.w r3, r7, #12
  39255. 80108de: 4611 mov r1, r2
  39256. 80108e0: 4618 mov r0, r3
  39257. 80108e2: f001 f963 bl 8011bac <xTaskCheckForTimeOut>
  39258. 80108e6: 4603 mov r3, r0
  39259. 80108e8: 2b00 cmp r3, #0
  39260. 80108ea: d132 bne.n 8010952 <xQueueSemaphoreTake+0x1d6>
  39261. {
  39262. /* A block time is specified and not expired. If the semaphore
  39263. count is 0 then enter the Blocked state to wait for a semaphore to
  39264. become available. As semaphores are implemented with queues the
  39265. queue being empty is equivalent to the semaphore count being 0. */
  39266. if( prvIsQueueEmpty( pxQueue ) != pdFALSE )
  39267. 80108ec: 6af8 ldr r0, [r7, #44] @ 0x2c
  39268. 80108ee: f000 f9d1 bl 8010c94 <prvIsQueueEmpty>
  39269. 80108f2: 4603 mov r3, r0
  39270. 80108f4: 2b00 cmp r3, #0
  39271. 80108f6: d026 beq.n 8010946 <xQueueSemaphoreTake+0x1ca>
  39272. {
  39273. traceBLOCKING_ON_QUEUE_RECEIVE( pxQueue );
  39274. #if ( configUSE_MUTEXES == 1 )
  39275. {
  39276. if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX )
  39277. 80108f8: 6afb ldr r3, [r7, #44] @ 0x2c
  39278. 80108fa: 681b ldr r3, [r3, #0]
  39279. 80108fc: 2b00 cmp r3, #0
  39280. 80108fe: d109 bne.n 8010914 <xQueueSemaphoreTake+0x198>
  39281. {
  39282. taskENTER_CRITICAL();
  39283. 8010900: f002 fb4a bl 8012f98 <vPortEnterCritical>
  39284. {
  39285. xInheritanceOccurred = xTaskPriorityInherit( pxQueue->u.xSemaphore.xMutexHolder );
  39286. 8010904: 6afb ldr r3, [r7, #44] @ 0x2c
  39287. 8010906: 689b ldr r3, [r3, #8]
  39288. 8010908: 4618 mov r0, r3
  39289. 801090a: f001 fac9 bl 8011ea0 <xTaskPriorityInherit>
  39290. 801090e: 6338 str r0, [r7, #48] @ 0x30
  39291. }
  39292. taskEXIT_CRITICAL();
  39293. 8010910: f002 fb74 bl 8012ffc <vPortExitCritical>
  39294. mtCOVERAGE_TEST_MARKER();
  39295. }
  39296. }
  39297. #endif
  39298. vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait );
  39299. 8010914: 6afb ldr r3, [r7, #44] @ 0x2c
  39300. 8010916: 3324 adds r3, #36 @ 0x24
  39301. 8010918: 683a ldr r2, [r7, #0]
  39302. 801091a: 4611 mov r1, r2
  39303. 801091c: 4618 mov r0, r3
  39304. 801091e: f001 f851 bl 80119c4 <vTaskPlaceOnEventList>
  39305. prvUnlockQueue( pxQueue );
  39306. 8010922: 6af8 ldr r0, [r7, #44] @ 0x2c
  39307. 8010924: f000 f964 bl 8010bf0 <prvUnlockQueue>
  39308. if( xTaskResumeAll() == pdFALSE )
  39309. 8010928: f000 fe70 bl 801160c <xTaskResumeAll>
  39310. 801092c: 4603 mov r3, r0
  39311. 801092e: 2b00 cmp r3, #0
  39312. 8010930: f47f af67 bne.w 8010802 <xQueueSemaphoreTake+0x86>
  39313. {
  39314. portYIELD_WITHIN_API();
  39315. 8010934: 4b18 ldr r3, [pc, #96] @ (8010998 <xQueueSemaphoreTake+0x21c>)
  39316. 8010936: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  39317. 801093a: 601a str r2, [r3, #0]
  39318. 801093c: f3bf 8f4f dsb sy
  39319. 8010940: f3bf 8f6f isb sy
  39320. 8010944: e75d b.n 8010802 <xQueueSemaphoreTake+0x86>
  39321. }
  39322. else
  39323. {
  39324. /* There was no timeout and the semaphore count was not 0, so
  39325. attempt to take the semaphore again. */
  39326. prvUnlockQueue( pxQueue );
  39327. 8010946: 6af8 ldr r0, [r7, #44] @ 0x2c
  39328. 8010948: f000 f952 bl 8010bf0 <prvUnlockQueue>
  39329. ( void ) xTaskResumeAll();
  39330. 801094c: f000 fe5e bl 801160c <xTaskResumeAll>
  39331. 8010950: e757 b.n 8010802 <xQueueSemaphoreTake+0x86>
  39332. }
  39333. }
  39334. else
  39335. {
  39336. /* Timed out. */
  39337. prvUnlockQueue( pxQueue );
  39338. 8010952: 6af8 ldr r0, [r7, #44] @ 0x2c
  39339. 8010954: f000 f94c bl 8010bf0 <prvUnlockQueue>
  39340. ( void ) xTaskResumeAll();
  39341. 8010958: f000 fe58 bl 801160c <xTaskResumeAll>
  39342. /* If the semaphore count is 0 exit now as the timeout has
  39343. expired. Otherwise return to attempt to take the semaphore that is
  39344. known to be available. As semaphores are implemented by queues the
  39345. queue being empty is equivalent to the semaphore count being 0. */
  39346. if( prvIsQueueEmpty( pxQueue ) != pdFALSE )
  39347. 801095c: 6af8 ldr r0, [r7, #44] @ 0x2c
  39348. 801095e: f000 f999 bl 8010c94 <prvIsQueueEmpty>
  39349. 8010962: 4603 mov r3, r0
  39350. 8010964: 2b00 cmp r3, #0
  39351. 8010966: f43f af4c beq.w 8010802 <xQueueSemaphoreTake+0x86>
  39352. #if ( configUSE_MUTEXES == 1 )
  39353. {
  39354. /* xInheritanceOccurred could only have be set if
  39355. pxQueue->uxQueueType == queueQUEUE_IS_MUTEX so no need to
  39356. test the mutex type again to check it is actually a mutex. */
  39357. if( xInheritanceOccurred != pdFALSE )
  39358. 801096a: 6b3b ldr r3, [r7, #48] @ 0x30
  39359. 801096c: 2b00 cmp r3, #0
  39360. 801096e: d00d beq.n 801098c <xQueueSemaphoreTake+0x210>
  39361. {
  39362. taskENTER_CRITICAL();
  39363. 8010970: f002 fb12 bl 8012f98 <vPortEnterCritical>
  39364. /* This task blocking on the mutex caused another
  39365. task to inherit this task's priority. Now this task
  39366. has timed out the priority should be disinherited
  39367. again, but only as low as the next highest priority
  39368. task that is waiting for the same mutex. */
  39369. uxHighestWaitingPriority = prvGetDisinheritPriorityAfterTimeout( pxQueue );
  39370. 8010974: 6af8 ldr r0, [r7, #44] @ 0x2c
  39371. 8010976: f000 f893 bl 8010aa0 <prvGetDisinheritPriorityAfterTimeout>
  39372. 801097a: 6278 str r0, [r7, #36] @ 0x24
  39373. vTaskPriorityDisinheritAfterTimeout( pxQueue->u.xSemaphore.xMutexHolder, uxHighestWaitingPriority );
  39374. 801097c: 6afb ldr r3, [r7, #44] @ 0x2c
  39375. 801097e: 689b ldr r3, [r3, #8]
  39376. 8010980: 6a79 ldr r1, [r7, #36] @ 0x24
  39377. 8010982: 4618 mov r0, r3
  39378. 8010984: f001 fb64 bl 8012050 <vTaskPriorityDisinheritAfterTimeout>
  39379. }
  39380. taskEXIT_CRITICAL();
  39381. 8010988: f002 fb38 bl 8012ffc <vPortExitCritical>
  39382. }
  39383. }
  39384. #endif /* configUSE_MUTEXES */
  39385. traceQUEUE_RECEIVE_FAILED( pxQueue );
  39386. return errQUEUE_EMPTY;
  39387. 801098c: 2300 movs r3, #0
  39388. {
  39389. mtCOVERAGE_TEST_MARKER();
  39390. }
  39391. }
  39392. } /*lint -restore */
  39393. }
  39394. 801098e: 4618 mov r0, r3
  39395. 8010990: 3738 adds r7, #56 @ 0x38
  39396. 8010992: 46bd mov sp, r7
  39397. 8010994: bd80 pop {r7, pc}
  39398. 8010996: bf00 nop
  39399. 8010998: e000ed04 .word 0xe000ed04
  39400. 0801099c <xQueueReceiveFromISR>:
  39401. } /*lint -restore */
  39402. }
  39403. /*-----------------------------------------------------------*/
  39404. BaseType_t xQueueReceiveFromISR( QueueHandle_t xQueue, void * const pvBuffer, BaseType_t * const pxHigherPriorityTaskWoken )
  39405. {
  39406. 801099c: b580 push {r7, lr}
  39407. 801099e: b08e sub sp, #56 @ 0x38
  39408. 80109a0: af00 add r7, sp, #0
  39409. 80109a2: 60f8 str r0, [r7, #12]
  39410. 80109a4: 60b9 str r1, [r7, #8]
  39411. 80109a6: 607a str r2, [r7, #4]
  39412. BaseType_t xReturn;
  39413. UBaseType_t uxSavedInterruptStatus;
  39414. Queue_t * const pxQueue = xQueue;
  39415. 80109a8: 68fb ldr r3, [r7, #12]
  39416. 80109aa: 633b str r3, [r7, #48] @ 0x30
  39417. configASSERT( pxQueue );
  39418. 80109ac: 6b3b ldr r3, [r7, #48] @ 0x30
  39419. 80109ae: 2b00 cmp r3, #0
  39420. 80109b0: d10b bne.n 80109ca <xQueueReceiveFromISR+0x2e>
  39421. __asm volatile
  39422. 80109b2: f04f 0350 mov.w r3, #80 @ 0x50
  39423. 80109b6: f383 8811 msr BASEPRI, r3
  39424. 80109ba: f3bf 8f6f isb sy
  39425. 80109be: f3bf 8f4f dsb sy
  39426. 80109c2: 623b str r3, [r7, #32]
  39427. }
  39428. 80109c4: bf00 nop
  39429. 80109c6: bf00 nop
  39430. 80109c8: e7fd b.n 80109c6 <xQueueReceiveFromISR+0x2a>
  39431. configASSERT( !( ( pvBuffer == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) );
  39432. 80109ca: 68bb ldr r3, [r7, #8]
  39433. 80109cc: 2b00 cmp r3, #0
  39434. 80109ce: d103 bne.n 80109d8 <xQueueReceiveFromISR+0x3c>
  39435. 80109d0: 6b3b ldr r3, [r7, #48] @ 0x30
  39436. 80109d2: 6c1b ldr r3, [r3, #64] @ 0x40
  39437. 80109d4: 2b00 cmp r3, #0
  39438. 80109d6: d101 bne.n 80109dc <xQueueReceiveFromISR+0x40>
  39439. 80109d8: 2301 movs r3, #1
  39440. 80109da: e000 b.n 80109de <xQueueReceiveFromISR+0x42>
  39441. 80109dc: 2300 movs r3, #0
  39442. 80109de: 2b00 cmp r3, #0
  39443. 80109e0: d10b bne.n 80109fa <xQueueReceiveFromISR+0x5e>
  39444. __asm volatile
  39445. 80109e2: f04f 0350 mov.w r3, #80 @ 0x50
  39446. 80109e6: f383 8811 msr BASEPRI, r3
  39447. 80109ea: f3bf 8f6f isb sy
  39448. 80109ee: f3bf 8f4f dsb sy
  39449. 80109f2: 61fb str r3, [r7, #28]
  39450. }
  39451. 80109f4: bf00 nop
  39452. 80109f6: bf00 nop
  39453. 80109f8: e7fd b.n 80109f6 <xQueueReceiveFromISR+0x5a>
  39454. that have been assigned a priority at or (logically) below the maximum
  39455. system call interrupt priority. FreeRTOS maintains a separate interrupt
  39456. safe API to ensure interrupt entry is as fast and as simple as possible.
  39457. More information (albeit Cortex-M specific) is provided on the following
  39458. link: http://www.freertos.org/RTOS-Cortex-M3-M4.html */
  39459. portASSERT_IF_INTERRUPT_PRIORITY_INVALID();
  39460. 80109fa: f002 fbad bl 8013158 <vPortValidateInterruptPriority>
  39461. __asm volatile
  39462. 80109fe: f3ef 8211 mrs r2, BASEPRI
  39463. 8010a02: f04f 0350 mov.w r3, #80 @ 0x50
  39464. 8010a06: f383 8811 msr BASEPRI, r3
  39465. 8010a0a: f3bf 8f6f isb sy
  39466. 8010a0e: f3bf 8f4f dsb sy
  39467. 8010a12: 61ba str r2, [r7, #24]
  39468. 8010a14: 617b str r3, [r7, #20]
  39469. return ulOriginalBASEPRI;
  39470. 8010a16: 69bb ldr r3, [r7, #24]
  39471. uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
  39472. 8010a18: 62fb str r3, [r7, #44] @ 0x2c
  39473. {
  39474. const UBaseType_t uxMessagesWaiting = pxQueue->uxMessagesWaiting;
  39475. 8010a1a: 6b3b ldr r3, [r7, #48] @ 0x30
  39476. 8010a1c: 6b9b ldr r3, [r3, #56] @ 0x38
  39477. 8010a1e: 62bb str r3, [r7, #40] @ 0x28
  39478. /* Cannot block in an ISR, so check there is data available. */
  39479. if( uxMessagesWaiting > ( UBaseType_t ) 0 )
  39480. 8010a20: 6abb ldr r3, [r7, #40] @ 0x28
  39481. 8010a22: 2b00 cmp r3, #0
  39482. 8010a24: d02f beq.n 8010a86 <xQueueReceiveFromISR+0xea>
  39483. {
  39484. const int8_t cRxLock = pxQueue->cRxLock;
  39485. 8010a26: 6b3b ldr r3, [r7, #48] @ 0x30
  39486. 8010a28: f893 3044 ldrb.w r3, [r3, #68] @ 0x44
  39487. 8010a2c: f887 3027 strb.w r3, [r7, #39] @ 0x27
  39488. traceQUEUE_RECEIVE_FROM_ISR( pxQueue );
  39489. prvCopyDataFromQueue( pxQueue, pvBuffer );
  39490. 8010a30: 68b9 ldr r1, [r7, #8]
  39491. 8010a32: 6b38 ldr r0, [r7, #48] @ 0x30
  39492. 8010a34: f000 f8b6 bl 8010ba4 <prvCopyDataFromQueue>
  39493. pxQueue->uxMessagesWaiting = uxMessagesWaiting - ( UBaseType_t ) 1;
  39494. 8010a38: 6abb ldr r3, [r7, #40] @ 0x28
  39495. 8010a3a: 1e5a subs r2, r3, #1
  39496. 8010a3c: 6b3b ldr r3, [r7, #48] @ 0x30
  39497. 8010a3e: 639a str r2, [r3, #56] @ 0x38
  39498. /* If the queue is locked the event list will not be modified.
  39499. Instead update the lock count so the task that unlocks the queue
  39500. will know that an ISR has removed data while the queue was
  39501. locked. */
  39502. if( cRxLock == queueUNLOCKED )
  39503. 8010a40: f997 3027 ldrsb.w r3, [r7, #39] @ 0x27
  39504. 8010a44: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  39505. 8010a48: d112 bne.n 8010a70 <xQueueReceiveFromISR+0xd4>
  39506. {
  39507. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )
  39508. 8010a4a: 6b3b ldr r3, [r7, #48] @ 0x30
  39509. 8010a4c: 691b ldr r3, [r3, #16]
  39510. 8010a4e: 2b00 cmp r3, #0
  39511. 8010a50: d016 beq.n 8010a80 <xQueueReceiveFromISR+0xe4>
  39512. {
  39513. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE )
  39514. 8010a52: 6b3b ldr r3, [r7, #48] @ 0x30
  39515. 8010a54: 3310 adds r3, #16
  39516. 8010a56: 4618 mov r0, r3
  39517. 8010a58: f001 f806 bl 8011a68 <xTaskRemoveFromEventList>
  39518. 8010a5c: 4603 mov r3, r0
  39519. 8010a5e: 2b00 cmp r3, #0
  39520. 8010a60: d00e beq.n 8010a80 <xQueueReceiveFromISR+0xe4>
  39521. {
  39522. /* The task waiting has a higher priority than us so
  39523. force a context switch. */
  39524. if( pxHigherPriorityTaskWoken != NULL )
  39525. 8010a62: 687b ldr r3, [r7, #4]
  39526. 8010a64: 2b00 cmp r3, #0
  39527. 8010a66: d00b beq.n 8010a80 <xQueueReceiveFromISR+0xe4>
  39528. {
  39529. *pxHigherPriorityTaskWoken = pdTRUE;
  39530. 8010a68: 687b ldr r3, [r7, #4]
  39531. 8010a6a: 2201 movs r2, #1
  39532. 8010a6c: 601a str r2, [r3, #0]
  39533. 8010a6e: e007 b.n 8010a80 <xQueueReceiveFromISR+0xe4>
  39534. }
  39535. else
  39536. {
  39537. /* Increment the lock count so the task that unlocks the queue
  39538. knows that data was removed while it was locked. */
  39539. pxQueue->cRxLock = ( int8_t ) ( cRxLock + 1 );
  39540. 8010a70: f897 3027 ldrb.w r3, [r7, #39] @ 0x27
  39541. 8010a74: 3301 adds r3, #1
  39542. 8010a76: b2db uxtb r3, r3
  39543. 8010a78: b25a sxtb r2, r3
  39544. 8010a7a: 6b3b ldr r3, [r7, #48] @ 0x30
  39545. 8010a7c: f883 2044 strb.w r2, [r3, #68] @ 0x44
  39546. }
  39547. xReturn = pdPASS;
  39548. 8010a80: 2301 movs r3, #1
  39549. 8010a82: 637b str r3, [r7, #52] @ 0x34
  39550. 8010a84: e001 b.n 8010a8a <xQueueReceiveFromISR+0xee>
  39551. }
  39552. else
  39553. {
  39554. xReturn = pdFAIL;
  39555. 8010a86: 2300 movs r3, #0
  39556. 8010a88: 637b str r3, [r7, #52] @ 0x34
  39557. 8010a8a: 6afb ldr r3, [r7, #44] @ 0x2c
  39558. 8010a8c: 613b str r3, [r7, #16]
  39559. __asm volatile
  39560. 8010a8e: 693b ldr r3, [r7, #16]
  39561. 8010a90: f383 8811 msr BASEPRI, r3
  39562. }
  39563. 8010a94: bf00 nop
  39564. traceQUEUE_RECEIVE_FROM_ISR_FAILED( pxQueue );
  39565. }
  39566. }
  39567. portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus );
  39568. return xReturn;
  39569. 8010a96: 6b7b ldr r3, [r7, #52] @ 0x34
  39570. }
  39571. 8010a98: 4618 mov r0, r3
  39572. 8010a9a: 3738 adds r7, #56 @ 0x38
  39573. 8010a9c: 46bd mov sp, r7
  39574. 8010a9e: bd80 pop {r7, pc}
  39575. 08010aa0 <prvGetDisinheritPriorityAfterTimeout>:
  39576. /*-----------------------------------------------------------*/
  39577. #if( configUSE_MUTEXES == 1 )
  39578. static UBaseType_t prvGetDisinheritPriorityAfterTimeout( const Queue_t * const pxQueue )
  39579. {
  39580. 8010aa0: b480 push {r7}
  39581. 8010aa2: b085 sub sp, #20
  39582. 8010aa4: af00 add r7, sp, #0
  39583. 8010aa6: 6078 str r0, [r7, #4]
  39584. priority, but the waiting task times out, then the holder should
  39585. disinherit the priority - but only down to the highest priority of any
  39586. other tasks that are waiting for the same mutex. For this purpose,
  39587. return the priority of the highest priority task that is waiting for the
  39588. mutex. */
  39589. if( listCURRENT_LIST_LENGTH( &( pxQueue->xTasksWaitingToReceive ) ) > 0U )
  39590. 8010aa8: 687b ldr r3, [r7, #4]
  39591. 8010aaa: 6a5b ldr r3, [r3, #36] @ 0x24
  39592. 8010aac: 2b00 cmp r3, #0
  39593. 8010aae: d006 beq.n 8010abe <prvGetDisinheritPriorityAfterTimeout+0x1e>
  39594. {
  39595. uxHighestPriorityOfWaitingTasks = ( UBaseType_t ) configMAX_PRIORITIES - ( UBaseType_t ) listGET_ITEM_VALUE_OF_HEAD_ENTRY( &( pxQueue->xTasksWaitingToReceive ) );
  39596. 8010ab0: 687b ldr r3, [r7, #4]
  39597. 8010ab2: 6b1b ldr r3, [r3, #48] @ 0x30
  39598. 8010ab4: 681b ldr r3, [r3, #0]
  39599. 8010ab6: f1c3 0338 rsb r3, r3, #56 @ 0x38
  39600. 8010aba: 60fb str r3, [r7, #12]
  39601. 8010abc: e001 b.n 8010ac2 <prvGetDisinheritPriorityAfterTimeout+0x22>
  39602. }
  39603. else
  39604. {
  39605. uxHighestPriorityOfWaitingTasks = tskIDLE_PRIORITY;
  39606. 8010abe: 2300 movs r3, #0
  39607. 8010ac0: 60fb str r3, [r7, #12]
  39608. }
  39609. return uxHighestPriorityOfWaitingTasks;
  39610. 8010ac2: 68fb ldr r3, [r7, #12]
  39611. }
  39612. 8010ac4: 4618 mov r0, r3
  39613. 8010ac6: 3714 adds r7, #20
  39614. 8010ac8: 46bd mov sp, r7
  39615. 8010aca: f85d 7b04 ldr.w r7, [sp], #4
  39616. 8010ace: 4770 bx lr
  39617. 08010ad0 <prvCopyDataToQueue>:
  39618. #endif /* configUSE_MUTEXES */
  39619. /*-----------------------------------------------------------*/
  39620. static BaseType_t prvCopyDataToQueue( Queue_t * const pxQueue, const void *pvItemToQueue, const BaseType_t xPosition )
  39621. {
  39622. 8010ad0: b580 push {r7, lr}
  39623. 8010ad2: b086 sub sp, #24
  39624. 8010ad4: af00 add r7, sp, #0
  39625. 8010ad6: 60f8 str r0, [r7, #12]
  39626. 8010ad8: 60b9 str r1, [r7, #8]
  39627. 8010ada: 607a str r2, [r7, #4]
  39628. BaseType_t xReturn = pdFALSE;
  39629. 8010adc: 2300 movs r3, #0
  39630. 8010ade: 617b str r3, [r7, #20]
  39631. UBaseType_t uxMessagesWaiting;
  39632. /* This function is called from a critical section. */
  39633. uxMessagesWaiting = pxQueue->uxMessagesWaiting;
  39634. 8010ae0: 68fb ldr r3, [r7, #12]
  39635. 8010ae2: 6b9b ldr r3, [r3, #56] @ 0x38
  39636. 8010ae4: 613b str r3, [r7, #16]
  39637. if( pxQueue->uxItemSize == ( UBaseType_t ) 0 )
  39638. 8010ae6: 68fb ldr r3, [r7, #12]
  39639. 8010ae8: 6c1b ldr r3, [r3, #64] @ 0x40
  39640. 8010aea: 2b00 cmp r3, #0
  39641. 8010aec: d10d bne.n 8010b0a <prvCopyDataToQueue+0x3a>
  39642. {
  39643. #if ( configUSE_MUTEXES == 1 )
  39644. {
  39645. if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX )
  39646. 8010aee: 68fb ldr r3, [r7, #12]
  39647. 8010af0: 681b ldr r3, [r3, #0]
  39648. 8010af2: 2b00 cmp r3, #0
  39649. 8010af4: d14d bne.n 8010b92 <prvCopyDataToQueue+0xc2>
  39650. {
  39651. /* The mutex is no longer being held. */
  39652. xReturn = xTaskPriorityDisinherit( pxQueue->u.xSemaphore.xMutexHolder );
  39653. 8010af6: 68fb ldr r3, [r7, #12]
  39654. 8010af8: 689b ldr r3, [r3, #8]
  39655. 8010afa: 4618 mov r0, r3
  39656. 8010afc: f001 fa38 bl 8011f70 <xTaskPriorityDisinherit>
  39657. 8010b00: 6178 str r0, [r7, #20]
  39658. pxQueue->u.xSemaphore.xMutexHolder = NULL;
  39659. 8010b02: 68fb ldr r3, [r7, #12]
  39660. 8010b04: 2200 movs r2, #0
  39661. 8010b06: 609a str r2, [r3, #8]
  39662. 8010b08: e043 b.n 8010b92 <prvCopyDataToQueue+0xc2>
  39663. mtCOVERAGE_TEST_MARKER();
  39664. }
  39665. }
  39666. #endif /* configUSE_MUTEXES */
  39667. }
  39668. else if( xPosition == queueSEND_TO_BACK )
  39669. 8010b0a: 687b ldr r3, [r7, #4]
  39670. 8010b0c: 2b00 cmp r3, #0
  39671. 8010b0e: d119 bne.n 8010b44 <prvCopyDataToQueue+0x74>
  39672. {
  39673. ( 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. */
  39674. 8010b10: 68fb ldr r3, [r7, #12]
  39675. 8010b12: 6858 ldr r0, [r3, #4]
  39676. 8010b14: 68fb ldr r3, [r7, #12]
  39677. 8010b16: 6c1b ldr r3, [r3, #64] @ 0x40
  39678. 8010b18: 461a mov r2, r3
  39679. 8010b1a: 68b9 ldr r1, [r7, #8]
  39680. 8010b1c: f002 ff35 bl 801398a <memcpy>
  39681. 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. */
  39682. 8010b20: 68fb ldr r3, [r7, #12]
  39683. 8010b22: 685a ldr r2, [r3, #4]
  39684. 8010b24: 68fb ldr r3, [r7, #12]
  39685. 8010b26: 6c1b ldr r3, [r3, #64] @ 0x40
  39686. 8010b28: 441a add r2, r3
  39687. 8010b2a: 68fb ldr r3, [r7, #12]
  39688. 8010b2c: 605a str r2, [r3, #4]
  39689. if( pxQueue->pcWriteTo >= pxQueue->u.xQueue.pcTail ) /*lint !e946 MISRA exception justified as comparison of pointers is the cleanest solution. */
  39690. 8010b2e: 68fb ldr r3, [r7, #12]
  39691. 8010b30: 685a ldr r2, [r3, #4]
  39692. 8010b32: 68fb ldr r3, [r7, #12]
  39693. 8010b34: 689b ldr r3, [r3, #8]
  39694. 8010b36: 429a cmp r2, r3
  39695. 8010b38: d32b bcc.n 8010b92 <prvCopyDataToQueue+0xc2>
  39696. {
  39697. pxQueue->pcWriteTo = pxQueue->pcHead;
  39698. 8010b3a: 68fb ldr r3, [r7, #12]
  39699. 8010b3c: 681a ldr r2, [r3, #0]
  39700. 8010b3e: 68fb ldr r3, [r7, #12]
  39701. 8010b40: 605a str r2, [r3, #4]
  39702. 8010b42: e026 b.n 8010b92 <prvCopyDataToQueue+0xc2>
  39703. mtCOVERAGE_TEST_MARKER();
  39704. }
  39705. }
  39706. else
  39707. {
  39708. ( 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. */
  39709. 8010b44: 68fb ldr r3, [r7, #12]
  39710. 8010b46: 68d8 ldr r0, [r3, #12]
  39711. 8010b48: 68fb ldr r3, [r7, #12]
  39712. 8010b4a: 6c1b ldr r3, [r3, #64] @ 0x40
  39713. 8010b4c: 461a mov r2, r3
  39714. 8010b4e: 68b9 ldr r1, [r7, #8]
  39715. 8010b50: f002 ff1b bl 801398a <memcpy>
  39716. pxQueue->u.xQueue.pcReadFrom -= pxQueue->uxItemSize;
  39717. 8010b54: 68fb ldr r3, [r7, #12]
  39718. 8010b56: 68da ldr r2, [r3, #12]
  39719. 8010b58: 68fb ldr r3, [r7, #12]
  39720. 8010b5a: 6c1b ldr r3, [r3, #64] @ 0x40
  39721. 8010b5c: 425b negs r3, r3
  39722. 8010b5e: 441a add r2, r3
  39723. 8010b60: 68fb ldr r3, [r7, #12]
  39724. 8010b62: 60da str r2, [r3, #12]
  39725. if( pxQueue->u.xQueue.pcReadFrom < pxQueue->pcHead ) /*lint !e946 MISRA exception justified as comparison of pointers is the cleanest solution. */
  39726. 8010b64: 68fb ldr r3, [r7, #12]
  39727. 8010b66: 68da ldr r2, [r3, #12]
  39728. 8010b68: 68fb ldr r3, [r7, #12]
  39729. 8010b6a: 681b ldr r3, [r3, #0]
  39730. 8010b6c: 429a cmp r2, r3
  39731. 8010b6e: d207 bcs.n 8010b80 <prvCopyDataToQueue+0xb0>
  39732. {
  39733. pxQueue->u.xQueue.pcReadFrom = ( pxQueue->u.xQueue.pcTail - pxQueue->uxItemSize );
  39734. 8010b70: 68fb ldr r3, [r7, #12]
  39735. 8010b72: 689a ldr r2, [r3, #8]
  39736. 8010b74: 68fb ldr r3, [r7, #12]
  39737. 8010b76: 6c1b ldr r3, [r3, #64] @ 0x40
  39738. 8010b78: 425b negs r3, r3
  39739. 8010b7a: 441a add r2, r3
  39740. 8010b7c: 68fb ldr r3, [r7, #12]
  39741. 8010b7e: 60da str r2, [r3, #12]
  39742. else
  39743. {
  39744. mtCOVERAGE_TEST_MARKER();
  39745. }
  39746. if( xPosition == queueOVERWRITE )
  39747. 8010b80: 687b ldr r3, [r7, #4]
  39748. 8010b82: 2b02 cmp r3, #2
  39749. 8010b84: d105 bne.n 8010b92 <prvCopyDataToQueue+0xc2>
  39750. {
  39751. if( uxMessagesWaiting > ( UBaseType_t ) 0 )
  39752. 8010b86: 693b ldr r3, [r7, #16]
  39753. 8010b88: 2b00 cmp r3, #0
  39754. 8010b8a: d002 beq.n 8010b92 <prvCopyDataToQueue+0xc2>
  39755. {
  39756. /* An item is not being added but overwritten, so subtract
  39757. one from the recorded number of items in the queue so when
  39758. one is added again below the number of recorded items remains
  39759. correct. */
  39760. --uxMessagesWaiting;
  39761. 8010b8c: 693b ldr r3, [r7, #16]
  39762. 8010b8e: 3b01 subs r3, #1
  39763. 8010b90: 613b str r3, [r7, #16]
  39764. {
  39765. mtCOVERAGE_TEST_MARKER();
  39766. }
  39767. }
  39768. pxQueue->uxMessagesWaiting = uxMessagesWaiting + ( UBaseType_t ) 1;
  39769. 8010b92: 693b ldr r3, [r7, #16]
  39770. 8010b94: 1c5a adds r2, r3, #1
  39771. 8010b96: 68fb ldr r3, [r7, #12]
  39772. 8010b98: 639a str r2, [r3, #56] @ 0x38
  39773. return xReturn;
  39774. 8010b9a: 697b ldr r3, [r7, #20]
  39775. }
  39776. 8010b9c: 4618 mov r0, r3
  39777. 8010b9e: 3718 adds r7, #24
  39778. 8010ba0: 46bd mov sp, r7
  39779. 8010ba2: bd80 pop {r7, pc}
  39780. 08010ba4 <prvCopyDataFromQueue>:
  39781. /*-----------------------------------------------------------*/
  39782. static void prvCopyDataFromQueue( Queue_t * const pxQueue, void * const pvBuffer )
  39783. {
  39784. 8010ba4: b580 push {r7, lr}
  39785. 8010ba6: b082 sub sp, #8
  39786. 8010ba8: af00 add r7, sp, #0
  39787. 8010baa: 6078 str r0, [r7, #4]
  39788. 8010bac: 6039 str r1, [r7, #0]
  39789. if( pxQueue->uxItemSize != ( UBaseType_t ) 0 )
  39790. 8010bae: 687b ldr r3, [r7, #4]
  39791. 8010bb0: 6c1b ldr r3, [r3, #64] @ 0x40
  39792. 8010bb2: 2b00 cmp r3, #0
  39793. 8010bb4: d018 beq.n 8010be8 <prvCopyDataFromQueue+0x44>
  39794. {
  39795. 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. */
  39796. 8010bb6: 687b ldr r3, [r7, #4]
  39797. 8010bb8: 68da ldr r2, [r3, #12]
  39798. 8010bba: 687b ldr r3, [r7, #4]
  39799. 8010bbc: 6c1b ldr r3, [r3, #64] @ 0x40
  39800. 8010bbe: 441a add r2, r3
  39801. 8010bc0: 687b ldr r3, [r7, #4]
  39802. 8010bc2: 60da str r2, [r3, #12]
  39803. if( pxQueue->u.xQueue.pcReadFrom >= pxQueue->u.xQueue.pcTail ) /*lint !e946 MISRA exception justified as use of the relational operator is the cleanest solutions. */
  39804. 8010bc4: 687b ldr r3, [r7, #4]
  39805. 8010bc6: 68da ldr r2, [r3, #12]
  39806. 8010bc8: 687b ldr r3, [r7, #4]
  39807. 8010bca: 689b ldr r3, [r3, #8]
  39808. 8010bcc: 429a cmp r2, r3
  39809. 8010bce: d303 bcc.n 8010bd8 <prvCopyDataFromQueue+0x34>
  39810. {
  39811. pxQueue->u.xQueue.pcReadFrom = pxQueue->pcHead;
  39812. 8010bd0: 687b ldr r3, [r7, #4]
  39813. 8010bd2: 681a ldr r2, [r3, #0]
  39814. 8010bd4: 687b ldr r3, [r7, #4]
  39815. 8010bd6: 60da str r2, [r3, #12]
  39816. }
  39817. else
  39818. {
  39819. mtCOVERAGE_TEST_MARKER();
  39820. }
  39821. ( 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. */
  39822. 8010bd8: 687b ldr r3, [r7, #4]
  39823. 8010bda: 68d9 ldr r1, [r3, #12]
  39824. 8010bdc: 687b ldr r3, [r7, #4]
  39825. 8010bde: 6c1b ldr r3, [r3, #64] @ 0x40
  39826. 8010be0: 461a mov r2, r3
  39827. 8010be2: 6838 ldr r0, [r7, #0]
  39828. 8010be4: f002 fed1 bl 801398a <memcpy>
  39829. }
  39830. }
  39831. 8010be8: bf00 nop
  39832. 8010bea: 3708 adds r7, #8
  39833. 8010bec: 46bd mov sp, r7
  39834. 8010bee: bd80 pop {r7, pc}
  39835. 08010bf0 <prvUnlockQueue>:
  39836. /*-----------------------------------------------------------*/
  39837. static void prvUnlockQueue( Queue_t * const pxQueue )
  39838. {
  39839. 8010bf0: b580 push {r7, lr}
  39840. 8010bf2: b084 sub sp, #16
  39841. 8010bf4: af00 add r7, sp, #0
  39842. 8010bf6: 6078 str r0, [r7, #4]
  39843. /* The lock counts contains the number of extra data items placed or
  39844. removed from the queue while the queue was locked. When a queue is
  39845. locked items can be added or removed, but the event lists cannot be
  39846. updated. */
  39847. taskENTER_CRITICAL();
  39848. 8010bf8: f002 f9ce bl 8012f98 <vPortEnterCritical>
  39849. {
  39850. int8_t cTxLock = pxQueue->cTxLock;
  39851. 8010bfc: 687b ldr r3, [r7, #4]
  39852. 8010bfe: f893 3045 ldrb.w r3, [r3, #69] @ 0x45
  39853. 8010c02: 73fb strb r3, [r7, #15]
  39854. /* See if data was added to the queue while it was locked. */
  39855. while( cTxLock > queueLOCKED_UNMODIFIED )
  39856. 8010c04: e011 b.n 8010c2a <prvUnlockQueue+0x3a>
  39857. }
  39858. #else /* configUSE_QUEUE_SETS */
  39859. {
  39860. /* Tasks that are removed from the event list will get added to
  39861. the pending ready list as the scheduler is still suspended. */
  39862. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )
  39863. 8010c06: 687b ldr r3, [r7, #4]
  39864. 8010c08: 6a5b ldr r3, [r3, #36] @ 0x24
  39865. 8010c0a: 2b00 cmp r3, #0
  39866. 8010c0c: d012 beq.n 8010c34 <prvUnlockQueue+0x44>
  39867. {
  39868. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )
  39869. 8010c0e: 687b ldr r3, [r7, #4]
  39870. 8010c10: 3324 adds r3, #36 @ 0x24
  39871. 8010c12: 4618 mov r0, r3
  39872. 8010c14: f000 ff28 bl 8011a68 <xTaskRemoveFromEventList>
  39873. 8010c18: 4603 mov r3, r0
  39874. 8010c1a: 2b00 cmp r3, #0
  39875. 8010c1c: d001 beq.n 8010c22 <prvUnlockQueue+0x32>
  39876. {
  39877. /* The task waiting has a higher priority so record that
  39878. a context switch is required. */
  39879. vTaskMissedYield();
  39880. 8010c1e: f001 f829 bl 8011c74 <vTaskMissedYield>
  39881. break;
  39882. }
  39883. }
  39884. #endif /* configUSE_QUEUE_SETS */
  39885. --cTxLock;
  39886. 8010c22: 7bfb ldrb r3, [r7, #15]
  39887. 8010c24: 3b01 subs r3, #1
  39888. 8010c26: b2db uxtb r3, r3
  39889. 8010c28: 73fb strb r3, [r7, #15]
  39890. while( cTxLock > queueLOCKED_UNMODIFIED )
  39891. 8010c2a: f997 300f ldrsb.w r3, [r7, #15]
  39892. 8010c2e: 2b00 cmp r3, #0
  39893. 8010c30: dce9 bgt.n 8010c06 <prvUnlockQueue+0x16>
  39894. 8010c32: e000 b.n 8010c36 <prvUnlockQueue+0x46>
  39895. break;
  39896. 8010c34: bf00 nop
  39897. }
  39898. pxQueue->cTxLock = queueUNLOCKED;
  39899. 8010c36: 687b ldr r3, [r7, #4]
  39900. 8010c38: 22ff movs r2, #255 @ 0xff
  39901. 8010c3a: f883 2045 strb.w r2, [r3, #69] @ 0x45
  39902. }
  39903. taskEXIT_CRITICAL();
  39904. 8010c3e: f002 f9dd bl 8012ffc <vPortExitCritical>
  39905. /* Do the same for the Rx lock. */
  39906. taskENTER_CRITICAL();
  39907. 8010c42: f002 f9a9 bl 8012f98 <vPortEnterCritical>
  39908. {
  39909. int8_t cRxLock = pxQueue->cRxLock;
  39910. 8010c46: 687b ldr r3, [r7, #4]
  39911. 8010c48: f893 3044 ldrb.w r3, [r3, #68] @ 0x44
  39912. 8010c4c: 73bb strb r3, [r7, #14]
  39913. while( cRxLock > queueLOCKED_UNMODIFIED )
  39914. 8010c4e: e011 b.n 8010c74 <prvUnlockQueue+0x84>
  39915. {
  39916. if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )
  39917. 8010c50: 687b ldr r3, [r7, #4]
  39918. 8010c52: 691b ldr r3, [r3, #16]
  39919. 8010c54: 2b00 cmp r3, #0
  39920. 8010c56: d012 beq.n 8010c7e <prvUnlockQueue+0x8e>
  39921. {
  39922. if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE )
  39923. 8010c58: 687b ldr r3, [r7, #4]
  39924. 8010c5a: 3310 adds r3, #16
  39925. 8010c5c: 4618 mov r0, r3
  39926. 8010c5e: f000 ff03 bl 8011a68 <xTaskRemoveFromEventList>
  39927. 8010c62: 4603 mov r3, r0
  39928. 8010c64: 2b00 cmp r3, #0
  39929. 8010c66: d001 beq.n 8010c6c <prvUnlockQueue+0x7c>
  39930. {
  39931. vTaskMissedYield();
  39932. 8010c68: f001 f804 bl 8011c74 <vTaskMissedYield>
  39933. else
  39934. {
  39935. mtCOVERAGE_TEST_MARKER();
  39936. }
  39937. --cRxLock;
  39938. 8010c6c: 7bbb ldrb r3, [r7, #14]
  39939. 8010c6e: 3b01 subs r3, #1
  39940. 8010c70: b2db uxtb r3, r3
  39941. 8010c72: 73bb strb r3, [r7, #14]
  39942. while( cRxLock > queueLOCKED_UNMODIFIED )
  39943. 8010c74: f997 300e ldrsb.w r3, [r7, #14]
  39944. 8010c78: 2b00 cmp r3, #0
  39945. 8010c7a: dce9 bgt.n 8010c50 <prvUnlockQueue+0x60>
  39946. 8010c7c: e000 b.n 8010c80 <prvUnlockQueue+0x90>
  39947. }
  39948. else
  39949. {
  39950. break;
  39951. 8010c7e: bf00 nop
  39952. }
  39953. }
  39954. pxQueue->cRxLock = queueUNLOCKED;
  39955. 8010c80: 687b ldr r3, [r7, #4]
  39956. 8010c82: 22ff movs r2, #255 @ 0xff
  39957. 8010c84: f883 2044 strb.w r2, [r3, #68] @ 0x44
  39958. }
  39959. taskEXIT_CRITICAL();
  39960. 8010c88: f002 f9b8 bl 8012ffc <vPortExitCritical>
  39961. }
  39962. 8010c8c: bf00 nop
  39963. 8010c8e: 3710 adds r7, #16
  39964. 8010c90: 46bd mov sp, r7
  39965. 8010c92: bd80 pop {r7, pc}
  39966. 08010c94 <prvIsQueueEmpty>:
  39967. /*-----------------------------------------------------------*/
  39968. static BaseType_t prvIsQueueEmpty( const Queue_t *pxQueue )
  39969. {
  39970. 8010c94: b580 push {r7, lr}
  39971. 8010c96: b084 sub sp, #16
  39972. 8010c98: af00 add r7, sp, #0
  39973. 8010c9a: 6078 str r0, [r7, #4]
  39974. BaseType_t xReturn;
  39975. taskENTER_CRITICAL();
  39976. 8010c9c: f002 f97c bl 8012f98 <vPortEnterCritical>
  39977. {
  39978. if( pxQueue->uxMessagesWaiting == ( UBaseType_t ) 0 )
  39979. 8010ca0: 687b ldr r3, [r7, #4]
  39980. 8010ca2: 6b9b ldr r3, [r3, #56] @ 0x38
  39981. 8010ca4: 2b00 cmp r3, #0
  39982. 8010ca6: d102 bne.n 8010cae <prvIsQueueEmpty+0x1a>
  39983. {
  39984. xReturn = pdTRUE;
  39985. 8010ca8: 2301 movs r3, #1
  39986. 8010caa: 60fb str r3, [r7, #12]
  39987. 8010cac: e001 b.n 8010cb2 <prvIsQueueEmpty+0x1e>
  39988. }
  39989. else
  39990. {
  39991. xReturn = pdFALSE;
  39992. 8010cae: 2300 movs r3, #0
  39993. 8010cb0: 60fb str r3, [r7, #12]
  39994. }
  39995. }
  39996. taskEXIT_CRITICAL();
  39997. 8010cb2: f002 f9a3 bl 8012ffc <vPortExitCritical>
  39998. return xReturn;
  39999. 8010cb6: 68fb ldr r3, [r7, #12]
  40000. }
  40001. 8010cb8: 4618 mov r0, r3
  40002. 8010cba: 3710 adds r7, #16
  40003. 8010cbc: 46bd mov sp, r7
  40004. 8010cbe: bd80 pop {r7, pc}
  40005. 08010cc0 <prvIsQueueFull>:
  40006. return xReturn;
  40007. } /*lint !e818 xQueue could not be pointer to const because it is a typedef. */
  40008. /*-----------------------------------------------------------*/
  40009. static BaseType_t prvIsQueueFull( const Queue_t *pxQueue )
  40010. {
  40011. 8010cc0: b580 push {r7, lr}
  40012. 8010cc2: b084 sub sp, #16
  40013. 8010cc4: af00 add r7, sp, #0
  40014. 8010cc6: 6078 str r0, [r7, #4]
  40015. BaseType_t xReturn;
  40016. taskENTER_CRITICAL();
  40017. 8010cc8: f002 f966 bl 8012f98 <vPortEnterCritical>
  40018. {
  40019. if( pxQueue->uxMessagesWaiting == pxQueue->uxLength )
  40020. 8010ccc: 687b ldr r3, [r7, #4]
  40021. 8010cce: 6b9a ldr r2, [r3, #56] @ 0x38
  40022. 8010cd0: 687b ldr r3, [r7, #4]
  40023. 8010cd2: 6bdb ldr r3, [r3, #60] @ 0x3c
  40024. 8010cd4: 429a cmp r2, r3
  40025. 8010cd6: d102 bne.n 8010cde <prvIsQueueFull+0x1e>
  40026. {
  40027. xReturn = pdTRUE;
  40028. 8010cd8: 2301 movs r3, #1
  40029. 8010cda: 60fb str r3, [r7, #12]
  40030. 8010cdc: e001 b.n 8010ce2 <prvIsQueueFull+0x22>
  40031. }
  40032. else
  40033. {
  40034. xReturn = pdFALSE;
  40035. 8010cde: 2300 movs r3, #0
  40036. 8010ce0: 60fb str r3, [r7, #12]
  40037. }
  40038. }
  40039. taskEXIT_CRITICAL();
  40040. 8010ce2: f002 f98b bl 8012ffc <vPortExitCritical>
  40041. return xReturn;
  40042. 8010ce6: 68fb ldr r3, [r7, #12]
  40043. }
  40044. 8010ce8: 4618 mov r0, r3
  40045. 8010cea: 3710 adds r7, #16
  40046. 8010cec: 46bd mov sp, r7
  40047. 8010cee: bd80 pop {r7, pc}
  40048. 08010cf0 <vQueueAddToRegistry>:
  40049. /*-----------------------------------------------------------*/
  40050. #if ( configQUEUE_REGISTRY_SIZE > 0 )
  40051. void vQueueAddToRegistry( QueueHandle_t xQueue, const char *pcQueueName ) /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
  40052. {
  40053. 8010cf0: b480 push {r7}
  40054. 8010cf2: b085 sub sp, #20
  40055. 8010cf4: af00 add r7, sp, #0
  40056. 8010cf6: 6078 str r0, [r7, #4]
  40057. 8010cf8: 6039 str r1, [r7, #0]
  40058. UBaseType_t ux;
  40059. /* See if there is an empty space in the registry. A NULL name denotes
  40060. a free slot. */
  40061. for( ux = ( UBaseType_t ) 0U; ux < ( UBaseType_t ) configQUEUE_REGISTRY_SIZE; ux++ )
  40062. 8010cfa: 2300 movs r3, #0
  40063. 8010cfc: 60fb str r3, [r7, #12]
  40064. 8010cfe: e014 b.n 8010d2a <vQueueAddToRegistry+0x3a>
  40065. {
  40066. if( xQueueRegistry[ ux ].pcQueueName == NULL )
  40067. 8010d00: 4a0f ldr r2, [pc, #60] @ (8010d40 <vQueueAddToRegistry+0x50>)
  40068. 8010d02: 68fb ldr r3, [r7, #12]
  40069. 8010d04: f852 3033 ldr.w r3, [r2, r3, lsl #3]
  40070. 8010d08: 2b00 cmp r3, #0
  40071. 8010d0a: d10b bne.n 8010d24 <vQueueAddToRegistry+0x34>
  40072. {
  40073. /* Store the information on this queue. */
  40074. xQueueRegistry[ ux ].pcQueueName = pcQueueName;
  40075. 8010d0c: 490c ldr r1, [pc, #48] @ (8010d40 <vQueueAddToRegistry+0x50>)
  40076. 8010d0e: 68fb ldr r3, [r7, #12]
  40077. 8010d10: 683a ldr r2, [r7, #0]
  40078. 8010d12: f841 2033 str.w r2, [r1, r3, lsl #3]
  40079. xQueueRegistry[ ux ].xHandle = xQueue;
  40080. 8010d16: 4a0a ldr r2, [pc, #40] @ (8010d40 <vQueueAddToRegistry+0x50>)
  40081. 8010d18: 68fb ldr r3, [r7, #12]
  40082. 8010d1a: 00db lsls r3, r3, #3
  40083. 8010d1c: 4413 add r3, r2
  40084. 8010d1e: 687a ldr r2, [r7, #4]
  40085. 8010d20: 605a str r2, [r3, #4]
  40086. traceQUEUE_REGISTRY_ADD( xQueue, pcQueueName );
  40087. break;
  40088. 8010d22: e006 b.n 8010d32 <vQueueAddToRegistry+0x42>
  40089. for( ux = ( UBaseType_t ) 0U; ux < ( UBaseType_t ) configQUEUE_REGISTRY_SIZE; ux++ )
  40090. 8010d24: 68fb ldr r3, [r7, #12]
  40091. 8010d26: 3301 adds r3, #1
  40092. 8010d28: 60fb str r3, [r7, #12]
  40093. 8010d2a: 68fb ldr r3, [r7, #12]
  40094. 8010d2c: 2b07 cmp r3, #7
  40095. 8010d2e: d9e7 bls.n 8010d00 <vQueueAddToRegistry+0x10>
  40096. else
  40097. {
  40098. mtCOVERAGE_TEST_MARKER();
  40099. }
  40100. }
  40101. }
  40102. 8010d30: bf00 nop
  40103. 8010d32: bf00 nop
  40104. 8010d34: 3714 adds r7, #20
  40105. 8010d36: 46bd mov sp, r7
  40106. 8010d38: f85d 7b04 ldr.w r7, [sp], #4
  40107. 8010d3c: 4770 bx lr
  40108. 8010d3e: bf00 nop
  40109. 8010d40: 240023b4 .word 0x240023b4
  40110. 08010d44 <vQueueWaitForMessageRestricted>:
  40111. /*-----------------------------------------------------------*/
  40112. #if ( configUSE_TIMERS == 1 )
  40113. void vQueueWaitForMessageRestricted( QueueHandle_t xQueue, TickType_t xTicksToWait, const BaseType_t xWaitIndefinitely )
  40114. {
  40115. 8010d44: b580 push {r7, lr}
  40116. 8010d46: b086 sub sp, #24
  40117. 8010d48: af00 add r7, sp, #0
  40118. 8010d4a: 60f8 str r0, [r7, #12]
  40119. 8010d4c: 60b9 str r1, [r7, #8]
  40120. 8010d4e: 607a str r2, [r7, #4]
  40121. Queue_t * const pxQueue = xQueue;
  40122. 8010d50: 68fb ldr r3, [r7, #12]
  40123. 8010d52: 617b str r3, [r7, #20]
  40124. will not actually cause the task to block, just place it on a blocked
  40125. list. It will not block until the scheduler is unlocked - at which
  40126. time a yield will be performed. If an item is added to the queue while
  40127. the queue is locked, and the calling task blocks on the queue, then the
  40128. calling task will be immediately unblocked when the queue is unlocked. */
  40129. prvLockQueue( pxQueue );
  40130. 8010d54: f002 f920 bl 8012f98 <vPortEnterCritical>
  40131. 8010d58: 697b ldr r3, [r7, #20]
  40132. 8010d5a: f893 3044 ldrb.w r3, [r3, #68] @ 0x44
  40133. 8010d5e: b25b sxtb r3, r3
  40134. 8010d60: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  40135. 8010d64: d103 bne.n 8010d6e <vQueueWaitForMessageRestricted+0x2a>
  40136. 8010d66: 697b ldr r3, [r7, #20]
  40137. 8010d68: 2200 movs r2, #0
  40138. 8010d6a: f883 2044 strb.w r2, [r3, #68] @ 0x44
  40139. 8010d6e: 697b ldr r3, [r7, #20]
  40140. 8010d70: f893 3045 ldrb.w r3, [r3, #69] @ 0x45
  40141. 8010d74: b25b sxtb r3, r3
  40142. 8010d76: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  40143. 8010d7a: d103 bne.n 8010d84 <vQueueWaitForMessageRestricted+0x40>
  40144. 8010d7c: 697b ldr r3, [r7, #20]
  40145. 8010d7e: 2200 movs r2, #0
  40146. 8010d80: f883 2045 strb.w r2, [r3, #69] @ 0x45
  40147. 8010d84: f002 f93a bl 8012ffc <vPortExitCritical>
  40148. if( pxQueue->uxMessagesWaiting == ( UBaseType_t ) 0U )
  40149. 8010d88: 697b ldr r3, [r7, #20]
  40150. 8010d8a: 6b9b ldr r3, [r3, #56] @ 0x38
  40151. 8010d8c: 2b00 cmp r3, #0
  40152. 8010d8e: d106 bne.n 8010d9e <vQueueWaitForMessageRestricted+0x5a>
  40153. {
  40154. /* There is nothing in the queue, block for the specified period. */
  40155. vTaskPlaceOnEventListRestricted( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait, xWaitIndefinitely );
  40156. 8010d90: 697b ldr r3, [r7, #20]
  40157. 8010d92: 3324 adds r3, #36 @ 0x24
  40158. 8010d94: 687a ldr r2, [r7, #4]
  40159. 8010d96: 68b9 ldr r1, [r7, #8]
  40160. 8010d98: 4618 mov r0, r3
  40161. 8010d9a: f000 fe39 bl 8011a10 <vTaskPlaceOnEventListRestricted>
  40162. }
  40163. else
  40164. {
  40165. mtCOVERAGE_TEST_MARKER();
  40166. }
  40167. prvUnlockQueue( pxQueue );
  40168. 8010d9e: 6978 ldr r0, [r7, #20]
  40169. 8010da0: f7ff ff26 bl 8010bf0 <prvUnlockQueue>
  40170. }
  40171. 8010da4: bf00 nop
  40172. 8010da6: 3718 adds r7, #24
  40173. 8010da8: 46bd mov sp, r7
  40174. 8010daa: bd80 pop {r7, pc}
  40175. 08010dac <xStreamBufferSpacesAvailable>:
  40176. return xReturn;
  40177. }
  40178. /*-----------------------------------------------------------*/
  40179. size_t xStreamBufferSpacesAvailable( StreamBufferHandle_t xStreamBuffer )
  40180. {
  40181. 8010dac: b480 push {r7}
  40182. 8010dae: b087 sub sp, #28
  40183. 8010db0: af00 add r7, sp, #0
  40184. 8010db2: 6078 str r0, [r7, #4]
  40185. const StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;
  40186. 8010db4: 687b ldr r3, [r7, #4]
  40187. 8010db6: 613b str r3, [r7, #16]
  40188. size_t xSpace;
  40189. configASSERT( pxStreamBuffer );
  40190. 8010db8: 693b ldr r3, [r7, #16]
  40191. 8010dba: 2b00 cmp r3, #0
  40192. 8010dbc: d10b bne.n 8010dd6 <xStreamBufferSpacesAvailable+0x2a>
  40193. __asm volatile
  40194. 8010dbe: f04f 0350 mov.w r3, #80 @ 0x50
  40195. 8010dc2: f383 8811 msr BASEPRI, r3
  40196. 8010dc6: f3bf 8f6f isb sy
  40197. 8010dca: f3bf 8f4f dsb sy
  40198. 8010dce: 60fb str r3, [r7, #12]
  40199. }
  40200. 8010dd0: bf00 nop
  40201. 8010dd2: bf00 nop
  40202. 8010dd4: e7fd b.n 8010dd2 <xStreamBufferSpacesAvailable+0x26>
  40203. xSpace = pxStreamBuffer->xLength + pxStreamBuffer->xTail;
  40204. 8010dd6: 693b ldr r3, [r7, #16]
  40205. 8010dd8: 689a ldr r2, [r3, #8]
  40206. 8010dda: 693b ldr r3, [r7, #16]
  40207. 8010ddc: 681b ldr r3, [r3, #0]
  40208. 8010dde: 4413 add r3, r2
  40209. 8010de0: 617b str r3, [r7, #20]
  40210. xSpace -= pxStreamBuffer->xHead;
  40211. 8010de2: 693b ldr r3, [r7, #16]
  40212. 8010de4: 685b ldr r3, [r3, #4]
  40213. 8010de6: 697a ldr r2, [r7, #20]
  40214. 8010de8: 1ad3 subs r3, r2, r3
  40215. 8010dea: 617b str r3, [r7, #20]
  40216. xSpace -= ( size_t ) 1;
  40217. 8010dec: 697b ldr r3, [r7, #20]
  40218. 8010dee: 3b01 subs r3, #1
  40219. 8010df0: 617b str r3, [r7, #20]
  40220. if( xSpace >= pxStreamBuffer->xLength )
  40221. 8010df2: 693b ldr r3, [r7, #16]
  40222. 8010df4: 689b ldr r3, [r3, #8]
  40223. 8010df6: 697a ldr r2, [r7, #20]
  40224. 8010df8: 429a cmp r2, r3
  40225. 8010dfa: d304 bcc.n 8010e06 <xStreamBufferSpacesAvailable+0x5a>
  40226. {
  40227. xSpace -= pxStreamBuffer->xLength;
  40228. 8010dfc: 693b ldr r3, [r7, #16]
  40229. 8010dfe: 689b ldr r3, [r3, #8]
  40230. 8010e00: 697a ldr r2, [r7, #20]
  40231. 8010e02: 1ad3 subs r3, r2, r3
  40232. 8010e04: 617b str r3, [r7, #20]
  40233. else
  40234. {
  40235. mtCOVERAGE_TEST_MARKER();
  40236. }
  40237. return xSpace;
  40238. 8010e06: 697b ldr r3, [r7, #20]
  40239. }
  40240. 8010e08: 4618 mov r0, r3
  40241. 8010e0a: 371c adds r7, #28
  40242. 8010e0c: 46bd mov sp, r7
  40243. 8010e0e: f85d 7b04 ldr.w r7, [sp], #4
  40244. 8010e12: 4770 bx lr
  40245. 08010e14 <xStreamBufferSend>:
  40246. size_t xStreamBufferSend( StreamBufferHandle_t xStreamBuffer,
  40247. const void *pvTxData,
  40248. size_t xDataLengthBytes,
  40249. TickType_t xTicksToWait )
  40250. {
  40251. 8010e14: b580 push {r7, lr}
  40252. 8010e16: b090 sub sp, #64 @ 0x40
  40253. 8010e18: af02 add r7, sp, #8
  40254. 8010e1a: 60f8 str r0, [r7, #12]
  40255. 8010e1c: 60b9 str r1, [r7, #8]
  40256. 8010e1e: 607a str r2, [r7, #4]
  40257. 8010e20: 603b str r3, [r7, #0]
  40258. StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;
  40259. 8010e22: 68fb ldr r3, [r7, #12]
  40260. 8010e24: 62fb str r3, [r7, #44] @ 0x2c
  40261. size_t xReturn, xSpace = 0;
  40262. 8010e26: 2300 movs r3, #0
  40263. 8010e28: 637b str r3, [r7, #52] @ 0x34
  40264. size_t xRequiredSpace = xDataLengthBytes;
  40265. 8010e2a: 687b ldr r3, [r7, #4]
  40266. 8010e2c: 633b str r3, [r7, #48] @ 0x30
  40267. TimeOut_t xTimeOut;
  40268. configASSERT( pvTxData );
  40269. 8010e2e: 68bb ldr r3, [r7, #8]
  40270. 8010e30: 2b00 cmp r3, #0
  40271. 8010e32: d10b bne.n 8010e4c <xStreamBufferSend+0x38>
  40272. __asm volatile
  40273. 8010e34: f04f 0350 mov.w r3, #80 @ 0x50
  40274. 8010e38: f383 8811 msr BASEPRI, r3
  40275. 8010e3c: f3bf 8f6f isb sy
  40276. 8010e40: f3bf 8f4f dsb sy
  40277. 8010e44: 627b str r3, [r7, #36] @ 0x24
  40278. }
  40279. 8010e46: bf00 nop
  40280. 8010e48: bf00 nop
  40281. 8010e4a: e7fd b.n 8010e48 <xStreamBufferSend+0x34>
  40282. configASSERT( pxStreamBuffer );
  40283. 8010e4c: 6afb ldr r3, [r7, #44] @ 0x2c
  40284. 8010e4e: 2b00 cmp r3, #0
  40285. 8010e50: d10b bne.n 8010e6a <xStreamBufferSend+0x56>
  40286. __asm volatile
  40287. 8010e52: f04f 0350 mov.w r3, #80 @ 0x50
  40288. 8010e56: f383 8811 msr BASEPRI, r3
  40289. 8010e5a: f3bf 8f6f isb sy
  40290. 8010e5e: f3bf 8f4f dsb sy
  40291. 8010e62: 623b str r3, [r7, #32]
  40292. }
  40293. 8010e64: bf00 nop
  40294. 8010e66: bf00 nop
  40295. 8010e68: e7fd b.n 8010e66 <xStreamBufferSend+0x52>
  40296. /* This send function is used to write to both message buffers and stream
  40297. buffers. If this is a message buffer then the space needed must be
  40298. increased by the amount of bytes needed to store the length of the
  40299. message. */
  40300. if( ( pxStreamBuffer->ucFlags & sbFLAGS_IS_MESSAGE_BUFFER ) != ( uint8_t ) 0 )
  40301. 8010e6a: 6afb ldr r3, [r7, #44] @ 0x2c
  40302. 8010e6c: 7f1b ldrb r3, [r3, #28]
  40303. 8010e6e: f003 0301 and.w r3, r3, #1
  40304. 8010e72: 2b00 cmp r3, #0
  40305. 8010e74: d012 beq.n 8010e9c <xStreamBufferSend+0x88>
  40306. {
  40307. xRequiredSpace += sbBYTES_TO_STORE_MESSAGE_LENGTH;
  40308. 8010e76: 6b3b ldr r3, [r7, #48] @ 0x30
  40309. 8010e78: 3304 adds r3, #4
  40310. 8010e7a: 633b str r3, [r7, #48] @ 0x30
  40311. /* Overflow? */
  40312. configASSERT( xRequiredSpace > xDataLengthBytes );
  40313. 8010e7c: 6b3a ldr r2, [r7, #48] @ 0x30
  40314. 8010e7e: 687b ldr r3, [r7, #4]
  40315. 8010e80: 429a cmp r2, r3
  40316. 8010e82: d80b bhi.n 8010e9c <xStreamBufferSend+0x88>
  40317. __asm volatile
  40318. 8010e84: f04f 0350 mov.w r3, #80 @ 0x50
  40319. 8010e88: f383 8811 msr BASEPRI, r3
  40320. 8010e8c: f3bf 8f6f isb sy
  40321. 8010e90: f3bf 8f4f dsb sy
  40322. 8010e94: 61fb str r3, [r7, #28]
  40323. }
  40324. 8010e96: bf00 nop
  40325. 8010e98: bf00 nop
  40326. 8010e9a: e7fd b.n 8010e98 <xStreamBufferSend+0x84>
  40327. else
  40328. {
  40329. mtCOVERAGE_TEST_MARKER();
  40330. }
  40331. if( xTicksToWait != ( TickType_t ) 0 )
  40332. 8010e9c: 683b ldr r3, [r7, #0]
  40333. 8010e9e: 2b00 cmp r3, #0
  40334. 8010ea0: d03f beq.n 8010f22 <xStreamBufferSend+0x10e>
  40335. {
  40336. vTaskSetTimeOutState( &xTimeOut );
  40337. 8010ea2: f107 0310 add.w r3, r7, #16
  40338. 8010ea6: 4618 mov r0, r3
  40339. 8010ea8: f000 fe42 bl 8011b30 <vTaskSetTimeOutState>
  40340. do
  40341. {
  40342. /* Wait until the required number of bytes are free in the message
  40343. buffer. */
  40344. taskENTER_CRITICAL();
  40345. 8010eac: f002 f874 bl 8012f98 <vPortEnterCritical>
  40346. {
  40347. xSpace = xStreamBufferSpacesAvailable( pxStreamBuffer );
  40348. 8010eb0: 6af8 ldr r0, [r7, #44] @ 0x2c
  40349. 8010eb2: f7ff ff7b bl 8010dac <xStreamBufferSpacesAvailable>
  40350. 8010eb6: 6378 str r0, [r7, #52] @ 0x34
  40351. if( xSpace < xRequiredSpace )
  40352. 8010eb8: 6b7a ldr r2, [r7, #52] @ 0x34
  40353. 8010eba: 6b3b ldr r3, [r7, #48] @ 0x30
  40354. 8010ebc: 429a cmp r2, r3
  40355. 8010ebe: d218 bcs.n 8010ef2 <xStreamBufferSend+0xde>
  40356. {
  40357. /* Clear notification state as going to wait for space. */
  40358. ( void ) xTaskNotifyStateClear( NULL );
  40359. 8010ec0: 2000 movs r0, #0
  40360. 8010ec2: f001 fb65 bl 8012590 <xTaskNotifyStateClear>
  40361. /* Should only be one writer. */
  40362. configASSERT( pxStreamBuffer->xTaskWaitingToSend == NULL );
  40363. 8010ec6: 6afb ldr r3, [r7, #44] @ 0x2c
  40364. 8010ec8: 695b ldr r3, [r3, #20]
  40365. 8010eca: 2b00 cmp r3, #0
  40366. 8010ecc: d00b beq.n 8010ee6 <xStreamBufferSend+0xd2>
  40367. __asm volatile
  40368. 8010ece: f04f 0350 mov.w r3, #80 @ 0x50
  40369. 8010ed2: f383 8811 msr BASEPRI, r3
  40370. 8010ed6: f3bf 8f6f isb sy
  40371. 8010eda: f3bf 8f4f dsb sy
  40372. 8010ede: 61bb str r3, [r7, #24]
  40373. }
  40374. 8010ee0: bf00 nop
  40375. 8010ee2: bf00 nop
  40376. 8010ee4: e7fd b.n 8010ee2 <xStreamBufferSend+0xce>
  40377. pxStreamBuffer->xTaskWaitingToSend = xTaskGetCurrentTaskHandle();
  40378. 8010ee6: f000 ffad bl 8011e44 <xTaskGetCurrentTaskHandle>
  40379. 8010eea: 4602 mov r2, r0
  40380. 8010eec: 6afb ldr r3, [r7, #44] @ 0x2c
  40381. 8010eee: 615a str r2, [r3, #20]
  40382. 8010ef0: e002 b.n 8010ef8 <xStreamBufferSend+0xe4>
  40383. }
  40384. else
  40385. {
  40386. taskEXIT_CRITICAL();
  40387. 8010ef2: f002 f883 bl 8012ffc <vPortExitCritical>
  40388. break;
  40389. 8010ef6: e014 b.n 8010f22 <xStreamBufferSend+0x10e>
  40390. }
  40391. }
  40392. taskEXIT_CRITICAL();
  40393. 8010ef8: f002 f880 bl 8012ffc <vPortExitCritical>
  40394. traceBLOCKING_ON_STREAM_BUFFER_SEND( xStreamBuffer );
  40395. ( void ) xTaskNotifyWait( ( uint32_t ) 0, ( uint32_t ) 0, NULL, xTicksToWait );
  40396. 8010efc: 683b ldr r3, [r7, #0]
  40397. 8010efe: 2200 movs r2, #0
  40398. 8010f00: 2100 movs r1, #0
  40399. 8010f02: 2000 movs r0, #0
  40400. 8010f04: f001 f93c bl 8012180 <xTaskNotifyWait>
  40401. pxStreamBuffer->xTaskWaitingToSend = NULL;
  40402. 8010f08: 6afb ldr r3, [r7, #44] @ 0x2c
  40403. 8010f0a: 2200 movs r2, #0
  40404. 8010f0c: 615a str r2, [r3, #20]
  40405. } while( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE );
  40406. 8010f0e: 463a mov r2, r7
  40407. 8010f10: f107 0310 add.w r3, r7, #16
  40408. 8010f14: 4611 mov r1, r2
  40409. 8010f16: 4618 mov r0, r3
  40410. 8010f18: f000 fe48 bl 8011bac <xTaskCheckForTimeOut>
  40411. 8010f1c: 4603 mov r3, r0
  40412. 8010f1e: 2b00 cmp r3, #0
  40413. 8010f20: d0c4 beq.n 8010eac <xStreamBufferSend+0x98>
  40414. else
  40415. {
  40416. mtCOVERAGE_TEST_MARKER();
  40417. }
  40418. if( xSpace == ( size_t ) 0 )
  40419. 8010f22: 6b7b ldr r3, [r7, #52] @ 0x34
  40420. 8010f24: 2b00 cmp r3, #0
  40421. 8010f26: d103 bne.n 8010f30 <xStreamBufferSend+0x11c>
  40422. {
  40423. xSpace = xStreamBufferSpacesAvailable( pxStreamBuffer );
  40424. 8010f28: 6af8 ldr r0, [r7, #44] @ 0x2c
  40425. 8010f2a: f7ff ff3f bl 8010dac <xStreamBufferSpacesAvailable>
  40426. 8010f2e: 6378 str r0, [r7, #52] @ 0x34
  40427. else
  40428. {
  40429. mtCOVERAGE_TEST_MARKER();
  40430. }
  40431. xReturn = prvWriteMessageToBuffer( pxStreamBuffer, pvTxData, xDataLengthBytes, xSpace, xRequiredSpace );
  40432. 8010f30: 6b3b ldr r3, [r7, #48] @ 0x30
  40433. 8010f32: 9300 str r3, [sp, #0]
  40434. 8010f34: 6b7b ldr r3, [r7, #52] @ 0x34
  40435. 8010f36: 687a ldr r2, [r7, #4]
  40436. 8010f38: 68b9 ldr r1, [r7, #8]
  40437. 8010f3a: 6af8 ldr r0, [r7, #44] @ 0x2c
  40438. 8010f3c: f000 f823 bl 8010f86 <prvWriteMessageToBuffer>
  40439. 8010f40: 62b8 str r0, [r7, #40] @ 0x28
  40440. if( xReturn > ( size_t ) 0 )
  40441. 8010f42: 6abb ldr r3, [r7, #40] @ 0x28
  40442. 8010f44: 2b00 cmp r3, #0
  40443. 8010f46: d019 beq.n 8010f7c <xStreamBufferSend+0x168>
  40444. {
  40445. traceSTREAM_BUFFER_SEND( xStreamBuffer, xReturn );
  40446. /* Was a task waiting for the data? */
  40447. if( prvBytesInBuffer( pxStreamBuffer ) >= pxStreamBuffer->xTriggerLevelBytes )
  40448. 8010f48: 6af8 ldr r0, [r7, #44] @ 0x2c
  40449. 8010f4a: f000 f8ce bl 80110ea <prvBytesInBuffer>
  40450. 8010f4e: 4602 mov r2, r0
  40451. 8010f50: 6afb ldr r3, [r7, #44] @ 0x2c
  40452. 8010f52: 68db ldr r3, [r3, #12]
  40453. 8010f54: 429a cmp r2, r3
  40454. 8010f56: d311 bcc.n 8010f7c <xStreamBufferSend+0x168>
  40455. {
  40456. sbSEND_COMPLETED( pxStreamBuffer );
  40457. 8010f58: f000 fb4a bl 80115f0 <vTaskSuspendAll>
  40458. 8010f5c: 6afb ldr r3, [r7, #44] @ 0x2c
  40459. 8010f5e: 691b ldr r3, [r3, #16]
  40460. 8010f60: 2b00 cmp r3, #0
  40461. 8010f62: d009 beq.n 8010f78 <xStreamBufferSend+0x164>
  40462. 8010f64: 6afb ldr r3, [r7, #44] @ 0x2c
  40463. 8010f66: 6918 ldr r0, [r3, #16]
  40464. 8010f68: 2300 movs r3, #0
  40465. 8010f6a: 2200 movs r2, #0
  40466. 8010f6c: 2100 movs r1, #0
  40467. 8010f6e: f001 f967 bl 8012240 <xTaskGenericNotify>
  40468. 8010f72: 6afb ldr r3, [r7, #44] @ 0x2c
  40469. 8010f74: 2200 movs r2, #0
  40470. 8010f76: 611a str r2, [r3, #16]
  40471. 8010f78: f000 fb48 bl 801160c <xTaskResumeAll>
  40472. {
  40473. mtCOVERAGE_TEST_MARKER();
  40474. traceSTREAM_BUFFER_SEND_FAILED( xStreamBuffer );
  40475. }
  40476. return xReturn;
  40477. 8010f7c: 6abb ldr r3, [r7, #40] @ 0x28
  40478. }
  40479. 8010f7e: 4618 mov r0, r3
  40480. 8010f80: 3738 adds r7, #56 @ 0x38
  40481. 8010f82: 46bd mov sp, r7
  40482. 8010f84: bd80 pop {r7, pc}
  40483. 08010f86 <prvWriteMessageToBuffer>:
  40484. static size_t prvWriteMessageToBuffer( StreamBuffer_t * const pxStreamBuffer,
  40485. const void * pvTxData,
  40486. size_t xDataLengthBytes,
  40487. size_t xSpace,
  40488. size_t xRequiredSpace )
  40489. {
  40490. 8010f86: b580 push {r7, lr}
  40491. 8010f88: b086 sub sp, #24
  40492. 8010f8a: af00 add r7, sp, #0
  40493. 8010f8c: 60f8 str r0, [r7, #12]
  40494. 8010f8e: 60b9 str r1, [r7, #8]
  40495. 8010f90: 607a str r2, [r7, #4]
  40496. 8010f92: 603b str r3, [r7, #0]
  40497. BaseType_t xShouldWrite;
  40498. size_t xReturn;
  40499. if( xSpace == ( size_t ) 0 )
  40500. 8010f94: 683b ldr r3, [r7, #0]
  40501. 8010f96: 2b00 cmp r3, #0
  40502. 8010f98: d102 bne.n 8010fa0 <prvWriteMessageToBuffer+0x1a>
  40503. {
  40504. /* Doesn't matter if this is a stream buffer or a message buffer, there
  40505. is no space to write. */
  40506. xShouldWrite = pdFALSE;
  40507. 8010f9a: 2300 movs r3, #0
  40508. 8010f9c: 617b str r3, [r7, #20]
  40509. 8010f9e: e01d b.n 8010fdc <prvWriteMessageToBuffer+0x56>
  40510. }
  40511. else if( ( pxStreamBuffer->ucFlags & sbFLAGS_IS_MESSAGE_BUFFER ) == ( uint8_t ) 0 )
  40512. 8010fa0: 68fb ldr r3, [r7, #12]
  40513. 8010fa2: 7f1b ldrb r3, [r3, #28]
  40514. 8010fa4: f003 0301 and.w r3, r3, #1
  40515. 8010fa8: 2b00 cmp r3, #0
  40516. 8010faa: d108 bne.n 8010fbe <prvWriteMessageToBuffer+0x38>
  40517. {
  40518. /* This is a stream buffer, as opposed to a message buffer, so writing a
  40519. stream of bytes rather than discrete messages. Write as many bytes as
  40520. possible. */
  40521. xShouldWrite = pdTRUE;
  40522. 8010fac: 2301 movs r3, #1
  40523. 8010fae: 617b str r3, [r7, #20]
  40524. xDataLengthBytes = configMIN( xDataLengthBytes, xSpace );
  40525. 8010fb0: 687a ldr r2, [r7, #4]
  40526. 8010fb2: 683b ldr r3, [r7, #0]
  40527. 8010fb4: 4293 cmp r3, r2
  40528. 8010fb6: bf28 it cs
  40529. 8010fb8: 4613 movcs r3, r2
  40530. 8010fba: 607b str r3, [r7, #4]
  40531. 8010fbc: e00e b.n 8010fdc <prvWriteMessageToBuffer+0x56>
  40532. }
  40533. else if( xSpace >= xRequiredSpace )
  40534. 8010fbe: 683a ldr r2, [r7, #0]
  40535. 8010fc0: 6a3b ldr r3, [r7, #32]
  40536. 8010fc2: 429a cmp r2, r3
  40537. 8010fc4: d308 bcc.n 8010fd8 <prvWriteMessageToBuffer+0x52>
  40538. {
  40539. /* This is a message buffer, as opposed to a stream buffer, and there
  40540. is enough space to write both the message length and the message itself
  40541. into the buffer. Start by writing the length of the data, the data
  40542. itself will be written later in this function. */
  40543. xShouldWrite = pdTRUE;
  40544. 8010fc6: 2301 movs r3, #1
  40545. 8010fc8: 617b str r3, [r7, #20]
  40546. ( void ) prvWriteBytesToBuffer( pxStreamBuffer, ( const uint8_t * ) &( xDataLengthBytes ), sbBYTES_TO_STORE_MESSAGE_LENGTH );
  40547. 8010fca: 1d3b adds r3, r7, #4
  40548. 8010fcc: 2204 movs r2, #4
  40549. 8010fce: 4619 mov r1, r3
  40550. 8010fd0: 68f8 ldr r0, [r7, #12]
  40551. 8010fd2: f000 f815 bl 8011000 <prvWriteBytesToBuffer>
  40552. 8010fd6: e001 b.n 8010fdc <prvWriteMessageToBuffer+0x56>
  40553. }
  40554. else
  40555. {
  40556. /* There is space available, but not enough space. */
  40557. xShouldWrite = pdFALSE;
  40558. 8010fd8: 2300 movs r3, #0
  40559. 8010fda: 617b str r3, [r7, #20]
  40560. }
  40561. if( xShouldWrite != pdFALSE )
  40562. 8010fdc: 697b ldr r3, [r7, #20]
  40563. 8010fde: 2b00 cmp r3, #0
  40564. 8010fe0: d007 beq.n 8010ff2 <prvWriteMessageToBuffer+0x6c>
  40565. {
  40566. /* Writes the data itself. */
  40567. xReturn = prvWriteBytesToBuffer( pxStreamBuffer, ( const uint8_t * ) pvTxData, xDataLengthBytes ); /*lint !e9079 Storage buffer is implemented as uint8_t for ease of sizing, alighment and access. */
  40568. 8010fe2: 687b ldr r3, [r7, #4]
  40569. 8010fe4: 461a mov r2, r3
  40570. 8010fe6: 68b9 ldr r1, [r7, #8]
  40571. 8010fe8: 68f8 ldr r0, [r7, #12]
  40572. 8010fea: f000 f809 bl 8011000 <prvWriteBytesToBuffer>
  40573. 8010fee: 6138 str r0, [r7, #16]
  40574. 8010ff0: e001 b.n 8010ff6 <prvWriteMessageToBuffer+0x70>
  40575. }
  40576. else
  40577. {
  40578. xReturn = 0;
  40579. 8010ff2: 2300 movs r3, #0
  40580. 8010ff4: 613b str r3, [r7, #16]
  40581. }
  40582. return xReturn;
  40583. 8010ff6: 693b ldr r3, [r7, #16]
  40584. }
  40585. 8010ff8: 4618 mov r0, r3
  40586. 8010ffa: 3718 adds r7, #24
  40587. 8010ffc: 46bd mov sp, r7
  40588. 8010ffe: bd80 pop {r7, pc}
  40589. 08011000 <prvWriteBytesToBuffer>:
  40590. return xReturn;
  40591. }
  40592. /*-----------------------------------------------------------*/
  40593. static size_t prvWriteBytesToBuffer( StreamBuffer_t * const pxStreamBuffer, const uint8_t *pucData, size_t xCount )
  40594. {
  40595. 8011000: b580 push {r7, lr}
  40596. 8011002: b08a sub sp, #40 @ 0x28
  40597. 8011004: af00 add r7, sp, #0
  40598. 8011006: 60f8 str r0, [r7, #12]
  40599. 8011008: 60b9 str r1, [r7, #8]
  40600. 801100a: 607a str r2, [r7, #4]
  40601. size_t xNextHead, xFirstLength;
  40602. configASSERT( xCount > ( size_t ) 0 );
  40603. 801100c: 687b ldr r3, [r7, #4]
  40604. 801100e: 2b00 cmp r3, #0
  40605. 8011010: d10b bne.n 801102a <prvWriteBytesToBuffer+0x2a>
  40606. __asm volatile
  40607. 8011012: f04f 0350 mov.w r3, #80 @ 0x50
  40608. 8011016: f383 8811 msr BASEPRI, r3
  40609. 801101a: f3bf 8f6f isb sy
  40610. 801101e: f3bf 8f4f dsb sy
  40611. 8011022: 61fb str r3, [r7, #28]
  40612. }
  40613. 8011024: bf00 nop
  40614. 8011026: bf00 nop
  40615. 8011028: e7fd b.n 8011026 <prvWriteBytesToBuffer+0x26>
  40616. xNextHead = pxStreamBuffer->xHead;
  40617. 801102a: 68fb ldr r3, [r7, #12]
  40618. 801102c: 685b ldr r3, [r3, #4]
  40619. 801102e: 627b str r3, [r7, #36] @ 0x24
  40620. /* Calculate the number of bytes that can be added in the first write -
  40621. which may be less than the total number of bytes that need to be added if
  40622. the buffer will wrap back to the beginning. */
  40623. xFirstLength = configMIN( pxStreamBuffer->xLength - xNextHead, xCount );
  40624. 8011030: 68fb ldr r3, [r7, #12]
  40625. 8011032: 689a ldr r2, [r3, #8]
  40626. 8011034: 6a7b ldr r3, [r7, #36] @ 0x24
  40627. 8011036: 1ad3 subs r3, r2, r3
  40628. 8011038: 687a ldr r2, [r7, #4]
  40629. 801103a: 4293 cmp r3, r2
  40630. 801103c: bf28 it cs
  40631. 801103e: 4613 movcs r3, r2
  40632. 8011040: 623b str r3, [r7, #32]
  40633. /* Write as many bytes as can be written in the first write. */
  40634. configASSERT( ( xNextHead + xFirstLength ) <= pxStreamBuffer->xLength );
  40635. 8011042: 6a7a ldr r2, [r7, #36] @ 0x24
  40636. 8011044: 6a3b ldr r3, [r7, #32]
  40637. 8011046: 441a add r2, r3
  40638. 8011048: 68fb ldr r3, [r7, #12]
  40639. 801104a: 689b ldr r3, [r3, #8]
  40640. 801104c: 429a cmp r2, r3
  40641. 801104e: d90b bls.n 8011068 <prvWriteBytesToBuffer+0x68>
  40642. __asm volatile
  40643. 8011050: f04f 0350 mov.w r3, #80 @ 0x50
  40644. 8011054: f383 8811 msr BASEPRI, r3
  40645. 8011058: f3bf 8f6f isb sy
  40646. 801105c: f3bf 8f4f dsb sy
  40647. 8011060: 61bb str r3, [r7, #24]
  40648. }
  40649. 8011062: bf00 nop
  40650. 8011064: bf00 nop
  40651. 8011066: e7fd b.n 8011064 <prvWriteBytesToBuffer+0x64>
  40652. ( void ) memcpy( ( void* ) ( &( pxStreamBuffer->pucBuffer[ xNextHead ] ) ), ( const void * ) pucData, xFirstLength ); /*lint !e9087 memcpy() requires void *. */
  40653. 8011068: 68fb ldr r3, [r7, #12]
  40654. 801106a: 699a ldr r2, [r3, #24]
  40655. 801106c: 6a7b ldr r3, [r7, #36] @ 0x24
  40656. 801106e: 4413 add r3, r2
  40657. 8011070: 6a3a ldr r2, [r7, #32]
  40658. 8011072: 68b9 ldr r1, [r7, #8]
  40659. 8011074: 4618 mov r0, r3
  40660. 8011076: f002 fc88 bl 801398a <memcpy>
  40661. /* If the number of bytes written was less than the number that could be
  40662. written in the first write... */
  40663. if( xCount > xFirstLength )
  40664. 801107a: 687a ldr r2, [r7, #4]
  40665. 801107c: 6a3b ldr r3, [r7, #32]
  40666. 801107e: 429a cmp r2, r3
  40667. 8011080: d91d bls.n 80110be <prvWriteBytesToBuffer+0xbe>
  40668. {
  40669. /* ...then write the remaining bytes to the start of the buffer. */
  40670. configASSERT( ( xCount - xFirstLength ) <= pxStreamBuffer->xLength );
  40671. 8011082: 687a ldr r2, [r7, #4]
  40672. 8011084: 6a3b ldr r3, [r7, #32]
  40673. 8011086: 1ad2 subs r2, r2, r3
  40674. 8011088: 68fb ldr r3, [r7, #12]
  40675. 801108a: 689b ldr r3, [r3, #8]
  40676. 801108c: 429a cmp r2, r3
  40677. 801108e: d90b bls.n 80110a8 <prvWriteBytesToBuffer+0xa8>
  40678. __asm volatile
  40679. 8011090: f04f 0350 mov.w r3, #80 @ 0x50
  40680. 8011094: f383 8811 msr BASEPRI, r3
  40681. 8011098: f3bf 8f6f isb sy
  40682. 801109c: f3bf 8f4f dsb sy
  40683. 80110a0: 617b str r3, [r7, #20]
  40684. }
  40685. 80110a2: bf00 nop
  40686. 80110a4: bf00 nop
  40687. 80110a6: e7fd b.n 80110a4 <prvWriteBytesToBuffer+0xa4>
  40688. ( void ) memcpy( ( void * ) pxStreamBuffer->pucBuffer, ( const void * ) &( pucData[ xFirstLength ] ), xCount - xFirstLength ); /*lint !e9087 memcpy() requires void *. */
  40689. 80110a8: 68fb ldr r3, [r7, #12]
  40690. 80110aa: 6998 ldr r0, [r3, #24]
  40691. 80110ac: 68ba ldr r2, [r7, #8]
  40692. 80110ae: 6a3b ldr r3, [r7, #32]
  40693. 80110b0: 18d1 adds r1, r2, r3
  40694. 80110b2: 687a ldr r2, [r7, #4]
  40695. 80110b4: 6a3b ldr r3, [r7, #32]
  40696. 80110b6: 1ad3 subs r3, r2, r3
  40697. 80110b8: 461a mov r2, r3
  40698. 80110ba: f002 fc66 bl 801398a <memcpy>
  40699. else
  40700. {
  40701. mtCOVERAGE_TEST_MARKER();
  40702. }
  40703. xNextHead += xCount;
  40704. 80110be: 6a7a ldr r2, [r7, #36] @ 0x24
  40705. 80110c0: 687b ldr r3, [r7, #4]
  40706. 80110c2: 4413 add r3, r2
  40707. 80110c4: 627b str r3, [r7, #36] @ 0x24
  40708. if( xNextHead >= pxStreamBuffer->xLength )
  40709. 80110c6: 68fb ldr r3, [r7, #12]
  40710. 80110c8: 689b ldr r3, [r3, #8]
  40711. 80110ca: 6a7a ldr r2, [r7, #36] @ 0x24
  40712. 80110cc: 429a cmp r2, r3
  40713. 80110ce: d304 bcc.n 80110da <prvWriteBytesToBuffer+0xda>
  40714. {
  40715. xNextHead -= pxStreamBuffer->xLength;
  40716. 80110d0: 68fb ldr r3, [r7, #12]
  40717. 80110d2: 689b ldr r3, [r3, #8]
  40718. 80110d4: 6a7a ldr r2, [r7, #36] @ 0x24
  40719. 80110d6: 1ad3 subs r3, r2, r3
  40720. 80110d8: 627b str r3, [r7, #36] @ 0x24
  40721. else
  40722. {
  40723. mtCOVERAGE_TEST_MARKER();
  40724. }
  40725. pxStreamBuffer->xHead = xNextHead;
  40726. 80110da: 68fb ldr r3, [r7, #12]
  40727. 80110dc: 6a7a ldr r2, [r7, #36] @ 0x24
  40728. 80110de: 605a str r2, [r3, #4]
  40729. return xCount;
  40730. 80110e0: 687b ldr r3, [r7, #4]
  40731. }
  40732. 80110e2: 4618 mov r0, r3
  40733. 80110e4: 3728 adds r7, #40 @ 0x28
  40734. 80110e6: 46bd mov sp, r7
  40735. 80110e8: bd80 pop {r7, pc}
  40736. 080110ea <prvBytesInBuffer>:
  40737. return xCount;
  40738. }
  40739. /*-----------------------------------------------------------*/
  40740. static size_t prvBytesInBuffer( const StreamBuffer_t * const pxStreamBuffer )
  40741. {
  40742. 80110ea: b480 push {r7}
  40743. 80110ec: b085 sub sp, #20
  40744. 80110ee: af00 add r7, sp, #0
  40745. 80110f0: 6078 str r0, [r7, #4]
  40746. /* Returns the distance between xTail and xHead. */
  40747. size_t xCount;
  40748. xCount = pxStreamBuffer->xLength + pxStreamBuffer->xHead;
  40749. 80110f2: 687b ldr r3, [r7, #4]
  40750. 80110f4: 689a ldr r2, [r3, #8]
  40751. 80110f6: 687b ldr r3, [r7, #4]
  40752. 80110f8: 685b ldr r3, [r3, #4]
  40753. 80110fa: 4413 add r3, r2
  40754. 80110fc: 60fb str r3, [r7, #12]
  40755. xCount -= pxStreamBuffer->xTail;
  40756. 80110fe: 687b ldr r3, [r7, #4]
  40757. 8011100: 681b ldr r3, [r3, #0]
  40758. 8011102: 68fa ldr r2, [r7, #12]
  40759. 8011104: 1ad3 subs r3, r2, r3
  40760. 8011106: 60fb str r3, [r7, #12]
  40761. if ( xCount >= pxStreamBuffer->xLength )
  40762. 8011108: 687b ldr r3, [r7, #4]
  40763. 801110a: 689b ldr r3, [r3, #8]
  40764. 801110c: 68fa ldr r2, [r7, #12]
  40765. 801110e: 429a cmp r2, r3
  40766. 8011110: d304 bcc.n 801111c <prvBytesInBuffer+0x32>
  40767. {
  40768. xCount -= pxStreamBuffer->xLength;
  40769. 8011112: 687b ldr r3, [r7, #4]
  40770. 8011114: 689b ldr r3, [r3, #8]
  40771. 8011116: 68fa ldr r2, [r7, #12]
  40772. 8011118: 1ad3 subs r3, r2, r3
  40773. 801111a: 60fb str r3, [r7, #12]
  40774. else
  40775. {
  40776. mtCOVERAGE_TEST_MARKER();
  40777. }
  40778. return xCount;
  40779. 801111c: 68fb ldr r3, [r7, #12]
  40780. }
  40781. 801111e: 4618 mov r0, r3
  40782. 8011120: 3714 adds r7, #20
  40783. 8011122: 46bd mov sp, r7
  40784. 8011124: f85d 7b04 ldr.w r7, [sp], #4
  40785. 8011128: 4770 bx lr
  40786. 0801112a <xTaskCreateStatic>:
  40787. const uint32_t ulStackDepth,
  40788. void * const pvParameters,
  40789. UBaseType_t uxPriority,
  40790. StackType_t * const puxStackBuffer,
  40791. StaticTask_t * const pxTaskBuffer )
  40792. {
  40793. 801112a: b580 push {r7, lr}
  40794. 801112c: b08e sub sp, #56 @ 0x38
  40795. 801112e: af04 add r7, sp, #16
  40796. 8011130: 60f8 str r0, [r7, #12]
  40797. 8011132: 60b9 str r1, [r7, #8]
  40798. 8011134: 607a str r2, [r7, #4]
  40799. 8011136: 603b str r3, [r7, #0]
  40800. TCB_t *pxNewTCB;
  40801. TaskHandle_t xReturn;
  40802. configASSERT( puxStackBuffer != NULL );
  40803. 8011138: 6b7b ldr r3, [r7, #52] @ 0x34
  40804. 801113a: 2b00 cmp r3, #0
  40805. 801113c: d10b bne.n 8011156 <xTaskCreateStatic+0x2c>
  40806. __asm volatile
  40807. 801113e: f04f 0350 mov.w r3, #80 @ 0x50
  40808. 8011142: f383 8811 msr BASEPRI, r3
  40809. 8011146: f3bf 8f6f isb sy
  40810. 801114a: f3bf 8f4f dsb sy
  40811. 801114e: 623b str r3, [r7, #32]
  40812. }
  40813. 8011150: bf00 nop
  40814. 8011152: bf00 nop
  40815. 8011154: e7fd b.n 8011152 <xTaskCreateStatic+0x28>
  40816. configASSERT( pxTaskBuffer != NULL );
  40817. 8011156: 6bbb ldr r3, [r7, #56] @ 0x38
  40818. 8011158: 2b00 cmp r3, #0
  40819. 801115a: d10b bne.n 8011174 <xTaskCreateStatic+0x4a>
  40820. __asm volatile
  40821. 801115c: f04f 0350 mov.w r3, #80 @ 0x50
  40822. 8011160: f383 8811 msr BASEPRI, r3
  40823. 8011164: f3bf 8f6f isb sy
  40824. 8011168: f3bf 8f4f dsb sy
  40825. 801116c: 61fb str r3, [r7, #28]
  40826. }
  40827. 801116e: bf00 nop
  40828. 8011170: bf00 nop
  40829. 8011172: e7fd b.n 8011170 <xTaskCreateStatic+0x46>
  40830. #if( configASSERT_DEFINED == 1 )
  40831. {
  40832. /* Sanity check that the size of the structure used to declare a
  40833. variable of type StaticTask_t equals the size of the real task
  40834. structure. */
  40835. volatile size_t xSize = sizeof( StaticTask_t );
  40836. 8011174: 23a8 movs r3, #168 @ 0xa8
  40837. 8011176: 613b str r3, [r7, #16]
  40838. configASSERT( xSize == sizeof( TCB_t ) );
  40839. 8011178: 693b ldr r3, [r7, #16]
  40840. 801117a: 2ba8 cmp r3, #168 @ 0xa8
  40841. 801117c: d00b beq.n 8011196 <xTaskCreateStatic+0x6c>
  40842. __asm volatile
  40843. 801117e: f04f 0350 mov.w r3, #80 @ 0x50
  40844. 8011182: f383 8811 msr BASEPRI, r3
  40845. 8011186: f3bf 8f6f isb sy
  40846. 801118a: f3bf 8f4f dsb sy
  40847. 801118e: 61bb str r3, [r7, #24]
  40848. }
  40849. 8011190: bf00 nop
  40850. 8011192: bf00 nop
  40851. 8011194: e7fd b.n 8011192 <xTaskCreateStatic+0x68>
  40852. ( void ) xSize; /* Prevent lint warning when configASSERT() is not used. */
  40853. 8011196: 693b ldr r3, [r7, #16]
  40854. }
  40855. #endif /* configASSERT_DEFINED */
  40856. if( ( pxTaskBuffer != NULL ) && ( puxStackBuffer != NULL ) )
  40857. 8011198: 6bbb ldr r3, [r7, #56] @ 0x38
  40858. 801119a: 2b00 cmp r3, #0
  40859. 801119c: d01e beq.n 80111dc <xTaskCreateStatic+0xb2>
  40860. 801119e: 6b7b ldr r3, [r7, #52] @ 0x34
  40861. 80111a0: 2b00 cmp r3, #0
  40862. 80111a2: d01b beq.n 80111dc <xTaskCreateStatic+0xb2>
  40863. {
  40864. /* The memory used for the task's TCB and stack are passed into this
  40865. function - use them. */
  40866. 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. */
  40867. 80111a4: 6bbb ldr r3, [r7, #56] @ 0x38
  40868. 80111a6: 627b str r3, [r7, #36] @ 0x24
  40869. pxNewTCB->pxStack = ( StackType_t * ) puxStackBuffer;
  40870. 80111a8: 6a7b ldr r3, [r7, #36] @ 0x24
  40871. 80111aa: 6b7a ldr r2, [r7, #52] @ 0x34
  40872. 80111ac: 631a str r2, [r3, #48] @ 0x30
  40873. #if( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 ) /*lint !e731 !e9029 Macro has been consolidated for readability reasons. */
  40874. {
  40875. /* Tasks can be created statically or dynamically, so note this
  40876. task was created statically in case the task is later deleted. */
  40877. pxNewTCB->ucStaticallyAllocated = tskSTATICALLY_ALLOCATED_STACK_AND_TCB;
  40878. 80111ae: 6a7b ldr r3, [r7, #36] @ 0x24
  40879. 80111b0: 2202 movs r2, #2
  40880. 80111b2: f883 20a5 strb.w r2, [r3, #165] @ 0xa5
  40881. }
  40882. #endif /* tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE */
  40883. prvInitialiseNewTask( pxTaskCode, pcName, ulStackDepth, pvParameters, uxPriority, &xReturn, pxNewTCB, NULL );
  40884. 80111b6: 2300 movs r3, #0
  40885. 80111b8: 9303 str r3, [sp, #12]
  40886. 80111ba: 6a7b ldr r3, [r7, #36] @ 0x24
  40887. 80111bc: 9302 str r3, [sp, #8]
  40888. 80111be: f107 0314 add.w r3, r7, #20
  40889. 80111c2: 9301 str r3, [sp, #4]
  40890. 80111c4: 6b3b ldr r3, [r7, #48] @ 0x30
  40891. 80111c6: 9300 str r3, [sp, #0]
  40892. 80111c8: 683b ldr r3, [r7, #0]
  40893. 80111ca: 687a ldr r2, [r7, #4]
  40894. 80111cc: 68b9 ldr r1, [r7, #8]
  40895. 80111ce: 68f8 ldr r0, [r7, #12]
  40896. 80111d0: f000 f850 bl 8011274 <prvInitialiseNewTask>
  40897. prvAddNewTaskToReadyList( pxNewTCB );
  40898. 80111d4: 6a78 ldr r0, [r7, #36] @ 0x24
  40899. 80111d6: f000 f8f5 bl 80113c4 <prvAddNewTaskToReadyList>
  40900. 80111da: e001 b.n 80111e0 <xTaskCreateStatic+0xb6>
  40901. }
  40902. else
  40903. {
  40904. xReturn = NULL;
  40905. 80111dc: 2300 movs r3, #0
  40906. 80111de: 617b str r3, [r7, #20]
  40907. }
  40908. return xReturn;
  40909. 80111e0: 697b ldr r3, [r7, #20]
  40910. }
  40911. 80111e2: 4618 mov r0, r3
  40912. 80111e4: 3728 adds r7, #40 @ 0x28
  40913. 80111e6: 46bd mov sp, r7
  40914. 80111e8: bd80 pop {r7, pc}
  40915. 080111ea <xTaskCreate>:
  40916. const char * const pcName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
  40917. const configSTACK_DEPTH_TYPE usStackDepth,
  40918. void * const pvParameters,
  40919. UBaseType_t uxPriority,
  40920. TaskHandle_t * const pxCreatedTask )
  40921. {
  40922. 80111ea: b580 push {r7, lr}
  40923. 80111ec: b08c sub sp, #48 @ 0x30
  40924. 80111ee: af04 add r7, sp, #16
  40925. 80111f0: 60f8 str r0, [r7, #12]
  40926. 80111f2: 60b9 str r1, [r7, #8]
  40927. 80111f4: 603b str r3, [r7, #0]
  40928. 80111f6: 4613 mov r3, r2
  40929. 80111f8: 80fb strh r3, [r7, #6]
  40930. #else /* portSTACK_GROWTH */
  40931. {
  40932. StackType_t *pxStack;
  40933. /* Allocate space for the stack used by the task being created. */
  40934. 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. */
  40935. 80111fa: 88fb ldrh r3, [r7, #6]
  40936. 80111fc: 009b lsls r3, r3, #2
  40937. 80111fe: 4618 mov r0, r3
  40938. 8011200: f001 ffec bl 80131dc <pvPortMalloc>
  40939. 8011204: 6178 str r0, [r7, #20]
  40940. if( pxStack != NULL )
  40941. 8011206: 697b ldr r3, [r7, #20]
  40942. 8011208: 2b00 cmp r3, #0
  40943. 801120a: d00e beq.n 801122a <xTaskCreate+0x40>
  40944. {
  40945. /* Allocate space for the TCB. */
  40946. 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. */
  40947. 801120c: 20a8 movs r0, #168 @ 0xa8
  40948. 801120e: f001 ffe5 bl 80131dc <pvPortMalloc>
  40949. 8011212: 61f8 str r0, [r7, #28]
  40950. if( pxNewTCB != NULL )
  40951. 8011214: 69fb ldr r3, [r7, #28]
  40952. 8011216: 2b00 cmp r3, #0
  40953. 8011218: d003 beq.n 8011222 <xTaskCreate+0x38>
  40954. {
  40955. /* Store the stack location in the TCB. */
  40956. pxNewTCB->pxStack = pxStack;
  40957. 801121a: 69fb ldr r3, [r7, #28]
  40958. 801121c: 697a ldr r2, [r7, #20]
  40959. 801121e: 631a str r2, [r3, #48] @ 0x30
  40960. 8011220: e005 b.n 801122e <xTaskCreate+0x44>
  40961. }
  40962. else
  40963. {
  40964. /* The stack cannot be used as the TCB was not created. Free
  40965. it again. */
  40966. vPortFree( pxStack );
  40967. 8011222: 6978 ldr r0, [r7, #20]
  40968. 8011224: f002 f8a8 bl 8013378 <vPortFree>
  40969. 8011228: e001 b.n 801122e <xTaskCreate+0x44>
  40970. }
  40971. }
  40972. else
  40973. {
  40974. pxNewTCB = NULL;
  40975. 801122a: 2300 movs r3, #0
  40976. 801122c: 61fb str r3, [r7, #28]
  40977. }
  40978. }
  40979. #endif /* portSTACK_GROWTH */
  40980. if( pxNewTCB != NULL )
  40981. 801122e: 69fb ldr r3, [r7, #28]
  40982. 8011230: 2b00 cmp r3, #0
  40983. 8011232: d017 beq.n 8011264 <xTaskCreate+0x7a>
  40984. {
  40985. #if( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 ) /*lint !e9029 !e731 Macro has been consolidated for readability reasons. */
  40986. {
  40987. /* Tasks can be created statically or dynamically, so note this
  40988. task was created dynamically in case it is later deleted. */
  40989. pxNewTCB->ucStaticallyAllocated = tskDYNAMICALLY_ALLOCATED_STACK_AND_TCB;
  40990. 8011234: 69fb ldr r3, [r7, #28]
  40991. 8011236: 2200 movs r2, #0
  40992. 8011238: f883 20a5 strb.w r2, [r3, #165] @ 0xa5
  40993. }
  40994. #endif /* tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE */
  40995. prvInitialiseNewTask( pxTaskCode, pcName, ( uint32_t ) usStackDepth, pvParameters, uxPriority, pxCreatedTask, pxNewTCB, NULL );
  40996. 801123c: 88fa ldrh r2, [r7, #6]
  40997. 801123e: 2300 movs r3, #0
  40998. 8011240: 9303 str r3, [sp, #12]
  40999. 8011242: 69fb ldr r3, [r7, #28]
  41000. 8011244: 9302 str r3, [sp, #8]
  41001. 8011246: 6afb ldr r3, [r7, #44] @ 0x2c
  41002. 8011248: 9301 str r3, [sp, #4]
  41003. 801124a: 6abb ldr r3, [r7, #40] @ 0x28
  41004. 801124c: 9300 str r3, [sp, #0]
  41005. 801124e: 683b ldr r3, [r7, #0]
  41006. 8011250: 68b9 ldr r1, [r7, #8]
  41007. 8011252: 68f8 ldr r0, [r7, #12]
  41008. 8011254: f000 f80e bl 8011274 <prvInitialiseNewTask>
  41009. prvAddNewTaskToReadyList( pxNewTCB );
  41010. 8011258: 69f8 ldr r0, [r7, #28]
  41011. 801125a: f000 f8b3 bl 80113c4 <prvAddNewTaskToReadyList>
  41012. xReturn = pdPASS;
  41013. 801125e: 2301 movs r3, #1
  41014. 8011260: 61bb str r3, [r7, #24]
  41015. 8011262: e002 b.n 801126a <xTaskCreate+0x80>
  41016. }
  41017. else
  41018. {
  41019. xReturn = errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY;
  41020. 8011264: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  41021. 8011268: 61bb str r3, [r7, #24]
  41022. }
  41023. return xReturn;
  41024. 801126a: 69bb ldr r3, [r7, #24]
  41025. }
  41026. 801126c: 4618 mov r0, r3
  41027. 801126e: 3720 adds r7, #32
  41028. 8011270: 46bd mov sp, r7
  41029. 8011272: bd80 pop {r7, pc}
  41030. 08011274 <prvInitialiseNewTask>:
  41031. void * const pvParameters,
  41032. UBaseType_t uxPriority,
  41033. TaskHandle_t * const pxCreatedTask,
  41034. TCB_t *pxNewTCB,
  41035. const MemoryRegion_t * const xRegions )
  41036. {
  41037. 8011274: b580 push {r7, lr}
  41038. 8011276: b088 sub sp, #32
  41039. 8011278: af00 add r7, sp, #0
  41040. 801127a: 60f8 str r0, [r7, #12]
  41041. 801127c: 60b9 str r1, [r7, #8]
  41042. 801127e: 607a str r2, [r7, #4]
  41043. 8011280: 603b str r3, [r7, #0]
  41044. /* Avoid dependency on memset() if it is not required. */
  41045. #if( tskSET_NEW_STACKS_TO_KNOWN_VALUE == 1 )
  41046. {
  41047. /* Fill the stack with a known value to assist debugging. */
  41048. ( void ) memset( pxNewTCB->pxStack, ( int ) tskSTACK_FILL_BYTE, ( size_t ) ulStackDepth * sizeof( StackType_t ) );
  41049. 8011282: 6b3b ldr r3, [r7, #48] @ 0x30
  41050. 8011284: 6b18 ldr r0, [r3, #48] @ 0x30
  41051. 8011286: 687b ldr r3, [r7, #4]
  41052. 8011288: 009b lsls r3, r3, #2
  41053. 801128a: 461a mov r2, r3
  41054. 801128c: 21a5 movs r1, #165 @ 0xa5
  41055. 801128e: f002 faaa bl 80137e6 <memset>
  41056. grows from high memory to low (as per the 80x86) or vice versa.
  41057. portSTACK_GROWTH is used to make the result positive or negative as required
  41058. by the port. */
  41059. #if( portSTACK_GROWTH < 0 )
  41060. {
  41061. pxTopOfStack = &( pxNewTCB->pxStack[ ulStackDepth - ( uint32_t ) 1 ] );
  41062. 8011292: 6b3b ldr r3, [r7, #48] @ 0x30
  41063. 8011294: 6b1a ldr r2, [r3, #48] @ 0x30
  41064. 8011296: 6879 ldr r1, [r7, #4]
  41065. 8011298: f06f 4340 mvn.w r3, #3221225472 @ 0xc0000000
  41066. 801129c: 440b add r3, r1
  41067. 801129e: 009b lsls r3, r3, #2
  41068. 80112a0: 4413 add r3, r2
  41069. 80112a2: 61bb str r3, [r7, #24]
  41070. 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(). */
  41071. 80112a4: 69bb ldr r3, [r7, #24]
  41072. 80112a6: f023 0307 bic.w r3, r3, #7
  41073. 80112aa: 61bb str r3, [r7, #24]
  41074. /* Check the alignment of the calculated top of stack is correct. */
  41075. configASSERT( ( ( ( portPOINTER_SIZE_TYPE ) pxTopOfStack & ( portPOINTER_SIZE_TYPE ) portBYTE_ALIGNMENT_MASK ) == 0UL ) );
  41076. 80112ac: 69bb ldr r3, [r7, #24]
  41077. 80112ae: f003 0307 and.w r3, r3, #7
  41078. 80112b2: 2b00 cmp r3, #0
  41079. 80112b4: d00b beq.n 80112ce <prvInitialiseNewTask+0x5a>
  41080. __asm volatile
  41081. 80112b6: f04f 0350 mov.w r3, #80 @ 0x50
  41082. 80112ba: f383 8811 msr BASEPRI, r3
  41083. 80112be: f3bf 8f6f isb sy
  41084. 80112c2: f3bf 8f4f dsb sy
  41085. 80112c6: 617b str r3, [r7, #20]
  41086. }
  41087. 80112c8: bf00 nop
  41088. 80112ca: bf00 nop
  41089. 80112cc: e7fd b.n 80112ca <prvInitialiseNewTask+0x56>
  41090. pxNewTCB->pxEndOfStack = pxNewTCB->pxStack + ( ulStackDepth - ( uint32_t ) 1 );
  41091. }
  41092. #endif /* portSTACK_GROWTH */
  41093. /* Store the task name in the TCB. */
  41094. if( pcName != NULL )
  41095. 80112ce: 68bb ldr r3, [r7, #8]
  41096. 80112d0: 2b00 cmp r3, #0
  41097. 80112d2: d01f beq.n 8011314 <prvInitialiseNewTask+0xa0>
  41098. {
  41099. for( x = ( UBaseType_t ) 0; x < ( UBaseType_t ) configMAX_TASK_NAME_LEN; x++ )
  41100. 80112d4: 2300 movs r3, #0
  41101. 80112d6: 61fb str r3, [r7, #28]
  41102. 80112d8: e012 b.n 8011300 <prvInitialiseNewTask+0x8c>
  41103. {
  41104. pxNewTCB->pcTaskName[ x ] = pcName[ x ];
  41105. 80112da: 68ba ldr r2, [r7, #8]
  41106. 80112dc: 69fb ldr r3, [r7, #28]
  41107. 80112de: 4413 add r3, r2
  41108. 80112e0: 7819 ldrb r1, [r3, #0]
  41109. 80112e2: 6b3a ldr r2, [r7, #48] @ 0x30
  41110. 80112e4: 69fb ldr r3, [r7, #28]
  41111. 80112e6: 4413 add r3, r2
  41112. 80112e8: 3334 adds r3, #52 @ 0x34
  41113. 80112ea: 460a mov r2, r1
  41114. 80112ec: 701a strb r2, [r3, #0]
  41115. /* Don't copy all configMAX_TASK_NAME_LEN if the string is shorter than
  41116. configMAX_TASK_NAME_LEN characters just in case the memory after the
  41117. string is not accessible (extremely unlikely). */
  41118. if( pcName[ x ] == ( char ) 0x00 )
  41119. 80112ee: 68ba ldr r2, [r7, #8]
  41120. 80112f0: 69fb ldr r3, [r7, #28]
  41121. 80112f2: 4413 add r3, r2
  41122. 80112f4: 781b ldrb r3, [r3, #0]
  41123. 80112f6: 2b00 cmp r3, #0
  41124. 80112f8: d006 beq.n 8011308 <prvInitialiseNewTask+0x94>
  41125. for( x = ( UBaseType_t ) 0; x < ( UBaseType_t ) configMAX_TASK_NAME_LEN; x++ )
  41126. 80112fa: 69fb ldr r3, [r7, #28]
  41127. 80112fc: 3301 adds r3, #1
  41128. 80112fe: 61fb str r3, [r7, #28]
  41129. 8011300: 69fb ldr r3, [r7, #28]
  41130. 8011302: 2b0f cmp r3, #15
  41131. 8011304: d9e9 bls.n 80112da <prvInitialiseNewTask+0x66>
  41132. 8011306: e000 b.n 801130a <prvInitialiseNewTask+0x96>
  41133. {
  41134. break;
  41135. 8011308: bf00 nop
  41136. }
  41137. }
  41138. /* Ensure the name string is terminated in the case that the string length
  41139. was greater or equal to configMAX_TASK_NAME_LEN. */
  41140. pxNewTCB->pcTaskName[ configMAX_TASK_NAME_LEN - 1 ] = '\0';
  41141. 801130a: 6b3b ldr r3, [r7, #48] @ 0x30
  41142. 801130c: 2200 movs r2, #0
  41143. 801130e: f883 2043 strb.w r2, [r3, #67] @ 0x43
  41144. 8011312: e003 b.n 801131c <prvInitialiseNewTask+0xa8>
  41145. }
  41146. else
  41147. {
  41148. /* The task has not been given a name, so just ensure there is a NULL
  41149. terminator when it is read out. */
  41150. pxNewTCB->pcTaskName[ 0 ] = 0x00;
  41151. 8011314: 6b3b ldr r3, [r7, #48] @ 0x30
  41152. 8011316: 2200 movs r2, #0
  41153. 8011318: f883 2034 strb.w r2, [r3, #52] @ 0x34
  41154. }
  41155. /* This is used as an array index so must ensure it's not too large. First
  41156. remove the privilege bit if one is present. */
  41157. if( uxPriority >= ( UBaseType_t ) configMAX_PRIORITIES )
  41158. 801131c: 6abb ldr r3, [r7, #40] @ 0x28
  41159. 801131e: 2b37 cmp r3, #55 @ 0x37
  41160. 8011320: d901 bls.n 8011326 <prvInitialiseNewTask+0xb2>
  41161. {
  41162. uxPriority = ( UBaseType_t ) configMAX_PRIORITIES - ( UBaseType_t ) 1U;
  41163. 8011322: 2337 movs r3, #55 @ 0x37
  41164. 8011324: 62bb str r3, [r7, #40] @ 0x28
  41165. else
  41166. {
  41167. mtCOVERAGE_TEST_MARKER();
  41168. }
  41169. pxNewTCB->uxPriority = uxPriority;
  41170. 8011326: 6b3b ldr r3, [r7, #48] @ 0x30
  41171. 8011328: 6aba ldr r2, [r7, #40] @ 0x28
  41172. 801132a: 62da str r2, [r3, #44] @ 0x2c
  41173. #if ( configUSE_MUTEXES == 1 )
  41174. {
  41175. pxNewTCB->uxBasePriority = uxPriority;
  41176. 801132c: 6b3b ldr r3, [r7, #48] @ 0x30
  41177. 801132e: 6aba ldr r2, [r7, #40] @ 0x28
  41178. 8011330: 64da str r2, [r3, #76] @ 0x4c
  41179. pxNewTCB->uxMutexesHeld = 0;
  41180. 8011332: 6b3b ldr r3, [r7, #48] @ 0x30
  41181. 8011334: 2200 movs r2, #0
  41182. 8011336: 651a str r2, [r3, #80] @ 0x50
  41183. }
  41184. #endif /* configUSE_MUTEXES */
  41185. vListInitialiseItem( &( pxNewTCB->xStateListItem ) );
  41186. 8011338: 6b3b ldr r3, [r7, #48] @ 0x30
  41187. 801133a: 3304 adds r3, #4
  41188. 801133c: 4618 mov r0, r3
  41189. 801133e: f7fe fd09 bl 800fd54 <vListInitialiseItem>
  41190. vListInitialiseItem( &( pxNewTCB->xEventListItem ) );
  41191. 8011342: 6b3b ldr r3, [r7, #48] @ 0x30
  41192. 8011344: 3318 adds r3, #24
  41193. 8011346: 4618 mov r0, r3
  41194. 8011348: f7fe fd04 bl 800fd54 <vListInitialiseItem>
  41195. /* Set the pxNewTCB as a link back from the ListItem_t. This is so we can get
  41196. back to the containing TCB from a generic item in a list. */
  41197. listSET_LIST_ITEM_OWNER( &( pxNewTCB->xStateListItem ), pxNewTCB );
  41198. 801134c: 6b3b ldr r3, [r7, #48] @ 0x30
  41199. 801134e: 6b3a ldr r2, [r7, #48] @ 0x30
  41200. 8011350: 611a str r2, [r3, #16]
  41201. /* Event lists are always in priority order. */
  41202. 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. */
  41203. 8011352: 6abb ldr r3, [r7, #40] @ 0x28
  41204. 8011354: f1c3 0238 rsb r2, r3, #56 @ 0x38
  41205. 8011358: 6b3b ldr r3, [r7, #48] @ 0x30
  41206. 801135a: 619a str r2, [r3, #24]
  41207. listSET_LIST_ITEM_OWNER( &( pxNewTCB->xEventListItem ), pxNewTCB );
  41208. 801135c: 6b3b ldr r3, [r7, #48] @ 0x30
  41209. 801135e: 6b3a ldr r2, [r7, #48] @ 0x30
  41210. 8011360: 625a str r2, [r3, #36] @ 0x24
  41211. }
  41212. #endif
  41213. #if ( configUSE_TASK_NOTIFICATIONS == 1 )
  41214. {
  41215. pxNewTCB->ulNotifiedValue = 0;
  41216. 8011362: 6b3b ldr r3, [r7, #48] @ 0x30
  41217. 8011364: 2200 movs r2, #0
  41218. 8011366: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  41219. pxNewTCB->ucNotifyState = taskNOT_WAITING_NOTIFICATION;
  41220. 801136a: 6b3b ldr r3, [r7, #48] @ 0x30
  41221. 801136c: 2200 movs r2, #0
  41222. 801136e: f883 20a4 strb.w r2, [r3, #164] @ 0xa4
  41223. #if ( configUSE_NEWLIB_REENTRANT == 1 )
  41224. {
  41225. /* Initialise this task's Newlib reent structure.
  41226. See the third party link http://www.nadler.com/embedded/newlibAndFreeRTOS.html
  41227. for additional information. */
  41228. _REENT_INIT_PTR( ( &( pxNewTCB->xNewLib_reent ) ) );
  41229. 8011372: 6b3b ldr r3, [r7, #48] @ 0x30
  41230. 8011374: 3354 adds r3, #84 @ 0x54
  41231. 8011376: 224c movs r2, #76 @ 0x4c
  41232. 8011378: 2100 movs r1, #0
  41233. 801137a: 4618 mov r0, r3
  41234. 801137c: f002 fa33 bl 80137e6 <memset>
  41235. 8011380: 6b3b ldr r3, [r7, #48] @ 0x30
  41236. 8011382: 4a0d ldr r2, [pc, #52] @ (80113b8 <prvInitialiseNewTask+0x144>)
  41237. 8011384: 659a str r2, [r3, #88] @ 0x58
  41238. 8011386: 6b3b ldr r3, [r7, #48] @ 0x30
  41239. 8011388: 4a0c ldr r2, [pc, #48] @ (80113bc <prvInitialiseNewTask+0x148>)
  41240. 801138a: 65da str r2, [r3, #92] @ 0x5c
  41241. 801138c: 6b3b ldr r3, [r7, #48] @ 0x30
  41242. 801138e: 4a0c ldr r2, [pc, #48] @ (80113c0 <prvInitialiseNewTask+0x14c>)
  41243. 8011390: 661a str r2, [r3, #96] @ 0x60
  41244. }
  41245. #endif /* portSTACK_GROWTH */
  41246. }
  41247. #else /* portHAS_STACK_OVERFLOW_CHECKING */
  41248. {
  41249. pxNewTCB->pxTopOfStack = pxPortInitialiseStack( pxTopOfStack, pxTaskCode, pvParameters );
  41250. 8011392: 683a ldr r2, [r7, #0]
  41251. 8011394: 68f9 ldr r1, [r7, #12]
  41252. 8011396: 69b8 ldr r0, [r7, #24]
  41253. 8011398: f001 fcce bl 8012d38 <pxPortInitialiseStack>
  41254. 801139c: 4602 mov r2, r0
  41255. 801139e: 6b3b ldr r3, [r7, #48] @ 0x30
  41256. 80113a0: 601a str r2, [r3, #0]
  41257. }
  41258. #endif /* portHAS_STACK_OVERFLOW_CHECKING */
  41259. }
  41260. #endif /* portUSING_MPU_WRAPPERS */
  41261. if( pxCreatedTask != NULL )
  41262. 80113a2: 6afb ldr r3, [r7, #44] @ 0x2c
  41263. 80113a4: 2b00 cmp r3, #0
  41264. 80113a6: d002 beq.n 80113ae <prvInitialiseNewTask+0x13a>
  41265. {
  41266. /* Pass the handle out in an anonymous way. The handle can be used to
  41267. change the created task's priority, delete the created task, etc.*/
  41268. *pxCreatedTask = ( TaskHandle_t ) pxNewTCB;
  41269. 80113a8: 6afb ldr r3, [r7, #44] @ 0x2c
  41270. 80113aa: 6b3a ldr r2, [r7, #48] @ 0x30
  41271. 80113ac: 601a str r2, [r3, #0]
  41272. }
  41273. else
  41274. {
  41275. mtCOVERAGE_TEST_MARKER();
  41276. }
  41277. }
  41278. 80113ae: bf00 nop
  41279. 80113b0: 3720 adds r7, #32
  41280. 80113b2: 46bd mov sp, r7
  41281. 80113b4: bd80 pop {r7, pc}
  41282. 80113b6: bf00 nop
  41283. 80113b8: 24012a48 .word 0x24012a48
  41284. 80113bc: 24012ab0 .word 0x24012ab0
  41285. 80113c0: 24012b18 .word 0x24012b18
  41286. 080113c4 <prvAddNewTaskToReadyList>:
  41287. /*-----------------------------------------------------------*/
  41288. static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB )
  41289. {
  41290. 80113c4: b580 push {r7, lr}
  41291. 80113c6: b082 sub sp, #8
  41292. 80113c8: af00 add r7, sp, #0
  41293. 80113ca: 6078 str r0, [r7, #4]
  41294. /* Ensure interrupts don't access the task lists while the lists are being
  41295. updated. */
  41296. taskENTER_CRITICAL();
  41297. 80113cc: f001 fde4 bl 8012f98 <vPortEnterCritical>
  41298. {
  41299. uxCurrentNumberOfTasks++;
  41300. 80113d0: 4b2d ldr r3, [pc, #180] @ (8011488 <prvAddNewTaskToReadyList+0xc4>)
  41301. 80113d2: 681b ldr r3, [r3, #0]
  41302. 80113d4: 3301 adds r3, #1
  41303. 80113d6: 4a2c ldr r2, [pc, #176] @ (8011488 <prvAddNewTaskToReadyList+0xc4>)
  41304. 80113d8: 6013 str r3, [r2, #0]
  41305. if( pxCurrentTCB == NULL )
  41306. 80113da: 4b2c ldr r3, [pc, #176] @ (801148c <prvAddNewTaskToReadyList+0xc8>)
  41307. 80113dc: 681b ldr r3, [r3, #0]
  41308. 80113de: 2b00 cmp r3, #0
  41309. 80113e0: d109 bne.n 80113f6 <prvAddNewTaskToReadyList+0x32>
  41310. {
  41311. /* There are no other tasks, or all the other tasks are in
  41312. the suspended state - make this the current task. */
  41313. pxCurrentTCB = pxNewTCB;
  41314. 80113e2: 4a2a ldr r2, [pc, #168] @ (801148c <prvAddNewTaskToReadyList+0xc8>)
  41315. 80113e4: 687b ldr r3, [r7, #4]
  41316. 80113e6: 6013 str r3, [r2, #0]
  41317. if( uxCurrentNumberOfTasks == ( UBaseType_t ) 1 )
  41318. 80113e8: 4b27 ldr r3, [pc, #156] @ (8011488 <prvAddNewTaskToReadyList+0xc4>)
  41319. 80113ea: 681b ldr r3, [r3, #0]
  41320. 80113ec: 2b01 cmp r3, #1
  41321. 80113ee: d110 bne.n 8011412 <prvAddNewTaskToReadyList+0x4e>
  41322. {
  41323. /* This is the first task to be created so do the preliminary
  41324. initialisation required. We will not recover if this call
  41325. fails, but we will report the failure. */
  41326. prvInitialiseTaskLists();
  41327. 80113f0: f000 fc64 bl 8011cbc <prvInitialiseTaskLists>
  41328. 80113f4: e00d b.n 8011412 <prvAddNewTaskToReadyList+0x4e>
  41329. else
  41330. {
  41331. /* If the scheduler is not already running, make this task the
  41332. current task if it is the highest priority task to be created
  41333. so far. */
  41334. if( xSchedulerRunning == pdFALSE )
  41335. 80113f6: 4b26 ldr r3, [pc, #152] @ (8011490 <prvAddNewTaskToReadyList+0xcc>)
  41336. 80113f8: 681b ldr r3, [r3, #0]
  41337. 80113fa: 2b00 cmp r3, #0
  41338. 80113fc: d109 bne.n 8011412 <prvAddNewTaskToReadyList+0x4e>
  41339. {
  41340. if( pxCurrentTCB->uxPriority <= pxNewTCB->uxPriority )
  41341. 80113fe: 4b23 ldr r3, [pc, #140] @ (801148c <prvAddNewTaskToReadyList+0xc8>)
  41342. 8011400: 681b ldr r3, [r3, #0]
  41343. 8011402: 6ada ldr r2, [r3, #44] @ 0x2c
  41344. 8011404: 687b ldr r3, [r7, #4]
  41345. 8011406: 6adb ldr r3, [r3, #44] @ 0x2c
  41346. 8011408: 429a cmp r2, r3
  41347. 801140a: d802 bhi.n 8011412 <prvAddNewTaskToReadyList+0x4e>
  41348. {
  41349. pxCurrentTCB = pxNewTCB;
  41350. 801140c: 4a1f ldr r2, [pc, #124] @ (801148c <prvAddNewTaskToReadyList+0xc8>)
  41351. 801140e: 687b ldr r3, [r7, #4]
  41352. 8011410: 6013 str r3, [r2, #0]
  41353. {
  41354. mtCOVERAGE_TEST_MARKER();
  41355. }
  41356. }
  41357. uxTaskNumber++;
  41358. 8011412: 4b20 ldr r3, [pc, #128] @ (8011494 <prvAddNewTaskToReadyList+0xd0>)
  41359. 8011414: 681b ldr r3, [r3, #0]
  41360. 8011416: 3301 adds r3, #1
  41361. 8011418: 4a1e ldr r2, [pc, #120] @ (8011494 <prvAddNewTaskToReadyList+0xd0>)
  41362. 801141a: 6013 str r3, [r2, #0]
  41363. #if ( configUSE_TRACE_FACILITY == 1 )
  41364. {
  41365. /* Add a counter into the TCB for tracing only. */
  41366. pxNewTCB->uxTCBNumber = uxTaskNumber;
  41367. 801141c: 4b1d ldr r3, [pc, #116] @ (8011494 <prvAddNewTaskToReadyList+0xd0>)
  41368. 801141e: 681a ldr r2, [r3, #0]
  41369. 8011420: 687b ldr r3, [r7, #4]
  41370. 8011422: 645a str r2, [r3, #68] @ 0x44
  41371. }
  41372. #endif /* configUSE_TRACE_FACILITY */
  41373. traceTASK_CREATE( pxNewTCB );
  41374. prvAddTaskToReadyList( pxNewTCB );
  41375. 8011424: 687b ldr r3, [r7, #4]
  41376. 8011426: 6ada ldr r2, [r3, #44] @ 0x2c
  41377. 8011428: 4b1b ldr r3, [pc, #108] @ (8011498 <prvAddNewTaskToReadyList+0xd4>)
  41378. 801142a: 681b ldr r3, [r3, #0]
  41379. 801142c: 429a cmp r2, r3
  41380. 801142e: d903 bls.n 8011438 <prvAddNewTaskToReadyList+0x74>
  41381. 8011430: 687b ldr r3, [r7, #4]
  41382. 8011432: 6adb ldr r3, [r3, #44] @ 0x2c
  41383. 8011434: 4a18 ldr r2, [pc, #96] @ (8011498 <prvAddNewTaskToReadyList+0xd4>)
  41384. 8011436: 6013 str r3, [r2, #0]
  41385. 8011438: 687b ldr r3, [r7, #4]
  41386. 801143a: 6ada ldr r2, [r3, #44] @ 0x2c
  41387. 801143c: 4613 mov r3, r2
  41388. 801143e: 009b lsls r3, r3, #2
  41389. 8011440: 4413 add r3, r2
  41390. 8011442: 009b lsls r3, r3, #2
  41391. 8011444: 4a15 ldr r2, [pc, #84] @ (801149c <prvAddNewTaskToReadyList+0xd8>)
  41392. 8011446: 441a add r2, r3
  41393. 8011448: 687b ldr r3, [r7, #4]
  41394. 801144a: 3304 adds r3, #4
  41395. 801144c: 4619 mov r1, r3
  41396. 801144e: 4610 mov r0, r2
  41397. 8011450: f7fe fc8d bl 800fd6e <vListInsertEnd>
  41398. portSETUP_TCB( pxNewTCB );
  41399. }
  41400. taskEXIT_CRITICAL();
  41401. 8011454: f001 fdd2 bl 8012ffc <vPortExitCritical>
  41402. if( xSchedulerRunning != pdFALSE )
  41403. 8011458: 4b0d ldr r3, [pc, #52] @ (8011490 <prvAddNewTaskToReadyList+0xcc>)
  41404. 801145a: 681b ldr r3, [r3, #0]
  41405. 801145c: 2b00 cmp r3, #0
  41406. 801145e: d00e beq.n 801147e <prvAddNewTaskToReadyList+0xba>
  41407. {
  41408. /* If the created task is of a higher priority than the current task
  41409. then it should run now. */
  41410. if( pxCurrentTCB->uxPriority < pxNewTCB->uxPriority )
  41411. 8011460: 4b0a ldr r3, [pc, #40] @ (801148c <prvAddNewTaskToReadyList+0xc8>)
  41412. 8011462: 681b ldr r3, [r3, #0]
  41413. 8011464: 6ada ldr r2, [r3, #44] @ 0x2c
  41414. 8011466: 687b ldr r3, [r7, #4]
  41415. 8011468: 6adb ldr r3, [r3, #44] @ 0x2c
  41416. 801146a: 429a cmp r2, r3
  41417. 801146c: d207 bcs.n 801147e <prvAddNewTaskToReadyList+0xba>
  41418. {
  41419. taskYIELD_IF_USING_PREEMPTION();
  41420. 801146e: 4b0c ldr r3, [pc, #48] @ (80114a0 <prvAddNewTaskToReadyList+0xdc>)
  41421. 8011470: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  41422. 8011474: 601a str r2, [r3, #0]
  41423. 8011476: f3bf 8f4f dsb sy
  41424. 801147a: f3bf 8f6f isb sy
  41425. }
  41426. else
  41427. {
  41428. mtCOVERAGE_TEST_MARKER();
  41429. }
  41430. }
  41431. 801147e: bf00 nop
  41432. 8011480: 3708 adds r7, #8
  41433. 8011482: 46bd mov sp, r7
  41434. 8011484: bd80 pop {r7, pc}
  41435. 8011486: bf00 nop
  41436. 8011488: 240028c8 .word 0x240028c8
  41437. 801148c: 240023f4 .word 0x240023f4
  41438. 8011490: 240028d4 .word 0x240028d4
  41439. 8011494: 240028e4 .word 0x240028e4
  41440. 8011498: 240028d0 .word 0x240028d0
  41441. 801149c: 240023f8 .word 0x240023f8
  41442. 80114a0: e000ed04 .word 0xe000ed04
  41443. 080114a4 <vTaskDelay>:
  41444. /*-----------------------------------------------------------*/
  41445. #if ( INCLUDE_vTaskDelay == 1 )
  41446. void vTaskDelay( const TickType_t xTicksToDelay )
  41447. {
  41448. 80114a4: b580 push {r7, lr}
  41449. 80114a6: b084 sub sp, #16
  41450. 80114a8: af00 add r7, sp, #0
  41451. 80114aa: 6078 str r0, [r7, #4]
  41452. BaseType_t xAlreadyYielded = pdFALSE;
  41453. 80114ac: 2300 movs r3, #0
  41454. 80114ae: 60fb str r3, [r7, #12]
  41455. /* A delay time of zero just forces a reschedule. */
  41456. if( xTicksToDelay > ( TickType_t ) 0U )
  41457. 80114b0: 687b ldr r3, [r7, #4]
  41458. 80114b2: 2b00 cmp r3, #0
  41459. 80114b4: d018 beq.n 80114e8 <vTaskDelay+0x44>
  41460. {
  41461. configASSERT( uxSchedulerSuspended == 0 );
  41462. 80114b6: 4b14 ldr r3, [pc, #80] @ (8011508 <vTaskDelay+0x64>)
  41463. 80114b8: 681b ldr r3, [r3, #0]
  41464. 80114ba: 2b00 cmp r3, #0
  41465. 80114bc: d00b beq.n 80114d6 <vTaskDelay+0x32>
  41466. __asm volatile
  41467. 80114be: f04f 0350 mov.w r3, #80 @ 0x50
  41468. 80114c2: f383 8811 msr BASEPRI, r3
  41469. 80114c6: f3bf 8f6f isb sy
  41470. 80114ca: f3bf 8f4f dsb sy
  41471. 80114ce: 60bb str r3, [r7, #8]
  41472. }
  41473. 80114d0: bf00 nop
  41474. 80114d2: bf00 nop
  41475. 80114d4: e7fd b.n 80114d2 <vTaskDelay+0x2e>
  41476. vTaskSuspendAll();
  41477. 80114d6: f000 f88b bl 80115f0 <vTaskSuspendAll>
  41478. list or removed from the blocked list until the scheduler
  41479. is resumed.
  41480. This task cannot be in an event list as it is the currently
  41481. executing task. */
  41482. prvAddCurrentTaskToDelayedList( xTicksToDelay, pdFALSE );
  41483. 80114da: 2100 movs r1, #0
  41484. 80114dc: 6878 ldr r0, [r7, #4]
  41485. 80114de: f001 f87d bl 80125dc <prvAddCurrentTaskToDelayedList>
  41486. }
  41487. xAlreadyYielded = xTaskResumeAll();
  41488. 80114e2: f000 f893 bl 801160c <xTaskResumeAll>
  41489. 80114e6: 60f8 str r0, [r7, #12]
  41490. mtCOVERAGE_TEST_MARKER();
  41491. }
  41492. /* Force a reschedule if xTaskResumeAll has not already done so, we may
  41493. have put ourselves to sleep. */
  41494. if( xAlreadyYielded == pdFALSE )
  41495. 80114e8: 68fb ldr r3, [r7, #12]
  41496. 80114ea: 2b00 cmp r3, #0
  41497. 80114ec: d107 bne.n 80114fe <vTaskDelay+0x5a>
  41498. {
  41499. portYIELD_WITHIN_API();
  41500. 80114ee: 4b07 ldr r3, [pc, #28] @ (801150c <vTaskDelay+0x68>)
  41501. 80114f0: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  41502. 80114f4: 601a str r2, [r3, #0]
  41503. 80114f6: f3bf 8f4f dsb sy
  41504. 80114fa: f3bf 8f6f isb sy
  41505. }
  41506. else
  41507. {
  41508. mtCOVERAGE_TEST_MARKER();
  41509. }
  41510. }
  41511. 80114fe: bf00 nop
  41512. 8011500: 3710 adds r7, #16
  41513. 8011502: 46bd mov sp, r7
  41514. 8011504: bd80 pop {r7, pc}
  41515. 8011506: bf00 nop
  41516. 8011508: 240028f0 .word 0x240028f0
  41517. 801150c: e000ed04 .word 0xe000ed04
  41518. 08011510 <vTaskStartScheduler>:
  41519. #endif /* ( ( INCLUDE_xTaskResumeFromISR == 1 ) && ( INCLUDE_vTaskSuspend == 1 ) ) */
  41520. /*-----------------------------------------------------------*/
  41521. void vTaskStartScheduler( void )
  41522. {
  41523. 8011510: b580 push {r7, lr}
  41524. 8011512: b08a sub sp, #40 @ 0x28
  41525. 8011514: af04 add r7, sp, #16
  41526. BaseType_t xReturn;
  41527. /* Add the idle task at the lowest priority. */
  41528. #if( configSUPPORT_STATIC_ALLOCATION == 1 )
  41529. {
  41530. StaticTask_t *pxIdleTaskTCBBuffer = NULL;
  41531. 8011516: 2300 movs r3, #0
  41532. 8011518: 60bb str r3, [r7, #8]
  41533. StackType_t *pxIdleTaskStackBuffer = NULL;
  41534. 801151a: 2300 movs r3, #0
  41535. 801151c: 607b str r3, [r7, #4]
  41536. uint32_t ulIdleTaskStackSize;
  41537. /* The Idle task is created using user provided RAM - obtain the
  41538. address of the RAM then create the idle task. */
  41539. vApplicationGetIdleTaskMemory( &pxIdleTaskTCBBuffer, &pxIdleTaskStackBuffer, &ulIdleTaskStackSize );
  41540. 801151e: 463a mov r2, r7
  41541. 8011520: 1d39 adds r1, r7, #4
  41542. 8011522: f107 0308 add.w r3, r7, #8
  41543. 8011526: 4618 mov r0, r3
  41544. 8011528: f7fe fbc0 bl 800fcac <vApplicationGetIdleTaskMemory>
  41545. xIdleTaskHandle = xTaskCreateStatic( prvIdleTask,
  41546. 801152c: 6839 ldr r1, [r7, #0]
  41547. 801152e: 687b ldr r3, [r7, #4]
  41548. 8011530: 68ba ldr r2, [r7, #8]
  41549. 8011532: 9202 str r2, [sp, #8]
  41550. 8011534: 9301 str r3, [sp, #4]
  41551. 8011536: 2300 movs r3, #0
  41552. 8011538: 9300 str r3, [sp, #0]
  41553. 801153a: 2300 movs r3, #0
  41554. 801153c: 460a mov r2, r1
  41555. 801153e: 4924 ldr r1, [pc, #144] @ (80115d0 <vTaskStartScheduler+0xc0>)
  41556. 8011540: 4824 ldr r0, [pc, #144] @ (80115d4 <vTaskStartScheduler+0xc4>)
  41557. 8011542: f7ff fdf2 bl 801112a <xTaskCreateStatic>
  41558. 8011546: 4603 mov r3, r0
  41559. 8011548: 4a23 ldr r2, [pc, #140] @ (80115d8 <vTaskStartScheduler+0xc8>)
  41560. 801154a: 6013 str r3, [r2, #0]
  41561. ( void * ) NULL, /*lint !e961. The cast is not redundant for all compilers. */
  41562. portPRIVILEGE_BIT, /* In effect ( tskIDLE_PRIORITY | portPRIVILEGE_BIT ), but tskIDLE_PRIORITY is zero. */
  41563. pxIdleTaskStackBuffer,
  41564. pxIdleTaskTCBBuffer ); /*lint !e961 MISRA exception, justified as it is not a redundant explicit cast to all supported compilers. */
  41565. if( xIdleTaskHandle != NULL )
  41566. 801154c: 4b22 ldr r3, [pc, #136] @ (80115d8 <vTaskStartScheduler+0xc8>)
  41567. 801154e: 681b ldr r3, [r3, #0]
  41568. 8011550: 2b00 cmp r3, #0
  41569. 8011552: d002 beq.n 801155a <vTaskStartScheduler+0x4a>
  41570. {
  41571. xReturn = pdPASS;
  41572. 8011554: 2301 movs r3, #1
  41573. 8011556: 617b str r3, [r7, #20]
  41574. 8011558: e001 b.n 801155e <vTaskStartScheduler+0x4e>
  41575. }
  41576. else
  41577. {
  41578. xReturn = pdFAIL;
  41579. 801155a: 2300 movs r3, #0
  41580. 801155c: 617b str r3, [r7, #20]
  41581. }
  41582. #endif /* configSUPPORT_STATIC_ALLOCATION */
  41583. #if ( configUSE_TIMERS == 1 )
  41584. {
  41585. if( xReturn == pdPASS )
  41586. 801155e: 697b ldr r3, [r7, #20]
  41587. 8011560: 2b01 cmp r3, #1
  41588. 8011562: d102 bne.n 801156a <vTaskStartScheduler+0x5a>
  41589. {
  41590. xReturn = xTimerCreateTimerTask();
  41591. 8011564: f001 f88e bl 8012684 <xTimerCreateTimerTask>
  41592. 8011568: 6178 str r0, [r7, #20]
  41593. mtCOVERAGE_TEST_MARKER();
  41594. }
  41595. }
  41596. #endif /* configUSE_TIMERS */
  41597. if( xReturn == pdPASS )
  41598. 801156a: 697b ldr r3, [r7, #20]
  41599. 801156c: 2b01 cmp r3, #1
  41600. 801156e: d11b bne.n 80115a8 <vTaskStartScheduler+0x98>
  41601. __asm volatile
  41602. 8011570: f04f 0350 mov.w r3, #80 @ 0x50
  41603. 8011574: f383 8811 msr BASEPRI, r3
  41604. 8011578: f3bf 8f6f isb sy
  41605. 801157c: f3bf 8f4f dsb sy
  41606. 8011580: 613b str r3, [r7, #16]
  41607. }
  41608. 8011582: bf00 nop
  41609. {
  41610. /* Switch Newlib's _impure_ptr variable to point to the _reent
  41611. structure specific to the task that will run first.
  41612. See the third party link http://www.nadler.com/embedded/newlibAndFreeRTOS.html
  41613. for additional information. */
  41614. _impure_ptr = &( pxCurrentTCB->xNewLib_reent );
  41615. 8011584: 4b15 ldr r3, [pc, #84] @ (80115dc <vTaskStartScheduler+0xcc>)
  41616. 8011586: 681b ldr r3, [r3, #0]
  41617. 8011588: 3354 adds r3, #84 @ 0x54
  41618. 801158a: 4a15 ldr r2, [pc, #84] @ (80115e0 <vTaskStartScheduler+0xd0>)
  41619. 801158c: 6013 str r3, [r2, #0]
  41620. }
  41621. #endif /* configUSE_NEWLIB_REENTRANT */
  41622. xNextTaskUnblockTime = portMAX_DELAY;
  41623. 801158e: 4b15 ldr r3, [pc, #84] @ (80115e4 <vTaskStartScheduler+0xd4>)
  41624. 8011590: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
  41625. 8011594: 601a str r2, [r3, #0]
  41626. xSchedulerRunning = pdTRUE;
  41627. 8011596: 4b14 ldr r3, [pc, #80] @ (80115e8 <vTaskStartScheduler+0xd8>)
  41628. 8011598: 2201 movs r2, #1
  41629. 801159a: 601a str r2, [r3, #0]
  41630. xTickCount = ( TickType_t ) configINITIAL_TICK_COUNT;
  41631. 801159c: 4b13 ldr r3, [pc, #76] @ (80115ec <vTaskStartScheduler+0xdc>)
  41632. 801159e: 2200 movs r2, #0
  41633. 80115a0: 601a str r2, [r3, #0]
  41634. traceTASK_SWITCHED_IN();
  41635. /* Setting up the timer tick is hardware specific and thus in the
  41636. portable interface. */
  41637. if( xPortStartScheduler() != pdFALSE )
  41638. 80115a2: f001 fc55 bl 8012e50 <xPortStartScheduler>
  41639. }
  41640. /* Prevent compiler warnings if INCLUDE_xTaskGetIdleTaskHandle is set to 0,
  41641. meaning xIdleTaskHandle is not used anywhere else. */
  41642. ( void ) xIdleTaskHandle;
  41643. }
  41644. 80115a6: e00f b.n 80115c8 <vTaskStartScheduler+0xb8>
  41645. configASSERT( xReturn != errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY );
  41646. 80115a8: 697b ldr r3, [r7, #20]
  41647. 80115aa: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  41648. 80115ae: d10b bne.n 80115c8 <vTaskStartScheduler+0xb8>
  41649. __asm volatile
  41650. 80115b0: f04f 0350 mov.w r3, #80 @ 0x50
  41651. 80115b4: f383 8811 msr BASEPRI, r3
  41652. 80115b8: f3bf 8f6f isb sy
  41653. 80115bc: f3bf 8f4f dsb sy
  41654. 80115c0: 60fb str r3, [r7, #12]
  41655. }
  41656. 80115c2: bf00 nop
  41657. 80115c4: bf00 nop
  41658. 80115c6: e7fd b.n 80115c4 <vTaskStartScheduler+0xb4>
  41659. }
  41660. 80115c8: bf00 nop
  41661. 80115ca: 3718 adds r7, #24
  41662. 80115cc: 46bd mov sp, r7
  41663. 80115ce: bd80 pop {r7, pc}
  41664. 80115d0: 080145a8 .word 0x080145a8
  41665. 80115d4: 08011c8d .word 0x08011c8d
  41666. 80115d8: 240028ec .word 0x240028ec
  41667. 80115dc: 240023f4 .word 0x240023f4
  41668. 80115e0: 24000054 .word 0x24000054
  41669. 80115e4: 240028e8 .word 0x240028e8
  41670. 80115e8: 240028d4 .word 0x240028d4
  41671. 80115ec: 240028cc .word 0x240028cc
  41672. 080115f0 <vTaskSuspendAll>:
  41673. vPortEndScheduler();
  41674. }
  41675. /*----------------------------------------------------------*/
  41676. void vTaskSuspendAll( void )
  41677. {
  41678. 80115f0: b480 push {r7}
  41679. 80115f2: af00 add r7, sp, #0
  41680. do not otherwise exhibit real time behaviour. */
  41681. portSOFTWARE_BARRIER();
  41682. /* The scheduler is suspended if uxSchedulerSuspended is non-zero. An increment
  41683. is used to allow calls to vTaskSuspendAll() to nest. */
  41684. ++uxSchedulerSuspended;
  41685. 80115f4: 4b04 ldr r3, [pc, #16] @ (8011608 <vTaskSuspendAll+0x18>)
  41686. 80115f6: 681b ldr r3, [r3, #0]
  41687. 80115f8: 3301 adds r3, #1
  41688. 80115fa: 4a03 ldr r2, [pc, #12] @ (8011608 <vTaskSuspendAll+0x18>)
  41689. 80115fc: 6013 str r3, [r2, #0]
  41690. /* Enforces ordering for ports and optimised compilers that may otherwise place
  41691. the above increment elsewhere. */
  41692. portMEMORY_BARRIER();
  41693. }
  41694. 80115fe: bf00 nop
  41695. 8011600: 46bd mov sp, r7
  41696. 8011602: f85d 7b04 ldr.w r7, [sp], #4
  41697. 8011606: 4770 bx lr
  41698. 8011608: 240028f0 .word 0x240028f0
  41699. 0801160c <xTaskResumeAll>:
  41700. #endif /* configUSE_TICKLESS_IDLE */
  41701. /*----------------------------------------------------------*/
  41702. BaseType_t xTaskResumeAll( void )
  41703. {
  41704. 801160c: b580 push {r7, lr}
  41705. 801160e: b084 sub sp, #16
  41706. 8011610: af00 add r7, sp, #0
  41707. TCB_t *pxTCB = NULL;
  41708. 8011612: 2300 movs r3, #0
  41709. 8011614: 60fb str r3, [r7, #12]
  41710. BaseType_t xAlreadyYielded = pdFALSE;
  41711. 8011616: 2300 movs r3, #0
  41712. 8011618: 60bb str r3, [r7, #8]
  41713. /* If uxSchedulerSuspended is zero then this function does not match a
  41714. previous call to vTaskSuspendAll(). */
  41715. configASSERT( uxSchedulerSuspended );
  41716. 801161a: 4b42 ldr r3, [pc, #264] @ (8011724 <xTaskResumeAll+0x118>)
  41717. 801161c: 681b ldr r3, [r3, #0]
  41718. 801161e: 2b00 cmp r3, #0
  41719. 8011620: d10b bne.n 801163a <xTaskResumeAll+0x2e>
  41720. __asm volatile
  41721. 8011622: f04f 0350 mov.w r3, #80 @ 0x50
  41722. 8011626: f383 8811 msr BASEPRI, r3
  41723. 801162a: f3bf 8f6f isb sy
  41724. 801162e: f3bf 8f4f dsb sy
  41725. 8011632: 603b str r3, [r7, #0]
  41726. }
  41727. 8011634: bf00 nop
  41728. 8011636: bf00 nop
  41729. 8011638: e7fd b.n 8011636 <xTaskResumeAll+0x2a>
  41730. /* It is possible that an ISR caused a task to be removed from an event
  41731. list while the scheduler was suspended. If this was the case then the
  41732. removed task will have been added to the xPendingReadyList. Once the
  41733. scheduler has been resumed it is safe to move all the pending ready
  41734. tasks from this list into their appropriate ready list. */
  41735. taskENTER_CRITICAL();
  41736. 801163a: f001 fcad bl 8012f98 <vPortEnterCritical>
  41737. {
  41738. --uxSchedulerSuspended;
  41739. 801163e: 4b39 ldr r3, [pc, #228] @ (8011724 <xTaskResumeAll+0x118>)
  41740. 8011640: 681b ldr r3, [r3, #0]
  41741. 8011642: 3b01 subs r3, #1
  41742. 8011644: 4a37 ldr r2, [pc, #220] @ (8011724 <xTaskResumeAll+0x118>)
  41743. 8011646: 6013 str r3, [r2, #0]
  41744. if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE )
  41745. 8011648: 4b36 ldr r3, [pc, #216] @ (8011724 <xTaskResumeAll+0x118>)
  41746. 801164a: 681b ldr r3, [r3, #0]
  41747. 801164c: 2b00 cmp r3, #0
  41748. 801164e: d162 bne.n 8011716 <xTaskResumeAll+0x10a>
  41749. {
  41750. if( uxCurrentNumberOfTasks > ( UBaseType_t ) 0U )
  41751. 8011650: 4b35 ldr r3, [pc, #212] @ (8011728 <xTaskResumeAll+0x11c>)
  41752. 8011652: 681b ldr r3, [r3, #0]
  41753. 8011654: 2b00 cmp r3, #0
  41754. 8011656: d05e beq.n 8011716 <xTaskResumeAll+0x10a>
  41755. {
  41756. /* Move any readied tasks from the pending list into the
  41757. appropriate ready list. */
  41758. while( listLIST_IS_EMPTY( &xPendingReadyList ) == pdFALSE )
  41759. 8011658: e02f b.n 80116ba <xTaskResumeAll+0xae>
  41760. {
  41761. 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. */
  41762. 801165a: 4b34 ldr r3, [pc, #208] @ (801172c <xTaskResumeAll+0x120>)
  41763. 801165c: 68db ldr r3, [r3, #12]
  41764. 801165e: 68db ldr r3, [r3, #12]
  41765. 8011660: 60fb str r3, [r7, #12]
  41766. ( void ) uxListRemove( &( pxTCB->xEventListItem ) );
  41767. 8011662: 68fb ldr r3, [r7, #12]
  41768. 8011664: 3318 adds r3, #24
  41769. 8011666: 4618 mov r0, r3
  41770. 8011668: f7fe fbde bl 800fe28 <uxListRemove>
  41771. ( void ) uxListRemove( &( pxTCB->xStateListItem ) );
  41772. 801166c: 68fb ldr r3, [r7, #12]
  41773. 801166e: 3304 adds r3, #4
  41774. 8011670: 4618 mov r0, r3
  41775. 8011672: f7fe fbd9 bl 800fe28 <uxListRemove>
  41776. prvAddTaskToReadyList( pxTCB );
  41777. 8011676: 68fb ldr r3, [r7, #12]
  41778. 8011678: 6ada ldr r2, [r3, #44] @ 0x2c
  41779. 801167a: 4b2d ldr r3, [pc, #180] @ (8011730 <xTaskResumeAll+0x124>)
  41780. 801167c: 681b ldr r3, [r3, #0]
  41781. 801167e: 429a cmp r2, r3
  41782. 8011680: d903 bls.n 801168a <xTaskResumeAll+0x7e>
  41783. 8011682: 68fb ldr r3, [r7, #12]
  41784. 8011684: 6adb ldr r3, [r3, #44] @ 0x2c
  41785. 8011686: 4a2a ldr r2, [pc, #168] @ (8011730 <xTaskResumeAll+0x124>)
  41786. 8011688: 6013 str r3, [r2, #0]
  41787. 801168a: 68fb ldr r3, [r7, #12]
  41788. 801168c: 6ada ldr r2, [r3, #44] @ 0x2c
  41789. 801168e: 4613 mov r3, r2
  41790. 8011690: 009b lsls r3, r3, #2
  41791. 8011692: 4413 add r3, r2
  41792. 8011694: 009b lsls r3, r3, #2
  41793. 8011696: 4a27 ldr r2, [pc, #156] @ (8011734 <xTaskResumeAll+0x128>)
  41794. 8011698: 441a add r2, r3
  41795. 801169a: 68fb ldr r3, [r7, #12]
  41796. 801169c: 3304 adds r3, #4
  41797. 801169e: 4619 mov r1, r3
  41798. 80116a0: 4610 mov r0, r2
  41799. 80116a2: f7fe fb64 bl 800fd6e <vListInsertEnd>
  41800. /* If the moved task has a priority higher than the current
  41801. task then a yield must be performed. */
  41802. if( pxTCB->uxPriority >= pxCurrentTCB->uxPriority )
  41803. 80116a6: 68fb ldr r3, [r7, #12]
  41804. 80116a8: 6ada ldr r2, [r3, #44] @ 0x2c
  41805. 80116aa: 4b23 ldr r3, [pc, #140] @ (8011738 <xTaskResumeAll+0x12c>)
  41806. 80116ac: 681b ldr r3, [r3, #0]
  41807. 80116ae: 6adb ldr r3, [r3, #44] @ 0x2c
  41808. 80116b0: 429a cmp r2, r3
  41809. 80116b2: d302 bcc.n 80116ba <xTaskResumeAll+0xae>
  41810. {
  41811. xYieldPending = pdTRUE;
  41812. 80116b4: 4b21 ldr r3, [pc, #132] @ (801173c <xTaskResumeAll+0x130>)
  41813. 80116b6: 2201 movs r2, #1
  41814. 80116b8: 601a str r2, [r3, #0]
  41815. while( listLIST_IS_EMPTY( &xPendingReadyList ) == pdFALSE )
  41816. 80116ba: 4b1c ldr r3, [pc, #112] @ (801172c <xTaskResumeAll+0x120>)
  41817. 80116bc: 681b ldr r3, [r3, #0]
  41818. 80116be: 2b00 cmp r3, #0
  41819. 80116c0: d1cb bne.n 801165a <xTaskResumeAll+0x4e>
  41820. {
  41821. mtCOVERAGE_TEST_MARKER();
  41822. }
  41823. }
  41824. if( pxTCB != NULL )
  41825. 80116c2: 68fb ldr r3, [r7, #12]
  41826. 80116c4: 2b00 cmp r3, #0
  41827. 80116c6: d001 beq.n 80116cc <xTaskResumeAll+0xc0>
  41828. which may have prevented the next unblock time from being
  41829. re-calculated, in which case re-calculate it now. Mainly
  41830. important for low power tickless implementations, where
  41831. this can prevent an unnecessary exit from low power
  41832. state. */
  41833. prvResetNextTaskUnblockTime();
  41834. 80116c8: f000 fb9c bl 8011e04 <prvResetNextTaskUnblockTime>
  41835. /* If any ticks occurred while the scheduler was suspended then
  41836. they should be processed now. This ensures the tick count does
  41837. not slip, and that any delayed tasks are resumed at the correct
  41838. time. */
  41839. {
  41840. TickType_t xPendedCounts = xPendedTicks; /* Non-volatile copy. */
  41841. 80116cc: 4b1c ldr r3, [pc, #112] @ (8011740 <xTaskResumeAll+0x134>)
  41842. 80116ce: 681b ldr r3, [r3, #0]
  41843. 80116d0: 607b str r3, [r7, #4]
  41844. if( xPendedCounts > ( TickType_t ) 0U )
  41845. 80116d2: 687b ldr r3, [r7, #4]
  41846. 80116d4: 2b00 cmp r3, #0
  41847. 80116d6: d010 beq.n 80116fa <xTaskResumeAll+0xee>
  41848. {
  41849. do
  41850. {
  41851. if( xTaskIncrementTick() != pdFALSE )
  41852. 80116d8: f000 f846 bl 8011768 <xTaskIncrementTick>
  41853. 80116dc: 4603 mov r3, r0
  41854. 80116de: 2b00 cmp r3, #0
  41855. 80116e0: d002 beq.n 80116e8 <xTaskResumeAll+0xdc>
  41856. {
  41857. xYieldPending = pdTRUE;
  41858. 80116e2: 4b16 ldr r3, [pc, #88] @ (801173c <xTaskResumeAll+0x130>)
  41859. 80116e4: 2201 movs r2, #1
  41860. 80116e6: 601a str r2, [r3, #0]
  41861. }
  41862. else
  41863. {
  41864. mtCOVERAGE_TEST_MARKER();
  41865. }
  41866. --xPendedCounts;
  41867. 80116e8: 687b ldr r3, [r7, #4]
  41868. 80116ea: 3b01 subs r3, #1
  41869. 80116ec: 607b str r3, [r7, #4]
  41870. } while( xPendedCounts > ( TickType_t ) 0U );
  41871. 80116ee: 687b ldr r3, [r7, #4]
  41872. 80116f0: 2b00 cmp r3, #0
  41873. 80116f2: d1f1 bne.n 80116d8 <xTaskResumeAll+0xcc>
  41874. xPendedTicks = 0;
  41875. 80116f4: 4b12 ldr r3, [pc, #72] @ (8011740 <xTaskResumeAll+0x134>)
  41876. 80116f6: 2200 movs r2, #0
  41877. 80116f8: 601a str r2, [r3, #0]
  41878. {
  41879. mtCOVERAGE_TEST_MARKER();
  41880. }
  41881. }
  41882. if( xYieldPending != pdFALSE )
  41883. 80116fa: 4b10 ldr r3, [pc, #64] @ (801173c <xTaskResumeAll+0x130>)
  41884. 80116fc: 681b ldr r3, [r3, #0]
  41885. 80116fe: 2b00 cmp r3, #0
  41886. 8011700: d009 beq.n 8011716 <xTaskResumeAll+0x10a>
  41887. {
  41888. #if( configUSE_PREEMPTION != 0 )
  41889. {
  41890. xAlreadyYielded = pdTRUE;
  41891. 8011702: 2301 movs r3, #1
  41892. 8011704: 60bb str r3, [r7, #8]
  41893. }
  41894. #endif
  41895. taskYIELD_IF_USING_PREEMPTION();
  41896. 8011706: 4b0f ldr r3, [pc, #60] @ (8011744 <xTaskResumeAll+0x138>)
  41897. 8011708: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  41898. 801170c: 601a str r2, [r3, #0]
  41899. 801170e: f3bf 8f4f dsb sy
  41900. 8011712: f3bf 8f6f isb sy
  41901. else
  41902. {
  41903. mtCOVERAGE_TEST_MARKER();
  41904. }
  41905. }
  41906. taskEXIT_CRITICAL();
  41907. 8011716: f001 fc71 bl 8012ffc <vPortExitCritical>
  41908. return xAlreadyYielded;
  41909. 801171a: 68bb ldr r3, [r7, #8]
  41910. }
  41911. 801171c: 4618 mov r0, r3
  41912. 801171e: 3710 adds r7, #16
  41913. 8011720: 46bd mov sp, r7
  41914. 8011722: bd80 pop {r7, pc}
  41915. 8011724: 240028f0 .word 0x240028f0
  41916. 8011728: 240028c8 .word 0x240028c8
  41917. 801172c: 24002888 .word 0x24002888
  41918. 8011730: 240028d0 .word 0x240028d0
  41919. 8011734: 240023f8 .word 0x240023f8
  41920. 8011738: 240023f4 .word 0x240023f4
  41921. 801173c: 240028dc .word 0x240028dc
  41922. 8011740: 240028d8 .word 0x240028d8
  41923. 8011744: e000ed04 .word 0xe000ed04
  41924. 08011748 <xTaskGetTickCount>:
  41925. /*-----------------------------------------------------------*/
  41926. TickType_t xTaskGetTickCount( void )
  41927. {
  41928. 8011748: b480 push {r7}
  41929. 801174a: b083 sub sp, #12
  41930. 801174c: af00 add r7, sp, #0
  41931. TickType_t xTicks;
  41932. /* Critical section required if running on a 16 bit processor. */
  41933. portTICK_TYPE_ENTER_CRITICAL();
  41934. {
  41935. xTicks = xTickCount;
  41936. 801174e: 4b05 ldr r3, [pc, #20] @ (8011764 <xTaskGetTickCount+0x1c>)
  41937. 8011750: 681b ldr r3, [r3, #0]
  41938. 8011752: 607b str r3, [r7, #4]
  41939. }
  41940. portTICK_TYPE_EXIT_CRITICAL();
  41941. return xTicks;
  41942. 8011754: 687b ldr r3, [r7, #4]
  41943. }
  41944. 8011756: 4618 mov r0, r3
  41945. 8011758: 370c adds r7, #12
  41946. 801175a: 46bd mov sp, r7
  41947. 801175c: f85d 7b04 ldr.w r7, [sp], #4
  41948. 8011760: 4770 bx lr
  41949. 8011762: bf00 nop
  41950. 8011764: 240028cc .word 0x240028cc
  41951. 08011768 <xTaskIncrementTick>:
  41952. #endif /* INCLUDE_xTaskAbortDelay */
  41953. /*----------------------------------------------------------*/
  41954. BaseType_t xTaskIncrementTick( void )
  41955. {
  41956. 8011768: b580 push {r7, lr}
  41957. 801176a: b086 sub sp, #24
  41958. 801176c: af00 add r7, sp, #0
  41959. TCB_t * pxTCB;
  41960. TickType_t xItemValue;
  41961. BaseType_t xSwitchRequired = pdFALSE;
  41962. 801176e: 2300 movs r3, #0
  41963. 8011770: 617b str r3, [r7, #20]
  41964. /* Called by the portable layer each time a tick interrupt occurs.
  41965. Increments the tick then checks to see if the new tick value will cause any
  41966. tasks to be unblocked. */
  41967. traceTASK_INCREMENT_TICK( xTickCount );
  41968. if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE )
  41969. 8011772: 4b4f ldr r3, [pc, #316] @ (80118b0 <xTaskIncrementTick+0x148>)
  41970. 8011774: 681b ldr r3, [r3, #0]
  41971. 8011776: 2b00 cmp r3, #0
  41972. 8011778: f040 8090 bne.w 801189c <xTaskIncrementTick+0x134>
  41973. {
  41974. /* Minor optimisation. The tick count cannot change in this
  41975. block. */
  41976. const TickType_t xConstTickCount = xTickCount + ( TickType_t ) 1;
  41977. 801177c: 4b4d ldr r3, [pc, #308] @ (80118b4 <xTaskIncrementTick+0x14c>)
  41978. 801177e: 681b ldr r3, [r3, #0]
  41979. 8011780: 3301 adds r3, #1
  41980. 8011782: 613b str r3, [r7, #16]
  41981. /* Increment the RTOS tick, switching the delayed and overflowed
  41982. delayed lists if it wraps to 0. */
  41983. xTickCount = xConstTickCount;
  41984. 8011784: 4a4b ldr r2, [pc, #300] @ (80118b4 <xTaskIncrementTick+0x14c>)
  41985. 8011786: 693b ldr r3, [r7, #16]
  41986. 8011788: 6013 str r3, [r2, #0]
  41987. if( xConstTickCount == ( TickType_t ) 0U ) /*lint !e774 'if' does not always evaluate to false as it is looking for an overflow. */
  41988. 801178a: 693b ldr r3, [r7, #16]
  41989. 801178c: 2b00 cmp r3, #0
  41990. 801178e: d121 bne.n 80117d4 <xTaskIncrementTick+0x6c>
  41991. {
  41992. taskSWITCH_DELAYED_LISTS();
  41993. 8011790: 4b49 ldr r3, [pc, #292] @ (80118b8 <xTaskIncrementTick+0x150>)
  41994. 8011792: 681b ldr r3, [r3, #0]
  41995. 8011794: 681b ldr r3, [r3, #0]
  41996. 8011796: 2b00 cmp r3, #0
  41997. 8011798: d00b beq.n 80117b2 <xTaskIncrementTick+0x4a>
  41998. __asm volatile
  41999. 801179a: f04f 0350 mov.w r3, #80 @ 0x50
  42000. 801179e: f383 8811 msr BASEPRI, r3
  42001. 80117a2: f3bf 8f6f isb sy
  42002. 80117a6: f3bf 8f4f dsb sy
  42003. 80117aa: 603b str r3, [r7, #0]
  42004. }
  42005. 80117ac: bf00 nop
  42006. 80117ae: bf00 nop
  42007. 80117b0: e7fd b.n 80117ae <xTaskIncrementTick+0x46>
  42008. 80117b2: 4b41 ldr r3, [pc, #260] @ (80118b8 <xTaskIncrementTick+0x150>)
  42009. 80117b4: 681b ldr r3, [r3, #0]
  42010. 80117b6: 60fb str r3, [r7, #12]
  42011. 80117b8: 4b40 ldr r3, [pc, #256] @ (80118bc <xTaskIncrementTick+0x154>)
  42012. 80117ba: 681b ldr r3, [r3, #0]
  42013. 80117bc: 4a3e ldr r2, [pc, #248] @ (80118b8 <xTaskIncrementTick+0x150>)
  42014. 80117be: 6013 str r3, [r2, #0]
  42015. 80117c0: 4a3e ldr r2, [pc, #248] @ (80118bc <xTaskIncrementTick+0x154>)
  42016. 80117c2: 68fb ldr r3, [r7, #12]
  42017. 80117c4: 6013 str r3, [r2, #0]
  42018. 80117c6: 4b3e ldr r3, [pc, #248] @ (80118c0 <xTaskIncrementTick+0x158>)
  42019. 80117c8: 681b ldr r3, [r3, #0]
  42020. 80117ca: 3301 adds r3, #1
  42021. 80117cc: 4a3c ldr r2, [pc, #240] @ (80118c0 <xTaskIncrementTick+0x158>)
  42022. 80117ce: 6013 str r3, [r2, #0]
  42023. 80117d0: f000 fb18 bl 8011e04 <prvResetNextTaskUnblockTime>
  42024. /* See if this tick has made a timeout expire. Tasks are stored in
  42025. the queue in the order of their wake time - meaning once one task
  42026. has been found whose block time has not expired there is no need to
  42027. look any further down the list. */
  42028. if( xConstTickCount >= xNextTaskUnblockTime )
  42029. 80117d4: 4b3b ldr r3, [pc, #236] @ (80118c4 <xTaskIncrementTick+0x15c>)
  42030. 80117d6: 681b ldr r3, [r3, #0]
  42031. 80117d8: 693a ldr r2, [r7, #16]
  42032. 80117da: 429a cmp r2, r3
  42033. 80117dc: d349 bcc.n 8011872 <xTaskIncrementTick+0x10a>
  42034. {
  42035. for( ;; )
  42036. {
  42037. if( listLIST_IS_EMPTY( pxDelayedTaskList ) != pdFALSE )
  42038. 80117de: 4b36 ldr r3, [pc, #216] @ (80118b8 <xTaskIncrementTick+0x150>)
  42039. 80117e0: 681b ldr r3, [r3, #0]
  42040. 80117e2: 681b ldr r3, [r3, #0]
  42041. 80117e4: 2b00 cmp r3, #0
  42042. 80117e6: d104 bne.n 80117f2 <xTaskIncrementTick+0x8a>
  42043. /* The delayed list is empty. Set xNextTaskUnblockTime
  42044. to the maximum possible value so it is extremely
  42045. unlikely that the
  42046. if( xTickCount >= xNextTaskUnblockTime ) test will pass
  42047. next time through. */
  42048. xNextTaskUnblockTime = portMAX_DELAY; /*lint !e961 MISRA exception as the casts are only redundant for some ports. */
  42049. 80117e8: 4b36 ldr r3, [pc, #216] @ (80118c4 <xTaskIncrementTick+0x15c>)
  42050. 80117ea: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
  42051. 80117ee: 601a str r2, [r3, #0]
  42052. break;
  42053. 80117f0: e03f b.n 8011872 <xTaskIncrementTick+0x10a>
  42054. {
  42055. /* The delayed list is not empty, get the value of the
  42056. item at the head of the delayed list. This is the time
  42057. at which the task at the head of the delayed list must
  42058. be removed from the Blocked state. */
  42059. 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. */
  42060. 80117f2: 4b31 ldr r3, [pc, #196] @ (80118b8 <xTaskIncrementTick+0x150>)
  42061. 80117f4: 681b ldr r3, [r3, #0]
  42062. 80117f6: 68db ldr r3, [r3, #12]
  42063. 80117f8: 68db ldr r3, [r3, #12]
  42064. 80117fa: 60bb str r3, [r7, #8]
  42065. xItemValue = listGET_LIST_ITEM_VALUE( &( pxTCB->xStateListItem ) );
  42066. 80117fc: 68bb ldr r3, [r7, #8]
  42067. 80117fe: 685b ldr r3, [r3, #4]
  42068. 8011800: 607b str r3, [r7, #4]
  42069. if( xConstTickCount < xItemValue )
  42070. 8011802: 693a ldr r2, [r7, #16]
  42071. 8011804: 687b ldr r3, [r7, #4]
  42072. 8011806: 429a cmp r2, r3
  42073. 8011808: d203 bcs.n 8011812 <xTaskIncrementTick+0xaa>
  42074. /* It is not time to unblock this item yet, but the
  42075. item value is the time at which the task at the head
  42076. of the blocked list must be removed from the Blocked
  42077. state - so record the item value in
  42078. xNextTaskUnblockTime. */
  42079. xNextTaskUnblockTime = xItemValue;
  42080. 801180a: 4a2e ldr r2, [pc, #184] @ (80118c4 <xTaskIncrementTick+0x15c>)
  42081. 801180c: 687b ldr r3, [r7, #4]
  42082. 801180e: 6013 str r3, [r2, #0]
  42083. break; /*lint !e9011 Code structure here is deedmed easier to understand with multiple breaks. */
  42084. 8011810: e02f b.n 8011872 <xTaskIncrementTick+0x10a>
  42085. {
  42086. mtCOVERAGE_TEST_MARKER();
  42087. }
  42088. /* It is time to remove the item from the Blocked state. */
  42089. ( void ) uxListRemove( &( pxTCB->xStateListItem ) );
  42090. 8011812: 68bb ldr r3, [r7, #8]
  42091. 8011814: 3304 adds r3, #4
  42092. 8011816: 4618 mov r0, r3
  42093. 8011818: f7fe fb06 bl 800fe28 <uxListRemove>
  42094. /* Is the task waiting on an event also? If so remove
  42095. it from the event list. */
  42096. if( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) != NULL )
  42097. 801181c: 68bb ldr r3, [r7, #8]
  42098. 801181e: 6a9b ldr r3, [r3, #40] @ 0x28
  42099. 8011820: 2b00 cmp r3, #0
  42100. 8011822: d004 beq.n 801182e <xTaskIncrementTick+0xc6>
  42101. {
  42102. ( void ) uxListRemove( &( pxTCB->xEventListItem ) );
  42103. 8011824: 68bb ldr r3, [r7, #8]
  42104. 8011826: 3318 adds r3, #24
  42105. 8011828: 4618 mov r0, r3
  42106. 801182a: f7fe fafd bl 800fe28 <uxListRemove>
  42107. mtCOVERAGE_TEST_MARKER();
  42108. }
  42109. /* Place the unblocked task into the appropriate ready
  42110. list. */
  42111. prvAddTaskToReadyList( pxTCB );
  42112. 801182e: 68bb ldr r3, [r7, #8]
  42113. 8011830: 6ada ldr r2, [r3, #44] @ 0x2c
  42114. 8011832: 4b25 ldr r3, [pc, #148] @ (80118c8 <xTaskIncrementTick+0x160>)
  42115. 8011834: 681b ldr r3, [r3, #0]
  42116. 8011836: 429a cmp r2, r3
  42117. 8011838: d903 bls.n 8011842 <xTaskIncrementTick+0xda>
  42118. 801183a: 68bb ldr r3, [r7, #8]
  42119. 801183c: 6adb ldr r3, [r3, #44] @ 0x2c
  42120. 801183e: 4a22 ldr r2, [pc, #136] @ (80118c8 <xTaskIncrementTick+0x160>)
  42121. 8011840: 6013 str r3, [r2, #0]
  42122. 8011842: 68bb ldr r3, [r7, #8]
  42123. 8011844: 6ada ldr r2, [r3, #44] @ 0x2c
  42124. 8011846: 4613 mov r3, r2
  42125. 8011848: 009b lsls r3, r3, #2
  42126. 801184a: 4413 add r3, r2
  42127. 801184c: 009b lsls r3, r3, #2
  42128. 801184e: 4a1f ldr r2, [pc, #124] @ (80118cc <xTaskIncrementTick+0x164>)
  42129. 8011850: 441a add r2, r3
  42130. 8011852: 68bb ldr r3, [r7, #8]
  42131. 8011854: 3304 adds r3, #4
  42132. 8011856: 4619 mov r1, r3
  42133. 8011858: 4610 mov r0, r2
  42134. 801185a: f7fe fa88 bl 800fd6e <vListInsertEnd>
  42135. {
  42136. /* Preemption is on, but a context switch should
  42137. only be performed if the unblocked task has a
  42138. priority that is equal to or higher than the
  42139. currently executing task. */
  42140. if( pxTCB->uxPriority >= pxCurrentTCB->uxPriority )
  42141. 801185e: 68bb ldr r3, [r7, #8]
  42142. 8011860: 6ada ldr r2, [r3, #44] @ 0x2c
  42143. 8011862: 4b1b ldr r3, [pc, #108] @ (80118d0 <xTaskIncrementTick+0x168>)
  42144. 8011864: 681b ldr r3, [r3, #0]
  42145. 8011866: 6adb ldr r3, [r3, #44] @ 0x2c
  42146. 8011868: 429a cmp r2, r3
  42147. 801186a: d3b8 bcc.n 80117de <xTaskIncrementTick+0x76>
  42148. {
  42149. xSwitchRequired = pdTRUE;
  42150. 801186c: 2301 movs r3, #1
  42151. 801186e: 617b str r3, [r7, #20]
  42152. if( listLIST_IS_EMPTY( pxDelayedTaskList ) != pdFALSE )
  42153. 8011870: e7b5 b.n 80117de <xTaskIncrementTick+0x76>
  42154. /* Tasks of equal priority to the currently running task will share
  42155. processing time (time slice) if preemption is on, and the application
  42156. writer has not explicitly turned time slicing off. */
  42157. #if ( ( configUSE_PREEMPTION == 1 ) && ( configUSE_TIME_SLICING == 1 ) )
  42158. {
  42159. if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ pxCurrentTCB->uxPriority ] ) ) > ( UBaseType_t ) 1 )
  42160. 8011872: 4b17 ldr r3, [pc, #92] @ (80118d0 <xTaskIncrementTick+0x168>)
  42161. 8011874: 681b ldr r3, [r3, #0]
  42162. 8011876: 6ada ldr r2, [r3, #44] @ 0x2c
  42163. 8011878: 4914 ldr r1, [pc, #80] @ (80118cc <xTaskIncrementTick+0x164>)
  42164. 801187a: 4613 mov r3, r2
  42165. 801187c: 009b lsls r3, r3, #2
  42166. 801187e: 4413 add r3, r2
  42167. 8011880: 009b lsls r3, r3, #2
  42168. 8011882: 440b add r3, r1
  42169. 8011884: 681b ldr r3, [r3, #0]
  42170. 8011886: 2b01 cmp r3, #1
  42171. 8011888: d901 bls.n 801188e <xTaskIncrementTick+0x126>
  42172. {
  42173. xSwitchRequired = pdTRUE;
  42174. 801188a: 2301 movs r3, #1
  42175. 801188c: 617b str r3, [r7, #20]
  42176. }
  42177. #endif /* configUSE_TICK_HOOK */
  42178. #if ( configUSE_PREEMPTION == 1 )
  42179. {
  42180. if( xYieldPending != pdFALSE )
  42181. 801188e: 4b11 ldr r3, [pc, #68] @ (80118d4 <xTaskIncrementTick+0x16c>)
  42182. 8011890: 681b ldr r3, [r3, #0]
  42183. 8011892: 2b00 cmp r3, #0
  42184. 8011894: d007 beq.n 80118a6 <xTaskIncrementTick+0x13e>
  42185. {
  42186. xSwitchRequired = pdTRUE;
  42187. 8011896: 2301 movs r3, #1
  42188. 8011898: 617b str r3, [r7, #20]
  42189. 801189a: e004 b.n 80118a6 <xTaskIncrementTick+0x13e>
  42190. }
  42191. #endif /* configUSE_PREEMPTION */
  42192. }
  42193. else
  42194. {
  42195. ++xPendedTicks;
  42196. 801189c: 4b0e ldr r3, [pc, #56] @ (80118d8 <xTaskIncrementTick+0x170>)
  42197. 801189e: 681b ldr r3, [r3, #0]
  42198. 80118a0: 3301 adds r3, #1
  42199. 80118a2: 4a0d ldr r2, [pc, #52] @ (80118d8 <xTaskIncrementTick+0x170>)
  42200. 80118a4: 6013 str r3, [r2, #0]
  42201. vApplicationTickHook();
  42202. }
  42203. #endif
  42204. }
  42205. return xSwitchRequired;
  42206. 80118a6: 697b ldr r3, [r7, #20]
  42207. }
  42208. 80118a8: 4618 mov r0, r3
  42209. 80118aa: 3718 adds r7, #24
  42210. 80118ac: 46bd mov sp, r7
  42211. 80118ae: bd80 pop {r7, pc}
  42212. 80118b0: 240028f0 .word 0x240028f0
  42213. 80118b4: 240028cc .word 0x240028cc
  42214. 80118b8: 24002880 .word 0x24002880
  42215. 80118bc: 24002884 .word 0x24002884
  42216. 80118c0: 240028e0 .word 0x240028e0
  42217. 80118c4: 240028e8 .word 0x240028e8
  42218. 80118c8: 240028d0 .word 0x240028d0
  42219. 80118cc: 240023f8 .word 0x240023f8
  42220. 80118d0: 240023f4 .word 0x240023f4
  42221. 80118d4: 240028dc .word 0x240028dc
  42222. 80118d8: 240028d8 .word 0x240028d8
  42223. 080118dc <vTaskSwitchContext>:
  42224. #endif /* configUSE_APPLICATION_TASK_TAG */
  42225. /*-----------------------------------------------------------*/
  42226. void vTaskSwitchContext( void )
  42227. {
  42228. 80118dc: b580 push {r7, lr}
  42229. 80118de: b084 sub sp, #16
  42230. 80118e0: af00 add r7, sp, #0
  42231. if( uxSchedulerSuspended != ( UBaseType_t ) pdFALSE )
  42232. 80118e2: 4b32 ldr r3, [pc, #200] @ (80119ac <vTaskSwitchContext+0xd0>)
  42233. 80118e4: 681b ldr r3, [r3, #0]
  42234. 80118e6: 2b00 cmp r3, #0
  42235. 80118e8: d003 beq.n 80118f2 <vTaskSwitchContext+0x16>
  42236. {
  42237. /* The scheduler is currently suspended - do not allow a context
  42238. switch. */
  42239. xYieldPending = pdTRUE;
  42240. 80118ea: 4b31 ldr r3, [pc, #196] @ (80119b0 <vTaskSwitchContext+0xd4>)
  42241. 80118ec: 2201 movs r2, #1
  42242. 80118ee: 601a str r2, [r3, #0]
  42243. for additional information. */
  42244. _impure_ptr = &( pxCurrentTCB->xNewLib_reent );
  42245. }
  42246. #endif /* configUSE_NEWLIB_REENTRANT */
  42247. }
  42248. }
  42249. 80118f0: e058 b.n 80119a4 <vTaskSwitchContext+0xc8>
  42250. xYieldPending = pdFALSE;
  42251. 80118f2: 4b2f ldr r3, [pc, #188] @ (80119b0 <vTaskSwitchContext+0xd4>)
  42252. 80118f4: 2200 movs r2, #0
  42253. 80118f6: 601a str r2, [r3, #0]
  42254. taskCHECK_FOR_STACK_OVERFLOW();
  42255. 80118f8: 4b2e ldr r3, [pc, #184] @ (80119b4 <vTaskSwitchContext+0xd8>)
  42256. 80118fa: 681b ldr r3, [r3, #0]
  42257. 80118fc: 681a ldr r2, [r3, #0]
  42258. 80118fe: 4b2d ldr r3, [pc, #180] @ (80119b4 <vTaskSwitchContext+0xd8>)
  42259. 8011900: 681b ldr r3, [r3, #0]
  42260. 8011902: 6b1b ldr r3, [r3, #48] @ 0x30
  42261. 8011904: 429a cmp r2, r3
  42262. 8011906: d808 bhi.n 801191a <vTaskSwitchContext+0x3e>
  42263. 8011908: 4b2a ldr r3, [pc, #168] @ (80119b4 <vTaskSwitchContext+0xd8>)
  42264. 801190a: 681a ldr r2, [r3, #0]
  42265. 801190c: 4b29 ldr r3, [pc, #164] @ (80119b4 <vTaskSwitchContext+0xd8>)
  42266. 801190e: 681b ldr r3, [r3, #0]
  42267. 8011910: 3334 adds r3, #52 @ 0x34
  42268. 8011912: 4619 mov r1, r3
  42269. 8011914: 4610 mov r0, r2
  42270. 8011916: f7ee feab bl 8000670 <vApplicationStackOverflowHook>
  42271. 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. */
  42272. 801191a: 4b27 ldr r3, [pc, #156] @ (80119b8 <vTaskSwitchContext+0xdc>)
  42273. 801191c: 681b ldr r3, [r3, #0]
  42274. 801191e: 60fb str r3, [r7, #12]
  42275. 8011920: e011 b.n 8011946 <vTaskSwitchContext+0x6a>
  42276. 8011922: 68fb ldr r3, [r7, #12]
  42277. 8011924: 2b00 cmp r3, #0
  42278. 8011926: d10b bne.n 8011940 <vTaskSwitchContext+0x64>
  42279. __asm volatile
  42280. 8011928: f04f 0350 mov.w r3, #80 @ 0x50
  42281. 801192c: f383 8811 msr BASEPRI, r3
  42282. 8011930: f3bf 8f6f isb sy
  42283. 8011934: f3bf 8f4f dsb sy
  42284. 8011938: 607b str r3, [r7, #4]
  42285. }
  42286. 801193a: bf00 nop
  42287. 801193c: bf00 nop
  42288. 801193e: e7fd b.n 801193c <vTaskSwitchContext+0x60>
  42289. 8011940: 68fb ldr r3, [r7, #12]
  42290. 8011942: 3b01 subs r3, #1
  42291. 8011944: 60fb str r3, [r7, #12]
  42292. 8011946: 491d ldr r1, [pc, #116] @ (80119bc <vTaskSwitchContext+0xe0>)
  42293. 8011948: 68fa ldr r2, [r7, #12]
  42294. 801194a: 4613 mov r3, r2
  42295. 801194c: 009b lsls r3, r3, #2
  42296. 801194e: 4413 add r3, r2
  42297. 8011950: 009b lsls r3, r3, #2
  42298. 8011952: 440b add r3, r1
  42299. 8011954: 681b ldr r3, [r3, #0]
  42300. 8011956: 2b00 cmp r3, #0
  42301. 8011958: d0e3 beq.n 8011922 <vTaskSwitchContext+0x46>
  42302. 801195a: 68fa ldr r2, [r7, #12]
  42303. 801195c: 4613 mov r3, r2
  42304. 801195e: 009b lsls r3, r3, #2
  42305. 8011960: 4413 add r3, r2
  42306. 8011962: 009b lsls r3, r3, #2
  42307. 8011964: 4a15 ldr r2, [pc, #84] @ (80119bc <vTaskSwitchContext+0xe0>)
  42308. 8011966: 4413 add r3, r2
  42309. 8011968: 60bb str r3, [r7, #8]
  42310. 801196a: 68bb ldr r3, [r7, #8]
  42311. 801196c: 685b ldr r3, [r3, #4]
  42312. 801196e: 685a ldr r2, [r3, #4]
  42313. 8011970: 68bb ldr r3, [r7, #8]
  42314. 8011972: 605a str r2, [r3, #4]
  42315. 8011974: 68bb ldr r3, [r7, #8]
  42316. 8011976: 685a ldr r2, [r3, #4]
  42317. 8011978: 68bb ldr r3, [r7, #8]
  42318. 801197a: 3308 adds r3, #8
  42319. 801197c: 429a cmp r2, r3
  42320. 801197e: d104 bne.n 801198a <vTaskSwitchContext+0xae>
  42321. 8011980: 68bb ldr r3, [r7, #8]
  42322. 8011982: 685b ldr r3, [r3, #4]
  42323. 8011984: 685a ldr r2, [r3, #4]
  42324. 8011986: 68bb ldr r3, [r7, #8]
  42325. 8011988: 605a str r2, [r3, #4]
  42326. 801198a: 68bb ldr r3, [r7, #8]
  42327. 801198c: 685b ldr r3, [r3, #4]
  42328. 801198e: 68db ldr r3, [r3, #12]
  42329. 8011990: 4a08 ldr r2, [pc, #32] @ (80119b4 <vTaskSwitchContext+0xd8>)
  42330. 8011992: 6013 str r3, [r2, #0]
  42331. 8011994: 4a08 ldr r2, [pc, #32] @ (80119b8 <vTaskSwitchContext+0xdc>)
  42332. 8011996: 68fb ldr r3, [r7, #12]
  42333. 8011998: 6013 str r3, [r2, #0]
  42334. _impure_ptr = &( pxCurrentTCB->xNewLib_reent );
  42335. 801199a: 4b06 ldr r3, [pc, #24] @ (80119b4 <vTaskSwitchContext+0xd8>)
  42336. 801199c: 681b ldr r3, [r3, #0]
  42337. 801199e: 3354 adds r3, #84 @ 0x54
  42338. 80119a0: 4a07 ldr r2, [pc, #28] @ (80119c0 <vTaskSwitchContext+0xe4>)
  42339. 80119a2: 6013 str r3, [r2, #0]
  42340. }
  42341. 80119a4: bf00 nop
  42342. 80119a6: 3710 adds r7, #16
  42343. 80119a8: 46bd mov sp, r7
  42344. 80119aa: bd80 pop {r7, pc}
  42345. 80119ac: 240028f0 .word 0x240028f0
  42346. 80119b0: 240028dc .word 0x240028dc
  42347. 80119b4: 240023f4 .word 0x240023f4
  42348. 80119b8: 240028d0 .word 0x240028d0
  42349. 80119bc: 240023f8 .word 0x240023f8
  42350. 80119c0: 24000054 .word 0x24000054
  42351. 080119c4 <vTaskPlaceOnEventList>:
  42352. /*-----------------------------------------------------------*/
  42353. void vTaskPlaceOnEventList( List_t * const pxEventList, const TickType_t xTicksToWait )
  42354. {
  42355. 80119c4: b580 push {r7, lr}
  42356. 80119c6: b084 sub sp, #16
  42357. 80119c8: af00 add r7, sp, #0
  42358. 80119ca: 6078 str r0, [r7, #4]
  42359. 80119cc: 6039 str r1, [r7, #0]
  42360. configASSERT( pxEventList );
  42361. 80119ce: 687b ldr r3, [r7, #4]
  42362. 80119d0: 2b00 cmp r3, #0
  42363. 80119d2: d10b bne.n 80119ec <vTaskPlaceOnEventList+0x28>
  42364. __asm volatile
  42365. 80119d4: f04f 0350 mov.w r3, #80 @ 0x50
  42366. 80119d8: f383 8811 msr BASEPRI, r3
  42367. 80119dc: f3bf 8f6f isb sy
  42368. 80119e0: f3bf 8f4f dsb sy
  42369. 80119e4: 60fb str r3, [r7, #12]
  42370. }
  42371. 80119e6: bf00 nop
  42372. 80119e8: bf00 nop
  42373. 80119ea: e7fd b.n 80119e8 <vTaskPlaceOnEventList+0x24>
  42374. /* Place the event list item of the TCB in the appropriate event list.
  42375. This is placed in the list in priority order so the highest priority task
  42376. is the first to be woken by the event. The queue that contains the event
  42377. list is locked, preventing simultaneous access from interrupts. */
  42378. vListInsert( pxEventList, &( pxCurrentTCB->xEventListItem ) );
  42379. 80119ec: 4b07 ldr r3, [pc, #28] @ (8011a0c <vTaskPlaceOnEventList+0x48>)
  42380. 80119ee: 681b ldr r3, [r3, #0]
  42381. 80119f0: 3318 adds r3, #24
  42382. 80119f2: 4619 mov r1, r3
  42383. 80119f4: 6878 ldr r0, [r7, #4]
  42384. 80119f6: f7fe f9de bl 800fdb6 <vListInsert>
  42385. prvAddCurrentTaskToDelayedList( xTicksToWait, pdTRUE );
  42386. 80119fa: 2101 movs r1, #1
  42387. 80119fc: 6838 ldr r0, [r7, #0]
  42388. 80119fe: f000 fded bl 80125dc <prvAddCurrentTaskToDelayedList>
  42389. }
  42390. 8011a02: bf00 nop
  42391. 8011a04: 3710 adds r7, #16
  42392. 8011a06: 46bd mov sp, r7
  42393. 8011a08: bd80 pop {r7, pc}
  42394. 8011a0a: bf00 nop
  42395. 8011a0c: 240023f4 .word 0x240023f4
  42396. 08011a10 <vTaskPlaceOnEventListRestricted>:
  42397. /*-----------------------------------------------------------*/
  42398. #if( configUSE_TIMERS == 1 )
  42399. void vTaskPlaceOnEventListRestricted( List_t * const pxEventList, TickType_t xTicksToWait, const BaseType_t xWaitIndefinitely )
  42400. {
  42401. 8011a10: b580 push {r7, lr}
  42402. 8011a12: b086 sub sp, #24
  42403. 8011a14: af00 add r7, sp, #0
  42404. 8011a16: 60f8 str r0, [r7, #12]
  42405. 8011a18: 60b9 str r1, [r7, #8]
  42406. 8011a1a: 607a str r2, [r7, #4]
  42407. configASSERT( pxEventList );
  42408. 8011a1c: 68fb ldr r3, [r7, #12]
  42409. 8011a1e: 2b00 cmp r3, #0
  42410. 8011a20: d10b bne.n 8011a3a <vTaskPlaceOnEventListRestricted+0x2a>
  42411. __asm volatile
  42412. 8011a22: f04f 0350 mov.w r3, #80 @ 0x50
  42413. 8011a26: f383 8811 msr BASEPRI, r3
  42414. 8011a2a: f3bf 8f6f isb sy
  42415. 8011a2e: f3bf 8f4f dsb sy
  42416. 8011a32: 617b str r3, [r7, #20]
  42417. }
  42418. 8011a34: bf00 nop
  42419. 8011a36: bf00 nop
  42420. 8011a38: e7fd b.n 8011a36 <vTaskPlaceOnEventListRestricted+0x26>
  42421. /* Place the event list item of the TCB in the appropriate event list.
  42422. In this case it is assume that this is the only task that is going to
  42423. be waiting on this event list, so the faster vListInsertEnd() function
  42424. can be used in place of vListInsert. */
  42425. vListInsertEnd( pxEventList, &( pxCurrentTCB->xEventListItem ) );
  42426. 8011a3a: 4b0a ldr r3, [pc, #40] @ (8011a64 <vTaskPlaceOnEventListRestricted+0x54>)
  42427. 8011a3c: 681b ldr r3, [r3, #0]
  42428. 8011a3e: 3318 adds r3, #24
  42429. 8011a40: 4619 mov r1, r3
  42430. 8011a42: 68f8 ldr r0, [r7, #12]
  42431. 8011a44: f7fe f993 bl 800fd6e <vListInsertEnd>
  42432. /* If the task should block indefinitely then set the block time to a
  42433. value that will be recognised as an indefinite delay inside the
  42434. prvAddCurrentTaskToDelayedList() function. */
  42435. if( xWaitIndefinitely != pdFALSE )
  42436. 8011a48: 687b ldr r3, [r7, #4]
  42437. 8011a4a: 2b00 cmp r3, #0
  42438. 8011a4c: d002 beq.n 8011a54 <vTaskPlaceOnEventListRestricted+0x44>
  42439. {
  42440. xTicksToWait = portMAX_DELAY;
  42441. 8011a4e: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff
  42442. 8011a52: 60bb str r3, [r7, #8]
  42443. }
  42444. traceTASK_DELAY_UNTIL( ( xTickCount + xTicksToWait ) );
  42445. prvAddCurrentTaskToDelayedList( xTicksToWait, xWaitIndefinitely );
  42446. 8011a54: 6879 ldr r1, [r7, #4]
  42447. 8011a56: 68b8 ldr r0, [r7, #8]
  42448. 8011a58: f000 fdc0 bl 80125dc <prvAddCurrentTaskToDelayedList>
  42449. }
  42450. 8011a5c: bf00 nop
  42451. 8011a5e: 3718 adds r7, #24
  42452. 8011a60: 46bd mov sp, r7
  42453. 8011a62: bd80 pop {r7, pc}
  42454. 8011a64: 240023f4 .word 0x240023f4
  42455. 08011a68 <xTaskRemoveFromEventList>:
  42456. #endif /* configUSE_TIMERS */
  42457. /*-----------------------------------------------------------*/
  42458. BaseType_t xTaskRemoveFromEventList( const List_t * const pxEventList )
  42459. {
  42460. 8011a68: b580 push {r7, lr}
  42461. 8011a6a: b086 sub sp, #24
  42462. 8011a6c: af00 add r7, sp, #0
  42463. 8011a6e: 6078 str r0, [r7, #4]
  42464. get called - the lock count on the queue will get modified instead. This
  42465. means exclusive access to the event list is guaranteed here.
  42466. This function assumes that a check has already been made to ensure that
  42467. pxEventList is not empty. */
  42468. 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. */
  42469. 8011a70: 687b ldr r3, [r7, #4]
  42470. 8011a72: 68db ldr r3, [r3, #12]
  42471. 8011a74: 68db ldr r3, [r3, #12]
  42472. 8011a76: 613b str r3, [r7, #16]
  42473. configASSERT( pxUnblockedTCB );
  42474. 8011a78: 693b ldr r3, [r7, #16]
  42475. 8011a7a: 2b00 cmp r3, #0
  42476. 8011a7c: d10b bne.n 8011a96 <xTaskRemoveFromEventList+0x2e>
  42477. __asm volatile
  42478. 8011a7e: f04f 0350 mov.w r3, #80 @ 0x50
  42479. 8011a82: f383 8811 msr BASEPRI, r3
  42480. 8011a86: f3bf 8f6f isb sy
  42481. 8011a8a: f3bf 8f4f dsb sy
  42482. 8011a8e: 60fb str r3, [r7, #12]
  42483. }
  42484. 8011a90: bf00 nop
  42485. 8011a92: bf00 nop
  42486. 8011a94: e7fd b.n 8011a92 <xTaskRemoveFromEventList+0x2a>
  42487. ( void ) uxListRemove( &( pxUnblockedTCB->xEventListItem ) );
  42488. 8011a96: 693b ldr r3, [r7, #16]
  42489. 8011a98: 3318 adds r3, #24
  42490. 8011a9a: 4618 mov r0, r3
  42491. 8011a9c: f7fe f9c4 bl 800fe28 <uxListRemove>
  42492. if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE )
  42493. 8011aa0: 4b1d ldr r3, [pc, #116] @ (8011b18 <xTaskRemoveFromEventList+0xb0>)
  42494. 8011aa2: 681b ldr r3, [r3, #0]
  42495. 8011aa4: 2b00 cmp r3, #0
  42496. 8011aa6: d11d bne.n 8011ae4 <xTaskRemoveFromEventList+0x7c>
  42497. {
  42498. ( void ) uxListRemove( &( pxUnblockedTCB->xStateListItem ) );
  42499. 8011aa8: 693b ldr r3, [r7, #16]
  42500. 8011aaa: 3304 adds r3, #4
  42501. 8011aac: 4618 mov r0, r3
  42502. 8011aae: f7fe f9bb bl 800fe28 <uxListRemove>
  42503. prvAddTaskToReadyList( pxUnblockedTCB );
  42504. 8011ab2: 693b ldr r3, [r7, #16]
  42505. 8011ab4: 6ada ldr r2, [r3, #44] @ 0x2c
  42506. 8011ab6: 4b19 ldr r3, [pc, #100] @ (8011b1c <xTaskRemoveFromEventList+0xb4>)
  42507. 8011ab8: 681b ldr r3, [r3, #0]
  42508. 8011aba: 429a cmp r2, r3
  42509. 8011abc: d903 bls.n 8011ac6 <xTaskRemoveFromEventList+0x5e>
  42510. 8011abe: 693b ldr r3, [r7, #16]
  42511. 8011ac0: 6adb ldr r3, [r3, #44] @ 0x2c
  42512. 8011ac2: 4a16 ldr r2, [pc, #88] @ (8011b1c <xTaskRemoveFromEventList+0xb4>)
  42513. 8011ac4: 6013 str r3, [r2, #0]
  42514. 8011ac6: 693b ldr r3, [r7, #16]
  42515. 8011ac8: 6ada ldr r2, [r3, #44] @ 0x2c
  42516. 8011aca: 4613 mov r3, r2
  42517. 8011acc: 009b lsls r3, r3, #2
  42518. 8011ace: 4413 add r3, r2
  42519. 8011ad0: 009b lsls r3, r3, #2
  42520. 8011ad2: 4a13 ldr r2, [pc, #76] @ (8011b20 <xTaskRemoveFromEventList+0xb8>)
  42521. 8011ad4: 441a add r2, r3
  42522. 8011ad6: 693b ldr r3, [r7, #16]
  42523. 8011ad8: 3304 adds r3, #4
  42524. 8011ada: 4619 mov r1, r3
  42525. 8011adc: 4610 mov r0, r2
  42526. 8011ade: f7fe f946 bl 800fd6e <vListInsertEnd>
  42527. 8011ae2: e005 b.n 8011af0 <xTaskRemoveFromEventList+0x88>
  42528. }
  42529. else
  42530. {
  42531. /* The delayed and ready lists cannot be accessed, so hold this task
  42532. pending until the scheduler is resumed. */
  42533. vListInsertEnd( &( xPendingReadyList ), &( pxUnblockedTCB->xEventListItem ) );
  42534. 8011ae4: 693b ldr r3, [r7, #16]
  42535. 8011ae6: 3318 adds r3, #24
  42536. 8011ae8: 4619 mov r1, r3
  42537. 8011aea: 480e ldr r0, [pc, #56] @ (8011b24 <xTaskRemoveFromEventList+0xbc>)
  42538. 8011aec: f7fe f93f bl 800fd6e <vListInsertEnd>
  42539. }
  42540. if( pxUnblockedTCB->uxPriority > pxCurrentTCB->uxPriority )
  42541. 8011af0: 693b ldr r3, [r7, #16]
  42542. 8011af2: 6ada ldr r2, [r3, #44] @ 0x2c
  42543. 8011af4: 4b0c ldr r3, [pc, #48] @ (8011b28 <xTaskRemoveFromEventList+0xc0>)
  42544. 8011af6: 681b ldr r3, [r3, #0]
  42545. 8011af8: 6adb ldr r3, [r3, #44] @ 0x2c
  42546. 8011afa: 429a cmp r2, r3
  42547. 8011afc: d905 bls.n 8011b0a <xTaskRemoveFromEventList+0xa2>
  42548. {
  42549. /* Return true if the task removed from the event list has a higher
  42550. priority than the calling task. This allows the calling task to know if
  42551. it should force a context switch now. */
  42552. xReturn = pdTRUE;
  42553. 8011afe: 2301 movs r3, #1
  42554. 8011b00: 617b str r3, [r7, #20]
  42555. /* Mark that a yield is pending in case the user is not using the
  42556. "xHigherPriorityTaskWoken" parameter to an ISR safe FreeRTOS function. */
  42557. xYieldPending = pdTRUE;
  42558. 8011b02: 4b0a ldr r3, [pc, #40] @ (8011b2c <xTaskRemoveFromEventList+0xc4>)
  42559. 8011b04: 2201 movs r2, #1
  42560. 8011b06: 601a str r2, [r3, #0]
  42561. 8011b08: e001 b.n 8011b0e <xTaskRemoveFromEventList+0xa6>
  42562. }
  42563. else
  42564. {
  42565. xReturn = pdFALSE;
  42566. 8011b0a: 2300 movs r3, #0
  42567. 8011b0c: 617b str r3, [r7, #20]
  42568. }
  42569. return xReturn;
  42570. 8011b0e: 697b ldr r3, [r7, #20]
  42571. }
  42572. 8011b10: 4618 mov r0, r3
  42573. 8011b12: 3718 adds r7, #24
  42574. 8011b14: 46bd mov sp, r7
  42575. 8011b16: bd80 pop {r7, pc}
  42576. 8011b18: 240028f0 .word 0x240028f0
  42577. 8011b1c: 240028d0 .word 0x240028d0
  42578. 8011b20: 240023f8 .word 0x240023f8
  42579. 8011b24: 24002888 .word 0x24002888
  42580. 8011b28: 240023f4 .word 0x240023f4
  42581. 8011b2c: 240028dc .word 0x240028dc
  42582. 08011b30 <vTaskSetTimeOutState>:
  42583. }
  42584. }
  42585. /*-----------------------------------------------------------*/
  42586. void vTaskSetTimeOutState( TimeOut_t * const pxTimeOut )
  42587. {
  42588. 8011b30: b580 push {r7, lr}
  42589. 8011b32: b084 sub sp, #16
  42590. 8011b34: af00 add r7, sp, #0
  42591. 8011b36: 6078 str r0, [r7, #4]
  42592. configASSERT( pxTimeOut );
  42593. 8011b38: 687b ldr r3, [r7, #4]
  42594. 8011b3a: 2b00 cmp r3, #0
  42595. 8011b3c: d10b bne.n 8011b56 <vTaskSetTimeOutState+0x26>
  42596. __asm volatile
  42597. 8011b3e: f04f 0350 mov.w r3, #80 @ 0x50
  42598. 8011b42: f383 8811 msr BASEPRI, r3
  42599. 8011b46: f3bf 8f6f isb sy
  42600. 8011b4a: f3bf 8f4f dsb sy
  42601. 8011b4e: 60fb str r3, [r7, #12]
  42602. }
  42603. 8011b50: bf00 nop
  42604. 8011b52: bf00 nop
  42605. 8011b54: e7fd b.n 8011b52 <vTaskSetTimeOutState+0x22>
  42606. taskENTER_CRITICAL();
  42607. 8011b56: f001 fa1f bl 8012f98 <vPortEnterCritical>
  42608. {
  42609. pxTimeOut->xOverflowCount = xNumOfOverflows;
  42610. 8011b5a: 4b07 ldr r3, [pc, #28] @ (8011b78 <vTaskSetTimeOutState+0x48>)
  42611. 8011b5c: 681a ldr r2, [r3, #0]
  42612. 8011b5e: 687b ldr r3, [r7, #4]
  42613. 8011b60: 601a str r2, [r3, #0]
  42614. pxTimeOut->xTimeOnEntering = xTickCount;
  42615. 8011b62: 4b06 ldr r3, [pc, #24] @ (8011b7c <vTaskSetTimeOutState+0x4c>)
  42616. 8011b64: 681a ldr r2, [r3, #0]
  42617. 8011b66: 687b ldr r3, [r7, #4]
  42618. 8011b68: 605a str r2, [r3, #4]
  42619. }
  42620. taskEXIT_CRITICAL();
  42621. 8011b6a: f001 fa47 bl 8012ffc <vPortExitCritical>
  42622. }
  42623. 8011b6e: bf00 nop
  42624. 8011b70: 3710 adds r7, #16
  42625. 8011b72: 46bd mov sp, r7
  42626. 8011b74: bd80 pop {r7, pc}
  42627. 8011b76: bf00 nop
  42628. 8011b78: 240028e0 .word 0x240028e0
  42629. 8011b7c: 240028cc .word 0x240028cc
  42630. 08011b80 <vTaskInternalSetTimeOutState>:
  42631. /*-----------------------------------------------------------*/
  42632. void vTaskInternalSetTimeOutState( TimeOut_t * const pxTimeOut )
  42633. {
  42634. 8011b80: b480 push {r7}
  42635. 8011b82: b083 sub sp, #12
  42636. 8011b84: af00 add r7, sp, #0
  42637. 8011b86: 6078 str r0, [r7, #4]
  42638. /* For internal use only as it does not use a critical section. */
  42639. pxTimeOut->xOverflowCount = xNumOfOverflows;
  42640. 8011b88: 4b06 ldr r3, [pc, #24] @ (8011ba4 <vTaskInternalSetTimeOutState+0x24>)
  42641. 8011b8a: 681a ldr r2, [r3, #0]
  42642. 8011b8c: 687b ldr r3, [r7, #4]
  42643. 8011b8e: 601a str r2, [r3, #0]
  42644. pxTimeOut->xTimeOnEntering = xTickCount;
  42645. 8011b90: 4b05 ldr r3, [pc, #20] @ (8011ba8 <vTaskInternalSetTimeOutState+0x28>)
  42646. 8011b92: 681a ldr r2, [r3, #0]
  42647. 8011b94: 687b ldr r3, [r7, #4]
  42648. 8011b96: 605a str r2, [r3, #4]
  42649. }
  42650. 8011b98: bf00 nop
  42651. 8011b9a: 370c adds r7, #12
  42652. 8011b9c: 46bd mov sp, r7
  42653. 8011b9e: f85d 7b04 ldr.w r7, [sp], #4
  42654. 8011ba2: 4770 bx lr
  42655. 8011ba4: 240028e0 .word 0x240028e0
  42656. 8011ba8: 240028cc .word 0x240028cc
  42657. 08011bac <xTaskCheckForTimeOut>:
  42658. /*-----------------------------------------------------------*/
  42659. BaseType_t xTaskCheckForTimeOut( TimeOut_t * const pxTimeOut, TickType_t * const pxTicksToWait )
  42660. {
  42661. 8011bac: b580 push {r7, lr}
  42662. 8011bae: b088 sub sp, #32
  42663. 8011bb0: af00 add r7, sp, #0
  42664. 8011bb2: 6078 str r0, [r7, #4]
  42665. 8011bb4: 6039 str r1, [r7, #0]
  42666. BaseType_t xReturn;
  42667. configASSERT( pxTimeOut );
  42668. 8011bb6: 687b ldr r3, [r7, #4]
  42669. 8011bb8: 2b00 cmp r3, #0
  42670. 8011bba: d10b bne.n 8011bd4 <xTaskCheckForTimeOut+0x28>
  42671. __asm volatile
  42672. 8011bbc: f04f 0350 mov.w r3, #80 @ 0x50
  42673. 8011bc0: f383 8811 msr BASEPRI, r3
  42674. 8011bc4: f3bf 8f6f isb sy
  42675. 8011bc8: f3bf 8f4f dsb sy
  42676. 8011bcc: 613b str r3, [r7, #16]
  42677. }
  42678. 8011bce: bf00 nop
  42679. 8011bd0: bf00 nop
  42680. 8011bd2: e7fd b.n 8011bd0 <xTaskCheckForTimeOut+0x24>
  42681. configASSERT( pxTicksToWait );
  42682. 8011bd4: 683b ldr r3, [r7, #0]
  42683. 8011bd6: 2b00 cmp r3, #0
  42684. 8011bd8: d10b bne.n 8011bf2 <xTaskCheckForTimeOut+0x46>
  42685. __asm volatile
  42686. 8011bda: f04f 0350 mov.w r3, #80 @ 0x50
  42687. 8011bde: f383 8811 msr BASEPRI, r3
  42688. 8011be2: f3bf 8f6f isb sy
  42689. 8011be6: f3bf 8f4f dsb sy
  42690. 8011bea: 60fb str r3, [r7, #12]
  42691. }
  42692. 8011bec: bf00 nop
  42693. 8011bee: bf00 nop
  42694. 8011bf0: e7fd b.n 8011bee <xTaskCheckForTimeOut+0x42>
  42695. taskENTER_CRITICAL();
  42696. 8011bf2: f001 f9d1 bl 8012f98 <vPortEnterCritical>
  42697. {
  42698. /* Minor optimisation. The tick count cannot change in this block. */
  42699. const TickType_t xConstTickCount = xTickCount;
  42700. 8011bf6: 4b1d ldr r3, [pc, #116] @ (8011c6c <xTaskCheckForTimeOut+0xc0>)
  42701. 8011bf8: 681b ldr r3, [r3, #0]
  42702. 8011bfa: 61bb str r3, [r7, #24]
  42703. const TickType_t xElapsedTime = xConstTickCount - pxTimeOut->xTimeOnEntering;
  42704. 8011bfc: 687b ldr r3, [r7, #4]
  42705. 8011bfe: 685b ldr r3, [r3, #4]
  42706. 8011c00: 69ba ldr r2, [r7, #24]
  42707. 8011c02: 1ad3 subs r3, r2, r3
  42708. 8011c04: 617b str r3, [r7, #20]
  42709. }
  42710. else
  42711. #endif
  42712. #if ( INCLUDE_vTaskSuspend == 1 )
  42713. if( *pxTicksToWait == portMAX_DELAY )
  42714. 8011c06: 683b ldr r3, [r7, #0]
  42715. 8011c08: 681b ldr r3, [r3, #0]
  42716. 8011c0a: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  42717. 8011c0e: d102 bne.n 8011c16 <xTaskCheckForTimeOut+0x6a>
  42718. {
  42719. /* If INCLUDE_vTaskSuspend is set to 1 and the block time
  42720. specified is the maximum block time then the task should block
  42721. indefinitely, and therefore never time out. */
  42722. xReturn = pdFALSE;
  42723. 8011c10: 2300 movs r3, #0
  42724. 8011c12: 61fb str r3, [r7, #28]
  42725. 8011c14: e023 b.n 8011c5e <xTaskCheckForTimeOut+0xb2>
  42726. }
  42727. else
  42728. #endif
  42729. if( ( xNumOfOverflows != pxTimeOut->xOverflowCount ) && ( xConstTickCount >= pxTimeOut->xTimeOnEntering ) ) /*lint !e525 Indentation preferred as is to make code within pre-processor directives clearer. */
  42730. 8011c16: 687b ldr r3, [r7, #4]
  42731. 8011c18: 681a ldr r2, [r3, #0]
  42732. 8011c1a: 4b15 ldr r3, [pc, #84] @ (8011c70 <xTaskCheckForTimeOut+0xc4>)
  42733. 8011c1c: 681b ldr r3, [r3, #0]
  42734. 8011c1e: 429a cmp r2, r3
  42735. 8011c20: d007 beq.n 8011c32 <xTaskCheckForTimeOut+0x86>
  42736. 8011c22: 687b ldr r3, [r7, #4]
  42737. 8011c24: 685b ldr r3, [r3, #4]
  42738. 8011c26: 69ba ldr r2, [r7, #24]
  42739. 8011c28: 429a cmp r2, r3
  42740. 8011c2a: d302 bcc.n 8011c32 <xTaskCheckForTimeOut+0x86>
  42741. /* The tick count is greater than the time at which
  42742. vTaskSetTimeout() was called, but has also overflowed since
  42743. vTaskSetTimeOut() was called. It must have wrapped all the way
  42744. around and gone past again. This passed since vTaskSetTimeout()
  42745. was called. */
  42746. xReturn = pdTRUE;
  42747. 8011c2c: 2301 movs r3, #1
  42748. 8011c2e: 61fb str r3, [r7, #28]
  42749. 8011c30: e015 b.n 8011c5e <xTaskCheckForTimeOut+0xb2>
  42750. }
  42751. else if( xElapsedTime < *pxTicksToWait ) /*lint !e961 Explicit casting is only redundant with some compilers, whereas others require it to prevent integer conversion errors. */
  42752. 8011c32: 683b ldr r3, [r7, #0]
  42753. 8011c34: 681b ldr r3, [r3, #0]
  42754. 8011c36: 697a ldr r2, [r7, #20]
  42755. 8011c38: 429a cmp r2, r3
  42756. 8011c3a: d20b bcs.n 8011c54 <xTaskCheckForTimeOut+0xa8>
  42757. {
  42758. /* Not a genuine timeout. Adjust parameters for time remaining. */
  42759. *pxTicksToWait -= xElapsedTime;
  42760. 8011c3c: 683b ldr r3, [r7, #0]
  42761. 8011c3e: 681a ldr r2, [r3, #0]
  42762. 8011c40: 697b ldr r3, [r7, #20]
  42763. 8011c42: 1ad2 subs r2, r2, r3
  42764. 8011c44: 683b ldr r3, [r7, #0]
  42765. 8011c46: 601a str r2, [r3, #0]
  42766. vTaskInternalSetTimeOutState( pxTimeOut );
  42767. 8011c48: 6878 ldr r0, [r7, #4]
  42768. 8011c4a: f7ff ff99 bl 8011b80 <vTaskInternalSetTimeOutState>
  42769. xReturn = pdFALSE;
  42770. 8011c4e: 2300 movs r3, #0
  42771. 8011c50: 61fb str r3, [r7, #28]
  42772. 8011c52: e004 b.n 8011c5e <xTaskCheckForTimeOut+0xb2>
  42773. }
  42774. else
  42775. {
  42776. *pxTicksToWait = 0;
  42777. 8011c54: 683b ldr r3, [r7, #0]
  42778. 8011c56: 2200 movs r2, #0
  42779. 8011c58: 601a str r2, [r3, #0]
  42780. xReturn = pdTRUE;
  42781. 8011c5a: 2301 movs r3, #1
  42782. 8011c5c: 61fb str r3, [r7, #28]
  42783. }
  42784. }
  42785. taskEXIT_CRITICAL();
  42786. 8011c5e: f001 f9cd bl 8012ffc <vPortExitCritical>
  42787. return xReturn;
  42788. 8011c62: 69fb ldr r3, [r7, #28]
  42789. }
  42790. 8011c64: 4618 mov r0, r3
  42791. 8011c66: 3720 adds r7, #32
  42792. 8011c68: 46bd mov sp, r7
  42793. 8011c6a: bd80 pop {r7, pc}
  42794. 8011c6c: 240028cc .word 0x240028cc
  42795. 8011c70: 240028e0 .word 0x240028e0
  42796. 08011c74 <vTaskMissedYield>:
  42797. /*-----------------------------------------------------------*/
  42798. void vTaskMissedYield( void )
  42799. {
  42800. 8011c74: b480 push {r7}
  42801. 8011c76: af00 add r7, sp, #0
  42802. xYieldPending = pdTRUE;
  42803. 8011c78: 4b03 ldr r3, [pc, #12] @ (8011c88 <vTaskMissedYield+0x14>)
  42804. 8011c7a: 2201 movs r2, #1
  42805. 8011c7c: 601a str r2, [r3, #0]
  42806. }
  42807. 8011c7e: bf00 nop
  42808. 8011c80: 46bd mov sp, r7
  42809. 8011c82: f85d 7b04 ldr.w r7, [sp], #4
  42810. 8011c86: 4770 bx lr
  42811. 8011c88: 240028dc .word 0x240028dc
  42812. 08011c8c <prvIdleTask>:
  42813. *
  42814. * void prvIdleTask( void *pvParameters );
  42815. *
  42816. */
  42817. static portTASK_FUNCTION( prvIdleTask, pvParameters )
  42818. {
  42819. 8011c8c: b580 push {r7, lr}
  42820. 8011c8e: b082 sub sp, #8
  42821. 8011c90: af00 add r7, sp, #0
  42822. 8011c92: 6078 str r0, [r7, #4]
  42823. for( ;; )
  42824. {
  42825. /* See if any tasks have deleted themselves - if so then the idle task
  42826. is responsible for freeing the deleted task's TCB and stack. */
  42827. prvCheckTasksWaitingTermination();
  42828. 8011c94: f000 f852 bl 8011d3c <prvCheckTasksWaitingTermination>
  42829. A critical region is not required here as we are just reading from
  42830. the list, and an occasional incorrect value will not matter. If
  42831. the ready list at the idle priority contains more than one task
  42832. then a task other than the idle task is ready to execute. */
  42833. if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ tskIDLE_PRIORITY ] ) ) > ( UBaseType_t ) 1 )
  42834. 8011c98: 4b06 ldr r3, [pc, #24] @ (8011cb4 <prvIdleTask+0x28>)
  42835. 8011c9a: 681b ldr r3, [r3, #0]
  42836. 8011c9c: 2b01 cmp r3, #1
  42837. 8011c9e: d9f9 bls.n 8011c94 <prvIdleTask+0x8>
  42838. {
  42839. taskYIELD();
  42840. 8011ca0: 4b05 ldr r3, [pc, #20] @ (8011cb8 <prvIdleTask+0x2c>)
  42841. 8011ca2: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  42842. 8011ca6: 601a str r2, [r3, #0]
  42843. 8011ca8: f3bf 8f4f dsb sy
  42844. 8011cac: f3bf 8f6f isb sy
  42845. prvCheckTasksWaitingTermination();
  42846. 8011cb0: e7f0 b.n 8011c94 <prvIdleTask+0x8>
  42847. 8011cb2: bf00 nop
  42848. 8011cb4: 240023f8 .word 0x240023f8
  42849. 8011cb8: e000ed04 .word 0xe000ed04
  42850. 08011cbc <prvInitialiseTaskLists>:
  42851. #endif /* portUSING_MPU_WRAPPERS */
  42852. /*-----------------------------------------------------------*/
  42853. static void prvInitialiseTaskLists( void )
  42854. {
  42855. 8011cbc: b580 push {r7, lr}
  42856. 8011cbe: b082 sub sp, #8
  42857. 8011cc0: af00 add r7, sp, #0
  42858. UBaseType_t uxPriority;
  42859. for( uxPriority = ( UBaseType_t ) 0U; uxPriority < ( UBaseType_t ) configMAX_PRIORITIES; uxPriority++ )
  42860. 8011cc2: 2300 movs r3, #0
  42861. 8011cc4: 607b str r3, [r7, #4]
  42862. 8011cc6: e00c b.n 8011ce2 <prvInitialiseTaskLists+0x26>
  42863. {
  42864. vListInitialise( &( pxReadyTasksLists[ uxPriority ] ) );
  42865. 8011cc8: 687a ldr r2, [r7, #4]
  42866. 8011cca: 4613 mov r3, r2
  42867. 8011ccc: 009b lsls r3, r3, #2
  42868. 8011cce: 4413 add r3, r2
  42869. 8011cd0: 009b lsls r3, r3, #2
  42870. 8011cd2: 4a12 ldr r2, [pc, #72] @ (8011d1c <prvInitialiseTaskLists+0x60>)
  42871. 8011cd4: 4413 add r3, r2
  42872. 8011cd6: 4618 mov r0, r3
  42873. 8011cd8: f7fe f81c bl 800fd14 <vListInitialise>
  42874. for( uxPriority = ( UBaseType_t ) 0U; uxPriority < ( UBaseType_t ) configMAX_PRIORITIES; uxPriority++ )
  42875. 8011cdc: 687b ldr r3, [r7, #4]
  42876. 8011cde: 3301 adds r3, #1
  42877. 8011ce0: 607b str r3, [r7, #4]
  42878. 8011ce2: 687b ldr r3, [r7, #4]
  42879. 8011ce4: 2b37 cmp r3, #55 @ 0x37
  42880. 8011ce6: d9ef bls.n 8011cc8 <prvInitialiseTaskLists+0xc>
  42881. }
  42882. vListInitialise( &xDelayedTaskList1 );
  42883. 8011ce8: 480d ldr r0, [pc, #52] @ (8011d20 <prvInitialiseTaskLists+0x64>)
  42884. 8011cea: f7fe f813 bl 800fd14 <vListInitialise>
  42885. vListInitialise( &xDelayedTaskList2 );
  42886. 8011cee: 480d ldr r0, [pc, #52] @ (8011d24 <prvInitialiseTaskLists+0x68>)
  42887. 8011cf0: f7fe f810 bl 800fd14 <vListInitialise>
  42888. vListInitialise( &xPendingReadyList );
  42889. 8011cf4: 480c ldr r0, [pc, #48] @ (8011d28 <prvInitialiseTaskLists+0x6c>)
  42890. 8011cf6: f7fe f80d bl 800fd14 <vListInitialise>
  42891. #if ( INCLUDE_vTaskDelete == 1 )
  42892. {
  42893. vListInitialise( &xTasksWaitingTermination );
  42894. 8011cfa: 480c ldr r0, [pc, #48] @ (8011d2c <prvInitialiseTaskLists+0x70>)
  42895. 8011cfc: f7fe f80a bl 800fd14 <vListInitialise>
  42896. }
  42897. #endif /* INCLUDE_vTaskDelete */
  42898. #if ( INCLUDE_vTaskSuspend == 1 )
  42899. {
  42900. vListInitialise( &xSuspendedTaskList );
  42901. 8011d00: 480b ldr r0, [pc, #44] @ (8011d30 <prvInitialiseTaskLists+0x74>)
  42902. 8011d02: f7fe f807 bl 800fd14 <vListInitialise>
  42903. }
  42904. #endif /* INCLUDE_vTaskSuspend */
  42905. /* Start with pxDelayedTaskList using list1 and the pxOverflowDelayedTaskList
  42906. using list2. */
  42907. pxDelayedTaskList = &xDelayedTaskList1;
  42908. 8011d06: 4b0b ldr r3, [pc, #44] @ (8011d34 <prvInitialiseTaskLists+0x78>)
  42909. 8011d08: 4a05 ldr r2, [pc, #20] @ (8011d20 <prvInitialiseTaskLists+0x64>)
  42910. 8011d0a: 601a str r2, [r3, #0]
  42911. pxOverflowDelayedTaskList = &xDelayedTaskList2;
  42912. 8011d0c: 4b0a ldr r3, [pc, #40] @ (8011d38 <prvInitialiseTaskLists+0x7c>)
  42913. 8011d0e: 4a05 ldr r2, [pc, #20] @ (8011d24 <prvInitialiseTaskLists+0x68>)
  42914. 8011d10: 601a str r2, [r3, #0]
  42915. }
  42916. 8011d12: bf00 nop
  42917. 8011d14: 3708 adds r7, #8
  42918. 8011d16: 46bd mov sp, r7
  42919. 8011d18: bd80 pop {r7, pc}
  42920. 8011d1a: bf00 nop
  42921. 8011d1c: 240023f8 .word 0x240023f8
  42922. 8011d20: 24002858 .word 0x24002858
  42923. 8011d24: 2400286c .word 0x2400286c
  42924. 8011d28: 24002888 .word 0x24002888
  42925. 8011d2c: 2400289c .word 0x2400289c
  42926. 8011d30: 240028b4 .word 0x240028b4
  42927. 8011d34: 24002880 .word 0x24002880
  42928. 8011d38: 24002884 .word 0x24002884
  42929. 08011d3c <prvCheckTasksWaitingTermination>:
  42930. /*-----------------------------------------------------------*/
  42931. static void prvCheckTasksWaitingTermination( void )
  42932. {
  42933. 8011d3c: b580 push {r7, lr}
  42934. 8011d3e: b082 sub sp, #8
  42935. 8011d40: af00 add r7, sp, #0
  42936. {
  42937. TCB_t *pxTCB;
  42938. /* uxDeletedTasksWaitingCleanUp is used to prevent taskENTER_CRITICAL()
  42939. being called too often in the idle task. */
  42940. while( uxDeletedTasksWaitingCleanUp > ( UBaseType_t ) 0U )
  42941. 8011d42: e019 b.n 8011d78 <prvCheckTasksWaitingTermination+0x3c>
  42942. {
  42943. taskENTER_CRITICAL();
  42944. 8011d44: f001 f928 bl 8012f98 <vPortEnterCritical>
  42945. {
  42946. 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. */
  42947. 8011d48: 4b10 ldr r3, [pc, #64] @ (8011d8c <prvCheckTasksWaitingTermination+0x50>)
  42948. 8011d4a: 68db ldr r3, [r3, #12]
  42949. 8011d4c: 68db ldr r3, [r3, #12]
  42950. 8011d4e: 607b str r3, [r7, #4]
  42951. ( void ) uxListRemove( &( pxTCB->xStateListItem ) );
  42952. 8011d50: 687b ldr r3, [r7, #4]
  42953. 8011d52: 3304 adds r3, #4
  42954. 8011d54: 4618 mov r0, r3
  42955. 8011d56: f7fe f867 bl 800fe28 <uxListRemove>
  42956. --uxCurrentNumberOfTasks;
  42957. 8011d5a: 4b0d ldr r3, [pc, #52] @ (8011d90 <prvCheckTasksWaitingTermination+0x54>)
  42958. 8011d5c: 681b ldr r3, [r3, #0]
  42959. 8011d5e: 3b01 subs r3, #1
  42960. 8011d60: 4a0b ldr r2, [pc, #44] @ (8011d90 <prvCheckTasksWaitingTermination+0x54>)
  42961. 8011d62: 6013 str r3, [r2, #0]
  42962. --uxDeletedTasksWaitingCleanUp;
  42963. 8011d64: 4b0b ldr r3, [pc, #44] @ (8011d94 <prvCheckTasksWaitingTermination+0x58>)
  42964. 8011d66: 681b ldr r3, [r3, #0]
  42965. 8011d68: 3b01 subs r3, #1
  42966. 8011d6a: 4a0a ldr r2, [pc, #40] @ (8011d94 <prvCheckTasksWaitingTermination+0x58>)
  42967. 8011d6c: 6013 str r3, [r2, #0]
  42968. }
  42969. taskEXIT_CRITICAL();
  42970. 8011d6e: f001 f945 bl 8012ffc <vPortExitCritical>
  42971. prvDeleteTCB( pxTCB );
  42972. 8011d72: 6878 ldr r0, [r7, #4]
  42973. 8011d74: f000 f810 bl 8011d98 <prvDeleteTCB>
  42974. while( uxDeletedTasksWaitingCleanUp > ( UBaseType_t ) 0U )
  42975. 8011d78: 4b06 ldr r3, [pc, #24] @ (8011d94 <prvCheckTasksWaitingTermination+0x58>)
  42976. 8011d7a: 681b ldr r3, [r3, #0]
  42977. 8011d7c: 2b00 cmp r3, #0
  42978. 8011d7e: d1e1 bne.n 8011d44 <prvCheckTasksWaitingTermination+0x8>
  42979. }
  42980. }
  42981. #endif /* INCLUDE_vTaskDelete */
  42982. }
  42983. 8011d80: bf00 nop
  42984. 8011d82: bf00 nop
  42985. 8011d84: 3708 adds r7, #8
  42986. 8011d86: 46bd mov sp, r7
  42987. 8011d88: bd80 pop {r7, pc}
  42988. 8011d8a: bf00 nop
  42989. 8011d8c: 2400289c .word 0x2400289c
  42990. 8011d90: 240028c8 .word 0x240028c8
  42991. 8011d94: 240028b0 .word 0x240028b0
  42992. 08011d98 <prvDeleteTCB>:
  42993. /*-----------------------------------------------------------*/
  42994. #if ( INCLUDE_vTaskDelete == 1 )
  42995. static void prvDeleteTCB( TCB_t *pxTCB )
  42996. {
  42997. 8011d98: b580 push {r7, lr}
  42998. 8011d9a: b084 sub sp, #16
  42999. 8011d9c: af00 add r7, sp, #0
  43000. 8011d9e: 6078 str r0, [r7, #4]
  43001. to the task to free any memory allocated at the application level.
  43002. See the third party link http://www.nadler.com/embedded/newlibAndFreeRTOS.html
  43003. for additional information. */
  43004. #if ( configUSE_NEWLIB_REENTRANT == 1 )
  43005. {
  43006. _reclaim_reent( &( pxTCB->xNewLib_reent ) );
  43007. 8011da0: 687b ldr r3, [r7, #4]
  43008. 8011da2: 3354 adds r3, #84 @ 0x54
  43009. 8011da4: 4618 mov r0, r3
  43010. 8011da6: f001 fd37 bl 8013818 <_reclaim_reent>
  43011. #elif( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 ) /*lint !e731 !e9029 Macro has been consolidated for readability reasons. */
  43012. {
  43013. /* The task could have been allocated statically or dynamically, so
  43014. check what was statically allocated before trying to free the
  43015. memory. */
  43016. if( pxTCB->ucStaticallyAllocated == tskDYNAMICALLY_ALLOCATED_STACK_AND_TCB )
  43017. 8011daa: 687b ldr r3, [r7, #4]
  43018. 8011dac: f893 30a5 ldrb.w r3, [r3, #165] @ 0xa5
  43019. 8011db0: 2b00 cmp r3, #0
  43020. 8011db2: d108 bne.n 8011dc6 <prvDeleteTCB+0x2e>
  43021. {
  43022. /* Both the stack and TCB were allocated dynamically, so both
  43023. must be freed. */
  43024. vPortFree( pxTCB->pxStack );
  43025. 8011db4: 687b ldr r3, [r7, #4]
  43026. 8011db6: 6b1b ldr r3, [r3, #48] @ 0x30
  43027. 8011db8: 4618 mov r0, r3
  43028. 8011dba: f001 fadd bl 8013378 <vPortFree>
  43029. vPortFree( pxTCB );
  43030. 8011dbe: 6878 ldr r0, [r7, #4]
  43031. 8011dc0: f001 fada bl 8013378 <vPortFree>
  43032. configASSERT( pxTCB->ucStaticallyAllocated == tskSTATICALLY_ALLOCATED_STACK_AND_TCB );
  43033. mtCOVERAGE_TEST_MARKER();
  43034. }
  43035. }
  43036. #endif /* configSUPPORT_DYNAMIC_ALLOCATION */
  43037. }
  43038. 8011dc4: e019 b.n 8011dfa <prvDeleteTCB+0x62>
  43039. else if( pxTCB->ucStaticallyAllocated == tskSTATICALLY_ALLOCATED_STACK_ONLY )
  43040. 8011dc6: 687b ldr r3, [r7, #4]
  43041. 8011dc8: f893 30a5 ldrb.w r3, [r3, #165] @ 0xa5
  43042. 8011dcc: 2b01 cmp r3, #1
  43043. 8011dce: d103 bne.n 8011dd8 <prvDeleteTCB+0x40>
  43044. vPortFree( pxTCB );
  43045. 8011dd0: 6878 ldr r0, [r7, #4]
  43046. 8011dd2: f001 fad1 bl 8013378 <vPortFree>
  43047. }
  43048. 8011dd6: e010 b.n 8011dfa <prvDeleteTCB+0x62>
  43049. configASSERT( pxTCB->ucStaticallyAllocated == tskSTATICALLY_ALLOCATED_STACK_AND_TCB );
  43050. 8011dd8: 687b ldr r3, [r7, #4]
  43051. 8011dda: f893 30a5 ldrb.w r3, [r3, #165] @ 0xa5
  43052. 8011dde: 2b02 cmp r3, #2
  43053. 8011de0: d00b beq.n 8011dfa <prvDeleteTCB+0x62>
  43054. __asm volatile
  43055. 8011de2: f04f 0350 mov.w r3, #80 @ 0x50
  43056. 8011de6: f383 8811 msr BASEPRI, r3
  43057. 8011dea: f3bf 8f6f isb sy
  43058. 8011dee: f3bf 8f4f dsb sy
  43059. 8011df2: 60fb str r3, [r7, #12]
  43060. }
  43061. 8011df4: bf00 nop
  43062. 8011df6: bf00 nop
  43063. 8011df8: e7fd b.n 8011df6 <prvDeleteTCB+0x5e>
  43064. }
  43065. 8011dfa: bf00 nop
  43066. 8011dfc: 3710 adds r7, #16
  43067. 8011dfe: 46bd mov sp, r7
  43068. 8011e00: bd80 pop {r7, pc}
  43069. ...
  43070. 08011e04 <prvResetNextTaskUnblockTime>:
  43071. #endif /* INCLUDE_vTaskDelete */
  43072. /*-----------------------------------------------------------*/
  43073. static void prvResetNextTaskUnblockTime( void )
  43074. {
  43075. 8011e04: b480 push {r7}
  43076. 8011e06: b083 sub sp, #12
  43077. 8011e08: af00 add r7, sp, #0
  43078. TCB_t *pxTCB;
  43079. if( listLIST_IS_EMPTY( pxDelayedTaskList ) != pdFALSE )
  43080. 8011e0a: 4b0c ldr r3, [pc, #48] @ (8011e3c <prvResetNextTaskUnblockTime+0x38>)
  43081. 8011e0c: 681b ldr r3, [r3, #0]
  43082. 8011e0e: 681b ldr r3, [r3, #0]
  43083. 8011e10: 2b00 cmp r3, #0
  43084. 8011e12: d104 bne.n 8011e1e <prvResetNextTaskUnblockTime+0x1a>
  43085. {
  43086. /* The new current delayed list is empty. Set xNextTaskUnblockTime to
  43087. the maximum possible value so it is extremely unlikely that the
  43088. if( xTickCount >= xNextTaskUnblockTime ) test will pass until
  43089. there is an item in the delayed list. */
  43090. xNextTaskUnblockTime = portMAX_DELAY;
  43091. 8011e14: 4b0a ldr r3, [pc, #40] @ (8011e40 <prvResetNextTaskUnblockTime+0x3c>)
  43092. 8011e16: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
  43093. 8011e1a: 601a str r2, [r3, #0]
  43094. which the task at the head of the delayed list should be removed
  43095. from the Blocked state. */
  43096. ( 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. */
  43097. xNextTaskUnblockTime = listGET_LIST_ITEM_VALUE( &( ( pxTCB )->xStateListItem ) );
  43098. }
  43099. }
  43100. 8011e1c: e008 b.n 8011e30 <prvResetNextTaskUnblockTime+0x2c>
  43101. ( 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. */
  43102. 8011e1e: 4b07 ldr r3, [pc, #28] @ (8011e3c <prvResetNextTaskUnblockTime+0x38>)
  43103. 8011e20: 681b ldr r3, [r3, #0]
  43104. 8011e22: 68db ldr r3, [r3, #12]
  43105. 8011e24: 68db ldr r3, [r3, #12]
  43106. 8011e26: 607b str r3, [r7, #4]
  43107. xNextTaskUnblockTime = listGET_LIST_ITEM_VALUE( &( ( pxTCB )->xStateListItem ) );
  43108. 8011e28: 687b ldr r3, [r7, #4]
  43109. 8011e2a: 685b ldr r3, [r3, #4]
  43110. 8011e2c: 4a04 ldr r2, [pc, #16] @ (8011e40 <prvResetNextTaskUnblockTime+0x3c>)
  43111. 8011e2e: 6013 str r3, [r2, #0]
  43112. }
  43113. 8011e30: bf00 nop
  43114. 8011e32: 370c adds r7, #12
  43115. 8011e34: 46bd mov sp, r7
  43116. 8011e36: f85d 7b04 ldr.w r7, [sp], #4
  43117. 8011e3a: 4770 bx lr
  43118. 8011e3c: 24002880 .word 0x24002880
  43119. 8011e40: 240028e8 .word 0x240028e8
  43120. 08011e44 <xTaskGetCurrentTaskHandle>:
  43121. /*-----------------------------------------------------------*/
  43122. #if ( ( INCLUDE_xTaskGetCurrentTaskHandle == 1 ) || ( configUSE_MUTEXES == 1 ) )
  43123. TaskHandle_t xTaskGetCurrentTaskHandle( void )
  43124. {
  43125. 8011e44: b480 push {r7}
  43126. 8011e46: b083 sub sp, #12
  43127. 8011e48: af00 add r7, sp, #0
  43128. TaskHandle_t xReturn;
  43129. /* A critical section is not required as this is not called from
  43130. an interrupt and the current TCB will always be the same for any
  43131. individual execution thread. */
  43132. xReturn = pxCurrentTCB;
  43133. 8011e4a: 4b05 ldr r3, [pc, #20] @ (8011e60 <xTaskGetCurrentTaskHandle+0x1c>)
  43134. 8011e4c: 681b ldr r3, [r3, #0]
  43135. 8011e4e: 607b str r3, [r7, #4]
  43136. return xReturn;
  43137. 8011e50: 687b ldr r3, [r7, #4]
  43138. }
  43139. 8011e52: 4618 mov r0, r3
  43140. 8011e54: 370c adds r7, #12
  43141. 8011e56: 46bd mov sp, r7
  43142. 8011e58: f85d 7b04 ldr.w r7, [sp], #4
  43143. 8011e5c: 4770 bx lr
  43144. 8011e5e: bf00 nop
  43145. 8011e60: 240023f4 .word 0x240023f4
  43146. 08011e64 <xTaskGetSchedulerState>:
  43147. /*-----------------------------------------------------------*/
  43148. #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
  43149. BaseType_t xTaskGetSchedulerState( void )
  43150. {
  43151. 8011e64: b480 push {r7}
  43152. 8011e66: b083 sub sp, #12
  43153. 8011e68: af00 add r7, sp, #0
  43154. BaseType_t xReturn;
  43155. if( xSchedulerRunning == pdFALSE )
  43156. 8011e6a: 4b0b ldr r3, [pc, #44] @ (8011e98 <xTaskGetSchedulerState+0x34>)
  43157. 8011e6c: 681b ldr r3, [r3, #0]
  43158. 8011e6e: 2b00 cmp r3, #0
  43159. 8011e70: d102 bne.n 8011e78 <xTaskGetSchedulerState+0x14>
  43160. {
  43161. xReturn = taskSCHEDULER_NOT_STARTED;
  43162. 8011e72: 2301 movs r3, #1
  43163. 8011e74: 607b str r3, [r7, #4]
  43164. 8011e76: e008 b.n 8011e8a <xTaskGetSchedulerState+0x26>
  43165. }
  43166. else
  43167. {
  43168. if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE )
  43169. 8011e78: 4b08 ldr r3, [pc, #32] @ (8011e9c <xTaskGetSchedulerState+0x38>)
  43170. 8011e7a: 681b ldr r3, [r3, #0]
  43171. 8011e7c: 2b00 cmp r3, #0
  43172. 8011e7e: d102 bne.n 8011e86 <xTaskGetSchedulerState+0x22>
  43173. {
  43174. xReturn = taskSCHEDULER_RUNNING;
  43175. 8011e80: 2302 movs r3, #2
  43176. 8011e82: 607b str r3, [r7, #4]
  43177. 8011e84: e001 b.n 8011e8a <xTaskGetSchedulerState+0x26>
  43178. }
  43179. else
  43180. {
  43181. xReturn = taskSCHEDULER_SUSPENDED;
  43182. 8011e86: 2300 movs r3, #0
  43183. 8011e88: 607b str r3, [r7, #4]
  43184. }
  43185. }
  43186. return xReturn;
  43187. 8011e8a: 687b ldr r3, [r7, #4]
  43188. }
  43189. 8011e8c: 4618 mov r0, r3
  43190. 8011e8e: 370c adds r7, #12
  43191. 8011e90: 46bd mov sp, r7
  43192. 8011e92: f85d 7b04 ldr.w r7, [sp], #4
  43193. 8011e96: 4770 bx lr
  43194. 8011e98: 240028d4 .word 0x240028d4
  43195. 8011e9c: 240028f0 .word 0x240028f0
  43196. 08011ea0 <xTaskPriorityInherit>:
  43197. /*-----------------------------------------------------------*/
  43198. #if ( configUSE_MUTEXES == 1 )
  43199. BaseType_t xTaskPriorityInherit( TaskHandle_t const pxMutexHolder )
  43200. {
  43201. 8011ea0: b580 push {r7, lr}
  43202. 8011ea2: b084 sub sp, #16
  43203. 8011ea4: af00 add r7, sp, #0
  43204. 8011ea6: 6078 str r0, [r7, #4]
  43205. TCB_t * const pxMutexHolderTCB = pxMutexHolder;
  43206. 8011ea8: 687b ldr r3, [r7, #4]
  43207. 8011eaa: 60bb str r3, [r7, #8]
  43208. BaseType_t xReturn = pdFALSE;
  43209. 8011eac: 2300 movs r3, #0
  43210. 8011eae: 60fb str r3, [r7, #12]
  43211. /* If the mutex was given back by an interrupt while the queue was
  43212. locked then the mutex holder might now be NULL. _RB_ Is this still
  43213. needed as interrupts can no longer use mutexes? */
  43214. if( pxMutexHolder != NULL )
  43215. 8011eb0: 687b ldr r3, [r7, #4]
  43216. 8011eb2: 2b00 cmp r3, #0
  43217. 8011eb4: d051 beq.n 8011f5a <xTaskPriorityInherit+0xba>
  43218. {
  43219. /* If the holder of the mutex has a priority below the priority of
  43220. the task attempting to obtain the mutex then it will temporarily
  43221. inherit the priority of the task attempting to obtain the mutex. */
  43222. if( pxMutexHolderTCB->uxPriority < pxCurrentTCB->uxPriority )
  43223. 8011eb6: 68bb ldr r3, [r7, #8]
  43224. 8011eb8: 6ada ldr r2, [r3, #44] @ 0x2c
  43225. 8011eba: 4b2a ldr r3, [pc, #168] @ (8011f64 <xTaskPriorityInherit+0xc4>)
  43226. 8011ebc: 681b ldr r3, [r3, #0]
  43227. 8011ebe: 6adb ldr r3, [r3, #44] @ 0x2c
  43228. 8011ec0: 429a cmp r2, r3
  43229. 8011ec2: d241 bcs.n 8011f48 <xTaskPriorityInherit+0xa8>
  43230. {
  43231. /* Adjust the mutex holder state to account for its new
  43232. priority. Only reset the event list item value if the value is
  43233. not being used for anything else. */
  43234. if( ( listGET_LIST_ITEM_VALUE( &( pxMutexHolderTCB->xEventListItem ) ) & taskEVENT_LIST_ITEM_VALUE_IN_USE ) == 0UL )
  43235. 8011ec4: 68bb ldr r3, [r7, #8]
  43236. 8011ec6: 699b ldr r3, [r3, #24]
  43237. 8011ec8: 2b00 cmp r3, #0
  43238. 8011eca: db06 blt.n 8011eda <xTaskPriorityInherit+0x3a>
  43239. {
  43240. 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. */
  43241. 8011ecc: 4b25 ldr r3, [pc, #148] @ (8011f64 <xTaskPriorityInherit+0xc4>)
  43242. 8011ece: 681b ldr r3, [r3, #0]
  43243. 8011ed0: 6adb ldr r3, [r3, #44] @ 0x2c
  43244. 8011ed2: f1c3 0238 rsb r2, r3, #56 @ 0x38
  43245. 8011ed6: 68bb ldr r3, [r7, #8]
  43246. 8011ed8: 619a str r2, [r3, #24]
  43247. mtCOVERAGE_TEST_MARKER();
  43248. }
  43249. /* If the task being modified is in the ready state it will need
  43250. to be moved into a new list. */
  43251. if( listIS_CONTAINED_WITHIN( &( pxReadyTasksLists[ pxMutexHolderTCB->uxPriority ] ), &( pxMutexHolderTCB->xStateListItem ) ) != pdFALSE )
  43252. 8011eda: 68bb ldr r3, [r7, #8]
  43253. 8011edc: 6959 ldr r1, [r3, #20]
  43254. 8011ede: 68bb ldr r3, [r7, #8]
  43255. 8011ee0: 6ada ldr r2, [r3, #44] @ 0x2c
  43256. 8011ee2: 4613 mov r3, r2
  43257. 8011ee4: 009b lsls r3, r3, #2
  43258. 8011ee6: 4413 add r3, r2
  43259. 8011ee8: 009b lsls r3, r3, #2
  43260. 8011eea: 4a1f ldr r2, [pc, #124] @ (8011f68 <xTaskPriorityInherit+0xc8>)
  43261. 8011eec: 4413 add r3, r2
  43262. 8011eee: 4299 cmp r1, r3
  43263. 8011ef0: d122 bne.n 8011f38 <xTaskPriorityInherit+0x98>
  43264. {
  43265. if( uxListRemove( &( pxMutexHolderTCB->xStateListItem ) ) == ( UBaseType_t ) 0 )
  43266. 8011ef2: 68bb ldr r3, [r7, #8]
  43267. 8011ef4: 3304 adds r3, #4
  43268. 8011ef6: 4618 mov r0, r3
  43269. 8011ef8: f7fd ff96 bl 800fe28 <uxListRemove>
  43270. {
  43271. mtCOVERAGE_TEST_MARKER();
  43272. }
  43273. /* Inherit the priority before being moved into the new list. */
  43274. pxMutexHolderTCB->uxPriority = pxCurrentTCB->uxPriority;
  43275. 8011efc: 4b19 ldr r3, [pc, #100] @ (8011f64 <xTaskPriorityInherit+0xc4>)
  43276. 8011efe: 681b ldr r3, [r3, #0]
  43277. 8011f00: 6ada ldr r2, [r3, #44] @ 0x2c
  43278. 8011f02: 68bb ldr r3, [r7, #8]
  43279. 8011f04: 62da str r2, [r3, #44] @ 0x2c
  43280. prvAddTaskToReadyList( pxMutexHolderTCB );
  43281. 8011f06: 68bb ldr r3, [r7, #8]
  43282. 8011f08: 6ada ldr r2, [r3, #44] @ 0x2c
  43283. 8011f0a: 4b18 ldr r3, [pc, #96] @ (8011f6c <xTaskPriorityInherit+0xcc>)
  43284. 8011f0c: 681b ldr r3, [r3, #0]
  43285. 8011f0e: 429a cmp r2, r3
  43286. 8011f10: d903 bls.n 8011f1a <xTaskPriorityInherit+0x7a>
  43287. 8011f12: 68bb ldr r3, [r7, #8]
  43288. 8011f14: 6adb ldr r3, [r3, #44] @ 0x2c
  43289. 8011f16: 4a15 ldr r2, [pc, #84] @ (8011f6c <xTaskPriorityInherit+0xcc>)
  43290. 8011f18: 6013 str r3, [r2, #0]
  43291. 8011f1a: 68bb ldr r3, [r7, #8]
  43292. 8011f1c: 6ada ldr r2, [r3, #44] @ 0x2c
  43293. 8011f1e: 4613 mov r3, r2
  43294. 8011f20: 009b lsls r3, r3, #2
  43295. 8011f22: 4413 add r3, r2
  43296. 8011f24: 009b lsls r3, r3, #2
  43297. 8011f26: 4a10 ldr r2, [pc, #64] @ (8011f68 <xTaskPriorityInherit+0xc8>)
  43298. 8011f28: 441a add r2, r3
  43299. 8011f2a: 68bb ldr r3, [r7, #8]
  43300. 8011f2c: 3304 adds r3, #4
  43301. 8011f2e: 4619 mov r1, r3
  43302. 8011f30: 4610 mov r0, r2
  43303. 8011f32: f7fd ff1c bl 800fd6e <vListInsertEnd>
  43304. 8011f36: e004 b.n 8011f42 <xTaskPriorityInherit+0xa2>
  43305. }
  43306. else
  43307. {
  43308. /* Just inherit the priority. */
  43309. pxMutexHolderTCB->uxPriority = pxCurrentTCB->uxPriority;
  43310. 8011f38: 4b0a ldr r3, [pc, #40] @ (8011f64 <xTaskPriorityInherit+0xc4>)
  43311. 8011f3a: 681b ldr r3, [r3, #0]
  43312. 8011f3c: 6ada ldr r2, [r3, #44] @ 0x2c
  43313. 8011f3e: 68bb ldr r3, [r7, #8]
  43314. 8011f40: 62da str r2, [r3, #44] @ 0x2c
  43315. }
  43316. traceTASK_PRIORITY_INHERIT( pxMutexHolderTCB, pxCurrentTCB->uxPriority );
  43317. /* Inheritance occurred. */
  43318. xReturn = pdTRUE;
  43319. 8011f42: 2301 movs r3, #1
  43320. 8011f44: 60fb str r3, [r7, #12]
  43321. 8011f46: e008 b.n 8011f5a <xTaskPriorityInherit+0xba>
  43322. }
  43323. else
  43324. {
  43325. if( pxMutexHolderTCB->uxBasePriority < pxCurrentTCB->uxPriority )
  43326. 8011f48: 68bb ldr r3, [r7, #8]
  43327. 8011f4a: 6cda ldr r2, [r3, #76] @ 0x4c
  43328. 8011f4c: 4b05 ldr r3, [pc, #20] @ (8011f64 <xTaskPriorityInherit+0xc4>)
  43329. 8011f4e: 681b ldr r3, [r3, #0]
  43330. 8011f50: 6adb ldr r3, [r3, #44] @ 0x2c
  43331. 8011f52: 429a cmp r2, r3
  43332. 8011f54: d201 bcs.n 8011f5a <xTaskPriorityInherit+0xba>
  43333. current priority of the mutex holder is not lower than the
  43334. priority of the task attempting to take the mutex.
  43335. Therefore the mutex holder must have already inherited a
  43336. priority, but inheritance would have occurred if that had
  43337. not been the case. */
  43338. xReturn = pdTRUE;
  43339. 8011f56: 2301 movs r3, #1
  43340. 8011f58: 60fb str r3, [r7, #12]
  43341. else
  43342. {
  43343. mtCOVERAGE_TEST_MARKER();
  43344. }
  43345. return xReturn;
  43346. 8011f5a: 68fb ldr r3, [r7, #12]
  43347. }
  43348. 8011f5c: 4618 mov r0, r3
  43349. 8011f5e: 3710 adds r7, #16
  43350. 8011f60: 46bd mov sp, r7
  43351. 8011f62: bd80 pop {r7, pc}
  43352. 8011f64: 240023f4 .word 0x240023f4
  43353. 8011f68: 240023f8 .word 0x240023f8
  43354. 8011f6c: 240028d0 .word 0x240028d0
  43355. 08011f70 <xTaskPriorityDisinherit>:
  43356. /*-----------------------------------------------------------*/
  43357. #if ( configUSE_MUTEXES == 1 )
  43358. BaseType_t xTaskPriorityDisinherit( TaskHandle_t const pxMutexHolder )
  43359. {
  43360. 8011f70: b580 push {r7, lr}
  43361. 8011f72: b086 sub sp, #24
  43362. 8011f74: af00 add r7, sp, #0
  43363. 8011f76: 6078 str r0, [r7, #4]
  43364. TCB_t * const pxTCB = pxMutexHolder;
  43365. 8011f78: 687b ldr r3, [r7, #4]
  43366. 8011f7a: 613b str r3, [r7, #16]
  43367. BaseType_t xReturn = pdFALSE;
  43368. 8011f7c: 2300 movs r3, #0
  43369. 8011f7e: 617b str r3, [r7, #20]
  43370. if( pxMutexHolder != NULL )
  43371. 8011f80: 687b ldr r3, [r7, #4]
  43372. 8011f82: 2b00 cmp r3, #0
  43373. 8011f84: d058 beq.n 8012038 <xTaskPriorityDisinherit+0xc8>
  43374. {
  43375. /* A task can only have an inherited priority if it holds the mutex.
  43376. If the mutex is held by a task then it cannot be given from an
  43377. interrupt, and if a mutex is given by the holding task then it must
  43378. be the running state task. */
  43379. configASSERT( pxTCB == pxCurrentTCB );
  43380. 8011f86: 4b2f ldr r3, [pc, #188] @ (8012044 <xTaskPriorityDisinherit+0xd4>)
  43381. 8011f88: 681b ldr r3, [r3, #0]
  43382. 8011f8a: 693a ldr r2, [r7, #16]
  43383. 8011f8c: 429a cmp r2, r3
  43384. 8011f8e: d00b beq.n 8011fa8 <xTaskPriorityDisinherit+0x38>
  43385. __asm volatile
  43386. 8011f90: f04f 0350 mov.w r3, #80 @ 0x50
  43387. 8011f94: f383 8811 msr BASEPRI, r3
  43388. 8011f98: f3bf 8f6f isb sy
  43389. 8011f9c: f3bf 8f4f dsb sy
  43390. 8011fa0: 60fb str r3, [r7, #12]
  43391. }
  43392. 8011fa2: bf00 nop
  43393. 8011fa4: bf00 nop
  43394. 8011fa6: e7fd b.n 8011fa4 <xTaskPriorityDisinherit+0x34>
  43395. configASSERT( pxTCB->uxMutexesHeld );
  43396. 8011fa8: 693b ldr r3, [r7, #16]
  43397. 8011faa: 6d1b ldr r3, [r3, #80] @ 0x50
  43398. 8011fac: 2b00 cmp r3, #0
  43399. 8011fae: d10b bne.n 8011fc8 <xTaskPriorityDisinherit+0x58>
  43400. __asm volatile
  43401. 8011fb0: f04f 0350 mov.w r3, #80 @ 0x50
  43402. 8011fb4: f383 8811 msr BASEPRI, r3
  43403. 8011fb8: f3bf 8f6f isb sy
  43404. 8011fbc: f3bf 8f4f dsb sy
  43405. 8011fc0: 60bb str r3, [r7, #8]
  43406. }
  43407. 8011fc2: bf00 nop
  43408. 8011fc4: bf00 nop
  43409. 8011fc6: e7fd b.n 8011fc4 <xTaskPriorityDisinherit+0x54>
  43410. ( pxTCB->uxMutexesHeld )--;
  43411. 8011fc8: 693b ldr r3, [r7, #16]
  43412. 8011fca: 6d1b ldr r3, [r3, #80] @ 0x50
  43413. 8011fcc: 1e5a subs r2, r3, #1
  43414. 8011fce: 693b ldr r3, [r7, #16]
  43415. 8011fd0: 651a str r2, [r3, #80] @ 0x50
  43416. /* Has the holder of the mutex inherited the priority of another
  43417. task? */
  43418. if( pxTCB->uxPriority != pxTCB->uxBasePriority )
  43419. 8011fd2: 693b ldr r3, [r7, #16]
  43420. 8011fd4: 6ada ldr r2, [r3, #44] @ 0x2c
  43421. 8011fd6: 693b ldr r3, [r7, #16]
  43422. 8011fd8: 6cdb ldr r3, [r3, #76] @ 0x4c
  43423. 8011fda: 429a cmp r2, r3
  43424. 8011fdc: d02c beq.n 8012038 <xTaskPriorityDisinherit+0xc8>
  43425. {
  43426. /* Only disinherit if no other mutexes are held. */
  43427. if( pxTCB->uxMutexesHeld == ( UBaseType_t ) 0 )
  43428. 8011fde: 693b ldr r3, [r7, #16]
  43429. 8011fe0: 6d1b ldr r3, [r3, #80] @ 0x50
  43430. 8011fe2: 2b00 cmp r3, #0
  43431. 8011fe4: d128 bne.n 8012038 <xTaskPriorityDisinherit+0xc8>
  43432. /* A task can only have an inherited priority if it holds
  43433. the mutex. If the mutex is held by a task then it cannot be
  43434. given from an interrupt, and if a mutex is given by the
  43435. holding task then it must be the running state task. Remove
  43436. the holding task from the ready/delayed list. */
  43437. if( uxListRemove( &( pxTCB->xStateListItem ) ) == ( UBaseType_t ) 0 )
  43438. 8011fe6: 693b ldr r3, [r7, #16]
  43439. 8011fe8: 3304 adds r3, #4
  43440. 8011fea: 4618 mov r0, r3
  43441. 8011fec: f7fd ff1c bl 800fe28 <uxListRemove>
  43442. }
  43443. /* Disinherit the priority before adding the task into the
  43444. new ready list. */
  43445. traceTASK_PRIORITY_DISINHERIT( pxTCB, pxTCB->uxBasePriority );
  43446. pxTCB->uxPriority = pxTCB->uxBasePriority;
  43447. 8011ff0: 693b ldr r3, [r7, #16]
  43448. 8011ff2: 6cda ldr r2, [r3, #76] @ 0x4c
  43449. 8011ff4: 693b ldr r3, [r7, #16]
  43450. 8011ff6: 62da str r2, [r3, #44] @ 0x2c
  43451. /* Reset the event list item value. It cannot be in use for
  43452. any other purpose if this task is running, and it must be
  43453. running to give back the mutex. */
  43454. 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. */
  43455. 8011ff8: 693b ldr r3, [r7, #16]
  43456. 8011ffa: 6adb ldr r3, [r3, #44] @ 0x2c
  43457. 8011ffc: f1c3 0238 rsb r2, r3, #56 @ 0x38
  43458. 8012000: 693b ldr r3, [r7, #16]
  43459. 8012002: 619a str r2, [r3, #24]
  43460. prvAddTaskToReadyList( pxTCB );
  43461. 8012004: 693b ldr r3, [r7, #16]
  43462. 8012006: 6ada ldr r2, [r3, #44] @ 0x2c
  43463. 8012008: 4b0f ldr r3, [pc, #60] @ (8012048 <xTaskPriorityDisinherit+0xd8>)
  43464. 801200a: 681b ldr r3, [r3, #0]
  43465. 801200c: 429a cmp r2, r3
  43466. 801200e: d903 bls.n 8012018 <xTaskPriorityDisinherit+0xa8>
  43467. 8012010: 693b ldr r3, [r7, #16]
  43468. 8012012: 6adb ldr r3, [r3, #44] @ 0x2c
  43469. 8012014: 4a0c ldr r2, [pc, #48] @ (8012048 <xTaskPriorityDisinherit+0xd8>)
  43470. 8012016: 6013 str r3, [r2, #0]
  43471. 8012018: 693b ldr r3, [r7, #16]
  43472. 801201a: 6ada ldr r2, [r3, #44] @ 0x2c
  43473. 801201c: 4613 mov r3, r2
  43474. 801201e: 009b lsls r3, r3, #2
  43475. 8012020: 4413 add r3, r2
  43476. 8012022: 009b lsls r3, r3, #2
  43477. 8012024: 4a09 ldr r2, [pc, #36] @ (801204c <xTaskPriorityDisinherit+0xdc>)
  43478. 8012026: 441a add r2, r3
  43479. 8012028: 693b ldr r3, [r7, #16]
  43480. 801202a: 3304 adds r3, #4
  43481. 801202c: 4619 mov r1, r3
  43482. 801202e: 4610 mov r0, r2
  43483. 8012030: f7fd fe9d bl 800fd6e <vListInsertEnd>
  43484. in an order different to that in which they were taken.
  43485. If a context switch did not occur when the first mutex was
  43486. returned, even if a task was waiting on it, then a context
  43487. switch should occur when the last mutex is returned whether
  43488. a task is waiting on it or not. */
  43489. xReturn = pdTRUE;
  43490. 8012034: 2301 movs r3, #1
  43491. 8012036: 617b str r3, [r7, #20]
  43492. else
  43493. {
  43494. mtCOVERAGE_TEST_MARKER();
  43495. }
  43496. return xReturn;
  43497. 8012038: 697b ldr r3, [r7, #20]
  43498. }
  43499. 801203a: 4618 mov r0, r3
  43500. 801203c: 3718 adds r7, #24
  43501. 801203e: 46bd mov sp, r7
  43502. 8012040: bd80 pop {r7, pc}
  43503. 8012042: bf00 nop
  43504. 8012044: 240023f4 .word 0x240023f4
  43505. 8012048: 240028d0 .word 0x240028d0
  43506. 801204c: 240023f8 .word 0x240023f8
  43507. 08012050 <vTaskPriorityDisinheritAfterTimeout>:
  43508. /*-----------------------------------------------------------*/
  43509. #if ( configUSE_MUTEXES == 1 )
  43510. void vTaskPriorityDisinheritAfterTimeout( TaskHandle_t const pxMutexHolder, UBaseType_t uxHighestPriorityWaitingTask )
  43511. {
  43512. 8012050: b580 push {r7, lr}
  43513. 8012052: b088 sub sp, #32
  43514. 8012054: af00 add r7, sp, #0
  43515. 8012056: 6078 str r0, [r7, #4]
  43516. 8012058: 6039 str r1, [r7, #0]
  43517. TCB_t * const pxTCB = pxMutexHolder;
  43518. 801205a: 687b ldr r3, [r7, #4]
  43519. 801205c: 61bb str r3, [r7, #24]
  43520. UBaseType_t uxPriorityUsedOnEntry, uxPriorityToUse;
  43521. const UBaseType_t uxOnlyOneMutexHeld = ( UBaseType_t ) 1;
  43522. 801205e: 2301 movs r3, #1
  43523. 8012060: 617b str r3, [r7, #20]
  43524. if( pxMutexHolder != NULL )
  43525. 8012062: 687b ldr r3, [r7, #4]
  43526. 8012064: 2b00 cmp r3, #0
  43527. 8012066: d06c beq.n 8012142 <vTaskPriorityDisinheritAfterTimeout+0xf2>
  43528. {
  43529. /* If pxMutexHolder is not NULL then the holder must hold at least
  43530. one mutex. */
  43531. configASSERT( pxTCB->uxMutexesHeld );
  43532. 8012068: 69bb ldr r3, [r7, #24]
  43533. 801206a: 6d1b ldr r3, [r3, #80] @ 0x50
  43534. 801206c: 2b00 cmp r3, #0
  43535. 801206e: d10b bne.n 8012088 <vTaskPriorityDisinheritAfterTimeout+0x38>
  43536. __asm volatile
  43537. 8012070: f04f 0350 mov.w r3, #80 @ 0x50
  43538. 8012074: f383 8811 msr BASEPRI, r3
  43539. 8012078: f3bf 8f6f isb sy
  43540. 801207c: f3bf 8f4f dsb sy
  43541. 8012080: 60fb str r3, [r7, #12]
  43542. }
  43543. 8012082: bf00 nop
  43544. 8012084: bf00 nop
  43545. 8012086: e7fd b.n 8012084 <vTaskPriorityDisinheritAfterTimeout+0x34>
  43546. /* Determine the priority to which the priority of the task that
  43547. holds the mutex should be set. This will be the greater of the
  43548. holding task's base priority and the priority of the highest
  43549. priority task that is waiting to obtain the mutex. */
  43550. if( pxTCB->uxBasePriority < uxHighestPriorityWaitingTask )
  43551. 8012088: 69bb ldr r3, [r7, #24]
  43552. 801208a: 6cdb ldr r3, [r3, #76] @ 0x4c
  43553. 801208c: 683a ldr r2, [r7, #0]
  43554. 801208e: 429a cmp r2, r3
  43555. 8012090: d902 bls.n 8012098 <vTaskPriorityDisinheritAfterTimeout+0x48>
  43556. {
  43557. uxPriorityToUse = uxHighestPriorityWaitingTask;
  43558. 8012092: 683b ldr r3, [r7, #0]
  43559. 8012094: 61fb str r3, [r7, #28]
  43560. 8012096: e002 b.n 801209e <vTaskPriorityDisinheritAfterTimeout+0x4e>
  43561. }
  43562. else
  43563. {
  43564. uxPriorityToUse = pxTCB->uxBasePriority;
  43565. 8012098: 69bb ldr r3, [r7, #24]
  43566. 801209a: 6cdb ldr r3, [r3, #76] @ 0x4c
  43567. 801209c: 61fb str r3, [r7, #28]
  43568. }
  43569. /* Does the priority need to change? */
  43570. if( pxTCB->uxPriority != uxPriorityToUse )
  43571. 801209e: 69bb ldr r3, [r7, #24]
  43572. 80120a0: 6adb ldr r3, [r3, #44] @ 0x2c
  43573. 80120a2: 69fa ldr r2, [r7, #28]
  43574. 80120a4: 429a cmp r2, r3
  43575. 80120a6: d04c beq.n 8012142 <vTaskPriorityDisinheritAfterTimeout+0xf2>
  43576. {
  43577. /* Only disinherit if no other mutexes are held. This is a
  43578. simplification in the priority inheritance implementation. If
  43579. the task that holds the mutex is also holding other mutexes then
  43580. the other mutexes may have caused the priority inheritance. */
  43581. if( pxTCB->uxMutexesHeld == uxOnlyOneMutexHeld )
  43582. 80120a8: 69bb ldr r3, [r7, #24]
  43583. 80120aa: 6d1b ldr r3, [r3, #80] @ 0x50
  43584. 80120ac: 697a ldr r2, [r7, #20]
  43585. 80120ae: 429a cmp r2, r3
  43586. 80120b0: d147 bne.n 8012142 <vTaskPriorityDisinheritAfterTimeout+0xf2>
  43587. {
  43588. /* If a task has timed out because it already holds the
  43589. mutex it was trying to obtain then it cannot of inherited
  43590. its own priority. */
  43591. configASSERT( pxTCB != pxCurrentTCB );
  43592. 80120b2: 4b26 ldr r3, [pc, #152] @ (801214c <vTaskPriorityDisinheritAfterTimeout+0xfc>)
  43593. 80120b4: 681b ldr r3, [r3, #0]
  43594. 80120b6: 69ba ldr r2, [r7, #24]
  43595. 80120b8: 429a cmp r2, r3
  43596. 80120ba: d10b bne.n 80120d4 <vTaskPriorityDisinheritAfterTimeout+0x84>
  43597. __asm volatile
  43598. 80120bc: f04f 0350 mov.w r3, #80 @ 0x50
  43599. 80120c0: f383 8811 msr BASEPRI, r3
  43600. 80120c4: f3bf 8f6f isb sy
  43601. 80120c8: f3bf 8f4f dsb sy
  43602. 80120cc: 60bb str r3, [r7, #8]
  43603. }
  43604. 80120ce: bf00 nop
  43605. 80120d0: bf00 nop
  43606. 80120d2: e7fd b.n 80120d0 <vTaskPriorityDisinheritAfterTimeout+0x80>
  43607. /* Disinherit the priority, remembering the previous
  43608. priority to facilitate determining the subject task's
  43609. state. */
  43610. traceTASK_PRIORITY_DISINHERIT( pxTCB, pxTCB->uxBasePriority );
  43611. uxPriorityUsedOnEntry = pxTCB->uxPriority;
  43612. 80120d4: 69bb ldr r3, [r7, #24]
  43613. 80120d6: 6adb ldr r3, [r3, #44] @ 0x2c
  43614. 80120d8: 613b str r3, [r7, #16]
  43615. pxTCB->uxPriority = uxPriorityToUse;
  43616. 80120da: 69bb ldr r3, [r7, #24]
  43617. 80120dc: 69fa ldr r2, [r7, #28]
  43618. 80120de: 62da str r2, [r3, #44] @ 0x2c
  43619. /* Only reset the event list item value if the value is not
  43620. being used for anything else. */
  43621. if( ( listGET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ) ) & taskEVENT_LIST_ITEM_VALUE_IN_USE ) == 0UL )
  43622. 80120e0: 69bb ldr r3, [r7, #24]
  43623. 80120e2: 699b ldr r3, [r3, #24]
  43624. 80120e4: 2b00 cmp r3, #0
  43625. 80120e6: db04 blt.n 80120f2 <vTaskPriorityDisinheritAfterTimeout+0xa2>
  43626. {
  43627. 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. */
  43628. 80120e8: 69fb ldr r3, [r7, #28]
  43629. 80120ea: f1c3 0238 rsb r2, r3, #56 @ 0x38
  43630. 80120ee: 69bb ldr r3, [r7, #24]
  43631. 80120f0: 619a str r2, [r3, #24]
  43632. then the task that holds the mutex could be in either the
  43633. Ready, Blocked or Suspended states. Only remove the task
  43634. from its current state list if it is in the Ready state as
  43635. the task's priority is going to change and there is one
  43636. Ready list per priority. */
  43637. if( listIS_CONTAINED_WITHIN( &( pxReadyTasksLists[ uxPriorityUsedOnEntry ] ), &( pxTCB->xStateListItem ) ) != pdFALSE )
  43638. 80120f2: 69bb ldr r3, [r7, #24]
  43639. 80120f4: 6959 ldr r1, [r3, #20]
  43640. 80120f6: 693a ldr r2, [r7, #16]
  43641. 80120f8: 4613 mov r3, r2
  43642. 80120fa: 009b lsls r3, r3, #2
  43643. 80120fc: 4413 add r3, r2
  43644. 80120fe: 009b lsls r3, r3, #2
  43645. 8012100: 4a13 ldr r2, [pc, #76] @ (8012150 <vTaskPriorityDisinheritAfterTimeout+0x100>)
  43646. 8012102: 4413 add r3, r2
  43647. 8012104: 4299 cmp r1, r3
  43648. 8012106: d11c bne.n 8012142 <vTaskPriorityDisinheritAfterTimeout+0xf2>
  43649. {
  43650. if( uxListRemove( &( pxTCB->xStateListItem ) ) == ( UBaseType_t ) 0 )
  43651. 8012108: 69bb ldr r3, [r7, #24]
  43652. 801210a: 3304 adds r3, #4
  43653. 801210c: 4618 mov r0, r3
  43654. 801210e: f7fd fe8b bl 800fe28 <uxListRemove>
  43655. else
  43656. {
  43657. mtCOVERAGE_TEST_MARKER();
  43658. }
  43659. prvAddTaskToReadyList( pxTCB );
  43660. 8012112: 69bb ldr r3, [r7, #24]
  43661. 8012114: 6ada ldr r2, [r3, #44] @ 0x2c
  43662. 8012116: 4b0f ldr r3, [pc, #60] @ (8012154 <vTaskPriorityDisinheritAfterTimeout+0x104>)
  43663. 8012118: 681b ldr r3, [r3, #0]
  43664. 801211a: 429a cmp r2, r3
  43665. 801211c: d903 bls.n 8012126 <vTaskPriorityDisinheritAfterTimeout+0xd6>
  43666. 801211e: 69bb ldr r3, [r7, #24]
  43667. 8012120: 6adb ldr r3, [r3, #44] @ 0x2c
  43668. 8012122: 4a0c ldr r2, [pc, #48] @ (8012154 <vTaskPriorityDisinheritAfterTimeout+0x104>)
  43669. 8012124: 6013 str r3, [r2, #0]
  43670. 8012126: 69bb ldr r3, [r7, #24]
  43671. 8012128: 6ada ldr r2, [r3, #44] @ 0x2c
  43672. 801212a: 4613 mov r3, r2
  43673. 801212c: 009b lsls r3, r3, #2
  43674. 801212e: 4413 add r3, r2
  43675. 8012130: 009b lsls r3, r3, #2
  43676. 8012132: 4a07 ldr r2, [pc, #28] @ (8012150 <vTaskPriorityDisinheritAfterTimeout+0x100>)
  43677. 8012134: 441a add r2, r3
  43678. 8012136: 69bb ldr r3, [r7, #24]
  43679. 8012138: 3304 adds r3, #4
  43680. 801213a: 4619 mov r1, r3
  43681. 801213c: 4610 mov r0, r2
  43682. 801213e: f7fd fe16 bl 800fd6e <vListInsertEnd>
  43683. }
  43684. else
  43685. {
  43686. mtCOVERAGE_TEST_MARKER();
  43687. }
  43688. }
  43689. 8012142: bf00 nop
  43690. 8012144: 3720 adds r7, #32
  43691. 8012146: 46bd mov sp, r7
  43692. 8012148: bd80 pop {r7, pc}
  43693. 801214a: bf00 nop
  43694. 801214c: 240023f4 .word 0x240023f4
  43695. 8012150: 240023f8 .word 0x240023f8
  43696. 8012154: 240028d0 .word 0x240028d0
  43697. 08012158 <pvTaskIncrementMutexHeldCount>:
  43698. /*-----------------------------------------------------------*/
  43699. #if ( configUSE_MUTEXES == 1 )
  43700. TaskHandle_t pvTaskIncrementMutexHeldCount( void )
  43701. {
  43702. 8012158: b480 push {r7}
  43703. 801215a: af00 add r7, sp, #0
  43704. /* If xSemaphoreCreateMutex() is called before any tasks have been created
  43705. then pxCurrentTCB will be NULL. */
  43706. if( pxCurrentTCB != NULL )
  43707. 801215c: 4b07 ldr r3, [pc, #28] @ (801217c <pvTaskIncrementMutexHeldCount+0x24>)
  43708. 801215e: 681b ldr r3, [r3, #0]
  43709. 8012160: 2b00 cmp r3, #0
  43710. 8012162: d004 beq.n 801216e <pvTaskIncrementMutexHeldCount+0x16>
  43711. {
  43712. ( pxCurrentTCB->uxMutexesHeld )++;
  43713. 8012164: 4b05 ldr r3, [pc, #20] @ (801217c <pvTaskIncrementMutexHeldCount+0x24>)
  43714. 8012166: 681b ldr r3, [r3, #0]
  43715. 8012168: 6d1a ldr r2, [r3, #80] @ 0x50
  43716. 801216a: 3201 adds r2, #1
  43717. 801216c: 651a str r2, [r3, #80] @ 0x50
  43718. }
  43719. return pxCurrentTCB;
  43720. 801216e: 4b03 ldr r3, [pc, #12] @ (801217c <pvTaskIncrementMutexHeldCount+0x24>)
  43721. 8012170: 681b ldr r3, [r3, #0]
  43722. }
  43723. 8012172: 4618 mov r0, r3
  43724. 8012174: 46bd mov sp, r7
  43725. 8012176: f85d 7b04 ldr.w r7, [sp], #4
  43726. 801217a: 4770 bx lr
  43727. 801217c: 240023f4 .word 0x240023f4
  43728. 08012180 <xTaskNotifyWait>:
  43729. /*-----------------------------------------------------------*/
  43730. #if( configUSE_TASK_NOTIFICATIONS == 1 )
  43731. BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait )
  43732. {
  43733. 8012180: b580 push {r7, lr}
  43734. 8012182: b086 sub sp, #24
  43735. 8012184: af00 add r7, sp, #0
  43736. 8012186: 60f8 str r0, [r7, #12]
  43737. 8012188: 60b9 str r1, [r7, #8]
  43738. 801218a: 607a str r2, [r7, #4]
  43739. 801218c: 603b str r3, [r7, #0]
  43740. BaseType_t xReturn;
  43741. taskENTER_CRITICAL();
  43742. 801218e: f000 ff03 bl 8012f98 <vPortEnterCritical>
  43743. {
  43744. /* Only block if a notification is not already pending. */
  43745. if( pxCurrentTCB->ucNotifyState != taskNOTIFICATION_RECEIVED )
  43746. 8012192: 4b29 ldr r3, [pc, #164] @ (8012238 <xTaskNotifyWait+0xb8>)
  43747. 8012194: 681b ldr r3, [r3, #0]
  43748. 8012196: f893 30a4 ldrb.w r3, [r3, #164] @ 0xa4
  43749. 801219a: b2db uxtb r3, r3
  43750. 801219c: 2b02 cmp r3, #2
  43751. 801219e: d01c beq.n 80121da <xTaskNotifyWait+0x5a>
  43752. {
  43753. /* Clear bits in the task's notification value as bits may get
  43754. set by the notifying task or interrupt. This can be used to
  43755. clear the value to zero. */
  43756. pxCurrentTCB->ulNotifiedValue &= ~ulBitsToClearOnEntry;
  43757. 80121a0: 4b25 ldr r3, [pc, #148] @ (8012238 <xTaskNotifyWait+0xb8>)
  43758. 80121a2: 681b ldr r3, [r3, #0]
  43759. 80121a4: f8d3 10a0 ldr.w r1, [r3, #160] @ 0xa0
  43760. 80121a8: 68fa ldr r2, [r7, #12]
  43761. 80121aa: 43d2 mvns r2, r2
  43762. 80121ac: 400a ands r2, r1
  43763. 80121ae: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  43764. /* Mark this task as waiting for a notification. */
  43765. pxCurrentTCB->ucNotifyState = taskWAITING_NOTIFICATION;
  43766. 80121b2: 4b21 ldr r3, [pc, #132] @ (8012238 <xTaskNotifyWait+0xb8>)
  43767. 80121b4: 681b ldr r3, [r3, #0]
  43768. 80121b6: 2201 movs r2, #1
  43769. 80121b8: f883 20a4 strb.w r2, [r3, #164] @ 0xa4
  43770. if( xTicksToWait > ( TickType_t ) 0 )
  43771. 80121bc: 683b ldr r3, [r7, #0]
  43772. 80121be: 2b00 cmp r3, #0
  43773. 80121c0: d00b beq.n 80121da <xTaskNotifyWait+0x5a>
  43774. {
  43775. prvAddCurrentTaskToDelayedList( xTicksToWait, pdTRUE );
  43776. 80121c2: 2101 movs r1, #1
  43777. 80121c4: 6838 ldr r0, [r7, #0]
  43778. 80121c6: f000 fa09 bl 80125dc <prvAddCurrentTaskToDelayedList>
  43779. /* All ports are written to allow a yield in a critical
  43780. section (some will yield immediately, others wait until the
  43781. critical section exits) - but it is not something that
  43782. application code should ever do. */
  43783. portYIELD_WITHIN_API();
  43784. 80121ca: 4b1c ldr r3, [pc, #112] @ (801223c <xTaskNotifyWait+0xbc>)
  43785. 80121cc: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  43786. 80121d0: 601a str r2, [r3, #0]
  43787. 80121d2: f3bf 8f4f dsb sy
  43788. 80121d6: f3bf 8f6f isb sy
  43789. else
  43790. {
  43791. mtCOVERAGE_TEST_MARKER();
  43792. }
  43793. }
  43794. taskEXIT_CRITICAL();
  43795. 80121da: f000 ff0f bl 8012ffc <vPortExitCritical>
  43796. taskENTER_CRITICAL();
  43797. 80121de: f000 fedb bl 8012f98 <vPortEnterCritical>
  43798. {
  43799. traceTASK_NOTIFY_WAIT();
  43800. if( pulNotificationValue != NULL )
  43801. 80121e2: 687b ldr r3, [r7, #4]
  43802. 80121e4: 2b00 cmp r3, #0
  43803. 80121e6: d005 beq.n 80121f4 <xTaskNotifyWait+0x74>
  43804. {
  43805. /* Output the current notification value, which may or may not
  43806. have changed. */
  43807. *pulNotificationValue = pxCurrentTCB->ulNotifiedValue;
  43808. 80121e8: 4b13 ldr r3, [pc, #76] @ (8012238 <xTaskNotifyWait+0xb8>)
  43809. 80121ea: 681b ldr r3, [r3, #0]
  43810. 80121ec: f8d3 20a0 ldr.w r2, [r3, #160] @ 0xa0
  43811. 80121f0: 687b ldr r3, [r7, #4]
  43812. 80121f2: 601a str r2, [r3, #0]
  43813. /* If ucNotifyValue is set then either the task never entered the
  43814. blocked state (because a notification was already pending) or the
  43815. task unblocked because of a notification. Otherwise the task
  43816. unblocked because of a timeout. */
  43817. if( pxCurrentTCB->ucNotifyState != taskNOTIFICATION_RECEIVED )
  43818. 80121f4: 4b10 ldr r3, [pc, #64] @ (8012238 <xTaskNotifyWait+0xb8>)
  43819. 80121f6: 681b ldr r3, [r3, #0]
  43820. 80121f8: f893 30a4 ldrb.w r3, [r3, #164] @ 0xa4
  43821. 80121fc: b2db uxtb r3, r3
  43822. 80121fe: 2b02 cmp r3, #2
  43823. 8012200: d002 beq.n 8012208 <xTaskNotifyWait+0x88>
  43824. {
  43825. /* A notification was not received. */
  43826. xReturn = pdFALSE;
  43827. 8012202: 2300 movs r3, #0
  43828. 8012204: 617b str r3, [r7, #20]
  43829. 8012206: e00a b.n 801221e <xTaskNotifyWait+0x9e>
  43830. }
  43831. else
  43832. {
  43833. /* A notification was already pending or a notification was
  43834. received while the task was waiting. */
  43835. pxCurrentTCB->ulNotifiedValue &= ~ulBitsToClearOnExit;
  43836. 8012208: 4b0b ldr r3, [pc, #44] @ (8012238 <xTaskNotifyWait+0xb8>)
  43837. 801220a: 681b ldr r3, [r3, #0]
  43838. 801220c: f8d3 10a0 ldr.w r1, [r3, #160] @ 0xa0
  43839. 8012210: 68ba ldr r2, [r7, #8]
  43840. 8012212: 43d2 mvns r2, r2
  43841. 8012214: 400a ands r2, r1
  43842. 8012216: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  43843. xReturn = pdTRUE;
  43844. 801221a: 2301 movs r3, #1
  43845. 801221c: 617b str r3, [r7, #20]
  43846. }
  43847. pxCurrentTCB->ucNotifyState = taskNOT_WAITING_NOTIFICATION;
  43848. 801221e: 4b06 ldr r3, [pc, #24] @ (8012238 <xTaskNotifyWait+0xb8>)
  43849. 8012220: 681b ldr r3, [r3, #0]
  43850. 8012222: 2200 movs r2, #0
  43851. 8012224: f883 20a4 strb.w r2, [r3, #164] @ 0xa4
  43852. }
  43853. taskEXIT_CRITICAL();
  43854. 8012228: f000 fee8 bl 8012ffc <vPortExitCritical>
  43855. return xReturn;
  43856. 801222c: 697b ldr r3, [r7, #20]
  43857. }
  43858. 801222e: 4618 mov r0, r3
  43859. 8012230: 3718 adds r7, #24
  43860. 8012232: 46bd mov sp, r7
  43861. 8012234: bd80 pop {r7, pc}
  43862. 8012236: bf00 nop
  43863. 8012238: 240023f4 .word 0x240023f4
  43864. 801223c: e000ed04 .word 0xe000ed04
  43865. 08012240 <xTaskGenericNotify>:
  43866. /*-----------------------------------------------------------*/
  43867. #if( configUSE_TASK_NOTIFICATIONS == 1 )
  43868. BaseType_t xTaskGenericNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue )
  43869. {
  43870. 8012240: b580 push {r7, lr}
  43871. 8012242: b08a sub sp, #40 @ 0x28
  43872. 8012244: af00 add r7, sp, #0
  43873. 8012246: 60f8 str r0, [r7, #12]
  43874. 8012248: 60b9 str r1, [r7, #8]
  43875. 801224a: 603b str r3, [r7, #0]
  43876. 801224c: 4613 mov r3, r2
  43877. 801224e: 71fb strb r3, [r7, #7]
  43878. TCB_t * pxTCB;
  43879. BaseType_t xReturn = pdPASS;
  43880. 8012250: 2301 movs r3, #1
  43881. 8012252: 627b str r3, [r7, #36] @ 0x24
  43882. uint8_t ucOriginalNotifyState;
  43883. configASSERT( xTaskToNotify );
  43884. 8012254: 68fb ldr r3, [r7, #12]
  43885. 8012256: 2b00 cmp r3, #0
  43886. 8012258: d10b bne.n 8012272 <xTaskGenericNotify+0x32>
  43887. __asm volatile
  43888. 801225a: f04f 0350 mov.w r3, #80 @ 0x50
  43889. 801225e: f383 8811 msr BASEPRI, r3
  43890. 8012262: f3bf 8f6f isb sy
  43891. 8012266: f3bf 8f4f dsb sy
  43892. 801226a: 61bb str r3, [r7, #24]
  43893. }
  43894. 801226c: bf00 nop
  43895. 801226e: bf00 nop
  43896. 8012270: e7fd b.n 801226e <xTaskGenericNotify+0x2e>
  43897. pxTCB = xTaskToNotify;
  43898. 8012272: 68fb ldr r3, [r7, #12]
  43899. 8012274: 623b str r3, [r7, #32]
  43900. taskENTER_CRITICAL();
  43901. 8012276: f000 fe8f bl 8012f98 <vPortEnterCritical>
  43902. {
  43903. if( pulPreviousNotificationValue != NULL )
  43904. 801227a: 683b ldr r3, [r7, #0]
  43905. 801227c: 2b00 cmp r3, #0
  43906. 801227e: d004 beq.n 801228a <xTaskGenericNotify+0x4a>
  43907. {
  43908. *pulPreviousNotificationValue = pxTCB->ulNotifiedValue;
  43909. 8012280: 6a3b ldr r3, [r7, #32]
  43910. 8012282: f8d3 20a0 ldr.w r2, [r3, #160] @ 0xa0
  43911. 8012286: 683b ldr r3, [r7, #0]
  43912. 8012288: 601a str r2, [r3, #0]
  43913. }
  43914. ucOriginalNotifyState = pxTCB->ucNotifyState;
  43915. 801228a: 6a3b ldr r3, [r7, #32]
  43916. 801228c: f893 30a4 ldrb.w r3, [r3, #164] @ 0xa4
  43917. 8012290: 77fb strb r3, [r7, #31]
  43918. pxTCB->ucNotifyState = taskNOTIFICATION_RECEIVED;
  43919. 8012292: 6a3b ldr r3, [r7, #32]
  43920. 8012294: 2202 movs r2, #2
  43921. 8012296: f883 20a4 strb.w r2, [r3, #164] @ 0xa4
  43922. switch( eAction )
  43923. 801229a: 79fb ldrb r3, [r7, #7]
  43924. 801229c: 2b04 cmp r3, #4
  43925. 801229e: d82e bhi.n 80122fe <xTaskGenericNotify+0xbe>
  43926. 80122a0: a201 add r2, pc, #4 @ (adr r2, 80122a8 <xTaskGenericNotify+0x68>)
  43927. 80122a2: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  43928. 80122a6: bf00 nop
  43929. 80122a8: 08012323 .word 0x08012323
  43930. 80122ac: 080122bd .word 0x080122bd
  43931. 80122b0: 080122cf .word 0x080122cf
  43932. 80122b4: 080122df .word 0x080122df
  43933. 80122b8: 080122e9 .word 0x080122e9
  43934. {
  43935. case eSetBits :
  43936. pxTCB->ulNotifiedValue |= ulValue;
  43937. 80122bc: 6a3b ldr r3, [r7, #32]
  43938. 80122be: f8d3 20a0 ldr.w r2, [r3, #160] @ 0xa0
  43939. 80122c2: 68bb ldr r3, [r7, #8]
  43940. 80122c4: 431a orrs r2, r3
  43941. 80122c6: 6a3b ldr r3, [r7, #32]
  43942. 80122c8: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  43943. break;
  43944. 80122cc: e02c b.n 8012328 <xTaskGenericNotify+0xe8>
  43945. case eIncrement :
  43946. ( pxTCB->ulNotifiedValue )++;
  43947. 80122ce: 6a3b ldr r3, [r7, #32]
  43948. 80122d0: f8d3 30a0 ldr.w r3, [r3, #160] @ 0xa0
  43949. 80122d4: 1c5a adds r2, r3, #1
  43950. 80122d6: 6a3b ldr r3, [r7, #32]
  43951. 80122d8: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  43952. break;
  43953. 80122dc: e024 b.n 8012328 <xTaskGenericNotify+0xe8>
  43954. case eSetValueWithOverwrite :
  43955. pxTCB->ulNotifiedValue = ulValue;
  43956. 80122de: 6a3b ldr r3, [r7, #32]
  43957. 80122e0: 68ba ldr r2, [r7, #8]
  43958. 80122e2: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  43959. break;
  43960. 80122e6: e01f b.n 8012328 <xTaskGenericNotify+0xe8>
  43961. case eSetValueWithoutOverwrite :
  43962. if( ucOriginalNotifyState != taskNOTIFICATION_RECEIVED )
  43963. 80122e8: 7ffb ldrb r3, [r7, #31]
  43964. 80122ea: 2b02 cmp r3, #2
  43965. 80122ec: d004 beq.n 80122f8 <xTaskGenericNotify+0xb8>
  43966. {
  43967. pxTCB->ulNotifiedValue = ulValue;
  43968. 80122ee: 6a3b ldr r3, [r7, #32]
  43969. 80122f0: 68ba ldr r2, [r7, #8]
  43970. 80122f2: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  43971. else
  43972. {
  43973. /* The value could not be written to the task. */
  43974. xReturn = pdFAIL;
  43975. }
  43976. break;
  43977. 80122f6: e017 b.n 8012328 <xTaskGenericNotify+0xe8>
  43978. xReturn = pdFAIL;
  43979. 80122f8: 2300 movs r3, #0
  43980. 80122fa: 627b str r3, [r7, #36] @ 0x24
  43981. break;
  43982. 80122fc: e014 b.n 8012328 <xTaskGenericNotify+0xe8>
  43983. default:
  43984. /* Should not get here if all enums are handled.
  43985. Artificially force an assert by testing a value the
  43986. compiler can't assume is const. */
  43987. configASSERT( pxTCB->ulNotifiedValue == ~0UL );
  43988. 80122fe: 6a3b ldr r3, [r7, #32]
  43989. 8012300: f8d3 30a0 ldr.w r3, [r3, #160] @ 0xa0
  43990. 8012304: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  43991. 8012308: d00d beq.n 8012326 <xTaskGenericNotify+0xe6>
  43992. __asm volatile
  43993. 801230a: f04f 0350 mov.w r3, #80 @ 0x50
  43994. 801230e: f383 8811 msr BASEPRI, r3
  43995. 8012312: f3bf 8f6f isb sy
  43996. 8012316: f3bf 8f4f dsb sy
  43997. 801231a: 617b str r3, [r7, #20]
  43998. }
  43999. 801231c: bf00 nop
  44000. 801231e: bf00 nop
  44001. 8012320: e7fd b.n 801231e <xTaskGenericNotify+0xde>
  44002. break;
  44003. 8012322: bf00 nop
  44004. 8012324: e000 b.n 8012328 <xTaskGenericNotify+0xe8>
  44005. break;
  44006. 8012326: bf00 nop
  44007. traceTASK_NOTIFY();
  44008. /* If the task is in the blocked state specifically to wait for a
  44009. notification then unblock it now. */
  44010. if( ucOriginalNotifyState == taskWAITING_NOTIFICATION )
  44011. 8012328: 7ffb ldrb r3, [r7, #31]
  44012. 801232a: 2b01 cmp r3, #1
  44013. 801232c: d13b bne.n 80123a6 <xTaskGenericNotify+0x166>
  44014. {
  44015. ( void ) uxListRemove( &( pxTCB->xStateListItem ) );
  44016. 801232e: 6a3b ldr r3, [r7, #32]
  44017. 8012330: 3304 adds r3, #4
  44018. 8012332: 4618 mov r0, r3
  44019. 8012334: f7fd fd78 bl 800fe28 <uxListRemove>
  44020. prvAddTaskToReadyList( pxTCB );
  44021. 8012338: 6a3b ldr r3, [r7, #32]
  44022. 801233a: 6ada ldr r2, [r3, #44] @ 0x2c
  44023. 801233c: 4b1d ldr r3, [pc, #116] @ (80123b4 <xTaskGenericNotify+0x174>)
  44024. 801233e: 681b ldr r3, [r3, #0]
  44025. 8012340: 429a cmp r2, r3
  44026. 8012342: d903 bls.n 801234c <xTaskGenericNotify+0x10c>
  44027. 8012344: 6a3b ldr r3, [r7, #32]
  44028. 8012346: 6adb ldr r3, [r3, #44] @ 0x2c
  44029. 8012348: 4a1a ldr r2, [pc, #104] @ (80123b4 <xTaskGenericNotify+0x174>)
  44030. 801234a: 6013 str r3, [r2, #0]
  44031. 801234c: 6a3b ldr r3, [r7, #32]
  44032. 801234e: 6ada ldr r2, [r3, #44] @ 0x2c
  44033. 8012350: 4613 mov r3, r2
  44034. 8012352: 009b lsls r3, r3, #2
  44035. 8012354: 4413 add r3, r2
  44036. 8012356: 009b lsls r3, r3, #2
  44037. 8012358: 4a17 ldr r2, [pc, #92] @ (80123b8 <xTaskGenericNotify+0x178>)
  44038. 801235a: 441a add r2, r3
  44039. 801235c: 6a3b ldr r3, [r7, #32]
  44040. 801235e: 3304 adds r3, #4
  44041. 8012360: 4619 mov r1, r3
  44042. 8012362: 4610 mov r0, r2
  44043. 8012364: f7fd fd03 bl 800fd6e <vListInsertEnd>
  44044. /* The task should not have been on an event list. */
  44045. configASSERT( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) == NULL );
  44046. 8012368: 6a3b ldr r3, [r7, #32]
  44047. 801236a: 6a9b ldr r3, [r3, #40] @ 0x28
  44048. 801236c: 2b00 cmp r3, #0
  44049. 801236e: d00b beq.n 8012388 <xTaskGenericNotify+0x148>
  44050. __asm volatile
  44051. 8012370: f04f 0350 mov.w r3, #80 @ 0x50
  44052. 8012374: f383 8811 msr BASEPRI, r3
  44053. 8012378: f3bf 8f6f isb sy
  44054. 801237c: f3bf 8f4f dsb sy
  44055. 8012380: 613b str r3, [r7, #16]
  44056. }
  44057. 8012382: bf00 nop
  44058. 8012384: bf00 nop
  44059. 8012386: e7fd b.n 8012384 <xTaskGenericNotify+0x144>
  44060. earliest possible time. */
  44061. prvResetNextTaskUnblockTime();
  44062. }
  44063. #endif
  44064. if( pxTCB->uxPriority > pxCurrentTCB->uxPriority )
  44065. 8012388: 6a3b ldr r3, [r7, #32]
  44066. 801238a: 6ada ldr r2, [r3, #44] @ 0x2c
  44067. 801238c: 4b0b ldr r3, [pc, #44] @ (80123bc <xTaskGenericNotify+0x17c>)
  44068. 801238e: 681b ldr r3, [r3, #0]
  44069. 8012390: 6adb ldr r3, [r3, #44] @ 0x2c
  44070. 8012392: 429a cmp r2, r3
  44071. 8012394: d907 bls.n 80123a6 <xTaskGenericNotify+0x166>
  44072. {
  44073. /* The notified task has a priority above the currently
  44074. executing task so a yield is required. */
  44075. taskYIELD_IF_USING_PREEMPTION();
  44076. 8012396: 4b0a ldr r3, [pc, #40] @ (80123c0 <xTaskGenericNotify+0x180>)
  44077. 8012398: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  44078. 801239c: 601a str r2, [r3, #0]
  44079. 801239e: f3bf 8f4f dsb sy
  44080. 80123a2: f3bf 8f6f isb sy
  44081. else
  44082. {
  44083. mtCOVERAGE_TEST_MARKER();
  44084. }
  44085. }
  44086. taskEXIT_CRITICAL();
  44087. 80123a6: f000 fe29 bl 8012ffc <vPortExitCritical>
  44088. return xReturn;
  44089. 80123aa: 6a7b ldr r3, [r7, #36] @ 0x24
  44090. }
  44091. 80123ac: 4618 mov r0, r3
  44092. 80123ae: 3728 adds r7, #40 @ 0x28
  44093. 80123b0: 46bd mov sp, r7
  44094. 80123b2: bd80 pop {r7, pc}
  44095. 80123b4: 240028d0 .word 0x240028d0
  44096. 80123b8: 240023f8 .word 0x240023f8
  44097. 80123bc: 240023f4 .word 0x240023f4
  44098. 80123c0: e000ed04 .word 0xe000ed04
  44099. 080123c4 <xTaskGenericNotifyFromISR>:
  44100. /*-----------------------------------------------------------*/
  44101. #if( configUSE_TASK_NOTIFICATIONS == 1 )
  44102. BaseType_t xTaskGenericNotifyFromISR( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue, BaseType_t *pxHigherPriorityTaskWoken )
  44103. {
  44104. 80123c4: b580 push {r7, lr}
  44105. 80123c6: b08e sub sp, #56 @ 0x38
  44106. 80123c8: af00 add r7, sp, #0
  44107. 80123ca: 60f8 str r0, [r7, #12]
  44108. 80123cc: 60b9 str r1, [r7, #8]
  44109. 80123ce: 603b str r3, [r7, #0]
  44110. 80123d0: 4613 mov r3, r2
  44111. 80123d2: 71fb strb r3, [r7, #7]
  44112. TCB_t * pxTCB;
  44113. uint8_t ucOriginalNotifyState;
  44114. BaseType_t xReturn = pdPASS;
  44115. 80123d4: 2301 movs r3, #1
  44116. 80123d6: 637b str r3, [r7, #52] @ 0x34
  44117. UBaseType_t uxSavedInterruptStatus;
  44118. configASSERT( xTaskToNotify );
  44119. 80123d8: 68fb ldr r3, [r7, #12]
  44120. 80123da: 2b00 cmp r3, #0
  44121. 80123dc: d10b bne.n 80123f6 <xTaskGenericNotifyFromISR+0x32>
  44122. __asm volatile
  44123. 80123de: f04f 0350 mov.w r3, #80 @ 0x50
  44124. 80123e2: f383 8811 msr BASEPRI, r3
  44125. 80123e6: f3bf 8f6f isb sy
  44126. 80123ea: f3bf 8f4f dsb sy
  44127. 80123ee: 627b str r3, [r7, #36] @ 0x24
  44128. }
  44129. 80123f0: bf00 nop
  44130. 80123f2: bf00 nop
  44131. 80123f4: e7fd b.n 80123f2 <xTaskGenericNotifyFromISR+0x2e>
  44132. below the maximum system call interrupt priority. FreeRTOS maintains a
  44133. separate interrupt safe API to ensure interrupt entry is as fast and as
  44134. simple as possible. More information (albeit Cortex-M specific) is
  44135. provided on the following link:
  44136. http://www.freertos.org/RTOS-Cortex-M3-M4.html */
  44137. portASSERT_IF_INTERRUPT_PRIORITY_INVALID();
  44138. 80123f6: f000 feaf bl 8013158 <vPortValidateInterruptPriority>
  44139. pxTCB = xTaskToNotify;
  44140. 80123fa: 68fb ldr r3, [r7, #12]
  44141. 80123fc: 633b str r3, [r7, #48] @ 0x30
  44142. __asm volatile
  44143. 80123fe: f3ef 8211 mrs r2, BASEPRI
  44144. 8012402: f04f 0350 mov.w r3, #80 @ 0x50
  44145. 8012406: f383 8811 msr BASEPRI, r3
  44146. 801240a: f3bf 8f6f isb sy
  44147. 801240e: f3bf 8f4f dsb sy
  44148. 8012412: 623a str r2, [r7, #32]
  44149. 8012414: 61fb str r3, [r7, #28]
  44150. return ulOriginalBASEPRI;
  44151. 8012416: 6a3b ldr r3, [r7, #32]
  44152. uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
  44153. 8012418: 62fb str r3, [r7, #44] @ 0x2c
  44154. {
  44155. if( pulPreviousNotificationValue != NULL )
  44156. 801241a: 683b ldr r3, [r7, #0]
  44157. 801241c: 2b00 cmp r3, #0
  44158. 801241e: d004 beq.n 801242a <xTaskGenericNotifyFromISR+0x66>
  44159. {
  44160. *pulPreviousNotificationValue = pxTCB->ulNotifiedValue;
  44161. 8012420: 6b3b ldr r3, [r7, #48] @ 0x30
  44162. 8012422: f8d3 20a0 ldr.w r2, [r3, #160] @ 0xa0
  44163. 8012426: 683b ldr r3, [r7, #0]
  44164. 8012428: 601a str r2, [r3, #0]
  44165. }
  44166. ucOriginalNotifyState = pxTCB->ucNotifyState;
  44167. 801242a: 6b3b ldr r3, [r7, #48] @ 0x30
  44168. 801242c: f893 30a4 ldrb.w r3, [r3, #164] @ 0xa4
  44169. 8012430: f887 302b strb.w r3, [r7, #43] @ 0x2b
  44170. pxTCB->ucNotifyState = taskNOTIFICATION_RECEIVED;
  44171. 8012434: 6b3b ldr r3, [r7, #48] @ 0x30
  44172. 8012436: 2202 movs r2, #2
  44173. 8012438: f883 20a4 strb.w r2, [r3, #164] @ 0xa4
  44174. switch( eAction )
  44175. 801243c: 79fb ldrb r3, [r7, #7]
  44176. 801243e: 2b04 cmp r3, #4
  44177. 8012440: d82e bhi.n 80124a0 <xTaskGenericNotifyFromISR+0xdc>
  44178. 8012442: a201 add r2, pc, #4 @ (adr r2, 8012448 <xTaskGenericNotifyFromISR+0x84>)
  44179. 8012444: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  44180. 8012448: 080124c5 .word 0x080124c5
  44181. 801244c: 0801245d .word 0x0801245d
  44182. 8012450: 0801246f .word 0x0801246f
  44183. 8012454: 0801247f .word 0x0801247f
  44184. 8012458: 08012489 .word 0x08012489
  44185. {
  44186. case eSetBits :
  44187. pxTCB->ulNotifiedValue |= ulValue;
  44188. 801245c: 6b3b ldr r3, [r7, #48] @ 0x30
  44189. 801245e: f8d3 20a0 ldr.w r2, [r3, #160] @ 0xa0
  44190. 8012462: 68bb ldr r3, [r7, #8]
  44191. 8012464: 431a orrs r2, r3
  44192. 8012466: 6b3b ldr r3, [r7, #48] @ 0x30
  44193. 8012468: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  44194. break;
  44195. 801246c: e02d b.n 80124ca <xTaskGenericNotifyFromISR+0x106>
  44196. case eIncrement :
  44197. ( pxTCB->ulNotifiedValue )++;
  44198. 801246e: 6b3b ldr r3, [r7, #48] @ 0x30
  44199. 8012470: f8d3 30a0 ldr.w r3, [r3, #160] @ 0xa0
  44200. 8012474: 1c5a adds r2, r3, #1
  44201. 8012476: 6b3b ldr r3, [r7, #48] @ 0x30
  44202. 8012478: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  44203. break;
  44204. 801247c: e025 b.n 80124ca <xTaskGenericNotifyFromISR+0x106>
  44205. case eSetValueWithOverwrite :
  44206. pxTCB->ulNotifiedValue = ulValue;
  44207. 801247e: 6b3b ldr r3, [r7, #48] @ 0x30
  44208. 8012480: 68ba ldr r2, [r7, #8]
  44209. 8012482: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  44210. break;
  44211. 8012486: e020 b.n 80124ca <xTaskGenericNotifyFromISR+0x106>
  44212. case eSetValueWithoutOverwrite :
  44213. if( ucOriginalNotifyState != taskNOTIFICATION_RECEIVED )
  44214. 8012488: f897 302b ldrb.w r3, [r7, #43] @ 0x2b
  44215. 801248c: 2b02 cmp r3, #2
  44216. 801248e: d004 beq.n 801249a <xTaskGenericNotifyFromISR+0xd6>
  44217. {
  44218. pxTCB->ulNotifiedValue = ulValue;
  44219. 8012490: 6b3b ldr r3, [r7, #48] @ 0x30
  44220. 8012492: 68ba ldr r2, [r7, #8]
  44221. 8012494: f8c3 20a0 str.w r2, [r3, #160] @ 0xa0
  44222. else
  44223. {
  44224. /* The value could not be written to the task. */
  44225. xReturn = pdFAIL;
  44226. }
  44227. break;
  44228. 8012498: e017 b.n 80124ca <xTaskGenericNotifyFromISR+0x106>
  44229. xReturn = pdFAIL;
  44230. 801249a: 2300 movs r3, #0
  44231. 801249c: 637b str r3, [r7, #52] @ 0x34
  44232. break;
  44233. 801249e: e014 b.n 80124ca <xTaskGenericNotifyFromISR+0x106>
  44234. default:
  44235. /* Should not get here if all enums are handled.
  44236. Artificially force an assert by testing a value the
  44237. compiler can't assume is const. */
  44238. configASSERT( pxTCB->ulNotifiedValue == ~0UL );
  44239. 80124a0: 6b3b ldr r3, [r7, #48] @ 0x30
  44240. 80124a2: f8d3 30a0 ldr.w r3, [r3, #160] @ 0xa0
  44241. 80124a6: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  44242. 80124aa: d00d beq.n 80124c8 <xTaskGenericNotifyFromISR+0x104>
  44243. __asm volatile
  44244. 80124ac: f04f 0350 mov.w r3, #80 @ 0x50
  44245. 80124b0: f383 8811 msr BASEPRI, r3
  44246. 80124b4: f3bf 8f6f isb sy
  44247. 80124b8: f3bf 8f4f dsb sy
  44248. 80124bc: 61bb str r3, [r7, #24]
  44249. }
  44250. 80124be: bf00 nop
  44251. 80124c0: bf00 nop
  44252. 80124c2: e7fd b.n 80124c0 <xTaskGenericNotifyFromISR+0xfc>
  44253. break;
  44254. 80124c4: bf00 nop
  44255. 80124c6: e000 b.n 80124ca <xTaskGenericNotifyFromISR+0x106>
  44256. break;
  44257. 80124c8: bf00 nop
  44258. traceTASK_NOTIFY_FROM_ISR();
  44259. /* If the task is in the blocked state specifically to wait for a
  44260. notification then unblock it now. */
  44261. if( ucOriginalNotifyState == taskWAITING_NOTIFICATION )
  44262. 80124ca: f897 302b ldrb.w r3, [r7, #43] @ 0x2b
  44263. 80124ce: 2b01 cmp r3, #1
  44264. 80124d0: d147 bne.n 8012562 <xTaskGenericNotifyFromISR+0x19e>
  44265. {
  44266. /* The task should not have been on an event list. */
  44267. configASSERT( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) == NULL );
  44268. 80124d2: 6b3b ldr r3, [r7, #48] @ 0x30
  44269. 80124d4: 6a9b ldr r3, [r3, #40] @ 0x28
  44270. 80124d6: 2b00 cmp r3, #0
  44271. 80124d8: d00b beq.n 80124f2 <xTaskGenericNotifyFromISR+0x12e>
  44272. __asm volatile
  44273. 80124da: f04f 0350 mov.w r3, #80 @ 0x50
  44274. 80124de: f383 8811 msr BASEPRI, r3
  44275. 80124e2: f3bf 8f6f isb sy
  44276. 80124e6: f3bf 8f4f dsb sy
  44277. 80124ea: 617b str r3, [r7, #20]
  44278. }
  44279. 80124ec: bf00 nop
  44280. 80124ee: bf00 nop
  44281. 80124f0: e7fd b.n 80124ee <xTaskGenericNotifyFromISR+0x12a>
  44282. if( uxSchedulerSuspended == ( UBaseType_t ) pdFALSE )
  44283. 80124f2: 4b21 ldr r3, [pc, #132] @ (8012578 <xTaskGenericNotifyFromISR+0x1b4>)
  44284. 80124f4: 681b ldr r3, [r3, #0]
  44285. 80124f6: 2b00 cmp r3, #0
  44286. 80124f8: d11d bne.n 8012536 <xTaskGenericNotifyFromISR+0x172>
  44287. {
  44288. ( void ) uxListRemove( &( pxTCB->xStateListItem ) );
  44289. 80124fa: 6b3b ldr r3, [r7, #48] @ 0x30
  44290. 80124fc: 3304 adds r3, #4
  44291. 80124fe: 4618 mov r0, r3
  44292. 8012500: f7fd fc92 bl 800fe28 <uxListRemove>
  44293. prvAddTaskToReadyList( pxTCB );
  44294. 8012504: 6b3b ldr r3, [r7, #48] @ 0x30
  44295. 8012506: 6ada ldr r2, [r3, #44] @ 0x2c
  44296. 8012508: 4b1c ldr r3, [pc, #112] @ (801257c <xTaskGenericNotifyFromISR+0x1b8>)
  44297. 801250a: 681b ldr r3, [r3, #0]
  44298. 801250c: 429a cmp r2, r3
  44299. 801250e: d903 bls.n 8012518 <xTaskGenericNotifyFromISR+0x154>
  44300. 8012510: 6b3b ldr r3, [r7, #48] @ 0x30
  44301. 8012512: 6adb ldr r3, [r3, #44] @ 0x2c
  44302. 8012514: 4a19 ldr r2, [pc, #100] @ (801257c <xTaskGenericNotifyFromISR+0x1b8>)
  44303. 8012516: 6013 str r3, [r2, #0]
  44304. 8012518: 6b3b ldr r3, [r7, #48] @ 0x30
  44305. 801251a: 6ada ldr r2, [r3, #44] @ 0x2c
  44306. 801251c: 4613 mov r3, r2
  44307. 801251e: 009b lsls r3, r3, #2
  44308. 8012520: 4413 add r3, r2
  44309. 8012522: 009b lsls r3, r3, #2
  44310. 8012524: 4a16 ldr r2, [pc, #88] @ (8012580 <xTaskGenericNotifyFromISR+0x1bc>)
  44311. 8012526: 441a add r2, r3
  44312. 8012528: 6b3b ldr r3, [r7, #48] @ 0x30
  44313. 801252a: 3304 adds r3, #4
  44314. 801252c: 4619 mov r1, r3
  44315. 801252e: 4610 mov r0, r2
  44316. 8012530: f7fd fc1d bl 800fd6e <vListInsertEnd>
  44317. 8012534: e005 b.n 8012542 <xTaskGenericNotifyFromISR+0x17e>
  44318. }
  44319. else
  44320. {
  44321. /* The delayed and ready lists cannot be accessed, so hold
  44322. this task pending until the scheduler is resumed. */
  44323. vListInsertEnd( &( xPendingReadyList ), &( pxTCB->xEventListItem ) );
  44324. 8012536: 6b3b ldr r3, [r7, #48] @ 0x30
  44325. 8012538: 3318 adds r3, #24
  44326. 801253a: 4619 mov r1, r3
  44327. 801253c: 4811 ldr r0, [pc, #68] @ (8012584 <xTaskGenericNotifyFromISR+0x1c0>)
  44328. 801253e: f7fd fc16 bl 800fd6e <vListInsertEnd>
  44329. }
  44330. if( pxTCB->uxPriority > pxCurrentTCB->uxPriority )
  44331. 8012542: 6b3b ldr r3, [r7, #48] @ 0x30
  44332. 8012544: 6ada ldr r2, [r3, #44] @ 0x2c
  44333. 8012546: 4b10 ldr r3, [pc, #64] @ (8012588 <xTaskGenericNotifyFromISR+0x1c4>)
  44334. 8012548: 681b ldr r3, [r3, #0]
  44335. 801254a: 6adb ldr r3, [r3, #44] @ 0x2c
  44336. 801254c: 429a cmp r2, r3
  44337. 801254e: d908 bls.n 8012562 <xTaskGenericNotifyFromISR+0x19e>
  44338. {
  44339. /* The notified task has a priority above the currently
  44340. executing task so a yield is required. */
  44341. if( pxHigherPriorityTaskWoken != NULL )
  44342. 8012550: 6c3b ldr r3, [r7, #64] @ 0x40
  44343. 8012552: 2b00 cmp r3, #0
  44344. 8012554: d002 beq.n 801255c <xTaskGenericNotifyFromISR+0x198>
  44345. {
  44346. *pxHigherPriorityTaskWoken = pdTRUE;
  44347. 8012556: 6c3b ldr r3, [r7, #64] @ 0x40
  44348. 8012558: 2201 movs r2, #1
  44349. 801255a: 601a str r2, [r3, #0]
  44350. }
  44351. /* Mark that a yield is pending in case the user is not
  44352. using the "xHigherPriorityTaskWoken" parameter to an ISR
  44353. safe FreeRTOS function. */
  44354. xYieldPending = pdTRUE;
  44355. 801255c: 4b0b ldr r3, [pc, #44] @ (801258c <xTaskGenericNotifyFromISR+0x1c8>)
  44356. 801255e: 2201 movs r2, #1
  44357. 8012560: 601a str r2, [r3, #0]
  44358. 8012562: 6afb ldr r3, [r7, #44] @ 0x2c
  44359. 8012564: 613b str r3, [r7, #16]
  44360. __asm volatile
  44361. 8012566: 693b ldr r3, [r7, #16]
  44362. 8012568: f383 8811 msr BASEPRI, r3
  44363. }
  44364. 801256c: bf00 nop
  44365. }
  44366. }
  44367. }
  44368. portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus );
  44369. return xReturn;
  44370. 801256e: 6b7b ldr r3, [r7, #52] @ 0x34
  44371. }
  44372. 8012570: 4618 mov r0, r3
  44373. 8012572: 3738 adds r7, #56 @ 0x38
  44374. 8012574: 46bd mov sp, r7
  44375. 8012576: bd80 pop {r7, pc}
  44376. 8012578: 240028f0 .word 0x240028f0
  44377. 801257c: 240028d0 .word 0x240028d0
  44378. 8012580: 240023f8 .word 0x240023f8
  44379. 8012584: 24002888 .word 0x24002888
  44380. 8012588: 240023f4 .word 0x240023f4
  44381. 801258c: 240028dc .word 0x240028dc
  44382. 08012590 <xTaskNotifyStateClear>:
  44383. /*-----------------------------------------------------------*/
  44384. #if( configUSE_TASK_NOTIFICATIONS == 1 )
  44385. BaseType_t xTaskNotifyStateClear( TaskHandle_t xTask )
  44386. {
  44387. 8012590: b580 push {r7, lr}
  44388. 8012592: b084 sub sp, #16
  44389. 8012594: af00 add r7, sp, #0
  44390. 8012596: 6078 str r0, [r7, #4]
  44391. TCB_t *pxTCB;
  44392. BaseType_t xReturn;
  44393. /* If null is passed in here then it is the calling task that is having
  44394. its notification state cleared. */
  44395. pxTCB = prvGetTCBFromHandle( xTask );
  44396. 8012598: 687b ldr r3, [r7, #4]
  44397. 801259a: 2b00 cmp r3, #0
  44398. 801259c: d102 bne.n 80125a4 <xTaskNotifyStateClear+0x14>
  44399. 801259e: 4b0e ldr r3, [pc, #56] @ (80125d8 <xTaskNotifyStateClear+0x48>)
  44400. 80125a0: 681b ldr r3, [r3, #0]
  44401. 80125a2: e000 b.n 80125a6 <xTaskNotifyStateClear+0x16>
  44402. 80125a4: 687b ldr r3, [r7, #4]
  44403. 80125a6: 60bb str r3, [r7, #8]
  44404. taskENTER_CRITICAL();
  44405. 80125a8: f000 fcf6 bl 8012f98 <vPortEnterCritical>
  44406. {
  44407. if( pxTCB->ucNotifyState == taskNOTIFICATION_RECEIVED )
  44408. 80125ac: 68bb ldr r3, [r7, #8]
  44409. 80125ae: f893 30a4 ldrb.w r3, [r3, #164] @ 0xa4
  44410. 80125b2: b2db uxtb r3, r3
  44411. 80125b4: 2b02 cmp r3, #2
  44412. 80125b6: d106 bne.n 80125c6 <xTaskNotifyStateClear+0x36>
  44413. {
  44414. pxTCB->ucNotifyState = taskNOT_WAITING_NOTIFICATION;
  44415. 80125b8: 68bb ldr r3, [r7, #8]
  44416. 80125ba: 2200 movs r2, #0
  44417. 80125bc: f883 20a4 strb.w r2, [r3, #164] @ 0xa4
  44418. xReturn = pdPASS;
  44419. 80125c0: 2301 movs r3, #1
  44420. 80125c2: 60fb str r3, [r7, #12]
  44421. 80125c4: e001 b.n 80125ca <xTaskNotifyStateClear+0x3a>
  44422. }
  44423. else
  44424. {
  44425. xReturn = pdFAIL;
  44426. 80125c6: 2300 movs r3, #0
  44427. 80125c8: 60fb str r3, [r7, #12]
  44428. }
  44429. }
  44430. taskEXIT_CRITICAL();
  44431. 80125ca: f000 fd17 bl 8012ffc <vPortExitCritical>
  44432. return xReturn;
  44433. 80125ce: 68fb ldr r3, [r7, #12]
  44434. }
  44435. 80125d0: 4618 mov r0, r3
  44436. 80125d2: 3710 adds r7, #16
  44437. 80125d4: 46bd mov sp, r7
  44438. 80125d6: bd80 pop {r7, pc}
  44439. 80125d8: 240023f4 .word 0x240023f4
  44440. 080125dc <prvAddCurrentTaskToDelayedList>:
  44441. #endif
  44442. /*-----------------------------------------------------------*/
  44443. static void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait, const BaseType_t xCanBlockIndefinitely )
  44444. {
  44445. 80125dc: b580 push {r7, lr}
  44446. 80125de: b084 sub sp, #16
  44447. 80125e0: af00 add r7, sp, #0
  44448. 80125e2: 6078 str r0, [r7, #4]
  44449. 80125e4: 6039 str r1, [r7, #0]
  44450. TickType_t xTimeToWake;
  44451. const TickType_t xConstTickCount = xTickCount;
  44452. 80125e6: 4b21 ldr r3, [pc, #132] @ (801266c <prvAddCurrentTaskToDelayedList+0x90>)
  44453. 80125e8: 681b ldr r3, [r3, #0]
  44454. 80125ea: 60fb str r3, [r7, #12]
  44455. }
  44456. #endif
  44457. /* Remove the task from the ready list before adding it to the blocked list
  44458. as the same list item is used for both lists. */
  44459. if( uxListRemove( &( pxCurrentTCB->xStateListItem ) ) == ( UBaseType_t ) 0 )
  44460. 80125ec: 4b20 ldr r3, [pc, #128] @ (8012670 <prvAddCurrentTaskToDelayedList+0x94>)
  44461. 80125ee: 681b ldr r3, [r3, #0]
  44462. 80125f0: 3304 adds r3, #4
  44463. 80125f2: 4618 mov r0, r3
  44464. 80125f4: f7fd fc18 bl 800fe28 <uxListRemove>
  44465. mtCOVERAGE_TEST_MARKER();
  44466. }
  44467. #if ( INCLUDE_vTaskSuspend == 1 )
  44468. {
  44469. if( ( xTicksToWait == portMAX_DELAY ) && ( xCanBlockIndefinitely != pdFALSE ) )
  44470. 80125f8: 687b ldr r3, [r7, #4]
  44471. 80125fa: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  44472. 80125fe: d10a bne.n 8012616 <prvAddCurrentTaskToDelayedList+0x3a>
  44473. 8012600: 683b ldr r3, [r7, #0]
  44474. 8012602: 2b00 cmp r3, #0
  44475. 8012604: d007 beq.n 8012616 <prvAddCurrentTaskToDelayedList+0x3a>
  44476. {
  44477. /* Add the task to the suspended task list instead of a delayed task
  44478. list to ensure it is not woken by a timing event. It will block
  44479. indefinitely. */
  44480. vListInsertEnd( &xSuspendedTaskList, &( pxCurrentTCB->xStateListItem ) );
  44481. 8012606: 4b1a ldr r3, [pc, #104] @ (8012670 <prvAddCurrentTaskToDelayedList+0x94>)
  44482. 8012608: 681b ldr r3, [r3, #0]
  44483. 801260a: 3304 adds r3, #4
  44484. 801260c: 4619 mov r1, r3
  44485. 801260e: 4819 ldr r0, [pc, #100] @ (8012674 <prvAddCurrentTaskToDelayedList+0x98>)
  44486. 8012610: f7fd fbad bl 800fd6e <vListInsertEnd>
  44487. /* Avoid compiler warning when INCLUDE_vTaskSuspend is not 1. */
  44488. ( void ) xCanBlockIndefinitely;
  44489. }
  44490. #endif /* INCLUDE_vTaskSuspend */
  44491. }
  44492. 8012614: e026 b.n 8012664 <prvAddCurrentTaskToDelayedList+0x88>
  44493. xTimeToWake = xConstTickCount + xTicksToWait;
  44494. 8012616: 68fa ldr r2, [r7, #12]
  44495. 8012618: 687b ldr r3, [r7, #4]
  44496. 801261a: 4413 add r3, r2
  44497. 801261c: 60bb str r3, [r7, #8]
  44498. listSET_LIST_ITEM_VALUE( &( pxCurrentTCB->xStateListItem ), xTimeToWake );
  44499. 801261e: 4b14 ldr r3, [pc, #80] @ (8012670 <prvAddCurrentTaskToDelayedList+0x94>)
  44500. 8012620: 681b ldr r3, [r3, #0]
  44501. 8012622: 68ba ldr r2, [r7, #8]
  44502. 8012624: 605a str r2, [r3, #4]
  44503. if( xTimeToWake < xConstTickCount )
  44504. 8012626: 68ba ldr r2, [r7, #8]
  44505. 8012628: 68fb ldr r3, [r7, #12]
  44506. 801262a: 429a cmp r2, r3
  44507. 801262c: d209 bcs.n 8012642 <prvAddCurrentTaskToDelayedList+0x66>
  44508. vListInsert( pxOverflowDelayedTaskList, &( pxCurrentTCB->xStateListItem ) );
  44509. 801262e: 4b12 ldr r3, [pc, #72] @ (8012678 <prvAddCurrentTaskToDelayedList+0x9c>)
  44510. 8012630: 681a ldr r2, [r3, #0]
  44511. 8012632: 4b0f ldr r3, [pc, #60] @ (8012670 <prvAddCurrentTaskToDelayedList+0x94>)
  44512. 8012634: 681b ldr r3, [r3, #0]
  44513. 8012636: 3304 adds r3, #4
  44514. 8012638: 4619 mov r1, r3
  44515. 801263a: 4610 mov r0, r2
  44516. 801263c: f7fd fbbb bl 800fdb6 <vListInsert>
  44517. }
  44518. 8012640: e010 b.n 8012664 <prvAddCurrentTaskToDelayedList+0x88>
  44519. vListInsert( pxDelayedTaskList, &( pxCurrentTCB->xStateListItem ) );
  44520. 8012642: 4b0e ldr r3, [pc, #56] @ (801267c <prvAddCurrentTaskToDelayedList+0xa0>)
  44521. 8012644: 681a ldr r2, [r3, #0]
  44522. 8012646: 4b0a ldr r3, [pc, #40] @ (8012670 <prvAddCurrentTaskToDelayedList+0x94>)
  44523. 8012648: 681b ldr r3, [r3, #0]
  44524. 801264a: 3304 adds r3, #4
  44525. 801264c: 4619 mov r1, r3
  44526. 801264e: 4610 mov r0, r2
  44527. 8012650: f7fd fbb1 bl 800fdb6 <vListInsert>
  44528. if( xTimeToWake < xNextTaskUnblockTime )
  44529. 8012654: 4b0a ldr r3, [pc, #40] @ (8012680 <prvAddCurrentTaskToDelayedList+0xa4>)
  44530. 8012656: 681b ldr r3, [r3, #0]
  44531. 8012658: 68ba ldr r2, [r7, #8]
  44532. 801265a: 429a cmp r2, r3
  44533. 801265c: d202 bcs.n 8012664 <prvAddCurrentTaskToDelayedList+0x88>
  44534. xNextTaskUnblockTime = xTimeToWake;
  44535. 801265e: 4a08 ldr r2, [pc, #32] @ (8012680 <prvAddCurrentTaskToDelayedList+0xa4>)
  44536. 8012660: 68bb ldr r3, [r7, #8]
  44537. 8012662: 6013 str r3, [r2, #0]
  44538. }
  44539. 8012664: bf00 nop
  44540. 8012666: 3710 adds r7, #16
  44541. 8012668: 46bd mov sp, r7
  44542. 801266a: bd80 pop {r7, pc}
  44543. 801266c: 240028cc .word 0x240028cc
  44544. 8012670: 240023f4 .word 0x240023f4
  44545. 8012674: 240028b4 .word 0x240028b4
  44546. 8012678: 24002884 .word 0x24002884
  44547. 801267c: 24002880 .word 0x24002880
  44548. 8012680: 240028e8 .word 0x240028e8
  44549. 08012684 <xTimerCreateTimerTask>:
  44550. TimerCallbackFunction_t pxCallbackFunction,
  44551. Timer_t *pxNewTimer ) PRIVILEGED_FUNCTION;
  44552. /*-----------------------------------------------------------*/
  44553. BaseType_t xTimerCreateTimerTask( void )
  44554. {
  44555. 8012684: b580 push {r7, lr}
  44556. 8012686: b08a sub sp, #40 @ 0x28
  44557. 8012688: af04 add r7, sp, #16
  44558. BaseType_t xReturn = pdFAIL;
  44559. 801268a: 2300 movs r3, #0
  44560. 801268c: 617b str r3, [r7, #20]
  44561. /* This function is called when the scheduler is started if
  44562. configUSE_TIMERS is set to 1. Check that the infrastructure used by the
  44563. timer service task has been created/initialised. If timers have already
  44564. been created then the initialisation will already have been performed. */
  44565. prvCheckForValidListAndQueue();
  44566. 801268e: f000 fb13 bl 8012cb8 <prvCheckForValidListAndQueue>
  44567. if( xTimerQueue != NULL )
  44568. 8012692: 4b1d ldr r3, [pc, #116] @ (8012708 <xTimerCreateTimerTask+0x84>)
  44569. 8012694: 681b ldr r3, [r3, #0]
  44570. 8012696: 2b00 cmp r3, #0
  44571. 8012698: d021 beq.n 80126de <xTimerCreateTimerTask+0x5a>
  44572. {
  44573. #if( configSUPPORT_STATIC_ALLOCATION == 1 )
  44574. {
  44575. StaticTask_t *pxTimerTaskTCBBuffer = NULL;
  44576. 801269a: 2300 movs r3, #0
  44577. 801269c: 60fb str r3, [r7, #12]
  44578. StackType_t *pxTimerTaskStackBuffer = NULL;
  44579. 801269e: 2300 movs r3, #0
  44580. 80126a0: 60bb str r3, [r7, #8]
  44581. uint32_t ulTimerTaskStackSize;
  44582. vApplicationGetTimerTaskMemory( &pxTimerTaskTCBBuffer, &pxTimerTaskStackBuffer, &ulTimerTaskStackSize );
  44583. 80126a2: 1d3a adds r2, r7, #4
  44584. 80126a4: f107 0108 add.w r1, r7, #8
  44585. 80126a8: f107 030c add.w r3, r7, #12
  44586. 80126ac: 4618 mov r0, r3
  44587. 80126ae: f7fd fb17 bl 800fce0 <vApplicationGetTimerTaskMemory>
  44588. xTimerTaskHandle = xTaskCreateStatic( prvTimerTask,
  44589. 80126b2: 6879 ldr r1, [r7, #4]
  44590. 80126b4: 68bb ldr r3, [r7, #8]
  44591. 80126b6: 68fa ldr r2, [r7, #12]
  44592. 80126b8: 9202 str r2, [sp, #8]
  44593. 80126ba: 9301 str r3, [sp, #4]
  44594. 80126bc: 2302 movs r3, #2
  44595. 80126be: 9300 str r3, [sp, #0]
  44596. 80126c0: 2300 movs r3, #0
  44597. 80126c2: 460a mov r2, r1
  44598. 80126c4: 4911 ldr r1, [pc, #68] @ (801270c <xTimerCreateTimerTask+0x88>)
  44599. 80126c6: 4812 ldr r0, [pc, #72] @ (8012710 <xTimerCreateTimerTask+0x8c>)
  44600. 80126c8: f7fe fd2f bl 801112a <xTaskCreateStatic>
  44601. 80126cc: 4603 mov r3, r0
  44602. 80126ce: 4a11 ldr r2, [pc, #68] @ (8012714 <xTimerCreateTimerTask+0x90>)
  44603. 80126d0: 6013 str r3, [r2, #0]
  44604. NULL,
  44605. ( ( UBaseType_t ) configTIMER_TASK_PRIORITY ) | portPRIVILEGE_BIT,
  44606. pxTimerTaskStackBuffer,
  44607. pxTimerTaskTCBBuffer );
  44608. if( xTimerTaskHandle != NULL )
  44609. 80126d2: 4b10 ldr r3, [pc, #64] @ (8012714 <xTimerCreateTimerTask+0x90>)
  44610. 80126d4: 681b ldr r3, [r3, #0]
  44611. 80126d6: 2b00 cmp r3, #0
  44612. 80126d8: d001 beq.n 80126de <xTimerCreateTimerTask+0x5a>
  44613. {
  44614. xReturn = pdPASS;
  44615. 80126da: 2301 movs r3, #1
  44616. 80126dc: 617b str r3, [r7, #20]
  44617. else
  44618. {
  44619. mtCOVERAGE_TEST_MARKER();
  44620. }
  44621. configASSERT( xReturn );
  44622. 80126de: 697b ldr r3, [r7, #20]
  44623. 80126e0: 2b00 cmp r3, #0
  44624. 80126e2: d10b bne.n 80126fc <xTimerCreateTimerTask+0x78>
  44625. __asm volatile
  44626. 80126e4: f04f 0350 mov.w r3, #80 @ 0x50
  44627. 80126e8: f383 8811 msr BASEPRI, r3
  44628. 80126ec: f3bf 8f6f isb sy
  44629. 80126f0: f3bf 8f4f dsb sy
  44630. 80126f4: 613b str r3, [r7, #16]
  44631. }
  44632. 80126f6: bf00 nop
  44633. 80126f8: bf00 nop
  44634. 80126fa: e7fd b.n 80126f8 <xTimerCreateTimerTask+0x74>
  44635. return xReturn;
  44636. 80126fc: 697b ldr r3, [r7, #20]
  44637. }
  44638. 80126fe: 4618 mov r0, r3
  44639. 8012700: 3718 adds r7, #24
  44640. 8012702: 46bd mov sp, r7
  44641. 8012704: bd80 pop {r7, pc}
  44642. 8012706: bf00 nop
  44643. 8012708: 24002924 .word 0x24002924
  44644. 801270c: 080145b0 .word 0x080145b0
  44645. 8012710: 08012851 .word 0x08012851
  44646. 8012714: 24002928 .word 0x24002928
  44647. 08012718 <xTimerGenericCommand>:
  44648. }
  44649. }
  44650. /*-----------------------------------------------------------*/
  44651. BaseType_t xTimerGenericCommand( TimerHandle_t xTimer, const BaseType_t xCommandID, const TickType_t xOptionalValue, BaseType_t * const pxHigherPriorityTaskWoken, const TickType_t xTicksToWait )
  44652. {
  44653. 8012718: b580 push {r7, lr}
  44654. 801271a: b08a sub sp, #40 @ 0x28
  44655. 801271c: af00 add r7, sp, #0
  44656. 801271e: 60f8 str r0, [r7, #12]
  44657. 8012720: 60b9 str r1, [r7, #8]
  44658. 8012722: 607a str r2, [r7, #4]
  44659. 8012724: 603b str r3, [r7, #0]
  44660. BaseType_t xReturn = pdFAIL;
  44661. 8012726: 2300 movs r3, #0
  44662. 8012728: 627b str r3, [r7, #36] @ 0x24
  44663. DaemonTaskMessage_t xMessage;
  44664. configASSERT( xTimer );
  44665. 801272a: 68fb ldr r3, [r7, #12]
  44666. 801272c: 2b00 cmp r3, #0
  44667. 801272e: d10b bne.n 8012748 <xTimerGenericCommand+0x30>
  44668. __asm volatile
  44669. 8012730: f04f 0350 mov.w r3, #80 @ 0x50
  44670. 8012734: f383 8811 msr BASEPRI, r3
  44671. 8012738: f3bf 8f6f isb sy
  44672. 801273c: f3bf 8f4f dsb sy
  44673. 8012740: 623b str r3, [r7, #32]
  44674. }
  44675. 8012742: bf00 nop
  44676. 8012744: bf00 nop
  44677. 8012746: e7fd b.n 8012744 <xTimerGenericCommand+0x2c>
  44678. /* Send a message to the timer service task to perform a particular action
  44679. on a particular timer definition. */
  44680. if( xTimerQueue != NULL )
  44681. 8012748: 4b19 ldr r3, [pc, #100] @ (80127b0 <xTimerGenericCommand+0x98>)
  44682. 801274a: 681b ldr r3, [r3, #0]
  44683. 801274c: 2b00 cmp r3, #0
  44684. 801274e: d02a beq.n 80127a6 <xTimerGenericCommand+0x8e>
  44685. {
  44686. /* Send a command to the timer service task to start the xTimer timer. */
  44687. xMessage.xMessageID = xCommandID;
  44688. 8012750: 68bb ldr r3, [r7, #8]
  44689. 8012752: 613b str r3, [r7, #16]
  44690. xMessage.u.xTimerParameters.xMessageValue = xOptionalValue;
  44691. 8012754: 687b ldr r3, [r7, #4]
  44692. 8012756: 617b str r3, [r7, #20]
  44693. xMessage.u.xTimerParameters.pxTimer = xTimer;
  44694. 8012758: 68fb ldr r3, [r7, #12]
  44695. 801275a: 61bb str r3, [r7, #24]
  44696. if( xCommandID < tmrFIRST_FROM_ISR_COMMAND )
  44697. 801275c: 68bb ldr r3, [r7, #8]
  44698. 801275e: 2b05 cmp r3, #5
  44699. 8012760: dc18 bgt.n 8012794 <xTimerGenericCommand+0x7c>
  44700. {
  44701. if( xTaskGetSchedulerState() == taskSCHEDULER_RUNNING )
  44702. 8012762: f7ff fb7f bl 8011e64 <xTaskGetSchedulerState>
  44703. 8012766: 4603 mov r3, r0
  44704. 8012768: 2b02 cmp r3, #2
  44705. 801276a: d109 bne.n 8012780 <xTimerGenericCommand+0x68>
  44706. {
  44707. xReturn = xQueueSendToBack( xTimerQueue, &xMessage, xTicksToWait );
  44708. 801276c: 4b10 ldr r3, [pc, #64] @ (80127b0 <xTimerGenericCommand+0x98>)
  44709. 801276e: 6818 ldr r0, [r3, #0]
  44710. 8012770: f107 0110 add.w r1, r7, #16
  44711. 8012774: 2300 movs r3, #0
  44712. 8012776: 6b3a ldr r2, [r7, #48] @ 0x30
  44713. 8012778: f7fd fd7e bl 8010278 <xQueueGenericSend>
  44714. 801277c: 6278 str r0, [r7, #36] @ 0x24
  44715. 801277e: e012 b.n 80127a6 <xTimerGenericCommand+0x8e>
  44716. }
  44717. else
  44718. {
  44719. xReturn = xQueueSendToBack( xTimerQueue, &xMessage, tmrNO_DELAY );
  44720. 8012780: 4b0b ldr r3, [pc, #44] @ (80127b0 <xTimerGenericCommand+0x98>)
  44721. 8012782: 6818 ldr r0, [r3, #0]
  44722. 8012784: f107 0110 add.w r1, r7, #16
  44723. 8012788: 2300 movs r3, #0
  44724. 801278a: 2200 movs r2, #0
  44725. 801278c: f7fd fd74 bl 8010278 <xQueueGenericSend>
  44726. 8012790: 6278 str r0, [r7, #36] @ 0x24
  44727. 8012792: e008 b.n 80127a6 <xTimerGenericCommand+0x8e>
  44728. }
  44729. }
  44730. else
  44731. {
  44732. xReturn = xQueueSendToBackFromISR( xTimerQueue, &xMessage, pxHigherPriorityTaskWoken );
  44733. 8012794: 4b06 ldr r3, [pc, #24] @ (80127b0 <xTimerGenericCommand+0x98>)
  44734. 8012796: 6818 ldr r0, [r3, #0]
  44735. 8012798: f107 0110 add.w r1, r7, #16
  44736. 801279c: 2300 movs r3, #0
  44737. 801279e: 683a ldr r2, [r7, #0]
  44738. 80127a0: f7fd fe6c bl 801047c <xQueueGenericSendFromISR>
  44739. 80127a4: 6278 str r0, [r7, #36] @ 0x24
  44740. else
  44741. {
  44742. mtCOVERAGE_TEST_MARKER();
  44743. }
  44744. return xReturn;
  44745. 80127a6: 6a7b ldr r3, [r7, #36] @ 0x24
  44746. }
  44747. 80127a8: 4618 mov r0, r3
  44748. 80127aa: 3728 adds r7, #40 @ 0x28
  44749. 80127ac: 46bd mov sp, r7
  44750. 80127ae: bd80 pop {r7, pc}
  44751. 80127b0: 24002924 .word 0x24002924
  44752. 080127b4 <prvProcessExpiredTimer>:
  44753. return pxTimer->pcTimerName;
  44754. }
  44755. /*-----------------------------------------------------------*/
  44756. static void prvProcessExpiredTimer( const TickType_t xNextExpireTime, const TickType_t xTimeNow )
  44757. {
  44758. 80127b4: b580 push {r7, lr}
  44759. 80127b6: b088 sub sp, #32
  44760. 80127b8: af02 add r7, sp, #8
  44761. 80127ba: 6078 str r0, [r7, #4]
  44762. 80127bc: 6039 str r1, [r7, #0]
  44763. BaseType_t xResult;
  44764. 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. */
  44765. 80127be: 4b23 ldr r3, [pc, #140] @ (801284c <prvProcessExpiredTimer+0x98>)
  44766. 80127c0: 681b ldr r3, [r3, #0]
  44767. 80127c2: 68db ldr r3, [r3, #12]
  44768. 80127c4: 68db ldr r3, [r3, #12]
  44769. 80127c6: 617b str r3, [r7, #20]
  44770. /* Remove the timer from the list of active timers. A check has already
  44771. been performed to ensure the list is not empty. */
  44772. ( void ) uxListRemove( &( pxTimer->xTimerListItem ) );
  44773. 80127c8: 697b ldr r3, [r7, #20]
  44774. 80127ca: 3304 adds r3, #4
  44775. 80127cc: 4618 mov r0, r3
  44776. 80127ce: f7fd fb2b bl 800fe28 <uxListRemove>
  44777. traceTIMER_EXPIRED( pxTimer );
  44778. /* If the timer is an auto-reload timer then calculate the next
  44779. expiry time and re-insert the timer in the list of active timers. */
  44780. if( ( pxTimer->ucStatus & tmrSTATUS_IS_AUTORELOAD ) != 0 )
  44781. 80127d2: 697b ldr r3, [r7, #20]
  44782. 80127d4: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  44783. 80127d8: f003 0304 and.w r3, r3, #4
  44784. 80127dc: 2b00 cmp r3, #0
  44785. 80127de: d023 beq.n 8012828 <prvProcessExpiredTimer+0x74>
  44786. {
  44787. /* The timer is inserted into a list using a time relative to anything
  44788. other than the current time. It will therefore be inserted into the
  44789. correct list relative to the time this task thinks it is now. */
  44790. if( prvInsertTimerInActiveList( pxTimer, ( xNextExpireTime + pxTimer->xTimerPeriodInTicks ), xTimeNow, xNextExpireTime ) != pdFALSE )
  44791. 80127e0: 697b ldr r3, [r7, #20]
  44792. 80127e2: 699a ldr r2, [r3, #24]
  44793. 80127e4: 687b ldr r3, [r7, #4]
  44794. 80127e6: 18d1 adds r1, r2, r3
  44795. 80127e8: 687b ldr r3, [r7, #4]
  44796. 80127ea: 683a ldr r2, [r7, #0]
  44797. 80127ec: 6978 ldr r0, [r7, #20]
  44798. 80127ee: f000 f8d5 bl 801299c <prvInsertTimerInActiveList>
  44799. 80127f2: 4603 mov r3, r0
  44800. 80127f4: 2b00 cmp r3, #0
  44801. 80127f6: d020 beq.n 801283a <prvProcessExpiredTimer+0x86>
  44802. {
  44803. /* The timer expired before it was added to the active timer
  44804. list. Reload it now. */
  44805. xResult = xTimerGenericCommand( pxTimer, tmrCOMMAND_START_DONT_TRACE, xNextExpireTime, NULL, tmrNO_DELAY );
  44806. 80127f8: 2300 movs r3, #0
  44807. 80127fa: 9300 str r3, [sp, #0]
  44808. 80127fc: 2300 movs r3, #0
  44809. 80127fe: 687a ldr r2, [r7, #4]
  44810. 8012800: 2100 movs r1, #0
  44811. 8012802: 6978 ldr r0, [r7, #20]
  44812. 8012804: f7ff ff88 bl 8012718 <xTimerGenericCommand>
  44813. 8012808: 6138 str r0, [r7, #16]
  44814. configASSERT( xResult );
  44815. 801280a: 693b ldr r3, [r7, #16]
  44816. 801280c: 2b00 cmp r3, #0
  44817. 801280e: d114 bne.n 801283a <prvProcessExpiredTimer+0x86>
  44818. __asm volatile
  44819. 8012810: f04f 0350 mov.w r3, #80 @ 0x50
  44820. 8012814: f383 8811 msr BASEPRI, r3
  44821. 8012818: f3bf 8f6f isb sy
  44822. 801281c: f3bf 8f4f dsb sy
  44823. 8012820: 60fb str r3, [r7, #12]
  44824. }
  44825. 8012822: bf00 nop
  44826. 8012824: bf00 nop
  44827. 8012826: e7fd b.n 8012824 <prvProcessExpiredTimer+0x70>
  44828. mtCOVERAGE_TEST_MARKER();
  44829. }
  44830. }
  44831. else
  44832. {
  44833. pxTimer->ucStatus &= ~tmrSTATUS_IS_ACTIVE;
  44834. 8012828: 697b ldr r3, [r7, #20]
  44835. 801282a: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  44836. 801282e: f023 0301 bic.w r3, r3, #1
  44837. 8012832: b2da uxtb r2, r3
  44838. 8012834: 697b ldr r3, [r7, #20]
  44839. 8012836: f883 2028 strb.w r2, [r3, #40] @ 0x28
  44840. mtCOVERAGE_TEST_MARKER();
  44841. }
  44842. /* Call the timer callback. */
  44843. pxTimer->pxCallbackFunction( ( TimerHandle_t ) pxTimer );
  44844. 801283a: 697b ldr r3, [r7, #20]
  44845. 801283c: 6a1b ldr r3, [r3, #32]
  44846. 801283e: 6978 ldr r0, [r7, #20]
  44847. 8012840: 4798 blx r3
  44848. }
  44849. 8012842: bf00 nop
  44850. 8012844: 3718 adds r7, #24
  44851. 8012846: 46bd mov sp, r7
  44852. 8012848: bd80 pop {r7, pc}
  44853. 801284a: bf00 nop
  44854. 801284c: 2400291c .word 0x2400291c
  44855. 08012850 <prvTimerTask>:
  44856. /*-----------------------------------------------------------*/
  44857. static portTASK_FUNCTION( prvTimerTask, pvParameters )
  44858. {
  44859. 8012850: b580 push {r7, lr}
  44860. 8012852: b084 sub sp, #16
  44861. 8012854: af00 add r7, sp, #0
  44862. 8012856: 6078 str r0, [r7, #4]
  44863. for( ;; )
  44864. {
  44865. /* Query the timers list to see if it contains any timers, and if so,
  44866. obtain the time at which the next timer will expire. */
  44867. xNextExpireTime = prvGetNextExpireTime( &xListWasEmpty );
  44868. 8012858: f107 0308 add.w r3, r7, #8
  44869. 801285c: 4618 mov r0, r3
  44870. 801285e: f000 f859 bl 8012914 <prvGetNextExpireTime>
  44871. 8012862: 60f8 str r0, [r7, #12]
  44872. /* If a timer has expired, process it. Otherwise, block this task
  44873. until either a timer does expire, or a command is received. */
  44874. prvProcessTimerOrBlockTask( xNextExpireTime, xListWasEmpty );
  44875. 8012864: 68bb ldr r3, [r7, #8]
  44876. 8012866: 4619 mov r1, r3
  44877. 8012868: 68f8 ldr r0, [r7, #12]
  44878. 801286a: f000 f805 bl 8012878 <prvProcessTimerOrBlockTask>
  44879. /* Empty the command queue. */
  44880. prvProcessReceivedCommands();
  44881. 801286e: f000 f8d7 bl 8012a20 <prvProcessReceivedCommands>
  44882. xNextExpireTime = prvGetNextExpireTime( &xListWasEmpty );
  44883. 8012872: bf00 nop
  44884. 8012874: e7f0 b.n 8012858 <prvTimerTask+0x8>
  44885. ...
  44886. 08012878 <prvProcessTimerOrBlockTask>:
  44887. }
  44888. }
  44889. /*-----------------------------------------------------------*/
  44890. static void prvProcessTimerOrBlockTask( const TickType_t xNextExpireTime, BaseType_t xListWasEmpty )
  44891. {
  44892. 8012878: b580 push {r7, lr}
  44893. 801287a: b084 sub sp, #16
  44894. 801287c: af00 add r7, sp, #0
  44895. 801287e: 6078 str r0, [r7, #4]
  44896. 8012880: 6039 str r1, [r7, #0]
  44897. TickType_t xTimeNow;
  44898. BaseType_t xTimerListsWereSwitched;
  44899. vTaskSuspendAll();
  44900. 8012882: f7fe feb5 bl 80115f0 <vTaskSuspendAll>
  44901. /* Obtain the time now to make an assessment as to whether the timer
  44902. has expired or not. If obtaining the time causes the lists to switch
  44903. then don't process this timer as any timers that remained in the list
  44904. when the lists were switched will have been processed within the
  44905. prvSampleTimeNow() function. */
  44906. xTimeNow = prvSampleTimeNow( &xTimerListsWereSwitched );
  44907. 8012886: f107 0308 add.w r3, r7, #8
  44908. 801288a: 4618 mov r0, r3
  44909. 801288c: f000 f866 bl 801295c <prvSampleTimeNow>
  44910. 8012890: 60f8 str r0, [r7, #12]
  44911. if( xTimerListsWereSwitched == pdFALSE )
  44912. 8012892: 68bb ldr r3, [r7, #8]
  44913. 8012894: 2b00 cmp r3, #0
  44914. 8012896: d130 bne.n 80128fa <prvProcessTimerOrBlockTask+0x82>
  44915. {
  44916. /* The tick count has not overflowed, has the timer expired? */
  44917. if( ( xListWasEmpty == pdFALSE ) && ( xNextExpireTime <= xTimeNow ) )
  44918. 8012898: 683b ldr r3, [r7, #0]
  44919. 801289a: 2b00 cmp r3, #0
  44920. 801289c: d10a bne.n 80128b4 <prvProcessTimerOrBlockTask+0x3c>
  44921. 801289e: 687a ldr r2, [r7, #4]
  44922. 80128a0: 68fb ldr r3, [r7, #12]
  44923. 80128a2: 429a cmp r2, r3
  44924. 80128a4: d806 bhi.n 80128b4 <prvProcessTimerOrBlockTask+0x3c>
  44925. {
  44926. ( void ) xTaskResumeAll();
  44927. 80128a6: f7fe feb1 bl 801160c <xTaskResumeAll>
  44928. prvProcessExpiredTimer( xNextExpireTime, xTimeNow );
  44929. 80128aa: 68f9 ldr r1, [r7, #12]
  44930. 80128ac: 6878 ldr r0, [r7, #4]
  44931. 80128ae: f7ff ff81 bl 80127b4 <prvProcessExpiredTimer>
  44932. else
  44933. {
  44934. ( void ) xTaskResumeAll();
  44935. }
  44936. }
  44937. }
  44938. 80128b2: e024 b.n 80128fe <prvProcessTimerOrBlockTask+0x86>
  44939. if( xListWasEmpty != pdFALSE )
  44940. 80128b4: 683b ldr r3, [r7, #0]
  44941. 80128b6: 2b00 cmp r3, #0
  44942. 80128b8: d008 beq.n 80128cc <prvProcessTimerOrBlockTask+0x54>
  44943. xListWasEmpty = listLIST_IS_EMPTY( pxOverflowTimerList );
  44944. 80128ba: 4b13 ldr r3, [pc, #76] @ (8012908 <prvProcessTimerOrBlockTask+0x90>)
  44945. 80128bc: 681b ldr r3, [r3, #0]
  44946. 80128be: 681b ldr r3, [r3, #0]
  44947. 80128c0: 2b00 cmp r3, #0
  44948. 80128c2: d101 bne.n 80128c8 <prvProcessTimerOrBlockTask+0x50>
  44949. 80128c4: 2301 movs r3, #1
  44950. 80128c6: e000 b.n 80128ca <prvProcessTimerOrBlockTask+0x52>
  44951. 80128c8: 2300 movs r3, #0
  44952. 80128ca: 603b str r3, [r7, #0]
  44953. vQueueWaitForMessageRestricted( xTimerQueue, ( xNextExpireTime - xTimeNow ), xListWasEmpty );
  44954. 80128cc: 4b0f ldr r3, [pc, #60] @ (801290c <prvProcessTimerOrBlockTask+0x94>)
  44955. 80128ce: 6818 ldr r0, [r3, #0]
  44956. 80128d0: 687a ldr r2, [r7, #4]
  44957. 80128d2: 68fb ldr r3, [r7, #12]
  44958. 80128d4: 1ad3 subs r3, r2, r3
  44959. 80128d6: 683a ldr r2, [r7, #0]
  44960. 80128d8: 4619 mov r1, r3
  44961. 80128da: f7fe fa33 bl 8010d44 <vQueueWaitForMessageRestricted>
  44962. if( xTaskResumeAll() == pdFALSE )
  44963. 80128de: f7fe fe95 bl 801160c <xTaskResumeAll>
  44964. 80128e2: 4603 mov r3, r0
  44965. 80128e4: 2b00 cmp r3, #0
  44966. 80128e6: d10a bne.n 80128fe <prvProcessTimerOrBlockTask+0x86>
  44967. portYIELD_WITHIN_API();
  44968. 80128e8: 4b09 ldr r3, [pc, #36] @ (8012910 <prvProcessTimerOrBlockTask+0x98>)
  44969. 80128ea: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  44970. 80128ee: 601a str r2, [r3, #0]
  44971. 80128f0: f3bf 8f4f dsb sy
  44972. 80128f4: f3bf 8f6f isb sy
  44973. }
  44974. 80128f8: e001 b.n 80128fe <prvProcessTimerOrBlockTask+0x86>
  44975. ( void ) xTaskResumeAll();
  44976. 80128fa: f7fe fe87 bl 801160c <xTaskResumeAll>
  44977. }
  44978. 80128fe: bf00 nop
  44979. 8012900: 3710 adds r7, #16
  44980. 8012902: 46bd mov sp, r7
  44981. 8012904: bd80 pop {r7, pc}
  44982. 8012906: bf00 nop
  44983. 8012908: 24002920 .word 0x24002920
  44984. 801290c: 24002924 .word 0x24002924
  44985. 8012910: e000ed04 .word 0xe000ed04
  44986. 08012914 <prvGetNextExpireTime>:
  44987. /*-----------------------------------------------------------*/
  44988. static TickType_t prvGetNextExpireTime( BaseType_t * const pxListWasEmpty )
  44989. {
  44990. 8012914: b480 push {r7}
  44991. 8012916: b085 sub sp, #20
  44992. 8012918: af00 add r7, sp, #0
  44993. 801291a: 6078 str r0, [r7, #4]
  44994. the timer with the nearest expiry time will expire. If there are no
  44995. active timers then just set the next expire time to 0. That will cause
  44996. this task to unblock when the tick count overflows, at which point the
  44997. timer lists will be switched and the next expiry time can be
  44998. re-assessed. */
  44999. *pxListWasEmpty = listLIST_IS_EMPTY( pxCurrentTimerList );
  45000. 801291c: 4b0e ldr r3, [pc, #56] @ (8012958 <prvGetNextExpireTime+0x44>)
  45001. 801291e: 681b ldr r3, [r3, #0]
  45002. 8012920: 681b ldr r3, [r3, #0]
  45003. 8012922: 2b00 cmp r3, #0
  45004. 8012924: d101 bne.n 801292a <prvGetNextExpireTime+0x16>
  45005. 8012926: 2201 movs r2, #1
  45006. 8012928: e000 b.n 801292c <prvGetNextExpireTime+0x18>
  45007. 801292a: 2200 movs r2, #0
  45008. 801292c: 687b ldr r3, [r7, #4]
  45009. 801292e: 601a str r2, [r3, #0]
  45010. if( *pxListWasEmpty == pdFALSE )
  45011. 8012930: 687b ldr r3, [r7, #4]
  45012. 8012932: 681b ldr r3, [r3, #0]
  45013. 8012934: 2b00 cmp r3, #0
  45014. 8012936: d105 bne.n 8012944 <prvGetNextExpireTime+0x30>
  45015. {
  45016. xNextExpireTime = listGET_ITEM_VALUE_OF_HEAD_ENTRY( pxCurrentTimerList );
  45017. 8012938: 4b07 ldr r3, [pc, #28] @ (8012958 <prvGetNextExpireTime+0x44>)
  45018. 801293a: 681b ldr r3, [r3, #0]
  45019. 801293c: 68db ldr r3, [r3, #12]
  45020. 801293e: 681b ldr r3, [r3, #0]
  45021. 8012940: 60fb str r3, [r7, #12]
  45022. 8012942: e001 b.n 8012948 <prvGetNextExpireTime+0x34>
  45023. }
  45024. else
  45025. {
  45026. /* Ensure the task unblocks when the tick count rolls over. */
  45027. xNextExpireTime = ( TickType_t ) 0U;
  45028. 8012944: 2300 movs r3, #0
  45029. 8012946: 60fb str r3, [r7, #12]
  45030. }
  45031. return xNextExpireTime;
  45032. 8012948: 68fb ldr r3, [r7, #12]
  45033. }
  45034. 801294a: 4618 mov r0, r3
  45035. 801294c: 3714 adds r7, #20
  45036. 801294e: 46bd mov sp, r7
  45037. 8012950: f85d 7b04 ldr.w r7, [sp], #4
  45038. 8012954: 4770 bx lr
  45039. 8012956: bf00 nop
  45040. 8012958: 2400291c .word 0x2400291c
  45041. 0801295c <prvSampleTimeNow>:
  45042. /*-----------------------------------------------------------*/
  45043. static TickType_t prvSampleTimeNow( BaseType_t * const pxTimerListsWereSwitched )
  45044. {
  45045. 801295c: b580 push {r7, lr}
  45046. 801295e: b084 sub sp, #16
  45047. 8012960: af00 add r7, sp, #0
  45048. 8012962: 6078 str r0, [r7, #4]
  45049. TickType_t xTimeNow;
  45050. PRIVILEGED_DATA static TickType_t xLastTime = ( TickType_t ) 0U; /*lint !e956 Variable is only accessible to one task. */
  45051. xTimeNow = xTaskGetTickCount();
  45052. 8012964: f7fe fef0 bl 8011748 <xTaskGetTickCount>
  45053. 8012968: 60f8 str r0, [r7, #12]
  45054. if( xTimeNow < xLastTime )
  45055. 801296a: 4b0b ldr r3, [pc, #44] @ (8012998 <prvSampleTimeNow+0x3c>)
  45056. 801296c: 681b ldr r3, [r3, #0]
  45057. 801296e: 68fa ldr r2, [r7, #12]
  45058. 8012970: 429a cmp r2, r3
  45059. 8012972: d205 bcs.n 8012980 <prvSampleTimeNow+0x24>
  45060. {
  45061. prvSwitchTimerLists();
  45062. 8012974: f000 f93a bl 8012bec <prvSwitchTimerLists>
  45063. *pxTimerListsWereSwitched = pdTRUE;
  45064. 8012978: 687b ldr r3, [r7, #4]
  45065. 801297a: 2201 movs r2, #1
  45066. 801297c: 601a str r2, [r3, #0]
  45067. 801297e: e002 b.n 8012986 <prvSampleTimeNow+0x2a>
  45068. }
  45069. else
  45070. {
  45071. *pxTimerListsWereSwitched = pdFALSE;
  45072. 8012980: 687b ldr r3, [r7, #4]
  45073. 8012982: 2200 movs r2, #0
  45074. 8012984: 601a str r2, [r3, #0]
  45075. }
  45076. xLastTime = xTimeNow;
  45077. 8012986: 4a04 ldr r2, [pc, #16] @ (8012998 <prvSampleTimeNow+0x3c>)
  45078. 8012988: 68fb ldr r3, [r7, #12]
  45079. 801298a: 6013 str r3, [r2, #0]
  45080. return xTimeNow;
  45081. 801298c: 68fb ldr r3, [r7, #12]
  45082. }
  45083. 801298e: 4618 mov r0, r3
  45084. 8012990: 3710 adds r7, #16
  45085. 8012992: 46bd mov sp, r7
  45086. 8012994: bd80 pop {r7, pc}
  45087. 8012996: bf00 nop
  45088. 8012998: 2400292c .word 0x2400292c
  45089. 0801299c <prvInsertTimerInActiveList>:
  45090. /*-----------------------------------------------------------*/
  45091. static BaseType_t prvInsertTimerInActiveList( Timer_t * const pxTimer, const TickType_t xNextExpiryTime, const TickType_t xTimeNow, const TickType_t xCommandTime )
  45092. {
  45093. 801299c: b580 push {r7, lr}
  45094. 801299e: b086 sub sp, #24
  45095. 80129a0: af00 add r7, sp, #0
  45096. 80129a2: 60f8 str r0, [r7, #12]
  45097. 80129a4: 60b9 str r1, [r7, #8]
  45098. 80129a6: 607a str r2, [r7, #4]
  45099. 80129a8: 603b str r3, [r7, #0]
  45100. BaseType_t xProcessTimerNow = pdFALSE;
  45101. 80129aa: 2300 movs r3, #0
  45102. 80129ac: 617b str r3, [r7, #20]
  45103. listSET_LIST_ITEM_VALUE( &( pxTimer->xTimerListItem ), xNextExpiryTime );
  45104. 80129ae: 68fb ldr r3, [r7, #12]
  45105. 80129b0: 68ba ldr r2, [r7, #8]
  45106. 80129b2: 605a str r2, [r3, #4]
  45107. listSET_LIST_ITEM_OWNER( &( pxTimer->xTimerListItem ), pxTimer );
  45108. 80129b4: 68fb ldr r3, [r7, #12]
  45109. 80129b6: 68fa ldr r2, [r7, #12]
  45110. 80129b8: 611a str r2, [r3, #16]
  45111. if( xNextExpiryTime <= xTimeNow )
  45112. 80129ba: 68ba ldr r2, [r7, #8]
  45113. 80129bc: 687b ldr r3, [r7, #4]
  45114. 80129be: 429a cmp r2, r3
  45115. 80129c0: d812 bhi.n 80129e8 <prvInsertTimerInActiveList+0x4c>
  45116. {
  45117. /* Has the expiry time elapsed between the command to start/reset a
  45118. timer was issued, and the time the command was processed? */
  45119. if( ( ( TickType_t ) ( xTimeNow - xCommandTime ) ) >= pxTimer->xTimerPeriodInTicks ) /*lint !e961 MISRA exception as the casts are only redundant for some ports. */
  45120. 80129c2: 687a ldr r2, [r7, #4]
  45121. 80129c4: 683b ldr r3, [r7, #0]
  45122. 80129c6: 1ad2 subs r2, r2, r3
  45123. 80129c8: 68fb ldr r3, [r7, #12]
  45124. 80129ca: 699b ldr r3, [r3, #24]
  45125. 80129cc: 429a cmp r2, r3
  45126. 80129ce: d302 bcc.n 80129d6 <prvInsertTimerInActiveList+0x3a>
  45127. {
  45128. /* The time between a command being issued and the command being
  45129. processed actually exceeds the timers period. */
  45130. xProcessTimerNow = pdTRUE;
  45131. 80129d0: 2301 movs r3, #1
  45132. 80129d2: 617b str r3, [r7, #20]
  45133. 80129d4: e01b b.n 8012a0e <prvInsertTimerInActiveList+0x72>
  45134. }
  45135. else
  45136. {
  45137. vListInsert( pxOverflowTimerList, &( pxTimer->xTimerListItem ) );
  45138. 80129d6: 4b10 ldr r3, [pc, #64] @ (8012a18 <prvInsertTimerInActiveList+0x7c>)
  45139. 80129d8: 681a ldr r2, [r3, #0]
  45140. 80129da: 68fb ldr r3, [r7, #12]
  45141. 80129dc: 3304 adds r3, #4
  45142. 80129de: 4619 mov r1, r3
  45143. 80129e0: 4610 mov r0, r2
  45144. 80129e2: f7fd f9e8 bl 800fdb6 <vListInsert>
  45145. 80129e6: e012 b.n 8012a0e <prvInsertTimerInActiveList+0x72>
  45146. }
  45147. }
  45148. else
  45149. {
  45150. if( ( xTimeNow < xCommandTime ) && ( xNextExpiryTime >= xCommandTime ) )
  45151. 80129e8: 687a ldr r2, [r7, #4]
  45152. 80129ea: 683b ldr r3, [r7, #0]
  45153. 80129ec: 429a cmp r2, r3
  45154. 80129ee: d206 bcs.n 80129fe <prvInsertTimerInActiveList+0x62>
  45155. 80129f0: 68ba ldr r2, [r7, #8]
  45156. 80129f2: 683b ldr r3, [r7, #0]
  45157. 80129f4: 429a cmp r2, r3
  45158. 80129f6: d302 bcc.n 80129fe <prvInsertTimerInActiveList+0x62>
  45159. {
  45160. /* If, since the command was issued, the tick count has overflowed
  45161. but the expiry time has not, then the timer must have already passed
  45162. its expiry time and should be processed immediately. */
  45163. xProcessTimerNow = pdTRUE;
  45164. 80129f8: 2301 movs r3, #1
  45165. 80129fa: 617b str r3, [r7, #20]
  45166. 80129fc: e007 b.n 8012a0e <prvInsertTimerInActiveList+0x72>
  45167. }
  45168. else
  45169. {
  45170. vListInsert( pxCurrentTimerList, &( pxTimer->xTimerListItem ) );
  45171. 80129fe: 4b07 ldr r3, [pc, #28] @ (8012a1c <prvInsertTimerInActiveList+0x80>)
  45172. 8012a00: 681a ldr r2, [r3, #0]
  45173. 8012a02: 68fb ldr r3, [r7, #12]
  45174. 8012a04: 3304 adds r3, #4
  45175. 8012a06: 4619 mov r1, r3
  45176. 8012a08: 4610 mov r0, r2
  45177. 8012a0a: f7fd f9d4 bl 800fdb6 <vListInsert>
  45178. }
  45179. }
  45180. return xProcessTimerNow;
  45181. 8012a0e: 697b ldr r3, [r7, #20]
  45182. }
  45183. 8012a10: 4618 mov r0, r3
  45184. 8012a12: 3718 adds r7, #24
  45185. 8012a14: 46bd mov sp, r7
  45186. 8012a16: bd80 pop {r7, pc}
  45187. 8012a18: 24002920 .word 0x24002920
  45188. 8012a1c: 2400291c .word 0x2400291c
  45189. 08012a20 <prvProcessReceivedCommands>:
  45190. /*-----------------------------------------------------------*/
  45191. static void prvProcessReceivedCommands( void )
  45192. {
  45193. 8012a20: b580 push {r7, lr}
  45194. 8012a22: b08e sub sp, #56 @ 0x38
  45195. 8012a24: af02 add r7, sp, #8
  45196. DaemonTaskMessage_t xMessage;
  45197. Timer_t *pxTimer;
  45198. BaseType_t xTimerListsWereSwitched, xResult;
  45199. TickType_t xTimeNow;
  45200. 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. */
  45201. 8012a26: e0ce b.n 8012bc6 <prvProcessReceivedCommands+0x1a6>
  45202. {
  45203. #if ( INCLUDE_xTimerPendFunctionCall == 1 )
  45204. {
  45205. /* Negative commands are pended function calls rather than timer
  45206. commands. */
  45207. if( xMessage.xMessageID < ( BaseType_t ) 0 )
  45208. 8012a28: 687b ldr r3, [r7, #4]
  45209. 8012a2a: 2b00 cmp r3, #0
  45210. 8012a2c: da19 bge.n 8012a62 <prvProcessReceivedCommands+0x42>
  45211. {
  45212. const CallbackParameters_t * const pxCallback = &( xMessage.u.xCallbackParameters );
  45213. 8012a2e: 1d3b adds r3, r7, #4
  45214. 8012a30: 3304 adds r3, #4
  45215. 8012a32: 62fb str r3, [r7, #44] @ 0x2c
  45216. /* The timer uses the xCallbackParameters member to request a
  45217. callback be executed. Check the callback is not NULL. */
  45218. configASSERT( pxCallback );
  45219. 8012a34: 6afb ldr r3, [r7, #44] @ 0x2c
  45220. 8012a36: 2b00 cmp r3, #0
  45221. 8012a38: d10b bne.n 8012a52 <prvProcessReceivedCommands+0x32>
  45222. __asm volatile
  45223. 8012a3a: f04f 0350 mov.w r3, #80 @ 0x50
  45224. 8012a3e: f383 8811 msr BASEPRI, r3
  45225. 8012a42: f3bf 8f6f isb sy
  45226. 8012a46: f3bf 8f4f dsb sy
  45227. 8012a4a: 61fb str r3, [r7, #28]
  45228. }
  45229. 8012a4c: bf00 nop
  45230. 8012a4e: bf00 nop
  45231. 8012a50: e7fd b.n 8012a4e <prvProcessReceivedCommands+0x2e>
  45232. /* Call the function. */
  45233. pxCallback->pxCallbackFunction( pxCallback->pvParameter1, pxCallback->ulParameter2 );
  45234. 8012a52: 6afb ldr r3, [r7, #44] @ 0x2c
  45235. 8012a54: 681b ldr r3, [r3, #0]
  45236. 8012a56: 6afa ldr r2, [r7, #44] @ 0x2c
  45237. 8012a58: 6850 ldr r0, [r2, #4]
  45238. 8012a5a: 6afa ldr r2, [r7, #44] @ 0x2c
  45239. 8012a5c: 6892 ldr r2, [r2, #8]
  45240. 8012a5e: 4611 mov r1, r2
  45241. 8012a60: 4798 blx r3
  45242. }
  45243. #endif /* INCLUDE_xTimerPendFunctionCall */
  45244. /* Commands that are positive are timer commands rather than pended
  45245. function calls. */
  45246. if( xMessage.xMessageID >= ( BaseType_t ) 0 )
  45247. 8012a62: 687b ldr r3, [r7, #4]
  45248. 8012a64: 2b00 cmp r3, #0
  45249. 8012a66: f2c0 80ae blt.w 8012bc6 <prvProcessReceivedCommands+0x1a6>
  45250. {
  45251. /* The messages uses the xTimerParameters member to work on a
  45252. software timer. */
  45253. pxTimer = xMessage.u.xTimerParameters.pxTimer;
  45254. 8012a6a: 68fb ldr r3, [r7, #12]
  45255. 8012a6c: 62bb str r3, [r7, #40] @ 0x28
  45256. if( listIS_CONTAINED_WITHIN( NULL, &( pxTimer->xTimerListItem ) ) == pdFALSE ) /*lint !e961. The cast is only redundant when NULL is passed into the macro. */
  45257. 8012a6e: 6abb ldr r3, [r7, #40] @ 0x28
  45258. 8012a70: 695b ldr r3, [r3, #20]
  45259. 8012a72: 2b00 cmp r3, #0
  45260. 8012a74: d004 beq.n 8012a80 <prvProcessReceivedCommands+0x60>
  45261. {
  45262. /* The timer is in a list, remove it. */
  45263. ( void ) uxListRemove( &( pxTimer->xTimerListItem ) );
  45264. 8012a76: 6abb ldr r3, [r7, #40] @ 0x28
  45265. 8012a78: 3304 adds r3, #4
  45266. 8012a7a: 4618 mov r0, r3
  45267. 8012a7c: f7fd f9d4 bl 800fe28 <uxListRemove>
  45268. it must be present in the function call. prvSampleTimeNow() must be
  45269. called after the message is received from xTimerQueue so there is no
  45270. possibility of a higher priority task adding a message to the message
  45271. queue with a time that is ahead of the timer daemon task (because it
  45272. pre-empted the timer daemon task after the xTimeNow value was set). */
  45273. xTimeNow = prvSampleTimeNow( &xTimerListsWereSwitched );
  45274. 8012a80: 463b mov r3, r7
  45275. 8012a82: 4618 mov r0, r3
  45276. 8012a84: f7ff ff6a bl 801295c <prvSampleTimeNow>
  45277. 8012a88: 6278 str r0, [r7, #36] @ 0x24
  45278. switch( xMessage.xMessageID )
  45279. 8012a8a: 687b ldr r3, [r7, #4]
  45280. 8012a8c: 2b09 cmp r3, #9
  45281. 8012a8e: f200 8097 bhi.w 8012bc0 <prvProcessReceivedCommands+0x1a0>
  45282. 8012a92: a201 add r2, pc, #4 @ (adr r2, 8012a98 <prvProcessReceivedCommands+0x78>)
  45283. 8012a94: f852 f023 ldr.w pc, [r2, r3, lsl #2]
  45284. 8012a98: 08012ac1 .word 0x08012ac1
  45285. 8012a9c: 08012ac1 .word 0x08012ac1
  45286. 8012aa0: 08012ac1 .word 0x08012ac1
  45287. 8012aa4: 08012b37 .word 0x08012b37
  45288. 8012aa8: 08012b4b .word 0x08012b4b
  45289. 8012aac: 08012b97 .word 0x08012b97
  45290. 8012ab0: 08012ac1 .word 0x08012ac1
  45291. 8012ab4: 08012ac1 .word 0x08012ac1
  45292. 8012ab8: 08012b37 .word 0x08012b37
  45293. 8012abc: 08012b4b .word 0x08012b4b
  45294. case tmrCOMMAND_START_FROM_ISR :
  45295. case tmrCOMMAND_RESET :
  45296. case tmrCOMMAND_RESET_FROM_ISR :
  45297. case tmrCOMMAND_START_DONT_TRACE :
  45298. /* Start or restart a timer. */
  45299. pxTimer->ucStatus |= tmrSTATUS_IS_ACTIVE;
  45300. 8012ac0: 6abb ldr r3, [r7, #40] @ 0x28
  45301. 8012ac2: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  45302. 8012ac6: f043 0301 orr.w r3, r3, #1
  45303. 8012aca: b2da uxtb r2, r3
  45304. 8012acc: 6abb ldr r3, [r7, #40] @ 0x28
  45305. 8012ace: f883 2028 strb.w r2, [r3, #40] @ 0x28
  45306. if( prvInsertTimerInActiveList( pxTimer, xMessage.u.xTimerParameters.xMessageValue + pxTimer->xTimerPeriodInTicks, xTimeNow, xMessage.u.xTimerParameters.xMessageValue ) != pdFALSE )
  45307. 8012ad2: 68ba ldr r2, [r7, #8]
  45308. 8012ad4: 6abb ldr r3, [r7, #40] @ 0x28
  45309. 8012ad6: 699b ldr r3, [r3, #24]
  45310. 8012ad8: 18d1 adds r1, r2, r3
  45311. 8012ada: 68bb ldr r3, [r7, #8]
  45312. 8012adc: 6a7a ldr r2, [r7, #36] @ 0x24
  45313. 8012ade: 6ab8 ldr r0, [r7, #40] @ 0x28
  45314. 8012ae0: f7ff ff5c bl 801299c <prvInsertTimerInActiveList>
  45315. 8012ae4: 4603 mov r3, r0
  45316. 8012ae6: 2b00 cmp r3, #0
  45317. 8012ae8: d06c beq.n 8012bc4 <prvProcessReceivedCommands+0x1a4>
  45318. {
  45319. /* The timer expired before it was added to the active
  45320. timer list. Process it now. */
  45321. pxTimer->pxCallbackFunction( ( TimerHandle_t ) pxTimer );
  45322. 8012aea: 6abb ldr r3, [r7, #40] @ 0x28
  45323. 8012aec: 6a1b ldr r3, [r3, #32]
  45324. 8012aee: 6ab8 ldr r0, [r7, #40] @ 0x28
  45325. 8012af0: 4798 blx r3
  45326. traceTIMER_EXPIRED( pxTimer );
  45327. if( ( pxTimer->ucStatus & tmrSTATUS_IS_AUTORELOAD ) != 0 )
  45328. 8012af2: 6abb ldr r3, [r7, #40] @ 0x28
  45329. 8012af4: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  45330. 8012af8: f003 0304 and.w r3, r3, #4
  45331. 8012afc: 2b00 cmp r3, #0
  45332. 8012afe: d061 beq.n 8012bc4 <prvProcessReceivedCommands+0x1a4>
  45333. {
  45334. xResult = xTimerGenericCommand( pxTimer, tmrCOMMAND_START_DONT_TRACE, xMessage.u.xTimerParameters.xMessageValue + pxTimer->xTimerPeriodInTicks, NULL, tmrNO_DELAY );
  45335. 8012b00: 68ba ldr r2, [r7, #8]
  45336. 8012b02: 6abb ldr r3, [r7, #40] @ 0x28
  45337. 8012b04: 699b ldr r3, [r3, #24]
  45338. 8012b06: 441a add r2, r3
  45339. 8012b08: 2300 movs r3, #0
  45340. 8012b0a: 9300 str r3, [sp, #0]
  45341. 8012b0c: 2300 movs r3, #0
  45342. 8012b0e: 2100 movs r1, #0
  45343. 8012b10: 6ab8 ldr r0, [r7, #40] @ 0x28
  45344. 8012b12: f7ff fe01 bl 8012718 <xTimerGenericCommand>
  45345. 8012b16: 6238 str r0, [r7, #32]
  45346. configASSERT( xResult );
  45347. 8012b18: 6a3b ldr r3, [r7, #32]
  45348. 8012b1a: 2b00 cmp r3, #0
  45349. 8012b1c: d152 bne.n 8012bc4 <prvProcessReceivedCommands+0x1a4>
  45350. __asm volatile
  45351. 8012b1e: f04f 0350 mov.w r3, #80 @ 0x50
  45352. 8012b22: f383 8811 msr BASEPRI, r3
  45353. 8012b26: f3bf 8f6f isb sy
  45354. 8012b2a: f3bf 8f4f dsb sy
  45355. 8012b2e: 61bb str r3, [r7, #24]
  45356. }
  45357. 8012b30: bf00 nop
  45358. 8012b32: bf00 nop
  45359. 8012b34: e7fd b.n 8012b32 <prvProcessReceivedCommands+0x112>
  45360. break;
  45361. case tmrCOMMAND_STOP :
  45362. case tmrCOMMAND_STOP_FROM_ISR :
  45363. /* The timer has already been removed from the active list. */
  45364. pxTimer->ucStatus &= ~tmrSTATUS_IS_ACTIVE;
  45365. 8012b36: 6abb ldr r3, [r7, #40] @ 0x28
  45366. 8012b38: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  45367. 8012b3c: f023 0301 bic.w r3, r3, #1
  45368. 8012b40: b2da uxtb r2, r3
  45369. 8012b42: 6abb ldr r3, [r7, #40] @ 0x28
  45370. 8012b44: f883 2028 strb.w r2, [r3, #40] @ 0x28
  45371. break;
  45372. 8012b48: e03d b.n 8012bc6 <prvProcessReceivedCommands+0x1a6>
  45373. case tmrCOMMAND_CHANGE_PERIOD :
  45374. case tmrCOMMAND_CHANGE_PERIOD_FROM_ISR :
  45375. pxTimer->ucStatus |= tmrSTATUS_IS_ACTIVE;
  45376. 8012b4a: 6abb ldr r3, [r7, #40] @ 0x28
  45377. 8012b4c: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  45378. 8012b50: f043 0301 orr.w r3, r3, #1
  45379. 8012b54: b2da uxtb r2, r3
  45380. 8012b56: 6abb ldr r3, [r7, #40] @ 0x28
  45381. 8012b58: f883 2028 strb.w r2, [r3, #40] @ 0x28
  45382. pxTimer->xTimerPeriodInTicks = xMessage.u.xTimerParameters.xMessageValue;
  45383. 8012b5c: 68ba ldr r2, [r7, #8]
  45384. 8012b5e: 6abb ldr r3, [r7, #40] @ 0x28
  45385. 8012b60: 619a str r2, [r3, #24]
  45386. configASSERT( ( pxTimer->xTimerPeriodInTicks > 0 ) );
  45387. 8012b62: 6abb ldr r3, [r7, #40] @ 0x28
  45388. 8012b64: 699b ldr r3, [r3, #24]
  45389. 8012b66: 2b00 cmp r3, #0
  45390. 8012b68: d10b bne.n 8012b82 <prvProcessReceivedCommands+0x162>
  45391. __asm volatile
  45392. 8012b6a: f04f 0350 mov.w r3, #80 @ 0x50
  45393. 8012b6e: f383 8811 msr BASEPRI, r3
  45394. 8012b72: f3bf 8f6f isb sy
  45395. 8012b76: f3bf 8f4f dsb sy
  45396. 8012b7a: 617b str r3, [r7, #20]
  45397. }
  45398. 8012b7c: bf00 nop
  45399. 8012b7e: bf00 nop
  45400. 8012b80: e7fd b.n 8012b7e <prvProcessReceivedCommands+0x15e>
  45401. be longer or shorter than the old one. The command time is
  45402. therefore set to the current time, and as the period cannot
  45403. be zero the next expiry time can only be in the future,
  45404. meaning (unlike for the xTimerStart() case above) there is
  45405. no fail case that needs to be handled here. */
  45406. ( void ) prvInsertTimerInActiveList( pxTimer, ( xTimeNow + pxTimer->xTimerPeriodInTicks ), xTimeNow, xTimeNow );
  45407. 8012b82: 6abb ldr r3, [r7, #40] @ 0x28
  45408. 8012b84: 699a ldr r2, [r3, #24]
  45409. 8012b86: 6a7b ldr r3, [r7, #36] @ 0x24
  45410. 8012b88: 18d1 adds r1, r2, r3
  45411. 8012b8a: 6a7b ldr r3, [r7, #36] @ 0x24
  45412. 8012b8c: 6a7a ldr r2, [r7, #36] @ 0x24
  45413. 8012b8e: 6ab8 ldr r0, [r7, #40] @ 0x28
  45414. 8012b90: f7ff ff04 bl 801299c <prvInsertTimerInActiveList>
  45415. break;
  45416. 8012b94: e017 b.n 8012bc6 <prvProcessReceivedCommands+0x1a6>
  45417. #if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
  45418. {
  45419. /* The timer has already been removed from the active list,
  45420. just free up the memory if the memory was dynamically
  45421. allocated. */
  45422. if( ( pxTimer->ucStatus & tmrSTATUS_IS_STATICALLY_ALLOCATED ) == ( uint8_t ) 0 )
  45423. 8012b96: 6abb ldr r3, [r7, #40] @ 0x28
  45424. 8012b98: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  45425. 8012b9c: f003 0302 and.w r3, r3, #2
  45426. 8012ba0: 2b00 cmp r3, #0
  45427. 8012ba2: d103 bne.n 8012bac <prvProcessReceivedCommands+0x18c>
  45428. {
  45429. vPortFree( pxTimer );
  45430. 8012ba4: 6ab8 ldr r0, [r7, #40] @ 0x28
  45431. 8012ba6: f000 fbe7 bl 8013378 <vPortFree>
  45432. no need to free the memory - just mark the timer as
  45433. "not active". */
  45434. pxTimer->ucStatus &= ~tmrSTATUS_IS_ACTIVE;
  45435. }
  45436. #endif /* configSUPPORT_DYNAMIC_ALLOCATION */
  45437. break;
  45438. 8012baa: e00c b.n 8012bc6 <prvProcessReceivedCommands+0x1a6>
  45439. pxTimer->ucStatus &= ~tmrSTATUS_IS_ACTIVE;
  45440. 8012bac: 6abb ldr r3, [r7, #40] @ 0x28
  45441. 8012bae: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  45442. 8012bb2: f023 0301 bic.w r3, r3, #1
  45443. 8012bb6: b2da uxtb r2, r3
  45444. 8012bb8: 6abb ldr r3, [r7, #40] @ 0x28
  45445. 8012bba: f883 2028 strb.w r2, [r3, #40] @ 0x28
  45446. break;
  45447. 8012bbe: e002 b.n 8012bc6 <prvProcessReceivedCommands+0x1a6>
  45448. default :
  45449. /* Don't expect to get here. */
  45450. break;
  45451. 8012bc0: bf00 nop
  45452. 8012bc2: e000 b.n 8012bc6 <prvProcessReceivedCommands+0x1a6>
  45453. break;
  45454. 8012bc4: bf00 nop
  45455. 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. */
  45456. 8012bc6: 4b08 ldr r3, [pc, #32] @ (8012be8 <prvProcessReceivedCommands+0x1c8>)
  45457. 8012bc8: 681b ldr r3, [r3, #0]
  45458. 8012bca: 1d39 adds r1, r7, #4
  45459. 8012bcc: 2200 movs r2, #0
  45460. 8012bce: 4618 mov r0, r3
  45461. 8012bd0: f7fd fcf2 bl 80105b8 <xQueueReceive>
  45462. 8012bd4: 4603 mov r3, r0
  45463. 8012bd6: 2b00 cmp r3, #0
  45464. 8012bd8: f47f af26 bne.w 8012a28 <prvProcessReceivedCommands+0x8>
  45465. }
  45466. }
  45467. }
  45468. }
  45469. 8012bdc: bf00 nop
  45470. 8012bde: bf00 nop
  45471. 8012be0: 3730 adds r7, #48 @ 0x30
  45472. 8012be2: 46bd mov sp, r7
  45473. 8012be4: bd80 pop {r7, pc}
  45474. 8012be6: bf00 nop
  45475. 8012be8: 24002924 .word 0x24002924
  45476. 08012bec <prvSwitchTimerLists>:
  45477. /*-----------------------------------------------------------*/
  45478. static void prvSwitchTimerLists( void )
  45479. {
  45480. 8012bec: b580 push {r7, lr}
  45481. 8012bee: b088 sub sp, #32
  45482. 8012bf0: af02 add r7, sp, #8
  45483. /* The tick count has overflowed. The timer lists must be switched.
  45484. If there are any timers still referenced from the current timer list
  45485. then they must have expired and should be processed before the lists
  45486. are switched. */
  45487. while( listLIST_IS_EMPTY( pxCurrentTimerList ) == pdFALSE )
  45488. 8012bf2: e049 b.n 8012c88 <prvSwitchTimerLists+0x9c>
  45489. {
  45490. xNextExpireTime = listGET_ITEM_VALUE_OF_HEAD_ENTRY( pxCurrentTimerList );
  45491. 8012bf4: 4b2e ldr r3, [pc, #184] @ (8012cb0 <prvSwitchTimerLists+0xc4>)
  45492. 8012bf6: 681b ldr r3, [r3, #0]
  45493. 8012bf8: 68db ldr r3, [r3, #12]
  45494. 8012bfa: 681b ldr r3, [r3, #0]
  45495. 8012bfc: 613b str r3, [r7, #16]
  45496. /* Remove the timer from the list. */
  45497. 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. */
  45498. 8012bfe: 4b2c ldr r3, [pc, #176] @ (8012cb0 <prvSwitchTimerLists+0xc4>)
  45499. 8012c00: 681b ldr r3, [r3, #0]
  45500. 8012c02: 68db ldr r3, [r3, #12]
  45501. 8012c04: 68db ldr r3, [r3, #12]
  45502. 8012c06: 60fb str r3, [r7, #12]
  45503. ( void ) uxListRemove( &( pxTimer->xTimerListItem ) );
  45504. 8012c08: 68fb ldr r3, [r7, #12]
  45505. 8012c0a: 3304 adds r3, #4
  45506. 8012c0c: 4618 mov r0, r3
  45507. 8012c0e: f7fd f90b bl 800fe28 <uxListRemove>
  45508. traceTIMER_EXPIRED( pxTimer );
  45509. /* Execute its callback, then send a command to restart the timer if
  45510. it is an auto-reload timer. It cannot be restarted here as the lists
  45511. have not yet been switched. */
  45512. pxTimer->pxCallbackFunction( ( TimerHandle_t ) pxTimer );
  45513. 8012c12: 68fb ldr r3, [r7, #12]
  45514. 8012c14: 6a1b ldr r3, [r3, #32]
  45515. 8012c16: 68f8 ldr r0, [r7, #12]
  45516. 8012c18: 4798 blx r3
  45517. if( ( pxTimer->ucStatus & tmrSTATUS_IS_AUTORELOAD ) != 0 )
  45518. 8012c1a: 68fb ldr r3, [r7, #12]
  45519. 8012c1c: f893 3028 ldrb.w r3, [r3, #40] @ 0x28
  45520. 8012c20: f003 0304 and.w r3, r3, #4
  45521. 8012c24: 2b00 cmp r3, #0
  45522. 8012c26: d02f beq.n 8012c88 <prvSwitchTimerLists+0x9c>
  45523. the timer going into the same timer list then it has already expired
  45524. and the timer should be re-inserted into the current list so it is
  45525. processed again within this loop. Otherwise a command should be sent
  45526. to restart the timer to ensure it is only inserted into a list after
  45527. the lists have been swapped. */
  45528. xReloadTime = ( xNextExpireTime + pxTimer->xTimerPeriodInTicks );
  45529. 8012c28: 68fb ldr r3, [r7, #12]
  45530. 8012c2a: 699b ldr r3, [r3, #24]
  45531. 8012c2c: 693a ldr r2, [r7, #16]
  45532. 8012c2e: 4413 add r3, r2
  45533. 8012c30: 60bb str r3, [r7, #8]
  45534. if( xReloadTime > xNextExpireTime )
  45535. 8012c32: 68ba ldr r2, [r7, #8]
  45536. 8012c34: 693b ldr r3, [r7, #16]
  45537. 8012c36: 429a cmp r2, r3
  45538. 8012c38: d90e bls.n 8012c58 <prvSwitchTimerLists+0x6c>
  45539. {
  45540. listSET_LIST_ITEM_VALUE( &( pxTimer->xTimerListItem ), xReloadTime );
  45541. 8012c3a: 68fb ldr r3, [r7, #12]
  45542. 8012c3c: 68ba ldr r2, [r7, #8]
  45543. 8012c3e: 605a str r2, [r3, #4]
  45544. listSET_LIST_ITEM_OWNER( &( pxTimer->xTimerListItem ), pxTimer );
  45545. 8012c40: 68fb ldr r3, [r7, #12]
  45546. 8012c42: 68fa ldr r2, [r7, #12]
  45547. 8012c44: 611a str r2, [r3, #16]
  45548. vListInsert( pxCurrentTimerList, &( pxTimer->xTimerListItem ) );
  45549. 8012c46: 4b1a ldr r3, [pc, #104] @ (8012cb0 <prvSwitchTimerLists+0xc4>)
  45550. 8012c48: 681a ldr r2, [r3, #0]
  45551. 8012c4a: 68fb ldr r3, [r7, #12]
  45552. 8012c4c: 3304 adds r3, #4
  45553. 8012c4e: 4619 mov r1, r3
  45554. 8012c50: 4610 mov r0, r2
  45555. 8012c52: f7fd f8b0 bl 800fdb6 <vListInsert>
  45556. 8012c56: e017 b.n 8012c88 <prvSwitchTimerLists+0x9c>
  45557. }
  45558. else
  45559. {
  45560. xResult = xTimerGenericCommand( pxTimer, tmrCOMMAND_START_DONT_TRACE, xNextExpireTime, NULL, tmrNO_DELAY );
  45561. 8012c58: 2300 movs r3, #0
  45562. 8012c5a: 9300 str r3, [sp, #0]
  45563. 8012c5c: 2300 movs r3, #0
  45564. 8012c5e: 693a ldr r2, [r7, #16]
  45565. 8012c60: 2100 movs r1, #0
  45566. 8012c62: 68f8 ldr r0, [r7, #12]
  45567. 8012c64: f7ff fd58 bl 8012718 <xTimerGenericCommand>
  45568. 8012c68: 6078 str r0, [r7, #4]
  45569. configASSERT( xResult );
  45570. 8012c6a: 687b ldr r3, [r7, #4]
  45571. 8012c6c: 2b00 cmp r3, #0
  45572. 8012c6e: d10b bne.n 8012c88 <prvSwitchTimerLists+0x9c>
  45573. __asm volatile
  45574. 8012c70: f04f 0350 mov.w r3, #80 @ 0x50
  45575. 8012c74: f383 8811 msr BASEPRI, r3
  45576. 8012c78: f3bf 8f6f isb sy
  45577. 8012c7c: f3bf 8f4f dsb sy
  45578. 8012c80: 603b str r3, [r7, #0]
  45579. }
  45580. 8012c82: bf00 nop
  45581. 8012c84: bf00 nop
  45582. 8012c86: e7fd b.n 8012c84 <prvSwitchTimerLists+0x98>
  45583. while( listLIST_IS_EMPTY( pxCurrentTimerList ) == pdFALSE )
  45584. 8012c88: 4b09 ldr r3, [pc, #36] @ (8012cb0 <prvSwitchTimerLists+0xc4>)
  45585. 8012c8a: 681b ldr r3, [r3, #0]
  45586. 8012c8c: 681b ldr r3, [r3, #0]
  45587. 8012c8e: 2b00 cmp r3, #0
  45588. 8012c90: d1b0 bne.n 8012bf4 <prvSwitchTimerLists+0x8>
  45589. {
  45590. mtCOVERAGE_TEST_MARKER();
  45591. }
  45592. }
  45593. pxTemp = pxCurrentTimerList;
  45594. 8012c92: 4b07 ldr r3, [pc, #28] @ (8012cb0 <prvSwitchTimerLists+0xc4>)
  45595. 8012c94: 681b ldr r3, [r3, #0]
  45596. 8012c96: 617b str r3, [r7, #20]
  45597. pxCurrentTimerList = pxOverflowTimerList;
  45598. 8012c98: 4b06 ldr r3, [pc, #24] @ (8012cb4 <prvSwitchTimerLists+0xc8>)
  45599. 8012c9a: 681b ldr r3, [r3, #0]
  45600. 8012c9c: 4a04 ldr r2, [pc, #16] @ (8012cb0 <prvSwitchTimerLists+0xc4>)
  45601. 8012c9e: 6013 str r3, [r2, #0]
  45602. pxOverflowTimerList = pxTemp;
  45603. 8012ca0: 4a04 ldr r2, [pc, #16] @ (8012cb4 <prvSwitchTimerLists+0xc8>)
  45604. 8012ca2: 697b ldr r3, [r7, #20]
  45605. 8012ca4: 6013 str r3, [r2, #0]
  45606. }
  45607. 8012ca6: bf00 nop
  45608. 8012ca8: 3718 adds r7, #24
  45609. 8012caa: 46bd mov sp, r7
  45610. 8012cac: bd80 pop {r7, pc}
  45611. 8012cae: bf00 nop
  45612. 8012cb0: 2400291c .word 0x2400291c
  45613. 8012cb4: 24002920 .word 0x24002920
  45614. 08012cb8 <prvCheckForValidListAndQueue>:
  45615. /*-----------------------------------------------------------*/
  45616. static void prvCheckForValidListAndQueue( void )
  45617. {
  45618. 8012cb8: b580 push {r7, lr}
  45619. 8012cba: b082 sub sp, #8
  45620. 8012cbc: af02 add r7, sp, #8
  45621. /* Check that the list from which active timers are referenced, and the
  45622. queue used to communicate with the timer service, have been
  45623. initialised. */
  45624. taskENTER_CRITICAL();
  45625. 8012cbe: f000 f96b bl 8012f98 <vPortEnterCritical>
  45626. {
  45627. if( xTimerQueue == NULL )
  45628. 8012cc2: 4b15 ldr r3, [pc, #84] @ (8012d18 <prvCheckForValidListAndQueue+0x60>)
  45629. 8012cc4: 681b ldr r3, [r3, #0]
  45630. 8012cc6: 2b00 cmp r3, #0
  45631. 8012cc8: d120 bne.n 8012d0c <prvCheckForValidListAndQueue+0x54>
  45632. {
  45633. vListInitialise( &xActiveTimerList1 );
  45634. 8012cca: 4814 ldr r0, [pc, #80] @ (8012d1c <prvCheckForValidListAndQueue+0x64>)
  45635. 8012ccc: f7fd f822 bl 800fd14 <vListInitialise>
  45636. vListInitialise( &xActiveTimerList2 );
  45637. 8012cd0: 4813 ldr r0, [pc, #76] @ (8012d20 <prvCheckForValidListAndQueue+0x68>)
  45638. 8012cd2: f7fd f81f bl 800fd14 <vListInitialise>
  45639. pxCurrentTimerList = &xActiveTimerList1;
  45640. 8012cd6: 4b13 ldr r3, [pc, #76] @ (8012d24 <prvCheckForValidListAndQueue+0x6c>)
  45641. 8012cd8: 4a10 ldr r2, [pc, #64] @ (8012d1c <prvCheckForValidListAndQueue+0x64>)
  45642. 8012cda: 601a str r2, [r3, #0]
  45643. pxOverflowTimerList = &xActiveTimerList2;
  45644. 8012cdc: 4b12 ldr r3, [pc, #72] @ (8012d28 <prvCheckForValidListAndQueue+0x70>)
  45645. 8012cde: 4a10 ldr r2, [pc, #64] @ (8012d20 <prvCheckForValidListAndQueue+0x68>)
  45646. 8012ce0: 601a str r2, [r3, #0]
  45647. /* The timer queue is allocated statically in case
  45648. configSUPPORT_DYNAMIC_ALLOCATION is 0. */
  45649. static StaticQueue_t xStaticTimerQueue; /*lint !e956 Ok to declare in this manner to prevent additional conditional compilation guards in other locations. */
  45650. 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. */
  45651. xTimerQueue = xQueueCreateStatic( ( UBaseType_t ) configTIMER_QUEUE_LENGTH, ( UBaseType_t ) sizeof( DaemonTaskMessage_t ), &( ucStaticTimerQueueStorage[ 0 ] ), &xStaticTimerQueue );
  45652. 8012ce2: 2300 movs r3, #0
  45653. 8012ce4: 9300 str r3, [sp, #0]
  45654. 8012ce6: 4b11 ldr r3, [pc, #68] @ (8012d2c <prvCheckForValidListAndQueue+0x74>)
  45655. 8012ce8: 4a11 ldr r2, [pc, #68] @ (8012d30 <prvCheckForValidListAndQueue+0x78>)
  45656. 8012cea: 2110 movs r1, #16
  45657. 8012cec: 200a movs r0, #10
  45658. 8012cee: f7fd f92f bl 800ff50 <xQueueGenericCreateStatic>
  45659. 8012cf2: 4603 mov r3, r0
  45660. 8012cf4: 4a08 ldr r2, [pc, #32] @ (8012d18 <prvCheckForValidListAndQueue+0x60>)
  45661. 8012cf6: 6013 str r3, [r2, #0]
  45662. }
  45663. #endif
  45664. #if ( configQUEUE_REGISTRY_SIZE > 0 )
  45665. {
  45666. if( xTimerQueue != NULL )
  45667. 8012cf8: 4b07 ldr r3, [pc, #28] @ (8012d18 <prvCheckForValidListAndQueue+0x60>)
  45668. 8012cfa: 681b ldr r3, [r3, #0]
  45669. 8012cfc: 2b00 cmp r3, #0
  45670. 8012cfe: d005 beq.n 8012d0c <prvCheckForValidListAndQueue+0x54>
  45671. {
  45672. vQueueAddToRegistry( xTimerQueue, "TmrQ" );
  45673. 8012d00: 4b05 ldr r3, [pc, #20] @ (8012d18 <prvCheckForValidListAndQueue+0x60>)
  45674. 8012d02: 681b ldr r3, [r3, #0]
  45675. 8012d04: 490b ldr r1, [pc, #44] @ (8012d34 <prvCheckForValidListAndQueue+0x7c>)
  45676. 8012d06: 4618 mov r0, r3
  45677. 8012d08: f7fd fff2 bl 8010cf0 <vQueueAddToRegistry>
  45678. else
  45679. {
  45680. mtCOVERAGE_TEST_MARKER();
  45681. }
  45682. }
  45683. taskEXIT_CRITICAL();
  45684. 8012d0c: f000 f976 bl 8012ffc <vPortExitCritical>
  45685. }
  45686. 8012d10: bf00 nop
  45687. 8012d12: 46bd mov sp, r7
  45688. 8012d14: bd80 pop {r7, pc}
  45689. 8012d16: bf00 nop
  45690. 8012d18: 24002924 .word 0x24002924
  45691. 8012d1c: 240028f4 .word 0x240028f4
  45692. 8012d20: 24002908 .word 0x24002908
  45693. 8012d24: 2400291c .word 0x2400291c
  45694. 8012d28: 24002920 .word 0x24002920
  45695. 8012d2c: 240029d0 .word 0x240029d0
  45696. 8012d30: 24002930 .word 0x24002930
  45697. 8012d34: 080145b8 .word 0x080145b8
  45698. 08012d38 <pxPortInitialiseStack>:
  45699. /*
  45700. * See header file for description.
  45701. */
  45702. StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters )
  45703. {
  45704. 8012d38: b480 push {r7}
  45705. 8012d3a: b085 sub sp, #20
  45706. 8012d3c: af00 add r7, sp, #0
  45707. 8012d3e: 60f8 str r0, [r7, #12]
  45708. 8012d40: 60b9 str r1, [r7, #8]
  45709. 8012d42: 607a str r2, [r7, #4]
  45710. /* Simulate the stack frame as it would be created by a context switch
  45711. interrupt. */
  45712. /* Offset added to account for the way the MCU uses the stack on entry/exit
  45713. of interrupts, and to ensure alignment. */
  45714. pxTopOfStack--;
  45715. 8012d44: 68fb ldr r3, [r7, #12]
  45716. 8012d46: 3b04 subs r3, #4
  45717. 8012d48: 60fb str r3, [r7, #12]
  45718. *pxTopOfStack = portINITIAL_XPSR; /* xPSR */
  45719. 8012d4a: 68fb ldr r3, [r7, #12]
  45720. 8012d4c: f04f 7280 mov.w r2, #16777216 @ 0x1000000
  45721. 8012d50: 601a str r2, [r3, #0]
  45722. pxTopOfStack--;
  45723. 8012d52: 68fb ldr r3, [r7, #12]
  45724. 8012d54: 3b04 subs r3, #4
  45725. 8012d56: 60fb str r3, [r7, #12]
  45726. *pxTopOfStack = ( ( StackType_t ) pxCode ) & portSTART_ADDRESS_MASK; /* PC */
  45727. 8012d58: 68bb ldr r3, [r7, #8]
  45728. 8012d5a: f023 0201 bic.w r2, r3, #1
  45729. 8012d5e: 68fb ldr r3, [r7, #12]
  45730. 8012d60: 601a str r2, [r3, #0]
  45731. pxTopOfStack--;
  45732. 8012d62: 68fb ldr r3, [r7, #12]
  45733. 8012d64: 3b04 subs r3, #4
  45734. 8012d66: 60fb str r3, [r7, #12]
  45735. *pxTopOfStack = ( StackType_t ) portTASK_RETURN_ADDRESS; /* LR */
  45736. 8012d68: 4a0c ldr r2, [pc, #48] @ (8012d9c <pxPortInitialiseStack+0x64>)
  45737. 8012d6a: 68fb ldr r3, [r7, #12]
  45738. 8012d6c: 601a str r2, [r3, #0]
  45739. /* Save code space by skipping register initialisation. */
  45740. pxTopOfStack -= 5; /* R12, R3, R2 and R1. */
  45741. 8012d6e: 68fb ldr r3, [r7, #12]
  45742. 8012d70: 3b14 subs r3, #20
  45743. 8012d72: 60fb str r3, [r7, #12]
  45744. *pxTopOfStack = ( StackType_t ) pvParameters; /* R0 */
  45745. 8012d74: 687a ldr r2, [r7, #4]
  45746. 8012d76: 68fb ldr r3, [r7, #12]
  45747. 8012d78: 601a str r2, [r3, #0]
  45748. /* A save method is being used that requires each task to maintain its
  45749. own exec return value. */
  45750. pxTopOfStack--;
  45751. 8012d7a: 68fb ldr r3, [r7, #12]
  45752. 8012d7c: 3b04 subs r3, #4
  45753. 8012d7e: 60fb str r3, [r7, #12]
  45754. *pxTopOfStack = portINITIAL_EXC_RETURN;
  45755. 8012d80: 68fb ldr r3, [r7, #12]
  45756. 8012d82: f06f 0202 mvn.w r2, #2
  45757. 8012d86: 601a str r2, [r3, #0]
  45758. pxTopOfStack -= 8; /* R11, R10, R9, R8, R7, R6, R5 and R4. */
  45759. 8012d88: 68fb ldr r3, [r7, #12]
  45760. 8012d8a: 3b20 subs r3, #32
  45761. 8012d8c: 60fb str r3, [r7, #12]
  45762. return pxTopOfStack;
  45763. 8012d8e: 68fb ldr r3, [r7, #12]
  45764. }
  45765. 8012d90: 4618 mov r0, r3
  45766. 8012d92: 3714 adds r7, #20
  45767. 8012d94: 46bd mov sp, r7
  45768. 8012d96: f85d 7b04 ldr.w r7, [sp], #4
  45769. 8012d9a: 4770 bx lr
  45770. 8012d9c: 08012da1 .word 0x08012da1
  45771. 08012da0 <prvTaskExitError>:
  45772. /*-----------------------------------------------------------*/
  45773. static void prvTaskExitError( void )
  45774. {
  45775. 8012da0: b480 push {r7}
  45776. 8012da2: b085 sub sp, #20
  45777. 8012da4: af00 add r7, sp, #0
  45778. volatile uint32_t ulDummy = 0;
  45779. 8012da6: 2300 movs r3, #0
  45780. 8012da8: 607b str r3, [r7, #4]
  45781. its caller as there is nothing to return to. If a task wants to exit it
  45782. should instead call vTaskDelete( NULL ).
  45783. Artificially force an assert() to be triggered if configASSERT() is
  45784. defined, then stop here so application writers can catch the error. */
  45785. configASSERT( uxCriticalNesting == ~0UL );
  45786. 8012daa: 4b13 ldr r3, [pc, #76] @ (8012df8 <prvTaskExitError+0x58>)
  45787. 8012dac: 681b ldr r3, [r3, #0]
  45788. 8012dae: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
  45789. 8012db2: d00b beq.n 8012dcc <prvTaskExitError+0x2c>
  45790. __asm volatile
  45791. 8012db4: f04f 0350 mov.w r3, #80 @ 0x50
  45792. 8012db8: f383 8811 msr BASEPRI, r3
  45793. 8012dbc: f3bf 8f6f isb sy
  45794. 8012dc0: f3bf 8f4f dsb sy
  45795. 8012dc4: 60fb str r3, [r7, #12]
  45796. }
  45797. 8012dc6: bf00 nop
  45798. 8012dc8: bf00 nop
  45799. 8012dca: e7fd b.n 8012dc8 <prvTaskExitError+0x28>
  45800. __asm volatile
  45801. 8012dcc: f04f 0350 mov.w r3, #80 @ 0x50
  45802. 8012dd0: f383 8811 msr BASEPRI, r3
  45803. 8012dd4: f3bf 8f6f isb sy
  45804. 8012dd8: f3bf 8f4f dsb sy
  45805. 8012ddc: 60bb str r3, [r7, #8]
  45806. }
  45807. 8012dde: bf00 nop
  45808. portDISABLE_INTERRUPTS();
  45809. while( ulDummy == 0 )
  45810. 8012de0: bf00 nop
  45811. 8012de2: 687b ldr r3, [r7, #4]
  45812. 8012de4: 2b00 cmp r3, #0
  45813. 8012de6: d0fc beq.n 8012de2 <prvTaskExitError+0x42>
  45814. about code appearing after this function is called - making ulDummy
  45815. volatile makes the compiler think the function could return and
  45816. therefore not output an 'unreachable code' warning for code that appears
  45817. after it. */
  45818. }
  45819. }
  45820. 8012de8: bf00 nop
  45821. 8012dea: bf00 nop
  45822. 8012dec: 3714 adds r7, #20
  45823. 8012dee: 46bd mov sp, r7
  45824. 8012df0: f85d 7b04 ldr.w r7, [sp], #4
  45825. 8012df4: 4770 bx lr
  45826. 8012df6: bf00 nop
  45827. 8012df8: 24000044 .word 0x24000044
  45828. 8012dfc: 00000000 .word 0x00000000
  45829. 08012e00 <SVC_Handler>:
  45830. /*-----------------------------------------------------------*/
  45831. void vPortSVCHandler( void )
  45832. {
  45833. __asm volatile (
  45834. 8012e00: 4b07 ldr r3, [pc, #28] @ (8012e20 <pxCurrentTCBConst2>)
  45835. 8012e02: 6819 ldr r1, [r3, #0]
  45836. 8012e04: 6808 ldr r0, [r1, #0]
  45837. 8012e06: e8b0 4ff0 ldmia.w r0!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
  45838. 8012e0a: f380 8809 msr PSP, r0
  45839. 8012e0e: f3bf 8f6f isb sy
  45840. 8012e12: f04f 0000 mov.w r0, #0
  45841. 8012e16: f380 8811 msr BASEPRI, r0
  45842. 8012e1a: 4770 bx lr
  45843. 8012e1c: f3af 8000 nop.w
  45844. 08012e20 <pxCurrentTCBConst2>:
  45845. 8012e20: 240023f4 .word 0x240023f4
  45846. " bx r14 \n"
  45847. " \n"
  45848. " .align 4 \n"
  45849. "pxCurrentTCBConst2: .word pxCurrentTCB \n"
  45850. );
  45851. }
  45852. 8012e24: bf00 nop
  45853. 8012e26: bf00 nop
  45854. 08012e28 <prvPortStartFirstTask>:
  45855. {
  45856. /* Start the first task. This also clears the bit that indicates the FPU is
  45857. in use in case the FPU was used before the scheduler was started - which
  45858. would otherwise result in the unnecessary leaving of space in the SVC stack
  45859. for lazy saving of FPU registers. */
  45860. __asm volatile(
  45861. 8012e28: 4808 ldr r0, [pc, #32] @ (8012e4c <prvPortStartFirstTask+0x24>)
  45862. 8012e2a: 6800 ldr r0, [r0, #0]
  45863. 8012e2c: 6800 ldr r0, [r0, #0]
  45864. 8012e2e: f380 8808 msr MSP, r0
  45865. 8012e32: f04f 0000 mov.w r0, #0
  45866. 8012e36: f380 8814 msr CONTROL, r0
  45867. 8012e3a: b662 cpsie i
  45868. 8012e3c: b661 cpsie f
  45869. 8012e3e: f3bf 8f4f dsb sy
  45870. 8012e42: f3bf 8f6f isb sy
  45871. 8012e46: df00 svc 0
  45872. 8012e48: bf00 nop
  45873. " dsb \n"
  45874. " isb \n"
  45875. " svc 0 \n" /* System call to start first task. */
  45876. " nop \n"
  45877. );
  45878. }
  45879. 8012e4a: bf00 nop
  45880. 8012e4c: e000ed08 .word 0xe000ed08
  45881. 08012e50 <xPortStartScheduler>:
  45882. /*
  45883. * See header file for description.
  45884. */
  45885. BaseType_t xPortStartScheduler( void )
  45886. {
  45887. 8012e50: b580 push {r7, lr}
  45888. 8012e52: b086 sub sp, #24
  45889. 8012e54: af00 add r7, sp, #0
  45890. configASSERT( configMAX_SYSCALL_INTERRUPT_PRIORITY );
  45891. /* This port can be used on all revisions of the Cortex-M7 core other than
  45892. the r0p1 parts. r0p1 parts should use the port from the
  45893. /source/portable/GCC/ARM_CM7/r0p1 directory. */
  45894. configASSERT( portCPUID != portCORTEX_M7_r0p1_ID );
  45895. 8012e56: 4b47 ldr r3, [pc, #284] @ (8012f74 <xPortStartScheduler+0x124>)
  45896. 8012e58: 681b ldr r3, [r3, #0]
  45897. 8012e5a: 4a47 ldr r2, [pc, #284] @ (8012f78 <xPortStartScheduler+0x128>)
  45898. 8012e5c: 4293 cmp r3, r2
  45899. 8012e5e: d10b bne.n 8012e78 <xPortStartScheduler+0x28>
  45900. __asm volatile
  45901. 8012e60: f04f 0350 mov.w r3, #80 @ 0x50
  45902. 8012e64: f383 8811 msr BASEPRI, r3
  45903. 8012e68: f3bf 8f6f isb sy
  45904. 8012e6c: f3bf 8f4f dsb sy
  45905. 8012e70: 613b str r3, [r7, #16]
  45906. }
  45907. 8012e72: bf00 nop
  45908. 8012e74: bf00 nop
  45909. 8012e76: e7fd b.n 8012e74 <xPortStartScheduler+0x24>
  45910. configASSERT( portCPUID != portCORTEX_M7_r0p0_ID );
  45911. 8012e78: 4b3e ldr r3, [pc, #248] @ (8012f74 <xPortStartScheduler+0x124>)
  45912. 8012e7a: 681b ldr r3, [r3, #0]
  45913. 8012e7c: 4a3f ldr r2, [pc, #252] @ (8012f7c <xPortStartScheduler+0x12c>)
  45914. 8012e7e: 4293 cmp r3, r2
  45915. 8012e80: d10b bne.n 8012e9a <xPortStartScheduler+0x4a>
  45916. __asm volatile
  45917. 8012e82: f04f 0350 mov.w r3, #80 @ 0x50
  45918. 8012e86: f383 8811 msr BASEPRI, r3
  45919. 8012e8a: f3bf 8f6f isb sy
  45920. 8012e8e: f3bf 8f4f dsb sy
  45921. 8012e92: 60fb str r3, [r7, #12]
  45922. }
  45923. 8012e94: bf00 nop
  45924. 8012e96: bf00 nop
  45925. 8012e98: e7fd b.n 8012e96 <xPortStartScheduler+0x46>
  45926. #if( configASSERT_DEFINED == 1 )
  45927. {
  45928. volatile uint32_t ulOriginalPriority;
  45929. volatile uint8_t * const pucFirstUserPriorityRegister = ( volatile uint8_t * const ) ( portNVIC_IP_REGISTERS_OFFSET_16 + portFIRST_USER_INTERRUPT_NUMBER );
  45930. 8012e9a: 4b39 ldr r3, [pc, #228] @ (8012f80 <xPortStartScheduler+0x130>)
  45931. 8012e9c: 617b str r3, [r7, #20]
  45932. functions can be called. ISR safe functions are those that end in
  45933. "FromISR". FreeRTOS maintains separate thread and ISR API functions to
  45934. ensure interrupt entry is as fast and simple as possible.
  45935. Save the interrupt priority value that is about to be clobbered. */
  45936. ulOriginalPriority = *pucFirstUserPriorityRegister;
  45937. 8012e9e: 697b ldr r3, [r7, #20]
  45938. 8012ea0: 781b ldrb r3, [r3, #0]
  45939. 8012ea2: b2db uxtb r3, r3
  45940. 8012ea4: 607b str r3, [r7, #4]
  45941. /* Determine the number of priority bits available. First write to all
  45942. possible bits. */
  45943. *pucFirstUserPriorityRegister = portMAX_8_BIT_VALUE;
  45944. 8012ea6: 697b ldr r3, [r7, #20]
  45945. 8012ea8: 22ff movs r2, #255 @ 0xff
  45946. 8012eaa: 701a strb r2, [r3, #0]
  45947. /* Read the value back to see how many bits stuck. */
  45948. ucMaxPriorityValue = *pucFirstUserPriorityRegister;
  45949. 8012eac: 697b ldr r3, [r7, #20]
  45950. 8012eae: 781b ldrb r3, [r3, #0]
  45951. 8012eb0: b2db uxtb r3, r3
  45952. 8012eb2: 70fb strb r3, [r7, #3]
  45953. /* Use the same mask on the maximum system call priority. */
  45954. ucMaxSysCallPriority = configMAX_SYSCALL_INTERRUPT_PRIORITY & ucMaxPriorityValue;
  45955. 8012eb4: 78fb ldrb r3, [r7, #3]
  45956. 8012eb6: b2db uxtb r3, r3
  45957. 8012eb8: f003 0350 and.w r3, r3, #80 @ 0x50
  45958. 8012ebc: b2da uxtb r2, r3
  45959. 8012ebe: 4b31 ldr r3, [pc, #196] @ (8012f84 <xPortStartScheduler+0x134>)
  45960. 8012ec0: 701a strb r2, [r3, #0]
  45961. /* Calculate the maximum acceptable priority group value for the number
  45962. of bits read back. */
  45963. ulMaxPRIGROUPValue = portMAX_PRIGROUP_BITS;
  45964. 8012ec2: 4b31 ldr r3, [pc, #196] @ (8012f88 <xPortStartScheduler+0x138>)
  45965. 8012ec4: 2207 movs r2, #7
  45966. 8012ec6: 601a str r2, [r3, #0]
  45967. while( ( ucMaxPriorityValue & portTOP_BIT_OF_BYTE ) == portTOP_BIT_OF_BYTE )
  45968. 8012ec8: e009 b.n 8012ede <xPortStartScheduler+0x8e>
  45969. {
  45970. ulMaxPRIGROUPValue--;
  45971. 8012eca: 4b2f ldr r3, [pc, #188] @ (8012f88 <xPortStartScheduler+0x138>)
  45972. 8012ecc: 681b ldr r3, [r3, #0]
  45973. 8012ece: 3b01 subs r3, #1
  45974. 8012ed0: 4a2d ldr r2, [pc, #180] @ (8012f88 <xPortStartScheduler+0x138>)
  45975. 8012ed2: 6013 str r3, [r2, #0]
  45976. ucMaxPriorityValue <<= ( uint8_t ) 0x01;
  45977. 8012ed4: 78fb ldrb r3, [r7, #3]
  45978. 8012ed6: b2db uxtb r3, r3
  45979. 8012ed8: 005b lsls r3, r3, #1
  45980. 8012eda: b2db uxtb r3, r3
  45981. 8012edc: 70fb strb r3, [r7, #3]
  45982. while( ( ucMaxPriorityValue & portTOP_BIT_OF_BYTE ) == portTOP_BIT_OF_BYTE )
  45983. 8012ede: 78fb ldrb r3, [r7, #3]
  45984. 8012ee0: b2db uxtb r3, r3
  45985. 8012ee2: f003 0380 and.w r3, r3, #128 @ 0x80
  45986. 8012ee6: 2b80 cmp r3, #128 @ 0x80
  45987. 8012ee8: d0ef beq.n 8012eca <xPortStartScheduler+0x7a>
  45988. #ifdef configPRIO_BITS
  45989. {
  45990. /* Check the FreeRTOS configuration that defines the number of
  45991. priority bits matches the number of priority bits actually queried
  45992. from the hardware. */
  45993. configASSERT( ( portMAX_PRIGROUP_BITS - ulMaxPRIGROUPValue ) == configPRIO_BITS );
  45994. 8012eea: 4b27 ldr r3, [pc, #156] @ (8012f88 <xPortStartScheduler+0x138>)
  45995. 8012eec: 681b ldr r3, [r3, #0]
  45996. 8012eee: f1c3 0307 rsb r3, r3, #7
  45997. 8012ef2: 2b04 cmp r3, #4
  45998. 8012ef4: d00b beq.n 8012f0e <xPortStartScheduler+0xbe>
  45999. __asm volatile
  46000. 8012ef6: f04f 0350 mov.w r3, #80 @ 0x50
  46001. 8012efa: f383 8811 msr BASEPRI, r3
  46002. 8012efe: f3bf 8f6f isb sy
  46003. 8012f02: f3bf 8f4f dsb sy
  46004. 8012f06: 60bb str r3, [r7, #8]
  46005. }
  46006. 8012f08: bf00 nop
  46007. 8012f0a: bf00 nop
  46008. 8012f0c: e7fd b.n 8012f0a <xPortStartScheduler+0xba>
  46009. }
  46010. #endif
  46011. /* Shift the priority group value back to its position within the AIRCR
  46012. register. */
  46013. ulMaxPRIGROUPValue <<= portPRIGROUP_SHIFT;
  46014. 8012f0e: 4b1e ldr r3, [pc, #120] @ (8012f88 <xPortStartScheduler+0x138>)
  46015. 8012f10: 681b ldr r3, [r3, #0]
  46016. 8012f12: 021b lsls r3, r3, #8
  46017. 8012f14: 4a1c ldr r2, [pc, #112] @ (8012f88 <xPortStartScheduler+0x138>)
  46018. 8012f16: 6013 str r3, [r2, #0]
  46019. ulMaxPRIGROUPValue &= portPRIORITY_GROUP_MASK;
  46020. 8012f18: 4b1b ldr r3, [pc, #108] @ (8012f88 <xPortStartScheduler+0x138>)
  46021. 8012f1a: 681b ldr r3, [r3, #0]
  46022. 8012f1c: f403 63e0 and.w r3, r3, #1792 @ 0x700
  46023. 8012f20: 4a19 ldr r2, [pc, #100] @ (8012f88 <xPortStartScheduler+0x138>)
  46024. 8012f22: 6013 str r3, [r2, #0]
  46025. /* Restore the clobbered interrupt priority register to its original
  46026. value. */
  46027. *pucFirstUserPriorityRegister = ulOriginalPriority;
  46028. 8012f24: 687b ldr r3, [r7, #4]
  46029. 8012f26: b2da uxtb r2, r3
  46030. 8012f28: 697b ldr r3, [r7, #20]
  46031. 8012f2a: 701a strb r2, [r3, #0]
  46032. }
  46033. #endif /* conifgASSERT_DEFINED */
  46034. /* Make PendSV and SysTick the lowest priority interrupts. */
  46035. portNVIC_SYSPRI2_REG |= portNVIC_PENDSV_PRI;
  46036. 8012f2c: 4b17 ldr r3, [pc, #92] @ (8012f8c <xPortStartScheduler+0x13c>)
  46037. 8012f2e: 681b ldr r3, [r3, #0]
  46038. 8012f30: 4a16 ldr r2, [pc, #88] @ (8012f8c <xPortStartScheduler+0x13c>)
  46039. 8012f32: f443 0370 orr.w r3, r3, #15728640 @ 0xf00000
  46040. 8012f36: 6013 str r3, [r2, #0]
  46041. portNVIC_SYSPRI2_REG |= portNVIC_SYSTICK_PRI;
  46042. 8012f38: 4b14 ldr r3, [pc, #80] @ (8012f8c <xPortStartScheduler+0x13c>)
  46043. 8012f3a: 681b ldr r3, [r3, #0]
  46044. 8012f3c: 4a13 ldr r2, [pc, #76] @ (8012f8c <xPortStartScheduler+0x13c>)
  46045. 8012f3e: f043 4370 orr.w r3, r3, #4026531840 @ 0xf0000000
  46046. 8012f42: 6013 str r3, [r2, #0]
  46047. /* Start the timer that generates the tick ISR. Interrupts are disabled
  46048. here already. */
  46049. vPortSetupTimerInterrupt();
  46050. 8012f44: f000 f8da bl 80130fc <vPortSetupTimerInterrupt>
  46051. /* Initialise the critical nesting count ready for the first task. */
  46052. uxCriticalNesting = 0;
  46053. 8012f48: 4b11 ldr r3, [pc, #68] @ (8012f90 <xPortStartScheduler+0x140>)
  46054. 8012f4a: 2200 movs r2, #0
  46055. 8012f4c: 601a str r2, [r3, #0]
  46056. /* Ensure the VFP is enabled - it should be anyway. */
  46057. vPortEnableVFP();
  46058. 8012f4e: f000 f8f9 bl 8013144 <vPortEnableVFP>
  46059. /* Lazy save always. */
  46060. *( portFPCCR ) |= portASPEN_AND_LSPEN_BITS;
  46061. 8012f52: 4b10 ldr r3, [pc, #64] @ (8012f94 <xPortStartScheduler+0x144>)
  46062. 8012f54: 681b ldr r3, [r3, #0]
  46063. 8012f56: 4a0f ldr r2, [pc, #60] @ (8012f94 <xPortStartScheduler+0x144>)
  46064. 8012f58: f043 4340 orr.w r3, r3, #3221225472 @ 0xc0000000
  46065. 8012f5c: 6013 str r3, [r2, #0]
  46066. /* Start the first task. */
  46067. prvPortStartFirstTask();
  46068. 8012f5e: f7ff ff63 bl 8012e28 <prvPortStartFirstTask>
  46069. exit error function to prevent compiler warnings about a static function
  46070. not being called in the case that the application writer overrides this
  46071. functionality by defining configTASK_RETURN_ADDRESS. Call
  46072. vTaskSwitchContext() so link time optimisation does not remove the
  46073. symbol. */
  46074. vTaskSwitchContext();
  46075. 8012f62: f7fe fcbb bl 80118dc <vTaskSwitchContext>
  46076. prvTaskExitError();
  46077. 8012f66: f7ff ff1b bl 8012da0 <prvTaskExitError>
  46078. /* Should not get here! */
  46079. return 0;
  46080. 8012f6a: 2300 movs r3, #0
  46081. }
  46082. 8012f6c: 4618 mov r0, r3
  46083. 8012f6e: 3718 adds r7, #24
  46084. 8012f70: 46bd mov sp, r7
  46085. 8012f72: bd80 pop {r7, pc}
  46086. 8012f74: e000ed00 .word 0xe000ed00
  46087. 8012f78: 410fc271 .word 0x410fc271
  46088. 8012f7c: 410fc270 .word 0x410fc270
  46089. 8012f80: e000e400 .word 0xe000e400
  46090. 8012f84: 24002a20 .word 0x24002a20
  46091. 8012f88: 24002a24 .word 0x24002a24
  46092. 8012f8c: e000ed20 .word 0xe000ed20
  46093. 8012f90: 24000044 .word 0x24000044
  46094. 8012f94: e000ef34 .word 0xe000ef34
  46095. 08012f98 <vPortEnterCritical>:
  46096. configASSERT( uxCriticalNesting == 1000UL );
  46097. }
  46098. /*-----------------------------------------------------------*/
  46099. void vPortEnterCritical( void )
  46100. {
  46101. 8012f98: b480 push {r7}
  46102. 8012f9a: b083 sub sp, #12
  46103. 8012f9c: af00 add r7, sp, #0
  46104. __asm volatile
  46105. 8012f9e: f04f 0350 mov.w r3, #80 @ 0x50
  46106. 8012fa2: f383 8811 msr BASEPRI, r3
  46107. 8012fa6: f3bf 8f6f isb sy
  46108. 8012faa: f3bf 8f4f dsb sy
  46109. 8012fae: 607b str r3, [r7, #4]
  46110. }
  46111. 8012fb0: bf00 nop
  46112. portDISABLE_INTERRUPTS();
  46113. uxCriticalNesting++;
  46114. 8012fb2: 4b10 ldr r3, [pc, #64] @ (8012ff4 <vPortEnterCritical+0x5c>)
  46115. 8012fb4: 681b ldr r3, [r3, #0]
  46116. 8012fb6: 3301 adds r3, #1
  46117. 8012fb8: 4a0e ldr r2, [pc, #56] @ (8012ff4 <vPortEnterCritical+0x5c>)
  46118. 8012fba: 6013 str r3, [r2, #0]
  46119. /* This is not the interrupt safe version of the enter critical function so
  46120. assert() if it is being called from an interrupt context. Only API
  46121. functions that end in "FromISR" can be used in an interrupt. Only assert if
  46122. the critical nesting count is 1 to protect against recursive calls if the
  46123. assert function also uses a critical section. */
  46124. if( uxCriticalNesting == 1 )
  46125. 8012fbc: 4b0d ldr r3, [pc, #52] @ (8012ff4 <vPortEnterCritical+0x5c>)
  46126. 8012fbe: 681b ldr r3, [r3, #0]
  46127. 8012fc0: 2b01 cmp r3, #1
  46128. 8012fc2: d110 bne.n 8012fe6 <vPortEnterCritical+0x4e>
  46129. {
  46130. configASSERT( ( portNVIC_INT_CTRL_REG & portVECTACTIVE_MASK ) == 0 );
  46131. 8012fc4: 4b0c ldr r3, [pc, #48] @ (8012ff8 <vPortEnterCritical+0x60>)
  46132. 8012fc6: 681b ldr r3, [r3, #0]
  46133. 8012fc8: b2db uxtb r3, r3
  46134. 8012fca: 2b00 cmp r3, #0
  46135. 8012fcc: d00b beq.n 8012fe6 <vPortEnterCritical+0x4e>
  46136. __asm volatile
  46137. 8012fce: f04f 0350 mov.w r3, #80 @ 0x50
  46138. 8012fd2: f383 8811 msr BASEPRI, r3
  46139. 8012fd6: f3bf 8f6f isb sy
  46140. 8012fda: f3bf 8f4f dsb sy
  46141. 8012fde: 603b str r3, [r7, #0]
  46142. }
  46143. 8012fe0: bf00 nop
  46144. 8012fe2: bf00 nop
  46145. 8012fe4: e7fd b.n 8012fe2 <vPortEnterCritical+0x4a>
  46146. }
  46147. }
  46148. 8012fe6: bf00 nop
  46149. 8012fe8: 370c adds r7, #12
  46150. 8012fea: 46bd mov sp, r7
  46151. 8012fec: f85d 7b04 ldr.w r7, [sp], #4
  46152. 8012ff0: 4770 bx lr
  46153. 8012ff2: bf00 nop
  46154. 8012ff4: 24000044 .word 0x24000044
  46155. 8012ff8: e000ed04 .word 0xe000ed04
  46156. 08012ffc <vPortExitCritical>:
  46157. /*-----------------------------------------------------------*/
  46158. void vPortExitCritical( void )
  46159. {
  46160. 8012ffc: b480 push {r7}
  46161. 8012ffe: b083 sub sp, #12
  46162. 8013000: af00 add r7, sp, #0
  46163. configASSERT( uxCriticalNesting );
  46164. 8013002: 4b12 ldr r3, [pc, #72] @ (801304c <vPortExitCritical+0x50>)
  46165. 8013004: 681b ldr r3, [r3, #0]
  46166. 8013006: 2b00 cmp r3, #0
  46167. 8013008: d10b bne.n 8013022 <vPortExitCritical+0x26>
  46168. __asm volatile
  46169. 801300a: f04f 0350 mov.w r3, #80 @ 0x50
  46170. 801300e: f383 8811 msr BASEPRI, r3
  46171. 8013012: f3bf 8f6f isb sy
  46172. 8013016: f3bf 8f4f dsb sy
  46173. 801301a: 607b str r3, [r7, #4]
  46174. }
  46175. 801301c: bf00 nop
  46176. 801301e: bf00 nop
  46177. 8013020: e7fd b.n 801301e <vPortExitCritical+0x22>
  46178. uxCriticalNesting--;
  46179. 8013022: 4b0a ldr r3, [pc, #40] @ (801304c <vPortExitCritical+0x50>)
  46180. 8013024: 681b ldr r3, [r3, #0]
  46181. 8013026: 3b01 subs r3, #1
  46182. 8013028: 4a08 ldr r2, [pc, #32] @ (801304c <vPortExitCritical+0x50>)
  46183. 801302a: 6013 str r3, [r2, #0]
  46184. if( uxCriticalNesting == 0 )
  46185. 801302c: 4b07 ldr r3, [pc, #28] @ (801304c <vPortExitCritical+0x50>)
  46186. 801302e: 681b ldr r3, [r3, #0]
  46187. 8013030: 2b00 cmp r3, #0
  46188. 8013032: d105 bne.n 8013040 <vPortExitCritical+0x44>
  46189. 8013034: 2300 movs r3, #0
  46190. 8013036: 603b str r3, [r7, #0]
  46191. __asm volatile
  46192. 8013038: 683b ldr r3, [r7, #0]
  46193. 801303a: f383 8811 msr BASEPRI, r3
  46194. }
  46195. 801303e: bf00 nop
  46196. {
  46197. portENABLE_INTERRUPTS();
  46198. }
  46199. }
  46200. 8013040: bf00 nop
  46201. 8013042: 370c adds r7, #12
  46202. 8013044: 46bd mov sp, r7
  46203. 8013046: f85d 7b04 ldr.w r7, [sp], #4
  46204. 801304a: 4770 bx lr
  46205. 801304c: 24000044 .word 0x24000044
  46206. 08013050 <PendSV_Handler>:
  46207. void xPortPendSVHandler( void )
  46208. {
  46209. /* This is a naked function. */
  46210. __asm volatile
  46211. 8013050: f3ef 8009 mrs r0, PSP
  46212. 8013054: f3bf 8f6f isb sy
  46213. 8013058: 4b15 ldr r3, [pc, #84] @ (80130b0 <pxCurrentTCBConst>)
  46214. 801305a: 681a ldr r2, [r3, #0]
  46215. 801305c: f01e 0f10 tst.w lr, #16
  46216. 8013060: bf08 it eq
  46217. 8013062: ed20 8a10 vstmdbeq r0!, {s16-s31}
  46218. 8013066: e920 4ff0 stmdb r0!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
  46219. 801306a: 6010 str r0, [r2, #0]
  46220. 801306c: e92d 0009 stmdb sp!, {r0, r3}
  46221. 8013070: f04f 0050 mov.w r0, #80 @ 0x50
  46222. 8013074: f380 8811 msr BASEPRI, r0
  46223. 8013078: f3bf 8f4f dsb sy
  46224. 801307c: f3bf 8f6f isb sy
  46225. 8013080: f7fe fc2c bl 80118dc <vTaskSwitchContext>
  46226. 8013084: f04f 0000 mov.w r0, #0
  46227. 8013088: f380 8811 msr BASEPRI, r0
  46228. 801308c: bc09 pop {r0, r3}
  46229. 801308e: 6819 ldr r1, [r3, #0]
  46230. 8013090: 6808 ldr r0, [r1, #0]
  46231. 8013092: e8b0 4ff0 ldmia.w r0!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
  46232. 8013096: f01e 0f10 tst.w lr, #16
  46233. 801309a: bf08 it eq
  46234. 801309c: ecb0 8a10 vldmiaeq r0!, {s16-s31}
  46235. 80130a0: f380 8809 msr PSP, r0
  46236. 80130a4: f3bf 8f6f isb sy
  46237. 80130a8: 4770 bx lr
  46238. 80130aa: bf00 nop
  46239. 80130ac: f3af 8000 nop.w
  46240. 080130b0 <pxCurrentTCBConst>:
  46241. 80130b0: 240023f4 .word 0x240023f4
  46242. " \n"
  46243. " .align 4 \n"
  46244. "pxCurrentTCBConst: .word pxCurrentTCB \n"
  46245. ::"i"(configMAX_SYSCALL_INTERRUPT_PRIORITY)
  46246. );
  46247. }
  46248. 80130b4: bf00 nop
  46249. 80130b6: bf00 nop
  46250. 080130b8 <xPortSysTickHandler>:
  46251. /*-----------------------------------------------------------*/
  46252. void xPortSysTickHandler( void )
  46253. {
  46254. 80130b8: b580 push {r7, lr}
  46255. 80130ba: b082 sub sp, #8
  46256. 80130bc: af00 add r7, sp, #0
  46257. __asm volatile
  46258. 80130be: f04f 0350 mov.w r3, #80 @ 0x50
  46259. 80130c2: f383 8811 msr BASEPRI, r3
  46260. 80130c6: f3bf 8f6f isb sy
  46261. 80130ca: f3bf 8f4f dsb sy
  46262. 80130ce: 607b str r3, [r7, #4]
  46263. }
  46264. 80130d0: bf00 nop
  46265. save and then restore the interrupt mask value as its value is already
  46266. known. */
  46267. portDISABLE_INTERRUPTS();
  46268. {
  46269. /* Increment the RTOS tick. */
  46270. if( xTaskIncrementTick() != pdFALSE )
  46271. 80130d2: f7fe fb49 bl 8011768 <xTaskIncrementTick>
  46272. 80130d6: 4603 mov r3, r0
  46273. 80130d8: 2b00 cmp r3, #0
  46274. 80130da: d003 beq.n 80130e4 <xPortSysTickHandler+0x2c>
  46275. {
  46276. /* A context switch is required. Context switching is performed in
  46277. the PendSV interrupt. Pend the PendSV interrupt. */
  46278. portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT;
  46279. 80130dc: 4b06 ldr r3, [pc, #24] @ (80130f8 <xPortSysTickHandler+0x40>)
  46280. 80130de: f04f 5280 mov.w r2, #268435456 @ 0x10000000
  46281. 80130e2: 601a str r2, [r3, #0]
  46282. 80130e4: 2300 movs r3, #0
  46283. 80130e6: 603b str r3, [r7, #0]
  46284. __asm volatile
  46285. 80130e8: 683b ldr r3, [r7, #0]
  46286. 80130ea: f383 8811 msr BASEPRI, r3
  46287. }
  46288. 80130ee: bf00 nop
  46289. }
  46290. }
  46291. portENABLE_INTERRUPTS();
  46292. }
  46293. 80130f0: bf00 nop
  46294. 80130f2: 3708 adds r7, #8
  46295. 80130f4: 46bd mov sp, r7
  46296. 80130f6: bd80 pop {r7, pc}
  46297. 80130f8: e000ed04 .word 0xe000ed04
  46298. 080130fc <vPortSetupTimerInterrupt>:
  46299. /*
  46300. * Setup the systick timer to generate the tick interrupts at the required
  46301. * frequency.
  46302. */
  46303. __attribute__(( weak )) void vPortSetupTimerInterrupt( void )
  46304. {
  46305. 80130fc: b480 push {r7}
  46306. 80130fe: af00 add r7, sp, #0
  46307. ulStoppedTimerCompensation = portMISSED_COUNTS_FACTOR / ( configCPU_CLOCK_HZ / configSYSTICK_CLOCK_HZ );
  46308. }
  46309. #endif /* configUSE_TICKLESS_IDLE */
  46310. /* Stop and clear the SysTick. */
  46311. portNVIC_SYSTICK_CTRL_REG = 0UL;
  46312. 8013100: 4b0b ldr r3, [pc, #44] @ (8013130 <vPortSetupTimerInterrupt+0x34>)
  46313. 8013102: 2200 movs r2, #0
  46314. 8013104: 601a str r2, [r3, #0]
  46315. portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL;
  46316. 8013106: 4b0b ldr r3, [pc, #44] @ (8013134 <vPortSetupTimerInterrupt+0x38>)
  46317. 8013108: 2200 movs r2, #0
  46318. 801310a: 601a str r2, [r3, #0]
  46319. /* Configure SysTick to interrupt at the requested rate. */
  46320. portNVIC_SYSTICK_LOAD_REG = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL;
  46321. 801310c: 4b0a ldr r3, [pc, #40] @ (8013138 <vPortSetupTimerInterrupt+0x3c>)
  46322. 801310e: 681b ldr r3, [r3, #0]
  46323. 8013110: 4a0a ldr r2, [pc, #40] @ (801313c <vPortSetupTimerInterrupt+0x40>)
  46324. 8013112: fba2 2303 umull r2, r3, r2, r3
  46325. 8013116: 099b lsrs r3, r3, #6
  46326. 8013118: 4a09 ldr r2, [pc, #36] @ (8013140 <vPortSetupTimerInterrupt+0x44>)
  46327. 801311a: 3b01 subs r3, #1
  46328. 801311c: 6013 str r3, [r2, #0]
  46329. portNVIC_SYSTICK_CTRL_REG = ( portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT );
  46330. 801311e: 4b04 ldr r3, [pc, #16] @ (8013130 <vPortSetupTimerInterrupt+0x34>)
  46331. 8013120: 2207 movs r2, #7
  46332. 8013122: 601a str r2, [r3, #0]
  46333. }
  46334. 8013124: bf00 nop
  46335. 8013126: 46bd mov sp, r7
  46336. 8013128: f85d 7b04 ldr.w r7, [sp], #4
  46337. 801312c: 4770 bx lr
  46338. 801312e: bf00 nop
  46339. 8013130: e000e010 .word 0xe000e010
  46340. 8013134: e000e018 .word 0xe000e018
  46341. 8013138: 24000034 .word 0x24000034
  46342. 801313c: 10624dd3 .word 0x10624dd3
  46343. 8013140: e000e014 .word 0xe000e014
  46344. 08013144 <vPortEnableVFP>:
  46345. /*-----------------------------------------------------------*/
  46346. /* This is a naked function. */
  46347. static void vPortEnableVFP( void )
  46348. {
  46349. __asm volatile
  46350. 8013144: f8df 000c ldr.w r0, [pc, #12] @ 8013154 <vPortEnableVFP+0x10>
  46351. 8013148: 6801 ldr r1, [r0, #0]
  46352. 801314a: f441 0170 orr.w r1, r1, #15728640 @ 0xf00000
  46353. 801314e: 6001 str r1, [r0, #0]
  46354. 8013150: 4770 bx lr
  46355. " \n"
  46356. " orr r1, r1, #( 0xf << 20 ) \n" /* Enable CP10 and CP11 coprocessors, then save back. */
  46357. " str r1, [r0] \n"
  46358. " bx r14 "
  46359. );
  46360. }
  46361. 8013152: bf00 nop
  46362. 8013154: e000ed88 .word 0xe000ed88
  46363. 08013158 <vPortValidateInterruptPriority>:
  46364. /*-----------------------------------------------------------*/
  46365. #if( configASSERT_DEFINED == 1 )
  46366. void vPortValidateInterruptPriority( void )
  46367. {
  46368. 8013158: b480 push {r7}
  46369. 801315a: b085 sub sp, #20
  46370. 801315c: af00 add r7, sp, #0
  46371. uint32_t ulCurrentInterrupt;
  46372. uint8_t ucCurrentPriority;
  46373. /* Obtain the number of the currently executing interrupt. */
  46374. __asm volatile( "mrs %0, ipsr" : "=r"( ulCurrentInterrupt ) :: "memory" );
  46375. 801315e: f3ef 8305 mrs r3, IPSR
  46376. 8013162: 60fb str r3, [r7, #12]
  46377. /* Is the interrupt number a user defined interrupt? */
  46378. if( ulCurrentInterrupt >= portFIRST_USER_INTERRUPT_NUMBER )
  46379. 8013164: 68fb ldr r3, [r7, #12]
  46380. 8013166: 2b0f cmp r3, #15
  46381. 8013168: d915 bls.n 8013196 <vPortValidateInterruptPriority+0x3e>
  46382. {
  46383. /* Look up the interrupt's priority. */
  46384. ucCurrentPriority = pcInterruptPriorityRegisters[ ulCurrentInterrupt ];
  46385. 801316a: 4a18 ldr r2, [pc, #96] @ (80131cc <vPortValidateInterruptPriority+0x74>)
  46386. 801316c: 68fb ldr r3, [r7, #12]
  46387. 801316e: 4413 add r3, r2
  46388. 8013170: 781b ldrb r3, [r3, #0]
  46389. 8013172: 72fb strb r3, [r7, #11]
  46390. interrupt entry is as fast and simple as possible.
  46391. The following links provide detailed information:
  46392. http://www.freertos.org/RTOS-Cortex-M3-M4.html
  46393. http://www.freertos.org/FAQHelp.html */
  46394. configASSERT( ucCurrentPriority >= ucMaxSysCallPriority );
  46395. 8013174: 4b16 ldr r3, [pc, #88] @ (80131d0 <vPortValidateInterruptPriority+0x78>)
  46396. 8013176: 781b ldrb r3, [r3, #0]
  46397. 8013178: 7afa ldrb r2, [r7, #11]
  46398. 801317a: 429a cmp r2, r3
  46399. 801317c: d20b bcs.n 8013196 <vPortValidateInterruptPriority+0x3e>
  46400. __asm volatile
  46401. 801317e: f04f 0350 mov.w r3, #80 @ 0x50
  46402. 8013182: f383 8811 msr BASEPRI, r3
  46403. 8013186: f3bf 8f6f isb sy
  46404. 801318a: f3bf 8f4f dsb sy
  46405. 801318e: 607b str r3, [r7, #4]
  46406. }
  46407. 8013190: bf00 nop
  46408. 8013192: bf00 nop
  46409. 8013194: e7fd b.n 8013192 <vPortValidateInterruptPriority+0x3a>
  46410. configuration then the correct setting can be achieved on all Cortex-M
  46411. devices by calling NVIC_SetPriorityGrouping( 0 ); before starting the
  46412. scheduler. Note however that some vendor specific peripheral libraries
  46413. assume a non-zero priority group setting, in which cases using a value
  46414. of zero will result in unpredictable behaviour. */
  46415. configASSERT( ( portAIRCR_REG & portPRIORITY_GROUP_MASK ) <= ulMaxPRIGROUPValue );
  46416. 8013196: 4b0f ldr r3, [pc, #60] @ (80131d4 <vPortValidateInterruptPriority+0x7c>)
  46417. 8013198: 681b ldr r3, [r3, #0]
  46418. 801319a: f403 62e0 and.w r2, r3, #1792 @ 0x700
  46419. 801319e: 4b0e ldr r3, [pc, #56] @ (80131d8 <vPortValidateInterruptPriority+0x80>)
  46420. 80131a0: 681b ldr r3, [r3, #0]
  46421. 80131a2: 429a cmp r2, r3
  46422. 80131a4: d90b bls.n 80131be <vPortValidateInterruptPriority+0x66>
  46423. __asm volatile
  46424. 80131a6: f04f 0350 mov.w r3, #80 @ 0x50
  46425. 80131aa: f383 8811 msr BASEPRI, r3
  46426. 80131ae: f3bf 8f6f isb sy
  46427. 80131b2: f3bf 8f4f dsb sy
  46428. 80131b6: 603b str r3, [r7, #0]
  46429. }
  46430. 80131b8: bf00 nop
  46431. 80131ba: bf00 nop
  46432. 80131bc: e7fd b.n 80131ba <vPortValidateInterruptPriority+0x62>
  46433. }
  46434. 80131be: bf00 nop
  46435. 80131c0: 3714 adds r7, #20
  46436. 80131c2: 46bd mov sp, r7
  46437. 80131c4: f85d 7b04 ldr.w r7, [sp], #4
  46438. 80131c8: 4770 bx lr
  46439. 80131ca: bf00 nop
  46440. 80131cc: e000e3f0 .word 0xe000e3f0
  46441. 80131d0: 24002a20 .word 0x24002a20
  46442. 80131d4: e000ed0c .word 0xe000ed0c
  46443. 80131d8: 24002a24 .word 0x24002a24
  46444. 080131dc <pvPortMalloc>:
  46445. static size_t xBlockAllocatedBit = 0;
  46446. /*-----------------------------------------------------------*/
  46447. void *pvPortMalloc( size_t xWantedSize )
  46448. {
  46449. 80131dc: b580 push {r7, lr}
  46450. 80131de: b08a sub sp, #40 @ 0x28
  46451. 80131e0: af00 add r7, sp, #0
  46452. 80131e2: 6078 str r0, [r7, #4]
  46453. BlockLink_t *pxBlock, *pxPreviousBlock, *pxNewBlockLink;
  46454. void *pvReturn = NULL;
  46455. 80131e4: 2300 movs r3, #0
  46456. 80131e6: 61fb str r3, [r7, #28]
  46457. vTaskSuspendAll();
  46458. 80131e8: f7fe fa02 bl 80115f0 <vTaskSuspendAll>
  46459. {
  46460. /* If this is the first call to malloc then the heap will require
  46461. initialisation to setup the list of free blocks. */
  46462. if( pxEnd == NULL )
  46463. 80131ec: 4b5c ldr r3, [pc, #368] @ (8013360 <pvPortMalloc+0x184>)
  46464. 80131ee: 681b ldr r3, [r3, #0]
  46465. 80131f0: 2b00 cmp r3, #0
  46466. 80131f2: d101 bne.n 80131f8 <pvPortMalloc+0x1c>
  46467. {
  46468. prvHeapInit();
  46469. 80131f4: f000 f924 bl 8013440 <prvHeapInit>
  46470. /* Check the requested block size is not so large that the top bit is
  46471. set. The top bit of the block size member of the BlockLink_t structure
  46472. is used to determine who owns the block - the application or the
  46473. kernel, so it must be free. */
  46474. if( ( xWantedSize & xBlockAllocatedBit ) == 0 )
  46475. 80131f8: 4b5a ldr r3, [pc, #360] @ (8013364 <pvPortMalloc+0x188>)
  46476. 80131fa: 681a ldr r2, [r3, #0]
  46477. 80131fc: 687b ldr r3, [r7, #4]
  46478. 80131fe: 4013 ands r3, r2
  46479. 8013200: 2b00 cmp r3, #0
  46480. 8013202: f040 8095 bne.w 8013330 <pvPortMalloc+0x154>
  46481. {
  46482. /* The wanted size is increased so it can contain a BlockLink_t
  46483. structure in addition to the requested amount of bytes. */
  46484. if( xWantedSize > 0 )
  46485. 8013206: 687b ldr r3, [r7, #4]
  46486. 8013208: 2b00 cmp r3, #0
  46487. 801320a: d01e beq.n 801324a <pvPortMalloc+0x6e>
  46488. {
  46489. xWantedSize += xHeapStructSize;
  46490. 801320c: 2208 movs r2, #8
  46491. 801320e: 687b ldr r3, [r7, #4]
  46492. 8013210: 4413 add r3, r2
  46493. 8013212: 607b str r3, [r7, #4]
  46494. /* Ensure that blocks are always aligned to the required number
  46495. of bytes. */
  46496. if( ( xWantedSize & portBYTE_ALIGNMENT_MASK ) != 0x00 )
  46497. 8013214: 687b ldr r3, [r7, #4]
  46498. 8013216: f003 0307 and.w r3, r3, #7
  46499. 801321a: 2b00 cmp r3, #0
  46500. 801321c: d015 beq.n 801324a <pvPortMalloc+0x6e>
  46501. {
  46502. /* Byte alignment required. */
  46503. xWantedSize += ( portBYTE_ALIGNMENT - ( xWantedSize & portBYTE_ALIGNMENT_MASK ) );
  46504. 801321e: 687b ldr r3, [r7, #4]
  46505. 8013220: f023 0307 bic.w r3, r3, #7
  46506. 8013224: 3308 adds r3, #8
  46507. 8013226: 607b str r3, [r7, #4]
  46508. configASSERT( ( xWantedSize & portBYTE_ALIGNMENT_MASK ) == 0 );
  46509. 8013228: 687b ldr r3, [r7, #4]
  46510. 801322a: f003 0307 and.w r3, r3, #7
  46511. 801322e: 2b00 cmp r3, #0
  46512. 8013230: d00b beq.n 801324a <pvPortMalloc+0x6e>
  46513. __asm volatile
  46514. 8013232: f04f 0350 mov.w r3, #80 @ 0x50
  46515. 8013236: f383 8811 msr BASEPRI, r3
  46516. 801323a: f3bf 8f6f isb sy
  46517. 801323e: f3bf 8f4f dsb sy
  46518. 8013242: 617b str r3, [r7, #20]
  46519. }
  46520. 8013244: bf00 nop
  46521. 8013246: bf00 nop
  46522. 8013248: e7fd b.n 8013246 <pvPortMalloc+0x6a>
  46523. else
  46524. {
  46525. mtCOVERAGE_TEST_MARKER();
  46526. }
  46527. if( ( xWantedSize > 0 ) && ( xWantedSize <= xFreeBytesRemaining ) )
  46528. 801324a: 687b ldr r3, [r7, #4]
  46529. 801324c: 2b00 cmp r3, #0
  46530. 801324e: d06f beq.n 8013330 <pvPortMalloc+0x154>
  46531. 8013250: 4b45 ldr r3, [pc, #276] @ (8013368 <pvPortMalloc+0x18c>)
  46532. 8013252: 681b ldr r3, [r3, #0]
  46533. 8013254: 687a ldr r2, [r7, #4]
  46534. 8013256: 429a cmp r2, r3
  46535. 8013258: d86a bhi.n 8013330 <pvPortMalloc+0x154>
  46536. {
  46537. /* Traverse the list from the start (lowest address) block until
  46538. one of adequate size is found. */
  46539. pxPreviousBlock = &xStart;
  46540. 801325a: 4b44 ldr r3, [pc, #272] @ (801336c <pvPortMalloc+0x190>)
  46541. 801325c: 623b str r3, [r7, #32]
  46542. pxBlock = xStart.pxNextFreeBlock;
  46543. 801325e: 4b43 ldr r3, [pc, #268] @ (801336c <pvPortMalloc+0x190>)
  46544. 8013260: 681b ldr r3, [r3, #0]
  46545. 8013262: 627b str r3, [r7, #36] @ 0x24
  46546. while( ( pxBlock->xBlockSize < xWantedSize ) && ( pxBlock->pxNextFreeBlock != NULL ) )
  46547. 8013264: e004 b.n 8013270 <pvPortMalloc+0x94>
  46548. {
  46549. pxPreviousBlock = pxBlock;
  46550. 8013266: 6a7b ldr r3, [r7, #36] @ 0x24
  46551. 8013268: 623b str r3, [r7, #32]
  46552. pxBlock = pxBlock->pxNextFreeBlock;
  46553. 801326a: 6a7b ldr r3, [r7, #36] @ 0x24
  46554. 801326c: 681b ldr r3, [r3, #0]
  46555. 801326e: 627b str r3, [r7, #36] @ 0x24
  46556. while( ( pxBlock->xBlockSize < xWantedSize ) && ( pxBlock->pxNextFreeBlock != NULL ) )
  46557. 8013270: 6a7b ldr r3, [r7, #36] @ 0x24
  46558. 8013272: 685b ldr r3, [r3, #4]
  46559. 8013274: 687a ldr r2, [r7, #4]
  46560. 8013276: 429a cmp r2, r3
  46561. 8013278: d903 bls.n 8013282 <pvPortMalloc+0xa6>
  46562. 801327a: 6a7b ldr r3, [r7, #36] @ 0x24
  46563. 801327c: 681b ldr r3, [r3, #0]
  46564. 801327e: 2b00 cmp r3, #0
  46565. 8013280: d1f1 bne.n 8013266 <pvPortMalloc+0x8a>
  46566. }
  46567. /* If the end marker was reached then a block of adequate size
  46568. was not found. */
  46569. if( pxBlock != pxEnd )
  46570. 8013282: 4b37 ldr r3, [pc, #220] @ (8013360 <pvPortMalloc+0x184>)
  46571. 8013284: 681b ldr r3, [r3, #0]
  46572. 8013286: 6a7a ldr r2, [r7, #36] @ 0x24
  46573. 8013288: 429a cmp r2, r3
  46574. 801328a: d051 beq.n 8013330 <pvPortMalloc+0x154>
  46575. {
  46576. /* Return the memory space pointed to - jumping over the
  46577. BlockLink_t structure at its start. */
  46578. pvReturn = ( void * ) ( ( ( uint8_t * ) pxPreviousBlock->pxNextFreeBlock ) + xHeapStructSize );
  46579. 801328c: 6a3b ldr r3, [r7, #32]
  46580. 801328e: 681b ldr r3, [r3, #0]
  46581. 8013290: 2208 movs r2, #8
  46582. 8013292: 4413 add r3, r2
  46583. 8013294: 61fb str r3, [r7, #28]
  46584. /* This block is being returned for use so must be taken out
  46585. of the list of free blocks. */
  46586. pxPreviousBlock->pxNextFreeBlock = pxBlock->pxNextFreeBlock;
  46587. 8013296: 6a7b ldr r3, [r7, #36] @ 0x24
  46588. 8013298: 681a ldr r2, [r3, #0]
  46589. 801329a: 6a3b ldr r3, [r7, #32]
  46590. 801329c: 601a str r2, [r3, #0]
  46591. /* If the block is larger than required it can be split into
  46592. two. */
  46593. if( ( pxBlock->xBlockSize - xWantedSize ) > heapMINIMUM_BLOCK_SIZE )
  46594. 801329e: 6a7b ldr r3, [r7, #36] @ 0x24
  46595. 80132a0: 685a ldr r2, [r3, #4]
  46596. 80132a2: 687b ldr r3, [r7, #4]
  46597. 80132a4: 1ad2 subs r2, r2, r3
  46598. 80132a6: 2308 movs r3, #8
  46599. 80132a8: 005b lsls r3, r3, #1
  46600. 80132aa: 429a cmp r2, r3
  46601. 80132ac: d920 bls.n 80132f0 <pvPortMalloc+0x114>
  46602. {
  46603. /* This block is to be split into two. Create a new
  46604. block following the number of bytes requested. The void
  46605. cast is used to prevent byte alignment warnings from the
  46606. compiler. */
  46607. pxNewBlockLink = ( void * ) ( ( ( uint8_t * ) pxBlock ) + xWantedSize );
  46608. 80132ae: 6a7a ldr r2, [r7, #36] @ 0x24
  46609. 80132b0: 687b ldr r3, [r7, #4]
  46610. 80132b2: 4413 add r3, r2
  46611. 80132b4: 61bb str r3, [r7, #24]
  46612. configASSERT( ( ( ( size_t ) pxNewBlockLink ) & portBYTE_ALIGNMENT_MASK ) == 0 );
  46613. 80132b6: 69bb ldr r3, [r7, #24]
  46614. 80132b8: f003 0307 and.w r3, r3, #7
  46615. 80132bc: 2b00 cmp r3, #0
  46616. 80132be: d00b beq.n 80132d8 <pvPortMalloc+0xfc>
  46617. __asm volatile
  46618. 80132c0: f04f 0350 mov.w r3, #80 @ 0x50
  46619. 80132c4: f383 8811 msr BASEPRI, r3
  46620. 80132c8: f3bf 8f6f isb sy
  46621. 80132cc: f3bf 8f4f dsb sy
  46622. 80132d0: 613b str r3, [r7, #16]
  46623. }
  46624. 80132d2: bf00 nop
  46625. 80132d4: bf00 nop
  46626. 80132d6: e7fd b.n 80132d4 <pvPortMalloc+0xf8>
  46627. /* Calculate the sizes of two blocks split from the
  46628. single block. */
  46629. pxNewBlockLink->xBlockSize = pxBlock->xBlockSize - xWantedSize;
  46630. 80132d8: 6a7b ldr r3, [r7, #36] @ 0x24
  46631. 80132da: 685a ldr r2, [r3, #4]
  46632. 80132dc: 687b ldr r3, [r7, #4]
  46633. 80132de: 1ad2 subs r2, r2, r3
  46634. 80132e0: 69bb ldr r3, [r7, #24]
  46635. 80132e2: 605a str r2, [r3, #4]
  46636. pxBlock->xBlockSize = xWantedSize;
  46637. 80132e4: 6a7b ldr r3, [r7, #36] @ 0x24
  46638. 80132e6: 687a ldr r2, [r7, #4]
  46639. 80132e8: 605a str r2, [r3, #4]
  46640. /* Insert the new block into the list of free blocks. */
  46641. prvInsertBlockIntoFreeList( pxNewBlockLink );
  46642. 80132ea: 69b8 ldr r0, [r7, #24]
  46643. 80132ec: f000 f90a bl 8013504 <prvInsertBlockIntoFreeList>
  46644. else
  46645. {
  46646. mtCOVERAGE_TEST_MARKER();
  46647. }
  46648. xFreeBytesRemaining -= pxBlock->xBlockSize;
  46649. 80132f0: 4b1d ldr r3, [pc, #116] @ (8013368 <pvPortMalloc+0x18c>)
  46650. 80132f2: 681a ldr r2, [r3, #0]
  46651. 80132f4: 6a7b ldr r3, [r7, #36] @ 0x24
  46652. 80132f6: 685b ldr r3, [r3, #4]
  46653. 80132f8: 1ad3 subs r3, r2, r3
  46654. 80132fa: 4a1b ldr r2, [pc, #108] @ (8013368 <pvPortMalloc+0x18c>)
  46655. 80132fc: 6013 str r3, [r2, #0]
  46656. if( xFreeBytesRemaining < xMinimumEverFreeBytesRemaining )
  46657. 80132fe: 4b1a ldr r3, [pc, #104] @ (8013368 <pvPortMalloc+0x18c>)
  46658. 8013300: 681a ldr r2, [r3, #0]
  46659. 8013302: 4b1b ldr r3, [pc, #108] @ (8013370 <pvPortMalloc+0x194>)
  46660. 8013304: 681b ldr r3, [r3, #0]
  46661. 8013306: 429a cmp r2, r3
  46662. 8013308: d203 bcs.n 8013312 <pvPortMalloc+0x136>
  46663. {
  46664. xMinimumEverFreeBytesRemaining = xFreeBytesRemaining;
  46665. 801330a: 4b17 ldr r3, [pc, #92] @ (8013368 <pvPortMalloc+0x18c>)
  46666. 801330c: 681b ldr r3, [r3, #0]
  46667. 801330e: 4a18 ldr r2, [pc, #96] @ (8013370 <pvPortMalloc+0x194>)
  46668. 8013310: 6013 str r3, [r2, #0]
  46669. mtCOVERAGE_TEST_MARKER();
  46670. }
  46671. /* The block is being returned - it is allocated and owned
  46672. by the application and has no "next" block. */
  46673. pxBlock->xBlockSize |= xBlockAllocatedBit;
  46674. 8013312: 6a7b ldr r3, [r7, #36] @ 0x24
  46675. 8013314: 685a ldr r2, [r3, #4]
  46676. 8013316: 4b13 ldr r3, [pc, #76] @ (8013364 <pvPortMalloc+0x188>)
  46677. 8013318: 681b ldr r3, [r3, #0]
  46678. 801331a: 431a orrs r2, r3
  46679. 801331c: 6a7b ldr r3, [r7, #36] @ 0x24
  46680. 801331e: 605a str r2, [r3, #4]
  46681. pxBlock->pxNextFreeBlock = NULL;
  46682. 8013320: 6a7b ldr r3, [r7, #36] @ 0x24
  46683. 8013322: 2200 movs r2, #0
  46684. 8013324: 601a str r2, [r3, #0]
  46685. xNumberOfSuccessfulAllocations++;
  46686. 8013326: 4b13 ldr r3, [pc, #76] @ (8013374 <pvPortMalloc+0x198>)
  46687. 8013328: 681b ldr r3, [r3, #0]
  46688. 801332a: 3301 adds r3, #1
  46689. 801332c: 4a11 ldr r2, [pc, #68] @ (8013374 <pvPortMalloc+0x198>)
  46690. 801332e: 6013 str r3, [r2, #0]
  46691. mtCOVERAGE_TEST_MARKER();
  46692. }
  46693. traceMALLOC( pvReturn, xWantedSize );
  46694. }
  46695. ( void ) xTaskResumeAll();
  46696. 8013330: f7fe f96c bl 801160c <xTaskResumeAll>
  46697. mtCOVERAGE_TEST_MARKER();
  46698. }
  46699. }
  46700. #endif
  46701. configASSERT( ( ( ( size_t ) pvReturn ) & ( size_t ) portBYTE_ALIGNMENT_MASK ) == 0 );
  46702. 8013334: 69fb ldr r3, [r7, #28]
  46703. 8013336: f003 0307 and.w r3, r3, #7
  46704. 801333a: 2b00 cmp r3, #0
  46705. 801333c: d00b beq.n 8013356 <pvPortMalloc+0x17a>
  46706. __asm volatile
  46707. 801333e: f04f 0350 mov.w r3, #80 @ 0x50
  46708. 8013342: f383 8811 msr BASEPRI, r3
  46709. 8013346: f3bf 8f6f isb sy
  46710. 801334a: f3bf 8f4f dsb sy
  46711. 801334e: 60fb str r3, [r7, #12]
  46712. }
  46713. 8013350: bf00 nop
  46714. 8013352: bf00 nop
  46715. 8013354: e7fd b.n 8013352 <pvPortMalloc+0x176>
  46716. return pvReturn;
  46717. 8013356: 69fb ldr r3, [r7, #28]
  46718. }
  46719. 8013358: 4618 mov r0, r3
  46720. 801335a: 3728 adds r7, #40 @ 0x28
  46721. 801335c: 46bd mov sp, r7
  46722. 801335e: bd80 pop {r7, pc}
  46723. 8013360: 24012a30 .word 0x24012a30
  46724. 8013364: 24012a44 .word 0x24012a44
  46725. 8013368: 24012a34 .word 0x24012a34
  46726. 801336c: 24012a28 .word 0x24012a28
  46727. 8013370: 24012a38 .word 0x24012a38
  46728. 8013374: 24012a3c .word 0x24012a3c
  46729. 08013378 <vPortFree>:
  46730. /*-----------------------------------------------------------*/
  46731. void vPortFree( void *pv )
  46732. {
  46733. 8013378: b580 push {r7, lr}
  46734. 801337a: b086 sub sp, #24
  46735. 801337c: af00 add r7, sp, #0
  46736. 801337e: 6078 str r0, [r7, #4]
  46737. uint8_t *puc = ( uint8_t * ) pv;
  46738. 8013380: 687b ldr r3, [r7, #4]
  46739. 8013382: 617b str r3, [r7, #20]
  46740. BlockLink_t *pxLink;
  46741. if( pv != NULL )
  46742. 8013384: 687b ldr r3, [r7, #4]
  46743. 8013386: 2b00 cmp r3, #0
  46744. 8013388: d04f beq.n 801342a <vPortFree+0xb2>
  46745. {
  46746. /* The memory being freed will have an BlockLink_t structure immediately
  46747. before it. */
  46748. puc -= xHeapStructSize;
  46749. 801338a: 2308 movs r3, #8
  46750. 801338c: 425b negs r3, r3
  46751. 801338e: 697a ldr r2, [r7, #20]
  46752. 8013390: 4413 add r3, r2
  46753. 8013392: 617b str r3, [r7, #20]
  46754. /* This casting is to keep the compiler from issuing warnings. */
  46755. pxLink = ( void * ) puc;
  46756. 8013394: 697b ldr r3, [r7, #20]
  46757. 8013396: 613b str r3, [r7, #16]
  46758. /* Check the block is actually allocated. */
  46759. configASSERT( ( pxLink->xBlockSize & xBlockAllocatedBit ) != 0 );
  46760. 8013398: 693b ldr r3, [r7, #16]
  46761. 801339a: 685a ldr r2, [r3, #4]
  46762. 801339c: 4b25 ldr r3, [pc, #148] @ (8013434 <vPortFree+0xbc>)
  46763. 801339e: 681b ldr r3, [r3, #0]
  46764. 80133a0: 4013 ands r3, r2
  46765. 80133a2: 2b00 cmp r3, #0
  46766. 80133a4: d10b bne.n 80133be <vPortFree+0x46>
  46767. __asm volatile
  46768. 80133a6: f04f 0350 mov.w r3, #80 @ 0x50
  46769. 80133aa: f383 8811 msr BASEPRI, r3
  46770. 80133ae: f3bf 8f6f isb sy
  46771. 80133b2: f3bf 8f4f dsb sy
  46772. 80133b6: 60fb str r3, [r7, #12]
  46773. }
  46774. 80133b8: bf00 nop
  46775. 80133ba: bf00 nop
  46776. 80133bc: e7fd b.n 80133ba <vPortFree+0x42>
  46777. configASSERT( pxLink->pxNextFreeBlock == NULL );
  46778. 80133be: 693b ldr r3, [r7, #16]
  46779. 80133c0: 681b ldr r3, [r3, #0]
  46780. 80133c2: 2b00 cmp r3, #0
  46781. 80133c4: d00b beq.n 80133de <vPortFree+0x66>
  46782. __asm volatile
  46783. 80133c6: f04f 0350 mov.w r3, #80 @ 0x50
  46784. 80133ca: f383 8811 msr BASEPRI, r3
  46785. 80133ce: f3bf 8f6f isb sy
  46786. 80133d2: f3bf 8f4f dsb sy
  46787. 80133d6: 60bb str r3, [r7, #8]
  46788. }
  46789. 80133d8: bf00 nop
  46790. 80133da: bf00 nop
  46791. 80133dc: e7fd b.n 80133da <vPortFree+0x62>
  46792. if( ( pxLink->xBlockSize & xBlockAllocatedBit ) != 0 )
  46793. 80133de: 693b ldr r3, [r7, #16]
  46794. 80133e0: 685a ldr r2, [r3, #4]
  46795. 80133e2: 4b14 ldr r3, [pc, #80] @ (8013434 <vPortFree+0xbc>)
  46796. 80133e4: 681b ldr r3, [r3, #0]
  46797. 80133e6: 4013 ands r3, r2
  46798. 80133e8: 2b00 cmp r3, #0
  46799. 80133ea: d01e beq.n 801342a <vPortFree+0xb2>
  46800. {
  46801. if( pxLink->pxNextFreeBlock == NULL )
  46802. 80133ec: 693b ldr r3, [r7, #16]
  46803. 80133ee: 681b ldr r3, [r3, #0]
  46804. 80133f0: 2b00 cmp r3, #0
  46805. 80133f2: d11a bne.n 801342a <vPortFree+0xb2>
  46806. {
  46807. /* The block is being returned to the heap - it is no longer
  46808. allocated. */
  46809. pxLink->xBlockSize &= ~xBlockAllocatedBit;
  46810. 80133f4: 693b ldr r3, [r7, #16]
  46811. 80133f6: 685a ldr r2, [r3, #4]
  46812. 80133f8: 4b0e ldr r3, [pc, #56] @ (8013434 <vPortFree+0xbc>)
  46813. 80133fa: 681b ldr r3, [r3, #0]
  46814. 80133fc: 43db mvns r3, r3
  46815. 80133fe: 401a ands r2, r3
  46816. 8013400: 693b ldr r3, [r7, #16]
  46817. 8013402: 605a str r2, [r3, #4]
  46818. vTaskSuspendAll();
  46819. 8013404: f7fe f8f4 bl 80115f0 <vTaskSuspendAll>
  46820. {
  46821. /* Add this block to the list of free blocks. */
  46822. xFreeBytesRemaining += pxLink->xBlockSize;
  46823. 8013408: 693b ldr r3, [r7, #16]
  46824. 801340a: 685a ldr r2, [r3, #4]
  46825. 801340c: 4b0a ldr r3, [pc, #40] @ (8013438 <vPortFree+0xc0>)
  46826. 801340e: 681b ldr r3, [r3, #0]
  46827. 8013410: 4413 add r3, r2
  46828. 8013412: 4a09 ldr r2, [pc, #36] @ (8013438 <vPortFree+0xc0>)
  46829. 8013414: 6013 str r3, [r2, #0]
  46830. traceFREE( pv, pxLink->xBlockSize );
  46831. prvInsertBlockIntoFreeList( ( ( BlockLink_t * ) pxLink ) );
  46832. 8013416: 6938 ldr r0, [r7, #16]
  46833. 8013418: f000 f874 bl 8013504 <prvInsertBlockIntoFreeList>
  46834. xNumberOfSuccessfulFrees++;
  46835. 801341c: 4b07 ldr r3, [pc, #28] @ (801343c <vPortFree+0xc4>)
  46836. 801341e: 681b ldr r3, [r3, #0]
  46837. 8013420: 3301 adds r3, #1
  46838. 8013422: 4a06 ldr r2, [pc, #24] @ (801343c <vPortFree+0xc4>)
  46839. 8013424: 6013 str r3, [r2, #0]
  46840. }
  46841. ( void ) xTaskResumeAll();
  46842. 8013426: f7fe f8f1 bl 801160c <xTaskResumeAll>
  46843. else
  46844. {
  46845. mtCOVERAGE_TEST_MARKER();
  46846. }
  46847. }
  46848. }
  46849. 801342a: bf00 nop
  46850. 801342c: 3718 adds r7, #24
  46851. 801342e: 46bd mov sp, r7
  46852. 8013430: bd80 pop {r7, pc}
  46853. 8013432: bf00 nop
  46854. 8013434: 24012a44 .word 0x24012a44
  46855. 8013438: 24012a34 .word 0x24012a34
  46856. 801343c: 24012a40 .word 0x24012a40
  46857. 08013440 <prvHeapInit>:
  46858. /* This just exists to keep the linker quiet. */
  46859. }
  46860. /*-----------------------------------------------------------*/
  46861. static void prvHeapInit( void )
  46862. {
  46863. 8013440: b480 push {r7}
  46864. 8013442: b085 sub sp, #20
  46865. 8013444: af00 add r7, sp, #0
  46866. BlockLink_t *pxFirstFreeBlock;
  46867. uint8_t *pucAlignedHeap;
  46868. size_t uxAddress;
  46869. size_t xTotalHeapSize = configTOTAL_HEAP_SIZE;
  46870. 8013446: f44f 3380 mov.w r3, #65536 @ 0x10000
  46871. 801344a: 60bb str r3, [r7, #8]
  46872. /* Ensure the heap starts on a correctly aligned boundary. */
  46873. uxAddress = ( size_t ) ucHeap;
  46874. 801344c: 4b27 ldr r3, [pc, #156] @ (80134ec <prvHeapInit+0xac>)
  46875. 801344e: 60fb str r3, [r7, #12]
  46876. if( ( uxAddress & portBYTE_ALIGNMENT_MASK ) != 0 )
  46877. 8013450: 68fb ldr r3, [r7, #12]
  46878. 8013452: f003 0307 and.w r3, r3, #7
  46879. 8013456: 2b00 cmp r3, #0
  46880. 8013458: d00c beq.n 8013474 <prvHeapInit+0x34>
  46881. {
  46882. uxAddress += ( portBYTE_ALIGNMENT - 1 );
  46883. 801345a: 68fb ldr r3, [r7, #12]
  46884. 801345c: 3307 adds r3, #7
  46885. 801345e: 60fb str r3, [r7, #12]
  46886. uxAddress &= ~( ( size_t ) portBYTE_ALIGNMENT_MASK );
  46887. 8013460: 68fb ldr r3, [r7, #12]
  46888. 8013462: f023 0307 bic.w r3, r3, #7
  46889. 8013466: 60fb str r3, [r7, #12]
  46890. xTotalHeapSize -= uxAddress - ( size_t ) ucHeap;
  46891. 8013468: 68ba ldr r2, [r7, #8]
  46892. 801346a: 68fb ldr r3, [r7, #12]
  46893. 801346c: 1ad3 subs r3, r2, r3
  46894. 801346e: 4a1f ldr r2, [pc, #124] @ (80134ec <prvHeapInit+0xac>)
  46895. 8013470: 4413 add r3, r2
  46896. 8013472: 60bb str r3, [r7, #8]
  46897. }
  46898. pucAlignedHeap = ( uint8_t * ) uxAddress;
  46899. 8013474: 68fb ldr r3, [r7, #12]
  46900. 8013476: 607b str r3, [r7, #4]
  46901. /* xStart is used to hold a pointer to the first item in the list of free
  46902. blocks. The void cast is used to prevent compiler warnings. */
  46903. xStart.pxNextFreeBlock = ( void * ) pucAlignedHeap;
  46904. 8013478: 4a1d ldr r2, [pc, #116] @ (80134f0 <prvHeapInit+0xb0>)
  46905. 801347a: 687b ldr r3, [r7, #4]
  46906. 801347c: 6013 str r3, [r2, #0]
  46907. xStart.xBlockSize = ( size_t ) 0;
  46908. 801347e: 4b1c ldr r3, [pc, #112] @ (80134f0 <prvHeapInit+0xb0>)
  46909. 8013480: 2200 movs r2, #0
  46910. 8013482: 605a str r2, [r3, #4]
  46911. /* pxEnd is used to mark the end of the list of free blocks and is inserted
  46912. at the end of the heap space. */
  46913. uxAddress = ( ( size_t ) pucAlignedHeap ) + xTotalHeapSize;
  46914. 8013484: 687b ldr r3, [r7, #4]
  46915. 8013486: 68ba ldr r2, [r7, #8]
  46916. 8013488: 4413 add r3, r2
  46917. 801348a: 60fb str r3, [r7, #12]
  46918. uxAddress -= xHeapStructSize;
  46919. 801348c: 2208 movs r2, #8
  46920. 801348e: 68fb ldr r3, [r7, #12]
  46921. 8013490: 1a9b subs r3, r3, r2
  46922. 8013492: 60fb str r3, [r7, #12]
  46923. uxAddress &= ~( ( size_t ) portBYTE_ALIGNMENT_MASK );
  46924. 8013494: 68fb ldr r3, [r7, #12]
  46925. 8013496: f023 0307 bic.w r3, r3, #7
  46926. 801349a: 60fb str r3, [r7, #12]
  46927. pxEnd = ( void * ) uxAddress;
  46928. 801349c: 68fb ldr r3, [r7, #12]
  46929. 801349e: 4a15 ldr r2, [pc, #84] @ (80134f4 <prvHeapInit+0xb4>)
  46930. 80134a0: 6013 str r3, [r2, #0]
  46931. pxEnd->xBlockSize = 0;
  46932. 80134a2: 4b14 ldr r3, [pc, #80] @ (80134f4 <prvHeapInit+0xb4>)
  46933. 80134a4: 681b ldr r3, [r3, #0]
  46934. 80134a6: 2200 movs r2, #0
  46935. 80134a8: 605a str r2, [r3, #4]
  46936. pxEnd->pxNextFreeBlock = NULL;
  46937. 80134aa: 4b12 ldr r3, [pc, #72] @ (80134f4 <prvHeapInit+0xb4>)
  46938. 80134ac: 681b ldr r3, [r3, #0]
  46939. 80134ae: 2200 movs r2, #0
  46940. 80134b0: 601a str r2, [r3, #0]
  46941. /* To start with there is a single free block that is sized to take up the
  46942. entire heap space, minus the space taken by pxEnd. */
  46943. pxFirstFreeBlock = ( void * ) pucAlignedHeap;
  46944. 80134b2: 687b ldr r3, [r7, #4]
  46945. 80134b4: 603b str r3, [r7, #0]
  46946. pxFirstFreeBlock->xBlockSize = uxAddress - ( size_t ) pxFirstFreeBlock;
  46947. 80134b6: 683b ldr r3, [r7, #0]
  46948. 80134b8: 68fa ldr r2, [r7, #12]
  46949. 80134ba: 1ad2 subs r2, r2, r3
  46950. 80134bc: 683b ldr r3, [r7, #0]
  46951. 80134be: 605a str r2, [r3, #4]
  46952. pxFirstFreeBlock->pxNextFreeBlock = pxEnd;
  46953. 80134c0: 4b0c ldr r3, [pc, #48] @ (80134f4 <prvHeapInit+0xb4>)
  46954. 80134c2: 681a ldr r2, [r3, #0]
  46955. 80134c4: 683b ldr r3, [r7, #0]
  46956. 80134c6: 601a str r2, [r3, #0]
  46957. /* Only one block exists - and it covers the entire usable heap space. */
  46958. xMinimumEverFreeBytesRemaining = pxFirstFreeBlock->xBlockSize;
  46959. 80134c8: 683b ldr r3, [r7, #0]
  46960. 80134ca: 685b ldr r3, [r3, #4]
  46961. 80134cc: 4a0a ldr r2, [pc, #40] @ (80134f8 <prvHeapInit+0xb8>)
  46962. 80134ce: 6013 str r3, [r2, #0]
  46963. xFreeBytesRemaining = pxFirstFreeBlock->xBlockSize;
  46964. 80134d0: 683b ldr r3, [r7, #0]
  46965. 80134d2: 685b ldr r3, [r3, #4]
  46966. 80134d4: 4a09 ldr r2, [pc, #36] @ (80134fc <prvHeapInit+0xbc>)
  46967. 80134d6: 6013 str r3, [r2, #0]
  46968. /* Work out the position of the top bit in a size_t variable. */
  46969. xBlockAllocatedBit = ( ( size_t ) 1 ) << ( ( sizeof( size_t ) * heapBITS_PER_BYTE ) - 1 );
  46970. 80134d8: 4b09 ldr r3, [pc, #36] @ (8013500 <prvHeapInit+0xc0>)
  46971. 80134da: f04f 4200 mov.w r2, #2147483648 @ 0x80000000
  46972. 80134de: 601a str r2, [r3, #0]
  46973. }
  46974. 80134e0: bf00 nop
  46975. 80134e2: 3714 adds r7, #20
  46976. 80134e4: 46bd mov sp, r7
  46977. 80134e6: f85d 7b04 ldr.w r7, [sp], #4
  46978. 80134ea: 4770 bx lr
  46979. 80134ec: 24002a28 .word 0x24002a28
  46980. 80134f0: 24012a28 .word 0x24012a28
  46981. 80134f4: 24012a30 .word 0x24012a30
  46982. 80134f8: 24012a38 .word 0x24012a38
  46983. 80134fc: 24012a34 .word 0x24012a34
  46984. 8013500: 24012a44 .word 0x24012a44
  46985. 08013504 <prvInsertBlockIntoFreeList>:
  46986. /*-----------------------------------------------------------*/
  46987. static void prvInsertBlockIntoFreeList( BlockLink_t *pxBlockToInsert )
  46988. {
  46989. 8013504: b480 push {r7}
  46990. 8013506: b085 sub sp, #20
  46991. 8013508: af00 add r7, sp, #0
  46992. 801350a: 6078 str r0, [r7, #4]
  46993. BlockLink_t *pxIterator;
  46994. uint8_t *puc;
  46995. /* Iterate through the list until a block is found that has a higher address
  46996. than the block being inserted. */
  46997. for( pxIterator = &xStart; pxIterator->pxNextFreeBlock < pxBlockToInsert; pxIterator = pxIterator->pxNextFreeBlock )
  46998. 801350c: 4b28 ldr r3, [pc, #160] @ (80135b0 <prvInsertBlockIntoFreeList+0xac>)
  46999. 801350e: 60fb str r3, [r7, #12]
  47000. 8013510: e002 b.n 8013518 <prvInsertBlockIntoFreeList+0x14>
  47001. 8013512: 68fb ldr r3, [r7, #12]
  47002. 8013514: 681b ldr r3, [r3, #0]
  47003. 8013516: 60fb str r3, [r7, #12]
  47004. 8013518: 68fb ldr r3, [r7, #12]
  47005. 801351a: 681b ldr r3, [r3, #0]
  47006. 801351c: 687a ldr r2, [r7, #4]
  47007. 801351e: 429a cmp r2, r3
  47008. 8013520: d8f7 bhi.n 8013512 <prvInsertBlockIntoFreeList+0xe>
  47009. /* Nothing to do here, just iterate to the right position. */
  47010. }
  47011. /* Do the block being inserted, and the block it is being inserted after
  47012. make a contiguous block of memory? */
  47013. puc = ( uint8_t * ) pxIterator;
  47014. 8013522: 68fb ldr r3, [r7, #12]
  47015. 8013524: 60bb str r3, [r7, #8]
  47016. if( ( puc + pxIterator->xBlockSize ) == ( uint8_t * ) pxBlockToInsert )
  47017. 8013526: 68fb ldr r3, [r7, #12]
  47018. 8013528: 685b ldr r3, [r3, #4]
  47019. 801352a: 68ba ldr r2, [r7, #8]
  47020. 801352c: 4413 add r3, r2
  47021. 801352e: 687a ldr r2, [r7, #4]
  47022. 8013530: 429a cmp r2, r3
  47023. 8013532: d108 bne.n 8013546 <prvInsertBlockIntoFreeList+0x42>
  47024. {
  47025. pxIterator->xBlockSize += pxBlockToInsert->xBlockSize;
  47026. 8013534: 68fb ldr r3, [r7, #12]
  47027. 8013536: 685a ldr r2, [r3, #4]
  47028. 8013538: 687b ldr r3, [r7, #4]
  47029. 801353a: 685b ldr r3, [r3, #4]
  47030. 801353c: 441a add r2, r3
  47031. 801353e: 68fb ldr r3, [r7, #12]
  47032. 8013540: 605a str r2, [r3, #4]
  47033. pxBlockToInsert = pxIterator;
  47034. 8013542: 68fb ldr r3, [r7, #12]
  47035. 8013544: 607b str r3, [r7, #4]
  47036. mtCOVERAGE_TEST_MARKER();
  47037. }
  47038. /* Do the block being inserted, and the block it is being inserted before
  47039. make a contiguous block of memory? */
  47040. puc = ( uint8_t * ) pxBlockToInsert;
  47041. 8013546: 687b ldr r3, [r7, #4]
  47042. 8013548: 60bb str r3, [r7, #8]
  47043. if( ( puc + pxBlockToInsert->xBlockSize ) == ( uint8_t * ) pxIterator->pxNextFreeBlock )
  47044. 801354a: 687b ldr r3, [r7, #4]
  47045. 801354c: 685b ldr r3, [r3, #4]
  47046. 801354e: 68ba ldr r2, [r7, #8]
  47047. 8013550: 441a add r2, r3
  47048. 8013552: 68fb ldr r3, [r7, #12]
  47049. 8013554: 681b ldr r3, [r3, #0]
  47050. 8013556: 429a cmp r2, r3
  47051. 8013558: d118 bne.n 801358c <prvInsertBlockIntoFreeList+0x88>
  47052. {
  47053. if( pxIterator->pxNextFreeBlock != pxEnd )
  47054. 801355a: 68fb ldr r3, [r7, #12]
  47055. 801355c: 681a ldr r2, [r3, #0]
  47056. 801355e: 4b15 ldr r3, [pc, #84] @ (80135b4 <prvInsertBlockIntoFreeList+0xb0>)
  47057. 8013560: 681b ldr r3, [r3, #0]
  47058. 8013562: 429a cmp r2, r3
  47059. 8013564: d00d beq.n 8013582 <prvInsertBlockIntoFreeList+0x7e>
  47060. {
  47061. /* Form one big block from the two blocks. */
  47062. pxBlockToInsert->xBlockSize += pxIterator->pxNextFreeBlock->xBlockSize;
  47063. 8013566: 687b ldr r3, [r7, #4]
  47064. 8013568: 685a ldr r2, [r3, #4]
  47065. 801356a: 68fb ldr r3, [r7, #12]
  47066. 801356c: 681b ldr r3, [r3, #0]
  47067. 801356e: 685b ldr r3, [r3, #4]
  47068. 8013570: 441a add r2, r3
  47069. 8013572: 687b ldr r3, [r7, #4]
  47070. 8013574: 605a str r2, [r3, #4]
  47071. pxBlockToInsert->pxNextFreeBlock = pxIterator->pxNextFreeBlock->pxNextFreeBlock;
  47072. 8013576: 68fb ldr r3, [r7, #12]
  47073. 8013578: 681b ldr r3, [r3, #0]
  47074. 801357a: 681a ldr r2, [r3, #0]
  47075. 801357c: 687b ldr r3, [r7, #4]
  47076. 801357e: 601a str r2, [r3, #0]
  47077. 8013580: e008 b.n 8013594 <prvInsertBlockIntoFreeList+0x90>
  47078. }
  47079. else
  47080. {
  47081. pxBlockToInsert->pxNextFreeBlock = pxEnd;
  47082. 8013582: 4b0c ldr r3, [pc, #48] @ (80135b4 <prvInsertBlockIntoFreeList+0xb0>)
  47083. 8013584: 681a ldr r2, [r3, #0]
  47084. 8013586: 687b ldr r3, [r7, #4]
  47085. 8013588: 601a str r2, [r3, #0]
  47086. 801358a: e003 b.n 8013594 <prvInsertBlockIntoFreeList+0x90>
  47087. }
  47088. }
  47089. else
  47090. {
  47091. pxBlockToInsert->pxNextFreeBlock = pxIterator->pxNextFreeBlock;
  47092. 801358c: 68fb ldr r3, [r7, #12]
  47093. 801358e: 681a ldr r2, [r3, #0]
  47094. 8013590: 687b ldr r3, [r7, #4]
  47095. 8013592: 601a str r2, [r3, #0]
  47096. /* If the block being inserted plugged a gab, so was merged with the block
  47097. before and the block after, then it's pxNextFreeBlock pointer will have
  47098. already been set, and should not be set here as that would make it point
  47099. to itself. */
  47100. if( pxIterator != pxBlockToInsert )
  47101. 8013594: 68fa ldr r2, [r7, #12]
  47102. 8013596: 687b ldr r3, [r7, #4]
  47103. 8013598: 429a cmp r2, r3
  47104. 801359a: d002 beq.n 80135a2 <prvInsertBlockIntoFreeList+0x9e>
  47105. {
  47106. pxIterator->pxNextFreeBlock = pxBlockToInsert;
  47107. 801359c: 68fb ldr r3, [r7, #12]
  47108. 801359e: 687a ldr r2, [r7, #4]
  47109. 80135a0: 601a str r2, [r3, #0]
  47110. }
  47111. else
  47112. {
  47113. mtCOVERAGE_TEST_MARKER();
  47114. }
  47115. }
  47116. 80135a2: bf00 nop
  47117. 80135a4: 3714 adds r7, #20
  47118. 80135a6: 46bd mov sp, r7
  47119. 80135a8: f85d 7b04 ldr.w r7, [sp], #4
  47120. 80135ac: 4770 bx lr
  47121. 80135ae: bf00 nop
  47122. 80135b0: 24012a28 .word 0x24012a28
  47123. 80135b4: 24012a30 .word 0x24012a30
  47124. 080135b8 <std>:
  47125. 80135b8: 2300 movs r3, #0
  47126. 80135ba: b510 push {r4, lr}
  47127. 80135bc: 4604 mov r4, r0
  47128. 80135be: e9c0 3300 strd r3, r3, [r0]
  47129. 80135c2: e9c0 3304 strd r3, r3, [r0, #16]
  47130. 80135c6: 6083 str r3, [r0, #8]
  47131. 80135c8: 8181 strh r1, [r0, #12]
  47132. 80135ca: 6643 str r3, [r0, #100] @ 0x64
  47133. 80135cc: 81c2 strh r2, [r0, #14]
  47134. 80135ce: 6183 str r3, [r0, #24]
  47135. 80135d0: 4619 mov r1, r3
  47136. 80135d2: 2208 movs r2, #8
  47137. 80135d4: 305c adds r0, #92 @ 0x5c
  47138. 80135d6: f000 f906 bl 80137e6 <memset>
  47139. 80135da: 4b0d ldr r3, [pc, #52] @ (8013610 <std+0x58>)
  47140. 80135dc: 6263 str r3, [r4, #36] @ 0x24
  47141. 80135de: 4b0d ldr r3, [pc, #52] @ (8013614 <std+0x5c>)
  47142. 80135e0: 62a3 str r3, [r4, #40] @ 0x28
  47143. 80135e2: 4b0d ldr r3, [pc, #52] @ (8013618 <std+0x60>)
  47144. 80135e4: 62e3 str r3, [r4, #44] @ 0x2c
  47145. 80135e6: 4b0d ldr r3, [pc, #52] @ (801361c <std+0x64>)
  47146. 80135e8: 6323 str r3, [r4, #48] @ 0x30
  47147. 80135ea: 4b0d ldr r3, [pc, #52] @ (8013620 <std+0x68>)
  47148. 80135ec: 6224 str r4, [r4, #32]
  47149. 80135ee: 429c cmp r4, r3
  47150. 80135f0: d006 beq.n 8013600 <std+0x48>
  47151. 80135f2: f103 0268 add.w r2, r3, #104 @ 0x68
  47152. 80135f6: 4294 cmp r4, r2
  47153. 80135f8: d002 beq.n 8013600 <std+0x48>
  47154. 80135fa: 33d0 adds r3, #208 @ 0xd0
  47155. 80135fc: 429c cmp r4, r3
  47156. 80135fe: d105 bne.n 801360c <std+0x54>
  47157. 8013600: f104 0058 add.w r0, r4, #88 @ 0x58
  47158. 8013604: e8bd 4010 ldmia.w sp!, {r4, lr}
  47159. 8013608: f000 b9bc b.w 8013984 <__retarget_lock_init_recursive>
  47160. 801360c: bd10 pop {r4, pc}
  47161. 801360e: bf00 nop
  47162. 8013610: 08013761 .word 0x08013761
  47163. 8013614: 08013783 .word 0x08013783
  47164. 8013618: 080137bb .word 0x080137bb
  47165. 801361c: 080137df .word 0x080137df
  47166. 8013620: 24012a48 .word 0x24012a48
  47167. 08013624 <stdio_exit_handler>:
  47168. 8013624: 4a02 ldr r2, [pc, #8] @ (8013630 <stdio_exit_handler+0xc>)
  47169. 8013626: 4903 ldr r1, [pc, #12] @ (8013634 <stdio_exit_handler+0x10>)
  47170. 8013628: 4803 ldr r0, [pc, #12] @ (8013638 <stdio_exit_handler+0x14>)
  47171. 801362a: f000 b869 b.w 8013700 <_fwalk_sglue>
  47172. 801362e: bf00 nop
  47173. 8013630: 24000048 .word 0x24000048
  47174. 8013634: 08014241 .word 0x08014241
  47175. 8013638: 24000058 .word 0x24000058
  47176. 0801363c <cleanup_stdio>:
  47177. 801363c: 6841 ldr r1, [r0, #4]
  47178. 801363e: 4b0c ldr r3, [pc, #48] @ (8013670 <cleanup_stdio+0x34>)
  47179. 8013640: 4299 cmp r1, r3
  47180. 8013642: b510 push {r4, lr}
  47181. 8013644: 4604 mov r4, r0
  47182. 8013646: d001 beq.n 801364c <cleanup_stdio+0x10>
  47183. 8013648: f000 fdfa bl 8014240 <_fflush_r>
  47184. 801364c: 68a1 ldr r1, [r4, #8]
  47185. 801364e: 4b09 ldr r3, [pc, #36] @ (8013674 <cleanup_stdio+0x38>)
  47186. 8013650: 4299 cmp r1, r3
  47187. 8013652: d002 beq.n 801365a <cleanup_stdio+0x1e>
  47188. 8013654: 4620 mov r0, r4
  47189. 8013656: f000 fdf3 bl 8014240 <_fflush_r>
  47190. 801365a: 68e1 ldr r1, [r4, #12]
  47191. 801365c: 4b06 ldr r3, [pc, #24] @ (8013678 <cleanup_stdio+0x3c>)
  47192. 801365e: 4299 cmp r1, r3
  47193. 8013660: d004 beq.n 801366c <cleanup_stdio+0x30>
  47194. 8013662: 4620 mov r0, r4
  47195. 8013664: e8bd 4010 ldmia.w sp!, {r4, lr}
  47196. 8013668: f000 bdea b.w 8014240 <_fflush_r>
  47197. 801366c: bd10 pop {r4, pc}
  47198. 801366e: bf00 nop
  47199. 8013670: 24012a48 .word 0x24012a48
  47200. 8013674: 24012ab0 .word 0x24012ab0
  47201. 8013678: 24012b18 .word 0x24012b18
  47202. 0801367c <global_stdio_init.part.0>:
  47203. 801367c: b510 push {r4, lr}
  47204. 801367e: 4b0b ldr r3, [pc, #44] @ (80136ac <global_stdio_init.part.0+0x30>)
  47205. 8013680: 4c0b ldr r4, [pc, #44] @ (80136b0 <global_stdio_init.part.0+0x34>)
  47206. 8013682: 4a0c ldr r2, [pc, #48] @ (80136b4 <global_stdio_init.part.0+0x38>)
  47207. 8013684: 601a str r2, [r3, #0]
  47208. 8013686: 4620 mov r0, r4
  47209. 8013688: 2200 movs r2, #0
  47210. 801368a: 2104 movs r1, #4
  47211. 801368c: f7ff ff94 bl 80135b8 <std>
  47212. 8013690: f104 0068 add.w r0, r4, #104 @ 0x68
  47213. 8013694: 2201 movs r2, #1
  47214. 8013696: 2109 movs r1, #9
  47215. 8013698: f7ff ff8e bl 80135b8 <std>
  47216. 801369c: f104 00d0 add.w r0, r4, #208 @ 0xd0
  47217. 80136a0: 2202 movs r2, #2
  47218. 80136a2: e8bd 4010 ldmia.w sp!, {r4, lr}
  47219. 80136a6: 2112 movs r1, #18
  47220. 80136a8: f7ff bf86 b.w 80135b8 <std>
  47221. 80136ac: 24012b80 .word 0x24012b80
  47222. 80136b0: 24012a48 .word 0x24012a48
  47223. 80136b4: 08013625 .word 0x08013625
  47224. 080136b8 <__sfp_lock_acquire>:
  47225. 80136b8: 4801 ldr r0, [pc, #4] @ (80136c0 <__sfp_lock_acquire+0x8>)
  47226. 80136ba: f000 b964 b.w 8013986 <__retarget_lock_acquire_recursive>
  47227. 80136be: bf00 nop
  47228. 80136c0: 24012b89 .word 0x24012b89
  47229. 080136c4 <__sfp_lock_release>:
  47230. 80136c4: 4801 ldr r0, [pc, #4] @ (80136cc <__sfp_lock_release+0x8>)
  47231. 80136c6: f000 b95f b.w 8013988 <__retarget_lock_release_recursive>
  47232. 80136ca: bf00 nop
  47233. 80136cc: 24012b89 .word 0x24012b89
  47234. 080136d0 <__sinit>:
  47235. 80136d0: b510 push {r4, lr}
  47236. 80136d2: 4604 mov r4, r0
  47237. 80136d4: f7ff fff0 bl 80136b8 <__sfp_lock_acquire>
  47238. 80136d8: 6a23 ldr r3, [r4, #32]
  47239. 80136da: b11b cbz r3, 80136e4 <__sinit+0x14>
  47240. 80136dc: e8bd 4010 ldmia.w sp!, {r4, lr}
  47241. 80136e0: f7ff bff0 b.w 80136c4 <__sfp_lock_release>
  47242. 80136e4: 4b04 ldr r3, [pc, #16] @ (80136f8 <__sinit+0x28>)
  47243. 80136e6: 6223 str r3, [r4, #32]
  47244. 80136e8: 4b04 ldr r3, [pc, #16] @ (80136fc <__sinit+0x2c>)
  47245. 80136ea: 681b ldr r3, [r3, #0]
  47246. 80136ec: 2b00 cmp r3, #0
  47247. 80136ee: d1f5 bne.n 80136dc <__sinit+0xc>
  47248. 80136f0: f7ff ffc4 bl 801367c <global_stdio_init.part.0>
  47249. 80136f4: e7f2 b.n 80136dc <__sinit+0xc>
  47250. 80136f6: bf00 nop
  47251. 80136f8: 0801363d .word 0x0801363d
  47252. 80136fc: 24012b80 .word 0x24012b80
  47253. 08013700 <_fwalk_sglue>:
  47254. 8013700: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr}
  47255. 8013704: 4607 mov r7, r0
  47256. 8013706: 4688 mov r8, r1
  47257. 8013708: 4614 mov r4, r2
  47258. 801370a: 2600 movs r6, #0
  47259. 801370c: e9d4 9501 ldrd r9, r5, [r4, #4]
  47260. 8013710: f1b9 0901 subs.w r9, r9, #1
  47261. 8013714: d505 bpl.n 8013722 <_fwalk_sglue+0x22>
  47262. 8013716: 6824 ldr r4, [r4, #0]
  47263. 8013718: 2c00 cmp r4, #0
  47264. 801371a: d1f7 bne.n 801370c <_fwalk_sglue+0xc>
  47265. 801371c: 4630 mov r0, r6
  47266. 801371e: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc}
  47267. 8013722: 89ab ldrh r3, [r5, #12]
  47268. 8013724: 2b01 cmp r3, #1
  47269. 8013726: d907 bls.n 8013738 <_fwalk_sglue+0x38>
  47270. 8013728: f9b5 300e ldrsh.w r3, [r5, #14]
  47271. 801372c: 3301 adds r3, #1
  47272. 801372e: d003 beq.n 8013738 <_fwalk_sglue+0x38>
  47273. 8013730: 4629 mov r1, r5
  47274. 8013732: 4638 mov r0, r7
  47275. 8013734: 47c0 blx r8
  47276. 8013736: 4306 orrs r6, r0
  47277. 8013738: 3568 adds r5, #104 @ 0x68
  47278. 801373a: e7e9 b.n 8013710 <_fwalk_sglue+0x10>
  47279. 0801373c <iprintf>:
  47280. 801373c: b40f push {r0, r1, r2, r3}
  47281. 801373e: b507 push {r0, r1, r2, lr}
  47282. 8013740: 4906 ldr r1, [pc, #24] @ (801375c <iprintf+0x20>)
  47283. 8013742: ab04 add r3, sp, #16
  47284. 8013744: 6808 ldr r0, [r1, #0]
  47285. 8013746: f853 2b04 ldr.w r2, [r3], #4
  47286. 801374a: 6881 ldr r1, [r0, #8]
  47287. 801374c: 9301 str r3, [sp, #4]
  47288. 801374e: f000 fa4d bl 8013bec <_vfiprintf_r>
  47289. 8013752: b003 add sp, #12
  47290. 8013754: f85d eb04 ldr.w lr, [sp], #4
  47291. 8013758: b004 add sp, #16
  47292. 801375a: 4770 bx lr
  47293. 801375c: 24000054 .word 0x24000054
  47294. 08013760 <__sread>:
  47295. 8013760: b510 push {r4, lr}
  47296. 8013762: 460c mov r4, r1
  47297. 8013764: f9b1 100e ldrsh.w r1, [r1, #14]
  47298. 8013768: f000 f8be bl 80138e8 <_read_r>
  47299. 801376c: 2800 cmp r0, #0
  47300. 801376e: bfab itete ge
  47301. 8013770: 6d63 ldrge r3, [r4, #84] @ 0x54
  47302. 8013772: 89a3 ldrhlt r3, [r4, #12]
  47303. 8013774: 181b addge r3, r3, r0
  47304. 8013776: f423 5380 biclt.w r3, r3, #4096 @ 0x1000
  47305. 801377a: bfac ite ge
  47306. 801377c: 6563 strge r3, [r4, #84] @ 0x54
  47307. 801377e: 81a3 strhlt r3, [r4, #12]
  47308. 8013780: bd10 pop {r4, pc}
  47309. 08013782 <__swrite>:
  47310. 8013782: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
  47311. 8013786: 461f mov r7, r3
  47312. 8013788: 898b ldrh r3, [r1, #12]
  47313. 801378a: 05db lsls r3, r3, #23
  47314. 801378c: 4605 mov r5, r0
  47315. 801378e: 460c mov r4, r1
  47316. 8013790: 4616 mov r6, r2
  47317. 8013792: d505 bpl.n 80137a0 <__swrite+0x1e>
  47318. 8013794: f9b1 100e ldrsh.w r1, [r1, #14]
  47319. 8013798: 2302 movs r3, #2
  47320. 801379a: 2200 movs r2, #0
  47321. 801379c: f000 f892 bl 80138c4 <_lseek_r>
  47322. 80137a0: 89a3 ldrh r3, [r4, #12]
  47323. 80137a2: f9b4 100e ldrsh.w r1, [r4, #14]
  47324. 80137a6: f423 5380 bic.w r3, r3, #4096 @ 0x1000
  47325. 80137aa: 81a3 strh r3, [r4, #12]
  47326. 80137ac: 4632 mov r2, r6
  47327. 80137ae: 463b mov r3, r7
  47328. 80137b0: 4628 mov r0, r5
  47329. 80137b2: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr}
  47330. 80137b6: f000 b8a9 b.w 801390c <_write_r>
  47331. 080137ba <__sseek>:
  47332. 80137ba: b510 push {r4, lr}
  47333. 80137bc: 460c mov r4, r1
  47334. 80137be: f9b1 100e ldrsh.w r1, [r1, #14]
  47335. 80137c2: f000 f87f bl 80138c4 <_lseek_r>
  47336. 80137c6: 1c43 adds r3, r0, #1
  47337. 80137c8: 89a3 ldrh r3, [r4, #12]
  47338. 80137ca: bf15 itete ne
  47339. 80137cc: 6560 strne r0, [r4, #84] @ 0x54
  47340. 80137ce: f423 5380 biceq.w r3, r3, #4096 @ 0x1000
  47341. 80137d2: f443 5380 orrne.w r3, r3, #4096 @ 0x1000
  47342. 80137d6: 81a3 strheq r3, [r4, #12]
  47343. 80137d8: bf18 it ne
  47344. 80137da: 81a3 strhne r3, [r4, #12]
  47345. 80137dc: bd10 pop {r4, pc}
  47346. 080137de <__sclose>:
  47347. 80137de: f9b1 100e ldrsh.w r1, [r1, #14]
  47348. 80137e2: f000 b809 b.w 80137f8 <_close_r>
  47349. 080137e6 <memset>:
  47350. 80137e6: 4402 add r2, r0
  47351. 80137e8: 4603 mov r3, r0
  47352. 80137ea: 4293 cmp r3, r2
  47353. 80137ec: d100 bne.n 80137f0 <memset+0xa>
  47354. 80137ee: 4770 bx lr
  47355. 80137f0: f803 1b01 strb.w r1, [r3], #1
  47356. 80137f4: e7f9 b.n 80137ea <memset+0x4>
  47357. ...
  47358. 080137f8 <_close_r>:
  47359. 80137f8: b538 push {r3, r4, r5, lr}
  47360. 80137fa: 4d06 ldr r5, [pc, #24] @ (8013814 <_close_r+0x1c>)
  47361. 80137fc: 2300 movs r3, #0
  47362. 80137fe: 4604 mov r4, r0
  47363. 8013800: 4608 mov r0, r1
  47364. 8013802: 602b str r3, [r5, #0]
  47365. 8013804: f7ee ffa3 bl 800274e <_close>
  47366. 8013808: 1c43 adds r3, r0, #1
  47367. 801380a: d102 bne.n 8013812 <_close_r+0x1a>
  47368. 801380c: 682b ldr r3, [r5, #0]
  47369. 801380e: b103 cbz r3, 8013812 <_close_r+0x1a>
  47370. 8013810: 6023 str r3, [r4, #0]
  47371. 8013812: bd38 pop {r3, r4, r5, pc}
  47372. 8013814: 24012b84 .word 0x24012b84
  47373. 08013818 <_reclaim_reent>:
  47374. 8013818: 4b29 ldr r3, [pc, #164] @ (80138c0 <_reclaim_reent+0xa8>)
  47375. 801381a: 681b ldr r3, [r3, #0]
  47376. 801381c: 4283 cmp r3, r0
  47377. 801381e: b570 push {r4, r5, r6, lr}
  47378. 8013820: 4604 mov r4, r0
  47379. 8013822: d04b beq.n 80138bc <_reclaim_reent+0xa4>
  47380. 8013824: 69c3 ldr r3, [r0, #28]
  47381. 8013826: b1ab cbz r3, 8013854 <_reclaim_reent+0x3c>
  47382. 8013828: 68db ldr r3, [r3, #12]
  47383. 801382a: b16b cbz r3, 8013848 <_reclaim_reent+0x30>
  47384. 801382c: 2500 movs r5, #0
  47385. 801382e: 69e3 ldr r3, [r4, #28]
  47386. 8013830: 68db ldr r3, [r3, #12]
  47387. 8013832: 5959 ldr r1, [r3, r5]
  47388. 8013834: 2900 cmp r1, #0
  47389. 8013836: d13b bne.n 80138b0 <_reclaim_reent+0x98>
  47390. 8013838: 3504 adds r5, #4
  47391. 801383a: 2d80 cmp r5, #128 @ 0x80
  47392. 801383c: d1f7 bne.n 801382e <_reclaim_reent+0x16>
  47393. 801383e: 69e3 ldr r3, [r4, #28]
  47394. 8013840: 4620 mov r0, r4
  47395. 8013842: 68d9 ldr r1, [r3, #12]
  47396. 8013844: f000 f8b0 bl 80139a8 <_free_r>
  47397. 8013848: 69e3 ldr r3, [r4, #28]
  47398. 801384a: 6819 ldr r1, [r3, #0]
  47399. 801384c: b111 cbz r1, 8013854 <_reclaim_reent+0x3c>
  47400. 801384e: 4620 mov r0, r4
  47401. 8013850: f000 f8aa bl 80139a8 <_free_r>
  47402. 8013854: 6961 ldr r1, [r4, #20]
  47403. 8013856: b111 cbz r1, 801385e <_reclaim_reent+0x46>
  47404. 8013858: 4620 mov r0, r4
  47405. 801385a: f000 f8a5 bl 80139a8 <_free_r>
  47406. 801385e: 69e1 ldr r1, [r4, #28]
  47407. 8013860: b111 cbz r1, 8013868 <_reclaim_reent+0x50>
  47408. 8013862: 4620 mov r0, r4
  47409. 8013864: f000 f8a0 bl 80139a8 <_free_r>
  47410. 8013868: 6b21 ldr r1, [r4, #48] @ 0x30
  47411. 801386a: b111 cbz r1, 8013872 <_reclaim_reent+0x5a>
  47412. 801386c: 4620 mov r0, r4
  47413. 801386e: f000 f89b bl 80139a8 <_free_r>
  47414. 8013872: 6b61 ldr r1, [r4, #52] @ 0x34
  47415. 8013874: b111 cbz r1, 801387c <_reclaim_reent+0x64>
  47416. 8013876: 4620 mov r0, r4
  47417. 8013878: f000 f896 bl 80139a8 <_free_r>
  47418. 801387c: 6ba1 ldr r1, [r4, #56] @ 0x38
  47419. 801387e: b111 cbz r1, 8013886 <_reclaim_reent+0x6e>
  47420. 8013880: 4620 mov r0, r4
  47421. 8013882: f000 f891 bl 80139a8 <_free_r>
  47422. 8013886: 6ca1 ldr r1, [r4, #72] @ 0x48
  47423. 8013888: b111 cbz r1, 8013890 <_reclaim_reent+0x78>
  47424. 801388a: 4620 mov r0, r4
  47425. 801388c: f000 f88c bl 80139a8 <_free_r>
  47426. 8013890: 6c61 ldr r1, [r4, #68] @ 0x44
  47427. 8013892: b111 cbz r1, 801389a <_reclaim_reent+0x82>
  47428. 8013894: 4620 mov r0, r4
  47429. 8013896: f000 f887 bl 80139a8 <_free_r>
  47430. 801389a: 6ae1 ldr r1, [r4, #44] @ 0x2c
  47431. 801389c: b111 cbz r1, 80138a4 <_reclaim_reent+0x8c>
  47432. 801389e: 4620 mov r0, r4
  47433. 80138a0: f000 f882 bl 80139a8 <_free_r>
  47434. 80138a4: 6a23 ldr r3, [r4, #32]
  47435. 80138a6: b14b cbz r3, 80138bc <_reclaim_reent+0xa4>
  47436. 80138a8: 4620 mov r0, r4
  47437. 80138aa: e8bd 4070 ldmia.w sp!, {r4, r5, r6, lr}
  47438. 80138ae: 4718 bx r3
  47439. 80138b0: 680e ldr r6, [r1, #0]
  47440. 80138b2: 4620 mov r0, r4
  47441. 80138b4: f000 f878 bl 80139a8 <_free_r>
  47442. 80138b8: 4631 mov r1, r6
  47443. 80138ba: e7bb b.n 8013834 <_reclaim_reent+0x1c>
  47444. 80138bc: bd70 pop {r4, r5, r6, pc}
  47445. 80138be: bf00 nop
  47446. 80138c0: 24000054 .word 0x24000054
  47447. 080138c4 <_lseek_r>:
  47448. 80138c4: b538 push {r3, r4, r5, lr}
  47449. 80138c6: 4d07 ldr r5, [pc, #28] @ (80138e4 <_lseek_r+0x20>)
  47450. 80138c8: 4604 mov r4, r0
  47451. 80138ca: 4608 mov r0, r1
  47452. 80138cc: 4611 mov r1, r2
  47453. 80138ce: 2200 movs r2, #0
  47454. 80138d0: 602a str r2, [r5, #0]
  47455. 80138d2: 461a mov r2, r3
  47456. 80138d4: f7ee ff62 bl 800279c <_lseek>
  47457. 80138d8: 1c43 adds r3, r0, #1
  47458. 80138da: d102 bne.n 80138e2 <_lseek_r+0x1e>
  47459. 80138dc: 682b ldr r3, [r5, #0]
  47460. 80138de: b103 cbz r3, 80138e2 <_lseek_r+0x1e>
  47461. 80138e0: 6023 str r3, [r4, #0]
  47462. 80138e2: bd38 pop {r3, r4, r5, pc}
  47463. 80138e4: 24012b84 .word 0x24012b84
  47464. 080138e8 <_read_r>:
  47465. 80138e8: b538 push {r3, r4, r5, lr}
  47466. 80138ea: 4d07 ldr r5, [pc, #28] @ (8013908 <_read_r+0x20>)
  47467. 80138ec: 4604 mov r4, r0
  47468. 80138ee: 4608 mov r0, r1
  47469. 80138f0: 4611 mov r1, r2
  47470. 80138f2: 2200 movs r2, #0
  47471. 80138f4: 602a str r2, [r5, #0]
  47472. 80138f6: 461a mov r2, r3
  47473. 80138f8: f7ee fef0 bl 80026dc <_read>
  47474. 80138fc: 1c43 adds r3, r0, #1
  47475. 80138fe: d102 bne.n 8013906 <_read_r+0x1e>
  47476. 8013900: 682b ldr r3, [r5, #0]
  47477. 8013902: b103 cbz r3, 8013906 <_read_r+0x1e>
  47478. 8013904: 6023 str r3, [r4, #0]
  47479. 8013906: bd38 pop {r3, r4, r5, pc}
  47480. 8013908: 24012b84 .word 0x24012b84
  47481. 0801390c <_write_r>:
  47482. 801390c: b538 push {r3, r4, r5, lr}
  47483. 801390e: 4d07 ldr r5, [pc, #28] @ (801392c <_write_r+0x20>)
  47484. 8013910: 4604 mov r4, r0
  47485. 8013912: 4608 mov r0, r1
  47486. 8013914: 4611 mov r1, r2
  47487. 8013916: 2200 movs r2, #0
  47488. 8013918: 602a str r2, [r5, #0]
  47489. 801391a: 461a mov r2, r3
  47490. 801391c: f7ee fefb bl 8002716 <_write>
  47491. 8013920: 1c43 adds r3, r0, #1
  47492. 8013922: d102 bne.n 801392a <_write_r+0x1e>
  47493. 8013924: 682b ldr r3, [r5, #0]
  47494. 8013926: b103 cbz r3, 801392a <_write_r+0x1e>
  47495. 8013928: 6023 str r3, [r4, #0]
  47496. 801392a: bd38 pop {r3, r4, r5, pc}
  47497. 801392c: 24012b84 .word 0x24012b84
  47498. 08013930 <__errno>:
  47499. 8013930: 4b01 ldr r3, [pc, #4] @ (8013938 <__errno+0x8>)
  47500. 8013932: 6818 ldr r0, [r3, #0]
  47501. 8013934: 4770 bx lr
  47502. 8013936: bf00 nop
  47503. 8013938: 24000054 .word 0x24000054
  47504. 0801393c <__libc_init_array>:
  47505. 801393c: b570 push {r4, r5, r6, lr}
  47506. 801393e: 4d0d ldr r5, [pc, #52] @ (8013974 <__libc_init_array+0x38>)
  47507. 8013940: 4c0d ldr r4, [pc, #52] @ (8013978 <__libc_init_array+0x3c>)
  47508. 8013942: 1b64 subs r4, r4, r5
  47509. 8013944: 10a4 asrs r4, r4, #2
  47510. 8013946: 2600 movs r6, #0
  47511. 8013948: 42a6 cmp r6, r4
  47512. 801394a: d109 bne.n 8013960 <__libc_init_array+0x24>
  47513. 801394c: 4d0b ldr r5, [pc, #44] @ (801397c <__libc_init_array+0x40>)
  47514. 801394e: 4c0c ldr r4, [pc, #48] @ (8013980 <__libc_init_array+0x44>)
  47515. 8013950: f000 fdc6 bl 80144e0 <_init>
  47516. 8013954: 1b64 subs r4, r4, r5
  47517. 8013956: 10a4 asrs r4, r4, #2
  47518. 8013958: 2600 movs r6, #0
  47519. 801395a: 42a6 cmp r6, r4
  47520. 801395c: d105 bne.n 801396a <__libc_init_array+0x2e>
  47521. 801395e: bd70 pop {r4, r5, r6, pc}
  47522. 8013960: f855 3b04 ldr.w r3, [r5], #4
  47523. 8013964: 4798 blx r3
  47524. 8013966: 3601 adds r6, #1
  47525. 8013968: e7ee b.n 8013948 <__libc_init_array+0xc>
  47526. 801396a: f855 3b04 ldr.w r3, [r5], #4
  47527. 801396e: 4798 blx r3
  47528. 8013970: 3601 adds r6, #1
  47529. 8013972: e7f2 b.n 801395a <__libc_init_array+0x1e>
  47530. 8013974: 08014660 .word 0x08014660
  47531. 8013978: 08014660 .word 0x08014660
  47532. 801397c: 08014660 .word 0x08014660
  47533. 8013980: 08014664 .word 0x08014664
  47534. 08013984 <__retarget_lock_init_recursive>:
  47535. 8013984: 4770 bx lr
  47536. 08013986 <__retarget_lock_acquire_recursive>:
  47537. 8013986: 4770 bx lr
  47538. 08013988 <__retarget_lock_release_recursive>:
  47539. 8013988: 4770 bx lr
  47540. 0801398a <memcpy>:
  47541. 801398a: 440a add r2, r1
  47542. 801398c: 4291 cmp r1, r2
  47543. 801398e: f100 33ff add.w r3, r0, #4294967295 @ 0xffffffff
  47544. 8013992: d100 bne.n 8013996 <memcpy+0xc>
  47545. 8013994: 4770 bx lr
  47546. 8013996: b510 push {r4, lr}
  47547. 8013998: f811 4b01 ldrb.w r4, [r1], #1
  47548. 801399c: f803 4f01 strb.w r4, [r3, #1]!
  47549. 80139a0: 4291 cmp r1, r2
  47550. 80139a2: d1f9 bne.n 8013998 <memcpy+0xe>
  47551. 80139a4: bd10 pop {r4, pc}
  47552. ...
  47553. 080139a8 <_free_r>:
  47554. 80139a8: b538 push {r3, r4, r5, lr}
  47555. 80139aa: 4605 mov r5, r0
  47556. 80139ac: 2900 cmp r1, #0
  47557. 80139ae: d041 beq.n 8013a34 <_free_r+0x8c>
  47558. 80139b0: f851 3c04 ldr.w r3, [r1, #-4]
  47559. 80139b4: 1f0c subs r4, r1, #4
  47560. 80139b6: 2b00 cmp r3, #0
  47561. 80139b8: bfb8 it lt
  47562. 80139ba: 18e4 addlt r4, r4, r3
  47563. 80139bc: f000 f8e0 bl 8013b80 <__malloc_lock>
  47564. 80139c0: 4a1d ldr r2, [pc, #116] @ (8013a38 <_free_r+0x90>)
  47565. 80139c2: 6813 ldr r3, [r2, #0]
  47566. 80139c4: b933 cbnz r3, 80139d4 <_free_r+0x2c>
  47567. 80139c6: 6063 str r3, [r4, #4]
  47568. 80139c8: 6014 str r4, [r2, #0]
  47569. 80139ca: 4628 mov r0, r5
  47570. 80139cc: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr}
  47571. 80139d0: f000 b8dc b.w 8013b8c <__malloc_unlock>
  47572. 80139d4: 42a3 cmp r3, r4
  47573. 80139d6: d908 bls.n 80139ea <_free_r+0x42>
  47574. 80139d8: 6820 ldr r0, [r4, #0]
  47575. 80139da: 1821 adds r1, r4, r0
  47576. 80139dc: 428b cmp r3, r1
  47577. 80139de: bf01 itttt eq
  47578. 80139e0: 6819 ldreq r1, [r3, #0]
  47579. 80139e2: 685b ldreq r3, [r3, #4]
  47580. 80139e4: 1809 addeq r1, r1, r0
  47581. 80139e6: 6021 streq r1, [r4, #0]
  47582. 80139e8: e7ed b.n 80139c6 <_free_r+0x1e>
  47583. 80139ea: 461a mov r2, r3
  47584. 80139ec: 685b ldr r3, [r3, #4]
  47585. 80139ee: b10b cbz r3, 80139f4 <_free_r+0x4c>
  47586. 80139f0: 42a3 cmp r3, r4
  47587. 80139f2: d9fa bls.n 80139ea <_free_r+0x42>
  47588. 80139f4: 6811 ldr r1, [r2, #0]
  47589. 80139f6: 1850 adds r0, r2, r1
  47590. 80139f8: 42a0 cmp r0, r4
  47591. 80139fa: d10b bne.n 8013a14 <_free_r+0x6c>
  47592. 80139fc: 6820 ldr r0, [r4, #0]
  47593. 80139fe: 4401 add r1, r0
  47594. 8013a00: 1850 adds r0, r2, r1
  47595. 8013a02: 4283 cmp r3, r0
  47596. 8013a04: 6011 str r1, [r2, #0]
  47597. 8013a06: d1e0 bne.n 80139ca <_free_r+0x22>
  47598. 8013a08: 6818 ldr r0, [r3, #0]
  47599. 8013a0a: 685b ldr r3, [r3, #4]
  47600. 8013a0c: 6053 str r3, [r2, #4]
  47601. 8013a0e: 4408 add r0, r1
  47602. 8013a10: 6010 str r0, [r2, #0]
  47603. 8013a12: e7da b.n 80139ca <_free_r+0x22>
  47604. 8013a14: d902 bls.n 8013a1c <_free_r+0x74>
  47605. 8013a16: 230c movs r3, #12
  47606. 8013a18: 602b str r3, [r5, #0]
  47607. 8013a1a: e7d6 b.n 80139ca <_free_r+0x22>
  47608. 8013a1c: 6820 ldr r0, [r4, #0]
  47609. 8013a1e: 1821 adds r1, r4, r0
  47610. 8013a20: 428b cmp r3, r1
  47611. 8013a22: bf04 itt eq
  47612. 8013a24: 6819 ldreq r1, [r3, #0]
  47613. 8013a26: 685b ldreq r3, [r3, #4]
  47614. 8013a28: 6063 str r3, [r4, #4]
  47615. 8013a2a: bf04 itt eq
  47616. 8013a2c: 1809 addeq r1, r1, r0
  47617. 8013a2e: 6021 streq r1, [r4, #0]
  47618. 8013a30: 6054 str r4, [r2, #4]
  47619. 8013a32: e7ca b.n 80139ca <_free_r+0x22>
  47620. 8013a34: bd38 pop {r3, r4, r5, pc}
  47621. 8013a36: bf00 nop
  47622. 8013a38: 24012b90 .word 0x24012b90
  47623. 08013a3c <sbrk_aligned>:
  47624. 8013a3c: b570 push {r4, r5, r6, lr}
  47625. 8013a3e: 4e0f ldr r6, [pc, #60] @ (8013a7c <sbrk_aligned+0x40>)
  47626. 8013a40: 460c mov r4, r1
  47627. 8013a42: 6831 ldr r1, [r6, #0]
  47628. 8013a44: 4605 mov r5, r0
  47629. 8013a46: b911 cbnz r1, 8013a4e <sbrk_aligned+0x12>
  47630. 8013a48: f000 fcb6 bl 80143b8 <_sbrk_r>
  47631. 8013a4c: 6030 str r0, [r6, #0]
  47632. 8013a4e: 4621 mov r1, r4
  47633. 8013a50: 4628 mov r0, r5
  47634. 8013a52: f000 fcb1 bl 80143b8 <_sbrk_r>
  47635. 8013a56: 1c43 adds r3, r0, #1
  47636. 8013a58: d103 bne.n 8013a62 <sbrk_aligned+0x26>
  47637. 8013a5a: f04f 34ff mov.w r4, #4294967295 @ 0xffffffff
  47638. 8013a5e: 4620 mov r0, r4
  47639. 8013a60: bd70 pop {r4, r5, r6, pc}
  47640. 8013a62: 1cc4 adds r4, r0, #3
  47641. 8013a64: f024 0403 bic.w r4, r4, #3
  47642. 8013a68: 42a0 cmp r0, r4
  47643. 8013a6a: d0f8 beq.n 8013a5e <sbrk_aligned+0x22>
  47644. 8013a6c: 1a21 subs r1, r4, r0
  47645. 8013a6e: 4628 mov r0, r5
  47646. 8013a70: f000 fca2 bl 80143b8 <_sbrk_r>
  47647. 8013a74: 3001 adds r0, #1
  47648. 8013a76: d1f2 bne.n 8013a5e <sbrk_aligned+0x22>
  47649. 8013a78: e7ef b.n 8013a5a <sbrk_aligned+0x1e>
  47650. 8013a7a: bf00 nop
  47651. 8013a7c: 24012b8c .word 0x24012b8c
  47652. 08013a80 <_malloc_r>:
  47653. 8013a80: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr}
  47654. 8013a84: 1ccd adds r5, r1, #3
  47655. 8013a86: f025 0503 bic.w r5, r5, #3
  47656. 8013a8a: 3508 adds r5, #8
  47657. 8013a8c: 2d0c cmp r5, #12
  47658. 8013a8e: bf38 it cc
  47659. 8013a90: 250c movcc r5, #12
  47660. 8013a92: 2d00 cmp r5, #0
  47661. 8013a94: 4606 mov r6, r0
  47662. 8013a96: db01 blt.n 8013a9c <_malloc_r+0x1c>
  47663. 8013a98: 42a9 cmp r1, r5
  47664. 8013a9a: d904 bls.n 8013aa6 <_malloc_r+0x26>
  47665. 8013a9c: 230c movs r3, #12
  47666. 8013a9e: 6033 str r3, [r6, #0]
  47667. 8013aa0: 2000 movs r0, #0
  47668. 8013aa2: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc}
  47669. 8013aa6: f8df 80d4 ldr.w r8, [pc, #212] @ 8013b7c <_malloc_r+0xfc>
  47670. 8013aaa: f000 f869 bl 8013b80 <__malloc_lock>
  47671. 8013aae: f8d8 3000 ldr.w r3, [r8]
  47672. 8013ab2: 461c mov r4, r3
  47673. 8013ab4: bb44 cbnz r4, 8013b08 <_malloc_r+0x88>
  47674. 8013ab6: 4629 mov r1, r5
  47675. 8013ab8: 4630 mov r0, r6
  47676. 8013aba: f7ff ffbf bl 8013a3c <sbrk_aligned>
  47677. 8013abe: 1c43 adds r3, r0, #1
  47678. 8013ac0: 4604 mov r4, r0
  47679. 8013ac2: d158 bne.n 8013b76 <_malloc_r+0xf6>
  47680. 8013ac4: f8d8 4000 ldr.w r4, [r8]
  47681. 8013ac8: 4627 mov r7, r4
  47682. 8013aca: 2f00 cmp r7, #0
  47683. 8013acc: d143 bne.n 8013b56 <_malloc_r+0xd6>
  47684. 8013ace: 2c00 cmp r4, #0
  47685. 8013ad0: d04b beq.n 8013b6a <_malloc_r+0xea>
  47686. 8013ad2: 6823 ldr r3, [r4, #0]
  47687. 8013ad4: 4639 mov r1, r7
  47688. 8013ad6: 4630 mov r0, r6
  47689. 8013ad8: eb04 0903 add.w r9, r4, r3
  47690. 8013adc: f000 fc6c bl 80143b8 <_sbrk_r>
  47691. 8013ae0: 4581 cmp r9, r0
  47692. 8013ae2: d142 bne.n 8013b6a <_malloc_r+0xea>
  47693. 8013ae4: 6821 ldr r1, [r4, #0]
  47694. 8013ae6: 1a6d subs r5, r5, r1
  47695. 8013ae8: 4629 mov r1, r5
  47696. 8013aea: 4630 mov r0, r6
  47697. 8013aec: f7ff ffa6 bl 8013a3c <sbrk_aligned>
  47698. 8013af0: 3001 adds r0, #1
  47699. 8013af2: d03a beq.n 8013b6a <_malloc_r+0xea>
  47700. 8013af4: 6823 ldr r3, [r4, #0]
  47701. 8013af6: 442b add r3, r5
  47702. 8013af8: 6023 str r3, [r4, #0]
  47703. 8013afa: f8d8 3000 ldr.w r3, [r8]
  47704. 8013afe: 685a ldr r2, [r3, #4]
  47705. 8013b00: bb62 cbnz r2, 8013b5c <_malloc_r+0xdc>
  47706. 8013b02: f8c8 7000 str.w r7, [r8]
  47707. 8013b06: e00f b.n 8013b28 <_malloc_r+0xa8>
  47708. 8013b08: 6822 ldr r2, [r4, #0]
  47709. 8013b0a: 1b52 subs r2, r2, r5
  47710. 8013b0c: d420 bmi.n 8013b50 <_malloc_r+0xd0>
  47711. 8013b0e: 2a0b cmp r2, #11
  47712. 8013b10: d917 bls.n 8013b42 <_malloc_r+0xc2>
  47713. 8013b12: 1961 adds r1, r4, r5
  47714. 8013b14: 42a3 cmp r3, r4
  47715. 8013b16: 6025 str r5, [r4, #0]
  47716. 8013b18: bf18 it ne
  47717. 8013b1a: 6059 strne r1, [r3, #4]
  47718. 8013b1c: 6863 ldr r3, [r4, #4]
  47719. 8013b1e: bf08 it eq
  47720. 8013b20: f8c8 1000 streq.w r1, [r8]
  47721. 8013b24: 5162 str r2, [r4, r5]
  47722. 8013b26: 604b str r3, [r1, #4]
  47723. 8013b28: 4630 mov r0, r6
  47724. 8013b2a: f000 f82f bl 8013b8c <__malloc_unlock>
  47725. 8013b2e: f104 000b add.w r0, r4, #11
  47726. 8013b32: 1d23 adds r3, r4, #4
  47727. 8013b34: f020 0007 bic.w r0, r0, #7
  47728. 8013b38: 1ac2 subs r2, r0, r3
  47729. 8013b3a: bf1c itt ne
  47730. 8013b3c: 1a1b subne r3, r3, r0
  47731. 8013b3e: 50a3 strne r3, [r4, r2]
  47732. 8013b40: e7af b.n 8013aa2 <_malloc_r+0x22>
  47733. 8013b42: 6862 ldr r2, [r4, #4]
  47734. 8013b44: 42a3 cmp r3, r4
  47735. 8013b46: bf0c ite eq
  47736. 8013b48: f8c8 2000 streq.w r2, [r8]
  47737. 8013b4c: 605a strne r2, [r3, #4]
  47738. 8013b4e: e7eb b.n 8013b28 <_malloc_r+0xa8>
  47739. 8013b50: 4623 mov r3, r4
  47740. 8013b52: 6864 ldr r4, [r4, #4]
  47741. 8013b54: e7ae b.n 8013ab4 <_malloc_r+0x34>
  47742. 8013b56: 463c mov r4, r7
  47743. 8013b58: 687f ldr r7, [r7, #4]
  47744. 8013b5a: e7b6 b.n 8013aca <_malloc_r+0x4a>
  47745. 8013b5c: 461a mov r2, r3
  47746. 8013b5e: 685b ldr r3, [r3, #4]
  47747. 8013b60: 42a3 cmp r3, r4
  47748. 8013b62: d1fb bne.n 8013b5c <_malloc_r+0xdc>
  47749. 8013b64: 2300 movs r3, #0
  47750. 8013b66: 6053 str r3, [r2, #4]
  47751. 8013b68: e7de b.n 8013b28 <_malloc_r+0xa8>
  47752. 8013b6a: 230c movs r3, #12
  47753. 8013b6c: 6033 str r3, [r6, #0]
  47754. 8013b6e: 4630 mov r0, r6
  47755. 8013b70: f000 f80c bl 8013b8c <__malloc_unlock>
  47756. 8013b74: e794 b.n 8013aa0 <_malloc_r+0x20>
  47757. 8013b76: 6005 str r5, [r0, #0]
  47758. 8013b78: e7d6 b.n 8013b28 <_malloc_r+0xa8>
  47759. 8013b7a: bf00 nop
  47760. 8013b7c: 24012b90 .word 0x24012b90
  47761. 08013b80 <__malloc_lock>:
  47762. 8013b80: 4801 ldr r0, [pc, #4] @ (8013b88 <__malloc_lock+0x8>)
  47763. 8013b82: f7ff bf00 b.w 8013986 <__retarget_lock_acquire_recursive>
  47764. 8013b86: bf00 nop
  47765. 8013b88: 24012b88 .word 0x24012b88
  47766. 08013b8c <__malloc_unlock>:
  47767. 8013b8c: 4801 ldr r0, [pc, #4] @ (8013b94 <__malloc_unlock+0x8>)
  47768. 8013b8e: f7ff befb b.w 8013988 <__retarget_lock_release_recursive>
  47769. 8013b92: bf00 nop
  47770. 8013b94: 24012b88 .word 0x24012b88
  47771. 08013b98 <__sfputc_r>:
  47772. 8013b98: 6893 ldr r3, [r2, #8]
  47773. 8013b9a: 3b01 subs r3, #1
  47774. 8013b9c: 2b00 cmp r3, #0
  47775. 8013b9e: b410 push {r4}
  47776. 8013ba0: 6093 str r3, [r2, #8]
  47777. 8013ba2: da08 bge.n 8013bb6 <__sfputc_r+0x1e>
  47778. 8013ba4: 6994 ldr r4, [r2, #24]
  47779. 8013ba6: 42a3 cmp r3, r4
  47780. 8013ba8: db01 blt.n 8013bae <__sfputc_r+0x16>
  47781. 8013baa: 290a cmp r1, #10
  47782. 8013bac: d103 bne.n 8013bb6 <__sfputc_r+0x1e>
  47783. 8013bae: f85d 4b04 ldr.w r4, [sp], #4
  47784. 8013bb2: f000 bb6d b.w 8014290 <__swbuf_r>
  47785. 8013bb6: 6813 ldr r3, [r2, #0]
  47786. 8013bb8: 1c58 adds r0, r3, #1
  47787. 8013bba: 6010 str r0, [r2, #0]
  47788. 8013bbc: 7019 strb r1, [r3, #0]
  47789. 8013bbe: 4608 mov r0, r1
  47790. 8013bc0: f85d 4b04 ldr.w r4, [sp], #4
  47791. 8013bc4: 4770 bx lr
  47792. 08013bc6 <__sfputs_r>:
  47793. 8013bc6: b5f8 push {r3, r4, r5, r6, r7, lr}
  47794. 8013bc8: 4606 mov r6, r0
  47795. 8013bca: 460f mov r7, r1
  47796. 8013bcc: 4614 mov r4, r2
  47797. 8013bce: 18d5 adds r5, r2, r3
  47798. 8013bd0: 42ac cmp r4, r5
  47799. 8013bd2: d101 bne.n 8013bd8 <__sfputs_r+0x12>
  47800. 8013bd4: 2000 movs r0, #0
  47801. 8013bd6: e007 b.n 8013be8 <__sfputs_r+0x22>
  47802. 8013bd8: f814 1b01 ldrb.w r1, [r4], #1
  47803. 8013bdc: 463a mov r2, r7
  47804. 8013bde: 4630 mov r0, r6
  47805. 8013be0: f7ff ffda bl 8013b98 <__sfputc_r>
  47806. 8013be4: 1c43 adds r3, r0, #1
  47807. 8013be6: d1f3 bne.n 8013bd0 <__sfputs_r+0xa>
  47808. 8013be8: bdf8 pop {r3, r4, r5, r6, r7, pc}
  47809. ...
  47810. 08013bec <_vfiprintf_r>:
  47811. 8013bec: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
  47812. 8013bf0: 460d mov r5, r1
  47813. 8013bf2: b09d sub sp, #116 @ 0x74
  47814. 8013bf4: 4614 mov r4, r2
  47815. 8013bf6: 4698 mov r8, r3
  47816. 8013bf8: 4606 mov r6, r0
  47817. 8013bfa: b118 cbz r0, 8013c04 <_vfiprintf_r+0x18>
  47818. 8013bfc: 6a03 ldr r3, [r0, #32]
  47819. 8013bfe: b90b cbnz r3, 8013c04 <_vfiprintf_r+0x18>
  47820. 8013c00: f7ff fd66 bl 80136d0 <__sinit>
  47821. 8013c04: 6e6b ldr r3, [r5, #100] @ 0x64
  47822. 8013c06: 07d9 lsls r1, r3, #31
  47823. 8013c08: d405 bmi.n 8013c16 <_vfiprintf_r+0x2a>
  47824. 8013c0a: 89ab ldrh r3, [r5, #12]
  47825. 8013c0c: 059a lsls r2, r3, #22
  47826. 8013c0e: d402 bmi.n 8013c16 <_vfiprintf_r+0x2a>
  47827. 8013c10: 6da8 ldr r0, [r5, #88] @ 0x58
  47828. 8013c12: f7ff feb8 bl 8013986 <__retarget_lock_acquire_recursive>
  47829. 8013c16: 89ab ldrh r3, [r5, #12]
  47830. 8013c18: 071b lsls r3, r3, #28
  47831. 8013c1a: d501 bpl.n 8013c20 <_vfiprintf_r+0x34>
  47832. 8013c1c: 692b ldr r3, [r5, #16]
  47833. 8013c1e: b99b cbnz r3, 8013c48 <_vfiprintf_r+0x5c>
  47834. 8013c20: 4629 mov r1, r5
  47835. 8013c22: 4630 mov r0, r6
  47836. 8013c24: f000 fb72 bl 801430c <__swsetup_r>
  47837. 8013c28: b170 cbz r0, 8013c48 <_vfiprintf_r+0x5c>
  47838. 8013c2a: 6e6b ldr r3, [r5, #100] @ 0x64
  47839. 8013c2c: 07dc lsls r4, r3, #31
  47840. 8013c2e: d504 bpl.n 8013c3a <_vfiprintf_r+0x4e>
  47841. 8013c30: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff
  47842. 8013c34: b01d add sp, #116 @ 0x74
  47843. 8013c36: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc}
  47844. 8013c3a: 89ab ldrh r3, [r5, #12]
  47845. 8013c3c: 0598 lsls r0, r3, #22
  47846. 8013c3e: d4f7 bmi.n 8013c30 <_vfiprintf_r+0x44>
  47847. 8013c40: 6da8 ldr r0, [r5, #88] @ 0x58
  47848. 8013c42: f7ff fea1 bl 8013988 <__retarget_lock_release_recursive>
  47849. 8013c46: e7f3 b.n 8013c30 <_vfiprintf_r+0x44>
  47850. 8013c48: 2300 movs r3, #0
  47851. 8013c4a: 9309 str r3, [sp, #36] @ 0x24
  47852. 8013c4c: 2320 movs r3, #32
  47853. 8013c4e: f88d 3029 strb.w r3, [sp, #41] @ 0x29
  47854. 8013c52: f8cd 800c str.w r8, [sp, #12]
  47855. 8013c56: 2330 movs r3, #48 @ 0x30
  47856. 8013c58: f8df 81ac ldr.w r8, [pc, #428] @ 8013e08 <_vfiprintf_r+0x21c>
  47857. 8013c5c: f88d 302a strb.w r3, [sp, #42] @ 0x2a
  47858. 8013c60: f04f 0901 mov.w r9, #1
  47859. 8013c64: 4623 mov r3, r4
  47860. 8013c66: 469a mov sl, r3
  47861. 8013c68: f813 2b01 ldrb.w r2, [r3], #1
  47862. 8013c6c: b10a cbz r2, 8013c72 <_vfiprintf_r+0x86>
  47863. 8013c6e: 2a25 cmp r2, #37 @ 0x25
  47864. 8013c70: d1f9 bne.n 8013c66 <_vfiprintf_r+0x7a>
  47865. 8013c72: ebba 0b04 subs.w fp, sl, r4
  47866. 8013c76: d00b beq.n 8013c90 <_vfiprintf_r+0xa4>
  47867. 8013c78: 465b mov r3, fp
  47868. 8013c7a: 4622 mov r2, r4
  47869. 8013c7c: 4629 mov r1, r5
  47870. 8013c7e: 4630 mov r0, r6
  47871. 8013c80: f7ff ffa1 bl 8013bc6 <__sfputs_r>
  47872. 8013c84: 3001 adds r0, #1
  47873. 8013c86: f000 80a7 beq.w 8013dd8 <_vfiprintf_r+0x1ec>
  47874. 8013c8a: 9a09 ldr r2, [sp, #36] @ 0x24
  47875. 8013c8c: 445a add r2, fp
  47876. 8013c8e: 9209 str r2, [sp, #36] @ 0x24
  47877. 8013c90: f89a 3000 ldrb.w r3, [sl]
  47878. 8013c94: 2b00 cmp r3, #0
  47879. 8013c96: f000 809f beq.w 8013dd8 <_vfiprintf_r+0x1ec>
  47880. 8013c9a: 2300 movs r3, #0
  47881. 8013c9c: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
  47882. 8013ca0: e9cd 2305 strd r2, r3, [sp, #20]
  47883. 8013ca4: f10a 0a01 add.w sl, sl, #1
  47884. 8013ca8: 9304 str r3, [sp, #16]
  47885. 8013caa: 9307 str r3, [sp, #28]
  47886. 8013cac: f88d 3053 strb.w r3, [sp, #83] @ 0x53
  47887. 8013cb0: 931a str r3, [sp, #104] @ 0x68
  47888. 8013cb2: 4654 mov r4, sl
  47889. 8013cb4: 2205 movs r2, #5
  47890. 8013cb6: f814 1b01 ldrb.w r1, [r4], #1
  47891. 8013cba: 4853 ldr r0, [pc, #332] @ (8013e08 <_vfiprintf_r+0x21c>)
  47892. 8013cbc: f7ec fb10 bl 80002e0 <memchr>
  47893. 8013cc0: 9a04 ldr r2, [sp, #16]
  47894. 8013cc2: b9d8 cbnz r0, 8013cfc <_vfiprintf_r+0x110>
  47895. 8013cc4: 06d1 lsls r1, r2, #27
  47896. 8013cc6: bf44 itt mi
  47897. 8013cc8: 2320 movmi r3, #32
  47898. 8013cca: f88d 3053 strbmi.w r3, [sp, #83] @ 0x53
  47899. 8013cce: 0713 lsls r3, r2, #28
  47900. 8013cd0: bf44 itt mi
  47901. 8013cd2: 232b movmi r3, #43 @ 0x2b
  47902. 8013cd4: f88d 3053 strbmi.w r3, [sp, #83] @ 0x53
  47903. 8013cd8: f89a 3000 ldrb.w r3, [sl]
  47904. 8013cdc: 2b2a cmp r3, #42 @ 0x2a
  47905. 8013cde: d015 beq.n 8013d0c <_vfiprintf_r+0x120>
  47906. 8013ce0: 9a07 ldr r2, [sp, #28]
  47907. 8013ce2: 4654 mov r4, sl
  47908. 8013ce4: 2000 movs r0, #0
  47909. 8013ce6: f04f 0c0a mov.w ip, #10
  47910. 8013cea: 4621 mov r1, r4
  47911. 8013cec: f811 3b01 ldrb.w r3, [r1], #1
  47912. 8013cf0: 3b30 subs r3, #48 @ 0x30
  47913. 8013cf2: 2b09 cmp r3, #9
  47914. 8013cf4: d94b bls.n 8013d8e <_vfiprintf_r+0x1a2>
  47915. 8013cf6: b1b0 cbz r0, 8013d26 <_vfiprintf_r+0x13a>
  47916. 8013cf8: 9207 str r2, [sp, #28]
  47917. 8013cfa: e014 b.n 8013d26 <_vfiprintf_r+0x13a>
  47918. 8013cfc: eba0 0308 sub.w r3, r0, r8
  47919. 8013d00: fa09 f303 lsl.w r3, r9, r3
  47920. 8013d04: 4313 orrs r3, r2
  47921. 8013d06: 9304 str r3, [sp, #16]
  47922. 8013d08: 46a2 mov sl, r4
  47923. 8013d0a: e7d2 b.n 8013cb2 <_vfiprintf_r+0xc6>
  47924. 8013d0c: 9b03 ldr r3, [sp, #12]
  47925. 8013d0e: 1d19 adds r1, r3, #4
  47926. 8013d10: 681b ldr r3, [r3, #0]
  47927. 8013d12: 9103 str r1, [sp, #12]
  47928. 8013d14: 2b00 cmp r3, #0
  47929. 8013d16: bfbb ittet lt
  47930. 8013d18: 425b neglt r3, r3
  47931. 8013d1a: f042 0202 orrlt.w r2, r2, #2
  47932. 8013d1e: 9307 strge r3, [sp, #28]
  47933. 8013d20: 9307 strlt r3, [sp, #28]
  47934. 8013d22: bfb8 it lt
  47935. 8013d24: 9204 strlt r2, [sp, #16]
  47936. 8013d26: 7823 ldrb r3, [r4, #0]
  47937. 8013d28: 2b2e cmp r3, #46 @ 0x2e
  47938. 8013d2a: d10a bne.n 8013d42 <_vfiprintf_r+0x156>
  47939. 8013d2c: 7863 ldrb r3, [r4, #1]
  47940. 8013d2e: 2b2a cmp r3, #42 @ 0x2a
  47941. 8013d30: d132 bne.n 8013d98 <_vfiprintf_r+0x1ac>
  47942. 8013d32: 9b03 ldr r3, [sp, #12]
  47943. 8013d34: 1d1a adds r2, r3, #4
  47944. 8013d36: 681b ldr r3, [r3, #0]
  47945. 8013d38: 9203 str r2, [sp, #12]
  47946. 8013d3a: ea43 73e3 orr.w r3, r3, r3, asr #31
  47947. 8013d3e: 3402 adds r4, #2
  47948. 8013d40: 9305 str r3, [sp, #20]
  47949. 8013d42: f8df a0d4 ldr.w sl, [pc, #212] @ 8013e18 <_vfiprintf_r+0x22c>
  47950. 8013d46: 7821 ldrb r1, [r4, #0]
  47951. 8013d48: 2203 movs r2, #3
  47952. 8013d4a: 4650 mov r0, sl
  47953. 8013d4c: f7ec fac8 bl 80002e0 <memchr>
  47954. 8013d50: b138 cbz r0, 8013d62 <_vfiprintf_r+0x176>
  47955. 8013d52: 9b04 ldr r3, [sp, #16]
  47956. 8013d54: eba0 000a sub.w r0, r0, sl
  47957. 8013d58: 2240 movs r2, #64 @ 0x40
  47958. 8013d5a: 4082 lsls r2, r0
  47959. 8013d5c: 4313 orrs r3, r2
  47960. 8013d5e: 3401 adds r4, #1
  47961. 8013d60: 9304 str r3, [sp, #16]
  47962. 8013d62: f814 1b01 ldrb.w r1, [r4], #1
  47963. 8013d66: 4829 ldr r0, [pc, #164] @ (8013e0c <_vfiprintf_r+0x220>)
  47964. 8013d68: f88d 1028 strb.w r1, [sp, #40] @ 0x28
  47965. 8013d6c: 2206 movs r2, #6
  47966. 8013d6e: f7ec fab7 bl 80002e0 <memchr>
  47967. 8013d72: 2800 cmp r0, #0
  47968. 8013d74: d03f beq.n 8013df6 <_vfiprintf_r+0x20a>
  47969. 8013d76: 4b26 ldr r3, [pc, #152] @ (8013e10 <_vfiprintf_r+0x224>)
  47970. 8013d78: bb1b cbnz r3, 8013dc2 <_vfiprintf_r+0x1d6>
  47971. 8013d7a: 9b03 ldr r3, [sp, #12]
  47972. 8013d7c: 3307 adds r3, #7
  47973. 8013d7e: f023 0307 bic.w r3, r3, #7
  47974. 8013d82: 3308 adds r3, #8
  47975. 8013d84: 9303 str r3, [sp, #12]
  47976. 8013d86: 9b09 ldr r3, [sp, #36] @ 0x24
  47977. 8013d88: 443b add r3, r7
  47978. 8013d8a: 9309 str r3, [sp, #36] @ 0x24
  47979. 8013d8c: e76a b.n 8013c64 <_vfiprintf_r+0x78>
  47980. 8013d8e: fb0c 3202 mla r2, ip, r2, r3
  47981. 8013d92: 460c mov r4, r1
  47982. 8013d94: 2001 movs r0, #1
  47983. 8013d96: e7a8 b.n 8013cea <_vfiprintf_r+0xfe>
  47984. 8013d98: 2300 movs r3, #0
  47985. 8013d9a: 3401 adds r4, #1
  47986. 8013d9c: 9305 str r3, [sp, #20]
  47987. 8013d9e: 4619 mov r1, r3
  47988. 8013da0: f04f 0c0a mov.w ip, #10
  47989. 8013da4: 4620 mov r0, r4
  47990. 8013da6: f810 2b01 ldrb.w r2, [r0], #1
  47991. 8013daa: 3a30 subs r2, #48 @ 0x30
  47992. 8013dac: 2a09 cmp r2, #9
  47993. 8013dae: d903 bls.n 8013db8 <_vfiprintf_r+0x1cc>
  47994. 8013db0: 2b00 cmp r3, #0
  47995. 8013db2: d0c6 beq.n 8013d42 <_vfiprintf_r+0x156>
  47996. 8013db4: 9105 str r1, [sp, #20]
  47997. 8013db6: e7c4 b.n 8013d42 <_vfiprintf_r+0x156>
  47998. 8013db8: fb0c 2101 mla r1, ip, r1, r2
  47999. 8013dbc: 4604 mov r4, r0
  48000. 8013dbe: 2301 movs r3, #1
  48001. 8013dc0: e7f0 b.n 8013da4 <_vfiprintf_r+0x1b8>
  48002. 8013dc2: ab03 add r3, sp, #12
  48003. 8013dc4: 9300 str r3, [sp, #0]
  48004. 8013dc6: 462a mov r2, r5
  48005. 8013dc8: 4b12 ldr r3, [pc, #72] @ (8013e14 <_vfiprintf_r+0x228>)
  48006. 8013dca: a904 add r1, sp, #16
  48007. 8013dcc: 4630 mov r0, r6
  48008. 8013dce: f3af 8000 nop.w
  48009. 8013dd2: 4607 mov r7, r0
  48010. 8013dd4: 1c78 adds r0, r7, #1
  48011. 8013dd6: d1d6 bne.n 8013d86 <_vfiprintf_r+0x19a>
  48012. 8013dd8: 6e6b ldr r3, [r5, #100] @ 0x64
  48013. 8013dda: 07d9 lsls r1, r3, #31
  48014. 8013ddc: d405 bmi.n 8013dea <_vfiprintf_r+0x1fe>
  48015. 8013dde: 89ab ldrh r3, [r5, #12]
  48016. 8013de0: 059a lsls r2, r3, #22
  48017. 8013de2: d402 bmi.n 8013dea <_vfiprintf_r+0x1fe>
  48018. 8013de4: 6da8 ldr r0, [r5, #88] @ 0x58
  48019. 8013de6: f7ff fdcf bl 8013988 <__retarget_lock_release_recursive>
  48020. 8013dea: 89ab ldrh r3, [r5, #12]
  48021. 8013dec: 065b lsls r3, r3, #25
  48022. 8013dee: f53f af1f bmi.w 8013c30 <_vfiprintf_r+0x44>
  48023. 8013df2: 9809 ldr r0, [sp, #36] @ 0x24
  48024. 8013df4: e71e b.n 8013c34 <_vfiprintf_r+0x48>
  48025. 8013df6: ab03 add r3, sp, #12
  48026. 8013df8: 9300 str r3, [sp, #0]
  48027. 8013dfa: 462a mov r2, r5
  48028. 8013dfc: 4b05 ldr r3, [pc, #20] @ (8013e14 <_vfiprintf_r+0x228>)
  48029. 8013dfe: a904 add r1, sp, #16
  48030. 8013e00: 4630 mov r0, r6
  48031. 8013e02: f000 f879 bl 8013ef8 <_printf_i>
  48032. 8013e06: e7e4 b.n 8013dd2 <_vfiprintf_r+0x1e6>
  48033. 8013e08: 08014624 .word 0x08014624
  48034. 8013e0c: 0801462e .word 0x0801462e
  48035. 8013e10: 00000000 .word 0x00000000
  48036. 8013e14: 08013bc7 .word 0x08013bc7
  48037. 8013e18: 0801462a .word 0x0801462a
  48038. 08013e1c <_printf_common>:
  48039. 8013e1c: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
  48040. 8013e20: 4616 mov r6, r2
  48041. 8013e22: 4698 mov r8, r3
  48042. 8013e24: 688a ldr r2, [r1, #8]
  48043. 8013e26: 690b ldr r3, [r1, #16]
  48044. 8013e28: f8dd 9020 ldr.w r9, [sp, #32]
  48045. 8013e2c: 4293 cmp r3, r2
  48046. 8013e2e: bfb8 it lt
  48047. 8013e30: 4613 movlt r3, r2
  48048. 8013e32: 6033 str r3, [r6, #0]
  48049. 8013e34: f891 2043 ldrb.w r2, [r1, #67] @ 0x43
  48050. 8013e38: 4607 mov r7, r0
  48051. 8013e3a: 460c mov r4, r1
  48052. 8013e3c: b10a cbz r2, 8013e42 <_printf_common+0x26>
  48053. 8013e3e: 3301 adds r3, #1
  48054. 8013e40: 6033 str r3, [r6, #0]
  48055. 8013e42: 6823 ldr r3, [r4, #0]
  48056. 8013e44: 0699 lsls r1, r3, #26
  48057. 8013e46: bf42 ittt mi
  48058. 8013e48: 6833 ldrmi r3, [r6, #0]
  48059. 8013e4a: 3302 addmi r3, #2
  48060. 8013e4c: 6033 strmi r3, [r6, #0]
  48061. 8013e4e: 6825 ldr r5, [r4, #0]
  48062. 8013e50: f015 0506 ands.w r5, r5, #6
  48063. 8013e54: d106 bne.n 8013e64 <_printf_common+0x48>
  48064. 8013e56: f104 0a19 add.w sl, r4, #25
  48065. 8013e5a: 68e3 ldr r3, [r4, #12]
  48066. 8013e5c: 6832 ldr r2, [r6, #0]
  48067. 8013e5e: 1a9b subs r3, r3, r2
  48068. 8013e60: 42ab cmp r3, r5
  48069. 8013e62: dc26 bgt.n 8013eb2 <_printf_common+0x96>
  48070. 8013e64: f894 3043 ldrb.w r3, [r4, #67] @ 0x43
  48071. 8013e68: 6822 ldr r2, [r4, #0]
  48072. 8013e6a: 3b00 subs r3, #0
  48073. 8013e6c: bf18 it ne
  48074. 8013e6e: 2301 movne r3, #1
  48075. 8013e70: 0692 lsls r2, r2, #26
  48076. 8013e72: d42b bmi.n 8013ecc <_printf_common+0xb0>
  48077. 8013e74: f104 0243 add.w r2, r4, #67 @ 0x43
  48078. 8013e78: 4641 mov r1, r8
  48079. 8013e7a: 4638 mov r0, r7
  48080. 8013e7c: 47c8 blx r9
  48081. 8013e7e: 3001 adds r0, #1
  48082. 8013e80: d01e beq.n 8013ec0 <_printf_common+0xa4>
  48083. 8013e82: 6823 ldr r3, [r4, #0]
  48084. 8013e84: 6922 ldr r2, [r4, #16]
  48085. 8013e86: f003 0306 and.w r3, r3, #6
  48086. 8013e8a: 2b04 cmp r3, #4
  48087. 8013e8c: bf02 ittt eq
  48088. 8013e8e: 68e5 ldreq r5, [r4, #12]
  48089. 8013e90: 6833 ldreq r3, [r6, #0]
  48090. 8013e92: 1aed subeq r5, r5, r3
  48091. 8013e94: 68a3 ldr r3, [r4, #8]
  48092. 8013e96: bf0c ite eq
  48093. 8013e98: ea25 75e5 biceq.w r5, r5, r5, asr #31
  48094. 8013e9c: 2500 movne r5, #0
  48095. 8013e9e: 4293 cmp r3, r2
  48096. 8013ea0: bfc4 itt gt
  48097. 8013ea2: 1a9b subgt r3, r3, r2
  48098. 8013ea4: 18ed addgt r5, r5, r3
  48099. 8013ea6: 2600 movs r6, #0
  48100. 8013ea8: 341a adds r4, #26
  48101. 8013eaa: 42b5 cmp r5, r6
  48102. 8013eac: d11a bne.n 8013ee4 <_printf_common+0xc8>
  48103. 8013eae: 2000 movs r0, #0
  48104. 8013eb0: e008 b.n 8013ec4 <_printf_common+0xa8>
  48105. 8013eb2: 2301 movs r3, #1
  48106. 8013eb4: 4652 mov r2, sl
  48107. 8013eb6: 4641 mov r1, r8
  48108. 8013eb8: 4638 mov r0, r7
  48109. 8013eba: 47c8 blx r9
  48110. 8013ebc: 3001 adds r0, #1
  48111. 8013ebe: d103 bne.n 8013ec8 <_printf_common+0xac>
  48112. 8013ec0: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff
  48113. 8013ec4: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
  48114. 8013ec8: 3501 adds r5, #1
  48115. 8013eca: e7c6 b.n 8013e5a <_printf_common+0x3e>
  48116. 8013ecc: 18e1 adds r1, r4, r3
  48117. 8013ece: 1c5a adds r2, r3, #1
  48118. 8013ed0: 2030 movs r0, #48 @ 0x30
  48119. 8013ed2: f881 0043 strb.w r0, [r1, #67] @ 0x43
  48120. 8013ed6: 4422 add r2, r4
  48121. 8013ed8: f894 1045 ldrb.w r1, [r4, #69] @ 0x45
  48122. 8013edc: f882 1043 strb.w r1, [r2, #67] @ 0x43
  48123. 8013ee0: 3302 adds r3, #2
  48124. 8013ee2: e7c7 b.n 8013e74 <_printf_common+0x58>
  48125. 8013ee4: 2301 movs r3, #1
  48126. 8013ee6: 4622 mov r2, r4
  48127. 8013ee8: 4641 mov r1, r8
  48128. 8013eea: 4638 mov r0, r7
  48129. 8013eec: 47c8 blx r9
  48130. 8013eee: 3001 adds r0, #1
  48131. 8013ef0: d0e6 beq.n 8013ec0 <_printf_common+0xa4>
  48132. 8013ef2: 3601 adds r6, #1
  48133. 8013ef4: e7d9 b.n 8013eaa <_printf_common+0x8e>
  48134. ...
  48135. 08013ef8 <_printf_i>:
  48136. 8013ef8: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr}
  48137. 8013efc: 7e0f ldrb r7, [r1, #24]
  48138. 8013efe: 9e0c ldr r6, [sp, #48] @ 0x30
  48139. 8013f00: 2f78 cmp r7, #120 @ 0x78
  48140. 8013f02: 4691 mov r9, r2
  48141. 8013f04: 4680 mov r8, r0
  48142. 8013f06: 460c mov r4, r1
  48143. 8013f08: 469a mov sl, r3
  48144. 8013f0a: f101 0243 add.w r2, r1, #67 @ 0x43
  48145. 8013f0e: d807 bhi.n 8013f20 <_printf_i+0x28>
  48146. 8013f10: 2f62 cmp r7, #98 @ 0x62
  48147. 8013f12: d80a bhi.n 8013f2a <_printf_i+0x32>
  48148. 8013f14: 2f00 cmp r7, #0
  48149. 8013f16: f000 80d2 beq.w 80140be <_printf_i+0x1c6>
  48150. 8013f1a: 2f58 cmp r7, #88 @ 0x58
  48151. 8013f1c: f000 80b9 beq.w 8014092 <_printf_i+0x19a>
  48152. 8013f20: f104 0642 add.w r6, r4, #66 @ 0x42
  48153. 8013f24: f884 7042 strb.w r7, [r4, #66] @ 0x42
  48154. 8013f28: e03a b.n 8013fa0 <_printf_i+0xa8>
  48155. 8013f2a: f1a7 0363 sub.w r3, r7, #99 @ 0x63
  48156. 8013f2e: 2b15 cmp r3, #21
  48157. 8013f30: d8f6 bhi.n 8013f20 <_printf_i+0x28>
  48158. 8013f32: a101 add r1, pc, #4 @ (adr r1, 8013f38 <_printf_i+0x40>)
  48159. 8013f34: f851 f023 ldr.w pc, [r1, r3, lsl #2]
  48160. 8013f38: 08013f91 .word 0x08013f91
  48161. 8013f3c: 08013fa5 .word 0x08013fa5
  48162. 8013f40: 08013f21 .word 0x08013f21
  48163. 8013f44: 08013f21 .word 0x08013f21
  48164. 8013f48: 08013f21 .word 0x08013f21
  48165. 8013f4c: 08013f21 .word 0x08013f21
  48166. 8013f50: 08013fa5 .word 0x08013fa5
  48167. 8013f54: 08013f21 .word 0x08013f21
  48168. 8013f58: 08013f21 .word 0x08013f21
  48169. 8013f5c: 08013f21 .word 0x08013f21
  48170. 8013f60: 08013f21 .word 0x08013f21
  48171. 8013f64: 080140a5 .word 0x080140a5
  48172. 8013f68: 08013fcf .word 0x08013fcf
  48173. 8013f6c: 0801405f .word 0x0801405f
  48174. 8013f70: 08013f21 .word 0x08013f21
  48175. 8013f74: 08013f21 .word 0x08013f21
  48176. 8013f78: 080140c7 .word 0x080140c7
  48177. 8013f7c: 08013f21 .word 0x08013f21
  48178. 8013f80: 08013fcf .word 0x08013fcf
  48179. 8013f84: 08013f21 .word 0x08013f21
  48180. 8013f88: 08013f21 .word 0x08013f21
  48181. 8013f8c: 08014067 .word 0x08014067
  48182. 8013f90: 6833 ldr r3, [r6, #0]
  48183. 8013f92: 1d1a adds r2, r3, #4
  48184. 8013f94: 681b ldr r3, [r3, #0]
  48185. 8013f96: 6032 str r2, [r6, #0]
  48186. 8013f98: f104 0642 add.w r6, r4, #66 @ 0x42
  48187. 8013f9c: f884 3042 strb.w r3, [r4, #66] @ 0x42
  48188. 8013fa0: 2301 movs r3, #1
  48189. 8013fa2: e09d b.n 80140e0 <_printf_i+0x1e8>
  48190. 8013fa4: 6833 ldr r3, [r6, #0]
  48191. 8013fa6: 6820 ldr r0, [r4, #0]
  48192. 8013fa8: 1d19 adds r1, r3, #4
  48193. 8013faa: 6031 str r1, [r6, #0]
  48194. 8013fac: 0606 lsls r6, r0, #24
  48195. 8013fae: d501 bpl.n 8013fb4 <_printf_i+0xbc>
  48196. 8013fb0: 681d ldr r5, [r3, #0]
  48197. 8013fb2: e003 b.n 8013fbc <_printf_i+0xc4>
  48198. 8013fb4: 0645 lsls r5, r0, #25
  48199. 8013fb6: d5fb bpl.n 8013fb0 <_printf_i+0xb8>
  48200. 8013fb8: f9b3 5000 ldrsh.w r5, [r3]
  48201. 8013fbc: 2d00 cmp r5, #0
  48202. 8013fbe: da03 bge.n 8013fc8 <_printf_i+0xd0>
  48203. 8013fc0: 232d movs r3, #45 @ 0x2d
  48204. 8013fc2: 426d negs r5, r5
  48205. 8013fc4: f884 3043 strb.w r3, [r4, #67] @ 0x43
  48206. 8013fc8: 4859 ldr r0, [pc, #356] @ (8014130 <_printf_i+0x238>)
  48207. 8013fca: 230a movs r3, #10
  48208. 8013fcc: e011 b.n 8013ff2 <_printf_i+0xfa>
  48209. 8013fce: 6821 ldr r1, [r4, #0]
  48210. 8013fd0: 6833 ldr r3, [r6, #0]
  48211. 8013fd2: 0608 lsls r0, r1, #24
  48212. 8013fd4: f853 5b04 ldr.w r5, [r3], #4
  48213. 8013fd8: d402 bmi.n 8013fe0 <_printf_i+0xe8>
  48214. 8013fda: 0649 lsls r1, r1, #25
  48215. 8013fdc: bf48 it mi
  48216. 8013fde: b2ad uxthmi r5, r5
  48217. 8013fe0: 2f6f cmp r7, #111 @ 0x6f
  48218. 8013fe2: 4853 ldr r0, [pc, #332] @ (8014130 <_printf_i+0x238>)
  48219. 8013fe4: 6033 str r3, [r6, #0]
  48220. 8013fe6: bf14 ite ne
  48221. 8013fe8: 230a movne r3, #10
  48222. 8013fea: 2308 moveq r3, #8
  48223. 8013fec: 2100 movs r1, #0
  48224. 8013fee: f884 1043 strb.w r1, [r4, #67] @ 0x43
  48225. 8013ff2: 6866 ldr r6, [r4, #4]
  48226. 8013ff4: 60a6 str r6, [r4, #8]
  48227. 8013ff6: 2e00 cmp r6, #0
  48228. 8013ff8: bfa2 ittt ge
  48229. 8013ffa: 6821 ldrge r1, [r4, #0]
  48230. 8013ffc: f021 0104 bicge.w r1, r1, #4
  48231. 8014000: 6021 strge r1, [r4, #0]
  48232. 8014002: b90d cbnz r5, 8014008 <_printf_i+0x110>
  48233. 8014004: 2e00 cmp r6, #0
  48234. 8014006: d04b beq.n 80140a0 <_printf_i+0x1a8>
  48235. 8014008: 4616 mov r6, r2
  48236. 801400a: fbb5 f1f3 udiv r1, r5, r3
  48237. 801400e: fb03 5711 mls r7, r3, r1, r5
  48238. 8014012: 5dc7 ldrb r7, [r0, r7]
  48239. 8014014: f806 7d01 strb.w r7, [r6, #-1]!
  48240. 8014018: 462f mov r7, r5
  48241. 801401a: 42bb cmp r3, r7
  48242. 801401c: 460d mov r5, r1
  48243. 801401e: d9f4 bls.n 801400a <_printf_i+0x112>
  48244. 8014020: 2b08 cmp r3, #8
  48245. 8014022: d10b bne.n 801403c <_printf_i+0x144>
  48246. 8014024: 6823 ldr r3, [r4, #0]
  48247. 8014026: 07df lsls r7, r3, #31
  48248. 8014028: d508 bpl.n 801403c <_printf_i+0x144>
  48249. 801402a: 6923 ldr r3, [r4, #16]
  48250. 801402c: 6861 ldr r1, [r4, #4]
  48251. 801402e: 4299 cmp r1, r3
  48252. 8014030: bfde ittt le
  48253. 8014032: 2330 movle r3, #48 @ 0x30
  48254. 8014034: f806 3c01 strble.w r3, [r6, #-1]
  48255. 8014038: f106 36ff addle.w r6, r6, #4294967295 @ 0xffffffff
  48256. 801403c: 1b92 subs r2, r2, r6
  48257. 801403e: 6122 str r2, [r4, #16]
  48258. 8014040: f8cd a000 str.w sl, [sp]
  48259. 8014044: 464b mov r3, r9
  48260. 8014046: aa03 add r2, sp, #12
  48261. 8014048: 4621 mov r1, r4
  48262. 801404a: 4640 mov r0, r8
  48263. 801404c: f7ff fee6 bl 8013e1c <_printf_common>
  48264. 8014050: 3001 adds r0, #1
  48265. 8014052: d14a bne.n 80140ea <_printf_i+0x1f2>
  48266. 8014054: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff
  48267. 8014058: b004 add sp, #16
  48268. 801405a: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
  48269. 801405e: 6823 ldr r3, [r4, #0]
  48270. 8014060: f043 0320 orr.w r3, r3, #32
  48271. 8014064: 6023 str r3, [r4, #0]
  48272. 8014066: 4833 ldr r0, [pc, #204] @ (8014134 <_printf_i+0x23c>)
  48273. 8014068: 2778 movs r7, #120 @ 0x78
  48274. 801406a: f884 7045 strb.w r7, [r4, #69] @ 0x45
  48275. 801406e: 6823 ldr r3, [r4, #0]
  48276. 8014070: 6831 ldr r1, [r6, #0]
  48277. 8014072: 061f lsls r7, r3, #24
  48278. 8014074: f851 5b04 ldr.w r5, [r1], #4
  48279. 8014078: d402 bmi.n 8014080 <_printf_i+0x188>
  48280. 801407a: 065f lsls r7, r3, #25
  48281. 801407c: bf48 it mi
  48282. 801407e: b2ad uxthmi r5, r5
  48283. 8014080: 6031 str r1, [r6, #0]
  48284. 8014082: 07d9 lsls r1, r3, #31
  48285. 8014084: bf44 itt mi
  48286. 8014086: f043 0320 orrmi.w r3, r3, #32
  48287. 801408a: 6023 strmi r3, [r4, #0]
  48288. 801408c: b11d cbz r5, 8014096 <_printf_i+0x19e>
  48289. 801408e: 2310 movs r3, #16
  48290. 8014090: e7ac b.n 8013fec <_printf_i+0xf4>
  48291. 8014092: 4827 ldr r0, [pc, #156] @ (8014130 <_printf_i+0x238>)
  48292. 8014094: e7e9 b.n 801406a <_printf_i+0x172>
  48293. 8014096: 6823 ldr r3, [r4, #0]
  48294. 8014098: f023 0320 bic.w r3, r3, #32
  48295. 801409c: 6023 str r3, [r4, #0]
  48296. 801409e: e7f6 b.n 801408e <_printf_i+0x196>
  48297. 80140a0: 4616 mov r6, r2
  48298. 80140a2: e7bd b.n 8014020 <_printf_i+0x128>
  48299. 80140a4: 6833 ldr r3, [r6, #0]
  48300. 80140a6: 6825 ldr r5, [r4, #0]
  48301. 80140a8: 6961 ldr r1, [r4, #20]
  48302. 80140aa: 1d18 adds r0, r3, #4
  48303. 80140ac: 6030 str r0, [r6, #0]
  48304. 80140ae: 062e lsls r6, r5, #24
  48305. 80140b0: 681b ldr r3, [r3, #0]
  48306. 80140b2: d501 bpl.n 80140b8 <_printf_i+0x1c0>
  48307. 80140b4: 6019 str r1, [r3, #0]
  48308. 80140b6: e002 b.n 80140be <_printf_i+0x1c6>
  48309. 80140b8: 0668 lsls r0, r5, #25
  48310. 80140ba: d5fb bpl.n 80140b4 <_printf_i+0x1bc>
  48311. 80140bc: 8019 strh r1, [r3, #0]
  48312. 80140be: 2300 movs r3, #0
  48313. 80140c0: 6123 str r3, [r4, #16]
  48314. 80140c2: 4616 mov r6, r2
  48315. 80140c4: e7bc b.n 8014040 <_printf_i+0x148>
  48316. 80140c6: 6833 ldr r3, [r6, #0]
  48317. 80140c8: 1d1a adds r2, r3, #4
  48318. 80140ca: 6032 str r2, [r6, #0]
  48319. 80140cc: 681e ldr r6, [r3, #0]
  48320. 80140ce: 6862 ldr r2, [r4, #4]
  48321. 80140d0: 2100 movs r1, #0
  48322. 80140d2: 4630 mov r0, r6
  48323. 80140d4: f7ec f904 bl 80002e0 <memchr>
  48324. 80140d8: b108 cbz r0, 80140de <_printf_i+0x1e6>
  48325. 80140da: 1b80 subs r0, r0, r6
  48326. 80140dc: 6060 str r0, [r4, #4]
  48327. 80140de: 6863 ldr r3, [r4, #4]
  48328. 80140e0: 6123 str r3, [r4, #16]
  48329. 80140e2: 2300 movs r3, #0
  48330. 80140e4: f884 3043 strb.w r3, [r4, #67] @ 0x43
  48331. 80140e8: e7aa b.n 8014040 <_printf_i+0x148>
  48332. 80140ea: 6923 ldr r3, [r4, #16]
  48333. 80140ec: 4632 mov r2, r6
  48334. 80140ee: 4649 mov r1, r9
  48335. 80140f0: 4640 mov r0, r8
  48336. 80140f2: 47d0 blx sl
  48337. 80140f4: 3001 adds r0, #1
  48338. 80140f6: d0ad beq.n 8014054 <_printf_i+0x15c>
  48339. 80140f8: 6823 ldr r3, [r4, #0]
  48340. 80140fa: 079b lsls r3, r3, #30
  48341. 80140fc: d413 bmi.n 8014126 <_printf_i+0x22e>
  48342. 80140fe: 68e0 ldr r0, [r4, #12]
  48343. 8014100: 9b03 ldr r3, [sp, #12]
  48344. 8014102: 4298 cmp r0, r3
  48345. 8014104: bfb8 it lt
  48346. 8014106: 4618 movlt r0, r3
  48347. 8014108: e7a6 b.n 8014058 <_printf_i+0x160>
  48348. 801410a: 2301 movs r3, #1
  48349. 801410c: 4632 mov r2, r6
  48350. 801410e: 4649 mov r1, r9
  48351. 8014110: 4640 mov r0, r8
  48352. 8014112: 47d0 blx sl
  48353. 8014114: 3001 adds r0, #1
  48354. 8014116: d09d beq.n 8014054 <_printf_i+0x15c>
  48355. 8014118: 3501 adds r5, #1
  48356. 801411a: 68e3 ldr r3, [r4, #12]
  48357. 801411c: 9903 ldr r1, [sp, #12]
  48358. 801411e: 1a5b subs r3, r3, r1
  48359. 8014120: 42ab cmp r3, r5
  48360. 8014122: dcf2 bgt.n 801410a <_printf_i+0x212>
  48361. 8014124: e7eb b.n 80140fe <_printf_i+0x206>
  48362. 8014126: 2500 movs r5, #0
  48363. 8014128: f104 0619 add.w r6, r4, #25
  48364. 801412c: e7f5 b.n 801411a <_printf_i+0x222>
  48365. 801412e: bf00 nop
  48366. 8014130: 08014635 .word 0x08014635
  48367. 8014134: 08014646 .word 0x08014646
  48368. 08014138 <__sflush_r>:
  48369. 8014138: f9b1 200c ldrsh.w r2, [r1, #12]
  48370. 801413c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
  48371. 8014140: 0716 lsls r6, r2, #28
  48372. 8014142: 4605 mov r5, r0
  48373. 8014144: 460c mov r4, r1
  48374. 8014146: d454 bmi.n 80141f2 <__sflush_r+0xba>
  48375. 8014148: 684b ldr r3, [r1, #4]
  48376. 801414a: 2b00 cmp r3, #0
  48377. 801414c: dc02 bgt.n 8014154 <__sflush_r+0x1c>
  48378. 801414e: 6c0b ldr r3, [r1, #64] @ 0x40
  48379. 8014150: 2b00 cmp r3, #0
  48380. 8014152: dd48 ble.n 80141e6 <__sflush_r+0xae>
  48381. 8014154: 6ae6 ldr r6, [r4, #44] @ 0x2c
  48382. 8014156: 2e00 cmp r6, #0
  48383. 8014158: d045 beq.n 80141e6 <__sflush_r+0xae>
  48384. 801415a: 2300 movs r3, #0
  48385. 801415c: f412 5280 ands.w r2, r2, #4096 @ 0x1000
  48386. 8014160: 682f ldr r7, [r5, #0]
  48387. 8014162: 6a21 ldr r1, [r4, #32]
  48388. 8014164: 602b str r3, [r5, #0]
  48389. 8014166: d030 beq.n 80141ca <__sflush_r+0x92>
  48390. 8014168: 6d62 ldr r2, [r4, #84] @ 0x54
  48391. 801416a: 89a3 ldrh r3, [r4, #12]
  48392. 801416c: 0759 lsls r1, r3, #29
  48393. 801416e: d505 bpl.n 801417c <__sflush_r+0x44>
  48394. 8014170: 6863 ldr r3, [r4, #4]
  48395. 8014172: 1ad2 subs r2, r2, r3
  48396. 8014174: 6b63 ldr r3, [r4, #52] @ 0x34
  48397. 8014176: b10b cbz r3, 801417c <__sflush_r+0x44>
  48398. 8014178: 6c23 ldr r3, [r4, #64] @ 0x40
  48399. 801417a: 1ad2 subs r2, r2, r3
  48400. 801417c: 2300 movs r3, #0
  48401. 801417e: 6ae6 ldr r6, [r4, #44] @ 0x2c
  48402. 8014180: 6a21 ldr r1, [r4, #32]
  48403. 8014182: 4628 mov r0, r5
  48404. 8014184: 47b0 blx r6
  48405. 8014186: 1c43 adds r3, r0, #1
  48406. 8014188: 89a3 ldrh r3, [r4, #12]
  48407. 801418a: d106 bne.n 801419a <__sflush_r+0x62>
  48408. 801418c: 6829 ldr r1, [r5, #0]
  48409. 801418e: 291d cmp r1, #29
  48410. 8014190: d82b bhi.n 80141ea <__sflush_r+0xb2>
  48411. 8014192: 4a2a ldr r2, [pc, #168] @ (801423c <__sflush_r+0x104>)
  48412. 8014194: 410a asrs r2, r1
  48413. 8014196: 07d6 lsls r6, r2, #31
  48414. 8014198: d427 bmi.n 80141ea <__sflush_r+0xb2>
  48415. 801419a: 2200 movs r2, #0
  48416. 801419c: 6062 str r2, [r4, #4]
  48417. 801419e: 04d9 lsls r1, r3, #19
  48418. 80141a0: 6922 ldr r2, [r4, #16]
  48419. 80141a2: 6022 str r2, [r4, #0]
  48420. 80141a4: d504 bpl.n 80141b0 <__sflush_r+0x78>
  48421. 80141a6: 1c42 adds r2, r0, #1
  48422. 80141a8: d101 bne.n 80141ae <__sflush_r+0x76>
  48423. 80141aa: 682b ldr r3, [r5, #0]
  48424. 80141ac: b903 cbnz r3, 80141b0 <__sflush_r+0x78>
  48425. 80141ae: 6560 str r0, [r4, #84] @ 0x54
  48426. 80141b0: 6b61 ldr r1, [r4, #52] @ 0x34
  48427. 80141b2: 602f str r7, [r5, #0]
  48428. 80141b4: b1b9 cbz r1, 80141e6 <__sflush_r+0xae>
  48429. 80141b6: f104 0344 add.w r3, r4, #68 @ 0x44
  48430. 80141ba: 4299 cmp r1, r3
  48431. 80141bc: d002 beq.n 80141c4 <__sflush_r+0x8c>
  48432. 80141be: 4628 mov r0, r5
  48433. 80141c0: f7ff fbf2 bl 80139a8 <_free_r>
  48434. 80141c4: 2300 movs r3, #0
  48435. 80141c6: 6363 str r3, [r4, #52] @ 0x34
  48436. 80141c8: e00d b.n 80141e6 <__sflush_r+0xae>
  48437. 80141ca: 2301 movs r3, #1
  48438. 80141cc: 4628 mov r0, r5
  48439. 80141ce: 47b0 blx r6
  48440. 80141d0: 4602 mov r2, r0
  48441. 80141d2: 1c50 adds r0, r2, #1
  48442. 80141d4: d1c9 bne.n 801416a <__sflush_r+0x32>
  48443. 80141d6: 682b ldr r3, [r5, #0]
  48444. 80141d8: 2b00 cmp r3, #0
  48445. 80141da: d0c6 beq.n 801416a <__sflush_r+0x32>
  48446. 80141dc: 2b1d cmp r3, #29
  48447. 80141de: d001 beq.n 80141e4 <__sflush_r+0xac>
  48448. 80141e0: 2b16 cmp r3, #22
  48449. 80141e2: d11e bne.n 8014222 <__sflush_r+0xea>
  48450. 80141e4: 602f str r7, [r5, #0]
  48451. 80141e6: 2000 movs r0, #0
  48452. 80141e8: e022 b.n 8014230 <__sflush_r+0xf8>
  48453. 80141ea: f043 0340 orr.w r3, r3, #64 @ 0x40
  48454. 80141ee: b21b sxth r3, r3
  48455. 80141f0: e01b b.n 801422a <__sflush_r+0xf2>
  48456. 80141f2: 690f ldr r7, [r1, #16]
  48457. 80141f4: 2f00 cmp r7, #0
  48458. 80141f6: d0f6 beq.n 80141e6 <__sflush_r+0xae>
  48459. 80141f8: 0793 lsls r3, r2, #30
  48460. 80141fa: 680e ldr r6, [r1, #0]
  48461. 80141fc: bf08 it eq
  48462. 80141fe: 694b ldreq r3, [r1, #20]
  48463. 8014200: 600f str r7, [r1, #0]
  48464. 8014202: bf18 it ne
  48465. 8014204: 2300 movne r3, #0
  48466. 8014206: eba6 0807 sub.w r8, r6, r7
  48467. 801420a: 608b str r3, [r1, #8]
  48468. 801420c: f1b8 0f00 cmp.w r8, #0
  48469. 8014210: dde9 ble.n 80141e6 <__sflush_r+0xae>
  48470. 8014212: 6a21 ldr r1, [r4, #32]
  48471. 8014214: 6aa6 ldr r6, [r4, #40] @ 0x28
  48472. 8014216: 4643 mov r3, r8
  48473. 8014218: 463a mov r2, r7
  48474. 801421a: 4628 mov r0, r5
  48475. 801421c: 47b0 blx r6
  48476. 801421e: 2800 cmp r0, #0
  48477. 8014220: dc08 bgt.n 8014234 <__sflush_r+0xfc>
  48478. 8014222: f9b4 300c ldrsh.w r3, [r4, #12]
  48479. 8014226: f043 0340 orr.w r3, r3, #64 @ 0x40
  48480. 801422a: 81a3 strh r3, [r4, #12]
  48481. 801422c: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff
  48482. 8014230: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
  48483. 8014234: 4407 add r7, r0
  48484. 8014236: eba8 0800 sub.w r8, r8, r0
  48485. 801423a: e7e7 b.n 801420c <__sflush_r+0xd4>
  48486. 801423c: dfbffffe .word 0xdfbffffe
  48487. 08014240 <_fflush_r>:
  48488. 8014240: b538 push {r3, r4, r5, lr}
  48489. 8014242: 690b ldr r3, [r1, #16]
  48490. 8014244: 4605 mov r5, r0
  48491. 8014246: 460c mov r4, r1
  48492. 8014248: b913 cbnz r3, 8014250 <_fflush_r+0x10>
  48493. 801424a: 2500 movs r5, #0
  48494. 801424c: 4628 mov r0, r5
  48495. 801424e: bd38 pop {r3, r4, r5, pc}
  48496. 8014250: b118 cbz r0, 801425a <_fflush_r+0x1a>
  48497. 8014252: 6a03 ldr r3, [r0, #32]
  48498. 8014254: b90b cbnz r3, 801425a <_fflush_r+0x1a>
  48499. 8014256: f7ff fa3b bl 80136d0 <__sinit>
  48500. 801425a: f9b4 300c ldrsh.w r3, [r4, #12]
  48501. 801425e: 2b00 cmp r3, #0
  48502. 8014260: d0f3 beq.n 801424a <_fflush_r+0xa>
  48503. 8014262: 6e62 ldr r2, [r4, #100] @ 0x64
  48504. 8014264: 07d0 lsls r0, r2, #31
  48505. 8014266: d404 bmi.n 8014272 <_fflush_r+0x32>
  48506. 8014268: 0599 lsls r1, r3, #22
  48507. 801426a: d402 bmi.n 8014272 <_fflush_r+0x32>
  48508. 801426c: 6da0 ldr r0, [r4, #88] @ 0x58
  48509. 801426e: f7ff fb8a bl 8013986 <__retarget_lock_acquire_recursive>
  48510. 8014272: 4628 mov r0, r5
  48511. 8014274: 4621 mov r1, r4
  48512. 8014276: f7ff ff5f bl 8014138 <__sflush_r>
  48513. 801427a: 6e63 ldr r3, [r4, #100] @ 0x64
  48514. 801427c: 07da lsls r2, r3, #31
  48515. 801427e: 4605 mov r5, r0
  48516. 8014280: d4e4 bmi.n 801424c <_fflush_r+0xc>
  48517. 8014282: 89a3 ldrh r3, [r4, #12]
  48518. 8014284: 059b lsls r3, r3, #22
  48519. 8014286: d4e1 bmi.n 801424c <_fflush_r+0xc>
  48520. 8014288: 6da0 ldr r0, [r4, #88] @ 0x58
  48521. 801428a: f7ff fb7d bl 8013988 <__retarget_lock_release_recursive>
  48522. 801428e: e7dd b.n 801424c <_fflush_r+0xc>
  48523. 08014290 <__swbuf_r>:
  48524. 8014290: b5f8 push {r3, r4, r5, r6, r7, lr}
  48525. 8014292: 460e mov r6, r1
  48526. 8014294: 4614 mov r4, r2
  48527. 8014296: 4605 mov r5, r0
  48528. 8014298: b118 cbz r0, 80142a2 <__swbuf_r+0x12>
  48529. 801429a: 6a03 ldr r3, [r0, #32]
  48530. 801429c: b90b cbnz r3, 80142a2 <__swbuf_r+0x12>
  48531. 801429e: f7ff fa17 bl 80136d0 <__sinit>
  48532. 80142a2: 69a3 ldr r3, [r4, #24]
  48533. 80142a4: 60a3 str r3, [r4, #8]
  48534. 80142a6: 89a3 ldrh r3, [r4, #12]
  48535. 80142a8: 071a lsls r2, r3, #28
  48536. 80142aa: d501 bpl.n 80142b0 <__swbuf_r+0x20>
  48537. 80142ac: 6923 ldr r3, [r4, #16]
  48538. 80142ae: b943 cbnz r3, 80142c2 <__swbuf_r+0x32>
  48539. 80142b0: 4621 mov r1, r4
  48540. 80142b2: 4628 mov r0, r5
  48541. 80142b4: f000 f82a bl 801430c <__swsetup_r>
  48542. 80142b8: b118 cbz r0, 80142c2 <__swbuf_r+0x32>
  48543. 80142ba: f04f 37ff mov.w r7, #4294967295 @ 0xffffffff
  48544. 80142be: 4638 mov r0, r7
  48545. 80142c0: bdf8 pop {r3, r4, r5, r6, r7, pc}
  48546. 80142c2: 6823 ldr r3, [r4, #0]
  48547. 80142c4: 6922 ldr r2, [r4, #16]
  48548. 80142c6: 1a98 subs r0, r3, r2
  48549. 80142c8: 6963 ldr r3, [r4, #20]
  48550. 80142ca: b2f6 uxtb r6, r6
  48551. 80142cc: 4283 cmp r3, r0
  48552. 80142ce: 4637 mov r7, r6
  48553. 80142d0: dc05 bgt.n 80142de <__swbuf_r+0x4e>
  48554. 80142d2: 4621 mov r1, r4
  48555. 80142d4: 4628 mov r0, r5
  48556. 80142d6: f7ff ffb3 bl 8014240 <_fflush_r>
  48557. 80142da: 2800 cmp r0, #0
  48558. 80142dc: d1ed bne.n 80142ba <__swbuf_r+0x2a>
  48559. 80142de: 68a3 ldr r3, [r4, #8]
  48560. 80142e0: 3b01 subs r3, #1
  48561. 80142e2: 60a3 str r3, [r4, #8]
  48562. 80142e4: 6823 ldr r3, [r4, #0]
  48563. 80142e6: 1c5a adds r2, r3, #1
  48564. 80142e8: 6022 str r2, [r4, #0]
  48565. 80142ea: 701e strb r6, [r3, #0]
  48566. 80142ec: 6962 ldr r2, [r4, #20]
  48567. 80142ee: 1c43 adds r3, r0, #1
  48568. 80142f0: 429a cmp r2, r3
  48569. 80142f2: d004 beq.n 80142fe <__swbuf_r+0x6e>
  48570. 80142f4: 89a3 ldrh r3, [r4, #12]
  48571. 80142f6: 07db lsls r3, r3, #31
  48572. 80142f8: d5e1 bpl.n 80142be <__swbuf_r+0x2e>
  48573. 80142fa: 2e0a cmp r6, #10
  48574. 80142fc: d1df bne.n 80142be <__swbuf_r+0x2e>
  48575. 80142fe: 4621 mov r1, r4
  48576. 8014300: 4628 mov r0, r5
  48577. 8014302: f7ff ff9d bl 8014240 <_fflush_r>
  48578. 8014306: 2800 cmp r0, #0
  48579. 8014308: d0d9 beq.n 80142be <__swbuf_r+0x2e>
  48580. 801430a: e7d6 b.n 80142ba <__swbuf_r+0x2a>
  48581. 0801430c <__swsetup_r>:
  48582. 801430c: b538 push {r3, r4, r5, lr}
  48583. 801430e: 4b29 ldr r3, [pc, #164] @ (80143b4 <__swsetup_r+0xa8>)
  48584. 8014310: 4605 mov r5, r0
  48585. 8014312: 6818 ldr r0, [r3, #0]
  48586. 8014314: 460c mov r4, r1
  48587. 8014316: b118 cbz r0, 8014320 <__swsetup_r+0x14>
  48588. 8014318: 6a03 ldr r3, [r0, #32]
  48589. 801431a: b90b cbnz r3, 8014320 <__swsetup_r+0x14>
  48590. 801431c: f7ff f9d8 bl 80136d0 <__sinit>
  48591. 8014320: f9b4 300c ldrsh.w r3, [r4, #12]
  48592. 8014324: 0719 lsls r1, r3, #28
  48593. 8014326: d422 bmi.n 801436e <__swsetup_r+0x62>
  48594. 8014328: 06da lsls r2, r3, #27
  48595. 801432a: d407 bmi.n 801433c <__swsetup_r+0x30>
  48596. 801432c: 2209 movs r2, #9
  48597. 801432e: 602a str r2, [r5, #0]
  48598. 8014330: f043 0340 orr.w r3, r3, #64 @ 0x40
  48599. 8014334: 81a3 strh r3, [r4, #12]
  48600. 8014336: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff
  48601. 801433a: e033 b.n 80143a4 <__swsetup_r+0x98>
  48602. 801433c: 0758 lsls r0, r3, #29
  48603. 801433e: d512 bpl.n 8014366 <__swsetup_r+0x5a>
  48604. 8014340: 6b61 ldr r1, [r4, #52] @ 0x34
  48605. 8014342: b141 cbz r1, 8014356 <__swsetup_r+0x4a>
  48606. 8014344: f104 0344 add.w r3, r4, #68 @ 0x44
  48607. 8014348: 4299 cmp r1, r3
  48608. 801434a: d002 beq.n 8014352 <__swsetup_r+0x46>
  48609. 801434c: 4628 mov r0, r5
  48610. 801434e: f7ff fb2b bl 80139a8 <_free_r>
  48611. 8014352: 2300 movs r3, #0
  48612. 8014354: 6363 str r3, [r4, #52] @ 0x34
  48613. 8014356: 89a3 ldrh r3, [r4, #12]
  48614. 8014358: f023 0324 bic.w r3, r3, #36 @ 0x24
  48615. 801435c: 81a3 strh r3, [r4, #12]
  48616. 801435e: 2300 movs r3, #0
  48617. 8014360: 6063 str r3, [r4, #4]
  48618. 8014362: 6923 ldr r3, [r4, #16]
  48619. 8014364: 6023 str r3, [r4, #0]
  48620. 8014366: 89a3 ldrh r3, [r4, #12]
  48621. 8014368: f043 0308 orr.w r3, r3, #8
  48622. 801436c: 81a3 strh r3, [r4, #12]
  48623. 801436e: 6923 ldr r3, [r4, #16]
  48624. 8014370: b94b cbnz r3, 8014386 <__swsetup_r+0x7a>
  48625. 8014372: 89a3 ldrh r3, [r4, #12]
  48626. 8014374: f403 7320 and.w r3, r3, #640 @ 0x280
  48627. 8014378: f5b3 7f00 cmp.w r3, #512 @ 0x200
  48628. 801437c: d003 beq.n 8014386 <__swsetup_r+0x7a>
  48629. 801437e: 4621 mov r1, r4
  48630. 8014380: 4628 mov r0, r5
  48631. 8014382: f000 f84f bl 8014424 <__smakebuf_r>
  48632. 8014386: f9b4 300c ldrsh.w r3, [r4, #12]
  48633. 801438a: f013 0201 ands.w r2, r3, #1
  48634. 801438e: d00a beq.n 80143a6 <__swsetup_r+0x9a>
  48635. 8014390: 2200 movs r2, #0
  48636. 8014392: 60a2 str r2, [r4, #8]
  48637. 8014394: 6962 ldr r2, [r4, #20]
  48638. 8014396: 4252 negs r2, r2
  48639. 8014398: 61a2 str r2, [r4, #24]
  48640. 801439a: 6922 ldr r2, [r4, #16]
  48641. 801439c: b942 cbnz r2, 80143b0 <__swsetup_r+0xa4>
  48642. 801439e: f013 0080 ands.w r0, r3, #128 @ 0x80
  48643. 80143a2: d1c5 bne.n 8014330 <__swsetup_r+0x24>
  48644. 80143a4: bd38 pop {r3, r4, r5, pc}
  48645. 80143a6: 0799 lsls r1, r3, #30
  48646. 80143a8: bf58 it pl
  48647. 80143aa: 6962 ldrpl r2, [r4, #20]
  48648. 80143ac: 60a2 str r2, [r4, #8]
  48649. 80143ae: e7f4 b.n 801439a <__swsetup_r+0x8e>
  48650. 80143b0: 2000 movs r0, #0
  48651. 80143b2: e7f7 b.n 80143a4 <__swsetup_r+0x98>
  48652. 80143b4: 24000054 .word 0x24000054
  48653. 080143b8 <_sbrk_r>:
  48654. 80143b8: b538 push {r3, r4, r5, lr}
  48655. 80143ba: 4d06 ldr r5, [pc, #24] @ (80143d4 <_sbrk_r+0x1c>)
  48656. 80143bc: 2300 movs r3, #0
  48657. 80143be: 4604 mov r4, r0
  48658. 80143c0: 4608 mov r0, r1
  48659. 80143c2: 602b str r3, [r5, #0]
  48660. 80143c4: f7ee f9f8 bl 80027b8 <_sbrk>
  48661. 80143c8: 1c43 adds r3, r0, #1
  48662. 80143ca: d102 bne.n 80143d2 <_sbrk_r+0x1a>
  48663. 80143cc: 682b ldr r3, [r5, #0]
  48664. 80143ce: b103 cbz r3, 80143d2 <_sbrk_r+0x1a>
  48665. 80143d0: 6023 str r3, [r4, #0]
  48666. 80143d2: bd38 pop {r3, r4, r5, pc}
  48667. 80143d4: 24012b84 .word 0x24012b84
  48668. 080143d8 <__swhatbuf_r>:
  48669. 80143d8: b570 push {r4, r5, r6, lr}
  48670. 80143da: 460c mov r4, r1
  48671. 80143dc: f9b1 100e ldrsh.w r1, [r1, #14]
  48672. 80143e0: 2900 cmp r1, #0
  48673. 80143e2: b096 sub sp, #88 @ 0x58
  48674. 80143e4: 4615 mov r5, r2
  48675. 80143e6: 461e mov r6, r3
  48676. 80143e8: da0d bge.n 8014406 <__swhatbuf_r+0x2e>
  48677. 80143ea: 89a3 ldrh r3, [r4, #12]
  48678. 80143ec: f013 0f80 tst.w r3, #128 @ 0x80
  48679. 80143f0: f04f 0100 mov.w r1, #0
  48680. 80143f4: bf14 ite ne
  48681. 80143f6: 2340 movne r3, #64 @ 0x40
  48682. 80143f8: f44f 6380 moveq.w r3, #1024 @ 0x400
  48683. 80143fc: 2000 movs r0, #0
  48684. 80143fe: 6031 str r1, [r6, #0]
  48685. 8014400: 602b str r3, [r5, #0]
  48686. 8014402: b016 add sp, #88 @ 0x58
  48687. 8014404: bd70 pop {r4, r5, r6, pc}
  48688. 8014406: 466a mov r2, sp
  48689. 8014408: f000 f848 bl 801449c <_fstat_r>
  48690. 801440c: 2800 cmp r0, #0
  48691. 801440e: dbec blt.n 80143ea <__swhatbuf_r+0x12>
  48692. 8014410: 9901 ldr r1, [sp, #4]
  48693. 8014412: f401 4170 and.w r1, r1, #61440 @ 0xf000
  48694. 8014416: f5a1 5300 sub.w r3, r1, #8192 @ 0x2000
  48695. 801441a: 4259 negs r1, r3
  48696. 801441c: 4159 adcs r1, r3
  48697. 801441e: f44f 6380 mov.w r3, #1024 @ 0x400
  48698. 8014422: e7eb b.n 80143fc <__swhatbuf_r+0x24>
  48699. 08014424 <__smakebuf_r>:
  48700. 8014424: 898b ldrh r3, [r1, #12]
  48701. 8014426: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr}
  48702. 8014428: 079d lsls r5, r3, #30
  48703. 801442a: 4606 mov r6, r0
  48704. 801442c: 460c mov r4, r1
  48705. 801442e: d507 bpl.n 8014440 <__smakebuf_r+0x1c>
  48706. 8014430: f104 0347 add.w r3, r4, #71 @ 0x47
  48707. 8014434: 6023 str r3, [r4, #0]
  48708. 8014436: 6123 str r3, [r4, #16]
  48709. 8014438: 2301 movs r3, #1
  48710. 801443a: 6163 str r3, [r4, #20]
  48711. 801443c: b003 add sp, #12
  48712. 801443e: bdf0 pop {r4, r5, r6, r7, pc}
  48713. 8014440: ab01 add r3, sp, #4
  48714. 8014442: 466a mov r2, sp
  48715. 8014444: f7ff ffc8 bl 80143d8 <__swhatbuf_r>
  48716. 8014448: 9f00 ldr r7, [sp, #0]
  48717. 801444a: 4605 mov r5, r0
  48718. 801444c: 4639 mov r1, r7
  48719. 801444e: 4630 mov r0, r6
  48720. 8014450: f7ff fb16 bl 8013a80 <_malloc_r>
  48721. 8014454: b948 cbnz r0, 801446a <__smakebuf_r+0x46>
  48722. 8014456: f9b4 300c ldrsh.w r3, [r4, #12]
  48723. 801445a: 059a lsls r2, r3, #22
  48724. 801445c: d4ee bmi.n 801443c <__smakebuf_r+0x18>
  48725. 801445e: f023 0303 bic.w r3, r3, #3
  48726. 8014462: f043 0302 orr.w r3, r3, #2
  48727. 8014466: 81a3 strh r3, [r4, #12]
  48728. 8014468: e7e2 b.n 8014430 <__smakebuf_r+0xc>
  48729. 801446a: 89a3 ldrh r3, [r4, #12]
  48730. 801446c: 6020 str r0, [r4, #0]
  48731. 801446e: f043 0380 orr.w r3, r3, #128 @ 0x80
  48732. 8014472: 81a3 strh r3, [r4, #12]
  48733. 8014474: 9b01 ldr r3, [sp, #4]
  48734. 8014476: e9c4 0704 strd r0, r7, [r4, #16]
  48735. 801447a: b15b cbz r3, 8014494 <__smakebuf_r+0x70>
  48736. 801447c: f9b4 100e ldrsh.w r1, [r4, #14]
  48737. 8014480: 4630 mov r0, r6
  48738. 8014482: f000 f81d bl 80144c0 <_isatty_r>
  48739. 8014486: b128 cbz r0, 8014494 <__smakebuf_r+0x70>
  48740. 8014488: 89a3 ldrh r3, [r4, #12]
  48741. 801448a: f023 0303 bic.w r3, r3, #3
  48742. 801448e: f043 0301 orr.w r3, r3, #1
  48743. 8014492: 81a3 strh r3, [r4, #12]
  48744. 8014494: 89a3 ldrh r3, [r4, #12]
  48745. 8014496: 431d orrs r5, r3
  48746. 8014498: 81a5 strh r5, [r4, #12]
  48747. 801449a: e7cf b.n 801443c <__smakebuf_r+0x18>
  48748. 0801449c <_fstat_r>:
  48749. 801449c: b538 push {r3, r4, r5, lr}
  48750. 801449e: 4d07 ldr r5, [pc, #28] @ (80144bc <_fstat_r+0x20>)
  48751. 80144a0: 2300 movs r3, #0
  48752. 80144a2: 4604 mov r4, r0
  48753. 80144a4: 4608 mov r0, r1
  48754. 80144a6: 4611 mov r1, r2
  48755. 80144a8: 602b str r3, [r5, #0]
  48756. 80144aa: f7ee f95c bl 8002766 <_fstat>
  48757. 80144ae: 1c43 adds r3, r0, #1
  48758. 80144b0: d102 bne.n 80144b8 <_fstat_r+0x1c>
  48759. 80144b2: 682b ldr r3, [r5, #0]
  48760. 80144b4: b103 cbz r3, 80144b8 <_fstat_r+0x1c>
  48761. 80144b6: 6023 str r3, [r4, #0]
  48762. 80144b8: bd38 pop {r3, r4, r5, pc}
  48763. 80144ba: bf00 nop
  48764. 80144bc: 24012b84 .word 0x24012b84
  48765. 080144c0 <_isatty_r>:
  48766. 80144c0: b538 push {r3, r4, r5, lr}
  48767. 80144c2: 4d06 ldr r5, [pc, #24] @ (80144dc <_isatty_r+0x1c>)
  48768. 80144c4: 2300 movs r3, #0
  48769. 80144c6: 4604 mov r4, r0
  48770. 80144c8: 4608 mov r0, r1
  48771. 80144ca: 602b str r3, [r5, #0]
  48772. 80144cc: f7ee f95b bl 8002786 <_isatty>
  48773. 80144d0: 1c43 adds r3, r0, #1
  48774. 80144d2: d102 bne.n 80144da <_isatty_r+0x1a>
  48775. 80144d4: 682b ldr r3, [r5, #0]
  48776. 80144d6: b103 cbz r3, 80144da <_isatty_r+0x1a>
  48777. 80144d8: 6023 str r3, [r4, #0]
  48778. 80144da: bd38 pop {r3, r4, r5, pc}
  48779. 80144dc: 24012b84 .word 0x24012b84
  48780. 080144e0 <_init>:
  48781. 80144e0: b5f8 push {r3, r4, r5, r6, r7, lr}
  48782. 80144e2: bf00 nop
  48783. 80144e4: bcf8 pop {r3, r4, r5, r6, r7}
  48784. 80144e6: bc08 pop {r3}
  48785. 80144e8: 469e mov lr, r3
  48786. 80144ea: 4770 bx lr
  48787. 080144ec <_fini>:
  48788. 80144ec: b5f8 push {r3, r4, r5, r6, r7, lr}
  48789. 80144ee: bf00 nop
  48790. 80144f0: bcf8 pop {r3, r4, r5, r6, r7}
  48791. 80144f2: bc08 pop {r3}
  48792. 80144f4: 469e mov lr, r3
  48793. 80144f6: 4770 bx lr